summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dockerignore2
-rw-r--r--.eslintrc.yml9
-rw-r--r--.gitattributes1
-rw-r--r--.github/ISSUE_TEMPLATE.md2
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md2
-rw-r--r--.gitignore1
-rw-r--r--.gitlab-ci.yml11
-rw-r--r--.gitlab/CODEOWNERS13
-rw-r--r--.gitlab/ci/docs.gitlab-ci.yml22
-rw-r--r--.gitlab/ci/frontend.gitlab-ci.yml95
-rw-r--r--.gitlab/ci/global.gitlab-ci.yml55
-rw-r--r--.gitlab/ci/memory.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/notifications.gitlab-ci.yml29
-rw-r--r--.gitlab/ci/pages.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/qa.gitlab-ci.yml56
-rw-r--r--.gitlab/ci/rails.gitlab-ci.yml329
-rw-r--r--.gitlab/ci/reports.gitlab-ci.yml3
-rw-r--r--.gitlab/ci/review.gitlab-ci.yml153
-rw-r--r--.gitlab/ci/setup.gitlab-ci.yml5
-rw-r--r--.gitlab/ci/test-metadata.gitlab-ci.yml50
-rw-r--r--.gitlab/issue_templates/Acceptance_Testing.md12
-rw-r--r--.gitlab/issue_templates/Bug.md13
-rw-r--r--.gitlab/issue_templates/Coding style proposal.md2
-rw-r--r--.gitlab/issue_templates/Doc Review.md6
-rw-r--r--.gitlab/issue_templates/Documentation.md16
-rw-r--r--.gitlab/issue_templates/Feature Flag Roll Out.md3
-rw-r--r--.gitlab/issue_templates/Problem_Validation.md6
-rw-r--r--.gitlab/issue_templates/Security Release.md8
-rw-r--r--.gitlab/issue_templates/Test plan.md4
-rw-r--r--.gitlab/merge_request_templates/Change documentation location.md6
-rw-r--r--.gitlab/merge_request_templates/Database changes.md3
-rw-r--r--.gitlab/merge_request_templates/Documentation.md10
-rw-r--r--.haml-lint_todo.yml3
-rw-r--r--.projections.json.example36
-rw-r--r--.rubocop.yml12
-rw-r--r--.rubocop_todo.yml18
-rw-r--r--CHANGELOG-EE.md66
-rw-r--r--CHANGELOG.md79
-rw-r--r--Dangerfile1
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--GITLAB_ELASTICSEARCH_INDEXER_VERSION2
-rw-r--r--GITLAB_PAGES_VERSION2
-rw-r--r--GITLAB_SHELL_VERSION2
-rw-r--r--GITLAB_WORKHORSE_VERSION2
-rw-r--r--Gemfile16
-rw-r--r--Gemfile.lock58
-rw-r--r--PROCESS.md151
-rw-r--r--README.md4
-rw-r--r--VERSION2
-rw-r--r--app/assets/images/ci_favicons/canary/favicon_status_preparing.icobin0 -> 34494 bytes
-rw-r--r--app/assets/images/ci_favicons/favicon_status_preparing.pngbin0 -> 11341 bytes
-rw-r--r--app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js11
-rw-r--r--app/assets/javascripts/api.js22
-rw-r--r--app/assets/javascripts/autosave.js4
-rw-r--r--app/assets/javascripts/badges/components/badge_settings.vue4
-rw-r--r--app/assets/javascripts/behaviors/markdown/editor_extensions.js2
-rw-r--r--app/assets/javascripts/behaviors/markdown/nodes/audio.js53
-rw-r--r--app/assets/javascripts/behaviors/preview_markdown.js46
-rw-r--r--app/assets/javascripts/behaviors/requires_input.js2
-rw-r--r--app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js37
-rw-r--r--app/assets/javascripts/blob/blob_file_dropzone.js10
-rw-r--r--app/assets/javascripts/blob/file_template_mediator.js49
-rw-r--r--app/assets/javascripts/blob/template_selector.js13
-rw-r--r--app/assets/javascripts/blob/template_selectors/ci_yaml_selector.js1
-rw-r--r--app/assets/javascripts/blob/template_selectors/dockerfile_selector.js1
-rw-r--r--app/assets/javascripts/blob/template_selectors/gitignore_selector.js1
-rw-r--r--app/assets/javascripts/blob/template_selectors/license_selector.js1
-rw-r--r--app/assets/javascripts/blob/template_selectors/type_selector.js1
-rw-r--r--app/assets/javascripts/blob/viewer/index.js6
-rw-r--r--app/assets/javascripts/boards/components/board_blank_state.vue30
-rw-r--r--app/assets/javascripts/boards/components/board_card.vue20
-rw-r--r--app/assets/javascripts/boards/components/board_form.vue1
-rw-r--r--app/assets/javascripts/boards/components/board_list.vue218
-rw-r--r--app/assets/javascripts/boards/components/boards_selector.vue7
-rw-r--r--app/assets/javascripts/boards/components/issue_card_inner.vue12
-rw-r--r--app/assets/javascripts/boards/components/issue_time_estimate.vue2
-rw-r--r--app/assets/javascripts/boards/constants.js11
-rw-r--r--app/assets/javascripts/boards/index.js19
-rw-r--r--app/assets/javascripts/boards/mixins/issue_card_inner.js5
-rw-r--r--app/assets/javascripts/boards/models/list.js92
-rw-r--r--app/assets/javascripts/boards/services/board_service.js10
-rw-r--r--app/assets/javascripts/boards/stores/boards_store.js148
-rw-r--r--app/assets/javascripts/build_artifacts.js10
-rw-r--r--app/assets/javascripts/clusters/clusters_bundle.js9
-rw-r--r--app/assets/javascripts/clusters/components/application_row.vue9
-rw-r--r--app/assets/javascripts/clusters/components/applications.vue43
-rw-r--r--app/assets/javascripts/clusters/components/knative_domain_editor.vue2
-rw-r--r--app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue13
-rw-r--r--app/assets/javascripts/clusters/constants.js7
-rw-r--r--app/assets/javascripts/clusters/services/application_state_machine.js25
-rw-r--r--app/assets/javascripts/clusters/stores/clusters_store.js13
-rw-r--r--app/assets/javascripts/commit/image_file.js22
-rw-r--r--app/assets/javascripts/commons/vue.js4
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue13
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue17
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue393
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue63
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue53
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue0
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue0
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/constants.js7
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/index.js17
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js84
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/actions.js42
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/actions.js14
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/getters.js (renamed from app/assets/javascripts/create_cluster/eks_cluster/components/security_group_dropdown.vue)0
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/index.js13
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types.js3
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutations.js16
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/state.js5
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/index.js32
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js10
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js34
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/store/state.js21
-rw-r--r--app/assets/javascripts/create_item_dropdown.js1
-rw-r--r--app/assets/javascripts/create_label.js4
-rw-r--r--app/assets/javascripts/cycle_analytics/components/stage_card_list_item.vue2
-rw-r--r--app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js8
-rw-r--r--app/assets/javascripts/diff_notes/services/resolve.js1
-rw-r--r--app/assets/javascripts/diffs/components/commit_item.vue2
-rw-r--r--app/assets/javascripts/diffs/components/diff_file_header.vue2
-rw-r--r--app/assets/javascripts/diffs/components/inline_diff_view.vue11
-rw-r--r--app/assets/javascripts/diffs/components/parallel_diff_view.vue13
-rw-r--r--app/assets/javascripts/environments/components/stop_environment_modal.vue4
-rw-r--r--app/assets/javascripts/error_tracking/components/error_tracking_list.vue53
-rw-r--r--app/assets/javascripts/error_tracking/utils.js23
-rw-r--r--app/assets/javascripts/event_tracking/issue_sidebar.js2
-rw-r--r--app/assets/javascripts/event_tracking/notes.js2
-rw-r--r--app/assets/javascripts/filterable_list.js1
-rw-r--r--app/assets/javascripts/flash.js11
-rw-r--r--app/assets/javascripts/gfm_auto_complete.js1
-rw-r--r--app/assets/javascripts/gl_dropdown.js140
-rw-r--r--app/assets/javascripts/groups/components/group_item.vue6
-rw-r--r--app/assets/javascripts/groups/components/item_actions.vue4
-rw-r--r--app/assets/javascripts/groups_select.js175
-rw-r--r--app/assets/javascripts/header.js5
-rw-r--r--app/assets/javascripts/ide/.eslintrc.yml3
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue7
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/list.vue4
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/list_collapsed.vue4
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/list_item.vue5
-rw-r--r--app/assets/javascripts/ide/components/commit_sidebar/stage_button.vue4
-rw-r--r--app/assets/javascripts/ide/components/external_link.vue2
-rw-r--r--app/assets/javascripts/ide/components/file_row_extra.vue12
-rw-r--r--app/assets/javascripts/ide/components/ide_tree_list.vue7
-rw-r--r--app/assets/javascripts/ide/components/jobs/stage.vue2
-rw-r--r--app/assets/javascripts/ide/components/mr_file_icon.vue2
-rw-r--r--app/assets/javascripts/ide/components/new_dropdown/button.vue2
-rw-r--r--app/assets/javascripts/ide/components/new_dropdown/modal.vue5
-rw-r--r--app/assets/javascripts/ide/components/repo_editor.vue24
-rw-r--r--app/assets/javascripts/ide/components/repo_file_status_icon.vue2
-rw-r--r--app/assets/javascripts/ide/lib/files.js4
-rw-r--r--app/assets/javascripts/ide/stores/actions.js71
-rw-r--r--app/assets/javascripts/ide/stores/actions/file.js9
-rw-r--r--app/assets/javascripts/ide/stores/actions/project.js84
-rw-r--r--app/assets/javascripts/ide/stores/modules/commit/actions.js14
-rw-r--r--app/assets/javascripts/ide/stores/mutation_types.js4
-rw-r--r--app/assets/javascripts/ide/stores/mutations.js114
-rw-r--r--app/assets/javascripts/ide/stores/mutations/file.js18
-rw-r--r--app/assets/javascripts/ide/stores/state.js1
-rw-r--r--app/assets/javascripts/ide/stores/utils.js70
-rw-r--r--app/assets/javascripts/image_diff/helpers/badge_helper.js4
-rw-r--r--app/assets/javascripts/image_diff/helpers/comment_indicator_helper.js4
-rw-r--r--app/assets/javascripts/import_projects/components/import_projects_table.vue45
-rw-r--r--app/assets/javascripts/import_projects/index.js2
-rw-r--r--app/assets/javascripts/import_projects/store/actions.js22
-rw-r--r--app/assets/javascripts/import_projects/store/getters.js5
-rw-r--r--app/assets/javascripts/import_projects/store/mutation_types.js2
-rw-r--r--app/assets/javascripts/import_projects/store/mutations.js4
-rw-r--r--app/assets/javascripts/import_projects/store/state.js1
-rw-r--r--app/assets/javascripts/integrations/integration_settings_form.js1
-rw-r--r--app/assets/javascripts/issuable_bulk_update_actions.js4
-rw-r--r--app/assets/javascripts/issuable_sidebar/components/sidebar_app.vue23
-rw-r--r--app/assets/javascripts/issuable_sidebar/sidebar_bundle.js27
-rw-r--r--app/assets/javascripts/issue_show/components/app.vue36
-rw-r--r--app/assets/javascripts/issue_show/index.js5
-rw-r--r--app/assets/javascripts/issue_show/services/index.js9
-rw-r--r--app/assets/javascripts/issue_show/stores/index.js12
-rw-r--r--app/assets/javascripts/issue_show/utils/update_description.js38
-rw-r--r--app/assets/javascripts/jobs/components/commit_block.vue2
-rw-r--r--app/assets/javascripts/jobs/components/environments_block.vue151
-rw-r--r--app/assets/javascripts/jobs/components/job_app.vue13
-rw-r--r--app/assets/javascripts/jobs/components/job_container_item.vue4
-rw-r--r--app/assets/javascripts/jobs/components/job_log.vue52
-rw-r--r--app/assets/javascripts/jobs/components/job_log_json.vue10
-rw-r--r--app/assets/javascripts/jobs/components/log/collapsible_section.vue51
-rw-r--r--app/assets/javascripts/jobs/components/log/duration_badge.vue2
-rw-r--r--app/assets/javascripts/jobs/components/log/line.vue12
-rw-r--r--app/assets/javascripts/jobs/components/log/line_header.vue12
-rw-r--r--app/assets/javascripts/jobs/components/log/line_number.vue2
-rw-r--r--app/assets/javascripts/jobs/components/log/log.vue29
-rw-r--r--app/assets/javascripts/jobs/store/mutations.js10
-rw-r--r--app/assets/javascripts/jobs/store/state.js1
-rw-r--r--app/assets/javascripts/jobs/store/utils.js196
-rw-r--r--app/assets/javascripts/labels_select.js41
-rw-r--r--app/assets/javascripts/lib/utils/axios_utils.js23
-rw-r--r--app/assets/javascripts/lib/utils/common_utils.js12
-rw-r--r--app/assets/javascripts/lib/utils/datetime_utility.js24
-rw-r--r--app/assets/javascripts/lib/utils/notify.js14
-rw-r--r--app/assets/javascripts/lib/utils/number_utils.js11
-rw-r--r--app/assets/javascripts/lib/utils/set.js9
-rw-r--r--app/assets/javascripts/lib/utils/suppress_ajax_errors_during_navigation.js16
-rw-r--r--app/assets/javascripts/lib/utils/text_markdown.js8
-rw-r--r--app/assets/javascripts/lib/utils/url_utility.js8
-rw-r--r--app/assets/javascripts/line_highlighter.js10
-rw-r--r--app/assets/javascripts/main.js3
-rw-r--r--app/assets/javascripts/merge_request.js6
-rw-r--r--app/assets/javascripts/monitoring/components/charts/time_series.vue45
-rw-r--r--app/assets/javascripts/monitoring/components/dashboard.vue175
-rw-r--r--app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker.vue151
-rw-r--r--app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_input.vue77
-rw-r--r--app/assets/javascripts/monitoring/components/embed.vue2
-rw-r--r--app/assets/javascripts/monitoring/components/graph_group.vue2
-rw-r--r--app/assets/javascripts/monitoring/components/panel_type.vue16
-rw-r--r--app/assets/javascripts/monitoring/constants.js10
-rw-r--r--app/assets/javascripts/monitoring/monitoring_bundle.js1
-rw-r--r--app/assets/javascripts/monitoring/stores/actions.js12
-rw-r--r--app/assets/javascripts/monitoring/stores/mutation_types.js1
-rw-r--r--app/assets/javascripts/monitoring/stores/mutations.js18
-rw-r--r--app/assets/javascripts/monitoring/stores/state.js1
-rw-r--r--app/assets/javascripts/monitoring/stores/utils.js19
-rw-r--r--app/assets/javascripts/monitoring/utils.js98
-rw-r--r--app/assets/javascripts/namespace_select.js9
-rw-r--r--app/assets/javascripts/network/branch_graph.js8
-rw-r--r--app/assets/javascripts/new_branch_form.js8
-rw-r--r--app/assets/javascripts/notebook/cells/code.vue1
-rw-r--r--app/assets/javascripts/notebook/cells/code/index.vue12
-rw-r--r--app/assets/javascripts/notebook/cells/output/index.vue5
-rw-r--r--app/assets/javascripts/notes.js25
-rw-r--r--app/assets/javascripts/notes/components/discussion_actions.vue1
-rw-r--r--app/assets/javascripts/notes/components/discussion_filter.vue8
-rw-r--r--app/assets/javascripts/notes/components/note_actions.vue10
-rw-r--r--app/assets/javascripts/notes/components/note_actions/reply_button.vue6
-rw-r--r--app/assets/javascripts/notes/components/noteable_discussion.vue6
-rw-r--r--app/assets/javascripts/notes/components/notes_app.vue34
-rw-r--r--app/assets/javascripts/notes/constants.js3
-rw-r--r--app/assets/javascripts/notes/index.js4
-rw-r--r--app/assets/javascripts/notes/stores/actions.js106
-rw-r--r--app/assets/javascripts/notes/stores/mutations.js7
-rw-r--r--app/assets/javascripts/pager.js4
-rw-r--r--app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue4
-rw-r--r--app/assets/javascripts/pages/admin/users/components/delete_user_modal.vue113
-rw-r--r--app/assets/javascripts/pages/admin/users/components/user_modal_manager.vue77
-rw-r--r--app/assets/javascripts/pages/admin/users/components/user_operation_confirmation_modal.vue70
-rw-r--r--app/assets/javascripts/pages/admin/users/index.js75
-rw-r--r--app/assets/javascripts/pages/dashboard/todos/index/todos.js6
-rw-r--r--app/assets/javascripts/pages/groups/registry/repositories/index.js3
-rw-r--r--app/assets/javascripts/pages/groups/shared/group_details.js7
-rw-r--r--app/assets/javascripts/pages/milestones/shared/components/promote_milestone_modal.vue4
-rw-r--r--app/assets/javascripts/pages/projects/clusters/new/index.js8
-rw-r--r--app/assets/javascripts/pages/projects/commit/pipelines/index.js1
-rw-r--r--app/assets/javascripts/pages/projects/commit/show/index.js1
-rw-r--r--app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors.js6
-rw-r--r--app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_graph.js45
-rw-r--r--app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_util.js14
-rw-r--r--app/assets/javascripts/pages/projects/issues/form.js4
-rw-r--r--app/assets/javascripts/pages/projects/issues/show.js7
-rw-r--r--app/assets/javascripts/pages/projects/issues/show/index.js4
-rw-r--r--app/assets/javascripts/pages/projects/labels/components/promote_label_modal.vue4
-rw-r--r--app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js4
-rw-r--r--app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js7
-rw-r--r--app/assets/javascripts/pages/projects/merge_requests/show/index.js4
-rw-r--r--app/assets/javascripts/pages/projects/network/network.js4
-rw-r--r--app/assets/javascripts/pages/projects/project.js43
-rw-r--r--app/assets/javascripts/pages/projects/releases/edit/index.js9
-rw-r--r--app/assets/javascripts/pages/projects/releases/index/index.js2
-rw-r--r--app/assets/javascripts/pages/registrations/new/index.js9
-rw-r--r--app/assets/javascripts/pages/registrations/welcome/index.js7
-rw-r--r--app/assets/javascripts/pages/search/show/search.js1
-rw-r--r--app/assets/javascripts/performance_bar/components/detailed_metric.vue18
-rw-r--r--app/assets/javascripts/performance_bar/components/performance_bar_app.vue8
-rw-r--r--app/assets/javascripts/performance_bar/components/request_selector.vue29
-rw-r--r--app/assets/javascripts/performance_bar/components/request_warning.vue41
-rw-r--r--app/assets/javascripts/performance_bar/index.js4
-rw-r--r--app/assets/javascripts/performance_bar/stores/performance_bar_store.js8
-rw-r--r--app/assets/javascripts/pipelines/components/graph/graph_component.vue169
-rw-r--r--app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue65
-rw-r--r--app/assets/javascripts/pipelines/components/graph/linked_pipelines_column.vue52
-rw-r--r--app/assets/javascripts/pipelines/components/graph/stage_column_component.vue2
-rw-r--r--app/assets/javascripts/pipelines/components/pipeline_stop_modal.vue4
-rw-r--r--app/assets/javascripts/pipelines/components/pipeline_url.vue2
-rw-r--r--app/assets/javascripts/pipelines/mixins/graph_pipeline_bundle_mixin.js60
-rw-r--r--app/assets/javascripts/pipelines/mixins/stage_column_mixin.js9
-rw-r--r--app/assets/javascripts/pipelines/pipeline_details_bundle.js6
-rw-r--r--app/assets/javascripts/pipelines/pipeline_details_mediator.js2
-rw-r--r--app/assets/javascripts/pipelines/stores/pipeline_store.js190
-rw-r--r--app/assets/javascripts/privacy_policy_update_callout.js2
-rw-r--r--app/assets/javascripts/profile/account/components/update_username.vue4
-rw-r--r--app/assets/javascripts/project_find_file.js9
-rw-r--r--app/assets/javascripts/project_select.js181
-rw-r--r--app/assets/javascripts/projects/tree/components/commit_pipeline_status_component.vue14
-rw-r--r--app/assets/javascripts/ref_select_dropdown.js1
-rw-r--r--app/assets/javascripts/registry/components/app.vue112
-rw-r--r--app/assets/javascripts/registry/components/collapsible_container.vue43
-rw-r--r--app/assets/javascripts/registry/components/group_empty_state.vue46
-rw-r--r--app/assets/javascripts/registry/components/project_empty_state.vue133
-rw-r--r--app/assets/javascripts/registry/components/table_registry.vue94
-rw-r--r--app/assets/javascripts/registry/index.js25
-rw-r--r--app/assets/javascripts/registry/stores/actions.js2
-rw-r--r--app/assets/javascripts/registry/stores/getters.js1
-rw-r--r--app/assets/javascripts/registry/stores/mutation_types.js1
-rw-r--r--app/assets/javascripts/registry/stores/mutations.js5
-rw-r--r--app/assets/javascripts/registry/stores/state.js1
-rw-r--r--app/assets/javascripts/releases/components/milestone_list.vue45
-rw-r--r--app/assets/javascripts/releases/components/release_block.vue162
-rw-r--r--app/assets/javascripts/releases/detail/components/app.vue156
-rw-r--r--app/assets/javascripts/releases/detail/index.js19
-rw-r--r--app/assets/javascripts/releases/detail/store/actions.js62
-rw-r--r--app/assets/javascripts/releases/detail/store/index.js14
-rw-r--r--app/assets/javascripts/releases/detail/store/mutation_types.js12
-rw-r--r--app/assets/javascripts/releases/detail/store/mutations.js42
-rw-r--r--app/assets/javascripts/releases/detail/store/state.js15
-rw-r--r--app/assets/javascripts/releases/list/components/app.vue (renamed from app/assets/javascripts/releases/components/app.vue)0
-rw-r--r--app/assets/javascripts/releases/list/components/release_block.vue220
-rw-r--r--app/assets/javascripts/releases/list/index.js (renamed from app/assets/javascripts/releases/index.js)0
-rw-r--r--app/assets/javascripts/releases/list/store/actions.js (renamed from app/assets/javascripts/releases/store/actions.js)0
-rw-r--r--app/assets/javascripts/releases/list/store/index.js (renamed from app/assets/javascripts/releases/store/index.js)0
-rw-r--r--app/assets/javascripts/releases/list/store/mutation_types.js (renamed from app/assets/javascripts/releases/store/mutation_types.js)0
-rw-r--r--app/assets/javascripts/releases/list/store/mutations.js (renamed from app/assets/javascripts/releases/store/mutations.js)0
-rw-r--r--app/assets/javascripts/releases/list/store/state.js (renamed from app/assets/javascripts/releases/store/state.js)0
-rw-r--r--app/assets/javascripts/reports/components/modal.vue4
-rw-r--r--app/assets/javascripts/reports/components/report_section.vue2
-rw-r--r--app/assets/javascripts/reports/store/utils.js2
-rw-r--r--app/assets/javascripts/repository/components/last_commit.vue6
-rw-r--r--app/assets/javascripts/repository/queries/pathLastCommit.query.graphql1
-rw-r--r--app/assets/javascripts/right_sidebar.js4
-rw-r--r--app/assets/javascripts/search_autocomplete.js6
-rw-r--r--app/assets/javascripts/serverless/components/url.vue2
-rw-r--r--app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue8
-rw-r--r--app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue1
-rw-r--r--app/assets/javascripts/sidebar/components/assignees/assignee_title.vue13
-rw-r--r--app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue7
-rw-r--r--app/assets/javascripts/sidebar/components/confidential/confidential_issue_sidebar.vue26
-rw-r--r--app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue11
-rw-r--r--app/assets/javascripts/sidebar/components/subscriptions/subscriptions.vue8
-rw-r--r--app/assets/javascripts/sidebar/components/time_tracking/collapsed_state.vue18
-rw-r--r--app/assets/javascripts/sidebar/components/todo_toggle/todo.vue6
-rw-r--r--app/assets/javascripts/sidebar/lib/sidebar_move_issue.js1
-rw-r--r--app/assets/javascripts/single_file_diff.js11
-rw-r--r--app/assets/javascripts/snippet/snippet_embed.js41
-rw-r--r--app/assets/javascripts/templates/issuable_template_selector.js58
-rw-r--r--app/assets/javascripts/templates/issuable_template_selectors.js3
-rw-r--r--app/assets/javascripts/test_utils/index.js2
-rw-r--r--app/assets/javascripts/tracking.js103
-rw-r--r--app/assets/javascripts/tree.js4
-rw-r--r--app/assets/javascripts/user_popovers.js23
-rw-r--r--app/assets/javascripts/users_select.js39
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/artifacts_list.vue40
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/artifacts_list_app.vue36
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/deployment.vue2
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/mr_collapsible_extension.vue88
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue2
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue10
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline_container.vue5
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue2
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue2
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue6
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/actions.js74
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/getters.js16
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/index.js16
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutation_types.js5
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutations.js22
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/state.js8
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js2
-rw-r--r--app/assets/javascripts/vue_shared/components/changed_file_icon.vue10
-rw-r--r--app/assets/javascripts/vue_shared/components/ci_icon.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/clipboard_button.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/deprecated_modal.vue1
-rw-r--r--app/assets/javascripts/vue_shared/components/deprecated_modal_2.vue118
-rw-r--r--app/assets/javascripts/vue_shared/components/file_icon.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/file_row.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/gl_modal.vue117
-rw-r--r--app/assets/javascripts/vue_shared/components/icon.vue52
-rw-r--r--app/assets/javascripts/vue_shared/components/issue/related_issuable_item.vue7
-rw-r--r--app/assets/javascripts/vue_shared/components/pagination/table_pagination.vue3
-rw-r--r--app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/recaptcha_eventhub.js21
-rw-r--r--app/assets/javascripts/vue_shared/components/recaptcha_modal.vue10
-rw-r--r--app/assets/javascripts/vue_shared/components/sidebar/labels_select/base.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_title.vue6
-rw-r--r--app/assets/javascripts/vue_shared/components/toggle_button.vue2
-rw-r--r--app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue10
-rw-r--r--app/assets/javascripts/vue_shared/directives/track_event.js20
-rw-r--r--app/assets/javascripts/vue_shared/gl_feature_flags_plugin.js7
-rw-r--r--app/assets/javascripts/vue_shared/mixins/gl_feature_flags_mixin.js8
-rw-r--r--app/assets/javascripts/vue_shared/plugins/global_toast.js3
-rw-r--r--app/assets/javascripts/vue_shared/vue_resource_interceptor.js34
-rw-r--r--app/assets/javascripts/zen_mode.js8
-rw-r--r--app/assets/stylesheets/components/release_block.scss3
-rw-r--r--app/assets/stylesheets/framework.scss2
-rw-r--r--app/assets/stylesheets/framework/animations.scss15
-rw-r--r--app/assets/stylesheets/framework/blank.scss49
-rw-r--r--app/assets/stylesheets/framework/card.scss8
-rw-r--r--app/assets/stylesheets/framework/common.scss29
-rw-r--r--app/assets/stylesheets/framework/contextual_sidebar.scss6
-rw-r--r--app/assets/stylesheets/framework/dropdowns.scss3
-rw-r--r--app/assets/stylesheets/framework/files.scss7
-rw-r--r--app/assets/stylesheets/framework/flash.scss18
-rw-r--r--app/assets/stylesheets/framework/header.scss1
-rw-r--r--app/assets/stylesheets/framework/icons.scss11
-rw-r--r--app/assets/stylesheets/framework/job_log.scss9
-rw-r--r--app/assets/stylesheets/framework/selects.scss2
-rw-r--r--app/assets/stylesheets/framework/sidebar.scss4
-rw-r--r--app/assets/stylesheets/framework/typography.scss145
-rw-r--r--app/assets/stylesheets/framework/variables.scss8
-rw-r--r--app/assets/stylesheets/pages/boards.scss6
-rw-r--r--app/assets/stylesheets/pages/builds.scss24
-rw-r--r--app/assets/stylesheets/pages/editor.scss65
-rw-r--r--app/assets/stylesheets/pages/experimental_separate_sign_up.scss51
-rw-r--r--app/assets/stylesheets/pages/help.scss1
-rw-r--r--app/assets/stylesheets/pages/login.scss6
-rw-r--r--app/assets/stylesheets/pages/merge_requests.scss2
-rw-r--r--app/assets/stylesheets/pages/notes.scss17
-rw-r--r--app/assets/stylesheets/pages/projects.scss15
-rw-r--r--app/assets/stylesheets/pages/prometheus.scss60
-rw-r--r--app/assets/stylesheets/pages/status.scss5
-rw-r--r--app/assets/stylesheets/pages/tags.scss3
-rw-r--r--app/controllers/admin/application_settings_controller.rb11
-rw-r--r--app/controllers/admin/dashboard_controller.rb5
-rw-r--r--app/controllers/admin/sessions_controller.rb33
-rw-r--r--app/controllers/admin/users_controller.rb16
-rw-r--r--app/controllers/application_controller.rb31
-rw-r--r--app/controllers/boards/application_controller.rb2
-rw-r--r--app/controllers/boards/lists_controller.rb17
-rw-r--r--app/controllers/clusters/clusters_controller.rb1
-rw-r--r--app/controllers/concerns/cycle_analytics_params.rb25
-rw-r--r--app/controllers/concerns/enforces_admin_authentication.rb12
-rw-r--r--app/controllers/concerns/invisible_captcha.rb4
-rw-r--r--app/controllers/concerns/metrics_dashboard.rb63
-rw-r--r--app/controllers/concerns/milestone_actions.rb2
-rw-r--r--app/controllers/concerns/render_service_results.rb29
-rw-r--r--app/controllers/concerns/renders_assignees.rb7
-rw-r--r--app/controllers/concerns/sessionless_authentication.rb10
-rw-r--r--app/controllers/concerns/uploads_actions.rb28
-rw-r--r--app/controllers/dashboard/todos_controller.rb4
-rw-r--r--app/controllers/explore/snippets_controller.rb2
-rw-r--r--app/controllers/groups/boards_controller.rb3
-rw-r--r--app/controllers/groups/milestones_controller.rb2
-rw-r--r--app/controllers/groups/registry/repositories_controller.rb39
-rw-r--r--app/controllers/groups/settings/ci_cd_controller.rb23
-rw-r--r--app/controllers/groups/uploads_controller.rb2
-rw-r--r--app/controllers/groups_controller.rb23
-rw-r--r--app/controllers/health_controller.rb36
-rw-r--r--app/controllers/help_controller.rb4
-rw-r--r--app/controllers/import/bitbucket_controller.rb8
-rw-r--r--app/controllers/import/github_controller.rb21
-rw-r--r--app/controllers/notification_settings_controller.rb4
-rw-r--r--app/controllers/oauth/applications_controller.rb1
-rw-r--r--app/controllers/oauth/authorizations_controller.rb1
-rw-r--r--app/controllers/omniauth_callbacks_controller.rb5
-rw-r--r--app/controllers/profiles/groups_controller.rb2
-rw-r--r--app/controllers/profiles/notifications_controller.rb11
-rw-r--r--app/controllers/profiles_controller.rb1
-rw-r--r--app/controllers/projects/artifacts_controller.rb38
-rw-r--r--app/controllers/projects/boards_controller.rb3
-rw-r--r--app/controllers/projects/branches_controller.rb19
-rw-r--r--app/controllers/projects/commits_controller.rb4
-rw-r--r--app/controllers/projects/cycle_analytics/events_controller.rb10
-rw-r--r--app/controllers/projects/cycle_analytics_controller.rb8
-rw-r--r--app/controllers/projects/deploy_keys_controller.rb14
-rw-r--r--app/controllers/projects/deployments_controller.rb4
-rw-r--r--app/controllers/projects/environments/prometheus_api_controller.rb21
-rw-r--r--app/controllers/projects/environments_controller.rb52
-rw-r--r--app/controllers/projects/git_http_client_controller.rb2
-rw-r--r--app/controllers/projects/git_http_controller.rb16
-rw-r--r--app/controllers/projects/grafana_api_controller.rb25
-rw-r--r--app/controllers/projects/issues_controller.rb4
-rw-r--r--app/controllers/projects/jobs_controller.rb41
-rw-r--r--app/controllers/projects/lfs_api_controller.rb17
-rw-r--r--app/controllers/projects/merge_requests/application_controller.rb6
-rw-r--r--app/controllers/projects/merge_requests/diffs_controller.rb43
-rw-r--r--app/controllers/projects/merge_requests_controller.rb12
-rw-r--r--app/controllers/projects/pipelines_controller.rb25
-rw-r--r--app/controllers/projects/protected_branches_controller.rb12
-rw-r--r--app/controllers/projects/registry/repositories_controller.rb2
-rw-r--r--app/controllers/projects/registry/tags_controller.rb38
-rw-r--r--app/controllers/projects/releases_controller.rb3
-rw-r--r--app/controllers/projects/settings/ci_cd_controller.rb10
-rw-r--r--app/controllers/projects/settings/operations_controller.rb9
-rw-r--r--app/controllers/projects/templates_controller.rb8
-rw-r--r--app/controllers/projects/uploads_controller.rb2
-rw-r--r--app/controllers/projects_controller.rb1
-rw-r--r--app/controllers/registrations_controller.rb68
-rw-r--r--app/controllers/sessions_controller.rb10
-rw-r--r--app/controllers/uploads_controller.rb9
-rw-r--r--app/finders/artifacts_finder.rb24
-rw-r--r--app/finders/clusters/kubernetes_namespace_finder.rb12
-rw-r--r--app/finders/issuable_finder.rb9
-rw-r--r--app/finders/snippets_finder.rb39
-rw-r--r--app/finders/todos_finder.rb36
-rw-r--r--app/finders/user_finder.rb6
-rw-r--r--app/graphql/mutations/base_mutation.rb10
-rw-r--r--app/graphql/mutations/concerns/mutations/resolves_group.rb15
-rw-r--r--app/graphql/resolvers/issues_resolver.rb2
-rw-r--r--app/graphql/resolvers/last_commit_resolver.rb17
-rw-r--r--app/graphql/resolvers/todo_resolver.rb90
-rw-r--r--app/graphql/types/commit_type.rb2
-rw-r--r--app/graphql/types/extended_issue_type.rb14
-rw-r--r--app/graphql/types/issuable_sort_enum.rb10
-rw-r--r--app/graphql/types/issue_sort_enum.rb10
-rw-r--r--app/graphql/types/issue_type.rb4
-rw-r--r--app/graphql/types/merge_request_type.rb17
-rw-r--r--app/graphql/types/project_type.rb2
-rw-r--r--app/graphql/types/query_type.rb5
-rw-r--r--app/graphql/types/todo_action_enum.rb13
-rw-r--r--app/graphql/types/todo_state_enum.rb8
-rw-r--r--app/graphql/types/todo_target_enum.rb9
-rw-r--r--app/graphql/types/todo_type.rb53
-rw-r--r--app/graphql/types/tree/tree_type.rb6
-rw-r--r--app/graphql/types/user_type.rb3
-rw-r--r--app/helpers/application_helper.rb5
-rw-r--r--app/helpers/application_settings_helper.rb13
-rw-r--r--app/helpers/avatars_helper.rb23
-rw-r--r--app/helpers/blob_helper.rb12
-rw-r--r--app/helpers/button_helper.rb2
-rw-r--r--app/helpers/ci_status_helper.rb17
-rw-r--r--app/helpers/diff_helper.rb15
-rw-r--r--app/helpers/environment_helper.rb33
-rw-r--r--app/helpers/export_helper.rb17
-rw-r--r--app/helpers/gitlab_routing_helper.rb8
-rw-r--r--app/helpers/groups_helper.rb15
-rw-r--r--app/helpers/issuables_helper.rb14
-rw-r--r--app/helpers/nav_helper.rb7
-rw-r--r--app/helpers/projects_helper.rb16
-rw-r--r--app/helpers/releases_helper.rb24
-rw-r--r--app/helpers/search_helper.rb19
-rw-r--r--app/helpers/sorting_helper.rb20
-rw-r--r--app/helpers/submodule_helper.rb2
-rw-r--r--app/helpers/tags_helper.rb10
-rw-r--r--app/helpers/todos_helper.rb6
-rw-r--r--app/mailers/emails/issues.rb4
-rw-r--r--app/mailers/emails/members.rb16
-rw-r--r--app/mailers/emails/merge_requests.rb2
-rw-r--r--app/mailers/emails/notes.rb2
-rw-r--r--app/mailers/emails/pages_domains.rb8
-rw-r--r--app/mailers/emails/pipelines.rb4
-rw-r--r--app/mailers/emails/projects.rb10
-rw-r--r--app/mailers/emails/releases.rb28
-rw-r--r--app/mailers/emails/remote_mirrors.rb3
-rw-r--r--app/mailers/notify.rb15
-rw-r--r--app/models/analytics/cycle_analytics/project_stage.rb1
-rw-r--r--app/models/application_setting.rb10
-rw-r--r--app/models/application_setting_implementation.rb47
-rw-r--r--app/models/audit_event.rb9
-rw-r--r--app/models/aws/role.rb17
-rw-r--r--app/models/blob.rb7
-rw-r--r--app/models/blob_viewer/audio.rb12
-rw-r--r--app/models/blob_viewer/image.rb2
-rw-r--r--app/models/blob_viewer/video.rb4
-rw-r--r--app/models/board.rb5
-rw-r--r--app/models/ci/artifact_blob.rb2
-rw-r--r--app/models/ci/build.rb19
-rw-r--r--app/models/ci/build_trace.rb41
-rw-r--r--app/models/ci/build_trace_section.rb3
-rw-r--r--app/models/ci/group.rb19
-rw-r--r--app/models/ci/job_artifact.rb6
-rw-r--r--app/models/ci/legacy_stage.rb14
-rw-r--r--app/models/ci/persistent_ref.rb44
-rw-r--r--app/models/ci/pipeline.rb93
-rw-r--r--app/models/ci/pipeline_enums.rb1
-rw-r--r--app/models/ci/pipeline_schedule.rb2
-rw-r--r--app/models/ci/sources/pipeline.rb25
-rw-r--r--app/models/ci/stage.rb9
-rw-r--r--app/models/ci/trigger.rb2
-rw-r--r--app/models/clusters/applications/cert_manager.rb2
-rw-r--r--app/models/clusters/applications/helm.rb9
-rw-r--r--app/models/clusters/applications/ingress.rb2
-rw-r--r--app/models/clusters/applications/jupyter.rb2
-rw-r--r--app/models/clusters/applications/knative.rb8
-rw-r--r--app/models/clusters/applications/prometheus.rb7
-rw-r--r--app/models/clusters/applications/runner.rb2
-rw-r--r--app/models/clusters/cluster.rb43
-rw-r--r--app/models/clusters/clusters_hierarchy.rb18
-rw-r--r--app/models/clusters/concerns/application_core.rb4
-rw-r--r--app/models/clusters/concerns/application_status.rb19
-rw-r--r--app/models/clusters/concerns/application_version.rb4
-rw-r--r--app/models/clusters/concerns/provider_status.rb52
-rw-r--r--app/models/clusters/kubernetes_namespace.rb2
-rw-r--r--app/models/clusters/platforms/kubernetes.rb20
-rw-r--r--app/models/clusters/providers/aws.rb47
-rw-r--r--app/models/clusters/providers/gcp.rb56
-rw-r--r--app/models/commit.rb47
-rw-r--r--app/models/commit_collection.rb39
-rw-r--r--app/models/commit_status.rb8
-rw-r--r--app/models/commit_with_pipeline.rb38
-rw-r--r--app/models/concerns/analytics/cycle_analytics/stage.rb12
-rw-r--r--app/models/concerns/atomic_internal_id.rb77
-rw-r--r--app/models/concerns/avatarable.rb2
-rw-r--r--app/models/concerns/checksummable.rb11
-rw-r--r--app/models/concerns/ci/contextable.rb1
-rw-r--r--app/models/concerns/ci/pipeline_delegator.rb3
-rw-r--r--app/models/concerns/deployable.rb31
-rw-r--r--app/models/concerns/deployment_platform.rb6
-rw-r--r--app/models/concerns/group_api_compatibility.rb22
-rw-r--r--app/models/concerns/has_status.rb22
-rw-r--r--app/models/concerns/issuable.rb54
-rw-r--r--app/models/concerns/issuable_states.rb22
-rw-r--r--app/models/concerns/mentionable.rb2
-rw-r--r--app/models/concerns/milestoneish.rb6
-rw-r--r--app/models/concerns/noteable.rb2
-rw-r--r--app/models/concerns/notification_branch_selection.rb2
-rw-r--r--app/models/concerns/prometheus_adapter.rb2
-rw-r--r--app/models/concerns/relative_positioning.rb2
-rw-r--r--app/models/concerns/routable.rb11
-rw-r--r--app/models/concerns/spammable.rb5
-rw-r--r--app/models/concerns/stepable.rb8
-rw-r--r--app/models/concerns/versioned_description.rb31
-rw-r--r--app/models/concerns/worker_attributes.rb48
-rw-r--r--app/models/container_repository.rb7
-rw-r--r--app/models/cycle_analytics/project_level.rb1
-rw-r--r--app/models/deployment.rb10
-rw-r--r--app/models/description_version.rb22
-rw-r--r--app/models/diff_note.rb4
-rw-r--r--app/models/diff_viewer/image.rb2
-rw-r--r--app/models/environment.rb7
-rw-r--r--app/models/event.rb9
-rw-r--r--app/models/event_collection.rb43
-rw-r--r--app/models/evidence.rb27
-rw-r--r--app/models/global_milestone.rb2
-rw-r--r--app/models/gpg_signature.rb2
-rw-r--r--app/models/grafana_integration.rb20
-rw-r--r--app/models/group.rb15
-rw-r--r--app/models/hooks/web_hook.rb2
-rw-r--r--app/models/internal_id.rb10
-rw-r--r--app/models/issue.rb13
-rw-r--r--app/models/lfs_object.rb12
-rw-r--r--app/models/list.rb36
-rw-r--r--app/models/merge_request.rb40
-rw-r--r--app/models/merge_request_diff.rb31
-rw-r--r--app/models/merge_request_diff_file.rb1
-rw-r--r--app/models/milestone.rb3
-rw-r--r--app/models/namespace.rb31
-rw-r--r--app/models/note.rb24
-rw-r--r--app/models/notification_setting.rb5
-rw-r--r--app/models/pages/lookup_path.rb11
-rw-r--r--app/models/pages/virtual_domain.rb7
-rw-r--r--app/models/pages_domain.rb16
-rw-r--r--app/models/project.rb99
-rw-r--r--app/models/project_pages_metadatum.rb9
-rw-r--r--app/models/project_services/data_fields.rb2
-rw-r--r--app/models/project_services/hipchat_service.rb4
-rw-r--r--app/models/project_services/irker_service.rb4
-rw-r--r--app/models/project_services/issue_tracker_service.rb13
-rw-r--r--app/models/project_services/jira_service.rb24
-rw-r--r--app/models/project_services/packagist_service.rb2
-rw-r--r--app/models/project_services/slash_commands_service.rb7
-rw-r--r--app/models/project_wiki.rb2
-rw-r--r--app/models/protected_branch.rb5
-rw-r--r--app/models/push_event.rb4
-rw-r--r--app/models/release.rb16
-rw-r--r--app/models/repository.rb43
-rw-r--r--app/models/repository_language.rb2
-rw-r--r--app/models/service.rb11
-rw-r--r--app/models/snippet.rb29
-rw-r--r--app/models/storage/hashed_project.rb4
-rw-r--r--app/models/storage/legacy_project.rb6
-rw-r--r--app/models/suggestion.rb1
-rw-r--r--app/models/system_note_metadata.rb1
-rw-r--r--app/models/todo.rb11
-rw-r--r--app/models/upload.rb54
-rw-r--r--app/models/user.rb70
-rw-r--r--app/models/wiki_page.rb6
-rw-r--r--app/policies/base_policy.rb12
-rw-r--r--app/policies/board_policy.rb4
-rw-r--r--app/policies/clusters/instance_policy.rb2
-rw-r--r--app/policies/deploy_keys_project_policy.rb10
-rw-r--r--app/policies/deployment_policy.rb14
-rw-r--r--app/policies/global_policy.rb7
-rw-r--r--app/policies/group_policy.rb15
-rw-r--r--app/policies/milestone_policy.rb2
-rw-r--r--app/policies/project_policy.rb3
-rw-r--r--app/policies/todo_policy.rb10
-rw-r--r--app/presenters/ci/build_runner_presenter.rb17
-rw-r--r--app/presenters/ci/pipeline_presenter.rb58
-rw-r--r--app/presenters/commit_presenter.rb19
-rw-r--r--app/presenters/issue_presenter.rb4
-rw-r--r--app/presenters/project_presenter.rb3
-rw-r--r--app/presenters/projects/settings/deploy_keys_presenter.rb2
-rw-r--r--app/presenters/todo_presenter.rb7
-rw-r--r--app/serializers/build_details_entity.rb24
-rw-r--r--app/serializers/build_trace_entity.rb17
-rw-r--r--app/serializers/build_trace_serializer.rb5
-rw-r--r--app/serializers/commit_entity.rb4
-rw-r--r--app/serializers/container_repository_entity.rb2
-rw-r--r--app/serializers/deploy_key_entity.rb3
-rw-r--r--app/serializers/diff_file_metadata_entity.rb10
-rw-r--r--app/serializers/diffs_entity.rb2
-rw-r--r--app/serializers/diffs_metadata_entity.rb6
-rw-r--r--app/serializers/diffs_metadata_serializer.rb5
-rw-r--r--app/serializers/evidences/evidence_entity.rb7
-rw-r--r--app/serializers/evidences/evidence_serializer.rb7
-rw-r--r--app/serializers/evidences/issue_entity.rb14
-rw-r--r--app/serializers/evidences/milestone_entity.rb14
-rw-r--r--app/serializers/evidences/project_entity.rb10
-rw-r--r--app/serializers/evidences/release_entity.rb13
-rw-r--r--app/serializers/evidences/release_serializer.rb7
-rw-r--r--app/serializers/paginated_diff_entity.rb50
-rw-r--r--app/serializers/paginated_diff_serializer.rb5
-rw-r--r--app/serializers/pipeline_details_entity.rb5
-rw-r--r--app/serializers/pipeline_serializer.rb6
-rw-r--r--app/serializers/projects/serverless/service_entity.rb2
-rw-r--r--app/serializers/test_report_entity.rb15
-rw-r--r--app/serializers/test_report_serializer.rb5
-rw-r--r--app/serializers/test_suite_entity.rb16
-rw-r--r--app/serializers/triggered_pipeline_entity.rb65
-rw-r--r--app/services/application_settings/update_service.rb29
-rw-r--r--app/services/boards/issues/list_service.rb6
-rw-r--r--app/services/boards/lists/create_service.rb6
-rw-r--r--app/services/boards/lists/list_service.rb2
-rw-r--r--app/services/boards/lists/update_service.rb16
-rw-r--r--app/services/bulk_push_event_payload_service.rb19
-rw-r--r--app/services/ci/pipeline_trigger_service.rb29
-rw-r--r--app/services/ci/process_pipeline_service.rb7
-rw-r--r--app/services/ci/retry_build_service.rb11
-rw-r--r--app/services/clusters/gcp/finalize_creation_service.rb8
-rw-r--r--app/services/clusters/gcp/provision_service.rb7
-rw-r--r--app/services/concerns/git/change_params.rb17
-rw-r--r--app/services/deployments/after_create_service.rb60
-rw-r--r--app/services/deployments/create_service.rb39
-rw-r--r--app/services/deployments/update_service.rb16
-rw-r--r--app/services/event_create_service.rb24
-rw-r--r--app/services/git/base_hooks_service.rb28
-rw-r--r--app/services/git/branch_hooks_service.rb16
-rw-r--r--app/services/git/branch_push_service.rb20
-rw-r--r--app/services/git/process_ref_changes_service.rb75
-rw-r--r--app/services/git/tag_hooks_service.rb6
-rw-r--r--app/services/git/tag_push_service.rb4
-rw-r--r--app/services/grafana/proxy_service.rb83
-rw-r--r--app/services/groups/create_service.rb7
-rw-r--r--app/services/groups/transfer_service.rb8
-rw-r--r--app/services/groups/update_service.rb16
-rw-r--r--app/services/import_export_clean_up_service.rb14
-rw-r--r--app/services/issuable/clone/content_rewriter.rb4
-rw-r--r--app/services/issues/close_service.rb4
-rw-r--r--app/services/issues/update_service.rb2
-rw-r--r--app/services/issues/zoom_link_service.rb22
-rw-r--r--app/services/merge_requests/post_merge_service.rb4
-rw-r--r--app/services/merge_requests/refresh_service.rb26
-rw-r--r--app/services/merge_requests/update_service.rb3
-rw-r--r--app/services/note_summary.rb4
-rw-r--r--app/services/notes/quick_actions_service.rb2
-rw-r--r--app/services/notes/update_service.rb2
-rw-r--r--app/services/notification_recipient_service.rb24
-rw-r--r--app/services/notification_service.rb9
-rw-r--r--app/services/projects/after_import_service.rb9
-rw-r--r--app/services/projects/container_repository/cleanup_tags_service.rb2
-rw-r--r--app/services/projects/container_repository/delete_tags_service.rb66
-rw-r--r--app/services/projects/create_from_template_service.rb9
-rw-r--r--app/services/projects/create_service.rb6
-rw-r--r--app/services/projects/destroy_service.rb4
-rw-r--r--app/services/projects/fork_service.rb1
-rw-r--r--app/services/projects/hashed_storage/base_repository_service.rb10
-rw-r--r--app/services/projects/hashed_storage/migrate_repository_service.rb1
-rw-r--r--app/services/projects/hashed_storage/rollback_repository_service.rb1
-rw-r--r--app/services/projects/import_export/export_service.rb38
-rw-r--r--app/services/projects/operations/update_service.rb12
-rw-r--r--app/services/projects/update_pages_service.rb1
-rw-r--r--app/services/search/snippet_service.rb12
-rw-r--r--app/services/spam_service.rb3
-rw-r--r--app/services/system_note_service.rb405
-rw-r--r--app/services/system_notes/base_service.rb30
-rw-r--r--app/services/system_notes/commit_service.rb112
-rw-r--r--app/services/system_notes/issuables_service.rb312
-rw-r--r--app/services/system_notes/zoom_service.rb13
-rw-r--r--app/services/update_deployment_service.rb57
-rw-r--r--app/uploaders/avatar_uploader.rb2
-rw-r--r--app/uploaders/gitlab_uploader.rb11
-rw-r--r--app/uploaders/object_storage.rb9
-rw-r--r--app/validators/named_ecdsa_key_validator.rb4
-rw-r--r--app/views/admin/application_settings/_ci_cd.html.haml2
-rw-r--r--app/views/admin/application_settings/_influx.html.haml2
-rw-r--r--app/views/admin/application_settings/_pages.html.haml2
-rw-r--r--app/views/admin/application_settings/_performance.html.haml10
-rw-r--r--app/views/admin/application_settings/_protected_paths.html.haml31
-rw-r--r--app/views/admin/application_settings/_repository_storage.html.haml27
-rw-r--r--app/views/admin/application_settings/_snowplow.html.haml2
-rw-r--r--app/views/admin/application_settings/_visibility_and_access.html.haml5
-rw-r--r--app/views/admin/application_settings/network.html.haml13
-rw-r--r--app/views/admin/applications/show.html.haml4
-rw-r--r--app/views/admin/dashboard/index.html.haml5
-rw-r--r--app/views/admin/impersonation_tokens/index.html.haml2
-rw-r--r--app/views/admin/labels/destroy.js.haml4
-rw-r--r--app/views/admin/labels/index.html.haml4
-rw-r--r--app/views/admin/projects/index.html.haml32
-rw-r--r--app/views/admin/runners/index.html.haml7
-rw-r--r--app/views/admin/sessions/_new_base.html.haml7
-rw-r--r--app/views/admin/sessions/_signin_box.html.haml11
-rw-r--r--app/views/admin/sessions/_tabs_normal.html.haml3
-rw-r--r--app/views/admin/sessions/new.html.haml15
-rw-r--r--app/views/admin/system_info/show.html.haml44
-rw-r--r--app/views/admin/users/_head.html.haml4
-rw-r--r--app/views/admin/users/_modals.html.haml30
-rw-r--r--app/views/admin/users/_user.html.haml37
-rw-r--r--app/views/admin/users/_user_activation_effects.html.haml6
-rw-r--r--app/views/admin/users/_user_block_effects.html.haml11
-rw-r--r--app/views/admin/users/_user_deactivation_effects.html.haml18
-rw-r--r--app/views/admin/users/_user_detail.html.haml2
-rw-r--r--app/views/admin/users/index.html.haml9
-rw-r--r--app/views/admin/users/show.html.haml48
-rw-r--r--app/views/ci/runner/_how_to_setup_runner.html.haml4
-rw-r--r--app/views/ci/runner/_how_to_setup_runner_automatically.html.haml22
-rw-r--r--app/views/ci/variables/_variable_row.html.haml2
-rw-r--r--app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml2
-rw-r--r--app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml4
-rw-r--r--app/views/clusters/clusters/eks/_index.html.haml3
-rw-r--r--app/views/clusters/clusters/gcp/_form.html.haml12
-rw-r--r--app/views/clusters/clusters/gcp/_gcp_not_configured.html.haml3
-rw-r--r--app/views/clusters/clusters/gcp/_signin_with_google_button.html.haml4
-rw-r--r--app/views/clusters/clusters/new.html.haml32
-rw-r--r--app/views/clusters/clusters/show.html.haml5
-rw-r--r--app/views/dashboard/projects/_blank_state_admin_welcome.html.haml61
-rw-r--r--app/views/dashboard/projects/_blank_state_welcome.html.haml72
-rw-r--r--app/views/dashboard/projects/_zero_authorized_projects.html.haml21
-rw-r--r--app/views/dashboard/snippets/index.html.haml4
-rw-r--r--app/views/devise/registrations/new.html.haml5
-rw-r--r--app/views/devise/sessions/new.html.haml3
-rw-r--r--app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml31
-rw-r--r--app/views/devise/shared/_sign_in_link.html.haml2
-rw-r--r--app/views/devise/shared/_signin_box.html.haml5
-rw-r--r--app/views/doorkeeper/applications/show.html.haml4
-rw-r--r--app/views/events/event/_push.html.haml12
-rw-r--r--app/views/groups/_activities.html.haml2
-rw-r--r--app/views/groups/_create_chat_team.html.haml2
-rw-r--r--app/views/groups/edit.html.haml4
-rw-r--r--app/views/groups/new.html.haml4
-rw-r--r--app/views/groups/projects.html.haml41
-rw-r--r--app/views/groups/registry/repositories/index.html.haml12
-rw-r--r--app/views/groups/runners/_group_runners.html.haml4
-rw-r--r--app/views/groups/settings/_advanced.html.haml24
-rw-r--r--app/views/groups/settings/ci_cd/_form.html.haml13
-rw-r--r--app/views/groups/settings/ci_cd/show.html.haml15
-rw-r--r--app/views/groups/show.html.haml2
-rw-r--r--app/views/groups/sidebar/_packages.html.haml16
-rw-r--r--app/views/help/instance_configuration/_ssh_info.html.haml27
-rw-r--r--app/views/help/show.html.haml2
-rw-r--r--app/views/help/ui.html.haml3
-rw-r--r--app/views/import/bitbucket/status.html.haml11
-rw-r--r--app/views/import/bitbucket_server/status.html.haml2
-rw-r--r--app/views/layouts/_flash.html.haml3
-rw-r--r--app/views/layouts/_head.html.haml12
-rw-r--r--app/views/layouts/_page.html.haml2
-rw-r--r--app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml26
-rw-r--r--app/views/layouts/header/_current_user_dropdown.html.haml18
-rw-r--r--app/views/layouts/header/_default.html.haml8
-rw-r--r--app/views/layouts/header/_help_dropdown.html.haml3
-rw-r--r--app/views/layouts/nav/_dashboard.html.haml77
-rw-r--r--app/views/layouts/nav/sidebar/_admin.html.haml10
-rw-r--r--app/views/layouts/nav/sidebar/_group.html.haml2
-rw-r--r--app/views/layouts/nav/sidebar/_profile.html.haml4
-rw-r--r--app/views/layouts/nav/sidebar/_project.html.haml8
-rw-r--r--app/views/notify/new_release_email.html.haml18
-rw-r--r--app/views/notify/new_release_email.text.erb12
-rw-r--r--app/views/notify/pipeline_failed_email.html.haml2
-rw-r--r--app/views/notify/pipeline_failed_email.text.erb2
-rw-r--r--app/views/notify/pipeline_success_email.html.haml2
-rw-r--r--app/views/notify/pipeline_success_email.text.erb2
-rw-r--r--app/views/profiles/emails/index.html.haml8
-rw-r--r--app/views/profiles/notifications/_group_settings.html.haml2
-rw-r--r--app/views/profiles/passwords/edit.html.haml8
-rw-r--r--app/views/profiles/show.html.haml1
-rw-r--r--app/views/projects/_export.html.haml8
-rw-r--r--app/views/projects/_new_project_push_tip.html.haml2
-rw-r--r--app/views/projects/artifacts/_artifact.html.haml61
-rw-r--r--app/views/projects/artifacts/_table.html.haml16
-rw-r--r--app/views/projects/artifacts/index.html.haml10
-rw-r--r--app/views/projects/blob/_editor.html.haml8
-rw-r--r--app/views/projects/blob/_template_selectors.html.haml17
-rw-r--r--app/views/projects/blob/edit.html.haml1
-rw-r--r--app/views/projects/blob/new.html.haml1
-rw-r--r--app/views/projects/blob/show.html.haml2
-rw-r--r--app/views/projects/blob/viewers/_audio.html.haml2
-rw-r--r--app/views/projects/branches/_branch.html.haml3
-rw-r--r--app/views/projects/buttons/_clone.html.haml4
-rw-r--r--app/views/projects/commit/_commit_box.html.haml2
-rw-r--r--app/views/projects/commits/_commit.html.haml7
-rw-r--r--app/views/projects/cycle_analytics/_overview.html.haml2
-rw-r--r--app/views/projects/cycle_analytics/show.html.haml2
-rw-r--r--app/views/projects/deploy_tokens/_new_deploy_token.html.haml4
-rw-r--r--app/views/projects/deployments/_deployment.html.haml38
-rw-r--r--app/views/projects/deployments/_rollback.haml2
-rw-r--r--app/views/projects/diffs/_diffs.html.haml2
-rw-r--r--app/views/projects/diffs/_stats.html.haml4
-rw-r--r--app/views/projects/environments/show.html.haml9
-rw-r--r--app/views/projects/find_file/show.html.haml8
-rw-r--r--app/views/projects/issues/_issue.html.haml5
-rw-r--r--app/views/projects/issues/import_csv/_button.html.haml2
-rw-r--r--app/views/projects/issues/index.html.haml3
-rw-r--r--app/views/projects/merge_requests/_how_to_merge.html.haml6
-rw-r--r--app/views/projects/merge_requests/show.html.haml1
-rw-r--r--app/views/projects/mirrors/_mirror_repos.html.haml6
-rw-r--r--app/views/projects/mirrors/_ssh_host_keys.html.haml4
-rw-r--r--app/views/projects/notes/_more_actions_dropdown.html.haml2
-rw-r--r--app/views/projects/pages/_access.html.haml6
-rw-r--r--app/views/projects/pages/_destroy.haml10
-rw-r--r--app/views/projects/pages/_https_only.html.haml5
-rw-r--r--app/views/projects/pages/_list.html.haml19
-rw-r--r--app/views/projects/pages/_no_domains.html.haml5
-rw-r--r--app/views/projects/pages/_use.html.haml10
-rw-r--r--app/views/projects/pages/show.html.haml11
-rw-r--r--app/views/projects/pipelines/_info.html.haml10
-rw-r--r--app/views/projects/protected_branches/shared/_branches_list.html.haml17
-rw-r--r--app/views/projects/protected_branches/shared/_create_protected_branch.html.haml19
-rw-r--r--app/views/projects/protected_branches/shared/_protected_branch.html.haml21
-rw-r--r--app/views/projects/registry/repositories/index.html.haml5
-rw-r--r--app/views/projects/releases/edit.html.haml3
-rw-r--r--app/views/projects/runners/_specific_runners.html.haml25
-rw-r--r--app/views/projects/settings/ci_cd/_autodevops_form.html.haml4
-rw-r--r--app/views/projects/settings/ci_cd/_form.html.haml13
-rw-r--r--app/views/projects/tags/_tag.html.haml12
-rw-r--r--app/views/projects/tags/new.html.haml2
-rw-r--r--app/views/projects/tree/_tree_header.html.haml13
-rw-r--r--app/views/projects/triggers/_trigger.html.haml2
-rw-r--r--app/views/registrations/welcome.html.haml17
-rw-r--r--app/views/search/_form.html.haml1
-rw-r--r--app/views/search/results/_empty.html.haml3
-rw-r--r--app/views/search/show.html.haml3
-rw-r--r--app/views/shared/_allow_request_access.html.haml4
-rw-r--r--app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml2
-rw-r--r--app/views/shared/_clone_panel.html.haml2
-rw-r--r--app/views/shared/_confirm_fork_modal.html.haml12
-rw-r--r--app/views/shared/_confirm_modal.html.haml5
-rw-r--r--app/views/shared/_event_filter.html.haml4
-rw-r--r--app/views/shared/_group_form.html.haml4
-rw-r--r--app/views/shared/_personal_access_tokens_created_container.html.haml2
-rw-r--r--app/views/shared/_remote_mirror_update_button.html.haml2
-rw-r--r--app/views/shared/_user_dropdown_contributing_link.html.haml5
-rw-r--r--app/views/shared/boards/_switcher.html.haml2
-rw-r--r--app/views/shared/deploy_keys/_form.html.haml2
-rw-r--r--app/views/shared/empty_states/_issues.html.haml3
-rw-r--r--app/views/shared/form_elements/_apply_template_warning.html.haml14
-rw-r--r--app/views/shared/issuable/_assignees.html.haml2
-rw-r--r--app/views/shared/issuable/_board_create_list_dropdown.html.haml2
-rw-r--r--app/views/shared/issuable/_feed_buttons.html.haml6
-rw-r--r--app/views/shared/issuable/_form.html.haml1
-rw-r--r--app/views/shared/issuable/_search_bar.html.haml7
-rw-r--r--app/views/shared/issuable/_sidebar.html.haml330
-rw-r--r--app/views/shared/issuable/_sidebar_assignees.html.haml2
-rw-r--r--app/views/shared/milestones/_sidebar.html.haml4
-rw-r--r--app/views/shared/projects/_project.html.haml10
-rw-r--r--app/views/shared/snippets/_header.html.haml2
-rw-r--r--app/workers/admin_email_worker.rb2
-rw-r--r--app/workers/all_queues.yml3
-rw-r--r--app/workers/authorized_projects_worker.rb2
-rw-r--r--app/workers/auto_merge_process_worker.rb1
-rw-r--r--app/workers/background_migration_worker.rb2
-rw-r--r--app/workers/build_hooks_worker.rb1
-rw-r--r--app/workers/build_queue_worker.rb1
-rw-r--r--app/workers/chat_notification_worker.rb2
-rw-r--r--app/workers/ci/archive_traces_cron_worker.rb2
-rw-r--r--app/workers/ci/build_prepare_worker.rb1
-rw-r--r--app/workers/ci/build_schedule_worker.rb1
-rw-r--r--app/workers/cleanup_container_repository_worker.rb1
-rw-r--r--app/workers/concerns/application_worker.rb1
-rw-r--r--app/workers/concerns/auto_devops_queue.rb1
-rw-r--r--app/workers/concerns/chaos_queue.rb1
-rw-r--r--app/workers/concerns/cluster_queue.rb1
-rw-r--r--app/workers/concerns/gitlab/github_import/object_importer.rb2
-rw-r--r--app/workers/concerns/gitlab/github_import/queue.rb1
-rw-r--r--app/workers/concerns/object_pool_queue.rb1
-rw-r--r--app/workers/concerns/pipeline_background_queue.rb1
-rw-r--r--app/workers/concerns/pipeline_queue.rb1
-rw-r--r--app/workers/concerns/repository_check_queue.rb2
-rw-r--r--app/workers/concerns/todos_destroyer_queue.rb1
-rw-r--r--app/workers/create_evidence_worker.rb14
-rw-r--r--app/workers/create_gpg_signature_worker.rb2
-rw-r--r--app/workers/create_note_diff_file_worker.rb2
-rw-r--r--app/workers/create_pipeline_worker.rb1
-rw-r--r--app/workers/delete_container_repository_worker.rb1
-rw-r--r--app/workers/delete_diff_files_worker.rb2
-rw-r--r--app/workers/delete_merged_branches_worker.rb2
-rw-r--r--app/workers/delete_stored_files_worker.rb2
-rw-r--r--app/workers/delete_user_worker.rb2
-rw-r--r--app/workers/deployments/finished_worker.rb1
-rw-r--r--app/workers/deployments/success_worker.rb3
-rw-r--r--app/workers/detect_repository_languages_worker.rb1
-rw-r--r--app/workers/email_receiver_worker.rb2
-rw-r--r--app/workers/emails_on_push_worker.rb2
-rw-r--r--app/workers/expire_build_artifacts_worker.rb2
-rw-r--r--app/workers/expire_build_instance_artifacts_worker.rb2
-rw-r--r--app/workers/git_garbage_collect_worker.rb1
-rw-r--r--app/workers/gitlab/github_import/advance_stage_worker.rb1
-rw-r--r--app/workers/gitlab/github_import/stage/finish_import_worker.rb4
-rw-r--r--app/workers/gitlab/github_import/stage/import_repository_worker.rb4
-rw-r--r--app/workers/gitlab_shell_worker.rb2
-rw-r--r--app/workers/gitlab_usage_ping_worker.rb2
-rw-r--r--app/workers/group_destroy_worker.rb2
-rw-r--r--app/workers/hashed_storage/base_worker.rb3
-rw-r--r--app/workers/hashed_storage/migrator_worker.rb1
-rw-r--r--app/workers/hashed_storage/rollbacker_worker.rb1
-rw-r--r--app/workers/import_export_project_cleanup_worker.rb2
-rw-r--r--app/workers/import_issues_csv_worker.rb4
-rw-r--r--app/workers/invalid_gpg_signature_update_worker.rb2
-rw-r--r--app/workers/irker_worker.rb2
-rw-r--r--app/workers/issue_due_scheduler_worker.rb2
-rw-r--r--app/workers/mail_scheduler/issue_due_worker.rb2
-rw-r--r--app/workers/mail_scheduler/notification_service_worker.rb2
-rw-r--r--app/workers/merge_worker.rb2
-rw-r--r--app/workers/migrate_external_diffs_worker.rb4
-rw-r--r--app/workers/namespaceless_project_destroy_worker.rb4
-rw-r--r--app/workers/namespaces/prune_aggregation_schedules_worker.rb2
-rw-r--r--app/workers/namespaces/root_statistics_worker.rb1
-rw-r--r--app/workers/namespaces/schedule_aggregation_worker.rb1
-rw-r--r--app/workers/new_issue_worker.rb2
-rw-r--r--app/workers/new_merge_request_worker.rb2
-rw-r--r--app/workers/new_note_worker.rb2
-rw-r--r--app/workers/new_release_worker.rb15
-rw-r--r--app/workers/object_storage/background_move_worker.rb3
-rw-r--r--app/workers/object_storage/migrate_uploads_worker.rb4
-rw-r--r--app/workers/pages_domain_removal_cron_worker.rb2
-rw-r--r--app/workers/pages_domain_ssl_renewal_cron_worker.rb2
-rw-r--r--app/workers/pages_domain_ssl_renewal_worker.rb2
-rw-r--r--app/workers/pages_domain_verification_cron_worker.rb2
-rw-r--r--app/workers/pages_domain_verification_worker.rb2
-rw-r--r--app/workers/pages_worker.rb1
-rw-r--r--app/workers/pipeline_process_worker.rb1
-rw-r--r--app/workers/pipeline_schedule_worker.rb2
-rw-r--r--app/workers/plugin_worker.rb1
-rw-r--r--app/workers/post_receive.rb83
-rw-r--r--app/workers/process_commit_worker.rb2
-rw-r--r--app/workers/project_cache_worker.rb2
-rw-r--r--app/workers/project_daily_statistics_worker.rb2
-rw-r--r--app/workers/project_destroy_worker.rb2
-rw-r--r--app/workers/project_export_worker.rb1
-rw-r--r--app/workers/project_service_worker.rb1
-rw-r--r--app/workers/propagate_service_template_worker.rb2
-rw-r--r--app/workers/prune_old_events_worker.rb6
-rw-r--r--app/workers/prune_web_hook_logs_worker.rb2
-rw-r--r--app/workers/reactive_caching_worker.rb2
-rw-r--r--app/workers/rebase_worker.rb2
-rw-r--r--app/workers/remote_mirror_notification_worker.rb2
-rw-r--r--app/workers/remove_expired_group_links_worker.rb2
-rw-r--r--app/workers/remove_expired_members_worker.rb2
-rw-r--r--app/workers/remove_unreferenced_lfs_objects_worker.rb2
-rw-r--r--app/workers/repository_archive_cache_worker.rb2
-rw-r--r--app/workers/repository_check/dispatch_worker.rb2
-rw-r--r--app/workers/repository_cleanup_worker.rb1
-rw-r--r--app/workers/repository_fork_worker.rb2
-rw-r--r--app/workers/repository_import_worker.rb6
-rw-r--r--app/workers/repository_remove_remote_worker.rb2
-rw-r--r--app/workers/repository_update_remote_mirror_worker.rb1
-rw-r--r--app/workers/requests_profiles_worker.rb2
-rw-r--r--app/workers/run_pipeline_schedule_worker.rb1
-rw-r--r--app/workers/schedule_migrate_external_diffs_worker.rb4
-rw-r--r--app/workers/stuck_ci_jobs_worker.rb2
-rw-r--r--app/workers/stuck_import_jobs_worker.rb2
-rw-r--r--app/workers/stuck_merge_jobs_worker.rb4
-rw-r--r--app/workers/system_hook_push_worker.rb2
-rw-r--r--app/workers/trending_projects_worker.rb2
-rw-r--r--app/workers/update_external_pull_requests_worker.rb2
-rw-r--r--app/workers/update_head_pipeline_for_merge_request_worker.rb1
-rw-r--r--app/workers/update_merge_requests_worker.rb2
-rw-r--r--app/workers/update_project_statistics_worker.rb3
-rw-r--r--app/workers/upload_checksum_worker.rb2
-rw-r--r--app/workers/web_hook_worker.rb1
-rw-r--r--babel.config.js2
-rwxr-xr-xbin/background_jobs4
-rwxr-xr-xbin/secpick2
-rw-r--r--changelogs/unreleased/10893-hide-redundant-labels-in-issue-boards.yml5
-rw-r--r--changelogs/unreleased/10904-insights-include-projects.yml5
-rw-r--r--changelogs/unreleased/10946-fix-the-following-style-lint-errors-and-warnings-for-ee-app-assets-.yml5
-rw-r--r--changelogs/unreleased/11412-fix-security-dashboard-history-bug.yml5
-rw-r--r--changelogs/unreleased/12564-email-regex.yml5
-rw-r--r--changelogs/unreleased/12739-incomplete-group-audit-logs-in-group-view.yml5
-rw-r--r--changelogs/unreleased/12764-refactor-checksum-code.yml5
-rw-r--r--changelogs/unreleased/12819-remove-feature-flag.yml5
-rw-r--r--changelogs/unreleased/13321-show-issue-weight-when-zero.yml5
-rw-r--r--changelogs/unreleased/13360-fix-epics-api.yml5
-rw-r--r--changelogs/unreleased/13422-empty-security-dashboard-on-public-project-with-found-vulnerabiliti.yml5
-rw-r--r--changelogs/unreleased/13426-add-user-and-timestamps-to-design-management-version.yml5
-rw-r--r--changelogs/unreleased/13426-disable-design-mutation-abilities-when-issue-moved-or-locked.yml5
-rw-r--r--changelogs/unreleased/13536-add-sort-to-group-packages.yml5
-rw-r--r--changelogs/unreleased/14064-commit-status-on-any-pipelines.yml5
-rw-r--r--changelogs/unreleased/14794-rake-gitlab-geo-check-does-not-give-the-actual-state.yml5
-rw-r--r--changelogs/unreleased/14945-fix-jira-api-url-parsing.yml5
-rw-r--r--changelogs/unreleased/15018-build-results-fe.yml5
-rw-r--r--changelogs/unreleased/16188-warn-before-applying-issue-templates.yml5
-rw-r--r--changelogs/unreleased/16388-abort-mwps-on-impossible-ff-merge.yml5
-rw-r--r--changelogs/unreleased/16482-split-sign-in-and-sign-up.yml5
-rw-r--r--changelogs/unreleased/16654-audio-in-markdown.yml5
-rw-r--r--changelogs/unreleased/16790-render-xml-artifacts.yml (renamed from 16790-render-xml-artifacts.yml)0
-rw-r--r--changelogs/unreleased/17596-show-all-matching-labels-when-using-label-quick-action.yml5
-rw-r--r--changelogs/unreleased/17970-preserve-leading-whitespace.yml5
-rw-r--r--changelogs/unreleased/18217-request-access-to-project-should-be-on-by-default.yml5
-rw-r--r--changelogs/unreleased/19152-improve-jira-username-validation.yml5
-rw-r--r--changelogs/unreleased/19822-audio-preview-in-repo.yml5
-rw-r--r--changelogs/unreleased/20-add-signup-step-2.yml5
-rw-r--r--changelogs/unreleased/20718-extend-issue-attributes-returned-by-graphql.yml5
-rw-r--r--changelogs/unreleased/20829-extend-mr-attributes-returned-by-graphql.yml5
-rw-r--r--changelogs/unreleased/21405-fix-registry-tag-delete.yml5
-rw-r--r--changelogs/unreleased/21800-parse-mentioned-users-group-projects-from-markdown.yml5
-rw-r--r--changelogs/unreleased/22388-limit-the-number-of-comments-on-a-noteable.yml5
-rw-r--r--changelogs/unreleased/22879-close-jira-issues-with-issues-disabled.yml5
-rw-r--r--changelogs/unreleased/22904-fix-overflow.yml5
-rw-r--r--changelogs/unreleased/22959-remove-map-get-grid-breakpoints-xs-for-max-width.yml5
-rw-r--r--changelogs/unreleased/23079-write-permission-global-deploy-keys.yml5
-rw-r--r--changelogs/unreleased/23315-group-level-container-registry-browser.yml5
-rw-r--r--changelogs/unreleased/23400-fix-duplicate-replies.yml5
-rw-r--r--changelogs/unreleased/2358-elasticsearch-project-snippets.yml5
-rw-r--r--changelogs/unreleased/24818-fix-jira-favicon-link.yml5
-rw-r--r--changelogs/unreleased/26001-notification-release-be.yml5
-rw-r--r--changelogs/unreleased/26019-evidence-collection.yml5
-rw-r--r--changelogs/unreleased/26210-toc-links.yml5
-rw-r--r--changelogs/unreleased/27502-enable-cloud-run-on-gke.yml5
-rw-r--r--changelogs/unreleased/27715-fix-unrenderable-notes.yml5
-rw-r--r--changelogs/unreleased/27835-move-and-resize-panels-in-dashboard-save-to-branch.yml5
-rw-r--r--changelogs/unreleased/28211-check-if-mapping-is-empty-before-caching.yml5
-rw-r--r--changelogs/unreleased/28243-check-for-docker-images-before-renaming-group.yml6
-rw-r--r--changelogs/unreleased/28311-extremely-low-contrast-in-dropdown-for-group-file-templates.yml5
-rw-r--r--changelogs/unreleased/28492-upgrade-ingress-to-latest.yml5
-rw-r--r--changelogs/unreleased/28781-migrate-pages-metadata-in-background.yml5
-rw-r--r--changelogs/unreleased/28781-migrate-pages-metadata-on-demand.yml5
-rw-r--r--changelogs/unreleased/28781-pages-namespaces-virtual-domain.yml5
-rw-r--r--changelogs/unreleased/29020-merge-requests-issues-links.yml5
-rw-r--r--changelogs/unreleased/29020-update-release-blocks-for-multiple-milestone-support.yml5
-rw-r--r--changelogs/unreleased/29215-500-error-when-deleting-group-web-hook-activerecord-statementinvali.yml5
-rw-r--r--changelogs/unreleased/29284-video-preview-not-working.yml5
-rw-r--r--changelogs/unreleased/29477-notification-settings-display-all-groups.yml5
-rw-r--r--changelogs/unreleased/29513-continue-improvements-for-time-window-filtering-on-metrics-dashboar.yml5
-rw-r--r--changelogs/unreleased/29835-webide-fork.yml6
-rw-r--r--changelogs/unreleased/29881-fix-ide-delete-and-readd.yml5
-rw-r--r--changelogs/unreleased/30112-private-internal-sub-group-email-notifications-not-sent-when-mentio.yml5
-rw-r--r--changelogs/unreleased/30186-mirror-pull-api-no-unpause.yml5
-rw-r--r--changelogs/unreleased/30217-refactor-email-notification-code.yml5
-rw-r--r--changelogs/unreleased/30392-variables.yml5
-rw-r--r--changelogs/unreleased/30497-race-condition-in-discussions-json-request-could-lead-to-notes-show.yml5
-rw-r--r--changelogs/unreleased/30525-iframe_jaeger.yml5
-rw-r--r--changelogs/unreleased/30619-make-recent-searches-more-visible.yml5
-rw-r--r--changelogs/unreleased/30807-fix-usability-problem.yml5
-rw-r--r--changelogs/unreleased/30839-asciidoc-table-styles.yml5
-rw-r--r--changelogs/unreleased/30877-optimize-explore-snippets.yml5
-rw-r--r--changelogs/unreleased/30881-webide-mr-confirmation.yml6
-rw-r--r--changelogs/unreleased/31007-limit-activity-events.yml5
-rw-r--r--changelogs/unreleased/31009-limit-project-hooks-services.yml5
-rw-r--r--changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml5
-rw-r--r--changelogs/unreleased/31118-do-not-use-blob-for-file-path.yml5
-rw-r--r--changelogs/unreleased/31290-mr-diffs-batch-load.yml5
-rw-r--r--changelogs/unreleased/31329-hidden-nav-content.yml5
-rw-r--r--changelogs/unreleased/31393-when-adding-labels-in-a-merge-request-adds-them-out-of-order-until-.yml5
-rw-r--r--changelogs/unreleased/31427-flaky-spec-finders-members_finder_spec-rb-85.yml5
-rw-r--r--changelogs/unreleased/31441-make-it-easy-for-includes-to-add-jobs-at-beginning-end-of-pipeline.yml5
-rw-r--r--changelogs/unreleased/31492-banners-should-only-be-dismissable-by-clicking-x.yml5
-rw-r--r--changelogs/unreleased/31547-update-registry-tag-delete-popup-message.yml5
-rw-r--r--changelogs/unreleased/31573-cross-project-pipeline-triggering-does-not-work-in-core.yml5
-rw-r--r--changelogs/unreleased/31573-cross-project-piplelines.yml5
-rw-r--r--changelogs/unreleased/31590-tag-delete-instrumentation.yml5
-rw-r--r--changelogs/unreleased/31678-update-cluster-link-text.yml5
-rw-r--r--changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml5
-rw-r--r--changelogs/unreleased/31837-sidebar-icons-jump.yml5
-rw-r--r--changelogs/unreleased/31914-graphql-todos-query-pd.yml5
-rw-r--r--changelogs/unreleased/31923-Snowplow-custom-events-Monitor.yml5
-rw-r--r--changelogs/unreleased/32030-move-licence-complience-to-the-backend-FE.yml5
-rw-r--r--changelogs/unreleased/32036-add-some-spacing-offset-to-the-star-icon-to-project-row-in-case-the.yml5
-rw-r--r--changelogs/unreleased/32133-remove-feature-flag-for-zoom.yml5
-rw-r--r--changelogs/unreleased/32146-remove-fe-code.yml5
-rw-r--r--changelogs/unreleased/32192-remove-gap-at-the-top-of-expandable-code-diff-blocks.yml5
-rw-r--r--changelogs/unreleased/32279-fix_graphql_for_secondary_node.yml5
-rw-r--r--changelogs/unreleased/32380-update-issue-list-icons.yml5
-rw-r--r--changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml5
-rw-r--r--changelogs/unreleased/32397-geo-instructions-to-update-fdw-schema-aren-t-entirely-correct.yml5
-rw-r--r--changelogs/unreleased/32457-change-welcome-to-gitlab-message.yml5
-rw-r--r--changelogs/unreleased/32595-blame-or-history-newline-in-filename.yml5
-rw-r--r--changelogs/unreleased/32839-fix-relative-position-edge-case.yml5
-rw-r--r--changelogs/unreleased/32899-handle-race-condition-for-container-registry-sync.yml5
-rw-r--r--changelogs/unreleased/32919-inform-the-user-that-removing-the-last-tag-of-an-image-it-will-remo.yml6
-rw-r--r--changelogs/unreleased/32930-matching-branch-code-owner-approval.yml5
-rw-r--r--changelogs/unreleased/33158-time-window-filter-dropdown-doesn-t-retain-previously-selected-wind.yml5
-rw-r--r--changelogs/unreleased/33230-undefined-method-terms_of_service_url.yml5
-rw-r--r--changelogs/unreleased/33322-missing-page-title-on-projects-container-registry.yml5
-rw-r--r--changelogs/unreleased/33337-fix-insights-only-projects-for-project.yml5
-rw-r--r--changelogs/unreleased/33405-container-registry-improve-delete-modal-button.yml5
-rw-r--r--changelogs/unreleased/33582-fix-protected-branch-wildcard.yml5
-rw-r--r--changelogs/unreleased/33668-fix-search-term-xss.yml5
-rw-r--r--changelogs/unreleased/33750-follow-up-from-resolve-deactivate-a-user-with-self-service-reactiva.yml5
-rw-r--r--changelogs/unreleased/33876-ensure-proper-access-level-check-on-pa.yml5
-rw-r--r--changelogs/unreleased/34032-container-registry-bug-on-modal-delete-button-and-title-text.yml5
-rw-r--r--changelogs/unreleased/34120-design-system-notes-icon-does-not-appear.yml5
-rw-r--r--changelogs/unreleased/45797-welcome-screen.yml5
-rw-r--r--changelogs/unreleased/46686-add-aws-cluster-data-model.yml5
-rw-r--r--changelogs/unreleased/53041-groups-named-shared.yml5
-rw-r--r--changelogs/unreleased/5582-add-missing-actions-and-data-to-environments-and-deployments-apis.yml5
-rw-r--r--changelogs/unreleased/59036-object-to-local-storage.yml5
-rw-r--r--changelogs/unreleased/61061-links-to-sha-commits-in-release-notes.yml5
-rw-r--r--changelogs/unreleased/61078-empty-state-file-finder.yml5
-rw-r--r--changelogs/unreleased/61933-toggling-a-task-inside-a-collapsible-section-collapses-all-sections.yml6
-rw-r--r--changelogs/unreleased/63768-group-settings-kubernetes-runner-section.yml5
-rw-r--r--changelogs/unreleased/63921-deactivate-a-user-with-self-service-reactivation.yml5
-rw-r--r--changelogs/unreleased/64251-branch-name-set-cache.yml5
-rw-r--r--changelogs/unreleased/64837-persist-refs-over-browser-tabs.yml5
-rw-r--r--changelogs/unreleased/66123-over-a-thousand-todos-displays-count-of-one.yml6
-rw-r--r--changelogs/unreleased/66330-confidential-quick-action-is-available-for-confidential-issues.yml5
-rw-r--r--changelogs/unreleased/9102-update-hide-dismissed-param.yml5
-rw-r--r--changelogs/unreleased/9801-epic-copy-link.yml5
-rw-r--r--changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml5
-rw-r--r--changelogs/unreleased/ab-iid-unnecessary-locks.yml5
-rw-r--r--changelogs/unreleased/ab-replace-index.yml5
-rw-r--r--changelogs/unreleased/ac-fix-only-os-uplods.yml5
-rw-r--r--changelogs/unreleased/ac-pull-mirror-branch-prefix.yml5
-rw-r--r--changelogs/unreleased/ac-workhorse-8-11-0.yml5
-rw-r--r--changelogs/unreleased/add-ansi2json-log-parser.yml5
-rw-r--r--changelogs/unreleased/add-ci-project-title-variable.yml5
-rw-r--r--changelogs/unreleased/add-first-parent-to-find-commits.yml5
-rw-r--r--changelogs/unreleased/add-health-checks-exporter.yml5
-rw-r--r--changelogs/unreleased/add-sorting-to-packages-list.yml5
-rw-r--r--changelogs/unreleased/add-timestamps-to-api-deployments-response.yml5
-rw-r--r--changelogs/unreleased/add-timestamps-to-api-pipelines-response.yml5
-rw-r--r--changelogs/unreleased/ak-health-check-custom-error.yml5
-rw-r--r--changelogs/unreleased/ak-unhandled-exception-in-health-checks.yml5
-rw-r--r--changelogs/unreleased/ak-upgrade-workhorse.yml5
-rw-r--r--changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml5
-rw-r--r--changelogs/unreleased/allow-username-search-to-work-with-at-sign.yml5
-rw-r--r--changelogs/unreleased/an-priority-bump-authorized_projects.yml5
-rw-r--r--changelogs/unreleased/an-sidekiq-job-feature-attribution.yml5
-rw-r--r--changelogs/unreleased/ancestor_groups.yml5
-rw-r--r--changelogs/unreleased/backfill-releases-updated-at.yml5
-rw-r--r--changelogs/unreleased/bjk-32646_puma_killer.yml5
-rw-r--r--changelogs/unreleased/bump-elasticsearch-indexer-to-v1-4-0.yml5
-rw-r--r--changelogs/unreleased/bvl-fix-view-mr-deleted-repo.yml5
-rw-r--r--changelogs/unreleased/bvl-only-one-pushmirror-per-push.yml5
-rw-r--r--changelogs/unreleased/cache-issues-with-has_visible_content.yml5
-rw-r--r--changelogs/unreleased/cluster_management_projects.yml5
-rw-r--r--changelogs/unreleased/dedicated-pipeline-ref.yml6
-rw-r--r--changelogs/unreleased/deployment-iid-transaction-improvement.yml6
-rw-r--r--changelogs/unreleased/deployments-api.yml5
-rw-r--r--changelogs/unreleased/dz-fix-group-settings-projects-page.yml5
-rw-r--r--changelogs/unreleased/dz-improve-groups-list-ui.yml5
-rw-r--r--changelogs/unreleased/dz-improve-help-layout.yml5
-rw-r--r--changelogs/unreleased/dz-redesign-admin-system-info.yml5
-rw-r--r--changelogs/unreleased/eb-fix-ci-status-indicator-for-warnings.yml5
-rw-r--r--changelogs/unreleased/eb-missing-dependencies-custom-callout-message.yml6
-rw-r--r--changelogs/unreleased/eb-project-group-max-artifacts-size-fields.yml5
-rw-r--r--changelogs/unreleased/eb-support-test-report-error-key.yml5
-rw-r--r--changelogs/unreleased/ee-16726-signup-not-disabled.yml5
-rw-r--r--changelogs/unreleased/expose-name-property-in-import-api.yml5
-rw-r--r--changelogs/unreleased/feat-user-mode-in-session-for-admins.yml6
-rw-r--r--changelogs/unreleased/feature-add-copyable-login-with-copy-to-empty-container-registry-view.yml5
-rw-r--r--changelogs/unreleased/feature-default-cluster-to-vpc-enabled.yml5
-rw-r--r--changelogs/unreleased/feature-ignore-prometheus-metrics-not-present.yml5
-rw-r--r--changelogs/unreleased/fix-cache-expiration-new-wiki-page.yml5
-rw-r--r--changelogs/unreleased/fix-moved-help-doc-administration-monitoring-performance.yml5
-rw-r--r--changelogs/unreleased/fix-n-plus-one-in-jira-github-api.yml5
-rw-r--r--changelogs/unreleased/fix-service-desk-forward.yml6
-rw-r--r--changelogs/unreleased/fix-set-status-emoji-button.yml5
-rw-r--r--changelogs/unreleased/fj-26123-narrow-snippet-search-scope-in-com.yml5
-rw-r--r--changelogs/unreleased/fj-28429-generate-lfs-token-authorization.yml5
-rw-r--r--changelogs/unreleased/fj-32643-limit-snippets-search-count.yml5
-rw-r--r--changelogs/unreleased/fj-32885-add-trigram-index-snippet-content.yml5
-rw-r--r--changelogs/unreleased/fj-fix-smau-usage-counters.yml5
-rw-r--r--changelogs/unreleased/fork_gitlab_ci.yml5
-rw-r--r--changelogs/unreleased/geo-mk-add-custom-http-clone-url-root.yml5
-rw-r--r--changelogs/unreleased/georgekoltsov-add-github-importer-filtering.yml5
-rw-r--r--changelogs/unreleased/georgekoltsov-bitbucket-cloud-import-filtering.yml5
-rw-r--r--changelogs/unreleased/gitaly-1-64.yml5
-rw-r--r--changelogs/unreleased/gitaly-version-v1.66.0.yml5
-rw-r--r--changelogs/unreleased/gitaly-version-v1.67.0.yml5
-rw-r--r--changelogs/unreleased/github-release-importer-fixup.yml5
-rw-r--r--changelogs/unreleased/graphql-epic-mutate.yml5
-rw-r--r--changelogs/unreleased/group_default_visibility.yml5
-rw-r--r--changelogs/unreleased/groups_api.yml5
-rw-r--r--changelogs/unreleased/id-blame-controller-performance.yml5
-rw-r--r--changelogs/unreleased/id-cleanup-anny-approver-migrations.yml5
-rw-r--r--changelogs/unreleased/id-fix-nplus1-for-signatures.yml5
-rw-r--r--changelogs/unreleased/id-merge-request-dependencies.yml5
-rw-r--r--changelogs/unreleased/ignore-autreply.yml5
-rw-r--r--changelogs/unreleased/ignore-id-column-ci_build_trace_sections.yml5
-rw-r--r--changelogs/unreleased/improve-search-empty-message.yml5
-rw-r--r--changelogs/unreleased/increase-limit-for-recursively-include.yml5
-rw-r--r--changelogs/unreleased/internationalization-time-series-wrapper.yml5
-rw-r--r--changelogs/unreleased/introduce-feature-flag-api.yml5
-rw-r--r--changelogs/unreleased/issue_11240.yml5
-rw-r--r--changelogs/unreleased/issue_11241.yml5
-rw-r--r--changelogs/unreleased/issue_26823_sync_state_id.yml5
-rw-r--r--changelogs/unreleased/issue_28457.yml5
-rw-r--r--changelogs/unreleased/issue_32364.yml5
-rw-r--r--changelogs/unreleased/jc-add-config-options-for-partial-clone.yml5
-rw-r--r--changelogs/unreleased/jc-optimize-uri-type.yml5
-rw-r--r--changelogs/unreleased/jc-remove-cleanup-rake-tasks.yml5
-rw-r--r--changelogs/unreleased/job_file_matching.yml5
-rw-r--r--changelogs/unreleased/jramsay-clarify-git-lfs-push-rule-behavior.yml5
-rw-r--r--changelogs/unreleased/knative-0-7.yml5
-rw-r--r--changelogs/unreleased/labels_rest.yml5
-rw-r--r--changelogs/unreleased/mc-feature-show-setup-cicd-empty-repo.yml5
-rw-r--r--changelogs/unreleased/mc-fixes-wrong-link-on-protected-paths-admin-ui.yml5
-rw-r--r--changelogs/unreleased/mc-moves-protected-path-throttle-to-gitlab-rails.yml5
-rw-r--r--changelogs/unreleased/mfluharty-add-mr-links-to-pipeline-view.yml5
-rw-r--r--changelogs/unreleased/mk-remove-flag-geo_object_storage_replication.yml5
-rw-r--r--changelogs/unreleased/mr-links-4-pipes.yml5
-rw-r--r--changelogs/unreleased/nfriend-add-edit-button-to-release-blocks.yml5
-rw-r--r--changelogs/unreleased/nfriend-add-edit-release-page.yml5
-rw-r--r--changelogs/unreleased/nfriend-allow-release-page-anchor-scrolling.yml5
-rw-r--r--changelogs/unreleased/nfriend-fix-lin.yml5
-rw-r--r--changelogs/unreleased/nfriend-suppress-ajax-errors-again.yml5
-rw-r--r--changelogs/unreleased/not_silent_retry_failure.yml5
-rw-r--r--changelogs/unreleased/osw-diffs-metadata-endpoint.yml5
-rw-r--r--changelogs/unreleased/osw-unnappliable-suggestion-on-expanded-lines.yml5
-rw-r--r--changelogs/unreleased/pages-1-11-0.yml5
-rw-r--r--changelogs/unreleased/pages-per-project-size-limit-db.yml5
-rw-r--r--changelogs/unreleased/patch-29.yml5
-rw-r--r--changelogs/unreleased/performance-bar-warnings.yml5
-rw-r--r--changelogs/unreleased/preview_private_artifacts.yml5
-rw-r--r--changelogs/unreleased/psi-indy-embed-zooms.yml5
-rw-r--r--changelogs/unreleased/psi-responsive-error-tracking.yml5
-rw-r--r--changelogs/unreleased/rd-fix-show-trial-errors-helper.yml5
-rw-r--r--changelogs/unreleased/remove-duplicate-primary-button-in-dashboard-snippets.yml5
-rw-r--r--changelogs/unreleased/return-error-message-when-performance-bar-group-is-not-found.yml5
-rw-r--r--changelogs/unreleased/sec-rep-mr-fixes.yml5
-rw-r--r--changelogs/unreleased/security-12630-private-system-note-disclosed-in-graphql.yml6
-rw-r--r--changelogs/unreleased/security-12717-fix-confidential-issue-assignee-visible-to-guests.yml5
-rw-r--r--changelogs/unreleased/security-12718-project-milestones-disclosed-via-groups.yml6
-rw-r--r--changelogs/unreleased/security-13338-fix-head-pipeline-leak.yml5
-rw-r--r--changelogs/unreleased/security-29491.yml5
-rw-r--r--changelogs/unreleased/security-64938-dont-disclose-path.yml6
-rw-r--r--changelogs/unreleased/security-bypass-email-verification-using-salesforce.yml5
-rw-r--r--changelogs/unreleased/security-cross-reference-fix.yml5
-rw-r--r--changelogs/unreleased/security-fp-stop-jobs-when-blocking-user.yml5
-rw-r--r--changelogs/unreleased/security-gitaly-1-65-1.yml5
-rw-r--r--changelogs/unreleased/security-mermaid-block.yml5
-rw-r--r--changelogs/unreleased/security-sarcila-verify-saml-request-origin.yml5
-rw-r--r--changelogs/unreleased/security-search-by-iid-leaks-data.yml6
-rw-r--r--changelogs/unreleased/sh-bump-rouge-3-11-0.yml5
-rw-r--r--changelogs/unreleased/sh-disable-pager-on-small-counts.yml5
-rw-r--r--changelogs/unreleased/sh-enable-google-api-retries.yml5
-rw-r--r--changelogs/unreleased/sh-fix-gitaly-nplus-one-issues-related-mrs.yml5
-rw-r--r--changelogs/unreleased/sh-fix-project-export-for-pipelines-for-mrs.yml5
-rw-r--r--changelogs/unreleased/sh-fix-snippet-visibility-api.yml5
-rw-r--r--changelogs/unreleased/sh-github-import-handle-nil-dates.yml5
-rw-r--r--changelogs/unreleased/sh-handle-exceptions-sidekiq.yml5
-rw-r--r--changelogs/unreleased/sh-hide-license-breakdown.yml5
-rw-r--r--changelogs/unreleased/sh-limit-diverging-commit-counts.yml5
-rw-r--r--changelogs/unreleased/sh-move-mr-diff-after-commit.yml5
-rw-r--r--changelogs/unreleased/sh-use-template-project-id-backend.yml5
-rw-r--r--changelogs/unreleased/show-correct-link-in-mr-pipelines.yml5
-rw-r--r--changelogs/unreleased/sort-severity-then-confidence.yml5
-rw-r--r--changelogs/unreleased/stop-liveness-check-returning-incorrect-data.yml5
-rw-r--r--changelogs/unreleased/stop-showing-new-issue-button-when-project-is-archived.yml5
-rw-r--r--changelogs/unreleased/stop-the-expand-button-expanding.yml5
-rw-r--r--changelogs/unreleased/sy-grafana-auth-be.yml5
-rw-r--r--changelogs/unreleased/sy-grafana-proxy.yml5
-rw-r--r--changelogs/unreleased/tc-link-geo-unrepl-docs.yml5
-rw-r--r--changelogs/unreleased/timeout-ci-includes-expansion.yml5
-rw-r--r--changelogs/unreleased/tr-fix-embed-tooltip.yml5
-rw-r--r--changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-9-0.yml5
-rw-r--r--changelogs/unreleased/update-gitlab-shell-10-2.yml5
-rw-r--r--changelogs/unreleased/update-preparing-stage-icon.yml5
-rw-r--r--changelogs/unreleased/update-schema-rb.yml5
-rw-r--r--changelogs/unreleased/use-ansi2json-for-job-logs.yml5
-rw-r--r--changelogs/unreleased/user-friendly-instance-configuration.yml5
-rw-r--r--changelogs/unreleased/web-metrics-exporter-ee.yml5
-rw-r--r--changelogs/unreleased/winh-confidential-issue-recaptcha.yml5
-rw-r--r--changelogs/unreleased/winh-issue-list-moved.yml5
-rw-r--r--changelogs/unreleased/winh-related-issues-border.yml5
-rw-r--r--changelogs/unreleased/workhorse-8-14.yml5
-rw-r--r--changelogs/unreleased/zj-timeouts-gitaly-rpcs.yml5
-rw-r--r--config/application.rb49
-rw-r--r--config/brakeman.ignore24
-rw-r--r--config/environments/development.rb5
-rw-r--r--config/feature_categories.yml103
-rw-r--r--config/gitlab.yml.example33
-rw-r--r--config/helpers/is_ee_env.js11
-rw-r--r--config/initializers/0_inflections.rb1
-rw-r--r--config/initializers/1_settings.rb13
-rw-r--r--config/initializers/7_prometheus_metrics.rb39
-rw-r--r--config/initializers/cluster_events_before_phased_restart.rb14
-rw-r--r--config/initializers/fog_core_patch.rb2
-rw-r--r--config/initializers/google_api_client.rb23
-rw-r--r--config/initializers/lograge.rb4
-rw-r--r--config/initializers/pages.rb2
-rw-r--r--config/initializers/rack_attack_global.rb72
-rw-r--r--config/initializers/rack_attack_logging.rb10
-rw-r--r--config/initializers/rack_attack_new.rb129
-rw-r--r--config/initializers/sidekiq.rb18
-rw-r--r--config/initializers/zz_metrics.rb4
-rw-r--r--config/knative/api_resources.yml8
-rw-r--r--config/locales/en.yml3
-rw-r--r--config/locales/sherlock.en.yml2
-rw-r--r--config/prometheus/common_metrics.yml2
-rw-r--r--config/puma.example.development.rb2
-rw-r--r--config/puma.rb.example2
-rw-r--r--config/routes.rb5
-rw-r--r--config/routes/admin.rb8
-rw-r--r--config/routes/group.rb4
-rw-r--r--config/routes/project.rb15
-rw-r--r--config/routes/repository.rb2
-rw-r--r--config/settings.rb6
-rw-r--r--config/sidekiq_queues.yml5
-rw-r--r--config/unicorn.rb.example2
-rw-r--r--config/unicorn.rb.example.development2
-rw-r--r--config/webpack.config.js7
-rw-r--r--danger/documentation/Dangerfile4
-rw-r--r--danger/specs/Dangerfile2
-rw-r--r--db/fixtures/development/17_cycle_analytics.rb8
-rw-r--r--db/migrate/20180113220114_rework_redirect_routes_indexes.rb4
-rw-r--r--db/migrate/20190801142441_add_throttle_protected_path_columns.rb25
-rw-r--r--db/migrate/20190807023052_design_issue_id_nullable.rb11
-rw-r--r--db/migrate/20190821040941_create_cluster_providers_aws.rb33
-rw-r--r--db/migrate/20190901174200_add_max_issue_count_to_list.rb16
-rw-r--r--db/migrate/20190903150358_create_analytics_repository_files_table.rb21
-rw-r--r--db/migrate/20190903150435_create_analytics_repository_file_edits_table.rb29
-rw-r--r--db/migrate/20190905022045_add_issues_prometheus_alert_event_join_table.rb22
-rw-r--r--db/migrate/20190905074652_index_timestamp_columns_for_issue_metrics.rb29
-rw-r--r--db/migrate/20190905140605_add_cloud_run_to_clusters_providers_gcp.rb17
-rw-r--r--db/migrate/20190909045845_create_project_pages_metadata.rb14
-rw-r--r--db/migrate/20190911115056_add_projects_max_pages_size.rb9
-rw-r--r--db/migrate/20190911115109_add_namespaces_max_pages_size.rb9
-rw-r--r--db/migrate/20190911115207_add_projects_max_artifacts_size.rb9
-rw-r--r--db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb9
-rw-r--r--db/migrate/20190912223232_add_role_to_users.rb12
-rw-r--r--db/migrate/20190913174707_add_spdx_id_to_software_licenses.rb13
-rw-r--r--db/migrate/20190913175827_add_index_to_software_licenses_on_spdx_id.rb17
-rw-r--r--db/migrate/20190918025618_add_user_and_timestamps_to_design_management_versions.rb16
-rw-r--r--db/migrate/20190918102042_create_grafana_integrations.rb15
-rw-r--r--db/migrate/20190919040324_add_successfull_pages_deploy_partial_index_on_ci_builds.rb23
-rw-r--r--db/migrate/20190919091300_create_evidences.rb14
-rw-r--r--db/migrate/20190919104119_index_timestamp_columns_for_merge_requests_creation_date.rb29
-rw-r--r--db/migrate/20190919162036_add_index_to_clusters_providers_gcp_on_cloud_run.rb17
-rw-r--r--db/migrate/20190919183411_add_index_packages_on_name_trigram_to_packages_packages.rb18
-rw-r--r--db/migrate/20190920194925_backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps.rb24
-rw-r--r--db/migrate/20190924124627_add_pull_mirror_branch_prefix_to_projects.rb9
-rw-r--r--db/migrate/20190925055714_default_request_access_groups.rb15
-rw-r--r--db/migrate/20190925055902_default_request_access_projects.rb15
-rw-r--r--db/migrate/20190926041216_add_user_indexes_to_design_management_versions.rb19
-rw-r--r--db/migrate/20190927055500_create_description_versions.rb29
-rw-r--r--db/migrate/20190927055540_add_index_to_sytem_note_metadata_description_version_id.rb19
-rw-r--r--db/migrate/20190927074328_add_index_on_snippet_content.rb18
-rw-r--r--db/migrate/20190929180751_create_vulnerabilities.rb39
-rw-r--r--db/migrate/20190929180813_add_reference_from_vulnerability_occurrences_to_occurrences.rb14
-rw-r--r--db/migrate/20190929180827_add_foreign_keys_and_indexes_to_vulnerabilities.rb76
-rw-r--r--db/migrate/20190930025655_add_incident_management_throttle_columns_to_application_setting.rb30
-rw-r--r--db/migrate/20190930063627_add_management_project_id_to_clusters.rb9
-rw-r--r--db/migrate/20190930082942_add_new_release_to_notification_settings.rb9
-rw-r--r--db/migrate/20191001040549_add_management_project_id_index_fk_to_clusters.rb19
-rw-r--r--db/migrate/20191003015155_add_self_managed_prometheus_alerts.rb21
-rw-r--r--db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb17
-rw-r--r--db/migrate/20191003064615_create_aws_roles.rb21
-rw-r--r--db/migrate/20191004133612_create_analytics_repository_file_commits.rb19
-rw-r--r--db/migrate/20191008013056_add_push_event_activities_limit_to_application_settings.rb17
-rw-r--r--db/migrate/20191008142331_add_ref_count_to_push_event_payloads.rb11
-rw-r--r--db/migrate/20191008180203_add_issuable_state_id_indexes.rb75
-rw-r--r--db/migrate/20191008200204_add_state_id_default_value.rb24
-rw-r--r--db/migrate/20191009222222_add_custom_http_clone_url_root_to_application_settings.rb13
-rw-r--r--db/migrate/20191014084150_add_index_on_snippets_project_id_and_visibility_level.rb17
-rw-r--r--db/migrate/20191014132931_remove_index_on_snippets_project_id.rb17
-rw-r--r--db/migrate/20191016072826_replace_ci_trigger_requests_index.rb21
-rw-r--r--db/migrate/20191016220135_add_join_table_for_self_managed_prometheus_alert_issues.rb22
-rw-r--r--db/post_migrate/20180306164012_add_path_index_to_redirect_routes.rb7
-rw-r--r--db/post_migrate/20190819231552_update_knative_prometheus_query_for_invocation_count.rb13
-rw-r--r--db/post_migrate/20190827102026_migrate_code_owner_approval_status_to_protected_branches_in_batches.rb46
-rw-r--r--db/post_migrate/20190905091812_schedule_project_any_approval_rule_migration.rb2
-rw-r--r--db/post_migrate/20190905091831_schedule_merge_request_any_approval_rule_migration.rb2
-rw-r--r--db/post_migrate/20190909141517_update_cs_vulnerability_confidence_column.rb32
-rw-r--r--db/post_migrate/20190911251732_sync_issuables_state_id.rb79
-rw-r--r--db/post_migrate/20190917173107_backfill_software_licenses_spdx_identifiers.rb57
-rw-r--r--db/post_migrate/20191002031332_schedule_pages_metadata_migration.rb30
-rw-r--r--db/post_migrate/20191007163701_populate_remaining_any_approver_rules_for_merge_requests.rb44
-rw-r--r--db/post_migrate/20191007163736_populate_remaining_any_approver_rules_for_projects.rb44
-rw-r--r--db/schema.rb264
-rw-r--r--doc/README.md1
-rw-r--r--doc/administration/audit_events.md29
-rw-r--r--doc/administration/auth/how_to_configure_ldap_gitlab_ce/index.md14
-rw-r--r--doc/administration/auth/how_to_configure_ldap_gitlab_ee/index.md2
-rw-r--r--doc/administration/auth/ldap-ee.md4
-rw-r--r--doc/administration/auth/ldap.md18
-rw-r--r--doc/administration/auth/oidc.md2
-rw-r--r--doc/administration/auth/smartcard.md2
-rw-r--r--doc/administration/custom_hooks.md7
-rw-r--r--doc/administration/geo/disaster_recovery/index.md3
-rw-r--r--doc/administration/geo/disaster_recovery/planned_failover.md18
-rw-r--r--doc/administration/geo/replication/configuration.md29
-rw-r--r--doc/administration/geo/replication/database.md48
-rw-r--r--doc/administration/geo/replication/external_database.md4
-rw-r--r--doc/administration/geo/replication/faq.md4
-rw-r--r--doc/administration/geo/replication/high_availability.md46
-rw-r--r--doc/administration/geo/replication/img/adding_a_secondary_node.pngbin0 -> 87593 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_add_geolocation_rule.pngbin0 -> 76035 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_add_traffic_policy_endpoints.pngbin0 -> 88896 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_clone_panel.pngbin0 -> 20007 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_create_policy_records_with_traffic_policy.pngbin0 -> 102350 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_created_policy_record.pngbin0 -> 141505 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_name_policy.pngbin0 -> 37964 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_policy_diagram.pngbin0 -> 56194 bytes
-rw-r--r--doc/administration/geo/replication/img/single_git_traffic_policies.pngbin0 -> 214666 bytes
-rw-r--r--doc/administration/geo/replication/index.md92
-rw-r--r--doc/administration/geo/replication/location_aware_git_url.md119
-rw-r--r--doc/administration/geo/replication/object_storage.md52
-rw-r--r--doc/administration/geo/replication/security_review.md16
-rw-r--r--doc/administration/geo/replication/troubleshooting.md6
-rw-r--r--doc/administration/geo/replication/using_a_geo_server.md2
-rw-r--r--doc/administration/gitaly/index.md219
-rw-r--r--doc/administration/gitaly/praefect.md114
-rw-r--r--doc/administration/gitaly/reference.md2
-rw-r--r--doc/administration/high_availability/README.md162
-rw-r--r--doc/administration/high_availability/consul.md12
-rw-r--r--doc/administration/high_availability/database.md70
-rw-r--r--doc/administration/high_availability/gitlab.md20
-rw-r--r--doc/administration/high_availability/load_balancer.md14
-rw-r--r--doc/administration/high_availability/monitoring_node.md4
-rw-r--r--doc/administration/high_availability/nfs.md9
-rw-r--r--doc/administration/high_availability/nfs_host_client_setup.md6
-rw-r--r--doc/administration/high_availability/pgbouncer.md34
-rw-r--r--doc/administration/high_availability/redis.md18
-rw-r--r--doc/administration/high_availability/redis_source.md4
-rw-r--r--doc/administration/housekeeping.md10
-rw-r--r--doc/administration/img/integration/plantuml-example.pngbin12559 -> 0 bytes
-rw-r--r--doc/administration/incoming_email.md2
-rw-r--r--doc/administration/index.md9
-rw-r--r--doc/administration/integration/plantuml.md51
-rw-r--r--doc/administration/integration/terminal.md4
-rw-r--r--doc/administration/issue_closing_pattern.md4
-rw-r--r--doc/administration/job_artifacts.md16
-rw-r--r--doc/administration/job_logs.md169
-rw-r--r--doc/administration/job_traces.md208
-rw-r--r--doc/administration/libravatar.md101
-rw-r--r--doc/administration/logs.md29
-rw-r--r--doc/administration/merge_request_diffs.md5
-rw-r--r--doc/administration/monitoring/github_imports.md10
-rw-r--r--doc/administration/monitoring/index.md2
-rw-r--r--doc/administration/monitoring/performance/grafana_configuration.md12
-rw-r--r--doc/administration/monitoring/performance/img/performance_bar_gitaly_threshold.pngbin0 -> 65296 bytes
-rw-r--r--doc/administration/monitoring/performance/img/performance_bar_request_selector_warning.pngbin0 -> 58287 bytes
-rw-r--r--doc/administration/monitoring/performance/img/performance_bar_request_selector_warning_expanded.pngbin0 -> 62514 bytes
-rw-r--r--doc/administration/monitoring/performance/index.md6
-rw-r--r--doc/administration/monitoring/performance/influxdb_configuration.md7
-rw-r--r--doc/administration/monitoring/performance/performance_bar.md18
-rw-r--r--doc/administration/monitoring/performance/prometheus.md2
-rw-r--r--doc/administration/monitoring/prometheus/gitlab_exporter.md23
-rw-r--r--doc/administration/monitoring/prometheus/gitlab_metrics.md17
-rw-r--r--doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md5
-rw-r--r--doc/administration/monitoring/prometheus/index.md15
-rw-r--r--doc/administration/operations/cleaning_up_redis_sessions.md4
-rw-r--r--doc/administration/operations/fast_ssh_key_lookup.md4
-rw-r--r--doc/administration/operations/moving_repositories.md6
-rw-r--r--doc/administration/operations/sidekiq_memory_killer.md66
-rw-r--r--doc/administration/operations/ssh_certificates.md2
-rw-r--r--doc/administration/operations/unicorn.md2
-rw-r--r--doc/administration/packages/container_registry.md14
-rw-r--r--doc/administration/packages/index.md1
-rw-r--r--doc/administration/pages/index.md46
-rw-r--r--doc/administration/pages/source.md26
-rw-r--r--doc/administration/raketasks/check.md2
-rw-r--r--doc/administration/raketasks/geo.md2
-rw-r--r--doc/administration/raketasks/maintenance.md8
-rw-r--r--doc/administration/raketasks/uploads/migrate.md36
-rw-r--r--doc/administration/repository_storage_paths.md4
-rw-r--r--doc/administration/repository_storage_types.md2
-rw-r--r--doc/administration/restart_gitlab.md2
-rw-r--r--doc/administration/smime_signing_email.md2
-rw-r--r--doc/administration/troubleshooting/debug.md16
-rw-r--r--doc/administration/troubleshooting/elasticsearch.md126
-rw-r--r--doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md55
-rw-r--r--doc/administration/troubleshooting/kubernetes_cheat_sheet.md20
-rw-r--r--doc/administration/troubleshooting/postgresql.md146
-rw-r--r--doc/administration/troubleshooting/sidekiq.md2
-rw-r--r--doc/administration/troubleshooting/test_environments.md6
-rw-r--r--doc/administration/uploads.md4
-rw-r--r--doc/api/README.md5
-rw-r--r--doc/api/access_requests.md48
-rw-r--r--doc/api/api_resources.md1
-rw-r--r--doc/api/audit_events.md115
-rw-r--r--doc/api/boards.md45
-rw-r--r--doc/api/commits.md7
-rw-r--r--doc/api/container_registry.md4
-rw-r--r--doc/api/deployments.md100
-rw-r--r--doc/api/environments.md16
-rw-r--r--doc/api/epics.md22
-rw-r--r--doc/api/features.md2
-rw-r--r--doc/api/graphql/index.md2
-rw-r--r--doc/api/graphql/reference/index.md290
-rw-r--r--doc/api/group_clusters.md2
-rw-r--r--doc/api/group_labels.md51
-rw-r--r--doc/api/groups.md35
-rw-r--r--doc/api/issues.md77
-rw-r--r--doc/api/jobs.md14
-rw-r--r--doc/api/labels.md63
-rw-r--r--doc/api/members.md45
-rw-r--r--doc/api/merge_requests.md6
-rw-r--r--doc/api/notes.md16
-rw-r--r--doc/api/oauth2.md2
-rw-r--r--doc/api/pipelines.md8
-rw-r--r--doc/api/project_aliases.md16
-rw-r--r--doc/api/project_import_export.md9
-rw-r--r--doc/api/project_snippets.md8
-rw-r--r--doc/api/projects.md15
-rw-r--r--doc/api/protected_branches.md56
-rw-r--r--doc/api/releases/index.md46
-rw-r--r--doc/api/runners.md8
-rw-r--r--doc/api/scim.md5
-rw-r--r--doc/api/services.md40
-rw-r--r--doc/api/settings.md20
-rw-r--r--doc/api/tags.md6
-rw-r--r--doc/api/templates/gitignores.md12
-rw-r--r--doc/api/templates/gitlab_ci_ymls.md30
-rw-r--r--doc/api/todos.md12
-rw-r--r--doc/api/users.md75
-rw-r--r--doc/ci/README.md10
-rw-r--r--doc/ci/caching/index.md15
-rw-r--r--doc/ci/chatops/README.md2
-rw-r--r--doc/ci/ci_cd_for_external_repos/index.md3
-rw-r--r--doc/ci/directed_acyclic_graph/index.md2
-rw-r--r--doc/ci/docker/using_docker_build.md113
-rw-r--r--doc/ci/enable_or_disable_ci.md20
-rw-r--r--doc/ci/environments.md34
-rw-r--r--doc/ci/examples/README.md58
-rw-r--r--doc/ci/examples/deploy_spring_boot_to_cloud_foundry/index.md4
-rw-r--r--doc/ci/examples/deployment/README.md2
-rw-r--r--doc/ci/examples/deployment/composer-npm-deploy.md4
-rw-r--r--doc/ci/examples/devops_and_game_dev_with_gitlab_ci_cd/index.md12
-rw-r--r--doc/ci/examples/end_to_end_testing_webdriverio/index.md24
-rw-r--r--doc/ci/examples/laravel_with_gitlab_and_envoy/index.md34
-rw-r--r--doc/ci/examples/test-and-deploy-python-application-to-heroku.md4
-rw-r--r--doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md2
-rw-r--r--doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md6
-rw-r--r--doc/ci/interactive_web_terminal/index.md2
-rw-r--r--doc/ci/introduction/index.md1
-rw-r--r--doc/ci/jenkins/index.md2
-rw-r--r--doc/ci/large_repositories/index.md2
-rw-r--r--doc/ci/merge_request_pipelines/index.md4
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline.pngbin4394 -> 0 bytes
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merged_result_pipeline_v12_3.pngbin0 -> 28194 bytes
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md13
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md6
-rw-r--r--doc/ci/multi_project_pipelines.md12
-rw-r--r--doc/ci/pipelines.md37
-rw-r--r--doc/ci/quick_start/README.md6
-rw-r--r--doc/ci/review_apps/index.md4
-rw-r--r--doc/ci/runners/README.md12
-rw-r--r--doc/ci/services/redis.md7
-rw-r--r--doc/ci/ssh_keys/README.md8
-rw-r--r--doc/ci/triggers/README.md4
-rw-r--r--doc/ci/variables/README.md26
-rw-r--r--doc/ci/variables/predefined_variables.md12
-rw-r--r--doc/ci/yaml/README.md326
-rw-r--r--doc/customization/branded_login_page.md37
-rw-r--r--doc/customization/branded_login_page/appearance.pngbin85263 -> 0 bytes
-rw-r--r--doc/customization/branded_login_page/custom_sign_in.pngbin79276 -> 0 bytes
-rw-r--r--doc/customization/branded_login_page/default_login_page.pngbin73004 -> 0 bytes
-rw-r--r--doc/customization/branded_page_and_email_header.md36
-rw-r--r--doc/customization/branded_page_and_email_header/appearance.pngbin5625 -> 0 bytes
-rw-r--r--doc/customization/branded_page_and_email_header/custom_brand_header.pngbin5279 -> 0 bytes
-rw-r--r--doc/customization/branded_page_and_email_header/custom_email_header.pngbin14671 -> 0 bytes
-rw-r--r--doc/customization/favicon.md36
-rw-r--r--doc/customization/favicon/appearance.pngbin28933 -> 0 bytes
-rw-r--r--doc/customization/favicon/custom_favicon.pngbin31600 -> 0 bytes
-rw-r--r--doc/customization/help_message.md35
-rw-r--r--doc/customization/help_message/help_text.pngbin38521 -> 0 bytes
-rw-r--r--doc/customization/help_message/help_text_on_help_page.pngbin24355 -> 0 bytes
-rw-r--r--doc/customization/index.md17
-rw-r--r--doc/customization/libravatar.md100
-rw-r--r--doc/customization/new_project_page.md37
-rw-r--r--doc/customization/new_project_page/appearance_settings.pngbin30473 -> 0 bytes
-rw-r--r--doc/customization/new_project_page/custom_new_project_page.pngbin69523 -> 0 bytes
-rw-r--r--doc/customization/new_project_page/default_new_project_page.pngbin62717 -> 0 bytes
-rw-r--r--doc/customization/system_header_and_footer_messages.md26
-rw-r--r--doc/customization/system_header_and_footer_messages/appearance.pngbin32295 -> 0 bytes
-rw-r--r--doc/customization/system_header_and_footer_messages/custom_header_footer.pngbin116778 -> 0 bytes
-rw-r--r--doc/customization/system_header_and_footer_messages/sign_up_custom_header_and_footer.pngbin78678 -> 0 bytes
-rw-r--r--doc/development/README.md15
-rw-r--r--doc/development/adding_database_indexes.md2
-rw-r--r--doc/development/api_graphql_styleguide.md7
-rw-r--r--doc/development/api_styleguide.md9
-rw-r--r--doc/development/architecture.md36
-rw-r--r--doc/development/auto_devops.md42
-rw-r--r--doc/development/automatic_ce_ee_merge.md243
-rw-r--r--doc/development/background_migrations.md4
-rw-r--r--doc/development/build_test_package.md2
-rw-r--r--doc/development/changelog.md13
-rw-r--r--doc/development/chatops_on_gitlabcom.md4
-rw-r--r--doc/development/code_review.md23
-rw-r--r--doc/development/contributing/design.md2
-rw-r--r--doc/development/contributing/index.md20
-rw-r--r--doc/development/contributing/issue_workflow.md32
-rw-r--r--doc/development/contributing/merge_request_workflow.md10
-rw-r--r--doc/development/dangerbot.md2
-rw-r--r--doc/development/database_debugging.md2
-rw-r--r--doc/development/database_review.md14
-rw-r--r--doc/development/deleting_migrations.md33
-rw-r--r--doc/development/documentation/feature-change-workflow.md177
-rw-r--r--doc/development/documentation/improvement-workflow.md62
-rw-r--r--doc/development/documentation/index.md103
-rw-r--r--doc/development/documentation/site_architecture/index.md6
-rw-r--r--doc/development/documentation/structure.md2
-rw-r--r--doc/development/documentation/styleguide.md178
-rw-r--r--doc/development/documentation/workflow.md336
-rw-r--r--doc/development/ee_features.md111
-rw-r--r--doc/development/elasticsearch.md11
-rw-r--r--doc/development/emails.md11
-rw-r--r--doc/development/event_tracking/frontend.md6
-rw-r--r--doc/development/experiment_guide/index.md65
-rw-r--r--doc/development/fe_guide/components.md66
-rw-r--r--doc/development/fe_guide/design_patterns.md2
-rw-r--r--doc/development/fe_guide/development_process.md2
-rw-r--r--doc/development/fe_guide/dropdowns.md4
-rw-r--r--doc/development/fe_guide/frontend_faq.md2
-rw-r--r--doc/development/fe_guide/graphql.md15
-rw-r--r--doc/development/fe_guide/icons.md6
-rw-r--r--doc/development/fe_guide/img/graphiql_explorer_v12_4.pngbin0 -> 353541 bytes
-rw-r--r--doc/development/fe_guide/index.md19
-rw-r--r--doc/development/fe_guide/performance.md29
-rw-r--r--doc/development/fe_guide/security.md2
-rw-r--r--doc/development/fe_guide/style_guide_js.md8
-rw-r--r--doc/development/fe_guide/style_guide_scss.md27
-rw-r--r--doc/development/fe_guide/vue.md50
-rw-r--r--doc/development/fe_guide/vuex.md7
-rw-r--r--doc/development/feature_flags/controls.md48
-rw-r--r--doc/development/feature_flags/development.md3
-rw-r--r--doc/development/file_storage.md2
-rw-r--r--doc/development/filtering_by_label.md2
-rw-r--r--doc/development/gitaly.md14
-rw-r--r--doc/development/go_guide/index.md4
-rw-r--r--doc/development/gotchas.md24
-rw-r--r--doc/development/i18n/externalization.md19
-rw-r--r--doc/development/i18n/index.md2
-rw-r--r--doc/development/i18n/merging_translations.md6
-rw-r--r--doc/development/i18n/proofreader.md10
-rw-r--r--doc/development/i18n/translation.md4
-rw-r--r--doc/development/img/memory_ruby_heap_fragmentation.pngbin0 -> 195892 bytes
-rw-r--r--doc/development/import_export.md11
-rw-r--r--doc/development/interacting_components.md2
-rw-r--r--doc/development/internal_api.md328
-rw-r--r--doc/development/issuable-like-models.md19
-rw-r--r--doc/development/kubernetes.md17
-rw-r--r--doc/development/licensing.md15
-rw-r--r--doc/development/merge_request_performance_guidelines.md6
-rw-r--r--doc/development/migration_style_guide.md50
-rw-r--r--doc/development/namespaces_storage_statistics.md4
-rw-r--r--doc/development/new_fe_guide/development/components.md2
-rw-r--r--doc/development/new_fe_guide/development/performance.md4
-rw-r--r--doc/development/new_fe_guide/modules/dirty_submit.md2
-rw-r--r--doc/development/new_fe_guide/style/javascript.md4
-rw-r--r--doc/development/performance.md30
-rw-r--r--doc/development/pipelines.md75
-rw-r--r--doc/development/profiling.md4
-rw-r--r--doc/development/projections.md34
-rw-r--r--doc/development/prometheus_metrics.md2
-rw-r--r--doc/development/python_guide/index.md2
-rw-r--r--doc/development/query_recorder.md2
-rw-r--r--doc/development/rake_tasks.md29
-rw-r--r--doc/development/repository_mirroring.md3
-rw-r--r--doc/development/routing.md6
-rw-r--r--doc/development/shell_commands.md6
-rw-r--r--doc/development/sidekiq_style_guide.md52
-rw-r--r--doc/development/sql.md4
-rw-r--r--doc/development/testing_guide/best_practices.md62
-rw-r--r--doc/development/testing_guide/ci.md33
-rw-r--r--doc/development/testing_guide/end_to_end/best_practices.md12
-rw-r--r--doc/development/testing_guide/end_to_end/index.md18
-rw-r--r--doc/development/testing_guide/end_to_end/page_objects.md2
-rw-r--r--doc/development/testing_guide/end_to_end/quick_start_guide.md4
-rw-r--r--doc/development/testing_guide/flaky_tests.md7
-rw-r--r--doc/development/testing_guide/frontend_testing.md24
-rw-r--r--doc/development/testing_guide/index.md6
-rw-r--r--doc/development/testing_guide/review_apps.md22
-rw-r--r--doc/development/testing_guide/testing_levels.md4
-rw-r--r--doc/development/testing_guide/testing_migrations_guide.md216
-rw-r--r--doc/development/uploads.md22
-rw-r--r--doc/development/utilities.md16
-rw-r--r--doc/downgrade_ee_to_ce/README.md2
-rw-r--r--doc/gitlab-basics/create-project.md6
-rw-r--r--doc/gitlab-basics/start-using-git.md12
-rw-r--r--doc/install/README.md4
-rw-r--r--doc/install/aws/index.md22
-rw-r--r--doc/install/azure/index.md34
-rw-r--r--doc/install/digitaloceandocker.md6
-rw-r--r--doc/install/google_cloud_platform/index.md4
-rw-r--r--doc/install/installation.md52
-rw-r--r--doc/install/openshift_and_gitlab/index.md57
-rw-r--r--doc/install/requirements.md14
-rw-r--r--doc/integration/README.md4
-rw-r--r--doc/integration/bitbucket.md2
-rw-r--r--doc/integration/elasticsearch.md38
-rw-r--r--doc/integration/google.md9
-rw-r--r--doc/integration/jenkins.md2
-rw-r--r--doc/integration/jenkins_deprecated.md2
-rw-r--r--doc/integration/kerberos.md8
-rw-r--r--doc/integration/omniauth.md24
-rw-r--r--doc/integration/openid_connect_provider.md3
-rw-r--r--doc/integration/recaptcha.md2
-rw-r--r--doc/integration/salesforce.md2
-rw-r--r--doc/integration/saml.md124
-rw-r--r--doc/integration/shibboleth.md6
-rw-r--r--doc/integration/slack.md2
-rw-r--r--doc/migrate_ci_to_ce/README.md8
-rw-r--r--doc/policy/maintenance.md6
-rw-r--r--doc/public_access/img/restrict_visibility_levels.pngbin18825 -> 0 bytes
-rw-r--r--doc/public_access/public_access.md19
-rw-r--r--doc/push_rules/push_rules.md4
-rw-r--r--doc/raketasks/backup_restore.md16
-rw-r--r--doc/raketasks/cleanup.md40
-rw-r--r--doc/raketasks/import.md4
-rw-r--r--doc/raketasks/list_repos.md2
-rw-r--r--doc/security/asset_proxy.md6
-rw-r--r--doc/security/crime_vulnerability.md4
-rw-r--r--doc/security/rack_attack.md6
-rw-r--r--doc/ssh/README.md40
-rw-r--r--doc/subscriptions/index.md19
-rw-r--r--doc/topics/authentication/index.md6
-rw-r--r--doc/topics/autodevops/img/disable_postgres.pngbin0 -> 10007 bytes
-rw-r--r--doc/topics/autodevops/img/guide_base_domain_v12_3.pngbin0 -> 154544 bytes
-rw-r--r--doc/topics/autodevops/img/guide_choose_gke.pngbin7895 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_cluster_apps.pngbin28667 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_cluster_apps_v12_3.pngbin0 -> 450677 bytes
-rw-r--r--doc/topics/autodevops/img/guide_create_project.pngbin17704 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_create_project_v12_3.pngbin0 -> 168562 bytes
-rw-r--r--doc/topics/autodevops/img/guide_enable_autodevops.pngbin27763 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_enable_autodevops_v12_3.pngbin0 -> 166170 bytes
-rw-r--r--doc/topics/autodevops/img/guide_environments.pngbin8434 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_environments_metrics.pngbin10231 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_environments_metrics_v12_3.pngbin0 -> 228405 bytes
-rw-r--r--doc/topics/autodevops/img/guide_environments_v12_3.pngbin0 -> 98954 bytes
-rw-r--r--doc/topics/autodevops/img/guide_first_pipeline.pngbin10350 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_first_pipeline_v12_3.pngbin0 -> 98803 bytes
-rw-r--r--doc/topics/autodevops/img/guide_gitlab_gke_details.pngbin22677 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.pngbin0 -> 366714 bytes
-rw-r--r--doc/topics/autodevops/img/guide_google_auth_v12_3.png (renamed from doc/topics/autodevops/img/guide_google_auth.png)bin12729 -> 12729 bytes
-rw-r--r--doc/topics/autodevops/img/guide_google_signin.pngbin14343 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_google_signin_v12_3.pngbin0 -> 139458 bytes
-rw-r--r--doc/topics/autodevops/img/guide_ide_commit.pngbin22029 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_ide_commit_v12_3.pngbin0 -> 217543 bytes
-rw-r--r--doc/topics/autodevops/img/guide_merge_request.pngbin31157 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_merge_request_review_app.pngbin25596 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_merge_request_review_app_v12_3.pngbin0 -> 271933 bytes
-rw-r--r--doc/topics/autodevops/img/guide_merge_request_v12_3.pngbin0 -> 312053 bytes
-rw-r--r--doc/topics/autodevops/img/guide_pipeline_stages.pngbin12557 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_pipeline_stages_v12_3.pngbin0 -> 135200 bytes
-rw-r--r--doc/topics/autodevops/img/guide_project_landing_page.pngbin19227 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_project_landing_page_v12_3.pngbin0 -> 236893 bytes
-rw-r--r--doc/topics/autodevops/img/guide_project_template.pngbin14699 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_project_template_v12_3.pngbin0 -> 170031 bytes
-rw-r--r--doc/topics/autodevops/index.md121
-rw-r--r--doc/topics/autodevops/quick_start_guide.md76
-rw-r--r--doc/topics/git/how_to_install_git/index.md2
-rw-r--r--doc/topics/git/index.md18
-rw-r--r--doc/topics/git/migrate_to_git_lfs/index.md6
-rw-r--r--doc/topics/git/numerous_undo_possibilities_in_git/index.md10
-rw-r--r--doc/topics/git/partial_clone.md5
-rw-r--r--doc/topics/git/troubleshooting_git.md15
-rw-r--r--doc/topics/git/useful_git_commands.md6
-rw-r--r--doc/university/README.md92
-rw-r--r--doc/university/bookclub/index.md4
-rw-r--r--doc/university/glossary/README.md2
-rw-r--r--doc/university/process/README.md6
-rw-r--r--doc/university/support/README.md6
-rw-r--r--doc/university/training/end-user/README.md14
-rw-r--r--doc/university/training/topics/env_setup.md2
-rw-r--r--doc/university/training/topics/getting_started.md6
-rw-r--r--doc/university/training/topics/merge_conflicts.md4
-rw-r--r--doc/university/training/topics/rollback_commits.md2
-rw-r--r--doc/university/training/topics/stash.md2
-rw-r--r--doc/university/training/topics/unstage.md2
-rw-r--r--doc/university/training/user_training.md6
-rw-r--r--doc/update/mysql_to_postgresql.md2
-rw-r--r--doc/update/patch_versions.md6
-rw-r--r--doc/update/upgrading_from_ce_to_ee.md4
-rw-r--r--doc/update/upgrading_from_source.md14
-rw-r--r--doc/user/admin_area/appearance.md113
-rw-r--r--doc/user/admin_area/geo_nodes.md4
-rw-r--r--doc/user/admin_area/img/appearance_favicon_v12_3.pngbin0 -> 234009 bytes
-rw-r--r--doc/user/admin_area/img/appearance_header_footer_v12_3.pngbin0 -> 240647 bytes
-rw-r--r--doc/user/admin_area/img/appearance_header_logo_v12_3.pngbin0 -> 168033 bytes
-rw-r--r--doc/user/admin_area/img/appearance_new_project_preview_v12_3.pngbin0 -> 475996 bytes
-rw-r--r--doc/user/admin_area/img/appearance_new_project_v12_3.pngbin0 -> 221407 bytes
-rw-r--r--doc/user/admin_area/img/appearance_sign_in_preview_v12_3.pngbin0 -> 1053743 bytes
-rw-r--r--doc/user/admin_area/img/appearance_sign_in_v12_3.pngbin0 -> 857575 bytes
-rw-r--r--doc/user/admin_area/index.md16
-rw-r--r--doc/user/admin_area/monitoring/health_check.md26
-rw-r--r--doc/user/admin_area/settings/account_and_limit_settings.md2
-rw-r--r--doc/user/admin_area/settings/continuous_integration.md36
-rw-r--r--doc/user/admin_area/settings/help_page.md49
-rw-r--r--doc/user/admin_area/settings/img/access_restrictions.pngbin3794 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/img/bulk_push_event_v12_4.pngbin0 -> 28215 bytes
-rw-r--r--doc/user/admin_area/settings/img/clone_panel_v12_4.pngbin0 -> 20007 bytes
-rw-r--r--doc/user/admin_area/settings/img/custom_git_clone_url_for_https_v12_4.pngbin0 -> 11171 bytes
-rw-r--r--doc/user/admin_area/settings/img/help_page_help_page_text_ex_v12_3.pngbin0 -> 303088 bytes
-rw-r--r--doc/user/admin_area/settings/img/help_page_help_page_text_v12_3.pngbin0 -> 90930 bytes
-rw-r--r--doc/user/admin_area/settings/img/help_page_help_text_ex_v12_3.pngbin0 -> 150716 bytes
-rw-r--r--doc/user/admin_area/settings/img/help_page_help_text_v12_3.pngbin0 -> 68525 bytes
-rw-r--r--doc/user/admin_area/settings/img/import_sources.pngbin5891 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/img/protected_paths.pngbin0 -> 198802 bytes
-rw-r--r--doc/user/admin_area/settings/img/push_event_activities_limit_v12_4.pngbin0 -> 46607 bytes
-rw-r--r--doc/user/admin_area/settings/index.md3
-rw-r--r--doc/user/admin_area/settings/protected_paths.md76
-rw-r--r--doc/user/admin_area/settings/push_event_activities_limit.md28
-rw-r--r--doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md2
-rw-r--r--doc/user/admin_area/settings/user_and_ip_rate_limits.md2
-rw-r--r--doc/user/admin_area/settings/visibility_and_access_controls.md167
-rw-r--r--doc/user/analytics/cycle_analytics.md10
-rw-r--r--doc/user/analytics/productivity_analytics.md6
-rw-r--r--doc/user/application_security/container_scanning/index.md19
-rw-r--r--doc/user/application_security/dast/index.md11
-rw-r--r--doc/user/application_security/dependency_scanning/index.md2
-rw-r--r--doc/user/application_security/img/dismissed_info.pngbin7847 -> 0 bytes
-rw-r--r--doc/user/application_security/img/dismissed_info_v12_3.pngbin0 -> 35439 bytes
-rw-r--r--doc/user/application_security/index.md43
-rw-r--r--doc/user/application_security/license_compliance/index.md2
-rw-r--r--doc/user/application_security/sast/analyzers.md6
-rw-r--r--doc/user/application_security/sast/index.md56
-rw-r--r--doc/user/application_security/security_dashboard/index.md6
-rw-r--r--doc/user/asciidoc.md4
-rw-r--r--doc/user/clusters/applications.md59
-rw-r--r--doc/user/clusters/environments.md11
-rw-r--r--doc/user/clusters/management_project.md101
-rw-r--r--doc/user/discussions/index.md3
-rw-r--r--doc/user/gitlab_com/index.md52
-rw-r--r--doc/user/group/clusters/index.md6
-rw-r--r--doc/user/group/custom_project_templates.md2
-rw-r--r--doc/user/group/epics/img/child_epics_roadmap.pngbin30149 -> 0 bytes
-rw-r--r--doc/user/group/epics/img/epic_view.pngbin176740 -> 0 bytes
-rwxr-xr-xdoc/user/group/epics/img/epic_view_roadmap_v12.3.pngbin0 -> 50491 bytes
-rwxr-xr-xdoc/user/group/epics/img/epic_view_v12.3.pngbin0 -> 61402 bytes
-rw-r--r--doc/user/group/epics/img/epics_list_view.pngbin96826 -> 0 bytes
-rwxr-xr-xdoc/user/group/epics/img/epics_list_view_v12.3.pngbin0 -> 39450 bytes
-rw-r--r--doc/user/group/epics/index.md112
-rw-r--r--doc/user/group/index.md46
-rw-r--r--doc/user/group/roadmap/index.md2
-rw-r--r--doc/user/group/saml_sso/index.md77
-rw-r--r--doc/user/group/subgroups/index.md13
-rw-r--r--doc/user/img/markdown_audio.mp3bin0 -> 68064 bytes
-rw-r--r--doc/user/index.md12
-rw-r--r--doc/user/instance/clusters/index.md6
-rw-r--r--doc/user/markdown.md43
-rw-r--r--doc/user/packages/conan_repository/img/conan_package_view.pngbin0 -> 178189 bytes
-rw-r--r--doc/user/packages/conan_repository/index.md135
-rw-r--r--doc/user/packages/index.md1
-rw-r--r--doc/user/packages/maven_repository/index.md2
-rw-r--r--doc/user/packages/npm_registry/index.md48
-rw-r--r--doc/user/permissions.md115
-rw-r--r--doc/user/profile/account/delete_account.md47
-rw-r--r--doc/user/profile/account/two_factor_authentication.md8
-rw-r--r--doc/user/profile/personal_access_tokens.md4
-rw-r--r--doc/user/project/canary_deployments.md4
-rw-r--r--doc/user/project/clusters/eks_and_gitlab/index.md2
-rw-r--r--doc/user/project/clusters/img/kubernetes_pod_logs.pngbin147319 -> 0 bytes
-rw-r--r--doc/user/project/clusters/img/kubernetes_pod_logs_v12_4.pngbin0 -> 393690 bytes
-rw-r--r--doc/user/project/clusters/index.md24
-rw-r--r--doc/user/project/clusters/kubernetes_pod_logs.md10
-rw-r--r--doc/user/project/clusters/runbooks/index.md6
-rw-r--r--doc/user/project/clusters/serverless/index.md10
-rw-r--r--doc/user/project/code_owners.md23
-rw-r--r--doc/user/project/deploy_boards.md7
-rw-r--r--doc/user/project/deploy_tokens/index.md2
-rw-r--r--doc/user/project/highlighting.md6
-rwxr-xr-xdoc/user/project/img/code_owners_approval_new_protected_branch_v12_4.pngbin0 -> 141341 bytes
-rwxr-xr-xdoc/user/project/img/code_owners_approval_protected_branch_v12_4.pngbin0 -> 16195 bytes
-rw-r--r--doc/user/project/img/code_owners_mr_widget_v12_4.pngbin0 -> 27875 bytes
-rw-r--r--doc/user/project/img/issue_boards_multi_select.pngbin0 -> 21091 bytes
-rw-r--r--doc/user/project/img/protected_branches_list_v12_3.pngbin8774 -> 32351 bytes
-rw-r--r--doc/user/project/img/protected_branches_page_v12_3.pngbin9445 -> 50657 bytes
-rw-r--r--doc/user/project/import/bitbucket.md6
-rw-r--r--doc/user/project/import/bitbucket_server.md2
-rw-r--r--doc/user/project/import/cvs.md4
-rw-r--r--doc/user/project/import/gemnasium.md4
-rw-r--r--doc/user/project/import/gitea.md14
-rw-r--r--doc/user/project/import/github.md11
-rw-r--r--doc/user/project/import/img/bitbucket_import_select_project.pngbin8688 -> 0 bytes
-rw-r--r--doc/user/project/import/img/bitbucket_import_select_project_v12_3.pngbin0 -> 112397 bytes
-rw-r--r--doc/user/project/import/img/import_projects_from_gitea_importer_v12_3.pngbin0 -> 50650 bytes
-rw-r--r--doc/user/project/import/img/import_projects_from_github_importer.pngbin17953 -> 0 bytes
-rw-r--r--doc/user/project/import/img/import_projects_from_github_importer_v12_3.pngbin0 -> 53497 bytes
-rw-r--r--doc/user/project/import/index.md8
-rw-r--r--doc/user/project/import/perforce.md4
-rw-r--r--doc/user/project/import/svn.md2
-rw-r--r--doc/user/project/index.md35
-rw-r--r--doc/user/project/insights/index.md85
-rw-r--r--doc/user/project/integrations/bamboo.md4
-rw-r--r--doc/user/project/integrations/generic_alerts.md14
-rw-r--r--doc/user/project/integrations/gitlab_slack_application.md4
-rw-r--r--doc/user/project/integrations/hipchat.md2
-rw-r--r--doc/user/project/integrations/img/prometheus_add_metric.pngbin53571 -> 47690 bytes
-rw-r--r--doc/user/project/integrations/img/prometheus_alert.pngbin24452 -> 8192 bytes
-rw-r--r--doc/user/project/integrations/img/prometheus_dashboard.pngbin12650 -> 12882 bytes
-rw-r--r--doc/user/project/integrations/irker.md2
-rw-r--r--doc/user/project/integrations/jira.md10
-rw-r--r--doc/user/project/integrations/jira_cloud_configuration.md2
-rw-r--r--doc/user/project/integrations/mattermost_slash_commands.md8
-rw-r--r--doc/user/project/integrations/project_services.md10
-rw-r--r--doc/user/project/integrations/prometheus.md12
-rw-r--r--doc/user/project/integrations/prometheus_library/nginx_ingress.md12
-rw-r--r--doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md12
-rw-r--r--doc/user/project/integrations/redmine.md2
-rw-r--r--doc/user/project/integrations/webhooks.md13
-rw-r--r--doc/user/project/issue_board.md26
-rw-r--r--doc/user/project/issues/crosslinking_issues.md2
-rw-r--r--doc/user/project/issues/csv_export.md7
-rw-r--r--doc/user/project/issues/design_management.md38
-rw-r--r--doc/user/project/issues/img/confirm_design_deletion_v12_4.pngbin0 -> 760814 bytes
-rw-r--r--doc/user/project/issues/img/delete_multiple_designs_v12_4.pngbin0 -> 1330499 bytes
-rw-r--r--doc/user/project/issues/img/delete_single_design_v12_4.pngbin0 -> 2834774 bytes
-rw-r--r--doc/user/project/issues/img/select_all_designs_v12_4.pngbin0 -> 1325569 bytes
-rw-r--r--doc/user/project/issues/img/select_designs_v12_4.pngbin0 -> 1324080 bytes
-rw-r--r--doc/user/project/issues/index.md2
-rw-r--r--doc/user/project/issues/issue_data_and_actions.md6
-rw-r--r--doc/user/project/issues/multiple_assignees_for_issues.md2
-rw-r--r--doc/user/project/labels.md31
-rw-r--r--doc/user/project/merge_requests/allow_collaboration.md2
-rw-r--r--doc/user/project/merge_requests/browser_performance_testing.md87
-rw-r--r--doc/user/project/merge_requests/code_quality.md7
-rw-r--r--doc/user/project/merge_requests/img/cross_project_dependencies_edit_inaccessible_v12_2.pngbin19461 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/cross_project_dependencies_edit_v12_2.pngbin19302 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/dependencies_edit_inaccessible_v12_4.pngbin0 -> 55947 bytes
-rw-r--r--doc/user/project/merge_requests/img/dependencies_edit_v12_4.pngbin0 -> 53561 bytes
-rw-r--r--doc/user/project/merge_requests/img/dependencies_view_v12_2.png (renamed from doc/user/project/merge_requests/img/cross_project_dependencies_view_v12_2.png)bin37528 -> 37528 bytes
-rwxr-xr-xdoc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_4.pngbin0 -> 26902 bytes
-rw-r--r--doc/user/project/merge_requests/index.md166
-rw-r--r--doc/user/project/merge_requests/merge_request_approvals.md71
-rw-r--r--doc/user/project/merge_requests/merge_request_dependencies.md31
-rw-r--r--doc/user/project/merge_requests/merge_when_pipeline_succeeds.md16
-rw-r--r--doc/user/project/milestones/index.md4
-rw-r--r--doc/user/project/new_ci_build_permissions_model.md4
-rw-r--r--doc/user/project/operations/feature_flags.md6
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/dns_concepts.md8
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/index.md40
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md2
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md6
-rw-r--r--doc/user/project/pages/getting_started_part_four.md14
-rw-r--r--doc/user/project/pages/getting_started_part_one.md8
-rw-r--r--doc/user/project/pages/getting_started_part_two.md2
-rw-r--r--doc/user/project/pages/index.md24
-rw-r--r--doc/user/project/pages/introduction.md7
-rw-r--r--doc/user/project/pipelines/job_artifacts.md22
-rw-r--r--doc/user/project/pipelines/schedules.md2
-rw-r--r--doc/user/project/pipelines/settings.md54
-rw-r--r--doc/user/project/protected_branches.md56
-rw-r--r--doc/user/project/push_options.md77
-rw-r--r--doc/user/project/quick_actions.md4
-rw-r--r--doc/user/project/releases/img/custom_notifications_new_release_v12_4.pngbin0 -> 65959 bytes
-rw-r--r--doc/user/project/releases/index.md12
-rw-r--r--doc/user/project/repository/reducing_the_repo_size_using_git.md12
-rw-r--r--doc/user/project/repository/web_editor.md2
-rw-r--r--doc/user/project/service_desk.md6
-rw-r--r--doc/user/project/settings/img/sharing_and_permissions_settings.pngbin46275 -> 0 bytes
-rw-r--r--doc/user/project/settings/img/sharing_and_permissions_settings_v12_3.pngbin0 -> 479637 bytes
-rw-r--r--doc/user/project/settings/import_export.md1
-rw-r--r--doc/user/project/settings/index.md2
-rw-r--r--doc/user/reserved_names.md93
-rw-r--r--doc/user/snippets.md4
-rw-r--r--doc/workflow/file_finder.md3
-rw-r--r--doc/workflow/forking_workflow.md2
-rw-r--r--doc/workflow/gitlab_flow.md1
-rw-r--r--doc/workflow/lfs/lfs_administration.md18
-rw-r--r--doc/workflow/lfs/manage_large_binaries_with_git_lfs.md6
-rw-r--r--doc/workflow/lfs/migrate_from_git_annex_to_git_lfs.md8
-rw-r--r--doc/workflow/notifications.md5
-rw-r--r--doc/workflow/repository_mirroring.md16
-rw-r--r--doc/workflow/time_tracking.md2
-rw-r--r--jest.config.js23
-rw-r--r--lib/api/api_guard.rb24
-rw-r--r--lib/api/commit_statuses.rb20
-rw-r--r--lib/api/commits.rb9
-rw-r--r--lib/api/deploy_keys.rb18
-rw-r--r--lib/api/deployments.rb82
-rw-r--r--lib/api/entities.rb84
-rw-r--r--lib/api/group_labels.rb52
-rw-r--r--lib/api/helpers.rb2
-rw-r--r--lib/api/helpers/graphql_helpers.rb2
-rw-r--r--lib/api/helpers/groups_helpers.rb10
-rw-r--r--lib/api/helpers/label_helpers.rb46
-rw-r--r--lib/api/helpers/runner.rb5
-rw-r--r--lib/api/internal/base.rb76
-rw-r--r--lib/api/internal/pages.rb9
-rw-r--r--lib/api/issues.rb3
-rw-r--r--lib/api/labels.rb70
-rw-r--r--lib/api/members.rb21
-rw-r--r--lib/api/notes.rb2
-rw-r--r--lib/api/project_container_repositories.rb12
-rw-r--r--lib/api/project_import.rb2
-rw-r--r--lib/api/protected_branches.rb4
-rw-r--r--lib/api/runner.rb8
-rw-r--r--lib/api/settings.rb2
-rw-r--r--lib/api/todos.rb2
-rw-r--r--lib/api/users.rb38
-rw-r--r--lib/api/version.rb5
-rw-r--r--lib/backup/manager.rb6
-rw-r--r--lib/backup/repository.rb11
-rw-r--r--lib/banzai/filter.rb2
-rw-r--r--lib/banzai/filter/ascii_doc_sanitization_filter.rb8
-rw-r--r--lib/banzai/filter/audio_link_filter.rb18
-rw-r--r--lib/banzai/filter/playable_link_filter.rb87
-rw-r--r--lib/banzai/filter/relative_link_filter.rb116
-rw-r--r--lib/banzai/filter/table_of_contents_filter.rb5
-rw-r--r--lib/banzai/filter/video_link_filter.rb70
-rw-r--r--lib/banzai/filter/wiki_link_filter.rb2
-rw-r--r--lib/banzai/pipeline.rb2
-rw-r--r--lib/banzai/pipeline/gfm_pipeline.rb1
-rw-r--r--lib/banzai/reference_parser.rb2
-rw-r--r--lib/banzai/reference_parser/mentioned_user_parser.rb18
-rw-r--r--lib/banzai/reference_parser/mentioned_users_by_group_parser.rb33
-rw-r--r--lib/banzai/reference_parser/mentioned_users_by_project_parser.rb19
-rw-r--r--lib/bitbucket/client.rb4
-rw-r--r--lib/bitbucket/page.rb2
-rw-r--r--lib/bitbucket_server/page.rb2
-rw-r--r--lib/container_registry/client.rb59
-rw-r--r--lib/container_registry/tag.rb9
-rw-r--r--lib/event_filter.rb11
-rw-r--r--lib/gitlab.rb20
-rw-r--r--lib/gitlab/access.rb27
-rw-r--r--lib/gitlab/analytics/cycle_analytics/base_query_builder.rb70
-rw-r--r--lib/gitlab/analytics/cycle_analytics/data_collector.rb42
-rw-r--r--lib/gitlab/analytics/cycle_analytics/default_stages.rb8
-rw-r--r--lib/gitlab/analytics/cycle_analytics/median.rb39
-rw-r--r--lib/gitlab/analytics/cycle_analytics/records_fetcher.rb132
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events.rb6
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start.rb15
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/issue_created.rb4
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit.rb10
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end.rb13
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created.rb4
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production.rb10
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished.rb10
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started.rb10
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged.rb10
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start.rb16
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/production_stage_end.rb33
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_events/stage_event.rb17
-rw-r--r--lib/gitlab/analytics/cycle_analytics/stage_query_helpers.rb28
-rw-r--r--lib/gitlab/artifacts/migration_helper.rb33
-rw-r--r--lib/gitlab/auth.rb19
-rw-r--r--lib/gitlab/auth/current_user_mode.rb66
-rw-r--r--lib/gitlab/auth/ip_rate_limiter.rb1
-rw-r--r--lib/gitlab/auth/user_access_denied_reason.rb5
-rw-r--r--lib/gitlab/background_migration.rb2
-rw-r--r--lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config.rb6
-rw-r--r--lib/gitlab/background_migration/legacy_upload_mover.rb2
-rw-r--r--lib/gitlab/background_migration/migrate_pages_metadata.rb38
-rw-r--r--lib/gitlab/badge/pipeline/template.rb2
-rw-r--r--lib/gitlab/bitbucket_import/importer.rb2
-rw-r--r--lib/gitlab/blame.rb1
-rw-r--r--lib/gitlab/cache/request_cache.rb2
-rw-r--r--lib/gitlab/ci/ansi2html.rb2
-rw-r--r--lib/gitlab/ci/ansi2json.rb12
-rw-r--r--lib/gitlab/ci/ansi2json/converter.rb133
-rw-r--r--lib/gitlab/ci/ansi2json/line.rb93
-rw-r--r--lib/gitlab/ci/ansi2json/parser.rb200
-rw-r--r--lib/gitlab/ci/ansi2json/state.rb98
-rw-r--r--lib/gitlab/ci/ansi2json/style.rb84
-rw-r--r--lib/gitlab/ci/build/policy.rb2
-rw-r--r--lib/gitlab/ci/build/prerequisite/kubernetes_namespace.rb2
-rw-r--r--lib/gitlab/ci/build/rules/rule/clause/exists.rb64
-rw-r--r--lib/gitlab/ci/config.rb49
-rw-r--r--lib/gitlab/ci/config/edge_stages_injector.rb57
-rw-r--r--lib/gitlab/ci/config/entry/rules/rule.rb8
-rw-r--r--lib/gitlab/ci/config/entry/stages.rb2
-rw-r--r--lib/gitlab/ci/config/external/context.rb64
-rw-r--r--lib/gitlab/ci/config/external/file/base.rb13
-rw-r--r--lib/gitlab/ci/config/external/file/local.rb9
-rw-r--r--lib/gitlab/ci/config/external/file/project.rb11
-rw-r--r--lib/gitlab/ci/config/external/mapper.rb27
-rw-r--r--lib/gitlab/ci/config/external/processor.rb4
-rw-r--r--lib/gitlab/ci/parsers/test/junit.rb6
-rw-r--r--lib/gitlab/ci/pipeline/seed/build.rb4
-rw-r--r--lib/gitlab/ci/pipeline/seed/deployment.rb53
-rw-r--r--lib/gitlab/ci/pipeline/seed/environment.rb38
-rw-r--r--lib/gitlab/ci/status/composite.rb120
-rw-r--r--lib/gitlab/ci/status/factory.rb2
-rw-r--r--lib/gitlab/ci/status/preparing.rb12
-rw-r--r--lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml7
-rw-r--r--lib/gitlab/ci/templates/Docker.gitlab-ci.yml4
-rw-r--r--lib/gitlab/ci/templates/Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml55
-rw-r--r--lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml5
-rw-r--r--lib/gitlab/ci/templates/Security/DAST.gitlab-ci.yml1
-rw-r--r--lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml96
-rw-r--r--lib/gitlab/ci/templates/Verify/Browser-Performance.gitlab-ci.yml29
-rw-r--r--lib/gitlab/ci/trace.rb3
-rw-r--r--lib/gitlab/ci/trace/stream.rb4
-rw-r--r--lib/gitlab/cluster/lifecycle_events.rb73
-rw-r--r--lib/gitlab/cluster/mixins/puma_cluster.rb19
-rw-r--r--lib/gitlab/cluster/mixins/unicorn_http_server.rb19
-rw-r--r--lib/gitlab/cluster/puma_worker_killer_initializer.rb14
-rw-r--r--lib/gitlab/config/entry/simplifiable.rb2
-rw-r--r--lib/gitlab/cycle_analytics/base_query.rb8
-rw-r--r--lib/gitlab/cycle_analytics/event_fetcher.rb2
-rw-r--r--lib/gitlab/cycle_analytics/issue_helper.rb4
-rw-r--r--lib/gitlab/cycle_analytics/plan_helper.rb5
-rw-r--r--lib/gitlab/cycle_analytics/stage.rb2
-rw-r--r--lib/gitlab/cycle_analytics/stage_summary.rb9
-rw-r--r--lib/gitlab/cycle_analytics/summary/base.rb3
-rw-r--r--lib/gitlab/cycle_analytics/summary/commit.rb2
-rw-r--r--lib/gitlab/cycle_analytics/summary/deploy.rb8
-rw-r--r--lib/gitlab/cycle_analytics/summary/issue.rb5
-rw-r--r--lib/gitlab/daemon.rb12
-rw-r--r--lib/gitlab/danger/helper.rb7
-rw-r--r--lib/gitlab/danger/request_helper.rb23
-rw-r--r--lib/gitlab/danger/roulette.rb33
-rw-r--r--lib/gitlab/danger/teammate.rb24
-rw-r--r--lib/gitlab/data_builder/push.rb8
-rw-r--r--lib/gitlab/database.rb4
-rw-r--r--lib/gitlab/database/migration_helpers.rb2
-rw-r--r--lib/gitlab/database_importers/self_monitoring/project/create_service.rb87
-rw-r--r--lib/gitlab/diff/file.rb2
-rw-r--r--lib/gitlab/diff/file_collection/merge_request_diff.rb14
-rw-r--r--lib/gitlab/diff/file_collection/merge_request_diff_base.rb21
-rw-r--r--lib/gitlab/diff/file_collection/merge_request_diff_batch.rb73
-rw-r--r--lib/gitlab/diff/lines_unfolder.rb2
-rw-r--r--lib/gitlab/diff/position.rb18
-rw-r--r--lib/gitlab/diff/position_collection.rb43
-rw-r--r--lib/gitlab/discussions_diff/file_collection.rb4
-rw-r--r--lib/gitlab/downtime_check.rb4
-rw-r--r--lib/gitlab/email/receiver.rb21
-rw-r--r--lib/gitlab/experimentation.rb93
-rw-r--r--lib/gitlab/file_markdown_link_builder.rb4
-rw-r--r--lib/gitlab/file_type_detection.rb57
-rw-r--r--lib/gitlab/git/changes.rb74
-rw-r--r--lib/gitlab/git/diff_collection.rb11
-rw-r--r--lib/gitlab/git/repository.rb12
-rw-r--r--lib/gitlab/git_post_receive.rb43
-rw-r--r--lib/gitlab/gitaly_client.rb27
-rw-r--r--lib/gitlab/gitaly_client/attributes_bag.rb4
-rw-r--r--lib/gitlab/gitaly_client/blob_service.rb34
-rw-r--r--lib/gitlab/gitaly_client/cleanup_service.rb2
-rw-r--r--lib/gitlab/gitaly_client/commit_service.rb20
-rw-r--r--lib/gitlab/gitaly_client/conflict_files_stitcher.rb7
-rw-r--r--lib/gitlab/gitaly_client/conflicts_service.rb4
-rw-r--r--lib/gitlab/gitaly_client/namespace_service.rb2
-rw-r--r--lib/gitlab/gitaly_client/object_pool_service.rb9
-rw-r--r--lib/gitlab/gitaly_client/operation_service.rb37
-rw-r--r--lib/gitlab/gitaly_client/ref_service.rb10
-rw-r--r--lib/gitlab/gitaly_client/remote_service.rb9
-rw-r--r--lib/gitlab/gitaly_client/repository_service.rb39
-rw-r--r--lib/gitlab/gitaly_client/storage_service.rb25
-rw-r--r--lib/gitlab/gitaly_client/storage_settings.rb2
-rw-r--r--lib/gitlab/gitaly_client/wiki_service.rb6
-rw-r--r--lib/gitlab/github_import/importer/releases_importer.rb12
-rw-r--r--lib/gitlab/gl_repository/repo_type.rb2
-rw-r--r--lib/gitlab/gon_helper.rb7
-rw-r--r--lib/gitlab/google_code_import/importer.rb2
-rw-r--r--lib/gitlab/gpg/commit.rb14
-rw-r--r--lib/gitlab/graphql/docs/renderer.rb11
-rw-r--r--lib/gitlab/graphql/docs/templates/default.md.haml3
-rw-r--r--lib/gitlab/health_checks/base_abstract_check.rb4
-rw-r--r--lib/gitlab/health_checks/gitaly_check.rb10
-rw-r--r--lib/gitlab/health_checks/metric.rb6
-rw-r--r--lib/gitlab/health_checks/probes/collection.rb52
-rw-r--r--lib/gitlab/health_checks/probes/status.rb14
-rw-r--r--lib/gitlab/health_checks/prometheus_text_format.rb42
-rw-r--r--lib/gitlab/health_checks/puma_check.rb36
-rw-r--r--lib/gitlab/health_checks/result.rb14
-rw-r--r--lib/gitlab/health_checks/simple_abstract_check.rb12
-rw-r--r--lib/gitlab/health_checks/unicorn_check.rb41
-rw-r--r--lib/gitlab/hook_data/issue_builder.rb5
-rw-r--r--lib/gitlab/import_export.rb6
-rw-r--r--lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb54
-rw-r--r--lib/gitlab/import_export/after_export_strategies/download_notification_strategy.rb6
-rw-r--r--lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb2
-rw-r--r--lib/gitlab/import_export/fast_hash_serializer.rb61
-rw-r--r--lib/gitlab/import_export/group_project_object_builder.rb65
-rw-r--r--lib/gitlab/import_export/import_export.yml23
-rw-r--r--lib/gitlab/import_export/importer.rb58
-rw-r--r--lib/gitlab/import_export/project_tree_restorer.rb135
-rw-r--r--lib/gitlab/import_export/project_tree_saver.rb5
-rw-r--r--lib/gitlab/import_export/relation_factory.rb64
-rw-r--r--lib/gitlab/import_export/repo_restorer.rb12
-rw-r--r--lib/gitlab/import_export/repo_saver.rb20
-rw-r--r--lib/gitlab/import_export/shared.rb57
-rw-r--r--lib/gitlab/import_export/uploads_manager.rb2
-rw-r--r--lib/gitlab/import_export/wiki_repo_saver.rb22
-rw-r--r--lib/gitlab/import_export/wiki_restorer.rb7
-rw-r--r--lib/gitlab/jira/http_client.rb4
-rw-r--r--lib/gitlab/kubernetes/helm/client_command.rb3
-rw-r--r--lib/gitlab/kubernetes/helm/reset_command.rb9
-rw-r--r--lib/gitlab/kubernetes/kube_client.rb2
-rw-r--r--lib/gitlab/legacy_github_import/release_formatter.rb3
-rw-r--r--lib/gitlab/lets_encrypt.rb4
-rw-r--r--lib/gitlab/lfs_token.rb15
-rw-r--r--lib/gitlab/metrics/dashboard/finder.rb8
-rw-r--r--lib/gitlab/metrics/exporter/base_exporter.rb93
-rw-r--r--lib/gitlab/metrics/exporter/sidekiq_exporter.rb43
-rw-r--r--lib/gitlab/metrics/exporter/web_exporter.rb67
-rw-r--r--lib/gitlab/metrics/requests_rack_middleware.rb20
-rw-r--r--lib/gitlab/metrics/samplers/base_sampler.rb5
-rw-r--r--lib/gitlab/metrics/samplers/puma_sampler.rb2
-rw-r--r--lib/gitlab/metrics/sidekiq_metrics_exporter.rb49
-rw-r--r--lib/gitlab/metrics/system.rb15
-rw-r--r--lib/gitlab/metrics/transaction.rb12
-rw-r--r--lib/gitlab/middleware/read_only/controller.rb19
-rw-r--r--lib/gitlab/pages_client.rb119
-rw-r--r--lib/gitlab/patch/prependable.rb4
-rw-r--r--lib/gitlab/phabricator_import/base_worker.rb2
-rw-r--r--lib/gitlab/profiler.rb3
-rw-r--r--lib/gitlab/quick_actions/extractor.rb4
-rw-r--r--lib/gitlab/quick_actions/issue_actions.rb3
-rw-r--r--lib/gitlab/reference_extractor.rb9
-rw-r--r--lib/gitlab/regex.rb9
-rw-r--r--lib/gitlab/request_context.rb6
-rw-r--r--lib/gitlab/sanitizers/exif.rb2
-rw-r--r--lib/gitlab/search_results.rb2
-rw-r--r--lib/gitlab/shell.rb27
-rw-r--r--lib/gitlab/sidekiq_config.rb14
-rw-r--r--lib/gitlab/sidekiq_daemon/memory_killer.rb263
-rw-r--r--lib/gitlab/sidekiq_daemon/monitor.rb52
-rw-r--r--lib/gitlab/sidekiq_logging/exception_handler.rb27
-rw-r--r--lib/gitlab/sidekiq_logging/structured_logger.rb30
-rw-r--r--lib/gitlab/sidekiq_middleware/metrics.rb11
-rw-r--r--lib/gitlab/sidekiq_middleware/monitor.rb2
-rw-r--r--lib/gitlab/slash_commands/presenters/access.rb9
-rw-r--r--lib/gitlab/snippet_search_results.rb47
-rw-r--r--lib/gitlab/submodule_links.rb6
-rw-r--r--lib/gitlab/tracking.rb24
-rw-r--r--lib/gitlab/tracking/incident_management.rb41
-rw-r--r--lib/gitlab/uploads/migration_helper.rb72
-rw-r--r--lib/gitlab/url_blocker.rb5
-rw-r--r--lib/gitlab/url_builder.rb2
-rw-r--r--lib/gitlab/usage_data.rb37
-rw-r--r--lib/gitlab/utils.rb8
-rw-r--r--lib/gitlab/utils/inline_hash.rb63
-rw-r--r--lib/gitlab/utils/safe_inline_hash.rb30
-rw-r--r--lib/gitlab/verify/uploads.rb2
-rw-r--r--lib/google_api/cloud_platform/client.rb55
-rw-r--r--lib/grafana/client.rb67
-rw-r--r--lib/quality/test_level.rb26
-rw-r--r--lib/tasks/frontend.rake5
-rw-r--r--lib/tasks/gitlab/artifacts/migrate.rake29
-rw-r--r--lib/tasks/gitlab/cleanup.rake63
-rw-r--r--lib/tasks/gitlab/graphql.rake20
-rw-r--r--lib/tasks/gitlab/lfs/migrate.rake15
-rw-r--r--lib/tasks/gitlab/pages.rake9
-rw-r--r--lib/tasks/gitlab/setup.rake1
-rw-r--r--lib/tasks/gitlab/traces.rake38
-rw-r--r--lib/tasks/gitlab/uploads/migrate.rake51
-rw-r--r--lib/tasks/migrate/setup_postgresql.rake11
-rw-r--r--lib/tasks/services.rake98
-rw-r--r--lib/uploaded_file.rb54
-rw-r--r--locale/ar_SA/gitlab.po3495
-rw-r--r--locale/bg/gitlab.po3367
-rw-r--r--locale/bn_BD/gitlab.po3367
-rw-r--r--locale/bn_IN/gitlab.po3367
-rw-r--r--locale/ca_ES/gitlab.po3367
-rw-r--r--locale/cs_CZ/gitlab.po3433
-rw-r--r--locale/cy_GB/gitlab.po3495
-rw-r--r--locale/da_DK/gitlab.po3367
-rw-r--r--locale/de/gitlab.po3591
-rw-r--r--locale/el_GR/gitlab.po3367
-rw-r--r--locale/eo/gitlab.po3367
-rw-r--r--locale/es/gitlab.po4051
-rw-r--r--locale/et_EE/gitlab.po3367
-rw-r--r--locale/fa_IR/gitlab.po19524
-rw-r--r--locale/fil_PH/gitlab.po3367
-rw-r--r--locale/fr/gitlab.po3559
-rw-r--r--locale/gitlab.pot1444
-rw-r--r--locale/gl_ES/gitlab.po3367
-rw-r--r--locale/he_IL/gitlab.po3439
-rw-r--r--locale/hi_IN/gitlab.po3367
-rw-r--r--locale/hr_HR/gitlab.po3399
-rw-r--r--locale/hu_HU/gitlab.po3367
-rw-r--r--locale/id_ID/gitlab.po3335
-rw-r--r--locale/it/gitlab.po3439
-rw-r--r--locale/ja/gitlab.po3757
-rw-r--r--locale/ka_GE/gitlab.po3367
-rw-r--r--locale/ko/gitlab.po3707
-rw-r--r--locale/mn_MN/gitlab.po3367
-rw-r--r--locale/nb_NO/gitlab.po3367
-rw-r--r--locale/nl_NL/gitlab.po3369
-rw-r--r--locale/pa_IN/gitlab.po3367
-rw-r--r--locale/pl_PL/gitlab.po3441
-rw-r--r--locale/pt_BR/gitlab.po4067
-rw-r--r--locale/pt_PT/gitlab.po4161
-rw-r--r--locale/ro_RO/gitlab.po3399
-rw-r--r--locale/ru/gitlab.po4581
-rw-r--r--locale/sk_SK/gitlab.po3431
-rw-r--r--locale/sq_AL/gitlab.po3367
-rw-r--r--locale/sr_CS/gitlab.po3399
-rw-r--r--locale/sr_SP/gitlab.po3399
-rw-r--r--locale/sv_SE/gitlab.po3367
-rw-r--r--locale/sw_KE/gitlab.po3367
-rw-r--r--locale/tr_TR/gitlab.po3489
-rw-r--r--locale/uk/gitlab.po5071
-rw-r--r--locale/unfound_translations.rb1
-rw-r--r--locale/vi_VN/gitlab.po19417
-rw-r--r--locale/zh_CN/gitlab.po4149
-rw-r--r--locale/zh_HK/gitlab.po3371
-rw-r--r--locale/zh_TW/gitlab.po3525
-rw-r--r--package.json42
-rw-r--r--public/-/emojis/1/100.pngbin0 -> 793 bytes
-rw-r--r--public/-/emojis/1/1234.pngbin0 -> 676 bytes
-rw-r--r--public/-/emojis/1/1F627.pngbin0 -> 821 bytes
-rw-r--r--public/-/emojis/1/8ball.pngbin0 -> 810 bytes
-rw-r--r--public/-/emojis/1/a.pngbin0 -> 469 bytes
-rw-r--r--public/-/emojis/1/ab.pngbin0 -> 505 bytes
-rw-r--r--public/-/emojis/1/abc.pngbin0 -> 646 bytes
-rw-r--r--public/-/emojis/1/abcd.pngbin0 -> 670 bytes
-rw-r--r--public/-/emojis/1/accept.pngbin0 -> 491 bytes
-rw-r--r--public/-/emojis/1/aerial_tramway.pngbin0 -> 759 bytes
-rw-r--r--public/-/emojis/1/airplane.pngbin0 -> 1152 bytes
-rw-r--r--public/-/emojis/1/airplane_arriving.pngbin0 -> 1101 bytes
-rw-r--r--public/-/emojis/1/airplane_departure.pngbin0 -> 1111 bytes
-rw-r--r--public/-/emojis/1/airplane_small.pngbin0 -> 1229 bytes
-rw-r--r--public/-/emojis/1/alarm_clock.pngbin0 -> 1044 bytes
-rw-r--r--public/-/emojis/1/alembic.pngbin0 -> 953 bytes
-rw-r--r--public/-/emojis/1/alien.pngbin0 -> 839 bytes
-rw-r--r--public/-/emojis/1/ambulance.pngbin0 -> 1238 bytes
-rw-r--r--public/-/emojis/1/amphora.pngbin0 -> 1044 bytes
-rw-r--r--public/-/emojis/1/anchor.pngbin0 -> 779 bytes
-rw-r--r--public/-/emojis/1/angel.pngbin0 -> 2077 bytes
-rw-r--r--public/-/emojis/1/angel_tone1.pngbin0 -> 2088 bytes
-rw-r--r--public/-/emojis/1/angel_tone2.pngbin0 -> 2075 bytes
-rw-r--r--public/-/emojis/1/angel_tone3.pngbin0 -> 2078 bytes
-rw-r--r--public/-/emojis/1/angel_tone4.pngbin0 -> 2076 bytes
-rw-r--r--public/-/emojis/1/angel_tone5.pngbin0 -> 2078 bytes
-rw-r--r--public/-/emojis/1/anger.pngbin0 -> 594 bytes
-rw-r--r--public/-/emojis/1/anger_right.pngbin0 -> 551 bytes
-rw-r--r--public/-/emojis/1/angry.pngbin0 -> 845 bytes
-rw-r--r--public/-/emojis/1/ant.pngbin0 -> 1412 bytes
-rw-r--r--public/-/emojis/1/apple.pngbin0 -> 655 bytes
-rw-r--r--public/-/emojis/1/aquarius.pngbin0 -> 648 bytes
-rw-r--r--public/-/emojis/1/aries.pngbin0 -> 711 bytes
-rw-r--r--public/-/emojis/1/arrow_backward.pngbin0 -> 429 bytes
-rw-r--r--public/-/emojis/1/arrow_double_down.pngbin0 -> 543 bytes
-rw-r--r--public/-/emojis/1/arrow_double_up.pngbin0 -> 535 bytes
-rw-r--r--public/-/emojis/1/arrow_down.pngbin0 -> 512 bytes
-rw-r--r--public/-/emojis/1/arrow_down_small.pngbin0 -> 455 bytes
-rw-r--r--public/-/emojis/1/arrow_forward.pngbin0 -> 429 bytes
-rw-r--r--public/-/emojis/1/arrow_heading_down.pngbin0 -> 563 bytes
-rw-r--r--public/-/emojis/1/arrow_heading_up.pngbin0 -> 559 bytes
-rw-r--r--public/-/emojis/1/arrow_left.pngbin0 -> 471 bytes
-rw-r--r--public/-/emojis/1/arrow_lower_left.pngbin0 -> 520 bytes
-rw-r--r--public/-/emojis/1/arrow_lower_right.pngbin0 -> 526 bytes
-rw-r--r--public/-/emojis/1/arrow_right.pngbin0 -> 468 bytes
-rw-r--r--public/-/emojis/1/arrow_right_hook.pngbin0 -> 644 bytes
-rw-r--r--public/-/emojis/1/arrow_up.pngbin0 -> 507 bytes
-rw-r--r--public/-/emojis/1/arrow_up_down.pngbin0 -> 474 bytes
-rw-r--r--public/-/emojis/1/arrow_up_small.pngbin0 -> 454 bytes
-rw-r--r--public/-/emojis/1/arrow_upper_left.pngbin0 -> 521 bytes
-rw-r--r--public/-/emojis/1/arrow_upper_right.pngbin0 -> 524 bytes
-rw-r--r--public/-/emojis/1/arrows_clockwise.pngbin0 -> 519 bytes
-rw-r--r--public/-/emojis/1/arrows_counterclockwise.pngbin0 -> 693 bytes
-rw-r--r--public/-/emojis/1/art.pngbin0 -> 1455 bytes
-rw-r--r--public/-/emojis/1/articulated_lorry.pngbin0 -> 1710 bytes
-rw-r--r--public/-/emojis/1/asterisk.pngbin0 -> 627 bytes
-rw-r--r--public/-/emojis/1/astonished.pngbin0 -> 862 bytes
-rw-r--r--public/-/emojis/1/athletic_shoe.pngbin0 -> 1595 bytes
-rw-r--r--public/-/emojis/1/atm.pngbin0 -> 1397 bytes
-rw-r--r--public/-/emojis/1/atom.pngbin0 -> 912 bytes
-rw-r--r--public/-/emojis/1/avocado.pngbin0 -> 1520 bytes
-rw-r--r--public/-/emojis/1/b.pngbin0 -> 391 bytes
-rw-r--r--public/-/emojis/1/baby.pngbin0 -> 1380 bytes
-rw-r--r--public/-/emojis/1/baby_bottle.pngbin0 -> 818 bytes
-rw-r--r--public/-/emojis/1/baby_chick.pngbin0 -> 1181 bytes
-rw-r--r--public/-/emojis/1/baby_symbol.pngbin0 -> 665 bytes
-rw-r--r--public/-/emojis/1/baby_tone1.pngbin0 -> 1392 bytes
-rw-r--r--public/-/emojis/1/baby_tone2.pngbin0 -> 1392 bytes
-rw-r--r--public/-/emojis/1/baby_tone3.pngbin0 -> 1403 bytes
-rw-r--r--public/-/emojis/1/baby_tone4.pngbin0 -> 1413 bytes
-rw-r--r--public/-/emojis/1/baby_tone5.pngbin0 -> 1405 bytes
-rw-r--r--public/-/emojis/1/back.pngbin0 -> 562 bytes
-rw-r--r--public/-/emojis/1/bacon.pngbin0 -> 2148 bytes
-rw-r--r--public/-/emojis/1/badminton.pngbin0 -> 1253 bytes
-rw-r--r--public/-/emojis/1/baggage_claim.pngbin0 -> 490 bytes
-rw-r--r--public/-/emojis/1/balloon.pngbin0 -> 501 bytes
-rw-r--r--public/-/emojis/1/ballot_box.pngbin0 -> 1355 bytes
-rw-r--r--public/-/emojis/1/ballot_box_with_check.pngbin0 -> 639 bytes
-rw-r--r--public/-/emojis/1/bamboo.pngbin0 -> 1946 bytes
-rw-r--r--public/-/emojis/1/banana.pngbin0 -> 1157 bytes
-rw-r--r--public/-/emojis/1/bangbang.pngbin0 -> 390 bytes
-rw-r--r--public/-/emojis/1/bank.pngbin0 -> 1358 bytes
-rw-r--r--public/-/emojis/1/bar_chart.pngbin0 -> 408 bytes
-rw-r--r--public/-/emojis/1/barber.pngbin0 -> 820 bytes
-rw-r--r--public/-/emojis/1/baseball.pngbin0 -> 1185 bytes
-rw-r--r--public/-/emojis/1/basketball.pngbin0 -> 1546 bytes
-rw-r--r--public/-/emojis/1/basketball_player.pngbin0 -> 1491 bytes
-rw-r--r--public/-/emojis/1/basketball_player_tone1.pngbin0 -> 1492 bytes
-rw-r--r--public/-/emojis/1/basketball_player_tone2.pngbin0 -> 1493 bytes
-rw-r--r--public/-/emojis/1/basketball_player_tone3.pngbin0 -> 1492 bytes
-rw-r--r--public/-/emojis/1/basketball_player_tone4.pngbin0 -> 1491 bytes
-rw-r--r--public/-/emojis/1/basketball_player_tone5.pngbin0 -> 1474 bytes
-rw-r--r--public/-/emojis/1/bat.pngbin0 -> 1190 bytes
-rw-r--r--public/-/emojis/1/bath.pngbin0 -> 1238 bytes
-rw-r--r--public/-/emojis/1/bath_tone1.pngbin0 -> 1235 bytes
-rw-r--r--public/-/emojis/1/bath_tone2.pngbin0 -> 1231 bytes
-rw-r--r--public/-/emojis/1/bath_tone3.pngbin0 -> 1236 bytes
-rw-r--r--public/-/emojis/1/bath_tone4.pngbin0 -> 1252 bytes
-rw-r--r--public/-/emojis/1/bath_tone5.pngbin0 -> 1239 bytes
-rw-r--r--public/-/emojis/1/bathtub.pngbin0 -> 767 bytes
-rw-r--r--public/-/emojis/1/battery.pngbin0 -> 228 bytes
-rw-r--r--public/-/emojis/1/beach.pngbin0 -> 942 bytes
-rw-r--r--public/-/emojis/1/beach_umbrella.pngbin0 -> 1486 bytes
-rw-r--r--public/-/emojis/1/bear.pngbin0 -> 1023 bytes
-rw-r--r--public/-/emojis/1/bed.pngbin0 -> 1572 bytes
-rw-r--r--public/-/emojis/1/bee.pngbin0 -> 1378 bytes
-rw-r--r--public/-/emojis/1/beer.pngbin0 -> 1338 bytes
-rw-r--r--public/-/emojis/1/beers.pngbin0 -> 2100 bytes
-rw-r--r--public/-/emojis/1/beetle.pngbin0 -> 1288 bytes
-rw-r--r--public/-/emojis/1/beginner.pngbin0 -> 545 bytes
-rw-r--r--public/-/emojis/1/bell.pngbin0 -> 1496 bytes
-rw-r--r--public/-/emojis/1/bellhop.pngbin0 -> 891 bytes
-rw-r--r--public/-/emojis/1/bento.pngbin0 -> 1127 bytes
-rw-r--r--public/-/emojis/1/bicyclist.pngbin0 -> 1911 bytes
-rw-r--r--public/-/emojis/1/bicyclist_tone1.pngbin0 -> 1860 bytes
-rw-r--r--public/-/emojis/1/bicyclist_tone2.pngbin0 -> 1866 bytes
-rw-r--r--public/-/emojis/1/bicyclist_tone3.pngbin0 -> 1851 bytes
-rw-r--r--public/-/emojis/1/bicyclist_tone4.pngbin0 -> 1852 bytes
-rw-r--r--public/-/emojis/1/bicyclist_tone5.pngbin0 -> 1840 bytes
-rw-r--r--public/-/emojis/1/bike.pngbin0 -> 1505 bytes
-rw-r--r--public/-/emojis/1/bikini.pngbin0 -> 613 bytes
-rw-r--r--public/-/emojis/1/biohazard.pngbin0 -> 794 bytes
-rw-r--r--public/-/emojis/1/bird.pngbin0 -> 1068 bytes
-rw-r--r--public/-/emojis/1/birthday.pngbin0 -> 2219 bytes
-rw-r--r--public/-/emojis/1/black_circle.pngbin0 -> 374 bytes
-rw-r--r--public/-/emojis/1/black_heart.pngbin0 -> 435 bytes
-rw-r--r--public/-/emojis/1/black_joker.pngbin0 -> 1091 bytes
-rw-r--r--public/-/emojis/1/black_large_square.pngbin0 -> 110 bytes
-rw-r--r--public/-/emojis/1/black_medium_small_square.pngbin0 -> 110 bytes
-rw-r--r--public/-/emojis/1/black_medium_square.pngbin0 -> 108 bytes
-rw-r--r--public/-/emojis/1/black_nib.pngbin0 -> 620 bytes
-rw-r--r--public/-/emojis/1/black_small_square.pngbin0 -> 108 bytes
-rw-r--r--public/-/emojis/1/black_square_button.pngbin0 -> 122 bytes
-rw-r--r--public/-/emojis/1/blossom.pngbin0 -> 867 bytes
-rw-r--r--public/-/emojis/1/blowfish.pngbin0 -> 1620 bytes
-rw-r--r--public/-/emojis/1/blue_book.pngbin0 -> 1347 bytes
-rw-r--r--public/-/emojis/1/blue_car.pngbin0 -> 1275 bytes
-rw-r--r--public/-/emojis/1/blue_heart.pngbin0 -> 435 bytes
-rw-r--r--public/-/emojis/1/blush.pngbin0 -> 812 bytes
-rw-r--r--public/-/emojis/1/boar.pngbin0 -> 1366 bytes
-rw-r--r--public/-/emojis/1/bomb.pngbin0 -> 702 bytes
-rw-r--r--public/-/emojis/1/book.pngbin0 -> 1716 bytes
-rw-r--r--public/-/emojis/1/bookmark.pngbin0 -> 747 bytes
-rw-r--r--public/-/emojis/1/bookmark_tabs.pngbin0 -> 1395 bytes
-rw-r--r--public/-/emojis/1/books.pngbin0 -> 2474 bytes
-rw-r--r--public/-/emojis/1/boom.pngbin0 -> 1110 bytes
-rw-r--r--public/-/emojis/1/boot.pngbin0 -> 662 bytes
-rw-r--r--public/-/emojis/1/bouquet.pngbin0 -> 1662 bytes
-rw-r--r--public/-/emojis/1/bow.pngbin0 -> 1394 bytes
-rw-r--r--public/-/emojis/1/bow_and_arrow.pngbin0 -> 1402 bytes
-rw-r--r--public/-/emojis/1/bow_tone1.pngbin0 -> 1394 bytes
-rw-r--r--public/-/emojis/1/bow_tone2.pngbin0 -> 1394 bytes
-rw-r--r--public/-/emojis/1/bow_tone3.pngbin0 -> 1394 bytes
-rw-r--r--public/-/emojis/1/bow_tone4.pngbin0 -> 1394 bytes
-rw-r--r--public/-/emojis/1/bow_tone5.pngbin0 -> 1394 bytes
-rw-r--r--public/-/emojis/1/bowling.pngbin0 -> 1426 bytes
-rw-r--r--public/-/emojis/1/boxing_glove.pngbin0 -> 1575 bytes
-rw-r--r--public/-/emojis/1/boy.pngbin0 -> 881 bytes
-rw-r--r--public/-/emojis/1/boy_tone1.pngbin0 -> 876 bytes
-rw-r--r--public/-/emojis/1/boy_tone2.pngbin0 -> 876 bytes
-rw-r--r--public/-/emojis/1/boy_tone3.pngbin0 -> 876 bytes
-rw-r--r--public/-/emojis/1/boy_tone4.pngbin0 -> 870 bytes
-rw-r--r--public/-/emojis/1/boy_tone5.pngbin0 -> 873 bytes
-rw-r--r--public/-/emojis/1/bread.pngbin0 -> 1419 bytes
-rw-r--r--public/-/emojis/1/bride_with_veil.pngbin0 -> 2452 bytes
-rw-r--r--public/-/emojis/1/bride_with_veil_tone1.pngbin0 -> 2464 bytes
-rw-r--r--public/-/emojis/1/bride_with_veil_tone2.pngbin0 -> 2457 bytes
-rw-r--r--public/-/emojis/1/bride_with_veil_tone3.pngbin0 -> 2463 bytes
-rw-r--r--public/-/emojis/1/bride_with_veil_tone4.pngbin0 -> 2463 bytes
-rw-r--r--public/-/emojis/1/bride_with_veil_tone5.pngbin0 -> 2462 bytes
-rw-r--r--public/-/emojis/1/bridge_at_night.pngbin0 -> 637 bytes
-rw-r--r--public/-/emojis/1/briefcase.pngbin0 -> 1275 bytes
-rw-r--r--public/-/emojis/1/broken_heart.pngbin0 -> 556 bytes
-rw-r--r--public/-/emojis/1/bug.pngbin0 -> 1599 bytes
-rw-r--r--public/-/emojis/1/bulb.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/bullettrain_front.pngbin0 -> 1450 bytes
-rw-r--r--public/-/emojis/1/bullettrain_side.pngbin0 -> 1538 bytes
-rw-r--r--public/-/emojis/1/burrito.pngbin0 -> 2938 bytes
-rw-r--r--public/-/emojis/1/bus.pngbin0 -> 1086 bytes
-rw-r--r--public/-/emojis/1/busstop.pngbin0 -> 626 bytes
-rw-r--r--public/-/emojis/1/bust_in_silhouette.pngbin0 -> 426 bytes
-rw-r--r--public/-/emojis/1/busts_in_silhouette.pngbin0 -> 526 bytes
-rw-r--r--public/-/emojis/1/butterfly.pngbin0 -> 1981 bytes
-rw-r--r--public/-/emojis/1/cactus.pngbin0 -> 628 bytes
-rw-r--r--public/-/emojis/1/cake.pngbin0 -> 2266 bytes
-rw-r--r--public/-/emojis/1/calendar.pngbin0 -> 2077 bytes
-rw-r--r--public/-/emojis/1/calendar_spiral.pngbin0 -> 1491 bytes
-rw-r--r--public/-/emojis/1/call_me.pngbin0 -> 894 bytes
-rw-r--r--public/-/emojis/1/call_me_tone1.pngbin0 -> 893 bytes
-rw-r--r--public/-/emojis/1/call_me_tone2.pngbin0 -> 891 bytes
-rw-r--r--public/-/emojis/1/call_me_tone3.pngbin0 -> 891 bytes
-rw-r--r--public/-/emojis/1/call_me_tone4.pngbin0 -> 891 bytes
-rw-r--r--public/-/emojis/1/call_me_tone5.pngbin0 -> 893 bytes
-rw-r--r--public/-/emojis/1/calling.pngbin0 -> 815 bytes
-rw-r--r--public/-/emojis/1/camel.pngbin0 -> 1190 bytes
-rw-r--r--public/-/emojis/1/camera.pngbin0 -> 1783 bytes
-rw-r--r--public/-/emojis/1/camera_with_flash.pngbin0 -> 2097 bytes
-rw-r--r--public/-/emojis/1/camping.pngbin0 -> 1513 bytes
-rw-r--r--public/-/emojis/1/cancer.pngbin0 -> 729 bytes
-rw-r--r--public/-/emojis/1/candle.pngbin0 -> 1250 bytes
-rw-r--r--public/-/emojis/1/candy.pngbin0 -> 1054 bytes
-rw-r--r--public/-/emojis/1/canoe.pngbin0 -> 1244 bytes
-rw-r--r--public/-/emojis/1/capital_abcd.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/capricorn.pngbin0 -> 688 bytes
-rw-r--r--public/-/emojis/1/card_box.pngbin0 -> 1523 bytes
-rw-r--r--public/-/emojis/1/card_index.pngbin0 -> 1929 bytes
-rw-r--r--public/-/emojis/1/carousel_horse.pngbin0 -> 1739 bytes
-rw-r--r--public/-/emojis/1/carrot.pngbin0 -> 1236 bytes
-rw-r--r--public/-/emojis/1/cartwheel.pngbin0 -> 1233 bytes
-rw-r--r--public/-/emojis/1/cartwheel_tone1.pngbin0 -> 1234 bytes
-rw-r--r--public/-/emojis/1/cartwheel_tone2.pngbin0 -> 1235 bytes
-rw-r--r--public/-/emojis/1/cartwheel_tone3.pngbin0 -> 1229 bytes
-rw-r--r--public/-/emojis/1/cartwheel_tone4.pngbin0 -> 1227 bytes
-rw-r--r--public/-/emojis/1/cartwheel_tone5.pngbin0 -> 1214 bytes
-rw-r--r--public/-/emojis/1/cat.pngbin0 -> 1354 bytes
-rw-r--r--public/-/emojis/1/cat2.pngbin0 -> 1781 bytes
-rw-r--r--public/-/emojis/1/cd.pngbin0 -> 908 bytes
-rw-r--r--public/-/emojis/1/chains.pngbin0 -> 708 bytes
-rw-r--r--public/-/emojis/1/champagne.pngbin0 -> 1205 bytes
-rw-r--r--public/-/emojis/1/champagne_glass.pngbin0 -> 1984 bytes
-rw-r--r--public/-/emojis/1/chart.pngbin0 -> 724 bytes
-rw-r--r--public/-/emojis/1/chart_with_downwards_trend.pngbin0 -> 709 bytes
-rw-r--r--public/-/emojis/1/chart_with_upwards_trend.pngbin0 -> 688 bytes
-rw-r--r--public/-/emojis/1/checkered_flag.pngbin0 -> 787 bytes
-rw-r--r--public/-/emojis/1/cheese.pngbin0 -> 1697 bytes
-rw-r--r--public/-/emojis/1/cherries.pngbin0 -> 1211 bytes
-rw-r--r--public/-/emojis/1/cherry_blossom.pngbin0 -> 1129 bytes
-rw-r--r--public/-/emojis/1/chestnut.pngbin0 -> 1337 bytes
-rw-r--r--public/-/emojis/1/chicken.pngbin0 -> 1267 bytes
-rw-r--r--public/-/emojis/1/children_crossing.pngbin0 -> 778 bytes
-rw-r--r--public/-/emojis/1/chipmunk.pngbin0 -> 1454 bytes
-rw-r--r--public/-/emojis/1/chocolate_bar.pngbin0 -> 771 bytes
-rw-r--r--public/-/emojis/1/christmas_tree.pngbin0 -> 1542 bytes
-rw-r--r--public/-/emojis/1/church.pngbin0 -> 1298 bytes
-rw-r--r--public/-/emojis/1/cinema.pngbin0 -> 585 bytes
-rw-r--r--public/-/emojis/1/circus_tent.pngbin0 -> 1369 bytes
-rw-r--r--public/-/emojis/1/city_dusk.pngbin0 -> 431 bytes
-rw-r--r--public/-/emojis/1/city_sunset.pngbin0 -> 997 bytes
-rw-r--r--public/-/emojis/1/cityscape.pngbin0 -> 599 bytes
-rw-r--r--public/-/emojis/1/cl.pngbin0 -> 393 bytes
-rw-r--r--public/-/emojis/1/clap.pngbin0 -> 1456 bytes
-rw-r--r--public/-/emojis/1/clap_tone1.pngbin0 -> 1458 bytes
-rw-r--r--public/-/emojis/1/clap_tone2.pngbin0 -> 1458 bytes
-rw-r--r--public/-/emojis/1/clap_tone3.pngbin0 -> 1458 bytes
-rw-r--r--public/-/emojis/1/clap_tone4.pngbin0 -> 1458 bytes
-rw-r--r--public/-/emojis/1/clap_tone5.pngbin0 -> 1444 bytes
-rw-r--r--public/-/emojis/1/clapper.pngbin0 -> 1535 bytes
-rw-r--r--public/-/emojis/1/classical_building.pngbin0 -> 1006 bytes
-rw-r--r--public/-/emojis/1/clipboard.pngbin0 -> 1345 bytes
-rw-r--r--public/-/emojis/1/clock.pngbin0 -> 592 bytes
-rw-r--r--public/-/emojis/1/clock1.pngbin0 -> 586 bytes
-rw-r--r--public/-/emojis/1/clock10.pngbin0 -> 593 bytes
-rw-r--r--public/-/emojis/1/clock1030.pngbin0 -> 530 bytes
-rw-r--r--public/-/emojis/1/clock11.pngbin0 -> 590 bytes
-rw-r--r--public/-/emojis/1/clock1130.pngbin0 -> 583 bytes
-rw-r--r--public/-/emojis/1/clock12.pngbin0 -> 480 bytes
-rw-r--r--public/-/emojis/1/clock1230.pngbin0 -> 579 bytes
-rw-r--r--public/-/emojis/1/clock130.pngbin0 -> 526 bytes
-rw-r--r--public/-/emojis/1/clock2.pngbin0 -> 591 bytes
-rw-r--r--public/-/emojis/1/clock230.pngbin0 -> 576 bytes
-rw-r--r--public/-/emojis/1/clock3.pngbin0 -> 482 bytes
-rw-r--r--public/-/emojis/1/clock330.pngbin0 -> 568 bytes
-rw-r--r--public/-/emojis/1/clock4.pngbin0 -> 592 bytes
-rw-r--r--public/-/emojis/1/clock430.pngbin0 -> 531 bytes
-rw-r--r--public/-/emojis/1/clock5.pngbin0 -> 585 bytes
-rw-r--r--public/-/emojis/1/clock530.pngbin0 -> 552 bytes
-rw-r--r--public/-/emojis/1/clock6.pngbin0 -> 466 bytes
-rw-r--r--public/-/emojis/1/clock630.pngbin0 -> 536 bytes
-rw-r--r--public/-/emojis/1/clock7.pngbin0 -> 581 bytes
-rw-r--r--public/-/emojis/1/clock730.pngbin0 -> 531 bytes
-rw-r--r--public/-/emojis/1/clock8.pngbin0 -> 590 bytes
-rw-r--r--public/-/emojis/1/clock830.pngbin0 -> 570 bytes
-rw-r--r--public/-/emojis/1/clock9.pngbin0 -> 484 bytes
-rw-r--r--public/-/emojis/1/clock930.pngbin0 -> 576 bytes
-rw-r--r--public/-/emojis/1/closed_book.pngbin0 -> 1359 bytes
-rw-r--r--public/-/emojis/1/closed_lock_with_key.pngbin0 -> 1250 bytes
-rw-r--r--public/-/emojis/1/closed_umbrella.pngbin0 -> 1002 bytes
-rw-r--r--public/-/emojis/1/cloud.pngbin0 -> 626 bytes
-rw-r--r--public/-/emojis/1/cloud_lightning.pngbin0 -> 767 bytes
-rw-r--r--public/-/emojis/1/cloud_rain.pngbin0 -> 876 bytes
-rw-r--r--public/-/emojis/1/cloud_snow.pngbin0 -> 823 bytes
-rw-r--r--public/-/emojis/1/cloud_tornado.pngbin0 -> 1519 bytes
-rw-r--r--public/-/emojis/1/clown.pngbin0 -> 1818 bytes
-rw-r--r--public/-/emojis/1/clubs.pngbin0 -> 458 bytes
-rw-r--r--public/-/emojis/1/cocktail.pngbin0 -> 1027 bytes
-rw-r--r--public/-/emojis/1/coffee.pngbin0 -> 1679 bytes
-rw-r--r--public/-/emojis/1/coffin.pngbin0 -> 2195 bytes
-rw-r--r--public/-/emojis/1/cold_sweat.pngbin0 -> 971 bytes
-rw-r--r--public/-/emojis/1/comet.pngbin0 -> 1819 bytes
-rw-r--r--public/-/emojis/1/compression.pngbin0 -> 1612 bytes
-rw-r--r--public/-/emojis/1/computer.pngbin0 -> 369 bytes
-rw-r--r--public/-/emojis/1/confetti_ball.pngbin0 -> 1703 bytes
-rw-r--r--public/-/emojis/1/confounded.pngbin0 -> 844 bytes
-rw-r--r--public/-/emojis/1/confused.pngbin0 -> 647 bytes
-rw-r--r--public/-/emojis/1/congratulations.pngbin0 -> 729 bytes
-rw-r--r--public/-/emojis/1/construction.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/construction_site.pngbin0 -> 668 bytes
-rw-r--r--public/-/emojis/1/construction_worker.pngbin0 -> 1126 bytes
-rw-r--r--public/-/emojis/1/construction_worker_tone1.pngbin0 -> 1102 bytes
-rw-r--r--public/-/emojis/1/construction_worker_tone2.pngbin0 -> 1102 bytes
-rw-r--r--public/-/emojis/1/construction_worker_tone3.pngbin0 -> 1102 bytes
-rw-r--r--public/-/emojis/1/construction_worker_tone4.pngbin0 -> 1095 bytes
-rw-r--r--public/-/emojis/1/construction_worker_tone5.pngbin0 -> 1119 bytes
-rw-r--r--public/-/emojis/1/control_knobs.pngbin0 -> 1104 bytes
-rw-r--r--public/-/emojis/1/convenience_store.pngbin0 -> 528 bytes
-rw-r--r--public/-/emojis/1/cookie.pngbin0 -> 1351 bytes
-rw-r--r--public/-/emojis/1/cooking.pngbin0 -> 764 bytes
-rw-r--r--public/-/emojis/1/cool.pngbin0 -> 396 bytes
-rw-r--r--public/-/emojis/1/cop.pngbin0 -> 1440 bytes
-rw-r--r--public/-/emojis/1/cop_tone1.pngbin0 -> 1421 bytes
-rw-r--r--public/-/emojis/1/cop_tone2.pngbin0 -> 1424 bytes
-rw-r--r--public/-/emojis/1/cop_tone3.pngbin0 -> 1419 bytes
-rw-r--r--public/-/emojis/1/cop_tone4.pngbin0 -> 1417 bytes
-rw-r--r--public/-/emojis/1/cop_tone5.pngbin0 -> 1433 bytes
-rw-r--r--public/-/emojis/1/copyright.pngbin0 -> 530 bytes
-rw-r--r--public/-/emojis/1/corn.pngbin0 -> 1547 bytes
-rw-r--r--public/-/emojis/1/couch.pngbin0 -> 1362 bytes
-rw-r--r--public/-/emojis/1/couple.pngbin0 -> 1537 bytes
-rw-r--r--public/-/emojis/1/couple_mm.pngbin0 -> 1091 bytes
-rw-r--r--public/-/emojis/1/couple_with_heart.pngbin0 -> 1285 bytes
-rw-r--r--public/-/emojis/1/couple_ww.pngbin0 -> 1034 bytes
-rw-r--r--public/-/emojis/1/couplekiss.pngbin0 -> 1380 bytes
-rw-r--r--public/-/emojis/1/cow.pngbin0 -> 1640 bytes
-rw-r--r--public/-/emojis/1/cow2.pngbin0 -> 1810 bytes
-rw-r--r--public/-/emojis/1/cowboy.pngbin0 -> 1353 bytes
-rw-r--r--public/-/emojis/1/crab.pngbin0 -> 1475 bytes
-rw-r--r--public/-/emojis/1/crayon.pngbin0 -> 633 bytes
-rw-r--r--public/-/emojis/1/credit_card.pngbin0 -> 1012 bytes
-rw-r--r--public/-/emojis/1/crescent_moon.pngbin0 -> 446 bytes
-rw-r--r--public/-/emojis/1/cricket.pngbin0 -> 1060 bytes
-rw-r--r--public/-/emojis/1/crocodile.pngbin0 -> 2408 bytes
-rw-r--r--public/-/emojis/1/croissant.pngbin0 -> 1313 bytes
-rw-r--r--public/-/emojis/1/cross.pngbin0 -> 408 bytes
-rw-r--r--public/-/emojis/1/crossed_flags.pngbin0 -> 1239 bytes
-rw-r--r--public/-/emojis/1/crossed_swords.pngbin0 -> 1591 bytes
-rw-r--r--public/-/emojis/1/crown.pngbin0 -> 1534 bytes
-rw-r--r--public/-/emojis/1/cruise_ship.pngbin0 -> 2272 bytes
-rw-r--r--public/-/emojis/1/cry.pngbin0 -> 1123 bytes
-rw-r--r--public/-/emojis/1/crying_cat_face.pngbin0 -> 1875 bytes
-rw-r--r--public/-/emojis/1/crystal_ball.pngbin0 -> 1913 bytes
-rw-r--r--public/-/emojis/1/cucumber.pngbin0 -> 1357 bytes
-rw-r--r--public/-/emojis/1/cupid.pngbin0 -> 846 bytes
-rw-r--r--public/-/emojis/1/curly_loop.pngbin0 -> 545 bytes
-rw-r--r--public/-/emojis/1/currency_exchange.pngbin0 -> 576 bytes
-rw-r--r--public/-/emojis/1/curry.pngbin0 -> 1754 bytes
-rw-r--r--public/-/emojis/1/custard.pngbin0 -> 1273 bytes
-rw-r--r--public/-/emojis/1/customs.pngbin0 -> 648 bytes
-rw-r--r--public/-/emojis/1/cyclone.pngbin0 -> 797 bytes
-rw-r--r--public/-/emojis/1/dagger.pngbin0 -> 916 bytes
-rw-r--r--public/-/emojis/1/dancer.pngbin0 -> 1405 bytes
-rw-r--r--public/-/emojis/1/dancer_tone1.pngbin0 -> 1420 bytes
-rw-r--r--public/-/emojis/1/dancer_tone2.pngbin0 -> 1423 bytes
-rw-r--r--public/-/emojis/1/dancer_tone3.pngbin0 -> 1429 bytes
-rw-r--r--public/-/emojis/1/dancer_tone4.pngbin0 -> 1428 bytes
-rw-r--r--public/-/emojis/1/dancer_tone5.pngbin0 -> 1418 bytes
-rw-r--r--public/-/emojis/1/dancers.pngbin0 -> 1872 bytes
-rw-r--r--public/-/emojis/1/dango.pngbin0 -> 802 bytes
-rw-r--r--public/-/emojis/1/dark_sunglasses.pngbin0 -> 829 bytes
-rw-r--r--public/-/emojis/1/dart.pngbin0 -> 1374 bytes
-rw-r--r--public/-/emojis/1/dash.pngbin0 -> 840 bytes
-rw-r--r--public/-/emojis/1/date.pngbin0 -> 788 bytes
-rw-r--r--public/-/emojis/1/deciduous_tree.pngbin0 -> 1267 bytes
-rw-r--r--public/-/emojis/1/deer.pngbin0 -> 1606 bytes
-rw-r--r--public/-/emojis/1/department_store.pngbin0 -> 673 bytes
-rw-r--r--public/-/emojis/1/desert.pngbin0 -> 1443 bytes
-rw-r--r--public/-/emojis/1/desktop.pngbin0 -> 311 bytes
-rw-r--r--public/-/emojis/1/diamond_shape_with_a_dot_inside.pngbin0 -> 693 bytes
-rw-r--r--public/-/emojis/1/diamonds.pngbin0 -> 247 bytes
-rw-r--r--public/-/emojis/1/disappointed.pngbin0 -> 757 bytes
-rw-r--r--public/-/emojis/1/disappointed_relieved.pngbin0 -> 835 bytes
-rw-r--r--public/-/emojis/1/dividers.pngbin0 -> 810 bytes
-rw-r--r--public/-/emojis/1/dizzy.pngbin0 -> 795 bytes
-rw-r--r--public/-/emojis/1/dizzy_face.pngbin0 -> 710 bytes
-rw-r--r--public/-/emojis/1/do_not_litter.pngbin0 -> 1010 bytes
-rw-r--r--public/-/emojis/1/dog.pngbin0 -> 1674 bytes
-rw-r--r--public/-/emojis/1/dog2.pngbin0 -> 2085 bytes
-rw-r--r--public/-/emojis/1/dollar.pngbin0 -> 405 bytes
-rw-r--r--public/-/emojis/1/dolls.pngbin0 -> 2249 bytes
-rw-r--r--public/-/emojis/1/dolphin.pngbin0 -> 1697 bytes
-rw-r--r--public/-/emojis/1/door.pngbin0 -> 1105 bytes
-rw-r--r--public/-/emojis/1/doughnut.pngbin0 -> 1322 bytes
-rw-r--r--public/-/emojis/1/dove.pngbin0 -> 967 bytes
-rw-r--r--public/-/emojis/1/dragon.pngbin0 -> 1574 bytes
-rw-r--r--public/-/emojis/1/dragon_face.pngbin0 -> 1769 bytes
-rw-r--r--public/-/emojis/1/dress.pngbin0 -> 1001 bytes
-rw-r--r--public/-/emojis/1/dromedary_camel.pngbin0 -> 1515 bytes
-rw-r--r--public/-/emojis/1/drooling_face.pngbin0 -> 1049 bytes
-rw-r--r--public/-/emojis/1/droplet.pngbin0 -> 411 bytes
-rw-r--r--public/-/emojis/1/drum.pngbin0 -> 1870 bytes
-rw-r--r--public/-/emojis/1/duck.pngbin0 -> 1729 bytes
-rw-r--r--public/-/emojis/1/dvd.pngbin0 -> 933 bytes
-rw-r--r--public/-/emojis/1/e-mail.pngbin0 -> 1196 bytes
-rw-r--r--public/-/emojis/1/eagle.pngbin0 -> 2222 bytes
-rw-r--r--public/-/emojis/1/ear.pngbin0 -> 860 bytes
-rw-r--r--public/-/emojis/1/ear_of_rice.pngbin0 -> 1422 bytes
-rw-r--r--public/-/emojis/1/ear_tone1.pngbin0 -> 860 bytes
-rw-r--r--public/-/emojis/1/ear_tone2.pngbin0 -> 860 bytes
-rw-r--r--public/-/emojis/1/ear_tone3.pngbin0 -> 860 bytes
-rw-r--r--public/-/emojis/1/ear_tone4.pngbin0 -> 860 bytes
-rw-r--r--public/-/emojis/1/ear_tone5.pngbin0 -> 860 bytes
-rw-r--r--public/-/emojis/1/earth_africa.pngbin0 -> 978 bytes
-rw-r--r--public/-/emojis/1/earth_americas.pngbin0 -> 1031 bytes
-rw-r--r--public/-/emojis/1/earth_asia.pngbin0 -> 966 bytes
-rw-r--r--public/-/emojis/1/egg.pngbin0 -> 710 bytes
-rw-r--r--public/-/emojis/1/eggplant.pngbin0 -> 773 bytes
-rw-r--r--public/-/emojis/1/eight.pngbin0 -> 608 bytes
-rw-r--r--public/-/emojis/1/eight_pointed_black_star.pngbin0 -> 493 bytes
-rw-r--r--public/-/emojis/1/eight_spoked_asterisk.pngbin0 -> 493 bytes
-rw-r--r--public/-/emojis/1/eject.pngbin0 -> 548 bytes
-rw-r--r--public/-/emojis/1/electric_plug.pngbin0 -> 548 bytes
-rw-r--r--public/-/emojis/1/elephant.pngbin0 -> 1293 bytes
-rw-r--r--public/-/emojis/1/end.pngbin0 -> 393 bytes
-rw-r--r--public/-/emojis/1/envelope.pngbin0 -> 916 bytes
-rw-r--r--public/-/emojis/1/envelope_with_arrow.pngbin0 -> 1062 bytes
-rw-r--r--public/-/emojis/1/euro.pngbin0 -> 460 bytes
-rw-r--r--public/-/emojis/1/european_castle.pngbin0 -> 965 bytes
-rw-r--r--public/-/emojis/1/european_post_office.pngbin0 -> 551 bytes
-rw-r--r--public/-/emojis/1/evergreen_tree.pngbin0 -> 719 bytes
-rw-r--r--public/-/emojis/1/exclamation.pngbin0 -> 354 bytes
-rw-r--r--public/-/emojis/1/expressionless.pngbin0 -> 438 bytes
-rw-r--r--public/-/emojis/1/eye.pngbin0 -> 664 bytes
-rw-r--r--public/-/emojis/1/eye_in_speech_bubble.pngbin0 -> 698 bytes
-rw-r--r--public/-/emojis/1/eyeglasses.pngbin0 -> 577 bytes
-rw-r--r--public/-/emojis/1/eyes.pngbin0 -> 791 bytes
-rw-r--r--public/-/emojis/1/face_palm.pngbin0 -> 1523 bytes
-rw-r--r--public/-/emojis/1/face_palm_tone1.pngbin0 -> 1563 bytes
-rw-r--r--public/-/emojis/1/face_palm_tone2.pngbin0 -> 1547 bytes
-rw-r--r--public/-/emojis/1/face_palm_tone3.pngbin0 -> 1550 bytes
-rw-r--r--public/-/emojis/1/face_palm_tone4.pngbin0 -> 1553 bytes
-rw-r--r--public/-/emojis/1/face_palm_tone5.pngbin0 -> 1532 bytes
-rw-r--r--public/-/emojis/1/factory.pngbin0 -> 936 bytes
-rw-r--r--public/-/emojis/1/fallen_leaf.pngbin0 -> 951 bytes
-rw-r--r--public/-/emojis/1/family.pngbin0 -> 1433 bytes
-rw-r--r--public/-/emojis/1/family_mmb.pngbin0 -> 1206 bytes
-rw-r--r--public/-/emojis/1/family_mmbb.pngbin0 -> 1349 bytes
-rw-r--r--public/-/emojis/1/family_mmg.pngbin0 -> 1361 bytes
-rw-r--r--public/-/emojis/1/family_mmgb.pngbin0 -> 1626 bytes
-rw-r--r--public/-/emojis/1/family_mmgg.pngbin0 -> 1448 bytes
-rw-r--r--public/-/emojis/1/family_mwbb.pngbin0 -> 1638 bytes
-rw-r--r--public/-/emojis/1/family_mwg.pngbin0 -> 1554 bytes
-rw-r--r--public/-/emojis/1/family_mwgb.pngbin0 -> 1837 bytes
-rw-r--r--public/-/emojis/1/family_mwgg.pngbin0 -> 1738 bytes
-rw-r--r--public/-/emojis/1/family_wwb.pngbin0 -> 1155 bytes
-rw-r--r--public/-/emojis/1/family_wwbb.pngbin0 -> 1289 bytes
-rw-r--r--public/-/emojis/1/family_wwg.pngbin0 -> 1286 bytes
-rw-r--r--public/-/emojis/1/family_wwgb.pngbin0 -> 1550 bytes
-rw-r--r--public/-/emojis/1/family_wwgg.pngbin0 -> 1374 bytes
-rw-r--r--public/-/emojis/1/fast_forward.pngbin0 -> 523 bytes
-rw-r--r--public/-/emojis/1/fax.pngbin0 -> 1188 bytes
-rw-r--r--public/-/emojis/1/fearful.pngbin0 -> 1002 bytes
-rw-r--r--public/-/emojis/1/feet.pngbin0 -> 603 bytes
-rw-r--r--public/-/emojis/1/fencer.pngbin0 -> 1342 bytes
-rw-r--r--public/-/emojis/1/ferris_wheel.pngbin0 -> 2185 bytes
-rw-r--r--public/-/emojis/1/ferry.pngbin0 -> 528 bytes
-rw-r--r--public/-/emojis/1/field_hockey.pngbin0 -> 947 bytes
-rw-r--r--public/-/emojis/1/file_cabinet.pngbin0 -> 1420 bytes
-rw-r--r--public/-/emojis/1/file_folder.pngbin0 -> 1445 bytes
-rw-r--r--public/-/emojis/1/film_frames.pngbin0 -> 560 bytes
-rw-r--r--public/-/emojis/1/fingers_crossed.pngbin0 -> 1050 bytes
-rw-r--r--public/-/emojis/1/fingers_crossed_tone1.pngbin0 -> 1047 bytes
-rw-r--r--public/-/emojis/1/fingers_crossed_tone2.pngbin0 -> 1050 bytes
-rw-r--r--public/-/emojis/1/fingers_crossed_tone3.pngbin0 -> 1050 bytes
-rw-r--r--public/-/emojis/1/fingers_crossed_tone4.pngbin0 -> 1046 bytes
-rw-r--r--public/-/emojis/1/fingers_crossed_tone5.pngbin0 -> 1050 bytes
-rw-r--r--public/-/emojis/1/fire.pngbin0 -> 1020 bytes
-rw-r--r--public/-/emojis/1/fire_engine.pngbin0 -> 1656 bytes
-rw-r--r--public/-/emojis/1/fireworks.pngbin0 -> 1364 bytes
-rw-r--r--public/-/emojis/1/first_place.pngbin0 -> 1419 bytes
-rw-r--r--public/-/emojis/1/first_quarter_moon.pngbin0 -> 1152 bytes
-rw-r--r--public/-/emojis/1/first_quarter_moon_with_face.pngbin0 -> 1068 bytes
-rw-r--r--public/-/emojis/1/fish.pngbin0 -> 1080 bytes
-rw-r--r--public/-/emojis/1/fish_cake.pngbin0 -> 1245 bytes
-rw-r--r--public/-/emojis/1/fishing_pole_and_fish.pngbin0 -> 1442 bytes
-rw-r--r--public/-/emojis/1/fist.pngbin0 -> 1014 bytes
-rw-r--r--public/-/emojis/1/fist_tone1.pngbin0 -> 1014 bytes
-rw-r--r--public/-/emojis/1/fist_tone2.pngbin0 -> 1014 bytes
-rw-r--r--public/-/emojis/1/fist_tone3.pngbin0 -> 1014 bytes
-rw-r--r--public/-/emojis/1/fist_tone4.pngbin0 -> 1014 bytes
-rw-r--r--public/-/emojis/1/fist_tone5.pngbin0 -> 1014 bytes
-rw-r--r--public/-/emojis/1/five.pngbin0 -> 577 bytes
-rw-r--r--public/-/emojis/1/flag_ac.pngbin0 -> 1934 bytes
-rw-r--r--public/-/emojis/1/flag_ad.pngbin0 -> 1285 bytes
-rw-r--r--public/-/emojis/1/flag_ae.pngbin0 -> 544 bytes
-rw-r--r--public/-/emojis/1/flag_af.pngbin0 -> 942 bytes
-rw-r--r--public/-/emojis/1/flag_ag.pngbin0 -> 913 bytes
-rw-r--r--public/-/emojis/1/flag_ai.pngbin0 -> 1056 bytes
-rw-r--r--public/-/emojis/1/flag_al.pngbin0 -> 905 bytes
-rw-r--r--public/-/emojis/1/flag_am.pngbin0 -> 514 bytes
-rw-r--r--public/-/emojis/1/flag_ao.pngbin0 -> 997 bytes
-rw-r--r--public/-/emojis/1/flag_aq.pngbin0 -> 657 bytes
-rw-r--r--public/-/emojis/1/flag_ar.pngbin0 -> 975 bytes
-rw-r--r--public/-/emojis/1/flag_as.pngbin0 -> 1489 bytes
-rw-r--r--public/-/emojis/1/flag_at.pngbin0 -> 430 bytes
-rw-r--r--public/-/emojis/1/flag_au.pngbin0 -> 962 bytes
-rw-r--r--public/-/emojis/1/flag_aw.pngbin0 -> 709 bytes
-rw-r--r--public/-/emojis/1/flag_ax.pngbin0 -> 496 bytes
-rw-r--r--public/-/emojis/1/flag_az.pngbin0 -> 709 bytes
-rw-r--r--public/-/emojis/1/flag_ba.pngbin0 -> 848 bytes
-rw-r--r--public/-/emojis/1/flag_bb.pngbin0 -> 789 bytes
-rw-r--r--public/-/emojis/1/flag_bd.pngbin0 -> 490 bytes
-rw-r--r--public/-/emojis/1/flag_be.pngbin0 -> 444 bytes
-rw-r--r--public/-/emojis/1/flag_bf.pngbin0 -> 717 bytes
-rw-r--r--public/-/emojis/1/flag_bg.pngbin0 -> 513 bytes
-rw-r--r--public/-/emojis/1/flag_bh.pngbin0 -> 593 bytes
-rw-r--r--public/-/emojis/1/flag_bi.pngbin0 -> 795 bytes
-rw-r--r--public/-/emojis/1/flag_bj.pngbin0 -> 554 bytes
-rw-r--r--public/-/emojis/1/flag_bl.pngbin0 -> 1691 bytes
-rw-r--r--public/-/emojis/1/flag_black.pngbin0 -> 702 bytes
-rw-r--r--public/-/emojis/1/flag_bm.pngbin0 -> 1374 bytes
-rw-r--r--public/-/emojis/1/flag_bn.pngbin0 -> 1355 bytes
-rw-r--r--public/-/emojis/1/flag_bo.pngbin0 -> 1132 bytes
-rw-r--r--public/-/emojis/1/flag_bq.pngbin0 -> 1144 bytes
-rw-r--r--public/-/emojis/1/flag_br.pngbin0 -> 819 bytes
-rw-r--r--public/-/emojis/1/flag_bs.pngbin0 -> 448 bytes
-rw-r--r--public/-/emojis/1/flag_bt.pngbin0 -> 1213 bytes
-rw-r--r--public/-/emojis/1/flag_bv.pngbin0 -> 495 bytes
-rw-r--r--public/-/emojis/1/flag_bw.pngbin0 -> 391 bytes
-rw-r--r--public/-/emojis/1/flag_by.pngbin0 -> 1120 bytes
-rw-r--r--public/-/emojis/1/flag_bz.pngbin0 -> 1595 bytes
-rw-r--r--public/-/emojis/1/flag_ca.pngbin0 -> 755 bytes
-rw-r--r--public/-/emojis/1/flag_cc.pngbin0 -> 851 bytes
-rw-r--r--public/-/emojis/1/flag_cd.pngbin0 -> 707 bytes
-rw-r--r--public/-/emojis/1/flag_cf.pngbin0 -> 673 bytes
-rw-r--r--public/-/emojis/1/flag_cg.pngbin0 -> 586 bytes
-rw-r--r--public/-/emojis/1/flag_ch.pngbin0 -> 390 bytes
-rw-r--r--public/-/emojis/1/flag_ci.pngbin0 -> 440 bytes
-rw-r--r--public/-/emojis/1/flag_ck.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/flag_cl.pngbin0 -> 748 bytes
-rw-r--r--public/-/emojis/1/flag_cm.pngbin0 -> 627 bytes
-rw-r--r--public/-/emojis/1/flag_cn.pngbin0 -> 676 bytes
-rw-r--r--public/-/emojis/1/flag_co.pngbin0 -> 524 bytes
-rw-r--r--public/-/emojis/1/flag_cp.pngbin0 -> 443 bytes
-rw-r--r--public/-/emojis/1/flag_cr.pngbin0 -> 419 bytes
-rw-r--r--public/-/emojis/1/flag_cu.pngbin0 -> 586 bytes
-rw-r--r--public/-/emojis/1/flag_cv.pngbin0 -> 642 bytes
-rw-r--r--public/-/emojis/1/flag_cw.pngbin0 -> 665 bytes
-rw-r--r--public/-/emojis/1/flag_cx.pngbin0 -> 1142 bytes
-rw-r--r--public/-/emojis/1/flag_cy.pngbin0 -> 830 bytes
-rw-r--r--public/-/emojis/1/flag_cz.pngbin0 -> 600 bytes
-rw-r--r--public/-/emojis/1/flag_de.pngbin0 -> 502 bytes
-rw-r--r--public/-/emojis/1/flag_dg.pngbin0 -> 1911 bytes
-rw-r--r--public/-/emojis/1/flag_dj.pngbin0 -> 753 bytes
-rw-r--r--public/-/emojis/1/flag_dk.pngbin0 -> 450 bytes
-rw-r--r--public/-/emojis/1/flag_dm.pngbin0 -> 1075 bytes
-rw-r--r--public/-/emojis/1/flag_do.pngbin0 -> 1135 bytes
-rw-r--r--public/-/emojis/1/flag_dz.pngbin0 -> 734 bytes
-rw-r--r--public/-/emojis/1/flag_ea.pngbin0 -> 1337 bytes
-rw-r--r--public/-/emojis/1/flag_ec.pngbin0 -> 1431 bytes
-rw-r--r--public/-/emojis/1/flag_ee.pngbin0 -> 512 bytes
-rw-r--r--public/-/emojis/1/flag_eg.pngbin0 -> 818 bytes
-rw-r--r--public/-/emojis/1/flag_eh.pngbin0 -> 742 bytes
-rw-r--r--public/-/emojis/1/flag_er.pngbin0 -> 1218 bytes
-rw-r--r--public/-/emojis/1/flag_es.pngbin0 -> 1337 bytes
-rw-r--r--public/-/emojis/1/flag_et.pngbin0 -> 947 bytes
-rw-r--r--public/-/emojis/1/flag_eu.pngbin0 -> 760 bytes
-rw-r--r--public/-/emojis/1/flag_fi.pngbin0 -> 487 bytes
-rw-r--r--public/-/emojis/1/flag_fj.pngbin0 -> 1381 bytes
-rw-r--r--public/-/emojis/1/flag_fk.pngbin0 -> 1558 bytes
-rw-r--r--public/-/emojis/1/flag_fm.pngbin0 -> 554 bytes
-rw-r--r--public/-/emojis/1/flag_fo.pngbin0 -> 495 bytes
-rw-r--r--public/-/emojis/1/flag_fr.pngbin0 -> 443 bytes
-rw-r--r--public/-/emojis/1/flag_ga.pngbin0 -> 512 bytes
-rw-r--r--public/-/emojis/1/flag_gb.pngbin0 -> 919 bytes
-rw-r--r--public/-/emojis/1/flag_gd.pngbin0 -> 1017 bytes
-rw-r--r--public/-/emojis/1/flag_ge.pngbin0 -> 583 bytes
-rw-r--r--public/-/emojis/1/flag_gf.pngbin0 -> 865 bytes
-rw-r--r--public/-/emojis/1/flag_gg.pngbin0 -> 521 bytes
-rw-r--r--public/-/emojis/1/flag_gh.pngbin0 -> 723 bytes
-rw-r--r--public/-/emojis/1/flag_gi.pngbin0 -> 1053 bytes
-rw-r--r--public/-/emojis/1/flag_gl.pngbin0 -> 700 bytes
-rw-r--r--public/-/emojis/1/flag_gm.pngbin0 -> 501 bytes
-rw-r--r--public/-/emojis/1/flag_gn.pngbin0 -> 434 bytes
-rw-r--r--public/-/emojis/1/flag_gp.pngbin0 -> 1587 bytes
-rw-r--r--public/-/emojis/1/flag_gq.pngbin0 -> 1132 bytes
-rw-r--r--public/-/emojis/1/flag_gr.pngbin0 -> 549 bytes
-rw-r--r--public/-/emojis/1/flag_gs.pngbin0 -> 2115 bytes
-rw-r--r--public/-/emojis/1/flag_gt.pngbin0 -> 1087 bytes
-rw-r--r--public/-/emojis/1/flag_gu.pngbin0 -> 1045 bytes
-rw-r--r--public/-/emojis/1/flag_gw.pngbin0 -> 705 bytes
-rw-r--r--public/-/emojis/1/flag_gy.pngbin0 -> 690 bytes
-rw-r--r--public/-/emojis/1/flag_hk.pngbin0 -> 759 bytes
-rw-r--r--public/-/emojis/1/flag_hm.pngbin0 -> 1036 bytes
-rw-r--r--public/-/emojis/1/flag_hn.pngbin0 -> 513 bytes
-rw-r--r--public/-/emojis/1/flag_hr.pngbin0 -> 1411 bytes
-rw-r--r--public/-/emojis/1/flag_ht.pngbin0 -> 1205 bytes
-rw-r--r--public/-/emojis/1/flag_hu.pngbin0 -> 513 bytes
-rw-r--r--public/-/emojis/1/flag_ic.pngbin0 -> 1330 bytes
-rw-r--r--public/-/emojis/1/flag_id.pngbin0 -> 498 bytes
-rw-r--r--public/-/emojis/1/flag_ie.pngbin0 -> 478 bytes
-rw-r--r--public/-/emojis/1/flag_il.pngbin0 -> 658 bytes
-rw-r--r--public/-/emojis/1/flag_im.pngbin0 -> 976 bytes
-rw-r--r--public/-/emojis/1/flag_in.pngbin0 -> 773 bytes
-rw-r--r--public/-/emojis/1/flag_io.pngbin0 -> 1911 bytes
-rw-r--r--public/-/emojis/1/flag_iq.pngbin0 -> 811 bytes
-rw-r--r--public/-/emojis/1/flag_ir.pngbin0 -> 1036 bytes
-rw-r--r--public/-/emojis/1/flag_is.pngbin0 -> 491 bytes
-rw-r--r--public/-/emojis/1/flag_it.pngbin0 -> 472 bytes
-rw-r--r--public/-/emojis/1/flag_je.pngbin0 -> 956 bytes
-rw-r--r--public/-/emojis/1/flag_jm.pngbin0 -> 837 bytes
-rw-r--r--public/-/emojis/1/flag_jo.pngbin0 -> 740 bytes
-rw-r--r--public/-/emojis/1/flag_jp.pngbin0 -> 455 bytes
-rw-r--r--public/-/emojis/1/flag_ke.pngbin0 -> 1160 bytes
-rw-r--r--public/-/emojis/1/flag_kg.pngbin0 -> 1080 bytes
-rw-r--r--public/-/emojis/1/flag_kh.pngbin0 -> 872 bytes
-rw-r--r--public/-/emojis/1/flag_ki.pngbin0 -> 1369 bytes
-rw-r--r--public/-/emojis/1/flag_km.pngbin0 -> 783 bytes
-rw-r--r--public/-/emojis/1/flag_kn.pngbin0 -> 1316 bytes
-rw-r--r--public/-/emojis/1/flag_kp.pngbin0 -> 696 bytes
-rw-r--r--public/-/emojis/1/flag_kr.pngbin0 -> 967 bytes
-rw-r--r--public/-/emojis/1/flag_kw.pngbin0 -> 560 bytes
-rw-r--r--public/-/emojis/1/flag_ky.pngbin0 -> 1671 bytes
-rw-r--r--public/-/emojis/1/flag_kz.pngbin0 -> 1136 bytes
-rw-r--r--public/-/emojis/1/flag_la.pngbin0 -> 479 bytes
-rw-r--r--public/-/emojis/1/flag_lb.pngbin0 -> 740 bytes
-rw-r--r--public/-/emojis/1/flag_lc.pngbin0 -> 561 bytes
-rw-r--r--public/-/emojis/1/flag_li.pngbin0 -> 946 bytes
-rw-r--r--public/-/emojis/1/flag_lk.pngbin0 -> 974 bytes
-rw-r--r--public/-/emojis/1/flag_lr.pngbin0 -> 772 bytes
-rw-r--r--public/-/emojis/1/flag_ls.pngbin0 -> 775 bytes
-rw-r--r--public/-/emojis/1/flag_lt.pngbin0 -> 510 bytes
-rw-r--r--public/-/emojis/1/flag_lu.pngbin0 -> 512 bytes
-rw-r--r--public/-/emojis/1/flag_lv.pngbin0 -> 388 bytes
-rw-r--r--public/-/emojis/1/flag_ly.pngbin0 -> 685 bytes
-rw-r--r--public/-/emojis/1/flag_ma.pngbin0 -> 626 bytes
-rw-r--r--public/-/emojis/1/flag_mc.pngbin0 -> 528 bytes
-rw-r--r--public/-/emojis/1/flag_md.pngbin0 -> 1170 bytes
-rw-r--r--public/-/emojis/1/flag_me.pngbin0 -> 1074 bytes
-rw-r--r--public/-/emojis/1/flag_mf.pngbin0 -> 443 bytes
-rw-r--r--public/-/emojis/1/flag_mg.pngbin0 -> 556 bytes
-rw-r--r--public/-/emojis/1/flag_mh.pngbin0 -> 1138 bytes
-rw-r--r--public/-/emojis/1/flag_mk.pngbin0 -> 1023 bytes
-rw-r--r--public/-/emojis/1/flag_ml.pngbin0 -> 440 bytes
-rw-r--r--public/-/emojis/1/flag_mm.pngbin0 -> 937 bytes
-rw-r--r--public/-/emojis/1/flag_mn.pngbin0 -> 698 bytes
-rw-r--r--public/-/emojis/1/flag_mo.pngbin0 -> 792 bytes
-rw-r--r--public/-/emojis/1/flag_mp.pngbin0 -> 1797 bytes
-rw-r--r--public/-/emojis/1/flag_mq.pngbin0 -> 780 bytes
-rw-r--r--public/-/emojis/1/flag_mr.pngbin0 -> 657 bytes
-rw-r--r--public/-/emojis/1/flag_ms.pngbin0 -> 1477 bytes
-rw-r--r--public/-/emojis/1/flag_mt.pngbin0 -> 799 bytes
-rw-r--r--public/-/emojis/1/flag_mu.pngbin0 -> 544 bytes
-rw-r--r--public/-/emojis/1/flag_mv.pngbin0 -> 598 bytes
-rw-r--r--public/-/emojis/1/flag_mw.pngbin0 -> 825 bytes
-rw-r--r--public/-/emojis/1/flag_mx.pngbin0 -> 951 bytes
-rw-r--r--public/-/emojis/1/flag_my.pngbin0 -> 775 bytes
-rw-r--r--public/-/emojis/1/flag_mz.pngbin0 -> 1159 bytes
-rw-r--r--public/-/emojis/1/flag_na.pngbin0 -> 1249 bytes
-rw-r--r--public/-/emojis/1/flag_nc.pngbin0 -> 1148 bytes
-rw-r--r--public/-/emojis/1/flag_ne.pngbin0 -> 593 bytes
-rw-r--r--public/-/emojis/1/flag_nf.pngbin0 -> 877 bytes
-rw-r--r--public/-/emojis/1/flag_ng.pngbin0 -> 438 bytes
-rw-r--r--public/-/emojis/1/flag_ni.pngbin0 -> 823 bytes
-rw-r--r--public/-/emojis/1/flag_nl.pngbin0 -> 499 bytes
-rw-r--r--public/-/emojis/1/flag_no.pngbin0 -> 484 bytes
-rw-r--r--public/-/emojis/1/flag_np.pngbin0 -> 802 bytes
-rw-r--r--public/-/emojis/1/flag_nr.pngbin0 -> 529 bytes
-rw-r--r--public/-/emojis/1/flag_nu.pngbin0 -> 1128 bytes
-rw-r--r--public/-/emojis/1/flag_nz.pngbin0 -> 1099 bytes
-rw-r--r--public/-/emojis/1/flag_om.pngbin0 -> 754 bytes
-rw-r--r--public/-/emojis/1/flag_pa.pngbin0 -> 830 bytes
-rw-r--r--public/-/emojis/1/flag_pe.pngbin0 -> 439 bytes
-rw-r--r--public/-/emojis/1/flag_pf.pngbin0 -> 1091 bytes
-rw-r--r--public/-/emojis/1/flag_pg.pngbin0 -> 1076 bytes
-rw-r--r--public/-/emojis/1/flag_ph.pngbin0 -> 867 bytes
-rw-r--r--public/-/emojis/1/flag_pk.pngbin0 -> 753 bytes
-rw-r--r--public/-/emojis/1/flag_pl.pngbin0 -> 522 bytes
-rw-r--r--public/-/emojis/1/flag_pm.pngbin0 -> 2314 bytes
-rw-r--r--public/-/emojis/1/flag_pn.pngbin0 -> 1895 bytes
-rw-r--r--public/-/emojis/1/flag_pr.pngbin0 -> 605 bytes
-rw-r--r--public/-/emojis/1/flag_ps.pngbin0 -> 574 bytes
-rw-r--r--public/-/emojis/1/flag_pt.pngbin0 -> 1055 bytes
-rw-r--r--public/-/emojis/1/flag_pw.pngbin0 -> 475 bytes
-rw-r--r--public/-/emojis/1/flag_py.pngbin0 -> 1085 bytes
-rw-r--r--public/-/emojis/1/flag_qa.pngbin0 -> 657 bytes
-rw-r--r--public/-/emojis/1/flag_re.pngbin0 -> 837 bytes
-rw-r--r--public/-/emojis/1/flag_ro.pngbin0 -> 441 bytes
-rw-r--r--public/-/emojis/1/flag_rs.pngbin0 -> 1237 bytes
-rw-r--r--public/-/emojis/1/flag_ru.pngbin0 -> 496 bytes
-rw-r--r--public/-/emojis/1/flag_rw.pngbin0 -> 940 bytes
-rw-r--r--public/-/emojis/1/flag_sa.pngbin0 -> 781 bytes
-rw-r--r--public/-/emojis/1/flag_sb.pngbin0 -> 1102 bytes
-rw-r--r--public/-/emojis/1/flag_sc.pngbin0 -> 1073 bytes
-rw-r--r--public/-/emojis/1/flag_sd.pngbin0 -> 578 bytes
-rw-r--r--public/-/emojis/1/flag_se.pngbin0 -> 455 bytes
-rw-r--r--public/-/emojis/1/flag_sg.pngbin0 -> 730 bytes
-rw-r--r--public/-/emojis/1/flag_sh.pngbin0 -> 1369 bytes
-rw-r--r--public/-/emojis/1/flag_si.pngbin0 -> 1030 bytes
-rw-r--r--public/-/emojis/1/flag_sj.pngbin0 -> 495 bytes
-rw-r--r--public/-/emojis/1/flag_sk.pngbin0 -> 780 bytes
-rw-r--r--public/-/emojis/1/flag_sl.pngbin0 -> 510 bytes
-rw-r--r--public/-/emojis/1/flag_sm.pngbin0 -> 2000 bytes
-rw-r--r--public/-/emojis/1/flag_sn.pngbin0 -> 621 bytes
-rw-r--r--public/-/emojis/1/flag_so.pngbin0 -> 609 bytes
-rw-r--r--public/-/emojis/1/flag_sr.pngbin0 -> 650 bytes
-rw-r--r--public/-/emojis/1/flag_ss.pngbin0 -> 722 bytes
-rw-r--r--public/-/emojis/1/flag_st.pngbin0 -> 562 bytes
-rw-r--r--public/-/emojis/1/flag_sv.pngbin0 -> 1125 bytes
-rw-r--r--public/-/emojis/1/flag_sx.pngbin0 -> 1195 bytes
-rw-r--r--public/-/emojis/1/flag_sy.pngbin0 -> 696 bytes
-rw-r--r--public/-/emojis/1/flag_sz.pngbin0 -> 1102 bytes
-rw-r--r--public/-/emojis/1/flag_ta.pngbin0 -> 1907 bytes
-rw-r--r--public/-/emojis/1/flag_tc.pngbin0 -> 1538 bytes
-rw-r--r--public/-/emojis/1/flag_td.pngbin0 -> 443 bytes
-rw-r--r--public/-/emojis/1/flag_tf.pngbin0 -> 857 bytes
-rw-r--r--public/-/emojis/1/flag_tg.pngbin0 -> 790 bytes
-rw-r--r--public/-/emojis/1/flag_th.pngbin0 -> 421 bytes
-rw-r--r--public/-/emojis/1/flag_tj.pngbin0 -> 906 bytes
-rw-r--r--public/-/emojis/1/flag_tk.pngbin0 -> 835 bytes
-rw-r--r--public/-/emojis/1/flag_tl.pngbin0 -> 849 bytes
-rw-r--r--public/-/emojis/1/flag_tm.pngbin0 -> 1178 bytes
-rw-r--r--public/-/emojis/1/flag_tn.pngbin0 -> 625 bytes
-rw-r--r--public/-/emojis/1/flag_to.pngbin0 -> 553 bytes
-rw-r--r--public/-/emojis/1/flag_tr.pngbin0 -> 576 bytes
-rw-r--r--public/-/emojis/1/flag_tt.pngbin0 -> 604 bytes
-rw-r--r--public/-/emojis/1/flag_tv.pngbin0 -> 1120 bytes
-rw-r--r--public/-/emojis/1/flag_tw.pngbin0 -> 761 bytes
-rw-r--r--public/-/emojis/1/flag_tz.pngbin0 -> 1061 bytes
-rw-r--r--public/-/emojis/1/flag_ua.pngbin0 -> 528 bytes
-rw-r--r--public/-/emojis/1/flag_ug.pngbin0 -> 887 bytes
-rw-r--r--public/-/emojis/1/flag_um.pngbin0 -> 776 bytes
-rw-r--r--public/-/emojis/1/flag_us.pngbin0 -> 776 bytes
-rw-r--r--public/-/emojis/1/flag_uy.pngbin0 -> 966 bytes
-rw-r--r--public/-/emojis/1/flag_uz.pngbin0 -> 750 bytes
-rw-r--r--public/-/emojis/1/flag_va.pngbin0 -> 1331 bytes
-rw-r--r--public/-/emojis/1/flag_vc.pngbin0 -> 897 bytes
-rw-r--r--public/-/emojis/1/flag_ve.pngbin0 -> 748 bytes
-rw-r--r--public/-/emojis/1/flag_vg.pngbin0 -> 1789 bytes
-rw-r--r--public/-/emojis/1/flag_vi.pngbin0 -> 1378 bytes
-rw-r--r--public/-/emojis/1/flag_vn.pngbin0 -> 583 bytes
-rw-r--r--public/-/emojis/1/flag_vu.pngbin0 -> 844 bytes
-rw-r--r--public/-/emojis/1/flag_wf.pngbin0 -> 443 bytes
-rw-r--r--public/-/emojis/1/flag_white.pngbin0 -> 699 bytes
-rw-r--r--public/-/emojis/1/flag_ws.pngbin0 -> 634 bytes
-rw-r--r--public/-/emojis/1/flag_xk.pngbin0 -> 722 bytes
-rw-r--r--public/-/emojis/1/flag_ye.pngbin0 -> 507 bytes
-rw-r--r--public/-/emojis/1/flag_yt.pngbin0 -> 1623 bytes
-rw-r--r--public/-/emojis/1/flag_za.pngbin0 -> 676 bytes
-rw-r--r--public/-/emojis/1/flag_zm.pngbin0 -> 881 bytes
-rw-r--r--public/-/emojis/1/flag_zw.pngbin0 -> 993 bytes
-rw-r--r--public/-/emojis/1/flags.pngbin0 -> 1722 bytes
-rw-r--r--public/-/emojis/1/flashlight.pngbin0 -> 964 bytes
-rw-r--r--public/-/emojis/1/fleur-de-lis.pngbin0 -> 632 bytes
-rw-r--r--public/-/emojis/1/floppy_disk.pngbin0 -> 258 bytes
-rw-r--r--public/-/emojis/1/flower_playing_cards.pngbin0 -> 449 bytes
-rw-r--r--public/-/emojis/1/flushed.pngbin0 -> 1127 bytes
-rw-r--r--public/-/emojis/1/fog.pngbin0 -> 713 bytes
-rw-r--r--public/-/emojis/1/foggy.pngbin0 -> 1069 bytes
-rw-r--r--public/-/emojis/1/football.pngbin0 -> 956 bytes
-rw-r--r--public/-/emojis/1/footprints.pngbin0 -> 621 bytes
-rw-r--r--public/-/emojis/1/fork_and_knife.pngbin0 -> 668 bytes
-rw-r--r--public/-/emojis/1/fork_knife_plate.pngbin0 -> 976 bytes
-rw-r--r--public/-/emojis/1/fountain.pngbin0 -> 1768 bytes
-rw-r--r--public/-/emojis/1/four.pngbin0 -> 497 bytes
-rw-r--r--public/-/emojis/1/four_leaf_clover.pngbin0 -> 1156 bytes
-rw-r--r--public/-/emojis/1/fox.pngbin0 -> 1556 bytes
-rw-r--r--public/-/emojis/1/frame_photo.pngbin0 -> 514 bytes
-rw-r--r--public/-/emojis/1/free.pngbin0 -> 370 bytes
-rw-r--r--public/-/emojis/1/french_bread.pngbin0 -> 1551 bytes
-rw-r--r--public/-/emojis/1/fried_shrimp.pngbin0 -> 1241 bytes
-rw-r--r--public/-/emojis/1/fries.pngbin0 -> 1873 bytes
-rw-r--r--public/-/emojis/1/frog.pngbin0 -> 897 bytes
-rw-r--r--public/-/emojis/1/frowning.pngbin0 -> 633 bytes
-rw-r--r--public/-/emojis/1/frowning2.pngbin0 -> 589 bytes
-rw-r--r--public/-/emojis/1/fuelpump.pngbin0 -> 864 bytes
-rw-r--r--public/-/emojis/1/full_moon.pngbin0 -> 841 bytes
-rw-r--r--public/-/emojis/1/full_moon_with_face.pngbin0 -> 1186 bytes
-rw-r--r--public/-/emojis/1/game_die.pngbin0 -> 1136 bytes
-rw-r--r--public/-/emojis/1/gay_pride_flag.pngbin0 -> 2340 bytes
-rw-r--r--public/-/emojis/1/gear.pngbin0 -> 747 bytes
-rw-r--r--public/-/emojis/1/gem.pngbin0 -> 715 bytes
-rw-r--r--public/-/emojis/1/gemini.pngbin0 -> 547 bytes
-rw-r--r--public/-/emojis/1/ghost.pngbin0 -> 1465 bytes
-rw-r--r--public/-/emojis/1/gift.pngbin0 -> 1966 bytes
-rw-r--r--public/-/emojis/1/gift_heart.pngbin0 -> 1141 bytes
-rw-r--r--public/-/emojis/1/girl.pngbin0 -> 1261 bytes
-rw-r--r--public/-/emojis/1/girl_tone1.pngbin0 -> 1259 bytes
-rw-r--r--public/-/emojis/1/girl_tone2.pngbin0 -> 1255 bytes
-rw-r--r--public/-/emojis/1/girl_tone3.pngbin0 -> 1255 bytes
-rw-r--r--public/-/emojis/1/girl_tone4.pngbin0 -> 1241 bytes
-rw-r--r--public/-/emojis/1/girl_tone5.pngbin0 -> 1245 bytes
-rw-r--r--public/-/emojis/1/globe_with_meridians.pngbin0 -> 796 bytes
-rw-r--r--public/-/emojis/1/goal.pngbin0 -> 1242 bytes
-rw-r--r--public/-/emojis/1/goat.pngbin0 -> 981 bytes
-rw-r--r--public/-/emojis/1/golf.pngbin0 -> 823 bytes
-rw-r--r--public/-/emojis/1/golfer.pngbin0 -> 1189 bytes
-rw-r--r--public/-/emojis/1/gorilla.pngbin0 -> 1090 bytes
-rw-r--r--public/-/emojis/1/grapes.pngbin0 -> 1552 bytes
-rw-r--r--public/-/emojis/1/green_apple.pngbin0 -> 656 bytes
-rw-r--r--public/-/emojis/1/green_book.pngbin0 -> 1366 bytes
-rw-r--r--public/-/emojis/1/green_heart.pngbin0 -> 435 bytes
-rw-r--r--public/-/emojis/1/grey_exclamation.pngbin0 -> 354 bytes
-rw-r--r--public/-/emojis/1/grey_question.pngbin0 -> 449 bytes
-rw-r--r--public/-/emojis/1/grimacing.pngbin0 -> 694 bytes
-rw-r--r--public/-/emojis/1/grin.pngbin0 -> 767 bytes
-rw-r--r--public/-/emojis/1/grinning.pngbin0 -> 810 bytes
-rw-r--r--public/-/emojis/1/guardsman.pngbin0 -> 1140 bytes
-rw-r--r--public/-/emojis/1/guardsman_tone1.pngbin0 -> 1122 bytes
-rw-r--r--public/-/emojis/1/guardsman_tone2.pngbin0 -> 1160 bytes
-rw-r--r--public/-/emojis/1/guardsman_tone3.pngbin0 -> 1160 bytes
-rw-r--r--public/-/emojis/1/guardsman_tone4.pngbin0 -> 1157 bytes
-rw-r--r--public/-/emojis/1/guardsman_tone5.pngbin0 -> 1165 bytes
-rw-r--r--public/-/emojis/1/guitar.pngbin0 -> 1056 bytes
-rw-r--r--public/-/emojis/1/gun.pngbin0 -> 1859 bytes
-rw-r--r--public/-/emojis/1/haircut.pngbin0 -> 1935 bytes
-rw-r--r--public/-/emojis/1/haircut_tone1.pngbin0 -> 1945 bytes
-rw-r--r--public/-/emojis/1/haircut_tone2.pngbin0 -> 1935 bytes
-rw-r--r--public/-/emojis/1/haircut_tone3.pngbin0 -> 1923 bytes
-rw-r--r--public/-/emojis/1/haircut_tone4.pngbin0 -> 1904 bytes
-rw-r--r--public/-/emojis/1/haircut_tone5.pngbin0 -> 1920 bytes
-rw-r--r--public/-/emojis/1/hamburger.pngbin0 -> 1973 bytes
-rw-r--r--public/-/emojis/1/hammer.pngbin0 -> 834 bytes
-rw-r--r--public/-/emojis/1/hammer_pick.pngbin0 -> 1068 bytes
-rw-r--r--public/-/emojis/1/hamster.pngbin0 -> 1279 bytes
-rw-r--r--public/-/emojis/1/hand_splayed.pngbin0 -> 1081 bytes
-rw-r--r--public/-/emojis/1/hand_splayed_tone1.pngbin0 -> 1081 bytes
-rw-r--r--public/-/emojis/1/hand_splayed_tone2.pngbin0 -> 1081 bytes
-rw-r--r--public/-/emojis/1/hand_splayed_tone3.pngbin0 -> 1081 bytes
-rw-r--r--public/-/emojis/1/hand_splayed_tone4.pngbin0 -> 1081 bytes
-rw-r--r--public/-/emojis/1/hand_splayed_tone5.pngbin0 -> 1081 bytes
-rw-r--r--public/-/emojis/1/handbag.pngbin0 -> 1285 bytes
-rw-r--r--public/-/emojis/1/handball.pngbin0 -> 1634 bytes
-rw-r--r--public/-/emojis/1/handball_tone1.pngbin0 -> 1645 bytes
-rw-r--r--public/-/emojis/1/handball_tone2.pngbin0 -> 1628 bytes
-rw-r--r--public/-/emojis/1/handball_tone3.pngbin0 -> 1639 bytes
-rw-r--r--public/-/emojis/1/handball_tone4.pngbin0 -> 1634 bytes
-rw-r--r--public/-/emojis/1/handball_tone5.pngbin0 -> 1606 bytes
-rw-r--r--public/-/emojis/1/handshake.pngbin0 -> 1366 bytes
-rw-r--r--public/-/emojis/1/handshake_tone1.pngbin0 -> 1381 bytes
-rw-r--r--public/-/emojis/1/handshake_tone2.pngbin0 -> 1381 bytes
-rw-r--r--public/-/emojis/1/handshake_tone3.pngbin0 -> 1381 bytes
-rw-r--r--public/-/emojis/1/handshake_tone4.pngbin0 -> 1381 bytes
-rw-r--r--public/-/emojis/1/handshake_tone5.pngbin0 -> 1381 bytes
-rw-r--r--public/-/emojis/1/hash.pngbin0 -> 604 bytes
-rw-r--r--public/-/emojis/1/hatched_chick.pngbin0 -> 1174 bytes
-rw-r--r--public/-/emojis/1/hatching_chick.pngbin0 -> 1598 bytes
-rw-r--r--public/-/emojis/1/head_bandage.pngbin0 -> 1199 bytes
-rw-r--r--public/-/emojis/1/headphones.pngbin0 -> 1202 bytes
-rw-r--r--public/-/emojis/1/hear_no_evil.pngbin0 -> 1210 bytes
-rw-r--r--public/-/emojis/1/heart.pngbin0 -> 435 bytes
-rw-r--r--public/-/emojis/1/heart_decoration.pngbin0 -> 557 bytes
-rw-r--r--public/-/emojis/1/heart_exclamation.pngbin0 -> 471 bytes
-rw-r--r--public/-/emojis/1/heart_eyes.pngbin0 -> 1069 bytes
-rw-r--r--public/-/emojis/1/heart_eyes_cat.pngbin0 -> 1512 bytes
-rw-r--r--public/-/emojis/1/heartbeat.pngbin0 -> 699 bytes
-rw-r--r--public/-/emojis/1/heartpulse.pngbin0 -> 675 bytes
-rw-r--r--public/-/emojis/1/hearts.pngbin0 -> 449 bytes
-rw-r--r--public/-/emojis/1/heavy_check_mark.pngbin0 -> 438 bytes
-rw-r--r--public/-/emojis/1/heavy_division_sign.pngbin0 -> 204 bytes
-rw-r--r--public/-/emojis/1/heavy_dollar_sign.pngbin0 -> 429 bytes
-rw-r--r--public/-/emojis/1/heavy_minus_sign.pngbin0 -> 108 bytes
-rw-r--r--public/-/emojis/1/heavy_multiplication_x.pngbin0 -> 298 bytes
-rw-r--r--public/-/emojis/1/heavy_plus_sign.pngbin0 -> 115 bytes
-rw-r--r--public/-/emojis/1/helicopter.pngbin0 -> 1098 bytes
-rw-r--r--public/-/emojis/1/helmet_with_cross.pngbin0 -> 1014 bytes
-rw-r--r--public/-/emojis/1/herb.pngbin0 -> 886 bytes
-rw-r--r--public/-/emojis/1/hibiscus.pngbin0 -> 1815 bytes
-rw-r--r--public/-/emojis/1/high_brightness.pngbin0 -> 474 bytes
-rw-r--r--public/-/emojis/1/high_heel.pngbin0 -> 1008 bytes
-rw-r--r--public/-/emojis/1/hockey.pngbin0 -> 1010 bytes
-rw-r--r--public/-/emojis/1/hole.pngbin0 -> 1390 bytes
-rw-r--r--public/-/emojis/1/homes.pngbin0 -> 981 bytes
-rw-r--r--public/-/emojis/1/honey_pot.pngbin0 -> 1217 bytes
-rw-r--r--public/-/emojis/1/horse.pngbin0 -> 1694 bytes
-rw-r--r--public/-/emojis/1/horse_racing.pngbin0 -> 2096 bytes
-rw-r--r--public/-/emojis/1/horse_racing_tone1.pngbin0 -> 2099 bytes
-rw-r--r--public/-/emojis/1/horse_racing_tone2.pngbin0 -> 2103 bytes
-rw-r--r--public/-/emojis/1/horse_racing_tone3.pngbin0 -> 2090 bytes
-rw-r--r--public/-/emojis/1/horse_racing_tone4.pngbin0 -> 2090 bytes
-rw-r--r--public/-/emojis/1/horse_racing_tone5.pngbin0 -> 2085 bytes
-rw-r--r--public/-/emojis/1/hospital.pngbin0 -> 530 bytes
-rw-r--r--public/-/emojis/1/hot_pepper.pngbin0 -> 677 bytes
-rw-r--r--public/-/emojis/1/hotdog.pngbin0 -> 1770 bytes
-rw-r--r--public/-/emojis/1/hotel.pngbin0 -> 1322 bytes
-rw-r--r--public/-/emojis/1/hotsprings.pngbin0 -> 733 bytes
-rw-r--r--public/-/emojis/1/hourglass.pngbin0 -> 800 bytes
-rw-r--r--public/-/emojis/1/hourglass_flowing_sand.pngbin0 -> 847 bytes
-rw-r--r--public/-/emojis/1/house.pngbin0 -> 863 bytes
-rw-r--r--public/-/emojis/1/house_abandoned.pngbin0 -> 1606 bytes
-rw-r--r--public/-/emojis/1/house_with_garden.pngbin0 -> 1613 bytes
-rw-r--r--public/-/emojis/1/hugging.pngbin0 -> 1425 bytes
-rw-r--r--public/-/emojis/1/hushed.pngbin0 -> 634 bytes
-rw-r--r--public/-/emojis/1/ice_cream.pngbin0 -> 1779 bytes
-rw-r--r--public/-/emojis/1/ice_skate.pngbin0 -> 1574 bytes
-rw-r--r--public/-/emojis/1/icecream.pngbin0 -> 1496 bytes
-rw-r--r--public/-/emojis/1/id.pngbin0 -> 348 bytes
-rw-r--r--public/-/emojis/1/ideograph_advantage.pngbin0 -> 716 bytes
-rw-r--r--public/-/emojis/1/imp.pngbin0 -> 1988 bytes
-rw-r--r--public/-/emojis/1/inbox_tray.pngbin0 -> 1029 bytes
-rw-r--r--public/-/emojis/1/incoming_envelope.pngbin0 -> 1129 bytes
-rw-r--r--public/-/emojis/1/information_desk_person.pngbin0 -> 1580 bytes
-rw-r--r--public/-/emojis/1/information_desk_person_tone1.pngbin0 -> 1597 bytes
-rw-r--r--public/-/emojis/1/information_desk_person_tone2.pngbin0 -> 1590 bytes
-rw-r--r--public/-/emojis/1/information_desk_person_tone3.pngbin0 -> 1580 bytes
-rw-r--r--public/-/emojis/1/information_desk_person_tone4.pngbin0 -> 1572 bytes
-rw-r--r--public/-/emojis/1/information_desk_person_tone5.pngbin0 -> 1588 bytes
-rw-r--r--public/-/emojis/1/information_source.pngbin0 -> 506 bytes
-rw-r--r--public/-/emojis/1/innocent.pngbin0 -> 935 bytes
-rw-r--r--public/-/emojis/1/interrobang.pngbin0 -> 601 bytes
-rw-r--r--public/-/emojis/1/iphone.pngbin0 -> 695 bytes
-rw-r--r--public/-/emojis/1/island.pngbin0 -> 1273 bytes
-rw-r--r--public/-/emojis/1/izakaya_lantern.pngbin0 -> 1227 bytes
-rw-r--r--public/-/emojis/1/jack_o_lantern.pngbin0 -> 2289 bytes
-rw-r--r--public/-/emojis/1/japan.pngbin0 -> 539 bytes
-rw-r--r--public/-/emojis/1/japanese_castle.pngbin0 -> 1404 bytes
-rw-r--r--public/-/emojis/1/japanese_goblin.pngbin0 -> 1561 bytes
-rw-r--r--public/-/emojis/1/japanese_ogre.pngbin0 -> 1864 bytes
-rw-r--r--public/-/emojis/1/jeans.pngbin0 -> 1158 bytes
-rw-r--r--public/-/emojis/1/joy.pngbin0 -> 1136 bytes
-rw-r--r--public/-/emojis/1/joy_cat.pngbin0 -> 1633 bytes
-rw-r--r--public/-/emojis/1/joystick.pngbin0 -> 1039 bytes
-rw-r--r--public/-/emojis/1/juggling.pngbin0 -> 1165 bytes
-rw-r--r--public/-/emojis/1/juggling_tone1.pngbin0 -> 1171 bytes
-rw-r--r--public/-/emojis/1/juggling_tone2.pngbin0 -> 1160 bytes
-rw-r--r--public/-/emojis/1/juggling_tone3.pngbin0 -> 1170 bytes
-rw-r--r--public/-/emojis/1/juggling_tone4.pngbin0 -> 1167 bytes
-rw-r--r--public/-/emojis/1/juggling_tone5.pngbin0 -> 1161 bytes
-rw-r--r--public/-/emojis/1/kaaba.pngbin0 -> 1251 bytes
-rw-r--r--public/-/emojis/1/key.pngbin0 -> 770 bytes
-rw-r--r--public/-/emojis/1/key2.pngbin0 -> 593 bytes
-rw-r--r--public/-/emojis/1/keyboard.pngbin0 -> 429 bytes
-rw-r--r--public/-/emojis/1/kimono.pngbin0 -> 1527 bytes
-rw-r--r--public/-/emojis/1/kiss.pngbin0 -> 842 bytes
-rw-r--r--public/-/emojis/1/kiss_mm.pngbin0 -> 1269 bytes
-rw-r--r--public/-/emojis/1/kiss_ww.pngbin0 -> 1149 bytes
-rw-r--r--public/-/emojis/1/kissing.pngbin0 -> 738 bytes
-rw-r--r--public/-/emojis/1/kissing_cat.pngbin0 -> 1468 bytes
-rw-r--r--public/-/emojis/1/kissing_closed_eyes.pngbin0 -> 888 bytes
-rw-r--r--public/-/emojis/1/kissing_heart.pngbin0 -> 843 bytes
-rw-r--r--public/-/emojis/1/kissing_smiling_eyes.pngbin0 -> 648 bytes
-rw-r--r--public/-/emojis/1/kiwi.pngbin0 -> 1892 bytes
-rw-r--r--public/-/emojis/1/knife.pngbin0 -> 616 bytes
-rw-r--r--public/-/emojis/1/koala.pngbin0 -> 1428 bytes
-rw-r--r--public/-/emojis/1/koko.pngbin0 -> 266 bytes
-rw-r--r--public/-/emojis/1/label.pngbin0 -> 669 bytes
-rw-r--r--public/-/emojis/1/large_blue_circle.pngbin0 -> 371 bytes
-rw-r--r--public/-/emojis/1/large_blue_diamond.pngbin0 -> 245 bytes
-rw-r--r--public/-/emojis/1/large_orange_diamond.pngbin0 -> 248 bytes
-rw-r--r--public/-/emojis/1/last_quarter_moon.pngbin0 -> 1180 bytes
-rw-r--r--public/-/emojis/1/last_quarter_moon_with_face.pngbin0 -> 1030 bytes
-rw-r--r--public/-/emojis/1/laughing.pngbin0 -> 901 bytes
-rw-r--r--public/-/emojis/1/leaves.pngbin0 -> 993 bytes
-rw-r--r--public/-/emojis/1/ledger.pngbin0 -> 1528 bytes
-rw-r--r--public/-/emojis/1/left_facing_fist.pngbin0 -> 972 bytes
-rw-r--r--public/-/emojis/1/left_facing_fist_tone1.pngbin0 -> 960 bytes
-rw-r--r--public/-/emojis/1/left_facing_fist_tone2.pngbin0 -> 972 bytes
-rw-r--r--public/-/emojis/1/left_facing_fist_tone3.pngbin0 -> 960 bytes
-rw-r--r--public/-/emojis/1/left_facing_fist_tone4.pngbin0 -> 960 bytes
-rw-r--r--public/-/emojis/1/left_facing_fist_tone5.pngbin0 -> 976 bytes
-rw-r--r--public/-/emojis/1/left_luggage.pngbin0 -> 576 bytes
-rw-r--r--public/-/emojis/1/left_right_arrow.pngbin0 -> 495 bytes
-rw-r--r--public/-/emojis/1/leftwards_arrow_with_hook.pngbin0 -> 643 bytes
-rw-r--r--public/-/emojis/1/lemon.pngbin0 -> 1033 bytes
-rw-r--r--public/-/emojis/1/leo.pngbin0 -> 745 bytes
-rw-r--r--public/-/emojis/1/leopard.pngbin0 -> 2222 bytes
-rw-r--r--public/-/emojis/1/level_slider.pngbin0 -> 454 bytes
-rw-r--r--public/-/emojis/1/levitate.pngbin0 -> 914 bytes
-rw-r--r--public/-/emojis/1/libra.pngbin0 -> 657 bytes
-rw-r--r--public/-/emojis/1/lifter.pngbin0 -> 1356 bytes
-rw-r--r--public/-/emojis/1/lifter_tone1.pngbin0 -> 1346 bytes
-rw-r--r--public/-/emojis/1/lifter_tone2.pngbin0 -> 1347 bytes
-rw-r--r--public/-/emojis/1/lifter_tone3.pngbin0 -> 1339 bytes
-rw-r--r--public/-/emojis/1/lifter_tone4.pngbin0 -> 1343 bytes
-rw-r--r--public/-/emojis/1/lifter_tone5.pngbin0 -> 1337 bytes
-rw-r--r--public/-/emojis/1/light_rail.pngbin0 -> 902 bytes
-rw-r--r--public/-/emojis/1/link.pngbin0 -> 477 bytes
-rw-r--r--public/-/emojis/1/lion_face.pngbin0 -> 1728 bytes
-rw-r--r--public/-/emojis/1/lips.pngbin0 -> 599 bytes
-rw-r--r--public/-/emojis/1/lipstick.pngbin0 -> 549 bytes
-rw-r--r--public/-/emojis/1/lizard.pngbin0 -> 1709 bytes
-rw-r--r--public/-/emojis/1/lock.pngbin0 -> 986 bytes
-rw-r--r--public/-/emojis/1/lock_with_ink_pen.pngbin0 -> 1123 bytes
-rw-r--r--public/-/emojis/1/lollipop.pngbin0 -> 2164 bytes
-rw-r--r--public/-/emojis/1/loop.pngbin0 -> 550 bytes
-rw-r--r--public/-/emojis/1/loud_sound.pngbin0 -> 977 bytes
-rw-r--r--public/-/emojis/1/loudspeaker.pngbin0 -> 1316 bytes
-rw-r--r--public/-/emojis/1/love_hotel.pngbin0 -> 372 bytes
-rw-r--r--public/-/emojis/1/love_letter.pngbin0 -> 923 bytes
-rw-r--r--public/-/emojis/1/low_brightness.pngbin0 -> 431 bytes
-rw-r--r--public/-/emojis/1/lying_face.pngbin0 -> 1103 bytes
-rw-r--r--public/-/emojis/1/m.pngbin0 -> 500 bytes
-rw-r--r--public/-/emojis/1/mag.pngbin0 -> 1240 bytes
-rw-r--r--public/-/emojis/1/mag_right.pngbin0 -> 1251 bytes
-rw-r--r--public/-/emojis/1/mahjong.pngbin0 -> 951 bytes
-rw-r--r--public/-/emojis/1/mailbox.pngbin0 -> 1166 bytes
-rw-r--r--public/-/emojis/1/mailbox_closed.pngbin0 -> 1192 bytes
-rw-r--r--public/-/emojis/1/mailbox_with_mail.pngbin0 -> 1307 bytes
-rw-r--r--public/-/emojis/1/mailbox_with_no_mail.pngbin0 -> 960 bytes
-rw-r--r--public/-/emojis/1/man.pngbin0 -> 1092 bytes
-rw-r--r--public/-/emojis/1/man_dancing.pngbin0 -> 1400 bytes
-rw-r--r--public/-/emojis/1/man_dancing_tone1.pngbin0 -> 1404 bytes
-rw-r--r--public/-/emojis/1/man_dancing_tone2.pngbin0 -> 1402 bytes
-rw-r--r--public/-/emojis/1/man_dancing_tone3.pngbin0 -> 1409 bytes
-rw-r--r--public/-/emojis/1/man_dancing_tone4.pngbin0 -> 1421 bytes
-rw-r--r--public/-/emojis/1/man_dancing_tone5.pngbin0 -> 1418 bytes
-rw-r--r--public/-/emojis/1/man_in_tuxedo.pngbin0 -> 1307 bytes
-rw-r--r--public/-/emojis/1/man_in_tuxedo_tone1.pngbin0 -> 1307 bytes
-rw-r--r--public/-/emojis/1/man_in_tuxedo_tone2.pngbin0 -> 1307 bytes
-rw-r--r--public/-/emojis/1/man_in_tuxedo_tone3.pngbin0 -> 1307 bytes
-rw-r--r--public/-/emojis/1/man_in_tuxedo_tone4.pngbin0 -> 1307 bytes
-rw-r--r--public/-/emojis/1/man_in_tuxedo_tone5.pngbin0 -> 1302 bytes
-rw-r--r--public/-/emojis/1/man_tone1.pngbin0 -> 1069 bytes
-rw-r--r--public/-/emojis/1/man_tone2.pngbin0 -> 1069 bytes
-rw-r--r--public/-/emojis/1/man_tone3.pngbin0 -> 1069 bytes
-rw-r--r--public/-/emojis/1/man_tone4.pngbin0 -> 1069 bytes
-rw-r--r--public/-/emojis/1/man_tone5.pngbin0 -> 1087 bytes
-rw-r--r--public/-/emojis/1/man_with_gua_pi_mao.pngbin0 -> 1339 bytes
-rw-r--r--public/-/emojis/1/man_with_gua_pi_mao_tone1.pngbin0 -> 1328 bytes
-rw-r--r--public/-/emojis/1/man_with_gua_pi_mao_tone2.pngbin0 -> 1332 bytes
-rw-r--r--public/-/emojis/1/man_with_gua_pi_mao_tone3.pngbin0 -> 1329 bytes
-rw-r--r--public/-/emojis/1/man_with_gua_pi_mao_tone4.pngbin0 -> 1325 bytes
-rw-r--r--public/-/emojis/1/man_with_gua_pi_mao_tone5.pngbin0 -> 1337 bytes
-rw-r--r--public/-/emojis/1/man_with_turban.pngbin0 -> 1618 bytes
-rw-r--r--public/-/emojis/1/man_with_turban_tone1.pngbin0 -> 1584 bytes
-rw-r--r--public/-/emojis/1/man_with_turban_tone2.pngbin0 -> 1588 bytes
-rw-r--r--public/-/emojis/1/man_with_turban_tone3.pngbin0 -> 1584 bytes
-rw-r--r--public/-/emojis/1/man_with_turban_tone4.pngbin0 -> 1583 bytes
-rw-r--r--public/-/emojis/1/man_with_turban_tone5.pngbin0 -> 1605 bytes
-rw-r--r--public/-/emojis/1/mans_shoe.pngbin0 -> 1649 bytes
-rw-r--r--public/-/emojis/1/map.pngbin0 -> 2352 bytes
-rw-r--r--public/-/emojis/1/maple_leaf.pngbin0 -> 1117 bytes
-rw-r--r--public/-/emojis/1/martial_arts_uniform.pngbin0 -> 1412 bytes
-rw-r--r--public/-/emojis/1/mask.pngbin0 -> 1322 bytes
-rw-r--r--public/-/emojis/1/massage.pngbin0 -> 1571 bytes
-rw-r--r--public/-/emojis/1/massage_tone1.pngbin0 -> 1578 bytes
-rw-r--r--public/-/emojis/1/massage_tone2.pngbin0 -> 1565 bytes
-rw-r--r--public/-/emojis/1/massage_tone3.pngbin0 -> 1553 bytes
-rw-r--r--public/-/emojis/1/massage_tone4.pngbin0 -> 1546 bytes
-rw-r--r--public/-/emojis/1/massage_tone5.pngbin0 -> 1557 bytes
-rw-r--r--public/-/emojis/1/meat_on_bone.pngbin0 -> 1465 bytes
-rw-r--r--public/-/emojis/1/medal.pngbin0 -> 1700 bytes
-rw-r--r--public/-/emojis/1/mega.pngbin0 -> 1751 bytes
-rw-r--r--public/-/emojis/1/melon.pngbin0 -> 2005 bytes
-rw-r--r--public/-/emojis/1/menorah.pngbin0 -> 1279 bytes
-rw-r--r--public/-/emojis/1/mens.pngbin0 -> 561 bytes
-rw-r--r--public/-/emojis/1/metal.pngbin0 -> 894 bytes
-rw-r--r--public/-/emojis/1/metal_tone1.pngbin0 -> 894 bytes
-rw-r--r--public/-/emojis/1/metal_tone2.pngbin0 -> 888 bytes
-rw-r--r--public/-/emojis/1/metal_tone3.pngbin0 -> 894 bytes
-rw-r--r--public/-/emojis/1/metal_tone4.pngbin0 -> 888 bytes
-rw-r--r--public/-/emojis/1/metal_tone5.pngbin0 -> 894 bytes
-rw-r--r--public/-/emojis/1/metro.pngbin0 -> 1020 bytes
-rw-r--r--public/-/emojis/1/microphone.pngbin0 -> 1165 bytes
-rw-r--r--public/-/emojis/1/microphone2.pngbin0 -> 839 bytes
-rw-r--r--public/-/emojis/1/microscope.pngbin0 -> 1113 bytes
-rw-r--r--public/-/emojis/1/middle_finger.pngbin0 -> 893 bytes
-rw-r--r--public/-/emojis/1/middle_finger_tone1.pngbin0 -> 892 bytes
-rw-r--r--public/-/emojis/1/middle_finger_tone2.pngbin0 -> 892 bytes
-rw-r--r--public/-/emojis/1/middle_finger_tone3.pngbin0 -> 892 bytes
-rw-r--r--public/-/emojis/1/middle_finger_tone4.pngbin0 -> 892 bytes
-rw-r--r--public/-/emojis/1/middle_finger_tone5.pngbin0 -> 892 bytes
-rw-r--r--public/-/emojis/1/military_medal.pngbin0 -> 949 bytes
-rw-r--r--public/-/emojis/1/milk.pngbin0 -> 1224 bytes
-rw-r--r--public/-/emojis/1/milky_way.pngbin0 -> 622 bytes
-rw-r--r--public/-/emojis/1/minibus.pngbin0 -> 1256 bytes
-rw-r--r--public/-/emojis/1/minidisc.pngbin0 -> 522 bytes
-rw-r--r--public/-/emojis/1/mobile_phone_off.pngbin0 -> 621 bytes
-rw-r--r--public/-/emojis/1/money_mouth.pngbin0 -> 967 bytes
-rw-r--r--public/-/emojis/1/money_with_wings.pngbin0 -> 2327 bytes
-rw-r--r--public/-/emojis/1/moneybag.pngbin0 -> 2310 bytes
-rw-r--r--public/-/emojis/1/monkey.pngbin0 -> 1348 bytes
-rw-r--r--public/-/emojis/1/monkey_face.pngbin0 -> 1022 bytes
-rw-r--r--public/-/emojis/1/monorail.pngbin0 -> 1068 bytes
-rw-r--r--public/-/emojis/1/mortar_board.pngbin0 -> 710 bytes
-rw-r--r--public/-/emojis/1/mosque.pngbin0 -> 984 bytes
-rw-r--r--public/-/emojis/1/motor_scooter.pngbin0 -> 1207 bytes
-rw-r--r--public/-/emojis/1/motorboat.pngbin0 -> 990 bytes
-rw-r--r--public/-/emojis/1/motorcycle.pngbin0 -> 2081 bytes
-rw-r--r--public/-/emojis/1/motorway.pngbin0 -> 1102 bytes
-rw-r--r--public/-/emojis/1/mount_fuji.pngbin0 -> 881 bytes
-rw-r--r--public/-/emojis/1/mountain.pngbin0 -> 1409 bytes
-rw-r--r--public/-/emojis/1/mountain_bicyclist.pngbin0 -> 2288 bytes
-rw-r--r--public/-/emojis/1/mountain_bicyclist_tone1.pngbin0 -> 2294 bytes
-rw-r--r--public/-/emojis/1/mountain_bicyclist_tone2.pngbin0 -> 2298 bytes
-rw-r--r--public/-/emojis/1/mountain_bicyclist_tone3.pngbin0 -> 2284 bytes
-rw-r--r--public/-/emojis/1/mountain_bicyclist_tone4.pngbin0 -> 2288 bytes
-rw-r--r--public/-/emojis/1/mountain_bicyclist_tone5.pngbin0 -> 2281 bytes
-rw-r--r--public/-/emojis/1/mountain_cableway.pngbin0 -> 811 bytes
-rw-r--r--public/-/emojis/1/mountain_railway.pngbin0 -> 1317 bytes
-rw-r--r--public/-/emojis/1/mountain_snow.pngbin0 -> 1193 bytes
-rw-r--r--public/-/emojis/1/mouse.pngbin0 -> 1245 bytes
-rw-r--r--public/-/emojis/1/mouse2.pngbin0 -> 1324 bytes
-rw-r--r--public/-/emojis/1/mouse_three_button.pngbin0 -> 934 bytes
-rw-r--r--public/-/emojis/1/movie_camera.pngbin0 -> 576 bytes
-rw-r--r--public/-/emojis/1/moyai.pngbin0 -> 1593 bytes
-rw-r--r--public/-/emojis/1/mrs_claus.pngbin0 -> 3338 bytes
-rw-r--r--public/-/emojis/1/mrs_claus_tone1.pngbin0 -> 1999 bytes
-rw-r--r--public/-/emojis/1/mrs_claus_tone2.pngbin0 -> 2006 bytes
-rw-r--r--public/-/emojis/1/mrs_claus_tone3.pngbin0 -> 2017 bytes
-rw-r--r--public/-/emojis/1/mrs_claus_tone4.pngbin0 -> 2016 bytes
-rw-r--r--public/-/emojis/1/mrs_claus_tone5.pngbin0 -> 2016 bytes
-rw-r--r--public/-/emojis/1/muscle.pngbin0 -> 1012 bytes
-rw-r--r--public/-/emojis/1/muscle_tone1.pngbin0 -> 1012 bytes
-rw-r--r--public/-/emojis/1/muscle_tone2.pngbin0 -> 1012 bytes
-rw-r--r--public/-/emojis/1/muscle_tone3.pngbin0 -> 1012 bytes
-rw-r--r--public/-/emojis/1/muscle_tone4.pngbin0 -> 1012 bytes
-rw-r--r--public/-/emojis/1/muscle_tone5.pngbin0 -> 1012 bytes
-rw-r--r--public/-/emojis/1/mushroom.pngbin0 -> 1024 bytes
-rw-r--r--public/-/emojis/1/musical_keyboard.pngbin0 -> 1695 bytes
-rw-r--r--public/-/emojis/1/musical_note.pngbin0 -> 419 bytes
-rw-r--r--public/-/emojis/1/musical_score.pngbin0 -> 1289 bytes
-rw-r--r--public/-/emojis/1/mute.pngbin0 -> 823 bytes
-rw-r--r--public/-/emojis/1/nail_care.pngbin0 -> 1639 bytes
-rw-r--r--public/-/emojis/1/nail_care_tone1.pngbin0 -> 1712 bytes
-rw-r--r--public/-/emojis/1/nail_care_tone2.pngbin0 -> 1711 bytes
-rw-r--r--public/-/emojis/1/nail_care_tone3.pngbin0 -> 1727 bytes
-rw-r--r--public/-/emojis/1/nail_care_tone4.pngbin0 -> 1728 bytes
-rw-r--r--public/-/emojis/1/nail_care_tone5.pngbin0 -> 1716 bytes
-rw-r--r--public/-/emojis/1/name_badge.pngbin0 -> 632 bytes
-rw-r--r--public/-/emojis/1/nauseated_face.pngbin0 -> 965 bytes
-rw-r--r--public/-/emojis/1/necktie.pngbin0 -> 995 bytes
-rw-r--r--public/-/emojis/1/negative_squared_cross_mark.pngbin0 -> 370 bytes
-rw-r--r--public/-/emojis/1/nerd.pngbin0 -> 975 bytes
-rw-r--r--public/-/emojis/1/neutral_face.pngbin0 -> 517 bytes
-rw-r--r--public/-/emojis/1/new.pngbin0 -> 486 bytes
-rw-r--r--public/-/emojis/1/new_moon.pngbin0 -> 829 bytes
-rw-r--r--public/-/emojis/1/new_moon_with_face.pngbin0 -> 975 bytes
-rw-r--r--public/-/emojis/1/newspaper.pngbin0 -> 1178 bytes
-rw-r--r--public/-/emojis/1/newspaper2.pngbin0 -> 1046 bytes
-rw-r--r--public/-/emojis/1/ng.pngbin0 -> 445 bytes
-rw-r--r--public/-/emojis/1/night_with_stars.pngbin0 -> 835 bytes
-rw-r--r--public/-/emojis/1/nine.pngbin0 -> 607 bytes
-rw-r--r--public/-/emojis/1/no_bell.pngbin0 -> 823 bytes
-rw-r--r--public/-/emojis/1/no_bicycles.pngbin0 -> 998 bytes
-rw-r--r--public/-/emojis/1/no_entry.pngbin0 -> 377 bytes
-rw-r--r--public/-/emojis/1/no_entry_sign.pngbin0 -> 555 bytes
-rw-r--r--public/-/emojis/1/no_good.pngbin0 -> 1750 bytes
-rw-r--r--public/-/emojis/1/no_good_tone1.pngbin0 -> 1767 bytes
-rw-r--r--public/-/emojis/1/no_good_tone2.pngbin0 -> 1756 bytes
-rw-r--r--public/-/emojis/1/no_good_tone3.pngbin0 -> 1766 bytes
-rw-r--r--public/-/emojis/1/no_good_tone4.pngbin0 -> 1782 bytes
-rw-r--r--public/-/emojis/1/no_good_tone5.pngbin0 -> 1784 bytes
-rw-r--r--public/-/emojis/1/no_mobile_phones.pngbin0 -> 790 bytes
-rw-r--r--public/-/emojis/1/no_mouth.pngbin0 -> 465 bytes
-rw-r--r--public/-/emojis/1/no_pedestrians.pngbin0 -> 875 bytes
-rw-r--r--public/-/emojis/1/no_smoking.pngbin0 -> 1136 bytes
-rw-r--r--public/-/emojis/1/non-potable_water.pngbin0 -> 827 bytes
-rw-r--r--public/-/emojis/1/nose.pngbin0 -> 703 bytes
-rw-r--r--public/-/emojis/1/nose_tone1.pngbin0 -> 703 bytes
-rw-r--r--public/-/emojis/1/nose_tone2.pngbin0 -> 703 bytes
-rw-r--r--public/-/emojis/1/nose_tone3.pngbin0 -> 703 bytes
-rw-r--r--public/-/emojis/1/nose_tone4.pngbin0 -> 703 bytes
-rw-r--r--public/-/emojis/1/nose_tone5.pngbin0 -> 703 bytes
-rw-r--r--public/-/emojis/1/notebook.pngbin0 -> 1215 bytes
-rw-r--r--public/-/emojis/1/notebook_with_decorative_cover.pngbin0 -> 1782 bytes
-rw-r--r--public/-/emojis/1/notepad_spiral.pngbin0 -> 1377 bytes
-rw-r--r--public/-/emojis/1/notes.pngbin0 -> 501 bytes
-rw-r--r--public/-/emojis/1/nut_and_bolt.pngbin0 -> 899 bytes
-rw-r--r--public/-/emojis/1/o.pngbin0 -> 475 bytes
-rw-r--r--public/-/emojis/1/o2.pngbin0 -> 425 bytes
-rw-r--r--public/-/emojis/1/ocean.pngbin0 -> 1018 bytes
-rw-r--r--public/-/emojis/1/octagonal_sign.pngbin0 -> 260 bytes
-rw-r--r--public/-/emojis/1/octopus.pngbin0 -> 1188 bytes
-rw-r--r--public/-/emojis/1/oden.pngbin0 -> 794 bytes
-rw-r--r--public/-/emojis/1/office.pngbin0 -> 524 bytes
-rw-r--r--public/-/emojis/1/oil.pngbin0 -> 674 bytes
-rw-r--r--public/-/emojis/1/ok.pngbin0 -> 511 bytes
-rw-r--r--public/-/emojis/1/ok_hand.pngbin0 -> 979 bytes
-rw-r--r--public/-/emojis/1/ok_hand_tone1.pngbin0 -> 979 bytes
-rw-r--r--public/-/emojis/1/ok_hand_tone2.pngbin0 -> 979 bytes
-rw-r--r--public/-/emojis/1/ok_hand_tone3.pngbin0 -> 979 bytes
-rw-r--r--public/-/emojis/1/ok_hand_tone4.pngbin0 -> 979 bytes
-rw-r--r--public/-/emojis/1/ok_hand_tone5.pngbin0 -> 979 bytes
-rw-r--r--public/-/emojis/1/ok_woman.pngbin0 -> 1696 bytes
-rw-r--r--public/-/emojis/1/ok_woman_tone1.pngbin0 -> 1696 bytes
-rw-r--r--public/-/emojis/1/ok_woman_tone2.pngbin0 -> 1694 bytes
-rw-r--r--public/-/emojis/1/ok_woman_tone3.pngbin0 -> 1675 bytes
-rw-r--r--public/-/emojis/1/ok_woman_tone4.pngbin0 -> 1684 bytes
-rw-r--r--public/-/emojis/1/ok_woman_tone5.pngbin0 -> 1696 bytes
-rw-r--r--public/-/emojis/1/older_man.pngbin0 -> 1253 bytes
-rw-r--r--public/-/emojis/1/older_man_tone1.pngbin0 -> 1253 bytes
-rw-r--r--public/-/emojis/1/older_man_tone2.pngbin0 -> 1253 bytes
-rw-r--r--public/-/emojis/1/older_man_tone3.pngbin0 -> 1253 bytes
-rw-r--r--public/-/emojis/1/older_man_tone4.pngbin0 -> 1254 bytes
-rw-r--r--public/-/emojis/1/older_man_tone5.pngbin0 -> 1254 bytes
-rw-r--r--public/-/emojis/1/older_woman.pngbin0 -> 1472 bytes
-rw-r--r--public/-/emojis/1/older_woman_tone1.pngbin0 -> 1562 bytes
-rw-r--r--public/-/emojis/1/older_woman_tone2.pngbin0 -> 1564 bytes
-rw-r--r--public/-/emojis/1/older_woman_tone3.pngbin0 -> 1555 bytes
-rw-r--r--public/-/emojis/1/older_woman_tone4.pngbin0 -> 1562 bytes
-rw-r--r--public/-/emojis/1/older_woman_tone5.pngbin0 -> 1544 bytes
-rw-r--r--public/-/emojis/1/om_symbol.pngbin0 -> 773 bytes
-rw-r--r--public/-/emojis/1/on.pngbin0 -> 459 bytes
-rw-r--r--public/-/emojis/1/oncoming_automobile.pngbin0 -> 1238 bytes
-rw-r--r--public/-/emojis/1/oncoming_bus.pngbin0 -> 964 bytes
-rw-r--r--public/-/emojis/1/oncoming_police_car.pngbin0 -> 1547 bytes
-rw-r--r--public/-/emojis/1/oncoming_taxi.pngbin0 -> 1405 bytes
-rw-r--r--public/-/emojis/1/one.pngbin0 -> 442 bytes
-rw-r--r--public/-/emojis/1/open_file_folder.pngbin0 -> 755 bytes
-rw-r--r--public/-/emojis/1/open_hands.pngbin0 -> 1053 bytes
-rw-r--r--public/-/emojis/1/open_hands_tone1.pngbin0 -> 1053 bytes
-rw-r--r--public/-/emojis/1/open_hands_tone2.pngbin0 -> 1053 bytes
-rw-r--r--public/-/emojis/1/open_hands_tone3.pngbin0 -> 1053 bytes
-rw-r--r--public/-/emojis/1/open_hands_tone4.pngbin0 -> 1053 bytes
-rw-r--r--public/-/emojis/1/open_hands_tone5.pngbin0 -> 1053 bytes
-rw-r--r--public/-/emojis/1/open_mouth.pngbin0 -> 575 bytes
-rw-r--r--public/-/emojis/1/ophiuchus.pngbin0 -> 723 bytes
-rw-r--r--public/-/emojis/1/orange_book.pngbin0 -> 1329 bytes
-rw-r--r--public/-/emojis/1/orthodox_cross.pngbin0 -> 239 bytes
-rw-r--r--public/-/emojis/1/outbox_tray.pngbin0 -> 1002 bytes
-rw-r--r--public/-/emojis/1/owl.pngbin0 -> 2045 bytes
-rw-r--r--public/-/emojis/1/ox.pngbin0 -> 1436 bytes
-rw-r--r--public/-/emojis/1/package.pngbin0 -> 950 bytes
-rw-r--r--public/-/emojis/1/page_facing_up.pngbin0 -> 1110 bytes
-rw-r--r--public/-/emojis/1/page_with_curl.pngbin0 -> 1157 bytes
-rw-r--r--public/-/emojis/1/pager.pngbin0 -> 553 bytes
-rw-r--r--public/-/emojis/1/paintbrush.pngbin0 -> 950 bytes
-rw-r--r--public/-/emojis/1/palm_tree.pngbin0 -> 1450 bytes
-rw-r--r--public/-/emojis/1/pancakes.pngbin0 -> 3661 bytes
-rw-r--r--public/-/emojis/1/panda_face.pngbin0 -> 1478 bytes
-rw-r--r--public/-/emojis/1/paperclip.pngbin0 -> 439 bytes
-rw-r--r--public/-/emojis/1/paperclips.pngbin0 -> 642 bytes
-rw-r--r--public/-/emojis/1/park.pngbin0 -> 929 bytes
-rw-r--r--public/-/emojis/1/parking.pngbin0 -> 385 bytes
-rw-r--r--public/-/emojis/1/part_alternation_mark.pngbin0 -> 521 bytes
-rw-r--r--public/-/emojis/1/partly_sunny.pngbin0 -> 977 bytes
-rw-r--r--public/-/emojis/1/passport_control.pngbin0 -> 683 bytes
-rw-r--r--public/-/emojis/1/pause_button.pngbin0 -> 395 bytes
-rw-r--r--public/-/emojis/1/peace.pngbin0 -> 933 bytes
-rw-r--r--public/-/emojis/1/peach.pngbin0 -> 1189 bytes
-rw-r--r--public/-/emojis/1/peanuts.pngbin0 -> 3266 bytes
-rw-r--r--public/-/emojis/1/pear.pngbin0 -> 747 bytes
-rw-r--r--public/-/emojis/1/pen_ballpoint.pngbin0 -> 696 bytes
-rw-r--r--public/-/emojis/1/pen_fountain.pngbin0 -> 623 bytes
-rw-r--r--public/-/emojis/1/pencil.pngbin0 -> 1624 bytes
-rw-r--r--public/-/emojis/1/pencil2.pngbin0 -> 654 bytes
-rw-r--r--public/-/emojis/1/penguin.pngbin0 -> 1034 bytes
-rw-r--r--public/-/emojis/1/pensive.pngbin0 -> 718 bytes
-rw-r--r--public/-/emojis/1/performing_arts.pngbin0 -> 1971 bytes
-rw-r--r--public/-/emojis/1/persevere.pngbin0 -> 891 bytes
-rw-r--r--public/-/emojis/1/person_frowning.pngbin0 -> 1148 bytes
-rw-r--r--public/-/emojis/1/person_frowning_tone1.pngbin0 -> 1141 bytes
-rw-r--r--public/-/emojis/1/person_frowning_tone2.pngbin0 -> 1141 bytes
-rw-r--r--public/-/emojis/1/person_frowning_tone3.pngbin0 -> 1141 bytes
-rw-r--r--public/-/emojis/1/person_frowning_tone4.pngbin0 -> 1109 bytes
-rw-r--r--public/-/emojis/1/person_frowning_tone5.pngbin0 -> 1114 bytes
-rw-r--r--public/-/emojis/1/person_with_blond_hair.pngbin0 -> 1205 bytes
-rw-r--r--public/-/emojis/1/person_with_blond_hair_tone1.pngbin0 -> 1181 bytes
-rw-r--r--public/-/emojis/1/person_with_blond_hair_tone2.pngbin0 -> 1181 bytes
-rw-r--r--public/-/emojis/1/person_with_blond_hair_tone3.pngbin0 -> 1181 bytes
-rw-r--r--public/-/emojis/1/person_with_blond_hair_tone4.pngbin0 -> 1189 bytes
-rw-r--r--public/-/emojis/1/person_with_blond_hair_tone5.pngbin0 -> 1214 bytes
-rw-r--r--public/-/emojis/1/person_with_pouting_face.pngbin0 -> 1297 bytes
-rw-r--r--public/-/emojis/1/person_with_pouting_face_tone1.pngbin0 -> 1309 bytes
-rw-r--r--public/-/emojis/1/person_with_pouting_face_tone2.pngbin0 -> 1292 bytes
-rw-r--r--public/-/emojis/1/person_with_pouting_face_tone3.pngbin0 -> 1305 bytes
-rw-r--r--public/-/emojis/1/person_with_pouting_face_tone4.pngbin0 -> 1296 bytes
-rw-r--r--public/-/emojis/1/person_with_pouting_face_tone5.pngbin0 -> 1303 bytes
-rw-r--r--public/-/emojis/1/pick.pngbin0 -> 1023 bytes
-rw-r--r--public/-/emojis/1/pig.pngbin0 -> 1138 bytes
-rw-r--r--public/-/emojis/1/pig2.pngbin0 -> 1548 bytes
-rw-r--r--public/-/emojis/1/pig_nose.pngbin0 -> 820 bytes
-rw-r--r--public/-/emojis/1/pill.pngbin0 -> 442 bytes
-rw-r--r--public/-/emojis/1/pineapple.pngbin0 -> 1642 bytes
-rw-r--r--public/-/emojis/1/ping_pong.pngbin0 -> 823 bytes
-rw-r--r--public/-/emojis/1/pisces.pngbin0 -> 678 bytes
-rw-r--r--public/-/emojis/1/pizza.pngbin0 -> 2008 bytes
-rw-r--r--public/-/emojis/1/place_of_worship.pngbin0 -> 487 bytes
-rw-r--r--public/-/emojis/1/play_pause.pngbin0 -> 509 bytes
-rw-r--r--public/-/emojis/1/point_down.pngbin0 -> 853 bytes
-rw-r--r--public/-/emojis/1/point_down_tone1.pngbin0 -> 856 bytes
-rw-r--r--public/-/emojis/1/point_down_tone2.pngbin0 -> 856 bytes
-rw-r--r--public/-/emojis/1/point_down_tone3.pngbin0 -> 858 bytes
-rw-r--r--public/-/emojis/1/point_down_tone4.pngbin0 -> 856 bytes
-rw-r--r--public/-/emojis/1/point_down_tone5.pngbin0 -> 856 bytes
-rw-r--r--public/-/emojis/1/point_left.pngbin0 -> 825 bytes
-rw-r--r--public/-/emojis/1/point_left_tone1.pngbin0 -> 832 bytes
-rw-r--r--public/-/emojis/1/point_left_tone2.pngbin0 -> 830 bytes
-rw-r--r--public/-/emojis/1/point_left_tone3.pngbin0 -> 830 bytes
-rw-r--r--public/-/emojis/1/point_left_tone4.pngbin0 -> 830 bytes
-rw-r--r--public/-/emojis/1/point_left_tone5.pngbin0 -> 832 bytes
-rw-r--r--public/-/emojis/1/point_right.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/point_right_tone1.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/point_right_tone2.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/point_right_tone3.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/point_right_tone4.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/point_right_tone5.pngbin0 -> 805 bytes
-rw-r--r--public/-/emojis/1/point_up.pngbin0 -> 819 bytes
-rw-r--r--public/-/emojis/1/point_up_2.pngbin0 -> 822 bytes
-rw-r--r--public/-/emojis/1/point_up_2_tone1.pngbin0 -> 822 bytes
-rw-r--r--public/-/emojis/1/point_up_2_tone2.pngbin0 -> 822 bytes
-rw-r--r--public/-/emojis/1/point_up_2_tone3.pngbin0 -> 871 bytes
-rw-r--r--public/-/emojis/1/point_up_2_tone4.pngbin0 -> 822 bytes
-rw-r--r--public/-/emojis/1/point_up_2_tone5.pngbin0 -> 822 bytes
-rw-r--r--public/-/emojis/1/point_up_tone1.pngbin0 -> 820 bytes
-rw-r--r--public/-/emojis/1/point_up_tone2.pngbin0 -> 820 bytes
-rw-r--r--public/-/emojis/1/point_up_tone3.pngbin0 -> 820 bytes
-rw-r--r--public/-/emojis/1/point_up_tone4.pngbin0 -> 820 bytes
-rw-r--r--public/-/emojis/1/point_up_tone5.pngbin0 -> 820 bytes
-rw-r--r--public/-/emojis/1/police_car.pngbin0 -> 1431 bytes
-rw-r--r--public/-/emojis/1/poodle.pngbin0 -> 1531 bytes
-rw-r--r--public/-/emojis/1/poop.pngbin0 -> 1273 bytes
-rw-r--r--public/-/emojis/1/popcorn.pngbin0 -> 1843 bytes
-rw-r--r--public/-/emojis/1/post_office.pngbin0 -> 676 bytes
-rw-r--r--public/-/emojis/1/postal_horn.pngbin0 -> 809 bytes
-rw-r--r--public/-/emojis/1/postbox.pngbin0 -> 1077 bytes
-rw-r--r--public/-/emojis/1/potable_water.pngbin0 -> 633 bytes
-rw-r--r--public/-/emojis/1/potato.pngbin0 -> 1246 bytes
-rw-r--r--public/-/emojis/1/pouch.pngbin0 -> 1259 bytes
-rw-r--r--public/-/emojis/1/poultry_leg.pngbin0 -> 925 bytes
-rw-r--r--public/-/emojis/1/pound.pngbin0 -> 452 bytes
-rw-r--r--public/-/emojis/1/pouting_cat.pngbin0 -> 1675 bytes
-rw-r--r--public/-/emojis/1/pray.pngbin0 -> 1122 bytes
-rw-r--r--public/-/emojis/1/pray_tone1.pngbin0 -> 1131 bytes
-rw-r--r--public/-/emojis/1/pray_tone2.pngbin0 -> 1134 bytes
-rw-r--r--public/-/emojis/1/pray_tone3.pngbin0 -> 1137 bytes
-rw-r--r--public/-/emojis/1/pray_tone4.pngbin0 -> 1126 bytes
-rw-r--r--public/-/emojis/1/pray_tone5.pngbin0 -> 1117 bytes
-rw-r--r--public/-/emojis/1/prayer_beads.pngbin0 -> 1059 bytes
-rw-r--r--public/-/emojis/1/pregnant_woman.pngbin0 -> 1252 bytes
-rw-r--r--public/-/emojis/1/pregnant_woman_tone1.pngbin0 -> 1255 bytes
-rw-r--r--public/-/emojis/1/pregnant_woman_tone2.pngbin0 -> 1246 bytes
-rw-r--r--public/-/emojis/1/pregnant_woman_tone3.pngbin0 -> 1237 bytes
-rw-r--r--public/-/emojis/1/pregnant_woman_tone4.pngbin0 -> 1246 bytes
-rw-r--r--public/-/emojis/1/pregnant_woman_tone5.pngbin0 -> 1235 bytes
-rw-r--r--public/-/emojis/1/prince.pngbin0 -> 1616 bytes
-rw-r--r--public/-/emojis/1/prince_tone1.pngbin0 -> 1618 bytes
-rw-r--r--public/-/emojis/1/prince_tone2.pngbin0 -> 1621 bytes
-rw-r--r--public/-/emojis/1/prince_tone3.pngbin0 -> 1619 bytes
-rw-r--r--public/-/emojis/1/prince_tone4.pngbin0 -> 1619 bytes
-rw-r--r--public/-/emojis/1/prince_tone5.pngbin0 -> 1616 bytes
-rw-r--r--public/-/emojis/1/princess.pngbin0 -> 1812 bytes
-rw-r--r--public/-/emojis/1/princess_tone1.pngbin0 -> 1812 bytes
-rw-r--r--public/-/emojis/1/princess_tone2.pngbin0 -> 1805 bytes
-rw-r--r--public/-/emojis/1/princess_tone3.pngbin0 -> 1805 bytes
-rw-r--r--public/-/emojis/1/princess_tone4.pngbin0 -> 1813 bytes
-rw-r--r--public/-/emojis/1/princess_tone5.pngbin0 -> 1812 bytes
-rw-r--r--public/-/emojis/1/printer.pngbin0 -> 926 bytes
-rw-r--r--public/-/emojis/1/projector.pngbin0 -> 943 bytes
-rw-r--r--public/-/emojis/1/punch.pngbin0 -> 838 bytes
-rw-r--r--public/-/emojis/1/punch_tone1.pngbin0 -> 838 bytes
-rw-r--r--public/-/emojis/1/punch_tone2.pngbin0 -> 838 bytes
-rw-r--r--public/-/emojis/1/punch_tone3.pngbin0 -> 838 bytes
-rw-r--r--public/-/emojis/1/punch_tone4.pngbin0 -> 838 bytes
-rw-r--r--public/-/emojis/1/punch_tone5.pngbin0 -> 838 bytes
-rw-r--r--public/-/emojis/1/purple_heart.pngbin0 -> 435 bytes
-rw-r--r--public/-/emojis/1/purse.pngbin0 -> 1558 bytes
-rw-r--r--public/-/emojis/1/pushpin.pngbin0 -> 640 bytes
-rw-r--r--public/-/emojis/1/put_litter_in_its_place.pngbin0 -> 650 bytes
-rw-r--r--public/-/emojis/1/question.pngbin0 -> 449 bytes
-rw-r--r--public/-/emojis/1/rabbit.pngbin0 -> 1660 bytes
-rw-r--r--public/-/emojis/1/rabbit2.pngbin0 -> 1805 bytes
-rw-r--r--public/-/emojis/1/race_car.pngbin0 -> 2140 bytes
-rw-r--r--public/-/emojis/1/racehorse.pngbin0 -> 1401 bytes
-rw-r--r--public/-/emojis/1/radio.pngbin0 -> 851 bytes
-rw-r--r--public/-/emojis/1/radio_button.pngbin0 -> 674 bytes
-rw-r--r--public/-/emojis/1/radioactive.pngbin0 -> 858 bytes
-rw-r--r--public/-/emojis/1/rage.pngbin0 -> 845 bytes
-rw-r--r--public/-/emojis/1/railway_car.pngbin0 -> 847 bytes
-rw-r--r--public/-/emojis/1/railway_track.pngbin0 -> 1550 bytes
-rw-r--r--public/-/emojis/1/rainbow.pngbin0 -> 1299 bytes
-rw-r--r--public/-/emojis/1/raised_back_of_hand.pngbin0 -> 848 bytes
-rw-r--r--public/-/emojis/1/raised_back_of_hand_tone1.pngbin0 -> 848 bytes
-rw-r--r--public/-/emojis/1/raised_back_of_hand_tone2.pngbin0 -> 848 bytes
-rw-r--r--public/-/emojis/1/raised_back_of_hand_tone3.pngbin0 -> 848 bytes
-rw-r--r--public/-/emojis/1/raised_back_of_hand_tone4.pngbin0 -> 848 bytes
-rw-r--r--public/-/emojis/1/raised_back_of_hand_tone5.pngbin0 -> 848 bytes
-rw-r--r--public/-/emojis/1/raised_hand.pngbin0 -> 791 bytes
-rw-r--r--public/-/emojis/1/raised_hand_tone1.pngbin0 -> 791 bytes
-rw-r--r--public/-/emojis/1/raised_hand_tone2.pngbin0 -> 791 bytes
-rw-r--r--public/-/emojis/1/raised_hand_tone3.pngbin0 -> 791 bytes
-rw-r--r--public/-/emojis/1/raised_hand_tone4.pngbin0 -> 791 bytes
-rw-r--r--public/-/emojis/1/raised_hand_tone5.pngbin0 -> 791 bytes
-rw-r--r--public/-/emojis/1/raised_hands.pngbin0 -> 1098 bytes
-rw-r--r--public/-/emojis/1/raised_hands_tone1.pngbin0 -> 1098 bytes
-rw-r--r--public/-/emojis/1/raised_hands_tone2.pngbin0 -> 1098 bytes
-rw-r--r--public/-/emojis/1/raised_hands_tone3.pngbin0 -> 1098 bytes
-rw-r--r--public/-/emojis/1/raised_hands_tone4.pngbin0 -> 1098 bytes
-rw-r--r--public/-/emojis/1/raised_hands_tone5.pngbin0 -> 1098 bytes
-rw-r--r--public/-/emojis/1/raising_hand.pngbin0 -> 1664 bytes
-rw-r--r--public/-/emojis/1/raising_hand_tone1.pngbin0 -> 1678 bytes
-rw-r--r--public/-/emojis/1/raising_hand_tone2.pngbin0 -> 1665 bytes
-rw-r--r--public/-/emojis/1/raising_hand_tone3.pngbin0 -> 1657 bytes
-rw-r--r--public/-/emojis/1/raising_hand_tone4.pngbin0 -> 1657 bytes
-rw-r--r--public/-/emojis/1/raising_hand_tone5.pngbin0 -> 1661 bytes
-rw-r--r--public/-/emojis/1/ram.pngbin0 -> 1951 bytes
-rw-r--r--public/-/emojis/1/ramen.pngbin0 -> 1992 bytes
-rw-r--r--public/-/emojis/1/rat.pngbin0 -> 1193 bytes
-rw-r--r--public/-/emojis/1/record_button.pngbin0 -> 475 bytes
-rw-r--r--public/-/emojis/1/recycle.pngbin0 -> 914 bytes
-rw-r--r--public/-/emojis/1/red_car.pngbin0 -> 1065 bytes
-rw-r--r--public/-/emojis/1/red_circle.pngbin0 -> 374 bytes
-rw-r--r--public/-/emojis/1/registered.pngbin0 -> 547 bytes
-rw-r--r--public/-/emojis/1/relaxed.pngbin0 -> 636 bytes
-rw-r--r--public/-/emojis/1/relieved.pngbin0 -> 785 bytes
-rw-r--r--public/-/emojis/1/reminder_ribbon.pngbin0 -> 921 bytes
-rw-r--r--public/-/emojis/1/repeat.pngbin0 -> 644 bytes
-rw-r--r--public/-/emojis/1/repeat_one.pngbin0 -> 688 bytes
-rw-r--r--public/-/emojis/1/restroom.pngbin0 -> 676 bytes
-rw-r--r--public/-/emojis/1/revolving_hearts.pngbin0 -> 920 bytes
-rw-r--r--public/-/emojis/1/rewind.pngbin0 -> 523 bytes
-rw-r--r--public/-/emojis/1/rhino.pngbin0 -> 1558 bytes
-rw-r--r--public/-/emojis/1/ribbon.pngbin0 -> 968 bytes
-rw-r--r--public/-/emojis/1/rice.pngbin0 -> 1195 bytes
-rw-r--r--public/-/emojis/1/rice_ball.pngbin0 -> 1091 bytes
-rw-r--r--public/-/emojis/1/rice_cracker.pngbin0 -> 1443 bytes
-rw-r--r--public/-/emojis/1/rice_scene.pngbin0 -> 1349 bytes
-rw-r--r--public/-/emojis/1/right_facing_fist.pngbin0 -> 975 bytes
-rw-r--r--public/-/emojis/1/right_facing_fist_tone1.pngbin0 -> 964 bytes
-rw-r--r--public/-/emojis/1/right_facing_fist_tone2.pngbin0 -> 964 bytes
-rw-r--r--public/-/emojis/1/right_facing_fist_tone3.pngbin0 -> 964 bytes
-rw-r--r--public/-/emojis/1/right_facing_fist_tone4.pngbin0 -> 964 bytes
-rw-r--r--public/-/emojis/1/right_facing_fist_tone5.pngbin0 -> 964 bytes
-rw-r--r--public/-/emojis/1/ring.pngbin0 -> 1113 bytes
-rw-r--r--public/-/emojis/1/robot.pngbin0 -> 1228 bytes
-rw-r--r--public/-/emojis/1/rocket.pngbin0 -> 1639 bytes
-rw-r--r--public/-/emojis/1/rofl.pngbin0 -> 1760 bytes
-rw-r--r--public/-/emojis/1/roller_coaster.pngbin0 -> 1723 bytes
-rw-r--r--public/-/emojis/1/rolling_eyes.pngbin0 -> 743 bytes
-rw-r--r--public/-/emojis/1/rooster.pngbin0 -> 1333 bytes
-rw-r--r--public/-/emojis/1/rose.pngbin0 -> 1182 bytes
-rw-r--r--public/-/emojis/1/rosette.pngbin0 -> 1023 bytes
-rw-r--r--public/-/emojis/1/rotating_light.pngbin0 -> 1969 bytes
-rw-r--r--public/-/emojis/1/round_pushpin.pngbin0 -> 455 bytes
-rw-r--r--public/-/emojis/1/rowboat.pngbin0 -> 1963 bytes
-rw-r--r--public/-/emojis/1/rowboat_tone1.pngbin0 -> 1971 bytes
-rw-r--r--public/-/emojis/1/rowboat_tone2.pngbin0 -> 1972 bytes
-rw-r--r--public/-/emojis/1/rowboat_tone3.pngbin0 -> 1967 bytes
-rw-r--r--public/-/emojis/1/rowboat_tone4.pngbin0 -> 1974 bytes
-rw-r--r--public/-/emojis/1/rowboat_tone5.pngbin0 -> 1971 bytes
-rw-r--r--public/-/emojis/1/rugby_football.pngbin0 -> 1618 bytes
-rw-r--r--public/-/emojis/1/runner.pngbin0 -> 1161 bytes
-rw-r--r--public/-/emojis/1/runner_tone1.pngbin0 -> 1163 bytes
-rw-r--r--public/-/emojis/1/runner_tone2.pngbin0 -> 1162 bytes
-rw-r--r--public/-/emojis/1/runner_tone3.pngbin0 -> 1151 bytes
-rw-r--r--public/-/emojis/1/runner_tone4.pngbin0 -> 1156 bytes
-rw-r--r--public/-/emojis/1/runner_tone5.pngbin0 -> 1145 bytes
-rw-r--r--public/-/emojis/1/running_shirt_with_sash.pngbin0 -> 784 bytes
-rw-r--r--public/-/emojis/1/sa.pngbin0 -> 420 bytes
-rw-r--r--public/-/emojis/1/sagittarius.pngbin0 -> 602 bytes
-rw-r--r--public/-/emojis/1/sailboat.pngbin0 -> 1274 bytes
-rw-r--r--public/-/emojis/1/sake.pngbin0 -> 826 bytes
-rw-r--r--public/-/emojis/1/salad.pngbin0 -> 2398 bytes
-rw-r--r--public/-/emojis/1/sandal.pngbin0 -> 1180 bytes
-rw-r--r--public/-/emojis/1/santa.pngbin0 -> 1585 bytes
-rw-r--r--public/-/emojis/1/santa_tone1.pngbin0 -> 1585 bytes
-rw-r--r--public/-/emojis/1/santa_tone2.pngbin0 -> 1578 bytes
-rw-r--r--public/-/emojis/1/santa_tone3.pngbin0 -> 1578 bytes
-rw-r--r--public/-/emojis/1/santa_tone4.pngbin0 -> 1578 bytes
-rw-r--r--public/-/emojis/1/santa_tone5.pngbin0 -> 1578 bytes
-rw-r--r--public/-/emojis/1/satellite.pngbin0 -> 1173 bytes
-rw-r--r--public/-/emojis/1/satellite_orbital.pngbin0 -> 762 bytes
-rw-r--r--public/-/emojis/1/saxophone.pngbin0 -> 1442 bytes
-rw-r--r--public/-/emojis/1/scales.pngbin0 -> 1181 bytes
-rw-r--r--public/-/emojis/1/school.pngbin0 -> 1234 bytes
-rw-r--r--public/-/emojis/1/school_satchel.pngbin0 -> 1490 bytes
-rw-r--r--public/-/emojis/1/scissors.pngbin0 -> 937 bytes
-rw-r--r--public/-/emojis/1/scooter.pngbin0 -> 1228 bytes
-rw-r--r--public/-/emojis/1/scorpion.pngbin0 -> 1503 bytes
-rw-r--r--public/-/emojis/1/scorpius.pngbin0 -> 612 bytes
-rw-r--r--public/-/emojis/1/scream.pngbin0 -> 1583 bytes
-rw-r--r--public/-/emojis/1/scream_cat.pngbin0 -> 2120 bytes
-rw-r--r--public/-/emojis/1/scroll.pngbin0 -> 989 bytes
-rw-r--r--public/-/emojis/1/seat.pngbin0 -> 884 bytes
-rw-r--r--public/-/emojis/1/second_place.pngbin0 -> 1511 bytes
-rw-r--r--public/-/emojis/1/secret.pngbin0 -> 857 bytes
-rw-r--r--public/-/emojis/1/see_no_evil.pngbin0 -> 1227 bytes
-rw-r--r--public/-/emojis/1/seedling.pngbin0 -> 749 bytes
-rw-r--r--public/-/emojis/1/selfie.pngbin0 -> 1160 bytes
-rw-r--r--public/-/emojis/1/selfie_tone1.pngbin0 -> 1166 bytes
-rw-r--r--public/-/emojis/1/selfie_tone2.pngbin0 -> 1167 bytes
-rw-r--r--public/-/emojis/1/selfie_tone3.pngbin0 -> 1154 bytes
-rw-r--r--public/-/emojis/1/selfie_tone4.pngbin0 -> 1153 bytes
-rw-r--r--public/-/emojis/1/selfie_tone5.pngbin0 -> 1148 bytes
-rw-r--r--public/-/emojis/1/seven.pngbin0 -> 522 bytes
-rw-r--r--public/-/emojis/1/shallow_pan_of_food.pngbin0 -> 1738 bytes
-rw-r--r--public/-/emojis/1/shamrock.pngbin0 -> 1023 bytes
-rw-r--r--public/-/emojis/1/shark.pngbin0 -> 1811 bytes
-rw-r--r--public/-/emojis/1/shaved_ice.pngbin0 -> 997 bytes
-rw-r--r--public/-/emojis/1/sheep.pngbin0 -> 1372 bytes
-rw-r--r--public/-/emojis/1/shell.pngbin0 -> 1497 bytes
-rw-r--r--public/-/emojis/1/shield.pngbin0 -> 1602 bytes
-rw-r--r--public/-/emojis/1/shinto_shrine.pngbin0 -> 579 bytes
-rw-r--r--public/-/emojis/1/ship.pngbin0 -> 1405 bytes
-rw-r--r--public/-/emojis/1/shirt.pngbin0 -> 670 bytes
-rw-r--r--public/-/emojis/1/shopping_bags.pngbin0 -> 1234 bytes
-rw-r--r--public/-/emojis/1/shopping_cart.pngbin0 -> 1072 bytes
-rw-r--r--public/-/emojis/1/shower.pngbin0 -> 2537 bytes
-rw-r--r--public/-/emojis/1/shrimp.pngbin0 -> 1376 bytes
-rw-r--r--public/-/emojis/1/shrug.pngbin0 -> 1671 bytes
-rw-r--r--public/-/emojis/1/shrug_tone1.pngbin0 -> 1676 bytes
-rw-r--r--public/-/emojis/1/shrug_tone2.pngbin0 -> 1671 bytes
-rw-r--r--public/-/emojis/1/shrug_tone3.pngbin0 -> 1675 bytes
-rw-r--r--public/-/emojis/1/shrug_tone4.pngbin0 -> 1641 bytes
-rw-r--r--public/-/emojis/1/shrug_tone5.pngbin0 -> 1634 bytes
-rw-r--r--public/-/emojis/1/signal_strength.pngbin0 -> 445 bytes
-rw-r--r--public/-/emojis/1/six.pngbin0 -> 612 bytes
-rw-r--r--public/-/emojis/1/six_pointed_star.pngbin0 -> 540 bytes
-rw-r--r--public/-/emojis/1/ski.pngbin0 -> 1762 bytes
-rw-r--r--public/-/emojis/1/skier.pngbin0 -> 1539 bytes
-rw-r--r--public/-/emojis/1/skull.pngbin0 -> 628 bytes
-rw-r--r--public/-/emojis/1/skull_crossbones.pngbin0 -> 726 bytes
-rw-r--r--public/-/emojis/1/sleeping.pngbin0 -> 1075 bytes
-rw-r--r--public/-/emojis/1/sleeping_accommodation.pngbin0 -> 926 bytes
-rw-r--r--public/-/emojis/1/sleepy.pngbin0 -> 1185 bytes
-rw-r--r--public/-/emojis/1/slight_frown.pngbin0 -> 580 bytes
-rw-r--r--public/-/emojis/1/slight_smile.pngbin0 -> 600 bytes
-rw-r--r--public/-/emojis/1/slot_machine.pngbin0 -> 1648 bytes
-rw-r--r--public/-/emojis/1/small_blue_diamond.pngbin0 -> 191 bytes
-rw-r--r--public/-/emojis/1/small_orange_diamond.pngbin0 -> 194 bytes
-rw-r--r--public/-/emojis/1/small_red_triangle.pngbin0 -> 273 bytes
-rw-r--r--public/-/emojis/1/small_red_triangle_down.pngbin0 -> 291 bytes
-rw-r--r--public/-/emojis/1/smile.pngbin0 -> 737 bytes
-rw-r--r--public/-/emojis/1/smile_cat.pngbin0 -> 1405 bytes
-rw-r--r--public/-/emojis/1/smiley.pngbin0 -> 686 bytes
-rw-r--r--public/-/emojis/1/smiley_cat.pngbin0 -> 1669 bytes
-rw-r--r--public/-/emojis/1/smiling_imp.pngbin0 -> 1078 bytes
-rw-r--r--public/-/emojis/1/smirk.pngbin0 -> 775 bytes
-rw-r--r--public/-/emojis/1/smirk_cat.pngbin0 -> 1663 bytes
-rw-r--r--public/-/emojis/1/smoking.pngbin0 -> 417 bytes
-rw-r--r--public/-/emojis/1/snail.pngbin0 -> 1731 bytes
-rw-r--r--public/-/emojis/1/snake.pngbin0 -> 1575 bytes
-rw-r--r--public/-/emojis/1/sneezing_face.pngbin0 -> 1289 bytes
-rw-r--r--public/-/emojis/1/snowboarder.pngbin0 -> 2020 bytes
-rw-r--r--public/-/emojis/1/snowflake.pngbin0 -> 691 bytes
-rw-r--r--public/-/emojis/1/snowman.pngbin0 -> 1481 bytes
-rw-r--r--public/-/emojis/1/snowman2.pngbin0 -> 2176 bytes
-rw-r--r--public/-/emojis/1/sob.pngbin0 -> 1236 bytes
-rw-r--r--public/-/emojis/1/soccer.pngbin0 -> 1034 bytes
-rw-r--r--public/-/emojis/1/soon.pngbin0 -> 483 bytes
-rw-r--r--public/-/emojis/1/sos.pngbin0 -> 604 bytes
-rw-r--r--public/-/emojis/1/sound.pngbin0 -> 690 bytes
-rw-r--r--public/-/emojis/1/space_invader.pngbin0 -> 1325 bytes
-rw-r--r--public/-/emojis/1/spades.pngbin0 -> 454 bytes
-rw-r--r--public/-/emojis/1/spaghetti.pngbin0 -> 1796 bytes
-rw-r--r--public/-/emojis/1/sparkle.pngbin0 -> 663 bytes
-rw-r--r--public/-/emojis/1/sparkler.pngbin0 -> 910 bytes
-rw-r--r--public/-/emojis/1/sparkles.pngbin0 -> 651 bytes
-rw-r--r--public/-/emojis/1/sparkling_heart.pngbin0 -> 821 bytes
-rw-r--r--public/-/emojis/1/speak_no_evil.pngbin0 -> 1497 bytes
-rw-r--r--public/-/emojis/1/speaker.pngbin0 -> 575 bytes
-rw-r--r--public/-/emojis/1/speaking_head.pngbin0 -> 531 bytes
-rw-r--r--public/-/emojis/1/speech_balloon.pngbin0 -> 384 bytes
-rw-r--r--public/-/emojis/1/speech_left.pngbin0 -> 390 bytes
-rw-r--r--public/-/emojis/1/speedboat.pngbin0 -> 1255 bytes
-rw-r--r--public/-/emojis/1/spider.pngbin0 -> 1724 bytes
-rw-r--r--public/-/emojis/1/spider_web.pngbin0 -> 929 bytes
-rw-r--r--public/-/emojis/1/spoon.pngbin0 -> 700 bytes
-rw-r--r--public/-/emojis/1/spy.pngbin0 -> 1650 bytes
-rw-r--r--public/-/emojis/1/spy_tone1.pngbin0 -> 1639 bytes
-rw-r--r--public/-/emojis/1/spy_tone2.pngbin0 -> 1632 bytes
-rw-r--r--public/-/emojis/1/spy_tone3.pngbin0 -> 1645 bytes
-rw-r--r--public/-/emojis/1/spy_tone4.pngbin0 -> 1639 bytes
-rw-r--r--public/-/emojis/1/spy_tone5.pngbin0 -> 1639 bytes
-rw-r--r--public/-/emojis/1/squid.pngbin0 -> 1394 bytes
-rw-r--r--public/-/emojis/1/stadium.pngbin0 -> 1515 bytes
-rw-r--r--public/-/emojis/1/star.pngbin0 -> 456 bytes
-rw-r--r--public/-/emojis/1/star2.pngbin0 -> 732 bytes
-rw-r--r--public/-/emojis/1/star_and_crescent.pngbin0 -> 490 bytes
-rw-r--r--public/-/emojis/1/star_of_david.pngbin0 -> 491 bytes
-rw-r--r--public/-/emojis/1/stars.pngbin0 -> 1048 bytes
-rw-r--r--public/-/emojis/1/station.pngbin0 -> 1336 bytes
-rw-r--r--public/-/emojis/1/statue_of_liberty.pngbin0 -> 1145 bytes
-rw-r--r--public/-/emojis/1/steam_locomotive.pngbin0 -> 1736 bytes
-rw-r--r--public/-/emojis/1/stew.pngbin0 -> 1960 bytes
-rw-r--r--public/-/emojis/1/stop_button.pngbin0 -> 385 bytes
-rw-r--r--public/-/emojis/1/stopwatch.pngbin0 -> 1329 bytes
-rw-r--r--public/-/emojis/1/straight_ruler.pngbin0 -> 1406 bytes
-rw-r--r--public/-/emojis/1/strawberry.pngbin0 -> 1206 bytes
-rw-r--r--public/-/emojis/1/stuck_out_tongue.pngbin0 -> 752 bytes
-rw-r--r--public/-/emojis/1/stuck_out_tongue_closed_eyes.pngbin0 -> 867 bytes
-rw-r--r--public/-/emojis/1/stuck_out_tongue_winking_eye.pngbin0 -> 1061 bytes
-rw-r--r--public/-/emojis/1/stuffed_flatbread.pngbin0 -> 2160 bytes
-rw-r--r--public/-/emojis/1/sun_with_face.pngbin0 -> 741 bytes
-rw-r--r--public/-/emojis/1/sunflower.pngbin0 -> 1915 bytes
-rw-r--r--public/-/emojis/1/sunglasses.pngbin0 -> 824 bytes
-rw-r--r--public/-/emojis/1/sunny.pngbin0 -> 746 bytes
-rw-r--r--public/-/emojis/1/sunrise.pngbin0 -> 812 bytes
-rw-r--r--public/-/emojis/1/sunrise_over_mountains.pngbin0 -> 1576 bytes
-rw-r--r--public/-/emojis/1/surfer.pngbin0 -> 1777 bytes
-rw-r--r--public/-/emojis/1/surfer_tone1.pngbin0 -> 1781 bytes
-rw-r--r--public/-/emojis/1/surfer_tone2.pngbin0 -> 1769 bytes
-rw-r--r--public/-/emojis/1/surfer_tone3.pngbin0 -> 1777 bytes
-rw-r--r--public/-/emojis/1/surfer_tone4.pngbin0 -> 1784 bytes
-rw-r--r--public/-/emojis/1/surfer_tone5.pngbin0 -> 1782 bytes
-rw-r--r--public/-/emojis/1/sushi.pngbin0 -> 2101 bytes
-rw-r--r--public/-/emojis/1/suspension_railway.pngbin0 -> 927 bytes
-rw-r--r--public/-/emojis/1/sweat.pngbin0 -> 861 bytes
-rw-r--r--public/-/emojis/1/sweat_drops.pngbin0 -> 549 bytes
-rw-r--r--public/-/emojis/1/sweat_smile.pngbin0 -> 851 bytes
-rw-r--r--public/-/emojis/1/sweet_potato.pngbin0 -> 951 bytes
-rw-r--r--public/-/emojis/1/swimmer.pngbin0 -> 1184 bytes
-rw-r--r--public/-/emojis/1/swimmer_tone1.pngbin0 -> 1184 bytes
-rw-r--r--public/-/emojis/1/swimmer_tone2.pngbin0 -> 1184 bytes
-rw-r--r--public/-/emojis/1/swimmer_tone3.pngbin0 -> 1184 bytes
-rw-r--r--public/-/emojis/1/swimmer_tone4.pngbin0 -> 1184 bytes
-rw-r--r--public/-/emojis/1/swimmer_tone5.pngbin0 -> 1184 bytes
-rw-r--r--public/-/emojis/1/symbols.pngbin0 -> 746 bytes
-rw-r--r--public/-/emojis/1/synagogue.pngbin0 -> 1309 bytes
-rw-r--r--public/-/emojis/1/syringe.pngbin0 -> 737 bytes
-rw-r--r--public/-/emojis/1/taco.pngbin0 -> 3045 bytes
-rw-r--r--public/-/emojis/1/tada.pngbin0 -> 1778 bytes
-rw-r--r--public/-/emojis/1/tanabata_tree.pngbin0 -> 1479 bytes
-rw-r--r--public/-/emojis/1/tangerine.pngbin0 -> 1184 bytes
-rw-r--r--public/-/emojis/1/taurus.pngbin0 -> 701 bytes
-rw-r--r--public/-/emojis/1/taxi.pngbin0 -> 1230 bytes
-rw-r--r--public/-/emojis/1/tea.pngbin0 -> 1297 bytes
-rw-r--r--public/-/emojis/1/telephone.pngbin0 -> 1760 bytes
-rw-r--r--public/-/emojis/1/telephone_receiver.pngbin0 -> 941 bytes
-rw-r--r--public/-/emojis/1/telescope.pngbin0 -> 1256 bytes
-rw-r--r--public/-/emojis/1/ten.pngbin0 -> 621 bytes
-rw-r--r--public/-/emojis/1/tennis.pngbin0 -> 1561 bytes
-rw-r--r--public/-/emojis/1/tent.pngbin0 -> 1684 bytes
-rw-r--r--public/-/emojis/1/thermometer.pngbin0 -> 759 bytes
-rw-r--r--public/-/emojis/1/thermometer_face.pngbin0 -> 1503 bytes
-rw-r--r--public/-/emojis/1/thinking.pngbin0 -> 1345 bytes
-rw-r--r--public/-/emojis/1/third_place.pngbin0 -> 1529 bytes
-rw-r--r--public/-/emojis/1/thought_balloon.pngbin0 -> 489 bytes
-rw-r--r--public/-/emojis/1/three.pngbin0 -> 602 bytes
-rw-r--r--public/-/emojis/1/thumbsdown.pngbin0 -> 815 bytes
-rw-r--r--public/-/emojis/1/thumbsdown_tone1.pngbin0 -> 815 bytes
-rw-r--r--public/-/emojis/1/thumbsdown_tone2.pngbin0 -> 815 bytes
-rw-r--r--public/-/emojis/1/thumbsdown_tone3.pngbin0 -> 815 bytes
-rw-r--r--public/-/emojis/1/thumbsdown_tone4.pngbin0 -> 815 bytes
-rw-r--r--public/-/emojis/1/thumbsdown_tone5.pngbin0 -> 815 bytes
-rw-r--r--public/-/emojis/1/thumbsup.pngbin0 -> 814 bytes
-rw-r--r--public/-/emojis/1/thumbsup_tone1.pngbin0 -> 814 bytes
-rw-r--r--public/-/emojis/1/thumbsup_tone2.pngbin0 -> 814 bytes
-rw-r--r--public/-/emojis/1/thumbsup_tone3.pngbin0 -> 814 bytes
-rw-r--r--public/-/emojis/1/thumbsup_tone4.pngbin0 -> 814 bytes
-rw-r--r--public/-/emojis/1/thumbsup_tone5.pngbin0 -> 814 bytes
-rw-r--r--public/-/emojis/1/thunder_cloud_rain.pngbin0 -> 1020 bytes
-rw-r--r--public/-/emojis/1/ticket.pngbin0 -> 763 bytes
-rw-r--r--public/-/emojis/1/tickets.pngbin0 -> 1750 bytes
-rw-r--r--public/-/emojis/1/tiger.pngbin0 -> 2104 bytes
-rw-r--r--public/-/emojis/1/tiger2.pngbin0 -> 2623 bytes
-rw-r--r--public/-/emojis/1/timer.pngbin0 -> 1897 bytes
-rw-r--r--public/-/emojis/1/tired_face.pngbin0 -> 1126 bytes
-rw-r--r--public/-/emojis/1/tm.pngbin0 -> 300 bytes
-rw-r--r--public/-/emojis/1/toilet.pngbin0 -> 726 bytes
-rw-r--r--public/-/emojis/1/tokyo_tower.pngbin0 -> 765 bytes
-rw-r--r--public/-/emojis/1/tomato.pngbin0 -> 1055 bytes
-rw-r--r--public/-/emojis/1/tone1.pngbin0 -> 372 bytes
-rw-r--r--public/-/emojis/1/tone2.pngbin0 -> 372 bytes
-rw-r--r--public/-/emojis/1/tone3.pngbin0 -> 375 bytes
-rw-r--r--public/-/emojis/1/tone4.pngbin0 -> 374 bytes
-rw-r--r--public/-/emojis/1/tone5.pngbin0 -> 374 bytes
-rw-r--r--public/-/emojis/1/tongue.pngbin0 -> 599 bytes
-rw-r--r--public/-/emojis/1/tools.pngbin0 -> 1225 bytes
-rw-r--r--public/-/emojis/1/top.pngbin0 -> 389 bytes
-rw-r--r--public/-/emojis/1/tophat.pngbin0 -> 845 bytes
-rw-r--r--public/-/emojis/1/track_next.pngbin0 -> 551 bytes
-rw-r--r--public/-/emojis/1/track_previous.pngbin0 -> 549 bytes
-rw-r--r--public/-/emojis/1/trackball.pngbin0 -> 892 bytes
-rw-r--r--public/-/emojis/1/tractor.pngbin0 -> 1192 bytes
-rw-r--r--public/-/emojis/1/traffic_light.pngbin0 -> 590 bytes
-rw-r--r--public/-/emojis/1/train.pngbin0 -> 1031 bytes
-rw-r--r--public/-/emojis/1/train2.pngbin0 -> 1499 bytes
-rw-r--r--public/-/emojis/1/tram.pngbin0 -> 1065 bytes
-rw-r--r--public/-/emojis/1/triangular_flag_on_post.pngbin0 -> 415 bytes
-rw-r--r--public/-/emojis/1/triangular_ruler.pngbin0 -> 369 bytes
-rw-r--r--public/-/emojis/1/trident.pngbin0 -> 668 bytes
-rw-r--r--public/-/emojis/1/triumph.pngbin0 -> 1529 bytes
-rw-r--r--public/-/emojis/1/trolleybus.pngbin0 -> 1168 bytes
-rw-r--r--public/-/emojis/1/trophy.pngbin0 -> 863 bytes
-rw-r--r--public/-/emojis/1/tropical_drink.pngbin0 -> 1428 bytes
-rw-r--r--public/-/emojis/1/tropical_fish.pngbin0 -> 1676 bytes
-rw-r--r--public/-/emojis/1/truck.pngbin0 -> 1366 bytes
-rw-r--r--public/-/emojis/1/trumpet.pngbin0 -> 1281 bytes
-rw-r--r--public/-/emojis/1/tulip.pngbin0 -> 1065 bytes
-rw-r--r--public/-/emojis/1/tumbler_glass.pngbin0 -> 2312 bytes
-rw-r--r--public/-/emojis/1/turkey.pngbin0 -> 1240 bytes
-rw-r--r--public/-/emojis/1/turtle.pngbin0 -> 1515 bytes
-rw-r--r--public/-/emojis/1/tv.pngbin0 -> 776 bytes
-rw-r--r--public/-/emojis/1/twisted_rightwards_arrows.pngbin0 -> 574 bytes
-rw-r--r--public/-/emojis/1/two.pngbin0 -> 567 bytes
-rw-r--r--public/-/emojis/1/two_hearts.pngbin0 -> 493 bytes
-rw-r--r--public/-/emojis/1/two_men_holding_hands.pngbin0 -> 1347 bytes
-rw-r--r--public/-/emojis/1/two_women_holding_hands.pngbin0 -> 1544 bytes
-rw-r--r--public/-/emojis/1/u5272.pngbin0 -> 411 bytes
-rw-r--r--public/-/emojis/1/u5408.pngbin0 -> 484 bytes
-rw-r--r--public/-/emojis/1/u55b6.pngbin0 -> 460 bytes
-rw-r--r--public/-/emojis/1/u6307.pngbin0 -> 504 bytes
-rw-r--r--public/-/emojis/1/u6708.pngbin0 -> 409 bytes
-rw-r--r--public/-/emojis/1/u6709.pngbin0 -> 434 bytes
-rw-r--r--public/-/emojis/1/u6e80.pngbin0 -> 564 bytes
-rw-r--r--public/-/emojis/1/u7121.pngbin0 -> 534 bytes
-rw-r--r--public/-/emojis/1/u7533.pngbin0 -> 306 bytes
-rw-r--r--public/-/emojis/1/u7981.pngbin0 -> 584 bytes
-rw-r--r--public/-/emojis/1/u7a7a.pngbin0 -> 456 bytes
-rw-r--r--public/-/emojis/1/umbrella.pngbin0 -> 1229 bytes
-rw-r--r--public/-/emojis/1/umbrella2.pngbin0 -> 897 bytes
-rw-r--r--public/-/emojis/1/unamused.pngbin0 -> 632 bytes
-rw-r--r--public/-/emojis/1/underage.pngbin0 -> 863 bytes
-rw-r--r--public/-/emojis/1/unicorn.pngbin0 -> 2107 bytes
-rw-r--r--public/-/emojis/1/unlock.pngbin0 -> 856 bytes
-rw-r--r--public/-/emojis/1/up.pngbin0 -> 405 bytes
-rw-r--r--public/-/emojis/1/upside_down.pngbin0 -> 602 bytes
-rw-r--r--public/-/emojis/1/urn.pngbin0 -> 742 bytes
-rw-r--r--public/-/emojis/1/v.pngbin0 -> 1009 bytes
-rw-r--r--public/-/emojis/1/v_tone1.pngbin0 -> 1009 bytes
-rw-r--r--public/-/emojis/1/v_tone2.pngbin0 -> 1009 bytes
-rw-r--r--public/-/emojis/1/v_tone3.pngbin0 -> 1009 bytes
-rw-r--r--public/-/emojis/1/v_tone4.pngbin0 -> 1009 bytes
-rw-r--r--public/-/emojis/1/v_tone5.pngbin0 -> 1009 bytes
-rw-r--r--public/-/emojis/1/vertical_traffic_light.pngbin0 -> 752 bytes
-rw-r--r--public/-/emojis/1/vhs.pngbin0 -> 632 bytes
-rw-r--r--public/-/emojis/1/vibration_mode.pngbin0 -> 683 bytes
-rw-r--r--public/-/emojis/1/video_camera.pngbin0 -> 1611 bytes
-rw-r--r--public/-/emojis/1/video_game.pngbin0 -> 765 bytes
-rw-r--r--public/-/emojis/1/violin.pngbin0 -> 1156 bytes
-rw-r--r--public/-/emojis/1/virgo.pngbin0 -> 618 bytes
-rw-r--r--public/-/emojis/1/volcano.pngbin0 -> 1257 bytes
-rw-r--r--public/-/emojis/1/volleyball.pngbin0 -> 1202 bytes
-rw-r--r--public/-/emojis/1/vs.pngbin0 -> 604 bytes
-rw-r--r--public/-/emojis/1/vulcan.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/vulcan_tone1.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/vulcan_tone2.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/vulcan_tone3.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/vulcan_tone4.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/vulcan_tone5.pngbin0 -> 1083 bytes
-rw-r--r--public/-/emojis/1/walking.pngbin0 -> 1082 bytes
-rw-r--r--public/-/emojis/1/walking_tone1.pngbin0 -> 1084 bytes
-rw-r--r--public/-/emojis/1/walking_tone2.pngbin0 -> 1084 bytes
-rw-r--r--public/-/emojis/1/walking_tone3.pngbin0 -> 1066 bytes
-rw-r--r--public/-/emojis/1/walking_tone4.pngbin0 -> 1075 bytes
-rw-r--r--public/-/emojis/1/walking_tone5.pngbin0 -> 1065 bytes
-rw-r--r--public/-/emojis/1/waning_crescent_moon.pngbin0 -> 1213 bytes
-rw-r--r--public/-/emojis/1/waning_gibbous_moon.pngbin0 -> 1208 bytes
-rw-r--r--public/-/emojis/1/warning.pngbin0 -> 565 bytes
-rw-r--r--public/-/emojis/1/wastebasket.pngbin0 -> 2414 bytes
-rw-r--r--public/-/emojis/1/watch.pngbin0 -> 785 bytes
-rw-r--r--public/-/emojis/1/water_buffalo.pngbin0 -> 1536 bytes
-rw-r--r--public/-/emojis/1/water_polo.pngbin0 -> 1755 bytes
-rw-r--r--public/-/emojis/1/water_polo_tone1.pngbin0 -> 1758 bytes
-rw-r--r--public/-/emojis/1/water_polo_tone2.pngbin0 -> 1756 bytes
-rw-r--r--public/-/emojis/1/water_polo_tone3.pngbin0 -> 1760 bytes
-rw-r--r--public/-/emojis/1/water_polo_tone4.pngbin0 -> 1749 bytes
-rw-r--r--public/-/emojis/1/water_polo_tone5.pngbin0 -> 1748 bytes
-rw-r--r--public/-/emojis/1/watermelon.pngbin0 -> 1275 bytes
-rw-r--r--public/-/emojis/1/wave.pngbin0 -> 1300 bytes
-rw-r--r--public/-/emojis/1/wave_tone1.pngbin0 -> 1300 bytes
-rw-r--r--public/-/emojis/1/wave_tone2.pngbin0 -> 1300 bytes
-rw-r--r--public/-/emojis/1/wave_tone3.pngbin0 -> 1295 bytes
-rw-r--r--public/-/emojis/1/wave_tone4.pngbin0 -> 1300 bytes
-rw-r--r--public/-/emojis/1/wave_tone5.pngbin0 -> 1300 bytes
-rw-r--r--public/-/emojis/1/wavy_dash.pngbin0 -> 359 bytes
-rw-r--r--public/-/emojis/1/waxing_crescent_moon.pngbin0 -> 1199 bytes
-rw-r--r--public/-/emojis/1/waxing_gibbous_moon.pngbin0 -> 1229 bytes
-rw-r--r--public/-/emojis/1/wc.pngbin0 -> 752 bytes
-rw-r--r--public/-/emojis/1/weary.pngbin0 -> 871 bytes
-rw-r--r--public/-/emojis/1/wedding.pngbin0 -> 1260 bytes
-rw-r--r--public/-/emojis/1/whale.pngbin0 -> 1572 bytes
-rw-r--r--public/-/emojis/1/whale2.pngbin0 -> 1196 bytes
-rw-r--r--public/-/emojis/1/wheel_of_dharma.pngbin0 -> 666 bytes
-rw-r--r--public/-/emojis/1/wheelchair.pngbin0 -> 683 bytes
-rw-r--r--public/-/emojis/1/white_check_mark.pngbin0 -> 547 bytes
-rw-r--r--public/-/emojis/1/white_circle.pngbin0 -> 351 bytes
-rw-r--r--public/-/emojis/1/white_flower.pngbin0 -> 941 bytes
-rw-r--r--public/-/emojis/1/white_large_square.pngbin0 -> 110 bytes
-rw-r--r--public/-/emojis/1/white_medium_small_square.pngbin0 -> 110 bytes
-rw-r--r--public/-/emojis/1/white_medium_square.pngbin0 -> 108 bytes
-rw-r--r--public/-/emojis/1/white_small_square.pngbin0 -> 108 bytes
-rw-r--r--public/-/emojis/1/white_square_button.pngbin0 -> 122 bytes
-rw-r--r--public/-/emojis/1/white_sun_cloud.pngbin0 -> 968 bytes
-rw-r--r--public/-/emojis/1/white_sun_rain_cloud.pngbin0 -> 1161 bytes
-rw-r--r--public/-/emojis/1/white_sun_small_cloud.pngbin0 -> 989 bytes
-rw-r--r--public/-/emojis/1/wilted_rose.pngbin0 -> 1349 bytes
-rw-r--r--public/-/emojis/1/wind_blowing_face.pngbin0 -> 1827 bytes
-rw-r--r--public/-/emojis/1/wind_chime.pngbin0 -> 1046 bytes
-rw-r--r--public/-/emojis/1/wine_glass.pngbin0 -> 655 bytes
-rw-r--r--public/-/emojis/1/wink.pngbin0 -> 746 bytes
-rw-r--r--public/-/emojis/1/wolf.pngbin0 -> 1528 bytes
-rw-r--r--public/-/emojis/1/woman.pngbin0 -> 1212 bytes
-rw-r--r--public/-/emojis/1/woman_tone1.pngbin0 -> 1212 bytes
-rw-r--r--public/-/emojis/1/woman_tone2.pngbin0 -> 1212 bytes
-rw-r--r--public/-/emojis/1/woman_tone3.pngbin0 -> 1202 bytes
-rw-r--r--public/-/emojis/1/woman_tone4.pngbin0 -> 1195 bytes
-rw-r--r--public/-/emojis/1/woman_tone5.pngbin0 -> 1202 bytes
-rw-r--r--public/-/emojis/1/womans_clothes.pngbin0 -> 1042 bytes
-rw-r--r--public/-/emojis/1/womans_hat.pngbin0 -> 1553 bytes
-rw-r--r--public/-/emojis/1/womens.pngbin0 -> 577 bytes
-rw-r--r--public/-/emojis/1/worried.pngbin0 -> 715 bytes
-rw-r--r--public/-/emojis/1/wrench.pngbin0 -> 418 bytes
-rw-r--r--public/-/emojis/1/wrestlers.pngbin0 -> 2556 bytes
-rw-r--r--public/-/emojis/1/wrestlers_tone1.pngbin0 -> 2563 bytes
-rw-r--r--public/-/emojis/1/wrestlers_tone2.pngbin0 -> 2553 bytes
-rw-r--r--public/-/emojis/1/wrestlers_tone3.pngbin0 -> 2541 bytes
-rw-r--r--public/-/emojis/1/wrestlers_tone4.pngbin0 -> 2553 bytes
-rw-r--r--public/-/emojis/1/wrestlers_tone5.pngbin0 -> 2542 bytes
-rw-r--r--public/-/emojis/1/writing_hand.pngbin0 -> 1001 bytes
-rw-r--r--public/-/emojis/1/writing_hand_tone1.pngbin0 -> 988 bytes
-rw-r--r--public/-/emojis/1/writing_hand_tone2.pngbin0 -> 987 bytes
-rw-r--r--public/-/emojis/1/writing_hand_tone3.pngbin0 -> 977 bytes
-rw-r--r--public/-/emojis/1/writing_hand_tone4.pngbin0 -> 973 bytes
-rw-r--r--public/-/emojis/1/writing_hand_tone5.pngbin0 -> 970 bytes
-rw-r--r--public/-/emojis/1/x.pngbin0 -> 298 bytes
-rw-r--r--public/-/emojis/1/yellow_heart.pngbin0 -> 435 bytes
-rw-r--r--public/-/emojis/1/yen.pngbin0 -> 421 bytes
-rw-r--r--public/-/emojis/1/yin_yang.pngbin0 -> 776 bytes
-rw-r--r--public/-/emojis/1/yum.pngbin0 -> 896 bytes
-rw-r--r--public/-/emojis/1/zap.pngbin0 -> 413 bytes
-rw-r--r--public/-/emojis/1/zero.pngbin0 -> 560 bytes
-rw-r--r--public/-/emojis/1/zipper_mouth.pngbin0 -> 722 bytes
-rw-r--r--public/-/emojis/1/zzz.pngbin0 -> 540 bytes
-rw-r--r--public/robots.txt2
-rw-r--r--qa/Dockerfile9
-rw-r--r--qa/knapsack/gitlab-ce/review-qa-all_master_report.json42
-rw-r--r--qa/knapsack/master_report.json54
-rw-r--r--qa/qa.rb28
-rw-r--r--qa/qa/ce/knapsack/nightly_master_report.json46
-rw-r--r--qa/qa/fixtures/ldap/admin/1_add_nodes.ldif7
-rw-r--r--qa/qa/fixtures/ldap/admin/2_add_users.ldif63
-rw-r--r--qa/qa/fixtures/ldap/admin/3_add_groups.ldif16
-rw-r--r--qa/qa/fixtures/ldap/non_admin/1_add_nodes.ldif7
-rw-r--r--qa/qa/fixtures/ldap/non_admin/2_add_users.ldif61
-rw-r--r--qa/qa/fixtures/ldap/non_admin/3_add_groups.ldif16
-rw-r--r--qa/qa/git/repository.rb13
-rw-r--r--qa/qa/page/admin/menu.rb46
-rw-r--r--qa/qa/page/admin/overview/users/index.rb35
-rw-r--r--qa/qa/page/admin/overview/users/show.rb21
-rw-r--r--qa/qa/page/base.rb21
-rw-r--r--qa/qa/page/component/ci_badge_link.rb36
-rw-r--r--qa/qa/page/component/note.rb11
-rw-r--r--qa/qa/page/group/new.rb2
-rw-r--r--qa/qa/page/main/login.rb18
-rw-r--r--qa/qa/page/main/menu.rb21
-rw-r--r--qa/qa/page/merge_request/show.rb66
-rw-r--r--qa/qa/page/profile/emails.rb29
-rw-r--r--qa/qa/page/profile/menu.rb14
-rw-r--r--qa/qa/page/profile/password.rb23
-rw-r--r--qa/qa/page/project/issue/index.rb16
-rw-r--r--qa/qa/page/project/issue/show.rb70
-rw-r--r--qa/qa/page/project/job/show.rb29
-rw-r--r--qa/qa/page/project/milestone/index.rb2
-rw-r--r--qa/qa/page/project/pipeline/show.rb20
-rw-r--r--qa/qa/page/project/settings/main.rb9
-rw-r--r--qa/qa/page/project/settings/merge_request.rb13
-rw-r--r--qa/qa/page/project/settings/mirroring_repositories.rb55
-rw-r--r--qa/qa/page/project/settings/repository.rb6
-rw-r--r--qa/qa/page/validator.rb2
-rw-r--r--qa/qa/resource/fork.rb2
-rw-r--r--qa/qa/resource/issue.rb15
-rw-r--r--qa/qa/resource/project.rb9
-rw-r--r--qa/qa/resource/repository/commit.rb31
-rw-r--r--qa/qa/resource/repository/push.rb44
-rw-r--r--qa/qa/resource/repository/wiki_push.rb9
-rw-r--r--qa/qa/resource/runner.rb19
-rw-r--r--qa/qa/resource/sandbox.rb1
-rw-r--r--qa/qa/resource/tag.rb30
-rw-r--r--qa/qa/resource/user.rb7
-rw-r--r--qa/qa/resource/user_gpg.rb46
-rw-r--r--qa/qa/resource/wiki.rb9
-rw-r--r--qa/qa/runtime/api/client.rb2
-rw-r--r--qa/qa/runtime/browser.rb2
-rw-r--r--qa/qa/runtime/env.rb48
-rw-r--r--qa/qa/runtime/fixtures.rb15
-rw-r--r--qa/qa/runtime/gpg.rb37
-rw-r--r--qa/qa/runtime/release.rb2
-rw-r--r--qa/qa/runtime/user.rb4
-rw-r--r--qa/qa/scenario/test/integration/ldap_no_server.rb13
-rw-r--r--qa/qa/service/docker_run/base.rb43
-rw-r--r--qa/qa/service/docker_run/gitlab_runner.rb58
-rw-r--r--qa/qa/service/docker_run/ldap.rb41
-rw-r--r--qa/qa/service/docker_run/node_js.rb38
-rw-r--r--qa/qa/service/runner.rb73
-rw-r--r--qa/qa/specs/features/api/1_manage/rate_limits_spec.rb7
-rw-r--r--qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb4
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb3
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb1
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb8
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb12
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb4
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb2
-rw-r--r--qa/qa/support/dates.rb21
-rw-r--r--qa/qa/support/page/logging.rb9
-rw-r--r--qa/qa/vendor/github/page/login.rb6
-rw-r--r--qa/qa/vendor/one_password/cli.rb34
-rwxr-xr-xqa/qa/vendor/one_password/darwin/opbin0 -> 10616336 bytes
-rwxr-xr-xqa/qa/vendor/one_password/linux/opbin0 -> 9003392 bytes
-rw-r--r--qa/spec/page/element_spec.rb1
-rw-r--r--qa/spec/resource/user_spec.rb4
-rw-r--r--qa/spec/scenario/test/integration/ldap_spec.rb8
-rw-r--r--rubocop/cop/gitlab/const_get_inherit_false.rb42
-rw-r--r--rubocop/cop/line_break_around_conditional_block.rb2
-rw-r--r--rubocop/migration_helpers.rb12
-rw-r--r--rubocop/rubocop.rb1
-rwxr-xr-xscripts/lint-doc.sh4
-rwxr-xr-xscripts/notify-slack14
-rwxr-xr-xscripts/review_apps/automated_cleanup.rb3
-rw-r--r--scripts/review_apps/base-config.yaml39
-rwxr-xr-xscripts/review_apps/review-apps.sh22
-rw-r--r--scripts/rspec_helpers.sh100
-rwxr-xr-xscripts/trigger-build7
-rwxr-xr-xscripts/trigger-build-docs10
-rwxr-xr-xscripts/update-feature-categories36
-rw-r--r--spec/config/smime_signature_settings_spec.rb2
-rw-r--r--spec/controllers/admin/application_settings_controller_spec.rb20
-rw-r--r--spec/controllers/admin/clusters_controller_spec.rb4
-rw-r--r--spec/controllers/admin/requests_profiles_controller_spec.rb2
-rw-r--r--spec/controllers/admin/sessions_controller_spec.rb98
-rw-r--r--spec/controllers/admin/users_controller_spec.rb92
-rw-r--r--spec/controllers/application_controller_spec.rb129
-rw-r--r--spec/controllers/boards/lists_controller_spec.rb25
-rw-r--r--spec/controllers/concerns/enforces_admin_authentication_spec.rb82
-rw-r--r--spec/controllers/concerns/metrics_dashboard_spec.rb58
-rw-r--r--spec/controllers/dashboard/todos_controller_spec.rb4
-rw-r--r--spec/controllers/groups/clusters_controller_spec.rb6
-rw-r--r--spec/controllers/groups/group_members_controller_spec.rb2
-rw-r--r--spec/controllers/groups/labels_controller_spec.rb14
-rw-r--r--spec/controllers/groups/registry/repositories_controller_spec.rb90
-rw-r--r--spec/controllers/groups/settings/ci_cd_controller_spec.rb54
-rw-r--r--spec/controllers/groups/shared_projects_controller_spec.rb6
-rw-r--r--spec/controllers/groups_controller_spec.rb47
-rw-r--r--spec/controllers/health_controller_spec.rb30
-rw-r--r--spec/controllers/import/bitbucket_controller_spec.rb15
-rw-r--r--spec/controllers/import/bitbucket_server_controller_spec.rb2
-rw-r--r--spec/controllers/import/gitlab_projects_controller_spec.rb4
-rw-r--r--spec/controllers/omniauth_callbacks_controller_spec.rb22
-rw-r--r--spec/controllers/profiles/notifications_controller_spec.rb32
-rw-r--r--spec/controllers/profiles_controller_spec.rb4
-rw-r--r--spec/controllers/projects/artifacts_controller_spec.rb132
-rw-r--r--spec/controllers/projects/autocomplete_sources_controller_spec.rb8
-rw-r--r--spec/controllers/projects/branches_controller_spec.rb50
-rw-r--r--spec/controllers/projects/clusters_controller_spec.rb6
-rw-r--r--spec/controllers/projects/commit_controller_spec.rb7
-rw-r--r--spec/controllers/projects/deploy_keys_controller_spec.rb83
-rw-r--r--spec/controllers/projects/deployments_controller_spec.rb17
-rw-r--r--spec/controllers/projects/discussions_controller_spec.rb2
-rw-r--r--spec/controllers/projects/environments/prometheus_api_controller_spec.rb6
-rw-r--r--spec/controllers/projects/environments_controller_spec.rb24
-rw-r--r--spec/controllers/projects/error_tracking_controller_spec.rb4
-rw-r--r--spec/controllers/projects/git_http_controller_spec.rb25
-rw-r--r--spec/controllers/projects/grafana_api_controller_spec.rb97
-rw-r--r--spec/controllers/projects/issues_controller_spec.rb189
-rw-r--r--spec/controllers/projects/jobs_controller_spec.rb125
-rw-r--r--spec/controllers/projects/merge_requests/diffs_controller_spec.rb294
-rw-r--r--spec/controllers/projects/mirrors_controller_spec.rb2
-rw-r--r--spec/controllers/projects/notes_controller_spec.rb1
-rw-r--r--spec/controllers/projects/pipeline_schedules_controller_spec.rb14
-rw-r--r--spec/controllers/projects/pipelines_controller_spec.rb259
-rw-r--r--spec/controllers/projects/pipelines_settings_controller_spec.rb4
-rw-r--r--spec/controllers/projects/project_members_controller_spec.rb2
-rw-r--r--spec/controllers/projects/registry/repositories_controller_spec.rb14
-rw-r--r--spec/controllers/projects/registry/tags_controller_spec.rb40
-rw-r--r--spec/controllers/projects/serverless/functions_controller_spec.rb134
-rw-r--r--spec/controllers/projects/settings/ci_cd_controller_spec.rb29
-rw-r--r--spec/controllers/projects/settings/operations_controller_spec.rb19
-rw-r--r--spec/controllers/projects/snippets_controller_spec.rb6
-rw-r--r--spec/controllers/projects/templates_controller_spec.rb40
-rw-r--r--spec/controllers/projects/wikis_controller_spec.rb4
-rw-r--r--spec/controllers/projects_controller_spec.rb2
-rw-r--r--spec/controllers/registrations_controller_spec.rb5
-rw-r--r--spec/controllers/search_controller_spec.rb2
-rw-r--r--spec/controllers/sessions_controller_spec.rb19
-rw-r--r--spec/controllers/snippets_controller_spec.rb8
-rw-r--r--spec/controllers/uploads_controller_spec.rb27
-rw-r--r--spec/db/production/settings_spec.rb2
-rw-r--r--spec/db/schema_spec.rb2
-rw-r--r--spec/dependencies/omniauth_saml_spec.rb2
-rw-r--r--spec/factories/abuse_reports.rb2
-rw-r--r--spec/factories/analytics/cycle_analytics/project_stages.rb15
-rw-r--r--spec/factories/appearances.rb6
-rw-r--r--spec/factories/application_settings.rb2
-rw-r--r--spec/factories/award_emoji.rb4
-rw-r--r--spec/factories/aws/roles.rb10
-rw-r--r--spec/factories/boards.rb16
-rw-r--r--spec/factories/broadcast_messages.rb2
-rw-r--r--spec/factories/chat_names.rb4
-rw-r--r--spec/factories/ci/bridge.rb24
-rw-r--r--spec/factories/ci/build_trace_chunks.rb22
-rw-r--r--spec/factories/ci/builds.rb181
-rw-r--r--spec/factories/ci/group_variables.rb6
-rw-r--r--spec/factories/ci/job_artifacts.rb46
-rw-r--r--spec/factories/ci/job_variables.rb2
-rw-r--r--spec/factories/ci/pipeline_schedule.rb32
-rw-r--r--spec/factories/ci/pipeline_schedule_variables.rb4
-rw-r--r--spec/factories/ci/pipeline_variables.rb2
-rw-r--r--spec/factories/ci/pipelines.rb39
-rw-r--r--spec/factories/ci/runners.rb24
-rw-r--r--spec/factories/ci/sources/pipelines.rb15
-rw-r--r--spec/factories/ci/stages.rb16
-rw-r--r--spec/factories/ci/variables.rb6
-rw-r--r--spec/factories/clusters/applications/helm.rb32
-rw-r--r--spec/factories/clusters/clusters.rb42
-rw-r--r--spec/factories/clusters/kubernetes_namespaces.rb2
-rw-r--r--spec/factories/clusters/platforms/kubernetes.rb12
-rw-r--r--spec/factories/clusters/providers/aws.rb38
-rw-r--r--spec/factories/clusters/providers/gcp.rb14
-rw-r--r--spec/factories/commit_statuses.rb38
-rw-r--r--spec/factories/commits.rb2
-rw-r--r--spec/factories/container_repositories.rb15
-rw-r--r--spec/factories/conversational_development_index_metrics.rb60
-rw-r--r--spec/factories/deploy_keys_projects.rb2
-rw-r--r--spec/factories/deploy_tokens.rb14
-rw-r--r--spec/factories/deployments.rb20
-rw-r--r--spec/factories/environments.rb6
-rw-r--r--spec/factories/error_tracking/error.rb28
-rw-r--r--spec/factories/error_tracking/project.rb14
-rw-r--r--spec/factories/events.rb36
-rw-r--r--spec/factories/evidences.rb7
-rw-r--r--spec/factories/external_pull_requests.rb16
-rw-r--r--spec/factories/file_uploaders.rb2
-rw-r--r--spec/factories/gitaly/commit.rb1
-rw-r--r--spec/factories/gpg_signature.rb2
-rw-r--r--spec/factories/grafana_integrations.rb9
-rw-r--r--spec/factories/group_members.rb16
-rw-r--r--spec/factories/groups.rb22
-rw-r--r--spec/factories/identities.rb4
-rw-r--r--spec/factories/import_states.rb14
-rw-r--r--spec/factories/internal_ids.rb2
-rw-r--r--spec/factories/issues.rb14
-rw-r--r--spec/factories/labels.rb4
-rw-r--r--spec/factories/lfs_file_locks.rb2
-rw-r--r--spec/factories/lfs_objects.rb6
-rw-r--r--spec/factories/lfs_objects_projects.rb2
-rw-r--r--spec/factories/lists.rb14
-rw-r--r--spec/factories/merge_request_diff_files.rb66
-rw-r--r--spec/factories/merge_request_diffs.rb4
-rw-r--r--spec/factories/merge_requests.rb58
-rw-r--r--spec/factories/milestones.rb20
-rw-r--r--spec/factories/notes.rb36
-rw-r--r--spec/factories/notification_settings.rb2
-rw-r--r--spec/factories/oauth_applications.rb2
-rw-r--r--spec/factories/pages_domains.rb50
-rw-r--r--spec/factories/personal_access_tokens.rb12
-rw-r--r--spec/factories/pool_repositories.rb10
-rw-r--r--spec/factories/programming_languages.rb4
-rw-r--r--spec/factories/project_auto_devops.rb12
-rw-r--r--spec/factories/project_daily_statistics.rb2
-rw-r--r--spec/factories/project_error_tracking_settings.rb10
-rw-r--r--spec/factories/project_group_links.rb2
-rw-r--r--spec/factories/project_hooks.rb22
-rw-r--r--spec/factories/project_members.rb14
-rw-r--r--spec/factories/project_metrics_settings.rb2
-rw-r--r--spec/factories/projects.rb108
-rw-r--r--spec/factories/prometheus_metrics.rb16
-rw-r--r--spec/factories/protected_branches.rb14
-rw-r--r--spec/factories/protected_tags.rb8
-rw-r--r--spec/factories/releases.rb10
-rw-r--r--spec/factories/remote_mirrors.rb2
-rw-r--r--spec/factories/repository_languages.rb2
-rw-r--r--spec/factories/resource_label_events.rb2
-rw-r--r--spec/factories/services.rb90
-rw-r--r--spec/factories/shards.rb2
-rw-r--r--spec/factories/snippets.rb6
-rw-r--r--spec/factories/spam_logs.rb2
-rw-r--r--spec/factories/suggestions.rb12
-rw-r--r--spec/factories/system_note_metadata.rb2
-rw-r--r--spec/factories/term_agreements.rb4
-rw-r--r--spec/factories/terms.rb2
-rw-r--r--spec/factories/timelogs.rb2
-rw-r--r--spec/factories/todos.rb6
-rw-r--r--spec/factories/u2f_registrations.rb2
-rw-r--r--spec/factories/uploads.rb45
-rw-r--r--spec/factories/user_agent_details.rb4
-rw-r--r--spec/factories/user_callouts.rb2
-rw-r--r--spec/factories/user_statuses.rb4
-rw-r--r--spec/factories/users.rb27
-rw-r--r--spec/factories/web_hook_log.rb22
-rw-r--r--spec/factories/wiki_directories.rb2
-rw-r--r--spec/factories_spec.rb2
-rw-r--r--spec/fast_spec_helper.rb2
-rw-r--r--spec/features/admin/admin_settings_spec.rb707
-rw-r--r--spec/features/admin/admin_users_spec.rb6
-rw-r--r--spec/features/boards/boards_spec.rb14
-rw-r--r--spec/features/boards/multi_select_spec.rb110
-rw-r--r--spec/features/boards/sidebar_spec.rb9
-rw-r--r--spec/features/clusters/cluster_detail_page_spec.rb28
-rw-r--r--spec/features/container_registry_spec.rb11
-rw-r--r--spec/features/dashboard/active_tab_spec.rb16
-rw-r--r--spec/features/groups/issues_spec.rb1
-rw-r--r--spec/features/groups/members/master_manages_access_requests_spec.rb2
-rw-r--r--spec/features/groups/members/request_access_spec.rb2
-rw-r--r--spec/features/groups/user_sees_package_sidebar_spec.rb47
-rw-r--r--spec/features/invites_spec.rb1
-rw-r--r--spec/features/issues/filtered_search/dropdown_milestone_spec.rb38
-rw-r--r--spec/features/issues/gfm_autocomplete_spec.rb2
-rw-r--r--spec/features/issues/spam_issues_spec.rb48
-rw-r--r--spec/features/issues_spec.rb3
-rw-r--r--spec/features/markdown/copy_as_gfm_spec.rb6
-rw-r--r--spec/features/markdown/markdown_spec.rb4
-rw-r--r--spec/features/markdown/mermaid_spec.rb12
-rw-r--r--spec/features/merge_request/user_edits_assignees_sidebar_spec.rb68
-rw-r--r--spec/features/merge_request/user_sees_merge_widget_spec.rb14
-rw-r--r--spec/features/merge_request/user_suggests_changes_on_diff_spec.rb58
-rw-r--r--spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb31
-rw-r--r--spec/features/milestones/user_deletes_milestone_spec.rb6
-rw-r--r--spec/features/projects/artifacts/user_browses_artifacts_spec.rb19
-rw-r--r--spec/features/projects/branches_spec.rb3
-rw-r--r--spec/features/projects/clusters/eks_spec.rb34
-rw-r--r--spec/features/projects/clusters/gcp_spec.rb2
-rw-r--r--spec/features/projects/clusters_spec.rb2
-rw-r--r--spec/features/projects/commits/user_browses_commits_spec.rb4
-rw-r--r--spec/features/projects/compare_spec.rb34
-rw-r--r--spec/features/projects/environments/environment_spec.rb18
-rw-r--r--spec/features/projects/features_visibility_spec.rb2
-rw-r--r--spec/features/projects/files/dockerfile_dropdown_spec.rb2
-rw-r--r--spec/features/projects/files/gitignore_dropdown_spec.rb2
-rw-r--r--spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb2
-rw-r--r--spec/features/projects/files/project_owner_creates_license_file_spec.rb2
-rw-r--r--spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb2
-rw-r--r--spec/features/projects/files/template_type_dropdown_spec.rb20
-rw-r--r--spec/features/projects/files/undo_template_spec.rb11
-rw-r--r--spec/features/projects/import_export/export_file_spec.rb3
-rw-r--r--spec/features/projects/import_export/import_file_spec.rb3
-rw-r--r--spec/features/projects/issuable_templates_spec.rb37
-rw-r--r--spec/features/projects/jobs/permissions_spec.rb3
-rw-r--r--spec/features/projects/jobs/user_browses_job_spec.rb70
-rw-r--r--spec/features/projects/jobs_spec.rb15
-rw-r--r--spec/features/projects/members/group_members_spec.rb4
-rw-r--r--spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb4
-rw-r--r--spec/features/projects/members/master_manages_access_requests_spec.rb2
-rw-r--r--spec/features/projects/members/user_requests_access_spec.rb2
-rw-r--r--spec/features/projects/pipelines/pipeline_spec.rb10
-rw-r--r--spec/features/projects/settings/repository_settings_spec.rb13
-rw-r--r--spec/features/protected_branches_spec.rb8
-rw-r--r--spec/features/runners_spec.rb6
-rw-r--r--spec/features/search/user_searches_for_code_spec.rb7
-rw-r--r--spec/features/security/group/internal_access_spec.rb1
-rw-r--r--spec/features/security/group/private_access_spec.rb1
-rw-r--r--spec/features/security/group/public_access_spec.rb1
-rw-r--r--spec/features/security/project/internal_access_spec.rb1
-rw-r--r--spec/features/security/project/private_access_spec.rb1
-rw-r--r--spec/features/security/project/public_access_spec.rb1
-rw-r--r--spec/features/snippets/private_snippets_spec.rb22
-rw-r--r--spec/features/snippets/public_snippets_spec.rb2
-rw-r--r--spec/features/snippets/spam_snippets_spec.rb73
-rw-r--r--spec/features/snippets/user_creates_snippet_spec.rb8
-rw-r--r--spec/features/users/signup_spec.rb257
-rw-r--r--spec/finders/access_requests_finder_spec.rb6
-rw-r--r--spec/finders/admin/projects_finder_spec.rb2
-rw-r--r--spec/finders/artifacts_finder_spec.rb31
-rw-r--r--spec/finders/autocomplete/move_to_project_finder_spec.rb2
-rw-r--r--spec/finders/autocomplete/users_finder_spec.rb2
-rw-r--r--spec/finders/boards/visits_finder_spec.rb8
-rw-r--r--spec/finders/branches_finder_spec.rb2
-rw-r--r--spec/finders/clusters/knative_services_finder_spec.rb1
-rw-r--r--spec/finders/clusters/kubernetes_namespace_finder_spec.rb6
-rw-r--r--spec/finders/clusters_finder_spec.rb2
-rw-r--r--spec/finders/concerns/finder_methods_spec.rb2
-rw-r--r--spec/finders/concerns/finder_with_cross_project_access_spec.rb3
-rw-r--r--spec/finders/contributed_projects_finder_spec.rb2
-rw-r--r--spec/finders/environments_finder_spec.rb2
-rw-r--r--spec/finders/events_finder_spec.rb2
-rw-r--r--spec/finders/fork_projects_finder_spec.rb2
-rw-r--r--spec/finders/group_descendants_finder_spec.rb2
-rw-r--r--spec/finders/group_members_finder_spec.rb4
-rw-r--r--spec/finders/group_projects_finder_spec.rb2
-rw-r--r--spec/finders/groups_finder_spec.rb2
-rw-r--r--spec/finders/issues_finder_spec.rb2
-rw-r--r--spec/finders/joined_groups_finder_spec.rb2
-rw-r--r--spec/finders/labels_finder_spec.rb2
-rw-r--r--spec/finders/license_template_finder_spec.rb2
-rw-r--r--spec/finders/members_finder_spec.rb12
-rw-r--r--spec/finders/merge_request_target_project_finder_spec.rb2
-rw-r--r--spec/finders/merge_requests_finder_spec.rb2
-rw-r--r--spec/finders/milestones_finder_spec.rb2
-rw-r--r--spec/finders/notes_finder_spec.rb2
-rw-r--r--spec/finders/personal_access_tokens_finder_spec.rb2
-rw-r--r--spec/finders/personal_projects_finder_spec.rb2
-rw-r--r--spec/finders/pipeline_schedules_finder_spec.rb2
-rw-r--r--spec/finders/pipelines_finder_spec.rb2
-rw-r--r--spec/finders/projects_finder_spec.rb2
-rw-r--r--spec/finders/runner_jobs_finder_spec.rb2
-rw-r--r--spec/finders/snippets_finder_spec.rb81
-rw-r--r--spec/finders/tags_finder_spec.rb2
-rw-r--r--spec/finders/template_finder_spec.rb2
-rw-r--r--spec/finders/todos_finder_spec.rb102
-rw-r--r--spec/finders/user_finder_spec.rb32
-rw-r--r--spec/finders/user_recent_events_finder_spec.rb2
-rw-r--r--spec/finders/users_finder_spec.rb2
-rw-r--r--spec/fixtures/api/schemas/deployment.json3
-rw-r--r--spec/fixtures/api/schemas/evidences/evidence.json11
-rw-r--r--spec/fixtures/api/schemas/evidences/issue.json25
-rw-r--r--spec/fixtures/api/schemas/evidences/milestone.json27
-rw-r--r--spec/fixtures/api/schemas/evidences/project.json16
-rw-r--r--spec/fixtures/api/schemas/evidences/release.json25
-rw-r--r--spec/fixtures/api/schemas/job/build_trace.json31
-rw-r--r--spec/fixtures/api/schemas/job/build_trace_line.json18
-rw-r--r--spec/fixtures/api/schemas/job/build_trace_line_content.json11
-rw-r--r--spec/fixtures/api/schemas/list.json3
-rw-r--r--spec/fixtures/api/schemas/public_api/v4/board.json3
-rw-r--r--spec/fixtures/api/schemas/public_api/v4/deployment.json5
-rw-r--r--spec/fixtures/api/schemas/public_api/v4/environment.json3
-rw-r--r--spec/fixtures/api/schemas/public_api/v4/release.json10
-rw-r--r--spec/fixtures/api/schemas/public_api/v4/release/release_for_guest.json13
-rw-r--r--spec/fixtures/audio_sample.wavbin0 -> 127020 bytes
-rw-r--r--spec/fixtures/emails/auto_reply.eml2
-rw-r--r--spec/fixtures/emails/auto_submitted.eml21
-rw-r--r--spec/fixtures/lib/gitlab/import_export/project.group.json186
-rw-r--r--spec/fixtures/lib/gitlab/import_export/project.json7254
-rw-r--r--spec/fixtures/lib/gitlab/import_export/project.light.json (renamed from spec/lib/gitlab/import_export/project.light.json)0
-rw-r--r--spec/fixtures/lib/gitlab/import_export/project.milestone-iid.json (renamed from spec/lib/gitlab/import_export/project.milestone-iid.json)0
-rw-r--r--spec/fixtures/markdown.md.erb4
-rw-r--r--spec/fixtures/spdx.json1
-rw-r--r--spec/frontend/clusters/stores/clusters_store_spec.js3
-rw-r--r--spec/frontend/commit/commit_pipeline_status_component_spec.js179
-rw-r--r--spec/frontend/create_cluster/eks_cluster/components/cluster_form_dropdown_spec.js25
-rw-r--r--spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js457
-rw-r--r--spec/frontend/create_cluster/eks_cluster/components/region_dropdown_spec.js55
-rw-r--r--spec/frontend/create_cluster/eks_cluster/components/role_name_dropdown_spec.js43
-rw-r--r--spec/frontend/create_cluster/eks_cluster/store/actions_spec.js60
-rw-r--r--spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/actions_spec.js95
-rw-r--r--spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/mutations_spec.js36
-rw-r--r--spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js62
-rw-r--r--spec/frontend/error_tracking/utils_spec.js27
-rw-r--r--spec/frontend/fixtures/abuse_reports.rb2
-rw-r--r--spec/frontend/fixtures/admin_users.rb2
-rw-r--r--spec/frontend/fixtures/application_settings.rb2
-rw-r--r--spec/frontend/fixtures/autocomplete_sources.rb4
-rw-r--r--spec/frontend/fixtures/blob.rb2
-rw-r--r--spec/frontend/fixtures/boards.rb2
-rw-r--r--spec/frontend/fixtures/branches.rb2
-rw-r--r--spec/frontend/fixtures/clusters.rb2
-rw-r--r--spec/frontend/fixtures/commit.rb2
-rw-r--r--spec/frontend/fixtures/deploy_keys.rb2
-rw-r--r--spec/frontend/fixtures/groups.rb2
-rw-r--r--spec/frontend/fixtures/issues.rb2
-rw-r--r--spec/frontend/fixtures/jobs.rb2
-rw-r--r--spec/frontend/fixtures/labels.rb2
-rw-r--r--spec/frontend/fixtures/merge_requests.rb2
-rw-r--r--spec/frontend/fixtures/merge_requests_diffs.rb2
-rw-r--r--spec/frontend/fixtures/pipeline_schedules.rb2
-rw-r--r--spec/frontend/fixtures/pipelines.rb2
-rw-r--r--spec/frontend/fixtures/projects.rb2
-rw-r--r--spec/frontend/fixtures/prometheus_service.rb2
-rw-r--r--spec/frontend/fixtures/raw.rb2
-rw-r--r--spec/frontend/fixtures/search.rb2
-rw-r--r--spec/frontend/fixtures/services.rb2
-rw-r--r--spec/frontend/fixtures/sessions.rb2
-rw-r--r--spec/frontend/fixtures/snippet.rb2
-rw-r--r--spec/frontend/fixtures/static/environments_logs.html109
-rw-r--r--spec/frontend/fixtures/todos.rb2
-rw-r--r--spec/frontend/fixtures/u2f.rb2
-rw-r--r--spec/frontend/helpers/dom_shims/README.md12
-rw-r--r--spec/frontend/helpers/dom_shims/get_client_rects.js50
-rw-r--r--spec/frontend/helpers/dom_shims/get_client_rects_spec.js71
-rw-r--r--spec/frontend/helpers/dom_shims/index.js1
-rw-r--r--spec/frontend/helpers/test_constants.js7
-rw-r--r--spec/frontend/helpers/tracking_helper.js25
-rw-r--r--spec/frontend/helpers/vue_resource_helper.js11
-rw-r--r--spec/frontend/ide/components/branches/search_list_spec.js81
-rw-r--r--spec/frontend/ide/components/error_message_spec.js122
-rw-r--r--spec/frontend/ide/components/file_templates/dropdown_spec.js175
-rw-r--r--spec/frontend/ide/components/jobs/list_spec.js115
-rw-r--r--spec/frontend/ide/components/merge_requests/list_spec.js214
-rw-r--r--spec/frontend/ide/components/pipelines/__snapshots__/list_spec.js.snap15
-rw-r--r--spec/frontend/ide/components/pipelines/list_spec.js193
-rw-r--r--spec/frontend/ide/lib/files_spec.js4
-rw-r--r--spec/frontend/ide/mock_data.js228
-rw-r--r--spec/frontend/ide/stores/integration_spec.js100
-rw-r--r--spec/frontend/import_projects/components/import_projects_table_spec.js8
-rw-r--r--spec/frontend/import_projects/store/actions_spec.js64
-rw-r--r--spec/frontend/issue_show/store_spec.js39
-rw-r--r--spec/frontend/issue_show/utils/update_description_spec.js24
-rw-r--r--spec/frontend/jobs/components/log/collapsible_section_spec.js73
-rw-r--r--spec/frontend/jobs/components/log/mock_data.js64
-rw-r--r--spec/frontend/jobs/store/mutations_spec.js76
-rw-r--r--spec/frontend/jobs/store/utils_spec.js350
-rw-r--r--spec/frontend/lib/utils/datetime_utility_spec.js29
-rw-r--r--spec/frontend/lib/utils/number_utility_spec.js13
-rw-r--r--spec/frontend/lib/utils/set_spec.js19
-rw-r--r--spec/frontend/lib/utils/suppress_ajax_errors_during_navigation_spec.js37
-rw-r--r--spec/frontend/lib/utils/url_utility_spec.js18
-rw-r--r--spec/frontend/monitoring/components/date_time_picker/date_time_picker_input_spec.js66
-rw-r--r--spec/frontend/monitoring/components/date_time_picker/date_time_picker_spec.js157
-rw-r--r--spec/frontend/monitoring/embed/embed_spec.js4
-rw-r--r--spec/frontend/monitoring/utils_spec.js54
-rw-r--r--spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap1
-rw-r--r--spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap63
-rw-r--r--spec/frontend/pages/admin/users/components/__snapshots__/user_operation_confirmation_modal_spec.js.snap33
-rw-r--r--spec/frontend/pages/admin/users/components/delete_user_modal_spec.js85
-rw-r--r--spec/frontend/pages/admin/users/components/stubs/modal_stub.js23
-rw-r--r--spec/frontend/pages/admin/users/components/user_modal_manager_spec.js148
-rw-r--r--spec/frontend/pages/admin/users/components/user_operation_confirmation_modal_spec.js47
-rw-r--r--spec/frontend/performance_bar/components/detailed_metric_spec.js111
-rw-r--r--spec/frontend/performance_bar/components/performance_bar_app_spec.js20
-rw-r--r--spec/frontend/performance_bar/components/request_selector_spec.js64
-rw-r--r--spec/frontend/performance_bar/components/request_warning_spec.js33
-rw-r--r--spec/frontend/registry/components/__snapshots__/group_empty_state_spec.js.snap61
-rw-r--r--spec/frontend/registry/components/__snapshots__/project_empty_state_spec.js.snap186
-rw-r--r--spec/frontend/registry/components/app_spec.js160
-rw-r--r--spec/frontend/registry/components/collapsible_container_spec.js127
-rw-r--r--spec/frontend/registry/components/group_empty_state_spec.js23
-rw-r--r--spec/frontend/registry/components/project_empty_state_spec.js27
-rw-r--r--spec/frontend/registry/components/table_registry_spec.js268
-rw-r--r--spec/frontend/registry/getters_spec.js46
-rw-r--r--spec/frontend/registry/mock_data.js (renamed from spec/javascripts/registry/mock_data.js)0
-rw-r--r--spec/frontend/registry/stores/actions_spec.js203
-rw-r--r--spec/frontend/registry/stores/getters_spec.js52
-rw-r--r--spec/frontend/registry/stores/mutations_spec.js94
-rw-r--r--spec/frontend/releases/components/milestone_list_spec.js56
-rw-r--r--spec/frontend/releases/components/release_block_spec.js120
-rw-r--r--spec/frontend/releases/detail/components/app_spec.js70
-rw-r--r--spec/frontend/releases/detail/store/actions_spec.js217
-rw-r--r--spec/frontend/releases/detail/store/mutations_spec.js119
-rw-r--r--spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap332
-rw-r--r--spec/frontend/releases/list/components/release_block_spec.js266
-rw-r--r--spec/frontend/releases/mock_data.js7
-rw-r--r--spec/frontend/reports/store/utils_spec.js14
-rw-r--r--spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap107
-rw-r--r--spec/frontend/repository/components/last_commit_spec.js6
-rw-r--r--spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap229
-rw-r--r--spec/frontend/sidebar/__snapshots__/todo_spec.js.snap37
-rw-r--r--spec/frontend/sidebar/confidential_issue_sidebar_spec.js167
-rw-r--r--spec/frontend/sidebar/todo_spec.js93
-rw-r--r--spec/frontend/test_setup.js2
-rw-r--r--spec/frontend/tracking_spec.js81
-rw-r--r--spec/frontend/vue_mr_widget/components/artifacts_list_app_spec.js121
-rw-r--r--spec/frontend/vue_mr_widget/components/artifacts_list_spec.js61
-rw-r--r--spec/frontend/vue_mr_widget/components/mock_data.js15
-rw-r--r--spec/frontend/vue_mr_widget/components/mr_collapsible_extension_spec.js99
-rw-r--r--spec/frontend/vue_mr_widget/stores/artifacts_list/getters_spec.js32
-rw-r--r--spec/frontend/vue_mr_widget/stores/artifacts_list/mutations_spec.js78
-rw-r--r--spec/frontend/vue_shared/components/changed_file_icon_spec.js5
-rw-r--r--spec/frontend/vue_shared/components/file_icon_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/modal_copy_button_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/recaptcha_eventhub_spec.js21
-rw-r--r--spec/frontend/vue_shared/components/recaptcha_modal_spec.js36
-rw-r--r--spec/frontend/vue_shared/directives/track_event_spec.js49
-rw-r--r--spec/frontend/vue_shared/gl_feature_flags_plugin_spec.js42
-rw-r--r--spec/frontend/vue_shared/mixins/gl_feature_flags_mixin_spec.js36
-rw-r--r--spec/frontend/vue_shared/plugins/global_toast_spec.js10
-rw-r--r--spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb21
-rw-r--r--spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb2
-rw-r--r--spec/graphql/mutations/merge_requests/set_wip_spec.rb2
-rw-r--r--spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb2
-rw-r--r--spec/graphql/resolvers/issues_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/last_commit_resolver_spec.rb41
-rw-r--r--spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/merge_requests_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/metadata_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/project_pipelines_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/project_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/todo_resolver_spec.rb113
-rw-r--r--spec/graphql/resolvers/tree_resolver_spec.rb2
-rw-r--r--spec/graphql/types/ci/detailed_status_type_spec.rb2
-rw-r--r--spec/graphql/types/ci/pipeline_type_spec.rb2
-rw-r--r--spec/graphql/types/commit_type_spec.rb7
-rw-r--r--spec/graphql/types/extended_issue_type_spec.rb21
-rw-r--r--spec/graphql/types/issue_type_spec.rb7
-rw-r--r--spec/graphql/types/merge_request_type_spec.rb6
-rw-r--r--spec/graphql/types/metadata_type_spec.rb2
-rw-r--r--spec/graphql/types/notes/diff_position_type_spec.rb2
-rw-r--r--spec/graphql/types/permission_types/base_permission_type_spec.rb2
-rw-r--r--spec/graphql/types/permission_types/issue_spec.rb2
-rw-r--r--spec/graphql/types/permission_types/merge_request_spec.rb2
-rw-r--r--spec/graphql/types/permission_types/merge_request_type_spec.rb2
-rw-r--r--spec/graphql/types/permission_types/note_spec.rb2
-rw-r--r--spec/graphql/types/permission_types/project_spec.rb2
-rw-r--r--spec/graphql/types/project_type_spec.rb38
-rw-r--r--spec/graphql/types/query_type_spec.rb4
-rw-r--r--spec/graphql/types/repository_type_spec.rb2
-rw-r--r--spec/graphql/types/time_type_spec.rb2
-rw-r--r--spec/graphql/types/todo_type_spec.rb13
-rw-r--r--spec/helpers/application_helper_spec.rb2
-rw-r--r--spec/helpers/auto_devops_helper_spec.rb2
-rw-r--r--spec/helpers/avatars_helper_spec.rb2
-rw-r--r--spec/helpers/award_emoji_helper_spec.rb2
-rw-r--r--spec/helpers/blame_helper_spec.rb2
-rw-r--r--spec/helpers/blob_helper_spec.rb30
-rw-r--r--spec/helpers/boards_helper_spec.rb2
-rw-r--r--spec/helpers/broadcast_messages_helper_spec.rb2
-rw-r--r--spec/helpers/button_helper_spec.rb4
-rw-r--r--spec/helpers/calendar_helper_spec.rb2
-rw-r--r--spec/helpers/ci_status_helper_spec.rb2
-rw-r--r--spec/helpers/commits_helper_spec.rb2
-rw-r--r--spec/helpers/components_helper_spec.rb2
-rw-r--r--spec/helpers/dashboard_helper_spec.rb2
-rw-r--r--spec/helpers/defer_script_tag_helper_spec.rb2
-rw-r--r--spec/helpers/diff_helper_spec.rb2
-rw-r--r--spec/helpers/emails_helper_spec.rb2
-rw-r--r--spec/helpers/environment_helper_spec.rb25
-rw-r--r--spec/helpers/events_helper_spec.rb2
-rw-r--r--spec/helpers/explore_helper_spec.rb2
-rw-r--r--spec/helpers/form_helper_spec.rb2
-rw-r--r--spec/helpers/git_helper_spec.rb2
-rw-r--r--spec/helpers/gitlab_routing_helper_spec.rb2
-rw-r--r--spec/helpers/graph_helper_spec.rb2
-rw-r--r--spec/helpers/groups_helper_spec.rb35
-rw-r--r--spec/helpers/hooks_helper_spec.rb2
-rw-r--r--spec/helpers/icons_helper_spec.rb2
-rw-r--r--spec/helpers/import_helper_spec.rb2
-rw-r--r--spec/helpers/instance_configuration_helper_spec.rb2
-rw-r--r--spec/helpers/issuables_helper_spec.rb29
-rw-r--r--spec/helpers/issues_helper_spec.rb2
-rw-r--r--spec/helpers/labels_helper_spec.rb2
-rw-r--r--spec/helpers/markup_helper_spec.rb8
-rw-r--r--spec/helpers/members_helper_spec.rb10
-rw-r--r--spec/helpers/merge_requests_helper_spec.rb1
-rw-r--r--spec/helpers/milestones_helper_spec.rb2
-rw-r--r--spec/helpers/milestones_routing_helper_spec.rb2
-rw-r--r--spec/helpers/namespaces_helper_spec.rb2
-rw-r--r--spec/helpers/nav_helper_spec.rb52
-rw-r--r--spec/helpers/notes_helper_spec.rb2
-rw-r--r--spec/helpers/notifications_helper_spec.rb2
-rw-r--r--spec/helpers/page_layout_helper_spec.rb2
-rw-r--r--spec/helpers/pagination_helper_spec.rb2
-rw-r--r--spec/helpers/preferences_helper_spec.rb2
-rw-r--r--spec/helpers/profiles_helper_spec.rb2
-rw-r--r--spec/helpers/projects_helper_spec.rb36
-rw-r--r--spec/helpers/releases_helper_spec.rb16
-rw-r--r--spec/helpers/rss_helper_spec.rb2
-rw-r--r--spec/helpers/runners_helper_spec.rb2
-rw-r--r--spec/helpers/search_helper_spec.rb21
-rw-r--r--spec/helpers/sidekiq_helper_spec.rb2
-rw-r--r--spec/helpers/snippets_helper_spec.rb2
-rw-r--r--spec/helpers/storage_helper_spec.rb2
-rw-r--r--spec/helpers/submodule_helper_spec.rb2
-rw-r--r--spec/helpers/tab_helper_spec.rb2
-rw-r--r--spec/helpers/time_helper_spec.rb2
-rw-r--r--spec/helpers/todos_helper_spec.rb2
-rw-r--r--spec/helpers/tree_helper_spec.rb2
-rw-r--r--spec/helpers/user_callouts_helper_spec.rb2
-rw-r--r--spec/helpers/users_helper_spec.rb2
-rw-r--r--spec/helpers/version_check_helper_spec.rb2
-rw-r--r--spec/helpers/visibility_level_helper_spec.rb2
-rw-r--r--spec/helpers/wiki_helper_spec.rb2
-rw-r--r--spec/initializers/google_api_client_spec.rb17
-rw-r--r--spec/initializers/lograge_spec.rb33
-rw-r--r--spec/javascripts/blob/balsamiq/balsamiq_viewer_spec.js63
-rw-r--r--spec/javascripts/blob/viewer/index_spec.js4
-rw-r--r--spec/javascripts/boards/board_card_spec.js14
-rw-r--r--spec/javascripts/boards/boards_store_spec.js132
-rw-r--r--spec/javascripts/boards/issue_card_spec.js18
-rw-r--r--spec/javascripts/boards/mock_data.js4
-rw-r--r--spec/javascripts/commit/commit_pipeline_status_component_spec.js106
-rw-r--r--spec/javascripts/create_cluster/.eslintrc.yml3
-rw-r--r--spec/javascripts/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js11
-rw-r--r--spec/javascripts/create_cluster/gke_cluster/stores/actions_spec.js10
-rw-r--r--spec/javascripts/flash_spec.js12
-rw-r--r--spec/javascripts/frequent_items/components/app_spec.js7
-rw-r--r--spec/javascripts/header_spec.js8
-rw-r--r--spec/javascripts/helpers/tracking_helper.js25
-rw-r--r--spec/javascripts/helpers/vue_resource_helper.js11
-rw-r--r--spec/javascripts/ide/components/branches/search_list_spec.js80
-rw-r--r--spec/javascripts/ide/components/commit_sidebar/list_item_spec.js34
-rw-r--r--spec/javascripts/ide/components/error_message_spec.js106
-rw-r--r--spec/javascripts/ide/components/file_row_extra_spec.js21
-rw-r--r--spec/javascripts/ide/components/file_templates/dropdown_spec.js201
-rw-r--r--spec/javascripts/ide/components/ide_tree_list_spec.js14
-rw-r--r--spec/javascripts/ide/components/jobs/list_spec.js67
-rw-r--r--spec/javascripts/ide/components/merge_requests/list_spec.js159
-rw-r--r--spec/javascripts/ide/components/pipelines/list_spec.js137
-rw-r--r--spec/javascripts/ide/components/repo_editor_spec.js83
-rw-r--r--spec/javascripts/ide/mock_data.js227
-rw-r--r--spec/javascripts/ide/stores/actions/project_spec.js197
-rw-r--r--spec/javascripts/ide/stores/actions_spec.js351
-rw-r--r--spec/javascripts/ide/stores/modules/commit/actions_spec.js106
-rw-r--r--spec/javascripts/ide/stores/mutations/file_spec.js19
-rw-r--r--spec/javascripts/ide/stores/mutations_spec.js389
-rw-r--r--spec/javascripts/ide/stores/utils_spec.js225
-rw-r--r--spec/javascripts/integrations/integration_settings_form_spec.js1
-rw-r--r--spec/javascripts/issue_show/components/app_spec.js68
-rw-r--r--spec/javascripts/jobs/components/environments_block_spec.js212
-rw-r--r--spec/javascripts/jobs/components/job_log_spec.js57
-rw-r--r--spec/javascripts/labels_issue_sidebar_spec.js88
-rw-r--r--spec/javascripts/lazy_loader_spec.js18
-rw-r--r--spec/javascripts/lib/utils/common_utils_spec.js10
-rw-r--r--spec/javascripts/line_highlighter_spec.js28
-rw-r--r--spec/javascripts/monitoring/charts/time_series_spec.js22
-rw-r--r--spec/javascripts/monitoring/components/dashboard_spec.js139
-rw-r--r--spec/javascripts/monitoring/store/actions_spec.js2
-rw-r--r--spec/javascripts/monitoring/store/mutations_spec.js7
-rw-r--r--spec/javascripts/monitoring/store/utils_spec.js41
-rw-r--r--spec/javascripts/monitoring/utils_spec.js249
-rw-r--r--spec/javascripts/notes/components/discussion_filter_spec.js23
-rw-r--r--spec/javascripts/notes/stores/mutation_spec.js17
-rw-r--r--spec/javascripts/pager_spec.js20
-rw-r--r--spec/javascripts/performance_bar/components/detailed_metric_spec.js109
-rw-r--r--spec/javascripts/performance_bar/components/performance_bar_app_spec.js29
-rw-r--r--spec/javascripts/performance_bar/components/request_selector_spec.js46
-rw-r--r--spec/javascripts/pipelines/graph/graph_component_spec.js203
-rw-r--r--spec/javascripts/pipelines/graph/linked_pipeline_spec.js116
-rw-r--r--spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js38
-rw-r--r--spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js407
-rw-r--r--spec/javascripts/pipelines/linked_pipelines_mock.json3532
-rw-r--r--spec/javascripts/pipelines/stores/pipeline.json167
-rw-r--r--spec/javascripts/pipelines/stores/pipeline_store.js165
-rw-r--r--spec/javascripts/pipelines/stores/pipeline_with_triggered.json381
-rw-r--r--spec/javascripts/pipelines/stores/pipeline_with_triggered_by.json379
-rw-r--r--spec/javascripts/pipelines/stores/pipeline_with_triggered_triggered_by.json452
-rw-r--r--spec/javascripts/registry/components/app_spec.js129
-rw-r--r--spec/javascripts/registry/components/collapsible_container_spec.js87
-rw-r--r--spec/javascripts/registry/components/table_registry_spec.js189
-rw-r--r--spec/javascripts/registry/stores/actions_spec.js132
-rw-r--r--spec/javascripts/registry/stores/mutations_spec.js85
-rw-r--r--spec/javascripts/releases/components/app_spec.js79
-rw-r--r--spec/javascripts/releases/components/release_block_spec.js170
-rw-r--r--spec/javascripts/releases/list/components/app_spec.js79
-rw-r--r--spec/javascripts/releases/list/store/actions_spec.js98
-rw-r--r--spec/javascripts/releases/list/store/helpers.js6
-rw-r--r--spec/javascripts/releases/list/store/mutations_spec.js47
-rw-r--r--spec/javascripts/releases/store/actions_spec.js98
-rw-r--r--spec/javascripts/releases/store/helpers.js6
-rw-r--r--spec/javascripts/releases/store/mutations_spec.js47
-rw-r--r--spec/javascripts/reports/components/grouped_test_reports_app_spec.js10
-rw-r--r--spec/javascripts/sidebar/assignee_title_spec.js14
-rw-r--r--spec/javascripts/sidebar/components/time_tracking/time_tracker_spec.js14
-rw-r--r--spec/javascripts/sidebar/confidential_issue_sidebar_spec.js78
-rw-r--r--spec/javascripts/sidebar/lock/lock_issue_sidebar_spec.js13
-rw-r--r--spec/javascripts/sidebar/subscriptions_spec.js9
-rw-r--r--spec/javascripts/sidebar/todo_spec.js171
-rw-r--r--spec/javascripts/test_bundle.js15
-rw-r--r--spec/javascripts/test_constants.js8
-rw-r--r--spec/javascripts/todos_spec.js51
-rw-r--r--spec/javascripts/vue_mr_widget/components/deployment_spec.js6
-rw-r--r--spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js7
-rw-r--r--spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js7
-rw-r--r--spec/javascripts/vue_mr_widget/mock_data.js1
-rw-r--r--spec/javascripts/vue_mr_widget/stores/artifacts_list/actions_spec.js165
-rw-r--r--spec/javascripts/vue_shared/components/clipboard_button_spec.js6
-rw-r--r--spec/javascripts/vue_shared/components/deprecated_modal_2_spec.js261
-rw-r--r--spec/javascripts/vue_shared/components/file_row_spec.js13
-rw-r--r--spec/javascripts/vue_shared/components/gl_modal_spec.js261
-rw-r--r--spec/javascripts/vue_shared/components/icon_spec.js8
-rw-r--r--spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js5
-rw-r--r--spec/javascripts/zen_mode_spec.js2
-rw-r--r--spec/lib/api/helpers/graphql_helpers_spec.rb44
-rw-r--r--spec/lib/backup/files_spec.rb1
-rw-r--r--spec/lib/backup/manager_spec.rb45
-rw-r--r--spec/lib/backup/repository_spec.rb25
-rw-r--r--spec/lib/banzai/filter/audio_link_filter_spec.rb120
-rw-r--r--spec/lib/banzai/filter/project_reference_filter_spec.rb1
-rw-r--r--spec/lib/banzai/filter/relative_link_filter_spec.rb51
-rw-r--r--spec/lib/banzai/filter/table_of_contents_filter_spec.rb4
-rw-r--r--spec/lib/banzai/filter/user_reference_filter_spec.rb1
-rw-r--r--spec/lib/banzai/filter/video_link_filter_spec.rb95
-rw-r--r--spec/lib/banzai/filter/wiki_link_filter_spec.rb8
-rw-r--r--spec/lib/banzai/pipeline/wiki_pipeline_spec.rb24
-rw-r--r--spec/lib/banzai/reference_parser/commit_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/commit_range_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/external_issue_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/label_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb51
-rw-r--r--spec/lib/banzai/reference_parser/mentioned_users_by_group_parser_spec.rb46
-rw-r--r--spec/lib/banzai/reference_parser/mentioned_users_by_project_parser_spec.rb46
-rw-r--r--spec/lib/banzai/reference_parser/merge_request_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/milestone_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/project_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/snippet_parser_spec.rb1
-rw-r--r--spec/lib/banzai/reference_parser/user_parser_spec.rb1
-rw-r--r--spec/lib/container_registry/client_spec.rb65
-rw-r--r--spec/lib/container_registry/tag_spec.rb4
-rw-r--r--spec/lib/event_filter_spec.rb6
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/base_query_builder_spec.rb62
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb131
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start_spec.rb22
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged_spec.rb7
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start_spec.rb24
-rw-r--r--spec/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event_spec.rb7
-rw-r--r--spec/lib/gitlab/auth/current_user_mode_spec.rb159
-rw-r--r--spec/lib/gitlab/auth/user_access_denied_reason_spec.rb8
-rw-r--r--spec/lib/gitlab/auth_spec.rb74
-rw-r--r--spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb2
-rw-r--r--spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb2
-rw-r--r--spec/lib/gitlab/background_migration/migrate_pages_metadata_spec.rb44
-rw-r--r--spec/lib/gitlab/badge/pipeline/template_spec.rb2
-rw-r--r--spec/lib/gitlab/bare_repository_import/importer_spec.rb8
-rw-r--r--spec/lib/gitlab/bitbucket_import/importer_spec.rb4
-rw-r--r--spec/lib/gitlab/ci/ansi2json/line_spec.rb168
-rw-r--r--spec/lib/gitlab/ci/ansi2json/parser_spec.rb30
-rw-r--r--spec/lib/gitlab/ci/ansi2json/style_spec.rb166
-rw-r--r--spec/lib/gitlab/ci/ansi2json_spec.rb544
-rw-r--r--spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb15
-rw-r--r--spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb4
-rw-r--r--spec/lib/gitlab/ci/build/rules/rule/clause/changes_spec.rb17
-rw-r--r--spec/lib/gitlab/ci/build/rules/rule/clause/exists_spec.rb27
-rw-r--r--spec/lib/gitlab/ci/config/edge_stages_injector_spec.rb112
-rw-r--r--spec/lib/gitlab/ci/config/entry/cache_spec.rb1
-rw-r--r--spec/lib/gitlab/ci/config/entry/coverage_spec.rb7
-rw-r--r--spec/lib/gitlab/ci/config/entry/root_spec.rb2
-rw-r--r--spec/lib/gitlab/ci/config/entry/rules/rule_spec.rb52
-rw-r--r--spec/lib/gitlab/ci/config/entry/stages_spec.rb2
-rw-r--r--spec/lib/gitlab/ci/config/external/context_spec.rb128
-rw-r--r--spec/lib/gitlab/ci/config/external/file/base_spec.rb10
-rw-r--r--spec/lib/gitlab/ci/config/external/file/local_spec.rb11
-rw-r--r--spec/lib/gitlab/ci/config/external/file/project_spec.rb8
-rw-r--r--spec/lib/gitlab/ci/config/external/file/remote_spec.rb12
-rw-r--r--spec/lib/gitlab/ci/config/external/file/template_spec.rb12
-rw-r--r--spec/lib/gitlab/ci/config/external/mapper_spec.rb8
-rw-r--r--spec/lib/gitlab/ci/config/external/processor_spec.rb8
-rw-r--r--spec/lib/gitlab/ci/config_spec.rb96
-rw-r--r--spec/lib/gitlab/ci/parsers/test/junit_spec.rb68
-rw-r--r--spec/lib/gitlab/ci/pipeline/seed/build_spec.rb18
-rw-r--r--spec/lib/gitlab/ci/pipeline/seed/deployment_spec.rb76
-rw-r--r--spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb43
-rw-r--r--spec/lib/gitlab/ci/status/composite_spec.rb61
-rw-r--r--spec/lib/gitlab/ci/status/external/factory_spec.rb2
-rw-r--r--spec/lib/gitlab/ci/status/factory_spec.rb2
-rw-r--r--spec/lib/gitlab/ci/status/pipeline/factory_spec.rb2
-rw-r--r--spec/lib/gitlab/ci/status/preparing_spec.rb4
-rw-r--r--spec/lib/gitlab/ci/status/stage/factory_spec.rb2
-rw-r--r--spec/lib/gitlab/ci/trace/stream_spec.rb54
-rw-r--r--spec/lib/gitlab/ci/yaml_processor_spec.rb46
-rw-r--r--spec/lib/gitlab/cleanup/project_uploads_spec.rb1
-rw-r--r--spec/lib/gitlab/cluster/mixins/puma_cluster_spec.rb96
-rw-r--r--spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb112
-rw-r--r--spec/lib/gitlab/config/entry/simplifiable_spec.rb6
-rw-r--r--spec/lib/gitlab/cycle_analytics/code_stage_spec.rb12
-rw-r--r--spec/lib/gitlab/cycle_analytics/issue_stage_spec.rb12
-rw-r--r--spec/lib/gitlab/cycle_analytics/plan_stage_spec.rb12
-rw-r--r--spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb38
-rw-r--r--spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb84
-rw-r--r--spec/lib/gitlab/cycle_analytics/staging_stage_spec.rb5
-rw-r--r--spec/lib/gitlab/cycle_analytics/test_stage_spec.rb30
-rw-r--r--spec/lib/gitlab/daemon_spec.rb26
-rw-r--r--spec/lib/gitlab/danger/helper_spec.rb24
-rw-r--r--spec/lib/gitlab/danger/roulette_spec.rb16
-rw-r--r--spec/lib/gitlab/danger/teammate_spec.rb75
-rw-r--r--spec/lib/gitlab/data_builder/push_spec.rb8
-rw-r--r--spec/lib/gitlab/database_spec.rb14
-rw-r--r--spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb126
-rw-r--r--spec/lib/gitlab/diff/position_collection_spec.rb86
-rw-r--r--spec/lib/gitlab/diff/position_spec.rb20
-rw-r--r--spec/lib/gitlab/discussions_diff/file_collection_spec.rb8
-rw-r--r--spec/lib/gitlab/downtime_check_spec.rb1
-rw-r--r--spec/lib/gitlab/email/message/repository_push_spec.rb18
-rw-r--r--spec/lib/gitlab/email/receiver_spec.rb10
-rw-r--r--spec/lib/gitlab/experimentation_spec.rb157
-rw-r--r--spec/lib/gitlab/favicon_spec.rb1
-rw-r--r--spec/lib/gitlab/file_markdown_link_builder_spec.rb56
-rw-r--r--spec/lib/gitlab/file_type_detection_spec.rb562
-rw-r--r--spec/lib/gitlab/gfm/uploads_rewriter_spec.rb2
-rw-r--r--spec/lib/gitlab/git/branch_spec.rb1
-rw-r--r--spec/lib/gitlab/git/changes_spec.rb81
-rw-r--r--spec/lib/gitlab/git/commit_spec.rb9
-rw-r--r--spec/lib/gitlab/git/diff_collection_spec.rb115
-rw-r--r--spec/lib/gitlab/git/repository_spec.rb44
-rw-r--r--spec/lib/gitlab/git_access_spec.rb13
-rw-r--r--spec/lib/gitlab/gitaly_client/commit_service_spec.rb25
-rw-r--r--spec/lib/gitlab/gitaly_client/conflict_files_stitcher_spec.rb2
-rw-r--r--spec/lib/gitlab/gitaly_client/repository_service_spec.rb22
-rw-r--r--spec/lib/gitlab/gitaly_client/storage_service_spec.rb13
-rw-r--r--spec/lib/gitlab/gitaly_client/storage_settings_spec.rb32
-rw-r--r--spec/lib/gitlab/gitaly_client_spec.rb10
-rw-r--r--spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb3
-rw-r--r--spec/lib/gitlab/github_import/importer/releases_importer_spec.rb56
-rw-r--r--spec/lib/gitlab/gitlab_import/client_spec.rb3
-rw-r--r--spec/lib/gitlab/gl_repository/repo_type_spec.rb30
-rw-r--r--spec/lib/gitlab/gpg/commit_spec.rb28
-rw-r--r--spec/lib/gitlab/graphs/commits_spec.rb3
-rw-r--r--spec/lib/gitlab/health_checks/gitaly_check_spec.rb5
-rw-r--r--spec/lib/gitlab/health_checks/probes/collection_spec.rb62
-rw-r--r--spec/lib/gitlab/health_checks/prometheus_text_format_spec.rb41
-rw-r--r--spec/lib/gitlab/health_checks/puma_check_spec.rb65
-rw-r--r--spec/lib/gitlab/health_checks/simple_check_shared.rb13
-rw-r--r--spec/lib/gitlab/health_checks/unicorn_check_spec.rb63
-rw-r--r--spec/lib/gitlab/hook_data/issue_builder_spec.rb3
-rw-r--r--spec/lib/gitlab/import/merge_request_creator_spec.rb7
-rw-r--r--spec/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy_spec.rb26
-rw-r--r--spec/lib/gitlab/import_export/all_models.yml34
-rw-r--r--spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb7
-rw-r--r--spec/lib/gitlab/import_export/model_configuration_spec.rb4
-rw-r--r--spec/lib/gitlab/import_export/project.group.json186
-rw-r--r--spec/lib/gitlab/import_export/project.json7225
-rw-r--r--spec/lib/gitlab/import_export/project_tree_restorer_spec.rb94
-rw-r--r--spec/lib/gitlab/import_export/relation_factory_spec.rb4
-rw-r--r--spec/lib/gitlab/import_export/relation_rename_service_spec.rb2
-rw-r--r--spec/lib/gitlab/import_export/repo_saver_spec.rb12
-rw-r--r--spec/lib/gitlab/import_export/safe_model_attributes.yml23
-rw-r--r--spec/lib/gitlab/import_export/shared_spec.rb40
-rw-r--r--spec/lib/gitlab/import_export/uploads_manager_spec.rb2
-rw-r--r--spec/lib/gitlab/import_export/uploads_restorer_spec.rb4
-rw-r--r--spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb12
-rw-r--r--spec/lib/gitlab/kubernetes/helm/delete_command_spec.rb4
-rw-r--r--spec/lib/gitlab/kubernetes/helm/install_command_spec.rb14
-rw-r--r--spec/lib/gitlab/kubernetes/helm/reset_command_spec.rb2
-rw-r--r--spec/lib/gitlab/kubernetes/kube_client_spec.rb2
-rw-r--r--spec/lib/gitlab/legacy_github_import/release_formatter_spec.rb8
-rw-r--r--spec/lib/gitlab/lets_encrypt_spec.rb12
-rw-r--r--spec/lib/gitlab/lfs_token_spec.rb40
-rw-r--r--spec/lib/gitlab/metrics/exporter/base_exporter_spec.rb180
-rw-r--r--spec/lib/gitlab/metrics/exporter/sidekiq_exporter_spec.rb65
-rw-r--r--spec/lib/gitlab/metrics/exporter/web_exporter_spec.rb64
-rw-r--r--spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb14
-rw-r--r--spec/lib/gitlab/metrics/samplers/puma_sampler_spec.rb1
-rw-r--r--spec/lib/gitlab/metrics/sidekiq_metrics_exporter_spec.rb105
-rw-r--r--spec/lib/gitlab/metrics/system_spec.rb40
-rw-r--r--spec/lib/gitlab/metrics/transaction_spec.rb8
-rw-r--r--spec/lib/gitlab/middleware/read_only_spec.rb7
-rw-r--r--spec/lib/gitlab/pages_client_spec.rb174
-rw-r--r--spec/lib/gitlab/patch/prependable_spec.rb10
-rw-r--r--spec/lib/gitlab/path_regex_spec.rb2
-rw-r--r--spec/lib/gitlab/phabricator_import/worker_state_spec.rb1
-rw-r--r--spec/lib/gitlab/reference_extractor_spec.rb4
-rw-r--r--spec/lib/gitlab/regex_spec.rb11
-rw-r--r--spec/lib/gitlab/request_context_spec.rb1
-rw-r--r--spec/lib/gitlab/sanitizers/exif_spec.rb2
-rw-r--r--spec/lib/gitlab/search_results_spec.rb4
-rw-r--r--spec/lib/gitlab/shell_spec.rb25
-rw-r--r--spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb501
-rw-r--r--spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb50
-rw-r--r--spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb44
-rw-r--r--spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb52
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/memory_killer_spec.rb1
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/metrics_spec.rb13
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb2
-rw-r--r--spec/lib/gitlab/slash_commands/presenters/access_spec.rb22
-rw-r--r--spec/lib/gitlab/snippet_search_results_spec.rb15
-rw-r--r--spec/lib/gitlab/submodule_links_spec.rb18
-rw-r--r--spec/lib/gitlab/tracking/incident_management_spec.rb78
-rw-r--r--spec/lib/gitlab/tracking_spec.rb105
-rw-r--r--spec/lib/gitlab/url_blocker_spec.rb8
-rw-r--r--spec/lib/gitlab/usage_data_spec.rb73
-rw-r--r--spec/lib/gitlab/utils/inline_hash_spec.rb70
-rw-r--r--spec/lib/gitlab/utils/override_spec.rb6
-rw-r--r--spec/lib/gitlab/utils/safe_inline_hash_spec.rb35
-rw-r--r--spec/lib/gitlab/utils/sanitize_node_link_spec.rb5
-rw-r--r--spec/lib/gitlab_spec.rb77
-rw-r--r--spec/lib/google_api/cloud_platform/client_spec.rb103
-rw-r--r--spec/lib/grafana/client_spec.rb107
-rw-r--r--spec/lib/json_web_token/token_spec.rb1
-rw-r--r--spec/lib/omni_auth/strategies/jwt_spec.rb1
-rw-r--r--spec/lib/quality/test_level_spec.rb28
-rw-r--r--spec/lib/uploaded_file_spec.rb56
-rw-r--r--spec/mailers/emails/pipelines_spec.rb69
-rw-r--r--spec/mailers/emails/releases_spec.rb52
-rw-r--r--spec/mailers/notify_spec.rb8
-rw-r--r--spec/migrations/README.md138
-rw-r--r--spec/migrations/backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps_spec.rb57
-rw-r--r--spec/migrations/migrate_code_owner_approval_status_to_protected_branches_in_batches_spec.rb63
-rw-r--r--spec/migrations/schedule_pages_metadata_migration_spec.rb29
-rw-r--r--spec/migrations/sync_issuables_state_id_spec.rb37
-rw-r--r--spec/models/application_setting_spec.rb12
-rw-r--r--spec/models/aws/role_spec.rb34
-rw-r--r--spec/models/blob_spec.rb16
-rw-r--r--spec/models/ci/build_metadata_spec.rb2
-rw-r--r--spec/models/ci/build_spec.rb50
-rw-r--r--spec/models/ci/build_trace_spec.rb53
-rw-r--r--spec/models/ci/group_spec.rb26
-rw-r--r--spec/models/ci/legacy_stage_spec.rb13
-rw-r--r--spec/models/ci/persistent_ref_spec.rb96
-rw-r--r--spec/models/ci/pipeline_spec.rb227
-rw-r--r--spec/models/ci/runner_spec.rb2
-rw-r--r--spec/models/ci/sources/pipeline_spec.rb19
-rw-r--r--spec/models/ci/stage_spec.rb2
-rw-r--r--spec/models/clusters/applications/cert_manager_spec.rb2
-rw-r--r--spec/models/clusters/applications/helm_spec.rb10
-rw-r--r--spec/models/clusters/applications/ingress_spec.rb4
-rw-r--r--spec/models/clusters/applications/jupyter_spec.rb2
-rw-r--r--spec/models/clusters/applications/knative_spec.rb9
-rw-r--r--spec/models/clusters/applications/prometheus_spec.rb12
-rw-r--r--spec/models/clusters/cluster_spec.rb83
-rw-r--r--spec/models/clusters/clusters_hierarchy_spec.rb36
-rw-r--r--spec/models/clusters/kubernetes_namespace_spec.rb14
-rw-r--r--spec/models/clusters/platforms/kubernetes_spec.rb34
-rw-r--r--spec/models/clusters/providers/aws_spec.rb76
-rw-r--r--spec/models/clusters/providers/gcp_spec.rb109
-rw-r--r--spec/models/commit_collection_spec.rb48
-rw-r--r--spec/models/commit_spec.rb74
-rw-r--r--spec/models/commit_status_spec.rb6
-rw-r--r--spec/models/commit_with_pipeline_spec.rb123
-rw-r--r--spec/models/concerns/access_requestable_spec.rb8
-rw-r--r--spec/models/concerns/atomic_internal_id_spec.rb63
-rw-r--r--spec/models/concerns/checksummable_spec.rb19
-rw-r--r--spec/models/concerns/deployable_spec.rb82
-rw-r--r--spec/models/concerns/deployment_platform_spec.rb49
-rw-r--r--spec/models/concerns/has_status_spec.rb35
-rw-r--r--spec/models/concerns/issuable_spec.rb7
-rw-r--r--spec/models/concerns/noteable_spec.rb1
-rw-r--r--spec/models/concerns/stepable_spec.rb34
-rw-r--r--spec/models/concerns/token_authenticatable_spec.rb1
-rw-r--r--spec/models/container_repository_spec.rb4
-rw-r--r--spec/models/deploy_keys_project_spec.rb1
-rw-r--r--spec/models/deployment_spec.rb13
-rw-r--r--spec/models/description_version_spec.rb29
-rw-r--r--spec/models/environment_spec.rb15
-rw-r--r--spec/models/environment_status_spec.rb2
-rw-r--r--spec/models/event_collection_spec.rb83
-rw-r--r--spec/models/event_spec.rb5
-rw-r--r--spec/models/evidence_spec.rb87
-rw-r--r--spec/models/gpg_signature_spec.rb13
-rw-r--r--spec/models/grafana_integration_spec.rb38
-rw-r--r--spec/models/group_spec.rb37
-rw-r--r--spec/models/hooks/web_hook_spec.rb11
-rw-r--r--spec/models/issue_spec.rb10
-rw-r--r--spec/models/lfs_object_spec.rb51
-rw-r--r--spec/models/list_spec.rb12
-rw-r--r--spec/models/member_spec.rb6
-rw-r--r--spec/models/merge_request_spec.rb102
-rw-r--r--spec/models/namespace_spec.rb123
-rw-r--r--spec/models/note_spec.rb96
-rw-r--r--spec/models/notification_setting_spec.rb1
-rw-r--r--spec/models/pages/lookup_path_spec.rb12
-rw-r--r--spec/models/pages/virtual_domain_spec.rb26
-rw-r--r--spec/models/pages_domain_spec.rb36
-rw-r--r--spec/models/project_services/bugzilla_service_spec.rb2
-rw-r--r--spec/models/project_services/custom_issue_tracker_service_spec.rb2
-rw-r--r--spec/models/project_services/gitlab_issue_tracker_service_spec.rb2
-rw-r--r--spec/models/project_services/jira_service_spec.rb67
-rw-r--r--spec/models/project_services/redmine_service_spec.rb2
-rw-r--r--spec/models/project_services/youtrack_service_spec.rb2
-rw-r--r--spec/models/project_spec.rb362
-rw-r--r--spec/models/project_team_spec.rb8
-rw-r--r--spec/models/project_wiki_spec.rb24
-rw-r--r--spec/models/release_spec.rb41
-rw-r--r--spec/models/repository_spec.rb102
-rw-r--r--spec/models/resource_label_event_spec.rb1
-rw-r--r--spec/models/service_spec.rb62
-rw-r--r--spec/models/snippet_spec.rb30
-rw-r--r--spec/models/suggestion_spec.rb10
-rw-r--r--spec/models/system_note_metadata_spec.rb1
-rw-r--r--spec/models/timelog_spec.rb1
-rw-r--r--spec/models/todo_spec.rb4
-rw-r--r--spec/models/upload_spec.rb48
-rw-r--r--spec/models/uploads/fog_spec.rb2
-rw-r--r--spec/models/user_interacted_project_spec.rb1
-rw-r--r--spec/models/user_spec.rb251
-rw-r--r--spec/policies/deploy_keys_project_policy_spec.rb73
-rw-r--r--spec/policies/global_policy_spec.rb50
-rw-r--r--spec/policies/group_policy_spec.rb87
-rw-r--r--spec/policies/identity_provider_policy_spec.rb1
-rw-r--r--spec/policies/merge_request_policy_spec.rb6
-rw-r--r--spec/policies/project_policy_spec.rb28
-rw-r--r--spec/policies/todo_policy_spec.rb47
-rw-r--r--spec/presenters/ci/build_runner_presenter_spec.rb17
-rw-r--r--spec/presenters/ci/pipeline_presenter_spec.rb38
-rw-r--r--spec/presenters/commit_presenter_spec.rb25
-rw-r--r--spec/presenters/conversational_development_index/metric_presenter_spec.rb1
-rw-r--r--spec/presenters/issue_presenter_spec.rb18
-rw-r--r--spec/presenters/project_presenter_spec.rb22
-rw-r--r--spec/rake_helper.rb2
-rw-r--r--spec/requests/api/access_requests_spec.rb4
-rw-r--r--spec/requests/api/badges_spec.rb4
-rw-r--r--spec/requests/api/commit_statuses_spec.rb60
-rw-r--r--spec/requests/api/commits_spec.rb12
-rw-r--r--spec/requests/api/deploy_keys_spec.rb115
-rw-r--r--spec/requests/api/deployments_spec.rb162
-rw-r--r--spec/requests/api/doorkeeper_access_spec.rb28
-rw-r--r--spec/requests/api/events_spec.rb1
-rw-r--r--spec/requests/api/graphql/namespace/projects_spec.rb1
-rw-r--r--spec/requests/api/graphql/read_only_spec.rb57
-rw-r--r--spec/requests/api/group_labels_spec.rb174
-rw-r--r--spec/requests/api/groups_spec.rb60
-rw-r--r--spec/requests/api/helpers_spec.rb2
-rw-r--r--spec/requests/api/internal/base_spec.rb137
-rw-r--r--spec/requests/api/internal/pages_spec.rb108
-rw-r--r--spec/requests/api/issues/get_project_issues_spec.rb2
-rw-r--r--spec/requests/api/issues/post_projects_issues_spec.rb60
-rw-r--r--spec/requests/api/issues/put_projects_issues_spec.rb61
-rw-r--r--spec/requests/api/labels_spec.rb247
-rw-r--r--spec/requests/api/members_spec.rb33
-rw-r--r--spec/requests/api/pages/internal_access_spec.rb1
-rw-r--r--spec/requests/api/pages/private_access_spec.rb1
-rw-r--r--spec/requests/api/pages/public_access_spec.rb1
-rw-r--r--spec/requests/api/pipelines_spec.rb2
-rw-r--r--spec/requests/api/project_container_repositories_spec.rb36
-rw-r--r--spec/requests/api/project_export_spec.rb2
-rw-r--r--spec/requests/api/project_import_spec.rb47
-rw-r--r--spec/requests/api/project_snippets_spec.rb6
-rw-r--r--spec/requests/api/releases_spec.rb37
-rw-r--r--spec/requests/api/runner_spec.rb79
-rw-r--r--spec/requests/api/settings_spec.rb6
-rw-r--r--spec/requests/api/snippets_spec.rb7
-rw-r--r--spec/requests/api/users_spec.rb211
-rw-r--r--spec/requests/boards/lists_controller_spec.rb25
-rw-r--r--spec/requests/lfs_http_spec.rb879
-rw-r--r--spec/requests/openid_connect_spec.rb25
-rw-r--r--spec/requests/rack_attack_global_spec.rb183
-rw-r--r--spec/routing/project_routing_spec.rb5
-rw-r--r--spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb80
-rw-r--r--spec/rubocop/cop/line_break_around_conditional_block_spec.rb13
-rw-r--r--spec/rubocop/cop/migration/add_timestamps_spec.rb1
-rw-r--r--spec/rubocop/cop/migration/timestamps_spec.rb1
-rw-r--r--spec/rubocop/cop/scalability/file_uploads_spec.rb1
-rw-r--r--spec/serializers/analytics_build_entity_spec.rb2
-rw-r--r--spec/serializers/analytics_build_serializer_spec.rb2
-rw-r--r--spec/serializers/analytics_issue_entity_spec.rb2
-rw-r--r--spec/serializers/analytics_issue_serializer_spec.rb2
-rw-r--r--spec/serializers/analytics_merge_request_serializer_spec.rb2
-rw-r--r--spec/serializers/analytics_stage_serializer_spec.rb2
-rw-r--r--spec/serializers/analytics_summary_serializer_spec.rb2
-rw-r--r--spec/serializers/blob_entity_spec.rb2
-rw-r--r--spec/serializers/build_action_entity_spec.rb9
-rw-r--r--spec/serializers/build_artifact_entity_spec.rb2
-rw-r--r--spec/serializers/build_details_entity_spec.rb21
-rw-r--r--spec/serializers/build_serializer_spec.rb2
-rw-r--r--spec/serializers/build_trace_entity_spec.rb63
-rw-r--r--spec/serializers/cluster_application_entity_spec.rb2
-rw-r--r--spec/serializers/cluster_basic_entity_spec.rb3
-rw-r--r--spec/serializers/cluster_entity_spec.rb2
-rw-r--r--spec/serializers/cluster_serializer_spec.rb2
-rw-r--r--spec/serializers/commit_entity_spec.rb2
-rw-r--r--spec/serializers/container_repository_entity_spec.rb14
-rw-r--r--spec/serializers/container_tag_entity_spec.rb2
-rw-r--r--spec/serializers/deploy_key_entity_spec.rb36
-rw-r--r--spec/serializers/deployment_entity_spec.rb2
-rw-r--r--spec/serializers/detailed_status_entity_spec.rb2
-rw-r--r--spec/serializers/diff_file_entity_spec.rb2
-rw-r--r--spec/serializers/diff_line_serializer_spec.rb2
-rw-r--r--spec/serializers/diff_viewer_entity_spec.rb2
-rw-r--r--spec/serializers/diffs_entity_spec.rb2
-rw-r--r--spec/serializers/diffs_metadata_entity_spec.rb46
-rw-r--r--spec/serializers/discussion_entity_spec.rb2
-rw-r--r--spec/serializers/entity_date_helper_spec.rb2
-rw-r--r--spec/serializers/entity_request_spec.rb2
-rw-r--r--spec/serializers/environment_entity_spec.rb2
-rw-r--r--spec/serializers/environment_serializer_spec.rb2
-rw-r--r--spec/serializers/environment_status_entity_spec.rb2
-rw-r--r--spec/serializers/evidences/evidence_entity_spec.rb14
-rw-r--r--spec/serializers/evidences/evidence_serializer_spec.rb9
-rw-r--r--spec/serializers/evidences/issue_entity_spec.rb13
-rw-r--r--spec/serializers/evidences/milestone_entity_spec.rb35
-rw-r--r--spec/serializers/evidences/project_entity_spec.rb13
-rw-r--r--spec/serializers/evidences/release_entity_spec.rb36
-rw-r--r--spec/serializers/evidences/release_serializer_spec.rb9
-rw-r--r--spec/serializers/group_child_entity_spec.rb2
-rw-r--r--spec/serializers/group_child_serializer_spec.rb2
-rw-r--r--spec/serializers/group_variable_entity_spec.rb2
-rw-r--r--spec/serializers/issue_entity_spec.rb2
-rw-r--r--spec/serializers/issue_serializer_spec.rb2
-rw-r--r--spec/serializers/job_entity_spec.rb2
-rw-r--r--spec/serializers/label_serializer_spec.rb2
-rw-r--r--spec/serializers/lfs_file_lock_entity_spec.rb2
-rw-r--r--spec/serializers/merge_request_diff_entity_spec.rb2
-rw-r--r--spec/serializers/merge_request_for_pipeline_entity_spec.rb2
-rw-r--r--spec/serializers/merge_request_serializer_spec.rb2
-rw-r--r--spec/serializers/merge_request_user_entity_spec.rb2
-rw-r--r--spec/serializers/merge_request_widget_entity_spec.rb2
-rw-r--r--spec/serializers/note_entity_spec.rb2
-rw-r--r--spec/serializers/paginated_diff_entity_spec.rb33
-rw-r--r--spec/serializers/pipeline_details_entity_spec.rb37
-rw-r--r--spec/serializers/pipeline_entity_spec.rb2
-rw-r--r--spec/serializers/pipeline_serializer_spec.rb8
-rw-r--r--spec/serializers/project_mirror_entity_spec.rb2
-rw-r--r--spec/serializers/project_mirror_serializer_spec.rb2
-rw-r--r--spec/serializers/project_note_entity_spec.rb2
-rw-r--r--spec/serializers/remote_mirror_entity_spec.rb2
-rw-r--r--spec/serializers/request_aware_entity_spec.rb2
-rw-r--r--spec/serializers/runner_entity_spec.rb2
-rw-r--r--spec/serializers/stage_entity_spec.rb2
-rw-r--r--spec/serializers/test_case_entity_spec.rb2
-rw-r--r--spec/serializers/test_report_entity_spec.rb25
-rw-r--r--spec/serializers/test_reports_comparer_entity_spec.rb2
-rw-r--r--spec/serializers/test_reports_comparer_serializer_spec.rb2
-rw-r--r--spec/serializers/test_suite_comparer_entity_spec.rb2
-rw-r--r--spec/serializers/test_suite_entity_spec.rb29
-rw-r--r--spec/serializers/trigger_variable_entity_spec.rb2
-rw-r--r--spec/serializers/user_entity_spec.rb2
-rw-r--r--spec/serializers/variable_entity_spec.rb2
-rw-r--r--spec/services/application_settings/update_service_spec.rb87
-rw-r--r--spec/services/boards/issues/create_service_spec.rb2
-rw-r--r--spec/services/boards/lists/update_service_spec.rb8
-rw-r--r--spec/services/boards/visits/create_service_spec.rb4
-rw-r--r--spec/services/bulk_push_event_payload_service_spec.rb27
-rw-r--r--spec/services/ci/create_pipeline_service/rules_spec.rb94
-rw-r--r--spec/services/ci/create_pipeline_service_spec.rb23
-rw-r--r--spec/services/ci/pipeline_trigger_service_spec.rb162
-rw-r--r--spec/services/ci/process_pipeline_service_spec.rb16
-rw-r--r--spec/services/ci/register_job_service_spec.rb16
-rw-r--r--spec/services/ci/retry_build_service_spec.rb10
-rw-r--r--spec/services/ci/stop_environments_service_spec.rb4
-rw-r--r--spec/services/clusters/gcp/finalize_creation_service_spec.rb24
-rw-r--r--spec/services/create_snippet_service_spec.rb72
-rw-r--r--spec/services/deployments/after_create_service_spec.rb240
-rw-r--r--spec/services/deployments/create_service_spec.rb92
-rw-r--r--spec/services/deployments/update_service_spec.rb15
-rw-r--r--spec/services/event_create_service_spec.rb78
-rw-r--r--spec/services/git/base_hooks_service_spec.rb120
-rw-r--r--spec/services/git/branch_hooks_service_spec.rb10
-rw-r--r--spec/services/git/branch_push_service_spec.rb96
-rw-r--r--spec/services/git/process_ref_changes_service_spec.rb193
-rw-r--r--spec/services/git/tag_hooks_service_spec.rb9
-rw-r--r--spec/services/git/tag_push_service_spec.rb2
-rw-r--r--spec/services/grafana/proxy_service_spec.rb139
-rw-r--r--spec/services/groups/destroy_service_spec.rb6
-rw-r--r--spec/services/groups/transfer_service_spec.rb17
-rw-r--r--spec/services/groups/update_service_spec.rb24
-rw-r--r--spec/services/issues/close_service_spec.rb11
-rw-r--r--spec/services/issues/create_service_spec.rb62
-rw-r--r--spec/services/issues/update_service_spec.rb4
-rw-r--r--spec/services/issues/zoom_link_service_spec.rb37
-rw-r--r--spec/services/members/approve_access_request_service_spec.rb4
-rw-r--r--spec/services/members/request_access_service_spec.rb4
-rw-r--r--spec/services/merge_requests/create_from_issue_service_spec.rb1
-rw-r--r--spec/services/merge_requests/post_merge_service_spec.rb6
-rw-r--r--spec/services/merge_requests/refresh_service_spec.rb124
-rw-r--r--spec/services/merge_requests/update_service_spec.rb4
-rw-r--r--spec/services/note_summary_spec.rb12
-rw-r--r--spec/services/notes/update_service_spec.rb94
-rw-r--r--spec/services/notification_service_spec.rb39
-rw-r--r--spec/services/projects/after_import_service_spec.rb2
-rw-r--r--spec/services/projects/container_repository/cleanup_tags_service_spec.rb2
-rw-r--r--spec/services/projects/container_repository/delete_tags_service_spec.rb135
-rw-r--r--spec/services/projects/destroy_service_spec.rb4
-rw-r--r--spec/services/projects/fork_service_spec.rb21
-rw-r--r--spec/services/projects/hashed_storage/migrate_repository_service_spec.rb9
-rw-r--r--spec/services/projects/hashed_storage/rollback_repository_service_spec.rb9
-rw-r--r--spec/services/projects/housekeeping_service_spec.rb1
-rw-r--r--spec/services/projects/import_export/export_service_spec.rb21
-rw-r--r--spec/services/projects/operations/update_service_spec.rb56
-rw-r--r--spec/services/projects/transfer_service_spec.rb2
-rw-r--r--spec/services/projects/update_pages_service_spec.rb15
-rw-r--r--spec/services/quick_actions/interpret_service_spec.rb28
-rw-r--r--spec/services/spam_service_spec.rb48
-rw-r--r--spec/services/system_note_service_spec.rb729
-rw-r--r--spec/services/system_notes/base_service_spec.rb44
-rw-r--r--spec/services/system_notes/commit_service_spec.rb117
-rw-r--r--spec/services/system_notes/issuables_service_spec.rb628
-rw-r--r--spec/services/system_notes/zoom_service_spec.rb36
-rw-r--r--spec/services/todos/destroy/private_features_service_spec.rb4
-rw-r--r--spec/services/update_deployment_service_spec.rb235
-rw-r--r--spec/services/users/destroy_service_spec.rb4
-rw-r--r--spec/simplecov_env.rb2
-rw-r--r--spec/spec_helper.rb43
-rw-r--r--spec/support/api/boards_shared_examples.rb2
-rw-r--r--spec/support/api/milestones_shared_examples.rb2
-rw-r--r--spec/support/controllers/githubish_import_controller_shared_examples.rb32
-rw-r--r--spec/support/features/rss_shared_examples.rb8
-rw-r--r--spec/support/google_api/cloud_platform_helpers.rb2
-rw-r--r--spec/support/helpers/admin_mode_helpers.rb16
-rw-r--r--spec/support/helpers/cycle_analytics_helpers.rb15
-rw-r--r--spec/support/helpers/expect_next_instance_of.rb15
-rw-r--r--spec/support/helpers/gpg_helpers.rb2
-rw-r--r--spec/support/helpers/group_api_helpers.rb11
-rw-r--r--spec/support/helpers/javascript_fixtures_helpers.rb2
-rw-r--r--spec/support/helpers/kubernetes_helpers.rb60
-rw-r--r--spec/support/helpers/lfs_http_helpers.rb62
-rw-r--r--spec/support/helpers/login_helpers.rb8
-rw-r--r--spec/support/helpers/migrations_helpers.rb35
-rw-r--r--spec/support/helpers/next_instance_of.rb28
-rw-r--r--spec/support/helpers/rack_attack_spec_helpers.rb33
-rw-r--r--spec/support/helpers/repo_helpers.rb4
-rw-r--r--spec/support/helpers/select2_helper.rb12
-rw-r--r--spec/support/helpers/stub_experiments.rb15
-rw-r--r--spec/support/helpers/test_env.rb7
-rw-r--r--spec/support/helpers/wait_for_requests.rb6
-rw-r--r--spec/support/helpers/workhorse_helpers.rb55
-rw-r--r--spec/support/matchers/graphql_matchers.rb10
-rw-r--r--spec/support/matchers/log_spam.rb34
-rw-r--r--spec/support/matchers/markdown_matchers.rb11
-rw-r--r--spec/support/matchers/policy_matchers.rb17
-rw-r--r--spec/support/omniauth_strategy.rb2
-rw-r--r--spec/support/redis/redis_shared_examples.rb1
-rw-r--r--spec/support/shared_contexts/policies/group_policy_shared_context.rb17
-rw-r--r--spec/support/shared_contexts/policies/project_policy_shared_context.rb4
-rw-r--r--spec/support/shared_contexts/rack_attack_shared_context.rb13
-rw-r--r--spec/support/shared_contexts/services_shared_context.rb28
-rw-r--r--spec/support/shared_contexts/session_shared_context.rb15
-rw-r--r--spec/support/shared_examples/chat_slash_commands_shared_examples.rb24
-rw-r--r--spec/support/shared_examples/ci/pipeline_email_examples.rb20
-rw-r--r--spec/support/shared_examples/ci_trace_shared_examples.rb6
-rw-r--r--spec/support/shared_examples/common_system_notes_examples.rb27
-rw-r--r--spec/support/shared_examples/controllers/repository_lfs_file_load_examples.rb69
-rw-r--r--spec/support/shared_examples/controllers/uploads_actions_shared_examples.rb4
-rw-r--r--spec/support/shared_examples/cycle_analytics_event_shared_examples.rb19
-rw-r--r--spec/support/shared_examples/cycle_analytics_stage_examples.rb74
-rw-r--r--spec/support/shared_examples/cycle_analytics_stage_shared_examples.rb107
-rw-r--r--spec/support/shared_examples/diff_file_collections.rb8
-rw-r--r--spec/support/shared_examples/evidence_updated_exposed_fields.rb29
-rw-r--r--spec/support/shared_examples/lfs_http_shared_examples.rb43
-rw-r--r--spec/support/shared_examples/lib/gitlab/ci/build/rules/rule/clause/clause_shared_examples.rb23
-rw-r--r--spec/support/shared_examples/lib/gitlab/import_export/project_tree_restorer_shared_examples.rb37
-rw-r--r--spec/support/shared_examples/models/cluster_application_status_shared_examples.rb19
-rw-r--r--spec/support/shared_examples/models/cluster_application_version_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/models/clusters/providers/provider_status.rb73
-rw-r--r--spec/support/shared_examples/models/concern/issuable_shared_examples.rb58
-rw-r--r--spec/support/shared_examples/models/with_uploads_shared_examples.rb3
-rw-r--r--spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb16
-rw-r--r--spec/support/shared_examples/relative_positioning_shared_examples.rb36
-rw-r--r--spec/support/shared_examples/repo_type_shared_examples.rb31
-rw-r--r--spec/support/shared_examples/requests/rack_attack_shared_examples.rb21
-rw-r--r--spec/support/shared_examples/services/boards/boards_create_service.rb2
-rw-r--r--spec/support/shared_examples/services/boards/boards_list_service.rb4
-rw-r--r--spec/support/shared_examples/slack_mattermost_notifications_shared_examples.rb74
-rw-r--r--spec/support/shared_examples/snippet_visibility_shared_examples.rb26
-rw-r--r--spec/support/shared_examples/trackable_shared_examples.rb37
-rw-r--r--spec/support/shared_examples/updating_mentions_shared_examples.rb80
-rw-r--r--spec/support/shared_examples/versioned_description_shared_examples.rb65
-rw-r--r--spec/tasks/cache/clear/redis_spec.rb2
-rw-r--r--spec/tasks/config_lint_spec.rb2
-rw-r--r--spec/tasks/gitlab/artifacts/check_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/artifacts/migrate_rake_spec.rb44
-rw-r--r--spec/tasks/gitlab/backup_rake_spec.rb41
-rw-r--r--spec/tasks/gitlab/check_rake_spec.rb8
-rw-r--r--spec/tasks/gitlab/cleanup_rake_spec.rb70
-rw-r--r--spec/tasks/gitlab/db_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/git_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/gitaly_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/info_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/ldap_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/lfs/check_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/lfs/migrate_rake_spec.rb45
-rw-r--r--spec/tasks/gitlab/shell_rake_spec.rb8
-rw-r--r--spec/tasks/gitlab/storage_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/task_helpers_spec.rb2
-rw-r--r--spec/tasks/gitlab/traces_rake_spec.rb113
-rw-r--r--spec/tasks/gitlab/uploads/check_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/uploads/migrate_rake_spec.rb27
-rw-r--r--spec/tasks/gitlab/web_hook_rake_spec.rb2
-rw-r--r--spec/tasks/gitlab/workhorse_rake_spec.rb2
-rw-r--r--spec/tasks/tokens_spec.rb2
-rw-r--r--spec/uploaders/attachment_uploader_spec.rb2
-rw-r--r--spec/uploaders/avatar_uploader_spec.rb2
-rw-r--r--spec/uploaders/external_diff_uploader_spec.rb2
-rw-r--r--spec/uploaders/file_mover_spec.rb2
-rw-r--r--spec/uploaders/file_uploader_spec.rb12
-rw-r--r--spec/uploaders/gitlab_uploader_spec.rb12
-rw-r--r--spec/uploaders/import_export_uploader_spec.rb2
-rw-r--r--spec/uploaders/job_artifact_uploader_spec.rb2
-rw-r--r--spec/uploaders/lfs_object_uploader_spec.rb2
-rw-r--r--spec/uploaders/namespace_file_uploader_spec.rb2
-rw-r--r--spec/uploaders/object_storage_spec.rb2
-rw-r--r--spec/uploaders/personal_file_uploader_spec.rb2
-rw-r--r--spec/uploaders/records_uploads_spec.rb2
-rw-r--r--spec/uploaders/uploader_helper_spec.rb2
-rw-r--r--spec/uploaders/workers/object_storage/background_move_worker_spec.rb2
-rw-r--r--spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb42
-rw-r--r--spec/validators/branch_filter_validator_spec.rb16
-rw-r--r--spec/validators/js_regex_validator_spec.rb2
-rw-r--r--spec/validators/named_ecdsa_key_validator_spec.rb2
-rw-r--r--spec/validators/namespace_path_validator_spec.rb4
-rw-r--r--spec/validators/project_path_validator_spec.rb4
-rw-r--r--spec/validators/public_url_validator_spec.rb2
-rw-r--r--spec/validators/variable_duplicates_validator_spec.rb2
-rw-r--r--spec/validators/x509_certificate_credentials_validator_spec.rb2
-rw-r--r--spec/views/admin/application_settings/_repository_storage.html.haml_spec.rb28
-rw-r--r--spec/views/admin/dashboard/index.html.haml_spec.rb3
-rw-r--r--spec/views/admin/sessions/new.html.haml_spec.rb31
-rw-r--r--spec/views/ci/status/_badge.html.haml_spec.rb2
-rw-r--r--spec/views/dashboard/projects/_blank_state_admin_welcome.haml_spec.rb2
-rw-r--r--spec/views/dashboard/projects/_nav.html.haml_spec.rb2
-rw-r--r--spec/views/devise/shared/_signin_box.html.haml_spec.rb3
-rw-r--r--spec/views/errors/access_denied.html.haml_spec.rb2
-rw-r--r--spec/views/events/event/_push.html.haml_spec.rb36
-rw-r--r--spec/views/groups/_home_panel.html.haml_spec.rb2
-rw-r--r--spec/views/groups/edit.html.haml_spec.rb2
-rw-r--r--spec/views/help/instance_configuration.html.haml_spec.rb2
-rw-r--r--spec/views/layouts/_head.html.haml_spec.rb3
-rw-r--r--spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb2
-rw-r--r--spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb2
-rw-r--r--spec/views/notify/pipeline_failed_email.html.haml_spec.rb4
-rw-r--r--spec/views/notify/pipeline_failed_email.text.erb_spec.rb2
-rw-r--r--spec/views/notify/pipeline_success_email.html.haml_spec.rb4
-rw-r--r--spec/views/notify/pipeline_success_email.text.erb_spec.rb26
-rw-r--r--spec/views/profiles/show.html.haml_spec.rb2
-rw-r--r--spec/views/projects/_home_panel.html.haml_spec.rb2
-rw-r--r--spec/views/projects/artifacts/_artifact.html.haml_spec.rb74
-rw-r--r--spec/views/projects/blob/_viewer.html.haml_spec.rb2
-rw-r--r--spec/views/projects/buttons/_dropdown.html.haml_spec.rb2
-rw-r--r--spec/views/projects/ci/lints/show.html.haml_spec.rb2
-rw-r--r--spec/views/projects/commit/_commit_box.html.haml_spec.rb2
-rw-r--r--spec/views/projects/commit/branches.html.haml_spec.rb2
-rw-r--r--spec/views/projects/commit/show.html.haml_spec.rb2
-rw-r--r--spec/views/projects/commits/_commit.html.haml_spec.rb2
-rw-r--r--spec/views/projects/diffs/_stats.html.haml_spec.rb2
-rw-r--r--spec/views/projects/diffs/_viewer.html.haml_spec.rb2
-rw-r--r--spec/views/projects/edit.html.haml_spec.rb2
-rw-r--r--spec/views/projects/environments/terminal.html.haml_spec.rb2
-rw-r--r--spec/views/projects/imports/new.html.haml_spec.rb2
-rw-r--r--spec/views/projects/issues/_related_branches.html.haml_spec.rb2
-rw-r--r--spec/views/projects/jobs/_build.html.haml_spec.rb2
-rw-r--r--spec/views/projects/jobs/_generic_commit_status.html.haml_spec.rb2
-rw-r--r--spec/views/projects/jobs/show.html.haml_spec.rb2
-rw-r--r--spec/views/projects/merge_requests/_commits.html.haml_spec.rb2
-rw-r--r--spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb2
-rw-r--r--spec/views/projects/merge_requests/diffs/_diffs.html.haml_spec.rb2
-rw-r--r--spec/views/projects/merge_requests/edit.html.haml_spec.rb2
-rw-r--r--spec/views/projects/merge_requests/show.html.haml_spec.rb2
-rw-r--r--spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb2
-rw-r--r--spec/views/projects/pages_domains/show.html.haml_spec.rb2
-rw-r--r--spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb2
-rw-r--r--spec/views/projects/pipelines/_stage.html.haml_spec.rb2
-rw-r--r--spec/views/projects/services/_form.haml_spec.rb2
-rw-r--r--spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb2
-rw-r--r--spec/views/projects/tags/index.html.haml_spec.rb7
-rw-r--r--spec/views/projects/tree/_tree_header.html.haml_spec.rb44
-rw-r--r--spec/views/projects/tree/_tree_row.html.haml_spec.rb2
-rw-r--r--spec/views/projects/tree/show.html.haml_spec.rb2
-rw-r--r--spec/views/shared/milestones/_issuable.html.haml_spec.rb2
-rw-r--r--spec/views/shared/milestones/_issuables.html.haml_spec.rb2
-rw-r--r--spec/views/shared/milestones/_top.html.haml_spec.rb2
-rw-r--r--spec/views/shared/notes/_form.html.haml_spec.rb2
-rw-r--r--spec/views/shared/projects/_project.html.haml_spec.rb2
-rw-r--r--spec/workers/create_evidence_worker_spec.rb11
-rw-r--r--spec/workers/deployments/success_worker_spec.rb12
-rw-r--r--spec/workers/every_sidekiq_worker_spec.rb28
-rw-r--r--spec/workers/hashed_storage/migrator_worker_spec.rb1
-rw-r--r--spec/workers/hashed_storage/rollbacker_worker_spec.rb1
-rw-r--r--spec/workers/namespaceless_project_destroy_worker_spec.rb1
-rw-r--r--spec/workers/new_release_worker_spec.rb13
-rw-r--r--spec/workers/object_pool/destroy_worker_spec.rb4
-rw-r--r--spec/workers/post_receive_spec.rb155
-rw-r--r--spec/workers/prune_old_events_worker_spec.rb10
-rw-r--r--spec/workers/repository_check/dispatch_worker_spec.rb4
-rw-r--r--spec/workers/update_project_statistics_worker_spec.rb2
-rw-r--r--vendor/ingress/values.yaml6
-rw-r--r--vendor/jupyter/values.yaml3
-rw-r--r--vendor/licenses.csv1
-rw-r--r--vendor/prometheus/values.yaml3
-rw-r--r--vendor/runner/values.yaml1
-rw-r--r--yarn.lock2188
5562 files changed, 261788 insertions, 49750 deletions
diff --git a/.dockerignore b/.dockerignore
index d5568619169..d20c733313d 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -6,6 +6,7 @@
# - ./config/initializers/0_inject_enterprise_edition_module.rb
# - ./ee/app/models/license.rb
# - ./lib/gitlab.rb
+# - ./lib/gitlab/utils.rb
# - ./qa/
# - ./INSTALLATION_TYPE
# - ./VERSION
@@ -49,7 +50,6 @@
/lib/flowdock/
/lib/generators/
/lib/gitaly/
-/lib/gitlab/
/lib/api/
/lib/token/
/lib/mattermost/
diff --git a/.eslintrc.yml b/.eslintrc.yml
index 70a71baa590..e131d4c07d1 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -1,5 +1,6 @@
extends:
- '@gitlab'
+ - plugin:promise/recommended
globals:
__webpack_public_path__: true
gl: false
@@ -10,6 +11,7 @@ plugins:
- import
- "@gitlab/i18n"
- "@gitlab/vue-i18n"
+ - no-jquery
settings:
import/resolver:
webpack:
@@ -36,6 +38,13 @@ rules:
vue/no-use-v-if-with-v-for: off
vue/no-v-html: off
vue/use-v-on-exact: off
+ no-jquery/no-ajax: error
+ no-jquery/no-ajax-events: error
+ no-jquery/no-load: error
+ no-jquery/no-load-shorthand: error
+ no-jquery/no-serialize: error
+ promise/always-return: off
+ promise/no-callback-in-promise: off
overrides:
files:
- '**/spec/**/*'
diff --git a/.gitattributes b/.gitattributes
index 0b87a97df9c..55c422f0f8c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,2 @@
VERSION merge=ours
Dangerfile gitlab-language=ruby
-db/schema.rb merge=merge_db_schema
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 2e88b7aa0a9..793a52e359d 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,3 +1,3 @@
We’re closing our issue tracker on GitHub so we can focus on the GitLab.com project and respond to issues more quickly.
-We encourage you to open an issue on the [GitLab.com issue tracker](https://gitlab.com/gitlab-org/gitlab-ce/issues). You can log into GitLab.com using your GitHub account.
+We encourage you to open an issue on the [GitLab.com issue tracker](https://gitlab.com/gitlab-org/gitlab/issues). You can log into GitLab.com using your GitHub account.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index c3b04026440..40984c451c4 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,3 +1,3 @@
Thank you for taking the time to contribute back to GitLab!
-Please open a merge request [on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests), we look forward to reviewing your contribution! You can log into GitLab.com using your GitHub account.
+Please open a merge request [on GitLab.com](https://gitlab.com/gitlab-org/gitlab/merge_requests), we look forward to reviewing your contribution! You can log into GitLab.com using your GitHub account.
diff --git a/.gitignore b/.gitignore
index 7310c04d117..65befc20963 100644
--- a/.gitignore
+++ b/.gitignore
@@ -81,3 +81,4 @@ package-lock.json
jsdoc/
**/tmp/rubocop_cache/**
.overcommit.yml
+.projections.json
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6c10c4853c4..630c82bcc5c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33"
+image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33"
stages:
- prepare
@@ -8,17 +8,17 @@ stages:
- review
- qa
- post-test
+ - notification
- pages
variables:
RAILS_ENV: "test"
NODE_ENV: "test"
SIMPLECOV: "true"
- GIT_DEPTH: "20"
+ GIT_DEPTH: "50"
GIT_SUBMODULE_STRATEGY: "none"
GET_SOURCES_ATTEMPTS: "3"
- KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master.json
- EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master-ee.json
+ KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/report-master.json
FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json
BUILD_ASSETS_IMAGE: "false"
ES_JAVA_OPTS: "-Xms256m -Xmx256m"
@@ -28,11 +28,12 @@ after_script:
- date
include:
- - local: .gitlab/ci/global.gitlab-ci.yml
- local: .gitlab/ci/cng.gitlab-ci.yml
- local: .gitlab/ci/docs.gitlab-ci.yml
- local: .gitlab/ci/frontend.gitlab-ci.yml
+ - local: .gitlab/ci/global.gitlab-ci.yml
- local: .gitlab/ci/memory.gitlab-ci.yml
+ - local: .gitlab/ci/notifications.gitlab-ci.yml
- local: .gitlab/ci/pages.gitlab-ci.yml
- local: .gitlab/ci/qa.gitlab-ci.yml
- local: .gitlab/ci/reports.gitlab-ci.yml
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index 0f2dd081e9e..a02740373da 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -6,8 +6,8 @@
/doc/ @axil @marcia @eread @mikelewis
# Frontend maintainers should see everything in `app/assets/`
-app/assets/ @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter
-*.scss @annabeldunstone @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter
+app/assets/ @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter @wortschi @ntepluhina
+*.scss @annabeldunstone @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter @wortschi @ntepluhina
# Database maintainers should review changes in `db/`
db/ @gitlab-org/maintainers/database
@@ -23,6 +23,13 @@ lib/gitlab/github_import/ @gitlab-org/maintainers/database
/lib/gitlab/auth/ldap/ @dblessing @mkozono
/lib/gitlab/ci/templates/ @nolith @zj
/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @DylanGriffith @mayra-cabrera @tkuah
-/lib/gitlab/ci/templates/Security/ @plafoucriere @gonzoyumo @twoodham
+/lib/gitlab/ci/templates/Security/ @plafoucriere @gonzoyumo @twoodham @sethgitlab
/ee/app/models/project_alias.rb @patrickbajao
/ee/lib/api/project_aliases.rb @patrickbajao
+
+# Engineering Productivity owned files
+/.gitlab-ci.yml @gl-quality/eng-prod
+/.gitlab/ci/ @gl-quality/eng-prod
+Dangerfile @gl-quality/eng-prod
+/danger/ @gl-quality/eng-prod
+/scripts/ @gl-quality/eng-prod
diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml
index 87023da3c24..14eeebb9db9 100644
--- a/.gitlab/ci/docs.gitlab-ci.yml
+++ b/.gitlab/ci/docs.gitlab-ci.yml
@@ -14,10 +14,10 @@
variables:
GIT_STRATEGY: none
environment:
- name: review-docs/$CI_COMMIT_REF_SLUG
+ name: review-docs/$DOCS_GITLAB_REPO_SUFFIX-$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
- url: http://$CI_ENVIRONMENT_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX
+ url: http://docs-preview-$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX
on_stop: review-docs-cleanup
before_script:
# We don't clone the repo by using GIT_STRATEGY: none and only download the
@@ -39,7 +39,7 @@ review-docs-deploy:
review-docs-cleanup:
extends: .review-docs
environment:
- name: review-docs/$CI_COMMIT_REF_SLUG
+ name: review-docs/$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID
action: stop
script:
- ./trigger-build-docs cleanup
@@ -67,3 +67,19 @@ docs lint:
- bundle exec nanoc check internal_links
# Check the internal anchor links
- bundle exec nanoc check internal_anchors
+
+graphql-docs-verify:
+ extends:
+ - .only-ee
+ - .default-tags
+ - .default-retry
+ - .default-cache
+ - .default-only
+ - .default-before_script
+ - .only-graphql-changes
+ variables:
+ SETUP_DB: "false"
+ stage: test
+ needs: ["setup-test-env"]
+ script:
+ - bundle exec rake gitlab:graphql:check_docs
diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml
index 2f53c6e3fcf..2f457bc0ee2 100644
--- a/.gitlab/ci/frontend.gitlab-ci.yml
+++ b/.gitlab/ci/frontend.gitlab-ci.yml
@@ -13,7 +13,7 @@
- .default-before_script
- .assets-compile-cache
- .only-code-qa-changes
- image: dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-git-2.22-chrome-73.0-node-12.x-yarn-1.16-graphicsmagick-1.3.33-docker-18.06.1
+ image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.3-git-2.22-chrome-73.0-node-12.x-yarn-1.16-graphicsmagick-1.3.33-docker-18.06.1
stage: test
dependencies: ["setup-test-env"]
needs: ["setup-test-env"]
@@ -47,13 +47,13 @@
- rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here
only:
variables:
- - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org"
+ - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ # Matches the gitlab-org group and its subgroups
- $CI_SERVER_HOST == "dev.gitlab.org"
tags:
- gitlab-org
- docker
-gitlab:assets:compile:
+gitlab:assets:compile pull-push-cache:
extends: .gitlab:assets:compile-metadata
only:
refs:
@@ -63,9 +63,6 @@ gitlab:assets:compile:
gitlab:assets:compile pull-cache:
extends: .gitlab:assets:compile-metadata
- except:
- refs:
- - master
cache:
policy: pull
@@ -77,7 +74,7 @@ gitlab:assets:compile pull-cache:
- .default-before_script
- .assets-compile-cache
- .only-code-qa-changes
- - .use-pg
+ - .use-pg9
stage: prepare
script:
- node --version
@@ -89,14 +86,14 @@ gitlab:assets:compile pull-cache:
# we override the max_old_space_size to prevent OOM errors
NODE_OPTIONS: --max_old_space_size=3584
cache:
- key: "assets-compile:test:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v6"
+ key: "assets-compile:v7"
artifacts:
expire_in: 7d
paths:
- node_modules
- public/assets
-compile-assets:
+compile-assets pull-push-cache:
extends: .compile-assets-metadata
only:
refs:
@@ -104,13 +101,25 @@ compile-assets:
cache:
policy: pull-push
-compile-assets pull-cache:
- extends: .compile-assets-metadata
- except:
+compile-assets pull-push-cache foss:
+ extends: [".compile-assets-metadata", ".only-ee-as-if-foss"]
+ only:
refs:
- master
cache:
+ policy: pull-push
+ key: "assets-compile:v7:foss"
+
+compile-assets pull-cache:
+ extends: .compile-assets-metadata
+ cache:
+ policy: pull
+
+compile-assets pull-cache foss:
+ extends: [".compile-assets-metadata", ".only-ee-as-if-foss"]
+ cache:
policy: pull
+ key: "assets-compile:v7:foss"
.only-code-frontend-job-base:
extends:
@@ -120,10 +129,12 @@ compile-assets pull-cache:
- .default-only
- .default-before_script
- .only-code-changes
- - .use-pg
- dependencies: ["compile-assets", "compile-assets pull-cache", "setup-test-env"]
+ - .use-pg9
+ stage: test
+ needs: ["setup-test-env", "compile-assets pull-cache"]
+ dependencies: ["setup-test-env", "compile-assets pull-cache"]
-karma:
+.karma-base:
extends: .only-code-frontend-job-base
variables:
# we override the max_old_space_size to prevent OOM errors
@@ -134,6 +145,9 @@ karma:
- scripts/gitaly-test-spawn
- date
- bundle exec rake karma
+
+karma:
+ extends: .karma-base
coverage: '/^Statements *: (\d+\.\d+%)/'
artifacts:
name: coverage-javascript
@@ -146,7 +160,12 @@ karma:
reports:
junit: junit_karma.xml
-jest:
+karma-foss:
+ extends:
+ - .karma-base
+ - .only-ee-as-if-foss
+
+.jest-base:
extends: .only-code-frontend-job-base
script:
- scripts/gitaly-test-spawn
@@ -154,6 +173,14 @@ jest:
- bundle exec rake frontend:fixtures
- date
- yarn jest --ci --coverage
+ cache:
+ key: jest
+ paths:
+ - tmp/jest/jest/
+ policy: pull-push
+
+jest:
+ extends: .jest-base
artifacts:
name: coverage-frontend
expire_in: 31d
@@ -164,34 +191,13 @@ jest:
- tmp/tests/frontend/
reports:
junit: junit_jest.xml
- cache:
- key: jest
- paths:
- - tmp/jest/jest/
- policy: pull-push
-.qa-job-base:
+jest-foss:
extends:
- - .default-tags
- - .default-retry
- - .default-cache
- - .default-only
- - .only-code-qa-changes
- dependencies: []
- stage: test
- before_script:
- - cd qa/
- - bundle install
-
-qa:internal:
- extends: .qa-job-base
- script:
- - bundle exec rspec
-
-qa:selectors:
- extends: .qa-job-base
- script:
- - bundle exec bin/qa Test::Sanity::Selectors
+ - .jest-base
+ - .only-ee-as-if-foss
+ cache:
+ policy: pull
.qa-frontend-node:
extends:
@@ -200,6 +206,7 @@ qa:selectors:
- .default-cache
- .default-only
- .only-code-changes
+ stage: test
dependencies: []
cache:
key: "$CI_JOB_NAME"
@@ -232,7 +239,9 @@ webpack-dev-server:
- .default-cache
- .default-only
- .only-code-changes
- dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"]
+ stage: test
+ needs: ["setup-test-env", "compile-assets pull-cache"]
+ dependencies: ["setup-test-env", "compile-assets pull-cache"]
variables:
WEBPACK_MEMORY_TEST: "true"
script:
diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml
index 94d7d2cdaa4..fc9b00b5d3c 100644
--- a/.gitlab/ci/global.gitlab-ci.yml
+++ b/.gitlab/ci/global.gitlab-ci.yml
@@ -13,6 +13,8 @@
.default-before_script:
before_script:
- date
+ - export GOPATH=$CI_PROJECT_DIR/.go
+ - mkdir -p $GOPATH
- source scripts/utils.sh
- source scripts/prepare_build.sh
- date
@@ -22,6 +24,7 @@
cache:
key: "debian-stretch-ruby-2.6.3-node-12.x"
paths:
+ - .go/pkg/mod
- vendor/ruby
- .yarn-cache/
- vendor/gitaly-ruby
@@ -33,6 +36,7 @@
- master
- /^[\d-]+-stable(-ee)?$/
- /^\d+-\d+-auto-deploy-\d+$/
+ - /^security\//
- merge_requests
- tags
@@ -51,7 +55,7 @@
- "{babel.config,jest.config}.js"
- "config.ru"
- "{package.json,yarn.lock}"
- - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,public,rubocop,scripts,spec,symbol,vendor}/**/*"
+ - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,locale,public,rubocop,scripts,spec,symbol,vendor}/**/*"
- "doc/README.md" # Some RSpec test rely on this file
.only-qa-changes:
@@ -67,6 +71,12 @@
- "doc/**/*"
- ".markdownlint.json"
+.only-graphql-changes:
+ only:
+ changes:
+ - "{,ee/}app/graphql/**/*"
+ - "{,ee/}lib/gitlab/graphql/**/*"
+
.only-code-qa-changes:
only:
changes:
@@ -82,7 +92,7 @@
- "{babel.config,jest.config}.js"
- "config.ru"
- "{package.json,yarn.lock}"
- - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,public,rubocop,scripts,spec,symbol,vendor}/**/*"
+ - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,locale,public,rubocop,scripts,spec,symbol,vendor}/**/*"
- "doc/README.md" # Some RSpec test rely on this file
- ".dockerignore"
- "qa/**/*"
@@ -96,30 +106,57 @@
refs:
- master
- /^\d+-\d+-auto-deploy-\d+$/
+ - /^[\d-]+-stable(-ee)?$/
.only-review-schedules:
only:
refs:
- schedules
variables:
- - $REVIEW_APP_CLEANUP && $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org"
+ - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org"
kubernetes: active
-.use-pg:
+.only-canonical-schedules:
+ only:
+ refs:
+ - schedules@gitlab-org/gitlab
+ - schedules@gitlab-org/gitlab-foss
+
+.use-pg9:
+ services:
+ - name: postgres:9.6
+ command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
+ - name: redis:alpine
+
+.use-pg10:
+ image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33"
services:
- - name: postgres:9.6.14
+ - name: postgres:10.9
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
- name: redis:alpine
-.use-pg-10:
- image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33"
+.use-pg9-ee:
+ services:
+ - name: postgres:9.6
+ command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
+ - name: redis:alpine
+ - name: docker.elastic.co/elasticsearch/elasticsearch:5.6.12
+
+.use-pg10-ee:
+ image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33"
services:
- name: postgres:10.9
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
- name: redis:alpine
+ - name: docker.elastic.co/elasticsearch/elasticsearch:5.6.12
.only-ee:
only:
variables:
- - $CI_PROJECT_NAME == "gitlab-ee"
- - $CI_PROJECT_NAME == "gitlab" # New name of gitlab-ee after the single codebase migration
+ - $CI_PROJECT_NAME == "gitlab"
+ - $CI_PROJECT_NAME == "gitlab-ee" # Support former project name for forks/mirrors
+
+.only-ee-as-if-foss:
+ extends: .only-ee
+ variables:
+ FOSS_ONLY: '1'
diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml
index d990c7eefa2..93bf87b24b2 100644
--- a/.gitlab/ci/memory.gitlab-ci.yml
+++ b/.gitlab/ci/memory.gitlab-ci.yml
@@ -36,7 +36,7 @@ memory-static:
memory-on-boot:
extends:
- .only-code-memory-job-base
- - .use-pg-10
+ - .use-pg10
variables:
NODE_ENV: "production"
RAILS_ENV: "production"
diff --git a/.gitlab/ci/notifications.gitlab-ci.yml b/.gitlab/ci/notifications.gitlab-ci.yml
new file mode 100644
index 00000000000..8e00ba022d0
--- /dev/null
+++ b/.gitlab/ci/notifications.gitlab-ci.yml
@@ -0,0 +1,29 @@
+.notify:
+ image: alpine
+ stage: notification
+ dependencies: []
+ cache: {}
+ before_script:
+ - apk update && apk add git curl bash
+
+schedule:package-and-qa:notify-success:
+ extends:
+ - .only-canonical-schedules
+ - .notify
+ variables:
+ COMMIT_NOTES_URL: "https://$CI_SERVER_HOST/$CI_PROJECT_PATH/commit/$CI_COMMIT_SHA#notes-list"
+ script:
+ - 'scripts/notify-slack qa-master ":tada: Scheduled QA against master passed! :tada: See $CI_PIPELINE_URL. For downstream pipelines, see $COMMIT_NOTES_URL" ci_passing'
+ needs: ["schedule:package-and-qa"]
+ when: on_success
+
+schedule:package-and-qa:notify-failure:
+ extends:
+ - .only-canonical-schedules
+ - .notify
+ variables:
+ COMMIT_NOTES_URL: "https://$CI_SERVER_HOST/$CI_PROJECT_PATH/commit/$CI_COMMIT_SHA#notes-list"
+ script:
+ - 'scripts/notify-slack qa-master ":skull_and_crossbones: Scheduled QA against master failed! :skull_and_crossbones: See $CI_PIPELINE_URL. For downstream pipelines, see $COMMIT_NOTES_URL" ci_failing'
+ needs: ["schedule:package-and-qa"]
+ when: on_failure
diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml
index a59b84fe1cf..a30772d5664 100644
--- a/.gitlab/ci/pages.gitlab-ci.yml
+++ b/.gitlab/ci/pages.gitlab-ci.yml
@@ -11,7 +11,7 @@ pages:
variables:
- $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org"
stage: pages
- dependencies: ["coverage", "karma", "gitlab:assets:compile"]
+ dependencies: ["coverage", "karma", "gitlab:assets:compile pull-cache"]
script:
- mv public/ .public/
- mkdir public/
diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml
index 013af3d61a4..1194948a76f 100644
--- a/.gitlab/ci/qa.gitlab-ci.yml
+++ b/.gitlab/ci/qa.gitlab-ci.yml
@@ -1,10 +1,40 @@
+.qa-job-base:
+ extends:
+ - .default-tags
+ - .default-retry
+ - .default-only
+ - .only-code-qa-changes
+ stage: test
+ dependencies: []
+ cache:
+ key: "qa-framework-jobs:v1"
+ paths:
+ - vendor/ruby
+ before_script:
+ - cd qa/
+ - bundle install --clean --jobs=$(nproc) --path=vendor --retry=3 --quiet
+ - bundle check
+
+qa:internal:
+ extends: .qa-job-base
+ script:
+ - bundle exec rspec
+
+qa:selectors:
+ extends: .qa-job-base
+ script:
+ - bundle exec bin/qa Test::Sanity::Selectors
+
+qa:selectors-foss:
+ extends:
+ - qa:selectors
+ - .only-ee-as-if-foss
+
.package-and-qa-base:
extends: .default-only
image: ruby:2.6-alpine
stage: qa
dependencies: []
- variables:
- GIT_DEPTH: "1"
retry: 0
script:
- source scripts/utils.sh
@@ -12,7 +42,7 @@
- ./scripts/trigger-build omnibus
only:
variables:
- - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org"
+ - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ # Matches the gitlab-org group or its subgroups
package-and-qa-manual:
extends:
@@ -21,20 +51,10 @@ package-and-qa-manual:
except:
refs:
- master
+ - /^\d+-\d+-auto-deploy-\d+$/
when: manual
needs: ["build-qa-image", "gitlab:assets:compile pull-cache"]
-package-and-qa-manual:master:
- extends:
- - .package-and-qa-base
- - .only-code-qa-changes
- only:
- refs:
- - master@gitlab-org/gitlab-foss
- - master@gitlab-org/gitlab
- when: manual
- needs: ["build-qa-image", "gitlab:assets:compile"]
-
package-and-qa:
extends:
- .package-and-qa-base
@@ -42,5 +62,13 @@ package-and-qa:
except:
refs:
- master
+ - /^\d+-\d+-auto-deploy-\d+$/
needs: ["build-qa-image", "gitlab:assets:compile pull-cache"]
allow_failure: true
+
+schedule:package-and-qa:
+ extends:
+ - .package-and-qa-base
+ - .only-code-qa-changes
+ - .only-canonical-schedules
+ needs: ["build-qa-image", "gitlab:assets:compile pull-cache"]
diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml
index 04e81051031..bf478b68765 100644
--- a/.gitlab/ci/rails.gitlab-ci.yml
+++ b/.gitlab/ci/rails.gitlab-ci.yml
@@ -33,31 +33,31 @@
- .default-before_script
- .only-code-qa-changes
+setup-test-env:
+ extends:
+ - .only-code-qa-rails-job-base
+ - .use-pg9
+ stage: prepare
+ script:
+ - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
+ - scripts/gitaly-test-build # Do not use 'bundle exec' here
+ artifacts:
+ expire_in: 7d
+ paths:
+ - tmp/tests
+ - config/secrets.yml
+ - vendor/gitaly-ruby
+ cache:
+ policy: pull-push
+
.rspec-base:
extends: .only-code-rails-job-base
stage: test
+ needs: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache"]
+ dependencies: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache"]
script:
- - JOB_NAME=( $CI_JOB_NAME )
- - TEST_TOOL=${JOB_NAME[0]}
- - TEST_LEVEL=${JOB_NAME[1]}
- - DATABASE=${JOB_NAME[2]}
- - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
- - export KNAPSACK_GENERATE_REPORT=true KNAPSACK_LOG_LEVEL=debug KNAPSACK_TEST_DIR=spec
- - export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH}
- - export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
- - export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
- - export FLAKY_RSPEC_GENERATE_REPORT=true
- - export CACHE_CLASSES=true
- - cp ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
- - '[[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}'
- - '[[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}'
- - scripts/gitaly-test-spawn
- - date
- - 'export KNAPSACK_TEST_FILE_PATTERN=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new.pattern(:${TEST_LEVEL})")'
- - mkdir -p tmp/memory_test
- - export MEMORY_TEST_PATH="tmp/memory_test/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv"
- - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag level:${TEST_LEVEL} --tag ~geo"
- - date
+ - source scripts/rspec_helpers.sh
+ - rspec_paralellized_job "--tag ~quarantine --tag ~geo"
artifacts:
expire_in: 31d
when: always
@@ -71,79 +71,172 @@
reports:
junit: junit_rspec.xml
-.rspec-base-pg:
+.rspec-base-foss:
+ extends: [".rspec-base", ".only-ee-as-if-foss"]
+ needs: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache foss"]
+ dependencies: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache foss"]
+
+.rspec-base-pg9:
extends:
- .rspec-base
- - .use-pg
+ - .use-pg9
-.rspec-base-pg-10:
+.rspec-base-pg9-foss:
extends:
- - .rspec-base
- - .use-pg-10
+ - .rspec-base-foss
+ - .use-pg9
-setup-test-env:
+.rspec-base-pg10:
extends:
- - .only-code-qa-rails-job-base
- - .use-pg
- stage: prepare
- script:
- - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init'
- - scripts/gitaly-test-build # Do not use 'bundle exec' here
- artifacts:
- expire_in: 7d
- paths:
- - tmp/tests
- - config/secrets.yml
- - vendor/gitaly-ruby
+ - .rspec-base
+ - .use-pg10
+ - .only-master
+
+rspec unit pg9:
+ extends: .rspec-base-pg9
+ parallel: 20
-rspec unit pg:
- extends: .rspec-base-pg
+rspec unit pg9-foss:
+ extends: .rspec-base-pg9-foss
parallel: 20
-rspec integration pg:
- extends: .rspec-base-pg
+rspec integration pg9:
+ extends: .rspec-base-pg9
+ parallel: 6
+
+rspec integration pg9-foss:
+ extends: .rspec-base-pg9-foss
parallel: 6
-rspec system pg:
- extends: .rspec-base-pg
+rspec system pg9:
+ extends: .rspec-base-pg9
parallel: 24
-rspec unit pg-10:
+rspec system pg9-foss:
+ extends: .rspec-base-pg9-foss
+ parallel: 24
+
+rspec unit pg10:
+ extends: .rspec-base-pg10
+ parallel: 20
+
+rspec integration pg10:
+ extends: .rspec-base-pg10
+ parallel: 6
+
+rspec system pg10:
+ extends: .rspec-base-pg10
+ parallel: 24
+
+.rspec-ee-base-pg9:
+ extends:
+ - .rspec-base
+ - .only-ee
+ - .use-pg9-ee
+
+.rspec-ee-base-pg10:
extends:
- - .rspec-base-pg-10
+ - .rspec-base
+ - .only-ee
+ - .use-pg10-ee
+
+rspec-ee unit pg9:
+ extends: .rspec-ee-base-pg9
+ parallel: 7
+
+rspec-ee integration pg9:
+ extends: .rspec-ee-base-pg9
+ parallel: 3
+
+rspec-ee system pg9:
+ extends: .rspec-ee-base-pg9
+ parallel: 5
+
+rspec-ee unit pg10:
+ extends:
+ - .rspec-ee-base-pg10
- .only-master
- parallel: 20
+ parallel: 7
-rspec integration pg-10:
+rspec-ee integration pg10:
extends:
- - .rspec-base-pg-10
+ - .rspec-ee-base-pg10
- .only-master
- parallel: 6
+ parallel: 3
-rspec system pg-10:
+rspec-ee system pg10:
extends:
- - .rspec-base-pg-10
+ - .rspec-ee-base-pg10
- .only-master
- parallel: 24
+ parallel: 5
-rspec-fast-spec-helper:
- extends: .rspec-base-pg
+.rspec-ee-base-geo:
+ extends:
+ - .rspec-base
+ - .only-ee
script:
- - bundle exec rspec spec/fast_spec_helper.rb
+ - source scripts/rspec_helpers.sh
+ - scripts/prepare_postgres_fdw.sh
+ - rspec_paralellized_job "--tag ~quarantine --tag geo"
+
+.rspec-ee-base-geo-pg9:
+ extends:
+ - .rspec-ee-base-geo
+ - .use-pg9-ee
-rspec quarantine pg:
+.rspec-ee-base-geo-pg10:
extends:
- - .rspec-base-pg
+ - .rspec-ee-base-geo
+ - .use-pg10-ee
+
+rspec-ee unit pg9 geo:
+ extends: .rspec-ee-base-geo-pg9
+ parallel: 2
+
+rspec-ee integration pg9 geo:
+ extends: .rspec-ee-base-geo-pg9
+
+rspec-ee system pg9 geo:
+ extends: .rspec-ee-base-geo-pg9
+
+rspec-ee unit pg10 geo:
+ extends: .rspec-ee-base-geo-pg10
+ parallel: 2
+
+rspec-ee integration pg10 geo:
+ extends: .rspec-ee-base-geo-pg10
+
+rspec-ee system pg10 geo:
+ extends: .rspec-ee-base-geo-pg10
+
+rspec quarantine pg9:
+ extends:
+ - .rspec-base-pg9
- .only-master
+ variables:
+ RSPEC_OPTS: "--tag quarantine -- spec/"
script:
- - export NO_KNAPSACK=1 CACHE_CLASSES=true
- - scripts/gitaly-test-spawn
- - bin/rspec --color --format documentation --tag quarantine -- spec/
+ - source scripts/rspec_helpers.sh
+ - rspec_simple_job "${RSPEC_OPTS}"
allow_failure: true
+rspec-ee quarantine pg9:
+ extends:
+ - rspec quarantine pg9
+ - .only-ee
+ variables:
+ RSPEC_OPTS: "--tag quarantine -- ee/spec/"
+
+rspec fast_spec_helper:
+ extends: .rspec-base-pg9
+ script:
+ - bin/rspec spec/fast_spec_helper.rb
+
static-analysis:
extends: .only-code-qa-rails-job-base
- dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"]
+ stage: test
+ needs: ["setup-test-env", "compile-assets pull-cache"]
+ dependencies: ["setup-test-env", "compile-assets pull-cache"]
variables:
SETUP_DB: "false"
script:
@@ -166,16 +259,16 @@ downtime_check:
variables:
- $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/
stage: test
- dependencies: ["setup-test-env"]
needs: ["setup-test-env"]
+ dependencies: ["setup-test-env"]
.db-job-base:
extends:
- .only-code-rails-job-base
- - .use-pg
+ - .use-pg9
stage: test
- dependencies: ["setup-test-env"]
needs: ["setup-test-env"]
+ dependencies: ["setup-test-env"]
# DB migration, rollback, and seed jobs
db:migrate:reset:
@@ -256,108 +349,6 @@ coverage:
- coverage/assets/
- tmp/memory_test/
-## EE-specific content
-.rspec-base-ee:
- extends:
- - .rspec-base
- - .only-ee
- script:
- - JOB_NAME=( $CI_JOB_NAME )
- - TEST_TOOL=${JOB_NAME[0]}
- - TEST_LEVEL=${JOB_NAME[1]}
- - DATABASE=${JOB_NAME[2]}
- - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_ee_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
- - export KNAPSACK_GENERATE_REPORT=true KNAPSACK_LOG_LEVEL=debug KNAPSACK_TEST_DIR=spec
- - export CACHE_CLASSES=true
- - cp ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
- - scripts/gitaly-test-spawn
- - date
- - 'export KNAPSACK_TEST_FILE_PATTERN=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new(%(ee/)).pattern(:${TEST_LEVEL})")'
- - mkdir -p tmp/memory_test
- - export MEMORY_TEST_PATH="tmp/memory_test/ee_${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv"
- - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag level:${TEST_LEVEL} --tag ~geo"
- - date
-
-.rspec-base-pg-ee:
- extends: .rspec-base-ee
- services:
- - name: postgres:9.6
- command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
- - name: redis:alpine
- - name: docker.elastic.co/elasticsearch/elasticsearch:5.6.12
-
-rspec unit pg ee:
- extends: .rspec-base-pg-ee
- parallel: 7
-
-rspec integration pg ee:
- extends: .rspec-base-pg-ee
- parallel: 3
-
-rspec system pg ee:
- extends: .rspec-base-pg-ee
- parallel: 5
-
-.rspec-base-geo:
- extends: .rspec-base-ee
- parallel: 3
- script:
- - JOB_NAME=( $CI_JOB_NAME )
- - TEST_TOOL=${JOB_NAME[0]}
- - TEST_LEVEL=${JOB_NAME[1]}
- - DATABASE=${JOB_NAME[2]}
- - export KNAPSACK_TEST_FILE_PATTERN="ee/spec/**{,/*/**}/*_spec.rb" KNAPSACK_GENERATE_REPORT=true CACHE_CLASSES=true
- - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
- - cp ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
- - source scripts/prepare_postgres_fdw.sh
- - scripts/gitaly-test-spawn
- - mkdir -p tmp/memory_test
- - export MEMORY_TEST_PATH="tmp/memory_test/ee_${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv"
- - knapsack rspec "-Ispec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag geo"
-
-rspec geo pg ee:
- extends:
- - .rspec-base-geo
- - .use-pg
- except:
- variables:
- - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/
-
-rspec geo pg-10 ee:
- extends:
- - .rspec-base-geo
- - .use-pg-10
- except:
- variables:
- - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/
-
-quick-rspec geo pg ee:
- extends:
- - .rspec-base-geo
- - .use-pg
- stage: quick-test
- only:
- variables:
- - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/
-
-quick-rspec geo pg-10 ee:
- extends:
- - .rspec-base-geo
- - .use-pg-10
- stage: quick-test
- only:
- variables:
- - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/
-
-rspec quarantine pg ee:
- extends:
- - rspec quarantine pg
- - .only-ee
- script:
- - export NO_KNAPSACK=1 CACHE_CLASSES=true
- - scripts/gitaly-test-spawn
- - bin/rspec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag quarantine -- ee/spec/
-
db:rollback geo:
extends:
- db:rollback
@@ -365,5 +356,3 @@ db:rollback geo:
script:
- bundle exec rake geo:db:migrate VERSION=20170627195211
- bundle exec rake geo:db:migrate
-
-## END of EE-specific content
diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml
index 38da73034d5..16c3f0e4f8c 100644
--- a/.gitlab/ci/reports.gitlab-ci.yml
+++ b/.gitlab/ci/reports.gitlab-ci.yml
@@ -44,6 +44,8 @@ code_quality:
# We need to duplicate this job's definition because it seems it's impossible to
# override an included `only.refs`.
# See https://gitlab.com/gitlab-org/gitlab/issues/31371.
+# Once https://gitlab.com/gitlab-org/gitlab/merge_requests/16487 will be deployed
+# to GitLab.com, we should be able to use the template and set SAST_DISABLE_DIND: "true".
sast:
extends:
- .default-retry
@@ -196,6 +198,7 @@ dast:
- .only-code-qa-changes
- .only-review
stage: qa
+ needs: ["review-deploy"]
dependencies: ["review-deploy"]
before_script:
- export DAST_WEBSITE="$(cat review_app_url.txt)"
diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml
index c7b79dac9dd..e041c6a8a5d 100644
--- a/.gitlab/ci/review.gitlab-ci.yml
+++ b/.gitlab/ci/review.gitlab-ci.yml
@@ -1,20 +1,14 @@
-.review-base:
- extends:
- - .default-tags
- - .default-retry
- - .default-only
- - .only-review
- - .only-code-qa-changes
- image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base
- dependencies: []
- before_script:
- - source scripts/utils.sh
+.except-deploys:
+ except:
+ refs:
+ - /^\d+-\d+-auto-deploy-\d+$/
.review-docker:
extends:
- .default-tags
- .default-retry
- .default-only
+ - .except-deploys
image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine
services:
- docker:19.03.0-dind
@@ -41,10 +35,31 @@ build-qa-image:
- echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY}
- time docker push ${QA_IMAGE}
+schedule:review-cleanup:
+ extends:
+ - .default-tags
+ - .default-retry
+ - .default-only
+ - .only-code-qa-changes
+ - .only-review-schedules
+ - .except-deploys
+ stage: prepare
+ image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base
+ allow_failure: true
+ environment:
+ name: review/auto-cleanup
+ action: stop
+ before_script:
+ - source scripts/utils.sh
+ - install_gitlab_gem
+ script:
+ - ruby -rrubygems scripts/review_apps/automated_cleanup.rb
+
.review-build-cng-base:
extends:
- .default-only
- .only-code-qa-changes
+ - .except-deploys
image: ruby:2.6-alpine
stage: review-prepare
before_script:
@@ -65,16 +80,23 @@ schedule:review-build-cng:
extends:
- .review-build-cng-base
- .only-review-schedules
- needs: ["gitlab:assets:compile"]
+ needs: ["gitlab:assets:compile pull-cache"]
.review-deploy-base:
- extends: .review-base
- allow_failure: true
+ extends:
+ - .default-tags
+ - .default-retry
+ - .default-only
+ - .only-code-qa-changes
+ - .except-deploys
stage: review
+ image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base
+ dependencies: []
+ allow_failure: true
variables:
HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}"
DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}"
- GITLAB_HELM_CHART_REF: "master"
+ GITLAB_HELM_CHART_REF: "v2.3.7"
GITLAB_EDITION: "ce"
environment:
name: review/${CI_COMMIT_REF_NAME}
@@ -90,13 +112,21 @@ schedule:review-build-cng:
- install_api_client_dependencies_with_apk
- source scripts/review_apps/review-apps.sh
script:
+ - date
- check_kube_domain
+ - date
- ensure_namespace
+ - date
- install_tiller
+ - date
- install_external_dns
+ - date
- download_chart
+ - date
- deploy || (display_deployment_debug && exit 1)
+ - date
- add_license
+ - date
artifacts:
paths: [review_app_url.txt]
expire_in: 2 days
@@ -105,6 +135,7 @@ schedule:review-build-cng:
review-deploy:
extends:
- .review-deploy-base
+ - .only-review
needs: ["review-build-cng"]
schedule:review-deploy:
@@ -148,6 +179,7 @@ review-cleanup-failed-deployment:
- .only-review
- .only-code-qa-changes
stage: qa
+ allow_failure: true
variables:
QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa"
QA_CAN_TEST_GIT_PROTOCOL_V2: "false"
@@ -158,6 +190,7 @@ review-cleanup-failed-deployment:
GITLAB_ADMIN_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}"
GITHUB_ACCESS_TOKEN: "${REVIEW_APPS_QA_GITHUB_ACCESS_TOKEN}"
EE_LICENSE: "${REVIEW_APPS_EE_LICENSE}"
+ needs: ["review-deploy"]
dependencies: ["review-deploy"]
artifacts:
paths:
@@ -176,53 +209,46 @@ review-cleanup-failed-deployment:
review-qa-smoke:
extends: .review-qa-base
- allow_failure: true
script:
- gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}"
review-qa-all:
extends: .review-qa-base
- allow_failure: true
when: manual
parallel: 5
script:
- - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/review-qa-all_master_report.json
+ - export KNAPSACK_REPORT_PATH=knapsack/master_report.json
- export KNAPSACK_TEST_FILE_PATTERN=qa/specs/features/**/*_spec.rb
- gitlab-qa Test::Instance::Any "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" -- --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml --format html --out tmp/rspec.htm --color --format documentation
-parallel-spec-reports:
+.review-performance-base:
extends:
- - .default-tags
- - .default-only
+ - .review-docker
- .only-code-qa-changes
- - .only-review
- image: ruby:2.6-alpine
- stage: post-test
- dependencies: ["review-qa-all"]
- variables:
- NEW_PARALLEL_SPECS_REPORT: qa/report-new.html
- BASE_ARTIFACT_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/file/qa/"
+ stage: qa
allow_failure: true
- when: manual
+ before_script:
+ - export CI_ENVIRONMENT_URL="$(cat review_app_url.txt)"
+ - echo "${CI_ENVIRONMENT_URL}"
+ - mkdir -p gitlab-exporter
+ - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js
+ - mkdir -p sitespeed-results
+ script:
+ - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "${CI_ENVIRONMENT_URL}"
+ after_script:
+ - mv sitespeed-results/data/performance.json performance.json
artifacts:
- when: always
paths:
- - qa/report-new.html
- - qa/gitlab-qa-run-*
+ - sitespeed-results/
reports:
- junit: qa/gitlab-qa-run-*/**/rspec-*.xml
- script:
- - apk add --update build-base libxml2-dev libxslt-dev && rm -rf /var/cache/apk/*
- - gem install nokogiri --no-document
- - cd qa/gitlab-qa-run-*/gitlab-*
- - ARTIFACT_DIRS=$(pwd |rev| awk -F / '{print $1,$2}' | rev | sed s_\ _/_)
- - cd -
- - '[[ -f $NEW_PARALLEL_SPECS_REPORT ]] || echo "{}" > ${NEW_PARALLEL_SPECS_REPORT}'
- - scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm
+ performance: performance.json
review-performance:
- extends: .review-qa-base
- allow_failure: true
+ extends:
+ - .review-performance-base
+ - .only-review
+ needs: ["review-deploy"]
+ dependencies: ["review-deploy"]
before_script:
- export CI_ENVIRONMENT_URL="$(cat review_app_url.txt)"
- echo "${CI_ENVIRONMENT_URL}"
@@ -241,24 +267,41 @@ review-performance:
schedule:review-performance:
extends:
- - review-performance
+ - .review-performance-base
- .only-review-schedules
+ needs: ["schedule:review-deploy"]
dependencies: ["schedule:review-deploy"]
-schedule:review-cleanup:
+parallel-spec-reports:
extends:
- - .review-base
- - .only-review-schedules
- stage: prepare
+ - .default-tags
+ - .default-only
+ - .only-code-qa-changes
+ - .only-review
+ - .except-deploys
+ image: ruby:2.6-alpine
+ stage: post-test
+ dependencies: ["review-qa-all"]
+ variables:
+ NEW_PARALLEL_SPECS_REPORT: qa/report-new.html
+ BASE_ARTIFACT_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/file/qa/"
allow_failure: true
- environment:
- name: review/auto-cleanup
- action: stop
- before_script:
- - source scripts/utils.sh
- - install_gitlab_gem
+ when: manual
+ artifacts:
+ when: always
+ paths:
+ - qa/report-new.html
+ - qa/gitlab-qa-run-*
+ reports:
+ junit: qa/gitlab-qa-run-*/**/rspec-*.xml
script:
- - ruby -rrubygems scripts/review_apps/automated_cleanup.rb
+ - apk add --update build-base libxml2-dev libxslt-dev && rm -rf /var/cache/apk/*
+ - gem install nokogiri --no-document
+ - cd qa/gitlab-qa-run-*/gitlab-*
+ - ARTIFACT_DIRS=$(pwd |rev| awk -F / '{print $1,$2}' | rev | sed s_\ _/_)
+ - cd -
+ - '[[ -f $NEW_PARALLEL_SPECS_REPORT ]] || echo "{}" > ${NEW_PARALLEL_SPECS_REPORT}'
+ - scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm
danger-review:
extends:
diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml
index 129913a9f2d..861f3f1af5b 100644
--- a/.gitlab/ci/setup.gitlab-ci.yml
+++ b/.gitlab/ci/setup.gitlab-ci.yml
@@ -43,5 +43,6 @@ no_ee_check:
- scripts/no-ee-check
only:
variables:
- - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAME == "gitlab-foss"
- - $CI_SERVER_HOST == "dev.gitlab.org" && $CI_PROJECT_NAME == "gitlabhq"
+ - $CI_PROJECT_NAME == "gitlab-foss"
+ - $CI_PROJECT_NAME == "gitlab-ce" # Support former project name for forks/mirrors
+ - $CI_PROJECT_NAME == "gitlabhq" # Support former project name for dev
diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml
index 5e2523e8a9c..6a7f3157d59 100644
--- a/.gitlab/ci/test-metadata.gitlab-ci.yml
+++ b/.gitlab/ci/test-metadata.gitlab-ci.yml
@@ -1,10 +1,16 @@
.tests-metadata-state:
extends:
- .default-only
+ - .only-code-changes
variables:
TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache"
before_script:
- source scripts/utils.sh
+ cache:
+ key: tests_metadata
+ paths:
+ - knapsack/
+ - rspec_flaky/
artifacts:
expire_in: 31d
paths:
@@ -13,55 +19,29 @@
- rspec_profiling/
retrieve-tests-metadata:
- extends:
- - .tests-metadata-state
- - .only-code-changes
+ extends: .tests-metadata-state
stage: prepare
cache:
- key: tests_metadata
policy: pull
script:
- - mkdir -p knapsack/${CI_PROJECT_NAME}/
- - wget -O $KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $KNAPSACK_RSPEC_SUITE_REPORT_PATH
- - '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}'
- - mkdir -p rspec_flaky/
- - mkdir -p rspec_profiling/
- - wget -O $FLAKY_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$FLAKY_RSPEC_SUITE_REPORT_PATH || rm $FLAKY_RSPEC_SUITE_REPORT_PATH
- - '[[ -f $FLAKY_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_SUITE_REPORT_PATH}'
- - '[[ ! -d "ee/" ]] || wget -O $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH'
- - '[[ ! -d "ee/" ]] || [[ -f $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH}'
+ - source scripts/rspec_helpers.sh
+ - retrieve_tests_metadata
update-tests-metadata:
- extends:
- - .tests-metadata-state
- - .only-code-changes
+ extends: .tests-metadata-state
stage: post-test
cache:
- key: tests_metadata
- paths:
- - knapsack/
- - rspec_flaky/
policy: push
script:
- retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document
- - echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}
- - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_node_*.json
- - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH'
- - '[[ ! -d "ee/" ]] || echo "{}" > ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH}'
- - '[[ ! -d "ee/" ]] || scripts/merge-reports ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_ee_*node_*.json'
- - '[[ ! -d "ee/" ]] || [[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH'
- - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json
- - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json
- - FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH}
- - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH'
- - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json
- - scripts/insert-rspec-profiling-data
+ - source scripts/rspec_helpers.sh
+ - update_tests_metadata
only:
refs:
- - master
+ - schedules
variables:
- - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org"
- - $CI_SERVER_HOST == "dev.gitlab.org"
+ # Only update the Knapsack metadata on GitLab.com/gitlab-org/gitlab
+ - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab"
flaky-examples-check:
extends:
diff --git a/.gitlab/issue_templates/Acceptance_Testing.md b/.gitlab/issue_templates/Acceptance_Testing.md
index f1fbb96ce61..5a6c35f28ad 100644
--- a/.gitlab/issue_templates/Acceptance_Testing.md
+++ b/.gitlab/issue_templates/Acceptance_Testing.md
@@ -25,7 +25,7 @@ Then leave running while monitoring and performing some testing through web, api
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
-- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg/?query=is%3Aunresolved)
+- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlab.net/gitlab/devgitlaborg/?query=is%3Aunresolved)
## 2. Staging Trial
@@ -41,7 +41,7 @@ Then leave running while monitoring for at least **15 minutes** while performing
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
-- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
+- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 4. Production Server Version Check
@@ -57,7 +57,7 @@ Then leave running while monitoring for at least **15 minutes** while performing
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
-- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
+- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 6. Low Impact Check
@@ -69,7 +69,7 @@ Then leave running while monitoring for at least **30 minutes** while performing
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
-- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
+- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 7. Mid Impact Trial
@@ -81,7 +81,7 @@ Then leave running while monitoring for at least **12 hours** while performing s
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
-- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
+- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 8. Full Impact Trial
@@ -93,7 +93,7 @@ Then leave running while monitoring for at least **1 week**.
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
-- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg/?query=is%3Aunresolved)
+- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlab.net/gitlab/devgitlaborg/?query=is%3Aunresolved)
#### Success?
diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md
index 3adea22b33a..0d9990657e4 100644
--- a/.gitlab/issue_templates/Bug.md
+++ b/.gitlab/issue_templates/Bug.md
@@ -2,17 +2,10 @@
Please read this!
Before opening a new issue, make sure to search for keywords in the issues
-filtered by the "regression" or "bug" label.
+filtered by the "regression" or "bug" label:
-For the Community Edition issue tracker:
-
-- https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=regression
-- https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=bug
-
-For the Enterprise Edition issue tracker:
-
-- https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name%5B%5D=regression
-- https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name%5B%5D=bug
+- https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=regression
+- https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=bug
and verify the issue you're about to submit isn't a duplicate.
--->
diff --git a/.gitlab/issue_templates/Coding style proposal.md b/.gitlab/issue_templates/Coding style proposal.md
index 1a3be44bea0..a969c9b72ee 100644
--- a/.gitlab/issue_templates/Coding style proposal.md
+++ b/.gitlab/issue_templates/Coding style proposal.md
@@ -11,6 +11,6 @@ Please describe the proposal and add a link to the source (for example, http://w
/label ~"development guidelines"
/label ~"Style decision"
-/label ~Documentation
+/label ~documentation
/cc @gitlab-org/maintainers/rails-backend
diff --git a/.gitlab/issue_templates/Doc Review.md b/.gitlab/issue_templates/Doc Review.md
index 14ab0c82d59..5b470ed7c75 100644
--- a/.gitlab/issue_templates/Doc Review.md
+++ b/.gitlab/issue_templates/Doc Review.md
@@ -8,13 +8,13 @@
## References
-Merged MR that introduced documentation requiring review:
+Merged MR that introduced documentation requiring review:
-Related issue(s):
+Related issue(s):
## Further Details
<!-- Any additional context, questions, or notes for the technical writer. -->
-/label ~Documentation ~docs-review
+/label ~documentation ~"Technical Writing"
diff --git a/.gitlab/issue_templates/Documentation.md b/.gitlab/issue_templates/Documentation.md
index f4070a44755..43ee7cd448b 100644
--- a/.gitlab/issue_templates/Documentation.md
+++ b/.gitlab/issue_templates/Documentation.md
@@ -2,23 +2,13 @@
* Use this issue template for suggesting new docs or updates to existing docs.
Note: Doc work as part of feature development is covered in the Feature Request template.
-
+
* For issues related to features of the docs.gitlab.com site, see
- https://gitlab.com/gitlab-org/gitlab-docs/issues/
+ https://gitlab.com/gitlab-org/gitlab-docs/issues/
* For information about documentation content and process, see
https://docs.gitlab.com/ee/development/documentation/ -->
-<!-- Type of issue -->
-
-<!-- Un-comment the line for the applicable doc issue type to add its label.
- Note that all text on that line is deleted upon issue creation. -->
-<!-- /label ~"docs:fix" - Correction or clarification needed. -->
-<!-- /label ~"docs:new" - New doc needed to cover a new topic or use case. -->
-<!-- /label ~"docs:improvement" - Improving an existing doc; e.g. adding a diagram, adding or rewording text, resolving redundancies, cross-linking, etc. -->
-<!-- /label ~"docs:revamp" - Review a page or group of pages in order to plan and implement major improvements/rewrites. -->
-<!-- /label ~"docs:other" - Anything else. -->
-
### Problem to solve
<!-- Include the following detail as necessary:
@@ -50,4 +40,4 @@
<!-- E.g. related GitLab issues/MRs -->
-/label ~Documentation
+/label ~documentation
diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md
index 0cac769bd55..e0de8fab4a7 100644
--- a/.gitlab/issue_templates/Feature Flag Roll Out.md
+++ b/.gitlab/issue_templates/Feature Flag Roll Out.md
@@ -24,7 +24,7 @@ Remove the `:feature_name` feature flag ...
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.
-- `gitlab-org/gitlab-ce`/`gitlab-org/gitlab-ee` projects
+- `gitlab-org/gitlab` project
- `gitlab-org`/`gitlab-com` groups
- ...
@@ -34,6 +34,7 @@ If applicable, any groups/projects that are happy to have this feature turned on
- [ ] Test on staging
- [ ] Ensure that documentation has been updated
- [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour
+- [ ] Coordinate a time to enable the flag with `#production` and `#g_delivery` on slack.
- [ ] Announce on the issue an estimated time this will be enabled on GitLab.com
- [ ] Enable on GitLab.com by running chatops command in `#production`
- [ ] Cross post chatops slack command to `#support_gitlab-com` and in your team channel
diff --git a/.gitlab/issue_templates/Problem_Validation.md b/.gitlab/issue_templates/Problem_Validation.md
index d2bab21eb06..bc1fd3374df 100644
--- a/.gitlab/issue_templates/Problem_Validation.md
+++ b/.gitlab/issue_templates/Problem_Validation.md
@@ -26,7 +26,7 @@
## Confidence
-<!-- How do we know this is a problem? Please provide and link to any supporting information (e.g. data, customer verbatims) and use this basis to provide a numerical assessment on our confidence level in this problem's severity:
+<!-- How do we know this is a problem? Please provide and link to any supporting information (e.g. data, customer verbatims) and use this basis to provide a numerical assessment on our confidence level in this problem's severity:
100% = High confidence
80% = Medium confidence
@@ -34,8 +34,8 @@
## Effort
-<!-- How much effort do we think it will be to solve this problem? Please include all counterparts (Product, UX, Engineering, etc) in your assessment and quantify the number of person-months needed to dedicate to the effort.
+<!-- How much effort do we think it will be to solve this problem? Please include all counterparts (Product, UX, Engineering, etc) in your assessment and quantify the number of person-months needed to dedicate to the effort.
For example, if the solution will take a product manager, designer, and engineer two weeks of effort - you may quantify this as 1.5 (based on 0.5 months x 3 people). -->
-/label ~"workflow::problem backlog"
+/label ~"workflow::validation backlog" ~devops:: ~category: ~group::
diff --git a/.gitlab/issue_templates/Security Release.md b/.gitlab/issue_templates/Security Release.md
index 3e60274623e..e6e5d731d96 100644
--- a/.gitlab/issue_templates/Security Release.md
+++ b/.gitlab/issue_templates/Security Release.md
@@ -18,13 +18,7 @@ Set the title to: `Security Release: 12.2.X, 12.1.X, and 12.0.X`
## Security Issues:
-### CE
-
-* {https://gitlab.com/gitlab-org/gitlab-ce/issues link}
-
-### EE
-
-* {https://gitlab.com/gitlab-org/gitlab-ee/issues link}
+* {https://gitlab.com/gitlab-org/gitlab/issues link}
## Security Issues in dev.gitlab.org:
diff --git a/.gitlab/issue_templates/Test plan.md b/.gitlab/issue_templates/Test plan.md
index f194adebc87..a202c0bf546 100644
--- a/.gitlab/issue_templates/Test plan.md
+++ b/.gitlab/issue_templates/Test plan.md
@@ -2,7 +2,7 @@
<!-- This issue outlines testing activities related to a particular issue or epic.
-[Here is an example test plan](https://gitlab.com/gitlab-org/gitlab-ce/issues/50353)
+[Here is an example test plan](https://gitlab.com/gitlab-org/gitlab-foss/issues/50353)
This and other comments should be removed as you write the plan -->
@@ -63,7 +63,7 @@ intersection of Components and Attributes.
Some features might be simple enough that they only involve one Component, while
more complex features could involve multiple or even all.
-Example (from https://gitlab.com/gitlab-org/gitlab-ce/issues/50353):
+Example (from https://gitlab.com/gitlab-org/gitlab-foss/issues/50353):
* Repository is
* Intuitive
* It's easy to select the desired file template
diff --git a/.gitlab/merge_request_templates/Change documentation location.md b/.gitlab/merge_request_templates/Change documentation location.md
index 7dc80a641c4..f18957fdaaa 100644
--- a/.gitlab/merge_request_templates/Change documentation location.md
+++ b/.gitlab/merge_request_templates/Change documentation location.md
@@ -10,12 +10,12 @@
<!-- Mention the issue(s) this MR closes or is related to -->
-Closes
+Closes
## Moving docs to a new location?
Read the guidelines:
-https://docs.gitlab.com/ce/development/documentation/index.html#changing-document-location
+https://docs.gitlab.com/ee/development/documentation/index.html#changing-document-location
- [ ] Make sure the old link is not removed and has its contents replaced with
a link to the new location.
@@ -29,4 +29,4 @@ https://docs.gitlab.com/ce/development/documentation/index.html#changing-documen
with the changes as well (https://docs.gitlab.com/ce/development/documentation/index.html#cherry-picking-from-ce-to-ee).
- [ ] Ping one of the technical writers for review.
-/label ~Documentation
+/label ~documentation
diff --git a/.gitlab/merge_request_templates/Database changes.md b/.gitlab/merge_request_templates/Database changes.md
index 2077997a0cb..89c8c7a5d07 100644
--- a/.gitlab/merge_request_templates/Database changes.md
+++ b/.gitlab/merge_request_templates/Database changes.md
@@ -24,6 +24,7 @@ When adding migrations:
- [ ] Added a `down` method so the migration can be reverted
- [ ] Added the output of the migration(s) to the MR body
- [ ] Added tests for the migration in `spec/migrations` if necessary (e.g. when migrating data)
+- [ ] Added rollback procedure. Include either a rollback procedure or description how to rollback changes
When adding or modifying queries to improve performance:
@@ -37,7 +38,7 @@ When adding foreign keys to existing tables:
When adding tables:
-- [ ] Ordered columns based on the [Ordering Table Columns](https://docs.gitlab.com/ee/development/ordering_table_columns.html#ordering-table-columns) guidelines
+- [ ] Ordered columns based on the [Ordering Table Columns](https://docs.gitlab.com/ee/development/ordering_table_columns.html) guidelines
- [ ] Added foreign keys to any columns pointing to data in other tables
- [ ] Added indexes for fields that are used in statements such as `WHERE`, `ORDER BY`, `GROUP BY`, and `JOIN`s
diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md
index e502614b5ca..a2dd79ed1ab 100644
--- a/.gitlab/merge_request_templates/Documentation.md
+++ b/.gitlab/merge_request_templates/Documentation.md
@@ -1,5 +1,5 @@
<!-- Follow the documentation workflow https://docs.gitlab.com/ee/development/documentation/workflow.html -->
-<!-- Additional information is located at https://docs.gitlab.com/ee/development/documentation/ -->
+<!-- Additional information is located at https://docs.gitlab.com/ee/development/documentation/ -->
<!-- Mention "documentation" or "docs" in the MR title -->
<!-- For changing documentation location use the "Change documentation location" template -->
@@ -17,7 +17,7 @@
- [ ] Follow the [Documentation Guidelines](https://docs.gitlab.com/ee/development/documentation/) and [Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide.html).
- [ ] If applicable, update the [permissions table](https://docs.gitlab.com/ee/user/permissions.html).
- [ ] Link docs to and from the higher-level index page, plus other related docs where helpful.
-- [ ] Apply the ~Documentation label.
+- [ ] Apply the ~documentation label.
## Review checklist
@@ -26,7 +26,7 @@ All reviewers can help ensure accuracy, clarity, completeness, and adherence to
**1. Primary Reviewer**
* [ ] Review by a code reviewer or other selected colleague to confirm accuracy, clarity, and completeness. This can be skipped for minor fixes without substantive content changes.
-
+
**2. Technical Writer**
* [ ] Optional: Technical writer review. If not requested for this MR, must be scheduled post-merge. To request for this MR, assign the writer listed for the applicable [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages).
@@ -35,6 +35,6 @@ All reviewers can help ensure accuracy, clarity, completeness, and adherence to
1. [ ] Review by assigned maintainer, who can always request/require the above reviews. Maintainer's review can occur before or after a technical writer review.
1. [ ] Ensure a release milestone is set and that you merge the equivalent EE MR before the CE MR if both exist.
-1. [ ] If there has not been a technical writer review, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issuable_template=Doc%20Review).
+1. [ ] If there has not been a technical writer review, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review).
-/label ~Documentation
+/label ~documentation
diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml
index d29cb8aa0b0..211ad359951 100644
--- a/.haml-lint_todo.yml
+++ b/.haml-lint_todo.yml
@@ -208,6 +208,8 @@ linters:
- 'app/views/projects/_md_preview.html.haml'
- 'app/views/projects/_new_project_fields.html.haml'
- 'app/views/projects/_readme.html.haml'
+ - 'app/views/projects/artifacts/_artifact.html.haml'
+ - 'app/views/projects/artifacts/_search_bar.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'
@@ -354,6 +356,7 @@ linters:
- 'app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml'
- 'app/views/shared/_commit_message_container.html.haml'
- 'app/views/shared/_confirm_modal.html.haml'
+ - 'app/views/shared/_confirm_fork_modal.html.haml'
- 'app/views/shared/_delete_label_modal.html.haml'
- 'app/views/shared/_group_form.html.haml'
- 'app/views/shared/_group_tips.html.haml'
diff --git a/.projections.json.example b/.projections.json.example
new file mode 100644
index 00000000000..7ea0862f56a
--- /dev/null
+++ b/.projections.json.example
@@ -0,0 +1,36 @@
+{
+ "app/*.rb": {
+ "alternate": "spec/{}_spec.rb",
+ "type": "source"
+ },
+ "spec/*_spec.rb": {
+ "alternate": "app/{}.rb",
+ "type": "test"
+ },
+ "lib/*.rb": {
+ "alternate": "spec/lib/{}_spec.rb",
+ "type": "source"
+ },
+ "spec/lib/*_spec.rb": {
+ "alternate": "lib/{}.rb",
+ "type": "test"
+ },
+ "ee/app/*.rb": {
+ "alternate": "ee/spec/{}_spec.rb",
+ "type": "source"
+ },
+ "ee/spec/*_spec.rb": {
+ "alternate": "ee/app/{}.rb",
+ "type": "test"
+ },
+ "ee/lib/*.rb": {
+ "alternate": "ee/spec/lib/{}_spec.rb",
+ "type": "source"
+ },
+ "ee/spec/lib/*_spec.rb": {
+ "alternate": "ee/lib/{}.rb",
+ "type": "test"
+ },
+ "*.rb": {"dispatch": "bundle exec rubocop {file}"},
+ "*_spec.rb": {"dispatch": "bundle exec rspec {file}"}
+}
diff --git a/.rubocop.yml b/.rubocop.yml
index 693ee0ae847..049340f90d4 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -51,7 +51,6 @@ Style/FrozenStringLiteralComment:
- 'danger/**/*'
- 'db/**/*'
- 'ee/db/**/*'
- - 'ee/spec/**/*'
- 'ee/lib/tasks/**/*'
- 'lib/tasks/**/*'
- 'qa/**/*'
@@ -179,6 +178,11 @@ Gitlab/ModuleWithInstanceVariables:
- spec/support/**/*.rb
- features/steps/**/*.rb
+Gitlab/ConstGetInheritFalse:
+ Enabled: true
+ Exclude:
+ - 'qa/bin/*'
+
Gitlab/HTTParty:
Enabled: true
Exclude:
@@ -218,6 +222,12 @@ ActiveRecordAssociationReload:
- 'spec/**/*'
- 'ee/spec/**/*'
+Naming/PredicateName:
+ Enabled: true
+ Exclude:
+ - 'spec/**/*'
+ - 'ee/spec/**/*'
+
RSpec/FactoriesInMigrationSpecs:
Enabled: true
Include:
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 48b840b4af2..3ed7af71b4f 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -273,11 +273,6 @@ RSpec/ContextWording:
RSpec/EmptyLineAfterFinalLet:
Enabled: false
-# Offense count: 232
-# Cop supports --auto-correct.
-RSpec/EmptyLineAfterSubject:
- Enabled: false
-
# Offense count: 719
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
@@ -442,19 +437,6 @@ Rails/LinkToBlank:
- 'ee/app/helpers/ee/user_callouts_helper.rb'
- 'ee/app/helpers/license_helper.rb'
-# Offense count: 11
-# Cop supports --auto-correct.
-Rails/Presence:
- Exclude:
- - 'app/models/ci/pipeline.rb'
- - 'app/models/concerns/mentionable.rb'
- - 'app/models/project_services/hipchat_service.rb'
- - 'app/models/project_services/irker_service.rb'
- - 'app/models/project_services/jira_service.rb'
- - 'app/models/project_services/packagist_service.rb'
- - 'app/models/wiki_page.rb'
- - 'lib/gitlab/github_import/importer/releases_importer.rb'
-
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: Include.
diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md
index 23859102610..6e5a6e26804 100644
--- a/CHANGELOG-EE.md
+++ b/CHANGELOG-EE.md
@@ -1,5 +1,25 @@
Please view this file on the master branch, on stable branches it's out of date.
+## 12.3.4
+
+### Fixed (2 changes)
+
+- Fix replies to service desk emails for projects with issue access as Only Project Members. !17401
+- Geo: LFS not being synced. !17633
+
+
+## 12.3.2
+
+### Security (2 changes)
+
+- Hide approvers if a rule has any hidden groups.
+- Prevent IDOR when adding groups to protected environments.
+
+
+## 12.3.1
+
+- No changes.
+
## 12.3.0
### Security (3 changes)
@@ -183,6 +203,29 @@ Please view this file on the master branch, on stable branches it's out of date.
- Fixes style-lint errors and warnings for EE builds.scss file.
+## 12.2.8
+
+### Fixed (1 change)
+
+- Geo: LFS not being synced. !17633
+
+
+## 12.2.7
+
+### Security (1 change)
+
+- Restrict access for security reports in MR widget.
+
+
+## 12.2.6
+
+### Security (3 changes)
+
+- Hide approvers if a rule has any hidden groups.
+- Fix Gitaly SearchBlobs flag RPC injection [Gitaly v1.59.3].
+- Prevent IDOR when adding groups to protected environments.
+
+
## 12.2.5
### Security (1 change)
@@ -435,6 +478,27 @@ Please view this file on the master branch, on stable branches it's out of date.
- Fix alignment of activity dropdown in epic tabs; add counter to discussion tab.
+## 12.1.14
+
+### Fixed (1 change)
+
+- Geo: LFS not being synced. !17633
+
+
+## 12.1.12
+
+### Security (4 changes)
+
+- Hide approvers if a rule has any hidden groups.
+- Fix Gitaly SearchBlobs flag RPC injection [Gitaly v1.53.4].
+- Prevent IDOR when adding groups to protected environments.
+- Upgrade mermaid to prevent XSS.
+
+
+## 12.1.10
+
+- No changes.
+
## 12.1.5
- No changes.
@@ -4207,7 +4271,7 @@ Please view this file on the master branch, on stable branches it's out of date.
## 8.14.0 (2016-11-22)
- Added Backfill service for Geo. !861
-- Fix for autosuggested approvers(https://gitlab.com/gitlab-org/gitlab-ee/issues/1273).
+- Fix for autosuggested approvers(https://gitlab.com/gitlab-org/gitlab/issues/1273).
- Gracefully recover from previously failed rebase.
- Disable retries for remote mirror update worker. !848
- Fix Approvals API documentation.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3ec3b4e56a1..279c6ede932 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,33 +2,28 @@
documentation](doc/development/changelog.md) for instructions on adding your own
entry.
-## 12.3.5
-
-- No changes.
-
## 12.3.4
-- No changes.
-
-## 12.3.3
+### Fixed (2 changes)
-### Security (1 change)
-
-- Fix private feature Elasticsearch leak.
+- Fix cannot merge icon showing in dropdown for users who can merge. !17306
+- Fix pipelines for merge requests in project exports. !17844
## 12.3.2
-### Security (10 changes)
+### Security (12 changes)
- Fix Gitaly SearchBlobs flag RPC injection.
- Add a policy check for system notes that may not be visible due to cross references to private items.
- Display only participants that user has permission to see on milestone page.
- Do not disclose project milestones on group milestones page when project milestones access is disabled in project settings.
+- Check permissions before showing head pipeline blocking merge requests.
- Fix new project path being disclosed through unsubscribe link of issue/merge requests.
- Prevent bypassing email verification using Salesforce.
- Do not show resource label events referencing not accessible labels.
- Cancel all running CI jobs triggered by the user who is just blocked.
+- Fix Gitaly SearchBlobs flag RPC injection.
- Only render fixed number of mermaid blocks.
- Prevent GitLab accounts takeover if SAML is configured.
@@ -312,6 +307,37 @@ entry.
- Updates tooltip of 'detached' label/state.
+## 12.2.8
+
+### Security (1 change)
+
+- Limit search for IID to a type to avoid leaking records with the same IID that the user does not have access to.
+
+
+## 12.2.7
+
+### Security (1 change)
+
+- Fix private feature Elasticsearch leak.
+
+
+## 12.2.6
+
+### Security (11 changes)
+
+- Add a policy check for system notes that may not be visible due to cross references to private items.
+- Display only participants that user has permission to see on milestone page.
+- Do not disclose project milestones on group milestones page when project milestones access is disabled in project settings.
+- Check permissions before showing head pipeline blocking merge requests.
+- Fix new project path being disclosed through unsubscribe link of issue/merge requests.
+- Prevent bypassing email verification using Salesforce.
+- Do not show resource label events referencing not accessible labels.
+- Cancel all running CI jobs triggered by the user who is just blocked.
+- Fix Gitaly SearchBlobs flag RPC injection [Gitaly v1.59.3].
+- Only render fixed number of mermaid blocks.
+- Prevent GitLab accounts takeover if SAML is configured.
+
+
## 12.2.5
### Security (1 change)
@@ -630,6 +656,35 @@ entry.
- Update Packer.gitlab-ci.yml to use latest image. (Kelly Hair)
+## 12.1.14
+
+### Security (1 change)
+
+- Limit search for IID to a type to avoid leaking records with the same IID that the user does not have access to.
+
+
+## 12.1.12
+
+### Security (12 changes)
+
+- Add a policy check for system notes that may not be visible due to cross references to private items.
+- Display only participants that user has permission to see on milestone page.
+- Do not disclose project milestones on group milestones page when project milestones access is disabled in project settings.
+- Check permissions before showing head pipeline blocking merge requests.
+- Fix new project path being disclosed through unsubscribe link of issue/merge requests.
+- Prevent bypassing email verification using Salesforce.
+- Do not show resource label events referencing not accessible labels.
+- Cancel all running CI jobs triggered by the user who is just blocked.
+- Fix Gitaly SearchBlobs flag RPC injection.
+- Only render fixed number of mermaid blocks.
+- Prevent GitLab accounts takeover if SAML is configured.
+- Upgrade mermaid to prevent XSS.
+
+
+## 12.1.10
+
+- No changes.
+
## 12.1.5
### Security (2 changes)
@@ -8394,7 +8449,7 @@ entry.
- Reinstate is_admin flag in users api when authenticated user is an admin. !12211 (rickettm)
- Fix edit button for deploy keys available from other projects. !12301 (Alexander Randa)
- Fix passing CI_ENVIRONMENT_NAME and CI_ENVIRONMENT_SLUG for CI_ENVIRONMENT_URL. !12344
-- Disable environment list refresh due to bug https://gitlab.com/gitlab-org/gitlab-ee/issues/2677. !12347
+- Disable environment list refresh due to bug https://gitlab.com/gitlab-org/gitlab/issues/2677. !12347
- Standardize timeline note margins across different viewport sizes. !12364
- Fix Ordered Task List Items. !31483 (Jared Deckard <jared.deckard@gmail.com>)
- Upgrade dependency to Go 1.8.3. !31943
diff --git a/Dangerfile b/Dangerfile
index 228190cd530..b65a9074078 100644
--- a/Dangerfile
+++ b/Dangerfile
@@ -1,6 +1,7 @@
# frozen_string_literal: true
require_relative 'lib/gitlab_danger'
+require_relative 'lib/gitlab/danger/request_helper'
danger.import_plugin('danger/plugins/helper.rb')
danger.import_plugin('danger/plugins/roulette.rb')
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 09f245728f6..65ee0959841 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-1.65.1
+1.67.0
diff --git a/GITLAB_ELASTICSEARCH_INDEXER_VERSION b/GITLAB_ELASTICSEARCH_INDEXER_VERSION
index f0bb29e7638..88c5fb891dc 100644
--- a/GITLAB_ELASTICSEARCH_INDEXER_VERSION
+++ b/GITLAB_ELASTICSEARCH_INDEXER_VERSION
@@ -1 +1 @@
-1.3.0
+1.4.0
diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION
index f8e233b2733..1cac385c6cb 100644
--- a/GITLAB_PAGES_VERSION
+++ b/GITLAB_PAGES_VERSION
@@ -1 +1 @@
-1.9.0
+1.11.0
diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION
index a13e7b9c87e..2bd6f7e3927 100644
--- a/GITLAB_SHELL_VERSION
+++ b/GITLAB_SHELL_VERSION
@@ -1 +1 @@
-10.0.0
+10.2.0
diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION
index 7f6758ef97b..2a5dd0d6389 100644
--- a/GITLAB_WORKHORSE_VERSION
+++ b/GITLAB_WORKHORSE_VERSION
@@ -1 +1 @@
-8.10.0
+8.14.0
diff --git a/Gemfile b/Gemfile
index 864e514ae0d..920f778c053 100644
--- a/Gemfile
+++ b/Gemfile
@@ -87,9 +87,9 @@ gem 'rack-cors', '~> 1.0.0', require: 'rack/cors'
# GraphQL API
gem 'graphql', '~> 1.9.11'
-# NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab-ce/issues/67293
+# NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab/issues/31771
# TODO: remove app/views/graphiql/rails/editors/show.html.erb when https://github.com/rmosolgo/graphiql-rails/pull/71 is released:
-# https://gitlab.com/gitlab-org/gitlab-ce/issues/67263
+# https://gitlab.com/gitlab-org/gitlab/issues/31747
gem 'graphiql-rails', '~> 1.4.10'
gem 'apollo_upload_server', '~> 2.0.0.beta3'
gem 'graphql-docs', '~> 1.6.0', group: [:development, :test]
@@ -148,7 +148,7 @@ gem 'wikicloth', '0.8.1'
gem 'asciidoctor', '~> 2.0.10'
gem 'asciidoctor-include-ext', '~> 0.3.1', require: false
gem 'asciidoctor-plantuml', '0.0.9'
-gem 'rouge', '~> 3.7'
+gem 'rouge', '~> 3.11.0'
gem 'truncato', '~> 0.7.11'
gem 'bootstrap_form', '~> 4.2.0'
gem 'nokogiri', '~> 1.10.4'
@@ -311,7 +311,7 @@ gem 'gettext', '~> 3.2.2', require: false, group: :development
gem 'batch-loader', '~> 1.4.0'
# Perf bar
-# https://gitlab.com/gitlab-org/gitlab-ee/issues/13996
+# https://gitlab.com/gitlab-org/gitlab/issues/13996
gem 'gitlab-peek', '~> 0.0.1', require: 'peek'
# Snowplow events tracking
@@ -355,7 +355,7 @@ group :development, :test do
gem 'fuubar', '~> 2.2.0'
gem 'database_cleaner', '~> 1.7.0'
- gem 'factory_bot_rails', '~> 4.8.2'
+ gem 'factory_bot_rails', '~> 5.1.0'
gem 'rspec-rails', '~> 3.8.0'
gem 'rspec-retry', '~> 0.6.1'
gem 'rspec_profiling', '~> 0.0.5'
@@ -405,7 +405,7 @@ group :test do
gem 'webmock', '~> 3.5.1'
gem 'rails-controller-testing'
gem 'concurrent-ruby', '~> 1.1'
- gem 'test-prof', '~> 0.2.5'
+ gem 'test-prof', '~> 0.10.0'
gem 'rspec_junit_formatter'
end
@@ -446,7 +446,7 @@ group :ed25519 do
end
# Gitaly GRPC protocol definitions
-gem 'gitaly', '~> 1.58.0'
+gem 'gitaly', '~> 1.65.0'
gem 'grpc', '~> 1.19.0'
@@ -465,7 +465,7 @@ gem 'lograge', '~> 0.5'
gem 'grape_logging', '~> 1.7'
# DNS Lookup
-gem 'net-dns', '~> 0.9.0'
+gem 'gitlab-net-dns', '~> 0.9.1'
# Countries list
gem 'countries', '~> 3.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index fec34622be3..18160932c56 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -108,7 +108,7 @@ GEM
binding_ninja (0.2.3)
binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1)
- bootsnap (1.4.4)
+ bootsnap (1.4.5)
msgpack (~> 1.0)
bootstrap_form (4.2.0)
actionpack (>= 5.0)
@@ -209,10 +209,10 @@ GEM
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
device_detector (1.0.0)
- devise (4.6.2)
+ devise (4.7.1)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
- railties (>= 4.1.0, < 6.0)
+ railties (>= 4.1.0)
responders
warden (~> 1.2.3)
devise-two-factor (3.0.0)
@@ -254,7 +254,7 @@ GEM
mail (~> 2.7)
encryptor (3.0.0)
equalizer (0.0.11)
- erubi (1.8.0)
+ erubi (1.9.0)
escape_utils (1.2.1)
et-orbi (1.2.1)
tzinfo
@@ -264,11 +264,11 @@ GEM
expression_parser (0.9.0)
extended-markdown-filter (0.6.0)
html-pipeline (~> 2.0)
- factory_bot (4.8.2)
- activesupport (>= 3.0.0)
- factory_bot_rails (4.8.2)
- factory_bot (~> 4.8.2)
- railties (>= 3.0.0)
+ factory_bot (5.1.0)
+ activesupport (>= 4.2.0)
+ factory_bot_rails (5.1.0)
+ factory_bot (~> 5.1.0)
+ railties (>= 4.2.0)
faraday (0.12.2)
multipart-post (>= 1.2, < 3)
faraday-http-cache (2.0.0)
@@ -358,7 +358,7 @@ GEM
po_to_json (>= 1.0.0)
rails (>= 3.2.0)
git (1.5.0)
- gitaly (1.58.0)
+ gitaly (1.65.0)
grpc (~> 1.0)
github-markup (1.7.0)
gitlab-labkit (0.5.2)
@@ -370,6 +370,7 @@ GEM
redis (> 3.0.0, < 5.0.0)
gitlab-license (1.0.0)
gitlab-markup (1.7.0)
+ gitlab-net-dns (0.9.1)
gitlab-peek (0.0.1)
railties (>= 4.0.0)
gitlab-sidekiq-fetcher (0.5.2)
@@ -487,7 +488,7 @@ GEM
mime-types (~> 3.0)
multi_xml (>= 0.5.2)
httpclient (2.8.3)
- i18n (1.6.0)
+ i18n (1.7.0)
concurrent-ruby (~> 1.0)
i18n_data (0.8.0)
icalendar (2.4.1)
@@ -565,7 +566,7 @@ GEM
activesupport (>= 4)
railties (>= 4)
request_store (~> 1.0)
- loofah (2.2.3)
+ loofah (2.3.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
@@ -586,7 +587,7 @@ GEM
mini_mime (1.0.1)
mini_portile2 (2.4.0)
minitest (5.11.3)
- msgpack (1.3.0)
+ msgpack (1.3.1)
multi_json (1.13.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
@@ -596,7 +597,6 @@ GEM
mustermann (~> 1.0.0)
nakayoshi_fork (0.0.4)
nap (1.1.0)
- net-dns (0.9.0)
net-ldap (0.16.0)
net-ntp (2.1.3)
net-ssh (5.2.0)
@@ -770,8 +770,8 @@ GEM
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
- rails-html-sanitizer (1.2.0)
- loofah (~> 2.2, >= 2.2.2)
+ rails-html-sanitizer (1.3.0)
+ loofah (~> 2.3)
rails-i18n (5.1.1)
i18n (>= 0.7, < 2)
railties (>= 5.0, < 6)
@@ -783,7 +783,7 @@ GEM
thor (>= 0.19.0, < 2.0)
rainbow (3.0.0)
raindrops (0.19.0)
- rake (12.3.2)
+ rake (12.3.3)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
@@ -824,9 +824,9 @@ GEM
declarative-option (< 0.2.0)
uber (< 0.2.0)
request_store (1.3.1)
- responders (2.4.0)
- actionpack (>= 4.2.0, < 5.3)
- railties (>= 4.2.0, < 5.3)
+ responders (2.4.1)
+ actionpack (>= 4.2.0, < 6.0)
+ railties (>= 4.2.0, < 6.0)
rest-client (2.0.2)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
@@ -834,7 +834,7 @@ GEM
retriable (3.1.2)
rinku (2.0.0)
rotp (2.1.2)
- rouge (3.7.0)
+ rouge (3.11.0)
rqrcode (0.7.0)
chunky_png
rqrcode-rails3 (0.1.7)
@@ -994,7 +994,7 @@ GEM
temple (0.8.1)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
- test-prof (0.2.5)
+ test-prof (0.10.0)
text (1.3.1)
thin (1.7.2)
daemons (~> 1.0, >= 1.0.9)
@@ -1058,8 +1058,8 @@ GEM
descendants_tracker (~> 0.0, >= 0.0.3)
equalizer (~> 0.0, >= 0.0.9)
vmstat (2.3.0)
- warden (1.2.7)
- rack (>= 1.0)
+ warden (1.2.8)
+ rack (>= 2.0.6)
webfinger (1.1.0)
activesupport
httpclient (>= 2.4)
@@ -1144,7 +1144,7 @@ DEPENDENCIES
email_reply_trimmer (~> 0.1)
email_spec (~> 2.2.0)
escape_utils (~> 1.1)
- factory_bot_rails (~> 4.8.2)
+ factory_bot_rails (~> 5.1.0)
faraday (~> 0.12)
faraday_middleware-aws-signers-v4
fast_blank
@@ -1168,11 +1168,12 @@ DEPENDENCIES
gettext (~> 3.2.2)
gettext_i18n_rails (~> 1.8.0)
gettext_i18n_rails_js (~> 1.3)
- gitaly (~> 1.58.0)
+ gitaly (~> 1.65.0)
github-markup (~> 1.7.0)
gitlab-labkit (~> 0.5)
gitlab-license (~> 1.0)
gitlab-markup (~> 1.7.0)
+ gitlab-net-dns (~> 0.9.1)
gitlab-peek (~> 0.0.1)
gitlab-sidekiq-fetcher (= 0.5.2)
gitlab-styles (~> 2.7)
@@ -1222,7 +1223,6 @@ DEPENDENCIES
mini_magick
minitest (~> 5.11.0)
nakayoshi_fork (~> 0.0.4)
- net-dns (~> 0.9.0)
net-ldap
net-ntp
net-ssh (~> 5.2)
@@ -1276,7 +1276,7 @@ DEPENDENCIES
redis-rails (~> 5.0.2)
request_store (~> 1.3)
responders (~> 2.0)
- rouge (~> 3.7)
+ rouge (~> 3.11.0)
rqrcode-rails3 (~> 0.1.7)
rspec-parameterized
rspec-rails (~> 3.8.0)
@@ -1314,7 +1314,7 @@ DEPENDENCIES
stackprof (~> 0.2.10)
state_machines-activerecord (~> 0.5.1)
sys-filesystem (~> 1.1.6)
- test-prof (~> 0.2.5)
+ test-prof (~> 0.10.0)
thin (~> 1.7.0)
timecop (~> 0.8.0)
toml-rb (~> 1.0.0)
diff --git a/PROCESS.md b/PROCESS.md
index f0a82838f62..6bff60bff0f 100644
--- a/PROCESS.md
+++ b/PROCESS.md
@@ -11,15 +11,6 @@
- [Merge request coaching](#merge-request-coaching)
- [Assigning issues](#assigning-issues)
- [Be kind](#be-kind)
-- [Feature freeze on the 7th for the release on the 22nd](#feature-freeze-on-the-7th-for-the-release-on-the-22nd)
- - [Feature flags](#feature-flags)
- - [Between the 1st and the 7th](#between-the-1st-and-the-7th)
- - [What happens if these deadlines are missed?](#what-happens-if-these-deadlines-are-missed)
- - [On the 7th](#on-the-7th)
- - [Feature merge requests](#feature-merge-requests)
- - [Documentation merge requests](#documentation-merge-requests)
- - [After the 7th](#after-the-7th)
- - [Asking for an exception](#asking-for-an-exception)
- [Bugs](#bugs)
- [Regressions](#regressions)
- [Managing bugs](#managing-bugs)
@@ -100,135 +91,6 @@ Product Managers must have their proposal for that milestone ready by the 22nd o
This proposal will be shared with Engineering for discussion, feedback, and planning.
The plan for the upcoming milestone must be finalized by the 1st of the month, one week before kickoff on the 8th.
-## Feature freeze on the 7th for the release on the 22nd
-
-The feature freeze on the 7th has been discontinued. [Transition period overview](https://gitlab.com/gitlab-org/release/docs/blob/21cbd409dd5f157fe252f254f3e897f01908abe2/general/deploy/auto-deploy-transition.md#transition)
-describes the change to this process. During the transition period, the only guarantee that
-a change will be included in the release on the 22nd is if the change has been
-deployed to GitLab.com prior to this date.
-
-### Between the 1st and the 7th
-
-These types of merge requests for the upcoming release need special consideration:
-
-* **Large features**: a large feature is one that is highlighted in the kick-off
- and the release blogpost; typically this will have its own channel in Slack
- and a dedicated team with front-end, back-end, and UX.
-* **Small features**: any other feature request.
-
-It is strongly recommended that **large features** be with a maintainer **by the
-1st**. This means that:
-
-* There is a merge request (even if it's WIP).
-* The person (or people, if it needs a frontend and backend maintainer) who will
- ultimately be responsible for merging this have been pinged on the MR.
-
-It's OK if merge request isn't completely done, but this allows the maintainer
-enough time to make the decision about whether this can make it in before the
-freeze. If the maintainer doesn't think it will make it, they should inform the
-developers working on it and the Product Manager responsible for the feature.
-
-The maintainer can also choose to assign a reviewer to perform an initial
-review, but this way the maintainer is unlikely to be surprised by receiving an
-MR later in the cycle.
-
-It is strongly recommended that **small features** be with a reviewer (not
-necessarily a maintainer) **by the 3rd**.
-
-Most merge requests from the community do not have a specific release
-target. However, if one does and falls into either of the above categories, it's
-the reviewer's responsibility to manage the above communication and assignment
-on behalf of the community member.
-
-Every new feature or change should be shipped with its corresponding documentation
-in accordance with the
-[documentation process](https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html)
-and [structure](https://docs.gitlab.com/ee/development/documentation/structure.html) guides.
-Note that a technical writer will review all changes to documentation. This can occur
-in the same MR as the feature code, but [if there is not sufficient time or need,
-it can be planned via a follow-up issue for doc review](https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#1-product-managers-role),
-and another MR, if needed. Regardless, complete docs must be merged with code by the freeze.
-
-#### What happens if these deadlines are missed?
-
-If a small or large feature is _not_ with a maintainer or reviewer by the
-recommended date, this does _not_ mean that maintainers or reviewers will refuse
-to review or merge it, or that the feature will definitely not make it in before
-the feature freeze.
-
-However, with every day that passes without review, it will become more likely
-that the feature will slip, because maintainers and reviewers may not have
-enough time to do a thorough review, and developers may not have enough time to
-adequately address any feedback that may come back.
-
-A maintainer or reviewer may also determine that it will not be possible to
-finish the current scope of the feature in time, but that it is possible to
-reduce the scope so that something can still ship this month, with the remaining
-scope moving to the next release. The sooner this decision is made, in
-conversation with the Product Manager and developer, the more time there is to
-extract that which is now out of scope, and to finish that which remains in scope.
-
-For these reasons, it is strongly recommended to follow the guidelines above,
-to maximize the chances of your feature making it in before the feature freeze,
-and to prevent any last minute surprises.
-
-### On the 7th
-
-Merge requests should still be complete, following the [definition of done][done].
-
-If a merge request is not ready, but the developers and Product Manager
-responsible for the feature think it is essential that it is in the release,
-they can [ask for an exception](#asking-for-an-exception) in advance. This is
-preferable to merging something that we are not confident in, but should still
-be a rare case: most features can be allowed to slip a release.
-
-All Community Edition merge requests from GitLab team members merged on the
-freeze date (the 7th) should have a corresponding Enterprise Edition merge
-request, even if there are no conflicts. This is to reduce the size of the
-subsequent EE merge, as we often merge a lot to CE on the release date. For more
-information, see
-[Automatic CE->EE merge][automatic_ce_ee_merge] and
-[Guidelines for implementing Enterprise Edition features][ee_features].
-
-### After the 7th
-
-Once the stable branch is frozen, the only MRs that can be cherry-picked into
-the stable branch are:
-
-* Fixes for [regressions](#regressions) where the affected version `xx.x` in `regression:xx.x` is the current release. See [Managing bugs](#managing-bugs) section.
-* Fixes for security issues.
-* Fixes or improvements to automated QA scenarios.
-* [Documentation improvements](https://docs.gitlab.com/ee/development/documentation/workflow.html) for feature changes made in the same release, though initial docs for these features should have already been merged by the freeze, as required.
-* New or updated translations (as long as they do not touch application code).
-* Changes that are behind a feature flag and have the ~"feature flag" label.
-
-During the feature freeze all merge requests that are meant to go into the
-upcoming release should have the correct milestone assigned _and_ the
-`Pick into X.Y` label where `X.Y` is equal to the milestone, so that release
-managers can find and pick them.
-Merge requests without this label will not be picked into the stable release.
-
-For example, if the upcoming release is `10.2.0` you will need to set the
-`Pick into 10.2` label.
-
-Fixes marked like this will be shipped in the next RC (before the 22nd), or the
-next patch release.
-
-If a merge request is to be picked into more than one release it will need one
-`Pick into X.Y` label per release where the merge request should be back-ported
-to. For example:
-
-- `Pick into 10.1`
-- `Pick into 10.0`
-- `Pick into 9.5`
-
-### Asking for an exception
-
-If you think a merge request should go into an RC or patch even though it does not meet these requirements,
-you can ask for an exception to be made.
-
-Check [this guide](https://gitlab.com/gitlab-org/release/docs/blob/master/general/exception-request/process.md) about how to open an exception request before opening one.
-
## Bugs
A ~bug is a defect, error, failure which causes the system to behave incorrectly or prevents it from fulfilling the product requirements.
@@ -256,13 +118,6 @@ Regressions should be considered high priority issues that should be solved as s
### Managing bugs
**Prioritization:** We give higher priority to regressions on features that worked in the last recent monthly release and the current release candidates.
-The two scenarios below can [bypass the exception request in the release process](https://gitlab.com/gitlab-org/release/docs/blob/master/general/exception-request/process.md#after-the-7th), where the affected regression version matches the current monthly release version.
-* A regression which worked in the **Last monthly release**
- * **Example:** In 11.0 we released a new `feature X` that is verified as working. Then in release 11.1 the feature no longer works, this is regression for 11.1. The issue should have the `regression:11.1` label.
- * *Note:* When we say `the last recent monthly release`, this can refer to either the version currently running on GitLab.com, or the most recent version available in the package repositories.
-* A regression which worked in the **Current release candidates**
- * **Example:** In 11.1-RC3 we shipped a new feature which has been verified as working. Then in 11.1-RC5 the feature no longer works, this is regression for 11.1. The issue should have the `regression:11.1` label.
- * *Note:* Because GitLab.com runs release candidates of new releases, a regression can be reported in a release before its 'official' release date on the 22nd of the month.
When a bug is found:
1. Create an issue describing the problem in the most detailed way possible.
@@ -328,7 +183,7 @@ Thanks for the issue report. This issue has already been fixed in newer versions
Due to the size of this project and our limited resources we are only able to support the
latest stable release as outlined in our [contributing guidelines](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html).
In order to get this bug fix and enjoy many new features please
-[upgrade](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/doc/update).
+[upgrade](https://gitlab.com/gitlab-org/gitlab/tree/master/doc/update).
If you still experience issues at that time please open a new issue following our issue
tracker guidelines found in the [contributing guidelines](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#issue-tracker-guidelines).
```
@@ -337,14 +192,14 @@ tracker guidelines found in the [contributing guidelines](https://docs.gitlab.co
```
Thanks for your interest in improving the GitLab codebase!
-Please update your merge request according to the [contributing guidelines](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/contributing/merge_request_workflow.md#merge-request-guidelines).
+Please update your merge request according to the [contributing guidelines](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/contributing/merge_request_workflow.md#merge-request-guidelines).
```
### Accepting merge requests
```
Is there an issue on the
-[issue tracker](https://gitlab.com/gitlab-org/gitlab-ce/issues) that is
+[issue tracker](https://gitlab.com/gitlab-org/gitlab/issues) that is
similar to this? Could you please link it here?
Please be aware that new functionality that is not marked
[`Accepting merge requests`](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#label-for-community-contributors)
diff --git a/README.md b/README.md
index bfc55f28279..95a2192a375 100644
--- a/README.md
+++ b/README.md
@@ -2,9 +2,9 @@
## Canonical source
-The canonical source of GitLab Community Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/).
+The canonical source of GitLab where all development takes place is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab).
-The source of GitLab Enterprise Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ee).
+If you wish to clone a copy of GitLab without proprietary code, you can use the read-only mirror of GitLab located at https://gitlab.com/gitlab-org/gitlab-foss/. Please do not submit any issues and/or merge requests to this project.
## Free trial
diff --git a/VERSION b/VERSION
index a1e7534db56..2a35810ce4c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-12.3.5
+12.4.0-rc42-ee
diff --git a/app/assets/images/ci_favicons/canary/favicon_status_preparing.ico b/app/assets/images/ci_favicons/canary/favicon_status_preparing.ico
new file mode 100644
index 00000000000..6cdf3ae2e36
--- /dev/null
+++ b/app/assets/images/ci_favicons/canary/favicon_status_preparing.ico
Binary files differ
diff --git a/app/assets/images/ci_favicons/favicon_status_preparing.png b/app/assets/images/ci_favicons/favicon_status_preparing.png
new file mode 100644
index 00000000000..f81baa0ece3
--- /dev/null
+++ b/app/assets/images/ci_favicons/favicon_status_preparing.png
Binary files differ
diff --git a/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js b/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js
deleted file mode 100644
index 6a40f1cbc5e..00000000000
--- a/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js
+++ /dev/null
@@ -1,11 +0,0 @@
-export default {
- data() {
- return {
- isCustomStageForm: false,
- };
- },
- methods: {
- showAddStageForm: () => {},
- hideAddStageForm: () => {},
- },
-};
diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js
index 992c5e5e330..908dc730aa4 100644
--- a/app/assets/javascripts/api.js
+++ b/app/assets/javascripts/api.js
@@ -36,6 +36,7 @@ const Api = {
branchSinglePath: '/api/:version/projects/:id/repository/branches/:branch',
createBranchPath: '/api/:version/projects/:id/repository/branches',
releasesPath: '/api/:version/projects/:id/releases',
+ releasePath: '/api/:version/projects/:id/releases/:tag_name',
mergeRequestsPipeline: '/api/:version/projects/:id/merge_requests/:merge_request_iid/pipelines',
adminStatisticsPath: 'api/:version/application/statistics',
@@ -74,6 +75,11 @@ const Api = {
});
},
+ groupLabels(namespace) {
+ const url = Api.buildUrl(Api.groupLabelsPath).replace(':namespace_path', namespace);
+ return axios.get(url).then(({ data }) => data);
+ },
+
// Return namespaces list. Filtered by query
namespaces(query, callback) {
const url = Api.buildUrl(Api.namespacesPath);
@@ -386,6 +392,22 @@ const Api = {
return axios.get(url);
},
+ release(projectPath, tagName) {
+ const url = Api.buildUrl(this.releasePath)
+ .replace(':id', encodeURIComponent(projectPath))
+ .replace(':tag_name', encodeURIComponent(tagName));
+
+ return axios.get(url);
+ },
+
+ updateRelease(projectPath, tagName, release) {
+ const url = Api.buildUrl(this.releasePath)
+ .replace(':id', encodeURIComponent(projectPath))
+ .replace(':tag_name', encodeURIComponent(tagName));
+
+ return axios.put(url, release);
+ },
+
adminStatistics() {
const url = Api.buildUrl(this.adminStatisticsPath);
return axios.get(url);
diff --git a/app/assets/javascripts/autosave.js b/app/assets/javascripts/autosave.js
index e8c59fab609..7652b67ae1e 100644
--- a/app/assets/javascripts/autosave.js
+++ b/app/assets/javascripts/autosave.js
@@ -1,4 +1,4 @@
-/* eslint-disable no-param-reassign, prefer-template, no-void, consistent-return */
+/* eslint-disable no-param-reassign, no-void, consistent-return */
import AccessorUtilities from './lib/utils/accessor';
@@ -10,7 +10,7 @@ export default class Autosave {
if (key.join != null) {
key = key.join('/');
}
- this.key = 'autosave/' + key;
+ this.key = `autosave/${key}`;
this.field.data('autosave', this);
this.restore();
this.field.on('input', () => this.save());
diff --git a/app/assets/javascripts/badges/components/badge_settings.vue b/app/assets/javascripts/badges/components/badge_settings.vue
index 75a522efe7e..531f84ad272 100644
--- a/app/assets/javascripts/badges/components/badge_settings.vue
+++ b/app/assets/javascripts/badges/components/badge_settings.vue
@@ -2,7 +2,7 @@
import { mapState, mapActions } from 'vuex';
import createFlash from '~/flash';
import { s__ } from '~/locale';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import Badge from './badge.vue';
import BadgeForm from './badge_form.vue';
import BadgeList from './badge_list.vue';
@@ -13,7 +13,7 @@ export default {
Badge,
BadgeForm,
BadgeList,
- GlModal,
+ GlModal: DeprecatedModal2,
},
computed: {
...mapState(['badgeInModal', 'isEditing']),
diff --git a/app/assets/javascripts/behaviors/markdown/editor_extensions.js b/app/assets/javascripts/behaviors/markdown/editor_extensions.js
index 47e5fc65c48..8bd2145db1c 100644
--- a/app/assets/javascripts/behaviors/markdown/editor_extensions.js
+++ b/app/assets/javascripts/behaviors/markdown/editor_extensions.js
@@ -21,6 +21,7 @@ import Reference from './nodes/reference';
import TableOfContents from './nodes/table_of_contents';
import Video from './nodes/video';
+import Audio from './nodes/audio';
import BulletList from './nodes/bullet_list';
import OrderedList from './nodes/ordered_list';
@@ -78,6 +79,7 @@ export default [
new TableOfContents(),
new Video(),
+ new Audio(),
new BulletList(),
new OrderedList(),
diff --git a/app/assets/javascripts/behaviors/markdown/nodes/audio.js b/app/assets/javascripts/behaviors/markdown/nodes/audio.js
new file mode 100644
index 00000000000..48ac408cf24
--- /dev/null
+++ b/app/assets/javascripts/behaviors/markdown/nodes/audio.js
@@ -0,0 +1,53 @@
+/* eslint-disable class-methods-use-this */
+
+import { Node } from 'tiptap';
+import { defaultMarkdownSerializer } from 'prosemirror-markdown';
+
+// Transforms generated HTML back to GFM for Banzai::Filter::AudioLinkFilter
+export default class Audio extends Node {
+ get name() {
+ return 'audio';
+ }
+
+ get schema() {
+ return {
+ attrs: {
+ src: {},
+ alt: {
+ default: null,
+ },
+ },
+ group: 'block',
+ draggable: true,
+ parseDOM: [
+ {
+ tag: '.audio-container',
+ skip: true,
+ },
+ {
+ tag: '.audio-container p',
+ priority: 51,
+ ignore: true,
+ },
+ {
+ tag: 'audio[src]',
+ getAttrs: el => ({ src: el.getAttribute('src'), alt: el.dataset.title }),
+ },
+ ],
+ toDOM: node => [
+ 'audio',
+ {
+ src: node.attrs.src,
+ controls: true,
+ 'data-setup': '{}',
+ 'data-title': node.attrs.alt,
+ },
+ ],
+ };
+ }
+
+ toMarkdown(state, node) {
+ defaultMarkdownSerializer.nodes.image(state, node);
+ state.closeBlock(node);
+ }
+}
diff --git a/app/assets/javascripts/behaviors/preview_markdown.js b/app/assets/javascripts/behaviors/preview_markdown.js
index 1909830e9ed..a07942d87cb 100644
--- a/app/assets/javascripts/behaviors/preview_markdown.js
+++ b/app/assets/javascripts/behaviors/preview_markdown.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, prefer-arrow-callback */
+/* eslint-disable func-names, no-var */
import $ from 'jquery';
import axios from '~/lib/utils/axios_utils';
@@ -45,26 +45,22 @@ MarkdownPreview.prototype.showPreview = function($form) {
this.hideReferencedUsers($form);
} else {
preview.addClass('md-preview-loading').text(__('Loading...'));
- this.fetchMarkdownPreview(
- mdText,
- url,
- function(response) {
- var body;
- if (response.body.length > 0) {
- ({ body } = response);
- } else {
- body = this.emptyMessage;
- }
-
- preview.removeClass('md-preview-loading').html(body);
- preview.renderGFM();
- this.renderReferencedUsers(response.references.users, $form);
-
- if (response.references.commands) {
- this.renderReferencedCommands(response.references.commands, $form);
- }
- }.bind(this),
- );
+ this.fetchMarkdownPreview(mdText, url, response => {
+ var body;
+ if (response.body.length > 0) {
+ ({ body } = response);
+ } else {
+ body = this.emptyMessage;
+ }
+
+ preview.removeClass('md-preview-loading').html(body);
+ preview.renderGFM();
+ this.renderReferencedUsers(response.references.users, $form);
+
+ if (response.references.commands) {
+ this.renderReferencedCommands(response.references.commands, $form);
+ }
+ });
}
};
@@ -132,12 +128,12 @@ const markdownToolbar = $('.md-header-toolbar');
$.fn.setupMarkdownPreview = function() {
var $form = $(this);
- $form.find('textarea.markdown-area').on('input', function() {
+ $form.find('textarea.markdown-area').on('input', () => {
markdownPreview.hideReferencedUsers($form);
});
};
-$(document).on('markdown-preview:show', function(e, $form) {
+$(document).on('markdown-preview:show', (e, $form) => {
if (!$form) {
return;
}
@@ -162,7 +158,7 @@ $(document).on('markdown-preview:show', function(e, $form) {
markdownPreview.showPreview($form);
});
-$(document).on('markdown-preview:hide', function(e, $form) {
+$(document).on('markdown-preview:hide', (e, $form) => {
if (!$form) {
return;
}
@@ -191,7 +187,7 @@ $(document).on('markdown-preview:hide', function(e, $form) {
markdownPreview.hideReferencedCommands($form);
});
-$(document).on('markdown-preview:toggle', function(e, keyboardEvent) {
+$(document).on('markdown-preview:toggle', (e, keyboardEvent) => {
var $target;
$target = $(keyboardEvent.target);
if ($target.is('textarea.markdown-area')) {
diff --git a/app/assets/javascripts/behaviors/requires_input.js b/app/assets/javascripts/behaviors/requires_input.js
index d8056e48d4e..7cf18d1fd83 100644
--- a/app/assets/javascripts/behaviors/requires_input.js
+++ b/app/assets/javascripts/behaviors/requires_input.js
@@ -26,7 +26,7 @@ $.fn.requiresInput = function requiresInput() {
const values = _.map($(fieldSelector, $form), field => field.value);
// Disable the button if any required fields are empty
- if (values.length && _.any(values, _.isEmpty)) {
+ if (values.length && _.some(values, _.isEmpty)) {
$button.disable();
} else {
$button.enable();
diff --git a/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js b/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js
index 75777b910ca..87c8568802e 100644
--- a/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js
+++ b/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js
@@ -1,5 +1,7 @@
import sqljs from 'sql.js';
import { template as _template } from 'underscore';
+import axios from '~/lib/utils/axios_utils';
+import { successCodes } from '~/lib/utils/http_status';
const PREVIEW_TEMPLATE = _template(`
<div class="card">
@@ -16,30 +18,25 @@ class BalsamiqViewer {
}
loadFile(endpoint) {
- return new Promise((resolve, reject) => {
- const xhr = new XMLHttpRequest();
-
- xhr.open('GET', endpoint, true);
- xhr.responseType = 'arraybuffer';
- xhr.onload = loadEvent => this.fileLoaded(loadEvent, resolve, reject);
- xhr.onerror = reject;
-
- xhr.send();
- });
- }
-
- fileLoaded(loadEvent, resolve, reject) {
- if (loadEvent.target.status !== 200) return reject();
-
- this.renderFile(loadEvent);
-
- return resolve();
+ return axios
+ .get(endpoint, {
+ responseType: 'arraybuffer',
+ validateStatus(status) {
+ return status !== successCodes.OK;
+ },
+ })
+ .then(({ data }) => {
+ this.renderFile(data);
+ })
+ .catch(e => {
+ throw new Error(e);
+ });
}
- renderFile(loadEvent) {
+ renderFile(fileBuffer) {
const container = document.createElement('ul');
- this.initDatabase(loadEvent.target.response);
+ this.initDatabase(fileBuffer);
const previews = this.getPreviews();
previews.forEach(preview => {
diff --git a/app/assets/javascripts/blob/blob_file_dropzone.js b/app/assets/javascripts/blob/blob_file_dropzone.js
index 9f0680cc6a7..8acf0827c44 100644
--- a/app/assets/javascripts/blob/blob_file_dropzone.js
+++ b/app/assets/javascripts/blob/blob_file_dropzone.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, prefer-arrow-callback */
+/* eslint-disable func-names */
import $ from 'jquery';
import Dropzone from 'dropzone';
@@ -43,18 +43,18 @@ export default class BlobFileDropzone {
previewsContainer: '.dropzone-previews',
headers: csrf.headers,
init() {
- this.on('addedfile', function() {
+ this.on('addedfile', () => {
toggleLoading(submitButton, submitButtonLoadingIcon, false);
dropzoneMessage.addClass(HIDDEN_CLASS);
$('.dropzone-alerts')
.html('')
.hide();
});
- this.on('removedfile', function() {
+ this.on('removedfile', () => {
toggleLoading(submitButton, submitButtonLoadingIcon, false);
dropzoneMessage.removeClass(HIDDEN_CLASS);
});
- this.on('success', function(header, response) {
+ this.on('success', (header, response) => {
$('#modal-upload-blob').modal('hide');
visitUrl(response.filePath);
});
@@ -62,7 +62,7 @@ export default class BlobFileDropzone {
dropzoneMessage.addClass(HIDDEN_CLASS);
this.removeFile(file);
});
- this.on('sending', function(file, xhr, formData) {
+ this.on('sending', (file, xhr, formData) => {
formData.append('branch_name', form.find('.js-branch-name').val());
formData.append('create_merge_request', form.find('.js-create-merge-request').val());
formData.append('commit_message', form.find('.js-commit-message').val());
diff --git a/app/assets/javascripts/blob/file_template_mediator.js b/app/assets/javascripts/blob/file_template_mediator.js
index 106fe2e0cef..b371f6be268 100644
--- a/app/assets/javascripts/blob/file_template_mediator.js
+++ b/app/assets/javascripts/blob/file_template_mediator.js
@@ -7,6 +7,8 @@ import BlobCiYamlSelector from './template_selectors/ci_yaml_selector';
import DockerfileSelector from './template_selectors/dockerfile_selector';
import GitignoreSelector from './template_selectors/gitignore_selector';
import LicenseSelector from './template_selectors/license_selector';
+import toast from '~/vue_shared/plugins/global_toast';
+import { __ } from '~/locale';
export default class FileTemplateMediator {
constructor({ editor, currentAction, projectId }) {
@@ -19,6 +21,7 @@ export default class FileTemplateMediator {
this.initDomElements();
this.initDropdowns();
this.initPageEvents();
+ this.cacheFileContents();
}
initTemplateSelectors() {
@@ -40,6 +43,7 @@ export default class FileTemplateMediator {
return {
name: cfg.name,
key: cfg.key,
+ id: cfg.key,
};
}),
});
@@ -58,6 +62,7 @@ export default class FileTemplateMediator {
this.$fileContent = $fileEditor.find('#file-content');
this.$commitForm = $fileEditor.find('form');
this.$navLinks = $fileEditor.find('.nav-links');
+ this.$templateTypes = this.$templateSelectors.find('.template-type-selector');
}
initDropdowns() {
@@ -113,7 +118,11 @@ export default class FileTemplateMediator {
}
});
- this.typeSelector.setToggleText(item.name);
+ this.setFilename(item.name);
+
+ if (this.editor.getValue() !== '') {
+ this.setTypeSelectorToggleText(item.name);
+ }
this.cacheToggleText();
}
@@ -123,15 +132,24 @@ export default class FileTemplateMediator {
}
selectTemplateFile(selector, query, data) {
+ const self = this;
+
selector.renderLoading();
- // in case undo menu is already there
- this.destroyUndoMenu();
+
this.fetchFileTemplate(selector.config.type, query, data)
.then(file => {
- this.showUndoMenu();
this.setEditorContent(file);
- this.setFilename(selector.config.name);
selector.renderLoaded();
+ this.typeSelector.setToggleText(selector.config.name);
+ toast(__(`${query} template applied`), {
+ action: {
+ text: __('Undo'),
+ onClick: (e, toastObj) => {
+ self.restoreFromCache();
+ toastObj.goAway(0);
+ },
+ },
+ });
})
.catch(err => new Flash(`An error occurred while fetching the template: ${err}`));
}
@@ -173,22 +191,6 @@ export default class FileTemplateMediator {
return this.templateSelectors.find(selector => selector.config.key === key);
}
- showUndoMenu() {
- this.$undoMenu.removeClass('hidden');
-
- this.$undoBtn.on('click', () => {
- this.restoreFromCache();
- this.destroyUndoMenu();
- });
- }
-
- destroyUndoMenu() {
- this.cacheFileContents();
- this.cacheToggleText();
- this.$undoMenu.addClass('hidden');
- this.$undoBtn.off('click');
- }
-
hideTemplateSelectorMenu() {
this.$templatesMenu.hide();
}
@@ -210,6 +212,7 @@ export default class FileTemplateMediator {
this.setEditorContent(this.cachedContent);
this.setFilename(this.cachedFilename);
this.setTemplateSelectorToggleText();
+ this.setTypeSelectorToggleText(__('Select a template type'));
}
getTemplateSelectorToggleText() {
@@ -228,6 +231,10 @@ export default class FileTemplateMediator {
return this.typeSelector.getToggleText();
}
+ setTypeSelectorToggleText(text) {
+ this.typeSelector.setToggleText(text);
+ }
+
getFilename() {
return this.$filenameInput.val();
}
diff --git a/app/assets/javascripts/blob/template_selector.js b/app/assets/javascripts/blob/template_selector.js
index 9e69c7d7164..b0de4dc8628 100644
--- a/app/assets/javascripts/blob/template_selector.js
+++ b/app/assets/javascripts/blob/template_selector.js
@@ -1,6 +1,7 @@
/* eslint-disable class-methods-use-this */
import $ from 'jquery';
+import '~/gl_dropdown';
export default class TemplateSelector {
constructor({ dropdown, data, pattern, wrapper, editor, $input } = {}) {
@@ -26,11 +27,16 @@ export default class TemplateSelector {
search: {
fields: ['name'],
},
- clicked: options => this.fetchFileTemplate(options),
+ clicked: options => this.onDropdownClicked(options),
text: item => item.name,
});
}
+ // Subclasses can override this method to conditionally prevent fetching file templates
+ onDropdownClicked(options) {
+ this.fetchFileTemplate(options);
+ }
+
initAutosizeUpdateEvent() {
this.autosizeUpdateEvent = document.createEvent('Event');
this.autosizeUpdateEvent.initEvent('autosize:update', true, false);
@@ -77,9 +83,14 @@ export default class TemplateSelector {
if (this.editor instanceof $) {
this.editor.get(0).dispatchEvent(this.autosizeUpdateEvent);
+ this.editor.trigger('input');
}
}
+ getEditorContent() {
+ return this.editor.getValue();
+ }
+
startLoadingSpinner() {
this.$dropdownIcon.addClass('fa-spinner fa-spin').removeClass('fa-chevron-down');
}
diff --git a/app/assets/javascripts/blob/template_selectors/ci_yaml_selector.js b/app/assets/javascripts/blob/template_selectors/ci_yaml_selector.js
index 43f7aead8b9..d819452df68 100644
--- a/app/assets/javascripts/blob/template_selectors/ci_yaml_selector.js
+++ b/app/assets/javascripts/blob/template_selectors/ci_yaml_selector.js
@@ -19,7 +19,6 @@ export default class BlobCiYamlSelector extends FileTemplateSelector {
data: this.$dropdown.data('data'),
filterable: true,
selectable: true,
- toggleLabel: item => item.name,
search: {
fields: ['name'],
},
diff --git a/app/assets/javascripts/blob/template_selectors/dockerfile_selector.js b/app/assets/javascripts/blob/template_selectors/dockerfile_selector.js
index 659d57e6a6f..7d5e98889d3 100644
--- a/app/assets/javascripts/blob/template_selectors/dockerfile_selector.js
+++ b/app/assets/javascripts/blob/template_selectors/dockerfile_selector.js
@@ -20,7 +20,6 @@ export default class DockerfileSelector extends FileTemplateSelector {
data: this.$dropdown.data('data'),
filterable: true,
selectable: true,
- toggleLabel: item => item.name,
search: {
fields: ['name'],
},
diff --git a/app/assets/javascripts/blob/template_selectors/gitignore_selector.js b/app/assets/javascripts/blob/template_selectors/gitignore_selector.js
index a8067ec5c84..39a8937641d 100644
--- a/app/assets/javascripts/blob/template_selectors/gitignore_selector.js
+++ b/app/assets/javascripts/blob/template_selectors/gitignore_selector.js
@@ -18,7 +18,6 @@ export default class BlobGitignoreSelector extends FileTemplateSelector {
data: this.$dropdown.data('data'),
filterable: true,
selectable: true,
- toggleLabel: item => item.name,
search: {
fields: ['name'],
},
diff --git a/app/assets/javascripts/blob/template_selectors/license_selector.js b/app/assets/javascripts/blob/template_selectors/license_selector.js
index d01ab9257d6..f4041835a7d 100644
--- a/app/assets/javascripts/blob/template_selectors/license_selector.js
+++ b/app/assets/javascripts/blob/template_selectors/license_selector.js
@@ -18,7 +18,6 @@ export default class BlobLicenseSelector extends FileTemplateSelector {
data: this.$dropdown.data('data'),
filterable: true,
selectable: true,
- toggleLabel: item => item.name,
search: {
fields: ['name'],
},
diff --git a/app/assets/javascripts/blob/template_selectors/type_selector.js b/app/assets/javascripts/blob/template_selectors/type_selector.js
index db3c144cbe3..cb4e1aaa9ac 100644
--- a/app/assets/javascripts/blob/template_selectors/type_selector.js
+++ b/app/assets/javascripts/blob/template_selectors/type_selector.js
@@ -16,7 +16,6 @@ export default class FileTemplateTypeSelector extends FileTemplateSelector {
data: this.config.dropdownData,
filterable: false,
selectable: true,
- toggleLabel: item => item.name,
clicked: options => this.mediator.selectTemplateTypeOptions(options),
text: item => item.name,
});
diff --git a/app/assets/javascripts/blob/viewer/index.js b/app/assets/javascripts/blob/viewer/index.js
index 9ea455069f3..07e4dde41d9 100644
--- a/app/assets/javascripts/blob/viewer/index.js
+++ b/app/assets/javascripts/blob/viewer/index.js
@@ -107,18 +107,18 @@ export default class BlobViewer {
toggleCopyButtonState() {
if (!this.copySourceBtn) return;
if (this.simpleViewer.getAttribute('data-loaded')) {
- this.copySourceBtn.setAttribute('title', __('Copy source to clipboard'));
+ this.copySourceBtn.setAttribute('title', __('Copy file contents'));
this.copySourceBtn.classList.remove('disabled');
} else if (this.activeViewer === this.simpleViewer) {
this.copySourceBtn.setAttribute(
'title',
- __('Wait for the source to load to copy it to the clipboard'),
+ __('Wait for the file to load to copy its contents'),
);
this.copySourceBtn.classList.add('disabled');
} else {
this.copySourceBtn.setAttribute(
'title',
- __('Switch to the source to copy it to the clipboard'),
+ __('Switch to the source to copy the file contents'),
);
this.copySourceBtn.classList.add('disabled');
}
diff --git a/app/assets/javascripts/boards/components/board_blank_state.vue b/app/assets/javascripts/boards/components/board_blank_state.vue
index 9f26337d153..9a1da810ad0 100644
--- a/app/assets/javascripts/boards/components/board_blank_state.vue
+++ b/app/assets/javascripts/boards/components/board_blank_state.vue
@@ -29,25 +29,25 @@ export default {
});
});
+ const loadListIssues = listObj => {
+ const list = boardsStore.findList('title', listObj.title);
+
+ if (!list) {
+ return null;
+ }
+
+ list.id = listObj.id;
+ list.label.id = listObj.label.id;
+ return list.getIssues().catch(() => {
+ // TODO: handle request error
+ });
+ };
+
// Save the labels
boardsStore
.generateDefaultLists()
.then(res => res.data)
- .then(data => {
- data.forEach(listObj => {
- const list = boardsStore.findList('title', listObj.title);
-
- if (!list) {
- return;
- }
-
- list.id = listObj.id;
- list.label.id = listObj.label.id;
- list.getIssues().catch(() => {
- // TODO: handle request error
- });
- });
- })
+ .then(data => Promise.all(data.map(loadListIssues)))
.catch(() => {
boardsStore.removeList(undefined, 'label');
Cookies.remove('issue_board_welcome_hidden', {
diff --git a/app/assets/javascripts/boards/components/board_card.vue b/app/assets/javascripts/boards/components/board_card.vue
index faf722f61af..12d68256598 100644
--- a/app/assets/javascripts/boards/components/board_card.vue
+++ b/app/assets/javascripts/boards/components/board_card.vue
@@ -42,12 +42,19 @@ export default {
return {
showDetail: false,
detailIssue: boardsStore.detail,
+ multiSelect: boardsStore.multiSelect,
};
},
computed: {
issueDetailVisible() {
return this.detailIssue.issue && this.detailIssue.issue.id === this.issue.id;
},
+ multiSelectVisible() {
+ return this.multiSelect.list.findIndex(issue => issue.id === this.issue.id) > -1;
+ },
+ canMultiSelect() {
+ return gon.features && gon.features.multiSelectBoard;
+ },
},
methods: {
mouseDown() {
@@ -58,14 +65,20 @@ export default {
},
showIssue(e) {
if (e.target.classList.contains('js-no-trigger')) return;
-
if (this.showDetail) {
this.showDetail = false;
+ // If CMD or CTRL is clicked
+ const isMultiSelect = this.canMultiSelect && (e.ctrlKey || e.metaKey);
+
if (boardsStore.detail.issue && boardsStore.detail.issue.id === this.issue.id) {
- eventHub.$emit('clearDetailIssue');
+ eventHub.$emit('clearDetailIssue', isMultiSelect);
+
+ if (isMultiSelect) {
+ eventHub.$emit('newDetailIssue', this.issue, isMultiSelect);
+ }
} else {
- eventHub.$emit('newDetailIssue', this.issue);
+ eventHub.$emit('newDetailIssue', this.issue, isMultiSelect);
boardsStore.setListDetail(this.list);
}
}
@@ -77,6 +90,7 @@ export default {
<template>
<li
:class="{
+ 'multi-select': multiSelectVisible,
'user-can-drag': !disabled && issue.id,
'is-disabled': disabled || !issue.id,
'is-active': issueDetailVisible,
diff --git a/app/assets/javascripts/boards/components/board_form.vue b/app/assets/javascripts/boards/components/board_form.vue
index ebf48cee2ae..34560560756 100644
--- a/app/assets/javascripts/boards/components/board_form.vue
+++ b/app/assets/javascripts/boards/components/board_form.vue
@@ -194,6 +194,7 @@ export default {
ref="name"
v-model="board.name"
class="form-control"
+ data-qa-selector="board_name_field"
type="text"
:placeholder="__('Enter board name')"
@keyup.enter="submit"
diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue
index de41698ca04..1273fcc6a91 100644
--- a/app/assets/javascripts/boards/components/board_list.vue
+++ b/app/assets/javascripts/boards/components/board_list.vue
@@ -1,12 +1,22 @@
<script>
-/* eslint-disable @gitlab/vue-i18n/no-bare-strings */
-import Sortable from 'sortablejs';
+import { Sortable, MultiDrag } from 'sortablejs';
import { GlLoadingIcon } from '@gitlab/ui';
+import _ from 'underscore';
import boardNewIssue from './board_new_issue.vue';
import boardCard from './board_card.vue';
import eventHub from '../eventhub';
import boardsStore from '../stores/boards_store';
-import { getBoardSortableDefaultOptions, sortableStart } from '../mixins/sortable_default_options';
+import { sprintf, __ } from '~/locale';
+import createFlash from '~/flash';
+import {
+ getBoardSortableDefaultOptions,
+ sortableStart,
+ sortableEnd,
+} from '../mixins/sortable_default_options';
+
+if (gon.features && gon.features.multiSelectBoard) {
+ Sortable.mount(new MultiDrag());
+}
export default {
name: 'BoardList',
@@ -54,6 +64,14 @@ export default {
showIssueForm: false,
};
},
+ computed: {
+ paginatedIssueText() {
+ return sprintf(__('Showing %{pageSize} of %{total} issues'), {
+ pageSize: this.list.issues.length,
+ total: this.list.issuesSize,
+ });
+ },
+ },
watch: {
filters: {
handler() {
@@ -87,11 +105,20 @@ export default {
eventHub.$on(`scroll-board-list-${this.list.id}`, this.scrollToTop);
},
mounted() {
+ const multiSelectOpts = {};
+ if (gon.features && gon.features.multiSelectBoard) {
+ multiSelectOpts.multiDrag = true;
+ multiSelectOpts.selectedClass = 'js-multi-select';
+ multiSelectOpts.animation = 500;
+ }
+
const options = getBoardSortableDefaultOptions({
scroll: true,
disabled: this.disabled,
filter: '.board-list-count, .is-disabled',
dataIdAttr: 'data-issue-id',
+ removeCloneOnHide: false,
+ ...multiSelectOpts,
group: {
name: 'issues',
/**
@@ -145,25 +172,66 @@ export default {
card.showDetail = false;
const { list } = card;
+
const issue = list.findIssue(Number(e.item.dataset.issueId));
+
boardsStore.startMoving(list, issue);
sortableStart();
},
onAdd: e => {
- boardsStore.moveIssueToList(
- boardsStore.moving.list,
- this.list,
- boardsStore.moving.issue,
- e.newIndex,
- );
+ const { items = [], newIndicies = [] } = e;
+ if (items.length) {
+ // Not using e.newIndex here instead taking a min of all
+ // the newIndicies. Basically we have to find that during
+ // a drop what is the index we're going to start putting
+ // all the dropped elements from.
+ const newIndex = Math.min(...newIndicies.map(obj => obj.index).filter(i => i !== -1));
+ const issues = items.map(item =>
+ boardsStore.moving.list.findIssue(Number(item.dataset.issueId)),
+ );
- this.$nextTick(() => {
- e.item.remove();
- });
+ boardsStore.moveMultipleIssuesToList({
+ listFrom: boardsStore.moving.list,
+ listTo: this.list,
+ issues,
+ newIndex,
+ });
+ } else {
+ boardsStore.moveIssueToList(
+ boardsStore.moving.list,
+ this.list,
+ boardsStore.moving.issue,
+ e.newIndex,
+ );
+ this.$nextTick(() => {
+ e.item.remove();
+ });
+ }
},
onUpdate: e => {
const sortedArray = this.sortable.toArray().filter(id => id !== '-1');
+
+ const { items = [], newIndicies = [], oldIndicies = [] } = e;
+ if (items.length) {
+ const newIndex = Math.min(...newIndicies.map(obj => obj.index));
+ const issues = items.map(item =>
+ boardsStore.moving.list.findIssue(Number(item.dataset.issueId)),
+ );
+ boardsStore.moveMultipleIssuesInList({
+ list: this.list,
+ issues,
+ oldIndicies: oldIndicies.map(obj => obj.index),
+ newIndex,
+ idArray: sortedArray,
+ });
+ e.items.forEach(el => {
+ Sortable.utils.deselect(el);
+ });
+ boardsStore.clearMultiSelect();
+ return;
+ }
+
boardsStore.moveIssueInList(
this.list,
boardsStore.moving.issue,
@@ -172,9 +240,133 @@ export default {
sortedArray,
);
},
+ onEnd: e => {
+ const { items = [], clones = [], to } = e;
+
+ // This is not a multi select operation
+ if (!items.length && !clones.length) {
+ sortableEnd();
+ return;
+ }
+
+ let toList;
+ if (to) {
+ const containerEl = to.closest('.js-board-list');
+ toList = boardsStore.findList('id', Number(containerEl.dataset.board));
+ }
+
+ /**
+ * onEnd is called irrespective if the cards were moved in the
+ * same list or the other list. Don't remove items if it's same list.
+ */
+ const isSameList = toList && toList.id === this.list.id;
+
+ if (toList && !isSameList && boardsStore.shouldRemoveIssue(this.list, toList)) {
+ const issues = items.map(item => this.list.findIssue(Number(item.dataset.issueId)));
+
+ if (_.compact(issues).length && !boardsStore.issuesAreContiguous(this.list, issues)) {
+ const indexes = [];
+ const ids = this.list.issues.map(i => i.id);
+ issues.forEach(issue => {
+ const index = ids.indexOf(issue.id);
+ if (index > -1) {
+ indexes.push(index);
+ }
+ });
+
+ // Descending sort because splice would cause index discrepancy otherwise
+ const sortedIndexes = indexes.sort((a, b) => (a < b ? 1 : -1));
+
+ sortedIndexes.forEach(i => {
+ /**
+ * **setTimeout and splice each element one-by-one in a loop
+ * is intended.**
+ *
+ * The problem here is all the indexes are in the list but are
+ * non-contiguous. Due to that, when we splice all the indexes,
+ * at once, Vue -- during a re-render -- is unable to find reference
+ * nodes and the entire app crashes.
+ *
+ * If the indexes are contiguous, this piece of code is not
+ * executed. If it is, this is a possible regression. Only when
+ * issue indexes are far apart, this logic should ever kick in.
+ */
+ setTimeout(() => {
+ this.list.issues.splice(i, 1);
+ }, 0);
+ });
+ }
+ }
+
+ if (!toList) {
+ createFlash(__('Something went wrong while performing the action.'));
+ }
+
+ if (!isSameList) {
+ boardsStore.clearMultiSelect();
+
+ // Since Vue's list does not re-render the same keyed item, we'll
+ // remove `multi-select` class to express it's unselected
+ if (clones && clones.length) {
+ clones.forEach(el => el.classList.remove('multi-select'));
+ }
+
+ // Due to some bug which I am unable to figure out
+ // Sortable does not deselect some pending items from the
+ // source list.
+ // We'll just do it forcefully here.
+ Array.from(document.querySelectorAll('.js-multi-select') || []).forEach(item => {
+ Sortable.utils.deselect(item);
+ });
+
+ /**
+ * SortableJS leaves all the moving items "as is" on the DOM.
+ * Vue picks up and rehydrates the DOM, but we need to explicity
+ * remove the "trash" items from the DOM.
+ *
+ * This is in parity to the logic on single item move from a list/in
+ * a list. For reference, look at the implementation of onAdd method.
+ */
+ this.$nextTick(() => {
+ if (items && items.length) {
+ items.forEach(item => {
+ item.remove();
+ });
+ }
+ });
+ }
+ sortableEnd();
+ },
onMove(e) {
return !e.related.classList.contains('board-list-count');
},
+ onSelect(e) {
+ const {
+ item: { classList },
+ } = e;
+
+ if (
+ classList &&
+ classList.contains('js-multi-select') &&
+ !classList.contains('multi-select')
+ ) {
+ Sortable.utils.deselect(e.item);
+ }
+ },
+ onDeselect: e => {
+ const {
+ item: { dataset, classList },
+ } = e;
+
+ if (
+ classList &&
+ classList.contains('multi-select') &&
+ !classList.contains('js-multi-select')
+ ) {
+ const issue = this.list.findIssue(Number(dataset.issueId));
+ boardsStore.toggleMultiSelect(issue);
+ }
+ },
});
this.sortable = Sortable.create(this.$refs.list, options);
@@ -260,7 +452,7 @@ export default {
<li v-if="showCount" class="board-list-count text-center" data-issue-id="-1">
<gl-loading-icon v-show="list.loadingMore" label="Loading more issues" />
<span v-if="list.issues.length === list.issuesSize">{{ __('Showing all issues') }}</span>
- <span v-else> Showing {{ list.issues.length }} of {{ list.issuesSize }} issues </span>
+ <span v-else>{{ paginatedIssueText }}</span>
</li>
</ul>
</div>
diff --git a/app/assets/javascripts/boards/components/boards_selector.vue b/app/assets/javascripts/boards/components/boards_selector.vue
index ebb2f5b23e4..334c162954e 100644
--- a/app/assets/javascripts/boards/components/boards_selector.vue
+++ b/app/assets/javascripts/boards/components/boards_selector.vue
@@ -305,13 +305,18 @@ export default {
<div v-if="canAdminBoard">
<gl-dropdown-divider />
- <gl-dropdown-item v-if="multipleIssueBoardsAvailable" @click.prevent="showPage('new')">
+ <gl-dropdown-item
+ v-if="multipleIssueBoardsAvailable"
+ data-qa-selector="create_new_board_button"
+ @click.prevent="showPage('new')"
+ >
{{ s__('IssueBoards|Create new board') }}
</gl-dropdown-item>
<gl-dropdown-item
v-if="showDelete"
class="text-danger"
+ data-qa-selector="delete_board_button"
@click.prevent="showPage('delete')"
>
{{ s__('IssueBoards|Delete board') }}
diff --git a/app/assets/javascripts/boards/components/issue_card_inner.vue b/app/assets/javascripts/boards/components/issue_card_inner.vue
index 7f554c99669..40d75d53f75 100644
--- a/app/assets/javascripts/boards/components/issue_card_inner.vue
+++ b/app/assets/javascripts/boards/components/issue_card_inner.vue
@@ -99,7 +99,10 @@ export default {
return !groupId ? referencePath.split('#')[0] : null;
},
orderedLabels() {
- return _.sortBy(this.issue.labels, 'title');
+ return _.chain(this.issue.labels)
+ .filter(this.isNonListLabel)
+ .sortBy('title')
+ .value();
},
helpLink() {
return boardsStore.scopedLabels.helpLink;
@@ -130,6 +133,9 @@ export default {
if (!label.id) return false;
return true;
},
+ isNonListLabel(label) {
+ return label.id && !(this.list.type === 'label' && this.list.title === label.title);
+ },
filterByLabel(label) {
if (!this.updateFilters) return;
const labelTitle = encodeURIComponent(label.title);
@@ -167,7 +173,7 @@ export default {
</h4>
</div>
<div v-if="showLabelFooter" class="board-card-labels prepend-top-4 d-flex flex-wrap">
- <template v-for="label in orderedLabels" v-if="showLabel(label)">
+ <template v-for="label in orderedLabels">
<issue-card-inner-scoped-label
v-if="showScopedLabel(label)"
:key="label.id"
@@ -212,7 +218,7 @@ export default {
<issue-due-date v-if="issue.dueDate" :date="issue.dueDate" />
<issue-time-estimate v-if="issue.timeEstimate" :estimate="issue.timeEstimate" />
<issue-card-weight
- v-if="issue.weight"
+ v-if="validIssueWeight"
:weight="issue.weight"
@click="filterByWeight(issue.weight)"
/>
diff --git a/app/assets/javascripts/boards/components/issue_time_estimate.vue b/app/assets/javascripts/boards/components/issue_time_estimate.vue
index 3385aad5b11..5c33ba9461c 100644
--- a/app/assets/javascripts/boards/components/issue_time_estimate.vue
+++ b/app/assets/javascripts/boards/components/issue_time_estimate.vue
@@ -34,7 +34,7 @@ export default {
<template>
<span>
<span ref="issueTimeEstimate" class="board-card-info card-number">
- <icon name="hourglass" css-classes="board-card-info-icon align-top" /><time
+ <icon name="hourglass" class="board-card-info-icon align-top" /><time
class="board-card-info-text"
>{{ timeEstimate }}</time
>
diff --git a/app/assets/javascripts/boards/constants.js b/app/assets/javascripts/boards/constants.js
new file mode 100644
index 00000000000..3c66c7a0660
--- /dev/null
+++ b/app/assets/javascripts/boards/constants.js
@@ -0,0 +1,11 @@
+export const ListType = {
+ assignee: 'assignee',
+ milestone: 'milestone',
+ backlog: 'backlog',
+ closed: 'closed',
+ label: 'label',
+};
+
+export default {
+ ListType,
+};
diff --git a/app/assets/javascripts/boards/index.js b/app/assets/javascripts/boards/index.js
index 3bded4a3258..befca70eeae 100644
--- a/app/assets/javascripts/boards/index.js
+++ b/app/assets/javascripts/boards/index.js
@@ -22,7 +22,6 @@ import Board from 'ee_else_ce/boards/components/board';
import BoardSidebar from 'ee_else_ce/boards/components/board_sidebar';
import initNewListDropdown from 'ee_else_ce/boards/components/new_list_dropdown';
import BoardAddIssuesModal from '~/boards/components/modal/index.vue';
-import '~/vue_shared/vue_resource_interceptor';
import {
NavigationType,
convertObjectPropsToCamelCase,
@@ -147,7 +146,7 @@ export default () => {
updateTokens() {
this.filterManager.updateTokens();
},
- updateDetailIssue(newIssue) {
+ updateDetailIssue(newIssue, multiSelect = false) {
const { sidebarInfoEndpoint } = newIssue;
if (sidebarInfoEndpoint && newIssue.subscribed === undefined) {
newIssue.setFetchingState('subscriptions', true);
@@ -186,9 +185,23 @@ export default () => {
});
}
+ if (multiSelect) {
+ boardsStore.toggleMultiSelect(newIssue);
+
+ if (boardsStore.detail.issue) {
+ boardsStore.clearDetailIssue();
+ return;
+ }
+
+ return;
+ }
+
boardsStore.setIssueDetail(newIssue);
},
- clearDetailIssue() {
+ clearDetailIssue(multiSelect = false) {
+ if (multiSelect) {
+ boardsStore.clearMultiSelect();
+ }
boardsStore.clearDetailIssue();
},
toggleSubscription(id) {
diff --git a/app/assets/javascripts/boards/mixins/issue_card_inner.js b/app/assets/javascripts/boards/mixins/issue_card_inner.js
index 8000237da6d..04e971b756d 100644
--- a/app/assets/javascripts/boards/mixins/issue_card_inner.js
+++ b/app/assets/javascripts/boards/mixins/issue_card_inner.js
@@ -1,4 +1,9 @@
export default {
+ computed: {
+ validIssueWeight() {
+ return false;
+ },
+ },
methods: {
filterByWeight() {},
},
diff --git a/app/assets/javascripts/boards/models/list.js b/app/assets/javascripts/boards/models/list.js
index b3e56a34c28..1e213c324eb 100644
--- a/app/assets/javascripts/boards/models/list.js
+++ b/app/assets/javascripts/boards/models/list.js
@@ -5,6 +5,7 @@ import ListLabel from './label';
import ListAssignee from './assignee';
import ListIssue from 'ee_else_ce/boards/models/issue';
import { urlParamsToObject } from '~/lib/utils/common_utils';
+import flash from '~/flash';
import boardsStore from '../stores/boards_store';
import ListMilestone from './milestone';
@@ -176,6 +177,53 @@ class List {
});
}
+ addMultipleIssues(issues, listFrom, newIndex) {
+ let moveBeforeId = null;
+ let moveAfterId = null;
+
+ const listHasIssues = issues.every(issue => this.findIssue(issue.id));
+
+ if (!listHasIssues) {
+ if (newIndex !== undefined) {
+ if (this.issues[newIndex - 1]) {
+ moveBeforeId = this.issues[newIndex - 1].id;
+ }
+
+ if (this.issues[newIndex]) {
+ moveAfterId = this.issues[newIndex].id;
+ }
+
+ this.issues.splice(newIndex, 0, ...issues);
+ } else {
+ this.issues.push(...issues);
+ }
+
+ if (this.label) {
+ issues.forEach(issue => issue.addLabel(this.label));
+ }
+
+ if (this.assignee) {
+ if (listFrom && listFrom.type === 'assignee') {
+ issues.forEach(issue => issue.removeAssignee(listFrom.assignee));
+ }
+ issues.forEach(issue => issue.addAssignee(this.assignee));
+ }
+
+ if (IS_EE && this.milestone) {
+ if (listFrom && listFrom.type === 'milestone') {
+ issues.forEach(issue => issue.removeMilestone(listFrom.milestone));
+ }
+ issues.forEach(issue => issue.addMilestone(this.milestone));
+ }
+
+ if (listFrom) {
+ this.issuesSize += issues.length;
+
+ this.updateMultipleIssues(issues, listFrom, moveBeforeId, moveAfterId);
+ }
+ }
+ }
+
addIssue(issue, listFrom, newIndex) {
let moveBeforeId = null;
let moveAfterId = null;
@@ -230,6 +278,23 @@ class List {
});
}
+ moveMultipleIssues({ issues, oldIndicies, newIndex, moveBeforeId, moveAfterId }) {
+ oldIndicies.reverse().forEach(index => {
+ this.issues.splice(index, 1);
+ });
+ this.issues.splice(newIndex, 0, ...issues);
+
+ gl.boardService
+ .moveMultipleIssues({
+ ids: issues.map(issue => issue.id),
+ fromListId: null,
+ toListId: null,
+ moveBeforeId,
+ moveAfterId,
+ })
+ .catch(() => flash(__('Something went wrong while moving issues.')));
+ }
+
updateIssueLabel(issue, listFrom, moveBeforeId, moveAfterId) {
gl.boardService
.moveIssue(issue.id, listFrom.id, this.id, moveBeforeId, moveAfterId)
@@ -238,10 +303,37 @@ class List {
});
}
+ updateMultipleIssues(issues, listFrom, moveBeforeId, moveAfterId) {
+ gl.boardService
+ .moveMultipleIssues({
+ ids: issues.map(issue => issue.id),
+ fromListId: listFrom.id,
+ toListId: this.id,
+ moveBeforeId,
+ moveAfterId,
+ })
+ .catch(() => flash(__('Something went wrong while moving issues.')));
+ }
+
findIssue(id) {
return this.issues.find(issue => issue.id === id);
}
+ removeMultipleIssues(removeIssues) {
+ const ids = removeIssues.map(issue => issue.id);
+
+ this.issues = this.issues.filter(issue => {
+ const matchesRemove = ids.includes(issue.id);
+
+ if (matchesRemove) {
+ this.issuesSize -= 1;
+ issue.removeLabel(this.label);
+ }
+
+ return !matchesRemove;
+ });
+ }
+
removeIssue(removeIssue) {
this.issues = this.issues.filter(issue => {
const matchesRemove = removeIssue.id === issue.id;
diff --git a/app/assets/javascripts/boards/services/board_service.js b/app/assets/javascripts/boards/services/board_service.js
index 0d11db89511..03369febb4a 100644
--- a/app/assets/javascripts/boards/services/board_service.js
+++ b/app/assets/javascripts/boards/services/board_service.js
@@ -48,6 +48,16 @@ export default class BoardService {
return boardsStore.moveIssue(id, fromListId, toListId, moveBeforeId, moveAfterId);
}
+ moveMultipleIssues({
+ ids,
+ fromListId = null,
+ toListId = null,
+ moveBeforeId = null,
+ moveAfterId = null,
+ }) {
+ return boardsStore.moveMultipleIssues({ ids, fromListId, toListId, moveBeforeId, moveAfterId });
+ }
+
newIssue(id, issue) {
return boardsStore.newIssue(id, issue);
}
diff --git a/app/assets/javascripts/boards/stores/boards_store.js b/app/assets/javascripts/boards/stores/boards_store.js
index 6da1cca9628..8b737d1dab0 100644
--- a/app/assets/javascripts/boards/stores/boards_store.js
+++ b/app/assets/javascripts/boards/stores/boards_store.js
@@ -11,6 +11,7 @@ import { __ } from '~/locale';
import axios from '~/lib/utils/axios_utils';
import { mergeUrlParams } from '~/lib/utils/url_utility';
import eventHub from '../eventhub';
+import { ListType } from '../constants';
const boardsStore = {
disabled: false,
@@ -39,6 +40,7 @@ const boardsStore = {
issue: {},
list: {},
},
+ multiSelect: { list: [] },
setEndpoints({ boardsEndpoint, listsEndpoint, bulkUpdatePath, boardId, recentBoardsEndpoint }) {
const listsEndpointGenerate = `${listsEndpoint}/generate.json`;
@@ -51,7 +53,6 @@ const boardsStore = {
recentBoardsEndpoint: `${recentBoardsEndpoint}.json`,
};
},
-
create() {
this.state.lists = [];
this.filter.path = getUrlParamsArray().join('&');
@@ -134,6 +135,107 @@ const boardsStore = {
Object.assign(this.moving, { list, issue });
},
+ moveMultipleIssuesToList({ listFrom, listTo, issues, newIndex }) {
+ const issueTo = issues.map(issue => listTo.findIssue(issue.id));
+ const issueLists = _.flatten(issues.map(issue => issue.getLists()));
+ const listLabels = issueLists.map(list => list.label);
+
+ const hasMoveableIssues = _.compact(issueTo).length > 0;
+
+ if (!hasMoveableIssues) {
+ // Check if target list assignee is already present in this issue
+ if (
+ listTo.type === ListType.assignee &&
+ listFrom.type === ListType.assignee &&
+ issues.some(issue => issue.findAssignee(listTo.assignee))
+ ) {
+ const targetIssues = issues.map(issue => listTo.findIssue(issue.id));
+ targetIssues.forEach(targetIssue => targetIssue.removeAssignee(listFrom.assignee));
+ } else if (listTo.type === 'milestone') {
+ const currentMilestones = issues.map(issue => issue.milestone);
+ const currentLists = this.state.lists
+ .filter(list => list.type === 'milestone' && list.id !== listTo.id)
+ .filter(list =>
+ list.issues.some(listIssue => issues.some(issue => listIssue.id === issue.id)),
+ );
+
+ issues.forEach(issue => {
+ currentMilestones.forEach(milestone => {
+ issue.removeMilestone(milestone);
+ });
+ });
+
+ issues.forEach(issue => {
+ issue.addMilestone(listTo.milestone);
+ });
+
+ currentLists.forEach(currentList => {
+ issues.forEach(issue => {
+ currentList.removeIssue(issue);
+ });
+ });
+
+ listTo.addMultipleIssues(issues, listFrom, newIndex);
+ } else {
+ // Add to new lists issues if it doesn't already exist
+ listTo.addMultipleIssues(issues, listFrom, newIndex);
+ }
+ } else {
+ listTo.updateMultipleIssues(issues, listFrom);
+ issues.forEach(issue => {
+ issue.removeLabel(listFrom.label);
+ });
+ }
+
+ if (listTo.type === ListType.closed && listFrom.type !== ListType.backlog) {
+ issueLists.forEach(list => {
+ issues.forEach(issue => {
+ list.removeIssue(issue);
+ });
+ });
+
+ issues.forEach(issue => {
+ issue.removeLabels(listLabels);
+ });
+ } else if (listTo.type === ListType.backlog && listFrom.type === ListType.assignee) {
+ issues.forEach(issue => {
+ issue.removeAssignee(listFrom.assignee);
+ });
+ issueLists.forEach(list => {
+ issues.forEach(issue => {
+ list.removeIssue(issue);
+ });
+ });
+ } else if (listTo.type === ListType.backlog && listFrom.type === ListType.milestone) {
+ issues.forEach(issue => {
+ issue.removeMilestone(listFrom.milestone);
+ });
+ issueLists.forEach(list => {
+ issues.forEach(issue => {
+ list.removeIssue(issue);
+ });
+ });
+ } else if (
+ this.shouldRemoveIssue(listFrom, listTo) &&
+ this.issuesAreContiguous(listFrom, issues)
+ ) {
+ listFrom.removeMultipleIssues(issues);
+ }
+ },
+
+ issuesAreContiguous(list, issues) {
+ // When there's only 1 issue selected, we can return early.
+ if (issues.length === 1) return true;
+
+ // Create list of ids for issues involved.
+ const listIssueIds = list.issues.map(issue => issue.id);
+ const movedIssueIds = issues.map(issue => issue.id);
+
+ // Check if moved issue IDs is sub-array
+ // of source list issue IDs (i.e. contiguous selection).
+ return listIssueIds.join('|').includes(movedIssueIds.join('|'));
+ },
+
moveIssueToList(listFrom, listTo, issue, newIndex) {
const issueTo = listTo.findIssue(issue.id);
const issueLists = issue.getLists();
@@ -195,6 +297,17 @@ const boardsStore = {
list.moveIssue(issue, oldIndex, newIndex, beforeId, afterId);
},
+ moveMultipleIssuesInList({ list, issues, oldIndicies, newIndex, idArray }) {
+ const beforeId = parseInt(idArray[newIndex - 1], 10) || null;
+ const afterId = parseInt(idArray[newIndex + issues.length], 10) || null;
+ list.moveMultipleIssues({
+ issues,
+ oldIndicies,
+ newIndex,
+ moveBeforeId: beforeId,
+ moveAfterId: afterId,
+ });
+ },
findList(key, val, type = 'label') {
const filteredList = this.state.lists.filter(list => {
const byType = type
@@ -260,6 +373,10 @@ const boardsStore = {
}`;
},
+ generateMultiDragPath(boardId) {
+ return `${gon.relative_url_root}/-/boards/${boardId ? `${boardId}` : ''}/issues/bulk_move`;
+ },
+
all() {
return axios.get(this.state.endpoints.listsEndpoint);
},
@@ -309,6 +426,16 @@ const boardsStore = {
});
},
+ moveMultipleIssues({ ids, fromListId, toListId, moveBeforeId, moveAfterId }) {
+ return axios.put(this.generateMultiDragPath(this.state.endpoints.boardId), {
+ from_list_id: fromListId,
+ to_list_id: toListId,
+ move_before_id: moveBeforeId,
+ move_after_id: moveAfterId,
+ ids,
+ });
+ },
+
newIssue(id, issue) {
return axios.post(this.generateIssuesPath(id), {
issue,
@@ -379,6 +506,25 @@ const boardsStore = {
setCurrentBoard(board) {
this.state.currentBoard = board;
},
+
+ toggleMultiSelect(issue) {
+ const selectedIssueIds = this.multiSelect.list.map(issue => issue.id);
+ const index = selectedIssueIds.indexOf(issue.id);
+
+ if (index === -1) {
+ this.multiSelect.list.push(issue);
+ return;
+ }
+
+ this.multiSelect.list = [
+ ...this.multiSelect.list.slice(0, index),
+ ...this.multiSelect.list.slice(index + 1),
+ ];
+ },
+
+ clearMultiSelect() {
+ this.multiSelect.list = [];
+ },
};
BoardsStoreEE.initEESpecific(boardsStore);
diff --git a/app/assets/javascripts/build_artifacts.js b/app/assets/javascripts/build_artifacts.js
index b2c88e8c14e..2955f0f014b 100644
--- a/app/assets/javascripts/build_artifacts.js
+++ b/app/assets/javascripts/build_artifacts.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, prefer-arrow-callback */
+/* eslint-disable func-names */
import $ from 'jquery';
import { visitUrl } from './lib/utils/url_utility';
@@ -12,11 +12,11 @@ export default class BuildArtifacts {
}
// eslint-disable-next-line class-methods-use-this
disablePropagation() {
- $('.top-block').on('click', '.download', function(e) {
- return e.stopPropagation();
+ $('.top-block').on('click', '.download', e => {
+ e.stopPropagation();
});
- return $('.tree-holder').on('click', 'tr[data-link] a', function(e) {
- return e.stopImmediatePropagation();
+ return $('.tree-holder').on('click', 'tr[data-link] a', e => {
+ e.stopImmediatePropagation();
});
}
// eslint-disable-next-line class-methods-use-this
diff --git a/app/assets/javascripts/clusters/clusters_bundle.js b/app/assets/javascripts/clusters/clusters_bundle.js
index d386960f3b6..7ea8901ecbb 100644
--- a/app/assets/javascripts/clusters/clusters_bundle.js
+++ b/app/assets/javascripts/clusters/clusters_bundle.js
@@ -41,6 +41,8 @@ export default class Clusters {
managePrometheusPath,
clusterEnvironmentsPath,
hasRbac,
+ providerType,
+ preInstalledKnative,
clusterType,
clusterStatus,
clusterStatusReason,
@@ -50,6 +52,7 @@ export default class Clusters {
environmentsHelpPath,
clustersHelpPath,
deployBoardsHelpPath,
+ cloudRunHelpPath,
clusterId,
} = document.querySelector('.js-edit-cluster-form').dataset;
@@ -65,10 +68,13 @@ export default class Clusters {
environmentsHelpPath,
clustersHelpPath,
deployBoardsHelpPath,
+ cloudRunHelpPath,
);
this.store.setManagePrometheusPath(managePrometheusPath);
this.store.updateStatus(clusterStatus);
this.store.updateStatusReason(clusterStatusReason);
+ this.store.updateProviderType(providerType);
+ this.store.updatePreInstalledKnative(preInstalledKnative);
this.store.updateRbac(hasRbac);
this.service = new ClustersService({
endpoint: statusPath,
@@ -153,6 +159,9 @@ export default class Clusters {
ingressHelpPath: this.state.ingressHelpPath,
managePrometheusPath: this.state.managePrometheusPath,
ingressDnsHelpPath: this.state.ingressDnsHelpPath,
+ cloudRunHelpPath: this.state.cloudRunHelpPath,
+ providerType: this.state.providerType,
+ preInstalledKnative: this.state.preInstalledKnative,
rbac: this.state.rbac,
},
});
diff --git a/app/assets/javascripts/clusters/components/application_row.vue b/app/assets/javascripts/clusters/components/application_row.vue
index 64364092016..c6c8dc6352c 100644
--- a/app/assets/javascripts/clusters/components/application_row.vue
+++ b/app/assets/javascripts/clusters/components/application_row.vue
@@ -78,6 +78,10 @@ export default {
required: false,
default: false,
},
+ installedVia: {
+ type: String,
+ required: false,
+ },
version: {
type: String,
required: false,
@@ -311,6 +315,11 @@ export default {
>
<span v-else class="js-cluster-application-title">{{ title }}</span>
</strong>
+ <span
+ v-if="installedVia"
+ class="js-cluster-application-installed-via"
+ v-html="installedVia"
+ ></span>
<slot name="description"></slot>
<div v-if="hasError" class="cluster-application-error text-danger prepend-top-10">
<p class="js-cluster-application-general-error-message append-bottom-0">
diff --git a/app/assets/javascripts/clusters/components/applications.vue b/app/assets/javascripts/clusters/components/applications.vue
index 27959898fb7..b95f97077f6 100644
--- a/app/assets/javascripts/clusters/components/applications.vue
+++ b/app/assets/javascripts/clusters/components/applications.vue
@@ -16,7 +16,7 @@ import { s__, sprintf } from '../../locale';
import applicationRow from './application_row.vue';
import clipboardButton from '../../vue_shared/components/clipboard_button.vue';
import KnativeDomainEditor from './knative_domain_editor.vue';
-import { CLUSTER_TYPE, APPLICATION_STATUS, INGRESS } from '../constants';
+import { CLUSTER_TYPE, PROVIDER_TYPE, APPLICATION_STATUS, INGRESS } from '../constants';
import LoadingButton from '~/vue_shared/components/loading_button.vue';
import eventHub from '~/clusters/event_hub';
@@ -54,11 +54,26 @@ export default {
required: false,
default: '',
},
+ cloudRunHelpPath: {
+ type: String,
+ required: false,
+ default: '',
+ },
managePrometheusPath: {
type: String,
required: false,
default: '',
},
+ providerType: {
+ type: String,
+ required: false,
+ default: '',
+ },
+ preInstalledKnative: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
rbac: {
type: Boolean,
required: false,
@@ -156,6 +171,25 @@ export default {
knative() {
return this.applications.knative;
},
+ cloudRun() {
+ return this.providerType === PROVIDER_TYPE.GCP && this.preInstalledKnative;
+ },
+ installedVia() {
+ if (this.cloudRun) {
+ return sprintf(
+ _.escape(s__(`ClusterIntegration|installed via %{installed_via}`)),
+ {
+ installed_via: `<a href="${
+ this.cloudRunHelpPath
+ }" target="_blank" rel="noopener noreferrer">${_.escape(
+ s__('ClusterIntegration|Cloud Run'),
+ )}</a>`,
+ },
+ false,
+ );
+ }
+ return null;
+ },
},
created() {
this.helmInstallIllustration = helmInstallIllustration;
@@ -260,7 +294,7 @@ export default {
<span class="input-group-append">
<clipboard-button
:text="ingressExternalEndpoint"
- :title="s__('ClusterIntegration|Copy Ingress Endpoint to clipboard')"
+ :title="s__('ClusterIntegration|Copy Ingress Endpoint')"
class="input-group-text js-clipboard-btn"
/>
</span>
@@ -438,7 +472,7 @@ export default {
<span class="input-group-btn">
<clipboard-button
:text="jupyterHostname"
- :title="s__('ClusterIntegration|Copy Jupyter Hostname to clipboard')"
+ :title="s__('ClusterIntegration|Copy Jupyter Hostname')"
class="js-clipboard-btn"
/>
</span>
@@ -468,6 +502,7 @@ export default {
:installed="applications.knative.installed"
:install-failed="applications.knative.installFailed"
:install-application-request-params="{ hostname: applications.knative.hostname }"
+ :installed-via="installedVia"
:uninstallable="applications.knative.uninstallable"
:uninstall-successful="applications.knative.uninstallSuccessful"
:uninstall-failed="applications.knative.uninstallFailed"
@@ -499,7 +534,7 @@ export default {
</p>
<knative-domain-editor
- v-if="knative.installed || (helmInstalled && rbac)"
+ v-if="(knative.installed || (helmInstalled && rbac)) && !preInstalledKnative"
:knative="knative"
:ingress-dns-help-path="ingressDnsHelpPath"
@save="saveKnativeDomain"
diff --git a/app/assets/javascripts/clusters/components/knative_domain_editor.vue b/app/assets/javascripts/clusters/components/knative_domain_editor.vue
index e26ef135bc5..25347b11b6c 100644
--- a/app/assets/javascripts/clusters/components/knative_domain_editor.vue
+++ b/app/assets/javascripts/clusters/components/knative_domain_editor.vue
@@ -103,7 +103,7 @@ export default {
<span class="input-group-append">
<clipboard-button
:text="knativeExternalEndpoint"
- :title="s__('ClusterIntegration|Copy Knative Endpoint to clipboard')"
+ :title="s__('ClusterIntegration|Copy Knative Endpoint')"
class="input-group-text js-knative-endpoint-clipboard-btn"
/>
</span>
diff --git a/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue b/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue
index 4f60e543666..f1925c243f2 100644
--- a/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue
+++ b/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue
@@ -5,8 +5,14 @@ import trackUninstallButtonClickMixin from 'ee_else_ce/clusters/mixins/track_uni
import { HELM, INGRESS, CERT_MANAGER, PROMETHEUS, RUNNER, KNATIVE, JUPYTER } from '../constants';
const CUSTOM_APP_WARNING_TEXT = {
- [HELM]: s__(
- 'ClusterIntegration|The associated Tiller pod will be deleted and cannot be restored.',
+ [HELM]: sprintf(
+ s__(
+ 'ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored.',
+ ),
+ {
+ gitlabManagedAppsNamespace: '<code>gitlab-managed-apps</code>',
+ },
+ false,
),
[INGRESS]: s__(
'ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored.',
@@ -76,6 +82,7 @@ export default {
:modal-id="modalId"
:title="title"
@ok="confirmUninstall()"
- >{{ warningText }} {{ customAppWarningText }}</gl-modal
>
+ {{ warningText }} <span v-html="customAppWarningText"></span>
+ </gl-modal>
</template>
diff --git a/app/assets/javascripts/clusters/constants.js b/app/assets/javascripts/clusters/constants.js
index 8fd752092c9..c6e4b7951cf 100644
--- a/app/assets/javascripts/clusters/constants.js
+++ b/app/assets/javascripts/clusters/constants.js
@@ -5,6 +5,11 @@ export const CLUSTER_TYPE = {
PROJECT: 'project_type',
};
+// These need to match the available providers in app/models/clusters/providers/
+export const PROVIDER_TYPE = {
+ GCP: 'gcp',
+};
+
// These need to match what is returned from the server
export const APPLICATION_STATUS = {
NO_STATUS: null,
@@ -19,6 +24,7 @@ export const APPLICATION_STATUS = {
UNINSTALLING: 'uninstalling',
UNINSTALL_ERRORED: 'uninstall_errored',
ERROR: 'errored',
+ PRE_INSTALLED: 'pre_installed',
};
/*
@@ -29,6 +35,7 @@ export const APPLICATION_INSTALLED_STATUSES = [
APPLICATION_STATUS.INSTALLED,
APPLICATION_STATUS.UPDATING,
APPLICATION_STATUS.UNINSTALLING,
+ APPLICATION_STATUS.PRE_INSTALLED,
];
// These are only used client-side
diff --git a/app/assets/javascripts/clusters/services/application_state_machine.js b/app/assets/javascripts/clusters/services/application_state_machine.js
index 6e632519d8a..6bc4be7b93a 100644
--- a/app/assets/javascripts/clusters/services/application_state_machine.js
+++ b/app/assets/javascripts/clusters/services/application_state_machine.js
@@ -13,6 +13,7 @@ const {
UPDATE_ERRORED,
UNINSTALLING,
UNINSTALL_ERRORED,
+ PRE_INSTALLED,
} = APPLICATION_STATUS;
const applicationStateMachine = {
@@ -63,6 +64,9 @@ const applicationStateMachine = {
uninstallFailed: true,
},
},
+ [PRE_INSTALLED]: {
+ target: PRE_INSTALLED,
+ },
},
},
[NOT_INSTALLABLE]: {
@@ -123,6 +127,27 @@ const applicationStateMachine = {
},
},
},
+ [PRE_INSTALLED]: {
+ on: {
+ [UPDATE_EVENT]: {
+ target: UPDATING,
+ effects: {
+ updateFailed: false,
+ updateSuccessful: false,
+ },
+ },
+ [NOT_INSTALLABLE]: {
+ target: NOT_INSTALLABLE,
+ },
+ [UNINSTALL_EVENT]: {
+ target: UNINSTALLING,
+ effects: {
+ uninstallFailed: false,
+ uninstallSuccessful: false,
+ },
+ },
+ },
+ },
[UPDATING]: {
on: {
[UPDATED]: {
diff --git a/app/assets/javascripts/clusters/stores/clusters_store.js b/app/assets/javascripts/clusters/stores/clusters_store.js
index 5cddb4cc098..6464461ea0c 100644
--- a/app/assets/javascripts/clusters/stores/clusters_store.js
+++ b/app/assets/javascripts/clusters/stores/clusters_store.js
@@ -35,7 +35,10 @@ export default class ClusterStore {
environmentsHelpPath: null,
clustersHelpPath: null,
deployBoardsHelpPath: null,
+ cloudRunHelpPath: null,
status: null,
+ providerType: null,
+ preInstalledKnative: false,
rbac: false,
statusReason: null,
applications: {
@@ -95,6 +98,7 @@ export default class ClusterStore {
environmentsHelpPath,
clustersHelpPath,
deployBoardsHelpPath,
+ cloudRunHelpPath,
) {
this.state.helpPath = helpPath;
this.state.ingressHelpPath = ingressHelpPath;
@@ -102,6 +106,7 @@ export default class ClusterStore {
this.state.environmentsHelpPath = environmentsHelpPath;
this.state.clustersHelpPath = clustersHelpPath;
this.state.deployBoardsHelpPath = deployBoardsHelpPath;
+ this.state.cloudRunHelpPath = cloudRunHelpPath;
}
setManagePrometheusPath(managePrometheusPath) {
@@ -112,6 +117,14 @@ export default class ClusterStore {
this.state.status = status;
}
+ updateProviderType(providerType) {
+ this.state.providerType = providerType;
+ }
+
+ updatePreInstalledKnative(preInstalledKnative) {
+ this.state.preInstalledKnative = parseBoolean(preInstalledKnative);
+ }
+
updateRbac(rbac) {
this.state.rbac = parseBoolean(rbac);
}
diff --git a/app/assets/javascripts/commit/image_file.js b/app/assets/javascripts/commit/image_file.js
index 9454f760df8..6c04e0beb4d 100644
--- a/app/assets/javascripts/commit/image_file.js
+++ b/app/assets/javascripts/commit/image_file.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, prefer-arrow-callback, no-else-return, consistent-return, prefer-template, one-var, no-return-assign, no-unused-expressions, no-sequences */
+/* eslint-disable func-names, no-var, no-else-return, consistent-return, one-var, no-return-assign, no-unused-expressions, no-sequences */
import $ from 'jquery';
@@ -13,14 +13,14 @@ export default class ImageFile {
$('.two-up.view .frame.deleted img', this.file),
(function(_this) {
return function() {
- return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), function() {
+ return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), () => {
_this.initViewModes();
// Load two-up view after images are loaded
// so that we can display the correct width and height information
const $images = $('.two-up.view img', _this.file);
- $images.waitForImages(function() {
+ $images.waitForImages(() => {
_this.initView('two-up');
});
});
@@ -49,13 +49,13 @@ export default class ImageFile {
activateViewMode(viewMode) {
$('.view-modes-menu li', this.file)
.removeClass('active')
- .filter('.' + viewMode)
+ .filter(`.${viewMode}`)
.addClass('active');
- return $('.view:visible:not(.' + viewMode + ')', this.file).fadeOut(
+ return $(`.view:visible:not(.${viewMode})`, this.file).fadeOut(
200,
(function(_this) {
return function() {
- $('.view.' + viewMode, _this.file).fadeIn(200);
+ $(`.view.${viewMode}`, _this.file).fadeIn(200);
return _this.initView(viewMode);
};
})(this),
@@ -138,9 +138,9 @@ export default class ImageFile {
return $(this).width(availWidth / 2);
}
});
- return _this.requestImageInfo($('img', wrap), function(width, height) {
- $('.image-info .meta-width', wrap).text(width + 'px');
- $('.image-info .meta-height', wrap).text(height + 'px');
+ return _this.requestImageInfo($('img', wrap), (width, height) => {
+ $('.image-info .meta-width', wrap).text(`${width}px`);
+ $('.image-info .meta-height', wrap).text(`${height}px`);
return $('.image-info', wrap).removeClass('hide');
});
};
@@ -175,7 +175,7 @@ export default class ImageFile {
wrapPadding = parseInt($swipeWrap.css('right').replace('px', ''), 10);
- _this.initDraggable($swipeBar, wrapPadding, function(e, left) {
+ _this.initDraggable($swipeBar, wrapPadding, (e, left) => {
if (left > 0 && left < $swipeFrame.width() - wrapPadding * 2) {
$swipeWrap.width(maxWidth + 1 - left);
$swipeBar.css('left', left);
@@ -215,7 +215,7 @@ export default class ImageFile {
$frameAdded.css('opacity', 1);
framePadding = parseInt($frameAdded.css('right').replace('px', ''), 10);
- _this.initDraggable($dragger, framePadding, function(e, left) {
+ _this.initDraggable($dragger, framePadding, (e, left) => {
var opacity = left / dragTrackWidth;
if (opacity >= 0 && opacity <= 1) {
diff --git a/app/assets/javascripts/commons/vue.js b/app/assets/javascripts/commons/vue.js
index 798623b94fb..5b5a1507d38 100644
--- a/app/assets/javascripts/commons/vue.js
+++ b/app/assets/javascripts/commons/vue.js
@@ -1,6 +1,8 @@
import Vue from 'vue';
-import '../vue_shared/vue_resource_interceptor';
+import GlFeatureFlagsPlugin from '~/vue_shared/gl_feature_flags_plugin';
if (process.env.NODE_ENV !== 'production') {
Vue.config.productionTip = false;
}
+
+Vue.use(GlFeatureFlagsPlugin);
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue
index f9465da6fda..3c6da43c4c4 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue
+++ b/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue
@@ -3,6 +3,8 @@ import DropdownSearchInput from '~/vue_shared/components/dropdown/dropdown_searc
import DropdownHiddenInput from '~/vue_shared/components/dropdown/dropdown_hidden_input.vue';
import DropdownButton from '~/vue_shared/components/dropdown/dropdown_button.vue';
+const findItem = (items, valueProp, value) => items.find(item => item[valueProp] === value);
+
export default {
components: {
DropdownButton,
@@ -26,7 +28,7 @@ export default {
default: '',
},
value: {
- type: Object,
+ type: [Object, String],
required: false,
default: () => null,
},
@@ -93,8 +95,8 @@ export default {
},
data() {
return {
+ selectedItem: findItem(this.items, this.value),
searchQuery: '',
- selectedItem: null,
};
},
computed: {
@@ -127,10 +129,15 @@ export default {
return (this.selectedItem && this.selectedItem[this.valueProperty]) || '';
},
},
+ watch: {
+ value(value) {
+ this.selectedItem = findItem(this.items, this.valueProperty, value);
+ },
+ },
methods: {
select(item) {
this.selectedItem = item;
- this.$emit('input', item);
+ this.$emit('input', item[this.valueProperty]);
},
},
};
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue
index ce2e4b883e4..22ee368b8e0 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue
+++ b/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue
@@ -7,8 +7,23 @@ export default {
ServiceCredentialsForm,
EksClusterConfigurationForm,
},
+ props: {
+ gitlabManagedClusterHelpPath: {
+ type: String,
+ required: true,
+ },
+ kubernetesIntegrationHelpPath: {
+ type: String,
+ required: true,
+ },
+ },
};
</script>
<template>
- <eks-cluster-configuration-form />
+ <div class="js-create-eks-cluster">
+ <eks-cluster-configuration-form
+ :gitlab-managed-cluster-help-path="gitlabManagedClusterHelpPath"
+ :kubernetes-integration-help-path="kubernetesIntegrationHelpPath"
+ />
+ </div>
</template>
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue
index 6e74963dcb0..1188cf08850 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue
+++ b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue
@@ -1,25 +1,394 @@
<script>
-import RoleNameDropdown from './role_name_dropdown.vue';
-import SecurityGroupDropdown from './security_group_dropdown.vue';
-import SubnetDropdown from './subnet_dropdown.vue';
-import VPCDropdown from './vpc_dropdown.vue';
+import { createNamespacedHelpers, mapState, mapActions } from 'vuex';
+import { sprintf, s__ } from '~/locale';
+import _ from 'underscore';
+import { GlFormInput, GlFormCheckbox } from '@gitlab/ui';
+import ClusterFormDropdown from './cluster_form_dropdown.vue';
+import RegionDropdown from './region_dropdown.vue';
+import { KUBERNETES_VERSIONS } from '../constants';
+
+const { mapState: mapRolesState, mapActions: mapRolesActions } = createNamespacedHelpers('roles');
+const { mapState: mapRegionsState, mapActions: mapRegionsActions } = createNamespacedHelpers(
+ 'regions',
+);
+const { mapState: mapKeyPairsState, mapActions: mapKeyPairsActions } = createNamespacedHelpers(
+ 'keyPairs',
+);
+const { mapState: mapVpcsState, mapActions: mapVpcActions } = createNamespacedHelpers('vpcs');
+const { mapState: mapSubnetsState, mapActions: mapSubnetActions } = createNamespacedHelpers(
+ 'subnets',
+);
+const {
+ mapState: mapSecurityGroupsState,
+ mapActions: mapSecurityGroupsActions,
+} = createNamespacedHelpers('securityGroups');
export default {
components: {
- RoleNameDropdown,
- SecurityGroupDropdown,
- SubnetDropdown,
- VPCDropdown,
+ ClusterFormDropdown,
+ RegionDropdown,
+ GlFormInput,
+ GlFormCheckbox,
+ },
+ props: {
+ gitlabManagedClusterHelpPath: {
+ type: String,
+ required: true,
+ },
+ kubernetesIntegrationHelpPath: {
+ type: String,
+ required: true,
+ },
+ },
+ computed: {
+ ...mapState([
+ 'clusterName',
+ 'environmentScope',
+ 'kubernetesVersion',
+ 'selectedRegion',
+ 'selectedKeyPair',
+ 'selectedVpc',
+ 'selectedSubnet',
+ 'selectedRole',
+ 'selectedSecurityGroup',
+ 'gitlabManagedCluster',
+ ]),
+ ...mapRolesState({
+ roles: 'items',
+ isLoadingRoles: 'isLoadingItems',
+ loadingRolesError: 'loadingItemsError',
+ }),
+ ...mapRegionsState({
+ regions: 'items',
+ isLoadingRegions: 'isLoadingItems',
+ loadingRegionsError: 'loadingItemsError',
+ }),
+ ...mapKeyPairsState({
+ keyPairs: 'items',
+ isLoadingKeyPairs: 'isLoadingItems',
+ loadingKeyPairsError: 'loadingItemsError',
+ }),
+ ...mapVpcsState({
+ vpcs: 'items',
+ isLoadingVpcs: 'isLoadingItems',
+ loadingVpcsError: 'loadingItemsError',
+ }),
+ ...mapSubnetsState({
+ subnets: 'items',
+ isLoadingSubnets: 'isLoadingItems',
+ loadingSubnetsError: 'loadingItemsError',
+ }),
+ ...mapSecurityGroupsState({
+ securityGroups: 'items',
+ isLoadingSecurityGroups: 'isLoadingItems',
+ loadingSecurityGroupsError: 'loadingItemsError',
+ }),
+ kubernetesVersions() {
+ return KUBERNETES_VERSIONS;
+ },
+ vpcDropdownDisabled() {
+ return !this.selectedRegion;
+ },
+ keyPairDropdownDisabled() {
+ return !this.selectedRegion;
+ },
+ subnetDropdownDisabled() {
+ return !this.selectedVpc;
+ },
+ securityGroupDropdownDisabled() {
+ return !this.selectedVpc;
+ },
+ kubernetesIntegrationHelpText() {
+ const escapedUrl = _.escape(this.kubernetesIntegrationHelpPath);
+
+ return sprintf(
+ s__(
+ 'ClusterIntegration|Read our %{link_start}help page%{link_end} on Kubernetes cluster integration.',
+ ),
+ {
+ link_start: `<a href="${escapedUrl}" target="_blank" rel="noopener noreferrer">`,
+ link_end: '</a>',
+ },
+ false,
+ );
+ },
+ roleDropdownHelpText() {
+ return sprintf(
+ s__(
+ 'ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}.',
+ ),
+ {
+ startLink:
+ '<a href="https://console.aws.amazon.com/iam/home?#roles" target="_blank" rel="noopener noreferrer">',
+ endLink: '</a>',
+ },
+ false,
+ );
+ },
+ keyPairDropdownHelpText() {
+ return sprintf(
+ s__(
+ 'ClusterIntegration|Select the key pair name that will be used to create EC2 nodes. To use a new key pair name, first create one on %{startLink}Amazon Web Services%{endLink}.',
+ ),
+ {
+ startLink:
+ '<a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair" target="_blank" rel="noopener noreferrer">',
+ endLink: '</a>',
+ },
+ false,
+ );
+ },
+ vpcDropdownHelpText() {
+ return sprintf(
+ s__(
+ 'ClusterIntegration|Select a VPC to use for your EKS Cluster resources. To use a new VPC, first create one on %{startLink}Amazon Web Services%{endLink}.',
+ ),
+ {
+ startLink:
+ '<a href="https://console.aws.amazon.com/vpc/home?#vpc" target="_blank" rel="noopener noreferrer">',
+ endLink: '</a>',
+ },
+ false,
+ );
+ },
+ subnetDropdownHelpText() {
+ return sprintf(
+ s__(
+ 'ClusterIntegration|Choose the %{startLink}subnets%{endLink} in your VPC where your worker nodes will run.',
+ ),
+ {
+ startLink:
+ '<a href="https://console.aws.amazon.com/vpc/home?#subnets" target="_blank" rel="noopener noreferrer">',
+ endLink: '</a>',
+ },
+ false,
+ );
+ },
+ securityGroupDropdownHelpText() {
+ return sprintf(
+ s__(
+ 'ClusterIntegration|Choose the %{startLink}security groups%{endLink} to apply to the EKS-managed Elastic Network Interfaces that are created in your worker node subnets.',
+ ),
+ {
+ startLink:
+ '<a href="https://console.aws.amazon.com/vpc/home?#securityGroups" target="_blank" rel="noopener noreferrer">',
+ endLink: '</a>',
+ },
+ false,
+ );
+ },
+ gitlabManagedHelpText() {
+ const escapedUrl = _.escape(this.gitlabManagedClusterHelpPath);
+
+ return sprintf(
+ s__(
+ 'ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster. %{startLink}More information%{endLink}',
+ ),
+ {
+ startLink: `<a href="${escapedUrl}" target="_blank" rel="noopener noreferrer">`,
+ endLink: '</a>',
+ },
+ false,
+ );
+ },
+ },
+ mounted() {
+ this.fetchRegions();
+ this.fetchRoles();
+ },
+ methods: {
+ ...mapActions([
+ 'setClusterName',
+ 'setEnvironmentScope',
+ 'setKubernetesVersion',
+ 'setRegion',
+ 'setVpc',
+ 'setSubnet',
+ 'setRole',
+ 'setKeyPair',
+ 'setSecurityGroup',
+ 'setGitlabManagedCluster',
+ ]),
+ ...mapRegionsActions({ fetchRegions: 'fetchItems' }),
+ ...mapVpcActions({ fetchVpcs: 'fetchItems' }),
+ ...mapSubnetActions({ fetchSubnets: 'fetchItems' }),
+ ...mapRolesActions({ fetchRoles: 'fetchItems' }),
+ ...mapKeyPairsActions({ fetchKeyPairs: 'fetchItems' }),
+ ...mapSecurityGroupsActions({ fetchSecurityGroups: 'fetchItems' }),
+ setRegionAndFetchVpcsAndKeyPairs(region) {
+ this.setRegion({ region });
+ this.fetchVpcs({ region });
+ this.fetchKeyPairs({ region });
+ },
+ setVpcAndFetchSubnets(vpc) {
+ this.setVpc({ vpc });
+ this.fetchSubnets({ vpc });
+ this.fetchSecurityGroups({ vpc });
+ },
},
};
</script>
<template>
<form name="eks-cluster-configuration-form">
+ <h2>
+ {{ s__('ClusterIntegration|Enter the details for your Amazon EKS Kubernetes cluster') }}
+ </h2>
+ <p v-html="kubernetesIntegrationHelpText"></p>
+ <div class="form-group">
+ <label class="label-bold" for="eks-cluster-name">{{
+ s__('ClusterIntegration|Kubernetes cluster name')
+ }}</label>
+ <gl-form-input
+ id="eks-cluster-name"
+ :value="clusterName"
+ @input="setClusterName({ clusterName: $event })"
+ />
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-environment-scope">{{
+ s__('ClusterIntegration|Environment scope')
+ }}</label>
+ <gl-form-input
+ id="eks-environment-scope"
+ :value="environmentScope"
+ @input="setEnvironmentScope({ environmentScope: $event })"
+ />
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-kubernetes-version">{{
+ s__('ClusterIntegration|Kubernetes version')
+ }}</label>
+ <cluster-form-dropdown
+ field-id="eks-kubernetes-version"
+ field-name="eks-kubernetes-version"
+ :value="kubernetesVersion"
+ :items="kubernetesVersions"
+ :empty-text="s__('ClusterIntegration|Kubernetes version not found')"
+ @input="setKubernetesVersion({ kubernetesVersion: $event })"
+ />
+ <p class="form-text text-muted" v-html="roleDropdownHelpText"></p>
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-role">{{ s__('ClusterIntegration|Role name') }}</label>
+ <cluster-form-dropdown
+ field-id="eks-role"
+ field-name="eks-role"
+ :input="selectedRole"
+ :items="roles"
+ :loading="isLoadingRoles"
+ :loading-text="s__('ClusterIntegration|Loading IAM Roles')"
+ :placeholder="s__('ClusterIntergation|Select role name')"
+ :search-field-placeholder="s__('ClusterIntegration|Search IAM Roles')"
+ :empty-text="s__('ClusterIntegration|No IAM Roles found')"
+ :has-errors="Boolean(loadingRolesError)"
+ :error-message="s__('ClusterIntegration|Could not load IAM roles')"
+ @input="setRole({ role: $event })"
+ />
+ <p class="form-text text-muted" v-html="roleDropdownHelpText"></p>
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-role">{{ s__('ClusterIntegration|Region') }}</label>
+ <region-dropdown
+ :value="selectedRegion"
+ :regions="regions"
+ :error="loadingRegionsError"
+ :loading="isLoadingRegions"
+ @input="setRegionAndFetchVpcsAndKeyPairs($event)"
+ />
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-key-pair">{{
+ s__('ClusterIntegration|Key pair name')
+ }}</label>
+ <cluster-form-dropdown
+ field-id="eks-key-pair"
+ field-name="eks-key-pair"
+ :input="selectedKeyPair"
+ :items="keyPairs"
+ :disabled="keyPairDropdownDisabled"
+ :disabled-text="s__('ClusterIntegration|Select a region to choose a Key Pair')"
+ :loading="isLoadingKeyPairs"
+ :loading-text="s__('ClusterIntegration|Loading Key Pairs')"
+ :placeholder="s__('ClusterIntergation|Select key pair')"
+ :search-field-placeholder="s__('ClusterIntegration|Search Key Pairs')"
+ :empty-text="s__('ClusterIntegration|No Key Pairs found')"
+ :has-errors="Boolean(loadingKeyPairsError)"
+ :error-message="s__('ClusterIntegration|Could not load Key Pairs')"
+ @input="setKeyPair({ keyPair: $event })"
+ />
+ <p class="form-text text-muted" v-html="keyPairDropdownHelpText"></p>
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-vpc">{{ s__('ClusterIntegration|VPC') }}</label>
+ <cluster-form-dropdown
+ field-id="eks-vpc"
+ field-name="eks-vpc"
+ :input="selectedVpc"
+ :items="vpcs"
+ :loading="isLoadingVpcs"
+ :disabled="vpcDropdownDisabled"
+ :disabled-text="s__('ClusterIntegration|Select a region to choose a VPC')"
+ :loading-text="s__('ClusterIntegration|Loading VPCs')"
+ :placeholder="s__('ClusterIntergation|Select a VPC')"
+ :search-field-placeholder="s__('ClusterIntegration|Search VPCs')"
+ :empty-text="s__('ClusterIntegration|No VPCs found')"
+ :has-errors="Boolean(loadingVpcsError)"
+ :error-message="s__('ClusterIntegration|Could not load VPCs for the selected region')"
+ @input="setVpcAndFetchSubnets($event)"
+ />
+ <p class="form-text text-muted" v-html="vpcDropdownHelpText"></p>
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-role">{{ s__('ClusterIntegration|Subnet') }}</label>
+ <cluster-form-dropdown
+ field-id="eks-subnet"
+ field-name="eks-subnet"
+ :input="selectedSubnet"
+ :items="subnets"
+ :loading="isLoadingSubnets"
+ :disabled="subnetDropdownDisabled"
+ :disabled-text="s__('ClusterIntegration|Select a VPC to choose a subnet')"
+ :loading-text="s__('ClusterIntegration|Loading subnets')"
+ :placeholder="s__('ClusterIntergation|Select a subnet')"
+ :search-field-placeholder="s__('ClusterIntegration|Search subnets')"
+ :empty-text="s__('ClusterIntegration|No subnet found')"
+ :has-errors="Boolean(loadingSubnetsError)"
+ :error-message="s__('ClusterIntegration|Could not load subnets for the selected VPC')"
+ @input="setSubnet({ subnet: $event })"
+ />
+ <p class="form-text text-muted" v-html="subnetDropdownHelpText"></p>
+ </div>
+ <div class="form-group">
+ <label class="label-bold" for="eks-security-group">{{
+ s__('ClusterIntegration|Security groups')
+ }}</label>
+ <cluster-form-dropdown
+ field-id="eks-security-group"
+ field-name="eks-security-group"
+ :input="selectedSecurityGroup"
+ :items="securityGroups"
+ :loading="isLoadingSecurityGroups"
+ :disabled="securityGroupDropdownDisabled"
+ :disabled-text="s__('ClusterIntegration|Select a VPC to choose a security group')"
+ :loading-text="s__('ClusterIntegration|Loading security groups')"
+ :placeholder="s__('ClusterIntergation|Select a security group')"
+ :search-field-placeholder="s__('ClusterIntegration|Search security groups')"
+ :empty-text="s__('ClusterIntegration|No security group found')"
+ :has-errors="Boolean(loadingSecurityGroupsError)"
+ :error-message="
+ s__('ClusterIntegration|Could not load security groups for the selected VPC')
+ "
+ @input="setSecurityGroup({ securityGroup: $event })"
+ />
+ <p class="form-text text-muted" v-html="securityGroupDropdownHelpText"></p>
+ </div>
<div class="form-group">
- <label class="label-bold" name="role" for="eks-role">
- {{ s__('ClusterIntegration|Role name') }}
- </label>
- <role-name-dropdown />
+ <gl-form-checkbox
+ :checked="gitlabManagedCluster"
+ @input="setGitlabManagedCluster({ gitlabManagedCluster: $event })"
+ >{{ s__('ClusterIntegration|GitLab-managed cluster') }}</gl-form-checkbox
+ >
+ <p class="form-text text-muted" v-html="gitlabManagedHelpText"></p>
</div>
</form>
</template>
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue
new file mode 100644
index 00000000000..765955305c8
--- /dev/null
+++ b/app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue
@@ -0,0 +1,63 @@
+<script>
+import { sprintf, s__ } from '~/locale';
+
+import ClusterFormDropdown from './cluster_form_dropdown.vue';
+
+export default {
+ components: {
+ ClusterFormDropdown,
+ },
+ props: {
+ regions: {
+ type: Array,
+ required: false,
+ default: () => [],
+ },
+ loading: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
+ error: {
+ type: Object,
+ required: false,
+ default: null,
+ },
+ },
+ computed: {
+ hasErrors() {
+ return Boolean(this.error);
+ },
+ helpText() {
+ return sprintf(
+ s__('ClusterIntegration|Learn more about %{startLink}Regions%{endLink}.'),
+ {
+ startLink:
+ '<a href="https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/" target="_blank" rel="noopener noreferrer">',
+ endLink: '</a>',
+ },
+ false,
+ );
+ },
+ },
+};
+</script>
+<template>
+ <div>
+ <cluster-form-dropdown
+ field-id="eks-region"
+ field-name="eks-region"
+ :items="regions"
+ :loading="loading"
+ :loading-text="s__('ClusterIntegration|Loading Regions')"
+ :placeholder="s__('ClusterIntergation|Select a region')"
+ :search-field-placeholder="s__('ClusterIntegration|Search regions')"
+ :empty-text="s__('ClusterIntegration|No region found')"
+ :has-errors="hasErrors"
+ :error-message="s__('ClusterIntegration|Could not load regions from your AWS account')"
+ v-bind="$attrs"
+ v-on="$listeners"
+ />
+ <p class="form-text text-muted" v-html="helpText"></p>
+ </div>
+</template>
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue
deleted file mode 100644
index 70230b294ac..00000000000
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<script>
-import { sprintf, s__ } from '~/locale';
-
-import ClusterFormDropdown from './cluster_form_dropdown.vue';
-
-export default {
- components: {
- ClusterFormDropdown,
- },
- props: {
- roles: {
- type: Array,
- required: false,
- default: () => [],
- },
- loading: {
- type: Boolean,
- required: false,
- default: false,
- },
- },
- computed: {
- helpText() {
- return sprintf(
- s__(
- 'ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}.',
- ),
- {
- startLink:
- '<a href="https://console.aws.amazon.com/iam/home?#roles" target="_blank" rel="noopener noreferrer">',
- endLink: '</a>',
- },
- false,
- );
- },
- },
-};
-</script>
-<template>
- <div>
- <cluster-form-dropdown
- field-id="eks-role-name"
- field-name="eks-role-name"
- :items="roles"
- :loading="loading"
- :loading-text="s__('ClusterIntegration|Loading IAM Roles')"
- :placeholder="s__('ClusterIntergation|Select role name')"
- :search-field-placeholder="s__('ClusterIntegration|Search IAM Roles')"
- :empty-text="s__('ClusterIntegration|No IAM Roles found')"
- />
- <p class="form-text text-muted" v-html="helpText"></p>
- </div>
-</template>
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue
+++ /dev/null
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue
+++ /dev/null
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/constants.js b/app/assets/javascripts/create_cluster/eks_cluster/constants.js
new file mode 100644
index 00000000000..339642f991e
--- /dev/null
+++ b/app/assets/javascripts/create_cluster/eks_cluster/constants.js
@@ -0,0 +1,7 @@
+// eslint-disable-next-line import/prefer-default-export
+export const KUBERNETES_VERSIONS = [
+ { name: '1.14', value: '1.14' },
+ { name: '1.13', value: '1.13' },
+ { name: '1.12', value: '1.12' },
+ { name: '1.11', value: '1.11' },
+];
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/index.js b/app/assets/javascripts/create_cluster/eks_cluster/index.js
index c62e5ec101d..1f595e9b2df 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/index.js
+++ b/app/assets/javascripts/create_cluster/eks_cluster/index.js
@@ -5,15 +5,22 @@ import createStore from './store';
Vue.use(Vuex);
-export default () =>
- new Vue({
- el: '.js-create-eks-cluster-form-container',
+export default el => {
+ const { gitlabManagedClusterHelpPath, kubernetesIntegrationHelpPath } = el.dataset;
+
+ return new Vue({
+ el,
store: createStore(),
components: {
CreateEksCluster,
},
- data() {},
render(createElement) {
- return createElement('create-eks-cluster');
+ return createElement('create-eks-cluster', {
+ props: {
+ gitlabManagedClusterHelpPath,
+ kubernetesIntegrationHelpPath,
+ },
+ });
},
});
+};
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js b/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js
index e69de29bb2d..d982e4db4c1 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js
+++ b/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js
@@ -0,0 +1,84 @@
+import EC2 from 'aws-sdk/clients/ec2';
+import IAM from 'aws-sdk/clients/iam';
+
+export const fetchRoles = () => {
+ const iam = new IAM();
+
+ return iam
+ .listRoles()
+ .promise()
+ .then(({ Roles: roles }) => roles.map(({ RoleName: name }) => ({ name })));
+};
+
+export const fetchKeyPairs = () => {
+ const ec2 = new EC2();
+
+ return ec2
+ .describeKeyPairs()
+ .promise()
+ .then(({ KeyPairs: keyPairs }) => keyPairs.map(({ RegionName: name }) => ({ name })));
+};
+
+export const fetchRegions = () => {
+ const ec2 = new EC2();
+
+ return ec2
+ .describeRegions()
+ .promise()
+ .then(({ Regions: regions }) =>
+ regions.map(({ RegionName: name }) => ({
+ name,
+ value: name,
+ })),
+ );
+};
+
+export const fetchVpcs = () => {
+ const ec2 = new EC2();
+
+ return ec2
+ .describeVpcs()
+ .promise()
+ .then(({ Vpcs: vpcs }) =>
+ vpcs.map(({ VpcId: id }) => ({
+ value: id,
+ name: id,
+ })),
+ );
+};
+
+export const fetchSubnets = ({ vpc }) => {
+ const ec2 = new EC2();
+
+ return ec2
+ .describeSubnets({
+ Filters: [
+ {
+ Name: 'vpc-id',
+ Values: [vpc],
+ },
+ ],
+ })
+ .promise()
+ .then(({ Subnets: subnets }) => subnets.map(({ SubnetId: id }) => ({ id, name: id })));
+};
+
+export const fetchSecurityGroups = ({ vpc }) => {
+ const ec2 = new EC2();
+
+ return ec2
+ .describeSecurityGroups({
+ Filters: [
+ {
+ Name: 'vpc-id',
+ Values: [vpc],
+ },
+ ],
+ })
+ .promise()
+ .then(({ SecurityGroups: securityGroups }) =>
+ securityGroups.map(({ GroupName: name, GroupId: value }) => ({ name, value })),
+ );
+};
+
+export default () => {};
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js
index 861bcddfcc7..917c8da6c3e 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js
@@ -1,3 +1,43 @@
-// import awsServices from '../services/aws_services_facade';
+import * as types from './mutation_types';
+
+export const setClusterName = ({ commit }, payload) => {
+ commit(types.SET_CLUSTER_NAME, payload);
+};
+
+export const setEnvironmentScope = ({ commit }, payload) => {
+ commit(types.SET_ENVIRONMENT_SCOPE, payload);
+};
+
+export const setKubernetesVersion = ({ commit }, payload) => {
+ commit(types.SET_KUBERNETES_VERSION, payload);
+};
+
+export const setRegion = ({ commit }, payload) => {
+ commit(types.SET_REGION, payload);
+};
+
+export const setKeyPair = ({ commit }, payload) => {
+ commit(types.SET_KEY_PAIR, payload);
+};
+
+export const setVpc = ({ commit }, payload) => {
+ commit(types.SET_VPC, payload);
+};
+
+export const setSubnet = ({ commit }, payload) => {
+ commit(types.SET_SUBNET, payload);
+};
+
+export const setRole = ({ commit }, payload) => {
+ commit(types.SET_ROLE, payload);
+};
+
+export const setSecurityGroup = ({ commit }, payload) => {
+ commit(types.SET_SECURITY_GROUP, payload);
+};
+
+export const setGitlabManagedCluster = ({ commit }, payload) => {
+ commit(types.SET_GITLAB_MANAGED_CLUSTER, payload);
+};
export default () => {};
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/actions.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/actions.js
new file mode 100644
index 00000000000..5d250b2e29e
--- /dev/null
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/actions.js
@@ -0,0 +1,14 @@
+import * as types from './mutation_types';
+
+export default fetchItems => ({
+ requestItems: ({ commit }) => commit(types.REQUEST_ITEMS),
+ receiveItemsSuccess: ({ commit }, payload) => commit(types.RECEIVE_ITEMS_SUCCESS, payload),
+ receiveItemsError: ({ commit }, payload) => commit(types.RECEIVE_ITEMS_ERROR, payload),
+ fetchItems: ({ dispatch }, payload) => {
+ dispatch('requestItems');
+
+ return fetchItems(payload)
+ .then(items => dispatch('receiveItemsSuccess', { items }))
+ .catch(error => dispatch('receiveItemsError', { error }));
+ },
+});
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/security_group_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/getters.js
index e69de29bb2d..e69de29bb2d 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/security_group_dropdown.vue
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/getters.js
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/index.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/index.js
new file mode 100644
index 00000000000..07a5821c47d
--- /dev/null
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/index.js
@@ -0,0 +1,13 @@
+import * as getters from './getters';
+import actions from './actions';
+import mutations from './mutations';
+import state from './state';
+
+const createStore = fetchFn => ({
+ actions: actions(fetchFn),
+ getters,
+ mutations,
+ state: state(),
+});
+
+export default createStore;
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types.js
new file mode 100644
index 00000000000..48959a73924
--- /dev/null
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types.js
@@ -0,0 +1,3 @@
+export const REQUEST_ITEMS = 'REQUEST_ITEMS';
+export const RECEIVE_ITEMS_SUCCESS = 'REQUEST_ITEMS_SUCCESS';
+export const RECEIVE_ITEMS_ERROR = 'RECEIVE_ITEMS_ERROR';
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutations.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutations.js
new file mode 100644
index 00000000000..d09689f1f6c
--- /dev/null
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutations.js
@@ -0,0 +1,16 @@
+import * as types from './mutation_types';
+
+export default {
+ [types.REQUEST_ITEMS](state) {
+ state.isLoadingItems = true;
+ state.loadingItemsError = null;
+ },
+ [types.RECEIVE_ITEMS_SUCCESS](state, { items }) {
+ state.isLoadingItems = false;
+ state.items = items;
+ },
+ [types.RECEIVE_ITEMS_ERROR](state, { error }) {
+ state.isLoadingItems = false;
+ state.loadingItemsError = error;
+ },
+};
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/state.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/state.js
new file mode 100644
index 00000000000..b949a24216e
--- /dev/null
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/state.js
@@ -0,0 +1,5 @@
+export default () => ({
+ isLoadingItems: false,
+ items: [],
+ loadingItemsError: null,
+});
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/index.js b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js
index 99e9e35fd1a..d575deafd19 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/store/index.js
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js
@@ -4,12 +4,42 @@ import * as getters from './getters';
import mutations from './mutations';
import state from './state';
+import clusterDropdownStore from './cluster_dropdown';
+
+import * as awsServices from '../services/aws_services_facade';
+
const createStore = () =>
new Vuex.Store({
actions,
getters,
mutations,
- state,
+ state: state(),
+ modules: {
+ roles: {
+ namespaced: true,
+ ...clusterDropdownStore(awsServices.fetchRoles),
+ },
+ regions: {
+ namespaced: true,
+ ...clusterDropdownStore(awsServices.fetchRegions),
+ },
+ keyPairs: {
+ namespaced: true,
+ ...clusterDropdownStore(awsServices.fetchKeyPairs),
+ },
+ vpcs: {
+ namespaced: true,
+ ...clusterDropdownStore(awsServices.fetchVpcs),
+ },
+ subnets: {
+ namespaced: true,
+ ...clusterDropdownStore(awsServices.fetchSubnets),
+ },
+ securityGroups: {
+ namespaced: true,
+ ...clusterDropdownStore(awsServices.fetchSecurityGroups),
+ },
+ },
});
export default createStore;
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js b/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js
index e69de29bb2d..82eb512ac07 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js
@@ -0,0 +1,10 @@
+export const SET_CLUSTER_NAME = 'SET_CLUSTER_NAME';
+export const SET_ENVIRONMENT_SCOPE = 'SET_ENVIRONMENT_SCOPE';
+export const SET_KUBERNETES_VERSION = 'SET_KUBERNETES_VERSION';
+export const SET_REGION = 'SET_REGION';
+export const SET_VPC = 'SET_VPC';
+export const SET_KEY_PAIR = 'SET_KEY_PAIR';
+export const SET_SUBNET = 'SET_SUBNET';
+export const SET_ROLE = 'SET_ROLE';
+export const SET_SECURITY_GROUP = 'SET_SECURITY_GROUP';
+export const SET_GITLAB_MANAGED_CLUSTER = 'SET_GITLAB_MANAGED_CLUSTER';
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js b/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js
index e69de29bb2d..79950ac7dce 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js
@@ -0,0 +1,34 @@
+import * as types from './mutation_types';
+
+export default {
+ [types.SET_CLUSTER_NAME](state, { clusterName }) {
+ state.clusterName = clusterName;
+ },
+ [types.SET_ENVIRONMENT_SCOPE](state, { environmentScope }) {
+ state.environmentScope = environmentScope;
+ },
+ [types.SET_KUBERNETES_VERSION](state, { kubernetesVersion }) {
+ state.kubernetesVersion = kubernetesVersion;
+ },
+ [types.SET_REGION](state, { region }) {
+ state.selectedRegion = region;
+ },
+ [types.SET_KEY_PAIR](state, { keyPair }) {
+ state.selectedKeyPair = keyPair;
+ },
+ [types.SET_VPC](state, { vpc }) {
+ state.selectedVpc = vpc;
+ },
+ [types.SET_SUBNET](state, { subnet }) {
+ state.selectedSubnet = subnet;
+ },
+ [types.SET_ROLE](state, { role }) {
+ state.selectedRole = role;
+ },
+ [types.SET_SECURITY_GROUP](state, { securityGroup }) {
+ state.selectedSecurityGroup = securityGroup;
+ },
+ [types.SET_GITLAB_MANAGED_CLUSTER](state, { gitlabManagedCluster }) {
+ state.gitlabManagedCluster = gitlabManagedCluster;
+ },
+};
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js
index 9754ccfeeaf..bf74213bdce 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js
+++ b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js
@@ -1,19 +1,18 @@
+import { KUBERNETES_VERSIONS } from '../constants';
+
export default () => ({
isValidatingCredentials: false,
validCredentials: false,
- isLoadingRoles: false,
- isLoadingVPCs: false,
- isLoadingSubnets: false,
- isLoadingSecurityGroups: false,
-
- roles: [],
- vpcs: [],
- subnets: [],
- securityGroups: [],
-
+ clusterName: '',
+ environmentScope: '*',
+ kubernetesVersion: [KUBERNETES_VERSIONS].value,
+ selectedRegion: '',
selectedRole: '',
- selectedVPC: '',
+ selectedKeyPair: '',
+ selectedVpc: '',
selectedSubnet: '',
selectedSecurityGroup: '',
+
+ gitlabManagedCluster: true,
});
diff --git a/app/assets/javascripts/create_item_dropdown.js b/app/assets/javascripts/create_item_dropdown.js
index fa0f04c7d82..95b890b04c1 100644
--- a/app/assets/javascripts/create_item_dropdown.js
+++ b/app/assets/javascripts/create_item_dropdown.js
@@ -1,4 +1,5 @@
import _ from 'underscore';
+import '~/gl_dropdown';
export default class CreateItemDropdown {
/**
diff --git a/app/assets/javascripts/create_label.js b/app/assets/javascripts/create_label.js
index eac0e37bcaa..9c0ed7f79d4 100644
--- a/app/assets/javascripts/create_label.js
+++ b/app/assets/javascripts/create_label.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, prefer-arrow-callback */
+/* eslint-disable func-names */
import $ from 'jquery';
import Api from './api';
@@ -50,7 +50,7 @@ export default class CreateLabelDropdown {
this.$dropdownBack.on('click', this.resetForm.bind(this));
- this.$cancelButton.on('click', function(e) {
+ this.$cancelButton.on('click', e => {
e.preventDefault();
e.stopPropagation();
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_card_list_item.vue b/app/assets/javascripts/cycle_analytics/components/stage_card_list_item.vue
index 63549596fac..fc6d83bf96c 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_card_list_item.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_card_list_item.vue
@@ -34,7 +34,7 @@ export default {
class="more-actions-toggle btn btn-transparent p-0"
data-toggle="dropdown"
>
- <icon css-classes="icon" name="ellipsis_v" />
+ <icon class="icon" name="ellipsis_v" />
</gl-button>
<ul class="more-actions-dropdown dropdown-menu dropdown-open-left">
<slot name="dropdown-options"></slot>
diff --git a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
index 7744984edfc..cd67ba5fab8 100644
--- a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
+++ b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
@@ -3,7 +3,6 @@ import Vue from 'vue';
import Cookies from 'js-cookie';
import { GlEmptyState } from '@gitlab/ui';
import filterMixins from 'ee_else_ce/analytics/cycle_analytics/mixins/filter_mixins';
-import addStageMixin from 'ee_else_ce/analytics/cycle_analytics/mixins/add_stage_mixin';
import Flash from '../flash';
import { __ } from '~/locale';
import Translate from '../vue_shared/translate';
@@ -44,12 +43,8 @@ export default () => {
DateRangeDropdown: () =>
import('ee_component/analytics/shared/components/date_range_dropdown.vue'),
'stage-nav-item': stageNavItem,
- CustomStageForm: () =>
- import('ee_component/analytics/cycle_analytics/components/custom_stage_form.vue'),
- AddStageButton: () =>
- import('ee_component/analytics/cycle_analytics/components/add_stage_button.vue'),
},
- mixins: [filterMixins, addStageMixin],
+ mixins: [filterMixins],
data() {
return {
store: CycleAnalyticsStore,
@@ -129,7 +124,6 @@ export default () => {
return;
}
- this.hideAddStageForm();
this.isLoadingStage = true;
this.store.setStageEvents([], stage);
this.store.setActiveStage(stage);
diff --git a/app/assets/javascripts/diff_notes/services/resolve.js b/app/assets/javascripts/diff_notes/services/resolve.js
index 0687028ca54..27990b0a45e 100644
--- a/app/assets/javascripts/diff_notes/services/resolve.js
+++ b/app/assets/javascripts/diff_notes/services/resolve.js
@@ -2,7 +2,6 @@
import Vue from 'vue';
import Flash from '../../flash';
-import '../../vue_shared/vue_resource_interceptor';
import { __ } from '~/locale';
window.gl = window.gl || {};
diff --git a/app/assets/javascripts/diffs/components/commit_item.vue b/app/assets/javascripts/diffs/components/commit_item.vue
index 761fd1583ed..43a7703f611 100644
--- a/app/assets/javascripts/diffs/components/commit_item.vue
+++ b/app/assets/javascripts/diffs/components/commit_item.vue
@@ -121,7 +121,7 @@ export default {
<div class="label label-monospace monospace" v-text="commit.short_id"></div>
<clipboard-button
:text="commit.id"
- :title="__('Copy commit SHA to clipboard')"
+ :title="__('Copy commit SHA')"
class="btn btn-default"
/>
</div>
diff --git a/app/assets/javascripts/diffs/components/diff_file_header.vue b/app/assets/javascripts/diffs/components/diff_file_header.vue
index bfcc726a030..665328eb234 100644
--- a/app/assets/javascripts/diffs/components/diff_file_header.vue
+++ b/app/assets/javascripts/diffs/components/diff_file_header.vue
@@ -209,7 +209,7 @@ export default {
</a>
<clipboard-button
- :title="__('Copy file path to clipboard')"
+ :title="__('Copy file path')"
:text="diffFile.file_path"
:gfm="gfmCopyText"
css-class="btn-default btn-transparent btn-clipboard"
diff --git a/app/assets/javascripts/diffs/components/inline_diff_view.vue b/app/assets/javascripts/diffs/components/inline_diff_view.vue
index aee01409db7..1eb17588376 100644
--- a/app/assets/javascripts/diffs/components/inline_diff_view.vue
+++ b/app/assets/javascripts/diffs/components/inline_diff_view.vue
@@ -45,12 +45,11 @@ export default {
:data-commit-id="commitId"
class="code diff-wrap-lines js-syntax-highlight text-file js-diff-inline-view"
>
- <!-- Need to insert an empty row to solve "table-layout:fixed" equal width when expansion row is the first line -->
- <tr>
- <td style="width: 50px;"></td>
- <td style="width: 50px;"></td>
- <td></td>
- </tr>
+ <colgroup>
+ <col style="width: 50px;" />
+ <col style="width: 50px;" />
+ <col />
+ </colgroup>
<tbody>
<template v-for="(line, index) in diffLines">
<inline-diff-expansion-row
diff --git a/app/assets/javascripts/diffs/components/parallel_diff_view.vue b/app/assets/javascripts/diffs/components/parallel_diff_view.vue
index d400eb2c586..88baac092a1 100644
--- a/app/assets/javascripts/diffs/components/parallel_diff_view.vue
+++ b/app/assets/javascripts/diffs/components/parallel_diff_view.vue
@@ -45,13 +45,12 @@ export default {
:data-commit-id="commitId"
class="code diff-wrap-lines js-syntax-highlight text-file"
>
- <!-- Need to insert an empty row to solve "table-layout:fixed" equal width when expansion row is the first line -->
- <tr>
- <td style="width: 50px;"></td>
- <td></td>
- <td style="width: 50px;"></td>
- <td></td>
- </tr>
+ <colgroup>
+ <col style="width: 50px;" />
+ <col />
+ <col style="width: 50px;" />
+ <col />
+ </colgroup>
<tbody>
<template v-for="(line, index) in diffLines">
<parallel-diff-expansion-row
diff --git a/app/assets/javascripts/environments/components/stop_environment_modal.vue b/app/assets/javascripts/environments/components/stop_environment_modal.vue
index 2cc3412e075..1ea4e30a7c1 100644
--- a/app/assets/javascripts/environments/components/stop_environment_modal.vue
+++ b/app/assets/javascripts/environments/components/stop_environment_modal.vue
@@ -1,7 +1,7 @@
<script>
/* eslint-disable @gitlab/vue-i18n/no-bare-strings */
import { GlTooltipDirective } from '@gitlab/ui';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import { s__, sprintf } from '~/locale';
import LoadingButton from '~/vue_shared/components/loading_button.vue';
import eventHub from '../event_hub';
@@ -11,7 +11,7 @@ export default {
name: 'StopEnvironmentModal',
components: {
- GlModal,
+ GlModal: DeprecatedModal2,
LoadingButton,
},
diff --git a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue
index b1d568532a6..cd298e2c692 100644
--- a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue
+++ b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue
@@ -4,13 +4,15 @@ import { GlEmptyState, GlButton, GlLink, GlLoadingIcon, GlTable } from '@gitlab/
import Icon from '~/vue_shared/components/icon.vue';
import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue';
import { __ } from '~/locale';
+import TrackEventDirective from '~/vue_shared/directives/track_event';
+import { trackViewInSentryOptions, trackClickErrorLinkToSentryOptions } from '../utils';
export default {
fields: [
- { key: 'error', label: __('Open errors') },
+ { key: 'error', label: __('Open errors'), thClass: 'w-70p' },
{ key: 'events', label: __('Events') },
{ key: 'users', label: __('Users') },
- { key: 'lastSeen', label: __('Last seen') },
+ { key: 'lastSeen', label: __('Last seen'), thClass: 'w-15p' },
],
components: {
GlEmptyState,
@@ -21,6 +23,9 @@ export default {
Icon,
TimeAgo,
},
+ directives: {
+ TrackEvent: TrackEventDirective,
+ },
props: {
indexPath: {
type: String,
@@ -53,6 +58,8 @@ export default {
},
methods: {
...mapActions(['startPolling', 'restartPolling']),
+ trackViewInSentryOptions,
+ trackClickErrorLinkToSentryOptions,
},
};
</script>
@@ -65,42 +72,52 @@ export default {
</div>
<div v-else>
<div class="d-flex justify-content-end">
- <gl-button class="my-3 ml-auto" variant="primary" :href="externalUrl" target="_blank">
+ <gl-button
+ v-track-event="trackViewInSentryOptions(externalUrl)"
+ class="my-3 ml-auto"
+ variant="primary"
+ :href="externalUrl"
+ target="_blank"
+ >
{{ __('View in Sentry') }}
- <icon name="external-link" />
+ <icon name="external-link" class="flex-shrink-0" />
</gl-button>
</div>
- <gl-table :items="errors" :fields="$options.fields" :show-empty="true">
+
+ <gl-table :items="errors" :fields="$options.fields" :show-empty="true" fixed stacked="sm">
<template slot="HEAD_events" slot-scope="data">
- <div class="text-right">{{ data.label }}</div>
+ <div class="text-md-right">{{ data.label }}</div>
</template>
<template slot="HEAD_users" slot-scope="data">
- <div class="text-right">{{ data.label }}</div>
+ <div class="text-md-right">{{ data.label }}</div>
</template>
<template slot="error" slot-scope="errors">
<div class="d-flex flex-column">
- <div class="d-flex">
- <gl-link :href="errors.item.externalUrl" class="d-flex text-dark" target="_blank">
- <strong>{{ errors.item.title.trim() }}</strong>
- <icon name="external-link" class="ml-1" />
- </gl-link>
- <span class="text-secondary ml-2">{{ errors.item.culprit }}</span>
- </div>
- {{ errors.item.message || __('No details available') }}
+ <gl-link
+ v-track-event="trackClickErrorLinkToSentryOptions(errors.item.externalUrl)"
+ :href="errors.item.externalUrl"
+ class="d-flex text-dark"
+ target="_blank"
+ >
+ <strong class="text-truncate">{{ errors.item.title.trim() }}</strong>
+ <icon name="external-link" class="ml-1 flex-shrink-0" />
+ </gl-link>
+ <span class="text-secondary text-truncate">
+ {{ errors.item.culprit }}
+ </span>
</div>
</template>
<template slot="events" slot-scope="errors">
- <div class="text-right">{{ errors.item.count }}</div>
+ <div class="text-md-right">{{ errors.item.count }}</div>
</template>
<template slot="users" slot-scope="errors">
- <div class="text-right">{{ errors.item.userCount }}</div>
+ <div class="text-md-right">{{ errors.item.userCount }}</div>
</template>
<template slot="lastSeen" slot-scope="errors">
<div class="d-flex align-items-center">
- <icon name="calendar" css-classes="text-secondary mr-1" />
<time-ago :time="errors.item.lastSeen" class="text-secondary" />
</div>
</template>
diff --git a/app/assets/javascripts/error_tracking/utils.js b/app/assets/javascripts/error_tracking/utils.js
new file mode 100644
index 00000000000..b832b1371b1
--- /dev/null
+++ b/app/assets/javascripts/error_tracking/utils.js
@@ -0,0 +1,23 @@
+/* eslint-disable @gitlab/i18n/no-non-i18n-strings */
+
+/**
+ * Tracks snowplow event when user clicks View in Sentry btn
+ * @param {String} externalUrl that will be send as a property for the event
+ */
+export const trackViewInSentryOptions = url => ({
+ category: 'Error Tracking',
+ action: 'click_view_in_sentry',
+ label: 'External Url',
+ property: url,
+});
+
+/**
+ * Tracks snowplow event when User clicks on error link to Sentry
+ * @param {String} externalUrl that will be send as a property for the event
+ */
+export const trackClickErrorLinkToSentryOptions = url => ({
+ category: 'Error Tracking',
+ action: 'click_error_link_to_sentry',
+ label: 'Error Link',
+ property: url,
+});
diff --git a/app/assets/javascripts/event_tracking/issue_sidebar.js b/app/assets/javascripts/event_tracking/issue_sidebar.js
deleted file mode 100644
index 6909f82c66f..00000000000
--- a/app/assets/javascripts/event_tracking/issue_sidebar.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export const initSidebarTracking = () => {};
-export const trackEvent = () => {};
diff --git a/app/assets/javascripts/event_tracking/notes.js b/app/assets/javascripts/event_tracking/notes.js
deleted file mode 100644
index 1f70290c397..00000000000
--- a/app/assets/javascripts/event_tracking/notes.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// Noop function which has a EE counter-part
-export default () => {};
diff --git a/app/assets/javascripts/filterable_list.js b/app/assets/javascripts/filterable_list.js
index 77080691dcb..c21fba06d42 100644
--- a/app/assets/javascripts/filterable_list.js
+++ b/app/assets/javascripts/filterable_list.js
@@ -22,6 +22,7 @@ export default class FilterableList {
getPagePath() {
const action = this.filterForm.getAttribute('action');
+ // eslint-disable-next-line no-jquery/no-serialize
const params = $(this.filterForm).serialize();
return `${action}${action.indexOf('?') > 0 ? '&' : '?'}${params}`;
}
diff --git a/app/assets/javascripts/flash.js b/app/assets/javascripts/flash.js
index 660f0f0ba3e..fc9c5827ed4 100644
--- a/app/assets/javascripts/flash.js
+++ b/app/assets/javascripts/flash.js
@@ -40,13 +40,17 @@ const createFlashEl = (message, type) => `
<div class="flash-content flash-${type} rounded">
<div class="flash-text">
${_.escape(message)}
- ${spriteIcon('close', 'close-icon')}
+ <div class="close-icon-wrapper js-close-icon">
+ ${spriteIcon('close', 'close-icon')}
+ </div>
</div>
</div>
`;
const removeFlashClickListener = (flashEl, fadeTransition) => {
- flashEl.addEventListener('click', () => hideFlash(flashEl, fadeTransition));
+ flashEl
+ .querySelector('.js-close-icon')
+ .addEventListener('click', () => hideFlash(flashEl, fadeTransition));
};
/*
@@ -78,7 +82,6 @@ const createFlash = function createFlash(
flashContainer.innerHTML = createFlashEl(message, type);
const flashEl = flashContainer.querySelector(`.flash-${type}`);
- removeFlashClickListener(flashEl, fadeTransition);
if (actionConfig) {
flashEl.innerHTML += createAction(actionConfig);
@@ -90,6 +93,8 @@ const createFlash = function createFlash(
}
}
+ removeFlashClickListener(flashEl, fadeTransition);
+
flashContainer.style.display = 'block';
if (addBodyClass) document.body.classList.add('flash-shown');
diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js
index b308cd9c236..db3ad0bb4c9 100644
--- a/app/assets/javascripts/gfm_auto_complete.js
+++ b/app/assets/javascripts/gfm_auto_complete.js
@@ -337,6 +337,7 @@ class GfmAutoComplete {
},
// eslint-disable-next-line no-template-curly-in-string
insertTpl: '${atwho-at}${title}',
+ limit: 20,
callbacks: {
...this.getDefaultCallbacks(),
beforeSave(merges) {
diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js
index f49246cf07b..4e1b4f2652c 100644
--- a/app/assets/javascripts/gl_dropdown.js
+++ b/app/assets/javascripts/gl_dropdown.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-underscore-dangle, no-var, one-var, vars-on-top, no-shadow, no-cond-assign, prefer-arrow-callback, no-return-assign, no-else-return, camelcase, no-lonely-if, guard-for-in, no-restricted-syntax, consistent-return, prefer-template, no-param-reassign, no-loop-func */
+/* eslint-disable func-names, no-underscore-dangle, no-var, one-var, vars-on-top, no-shadow, no-cond-assign, no-return-assign, no-else-return, camelcase, no-lonely-if, guard-for-in, no-restricted-syntax, consistent-return, no-param-reassign, no-loop-func */
import $ from 'jquery';
import _ from 'underscore';
@@ -35,13 +35,13 @@ GitLabDropdownInput = (function() {
);
this.input
- .on('keydown', function(e) {
+ .on('keydown', e => {
var keyCode = e.which;
if (keyCode === 13 && !options.elIsInput) {
e.preventDefault();
}
})
- .on('input', function(e) {
+ .on('input', e => {
var val = e.currentTarget.value || _this.options.inputFieldName;
val = val
.split(' ')
@@ -95,42 +95,33 @@ GitLabDropdownFilter = (function() {
// Key events
timeout = '';
this.input
- .on('keydown', function(e) {
+ .on('keydown', e => {
var keyCode = e.which;
if (keyCode === 13 && !options.elIsInput) {
e.preventDefault();
}
})
- .on(
- 'input',
- function() {
- if (this.input.val() !== '' && !$inputContainer.hasClass(HAS_VALUE_CLASS)) {
- $inputContainer.addClass(HAS_VALUE_CLASS);
- } else if (this.input.val() === '' && $inputContainer.hasClass(HAS_VALUE_CLASS)) {
- $inputContainer.removeClass(HAS_VALUE_CLASS);
- }
- // Only filter asynchronously only if option remote is set
- if (this.options.remote) {
- clearTimeout(timeout);
- return (timeout = setTimeout(
- function() {
- $inputContainer.parent().addClass('is-loading');
-
- return this.options.query(
- this.input.val(),
- function(data) {
- $inputContainer.parent().removeClass('is-loading');
- return this.options.callback(data);
- }.bind(this),
- );
- }.bind(this),
- 250,
- ));
- } else {
- return this.filter(this.input.val());
- }
- }.bind(this),
- );
+ .on('input', () => {
+ if (this.input.val() !== '' && !$inputContainer.hasClass(HAS_VALUE_CLASS)) {
+ $inputContainer.addClass(HAS_VALUE_CLASS);
+ } else if (this.input.val() === '' && $inputContainer.hasClass(HAS_VALUE_CLASS)) {
+ $inputContainer.removeClass(HAS_VALUE_CLASS);
+ }
+ // Only filter asynchronously only if option remote is set
+ if (this.options.remote) {
+ clearTimeout(timeout);
+ return (timeout = setTimeout(() => {
+ $inputContainer.parent().addClass('is-loading');
+
+ return this.options.query(this.input.val(), data => {
+ $inputContainer.parent().removeClass('is-loading');
+ return this.options.callback(data);
+ });
+ }, 250));
+ } else {
+ return this.filter(this.input.val());
+ }
+ });
}
GitLabDropdownFilter.prototype.shouldBlur = function(keyCode) {
@@ -175,9 +166,7 @@ GitLabDropdownFilter = (function() {
key: this.options.keys,
});
if (tmp.length) {
- results[key] = tmp.map(function(item) {
- return item;
- });
+ results[key] = tmp.map(item => item);
}
}
}
@@ -283,7 +272,7 @@ GitLabDropdown = (function() {
NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-item';
- SELECTABLE_CLASSES = '.dropdown-content li:not(' + NON_SELECTABLE_CLASSES + ', .option-hidden)';
+ SELECTABLE_CLASSES = `.dropdown-content li:not(${NON_SELECTABLE_CLASSES}, .option-hidden)`;
CURSOR_SELECT_SCROLL_PADDING = 5;
@@ -370,9 +359,9 @@ GitLabDropdown = (function() {
instance: this,
elements: (function(_this) {
return function() {
- selector = '.dropdown-content li:not(' + NON_SELECTABLE_CLASSES + ')';
+ selector = `.dropdown-content li:not(${NON_SELECTABLE_CLASSES})`;
if (_this.dropdown.find('.dropdown-toggle-page').length) {
- selector = '.dropdown-page-one ' + selector;
+ selector = `.dropdown-page-one ${selector}`;
}
return $(selector, this.instance.dropdown);
};
@@ -388,7 +377,7 @@ GitLabDropdown = (function() {
if (_this.filterInput.val() !== '') {
selector = SELECTABLE_CLASSES;
if (_this.dropdown.find('.dropdown-toggle-page').length) {
- selector = '.dropdown-page-one ' + selector;
+ selector = `.dropdown-page-one ${selector}`;
}
if ($(_this.el).is('input')) {
currentIndex = -1;
@@ -453,32 +442,28 @@ GitLabDropdown = (function() {
if (this.dropdown.find('.dropdown-toggle-page').length) {
selector = '.dropdown-page-one .dropdown-content a';
}
- this.dropdown.on(
- 'click',
- selector,
- function(e) {
- var $el, selected, selectedObj, isMarking;
- $el = $(e.currentTarget);
- selected = self.rowClicked($el);
- selectedObj = selected ? selected[0] : null;
- isMarking = selected ? selected[1] : null;
- if (this.options.clicked) {
- this.options.clicked.call(this, {
- selectedObj,
- $el,
- e,
- isMarking,
- });
- }
+ this.dropdown.on('click', selector, e => {
+ var $el, selected, selectedObj, isMarking;
+ $el = $(e.currentTarget);
+ selected = self.rowClicked($el);
+ selectedObj = selected ? selected[0] : null;
+ isMarking = selected ? selected[1] : null;
+ if (this.options.clicked) {
+ this.options.clicked.call(this, {
+ selectedObj,
+ $el,
+ e,
+ isMarking,
+ });
+ }
- // Update label right after all modifications in dropdown has been done
- if (this.options.toggleLabel) {
- this.updateLabel(selectedObj, $el, this);
- }
+ // Update label right after all modifications in dropdown has been done
+ if (this.options.toggleLabel) {
+ this.updateLabel(selectedObj, $el, this);
+ }
- $el.trigger('blur');
- }.bind(this),
- );
+ $el.trigger('blur');
+ });
}
}
@@ -525,9 +510,7 @@ GitLabDropdown = (function() {
name,
),
);
- this.renderData(groupData, name).map(function(item) {
- return html.push(item);
- });
+ this.renderData(groupData, name).map(item => html.push(item));
}
} else {
// Render each row
@@ -708,9 +691,9 @@ GitLabDropdown = (function() {
return text
.split('')
- .map(function(character, i) {
+ .map((character, i) => {
if (indexOf.call(occurrences, i) !== -1) {
- return '<b>' + character + '</b>';
+ return `<b>${character}</b>`;
} else {
return character;
}
@@ -734,6 +717,7 @@ GitLabDropdown = (function() {
selectedObject = this.renderedData[groupName][selectedIndex];
} else {
selectedIndex = el.closest('li').index();
+ this.selectedIndex = selectedIndex;
selectedObject = this.renderedData[selectedIndex];
}
}
@@ -755,9 +739,7 @@ GitLabDropdown = (function() {
} else if (value != null) {
field = this.dropdown
.parent()
- .find(
- "input[name='" + fieldName + "'][value='" + value.toString().replace(/'/g, "\\'") + "']",
- );
+ .find(`input[name='${fieldName}'][value='${value.toString().replace(/'/g, "\\'")}']`);
}
if (this.options.isSelectable && !this.options.isSelectable(selectedObject, el)) {
@@ -783,11 +765,11 @@ GitLabDropdown = (function() {
} else {
isMarking = true;
if (!this.options.multiSelect || el.hasClass('dropdown-clear-active')) {
- this.dropdown.find('.' + ACTIVE_CLASS).removeClass(ACTIVE_CLASS);
+ this.dropdown.find(`.${ACTIVE_CLASS}`).removeClass(ACTIVE_CLASS);
if (!isInput) {
this.dropdown
.parent()
- .find("input[name='" + fieldName + "']")
+ .find(`input[name='${fieldName}']`)
.remove();
}
}
@@ -826,7 +808,7 @@ GitLabDropdown = (function() {
var $input;
// Create hidden input for form
if (single) {
- $('input[name="' + fieldName + '"]').remove();
+ $(`input[name="${fieldName}"]`).remove();
}
$input = $('<input>')
@@ -854,12 +836,12 @@ GitLabDropdown = (function() {
var $el, selector;
// If we pass an option index
if (typeof index !== 'undefined') {
- selector = SELECTABLE_CLASSES + ':eq(' + index + ') a';
+ selector = `${SELECTABLE_CLASSES}:eq(${index}) a`;
} else {
selector = '.dropdown-content .is-focused';
}
if (this.dropdown.find('.dropdown-toggle-page').length) {
- selector = '.dropdown-page-one ' + selector;
+ selector = `.dropdown-page-one ${selector}`;
}
// simulate a click on the first link
$el = $(selector, this.dropdown);
@@ -878,7 +860,7 @@ GitLabDropdown = (function() {
ARROW_KEY_CODES = [38, 40];
selector = SELECTABLE_CLASSES;
if (this.dropdown.find('.dropdown-toggle-page').length) {
- selector = '.dropdown-page-one ' + selector;
+ selector = `.dropdown-page-one ${selector}`;
}
return $('body').on(
'keydown',
diff --git a/app/assets/javascripts/groups/components/group_item.vue b/app/assets/javascripts/groups/components/group_item.vue
index 830385941d8..ede74d18ed4 100644
--- a/app/assets/javascripts/groups/components/group_item.vue
+++ b/app/assets/javascripts/groups/components/group_item.vue
@@ -104,11 +104,11 @@ export default {
/>
<div
:class="{ 'd-sm-flex': !group.isChildrenLoading }"
- class="avatar-container rect-avatar s32 d-none flex-grow-0 flex-shrink-0 "
+ class="avatar-container rect-avatar s40 d-none flex-grow-0 flex-shrink-0 "
>
<a :href="group.relativePath" class="no-expand">
- <img v-if="hasAvatar" :src="group.avatarUrl" class="avatar s32" />
- <identicon v-else :entity-id="group.id" :entity-name="group.name" size-class="s32" />
+ <img v-if="hasAvatar" :src="group.avatarUrl" class="avatar s40" />
+ <identicon v-else :entity-id="group.id" :entity-name="group.name" size-class="s40" />
</a>
</div>
<div class="group-text-container d-flex flex-fill align-items-center">
diff --git a/app/assets/javascripts/groups/components/item_actions.vue b/app/assets/javascripts/groups/components/item_actions.vue
index cafd22731b1..4b569970204 100644
--- a/app/assets/javascripts/groups/components/item_actions.vue
+++ b/app/assets/javascripts/groups/components/item_actions.vue
@@ -56,7 +56,7 @@ export default {
class="leave-group btn btn-xs no-expand"
@click.prevent="onLeaveGroup"
>
- <icon name="leave" css-classes="position-top-0" />
+ <icon name="leave" class="position-top-0" />
</a>
<a
v-if="group.canEdit"
@@ -68,7 +68,7 @@ export default {
data-placement="bottom"
class="edit-group btn btn-xs no-expand"
>
- <icon name="settings" css-classes="position-top-0" />
+ <icon name="settings" class="position-top-0" />
</a>
</div>
</template>
diff --git a/app/assets/javascripts/groups_select.js b/app/assets/javascripts/groups_select.js
index f1cc6756583..a5e38022b8d 100644
--- a/app/assets/javascripts/groups_select.js
+++ b/app/assets/javascripts/groups_select.js
@@ -4,96 +4,97 @@ import Api from './api';
import { normalizeHeaders } from './lib/utils/common_utils';
import { __ } from '~/locale';
-export default function groupsSelect() {
- import(/* webpackChunkName: 'select2' */ 'select2/select2')
- .then(() => {
- // Needs to be accessible in rspec
- window.GROUP_SELECT_PER_PAGE = 20;
- $('.ajax-groups-select').each(function setAjaxGroupsSelect2() {
- const $select = $(this);
- const allAvailable = $select.data('allAvailable');
- const skipGroups = $select.data('skipGroups') || [];
- const parentGroupID = $select.data('parentId');
- const groupsPath = parentGroupID
- ? Api.subgroupsPath.replace(':id', parentGroupID)
- : Api.groupsPath;
+const groupsSelect = () => {
+ // Needs to be accessible in rspec
+ window.GROUP_SELECT_PER_PAGE = 20;
+ $('.ajax-groups-select').each(function setAjaxGroupsSelect2() {
+ const $select = $(this);
+ const allAvailable = $select.data('allAvailable');
+ const skipGroups = $select.data('skipGroups') || [];
+ const parentGroupID = $select.data('parentId');
+ const groupsPath = parentGroupID
+ ? Api.subgroupsPath.replace(':id', parentGroupID)
+ : Api.groupsPath;
- $select.select2({
- placeholder: __('Search for a group'),
- allowClear: $select.hasClass('allowClear'),
- multiple: $select.hasClass('multiselect'),
- minimumInputLength: 0,
- ajax: {
- url: Api.buildUrl(groupsPath),
- dataType: 'json',
- quietMillis: 250,
- transport(params) {
- axios[params.type.toLowerCase()](params.url, {
- params: params.data,
- })
- .then(res => {
- const results = res.data || [];
- const headers = normalizeHeaders(res.headers);
- const currentPage = parseInt(headers['X-PAGE'], 10) || 0;
- const totalPages = parseInt(headers['X-TOTAL-PAGES'], 10) || 0;
- const more = currentPage < totalPages;
+ $select.select2({
+ placeholder: __('Search for a group'),
+ allowClear: $select.hasClass('allowClear'),
+ multiple: $select.hasClass('multiselect'),
+ minimumInputLength: 0,
+ ajax: {
+ url: Api.buildUrl(groupsPath),
+ dataType: 'json',
+ quietMillis: 250,
+ transport(params) {
+ axios[params.type.toLowerCase()](params.url, {
+ params: params.data,
+ })
+ .then(res => {
+ const results = res.data || [];
+ const headers = normalizeHeaders(res.headers);
+ const currentPage = parseInt(headers['X-PAGE'], 10) || 0;
+ const totalPages = parseInt(headers['X-TOTAL-PAGES'], 10) || 0;
+ const more = currentPage < totalPages;
- params.success({
- results,
- pagination: {
- more,
- },
- });
- })
- .catch(params.error);
- },
- data(search, page) {
- return {
- search,
- page,
- per_page: window.GROUP_SELECT_PER_PAGE,
- all_available: allAvailable,
- };
- },
- results(data, page) {
- if (data.length) return { results: [] };
+ params.success({
+ results,
+ pagination: {
+ more,
+ },
+ });
+ })
+ .catch(params.error);
+ },
+ data(search, page) {
+ return {
+ search,
+ page,
+ per_page: window.GROUP_SELECT_PER_PAGE,
+ all_available: allAvailable,
+ };
+ },
+ results(data, page) {
+ if (data.length) return { results: [] };
- const groups = data.length ? data : data.results || [];
- const more = data.pagination ? data.pagination.more : false;
- const results = groups.filter(group => skipGroups.indexOf(group.id) === -1);
+ const groups = data.length ? data : data.results || [];
+ const more = data.pagination ? data.pagination.more : false;
+ const results = groups.filter(group => skipGroups.indexOf(group.id) === -1);
- return {
- results,
- page,
- more,
- };
- },
- },
- // eslint-disable-next-line consistent-return
- initSelection(element, callback) {
- const id = $(element).val();
- if (id !== '') {
- return Api.group(id, callback);
- }
- },
- formatResult(object) {
- return `<div class='group-result'> <div class='group-name'>${object.full_name}</div> <div class='group-path'>${object.full_path}</div> </div>`;
- },
- formatSelection(object) {
- return object.full_name;
- },
- dropdownCssClass: 'ajax-groups-dropdown select2-infinite',
- // we do not want to escape markup since we are displaying html in results
- escapeMarkup(m) {
- return m;
- },
- });
+ return {
+ results,
+ page,
+ more,
+ };
+ },
+ },
+ // eslint-disable-next-line consistent-return
+ initSelection(element, callback) {
+ const id = $(element).val();
+ if (id !== '') {
+ return Api.group(id, callback);
+ }
+ },
+ formatResult(object) {
+ return `<div class='group-result'> <div class='group-name'>${object.full_name}</div> <div class='group-path'>${object.full_path}</div> </div>`;
+ },
+ formatSelection(object) {
+ return object.full_name;
+ },
+ dropdownCssClass: 'ajax-groups-dropdown select2-infinite',
+ // we do not want to escape markup since we are displaying html in results
+ escapeMarkup(m) {
+ return m;
+ },
+ });
- $select.on('select2-loaded', () => {
- const dropdown = document.querySelector('.select2-infinite .select2-results');
- dropdown.style.height = `${Math.floor(dropdown.scrollHeight)}px`;
- });
- });
- })
+ $select.on('select2-loaded', () => {
+ const dropdown = document.querySelector('.select2-infinite .select2-results');
+ dropdown.style.height = `${Math.floor(dropdown.scrollHeight)}px`;
+ });
+ });
+};
+
+export default () =>
+ import(/* webpackChunkName: 'select2' */ 'select2/select2')
+ .then(groupsSelect)
.catch(() => {});
-}
diff --git a/app/assets/javascripts/header.js b/app/assets/javascripts/header.js
index 3d846310008..fdd27e08793 100644
--- a/app/assets/javascripts/header.js
+++ b/app/assets/javascripts/header.js
@@ -15,11 +15,10 @@ import { parseBoolean } from '~/lib/utils/common_utils';
*/
export default function initTodoToggle() {
$(document).on('todo:toggle', (e, count) => {
- const parsedCount = parseInt(count, 10);
const $todoPendingCount = $('.todos-count');
- $todoPendingCount.text(highCountTrim(parsedCount));
- $todoPendingCount.toggleClass('hidden', parsedCount === 0);
+ $todoPendingCount.text(highCountTrim(count));
+ $todoPendingCount.toggleClass('hidden', count === 0);
});
}
diff --git a/app/assets/javascripts/ide/.eslintrc.yml b/app/assets/javascripts/ide/.eslintrc.yml
new file mode 100644
index 00000000000..92b96d717be
--- /dev/null
+++ b/app/assets/javascripts/ide/.eslintrc.yml
@@ -0,0 +1,3 @@
+rules:
+ # https://gitlab.com/gitlab-org/gitlab/issues/33024
+ promise/no-nesting: off
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue b/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue
index 11d5d9639b6..6b2ef34c960 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue
@@ -43,7 +43,12 @@ export default {
<template>
<div class="d-flex ide-commit-editor-header align-items-center">
<file-icon :file-name="activeFile.name" :size="16" class="mr-2" />
- <strong class="mr-2"> {{ activeFile.path }} </strong>
+ <strong class="mr-2">
+ <template v-if="activeFile.prevPath && activeFile.prevPath !== activeFile.path">
+ {{ activeFile.prevPath }} &#x2192;
+ </template>
+ {{ activeFile.path }}
+ </strong>
<changed-file-icon :file="activeFile" :is-centered="false" />
<div class="ml-auto">
<button
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/list.vue b/app/assets/javascripts/ide/components/commit_sidebar/list.vue
index 4f1260de0bc..e16918ae025 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/list.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/list.vue
@@ -3,7 +3,7 @@ import $ from 'jquery';
import { mapActions } from 'vuex';
import { __, sprintf } from '~/locale';
import Icon from '~/vue_shared/components/icon.vue';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import tooltip from '~/vue_shared/directives/tooltip';
import ListItem from './list_item.vue';
@@ -11,7 +11,7 @@ export default {
components: {
Icon,
ListItem,
- GlModal,
+ GlModal: DeprecatedModal2,
},
directives: {
tooltip,
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/list_collapsed.vue b/app/assets/javascripts/ide/components/commit_sidebar/list_collapsed.vue
index 3156a398113..b6fc567f8cc 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/list_collapsed.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/list_collapsed.vue
@@ -86,7 +86,7 @@ export default {
data-placement="left"
class="append-bottom-10"
>
- <icon :name="additionIconName" :size="18" :css-classes="addedFilesIconClass" />
+ <icon :name="additionIconName" :size="18" :class="addedFilesIconClass" />
</div>
{{ addedFilesLength }}
<div
@@ -96,7 +96,7 @@ export default {
data-placement="left"
class="prepend-top-10 append-bottom-10"
>
- <icon :name="modifiedIconName" :size="18" :css-classes="modifiedFilesClass" />
+ <icon :name="modifiedIconName" :size="18" :class="modifiedFilesClass" />
</div>
{{ modifiedFilesLength }}
</div>
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue b/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue
index 302adccd759..230dfaf047b 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue
@@ -110,11 +110,14 @@ export default {
>
<span class="multi-file-commit-list-file-path d-flex align-items-center">
<file-icon :file-name="file.name" class="append-right-8" />
+ <template v-if="file.prevName && file.prevName !== file.name">
+ {{ file.prevName }} &#x2192;
+ </template>
{{ file.name }}
</span>
<div class="ml-auto d-flex align-items-center">
<div class="d-flex align-items-center ide-commit-list-changed-icon">
- <icon :name="iconName" :size="16" :css-classes="iconClass" />
+ <icon :name="iconName" :size="16" :class="iconClass" />
</div>
</div>
</div>
diff --git a/app/assets/javascripts/ide/components/commit_sidebar/stage_button.vue b/app/assets/javascripts/ide/components/commit_sidebar/stage_button.vue
index 09c9d135614..c14b8a47841 100644
--- a/app/assets/javascripts/ide/components/commit_sidebar/stage_button.vue
+++ b/app/assets/javascripts/ide/components/commit_sidebar/stage_button.vue
@@ -4,12 +4,12 @@ import { mapActions } from 'vuex';
import { sprintf, __ } from '~/locale';
import Icon from '~/vue_shared/components/icon.vue';
import tooltip from '~/vue_shared/directives/tooltip';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
export default {
components: {
Icon,
- GlModal,
+ GlModal: DeprecatedModal2,
},
directives: {
tooltip,
diff --git a/app/assets/javascripts/ide/components/external_link.vue b/app/assets/javascripts/ide/components/external_link.vue
index d1857f0176a..558da9b706e 100644
--- a/app/assets/javascripts/ide/components/external_link.vue
+++ b/app/assets/javascripts/ide/components/external_link.vue
@@ -28,7 +28,7 @@ export default {
rel="noopener noreferrer"
>
<span class="vertical-align-middle">{{ __('Open in file view') }}</span>
- <icon :size="16" name="external-link" css-classes="vertical-align-middle space-right" />
+ <icon :size="16" name="external-link" class="vertical-align-middle space-right" />
</a>
</div>
</template>
diff --git a/app/assets/javascripts/ide/components/file_row_extra.vue b/app/assets/javascripts/ide/components/file_row_extra.vue
index 48be97c8952..f0bedcfbd6b 100644
--- a/app/assets/javascripts/ide/components/file_row_extra.vue
+++ b/app/assets/javascripts/ide/components/file_row_extra.vue
@@ -34,6 +34,9 @@ export default {
'getUnstagedFilesCountForPath',
'getStagedFilesCountForPath',
]),
+ isTree() {
+ return this.file.type === 'tree';
+ },
folderUnstagedCount() {
return this.getUnstagedFilesCountForPath(this.file.path);
},
@@ -58,10 +61,13 @@ export default {
});
},
showTreeChangesCount() {
- return this.file.type === 'tree' && this.changesCount > 0 && !this.file.opened;
+ return this.isTree && this.changesCount > 0 && !this.file.opened;
+ },
+ isModified() {
+ return this.file.changed || this.file.tempFile || this.file.staged || this.file.prevPath;
},
showChangedFileIcon() {
- return this.file.changed || this.file.tempFile || this.file.staged;
+ return !this.isTree && this.isModified;
},
},
};
@@ -79,7 +85,7 @@ export default {
data-container="body"
data-placement="right"
name="file-modified"
- css-classes="prepend-left-5 ide-file-modified"
+ class="prepend-left-5 ide-file-modified"
/>
</span>
<changed-file-icon
diff --git a/app/assets/javascripts/ide/components/ide_tree_list.vue b/app/assets/javascripts/ide/components/ide_tree_list.vue
index 1af86a94482..95782b2c88a 100644
--- a/app/assets/javascripts/ide/components/ide_tree_list.vue
+++ b/app/assets/javascripts/ide/components/ide_tree_list.vue
@@ -30,9 +30,6 @@ export default {
showLoading() {
return !this.currentTree || this.currentTree.loading;
},
- actualTreeList() {
- return this.currentTree.tree.filter(entry => !entry.moved);
- },
},
mounted() {
this.updateViewer(this.viewerType);
@@ -57,9 +54,9 @@ export default {
<slot name="header"></slot>
</header>
<div class="ide-tree-body h-100">
- <template v-if="actualTreeList.length">
+ <template v-if="currentTree.tree.length">
<file-row
- v-for="file in actualTreeList"
+ v-for="file in currentTree.tree"
:key="file.key"
:file="file"
:level="0"
diff --git a/app/assets/javascripts/ide/components/jobs/stage.vue b/app/assets/javascripts/ide/components/jobs/stage.vue
index b1be25ea602..9ad9d4455b5 100644
--- a/app/assets/javascripts/ide/components/jobs/stage.vue
+++ b/app/assets/javascripts/ide/components/jobs/stage.vue
@@ -77,7 +77,7 @@ export default {
<div v-if="!stage.isLoading || stage.jobs.length" class="append-right-8 prepend-left-4">
<span class="badge badge-pill"> {{ jobsCount }} </span>
</div>
- <icon :name="collapseIcon" css-classes="ide-stage-collapse-icon" />
+ <icon :name="collapseIcon" class="ide-stage-collapse-icon" />
</div>
<div v-show="!stage.isCollapsed" class="card-body">
<gl-loading-icon v-if="showLoadingIcon" />
diff --git a/app/assets/javascripts/ide/components/mr_file_icon.vue b/app/assets/javascripts/ide/components/mr_file_icon.vue
index 821be319cce..cf8a1abbde4 100644
--- a/app/assets/javascripts/ide/components/mr_file_icon.vue
+++ b/app/assets/javascripts/ide/components/mr_file_icon.vue
@@ -18,6 +18,6 @@ export default {
:title="__('Part of merge request changes')"
:size="12"
name="git-merge"
- css-classes="append-right-8"
+ class="append-right-8"
/>
</template>
diff --git a/app/assets/javascripts/ide/components/new_dropdown/button.vue b/app/assets/javascripts/ide/components/new_dropdown/button.vue
index 062a64a19d7..5bd6642930c 100644
--- a/app/assets/javascripts/ide/components/new_dropdown/button.vue
+++ b/app/assets/javascripts/ide/components/new_dropdown/button.vue
@@ -52,7 +52,7 @@ export default {
class="btn-blank"
@click.stop.prevent="clicked"
>
- <icon :name="icon" :css-classes="iconClasses" />
+ <icon :name="icon" :class="iconClasses" />
<template v-if="showLabel">
{{ label }}
</template>
diff --git a/app/assets/javascripts/ide/components/new_dropdown/modal.vue b/app/assets/javascripts/ide/components/new_dropdown/modal.vue
index f67666f1fbf..d2ed1fe3e55 100644
--- a/app/assets/javascripts/ide/components/new_dropdown/modal.vue
+++ b/app/assets/javascripts/ide/components/new_dropdown/modal.vue
@@ -3,12 +3,12 @@ import $ from 'jquery';
import flash from '~/flash';
import { __, sprintf, s__ } from '~/locale';
import { mapActions, mapState, mapGetters } from 'vuex';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import { modalTypes } from '../../constants';
export default {
components: {
- GlModal,
+ GlModal: DeprecatedModal2,
},
data() {
return {
@@ -91,7 +91,6 @@ export default {
this.renameEntry({
path: this.entryModal.entry.path,
name: entryName,
- entryPath: null,
parentPath,
}),
)
diff --git a/app/assets/javascripts/ide/components/repo_editor.vue b/app/assets/javascripts/ide/components/repo_editor.vue
index 802b7f1fa6f..3bf8308ccea 100644
--- a/app/assets/javascripts/ide/components/repo_editor.vue
+++ b/app/assets/javascripts/ide/components/repo_editor.vue
@@ -155,15 +155,7 @@ export default {
this.editor.clearEditor();
- this.getFileData({
- path: this.file.path,
- makeFileActive: false,
- })
- .then(() =>
- this.getRawFileData({
- path: this.file.path,
- }),
- )
+ this.fetchFileData()
.then(() => {
this.createEditorInstance();
})
@@ -179,6 +171,20 @@ export default {
throw err;
});
},
+ fetchFileData() {
+ if (this.file.tempFile) {
+ return Promise.resolve();
+ }
+
+ return this.getFileData({
+ path: this.file.path,
+ makeFileActive: false,
+ }).then(() =>
+ this.getRawFileData({
+ path: this.file.path,
+ }),
+ );
+ },
createEditorInstance() {
this.editor.dispose();
diff --git a/app/assets/javascripts/ide/components/repo_file_status_icon.vue b/app/assets/javascripts/ide/components/repo_file_status_icon.vue
index 84a962bfc7d..9773e835a5c 100644
--- a/app/assets/javascripts/ide/components/repo_file_status_icon.vue
+++ b/app/assets/javascripts/ide/components/repo_file_status_icon.vue
@@ -29,6 +29,6 @@ export default {
<template>
<span v-if="file.file_lock" v-tooltip :title="lockTooltip" data-container="body">
- <icon name="lock" css-classes="file-status-icon" />
+ <icon name="lock" class="file-status-icon" />
</span>
</template>
diff --git a/app/assets/javascripts/ide/lib/files.js b/app/assets/javascripts/ide/lib/files.js
index 51278640b5b..e86dac20104 100644
--- a/app/assets/javascripts/ide/lib/files.js
+++ b/app/assets/javascripts/ide/lib/files.js
@@ -1,7 +1,5 @@
import { viewerInformationForPath } from '~/vue_shared/components/content_viewer/lib/viewer_utils';
-import { decorateData, sortTree } from '../stores/utils';
-
-export const escapeFileUrl = fileUrl => encodeURIComponent(fileUrl).replace(/%2F/g, '/');
+import { decorateData, sortTree, escapeFileUrl } from '../stores/utils';
export const splitParent = path => {
const idx = path.lastIndexOf('/');
diff --git a/app/assets/javascripts/ide/stores/actions.js b/app/assets/javascripts/ide/stores/actions.js
index 8c0119a1fed..4e18ec58feb 100644
--- a/app/assets/javascripts/ide/stores/actions.js
+++ b/app/assets/javascripts/ide/stores/actions.js
@@ -9,6 +9,7 @@ import { decorateFiles } from '../lib/files';
import { stageKeys } from '../constants';
import service from '../services';
import router from '../ide_router';
+import eventHub from '../eventhub';
export const redirectToUrl = (self, url) => visitUrl(url);
@@ -171,8 +172,10 @@ export const setCurrentBranchId = ({ commit }, currentBranchId) => {
export const updateTempFlagForEntry = ({ commit, dispatch, state }, { file, tempFile }) => {
commit(types.UPDATE_TEMP_FLAG, { path: file.path, tempFile });
- if (file.parentPath) {
- dispatch('updateTempFlagForEntry', { file: state.entries[file.parentPath], tempFile });
+ const parent = file.parentPath && state.entries[file.parentPath];
+
+ if (parent) {
+ dispatch('updateTempFlagForEntry', { file: parent, tempFile });
}
};
@@ -199,51 +202,71 @@ export const openNewEntryModal = ({ commit }, { type, path = '' }) => {
export const deleteEntry = ({ commit, dispatch, state }, path) => {
const entry = state.entries[path];
-
+ const { prevPath, prevName, prevParentPath } = entry;
+ const isTree = entry.type === 'tree';
+
+ if (prevPath) {
+ dispatch('renameEntry', {
+ path,
+ name: prevName,
+ parentPath: prevParentPath,
+ });
+ dispatch('deleteEntry', prevPath);
+ return;
+ }
if (state.unusedSeal) dispatch('burstUnusedSeal');
if (entry.opened) dispatch('closeFile', entry);
- if (entry.type === 'tree') {
+ if (isTree) {
entry.tree.forEach(f => dispatch('deleteEntry', f.path));
}
commit(types.DELETE_ENTRY, path);
- dispatch('stageChange', path);
+
+ // Only stage if we're not a directory or a new file
+ if (!isTree && !entry.tempFile) {
+ dispatch('stageChange', path);
+ }
dispatch('triggerFilesChange');
};
export const resetOpenFiles = ({ commit }) => commit(types.RESET_OPEN_FILES);
-export const renameEntry = (
- { dispatch, commit, state },
- { path, name, entryPath = null, parentPath },
-) => {
- const entry = state.entries[entryPath || path];
+export const renameEntry = ({ dispatch, commit, state }, { path, name, parentPath }) => {
+ const entry = state.entries[path];
+ const newPath = parentPath ? `${parentPath}/${name}` : name;
- commit(types.RENAME_ENTRY, { path, name, entryPath, parentPath });
+ commit(types.RENAME_ENTRY, { path, name, parentPath });
if (entry.type === 'tree') {
- const slashedParentPath = parentPath ? `${parentPath}/` : '';
- const targetEntry = entryPath ? entryPath.split('/').pop() : name;
- const newParentPath = `${slashedParentPath}${targetEntry}`;
-
- state.entries[entryPath || path].tree.forEach(f => {
+ state.entries[newPath].tree.forEach(f => {
dispatch('renameEntry', {
- path,
- name,
- entryPath: f.path,
- parentPath: newParentPath,
+ path: f.path,
+ name: f.name,
+ parentPath: newPath,
});
});
} else {
- const newPath = parentPath ? `${parentPath}/${name}` : name;
const newEntry = state.entries[newPath];
- commit(types.TOGGLE_FILE_CHANGED, { file: newEntry, changed: true });
+ const isRevert = newPath === entry.prevPath;
+ const isReset = isRevert && !newEntry.changed && !newEntry.tempFile;
+ const isInChanges = state.changedFiles
+ .concat(state.stagedFiles)
+ .some(({ key }) => key === newEntry.key);
+
+ if (isReset) {
+ commit(types.REMOVE_FILE_FROM_STAGED_AND_CHANGED, newEntry);
+ } else if (!isInChanges) {
+ commit(types.ADD_FILE_TO_CHANGED, newPath);
+ }
+
+ if (!newEntry.tempFile) {
+ eventHub.$emit(`editor.update.model.dispose.${entry.key}`);
+ }
- if (entry.opened) {
+ if (newEntry.opened) {
router.push(`/project${newEntry.url}`);
- commit(types.TOGGLE_FILE_OPEN, entry.path);
}
}
diff --git a/app/assets/javascripts/ide/stores/actions/file.js b/app/assets/javascripts/ide/stores/actions/file.js
index 7627b6e03af..59445afc7a4 100644
--- a/app/assets/javascripts/ide/stores/actions/file.js
+++ b/app/assets/javascripts/ide/stores/actions/file.js
@@ -5,7 +5,7 @@ import eventHub from '../../eventhub';
import service from '../../services';
import * as types from '../mutation_types';
import router from '../../ide_router';
-import { setPageTitle } from '../utils';
+import { setPageTitle, replaceFileUrl } from '../utils';
import { viewerTypes, stageKeys } from '../../constants';
export const closeFile = ({ commit, state, dispatch }, file) => {
@@ -67,7 +67,7 @@ export const getFileData = (
commit(types.TOGGLE_LOADING, { entry: file });
- const url = file.prevPath ? file.url.replace(file.path, file.prevPath) : file.url;
+ const url = file.prevPath ? replaceFileUrl(file.url, file.path, file.prevPath) : file.url;
return service
.getFileData(joinPaths(gon.relative_url_root || '', url.replace('/-/', '/')))
@@ -186,11 +186,6 @@ export const discardFileChanges = ({ dispatch, state, commit, getters }, path) =
dispatch('restoreTree', file.parentPath);
}
- if (file.movedPath) {
- commit(types.DISCARD_FILE_CHANGES, file.movedPath);
- commit(types.REMOVE_FILE_FROM_CHANGED, file.movedPath);
- }
-
commit(types.DISCARD_FILE_CHANGES, path);
commit(types.REMOVE_FILE_FROM_CHANGED, path);
diff --git a/app/assets/javascripts/ide/stores/actions/project.js b/app/assets/javascripts/ide/stores/actions/project.js
index dd8f17e4f3a..20887e7d0ac 100644
--- a/app/assets/javascripts/ide/stores/actions/project.js
+++ b/app/assets/javascripts/ide/stores/actions/project.js
@@ -92,13 +92,27 @@ export const showEmptyState = ({ commit, state }, { projectId, branchId }) => {
});
};
-export const openBranch = ({ dispatch, state, getters }, { projectId, branchId, basePath }) => {
- dispatch('setCurrentBranchId', branchId);
+export const loadFile = ({ dispatch, state }, { basePath }) => {
+ if (basePath) {
+ const path = basePath.slice(-1) === '/' ? basePath.slice(0, -1) : basePath;
+ const treeEntryKey = Object.keys(state.entries).find(
+ key => key === path && !state.entries[key].pending,
+ );
+ const treeEntry = state.entries[treeEntryKey];
- if (getters.emptyRepo) {
- return dispatch('showEmptyState', { projectId, branchId });
+ if (treeEntry) {
+ dispatch('handleTreeEntryAction', treeEntry);
+ } else {
+ dispatch('createTempEntry', {
+ name: path,
+ type: 'blob',
+ });
+ }
}
- return dispatch('getBranchData', {
+};
+
+export const loadBranch = ({ dispatch }, { projectId, branchId }) =>
+ dispatch('getBranchData', {
projectId,
branchId,
})
@@ -107,42 +121,38 @@ export const openBranch = ({ dispatch, state, getters }, { projectId, branchId,
projectId,
branchId,
});
- dispatch('getFiles', {
+ return dispatch('getFiles', {
projectId,
branchId,
- })
- .then(() => {
- if (basePath) {
- const path = basePath.slice(-1) === '/' ? basePath.slice(0, -1) : basePath;
- const treeEntryKey = Object.keys(state.entries).find(
- key => key === path && !state.entries[key].pending,
- );
- const treeEntry = state.entries[treeEntryKey];
-
- if (treeEntry) {
- dispatch('handleTreeEntryAction', treeEntry);
- } else {
- dispatch('createTempEntry', {
- name: path,
- type: 'blob',
- });
- }
- }
- })
- .catch(
- () =>
- new Error(
- sprintf(
- __('An error occurred whilst getting files for - %{branchId}'),
- {
- branchId: `<strong>${_.escape(projectId)}/${_.escape(branchId)}</strong>`,
- },
- false,
- ),
- ),
- );
+ });
})
.catch(() => {
dispatch('showBranchNotFoundError', branchId);
+ return Promise.reject();
});
+
+export const openBranch = ({ dispatch, state, getters }, { projectId, branchId, basePath }) => {
+ const currentProject = state.projects[projectId];
+ if (getters.emptyRepo) {
+ return dispatch('showEmptyState', { projectId, branchId });
+ }
+ if (!currentProject || !currentProject.branches[branchId]) {
+ dispatch('setCurrentBranchId', branchId);
+
+ return dispatch('loadBranch', { projectId, branchId })
+ .then(() => dispatch('loadFile', { basePath }))
+ .catch(
+ () =>
+ new Error(
+ sprintf(
+ __('An error occurred whilst getting files for - %{branchId}'),
+ {
+ branchId: `<strong>${_.escape(projectId)}/${_.escape(branchId)}</strong>`,
+ },
+ false,
+ ),
+ ),
+ );
+ }
+ return Promise.resolve(dispatch('loadFile', { basePath }));
};
diff --git a/app/assets/javascripts/ide/stores/modules/commit/actions.js b/app/assets/javascripts/ide/stores/modules/commit/actions.js
index 23caf2d48ed..e89ed49318b 100644
--- a/app/assets/javascripts/ide/stores/modules/commit/actions.js
+++ b/app/assets/javascripts/ide/stores/modules/commit/actions.js
@@ -152,6 +152,12 @@ export const commitChanges = ({ commit, state, getters, dispatch, rootState, roo
branch: getters.branchName,
})
.then(() => {
+ commit(rootTypes.CLEAR_STAGED_CHANGES, null, { root: true });
+
+ setTimeout(() => {
+ commit(rootTypes.SET_LAST_COMMIT_MSG, '', { root: true });
+ }, 5000);
+
if (state.shouldCreateMR) {
const { currentProject } = rootGetters;
const targetBranch = getters.isCreatingNewBranch
@@ -164,14 +170,6 @@ export const commitChanges = ({ commit, state, getters, dispatch, rootState, roo
{ root: true },
);
}
-
- commit(rootTypes.CLEAR_STAGED_CHANGES, null, { root: true });
-
- commit(rootTypes.CLEAR_REPLACED_FILES, null, { root: true });
-
- setTimeout(() => {
- commit(rootTypes.SET_LAST_COMMIT_MSG, '', { root: true });
- }, 5000);
})
.then(() => {
if (rootGetters.lastOpenedFile) {
diff --git a/app/assets/javascripts/ide/stores/mutation_types.js b/app/assets/javascripts/ide/stores/mutation_types.js
index f021729c451..f0b4718d025 100644
--- a/app/assets/javascripts/ide/stores/mutation_types.js
+++ b/app/assets/javascripts/ide/stores/mutation_types.js
@@ -59,8 +59,7 @@ export const UPDATE_DELAY_VIEWER_CHANGE = 'UPDATE_DELAY_VIEWER_CHANGE';
export const CLEAR_STAGED_CHANGES = 'CLEAR_STAGED_CHANGES';
export const STAGE_CHANGE = 'STAGE_CHANGE';
export const UNSTAGE_CHANGE = 'UNSTAGE_CHANGE';
-
-export const CLEAR_REPLACED_FILES = 'CLEAR_REPLACED_FILES';
+export const REMOVE_FILE_FROM_STAGED_AND_CHANGED = 'REMOVE_FILE_FROM_STAGED_AND_CHANGED';
export const UPDATE_FILE_AFTER_COMMIT = 'UPDATE_FILE_AFTER_COMMIT';
export const ADD_PENDING_TAB = 'ADD_PENDING_TAB';
@@ -79,5 +78,6 @@ export const SET_ERROR_MESSAGE = 'SET_ERROR_MESSAGE';
export const OPEN_NEW_ENTRY_MODAL = 'OPEN_NEW_ENTRY_MODAL';
export const DELETE_ENTRY = 'DELETE_ENTRY';
export const RENAME_ENTRY = 'RENAME_ENTRY';
+export const REVERT_RENAME_ENTRY = 'REVERT_RENAME_ENTRY';
export const RESTORE_TREE = 'RESTORE_TREE';
diff --git a/app/assets/javascripts/ide/stores/mutations.js b/app/assets/javascripts/ide/stores/mutations.js
index ea125214ebb..e84e2782e46 100644
--- a/app/assets/javascripts/ide/stores/mutations.js
+++ b/app/assets/javascripts/ide/stores/mutations.js
@@ -5,7 +5,14 @@ import mergeRequestMutation from './mutations/merge_request';
import fileMutations from './mutations/file';
import treeMutations from './mutations/tree';
import branchMutations from './mutations/branch';
-import { sortTree } from './utils';
+import {
+ sortTree,
+ replaceFileUrl,
+ swapInParentTreeWithSorting,
+ updateFileCollections,
+ removeFromParentTree,
+ pathsAreEqual,
+} from './utils';
export default {
[types.SET_INITIAL_DATA](state, data) {
@@ -56,11 +63,6 @@ export default {
stagedFiles: [],
});
},
- [types.CLEAR_REPLACED_FILES](state) {
- Object.assign(state, {
- replacedFiles: [],
- });
- },
[types.SET_ENTRIES](state, entries) {
Object.assign(state, {
entries,
@@ -71,16 +73,15 @@ export default {
const entry = data.entries[key];
const foundEntry = state.entries[key];
+ // NOTE: We can't clone `entry` in any of the below assignments because
+ // we need `state.entries` and the `entry.tree` to reference the same object.
if (!foundEntry) {
Object.assign(state.entries, {
[key]: entry,
});
} else if (foundEntry.deleted) {
Object.assign(state.entries, {
- [key]: {
- ...entry,
- replaces: true,
- },
+ [key]: Object.assign(entry, { replaces: true }),
});
} else {
const tree = entry.tree.filter(
@@ -157,9 +158,14 @@ export default {
changed: Boolean(changedFile),
staged: false,
replaces: false,
- prevPath: '',
- moved: false,
lastCommitSha: lastCommit.commit.id,
+
+ prevId: undefined,
+ prevPath: undefined,
+ prevName: undefined,
+ prevUrl: undefined,
+ prevKey: undefined,
+ prevParentPath: undefined,
});
if (prevPath) {
@@ -209,7 +215,9 @@ export default {
entry.deleted = true;
- parent.tree = parent.tree.filter(f => f.path !== entry.path);
+ if (parent) {
+ parent.tree = parent.tree.filter(f => f.path !== entry.path);
+ }
if (entry.type === 'blob') {
if (tempFile) {
@@ -219,51 +227,61 @@ export default {
}
}
},
- [types.RENAME_ENTRY](state, { path, name, entryPath = null, parentPath }) {
- const oldEntry = state.entries[entryPath || path];
- const slashedParentPath = parentPath ? `${parentPath}/` : '';
- const newPath = entryPath
- ? `${slashedParentPath}${oldEntry.name}`
- : `${slashedParentPath}${name}`;
+ [types.RENAME_ENTRY](state, { path, name, parentPath }) {
+ const oldEntry = state.entries[path];
+ const newPath = parentPath ? `${parentPath}/${name}` : name;
+ const isRevert = newPath === oldEntry.prevPath;
- Vue.set(state.entries, newPath, {
+ const newUrl = replaceFileUrl(oldEntry.url, oldEntry.path, newPath);
+
+ const newKey = oldEntry.key.replace(new RegExp(oldEntry.path, 'g'), newPath);
+
+ const baseProps = {
...oldEntry,
+ name,
id: newPath,
- key: `${newPath}-${oldEntry.type}-${oldEntry.path}`,
path: newPath,
- name: entryPath ? oldEntry.name : name,
- tempFile: true,
- prevPath: oldEntry.tempFile ? null : oldEntry.path,
- url: oldEntry.url.replace(new RegExp(`${oldEntry.path}/?$`), newPath),
- tree: [],
- raw: '',
- opened: false,
- parentPath,
- });
+ url: newUrl,
+ key: newKey,
+ parentPath: parentPath || '',
+ };
- oldEntry.moved = true;
- oldEntry.movedPath = newPath;
+ const prevProps =
+ oldEntry.tempFile || isRevert
+ ? {
+ prevId: undefined,
+ prevPath: undefined,
+ prevName: undefined,
+ prevUrl: undefined,
+ prevKey: undefined,
+ prevParentPath: undefined,
+ }
+ : {
+ prevId: oldEntry.prevId || oldEntry.id,
+ prevPath: oldEntry.prevPath || oldEntry.path,
+ prevName: oldEntry.prevName || oldEntry.name,
+ prevUrl: oldEntry.prevUrl || oldEntry.url,
+ prevKey: oldEntry.prevKey || oldEntry.key,
+ prevParentPath: oldEntry.prevParentPath || oldEntry.parentPath,
+ };
- const parent = parentPath
- ? state.entries[parentPath]
- : state.trees[`${state.currentProjectId}/${state.currentBranchId}`];
- const newEntry = state.entries[newPath];
-
- parent.tree = sortTree(parent.tree.concat(newEntry));
+ Vue.set(state.entries, newPath, {
+ ...baseProps,
+ ...prevProps,
+ });
- if (newEntry.type === 'blob') {
- state.changedFiles = state.changedFiles.concat(newEntry);
+ if (pathsAreEqual(oldEntry.parentPath, parentPath)) {
+ swapInParentTreeWithSorting(state, oldEntry.key, newPath, parentPath);
+ } else {
+ removeFromParentTree(state, oldEntry.key, oldEntry.parentPath);
+ swapInParentTreeWithSorting(state, oldEntry.key, newPath, parentPath);
}
- if (oldEntry.tempFile) {
- const filterMethod = f => f.path !== oldEntry.path;
-
- state.openFiles = state.openFiles.filter(filterMethod);
- state.changedFiles = state.changedFiles.filter(filterMethod);
- parent.tree = parent.tree.filter(filterMethod);
-
- Vue.delete(state.entries, oldEntry.path);
+ if (oldEntry.type === 'blob') {
+ updateFileCollections(state, oldEntry.key, newPath);
}
+
+ Vue.delete(state.entries, oldEntry.path);
},
...projectMutations,
diff --git a/app/assets/javascripts/ide/stores/mutations/file.js b/app/assets/javascripts/ide/stores/mutations/file.js
index 1442ea7dbfa..8caeb2d73b2 100644
--- a/app/assets/javascripts/ide/stores/mutations/file.js
+++ b/app/assets/javascripts/ide/stores/mutations/file.js
@@ -138,8 +138,6 @@ export default {
content: stagedFile ? stagedFile.content : state.entries[path].raw,
changed: false,
deleted: false,
- moved: false,
- movedPath: '',
});
if (deleted) {
@@ -179,11 +177,6 @@ export default {
});
if (stagedFile) {
- Object.assign(state, {
- replacedFiles: state.replacedFiles.concat({
- ...stagedFile,
- }),
- });
Object.assign(stagedFile, {
...state.entries[path],
});
@@ -252,4 +245,15 @@ export default {
openFiles: state.openFiles.filter(f => f.key !== file.key),
});
},
+ [types.REMOVE_FILE_FROM_STAGED_AND_CHANGED](state, file) {
+ Object.assign(state, {
+ changedFiles: state.changedFiles.filter(f => f.key !== file.key),
+ stagedFiles: state.stagedFiles.filter(f => f.key !== file.key),
+ });
+
+ Object.assign(state.entries[file.path], {
+ changed: false,
+ staged: false,
+ });
+ },
};
diff --git a/app/assets/javascripts/ide/stores/state.js b/app/assets/javascripts/ide/stores/state.js
index c4da482bf0a..d400b9831a9 100644
--- a/app/assets/javascripts/ide/stores/state.js
+++ b/app/assets/javascripts/ide/stores/state.js
@@ -6,7 +6,6 @@ export default () => ({
currentMergeRequestId: '',
changedFiles: [],
stagedFiles: [],
- replacedFiles: [],
endpoints: {},
lastCommitMsg: '',
lastCommitPath: '',
diff --git a/app/assets/javascripts/ide/stores/utils.js b/app/assets/javascripts/ide/stores/utils.js
index 52200ce7847..a8d8ff31afe 100644
--- a/app/assets/javascripts/ide/stores/utils.js
+++ b/app/assets/javascripts/ide/stores/utils.js
@@ -50,9 +50,7 @@ export const dataStructure = () => ({
lastOpenedAt: 0,
mrChange: null,
deleted: false,
- prevPath: '',
- movedPath: '',
- moved: false,
+ prevPath: undefined,
});
export const decorateData = entity => {
@@ -129,7 +127,7 @@ export const commitActionForFile = file => {
export const getCommitFiles = stagedFiles =>
stagedFiles.reduce((acc, file) => {
- if (file.moved || file.type === 'tree') return acc;
+ if (file.type === 'tree') return acc;
return acc.concat({
...file,
@@ -148,9 +146,9 @@ export const createCommitPayload = ({
commit_message: state.commitMessage || getters.preBuiltCommitMessage,
actions: getCommitFiles(rootState.stagedFiles).map(f => ({
action: commitActionForFile(f),
- file_path: f.moved ? f.movedPath : f.path,
- previous_path: f.prevPath === '' ? undefined : f.prevPath,
- content: f.prevPath ? null : f.content || undefined,
+ file_path: f.path,
+ previous_path: f.prevPath || undefined,
+ content: f.prevPath && !f.changed ? null : f.content || undefined,
encoding: f.base64 ? 'base64' : 'text',
last_commit_id:
newBranch || f.deleted || f.prevPath || f.replaces ? undefined : f.lastCommitSha,
@@ -213,3 +211,61 @@ export const mergeTrees = (fromTree, toTree) => {
return toTree;
};
+
+export const escapeFileUrl = fileUrl => encodeURIComponent(fileUrl).replace(/%2F/g, '/');
+
+export const replaceFileUrl = (url, oldPath, newPath) => {
+ // Add `/-/` so that we don't accidentally replace project path
+ const result = url.replace(`/-/${escapeFileUrl(oldPath)}`, `/-/${escapeFileUrl(newPath)}`);
+
+ return result;
+};
+
+export const swapInStateArray = (state, arr, key, entryPath) =>
+ Object.assign(state, {
+ [arr]: state[arr].map(f => (f.key === key ? state.entries[entryPath] : f)),
+ });
+
+export const getEntryOrRoot = (state, path) =>
+ path ? state.entries[path] : state.trees[`${state.currentProjectId}/${state.currentBranchId}`];
+
+export const swapInParentTreeWithSorting = (state, oldKey, newPath, parentPath) => {
+ if (!newPath) {
+ return;
+ }
+
+ const parent = getEntryOrRoot(state, parentPath);
+
+ if (parent) {
+ const tree = parent.tree
+ // filter out old entry && new entry
+ .filter(({ key, path }) => key !== oldKey && path !== newPath)
+ // concat new entry
+ .concat(state.entries[newPath]);
+
+ parent.tree = sortTree(tree);
+ }
+};
+
+export const removeFromParentTree = (state, oldKey, parentPath) => {
+ const parent = getEntryOrRoot(state, parentPath);
+
+ if (parent) {
+ parent.tree = sortTree(parent.tree.filter(({ key }) => key !== oldKey));
+ }
+};
+
+export const updateFileCollections = (state, key, entryPath) => {
+ ['openFiles', 'changedFiles', 'stagedFiles'].forEach(fileCollection => {
+ swapInStateArray(state, fileCollection, key, entryPath);
+ });
+};
+
+export const cleanTrailingSlash = path => path.replace(/\/$/, '');
+
+export const pathsAreEqual = (a, b) => {
+ const cleanA = a ? cleanTrailingSlash(a) : '';
+ const cleanB = b ? cleanTrailingSlash(b) : '';
+
+ return cleanA === cleanB;
+};
diff --git a/app/assets/javascripts/image_diff/helpers/badge_helper.js b/app/assets/javascripts/image_diff/helpers/badge_helper.js
index 000157efad0..7921650e8a0 100644
--- a/app/assets/javascripts/image_diff/helpers/badge_helper.js
+++ b/app/assets/javascripts/image_diff/helpers/badge_helper.js
@@ -1,3 +1,5 @@
+import { spriteIcon } from '~/lib/utils/common_utils';
+
export function createImageBadge(noteId, { x, y }, classNames = []) {
const buttonEl = document.createElement('button');
const classList = classNames.concat(['js-image-badge']);
@@ -20,7 +22,7 @@ export function addImageBadge(containerEl, { coordinate, badgeText, noteId }) {
export function addImageCommentBadge(containerEl, { coordinate, noteId }) {
const buttonEl = createImageBadge(noteId, coordinate, ['image-comment-badge']);
- buttonEl.innerHTML = gl.utils.spriteIcon('image-comment-dark');
+ buttonEl.innerHTML = spriteIcon('image-comment-dark');
containerEl.appendChild(buttonEl);
}
diff --git a/app/assets/javascripts/image_diff/helpers/comment_indicator_helper.js b/app/assets/javascripts/image_diff/helpers/comment_indicator_helper.js
index 7051a968dac..df3d90cff68 100644
--- a/app/assets/javascripts/image_diff/helpers/comment_indicator_helper.js
+++ b/app/assets/javascripts/image_diff/helpers/comment_indicator_helper.js
@@ -1,3 +1,5 @@
+import { spriteIcon } from '~/lib/utils/common_utils';
+
export function addCommentIndicator(containerEl, { x, y }) {
const buttonEl = document.createElement('button');
buttonEl.classList.add('btn-transparent');
@@ -6,7 +8,7 @@ export function addCommentIndicator(containerEl, { x, y }) {
buttonEl.style.left = `${x}px`;
buttonEl.style.top = `${y}px`;
- buttonEl.innerHTML = gl.utils.spriteIcon('image-comment-dark');
+ buttonEl.innerHTML = spriteIcon('image-comment-dark');
containerEl.appendChild(buttonEl);
}
diff --git a/app/assets/javascripts/import_projects/components/import_projects_table.vue b/app/assets/javascripts/import_projects/components/import_projects_table.vue
index 00eb0afb3bf..e5ac3cbafe5 100644
--- a/app/assets/javascripts/import_projects/components/import_projects_table.vue
+++ b/app/assets/javascripts/import_projects/components/import_projects_table.vue
@@ -1,4 +1,5 @@
<script>
+import _ from 'underscore';
import { mapActions, mapState, mapGetters } from 'vuex';
import { GlLoadingIcon } from '@gitlab/ui';
import LoadingButton from '~/vue_shared/components/loading_button.vue';
@@ -7,6 +8,8 @@ import ImportedProjectTableRow from './imported_project_table_row.vue';
import ProviderRepoTableRow from './provider_repo_table_row.vue';
import eventHub from '../event_hub';
+const reposFetchThrottleDelay = 1000;
+
export default {
name: 'ImportProjectsTable',
components: {
@@ -23,11 +26,11 @@ export default {
},
computed: {
- ...mapState(['importedProjects', 'providerRepos', 'isLoadingRepos']),
+ ...mapState(['importedProjects', 'providerRepos', 'isLoadingRepos', 'filter']),
...mapGetters(['isImportingAnyRepo', 'hasProviderRepos', 'hasImportedProjects']),
emptyStateText() {
- return sprintf(__('No %{providerTitle} repositories available to import'), {
+ return sprintf(__('No %{providerTitle} repositories found'), {
providerTitle: this.providerTitle,
});
},
@@ -47,21 +50,38 @@ export default {
},
methods: {
- ...mapActions(['fetchRepos', 'fetchJobs', 'stopJobsPolling', 'clearJobsEtagPoll']),
+ ...mapActions([
+ 'fetchRepos',
+ 'fetchReposFiltered',
+ 'fetchJobs',
+ 'stopJobsPolling',
+ 'clearJobsEtagPoll',
+ 'setFilter',
+ ]),
importAll() {
eventHub.$emit('importAll');
},
+
+ handleFilterInput({ target }) {
+ this.setFilter(target.value);
+ },
+
+ throttledFetchRepos: _.throttle(function fetch() {
+ eventHub.$off('importAll');
+ this.fetchRepos();
+ }, reposFetchThrottleDelay),
},
};
</script>
<template>
<div>
+ <p class="light text-nowrap mt-2">
+ {{ s__('ImportProjects|Select the projects you want to import') }}
+ </p>
+
<div class="d-flex justify-content-between align-items-end flex-wrap mb-3">
- <p class="light text-nowrap mt-2 my-sm-0">
- {{ s__('ImportProjects|Select the projects you want to import') }}
- </p>
<loading-button
container-class="btn btn-success js-import-all"
:loading="isImportingAnyRepo"
@@ -70,6 +90,19 @@ export default {
type="button"
@click="importAll"
/>
+ <form novalidate @submit.prevent>
+ <input
+ :value="filter"
+ data-qa-selector="githubish_import_filter_field"
+ class="form-control"
+ name="filter"
+ :placeholder="__('Filter your projects by name')"
+ autofocus
+ size="40"
+ @input="handleFilterInput($event)"
+ @keyup.enter="throttledFetchRepos"
+ />
+ </form>
</div>
<gl-loading-icon
v-if="isLoadingRepos"
diff --git a/app/assets/javascripts/import_projects/index.js b/app/assets/javascripts/import_projects/index.js
index 2d99d716609..b069dcb7766 100644
--- a/app/assets/javascripts/import_projects/index.js
+++ b/app/assets/javascripts/import_projects/index.js
@@ -38,7 +38,7 @@ export default function mountImportProjectsTable(mountElement) {
},
methods: {
- ...mapActions(['setInitialData']),
+ ...mapActions(['setInitialData', 'setFilter']),
},
render(createElement) {
diff --git a/app/assets/javascripts/import_projects/store/actions.js b/app/assets/javascripts/import_projects/store/actions.js
index c44500937cc..0fb9a4cdfd4 100644
--- a/app/assets/javascripts/import_projects/store/actions.js
+++ b/app/assets/javascripts/import_projects/store/actions.js
@@ -5,6 +5,7 @@ import Poll from '~/lib/utils/poll';
import createFlash from '~/flash';
import { s__, sprintf } from '~/locale';
import axios from '~/lib/utils/axios_utils';
+import { jobsPathWithFilter, reposPathWithFilter } from './getters';
let eTagPoll;
@@ -19,16 +20,20 @@ export const restartJobsPolling = () => {
};
export const setInitialData = ({ commit }, data) => commit(types.SET_INITIAL_DATA, data);
+export const setFilter = ({ commit }, filter) => commit(types.SET_FILTER, filter);
export const requestRepos = ({ commit }, repos) => commit(types.REQUEST_REPOS, repos);
export const receiveReposSuccess = ({ commit }, repos) =>
commit(types.RECEIVE_REPOS_SUCCESS, repos);
export const receiveReposError = ({ commit }) => commit(types.RECEIVE_REPOS_ERROR);
export const fetchRepos = ({ state, dispatch }) => {
+ dispatch('stopJobsPolling');
dispatch('requestRepos');
+ const { provider } = state;
+
return axios
- .get(state.reposPath)
+ .get(reposPathWithFilter(state))
.then(({ data }) =>
dispatch('receiveReposSuccess', convertObjectPropsToCamelCase(data, { deep: true })),
)
@@ -36,7 +41,7 @@ export const fetchRepos = ({ state, dispatch }) => {
.catch(() => {
createFlash(
sprintf(s__('ImportProjects|Requesting your %{provider} repositories failed'), {
- provider: state.provider,
+ provider,
}),
);
@@ -77,16 +82,23 @@ export const fetchImport = ({ state, dispatch }, { newName, targetNamespace, rep
export const receiveJobsSuccess = ({ commit }, updatedProjects) =>
commit(types.RECEIVE_JOBS_SUCCESS, updatedProjects);
export const fetchJobs = ({ state, dispatch }) => {
- if (eTagPoll) return;
+ const { filter } = state;
+
+ if (eTagPoll) {
+ stopJobsPolling();
+ clearJobsEtagPoll();
+ }
eTagPoll = new Poll({
resource: {
- fetchJobs: () => axios.get(state.jobsPath),
+ fetchJobs: () => axios.get(jobsPathWithFilter(state)),
},
method: 'fetchJobs',
successCallback: ({ data }) =>
dispatch('receiveJobsSuccess', convertObjectPropsToCamelCase(data, { deep: true })),
- errorCallback: () => createFlash(s__('ImportProjects|Updating the imported projects failed')),
+ errorCallback: () =>
+ createFlash(s__('ImportProjects|Update of imported projects with realtime changes failed')),
+ data: { filter },
});
if (!Visibility.hidden()) {
diff --git a/app/assets/javascripts/import_projects/store/getters.js b/app/assets/javascripts/import_projects/store/getters.js
index 727b80765bd..b107c293181 100644
--- a/app/assets/javascripts/import_projects/store/getters.js
+++ b/app/assets/javascripts/import_projects/store/getters.js
@@ -20,3 +20,8 @@ export const isImportingAnyRepo = state => state.reposBeingImported.length > 0;
export const hasProviderRepos = state => state.providerRepos.length > 0;
export const hasImportedProjects = state => state.importedProjects.length > 0;
+
+export const reposPathWithFilter = ({ reposPath, filter = '' }) =>
+ filter ? `${reposPath}?filter=${filter}` : reposPath;
+export const jobsPathWithFilter = ({ jobsPath, filter = '' }) =>
+ filter ? `${jobsPath}?filter=${filter}` : jobsPath;
diff --git a/app/assets/javascripts/import_projects/store/mutation_types.js b/app/assets/javascripts/import_projects/store/mutation_types.js
index 6ba3fd6f29e..16574f4450f 100644
--- a/app/assets/javascripts/import_projects/store/mutation_types.js
+++ b/app/assets/javascripts/import_projects/store/mutation_types.js
@@ -9,3 +9,5 @@ export const RECEIVE_IMPORT_SUCCESS = 'RECEIVE_IMPORT_SUCCESS';
export const RECEIVE_IMPORT_ERROR = 'RECEIVE_IMPORT_ERROR';
export const RECEIVE_JOBS_SUCCESS = 'RECEIVE_JOBS_SUCCESS';
+
+export const SET_FILTER = 'SET_FILTER';
diff --git a/app/assets/javascripts/import_projects/store/mutations.js b/app/assets/javascripts/import_projects/store/mutations.js
index b88de0268e7..6c56cfa8298 100644
--- a/app/assets/javascripts/import_projects/store/mutations.js
+++ b/app/assets/javascripts/import_projects/store/mutations.js
@@ -6,6 +6,10 @@ export default {
Object.assign(state, data);
},
+ [types.SET_FILTER](state, filter) {
+ state.filter = filter;
+ },
+
[types.REQUEST_REPOS](state) {
state.isLoadingRepos = true;
},
diff --git a/app/assets/javascripts/import_projects/store/state.js b/app/assets/javascripts/import_projects/store/state.js
index 637fef6e53c..829f3aa4fbb 100644
--- a/app/assets/javascripts/import_projects/store/state.js
+++ b/app/assets/javascripts/import_projects/store/state.js
@@ -12,4 +12,5 @@ export default () => ({
isLoadingRepos: false,
canSelectNamespace: false,
ciCdOnly: false,
+ filter: '',
});
diff --git a/app/assets/javascripts/integrations/integration_settings_form.js b/app/assets/javascripts/integrations/integration_settings_form.js
index a7746bb3a0b..1c9b94ade8a 100644
--- a/app/assets/javascripts/integrations/integration_settings_form.js
+++ b/app/assets/javascripts/integrations/integration_settings_form.js
@@ -42,6 +42,7 @@ export default class IntegrationSettingsForm {
// and test the service using provided configuration.
if (this.$form.get(0).checkValidity() && this.canTestService) {
e.preventDefault();
+ // eslint-disable-next-line no-jquery/no-serialize
this.testSettings(this.$form.serialize());
}
}
diff --git a/app/assets/javascripts/issuable_bulk_update_actions.js b/app/assets/javascripts/issuable_bulk_update_actions.js
index c855f3973b0..45de287d44d 100644
--- a/app/assets/javascripts/issuable_bulk_update_actions.js
+++ b/app/assets/javascripts/issuable_bulk_update_actions.js
@@ -1,4 +1,4 @@
-/* eslint-disable consistent-return, func-names, array-callback-return, prefer-arrow-callback */
+/* eslint-disable consistent-return, func-names, array-callback-return */
import $ from 'jquery';
import _ from 'underscore';
@@ -45,7 +45,7 @@ export default {
this.getSelectedIssues().map(function() {
const labelsData = $(this).data('labels');
if (labelsData) {
- return labelsData.map(function(labelId) {
+ return labelsData.map(labelId => {
if (labels.indexOf(labelId) === -1) {
return labels.push(labelId);
}
diff --git a/app/assets/javascripts/issuable_sidebar/components/sidebar_app.vue b/app/assets/javascripts/issuable_sidebar/components/sidebar_app.vue
new file mode 100644
index 00000000000..06c50f62aab
--- /dev/null
+++ b/app/assets/javascripts/issuable_sidebar/components/sidebar_app.vue
@@ -0,0 +1,23 @@
+<script>
+export default {
+ props: {
+ signedIn: {
+ type: Boolean,
+ required: true,
+ },
+ sidebarStatusClass: {
+ type: String,
+ required: false,
+ default: '',
+ },
+ },
+};
+</script>
+
+<template>
+ <aside
+ :class="sidebarStatusClass"
+ class="right-sidebar js-right-sidebar js-issuable-sidebar"
+ aria-live="polite"
+ ></aside>
+</template>
diff --git a/app/assets/javascripts/issuable_sidebar/sidebar_bundle.js b/app/assets/javascripts/issuable_sidebar/sidebar_bundle.js
new file mode 100644
index 00000000000..c8acafa8cd8
--- /dev/null
+++ b/app/assets/javascripts/issuable_sidebar/sidebar_bundle.js
@@ -0,0 +1,27 @@
+import Vue from 'vue';
+
+import SidebarApp from './components/sidebar_app.vue';
+
+export default () => {
+ const el = document.getElementById('js-vue-issuable-sidebar');
+
+ if (!el) {
+ return false;
+ }
+
+ const { sidebarStatusClass } = el.dataset;
+ // An empty string is present when user is signed in.
+ const signedIn = el.dataset.signedIn === '';
+
+ return new Vue({
+ el,
+ components: { SidebarApp },
+ render: createElement =>
+ createElement('sidebar-app', {
+ props: {
+ signedIn,
+ sidebarStatusClass,
+ },
+ }),
+ });
+};
diff --git a/app/assets/javascripts/issue_show/components/app.vue b/app/assets/javascripts/issue_show/components/app.vue
index 88975c2cc73..b8b3a4f44fd 100644
--- a/app/assets/javascripts/issue_show/components/app.vue
+++ b/app/assets/javascripts/issue_show/components/app.vue
@@ -102,10 +102,10 @@ export default {
required: false,
default: '',
},
- issuableTemplates: {
- type: Array,
+ issuableTemplateNamesPath: {
+ type: String,
required: false,
- default: () => [],
+ default: '',
},
markdownPreviewPath: {
type: String,
@@ -156,9 +156,13 @@ export default {
store,
state: store.state,
showForm: false,
+ templatesRequested: false,
};
},
computed: {
+ issuableTemplates() {
+ return this.store.formState.issuableTemplates;
+ },
formState() {
return this.store.formState;
},
@@ -233,6 +237,7 @@ export default {
}
return undefined;
},
+
updateStoreState() {
return this.service
.getData()
@@ -245,7 +250,7 @@ export default {
});
},
- openForm() {
+ updateAndShowForm(templates = []) {
if (!this.showForm) {
this.showForm = true;
this.store.setFormState({
@@ -254,9 +259,32 @@ export default {
lock_version: this.state.lock_version,
lockedWarningVisible: false,
updateLoading: false,
+ issuableTemplates: templates,
+ });
+ }
+ },
+
+ requestTemplatesAndShowForm() {
+ return this.service
+ .loadTemplates(this.issuableTemplateNamesPath)
+ .then(res => {
+ this.updateAndShowForm(res.data);
+ })
+ .catch(() => {
+ createFlash(this.defaultErrorMessage);
+ this.updateAndShowForm();
});
+ },
+
+ openForm() {
+ if (!this.templatesRequested) {
+ this.templatesRequested = true;
+ this.requestTemplatesAndShowForm();
+ } else {
+ this.updateAndShowForm(this.issuableTemplates);
}
},
+
closeForm() {
this.showForm = false;
},
diff --git a/app/assets/javascripts/issue_show/index.js b/app/assets/javascripts/issue_show/index.js
index 5a9dd91817e..e170d338408 100644
--- a/app/assets/javascripts/issue_show/index.js
+++ b/app/assets/javascripts/issue_show/index.js
@@ -1,8 +1,6 @@
import Vue from 'vue';
-import { initSidebarTracking } from 'ee_else_ce/event_tracking/issue_sidebar';
import issuableApp from './components/app.vue';
import { parseIssuableData } from './utils/parse_data';
-import '../vue_shared/vue_resource_interceptor';
export default function initIssueableApp() {
return new Vue({
@@ -10,9 +8,6 @@ export default function initIssueableApp() {
components: {
issuableApp,
},
- mounted() {
- initSidebarTracking();
- },
render(createElement) {
return createElement('issuable-app', {
props: parseIssuableData(),
diff --git a/app/assets/javascripts/issue_show/services/index.js b/app/assets/javascripts/issue_show/services/index.js
index 3c8334bee50..b1deeaae0fc 100644
--- a/app/assets/javascripts/issue_show/services/index.js
+++ b/app/assets/javascripts/issue_show/services/index.js
@@ -17,4 +17,13 @@ export default class Service {
updateIssuable(data) {
return axios.put(this.endpoint, data);
}
+
+ // eslint-disable-next-line class-methods-use-this
+ loadTemplates(templateNamesEndpoint) {
+ if (!templateNamesEndpoint) {
+ return Promise.resolve([]);
+ }
+
+ return axios.get(templateNamesEndpoint);
+ }
}
diff --git a/app/assets/javascripts/issue_show/stores/index.js b/app/assets/javascripts/issue_show/stores/index.js
index 3c17e73ccec..688ba7b268d 100644
--- a/app/assets/javascripts/issue_show/stores/index.js
+++ b/app/assets/javascripts/issue_show/stores/index.js
@@ -1,4 +1,6 @@
+import _ from 'underscore';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
+import updateDescription from '../utils/update_description';
export default class Store {
constructor(initialState) {
@@ -9,6 +11,7 @@ export default class Store {
lockedWarningVisible: false,
updateLoading: false,
lock_version: 0,
+ issuableTemplates: [],
};
}
@@ -18,8 +21,15 @@ export default class Store {
}
Object.assign(this.state, convertObjectPropsToCamelCase(data));
+ // find if there is an open details node inside of the issue description.
+ const descriptionSection = document.body.querySelector(
+ '.detail-page-description.content-block',
+ );
+ const details =
+ !_.isNull(descriptionSection) && descriptionSection.getElementsByTagName('details');
+
+ this.state.descriptionHtml = updateDescription(data.description, details);
this.state.titleHtml = data.title;
- this.state.descriptionHtml = data.description;
this.state.lock_version = data.lock_version;
}
diff --git a/app/assets/javascripts/issue_show/utils/update_description.js b/app/assets/javascripts/issue_show/utils/update_description.js
new file mode 100644
index 00000000000..315f6c23b02
--- /dev/null
+++ b/app/assets/javascripts/issue_show/utils/update_description.js
@@ -0,0 +1,38 @@
+import _ from 'underscore';
+
+/**
+ * Function that replaces the open attribute for the <details> element.
+ *
+ * @param {String} descriptionHtml - The html string passed back from the server as a result of polling
+ * @param {Array} details - All detail nodes inside of the issue description.
+ */
+
+const updateDescription = (descriptionHtml = '', details) => {
+ let detailNodes = details;
+
+ if (_.isEmpty(details)) {
+ detailNodes = [];
+ }
+
+ const placeholder = document.createElement('div');
+ placeholder.innerHTML = descriptionHtml;
+
+ const newDetails = placeholder.getElementsByTagName('details');
+
+ if (newDetails.length !== detailNodes.length) {
+ return descriptionHtml;
+ }
+
+ Array.from(newDetails).forEach((el, i) => {
+ /*
+ * <details> has an open attribute that can have a value, "", "true", "false"
+ * and will show the dropdown, which is why we are setting the attribute
+ * explicitly to true.
+ */
+ if (detailNodes[i].open) el.setAttribute('open', true);
+ });
+
+ return placeholder.innerHTML;
+};
+
+export default updateDescription;
diff --git a/app/assets/javascripts/jobs/components/commit_block.vue b/app/assets/javascripts/jobs/components/commit_block.vue
index 9fac880c5f8..8156f26ffb1 100644
--- a/app/assets/javascripts/jobs/components/commit_block.vue
+++ b/app/assets/javascripts/jobs/components/commit_block.vue
@@ -41,7 +41,7 @@ export default {
<clipboard-button
:text="commit.id"
- :title="__('Copy commit SHA to clipboard')"
+ :title="__('Copy commit SHA')"
css-class="btn btn-clipboard btn-transparent"
/>
diff --git a/app/assets/javascripts/jobs/components/environments_block.vue b/app/assets/javascripts/jobs/components/environments_block.vue
index 8cda7dac51f..163849d3c40 100644
--- a/app/assets/javascripts/jobs/components/environments_block.vue
+++ b/app/assets/javascripts/jobs/components/environments_block.vue
@@ -19,69 +19,18 @@ export default {
},
computed: {
environment() {
- let environmentText;
switch (this.deploymentStatus.status) {
case 'last':
- environmentText = sprintf(
- __('This job is the most recent deployment to %{link}.'),
- { link: this.environmentLink },
- false,
- );
- break;
+ return this.lastEnvironmentMessage();
case 'out_of_date':
- if (this.hasLastDeployment) {
- environmentText = sprintf(
- __(
- 'This job is an out-of-date deployment to %{environmentLink}. View the most recent deployment %{deploymentLink}.',
- ),
- {
- environmentLink: this.environmentLink,
- deploymentLink: this.deploymentLink(`#${this.lastDeployment.iid}`),
- },
- false,
- );
- } else {
- environmentText = sprintf(
- __('This job is an out-of-date deployment to %{environmentLink}.'),
- { environmentLink: this.environmentLink },
- false,
- );
- }
-
- break;
+ return this.outOfDateEnvironmentMessage();
case 'failed':
- environmentText = sprintf(
- __('The deployment of this job to %{environmentLink} did not succeed.'),
- { environmentLink: this.environmentLink },
- false,
- );
- break;
+ return this.failedEnvironmentMessage();
case 'creating':
- if (this.hasLastDeployment) {
- environmentText = sprintf(
- __(
- 'This job is creating a deployment to %{environmentLink} and will overwrite the %{deploymentLink}.',
- ),
- {
- environmentLink: this.environmentLink,
- deploymentLink: this.deploymentLink(__('latest deployment')),
- },
- false,
- );
- } else {
- environmentText = sprintf(
- __('This job is creating a deployment to %{environmentLink}.'),
- { environmentLink: this.environmentLink },
- false,
- );
- }
- break;
+ return this.creatingEnvironmentMessage();
default:
- break;
+ return '';
}
- return environmentText && this.hasCluster
- ? `${environmentText} ${this.clusterText}`
- : environmentText;
},
environmentLink() {
if (this.hasEnvironment) {
@@ -137,11 +86,6 @@ export default {
false,
);
},
- clusterText() {
- return this.hasCluster
- ? sprintf(__('Cluster %{cluster} was used.'), { cluster: this.clusterNameOrLink }, false)
- : '';
- },
},
methods: {
deploymentLink(name) {
@@ -155,6 +99,91 @@ export default {
false,
);
},
+ failedEnvironmentMessage() {
+ const { environmentLink } = this;
+
+ return sprintf(
+ __('The deployment of this job to %{environmentLink} did not succeed.'),
+ { environmentLink },
+ false,
+ );
+ },
+ lastEnvironmentMessage() {
+ const { environmentLink, clusterNameOrLink, hasCluster } = this;
+
+ const message = hasCluster
+ ? __('This job is deployed to %{environmentLink} using cluster %{clusterNameOrLink}.')
+ : __('This job is deployed to %{environmentLink}.');
+
+ return sprintf(message, { environmentLink, clusterNameOrLink }, false);
+ },
+ outOfDateEnvironmentMessage() {
+ const { hasLastDeployment, hasCluster, environmentLink, clusterNameOrLink } = this;
+
+ if (hasLastDeployment) {
+ const message = hasCluster
+ ? __(
+ 'This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink}. View the %{deploymentLink}.',
+ )
+ : __(
+ 'This job is an out-of-date deployment to %{environmentLink}. View the %{deploymentLink}.',
+ );
+
+ return sprintf(
+ message,
+ {
+ environmentLink,
+ clusterNameOrLink,
+ deploymentLink: this.deploymentLink(__('most recent deployment')),
+ },
+ false,
+ );
+ }
+
+ const message = hasCluster
+ ? __(
+ 'This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink}.',
+ )
+ : __('This job is an out-of-date deployment to %{environmentLink}.');
+
+ return sprintf(
+ message,
+ {
+ environmentLink,
+ clusterNameOrLink,
+ },
+ false,
+ );
+ },
+ creatingEnvironmentMessage() {
+ const { hasLastDeployment, hasCluster, environmentLink, clusterNameOrLink } = this;
+
+ if (hasLastDeployment) {
+ const message = hasCluster
+ ? __(
+ 'This job is creating a deployment to %{environmentLink} using cluster %{clusterNameOrLink}. This will overwrite the %{deploymentLink}.',
+ )
+ : __(
+ 'This job is creating a deployment to %{environmentLink}. This will overwrite the %{deploymentLink}.',
+ );
+
+ return sprintf(
+ message,
+ {
+ environmentLink,
+ clusterNameOrLink,
+ deploymentLink: this.deploymentLink(__('latest deployment')),
+ },
+ false,
+ );
+ }
+
+ return sprintf(
+ __('This job is creating a deployment to %{environmentLink}.'),
+ { environmentLink },
+ false,
+ );
+ },
},
};
</script>
diff --git a/app/assets/javascripts/jobs/components/job_app.vue b/app/assets/javascripts/jobs/components/job_app.vue
index 36701a95673..859f839741f 100644
--- a/app/assets/javascripts/jobs/components/job_app.vue
+++ b/app/assets/javascripts/jobs/components/job_app.vue
@@ -30,7 +30,7 @@ export default {
EnvironmentsBlock,
ErasedBlock,
Icon,
- Log: () => (isNewJobLogActive() ? import('./job_log_json.vue') : import('./job_log.vue')),
+ Log: () => (isNewJobLogActive() ? import('./log/log.vue') : import('./job_log.vue')),
LogTopBar,
StuckBlock,
UnmetPrerequisitesBlock,
@@ -130,6 +130,10 @@ export default {
return title;
},
+
+ shouldRenderHeaderCallout() {
+ return this.shouldRenderCalloutMessage && !this.hasUnmetPrerequisitesFailure;
+ },
},
watch: {
// Once the job log is loaded,
@@ -239,10 +243,9 @@ export default {
/>
</div>
- <callout
- v-if="shouldRenderCalloutMessage && !hasUnmetPrerequisitesFailure"
- :message="job.callout_message"
- />
+ <callout v-if="shouldRenderHeaderCallout">
+ <div v-html="job.callout_message"></div>
+ </callout>
</header>
<!-- EO Header Section -->
diff --git a/app/assets/javascripts/jobs/components/job_container_item.vue b/app/assets/javascripts/jobs/components/job_container_item.vue
index a55dffbe488..7bd299bcfa0 100644
--- a/app/assets/javascripts/jobs/components/job_container_item.vue
+++ b/app/assets/javascripts/jobs/components/job_container_item.vue
@@ -54,7 +54,7 @@ export default {
:href="job.status.details_path"
:title="tooltipText"
data-boundary="viewport"
- class="js-job-link"
+ class="js-job-link d-flex"
>
<icon
v-if="isActive"
@@ -64,7 +64,7 @@ export default {
<ci-icon :status="job.status" />
- <span>{{ job.name ? job.name : job.id }}</span>
+ <span class="text-truncate w-100">{{ job.name ? job.name : job.id }}</span>
<icon v-if="job.retried" name="retry" class="js-retry-icon" />
</gl-link>
diff --git a/app/assets/javascripts/jobs/components/job_log.vue b/app/assets/javascripts/jobs/components/job_log.vue
index a3fbe9338ee..20888c0af42 100644
--- a/app/assets/javascripts/jobs/components/job_log.vue
+++ b/app/assets/javascripts/jobs/components/job_log.vue
@@ -19,18 +19,13 @@ export default {
updated() {
this.$nextTick(() => {
this.handleScrollDown();
- this.handleCollapsibleRows();
});
},
mounted() {
this.$nextTick(() => {
this.handleScrollDown();
- this.handleCollapsibleRows();
});
},
- destroyed() {
- this.removeEventListener();
- },
methods: {
...mapActions(['scrollBottom']),
/**
@@ -47,53 +42,6 @@ export default {
}, 0);
}
},
- removeEventListener() {
- this.$el.querySelectorAll('.js-section-start').forEach(el => {
- const titleSection = el.nextSibling;
- titleSection.removeEventListener(
- 'click',
- this.handleHeaderClick.bind(this, el, el.dataset.section),
- );
- el.removeEventListener('click', this.handleSectionClick);
- });
- },
- /**
- * The collapsible rows are sent in HTML from the backend
- * We need tos add a onclick handler for the divs that match `.js-section-start`
- *
- */
- handleCollapsibleRows() {
- this.$el.querySelectorAll('.js-section-start').forEach(el => {
- const titleSection = el.nextSibling;
- titleSection.addEventListener(
- 'click',
- this.handleHeaderClick.bind(this, el, el.dataset.section),
- );
- el.addEventListener('click', this.handleSectionClick);
- });
- },
-
- handleHeaderClick(arrowElement, section) {
- this.updateToggleSection(arrowElement, section);
- },
-
- updateToggleSection(arrow, section) {
- // toggle the arrow class
- arrow.classList.toggle('fa-caret-right');
- arrow.classList.toggle('fa-caret-down');
-
- // hide the sections
- const sibilings = this.$el.querySelectorAll(`.js-s-${section}:not(.js-section-header)`);
- sibilings.forEach(row => row.classList.toggle('hidden'));
- },
- /**
- * On click, we toggle the hidden class of
- * all the rows that match the `data-section` selector
- */
- handleSectionClick(evt) {
- const clickedArrow = evt.currentTarget;
- this.updateToggleSection(clickedArrow, clickedArrow.dataset.section);
- },
},
};
</script>
diff --git a/app/assets/javascripts/jobs/components/job_log_json.vue b/app/assets/javascripts/jobs/components/job_log_json.vue
deleted file mode 100644
index 2198b20eb8f..00000000000
--- a/app/assets/javascripts/jobs/components/job_log_json.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-<script>
-export default {
- name: 'JobLogJSON',
-};
-</script>
-<template>
- <pre>
- {{ __('This feature is in development. Please disable the `job_log_json` feature flag') }}
- </pre>
-</template>
diff --git a/app/assets/javascripts/jobs/components/log/collapsible_section.vue b/app/assets/javascripts/jobs/components/log/collapsible_section.vue
new file mode 100644
index 00000000000..0c7b78a3da7
--- /dev/null
+++ b/app/assets/javascripts/jobs/components/log/collapsible_section.vue
@@ -0,0 +1,51 @@
+<script>
+import LogLine from './line.vue';
+import LogLineHeader from './line_header.vue';
+
+export default {
+ name: 'CollpasibleLogSection',
+ components: {
+ LogLine,
+ LogLineHeader,
+ },
+ props: {
+ section: {
+ type: Object,
+ required: true,
+ },
+ traceEndpoint: {
+ type: String,
+ required: true,
+ },
+ },
+ computed: {
+ badgeDuration() {
+ return this.section.line && this.section.line.section_duration;
+ },
+ },
+ methods: {
+ handleOnClickCollapsibleLine(section) {
+ this.$emit('onClickCollapsibleLine', section);
+ },
+ },
+};
+</script>
+<template>
+ <div>
+ <log-line-header
+ :line="section.line"
+ :duration="badgeDuration"
+ :path="traceEndpoint"
+ :is-closed="section.isClosed"
+ @toggleLine="handleOnClickCollapsibleLine(section)"
+ />
+ <template v-if="!section.isClosed">
+ <log-line
+ v-for="line in section.lines"
+ :key="line.offset"
+ :line="line"
+ :path="traceEndpoint"
+ />
+ </template>
+ </div>
+</template>
diff --git a/app/assets/javascripts/jobs/components/log/duration_badge.vue b/app/assets/javascripts/jobs/components/log/duration_badge.vue
index 31a101d2c95..8e5dcdcc902 100644
--- a/app/assets/javascripts/jobs/components/log/duration_badge.vue
+++ b/app/assets/javascripts/jobs/components/log/duration_badge.vue
@@ -9,7 +9,7 @@ export default {
};
</script>
<template>
- <div class="log-duration-badge rounded align-self-start px-2 ml-2 flex-shrink-0">
+ <div class="log-duration-badge rounded align-self-start px-2 ml-2 flex-shrink-0 ws-normal">
{{ duration }}
</div>
</template>
diff --git a/app/assets/javascripts/jobs/components/log/line.vue b/app/assets/javascripts/jobs/components/log/line.vue
index 4e09c85b25a..33ee84bd4ee 100644
--- a/app/assets/javascripts/jobs/components/log/line.vue
+++ b/app/assets/javascripts/jobs/components/log/line.vue
@@ -19,10 +19,14 @@ export default {
</script>
<template>
- <div class="log-line">
+ <div class="js-line log-line">
<line-number :line-number="line.lineNumber" :path="path" />
- <span v-for="(content, i) in line.content" :key="i" :class="content.style">{{
- content.text
- }}</span>
+ <span
+ v-for="(content, i) in line.content"
+ :key="i"
+ :class="content.style"
+ class="ws-pre-wrap"
+ >{{ content.text }}</span
+ >
</div>
</template>
diff --git a/app/assets/javascripts/jobs/components/log/line_header.vue b/app/assets/javascripts/jobs/components/log/line_header.vue
index 92cf3b3cf5f..85ccd5996b5 100644
--- a/app/assets/javascripts/jobs/components/log/line_header.vue
+++ b/app/assets/javascripts/jobs/components/log/line_header.vue
@@ -43,15 +43,19 @@ export default {
<template>
<div
- class="log-line collapsible-line d-flex justify-content-between"
+ class="log-line collapsible-line d-flex justify-content-between ws-normal"
role="button"
@click="handleOnClick"
>
<icon :name="iconName" class="arrow position-absolute" />
<line-number :line-number="line.lineNumber" :path="path" />
- <span v-for="(content, i) in line.content" :key="i" class="line-text" :class="content.style">{{
- content.text
- }}</span>
+ <span
+ v-for="(content, i) in line.content"
+ :key="i"
+ class="line-text w-100 ws-pre-wrap"
+ :class="content.style"
+ >{{ content.text }}</span
+ >
<duration-badge v-if="duration" :duration="duration" />
</div>
</template>
diff --git a/app/assets/javascripts/jobs/components/log/line_number.vue b/app/assets/javascripts/jobs/components/log/line_number.vue
index 6c76bef13d3..ae96c32874b 100644
--- a/app/assets/javascripts/jobs/components/log/line_number.vue
+++ b/app/assets/javascripts/jobs/components/log/line_number.vue
@@ -48,7 +48,7 @@ export default {
<template>
<gl-link
:id="lineNumberId"
- class="d-inline-block text-right position-absolute line-number"
+ class="d-inline-block text-right line-number flex-shrink-0"
:href="buildLineNumber"
>{{ parsedLineNumber }}</gl-link
>
diff --git a/app/assets/javascripts/jobs/components/log/log.vue b/app/assets/javascripts/jobs/components/log/log.vue
index 429796aeb4e..ef126166e8b 100644
--- a/app/assets/javascripts/jobs/components/log/log.vue
+++ b/app/assets/javascripts/jobs/components/log/log.vue
@@ -1,12 +1,12 @@
<script>
import { mapState, mapActions } from 'vuex';
+import CollpasibleLogSection from './collapsible_section.vue';
import LogLine from './line.vue';
-import LogLineHeader from './line_header.vue';
export default {
components: {
+ CollpasibleLogSection,
LogLine,
- LogLineHeader,
},
computed: {
...mapState(['traceEndpoint', 'trace', 'isTraceComplete']),
@@ -22,24 +22,13 @@ export default {
<template>
<code class="job-log d-block">
<template v-for="(section, index) in trace">
- <template v-if="section.isHeader">
- <log-line-header
- :key="`collapsible-${index}`"
- :line="section.line"
- :duration="section.section_duration"
- :path="traceEndpoint"
- :is-closed="section.isClosed"
- @toggleLine="handleOnClickCollapsibleLine(section)"
- />
- <template v-if="!section.isClosed">
- <log-line
- v-for="line in section.lines"
- :key="line.offset"
- :line="line"
- :path="traceEndpoint"
- />
- </template>
- </template>
+ <collpasible-log-section
+ v-if="section.isHeader"
+ :key="`collapsible-${index}`"
+ :section="section"
+ :trace-endpoint="traceEndpoint"
+ @onClickCollapsibleLine="handleOnClickCollapsibleLine"
+ />
<log-line v-else :key="section.offset" :line="section" :path="traceEndpoint" />
</template>
diff --git a/app/assets/javascripts/jobs/store/mutations.js b/app/assets/javascripts/jobs/store/mutations.js
index 540c3e2ad69..77c68cac4a6 100644
--- a/app/assets/javascripts/jobs/store/mutations.js
+++ b/app/assets/javascripts/jobs/store/mutations.js
@@ -19,15 +19,14 @@ export default {
state.isSidebarOpen = true;
},
- [types.RECEIVE_TRACE_SUCCESS](state, log) {
+ [types.RECEIVE_TRACE_SUCCESS](state, log = {}) {
if (log.state) {
state.traceState = log.state;
}
if (log.append) {
if (isNewJobLogActive()) {
- state.originalTrace = state.originalTrace.concat(log.trace);
- state.trace = updateIncrementalTrace(state.originalTrace, state.trace, log.lines);
+ state.trace = log.lines ? updateIncrementalTrace(log.lines, state.trace) : state.trace;
} else {
state.trace += log.html;
}
@@ -36,10 +35,9 @@ export default {
// When the job still does not have a trace
// the trace response will not have a defined
// html or size. We keep the old value otherwise these
- // will be set to `undefined`
+ // will be set to `null`
if (isNewJobLogActive()) {
- state.originalTrace = log.lines || state.trace;
- state.trace = logLinesParser(log.lines) || state.trace;
+ state.trace = log.lines ? logLinesParser(log.lines) : state.trace;
} else {
state.trace = log.html || state.trace;
}
diff --git a/app/assets/javascripts/jobs/store/state.js b/app/assets/javascripts/jobs/store/state.js
index 585878f8240..cdc1780f3d6 100644
--- a/app/assets/javascripts/jobs/store/state.js
+++ b/app/assets/javascripts/jobs/store/state.js
@@ -19,7 +19,6 @@ export default () => ({
isScrolledToBottomBeforeReceivingTrace: true,
trace: isNewJobLogActive() ? [] : '',
- originalTrace: [],
isTraceComplete: false,
traceSize: 0,
isTraceSizeVisible: false,
diff --git a/app/assets/javascripts/jobs/store/utils.js b/app/assets/javascripts/jobs/store/utils.js
index 261ec90cd12..58e49f54d96 100644
--- a/app/assets/javascripts/jobs/store/utils.js
+++ b/app/assets/javascripts/jobs/store/utils.js
@@ -9,6 +9,85 @@ export const parseLine = (line = {}, lineNumber) => ({
});
/**
+ * When a line has `section_header` set to true, we create a new
+ * structure to allow to nest the lines that belong to the
+ * collpasible section
+ *
+ * @param Object line
+ * @param Number lineNumber
+ */
+export const parseHeaderLine = (line = {}, lineNumber) => ({
+ isClosed: true,
+ isHeader: true,
+ line: parseLine(line, lineNumber),
+ lines: [],
+});
+
+/**
+ * Finds the matching header section
+ * for the section_duration object and adds it to it
+ *
+ * {
+ * isHeader: true,
+ * line: {
+ * content: [],
+ * lineNumber: 0,
+ * section_duration: "",
+ * },
+ * lines: []
+ * }
+ *
+ * @param Array data
+ * @param Object durationLine
+ */
+export function addDurationToHeader(data, durationLine) {
+ data.forEach(el => {
+ if (el.line && el.line.section === durationLine.section) {
+ el.line.section_duration = durationLine.section_duration;
+ }
+ });
+}
+
+/**
+ * Check is the current section belongs to a collapsible section
+ *
+ * @param Array acc
+ * @param Object last
+ * @param Object section
+ *
+ * @returns Boolean
+ */
+export const isCollapsibleSection = (acc = [], last = {}, section = {}) =>
+ acc.length > 0 &&
+ last.isHeader === true &&
+ !section.section_duration &&
+ section.section === last.line.section;
+
+/**
+ * Returns the lineNumber of the last line in
+ * a parsed log
+ *
+ * @param Array acc
+ * @returns Number
+ */
+export const getIncrementalLineNumber = acc => {
+ let lineNumberValue;
+ const lastIndex = acc.length - 1;
+ const lastElement = acc[lastIndex];
+ const nestedLines = lastElement.lines;
+
+ if (lastElement.isHeader && !nestedLines.length && lastElement.line) {
+ lineNumberValue = lastElement.line.lineNumber;
+ } else if (lastElement.isHeader && nestedLines.length) {
+ lineNumberValue = nestedLines[nestedLines.length - 1].lineNumber;
+ } else {
+ lineNumberValue = lastElement.lineNumber;
+ }
+
+ return lineNumberValue === 0 ? 1 : lineNumberValue + 1;
+};
+
+/**
* Parses the job log content into a structure usable by the template
*
* For collaspible lines (section_header = true):
@@ -17,33 +96,71 @@ export const parseLine = (line = {}, lineNumber) => ({
* - adds a isHeader property to handle template logic
* - adds the section_duration
* For each line:
- * - adds the index as lineNumber
+ * - adds the index as lineNumber
*
- * @param {Array} lines
- * @returns {Array}
+ * @param Array lines
+ * @param Array accumulator
+ * @returns Array parsed log lines
*/
-export const logLinesParser = (lines = [], lineNumberStart) =>
- lines.reduce((acc, line, index) => {
- const lineNumber = lineNumberStart ? lineNumberStart + index : index;
- const last = acc[acc.length - 1];
-
- if (line.section_header) {
- acc.push({
- isClosed: true,
- isHeader: true,
- line: parseLine(line, lineNumber),
- lines: [],
- });
- } else if (acc.length && last.isHeader && !line.section_duration && line.content.length) {
- last.lines.push(parseLine(line, lineNumber));
- } else if (acc.length && last.isHeader && line.section_duration) {
- last.section_duration = line.section_duration;
- } else if (line.content.length) {
- acc.push(parseLine(line, lineNumber));
+export const logLinesParser = (lines = [], accumulator = []) =>
+ lines.reduce(
+ (acc, line, index) => {
+ const lineNumber = accumulator.length > 0 ? getIncrementalLineNumber(acc) : index;
+
+ const last = acc[acc.length - 1];
+
+ // If the object is an header, we parse it into another structure
+ if (line.section_header) {
+ acc.push(parseHeaderLine(line, lineNumber));
+ } else if (isCollapsibleSection(acc, last, line)) {
+ // if the object belongs to a nested section, we append it to the new `lines` array of the
+ // previously formated header
+ last.lines.push(parseLine(line, lineNumber));
+ } else if (line.section_duration) {
+ // if the line has section_duration, we look for the correct header to add it
+ addDurationToHeader(acc, line);
+ } else {
+ // otherwise it's a regular line
+ acc.push(parseLine(line, lineNumber));
+ }
+
+ return acc;
+ },
+ [...accumulator],
+ );
+
+/**
+ * Finds the repeated offset, removes the old one
+ *
+ * Returns a new array with the updated log without
+ * the repeated offset
+ *
+ * @param Array newLog
+ * @param Array oldParsed
+ * @returns Array
+ *
+ */
+export const findOffsetAndRemove = (newLog = [], oldParsed = []) => {
+ const cloneOldLog = [...oldParsed];
+ const lastIndex = cloneOldLog.length - 1;
+ const last = cloneOldLog[lastIndex];
+
+ const firstNew = newLog[0];
+
+ if (last && firstNew) {
+ if (last.offset === firstNew.offset || (last.line && last.line.offset === firstNew.offset)) {
+ cloneOldLog.splice(lastIndex);
+ } else if (last.lines && last.lines.length) {
+ const lastNestedIndex = last.lines.length - 1;
+ const lastNested = last.lines[lastNestedIndex];
+ if (lastNested.offset === firstNew.offset) {
+ last.lines.splice(lastNestedIndex);
+ }
}
+ }
- return acc;
- }, []);
+ return cloneOldLog;
+};
/**
* When the trace is not complete, backend may send the last received line
@@ -52,40 +169,13 @@ export const logLinesParser = (lines = [], lineNumberStart) =>
* We need to check if that is the case by looking for the offset property
* before parsing the incremental part
*
- * @param array originalTrace
* @param array oldLog
* @param array newLog
*/
-export const updateIncrementalTrace = (originalTrace = [], oldLog = [], newLog = []) => {
- const firstLine = newLog[0];
- const firstLineOffset = firstLine.offset;
-
- // We are going to return a new array,
- // let's make a shallow copy to make sure we
- // are not updating the state outside of a mutation first.
- const cloneOldLog = [...oldLog];
+export const updateIncrementalTrace = (newLog = [], oldParsed = []) => {
+ const parsedLog = findOffsetAndRemove(newLog, oldParsed);
- const lastIndex = cloneOldLog.length - 1;
- const lastLine = cloneOldLog[lastIndex];
-
- // The last line may be inside a collpasible section
- // If it is, we use the not parsed saved log, remove the last element
- // and parse the first received part togheter with the incremental log
- if (
- lastLine.isHeader &&
- (lastLine.line.offset === firstLineOffset ||
- (lastLine.lines.length &&
- lastLine.lines[lastLine.lines.length - 1].offset === firstLineOffset))
- ) {
- const cloneOriginal = [...originalTrace];
- cloneOriginal.splice(cloneOriginal.length - 1);
- return logLinesParser(cloneOriginal.concat(newLog));
- } else if (lastLine.offset === firstLineOffset) {
- cloneOldLog.splice(lastIndex);
- return cloneOldLog.concat(logLinesParser(newLog, cloneOldLog.length));
- }
- // there are no matches, let's parse the new log and return them together
- return cloneOldLog.concat(logLinesParser(newLog, cloneOldLog.length));
+ return logLinesParser(newLog, parsedLog);
};
export const isNewJobLogActive = () => gon && gon.features && gon.features.jobLogJson;
diff --git a/app/assets/javascripts/labels_select.js b/app/assets/javascripts/labels_select.js
index b028e9564c9..72de3b5d726 100644
--- a/app/assets/javascripts/labels_select.js
+++ b/app/assets/javascripts/labels_select.js
@@ -1,4 +1,4 @@
-/* eslint-disable no-useless-return, func-names, no-var, no-underscore-dangle, prefer-arrow-callback, one-var, prefer-template, no-new, consistent-return, no-shadow, no-param-reassign, vars-on-top, no-lonely-if, no-else-return, dot-notation, no-empty */
+/* eslint-disable no-useless-return, func-names, no-var, no-underscore-dangle, one-var, no-new, consistent-return, no-shadow, no-param-reassign, vars-on-top, no-lonely-if, no-else-return, dot-notation, no-empty */
/* global Issuable */
/* global ListLabel */
@@ -24,7 +24,7 @@ export default class LabelsSelect {
$els = $('.js-label-select');
}
- $els.each(function(i, dropdown) {
+ $els.each((i, dropdown) => {
var $block,
$dropdown,
$form,
@@ -32,6 +32,7 @@ export default class LabelsSelect {
$selectbox,
$sidebarCollapsedValue,
$value,
+ $dropdownMenu,
abilityName,
defaultLabel,
issueUpdateURL,
@@ -67,10 +68,11 @@ export default class LabelsSelect {
$sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon span');
$sidebarLabelTooltip = $block.find('.js-sidebar-labels-tooltip');
$value = $block.find('.value');
+ $dropdownMenu = $dropdown.parent().find('.dropdown-menu');
$loading = $block.find('.block-loading').fadeOut();
fieldName = $dropdown.data('fieldName');
initialSelected = $selectbox
- .find('input[name="' + $dropdown.data('fieldName') + '"]')
+ .find(`input[name="${$dropdown.data('fieldName')}"]`)
.map(function() {
return this.value;
})
@@ -92,7 +94,7 @@ export default class LabelsSelect {
var data, selected;
selected = $dropdown
.closest('.selectbox')
- .find("input[name='" + fieldName + "']")
+ .find(`input[name='${fieldName}']`)
.map(function() {
return this.value;
})
@@ -120,7 +122,7 @@ export default class LabelsSelect {
labelCount = 0;
if (data.labels.length && issueUpdateURL) {
template = LabelsSelect.getLabelTemplate({
- labels: data.labels,
+ labels: _.sortBy(data.labels, 'title'),
issueUpdateURL,
enableScopedLabels: scopedLabels,
scopedLabelsDocumentationLink,
@@ -172,9 +174,7 @@ export default class LabelsSelect {
$sidebarCollapsedValue.text(labelCount);
if (data.labels.length) {
- labelTitles = data.labels.map(function(label) {
- return label.title;
- });
+ labelTitles = data.labels.map(label => label.title);
if (labelTitles.length > 5) {
labelTitles = labelTitles.slice(0, 5);
@@ -269,11 +269,7 @@ export default class LabelsSelect {
if (
$form.find(
- "input[type='hidden'][name='" +
- this.fieldName +
- "'][value='" +
- dropdownValue +
- "']",
+ `input[type='hidden'][name='${this.fieldName}'][value='${dropdownValue}']`,
).length
) {
selectedClass.push('is-active');
@@ -286,8 +282,7 @@ export default class LabelsSelect {
}
if (label.color) {
- colorEl =
- "<span class='dropdown-label-box' style='background: " + label.color + "'></span>";
+ colorEl = `<span class='dropdown-label-box' style='background: ${label.color}'></span>`;
} else {
colorEl = '';
}
@@ -456,16 +451,26 @@ export default class LabelsSelect {
);
} else {
var { labels } = boardsStore.detail.issue;
- labels = labels.filter(function(selectedLabel) {
- return selectedLabel.id !== label.id;
- });
+ labels = labels.filter(selectedLabel => selectedLabel.id !== label.id);
boardsStore.detail.issue.labels = labels;
}
$loading.fadeIn();
+ const oldLabels = boardsStore.detail.issue.labels;
boardsStore.detail.issue
.update($dropdown.attr('data-issue-update'))
+ .then(() => {
+ if (isScopedLabel(label)) {
+ const prevIds = oldLabels.map(label => label.id);
+ const newIds = boardsStore.detail.issue.labels.map(label => label.id);
+ const differentIds = _.difference(prevIds, newIds);
+ $dropdown.data('marked', newIds);
+ $dropdownMenu
+ .find(differentIds.map(id => `[data-label-id="${id}"]`).join(','))
+ .removeClass('is-active');
+ }
+ })
.then(fadeOutLoader)
.catch(fadeOutLoader);
} else if (handleClick) {
diff --git a/app/assets/javascripts/lib/utils/axios_utils.js b/app/assets/javascripts/lib/utils/axios_utils.js
index 37721cd030c..a04fe609015 100644
--- a/app/assets/javascripts/lib/utils/axios_utils.js
+++ b/app/assets/javascripts/lib/utils/axios_utils.js
@@ -1,5 +1,6 @@
import axios from 'axios';
import csrf from './csrf';
+import suppressAjaxErrorsDuringNavigation from './suppress_ajax_errors_during_navigation';
axios.defaults.headers.common[csrf.headerKey] = csrf.token;
// Used by Rails to check if it is a valid XHR request
@@ -8,23 +9,37 @@ axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
// Maintain a global counter for active requests
// see: spec/support/wait_for_requests.rb
axios.interceptors.request.use(config => {
- window.activeVueResources = window.activeVueResources || 0;
- window.activeVueResources += 1;
+ window.pendingRequests = window.pendingRequests || 0;
+ window.pendingRequests += 1;
return config;
});
// Remove the global counter
axios.interceptors.response.use(
response => {
- window.activeVueResources -= 1;
+ window.pendingRequests -= 1;
return response;
},
err => {
- window.activeVueResources -= 1;
+ window.pendingRequests -= 1;
return Promise.reject(err);
},
);
+let isUserNavigating = false;
+window.addEventListener('beforeunload', () => {
+ isUserNavigating = true;
+});
+
+// Ignore AJAX errors caused by requests
+// being cancelled due to browser navigation
+const { gon } = window;
+const featureFlagEnabled = gon && gon.features && gon.features.suppressAjaxNavigationErrors;
+axios.interceptors.response.use(
+ response => response,
+ err => suppressAjaxErrorsDuringNavigation(err, isUserNavigating, featureFlagEnabled),
+);
+
export default axios;
/**
diff --git a/app/assets/javascripts/lib/utils/common_utils.js b/app/assets/javascripts/lib/utils/common_utils.js
index 6e8f63a10a4..177ae4f9838 100644
--- a/app/assets/javascripts/lib/utils/common_utils.js
+++ b/app/assets/javascripts/lib/utils/common_utils.js
@@ -15,6 +15,8 @@ export const getPagePath = (index = 0) => {
return page.split(':')[index];
};
+export const getDashPath = (path = window.location.pathname) => path.split('/-/')[1] || null;
+
export const isInGroupsPage = () => getPagePath() === 'groups';
export const isInProjectPage = () => getPagePath() === 'projects';
@@ -175,6 +177,15 @@ export const urlParamsToArray = (path = '') =>
export const getUrlParamsArray = () => urlParamsToArray(window.location.search);
+/**
+ * Accepts encoding string which includes query params being
+ * sent to URL.
+ *
+ * @param {string} path Query param string
+ *
+ * @returns {object} Query params object containing key-value pairs
+ * with both key and values decoded into plain string.
+ */
export const urlParamsToObject = (path = '') =>
splitPath(path).reduce((dataParam, filterParam) => {
if (filterParam === '') {
@@ -183,6 +194,7 @@ export const urlParamsToObject = (path = '') =>
const data = dataParam;
let [key, value] = filterParam.split('=');
+ key = /%\w+/g.test(key) ? decodeURIComponent(key) : key;
const isArray = key.includes('[]');
key = key.replace('[]', '');
value = decodeURIComponent(value.replace(/\+/g, ' '));
diff --git a/app/assets/javascripts/lib/utils/datetime_utility.js b/app/assets/javascripts/lib/utils/datetime_utility.js
index a4715789337..37b0215f6f9 100644
--- a/app/assets/javascripts/lib/utils/datetime_utility.js
+++ b/app/assets/javascripts/lib/utils/datetime_utility.js
@@ -537,13 +537,6 @@ export const stringifyTime = (timeObject, fullNameFormat = false) => {
};
/**
- * Accepts a time string of any size (e.g. '1w 2d 3h 5m' or '1w 2d') and returns
- * the first non-zero unit/value pair.
- */
-export const abbreviateTime = timeStr =>
- timeStr.split(' ').filter(unitStr => unitStr.charAt(0) !== '0')[0];
-
-/**
* Calculates the milliseconds between now and a given date string.
* The result cannot become negative.
*
@@ -554,3 +547,20 @@ export const calculateRemainingMilliseconds = endDate => {
const remainingMilliseconds = new Date(endDate).getTime() - Date.now();
return Math.max(remainingMilliseconds, 0);
};
+
+/**
+ * Subtracts a given number of days from a given date and returns the new date.
+ *
+ * @param {Date} date the date that we will substract days from
+ * @param {number} daysInPast number of days that are subtracted from a given date
+ * @returns {String} Date string in ISO format
+ */
+export const getDateInPast = (date, daysInPast) => {
+ const dateClone = newDate(date);
+ return new Date(
+ dateClone.setTime(dateClone.getTime() - daysInPast * 24 * 60 * 60 * 1000),
+ ).toISOString();
+};
+
+export const beginOfDayTime = 'T00:00:00Z';
+export const endOfDayTime = 'T23:59:59Z';
diff --git a/app/assets/javascripts/lib/utils/notify.js b/app/assets/javascripts/lib/utils/notify.js
index 3439db1e326..cd509a13193 100644
--- a/app/assets/javascripts/lib/utils/notify.js
+++ b/app/assets/javascripts/lib/utils/notify.js
@@ -1,12 +1,14 @@
-/* eslint-disable func-names, no-var, consistent-return, prefer-arrow-callback, no-return-assign */
+/* eslint-disable no-var, consistent-return, no-return-assign */
function notificationGranted(message, opts, onclick) {
var notification;
notification = new Notification(message, opts);
- setTimeout(function() {
- // Hide the notification after X amount of seconds
- return notification.close();
- }, 8000);
+ setTimeout(
+ () =>
+ // Hide the notification after X amount of seconds
+ notification.close(),
+ 8000,
+ );
return (notification.onclick = onclick || notification.close);
}
@@ -32,7 +34,7 @@ function notifyMe(message, body, icon, onclick) {
// If it's okay let's create a notification
return notificationGranted(message, opts, onclick);
} else if (Notification.permission !== 'denied') {
- return Notification.requestPermission(function(permission) {
+ return Notification.requestPermission(permission => {
// If the user accepts, let's create a notification
if (permission === 'granted') {
return notificationGranted(message, opts, onclick);
diff --git a/app/assets/javascripts/lib/utils/number_utils.js b/app/assets/javascripts/lib/utils/number_utils.js
index 61c8b8803d7..0f2cc57b1f9 100644
--- a/app/assets/javascripts/lib/utils/number_utils.js
+++ b/app/assets/javascripts/lib/utils/number_utils.js
@@ -106,3 +106,14 @@ export const sum = (a = 0, b = 0) => a + b;
* @param {Int} number
*/
export const isOdd = (number = 0) => number % 2;
+
+/**
+ * Computes the median for a given array.
+ * @param {Array} arr An array of numbers
+ * @returns {Number} The median of the given array
+ */
+export const median = arr => {
+ const middle = Math.floor(arr.length / 2);
+ const sorted = arr.sort((a, b) => a - b);
+ return arr.length % 2 !== 0 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
+};
diff --git a/app/assets/javascripts/lib/utils/set.js b/app/assets/javascripts/lib/utils/set.js
new file mode 100644
index 00000000000..3845d648b61
--- /dev/null
+++ b/app/assets/javascripts/lib/utils/set.js
@@ -0,0 +1,9 @@
+/**
+ * Checks if the first argument is a subset of the second argument.
+ * @param {Set} subset The set to be considered as the subset.
+ * @param {Set} superset The set to be considered as the superset.
+ * @returns {boolean}
+ */
+// eslint-disable-next-line import/prefer-default-export
+export const isSubset = (subset, superset) =>
+ Array.from(subset).every(value => superset.has(value));
diff --git a/app/assets/javascripts/lib/utils/suppress_ajax_errors_during_navigation.js b/app/assets/javascripts/lib/utils/suppress_ajax_errors_during_navigation.js
new file mode 100644
index 00000000000..4c61da9b862
--- /dev/null
+++ b/app/assets/javascripts/lib/utils/suppress_ajax_errors_during_navigation.js
@@ -0,0 +1,16 @@
+/**
+ * An Axios error interceptor that suppresses AJAX errors caused
+ * by the request being cancelled when the user navigates to a new page
+ */
+export default (err, isUserNavigating, featureFlagEnabled) => {
+ if (featureFlagEnabled && isUserNavigating && err.code === 'ECONNABORTED') {
+ // If the user is navigating away from the current page,
+ // prevent .then() and .catch() handlers from being
+ // called by returning a Promise that never resolves
+ return new Promise(() => {});
+ }
+
+ // The error is not related to browser navigation,
+ // so propagate the error
+ return Promise.reject(err);
+};
diff --git a/app/assets/javascripts/lib/utils/text_markdown.js b/app/assets/javascripts/lib/utils/text_markdown.js
index 7873eaf059f..2e0270ee42f 100644
--- a/app/assets/javascripts/lib/utils/text_markdown.js
+++ b/app/assets/javascripts/lib/utils/text_markdown.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, no-param-reassign, one-var, operator-assignment, no-else-return, prefer-template, prefer-arrow-callback, consistent-return */
+/* eslint-disable func-names, no-var, no-param-reassign, one-var, operator-assignment, no-else-return, consistent-return */
import $ from 'jquery';
import { insertText } from '~/lib/utils/common_utils';
@@ -218,7 +218,7 @@ export function insertMarkdownText({
: blockTagText(text, textArea, blockTag, selected);
} else {
textToInsert = selectedSplit
- .map(function(val) {
+ .map(val => {
if (tag.indexOf(textPlaceholder) > -1) {
return tag.replace(textPlaceholder, val);
}
@@ -237,7 +237,7 @@ export function insertMarkdownText({
}
if (removedFirstNewLine) {
- textToInsert = '\n' + textToInsert;
+ textToInsert = `\n${textToInsert}`;
}
if (removedLastNewLine) {
@@ -301,7 +301,7 @@ export function addMarkdownListeners(form) {
export function addEditorMarkdownListeners(editor) {
$('.js-md')
.off('click')
- .on('click', function(e) {
+ .on('click', e => {
const { mdTag, mdBlock, mdPrepend, mdSelect } = $(e.currentTarget).data();
insertMarkdownText({
diff --git a/app/assets/javascripts/lib/utils/url_utility.js b/app/assets/javascripts/lib/utils/url_utility.js
index 7ead9d46fbb..4be0d05a9b7 100644
--- a/app/assets/javascripts/lib/utils/url_utility.js
+++ b/app/assets/javascripts/lib/utils/url_utility.js
@@ -88,6 +88,14 @@ export function getLocationHash(url = window.location.href) {
}
/**
+ * Returns a boolean indicating whether the URL hash contains the given string value
+ */
+export function doesHashExistInUrl(hashName) {
+ const hash = getLocationHash();
+ return hash && hash.includes(hashName);
+}
+
+/**
* Apply the fragment to the given url by returning a new url string that includes
* the fragment. If the given url already contains a fragment, the original fragment
* will be removed.
diff --git a/app/assets/javascripts/line_highlighter.js b/app/assets/javascripts/line_highlighter.js
index 4db63c841a9..b6b96fe7bd5 100644
--- a/app/assets/javascripts/line_highlighter.js
+++ b/app/assets/javascripts/line_highlighter.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, no-underscore-dangle, no-param-reassign, prefer-template, consistent-return, one-var, no-else-return */
+/* eslint-disable func-names, no-var, no-underscore-dangle, no-param-reassign, consistent-return, one-var, no-else-return */
import $ from 'jquery';
@@ -106,7 +106,7 @@ LineHighlighter.prototype.clickHandler = function(event) {
};
LineHighlighter.prototype.clearHighlight = function() {
- return $('.' + this.highlightLineClass).removeClass(this.highlightLineClass);
+ return $(`.${this.highlightLineClass}`).removeClass(this.highlightLineClass);
};
// Convert a URL hash String into line numbers
@@ -137,7 +137,7 @@ LineHighlighter.prototype.hashToRange = function(hash) {
//
// lineNumber - Line number to highlight
LineHighlighter.prototype.highlightLine = function(lineNumber) {
- return $('#LC' + lineNumber).addClass(this.highlightLineClass);
+ return $(`#LC${lineNumber}`).addClass(this.highlightLineClass);
};
// Highlight all lines within a range
@@ -162,9 +162,9 @@ LineHighlighter.prototype.highlightRange = function(range) {
LineHighlighter.prototype.setHash = function(firstLineNumber, lastLineNumber) {
var hash;
if (lastLineNumber) {
- hash = '#L' + firstLineNumber + '-' + lastLineNumber;
+ hash = `#L${firstLineNumber}-${lastLineNumber}`;
} else {
- hash = '#L' + firstLineNumber;
+ hash = `#L${firstLineNumber}`;
}
this._hash = hash;
return this.__setLocationHash__(hash);
diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js
index 0ddf40b0405..c19a845eb69 100644
--- a/app/assets/javascripts/main.js
+++ b/app/assets/javascripts/main.js
@@ -37,6 +37,7 @@ import GlFieldErrors from './gl_field_errors';
import initUserPopovers from './user_popovers';
import { initUserTracking } from './tracking';
import { __ } from './locale';
+import initPrivacyPolicyUpdateCallout from './privacy_policy_update_callout';
import 'ee_else_ce/main_ee';
@@ -96,6 +97,7 @@ function deferredInitialisation() {
initUsagePingConsent();
initUserPopovers();
initUserTracking();
+ initPrivacyPolicyUpdateCallout();
if (document.querySelector('.search')) initSearchAutocomplete();
@@ -312,6 +314,7 @@ document.addEventListener('DOMContentLoaded', () => {
const action = `${this.action}${link.search === '' ? '?' : '&'}`;
event.preventDefault();
+ // eslint-disable-next-line no-jquery/no-serialize
visitUrl(`${action}${$(this).serialize()}`);
});
diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index 3b42a154af8..7223b5c0d43 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, no-underscore-dangle, one-var, consistent-return, prefer-arrow-callback */
+/* eslint-disable func-names, no-var, no-underscore-dangle, one-var, consistent-return */
import $ from 'jquery';
import { __ } from '~/locale';
@@ -105,7 +105,7 @@ MergeRequest.prototype.submitNoteForm = function(form, $button) {
};
MergeRequest.prototype.initCommitMessageListeners = function() {
- $(document).on('click', 'a.js-with-description-link', function(e) {
+ $(document).on('click', 'a.js-with-description-link', e => {
var textarea = $('textarea.js-commit-message');
e.preventDefault();
@@ -114,7 +114,7 @@ MergeRequest.prototype.initCommitMessageListeners = function() {
$('.js-without-description-hint').show();
});
- $(document).on('click', 'a.js-without-description-link', function(e) {
+ $(document).on('click', 'a.js-without-description-link', e => {
var textarea = $('textarea.js-commit-message');
e.preventDefault();
diff --git a/app/assets/javascripts/monitoring/components/charts/time_series.vue b/app/assets/javascripts/monitoring/components/charts/time_series.vue
index f3f3bf15295..78fe575717a 100644
--- a/app/assets/javascripts/monitoring/components/charts/time_series.vue
+++ b/app/assets/javascripts/monitoring/components/charts/time_series.vue
@@ -1,6 +1,6 @@
<script>
-import { __ } from '~/locale';
-import { GlLink, GlButton } from '@gitlab/ui';
+import { s__, __ } from '~/locale';
+import { GlLink, GlButton, GlTooltip } from '@gitlab/ui';
import { GlAreaChart, GlLineChart, GlChartSeriesLabel } from '@gitlab/ui/dist/charts';
import dateFormat from 'dateformat';
import { debounceByAnimationFrame, roundOffFloat } from '~/lib/utils/common_utils';
@@ -16,6 +16,7 @@ export default {
components: {
GlAreaChart,
GlLineChart,
+ GlTooltip,
GlButton,
GlChartSeriesLabel,
GlLink,
@@ -52,6 +53,21 @@ export default {
required: false,
default: () => [],
},
+ legendAverageText: {
+ type: String,
+ required: false,
+ default: s__('Metrics|Avg'),
+ },
+ legendMaxText: {
+ type: String,
+ required: false,
+ default: s__('Metrics|Max'),
+ },
+ groupId: {
+ type: String,
+ required: false,
+ default: '',
+ },
},
data() {
return {
@@ -62,6 +78,7 @@ export default {
isDeployment: false,
sha: '',
},
+ showTitleTooltip: false,
width: 0,
height: chartHeight,
svgs: {},
@@ -122,7 +139,7 @@ export default {
},
},
series: this.scatterSeries,
- dataZoom: this.dataZoomConfig,
+ dataZoom: [this.dataZoomConfig],
};
},
dataZoomConfig() {
@@ -192,6 +209,12 @@ export default {
watch: {
containerWidth: 'onResize',
},
+ mounted() {
+ const graphTitleEl = this.$refs.graphTitle;
+ if (graphTitleEl && graphTitleEl.scrollWidth > graphTitleEl.offsetWidth) {
+ this.showTitleTooltip = true;
+ }
+ },
beforeDestroy() {
window.removeEventListener('resize', debouncedResize);
},
@@ -255,22 +278,32 @@ export default {
<template>
<div class="prometheus-graph">
<div class="prometheus-graph-header">
- <h5 class="prometheus-graph-title js-graph-title">{{ graphData.title }}</h5>
- <div class="prometheus-graph-widgets js-graph-widgets">
+ <h5
+ ref="graphTitle"
+ class="prometheus-graph-title js-graph-title text-truncate append-right-8"
+ >
+ {{ graphData.title }}
+ </h5>
+ <gl-tooltip :target="() => $refs.graphTitle" :disabled="!showTitleTooltip">
+ {{ graphData.title }}
+ </gl-tooltip>
+ <div class="prometheus-graph-widgets js-graph-widgets flex-fill">
<slot></slot>
</div>
</div>
-
<component
:is="glChartComponent"
ref="chart"
v-bind="$attrs"
+ :group-id="groupId"
:data="chartData"
:option="chartOptions"
:format-tooltip-text="formatTooltipText"
:thresholds="thresholds"
:width="width"
:height="height"
+ :average-text="legendAverageText"
+ :max-text="legendMaxText"
@updated="onChartUpdated"
>
<template v-if="tooltip.isDeployment">
diff --git a/app/assets/javascripts/monitoring/components/dashboard.vue b/app/assets/javascripts/monitoring/components/dashboard.vue
index 12a4c83e053..b4ea415bb51 100644
--- a/app/assets/javascripts/monitoring/components/dashboard.vue
+++ b/app/assets/javascripts/monitoring/components/dashboard.vue
@@ -1,4 +1,7 @@
<script>
+import _ from 'underscore';
+import { mapActions, mapState } from 'vuex';
+import VueDraggable from 'vuedraggable';
import {
GlButton,
GlDropdown,
@@ -8,24 +11,26 @@ import {
GlModalDirective,
GlTooltipDirective,
} from '@gitlab/ui';
-import _ from 'underscore';
-import { mapActions, mapState } from 'vuex';
import { __, s__ } from '~/locale';
+import createFlash from '~/flash';
import Icon from '~/vue_shared/components/icon.vue';
-import { getParameterValues, mergeUrlParams } from '~/lib/utils/url_utility';
+import { getParameterValues, mergeUrlParams, redirectTo } from '~/lib/utils/url_utility';
import invalidUrl from '~/lib/utils/invalid_url';
import PanelType from 'ee_else_ce/monitoring/components/panel_type.vue';
+import DateTimePicker from './date_time_picker/date_time_picker.vue';
import MonitorTimeSeriesChart from './charts/time_series.vue';
import MonitorSingleStatChart from './charts/single_stat.vue';
import GraphGroup from './graph_group.vue';
import EmptyState from './empty_state.vue';
-import { sidebarAnimationDuration, timeWindows } from '../constants';
-import { getTimeDiff, getTimeWindow } from '../utils';
+import { sidebarAnimationDuration } from '../constants';
+import TrackEventDirective from '~/vue_shared/directives/track_event';
+import { getTimeDiff, isValidDate, downloadCSVOptions, generateLinkToChartOptions } from '../utils';
let sidebarMutationObserver;
export default {
components: {
+ VueDraggable,
MonitorTimeSeriesChart,
MonitorSingleStatChart,
PanelType,
@@ -37,10 +42,12 @@ export default {
GlDropdownItem,
GlFormGroup,
GlModal,
+ DateTimePicker,
},
directives: {
GlModal: GlModalDirective,
GlTooltip: GlTooltipDirective,
+ TrackEvent: TrackEventDirective,
},
props: {
externalDashboardUrl: {
@@ -151,15 +158,19 @@ export default {
required: false,
default: false,
},
+ rearrangePanelsAvailable: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
},
data() {
return {
state: 'gettingStarted',
elWidth: 0,
- selectedTimeWindow: '',
- selectedTimeWindowKey: '',
formIsValid: null,
- timeWindows: {},
+ selectedTimeWindow: {},
+ isRearrangingPanels: false,
};
},
computed: {
@@ -175,7 +186,6 @@ export default {
'metricsWithData',
'useDashboardEndpoint',
'allDashboards',
- 'multipleDashboardsEnabled',
'additionalPanelTypesEnabled',
]),
firstDashboard() {
@@ -184,6 +194,9 @@ export default {
selectedDashboardText() {
return this.currentDashboard || this.firstDashboard.display_name;
},
+ showRearrangePanelsBtn() {
+ return !this.showEmptyState && this.rearrangePanelsAvailable;
+ },
addingMetricsAvailable() {
return IS_EE && this.canAddMetrics && !this.showEmptyState;
},
@@ -219,11 +232,13 @@ export default {
end,
};
- this.timeWindows = timeWindows;
- this.selectedTimeWindowKey = getTimeWindow(range);
- this.selectedTimeWindow = this.timeWindows[this.selectedTimeWindowKey];
+ this.selectedTimeWindow = range;
- this.fetchData(range);
+ if (!isValidDate(start) || !isValidDate(end)) {
+ this.showInvalidDateError();
+ } else {
+ this.fetchData(range);
+ }
sidebarMutationObserver = new MutationObserver(this.onSidebarMutation);
sidebarMutationObserver.observe(document.querySelector('.layout-page'), {
@@ -272,9 +287,17 @@ export default {
return Object.values(this.getGraphAlerts(queries));
},
showToast() {
- this.$toast.show(__('Link copied to clipboard'));
+ this.$toast.show(__('Link copied'));
},
// TODO: END
+ removeGraph(metrics, graphIndex) {
+ // At present graphs will not be removed, they should removed using the vuex store
+ // See https://gitlab.com/gitlab-org/gitlab/issues/27835
+ metrics.splice(graphIndex, 1);
+ },
+ showInvalidDateError() {
+ createFlash(s__('Metrics|Link contains an invalid time window.'));
+ },
generateLink(group, title, yLabel) {
const dashboard = this.currentDashboard || this.firstDashboard.path;
const params = _.pick({ dashboard, group, title, y_label: yLabel }, value => value != null);
@@ -288,22 +311,23 @@ export default {
this.elWidth = this.$el.clientWidth;
}, sidebarAnimationDuration);
},
+ toggleRearrangingPanels() {
+ this.isRearrangingPanels = !this.isRearrangingPanels;
+ },
setFormValidity(isValid) {
this.formIsValid = isValid;
},
submitCustomMetricsForm() {
this.$refs.customMetricsForm.submit();
},
- activeTimeWindow(key) {
- return this.timeWindows[key] === this.selectedTimeWindow;
- },
- setTimeWindowParameter(key) {
- const { start, end } = getTimeDiff(key);
- return `?start=${encodeURIComponent(start)}&end=${encodeURIComponent(end)}`;
- },
groupHasData(group) {
return this.chartsWithData(group.metrics).length > 0;
},
+ onDateTimePickerApply(timeWindowUrlParams) {
+ return redirectTo(mergeUrlParams(timeWindowUrlParams, window.location.href));
+ },
+ downloadCSVOptions,
+ generateLinkToChartOptions,
},
addMetric: {
title: s__('Metrics|Add metric'),
@@ -314,15 +338,14 @@ export default {
<template>
<div class="prometheus-graphs">
- <div class="gl-p-3 pb-0 border-bottom bg-gray-light">
+ <div class="prometheus-graphs-header gl-p-3 pb-0 border-bottom bg-gray-light">
<div class="row">
<template v-if="environmentsEndpoint">
<gl-form-group
- v-if="multipleDashboardsEnabled"
:label="__('Dashboard')"
label-size="sm"
label-for="monitor-dashboards-dropdown"
- class="col-sm-12 col-md-4 col-lg-2"
+ class="col-sm-12 col-md-6 col-lg-2"
>
<gl-dropdown
id="monitor-dashboards-dropdown"
@@ -345,7 +368,7 @@ export default {
:label="s__('Metrics|Environment')"
label-size="sm"
label-for="monitor-environments-dropdown"
- class="col-sm-6 col-md-4 col-lg-2"
+ class="col-sm-6 col-md-6 col-lg-2"
>
<gl-dropdown
id="monitor-environments-dropdown"
@@ -370,36 +393,35 @@ export default {
:label="s__('Metrics|Show last')"
label-size="sm"
label-for="monitor-time-window-dropdown"
- class="col-sm-6 col-md-4 col-lg-2"
+ class="col-sm-6 col-md-6 col-lg-4"
>
- <gl-dropdown
- id="monitor-time-window-dropdown"
- class="mb-0 d-flex js-time-window-dropdown"
- toggle-class="dropdown-menu-toggle"
- :text="selectedTimeWindow"
- >
- <gl-dropdown-item
- v-for="(value, key) in timeWindows"
- :key="key"
- :active="activeTimeWindow(key)"
- :href="setTimeWindowParameter(key)"
- active-class="active"
- >{{ value }}</gl-dropdown-item
- >
- </gl-dropdown>
+ <date-time-picker
+ :selected-time-window="selectedTimeWindow"
+ @onApply="onDateTimePickerApply"
+ />
</gl-form-group>
</template>
<gl-form-group
- v-if="addingMetricsAvailable || externalDashboardUrl.length"
+ v-if="addingMetricsAvailable || showRearrangePanelsBtn || externalDashboardUrl.length"
label-for="prometheus-graphs-dropdown-buttons"
- class="dropdown-buttons col-lg d-lg-flex align-items-end"
+ class="dropdown-buttons col-md d-md-flex col-lg d-lg-flex align-items-end"
>
<div id="prometheus-graphs-dropdown-buttons">
<gl-button
+ v-if="showRearrangePanelsBtn"
+ :pressed="isRearrangingPanels"
+ variant="default"
+ class="mr-2 mt-1 js-rearrange-button"
+ @click="toggleRearrangingPanels"
+ >
+ {{ __('Arrange charts') }}
+ </gl-button>
+ <gl-button
v-if="addingMetricsAvailable"
v-gl-modal="$options.addMetric.modalId"
- class="mr-2 mt-1 js-add-metric-button text-success border-success"
+ variant="outline-success"
+ class="mr-2 mt-1 js-add-metric-button"
>
{{ $options.addMetric.title }}
</gl-button>
@@ -453,17 +475,42 @@ export default {
:collapse-group="groupHasData(groupData)"
>
<template v-if="additionalPanelTypesEnabled">
- <panel-type
- v-for="(graphData, graphIndex) in groupData.metrics"
- :key="`panel-type-${graphIndex}`"
- class="col-12 col-lg-6 pb-3"
- :clipboard-text="generateLink(groupData.group, graphData.title, graphData.y_label)"
- :graph-data="graphData"
- :dashboard-width="elWidth"
- :alerts-endpoint="alertsEndpoint"
- :prometheus-alerts-available="prometheusAlertsAvailable"
- :index="`${index}-${graphIndex}`"
- />
+ <vue-draggable
+ :list="groupData.metrics"
+ group="metrics-dashboard"
+ :component-data="{ attrs: { class: 'row mx-0 w-100' } }"
+ :disabled="!isRearrangingPanels"
+ >
+ <div
+ v-for="(graphData, graphIndex) in groupData.metrics"
+ :key="`panel-type-${graphIndex}`"
+ class="col-12 col-lg-6 px-2 mb-2 draggable"
+ :class="{ 'draggable-enabled': isRearrangingPanels }"
+ >
+ <div class="position-relative draggable-panel js-draggable-panel">
+ <div
+ v-if="isRearrangingPanels"
+ class="draggable-remove js-draggable-remove p-2 w-100 position-absolute d-flex justify-content-end"
+ @click="removeGraph(groupData.metrics, graphIndex)"
+ >
+ <a class="mx-2 p-2 draggable-remove-link" :aria-label="__('Remove')"
+ ><icon name="close"
+ /></a>
+ </div>
+
+ <panel-type
+ :clipboard-text="
+ generateLink(groupData.group, graphData.title, graphData.y_label)
+ "
+ :graph-data="graphData"
+ :dashboard-width="elWidth"
+ :alerts-endpoint="alertsEndpoint"
+ :prometheus-alerts-available="prometheusAlertsAvailable"
+ :index="`${index}-${graphIndex}`"
+ />
+ </div>
+ </div>
+ </vue-draggable>
</template>
<template v-else>
<monitor-time-series-chart
@@ -477,7 +524,10 @@ export default {
:project-path="projectPath"
group-id="monitor-time-series-chart"
>
- <div class="d-flex align-items-center">
+ <div
+ class="d-flex align-items-center"
+ :class="alertWidgetAvailable ? 'justify-content-between' : 'justify-content-end'"
+ >
<alert-widget
v-if="alertWidgetAvailable && graphData"
:modal-id="`alert-modal-${index}-${graphIndex}`"
@@ -488,7 +538,7 @@ export default {
/>
<gl-dropdown
v-gl-tooltip
- class="mx-2"
+ class="ml-2 mr-3"
toggle-class="btn btn-transparent border-0"
:right="true"
:no-caret="true"
@@ -497,10 +547,19 @@ export default {
<template slot="button-content">
<icon name="ellipsis_v" class="text-secondary" />
</template>
- <gl-dropdown-item :href="downloadCsv(graphData)" download="chart_metrics.csv">
+ <gl-dropdown-item
+ v-track-event="downloadCSVOptions(graphData.title)"
+ :href="downloadCsv(graphData)"
+ download="chart_metrics.csv"
+ >
{{ __('Download CSV') }}
</gl-dropdown-item>
<gl-dropdown-item
+ v-track-event="
+ generateLinkToChartOptions(
+ generateLink(groupData.group, graphData.title, graphData.y_label),
+ )
+ "
class="js-chart-link"
:data-clipboard-text="
generateLink(groupData.group, graphData.title, graphData.y_label)
diff --git a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker.vue b/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker.vue
new file mode 100644
index 00000000000..4616a767295
--- /dev/null
+++ b/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker.vue
@@ -0,0 +1,151 @@
+<script>
+import { GlButton, GlDropdown, GlDropdownItem, GlFormGroup } from '@gitlab/ui';
+import { s__, sprintf } from '~/locale';
+import Icon from '~/vue_shared/components/icon.vue';
+import DateTimePickerInput from './date_time_picker_input.vue';
+import {
+ getTimeDiff,
+ getTimeWindow,
+ stringToISODate,
+ ISODateToString,
+ truncateZerosInDateTime,
+ isDateTimePickerInputValid,
+} from '~/monitoring/utils';
+import { timeWindows } from '~/monitoring/constants';
+
+export default {
+ components: {
+ Icon,
+ DateTimePickerInput,
+ GlFormGroup,
+ GlButton,
+ GlDropdown,
+ GlDropdownItem,
+ },
+ props: {
+ timeWindows: {
+ type: Object,
+ required: false,
+ default: () => timeWindows,
+ },
+ selectedTimeWindow: {
+ type: Object,
+ required: false,
+ default: () => {},
+ },
+ },
+ data() {
+ return {
+ selectedTimeWindowText: '',
+ customTime: {
+ from: null,
+ to: null,
+ },
+ };
+ },
+ computed: {
+ applyEnabled() {
+ return Boolean(this.inputState.from && this.inputState.to);
+ },
+ inputState() {
+ const { from, to } = this.customTime;
+ return {
+ from: from && isDateTimePickerInputValid(from),
+ to: to && isDateTimePickerInputValid(to),
+ };
+ },
+ },
+ mounted() {
+ const range = getTimeWindow(this.selectedTimeWindow);
+ if (range) {
+ this.selectedTimeWindowText = this.timeWindows[range];
+ } else {
+ this.customTime = {
+ from: truncateZerosInDateTime(ISODateToString(this.selectedTimeWindow.start)),
+ to: truncateZerosInDateTime(ISODateToString(this.selectedTimeWindow.end)),
+ };
+ this.selectedTimeWindowText = sprintf(s__('%{from} to %{to}'), this.customTime);
+ }
+ },
+ methods: {
+ activeTimeWindow(key) {
+ return this.timeWindows[key] === this.selectedTimeWindowText;
+ },
+ setCustomTimeWindowParameter() {
+ this.$emit('onApply', {
+ start: stringToISODate(this.customTime.from),
+ end: stringToISODate(this.customTime.to),
+ });
+ },
+ setTimeWindowParameter(key) {
+ const { start, end } = getTimeDiff(key);
+ this.$emit('onApply', {
+ start,
+ end,
+ });
+ },
+ closeDropdown() {
+ this.$refs.dropdown.hide();
+ },
+ },
+};
+</script>
+<template>
+ <gl-dropdown
+ ref="dropdown"
+ :text="selectedTimeWindowText"
+ menu-class="time-window-dropdown-menu"
+ class="js-time-window-dropdown"
+ >
+ <div class="d-flex justify-content-between time-window-dropdown-menu-container">
+ <gl-form-group
+ :label="__('Custom range')"
+ label-for="custom-from-time"
+ class="custom-time-range-form-group col-md-7 p-0 m-0"
+ >
+ <date-time-picker-input
+ id="custom-time-from"
+ v-model="customTime.from"
+ :label="__('From')"
+ :state="inputState.from"
+ />
+ <date-time-picker-input
+ id="custom-time-to"
+ v-model="customTime.to"
+ :label="__('To')"
+ :state="inputState.to"
+ />
+ <gl-form-group>
+ <gl-button @click="closeDropdown">{{ __('Cancel') }}</gl-button>
+ <gl-button
+ variant="success"
+ :disabled="!applyEnabled"
+ @click="setCustomTimeWindowParameter"
+ >{{ __('Apply') }}</gl-button
+ >
+ </gl-form-group>
+ </gl-form-group>
+ <gl-form-group
+ :label="__('Quick range')"
+ label-for="group-id-dropdown"
+ label-align="center"
+ class="col-md-4 p-0 m-0"
+ >
+ <gl-dropdown-item
+ v-for="(value, key) in timeWindows"
+ :key="key"
+ :active="activeTimeWindow(key)"
+ active-class="active"
+ @click="setTimeWindowParameter(key)"
+ >
+ <icon
+ name="mobile-issue-close"
+ class="align-bottom"
+ :class="{ invisible: !activeTimeWindow(key) }"
+ />
+ {{ value }}
+ </gl-dropdown-item>
+ </gl-form-group>
+ </div>
+ </gl-dropdown>
+</template>
diff --git a/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_input.vue b/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_input.vue
new file mode 100644
index 00000000000..0388a6190d9
--- /dev/null
+++ b/app/assets/javascripts/monitoring/components/date_time_picker/date_time_picker_input.vue
@@ -0,0 +1,77 @@
+<script>
+import _ from 'underscore';
+import { s__, sprintf } from '~/locale';
+import { GlFormGroup, GlFormInput } from '@gitlab/ui';
+import { dateFormats } from '~/monitoring/constants';
+
+const inputGroupText = {
+ invalidFeedback: sprintf(s__('Format: %{dateFormat}'), {
+ dateFormat: dateFormats.dateTimePicker.format,
+ }),
+ placeholder: dateFormats.dateTimePicker.format,
+};
+
+export default {
+ components: {
+ GlFormGroup,
+ GlFormInput,
+ },
+ props: {
+ state: {
+ default: null,
+ required: true,
+ validator: prop => typeof prop === 'boolean' || prop === null,
+ },
+ value: {
+ default: null,
+ required: false,
+ validator: prop => typeof prop === 'string' || prop === null,
+ },
+ label: {
+ type: String,
+ default: '',
+ required: true,
+ },
+ id: {
+ type: String,
+ required: false,
+ default: () => _.uniqueId('dateTimePicker_'),
+ },
+ },
+ data() {
+ return {
+ inputGroupText,
+ };
+ },
+ computed: {
+ invalidFeedback() {
+ return this.state ? '' : this.inputGroupText.invalidFeedback;
+ },
+ inputState() {
+ // When the state is valid we want to show no
+ // green outline. Hence passing null and not true.
+ if (this.state === true) {
+ return null;
+ }
+ return this.state;
+ },
+ },
+ methods: {
+ onInputBlur(e) {
+ this.$emit('input', e.target.value.trim() || null);
+ },
+ },
+};
+</script>
+
+<template>
+ <gl-form-group :label="label" label-size="sm" :label-for="id" :invalid-feedback="invalidFeedback">
+ <gl-form-input
+ :id="id"
+ :value="value"
+ :state="inputState"
+ :placeholder="inputGroupText.placeholder"
+ @blur="onInputBlur"
+ />
+ </gl-form-group>
+</template>
diff --git a/app/assets/javascripts/monitoring/components/embed.vue b/app/assets/javascripts/monitoring/components/embed.vue
index da1e88071ab..7857aaa6ecc 100644
--- a/app/assets/javascripts/monitoring/components/embed.vue
+++ b/app/assets/javascripts/monitoring/components/embed.vue
@@ -98,7 +98,7 @@ export default {
class="w-100"
:graph-data="graphData"
:container-width="elWidth"
- group-id="monitor-area-chart"
+ :group-id="dashboardUrl"
:project-path="null"
:show-border="true"
:single-embed="isSingleChart"
diff --git a/app/assets/javascripts/monitoring/components/graph_group.vue b/app/assets/javascripts/monitoring/components/graph_group.vue
index 72ddd8d4fcf..ee3a2bae79b 100644
--- a/app/assets/javascripts/monitoring/components/graph_group.vue
+++ b/app/assets/javascripts/monitoring/components/graph_group.vue
@@ -52,7 +52,7 @@ export default {
<div
v-if="collapseGroup"
v-show="collapseGroup && showGroup"
- class="card-body prometheus-graph-group"
+ class="card-body prometheus-graph-group p-0"
>
<slot></slot>
</div>
diff --git a/app/assets/javascripts/monitoring/components/panel_type.vue b/app/assets/javascripts/monitoring/components/panel_type.vue
index 73ff651d510..1a14d06f4c8 100644
--- a/app/assets/javascripts/monitoring/components/panel_type.vue
+++ b/app/assets/javascripts/monitoring/components/panel_type.vue
@@ -13,6 +13,8 @@ import Icon from '~/vue_shared/components/icon.vue';
import MonitorTimeSeriesChart from './charts/time_series.vue';
import MonitorSingleStatChart from './charts/single_stat.vue';
import MonitorEmptyChart from './charts/empty_chart.vue';
+import TrackEventDirective from '~/vue_shared/directives/track_event';
+import { downloadCSVOptions, generateLinkToChartOptions } from '../utils';
export default {
components: {
@@ -27,6 +29,7 @@ export default {
directives: {
GlModal: GlModalDirective,
GlTooltip: GlTooltipDirective,
+ TrackEvent: TrackEventDirective,
},
props: {
clipboardText: {
@@ -82,8 +85,10 @@ export default {
return this.graphData.type && this.graphData.type === type;
},
showToast() {
- this.$toast.show(__('Link copied to clipboard'));
+ this.$toast.show(__('Link copied'));
},
+ downloadCSVOptions,
+ generateLinkToChartOptions,
},
};
</script>
@@ -121,13 +126,18 @@ export default {
<template slot="button-content">
<icon name="ellipsis_v" class="text-secondary" />
</template>
- <gl-dropdown-item :href="downloadCsv" download="chart_metrics.csv">
+ <gl-dropdown-item
+ v-track-event="downloadCSVOptions(graphData.title)"
+ :href="downloadCsv"
+ download="chart_metrics.csv"
+ >
{{ __('Download CSV') }}
</gl-dropdown-item>
<gl-dropdown-item
+ v-track-event="generateLinkToChartOptions(clipboardText)"
class="js-chart-link"
:data-clipboard-text="clipboardText"
- @click="showToast"
+ @click="showToast(clipboardText)"
>
{{ __('Generate link to chart') }}
</gl-dropdown-item>
diff --git a/app/assets/javascripts/monitoring/constants.js b/app/assets/javascripts/monitoring/constants.js
index 13aba3d9f44..2836fe4fc26 100644
--- a/app/assets/javascripts/monitoring/constants.js
+++ b/app/assets/javascripts/monitoring/constants.js
@@ -3,6 +3,11 @@ import { __ } from '~/locale';
export const sidebarAnimationDuration = 300; // milliseconds.
export const chartHeight = 300;
+/**
+ * Valid strings for this regex are
+ * 2019-10-01 and 2019-10-01 01:02:03
+ */
+export const dateTimePickerRegex = /^(\d{4})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])(?: (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]))?$/;
export const graphTypes = {
deploymentData: 'scatter',
@@ -28,6 +33,11 @@ export const timeWindows = {
export const dateFormats = {
timeOfDay: 'h:MM TT',
default: 'dd mmm yyyy, h:MMTT',
+ dateTimePicker: {
+ format: 'yyyy-mm-dd hh:mm:ss',
+ ISODate: "yyyy-mm-dd'T'HH:MM:ss'Z'",
+ stringDate: 'yyyy-mm-dd HH:MM:ss',
+ },
};
export const secondsIn = {
diff --git a/app/assets/javascripts/monitoring/monitoring_bundle.js b/app/assets/javascripts/monitoring/monitoring_bundle.js
index 51cef20455c..6aa1fb5e9c6 100644
--- a/app/assets/javascripts/monitoring/monitoring_bundle.js
+++ b/app/assets/javascripts/monitoring/monitoring_bundle.js
@@ -14,7 +14,6 @@ export default (props = {}) => {
if (gon.features) {
store.dispatch('monitoringDashboard/setFeatureFlags', {
prometheusEndpointEnabled: gon.features.environmentMetricsUsePrometheusEndpoint,
- multipleDashboardsEnabled: gon.features.environmentMetricsShowMultipleDashboards,
additionalPanelTypesEnabled: gon.features.environmentMetricsAdditionalPanelTypes,
});
}
diff --git a/app/assets/javascripts/monitoring/stores/actions.js b/app/assets/javascripts/monitoring/stores/actions.js
index 0cbad179f17..2cf34ddb45b 100644
--- a/app/assets/javascripts/monitoring/stores/actions.js
+++ b/app/assets/javascripts/monitoring/stores/actions.js
@@ -37,10 +37,9 @@ export const setEndpoints = ({ commit }, endpoints) => {
export const setFeatureFlags = (
{ commit },
- { prometheusEndpointEnabled, multipleDashboardsEnabled, additionalPanelTypesEnabled },
+ { prometheusEndpointEnabled, additionalPanelTypesEnabled },
) => {
commit(types.SET_DASHBOARD_ENABLED, prometheusEndpointEnabled);
- commit(types.SET_MULTIPLE_DASHBOARDS_ENABLED, multipleDashboardsEnabled);
commit(types.SET_ADDITIONAL_PANEL_TYPES_ENABLED, additionalPanelTypesEnabled);
};
@@ -51,13 +50,8 @@ export const setShowErrorBanner = ({ commit }, enabled) => {
export const requestMetricsDashboard = ({ commit }) => {
commit(types.REQUEST_METRICS_DATA);
};
-export const receiveMetricsDashboardSuccess = (
- { state, commit, dispatch },
- { response, params },
-) => {
- if (state.multipleDashboardsEnabled) {
- commit(types.SET_ALL_DASHBOARDS, response.all_dashboards);
- }
+export const receiveMetricsDashboardSuccess = ({ commit, dispatch }, { response, params }) => {
+ commit(types.SET_ALL_DASHBOARDS, response.all_dashboards);
commit(types.RECEIVE_METRICS_DATA_SUCCESS, response.dashboard.panel_groups);
dispatch('fetchPrometheusMetrics', params);
};
diff --git a/app/assets/javascripts/monitoring/stores/mutation_types.js b/app/assets/javascripts/monitoring/stores/mutation_types.js
index 4b1aadbcf05..9c546427c6e 100644
--- a/app/assets/javascripts/monitoring/stores/mutation_types.js
+++ b/app/assets/javascripts/monitoring/stores/mutation_types.js
@@ -10,7 +10,6 @@ export const RECEIVE_ENVIRONMENTS_DATA_FAILURE = 'RECEIVE_ENVIRONMENTS_DATA_FAIL
export const SET_QUERY_RESULT = 'SET_QUERY_RESULT';
export const SET_TIME_WINDOW = 'SET_TIME_WINDOW';
export const SET_DASHBOARD_ENABLED = 'SET_DASHBOARD_ENABLED';
-export const SET_MULTIPLE_DASHBOARDS_ENABLED = 'SET_MULTIPLE_DASHBOARDS_ENABLED';
export const SET_ADDITIONAL_PANEL_TYPES_ENABLED = 'SET_ADDITIONAL_PANEL_TYPES_ENABLED';
export const SET_ALL_DASHBOARDS = 'SET_ALL_DASHBOARDS';
export const SET_ENDPOINTS = 'SET_ENDPOINTS';
diff --git a/app/assets/javascripts/monitoring/stores/mutations.js b/app/assets/javascripts/monitoring/stores/mutations.js
index b19520d6638..320b33d3d69 100644
--- a/app/assets/javascripts/monitoring/stores/mutations.js
+++ b/app/assets/javascripts/monitoring/stores/mutations.js
@@ -1,6 +1,8 @@
import Vue from 'vue';
import * as types from './mutation_types';
-import { normalizeMetrics, sortMetrics, normalizeQueryResult } from './utils';
+import { normalizeMetrics, sortMetrics, normalizeMetric, normalizeQueryResult } from './utils';
+
+const normalizePanel = panel => panel.metrics.map(normalizeMetric);
export default {
[types.REQUEST_METRICS_DATA](state) {
@@ -9,13 +11,19 @@ export default {
},
[types.RECEIVE_METRICS_DATA_SUCCESS](state, groupData) {
state.groups = groupData.map(group => {
- let { metrics } = group;
+ let { metrics = [], panels = [] } = group;
+
+ // each panel has metric information that needs to be normalized
+ panels = panels.map(panel => ({
+ ...panel,
+ metrics: normalizePanel(panel),
+ }));
// for backwards compatibility, and to limit Vue template changes:
// for each group alias panels to metrics
// for each panel alias metrics to queries
if (state.useDashboardEndpoint) {
- metrics = group.panels.map(panel => ({
+ metrics = panels.map(panel => ({
...panel,
queries: panel.metrics,
}));
@@ -23,6 +31,7 @@ export default {
return {
...group,
+ panels,
metrics: normalizeMetrics(sortMetrics(metrics)),
};
});
@@ -80,9 +89,6 @@ export default {
[types.SET_DASHBOARD_ENABLED](state, enabled) {
state.useDashboardEndpoint = enabled;
},
- [types.SET_MULTIPLE_DASHBOARDS_ENABLED](state, enabled) {
- state.multipleDashboardsEnabled = enabled;
- },
[types.SET_GETTING_STARTED_EMPTY_STATE](state) {
state.emptyState = 'gettingStarted';
},
diff --git a/app/assets/javascripts/monitoring/stores/state.js b/app/assets/javascripts/monitoring/stores/state.js
index 440bdc951e0..e894e988f6a 100644
--- a/app/assets/javascripts/monitoring/stores/state.js
+++ b/app/assets/javascripts/monitoring/stores/state.js
@@ -8,7 +8,6 @@ export default () => ({
deploymentsEndpoint: null,
dashboardEndpoint: invalidUrl,
useDashboardEndpoint: false,
- multipleDashboardsEnabled: false,
additionalPanelTypesEnabled: false,
emptyState: 'gettingStarted',
showEmptyState: true,
diff --git a/app/assets/javascripts/monitoring/stores/utils.js b/app/assets/javascripts/monitoring/stores/utils.js
index 938ee2f0a9a..a19829f0c65 100644
--- a/app/assets/javascripts/monitoring/stores/utils.js
+++ b/app/assets/javascripts/monitoring/stores/utils.js
@@ -63,6 +63,25 @@ export function groupQueriesByChartInfo(metrics) {
return Object.values(metricsByChart);
}
+export const uniqMetricsId = metric => `${metric.metric_id}_${metric.id}`;
+
+/**
+ * Not to confuse with normalizeMetrics (plural)
+ * Metrics loaded from project-defined dashboards do not have a metric_id.
+ * This method creates a unique ID combining metric_id and id, if either is present.
+ * This is hopefully a temporary solution until BE processes metrics before passing to fE
+ * @param {Object} metric - metric
+ * @returns {Object} - normalized metric with a uniqueID
+ */
+export const normalizeMetric = (metric = {}) =>
+ _.omit(
+ {
+ ...metric,
+ metric_id: uniqMetricsId(metric),
+ },
+ 'id',
+ );
+
export const sortMetrics = metrics =>
_.chain(metrics)
.sortBy('title')
diff --git a/app/assets/javascripts/monitoring/utils.js b/app/assets/javascripts/monitoring/utils.js
index 46b01f753f8..4c72f5226b7 100644
--- a/app/assets/javascripts/monitoring/utils.js
+++ b/app/assets/javascripts/monitoring/utils.js
@@ -1,4 +1,7 @@
-import { secondsIn, timeWindowsKeyNames } from './constants';
+import dateformat from 'dateformat';
+import { secondsIn, dateTimePickerRegex, dateFormats } from './constants';
+
+const secondsToMilliseconds = seconds => seconds * 1000;
export const getTimeDiff = timeWindow => {
const end = Math.floor(Date.now() / 1000); // convert milliseconds to seconds
@@ -6,18 +9,60 @@ export const getTimeDiff = timeWindow => {
const start = end - difference;
return {
- start: new Date(start * 1000).toISOString(),
- end: new Date(end * 1000).toISOString(),
+ start: new Date(secondsToMilliseconds(start)).toISOString(),
+ end: new Date(secondsToMilliseconds(end)).toISOString(),
};
};
export const getTimeWindow = ({ start, end }) =>
Object.entries(secondsIn).reduce((acc, [timeRange, value]) => {
- if (end - start === value) {
+ if (new Date(end) - new Date(start) === secondsToMilliseconds(value)) {
return timeRange;
}
return acc;
- }, timeWindowsKeyNames.eightHours);
+ }, null);
+
+export const isDateTimePickerInputValid = val => dateTimePickerRegex.test(val);
+
+export const truncateZerosInDateTime = datetime => datetime.replace(' 00:00:00', '');
+
+/**
+ * The URL params start and end need to be validated
+ * before passing them down to other components.
+ *
+ * @param {string} dateString
+ */
+export const isValidDate = dateString => {
+ try {
+ // dateformat throws error that can be caught.
+ // This is better than using `new Date()`
+ if (dateString && dateString.trim()) {
+ dateformat(dateString, 'isoDateTime');
+ return true;
+ }
+ return false;
+ } catch {
+ return false;
+ }
+};
+
+/**
+ * Convert the input in Time picker component to ISO date.
+ *
+ * @param {string} val
+ * @returns {string}
+ */
+export const stringToISODate = val =>
+ dateformat(new Date(val.replace(/-/g, '/')), dateFormats.dateTimePicker.ISODate, true);
+
+/**
+ * Convert the ISO date received from the URL to string
+ * for the Time picker component.
+ *
+ * @param {Date} date
+ * @returns {string}
+ */
+export const ISODateToString = date => dateformat(date, dateFormats.dateTimePicker.stringDate);
/**
* This method is used to validate if the graph data format for a chart component
@@ -43,4 +88,47 @@ export const graphDataValidatorForValues = (isValues, graphData) => {
);
};
+/* eslint-disable @gitlab/i18n/no-non-i18n-strings */
+/**
+ * Checks that element that triggered event is located on cluster health check dashboard
+ * @param {HTMLElement} element to check against
+ * @returns {boolean}
+ */
+const isClusterHealthBoard = () => (document.body.dataset.page || '').includes(':clusters:show');
+
+/**
+ * Tracks snowplow event when user generates link to metric chart
+ * @param {String} chart link that will be sent as a property for the event
+ * @return {Object} config object for event tracking
+ */
+export const generateLinkToChartOptions = chartLink => {
+ const isCLusterHealthBoard = isClusterHealthBoard();
+
+ const category = isCLusterHealthBoard
+ ? 'Cluster Monitoring'
+ : 'Incident Management::Embedded metrics';
+ const action = isCLusterHealthBoard
+ ? 'generate_link_to_cluster_metric_chart'
+ : 'generate_link_to_metrics_chart';
+
+ return { category, action, label: 'Chart link', property: chartLink };
+};
+
+/**
+ * Tracks snowplow event when user downloads CSV of cluster metric
+ * @param {String} chart title that will be sent as a property for the event
+ */
+export const downloadCSVOptions = title => {
+ const isCLusterHealthBoard = isClusterHealthBoard();
+
+ const category = isCLusterHealthBoard
+ ? 'Cluster Monitoring'
+ : 'Incident Management::Embedded metrics';
+ const action = isCLusterHealthBoard
+ ? 'download_csv_of_cluster_metric_chart'
+ : 'download_csv_of_metrics_dashboard_chart';
+
+ return { category, action, label: 'Chart title', property: title };
+};
+
export default {};
diff --git a/app/assets/javascripts/namespace_select.js b/app/assets/javascripts/namespace_select.js
index 4ddbec71ba6..8671f0fd783 100644
--- a/app/assets/javascripts/namespace_select.js
+++ b/app/assets/javascripts/namespace_select.js
@@ -1,6 +1,7 @@
-/* eslint-disable func-names, no-else-return, prefer-template, prefer-arrow-callback */
+/* eslint-disable no-else-return */
import $ from 'jquery';
+import '~/gl_dropdown';
import Api from './api';
import { mergeUrlParams } from './lib/utils/url_utility';
import { parseBoolean } from '~/lib/utils/common_utils';
@@ -23,11 +24,11 @@ export default class NamespaceSelect {
if (selected.id == null) {
return selected.text;
} else {
- return selected.kind + ': ' + selected.full_path;
+ return `${selected.kind}: ${selected.full_path}`;
}
},
data(term, dataCallback) {
- return Api.namespaces(term, function(namespaces) {
+ return Api.namespaces(term, namespaces => {
if (isFilter) {
const anyNamespace = {
text: __('Any namespace'),
@@ -43,7 +44,7 @@ export default class NamespaceSelect {
if (namespace.id == null) {
return namespace.text;
} else {
- return namespace.kind + ': ' + namespace.full_path;
+ return `${namespace.kind}: ${namespace.full_path}`;
}
},
renderRow: this.renderRow,
diff --git a/app/assets/javascripts/network/branch_graph.js b/app/assets/javascripts/network/branch_graph.js
index fcfc2570b3d..a0ba2193d90 100644
--- a/app/assets/javascripts/network/branch_graph.js
+++ b/app/assets/javascripts/network/branch_graph.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, one-var, no-loop-func, consistent-return, prefer-template, prefer-arrow-callback, camelcase */
+/* eslint-disable func-names, no-var, one-var, no-loop-func, consistent-return, camelcase */
import $ from 'jquery';
import { __ } from '../locale';
@@ -223,7 +223,7 @@ export default (function() {
shortrefs = commit.refs;
// Truncate if longer than 15 chars
if (shortrefs.length > 17) {
- shortrefs = shortrefs.substr(0, 15) + '…';
+ shortrefs = `${shortrefs.substr(0, 15)}…`;
}
text = r.text(x + 4, y, shortrefs).attr({
'text-anchor': 'start',
@@ -259,9 +259,7 @@ export default (function() {
opacity: 0,
cursor: 'pointer',
})
- .click(function() {
- return window.open(options.commit_url.replace('%s', commit.id), '_blank');
- })
+ .click(() => window.open(options.commit_url.replace('%s', commit.id), '_blank'))
.hover(
function() {
this.tooltip = r.commitTooltip(x + 5, y, commit);
diff --git a/app/assets/javascripts/new_branch_form.js b/app/assets/javascripts/new_branch_form.js
index 98522c67696..9f9db21d65b 100644
--- a/app/assets/javascripts/new_branch_form.js
+++ b/app/assets/javascripts/new_branch_form.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, one-var, consistent-return, no-return-assign, prefer-arrow-callback, prefer-template, no-shadow, no-else-return, @gitlab/i18n/no-non-i18n-strings */
+/* eslint-disable func-names, no-var, one-var, consistent-return, no-return-assign, no-shadow, no-else-return, @gitlab/i18n/no-non-i18n-strings */
import $ from 'jquery';
import RefSelectDropdown from './ref_select_dropdown';
@@ -63,17 +63,17 @@ export default class NewBranchForm {
};
formatter = function(values, restriction) {
var formatted;
- formatted = values.map(function(value) {
+ formatted = values.map(value => {
switch (false) {
case !/\s/.test(value):
return 'spaces';
case !/\/{2,}/g.test(value):
return 'consecutive slashes';
default:
- return "'" + value + "'";
+ return `'${value}'`;
}
});
- return restriction.prefix + ' ' + formatted.join(restriction.conjunction);
+ return `${restriction.prefix} ${formatted.join(restriction.conjunction)}`;
};
validator = (function(_this) {
return function(errors, restriction) {
diff --git a/app/assets/javascripts/notebook/cells/code.vue b/app/assets/javascripts/notebook/cells/code.vue
index eefc801ed7a..1782e5bfe5a 100644
--- a/app/assets/javascripts/notebook/cells/code.vue
+++ b/app/assets/javascripts/notebook/cells/code.vue
@@ -49,6 +49,7 @@ export default {
v-if="hasOutput"
:count="cell.execution_count"
:outputs="outputs"
+ :metadata="cell.metadata"
:code-css-class="codeCssClass"
/>
</div>
diff --git a/app/assets/javascripts/notebook/cells/code/index.vue b/app/assets/javascripts/notebook/cells/code/index.vue
index 98b6cdd0944..470d8c87d59 100644
--- a/app/assets/javascripts/notebook/cells/code/index.vue
+++ b/app/assets/javascripts/notebook/cells/code/index.vue
@@ -26,6 +26,10 @@ export default {
type: String,
required: true,
},
+ metadata: {
+ type: Object,
+ default: () => ({}),
+ },
},
computed: {
code() {
@@ -36,6 +40,12 @@ export default {
return type.charAt(0).toUpperCase() + type.slice(1);
},
+ cellCssClass() {
+ return {
+ [this.codeCssClass]: true,
+ 'jupyter-notebook-scrolled': this.metadata.scrolled,
+ };
+ },
},
mounted() {
Prism.highlightElement(this.$refs.code);
@@ -46,6 +56,6 @@ export default {
<template>
<div :class="type">
<prompt :type="promptType" :count="count" />
- <pre ref="code" :class="codeCssClass" class="language-python" v-text="code"></pre>
+ <pre ref="code" :class="cellCssClass" class="language-python" v-text="code"></pre>
</div>
</template>
diff --git a/app/assets/javascripts/notebook/cells/output/index.vue b/app/assets/javascripts/notebook/cells/output/index.vue
index b59ddd0d57a..d8b0e099bc4 100644
--- a/app/assets/javascripts/notebook/cells/output/index.vue
+++ b/app/assets/javascripts/notebook/cells/output/index.vue
@@ -19,6 +19,10 @@ export default {
type: Array,
required: true,
},
+ metadata: {
+ type: Object,
+ default: () => ({}),
+ },
},
methods: {
outputType(output) {
@@ -78,6 +82,7 @@ export default {
:count="count"
:index="index"
:raw-code="rawCode(output)"
+ :metadata="metadata"
:code-css-class="codeCssClass"
/>
</div>
diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js
index 9cc56b34c75..3715a91d599 100644
--- a/app/assets/javascripts/notes.js
+++ b/app/assets/javascripts/notes.js
@@ -1,7 +1,7 @@
/* eslint-disable no-restricted-properties, func-names, no-var, camelcase,
no-unused-expressions, one-var, default-case,
-prefer-template, consistent-return, no-alert, no-return-assign,
-no-param-reassign, prefer-arrow-callback, no-else-return, vars-on-top,
+consistent-return, no-alert, no-return-assign,
+no-param-reassign, no-else-return, vars-on-top,
no-shadow, no-useless-escape, class-methods-use-this */
/* global ResolveService */
@@ -490,7 +490,7 @@ export default class Notes {
diffAvatarContainer = row
.prevAll('.line_holder')
.first()
- .find('.js-avatar-container.' + lineType + '_line');
+ .find(`.js-avatar-container.${lineType}_line`);
// is this the first note of discussion?
discussionContainer = $(`.notes[data-discussion-id="${noteEntity.discussion_id}"]`);
if (!discussionContainer.length) {
@@ -506,16 +506,14 @@ export default class Notes {
} else {
// Merge new discussion HTML in
var $notes = $discussion.find(`.notes[data-discussion-id="${noteEntity.discussion_id}"]`);
- var contentContainerClass =
- '.' +
- $notes
- .closest('.notes-content')
- .attr('class')
- .split(' ')
- .join('.');
+ var contentContainerClass = $notes
+ .closest('.notes-content')
+ .attr('class')
+ .split(' ')
+ .join('.');
row
- .find(contentContainerClass + ' .content')
+ .find(`.${contentContainerClass} .content`)
.append($notes.closest('.content').children());
}
} else {
@@ -722,7 +720,7 @@ export default class Notes {
this.revertNoteEditForm($targetNote);
$noteEntityEl.renderGFM();
// Find the note's `li` element by ID and replace it with the updated HTML
- $note_li = $('.note-row-' + noteEntity.id);
+ $note_li = $(`.note-row-${noteEntity.id}`);
$note_li.replaceWith($noteEntityEl);
this.setupNewNote($noteEntityEl);
@@ -1370,7 +1368,7 @@ export default class Notes {
.find('li.system-note')
.has('ul');
- $.each(systemNotes, function(index, systemNote) {
+ $.each(systemNotes, (index, systemNote) => {
const $systemNote = $(systemNote);
const headerMessage = $systemNote
.find('.note-text')
@@ -1461,6 +1459,7 @@ export default class Notes {
getFormData($form) {
const content = $form.find('.js-note-text').val();
return {
+ // eslint-disable-next-line no-jquery/no-serialize
formData: $form.serialize(),
formContent: _.escape(content),
formAction: $form.attr('action'),
diff --git a/app/assets/javascripts/notes/components/discussion_actions.vue b/app/assets/javascripts/notes/components/discussion_actions.vue
index 6bbf2fa6ee4..fad1bc67be7 100644
--- a/app/assets/javascripts/notes/components/discussion_actions.vue
+++ b/app/assets/javascripts/notes/components/discussion_actions.vue
@@ -58,6 +58,7 @@ export default {
<div class="btn-group">
<resolve-discussion-button
v-if="discussion.resolvable"
+ data-qa-selector="resolve_discussion_button"
:is-resolving="isResolving"
:button-title="resolveButtonTitle"
@onClick="$emit('resolve')"
diff --git a/app/assets/javascripts/notes/components/discussion_filter.vue b/app/assets/javascripts/notes/components/discussion_filter.vue
index 743684e7046..6b1e3298f9a 100644
--- a/app/assets/javascripts/notes/components/discussion_filter.vue
+++ b/app/assets/javascripts/notes/components/discussion_filter.vue
@@ -1,13 +1,14 @@
<script>
import $ from 'jquery';
import { mapGetters, mapActions } from 'vuex';
-import { getLocationHash } from '../../lib/utils/url_utility';
+import { getLocationHash, doesHashExistInUrl } from '../../lib/utils/url_utility';
import Icon from '~/vue_shared/components/icon.vue';
import {
DISCUSSION_FILTERS_DEFAULT_VALUE,
HISTORY_ONLY_FILTER_VALUE,
DISCUSSION_TAB_LABEL,
DISCUSSION_FILTER_TYPES,
+ NOTE_UNDERSCORE,
} from '../constants';
import notesEventHub from '../event_hub';
@@ -28,7 +29,9 @@ export default {
},
data() {
return {
- currentValue: this.selectedValue,
+ currentValue: doesHashExistInUrl(NOTE_UNDERSCORE)
+ ? DISCUSSION_FILTERS_DEFAULT_VALUE
+ : this.selectedValue,
defaultValue: DISCUSSION_FILTERS_DEFAULT_VALUE,
displayFilters: true,
};
@@ -50,7 +53,6 @@ export default {
notesEventHub.$on('dropdownSelect', this.selectFilter);
window.addEventListener('hashchange', this.handleLocationHash);
- this.handleLocationHash();
},
mounted() {
this.toggleCommentsForm();
diff --git a/app/assets/javascripts/notes/components/note_actions.vue b/app/assets/javascripts/notes/components/note_actions.vue
index 6cc873359da..89d434a60ba 100644
--- a/app/assets/javascripts/notes/components/note_actions.vue
+++ b/app/assets/javascripts/notes/components/note_actions.vue
@@ -149,9 +149,9 @@ export default {
title="Add reaction"
data-position="right"
>
- <icon css-classes="link-highlight award-control-icon-neutral" name="slight-smile" />
- <icon css-classes="link-highlight award-control-icon-positive" name="smiley" />
- <icon css-classes="link-highlight award-control-icon-super-positive" name="smiley" />
+ <icon class="link-highlight award-control-icon-neutral" name="slight-smile" />
+ <icon class="link-highlight award-control-icon-positive" name="smiley" />
+ <icon class="link-highlight award-control-icon-super-positive" name="smiley" />
</a>
</div>
<reply-button
@@ -168,7 +168,7 @@ export default {
class="note-action-button js-note-edit btn btn-transparent qa-note-edit-button"
@click="onEdit"
>
- <icon name="pencil" css-classes="link-highlight" />
+ <icon name="pencil" class="link-highlight" />
</button>
</div>
<div v-if="showDeleteAction" class="note-actions-item">
@@ -191,7 +191,7 @@ export default {
data-toggle="dropdown"
@click="closeTooltip"
>
- <icon css-classes="icon" name="ellipsis_v" />
+ <icon class="icon" name="ellipsis_v" />
</button>
<ul class="dropdown-menu more-actions-dropdown dropdown-open-left">
<li v-if="canReportAsAbuse">
diff --git a/app/assets/javascripts/notes/components/note_actions/reply_button.vue b/app/assets/javascripts/notes/components/note_actions/reply_button.vue
index 1aeb07d6608..20551279aec 100644
--- a/app/assets/javascripts/notes/components/note_actions/reply_button.vue
+++ b/app/assets/javascripts/notes/components/note_actions/reply_button.vue
@@ -19,12 +19,14 @@ export default {
<gl-button
ref="button"
v-gl-tooltip
- class="note-action-button js-note-action-reply"
+ class="note-action-button"
+ data-track-event="click_button"
+ data-track-label="reply_comment_button"
variant="transparent"
:title="__('Reply to comment')"
@click="$emit('startReplying')"
>
- <icon name="comment" css-classes="link-highlight" />
+ <icon name="comment" class="link-highlight" />
</gl-button>
</div>
</template>
diff --git a/app/assets/javascripts/notes/components/noteable_discussion.vue b/app/assets/javascripts/notes/components/noteable_discussion.vue
index ac743d9f4b8..cb1975a8962 100644
--- a/app/assets/javascripts/notes/components/noteable_discussion.vue
+++ b/app/assets/javascripts/notes/components/noteable_discussion.vue
@@ -306,7 +306,11 @@ export default {
<template>
<timeline-entry-item class="note note-discussion">
<div class="timeline-content">
- <div :data-discussion-id="discussion.id" class="discussion js-discussion-container">
+ <div
+ :data-discussion-id="discussion.id"
+ class="discussion js-discussion-container"
+ data-qa-selector="discussion_content"
+ >
<div v-if="shouldRenderDiffs" class="discussion-header note-wrapper">
<div v-once class="timeline-icon align-self-start flex-shrink-0">
<user-avatar-link
diff --git a/app/assets/javascripts/notes/components/notes_app.vue b/app/assets/javascripts/notes/components/notes_app.vue
index 16a0fb3f33a..c6c97489e5e 100644
--- a/app/assets/javascripts/notes/components/notes_app.vue
+++ b/app/assets/javascripts/notes/components/notes_app.vue
@@ -1,7 +1,7 @@
<script>
import { __ } from '~/locale';
import { mapGetters, mapActions } from 'vuex';
-import { getLocationHash } from '../../lib/utils/url_utility';
+import { getLocationHash, doesHashExistInUrl } from '../../lib/utils/url_utility';
import Flash from '../../flash';
import * as constants from '../constants';
import eventHub from '../event_hub';
@@ -69,6 +69,7 @@ export default {
'commentsDisabled',
'getNoteableData',
'userCanReply',
+ 'discussionTabCounter',
]),
noteableType() {
return this.noteableData.noteableType;
@@ -95,13 +96,13 @@ export default {
}
},
allDiscussions() {
- if (this.discussonsCount) {
- this.discussonsCount.textContent = this.allDiscussions.length;
+ if (this.discussionsCount && !this.isLoading) {
+ this.discussionsCount.textContent = this.discussionTabCounter;
}
},
},
created() {
- this.discussonsCount = document.querySelector('.js-discussions-count');
+ this.discussionsCount = document.querySelector('.js-discussions-count');
this.setNotesData(this.notesData);
this.setNoteableData(this.noteableData);
@@ -155,19 +156,17 @@ export default {
this.isFetching = true;
- return this.fetchDiscussions({ path: this.getNotesDataByProp('discussionsPath') })
- .then(() => {
- this.initPolling();
- })
+ return this.fetchDiscussions(this.getFetchDiscussionsConfig())
+ .then(this.initPolling)
.then(() => {
this.setLoadingState(false);
this.setNotesFetchedState(true);
eventHub.$emit('fetchedNotesData');
this.isFetching = false;
})
- .then(() => this.$nextTick())
- .then(() => this.startTaskList())
- .then(() => this.checkLocationHash())
+ .then(this.$nextTick)
+ .then(this.startTaskList)
+ .then(this.checkLocationHash)
.catch(() => {
this.setLoadingState(false);
this.setNotesFetchedState(true);
@@ -198,9 +197,20 @@ export default {
},
startReplying(discussionId) {
return this.convertToDiscussion(discussionId)
- .then(() => this.$nextTick())
+ .then(this.$nextTick)
.then(() => eventHub.$emit('startReplying', discussionId));
},
+ getFetchDiscussionsConfig() {
+ const defaultConfig = { path: this.getNotesDataByProp('discussionsPath') };
+
+ if (doesHashExistInUrl(constants.NOTE_UNDERSCORE)) {
+ return Object.assign({}, defaultConfig, {
+ filter: constants.DISCUSSION_FILTERS_DEFAULT_VALUE,
+ persistFilter: false,
+ });
+ }
+ return defaultConfig;
+ },
},
systemNote: constants.SYSTEM_NOTE,
};
diff --git a/app/assets/javascripts/notes/constants.js b/app/assets/javascripts/notes/constants.js
index bdfb6b8f105..68c117183a1 100644
--- a/app/assets/javascripts/notes/constants.js
+++ b/app/assets/javascripts/notes/constants.js
@@ -8,8 +8,6 @@ export const OPENED = 'opened';
export const REOPENED = 'reopened';
export const CLOSED = 'closed';
export const MERGED = 'merged';
-export const EMOJI_THUMBSUP = 'thumbsup';
-export const EMOJI_THUMBSDOWN = 'thumbsdown';
export const ISSUE_NOTEABLE_TYPE = 'issue';
export const EPIC_NOTEABLE_TYPE = 'epic';
export const MERGE_REQUEST_NOTEABLE_TYPE = 'MergeRequest';
@@ -19,6 +17,7 @@ export const DESCRIPTION_TYPE = 'changed the description';
export const HISTORY_ONLY_FILTER_VALUE = 2;
export const DISCUSSION_FILTERS_DEFAULT_VALUE = 0;
export const DISCUSSION_TAB_LABEL = 'show';
+export const NOTE_UNDERSCORE = 'note_';
export const NOTEABLE_TYPE_MAPPING = {
Issue: ISSUE_NOTEABLE_TYPE,
diff --git a/app/assets/javascripts/notes/index.js b/app/assets/javascripts/notes/index.js
index c70c0e4095c..30372103590 100644
--- a/app/assets/javascripts/notes/index.js
+++ b/app/assets/javascripts/notes/index.js
@@ -1,5 +1,4 @@
import Vue from 'vue';
-import initNoteStats from 'ee_else_ce/event_tracking/notes';
import notesApp from './components/notes_app.vue';
import initDiscussionFilters from './discussion_filters';
import createStore from './stores';
@@ -39,9 +38,6 @@ document.addEventListener('DOMContentLoaded', () => {
notesData: JSON.parse(notesDataset.notesData),
};
},
- mounted() {
- initNoteStats();
- },
render(createElement) {
return createElement('notes-app', {
props: {
diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js
index 6c236981a24..004035ea1d4 100644
--- a/app/assets/javascripts/notes/stores/actions.js
+++ b/app/assets/javascripts/notes/stores/actions.js
@@ -251,58 +251,80 @@ export const saveNote = ({ commit, dispatch }, noteData) => {
}
}
- return dispatch(methodToDispatch, postData, { root: true }).then(res => {
+ const processErrors = res => {
const { errors } = res;
- const commandsChanges = res.commands_changes;
+ if (!errors || !Object.keys(errors).length) {
+ return res;
+ }
- if (errors && Object.keys(errors).length) {
- /*
- The following reply means that quick actions have been successfully applied:
+ /*
+ The following reply means that quick actions have been successfully applied:
- {"commands_changes":{},"valid":false,"errors":{"commands_only":["Commands applied"]}}
- */
- if (hasQuickActions) {
- eTagPoll.makeRequest();
+ {"commands_changes":{},"valid":false,"errors":{"commands_only":["Commands applied"]}}
+ */
+ if (hasQuickActions) {
+ eTagPoll.makeRequest();
- $('.js-gfm-input').trigger('clear-commands-cache.atwho');
- Flash(__('Commands applied'), 'notice', noteData.flashContainer);
- } else {
- throw new Error(__('Failed to save comment!'));
- }
+ $('.js-gfm-input').trigger('clear-commands-cache.atwho');
+
+ const { commands_only: message } = errors;
+ Flash(message || __('Commands applied'), 'notice', noteData.flashContainer);
+
+ return res;
}
- if (commandsChanges) {
- if (commandsChanges.emoji_award) {
- const votesBlock = $('.js-awards-block').eq(0);
-
- loadAwardsHandler()
- .then(awardsHandler => {
- awardsHandler.addAwardToEmojiBar(votesBlock, commandsChanges.emoji_award);
- awardsHandler.scrollToAwards();
- })
- .catch(() => {
- Flash(
- __('Something went wrong while adding your award. Please try again.'),
- 'alert',
- noteData.flashContainer,
- );
- });
- }
+ throw new Error(__('Failed to save comment!'));
+ };
- if (commandsChanges.spend_time != null || commandsChanges.time_estimate != null) {
- sidebarTimeTrackingEventHub.$emit('timeTrackingUpdated', res);
- }
+ const processEmojiAward = res => {
+ const { commands_changes: commandsChanges } = res;
+ const { emoji_award: emojiAward } = commandsChanges || {};
+ if (!emojiAward) {
+ return res;
}
- if (errors && errors.commands_only) {
- Flash(errors.commands_only, 'notice', noteData.flashContainer);
+ const votesBlock = $('.js-awards-block').eq(0);
+
+ return loadAwardsHandler()
+ .then(awardsHandler => {
+ awardsHandler.addAwardToEmojiBar(votesBlock, emojiAward);
+ awardsHandler.scrollToAwards();
+ })
+ .catch(() => {
+ Flash(
+ __('Something went wrong while adding your award. Please try again.'),
+ 'alert',
+ noteData.flashContainer,
+ );
+ })
+ .then(() => res);
+ };
+
+ const processTimeTracking = res => {
+ const { commands_changes: commandsChanges } = res;
+ const { spend_time: spendTime, time_estimate: timeEstimate } = commandsChanges || {};
+ if (spendTime != null || timeEstimate != null) {
+ sidebarTimeTrackingEventHub.$emit('timeTrackingUpdated', {
+ commands_changes: commandsChanges,
+ });
}
+
+ return res;
+ };
+
+ const removePlaceholder = res => {
if (replyId) {
commit(types.REMOVE_PLACEHOLDER_NOTES);
}
return res;
- });
+ };
+
+ return dispatch(methodToDispatch, postData, { root: true })
+ .then(processErrors)
+ .then(processEmojiAward)
+ .then(processTimeTracking)
+ .then(removePlaceholder);
};
const pollSuccessCallBack = (resp, commit, state, getters, dispatch) => {
@@ -430,10 +452,13 @@ export const updateResolvableDiscussionsCounts = ({ commit }) =>
export const submitSuggestion = (
{ commit, dispatch },
{ discussionId, noteId, suggestionId, flashContainer },
-) =>
- Api.applySuggestion(suggestionId)
+) => {
+ const dispatchResolveDiscussion = () =>
+ dispatch('resolveDiscussion', { discussionId }).catch(() => {});
+
+ return Api.applySuggestion(suggestionId)
.then(() => commit(types.APPLY_SUGGESTION, { discussionId, noteId, suggestionId }))
- .then(() => dispatch('resolveDiscussion', { discussionId }).catch(() => {}))
+ .then(dispatchResolveDiscussion)
.catch(err => {
const defaultMessage = __(
'Something went wrong while applying the suggestion. Please try again.',
@@ -442,6 +467,7 @@ export const submitSuggestion = (
Flash(__(flashMessage), 'alert', flashContainer);
});
+};
export const convertToDiscussion = ({ commit }, noteId) =>
commit(types.CONVERT_TO_DISCUSSION, noteId);
diff --git a/app/assets/javascripts/notes/stores/mutations.js b/app/assets/javascripts/notes/stores/mutations.js
index fa44ef2d057..e70f0238316 100644
--- a/app/assets/javascripts/notes/stores/mutations.js
+++ b/app/assets/javascripts/notes/stores/mutations.js
@@ -33,10 +33,11 @@ export default {
},
[types.ADD_NEW_REPLY_TO_DISCUSSION](state, note) {
- const noteObj = utils.findNoteObjectById(state.discussions, note.discussion_id);
+ const discussion = utils.findNoteObjectById(state.discussions, note.discussion_id);
+ const existingNote = discussion && utils.findNoteObjectById(discussion.notes, note.id);
- if (noteObj) {
- noteObj.notes.push(note);
+ if (discussion && !existingNote) {
+ discussion.notes.push(note);
}
},
diff --git a/app/assets/javascripts/pager.js b/app/assets/javascripts/pager.js
index 386a9b2c740..46e80ba72e3 100644
--- a/app/assets/javascripts/pager.js
+++ b/app/assets/javascripts/pager.js
@@ -56,6 +56,10 @@ export default {
$('.content_list').append(html);
if (count > 0) {
this.offset += count;
+
+ if (count < this.limit) {
+ this.disable = true;
+ }
} else {
this.disable = true;
}
diff --git a/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue b/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue
index e2fec3c7172..eb03baf4894 100644
--- a/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue
+++ b/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue
@@ -1,13 +1,13 @@
<script>
import axios from '~/lib/utils/axios_utils';
import createFlash from '~/flash';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import { redirectTo } from '~/lib/utils/url_utility';
import { s__ } from '~/locale';
export default {
components: {
- GlModal,
+ GlModal: DeprecatedModal2,
},
props: {
url: {
diff --git a/app/assets/javascripts/pages/admin/users/components/delete_user_modal.vue b/app/assets/javascripts/pages/admin/users/components/delete_user_modal.vue
index e8905b479ee..78aaa9df0ec 100644
--- a/app/assets/javascripts/pages/admin/users/components/delete_user_modal.vue
+++ b/app/assets/javascripts/pages/admin/users/components/delete_user_modal.vue
@@ -1,37 +1,46 @@
<script>
import _ from 'underscore';
-import DeprecatedModal from '~/vue_shared/components/deprecated_modal.vue';
+import { GlModal, GlButton, GlFormInput } from '@gitlab/ui';
import { s__, sprintf } from '~/locale';
export default {
components: {
- DeprecatedModal,
+ GlModal,
+ GlButton,
+ GlFormInput,
},
props: {
+ title: {
+ type: String,
+ required: true,
+ },
+ content: {
+ type: String,
+ required: true,
+ },
+ action: {
+ type: String,
+ required: true,
+ },
+ secondaryAction: {
+ type: String,
+ required: true,
+ },
deleteUserUrl: {
type: String,
- required: false,
- default: '',
+ required: true,
},
blockUserUrl: {
type: String,
- required: false,
- default: '',
- },
- deleteContributions: {
- type: Boolean,
- required: false,
- default: false,
+ required: true,
},
username: {
type: String,
- required: false,
- default: '',
+ required: true,
},
csrfToken: {
type: String,
- required: false,
- default: '',
+ required: true,
},
},
data() {
@@ -40,32 +49,12 @@ export default {
};
},
computed: {
- title() {
- const keepContributionsTitle = s__('AdminUsers|Delete User %{username}?');
- const deleteContributionsTitle = s__('AdminUsers|Delete User %{username} and contributions?');
-
- return sprintf(
- this.deleteContributions ? deleteContributionsTitle : keepContributionsTitle,
- {
- username: `'${_.escape(this.username)}'`,
- },
- false,
- );
+ modalTitle() {
+ return sprintf(this.title, { username: this.username });
},
text() {
- const keepContributionsText = s__(`AdminArea|
- You are about to permanently delete the user %{username}.
- Issues, merge requests, and groups linked to them will be transferred to a system-wide "Ghost-user".
- To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead.
- Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered.`);
-
- const deleteContributionsText = s__(`AdminArea|
- You are about to permanently delete the user %{username}.
- This will delete all of the issues, merge requests, and groups linked to them.
- To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead.
- Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered.`);
return sprintf(
- this.deleteContributions ? deleteContributionsText : keepContributionsText,
+ this.content,
{
username: `<strong>${_.escape(this.username)}</strong>`,
strong_start: '<strong>',
@@ -83,12 +72,7 @@ export default {
false,
);
},
- primaryButtonLabel() {
- const keepContributionsLabel = s__('AdminUsers|Delete user');
- const deleteContributionsLabel = s__('AdminUsers|Delete user and contributions');
- return this.deleteContributions ? deleteContributionsLabel : keepContributionsLabel;
- },
secondaryButtonLabel() {
return s__('AdminUsers|Block user');
},
@@ -97,8 +81,12 @@ export default {
},
},
methods: {
+ show() {
+ this.$refs.modal.show();
+ },
onCancel() {
this.enteredUsername = '';
+ this.$refs.modal.hide();
},
onSecondaryAction() {
const { form } = this.$refs;
@@ -117,43 +105,28 @@ export default {
</script>
<template>
- <deprecated-modal
- id="delete-user-modal"
- :title="title"
- :text="text"
- :primary-button-label="primaryButtonLabel"
- :secondary-button-label="secondaryButtonLabel"
- :submit-disabled="!canSubmit"
- kind="danger"
- @submit="onSubmit"
- @cancel="onCancel"
- >
- <template slot="body" slot-scope="props">
- <p v-html="props.text"></p>
+ <gl-modal ref="modal" modal-id="delete-user-modal" :title="modalTitle" kind="danger">
+ <template>
+ <p v-html="text"></p>
<p v-html="confirmationTextLabel"></p>
<form ref="form" :action="deleteUserUrl" method="post">
<input ref="method" type="hidden" name="_method" value="delete" />
<input :value="csrfToken" type="hidden" name="authenticity_token" />
- <input
+ <gl-form-input
v-model="enteredUsername"
+ autofocus
type="text"
name="username"
- class="form-control"
- aria-labelledby="input-label"
autocomplete="off"
/>
</form>
</template>
- <template slot="secondary-button">
- <button
- :disabled="!canSubmit"
- type="button"
- class="btn js-secondary-button btn-warning"
- data-dismiss="modal"
- @click="onSecondaryAction"
- >
- {{ secondaryButtonLabel }}
- </button>
+ <template slot="modal-footer">
+ <gl-button variant="secondary" @click="onCancel">{{ s__('Cancel') }}</gl-button>
+ <gl-button :disabled="!canSubmit" variant="warning" @click="onSecondaryAction">
+ {{ secondaryAction }}
+ </gl-button>
+ <gl-button :disabled="!canSubmit" variant="danger" @click="onSubmit">{{ action }}</gl-button>
</template>
- </deprecated-modal>
+ </gl-modal>
</template>
diff --git a/app/assets/javascripts/pages/admin/users/components/user_modal_manager.vue b/app/assets/javascripts/pages/admin/users/components/user_modal_manager.vue
new file mode 100644
index 00000000000..a08d32028c3
--- /dev/null
+++ b/app/assets/javascripts/pages/admin/users/components/user_modal_manager.vue
@@ -0,0 +1,77 @@
+<script>
+export default {
+ props: {
+ modalConfiguration: {
+ required: true,
+ type: Object,
+ },
+ actionModals: {
+ required: true,
+ type: Object,
+ },
+ csrfToken: {
+ required: true,
+ type: String,
+ },
+ },
+ data() {
+ return {
+ currentModalData: null,
+ };
+ },
+ computed: {
+ activeModal() {
+ if (!this.currentModalData) return null;
+ const { glModalAction: action } = this.currentModalData;
+
+ return this.actionModals[action];
+ },
+
+ modalProps() {
+ const { glModalAction: requestedAction } = this.currentModalData;
+ return {
+ ...this.modalConfiguration[requestedAction],
+ ...this.currentModalData,
+ csrfToken: this.csrfToken,
+ };
+ },
+ },
+
+ mounted() {
+ document.addEventListener('click', this.handleClick);
+ },
+
+ beforeDestroy() {
+ document.removeEventListener('click', this.handleClick);
+ },
+
+ methods: {
+ handleClick(e) {
+ const { glModalAction: action } = e.target.dataset;
+ if (!action) return;
+
+ this.show(e.target.dataset);
+ e.preventDefault();
+ },
+
+ show(modalData) {
+ const { glModalAction: requestedAction } = modalData;
+ if (!this.actionModals[requestedAction]) {
+ throw new Error(`Requested non-existing modal action ${requestedAction}`);
+ }
+ if (!this.modalConfiguration[requestedAction]) {
+ throw new Error(`Modal action ${requestedAction} has no configuration in HTML`);
+ }
+
+ this.currentModalData = modalData;
+
+ return this.$nextTick().then(() => {
+ this.$refs.modal.show();
+ });
+ },
+ },
+};
+</script>
+<template>
+ <div :is="activeModal" v-if="activeModal" ref="modal" v-bind="modalProps" />
+</template>
diff --git a/app/assets/javascripts/pages/admin/users/components/user_operation_confirmation_modal.vue b/app/assets/javascripts/pages/admin/users/components/user_operation_confirmation_modal.vue
new file mode 100644
index 00000000000..4c335cfb018
--- /dev/null
+++ b/app/assets/javascripts/pages/admin/users/components/user_operation_confirmation_modal.vue
@@ -0,0 +1,70 @@
+<script>
+import { GlModal } from '@gitlab/ui';
+import { sprintf } from '~/locale';
+
+export default {
+ components: {
+ GlModal,
+ },
+ props: {
+ title: {
+ type: String,
+ required: true,
+ },
+ content: {
+ type: String,
+ required: true,
+ },
+ action: {
+ type: String,
+ required: true,
+ },
+ url: {
+ type: String,
+ required: true,
+ },
+ username: {
+ type: String,
+ required: true,
+ },
+ csrfToken: {
+ type: String,
+ required: true,
+ },
+ method: {
+ type: String,
+ required: false,
+ default: 'put',
+ },
+ },
+ computed: {
+ modalTitle() {
+ return sprintf(this.title, { username: this.username });
+ },
+ },
+ methods: {
+ show() {
+ this.$refs.modal.show();
+ },
+ submit() {
+ this.$refs.form.submit();
+ },
+ },
+};
+</script>
+<template>
+ <gl-modal
+ ref="modal"
+ modal-id="user-operation-modal"
+ :title="modalTitle"
+ ok-variant="warning"
+ :ok-title="action"
+ @ok="submit"
+ >
+ <form ref="form" :action="url" method="post">
+ <span v-html="content"></span>
+ <input ref="method" type="hidden" name="_method" :value="method" />
+ <input :value="csrfToken" type="hidden" name="authenticity_token" />
+ </form>
+ </gl-modal>
+</template>
diff --git a/app/assets/javascripts/pages/admin/users/index.js b/app/assets/javascripts/pages/admin/users/index.js
index 45046688b57..bc96e88351b 100644
--- a/app/assets/javascripts/pages/admin/users/index.js
+++ b/app/assets/javascripts/pages/admin/users/index.js
@@ -1,46 +1,65 @@
-import $ from 'jquery';
import Vue from 'vue';
import Translate from '~/vue_shared/translate';
+import ModalManager from './components/user_modal_manager.vue';
+import DeleteUserModal from './components/delete_user_modal.vue';
+import UserOperationConfirmationModal from './components/user_operation_confirmation_modal.vue';
import csrf from '~/lib/utils/csrf';
-import deleteUserModal from './components/delete_user_modal.vue';
+const MODAL_TEXTS_CONTAINER_SELECTOR = '#modal-texts';
+const MODAL_MANAGER_SELECTOR = '#user-modal';
+const ACTION_MODALS = {
+ deactivate: UserOperationConfirmationModal,
+ block: UserOperationConfirmationModal,
+ delete: DeleteUserModal,
+ 'delete-with-contributions': DeleteUserModal,
+};
+
+function loadModalsConfigurationFromHtml(modalsElement) {
+ const modalsConfiguration = {};
+
+ if (!modalsElement) {
+ /* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
+ throw new Error('Modals content element not found!');
+ }
+
+ Array.from(modalsElement.children).forEach(node => {
+ const { modal, ...config } = node.dataset;
+ modalsConfiguration[modal] = {
+ title: node.dataset.title,
+ ...config,
+ content: node.innerHTML,
+ };
+ });
+
+ return modalsConfiguration;
+}
document.addEventListener('DOMContentLoaded', () => {
Vue.use(Translate);
- const deleteUserModalEl = document.getElementById('delete-user-modal');
+ const modalConfiguration = loadModalsConfigurationFromHtml(
+ document.querySelector(MODAL_TEXTS_CONTAINER_SELECTOR),
+ );
- const deleteModal = new Vue({
- el: deleteUserModalEl,
- data: {
- deleteUserUrl: '',
- blockUserUrl: '',
- deleteContributions: '',
- username: '',
+ // eslint-disable-next-line no-new
+ new Vue({
+ el: MODAL_MANAGER_SELECTOR,
+ functional: true,
+ methods: {
+ show(...args) {
+ this.$refs.manager.show(...args);
+ },
},
- render(createElement) {
- return createElement(deleteUserModal, {
+ render(h) {
+ return h(ModalManager, {
+ ref: 'manager',
props: {
- deleteUserUrl: this.deleteUserUrl,
- blockUserUrl: this.blockUserUrl,
- deleteContributions: this.deleteContributions,
- username: this.username,
+ modalConfiguration,
+ actionModals: ACTION_MODALS,
csrfToken: csrf.token,
},
});
},
});
-
- $(document).on('shown.bs.modal', event => {
- if (event.relatedTarget.classList.contains('delete-user-button')) {
- const buttonProps = event.relatedTarget.dataset;
- deleteModal.deleteUserUrl = buttonProps.deleteUserUrl;
- deleteModal.blockUserUrl = buttonProps.blockUserUrl;
- deleteModal.deleteContributions = event.relatedTarget.hasAttribute(
- 'data-delete-contributions',
- );
- deleteModal.username = buttonProps.username;
- }
- });
});
diff --git a/app/assets/javascripts/pages/dashboard/todos/index/todos.js b/app/assets/javascripts/pages/dashboard/todos/index/todos.js
index d51d411f3c6..5230bdf9cdd 100644
--- a/app/assets/javascripts/pages/dashboard/todos/index/todos.js
+++ b/app/assets/javascripts/pages/dashboard/todos/index/todos.js
@@ -1,9 +1,11 @@
/* eslint-disable class-methods-use-this, no-unneeded-ternary */
import $ from 'jquery';
+import '~/gl_dropdown';
import { visitUrl } from '~/lib/utils/url_utility';
import UsersSelect from '~/users_select';
import { isMetaClick } from '~/lib/utils/common_utils';
+import { addDelimiter } from '~/lib/utils/text_utility';
import { __ } from '~/locale';
import flash from '~/flash';
import axios from '~/lib/utils/axios_utils';
@@ -145,8 +147,8 @@ export default class Todos {
updateBadges(data) {
$(document).trigger('todo:toggle', data.count);
- document.querySelector('.todos-pending .badge').innerHTML = data.count;
- document.querySelector('.todos-done .badge').innerHTML = data.done_count;
+ document.querySelector('.todos-pending .badge').innerHTML = addDelimiter(data.count);
+ document.querySelector('.todos-done .badge').innerHTML = addDelimiter(data.done_count);
}
goToTodoUrl(e) {
diff --git a/app/assets/javascripts/pages/groups/registry/repositories/index.js b/app/assets/javascripts/pages/groups/registry/repositories/index.js
new file mode 100644
index 00000000000..b663defad0e
--- /dev/null
+++ b/app/assets/javascripts/pages/groups/registry/repositories/index.js
@@ -0,0 +1,3 @@
+import initRegistryImages from '~/registry';
+
+document.addEventListener('DOMContentLoaded', initRegistryImages);
diff --git a/app/assets/javascripts/pages/groups/shared/group_details.js b/app/assets/javascripts/pages/groups/shared/group_details.js
index 01ef3f1db2b..37b253d7c48 100644
--- a/app/assets/javascripts/pages/groups/shared/group_details.js
+++ b/app/assets/javascripts/pages/groups/shared/group_details.js
@@ -1,6 +1,6 @@
/* eslint-disable no-new */
-import { getPagePath } from '~/lib/utils/common_utils';
+import { getPagePath, getDashPath } from '~/lib/utils/common_utils';
import { ACTIVE_TAB_SHARED, ACTIVE_TAB_ARCHIVED } from '~/groups/constants';
import NewGroupChild from '~/groups/new_group_child';
import notificationsDropdown from '~/notifications_dropdown';
@@ -12,9 +12,8 @@ import GroupTabs from './group_tabs';
export default function initGroupDetails(actionName = 'show') {
const newGroupChildWrapper = document.querySelector('.js-new-project-subgroup');
const loadableActions = [ACTIVE_TAB_SHARED, ACTIVE_TAB_ARCHIVED];
- const paths = window.location.pathname.split('/');
- const subpath = paths[paths.length - 1];
- let action = loadableActions.includes(subpath) ? subpath : getPagePath(1);
+ const dashPath = getDashPath();
+ let action = loadableActions.includes(dashPath) ? dashPath : getPagePath(1);
if (actionName && action === actionName) {
action = 'show'; // 'show' resets GroupTabs to default action through base class
}
diff --git a/app/assets/javascripts/pages/milestones/shared/components/promote_milestone_modal.vue b/app/assets/javascripts/pages/milestones/shared/components/promote_milestone_modal.vue
index c563514d36b..26adf4cbbe0 100644
--- a/app/assets/javascripts/pages/milestones/shared/components/promote_milestone_modal.vue
+++ b/app/assets/javascripts/pages/milestones/shared/components/promote_milestone_modal.vue
@@ -1,14 +1,14 @@
<script>
import axios from '~/lib/utils/axios_utils';
import createFlash from '~/flash';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import { s__, sprintf } from '~/locale';
import { visitUrl } from '~/lib/utils/url_utility';
import eventHub from '../event_hub';
export default {
components: {
- GlModal,
+ GlModal: DeprecatedModal2,
},
props: {
milestoneTitle: {
diff --git a/app/assets/javascripts/pages/projects/clusters/new/index.js b/app/assets/javascripts/pages/projects/clusters/new/index.js
index 55aa29c9797..14d5ab21555 100644
--- a/app/assets/javascripts/pages/projects/clusters/new/index.js
+++ b/app/assets/javascripts/pages/projects/clusters/new/index.js
@@ -1,7 +1,13 @@
document.addEventListener('DOMContentLoaded', () => {
if (gon.features.createEksClusters) {
import(/* webpackChunkName: 'eks_cluster' */ '~/create_cluster/eks_cluster')
- .then(({ default: initCreateEKSCluster }) => initCreateEKSCluster())
+ .then(({ default: initCreateEKSCluster }) => {
+ const el = document.querySelector('.js-create-eks-cluster-form-container');
+
+ if (el) {
+ initCreateEKSCluster(el);
+ }
+ })
.catch(() => {});
}
});
diff --git a/app/assets/javascripts/pages/projects/commit/pipelines/index.js b/app/assets/javascripts/pages/projects/commit/pipelines/index.js
index 8cc3cb0a57c..9f08260c3d6 100644
--- a/app/assets/javascripts/pages/projects/commit/pipelines/index.js
+++ b/app/assets/javascripts/pages/projects/commit/pipelines/index.js
@@ -6,6 +6,7 @@ document.addEventListener('DOMContentLoaded', () => {
new MiniPipelineGraph({
container: '.js-commit-pipeline-graph',
}).bindEvents();
+ // eslint-disable-next-line no-jquery/no-load
$('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath);
initPipelines();
});
diff --git a/app/assets/javascripts/pages/projects/commit/show/index.js b/app/assets/javascripts/pages/projects/commit/show/index.js
index 6fc982967eb..5aa4734244e 100644
--- a/app/assets/javascripts/pages/projects/commit/show/index.js
+++ b/app/assets/javascripts/pages/projects/commit/show/index.js
@@ -21,6 +21,7 @@ document.addEventListener('DOMContentLoaded', () => {
}).bindEvents();
initNotes();
initChangesDropdown(document.querySelector('.navbar-gitlab').offsetHeight + performanceHeight);
+ // eslint-disable-next-line no-jquery/no-load
$('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath);
fetchCommitMergeRequests();
initDiffNotes();
diff --git a/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors.js b/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors.js
index 76613394af6..5b873e6b909 100644
--- a/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors.js
+++ b/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, one-var, camelcase, no-param-reassign, prefer-template, no-return-assign */
+/* eslint-disable func-names, no-var, one-var, camelcase, no-param-reassign, no-return-assign */
import $ from 'jquery';
import _ from 'underscore';
@@ -66,8 +66,8 @@ export default (function() {
class: 'person',
style: 'display: block;',
});
- author_name = $('<h4>' + author.author_name + '</h4>');
- author_email = $('<p class="graph-author-email">' + author.author_email + '</p>');
+ author_name = $(`<h4>${author.author_name}</h4>`);
+ author_email = $(`<p class="graph-author-email">${author.author_email}</p>`);
author_commit_info_span = $('<span/>', {
class: 'commits',
});
diff --git a/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_graph.js b/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_graph.js
index 506e6075d16..86794800f87 100644
--- a/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_graph.js
+++ b/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_graph.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-restricted-syntax, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, no-return-assign, prefer-arrow-callback, prefer-template, no-else-return, no-shadow */
+/* eslint-disable func-names, no-restricted-syntax, no-use-before-define, no-param-reassign, new-cap, no-underscore-dangle, no-return-assign, no-else-return, no-shadow */
import $ from 'jquery';
import _ from 'underscore';
@@ -69,24 +69,18 @@ export const ContributorsGraph = (function() {
ContributorsGraph.set_y_domain = function(data) {
return (ContributorsGraph.prototype.y_domain = [
0,
- d3.max(data, function(d) {
- return (d.commits = d.commits || d.additions || d.deletions);
- }),
+ d3.max(data, d => (d.commits = d.commits || d.additions || d.deletions)),
]);
};
ContributorsGraph.init_x_domain = function(data) {
- return (ContributorsGraph.prototype.x_domain = d3.extent(data, function(d) {
- return d.date;
- }));
+ return (ContributorsGraph.prototype.x_domain = d3.extent(data, d => d.date));
};
ContributorsGraph.init_y_domain = function(data) {
return (ContributorsGraph.prototype.y_domain = [
0,
- d3.max(data, function(d) {
- return (d.commits = d.commits || d.additions || d.deletions);
- }),
+ d3.max(data, d => (d.commits = d.commits || d.additions || d.deletions)),
]);
};
@@ -124,14 +118,11 @@ export const ContributorsGraph = (function() {
};
ContributorsGraph.prototype.draw_x_axis = function() {
- return (
- this.svg
- .append('g')
- .attr('class', 'x axis')
- /* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
- .attr('transform', 'translate(0, ' + this.height + ')')
- .call(this.x_axis)
- );
+ return this.svg
+ .append('g')
+ .attr('class', 'x axis')
+ .attr('transform', `translate(0, ${this.height})`)
+ .call(this.x_axis);
};
ContributorsGraph.prototype.draw_y_axis = function() {
@@ -180,9 +171,7 @@ export const ContributorsMasterGraph = (function(superClass) {
ContributorsMasterGraph.prototype.parse_dates = function(data) {
const parseDate = d3.timeParse('%Y-%m-%d');
- return data.forEach(function(d) {
- return (d.date = parseDate(d.date));
- });
+ return data.forEach(d => (d.date = parseDate(d.date)));
};
ContributorsMasterGraph.prototype.create_scale = function() {
@@ -208,19 +197,16 @@ export const ContributorsMasterGraph = (function(superClass) {
.attr('height', this.height + this.MARGIN.top + this.MARGIN.bottom)
.attr('class', 'tint-box')
.append('g')
- /* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
- .attr('transform', 'translate(' + this.MARGIN.left + ',' + this.MARGIN.top + ')');
+ .attr('transform', `translate(${this.MARGIN.left},${this.MARGIN.top})`);
return this.svg;
};
ContributorsMasterGraph.prototype.create_area = function(x, y) {
return (this.area = d3
.area()
- .x(function(d) {
- return x(d.date);
- })
+ .x(d => x(d.date))
.y0(this.height)
- .y1(function(d) {
+ .y1(d => {
d.commits = d.commits || d.additions || d.deletions;
return y(d.commits);
}));
@@ -330,7 +316,7 @@ export const ContributorsAuthorGraph = (function(superClass) {
ContributorsAuthorGraph.prototype.create_area = function(x, y) {
return (this.area = d3
.area()
- .x(function(d) {
+ .x(d => {
const parseDate = d3.timeParse('%Y-%m-%d');
return x(parseDate(d));
})
@@ -358,8 +344,7 @@ export const ContributorsAuthorGraph = (function(superClass) {
.attr('height', this.height + this.MARGIN.top + this.MARGIN.bottom)
.attr('class', 'spark')
.append('g')
- /* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
- .attr('transform', 'translate(' + this.MARGIN.left + ',' + this.MARGIN.top + ')');
+ .attr('transform', `translate(${this.MARGIN.left},${this.MARGIN.top})`);
return this.svg;
};
diff --git a/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_util.js b/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_util.js
index 505ca938f40..a89a13fe37a 100644
--- a/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_util.js
+++ b/app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_util.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, one-var, camelcase, no-param-reassign, no-return-assign, prefer-arrow-callback, consistent-return, no-cond-assign, no-else-return */
+/* eslint-disable func-names, no-var, one-var, camelcase, no-param-reassign, no-return-assign, consistent-return, no-cond-assign, no-else-return */
import _ from 'underscore';
export default {
@@ -76,16 +76,12 @@ export default {
var log, total_data;
log = parsed_log.total;
total_data = this.pick_field(log, field);
- return _.sortBy(total_data, function(d) {
- return d.date;
- });
+ return _.sortBy(total_data, d => d.date);
},
pick_field(log, field) {
var total_data;
total_data = [];
- _.each(log, function(d) {
- return total_data.push(_.pick(d, [field, 'date']));
- });
+ _.each(log, d => total_data.push(_.pick(d, [field, 'date'])));
return total_data;
},
get_author_data(parsed_log, field, date_range) {
@@ -107,9 +103,7 @@ export default {
};
})(this),
);
- return _.sortBy(author_data, function(d) {
- return d[field];
- }).reverse();
+ return _.sortBy(author_data, d => d[field]).reverse();
},
parse_log_entry(log_entry, field, date_range) {
var parsed_entry;
diff --git a/app/assets/javascripts/pages/projects/issues/form.js b/app/assets/javascripts/pages/projects/issues/form.js
index 2205a7bafe3..96e47187fed 100644
--- a/app/assets/javascripts/pages/projects/issues/form.js
+++ b/app/assets/javascripts/pages/projects/issues/form.js
@@ -15,7 +15,9 @@ export default () => {
new IssuableForm($('.issue-form'));
new LabelsSelect();
new MilestoneSelect();
- new IssuableTemplateSelectors();
+ new IssuableTemplateSelectors({
+ warnTemplateOverride: true,
+ });
initSuggestions();
};
diff --git a/app/assets/javascripts/pages/projects/issues/show.js b/app/assets/javascripts/pages/projects/issues/show.js
index 0447d1f79fb..28a136a5fa5 100644
--- a/app/assets/javascripts/pages/projects/issues/show.js
+++ b/app/assets/javascripts/pages/projects/issues/show.js
@@ -5,6 +5,7 @@ import ZenMode from '~/zen_mode';
import '~/notes/index';
import initIssueableApp from '~/issue_show';
import initRelatedMergeRequestsApp from '~/related_merge_requests';
+import initVueIssuableSidebarApp from '~/issuable_sidebar/sidebar_bundle';
export default function() {
initIssueableApp();
@@ -12,5 +13,9 @@ export default function() {
new Issue(); // eslint-disable-line no-new
new ShortcutsIssuable(); // eslint-disable-line no-new
new ZenMode(); // eslint-disable-line no-new
- initIssuableSidebar();
+ if (gon.features && gon.features.vueIssuableSidebar) {
+ initVueIssuableSidebarApp();
+ } else {
+ initIssuableSidebar();
+ }
}
diff --git a/app/assets/javascripts/pages/projects/issues/show/index.js b/app/assets/javascripts/pages/projects/issues/show/index.js
index 7968dfd7a12..ce74a6de11f 100644
--- a/app/assets/javascripts/pages/projects/issues/show/index.js
+++ b/app/assets/javascripts/pages/projects/issues/show/index.js
@@ -3,5 +3,7 @@ import initShow from '../show';
document.addEventListener('DOMContentLoaded', () => {
initShow();
- initSidebarBundle();
+ if (gon.features && !gon.features.vueIssuableSidebar) {
+ initSidebarBundle();
+ }
});
diff --git a/app/assets/javascripts/pages/projects/labels/components/promote_label_modal.vue b/app/assets/javascripts/pages/projects/labels/components/promote_label_modal.vue
index e723cd3fea9..bb95f33c838 100644
--- a/app/assets/javascripts/pages/projects/labels/components/promote_label_modal.vue
+++ b/app/assets/javascripts/pages/projects/labels/components/promote_label_modal.vue
@@ -2,14 +2,14 @@
import _ from 'underscore';
import axios from '~/lib/utils/axios_utils';
import createFlash from '~/flash';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import { s__, sprintf } from '~/locale';
import { visitUrl } from '~/lib/utils/url_utility';
import eventHub from '../event_hub';
export default {
components: {
- GlModal,
+ GlModal: DeprecatedModal2,
},
props: {
url: {
diff --git a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js
index 8f0dc8554e2..e51ab79a51d 100644
--- a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js
+++ b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request.js
@@ -16,5 +16,7 @@ export default () => {
new IssuableForm($('.merge-request-form'));
new LabelsSelect();
new MilestoneSelect();
- new IssuableTemplateSelectors();
+ new IssuableTemplateSelectors({
+ warnTemplateOverride: true,
+ });
};
diff --git a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js
index 7bfb83a2204..fa1de1f13cb 100644
--- a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js
+++ b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js
@@ -4,11 +4,16 @@ import ShortcutsIssuable from '~/behaviors/shortcuts/shortcuts_issuable';
import { handleLocationHash } from '~/lib/utils/common_utils';
import howToMerge from '~/how_to_merge';
import initPipelines from '~/commit/pipelines/pipelines_bundle';
+import initVueIssuableSidebarApp from '~/issuable_sidebar/sidebar_bundle';
import initWidget from '../../../vue_merge_request_widget';
export default function() {
new ZenMode(); // eslint-disable-line no-new
- initIssuableSidebar();
+ if (gon.features && gon.features.vueIssuableSidebar) {
+ initVueIssuableSidebarApp();
+ } else {
+ initIssuableSidebar();
+ }
initPipelines();
new ShortcutsIssuable(true); // eslint-disable-line no-new
handleLocationHash();
diff --git a/app/assets/javascripts/pages/projects/merge_requests/show/index.js b/app/assets/javascripts/pages/projects/merge_requests/show/index.js
index f61f4db78d5..ddc648702f1 100644
--- a/app/assets/javascripts/pages/projects/merge_requests/show/index.js
+++ b/app/assets/javascripts/pages/projects/merge_requests/show/index.js
@@ -4,6 +4,8 @@ import initShow from '../init_merge_request_show';
document.addEventListener('DOMContentLoaded', () => {
initShow();
- initSidebarBundle();
+ if (gon.features && !gon.features.vueIssuableSidebar) {
+ initSidebarBundle();
+ }
initMrNotes();
});
diff --git a/app/assets/javascripts/pages/projects/network/network.js b/app/assets/javascripts/pages/projects/network/network.js
index 226d63f05c4..43417fa9702 100644
--- a/app/assets/javascripts/pages/projects/network/network.js
+++ b/app/assets/javascripts/pages/projects/network/network.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, prefer-template */
+/* eslint-disable func-names, no-var */
import $ from 'jquery';
import BranchGraph from '../../../network/branch_graph';
@@ -14,7 +14,7 @@ export default (function() {
this.branch_graph = new BranchGraph($('.network-graph'), opts);
vph = $(window).height() - 250;
$('.network-graph').css({
- height: vph + 'px',
+ height: `${vph}px`,
});
}
diff --git a/app/assets/javascripts/pages/projects/project.js b/app/assets/javascripts/pages/projects/project.js
index b99408e3609..435e8705803 100644
--- a/app/assets/javascripts/pages/projects/project.js
+++ b/app/assets/javascripts/pages/projects/project.js
@@ -1,9 +1,9 @@
-/* eslint-disable func-names, no-var, no-return-assign, vars-on-top */
+/* eslint-disable func-names, no-var, no-return-assign */
import $ from 'jquery';
import Cookies from 'js-cookie';
import { __ } from '~/locale';
-import { visitUrl, mergeUrlParams } from '~/lib/utils/url_utility';
+import { mergeUrlParams } from '~/lib/utils/url_utility';
import { serializeForm } from '~/lib/utils/forms';
import axios from '~/lib/utils/axios_utils';
import flash from '~/flash';
@@ -105,6 +105,10 @@ export default class Project {
var selected = $dropdown.data('selected');
var fieldName = $dropdown.data('fieldName');
var shouldVisit = Boolean($dropdown.data('visit'));
+ var $form = $dropdown.closest('form');
+ var action = $form.attr('action');
+ var linkTarget = mergeUrlParams(serializeForm($form[0]), action);
+
return $dropdown.glDropdown({
data(term, callback) {
axios
@@ -126,21 +130,18 @@ export default class Project {
renderRow(ref) {
var li = refListItem.cloneNode(false);
- if (ref.header != null) {
- li.className = 'dropdown-header';
- li.textContent = ref.header;
- } else {
- var link = refLink.cloneNode(false);
-
- if (ref === selected) {
- link.className = 'is-active';
- }
-
- link.textContent = ref;
- link.dataset.ref = ref;
+ var link = refLink.cloneNode(false);
- li.appendChild(link);
+ if (ref === selected) {
+ link.className = 'is-active';
}
+ link.textContent = ref;
+ link.dataset.ref = ref;
+ if (ref.length > 0 && shouldVisit) {
+ link.href = mergeUrlParams({ [fieldName]: ref }, linkTarget);
+ }
+
+ li.appendChild(link);
return li;
},
@@ -152,15 +153,11 @@ export default class Project {
},
clicked(options) {
const { e } = options;
- e.preventDefault();
- if ($(`input[name="${fieldName}"]`).length) {
- var $form = $dropdown.closest('form');
- var action = $form.attr('action');
-
- if (shouldVisit) {
- visitUrl(mergeUrlParams(serializeForm($form[0]), action));
- }
+ if (!shouldVisit) {
+ e.preventDefault();
}
+ /* The actual process is removed since `link.href` in `RenderRow` contains the full target.
+ * It makes the visitable link can be visited when opening on a new tab of browser */
},
});
});
diff --git a/app/assets/javascripts/pages/projects/releases/edit/index.js b/app/assets/javascripts/pages/projects/releases/edit/index.js
index c70271b09c4..98ec196fc37 100644
--- a/app/assets/javascripts/pages/projects/releases/edit/index.js
+++ b/app/assets/javascripts/pages/projects/releases/edit/index.js
@@ -1,4 +1,7 @@
-import $ from 'jquery';
-import initForm from '~/pages/projects/init_form';
+import ZenMode from '~/zen_mode';
+import initEditRelease from '~/releases/detail';
-document.addEventListener('DOMContentLoaded', () => initForm($('.release-form')));
+document.addEventListener('DOMContentLoaded', () => {
+ new ZenMode(); // eslint-disable-line no-new
+ initEditRelease();
+});
diff --git a/app/assets/javascripts/pages/projects/releases/index/index.js b/app/assets/javascripts/pages/projects/releases/index/index.js
index c183fbb9610..6402023149f 100644
--- a/app/assets/javascripts/pages/projects/releases/index/index.js
+++ b/app/assets/javascripts/pages/projects/releases/index/index.js
@@ -1,3 +1,3 @@
-import initReleases from '~/releases';
+import initReleases from '~/releases/list';
document.addEventListener('DOMContentLoaded', initReleases);
diff --git a/app/assets/javascripts/pages/registrations/new/index.js b/app/assets/javascripts/pages/registrations/new/index.js
new file mode 100644
index 00000000000..a33d11f3613
--- /dev/null
+++ b/app/assets/javascripts/pages/registrations/new/index.js
@@ -0,0 +1,9 @@
+import LengthValidator from '~/pages/sessions/new/length_validator';
+import UsernameValidator from '~/pages/sessions/new/username_validator';
+import NoEmojiValidator from '~/emoji/no_emoji_validator';
+
+document.addEventListener('DOMContentLoaded', () => {
+ new UsernameValidator(); // eslint-disable-line no-new
+ new LengthValidator(); // eslint-disable-line no-new
+ new NoEmojiValidator(); // eslint-disable-line no-new
+});
diff --git a/app/assets/javascripts/pages/registrations/welcome/index.js b/app/assets/javascripts/pages/registrations/welcome/index.js
new file mode 100644
index 00000000000..2d555fa7977
--- /dev/null
+++ b/app/assets/javascripts/pages/registrations/welcome/index.js
@@ -0,0 +1,7 @@
+import LengthValidator from '~/pages/sessions/new/length_validator';
+import NoEmojiValidator from '~/emoji/no_emoji_validator';
+
+document.addEventListener('DOMContentLoaded', () => {
+ new LengthValidator(); // eslint-disable-line no-new
+ new NoEmojiValidator(); // eslint-disable-line no-new
+});
diff --git a/app/assets/javascripts/pages/search/show/search.js b/app/assets/javascripts/pages/search/show/search.js
index 8f6c48ab065..dff9d855b67 100644
--- a/app/assets/javascripts/pages/search/show/search.js
+++ b/app/assets/javascripts/pages/search/show/search.js
@@ -1,4 +1,5 @@
import $ from 'jquery';
+import '~/gl_dropdown';
import Flash from '~/flash';
import Api from '~/api';
import { __ } from '~/locale';
diff --git a/app/assets/javascripts/performance_bar/components/detailed_metric.vue b/app/assets/javascripts/performance_bar/components/detailed_metric.vue
index a271284dd89..7ce32032ed3 100644
--- a/app/assets/javascripts/performance_bar/components/detailed_metric.vue
+++ b/app/assets/javascripts/performance_bar/components/detailed_metric.vue
@@ -1,10 +1,13 @@
<script>
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import RequestWarning from './request_warning.vue';
+
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import Icon from '~/vue_shared/components/icon.vue';
export default {
components: {
- GlModal,
+ RequestWarning,
+ GlModal: DeprecatedModal2,
Icon,
},
props: {
@@ -39,6 +42,16 @@ export default {
detailsList() {
return this.metricDetails.details;
},
+ warnings() {
+ return this.metricDetails.warnings || [];
+ },
+ htmlId() {
+ if (this.currentRequest) {
+ return `performance-bar-warning-${this.currentRequest.id}-${this.metric}`;
+ }
+
+ return '';
+ },
},
};
</script>
@@ -105,5 +118,6 @@ export default {
<div slot="footer"></div>
</gl-modal>
{{ title }}
+ <request-warning :html-id="htmlId" :warnings="warnings" />
</div>
</template>
diff --git a/app/assets/javascripts/performance_bar/components/performance_bar_app.vue b/app/assets/javascripts/performance_bar/components/performance_bar_app.vue
index 9ad6e75b86b..3b07eba02b7 100644
--- a/app/assets/javascripts/performance_bar/components/performance_bar_app.vue
+++ b/app/assets/javascripts/performance_bar/components/performance_bar_app.vue
@@ -1,14 +1,14 @@
<script>
import { glEmojiTag } from '~/emoji';
-import detailedMetric from './detailed_metric.vue';
-import requestSelector from './request_selector.vue';
+import DetailedMetric from './detailed_metric.vue';
+import RequestSelector from './request_selector.vue';
import { s__ } from '~/locale';
export default {
components: {
- detailedMetric,
- requestSelector,
+ DetailedMetric,
+ RequestSelector,
},
props: {
store: {
diff --git a/app/assets/javascripts/performance_bar/components/request_selector.vue b/app/assets/javascripts/performance_bar/components/request_selector.vue
index 297507b85af..793aba3189b 100644
--- a/app/assets/javascripts/performance_bar/components/request_selector.vue
+++ b/app/assets/javascripts/performance_bar/components/request_selector.vue
@@ -1,5 +1,12 @@
<script>
+import { glEmojiTag } from '~/emoji';
+import { n__ } from '~/locale';
+import { GlPopover } from '@gitlab/ui';
+
export default {
+ components: {
+ GlPopover,
+ },
props: {
currentRequest: {
type: Object,
@@ -15,6 +22,18 @@ export default {
currentRequestId: this.currentRequest.id,
};
},
+ computed: {
+ requestsWithWarnings() {
+ return this.requests.filter(request => request.hasWarnings);
+ },
+ warningMessage() {
+ return n__(
+ '%d request with warnings',
+ '%d requests with warnings',
+ this.requestsWithWarnings.length,
+ );
+ },
+ },
watch: {
currentRequestId(newRequestId) {
this.$emit('change-current-request', newRequestId);
@@ -31,6 +50,7 @@ export default {
return truncated;
},
+ glEmojiTag,
},
};
</script>
@@ -44,7 +64,16 @@ export default {
class="qa-performance-bar-request"
>
{{ truncatedUrl(request.url) }}
+ <span v-if="request.hasWarnings">(!)</span>
</option>
</select>
+ <span v-if="requestsWithWarnings.length">
+ <span id="performance-bar-request-selector-warning" v-html="glEmojiTag('warning')"></span>
+ <gl-popover
+ target="performance-bar-request-selector-warning"
+ :content="warningMessage"
+ triggers="hover focus"
+ />
+ </span>
</div>
</template>
diff --git a/app/assets/javascripts/performance_bar/components/request_warning.vue b/app/assets/javascripts/performance_bar/components/request_warning.vue
new file mode 100644
index 00000000000..0da3c271214
--- /dev/null
+++ b/app/assets/javascripts/performance_bar/components/request_warning.vue
@@ -0,0 +1,41 @@
+<script>
+import { glEmojiTag } from '~/emoji';
+import { GlPopover } from '@gitlab/ui';
+
+export default {
+ components: {
+ GlPopover,
+ },
+ props: {
+ htmlId: {
+ type: String,
+ required: true,
+ },
+ warnings: {
+ type: Array,
+ required: true,
+ },
+ },
+ computed: {
+ hasWarnings() {
+ return this.warnings && this.warnings.length;
+ },
+ warningMessage() {
+ if (!this.hasWarnings) {
+ return '';
+ }
+
+ return this.warnings.join('\n');
+ },
+ },
+ methods: {
+ glEmojiTag,
+ },
+};
+</script>
+<template>
+ <span v-if="hasWarnings">
+ <span :id="htmlId" v-html="glEmojiTag('warning')"></span>
+ <gl-popover :target="htmlId" :content="warningMessage" triggers="hover focus" />
+ </span>
+</template>
diff --git a/app/assets/javascripts/performance_bar/index.js b/app/assets/javascripts/performance_bar/index.js
index 29bfb7ee5df..1ae9487f391 100644
--- a/app/assets/javascripts/performance_bar/index.js
+++ b/app/assets/javascripts/performance_bar/index.js
@@ -6,7 +6,7 @@ export default ({ container }) =>
new Vue({
el: container,
components: {
- performanceBarApp: () => import('./components/performance_bar_app.vue'),
+ PerformanceBarApp: () => import('./components/performance_bar_app.vue'),
},
data() {
const performanceBarData = document.querySelector(this.$options.el).dataset;
@@ -41,7 +41,7 @@ export default ({ container }) =>
PerformanceBarService.fetchRequestDetails(this.peekUrl, requestId)
.then(res => {
- this.store.addRequestDetails(requestId, res.data.data);
+ this.store.addRequestDetails(requestId, res.data);
})
.catch(() =>
// eslint-disable-next-line no-console
diff --git a/app/assets/javascripts/performance_bar/stores/performance_bar_store.js b/app/assets/javascripts/performance_bar/stores/performance_bar_store.js
index 031e774d533..64f4f5e0c76 100644
--- a/app/assets/javascripts/performance_bar/stores/performance_bar_store.js
+++ b/app/assets/javascripts/performance_bar/stores/performance_bar_store.js
@@ -3,12 +3,13 @@ export default class PerformanceBarStore {
this.requests = [];
}
- addRequest(requestId, requestUrl, requestDetails) {
+ addRequest(requestId, requestUrl) {
if (!this.findRequest(requestId)) {
this.requests.push({
id: requestId,
url: requestUrl,
- details: requestDetails,
+ details: {},
+ hasWarnings: false,
});
}
@@ -22,7 +23,8 @@ export default class PerformanceBarStore {
addRequestDetails(requestId, requestDetails) {
const request = this.findRequest(requestId);
- request.details = requestDetails;
+ request.details = requestDetails.data;
+ request.hasWarnings = requestDetails.has_warnings;
return request;
}
diff --git a/app/assets/javascripts/pipelines/components/graph/graph_component.vue b/app/assets/javascripts/pipelines/components/graph/graph_component.vue
index cfc72327ef7..e29509ce074 100644
--- a/app/assets/javascripts/pipelines/components/graph/graph_component.vue
+++ b/app/assets/javascripts/pipelines/components/graph/graph_component.vue
@@ -1,20 +1,120 @@
<script>
+import _ from 'underscore';
import { GlLoadingIcon } from '@gitlab/ui';
import StageColumnComponent from './stage_column_component.vue';
import GraphMixin from '../../mixins/graph_component_mixin';
-import GraphWidthMixin from '~/pipelines/mixins/graph_width_mixin';
+import GraphWidthMixin from '../../mixins/graph_width_mixin';
+import LinkedPipelinesColumn from './linked_pipelines_column.vue';
+import GraphBundleMixin from '../../mixins/graph_pipeline_bundle_mixin';
export default {
+ name: 'PipelineGraph',
components: {
StageColumnComponent,
GlLoadingIcon,
+ LinkedPipelinesColumn,
+ },
+ mixins: [GraphMixin, GraphWidthMixin, GraphBundleMixin],
+ props: {
+ isLoading: {
+ type: Boolean,
+ required: true,
+ },
+ pipeline: {
+ type: Object,
+ required: true,
+ },
+ isLinkedPipeline: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
+ mediator: {
+ type: Object,
+ required: true,
+ },
+ type: {
+ type: String,
+ required: false,
+ default: 'main',
+ },
+ },
+ upstream: 'upstream',
+ downstream: 'downstream',
+ data() {
+ return {
+ triggeredTopIndex: 1,
+ };
+ },
+ computed: {
+ hasTriggeredBy() {
+ return (
+ this.type !== this.$options.downstream &&
+ this.triggeredByPipelines &&
+ this.pipeline.triggered_by !== null
+ );
+ },
+ triggeredByPipelines() {
+ return this.pipeline.triggered_by;
+ },
+ hasTriggered() {
+ return (
+ this.type !== this.$options.upstream &&
+ this.triggeredPipelines &&
+ this.pipeline.triggered.length > 0
+ );
+ },
+ triggeredPipelines() {
+ return this.pipeline.triggered;
+ },
+ expandedTriggeredBy() {
+ return (
+ this.pipeline.triggered_by &&
+ _.isArray(this.pipeline.triggered_by) &&
+ this.pipeline.triggered_by.find(el => el.isExpanded)
+ );
+ },
+ expandedTriggered() {
+ return this.pipeline.triggered && this.pipeline.triggered.find(el => el.isExpanded);
+ },
+
+ /**
+ * Calculates the margin top of the clicked downstream pipeline by
+ * adding the height of each linked pipeline and the margin
+ */
+ marginTop() {
+ return `${this.triggeredTopIndex * 52}px`;
+ },
+ pipelineTypeUpstream() {
+ return this.type !== this.$options.downstream && this.expandedTriggeredBy;
+ },
+ pipelineTypeDownstream() {
+ return this.type !== this.$options.upstream && this.expandedTriggered;
+ },
+ },
+ methods: {
+ handleClickedDownstream(pipeline, clickedIndex) {
+ this.triggeredTopIndex = clickedIndex;
+ this.$emit('onClickTriggered', this.pipeline, pipeline);
+ },
+ hasOnlyOneJob(stage) {
+ return stage.groups.length === 1;
+ },
+ hasDownstream(index, length) {
+ return index === length - 1 && this.hasTriggered;
+ },
+ hasUpstream(index) {
+ return index === 0 && this.hasTriggeredBy;
+ },
},
- mixins: [GraphMixin, GraphWidthMixin],
};
</script>
<template>
<div class="build-content middle-block js-pipeline-graph">
- <div class="pipeline-visualization pipeline-graph pipeline-tab-content">
+ <div
+ class="pipeline-visualization pipeline-graph"
+ :class="{ 'pipeline-tab-content': !isLinkedPipeline }"
+ >
<div
:style="{
paddingLeft: `${graphLeftPadding}px`,
@@ -23,21 +123,80 @@ export default {
>
<gl-loading-icon v-if="isLoading" class="m-auto" :size="3" />
- <ul v-if="!isLoading" class="stage-column-list">
+ <pipeline-graph
+ v-if="pipelineTypeUpstream"
+ type="upstream"
+ class="d-inline-block upstream-pipeline"
+ :class="`js-upstream-pipeline-${expandedTriggeredBy.id}`"
+ :is-loading="false"
+ :pipeline="expandedTriggeredBy"
+ :is-linked-pipeline="true"
+ :mediator="mediator"
+ @onClickTriggeredBy="
+ (parentPipeline, pipeline) => clickTriggeredByPipeline(parentPipeline, pipeline)
+ "
+ @refreshPipelineGraph="requestRefreshPipelineGraph"
+ />
+
+ <linked-pipelines-column
+ v-if="hasTriggeredBy"
+ :linked-pipelines="triggeredByPipelines"
+ :column-title="__('Upstream')"
+ graph-position="left"
+ @linkedPipelineClick="
+ linkedPipeline => $emit('onClickTriggeredBy', pipeline, linkedPipeline)
+ "
+ />
+
+ <ul
+ v-if="!isLoading"
+ :class="{
+ 'inline js-has-linked-pipelines': hasTriggered || hasTriggeredBy,
+ }"
+ class="stage-column-list align-top"
+ >
<stage-column-component
v-for="(stage, index) in graph"
:key="stage.name"
:class="{
- 'append-right-48': shouldAddRightMargin(index),
+ 'has-upstream prepend-left-64': hasUpstream(index),
+ 'has-downstream': hasDownstream(index, graph.length),
+ 'has-only-one-job': hasOnlyOneJob(stage),
+ 'append-right-46': shouldAddRightMargin(index),
}"
:title="capitalizeStageName(stage.name)"
:groups="stage.groups"
:stage-connector-class="stageConnectorClass(index, stage)"
:is-first-column="isFirstColumn(index)"
+ :has-triggered-by="hasTriggeredBy"
:action="stage.status.action"
@refreshPipelineGraph="refreshPipelineGraph"
/>
</ul>
+
+ <linked-pipelines-column
+ v-if="hasTriggered"
+ :linked-pipelines="triggeredPipelines"
+ :column-title="__('Downstream')"
+ graph-position="right"
+ @linkedPipelineClick="handleClickedDownstream"
+ />
+
+ <pipeline-graph
+ v-if="pipelineTypeDownstream"
+ type="downstream"
+ class="d-inline-block"
+ :class="`js-downstream-pipeline-${expandedTriggered.id}`"
+ :is-loading="false"
+ :pipeline="expandedTriggered"
+ :is-linked-pipeline="true"
+ :style="{ 'margin-top': marginTop }"
+ :mediator="mediator"
+ @onClickTriggered="
+ (parentPipeline, pipeline) => clickTriggeredPipeline(parentPipeline, pipeline)
+ "
+ @refreshPipelineGraph="requestRefreshPipelineGraph"
+ />
</div>
</div>
</div>
diff --git a/app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue b/app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue
new file mode 100644
index 00000000000..4e7d77863b9
--- /dev/null
+++ b/app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue
@@ -0,0 +1,65 @@
+<script>
+import { GlLoadingIcon, GlTooltipDirective, GlButton } from '@gitlab/ui';
+import CiStatus from '~/vue_shared/components/ci_icon.vue';
+
+export default {
+ directives: {
+ GlTooltip: GlTooltipDirective,
+ },
+ components: {
+ CiStatus,
+ GlLoadingIcon,
+ GlButton,
+ },
+ props: {
+ pipeline: {
+ type: Object,
+ required: true,
+ },
+ },
+ computed: {
+ tooltipText() {
+ return `${this.projectName} - ${this.pipelineStatus.label}`;
+ },
+ buttonId() {
+ return `js-linked-pipeline-${this.pipeline.id}`;
+ },
+ pipelineStatus() {
+ return this.pipeline.details.status;
+ },
+ projectName() {
+ return this.pipeline.project.name;
+ },
+ },
+ methods: {
+ onClickLinkedPipeline() {
+ this.$root.$emit('bv::hide::tooltip', this.buttonId);
+ this.$emit('pipelineClicked');
+ },
+ },
+};
+</script>
+
+<template>
+ <li class="linked-pipeline build">
+ <div class="curve"></div>
+ <gl-button
+ :id="buttonId"
+ v-gl-tooltip
+ :title="tooltipText"
+ class="js-linked-pipeline-content linked-pipeline-content"
+ data-qa-selector="linked_pipeline_button"
+ :class="`js-pipeline-expand-${pipeline.id}`"
+ @click="onClickLinkedPipeline"
+ >
+ <gl-loading-icon v-if="pipeline.isLoading" class="js-linked-pipeline-loading d-inline" />
+ <ci-status
+ v-else
+ :status="pipelineStatus"
+ css-classes="position-top-0"
+ class="js-linked-pipeline-status"
+ />
+ <span class="str-truncated align-bottom"> {{ projectName }} &#8226; #{{ pipeline.id }} </span>
+ </gl-button>
+ </li>
+</template>
diff --git a/app/assets/javascripts/pipelines/components/graph/linked_pipelines_column.vue b/app/assets/javascripts/pipelines/components/graph/linked_pipelines_column.vue
new file mode 100644
index 00000000000..6efdde2b17e
--- /dev/null
+++ b/app/assets/javascripts/pipelines/components/graph/linked_pipelines_column.vue
@@ -0,0 +1,52 @@
+<script>
+import LinkedPipeline from './linked_pipeline.vue';
+
+export default {
+ components: {
+ LinkedPipeline,
+ },
+ props: {
+ columnTitle: {
+ type: String,
+ required: true,
+ },
+ linkedPipelines: {
+ type: Array,
+ required: true,
+ },
+ graphPosition: {
+ type: String,
+ required: true,
+ },
+ },
+ computed: {
+ columnClass() {
+ const positionValues = {
+ right: 'prepend-left-64',
+ left: 'append-right-32',
+ };
+ return `graph-position-${this.graphPosition} ${positionValues[this.graphPosition]}`;
+ },
+ },
+};
+</script>
+
+<template>
+ <div :class="columnClass" class="stage-column linked-pipelines-column">
+ <div class="stage-name linked-pipelines-column-title">{{ columnTitle }}</div>
+ <div class="cross-project-triangle"></div>
+ <ul>
+ <linked-pipeline
+ v-for="(pipeline, index) in linkedPipelines"
+ :key="pipeline.id"
+ :class="{
+ 'flat-connector-before': index === 0 && graphPosition === 'right',
+ active: pipeline.isExpanded,
+ 'left-connector': pipeline.isExpanded && graphPosition === 'left',
+ }"
+ :pipeline="pipeline"
+ @pipelineClicked="$emit('linkedPipelineClick', pipeline, index)"
+ />
+ </ul>
+ </div>
+</template>
diff --git a/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue b/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue
index d5c124dc0ca..db7714808fd 100644
--- a/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue
+++ b/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue
@@ -1,6 +1,6 @@
<script>
import _ from 'underscore';
-import stageColumnMixin from 'ee_else_ce/pipelines/mixins/stage_column_mixin';
+import stageColumnMixin from '../../mixins/stage_column_mixin';
import JobItem from './job_item.vue';
import JobGroupDropdown from './job_group_dropdown.vue';
import ActionComponent from './action_component.vue';
diff --git a/app/assets/javascripts/pipelines/components/pipeline_stop_modal.vue b/app/assets/javascripts/pipelines/components/pipeline_stop_modal.vue
index 4cafd147511..2e71b3c637b 100644
--- a/app/assets/javascripts/pipelines/components/pipeline_stop_modal.vue
+++ b/app/assets/javascripts/pipelines/components/pipeline_stop_modal.vue
@@ -1,6 +1,6 @@
<script>
import _ from 'underscore';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import { GlLink } from '@gitlab/ui';
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
import CiIcon from '~/vue_shared/components/ci_icon.vue';
@@ -13,7 +13,7 @@ import { s__, sprintf } from '~/locale';
*/
export default {
components: {
- GlModal,
+ GlModal: DeprecatedModal2,
GlLink,
ClipboardButton,
CiIcon,
diff --git a/app/assets/javascripts/pipelines/components/pipeline_url.vue b/app/assets/javascripts/pipelines/components/pipeline_url.vue
index a08f732dda7..30c830d78f9 100644
--- a/app/assets/javascripts/pipelines/components/pipeline_url.vue
+++ b/app/assets/javascripts/pipelines/components/pipeline_url.vue
@@ -104,7 +104,7 @@ export default {
v-gl-tooltip
:title="
__(
- 'Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results.',
+ 'Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more in the documentation for Pipelines for Merged Results.',
)
"
class="js-pipeline-url-detached badge badge-info"
diff --git a/app/assets/javascripts/pipelines/mixins/graph_pipeline_bundle_mixin.js b/app/assets/javascripts/pipelines/mixins/graph_pipeline_bundle_mixin.js
index dd79ade5bc9..c76869d90d5 100644
--- a/app/assets/javascripts/pipelines/mixins/graph_pipeline_bundle_mixin.js
+++ b/app/assets/javascripts/pipelines/mixins/graph_pipeline_bundle_mixin.js
@@ -1,16 +1,68 @@
-import Flash from '~/flash';
+import flash from '~/flash';
import { __ } from '~/locale';
export default {
methods: {
- clickTriggeredByPipeline() {},
- clickTriggeredPipeline() {},
+ getExpandedPipelines(pipeline) {
+ this.mediator.service
+ .getPipeline(this.mediator.getExpandedParameters())
+ .then(response => {
+ this.mediator.store.toggleLoading(pipeline);
+ this.mediator.store.storePipeline(response.data);
+ this.mediator.poll.enable({ data: this.mediator.getExpandedParameters() });
+ })
+ .catch(() => {
+ this.mediator.store.toggleLoading(pipeline);
+ flash(__('An error occurred while fetching the pipeline.'));
+ });
+ },
+ /**
+ * Called when a linked pipeline is clicked.
+ *
+ * If the pipeline is collapsed we will start polling it & we will reset the other pipelines.
+ * If the pipeline is expanded we will close it.
+ *
+ * @param {String} method Method to fetch the pipeline
+ * @param {String} storeKey Store property that will be updates
+ * @param {String} resetStoreKey Store key for the visible pipeline that will need to be reset
+ * @param {Object} pipeline The clicked pipeline
+ */
+ clickPipeline(parentPipeline, pipeline, openMethod, closeMethod) {
+ if (!pipeline.isExpanded) {
+ this.mediator.store[openMethod](parentPipeline, pipeline);
+ this.mediator.store.toggleLoading(pipeline);
+ this.mediator.poll.stop();
+
+ this.getExpandedPipelines(pipeline);
+ } else {
+ this.mediator.store[closeMethod](pipeline);
+ this.mediator.poll.stop();
+
+ this.mediator.poll.enable({ data: this.mediator.getExpandedParameters() });
+ }
+ },
+ clickTriggeredByPipeline(parentPipeline, pipeline) {
+ this.clickPipeline(
+ parentPipeline,
+ pipeline,
+ 'openTriggeredByPipeline',
+ 'closeTriggeredByPipeline',
+ );
+ },
+ clickTriggeredPipeline(parentPipeline, pipeline) {
+ this.clickPipeline(
+ parentPipeline,
+ pipeline,
+ 'openTriggeredPipeline',
+ 'closeTriggeredPipeline',
+ );
+ },
requestRefreshPipelineGraph() {
// When an action is clicked
// (wether in the dropdown or in the main nodes, we refresh the big graph)
this.mediator
.refreshPipeline()
- .catch(() => Flash(__('An error occurred while making the request.')));
+ .catch(() => flash(__('An error occurred while making the request.')));
},
},
};
diff --git a/app/assets/javascripts/pipelines/mixins/stage_column_mixin.js b/app/assets/javascripts/pipelines/mixins/stage_column_mixin.js
index 64283ed0e58..3f3007ba11a 100644
--- a/app/assets/javascripts/pipelines/mixins/stage_column_mixin.js
+++ b/app/assets/javascripts/pipelines/mixins/stage_column_mixin.js
@@ -1,7 +1,14 @@
export default {
+ props: {
+ hasTriggeredBy: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
+ },
methods: {
buildConnnectorClass(index) {
- return index === 0 && !this.isFirstColumn ? 'left-connector' : '';
+ return index === 0 && (!this.isFirstColumn || this.hasTriggeredBy) ? 'left-connector' : '';
},
},
};
diff --git a/app/assets/javascripts/pipelines/pipeline_details_bundle.js b/app/assets/javascripts/pipelines/pipeline_details_bundle.js
index b8976f77bac..b6f8716d37d 100644
--- a/app/assets/javascripts/pipelines/pipeline_details_bundle.js
+++ b/app/assets/javascripts/pipelines/pipeline_details_bundle.js
@@ -2,8 +2,8 @@ import Vue from 'vue';
import Flash from '~/flash';
import Translate from '~/vue_shared/translate';
import { __ } from '~/locale';
-import pipelineGraph from 'ee_else_ce/pipelines/components/graph/graph_component.vue';
-import GraphEEMixin from 'ee_else_ce/pipelines/mixins/graph_pipeline_bundle_mixin';
+import pipelineGraph from './components/graph/graph_component.vue';
+import GraphBundleMixin from './mixins/graph_pipeline_bundle_mixin';
import PipelinesMediator from './pipeline_details_mediator';
import pipelineHeader from './components/header_component.vue';
import eventHub from './event_hub';
@@ -23,7 +23,7 @@ export default () => {
components: {
pipelineGraph,
},
- mixins: [GraphEEMixin],
+ mixins: [GraphBundleMixin],
data() {
return {
mediator,
diff --git a/app/assets/javascripts/pipelines/pipeline_details_mediator.js b/app/assets/javascripts/pipelines/pipeline_details_mediator.js
index c8819cf35cf..bf021a0b447 100644
--- a/app/assets/javascripts/pipelines/pipeline_details_mediator.js
+++ b/app/assets/javascripts/pipelines/pipeline_details_mediator.js
@@ -1,5 +1,5 @@
import Visibility from 'visibilityjs';
-import PipelineStore from 'ee_else_ce/pipelines/stores/pipeline_store';
+import PipelineStore from './stores/pipeline_store';
import Flash from '../flash';
import Poll from '../lib/utils/poll';
import { __ } from '../locale';
diff --git a/app/assets/javascripts/pipelines/stores/pipeline_store.js b/app/assets/javascripts/pipelines/stores/pipeline_store.js
index 259278b6410..441c9f3c25f 100644
--- a/app/assets/javascripts/pipelines/stores/pipeline_store.js
+++ b/app/assets/javascripts/pipelines/stores/pipeline_store.js
@@ -1,10 +1,196 @@
+import Vue from 'vue';
+import _ from 'underscore';
+
export default class PipelineStore {
constructor() {
this.state = {};
this.state.pipeline = {};
+ this.state.expandedPipelines = [];
}
-
+ /**
+ * For the triggered pipelines adds the `isExpanded` key
+ *
+ * For the triggered_by pipeline adds the `isExpanded` key
+ * and saves it as an array
+ *
+ * @param {Object} pipeline
+ */
storePipeline(pipeline = {}) {
- this.state.pipeline = pipeline;
+ const pipelineCopy = Object.assign({}, pipeline);
+
+ if (pipelineCopy.triggered_by) {
+ pipelineCopy.triggered_by = [pipelineCopy.triggered_by];
+
+ const oldTriggeredBy =
+ this.state.pipeline &&
+ this.state.pipeline.triggered_by &&
+ this.state.pipeline.triggered_by[0];
+
+ this.parseTriggeredByPipelines(oldTriggeredBy, pipelineCopy.triggered_by[0]);
+ }
+
+ if (pipelineCopy.triggered && pipelineCopy.triggered.length) {
+ pipelineCopy.triggered.forEach(el => {
+ const oldPipeline =
+ this.state.pipeline &&
+ this.state.pipeline.triggered &&
+ this.state.pipeline.triggered.find(element => element.id === el.id);
+
+ this.parseTriggeredPipelines(oldPipeline, el);
+ });
+ }
+
+ this.state.pipeline = pipelineCopy;
+ }
+
+ /**
+ * Recursiverly parses the triggered by pipelines.
+ *
+ * Sets triggered_by as an array, there is always only 1 triggered_by pipeline.
+ * Adds key `isExpanding`
+ * Keeps old isExpading value due to polling
+ *
+ * @param {Array} parentPipeline
+ * @param {Object} pipeline
+ */
+ parseTriggeredByPipelines(oldPipeline = {}, newPipeline) {
+ // keep old value in case it's opened because we're polling
+
+ Vue.set(newPipeline, 'isExpanded', oldPipeline.isExpanded || false);
+ // add isLoading property
+ Vue.set(newPipeline, 'isLoading', false);
+
+ if (newPipeline.triggered_by) {
+ if (!_.isArray(newPipeline.triggered_by)) {
+ Object.assign(newPipeline, { triggered_by: [newPipeline.triggered_by] });
+ }
+ this.parseTriggeredByPipelines(oldPipeline, newPipeline.triggered_by[0]);
+ }
+ }
+
+ /**
+ * Recursively parses the triggered pipelines
+ * @param {Array} parentPipeline
+ * @param {Object} pipeline
+ */
+ parseTriggeredPipelines(oldPipeline = {}, newPipeline) {
+ // keep old value in case it's opened because we're polling
+ Vue.set(newPipeline, 'isExpanded', oldPipeline.isExpanded || false);
+
+ // add isLoading property
+ Vue.set(newPipeline, 'isLoading', false);
+
+ if (newPipeline.triggered && newPipeline.triggered.length > 0) {
+ newPipeline.triggered.forEach(el => {
+ const oldTriggered =
+ oldPipeline.triggered && oldPipeline.triggered.find(element => element.id === el.id);
+ this.parseTriggeredPipelines(oldTriggered, el);
+ });
+ }
+ }
+
+ /**
+ * Recursively resets all triggered by pipelines
+ *
+ * @param {Object} pipeline
+ */
+ resetTriggeredByPipeline(parentPipeline, pipeline) {
+ parentPipeline.triggered_by.forEach(el => this.closePipeline(el));
+
+ if (pipeline.triggered_by && pipeline.triggered_by) {
+ this.resetTriggeredByPipeline(pipeline, pipeline.triggered_by);
+ }
+ }
+
+ /**
+ * Opens the clicked pipeline and closes all other ones.
+ * @param {Object} pipeline
+ */
+ openTriggeredByPipeline(parentPipeline, pipeline) {
+ // first we need to reset all triggeredBy pipelines
+ this.resetTriggeredByPipeline(parentPipeline, pipeline);
+
+ this.openPipeline(pipeline);
+ }
+
+ /**
+ * On click, will close the given pipeline and all nested triggered by pipelines
+ *
+ * @param {Object} pipeline
+ */
+ closeTriggeredByPipeline(pipeline) {
+ this.closePipeline(pipeline);
+
+ if (pipeline.triggered_by && pipeline.triggered_by.length) {
+ pipeline.triggered_by.forEach(triggeredBy => this.closeTriggeredByPipeline(triggeredBy));
+ }
+ }
+
+ /**
+ * Recursively closes all triggered pipelines for the given one.
+ *
+ * @param {Object} pipeline
+ */
+ resetTriggeredPipelines(parentPipeline, pipeline) {
+ parentPipeline.triggered.forEach(el => this.closePipeline(el));
+
+ if (pipeline.triggered && pipeline.triggered.length) {
+ pipeline.triggered.forEach(el => this.resetTriggeredPipelines(pipeline, el));
+ }
+ }
+
+ /**
+ * Opens the clicked triggered pipeline and closes all other ones.
+ *
+ * @param {Object} pipeline
+ */
+ openTriggeredPipeline(parentPipeline, pipeline) {
+ this.resetTriggeredPipelines(parentPipeline, pipeline);
+
+ this.openPipeline(pipeline);
+ }
+
+ /**
+ * On click, will close the given pipeline and all the nested triggered ones
+ * @param {Object} pipeline
+ */
+ closeTriggeredPipeline(pipeline) {
+ this.closePipeline(pipeline);
+
+ if (pipeline.triggered && pipeline.triggered.length) {
+ pipeline.triggered.forEach(triggered => this.closeTriggeredPipeline(triggered));
+ }
+ }
+
+ /**
+ * Utility function, Closes the given pipeline
+ * @param {Object} pipeline
+ */
+ closePipeline(pipeline) {
+ Vue.set(pipeline, 'isExpanded', false);
+ // remove the pipeline from the parameters
+ this.removeExpandedPipelineToRequestData(pipeline.id);
+ }
+
+ /**
+ * Utility function, Opens the given pipeline
+ * @param {Object} pipeline
+ */
+ openPipeline(pipeline) {
+ Vue.set(pipeline, 'isExpanded', true);
+ // add the pipeline to the parameters
+ this.addExpandedPipelineToRequestData(pipeline.id);
+ }
+ // eslint-disable-next-line class-methods-use-this
+ toggleLoading(pipeline) {
+ Vue.set(pipeline, 'isLoading', !pipeline.isLoading);
+ }
+
+ addExpandedPipelineToRequestData(id) {
+ this.state.expandedPipelines.push(id);
+ }
+
+ removeExpandedPipelineToRequestData(id) {
+ this.state.expandedPipelines.splice(this.state.expandedPipelines.findIndex(el => el === id), 1);
}
}
diff --git a/app/assets/javascripts/privacy_policy_update_callout.js b/app/assets/javascripts/privacy_policy_update_callout.js
index 126b1ee1132..97f41deb30f 100644
--- a/app/assets/javascripts/privacy_policy_update_callout.js
+++ b/app/assets/javascripts/privacy_policy_update_callout.js
@@ -1,7 +1,7 @@
import PersistentUserCallout from '~/persistent_user_callout';
function initPrivacyPolicyUpdateCallout() {
- const callout = document.querySelector('.privacy-policy-update-64341');
+ const callout = document.querySelector('.js-privacy-policy-update');
PersistentUserCallout.factory(callout);
}
diff --git a/app/assets/javascripts/profile/account/components/update_username.vue b/app/assets/javascripts/profile/account/components/update_username.vue
index e1085c0a44d..72867ecd709 100644
--- a/app/assets/javascripts/profile/account/components/update_username.vue
+++ b/app/assets/javascripts/profile/account/components/update_username.vue
@@ -1,13 +1,13 @@
<script>
import _ from 'underscore';
import axios from '~/lib/utils/axios_utils';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import { s__, sprintf } from '~/locale';
import Flash from '~/flash';
export default {
components: {
- GlModal,
+ GlModal: DeprecatedModal2,
},
props: {
actionUrl: {
diff --git a/app/assets/javascripts/project_find_file.js b/app/assets/javascripts/project_find_file.js
index e73a828c0ae..2c375b39c1f 100644
--- a/app/assets/javascripts/project_find_file.js
+++ b/app/assets/javascripts/project_find_file.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, consistent-return, one-var, no-cond-assign, prefer-template, no-return-assign */
+/* eslint-disable func-names, no-var, consistent-return, one-var, no-cond-assign, no-return-assign */
import $ from 'jquery';
import fuzzaldrinPlus from 'fuzzaldrin-plus';
@@ -81,7 +81,7 @@ export default class ProjectFindFile {
// find file
}
- // files pathes load
+ // files paths load
load(url) {
axios
.get(url)
@@ -112,10 +112,13 @@ export default class ProjectFindFile {
if (searchText) {
matches = fuzzaldrinPlus.match(filePath, searchText);
}
- blobItemUrl = this.options.blobUrlTemplate + '/' + encodeURIComponent(filePath);
+ blobItemUrl = `${this.options.blobUrlTemplate}/${encodeURIComponent(filePath)}`;
html = ProjectFindFile.makeHtml(filePath, matches, blobItemUrl);
results.push(this.element.find('.tree-table > tbody').append(html));
}
+
+ this.element.find('.empty-state').toggleClass('hidden', Boolean(results.length));
+
return results;
}
diff --git a/app/assets/javascripts/project_select.js b/app/assets/javascripts/project_select.js
index 88665ed2ab7..0fbb7e5ca42 100644
--- a/app/assets/javascripts/project_select.js
+++ b/app/assets/javascripts/project_select.js
@@ -5,102 +5,103 @@ import Api from './api';
import ProjectSelectComboButton from './project_select_combo_button';
import { s__ } from './locale';
-export default function projectSelect() {
- import(/* webpackChunkName: 'select2' */ 'select2/select2')
- .then(() => {
- $('.ajax-project-select').each(function(i, select) {
- var placeholder;
- const simpleFilter = $(select).data('simpleFilter') || false;
- this.groupId = $(select).data('groupId');
- this.includeGroups = $(select).data('includeGroups');
- this.allProjects = $(select).data('allProjects') || false;
- this.orderBy = $(select).data('orderBy') || 'id';
- this.withIssuesEnabled = $(select).data('withIssuesEnabled');
- this.withMergeRequestsEnabled = $(select).data('withMergeRequestsEnabled');
- this.withShared =
- $(select).data('withShared') === undefined ? true : $(select).data('withShared');
- this.includeProjectsInSubgroups = $(select).data('includeProjectsInSubgroups') || false;
- this.allowClear = $(select).data('allowClear') || false;
+const projectSelect = () => {
+ $('.ajax-project-select').each(function(i, select) {
+ var placeholder;
+ const simpleFilter = $(select).data('simpleFilter') || false;
+ this.groupId = $(select).data('groupId');
+ this.includeGroups = $(select).data('includeGroups');
+ this.allProjects = $(select).data('allProjects') || false;
+ this.orderBy = $(select).data('orderBy') || 'id';
+ this.withIssuesEnabled = $(select).data('withIssuesEnabled');
+ this.withMergeRequestsEnabled = $(select).data('withMergeRequestsEnabled');
+ this.withShared =
+ $(select).data('withShared') === undefined ? true : $(select).data('withShared');
+ this.includeProjectsInSubgroups = $(select).data('includeProjectsInSubgroups') || false;
+ this.allowClear = $(select).data('allowClear') || false;
- placeholder = s__('ProjectSelect|Search for project');
- if (this.includeGroups) {
- placeholder += s__('ProjectSelect| or group');
- }
+ placeholder = s__('ProjectSelect|Search for project');
+ if (this.includeGroups) {
+ placeholder += s__('ProjectSelect| or group');
+ }
- $(select).select2({
- placeholder,
- minimumInputLength: 0,
- query: (function(_this) {
- return function(query) {
- var finalCallback, projectsCallback;
- finalCallback = function(projects) {
+ $(select).select2({
+ placeholder,
+ minimumInputLength: 0,
+ query: (function(_this) {
+ return function(query) {
+ var finalCallback, projectsCallback;
+ finalCallback = function(projects) {
+ var data;
+ data = {
+ results: projects,
+ };
+ return query.callback(data);
+ };
+ if (_this.includeGroups) {
+ projectsCallback = function(projects) {
+ var groupsCallback;
+ groupsCallback = function(groups) {
var data;
- data = {
- results: projects,
- };
- return query.callback(data);
+ data = groups.concat(projects);
+ return finalCallback(data);
};
- if (_this.includeGroups) {
- projectsCallback = function(projects) {
- var groupsCallback;
- groupsCallback = function(groups) {
- var data;
- data = groups.concat(projects);
- return finalCallback(data);
- };
- return Api.groups(query.term, {}, groupsCallback);
- };
- } else {
- projectsCallback = finalCallback;
- }
- if (_this.groupId) {
- return Api.groupProjects(
- _this.groupId,
- query.term,
- {
- with_issues_enabled: _this.withIssuesEnabled,
- with_merge_requests_enabled: _this.withMergeRequestsEnabled,
- with_shared: _this.withShared,
- include_subgroups: _this.includeProjectsInSubgroups,
- },
- projectsCallback,
- );
- } else {
- return Api.projects(
- query.term,
- {
- order_by: _this.orderBy,
- with_issues_enabled: _this.withIssuesEnabled,
- with_merge_requests_enabled: _this.withMergeRequestsEnabled,
- membership: !_this.allProjects,
- },
- projectsCallback,
- );
- }
+ return Api.groups(query.term, {}, groupsCallback);
};
- })(this),
- id(project) {
- if (simpleFilter) return project.id;
- return JSON.stringify({
- name: project.name,
- url: project.web_url,
- });
- },
- text(project) {
- return project.name_with_namespace || project.name;
- },
+ } else {
+ projectsCallback = finalCallback;
+ }
+ if (_this.groupId) {
+ return Api.groupProjects(
+ _this.groupId,
+ query.term,
+ {
+ with_issues_enabled: _this.withIssuesEnabled,
+ with_merge_requests_enabled: _this.withMergeRequestsEnabled,
+ with_shared: _this.withShared,
+ include_subgroups: _this.includeProjectsInSubgroups,
+ },
+ projectsCallback,
+ );
+ } else {
+ return Api.projects(
+ query.term,
+ {
+ order_by: _this.orderBy,
+ with_issues_enabled: _this.withIssuesEnabled,
+ with_merge_requests_enabled: _this.withMergeRequestsEnabled,
+ membership: !_this.allProjects,
+ },
+ projectsCallback,
+ );
+ }
+ };
+ })(this),
+ id(project) {
+ if (simpleFilter) return project.id;
+ return JSON.stringify({
+ name: project.name,
+ url: project.web_url,
+ });
+ },
+ text(project) {
+ return project.name_with_namespace || project.name;
+ },
- initSelection(el, callback) {
- return Api.project(el.val()).then(({ data }) => callback(data));
- },
+ initSelection(el, callback) {
+ return Api.project(el.val()).then(({ data }) => callback(data));
+ },
- allowClear: this.allowClear,
+ allowClear: this.allowClear,
- dropdownCssClass: 'ajax-project-dropdown',
- });
- if (simpleFilter) return select;
- return new ProjectSelectComboButton(select);
- });
- })
+ dropdownCssClass: 'ajax-project-dropdown',
+ });
+ if (simpleFilter) return select;
+ return new ProjectSelectComboButton(select);
+ });
+};
+
+export default () =>
+ import(/* webpackChunkName: 'select2' */ 'select2/select2')
+ .then(projectSelect)
.catch(() => {});
-}
diff --git a/app/assets/javascripts/projects/tree/components/commit_pipeline_status_component.vue b/app/assets/javascripts/projects/tree/components/commit_pipeline_status_component.vue
index 12ee1ce2f0c..60fd3ed5ea7 100644
--- a/app/assets/javascripts/projects/tree/components/commit_pipeline_status_component.vue
+++ b/app/assets/javascripts/projects/tree/components/commit_pipeline_status_component.vue
@@ -21,14 +21,6 @@ export default {
type: String,
required: true,
},
- /* This prop can be used to replace some of the `render_commit_status`
- used across GitLab, this way we could use this vue component and add a
- realtime status where it makes sense
- realtime: {
- type: Boolean,
- required: false,
- default: true,
- }, */
},
data() {
return {
@@ -47,6 +39,9 @@ export default {
this.service = new CommitPipelineService(this.endpoint);
this.initPolling();
},
+ beforeDestroy() {
+ this.poll.stop();
+ },
methods: {
successCallback(res) {
const { pipelines } = res.data;
@@ -95,9 +90,6 @@ export default {
.catch(this.errorCallback);
},
},
- destroy() {
- this.poll.stop();
- },
};
</script>
<template>
diff --git a/app/assets/javascripts/ref_select_dropdown.js b/app/assets/javascripts/ref_select_dropdown.js
index 75bac035aca..2e0113271df 100644
--- a/app/assets/javascripts/ref_select_dropdown.js
+++ b/app/assets/javascripts/ref_select_dropdown.js
@@ -1,4 +1,5 @@
import $ from 'jquery';
+import '~/gl_dropdown';
class RefSelectDropdown {
constructor($dropdownButton, availableRefs) {
diff --git a/app/assets/javascripts/registry/components/app.vue b/app/assets/javascripts/registry/components/app.vue
index 346dc470a59..11b2c3b7016 100644
--- a/app/assets/javascripts/registry/components/app.vue
+++ b/app/assets/javascripts/registry/components/app.vue
@@ -2,28 +2,34 @@
import { mapGetters, mapActions } from 'vuex';
import { GlLoadingIcon, GlEmptyState } from '@gitlab/ui';
import store from '../stores';
-import clipboardButton from '../../vue_shared/components/clipboard_button.vue';
import CollapsibleContainer from './collapsible_container.vue';
+import ProjectEmptyState from './project_empty_state.vue';
+import GroupEmptyState from './group_empty_state.vue';
import { s__, sprintf } from '../../locale';
export default {
name: 'RegistryListApp',
components: {
- clipboardButton,
CollapsibleContainer,
GlEmptyState,
GlLoadingIcon,
+ ProjectEmptyState,
+ GroupEmptyState,
},
props: {
- endpoint: {
- type: String,
- required: true,
- },
characterError: {
type: Boolean,
required: false,
default: false,
},
+ containersErrorImage: {
+ type: String,
+ required: true,
+ },
+ endpoint: {
+ type: String,
+ required: true,
+ },
helpPagePath: {
type: String,
required: true,
@@ -32,14 +38,30 @@ export default {
type: String,
required: true,
},
- containersErrorImage: {
+ personalAccessTokensHelpLink: {
type: String,
- required: true,
+ required: false,
+ default: null,
+ },
+ registryHostUrlWithPort: {
+ type: String,
+ required: false,
+ default: null,
},
repositoryUrl: {
type: String,
required: true,
},
+ isGroupPage: {
+ type: Boolean,
+ default: false,
+ required: false,
+ },
+ twoFactorAuthHelpLink: {
+ type: String,
+ required: false,
+ default: null,
+ },
},
store,
computed: {
@@ -47,7 +69,7 @@ export default {
dockerConnectionErrorText() {
return sprintf(
s__(`ContainerRegistry|We are having trouble connecting to Docker, which could be due to an
- issue with your project name or path.
+ issue with your project name or path.
%{docLinkStart}More Information%{docLinkEnd}`),
{
docLinkStart: `<a href="${this.helpPagePath}#docker-connection-error" target="_blank">`,
@@ -58,8 +80,8 @@ export default {
},
introText() {
return sprintf(
- s__(`ContainerRegistry|With the Docker Container Registry integrated into GitLab, every
- project can have its own space to store its Docker images.
+ s__(`ContainerRegistry|With the Docker Container Registry integrated into GitLab, every
+ project can have its own space to store its Docker images.
%{docLinkStart}More Information%{docLinkEnd}`),
{
docLinkStart: `<a href="${this.helpPagePath}" target="_blank">`,
@@ -79,17 +101,10 @@ export default {
false,
);
},
- dockerBuildCommand() {
- // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
- return `docker build -t ${this.repositoryUrl} .`;
- },
- dockerPushCommand() {
- // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
- return `docker push ${this.repositoryUrl}`;
- },
},
created() {
this.setMainEndpoint(this.endpoint);
+ this.setIsDeleteDisabled(this.isGroupPage);
},
mounted() {
if (!this.characterError) {
@@ -97,7 +112,7 @@ export default {
}
},
methods: {
- ...mapActions(['setMainEndpoint', 'fetchRepos']),
+ ...mapActions(['setMainEndpoint', 'fetchRepos', 'setIsDeleteDisabled']),
},
};
</script>
@@ -109,7 +124,7 @@ export default {
:svg-path="containersErrorImage"
>
<template #description>
- <p v-html="dockerConnectionErrorText"></p>
+ <p class="js-character-error-text" v-html="dockerConnectionErrorText"></p>
</template>
</gl-empty-state>
@@ -120,46 +135,19 @@ export default {
<p v-html="introText"></p>
<collapsible-container v-for="item in repos" :key="item.id" :repo="item" />
</div>
-
- <gl-empty-state
- v-else
- :title="s__('ContainerRegistry|There are no container images stored for this project')"
- :svg-path="noContainersImage"
- class="container-message"
- >
- <template #description>
- <p class="js-no-container-images-text" v-html="noContainerImagesText"></p>
- <h5>{{ s__('ContainerRegistry|Quick Start') }}</h5>
- <p>
- {{
- s__(
- 'ContainerRegistry|You can add an image to this registry with the following commands:',
- )
- }}
- </p>
-
- <div class="input-group append-bottom-10">
- <input :value="dockerBuildCommand" type="text" class="form-control monospace" readonly />
- <span class="input-group-append">
- <clipboard-button
- :text="dockerBuildCommand"
- :title="s__('ContainerRegistry|Copy build command to clipboard')"
- class="input-group-text"
- />
- </span>
- </div>
-
- <div class="input-group">
- <input :value="dockerPushCommand" type="text" class="form-control monospace" readonly />
- <span class="input-group-append">
- <clipboard-button
- :text="dockerPushCommand"
- :title="s__('ContainerRegistry|Copy push command to clipboard')"
- class="input-group-text"
- />
- </span>
- </div>
- </template>
- </gl-empty-state>
+ <project-empty-state
+ v-else-if="!isGroupPage"
+ :no-containers-image="noContainersImage"
+ :help-page-path="helpPagePath"
+ :repository-url="repositoryUrl"
+ :two-factor-auth-help-link="twoFactorAuthHelpLink"
+ :personal-access-tokens-help-link="personalAccessTokensHelpLink"
+ :registry-host-url-with-port="registryHostUrlWithPort"
+ />
+ <group-empty-state
+ v-else-if="isGroupPage"
+ :no-containers-image="noContainersImage"
+ :help-page-path="helpPagePath"
+ />
</div>
</template>
diff --git a/app/assets/javascripts/registry/components/collapsible_container.vue b/app/assets/javascripts/registry/components/collapsible_container.vue
index bfb2305c48c..95f8270b5d0 100644
--- a/app/assets/javascripts/registry/components/collapsible_container.vue
+++ b/app/assets/javascripts/registry/components/collapsible_container.vue
@@ -1,6 +1,13 @@
<script>
-import { mapActions } from 'vuex';
-import { GlLoadingIcon, GlButton, GlTooltipDirective, GlModal, GlModalDirective } from '@gitlab/ui';
+import { mapActions, mapGetters } from 'vuex';
+import {
+ GlLoadingIcon,
+ GlButton,
+ GlTooltipDirective,
+ GlModal,
+ GlModalDirective,
+ GlEmptyState,
+} from '@gitlab/ui';
import createFlash from '../../flash';
import ClipboardButton from '../../vue_shared/components/clipboard_button.vue';
import Icon from '../../vue_shared/components/icon.vue';
@@ -17,6 +24,7 @@ export default {
GlButton,
Icon,
GlModal,
+ GlEmptyState,
},
directives: {
GlTooltip: GlTooltipDirective,
@@ -35,9 +43,13 @@ export default {
};
},
computed: {
+ ...mapGetters(['isDeleteDisabled']),
iconName() {
return this.isOpen ? 'angle-up' : 'angle-right';
},
+ canDeleteRepo() {
+ return this.repo.canDelete && !this.isDeleteDisabled;
+ },
},
methods: {
...mapActions(['fetchRepos', 'fetchList', 'deleteItem']),
@@ -49,7 +61,7 @@ export default {
}
},
handleDeleteRepository() {
- this.deleteItem(this.repo)
+ return this.deleteItem(this.repo)
.then(() => {
createFlash(__('This container registry has been scheduled for deletion.'), 'notice');
this.fetchRepos();
@@ -67,7 +79,8 @@ export default {
<div class="container-image">
<div class="container-image-head">
<gl-button class="js-toggle-repo btn-link align-baseline" @click="toggleRepo">
- <icon :name="iconName" /> {{ repo.name }}
+ <icon :name="iconName" />
+ {{ repo.name }}
</gl-button>
<clipboard-button
@@ -79,11 +92,13 @@ export default {
<div class="controls d-none d-sm-block float-right">
<gl-button
- v-if="repo.canDelete"
+ v-if="canDeleteRepo"
v-gl-tooltip
v-gl-modal="modalId"
:title="s__('ContainerRegistry|Remove repository')"
:aria-label="s__('ContainerRegistry|Remove repository')"
+ data-track-event="click_button"
+ data-track-label="registry_repository_delete"
class="js-remove-repo btn-inverted"
variant="danger"
>
@@ -95,11 +110,19 @@ export default {
<gl-loading-icon v-if="repo.isLoading" size="md" class="append-bottom-20" />
<div v-else-if="!repo.isLoading && isOpen" class="container-image-tags">
- <table-registry v-if="repo.list.length" :repo="repo" />
-
- <div v-else class="nothing-here-block">
- {{ s__('ContainerRegistry|No tags in Container Registry for this container image.') }}
- </div>
+ <table-registry v-if="repo.list.length" :repo="repo" :can-delete-repo="canDeleteRepo" />
+ <gl-empty-state
+ v-else
+ :title="s__('ContainerRegistry|This image has no active tags')"
+ :description="
+ s__(
+ `ContainerRegistry|The last tag related to this image was recently removed.
+ This empty image and any associated data will be automatically removed as part of the regular Garbage Collection process.
+ If you have any questions, contact your administrator.`,
+ )
+ "
+ class="mx-auto my-0"
+ />
</div>
<gl-modal :modal-id="modalId" ok-variant="danger" @ok="handleDeleteRepository">
<template v-slot:modal-title>{{ s__('ContainerRegistry|Remove repository') }}</template>
diff --git a/app/assets/javascripts/registry/components/group_empty_state.vue b/app/assets/javascripts/registry/components/group_empty_state.vue
new file mode 100644
index 00000000000..7885fd2146d
--- /dev/null
+++ b/app/assets/javascripts/registry/components/group_empty_state.vue
@@ -0,0 +1,46 @@
+<script>
+import { GlEmptyState } from '@gitlab/ui';
+import { s__, sprintf } from '~/locale';
+
+export default {
+ name: 'GroupEmptyState',
+ components: {
+ GlEmptyState,
+ },
+ props: {
+ noContainersImage: {
+ type: String,
+ required: true,
+ },
+ helpPagePath: {
+ type: String,
+ required: true,
+ },
+ },
+ computed: {
+ noContainerImagesText() {
+ return sprintf(
+ s__(
+ `ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. Push at least one Docker image in one of this group's projects in order to show up here. %{docLinkStart}More Information%{docLinkEnd}`,
+ ),
+ {
+ docLinkStart: `<a href="${this.helpPagePath}" target="_blank">`,
+ docLinkEnd: '</a>',
+ },
+ false,
+ );
+ },
+ },
+};
+</script>
+<template>
+ <gl-empty-state
+ :title="s__('ContainerRegistry|There are no container images available in this group')"
+ :svg-path="noContainersImage"
+ class="container-message"
+ >
+ <template #description>
+ <p class="js-no-container-images-text" v-html="noContainerImagesText"></p>
+ </template>
+ </gl-empty-state>
+</template>
diff --git a/app/assets/javascripts/registry/components/project_empty_state.vue b/app/assets/javascripts/registry/components/project_empty_state.vue
new file mode 100644
index 00000000000..80ef31004c8
--- /dev/null
+++ b/app/assets/javascripts/registry/components/project_empty_state.vue
@@ -0,0 +1,133 @@
+<script>
+import { GlEmptyState } from '@gitlab/ui';
+import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
+import { s__, sprintf } from '~/locale';
+
+export default {
+ name: 'ProjectEmptyState',
+ components: {
+ ClipboardButton,
+ GlEmptyState,
+ },
+ props: {
+ noContainersImage: {
+ type: String,
+ required: true,
+ },
+ repositoryUrl: {
+ type: String,
+ required: true,
+ },
+ helpPagePath: {
+ type: String,
+ required: true,
+ },
+ twoFactorAuthHelpLink: {
+ type: String,
+ required: true,
+ },
+ personalAccessTokensHelpLink: {
+ type: String,
+ required: true,
+ },
+ registryHostUrlWithPort: {
+ type: String,
+ required: true,
+ },
+ },
+ computed: {
+ dockerBuildCommand() {
+ // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
+ return `docker build -t ${this.repositoryUrl} .`;
+ },
+ dockerPushCommand() {
+ // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
+ return `docker push ${this.repositoryUrl}`;
+ },
+ dockerLoginCommand() {
+ // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
+ return `docker login ${this.registryHostUrlWithPort}`;
+ },
+ noContainerImagesText() {
+ return sprintf(
+ s__(`ContainerRegistry|With the Container Registry, every project can have its own space to
+ store its Docker images. %{docLinkStart}More Information%{docLinkEnd}`),
+ {
+ docLinkStart: `<a href="${this.helpPagePath}" target="_blank">`,
+ docLinkEnd: '</a>',
+ },
+ false,
+ );
+ },
+ notLoggedInToRegistryText() {
+ return sprintf(
+ s__(`ContainerRegistry|If you are not already logged in, you need to authenticate to
+ the Container Registry by using your GitLab username and password. If you have
+ %{twofaDocLinkStart}Two-Factor Authentication%{twofaDocLinkEnd} enabled, use a
+ %{personalAccessTokensDocLinkStart}Personal Access Token%{personalAccessTokensDocLinkEnd}
+ instead of a password.`),
+ {
+ twofaDocLinkStart: `<a href="${this.twoFactorAuthHelpLink}" target="_blank">`,
+ twofaDocLinkEnd: '</a>',
+ personalAccessTokensDocLinkStart: `<a href="${this.personalAccessTokensHelpLink}" target="_blank">`,
+ personalAccessTokensDocLinkEnd: '</a>',
+ },
+ false,
+ );
+ },
+ },
+};
+</script>
+<template>
+ <gl-empty-state
+ :title="s__('ContainerRegistry|There are no container images stored for this project')"
+ :svg-path="noContainersImage"
+ class="container-message"
+ >
+ <template #description>
+ <p class="js-no-container-images-text" v-html="noContainerImagesText"></p>
+ <h5>{{ s__('ContainerRegistry|Quick Start') }}</h5>
+ <p class="js-not-logged-in-to-registry-text" v-html="notLoggedInToRegistryText"></p>
+ <div class="input-group append-bottom-10">
+ <input :value="dockerLoginCommand" type="text" class="form-control monospace" readonly />
+ <span class="input-group-append">
+ <clipboard-button
+ :text="dockerLoginCommand"
+ :title="s__('ContainerRegistry|Copy login command')"
+ class="input-group-text"
+ />
+ </span>
+ </div>
+ <p></p>
+ <p>
+ {{
+ s__(
+ 'ContainerRegistry|You can add an image to this registry with the following commands:',
+ )
+ }}
+ </p>
+
+ <div class="input-group append-bottom-10">
+ <input :value="dockerBuildCommand" type="text" class="form-control monospace" readonly />
+ <span class="input-group-append">
+ <clipboard-button
+ :text="dockerBuildCommand"
+ :title="s__('ContainerRegistry|Copy build command')"
+ class="input-group-text"
+ />
+ </span>
+ </div>
+
+ <div class="input-group">
+ <input :value="dockerPushCommand" type="text" class="form-control monospace" readonly />
+ <span class="input-group-append">
+ <clipboard-button
+ :text="dockerPushCommand"
+ :title="s__('ContainerRegistry|Copy push command')"
+ class="input-group-text"
+ />
+ </span>
+ </div>
+ </template>
+ </gl-empty-state>
+</template>
diff --git a/app/assets/javascripts/registry/components/table_registry.vue b/app/assets/javascripts/registry/components/table_registry.vue
index e9067bc2b56..8470fbc2b59 100644
--- a/app/assets/javascripts/registry/components/table_registry.vue
+++ b/app/assets/javascripts/registry/components/table_registry.vue
@@ -1,5 +1,5 @@
<script>
-import { mapActions } from 'vuex';
+import { mapActions, mapGetters } from 'vuex';
import {
GlButton,
GlFormCheckbox,
@@ -35,9 +35,15 @@ export default {
type: Object,
required: true,
},
+ canDeleteRepo: {
+ type: Boolean,
+ default: false,
+ required: false,
+ },
},
data() {
return {
+ selectedItems: [],
itemsToBeDeleted: [],
modalId: `confirm-image-deletion-modal-${this.repo.id}`,
selectAllChecked: false,
@@ -45,16 +51,17 @@ export default {
};
},
computed: {
+ ...mapGetters(['isDeleteDisabled']),
bulkDeletePath() {
return this.repo.tagsPath ? this.repo.tagsPath.replace('?format=json', '/bulk_destroy') : '';
},
shouldRenderPagination() {
return this.repo.pagination.total > this.repo.pagination.perPage;
},
- modalTitle() {
+ modalAction() {
return n__(
- 'ContainerRegistry|Remove image',
- 'ContainerRegistry|Remove images',
+ 'ContainerRegistry|Remove tag',
+ 'ContainerRegistry|Remove tags',
this.itemsToBeDeleted.length === 0 ? 1 : this.itemsToBeDeleted.length,
);
},
@@ -67,16 +74,14 @@ export default {
setModalDescription(itemIndex = -1) {
if (itemIndex === -1) {
this.modalDescription = sprintf(
- s__(`ContainerRegistry|You are about to delete <b>%{count}</b> images. This will
- delete the images and all tags pointing to them.`),
+ s__(`ContainerRegistry|You are about to remove <b>%{count}</b> tags. Are you sure?`),
{ count: this.itemsToBeDeleted.length },
);
} else {
const { tag } = this.repo.list[itemIndex];
this.modalDescription = sprintf(
- s__(`ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will
- delete the image and all tags pointing to this image.`),
+ s__(`ContainerRegistry|You are about to remove <b>%{title}</b>. Are you sure?`),
{ title: `${this.repo.name}:${tag}` },
);
}
@@ -92,6 +97,7 @@ export default {
},
deleteSingleItem(index) {
this.setModalDescription(index);
+ this.itemsToBeDeleted = [index];
this.$refs.deleteModal.$refs.modal.$once('ok', () => {
this.removeModalEvents();
@@ -99,9 +105,10 @@ export default {
});
},
deleteMultipleItems() {
- if (this.itemsToBeDeleted.length === 1) {
+ this.itemsToBeDeleted = [...this.selectedItems];
+ if (this.selectedItems.length === 1) {
this.setModalDescription(this.itemsToBeDeleted[0]);
- } else if (this.itemsToBeDeleted.length > 1) {
+ } else if (this.selectedItems.length > 1) {
this.setModalDescription();
}
@@ -111,6 +118,7 @@ export default {
});
},
handleSingleDelete(itemToDelete) {
+ this.itemsToBeDeleted = [];
this.deleteItem(itemToDelete)
.then(() => this.fetchList({ repo: this.repo }))
.catch(() => this.showError(errorMessagesTypes.DELETE_REGISTRY));
@@ -118,6 +126,7 @@ export default {
handleMultipleDelete() {
const { itemsToBeDeleted } = this;
this.itemsToBeDeleted = [];
+ this.selectedItems = [];
if (this.bulkDeletePath) {
this.multiDeleteItems({
@@ -146,27 +155,30 @@ export default {
}
},
selectAll() {
- this.itemsToBeDeleted = this.repo.list.map((x, index) => index);
+ this.selectedItems = this.repo.list.map((x, index) => index);
this.selectAllChecked = true;
},
deselectAll() {
- this.itemsToBeDeleted = [];
+ this.selectedItems = [];
this.selectAllChecked = false;
},
- updateItemsToBeDeleted(index) {
- const delIndex = this.itemsToBeDeleted.findIndex(x => x === index);
+ updateselectedItems(index) {
+ const delIndex = this.selectedItems.findIndex(x => x === index);
if (delIndex > -1) {
- this.itemsToBeDeleted.splice(delIndex, 1);
+ this.selectedItems.splice(delIndex, 1);
this.selectAllChecked = false;
} else {
- this.itemsToBeDeleted.push(index);
+ this.selectedItems.push(index);
- if (this.itemsToBeDeleted.length === this.repo.list.length) {
+ if (this.selectedItems.length === this.repo.list.length) {
this.selectAllChecked = true;
}
}
},
+ canDeleteRow(item) {
+ return item && item.canDelete && !this.isDeleteDisabled;
+ },
},
};
</script>
@@ -177,7 +189,7 @@ export default {
<tr>
<th>
<gl-form-checkbox
- v-if="repo.canDelete"
+ v-if="canDeleteRepo"
class="js-select-all-checkbox"
:checked="selectAllChecked"
@change="onSelectAllChange"
@@ -189,17 +201,20 @@ export default {
<th>{{ s__('ContainerRegistry|Last Updated') }}</th>
<th>
<gl-button
- v-if="repo.canDelete"
+ v-if="canDeleteRepo"
v-gl-tooltip
v-gl-modal="modalId"
- :disabled="!itemsToBeDeleted || itemsToBeDeleted.length === 0"
+ :disabled="!selectedItems || selectedItems.length === 0"
class="js-delete-registry float-right"
+ data-track-event="click_button"
+ data-track-label="bulk_registry_tag_delete"
variant="danger"
- :title="s__('ContainerRegistry|Remove selected images')"
- :aria-label="s__('ContainerRegistry|Remove selected images')"
+ :title="s__('ContainerRegistry|Remove selected tags')"
+ :aria-label="s__('ContainerRegistry|Remove selected tags')"
@click="deleteMultipleItems()"
- ><icon name="remove"
- /></gl-button>
+ >
+ <icon name="remove" />
+ </gl-button>
</th>
</tr>
</thead>
@@ -207,10 +222,10 @@ export default {
<tr v-for="(item, index) in repo.list" :key="item.tag" class="registry-image-row">
<td class="check">
<gl-form-checkbox
- v-if="item.canDelete"
+ v-if="canDeleteRow(item)"
class="js-select-checkbox"
- :checked="itemsToBeDeleted && itemsToBeDeleted.includes(index)"
- @change="updateItemsToBeDeleted(index)"
+ :checked="selectedItems && selectedItems.includes(index)"
+ @change="updateselectedItems(index)"
/>
</td>
<td class="monospace">
@@ -223,9 +238,9 @@ export default {
/>
</td>
<td>
- <span v-gl-tooltip.bottom class="monospace" :title="item.revision">
- {{ item.shortRevision }}
- </span>
+ <span v-gl-tooltip.bottom class="monospace" :title="item.revision">{{
+ item.shortRevision
+ }}</span>
</td>
<td>
{{ formatSize(item.size) }}
@@ -236,17 +251,19 @@ export default {
</td>
<td>
- <span v-gl-tooltip.bottom :title="tooltipTitle(item.createdAt)">
- {{ timeFormated(item.createdAt) }}
- </span>
+ <span v-gl-tooltip.bottom :title="tooltipTitle(item.createdAt)">{{
+ timeFormated(item.createdAt)
+ }}</span>
</td>
<td class="content action-buttons">
<gl-button
- v-if="item.canDelete"
+ v-if="canDeleteRow(item)"
v-gl-modal="modalId"
- :title="s__('ContainerRegistry|Remove image')"
- :aria-label="s__('ContainerRegistry|Remove image')"
+ :title="s__('ContainerRegistry|Remove tag')"
+ :aria-label="s__('ContainerRegistry|Remove tag')"
+ data-track-event="click_button"
+ data-track-label="registry_tag_delete"
variant="danger"
class="js-delete-registry-row float-right btn-inverted btn-border-color btn-icon"
@click="deleteSingleItem(index)"
@@ -262,11 +279,12 @@ export default {
v-if="shouldRenderPagination"
:change="onPageChange"
:page-info="repo.pagination"
+ class="js-registry-pagination"
/>
<gl-modal ref="deleteModal" :modal-id="modalId" ok-variant="danger">
- <template v-slot:modal-title>{{ modalTitle }}</template>
- <template v-slot:modal-ok>{{ s__('ContainerRegistry|Remove image(s) and tags') }}</template>
+ <template v-slot:modal-title>{{ modalAction }}</template>
+ <template v-slot:modal-ok>{{ modalAction }}</template>
<p v-html="modalDescription"></p>
</gl-modal>
</div>
diff --git a/app/assets/javascripts/registry/index.js b/app/assets/javascripts/registry/index.js
index d8daec29fda..18fd360f586 100644
--- a/app/assets/javascripts/registry/index.js
+++ b/app/assets/javascripts/registry/index.js
@@ -13,23 +13,24 @@ export default () =>
data() {
const { dataset } = document.querySelector(this.$options.el);
return {
- endpoint: dataset.endpoint,
- characterError: Boolean(dataset.characterError),
- helpPagePath: dataset.helpPagePath,
- noContainersImage: dataset.noContainersImage,
- containersErrorImage: dataset.containersErrorImage,
- repositoryUrl: dataset.repositoryUrl,
+ registryData: {
+ endpoint: dataset.endpoint,
+ characterError: Boolean(dataset.characterError),
+ helpPagePath: dataset.helpPagePath,
+ noContainersImage: dataset.noContainersImage,
+ containersErrorImage: dataset.containersErrorImage,
+ repositoryUrl: dataset.repositoryUrl,
+ isGroupPage: dataset.isGroupPage,
+ personalAccessTokensHelpLink: dataset.personalAccessTokensHelpLink,
+ registryHostUrlWithPort: dataset.registryHostUrlWithPort,
+ twoFactorAuthHelpLink: dataset.twoFactorAuthHelpLink,
+ },
};
},
render(createElement) {
return createElement('registry-app', {
props: {
- endpoint: this.endpoint,
- characterError: this.characterError,
- helpPagePath: this.helpPagePath,
- noContainersImage: this.noContainersImage,
- containersErrorImage: this.containersErrorImage,
- repositoryUrl: this.repositoryUrl,
+ ...this.registryData,
},
});
},
diff --git a/app/assets/javascripts/registry/stores/actions.js b/app/assets/javascripts/registry/stores/actions.js
index a2e0130e79e..2121f518a7a 100644
--- a/app/assets/javascripts/registry/stores/actions.js
+++ b/app/assets/javascripts/registry/stores/actions.js
@@ -20,7 +20,6 @@ export const fetchRepos = ({ commit, state }) => {
export const fetchList = ({ commit }, { repo, page }) => {
commit(types.TOGGLE_REGISTRY_LIST_LOADING, repo);
-
return axios
.get(repo.tagsPath, { params: { page } })
.then(response => {
@@ -40,6 +39,7 @@ export const multiDeleteItems = (_, { path, items }) =>
axios.delete(path, { params: { ids: items } });
export const setMainEndpoint = ({ commit }, data) => commit(types.SET_MAIN_ENDPOINT, data);
+export const setIsDeleteDisabled = ({ commit }, data) => commit(types.SET_IS_DELETE_DISABLED, data);
export const toggleLoading = ({ commit }) => commit(types.TOGGLE_MAIN_LOADING);
// prevent babel-plugin-rewire from generating an invalid default during karma tests
diff --git a/app/assets/javascripts/registry/stores/getters.js b/app/assets/javascripts/registry/stores/getters.js
index f4923512578..ac90bde1b2a 100644
--- a/app/assets/javascripts/registry/stores/getters.js
+++ b/app/assets/javascripts/registry/stores/getters.js
@@ -1,5 +1,6 @@
export const isLoading = state => state.isLoading;
export const repos = state => state.repos;
+export const isDeleteDisabled = state => state.isDeleteDisabled;
// prevent babel-plugin-rewire from generating an invalid default during karma tests
export default () => {};
diff --git a/app/assets/javascripts/registry/stores/mutation_types.js b/app/assets/javascripts/registry/stores/mutation_types.js
index 2c69bf11807..6740bfede1a 100644
--- a/app/assets/javascripts/registry/stores/mutation_types.js
+++ b/app/assets/javascripts/registry/stores/mutation_types.js
@@ -1,4 +1,5 @@
export const SET_MAIN_ENDPOINT = 'SET_MAIN_ENDPOINT';
+export const SET_IS_DELETE_DISABLED = 'SET_IS_DELETE_DISABLED';
export const SET_REPOS_LIST = 'SET_REPOS_LIST';
export const TOGGLE_MAIN_LOADING = 'TOGGLE_MAIN_LOADING';
diff --git a/app/assets/javascripts/registry/stores/mutations.js b/app/assets/javascripts/registry/stores/mutations.js
index 8ace6657ad1..ea5925247d1 100644
--- a/app/assets/javascripts/registry/stores/mutations.js
+++ b/app/assets/javascripts/registry/stores/mutations.js
@@ -6,6 +6,10 @@ export default {
Object.assign(state, { endpoint });
},
+ [types.SET_IS_DELETE_DISABLED](state, isDeleteDisabled) {
+ Object.assign(state, { isDeleteDisabled });
+ },
+
[types.SET_REPOS_LIST](state, list) {
Object.assign(state, {
repos: list.map(el => ({
@@ -17,6 +21,7 @@ export default {
location: el.location,
name: el.path,
tagsPath: el.tags_path,
+ projectId: el.project_id,
})),
});
},
diff --git a/app/assets/javascripts/registry/stores/state.js b/app/assets/javascripts/registry/stores/state.js
index feeac10cbe1..724c64b4994 100644
--- a/app/assets/javascripts/registry/stores/state.js
+++ b/app/assets/javascripts/registry/stores/state.js
@@ -1,6 +1,7 @@
export default () => ({
isLoading: false,
endpoint: '', // initial endpoint to fetch the repos list
+ isDeleteDisabled: false, // controls the delete buttons in the registry
/**
* Each object in `repos` has the following strucure:
* {
diff --git a/app/assets/javascripts/releases/components/milestone_list.vue b/app/assets/javascripts/releases/components/milestone_list.vue
deleted file mode 100644
index 53416f0ab4d..00000000000
--- a/app/assets/javascripts/releases/components/milestone_list.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<script>
-import { GlLink, GlTooltipDirective } from '@gitlab/ui';
-import Icon from '~/vue_shared/components/icon.vue';
-import { s__ } from '~/locale';
-
-export default {
- name: 'MilestoneList',
- components: {
- GlLink,
- Icon,
- },
- directives: {
- GlTooltip: GlTooltipDirective,
- },
- props: {
- milestones: {
- type: Array,
- required: true,
- },
- },
- computed: {
- labelText() {
- return this.milestones.length === 1 ? s__('Milestone') : s__('Milestones');
- },
- },
-};
-</script>
-<template>
- <div>
- <icon name="flag" class="align-middle" /> <span class="js-label-text">{{ labelText }}</span>
- <template v-for="(milestone, index) in milestones">
- <gl-link
- :key="milestone.id"
- v-gl-tooltip
- :title="milestone.description"
- :href="milestone.web_url"
- >
- {{ milestone.title }}
- </gl-link>
- <template v-if="index !== milestones.length - 1">
- &bull;
- </template>
- </template>
- </div>
-</template>
diff --git a/app/assets/javascripts/releases/components/release_block.vue b/app/assets/javascripts/releases/components/release_block.vue
deleted file mode 100644
index 2dacd8549ad..00000000000
--- a/app/assets/javascripts/releases/components/release_block.vue
+++ /dev/null
@@ -1,162 +0,0 @@
-<script>
-/* eslint-disable @gitlab/vue-i18n/no-bare-strings */
-import _ from 'underscore';
-import { GlTooltipDirective, GlLink, GlBadge } from '@gitlab/ui';
-import Icon from '~/vue_shared/components/icon.vue';
-import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue';
-import timeagoMixin from '~/vue_shared/mixins/timeago';
-import MilestoneList from './milestone_list.vue';
-import { __, sprintf } from '../../locale';
-
-export default {
- name: 'ReleaseBlock',
- components: {
- GlLink,
- GlBadge,
- Icon,
- UserAvatarLink,
- MilestoneList,
- },
- directives: {
- GlTooltip: GlTooltipDirective,
- },
- mixins: [timeagoMixin],
- props: {
- release: {
- type: Object,
- required: true,
- default: () => ({}),
- },
- },
- computed: {
- releasedTimeAgo() {
- return sprintf(__('released %{time}'), {
- time: this.timeFormated(this.release.released_at),
- });
- },
- userImageAltDescription() {
- return this.author && this.author.username
- ? sprintf(__("%{username}'s avatar"), { username: this.author.username })
- : null;
- },
- commit() {
- return this.release.commit || {};
- },
- assets() {
- return this.release.assets || {};
- },
- author() {
- return this.release.author || {};
- },
- hasAuthor() {
- return !_.isEmpty(this.author);
- },
- milestones() {
- // At the moment, a release can only be associated to
- // one milestone. This will be expanded to be many-to-many
- // in the near future, so we pass the milestone as an
- // array here in anticipation of this change.
- return [this.release.milestone];
- },
- shouldRenderMilestones() {
- // Similar to the `milestones` computed above,
- // this check will need to be updated once
- // the API begins sending an array of milestones
- // instead of just a single object.
- return Boolean(this.release.milestone);
- },
- },
-};
-</script>
-<template>
- <div :id="release.tag_name" class="card">
- <div class="card-body">
- <h2 class="card-title mt-0">
- {{ release.name }}
- <gl-badge v-if="release.upcoming_release" variant="warning" class="align-middle">{{
- __('Upcoming Release')
- }}</gl-badge>
- </h2>
-
- <div class="card-subtitle d-flex flex-wrap text-secondary">
- <div class="append-right-8">
- <icon name="commit" class="align-middle" />
- <span v-gl-tooltip.bottom :title="commit.title">{{ commit.short_id }}</span>
- </div>
-
- <div class="append-right-8">
- <icon name="tag" class="align-middle" />
- <span v-gl-tooltip.bottom :title="__('Tag')">{{ release.tag_name }}</span>
- </div>
-
- <milestone-list
- v-if="shouldRenderMilestones"
- class="append-right-4 js-milestone-list"
- :milestones="milestones"
- />
-
- <div class="append-right-4">
- &bull;
- <span v-gl-tooltip.bottom :title="tooltipTitle(release.released_at)">
- {{ releasedTimeAgo }}
- </span>
- </div>
-
- <div v-if="hasAuthor" class="d-flex">
- by
- <user-avatar-link
- class="prepend-left-4"
- :link-href="author.path"
- :img-src="author.avatar_url"
- :img-alt="userImageAltDescription"
- :tooltip-text="author.username"
- />
- </div>
- </div>
-
- <div
- v-if="assets.links.length || (assets.sources && assets.sources.length)"
- class="card-text prepend-top-default"
- >
- <b>
- {{ __('Assets') }}
- <span class="js-assets-count badge badge-pill">{{ assets.count }}</span>
- </b>
-
- <ul v-if="assets.links.length" class="pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list">
- <li v-for="link in assets.links" :key="link.name" class="append-bottom-8">
- <gl-link v-gl-tooltip.bottom :title="__('Download asset')" :href="link.url">
- <icon name="package" class="align-middle append-right-4 align-text-bottom" />
- {{ link.name }}
- <span v-if="link.external">{{ __('(external source)') }}</span>
- </gl-link>
- </li>
- </ul>
-
- <div v-if="assets.sources && assets.sources.length" class="dropdown">
- <button
- type="button"
- class="btn btn-link"
- data-toggle="dropdown"
- aria-haspopup="true"
- aria-expanded="false"
- >
- <icon name="doc-code" class="align-top append-right-4" />
- {{ __('Source code') }}
- <icon name="arrow-down" />
- </button>
-
- <div class="js-sources-dropdown dropdown-menu">
- <li v-for="asset in assets.sources" :key="asset.url">
- <gl-link :href="asset.url">{{ __('Download') }} {{ asset.format }}</gl-link>
- </li>
- </div>
- </div>
- </div>
-
- <div class="card-text prepend-top-default">
- <div v-html="release.description_html"></div>
- </div>
- </div>
- </div>
-</template>
diff --git a/app/assets/javascripts/releases/detail/components/app.vue b/app/assets/javascripts/releases/detail/components/app.vue
new file mode 100644
index 00000000000..54a441de886
--- /dev/null
+++ b/app/assets/javascripts/releases/detail/components/app.vue
@@ -0,0 +1,156 @@
+<script>
+import { mapState, mapActions } from 'vuex';
+import { GlButton, GlFormInput, GlFormGroup } from '@gitlab/ui';
+import { __, sprintf } from '~/locale';
+import MarkdownField from '~/vue_shared/components/markdown/field.vue';
+import autofocusonshow from '~/vue_shared/directives/autofocusonshow';
+
+export default {
+ name: 'ReleaseDetailApp',
+ components: {
+ GlFormInput,
+ GlFormGroup,
+ GlButton,
+ MarkdownField,
+ },
+ directives: {
+ autofocusonshow,
+ },
+ computed: {
+ ...mapState([
+ 'isFetchingRelease',
+ 'fetchError',
+ 'markdownDocsPath',
+ 'markdownPreviewPath',
+ 'releasesPagePath',
+ ]),
+ showForm() {
+ return !this.isFetchingRelease && !this.fetchError;
+ },
+ subtitleText() {
+ return sprintf(
+ __(
+ 'Releases are based on Git tags. We recommend naming tags that fit within semantic versioning, for example %{codeStart}v1.0%{codeEnd}, %{codeStart}v2.0-pre%{codeEnd}.',
+ ),
+ {
+ codeStart: '<code>',
+ codeEnd: '</code>',
+ },
+ false,
+ );
+ },
+ tagName() {
+ return this.$store.state.release.tagName;
+ },
+ releaseTitle: {
+ get() {
+ return this.$store.state.release.name;
+ },
+ set(title) {
+ this.updateReleaseTitle(title);
+ },
+ },
+ releaseNotes: {
+ get() {
+ return this.$store.state.release.description;
+ },
+ set(notes) {
+ this.updateReleaseNotes(notes);
+ },
+ },
+ },
+ created() {
+ this.fetchRelease();
+ },
+ methods: {
+ ...mapActions([
+ 'fetchRelease',
+ 'updateRelease',
+ 'updateReleaseTitle',
+ 'updateReleaseNotes',
+ 'navigateToReleasesPage',
+ ]),
+ },
+};
+</script>
+<template>
+ <div class="d-flex flex-column">
+ <p class="pt-3 js-subtitle-text" v-html="subtitleText"></p>
+ <form v-if="showForm" @submit.prevent="updateRelease()">
+ <div class="row">
+ <gl-form-group class="col-md-6 col-lg-5 col-xl-4">
+ <label for="git-ref">{{ __('Tag name') }}</label>
+ <gl-form-input
+ id="git-ref"
+ v-model="tagName"
+ type="text"
+ class="form-control"
+ aria-describedby="tag-name-help"
+ disabled
+ />
+ <div id="tag-name-help" class="form-text text-muted">
+ {{ __('Choose an existing tag, or create a new one') }}
+ </div>
+ </gl-form-group>
+ </div>
+ <gl-form-group>
+ <label for="release-title">{{ __('Release title') }}</label>
+ <gl-form-input
+ id="release-title"
+ ref="releaseTitleInput"
+ v-model="releaseTitle"
+ v-autofocusonshow
+ autofocus
+ type="text"
+ class="form-control"
+ />
+ </gl-form-group>
+ <gl-form-group>
+ <label for="release-notes">{{ __('Release notes') }}</label>
+ <div class="bordered-box pr-3 pl-3">
+ <markdown-field
+ :can-attach-file="true"
+ :markdown-preview-path="markdownPreviewPath"
+ :markdown-docs-path="markdownDocsPath"
+ :add-spacing-classes="false"
+ class="prepend-top-10 append-bottom-10"
+ >
+ <textarea
+ id="release-notes"
+ slot="textarea"
+ v-model="releaseNotes"
+ class="note-textarea js-gfm-input js-autosize markdown-area"
+ dir="auto"
+ data-supports-quick-actions="false"
+ :aria-label="__('Release notes')"
+ :placeholder="__('Write your release notes or drag your files here…')"
+ @keydown.meta.enter="updateRelease()"
+ @keydown.ctrl.enter="updateRelease()"
+ >
+ </textarea>
+ </markdown-field>
+ </div>
+ </gl-form-group>
+
+ <div class="d-flex pt-3">
+ <gl-button
+ class="mr-auto js-submit-button"
+ variant="success"
+ type="submit"
+ :aria-label="__('Save changes')"
+ >
+ {{ __('Save changes') }}
+ </gl-button>
+ <gl-button
+ class="js-cancel-button"
+ variant="default"
+ type="button"
+ :aria-label="__('Cancel')"
+ @click="navigateToReleasesPage()"
+ >
+ {{ __('Cancel') }}
+ </gl-button>
+ </div>
+ </form>
+ </div>
+</template>
diff --git a/app/assets/javascripts/releases/detail/index.js b/app/assets/javascripts/releases/detail/index.js
new file mode 100644
index 00000000000..3da971e6d90
--- /dev/null
+++ b/app/assets/javascripts/releases/detail/index.js
@@ -0,0 +1,19 @@
+import Vue from 'vue';
+import ReleaseDetailApp from './components/app.vue';
+import createStore from './store';
+
+export default () => {
+ const el = document.getElementById('js-edit-release-page');
+
+ const store = createStore(el.dataset);
+ store.dispatch('setInitialState', el.dataset);
+
+ return new Vue({
+ el,
+ store,
+ components: { ReleaseDetailApp },
+ render(createElement) {
+ return createElement('release-detail-app');
+ },
+ });
+};
diff --git a/app/assets/javascripts/releases/detail/store/actions.js b/app/assets/javascripts/releases/detail/store/actions.js
new file mode 100644
index 00000000000..c9749582f5c
--- /dev/null
+++ b/app/assets/javascripts/releases/detail/store/actions.js
@@ -0,0 +1,62 @@
+import * as types from './mutation_types';
+import api from '~/api';
+import createFlash from '~/flash';
+import { s__ } from '~/locale';
+import { redirectTo } from '~/lib/utils/url_utility';
+import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
+
+export const setInitialState = ({ commit }, initialState) =>
+ commit(types.SET_INITIAL_STATE, initialState);
+
+export const requestRelease = ({ commit }) => commit(types.REQUEST_RELEASE);
+export const receiveReleaseSuccess = ({ commit }, data) =>
+ commit(types.RECEIVE_RELEASE_SUCCESS, data);
+export const receiveReleaseError = ({ commit }, error) => {
+ commit(types.RECEIVE_RELEASE_ERROR, error);
+ createFlash(s__('Release|Something went wrong while getting the release details'));
+};
+
+export const fetchRelease = ({ dispatch, state }) => {
+ dispatch('requestRelease');
+
+ return api
+ .release(state.projectId, state.tagName)
+ .then(({ data: release }) => {
+ const camelCasedRelease = convertObjectPropsToCamelCase(release, { deep: true });
+ dispatch('receiveReleaseSuccess', camelCasedRelease);
+ })
+ .catch(error => {
+ dispatch('receiveReleaseError', error);
+ });
+};
+
+export const updateReleaseTitle = ({ commit }, title) => commit(types.UPDATE_RELEASE_TITLE, title);
+export const updateReleaseNotes = ({ commit }, notes) => commit(types.UPDATE_RELEASE_NOTES, notes);
+
+export const requestUpdateRelease = ({ commit }) => commit(types.REQUEST_UPDATE_RELEASE);
+export const receiveUpdateReleaseSuccess = ({ commit, dispatch }) => {
+ commit(types.RECEIVE_UPDATE_RELEASE_SUCCESS);
+ dispatch('navigateToReleasesPage');
+};
+export const receiveUpdateReleaseError = ({ commit }, error) => {
+ commit(types.RECEIVE_UPDATE_RELEASE_ERROR, error);
+ createFlash(s__('Release|Something went wrong while saving the release details'));
+};
+
+export const updateRelease = ({ dispatch, state }) => {
+ dispatch('requestUpdateRelease');
+
+ return api
+ .updateRelease(state.projectId, state.tagName, {
+ name: state.release.name,
+ description: state.release.description,
+ })
+ .then(() => dispatch('receiveUpdateReleaseSuccess'))
+ .catch(error => {
+ dispatch('receiveUpdateReleaseError', error);
+ });
+};
+
+export const navigateToReleasesPage = ({ state }) => {
+ redirectTo(state.releasesPagePath);
+};
diff --git a/app/assets/javascripts/releases/detail/store/index.js b/app/assets/javascripts/releases/detail/store/index.js
new file mode 100644
index 00000000000..e8623a49356
--- /dev/null
+++ b/app/assets/javascripts/releases/detail/store/index.js
@@ -0,0 +1,14 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import * as actions from './actions';
+import mutations from './mutations';
+import state from './state';
+
+Vue.use(Vuex);
+
+export default () =>
+ new Vuex.Store({
+ actions,
+ mutations,
+ state,
+ });
diff --git a/app/assets/javascripts/releases/detail/store/mutation_types.js b/app/assets/javascripts/releases/detail/store/mutation_types.js
new file mode 100644
index 00000000000..75e1d78a645
--- /dev/null
+++ b/app/assets/javascripts/releases/detail/store/mutation_types.js
@@ -0,0 +1,12 @@
+export const SET_INITIAL_STATE = 'SET_INITIAL_STATE';
+
+export const REQUEST_RELEASE = 'REQUEST_RELEASE';
+export const RECEIVE_RELEASE_SUCCESS = 'RECEIVE_RELEASE_SUCCESS';
+export const RECEIVE_RELEASE_ERROR = 'RECEIVE_RELEASE_ERROR';
+
+export const UPDATE_RELEASE_TITLE = 'UPDATE_RELEASE_TITLE';
+export const UPDATE_RELEASE_NOTES = 'UPDATE_RELEASE_NOTES';
+
+export const REQUEST_UPDATE_RELEASE = 'REQUEST_UPDATE_RELEASE';
+export const RECEIVE_UPDATE_RELEASE_SUCCESS = 'RECEIVE_UPDATE_RELEASE_SUCCESS';
+export const RECEIVE_UPDATE_RELEASE_ERROR = 'RECEIVE_UPDATE_RELEASE_ERROR';
diff --git a/app/assets/javascripts/releases/detail/store/mutations.js b/app/assets/javascripts/releases/detail/store/mutations.js
new file mode 100644
index 00000000000..d739978d755
--- /dev/null
+++ b/app/assets/javascripts/releases/detail/store/mutations.js
@@ -0,0 +1,42 @@
+import * as types from './mutation_types';
+
+export default {
+ [types.SET_INITIAL_STATE](state, initialState) {
+ Object.keys(state).forEach(key => {
+ state[key] = initialState[key];
+ });
+ },
+
+ [types.REQUEST_RELEASE](state) {
+ state.isFetchingRelease = true;
+ },
+ [types.RECEIVE_RELEASE_SUCCESS](state, data) {
+ state.fetchError = undefined;
+ state.isFetchingRelease = false;
+ state.release = data;
+ },
+ [types.RECEIVE_RELEASE_ERROR](state, error) {
+ state.fetchError = error;
+ state.isFetchingRelease = false;
+ state.release = undefined;
+ },
+
+ [types.UPDATE_RELEASE_TITLE](state, title) {
+ state.release.name = title;
+ },
+ [types.UPDATE_RELEASE_NOTES](state, notes) {
+ state.release.description = notes;
+ },
+
+ [types.REQUEST_UPDATE_RELEASE](state) {
+ state.isUpdatingRelease = true;
+ },
+ [types.RECEIVE_UPDATE_RELEASE_SUCCESS](state) {
+ state.updateError = undefined;
+ state.isUpdatingRelease = false;
+ },
+ [types.RECEIVE_UPDATE_RELEASE_ERROR](state, error) {
+ state.updateError = error;
+ state.isUpdatingRelease = false;
+ },
+};
diff --git a/app/assets/javascripts/releases/detail/store/state.js b/app/assets/javascripts/releases/detail/store/state.js
new file mode 100644
index 00000000000..ff98e2bed78
--- /dev/null
+++ b/app/assets/javascripts/releases/detail/store/state.js
@@ -0,0 +1,15 @@
+export default () => ({
+ projectId: null,
+ tagName: null,
+ releasesPagePath: null,
+ markdownDocsPath: null,
+ markdownPreviewPath: null,
+
+ release: null,
+
+ isFetchingRelease: false,
+ fetchError: null,
+
+ isUpdatingRelease: false,
+ updateError: null,
+});
diff --git a/app/assets/javascripts/releases/components/app.vue b/app/assets/javascripts/releases/list/components/app.vue
index 5a06c4fec58..5a06c4fec58 100644
--- a/app/assets/javascripts/releases/components/app.vue
+++ b/app/assets/javascripts/releases/list/components/app.vue
diff --git a/app/assets/javascripts/releases/list/components/release_block.vue b/app/assets/javascripts/releases/list/components/release_block.vue
new file mode 100644
index 00000000000..8d4b32e9dc0
--- /dev/null
+++ b/app/assets/javascripts/releases/list/components/release_block.vue
@@ -0,0 +1,220 @@
+<script>
+/* eslint-disable @gitlab/vue-i18n/no-bare-strings */
+import _ from 'underscore';
+import { GlTooltipDirective, GlLink, GlBadge, GlButton } from '@gitlab/ui';
+import Icon from '~/vue_shared/components/icon.vue';
+import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue';
+import timeagoMixin from '~/vue_shared/mixins/timeago';
+import { __, n__, sprintf } from '~/locale';
+import { slugify } from '~/lib/utils/text_utility';
+import { getLocationHash } from '~/lib/utils/url_utility';
+import { scrollToElement } from '~/lib/utils/common_utils';
+import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
+
+export default {
+ name: 'ReleaseBlock',
+ components: {
+ GlLink,
+ GlBadge,
+ GlButton,
+ Icon,
+ UserAvatarLink,
+ },
+ directives: {
+ GlTooltip: GlTooltipDirective,
+ },
+ mixins: [timeagoMixin, glFeatureFlagsMixin()],
+ props: {
+ release: {
+ type: Object,
+ required: true,
+ default: () => ({}),
+ },
+ },
+ data() {
+ return {
+ isHighlighted: false,
+ };
+ },
+ computed: {
+ id() {
+ return slugify(this.release.tag_name);
+ },
+ releasedTimeAgo() {
+ return sprintf(__('released %{time}'), {
+ time: this.timeFormated(this.release.released_at),
+ });
+ },
+ userImageAltDescription() {
+ return this.author && this.author.username
+ ? sprintf(__("%{username}'s avatar"), { username: this.author.username })
+ : null;
+ },
+ commit() {
+ return this.release.commit || {};
+ },
+ commitUrl() {
+ return this.release.commit_path;
+ },
+ tagUrl() {
+ return this.release.tag_path;
+ },
+ assets() {
+ return this.release.assets || {};
+ },
+ author() {
+ return this.release.author || {};
+ },
+ hasAuthor() {
+ return !_.isEmpty(this.author);
+ },
+ shouldRenderMilestones() {
+ return !_.isEmpty(this.release.milestones);
+ },
+ labelText() {
+ return n__('Milestone', 'Milestones', this.release.milestones.length);
+ },
+ shouldShowEditButton() {
+ return Boolean(
+ this.glFeatures.releaseEditPage && this.release._links && this.release._links.edit,
+ );
+ },
+ },
+ mounted() {
+ const hash = getLocationHash();
+ if (hash && slugify(hash) === this.id) {
+ this.isHighlighted = true;
+ setTimeout(() => {
+ this.isHighlighted = false;
+ }, 2000);
+
+ scrollToElement(this.$el);
+ }
+ },
+};
+</script>
+<template>
+ <div :id="id" :class="{ 'bg-line-target-blue': isHighlighted }" class="card release-block">
+ <div class="card-body">
+ <div class="d-flex align-items-start">
+ <h2 class="card-title mt-0 mr-auto">
+ {{ release.name }}
+ <gl-badge v-if="release.upcoming_release" variant="warning" class="align-middle">{{
+ __('Upcoming Release')
+ }}</gl-badge>
+ </h2>
+ <gl-link
+ v-if="shouldShowEditButton"
+ v-gl-tooltip
+ class="btn btn-default js-edit-button ml-2"
+ :title="__('Edit this release')"
+ :href="release._links.edit"
+ >
+ <icon name="pencil" />
+ </gl-link>
+ </div>
+
+ <div class="card-subtitle d-flex flex-wrap text-secondary">
+ <div class="append-right-8">
+ <icon name="commit" class="align-middle" />
+ <gl-link v-if="commitUrl" v-gl-tooltip.bottom :title="commit.title" :href="commitUrl">
+ {{ commit.short_id }}
+ </gl-link>
+ <span v-else v-gl-tooltip.bottom :title="commit.title">{{ commit.short_id }}</span>
+ </div>
+
+ <div class="append-right-8">
+ <icon name="tag" class="align-middle" />
+ <gl-link v-if="tagUrl" v-gl-tooltip.bottom :title="__('Tag')" :href="tagUrl">
+ {{ release.tag_name }}
+ </gl-link>
+ <span v-else v-gl-tooltip.bottom :title="__('Tag')">{{ release.tag_name }}</span>
+ </div>
+
+ <template v-if="shouldRenderMilestones">
+ <div class="js-milestone-list-label">
+ <icon name="flag" class="align-middle" />
+ <span class="js-label-text">{{ labelText }}</span>
+ </div>
+
+ <template v-for="(milestone, index) in release.milestones">
+ <gl-link
+ :key="milestone.id"
+ v-gl-tooltip
+ :title="milestone.description"
+ :href="milestone.web_url"
+ class="append-right-4 prepend-left-4 js-milestone-link"
+ >
+ {{ milestone.title }}
+ </gl-link>
+ <template v-if="index !== release.milestones.length - 1">
+ &bull;
+ </template>
+ </template>
+ </template>
+
+ <div class="append-right-4">
+ &bull;
+ <span v-gl-tooltip.bottom :title="tooltipTitle(release.released_at)">
+ {{ releasedTimeAgo }}
+ </span>
+ </div>
+
+ <div v-if="hasAuthor" class="d-flex">
+ by
+ <user-avatar-link
+ class="prepend-left-4"
+ :link-href="author.path"
+ :img-src="author.avatar_url"
+ :img-alt="userImageAltDescription"
+ :tooltip-text="author.username"
+ />
+ </div>
+ </div>
+
+ <div
+ v-if="assets.links.length || (assets.sources && assets.sources.length)"
+ class="card-text prepend-top-default"
+ >
+ <b>
+ {{ __('Assets') }}
+ <span class="js-assets-count badge badge-pill">{{ assets.count }}</span>
+ </b>
+
+ <ul v-if="assets.links.length" class="pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list">
+ <li v-for="link in assets.links" :key="link.name" class="append-bottom-8">
+ <gl-link v-gl-tooltip.bottom :title="__('Download asset')" :href="link.url">
+ <icon name="package" class="align-middle append-right-4 align-text-bottom" />
+ {{ link.name }}
+ <span v-if="link.external">{{ __('(external source)') }}</span>
+ </gl-link>
+ </li>
+ </ul>
+
+ <div v-if="assets.sources && assets.sources.length" class="dropdown">
+ <button
+ type="button"
+ class="btn btn-link"
+ data-toggle="dropdown"
+ aria-haspopup="true"
+ aria-expanded="false"
+ >
+ <icon name="doc-code" class="align-top append-right-4" />
+ {{ __('Source code') }}
+ <icon name="arrow-down" />
+ </button>
+
+ <div class="js-sources-dropdown dropdown-menu">
+ <li v-for="asset in assets.sources" :key="asset.url">
+ <gl-link :href="asset.url">{{ __('Download') }} {{ asset.format }}</gl-link>
+ </li>
+ </div>
+ </div>
+ </div>
+
+ <div class="card-text prepend-top-default">
+ <div v-html="release.description_html"></div>
+ </div>
+ </div>
+ </div>
+</template>
diff --git a/app/assets/javascripts/releases/index.js b/app/assets/javascripts/releases/list/index.js
index adbed3cb8e2..adbed3cb8e2 100644
--- a/app/assets/javascripts/releases/index.js
+++ b/app/assets/javascripts/releases/list/index.js
diff --git a/app/assets/javascripts/releases/store/actions.js b/app/assets/javascripts/releases/list/store/actions.js
index e0a922d5ef6..e0a922d5ef6 100644
--- a/app/assets/javascripts/releases/store/actions.js
+++ b/app/assets/javascripts/releases/list/store/actions.js
diff --git a/app/assets/javascripts/releases/store/index.js b/app/assets/javascripts/releases/list/store/index.js
index 968b94f0e0d..968b94f0e0d 100644
--- a/app/assets/javascripts/releases/store/index.js
+++ b/app/assets/javascripts/releases/list/store/index.js
diff --git a/app/assets/javascripts/releases/store/mutation_types.js b/app/assets/javascripts/releases/list/store/mutation_types.js
index a74bf15c515..a74bf15c515 100644
--- a/app/assets/javascripts/releases/store/mutation_types.js
+++ b/app/assets/javascripts/releases/list/store/mutation_types.js
diff --git a/app/assets/javascripts/releases/store/mutations.js b/app/assets/javascripts/releases/list/store/mutations.js
index b97dc6cb0ab..b97dc6cb0ab 100644
--- a/app/assets/javascripts/releases/store/mutations.js
+++ b/app/assets/javascripts/releases/list/store/mutations.js
diff --git a/app/assets/javascripts/releases/store/state.js b/app/assets/javascripts/releases/list/store/state.js
index bf25e651c99..bf25e651c99 100644
--- a/app/assets/javascripts/releases/store/state.js
+++ b/app/assets/javascripts/releases/list/store/state.js
diff --git a/app/assets/javascripts/reports/components/modal.vue b/app/assets/javascripts/reports/components/modal.vue
index cb9c1642608..6019af2dfe0 100644
--- a/app/assets/javascripts/reports/components/modal.vue
+++ b/app/assets/javascripts/reports/components/modal.vue
@@ -1,13 +1,13 @@
<script>
// import { sprintf, __ } from '~/locale';
-import Modal from '~/vue_shared/components/gl_modal.vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
import LoadingButton from '~/vue_shared/components/loading_button.vue';
import CodeBlock from '~/vue_shared/components/code_block.vue';
import { fieldTypes } from '../constants';
export default {
components: {
- Modal,
+ Modal: DeprecatedModal2,
LoadingButton,
CodeBlock,
},
diff --git a/app/assets/javascripts/reports/components/report_section.vue b/app/assets/javascripts/reports/components/report_section.vue
index 24612c8681a..45c890769a0 100644
--- a/app/assets/javascripts/reports/components/report_section.vue
+++ b/app/assets/javascripts/reports/components/report_section.vue
@@ -179,7 +179,7 @@ export default {
<button
v-if="isCollapsible"
type="button"
- class="js-collapse-btn btn float-right btn-sm qa-expand-report-button"
+ class="js-collapse-btn btn float-right btn-sm align-self-start qa-expand-report-button"
@click="toggleCollapsed"
>
{{ collapseText }}
diff --git a/app/assets/javascripts/reports/store/utils.js b/app/assets/javascripts/reports/store/utils.js
index 10560d0ae8e..7381f038eaf 100644
--- a/app/assets/javascripts/reports/store/utils.js
+++ b/app/assets/javascripts/reports/store/utils.js
@@ -11,7 +11,7 @@ const textBuilder = results => {
const { failed, resolved, total } = results;
const failedString = failed
- ? n__('%d failed test result', '%d failed test results', failed)
+ ? n__('%d failed/error test result', '%d failed/error test results', failed)
: null;
const resolvedString = resolved
? n__('%d fixed test result', '%d fixed test results', resolved)
diff --git a/app/assets/javascripts/repository/components/last_commit.vue b/app/assets/javascripts/repository/components/last_commit.vue
index e2060d4aeec..19a2db2db25 100644
--- a/app/assets/javascripts/repository/components/last_commit.vue
+++ b/app/assets/javascripts/repository/components/last_commit.vue
@@ -1,5 +1,4 @@
<script>
-/* eslint-disable @gitlab/vue-i18n/no-bare-strings */
import { GlTooltipDirective, GlLink, GlButton, GlLoadingIcon } from '@gitlab/ui';
import { sprintf, s__ } from '~/locale';
import Icon from '../../vue_shared/components/icon.vue';
@@ -113,7 +112,7 @@ export default {
>
{{ commit.author.name }}
</gl-link>
- authored
+ {{ s__('LastCommit|authored') }}
<timeago-tooltip :time="commit.authoredDate" tooltip-placement="bottom" />
</div>
<pre
@@ -125,6 +124,7 @@ export default {
</pre>
</div>
<div class="commit-actions flex-row">
+ <div v-if="commit.signatureHtml" v-html="commit.signatureHtml"></div>
<gl-link
v-if="commit.latestPipeline"
v-gl-tooltip
@@ -144,7 +144,7 @@ export default {
</div>
<clipboard-button
:text="commit.sha"
- :title="__('Copy commit SHA to clipboard')"
+ :title="__('Copy commit SHA')"
tooltip-placement="bottom"
/>
</div>
diff --git a/app/assets/javascripts/repository/queries/pathLastCommit.query.graphql b/app/assets/javascripts/repository/queries/pathLastCommit.query.graphql
index 3bdfd979fa4..71c1bf12749 100644
--- a/app/assets/javascripts/repository/queries/pathLastCommit.query.graphql
+++ b/app/assets/javascripts/repository/queries/pathLastCommit.query.graphql
@@ -13,6 +13,7 @@ query pathLastCommit($projectPath: ID!, $path: String, $ref: String!) {
avatarUrl
webUrl
}
+ signatureHtml
latestPipeline {
detailedStatus {
detailsPath
diff --git a/app/assets/javascripts/right_sidebar.js b/app/assets/javascripts/right_sidebar.js
index 0cc7a22325b..87454ee056f 100644
--- a/app/assets/javascripts/right_sidebar.js
+++ b/app/assets/javascripts/right_sidebar.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, consistent-return, one-var, prefer-template, no-else-return, no-param-reassign */
+/* eslint-disable func-names, no-var, consistent-return, one-var, no-else-return, no-param-reassign */
import $ from 'jquery';
import _ from 'underscore';
@@ -247,7 +247,7 @@ Sidebar.prototype.isOpen = function() {
};
Sidebar.prototype.getBlock = function(name) {
- return this.sidebar.find('.block.' + name);
+ return this.sidebar.find(`.block.${name}`);
};
export default Sidebar;
diff --git a/app/assets/javascripts/search_autocomplete.js b/app/assets/javascripts/search_autocomplete.js
index 2f37dcec197..f6722ff7bca 100644
--- a/app/assets/javascripts/search_autocomplete.js
+++ b/app/assets/javascripts/search_autocomplete.js
@@ -1,4 +1,4 @@
-/* eslint-disable no-return-assign, one-var, no-var, consistent-return, prefer-template, class-methods-use-this, no-lonely-if, vars-on-top */
+/* eslint-disable no-return-assign, one-var, no-var, consistent-return, class-methods-use-this, no-lonely-if, vars-on-top */
import $ from 'jquery';
import { escape, throttle } from 'underscore';
@@ -416,7 +416,7 @@ export class SearchAutocomplete {
inputs = Object.keys(this.originalState);
for (i = 0, len = inputs.length; i < len; i += 1) {
input = inputs[i];
- this.getElement('#' + input).val(this.originalState[input]);
+ this.getElement(`#${input}`).val(this.originalState[input]);
}
}
@@ -426,7 +426,7 @@ export class SearchAutocomplete {
results = [];
for (i = 0, len = inputs.length; i < len; i += 1) {
input = inputs[i];
- results.push(this.getElement('#' + input).val(''));
+ results.push(this.getElement(`#${input}`).val(''));
}
return results;
}
diff --git a/app/assets/javascripts/serverless/components/url.vue b/app/assets/javascripts/serverless/components/url.vue
index e47a03f1939..5e30c8d614e 100644
--- a/app/assets/javascripts/serverless/components/url.vue
+++ b/app/assets/javascripts/serverless/components/url.vue
@@ -23,7 +23,7 @@ export default {
<div class="url-text-field label label-monospace monospace">{{ uri }}</div>
<clipboard-button
:text="uri"
- :title="s__('ServerlessURL|Copy URL to clipboard')"
+ :title="s__('ServerlessURL|Copy URL')"
class="input-group-text js-clipboard-btn"
/>
<gl-button
diff --git a/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue b/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue
index 35eba266625..df950e79690 100644
--- a/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue
+++ b/app/assets/javascripts/set_status_modal/set_status_modal_wrapper.vue
@@ -163,7 +163,7 @@ export default {
:ok-title="s__('SetStatusModal|Set status')"
:cancel-title="s__('SetStatusModal|Remove status')"
ok-variant="success"
- class="set-user-status-modal"
+ modal-class="set-user-status-modal"
@shown="setupEmojiListAndAutocomplete"
@hide="hideEmojiMenu"
@ok="setStatus"
@@ -194,9 +194,9 @@ export default {
v-show="noEmoji"
class="js-no-emoji-placeholder no-emoji-placeholder position-relative"
>
- <icon name="slight-smile" css-classes="award-control-icon-neutral" />
- <icon name="smiley" css-classes="award-control-icon-positive" />
- <icon name="smile" css-classes="award-control-icon-super-positive" />
+ <icon name="slight-smile" class="award-control-icon-neutral" />
+ <icon name="smiley" class="award-control-icon-positive" />
+ <icon name="smile" class="award-control-icon-super-positive" />
</span>
</button>
</span>
diff --git a/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue b/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue
index 71a1fc31315..052bb3dcb53 100644
--- a/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue
@@ -42,6 +42,7 @@ export default {
:width="imgSize"
:class="`s${imgSize}`"
class="avatar avatar-inline m-0"
+ data-qa-selector="avatar_image"
/>
<i v-if="hasMergeIcon" aria-hidden="true" class="fa fa-exclamation-triangle merge-icon"></i>
</span>
diff --git a/app/assets/javascripts/sidebar/components/assignees/assignee_title.vue b/app/assets/javascripts/sidebar/components/assignees/assignee_title.vue
index 63b93a80ead..b107e9789a7 100644
--- a/app/assets/javascripts/sidebar/components/assignees/assignee_title.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/assignee_title.vue
@@ -1,6 +1,5 @@
<script>
import { n__ } from '~/locale';
-import { trackEvent } from 'ee_else_ce/event_tracking/issue_sidebar';
export default {
name: 'AssigneeTitle',
@@ -30,22 +29,20 @@ export default {
return n__('Assignee', `%d Assignees`, assignees);
},
},
- methods: {
- trackEdit() {
- trackEvent('click_edit_button', 'assignee');
- },
- },
};
</script>
<template>
- <div class="title hide-collapsed">
+ <div class="title hide-collapsed" data-qa-selector="assignee_title">
{{ assigneeTitle }}
<i v-if="loading" aria-hidden="true" class="fa fa-spinner fa-spin block-loading"></i>
<a
v-if="editable"
class="js-sidebar-dropdown-toggle edit-link float-right"
href="#"
- @click.prevent="trackEdit"
+ data-qa-selector="assignee_edit_link"
+ data-track-event="click_edit_button"
+ data-track-label="right_sidebar"
+ data-track-property="assignee"
>
{{ __('Edit') }}
</a>
diff --git a/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue b/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue
index 3a4623121f4..3d112bba668 100644
--- a/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue
+++ b/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue
@@ -85,7 +85,12 @@ export default {
</div>
</div>
<div v-if="renderShowMoreSection" class="user-list-more">
- <button type="button" class="btn-link" @click="toggleShowLess">
+ <button
+ type="button"
+ class="btn-link"
+ data-qa-selector="more_assignees_link"
+ @click="toggleShowLess"
+ >
<template v-if="showLess">
{{ hiddenAssigneesLabel }}
</template>
diff --git a/app/assets/javascripts/sidebar/components/confidential/confidential_issue_sidebar.vue b/app/assets/javascripts/sidebar/components/confidential/confidential_issue_sidebar.vue
index 1c75b6148e8..5b3c3642290 100644
--- a/app/assets/javascripts/sidebar/components/confidential/confidential_issue_sidebar.vue
+++ b/app/assets/javascripts/sidebar/components/confidential/confidential_issue_sidebar.vue
@@ -5,7 +5,7 @@ import tooltip from '~/vue_shared/directives/tooltip';
import Icon from '~/vue_shared/components/icon.vue';
import eventHub from '~/sidebar/event_hub';
import editForm from './edit_form.vue';
-import { trackEvent } from 'ee_else_ce/event_tracking/issue_sidebar';
+import recaptchaModalImplementor from '~/vue_shared/mixins/recaptcha_modal_implementor';
export default {
components: {
@@ -15,6 +15,7 @@ export default {
directives: {
tooltip,
},
+ mixins: [recaptchaModalImplementor],
props: {
isConfidential: {
required: true,
@@ -52,17 +53,17 @@ export default {
toggleForm() {
this.edit = !this.edit;
},
- onEditClick() {
- this.toggleForm();
-
- trackEvent('click_edit_button', 'confidentiality');
- },
updateConfidentialAttribute(confidential) {
this.service
.update('issue', { confidential })
+ .then(({ data }) => this.checkForSpam(data))
.then(() => window.location.reload())
- .catch(() => {
- Flash(__('Something went wrong trying to change the confidentiality of this issue'));
+ .catch(error => {
+ if (error.name === 'SpamError') {
+ this.openRecaptcha();
+ } else {
+ Flash(__('Something went wrong trying to change the confidentiality of this issue'));
+ }
});
},
},
@@ -72,6 +73,7 @@ export default {
<template>
<div class="block issuable-sidebar-item confidentiality">
<div
+ ref="collapseIcon"
v-tooltip
:title="tooltipLabel"
class="sidebar-collapsed-icon"
@@ -86,9 +88,13 @@ export default {
{{ __('Confidentiality') }}
<a
v-if="isEditable"
+ ref="editLink"
class="float-right confidential-edit"
href="#"
- @click.prevent="onEditClick"
+ data-track-event="click_edit_button"
+ data-track-label="right_sidebar"
+ data-track-property="confidentiality"
+ @click.prevent="toggleForm"
>
{{ __('Edit') }}
</a>
@@ -113,5 +119,7 @@ export default {
{{ __('This issue is confidential') }}
</div>
</div>
+
+ <recaptcha-modal v-if="showRecaptcha" :html="recaptchaHTML" @close="closeRecaptcha" />
</div>
</template>
diff --git a/app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue b/app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue
index ec2a7b93a98..c7c5e0e20f1 100644
--- a/app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue
+++ b/app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue
@@ -6,7 +6,6 @@ import issuableMixin from '~/vue_shared/mixins/issuable';
import Icon from '~/vue_shared/components/icon.vue';
import eventHub from '~/sidebar/event_hub';
import editForm from './edit_form.vue';
-import { trackEvent } from 'ee_else_ce/event_tracking/issue_sidebar';
export default {
components: {
@@ -66,11 +65,6 @@ export default {
toggleForm() {
this.mediator.store.isLockDialogOpen = !this.mediator.store.isLockDialogOpen;
},
- onEditClick() {
- this.toggleForm();
-
- trackEvent('click_edit_button', 'lock_issue');
- },
updateLockedAttribute(locked) {
this.mediator.service
.update(this.issuableType, {
@@ -114,7 +108,10 @@ export default {
v-if="isEditable"
class="float-right lock-edit"
type="button"
- @click.prevent="onEditClick"
+ data-track-event="click_edit_button"
+ data-track-label="right_sidebar"
+ data-track-property="lock_issue"
+ @click.prevent="toggleForm"
>
{{ __('Edit') }}
</button>
diff --git a/app/assets/javascripts/sidebar/components/subscriptions/subscriptions.vue b/app/assets/javascripts/sidebar/components/subscriptions/subscriptions.vue
index 1f5f19d1931..ea5edb3ce3f 100644
--- a/app/assets/javascripts/sidebar/components/subscriptions/subscriptions.vue
+++ b/app/assets/javascripts/sidebar/components/subscriptions/subscriptions.vue
@@ -1,10 +1,10 @@
<script>
import { __ } from '~/locale';
+import Tracking from '~/tracking';
import icon from '~/vue_shared/components/icon.vue';
import toggleButton from '~/vue_shared/components/toggle_button.vue';
import tooltip from '~/vue_shared/directives/tooltip';
import eventHub from '../../event_hub';
-import { trackEvent } from 'ee_else_ce/event_tracking/issue_sidebar';
const ICON_ON = 'notifications';
const ICON_OFF = 'notifications-off';
@@ -19,6 +19,7 @@ export default {
icon,
toggleButton,
},
+ mixins: [Tracking.mixin({ label: 'right_sidebar' })],
props: {
loading: {
type: Boolean,
@@ -65,7 +66,10 @@ export default {
// Component event emission.
this.$emit('toggleSubscription', this.id);
- trackEvent('toggle_button', 'notifications', this.subscribed ? 0 : 1);
+ this.track('toggle_button', {
+ property: 'notifications',
+ value: this.subscribed ? 0 : 1,
+ });
},
onClickCollapsedIcon() {
this.$emit('toggleSidebar');
diff --git a/app/assets/javascripts/sidebar/components/time_tracking/collapsed_state.vue b/app/assets/javascripts/sidebar/components/time_tracking/collapsed_state.vue
index 24d5b14ded9..65ecd5be05d 100644
--- a/app/assets/javascripts/sidebar/components/time_tracking/collapsed_state.vue
+++ b/app/assets/javascripts/sidebar/components/time_tracking/collapsed_state.vue
@@ -1,6 +1,5 @@
<script>
import { __, sprintf } from '~/locale';
-import { abbreviateTime } from '~/lib/utils/datetime_utility';
import icon from '~/vue_shared/components/icon.vue';
import tooltip from '~/vue_shared/directives/tooltip';
@@ -41,12 +40,6 @@ export default {
},
},
computed: {
- timeSpent() {
- return this.abbreviateTime(this.timeSpentHumanReadable);
- },
- timeEstimate() {
- return this.abbreviateTime(this.timeEstimateHumanReadable);
- },
divClass() {
if (this.showComparisonState) {
return 'compare';
@@ -73,11 +66,11 @@ export default {
},
text() {
if (this.showComparisonState) {
- return `${this.timeSpent} / ${this.timeEstimate}`;
+ return `${this.timeSpentHumanReadable} / ${this.timeEstimateHumanReadable}`;
} else if (this.showEstimateOnlyState) {
- return `-- / ${this.timeEstimate}`;
+ return `-- / ${this.timeEstimateHumanReadable}`;
} else if (this.showSpentOnlyState) {
- return `${this.timeSpent} / --`;
+ return `${this.timeSpentHumanReadable} / --`;
} else if (this.showNoTimeTrackingState) {
return __('None');
}
@@ -100,11 +93,6 @@ export default {
return this.showNoTimeTrackingState ? __('Time tracking') : this.timeTrackedTooltipText;
},
},
- methods: {
- abbreviateTime(timeStr) {
- return abbreviateTime(timeStr);
- },
- },
};
</script>
diff --git a/app/assets/javascripts/sidebar/components/todo_toggle/todo.vue b/app/assets/javascripts/sidebar/components/todo_toggle/todo.vue
index e6f2fe2b5fc..3d96405896d 100644
--- a/app/assets/javascripts/sidebar/components/todo_toggle/todo.vue
+++ b/app/assets/javascripts/sidebar/components/todo_toggle/todo.vue
@@ -82,11 +82,7 @@ export default {
data-boundary="viewport"
@click="handleButtonClick"
>
- <icon
- v-show="collapsed"
- :css-classes="collapsedButtonIconClasses"
- :name="collapsedButtonIcon"
- />
+ <icon v-show="collapsed" :class="collapsedButtonIconClasses" :name="collapsedButtonIcon" />
<span v-show="!collapsed" class="issuable-todo-inner"> {{ buttonLabel }} </span>
<gl-loading-icon v-show="isActionActive" :inline="true" />
</button>
diff --git a/app/assets/javascripts/sidebar/lib/sidebar_move_issue.js b/app/assets/javascripts/sidebar/lib/sidebar_move_issue.js
index 110175a6779..66d1fed7d31 100644
--- a/app/assets/javascripts/sidebar/lib/sidebar_move_issue.js
+++ b/app/assets/javascripts/sidebar/lib/sidebar_move_issue.js
@@ -1,4 +1,5 @@
import $ from 'jquery';
+import '~/gl_dropdown';
import _ from 'underscore';
import { __ } from '~/locale';
diff --git a/app/assets/javascripts/single_file_diff.js b/app/assets/javascripts/single_file_diff.js
index b70e384fae5..de4a7f89449 100644
--- a/app/assets/javascripts/single_file_diff.js
+++ b/app/assets/javascripts/single_file_diff.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, prefer-arrow-callback, consistent-return, */
+/* eslint-disable consistent-return */
import $ from 'jquery';
import { __ } from './locale';
@@ -40,12 +40,9 @@ export default class SingleFileDiff {
this.$toggleIcon.addClass('fa-caret-down');
}
- $('.js-file-title, .click-to-expand', this.file).on(
- 'click',
- function(e) {
- this.toggleDiff($(e.target));
- }.bind(this),
- );
+ $('.js-file-title, .click-to-expand', this.file).on('click', e => {
+ this.toggleDiff($(e.target));
+ });
}
toggleDiff($target, cb) {
diff --git a/app/assets/javascripts/snippet/snippet_embed.js b/app/assets/javascripts/snippet/snippet_embed.js
index fe08d2c7ebb..6606271c4fa 100644
--- a/app/assets/javascripts/snippet/snippet_embed.js
+++ b/app/assets/javascripts/snippet/snippet_embed.js
@@ -1,25 +1,30 @@
import { __ } from '~/locale';
export default () => {
- const { protocol, host, pathname } = window.location;
const shareBtn = document.querySelector('.js-share-btn');
- const embedBtn = document.querySelector('.js-embed-btn');
- const snippetUrlArea = document.querySelector('.js-snippet-url-area');
- const embedAction = document.querySelector('.js-embed-action');
- const url = `${protocol}//${host + pathname}`;
- shareBtn.addEventListener('click', () => {
- shareBtn.classList.add('is-active');
- embedBtn.classList.remove('is-active');
- snippetUrlArea.value = url;
- embedAction.innerText = __('Share');
- });
+ if (shareBtn) {
+ const { protocol, host, pathname } = window.location;
- embedBtn.addEventListener('click', () => {
- embedBtn.classList.add('is-active');
- shareBtn.classList.remove('is-active');
- const scriptTag = `<script src="${url}.js"></script>`;
- snippetUrlArea.value = scriptTag;
- embedAction.innerText = __('Embed');
- });
+ const embedBtn = document.querySelector('.js-embed-btn');
+
+ const snippetUrlArea = document.querySelector('.js-snippet-url-area');
+ const embedAction = document.querySelector('.js-embed-action');
+ const url = `${protocol}//${host + pathname}`;
+
+ shareBtn.addEventListener('click', () => {
+ shareBtn.classList.add('is-active');
+ embedBtn.classList.remove('is-active');
+ snippetUrlArea.value = url;
+ embedAction.innerText = __('Share');
+ });
+
+ embedBtn.addEventListener('click', () => {
+ embedBtn.classList.add('is-active');
+ shareBtn.classList.remove('is-active');
+ const scriptTag = `<script src="${url}.js"></script>`;
+ snippetUrlArea.value = scriptTag;
+ embedAction.innerText = __('Embed');
+ });
+ }
};
diff --git a/app/assets/javascripts/templates/issuable_template_selector.js b/app/assets/javascripts/templates/issuable_template_selector.js
index 78609ce0610..10ad4170930 100644
--- a/app/assets/javascripts/templates/issuable_template_selector.js
+++ b/app/assets/javascripts/templates/issuable_template_selector.js
@@ -8,10 +8,13 @@ import { __ } from '~/locale';
export default class IssuableTemplateSelector extends TemplateSelector {
constructor(...args) {
super(...args);
+
this.projectPath = this.dropdown.data('projectPath');
this.namespacePath = this.dropdown.data('namespacePath');
this.issuableType = this.$dropdownContainer.data('issuableType');
this.titleInput = $(`#${this.issuableType}_title`);
+ this.templateWarningEl = $('.js-issuable-template-warning');
+ this.warnTemplateOverride = args[0].warnTemplateOverride;
const initialQuery = {
name: this.dropdown.data('selected'),
@@ -24,14 +27,62 @@ export default class IssuableTemplateSelector extends TemplateSelector {
});
$('.no-template', this.dropdown.parent()).on('click', () => {
- this.currentTemplate.content = '';
- this.setInputValueToTemplateContent();
- $('.dropdown-toggle-text', this.dropdown).text(__('Choose a template'));
+ this.reset();
+ });
+
+ this.templateWarningEl.find('.js-close-btn').on('click', () => {
+ // Explicitly check against 0 value
+ if (this.previousSelectedIndex !== undefined) {
+ this.dropdown.data('glDropdown').selectRowAtIndex(this.previousSelectedIndex);
+ } else {
+ this.reset();
+ }
+
+ this.templateWarningEl.addClass('hidden');
});
+
+ this.templateWarningEl.find('.js-override-template').on('click', () => {
+ this.requestFile(this.overridingTemplate);
+ this.setSelectedIndex();
+
+ this.templateWarningEl.addClass('hidden');
+ this.overridingTemplate = null;
+ });
+ }
+
+ reset() {
+ if (this.currentTemplate) {
+ this.currentTemplate.content = '';
+ }
+
+ this.setInputValueToTemplateContent();
+ $('.dropdown-toggle-text', this.dropdown).text(__('Choose a template'));
+ this.previousSelectedIndex = null;
+ }
+
+ setSelectedIndex() {
+ this.previousSelectedIndex = this.dropdown.data('glDropdown').selectedIndex;
+ }
+
+ onDropdownClicked(query) {
+ const content = this.getEditorContent();
+ const isContentUnchanged =
+ content === '' || (this.currentTemplate && content === this.currentTemplate.content);
+
+ if (!this.warnTemplateOverride || isContentUnchanged) {
+ super.onDropdownClicked(query);
+ this.setSelectedIndex();
+
+ return;
+ }
+
+ this.overridingTemplate = query.selectedObj;
+ this.templateWarningEl.removeClass('hidden');
}
requestFile(query) {
this.startLoadingSpinner();
+
Api.issueTemplate(
this.namespacePath,
this.projectPath,
@@ -59,6 +110,7 @@ export default class IssuableTemplateSelector extends TemplateSelector {
} else {
this.setEditorContent(this.currentTemplate, { skipFocus: false });
}
+
return;
}
}
diff --git a/app/assets/javascripts/templates/issuable_template_selectors.js b/app/assets/javascripts/templates/issuable_template_selectors.js
index 50e58ec5c46..443b3084113 100644
--- a/app/assets/javascripts/templates/issuable_template_selectors.js
+++ b/app/assets/javascripts/templates/issuable_template_selectors.js
@@ -4,7 +4,7 @@ import $ from 'jquery';
import IssuableTemplateSelector from './issuable_template_selector';
export default class IssuableTemplateSelectors {
- constructor({ $dropdowns, editor } = {}) {
+ constructor({ $dropdowns, editor, warnTemplateOverride } = {}) {
this.$dropdowns = $dropdowns || $('.js-issuable-selector');
this.editor = editor || this.initEditor();
@@ -16,6 +16,7 @@ export default class IssuableTemplateSelectors {
wrapper: $dropdown.closest('.js-issuable-selector-wrap'),
dropdown: $dropdown,
editor: this.editor,
+ warnTemplateOverride,
});
});
}
diff --git a/app/assets/javascripts/test_utils/index.js b/app/assets/javascripts/test_utils/index.js
index 1e75ee60671..1a1f3e8d0a8 100644
--- a/app/assets/javascripts/test_utils/index.js
+++ b/app/assets/javascripts/test_utils/index.js
@@ -1,8 +1,10 @@
import 'core-js/es/map';
import 'core-js/es/set';
+import { Sortable } from 'sortablejs';
import simulateDrag from './simulate_drag';
import simulateInput from './simulate_input';
// Export to global space for rspec to use
window.simulateDrag = simulateDrag;
window.simulateInput = simulateInput;
+window.Sortable = Sortable;
diff --git a/app/assets/javascripts/tracking.js b/app/assets/javascripts/tracking.js
index 1b4ca1d5741..7c0097fbe37 100644
--- a/app/assets/javascripts/tracking.js
+++ b/app/assets/javascripts/tracking.js
@@ -1,4 +1,4 @@
-import $ from 'jquery';
+import _ from 'underscore';
const DEFAULT_SNOWPLOW_OPTIONS = {
namespace: 'gl',
@@ -14,18 +14,31 @@ const DEFAULT_SNOWPLOW_OPTIONS = {
linkClickTracking: false,
};
-const extractData = (el, opts = {}) => {
- const { trackEvent, trackLabel = '', trackProperty = '' } = el.dataset;
- let trackValue = el.dataset.trackValue || el.value || '';
- if (el.type === 'checkbox' && !el.checked) trackValue = false;
- return [
- trackEvent + (opts.suffix || ''),
- {
- label: trackLabel,
- property: trackProperty,
- value: trackValue,
- },
- ];
+const eventHandler = (e, func, opts = {}) => {
+ const el = e.target.closest('[data-track-event]');
+ const action = el && el.dataset.trackEvent;
+ if (!action) return;
+
+ let value = el.dataset.trackValue || el.value || undefined;
+ if (el.type === 'checkbox' && !el.checked) value = false;
+
+ const data = {
+ label: el.dataset.trackLabel,
+ property: el.dataset.trackProperty,
+ value,
+ context: el.dataset.trackContext,
+ };
+
+ func(opts.category, action + (opts.suffix || ''), _.omit(data, _.isUndefined));
+};
+
+const eventHandlers = (category, func) => {
+ const handler = opts => e => eventHandler(e, func, { ...{ category }, ...opts });
+ const handlers = [];
+ handlers.push({ name: 'click', func: handler() });
+ handlers.push({ name: 'show.bs.dropdown', func: handler({ suffix: '_show' }) });
+ handlers.push({ name: 'hide.bs.dropdown', func: handler({ suffix: '_hide' }) });
+ return handlers;
};
export default class Tracking {
@@ -39,49 +52,43 @@ export default class Tracking {
return typeof window.snowplow === 'function' && this.trackable();
}
- static event(category = document.body.dataset.page, event = 'generic', data = {}) {
+ static event(category = document.body.dataset.page, action = 'generic', data = {}) {
if (!this.enabled()) return false;
// eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
if (!category) throw new Error('Tracking: no category provided for tracking.');
- return window.snowplow(
- 'trackStructEvent',
- category,
- event,
- Object.assign({}, { label: '', property: '', value: '' }, data),
- );
+ const { label, property, value, context } = data;
+ const contexts = context ? [context] : undefined;
+ return window.snowplow('trackStructEvent', category, action, label, property, value, contexts);
}
- constructor(category = document.body.dataset.page) {
- this.category = category;
- }
-
- bind(container = document) {
- if (!this.constructor.enabled()) return;
- container.querySelectorAll(`[data-track-event]`).forEach(el => {
- if (this.customHandlingFor(el)) return;
- // jquery is required for select2, so we use it always
- // see: https://github.com/select2/select2/issues/4686
- $(el).on('click', this.eventHandler(this.category));
- });
- }
+ static bindDocument(category = document.body.dataset.page, documentOverride = null) {
+ const el = documentOverride || document;
+ if (!this.enabled() || el.trackingBound) return [];
- customHandlingFor(el) {
- const classes = el.classList;
+ el.trackingBound = true;
- // bootstrap dropdowns
- if (classes.contains('dropdown')) {
- $(el).on('show.bs.dropdown', this.eventHandler(this.category, { suffix: '_show' }));
- $(el).on('hide.bs.dropdown', this.eventHandler(this.category, { suffix: '_hide' }));
- return true;
- }
-
- return false;
+ const handlers = eventHandlers(category, (...args) => this.event(...args));
+ handlers.forEach(event => el.addEventListener(event.name, event.func));
+ return handlers;
}
- eventHandler(category = null, opts = {}) {
- return e => {
- this.constructor.event(category || this.category, ...extractData(e.currentTarget, opts));
+ static mixin(opts) {
+ return {
+ data() {
+ return {
+ tracking: {
+ // eslint-disable-next-line no-underscore-dangle
+ category: this.$options.name || this.$options._componentTag,
+ },
+ };
+ },
+ methods: {
+ track(action, data) {
+ const category = opts.category || data.category || this.tracking.category;
+ Tracking.event(category || 'unspecified', action, { ...opts, ...this.tracking, ...data });
+ },
+ },
};
}
}
@@ -89,7 +96,7 @@ export default class Tracking {
export function initUserTracking() {
if (!Tracking.enabled()) return;
- const opts = Object.assign({}, DEFAULT_SNOWPLOW_OPTIONS, window.snowplowOptions);
+ const opts = { ...DEFAULT_SNOWPLOW_OPTIONS, ...window.snowplowOptions };
window.snowplow('newTracker', opts.namespace, opts.hostname, opts);
window.snowplow('enableActivityTracking', 30, 30);
@@ -97,4 +104,6 @@ export function initUserTracking() {
if (opts.formTracking) window.snowplow('enableFormTracking');
if (opts.linkClickTracking) window.snowplow('enableLinkClickTracking');
+
+ Tracking.bindDocument();
}
diff --git a/app/assets/javascripts/tree.js b/app/assets/javascripts/tree.js
index 3e659c9e7ea..69b3d20914a 100644
--- a/app/assets/javascripts/tree.js
+++ b/app/assets/javascripts/tree.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, consistent-return, no-var, one-var, no-else-return, prefer-arrow-callback, class-methods-use-this */
+/* eslint-disable func-names, consistent-return, no-var, one-var, no-else-return, class-methods-use-this */
import $ from 'jquery';
import { visitUrl } from './lib/utils/url_utility';
@@ -29,7 +29,7 @@ export default class TreeView {
var li, liSelected;
li = $('tr.tree-item');
liSelected = null;
- return $('body').keydown(function(e) {
+ return $('body').keydown(e => {
var next, path;
if ($('input:focus').length > 0 && (e.which === 38 || e.which === 40)) {
return false;
diff --git a/app/assets/javascripts/user_popovers.js b/app/assets/javascripts/user_popovers.js
index 948f4d5e631..c0b7587be10 100644
--- a/app/assets/javascripts/user_popovers.js
+++ b/app/assets/javascripts/user_popovers.js
@@ -63,7 +63,7 @@ const handleUserPopoverMouseOver = event => {
UsersCache.retrieveById(userId)
.then(userData => {
if (!userData) {
- return;
+ return undefined;
}
Object.assign(user, {
@@ -76,19 +76,16 @@ const handleUserPopoverMouseOver = event => {
loaded: true,
});
- UsersCache.retrieveStatusById(userId)
- .then(status => {
- if (!status) {
- return;
- }
+ return UsersCache.retrieveStatusById(userId);
+ })
+ .then(status => {
+ if (!status) {
+ return;
+ }
- Object.assign(user, {
- status,
- });
- })
- .catch(() => {
- throw new Error(`User status for "${userId}" could not be retrieved!`);
- });
+ Object.assign(user, {
+ status,
+ });
})
.catch(() => {
renderedPopover.$destroy();
diff --git a/app/assets/javascripts/users_select.js b/app/assets/javascripts/users_select.js
index e78ca56be0e..da1a7c290f8 100644
--- a/app/assets/javascripts/users_select.js
+++ b/app/assets/javascripts/users_select.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, one-var, no-var, prefer-rest-params, vars-on-top, prefer-arrow-callback, consistent-return, no-shadow, no-else-return, no-self-compare, prefer-template, no-unused-expressions, yoda, prefer-spread, camelcase, no-param-reassign */
+/* eslint-disable func-names, one-var, no-var, prefer-rest-params, vars-on-top, consistent-return, no-shadow, no-else-return, no-self-compare, no-unused-expressions, yoda, prefer-spread, camelcase, no-param-reassign */
/* global Issuable */
/* global emitSidebarEvent */
@@ -7,6 +7,7 @@ import _ from 'underscore';
import axios from './lib/utils/axios_utils';
import { s__, __, sprintf } from './locale';
import ModalStore from './boards/stores/modal_store';
+import { parseBoolean } from './lib/utils/common_utils';
// TODO: remove eventHub hack after code splitting refactor
window.emitSidebarEvent = window.emitSidebarEvent || $.noop;
@@ -250,16 +251,12 @@ function UsersSelect(currentUser, els, options = {}) {
return $dropdown.glDropdown({
showMenuAbove,
data(term, callback) {
- return _this.users(
- term,
- options,
- function(users) {
- // GitLabDropdownFilter returns this.instance
- // GitLabDropdownRemote returns this.options.instance
- const glDropdown = this.instance || this.options.instance;
- glDropdown.options.processData(term, users, callback);
- }.bind(this),
- );
+ return _this.users(term, options, users => {
+ // GitLabDropdownFilter returns this.instance
+ // GitLabDropdownRemote returns this.options.instance
+ const glDropdown = this.instance || this.options.instance;
+ glDropdown.options.processData(term, users, callback);
+ });
},
processData(term, data, callback) {
let users = data;
@@ -279,12 +276,13 @@ function UsersSelect(currentUser, els, options = {}) {
})
.map(input => {
const userId = parseInt(input.value, 10);
- const { avatarUrl, avatar_url, name, username } = input.dataset;
+ const { avatarUrl, avatar_url, name, username, canMerge } = input.dataset;
return {
avatar_url: avatarUrl || avatar_url,
id: userId,
name,
username,
+ can_merge: parseBoolean(canMerge),
};
});
@@ -432,8 +430,7 @@ function UsersSelect(currentUser, els, options = {}) {
const isActive = $el.hasClass('is-active');
const previouslySelected = $dropdown
.closest('.selectbox')
- /* eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings */
- .find("input[name='" + $dropdown.data('fieldName') + "'][value!=0]");
+ .find(`input[name='${$dropdown.data('fieldName')}'][value!=0]`);
// Enables support for limiting the number of users selected
// Automatically removes the first on the list if more users are selected
@@ -452,7 +449,7 @@ function UsersSelect(currentUser, els, options = {}) {
// Remove unassigned selection (if it was previously selected)
const unassignedSelected = $dropdown
.closest('.selectbox')
- .find("input[name='" + $dropdown.data('fieldName') + "'][value=0]");
+ .find(`input[name='${$dropdown.data('fieldName')}'][value=0]`);
if (unassignedSelected) {
unassignedSelected.remove();
@@ -506,7 +503,7 @@ function UsersSelect(currentUser, els, options = {}) {
} else if (!$dropdown.hasClass('js-multiselect')) {
selected = $dropdown
.closest('.selectbox')
- .find("input[name='" + $dropdown.data('fieldName') + "']")
+ .find(`input[name='${$dropdown.data('fieldName')}']`)
.val();
return assignTo(selected);
}
@@ -548,7 +545,7 @@ function UsersSelect(currentUser, els, options = {}) {
updateLabel: $dropdown.data('dropdownTitle'),
renderRow(user) {
var avatar, img, username;
- username = user.username ? '@' + user.username : '';
+ username = user.username ? `@${user.username}` : '';
avatar = user.avatar_url ? user.avatar_url : gon.default_avatar_url;
let selected = false;
@@ -559,7 +556,7 @@ function UsersSelect(currentUser, els, options = {}) {
const { fieldName } = this;
const field = $dropdown
.closest('.selectbox')
- .find("input[name='" + fieldName + "'][value='" + user.id + "']");
+ .find(`input[name='${fieldName}'][value='${user.id}']`);
if (field.length) {
selected = true;
@@ -575,7 +572,7 @@ function UsersSelect(currentUser, els, options = {}) {
)}</a></li>`;
} else {
// 0 margin, because it's now handled by a wrapper
- img = "<img src='" + avatar + "' class='avatar avatar-inline m-0' width='32' />";
+ img = `<img src='${avatar}' class='avatar avatar-inline m-0' width='32' />`;
}
return _this.renderRow(options.issuableType, user, selected, username, img);
@@ -606,7 +603,7 @@ function UsersSelect(currentUser, els, options = {}) {
multiple: $(select).hasClass('multiselect'),
minimumInputLength: 0,
query(query) {
- return _this.users(query.term, options, function(users) {
+ return _this.users(query.term, options, users => {
var anyUser, data, emailUser, index, len, name, nullUser, obj, ref;
data = {
results: users,
@@ -719,7 +716,7 @@ UsersSelect.prototype.formatResult = function(user) {
${_.escape(user.name)}
</div>
<div class='user-username dropdown-menu-user-username text-secondary'>
- ${!user.invite ? '@' + _.escape(user.username) : ''}
+ ${!user.invite ? `@${_.escape(user.username)}` : ''}
</div>
</div>
</div>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/artifacts_list.vue b/app/assets/javascripts/vue_merge_request_widget/components/artifacts_list.vue
new file mode 100644
index 00000000000..dc766176617
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/components/artifacts_list.vue
@@ -0,0 +1,40 @@
+<script>
+import { GlLink } from '@gitlab/ui';
+
+export default {
+ components: {
+ GlLink,
+ },
+ props: {
+ artifacts: {
+ type: Array,
+ required: true,
+ },
+ },
+};
+</script>
+<template>
+ <table class="table m-0">
+ <thead class="thead-white text-nowrap">
+ <tr class="d-none d-sm-table-row">
+ <th class="w-0"></th>
+ <th>{{ __('Artifact') }}</th>
+ <th class="w-50"></th>
+ <th>{{ __('Job') }}</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr v-for="item in artifacts" :key="item.text">
+ <td class="w-0"></td>
+ <td>
+ <gl-link :href="item.url" target="_blank">{{ item.text }}</gl-link>
+ </td>
+ <td class="w-0"></td>
+ <td>
+ <gl-link :href="item.job_path">{{ item.job_name }}</gl-link>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</template>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/artifacts_list_app.vue b/app/assets/javascripts/vue_merge_request_widget/components/artifacts_list_app.vue
new file mode 100644
index 00000000000..730e67761be
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/components/artifacts_list_app.vue
@@ -0,0 +1,36 @@
+<script>
+import { mapActions, mapState, mapGetters } from 'vuex';
+import ArtifactsList from './artifacts_list.vue';
+import MrCollapsibleExtension from './mr_collapsible_extension.vue';
+import createStore from '../stores/artifacts_list';
+
+export default {
+ store: createStore(),
+ components: {
+ ArtifactsList,
+ MrCollapsibleExtension,
+ },
+ props: {
+ endpoint: {
+ type: String,
+ required: true,
+ },
+ },
+ computed: {
+ ...mapState(['artifacts', 'isLoading', 'hasError']),
+ ...mapGetters(['title']),
+ },
+ created() {
+ this.setEndpoint(this.endpoint);
+ this.fetchArtifacts();
+ },
+ methods: {
+ ...mapActions(['setEndpoint', 'fetchArtifacts']),
+ },
+};
+</script>
+<template>
+ <mr-collapsible-extension :title="title" :is-loading="isLoading" :has-error="hasError">
+ <artifacts-list :artifacts="artifacts" />
+ </mr-collapsible-extension>
+</template>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/deployment.vue b/app/assets/javascripts/vue_merge_request_widget/components/deployment.vue
index bb6921225c2..1873e09c370 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/deployment.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/deployment.vue
@@ -211,7 +211,7 @@ export default {
<template v-else>
<review-app-link
:link="deploymentExternalUrl"
- css-class="js-deploy-url js-deploy-url-feature-flag deploy-link btn btn-default btn-sm inline"
+ css-class="js-deploy-url deploy-link btn btn-default btn-sm inline"
/>
</template>
<visual-review-app-link
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_collapsible_extension.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_collapsible_extension.vue
new file mode 100644
index 00000000000..36f291e995c
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_collapsible_extension.vue
@@ -0,0 +1,88 @@
+<script>
+import { GlButton, GlLink, GlLoadingIcon } from '@gitlab/ui';
+import { __ } from '~/locale';
+import Icon from '~/vue_shared/components/icon.vue';
+
+export default {
+ components: {
+ GlButton,
+ GlLink,
+ GlLoadingIcon,
+ Icon,
+ },
+ props: {
+ title: {
+ type: String,
+ required: true,
+ },
+ isLoading: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
+ hasError: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
+ },
+ data() {
+ return {
+ isCollapsed: true,
+ };
+ },
+
+ computed: {
+ arrowIconName() {
+ return this.isCollapsed ? 'angle-right' : 'angle-down';
+ },
+ ariaLabel() {
+ return this.isCollapsed ? __('Expand') : __('Collapse');
+ },
+ },
+ methods: {
+ toggleCollapsed() {
+ this.isCollapsed = !this.isCollapsed;
+ },
+ },
+};
+</script>
+<template>
+ <div>
+ <div class="mr-widget-extension d-flex align-items-center pl-3">
+ <div v-if="hasError" class="ci-widget media">
+ <div class="media-body">
+ <span class="gl-font-size-small mr-widget-margin-left gl-line-height-24 js-error-state">{{
+ title
+ }}</span>
+ </div>
+ </div>
+
+ <template v-else>
+ <gl-button
+ class="btn-blank btn s32 square append-right-default"
+ :aria-label="ariaLabel"
+ :disabled="isLoading"
+ @click="toggleCollapsed"
+ >
+ <gl-loading-icon v-if="isLoading" />
+ <icon v-else :name="arrowIconName" class="js-icon" />
+ </gl-button>
+ <gl-button
+ variant="link"
+ class="js-title"
+ :disabled="isLoading"
+ :class="{ 'border-0': isLoading }"
+ @click="toggleCollapsed"
+ >
+ <template v-if="isCollapsed">{{ title }}</template>
+ <template v-else>{{ __('Collapse') }}</template>
+ </gl-button>
+ </template>
+ </div>
+
+ <div v-if="!isCollapsed" class="border-top js-slot-container">
+ <slot></slot>
+ </div>
+ </div>
+</template>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue
index fb826be19f5..2aaba6e1c8a 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue
@@ -90,7 +90,7 @@ export default {
v-html="mr.sourceBranchLink"
/><clipboard-button
:text="branchNameClipboardData"
- :title="__('Copy branch name to clipboard')"
+ :title="__('Copy branch name')"
css-class="btn-default btn-transparent btn-clipboard"
/>
{{ s__('mrWidget|into') }}
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue
index 52acd1de666..7c5f35579b8 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue
@@ -110,9 +110,15 @@ export default {
<div class="ci-widget-container d-flex">
<div class="ci-widget-content">
<div class="media-body">
- <div class="font-weight-bold js-pipeline-info-container">
+ <div
+ class="font-weight-bold js-pipeline-info-container"
+ data-qa-selector="merge_request_pipeline_info_content"
+ >
{{ pipeline.details.name }}
- <gl-link :href="pipeline.path" class="pipeline-id font-weight-normal pipeline-number"
+ <gl-link
+ :href="pipeline.path"
+ class="pipeline-id font-weight-normal pipeline-number"
+ data-qa-selector="pipeline_link"
>#{{ pipeline.id }}</gl-link
>
{{ pipeline.details.status.label }}
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline_container.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline_container.vue
index 8fdf61a6b8d..ffc3e0967d4 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline_container.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline_container.vue
@@ -1,5 +1,6 @@
<script>
import _ from 'underscore';
+import ArtifactsApp from './artifacts_list_app.vue';
import Deployment from './deployment.vue';
import MrWidgetContainer from './mr_widget_container.vue';
import MrWidgetPipeline from './mr_widget_pipeline.vue';
@@ -15,6 +16,7 @@ import MrWidgetPipeline from './mr_widget_pipeline.vue';
export default {
name: 'MrWidgetPipelineContainer',
components: {
+ ArtifactsApp,
Deployment,
MrWidgetContainer,
MrWidgetPipeline,
@@ -79,6 +81,9 @@ export default {
:troubleshooting-docs-path="mr.troubleshootingDocsPath"
/>
<template v-slot:footer>
+ <div v-if="mr.exposedArtifactsPath" class="js-exposed-artifacts">
+ <artifacts-app :endpoint="mr.exposedArtifactsPath" />
+ </div>
<div v-if="deployments.length" class="mr-widget-extension">
<deployment
v-for="deployment in deployments"
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue b/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue
index 457a71cab95..75f557d05dd 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/review_app_link.vue
@@ -19,6 +19,6 @@ export default {
</script>
<template>
<a :href="link" target="_blank" rel="noopener noreferrer nofollow" :class="cssClass">
- {{ __('View app') }} <icon css-classes="fgray" name="external-link" />
+ {{ __('View app') }} <icon class="fgray" name="external-link" />
</a>
</template>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue
index fb07c03e34d..a2b5a79af36 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue
@@ -170,7 +170,7 @@ export default {
>
</a>
<clipboard-button
- :title="__('Copy commit SHA to clipboard')"
+ :title="__('Copy commit SHA')"
:text="mr.mergeCommitSha"
css-class="btn-default btn-transparent btn-clipboard js-mr-merged-copy-sha"
/>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
index 91c0b40a0b5..8132b1a944b 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
@@ -1,5 +1,7 @@
<script>
import $ from 'jquery';
+import { __ } from '~/locale';
+import createFlash from '~/flash';
import statusIcon from '../mr_widget_status_icon.vue';
import tooltip from '../../../vue_shared/directives/tooltip';
import eventHub from '../../event_hub';
@@ -29,12 +31,12 @@ export default {
.then(res => res.data)
.then(data => {
eventHub.$emit('UpdateWidgetData', data);
- new window.Flash('The merge request can now be merged.', 'notice'); // eslint-disable-line
+ createFlash(__('The merge request can now be merged.'), 'notice');
$('.merge-request .detail-page-description .title').text(this.mr.title);
})
.catch(() => {
this.isMakingRequest = false;
- new window.Flash('Something went wrong. Please try again.'); // eslint-disable-line
+ createFlash(__('Something went wrong. Please try again.'));
});
},
},
diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/actions.js b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/actions.js
new file mode 100644
index 00000000000..3648db795f5
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/actions.js
@@ -0,0 +1,74 @@
+import Visibility from 'visibilityjs';
+import axios from '~/lib/utils/axios_utils';
+import Poll from '~/lib/utils/poll';
+import httpStatusCodes from '~/lib/utils/http_status';
+
+import * as types from './mutation_types';
+
+export const setEndpoint = ({ commit }, endpoint) => commit(types.SET_ENDPOINT, endpoint);
+
+export const requestArtifacts = ({ commit }) => commit(types.REQUEST_ARTIFACTS);
+
+let eTagPoll;
+
+export const clearEtagPoll = () => {
+ eTagPoll = null;
+};
+
+export const stopPolling = () => {
+ if (eTagPoll) eTagPoll.stop();
+};
+
+export const restartPolling = () => {
+ if (eTagPoll) eTagPoll.restart();
+};
+
+export const fetchArtifacts = ({ state, dispatch }) => {
+ dispatch('requestArtifacts');
+
+ eTagPoll = new Poll({
+ resource: {
+ getArtifacts(endpoint) {
+ return axios.get(endpoint);
+ },
+ },
+ data: state.endpoint,
+ method: 'getArtifacts',
+ successCallback: ({ data, status }) => {
+ dispatch('receiveArtifactsSuccess', {
+ data,
+ status,
+ });
+ },
+ errorCallback: () => dispatch('receiveArtifactsError'),
+ });
+
+ if (!Visibility.hidden()) {
+ eTagPoll.makeRequest();
+ } else {
+ axios
+ .get(state.endpoint)
+ .then(({ data, status }) => dispatch('receiveArtifactsSuccess', { data, status }))
+ .catch(() => dispatch('receiveArtifactsError'));
+ }
+
+ Visibility.change(() => {
+ if (!Visibility.hidden()) {
+ dispatch('restartPolling');
+ } else {
+ dispatch('stopPolling');
+ }
+ });
+};
+
+export const receiveArtifactsSuccess = ({ commit }, response) => {
+ // With 204 we keep polling and don't update the state
+ if (response.status === httpStatusCodes.OK) {
+ commit(types.RECEIVE_ARTIFACTS_SUCCESS, response.data);
+ }
+};
+
+export const receiveArtifactsError = ({ commit }) => commit(types.RECEIVE_ARTIFACTS_ERROR);
+
+// prevent babel-plugin-rewire from generating an invalid default during karma tests
+export default () => {};
diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/getters.js b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/getters.js
new file mode 100644
index 00000000000..8921637b93b
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/getters.js
@@ -0,0 +1,16 @@
+import { s__, n__ } from '~/locale';
+
+export const title = state => {
+ if (state.isLoading) {
+ return s__('BuildArtifacts|Loading artifacts');
+ }
+
+ if (state.hasError) {
+ return s__('BuildArtifacts|An error occurred while fetching the artifacts');
+ }
+
+ return n__('View exposed artifact', 'View %d exposed artifacts', state.artifacts.length);
+};
+
+// prevent babel-plugin-rewire from generating an invalid default during karma tests
+export default () => {};
diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/index.js b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/index.js
new file mode 100644
index 00000000000..f8abbc99f0f
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/index.js
@@ -0,0 +1,16 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import * as actions from './actions';
+import mutations from './mutations';
+import * as getters from './getters';
+import state from './state';
+
+Vue.use(Vuex);
+
+export default () =>
+ new Vuex.Store({
+ actions,
+ mutations,
+ getters,
+ state: state(),
+ });
diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutation_types.js b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutation_types.js
new file mode 100644
index 00000000000..282faf6f8a4
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutation_types.js
@@ -0,0 +1,5 @@
+export const SET_ENDPOINT = 'SET_ENDPOINT';
+
+export const REQUEST_ARTIFACTS = 'REQUEST_ARTIFACTS';
+export const RECEIVE_ARTIFACTS_SUCCESS = 'RECEIVE_ARTIFACTS_SUCCESS';
+export const RECEIVE_ARTIFACTS_ERROR = 'RECEIVE_ARTIFACTS_ERROR';
diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutations.js b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutations.js
new file mode 100644
index 00000000000..95a091f1bd6
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/mutations.js
@@ -0,0 +1,22 @@
+import * as types from './mutation_types';
+
+export default {
+ [types.SET_ENDPOINT](state, endpoint) {
+ state.endpoint = endpoint;
+ },
+ [types.REQUEST_ARTIFACTS](state) {
+ state.isLoading = true;
+ },
+ [types.RECEIVE_ARTIFACTS_SUCCESS](state, response) {
+ state.hasError = false;
+ state.isLoading = false;
+
+ state.artifacts = response;
+ },
+ [types.RECEIVE_ARTIFACTS_ERROR](state) {
+ state.isLoading = false;
+ state.hasError = true;
+
+ state.artifacts = [];
+ },
+};
diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/state.js b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/state.js
new file mode 100644
index 00000000000..92dad171b1b
--- /dev/null
+++ b/app/assets/javascripts/vue_merge_request_widget/stores/artifacts_list/state.js
@@ -0,0 +1,8 @@
+export default () => ({
+ endpoint: null,
+
+ isLoading: false,
+ hasError: false,
+
+ artifacts: [],
+});
diff --git a/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js b/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js
index 699d41494bf..f51d0fa4f52 100644
--- a/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js
+++ b/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js
@@ -100,6 +100,7 @@ export default class MergeRequestStore {
this.isPipelineBlocked = pipelineStatus ? pipelineStatus.group === 'manual' : false;
this.ciStatusFaviconPath = pipelineStatus ? pipelineStatus.favicon : null;
this.testResultsPath = data.test_reports_path;
+ this.exposedArtifactsPath = data.exposed_artifacts_path;
this.cancelAutoMergePath = data.cancel_auto_merge_path;
this.canCancelAutomaticMerge = Boolean(data.cancel_auto_merge_path);
@@ -168,6 +169,7 @@ export default class MergeRequestStore {
this.mergeRequestPipelinesHelpPath = data.merge_request_pipelines_docs_path;
this.conflictsDocsPath = data.conflicts_docs_path;
this.ciEnvironmentsStatusPath = data.ci_environments_status_path;
+ this.securityApprovalsHelpPagePath = data.security_approvals_help_page_path;
}
get isNothingToMergeState() {
diff --git a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
index a97538d813a..75c3c544c77 100644
--- a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
+++ b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue
@@ -70,7 +70,13 @@ export default {
return undefined;
},
showIcon() {
- return this.file.changed || this.file.tempFile || this.file.staged || this.file.deleted;
+ return (
+ this.file.changed ||
+ this.file.tempFile ||
+ this.file.staged ||
+ this.file.deleted ||
+ this.file.prevPath
+ );
},
},
};
@@ -83,7 +89,7 @@ export default {
:class="{ 'ml-auto': isCentered }"
class="file-changed-icon d-inline-block"
>
- <icon v-if="showIcon" :name="changedIcon" :size="size" :css-classes="changedIconClass" />
+ <icon v-if="showIcon" :name="changedIcon" :size="size" :class="changedIconClass" />
</span>
</template>
diff --git a/app/assets/javascripts/vue_shared/components/ci_icon.vue b/app/assets/javascripts/vue_shared/components/ci_icon.vue
index 5d373e179b2..162cfc02959 100644
--- a/app/assets/javascripts/vue_shared/components/ci_icon.vue
+++ b/app/assets/javascripts/vue_shared/components/ci_icon.vue
@@ -66,5 +66,5 @@ export default {
};
</script>
<template>
- <span :class="cssClass"> <icon :name="icon" :size="size" :css-classes="cssClasses" /> </span>
+ <span :class="cssClass"> <icon :name="icon" :size="size" :class="cssClasses" /> </span>
</template>
diff --git a/app/assets/javascripts/vue_shared/components/clipboard_button.vue b/app/assets/javascripts/vue_shared/components/clipboard_button.vue
index a620f560b52..9f498037185 100644
--- a/app/assets/javascripts/vue_shared/components/clipboard_button.vue
+++ b/app/assets/javascripts/vue_shared/components/clipboard_button.vue
@@ -7,7 +7,7 @@
*
* @example
* <clipboard-button
- * title="Copy to clipboard"
+ * title="Copy"
* text="Content to be copied"
* css-class="btn-transparent"
* />
diff --git a/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue b/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue
index c6d61d6ee62..fe1a2a092ad 100644
--- a/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue
+++ b/app/assets/javascripts/vue_shared/components/content_viewer/viewers/download_viewer.vue
@@ -40,7 +40,7 @@ export default {
</template>
</p>
<gl-link :href="path" class="btn btn-default" rel="nofollow" download target="_blank">
- <icon :size="16" name="download" css-classes="float-left append-right-8" />
+ <icon :size="16" name="download" class="float-left append-right-8" />
{{ __('Download') }}
</gl-link>
</div>
diff --git a/app/assets/javascripts/vue_shared/components/deprecated_modal.vue b/app/assets/javascripts/vue_shared/components/deprecated_modal.vue
index d5558d93219..3f55f43edbb 100644
--- a/app/assets/javascripts/vue_shared/components/deprecated_modal.vue
+++ b/app/assets/javascripts/vue_shared/components/deprecated_modal.vue
@@ -132,6 +132,7 @@ export default {
type="button"
class="btn js-primary-button"
data-dismiss="modal"
+ data-qa-selector="save_changes_button"
@click="emitSubmit($event)"
>
{{ primaryButtonLabel }}
diff --git a/app/assets/javascripts/vue_shared/components/deprecated_modal_2.vue b/app/assets/javascripts/vue_shared/components/deprecated_modal_2.vue
new file mode 100644
index 00000000000..543547b37fe
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/components/deprecated_modal_2.vue
@@ -0,0 +1,118 @@
+<script>
+import $ from 'jquery';
+
+const buttonVariants = ['danger', 'primary', 'success', 'warning'];
+const sizeVariants = ['sm', 'md', 'lg', 'xl'];
+
+export default {
+ name: 'DeprecatedModal2', // use GlModal instead
+
+ props: {
+ id: {
+ type: String,
+ required: false,
+ default: null,
+ },
+ modalSize: {
+ type: String,
+ required: false,
+ default: 'md',
+ validator: value => sizeVariants.includes(value),
+ },
+ headerTitleText: {
+ type: String,
+ required: false,
+ default: '',
+ },
+ footerPrimaryButtonVariant: {
+ type: String,
+ required: false,
+ default: 'primary',
+ validator: value => buttonVariants.includes(value),
+ },
+ footerPrimaryButtonText: {
+ type: String,
+ required: false,
+ default: '',
+ },
+ },
+ computed: {
+ modalSizeClass() {
+ return this.modalSize === 'md' ? '' : `modal-${this.modalSize}`;
+ },
+ },
+ mounted() {
+ $(this.$el)
+ .on('shown.bs.modal', this.opened)
+ .on('hidden.bs.modal', this.closed);
+ },
+ beforeDestroy() {
+ $(this.$el)
+ .off('shown.bs.modal', this.opened)
+ .off('hidden.bs.modal', this.closed);
+ },
+ methods: {
+ emitCancel(event) {
+ this.$emit('cancel', event);
+ },
+ emitSubmit(event) {
+ this.$emit('submit', event);
+ },
+ opened() {
+ this.$emit('open');
+ },
+ closed() {
+ this.$emit('closed');
+ },
+ },
+};
+</script>
+
+<template>
+ <div :id="id" class="modal fade" tabindex="-1" role="dialog">
+ <div :class="modalSizeClass" class="modal-dialog" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <slot name="header">
+ <h4 class="modal-title">
+ <slot name="title"> {{ headerTitleText }} </slot>
+ </h4>
+ <button
+ :aria-label="s__('Modal|Close')"
+ type="button"
+ class="close js-modal-close-action"
+ data-dismiss="modal"
+ @click="emitCancel($event)"
+ >
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </slot>
+ </div>
+
+ <div class="modal-body"><slot></slot></div>
+
+ <div class="modal-footer">
+ <slot name="footer">
+ <button
+ type="button"
+ class="btn js-modal-cancel-action qa-modal-cancel-button"
+ data-dismiss="modal"
+ @click="emitCancel($event)"
+ >
+ {{ s__('Modal|Cancel') }}
+ </button>
+ <button
+ :class="`btn-${footerPrimaryButtonVariant}`"
+ type="button"
+ class="btn js-modal-primary-action qa-modal-primary-button"
+ data-dismiss="modal"
+ @click="emitSubmit($event)"
+ >
+ {{ footerPrimaryButtonText }}
+ </button>
+ </slot>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
diff --git a/app/assets/javascripts/vue_shared/components/file_icon.vue b/app/assets/javascripts/vue_shared/components/file_icon.vue
index b69ecc1dce6..952ffa1fa0e 100644
--- a/app/assets/javascripts/vue_shared/components/file_icon.vue
+++ b/app/assets/javascripts/vue_shared/components/file_icon.vue
@@ -75,7 +75,7 @@ export default {
<svg v-if="!loading && !folder" :class="[iconSizeClass, cssClasses]">
<use v-bind="{ 'xlink:href': spriteHref }" />
</svg>
- <icon v-if="!loading && folder" :name="folderIconName" :size="size" css-classes="folder-icon" />
+ <icon v-if="!loading && folder" :name="folderIconName" :size="size" class="folder-icon" />
<gl-loading-icon v-if="loading" :inline="true" />
</span>
</template>
diff --git a/app/assets/javascripts/vue_shared/components/file_row.vue b/app/assets/javascripts/vue_shared/components/file_row.vue
index f49e69c473b..341c9534763 100644
--- a/app/assets/javascripts/vue_shared/components/file_row.vue
+++ b/app/assets/javascripts/vue_shared/components/file_row.vue
@@ -131,7 +131,7 @@ export default {
</script>
<template>
- <div v-if="!file.moved">
+ <div>
<file-header v-if="file.isHeader" :path="file.path" />
<div
v-else
diff --git a/app/assets/javascripts/vue_shared/components/gl_modal.vue b/app/assets/javascripts/vue_shared/components/gl_modal.vue
index 438851e5ac7..4b91d4c00e3 100644
--- a/app/assets/javascripts/vue_shared/components/gl_modal.vue
+++ b/app/assets/javascripts/vue_shared/components/gl_modal.vue
@@ -1,117 +1,6 @@
<script>
-import $ from 'jquery';
+// This file was only introduced to not break master and shall be delete soon.
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
-const buttonVariants = ['danger', 'primary', 'success', 'warning'];
-const sizeVariants = ['sm', 'md', 'lg', 'xl'];
-
-export default {
- name: 'GlModal',
- props: {
- id: {
- type: String,
- required: false,
- default: null,
- },
- modalSize: {
- type: String,
- required: false,
- default: 'md',
- validator: value => sizeVariants.includes(value),
- },
- headerTitleText: {
- type: String,
- required: false,
- default: '',
- },
- footerPrimaryButtonVariant: {
- type: String,
- required: false,
- default: 'primary',
- validator: value => buttonVariants.includes(value),
- },
- footerPrimaryButtonText: {
- type: String,
- required: false,
- default: '',
- },
- },
- computed: {
- modalSizeClass() {
- return this.modalSize === 'md' ? '' : `modal-${this.modalSize}`;
- },
- },
- mounted() {
- $(this.$el)
- .on('shown.bs.modal', this.opened)
- .on('hidden.bs.modal', this.closed);
- },
- beforeDestroy() {
- $(this.$el)
- .off('shown.bs.modal', this.opened)
- .off('hidden.bs.modal', this.closed);
- },
- methods: {
- emitCancel(event) {
- this.$emit('cancel', event);
- },
- emitSubmit(event) {
- this.$emit('submit', event);
- },
- opened() {
- this.$emit('open');
- },
- closed() {
- this.$emit('closed');
- },
- },
-};
+export default DeprecatedModal2;
</script>
-
-<template>
- <div :id="id" class="modal fade" tabindex="-1" role="dialog">
- <div :class="modalSizeClass" class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <slot name="header">
- <h4 class="modal-title">
- <slot name="title"> {{ headerTitleText }} </slot>
- </h4>
- <button
- :aria-label="s__('Modal|Close')"
- type="button"
- class="close js-modal-close-action"
- data-dismiss="modal"
- @click="emitCancel($event)"
- >
- <span aria-hidden="true">&times;</span>
- </button>
- </slot>
- </div>
-
- <div class="modal-body"><slot></slot></div>
-
- <div class="modal-footer">
- <slot name="footer">
- <button
- type="button"
- class="btn js-modal-cancel-action qa-modal-cancel-button"
- data-dismiss="modal"
- @click="emitCancel($event)"
- >
- {{ s__('Modal|Cancel') }}
- </button>
- <button
- :class="`btn-${footerPrimaryButtonVariant}`"
- type="button"
- class="btn js-modal-primary-action qa-modal-primary-button"
- data-dismiss="modal"
- @click="emitSubmit($event)"
- >
- {{ footerPrimaryButtonText }}
- </button>
- </slot>
- </div>
- </div>
- </div>
- </div>
-</template>
diff --git a/app/assets/javascripts/vue_shared/components/icon.vue b/app/assets/javascripts/vue_shared/components/icon.vue
index fa89473da62..73f4dfef062 100644
--- a/app/assets/javascripts/vue_shared/components/icon.vue
+++ b/app/assets/javascripts/vue_shared/components/icon.vue
@@ -27,7 +27,7 @@ if (process.env.NODE_ENV !== 'production') {
* <icon
* name="retry"
* :size="32"
- * css-classes="top"
+ * class="top"
* />
*/
export default {
@@ -42,45 +42,7 @@ export default {
type: Number,
required: false,
default: 16,
- validator(value) {
- return validSizes.includes(value);
- },
- },
-
- cssClasses: {
- type: String,
- required: false,
- default: '',
- },
-
- width: {
- type: Number,
- required: false,
- default: null,
- },
-
- height: {
- type: Number,
- required: false,
- default: null,
- },
-
- y: {
- type: Number,
- required: false,
- default: null,
- },
-
- x: {
- type: Number,
- required: false,
- default: null,
- },
-
- tabIndex: {
- type: String,
- required: false,
- default: null,
+ validator: value => validSizes.includes(value),
},
},
@@ -99,15 +61,7 @@ export default {
</script>
<template>
- <svg
- :class="[iconSizeClass, iconTestClass, cssClasses]"
- :width="width"
- :height="height"
- :x="x"
- :y="y"
- :tabindex="tabIndex"
- aria-hidden="true"
- >
+ <svg :class="[iconSizeClass, iconTestClass]" aria-hidden="true">
<use v-bind="{ 'xlink:href': spriteHref }" />
</svg>
</template>
diff --git a/app/assets/javascripts/vue_shared/components/issue/related_issuable_item.vue b/app/assets/javascripts/vue_shared/components/issue/related_issuable_item.vue
index b76679960ca..5d7e9557aff 100644
--- a/app/assets/javascripts/vue_shared/components/issue/related_issuable_item.vue
+++ b/app/assets/javascripts/vue_shared/components/issue/related_issuable_item.vue
@@ -63,7 +63,7 @@ export default {
<icon
v-if="hasState"
ref="iconElementXL"
- :css-classes="iconClass"
+ :class="iconClass"
:name="iconName"
:size="16"
:title="stateTitle"
@@ -100,7 +100,7 @@ export default {
<span ref="iconElement">
<icon
v-if="hasState"
- :css-classes="iconClass"
+ :class="iconClass"
:name="iconName"
:title="stateTitle"
:aria-label="state"
@@ -159,7 +159,8 @@ export default {
v-gl-tooltip
:disabled="removeDisabled"
type="button"
- class="btn btn-default btn-svg btn-item-remove js-issue-item-remove-button qa-remove-issue-button mr-xl-0 align-self-xl-center"
+ class="btn btn-default btn-svg btn-item-remove js-issue-item-remove-button mr-xl-0 align-self-xl-center"
+ data-qa-selector="remove_related_issue_button"
:title="__('Remove')"
:aria-label="__('Remove')"
@click="onRemoveRequest"
diff --git a/app/assets/javascripts/vue_shared/components/pagination/table_pagination.vue b/app/assets/javascripts/vue_shared/components/pagination/table_pagination.vue
index 1e2d4ffa7e3..e89638130f5 100644
--- a/app/assets/javascripts/vue_shared/components/pagination/table_pagination.vue
+++ b/app/assets/javascripts/vue_shared/components/pagination/table_pagination.vue
@@ -27,8 +27,7 @@ export default {
/**
pageInfo will come from the headers of the API call
- in the `.then` clause of the VueResource API call
- there should be a function that contructs the pageInfo for this component
+ there should be a function that constructs the pageInfo for this component
This is an example:
diff --git a/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue b/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue
index 7f0345c7ec0..478e44d104c 100644
--- a/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue
+++ b/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue
@@ -52,7 +52,7 @@ export default {
this.$emit('projectClicked', project);
},
isSelected(project) {
- return Boolean(_.findWhere(this.selectedProjects, { id: project.id }));
+ return Boolean(_.find(this.selectedProjects, { id: project.id }));
},
onInput: _.debounce(function debouncedOnInput() {
this.$emit('searched', this.searchQuery);
diff --git a/app/assets/javascripts/vue_shared/components/recaptcha_eventhub.js b/app/assets/javascripts/vue_shared/components/recaptcha_eventhub.js
new file mode 100644
index 00000000000..a4e004c3341
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/components/recaptcha_eventhub.js
@@ -0,0 +1,21 @@
+import Vue from 'vue';
+
+// see recaptcha_tags in app/views/shared/_recaptcha_form.html.haml
+export const callbackName = 'recaptchaDialogCallback';
+
+export const eventHub = new Vue();
+
+const throwDuplicateCallbackError = () => {
+ throw new Error(`${callbackName} is already defined!`);
+};
+
+if (window[callbackName]) {
+ throwDuplicateCallbackError();
+}
+
+const callback = () => eventHub.$emit('submit');
+
+Object.defineProperty(window, callbackName, {
+ get: () => callback,
+ set: throwDuplicateCallbackError,
+});
diff --git a/app/assets/javascripts/vue_shared/components/recaptcha_modal.vue b/app/assets/javascripts/vue_shared/components/recaptcha_modal.vue
index f0aae20477b..25701df33f3 100644
--- a/app/assets/javascripts/vue_shared/components/recaptcha_modal.vue
+++ b/app/assets/javascripts/vue_shared/components/recaptcha_modal.vue
@@ -1,5 +1,6 @@
<script>
import DeprecatedModal from './deprecated_modal.vue';
+import { eventHub } from './recaptcha_eventhub';
export default {
name: 'RecaptchaModal',
@@ -30,14 +31,15 @@ export default {
},
mounted() {
- if (window.recaptchaDialogCallback) {
- throw new Error('recaptchaDialogCallback is already defined!');
+ eventHub.$on('submit', this.submit);
+
+ if (this.html) {
+ this.appendRecaptchaScript();
}
- window.recaptchaDialogCallback = this.submit.bind(this);
},
beforeDestroy() {
- window.recaptchaDialogCallback = null;
+ eventHub.$off('submit', this.submit);
},
methods: {
diff --git a/app/assets/javascripts/vue_shared/components/sidebar/labels_select/base.vue b/app/assets/javascripts/vue_shared/components/sidebar/labels_select/base.vue
index 9c258c4651f..13795eff714 100644
--- a/app/assets/javascripts/vue_shared/components/sidebar/labels_select/base.vue
+++ b/app/assets/javascripts/vue_shared/components/sidebar/labels_select/base.vue
@@ -167,7 +167,7 @@ dropdown-menu-labels dropdown-menu-selectable"
<div class="dropdown-page-one">
<dropdown-header v-if="showCreate" />
<dropdown-search-input />
- <div class="dropdown-content"></div>
+ <div class="dropdown-content" data-qa-selector="labels_dropdown_content"></div>
<div class="dropdown-loading"><gl-loading-icon /></div>
<dropdown-footer
v-if="showCreate"
diff --git a/app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_title.vue b/app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_title.vue
index cb53273c786..574b63cf8a6 100644
--- a/app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_title.vue
+++ b/app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_title.vue
@@ -14,7 +14,11 @@ export default {
{{ __('Labels') }}
<template v-if="canEdit">
<i aria-hidden="true" class="fa fa-spinner fa-spin block-loading" data-hidden="true"> </i>
- <button type="button" class="edit-link btn btn-blank float-right js-sidebar-dropdown-toggle">
+ <button
+ type="button"
+ class="edit-link btn btn-blank float-right js-sidebar-dropdown-toggle"
+ data-qa-selector="labels_edit_button"
+ >
{{ __('Edit') }}
</button>
</template>
diff --git a/app/assets/javascripts/vue_shared/components/toggle_button.vue b/app/assets/javascripts/vue_shared/components/toggle_button.vue
index de70fa2182b..1de866bed37 100644
--- a/app/assets/javascripts/vue_shared/components/toggle_button.vue
+++ b/app/assets/javascripts/vue_shared/components/toggle_button.vue
@@ -74,7 +74,7 @@ export default {
@click="toggleFeature"
>
<gl-loading-icon class="loading-icon" />
- <span class="toggle-icon"> <icon :name="toggleIcon" css-classes="toggle-icon-svg" /> </span>
+ <span class="toggle-icon"> <icon :name="toggleIcon" class="toggle-icon-svg" /> </span>
</button>
</label>
</template>
diff --git a/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue b/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue
index a60d5eb491e..7c7d46ee759 100644
--- a/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue
+++ b/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue
@@ -71,15 +71,11 @@ export default {
</div>
<div class="text-secondary">
<div v-if="user.bio" class="js-bio d-flex mb-1">
- <icon name="profile" css-classes="category-icon flex-shrink-0" />
+ <icon name="profile" class="category-icon flex-shrink-0" />
<span class="ml-1">{{ user.bio }}</span>
</div>
<div v-if="user.organization" class="js-organization d-flex mb-1">
- <icon
- v-show="!jobInfoIsLoading"
- name="work"
- css-classes="category-icon flex-shrink-0"
- />
+ <icon v-show="!jobInfoIsLoading" name="work" class="category-icon flex-shrink-0" />
<span class="ml-1">{{ user.organization }}</span>
</div>
<gl-skeleton-loading
@@ -92,7 +88,7 @@ export default {
<icon
v-show="!locationIsLoading && user.location"
name="location"
- css-classes="category-icon flex-shrink-0"
+ class="category-icon flex-shrink-0"
/>
<span class="ml-1">{{ user.location }}</span>
<gl-skeleton-loading
diff --git a/app/assets/javascripts/vue_shared/directives/track_event.js b/app/assets/javascripts/vue_shared/directives/track_event.js
new file mode 100644
index 00000000000..d1c05c5c267
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/directives/track_event.js
@@ -0,0 +1,20 @@
+import Tracking from '~/tracking';
+
+export default {
+ bind(el, binding) {
+ el.dataset.trackingOptions = JSON.stringify(binding.value || {});
+
+ el.addEventListener('click', () => {
+ const { category, action, label, property, value } = JSON.parse(el.dataset.trackingOptions);
+ if (!category || !action) {
+ return;
+ }
+ Tracking.event(category, action, { label, property, value });
+ });
+ },
+ update(el, binding) {
+ if (binding.value !== binding.oldValue) {
+ el.dataset.trackingOptions = JSON.stringify(binding.value || {});
+ }
+ },
+};
diff --git a/app/assets/javascripts/vue_shared/gl_feature_flags_plugin.js b/app/assets/javascripts/vue_shared/gl_feature_flags_plugin.js
new file mode 100644
index 00000000000..3488a44bd0f
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/gl_feature_flags_plugin.js
@@ -0,0 +1,7 @@
+export default Vue => {
+ Vue.mixin({
+ provide: {
+ glFeatures: { ...((window.gon && window.gon.features) || {}) },
+ },
+ });
+};
diff --git a/app/assets/javascripts/vue_shared/mixins/gl_feature_flags_mixin.js b/app/assets/javascripts/vue_shared/mixins/gl_feature_flags_mixin.js
new file mode 100644
index 00000000000..dc8a63f26ac
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/mixins/gl_feature_flags_mixin.js
@@ -0,0 +1,8 @@
+export default () => ({
+ inject: {
+ glFeatures: {
+ from: 'glFeatures',
+ default: () => ({}),
+ },
+ },
+});
diff --git a/app/assets/javascripts/vue_shared/plugins/global_toast.js b/app/assets/javascripts/vue_shared/plugins/global_toast.js
index c0de1cdc615..7a2e5d80a5d 100644
--- a/app/assets/javascripts/vue_shared/plugins/global_toast.js
+++ b/app/assets/javascripts/vue_shared/plugins/global_toast.js
@@ -2,7 +2,8 @@ import Vue from 'vue';
import { GlToast } from '@gitlab/ui';
Vue.use(GlToast);
+const instance = new Vue();
export default function showGlobalToast(...args) {
- return Vue.toasted.show(...args);
+ return instance.$toast.show(...args);
}
diff --git a/app/assets/javascripts/vue_shared/vue_resource_interceptor.js b/app/assets/javascripts/vue_shared/vue_resource_interceptor.js
deleted file mode 100644
index 754025207c8..00000000000
--- a/app/assets/javascripts/vue_shared/vue_resource_interceptor.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import Vue from 'vue';
-import VueResource from 'vue-resource';
-import csrf from '../lib/utils/csrf';
-
-Vue.use(VueResource);
-
-// Maintain a global counter for active requests
-// see: spec/support/wait_for_requests.rb
-Vue.http.interceptors.push((request, next) => {
- window.activeVueResources = window.activeVueResources || 0;
- window.activeVueResources += 1;
-
- next(() => {
- window.activeVueResources -= 1;
- });
-});
-
-// Inject CSRF token and parse headers.
-// New Vue Resource version uses Headers, we are expecting a plain object to render pagination
-// and polling.
-Vue.http.interceptors.push((request, next) => {
- request.headers.set(csrf.headerKey, csrf.token);
-
- next(response => {
- // Headers object has a `forEach` property that iterates through all values.
- const headers = {};
-
- response.headers.forEach((value, key) => {
- headers[key] = value;
- });
- // eslint-disable-next-line no-param-reassign
- response.headers = headers;
- });
-});
diff --git a/app/assets/javascripts/zen_mode.js b/app/assets/javascripts/zen_mode.js
index 5438572eadf..7a60ab1380f 100644
--- a/app/assets/javascripts/zen_mode.js
+++ b/app/assets/javascripts/zen_mode.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, prefer-arrow-callback, consistent-return, camelcase, class-methods-use-this */
+/* eslint-disable func-names, consistent-return, camelcase, class-methods-use-this */
// Zen Mode (full screen) textarea
//
@@ -39,11 +39,11 @@ export default class ZenMode {
constructor() {
this.active_backdrop = null;
this.active_textarea = null;
- $(document).on('click', '.js-zen-enter', function(e) {
+ $(document).on('click', '.js-zen-enter', e => {
e.preventDefault();
return $(e.currentTarget).trigger('zen_mode:enter');
});
- $(document).on('click', '.js-zen-leave', function(e) {
+ $(document).on('click', '.js-zen-leave', e => {
e.preventDefault();
return $(e.currentTarget).trigger('zen_mode:leave');
});
@@ -67,7 +67,7 @@ export default class ZenMode {
};
})(this),
);
- $(document).on('keydown', function(e) {
+ $(document).on('keydown', e => {
// Esc
if (e.keyCode === 27) {
e.preventDefault();
diff --git a/app/assets/stylesheets/components/release_block.scss b/app/assets/stylesheets/components/release_block.scss
new file mode 100644
index 00000000000..7e82d0960d7
--- /dev/null
+++ b/app/assets/stylesheets/components/release_block.scss
@@ -0,0 +1,3 @@
+.release-block {
+ transition: background-color 1s linear;
+}
diff --git a/app/assets/stylesheets/framework.scss b/app/assets/stylesheets/framework.scss
index 82b4ec750ff..56a88ca44db 100644
--- a/app/assets/stylesheets/framework.scss
+++ b/app/assets/stylesheets/framework.scss
@@ -28,6 +28,7 @@
@import 'framework/issue_box';
@import 'framework/lists';
@import 'framework/logo';
+@import 'framework/job_log';
@import 'framework/markdown_area';
@import 'framework/media_object';
@import 'framework/modal';
@@ -67,3 +68,4 @@
@import 'framework/flex_grid';
@import 'framework/system_messages';
@import "framework/spinner";
+@import 'framework/card';
diff --git a/app/assets/stylesheets/framework/animations.scss b/app/assets/stylesheets/framework/animations.scss
index 6f5a2e561af..d222fc4aefe 100644
--- a/app/assets/stylesheets/framework/animations.scss
+++ b/app/assets/stylesheets/framework/animations.scss
@@ -11,25 +11,10 @@
@include webkit-prefix(animation-duration, 1s);
@include webkit-prefix(animation-fill-mode, both);
- &.infinite {
- @include webkit-prefix(animation-iteration-count, infinite);
- }
-
&.once {
@include webkit-prefix(animation-iteration-count, 1);
}
- &.hinge {
- @include webkit-prefix(animation-duration, 2s);
- }
-
- &.flipOutX,
- &.flipOutY,
- &.bounceIn,
- &.bounceOut {
- @include webkit-prefix(animation-duration, 0.75s);
- }
-
&.short {
@include webkit-prefix(animation-duration, 321ms);
@include webkit-prefix(animation-fill-mode, none);
diff --git a/app/assets/stylesheets/framework/blank.scss b/app/assets/stylesheets/framework/blank.scss
index cbd390e7145..7dd7ab339dd 100644
--- a/app/assets/stylesheets/framework/blank.scss
+++ b/app/assets/stylesheets/framework/blank.scss
@@ -14,13 +14,12 @@
.blank-state-row {
display: flex;
flex-wrap: wrap;
- justify-content: space-around;
- height: 100%;
+ justify-content: space-between;
}
.blank-state-welcome {
text-align: center;
- padding: 20px 0 40px;
+ padding: $gl-padding 0 ($gl-padding * 2);
.blank-state-welcome-title {
font-size: 24px;
@@ -32,23 +31,9 @@
}
.blank-state-link {
- display: block;
color: $gl-text-color;
- flex: 0 0 100%;
margin-bottom: 15px;
- @include media-breakpoint-up(sm) {
- flex: 0 0 49%;
-
- &:nth-child(odd) {
- margin-right: 5px;
- }
-
- &:nth-child(even) {
- margin-left: 5px;
- }
- }
-
&:hover {
background-color: $gray-light;
text-decoration: none;
@@ -63,15 +48,25 @@
}
.blank-state {
- padding: 20px;
+ display: flex;
+ align-items: center;
+ padding: 20px 50px;
border: 1px solid $border-color;
border-radius: $border-radius-default;
+ min-height: 240px;
+ margin-bottom: $gl-padding;
+ width: calc(50% - #{$gl-padding-8});
+
+ @include media-breakpoint-down(sm) {
+ width: 100%;
+ flex-direction: column;
+ justify-content: center;
+ padding: 50px 20px;
+
+ .column-small & {
+ width: 100%;
+ }
- @include media-breakpoint-up(sm) {
- display: flex;
- height: 100%;
- align-items: center;
- padding: 50px 30px;
}
}
@@ -90,7 +85,7 @@
}
.blank-state-body {
- @include media-breakpoint-down(xs) {
+ @include media-breakpoint-down(sm) {
text-align: center;
margin-top: 20px;
}
@@ -121,9 +116,3 @@
}
}
}
-
-@include media-breakpoint-down(xs) {
- .blank-state-icon svg {
- width: 315px;
- }
-}
diff --git a/app/assets/stylesheets/framework/card.scss b/app/assets/stylesheets/framework/card.scss
new file mode 100644
index 00000000000..9911b926cbb
--- /dev/null
+++ b/app/assets/stylesheets/framework/card.scss
@@ -0,0 +1,8 @@
+.card-header {
+ &:first-child {
+ // intended use case: card with only a header (for example empty related issues)
+ &:last-child {
+ @include border-radius($card-inner-border-radius);
+ }
+ }
+}
diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss
index b95978b6966..4b89a2f2b04 100644
--- a/app/assets/stylesheets/framework/common.scss
+++ b/app/assets/stylesheets/framework/common.scss
@@ -55,6 +55,10 @@
background-color: $gray-light;
}
+.bg-line-target-blue {
+ background: $line-target-blue;
+}
+
.text-break-word {
word-break: break-all;
}
@@ -210,18 +214,26 @@ li.note {
@mixin message($background-color, $border-color, $text-color) {
border-left: 4px solid $border-color;
color: $text-color;
- padding: 10px;
- margin-bottom: 10px;
- background: $background-color;
- padding-left: 20px;
+ padding: $gl-padding $gl-padding-24;
+ margin-bottom: $gl-padding-12;
+ background-color: $background-color;
&.centered {
text-align: center;
}
+
+ .close {
+ svg {
+ width: $gl-font-size-large;
+ height: $gl-font-size-large;
+ }
+
+ color: inherit;
+ }
}
.warning_message {
- @include message($orange-100, $orange-200, $orange-700);
+ @include message($orange-100, $orange-200, $orange-800);
}
.danger_message {
@@ -387,6 +399,7 @@ img.emoji {
.prepend-top-16 { margin-top: 16px; }
.prepend-top-20 { margin-top: 20px; }
.prepend-top-32 { margin-top: 32px; }
+.prepend-left-2 { margin-left: 2px; }
.prepend-left-4 { margin-left: 4px; }
.prepend-left-5 { margin-left: 5px; }
.prepend-left-8 { margin-left: 8px; }
@@ -427,6 +440,7 @@ img.emoji {
.flex-no-shrink { flex-shrink: 0; }
.ws-initial { white-space: initial; }
.ws-normal { white-space: normal; }
+.ws-pre-wrap { white-space: pre-wrap; }
.overflow-auto { overflow: auto; }
.d-flex-center {
@@ -439,6 +453,8 @@ img.emoji {
.w-0 { width: 0; }
.w-8em { width: 8em; }
.w-3rem { width: 3rem; }
+.w-15p { width: 15%; }
+.w-70p { width: 70%; }
.h-12em { height: 12em; }
.h-32-px { height: 32px;}
@@ -544,3 +560,6 @@ img.emoji {
}
}
}
+
+.gl-font-size-small { font-size: $gl-font-size-small; }
+.gl-line-height-24 { line-height: $gl-line-height-24; }
diff --git a/app/assets/stylesheets/framework/contextual_sidebar.scss b/app/assets/stylesheets/framework/contextual_sidebar.scss
index 3238b01c6c0..0e29b0b7dda 100644
--- a/app/assets/stylesheets/framework/contextual_sidebar.scss
+++ b/app/assets/stylesheets/framework/contextual_sidebar.scss
@@ -141,7 +141,7 @@
}
.sidebar-top-level-items > li > a {
- min-height: 44px;
+ min-height: 45px;
}
.fly-out-top-item {
@@ -177,7 +177,7 @@
transition: padding $sidebar-transition-duration;
display: flex;
align-items: center;
- padding: 12px 15px;
+ padding: 12px $gl-padding;
color: $gl-text-color-secondary;
}
@@ -341,7 +341,7 @@
> a {
margin-left: 4px;
// Subtract width of left border on active element
- padding-left: 11px;
+ padding-left: $gl-padding-12;
}
.badge.badge-pill {
diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss
index 29f63e9578d..ce74aa6ed02 100644
--- a/app/assets/stylesheets/framework/dropdowns.scss
+++ b/app/assets/stylesheets/framework/dropdowns.scss
@@ -326,8 +326,9 @@
}
.dropdown-header {
- color: $gl-text-color-secondary;
+ color: $black;
font-size: 13px;
+ font-weight: $gl-font-weight-bold;
line-height: $gl-line-height;
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
}
diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss
index 536a26a6ffe..487fbf0fcff 100644
--- a/app/assets/stylesheets/framework/files.scss
+++ b/app/assets/stylesheets/framework/files.scss
@@ -108,12 +108,14 @@
background: $white-light;
&.image_file,
+ &.audio,
&.video {
background: $gray-darker;
text-align: center;
padding: 30px;
img,
+ audio,
video {
max-width: 80%;
}
@@ -479,3 +481,8 @@ span.idiff {
padding: $gl-padding;
}
}
+
+.jupyter-notebook-scrolled {
+ overflow-y: auto;
+ max-height: 20rem;
+}
diff --git a/app/assets/stylesheets/framework/flash.scss b/app/assets/stylesheets/framework/flash.scss
index 7e7b08797b2..8fc2fd5f53b 100644
--- a/app/assets/stylesheets/framework/flash.scss
+++ b/app/assets/stylesheets/framework/flash.scss
@@ -1,7 +1,6 @@
$notification-box-shadow-color: rgba(0, 0, 0, 0.25);
.flash-container {
- cursor: pointer;
margin: 0;
margin-bottom: $gl-padding;
font-size: 14px;
@@ -12,19 +11,24 @@ $notification-box-shadow-color: rgba(0, 0, 0, 0.25);
position: sticky;
position: -webkit-sticky;
top: $flash-container-top;
- z-index: 200;
+ z-index: 251;
.flash-content {
box-shadow: 0 2px 4px 0 $notification-box-shadow-color;
}
}
- .close-icon {
- width: 16px;
- height: 16px;
+ .close-icon-wrapper {
+ padding: ($gl-btn-padding + $gl-padding-4) $gl-padding $gl-btn-padding;
position: absolute;
- right: $gl-padding;
- top: $gl-padding;
+ right: 0;
+ top: 0;
+ cursor: pointer;
+
+ .close-icon {
+ width: 16px;
+ height: 16px;
+ }
}
.flash-notice,
diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss
index ca737c53318..1195e467192 100644
--- a/app/assets/stylesheets/framework/header.scss
+++ b/app/assets/stylesheets/framework/header.scss
@@ -523,6 +523,7 @@
margin-top: 4px;
color: $gl-text-color;
left: auto;
+ max-height: $dropdown-max-height-lg;
li.current-user {
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
diff --git a/app/assets/stylesheets/framework/icons.scss b/app/assets/stylesheets/framework/icons.scss
index 7332c4981d2..a53f5d85949 100644
--- a/app/assets/stylesheets/framework/icons.scss
+++ b/app/assets/stylesheets/framework/icons.scss
@@ -31,7 +31,16 @@
}
}
-.ci-status-icon-preparing,
+.ci-status-icon-preparing {
+ svg {
+ fill: $gray-500;
+ }
+
+ &.add-border {
+ @include borderless-status-icon($gray-500);
+ }
+}
+
.ci-status-icon-running {
svg {
fill: $blue-400;
diff --git a/app/assets/stylesheets/framework/job_log.scss b/app/assets/stylesheets/framework/job_log.scss
index 074b2405217..4a57a458c50 100644
--- a/app/assets/stylesheets/framework/job_log.scss
+++ b/app/assets/stylesheets/framework/job_log.scss
@@ -12,21 +12,22 @@
}
.log-line {
- padding: 1px $gl-padding 1px $job-log-line-padding;
+ padding: 1px $gl-padding-8 1px $job-log-line-padding;
+ min-height: $gl-line-height-20;
}
.line-number {
- color: $gl-text-color-inverted;
+ color: $gl-gray-500;
padding: 0 $gl-padding-8;
min-width: $job-line-number-width;
- margin-left: -$job-line-number-width;
+ margin-left: -$job-line-number-margin;
padding-right: 1em;
&:hover,
&:active,
&:visited {
text-decoration: underline;
- color: $gl-text-color-inverted;
+ color: $gl-gray-500;
}
}
diff --git a/app/assets/stylesheets/framework/selects.scss b/app/assets/stylesheets/framework/selects.scss
index 81ccea1e01f..2289f0a7011 100644
--- a/app/assets/stylesheets/framework/selects.scss
+++ b/app/assets/stylesheets/framework/selects.scss
@@ -245,7 +245,7 @@
.select2-highlighted {
.group-result {
.group-path {
- color: $white-light;
+ color: $gray-800;
}
}
}
diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss
index 43d0e51e4c9..b9cfcf6ce5c 100644
--- a/app/assets/stylesheets/framework/sidebar.scss
+++ b/app/assets/stylesheets/framework/sidebar.scss
@@ -171,7 +171,7 @@
position: absolute;
top: $gl-padding;
bottom: $gl-padding;
- left: map-get($spacers, 2) - 1px;
+ left: map-get($spacers, 2) - px-to-rem(1px);
}
&-row {
@@ -187,7 +187,7 @@
* 2px extra is to give a little more height than needed
* to hide timeline line before/after the element starts/ends
*/
- height: map-get($spacers, 4) + 2px;
+ height: map-get($spacers, 4) + px-to-rem(2px);
z-index: 1;
position: relative;
top: -3px;
diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss
index ba123ff9a67..3876d1c10d4 100644
--- a/app/assets/stylesheets/framework/typography.scss
+++ b/app/assets/stylesheets/framework/typography.scss
@@ -69,14 +69,6 @@
details {
margin-bottom: $gl-padding;
-
- summary {
- margin-bottom: $gl-padding;
- }
-
- *:first-child:not(summary) {
- margin-top: $gl-padding;
- }
}
// Single code lines should wrap
@@ -198,6 +190,141 @@
border-color: $gl-gray-200;
}
}
+
+ &.grid-none {
+ > thead > tr {
+ > th {
+ border-bottom-width: 0;
+ border-right-width: 0;
+ border-left-width: 0;
+
+ &:first-child {
+ border-left-width: 1px;
+ }
+
+ &:last-child {
+ border-right-width: 1px;
+ }
+ }
+ }
+
+ > tbody {
+ > tr > td {
+ border-width: 0;
+
+ &:first-child {
+ border-left-width: 1px;
+ }
+
+ &:last-child {
+ border-right-width: 1px;
+ }
+ }
+
+ > tr:last-child > td {
+ border-bottom-width: 1px;
+ }
+ }
+ }
+
+
+ &.grid-rows {
+ > thead > tr > th,
+ > tbody > tr > td {
+ border-right-width: 0;
+ border-left-width: 0;
+ }
+
+ > thead > tr {
+ > th:first-child {
+ border-left-width: 1px;
+ }
+
+ > th:last-child {
+ border-right-width: 1px;
+ }
+ }
+
+ > tbody > tr {
+ > td {
+ border-left-width: 0;
+ border-right-width: 0;
+ }
+
+ > td:first-child {
+ border-left-width: 1px;
+ }
+
+ > td:last-child {
+ border-right-width: 1px;
+ }
+ }
+ }
+
+ &.grid-cols {
+ > thead > tr > th {
+ border-bottom-width: 0;
+ }
+
+ > tbody > tr > td {
+ border-top-width: 0;
+ border-bottom-width: 0;
+ }
+
+ > tbody > tr:last-child > td {
+ border-bottom-width: 1px;
+ }
+ }
+
+ &.frame-sides {
+ > thead > tr > th {
+ border-top-width: 0;
+ }
+
+ > tbody > tr:last-child > td {
+ border-bottom-width: 0;
+ }
+ }
+
+ &.frame-topbot,
+ &.frame-ends {
+ > thead > tr > th:first-child,
+ > tbody > tr > td:first-child {
+ border-left-width: 0;
+ }
+
+ > thead > tr > th:last-child,
+ > tbody > tr > td:last-child {
+ border-right-width: 0;
+ }
+ }
+
+ &.frame-none {
+ > thead > tr > th {
+ border-top-width: 0;
+ }
+
+ > tbody > tr:last-child > td {
+ border-bottom-width: 0;
+ }
+
+ > thead > tr > th:first-child,
+ > tbody > tr > td:first-child {
+ border-left-width: 0;
+ }
+
+ > thead > tr > th:last-child,
+ > tbody > tr > td:last-child {
+ border-right-width: 0;
+ }
+ }
+
+ &.stripes-all tr,
+ &.stripes-odd tr:nth-of-type(odd),
+ &.stripes-even tr:nth-of-type(even),
+ &.stripes-hover tr:hover {
+ background: $gray-light;
+ }
}
table:dir(rtl) th {
@@ -397,7 +524,7 @@
}
}
- .prometheus-graph-embed {
+ .metrics-embed {
h3.popover-header {
/** Override <h3> .popover-header
* as embed metrics do not follow the same
diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss
index e77527ac130..dfc39d8e03b 100644
--- a/app/assets/stylesheets/framework/variables.scss
+++ b/app/assets/stylesheets/framework/variables.scss
@@ -606,9 +606,10 @@ $blame-blue: #254e77;
*/
$builds-trace-bg: #111;
$job-log-highlight-height: 18px;
-$job-log-line-padding: 62px;
-$job-line-number-width: 40px;
-$job-arrow-margin: 50px;
+$job-log-line-padding: 55px;
+$job-line-number-width: 50px;
+$job-line-number-margin: 43px;
+$job-arrow-margin: 55px;
/*
* Commit Page
@@ -832,6 +833,7 @@ Merge Requests
*/
$mr-tabs-height: 48px;
$mr-version-controls-height: 56px;
+$mr-widget-margin-left: 40px;
/*
Compare Branches
diff --git a/app/assets/stylesheets/pages/boards.scss b/app/assets/stylesheets/pages/boards.scss
index d540a347dde..2a7a53d8bd7 100644
--- a/app/assets/stylesheets/pages/boards.scss
+++ b/app/assets/stylesheets/pages/boards.scss
@@ -245,6 +245,7 @@
box-shadow: 0 1px 2px $issue-boards-card-shadow;
line-height: $gl-padding;
list-style: none;
+ position: relative;
&:not(:last-child) {
margin-bottom: $gl-padding-8;
@@ -255,6 +256,11 @@
background-color: $blue-50;
}
+ &.multi-select {
+ border-color: $blue-200;
+ background-color: $blue-50;
+ }
+
.badge {
border: 0;
outline: 0;
diff --git a/app/assets/stylesheets/pages/builds.scss b/app/assets/stylesheets/pages/builds.scss
index 73166940146..c7d51a2093a 100644
--- a/app/assets/stylesheets/pages/builds.scss
+++ b/app/assets/stylesheets/pages/builds.scss
@@ -124,26 +124,6 @@
float: left;
padding-left: $gl-padding-8;
}
-
- .section-start {
- display: inline;
- }
-
- .section-start,
- .section-header {
- &:hover {
- cursor: pointer;
-
- &::after {
- content: '';
- background-color: rgba($white-light, 0.2);
- left: 0;
- right: 0;
- position: absolute;
- height: $job-log-highlight-height;
- }
- }
- }
}
.build-header {
@@ -308,12 +288,8 @@
}
a {
- display: block;
padding: $gl-padding 10px $gl-padding 40px;
width: 270px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
&:hover {
color: $gl-text-color;
diff --git a/app/assets/stylesheets/pages/editor.scss b/app/assets/stylesheets/pages/editor.scss
index 655b297295a..65d0ce8c52e 100644
--- a/app/assets/stylesheets/pages/editor.scss
+++ b/app/assets/stylesheets/pages/editor.scss
@@ -47,14 +47,19 @@
margin-right: 10px;
}
- .new-file-name {
+ .new-file-name,
+ .new-file-path {
display: inline-block;
- max-width: 420px;
+ max-width: 250px;
float: left;
@media(max-width: map-get($grid-breakpoints, lg)-1) {
width: 180px;
}
+
+ @media (max-width: 1360px) {
+ width: auto;
+ }
}
.file-buttons {
@@ -98,13 +103,14 @@
}
-@include media-breakpoint-down(sm) {
+@include media-breakpoint-down(md) {
.file-editor {
.file-title {
display: block;
}
- .new-file-name {
+ .new-file-name,
+ .new-file-path {
max-width: none;
width: 100%;
margin-bottom: 3px;
@@ -146,20 +152,17 @@
vertical-align: top;
display: inline-block;
- @media(max-width: map-get($grid-breakpoints, md)-1) {
+ @media(max-width: map-get($grid-breakpoints, lg)-1) {
display: block;
margin: 19px 0 12px;
}
}
.template-selectors-menu {
- display: inline-block;
+ display: flex;
vertical-align: top;
- margin: 14px 0 0 16px;
- padding: 0 0 0 14px;
- border-left: 1px solid $border-color;
- @media(max-width: map-get($grid-breakpoints, md)-1) {
+ @media(max-width: map-get($grid-breakpoints, lg)-1) {
display: block;
width: 100%;
margin: 5px 0;
@@ -168,24 +171,11 @@
}
}
-.templates-selectors-label {
- display: inline-block;
- vertical-align: top;
- margin-top: 6px;
- line-height: 21px;
-
- @media(max-width: map-get($grid-breakpoints, md)-1) {
- display: block;
- margin: 5px 0;
- }
-}
-
.template-selector-dropdowns-wrap {
display: inline-block;
- margin: 5px 0 0 8px;
vertical-align: top;
- @media(max-width: map-get($grid-breakpoints, md)-1) {
+ @media(max-width: map-get($grid-breakpoints, lg)-1) {
display: block;
width: 100%;
margin: 0 0 16px;
@@ -199,9 +189,8 @@
display: inline-block;
vertical-align: top;
font-family: $regular_font;
- margin-top: -5px;
- @media(max-width: map-get($grid-breakpoints, md)-1) {
+ @media(max-width: map-get($grid-breakpoints, lg)-1) {
display: block;
width: 100%;
margin: 5px 0;
@@ -212,30 +201,22 @@
}
.dropdown-menu-toggle {
- width: 250px;
+ width: 200px;
vertical-align: top;
- @media(max-width: map-get($grid-breakpoints, md)-1) {
+ @media (max-width: map-get($grid-breakpoints, xl)-1) {
+ width: auto;
+ }
+
+ @media(max-width: map-get($grid-breakpoints, lg)-1) {
display: block;
width: 100%;
margin: 5px 0;
}
}
-
}
}
-.template-selectors-undo-menu {
- display: inline-block;
- margin: 7px 0 0 10px;
-
- @media(max-width: map-get($grid-breakpoints, md)-1) {
- display: block;
- width: 100%;
- margin: 20px 0;
- }
-
- button {
- margin: -4px 0 0 15px;
- }
+.editor-title-row {
+ margin-bottom: 20px;
}
diff --git a/app/assets/stylesheets/pages/experimental_separate_sign_up.scss b/app/assets/stylesheets/pages/experimental_separate_sign_up.scss
new file mode 100644
index 00000000000..8b1ec1ced35
--- /dev/null
+++ b/app/assets/stylesheets/pages/experimental_separate_sign_up.scss
@@ -0,0 +1,51 @@
+.signup-page {
+ .page-wrap {
+ background-color: $gray-light;
+ }
+
+ .gitlab-logo {
+ width: 80px;
+ height: 80px;
+ }
+
+ .signup-box-container {
+ max-width: 900px;
+
+ &.navless-container {
+ // overriding .devise-layout-html.navless-container to support the sticky footer
+ // without having a header on size xs
+ @include media-breakpoint-down(xs) {
+ padding: 65px $gl-padding; // height of footer
+ padding-top: $gl-padding;
+ }
+ }
+ }
+
+ .signup-heading h2 {
+ font-weight: $gl-font-weight-bold;
+
+ @include media-breakpoint-down(md) {
+ font-size: $gl-font-size-large;
+ }
+ }
+
+ .signup-box {
+ background-color: $white-light;
+ box-shadow: 0 0 0 1px $border-color;
+ border-radius: $border-radius;
+ }
+
+ .form-control {
+ &:active,
+ &:focus {
+ background-color: $white-light;
+ }
+ }
+
+ .devise-errors {
+ h2 {
+ font-size: $gl-font-size;
+ color: $red-700;
+ }
+ }
+}
diff --git a/app/assets/stylesheets/pages/help.scss b/app/assets/stylesheets/pages/help.scss
index ef872e693e0..ab281bc7f23 100644
--- a/app/assets/stylesheets/pages/help.scss
+++ b/app/assets/stylesheets/pages/help.scss
@@ -37,6 +37,7 @@
.documentation {
padding: 7px;
+ font-size: $gl-font-size-large;
}
.card.links-card {
diff --git a/app/assets/stylesheets/pages/login.scss b/app/assets/stylesheets/pages/login.scss
index d8aabecc036..7488a5b16a2 100644
--- a/app/assets/stylesheets/pages/login.scss
+++ b/app/assets/stylesheets/pages/login.scss
@@ -215,6 +215,12 @@
body {
// offset height of fixed header + 1 to avoid scroll
height: calc(100% - 51px);
+
+ // offset without the header
+ &.navless {
+ height: calc(100% - 11px);
+ }
+
margin: 0;
padding: 0;
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index e6feded1d4f..971f3b2c308 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -19,6 +19,8 @@
border-top: 1px solid $border-color;
}
+.mr-widget-margin-left { margin-left: $mr-widget-margin-left; }
+
.media-section {
@include media-breakpoint-down(md) {
align-items: flex-start;
diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss
index d67a0f83aa2..21a9f143039 100644
--- a/app/assets/stylesheets/pages/notes.scss
+++ b/app/assets/stylesheets/pages/notes.scss
@@ -245,14 +245,6 @@ $note-form-margin-left: 72px;
}
}
- .note-header {
- @include notes-media('max', map-get($grid-breakpoints, xs)) {
- .inline {
- display: block;
- }
- }
- }
-
.note-emoji-button {
position: relative;
line-height: 1;
@@ -363,10 +355,13 @@ $note-form-margin-left: 72px;
}
}
+ .timeline-icon {
+ float: left;
+ }
+
.system-note,
.discussion-filter-note {
.timeline-icon {
- float: left;
display: flex;
align-items: center;
background-color: $white-light;
@@ -635,10 +630,6 @@ $note-form-margin-left: 72px;
.note-headline-light {
display: inline;
-
- @include notes-media('max', map-get($grid-breakpoints, xs)) {
- display: block;
- }
}
.note-headline-light,
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index 801e9e7204c..b2c1d0b6dc5 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -877,11 +877,16 @@ pre.light-well {
flex-direction: column;
// Disable Flexbox for admin page
- &.admin-projects {
+ &.admin-projects,
+ &.group-settings-projects {
display: block;
.project-row {
display: block;
+
+ .description > p {
+ margin-bottom: 0;
+ }
}
}
@@ -996,6 +1001,14 @@ pre.light-well {
}
}
+ &:not(.with-pipeline-status) {
+ .icon-wrapper:first-of-type {
+ @include media-breakpoint-up(lg) {
+ margin-left: $gl-padding-32;
+ }
+ }
+ }
+
.ci-status-link {
display: inline-flex;
}
diff --git a/app/assets/stylesheets/pages/prometheus.scss b/app/assets/stylesheets/pages/prometheus.scss
index 72f1b5307ec..154e505f7a4 100644
--- a/app/assets/stylesheets/pages/prometheus.scss
+++ b/app/assets/stylesheets/pages/prometheus.scss
@@ -15,6 +15,51 @@
}
}
+.draggable {
+ &.draggable-enabled {
+ .draggable-panel {
+ border: $gray-200 1px solid;
+ border-radius: $border-radius-default;
+ margin: -1px;
+ cursor: grab;
+ }
+
+ .prometheus-graph {
+ // Make dragging easier by disabling use of chart
+ pointer-events: none;
+ }
+ }
+
+ &.sortable-chosen .draggable-panel {
+ background: $white-light;
+ box-shadow: 0 0 4px $gray-500;
+ }
+
+ .draggable-remove {
+ z-index: 1;
+
+ .draggable-remove-link {
+ cursor: pointer;
+ color: $gray-600;
+ background-color: $white-light;
+ }
+ }
+}
+
+.prometheus-graphs-header {
+ .time-window-dropdown-menu {
+ padding: $gl-padding $gl-padding 0 $gl-padding-12;
+ }
+
+ .time-window-dropdown-menu-container {
+ width: 360px;
+ }
+
+ .custom-time-range-form-group > label {
+ padding-bottom: $gl-padding;
+ }
+}
+
.prometheus-panel {
margin-top: 20px;
}
@@ -22,11 +67,11 @@
.prometheus-graph-group {
display: flex;
flex-wrap: wrap;
- padding: $gl-padding / 2;
+ margin-top: $gl-padding-8;
}
.prometheus-graph {
- padding: $gl-padding / 2;
+ padding: $gl-padding-8;
}
.prometheus-graph-embed {
@@ -39,11 +84,14 @@
align-items: center;
justify-content: space-between;
margin-bottom: $gl-padding-8;
+}
- h5 {
- font-size: $gl-font-size-large;
- margin: 0;
- }
+.prometheus-graph-title {
+ font-size: $gl-font-size-large;
+}
+
+.alert-current-setting {
+ max-width: 240px;
}
.prometheus-graph-cursor {
diff --git a/app/assets/stylesheets/pages/status.scss b/app/assets/stylesheets/pages/status.scss
index 613f643af3a..5d6a4b7cd13 100644
--- a/app/assets/stylesheets/pages/status.scss
+++ b/app/assets/stylesheets/pages/status.scss
@@ -37,6 +37,10 @@
}
}
+ &.ci-preparing {
+ @include status-color($gray-100, $gray-500, $gray-600);
+ }
+
&.ci-pending,
&.ci-failed-with-warnings,
&.ci-success-with-warnings {
@@ -44,7 +48,6 @@
}
&.ci-info,
- &.ci-preparing,
&.ci-running {
@include status-color($blue-100, $blue-500, $blue-600);
}
diff --git a/app/assets/stylesheets/pages/tags.scss b/app/assets/stylesheets/pages/tags.scss
new file mode 100644
index 00000000000..a6d30522ff7
--- /dev/null
+++ b/app/assets/stylesheets/pages/tags.scss
@@ -0,0 +1,3 @@
+.tag-release-link {
+ color: $blue-600 !important;
+}
diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb
index fbf63997b15..f7e33c09928 100644
--- a/app/controllers/admin/application_settings_controller.rb
+++ b/app/controllers/admin/application_settings_controller.rb
@@ -6,9 +6,9 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
before_action :set_application_setting
before_action :whitelist_query_limiting, only: [:usage_data]
- VALID_SETTING_PANELS = %w(general integrations repository templates
+ VALID_SETTING_PANELS = %w(general integrations repository
ci_cd reporting metrics_and_profiling
- network geo preferences).freeze
+ network preferences).freeze
VALID_SETTING_PANELS.each do |action|
define_method(action) { perform_update if submitted? }
@@ -145,10 +145,15 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
end
def render_update_error
- action = VALID_SETTING_PANELS.include?(action_name) ? action_name : :general
+ action = valid_setting_panels.include?(action_name) ? action_name : :general
render action
end
+
+ # overridden in EE
+ def valid_setting_panels
+ VALID_SETTING_PANELS
+ end
end
Admin::ApplicationSettingsController.prepend_if_ee('EE::Admin::ApplicationSettingsController')
diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb
index c36bbaab23b..f24ce9b5d03 100644
--- a/app/controllers/admin/dashboard_controller.rb
+++ b/app/controllers/admin/dashboard_controller.rb
@@ -2,6 +2,7 @@
class Admin::DashboardController < Admin::ApplicationController
include CountHelper
+ helper_method :show_license_breakdown?
COUNTED_ITEMS = [Project, User, Group].freeze
@@ -13,6 +14,10 @@ class Admin::DashboardController < Admin::ApplicationController
@groups = Group.order_id_desc.with_route.limit(10)
end
# rubocop: enable CodeReuse/ActiveRecord
+
+ def show_license_breakdown?
+ false
+ end
end
Admin::DashboardController.prepend_if_ee('EE::Admin::DashboardController')
diff --git a/app/controllers/admin/sessions_controller.rb b/app/controllers/admin/sessions_controller.rb
new file mode 100644
index 00000000000..1f946e41995
--- /dev/null
+++ b/app/controllers/admin/sessions_controller.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class Admin::SessionsController < ApplicationController
+ include InternalRedirect
+
+ before_action :user_is_admin!
+
+ def new
+ # Renders a form in which the admin can enter their password
+ end
+
+ def create
+ if current_user_mode.enable_admin_mode!(password: params[:password])
+ redirect_location = stored_location_for(:redirect) || admin_root_path
+ redirect_to safe_redirect_path(redirect_location)
+ else
+ flash.now[:alert] = _('Invalid Login or password')
+ render :new
+ end
+ end
+
+ def destroy
+ current_user_mode.disable_admin_mode!
+
+ redirect_to root_path, status: :found, notice: _('Admin mode disabled')
+ end
+
+ private
+
+ def user_is_admin!
+ render_404 unless current_user&.admin?
+ end
+end
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 61d36d1efc2..4c1ac8f206a 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -58,6 +58,22 @@ class Admin::UsersController < Admin::ApplicationController
end
end
+ def activate
+ return redirect_back_or_admin_user(notice: _("Error occurred. A blocked user must be unblocked to be activated")) if user.blocked?
+
+ user.activate
+ redirect_back_or_admin_user(notice: _("Successfully activated"))
+ end
+
+ def deactivate
+ return redirect_back_or_admin_user(notice: _("Error occurred. A blocked user cannot be deactivated")) if user.blocked?
+ return redirect_back_or_admin_user(notice: _("Successfully deactivated")) if user.deactivated?
+ return redirect_back_or_admin_user(notice: _("The user you are trying to deactivate has been active in the past %{minimum_inactive_days} days and cannot be deactivated") % { minimum_inactive_days: ::User::MINIMUM_INACTIVE_DAYS }) unless user.can_be_deactivated?
+
+ user.deactivate
+ redirect_back_or_admin_user(notice: _("Successfully deactivated"))
+ end
+
def block
if update_user { |user| user.block }
redirect_back_or_admin_user(notice: _("Successfully blocked"))
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9a7859fc687..1443a71f6b1 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -13,6 +13,8 @@ class ApplicationController < ActionController::Base
include WithPerformanceBar
include SessionlessAuthentication
include ConfirmEmailWarning
+ include Gitlab::Tracking::ControllerConcern
+ include Gitlab::Experimentation::ControllerConcern
before_action :authenticate_user!
before_action :enforce_terms!, if: :should_enforce_terms?
@@ -24,8 +26,10 @@ class ApplicationController < ActionController::Base
before_action :add_gon_variables, unless: [:peek_request?, :json_request?]
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :require_email, unless: :devise_controller?
+ before_action :active_user_check, unless: :devise_controller?
before_action :set_usage_stats_consent_flag
before_action :check_impersonation_availability
+ before_action :require_role
around_action :set_locale
around_action :set_session_storage
@@ -36,6 +40,7 @@ class ApplicationController < ActionController::Base
protect_from_forgery with: :exception, prepend: true
helper_method :can?
+ helper_method :current_user_mode
helper_method :import_sources_enabled?, :github_import_enabled?,
:gitea_import_enabled?, :github_import_configured?,
:gitlab_import_enabled?, :gitlab_import_configured?,
@@ -286,13 +291,19 @@ class ApplicationController < ActionController::Base
def check_password_expiration
return if session[:impersonator_id] || !current_user&.allow_password_authentication?
- password_expires_at = current_user&.password_expires_at
-
- if password_expires_at && password_expires_at < Time.now
+ if current_user&.password_expired?
return redirect_to new_profile_password_path
end
end
+ def active_user_check
+ return unless current_user && current_user.deactivated?
+
+ sign_out current_user
+ flash[:alert] = _("Your account has been deactivated by your administrator. Please log back in to reactivate your account.")
+ redirect_to new_user_session_path
+ end
+
def ldap_security_check
if current_user && current_user.requires_ldap_check?
return unless current_user.try_obtain_ldap_lease
@@ -533,6 +544,20 @@ class ApplicationController < ActionController::Base
yield
end
end
+
+ def current_user_mode
+ @current_user_mode ||= Gitlab::Auth::CurrentUserMode.new(current_user)
+ end
+
+ # A user requires a role when they are part of the experimental signup flow (executed by the Growth team). Users
+ # are redirected to the welcome page when their role is required and the experiment is enabled for the current user.
+ def require_role
+ return unless current_user && current_user.role_required? && experiment_enabled?(:signup_flow)
+
+ store_location_for :user, request.fullpath
+
+ redirect_to users_sign_up_welcome_path
+ end
end
ApplicationController.prepend_if_ee('EE::ApplicationController')
diff --git a/app/controllers/boards/application_controller.rb b/app/controllers/boards/application_controller.rb
index eab908ba5ed..15ef6698472 100644
--- a/app/controllers/boards/application_controller.rb
+++ b/app/controllers/boards/application_controller.rb
@@ -13,7 +13,7 @@ module Boards
end
def board_parent
- @board_parent ||= board.parent
+ @board_parent ||= board.resource_parent
end
def record_not_found(exception)
diff --git a/app/controllers/boards/lists_controller.rb b/app/controllers/boards/lists_controller.rb
index d0f4904c34e..880f7500708 100644
--- a/app/controllers/boards/lists_controller.rb
+++ b/app/controllers/boards/lists_controller.rb
@@ -9,13 +9,15 @@ module Boards
skip_before_action :authenticate_user!, only: [:index]
def index
- lists = Boards::Lists::ListService.new(board.parent, current_user).execute(board)
+ lists = Boards::Lists::ListService.new(board.resource_parent, current_user).execute(board)
+
+ List.preload_preferences_for_user(lists, current_user)
render json: serialize_as_json(lists)
end
def create
- list = Boards::Lists::CreateService.new(board.parent, current_user, create_list_params).execute(board)
+ list = Boards::Lists::CreateService.new(board.resource_parent, current_user, create_list_params).execute(board)
if list.valid?
render json: serialize_as_json(list)
@@ -51,7 +53,10 @@ module Boards
service = Boards::Lists::GenerateService.new(board_parent, current_user)
if service.execute(board)
- lists = board.lists.movable.preload_associations(current_user)
+ lists = board.lists.movable.preload_associations
+
+ List.preload_preferences_for_user(lists, current_user)
+
render json: serialize_as_json(lists)
else
head :unprocessable_entity
@@ -64,12 +69,16 @@ module Boards
%i[label_id]
end
+ def list_update_attrs
+ %i[collapsed position]
+ end
+
def create_list_params
params.require(:list).permit(list_creation_attrs)
end
def update_list_params
- params.require(:list).permit(:collapsed, :position)
+ params.require(:list).permit(list_update_attrs)
end
def serialize_as_json(resource)
diff --git a/app/controllers/clusters/clusters_controller.rb b/app/controllers/clusters/clusters_controller.rb
index 15f1e8284ff..993aba661f3 100644
--- a/app/controllers/clusters/clusters_controller.rb
+++ b/app/controllers/clusters/clusters_controller.rb
@@ -170,6 +170,7 @@ class Clusters::ClustersController < Clusters::BaseController
:zone,
:num_nodes,
:machine_type,
+ :cloud_run,
:legacy_abac
]).merge(
provider_type: :gcp,
diff --git a/app/controllers/concerns/cycle_analytics_params.rb b/app/controllers/concerns/cycle_analytics_params.rb
index b970bdc544e..1645af695be 100644
--- a/app/controllers/concerns/cycle_analytics_params.rb
+++ b/app/controllers/concerns/cycle_analytics_params.rb
@@ -3,8 +3,20 @@
module CycleAnalyticsParams
extend ActiveSupport::Concern
+ def cycle_analytics_project_params
+ return {} unless params[:cycle_analytics].present?
+
+ params[:cycle_analytics].permit(:start_date, :created_after, :created_before, :branch_name)
+ end
+
+ def cycle_analytics_group_params
+ return {} unless params[:cycle_analytics].present?
+
+ params[:cycle_analytics].permit(:start_date, :created_after, :created_before, project_ids: [])
+ end
+
def options(params)
- @options ||= { from: start_date(params), current_user: current_user }
+ @options ||= { from: start_date(params), current_user: current_user }.merge(date_range(params))
end
def start_date(params)
@@ -17,6 +29,17 @@ module CycleAnalyticsParams
90.days.ago
end
end
+
+ def date_range(params)
+ {}.tap do |date_range_params|
+ date_range_params[:from] = to_utc_time(params[:created_after]).beginning_of_day if params[:created_after]
+ date_range_params[:to] = to_utc_time(params[:created_before]).end_of_day if params[:created_before]
+ end.compact
+ end
+
+ def to_utc_time(field)
+ Date.parse(field).to_time.utc
+ end
end
CycleAnalyticsParams.prepend_if_ee('EE::CycleAnalyticsParams')
diff --git a/app/controllers/concerns/enforces_admin_authentication.rb b/app/controllers/concerns/enforces_admin_authentication.rb
index 3ef92730df6..e731211f423 100644
--- a/app/controllers/concerns/enforces_admin_authentication.rb
+++ b/app/controllers/concerns/enforces_admin_authentication.rb
@@ -14,6 +14,16 @@ module EnforcesAdminAuthentication
end
def authenticate_admin!
- render_404 unless current_user.admin?
+ return render_404 unless current_user.admin?
+ return unless Feature.enabled?(:user_mode_in_session)
+
+ unless current_user_mode.admin_mode?
+ store_location_for(:redirect, request.fullpath) if storable_location?
+ redirect_to(new_admin_session_path, notice: _('Re-authentication required'))
+ end
+ end
+
+ def storable_location?
+ request.path != new_admin_session_path
end
end
diff --git a/app/controllers/concerns/invisible_captcha.rb b/app/controllers/concerns/invisible_captcha.rb
index 45c0a5c58ef..d56f1d7fa5f 100644
--- a/app/controllers/concerns/invisible_captcha.rb
+++ b/app/controllers/concerns/invisible_captcha.rb
@@ -8,7 +8,7 @@ module InvisibleCaptcha
end
def on_honeypot_spam_callback
- return unless Feature.enabled?(:invisible_captcha)
+ return unless Feature.enabled?(:invisible_captcha) || experiment_enabled?(:signup_flow)
invisible_captcha_honeypot_counter.increment
log_request('Invisible_Captcha_Honeypot_Request')
@@ -17,7 +17,7 @@ module InvisibleCaptcha
end
def on_timestamp_spam_callback
- return unless Feature.enabled?(:invisible_captcha)
+ return unless Feature.enabled?(:invisible_captcha) || experiment_enabled?(:signup_flow)
invisible_captcha_timestamp_counter.increment
log_request('Invisible_Captcha_Timestamp_Request')
diff --git a/app/controllers/concerns/metrics_dashboard.rb b/app/controllers/concerns/metrics_dashboard.rb
new file mode 100644
index 00000000000..62efdacb710
--- /dev/null
+++ b/app/controllers/concerns/metrics_dashboard.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+# Provides an action which fetches a metrics dashboard according
+# to the parameters specified by the controller.
+module MetricsDashboard
+ extend ActiveSupport::Concern
+
+ def metrics_dashboard
+ result = dashboard_finder.find(
+ project_for_dashboard,
+ current_user,
+ metrics_dashboard_params
+ )
+
+ if include_all_dashboards?
+ result[:all_dashboards] = dashboard_finder.find_all_paths(project_for_dashboard)
+ end
+
+ respond_to do |format|
+ if result[:status] == :success
+ format.json { render dashboard_success_response(result) }
+ else
+ format.json { render dashboard_error_response(result) }
+ end
+ end
+ end
+
+ private
+
+ # Override in class to provide arguments to the finder.
+ def metrics_dashboard_params
+ {}
+ end
+
+ # Override in class if response requires complete list of
+ # dashboards in addition to requested dashboard body.
+ def include_all_dashboards?
+ false
+ end
+
+ def dashboard_finder
+ ::Gitlab::Metrics::Dashboard::Finder
+ end
+
+ # Project is not defined for group and admin level clusters.
+ def project_for_dashboard
+ defined?(project) ? project : nil
+ end
+
+ def dashboard_success_response(result)
+ {
+ status: :ok,
+ json: result.slice(:all_dashboards, :dashboard, :status)
+ }
+ end
+
+ def dashboard_error_response(result)
+ {
+ status: result[:http_status],
+ json: result.slice(:all_dashboards, :message, :status)
+ }
+ end
+end
diff --git a/app/controllers/concerns/milestone_actions.rb b/app/controllers/concerns/milestone_actions.rb
index 1ead631663e..672d31ec779 100644
--- a/app/controllers/concerns/milestone_actions.rb
+++ b/app/controllers/concerns/milestone_actions.rb
@@ -35,7 +35,7 @@ module MilestoneActions
render json: tabs_json("shared/milestones/_labels_tab", {
labels: milestone_labels.map do |label|
- label.present(issuable_subject: @milestone.parent)
+ label.present(issuable_subject: @milestone.resource_parent)
end
})
end
diff --git a/app/controllers/concerns/render_service_results.rb b/app/controllers/concerns/render_service_results.rb
new file mode 100644
index 00000000000..0149a71d9f5
--- /dev/null
+++ b/app/controllers/concerns/render_service_results.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+module RenderServiceResults
+ extend ActiveSupport::Concern
+
+ def success_response(result)
+ render({
+ status: result[:http_status],
+ json: result[:body]
+ })
+ end
+
+ def continue_polling_response
+ render({
+ status: :no_content,
+ json: {
+ status: _('processing'),
+ message: _('Not ready yet. Try again later.')
+ }
+ })
+ end
+
+ def error_response(result)
+ render({
+ status: result[:http_status] || :bad_request,
+ json: { status: result[:status], message: result[:message] }
+ })
+ end
+end
diff --git a/app/controllers/concerns/renders_assignees.rb b/app/controllers/concerns/renders_assignees.rb
new file mode 100644
index 00000000000..e9583a7a530
--- /dev/null
+++ b/app/controllers/concerns/renders_assignees.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module RendersAssignees
+ def preload_assignees_for_render(merge_request)
+ merge_request.project.team.max_member_access_for_user_ids(merge_request.assignees.map(&:id))
+ end
+end
diff --git a/app/controllers/concerns/sessionless_authentication.rb b/app/controllers/concerns/sessionless_authentication.rb
index ba06384a37a..f644923443b 100644
--- a/app/controllers/concerns/sessionless_authentication.rb
+++ b/app/controllers/concerns/sessionless_authentication.rb
@@ -5,6 +5,12 @@
# Controller concern to handle PAT, RSS, and static objects token authentication methods
#
module SessionlessAuthentication
+ extend ActiveSupport::Concern
+
+ included do
+ before_action :enable_admin_mode!, if: :sessionless_user?
+ end
+
# This filter handles personal access tokens, atom requests with rss tokens, and static object tokens
def authenticate_sessionless_user!(request_format)
user = Gitlab::Auth::RequestAuthenticator.new(request).find_sessionless_user(request_format)
@@ -25,4 +31,8 @@ module SessionlessAuthentication
sign_in(user, store: false, message: :sessionless_sign_in)
end
end
+
+ def enable_admin_mode!
+ current_user_mode.enable_admin_mode!(skip_password_validation: true) if Feature.enabled?(:user_mode_in_session)
+ end
end
diff --git a/app/controllers/concerns/uploads_actions.rb b/app/controllers/concerns/uploads_actions.rb
index 60a68cec3c3..6d9ee39f841 100644
--- a/app/controllers/concerns/uploads_actions.rb
+++ b/app/controllers/concerns/uploads_actions.rb
@@ -29,15 +29,17 @@ module UploadsActions
def show
return render_404 unless uploader&.exists?
- if cache_publicly?
- # We need to reset caching from the applications controller to get rid of the no-store value
- headers['Cache-Control'] = ''
- expires_in 5.minutes, public: true, must_revalidate: false
- else
- expires_in 0.seconds, must_revalidate: true, private: true
- end
+ # We need to reset caching from the applications controller to get rid of the no-store value
+ headers['Cache-Control'] = ''
+ headers['Pragma'] = ''
+
+ ttl, directives = *cache_settings
+ ttl ||= 6.months
+ directives ||= { private: true, must_revalidate: true }
+
+ expires_in ttl, directives
- disposition = uploader.image_or_video? ? 'inline' : 'attachment'
+ disposition = uploader.embeddable? ? 'inline' : 'attachment'
uploaders = [uploader, *uploader.versions.values]
uploader = uploaders.find { |version| version.filename == params[:filename] }
@@ -91,7 +93,7 @@ module UploadsActions
upload_paths = uploader.upload_paths(params[:filename])
upload = Upload.find_by(model: model, uploader: uploader_class.to_s, path: upload_paths)
- upload&.build_uploader
+ upload&.retrieve_uploader
end
# rubocop: enable CodeReuse/ActiveRecord
@@ -112,16 +114,16 @@ module UploadsActions
uploader
end
- def image_or_video?
- uploader && uploader.exists? && uploader.image_or_video?
+ def embeddable?
+ uploader && uploader.exists? && uploader.embeddable?
end
def find_model
nil
end
- def cache_publicly?
- false
+ def cache_settings
+ []
end
def model
diff --git a/app/controllers/dashboard/todos_controller.rb b/app/controllers/dashboard/todos_controller.rb
index 7012bfcefe3..80c0a0d88a8 100644
--- a/app/controllers/dashboard/todos_controller.rb
+++ b/app/controllers/dashboard/todos_controller.rb
@@ -78,8 +78,8 @@ class Dashboard::TodosController < Dashboard::ApplicationController
def todos_counts
{
- count: number_with_delimiter(current_user.todos_pending_count),
- done_count: number_with_delimiter(current_user.todos_done_count)
+ count: current_user.todos_pending_count,
+ done_count: current_user.todos_done_count
}
end
diff --git a/app/controllers/explore/snippets_controller.rb b/app/controllers/explore/snippets_controller.rb
index d4c6aae2ca8..61068df77d1 100644
--- a/app/controllers/explore/snippets_controller.rb
+++ b/app/controllers/explore/snippets_controller.rb
@@ -5,7 +5,7 @@ class Explore::SnippetsController < Explore::ApplicationController
include Gitlab::NoteableMetadata
def index
- @snippets = SnippetsFinder.new(current_user)
+ @snippets = SnippetsFinder.new(current_user, explore: true)
.execute
.page(params[:page])
.inc_author
diff --git a/app/controllers/groups/boards_controller.rb b/app/controllers/groups/boards_controller.rb
index 40b8d5ed72c..3c86f3108ab 100644
--- a/app/controllers/groups/boards_controller.rb
+++ b/app/controllers/groups/boards_controller.rb
@@ -5,6 +5,9 @@ class Groups::BoardsController < Groups::ApplicationController
include RecordUserLastActivity
before_action :assign_endpoint_vars
+ before_action do
+ push_frontend_feature_flag(:multi_select_board)
+ end
private
diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb
index 1eacae06457..1e9d51cf970 100644
--- a/app/controllers/groups/milestones_controller.rb
+++ b/app/controllers/groups/milestones_controller.rb
@@ -44,7 +44,7 @@ class Groups::MilestonesController < Groups::ApplicationController
# all projects milestones states at once.
milestones, update_params = get_milestones_for_update
milestones.each do |milestone|
- Milestones::UpdateService.new(milestone.parent, current_user, update_params).execute(milestone)
+ Milestones::UpdateService.new(milestone.resource_parent, current_user, update_params).execute(milestone)
end
redirect_to milestone_path
diff --git a/app/controllers/groups/registry/repositories_controller.rb b/app/controllers/groups/registry/repositories_controller.rb
new file mode 100644
index 00000000000..e09a9e6eb21
--- /dev/null
+++ b/app/controllers/groups/registry/repositories_controller.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+module Groups
+ module Registry
+ class RepositoriesController < Groups::ApplicationController
+ before_action :verify_container_registry_enabled!
+ before_action :authorize_read_container_image!
+ before_action :feature_flag_group_container_registry_browser!
+
+ def index
+ track_event(:list_repositories)
+
+ respond_to do |format|
+ format.html
+ format.json do
+ @images = group.container_repositories.with_api_entity_associations
+
+ render json: ContainerRepositoriesSerializer
+ .new(current_user: current_user)
+ .represent(@images)
+ end
+ end
+ end
+
+ private
+
+ def feature_flag_group_container_registry_browser!
+ render_404 unless Feature.enabled?(:group_container_registry_browser, group)
+ end
+
+ def verify_container_registry_enabled!
+ render_404 unless Gitlab.config.registry.enabled
+ end
+
+ def authorize_read_container_image!
+ return render_404 unless can?(current_user, :read_container_image, group)
+ end
+ end
+ end
+end
diff --git a/app/controllers/groups/settings/ci_cd_controller.rb b/app/controllers/groups/settings/ci_cd_controller.rb
index c465e622de0..0e83d057484 100644
--- a/app/controllers/groups/settings/ci_cd_controller.rb
+++ b/app/controllers/groups/settings/ci_cd_controller.rb
@@ -5,11 +5,22 @@ module Groups
class CiCdController < Groups::ApplicationController
skip_cross_project_access_check :show
before_action :authorize_admin_group!
+ before_action :authorize_update_max_artifacts_size!, only: [:update]
def show
define_ci_variables
end
+ def update
+ if update_group_service.execute
+ flash[:notice] = s_('GroupSettings|Pipeline settings was updated for the group')
+ else
+ flash[:alert] = s_("GroupSettings|There was a problem updating the pipeline settings: %{error_messages}." % { error_messages: group.errors.full_messages })
+ end
+
+ redirect_to group_settings_ci_cd_path
+ end
+
def reset_registration_token
@group.reset_runners_token!
@@ -40,6 +51,10 @@ module Groups
return render_404 unless can?(current_user, :admin_group, group)
end
+ def authorize_update_max_artifacts_size!
+ return render_404 unless can?(current_user, :update_max_artifacts_size, group)
+ end
+
def auto_devops_params
params.require(:group).permit(:auto_devops_enabled)
end
@@ -47,6 +62,14 @@ module Groups
def auto_devops_service
Groups::AutoDevopsService.new(group, current_user, auto_devops_params)
end
+
+ def update_group_service
+ Groups::UpdateService.new(group, current_user, update_group_params)
+ end
+
+ def update_group_params
+ params.require(:group).permit(:max_artifacts_size)
+ end
end
end
end
diff --git a/app/controllers/groups/uploads_controller.rb b/app/controllers/groups/uploads_controller.rb
index 7e5cdae0ce3..3ae7e36c740 100644
--- a/app/controllers/groups/uploads_controller.rb
+++ b/app/controllers/groups/uploads_controller.rb
@@ -4,7 +4,7 @@ class Groups::UploadsController < Groups::ApplicationController
include UploadsActions
include WorkhorseRequest
- skip_before_action :group, if: -> { action_name == 'show' && image_or_video? }
+ skip_before_action :group, if: -> { action_name == 'show' && embeddable? }
before_action :authorize_upload_file!, only: [:create, :authorize]
before_action :verify_workhorse_api!, only: [:authorize]
diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb
index 95a7876a055..35e364abba3 100644
--- a/app/controllers/groups_controller.rb
+++ b/app/controllers/groups_controller.rb
@@ -104,7 +104,6 @@ class GroupsController < Groups::ApplicationController
redirect_to edit_group_path(@group, anchor: params[:update_section]), notice: "Group '#{@group.name}' was successfully updated."
else
@group.path = @group.path_before_last_save || @group.path_was
-
render action: "edit"
end
end
@@ -124,7 +123,7 @@ class GroupsController < Groups::ApplicationController
flash[:notice] = "Group '#{@group.name}' was successfully transferred."
redirect_to group_path(@group)
else
- flash[:alert] = service.error
+ flash[:alert] = service.error.html_safe
redirect_to edit_group_path(@group)
end
end
@@ -198,15 +197,13 @@ class GroupsController < Groups::ApplicationController
def load_events
params[:sort] ||= 'latest_activity_desc'
- options = {}
- options[:include_subgroups] = true
-
- @projects = GroupProjectsFinder.new(params: params, group: group, options: options, current_user: current_user)
- .execute
- .includes(:namespace)
+ options = { include_subgroups: true }
+ projects = GroupProjectsFinder.new(params: params, group: group, options: options, current_user: current_user)
+ .execute
+ .includes(:namespace)
@events = EventCollection
- .new(@projects, offset: params[:offset].to_i, filter: event_filter)
+ .new(projects, offset: params[:offset].to_i, filter: event_filter, groups: groups)
.to_a
Events::RenderService
@@ -228,6 +225,14 @@ class GroupsController < Groups::ApplicationController
url_for(safe_params)
end
+
+ private
+
+ def groups
+ if @group.supports_events?
+ @group.self_and_descendants.public_or_visible_to_user(current_user)
+ end
+ end
end
GroupsController.prepend_if_ee('EE::GroupsController')
diff --git a/app/controllers/health_controller.rb b/app/controllers/health_controller.rb
index dc9a52f8da5..efd5f0fc607 100644
--- a/app/controllers/health_controller.rb
+++ b/app/controllers/health_controller.rb
@@ -14,35 +14,25 @@ class HealthController < ActionController::Base
].freeze
def readiness
- results = CHECKS.map { |check| [check.name, check.readiness] }
-
- render_check_results(results)
+ # readiness check is a collection with all above application-level checks
+ render_checks(*CHECKS)
end
def liveness
- results = CHECKS.map { |check| [check.name, check.liveness] }
-
- render_check_results(results)
+ # liveness check is a collection without additional checks
+ render_checks
end
private
- def render_check_results(results)
- flattened = results.flat_map do |name, result|
- if result.is_a?(Gitlab::HealthChecks::Result)
- [[name, result]]
- else
- result.map { |r| [name, r] }
- end
- end
- success = flattened.all? { |name, r| r.success }
-
- response = flattened.map do |name, r|
- info = { status: r.success ? 'ok' : 'failed' }
- info['message'] = r.message if r.message
- info[:labels] = r.labels if r.labels
- [name, info]
- end
- render json: response.to_h, status: success ? :ok : :service_unavailable
+ def render_checks(*checks)
+ result = Gitlab::HealthChecks::Probes::Collection
+ .new(*checks)
+ .execute
+
+ # disable static error pages at the gitlab-workhorse level, we want to see this error response even in production
+ headers["X-GitLab-Custom-Error"] = 1 unless result.success?
+
+ render json: result.json, status: result.http_status
end
end
diff --git a/app/controllers/help_controller.rb b/app/controllers/help_controller.rb
index 837c26c630a..a58235790ad 100644
--- a/app/controllers/help_controller.rb
+++ b/app/controllers/help_controller.rb
@@ -40,8 +40,8 @@ class HelpController < ApplicationController
end
end
- # Allow access to images in the doc folder
- format.any(:png, :gif, :jpeg, :mp4) do
+ # Allow access to specific media files in the doc folder
+ format.any(:png, :gif, :jpeg, :mp4, :mp3) do
# Note: We are purposefully NOT using `Rails.root.join`
path = File.join(Rails.root, 'doc', "#{@path}.#{params[:format]}")
diff --git a/app/controllers/import/bitbucket_controller.rb b/app/controllers/import/bitbucket_controller.rb
index 293d76ea765..c37e799de62 100644
--- a/app/controllers/import/bitbucket_controller.rb
+++ b/app/controllers/import/bitbucket_controller.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class Import::BitbucketController < Import::BaseController
+ include ActionView::Helpers::SanitizeHelper
+
before_action :verify_bitbucket_import_enabled
before_action :bitbucket_auth, except: :callback
@@ -21,7 +23,7 @@ class Import::BitbucketController < Import::BaseController
# rubocop: disable CodeReuse/ActiveRecord
def status
bitbucket_client = Bitbucket::Client.new(credentials)
- repos = bitbucket_client.repos
+ repos = bitbucket_client.repos(filter: sanitized_filter_param)
@repos, @incompatible_repos = repos.partition { |repo| repo.valid? }
@@ -104,4 +106,8 @@ class Import::BitbucketController < Import::BaseController
refresh_token: session[:bitbucket_refresh_token]
}
end
+
+ def sanitized_filter_param
+ @filter ||= sanitize(params[:filter])
+ end
end
diff --git a/app/controllers/import/github_controller.rb b/app/controllers/import/github_controller.rb
index 72f830fc9a1..c418b11ab13 100644
--- a/app/controllers/import/github_controller.rb
+++ b/app/controllers/import/github_controller.rb
@@ -2,6 +2,7 @@
class Import::GithubController < Import::BaseController
include ImportHelper
+ include ActionView::Helpers::SanitizeHelper
before_action :verify_import_enabled
before_action :provider_auth, only: [:status, :realtime_changes, :create]
@@ -55,7 +56,7 @@ class Import::GithubController < Import::BaseController
def realtime_changes
Gitlab::PollingInterval.set_header(response, interval: 3_000)
- render json: find_jobs(provider)
+ render json: already_added_projects.to_json(only: [:id], methods: [:import_status])
end
private
@@ -82,7 +83,7 @@ class Import::GithubController < Import::BaseController
end
def already_added_projects
- @already_added_projects ||= find_already_added_projects(provider)
+ @already_added_projects ||= filtered(find_already_added_projects(provider))
end
def already_added_project_names
@@ -104,7 +105,7 @@ class Import::GithubController < Import::BaseController
end
def client_repos
- @client_repos ||= client.repos
+ @client_repos ||= filtered(client.repos)
end
def verify_import_enabled
@@ -185,6 +186,20 @@ class Import::GithubController < Import::BaseController
def extra_import_params
{}
end
+
+ def sanitized_filter_param
+ @filter ||= sanitize(params[:filter])
+ end
+
+ def filter_attribute
+ :name
+ end
+
+ def filtered(collection)
+ return collection unless sanitized_filter_param
+
+ collection.select { |item| item[filter_attribute].include?(sanitized_filter_param) }
+ end
end
Import::GithubController.prepend_if_ee('EE::Import::GithubController')
diff --git a/app/controllers/notification_settings_controller.rb b/app/controllers/notification_settings_controller.rb
index 43c4f4d220e..c97fec0a6ee 100644
--- a/app/controllers/notification_settings_controller.rb
+++ b/app/controllers/notification_settings_controller.rb
@@ -50,8 +50,6 @@ class NotificationSettingsController < ApplicationController
end
def notification_setting_params_for(source)
- allowed_fields = NotificationSetting.email_events(source).dup
- allowed_fields << :level
- params.require(:notification_setting).permit(allowed_fields)
+ params.require(:notification_setting).permit(NotificationSetting.allowed_fields(source))
end
end
diff --git a/app/controllers/oauth/applications_controller.rb b/app/controllers/oauth/applications_controller.rb
index ab4ca56bb49..12dc2d1af1c 100644
--- a/app/controllers/oauth/applications_controller.rb
+++ b/app/controllers/oauth/applications_controller.rb
@@ -5,6 +5,7 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
include Gitlab::Allowable
include PageLayoutHelper
include OauthApplications
+ include Gitlab::Experimentation::ControllerConcern
before_action :verify_user_oauth_applications_enabled, except: :index
before_action :authenticate_user!
diff --git a/app/controllers/oauth/authorizations_controller.rb b/app/controllers/oauth/authorizations_controller.rb
index 705389749d8..e65726dffbf 100644
--- a/app/controllers/oauth/authorizations_controller.rb
+++ b/app/controllers/oauth/authorizations_controller.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
+ include Gitlab::Experimentation::ControllerConcern
layout 'profile'
# Overridden from Doorkeeper::AuthorizationsController to
diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb
index 755ce3463c4..b992972dfb8 100644
--- a/app/controllers/omniauth_callbacks_controller.rb
+++ b/app/controllers/omniauth_callbacks_controller.rb
@@ -148,6 +148,11 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
if user.two_factor_enabled? && !auth_user.bypass_two_factor?
prompt_for_two_factor(user)
else
+ if user.deactivated?
+ user.activate
+ flash[:notice] = _('Welcome back! Your account had been deactivated due to inactivity but is now reactivated.')
+ end
+
sign_in_and_redirect(user, event: :authentication)
end
else
diff --git a/app/controllers/profiles/groups_controller.rb b/app/controllers/profiles/groups_controller.rb
index c755bcb718a..04b5ee270dc 100644
--- a/app/controllers/profiles/groups_controller.rb
+++ b/app/controllers/profiles/groups_controller.rb
@@ -5,7 +5,7 @@ class Profiles::GroupsController < Profiles::ApplicationController
def update
group = find_routable!(Group, params[:id])
- notification_setting = current_user.notification_settings.find_by(source: group) # rubocop: disable CodeReuse/ActiveRecord
+ notification_setting = current_user.notification_settings_for(group)
if notification_setting.update(update_params)
flash[:notice] = "Notification settings for #{group.name} saved"
diff --git a/app/controllers/profiles/notifications_controller.rb b/app/controllers/profiles/notifications_controller.rb
index 617e5bb7cb3..5f44e55f3ef 100644
--- a/app/controllers/profiles/notifications_controller.rb
+++ b/app/controllers/profiles/notifications_controller.rb
@@ -3,9 +3,14 @@
class Profiles::NotificationsController < Profiles::ApplicationController
# rubocop: disable CodeReuse/ActiveRecord
def show
- @user = current_user
- @group_notifications = current_user.notification_settings.for_groups.order(:id)
- @project_notifications = current_user.notification_settings.for_projects.order(:id)
+ @user = current_user
+ @group_notifications = current_user.notification_settings.for_groups.order(:id)
+ @group_notifications += GroupsFinder.new(
+ current_user,
+ all_available: false,
+ exclude_group_ids: @group_notifications.select(:source_id)
+ ).execute.map { |group| current_user.notification_settings_for(group, inherit: true) }
+ @project_notifications = current_user.notification_settings.for_projects.order(:id)
@global_notification_setting = current_user.global_notification_setting
end
# rubocop: enable CodeReuse/ActiveRecord
diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb
index 958a24b6c0e..2b7571e42b7 100644
--- a/app/controllers/profiles_controller.rb
+++ b/app/controllers/profiles_controller.rb
@@ -100,6 +100,7 @@ class ProfilesController < Profiles::ApplicationController
:avatar,
:bio,
:email,
+ :role,
:hide_no_password,
:hide_no_ssh_key,
:hide_project_limit,
diff --git a/app/controllers/projects/artifacts_controller.rb b/app/controllers/projects/artifacts_controller.rb
index da8a371acaa..50399a8cfbb 100644
--- a/app/controllers/projects/artifacts_controller.rb
+++ b/app/controllers/projects/artifacts_controller.rb
@@ -8,10 +8,37 @@ class Projects::ArtifactsController < Projects::ApplicationController
layout 'project'
before_action :authorize_read_build!
before_action :authorize_update_build!, only: [:keep]
+ before_action :authorize_destroy_artifacts!, only: [:destroy]
before_action :extract_ref_name_and_path
- before_action :validate_artifacts!, except: [:download]
+ before_action :validate_artifacts!, except: [:index, :download, :destroy]
before_action :entry, only: [:file]
+ MAX_PER_PAGE = 20
+
+ def index
+ # Loading artifacts is very expensive in projects with a lot of artifacts.
+ # This feature flag prevents a DOS attack vector.
+ # It should be removed only after resolving the underlying performance
+ # issues: https://gitlab.com/gitlab-org/gitlab/issues/32281
+ return head :no_content unless Feature.enabled?(:artifacts_management_page, @project)
+
+ finder = ArtifactsFinder.new(@project, artifacts_params)
+ all_artifacts = finder.execute
+
+ @artifacts = all_artifacts.page(params[:page]).per(MAX_PER_PAGE)
+ @total_size = all_artifacts.total_size
+ end
+
+ def destroy
+ notice = if artifact.destroy
+ _('Artifact was successfully deleted.')
+ else
+ _('Artifact could not be deleted.')
+ end
+
+ redirect_to project_artifacts_path(@project), status: :see_other, notice: notice
+ end
+
def download
return render_404 unless artifacts_file
@@ -74,6 +101,10 @@ class Projects::ArtifactsController < Projects::ApplicationController
@ref_name, @path = extract_ref(params[:ref_name_and_path])
end
+ def artifacts_params
+ params.permit(:sort)
+ end
+
def validate_artifacts!
render_404 unless build&.artifacts?
end
@@ -85,6 +116,11 @@ class Projects::ArtifactsController < Projects::ApplicationController
end
end
+ def artifact
+ @artifact ||=
+ project.job_artifacts.find(params[:id])
+ end
+
def build_from_id
project.builds.find_by_id(params[:job_id]) if params[:job_id]
end
diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb
index 14b02993e6e..3b335fa4af4 100644
--- a/app/controllers/projects/boards_controller.rb
+++ b/app/controllers/projects/boards_controller.rb
@@ -7,6 +7,9 @@ class Projects::BoardsController < Projects::ApplicationController
before_action :check_issues_available!
before_action :authorize_read_board!, only: [:index, :show]
before_action :assign_endpoint_vars
+ before_action do
+ push_frontend_feature_flag(:multi_select_board)
+ end
private
diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb
index c125ed3605a..578a3d451a7 100644
--- a/app/controllers/projects/branches_controller.rb
+++ b/app/controllers/projects/branches_controller.rb
@@ -11,6 +11,7 @@ class Projects::BranchesController < Projects::ApplicationController
# Support legacy URLs
before_action :redirect_for_legacy_index_sort_or_search, only: [:index]
+ before_action :limit_diverging_commit_counts!, only: [:diverging_commit_counts]
def index
respond_to do |format|
@@ -125,6 +126,24 @@ class Projects::BranchesController < Projects::ApplicationController
private
+ # It can be expensive to calculate the diverging counts for each
+ # branch. Normally the frontend should be specifying a set of branch
+ # names, but prior to
+ # https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/32496, the
+ # frontend could omit this set. To prevent excessive I/O, we require
+ # that a list of names be specified.
+ def limit_diverging_commit_counts!
+ return unless Feature.enabled?(:limit_diverging_commit_counts, default_enabled: true)
+
+ limit = Kaminari.config.default_per_page
+
+ # If we don't have many branches in the repository, then go ahead.
+ return if project.repository.branch_count <= limit
+ return if params[:names].present? && Array(params[:names]).length <= limit
+
+ render json: { error: "Specify at least one and at most #{limit} branch names" }, status: :unprocessable_entity
+ end
+
def ref
if params[:ref]
ref_escaped = strip_tags(sanitize(params[:ref]))
diff --git a/app/controllers/projects/commits_controller.rb b/app/controllers/projects/commits_controller.rb
index 76705b4410c..15bb35dd0be 100644
--- a/app/controllers/projects/commits_controller.rb
+++ b/app/controllers/projects/commits_controller.rb
@@ -72,7 +72,9 @@ class Projects::CommitsController < Projects::ApplicationController
@repository.commits(@ref, path: @path, limit: @limit, offset: @offset)
end
- @commits = @commits.with_pipeline_status
+ @commits.each(&:lazy_author) # preload authors
+
+ @commits = @commits.with_latest_pipeline(@ref)
@commits = set_commits_for_rendering(@commits)
end
diff --git a/app/controllers/projects/cycle_analytics/events_controller.rb b/app/controllers/projects/cycle_analytics/events_controller.rb
index 926592b9681..673f53c221b 100644
--- a/app/controllers/projects/cycle_analytics/events_controller.rb
+++ b/app/controllers/projects/cycle_analytics/events_controller.rb
@@ -23,7 +23,7 @@ module Projects
end
def test
- options(cycle_analytics_params)[:branch] = cycle_analytics_params[:branch_name]
+ options(cycle_analytics_project_params)[:branch] = cycle_analytics_project_params[:branch_name]
render_events(cycle_analytics[:test].events)
end
@@ -50,13 +50,7 @@ module Projects
end
def cycle_analytics
- @cycle_analytics ||= ::CycleAnalytics::ProjectLevel.new(project, options: options(cycle_analytics_params))
- end
-
- def cycle_analytics_params
- return {} unless params[:cycle_analytics].present?
-
- params[:cycle_analytics].permit(:start_date, :branch_name)
+ @cycle_analytics ||= ::CycleAnalytics::ProjectLevel.new(project, options: options(cycle_analytics_project_params))
end
end
end
diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb
index b9d7dbd37be..f13c75ac4cc 100644
--- a/app/controllers/projects/cycle_analytics_controller.rb
+++ b/app/controllers/projects/cycle_analytics_controller.rb
@@ -9,7 +9,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
before_action :authorize_read_cycle_analytics!
def show
- @cycle_analytics = ::CycleAnalytics::ProjectLevel.new(@project, options: options(cycle_analytics_params))
+ @cycle_analytics = ::CycleAnalytics::ProjectLevel.new(@project, options: options(cycle_analytics_project_params))
@cycle_analytics_no_data = @cycle_analytics.no_stats?
@@ -27,12 +27,6 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
private
- def cycle_analytics_params
- return {} unless params[:cycle_analytics].present?
-
- params[:cycle_analytics].permit(:start_date)
- end
-
def cycle_analytics_json
{
summary: @cycle_analytics.summary,
diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb
index 514b03e23b5..f13fb4d0b3d 100644
--- a/app/controllers/projects/deploy_keys_controller.rb
+++ b/app/controllers/projects/deploy_keys_controller.rb
@@ -73,6 +73,10 @@ class Projects::DeployKeysController < Projects::ApplicationController
@deploy_key ||= DeployKey.find(params[:id])
end
+ def deploy_keys_project
+ @deploy_keys_project ||= deploy_key.deploy_keys_project_for(@project)
+ end
+
def create_params
create_params = params.require(:deploy_key)
.permit(:key, :title, deploy_keys_projects_attributes: [:can_push])
@@ -81,10 +85,16 @@ class Projects::DeployKeysController < Projects::ApplicationController
end
def update_params
- params.require(:deploy_key).permit(:title, deploy_keys_projects_attributes: [:id, :can_push])
+ permitted_params = [deploy_keys_projects_attributes: [:id, :can_push]]
+ permitted_params << :title if can?(current_user, :update_deploy_key, deploy_key)
+
+ params.require(:deploy_key).permit(*permitted_params)
end
def authorize_update_deploy_key!
- access_denied! unless can?(current_user, :update_deploy_key, deploy_key)
+ if !can?(current_user, :update_deploy_key, deploy_key) &&
+ !can?(current_user, :update_deploy_keys_project, deploy_keys_project)
+ access_denied!
+ end
end
end
diff --git a/app/controllers/projects/deployments_controller.rb b/app/controllers/projects/deployments_controller.rb
index 32111b07a0b..766e2f86ea2 100644
--- a/app/controllers/projects/deployments_controller.rb
+++ b/app/controllers/projects/deployments_controller.rb
@@ -47,11 +47,9 @@ class Projects::DeploymentsController < Projects::ApplicationController
@deployment_metrics ||= DeploymentMetrics.new(deployment.project, deployment)
end
- # rubocop: disable CodeReuse/ActiveRecord
def deployment
- @deployment ||= environment.deployments.find_by(iid: params[:id])
+ @deployment ||= environment.deployments.find_successful_deployment!(params[:id])
end
- # rubocop: enable CodeReuse/ActiveRecord
def environment
@environment ||= project.environments.find(params[:environment_id])
diff --git a/app/controllers/projects/environments/prometheus_api_controller.rb b/app/controllers/projects/environments/prometheus_api_controller.rb
index 9c6c6513a78..e902d218c75 100644
--- a/app/controllers/projects/environments/prometheus_api_controller.rb
+++ b/app/controllers/projects/environments/prometheus_api_controller.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class Projects::Environments::PrometheusApiController < Projects::ApplicationController
+ include RenderServiceResults
+
before_action :authorize_read_prometheus!
before_action :environment
@@ -12,21 +14,10 @@ class Projects::Environments::PrometheusApiController < Projects::ApplicationCon
proxy_params
).execute
- if result.nil?
- return render status: :no_content, json: {
- status: _('processing'),
- message: _('Not ready yet. Try again later.')
- }
- end
-
- if result[:status] == :success
- render status: result[:http_status], json: result[:body]
- else
- render(
- status: result[:http_status] || :bad_request,
- json: { status: result[:status], message: result[:message] }
- )
- end
+ return continue_polling_response if result.nil?
+ return error_response(result) if result[:status] == :error
+
+ success_response(result)
end
private
diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb
index 64de0e665d3..c053ca19a94 100644
--- a/app/controllers/projects/environments_controller.rb
+++ b/app/controllers/projects/environments_controller.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class Projects::EnvironmentsController < Projects::ApplicationController
+ include MetricsDashboard
+
layout 'project'
before_action :authorize_read_environment!
before_action :authorize_create_environment!, only: [:new, :create]
@@ -12,7 +14,6 @@ class Projects::EnvironmentsController < Projects::ApplicationController
before_action :expire_etag_cache, only: [:index]
before_action only: [:metrics, :additional_metrics, :metrics_dashboard] do
push_frontend_feature_flag(:environment_metrics_use_prometheus_endpoint, default_enabled: true)
- push_frontend_feature_flag(:environment_metrics_show_multiple_dashboards)
push_frontend_feature_flag(:environment_metrics_additional_panel_types)
push_frontend_feature_flag(:prometheus_computed_alerts)
end
@@ -159,44 +160,6 @@ class Projects::EnvironmentsController < Projects::ApplicationController
end
end
- def metrics_dashboard
- if params[:embedded]
- result = dashboard_finder.find(
- project,
- current_user,
- environment: environment,
- dashboard_path: params[:dashboard],
- **dashboard_params.to_h.symbolize_keys
- )
- elsif Feature.enabled?(:environment_metrics_show_multiple_dashboards, project)
- result = dashboard_finder.find(
- project,
- current_user,
- environment: environment,
- dashboard_path: params[:dashboard]
- )
-
- result[:all_dashboards] = dashboard_finder.find_all_paths(project)
- else
- result = dashboard_finder.find(project, current_user, environment: environment)
- end
-
- respond_to do |format|
- if result[:status] == :success
- format.json do
- render status: :ok, json: result.slice(:all_dashboards, :dashboard, :status)
- end
- else
- format.json do
- render(
- status: result[:http_status],
- json: result.slice(:all_dashboards, :message, :status)
- )
- end
- end
- end
- end
-
def search
respond_to do |format|
format.json do
@@ -234,12 +197,15 @@ class Projects::EnvironmentsController < Projects::ApplicationController
params.require([:start, :end])
end
- def dashboard_params
- params.permit(:embedded, :group, :title, :y_label)
+ def metrics_dashboard_params
+ params
+ .permit(:embedded, :group, :title, :y_label)
+ .to_h.symbolize_keys
+ .merge(dashboard_path: params[:dashboard], environment: environment)
end
- def dashboard_finder
- Gitlab::Metrics::Dashboard::Finder
+ def include_all_dashboards?
+ !params[:embedded]
end
def search_environment_names
diff --git a/app/controllers/projects/git_http_client_controller.rb b/app/controllers/projects/git_http_client_controller.rb
index a597cc9af32..ccfc38d97b2 100644
--- a/app/controllers/projects/git_http_client_controller.rb
+++ b/app/controllers/projects/git_http_client_controller.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-# This file should be identical in GitLab Community Edition and Enterprise Edition
-
class Projects::GitHttpClientController < Projects::ApplicationController
include ActionController::HttpAuthentication::Basic
include KerberosSpnegoHelper
diff --git a/app/controllers/projects/git_http_controller.rb b/app/controllers/projects/git_http_controller.rb
index 0c8c03cb16a..93f7ce73a51 100644
--- a/app/controllers/projects/git_http_controller.rb
+++ b/app/controllers/projects/git_http_controller.rb
@@ -6,10 +6,10 @@ class Projects::GitHttpController < Projects::GitHttpClientController
before_action :access_check
prepend_before_action :deny_head_requests, only: [:info_refs]
- rescue_from Gitlab::GitAccess::UnauthorizedError, with: :render_403
- rescue_from Gitlab::GitAccess::NotFoundError, with: :render_404
- rescue_from Gitlab::GitAccess::ProjectCreationError, with: :render_422
- rescue_from Gitlab::GitAccess::TimeoutError, with: :render_503
+ rescue_from Gitlab::GitAccess::UnauthorizedError, with: :render_403_with_exception
+ rescue_from Gitlab::GitAccess::NotFoundError, with: :render_404_with_exception
+ rescue_from Gitlab::GitAccess::ProjectCreationError, with: :render_422_with_exception
+ rescue_from Gitlab::GitAccess::TimeoutError, with: :render_503_with_exception
# GET /foo/bar.git/info/refs?service=git-upload-pack (git pull)
# GET /foo/bar.git/info/refs?service=git-receive-pack (git push)
@@ -58,19 +58,19 @@ class Projects::GitHttpController < Projects::GitHttpClientController
render json: Gitlab::Workhorse.git_http_ok(repository, repo_type, user, action_name)
end
- def render_403(exception)
+ def render_403_with_exception(exception)
render plain: exception.message, status: :forbidden
end
- def render_404(exception)
+ def render_404_with_exception(exception)
render plain: exception.message, status: :not_found
end
- def render_422(exception)
+ def render_422_with_exception(exception)
render plain: exception.message, status: :unprocessable_entity
end
- def render_503(exception)
+ def render_503_with_exception(exception)
render plain: exception.message, status: :service_unavailable
end
diff --git a/app/controllers/projects/grafana_api_controller.rb b/app/controllers/projects/grafana_api_controller.rb
new file mode 100644
index 00000000000..4bdf4c12cac
--- /dev/null
+++ b/app/controllers/projects/grafana_api_controller.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+class Projects::GrafanaApiController < Projects::ApplicationController
+ include RenderServiceResults
+
+ def proxy
+ result = ::Grafana::ProxyService.new(
+ project,
+ params[:datasource_id],
+ params[:proxy_path],
+ query_params.to_h
+ ).execute
+
+ return continue_polling_response if result.nil?
+ return error_response(result) if result[:status] == :error
+
+ success_response(result)
+ end
+
+ private
+
+ def query_params
+ params.permit(:query, :start, :end, :step)
+ end
+end
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index 7a192a9ec2d..96cb400950b 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -42,6 +42,10 @@ class Projects::IssuesController < Projects::ApplicationController
before_action :authorize_import_issues!, only: [:import_csv]
before_action :authorize_download_code!, only: [:related_branches]
+ before_action do
+ push_frontend_feature_flag(:vue_issuable_sidebar, project.group)
+ end
+
respond_to :html
alias_method :designs, :show
diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb
index 0fdd4d4f33d..1d914ab6011 100644
--- a/app/controllers/projects/jobs_controller.rb
+++ b/app/controllers/projects/jobs_controller.rb
@@ -11,8 +11,8 @@ class Projects::JobsController < Projects::ApplicationController
before_action :authorize_erase_build!, only: [:erase]
before_action :authorize_use_build_terminal!, only: [:terminal, :terminal_websocket_authorize]
before_action :verify_api_request!, only: :terminal_websocket_authorize
- before_action only: [:trace] do
- push_frontend_feature_flag(:job_log_json)
+ before_action only: [:show] do
+ push_frontend_feature_flag(:job_log_json, project)
end
layout 'project'
@@ -67,38 +67,27 @@ class Projects::JobsController < Projects::ApplicationController
# rubocop: enable CodeReuse/ActiveRecord
def trace
- if Feature.enabled?(:job_log_json, @project)
- json_trace
- else
- html_trace
- end
- end
-
- def html_trace
build.trace.read do |stream|
respond_to do |format|
format.json do
- result = {
- id: @build.id, status: @build.status, complete: @build.complete?
- }
-
- if stream.valid?
- stream.limit
- state = params[:state].presence
- trace = stream.html_with_state(state)
- result.merge!(trace.to_h)
- end
-
- render json: result
+ # TODO: when the feature flag is removed we should not pass
+ # content_format to serialize method.
+ content_format = Feature.enabled?(:job_log_json, @project) ? :json : :html
+
+ build_trace = Ci::BuildTrace.new(
+ build: @build,
+ stream: stream,
+ state: params[:state],
+ content_format: content_format)
+
+ render json: BuildTraceSerializer
+ .new(project: @project, current_user: @current_user)
+ .represent(build_trace)
end
end
end
end
- def json_trace
- # will be implemented with https://gitlab.com/gitlab-org/gitlab-foss/issues/66454
- end
-
def retry
return respond_422 unless @build.retryable?
diff --git a/app/controllers/projects/lfs_api_controller.rb b/app/controllers/projects/lfs_api_controller.rb
index 739f7a2437e..a1983bc5462 100644
--- a/app/controllers/projects/lfs_api_controller.rb
+++ b/app/controllers/projects/lfs_api_controller.rb
@@ -2,6 +2,7 @@
class Projects::LfsApiController < Projects::GitHttpClientController
include LfsRequest
+ include Gitlab::Utils::StrongMemoize
LFS_TRANSFER_CONTENT_TYPE = 'application/octet-stream'
@@ -81,7 +82,7 @@ class Projects::LfsApiController < Projects::GitHttpClientController
download: {
href: "#{project.http_url_to_repo}/gitlab-lfs/objects/#{object[:oid]}",
header: {
- Authorization: request.headers['Authorization']
+ Authorization: authorization_header
}.compact
}
}
@@ -92,7 +93,7 @@ class Projects::LfsApiController < Projects::GitHttpClientController
upload: {
href: "#{project.http_url_to_repo}/gitlab-lfs/objects/#{object[:oid]}/#{object[:size]}",
header: {
- Authorization: request.headers['Authorization'],
+ Authorization: authorization_header,
# git-lfs v2.5.0 sets the Content-Type based on the uploaded file. This
# ensures that Workhorse can intercept the request.
'Content-Type': LFS_TRANSFER_CONTENT_TYPE
@@ -122,6 +123,18 @@ class Projects::LfsApiController < Projects::GitHttpClientController
def lfs_read_only_message
_('You cannot write to this read-only GitLab instance.')
end
+
+ def authorization_header
+ strong_memoize(:authorization_header) do
+ lfs_auth_header || request.headers['Authorization']
+ end
+ end
+
+ def lfs_auth_header
+ return unless user.is_a?(User)
+
+ Gitlab::LfsToken.new(user).basic_encoding
+ end
end
Projects::LfsApiController.prepend_if_ee('EE::Projects::LfsApiController')
diff --git a/app/controllers/projects/merge_requests/application_controller.rb b/app/controllers/projects/merge_requests/application_controller.rb
index edffeb32203..b7e99cb7ed0 100644
--- a/app/controllers/projects/merge_requests/application_controller.rb
+++ b/app/controllers/projects/merge_requests/application_controller.rb
@@ -14,7 +14,11 @@ class Projects::MergeRequests::ApplicationController < Projects::ApplicationCont
end
def merge_request_includes(association)
- association.includes(:metrics, :assignees, author: :status) # rubocop:disable CodeReuse/ActiveRecord
+ association.includes(preloadable_mr_relations) # rubocop:disable CodeReuse/ActiveRecord
+ end
+
+ def preloadable_mr_relations
+ [:metrics, :assignees, { author: :status }]
end
def merge_request_params
diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb
index 9c5caf7719e..4a37dfe5c19 100644
--- a/app/controllers/projects/merge_requests/diffs_controller.rb
+++ b/app/controllers/projects/merge_requests/diffs_controller.rb
@@ -5,9 +5,9 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic
include RendersNotes
before_action :apply_diff_view_cookie!
- before_action :commit
- before_action :define_diff_vars
- before_action :define_diff_comment_vars
+ before_action :commit, except: :diffs_batch
+ before_action :define_diff_vars, except: :diffs_batch
+ before_action :define_diff_comment_vars, except: [:diffs_batch, :diffs_metadata]
def show
render_diffs
@@ -17,14 +17,41 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic
render_diffs
end
+ def diffs_batch
+ return render_404 unless Feature.enabled?(:diffs_batch_load, @merge_request.project)
+
+ diffable = @merge_request.merge_request_diff
+
+ return render_404 unless diffable
+
+ diffs = diffable.diffs_in_batch(params[:page], params[:per_page], diff_options: diff_options)
+ positions = @merge_request.note_positions_for_paths(diffs.diff_file_paths, current_user)
+
+ diffs.unfold_diff_files(positions.unfoldable)
+
+ options = {
+ merge_request: @merge_request,
+ pagination_data: diffs.pagination_data
+ }
+
+ render json: PaginatedDiffSerializer.new(current_user: current_user).represent(diffs, options)
+ end
+
+ def diffs_metadata
+ render json: DiffsMetadataSerializer.new(project: @merge_request.project)
+ .represent(@diffs, additional_attributes)
+ end
+
private
+ def preloadable_mr_relations
+ [{ source_project: :namespace }, { target_project: :namespace }]
+ end
+
def render_diffs
@environment = @merge_request.environments_for(current_user).last
- note_positions = renderable_notes.map(&:position).compact
- @diffs.unfold_diff_files(note_positions)
-
+ @diffs.unfold_diff_files(note_positions.unfoldable)
@diffs.write_cache
request = {
@@ -111,6 +138,10 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic
@notes = prepare_notes_for_rendering(@grouped_diff_discussions.values.flatten.flat_map(&:notes), @merge_request)
end
+ def note_positions
+ @note_positions ||= Gitlab::Diff::PositionCollection.new(renderable_notes.map(&:position))
+ end
+
def renderable_notes
define_diff_comment_vars unless @notes
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index e51ce752233..ff199e05e99 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -5,6 +5,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
include IssuableActions
include RendersNotes
include RendersCommits
+ include RendersAssignees
include ToggleAwardEmoji
include IssuableCollections
include RecordUserLastActivity
@@ -16,6 +17,13 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
before_action :set_issuables_index, only: [:index]
before_action :authenticate_user!, only: [:assign_related_issues]
before_action :check_user_can_push_to_source_branch!, only: [:rebase]
+ before_action only: [:show] do
+ push_frontend_feature_flag(:diffs_batch_load, @project)
+ end
+
+ before_action do
+ push_frontend_feature_flag(:vue_issuable_sidebar, @project.group)
+ end
around_action :allow_gitaly_ref_name_caching, only: [:index, :show, :discussions]
@@ -41,6 +49,8 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
# use next to appease Rubocop
next render('invalid') if target_branch_missing?
+ preload_assignees_for_render(@merge_request)
+
# Build a note object for comment form
@note = @project.notes.new(noteable: @merge_request)
@@ -79,7 +89,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
# Get commits from repository
# or from cache if already merged
@commits =
- set_commits_for_rendering(@merge_request.commits.with_pipeline_status)
+ set_commits_for_rendering(@merge_request.commits.with_latest_pipeline)
render json: { html: view_to_html_string('projects/merge_requests/_commits') }
end
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb
index cfa46705483..106ef1b72c1 100644
--- a/app/controllers/projects/pipelines_controller.rb
+++ b/app/controllers/projects/pipelines_controller.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class Projects::PipelinesController < Projects::ApplicationController
+ include ::Gitlab::Utils::StrongMemoize
+
before_action :whitelist_query_limiting, only: [:create, :retry]
before_action :pipeline, except: [:index, :new, :create, :charts]
before_action :set_pipeline_path, only: [:show]
@@ -151,6 +153,19 @@ class Projects::PipelinesController < Projects::ApplicationController
@counts[:failed] = @project.all_pipelines.failed.count(:all)
end
+ def test_report
+ return unless Feature.enabled?(:junit_pipeline_view, project)
+
+ if pipeline_test_report == :error
+ render json: { status: :error_parsing_report }
+ return
+ end
+
+ render json: TestReportSerializer
+ .new(current_user: @current_user)
+ .represent(pipeline_test_report)
+ end
+
private
def serialize_pipelines
@@ -169,7 +184,7 @@ class Projects::PipelinesController < Projects::ApplicationController
end
def show_represent_params
- { grouped: true }
+ { grouped: true, expanded: params[:expanded].to_a.map(&:to_i) }
end
def create_params
@@ -217,6 +232,14 @@ class Projects::PipelinesController < Projects::ApplicationController
view_context.limited_counter_with_delimiter(finder.execute)
end
+
+ def pipeline_test_report
+ strong_memoize(:pipeline_test_report) do
+ @pipeline.test_reports
+ rescue Gitlab::Ci::Parsers::ParserError
+ :error
+ end
+ end
end
Projects::PipelinesController.prepend_if_ee('EE::Projects::PipelinesController')
diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb
index c5454883060..d4f7d0bc521 100644
--- a/app/controllers/projects/protected_branches_controller.rb
+++ b/app/controllers/projects/protected_branches_controller.rb
@@ -19,9 +19,13 @@ class Projects::ProtectedBranchesController < Projects::ProtectedRefsController
[:merge_access_levels, :push_access_levels]
end
- def protected_ref_params
- params.require(:protected_branch).permit(:name,
- merge_access_levels_attributes: access_level_attributes,
- push_access_levels_attributes: access_level_attributes)
+ def protected_ref_params(*attrs)
+ attrs = ([:name,
+ merge_access_levels_attributes: access_level_attributes,
+ push_access_levels_attributes: access_level_attributes] + attrs).uniq
+
+ params.require(:protected_branch).permit(attrs)
end
end
+
+Projects::ProtectedBranchesController.prepend_if_ee('EE::Projects::ProtectedBranchesController')
diff --git a/app/controllers/projects/registry/repositories_controller.rb b/app/controllers/projects/registry/repositories_controller.rb
index e205e2fd4f8..9405fd526ae 100644
--- a/app/controllers/projects/registry/repositories_controller.rb
+++ b/app/controllers/projects/registry/repositories_controller.rb
@@ -8,6 +8,7 @@ module Projects
def index
@images = project.container_repositories
+ track_event(:list_repositories)
respond_to do |format|
format.html
@@ -21,6 +22,7 @@ module Projects
def destroy
DeleteContainerRepositoryWorker.perform_async(current_user.id, image.id)
+ track_event(:delete_repository)
respond_to do |format|
format.json { head :no_content }
diff --git a/app/controllers/projects/registry/tags_controller.rb b/app/controllers/projects/registry/tags_controller.rb
index 54e2faa2dd7..e572c56adf5 100644
--- a/app/controllers/projects/registry/tags_controller.rb
+++ b/app/controllers/projects/registry/tags_controller.rb
@@ -8,6 +8,7 @@ module Projects
LIMIT = 15
def index
+ track_event(:list_tags)
respond_to do |format|
format.json do
render json: ContainerTagsSerializer
@@ -19,14 +20,13 @@ module Projects
end
def destroy
- if tag.delete
- respond_to do |format|
- format.json { head :no_content }
- end
- else
- respond_to do |format|
- format.json { head :bad_request }
- end
+ result = Projects::ContainerRepository::DeleteTagsService
+ .new(image.project, current_user, tags: [params[:id]])
+ .execute(image)
+ track_event(:delete_tag)
+
+ respond_to do |format|
+ format.json { head(result[:status] == :success ? :ok : bad_request) }
end
end
@@ -42,21 +42,13 @@ module Projects
return
end
- @tags = tag_names.map { |tag_name| image.tag(tag_name) }
- unless @tags.all? { |tag| tag.valid_name? }
- head :bad_request
- return
- end
-
- success_count = 0
- @tags.each do |tag|
- if tag.delete
- success_count += 1
- end
- end
+ result = Projects::ContainerRepository::DeleteTagsService
+ .new(image.project, current_user, tags: tag_names)
+ .execute(image)
+ track_event(:delete_tag_bulk)
respond_to do |format|
- format.json { head(success_count == @tags.size ? :no_content : :bad_request) }
+ format.json { head(result[:status] == :success ? :no_content : :bad_request) }
end
end
@@ -70,10 +62,6 @@ module Projects
@image ||= project.container_repositories
.find(params[:repository_id])
end
-
- def tag
- @tag ||= image.tag(params[:id])
- end
end
end
end
diff --git a/app/controllers/projects/releases_controller.rb b/app/controllers/projects/releases_controller.rb
index 4c39ee4045f..717df9f09e0 100644
--- a/app/controllers/projects/releases_controller.rb
+++ b/app/controllers/projects/releases_controller.rb
@@ -4,6 +4,9 @@ class Projects::ReleasesController < Projects::ApplicationController
# Authorize
before_action :require_non_empty_project
before_action :authorize_read_release!
+ before_action do
+ push_frontend_feature_flag(:release_edit_page, project)
+ end
def index
end
diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb
index 0d61c3cc031..cfed8727450 100644
--- a/app/controllers/projects/settings/ci_cd_controller.rb
+++ b/app/controllers/projects/settings/ci_cd_controller.rb
@@ -46,13 +46,19 @@ module Projects
private
def update_params
- params.require(:project).permit(
+ params.require(:project).permit(*permitted_project_params)
+ end
+
+ def permitted_project_params
+ [
:runners_token, :builds_enabled, :build_allow_git_fetch,
:build_timeout_human_readable, :build_coverage_regex, :public_builds,
:auto_cancel_pending_pipelines, :ci_config_path,
auto_devops_attributes: [:id, :domain, :enabled, :deploy_strategy],
ci_cd_settings_attributes: [:default_git_depth]
- )
+ ].tap do |list|
+ list << :max_artifacts_size if can?(current_user, :update_max_artifacts_size, project)
+ end
end
def run_autodevops_pipeline(service)
diff --git a/app/controllers/projects/settings/operations_controller.rb b/app/controllers/projects/settings/operations_controller.rb
index 7c71486a765..5bf3618b389 100644
--- a/app/controllers/projects/settings/operations_controller.rb
+++ b/app/controllers/projects/settings/operations_controller.rb
@@ -13,9 +13,14 @@ module Projects
def update
result = ::Projects::Operations::UpdateService.new(project, current_user, update_params).execute
+ track_events(result)
render_update_response(result)
end
+ # overridden in EE
+ def track_events(result)
+ end
+
private
# overridden in EE
@@ -63,7 +68,9 @@ module Projects
:api_host,
:token,
project: [:slug, :name, :organization_slug, :organization_name]
- ]
+ ],
+
+ grafana_integration_attributes: [:token, :grafana_url]
}
end
end
diff --git a/app/controllers/projects/templates_controller.rb b/app/controllers/projects/templates_controller.rb
index f987033a26c..95739f96d39 100644
--- a/app/controllers/projects/templates_controller.rb
+++ b/app/controllers/projects/templates_controller.rb
@@ -13,6 +13,14 @@ class Projects::TemplatesController < Projects::ApplicationController
end
end
+ def names
+ templates = @template_type.dropdown_names(project)
+
+ respond_to do |format|
+ format.json { render json: templates }
+ end
+ end
+
private
# User must have:
diff --git a/app/controllers/projects/uploads_controller.rb b/app/controllers/projects/uploads_controller.rb
index 4ffcc2ac805..3e5a1cfc74d 100644
--- a/app/controllers/projects/uploads_controller.rb
+++ b/app/controllers/projects/uploads_controller.rb
@@ -6,7 +6,7 @@ class Projects::UploadsController < Projects::ApplicationController
# These will kick you out if you don't have access.
skip_before_action :project, :repository,
- if: -> { action_name == 'show' && image_or_video? }
+ if: -> { action_name == 'show' && embeddable? }
before_action :authorize_upload_file!, only: [:create, :authorize]
before_action :verify_workhorse_api!, only: [:authorize]
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index b8beecf823c..abd19df9a3d 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -376,6 +376,7 @@ class ProjectsController < Projects::ApplicationController
:tag_list,
:visibility_level,
:template_name,
+ :template_project_id,
:merge_method,
:initialize_with_readme,
diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index 2e4c6a801b0..4a746fc915d 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -6,13 +6,20 @@ class RegistrationsController < Devise::RegistrationsController
include RecaptchaExperimentHelper
include InvisibleCaptcha
+ layout :choose_layout
+
+ skip_before_action :require_role, only: [:welcome, :update_role]
prepend_before_action :check_captcha, only: :create
before_action :whitelist_query_limiting, only: [:destroy]
before_action :ensure_terms_accepted,
if: -> { action_name == 'create' && Gitlab::CurrentSettings.current_application_settings.enforce_terms? }
def new
- redirect_to(new_user_session_path)
+ if experiment_enabled?(:signup_flow)
+ @resource = build_resource
+ else
+ redirect_to new_user_session_path(anchor: 'register-pane')
+ end
end
def create
@@ -20,8 +27,13 @@ class RegistrationsController < Devise::RegistrationsController
super do |new_user|
persist_accepted_terms_if_required(new_user)
+ set_role_required(new_user)
yield new_user if block_given?
end
+
+ # Do not show the signed_up notice message when the signup_flow experiment is enabled.
+ # Instead, show it after succesfully updating the role.
+ flash[:notice] = nil if experiment_enabled?(:signup_flow)
rescue Gitlab::Access::AccessDeniedError
redirect_to(new_user_session_path)
end
@@ -36,6 +48,26 @@ class RegistrationsController < Devise::RegistrationsController
end
end
+ def welcome
+ return redirect_to new_user_registration_path unless current_user
+ return redirect_to stored_location_or_dashboard_or_almost_there_path(current_user) if current_user.role.present?
+
+ current_user.name = nil
+ render layout: 'devise_experimental_separate_sign_up_flow'
+ end
+
+ def update_role
+ user_params = params.require(:user).permit(:name, :role)
+ result = ::Users::UpdateService.new(current_user, user_params.merge(user: current_user)).execute
+
+ if result[:status] == :success
+ set_flash_message! :notice, :signed_up
+ redirect_to stored_location_or_dashboard_or_almost_there_path(current_user)
+ else
+ redirect_to users_sign_up_welcome_path, alert: result[:message]
+ end
+ end
+
protected
def persist_accepted_terms_if_required(new_user)
@@ -48,6 +80,10 @@ class RegistrationsController < Devise::RegistrationsController
end
end
+ def set_role_required(new_user)
+ new_user.set_role_required! if new_user.persisted? && experiment_enabled?(:signup_flow)
+ end
+
def destroy_confirmation_valid?
if current_user.confirm_deletion_with_password?
current_user.valid_password?(params[:password])
@@ -70,7 +106,10 @@ class RegistrationsController < Devise::RegistrationsController
def after_sign_up_path_for(user)
Gitlab::AppLogger.info(user_created_message(confirmed: user.confirmed?))
- confirmed_or_unconfirmed_access_allowed(user) ? stored_location_or_dashboard(user) : users_almost_there_path
+
+ return users_sign_up_welcome_path if experiment_enabled?(:signup_flow)
+
+ stored_location_or_dashboard_or_almost_there_path(user)
end
def after_inactive_sign_up_path_for(resource)
@@ -97,6 +136,7 @@ class RegistrationsController < Devise::RegistrationsController
ensure_correct_params!
return unless Feature.enabled?(:registrations_recaptcha, default_enabled: true) # reCAPTCHA on the UI will still display however
+ return if experiment_enabled?(:signup_flow) # when the experimental signup flow is enabled for the current user, disable the reCAPTCHA check
return unless show_recaptcha_sign_up?
return unless Gitlab::Recaptcha.load_configurations!
@@ -108,7 +148,13 @@ class RegistrationsController < Devise::RegistrationsController
end
def sign_up_params
- params.require(:user).permit(:username, :email, :email_confirmation, :name, :password)
+ clean_params = params.require(:user).permit(:username, :email, :email_confirmation, :name, :password)
+
+ if experiment_enabled?(:signup_flow)
+ clean_params[:name] = clean_params[:username]
+ end
+
+ clean_params
end
def resource_name
@@ -138,12 +184,26 @@ class RegistrationsController < Devise::RegistrationsController
end
def confirmed_or_unconfirmed_access_allowed(user)
- user.confirmed? || Feature.enabled?(:soft_email_confirmation)
+ user.confirmed? || Feature.enabled?(:soft_email_confirmation) || experiment_enabled?(:signup_flow)
end
def stored_location_or_dashboard(user)
stored_location_for(user) || dashboard_projects_path
end
+
+ def stored_location_or_dashboard_or_almost_there_path(user)
+ confirmed_or_unconfirmed_access_allowed(user) ? stored_location_or_dashboard(user) : users_almost_there_path
+ end
+
+ # Part of an experiment to build a new sign up flow. Will be resolved
+ # with https://gitlab.com/gitlab-org/growth/engineering/issues/64
+ def choose_layout
+ if experiment_enabled?(:signup_flow)
+ 'devise_experimental_separate_sign_up_flow'
+ else
+ 'devise'
+ end
+ end
end
RegistrationsController.prepend_if_ee('EE::RegistrationsController')
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index f8da152e3d2..1c506065b56 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -57,8 +57,14 @@ class SessionsController < Devise::SessionsController
reset_password_sent_at: nil)
end
- # hide the signed-in notification
- flash[:notice] = nil
+ if resource.deactivated?
+ resource.activate
+ flash[:notice] = _('Welcome back! Your account had been deactivated due to inactivity but is now reactivated.')
+ else
+ # hide the default signed-in notification
+ flash[:notice] = nil
+ end
+
log_audit_event(current_user, resource, with: authentication_method)
log_user_activity(current_user)
end
diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb
index 2adfeab182e..635db386792 100644
--- a/app/controllers/uploads_controller.rb
+++ b/app/controllers/uploads_controller.rb
@@ -81,8 +81,13 @@ class UploadsController < ApplicationController
end
end
- def cache_publicly?
- User === model || Appearance === model
+ def cache_settings
+ case model
+ when User, Appearance
+ [5.minutes, { public: true, must_revalidate: false }]
+ when Project, Group
+ [5.minutes, { private: true, must_revalidate: true }]
+ end
end
def secret?
diff --git a/app/finders/artifacts_finder.rb b/app/finders/artifacts_finder.rb
new file mode 100644
index 00000000000..81c5168d782
--- /dev/null
+++ b/app/finders/artifacts_finder.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class ArtifactsFinder
+ def initialize(project, params = {})
+ @project = project
+ @params = params
+ end
+
+ def execute
+ artifacts = @project.job_artifacts
+
+ sort(artifacts)
+ end
+
+ private
+
+ def sort_key
+ @params[:sort] || 'created_desc'
+ end
+
+ def sort(artifacts)
+ artifacts.order_by(sort_key)
+ end
+end
diff --git a/app/finders/clusters/kubernetes_namespace_finder.rb b/app/finders/clusters/kubernetes_namespace_finder.rb
index e947796c1e7..82df96ed79e 100644
--- a/app/finders/clusters/kubernetes_namespace_finder.rb
+++ b/app/finders/clusters/kubernetes_namespace_finder.rb
@@ -2,12 +2,12 @@
module Clusters
class KubernetesNamespaceFinder
- attr_reader :cluster, :project, :environment_slug
+ attr_reader :cluster, :project, :environment_name
- def initialize(cluster, project:, environment_slug:, allow_blank_token: false)
+ def initialize(cluster, project:, environment_name:, allow_blank_token: false)
@cluster = cluster
@project = project
- @environment_slug = environment_slug
+ @environment_name = environment_name
@allow_blank_token = allow_blank_token
end
@@ -20,7 +20,11 @@ module Clusters
attr_reader :allow_blank_token
def find_namespace(with_environment:)
- relation = with_environment ? namespaces.with_environment_slug(environment_slug) : namespaces
+ relation = if with_environment
+ namespaces.with_environment_name(environment_name)
+ else
+ namespaces
+ end
relation.find_by_project_id(project.id)
end
diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb
index 2364777cdc5..477093ddadf 100644
--- a/app/finders/issuable_finder.rb
+++ b/app/finders/issuable_finder.rb
@@ -161,7 +161,7 @@ class IssuableFinder
labels_count = label_names.any? ? label_names.count : 1
labels_count = 1 if use_cte_for_search?
- finder.execute.reorder(nil).group(:state).count.each do |key, value|
+ finder.execute.reorder(nil).group(:state_id).count.each do |key, value|
counts[count_key(key)] += value / labels_count
end
@@ -385,7 +385,8 @@ class IssuableFinder
end
def count_key(value)
- Array(value).last.to_sym
+ value = Array(value).last
+ klass.available_states.key(value)
end
# Negates all params found in `negatable_params`
@@ -444,7 +445,6 @@ class IssuableFinder
items
end
- # rubocop: disable CodeReuse/ActiveRecord
def by_state(items)
case params[:state].to_s
when 'closed'
@@ -454,12 +454,11 @@ class IssuableFinder
when 'opened'
items.opened
when 'locked'
- items.where(state: 'locked')
+ items.with_state(:locked)
else
items
end
end
- # rubocop: enable CodeReuse/ActiveRecord
def by_group(items)
# Selection by group is already covered by `by_project` and `projects`
diff --git a/app/finders/snippets_finder.rb b/app/finders/snippets_finder.rb
index bf29f15642d..bd6b6190fb5 100644
--- a/app/finders/snippets_finder.rb
+++ b/app/finders/snippets_finder.rb
@@ -41,13 +41,14 @@
class SnippetsFinder < UnionFinder
include FinderMethods
- attr_accessor :current_user, :project, :author, :scope
+ attr_accessor :current_user, :project, :author, :scope, :explore
def initialize(current_user = nil, params = {})
@current_user = current_user
@project = params[:project]
@author = params[:author]
@scope = params[:scope].to_s
+ @explore = params[:explore]
if project && author
raise(
@@ -59,18 +60,30 @@ class SnippetsFinder < UnionFinder
end
def execute
- base =
- if project
- snippets_for_a_single_project
- else
- snippets_for_multiple_projects
- end
-
+ base = init_collection
base.with_optional_visibility(visibility_from_scope).fresh
end
private
+ def init_collection
+ if explore
+ snippets_for_explore
+ elsif project
+ snippets_for_a_single_project
+ else
+ snippets_for_multiple_projects
+ end
+ end
+
+ # Produces a query that retrieves snippets for the Explore page
+ #
+ # We only show personal snippets here because this page is meant for
+ # discovery, and project snippets are of limited interest here.
+ def snippets_for_explore
+ Snippet.public_to_user(current_user).only_personal_snippets
+ end
+
# Produces a query that retrieves snippets from multiple projects.
#
# The resulting query will, depending on the user's permissions, include the
@@ -84,7 +97,7 @@ class SnippetsFinder < UnionFinder
# Each collection is constructed in isolation, allowing for greater control
# over the resulting SQL query.
def snippets_for_multiple_projects
- queries = [global_snippets]
+ queries = [personal_snippets]
if Ability.allowed?(current_user, :read_cross_project)
queries << snippets_of_visible_projects
@@ -98,8 +111,8 @@ class SnippetsFinder < UnionFinder
Snippet.for_project_with_user(project, current_user)
end
- def global_snippets
- snippets_for_author_or_visible_to_user.only_global_snippets
+ def personal_snippets
+ snippets_for_author_or_visible_to_user.only_personal_snippets
end
# Returns the snippets that the current user (logged in or not) can view.
@@ -115,7 +128,7 @@ class SnippetsFinder < UnionFinder
# This method requires that `current_user` returns a `User` instead of `nil`,
# and is optimised for this specific scenario.
def snippets_of_authorized_projects
- base = author ? snippets_for_author : Snippet.all
+ base = author ? author.snippets : Snippet.all
base
.only_include_projects_with_snippets_enabled(include_private: true)
@@ -157,3 +170,5 @@ class SnippetsFinder < UnionFinder
end
end
end
+
+SnippetsFinder.prepend_if_ee('EE::SnippetsFinder')
diff --git a/app/finders/todos_finder.rb b/app/finders/todos_finder.rb
index 427fd3e7d85..2b46e51290f 100644
--- a/app/finders/todos_finder.rb
+++ b/app/finders/todos_finder.rb
@@ -33,6 +33,8 @@ class TodosFinder
end
def execute
+ return Todo.none if current_user.nil?
+
items = current_user.todos
items = by_action_id(items)
items = by_action(items)
@@ -65,8 +67,20 @@ class TodosFinder
params[:action_id]
end
+ def action_array_provided?
+ params[:action].is_a?(Array)
+ end
+
+ def map_actions_to_ids
+ params[:action].map { |item| Todo::ACTION_NAMES.key(item.to_sym) }
+ end
+
def to_action_id
- Todo::ACTION_NAMES.key(action.to_sym)
+ if action_array_provided?
+ map_actions_to_ids
+ else
+ Todo::ACTION_NAMES.key(action.to_sym)
+ end
end
def action?
@@ -133,9 +147,19 @@ class TodosFinder
end
end
+ def action_id_array_provided?
+ params[:action_id].is_a?(Array) && params[:action_id].any?
+ end
+
+ def by_action_ids(items)
+ items.for_action(action_id)
+ end
+
def by_action_id(items)
+ return by_action_ids(items) if action_id_array_provided?
+
if action_id?
- items.for_action(action_id)
+ by_action_ids(items)
else
items
end
@@ -158,11 +182,9 @@ class TodosFinder
end
def by_group(items)
- if group?
- items.for_group_and_descendants(group)
- else
- items
- end
+ return items unless group?
+
+ items.for_group_ids_and_descendants(params[:group_id])
end
def by_state(items)
diff --git a/app/finders/user_finder.rb b/app/finders/user_finder.rb
index 556be4c4338..1dd1a27437e 100644
--- a/app/finders/user_finder.rb
+++ b/app/finders/user_finder.rb
@@ -52,6 +52,12 @@ class UserFinder
end
end
+ def find_by_ssh_key_id
+ return unless input_is_id?
+
+ User.find_by_ssh_key_id(@username_or_id)
+ end
+
def input_is_id?
@username_or_id.is_a?(Numeric) || @username_or_id =~ /^\d+$/
end
diff --git a/app/graphql/mutations/base_mutation.rb b/app/graphql/mutations/base_mutation.rb
index 7273a74cb86..623f7c27584 100644
--- a/app/graphql/mutations/base_mutation.rb
+++ b/app/graphql/mutations/base_mutation.rb
@@ -5,6 +5,8 @@ module Mutations
prepend Gitlab::Graphql::Authorize::AuthorizeResource
prepend Gitlab::Graphql::CopyFieldDescription
+ ERROR_MESSAGE = 'You cannot perform write operations on a read-only instance'
+
field :errors, [GraphQL::STRING_TYPE],
null: false,
description: "Reasons why the mutation failed."
@@ -17,5 +19,13 @@ module Mutations
def errors_on_object(record)
record.errors.full_messages
end
+
+ def ready?(**args)
+ if Gitlab::Database.read_only?
+ raise Gitlab::Graphql::Errors::ResourceNotAvailable, ERROR_MESSAGE
+ else
+ true
+ end
+ end
end
end
diff --git a/app/graphql/mutations/concerns/mutations/resolves_group.rb b/app/graphql/mutations/concerns/mutations/resolves_group.rb
new file mode 100644
index 00000000000..4306ce512f1
--- /dev/null
+++ b/app/graphql/mutations/concerns/mutations/resolves_group.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Mutations
+ module ResolvesGroup
+ extend ActiveSupport::Concern
+
+ def resolve_group(full_path:)
+ resolver.resolve(full_path: full_path)
+ end
+
+ def resolver
+ Resolvers::GroupResolver.new(object: nil, context: context)
+ end
+ end
+end
diff --git a/app/graphql/resolvers/issues_resolver.rb b/app/graphql/resolvers/issues_resolver.rb
index 850df2885aa..1fbc61cd950 100644
--- a/app/graphql/resolvers/issues_resolver.rb
+++ b/app/graphql/resolvers/issues_resolver.rb
@@ -35,7 +35,7 @@ module Resolvers
description: 'Issues closed after this date'
argument :search, GraphQL::STRING_TYPE, # rubocop:disable Graphql/Descriptions
required: false
- argument :sort, Types::SortEnum,
+ argument :sort, Types::IssueSortEnum,
description: 'Sort issues by this criteria',
required: false,
default_value: 'created_desc'
diff --git a/app/graphql/resolvers/last_commit_resolver.rb b/app/graphql/resolvers/last_commit_resolver.rb
new file mode 100644
index 00000000000..7a433d6556f
--- /dev/null
+++ b/app/graphql/resolvers/last_commit_resolver.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module Resolvers
+ class LastCommitResolver < BaseResolver
+ type Types::CommitType, null: true
+
+ alias_method :tree, :object
+
+ def resolve(**args)
+ # Ensure merge commits can be returned by sending nil to Gitaly instead of '/'
+ path = tree.path == '/' ? nil : tree.path
+ commit = Gitlab::Git::Commit.last_for_path(tree.repository, tree.sha, path)
+
+ ::Commit.new(commit, tree.repository.project) if commit
+ end
+ end
+end
diff --git a/app/graphql/resolvers/todo_resolver.rb b/app/graphql/resolvers/todo_resolver.rb
new file mode 100644
index 00000000000..38a4539f34a
--- /dev/null
+++ b/app/graphql/resolvers/todo_resolver.rb
@@ -0,0 +1,90 @@
+# frozen_string_literal: true
+
+module Resolvers
+ class TodoResolver < BaseResolver
+ type Types::TodoType, null: true
+
+ alias_method :user, :object
+
+ argument :action, [Types::TodoActionEnum],
+ required: false,
+ description: 'The action to be filtered'
+
+ argument :author_id, [GraphQL::ID_TYPE],
+ required: false,
+ description: 'The ID of an author'
+
+ argument :project_id, [GraphQL::ID_TYPE],
+ required: false,
+ description: 'The ID of a project'
+
+ argument :group_id, [GraphQL::ID_TYPE],
+ required: false,
+ description: 'The ID of a group'
+
+ argument :state, [Types::TodoStateEnum],
+ required: false,
+ description: 'The state of the todo'
+
+ argument :type, [Types::TodoTargetEnum],
+ required: false,
+ description: 'The type of the todo'
+
+ def resolve(**args)
+ return Todo.none if user != context[:current_user]
+
+ TodosFinder.new(user, todo_finder_params(args)).execute
+ end
+
+ private
+
+ # TODO: Support multiple queries for e.g. state and type on TodosFinder:
+ #
+ # https://gitlab.com/gitlab-org/gitlab/merge_requests/18487
+ # https://gitlab.com/gitlab-org/gitlab/merge_requests/18518
+ #
+ # As soon as these MR's are merged, we can refactor this to query by
+ # multiple contents.
+ #
+ def todo_finder_params(args)
+ {
+ state: first_state(args),
+ type: first_type(args),
+ group_id: first_group_id(args),
+ author_id: first_author_id(args),
+ action_id: first_action(args),
+ project_id: first_project(args)
+ }
+ end
+
+ def first_project(args)
+ first_query_field(args, :project_id)
+ end
+
+ def first_action(args)
+ first_query_field(args, :action)
+ end
+
+ def first_author_id(args)
+ first_query_field(args, :author_id)
+ end
+
+ def first_group_id(args)
+ first_query_field(args, :group_id)
+ end
+
+ def first_state(args)
+ first_query_field(args, :state)
+ end
+
+ def first_type(args)
+ first_query_field(args, :type)
+ end
+
+ def first_query_field(query, field)
+ return unless query.key?(field)
+
+ query[field].first if query[field].respond_to?(:first)
+ end
+ end
+end
diff --git a/app/graphql/types/commit_type.rb b/app/graphql/types/commit_type.rb
index dd2d81adb8b..fe71791f413 100644
--- a/app/graphql/types/commit_type.rb
+++ b/app/graphql/types/commit_type.rb
@@ -15,6 +15,8 @@ module Types
field :message, type: GraphQL::STRING_TYPE, null: true # rubocop:disable Graphql/Descriptions
field :authored_date, type: Types::TimeType, null: true # rubocop:disable Graphql/Descriptions
field :web_url, type: GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions
+ field :signature_html, type: GraphQL::STRING_TYPE,
+ null: true, calls_gitaly: true, description: 'Rendered html for the commit signature'
# models/commit lazy loads the author by email
field :author, type: Types::UserType, null: true # rubocop:disable Graphql/Descriptions
diff --git a/app/graphql/types/extended_issue_type.rb b/app/graphql/types/extended_issue_type.rb
new file mode 100644
index 00000000000..e007c1109a3
--- /dev/null
+++ b/app/graphql/types/extended_issue_type.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+module Types
+ class ExtendedIssueType < IssueType
+ graphql_name 'ExtendedIssue'
+
+ authorize :read_issue
+ expose_permissions Types::PermissionTypes::Issue
+ present_using IssuePresenter
+
+ field :subscribed, GraphQL::BOOLEAN_TYPE, method: :subscribed?, null: false, complexity: 5,
+ description: 'Boolean flag for whether the currently logged in user is subscribed to this issue'
+ end
+end
diff --git a/app/graphql/types/issuable_sort_enum.rb b/app/graphql/types/issuable_sort_enum.rb
new file mode 100644
index 00000000000..932e90c2d22
--- /dev/null
+++ b/app/graphql/types/issuable_sort_enum.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+module Types
+ # rubocop: disable Graphql/AuthorizeTypes
+ class IssuableSortEnum < SortEnum
+ graphql_name 'IssuableSort'
+ description 'Values for sorting issuables'
+ end
+ # rubocop: enable Graphql/AuthorizeTypes
+end
diff --git a/app/graphql/types/issue_sort_enum.rb b/app/graphql/types/issue_sort_enum.rb
new file mode 100644
index 00000000000..ad919b55481
--- /dev/null
+++ b/app/graphql/types/issue_sort_enum.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+module Types
+ # rubocop: disable Graphql/AuthorizeTypes
+ class IssueSortEnum < IssuableSortEnum
+ graphql_name 'IssueSort'
+ description 'Values for sorting issues'
+ end
+ # rubocop: enable Graphql/AuthorizeTypes
+end
diff --git a/app/graphql/types/issue_type.rb b/app/graphql/types/issue_type.rb
index 09e51ae4bc0..4965601fe65 100644
--- a/app/graphql/types/issue_type.rb
+++ b/app/graphql/types/issue_type.rb
@@ -49,6 +49,10 @@ module Types
field :web_url, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions
field :relative_position, GraphQL::INT_TYPE, null: true # rubocop:disable Graphql/Descriptions
+ field :participants, Types::UserType.connection_type, null: true, complexity: 5, description: 'List of participants for the issue'
+ field :time_estimate, GraphQL::INT_TYPE, null: false, description: 'The time estimate on the issue'
+ field :total_time_spent, GraphQL::INT_TYPE, null: false, description: 'Total time reported as spent on the issue'
+
field :closed_at, Types::TimeType, null: true # rubocop:disable Graphql/Descriptions
field :created_at, Types::TimeType, null: false # rubocop:disable Graphql/Descriptions
diff --git a/app/graphql/types/merge_request_type.rb b/app/graphql/types/merge_request_type.rb
index 1baaa33c819..71a65dc6713 100644
--- a/app/graphql/types/merge_request_type.rb
+++ b/app/graphql/types/merge_request_type.rb
@@ -55,12 +55,27 @@ module Types
field :web_url, GraphQL::STRING_TYPE, null: true # rubocop:disable Graphql/Descriptions
field :upvotes, GraphQL::INT_TYPE, null: false # rubocop:disable Graphql/Descriptions
field :downvotes, GraphQL::INT_TYPE, null: false # rubocop:disable Graphql/Descriptions
- field :subscribed, GraphQL::BOOLEAN_TYPE, method: :subscribed?, null: false # rubocop:disable Graphql/Descriptions
field :head_pipeline, Types::Ci::PipelineType, null: true, method: :actual_head_pipeline # rubocop:disable Graphql/Descriptions
field :pipelines, Types::Ci::PipelineType.connection_type, # rubocop:disable Graphql/Descriptions
resolver: Resolvers::MergeRequestPipelinesResolver
+ field :milestone, Types::MilestoneType, description: 'The milestone this merge request is linked to',
+ null: true,
+ resolve: -> (obj, _args, _ctx) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Milestone, obj.milestone_id).find }
+ field :assignees, Types::UserType.connection_type, null: true, complexity: 5, description: 'The list of assignees for the merge request'
+ field :participants, Types::UserType.connection_type, null: true, complexity: 5, description: 'The list of participants on the merge request'
+ field :subscribed, GraphQL::BOOLEAN_TYPE, method: :subscribed?, null: false, complexity: 5,
+ description: 'Boolean flag for whether the currently logged in user is subscribed to this MR'
+ field :labels, Types::LabelType.connection_type, null: true, complexity: 5, description: 'The list of labels on the merge request'
+ field :discussion_locked, GraphQL::BOOLEAN_TYPE, description: 'Boolean flag determining if comments on the merge request are locked to members only',
+ null: false,
+ resolve: -> (obj, _args, _ctx) { !!obj.discussion_locked }
+ field :time_estimate, GraphQL::INT_TYPE, null: false, description: 'The time estimate for the merge request'
+ field :total_time_spent, GraphQL::INT_TYPE, null: false, description: 'Total time reported as spent on the merge request'
+ field :reference, GraphQL::STRING_TYPE, null: false, method: :to_reference, description: 'Internal merge request reference. Returned in shortened format by default' do
+ argument :full, GraphQL::BOOLEAN_TYPE, required: false, default_value: false, description: 'Boolean option specifying whether the reference should be returned in full'
+ end
field :task_completion_status, Types::TaskCompletionStatus, null: false # rubocop:disable Graphql/Descriptions
end
end
diff --git a/app/graphql/types/project_type.rb b/app/graphql/types/project_type.rb
index 7184cf42284..5663f833b7a 100644
--- a/app/graphql/types/project_type.rb
+++ b/app/graphql/types/project_type.rb
@@ -92,7 +92,7 @@ module Types
resolver: Resolvers::IssuesResolver
field :issue, # rubocop:disable Graphql/Descriptions
- Types::IssueType,
+ Types::ExtendedIssueType,
null: true,
resolver: Resolvers::IssuesResolver.single
diff --git a/app/graphql/types/query_type.rb b/app/graphql/types/query_type.rb
index bbf94fb92df..996bf225976 100644
--- a/app/graphql/types/query_type.rb
+++ b/app/graphql/types/query_type.rb
@@ -14,6 +14,11 @@ module Types
resolver: Resolvers::GroupResolver,
description: "Find a group"
+ field :current_user, Types::UserType,
+ null: true,
+ resolve: -> (_obj, _args, context) { context[:current_user] },
+ description: "Get information about current user"
+
field :namespace, Types::NamespaceType,
null: true,
resolver: Resolvers::NamespaceResolver,
diff --git a/app/graphql/types/todo_action_enum.rb b/app/graphql/types/todo_action_enum.rb
new file mode 100644
index 00000000000..0e538838474
--- /dev/null
+++ b/app/graphql/types/todo_action_enum.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Types
+ class TodoActionEnum < BaseEnum
+ value 'assigned', value: 1
+ value 'mentioned', value: 2
+ value 'build_failed', value: 3
+ value 'marked', value: 4
+ value 'approval_required', value: 5
+ value 'unmergeable', value: 6
+ value 'directly_addressed', value: 7
+ end
+end
diff --git a/app/graphql/types/todo_state_enum.rb b/app/graphql/types/todo_state_enum.rb
new file mode 100644
index 00000000000..29a28b5208d
--- /dev/null
+++ b/app/graphql/types/todo_state_enum.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+module Types
+ class TodoStateEnum < BaseEnum
+ value 'pending'
+ value 'done'
+ end
+end
diff --git a/app/graphql/types/todo_target_enum.rb b/app/graphql/types/todo_target_enum.rb
new file mode 100644
index 00000000000..9a7391dcd99
--- /dev/null
+++ b/app/graphql/types/todo_target_enum.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+module Types
+ class TodoTargetEnum < BaseEnum
+ value 'Issue'
+ value 'MergeRequest'
+ value 'Epic'
+ end
+end
diff --git a/app/graphql/types/todo_type.rb b/app/graphql/types/todo_type.rb
new file mode 100644
index 00000000000..d36daaf7dec
--- /dev/null
+++ b/app/graphql/types/todo_type.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+module Types
+ class TodoType < BaseObject
+ graphql_name 'Todo'
+ description 'Representing a todo entry'
+
+ present_using TodoPresenter
+
+ authorize :read_todo
+
+ field :id, GraphQL::ID_TYPE,
+ description: 'Id of the todo',
+ null: false
+
+ field :project, Types::ProjectType,
+ description: 'The project this todo is associated with',
+ null: true,
+ authorize: :read_project,
+ resolve: -> (todo, args, context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Project, todo.project_id).find }
+
+ field :group, Types::GroupType,
+ description: 'Group this todo is associated with',
+ null: true,
+ authorize: :read_group,
+ resolve: -> (todo, args, context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Group, todo.group_id).find }
+
+ field :author, Types::UserType,
+ description: 'The owner of this todo',
+ null: false,
+ resolve: -> (todo, args, context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(User, todo.author_id).find }
+
+ field :action, Types::TodoActionEnum,
+ description: 'Action of the todo',
+ null: false
+
+ field :target_type, Types::TodoTargetEnum,
+ description: 'Target type of the todo',
+ null: false
+
+ field :body, GraphQL::STRING_TYPE,
+ description: 'Body of the todo',
+ null: false
+
+ field :state, Types::TodoStateEnum,
+ description: 'State of the todo',
+ null: false
+
+ field :created_at, Types::TimeType,
+ description: 'Timestamp this todo was created',
+ null: false
+ end
+end
diff --git a/app/graphql/types/tree/tree_type.rb b/app/graphql/types/tree/tree_type.rb
index b967cf3a247..56d544b5fd1 100644
--- a/app/graphql/types/tree/tree_type.rb
+++ b/app/graphql/types/tree/tree_type.rb
@@ -7,9 +7,9 @@ module Types
graphql_name 'Tree'
# Complexity 10 as it triggers a Gitaly call on each render
- field :last_commit, Types::CommitType, null: true, complexity: 10, calls_gitaly: true, resolve: -> (tree, args, ctx) do # rubocop:disable Graphql/Descriptions
- tree.repository.last_commit_for_path(tree.sha, tree.path)
- end
+ field :last_commit, Types::CommitType,
+ null: true, complexity: 10, calls_gitaly: true, resolver: Resolvers::LastCommitResolver,
+ description: 'Last commit for the tree'
field :trees, Types::Tree::TreeEntryType.connection_type, null: false, resolve: -> (obj, args, ctx) do # rubocop:disable Graphql/Descriptions
Gitlab::Graphql::Representation::TreeEntry.decorate(obj.trees, obj.repository)
diff --git a/app/graphql/types/user_type.rb b/app/graphql/types/user_type.rb
index 9f7d2a171d6..1ba37927b40 100644
--- a/app/graphql/types/user_type.rb
+++ b/app/graphql/types/user_type.rb
@@ -12,5 +12,8 @@ module Types
field :username, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions
field :avatar_url, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions
field :web_url, GraphQL::STRING_TYPE, null: false # rubocop:disable Graphql/Descriptions
+ field :todos, Types::TodoType.connection_type, null: false,
+ resolver: Resolvers::TodoResolver,
+ description: 'Todos of this user'
end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 5c2420e80f2..ecaeb7060c8 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -108,6 +108,11 @@ module ApplicationHelper
Gitlab.config.extra
end
+ # shortcut for gitlab registry config
+ def registry_config
+ Gitlab.config.registry
+ end
+
# Render a `time` element with Javascript-based relative date and tooltip
#
# time - Time object
diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb
index 8c5be1c315d..df17b82412f 100644
--- a/app/helpers/application_settings_helper.rb
+++ b/app/helpers/application_settings_helper.rb
@@ -265,6 +265,10 @@ module ApplicationSettingsHelper
:throttle_unauthenticated_enabled,
:throttle_unauthenticated_period_in_seconds,
:throttle_unauthenticated_requests_per_period,
+ :throttle_protected_paths_enabled,
+ :throttle_protected_paths_period_in_seconds,
+ :throttle_protected_paths_requests_per_period,
+ :protected_paths_raw,
:time_tracking_limit_to_hours,
:two_factor_grace_period,
:unique_ips_limit_enabled,
@@ -285,7 +289,10 @@ module ApplicationSettingsHelper
:snowplow_collector_hostname,
:snowplow_cookie_domain,
:snowplow_enabled,
- :snowplow_site_id
+ :snowplow_site_id,
+ :push_event_hooks_limit,
+ :push_event_activities_limit,
+ :custom_http_clone_url_root
]
end
@@ -308,6 +315,10 @@ module ApplicationSettingsHelper
def instance_clusters_enabled?
can?(current_user, :read_cluster, Clusters::Instance.new)
end
+
+ def omnibus_protected_paths_throttle?
+ Rack::Attack.throttles.key?('protected paths')
+ end
end
ApplicationSettingsHelper.prepend_if_ee('EE::ApplicationSettingsHelper') # rubocop: disable Cop/InjectEnterpriseEditionModule
diff --git a/app/helpers/avatars_helper.rb b/app/helpers/avatars_helper.rb
index b7f7e617825..733d21daec1 100644
--- a/app/helpers/avatars_helper.rb
+++ b/app/helpers/avatars_helper.rb
@@ -56,16 +56,6 @@ module AvatarsHelper
}))
end
- def user_avatar_url_for(only_path: true, **options)
- if options[:url]
- options[:url]
- elsif options[:user]
- avatar_icon_for_user(options[:user], options[:size], only_path: only_path)
- else
- avatar_icon_for_email(options[:user_email], options[:size], only_path: only_path)
- end
- end
-
def user_avatar_without_link(options = {})
avatar_size = options[:size] || 16
user_name = options[:user].try(:name) || options[:user_name]
@@ -111,6 +101,19 @@ module AvatarsHelper
private
+ def user_avatar_url_for(only_path: true, **options)
+ return options[:url] if options[:url]
+
+ email = options[:user_email]
+ user = options.key?(:user) ? options[:user] : User.find_by_any_email(email)
+
+ if user
+ avatar_icon_for_user(user, options[:size], only_path: only_path)
+ else
+ gravatar_icon(email, options[:size])
+ end
+ end
+
def source_icon(source, options = {})
avatar_url = source.try(:avatar_url)
diff --git a/app/helpers/blob_helper.rb b/app/helpers/blob_helper.rb
index 4b0713001a1..5c24b0e1704 100644
--- a/app/helpers/blob_helper.rb
+++ b/app/helpers/blob_helper.rb
@@ -32,6 +32,14 @@ module BlobHelper
File.join(segments)
end
+ def ide_fork_and_edit_path(project = @project, ref = @ref, path = @path, options = {})
+ if current_user
+ project_forks_path(project,
+ namespace_key: current_user&.namespace&.id,
+ continue: edit_blob_fork_params(ide_edit_path(project, ref, path)))
+ end
+ end
+
def encode_ide_path(path)
url_encode(path).gsub('%2F', '/')
end
@@ -197,13 +205,13 @@ module BlobHelper
end
def copy_file_path_button(file_path)
- clipboard_button(text: file_path, gfm: "`#{file_path}`", class: 'btn-clipboard btn-transparent', title: 'Copy file path to clipboard')
+ clipboard_button(text: file_path, gfm: "`#{file_path}`", class: 'btn-clipboard btn-transparent', title: _('Copy file path'))
end
def copy_blob_source_button(blob)
return unless blob.rendered_as_text?(ignore_errors: false)
- clipboard_button(target: ".blob-content[data-blob-id='#{blob.id}']", class: "btn btn-sm js-copy-blob-source-btn", title: "Copy source to clipboard")
+ clipboard_button(target: ".blob-content[data-blob-id='#{blob.id}']", class: "btn btn-sm js-copy-blob-source-btn", title: _("Copy file contents"))
end
def open_raw_blob_button(blob)
diff --git a/app/helpers/button_helper.rb b/app/helpers/button_helper.rb
index 12cd5403f71..610d823dd3c 100644
--- a/app/helpers/button_helper.rb
+++ b/app/helpers/button_helper.rb
@@ -21,7 +21,7 @@ module ButtonHelper
# See http://clipboardjs.com/#usage
def clipboard_button(data = {})
css_class = data[:class] || 'btn-clipboard btn-transparent'
- title = data[:title] || _('Copy to clipboard')
+ title = data[:title] || _('Copy')
button_text = data[:button_text] || ''
hide_tooltip = data[:hide_tooltip] || false
hide_button_icon = data[:hide_button_icon] || false
diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb
index 144df676304..4471d5b64b2 100644
--- a/app/helpers/ci_status_helper.rb
+++ b/app/helpers/ci_status_helper.rb
@@ -64,7 +64,7 @@ module CiStatusHelper
def ci_icon_for_status(status, size: 16)
if detailed_status?(status)
- return sprite_icon(status.icon)
+ return sprite_icon(status.icon, size: size)
end
icon_name =
@@ -77,6 +77,8 @@ module CiStatusHelper
'status_failed'
when 'pending'
'status_pending'
+ when 'preparing'
+ 'status_preparing'
when 'running'
'status_running'
when 'play'
@@ -96,23 +98,29 @@ module CiStatusHelper
sprite_icon(icon_name, size: size)
end
+ def ci_icon_class_for_status(status)
+ group = detailed_status?(status) ? status.group : status.dasherize
+
+ "ci-status-icon-#{group}"
+ end
+
def pipeline_status_cache_key(pipeline_status)
"pipeline-status/#{pipeline_status.sha}-#{pipeline_status.status}"
end
- def render_commit_status(commit, ref: nil, tooltip_placement: 'left')
+ def render_commit_status(commit, status, ref: nil, tooltip_placement: 'left')
project = commit.project
path = pipelines_project_commit_path(project, commit, ref: ref)
render_status_with_link(
- commit.status(ref),
+ status,
path,
tooltip_placement: tooltip_placement,
icon_size: 24)
end
def render_status_with_link(status, path = nil, type: _('pipeline'), tooltip_placement: 'left', cssclass: '', container: 'body', icon_size: 16)
- klass = "ci-status-link ci-status-icon-#{status.dasherize} d-inline-flex #{cssclass}"
+ klass = "ci-status-link #{ci_icon_class_for_status(status)} d-inline-flex #{cssclass}"
title = "#{type.titleize}: #{ci_label_for_status(status)}"
data = { toggle: 'tooltip', placement: tooltip_placement, container: container }
@@ -127,6 +135,7 @@ module CiStatusHelper
def detailed_status?(status)
status.respond_to?(:text) &&
+ status.respond_to?(:group) &&
status.respond_to?(:label) &&
status.respond_to?(:icon)
end
diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb
index 7f3e78f3a81..52ec2eadf5e 100644
--- a/app/helpers/diff_helper.rb
+++ b/app/helpers/diff_helper.rb
@@ -60,9 +60,14 @@ module DiffHelper
if line.blank?
"&nbsp;".html_safe
else
- # We can't use `sub` because the HTML-safeness of `line` will not survive.
- line[0] = '' if line.start_with?('+', '-', ' ')
- line
+ # `sub` and substring-ing would destroy HTML-safeness of `line`
+ if line.start_with?('+', '-', ' ')
+ line.dup.tap do |line|
+ line[0] = ''
+ end
+ else
+ line
+ end
end
end
@@ -198,8 +203,8 @@ module DiffHelper
link_to "#{hide_whitespace? ? 'Show' : 'Hide'} whitespace changes", url, class: options[:class]
end
- def render_overflow_warning?(diff_files)
- diffs = @merge_request_diff.presence || diff_files
+ def render_overflow_warning?(diffs_collection)
+ diffs = @merge_request_diff.presence || diffs_collection.diff_files
diffs.overflow?
end
diff --git a/app/helpers/environment_helper.rb b/app/helpers/environment_helper.rb
index 2b7320817ed..52f189b122f 100644
--- a/app/helpers/environment_helper.rb
+++ b/app/helpers/environment_helper.rb
@@ -18,12 +18,16 @@ module EnvironmentHelper
end
end
+ def deployment_path(deployment)
+ [deployment.project.namespace.becomes(Namespace), deployment.project, deployment.deployable]
+ end
+
def deployment_link(deployment, text: nil)
return unless deployment
link_label = text ? text : "##{deployment.iid}"
- link_to link_label, [deployment.project.namespace.becomes(Namespace), deployment.project, deployment.deployable]
+ link_to link_label, deployment_path(deployment)
end
def last_deployment_link_for_environment_build(project, build)
@@ -32,4 +36,31 @@ module EnvironmentHelper
deployment_link(environment.last_deployment)
end
+
+ def render_deployment_status(deployment)
+ status = deployment.status
+
+ status_text =
+ case status
+ when 'created'
+ s_('Deployment|created')
+ when 'running'
+ s_('Deployment|running')
+ when 'success'
+ s_('Deployment|success')
+ when 'failed'
+ s_('Deployment|failed')
+ when 'canceled'
+ s_('Deployment|canceled')
+ end
+
+ klass = "ci-status ci-#{status.dasherize}"
+ text = "#{ci_icon_for_status(status)} #{status_text}".html_safe
+
+ if deployment.deployable
+ link_to(text, deployment_path(deployment), class: klass)
+ else
+ content_tag(:span, text, class: klass)
+ end
+ end
end
diff --git a/app/helpers/export_helper.rb b/app/helpers/export_helper.rb
new file mode 100644
index 00000000000..d03fa6eadb2
--- /dev/null
+++ b/app/helpers/export_helper.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module ExportHelper
+ # An EE-overwriteable list of descriptions
+ def project_export_descriptions
+ [
+ _('Project and wiki repositories'),
+ _('Project uploads'),
+ _('Project configuration, including services'),
+ _('Issues with comments, merge requests with diffs and comments, labels, milestones, snippets, and other project entities'),
+ _('LFS objects'),
+ _('Issue Boards')
+ ]
+ end
+end
+
+ExportHelper.prepend_if_ee('EE::ExportHelper')
diff --git a/app/helpers/gitlab_routing_helper.rb b/app/helpers/gitlab_routing_helper.rb
index f524696cc2f..4f31cc67ccc 100644
--- a/app/helpers/gitlab_routing_helper.rb
+++ b/app/helpers/gitlab_routing_helper.rb
@@ -58,7 +58,7 @@ module GitlabRoutingHelper
end
def commits_url(entity, *args)
- project_commits_url(entity.project, entity.ref, *args)
+ project_commits_url(entity.project, entity.source_ref, *args)
end
def commit_url(entity, *args)
@@ -76,10 +76,10 @@ module GitlabRoutingHelper
end
def edit_milestone_path(entity, *args)
- if entity.parent.is_a?(Group)
- edit_group_milestone_path(entity.parent, entity, *args)
+ if entity.resource_parent.is_a?(Group)
+ edit_group_milestone_path(entity.resource_parent, entity, *args)
else
- edit_project_milestone_path(entity.parent, entity, *args)
+ edit_project_milestone_path(entity.resource_parent, entity, *args)
end
end
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index 601560cca92..6ddcbf61090 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -15,6 +15,18 @@ module GroupsHelper
%w[groups#projects groups#edit badges#index ci_cd#show ldap_group_links#index hooks#index audit_events#index pipeline_quota#index]
end
+ def group_packages_nav_link_paths
+ %w[
+ groups/container_registries#index
+ ]
+ end
+
+ def group_container_registry_nav?
+ Gitlab.config.registry.enabled &&
+ can?(current_user, :read_container_image, @group) &&
+ Feature.enabled?(:group_container_registry_browser, @group)
+ end
+
def group_sidebar_links
@group_sidebar_links ||= get_group_sidebar_links
end
@@ -32,8 +44,7 @@ module GroupsHelper
end
def can_disable_group_emails?(group)
- Feature.enabled?(:emails_disabled, group, default_enabled: true) &&
- can?(current_user, :set_emails_disabled, group) && !group.parent&.emails_disabled?
+ can?(current_user, :set_emails_disabled, group) && !group.parent&.emails_disabled?
end
def group_issues_count(state:)
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index 014523b54cb..df9d1933271 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -272,7 +272,7 @@ module IssuablesHelper
markdownPreviewPath: preview_markdown_path(parent),
markdownDocsPath: help_page_path('user/markdown'),
lockVersion: issuable.lock_version,
- issuableTemplates: issuable_templates(issuable),
+ issuableTemplateNamesPath: template_names_path(parent, issuable),
initialTitleHtml: markdown_field(issuable, :title),
initialTitleText: issuable.title,
initialDescriptionHtml: markdown_field(issuable, :description),
@@ -372,6 +372,12 @@ module IssuablesHelper
finder.class.scalar_params.any? { |p| params[p].present? }
end
+ def assignee_sidebar_data(assignee, merge_request: nil)
+ { avatar_url: assignee.avatar_url, name: assignee.name, username: assignee.username }.tap do |data|
+ data[:can_merge] = merge_request.can_be_merged_by?(assignee) if merge_request
+ end
+ end
+
private
def sidebar_gutter_collapsed?
@@ -429,6 +435,12 @@ module IssuablesHelper
end
end
+ def template_names_path(parent, issuable)
+ return '' unless parent.is_a?(Project)
+
+ project_template_names_path(parent, template_type: issuable.class.name.underscore)
+ end
+
def issuable_sidebar_options(issuable)
{
endpoint: "#{issuable[:issuable_json_path]}?serializer=sidebar_extras",
diff --git a/app/helpers/nav_helper.rb b/app/helpers/nav_helper.rb
index 6aa910e6c3f..2ce45cec878 100644
--- a/app/helpers/nav_helper.rb
+++ b/app/helpers/nav_helper.rb
@@ -20,7 +20,6 @@ module NavHelper
def page_gutter_class
if page_has_markdown?
-
if cookies[:collapsed_gutter] == 'true'
%w[page-gutter right-sidebar-collapsed]
else
@@ -87,6 +86,12 @@ module NavHelper
links << :admin_impersonation
end
+ if Feature.enabled?(:user_mode_in_session)
+ if current_user&.admin? && current_user_mode&.admin_mode?
+ links << :admin_mode
+ end
+ end
+
links
end
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index bf6abdb8c4b..16360c7139a 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -76,7 +76,7 @@ module ProjectsHelper
link_to(author_html, user_path(author), class: "author-link js-user-link #{"#{opts[:extra_class]}" if opts[:extra_class]} #{"#{opts[:mobile_classes]}" if opts[:mobile_classes]}", data: data_attrs).html_safe
else
title = opts[:title].sub(":name", sanitize(author.name))
- link_to(author_html, user_path(author), class: "author-link has-tooltip", title: title, data: { container: 'body' }).html_safe
+ link_to(author_html, user_path(author), class: "author-link has-tooltip", title: title, data: { container: 'body', qa_selector: 'assignee_link' }).html_safe
end
end
@@ -160,7 +160,7 @@ module ProjectsHelper
def can_disable_emails?(project, current_user)
return false if project.group&.emails_disabled?
- can?(current_user, :set_emails_disabled, project) && Feature.enabled?(:emails_disabled, project, default_enabled: true)
+ can?(current_user, :set_emails_disabled, project)
end
def last_push_event
@@ -168,7 +168,7 @@ module ProjectsHelper
end
def link_to_autodeploy_doc
- link_to _('About auto deploy'), help_page_path('ci/autodeploy/index'), target: '_blank'
+ link_to _('About auto deploy'), help_page_path('autodevops/index.md#auto-deploy'), target: '_blank'
end
def autodeploy_flash_notice(branch_name)
@@ -354,6 +354,14 @@ module ProjectsHelper
@project.metrics_setting_external_dashboard_url
end
+ def grafana_integration_url
+ @project.grafana_integration&.grafana_url
+ end
+
+ def grafana_integration_token
+ @project.grafana_integration&.token
+ end
+
private
def get_project_nav_tabs(project, current_user)
@@ -565,7 +573,7 @@ module ProjectsHelper
lfsHelpPath: help_page_path('workflow/lfs/manage_large_binaries_with_git_lfs'),
pagesAvailable: Gitlab.config.pages.enabled,
pagesAccessControlEnabled: Gitlab.config.pages.access_control,
- pagesHelpPath: help_page_path('user/project/pages/introduction', anchor: 'gitlab-pages-access-control-core-only')
+ pagesHelpPath: help_page_path('user/project/pages/introduction', anchor: 'gitlab-pages-access-control-core')
}
end
diff --git a/app/helpers/releases_helper.rb b/app/helpers/releases_helper.rb
index 4d9fe345edf..68a19152d8f 100644
--- a/app/helpers/releases_helper.rb
+++ b/app/helpers/releases_helper.rb
@@ -12,27 +12,21 @@ module ReleasesHelper
help_page_path(DOCUMENTATION_PATH)
end
- def url_for_merge_requests
- project_merge_requests_url(@project, params_for_issue_and_mr_paths)
- end
-
- def url_for_issues
- project_issues_url(@project, params_for_issue_and_mr_paths)
- end
-
def data_for_releases_page
{
project_id: @project.id,
illustration_path: illustration,
- documentation_path: help_page,
- merge_requests_url: url_for_merge_requests,
- issues_url: url_for_issues
+ documentation_path: help_page
}
end
- private
-
- def params_for_issue_and_mr_paths
- { scope: 'all', state: 'opened' }
+ def data_for_edit_release_page
+ {
+ project_id: @project.id,
+ tag_name: @release.tag,
+ markdown_preview_path: preview_markdown_path(@project),
+ markdown_docs_path: help_page_path('user/markdown'),
+ releases_page_path: project_releases_path(@project, anchor: @release.tag)
+ }
end
end
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index 0f4e5adca6c..9a19758b4e8 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -34,15 +34,15 @@ module SearchHelper
from: from,
to: to,
count: count,
- scope: search_entries_info_label(scope, count),
+ scope: search_entries_scope_label(scope, count),
term: term
}
end
- def search_entries_info_label(scope, count)
+ def search_entries_scope_label(scope, count)
case scope
- when 'blobs', 'snippet_blobs', 'wiki_blobs'
- ns_('SearchResults|result', 'SearchResults|results', count)
+ when 'blobs'
+ ns_('SearchResults|code result', 'SearchResults|code results', count)
when 'commits'
ns_('SearchResults|commit', 'SearchResults|commits', count)
when 'issues'
@@ -55,10 +55,14 @@ module SearchHelper
ns_('SearchResults|comment', 'SearchResults|comments', count)
when 'projects'
ns_('SearchResults|project', 'SearchResults|projects', count)
+ when 'snippet_blobs'
+ ns_('SearchResults|snippet result', 'SearchResults|snippet results', count)
when 'snippet_titles'
ns_('SearchResults|snippet', 'SearchResults|snippets', count)
when 'users'
ns_('SearchResults|user', 'SearchResults|users', count)
+ when 'wiki_blobs'
+ ns_('SearchResults|wiki result', 'SearchResults|wiki results', count)
else
raise "Unrecognized search scope '#{scope}'"
end
@@ -72,6 +76,13 @@ module SearchHelper
end
end
+ def search_entries_empty_message(scope, term)
+ (s_("SearchResults|We couldn't find any %{scope} matching %{term}") % {
+ scope: search_entries_scope_label(scope, 0),
+ term: "<code>#{h(term)}</code>"
+ }).html_safe
+ end
+
def find_project_for_result_blob(projects, result)
@project
end
diff --git a/app/helpers/sorting_helper.rb b/app/helpers/sorting_helper.rb
index d680e10525d..33f3bb0b749 100644
--- a/app/helpers/sorting_helper.rb
+++ b/app/helpers/sorting_helper.rb
@@ -28,7 +28,9 @@ module SortingHelper
sort_value_priority => sort_title_priority,
sort_value_upvotes => sort_title_upvotes,
sort_value_contacted_date => sort_title_contacted_date,
- sort_value_relative_position => sort_title_relative_position
+ sort_value_relative_position => sort_title_relative_position,
+ sort_value_size => sort_title_size,
+ sort_value_expire_date => sort_title_expire_date
}
end
@@ -406,6 +408,14 @@ module SortingHelper
s_('SortOptions|Manual')
end
+ def sort_title_size
+ s_('SortOptions|Size')
+ end
+
+ def sort_title_expire_date
+ s_('SortOptions|Expired date')
+ end
+
# Values.
def sort_value_access_level_asc
'access_level_asc'
@@ -558,4 +568,12 @@ module SortingHelper
def sort_value_relative_position
'relative_position'
end
+
+ def sort_value_size
+ 'size_desc'
+ end
+
+ def sort_value_expire_date
+ 'expired_asc'
+ end
end
diff --git a/app/helpers/submodule_helper.rb b/app/helpers/submodule_helper.rb
index e683e2959d1..4b83988e8bb 100644
--- a/app/helpers/submodule_helper.rb
+++ b/app/helpers/submodule_helper.rb
@@ -81,7 +81,7 @@ module SubmoduleHelper
end
def relative_self_links(relative_path, commit, project)
- relative_path.rstrip!
+ relative_path = relative_path.rstrip
absolute_project_path = "/" + project.full_path
# Resolve `relative_path` to target path
diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb
index de0b92b6fd7..4984b51555d 100644
--- a/app/helpers/tags_helper.rb
+++ b/app/helpers/tags_helper.rb
@@ -28,4 +28,14 @@ module TagsHelper
def protected_tag?(project, tag)
ProtectedTag.protected?(project, tag.name)
end
+
+ def tag_description_help_text
+ text = s_('TagsPage|Optionally, add a message to the tag. Leaving this blank creates '\
+ 'a %{link_start}lightweight tag.%{link_end}') % {
+ link_start: '<a href="https://git-scm.com/book/en/v2/Git-Basics-Tagging\" target="_blank" rel="noopener noreferrer">',
+ link_end: '</a>'
+ }
+
+ text.html_safe
+ end
end
diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb
index a919c068c42..dce0842060d 100644
--- a/app/helpers/todos_helper.rb
+++ b/app/helpers/todos_helper.rb
@@ -45,8 +45,8 @@ module TodosHelper
end
def todo_parent_path(todo)
- if todo.parent.is_a?(Group)
- link_to todo.parent.name, group_path(todo.parent)
+ if todo.resource_parent.is_a?(Group)
+ link_to todo.resource_parent.name, group_path(todo.resource_parent)
else
link_to_project(todo.project)
end
@@ -64,7 +64,7 @@ module TodosHelper
if todo.for_commit?
project_commit_path(todo.project, todo.target, path_options)
else
- path = [todo.parent, todo.target]
+ path = [todo.resource_parent, todo.target]
path.unshift(:pipelines) if todo.build_failed?
diff --git a/app/mailers/emails/issues.rb b/app/mailers/emails/issues.rb
index 47d15836da0..3fd865003c1 100644
--- a/app/mailers/emails/issues.rb
+++ b/app/mailers/emails/issues.rb
@@ -85,7 +85,7 @@ module Emails
@project = Project.find(project_id)
@results = results
- mail(to: recipient(@user.id, @project.group), subject: subject('Imported issues')) do |format|
+ mail(to: @user.notification_email_for(@project.group), subject: subject('Imported issues')) do |format|
format.html { render layout: 'mailer' }
format.text { render layout: 'mailer' }
end
@@ -105,7 +105,7 @@ module Emails
def issue_thread_options(sender_id, recipient_id, reason)
{
from: sender(sender_id),
- to: recipient(recipient_id, @project.group),
+ to: User.find(recipient_id).notification_email_for(@project.group),
subject: subject("#{@issue.title} (##{@issue.iid})"),
'X-GitLab-NotificationReason' => reason
}
diff --git a/app/mailers/emails/members.rb b/app/mailers/emails/members.rb
index 76fa7236ab1..ea8032324aa 100644
--- a/app/mailers/emails/members.rb
+++ b/app/mailers/emails/members.rb
@@ -13,7 +13,9 @@ module Emails
@member_source_type = member_source_type
@member_id = member_id
- mail(to: recipient(recipient_id, notification_group),
+ user = User.find(recipient_id)
+
+ mail(to: user.notification_email_for(notification_group),
subject: subject("Request to join the #{member_source.human_name} #{member_source.model_name.singular}"))
end
@@ -21,7 +23,7 @@ module Emails
@member_source_type = member_source_type
@member_id = member_id
- mail(to: recipient(member.user, notification_group),
+ mail(to: member.user.notification_email_for(notification_group),
subject: subject("Access to the #{member_source.human_name} #{member_source.model_name.singular} was granted"))
end
@@ -29,7 +31,9 @@ module Emails
@member_source_type = member_source_type
@member_source = member_source_class.find(source_id)
- mail(to: recipient(user_id, notification_group),
+ user = User.find(user_id)
+
+ mail(to: user.notification_email_for(notification_group),
subject: subject("Access to the #{member_source.human_name} #{member_source.model_name.singular} was denied"))
end
@@ -47,7 +51,7 @@ module Emails
@member_id = member_id
return unless member.created_by
- mail(to: recipient(member.created_by, notification_group),
+ mail(to: member.created_by.notification_email_for(notification_group),
subject: subject('Invitation accepted'))
end
@@ -58,7 +62,9 @@ module Emails
@member_source = member_source_class.find(source_id)
@invite_email = invite_email
- mail(to: recipient(created_by_id, notification_group),
+ user = User.find(created_by_id)
+
+ mail(to: user.notification_email_for(notification_group),
subject: subject('Invitation declined'))
end
diff --git a/app/mailers/emails/merge_requests.rb b/app/mailers/emails/merge_requests.rb
index d972d0dea28..76b1c2d234c 100644
--- a/app/mailers/emails/merge_requests.rb
+++ b/app/mailers/emails/merge_requests.rb
@@ -110,7 +110,7 @@ module Emails
def merge_request_thread_options(sender_id, recipient_id, reason = nil)
{
from: sender(sender_id),
- to: recipient(recipient_id, @project.group),
+ to: User.find(recipient_id).notification_email_for(@project.group),
subject: subject("#{@merge_request.title} (#{@merge_request.to_reference})"),
'X-GitLab-NotificationReason' => reason
}
diff --git a/app/mailers/emails/notes.rb b/app/mailers/emails/notes.rb
index 51b6368a307..a1c8c3455b5 100644
--- a/app/mailers/emails/notes.rb
+++ b/app/mailers/emails/notes.rb
@@ -55,7 +55,7 @@ module Emails
def note_thread_options(recipient_id, reason)
{
from: sender(@note.author_id),
- to: recipient(recipient_id, @project&.group || @group),
+ to: User.find(recipient_id).notification_email_for(@project&.group || @group),
subject: subject("#{@note.noteable.title} (#{@note.noteable.reference_link_text})"),
'X-GitLab-NotificationReason' => reason
}
diff --git a/app/mailers/emails/pages_domains.rb b/app/mailers/emails/pages_domains.rb
index 2d390666f65..1caca6b3e44 100644
--- a/app/mailers/emails/pages_domains.rb
+++ b/app/mailers/emails/pages_domains.rb
@@ -7,7 +7,7 @@ module Emails
@project = domain.project
mail(
- to: recipient(recipient.id, @project.group),
+ to: recipient.notification_email_for(@project.group),
subject: subject("GitLab Pages domain '#{domain.domain}' has been enabled")
)
end
@@ -17,7 +17,7 @@ module Emails
@project = domain.project
mail(
- to: recipient(recipient.id, @project.group),
+ to: recipient.notification_email_for(@project.group),
subject: subject("GitLab Pages domain '#{domain.domain}' has been disabled")
)
end
@@ -27,7 +27,7 @@ module Emails
@project = domain.project
mail(
- to: recipient(recipient.id, @project.group),
+ to: recipient.notification_email_for(@project.group),
subject: subject("Verification succeeded for GitLab Pages domain '#{domain.domain}'")
)
end
@@ -37,7 +37,7 @@ module Emails
@project = domain.project
mail(
- to: recipient(recipient.id, @project.group),
+ to: recipient.notification_email_for(@project.group),
subject: subject("ACTION REQUIRED: Verification failed for GitLab Pages domain '#{domain.domain}'")
)
end
diff --git a/app/mailers/emails/pipelines.rb b/app/mailers/emails/pipelines.rb
index fb57c0da34d..34e12a5fa6d 100644
--- a/app/mailers/emails/pipelines.rb
+++ b/app/mailers/emails/pipelines.rb
@@ -15,7 +15,7 @@ module Emails
def pipeline_mail(pipeline, recipients, status)
@project = pipeline.project
@pipeline = pipeline
- @merge_request = pipeline.merge_requests_as_head_pipeline.first
+ @merge_request = pipeline.all_merge_requests.first
add_headers
# We use bcc here because we don't want to generate this emails for a
@@ -44,7 +44,7 @@ module Emails
commit = [@pipeline.short_sha]
commit << "in #{@merge_request.to_reference}" if @merge_request
- subject("Pipeline ##{@pipeline.id} has #{status} for #{@pipeline.ref}", commit.join(' '))
+ subject("Pipeline ##{@pipeline.id} has #{status} for #{@pipeline.source_ref}", commit.join(' '))
end
end
end
diff --git a/app/mailers/emails/projects.rb b/app/mailers/emails/projects.rb
index 4acf4a1dc4f..6274879ee99 100644
--- a/app/mailers/emails/projects.rb
+++ b/app/mailers/emails/projects.rb
@@ -7,20 +7,20 @@ module Emails
@project = Project.find project_id
@target_url = project_url(@project)
@old_path_with_namespace = old_path_with_namespace
- mail(to: recipient(user_id, @project.group),
+ mail(to: @user.notification_email_for(@project.group),
subject: subject("Project was moved"))
end
def project_was_exported_email(current_user, project)
@project = project
- mail(to: recipient(current_user.id, project.group),
+ mail(to: current_user.notification_email_for(project.group),
subject: subject("Project was exported"))
end
def project_was_not_exported_email(current_user, project, errors)
@project = project
@errors = errors
- mail(to: recipient(current_user.id, @project.group),
+ mail(to: current_user.notification_email_for(@project.group),
subject: subject("Project export error"))
end
@@ -28,7 +28,7 @@ module Emails
@project = project
@user = user
- mail(to: recipient(user.id, project.group), subject: subject("Project cleanup has completed"))
+ mail(to: user.notification_email_for(project.group), subject: subject("Project cleanup has completed"))
end
def repository_cleanup_failure_email(project, user, error)
@@ -36,7 +36,7 @@ module Emails
@user = user
@error = error
- mail(to: recipient(user.id, project.group), subject: subject("Project cleanup failure"))
+ mail(to: user.notification_email_for(project.group), subject: subject("Project cleanup failure"))
end
def repository_push_email(project_id, opts = {})
diff --git a/app/mailers/emails/releases.rb b/app/mailers/emails/releases.rb
new file mode 100644
index 00000000000..137858d31e8
--- /dev/null
+++ b/app/mailers/emails/releases.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+module Emails
+ module Releases
+ def new_release_email(user_id, release, reason = nil)
+ @release = release
+ @project = @release.project
+ @target_url = namespace_project_releases_url(
+ namespace_id: @project.namespace,
+ project_id: @project
+ )
+
+ user = User.find(user_id)
+
+ mail(
+ to: user.notification_email_for(@project.group),
+ subject: subject(release_email_subject)
+ )
+ end
+
+ private
+
+ def release_email_subject
+ release_info = [@release.name, @release.tag].select(&:presence).join(' - ')
+ "New release: #{release_info}"
+ end
+ end
+end
diff --git a/app/mailers/emails/remote_mirrors.rb b/app/mailers/emails/remote_mirrors.rb
index f3938a052b0..9cde53918b9 100644
--- a/app/mailers/emails/remote_mirrors.rb
+++ b/app/mailers/emails/remote_mirrors.rb
@@ -5,8 +5,9 @@ module Emails
def remote_mirror_update_failed_email(remote_mirror_id, recipient_id)
@remote_mirror = RemoteMirror.find_by_id(remote_mirror_id)
@project = @remote_mirror.project
+ user = User.find(recipient_id)
- mail(to: recipient(recipient_id, @project.group), subject: subject('Remote mirror update failed'))
+ mail(to: user.notification_email_for(@project.group), subject: subject('Remote mirror update failed'))
end
end
end
diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb
index 6fa1c701cd8..c7cfefeec9b 100644
--- a/app/mailers/notify.rb
+++ b/app/mailers/notify.rb
@@ -16,6 +16,7 @@ class Notify < BaseMailer
include Emails::Members
include Emails::AutoDevops
include Emails::RemoteMirrors
+ include Emails::Releases
helper MilestonesHelper
helper MergeRequestsHelper
@@ -71,20 +72,6 @@ class Notify < BaseMailer
address.format
end
- # Look up a User's notification email for a particular context.
- # Can look up by their ID or can accept a User object.
- #
- # recipient - User object OR a User ID
- # notification_group - The parent group of the notification
- #
- # Returns a String containing the User's email address.
- def recipient(recipient, notification_group = nil)
- user = recipient if recipient.is_a?(User)
- user ||= User.find(recipient)
-
- user.notification_email_for(notification_group)
- end
-
# Formats arguments into a String suitable for use as an email subject
#
# extra - Extra Strings to be inserted into the subject
diff --git a/app/models/analytics/cycle_analytics/project_stage.rb b/app/models/analytics/cycle_analytics/project_stage.rb
index a312bd24e78..23f0db0829b 100644
--- a/app/models/analytics/cycle_analytics/project_stage.rb
+++ b/app/models/analytics/cycle_analytics/project_stage.rb
@@ -9,6 +9,7 @@ module Analytics
belongs_to :project
alias_attribute :parent, :project
+ alias_attribute :parent_id, :project_id
end
end
end
diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb
index 92526def144..a07933d4975 100644
--- a/app/models/application_setting.rb
+++ b/app/models/application_setting.rb
@@ -210,6 +210,16 @@ class ApplicationSetting < ApplicationRecord
presence: true,
if: :static_objects_external_storage_url?
+ validates :protected_paths,
+ length: { maximum: 100, message: N_('is too long (maximum is 100 entries)') },
+ allow_nil: false
+
+ validates :push_event_hooks_limit,
+ numericality: { greater_than_or_equal_to: 0 }
+
+ validates :push_event_activities_limit,
+ numericality: { greater_than_or_equal_to: 0 }
+
SUPPORTED_KEY_TYPES.each do |type|
validates :"#{type}_key_restriction", presence: true, key_restriction: { type: type }
end
diff --git a/app/models/application_setting_implementation.rb b/app/models/application_setting_implementation.rb
index 8d9597aa5a4..0c0ffb67c9a 100644
--- a/app/models/application_setting_implementation.rb
+++ b/app/models/application_setting_implementation.rb
@@ -4,7 +4,7 @@ module ApplicationSettingImplementation
extend ActiveSupport::Concern
include Gitlab::Utils::StrongMemoize
- DOMAIN_LIST_SEPARATOR = %r{\s*[,;]\s* # comma or semicolon, optionally surrounded by whitespace
+ STRING_LIST_SEPARATOR = %r{\s*[,;]\s* # comma or semicolon, optionally surrounded by whitespace
| # or
\s # any whitespace character
| # or
@@ -16,6 +16,19 @@ module ApplicationSettingImplementation
FORBIDDEN_KEY_VALUE = KeyRestrictionValidator::FORBIDDEN
SUPPORTED_KEY_TYPES = %i[rsa dsa ecdsa ed25519].freeze
+ DEFAULT_PROTECTED_PATHS = [
+ '/users/password',
+ '/users/sign_in',
+ '/api/v3/session.json',
+ '/api/v3/session',
+ '/api/v4/session.json',
+ '/api/v4/session',
+ '/users',
+ '/users/confirmation',
+ '/unsubscribes/',
+ '/import/github/personal_access_token'
+ ].freeze
+
class_methods do
def defaults
{
@@ -69,6 +82,8 @@ module ApplicationSettingImplementation
polling_interval_multiplier: 1,
project_export_enabled: true,
protected_ci_variables: false,
+ push_event_hooks_limit: 3,
+ push_event_activities_limit: 3,
raw_blob_request_limit: 300,
recaptcha_enabled: false,
login_recaptcha_protection_enabled: false,
@@ -92,6 +107,13 @@ module ApplicationSettingImplementation
throttle_unauthenticated_enabled: false,
throttle_unauthenticated_period_in_seconds: 3600,
throttle_unauthenticated_requests_per_period: 3600,
+ throttle_protected_paths_enabled: false,
+ throttle_protected_paths_in_seconds: 10,
+ throttle_protected_paths_per_period: 60,
+ protected_paths: DEFAULT_PROTECTED_PATHS,
+ throttle_incident_management_notification_enabled: false,
+ throttle_incident_management_notification_period_in_seconds: 3600,
+ throttle_incident_management_notification_per_period: 3600,
time_tracking_limit_to_hours: false,
two_factor_grace_period: 48,
unique_ips_limit_enabled: false,
@@ -106,7 +128,8 @@ module ApplicationSettingImplementation
snowplow_collector_hostname: nil,
snowplow_cookie_domain: nil,
snowplow_enabled: false,
- snowplow_site_id: nil
+ snowplow_site_id: nil,
+ custom_http_clone_url_root: nil
}
end
@@ -149,11 +172,11 @@ module ApplicationSettingImplementation
end
def domain_whitelist_raw=(values)
- self.domain_whitelist = domain_strings_to_array(values)
+ self.domain_whitelist = strings_to_array(values)
end
def domain_blacklist_raw=(values)
- self.domain_blacklist = domain_strings_to_array(values)
+ self.domain_blacklist = strings_to_array(values)
end
def domain_blacklist_file=(file)
@@ -167,7 +190,7 @@ module ApplicationSettingImplementation
def outbound_local_requests_whitelist_raw=(values)
clear_memoization(:outbound_local_requests_whitelist_arrays)
- self.outbound_local_requests_whitelist = domain_strings_to_array(values)
+ self.outbound_local_requests_whitelist = strings_to_array(values)
end
def add_to_outbound_local_requests_whitelist(values_array)
@@ -200,8 +223,16 @@ module ApplicationSettingImplementation
end
end
+ def protected_paths_raw
+ array_to_string(self.protected_paths)
+ end
+
+ def protected_paths_raw=(values)
+ self.protected_paths = strings_to_array(values)
+ end
+
def asset_proxy_whitelist=(values)
- values = domain_strings_to_array(values) if values.is_a?(String)
+ values = strings_to_array(values) if values.is_a?(String)
# make sure we always whitelist the running host
values << Gitlab.config.gitlab.host unless values.include?(Gitlab.config.gitlab.host)
@@ -316,11 +347,11 @@ module ApplicationSettingImplementation
arr&.join("\n")
end
- def domain_strings_to_array(values)
+ def strings_to_array(values)
return [] unless values
values
- .split(DOMAIN_LIST_SEPARATOR)
+ .split(STRING_LIST_SEPARATOR)
.map(&:strip)
.reject(&:empty?)
.uniq
diff --git a/app/models/audit_event.rb b/app/models/audit_event.rb
index c2eef500fb0..06a607b75a4 100644
--- a/app/models/audit_event.rb
+++ b/app/models/audit_event.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class AuditEvent < ApplicationRecord
+ include CreatedAtFilterable
+
serialize :details, Hash # rubocop:disable Cop/ActiveRecordSerialize
belongs_to :user, foreign_key: :author_id
@@ -9,6 +11,9 @@ class AuditEvent < ApplicationRecord
validates :entity_id, presence: true
validates :entity_type, presence: true
+ scope :by_entity_type, -> (entity_type) { where(entity_type: entity_type) }
+ scope :by_entity_id, -> (entity_id) { where(entity_id: entity_id) }
+
after_initialize :initialize_details
def initialize_details
@@ -18,6 +23,10 @@ class AuditEvent < ApplicationRecord
def author_name
self.user.name
end
+
+ def formatted_details
+ details.merge(details.slice(:from, :to).transform_values(&:to_s))
+ end
end
AuditEvent.prepend_if_ee('EE::AuditEvent')
diff --git a/app/models/aws/role.rb b/app/models/aws/role.rb
new file mode 100644
index 00000000000..836107435ad
--- /dev/null
+++ b/app/models/aws/role.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module Aws
+ class Role < ApplicationRecord
+ self.table_name = 'aws_roles'
+
+ belongs_to :user, inverse_of: :aws_role
+
+ validates :role_external_id, uniqueness: true, length: { in: 1..64 }
+ validates :role_arn,
+ length: 1..2048,
+ format: {
+ with: Gitlab::Regex.aws_arn_regex,
+ message: Gitlab::Regex.aws_arn_regex_message
+ }
+ end
+end
diff --git a/app/models/blob.rb b/app/models/blob.rb
index a590536d5fe..cc089715b06 100644
--- a/app/models/blob.rb
+++ b/app/models/blob.rb
@@ -32,6 +32,7 @@ class Blob < SimpleDelegator
BlobViewer::Balsamiq,
BlobViewer::Video,
+ BlobViewer::Audio,
BlobViewer::PDF,
@@ -176,7 +177,11 @@ class Blob < SimpleDelegator
end
def video?
- UploaderHelper::VIDEO_EXT.include?(extension)
+ UploaderHelper::SAFE_VIDEO_EXT.include?(extension)
+ end
+
+ def audio?
+ UploaderHelper::SAFE_AUDIO_EXT.include?(extension)
end
def readable_text?
diff --git a/app/models/blob_viewer/audio.rb b/app/models/blob_viewer/audio.rb
new file mode 100644
index 00000000000..cc7fe3b0d90
--- /dev/null
+++ b/app/models/blob_viewer/audio.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+module BlobViewer
+ class Audio < Base
+ include Rich
+ include ClientSide
+
+ self.partial_name = 'audio'
+ self.extensions = UploaderHelper::SAFE_AUDIO_EXT
+ self.binary = true
+ end
+end
diff --git a/app/models/blob_viewer/image.rb b/app/models/blob_viewer/image.rb
index 56e27839fca..cbebef46c60 100644
--- a/app/models/blob_viewer/image.rb
+++ b/app/models/blob_viewer/image.rb
@@ -6,7 +6,7 @@ module BlobViewer
include ClientSide
self.partial_name = 'image'
- self.extensions = UploaderHelper::IMAGE_EXT
+ self.extensions = UploaderHelper::SAFE_IMAGE_EXT
self.binary = true
self.switcher_icon = 'picture-o'
self.switcher_title = 'image'
diff --git a/app/models/blob_viewer/video.rb b/app/models/blob_viewer/video.rb
index 48bb2a13518..3ec4e90b24e 100644
--- a/app/models/blob_viewer/video.rb
+++ b/app/models/blob_viewer/video.rb
@@ -6,9 +6,7 @@ module BlobViewer
include ClientSide
self.partial_name = 'video'
- self.extensions = UploaderHelper::VIDEO_EXT
+ self.extensions = UploaderHelper::SAFE_VIDEO_EXT
self.binary = true
- self.switcher_icon = 'film'
- self.switcher_title = 'video'
end
end
diff --git a/app/models/board.rb b/app/models/board.rb
index 31011dc4742..f3f938224a4 100644
--- a/app/models/board.rb
+++ b/app/models/board.rb
@@ -16,10 +16,9 @@ class Board < ApplicationRecord
!group
end
- def parent
- @parent ||= group || project
+ def resource_parent
+ @resource_parent ||= group || project
end
- alias_method :resource_parent, :parent
def group_board?
group_id.present?
diff --git a/app/models/ci/artifact_blob.rb b/app/models/ci/artifact_blob.rb
index ef00ad75683..76d4b9d6206 100644
--- a/app/models/ci/artifact_blob.rb
+++ b/app/models/ci/artifact_blob.rb
@@ -53,7 +53,7 @@ module Ci
pages_config.enabled &&
pages_config.artifacts_server &&
EXTENSIONS_SERVED_BY_PAGES.include?(File.extname(name)) &&
- job.project.public?
+ (pages_config.access_control || job.project.public?)
end
private
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 1f8a0373450..c48ab28ce73 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -12,7 +12,6 @@ module Ci
include Presentable
include Importable
include Gitlab::Utils::StrongMemoize
- include Deployable
include HasRef
BuildArchivedError = Class.new(StandardError)
@@ -43,6 +42,7 @@ module Ci
has_many :job_artifacts, class_name: 'Ci::JobArtifact', foreign_key: :job_id, dependent: :destroy, inverse_of: :job # rubocop:disable Cop/ActiveRecordDependent
has_many :job_variables, class_name: 'Ci::JobVariable', foreign_key: :job_id
+ has_many :sourced_pipelines, class_name: 'Ci::Sources::Pipeline', foreign_key: :source_job_id
Ci::JobArtifact.file_types.each do |key, value|
has_one :"job_artifacts_#{key}", -> { where(file_type: value) }, class_name: 'Ci::JobArtifact', inverse_of: :job, foreign_key: :job_id
@@ -118,8 +118,6 @@ module Ci
scope :eager_load_job_artifacts, -> { includes(:job_artifacts) }
- scope :with_artifacts_stored_locally, -> { with_existing_job_artifacts(Ci::JobArtifact.archive.with_files_stored_locally) }
- scope :with_archived_trace_stored_locally, -> { with_existing_job_artifacts(Ci::JobArtifact.trace.with_files_stored_locally) }
scope :with_artifacts_not_expired, ->() { with_artifacts_archive.where('artifacts_expire_at IS NULL OR artifacts_expire_at > ?', Time.now) }
scope :with_expired_artifacts, ->() { with_artifacts_archive.where('artifacts_expire_at < ?', Time.now) }
scope :last_month, ->() { where('created_at > ?', Date.today - 1.month) }
@@ -130,6 +128,12 @@ module Ci
scope :with_stale_live_trace, -> { with_live_trace.finished_before(12.hours.ago) }
scope :finished_before, -> (date) { finished.where('finished_at < ?', date) }
+ scope :with_secure_reports_from_options, -> (job_type) { where('options like :job_type', job_type: "%:artifacts:%:reports:%:#{job_type}:%") }
+
+ scope :with_secure_reports_from_config_options, -> (job_types) do
+ joins(:metadata).where("ci_builds_metadata.config_options -> 'artifacts' -> 'reports' ?| array[:job_types]", job_types: job_types)
+ end
+
scope :matches_tag_ids, -> (tag_ids) do
matcher = ::ActsAsTaggableOn::Tagging
.where(taggable_type: CommitStatus.name)
@@ -236,6 +240,7 @@ module Ci
end
after_transition pending: :running do |build|
+ build.pipeline.persistent_ref.create
build.deployment&.run
build.run_after_commit do
@@ -412,10 +417,6 @@ module Ci
self.options.fetch(:environment, {}).fetch(:action, 'start') if self.options
end
- def has_deployment?
- !!self.deployment
- end
-
def outdated_deployment?
success? && !deployment.try(:last?)
end
@@ -753,6 +754,10 @@ module Ci
true
end
+ def invalid_dependencies
+ dependencies.reject(&:valid_dependency?)
+ end
+
def runner_required_feature_names
strong_memoize(:runner_required_feature_names) do
RUNNER_FEATURES.select do |feature, method|
diff --git a/app/models/ci/build_trace.rb b/app/models/ci/build_trace.rb
new file mode 100644
index 00000000000..b9db1559836
--- /dev/null
+++ b/app/models/ci/build_trace.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module Ci
+ class BuildTrace
+ CONVERTERS = {
+ html: Gitlab::Ci::Ansi2html,
+ json: Gitlab::Ci::Ansi2json
+ }.freeze
+
+ attr_reader :trace, :build
+
+ delegate :state, :append, :truncated, :offset, :size, :total, to: :trace, allow_nil: true
+ delegate :id, :status, :complete?, to: :build, prefix: true
+
+ def initialize(build:, stream:, state:, content_format:)
+ @build = build
+ @content_format = content_format
+
+ if stream.valid?
+ stream.limit
+ @trace = CONVERTERS.fetch(content_format).convert(stream.stream, state)
+ end
+ end
+
+ def json?
+ @content_format == :json
+ end
+
+ def html?
+ @content_format == :html
+ end
+
+ def json_lines
+ @trace&.lines if json?
+ end
+
+ def html_lines
+ @trace&.html if html?
+ end
+ end
+end
diff --git a/app/models/ci/build_trace_section.rb b/app/models/ci/build_trace_section.rb
index 8be42eb48d6..7fe6b753da1 100644
--- a/app/models/ci/build_trace_section.rb
+++ b/app/models/ci/build_trace_section.rb
@@ -4,6 +4,9 @@ module Ci
class BuildTraceSection < ApplicationRecord
extend Gitlab::Ci::Model
+ # Only remove > 2019-11-22 and > 12.5
+ self.ignored_columns += %i[id]
+
belongs_to :build, class_name: 'Ci::Build'
belongs_to :project
belongs_to :section_name, class_name: 'Ci::BuildTraceSectionName'
diff --git a/app/models/ci/group.rb b/app/models/ci/group.rb
index 9b2c3c807ac..0e05318b253 100644
--- a/app/models/ci/group.rb
+++ b/app/models/ci/group.rb
@@ -9,6 +9,7 @@ module Ci
#
class Group
include StaticModel
+ include Gitlab::Utils::StrongMemoize
attr_reader :stage, :name, :jobs
@@ -21,7 +22,17 @@ module Ci
end
def status
- @status ||= commit_statuses.status
+ strong_memoize(:status) do
+ if Feature.enabled?(:ci_composite_status, default_enabled: false)
+ Gitlab::Ci::Status::Composite
+ .new(@jobs)
+ .status
+ else
+ CommitStatus
+ .where(id: @jobs)
+ .legacy_status
+ end
+ end
end
def detailed_status(current_user)
@@ -40,11 +51,5 @@ module Ci
self.new(stage, name: group_name, jobs: grouped_statuses)
end
end
-
- private
-
- def commit_statuses
- @commit_statuses ||= CommitStatus.where(id: jobs.map(&:id))
- end
end
end
diff --git a/app/models/ci/job_artifact.rb b/app/models/ci/job_artifact.rb
index da2758507ce..62bf2c3ac9c 100644
--- a/app/models/ci/job_artifact.rb
+++ b/app/models/ci/job_artifact.rb
@@ -5,6 +5,7 @@ module Ci
include AfterCommitQueue
include ObjectStorage::BackgroundMove
include UpdateProjectStatistics
+ include Sortable
extend Gitlab::Ci::Model
NotSupportedAdapterError = Class.new(StandardError)
@@ -64,6 +65,7 @@ module Ci
after_save :update_file_store, if: :saved_change_to_file?
scope :with_files_stored_locally, -> { where(file_store: [nil, ::JobArtifactUploader::Store::LOCAL]) }
+ scope :with_files_stored_remotely, -> { where(file_store: ::JobArtifactUploader::Store::REMOTE) }
scope :with_file_types, -> (file_types) do
types = self.file_types.select { |file_type| file_types.include?(file_type) }.values
@@ -143,6 +145,10 @@ module Ci
self.update_column(:file_store, file.object_store)
end
+ def self.total_size
+ self.sum(:size)
+ end
+
def self.artifacts_size_for(project)
self.where(project: project).sum(:size)
end
diff --git a/app/models/ci/legacy_stage.rb b/app/models/ci/legacy_stage.rb
index 930c8a71453..2fd369c9aff 100644
--- a/app/models/ci/legacy_stage.rb
+++ b/app/models/ci/legacy_stage.rb
@@ -14,7 +14,8 @@ module Ci
@pipeline = pipeline
@name = name
@status = status
- @warnings = warnings
+ # support ints and booleans
+ @has_warnings = ActiveRecord::Type::Boolean.new.cast(warnings)
end
def groups
@@ -30,7 +31,7 @@ module Ci
end
def status
- @status ||= statuses.latest.status
+ @status ||= statuses.latest.slow_composite_status
end
def detailed_status(current_user)
@@ -52,11 +53,12 @@ module Ci
end
def has_warnings?
- if @warnings.is_a?(Integer)
- @warnings > 0
- else
- statuses.latest.failed_but_allowed.any?
+ # lazilly calculate the warnings
+ if @has_warnings.nil?
+ @has_warnings = statuses.latest.failed_but_allowed.any?
end
+
+ @has_warnings
end
def manual_playable?
diff --git a/app/models/ci/persistent_ref.rb b/app/models/ci/persistent_ref.rb
new file mode 100644
index 00000000000..be3d4aa3203
--- /dev/null
+++ b/app/models/ci/persistent_ref.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+module Ci
+ ##
+ # The persistent pipeline ref to ensure runners can safely fetch source code
+ # even if force-push/source-branch-deletion happens.
+ class PersistentRef
+ include ActiveModel::Model
+
+ attr_accessor :pipeline
+
+ delegate :project, :sha, to: :pipeline
+ delegate :repository, to: :project
+ delegate :ref_exists?, :create_ref, :delete_refs, to: :repository
+
+ def exist?
+ ref_exists?(path)
+ rescue
+ false
+ end
+
+ def create
+ return if exist?
+
+ create_ref(sha, path)
+ rescue => e
+ Gitlab::Sentry
+ .track_acceptable_exception(e, extra: { pipeline_id: pipeline.id })
+ end
+
+ def delete
+ delete_refs(path)
+ rescue Gitlab::Git::Repository::NoRepository
+ # no-op
+ rescue => e
+ Gitlab::Sentry
+ .track_acceptable_exception(e, extra: { pipeline_id: pipeline.id })
+ end
+
+ def path
+ "refs/#{Repository::REF_PIPELINES}/#{pipeline.id}"
+ end
+ end
+end
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 20b8be4017e..3bf19399cec 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -25,7 +25,7 @@ module Ci
belongs_to :merge_request, class_name: 'MergeRequest'
belongs_to :external_pull_request
- has_internal_id :iid, scope: :project, presence: false, init: ->(s) do
+ has_internal_id :iid, scope: :project, presence: false, ensure_if: -> { !importing? }, init: ->(s) do
s&.project&.all_pipelines&.maximum(:iid) || s&.project&.all_pipelines&.count
end
@@ -52,9 +52,15 @@ module Ci
has_many :auto_canceled_pipelines, class_name: 'Ci::Pipeline', foreign_key: 'auto_canceled_by_id'
has_many :auto_canceled_jobs, class_name: 'CommitStatus', foreign_key: 'auto_canceled_by_id'
+ has_many :sourced_pipelines, class_name: 'Ci::Sources::Pipeline', foreign_key: :source_pipeline_id
+ has_one :source_pipeline, class_name: 'Ci::Sources::Pipeline', inverse_of: :pipeline
has_one :chat_data, class_name: 'Ci::PipelineChatData'
+ has_many :triggered_pipelines, through: :sourced_pipelines, source: :pipeline
+ has_one :triggered_by_pipeline, through: :source_pipeline, source: :source_pipeline
+ has_one :source_job, through: :source_pipeline, source: :source_job
+
accepts_nested_attributes_for :variables, reject_if: :persisted?
delegate :id, to: :project, prefix: true
@@ -174,6 +180,8 @@ module Ci
after_transition any => ::Ci::Pipeline.completed_statuses do |pipeline|
pipeline.run_after_commit do
+ pipeline.persistent_ref.delete
+
pipeline.all_merge_requests.each do |merge_request|
next unless merge_request.auto_merge_enabled?
@@ -209,6 +217,8 @@ module Ci
scope :for_sha, -> (sha) { where(sha: sha) }
scope :for_source_sha, -> (source_sha) { where(source_sha: source_sha) }
scope :for_sha_or_source_sha, -> (sha) { for_sha(sha).or(for_source_sha(sha)) }
+ scope :for_ref, -> (ref) { where(ref: ref) }
+ scope :for_id, -> (id) { where(id: id) }
scope :created_after, -> (time) { where('ci_pipelines.created_at > ?', time) }
scope :triggered_by_merge_request, -> (merge_request) do
@@ -279,16 +289,16 @@ module Ci
end
end
- # Returns a Hash containing the latest pipeline status for every given
+ # Returns a Hash containing the latest pipeline for every given
# commit.
#
- # The keys of this Hash are the commit SHAs, the values the statuses.
+ # The keys of this Hash are the commit SHAs, the values the pipelines.
#
- # commits - The list of commit SHAs to get the status for.
+ # commits - The list of commit SHAs to get the pipelines for.
# ref - The ref to scope the data to (e.g. "master"). If the ref is not
- # given we simply get the latest status for the commits, regardless
- # of what refs their pipelines belong to.
- def self.latest_status_per_commit(commits, ref = nil)
+ # given we simply get the latest pipelines for the commits, regardless
+ # of what refs the pipelines belong to.
+ def self.latest_pipeline_per_commit(commits, ref = nil)
p1 = arel_table
p2 = arel_table.alias
@@ -302,15 +312,14 @@ module Ci
cond = cond.and(p1[:ref].eq(p2[:ref])) if ref
join = p1.join(p2, Arel::Nodes::OuterJoin).on(cond)
- relation = select(:sha, :status)
- .where(sha: commits)
+ relation = where(sha: commits)
.where(p2[:id].eq(nil))
.joins(join.join_sources)
relation = relation.where(ref: ref) if ref
- relation.each_with_object({}) do |row, hash|
- hash[row[:sha]] = row[:status]
+ relation.each_with_object({}) do |pipeline, hash|
+ hash[pipeline.sha] = pipeline
end
end
@@ -385,13 +394,12 @@ module Ci
end
end
- def legacy_stages
+ def legacy_stages_using_sql
# TODO, this needs refactoring, see gitlab-foss#26481.
-
stages_query = statuses
.group('stage').select(:stage).order('max(stage_idx)')
- status_sql = statuses.latest.where('stage=sg.stage').status_sql
+ status_sql = statuses.latest.where('stage=sg.stage').legacy_status_sql
warnings_sql = statuses.latest.select('COUNT(*)')
.where('stage=sg.stage').failed_but_allowed.to_sql
@@ -404,6 +412,30 @@ module Ci
end
end
+ def legacy_stages_using_composite_status
+ stages = statuses.latest
+ .order(:stage_idx, :stage)
+ .group_by(&:stage)
+
+ stages.map do |stage_name, jobs|
+ composite_status = Gitlab::Ci::Status::Composite
+ .new(jobs)
+
+ Ci::LegacyStage.new(self,
+ name: stage_name,
+ status: composite_status.status,
+ warnings: composite_status.warnings?)
+ end
+ end
+
+ def legacy_stages
+ if Feature.enabled?(:ci_composite_status, default_enabled: false)
+ legacy_stages_using_composite_status
+ else
+ legacy_stages_using_sql
+ end
+ end
+
def valid_commit_sha
if self.sha == Gitlab::Git::BLANK_SHA
self.errors.add(:sha, " cant be 00000000 (branch removal)")
@@ -584,11 +616,7 @@ module Ci
def ci_yaml_file_path
return unless repository_source? || unknown_source?
- if project.ci_config_path.blank?
- '.gitlab-ci.yml'
- else
- project.ci_config_path
- end
+ project.ci_config_path.presence || '.gitlab-ci.yml'
end
def ci_yaml_file
@@ -638,7 +666,8 @@ module Ci
def update_status
retry_optimistic_lock(self) do
- case latest_builds_status.to_s
+ new_status = latest_builds_status.to_s
+ case new_status
when 'created' then nil
when 'preparing' then prepare
when 'pending' then enqueue
@@ -651,7 +680,7 @@ module Ci
when 'scheduled' then delay
else
raise HasStatus::UnknownStatusError,
- "Unknown status `#{latest_builds_status}`"
+ "Unknown status `#{new_status}`"
end
end
end
@@ -725,6 +754,10 @@ module Ci
end
end
+ def all_merge_requests_by_recency
+ all_merge_requests.order(id: :desc)
+ end
+
def detailed_status(current_user)
Gitlab::Ci::Status::Pipeline::Factory
.new(self, current_user)
@@ -771,6 +804,18 @@ module Ci
end
end
+ def all_worktree_paths
+ strong_memoize(:all_worktree_paths) do
+ project.repository.ls_files(sha)
+ end
+ end
+
+ def top_level_worktree_paths
+ strong_memoize(:top_level_worktree_paths) do
+ project.repository.tree(sha).blobs.map(&:path)
+ end
+ end
+
def default_branch?
ref == project.default_branch
end
@@ -845,6 +890,10 @@ module Ci
end
end
+ def persistent_ref
+ @persistent_ref ||= PersistentRef.new(pipeline: self)
+ end
+
private
def ci_yaml_from_repo
@@ -894,7 +943,7 @@ module Ci
def latest_builds_status
return 'failed' unless yaml_errors.blank?
- statuses.latest.status || 'skipped'
+ statuses.latest.slow_composite_status || 'skipped'
end
def keep_around_commits
diff --git a/app/models/ci/pipeline_enums.rb b/app/models/ci/pipeline_enums.rb
index cb92aef4bda..859abc4a0d5 100644
--- a/app/models/ci/pipeline_enums.rb
+++ b/app/models/ci/pipeline_enums.rb
@@ -22,6 +22,7 @@ module Ci
schedule: 4,
api: 5,
external: 6,
+ pipeline: 7,
chat: 8,
merge_request_event: 10,
external_pull_request_event: 11
diff --git a/app/models/ci/pipeline_schedule.rb b/app/models/ci/pipeline_schedule.rb
index 42d4e86fe8d..946241b7d4c 100644
--- a/app/models/ci/pipeline_schedule.rb
+++ b/app/models/ci/pipeline_schedule.rb
@@ -86,3 +86,5 @@ module Ci
end
end
end
+
+Ci::PipelineSchedule.prepend_if_ee('EE::Ci::PipelineSchedule')
diff --git a/app/models/ci/sources/pipeline.rb b/app/models/ci/sources/pipeline.rb
new file mode 100644
index 00000000000..feaec27281c
--- /dev/null
+++ b/app/models/ci/sources/pipeline.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+module Ci
+ module Sources
+ class Pipeline < ApplicationRecord
+ self.table_name = "ci_sources_pipelines"
+
+ belongs_to :project, class_name: "Project"
+ belongs_to :pipeline, class_name: "Ci::Pipeline", inverse_of: :source_pipeline
+
+ belongs_to :source_project, class_name: "Project", foreign_key: :source_project_id
+ belongs_to :source_job, class_name: "CommitStatus", foreign_key: :source_job_id
+ belongs_to :source_pipeline, class_name: "Ci::Pipeline", foreign_key: :source_pipeline_id
+
+ validates :project, presence: true
+ validates :pipeline, presence: true
+
+ validates :source_project, presence: true
+ validates :source_job, presence: true
+ validates :source_pipeline, presence: true
+ end
+ end
+end
+
+::Ci::Sources::Pipeline.prepend_if_ee('::EE::Ci::Sources::Pipeline')
diff --git a/app/models/ci/stage.rb b/app/models/ci/stage.rb
index d90339d90dc..77ac8bfe875 100644
--- a/app/models/ci/stage.rb
+++ b/app/models/ci/stage.rb
@@ -78,7 +78,8 @@ module Ci
def update_status
retry_optimistic_lock(self) do
- case statuses.latest.status
+ new_status = latest_stage_status.to_s
+ case new_status
when 'created' then nil
when 'preparing' then prepare
when 'pending' then enqueue
@@ -91,7 +92,7 @@ module Ci
when 'skipped', nil then skip
else
raise HasStatus::UnknownStatusError,
- "Unknown status `#{statuses.latest.status}`"
+ "Unknown status `#{new_status}`"
end
end
end
@@ -124,5 +125,9 @@ module Ci
def manual_playable?
blocked? || skipped?
end
+
+ def latest_stage_status
+ statuses.latest.slow_composite_status || 'skipped'
+ end
end
end
diff --git a/app/models/ci/trigger.rb b/app/models/ci/trigger.rb
index 8792c5cf98b..68548bd2fdc 100644
--- a/app/models/ci/trigger.rb
+++ b/app/models/ci/trigger.rb
@@ -45,3 +45,5 @@ module Ci
end
end
end
+
+Ci::Trigger.prepend_if_ee('EE::Ci::Trigger')
diff --git a/app/models/clusters/applications/cert_manager.rb b/app/models/clusters/applications/cert_manager.rb
index 27d4180e5b9..18cbf827a67 100644
--- a/app/models/clusters/applications/cert_manager.rb
+++ b/app/models/clusters/applications/cert_manager.rb
@@ -65,7 +65,7 @@ module Clusters
end
def retry_command(command)
- "for i in $(seq 1 30); do #{command} && break; sleep 1s; echo \"Retrying ($i)...\"; done"
+ "for i in $(seq 1 30); do #{command} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)"
end
def post_delete_script
diff --git a/app/models/clusters/applications/helm.rb b/app/models/clusters/applications/helm.rb
index 455cf200fbc..4a1bcac4bb7 100644
--- a/app/models/clusters/applications/helm.rb
+++ b/app/models/clusters/applications/helm.rb
@@ -27,7 +27,7 @@ module Clusters
def set_initial_status
return unless not_installable?
- self.status = 'installable' if cluster&.platform_kubernetes_active?
+ self.status = status_states[:installable] if cluster&.platform_kubernetes_active?
end
# It can only be uninstalled if there are no other applications installed
@@ -68,6 +68,13 @@ module Clusters
ca_key.present? && ca_cert.present?
end
+ def post_uninstall
+ cluster.kubeclient.delete_namespace(Gitlab::Kubernetes::Helm::NAMESPACE)
+ rescue Kubeclient::ResourceNotFoundError
+ # we actually don't care if the namespace is not present
+ # since we want to delete it anyway.
+ end
+
private
def files
diff --git a/app/models/clusters/applications/ingress.rb b/app/models/clusters/applications/ingress.rb
index 44c66f06059..885e4ff7197 100644
--- a/app/models/clusters/applications/ingress.rb
+++ b/app/models/clusters/applications/ingress.rb
@@ -3,7 +3,7 @@
module Clusters
module Applications
class Ingress < ApplicationRecord
- VERSION = '1.1.2'
+ VERSION = '1.22.1'
self.table_name = 'clusters_applications_ingress'
diff --git a/app/models/clusters/applications/jupyter.rb b/app/models/clusters/applications/jupyter.rb
index ec65482a846..ca93bc15be0 100644
--- a/app/models/clusters/applications/jupyter.rb
+++ b/app/models/clusters/applications/jupyter.rb
@@ -23,7 +23,7 @@ module Clusters
return unless cluster&.application_ingress_available?
ingress = cluster.application_ingress
- self.status = 'installable' if ingress.external_ip_or_hostname?
+ self.status = status_states[:installable] if ingress.external_ip_or_hostname?
end
def chart
diff --git a/app/models/clusters/applications/knative.rb b/app/models/clusters/applications/knative.rb
index a9b9374622d..1093efee85a 100644
--- a/app/models/clusters/applications/knative.rb
+++ b/app/models/clusters/applications/knative.rb
@@ -3,7 +3,7 @@
module Clusters
module Applications
class Knative < ApplicationRecord
- VERSION = '0.6.0'
+ VERSION = '0.7.0'
REPOSITORY = 'https://storage.googleapis.com/triggermesh-charts'
METRICS_CONFIG = 'https://storage.googleapis.com/triggermesh-charts/istio-metrics.yaml'
FETCH_IP_ADDRESS_DELAY = 30.seconds
@@ -21,7 +21,7 @@ module Clusters
return unless not_installable?
return unless verify_cluster?
- self.status = 'installable'
+ self.status = status_states[:installable]
end
state_machine :status do
@@ -47,6 +47,10 @@ module Clusters
{ "domain" => hostname }.to_yaml
end
+ def allowed_to_uninstall?
+ !pre_installed?
+ end
+
def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(
name: name,
diff --git a/app/models/clusters/applications/prometheus.rb b/app/models/clusters/applications/prometheus.rb
index 7a414d1a5bb..5e7fdd55cb6 100644
--- a/app/models/clusters/applications/prometheus.rb
+++ b/app/models/clusters/applications/prometheus.rb
@@ -112,7 +112,12 @@ module Clusters
def delete_knative_istio_metrics
return [] unless cluster.application_knative_available?
- [Gitlab::Kubernetes::KubectlCmd.delete("-f", Clusters::Applications::Knative::METRICS_CONFIG)]
+ [
+ Gitlab::Kubernetes::KubectlCmd.delete(
+ "-f", Clusters::Applications::Knative::METRICS_CONFIG,
+ "--ignore-not-found"
+ )
+ ]
end
end
end
diff --git a/app/models/clusters/applications/runner.rb b/app/models/clusters/applications/runner.rb
index 2d6af8f4f0b..954046c143b 100644
--- a/app/models/clusters/applications/runner.rb
+++ b/app/models/clusters/applications/runner.rb
@@ -3,7 +3,7 @@
module Clusters
module Applications
class Runner < ApplicationRecord
- VERSION = '0.8.0'
+ VERSION = '0.9.0'
self.table_name = 'clusters_applications_runners'
diff --git a/app/models/clusters/cluster.rb b/app/models/clusters/cluster.rb
index 6a5b98a4676..d6f5d7c3f93 100644
--- a/app/models/clusters/cluster.rb
+++ b/app/models/clusters/cluster.rb
@@ -24,6 +24,7 @@ module Clusters
KUBE_INGRESS_BASE_DOMAIN = 'KUBE_INGRESS_BASE_DOMAIN'
belongs_to :user
+ belongs_to :management_project, class_name: '::Project', optional: true
has_many :cluster_projects, class_name: 'Clusters::Project'
has_many :projects, through: :cluster_projects, class_name: '::Project'
@@ -34,12 +35,13 @@ module Clusters
# we force autosave to happen when we save `Cluster` model
has_one :provider_gcp, class_name: 'Clusters::Providers::Gcp', autosave: true
+ has_one :provider_aws, class_name: 'Clusters::Providers::Aws', autosave: true
has_one :platform_kubernetes, class_name: 'Clusters::Platforms::Kubernetes', inverse_of: :cluster, autosave: true
def self.has_one_cluster_application(name) # rubocop:disable Naming/PredicateName
application = APPLICATIONS[name.to_s]
- has_one application.association_name, class_name: application.to_s # rubocop:disable Rails/ReflectionClassName
+ has_one application.association_name, class_name: application.to_s, inverse_of: :cluster # rubocop:disable Rails/ReflectionClassName
end
has_one_cluster_application :helm
@@ -63,6 +65,7 @@ module Clusters
validate :restrict_modification, on: :update
validate :no_groups, unless: :group_type?
validate :no_projects, unless: :project_type?
+ validate :unique_management_project_environment_scope
after_save :clear_reactive_cache!
@@ -94,14 +97,20 @@ module Clusters
enum provider_type: {
user: 0,
- gcp: 1
+ gcp: 1,
+ aws: 2
}
scope :enabled, -> { where(enabled: true) }
scope :disabled, -> { where(enabled: false) }
- scope :user_provided, -> { where(provider_type: ::Clusters::Cluster.provider_types[:user]) }
- scope :gcp_provided, -> { where(provider_type: ::Clusters::Cluster.provider_types[:gcp]) }
- scope :gcp_installed, -> { gcp_provided.includes(:provider_gcp).where(cluster_providers_gcp: { status: ::Clusters::Providers::Gcp.state_machines[:status].states[:created].value }) }
+
+ scope :user_provided, -> { where(provider_type: :user) }
+ scope :gcp_provided, -> { where(provider_type: :gcp) }
+ scope :aws_provided, -> { where(provider_type: :aws) }
+
+ scope :gcp_installed, -> { gcp_provided.joins(:provider_gcp).merge(Clusters::Providers::Gcp.with_status(:created)) }
+ scope :aws_installed, -> { aws_provided.joins(:provider_aws).merge(Clusters::Providers::Aws.with_status(:created)) }
+
scope :managed, -> { where(managed: true) }
scope :default_environment, -> { where(environment_scope: DEFAULT_ENVIRONMENT) }
@@ -138,7 +147,11 @@ module Clusters
end
def provider
- return provider_gcp if gcp?
+ if gcp?
+ provider_gcp
+ elsif aws?
+ provider_aws
+ end
end
def platform
@@ -172,7 +185,7 @@ module Clusters
persisted_namespace = Clusters::KubernetesNamespaceFinder.new(
self,
project: project,
- environment_slug: environment.slug
+ environment_name: environment.name
).execute
persisted_namespace&.namespace || Gitlab::Kubernetes::DefaultNamespace.new(self, project: project).from_environment_slug(environment.slug)
@@ -194,8 +207,24 @@ module Clusters
end
end
+ def knative_pre_installed?
+ provider&.knative_pre_installed?
+ end
+
private
+ def unique_management_project_environment_scope
+ return unless management_project
+
+ duplicate_management_clusters = management_project.management_clusters
+ .where(environment_scope: environment_scope)
+ .where.not(id: id)
+
+ if duplicate_management_clusters.any?
+ errors.add(:environment_scope, "cannot add duplicated environment scope")
+ end
+ end
+
def instance_domain
@instance_domain ||= Gitlab::CurrentSettings.auto_devops_domain
end
diff --git a/app/models/clusters/clusters_hierarchy.rb b/app/models/clusters/clusters_hierarchy.rb
index 5556fc8d3f0..a906eb2888b 100644
--- a/app/models/clusters/clusters_hierarchy.rb
+++ b/app/models/clusters/clusters_hierarchy.rb
@@ -4,8 +4,9 @@ module Clusters
class ClustersHierarchy
DEPTH_COLUMN = :depth
- def initialize(clusterable)
+ def initialize(clusterable, include_management_project: true)
@clusterable = clusterable
+ @include_management_project = include_management_project
end
# Returns clusters in order from deepest to highest group
@@ -24,7 +25,7 @@ module Clusters
private
- attr_reader :clusterable
+ attr_reader :clusterable, :include_management_project
def recursive_cte
cte = Gitlab::SQL::RecursiveCTE.new(:clusters_cte)
@@ -38,12 +39,25 @@ module Clusters
raise ArgumentError, "unknown type for #{clusterable}"
end
+ if clusterable.is_a?(::Project) && include_management_project
+ cte << management_clusters_query
+ end
+
cte << base_query
cte << parent_query(cte)
cte
end
+ # Management clusters should be first in the hierarchy so we use 0 for the
+ # depth column.
+ #
+ # group_parent_id is un-used but we still need to match the same number of
+ # columns as other queries in the CTE.
+ def management_clusters_query
+ clusterable.management_clusters.select([clusters_star, 'NULL AS group_parent_id', "0 AS #{DEPTH_COLUMN}"])
+ end
+
def group_clusters_base_query
group_parent_id_alias = alias_as_column(groups[:parent_id], 'group_parent_id')
join_sources = ::Group.left_joins(:clusters).arel.join_sources
diff --git a/app/models/clusters/concerns/application_core.rb b/app/models/clusters/concerns/application_core.rb
index d1b57a21a7d..979cf0645f5 100644
--- a/app/models/clusters/concerns/application_core.rb
+++ b/app/models/clusters/concerns/application_core.rb
@@ -15,7 +15,7 @@ module Clusters
def set_initial_status
return unless not_installable?
- self.status = 'installable' if cluster&.application_helm_available?
+ self.status = status_states[:installable] if cluster&.application_helm_available?
end
def can_uninstall?
@@ -64,3 +64,5 @@ module Clusters
end
end
end
+
+Clusters::Concerns::ApplicationCore.prepend_if_ee('EE::Clusters::Concerns::ApplicationCore')
diff --git a/app/models/clusters/concerns/application_status.rb b/app/models/clusters/concerns/application_status.rb
index 342d766f723..b63a596dfee 100644
--- a/app/models/clusters/concerns/application_status.rb
+++ b/app/models/clusters/concerns/application_status.rb
@@ -28,6 +28,13 @@ module Clusters
state :uninstalling, value: 7
state :uninstall_errored, value: 8
+ # Used for applications that are pre-installed by the cluster,
+ # e.g. Knative in GCP Cloud Run enabled clusters
+ # Because we cannot upgrade or uninstall Knative in these clusters,
+ # we define only one simple state transition to enter the `pre_installed` state,
+ # and no exit transitions.
+ state :pre_installed, value: 9
+
event :make_scheduled do
transition [:installable, :errored, :installed, :updated, :update_errored, :uninstall_errored] => :scheduled
end
@@ -41,6 +48,10 @@ module Clusters
transition [:updating] => :updated
end
+ event :make_pre_installed do
+ transition any => :pre_installed
+ end
+
event :make_errored do
transition any - [:updating, :uninstalling] => :errored
transition [:updating] => :update_errored
@@ -90,12 +101,18 @@ module Clusters
end
end
+ def status_states
+ self.class.state_machines[:status].states.each_with_object({}) do |state, states|
+ states[state.name] = state.value
+ end
+ end
+
def updateable?
installed? || updated? || update_errored?
end
def available?
- installed? || updated?
+ pre_installed? || installed? || updated?
end
def update_in_progress?
diff --git a/app/models/clusters/concerns/application_version.rb b/app/models/clusters/concerns/application_version.rb
index db94e8e08c9..6c0b014662c 100644
--- a/app/models/clusters/concerns/application_version.rb
+++ b/app/models/clusters/concerns/application_version.rb
@@ -8,13 +8,13 @@ module Clusters
included do
state_machine :status do
before_transition any => [:installed, :updated] do |application|
- application.version = application.class.const_get(:VERSION)
+ application.version = application.class.const_get(:VERSION, false)
end
end
end
def update_available?
- version != self.class.const_get(:VERSION)
+ version != self.class.const_get(:VERSION, false)
end
end
end
diff --git a/app/models/clusters/concerns/provider_status.rb b/app/models/clusters/concerns/provider_status.rb
new file mode 100644
index 00000000000..2da1ee7aabb
--- /dev/null
+++ b/app/models/clusters/concerns/provider_status.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+module Clusters
+ module Concerns
+ module ProviderStatus
+ extend ActiveSupport::Concern
+
+ included do
+ state_machine :status, initial: :scheduled do
+ state :scheduled, value: 1
+ state :creating, value: 2
+ state :created, value: 3
+ state :errored, value: 4
+
+ event :make_creating do
+ transition any - [:creating] => :creating
+ end
+
+ event :make_created do
+ transition any - [:created] => :created
+ end
+
+ event :make_errored do
+ transition any - [:errored] => :errored
+ end
+
+ before_transition any => [:errored, :created] do |provider|
+ provider.nullify_credentials
+ end
+
+ before_transition any => [:creating] do |provider, transition|
+ operation_id = transition.args.first
+ provider.assign_operation_id(operation_id) if operation_id
+ end
+
+ before_transition any => [:errored] do |provider, transition|
+ status_reason = transition.args.first
+ provider.status_reason = status_reason if status_reason
+ end
+ end
+
+ def on_creation?
+ scheduled? || creating?
+ end
+
+ def assign_operation_id(_)
+ # Implemented by individual providers if operation ID is supported.
+ end
+ end
+ end
+ end
+end
diff --git a/app/models/clusters/kubernetes_namespace.rb b/app/models/clusters/kubernetes_namespace.rb
index 69a2b99fcb6..42332bdc193 100644
--- a/app/models/clusters/kubernetes_namespace.rb
+++ b/app/models/clusters/kubernetes_namespace.rb
@@ -27,7 +27,7 @@ module Clusters
algorithm: 'aes-256-cbc'
scope :has_service_account_token, -> { where.not(encrypted_service_account_token: nil) }
- scope :with_environment_slug, -> (slug) { joins(:environment).where(environments: { slug: slug }) }
+ scope :with_environment_name, -> (name) { joins(:environment).where(environments: { name: name }) }
def token_name
"#{namespace}-token"
diff --git a/app/models/clusters/platforms/kubernetes.rb b/app/models/clusters/platforms/kubernetes.rb
index 89b50d8e8ff..314ef78757d 100644
--- a/app/models/clusters/platforms/kubernetes.rb
+++ b/app/models/clusters/platforms/kubernetes.rb
@@ -6,6 +6,7 @@ module Clusters
include Gitlab::Kubernetes
include EnumWithNil
include AfterCommitQueue
+ include ReactiveCaching
RESERVED_NAMESPACES = %w(gitlab-managed-apps).freeze
@@ -23,11 +24,12 @@ module Clusters
key: Settings.attr_encrypted_db_key_base_truncated,
algorithm: 'aes-256-cbc'
+ before_validation :nullify_blank_namespace
before_validation :enforce_namespace_to_lower_case
before_validation :enforce_ca_whitespace_trimming
validates :namespace,
- allow_blank: true,
+ allow_nil: true,
length: 1..63,
format: {
with: Gitlab::Regex.kubernetes_namespace_regex,
@@ -71,7 +73,7 @@ module Clusters
.append(key: 'KUBE_CA_PEM_FILE', value: ca_pem, file: true)
end
- if !cluster.managed?
+ if !cluster.managed? || cluster.management_project == project
namespace = Gitlab::Kubernetes::DefaultNamespace.new(cluster, project: project).from_environment_name(environment_name)
variables
@@ -105,19 +107,11 @@ module Clusters
private
- ##
- # Environment slug can be predicted given an environment
- # name, so even if the environment isn't persisted yet we
- # still know what to look for.
- def environment_slug(name)
- Gitlab::Slug::Environment.new(name).generate
- end
-
def find_persisted_namespace(project, environment_name:)
Clusters::KubernetesNamespaceFinder.new(
cluster,
project: project,
- environment_slug: environment_slug(environment_name)
+ environment_name: environment_name
).execute
end
@@ -198,6 +192,10 @@ module Clusters
true
end
+
+ def nullify_blank_namespace
+ self.namespace = nil if namespace.blank?
+ end
end
end
end
diff --git a/app/models/clusters/providers/aws.rb b/app/models/clusters/providers/aws.rb
new file mode 100644
index 00000000000..ae4156896bc
--- /dev/null
+++ b/app/models/clusters/providers/aws.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module Clusters
+ module Providers
+ class Aws < ApplicationRecord
+ include Clusters::Concerns::ProviderStatus
+
+ self.table_name = 'cluster_providers_aws'
+
+ belongs_to :cluster, inverse_of: :provider_aws, class_name: 'Clusters::Cluster'
+ belongs_to :created_by_user, class_name: 'User'
+
+ default_value_for :region, 'us-east-1'
+ default_value_for :num_nodes, 3
+ default_value_for :instance_type, 'm5.large'
+
+ attr_encrypted :secret_access_key,
+ mode: :per_attribute_iv,
+ key: Settings.attr_encrypted_db_key_base_truncated,
+ algorithm: 'aes-256-gcm'
+
+ validates :role_arn,
+ length: 1..2048,
+ format: {
+ with: Gitlab::Regex.aws_arn_regex,
+ message: Gitlab::Regex.aws_arn_regex_message
+ }
+
+ validates :num_nodes,
+ numericality: {
+ only_integer: true,
+ greater_than: 0
+ }
+
+ validates :key_name, :region, :instance_type, :security_group_id, length: { in: 1..255 }
+ validates :subnet_ids, presence: true
+
+ def nullify_credentials
+ assign_attributes(
+ access_key_id: nil,
+ secret_access_key: nil,
+ session_token: nil
+ )
+ end
+ end
+ end
+end
diff --git a/app/models/clusters/providers/gcp.rb b/app/models/clusters/providers/gcp.rb
index 390748bf252..f871674676f 100644
--- a/app/models/clusters/providers/gcp.rb
+++ b/app/models/clusters/providers/gcp.rb
@@ -3,6 +3,8 @@
module Clusters
module Providers
class Gcp < ApplicationRecord
+ include Clusters::Concerns::ProviderStatus
+
self.table_name = 'cluster_providers_gcp'
belongs_to :cluster, inverse_of: :provider_gcp, class_name: 'Clusters::Cluster'
@@ -10,6 +12,9 @@ module Clusters
default_value_for :zone, 'us-central1-a'
default_value_for :num_nodes, 3
default_value_for :machine_type, 'n1-standard-2'
+ default_value_for :cloud_run, false
+
+ scope :cloud_run, -> { where(cloud_run: true) }
attr_encrypted :access_token,
mode: :per_attribute_iv,
@@ -32,50 +37,25 @@ module Clusters
greater_than: 0
}
- state_machine :status, initial: :scheduled do
- state :scheduled, value: 1
- state :creating, value: 2
- state :created, value: 3
- state :errored, value: 4
-
- event :make_creating do
- transition any - [:creating] => :creating
- end
-
- event :make_created do
- transition any - [:created] => :created
- end
-
- event :make_errored do
- transition any - [:errored] => :errored
- end
-
- before_transition any => [:errored, :created] do |provider|
- provider.access_token = nil
- provider.operation_id = nil
- end
-
- before_transition any => [:creating] do |provider, transition|
- operation_id = transition.args.first
- raise ArgumentError.new('operation_id is required') unless operation_id.present?
-
- provider.operation_id = operation_id
- end
+ def api_client
+ return unless access_token
- before_transition any => [:errored] do |provider, transition|
- status_reason = transition.args.first
- provider.status_reason = status_reason if status_reason
- end
+ @api_client ||= GoogleApi::CloudPlatform::Client.new(access_token, nil)
end
- def on_creation?
- scheduled? || creating?
+ def nullify_credentials
+ assign_attributes(
+ access_token: nil,
+ operation_id: nil
+ )
end
- def api_client
- return unless access_token
+ def assign_operation_id(operation_id)
+ assign_attributes(operation_id: operation_id)
+ end
- @api_client ||= GoogleApi::CloudPlatform::Client.new(access_token, nil)
+ def knative_pre_installed?
+ cloud_run?
end
end
end
diff --git a/app/models/commit.rb b/app/models/commit.rb
index a442f607fbf..aae49c36899 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -119,10 +119,22 @@ class Commit
@raw = raw_commit
@project = project
- @statuses = {}
@gpg_commit = Gitlab::Gpg::Commit.new(self) if project
end
+ delegate \
+ :pipelines,
+ :last_pipeline,
+ :latest_pipeline,
+ :latest_pipeline_for_project,
+ :set_latest_pipeline_for_ref,
+ :status,
+ to: :with_pipeline
+
+ def with_pipeline
+ @with_pipeline ||= CommitWithPipeline.new(self)
+ end
+
def id
raw.id
end
@@ -245,10 +257,9 @@ class Commit
end
def author
- # We use __sync so that we get the actual objects back (including an actual
- # nil), instead of a wrapper, as returning a wrapped nil breaks a lot of
- # code.
- lazy_author.__sync
+ strong_memoize(:author) do
+ lazy_author&.itself
+ end
end
request_cache(:author) { author_email.downcase }
@@ -301,30 +312,6 @@ class Commit
)
end
- def pipelines
- project.ci_pipelines.where(sha: sha)
- end
-
- def last_pipeline
- strong_memoize(:last_pipeline) do
- pipelines.last
- end
- end
-
- def status(ref = nil)
- return @statuses[ref] if @statuses.key?(ref)
-
- @statuses[ref] = status_for_project(ref, project)
- end
-
- def status_for_project(ref, pipeline_project)
- pipeline_project.ci_pipelines.latest_status_per_commit(id, ref)[id]
- end
-
- def set_status_for_ref(ref, status)
- @statuses[ref] = status
- end
-
def signature
return @signature if defined?(@signature)
@@ -427,7 +414,7 @@ class Commit
if entry[:type] == :blob
blob = ::Blob.decorate(Gitlab::Git::Blob.new(name: entry[:name]), @project)
- blob.image? || blob.video? ? :raw : :blob
+ blob.image? || blob.video? || blob.audio? ? :raw : :blob
else
entry[:type]
end
diff --git a/app/models/commit_collection.rb b/app/models/commit_collection.rb
index e8df46e1cc3..d4c29aa295b 100644
--- a/app/models/commit_collection.rb
+++ b/app/models/commit_collection.rb
@@ -34,6 +34,20 @@ class CommitCollection
end
end
+ # Returns the collection with the latest pipeline for every commit pre-set.
+ #
+ # Setting the pipeline for each commit ahead of time removes the need for running
+ # a query for every commit we're displaying.
+ def with_latest_pipeline(ref = nil)
+ pipelines = project.ci_pipelines.latest_pipeline_per_commit(map(&:id), ref)
+
+ each do |commit|
+ commit.set_latest_pipeline_for_ref(ref, pipelines[commit.id])
+ end
+
+ self
+ end
+
def unenriched
commits.reject(&:gitaly_commit?)
end
@@ -58,22 +72,15 @@ class CommitCollection
end.compact]
# Replace the commits, keeping the same order
- @commits = @commits.map do |c|
- replacements.fetch(c.id, c)
- end
-
- self
- end
-
- # Sets the pipeline status for every commit.
- #
- # Setting this status ahead of time removes the need for running a query for
- # every commit we're displaying.
- def with_pipeline_status
- statuses = project.ci_pipelines.latest_status_per_commit(map(&:id), ref)
-
- each do |commit|
- commit.set_status_for_ref(ref, statuses[commit.id])
+ @commits = @commits.map do |original_commit|
+ # Return the original instance: if it didn't need to be batchloaded, it was
+ # already enriched.
+ batch_loaded_commit = replacements.fetch(original_commit.id, original_commit)
+
+ # If batch loading the commit failed, fall back to the original commit.
+ # We need to explicitly check `.nil?` since otherwise a `BatchLoader` instance
+ # that looks like `nil` is returned.
+ batch_loaded_commit.nil? ? original_commit : batch_loaded_commit
end
self
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 5d9d3179f9d..39a6247b3b2 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -48,6 +48,10 @@ class CommitStatus < ApplicationRecord
scope :processables, -> { where(type: %w[Ci::Build Ci::Bridge]) }
scope :for_ids, -> (ids) { where(id: ids) }
+ scope :with_preloads, -> do
+ preload(:project, :user)
+ end
+
scope :with_needs, -> (names = nil) do
needs = Ci::BuildNeed.scoped_build.select(1)
needs = needs.where(name: names) if names
@@ -161,11 +165,11 @@ class CommitStatus < ApplicationRecord
end
def self.status_for_prior_stages(index)
- before_stage(index).latest.status || 'success'
+ before_stage(index).latest.slow_composite_status || 'success'
end
def self.status_for_names(names)
- where(name: names).latest.status || 'success'
+ where(name: names).latest.slow_composite_status || 'success'
end
def locking_enabled?
diff --git a/app/models/commit_with_pipeline.rb b/app/models/commit_with_pipeline.rb
new file mode 100644
index 00000000000..f382ae8f55a
--- /dev/null
+++ b/app/models/commit_with_pipeline.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+class CommitWithPipeline < SimpleDelegator
+ include Presentable
+
+ def initialize(commit)
+ @latest_pipelines = {}
+ super(commit)
+ end
+
+ def pipelines
+ project.ci_pipelines.where(sha: sha)
+ end
+
+ def last_pipeline
+ strong_memoize(:last_pipeline) do
+ pipelines.last
+ end
+ end
+
+ def latest_pipeline(ref = nil)
+ @latest_pipelines.fetch(ref) do |ref|
+ @latest_pipelines[ref] = latest_pipeline_for_project(ref, project)
+ end
+ end
+
+ def latest_pipeline_for_project(ref, pipeline_project)
+ pipeline_project.ci_pipelines.latest_pipeline_per_commit(id, ref)[id]
+ end
+
+ def set_latest_pipeline_for_ref(ref, pipeline)
+ @latest_pipelines[ref] = pipeline
+ end
+
+ def status(ref = nil)
+ latest_pipeline(ref)&.status
+ end
+end
diff --git a/app/models/concerns/analytics/cycle_analytics/stage.rb b/app/models/concerns/analytics/cycle_analytics/stage.rb
index 0c603c2d5e6..54e9a13d1ea 100644
--- a/app/models/concerns/analytics/cycle_analytics/stage.rb
+++ b/app/models/concerns/analytics/cycle_analytics/stage.rb
@@ -7,6 +7,7 @@ module Analytics
included do
validates :name, presence: true
+ validates :name, exclusion: { in: Gitlab::Analytics::CycleAnalytics::DefaultStages.names }, if: :custom?
validates :start_event_identifier, presence: true
validates :end_event_identifier, presence: true
validate :validate_stage_event_pairs
@@ -15,6 +16,7 @@ module Analytics
enum end_event_identifier: Gitlab::Analytics::CycleAnalytics::StageEvents.to_enum, _prefix: :end_event_identifier
alias_attribute :custom_stage?, :custom
+ scope :default_stages, -> { where(custom: false) }
end
def parent=(_)
@@ -45,11 +47,17 @@ module Analytics
!custom
end
- # The model that is going to be queried, Issue or MergeRequest
- def subject_model
+ # The model class that is going to be queried, Issue or MergeRequest
+ def subject_class
start_event.object_type
end
+ def matches_with_stage_params?(stage_params)
+ default_stage? &&
+ start_event_identifier.to_s.eql?(stage_params[:start_event_identifier].to_s) &&
+ end_event_identifier.to_s.eql?(stage_params[:end_event_identifier].to_s)
+ end
+
private
def validate_stage_event_pairs
diff --git a/app/models/concerns/atomic_internal_id.rb b/app/models/concerns/atomic_internal_id.rb
index dc1735a7e48..64df265dc25 100644
--- a/app/models/concerns/atomic_internal_id.rb
+++ b/app/models/concerns/atomic_internal_id.rb
@@ -27,40 +27,73 @@ module AtomicInternalId
extend ActiveSupport::Concern
class_methods do
- def has_internal_id(column, scope:, init:, presence: true) # rubocop:disable Naming/PredicateName
+ def has_internal_id(column, scope:, init:, ensure_if: nil, presence: true) # rubocop:disable Naming/PredicateName
# We require init here to retain the ability to recalculate in the absence of a
# InternaLId record (we may delete records in `internal_ids` for example).
raise "has_internal_id requires a init block, none given." unless init
+ raise "has_internal_id needs to be defined on association." unless self.reflect_on_association(scope)
- before_validation :"ensure_#{scope}_#{column}!", on: :create
+ before_validation :"track_#{scope}_#{column}!", on: :create
+ before_validation :"ensure_#{scope}_#{column}!", on: :create, if: ensure_if
validates column, presence: presence
define_method("ensure_#{scope}_#{column}!") do
- scope_value = association(scope).reader
+ scope_value = internal_id_read_scope(scope)
value = read_attribute(column)
-
return value unless scope_value
- scope_attrs = { scope_value.class.table_name.singularize.to_sym => scope_value }
- usage = self.class.table_name.to_sym
-
- if value.present?
- InternalId.track_greatest(self, scope_attrs, usage, value, init)
- else
- value = InternalId.generate_next(self, scope_attrs, usage, init)
+ if value.nil?
+ # We don't have a value yet and use a InternalId record to generate
+ # the next value.
+ value = InternalId.generate_next(
+ self,
+ internal_id_scope_attrs(scope),
+ internal_id_scope_usage,
+ init)
write_attribute(column, value)
end
value
end
+ define_method("track_#{scope}_#{column}!") do
+ return unless @internal_id_needs_tracking
+
+ scope_value = internal_id_read_scope(scope)
+ return unless scope_value
+
+ value = read_attribute(column)
+
+ if value.present?
+ # The value was set externally, e.g. by the user
+ # We update the InternalId record to keep track of the greatest value.
+ InternalId.track_greatest(
+ self,
+ internal_id_scope_attrs(scope),
+ internal_id_scope_usage,
+ value,
+ init)
+
+ @internal_id_needs_tracking = false
+ end
+ end
+
+ define_method("#{column}=") do |value|
+ super(value).tap do |v|
+ # Indicate the iid was set from externally
+ @internal_id_needs_tracking = true
+ end
+ end
+
define_method("reset_#{scope}_#{column}") do
if value = read_attribute(column)
- scope_value = association(scope).reader
- scope_attrs = { scope_value.class.table_name.singularize.to_sym => scope_value }
- usage = self.class.table_name.to_sym
+ did_reset = InternalId.reset(
+ self,
+ internal_id_scope_attrs(scope),
+ internal_id_scope_usage,
+ value)
- if InternalId.reset(self, scope_attrs, usage, value)
+ if did_reset
write_attribute(column, nil)
end
end
@@ -69,4 +102,18 @@ module AtomicInternalId
end
end
end
+
+ def internal_id_scope_attrs(scope)
+ scope_value = internal_id_read_scope(scope)
+
+ { scope_value.class.table_name.singularize.to_sym => scope_value } if scope_value
+ end
+
+ def internal_id_scope_usage
+ self.class.table_name.to_sym
+ end
+
+ def internal_id_read_scope(scope)
+ association(scope).reader
+ end
end
diff --git a/app/models/concerns/avatarable.rb b/app/models/concerns/avatarable.rb
index 269145309fc..a98baeb0e3d 100644
--- a/app/models/concerns/avatarable.rb
+++ b/app/models/concerns/avatarable.rb
@@ -38,7 +38,7 @@ module Avatarable
def avatar_type
unless self.avatar.image?
- errors.add :avatar, "file format is not supported. Please try one of the following supported formats: #{AvatarUploader::IMAGE_EXT.join(', ')}"
+ errors.add :avatar, "file format is not supported. Please try one of the following supported formats: #{AvatarUploader::SAFE_IMAGE_EXT.join(', ')}"
end
end
diff --git a/app/models/concerns/checksummable.rb b/app/models/concerns/checksummable.rb
new file mode 100644
index 00000000000..1f76eb87aa5
--- /dev/null
+++ b/app/models/concerns/checksummable.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+module Checksummable
+ extend ActiveSupport::Concern
+
+ class_methods do
+ def hexdigest(path)
+ Digest::SHA256.file(path).hexdigest
+ end
+ end
+end
diff --git a/app/models/concerns/ci/contextable.rb b/app/models/concerns/ci/contextable.rb
index 91dda803031..49d6f3d399c 100644
--- a/app/models/concerns/ci/contextable.rb
+++ b/app/models/concerns/ci/contextable.rb
@@ -78,6 +78,7 @@ module Ci
variables.append(key: "CI_JOB_MANUAL", value: 'true') if action?
variables.append(key: "CI_NODE_INDEX", value: self.options[:instance].to_s) if self.options&.include?(:instance)
variables.append(key: "CI_NODE_TOTAL", value: (self.options&.dig(:parallel) || 1).to_s)
+ variables.append(key: "CI_DEFAULT_BRANCH", value: project.default_branch)
variables.concat(legacy_variables)
end
end
diff --git a/app/models/concerns/ci/pipeline_delegator.rb b/app/models/concerns/ci/pipeline_delegator.rb
index dbc5ed1bc9a..76e0cbc7dff 100644
--- a/app/models/concerns/ci/pipeline_delegator.rb
+++ b/app/models/concerns/ci/pipeline_delegator.rb
@@ -15,7 +15,8 @@ module Ci
:merge_request_ref?,
:source_ref,
:source_ref_slug,
- :legacy_detached_merge_request_pipeline?, to: :pipeline
+ :legacy_detached_merge_request_pipeline?,
+ :merge_train_pipeline?, to: :pipeline
end
end
end
diff --git a/app/models/concerns/deployable.rb b/app/models/concerns/deployable.rb
deleted file mode 100644
index 957b72f3721..00000000000
--- a/app/models/concerns/deployable.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-module Deployable
- extend ActiveSupport::Concern
-
- included do
- after_create :create_deployment
-
- def create_deployment
- return unless starts_environment? && !has_deployment?
-
- environment = project.environments.find_or_create_by(
- name: expanded_environment_name
- )
-
- # If we failed to persist envirionment record by validation error, such as name with invalid character,
- # the job will fall back to a non-environment job.
- return unless environment.persisted?
-
- create_deployment!(
- cluster_id: environment.deployment_platform&.cluster_id,
- project_id: environment.project_id,
- environment: environment,
- ref: ref,
- tag: tag,
- sha: sha,
- user: user,
- on_stop: on_stop)
- end
- end
-end
diff --git a/app/models/concerns/deployment_platform.rb b/app/models/concerns/deployment_platform.rb
index e1a8725e728..fe8e9609820 100644
--- a/app/models/concerns/deployment_platform.rb
+++ b/app/models/concerns/deployment_platform.rb
@@ -11,6 +11,10 @@ module DeploymentPlatform
private
+ def cluster_management_project_enabled?
+ Feature.enabled?(:cluster_management_project, default_enabled: true)
+ end
+
def find_deployment_platform(environment)
find_platform_kubernetes_with_cte(environment) ||
find_instance_cluster_platform_kubernetes(environment: environment)
@@ -18,7 +22,7 @@ module DeploymentPlatform
# EE would override this and utilize environment argument
def find_platform_kubernetes_with_cte(_environment)
- Clusters::ClustersHierarchy.new(self).base_and_ancestors
+ Clusters::ClustersHierarchy.new(self, include_management_project: cluster_management_project_enabled?).base_and_ancestors
.enabled.default_environment
.first&.platform_kubernetes
end
diff --git a/app/models/concerns/group_api_compatibility.rb b/app/models/concerns/group_api_compatibility.rb
new file mode 100644
index 00000000000..f02aa2035e5
--- /dev/null
+++ b/app/models/concerns/group_api_compatibility.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+# Add methods used by the groups API
+module GroupAPICompatibility
+ extend ActiveSupport::Concern
+
+ def project_creation_level_str
+ ::Gitlab::Access.project_creation_string_options.key(project_creation_level)
+ end
+
+ def project_creation_level_str=(value)
+ write_attribute(:project_creation_level, ::Gitlab::Access.project_creation_string_options.fetch(value))
+ end
+
+ def subgroup_creation_level_str
+ ::Gitlab::Access.subgroup_creation_string_options.key(subgroup_creation_level)
+ end
+
+ def subgroup_creation_level_str=(value)
+ write_attribute(:subgroup_creation_level, ::Gitlab::Access.subgroup_creation_string_options.fetch(value))
+ end
+end
diff --git a/app/models/concerns/has_status.rb b/app/models/concerns/has_status.rb
index bcbbb27a9a8..c01fb4740e5 100644
--- a/app/models/concerns/has_status.rb
+++ b/app/models/concerns/has_status.rb
@@ -10,6 +10,8 @@ module HasStatus
ACTIVE_STATUSES = %w[preparing pending running].freeze
COMPLETED_STATUSES = %w[success failed canceled skipped].freeze
ORDERED_STATUSES = %w[failed preparing pending running manual scheduled canceled success skipped created].freeze
+ PASSED_WITH_WARNINGS_STATUSES = %w[failed canceled].to_set.freeze
+ EXCLUDE_IGNORED_STATUSES = %w[manual failed canceled].to_set.freeze
STATUSES_ENUM = { created: 0, pending: 1, running: 2, success: 3,
failed: 4, canceled: 5, skipped: 6, manual: 7,
scheduled: 8, preparing: 9 }.freeze
@@ -17,7 +19,7 @@ module HasStatus
UnknownStatusError = Class.new(StandardError)
class_methods do
- def status_sql
+ def legacy_status_sql
scope_relevant = respond_to?(:exclude_ignored) ? exclude_ignored : all
scope_warnings = respond_to?(:failed_but_allowed) ? failed_but_allowed : none
@@ -53,8 +55,22 @@ module HasStatus
)
end
- def status
- all.pluck(status_sql).first
+ def legacy_status
+ all.pluck(legacy_status_sql).first
+ end
+
+ # This method should not be used.
+ # This method performs expensive calculation of status:
+ # 1. By plucking all related objects,
+ # 2. Or executes expensive SQL query
+ def slow_composite_status
+ if Feature.enabled?(:ci_composite_status, default_enabled: false)
+ Gitlab::Ci::Status::Composite
+ .new(all, with_allow_failure: columns_hash.key?('allow_failure'))
+ .status
+ else
+ legacy_status
+ end
end
def started_at
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb
index d02f3731cc2..852576dbbc2 100644
--- a/app/models/concerns/issuable.rb
+++ b/app/models/concerns/issuable.rb
@@ -4,7 +4,7 @@
#
# Contains common functionality shared between Issues and MergeRequests
#
-# Used by Issue, MergeRequest
+# Used by Issue, MergeRequest, Epic
#
module Issuable
extend ActiveSupport::Concern
@@ -25,6 +25,19 @@ module Issuable
include UpdatedAtFilterable
include IssuableStates
include ClosedAtFilterable
+ include VersionedDescription
+
+ TITLE_LENGTH_MAX = 255
+ TITLE_HTML_LENGTH_MAX = 800
+ DESCRIPTION_LENGTH_MAX = 1.megabyte
+ DESCRIPTION_HTML_LENGTH_MAX = 5.megabytes
+
+ STATE_ID_MAP = {
+ opened: 1,
+ closed: 2,
+ merged: 3,
+ locked: 4
+ }.with_indifferent_access.freeze
# This object is used to gather issuable meta data for displaying
# upvotes, downvotes, notes and closing merge requests count for issues and merge requests
@@ -72,10 +85,15 @@ module Issuable
prefix: true
validates :author, presence: true
- validates :title, presence: true, length: { maximum: 255 }
- validates :description, length: { maximum: Gitlab::Database::MAX_TEXT_SIZE_LIMIT }, allow_blank: true
+ validates :title, presence: true, length: { maximum: TITLE_LENGTH_MAX }
+ # we validate the description against DESCRIPTION_LENGTH_MAX only for Issuables being created
+ # to avoid breaking the existing Issuables which may have their descriptions longer
+ validates :description, length: { maximum: DESCRIPTION_LENGTH_MAX }, allow_blank: true, on: :create
+ validate :description_max_length_for_new_records_is_valid, on: :update
validate :milestone_is_valid
+ before_validation :truncate_description_on_import!
+
scope :authored, ->(user) { where(author_id: user) }
scope :recent, -> { reorder(id: :desc) }
scope :of_projects, ->(ids) { where(project_id: ids) }
@@ -138,6 +156,16 @@ module Issuable
def milestone_is_valid
errors.add(:milestone_id, message: "is invalid") if milestone_id.present? && !milestone_available?
end
+
+ def description_max_length_for_new_records_is_valid
+ if new_record? && description.length > Issuable::DESCRIPTION_LENGTH_MAX
+ errors.add(:description, :too_long, count: Issuable::DESCRIPTION_LENGTH_MAX)
+ end
+ end
+
+ def truncate_description_on_import!
+ self.description = description&.slice(0, Issuable::DESCRIPTION_LENGTH_MAX) if importing?
+ end
end
class_methods do
@@ -152,13 +180,17 @@ module Issuable
fuzzy_search(query, [:title])
end
- # Available state values persisted in state_id column using state machine
+ def available_states
+ @available_states ||= STATE_ID_MAP.slice(*available_state_names)
+ end
+
+ # Available state names used to persist state_id column using state machine
#
# Override this on subclasses if different states are needed
#
- # Check MergeRequest.available_states for example
- def available_states
- @available_states ||= { opened: 1, closed: 2 }.with_indifferent_access
+ # Check MergeRequest.available_states_names for example
+ def available_state_names
+ [:opened, :closed]
end
# Searches for records with a matching title or description.
@@ -277,6 +309,14 @@ module Issuable
end
end
+ def state
+ self.class.available_states.key(state_id)
+ end
+
+ def state=(value)
+ self.state_id = self.class.available_states[value]
+ end
+
def resource_parent
project
end
diff --git a/app/models/concerns/issuable_states.rb b/app/models/concerns/issuable_states.rb
index 33bc41d7f44..f0b9f0d1f3a 100644
--- a/app/models/concerns/issuable_states.rb
+++ b/app/models/concerns/issuable_states.rb
@@ -4,22 +4,20 @@ module IssuableStates
extend ActiveSupport::Concern
# The state:string column is being migrated to state_id:integer column
- # This is a temporary hook to populate state_id column with new values
- # and should be removed after the state column is removed.
- # Check https://gitlab.com/gitlab-org/gitlab-foss/issues/51789 for more information
+ # This is a temporary hook to keep state column in sync until it is removed.
+ # Check https: https://gitlab.com/gitlab-org/gitlab/issues/33814 for more information
+ # The state column can be safely removed after 2019-10-27
included do
- before_save :set_state_id
+ before_save :sync_issuable_deprecated_state
end
- def set_state_id
- return if state.nil? || state.empty?
+ def sync_issuable_deprecated_state
+ return if self.is_a?(Epic)
+ return unless respond_to?(:state)
+ return if state_id.nil?
- # Needed to prevent breaking some migration specs that
- # rollback database to a point where state_id does not exist.
- # We can use this guard clause for now since this file will
- # be removed in the next release.
- return unless self.has_attribute?(:state_id)
+ deprecated_state = self.class.available_states.key(state_id)
- self.state_id = self.class.available_states[state]
+ self.write_attribute(:state, deprecated_state)
end
end
diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb
index 377600ef6e5..9b6c57261d8 100644
--- a/app/models/concerns/mentionable.rb
+++ b/app/models/concerns/mentionable.rb
@@ -150,7 +150,7 @@ module Mentionable
#
# Returns a Hash.
def detect_mentionable_changes
- source = (changes.present? ? changes : previous_changes).dup
+ source = (changes.presence || previous_changes).dup
mentionable = self.class.mentionable_attrs.map { |attr, options| attr }
diff --git a/app/models/concerns/milestoneish.rb b/app/models/concerns/milestoneish.rb
index 3deb86da6cf..42b370990ac 100644
--- a/app/models/concerns/milestoneish.rb
+++ b/app/models/concerns/milestoneish.rb
@@ -6,7 +6,9 @@ module Milestoneish
end
def closed_issues_count(user)
- count_issues_by_state(user)['closed'].to_i
+ closed_state_id = Issue.available_states[:closed]
+
+ count_issues_by_state(user)[closed_state_id].to_i
end
def complete?(user)
@@ -117,7 +119,7 @@ module Milestoneish
def count_issues_by_state(user)
memoize_per_user(user, :count_issues_by_state) do
- issues_visible_to_user(user).reorder(nil).group(:state).count
+ issues_visible_to_user(user).reorder(nil).group(:state_id).count
end
end
diff --git a/app/models/concerns/noteable.rb b/app/models/concerns/noteable.rb
index 6caa23ef9b7..3065e0ba6c5 100644
--- a/app/models/concerns/noteable.rb
+++ b/app/models/concerns/noteable.rb
@@ -7,6 +7,8 @@ module Noteable
# avoiding n+1 queries and improving performance.
NoteableMeta = Struct.new(:user_notes_count)
+ MAX_NOTES_LIMIT = 5_000
+
class_methods do
# `Noteable` class names that support replying to individual notes.
def replyable_types
diff --git a/app/models/concerns/notification_branch_selection.rb b/app/models/concerns/notification_branch_selection.rb
index d8e18de7551..7f00b652530 100644
--- a/app/models/concerns/notification_branch_selection.rb
+++ b/app/models/concerns/notification_branch_selection.rb
@@ -21,7 +21,7 @@ module NotificationBranchSelection
end
is_default_branch = ref == project.default_branch
- is_protected_branch = project.protected_branches.exists?(name: ref)
+ is_protected_branch = ProtectedBranch.protected?(project, ref)
case branches_to_be_notified
when "all"
diff --git a/app/models/concerns/prometheus_adapter.rb b/app/models/concerns/prometheus_adapter.rb
index aab0589f7ca..9df77b565da 100644
--- a/app/models/concerns/prometheus_adapter.rb
+++ b/app/models/concerns/prometheus_adapter.rb
@@ -44,7 +44,7 @@ module PrometheusAdapter
end
def query_klass_for(query_name)
- Gitlab::Prometheus::Queries.const_get("#{query_name.to_s.classify}Query")
+ Gitlab::Prometheus::Queries.const_get("#{query_name.to_s.classify}Query", false)
end
def build_query_args(*args)
diff --git a/app/models/concerns/relative_positioning.rb b/app/models/concerns/relative_positioning.rb
index dfe3c391880..b645cf71443 100644
--- a/app/models/concerns/relative_positioning.rb
+++ b/app/models/concerns/relative_positioning.rb
@@ -127,6 +127,7 @@ module RelativePositioning
if pos_after && (pos_after - pos_before) < 2
before.move_sequence_after
+ pos_after = before.next_relative_position
end
self.relative_position = self.class.position_between(pos_before, pos_after)
@@ -138,6 +139,7 @@ module RelativePositioning
if pos_before && (pos_after - pos_before) < 2
after.move_sequence_before
+ pos_before = after.prev_relative_position
end
self.relative_position = self.class.position_between(pos_before, pos_after)
diff --git a/app/models/concerns/routable.rb b/app/models/concerns/routable.rb
index bdd87437e2a..129d0fbb2c0 100644
--- a/app/models/concerns/routable.rb
+++ b/app/models/concerns/routable.rb
@@ -51,14 +51,21 @@ module Routable
# Klass.where_full_path_in(%w{gitlab-org/gitlab-foss gitlab-org/gitlab})
#
# Returns an ActiveRecord::Relation.
- def where_full_path_in(paths)
+ def where_full_path_in(paths, use_includes: true)
return none if paths.empty?
wheres = paths.map do |path|
"(LOWER(routes.path) = LOWER(#{connection.quote(path)}))"
end
- includes(:route).where(wheres.join(' OR ')).references(:routes)
+ route =
+ if use_includes
+ includes(:route).references(:routes)
+ else
+ joins(:route)
+ end
+
+ route.where(wheres.join(' OR '))
end
end
diff --git a/app/models/concerns/spammable.rb b/app/models/concerns/spammable.rb
index 3ff4b4046d3..10bbeecc2f7 100644
--- a/app/models/concerns/spammable.rb
+++ b/app/models/concerns/spammable.rb
@@ -80,4 +80,9 @@ module Spammable
def check_for_spam?
true
end
+
+ # Override in Spammable if differs
+ def allow_possible_spam?
+ Feature.enabled?(:allow_possible_spam, project)
+ end
end
diff --git a/app/models/concerns/stepable.rb b/app/models/concerns/stepable.rb
index d00a049a004..dea241c5dbe 100644
--- a/app/models/concerns/stepable.rb
+++ b/app/models/concerns/stepable.rb
@@ -11,15 +11,15 @@ module Stepable
initial_result = {}
steps.inject(initial_result) do |previous_result, callback|
- result = method(callback).call
+ result = method(callback).call(previous_result)
- if result[:status] == :error
- result[:failed_step] = callback
+ if result[:status] != :success
+ result[:last_step] = callback
break result
end
- previous_result.merge(result)
+ result
end
end
diff --git a/app/models/concerns/versioned_description.rb b/app/models/concerns/versioned_description.rb
new file mode 100644
index 00000000000..63a24aadc8a
--- /dev/null
+++ b/app/models/concerns/versioned_description.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+module VersionedDescription
+ extend ActiveSupport::Concern
+
+ included do
+ attr_accessor :saved_description_version
+
+ has_many :description_versions
+
+ after_update :save_description_version
+ end
+
+ private
+
+ def save_description_version
+ self.saved_description_version = nil
+
+ return unless Feature.enabled?(:save_description_versions, issuing_parent)
+ return unless saved_change_to_description?
+
+ unless description_versions.exists?
+ description_versions.create!(
+ description: description_before_last_save,
+ created_at: created_at
+ )
+ end
+
+ self.saved_description_version = description_versions.create!(description: description)
+ end
+end
diff --git a/app/models/concerns/worker_attributes.rb b/app/models/concerns/worker_attributes.rb
new file mode 100644
index 00000000000..af40e9e3b19
--- /dev/null
+++ b/app/models/concerns/worker_attributes.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+module WorkerAttributes
+ extend ActiveSupport::Concern
+
+ class_methods do
+ def feature_category(value)
+ raise "Invalid category. Use `feature_category_not_owned!` to mark a worker as not owned" if value == :not_owned
+
+ worker_attributes[:feature_category] = value
+ end
+
+ # Special case: mark this work as not associated with a feature category
+ # this should be used for cross-cutting concerns, such as mailer workers.
+ def feature_category_not_owned!
+ worker_attributes[:feature_category] = :not_owned
+ end
+
+ def get_feature_category
+ get_worker_attribute(:feature_category)
+ end
+
+ def feature_category_not_owned?
+ get_worker_attribute(:feature_category) == :not_owned
+ end
+
+ protected
+
+ # Returns a worker attribute declared on this class or its parent class.
+ # This approach allows declared attributes to be inherited by
+ # child classes.
+ def get_worker_attribute(name)
+ worker_attributes[name] || superclass_worker_attributes(name)
+ end
+
+ private
+
+ def worker_attributes
+ @attributes ||= {}
+ end
+
+ def superclass_worker_attributes(name)
+ return unless superclass.include? WorkerAttributes
+
+ superclass.get_worker_attribute(name)
+ end
+ end
+end
diff --git a/app/models/container_repository.rb b/app/models/container_repository.rb
index 583e23d1274..27bb76835c7 100644
--- a/app/models/container_repository.rb
+++ b/app/models/container_repository.rb
@@ -11,6 +11,7 @@ class ContainerRepository < ApplicationRecord
delegate :client, to: :registry
scope :ordered, -> { order(:name) }
+ scope :with_api_entity_associations, -> { preload(:project) }
# rubocop: disable CodeReuse/ServiceClass
def registry
@@ -67,11 +68,9 @@ class ContainerRepository < ApplicationRecord
def delete_tags!
return unless has_tags?
- digests = tags.map { |tag| tag.digest }.to_set
+ digests = tags.map { |tag| tag.digest }.compact.to_set
- digests.all? do |digest|
- delete_tag_by_digest(digest)
- end
+ digests.map(&method(:delete_tag_by_digest)).all?
end
def delete_tag_by_digest(digest)
diff --git a/app/models/cycle_analytics/project_level.rb b/app/models/cycle_analytics/project_level.rb
index 4aa426c58a1..591435baf34 100644
--- a/app/models/cycle_analytics/project_level.rb
+++ b/app/models/cycle_analytics/project_level.rb
@@ -13,6 +13,7 @@ module CycleAnalytics
def summary
@summary ||= ::Gitlab::CycleAnalytics::StageSummary.new(project,
from: options[:from],
+ to: options[:to],
current_user: options[:current_user]).data
end
diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index db7f9e06362..7ccd5e98360 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -9,7 +9,7 @@ class Deployment < ApplicationRecord
belongs_to :environment, required: true
belongs_to :cluster, class_name: 'Clusters::Cluster', optional: true
belongs_to :user
- belongs_to :deployable, polymorphic: true # rubocop:disable Cop/PolymorphicAssociations
+ belongs_to :deployable, polymorphic: true, optional: true # rubocop:disable Cop/PolymorphicAssociations
has_internal_id :iid, scope: :project, init: ->(s) do
Deployment.where(project: s.project).maximum(:iid) if s&.project
@@ -22,6 +22,8 @@ class Deployment < ApplicationRecord
scope :for_environment, -> (environment) { where(environment_id: environment) }
+ scope :visible, -> { where(status: %i[running success failed canceled]) }
+
state_machine :status, initial: :created do
event :run do
transition created: :running
@@ -73,6 +75,10 @@ class Deployment < ApplicationRecord
find(ids)
end
+ def self.find_successful_deployment!(iid)
+ success.find_by!(iid: iid)
+ end
+
def commit
project.commit(sha)
end
@@ -180,3 +186,5 @@ class Deployment < ApplicationRecord
self.created_at if success? && !read_attribute(:finished_at)
end
end
+
+Deployment.prepend_if_ee('EE::Deployment')
diff --git a/app/models/description_version.rb b/app/models/description_version.rb
new file mode 100644
index 00000000000..abab7f94212
--- /dev/null
+++ b/app/models/description_version.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class DescriptionVersion < ApplicationRecord
+ belongs_to :issue
+ belongs_to :merge_request
+
+ validate :exactly_one_issuable
+
+ def self.issuable_attrs
+ %i(issue merge_request).freeze
+ end
+
+ private
+
+ def exactly_one_issuable
+ issuable_count = self.class.issuable_attrs.count { |attr| self["#{attr}_id"] }
+
+ errors.add(:base, "Exactly one of #{self.class.issuable_attrs.join(', ')} is required") if issuable_count != 1
+ end
+end
+
+DescriptionVersion.prepend_if_ee('EE::DescriptionVersion')
diff --git a/app/models/diff_note.rb b/app/models/diff_note.rb
index aa7286a9971..65e87bb08a7 100644
--- a/app/models/diff_note.rb
+++ b/app/models/diff_note.rb
@@ -75,6 +75,10 @@ class DiffNote < Note
self.original_position.diff_refs == diff_refs
end
+ # Checks if the current `position` line in the diff
+ # exists and is suggestible (not a deletion).
+ #
+ # Avoid using in iterations as it requests Gitaly.
def supports_suggestion?
return false unless noteable&.supports_suggestion? && on_text?
# We don't want to trigger side-effects of `diff_file` call.
diff --git a/app/models/diff_viewer/image.rb b/app/models/diff_viewer/image.rb
index 350bef1d42a..cfda0058d81 100644
--- a/app/models/diff_viewer/image.rb
+++ b/app/models/diff_viewer/image.rb
@@ -6,7 +6,7 @@ module DiffViewer
include ClientSide
self.partial_name = 'image'
- self.extensions = UploaderHelper::IMAGE_EXT
+ self.extensions = UploaderHelper::SAFE_IMAGE_EXT
self.binary = true
self.switcher_icon = 'picture-o'
self.switcher_title = _('image diff')
diff --git a/app/models/environment.rb b/app/models/environment.rb
index fe438b142b2..af0c219d9a0 100644
--- a/app/models/environment.rb
+++ b/app/models/environment.rb
@@ -6,7 +6,8 @@ class Environment < ApplicationRecord
belongs_to :project, required: true
- has_many :deployments, -> { success }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
+ has_many :deployments, -> { visible }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
+ has_many :successful_deployments, -> { success }, class_name: 'Deployment'
has_one :last_deployment, -> { success.order('deployments.id DESC') }, class_name: 'Deployment'
@@ -81,6 +82,10 @@ class Environment < ApplicationRecord
pluck(:name)
end
+ def self.find_or_create_by_name(name)
+ find_or_create_by(name: name)
+ end
+
def predefined_variables
Gitlab::Ci::Variables::Collection.new
.append(key: 'CI_ENVIRONMENT_NAME', value: name)
diff --git a/app/models/event.rb b/app/models/event.rb
index 205e1f71c74..9611019adb8 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -77,15 +77,6 @@ class Event < ApplicationRecord
scope :recent, -> { reorder(id: :desc) }
scope :code_push, -> { where(action: PUSHED) }
- scope :in_projects, -> (projects) do
- sub_query = projects
- .except(:order)
- .select(1)
- .where('projects.id = events.project_id')
-
- where('EXISTS (?)', sub_query).recent
- end
-
scope :with_associations, -> do
# We're using preload for "push_event_payload" as otherwise the association
# is not always available (depending on the query being built).
diff --git a/app/models/event_collection.rb b/app/models/event_collection.rb
index a4c69b11781..4778f74568e 100644
--- a/app/models/event_collection.rb
+++ b/app/models/event_collection.rb
@@ -6,6 +6,8 @@
# in a controller), it's not suitable for building queries that are used for
# building other queries.
class EventCollection
+ include Gitlab::Utils::StrongMemoize
+
# To prevent users from putting too much pressure on the database by cycling
# through thousands of events we put a limit on the number of pages.
MAX_PAGE = 10
@@ -13,57 +15,52 @@ class EventCollection
# projects - An ActiveRecord::Relation object that returns the projects for
# which to retrieve events.
# filter - An EventFilter instance to use for filtering events.
- def initialize(projects, limit: 20, offset: 0, filter: nil)
+ def initialize(projects, limit: 20, offset: 0, filter: nil, groups: nil)
@projects = projects
@limit = limit
@offset = offset
@filter = filter
+ @groups = groups
end
# Returns an Array containing the events.
def to_a
return [] if current_page > MAX_PAGE
- relation = if Gitlab::Database.join_lateral_supported?
- relation_with_join_lateral
+ relation = if groups
+ project_and_group_events
else
- relation_without_join_lateral
+ relation_with_join_lateral('project_id', projects)
end
+ relation = paginate_events(relation)
relation.with_associations.to_a
end
private
- # Returns the events relation to use when JOIN LATERAL is not supported.
- #
- # This relation simply gets all the events for all authorized projects, then
- # limits that set.
- def relation_without_join_lateral
- events = filtered_events.in_projects(projects)
+ def project_and_group_events
+ project_events = relation_with_join_lateral('project_id', projects)
+ group_events = relation_with_join_lateral('group_id', groups)
- paginate_events(events)
+ Event.from_union([project_events, group_events]).recent
end
- # Returns the events relation to use when JOIN LATERAL is supported.
- #
# This relation is built using JOIN LATERAL, producing faster queries than a
# regular LIMIT + OFFSET approach.
- def relation_with_join_lateral
- projects_for_lateral = projects.select(:id).to_sql
+ def relation_with_join_lateral(parent_column, parents)
+ parents_for_lateral = parents.select(:id).to_sql
lateral = filtered_events
.limit(limit_for_join_lateral)
- .where('events.project_id = projects_for_lateral.id')
+ .where("events.#{parent_column} = parents_for_lateral.id") # rubocop:disable GitlabSecurity/SqlInjection
.to_sql
# The outer query does not need to re-apply the filters since the JOIN
# LATERAL body already takes care of this.
- outer = base_relation
- .from("(#{projects_for_lateral}) projects_for_lateral")
+ base_relation
+ .from("(#{parents_for_lateral}) parents_for_lateral")
.joins("JOIN LATERAL (#{lateral}) AS #{Event.table_name} ON true")
-
- paginate_events(outer)
end
def filtered_events
@@ -97,4 +94,10 @@ class EventCollection
def projects
@projects.except(:order)
end
+
+ def groups
+ strong_memoize(:groups) do
+ groups.except(:order) if @groups
+ end
+ end
end
diff --git a/app/models/evidence.rb b/app/models/evidence.rb
new file mode 100644
index 00000000000..69a00f1cb3f
--- /dev/null
+++ b/app/models/evidence.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+class Evidence < ApplicationRecord
+ include ShaAttribute
+
+ belongs_to :release
+
+ before_validation :generate_summary_and_sha
+
+ default_scope { order(created_at: :asc) }
+
+ sha_attribute :summary_sha
+
+ def milestones
+ @milestones ||= release.milestones.includes(:issues)
+ end
+
+ private
+
+ def generate_summary_and_sha
+ summary = Evidences::EvidenceSerializer.new.represent(self) # rubocop: disable CodeReuse/Serializer
+ return unless summary
+
+ self.summary = summary
+ self.summary_sha = Gitlab::CryptoHelper.sha256(summary)
+ end
+end
diff --git a/app/models/global_milestone.rb b/app/models/global_milestone.rb
index 1d553fc8312..7d766e1f25c 100644
--- a/app/models/global_milestone.rb
+++ b/app/models/global_milestone.rb
@@ -11,7 +11,7 @@ class GlobalMilestone
delegate :title, :state, :due_date, :start_date, :participants, :project,
:group, :expires_at, :closed?, :iid, :group_milestone?, :safe_title,
- :milestoneish_id, :parent, to: :milestone
+ :milestoneish_id, :resource_parent, to: :milestone
def to_hash
{
diff --git a/app/models/gpg_signature.rb b/app/models/gpg_signature.rb
index 46cac1d41bb..0c36e51120f 100644
--- a/app/models/gpg_signature.rb
+++ b/app/models/gpg_signature.rb
@@ -23,6 +23,8 @@ class GpgSignature < ApplicationRecord
validates :project_id, presence: true
validates :gpg_key_primary_keyid, presence: true
+ scope :by_commit_sha, ->(shas) { where(commit_sha: shas) }
+
def self.with_key_and_subkeys(gpg_key)
subkey_ids = gpg_key.subkeys.pluck(:id)
diff --git a/app/models/grafana_integration.rb b/app/models/grafana_integration.rb
new file mode 100644
index 00000000000..51cc398394d
--- /dev/null
+++ b/app/models/grafana_integration.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+class GrafanaIntegration < ApplicationRecord
+ belongs_to :project
+
+ attr_encrypted :token,
+ mode: :per_attribute_iv,
+ algorithm: 'aes-256-gcm',
+ key: Settings.attr_encrypted_db_key_base_32
+
+ validates :grafana_url,
+ length: { maximum: 1024 },
+ addressable_url: { enforce_sanitization: true, ascii_only: true }
+
+ validates :token, :project, presence: true
+
+ def client
+ @client ||= ::Grafana::Client.new(api_url: grafana_url.chomp('/'), token: token)
+ end
+end
diff --git a/app/models/group.rb b/app/models/group.rb
index 1b62db04ab7..042201ffa14 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -14,6 +14,7 @@ class Group < Namespace
include TokenAuthenticatable
include WithUploads
include Gitlab::Utils::StrongMemoize
+ include GroupAPICompatibility
ACCESS_REQUEST_APPROVERS_TO_BE_NOTIFIED_LIMIT = 10
@@ -258,6 +259,10 @@ class Group < Namespace
members_with_parents.maintainers.exists?(user_id: user)
end
+ def has_container_repositories?
+ container_repositories.exists?
+ end
+
# @deprecated
alias_method :has_master?, :has_maintainer?
@@ -435,6 +440,10 @@ class Group < Namespace
members.owners.order_recent_sign_in.limit(ACCESS_REQUEST_APPROVERS_TO_BE_NOTIFIED_LIMIT)
end
+ def supports_events?
+ false
+ end
+
private
def update_two_factor_requirement
@@ -464,6 +473,12 @@ class Group < Namespace
errors.add(:visibility_level, "#{visibility} is not allowed since there are sub-groups with higher visibility.")
end
+
+ def self.groups_including_descendants_by(group_ids)
+ Gitlab::ObjectHierarchy
+ .new(Group.where(id: group_ids))
+ .base_and_descendants
+ end
end
Group.prepend_if_ee('EE::Group')
diff --git a/app/models/hooks/web_hook.rb b/app/models/hooks/web_hook.rb
index 16fc7fdbd48..e51b1c41059 100644
--- a/app/models/hooks/web_hook.rb
+++ b/app/models/hooks/web_hook.rb
@@ -13,7 +13,7 @@ class WebHook < ApplicationRecord
algorithm: 'aes-256-gcm',
key: Settings.attr_encrypted_db_key_base_32
- has_many :web_hook_logs, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
+ has_many :web_hook_logs
validates :url, presence: true
validates :url, public_url: true, unless: ->(hook) { hook.is_a?(SystemHook) }
diff --git a/app/models/internal_id.rb b/app/models/internal_id.rb
index 237401899db..8d3eeaf2461 100644
--- a/app/models/internal_id.rb
+++ b/app/models/internal_id.rb
@@ -16,6 +16,8 @@
# * Add `usage` value to enum
# * (Optionally) add columns to `internal_ids` if needed for scope.
class InternalId < ApplicationRecord
+ include Gitlab::Utils::StrongMemoize
+
belongs_to :project
belongs_to :namespace
@@ -47,10 +49,18 @@ class InternalId < ApplicationRecord
def update_and_save(&block)
lock!
yield
+ update_and_save_counter.increment(usage: usage, changed: last_value_changed?)
save!
last_value
end
+ # Instrumentation to track for-update locks
+ def update_and_save_counter
+ strong_memoize(:update_and_save_counter) do
+ Gitlab::Metrics.counter(:gitlab_internal_id_for_update_lock, 'Number of ROW SHARE (FOR UPDATE) locks on individual records from internal_ids')
+ end
+ end
+
class << self
def track_greatest(subject, scope, usage, new_value, init)
return new_value unless available?
diff --git a/app/models/issue.rb b/app/models/issue.rb
index d0b2165fcc7..b9b481ac29b 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -71,7 +71,7 @@ class Issue < ApplicationRecord
attr_spammable :title, spam_title: true
attr_spammable :description, spam_description: true
- state_machine :state, initial: :opened do
+ state_machine :state_id, initial: :opened do
event :close do
transition [:opened] => :closed
end
@@ -80,8 +80,8 @@ class Issue < ApplicationRecord
transition closed: :opened
end
- state :opened
- state :closed
+ state :opened, value: Issue.available_states[:opened]
+ state :closed, value: Issue.available_states[:closed]
before_transition any => :closed do |issue|
issue.closed_at = issue.system_note_timestamp
@@ -93,6 +93,13 @@ class Issue < ApplicationRecord
end
end
+ # Alias to state machine .with_state_id method
+ # This needs to be defined after the state machine block to avoid errors
+ class << self
+ alias_method :with_state, :with_state_id
+ alias_method :with_states, :with_state_ids
+ end
+
def self.relative_positioning_query_base(issue)
in_projects(issue.parent_ids)
end
diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb
index 60b11ad9356..535c3cf2ba1 100644
--- a/app/models/lfs_object.rb
+++ b/app/models/lfs_object.rb
@@ -2,6 +2,7 @@
class LfsObject < ApplicationRecord
include AfterCommitQueue
+ include Checksummable
include EachBatch
include ObjectStorage::BackgroundMove
@@ -9,6 +10,7 @@ class LfsObject < ApplicationRecord
has_many :projects, -> { distinct }, through: :lfs_objects_projects
scope :with_files_stored_locally, -> { where(file_store: LfsObjectUploader::Store::LOCAL) }
+ scope :with_files_stored_remotely, -> { where(file_store: LfsObjectUploader::Store::REMOTE) }
validates :oid, presence: true, uniqueness: true
@@ -23,7 +25,13 @@ class LfsObject < ApplicationRecord
end
def project_allowed_access?(project)
- projects.exists?(project.lfs_storage_project.id)
+ if project.fork_network_member
+ lfs_objects_projects
+ .where("EXISTS(?)", project.fork_network.fork_network_members.select(1).where("fork_network_members.project_id = lfs_objects_projects.project_id"))
+ .exists?
+ else
+ lfs_objects_projects.where(project_id: project.id).exists?
+ end
end
def local_store?
@@ -39,7 +47,7 @@ class LfsObject < ApplicationRecord
# rubocop: enable DestroyAll
def self.calculate_oid(path)
- Digest::SHA256.file(path).hexdigest
+ self.hexdigest(path)
end
end
diff --git a/app/models/list.rb b/app/models/list.rb
index b4a4631b397..13c42b55bf7 100644
--- a/app/models/list.rb
+++ b/app/models/list.rb
@@ -21,20 +21,10 @@ class List < ApplicationRecord
scope :destroyable, -> { where(list_type: list_types.slice(*destroyable_types).values) }
scope :movable, -> { where(list_type: list_types.slice(*movable_types).values) }
- scope :preload_associations, -> (user) do
- preload(:board, label: :priorities)
- end
+ scope :preload_associations, -> { preload(:board, label: :priorities) }
scope :ordered, -> { order(:list_type, :position) }
- # Loads list with preferences for given user
- # if preferences exists for user or not
- scope :with_preferences_for, -> (user) do
- return unless user
-
- includes(:list_user_preferences).where(list_user_preferences: { user_id: [user.id, nil] })
- end
-
alias_method :preferences, :list_user_preferences
class << self
@@ -45,25 +35,25 @@ class List < ApplicationRecord
def movable_types
[:label]
end
+
+ def preload_preferences_for_user(lists, user)
+ return unless user
+
+ lists.each { |list| list.preferences_for(user) }
+ end
end
def preferences_for(user)
return preferences.build unless user
- if preferences.loaded?
- preloaded_preferences_for(user)
- else
- preferences.find_or_initialize_by(user: user)
- end
- end
+ BatchLoader.for(list_id: id, user_id: user.id).batch(default_value: preferences.build(user: user)) do |items, loader|
+ list_ids = items.map { |i| i[:list_id] }
+ user_ids = items.map { |i| i[:user_id] }
- def preloaded_preferences_for(user)
- user_preferences =
- preferences.find do |preference|
- preference.user_id == user.id
+ ListUserPreference.where(list_id: list_ids.uniq, user_id: user_ids.uniq).find_each do |preference|
+ loader.call({ list_id: preference.list_id, user_id: preference.user_id }, preference)
end
-
- user_preferences || preferences.build(user: user)
+ end
end
def update_preferences_for(user, preferences = {})
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 63133ca285b..7cdaa3e3ca7 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -85,7 +85,13 @@ class MergeRequest < ApplicationRecord
# when creating new merge request
attr_accessor :can_be_created, :compare_commits, :diff_options, :compare
- state_machine :state, initial: :opened do
+ # Keep states definition to be evaluated before the state_machine block to avoid spec failures.
+ # If this gets evaluated after, the `merged` and `locked` states which are overrided can be nil.
+ def self.available_state_names
+ super + [:merged, :locked]
+ end
+
+ state_machine :state_id, initial: :opened do
event :close do
transition [:opened] => :closed
end
@@ -116,10 +122,17 @@ class MergeRequest < ApplicationRecord
end
end
- state :opened
- state :closed
- state :merged
- state :locked
+ state :opened, value: MergeRequest.available_states[:opened]
+ state :closed, value: MergeRequest.available_states[:closed]
+ state :merged, value: MergeRequest.available_states[:merged]
+ state :locked, value: MergeRequest.available_states[:locked]
+ end
+
+ # Alias to state machine .with_state_id method
+ # This needs to be defined after the state machine block to avoid errors
+ class << self
+ alias_method :with_state, :with_state_id
+ alias_method :with_states, :with_state_ids
end
state_machine :merge_status, initial: :unchecked do
@@ -196,6 +209,10 @@ class MergeRequest < ApplicationRecord
scope :by_target_branch, ->(branch_name) { where(target_branch: branch_name) }
scope :preload_source_project, -> { preload(:source_project) }
+ scope :with_open_merge_when_pipeline_succeeds, -> do
+ with_state(:opened).where(merge_when_pipeline_succeeds: true)
+ end
+
after_save :keep_around_commit
alias_attribute :project, :target_project
@@ -207,10 +224,6 @@ class MergeRequest < ApplicationRecord
'!'
end
- def self.available_states
- @available_states ||= super.merge(merged: 3, locked: 4)
- end
-
# Returns the top 100 target branches
#
# The returned value is a Array containing branch names
@@ -450,6 +463,15 @@ class MergeRequest < ApplicationRecord
merge_request_diffs.where.not(id: merge_request_diff.id)
end
+ # Overwritten in EE
+ def note_positions_for_paths(paths, _user = nil)
+ positions = notes.new_diff_notes.joins(:note_diff_file)
+ .where('note_diff_files.old_path IN (?) OR note_diff_files.new_path IN (?)', paths, paths)
+ .positions
+
+ Gitlab::Diff::PositionCollection.new(positions, diff_head_sha)
+ end
+
def preloads_discussion_diff_highlighting?
true
end
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index 8b5f10ce159..735ad046f22 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -83,7 +83,7 @@ class MergeRequestDiff < ApplicationRecord
metrics_join = mr_diffs.join(mr_metrics).on(metrics_join_condition)
- condition = MergeRequest.arel_table[:state].eq(:merged)
+ condition = MergeRequest.arel_table[:state_id].eq(MergeRequest.available_states[:merged])
.and(MergeRequest::Metrics.arel_table[:merged_at].lteq(before))
.and(MergeRequest::Metrics.arel_table[:merged_at].not_eq(nil))
@@ -91,7 +91,7 @@ class MergeRequestDiff < ApplicationRecord
end
scope :old_closed_diffs, -> (before) do
- condition = MergeRequest.arel_table[:state].eq(:closed)
+ condition = MergeRequest.arel_table[:state_id].eq(MergeRequest.available_states[:closed])
.and(MergeRequest::Metrics.arel_table[:latest_closed_at].lteq(before))
joins(merge_request: :metrics).where(condition)
@@ -136,6 +136,7 @@ class MergeRequestDiff < ApplicationRecord
# All diff information is collected from repository after object is created.
# It allows you to override variables like head_commit_sha before getting diff.
after_create :save_git_content, unless: :importing?
+ after_create_commit :set_as_latest_diff
after_save :update_external_diff_store, if: -> { !importing? && saved_change_to_external_diff? }
@@ -150,10 +151,6 @@ class MergeRequestDiff < ApplicationRecord
# Collect information about commits and diff from repository
# and save it to the database as serialized data
def save_git_content
- MergeRequest
- .where('id = ? AND COALESCE(latest_merge_request_diff_id, 0) < ?', self.merge_request_id, self.id)
- .update_all(latest_merge_request_diff_id: self.id)
-
ensure_commit_shas
save_commits
save_diffs
@@ -168,6 +165,12 @@ class MergeRequestDiff < ApplicationRecord
keep_around_commits
end
+ def set_as_latest_diff
+ MergeRequest
+ .where('id = ? AND COALESCE(latest_merge_request_diff_id, 0) < ?', self.merge_request_id, self.id)
+ .update_all(latest_merge_request_diff_id: self.id)
+ end
+
def ensure_commit_shas
self.start_commit_sha ||= merge_request.target_branch_sha
self.head_commit_sha ||= merge_request.source_branch_sha
@@ -297,6 +300,13 @@ class MergeRequestDiff < ApplicationRecord
base_commit_sha? && head_commit_sha? && start_commit_sha?
end
+ def diffs_in_batch(batch_page, batch_size, diff_options:)
+ Gitlab::Diff::FileCollection::MergeRequestDiffBatch.new(self,
+ batch_page,
+ batch_size,
+ diff_options: diff_options)
+ end
+
def diffs(diff_options = nil)
if without_files? && comparison = diff_refs&.compare_in(project)
# It should fetch the repository when diffs are cleaned by the system.
@@ -495,11 +505,6 @@ class MergeRequestDiff < ApplicationRecord
merge_request.closed? && merge_request.metrics.latest_closed_at < EXTERNAL_DIFF_CUTOFF.ago
end
- # We can't rely on `merge_request.latest_merge_request_diff_id` because that
- # may have been changed in `save_git_content` without being reflected in
- # the association's instance. This query is always subject to races, but
- # the worst case is that we *don't* make a diff external when we could. The
- # background worker will make it external at a later date.
def old_version?
latest_id = MergeRequest
.where(id: merge_request_id)
@@ -507,7 +512,7 @@ class MergeRequestDiff < ApplicationRecord
.pluck(:latest_merge_request_diff_id)
.first
- self.id != latest_id
+ latest_id && self.id < latest_id
end
def load_diffs(options)
@@ -584,3 +589,5 @@ class MergeRequestDiff < ApplicationRecord
end
end
end
+
+MergeRequestDiff.prepend_if_ee('EE::MergeRequestDiff')
diff --git a/app/models/merge_request_diff_file.rb b/app/models/merge_request_diff_file.rb
index a532c1e6356..14c86ec69da 100644
--- a/app/models/merge_request_diff_file.rb
+++ b/app/models/merge_request_diff_file.rb
@@ -5,6 +5,7 @@ class MergeRequestDiffFile < ApplicationRecord
include DiffFile
belongs_to :merge_request_diff, inverse_of: :merge_request_diff_files
+ alias_attribute :index, :relative_order
def utf8_diff
return '' if diff.blank?
diff --git a/app/models/milestone.rb b/app/models/milestone.rb
index 916c11a8d03..2fa0cfc9b93 100644
--- a/app/models/milestone.rb
+++ b/app/models/milestone.rb
@@ -257,10 +257,9 @@ class Milestone < ApplicationRecord
title.to_slug.normalize.to_s
end
- def parent
+ def resource_parent
group || project
end
- alias_method :resource_parent, :parent
def group_milestone?
group_id.present?
diff --git a/app/models/namespace.rb b/app/models/namespace.rb
index 9a7c3dc03c3..5663ebf8ba1 100644
--- a/app/models/namespace.rb
+++ b/app/models/namespace.rb
@@ -120,6 +120,13 @@ class Namespace < ApplicationRecord
uniquify = Uniquify.new
uniquify.string(path) { |s| Namespace.find_by_path_or_name(s) }
end
+
+ def find_by_pages_host(host)
+ gitlab_host = "." + Settings.pages.host.downcase
+ name = host.downcase.delete_suffix(gitlab_host)
+
+ Namespace.find_by_full_path(name)
+ end
end
def visibility_level_field
@@ -175,7 +182,7 @@ class Namespace < ApplicationRecord
# any ancestor can disable emails for all descendants
def emails_disabled?
strong_memoize(:emails_disabled) do
- Feature.enabled?(:emails_disabled, self, default_enabled: true) && self_and_ancestors.where(emails_disabled: true).exists?
+ self_and_ancestors.where(emails_disabled: true).exists?
end
end
@@ -249,7 +256,7 @@ class Namespace < ApplicationRecord
end
def has_parent?
- parent.present?
+ parent_id.present? || parent.present?
end
def root_ancestor
@@ -305,8 +312,28 @@ class Namespace < ApplicationRecord
aggregation_schedule.present?
end
+ def pages_virtual_domain
+ Pages::VirtualDomain.new(all_projects_with_pages, trim_prefix: full_path)
+ end
+
+ def closest_setting(name)
+ self_and_ancestors(hierarchy_order: :asc)
+ .find { |n| !n.read_attribute(name).nil? }
+ .try(name)
+ end
+
private
+ def all_projects_with_pages
+ if all_projects.pages_metadata_not_migrated.exists?
+ Gitlab::BackgroundMigration::MigratePagesMetadata.new.perform_on_relation(
+ all_projects.pages_metadata_not_migrated
+ )
+ end
+
+ all_projects.with_pages_deployed
+ end
+
def parent_changed?
parent_id_changed?
end
diff --git a/app/models/note.rb b/app/models/note.rb
index b1829e71017..43f349c6fa2 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -24,7 +24,7 @@ class Note < ApplicationRecord
class << self
def values
- constants.map {|const| self.const_get(const)}
+ constants.map {|const| self.const_get(const, false)}
end
def value?(val)
@@ -104,6 +104,8 @@ class Note < ApplicationRecord
end
end
+ validate :does_not_exceed_notes_limit?, on: :create, unless: [:system?, :importing?]
+
# @deprecated attachments are handler by the MarkdownUploader
mount_uploader :attachment, AttachmentUploader
@@ -143,6 +145,9 @@ class Note < ApplicationRecord
end
scope :with_metadata, -> { includes(:system_note_metadata) }
+ scope :for_note_or_capitalized_note, ->(text) { where(note: [text, text.capitalize]) }
+ scope :like_note_or_capitalized_note, ->(text) { where('(note LIKE ? OR note LIKE ?)', text, text.capitalize) }
+
after_initialize :ensure_discussion_id
before_validation :nullify_blank_type, :nullify_blank_line_code
before_validation :set_discussion_id, on: :create
@@ -193,6 +198,12 @@ class Note < ApplicationRecord
groups
end
+ def positions
+ where.not(position: nil)
+ .select(:id, :type, :position) # ActiveRecord needs id and type for typecasting.
+ .map(&:position)
+ end
+
def count_for_collection(ids, type)
user.select('noteable_id', 'COUNT(*) as count')
.group(:noteable_id)
@@ -215,7 +226,7 @@ class Note < ApplicationRecord
if force_cross_reference_regex_check?
matches_cross_reference_regex?
else
- SystemNoteService.cross_reference?(note)
+ ::SystemNotes::IssuablesService.cross_reference?(note)
end
end
# rubocop: enable CodeReuse/ServiceClass
@@ -472,10 +483,9 @@ class Note < ApplicationRecord
Upload.find_by(model: self, path: paths)
end
- def parent
+ def resource_parent
project
end
- alias_method :resource_parent, :parent
private
@@ -519,6 +529,12 @@ class Note < ApplicationRecord
system_note_metadata&.cross_reference_types&.include?(system_note_metadata&.action)
end
+
+ def does_not_exceed_notes_limit?
+ return unless noteable
+
+ errors.add(:base, _('Maximum number of comments exceeded')) if noteable.notes.count >= Noteable::MAX_NOTES_LIMIT
+ end
end
Note.prepend_if_ee('EE::Note')
diff --git a/app/models/notification_setting.rb b/app/models/notification_setting.rb
index 981590b688f..2b3443f24d7 100644
--- a/app/models/notification_setting.rb
+++ b/app/models/notification_setting.rb
@@ -25,6 +25,7 @@ class NotificationSetting < ApplicationRecord
end
EMAIL_EVENTS = [
+ :new_release,
:new_note,
:new_issue,
:reopen_issue,
@@ -46,6 +47,10 @@ class NotificationSetting < ApplicationRecord
EMAIL_EVENTS
end
+ def self.allowed_fields(source = nil)
+ NotificationSetting.email_events(source).dup + %i(level notification_email)
+ end
+
def email_events
self.class.email_events(source)
end
diff --git a/app/models/pages/lookup_path.rb b/app/models/pages/lookup_path.rb
index 1b3183a2a43..51c496c77d3 100644
--- a/app/models/pages/lookup_path.rb
+++ b/app/models/pages/lookup_path.rb
@@ -2,9 +2,10 @@
module Pages
class LookupPath
- def initialize(project, domain: nil)
+ def initialize(project, trim_prefix: nil, domain: nil)
@project = project
@domain = domain
+ @trim_prefix = trim_prefix || project.full_path
end
def project_id
@@ -28,11 +29,15 @@ module Pages
end
def prefix
- '/'
+ if project.pages_group_root?
+ '/'
+ else
+ project.full_path.delete_prefix(trim_prefix) + '/'
+ end
end
private
- attr_reader :project, :domain
+ attr_reader :project, :trim_prefix, :domain
end
end
diff --git a/app/models/pages/virtual_domain.rb b/app/models/pages/virtual_domain.rb
index 3a876dc06a2..7e42b8e6ae2 100644
--- a/app/models/pages/virtual_domain.rb
+++ b/app/models/pages/virtual_domain.rb
@@ -2,8 +2,9 @@
module Pages
class VirtualDomain
- def initialize(projects, domain: nil)
+ def initialize(projects, trim_prefix: nil, domain: nil)
@projects = projects
+ @trim_prefix = trim_prefix
@domain = domain
end
@@ -17,12 +18,12 @@ module Pages
def lookup_paths
projects.map do |project|
- project.pages_lookup_path(domain: domain)
+ project.pages_lookup_path(trim_prefix: trim_prefix, domain: domain)
end.sort_by(&:prefix).reverse
end
private
- attr_reader :projects, :domain
+ attr_reader :projects, :trim_prefix, :domain
end
end
diff --git a/app/models/pages_domain.rb b/app/models/pages_domain.rb
index 22a6bae7cf7..7903a2182dd 100644
--- a/app/models/pages_domain.rb
+++ b/app/models/pages_domain.rb
@@ -186,11 +186,27 @@ class PagesDomain < ApplicationRecord
end
def pages_virtual_domain
+ return unless pages_deployed?
+
Pages::VirtualDomain.new([project], domain: self)
end
private
+ def pages_deployed?
+ # TODO: remove once `pages_metadatum` is migrated
+ # https://gitlab.com/gitlab-org/gitlab/issues/33106
+ unless project.pages_metadatum
+ Gitlab::BackgroundMigration::MigratePagesMetadata
+ .new
+ .perform_on_relation(Project.where(id: project_id))
+
+ project.reset
+ end
+
+ project.pages_metadatum&.deployed?
+ end
+
def set_verification_code
return if self.verification_code.present?
diff --git a/app/models/project.rb b/app/models/project.rb
index 5c3bf4a3b5d..3525f37f8d5 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -68,7 +68,7 @@ class Project < ApplicationRecord
:snippets_access_level, :builds_access_level, :repository_access_level,
to: :project_feature, allow_nil: true
- delegate :base_dir, :disk_path, :ensure_storage_path_exists, to: :storage
+ delegate :base_dir, :disk_path, to: :storage
delegate :scheduled?, :started?, :in_progress?,
:failed?, :finished?,
@@ -104,6 +104,9 @@ class Project < ApplicationRecord
unless: :ci_cd_settings,
if: proc { ProjectCiCdSetting.available? }
+ after_create :create_pages_metadatum,
+ unless: :pages_metadatum
+
after_create :set_timestamps_for_create
after_update :update_forks_visibility_level
@@ -119,8 +122,6 @@ class Project < ApplicationRecord
# Storage specific hooks
after_initialize :use_hashed_storage
after_create :check_repository_absence!
- after_create :ensure_storage_path_exists
- after_save :ensure_storage_path_exists, if: :saved_change_to_namespace_id?
acts_as_ordered_taggable
@@ -192,6 +193,7 @@ class Project < ApplicationRecord
has_one :project_repository, inverse_of: :project
has_one :error_tracking_setting, inverse_of: :project, class_name: 'ErrorTracking::ProjectErrorTrackingSetting'
has_one :metrics_setting, inverse_of: :project, class_name: 'ProjectMetricsSetting'
+ has_one :grafana_integration, inverse_of: :project
# Merge Requests for target project should be removed with it
has_many :merge_requests, foreign_key: 'target_project_id', inverse_of: :target_project
@@ -242,8 +244,8 @@ class Project < ApplicationRecord
has_one :cluster_project, class_name: 'Clusters::Project'
has_many :clusters, through: :cluster_project, class_name: 'Clusters::Cluster'
- has_many :cluster_ingresses, through: :clusters, source: :application_ingress, class_name: 'Clusters::Applications::Ingress'
has_many :kubernetes_namespaces, class_name: 'Clusters::KubernetesNamespace'
+ has_many :management_clusters, class_name: 'Clusters::Cluster', foreign_key: :management_project_id, inverse_of: :management_project
has_many :prometheus_metrics
@@ -273,12 +275,13 @@ class Project < ApplicationRecord
has_many :builds, class_name: 'Ci::Build', inverse_of: :project, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :build_trace_section_names, class_name: 'Ci::BuildTraceSectionName'
has_many :build_trace_chunks, class_name: 'Ci::BuildTraceChunk', through: :builds, source: :trace_chunks
+ has_many :job_artifacts, class_name: 'Ci::JobArtifact'
has_many :runner_projects, class_name: 'Ci::RunnerProject', inverse_of: :project
has_many :runners, through: :runner_projects, source: :runner, class_name: 'Ci::Runner'
has_many :variables, class_name: 'Ci::Variable'
has_many :triggers, class_name: 'Ci::Trigger'
has_many :environments
- has_many :deployments, -> { success }
+ has_many :deployments
has_many :pipeline_schedules, class_name: 'Ci::PipelineSchedule'
has_many :project_deploy_tokens
has_many :deploy_tokens, through: :project_deploy_tokens
@@ -294,6 +297,11 @@ class Project < ApplicationRecord
has_many :external_pull_requests, inverse_of: :project
+ has_many :sourced_pipelines, class_name: 'Ci::Sources::Pipeline', foreign_key: :source_project_id
+ has_many :source_pipelines, class_name: 'Ci::Sources::Pipeline', foreign_key: :project_id
+
+ has_one :pages_metadatum, class_name: 'ProjectPagesMetadatum', inverse_of: :project
+
accepts_nested_attributes_for :variables, allow_destroy: true
accepts_nested_attributes_for :project_feature, update_only: true
accepts_nested_attributes_for :import_data
@@ -306,6 +314,7 @@ class Project < ApplicationRecord
accepts_nested_attributes_for :error_tracking_setting, update_only: true
accepts_nested_attributes_for :metrics_setting, update_only: true, allow_destroy: true
+ accepts_nested_attributes_for :grafana_integration, update_only: true, allow_destroy: true
delegate :name, to: :owner, allow_nil: true, prefix: true
delegate :members, to: :team, prefix: true
@@ -424,6 +433,15 @@ class Project < ApplicationRecord
.where(project_ci_cd_settings: { group_runners_enabled: true })
end
+ scope :with_pages_deployed, -> do
+ joins(:pages_metadatum).merge(ProjectPagesMetadatum.deployed)
+ end
+
+ scope :pages_metadata_not_migrated, -> do
+ left_outer_joins(:pages_metadatum)
+ .where(project_pages_metadata: { project_id: nil })
+ end
+
enum auto_cancel_pending_pipelines: { disabled: 0, enabled: 1 }
chronic_duration_attr :build_timeout_human_readable, :build_timeout,
@@ -650,7 +668,7 @@ class Project < ApplicationRecord
def emails_disabled?
strong_memoize(:emails_disabled) do
# disabling in the namespace overrides the project setting
- Feature.enabled?(:emails_disabled, self, default_enabled: true) && (super || namespace.emails_disabled?)
+ super || namespace.emails_disabled?
end
end
@@ -1018,8 +1036,8 @@ class Project < ApplicationRecord
end
end
- def web_url
- Gitlab::Routing.url_helpers.project_url(self)
+ def web_url(only_path: nil)
+ Gitlab::Routing.url_helpers.project_url(self, only_path: only_path)
end
def readme_url
@@ -1298,7 +1316,18 @@ class Project < ApplicationRecord
end
def http_url_to_repo
- "#{web_url}.git"
+ custom_root = Gitlab::CurrentSettings.custom_http_clone_url_root
+
+ project_url = if custom_root.present?
+ Gitlab::Utils.append_path(
+ custom_root,
+ web_url(only_path: true)
+ )
+ else
+ web_url
+ end
+
+ "#{project_url}.git"
end
# Is overridden in EE
@@ -1647,6 +1676,10 @@ class Project < ApplicationRecord
"#{url}/#{url_path}"
end
+ def pages_group_root?
+ pages_group_url == pages_url
+ end
+
def pages_subdomain
full_path.partition('/').first
end
@@ -1685,6 +1718,7 @@ class Project < ApplicationRecord
# Projects with a missing namespace cannot have their pages removed
return unless namespace
+ mark_pages_as_not_deployed unless destroyed?
::Projects::UpdatePagesConfigurationService.new(self).execute
# 1. We rename pages to temporary directory
@@ -1698,6 +1732,14 @@ class Project < ApplicationRecord
end
# rubocop: enable CodeReuse/ServiceClass
+ def mark_pages_as_deployed
+ ensure_pages_metadatum.update!(deployed: true)
+ end
+
+ def mark_pages_as_not_deployed
+ ensure_pages_metadatum.update!(deployed: false)
+ end
+
# rubocop:disable Gitlab/RailsLogger
def write_repository_config(gl_full_path: full_path)
# We'd need to keep track of project full path otherwise directory tree
@@ -1821,6 +1863,7 @@ class Project < ApplicationRecord
Gitlab::Ci::Variables::Collection.new
.append(key: 'CI_PROJECT_ID', value: id.to_s)
.append(key: 'CI_PROJECT_NAME', value: path)
+ .append(key: 'CI_PROJECT_TITLE', value: title)
.append(key: 'CI_PROJECT_PATH', value: full_path)
.append(key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug)
.append(key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path)
@@ -2217,12 +2260,37 @@ class Project < ApplicationRecord
members.maintainers.order_recent_sign_in.limit(ACCESS_REQUEST_APPROVERS_TO_BE_NOTIFIED_LIMIT)
end
- def pages_lookup_path(domain: nil)
- Pages::LookupPath.new(self, domain: domain)
+ def pages_lookup_path(trim_prefix: nil, domain: nil)
+ Pages::LookupPath.new(self, trim_prefix: trim_prefix, domain: domain)
+ end
+
+ def closest_setting(name)
+ setting = read_attribute(name)
+ setting = closest_namespace_setting(name) if setting.nil?
+ setting = app_settings_for(name) if setting.nil?
+ setting
+ end
+
+ def drop_visibility_level!
+ if group && group.visibility_level < visibility_level
+ self.visibility_level = group.visibility_level
+ end
+
+ if Gitlab::CurrentSettings.restricted_visibility_levels.include?(visibility_level)
+ self.visibility_level = Gitlab::VisibilityLevel::PRIVATE
+ end
end
private
+ def closest_namespace_setting(name)
+ namespace.closest_setting(name)
+ end
+
+ def app_settings_for(name)
+ Gitlab::CurrentSettings.send(name) # rubocop:disable GitlabSecurity/PublicSend
+ end
+
def merge_requests_allowing_collaboration(source_branch = nil)
relation = source_of_merge_requests.opened.where(allow_collaboration: true)
relation = relation.where(source_branch: source_branch) if source_branch
@@ -2268,7 +2336,7 @@ class Project < ApplicationRecord
end
def repository_with_same_path_already_exists?
- gitlab_shell.exists?(repository_storage, "#{disk_path}.git")
+ gitlab_shell.repository_exists?(repository_storage, "#{disk_path}.git")
end
def set_timestamps_for_create
@@ -2346,6 +2414,13 @@ class Project < ApplicationRecord
def services_templates
@services_templates ||= Service.where(template: true)
end
+
+ def ensure_pages_metadatum
+ pages_metadatum || create_pages_metadatum!
+ rescue ActiveRecord::RecordNotUnique
+ reset
+ retry
+ end
end
Project.prepend_if_ee('EE::Project')
diff --git a/app/models/project_pages_metadatum.rb b/app/models/project_pages_metadatum.rb
new file mode 100644
index 00000000000..1fda388b1ae
--- /dev/null
+++ b/app/models/project_pages_metadatum.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class ProjectPagesMetadatum < ApplicationRecord
+ self.primary_key = :project_id
+
+ belongs_to :project, inverse_of: :pages_metadatum
+
+ scope :deployed, -> { where(deployed: true) }
+end
diff --git a/app/models/project_services/data_fields.rb b/app/models/project_services/data_fields.rb
index 46136556ade..cffb493d569 100644
--- a/app/models/project_services/data_fields.rb
+++ b/app/models/project_services/data_fields.rb
@@ -5,7 +5,7 @@ module DataFields
class_methods do
# Provide convenient accessor methods for data fields.
- # TODO: Simplify as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # TODO: Simplify as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
def data_field(*args)
args.each do |arg|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
diff --git a/app/models/project_services/hipchat_service.rb b/app/models/project_services/hipchat_service.rb
index 3320405e9e9..019bd54f48c 100644
--- a/app/models/project_services/hipchat_service.rb
+++ b/app/models/project_services/hipchat_service.rb
@@ -73,7 +73,7 @@ class HipchatService < Service
private
def gate
- options = { api_version: api_version.present? ? api_version : 'v2' }
+ options = { api_version: api_version.presence || 'v2' }
options[:server_url] = server unless server.blank?
@gate ||= HipChat::Client.new(token, options)
end
@@ -161,7 +161,7 @@ class HipchatService < Service
obj_attr = data[:object_attributes]
obj_attr = HashWithIndifferentAccess.new(obj_attr)
title = render_line(obj_attr[:title])
- state = obj_attr[:state]
+ state = Issue.available_states.key(obj_attr[:state_id])
issue_iid = obj_attr[:iid]
issue_url = obj_attr[:url]
description = obj_attr[:description]
diff --git a/app/models/project_services/irker_service.rb b/app/models/project_services/irker_service.rb
index fb76bc89c98..4a6c8339625 100644
--- a/app/models/project_services/irker_service.rb
+++ b/app/models/project_services/irker_service.rb
@@ -36,8 +36,8 @@ class IrkerService < Service
def settings
{
- server_host: server_host.present? ? server_host : 'localhost',
- server_port: server_port.present? ? server_port : 6659
+ server_host: server_host.presence || 'localhost',
+ server_port: server_port.presence || 6659
}
end
diff --git a/app/models/project_services/issue_tracker_service.rb b/app/models/project_services/issue_tracker_service.rb
index 3ecd5390d79..9e1393196ff 100644
--- a/app/models/project_services/issue_tracker_service.rb
+++ b/app/models/project_services/issue_tracker_service.rb
@@ -4,7 +4,7 @@ class IssueTrackerService < Service
validate :one_issue_tracker, if: :activated?, on: :manual_change
# TODO: we can probably just delegate as part of
- # https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # https://gitlab.com/gitlab-org/gitlab/issues/29404
data_field :project_url, :issues_url, :new_issue_url
default_value_for :category, 'issue_tracker'
@@ -25,7 +25,7 @@ class IssueTrackerService < Service
end
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
def title
if title_attribute = read_attribute(:title)
title_attribute
@@ -36,7 +36,7 @@ class IssueTrackerService < Service
end
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
def description
if description_attribute = read_attribute(:description)
description_attribute
@@ -49,7 +49,7 @@ class IssueTrackerService < Service
def handle_properties
# this has been moved from initialize_properties and should be improved
- # as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
return unless properties
@legacy_properties_data = properties.dup
@@ -62,6 +62,7 @@ class IssueTrackerService < Service
end
data_values.reject! { |key| data_fields.changed.include?(key) }
+ data_values.slice!(*data_fields.attributes.keys)
data_fields.assign_attributes(data_values) if data_values.present?
self.properties = {}
@@ -71,6 +72,10 @@ class IssueTrackerService < Service
@legacy_properties_data ||= {}
end
+ def supports_data_fields?
+ true
+ end
+
def data_fields
issue_tracker_data || self.build_issue_tracker_data
end
diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb
index a76970bfa2a..ba61810e26f 100644
--- a/app/models/project_services/jira_service.rb
+++ b/app/models/project_services/jira_service.rb
@@ -19,7 +19,7 @@ class JiraService < IssueTrackerService
# for more information check: https://gitlab.com/gitlab-org/gitlab-foss/issues/49936.
# TODO: we can probably just delegate as part of
- # https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # https://gitlab.com/gitlab-org/gitlab/issues/29404
data_field :username, :password, :url, :api_url, :jira_issue_transition_id
before_update :reset_password
@@ -64,7 +64,7 @@ class JiraService < IssueTrackerService
url = URI.parse(client_url)
{
- username: username,
+ username: username&.strip,
password: password,
site: URI.join(url, '/').to_s, # Intended to find the root
context_path: url.path,
@@ -122,9 +122,13 @@ class JiraService < IssueTrackerService
end
alias_method :original_url, :url
-
def url
- original_url&.chomp('/')
+ original_url&.delete_suffix('/')
+ end
+
+ alias_method :original_api_url, :api_url
+ def api_url
+ original_api_url&.delete_suffix('/')
end
def execute(push)
@@ -137,10 +141,9 @@ class JiraService < IssueTrackerService
return if issue.nil? || has_resolution?(issue) || !jira_issue_transition_id.present?
- commit_id = if entity.is_a?(Commit)
- entity.id
- elsif entity.is_a?(MergeRequest)
- entity.diff_head_sha
+ commit_id = case entity
+ when Commit then entity.id
+ when MergeRequest then entity.diff_head_sha
end
commit_url = build_entity_url(:commit, commit_id)
@@ -298,7 +301,7 @@ class JiraService < IssueTrackerService
title: title,
status: status,
icon: {
- title: 'GitLab', url16x16: asset_url(Gitlab::Favicon.main, host: gitlab_config.url)
+ title: 'GitLab', url16x16: asset_url(Gitlab::Favicon.main, host: gitlab_config.base_url)
}
}
}
@@ -331,7 +334,6 @@ class JiraService < IssueTrackerService
# Handle errors when doing Jira API calls
def jira_request
yield
-
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, URI::InvalidURIError, JIRA::HTTPError, OpenSSL::SSL::SSLError => e
@error = e.message
log_error("Error sending message", client_url: client_url, error: @error)
@@ -339,7 +341,7 @@ class JiraService < IssueTrackerService
end
def client_url
- api_url.present? ? api_url : url
+ api_url.presence || url
end
def reset_password?
diff --git a/app/models/project_services/packagist_service.rb b/app/models/project_services/packagist_service.rb
index 003884bb7ac..35dbedd1341 100644
--- a/app/models/project_services/packagist_service.rb
+++ b/app/models/project_services/packagist_service.rb
@@ -59,7 +59,7 @@ class PackagistService < Service
end
def hook_url
- base_url = server.present? ? server : 'https://packagist.org'
+ base_url = server.presence || 'https://packagist.org'
"#{base_url}/api/update-package?username=#{username}&apiToken=#{token}"
end
end
diff --git a/app/models/project_services/slash_commands_service.rb b/app/models/project_services/slash_commands_service.rb
index 5bfd06476f0..d436176a52c 100644
--- a/app/models/project_services/slash_commands_service.rb
+++ b/app/models/project_services/slash_commands_service.rb
@@ -33,9 +33,12 @@ class SlashCommandsService < Service
return unless valid_token?(params[:token])
chat_user = find_chat_user(params)
+ user = chat_user&.user
+
+ if user
+ unless user.can?(:use_slash_commands)
+ return Gitlab::SlashCommands::Presenters::Access.new.deactivated if user.deactivated?
- if chat_user&.user
- unless chat_user.user.can?(:use_slash_commands)
return Gitlab::SlashCommands::Presenters::Access.new.access_denied(project)
end
diff --git a/app/models/project_wiki.rb b/app/models/project_wiki.rb
index 218be974218..bb222ac7629 100644
--- a/app/models/project_wiki.rb
+++ b/app/models/project_wiki.rb
@@ -54,7 +54,7 @@ class ProjectWiki
end
def http_url_to_repo
- "#{Gitlab.config.gitlab.url}/#{full_path}.git"
+ @project.http_url_to_repo.sub(%r{git\z}, 'wiki.git')
end
def wiki_base_path
diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb
index 8769d3eb916..1857a59e01c 100644
--- a/app/models/protected_branch.rb
+++ b/app/models/protected_branch.rb
@@ -40,6 +40,11 @@ class ProtectedBranch < ApplicationRecord
def self.protected_refs(project)
project.protected_branches.select(:name)
end
+
+ def self.branch_requires_code_owner_approval?(project, branch_name)
+ # NOOP
+ #
+ end
end
ProtectedBranch.prepend_if_ee('EE::ProtectedBranch')
diff --git a/app/models/push_event.rb b/app/models/push_event.rb
index 4698df39730..5cab686f20b 100644
--- a/app/models/push_event.rb
+++ b/app/models/push_event.rb
@@ -26,6 +26,8 @@ class PushEvent < Event
delegate :commit_count, to: :push_event_payload
alias_method :commits_count, :commit_count
+ delegate :ref_count, to: :push_event_payload
+
# Returns events of pushes that either pushed to an existing ref or created a
# new one.
def self.created_or_pushed
@@ -52,7 +54,7 @@ class PushEvent < Event
.select(1)
.where('merge_requests.source_project_id = events.project_id')
.where('merge_requests.source_branch = push_event_payloads.ref')
- .where(state: :opened)
+ .with_state(:opened)
# For reasons unknown the use of #eager_load will result in the
# "push_event_payload" association not being set. Because of this we're
diff --git a/app/models/release.rb b/app/models/release.rb
index cd63b4d5fef..5a7bfe2d495 100644
--- a/app/models/release.rb
+++ b/app/models/release.rb
@@ -14,6 +14,7 @@ class Release < ApplicationRecord
has_many :milestone_releases
has_many :milestones, through: :milestone_releases
+ has_one :evidence
default_value_for :released_at, allows_nil: false do
Time.zone.now
@@ -22,13 +23,16 @@ class Release < ApplicationRecord
accepts_nested_attributes_for :links, allow_destroy: true
validates :description, :project, :tag, presence: true
- validates :name, presence: true, on: :create
validates_associated :milestone_releases, message: -> (_, obj) { obj[:value].map(&:errors).map(&:full_messages).join(",") }
scope :sorted, -> { order(released_at: :desc) }
+ scope :with_project_and_namespace, -> { includes(project: :namespace) }
delegate :repository, to: :project
+ after_commit :create_evidence!, on: :create
+ after_commit :notify_new_release, on: :create
+
def commit
strong_memoize(:commit) do
repository.commit(actual_sha)
@@ -67,4 +71,14 @@ class Release < ApplicationRecord
repository.find_tag(tag)
end
end
+
+ def create_evidence!
+ CreateEvidenceWorker.perform_async(self.id)
+ end
+
+ def notify_new_release
+ NewReleaseWorker.perform_async(id)
+ end
end
+
+Release.prepend_if_ee('EE::Release')
diff --git a/app/models/repository.rb b/app/models/repository.rb
index f084a314392..b9f57169ea5 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -6,6 +6,7 @@ class Repository
REF_MERGE_REQUEST = 'merge-requests'
REF_KEEP_AROUND = 'keep-around'
REF_ENVIRONMENTS = 'environments'
+ REF_PIPELINES = 'pipelines'
ARCHIVE_CACHE_TIME = 60 # Cache archives referred to by a (mutable) ref for 1 minute
ARCHIVE_CACHE_TIME_IMMUTABLE = 3600 # Cache archives referred to by an immutable reference for 1 hour
@@ -16,7 +17,7 @@ class Repository
replace
#{REF_ENVIRONMENTS}
#{REF_KEEP_AROUND}
- #{REF_ENVIRONMENTS}
+ #{REF_PIPELINES}
].freeze
include Gitlab::RepositoryCacheAdapter
@@ -133,18 +134,28 @@ class Repository
end
end
- def commits(ref = nil, path: nil, limit: nil, offset: nil, skip_merges: false, after: nil, before: nil, all: nil)
+ # the opts are:
+ # - :path
+ # - :limit
+ # - :offset
+ # - :skip_merges
+ # - :after
+ # - :before
+ # - :all
+ # - :first_parent
+ def commits(ref = nil, opts = {})
options = {
repo: raw_repository,
ref: ref,
- path: path,
- limit: limit,
- offset: offset,
- after: after,
- before: before,
- follow: Array(path).length == 1,
- skip_merges: skip_merges,
- all: all
+ path: opts[:path],
+ follow: Array(opts[:path]).length == 1,
+ limit: opts[:limit],
+ offset: opts[:offset],
+ skip_merges: !!opts[:skip_merges],
+ after: opts[:after],
+ before: opts[:before],
+ all: !!opts[:all],
+ first_parent: !!opts[:first_parent]
}
commits = Gitlab::Git::Commit.where(options)
@@ -239,13 +250,13 @@ class Repository
def branch_exists?(branch_name)
return false unless raw_repository
- branch_names.include?(branch_name)
+ branch_names_include?(branch_name)
end
def tag_exists?(tag_name)
return false unless raw_repository
- tag_names.include?(tag_name)
+ tag_names_include?(tag_name)
end
def ref_exists?(ref)
@@ -549,15 +560,15 @@ class Repository
end
delegate :branch_names, to: :raw_repository
- cache_method :branch_names, fallback: []
+ cache_method_as_redis_set :branch_names, fallback: []
delegate :tag_names, to: :raw_repository
- cache_method :tag_names, fallback: []
+ cache_method_as_redis_set :tag_names, fallback: []
delegate :branch_count, :tag_count, :has_visible_content?, to: :raw_repository
cache_method :branch_count, fallback: 0
cache_method :tag_count, fallback: 0
- cache_method :has_visible_content?, fallback: false
+ cache_method_asymmetrically :has_visible_content?
def avatar
# n+1: https://gitlab.com/gitlab-org/gitlab-foss/issues/38327
@@ -1088,6 +1099,8 @@ class Repository
raw.create_repository
after_create
+
+ true
end
def blobs_metadata(paths, ref = 'HEAD')
diff --git a/app/models/repository_language.rb b/app/models/repository_language.rb
index e6867f905e2..e468d716239 100644
--- a/app/models/repository_language.rb
+++ b/app/models/repository_language.rb
@@ -7,7 +7,7 @@ class RepositoryLanguage < ApplicationRecord
default_scope { includes(:programming_language) }
validates :project, presence: true
- validates :share, inclusion: { in: 0..100, message: "The share of a lanuage is between 0 and 100" }
+ validates :share, inclusion: { in: 0..100, message: "The share of a language is between 0 and 100" }
validates :programming_language, uniqueness: { scope: :project_id }
delegate :name, :color, to: :programming_language
diff --git a/app/models/service.rb b/app/models/service.rb
index 43ed0c7dfaa..305cf7b78a2 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -291,6 +291,12 @@ class Service < ApplicationRecord
def self.build_from_template(project_id, template)
service = template.dup
+
+ if template.supports_data_fields?
+ data_fields = template.data_fields.dup
+ data_fields.service = service
+ end
+
service.template = false
service.project_id = project_id
service.active = false if service.active? && !service.valid?
@@ -309,6 +315,11 @@ class Service < ApplicationRecord
find_by(template: true)
end
+ # override if needed
+ def supports_data_fields?
+ false
+ end
+
private
def cache_project_has_external_issue_tracker
diff --git a/app/models/snippet.rb b/app/models/snippet.rb
index 1e84b9fa12e..4010a3e2167 100644
--- a/app/models/snippet.rb
+++ b/app/models/snippet.rb
@@ -14,6 +14,7 @@ class Snippet < ApplicationRecord
include Editable
include Gitlab::SQL::Pattern
include FromUnion
+ extend ::Gitlab::Utils::Override
cache_markdown_field :title, pipeline: :single_line
cache_markdown_field :description
@@ -32,8 +33,6 @@ class Snippet < ApplicationRecord
default_content_html_invalidator || file_name_changed?
end
- default_value_for(:visibility_level) { Gitlab::CurrentSettings.default_snippet_visibility }
-
belongs_to :author, class_name: 'User'
belongs_to :project
@@ -72,7 +71,7 @@ class Snippet < ApplicationRecord
end
end
- def self.only_global_snippets
+ def self.only_personal_snippets
where(project_id: nil)
end
@@ -138,6 +137,24 @@ class Snippet < ApplicationRecord
@link_reference_pattern ||= super("snippets", /(?<snippet>\d+)/)
end
+ def initialize(attributes = {})
+ # We can't use default_value_for because the database has a default
+ # value of 0 for visibility_level. If someone attempts to create a
+ # private snippet, default_value_for will assume that the
+ # visibility_level hasn't changed and will use the application
+ # setting default, which could be internal or public.
+ #
+ # To fix the problem, we assign the actual snippet default if no
+ # explicit visibility has been initialized.
+ attributes ||= {}
+
+ unless visibility_attribute_present?(attributes)
+ attributes[:visibility_level] = Gitlab::CurrentSettings.default_snippet_visibility
+ end
+
+ super
+ end
+
def to_reference(from = nil, full: false)
reference = "#{self.class.reference_prefix}#{id}"
@@ -191,6 +208,12 @@ class Snippet < ApplicationRecord
(public? && (title_changed? || content_changed?))
end
+ # snippers are the biggest sources of spam
+ override :allow_possible_spam?
+ def allow_possible_spam?
+ false
+ end
+
def spammable_entity_type
'snippet'
end
diff --git a/app/models/storage/hashed_project.rb b/app/models/storage/hashed_project.rb
index f5d0d6fab3b..9a38b06b2f9 100644
--- a/app/models/storage/hashed_project.rb
+++ b/app/models/storage/hashed_project.rb
@@ -27,10 +27,6 @@ module Storage
"#{base_dir}/#{disk_hash}" if disk_hash
end
- def ensure_storage_path_exists
- gitlab_shell.add_namespace(repository_storage, base_dir)
- end
-
def rename_repo(old_full_path: nil, new_full_path: nil)
true
end
diff --git a/app/models/storage/legacy_project.rb b/app/models/storage/legacy_project.rb
index 928c773c307..345172cca76 100644
--- a/app/models/storage/legacy_project.rb
+++ b/app/models/storage/legacy_project.rb
@@ -23,12 +23,6 @@ module Storage
project.full_path
end
- def ensure_storage_path_exists
- return unless namespace
-
- gitlab_shell.add_namespace(repository_storage, base_dir)
- end
-
def rename_repo(old_full_path: nil, new_full_path: nil)
old_full_path ||= project.full_path_before_last_save
new_full_path ||= project.build_full_path
diff --git a/app/models/suggestion.rb b/app/models/suggestion.rb
index 22e2f11230d..96ffec90c00 100644
--- a/app/models/suggestion.rb
+++ b/app/models/suggestion.rb
@@ -41,7 +41,6 @@ class Suggestion < ApplicationRecord
!applied? &&
noteable.opened? &&
!outdated?(cached: cached) &&
- note.supports_suggestion? &&
different_content? &&
note.active?
end
diff --git a/app/models/system_note_metadata.rb b/app/models/system_note_metadata.rb
index 8ec90ca25d3..11cbeb60bba 100644
--- a/app/models/system_note_metadata.rb
+++ b/app/models/system_note_metadata.rb
@@ -23,6 +23,7 @@ class SystemNoteMetadata < ApplicationRecord
validates :action, inclusion: { in: :icon_types }, allow_nil: true
belongs_to :note
+ belongs_to :description_version
def icon_types
ICON_TYPES
diff --git a/app/models/todo.rb b/app/models/todo.rb
index 6b71845856a..1927b54510e 100644
--- a/app/models/todo.rb
+++ b/app/models/todo.rb
@@ -75,13 +75,13 @@ class Todo < ApplicationRecord
after_save :keep_around_commit, if: :commit_id
class << self
- # Returns all todos for the given group and its descendants.
+ # Returns all todos for the given group ids and their descendants.
#
- # group - A `Group` to retrieve todos for.
+ # group_ids - Group Ids to retrieve todos for.
#
# Returns an `ActiveRecord::Relation`.
- def for_group_and_descendants(group)
- groups = group.self_and_descendants
+ def for_group_ids_and_descendants(group_ids)
+ groups = Group.groups_including_descendants_by(group_ids)
from_union([
for_project(Project.for_group(groups)),
@@ -144,10 +144,9 @@ class Todo < ApplicationRecord
end
end
- def parent
+ def resource_parent
project
end
- alias_method :resource_parent, :parent
def unmergeable?
action == UNMERGEABLE
diff --git a/app/models/upload.rb b/app/models/upload.rb
index 7560002ada8..8c409641452 100644
--- a/app/models/upload.rb
+++ b/app/models/upload.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
class Upload < ApplicationRecord
+ include Checksummable
# Upper limit for foreground checksum processing
CHECKSUM_THRESHOLD = 100.megabytes
@@ -15,16 +16,12 @@ class Upload < ApplicationRecord
scope :with_files_stored_remotely, -> { where(store: ObjectStorage::Store::REMOTE) }
before_save :calculate_checksum!, if: :foreground_checksummable?
- after_commit :schedule_checksum, if: :checksummable?
+ after_commit :schedule_checksum, if: :needs_checksum?
# as the FileUploader is not mounted, the default CarrierWave ActiveRecord
# hooks are not executed and the file will not be deleted
after_destroy :delete_file!, if: -> { uploader_class <= FileUploader }
- def self.hexdigest(path)
- Digest::SHA256.file(path).hexdigest
- end
-
class << self
##
# FastDestroyAll concerns
@@ -53,20 +50,41 @@ class Upload < ApplicationRecord
def calculate_checksum!
self.checksum = nil
- return unless checksummable?
+ return unless needs_checksum?
- self.checksum = Digest::SHA256.file(absolute_path).hexdigest
+ self.checksum = self.class.hexdigest(absolute_path)
end
+ # Initialize the associated Uploader class with current model
+ #
+ # @param [String] mounted_as
+ # @return [GitlabUploader] one of the subclasses, defined at the model's uploader attribute
def build_uploader(mounted_as = nil)
uploader_class.new(model, mounted_as || mount_point).tap do |uploader|
uploader.upload = self
+ end
+ end
+
+ # Initialize the associated Uploader class with current model and
+ # retrieve existing file from the store to a local cache
+ #
+ # @param [String] mounted_as
+ # @return [GitlabUploader] one of the subclasses, defined at the model's uploader attribute
+ def retrieve_uploader(mounted_as = nil)
+ build_uploader(mounted_as).tap do |uploader|
uploader.retrieve_from_store!(identifier)
end
end
+ # This checks for existence of the upload on storage
+ #
+ # @return [Boolean] whether upload exists on storage
def exist?
- exist = File.exist?(absolute_path)
+ exist = if local?
+ File.exist?(absolute_path)
+ else
+ retrieve_uploader.exists?
+ end
# Help sysadmins find missing upload files
if persisted? && !exist
@@ -91,18 +109,24 @@ class Upload < ApplicationRecord
store == ObjectStorage::Store::LOCAL
end
+ # Returns whether generating checksum is needed
+ #
+ # This takes into account whether file exists, if any checksum exists
+ # or if the storage has checksum generation code implemented
+ #
+ # @return [Boolean] whether generating a checksum is needed
+ def needs_checksum?
+ checksum.nil? && local? && exist?
+ end
+
private
def delete_file!
- build_uploader.remove!
- end
-
- def checksummable?
- checksum.nil? && local? && exist?
+ retrieve_uploader.remove!
end
def foreground_checksummable?
- checksummable? && size <= CHECKSUM_THRESHOLD
+ needs_checksum? && size <= CHECKSUM_THRESHOLD
end
def schedule_checksum
@@ -114,7 +138,7 @@ class Upload < ApplicationRecord
end
def uploader_class
- Object.const_get(uploader)
+ Object.const_get(uploader, false)
end
def identifier
diff --git a/app/models/user.rb b/app/models/user.rb
index a69db121a0b..321a4080484 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -59,6 +59,8 @@ class User < ApplicationRecord
# Removed in GitLab 12.3. Keep until after 2019-09-22.
self.ignored_columns += %i[support_bot]
+ MINIMUM_INACTIVE_DAYS = 14
+
# Override Devise::Models::Trackable#update_tracked_fields!
# to limit database writes to at most once every hour
# rubocop: disable CodeReuse/ServiceClass
@@ -97,6 +99,7 @@ class User < ApplicationRecord
has_many :u2f_registrations, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :chat_names, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_one :user_synced_attributes_metadata, autosave: true
+ has_one :aws_role, class_name: 'Aws::Role'
# Groups
has_many :members
@@ -228,6 +231,10 @@ class User < ApplicationRecord
# Note: When adding an option, it MUST go on the end of the array.
enum project_view: [:readme, :activity, :files]
+ # User's role
+ # Note: When adding an option, it MUST go on the end of the array.
+ enum role: [:software_developer, :development_team_lead, :devops_engineer, :systems_administrator, :security_analyst, :data_analyst, :product_manager, :product_designer, :other], _suffix: true
+
delegate :path, to: :namespace, allow_nil: true, prefix: true
delegate :notes_filter_for, to: :user_preference
delegate :set_notes_filter, to: :user_preference
@@ -242,18 +249,25 @@ class User < ApplicationRecord
state_machine :state, initial: :active do
event :block do
transition active: :blocked
+ transition deactivated: :blocked
transition ldap_blocked: :blocked
end
event :ldap_block do
transition active: :ldap_blocked
+ transition deactivated: :ldap_blocked
end
event :activate do
+ transition deactivated: :active
transition blocked: :active
transition ldap_blocked: :active
end
+ event :deactivate do
+ transition active: :deactivated
+ end
+
state :blocked, :ldap_blocked do
def blocked?
true
@@ -284,6 +298,7 @@ class User < ApplicationRecord
scope :blocked, -> { with_states(:blocked, :ldap_blocked) }
scope :external, -> { where(external: true) }
scope :active, -> { with_state(:active).non_internal }
+ scope :deactivated, -> { with_state(:deactivated).non_internal }
scope :without_projects, -> { joins('LEFT JOIN project_authorizations ON users.id = project_authorizations.user_id').where(project_authorizations: { user_id: nil }) }
scope :order_recent_sign_in, -> { reorder(Gitlab::Database.nulls_last_order('current_sign_in_at', 'DESC')) }
scope :order_oldest_sign_in, -> { reorder(Gitlab::Database.nulls_last_order('current_sign_in_at', 'ASC')) }
@@ -431,6 +446,8 @@ class User < ApplicationRecord
without_projects
when 'external'
external
+ when 'deactivated'
+ deactivated
else
active
end
@@ -444,6 +461,7 @@ class User < ApplicationRecord
#
# Returns an ActiveRecord::Relation.
def search(query)
+ query = query&.delete_prefix('@')
return none if query.blank?
query = query.downcase
@@ -520,7 +538,7 @@ class User < ApplicationRecord
# Returns a user for the given SSH key.
def find_by_ssh_key_id(key_id)
- Key.find_by(id: key_id)&.user
+ find_by('EXISTS (?)', Key.select(1).where('keys.user_id = users.id').where(id: key_id))
end
def find_by_full_path(path, follow_redirects: false)
@@ -1303,14 +1321,27 @@ class User < ApplicationRecord
notification_group&.notification_email_for(self) || notification_email
end
- def notification_settings_for(source)
+ def notification_settings_for(source, inherit: false)
if notification_settings.loaded?
notification_settings.find do |notification|
notification.source_type == source.class.base_class.name &&
notification.source_id == source.id
end
else
- notification_settings.find_or_initialize_by(source: source)
+ notification_settings.find_or_initialize_by(source: source) do |ns|
+ next unless source.is_a?(Group) && inherit
+
+ # If we're here it means we're trying to create a NotificationSetting for a group that doesn't have one.
+ # Find the closest parent with a notification_setting that's not Global level, or that has an email set.
+ ancestor_ns = source
+ .notification_settings(hierarchy_order: :asc)
+ .where(user: self)
+ .find_by('level != ? OR notification_email IS NOT NULL', NotificationSetting.levels[:global])
+ # Use it to seed the settings
+ ns.assign_attributes(ancestor_ns&.slice(*NotificationSetting.allowed_fields))
+ ns.source = source
+ ns.user = self
+ end
end
end
@@ -1529,6 +1560,35 @@ class User < ApplicationRecord
todos.find_by(target: target, state: :pending)
end
+ def password_expired?
+ !!(password_expires_at && password_expires_at < Time.now)
+ end
+
+ def can_be_deactivated?
+ active? && no_recent_activity?
+ end
+
+ def last_active_at
+ last_activity = last_activity_on&.to_time&.in_time_zone
+ last_sign_in = current_sign_in_at
+
+ [last_activity, last_sign_in].compact.max
+ end
+
+ # Below is used for the signup_flow experiment. Should be removed
+ # when experiment finishes.
+ # See https://gitlab.com/gitlab-org/growth/engineering/issues/64
+ REQUIRES_ROLE_VALUE = 99
+
+ def role_required?
+ role_before_type_cast == REQUIRES_ROLE_VALUE
+ end
+
+ def set_role_required!
+ update_column(:role, REQUIRES_ROLE_VALUE)
+ end
+ # End of signup_flow experiment methods
+
# @deprecated
alias_method :owned_or_masters_groups, :owned_or_maintainers_groups
@@ -1678,6 +1738,10 @@ class User < ApplicationRecord
::Group.where(id: developer_groups_hierarchy.select(:id),
project_creation_level: project_creation_levels)
end
+
+ def no_recent_activity?
+ last_active_at.to_i <= MINIMUM_INACTIVE_DAYS.days.ago.to_i
+ end
end
User.prepend_if_ee('EE::User')
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb
index cd4c7895587..1fa29e5b933 100644
--- a/app/models/wiki_page.rb
+++ b/app/models/wiki_page.rb
@@ -77,11 +77,7 @@ class WikiPage
# The escaped URL path of this page.
def slug
- if @attributes[:slug].present?
- @attributes[:slug]
- else
- wiki.wiki.preview_slug(title, format)
- end
+ @attributes[:slug].presence || wiki.wiki.preview_slug(title, format)
end
alias_method :to_param, :slug
diff --git a/app/policies/base_policy.rb b/app/policies/base_policy.rb
index 78379516062..18c23cbd13a 100644
--- a/app/policies/base_policy.rb
+++ b/app/policies/base_policy.rb
@@ -5,12 +5,22 @@ require_dependency 'declarative_policy'
class BasePolicy < DeclarativePolicy::Base
desc "User is an instance admin"
with_options scope: :user, score: 0
- condition(:admin) { @user&.admin? }
+ condition(:admin) do
+ if Feature.enabled?(:user_mode_in_session)
+ Gitlab::Auth::CurrentUserMode.new(@user).admin_mode?
+ else
+ @user&.admin?
+ end
+ end
desc "User is blocked"
with_options scope: :user, score: 0
condition(:blocked) { @user&.blocked? }
+ desc "User is deactivated"
+ with_options scope: :user, score: 0
+ condition(:deactivated) { @user&.deactivated? }
+
desc "User has access to all private groups & projects"
with_options scope: :user, score: 0
condition(:full_private_access) { @user&.full_private_access? }
diff --git a/app/policies/board_policy.rb b/app/policies/board_policy.rb
index b8435dad3f1..e2b16249c85 100644
--- a/app/policies/board_policy.rb
+++ b/app/policies/board_policy.rb
@@ -3,7 +3,7 @@
class BoardPolicy < BasePolicy
include FindGroupProjects
- delegate { @subject.parent }
+ delegate { @subject.resource_parent }
condition(:is_group_board) { @subject.group_board? }
condition(:is_project_board) { @subject.project_board? }
@@ -19,7 +19,7 @@ class BoardPolicy < BasePolicy
condition(:reporter_of_group_projects) do
next unless @user
- group_projects_for(user: @user, group: @subject.parent)
+ group_projects_for(user: @user, group: @subject.resource_parent)
.visible_to_user_and_access_level(@user, ::Gitlab::Access::REPORTER)
.exists?
end
diff --git a/app/policies/clusters/instance_policy.rb b/app/policies/clusters/instance_policy.rb
index c8e6c973bf5..d8e8f9ff2c1 100644
--- a/app/policies/clusters/instance_policy.rb
+++ b/app/policies/clusters/instance_policy.rb
@@ -12,3 +12,5 @@ module Clusters
end
end
end
+
+Clusters::InstancePolicy.prepend_if_ee('EE::Clusters::InstancePolicy')
diff --git a/app/policies/deploy_keys_project_policy.rb b/app/policies/deploy_keys_project_policy.rb
new file mode 100644
index 00000000000..368377048a4
--- /dev/null
+++ b/app/policies/deploy_keys_project_policy.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class DeployKeysProjectPolicy < BasePolicy
+ delegate { @subject.project }
+
+ with_options scope: :subject, score: 0
+ condition(:public_deploy_key) { @subject.deploy_key.public? }
+
+ rule { public_deploy_key & can?(:admin_project) }.enable :update_deploy_keys_project
+end
diff --git a/app/policies/deployment_policy.rb b/app/policies/deployment_policy.rb
index d4f2f3c52b1..1a92b735e36 100644
--- a/app/policies/deployment_policy.rb
+++ b/app/policies/deployment_policy.rb
@@ -7,8 +7,20 @@ class DeploymentPolicy < BasePolicy
can?(:update_build, @subject.deployable)
end
- rule { ~can_retry_deployable }.policy do
+ condition(:has_deployable) do
+ @subject.deployable.present?
+ end
+
+ condition(:can_update_deployment) do
+ can?(:update_deployment, @subject.environment)
+ end
+
+ rule { has_deployable & ~can_retry_deployable }.policy do
prevent :create_deployment
prevent :update_deployment
end
+
+ rule { ~can_update_deployment }.policy do
+ prevent :update_deployment
+ end
end
diff --git a/app/policies/global_policy.rb b/app/policies/global_policy.rb
index 659fde574fc..eca73f0a241 100644
--- a/app/policies/global_policy.rb
+++ b/app/policies/global_policy.rb
@@ -44,6 +44,13 @@ class GlobalPolicy < BasePolicy
prevent :use_slash_commands
end
+ rule { deactivated }.policy do
+ prevent :access_git
+ prevent :access_api
+ prevent :receive_notifications
+ prevent :use_slash_commands
+ end
+
rule { required_terms_not_accepted }.policy do
prevent :access_api
prevent :access_git
diff --git a/app/policies/group_policy.rb b/app/policies/group_policy.rb
index f56ac0a5279..9e8ee3acf00 100644
--- a/app/policies/group_policy.rb
+++ b/app/policies/group_policy.rb
@@ -44,25 +44,28 @@ class GroupPolicy < BasePolicy
rule { public_group }.policy do
enable :read_group
- enable :read_list
- enable :read_label
end
rule { logged_in_viewable }.enable :read_group
rule { guest }.policy do
enable :read_group
- enable :read_list
enable :upload_file
- enable :read_label
end
- rule { admin }.enable :read_group
+ rule { admin }.policy do
+ enable :read_group
+ enable :update_max_artifacts_size
+ end
rule { has_projects }.policy do
+ enable :read_group
+ end
+
+ rule { can?(:read_group) }.policy do
+ enable :read_milestone
enable :read_list
enable :read_label
- enable :read_group
end
rule { has_access }.enable :read_namespace
diff --git a/app/policies/milestone_policy.rb b/app/policies/milestone_policy.rb
index ac4f5b08504..9cea8ddd7b3 100644
--- a/app/policies/milestone_policy.rb
+++ b/app/policies/milestone_policy.rb
@@ -1,5 +1,5 @@
# frozen_string_literal: true
class MilestonePolicy < BasePolicy
- delegate { @subject.project }
+ delegate { @subject.resource_parent }
end
diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb
index e6f8d1052ed..ea2be37d7e6 100644
--- a/app/policies/project_policy.rb
+++ b/app/policies/project_policy.rb
@@ -137,6 +137,8 @@ class ProjectPolicy < BasePolicy
# not.
rule { guest | admin }.enable :read_project_for_iids
+ rule { admin }.enable :update_max_artifacts_size
+
rule { guest }.enable :guest_access
rule { reporter }.enable :reporter_access
rule { developer }.enable :developer_access
@@ -260,6 +262,7 @@ class ProjectPolicy < BasePolicy
enable :destroy_container_image
enable :create_environment
enable :create_deployment
+ enable :update_deployment
enable :create_release
enable :update_release
end
diff --git a/app/policies/todo_policy.rb b/app/policies/todo_policy.rb
new file mode 100644
index 00000000000..f8644217f04
--- /dev/null
+++ b/app/policies/todo_policy.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class TodoPolicy < BasePolicy
+ desc 'User can only read own todos'
+ condition(:own_todo) do
+ @user && @subject.user_id == @user.id
+ end
+
+ rule { own_todo }.enable :read_todo
+end
diff --git a/app/presenters/ci/build_runner_presenter.rb b/app/presenters/ci/build_runner_presenter.rb
index 5231a8efa55..8e469795581 100644
--- a/app/presenters/ci/build_runner_presenter.rb
+++ b/app/presenters/ci/build_runner_presenter.rb
@@ -34,7 +34,8 @@ module Ci
def refspecs
specs = []
- specs << refspec_for_merge_request_ref if merge_request_ref?
+ specs << refspec_for_pipeline_ref if merge_request_ref?
+ specs << refspec_for_persistent_ref if persistent_ref_exist?
if git_depth > 0
specs << refspec_for_branch(ref) if branch? || legacy_detached_merge_request_pipeline?
@@ -86,10 +87,22 @@ module Ci
"+#{Gitlab::Git::TAG_REF_PREFIX}#{ref}:#{RUNNER_REMOTE_TAG_PREFIX}#{ref}"
end
- def refspec_for_merge_request_ref
+ def refspec_for_pipeline_ref
"+#{ref}:#{ref}"
end
+ def refspec_for_persistent_ref
+ "+#{persistent_ref_path}:#{persistent_ref_path}"
+ end
+
+ def persistent_ref_exist?
+ pipeline.persistent_ref.exist?
+ end
+
+ def persistent_ref_path
+ pipeline.persistent_ref.path
+ end
+
def git_depth_variable
strong_memoize(:git_depth_variable) do
variables&.find { |variable| variable[:key] == 'GIT_DEPTH' }
diff --git a/app/presenters/ci/pipeline_presenter.rb b/app/presenters/ci/pipeline_presenter.rb
index 73a048dfa56..d81b1e6c522 100644
--- a/app/presenters/ci/pipeline_presenter.rb
+++ b/app/presenters/ci/pipeline_presenter.rb
@@ -48,15 +48,35 @@ module Ci
def ref_text
if pipeline.detached_merge_request_pipeline?
- _("for %{link_to_merge_request} with %{link_to_merge_request_source_branch}").html_safe % { link_to_merge_request: link_to_merge_request, link_to_merge_request_source_branch: link_to_merge_request_source_branch }
+ _("for %{link_to_merge_request} with %{link_to_merge_request_source_branch}")
+ .html_safe % {
+ link_to_merge_request: link_to_merge_request,
+ link_to_merge_request_source_branch: link_to_merge_request_source_branch
+ }
elsif pipeline.merge_request_pipeline?
- _("for %{link_to_merge_request} with %{link_to_merge_request_source_branch} into %{link_to_merge_request_target_branch}").html_safe % { link_to_merge_request: link_to_merge_request, link_to_merge_request_source_branch: link_to_merge_request_source_branch, link_to_merge_request_target_branch: link_to_merge_request_target_branch }
+ _("for %{link_to_merge_request} with %{link_to_merge_request_source_branch} into %{link_to_merge_request_target_branch}")
+ .html_safe % {
+ link_to_merge_request: link_to_merge_request,
+ link_to_merge_request_source_branch: link_to_merge_request_source_branch,
+ link_to_merge_request_target_branch: link_to_merge_request_target_branch
+ }
+ elsif pipeline.ref && pipeline.ref_exists?
+ _("for %{link_to_pipeline_ref}")
+ .html_safe % { link_to_pipeline_ref: link_to_pipeline_ref }
elsif pipeline.ref
- if pipeline.ref_exists?
- _("for %{link_to_pipeline_ref}").html_safe % { link_to_pipeline_ref: link_to_pipeline_ref }
- else
- _("for %{ref}").html_safe % { ref: content_tag(:span, pipeline.ref, class: 'ref-name') }
- end
+ _("for %{ref}").html_safe % { ref: plain_ref_name }
+ end
+ end
+
+ def all_related_merge_request_text
+ if all_related_merge_requests.none?
+ 'No related merge requests found.'
+ else
+ _("%{count} related %{pluralized_subject}: %{links}" % {
+ count: all_related_merge_requests.count,
+ pluralized_subject: 'merge request'.pluralize(all_related_merge_requests.count),
+ links: all_related_merge_request_links.join(', ')
+ }).html_safe
end
end
@@ -84,10 +104,30 @@ module Ci
private
+ def plain_ref_name
+ content_tag(:span, pipeline.ref, class: 'ref-name')
+ end
+
def merge_request_presenter
- return unless pipeline.triggered_by_merge_request?
+ strong_memoize(:merge_request_presenter) do
+ if pipeline.triggered_by_merge_request?
+ pipeline.merge_request.present(current_user: current_user)
+ end
+ end
+ end
- @merge_request_presenter ||= pipeline.merge_request.present(current_user: current_user)
+ def all_related_merge_request_links
+ all_related_merge_requests.map do |merge_request|
+ mr_path = project_merge_request_path(merge_request.project, merge_request)
+
+ link_to "#{merge_request.to_reference} #{merge_request.title}", mr_path, class: 'mr-iid'
+ end
+ end
+
+ def all_related_merge_requests
+ strong_memoize(:all_related_merge_requests) do
+ pipeline.ref ? pipeline.all_merge_requests_by_recency.to_a : []
+ end
end
end
end
diff --git a/app/presenters/commit_presenter.rb b/app/presenters/commit_presenter.rb
index fc9853733c1..94fc8ac8e39 100644
--- a/app/presenters/commit_presenter.rb
+++ b/app/presenters/commit_presenter.rb
@@ -6,14 +6,29 @@ class CommitPresenter < Gitlab::View::Presenter::Delegated
presents :commit
def status_for(ref)
- can?(current_user, :read_commit_status, commit.project) && commit.status(ref)
+ return unless can?(current_user, :read_commit_status, commit.project)
+
+ commit.latest_pipeline(ref)&.detailed_status(current_user)
end
def any_pipelines?
- can?(current_user, :read_pipeline, commit.project) && commit.pipelines.any?
+ return false unless can?(current_user, :read_pipeline, commit.project)
+
+ commit.pipelines.any?
end
def web_url
Gitlab::UrlBuilder.new(commit).url
end
+
+ def signature_html
+ return unless commit.has_signature?
+
+ ApplicationController.renderer.render(
+ 'projects/commit/_signature',
+ locals: { signature: commit.signature },
+ layout: false,
+ formats: [:html]
+ )
+ end
end
diff --git a/app/presenters/issue_presenter.rb b/app/presenters/issue_presenter.rb
index c9dc0dbf443..3d55b00ac3b 100644
--- a/app/presenters/issue_presenter.rb
+++ b/app/presenters/issue_presenter.rb
@@ -11,6 +11,10 @@ class IssuePresenter < Gitlab::View::Presenter::Delegated
url_builder.issue_path(issue)
end
+ def subscribed?
+ issue.subscribed?(current_user, issue.project)
+ end
+
private
def url_builder
diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb
index 6c300cd8be1..6d370f6241c 100644
--- a/app/presenters/project_presenter.rb
+++ b/app/presenters/project_presenter.rb
@@ -51,7 +51,8 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
new_file_anchor_data,
readme_anchor_data,
changelog_anchor_data,
- contribution_guide_anchor_data
+ contribution_guide_anchor_data,
+ gitlab_ci_anchor_data
].compact.reject { |item| item.is_link }
end
diff --git a/app/presenters/projects/settings/deploy_keys_presenter.rb b/app/presenters/projects/settings/deploy_keys_presenter.rb
index 6f8c4e1f902..9bb7fe13593 100644
--- a/app/presenters/projects/settings/deploy_keys_presenter.rb
+++ b/app/presenters/projects/settings/deploy_keys_presenter.rb
@@ -40,7 +40,7 @@ module Projects
def as_json
serializer = DeployKeySerializer.new # rubocop: disable CodeReuse/Serializer
- opts = { user: current_user }
+ opts = { user: current_user, project: project }
{
enabled_keys: serializer.represent(enabled_keys.with_projects, opts),
diff --git a/app/presenters/todo_presenter.rb b/app/presenters/todo_presenter.rb
new file mode 100644
index 00000000000..b57fc712c5a
--- /dev/null
+++ b/app/presenters/todo_presenter.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class TodoPresenter < Gitlab::View::Presenter::Delegated
+ include GlobalID::Identification
+
+ presents :todo
+end
diff --git a/app/serializers/build_details_entity.rb b/app/serializers/build_details_entity.rb
index 0c754157267..480a8cab6ff 100644
--- a/app/serializers/build_details_entity.rb
+++ b/app/serializers/build_details_entity.rb
@@ -121,4 +121,28 @@ class BuildDetailsEntity < JobEntity
def can_admin_build?
can?(request.current_user, :admin_build, project)
end
+
+ def callout_message
+ return super unless build.failure_reason.to_sym == :missing_dependency_failure
+
+ docs_url = "https://docs.gitlab.com/ce/ci/yaml/README.html#dependencies"
+
+ [
+ failure_message.html_safe,
+ help_message(docs_url).html_safe
+ ].join("<br />")
+ end
+
+ def invalid_dependencies
+ build.invalid_dependencies.map(&:name).join(', ')
+ end
+
+ def failure_message
+ _("This job depends on other jobs with expired/erased artifacts: %{invalid_dependencies}") %
+ { invalid_dependencies: invalid_dependencies }
+ end
+
+ def help_message(docs_url)
+ _("Please refer to <a href=\"%{docs_url}\">%{docs_url}</a>") % { docs_url: docs_url }
+ end
end
diff --git a/app/serializers/build_trace_entity.rb b/app/serializers/build_trace_entity.rb
new file mode 100644
index 00000000000..b5bac8a5d64
--- /dev/null
+++ b/app/serializers/build_trace_entity.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class BuildTraceEntity < Grape::Entity
+ expose :build_id, as: :id
+ expose :build_status, as: :status
+ expose :build_complete?, as: :complete
+
+ expose :state
+ expose :append
+ expose :truncated
+ expose :offset
+ expose :size
+ expose :total
+
+ expose :json_lines, as: :lines, if: ->(*) { object.json? }
+ expose :html_lines, as: :html, if: ->(*) { object.html? }
+end
diff --git a/app/serializers/build_trace_serializer.rb b/app/serializers/build_trace_serializer.rb
new file mode 100644
index 00000000000..c95158f10a4
--- /dev/null
+++ b/app/serializers/build_trace_serializer.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class BuildTraceSerializer < BaseSerializer
+ entity BuildTraceEntity
+end
diff --git a/app/serializers/commit_entity.rb b/app/serializers/commit_entity.rb
index a94e32478ce..ae3f1c6bbf5 100644
--- a/app/serializers/commit_entity.rb
+++ b/app/serializers/commit_entity.rb
@@ -35,8 +35,8 @@ class CommitEntity < API::Entities::Commit
pipeline_project = options[:pipeline_project] || commit.project
next unless pipeline_ref && pipeline_project
- status = commit.status_for_project(pipeline_ref, pipeline_project)
- next unless status
+ pipeline = commit.latest_pipeline_for_project(pipeline_ref, pipeline_project)
+ next unless pipeline&.status
pipelines_project_commit_path(pipeline_project, commit.id, ref: pipeline_ref)
end
diff --git a/app/serializers/container_repository_entity.rb b/app/serializers/container_repository_entity.rb
index cc746698a05..db9cf1c7835 100644
--- a/app/serializers/container_repository_entity.rb
+++ b/app/serializers/container_repository_entity.rb
@@ -18,7 +18,7 @@ class ContainerRepositoryEntity < Grape::Entity
alias_method :repository, :object
def project
- request.project
+ request.respond_to?(:project) ? request.project : object.project
end
def can_destroy?
diff --git a/app/serializers/deploy_key_entity.rb b/app/serializers/deploy_key_entity.rb
index e47d6454780..9a558d12bec 100644
--- a/app/serializers/deploy_key_entity.rb
+++ b/app/serializers/deploy_key_entity.rb
@@ -20,6 +20,7 @@ class DeployKeyEntity < Grape::Entity
private
def can_edit
- Ability.allowed?(options[:user], :update_deploy_key, object)
+ Ability.allowed?(options[:user], :update_deploy_key, object) ||
+ Ability.allowed?(options[:user], :update_deploy_keys_project, object.deploy_keys_project_for(options[:project]))
end
end
diff --git a/app/serializers/diff_file_metadata_entity.rb b/app/serializers/diff_file_metadata_entity.rb
new file mode 100644
index 00000000000..500a844b170
--- /dev/null
+++ b/app/serializers/diff_file_metadata_entity.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class DiffFileMetadataEntity < Grape::Entity
+ expose :added_lines
+ expose :removed_lines
+ expose :new_path
+ expose :old_path
+ expose :new_file?, as: :new_file
+ expose :deleted_file?, as: :deleted_file
+end
diff --git a/app/serializers/diffs_entity.rb b/app/serializers/diffs_entity.rb
index 1763fe5b6ab..19875a1287c 100644
--- a/app/serializers/diffs_entity.rb
+++ b/app/serializers/diffs_entity.rb
@@ -53,7 +53,7 @@ class DiffsEntity < Grape::Entity
# rubocop: enable CodeReuse/ActiveRecord
expose :render_overflow_warning do |diffs|
- render_overflow_warning?(diffs.diff_files)
+ render_overflow_warning?(diffs)
end
expose :email_patch_path, if: -> (*) { merge_request } do |diffs|
diff --git a/app/serializers/diffs_metadata_entity.rb b/app/serializers/diffs_metadata_entity.rb
new file mode 100644
index 00000000000..c82c686e8ef
--- /dev/null
+++ b/app/serializers/diffs_metadata_entity.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+class DiffsMetadataEntity < DiffsEntity
+ unexpose :diff_files
+ expose :diff_files, using: DiffFileMetadataEntity
+end
diff --git a/app/serializers/diffs_metadata_serializer.rb b/app/serializers/diffs_metadata_serializer.rb
new file mode 100644
index 00000000000..9f3ba7b778d
--- /dev/null
+++ b/app/serializers/diffs_metadata_serializer.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class DiffsMetadataSerializer < BaseSerializer
+ entity DiffsMetadataEntity
+end
diff --git a/app/serializers/evidences/evidence_entity.rb b/app/serializers/evidences/evidence_entity.rb
new file mode 100644
index 00000000000..9689ae10895
--- /dev/null
+++ b/app/serializers/evidences/evidence_entity.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module Evidences
+ class EvidenceEntity < Grape::Entity
+ expose :release, using: Evidences::ReleaseEntity
+ end
+end
diff --git a/app/serializers/evidences/evidence_serializer.rb b/app/serializers/evidences/evidence_serializer.rb
new file mode 100644
index 00000000000..d03032bc65c
--- /dev/null
+++ b/app/serializers/evidences/evidence_serializer.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module Evidences
+ class EvidenceSerializer < BaseSerializer
+ entity EvidenceEntity
+ end
+end
diff --git a/app/serializers/evidences/issue_entity.rb b/app/serializers/evidences/issue_entity.rb
new file mode 100644
index 00000000000..2f1f5dc3d18
--- /dev/null
+++ b/app/serializers/evidences/issue_entity.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+module Evidences
+ class IssueEntity < Grape::Entity
+ expose :id
+ expose :title
+ expose :description
+ expose :state
+ expose :iid
+ expose :confidential
+ expose :created_at
+ expose :due_date
+ end
+end
diff --git a/app/serializers/evidences/milestone_entity.rb b/app/serializers/evidences/milestone_entity.rb
new file mode 100644
index 00000000000..eeb3d58d4c7
--- /dev/null
+++ b/app/serializers/evidences/milestone_entity.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+module Evidences
+ class MilestoneEntity < Grape::Entity
+ expose :id
+ expose :title
+ expose :description
+ expose :state
+ expose :iid
+ expose :created_at
+ expose :due_date
+ expose :issues, using: Evidences::IssueEntity
+ end
+end
diff --git a/app/serializers/evidences/project_entity.rb b/app/serializers/evidences/project_entity.rb
new file mode 100644
index 00000000000..2a859c2afdc
--- /dev/null
+++ b/app/serializers/evidences/project_entity.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+module Evidences
+ class ProjectEntity < Grape::Entity
+ expose :id
+ expose :name
+ expose :description
+ expose :created_at
+ end
+end
diff --git a/app/serializers/evidences/release_entity.rb b/app/serializers/evidences/release_entity.rb
new file mode 100644
index 00000000000..59e379a3c08
--- /dev/null
+++ b/app/serializers/evidences/release_entity.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Evidences
+ class ReleaseEntity < Grape::Entity
+ expose :id
+ expose :tag, as: :tag_name
+ expose :name
+ expose :description
+ expose :created_at
+ expose :project, using: Evidences::ProjectEntity
+ expose :milestones, using: Evidences::MilestoneEntity
+ end
+end
diff --git a/app/serializers/evidences/release_serializer.rb b/app/serializers/evidences/release_serializer.rb
new file mode 100644
index 00000000000..35a3bbc2275
--- /dev/null
+++ b/app/serializers/evidences/release_serializer.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module Evidences
+ class ReleaseSerializer < BaseSerializer
+ entity ReleaseEntity
+ end
+end
diff --git a/app/serializers/paginated_diff_entity.rb b/app/serializers/paginated_diff_entity.rb
new file mode 100644
index 00000000000..622da926c69
--- /dev/null
+++ b/app/serializers/paginated_diff_entity.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+# Serializes diffs with pagination data.
+#
+# Avoid adding more keys to this serializer as processing the
+# diff file serialization is not cheap.
+#
+class PaginatedDiffEntity < Grape::Entity
+ include RequestAwareEntity
+
+ expose :diff_files do |diffs, options|
+ submodule_links = Gitlab::SubmoduleLinks.new(merge_request.project.repository)
+ DiffFileEntity.represent(diffs.diff_files, options.merge(submodule_links: submodule_links))
+ end
+
+ expose :pagination do
+ expose :current_page
+ expose :next_page
+ expose :total_pages
+ expose :next_page_href do |diffs|
+ next unless next_page
+
+ project = merge_request.target_project
+
+ diffs_batch_namespace_project_json_merge_request_path(
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ page: next_page,
+ format: :json
+ )
+ end
+ end
+
+ private
+
+ %i[current_page next_page total_pages].each do |method|
+ define_method method do
+ pagination_data[method]
+ end
+ end
+
+ def pagination_data
+ options.fetch(:pagination_data, {})
+ end
+
+ def merge_request
+ options[:merge_request]
+ end
+end
diff --git a/app/serializers/paginated_diff_serializer.rb b/app/serializers/paginated_diff_serializer.rb
new file mode 100644
index 00000000000..9b40fbf7843
--- /dev/null
+++ b/app/serializers/paginated_diff_serializer.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class PaginatedDiffSerializer < BaseSerializer
+ entity PaginatedDiffEntity
+end
diff --git a/app/serializers/pipeline_details_entity.rb b/app/serializers/pipeline_details_entity.rb
index 808e87c3fcf..71589ac8315 100644
--- a/app/serializers/pipeline_details_entity.rb
+++ b/app/serializers/pipeline_details_entity.rb
@@ -10,6 +10,7 @@ class PipelineDetailsEntity < PipelineEntity
expose :manual_actions, using: BuildActionEntity
expose :scheduled_actions, using: BuildActionEntity
end
-end
-PipelineDetailsEntity.prepend_if_ee('EE::PipelineDetailsEntity')
+ expose :triggered_by_pipeline, as: :triggered_by, with: TriggeredPipelineEntity
+ expose :triggered_pipelines, as: :triggered, using: TriggeredPipelineEntity
+end
diff --git a/app/serializers/pipeline_serializer.rb b/app/serializers/pipeline_serializer.rb
index eaaeaf040a2..fc3160e3c69 100644
--- a/app/serializers/pipeline_serializer.rb
+++ b/app/serializers/pipeline_serializer.rb
@@ -54,9 +54,9 @@ class PipelineSerializer < BaseSerializer
artifacts: {
project: [:route, { namespace: :route }]
}
- }
+ },
+ { triggered_by_pipeline: [:project, :user] },
+ { triggered_pipelines: [:project, :user] }
]
end
end
-
-PipelineSerializer.prepend_if_ee('EE::PipelineSerializer')
diff --git a/app/serializers/projects/serverless/service_entity.rb b/app/serializers/projects/serverless/service_entity.rb
index a46f8af1466..a1e0bf02d11 100644
--- a/app/serializers/projects/serverless/service_entity.rb
+++ b/app/serializers/projects/serverless/service_entity.rb
@@ -44,7 +44,7 @@ module Projects
end
expose :url do |service|
- "http://#{service.dig('status', 'domain')}"
+ service.dig('status', 'url') || "http://#{service.dig('status', 'domain')}"
end
expose :description do |service|
diff --git a/app/serializers/test_report_entity.rb b/app/serializers/test_report_entity.rb
new file mode 100644
index 00000000000..9eb487da60a
--- /dev/null
+++ b/app/serializers/test_report_entity.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class TestReportEntity < Grape::Entity
+ expose :total_time
+ expose :total_count
+
+ expose :success_count
+ expose :failed_count
+ expose :skipped_count
+ expose :error_count
+
+ expose :test_suites, using: TestSuiteEntity do |report|
+ report.test_suites.values
+ end
+end
diff --git a/app/serializers/test_report_serializer.rb b/app/serializers/test_report_serializer.rb
new file mode 100644
index 00000000000..8906b09bc6a
--- /dev/null
+++ b/app/serializers/test_report_serializer.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class TestReportSerializer < BaseSerializer
+ entity TestReportEntity
+end
diff --git a/app/serializers/test_suite_entity.rb b/app/serializers/test_suite_entity.rb
new file mode 100644
index 00000000000..0f88a496c77
--- /dev/null
+++ b/app/serializers/test_suite_entity.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class TestSuiteEntity < Grape::Entity
+ expose :name
+ expose :total_time
+ expose :total_count
+
+ expose :success_count
+ expose :failed_count
+ expose :skipped_count
+ expose :error_count
+
+ expose :test_cases, using: TestCaseEntity do |test_suite|
+ test_suite.test_cases.values.flat_map(&:values)
+ end
+end
diff --git a/app/serializers/triggered_pipeline_entity.rb b/app/serializers/triggered_pipeline_entity.rb
new file mode 100644
index 00000000000..fd7e4454abf
--- /dev/null
+++ b/app/serializers/triggered_pipeline_entity.rb
@@ -0,0 +1,65 @@
+# frozen_string_literal: true
+
+class TriggeredPipelineEntity < Grape::Entity
+ include RequestAwareEntity
+
+ MAX_EXPAND_DEPTH = 3
+
+ expose :id
+ expose :user, using: UserEntity
+ expose :active?, as: :active
+ expose :coverage
+ expose :source
+
+ expose :path do |pipeline|
+ project_pipeline_path(pipeline.project, pipeline)
+ end
+
+ expose :details do
+ expose :detailed_status, as: :status, with: DetailedStatusEntity
+
+ expose :ordered_stages,
+ as: :stages, using: StageEntity,
+ if: -> (_, opts) { can_read_details? && expand?(opts) }
+ end
+
+ expose :triggered_by_pipeline,
+ as: :triggered_by, with: TriggeredPipelineEntity,
+ if: -> (_, opts) { can_read_details? && expand_for_path?(opts) }
+
+ expose :triggered_pipelines,
+ as: :triggered, using: TriggeredPipelineEntity,
+ if: -> (_, opts) { can_read_details? && expand_for_path?(opts) }
+
+ expose :project, using: ProjectEntity
+
+ private
+
+ alias_method :pipeline, :object
+
+ def can_read_details?
+ can?(request.current_user, :read_pipeline, pipeline)
+ end
+
+ def detailed_status
+ pipeline.detailed_status(request.current_user)
+ end
+
+ def expand?(opts)
+ opts[:expanded].to_a.include?(pipeline.id)
+ end
+
+ def expand_for_path?(opts)
+ # The `opts[:attr_path]` holds a list of all `exposes` in path
+ # The check ensures that we always expand only `triggered_by`, `triggered_by`, ...
+ # but not the `triggered_by`, `triggered` which would result in dead loop
+ attr_path = opts[:attr_path]
+ current_expose = attr_path.last
+
+ # We expand at most to depth of MAX_DEPTH
+ # We ensure that we expand in one direction: triggered_by,... or triggered, ...
+ attr_path.length < MAX_EXPAND_DEPTH &&
+ attr_path.all?(current_expose) &&
+ expand?(opts)
+ end
+end
diff --git a/app/services/application_settings/update_service.rb b/app/services/application_settings/update_service.rb
index 6400b182715..df9217bea32 100644
--- a/app/services/application_settings/update_service.rb
+++ b/app/services/application_settings/update_service.rb
@@ -20,7 +20,11 @@ module ApplicationSettings
add_to_outbound_local_requests_whitelist(@params.delete(:add_to_outbound_local_requests_whitelist))
if params.key?(:performance_bar_allowed_group_path)
- params[:performance_bar_allowed_group_id] = performance_bar_allowed_group_id
+ group_id = process_performance_bar_allowed_group_id
+
+ return false if application_setting.errors.any?
+
+ params[:performance_bar_allowed_group_id] = group_id
end
if usage_stats_updated? && !params.delete(:skip_usage_stats_user)
@@ -65,12 +69,27 @@ module ApplicationSettings
@application_setting.reset_memoized_terms
end
- def performance_bar_allowed_group_id
- performance_bar_enabled = !params.key?(:performance_bar_enabled) || params.delete(:performance_bar_enabled)
+ def process_performance_bar_allowed_group_id
group_full_path = params.delete(:performance_bar_allowed_group_path)
- return unless Gitlab::Utils.to_boolean(performance_bar_enabled)
+ enable_param_on = Gitlab::Utils.to_boolean(params.delete(:performance_bar_enabled))
+ performance_bar_enabled = enable_param_on.nil? || enable_param_on # Default to true
+
+ return if group_full_path.blank?
+ return if enable_param_on == false # Explicitly disabling
+
+ unless performance_bar_enabled
+ application_setting.errors.add(:performance_bar_allowed_group_id, 'not allowed when performance bar is disabled')
+ return
+ end
+
+ group = Group.find_by_full_path(group_full_path.chomp('/'))
+
+ unless group
+ application_setting.errors.add(:performance_bar_allowed_group_id, 'not found')
+ return
+ end
- Group.find_by_full_path(group_full_path)&.id if group_full_path.present?
+ group.id
end
def bypass_external_auth?
diff --git a/app/services/boards/issues/list_service.rb b/app/services/boards/issues/list_service.rb
index 10eb1141f59..37a74cd1b00 100644
--- a/app/services/boards/issues/list_service.rb
+++ b/app/services/boards/issues/list_service.rb
@@ -11,9 +11,11 @@ module Boards
# rubocop: disable CodeReuse/ActiveRecord
def metadata
+ issues = Issue.arel_table
keys = metadata_fields.keys
- columns = metadata_fields.values_at(*keys).join(', ')
- results = Issue.where(id: fetch_issues.select('issues.id')).pluck(columns)
+ # TODO: eliminate need for SQL literal fragment
+ columns = Arel.sql(metadata_fields.values_at(*keys).join(', '))
+ results = Issue.where(id: fetch_issues.select(issues[:id])).pluck(columns)
Hash[keys.zip(results.flatten)]
end
diff --git a/app/services/boards/lists/create_service.rb b/app/services/boards/lists/create_service.rb
index eb417ac4f5f..6f9a063cb16 100644
--- a/app/services/boards/lists/create_service.rb
+++ b/app/services/boards/lists/create_service.rb
@@ -43,7 +43,11 @@ module Boards
end
def create_list(board, type, target, position)
- board.lists.create(type => target, list_type: type, position: position)
+ board.lists.create(create_list_attributes(type, target, position))
+ end
+
+ def create_list_attributes(type, target, position)
+ { type => target, list_type: type, position: position }
end
end
end
diff --git a/app/services/boards/lists/list_service.rb b/app/services/boards/lists/list_service.rb
index 3609d9c6283..82cba1b68c4 100644
--- a/app/services/boards/lists/list_service.rb
+++ b/app/services/boards/lists/list_service.rb
@@ -6,7 +6,7 @@ module Boards
def execute(board)
board.lists.create(list_type: :backlog) unless board.lists.backlog.exists?
- board.lists.preload_associations(current_user)
+ board.lists.preload_associations
end
end
end
diff --git a/app/services/boards/lists/update_service.rb b/app/services/boards/lists/update_service.rb
index ad96e42f756..4a463372c82 100644
--- a/app/services/boards/lists/update_service.rb
+++ b/app/services/boards/lists/update_service.rb
@@ -4,16 +4,22 @@ module Boards
module Lists
class UpdateService < Boards::BaseService
def execute(list)
- update_preferences_result = update_preferences(list) if can_read?(list)
- update_position_result = update_position(list) if can_admin?(list)
-
- if update_preferences_result || update_position_result
+ if execute_by_params(list)
success(list: list)
else
error(list.errors.messages, 422)
end
end
+ private
+
+ def execute_by_params(list)
+ update_preferences_result = update_preferences(list) if can_read?(list)
+ update_position_result = update_position(list) if can_admin?(list)
+
+ update_preferences_result || update_position_result
+ end
+
def update_preferences(list)
return unless preferences?
@@ -50,3 +56,5 @@ module Boards
end
end
end
+
+Boards::Lists::UpdateService.prepend_if_ee('EE::Boards::Lists::UpdateService')
diff --git a/app/services/bulk_push_event_payload_service.rb b/app/services/bulk_push_event_payload_service.rb
new file mode 100644
index 00000000000..54157bc23f9
--- /dev/null
+++ b/app/services/bulk_push_event_payload_service.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class BulkPushEventPayloadService
+ def initialize(event, push_data)
+ @event = event
+ @push_data = push_data
+ end
+
+ def execute
+ @event.build_push_event_payload(
+ action: @push_data[:action],
+ commit_count: 0,
+ ref_count: @push_data[:ref_count],
+ ref_type: @push_data[:ref_type]
+ )
+
+ @event.push_event_payload.tap(&:save!)
+ end
+end
diff --git a/app/services/ci/pipeline_trigger_service.rb b/app/services/ci/pipeline_trigger_service.rb
index 0e99f142492..37b9b4c362c 100644
--- a/app/services/ci/pipeline_trigger_service.rb
+++ b/app/services/ci/pipeline_trigger_service.rb
@@ -38,11 +38,34 @@ module Ci
end
def create_pipeline_from_job(job)
- # overridden in EE
+ # this check is to not leak the presence of the project if user cannot read it
+ return unless can?(job.user, :read_project, project)
+
+ return error("400 Job has to be running", 400) unless job.running?
+
+ pipeline = Ci::CreatePipelineService.new(project, job.user, ref: params[:ref])
+ .execute(:pipeline, ignore_skip_ci: true) do |pipeline|
+ source = job.sourced_pipelines.build(
+ source_pipeline: job.pipeline,
+ source_project: job.project,
+ pipeline: pipeline,
+ project: project)
+
+ pipeline.source_pipeline = source
+ pipeline.variables.build(variables)
+ end
+
+ if pipeline.persisted?
+ success(pipeline: pipeline)
+ else
+ error(pipeline.errors.messages, 400)
+ end
end
def job_from_token
- # overridden in EE
+ strong_memoize(:job) do
+ Ci::Build.find_by_token(params[:token].to_s)
+ end
end
def variables
@@ -52,5 +75,3 @@ module Ci
end
end
end
-
-Ci::PipelineTriggerService.prepend_if_ee('EE::Ci::PipelineTriggerService')
diff --git a/app/services/ci/process_pipeline_service.rb b/app/services/ci/process_pipeline_service.rb
index 3b145a65d79..039670f58c8 100644
--- a/app/services/ci/process_pipeline_service.rb
+++ b/app/services/ci/process_pipeline_service.rb
@@ -2,6 +2,8 @@
module Ci
class ProcessPipelineService < BaseService
+ include Gitlab::Utils::StrongMemoize
+
attr_reader :pipeline
def execute(pipeline, trigger_build_ids = nil)
@@ -33,9 +35,9 @@ module Ci
return unless HasStatus::COMPLETED_STATUSES.include?(current_status)
- created_processables_in_stage_without_needs(index).select do |build|
+ created_processables_in_stage_without_needs(index).find_each.select do |build|
process_build(build, current_status)
- end
+ end.any?
end
def process_builds_with_needs(trigger_build_ids)
@@ -92,6 +94,7 @@ module Ci
def created_processables_in_stage_without_needs(index)
created_processables_without_needs
+ .with_preloads
.for_stage(index)
end
diff --git a/app/services/ci/retry_build_service.rb b/app/services/ci/retry_build_service.rb
index 338495ba030..7a5e33c61ba 100644
--- a/app/services/ci/retry_build_service.rb
+++ b/app/services/ci/retry_build_service.rb
@@ -39,9 +39,18 @@ module Ci
.where(name: build.name)
.update_all(retried: true)
- project.builds.create!(Hash[attributes])
+ create_build!(attributes)
end
end
# rubocop: enable CodeReuse/ActiveRecord
+
+ private
+
+ def create_build!(attributes)
+ build = project.builds.new(Hash[attributes])
+ build.deployment = ::Gitlab::Ci::Pipeline::Seed::Deployment.new(build).to_resource
+ build.save!
+ build
+ end
end
end
diff --git a/app/services/clusters/gcp/finalize_creation_service.rb b/app/services/clusters/gcp/finalize_creation_service.rb
index c5cde831964..0aff1bcc8b9 100644
--- a/app/services/clusters/gcp/finalize_creation_service.rb
+++ b/app/services/clusters/gcp/finalize_creation_service.rb
@@ -11,6 +11,7 @@ module Clusters
configure_provider
create_gitlab_service_account!
configure_kubernetes
+ configure_pre_installed_knative if provider.knative_pre_installed?
cluster.save!
rescue Google::Apis::ServerError, Google::Apis::ClientError, Google::Apis::AuthorizationError => e
log_service_error(e.class.name, provider.id, e.message)
@@ -48,6 +49,13 @@ module Clusters
token: request_kubernetes_token)
end
+ def configure_pre_installed_knative
+ knative = cluster.build_application_knative(
+ hostname: 'example.com'
+ )
+ knative.make_pre_installed!
+ end
+
def request_kubernetes_token
Clusters::Kubernetes::FetchKubernetesTokenService.new(
kube_client,
diff --git a/app/services/clusters/gcp/provision_service.rb b/app/services/clusters/gcp/provision_service.rb
index 80040511ec2..7dc2d3c32f1 100644
--- a/app/services/clusters/gcp/provision_service.rb
+++ b/app/services/clusters/gcp/provision_service.rb
@@ -3,6 +3,8 @@
module Clusters
module Gcp
class ProvisionService
+ CLOUD_RUN_ADDONS = %i[http_load_balancing istio_config cloud_run_config].freeze
+
attr_reader :provider
def execute(provider)
@@ -22,13 +24,16 @@ module Clusters
private
def get_operation_id
+ enable_addons = provider.cloud_run? ? CLOUD_RUN_ADDONS : []
+
operation = provider.api_client.projects_zones_clusters_create(
provider.gcp_project_id,
provider.zone,
provider.cluster.name,
provider.num_nodes,
machine_type: provider.machine_type,
- legacy_abac: provider.legacy_abac
+ legacy_abac: provider.legacy_abac,
+ enable_addons: enable_addons
)
unless operation.status == 'PENDING' || operation.status == 'RUNNING'
diff --git a/app/services/concerns/git/change_params.rb b/app/services/concerns/git/change_params.rb
new file mode 100644
index 00000000000..32faf805b5e
--- /dev/null
+++ b/app/services/concerns/git/change_params.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module Git
+ module ChangeParams
+ private
+
+ %i[oldrev newrev ref].each do |method|
+ define_method method do
+ change[method]
+ end
+ end
+
+ def change
+ @change ||= params.fetch(:change, {})
+ end
+ end
+end
diff --git a/app/services/deployments/after_create_service.rb b/app/services/deployments/after_create_service.rb
new file mode 100644
index 00000000000..2572802e6a1
--- /dev/null
+++ b/app/services/deployments/after_create_service.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+module Deployments
+ class AfterCreateService
+ attr_reader :deployment
+ attr_reader :deployable
+
+ delegate :environment, to: :deployment
+ delegate :variables, to: :deployable
+ delegate :options, to: :deployable, allow_nil: true
+
+ def initialize(deployment)
+ @deployment = deployment
+ @deployable = deployment.deployable
+ end
+
+ def execute
+ deployment.create_ref
+ deployment.invalidate_cache
+
+ update_environment(deployment)
+
+ deployment
+ end
+
+ def update_environment(deployment)
+ ActiveRecord::Base.transaction do
+ if (url = expanded_environment_url)
+ environment.external_url = url
+ end
+
+ environment.fire_state_event(action)
+
+ if environment.save && !environment.stopped?
+ deployment.update_merge_request_metrics!
+ end
+ end
+ end
+
+ private
+
+ def environment_options
+ options&.dig(:environment) || {}
+ end
+
+ def expanded_environment_url
+ ExpandVariables.expand(environment_url, -> { variables }) if environment_url
+ end
+
+ def environment_url
+ environment_options[:url]
+ end
+
+ def action
+ environment_options[:action] || 'start'
+ end
+ end
+end
+
+Deployments::AfterCreateService.prepend_if_ee('EE::Deployments::AfterCreateService')
diff --git a/app/services/deployments/create_service.rb b/app/services/deployments/create_service.rb
new file mode 100644
index 00000000000..89e3f7c8b83
--- /dev/null
+++ b/app/services/deployments/create_service.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module Deployments
+ class CreateService
+ attr_reader :environment, :current_user, :params
+
+ def initialize(environment, current_user, params)
+ @environment = environment
+ @current_user = current_user
+ @params = params
+ end
+
+ def execute
+ create_deployment.tap do |deployment|
+ AfterCreateService.new(deployment).execute if deployment.persisted?
+ end
+ end
+
+ def create_deployment
+ environment.deployments.create(deployment_attributes)
+ end
+
+ def deployment_attributes
+ # We use explicit parameters here so we never by accident allow parameters
+ # to be set that one should not be able to set (e.g. the row ID).
+ {
+ cluster_id: environment.deployment_platform&.cluster_id,
+ project_id: environment.project_id,
+ environment_id: environment.id,
+ ref: params[:ref],
+ tag: params[:tag],
+ sha: params[:sha],
+ user: current_user,
+ on_stop: params[:on_stop],
+ status: params[:status]
+ }
+ end
+ end
+end
diff --git a/app/services/deployments/update_service.rb b/app/services/deployments/update_service.rb
new file mode 100644
index 00000000000..7c8215d28f2
--- /dev/null
+++ b/app/services/deployments/update_service.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+module Deployments
+ class UpdateService
+ attr_reader :deployment, :params
+
+ def initialize(deployment, params)
+ @deployment = deployment
+ @params = params
+ end
+
+ def execute
+ deployment.update(status: params[:status])
+ end
+ end
+end
diff --git a/app/services/event_create_service.rb b/app/services/event_create_service.rb
index 395c5fe09ac..f7282c22a52 100644
--- a/app/services/event_create_service.rb
+++ b/app/services/event_create_service.rb
@@ -73,15 +73,27 @@ class EventCreateService
end
def push(project, current_user, push_data)
+ create_push_event(PushEventPayloadService, project, current_user, push_data)
+ end
+
+ def bulk_push(project, current_user, push_data)
+ create_push_event(BulkPushEventPayloadService, project, current_user, push_data)
+ end
+
+ private
+
+ def create_record_event(record, current_user, status)
+ create_event(record.resource_parent, current_user, status, target_id: record.id, target_type: record.class.name)
+ end
+
+ def create_push_event(service_class, project, current_user, push_data)
# We're using an explicit transaction here so that any errors that may occur
# when creating push payload data will result in the event creation being
# rolled back as well.
event = Event.transaction do
new_event = create_event(project, current_user, Event::PUSHED)
- PushEventPayloadService
- .new(new_event, push_data)
- .execute
+ service_class.new(new_event, push_data).execute
new_event
end
@@ -92,12 +104,6 @@ class EventCreateService
Users::ActivityService.new(current_user, 'push').execute
end
- private
-
- def create_record_event(record, current_user, status)
- create_event(record.resource_parent, current_user, status, target_id: record.id, target_type: record.class.name)
- end
-
def create_event(resource_parent, current_user, status, attributes = {})
attributes.reverse_merge!(
action: status,
diff --git a/app/services/git/base_hooks_service.rb b/app/services/git/base_hooks_service.rb
index 35a4d2015fa..0801fd4d03f 100644
--- a/app/services/git/base_hooks_service.rb
+++ b/app/services/git/base_hooks_service.rb
@@ -3,6 +3,7 @@
module Git
class BaseHooksService < ::BaseService
include Gitlab::Utils::StrongMemoize
+ include ChangeParams
# The N most recent commits to process in a single push payload.
PROCESS_COMMIT_LIMIT = 100
@@ -15,8 +16,6 @@ module Git
# Not a hook, but it needs access to the list of changed commits
enqueue_invalidate_cache
- update_remote_mirrors
-
success
end
@@ -49,6 +48,8 @@ module Git
# Push events in the activity feed only show information for the
# last commit.
def create_events
+ return unless params.fetch(:create_push_event, true)
+
EventCreateService.new.push(project, current_user, event_push_data)
end
@@ -63,6 +64,8 @@ module Git
end
def execute_project_hooks
+ return unless params.fetch(:execute_project_hooks, true)
+
# Creating push_data invokes one CommitDelta RPC per commit. Only
# build this data if we actually need it.
project.execute_hooks(push_data, hook_name) if project.has_active_hooks?(hook_name)
@@ -79,20 +82,20 @@ module Git
def pipeline_params
{
- before: params[:oldrev],
- after: params[:newrev],
- ref: params[:ref],
+ before: oldrev,
+ after: newrev,
+ ref: ref,
push_options: params[:push_options] || {},
checkout_sha: Gitlab::DataBuilder::Push.checkout_sha(
- project.repository, params[:newrev], params[:ref])
+ project.repository, newrev, ref)
}
end
def push_data_params(commits:, with_changed_files: true)
{
- oldrev: params[:oldrev],
- newrev: params[:newrev],
- ref: params[:ref],
+ oldrev: oldrev,
+ newrev: newrev,
+ ref: ref,
project: project,
user: current_user,
commits: commits,
@@ -121,13 +124,6 @@ module Git
{}
end
- def update_remote_mirrors
- return unless project.has_remote_mirror?
-
- project.mark_stuck_remote_mirrors_as_failed!
- project.update_remote_mirrors
- end
-
def log_pipeline_errors(exception)
data = {
class: self.class.name,
diff --git a/app/services/git/branch_hooks_service.rb b/app/services/git/branch_hooks_service.rb
index c633cff2822..69f1f9eb31f 100644
--- a/app/services/git/branch_hooks_service.rb
+++ b/app/services/git/branch_hooks_service.rb
@@ -20,15 +20,15 @@ module Git
strong_memoize(:commits) do
if creating_default_branch?
# The most recent PROCESS_COMMIT_LIMIT commits in the default branch
- project.repository.commits(params[:newrev], limit: PROCESS_COMMIT_LIMIT)
+ project.repository.commits(newrev, limit: PROCESS_COMMIT_LIMIT)
elsif creating_branch?
# Use the pushed commits that aren't reachable by the default branch
# as a heuristic. This may include more commits than are actually
# pushed, but that shouldn't matter because we check for existing
# cross-references later.
- project.repository.commits_between(project.default_branch, params[:newrev])
+ project.repository.commits_between(project.default_branch, newrev)
elsif updating_branch?
- project.repository.commits_between(params[:oldrev], params[:newrev])
+ project.repository.commits_between(oldrev, newrev)
else # removing branch
[]
end
@@ -70,7 +70,7 @@ module Git
def branch_update_hooks
# Update the bare repositories info/attributes file using the contents of
# the default branch's .gitattributes file
- project.repository.copy_gitattributes(params[:ref]) if default_branch?
+ project.repository.copy_gitattributes(ref) if default_branch?
end
def branch_change_hooks
@@ -118,7 +118,7 @@ module Git
# https://gitlab.com/gitlab-org/gitlab-foss/issues/59257
def creating_branch?
strong_memoize(:creating_branch) do
- Gitlab::Git.blank_ref?(params[:oldrev]) ||
+ Gitlab::Git.blank_ref?(oldrev) ||
!project.repository.branch_exists?(branch_name)
end
end
@@ -128,7 +128,7 @@ module Git
end
def removing_branch?
- Gitlab::Git.blank_ref?(params[:newrev])
+ Gitlab::Git.blank_ref?(newrev)
end
def creating_default_branch?
@@ -137,7 +137,7 @@ module Git
def count_commits_in_branch
strong_memoize(:count_commits_in_branch) do
- project.repository.commit_count_for_ref(params[:ref])
+ project.repository.commit_count_for_ref(ref)
end
end
@@ -148,7 +148,7 @@ module Git
end
def branch_name
- strong_memoize(:branch_name) { Gitlab::Git.ref_name(params[:ref]) }
+ strong_memoize(:branch_name) { Gitlab::Git.ref_name(ref) }
end
def upstream_commit_ids(commits)
diff --git a/app/services/git/branch_push_service.rb b/app/services/git/branch_push_service.rb
index 49c54e42b7c..da45bcc7eaa 100644
--- a/app/services/git/branch_push_service.rb
+++ b/app/services/git/branch_push_service.rb
@@ -4,6 +4,7 @@ module Git
class BranchPushService < ::BaseService
include Gitlab::Access
include Gitlab::Utils::StrongMemoize
+ include ChangeParams
# This method will be called after each git update
# and only if the provided user and project are present in GitLab.
@@ -19,7 +20,7 @@ module Git
# 6. Checks if the project's main language has changed
#
def execute
- return unless Gitlab::Git.branch_ref?(params[:ref])
+ return unless Gitlab::Git.branch_ref?(ref)
enqueue_update_mrs
enqueue_detect_repository_languages
@@ -38,9 +39,9 @@ module Git
UpdateMergeRequestsWorker.perform_async(
project.id,
current_user.id,
- params[:oldrev],
- params[:newrev],
- params[:ref]
+ oldrev,
+ newrev,
+ ref
)
end
@@ -57,13 +58,6 @@ module Git
Ci::StopEnvironmentsService.new(project, current_user).execute(branch_name)
end
- def update_remote_mirrors
- return unless project.has_remote_mirror?
-
- project.mark_stuck_remote_mirrors_as_failed!
- project.update_remote_mirrors
- end
-
def execute_related_hooks
BranchHooksService.new(project, current_user, params).execute
end
@@ -76,11 +70,11 @@ module Git
end
def removing_branch?
- Gitlab::Git.blank_ref?(params[:newrev])
+ Gitlab::Git.blank_ref?(newrev)
end
def branch_name
- strong_memoize(:branch_name) { Gitlab::Git.ref_name(params[:ref]) }
+ strong_memoize(:branch_name) { Gitlab::Git.ref_name(ref) }
end
def default_branch?
diff --git a/app/services/git/process_ref_changes_service.rb b/app/services/git/process_ref_changes_service.rb
new file mode 100644
index 00000000000..3052bed51bc
--- /dev/null
+++ b/app/services/git/process_ref_changes_service.rb
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+module Git
+ class ProcessRefChangesService < BaseService
+ PIPELINE_PROCESS_LIMIT = 4
+
+ def execute
+ changes = params[:changes]
+
+ process_changes_by_action(:branch, changes.branch_changes)
+ process_changes_by_action(:tag, changes.tag_changes)
+ end
+
+ private
+
+ def process_changes_by_action(ref_type, changes)
+ changes_by_action = group_changes_by_action(changes)
+
+ changes_by_action.each do |action, changes|
+ process_changes(ref_type, action, changes, execute_project_hooks: execute_project_hooks?(changes)) if changes.any?
+ end
+ end
+
+ def group_changes_by_action(changes)
+ changes.group_by do |change|
+ change_action(change)
+ end
+ end
+
+ def change_action(change)
+ return :created if Gitlab::Git.blank_ref?(change[:oldrev])
+ return :removed if Gitlab::Git.blank_ref?(change[:newrev])
+
+ :pushed
+ end
+
+ def execute_project_hooks?(changes)
+ (changes.size <= Gitlab::CurrentSettings.push_event_hooks_limit) || Feature.enabled?(:git_push_execute_all_project_hooks, project)
+ end
+
+ def process_changes(ref_type, action, changes, execute_project_hooks:)
+ push_service_class = push_service_class_for(ref_type)
+
+ create_bulk_push_event = changes.size > Gitlab::CurrentSettings.push_event_activities_limit
+
+ changes.each do |change|
+ push_service_class.new(
+ project,
+ current_user,
+ change: change,
+ push_options: params[:push_options],
+ create_pipelines: change[:index] < PIPELINE_PROCESS_LIMIT || Feature.enabled?(:git_push_create_all_pipelines, project),
+ execute_project_hooks: execute_project_hooks,
+ create_push_event: !create_bulk_push_event
+ ).execute
+ end
+
+ create_bulk_push_event(ref_type, action, changes) if create_bulk_push_event
+ end
+
+ def create_bulk_push_event(ref_type, action, changes)
+ EventCreateService.new.bulk_push(
+ project,
+ current_user,
+ Gitlab::DataBuilder::Push.build_bulk(action: action, ref_type: ref_type, changes: changes)
+ )
+ end
+
+ def push_service_class_for(ref_type)
+ return Git::TagPushService if ref_type == :tag
+
+ Git::BranchPushService
+ end
+ end
+end
diff --git a/app/services/git/tag_hooks_service.rb b/app/services/git/tag_hooks_service.rb
index e5b109c79d6..0e5e1bbc992 100644
--- a/app/services/git/tag_hooks_service.rb
+++ b/app/services/git/tag_hooks_service.rb
@@ -18,12 +18,12 @@ module Git
def tag
strong_memoize(:tag) do
- next if Gitlab::Git.blank_ref?(params[:newrev])
+ next if Gitlab::Git.blank_ref?(newrev)
- tag_name = Gitlab::Git.ref_name(params[:ref])
+ tag_name = Gitlab::Git.ref_name(ref)
tag = project.repository.find_tag(tag_name)
- tag if tag && tag.target == params[:newrev]
+ tag if tag && tag.target == newrev
end
end
diff --git a/app/services/git/tag_push_service.rb b/app/services/git/tag_push_service.rb
index ee4166dccd0..9a266f7d74c 100644
--- a/app/services/git/tag_push_service.rb
+++ b/app/services/git/tag_push_service.rb
@@ -2,8 +2,10 @@
module Git
class TagPushService < ::BaseService
+ include ChangeParams
+
def execute
- return unless Gitlab::Git.tag_ref?(params[:ref])
+ return unless Gitlab::Git.tag_ref?(ref)
project.repository.before_push_tag
TagHooksService.new(project, current_user, params).execute
diff --git a/app/services/grafana/proxy_service.rb b/app/services/grafana/proxy_service.rb
new file mode 100644
index 00000000000..74fcdc750b0
--- /dev/null
+++ b/app/services/grafana/proxy_service.rb
@@ -0,0 +1,83 @@
+# frozen_string_literal: true
+
+# Proxies calls to a Grafana-integrated Prometheus instance
+# through the Grafana proxy API
+
+# This allows us to fetch and render metrics in GitLab from a Prometheus
+# instance for which dashboards are configured in Grafana
+module Grafana
+ class ProxyService < BaseService
+ include ReactiveCaching
+
+ self.reactive_cache_key = ->(service) { service.cache_key }
+ self.reactive_cache_lease_timeout = 30.seconds
+ self.reactive_cache_refresh_interval = 30.seconds
+ self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
+
+ attr_accessor :project, :datasource_id, :proxy_path, :query_params
+
+ # @param project_id [Integer] Project id for which grafana is configured.
+ #
+ # See #initialize for other parameters.
+ def self.from_cache(project_id, datasource_id, proxy_path, query_params)
+ project = Project.find(project_id)
+
+ new(project, datasource_id, proxy_path, query_params)
+ end
+
+ # @param project [Project] Project for which grafana is configured.
+ # @param datasource_id [String] Grafana datasource id for Prometheus instance
+ # @param proxy_path [String] Path to Prometheus endpoint; EX) 'api/v1/query_range'
+ # @param query_params [Hash<String, String>] Supported params: [query, start, end, step]
+ def initialize(project, datasource_id, proxy_path, query_params)
+ @project = project
+ @datasource_id = datasource_id
+ @proxy_path = proxy_path
+ @query_params = query_params
+ end
+
+ def execute
+ return cannot_proxy_response unless client
+
+ with_reactive_cache(*cache_key) { |result| result }
+ end
+
+ def calculate_reactive_cache(*)
+ return cannot_proxy_response unless client
+
+ response = client.proxy_datasource(
+ datasource_id: datasource_id,
+ proxy_path: proxy_path,
+ query: query_params
+ )
+
+ success(http_status: response.code, body: response.body)
+ rescue ::Grafana::Client::Error => error
+ service_unavailable_response(error)
+ end
+
+ # Required for ReactiveCaching; Usage overridden by
+ # self.reactive_cache_worker_finder
+ def id
+ nil
+ end
+
+ def cache_key
+ [project.id, datasource_id, proxy_path, query_params]
+ end
+
+ private
+
+ def client
+ project.grafana_integration&.client
+ end
+
+ def service_unavailable_response(exception)
+ error(exception.message, :service_unavailable)
+ end
+
+ def cannot_proxy_response
+ error('Proxy support for this API is not available currently')
+ end
+ end
+end
diff --git a/app/services/groups/create_service.rb b/app/services/groups/create_service.rb
index 61bd50616b8..8cc31200689 100644
--- a/app/services/groups/create_service.rb
+++ b/app/services/groups/create_service.rb
@@ -9,6 +9,7 @@ module Groups
def execute
remove_unallowed_params
+ set_visibility_level
@group = Group.new(params)
@@ -68,6 +69,12 @@ module Groups
true
end
+
+ def set_visibility_level
+ return if visibility_level.present?
+
+ params[:visibility_level] = Gitlab::CurrentSettings.current_application_settings.default_group_visibility
+ end
end
end
diff --git a/app/services/groups/transfer_service.rb b/app/services/groups/transfer_service.rb
index fe7e07ef9f0..6902b7bd529 100644
--- a/app/services/groups/transfer_service.rb
+++ b/app/services/groups/transfer_service.rb
@@ -7,7 +7,8 @@ module Groups
namespace_with_same_path: s_('TransferGroup|The parent group already has a subgroup with the same path.'),
group_is_already_root: s_('TransferGroup|Group is already a root group.'),
same_parent_as_current: s_('TransferGroup|Group is already associated to the parent group.'),
- invalid_policies: s_("TransferGroup|You don't have enough permissions.")
+ invalid_policies: s_("TransferGroup|You don't have enough permissions."),
+ group_contains_images: s_('TransferGroup|Cannot update the path because there are projects under this group that contain Docker images in their Container Registry. Please remove the images from your projects first and try again.')
}.freeze
TransferError = Class.new(StandardError)
@@ -46,6 +47,7 @@ module Groups
raise_transfer_error(:same_parent_as_current) if same_parent?
raise_transfer_error(:invalid_policies) unless valid_policies?
raise_transfer_error(:namespace_with_same_path) if namespace_with_same_path?
+ raise_transfer_error(:group_contains_images) if group_projects_contain_registry_images?
end
def group_is_already_root?
@@ -72,6 +74,10 @@ module Groups
end
# rubocop: enable CodeReuse/ActiveRecord
+ def group_projects_contain_registry_images?
+ @group.has_container_repositories?
+ end
+
def update_group_attributes
if @new_parent_group && @new_parent_group.visibility_level < @group.visibility_level
update_children_and_projects_visibility
diff --git a/app/services/groups/update_service.rb b/app/services/groups/update_service.rb
index 534de601e20..be7502a193e 100644
--- a/app/services/groups/update_service.rb
+++ b/app/services/groups/update_service.rb
@@ -8,6 +8,11 @@ module Groups
reject_parent_id!
remove_unallowed_params
+ if renaming_group_with_container_registry_images?
+ group.errors.add(:base, container_images_error)
+ return false
+ end
+
return false unless valid_visibility_level_change?(group, params[:visibility_level])
return false unless valid_share_with_group_lock_change?
@@ -35,6 +40,17 @@ module Groups
# overridden in EE
end
+ def renaming_group_with_container_registry_images?
+ new_path = params[:path]
+
+ new_path && new_path != group.path &&
+ group.has_container_repositories?
+ end
+
+ def container_images_error
+ s_("GroupSettings|Cannot update the path because there are projects under this group that contain Docker images in their Container Registry. Please remove the images from your projects first and try again.")
+ end
+
def after_update
if group.previous_changes.include?(:visibility_level) && group.private?
# don't enqueue immediately to prevent todos removal in case of a mistake
diff --git a/app/services/import_export_clean_up_service.rb b/app/services/import_export_clean_up_service.rb
index 3ecb51b60d0..66ac7dac4ca 100644
--- a/app/services/import_export_clean_up_service.rb
+++ b/app/services/import_export_clean_up_service.rb
@@ -12,16 +12,20 @@ class ImportExportCleanUpService
def execute
Gitlab::Metrics.measure(:import_export_clean_up) do
- clean_up_export_object_files
-
- break unless File.directory?(path)
-
- clean_up_export_files
+ execute_cleanup
end
end
private
+ def execute_cleanup
+ clean_up_export_object_files
+ ensure
+ # We don't want a failure in cleaning up object storage from
+ # blocking us from cleaning up temporary storage.
+ clean_up_export_files if File.directory?(path)
+ end
+
def clean_up_export_files
Gitlab::Popen.popen(%W(find #{path} -not -path #{path} -mmin +#{mmin} -delete))
end
diff --git a/app/services/issuable/clone/content_rewriter.rb b/app/services/issuable/clone/content_rewriter.rb
index f75b51c4be3..67d2f9fd3fe 100644
--- a/app/services/issuable/clone/content_rewriter.rb
+++ b/app/services/issuable/clone/content_rewriter.rb
@@ -39,6 +39,10 @@ module Issuable
if note.system_note_metadata
new_params[:system_note_metadata] = note.system_note_metadata.dup
+
+ # TODO: Implement copying of description versions when an issue is moved
+ # https://gitlab.com/gitlab-org/gitlab/issues/32300
+ new_params[:system_note_metadata].description_version = nil
end
new_note.update(new_params)
diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb
index 805721212ba..14585c2850b 100644
--- a/app/services/issues/close_service.rb
+++ b/app/services/issues/close_service.rb
@@ -4,7 +4,7 @@ module Issues
class CloseService < Issues::BaseService
# Closes the supplied issue if the current user is able to do so.
def execute(issue, commit: nil, notifications: true, system_note: true)
- return issue unless can?(current_user, :update_issue, issue)
+ return issue unless can?(current_user, :update_issue, issue) || issue.is_a?(ExternalIssue)
close_issue(issue,
closed_via: commit,
@@ -18,7 +18,7 @@ module Issues
# The code calling this method is responsible for ensuring that a user is
# allowed to close the given issue.
def close_issue(issue, closed_via: nil, notifications: true, system_note: true)
- if project.jira_tracker? && project.jira_service.active && issue.is_a?(ExternalIssue)
+ if project.jira_tracker_active? && issue.is_a?(ExternalIssue)
project.jira_service.close_issue(closed_via, issue)
todo_service.close_issue(issue, current_user)
return issue
diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb
index dc3c363f650..528b1ea61b3 100644
--- a/app/services/issues/update_service.rb
+++ b/app/services/issues/update_service.rb
@@ -56,7 +56,7 @@ module Issues
handle_milestone_change(issue)
- added_mentions = issue.mentioned_users - old_mentioned_users
+ added_mentions = issue.mentioned_users(current_user) - old_mentioned_users
if added_mentions.present?
notification_service.async.new_mentions_in_issue(issue, added_mentions, current_user)
diff --git a/app/services/issues/zoom_link_service.rb b/app/services/issues/zoom_link_service.rb
index a061ab22875..561c86475e5 100644
--- a/app/services/issues/zoom_link_service.rb
+++ b/app/services/issues/zoom_link_service.rb
@@ -10,6 +10,7 @@ module Issues
def add_link(link)
if can_add_link? && (link = parse_link(link))
+ track_meeting_added_event
success(_('Zoom meeting added'), append_to_description(link))
else
error(_('Failed to add a Zoom meeting'))
@@ -17,11 +18,12 @@ module Issues
end
def can_add_link?
- available? && !link_in_issue_description?
+ can? && !link_in_issue_description?
end
def remove_link
if can_remove_link?
+ track_meeting_removed_event
success(_('Zoom meeting removed'), remove_from_description)
else
error(_('Failed to remove a Zoom meeting'))
@@ -29,7 +31,7 @@ module Issues
end
def can_remove_link?
- available? && link_in_issue_description?
+ can? && link_in_issue_description?
end
def parse_link(link)
@@ -44,6 +46,14 @@ module Issues
issue.description || ''
end
+ def track_meeting_added_event
+ ::Gitlab::Tracking.event('IncidentManagement::ZoomIntegration', 'add_zoom_meeting', label: 'Issue ID', value: issue.id)
+ end
+
+ def track_meeting_removed_event
+ ::Gitlab::Tracking.event('IncidentManagement::ZoomIntegration', 'remove_zoom_meeting', label: 'Issue ID', value: issue.id)
+ end
+
def success(message, description)
ServiceResponse
.success(message: message, payload: { description: description })
@@ -75,14 +85,6 @@ module Issues
issue_description[/(\S+)\z/, 1]
end
- def available?
- feature_enabled? && can?
- end
-
- def feature_enabled?
- Feature.enabled?(:issue_zoom_integration, project)
- end
-
def can?
current_user.can?(:update_issue, project)
end
diff --git a/app/services/merge_requests/post_merge_service.rb b/app/services/merge_requests/post_merge_service.rb
index fbe6c48ac28..0364c0dd479 100644
--- a/app/services/merge_requests/post_merge_service.rb
+++ b/app/services/merge_requests/post_merge_service.rb
@@ -29,9 +29,7 @@ module MergeRequests
closed_issues = merge_request.visible_closing_issues_for(current_user)
closed_issues.each do |issue|
- if can?(current_user, :update_issue, issue)
- Issues::CloseService.new(project, current_user, {}).execute(issue, commit: merge_request)
- end
+ Issues::CloseService.new(project, current_user).execute(issue, commit: merge_request)
end
end
diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb
index edcfc3bf33f..b32499629ff 100644
--- a/app/services/merge_requests/refresh_service.rb
+++ b/app/services/merge_requests/refresh_service.rb
@@ -25,6 +25,7 @@ module MergeRequests
outdate_suggestions
refresh_pipelines_on_merge_requests
abort_auto_merges
+ abort_ff_merge_requests_with_when_pipeline_succeeds
mark_pending_todos_done
cache_merge_requests_closing_issues
@@ -148,6 +149,31 @@ module MergeRequests
end
end
+ def abort_ff_merge_requests_with_when_pipeline_succeeds
+ return unless @project.ff_merge_must_be_possible?
+
+ requests_with_auto_merge_enabled_to(@push.branch_name).each do |merge_request|
+ next unless merge_request.should_be_rebased?
+
+ abort_auto_merge_with_todo(merge_request, 'target branch was updated')
+ end
+ end
+
+ def abort_auto_merge_with_todo(merge_request, reason)
+ response = abort_auto_merge(merge_request, reason)
+ response = ServiceResponse.new(response)
+ return unless response.success?
+
+ todo_service.merge_request_became_unmergeable(merge_request)
+ end
+
+ def requests_with_auto_merge_enabled_to(target_branch)
+ @project
+ .merge_requests
+ .by_target_branch(target_branch)
+ .with_open_merge_when_pipeline_succeeds
+ end
+
def mark_pending_todos_done
merge_requests_for_source_branch.each do |merge_request|
todo_service.merge_request_push(merge_request, @current_user)
diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb
index 4acc3f1981a..ae678d4c036 100644
--- a/app/services/merge_requests/update_service.rb
+++ b/app/services/merge_requests/update_service.rb
@@ -69,7 +69,8 @@ module MergeRequests
)
end
- added_mentions = merge_request.mentioned_users - old_mentioned_users
+ added_mentions = merge_request.mentioned_users(current_user) - old_mentioned_users
+
if added_mentions.present?
notification_service.async.new_mentions_in_merge_request(
merge_request,
diff --git a/app/services/note_summary.rb b/app/services/note_summary.rb
index 60a68568833..6fe14939aaa 100644
--- a/app/services/note_summary.rb
+++ b/app/services/note_summary.rb
@@ -10,6 +10,10 @@ class NoteSummary
project: project, author: author, note: body }
@metadata = { action: action, commit_count: commit_count }.compact
+ if action == 'description' && noteable.saved_description_version
+ @metadata[:description_version] = noteable.saved_description_version
+ end
+
set_commit_params if note[:noteable].is_a?(Commit)
end
diff --git a/app/services/notes/quick_actions_service.rb b/app/services/notes/quick_actions_service.rb
index 076df10bf6f..7e6568b5b25 100644
--- a/app/services/notes/quick_actions_service.rb
+++ b/app/services/notes/quick_actions_service.rb
@@ -50,7 +50,7 @@ module Notes
return if update_params.empty?
return unless supported?(note)
- self.class.noteable_update_service(note).new(note.parent, current_user, update_params).execute(note.noteable)
+ self.class.noteable_update_service(note).new(note.resource_parent, current_user, update_params).execute(note.noteable)
end
end
end
diff --git a/app/services/notes/update_service.rb b/app/services/notes/update_service.rb
index 853faed9d85..573be8fbe8b 100644
--- a/app/services/notes/update_service.rb
+++ b/app/services/notes/update_service.rb
@@ -5,7 +5,7 @@ module Notes
def execute(note)
return note unless note.editable?
- old_mentioned_users = note.mentioned_users.to_a
+ old_mentioned_users = note.mentioned_users(current_user).to_a
note.update(params.merge(updated_by: current_user))
diff --git a/app/services/notification_recipient_service.rb b/app/services/notification_recipient_service.rb
index fca64270cae..9afbb678f5d 100644
--- a/app/services/notification_recipient_service.rb
+++ b/app/services/notification_recipient_service.rb
@@ -28,6 +28,10 @@ module NotificationRecipientService
Builder::ProjectMaintainers.new(*args).notification_recipients
end
+ def self.build_new_release_recipients(*args)
+ Builder::NewRelease.new(*args).notification_recipients
+ end
+
module Builder
class Base
def initialize(*)
@@ -359,6 +363,26 @@ module NotificationRecipientService
end
end
+ class NewRelease < Base
+ attr_reader :target
+
+ def initialize(target)
+ @target = target
+ end
+
+ def build!
+ add_recipients(target.project.authorized_users, :custom, nil)
+ end
+
+ def custom_action
+ :new_release
+ end
+
+ def acting_user
+ target.author
+ end
+ end
+
class MergeRequestUnmergeable < Base
attr_reader :target
def initialize(merge_request)
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index ed357aa0392..b56b2cf14e3 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -289,6 +289,15 @@ class NotificationService
end
end
+ # Notify users when a new release is created
+ def send_new_release_notifications(release)
+ recipients = NotificationRecipientService.build_new_release_recipients(release)
+
+ recipients.each do |recipient|
+ mailer.new_release_email(recipient.user.id, release, recipient.reason).deliver_later
+ end
+ end
+
# Members
def new_access_request(member)
return true unless member.notifiable?(:subscription)
diff --git a/app/services/projects/after_import_service.rb b/app/services/projects/after_import_service.rb
index e30da0f26df..6fc15db9b4c 100644
--- a/app/services/projects/after_import_service.rb
+++ b/app/services/projects/after_import_service.rb
@@ -9,9 +9,16 @@ module Projects
end
def execute
- Projects::HousekeepingService.new(@project).execute do
+ service = Projects::HousekeepingService.new(@project)
+
+ service.execute do
repository.delete_all_refs_except(RESERVED_REF_PREFIXES)
end
+
+ # Right now we don't actually have a way to know if a project
+ # import actually changed, so we increment the counter to avoid
+ # causing GC to run every time.
+ service.increment!
rescue Projects::HousekeepingService::LeaseTaken => e
Rails.logger.info( # rubocop:disable Gitlab/RailsLogger
"Could not perform housekeeping for project #{@project.full_path} (#{@project.id}): #{e}")
diff --git a/app/services/projects/container_repository/cleanup_tags_service.rb b/app/services/projects/container_repository/cleanup_tags_service.rb
index d1d9b9f22e8..1b880a7aab1 100644
--- a/app/services/projects/container_repository/cleanup_tags_service.rb
+++ b/app/services/projects/container_repository/cleanup_tags_service.rb
@@ -40,7 +40,7 @@ module Projects
return unless tags.count == other_tags.count
# delete all tags
- tags.map(&:delete)
+ tags.map(&:unsafe_delete)
end
def group_by_digest(tags)
diff --git a/app/services/projects/container_repository/delete_tags_service.rb b/app/services/projects/container_repository/delete_tags_service.rb
new file mode 100644
index 00000000000..5129e2269a8
--- /dev/null
+++ b/app/services/projects/container_repository/delete_tags_service.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+module Projects
+ module ContainerRepository
+ class DeleteTagsService < BaseService
+ def execute(container_repository)
+ return error('access denied') unless can?(current_user, :destroy_container_image, project)
+
+ tag_names = params[:tags]
+ return error('not tags specified') if tag_names.blank?
+
+ if can_use?
+ smart_delete(container_repository, tag_names)
+ else
+ unsafe_delete(container_repository, tag_names)
+ end
+ end
+
+ private
+
+ def unsafe_delete(container_repository, tag_names)
+ deleted_tags = tag_names.select do |tag_name|
+ container_repository.tag(tag_name).unsafe_delete
+ end
+
+ return error('could not delete tags') if deleted_tags.empty?
+
+ success(deleted: deleted_tags)
+ end
+
+ # Replace a tag on the registry with a dummy tag.
+ # This is a hack as the registry doesn't support deleting individual
+ # tags. This code effectively pushes a dummy image and assigns the tag to it.
+ # This way when the tag is deleted only the dummy image is affected.
+ # See https://gitlab.com/gitlab-org/gitlab/issues/15737 for a discussion
+ def smart_delete(container_repository, tag_names)
+ # generates the blobs for the dummy image
+ dummy_manifest = container_repository.client.generate_empty_manifest(container_repository.path)
+
+ # update the manifests of the tags with the new dummy image
+ tag_digests = tag_names.map do |name|
+ container_repository.client.put_tag(container_repository.path, name, dummy_manifest)
+ end
+
+ # make sure the digests are the same (it should always be)
+ tag_digests.uniq!
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ Gitlab::Sentry.track_exception(ArgumentError.new('multiple tag digests')) if tag_digests.many?
+
+ # Deletes the dummy image
+ # All created tag digests are the same since they all have the same dummy image.
+ # a single delete is sufficient to remove all tags with it
+ if container_repository.delete_tag_by_digest(tag_digests.first)
+ success(deleted: tag_names)
+ else
+ error('could not delete tags')
+ end
+ end
+
+ def can_use?
+ Feature.enabled?(:container_registry_smart_delete, project, default_enabled: true)
+ end
+ end
+ end
+end
diff --git a/app/services/projects/create_from_template_service.rb b/app/services/projects/create_from_template_service.rb
index 91ece024e13..a207fd2c574 100644
--- a/app/services/projects/create_from_template_service.rb
+++ b/app/services/projects/create_from_template_service.rb
@@ -4,8 +4,11 @@ module Projects
class CreateFromTemplateService < BaseService
include Gitlab::Utils::StrongMemoize
+ attr_reader :template_name
+
def initialize(user, params)
@current_user, @params = user, params.to_h.dup
+ @template_name = @params.delete(:template_name).presence
end
def execute
@@ -21,12 +24,6 @@ module Projects
file&.close
end
- def template_name
- strong_memoize(:template_name) do
- params.delete(:template_name).presence
- end
- end
-
private
def validate_template!
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb
index 728eb039b54..ef06545b27d 100644
--- a/app/services/projects/create_service.rb
+++ b/app/services/projects/create_service.rb
@@ -13,7 +13,7 @@ module Projects
end
def execute
- if @params[:template_name].present?
+ if create_from_template?
return ::Projects::CreateFromTemplateService.new(current_user, params).execute
end
@@ -184,6 +184,10 @@ module Projects
private
+ def create_from_template?
+ @params[:template_name].present? || @params[:template_project_id].present?
+ end
+
def import_schedule
if @project.errors.empty?
@project.import_state.schedule if @project.import? && !@project.bare_repository_import?
diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb
index 5fdf98c3c5e..90e703e7050 100644
--- a/app/services/projects/destroy_service.rb
+++ b/app/services/projects/destroy_service.rb
@@ -123,11 +123,9 @@ module Projects
mv_repository(old_path, new_path)
end
- # rubocop: disable CodeReuse/ActiveRecord
def repo_exists?(path)
- gitlab_shell.exists?(project.repository_storage, path + '.git')
+ gitlab_shell.repository_exists?(project.repository_storage, path + '.git')
end
- # rubocop: enable CodeReuse/ActiveRecord
def mv_repository(from_path, to_path)
return true unless repo_exists?(from_path)
diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb
index 17686b45900..47ab7f9a8a0 100644
--- a/app/services/projects/fork_service.rb
+++ b/app/services/projects/fork_service.rb
@@ -43,6 +43,7 @@ module Projects
shared_runners_enabled: @project.shared_runners_enabled,
namespace_id: target_namespace.id,
fork_network: fork_network,
+ ci_config_path: @project.ci_config_path,
# We need to set ci_default_git_depth to 0 for the forked project when
# @project.ci_default_git_depth is nil in order to keep the same behaviour
# and not get ProjectCiCdSetting::DEFAULT_GIT_DEPTH set on create
diff --git a/app/services/projects/hashed_storage/base_repository_service.rb b/app/services/projects/hashed_storage/base_repository_service.rb
index f97a28b8c3b..b7e9d3e8791 100644
--- a/app/services/projects/hashed_storage/base_repository_service.rb
+++ b/app/services/projects/hashed_storage/base_repository_service.rb
@@ -20,16 +20,13 @@ module Projects
protected
- # rubocop: disable CodeReuse/ActiveRecord
def has_wiki?
- gitlab_shell.exists?(project.repository_storage, "#{old_wiki_disk_path}.git")
+ gitlab_shell.repository_exists?(project.repository_storage, "#{old_wiki_disk_path}.git")
end
- # rubocop: enable CodeReuse/ActiveRecord
- # rubocop: disable CodeReuse/ActiveRecord
def move_repository(from_name, to_name)
- from_exists = gitlab_shell.exists?(project.repository_storage, "#{from_name}.git")
- to_exists = gitlab_shell.exists?(project.repository_storage, "#{to_name}.git")
+ from_exists = gitlab_shell.repository_exists?(project.repository_storage, "#{from_name}.git")
+ to_exists = gitlab_shell.repository_exists?(project.repository_storage, "#{to_name}.git")
# If we don't find the repository on either original or target we should log that as it could be an issue if the
# project was not originally empty.
@@ -46,7 +43,6 @@ module Projects
gitlab_shell.mv_repository(project.repository_storage, from_name, to_name)
end
- # rubocop: enable CodeReuse/ActiveRecord
def rollback_folder_move
move_repository(new_disk_path, old_disk_path)
diff --git a/app/services/projects/hashed_storage/migrate_repository_service.rb b/app/services/projects/hashed_storage/migrate_repository_service.rb
index e248a13c702..0a0bd90cd20 100644
--- a/app/services/projects/hashed_storage/migrate_repository_service.rb
+++ b/app/services/projects/hashed_storage/migrate_repository_service.rb
@@ -8,7 +8,6 @@ module Projects
@old_storage_version = project.storage_version
project.storage_version = ::Project::HASHED_STORAGE_FEATURES[:repository]
- project.ensure_storage_path_exists
@new_disk_path = project.disk_path
diff --git a/app/services/projects/hashed_storage/rollback_repository_service.rb b/app/services/projects/hashed_storage/rollback_repository_service.rb
index 67733f4770b..a705112ebe3 100644
--- a/app/services/projects/hashed_storage/rollback_repository_service.rb
+++ b/app/services/projects/hashed_storage/rollback_repository_service.rb
@@ -8,7 +8,6 @@ module Projects
@old_storage_version = project.storage_version
project.storage_version = nil
- project.ensure_storage_path_exists
@new_disk_path = project.disk_path
diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb
index 9c6d7ef41f6..d3638c57552 100644
--- a/app/services/projects/import_export/export_service.rb
+++ b/app/services/projects/import_export/export_service.rb
@@ -12,6 +12,8 @@ module Projects
private
+ attr_accessor :shared
+
def execute_after_export_action(after_export_strategy)
return unless after_export_strategy
@@ -21,50 +23,54 @@ module Projects
end
def save_all!
- if save_services
- Gitlab::ImportExport::Saver.save(project: project, shared: @shared)
+ if save_exporters
+ Gitlab::ImportExport::Saver.save(project: project, shared: shared)
notify_success
else
cleanup_and_notify_error!
end
end
- def save_services
- [version_saver, avatar_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver, lfs_saver].all?(&:save)
+ def save_exporters
+ exporters.all?(&:save)
+ end
+
+ def exporters
+ [version_saver, avatar_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver, lfs_saver]
end
def version_saver
- Gitlab::ImportExport::VersionSaver.new(shared: @shared)
+ Gitlab::ImportExport::VersionSaver.new(shared: shared)
end
def avatar_saver
- Gitlab::ImportExport::AvatarSaver.new(project: project, shared: @shared)
+ Gitlab::ImportExport::AvatarSaver.new(project: project, shared: shared)
end
def project_tree_saver
- Gitlab::ImportExport::ProjectTreeSaver.new(project: project, current_user: @current_user, shared: @shared, params: @params)
+ Gitlab::ImportExport::ProjectTreeSaver.new(project: project, current_user: current_user, shared: shared, params: params)
end
def uploads_saver
- Gitlab::ImportExport::UploadsSaver.new(project: project, shared: @shared)
+ Gitlab::ImportExport::UploadsSaver.new(project: project, shared: shared)
end
def repo_saver
- Gitlab::ImportExport::RepoSaver.new(project: project, shared: @shared)
+ Gitlab::ImportExport::RepoSaver.new(project: project, shared: shared)
end
def wiki_repo_saver
- Gitlab::ImportExport::WikiRepoSaver.new(project: project, shared: @shared)
+ Gitlab::ImportExport::WikiRepoSaver.new(project: project, shared: shared)
end
def lfs_saver
- Gitlab::ImportExport::LfsSaver.new(project: project, shared: @shared)
+ Gitlab::ImportExport::LfsSaver.new(project: project, shared: shared)
end
def cleanup_and_notify_error
- Rails.logger.error("Import/Export - Project #{project.name} with ID: #{project.id} export error - #{@shared.errors.join(', ')}") # rubocop:disable Gitlab/RailsLogger
+ Rails.logger.error("Import/Export - Project #{project.name} with ID: #{project.id} export error - #{shared.errors.join(', ')}") # rubocop:disable Gitlab/RailsLogger
- FileUtils.rm_rf(@shared.export_path)
+ FileUtils.rm_rf(shared.export_path)
notify_error
end
@@ -72,7 +78,7 @@ module Projects
def cleanup_and_notify_error!
cleanup_and_notify_error
- raise Gitlab::ImportExport::Error.new(@shared.errors.join(', '))
+ raise Gitlab::ImportExport::Error.new(shared.errors.to_sentence)
end
def notify_success
@@ -80,8 +86,10 @@ module Projects
end
def notify_error
- notification_service.project_not_exported(@project, @current_user, @shared.errors)
+ notification_service.project_not_exported(project, current_user, shared.errors)
end
end
end
end
+
+Projects::ImportExport::ExportService.prepend_if_ee('EE::Projects::ImportExport::ExportService')
diff --git a/app/services/projects/operations/update_service.rb b/app/services/projects/operations/update_service.rb
index dd72c2844c2..64519501ff4 100644
--- a/app/services/projects/operations/update_service.rb
+++ b/app/services/projects/operations/update_service.rb
@@ -12,7 +12,9 @@ module Projects
private
def project_update_params
- error_tracking_params.merge(metrics_setting_params)
+ error_tracking_params
+ .merge(metrics_setting_params)
+ .merge(grafana_integration_params)
end
def metrics_setting_params
@@ -44,6 +46,14 @@ module Projects
}
}
end
+
+ def grafana_integration_params
+ return {} unless attrs = params[:grafana_integration_attributes]
+
+ destroy = attrs[:grafana_url].blank? && attrs[:token].blank?
+
+ { grafana_integration_attributes: attrs.merge(_destroy: destroy) }
+ end
end
end
end
diff --git a/app/services/projects/update_pages_service.rb b/app/services/projects/update_pages_service.rb
index fa7a4f0ed82..e8a87fc4320 100644
--- a/app/services/projects/update_pages_service.rb
+++ b/app/services/projects/update_pages_service.rb
@@ -53,6 +53,7 @@ module Projects
def success
@status.success
+ @project.mark_pages_as_deployed
super
end
diff --git a/app/services/search/snippet_service.rb b/app/services/search/snippet_service.rb
index 7c6c6878400..e686d3bf7c2 100644
--- a/app/services/search/snippet_service.rb
+++ b/app/services/search/snippet_service.rb
@@ -1,17 +1,9 @@
# frozen_string_literal: true
module Search
- class SnippetService
- attr_accessor :current_user, :params
-
- def initialize(user, params)
- @current_user, @params = user, params.dup
- end
-
+ class SnippetService < Search::GlobalService
def execute
- snippets = SnippetsFinder.new(current_user).execute
-
- Gitlab::SnippetSearchResults.new(snippets, params[:search])
+ Gitlab::SnippetSearchResults.new(current_user, params[:search])
end
def scope
diff --git a/app/services/spam_service.rb b/app/services/spam_service.rb
index f2f133dae28..babe69cfdc8 100644
--- a/app/services/spam_service.rb
+++ b/app/services/spam_service.rb
@@ -37,7 +37,8 @@ class SpamService
else
# Otherwise, it goes to Akismet and check if it's a spam. If that's the
# case, it assigns spammable record as "spam" and create a SpamLog record.
- spammable.spam = check(api)
+ possible_spam = check(api)
+ spammable.spam = possible_spam unless spammable.allow_possible_spam?
spammable.spam_log = spam_log
end
end
diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb
index c01094bd689..b3eee01ea7a 100644
--- a/app/services/system_note_service.rb
+++ b/app/services/system_note_service.rb
@@ -16,20 +16,9 @@ module SystemNoteService
# existing_commits - Array of Commits added in a previous push
# oldrev - Optional String SHA of a previous Commit
#
- # See new_commit_summary and existing_commit_summary.
- #
# Returns the created Note object
def add_commits(noteable, project, author, new_commits, existing_commits = [], oldrev = nil)
- total_count = new_commits.length + existing_commits.length
- commits_text = "#{total_count} commit".pluralize(total_count)
-
- text_parts = ["added #{commits_text}"]
- text_parts << commits_list(noteable, new_commits, existing_commits, oldrev)
- text_parts << "[Compare with previous version](#{diff_comparison_path(noteable, project, oldrev)})"
-
- body = text_parts.join("\n\n")
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'commit', commit_count: total_count))
+ ::SystemNotes::CommitService.new(noteable: noteable, project: project, author: author).add_commits(new_commits, existing_commits, oldrev)
end
# Called when a commit was tagged
@@ -41,84 +30,19 @@ module SystemNoteService
#
# Returns the created Note object
def tag_commit(noteable, project, author, tag_name)
- link = url_helpers.project_tag_path(project, id: tag_name)
- body = "tagged commit #{noteable.sha} to [`#{tag_name}`](#{link})"
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'tag'))
+ ::SystemNotes::CommitService.new(noteable: noteable, project: project, author: author).tag_commit(tag_name)
end
- # Called when the assignee of a Noteable is changed or removed
- #
- # noteable - Noteable object
- # project - Project owning noteable
- # author - User performing the change
- # assignee - User being assigned, or nil
- #
- # Example Note text:
- #
- # "removed assignee"
- #
- # "assigned to @rspeicher"
- #
- # Returns the created Note object
def change_assignee(noteable, project, author, assignee)
- body = assignee.nil? ? 'removed assignee' : "assigned to #{assignee.to_reference}"
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'assignee'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_assignee(assignee)
end
- # Called when the assignees of an issuable is changed or removed
- #
- # issuable - Issuable object (responds to assignees)
- # project - Project owning noteable
- # author - User performing the change
- # assignees - Users being assigned, or nil
- #
- # Example Note text:
- #
- # "removed all assignees"
- #
- # "assigned to @user1 additionally to @user2"
- #
- # "assigned to @user1, @user2 and @user3 and unassigned from @user4 and @user5"
- #
- # "assigned to @user1 and @user2"
- #
- # Returns the created Note object
def change_issuable_assignees(issuable, project, author, old_assignees)
- unassigned_users = old_assignees - issuable.assignees
- added_users = issuable.assignees.to_a - old_assignees
- text_parts = []
-
- Gitlab::I18n.with_default_locale do
- text_parts << "assigned to #{added_users.map(&:to_reference).to_sentence}" if added_users.any?
- text_parts << "unassigned #{unassigned_users.map(&:to_reference).to_sentence}" if unassigned_users.any?
- end
-
- body = text_parts.join(' and ')
-
- create_note(NoteSummary.new(issuable, project, author, body, action: 'assignee'))
+ ::SystemNotes::IssuablesService.new(noteable: issuable, project: project, author: author).change_issuable_assignees(old_assignees)
end
- # Called when the milestone of a Noteable is changed
- #
- # noteable - Noteable object
- # project - Project owning noteable
- # author - User performing the change
- # milestone - Milestone being assigned, or nil
- #
- # Example Note text:
- #
- # "removed milestone"
- #
- # "changed milestone to 7.11"
- #
- # Returns the created Note object
def change_milestone(noteable, project, author, milestone)
- format = milestone&.group_milestone? ? :name : :iid
- body = milestone.nil? ? 'removed milestone' : "changed milestone to #{milestone.to_reference(project, format: format)}"
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'milestone'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_milestone(milestone)
end
# Called when the due_date of a Noteable is changed
@@ -198,28 +122,8 @@ module SystemNoteService
create_note(NoteSummary.new(noteable, project, author, body, action: 'time_tracking'))
end
- # Called when the status of a Noteable is changed
- #
- # noteable - Noteable object
- # project - Project owning noteable
- # author - User performing the change
- # status - String status
- # source - Mentionable performing the change, or nil
- #
- # Example Note text:
- #
- # "merged"
- #
- # "closed via bc17db76"
- #
- # Returns the created Note object
def change_status(noteable, project, author, status, source = nil)
- body = status.dup
- body << " via #{source.gfm_reference(project)}" if source
-
- action = status == 'reopened' ? 'opened' : status
-
- create_note(NoteSummary.new(noteable, project, author, body, action: action))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_status(status, source)
end
# Called when 'merge when pipeline succeeds' is executed
@@ -302,69 +206,16 @@ module SystemNoteService
note
end
- # Called when the title of a Noteable is changed
- #
- # noteable - Noteable object that responds to `title`
- # project - Project owning noteable
- # author - User performing the change
- # old_title - Previous String title
- #
- # Example Note text:
- #
- # "changed title from **Old** to **New**"
- #
- # Returns the created Note object
def change_title(noteable, project, author, old_title)
- new_title = noteable.title.dup
-
- old_diffs, new_diffs = Gitlab::Diff::InlineDiff.new(old_title, new_title).inline_diffs
-
- marked_old_title = Gitlab::Diff::InlineDiffMarkdownMarker.new(old_title).mark(old_diffs, mode: :deletion)
- marked_new_title = Gitlab::Diff::InlineDiffMarkdownMarker.new(new_title).mark(new_diffs, mode: :addition)
-
- body = "changed title from **#{marked_old_title}** to **#{marked_new_title}**"
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'title'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_title(old_title)
end
- # Called when the description of a Noteable is changed
- #
- # noteable - Noteable object that responds to `description`
- # project - Project owning noteable
- # author - User performing the change
- #
- # Example Note text:
- #
- # "changed the description"
- #
- # Returns the created Note object
def change_description(noteable, project, author)
- body = 'changed the description'
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'description'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_description
end
- # Called when the confidentiality changes
- #
- # issue - Issue object
- # project - Project owning the issue
- # author - User performing the change
- #
- # Example Note text:
- #
- # "made the issue confidential"
- #
- # Returns the created Note object
def change_issue_confidentiality(issue, project, author)
- if issue.confidential
- body = 'made the issue confidential'
- action = 'confidential'
- else
- body = 'made the issue visible to everyone'
- action = 'visible'
- end
-
- create_note(NoteSummary.new(issue, project, author, body, action: action))
+ ::SystemNotes::IssuablesService.new(noteable: issue, project: project, author: author).change_issue_confidentiality
end
# Called when a branch in Noteable is changed
@@ -433,195 +284,48 @@ module SystemNoteService
create_note(NoteSummary.new(issue, project, author, body, action: 'merge'))
end
- # Called when a Mentionable references a Noteable
- #
- # noteable - Noteable object being referenced
- # mentioner - Mentionable object
- # author - User performing the reference
- #
- # Example Note text:
- #
- # "mentioned in #1"
- #
- # "mentioned in !2"
- #
- # "mentioned in 54f7727c"
- #
- # See cross_reference_note_content.
- #
- # Returns the created Note object
def cross_reference(noteable, mentioner, author)
- return if cross_reference_disallowed?(noteable, mentioner)
-
- gfm_reference = mentioner.gfm_reference(noteable.project || noteable.group)
- body = cross_reference_note_content(gfm_reference)
-
- if noteable.is_a?(ExternalIssue)
- noteable.project.issues_tracker.create_cross_reference_note(noteable, mentioner, author)
- else
- create_note(NoteSummary.new(noteable, noteable.project, author, body, action: 'cross_reference'))
- end
+ ::SystemNotes::IssuablesService.new(noteable: noteable, author: author).cross_reference(mentioner)
end
- # Check if a cross-reference is disallowed
- #
- # This method prevents adding a "mentioned in !1" note on every single commit
- # in a merge request. Additionally, it prevents the creation of references to
- # external issues (which would fail).
- #
- # noteable - Noteable object being referenced
- # mentioner - Mentionable object
- #
- # Returns Boolean
- def cross_reference_disallowed?(noteable, mentioner)
- return true if noteable.is_a?(ExternalIssue) && !noteable.project.jira_tracker_active?
- return false unless mentioner.is_a?(MergeRequest)
- return false unless noteable.is_a?(Commit)
-
- mentioner.commits.include?(noteable)
- end
-
- # Check if a cross reference to a noteable from a mentioner already exists
- #
- # This method is used to prevent multiple notes being created for a mention
- # when a issue is updated, for example. The method also calls notes_for_mentioner
- # to check if the mentioner is a commit, and return matches only on commit hash
- # instead of project + commit, to avoid repeated mentions from forks.
- #
- # noteable - Noteable object being referenced
- # mentioner - Mentionable object
- #
- # Returns Boolean
def cross_reference_exists?(noteable, mentioner)
- notes = noteable.notes.system
- notes_for_mentioner(mentioner, noteable, notes).exists?
- end
-
- # Build an Array of lines detailing each commit added in a merge request
- #
- # new_commits - Array of new Commit objects
- #
- # Returns an Array of Strings
- def new_commit_summary(new_commits)
- new_commits.collect do |commit|
- content_tag('li', "#{commit.short_id} - #{commit.title}")
- end
+ ::SystemNotes::IssuablesService.new(noteable: noteable).cross_reference_exists?(mentioner)
end
- # Called when the status of a Task has changed
- #
- # noteable - Noteable object.
- # project - Project owning noteable
- # author - User performing the change
- # new_task - TaskList::Item object.
- #
- # Example Note text:
- #
- # "marked the task Whatever as completed."
- #
- # Returns the created Note object
def change_task_status(noteable, project, author, new_task)
- status_label = new_task.complete? ? Taskable::COMPLETED : Taskable::INCOMPLETE
- body = "marked the task **#{new_task.source}** as #{status_label}"
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'task'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_task_status(new_task)
end
- # Called when noteable has been moved to another project
- #
- # direction - symbol, :to or :from
- # noteable - Noteable object
- # noteable_ref - Referenced noteable
- # author - User performing the move
- #
- # Example Note text:
- #
- # "moved to some_namespace/project_new#11"
- #
- # Returns the created Note object
def noteable_moved(noteable, project, noteable_ref, author, direction:)
- unless [:to, :from].include?(direction)
- raise ArgumentError, "Invalid direction `#{direction}`"
- end
-
- cross_reference = noteable_ref.to_reference(project)
- body = "moved #{direction} #{cross_reference}"
-
- create_note(NoteSummary.new(noteable, project, author, body, action: 'moved'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).noteable_moved(noteable_ref, direction)
end
- # Called when a Noteable has been marked as a duplicate of another Issue
- #
- # noteable - Noteable object
- # project - Project owning noteable
- # author - User performing the change
- # canonical_issue - Issue that this is a duplicate of
- #
- # Example Note text:
- #
- # "marked this issue as a duplicate of #1234"
- #
- # "marked this issue as a duplicate of other_project#5678"
- #
- # Returns the created Note object
def mark_duplicate_issue(noteable, project, author, canonical_issue)
- body = "marked this issue as a duplicate of #{canonical_issue.to_reference(project)}"
- create_note(NoteSummary.new(noteable, project, author, body, action: 'duplicate'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).mark_duplicate_issue(canonical_issue)
end
- # Called when a Noteable has been marked as the canonical Issue of a duplicate
- #
- # noteable - Noteable object
- # project - Project owning noteable
- # author - User performing the change
- # duplicate_issue - Issue that was a duplicate of this
- #
- # Example Note text:
- #
- # "marked #1234 as a duplicate of this issue"
- #
- # "marked other_project#5678 as a duplicate of this issue"
- #
- # Returns the created Note object
def mark_canonical_issue_of_duplicate(noteable, project, author, duplicate_issue)
- body = "marked #{duplicate_issue.to_reference(project)} as a duplicate of this issue"
- create_note(NoteSummary.new(noteable, project, author, body, action: 'duplicate'))
+ ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).mark_canonical_issue_of_duplicate(duplicate_issue)
end
def discussion_lock(issuable, author)
- action = issuable.discussion_locked? ? 'locked' : 'unlocked'
- body = "#{action} this #{issuable.class.to_s.titleize.downcase}"
-
- create_note(NoteSummary.new(issuable, issuable.project, author, body, action: action))
+ ::SystemNotes::IssuablesService.new(noteable: issuable, project: issuable.project, author: author).discussion_lock
end
- def cross_reference?(note_text)
- note_text =~ /\A#{cross_reference_note_prefix}/i
+ def cross_reference_disallowed?(noteable, mentioner)
+ ::SystemNotes::IssuablesService.new(noteable: noteable).cross_reference_disallowed?(mentioner)
end
def zoom_link_added(issue, project, author)
- create_note(NoteSummary.new(issue, project, author, _('added a Zoom call to this issue'), action: 'pinned_embed'))
+ ::SystemNotes::ZoomService.new(noteable: issue, project: project, author: author).zoom_link_added
end
def zoom_link_removed(issue, project, author)
- create_note(NoteSummary.new(issue, project, author, _('removed a Zoom call from this issue'), action: 'pinned_embed'))
+ ::SystemNotes::ZoomService.new(noteable: issue, project: project, author: author).zoom_link_removed
end
private
- # rubocop: disable CodeReuse/ActiveRecord
- def notes_for_mentioner(mentioner, noteable, notes)
- if mentioner.is_a?(Commit)
- text = "#{cross_reference_note_prefix}%#{mentioner.to_reference(nil)}"
- notes.where('(note LIKE ? OR note LIKE ?)', text, text.capitalize)
- else
- gfm_reference = mentioner.gfm_reference(noteable.project || noteable.group)
- text = cross_reference_note_content(gfm_reference)
- notes.where(note: [text, text.capitalize])
- end
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
def create_note(note_summary)
note = Note.create(note_summary.note.merge(system: true))
note.system_note_metadata = SystemNoteMetadata.new(note_summary.metadata) if note_summary.metadata?
@@ -629,79 +333,10 @@ module SystemNoteService
note
end
- def cross_reference_note_prefix
- 'mentioned in '
- end
-
- def cross_reference_note_content(gfm_reference)
- "#{cross_reference_note_prefix}#{gfm_reference}"
- end
-
- # Builds a list of existing and new commits according to existing_commits and
- # new_commits methods.
- # Returns a String wrapped in `ul` and `li` tags.
- def commits_list(noteable, new_commits, existing_commits, oldrev)
- existing_commit_summary = existing_commit_summary(noteable, existing_commits, oldrev)
- new_commit_summary = new_commit_summary(new_commits).join
-
- content_tag('ul', "#{existing_commit_summary}#{new_commit_summary}".html_safe)
- end
-
- # Build a single line summarizing existing commits being added in a merge
- # request
- #
- # noteable - MergeRequest object
- # existing_commits - Array of existing Commit objects
- # oldrev - Optional String SHA of a previous Commit
- #
- # Examples:
- #
- # "* ea0f8418...2f4426b7 - 24 commits from branch `master`"
- #
- # "* ea0f8418..4188f0ea - 15 commits from branch `fork:master`"
- #
- # "* ea0f8418 - 1 commit from branch `feature`"
- #
- # Returns a newline-terminated String
- def existing_commit_summary(noteable, existing_commits, oldrev = nil)
- return '' if existing_commits.empty?
-
- count = existing_commits.size
-
- commit_ids = if count == 1
- existing_commits.first.short_id
- else
- if oldrev && !Gitlab::Git.blank_ref?(oldrev)
- "#{Commit.truncate_sha(oldrev)}...#{existing_commits.last.short_id}"
- else
- "#{existing_commits.first.short_id}..#{existing_commits.last.short_id}"
- end
- end
-
- commits_text = "#{count} commit".pluralize(count)
-
- branch = noteable.target_branch
- branch = "#{noteable.target_project_namespace}:#{branch}" if noteable.for_fork?
-
- branch_name = content_tag('code', branch)
- content_tag('li', "#{commit_ids} - #{commits_text} from branch #{branch_name}".html_safe)
- end
-
def url_helpers
@url_helpers ||= Gitlab::Routing.url_helpers
end
- def diff_comparison_path(merge_request, project, oldrev)
- diff_id = merge_request.merge_request_diff.id
-
- url_helpers.diffs_project_merge_request_path(
- project,
- merge_request,
- diff_id: diff_id,
- start_sha: oldrev
- )
- end
-
def content_tag(*args)
ActionController::Base.helpers.content_tag(*args)
end
diff --git a/app/services/system_notes/base_service.rb b/app/services/system_notes/base_service.rb
new file mode 100644
index 00000000000..7341a25b133
--- /dev/null
+++ b/app/services/system_notes/base_service.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+module SystemNotes
+ class BaseService
+ attr_reader :noteable, :project, :author
+
+ def initialize(noteable: nil, author: nil, project: nil)
+ @noteable = noteable
+ @project = project
+ @author = author
+ end
+
+ protected
+
+ def create_note(note_summary)
+ note = Note.create(note_summary.note.merge(system: true))
+ note.system_note_metadata = SystemNoteMetadata.new(note_summary.metadata) if note_summary.metadata?
+
+ note
+ end
+
+ def content_tag(*args)
+ ActionController::Base.helpers.content_tag(*args)
+ end
+
+ def url_helpers
+ @url_helpers ||= Gitlab::Routing.url_helpers
+ end
+ end
+end
diff --git a/app/services/system_notes/commit_service.rb b/app/services/system_notes/commit_service.rb
new file mode 100644
index 00000000000..11119956e0f
--- /dev/null
+++ b/app/services/system_notes/commit_service.rb
@@ -0,0 +1,112 @@
+# frozen_string_literal: true
+
+module SystemNotes
+ class CommitService < ::SystemNotes::BaseService
+ # Called when commits are added to a Merge Request
+ #
+ # new_commits - Array of Commits added since last push
+ # existing_commits - Array of Commits added in a previous push
+ # oldrev - Optional String SHA of a previous Commit
+ #
+ # See new_commit_summary and existing_commit_summary.
+ #
+ # Returns the created Note object
+ def add_commits(new_commits, existing_commits = [], oldrev = nil)
+ total_count = new_commits.length + existing_commits.length
+ commits_text = "#{total_count} commit".pluralize(total_count)
+
+ text_parts = ["added #{commits_text}"]
+ text_parts << commits_list(noteable, new_commits, existing_commits, oldrev)
+ text_parts << "[Compare with previous version](#{diff_comparison_path(noteable, project, oldrev)})"
+
+ body = text_parts.join("\n\n")
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'commit', commit_count: total_count))
+ end
+
+ # Called when a commit was tagged
+ #
+ # tag_name - The created tag name
+ #
+ # Returns the created Note object
+ def tag_commit(tag_name)
+ link = url_helpers.project_tag_path(project, id: tag_name)
+ body = "tagged commit #{noteable.sha} to [`#{tag_name}`](#{link})"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'tag'))
+ end
+
+ # Build an Array of lines detailing each commit added in a merge request
+ #
+ # new_commits - Array of new Commit objects
+ #
+ # Returns an Array of Strings
+ def new_commit_summary(new_commits)
+ new_commits.collect do |commit|
+ content_tag('li', "#{commit.short_id} - #{commit.title}")
+ end
+ end
+
+ private
+
+ # Builds a list of existing and new commits according to existing_commits and
+ # new_commits methods.
+ # Returns a String wrapped in `ul` and `li` tags.
+ def commits_list(noteable, new_commits, existing_commits, oldrev)
+ existing_commit_summary = existing_commit_summary(noteable, existing_commits, oldrev)
+ new_commit_summary = new_commit_summary(new_commits).join
+
+ content_tag('ul', "#{existing_commit_summary}#{new_commit_summary}".html_safe)
+ end
+
+ # Build a single line summarizing existing commits being added in a merge
+ # request
+ #
+ # existing_commits - Array of existing Commit objects
+ # oldrev - Optional String SHA of a previous Commit
+ #
+ # Examples:
+ #
+ # "* ea0f8418...2f4426b7 - 24 commits from branch `master`"
+ #
+ # "* ea0f8418..4188f0ea - 15 commits from branch `fork:master`"
+ #
+ # "* ea0f8418 - 1 commit from branch `feature`"
+ #
+ # Returns a newline-terminated String
+ def existing_commit_summary(noteable, existing_commits, oldrev = nil)
+ return '' if existing_commits.empty?
+
+ count = existing_commits.size
+
+ commit_ids = if count == 1
+ existing_commits.first.short_id
+ else
+ if oldrev && !Gitlab::Git.blank_ref?(oldrev)
+ "#{Commit.truncate_sha(oldrev)}...#{existing_commits.last.short_id}"
+ else
+ "#{existing_commits.first.short_id}..#{existing_commits.last.short_id}"
+ end
+ end
+
+ commits_text = "#{count} commit".pluralize(count)
+
+ branch = noteable.target_branch
+ branch = "#{noteable.target_project_namespace}:#{branch}" if noteable.for_fork?
+
+ branch_name = content_tag('code', branch)
+ content_tag('li', "#{commit_ids} - #{commits_text} from branch #{branch_name}".html_safe)
+ end
+
+ def diff_comparison_path(merge_request, project, oldrev)
+ diff_id = merge_request.merge_request_diff.id
+
+ url_helpers.diffs_project_merge_request_path(
+ project,
+ merge_request,
+ diff_id: diff_id,
+ start_sha: oldrev
+ )
+ end
+ end
+end
diff --git a/app/services/system_notes/issuables_service.rb b/app/services/system_notes/issuables_service.rb
new file mode 100644
index 00000000000..6fffd2ed4bf
--- /dev/null
+++ b/app/services/system_notes/issuables_service.rb
@@ -0,0 +1,312 @@
+# frozen_string_literal: true
+
+module SystemNotes
+ class IssuablesService < ::SystemNotes::BaseService
+ # Called when the assignee of a Noteable is changed or removed
+ #
+ # assignee - User being assigned, or nil
+ #
+ # Example Note text:
+ #
+ # "removed assignee"
+ #
+ # "assigned to @rspeicher"
+ #
+ # Returns the created Note object
+ def change_assignee(assignee)
+ body = assignee.nil? ? 'removed assignee' : "assigned to #{assignee.to_reference}"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'assignee'))
+ end
+
+ # Called when the assignees of an issuable is changed or removed
+ #
+ # assignees - Users being assigned, or nil
+ #
+ # Example Note text:
+ #
+ # "removed all assignees"
+ #
+ # "assigned to @user1 additionally to @user2"
+ #
+ # "assigned to @user1, @user2 and @user3 and unassigned from @user4 and @user5"
+ #
+ # "assigned to @user1 and @user2"
+ #
+ # Returns the created Note object
+ def change_issuable_assignees(old_assignees)
+ unassigned_users = old_assignees - noteable.assignees
+ added_users = noteable.assignees.to_a - old_assignees
+ text_parts = []
+
+ Gitlab::I18n.with_default_locale do
+ text_parts << "assigned to #{added_users.map(&:to_reference).to_sentence}" if added_users.any?
+ text_parts << "unassigned #{unassigned_users.map(&:to_reference).to_sentence}" if unassigned_users.any?
+ end
+
+ body = text_parts.join(' and ')
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'assignee'))
+ end
+
+ # Called when the milestone of a Noteable is changed
+ #
+ # milestone - Milestone being assigned, or nil
+ #
+ # Example Note text:
+ #
+ # "removed milestone"
+ #
+ # "changed milestone to 7.11"
+ #
+ # Returns the created Note object
+ def change_milestone(milestone)
+ format = milestone&.group_milestone? ? :name : :iid
+ body = milestone.nil? ? 'removed milestone' : "changed milestone to #{milestone.to_reference(project, format: format)}"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'milestone'))
+ end
+
+ # Called when the title of a Noteable is changed
+ #
+ # old_title - Previous String title
+ #
+ # Example Note text:
+ #
+ # "changed title from **Old** to **New**"
+ #
+ # Returns the created Note object
+ def change_title(old_title)
+ new_title = noteable.title.dup
+
+ old_diffs, new_diffs = Gitlab::Diff::InlineDiff.new(old_title, new_title).inline_diffs
+
+ marked_old_title = Gitlab::Diff::InlineDiffMarkdownMarker.new(old_title).mark(old_diffs, mode: :deletion)
+ marked_new_title = Gitlab::Diff::InlineDiffMarkdownMarker.new(new_title).mark(new_diffs, mode: :addition)
+
+ body = "changed title from **#{marked_old_title}** to **#{marked_new_title}**"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'title'))
+ end
+
+ # Called when the description of a Noteable is changed
+ #
+ # noteable - Noteable object that responds to `description`
+ # project - Project owning noteable
+ # author - User performing the change
+ #
+ # Example Note text:
+ #
+ # "changed the description"
+ #
+ # Returns the created Note object
+ def change_description
+ body = 'changed the description'
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'description'))
+ end
+
+ # Called when a Mentionable references a Noteable
+ #
+ # mentioner - Mentionable object
+ #
+ # Example Note text:
+ #
+ # "mentioned in #1"
+ #
+ # "mentioned in !2"
+ #
+ # "mentioned in 54f7727c"
+ #
+ # See cross_reference_note_content.
+ #
+ # Returns the created Note object
+ def cross_reference(mentioner)
+ return if cross_reference_disallowed?(mentioner)
+
+ gfm_reference = mentioner.gfm_reference(noteable.project || noteable.group)
+ body = cross_reference_note_content(gfm_reference)
+
+ if noteable.is_a?(ExternalIssue)
+ noteable.project.issues_tracker.create_cross_reference_note(noteable, mentioner, author)
+ else
+ create_note(NoteSummary.new(noteable, noteable.project, author, body, action: 'cross_reference'))
+ end
+ end
+
+ # Check if a cross-reference is disallowed
+ #
+ # This method prevents adding a "mentioned in !1" note on every single commit
+ # in a merge request. Additionally, it prevents the creation of references to
+ # external issues (which would fail).
+ #
+ # mentioner - Mentionable object
+ #
+ # Returns Boolean
+ def cross_reference_disallowed?(mentioner)
+ return true if noteable.is_a?(ExternalIssue) && !noteable.project.jira_tracker_active?
+ return false unless mentioner.is_a?(MergeRequest)
+ return false unless noteable.is_a?(Commit)
+
+ mentioner.commits.include?(noteable)
+ end
+
+ # Called when the status of a Task has changed
+ #
+ # new_task - TaskList::Item object.
+ #
+ # Example Note text:
+ #
+ # "marked the task Whatever as completed."
+ #
+ # Returns the created Note object
+ def change_task_status(new_task)
+ status_label = new_task.complete? ? Taskable::COMPLETED : Taskable::INCOMPLETE
+ body = "marked the task **#{new_task.source}** as #{status_label}"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'task'))
+ end
+
+ # Called when noteable has been moved to another project
+ #
+ # noteable_ref - Referenced noteable
+ # direction - symbol, :to or :from
+ #
+ # Example Note text:
+ #
+ # "moved to some_namespace/project_new#11"
+ #
+ # Returns the created Note object
+ def noteable_moved(noteable_ref, direction)
+ unless [:to, :from].include?(direction)
+ raise ArgumentError, "Invalid direction `#{direction}`"
+ end
+
+ cross_reference = noteable_ref.to_reference(project)
+ body = "moved #{direction} #{cross_reference}"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'moved'))
+ end
+
+ # Called when the confidentiality changes
+ #
+ # Example Note text:
+ #
+ # "made the issue confidential"
+ #
+ # Returns the created Note object
+ def change_issue_confidentiality
+ if noteable.confidential
+ body = 'made the issue confidential'
+ action = 'confidential'
+ else
+ body = 'made the issue visible to everyone'
+ action = 'visible'
+ end
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: action))
+ end
+
+ # Called when the status of a Noteable is changed
+ #
+ # status - String status
+ # source - Mentionable performing the change, or nil
+ #
+ # Example Note text:
+ #
+ # "merged"
+ #
+ # "closed via bc17db76"
+ #
+ # Returns the created Note object
+ def change_status(status, source = nil)
+ body = status.dup
+ body << " via #{source.gfm_reference(project)}" if source
+
+ action = status == 'reopened' ? 'opened' : status
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: action))
+ end
+
+ # Check if a cross reference to a noteable from a mentioner already exists
+ #
+ # This method is used to prevent multiple notes being created for a mention
+ # when a issue is updated, for example. The method also calls notes_for_mentioner
+ # to check if the mentioner is a commit, and return matches only on commit hash
+ # instead of project + commit, to avoid repeated mentions from forks.
+ #
+ # mentioner - Mentionable object
+ #
+ # Returns Boolean
+ def cross_reference_exists?(mentioner)
+ notes = noteable.notes.system
+ notes_for_mentioner(mentioner, noteable, notes).exists?
+ end
+
+ # Called when a Noteable has been marked as a duplicate of another Issue
+ #
+ # canonical_issue - Issue that this is a duplicate of
+ #
+ # Example Note text:
+ #
+ # "marked this issue as a duplicate of #1234"
+ #
+ # "marked this issue as a duplicate of other_project#5678"
+ #
+ # Returns the created Note object
+ def mark_duplicate_issue(canonical_issue)
+ body = "marked this issue as a duplicate of #{canonical_issue.to_reference(project)}"
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'duplicate'))
+ end
+
+ # Called when a Noteable has been marked as the canonical Issue of a duplicate
+ #
+ # duplicate_issue - Issue that was a duplicate of this
+ #
+ # Example Note text:
+ #
+ # "marked #1234 as a duplicate of this issue"
+ #
+ # "marked other_project#5678 as a duplicate of this issue"
+ #
+ # Returns the created Note object
+ def mark_canonical_issue_of_duplicate(duplicate_issue)
+ body = "marked #{duplicate_issue.to_reference(project)} as a duplicate of this issue"
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'duplicate'))
+ end
+
+ def discussion_lock
+ action = noteable.discussion_locked? ? 'locked' : 'unlocked'
+ body = "#{action} this #{noteable.class.to_s.titleize.downcase}"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: action))
+ end
+
+ private
+
+ def cross_reference_note_content(gfm_reference)
+ "#{self.class.cross_reference_note_prefix}#{gfm_reference}"
+ end
+
+ def notes_for_mentioner(mentioner, noteable, notes)
+ if mentioner.is_a?(Commit)
+ text = "#{self.class.cross_reference_note_prefix}%#{mentioner.to_reference(nil)}"
+ notes.like_note_or_capitalized_note(text)
+ else
+ gfm_reference = mentioner.gfm_reference(noteable.project || noteable.group)
+ text = cross_reference_note_content(gfm_reference)
+ notes.for_note_or_capitalized_note(text)
+ end
+ end
+
+ def self.cross_reference_note_prefix
+ 'mentioned in '
+ end
+
+ def self.cross_reference?(note_text)
+ note_text =~ /\A#{cross_reference_note_prefix}/i
+ end
+ end
+end
+
+SystemNotes::IssuablesService.prepend_if_ee('::EE::SystemNotes::IssuablesService')
diff --git a/app/services/system_notes/zoom_service.rb b/app/services/system_notes/zoom_service.rb
new file mode 100644
index 00000000000..6cd166d6cb9
--- /dev/null
+++ b/app/services/system_notes/zoom_service.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module SystemNotes
+ class ZoomService < ::SystemNotes::BaseService
+ def zoom_link_added
+ create_note(NoteSummary.new(noteable, project, author, _('added a Zoom call to this issue'), action: 'pinned_embed'))
+ end
+
+ def zoom_link_removed
+ create_note(NoteSummary.new(noteable, project, author, _('removed a Zoom call from this issue'), action: 'pinned_embed'))
+ end
+ end
+end
diff --git a/app/services/update_deployment_service.rb b/app/services/update_deployment_service.rb
deleted file mode 100644
index 730210c611a..00000000000
--- a/app/services/update_deployment_service.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-class UpdateDeploymentService
- attr_reader :deployment
- attr_reader :deployable
-
- delegate :environment, to: :deployment
- delegate :variables, to: :deployable
-
- def initialize(deployment)
- @deployment = deployment
- @deployable = deployment.deployable
- end
-
- def execute
- deployment.create_ref
- deployment.invalidate_cache
-
- ActiveRecord::Base.transaction do
- environment.external_url = expanded_environment_url if
- expanded_environment_url
-
- environment.fire_state_event(action)
-
- break unless environment.save
- break if environment.stopped?
-
- deployment.tap(&:update_merge_request_metrics!)
- end
-
- deployment
- end
-
- private
-
- def environment_options
- @environment_options ||= deployable.options&.dig(:environment) || {}
- end
-
- def expanded_environment_url
- return @expanded_environment_url if defined?(@expanded_environment_url)
- return unless environment_url
-
- @expanded_environment_url =
- ExpandVariables.expand(environment_url, -> { variables })
- end
-
- def environment_url
- environment_options[:url]
- end
-
- def action
- environment_options[:action] || 'start'
- end
-end
-
-UpdateDeploymentService.prepend_if_ee('EE::UpdateDeploymentService')
diff --git a/app/uploaders/avatar_uploader.rb b/app/uploaders/avatar_uploader.rb
index 9af59b0aceb..d42c9dbedf4 100644
--- a/app/uploaders/avatar_uploader.rb
+++ b/app/uploaders/avatar_uploader.rb
@@ -19,7 +19,7 @@ class AvatarUploader < GitlabUploader
end
def absolute_path
- self.class.absolute_path(model.avatar.upload)
+ self.class.absolute_path(upload)
end
private
diff --git a/app/uploaders/gitlab_uploader.rb b/app/uploaders/gitlab_uploader.rb
index cefcd3d3f5a..7dc211b14e4 100644
--- a/app/uploaders/gitlab_uploader.rb
+++ b/app/uploaders/gitlab_uploader.rb
@@ -99,6 +99,17 @@ class GitlabUploader < CarrierWave::Uploader::Base
end
end
+ # Used to replace an existing upload with another +file+ without modifying stored metadata
+ # Use this method only to repair/replace an existing upload, or to upload to a Geo secondary node
+ #
+ # @param [CarrierWave::SanitizedFile] file that will replace existing upload
+ # @return CarrierWave::SanitizedFile
+ def replace_file_without_saving!(file)
+ raise ArgumentError, 'should be a CarrierWave::SanitizedFile' unless file.is_a? CarrierWave::SanitizedFile
+
+ storage.store!(file)
+ end
+
private
# Designed to be overridden by child uploaders that have a dynamic path
diff --git a/app/uploaders/object_storage.rb b/app/uploaders/object_storage.rb
index f99ad987156..36bde629f9c 100644
--- a/app/uploaders/object_storage.rb
+++ b/app/uploaders/object_storage.rb
@@ -180,10 +180,11 @@ module ObjectStorage
end
def workhorse_authorize(has_length:, maximum_size: nil)
- {
- RemoteObject: workhorse_remote_upload_options(has_length: has_length, maximum_size: maximum_size),
- TempPath: workhorse_local_upload_path
- }.compact
+ if self.object_store_enabled? && self.direct_upload_enabled?
+ { RemoteObject: workhorse_remote_upload_options(has_length: has_length, maximum_size: maximum_size) }
+ else
+ { TempPath: workhorse_local_upload_path }
+ end
end
def workhorse_local_upload_path
diff --git a/app/validators/named_ecdsa_key_validator.rb b/app/validators/named_ecdsa_key_validator.rb
index 42ee02b6ad4..9053f375100 100644
--- a/app/validators/named_ecdsa_key_validator.rb
+++ b/app/validators/named_ecdsa_key_validator.rb
@@ -19,15 +19,13 @@ class NamedEcdsaKeyValidator < ActiveModel::EachValidator
private
- UNNAMED_CURVE = "UNDEF"
-
def explicit_ec?(value)
return false unless value
pkey = OpenSSL::PKey.read(value)
return false unless pkey.is_a?(OpenSSL::PKey::EC)
- pkey.group.curve_name == UNNAMED_CURVE
+ pkey.group.asn1_flag != OpenSSL::PKey::EC::NAMED_CURVE
rescue OpenSSL::PKey::PKeyError
false
end
diff --git a/app/views/admin/application_settings/_ci_cd.html.haml b/app/views/admin/application_settings/_ci_cd.html.haml
index d1de4286ee7..1f5bce19bc6 100644
--- a/app/views/admin/application_settings/_ci_cd.html.haml
+++ b/app/views/admin/application_settings/_ci_cd.html.haml
@@ -34,7 +34,7 @@
= f.number_field :max_artifacts_size, class: 'form-control'
.form-text.text-muted
= _("Set the maximum file size for each job's artifacts")
- = link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size')
+ = link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size-core-only')
.form-group
= f.label :default_artifacts_expire_in, _('Default artifacts expiration'), class: 'label-bold'
= f.text_field :default_artifacts_expire_in, class: 'form-control'
diff --git a/app/views/admin/application_settings/_influx.html.haml b/app/views/admin/application_settings/_influx.html.haml
index 98c7a9659c3..300b01c6777 100644
--- a/app/views/admin/application_settings/_influx.html.haml
+++ b/app/views/admin/application_settings/_influx.html.haml
@@ -7,7 +7,7 @@
in running SQL queries. These settings require a
= link_to 'restart', help_page_path('administration/restart_gitlab')
to take effect.
- = link_to icon('question-circle'), help_page_path('administration/monitoring/performance/introduction')
+ = link_to icon('question-circle'), help_page_path('administration/monitoring/performance/index')
.form-group
.form-check
= f.check_box :metrics_enabled, class: 'form-check-input'
diff --git a/app/views/admin/application_settings/_pages.html.haml b/app/views/admin/application_settings/_pages.html.haml
index 1282a032f52..b15afb3b806 100644
--- a/app/views/admin/application_settings/_pages.html.haml
+++ b/app/views/admin/application_settings/_pages.html.haml
@@ -30,6 +30,6 @@
= f.check_box :lets_encrypt_terms_of_service_accepted, class: 'form-check-input'
= f.label :lets_encrypt_terms_of_service_accepted, class: 'form-check-label' do
- terms_of_service_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: lets_encrypt_terms_of_service_admin_application_settings_path }
- = _("I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}").html_safe % { link_start: terms_of_service_link_start, link_end: '</a>'.html_safe }
+ = _("I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end} (PDF)").html_safe % { link_start: terms_of_service_link_start, link_end: '</a>'.html_safe }
= f.submit _('Save changes'), class: "btn btn-success"
diff --git a/app/views/admin/application_settings/_performance.html.haml b/app/views/admin/application_settings/_performance.html.haml
index b52171afc69..6b02521a0f0 100644
--- a/app/views/admin/application_settings/_performance.html.haml
+++ b/app/views/admin/application_settings/_performance.html.haml
@@ -20,5 +20,15 @@
= f.number_field :raw_blob_request_limit, class: 'form-control'
.form-text.text-muted
= _('Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0.')
+ .form-group
+ = f.label :push_event_hooks_limit, class: 'label-bold'
+ = f.number_field :push_event_hooks_limit, class: 'form-control'
+ .form-text.text-muted
+ = _("Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value.")
+ .form-group
+ = f.label :push_event_activities_limit, class: 'label-bold'
+ = f.number_field :push_event_activities_limit, class: 'form-control'
+ .form-text.text-muted
+ = _('Number of changes (branches or tags) in a single push to determine whether individual push events or bulk push event will be created. Bulk push event will be created if it surpasses that value.')
= f.submit 'Save changes', class: "btn btn-success"
diff --git a/app/views/admin/application_settings/_protected_paths.html.haml b/app/views/admin/application_settings/_protected_paths.html.haml
new file mode 100644
index 00000000000..f4d40e10f36
--- /dev/null
+++ b/app/views/admin/application_settings/_protected_paths.html.haml
@@ -0,0 +1,31 @@
+= form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-protected-paths-settings'), html: { class: 'fieldset-form' } do |f|
+ = form_errors(@application_setting)
+
+ %fieldset
+ - if omnibus_protected_paths_throttle?
+ .bs-callout.bs-callout-danger
+ - relative_url_link = 'https://docs.gitlab.com/ee/user/admin_area/settings/protected_paths.html#migrate-settings-from-gitlab-123-and-earlier'
+ - relative_url_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: relative_url_link }
+ = _("Omnibus Protected Paths throttle is active. From 12.4, Omnibus throttle is deprecated and will be removed in a future release. Please read the %{relative_url_link_start}Migrating Protected Paths documentation%{relative_url_link_end}.").html_safe % { relative_url_link_start: relative_url_link_start, relative_url_link_end: '</a>'.html_safe }
+
+ .form-group
+ .form-check
+ = f.check_box :throttle_protected_paths_enabled, class: 'form-check-input'
+ = f.label :throttle_protected_paths_enabled, class: 'form-check-label' do
+ = _('Enable protected paths rate limit')
+ %span.form-text.text-muted
+ = _('Helps reduce request volume for protected paths')
+ .form-group
+ = f.label :throttle_protected_paths_requests_per_period, 'Max requests per period per user', class: 'label-bold'
+ = f.number_field :throttle_protected_paths_requests_per_period, class: 'form-control'
+ .form-group
+ = f.label :throttle_protected_paths_period_in_seconds, 'Rate limit period in seconds', class: 'label-bold'
+ = f.number_field :throttle_protected_paths_period_in_seconds, class: 'form-control'
+ .form-group
+ = f.label :protected_paths, class: 'label-bold' do
+ - relative_url_link = 'https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-a-relative-url-for-gitlab'
+ - relative_url_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: relative_url_link }
+ = _('All paths are relative to the GitLab URL. Do not include %{relative_url_link_start}relative URL%{relative_url_link_end}.').html_safe % { relative_url_link_start: relative_url_link_start, relative_url_link_end: '</a>'.html_safe }
+ = f.text_area :protected_paths_raw, placeholder: '/users/sign_in,/users/password', class: 'form-control', rows: 10
+
+ = f.submit 'Save changes', class: 'btn btn-success'
diff --git a/app/views/admin/application_settings/_repository_storage.html.haml b/app/views/admin/application_settings/_repository_storage.html.haml
index e5bcb180445..b97e9a194f3 100644
--- a/app/views/admin/application_settings/_repository_storage.html.haml
+++ b/app/views/admin/application_settings/_repository_storage.html.haml
@@ -3,21 +3,24 @@
%fieldset
.sub-section
+ %h4= _("Hashed repository storage paths")
.form-group
.form-check
= f.check_box :hashed_storage_enabled, class: 'form-check-input qa-hashed-storage-checkbox'
- = f.label :hashed_storage_enabled, class: 'form-check-label' do
- Use hashed storage paths for newly created and renamed projects
+ = f.label :hashed_storage_enabled, _("Use hashed storage"), class: 'label-bold form-check-label'
.form-text.text-muted
- Enable immutable, hash-based paths and repository names to store repositories on disk. This prevents
- repositories from having to be moved or renamed when the Project URL changes and may improve disk I/O performance.
+ = _("Use hashed storage paths for newly created and renamed projects. Enable immutable, hash-based paths and repository names to store repositories on disk. This prevents repositories from having to be moved or renamed when the Project URL changes and may improve disk I/O performance.")
+ .sub-section
+ %h4= _("Storage nodes for new projects")
.form-group
- = f.label :repository_storages, 'Storage paths for new projects', class: 'label-bold'
- = f.select :repository_storages, repository_storages_options_for_select(@application_setting.repository_storages),
- {include_hidden: false}, multiple: true, class: 'form-control'
- .form-text.text-muted
- Manage repository storage paths. Learn more in the
- = succeed "." do
- = link_to "repository storages documentation", help_page_path("administration/repository_storage_paths")
+ .form-text
+ %p.text-secondary
+ = _('Select the configured storaged available for new projects to be placed on.')
+ = link_to icon('question-circle'), help_page_path('administration/repository_storage_paths')
+ .form-check
+ = f.collection_check_boxes :repository_storages, Gitlab.config.repositories.storages, :first, :first, include_hidden: false do |b|
+ = b.check_box class: 'form-check-input'
+ = b.label class: 'label-bold form-check-label'
+ %br
- = f.submit 'Save changes', class: "btn btn-success qa-save-changes-button"
+ = f.submit _('Save changes'), class: "btn btn-success qa-save-changes-button"
diff --git a/app/views/admin/application_settings/_snowplow.html.haml b/app/views/admin/application_settings/_snowplow.html.haml
index b60b5d55a1b..31fd12d191e 100644
--- a/app/views/admin/application_settings/_snowplow.html.haml
+++ b/app/views/admin/application_settings/_snowplow.html.haml
@@ -9,7 +9,7 @@
= _('Configure the %{link} integration.').html_safe % { link: link_to('Snowplow', 'https://snowplowanalytics.com/', target: '_blank') }
.settings-content
- = form_for @application_setting, url: integrations_admin_application_settings_path, html: { class: 'fieldset-form' } do |f|
+ = form_for @application_setting, url: integrations_admin_application_settings_path(anchor: 'js-snowplow-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_visibility_and_access.html.haml b/app/views/admin/application_settings/_visibility_and_access.html.haml
index e57ef1ea18f..be5f1f4f9a8 100644
--- a/app/views/admin/application_settings/_visibility_and_access.html.haml
+++ b/app/views/admin/application_settings/_visibility_and_access.html.haml
@@ -53,6 +53,11 @@
= select(:application_setting, :enabled_git_access_protocol, [['Both SSH and HTTP(S)', nil], ['Only SSH', 'ssh'], ['Only HTTP(S)', 'http']], {}, class: 'form-control')
%span.form-text.text-muted#clone-protocol-help
= _('Allow only the selected protocols to be used for Git access.')
+ .form-group
+ = f.label :custom_http_clone_url_root, _('Custom Git clone URL for HTTP(S)'), class: 'label-bold'
+ = f.text_field :custom_http_clone_url_root, class: 'form-control', placeholder: 'https://git.example.com', :'aria-describedby' => 'custom_http_clone_url_root_help_block'
+ %span.form-text.text-muted#custom_http_clone_url_root_help_block
+ = _('Replaces the clone URL root.')
- ApplicationSetting::SUPPORTED_KEY_TYPES.each do |type|
- field_name = :"#{type}_key_restriction"
diff --git a/app/views/admin/application_settings/network.html.haml b/app/views/admin/application_settings/network.html.haml
index 3a4d901ca1d..092834b993c 100644
--- a/app/views/admin/application_settings/network.html.haml
+++ b/app/views/admin/application_settings/network.html.haml
@@ -34,3 +34,16 @@
= _('Allow requests to the local network from hooks and services.')
.settings-content
= render 'outbound'
+
+%section.settings.as-protected-paths.no-animate#js-protected-paths-settings{ class: ('expanded' if expanded_by_default?) }
+ .settings-header
+ %h4
+ = _('Protected Paths')
+ %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ = expanded_by_default? ? _('Collapse') : _('Expand')
+ %p
+ = _('Configure paths to be protected by Rack Attack. A web server restart is required after changing these settings.')
+ .settings-content
+ = render 'protected_paths'
+
+= render_if_exists 'admin/application_settings/ee_network_settings'
diff --git a/app/views/admin/applications/show.html.haml b/app/views/admin/applications/show.html.haml
index 180066723f1..aca9302aff7 100644
--- a/app/views/admin/applications/show.html.haml
+++ b/app/views/admin/applications/show.html.haml
@@ -13,7 +13,7 @@
.input-group
%input.label.label-monospace.monospace{ id: "application_id", type: "text", autocomplete: 'off', value: @application.uid, readonly: true }
.input-group-append
- = clipboard_button(target: '#application_id', title: _("Copy ID to clipboard"), class: "btn btn btn-default")
+ = clipboard_button(target: '#application_id', title: _("Copy ID"), class: "btn btn btn-default")
%tr
%td
= _('Secret')
@@ -22,7 +22,7 @@
.input-group
%input.label.label-monospace.monospace{ id: "secret", type: "text", autocomplete: 'off', value: @application.secret, readonly: true }
.input-group-append
- = clipboard_button(target: '#secret', title: _("Copy secret to clipboard"), class: "btn btn btn-default")
+ = clipboard_button(target: '#secret', title: _("Copy secret"), class: "btn btn btn-default")
%tr
%td
= _('Callback URL')
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
index 8fad42436ca..41147950c40 100644
--- a/app/views/admin/dashboard/index.html.haml
+++ b/app/views/admin/dashboard/index.html.haml
@@ -1,6 +1,7 @@
- breadcrumb_title "Dashboard"
-= render_if_exists 'admin/licenses/breakdown', license: @license
+- if show_license_breakdown?
+ = render_if_exists 'admin/licenses/breakdown', license: @license
.admin-dashboard.prepend-top-default
.row
@@ -40,7 +41,7 @@
.info-well
.well-segment.admin-well.admin-well-features
%h4 Features
- = feature_entry(_('Sign up'), href: admin_application_settings_path(anchor: 'js-signup-settings'))
+ = feature_entry(_('Sign up'), href: admin_application_settings_path(anchor: 'js-signup-settings'), enabled: allow_signup?)
= feature_entry(_('LDAP'), enabled: Gitlab.config.ldap.enabled)
= feature_entry(_('Gravatar'), href: admin_application_settings_path(anchor: 'js-account-settings'), enabled: gravatar_enabled?)
= feature_entry(_('OmniAuth'), href: admin_application_settings_path(anchor: 'js-signin-settings'), enabled: Gitlab::Auth.omniauth_enabled?)
diff --git a/app/views/admin/impersonation_tokens/index.html.haml b/app/views/admin/impersonation_tokens/index.html.haml
index 8e869fb4b71..a7da14d16ff 100644
--- a/app/views/admin/impersonation_tokens/index.html.haml
+++ b/app/views/admin/impersonation_tokens/index.html.haml
@@ -8,7 +8,7 @@
- if @new_impersonation_token
= render "shared/personal_access_tokens_created_container", new_token_value: @new_impersonation_token,
container_title: 'Your New Impersonation Token',
- clipboard_button_title: 'Copy impersonation token to clipboard'
+ clipboard_button_title: _('Copy impersonation token')
= render "shared/personal_access_tokens_form", path: admin_user_impersonation_tokens_path, impersonation: true, token: @impersonation_token, scopes: @scopes
diff --git a/app/views/admin/labels/destroy.js.haml b/app/views/admin/labels/destroy.js.haml
index 7a0dcbdd1c6..394d3c11f31 100644
--- a/app/views/admin/labels/destroy.js.haml
+++ b/app/views/admin/labels/destroy.js.haml
@@ -1,2 +1,2 @@
-- if @labels.size == 0
- $('.labels').load(document.URL + ' .card.bg-light').hide().fadeIn(1000)
+- if @labels.size.zero?
+ $('.labels').load(document.URL + ' .nothing-here-block').hide().fadeIn(1000)
diff --git a/app/views/admin/labels/index.html.haml b/app/views/admin/labels/index.html.haml
index 5a5b3d18c5f..38137f360fd 100644
--- a/app/views/admin/labels/index.html.haml
+++ b/app/views/admin/labels/index.html.haml
@@ -14,6 +14,4 @@
= paginate @labels, theme: 'gitlab'
- else
- .card.bg-light
- .nothing-here-block= _('There are no labels yet')
-
+ .nothing-here-block= _('There are no labels yet')
diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml
index bb0d62a70c0..08e668e8623 100644
--- a/app/views/admin/projects/index.html.haml
+++ b/app/views/admin/projects/index.html.haml
@@ -1,8 +1,20 @@
-- page_title "Projects"
+- page_title _('Projects')
- params[:visibility_level] ||= []
.top-area.scrolling-tabs-container.inner-page-scroll-tabs
- .prepend-top-default
+ %ul.nav-links.nav.nav-tabs
+ - opts = params[:visibility_level].present? ? {} : { page: admin_projects_path }
+ = nav_link(opts) do
+ = link_to _('All'), admin_projects_path
+
+ = nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::PRIVATE.to_s) }) do
+ = link_to _('Private'), admin_projects_path(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
+ = nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::INTERNAL.to_s) }) do
+ = link_to _('Internal'), admin_projects_path(visibility_level: Gitlab::VisibilityLevel::INTERNAL)
+ = nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::PUBLIC.to_s) }) do
+ = link_to _('Public'), admin_projects_path(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
+
+ .nav-controls
.search-holder
= render 'shared/projects/search_form', autofocus: true, admin_view: true
.dropdown
@@ -22,20 +34,4 @@
New Project
= button_tag "Search", class: "btn btn-primary btn-search hide"
- %ul.nav-links.nav.nav-tabs
- - opts = params[:visibility_level].present? ? {} : { page: admin_projects_path }
- = nav_link(opts) do
- = link_to admin_projects_path do
- All
-
- = nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::PRIVATE.to_s) }) do
- = link_to admin_projects_path(visibility_level: Gitlab::VisibilityLevel::PRIVATE) do
- Private
- = nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::INTERNAL.to_s) }) do
- = link_to admin_projects_path(visibility_level: Gitlab::VisibilityLevel::INTERNAL) do
- Internal
- = nav_link(html_options: { class: active_when(params[:visibility_level] == Gitlab::VisibilityLevel::PUBLIC.to_s) }) do
- = link_to admin_projects_path(visibility_level: Gitlab::VisibilityLevel::PUBLIC) do
- Public
-
= render 'projects'
diff --git a/app/views/admin/runners/index.html.haml b/app/views/admin/runners/index.html.haml
index 76af4189b5b..2bf2b5fce8d 100644
--- a/app/views/admin/runners/index.html.haml
+++ b/app/views/admin/runners/index.html.haml
@@ -43,14 +43,13 @@
.row
.col-sm-9
= form_tag admin_runners_path, id: 'runners-search', method: :get, class: 'filter-form js-filter-form' do
- .filtered-search-wrapper
+ .filtered-search-wrapper.d-flex
.filtered-search-box
- = dropdown_tag(custom_icon('icon_history'),
+ = dropdown_tag(_('Recent searches'),
options: { wrapper_class: 'filtered-search-history-dropdown-wrapper',
toggle_class: 'filtered-search-history-dropdown-toggle-button',
dropdown_class: 'filtered-search-history-dropdown',
- content_class: 'filtered-search-history-dropdown-content',
- title: _('Recent searches') }) do
+ content_class: 'filtered-search-history-dropdown-content' }) do
.js-filtered-search-history-dropdown{ data: { full_path: admin_runners_path } }
.filtered-search-box-input-container.droplab-dropdown
.scroll-container
diff --git a/app/views/admin/sessions/_new_base.html.haml b/app/views/admin/sessions/_new_base.html.haml
new file mode 100644
index 00000000000..55aea0296e7
--- /dev/null
+++ b/app/views/admin/sessions/_new_base.html.haml
@@ -0,0 +1,7 @@
+= form_tag(admin_session_path, method: :post, html: { class: 'new_user gl-show-field-errors', 'aria-live': 'assertive'}) do
+ .form-group
+ = label_tag :password, _('Password'), class: 'label-bold'
+ = password_field_tag :password, nil, class: 'form-control', required: true, title: _('This field is required.'), data: { qa_selector: 'password_field' }
+
+ .submit-container.move-submit-down
+ = submit_tag _('Enter admin mode'), class: 'btn btn-success', data: { qa_selector: 'sign_in_button' }
diff --git a/app/views/admin/sessions/_signin_box.html.haml b/app/views/admin/sessions/_signin_box.html.haml
new file mode 100644
index 00000000000..69baa76060e
--- /dev/null
+++ b/app/views/admin/sessions/_signin_box.html.haml
@@ -0,0 +1,11 @@
+- if form_based_providers.any?
+
+ - if password_authentication_enabled_for_web?
+ .login-box.tab-pane{ id: 'login-pane', role: 'tabpanel' }
+ .login-body
+ = render 'admin/sessions/new_base'
+
+- elsif password_authentication_enabled_for_web?
+ .login-box.tab-pane.active{ id: 'login-pane', role: 'tabpanel' }
+ .login-body
+ = render 'admin/sessions/new_base'
diff --git a/app/views/admin/sessions/_tabs_normal.html.haml b/app/views/admin/sessions/_tabs_normal.html.haml
new file mode 100644
index 00000000000..f5dedb5ad76
--- /dev/null
+++ b/app/views/admin/sessions/_tabs_normal.html.haml
@@ -0,0 +1,3 @@
+%ul.nav-links.new-session-tabs.nav-tabs.nav{ role: 'tablist' }
+ %li.nav-item{ role: 'presentation' }
+ %a.nav-link.active{ href: '#login-pane', data: { toggle: 'tab', qa_selector: 'sign_in_tab' }, role: 'tab' }= _('Enter admin mode')
diff --git a/app/views/admin/sessions/new.html.haml b/app/views/admin/sessions/new.html.haml
new file mode 100644
index 00000000000..ee06b4a1741
--- /dev/null
+++ b/app/views/admin/sessions/new.html.haml
@@ -0,0 +1,15 @@
+- @hide_breadcrumbs = true
+- page_title _('Enter admin mode')
+
+.row.justify-content-center
+ .col-6.new-session-forms-container
+ .login-page
+ #signin-container
+ = render 'admin/sessions/tabs_normal'
+ .tab-content
+ - if password_authentication_enabled_for_web?
+ = render 'admin/sessions/signin_box'
+ - else
+ -# Show a message if none of the mechanisms above are enabled
+ .prepend-top-default.center
+ = _('No authentication methods configured.')
diff --git a/app/views/admin/system_info/show.html.haml b/app/views/admin/system_info/show.html.haml
index 948a11646f7..b7648979edd 100644
--- a/app/views/admin/system_info/show.html.haml
+++ b/app/views/admin/system_info/show.html.haml
@@ -1,35 +1,35 @@
-- page_title "System Info"
+- page_title _('System Info')
.prepend-top-default
.row
- .col-sm-4
- .card.bg-light.light-well
- %h4 CPU
+ .col-sm
+ .bg-light.light-well
+ %h4= _('CPU')
.data
- if @cpus
- %h1 #{@cpus.length} cores
+ %h2= _('%{cores} cores') % { cores: @cpus.length }
- else
= icon('warning', class: 'text-warning')
- Unable to collect CPU info
- .col-sm-4
- .card.bg-light.light-well
- %h4 Memory Usage
+ = _('Unable to collect CPU info')
+ .bg-light.light-well.prepend-top-default
+ %h4= _('Memory Usage')
.data
- if @memory
- %h1 #{number_to_human_size(@memory.active_bytes)} / #{number_to_human_size(@memory.total_bytes)}
+ %h2 #{number_to_human_size(@memory.active_bytes)} / #{number_to_human_size(@memory.total_bytes)}
- else
= icon('warning', class: 'text-warning')
- Unable to collect memory info
- .col-sm-4
- .card.bg-light.light-well
- %h4 Disk Usage
+ = _('Unable to collect memory info')
+ .bg-light.light-well.prepend-top-default
+ %h4= _('Uptime')
.data
- - @disks.each do |disk|
- %h1 #{number_to_human_size(disk[:bytes_used])} / #{number_to_human_size(disk[:bytes_total])}
- %p= disk[:disk_name]
- %p= disk[:mount_path]
- .col-sm-4
- .card.bg-light.light-well
- %h4 Uptime
+ %h2= distance_of_time_in_words_to_now(Rails.application.config.booted_at)
+ .col-sm
+ .bg-light.light-well
+ %h4= _('Disk Usage')
.data
- %h1= distance_of_time_in_words_to_now(Rails.application.config.booted_at)
+ %ul
+ - @disks.each do |disk|
+ %li
+ %h2 #{number_to_human_size(disk[:bytes_used])} / #{number_to_human_size(disk[:bytes_total])}
+ %p= disk[:disk_name]
+ %p= disk[:mount_path]
diff --git a/app/views/admin/users/_head.html.haml b/app/views/admin/users/_head.html.haml
index e7dde7985fd..a218885a00e 100644
--- a/app/views/admin/users/_head.html.haml
+++ b/app/views/admin/users/_head.html.haml
@@ -6,11 +6,13 @@
%span.cred (Internal)
- if @user.admin
%span.cred (Admin)
+ - if @user.deactivated?
+ %span.cred (Deactivated)
= render_if_exists 'admin/users/audtior_user_badge'
.float-right
- if impersonation_enabled? && @user != current_user && @user.can?(:log_in)
- = link_to 'Impersonate', impersonate_admin_user_path(@user), method: :post, class: "btn btn-nr btn-grouped btn-info"
+ = link_to 'Impersonate', impersonate_admin_user_path(@user), method: :post, class: "btn btn-nr btn-grouped btn-info", data: { qa_selector: 'impersonate_user_link' }
= link_to edit_admin_user_path(@user), class: "btn btn-nr btn-grouped" do
%i.fa.fa-pencil-square-o
Edit
diff --git a/app/views/admin/users/_modals.html.haml b/app/views/admin/users/_modals.html.haml
new file mode 100644
index 00000000000..eaec6d69f5a
--- /dev/null
+++ b/app/views/admin/users/_modals.html.haml
@@ -0,0 +1,30 @@
+#user-modal
+#modal-texts.hidden{ "hidden": true, "aria-hidden": true }
+ %div{ data: { modal: "deactivate",
+ title: s_("AdminUsers|Deactivate User %{username}?"),
+ action: s_("AdminUsers|Deactivate") } }
+ = render partial: 'admin/users/user_deactivation_effects'
+
+ %div{ data: { modal: "block",
+ title: s_("AdminUsers|Block user %{username}?"),
+ action: s_("AdminUsers|Block") } }
+ = render partial: 'admin/users/user_block_effects'
+
+ %div{ data: { modal: "delete",
+ title: s_("AdminUsers|Delete User %{username}?"),
+ action: s_('AdminUsers|Delete user'),
+ 'secondary-action': s_('AdminUsers|Block user') } }
+ = s_('AdminUsers|You are about to permanently delete the user %{username}. Issues, merge requests,
+ and groups linked to them will be transferred to a system-wide "Ghost-user". To avoid data loss,
+ consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end},
+ it cannot be undone or recovered.')
+
+ %div{ data: { modal: "delete-with-contributions",
+ title: s_("AdminUsers|Delete User %{username} and contributions?"),
+ action: s_('AdminUsers|Delete user and contributions') ,
+ 'secondary-action': s_('AdminUsers|Block user') } }
+ = s_('AdminUsers|You are about to permanently delete the user %{username}. This will delete all of the issues,
+ merge requests, and groups linked to them. To avoid data loss,
+ consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end},
+ it cannot be undone or recovered.')
+
diff --git a/app/views/admin/users/_user.html.haml b/app/views/admin/users/_user.html.haml
index be7bfa958b2..ca5109614fc 100644
--- a/app/views/admin/users/_user.html.haml
+++ b/app/views/admin/users/_user.html.haml
@@ -1,4 +1,4 @@
-.gl-responsive-table-row{ role: 'row' }
+.gl-responsive-table-row{ role: 'row', data: { qa_selector: 'user_row_content' } }
.table-section.section-40
.table-mobile-header{ role: 'rowheader' }
= _('Name')
@@ -31,7 +31,19 @@
- elsif user.blocked?
= link_to _('Unblock'), unblock_admin_user_path(user), method: :put
- else
- = link_to _('Block'), block_admin_user_path(user), data: { confirm: "#{s_('AdminUsers|User will be blocked').upcase}! #{_('Are you sure')}?" }, method: :put
+ %button.btn{ data: { 'gl-modal-action': 'block',
+ url: block_admin_user_path(user),
+ username: sanitize_name(user.name) } }
+ = s_('AdminUsers|Block')
+ - if user.can_be_deactivated?
+ %li
+ %button.btn{ data: { 'gl-modal-action': 'deactivate',
+ url: deactivate_admin_user_path(user),
+ username: sanitize_name(user.name) } }
+ = s_('AdminUsers|Deactivate')
+ - elsif user.deactivated?
+ %li
+ = link_to _('Activate'), activate_admin_user_path(user), method: :put
- if user.access_locked?
%li
= link_to _('Unlock'), unlock_admin_user_path(user), method: :put, data: { confirm: _('Are you sure?') }
@@ -39,19 +51,14 @@
%li.divider
- if user.can_be_removed?
%li
- %button.delete-user-button.btn.text-danger{ data: { toggle: 'modal',
- target: '#delete-user-modal',
+ %button.delete-user-button.btn.text-danger{ data: { 'gl-modal-action': 'delete',
delete_user_url: admin_user_path(user),
block_user_url: block_admin_user_path(user),
- username: sanitize_name(user.name),
- delete_contributions: false }, type: 'button' }
+ username: sanitize_name(user.name) } }
= s_('AdminUsers|Delete user')
-
- %li
- %button.delete-user-button.btn.text-danger{ data: { toggle: 'modal',
- target: '#delete-user-modal',
- delete_user_url: admin_user_path(user, hard_delete: true),
- block_user_url: block_admin_user_path(user),
- username: sanitize_name(user.name),
- delete_contributions: true }, type: 'button' }
- = s_('AdminUsers|Delete user and contributions')
+ %li
+ %button.delete-user-button.btn.text-danger{ data: { 'gl-modal-action': 'delete-with-contributions',
+ delete_user_url: admin_user_path(user, hard_delete: true),
+ block_user_url: block_admin_user_path(user),
+ username: sanitize_name(user.name) } }
+ = s_('AdminUsers|Delete user and contributions')
diff --git a/app/views/admin/users/_user_activation_effects.html.haml b/app/views/admin/users/_user_activation_effects.html.haml
new file mode 100644
index 00000000000..244836dac11
--- /dev/null
+++ b/app/views/admin/users/_user_activation_effects.html.haml
@@ -0,0 +1,6 @@
+%p
+ = s_('AdminUsers|Reactivating a user will:')
+%ul
+ %li
+ = s_('AdminUsers|Restore user access to the account, including web, Git and API.')
+ = render_if_exists 'admin/users/user_activation_effects_on_seats'
diff --git a/app/views/admin/users/_user_block_effects.html.haml b/app/views/admin/users/_user_block_effects.html.haml
new file mode 100644
index 00000000000..8ffbe145169
--- /dev/null
+++ b/app/views/admin/users/_user_block_effects.html.haml
@@ -0,0 +1,11 @@
+%p
+ = s_('AdminUsers|Blocking user has the following effects:')
+%ul
+ %li
+ = s_('AdminUsers|User will not be able to login')
+ %li
+ = s_('AdminUsers|User will not be able to access git repositories')
+ %li
+ = s_('AdminUsers|Personal projects will be left')
+ %li
+ = s_('AdminUsers|Owned groups will be left')
diff --git a/app/views/admin/users/_user_deactivation_effects.html.haml b/app/views/admin/users/_user_deactivation_effects.html.haml
new file mode 100644
index 00000000000..dc3896e18c0
--- /dev/null
+++ b/app/views/admin/users/_user_deactivation_effects.html.haml
@@ -0,0 +1,18 @@
+%p
+ = s_('AdminUsers|Deactivating a user has the following effects:')
+%ul
+ %li
+ = s_('AdminUsers|The user will be logged out')
+ %li
+ = s_('AdminUsers|The user will not be able to access git repositories')
+ %li
+ = s_('AdminUsers|The user will not be able to access the API')
+ %li
+ = s_('AdminUsers|The user will not receive any notifications')
+ %li
+ = s_('AdminUsers|The user will not be able to use slash commands')
+ %li
+ = s_('AdminUsers|When the user logs back in, their account will reactivate as a fully active account')
+ %li
+ = s_('AdminUsers|Personal projects, group and user history will be left intact')
+ = render_if_exists 'admin/users/user_deactivation_effects_on_seats'
diff --git a/app/views/admin/users/_user_detail.html.haml b/app/views/admin/users/_user_detail.html.haml
index 13d10dcd625..3cc3fc6fa92 100644
--- a/app/views/admin/users/_user_detail.html.haml
+++ b/app/views/admin/users/_user_detail.html.haml
@@ -4,7 +4,7 @@
.row-main-content
.row-title.str-truncated-100
= image_tag avatar_icon_for_user(user), class: 'avatar s16 d-xs-flex d-md-none mr-1 prepend-top-2', alt: _('Avatar for %{name}') % { name: sanitize_name(user.name) }
- = link_to user.name, admin_user_path(user), class: 'text-plain js-user-link', data: { user_id: user.id }
+ = link_to user.name, admin_user_path(user), class: 'text-plain js-user-link', data: { user_id: user.id, qa_selector: 'username_link' }
= render_if_exists 'admin/users/user_listing_note', user: user
diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml
index 36b62557fa6..3c6ad899d1e 100644
--- a/app/views/admin/users/index.html.haml
+++ b/app/views/admin/users/index.html.haml
@@ -30,6 +30,10 @@
= link_to admin_users_path(filter: "blocked") do
= s_('AdminUsers|Blocked')
%small.badge.badge-pill= limited_counter_with_delimiter(User.blocked)
+ = nav_link(html_options: { class: active_when(params[:filter] == 'deactivated') }) do
+ = link_to admin_users_path(filter: "deactivated") do
+ = s_('AdminUsers|Deactivated')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.deactivated)
= nav_link(html_options: { class: active_when(params[:filter] == 'wop') }) do
= link_to admin_users_path(filter: "wop") do
= s_('AdminUsers|Without projects')
@@ -44,12 +48,13 @@
= hidden_field_tag "filter", h(params[:filter])
.search-holder
.search-field-holder
- = search_field_tag :search_query, params[:search_query], placeholder: s_('AdminUsers|Search by name, email or username'), class: 'form-control search-text-input js-search-input', spellcheck: false
+ = search_field_tag :search_query, params[:search_query], placeholder: s_('AdminUsers|Search by name, email or username'), class: 'form-control search-text-input js-search-input', spellcheck: false, data: { qa_selector: 'user_search_field' }
- if @sort.present?
= hidden_field_tag :sort, @sort
= icon("search", class: "search-icon")
= button_tag s_('AdminUsers|Search users') if Rails.env.test?
.dropdown.user-sort-dropdown
+ = label_tag 'Sort by', nil, class: 'label-bold'
- toggle_text = @sort.present? ? users_sort_options_hash[@sort] : sort_title_name
= dropdown_toggle(toggle_text, { toggle: 'dropdown' })
%ul.dropdown-menu.dropdown-menu-right
@@ -74,4 +79,4 @@
= paginate @users, theme: "gitlab"
-#delete-user-modal
+= render partial: 'admin/users/modals'
diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml
index a988f746ced..706fa033c51 100644
--- a/app/views/admin/users/show.html.haml
+++ b/app/views/admin/users/show.html.haml
@@ -156,6 +156,27 @@
= render_if_exists 'admin/users/user_detail_note'
+ - if @user.deactivated?
+ .card.border-info
+ .card-header.bg-info.text-white
+ Reactivate this user
+ .card-body
+ = render partial: 'admin/users/user_activation_effects'
+ %br
+ = link_to 'Activate user', activate_admin_user_path(@user), method: :put, class: "btn btn-info", data: { confirm: 'Are you sure?' }
+ - elsif @user.can_be_deactivated?
+ .card.border-warning
+ .card-header.bg-warning.text-white
+ Deactivate this user
+ .card-body
+ = render partial: 'admin/users/user_deactivation_effects'
+ %br
+ %button.btn.btn-warning{ data: { 'gl-modal-action': 'deactivate',
+ content: 'You can always re-activate their account, their data will remain intact.',
+ url: deactivate_admin_user_path(@user),
+ username: sanitize_name(@user.name) } }
+ = s_('AdminUsers|Deactivate user')
+
- if @user.blocked?
.card.border-info
.card-header.bg-info.text-white
@@ -172,14 +193,13 @@
.card-header.bg-warning.text-white
Block this user
.card-body
- %p Blocking user has the following effects:
- %ul
- %li User will not be able to login
- %li User will not be able to access git repositories
- %li Personal projects will be left
- %li Owned groups will be left
+ = render partial: 'admin/users/user_block_effects'
%br
- = link_to 'Block user', block_admin_user_path(@user), data: { confirm: 'USER WILL BE BLOCKED! Are you sure?' }, method: :put, class: "btn btn-warning"
+ %button.btn.btn-warning{ data: { 'gl-modal-action': 'block',
+ content: 'You can always unblock their account, their data will remain intact.',
+ url: block_admin_user_path(@user),
+ username: sanitize_name(@user.name) } }
+ = s_('AdminUsers|Block user')
- if @user.access_locked?
.card.border-info
.card-header.bg-info.text-white
@@ -197,12 +217,10 @@
%p Deleting a user has the following effects:
= render 'users/deletion_guidance', user: @user
%br
- %button.delete-user-button.btn.btn-danger{ data: { toggle: 'modal',
- target: '#delete-user-modal',
+ %button.delete-user-button.btn.btn-danger{ data: { 'gl-modal-action': 'delete',
delete_user_url: admin_user_path(@user),
block_user_url: block_admin_user_path(@user),
- username: @user.name,
- delete_contributions: false }, type: 'button' }
+ username: sanitize_name(@user.name) } }
= s_('AdminUsers|Delete user')
- else
- if @user.solo_owned_groups.present?
@@ -229,15 +247,13 @@
the user, and projects in them, will also be removed. Commits
to other projects are unaffected.
%br
- %button.delete-user-button.btn.btn-danger{ data: { toggle: 'modal',
- target: '#delete-user-modal',
+ %button.delete-user-button.btn.btn-danger{ data: { 'gl-modal-action': 'delete-with-contributions',
delete_user_url: admin_user_path(@user, hard_delete: true),
block_user_url: block_admin_user_path(@user),
- username: @user.name,
- delete_contributions: true }, type: 'button' }
+ username: @user.name } }
= s_('AdminUsers|Delete user and contributions')
- else
%p
You don't have access to delete this user.
- #delete-user-modal
+= render partial: 'admin/users/modals'
diff --git a/app/views/ci/runner/_how_to_setup_runner.html.haml b/app/views/ci/runner/_how_to_setup_runner.html.haml
index 4307060d748..aca8aa5d341 100644
--- a/app/views/ci/runner/_how_to_setup_runner.html.haml
+++ b/app/views/ci/runner/_how_to_setup_runner.html.haml
@@ -8,11 +8,11 @@
%li
= _("Specify the following URL during the Runner setup:")
%code#coordinator_address= root_url(only_path: false)
- = clipboard_button(target: '#coordinator_address', title: _("Copy URL to clipboard"), class: "btn-transparent btn-clipboard")
+ = clipboard_button(target: '#coordinator_address', title: _("Copy URL"), class: "btn-transparent btn-clipboard")
%li
= _("Use the following registration token during setup:")
%code#registration_token= registration_token
- = clipboard_button(target: '#registration_token', title: _("Copy token to clipboard"), class: "btn-transparent btn-clipboard")
+ = clipboard_button(target: '#registration_token', title: _("Copy token"), class: "btn-transparent btn-clipboard")
.prepend-top-10.append-bottom-10
= button_to _("Reset runners registration token"), reset_token_url,
method: :put, class: 'btn btn-default',
diff --git a/app/views/ci/runner/_how_to_setup_runner_automatically.html.haml b/app/views/ci/runner/_how_to_setup_runner_automatically.html.haml
new file mode 100644
index 00000000000..58d2ef5d5e6
--- /dev/null
+++ b/app/views/ci/runner/_how_to_setup_runner_automatically.html.haml
@@ -0,0 +1,22 @@
+.append-bottom-10
+ %h4= _('Set up a %{type} Runner automatically') % { type: type }
+
+%p
+ - link_to_help_page = link_to(_('Learn more about Kubernetes'),
+ help_page_path('user/project/clusters/index'),
+ target: '_blank',
+ rel: 'noopener noreferrer')
+
+ = _('You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}').html_safe % { link_to_help_page: link_to_help_page }
+
+%ol
+ %li
+ = _('Click the button below to begin the install process by navigating to the Kubernetes page')
+ %li
+ = _('Select an existing Kubernetes cluster or create a new one')
+ %li
+ = _('From the Kubernetes cluster details view, install Runner from the applications list')
+
+= link_to _('Install Runner on Kubernetes'),
+ clusters_path,
+ class: 'btn btn-info'
diff --git a/app/views/ci/variables/_variable_row.html.haml b/app/views/ci/variables/_variable_row.html.haml
index ed4bd5ae19e..ed9b3ab1940 100644
--- a/app/views/ci/variables/_variable_row.html.haml
+++ b/app/views/ci/variables/_variable_row.html.haml
@@ -30,7 +30,7 @@
value: key,
placeholder: s_('CiVariables|Input variable key') }
.ci-variable-body-item.gl-show-field-errors.table-section.section-15.border-top-0.p-0
- .form-control.js-secret-value-placeholder.qa-ci-variable-input-value{ class: ('hide' unless id) }
+ .form-control.js-secret-value-placeholder.qa-ci-variable-input-value.overflow-hidden{ class: ('hide' unless id) }
= '*' * 17
%textarea.js-ci-variable-input-value.js-secret-value.qa-ci-variable-input-value.form-control{ class: ('hide' if id),
rows: 1,
diff --git a/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml b/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml
index f707c6585ec..d4999798c19 100644
--- a/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml
+++ b/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml
@@ -3,6 +3,6 @@
- label = local_assigns.fetch(:label)
= link_to clusterable.new_path(provider: provider), class: 'btn gl-button btn-outline flex-fill d-inline-flex flex-column mr-3 justify-content-center align-items-center' do
- = image_tag logo_path, alt: label, class: 'gl-w-13 gl-h-13'
+ .svg-content= image_tag logo_path, alt: label, class: 'gl-w-13 gl-h-13'
%span
= label
diff --git a/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml b/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml
index 24506205243..7a93a7604f5 100644
--- a/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml
+++ b/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml
@@ -6,6 +6,6 @@
= create_cluster_label
.d-flex
= render partial: 'clusters/clusters/cloud_providers/cloud_provider_button',
- locals: { provider: 'gke', label: gke_label, logo_path: '' }
+ locals: { provider: 'eks', label: eks_label, logo_path: 'illustrations/logos/amazon_eks.svg' }
= render partial: 'clusters/clusters/cloud_providers/cloud_provider_button',
- locals: { provider: 'eks', label: eks_label, logo_path: '' }
+ locals: { provider: 'gke', label: gke_label, logo_path: 'illustrations/logos/google_gke.svg' }
diff --git a/app/views/clusters/clusters/eks/_index.html.haml b/app/views/clusters/clusters/eks/_index.html.haml
index ca8e9ba527a..db64698a7f2 100644
--- a/app/views/clusters/clusters/eks/_index.html.haml
+++ b/app/views/clusters/clusters/eks/_index.html.haml
@@ -1 +1,2 @@
-.js-create-eks-cluster-form-container
+.js-create-eks-cluster-form-container{ data: { 'gitlab-managed-cluster-help-path' => help_page_path('user/project/clusters/index.md', anchor: 'gitlab-managed-clusters'),
+'kubernetes-integration-help-path' => help_page_path('user/project/clusters/index') } }
diff --git a/app/views/clusters/clusters/gcp/_form.html.haml b/app/views/clusters/clusters/gcp/_form.html.haml
index 4d3e3359ea0..cca16ce7eda 100644
--- a/app/views/clusters/clusters/gcp/_form.html.haml
+++ b/app/views/clusters/clusters/gcp/_form.html.haml
@@ -3,13 +3,12 @@
- zones_link_url = 'https://cloud.google.com/compute/docs/regions-zones/regions-zones'
- machine_type_link_url = 'https://cloud.google.com/compute/docs/machine-types'
- pricing_link_url = 'https://cloud.google.com/compute/pricing#machinetype'
+- kubernetes_integration_url = help_page_path('user/project/clusters/index')
- help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe
- help_link_end = ' %{external_link_icon}</a>'.html_safe % { external_link_icon: external_link_icon }
%p
- - link_to_help_page = link_to(s_('ClusterIntegration|help page'),
- help_page_path('user/project/clusters/index'), target: '_blank', rel: 'noopener noreferrer')
- = s_('ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration.').html_safe % { link_to_help_page: link_to_help_page }
+ = s_('ClusterIntegration|Read our %{link_start}help page%{link_end} on Kubernetes cluster integration.').html_safe % { link_start: help_link_start % { url: kubernetes_integration_url }, link_end: '</a>'.html_safe }
%p= link_to('Select a different Google account', @authorize_url)
@@ -65,6 +64,13 @@
%p.form-text.text-muted
= s_('ClusterIntegration|Learn more about %{help_link_start_machine_type}machine types%{help_link_end} and %{help_link_start_pricing}pricing%{help_link_end}.').html_safe % { help_link_start_machine_type: help_link_start % { url: machine_type_link_url }, help_link_start_pricing: help_link_start % { url: pricing_link_url }, help_link_end: help_link_end }
+ .form-group
+ = provider_gcp_field.check_box :cloud_run, { label: s_('ClusterIntegration|Enable Cloud Run on GKE (beta)'),
+ label_class: 'label-bold' }
+ .form-text.text-muted
+ = s_('ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster.')
+ = link_to _('More information'), help_page_path('user/project/clusters/index.md', anchor: 'cloud-run-on-gke'), target: '_blank'
+
.form-group
= field.check_box :managed, { label: s_('ClusterIntegration|GitLab-managed cluster'),
label_class: 'label-bold' }
diff --git a/app/views/clusters/clusters/gcp/_gcp_not_configured.html.haml b/app/views/clusters/clusters/gcp/_gcp_not_configured.html.haml
new file mode 100644
index 00000000000..b57e45e9812
--- /dev/null
+++ b/app/views/clusters/clusters/gcp/_gcp_not_configured.html.haml
@@ -0,0 +1,3 @@
+- documentation_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path("integration/google") }
+- link_end = '<a/>'.html_safe
+= s_('Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service.').html_safe % { link_start: documentation_link_start, link_end: link_end }
diff --git a/app/views/clusters/clusters/gcp/_signin_with_google_button.html.haml b/app/views/clusters/clusters/gcp/_signin_with_google_button.html.haml
new file mode 100644
index 00000000000..65cfa6552b1
--- /dev/null
+++ b/app/views/clusters/clusters/gcp/_signin_with_google_button.html.haml
@@ -0,0 +1,4 @@
+.signin-with-google
+ - create_account_link = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: 'https://accounts.google.com/SignUpWithoutGmail?service=cloudconsole&continue=https%3A%2F%2Fconsole.cloud.google.com%2Ffreetrial%3Futm_campaign%3D2018_cpanel%26utm_source%3Dgitlab%26utm_medium%3Dreferral' }
+ = link_to(image_tag('auth_buttons/signin_with_google.png', width: '191px', alt: _('Sign in with Google')), @authorize_url)
+ = s_('or %{link_start}create a new Google account%{link_end}').html_safe % { link_start: create_account_link, link_end: '</a>'.html_safe }
diff --git a/app/views/clusters/clusters/new.html.haml b/app/views/clusters/clusters/new.html.haml
index fb182d99ff0..2c23426aaf9 100644
--- a/app/views/clusters/clusters/new.html.haml
+++ b/app/views/clusters/clusters/new.html.haml
@@ -2,7 +2,9 @@
- page_title _('Kubernetes Cluster')
- create_eks_enabled = Feature.enabled?(:create_eks_clusters)
- active_tab = local_assigns.fetch(:active_tab, 'create')
-- link_end = '<a/>'.html_safe
+- create_on_gke_tab_label = s_('ClusterIntegration|Create new Cluster on GKE')
+- create_on_eks_tab_label = s_('ClusterIntegration|Create new Cluster on EKS')
+- create_new_cluster_label = s_('ClusterIntegration|Create new Cluster')
= javascript_include_tag 'https://apis.google.com/js/api.js'
= render_gcp_signup_offer
@@ -14,7 +16,16 @@
%ul.nav-links.nav-tabs.gitlab-tabs.nav{ role: 'tablist' }
%li.nav-item{ role: 'presentation' }
%a.nav-link{ href: '#create-cluster-pane', id: 'create-cluster-tab', class: active_when(active_tab == 'create'), data: { toggle: 'tab' }, role: 'tab' }
- %span Create new Cluster on GKE
+ %span
+ - if create_eks_enabled
+ - if @gke_selected
+ = create_on_gke_tab_label
+ - elsif @eks_selected
+ = create_on_eks_tab_label
+ - else
+ = create_new_cluster_label
+ - else
+ = create_on_gke_tab_label
%li.nav-item{ role: 'presentation' }
%a.nav-link{ href: '#add-cluster-pane', id: 'add-cluster-tab', class: active_when(active_tab == 'add'), data: { toggle: 'tab' }, role: 'tab' }
%span Add existing cluster
@@ -22,9 +33,14 @@
.tab-content.gitlab-tab-content
- if create_eks_enabled
.tab-pane{ id: 'create-cluster-pane', class: active_when(active_tab == 'create'), role: 'tabpanel' }
- - if @gke_selected && @valid_gcp_token
+ - if @gke_selected
= render 'clusters/clusters/gcp/header'
- = render 'clusters/clusters/gcp/form'
+ - if @valid_gcp_token
+ = render 'clusters/clusters/gcp/form'
+ - elsif @authorize_url
+ = render 'clusters/clusters/gcp/signin_with_google_button'
+ - else
+ = render 'clusters/clusters/gcp/gcp_not_configured'
- elsif @eks_selected
= render 'clusters/clusters/eks/index'
- else
@@ -35,13 +51,9 @@
- if @valid_gcp_token
= render 'clusters/clusters/gcp/form'
- elsif @authorize_url
- .signin-with-google
- - create_account_link = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: 'https://accounts.google.com/SignUpWithoutGmail?service=cloudconsole&continue=https%3A%2F%2Fconsole.cloud.google.com%2Ffreetrial%3Futm_campaign%3D2018_cpanel%26utm_source%3Dgitlab%26utm_medium%3Dreferral' }
- = link_to(image_tag('auth_buttons/signin_with_google.png', width: '191px', alt: _('Sign in with Google')), @authorize_url)
- = s_('or %{link_start}create a new Google account%{link_end}').html_safe % { link_start: create_account_link, link_end: link_end }
+ = render 'clusters/clusters/gcp/signin_with_google_button'
- else
- - documentation_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path("integration/google") }
- = s_('Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service.').html_safe % { link_start: documentation_link_start, link_end: link_end }
+ = render 'clusters/clusters/gcp/gcp_not_configured'
.tab-pane{ id: 'add-cluster-pane', class: active_when(active_tab == 'add'), role: 'tabpanel' }
= render 'clusters/clusters/user/header'
diff --git a/app/views/clusters/clusters/show.html.haml b/app/views/clusters/clusters/show.html.haml
index cccba48624b..31d5f592d75 100644
--- a/app/views/clusters/clusters/show.html.haml
+++ b/app/views/clusters/clusters/show.html.haml
@@ -23,12 +23,15 @@
cluster_type: @cluster.cluster_type,
cluster_status: @cluster.status_name,
cluster_status_reason: @cluster.status_reason,
+ provider_type: @cluster.provider_type,
+ pre_installed_knative: @cluster.knative_pre_installed? ? 'true': 'false',
help_path: help_page_path('user/project/clusters/index.md', anchor: 'installing-applications'),
ingress_help_path: help_page_path('user/project/clusters/index.md', anchor: 'getting-the-external-endpoint'),
ingress_dns_help_path: help_page_path('user/project/clusters/index.md', anchor: 'manually-determining-the-external-endpoint'),
environments_help_path: help_page_path('ci/environments', anchor: 'defining-environments'),
clusters_help_path: help_page_path('user/project/clusters/index.md', anchor: 'deploying-to-a-kubernetes-cluster'),
deploy_boards_help_path: help_page_path('user/project/deploy_boards.html', anchor: 'enabling-deploy-boards'),
+ cloud_run_help_path: help_page_path('user/project/clusters/index.md', anchor: 'cloud-run-on-gke'),
manage_prometheus_path: manage_prometheus_path,
cluster_id: @cluster.id } }
@@ -39,6 +42,6 @@
= render 'banner'
- if cluster_environments_path.present?
- = render_if_exists 'clusters/clusters/group_cluster_environments', expanded: expanded
+ = render_if_exists 'clusters/clusters/cluster_environments', expanded: expanded
- else
= render 'configure', expanded: expanded
diff --git a/app/views/dashboard/projects/_blank_state_admin_welcome.html.haml b/app/views/dashboard/projects/_blank_state_admin_welcome.html.haml
index c50b20a83dc..6e7ec1264ea 100644
--- a/app/views/dashboard/projects/_blank_state_admin_welcome.html.haml
+++ b/app/views/dashboard/projects/_blank_state_admin_welcome.html.haml
@@ -1,41 +1,40 @@
.blank-state-row
- = link_to new_project_path, class: "blank-state-link" do
- .blank-state
+ - if has_start_trial?
+ = render_if_exists "dashboard/projects/blank_state_ee_trial"
+
+ = link_to new_project_path, class: "blank-state blank-state-link" do
+ .blank-state-icon
+ = image_tag("illustrations/welcome/add_new_project")
+ .blank-state-body
+ %h3.blank-state-title
+ Create a project
+ %p.blank-state-text
+ Projects are where you store your code, access issues, wiki and other features of GitLab.
+
+ - if current_user.can_create_group?
+ = link_to new_group_path, class: "blank-state blank-state-link" do
.blank-state-icon
- = custom_icon("add_new_project", size: 50)
+ = image_tag("illustrations/welcome/add_new_group")
.blank-state-body
%h3.blank-state-title
- Create a project
+ Create a group
%p.blank-state-text
- Projects are where you store your code, access issues, wiki and other features of GitLab.
+ Groups are a great way to organize projects and people.
- - if current_user.can_create_group?
- = link_to new_group_path, class: "blank-state-link" do
- .blank-state
- .blank-state-icon
- = custom_icon("add_new_group", size: 50)
- .blank-state-body
- %h3.blank-state-title
- Create a group
- %p.blank-state-text
- Groups are a great way to organize projects and people.
-
- = link_to new_admin_user_path, class: "blank-state-link" do
- .blank-state
- .blank-state-icon
- = custom_icon("add_new_user", size: 50)
- .blank-state-body
- %h3.blank-state-title
- Add people
- %p.blank-state-text
- Add your team members and others to GitLab.
-
- = link_to admin_root_path, class: "blank-state-link" do
- .blank-state
+ = link_to new_admin_user_path, class: "blank-state blank-state-link" do
.blank-state-icon
- = custom_icon("configure_server", size: 50)
+ = image_tag("illustrations/welcome/add_new_user")
.blank-state-body
%h3.blank-state-title
- Configure GitLab
+ Add people
%p.blank-state-text
- Make adjustments to how your GitLab instance is set up.
+ Add your team members and others to GitLab.
+
+ = link_to admin_root_path, class: "blank-state blank-state-link" do
+ .blank-state-icon
+ = image_tag("illustrations/welcome/configure_server")
+ .blank-state-body
+ %h3.blank-state-title
+ Configure GitLab
+ %p.blank-state-text
+ Make adjustments to how your GitLab instance is set up.
diff --git a/app/views/dashboard/projects/_blank_state_welcome.html.haml b/app/views/dashboard/projects/_blank_state_welcome.html.haml
index 8d5bddbb288..e3af3405b76 100644
--- a/app/views/dashboard/projects/_blank_state_welcome.html.haml
+++ b/app/views/dashboard/projects/_blank_state_welcome.html.haml
@@ -2,19 +2,18 @@
.blank-state-row
- if current_user.can_create_project?
- = link_to new_project_path, class: "blank-state-link" do
- .blank-state
- .blank-state-icon
- = custom_icon("add_new_project", size: 50)
- .blank-state-body
- %h3.blank-state-title
- Create a project
- %p.blank-state-text
- Projects are where you store your code, access issues, wiki and other features of GitLab.
+ = link_to new_project_path, class: "blank-state blank-state-link" do
+ .blank-state-icon
+ = image_tag("illustrations/welcome/add_new_project")
+ .blank-state-body
+ %h3.blank-state-title
+ Create a project
+ %p.blank-state-text
+ Projects are where you store your code, access issues, wiki and other features of GitLab.
- else
.blank-state
.blank-state-icon
- = custom_icon("add_new_project", size: 50)
+ = image_tag("illustrations/welcome/add_new_project")
.blank-state-body
%h3.blank-state-title
Create a project
@@ -22,37 +21,34 @@
If you are added to a project, it will be displayed here.
- if current_user.can_create_group?
- = link_to new_group_path, class: "blank-state-link" do
- .blank-state
- .blank-state-icon
- = custom_icon("add_new_group", size: 50)
- .blank-state-body
- %h3.blank-state-title
- Create a group
- %p.blank-state-text
- Groups are the best way to manage projects and members.
+ = link_to new_group_path, class: "blank-state blank-state-link" do
+ .blank-state-icon
+ = image_tag("illustrations/welcome/add_new_group")
+ .blank-state-body
+ %h3.blank-state-title
+ Create a group
+ %p.blank-state-text
+ Groups are the best way to manage projects and members.
- if public_project_count > 0
- = link_to trending_explore_projects_path, class: "blank-state-link" do
- .blank-state
- .blank-state-icon
- = custom_icon("globe", size: 50)
- .blank-state-body
- %h3.blank-state-title
- Explore public projects
- %p.blank-state-text
- There are
- = number_with_delimiter(public_project_count)
- public projects on this server.
- Public projects are an easy way to allow
- everyone to have read-only access.
-
- = link_to "https://docs.gitlab.com/", class: "blank-state-link" do
- .blank-state
+ = link_to trending_explore_projects_path, class: "blank-state blank-state-link" do
.blank-state-icon
- = custom_icon("lightbulb", size: 50)
+ = image_tag("illustrations/welcome/globe")
.blank-state-body
%h3.blank-state-title
- Learn more about GitLab
+ Explore public projects
%p.blank-state-text
- Take a look at the documentation to discover all of GitLab's capabilities.
+ There are
+ = number_with_delimiter(public_project_count)
+ public projects on this server.
+ Public projects are an easy way to allow
+ everyone to have read-only access.
+
+ = link_to "https://docs.gitlab.com/", class: "blank-state blank-state-link" do
+ .blank-state-icon
+ = image_tag("illustrations/welcome/lightbulb")
+ .blank-state-body
+ %h3.blank-state-title
+ Learn more about GitLab
+ %p.blank-state-text
+ Take a look at the documentation to discover all of GitLab's capabilities.
diff --git a/app/views/dashboard/projects/_zero_authorized_projects.html.haml b/app/views/dashboard/projects/_zero_authorized_projects.html.haml
index 8933c5d7227..a2b1f0d9298 100644
--- a/app/views/dashboard/projects/_zero_authorized_projects.html.haml
+++ b/app/views/dashboard/projects/_zero_authorized_projects.html.haml
@@ -1,18 +1,13 @@
-.blank-state-parent-container{ class: ('has-start-trial-container' if has_start_trial?) }
+.blank-state-parent-container
.section-container.section-welcome{ class: "#{ 'section-admin-welcome' if current_user.admin? }" }
.container.section-body
.row
- .blank-state-welcome
+ .blank-state-welcome.w-100
%h2.blank-state-welcome-title
- Welcome to GitLab
+ = _('Welcome to GitLab')
%p.blank-state-text
- Code, test, and deploy together
- .blank-state-row
- %div{ class: ('column-large' if has_start_trial?) }
- - if current_user.admin?
- = render "blank_state_admin_welcome"
- - else
- = render "blank_state_welcome"
- - if has_start_trial?
- .column-small
- = render_if_exists "blank_state_ee_trial"
+ = _('Faster releases. Better code. Less pain.')
+ - if current_user.admin?
+ = render "blank_state_admin_welcome"
+ - else
+ = render "blank_state_welcome"
diff --git a/app/views/dashboard/snippets/index.html.haml b/app/views/dashboard/snippets/index.html.haml
index b649fe91c24..2caa8e0cac4 100644
--- a/app/views/dashboard/snippets/index.html.haml
+++ b/app/views/dashboard/snippets/index.html.haml
@@ -6,10 +6,6 @@
- if current_user.snippets.exists?
= render partial: 'snippets/snippets_scope_menu', locals: { include_private: true }
-.d-block.d-sm-none
- &nbsp;
- = link_to _("New snippet"), new_snippet_path, class: "btn btn-success btn-block", title: _("New snippet")
-
- if current_user.snippets.exists?
= render partial: 'shared/snippets/list', locals: { link_project: true }
- else
diff --git a/app/views/devise/registrations/new.html.haml b/app/views/devise/registrations/new.html.haml
index 42cfbbf84f2..5f85235e8fa 100644
--- a/app/views/devise/registrations/new.html.haml
+++ b/app/views/devise/registrations/new.html.haml
@@ -1,4 +1,7 @@
- page_title "Sign up"
-= render 'devise/shared/signup_box'
+- if experiment_enabled?(:signup_flow)
+ = render 'devise/shared/experimental_separate_sign_up_flow_box'
+- else
+ = render 'devise/shared/signup_box'
= render 'devise/shared/sign_in_link'
diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml
index 30ed7ed6b29..8f6c3ecbe58 100644
--- a/app/views/devise/sessions/new.html.haml
+++ b/app/views/devise/sessions/new.html.haml
@@ -4,7 +4,8 @@
- if form_based_providers.any?
= render 'devise/shared/tabs_ldap'
- else
- = render 'devise/shared/tabs_normal'
+ - unless experiment_enabled?(:signup_flow)
+ = render 'devise/shared/tabs_normal'
.tab-content
- if password_authentication_enabled_for_web? || ldap_enabled? || crowd_enabled?
= render 'devise/shared/signin_box'
diff --git a/app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml b/app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml
new file mode 100644
index 00000000000..5d163d03c73
--- /dev/null
+++ b/app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml
@@ -0,0 +1,31 @@
+- content_for(:page_title, _('Register for GitLab'))
+- max_username_length = 255
+.signup-box.p-3.mb-2
+ .signup-body
+ = form_for(resource, as: "new_#{resource_name}", url: registration_path(resource_name), html: { class: "new_new_user gl-show-field-errors", "aria-live" => "assertive" }) do |f|
+ .devise-errors.mt-0
+ = render "devise/shared/error_messages", resource: resource
+ = invisible_captcha
+ .username.form-group
+ = f.label :username, class: 'label-bold'
+ = f.text_field :username, class: "form-control middle js-block-emoji js-validate-length js-validate-username", :data => { :max_length => max_username_length, :max_length_message => s_("SignUp|Username is too long (maximum is %{max_length} characters).") % { max_length: max_username_length }, :qa_selector => 'new_user_username_field' }, pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, required: true, title: _("Please create a username with only alphanumeric characters.")
+ %p.validation-error.gl-field-error-ignore.field-validation.mt-1.hide.cred= _('Username is already taken.')
+ %p.validation-success.gl-field-error-ignore.field-validation.mt-1.hide.cgreen= _('Username is available.')
+ %p.validation-pending.gl-field-error-ignore.field-validation.mt-1.hide= _('Checking username availability...')
+ .form-group
+ = f.label :email, class: 'label-bold'
+ = f.email_field :email, class: "form-control middle", data: { qa_selector: 'new_user_email_field' }, required: true, title: _("Please provide a valid email address.")
+ .form-group.append-bottom-20#password-strength
+ = f.label :password, class: 'label-bold'
+ = f.password_field :password, class: "form-control bottom", data: { qa_selector: 'new_user_password_field' }, required: true, pattern: ".{#{@minimum_password_length},}", title: _("Minimum length is %{minimum_password_length} characters.") % { minimum_password_length: @minimum_password_length }
+ %p.gl-field-hint.text-secondary= _('Minimum length is %{minimum_password_length} characters') % { minimum_password_length: @minimum_password_length }
+ - if Gitlab::CurrentSettings.current_application_settings.enforce_terms?
+ .form-group
+ = check_box_tag :terms_opt_in, '1', false, required: true, data: { qa_selector: 'new_user_accept_terms_checkbox' }
+ = label_tag :terms_opt_in do
+ - terms_link = link_to s_("I accept the|Terms of Service and Privacy Policy"), terms_path, target: "_blank"
+ - accept_terms_label = _("I accept the %{terms_link}") % { terms_link: terms_link }
+ = accept_terms_label.html_safe
+ = render_if_exists 'devise/shared/email_opted_in', f: f
+ .submit-container.mt-3
+ = f.submit _("Register"), class: "btn-register btn btn-block btn-success mb-0 p-2", data: { qa_selector: 'new_user_register_button' }
diff --git a/app/views/devise/shared/_sign_in_link.html.haml b/app/views/devise/shared/_sign_in_link.html.haml
index 77ef103cc47..9a7d8a0a160 100644
--- a/app/views/devise/shared/_sign_in_link.html.haml
+++ b/app/views/devise/shared/_sign_in_link.html.haml
@@ -1,4 +1,4 @@
-%p
+%p.text-center
%span.light
Already have login and password?
= link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes')
diff --git a/app/views/devise/shared/_signin_box.html.haml b/app/views/devise/shared/_signin_box.html.haml
index f8f36a8bfff..746d43edbad 100644
--- a/app/views/devise/shared/_signin_box.html.haml
+++ b/app/views/devise/shared/_signin_box.html.haml
@@ -22,3 +22,8 @@
.login-box.tab-pane.active{ id: 'login-pane', role: 'tabpanel' }
.login-body
= render 'devise/sessions/new_base'
+
+- if experiment_enabled?(:signup_flow)
+ %p.light.mt-2
+ = _("Don't have an account yet?")
+ = link_to _("Register now"), new_registration_path(:user)
diff --git a/app/views/doorkeeper/applications/show.html.haml b/app/views/doorkeeper/applications/show.html.haml
index 6750732ab67..8a1b7500abf 100644
--- a/app/views/doorkeeper/applications/show.html.haml
+++ b/app/views/doorkeeper/applications/show.html.haml
@@ -16,7 +16,7 @@
.input-group
%input.label.label-monospace.monospace{ id: "application_id", type: "text", autocomplete: 'off', value: @application.uid, readonly: true }
.input-group-append
- = clipboard_button(target: '#application_id', title: _("Copy ID to clipboard"), class: "btn btn btn-default")
+ = clipboard_button(target: '#application_id', title: _("Copy ID"), class: "btn btn btn-default")
%tr
%td
= _('Secret')
@@ -25,7 +25,7 @@
.input-group
%input.label.label-monospace.monospace{ id: "secret", type: "text", autocomplete: 'off', value: @application.secret, readonly: true }
.input-group-append
- = clipboard_button(target: '#secret', title: _("Copy secret to clipboard"), class: "btn btn btn-default")
+ = clipboard_button(target: '#secret', title: _("Copy secret"), class: "btn btn btn-default")
%tr
%td
= _('Callback URL')
diff --git a/app/views/events/event/_push.html.haml b/app/views/events/event/_push.html.haml
index 21c418cb0e4..b9e88f3fc47 100644
--- a/app/views/events/event/_push.html.haml
+++ b/app/views/events/event/_push.html.haml
@@ -6,11 +6,13 @@
.event-title.d-flex.flex-wrap
= inline_event_icon(event)
- %span.event-type.d-inline-block.append-right-4.pushed #{event.action_name} #{event.ref_type}
- %span.append-right-4
- - commits_link = project_commits_path(project, event.ref_name)
- - should_link = event.tag? ? project.repository.tag_exists?(event.ref_name) : project.repository.branch_exists?(event.ref_name)
- = link_to_if should_link, event.ref_name, commits_link, class: 'ref-name'
+ - many_refs = event.ref_count.to_i > 1
+ %span.event-type.d-inline-block.append-right-4.pushed= many_refs ? "#{event.action_name} #{event.ref_count} #{event.ref_type.pluralize}" : "#{event.action_name} #{event.ref_type}"
+ - unless many_refs
+ %span.append-right-4
+ - commits_link = project_commits_path(project, event.ref_name)
+ - should_link = event.tag? ? project.repository.tag_exists?(event.ref_name) : project.repository.branch_exists?(event.ref_name)
+ = link_to_if should_link, event.ref_name, commits_link, class: 'ref-name'
= render "events/event_scope", event: event
diff --git a/app/views/groups/_activities.html.haml b/app/views/groups/_activities.html.haml
index 13df1e57125..44554cab1e9 100644
--- a/app/views/groups/_activities.html.haml
+++ b/app/views/groups/_activities.html.haml
@@ -1,5 +1,5 @@
.nav-block.activities
- = render 'shared/event_filter'
+ = render 'shared/event_filter', show_group_events: @group.supports_events?
.controls
= link_to group_path(@group, rss_url_options), class: 'btn d-none d-sm-inline-block has-tooltip' , title: 'Subscribe' do
%i.fa.fa-rss
diff --git a/app/views/groups/_create_chat_team.html.haml b/app/views/groups/_create_chat_team.html.haml
index 561e68a9155..2531993a095 100644
--- a/app/views/groups/_create_chat_team.html.haml
+++ b/app/views/groups/_create_chat_team.html.haml
@@ -8,7 +8,7 @@
.form-check.js-toggle-container
.js-toggle-button.form-check-input= f.check_box(:create_chat_team, { checked: true }, true, false)
= f.label :create_chat_team, class: 'form-check-label' do
- Create a Mattermost team for this group
+ = _('Create a Mattermost team for this group')
%br
%small.light.js-toggle-content
Mattermost URL:
diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml
index 6d06bb246cb..0e78ce9f656 100644
--- a/app/views/groups/edit.html.haml
+++ b/app/views/groups/edit.html.haml
@@ -1,4 +1,4 @@
-- breadcrumb_title "General Settings"
+- breadcrumb_title _("General Settings")
- @content_class = "limit-container-width" unless fluid_layout
- expanded = expanded_by_default?
@@ -32,7 +32,7 @@
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only{ role: 'button' }
= s_('GroupSettings|Badges')
%button.btn.js-settings-toggle{ type: 'button' }
- = expanded ? 'Collapse' : 'Expand'
+ = expanded ? _('Collapse') : _('Expand')
%p
= s_('GroupSettings|Customize your group badges.')
= link_to s_('GroupSettings|Learn more about badges.'), help_page_path('user/project/badges')
diff --git a/app/views/groups/new.html.haml b/app/views/groups/new.html.haml
index 06e05d898d6..376624f4786 100644
--- a/app/views/groups/new.html.haml
+++ b/app/views/groups/new.html.haml
@@ -40,5 +40,5 @@
= render 'create_chat_team', f: f if Gitlab.config.mattermost.enabled
.form-actions
- = f.submit 'Create group', class: "btn btn-success"
- = link_to 'Cancel', dashboard_groups_path, class: 'btn btn-cancel'
+ = f.submit _('Create group'), class: "btn btn-success"
+ = link_to _('Cancel'), dashboard_groups_path, class: 'btn btn-cancel'
diff --git a/app/views/groups/projects.html.haml b/app/views/groups/projects.html.haml
index ba186875a86..8b01e54474a 100644
--- a/app/views/groups/projects.html.haml
+++ b/app/views/groups/projects.html.haml
@@ -8,21 +8,38 @@
.controls
= link_to new_project_path(namespace_id: @group.id), class: "btn btn-sm btn-success" do
New project
- %ul.content-list
+ %ul.projects-list.content-list.group-settings-projects
- @projects.each do |project|
- %li
- .list-item-name
- %span{ class: visibility_level_color(project.visibility_level) }
- = visibility_level_icon(project.visibility_level)
- %strong= link_to project.full_name, project
- .float-right
+ %li.project-row{ class: ('no-description' if project.description.blank?) }
+ .controls
+ = link_to _('Members'), project_project_members_path(project), id: "edit_#{dom_id(project)}", class: "btn"
+ = link_to _('Edit'), edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn"
+ = link_to _('Remove'), project, data: { confirm: remove_project_message(project)}, method: :delete, class: "btn btn-remove"
+
+ .stats
+ %span.badge.badge-pill
+ = storage_counter(project.statistics&.storage_size)
- if project.archived
%span.badge.badge-warning archived
- %span.badge.badge-pill
- = storage_counter(project.statistics.storage_size)
- = link_to 'Members', project_project_members_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-sm"
- = link_to 'Edit', edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-sm"
- = link_to 'Remove', project, data: { confirm: remove_project_message(project)}, method: :delete, class: "btn btn-sm btn-remove"
+
+ .title
+ = link_to(project_path(project)) do
+ .dash-project-avatar
+ .avatar-container.rect-avatar.s40
+ = project_icon(project, alt: '', class: 'avatar project-avatar s40', width: 40, height: 40)
+ %span.project-full-name
+ %span.namespace-name
+ - if project.namespace
+ = project.namespace.human_name
+ \/
+ %span.project-name
+ = project.name
+ %span{ class: visibility_level_color(project.visibility_level) }
+ = visibility_level_icon(project.visibility_level)
+
+ - if project.description.present?
+ .description
+ = markdown_field(project, :description)
- if @projects.blank?
.nothing-here-block This group has no projects yet
diff --git a/app/views/groups/registry/repositories/index.html.haml b/app/views/groups/registry/repositories/index.html.haml
new file mode 100644
index 00000000000..e85b0713230
--- /dev/null
+++ b/app/views/groups/registry/repositories/index.html.haml
@@ -0,0 +1,12 @@
+- page_title _("Container Registry")
+
+%section
+ .row.registry-placeholder.prepend-bottom-10
+ .col-12
+ #js-vue-registry-images{ data: { endpoint: group_container_registries_path(@group, format: :json),
+ "help_page_path" => help_page_path('user/packages/container_registry/index'),
+ "no_containers_image" => image_path('illustrations/docker-empty-state.svg'),
+ "containers_error_image" => image_path('illustrations/docker-error-state.svg'),
+ "repository_url" => "",
+ is_group_page: true,
+ character_error: @character_error.to_s } }
diff --git a/app/views/groups/runners/_group_runners.html.haml b/app/views/groups/runners/_group_runners.html.haml
index fd40ec5a984..f752bc0a702 100644
--- a/app/views/groups/runners/_group_runners.html.haml
+++ b/app/views/groups/runners/_group_runners.html.haml
@@ -10,6 +10,10 @@
-# Proper policies should be implemented per
-# https://gitlab.com/gitlab-org/gitlab-foss/issues/45894
- if can?(current_user, :admin_pipeline, @group)
+ = render partial: 'ci/runner/how_to_setup_runner_automatically',
+ locals: { type: 'group',
+ clusters_path: group_clusters_path(@group) }
+ %hr
= render partial: 'ci/runner/how_to_setup_runner',
locals: { registration_token: @group.runners_token,
type: 'group',
diff --git a/app/views/groups/settings/_advanced.html.haml b/app/views/groups/settings/_advanced.html.haml
index 64fec260f3b..307309c6ca3 100644
--- a/app/views/groups/settings/_advanced.html.haml
+++ b/app/views/groups/settings/_advanced.html.haml
@@ -1,12 +1,12 @@
.sub-section
- %h4.warning-title Change group path
+ %h4.warning-title= s_('GroupSettings|Change group path')
= form_for @group, html: { multipart: true, class: 'gl-show-field-errors' }, authenticity_token: true do |f|
= form_errors(@group)
.form-group
%p
- Changing group path can have unintended side effects.
+ = s_('GroupSettings|Changing group path can have unintended side effects.')
= succeed '.' do
- = link_to 'Learn more', help_page_path('user/group/index', anchor: 'changing-a-groups-path'), target: '_blank'
+ = link_to _('Learn more'), help_page_path('user/group/index', anchor: 'changing-a-groups-path'), target: '_blank'
.input-group.gl-field-error-anchor
.group-root-path.input-group-prepend.has-tooltip{ title: group_path(@group), :'data-placement' => 'bottom' }
@@ -18,24 +18,26 @@
= f.text_field :path, placeholder: 'open-source', class: 'form-control',
autofocus: local_assigns[:autofocus] || false, required: true,
pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS,
- title: 'Please choose a group path with no special characters.',
+ title: s_('GroupSettings|Please choose a group path with no special characters.'),
"data-bind-in" => "#{'create_chat_team' if Gitlab.config.mattermost.enabled}"
- = f.submit 'Change group path', class: 'btn btn-warning'
+ = f.submit s_('GroupSettings|Change group path'), class: 'btn btn-warning'
.sub-section
- %h4.warning-title Transfer group
+ %h4.warning-title= s_('GroupSettings|Transfer group')
= form_for @group, url: transfer_group_path(@group), method: :put, html: { class: 'js-group-transfer-form' } do |f|
.form-group
= dropdown_tag('Select parent group', options: { toggle_class: 'js-groups-dropdown', title: 'Parent Group', filter: true, dropdown_class: 'dropdown-open-top dropdown-group-transfer', placeholder: 'Search groups', data: { data: parent_group_options(@group) } })
= hidden_field_tag 'new_parent_group_id'
%ul
- %li Be careful. Changing a group's parent can have unintended #{link_to 'side effects', 'https://docs.gitlab.com/ce/user/project/index.html#redirects-when-changing-repository-paths', target: 'blank'}.
- %li You can only transfer the group to a group you manage.
- %li You will need to update your local repositories to point to the new location.
- %li If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.
- = f.submit 'Transfer group', class: 'btn btn-warning'
+ - side_effects_link_start = '<a href="https://docs.gitlab.com/ce/user/project/index.html#redirects-when-changing-repository-paths" target="_blank">'
+ - warning_text = s_("GroupSettings|Be careful. Changing a group's parent can have unintended %{side_effects_link_start}side effects%{side_effects_link_end}.") % { side_effects_link_start: side_effects_link_start, side_effects_link_end:'</a>' }
+ %li= warning_text.html_safe
+ %li= s_('GroupSettings|You can only transfer the group to a group you manage.')
+ %li= s_('GroupSettings|You will need to update your local repositories to point to the new location.')
+ %li= s_("GroupSettings|If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.")
+ = f.submit s_('GroupSettings|Transfer group'), class: 'btn btn-warning'
.sub-section
%h4.danger-title= _('Remove group')
diff --git a/app/views/groups/settings/ci_cd/_form.html.haml b/app/views/groups/settings/ci_cd/_form.html.haml
new file mode 100644
index 00000000000..54e88d11827
--- /dev/null
+++ b/app/views/groups/settings/ci_cd/_form.html.haml
@@ -0,0 +1,13 @@
+.row.prepend-top-default
+ .col-lg-12
+ = form_for group, url: group_settings_ci_cd_path(group, anchor: 'js-general-pipeline-settings') do |f|
+ = form_errors(group)
+ %fieldset.builds-feature
+ .form-group
+ = f.label :max_artifacts_size, _('Maximum artifacts size (MB)'), class: 'label-bold'
+ = f.number_field :max_artifacts_size, class: 'form-control'
+ %p.form-text.text-muted
+ = _("Set the maximum file size for each job's artifacts")
+ = link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size-core-only'), target: '_blank'
+
+ = f.submit _('Save changes'), class: "btn btn-success"
diff --git a/app/views/groups/settings/ci_cd/show.html.haml b/app/views/groups/settings/ci_cd/show.html.haml
index d21496ee0aa..a3f35b72cc6 100644
--- a/app/views/groups/settings/ci_cd/show.html.haml
+++ b/app/views/groups/settings/ci_cd/show.html.haml
@@ -2,6 +2,21 @@
- page_title "CI / CD"
- expanded = expanded_by_default?
+- general_expanded = @group.errors.empty? ? expanded : true
+
+-# Given we only have one field in this form which is also admin-only,
+-# we don't want to show an empty section to non-admin users,
+- if can?(current_user, :update_max_artifacts_size, @group)
+ %section.settings#js-general-pipeline-settings.no-animate{ class: ('expanded' if general_expanded) }
+ .settings-header
+ %h4
+ = _("General pipelines")
+ %button.btn.js-settings-toggle{ type: 'button' }
+ = expanded ? _('Collapse') : _('Expand')
+ %p
+ = _("Customize your pipeline configuration.")
+ .settings-content
+ = render 'groups/settings/ci_cd/form', group: @group
%section.settings#ci-variables.no-animate{ class: ('expanded' if expanded) }
.settings-header
diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml
index 0e6c16f0f06..457d05b4a97 100644
--- a/app/views/groups/show.html.haml
+++ b/app/views/groups/show.html.haml
@@ -5,6 +5,8 @@
= auto_discovery_link_tag(:atom, group_url(@group, rss_url_options), title: "#{@group.name} activity")
%div{ class: [("limit-container-width" unless fluid_layout)] }
+ = render_if_exists 'trials/banner', namespace: @group
+
= render 'groups/home_panel'
.groups-listing{ data: { endpoints: { default: group_children_path(@group, format: :json), shared: group_shared_projects_path(@group, format: :json) } } }
diff --git a/app/views/groups/sidebar/_packages.html.haml b/app/views/groups/sidebar/_packages.html.haml
new file mode 100644
index 00000000000..16b902a18b9
--- /dev/null
+++ b/app/views/groups/sidebar/_packages.html.haml
@@ -0,0 +1,16 @@
+- if group_container_registry_nav?
+ = nav_link(path: group_packages_nav_link_paths) do
+ = link_to group_container_registries_path(@group), title: _('Container Registry') do
+ .nav-icon-container
+ = sprite_icon('package')
+ %span.nav-item-name
+ = _('Packages')
+ %ul.sidebar-sub-level-items
+ = nav_link(controller: [:packages, :repositories], html_options: { class: "fly-out-top-item" } ) do
+ = link_to group_container_registries_path(@group), title: _('Container Registry') do
+ %strong.fly-out-top-item-name
+ = _('Packages')
+ %li.divider.fly-out-top-item
+ = nav_link(controller: 'groups/container_registries') do
+ = link_to group_container_registries_path(@group), title: _('Container Registry') do
+ %span= _('Container Registry')
diff --git a/app/views/help/instance_configuration/_ssh_info.html.haml b/app/views/help/instance_configuration/_ssh_info.html.haml
index 987cc61b3f6..a7ee37b2784 100644
--- a/app/views/help/instance_configuration/_ssh_info.html.haml
+++ b/app/views/help/instance_configuration/_ssh_info.html.haml
@@ -1,22 +1,29 @@
- ssh_info = @instance_configuration.settings[:ssh_algorithms_hashes]
-- if ssh_info.any?
- - content_for :table_content do
- %li= link_to 'SSH host keys fingerprints', '#ssh-host-keys-fingerprints'
+- content_for :table_content do
+ %li
+ = link_to _('SSH host key fingerprints'), '#ssh-host-keys-fingerprints'
- - content_for :settings_content do
- %h2#ssh-host-keys-fingerprints
- SSH host keys fingerprints
+- content_for :settings_content do
+ %h2#ssh-host-keys-fingerprints
+ = _('SSH host key fingerprints')
+ - if ssh_info.blank?
%p
- Below are the fingerprints for the current instance SSH host keys.
+ = _('SSH host keys are not available on this system. Please use <code>ssh-keyscan</code> command or contact your GitLab administrator for more information.').html_safe
+ - else
+ %p
+ = _('Below are the fingerprints for the current instance SSH host keys.')
.table-responsive
%table
%thead
%tr
- %th Algorithm
- %th MD5
- %th SHA256
+ %th
+ = _('Algorithm')
+ %th
+ = _('MD5')
+ %th
+ = _('SHA256')
%tbody
- ssh_info.each do |algorithm|
%tr
diff --git a/app/views/help/show.html.haml b/app/views/help/show.html.haml
index dce27dee9be..dace8a77736 100644
--- a/app/views/help/show.html.haml
+++ b/app/views/help/show.html.haml
@@ -1,3 +1,5 @@
- page_title @path.split("/").reverse.map(&:humanize)
+- @content_class = "limit-container-width" unless fluid_layout
+
.documentation.md.prepend-top-default
= markdown @markdown
diff --git a/app/views/help/ui.html.haml b/app/views/help/ui.html.haml
index cdc894ee5a0..b8a421ac9d3 100644
--- a/app/views/help/ui.html.haml
+++ b/app/views/help/ui.html.haml
@@ -508,8 +508,7 @@
.btn-group
%a.btn Edit
%a.btn.btn-danger Remove
- .file-contenta.code
- = render 'shared/file_highlight', blob: blob
+ = render 'shared/file_highlight', blob: blob
%h2#markdown Markdown
%h4
diff --git a/app/views/import/bitbucket/status.html.haml b/app/views/import/bitbucket/status.html.haml
index 2336e1e83f9..7399ff937ce 100644
--- a/app/views/import/bitbucket/status.html.haml
+++ b/app/views/import/bitbucket/status.html.haml
@@ -8,7 +8,6 @@
- if @repos.any?
%p.light
= _('Select projects you want to import.')
- %hr
%p
- if @incompatible_repos.any?
= button_tag class: 'btn btn-import btn-success js-import-all' do
@@ -19,6 +18,14 @@
= _('Import all projects')
= icon('spinner spin', class: 'loading-icon')
+.position-relative.ms-no-clear.d-flex.flex-fill.float-right.append-bottom-10
+ = form_tag status_import_bitbucket_path, method: 'get' do
+ = text_field_tag :filter, @filter, class: 'form-control pr-5', placeholder: _('Filter projects'), size: 40, autofocus: true, 'aria-label': _('Search')
+ .position-absolute.position-top-0.d-flex.align-items-center.text-muted.position-right-0.h-100
+ .border-left
+ %button{ class: 'btn btn-transparent btn-secondary', 'aria-label': _('Search Button'), type: 'submit' }
+ %i{ class: 'fa fa-search', 'aria-hidden': true }
+
.table-responsive
%table.table.import-jobs
%colgroup.import-jobs-from-col
@@ -59,7 +66,7 @@
- if current_user.can_select_namespace?
- selected = params[:namespace_id] || :current_user
- opts = current_user.can_create_group? ? { extra_group: Group.new(name: repo.owner, path: repo.owner) } : {}
- = select_tag :namespace_id, namespaces_options(selected, opts.merge({ display_path: true })), { class: 'input-group-text select2 js-select-namespace', tabindex: 1 }
+ = select_tag :namespace_id, namespaces_options(selected, opts.merge({ display_path: true })), { class: 'select2 js-select-namespace', tabindex: 1 }
- else
= text_field_tag :path, current_user.namespace_path, class: "input-group-text input-large form-control", tabindex: 1, disabled: true
%span.input-group-prepend
diff --git a/app/views/import/bitbucket_server/status.html.haml b/app/views/import/bitbucket_server/status.html.haml
index aac09801d91..1aaf5883bf4 100644
--- a/app/views/import/bitbucket_server/status.html.haml
+++ b/app/views/import/bitbucket_server/status.html.haml
@@ -62,7 +62,7 @@
- if current_user.can_select_namespace?
- selected = params[:namespace_id] || :extra_group
- opts = current_user.can_create_group? ? { extra_group: Group.new(name: sanitize_project_name(repo.project_key), path: sanitize_project_name(repo.project_key)) } : {}
- = select_tag :namespace_id, namespaces_options(selected, opts.merge({ display_path: true })), { class: 'input-group-text select2 js-select-namespace', tabindex: 1 }
+ = select_tag :namespace_id, namespaces_options(selected, opts.merge({ display_path: true })), { class: 'select2 js-select-namespace', tabindex: 1 }
- else
= text_field_tag :path, current_user.namespace_path, class: "input-group-text input-large form-control", tabindex: 1, disabled: true
%span.input-group-prepend
diff --git a/app/views/layouts/_flash.html.haml b/app/views/layouts/_flash.html.haml
index d673d7164b3..92572f0308c 100644
--- a/app/views/layouts/_flash.html.haml
+++ b/app/views/layouts/_flash.html.haml
@@ -5,4 +5,5 @@
- if value
%div{ class: "flash-content flash-#{key} rounded" }
%span= value
- = sprite_icon('close', size: 16, css_class: 'close-icon')
+ %div{ class: "close-icon-wrapper js-close-icon" }
+ = sprite_icon('close', size: 16, css_class: 'close-icon')
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index 68abfd3f61f..b8c9f0ae1e8 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -1,5 +1,17 @@
- page_description brand_title unless page_description
+-# Needs a redirect on the client side since it's using an anchor to distuingish
+-# between sign in and registration. We need to inline the JS to not render
+-# anything from this page beforehand.
+-# Part of an experiment to build a new sign up flow. Will be removed again with
+-# https://gitlab.com/gitlab-org/growth/engineering/issues/64
+- if experiment_enabled?(:signup_flow) && current_path?("sessions#new")
+ = javascript_tag nonce: true do
+ :plain
+ if (window.location.hash === '#register-pane') {
+ window.location.replace("/users/sign_up")
+ }
+
- site_name = "GitLab"
%head{ prefix: "og: http://ogp.me/ns#" }
%meta{ charset: "utf-8" }
diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml
index 443a73f5cce..6cdb85456c3 100644
--- a/app/views/layouts/_page.html.haml
+++ b/app/views/layouts/_page.html.haml
@@ -17,4 +17,6 @@
%div{ class: "#{(container_class unless @no_container)} #{@content_class}" }
.content{ id: "content-body" }
= render "layouts/flash", extra_flash_class: 'limit-container-width'
+ - if Gitlab.com?
+ = render_if_exists "layouts/privacy_policy_update_callout"
= yield
diff --git a/app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml b/app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml
new file mode 100644
index 00000000000..2f05717fc0e
--- /dev/null
+++ b/app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml
@@ -0,0 +1,26 @@
+!!! 5
+%html.devise-layout-html.navless{ class: system_message_class }
+ = render "layouts/head"
+ %body.ui-indigo.signup-page.application.navless{ class: "#{client_class_list}", data: { page: body_data_page, qa_selector: 'signup_page' } }
+ = header_message
+ = render "layouts/init_client_detection_flags"
+ .page-wrap
+ .container.signup-box-container.navless-container.mt-0
+ = render "layouts/broadcast"
+ .content
+ = render "layouts/flash"
+ .row.mb-3
+ .col-sm-8.offset-sm-2.col-md-6.offset-md-3.new-session-forms-container
+ = render_if_exists 'layouts/devise_help_text'
+ .text-center.signup-heading.mt-3.mb-3
+ = image_tag(image_url('logo.svg'), class: 'gitlab-logo', alt: 'GitLab Logo')
+ - if content_for?(:page_title)
+ %h2= yield :page_title
+ = yield
+ %hr.footer-fixed
+ .footer-container
+ .container
+ .footer-links
+ = link_to _("Help"), help_path
+ = link_to _("About GitLab"), "https://about.gitlab.com/"
+ = footer_message
diff --git a/app/views/layouts/header/_current_user_dropdown.html.haml b/app/views/layouts/header/_current_user_dropdown.html.haml
index 808290afcad..efe74ddd902 100644
--- a/app/views/layouts/header/_current_user_dropdown.html.haml
+++ b/app/views/layouts/header/_current_user_dropdown.html.haml
@@ -21,6 +21,24 @@
- if current_user_menu?(:settings)
%li
= link_to s_("CurrentUser|Settings"), profile_path, data: { qa_selector: 'settings_link' }
+
+ - if current_user_menu?(:help)
+ %li.divider.d-md-none
+ %li.d-md-none
+ = link_to _("Help"), help_path
+ %li.d-md-none
+ = link_to _("Support"), support_url
+ = render_if_exists "shared/learn_gitlab_menu_item"
+ %li.d-md-none
+ = link_to _("Submit feedback"), "https://about.gitlab.com/submit-feedback"
+ - if current_user_menu?(:help) || current_user_menu?(:settings) || current_user_menu?(:profile)
+ %li.d-md-none
+ = render 'shared/user_dropdown_contributing_link'
+ = render_if_exists 'shared/user_dropdown_instance_review'
+ - if Gitlab.com?
+ %li.js-canary-link.d-md-none
+ = link_to _("Switch to GitLab Next"), "https://next.gitlab.com/"
+
- if current_user_menu?(:sign_out)
%li.divider
%li
diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml
index 14c7b2428b2..d8697be7f7a 100644
--- a/app/views/layouts/header/_default.html.haml
+++ b/app/views/layouts/header/_default.html.haml
@@ -33,9 +33,9 @@
- if current_user
= render 'layouts/header/new_dropdown'
- if header_link?(:search)
- %li.nav-item.d-none.d-sm-none.d-md-block.m-auto
+ %li.nav-item.d-none.d-lg-block.m-auto
= render 'layouts/search' unless current_controller?(:search)
- %li.nav-item.d-inline-block.d-sm-none.d-md-none
+ %li.nav-item.d-inline-block.d-lg-none
= link_to search_path_url, title: _('Search'), aria: { label: _('Search') }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
= sprite_icon('search', size: 16)
- if header_link?(:issues)
@@ -58,7 +58,7 @@
= sprite_icon('todo-done', size: 16)
%span.badge.badge-pill.todos-count{ class: ('hidden' if todos_pending_count.zero?) }
= todos_count_format(todos_pending_count)
- %li.nav-item.header-help.dropdown
+ %li.nav-item.header-help.dropdown.d-none.d-md-block
= link_to help_path, class: 'header-help-dropdown-toggle', data: { toggle: "dropdown" } do
= sprite_icon('question', size: 16)
= sprite_icon('angle-down', css_class: 'caret-down')
@@ -73,7 +73,7 @@
= render 'layouts/header/current_user_dropdown'
- if has_impersonation_link
%li.nav-item.impersonation.ml-0
- = link_to admin_impersonation_path, class: 'nav-link impersonation-btn', method: :delete, title: _('Stop impersonation'), aria: { label: _('Stop impersonation') }, data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do
+ = link_to admin_impersonation_path, class: 'nav-link impersonation-btn', method: :delete, title: _('Stop impersonation'), aria: { label: _('Stop impersonation') }, data: { toggle: 'tooltip', placement: 'bottom', container: 'body', qa_selector: 'stop_impersonation_link' } do
= icon('user-secret')
- if header_link?(:sign_in)
%li.nav-item
diff --git a/app/views/layouts/header/_help_dropdown.html.haml b/app/views/layouts/header/_help_dropdown.html.haml
index 41d7aa3741a..71977b23481 100644
--- a/app/views/layouts/header/_help_dropdown.html.haml
+++ b/app/views/layouts/header/_help_dropdown.html.haml
@@ -9,7 +9,8 @@
%li
= link_to _("Submit feedback"), "https://about.gitlab.com/submit-feedback"
- if current_user_menu?(:help) || current_user_menu?(:settings) || current_user_menu?(:profile)
- = render 'shared/user_dropdown_contributing_link'
+ %li
+ = render 'shared/user_dropdown_contributing_link'
= render_if_exists 'shared/user_dropdown_instance_review'
- if Gitlab.com?
%li.js-canary-link
diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml
index 7b0824ae2af..5122c2517aa 100644
--- a/app/views/layouts/nav/_dashboard.html.haml
+++ b/app/views/layouts/nav/_dashboard.html.haml
@@ -10,37 +10,24 @@
= render "layouts/nav/projects_dropdown/show"
- if dashboard_nav_link?(:groups)
- = nav_link(controller: ['dashboard/groups', 'explore/groups'], html_options: { id: 'nav-groups-dropdown', class: "home dropdown header-groups qa-groups-dropdown", data: { track_label: "groups_dropdown", track_event: "click_dropdown", track_value: "" } }) do
+ = nav_link(controller: ['dashboard/groups', 'explore/groups'], html_options: { id: 'nav-groups-dropdown', class: "d-none d-md-block home dropdown header-groups qa-groups-dropdown", data: { track_label: "groups_dropdown", track_event: "click_dropdown", track_value: "" } }) do
%button.btn{ type: 'button', data: { toggle: "dropdown" } }
= _('Groups')
= sprite_icon('angle-down', css_class: 'caret-down')
.dropdown-menu.frequent-items-dropdown-menu
= render "layouts/nav/groups_dropdown/show"
- - if dashboard_nav_link?(:activity)
- = nav_link(path: 'dashboard#activity', html_options: { class: ["d-none d-xl-block", ("d-lg-block" unless has_extra_nav_icons?)] }) do
- = link_to activity_dashboard_path, class: 'dashboard-shortcuts-activity' do
- = _('Activity')
-
- - if dashboard_nav_link?(:milestones)
- = nav_link(controller: 'dashboard/milestones', html_options: { class: ["d-none d-xl-block", ("d-lg-block" unless has_extra_nav_icons?)] }) do
- = link_to dashboard_milestones_path, class: 'dashboard-shortcuts-milestones' do
- = _('Milestones')
-
- - if dashboard_nav_link?(:snippets)
- = nav_link(controller: 'dashboard/snippets', html_options: { class: ["d-none d-xl-block", ("d-lg-block" unless has_extra_nav_icons?)] }) do
- = link_to dashboard_snippets_path, class: 'dashboard-shortcuts-snippets qa-snippets-link' do
- = _('Snippets')
-
- = render_if_exists 'layouts/nav/sidebar/analytics_link'
-
- if any_dashboard_nav_link?([:groups, :milestones, :activity, :snippets])
- %li.header-more.dropdown.d-xl-none{ class: ('d-lg-none' unless has_extra_nav_icons?) }
- %a{ href: "#", data: { toggle: "dropdown" } }
+ %li.header-more.dropdown
+ %a{ href: "#", data: { toggle: "dropdown", qa_selector: 'more_dropdown' } }
= _('More')
= sprite_icon('angle-down', css_class: 'caret-down')
.dropdown-menu
%ul
+ - if dashboard_nav_link?(:groups)
+ %li.d-md-none
+ = link_to dashboard_groups_path do
+ = _('Groups')
- if dashboard_nav_link?(:activity)
= nav_link(path: 'dashboard#activity') do
= link_to activity_dashboard_path do
@@ -53,51 +40,45 @@
- if dashboard_nav_link?(:snippets)
= nav_link(controller: 'dashboard/snippets') do
- = link_to dashboard_snippets_path, class: 'dashboard-shortcuts-snippets' do
+ = link_to dashboard_snippets_path, class: 'dashboard-shortcuts-snippets', data: { qa_selector: 'snippets_link' } do
= _('Snippets')
- = render_if_exists 'layouts/nav/sidebar/analytics_more_link'
+ = render_if_exists 'layouts/nav/sidebar/analytics_link'
- %li.dropdown.d-lg-none
- = render_if_exists 'dashboard/operations/nav_link_list'
+ %li.dropdown
+ = render_if_exists 'dashboard/nav_link_list'
- if can?(current_user, :read_instance_statistics)
- = nav_link(controller: [:conversational_development_index, :cohorts], html_options: { class: 'd-lg-none' }) do
+ = nav_link(controller: [:conversational_development_index, :cohorts]) do
= link_to instance_statistics_root_path do
= _('Instance Statistics')
- if current_user.admin?
= nav_link(controller: 'admin/dashboard') do
- = link_to admin_root_path, class: 'd-lg-none admin-icon qa-admin-area-link' do
+ = link_to admin_root_path, class: 'admin-icon qa-admin-area-link d-xl-none' do
= _('Admin Area')
+ - if Feature.enabled?(:user_mode_in_session)
+ - if header_link?(:admin_mode)
+ = nav_link(controller: 'admin/sessions') do
+ = link_to destroy_admin_session_path, class: 'd-lg-none lock-open-icon' do
+ = _('Leave admin mode')
+ - elsif current_user.admin?
+ = nav_link(controller: 'admin/sessions') do
+ = link_to new_admin_session_path, class: 'd-lg-none lock-icon' do
+ = _('Enter admin mode')
- if Gitlab::Sherlock.enabled?
%li
- = link_to sherlock_transactions_path, class: 'd-lg-none admin-icon' do
+ = link_to sherlock_transactions_path, class: 'admin-icon' do
= _('Sherlock Transactions')
+ - if current_user.admin?
+ = nav_link(controller: 'admin/dashboard', html_options: { class: "d-none d-xl-block"}) do
+ = link_to admin_root_path, class: 'admin-icon qa-admin-area-link', title: _('Admin Area'), aria: { label: _('Admin Area') }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
+ = sprite_icon('admin', size: 18)
+
+
-# Shortcut to Dashboard > Projects
- if dashboard_nav_link?(:projects)
%li.hidden
= link_to dashboard_projects_path, class: 'dashboard-shortcuts-projects' do
= _('Projects')
- - if current_controller?('ide')
- %li.line-separator.d-none.d-sm-block
- = nav_link(controller: 'ide') do
- = link_to '#', class: 'dashboard-shortcuts-web-ide' do
- = _('Web IDE')
-
- %li.dropdown{ class: 'd-none d-lg-block' }
- = render_if_exists 'dashboard/operations/nav_link'
- - if can?(current_user, :read_instance_statistics)
- = nav_link(controller: [:conversational_development_index, :cohorts], html_options: { class: "d-none d-lg-block d-xl-block"}) do
- = link_to instance_statistics_root_path, title: _('Instance Statistics'), aria: { label: _('Instance Statistics') }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
- = sprite_icon('chart', size: 18)
- - if current_user.admin?
- = nav_link(controller: 'admin/dashboard', html_options: { class: "d-none d-lg-block d-xl-block"}) do
- = link_to admin_root_path, class: 'admin-icon qa-admin-area-link', title: _('Admin Area'), aria: { label: _('Admin Area') }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
- = sprite_icon('admin', size: 18)
- - if Gitlab::Sherlock.enabled?
- %li
- = link_to sherlock_transactions_path, class: 'admin-icon d-none d-lg-block d-xl-block', title: _('Sherlock Transactions'),
- data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
- = icon('tachometer fw')
= render_if_exists 'layouts/nav/geo_primary_node_url'
diff --git a/app/views/layouts/nav/sidebar/_admin.html.haml b/app/views/layouts/nav/sidebar/_admin.html.haml
index 784fe556123..b33ef26f87d 100644
--- a/app/views/layouts/nav/sidebar/_admin.html.haml
+++ b/app/views/layouts/nav/sidebar/_admin.html.haml
@@ -6,7 +6,7 @@
= sprite_icon('admin', size: 24)
.sidebar-context-title
= _('Admin Area')
- %ul.sidebar-top-level-items
+ %ul.sidebar-top-level-items{ data: { qa_selector: 'admin_sidebar_overview_submenu_content' } }
= nav_link(controller: %w(dashboard admin admin/projects users groups jobs runners gitaly_servers), html_options: {class: 'home'}) do
= link_to admin_root_path, class: 'shortcuts-tree' do
.nav-icon-container
@@ -28,7 +28,7 @@
%span
= _('Projects')
= nav_link(controller: :users) do
- = link_to admin_users_path, title: _('Users') do
+ = link_to admin_users_path, title: _('Users') , data: { qa_selector: 'users_overview_link' } do
%span
= _('Users')
= nav_link(controller: :groups) do
@@ -49,13 +49,13 @@
= _('Gitaly Servers')
= nav_link(controller: admin_monitoring_nav_links) do
- = link_to admin_system_info_path do
+ = link_to admin_system_info_path, data: { qa_selector: 'admin_monitoring_link' } do
.nav-icon-container
= sprite_icon('monitor')
%span.nav-item-name
= _('Monitoring')
- %ul.sidebar-sub-level-items
+ %ul.sidebar-sub-level-items{ data: { qa_selector: 'admin_sidebar_monitoring_submenu_content' } }
= nav_link(controller: %w(system_info background_jobs logs health_check requests_profiles), html_options: { class: "fly-out-top-item" } ) do
= link_to admin_system_info_path do
%strong.fly-out-top-item-name
@@ -225,7 +225,7 @@
%span.nav-item-name.qa-admin-settings-item
= _('Settings')
- %ul.sidebar-sub-level-items.qa-admin-sidebar-submenu
+ %ul.sidebar-sub-level-items.qa-admin-sidebar-settings-submenu
= nav_link(controller: :application_settings, html_options: { class: "fly-out-top-item" } ) do
= link_to admin_application_settings_path do
%strong.fly-out-top-item-name
diff --git a/app/views/layouts/nav/sidebar/_group.html.haml b/app/views/layouts/nav/sidebar/_group.html.haml
index 7cc7d1783c4..4930c6cf5f7 100644
--- a/app/views/layouts/nav/sidebar/_group.html.haml
+++ b/app/views/layouts/nav/sidebar/_group.html.haml
@@ -118,7 +118,7 @@
%strong.fly-out-top-item-name
= _('Kubernetes')
- = render_if_exists 'groups/sidebar/packages' # EE-specific
+ = render_if_exists 'groups/sidebar/packages'
- if group_sidebar_link?(:group_members)
= nav_link(path: 'group_members#index') do
diff --git a/app/views/layouts/nav/sidebar/_profile.html.haml b/app/views/layouts/nav/sidebar/_profile.html.haml
index 22ac9ee234d..9be39d14169 100644
--- a/app/views/layouts/nav/sidebar/_profile.html.haml
+++ b/app/views/layouts/nav/sidebar/_profile.html.haml
@@ -64,7 +64,7 @@
%strong.fly-out-top-item-name
= _('Access Tokens')
= nav_link(controller: :emails) do
- = link_to profile_emails_path do
+ = link_to profile_emails_path, data: { qa_selector: 'profile_emails_link' } do
.nav-icon-container
= sprite_icon('mail')
%span.nav-item-name
@@ -76,7 +76,7 @@
= _('Emails')
- if current_user.allow_password_authentication?
= nav_link(controller: :passwords) do
- = link_to edit_profile_password_path do
+ = link_to edit_profile_password_path , data: { qa_selector: 'profile_password_link' } do
.nav-icon-container
= sprite_icon('lock')
%span.nav-item-name
diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml
index 48fea2bbecf..c84bc0b5cd4 100644
--- a/app/views/layouts/nav/sidebar/_project.html.haml
+++ b/app/views/layouts/nav/sidebar/_project.html.haml
@@ -182,11 +182,17 @@
= _('Pipelines')
- if project_nav_tab? :builds
- = nav_link(controller: [:jobs, :artifacts]) do
+ = nav_link(controller: :jobs) do
= link_to project_jobs_path(@project), title: _('Jobs'), class: 'shortcuts-builds' do
%span
= _('Jobs')
+ - if Feature.enabled?(:artifacts_management_page, @project)
+ = nav_link(controller: :artifacts, action: :index) do
+ = link_to project_artifacts_path(@project), title: _('Artifacts'), class: 'shortcuts-builds' do
+ %span
+ = _('Artifacts')
+
- if project_nav_tab? :pipelines
= nav_link(controller: :pipeline_schedules) do
= link_to pipeline_schedules_path(@project), title: _('Schedules'), class: 'shortcuts-builds' do
diff --git a/app/views/notify/new_release_email.html.haml b/app/views/notify/new_release_email.html.haml
new file mode 100644
index 00000000000..45e99f3c07a
--- /dev/null
+++ b/app/views/notify/new_release_email.html.haml
@@ -0,0 +1,18 @@
+- release_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: @target_url }
+- description_details = { tag: @release.tag, name: @project.name, release_link_start: release_link_start, release_link_end: '</a>'.html_safe }
+
+%div{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;" }
+ %p
+ = _("A new Release %{tag} for %{name} was published. Visit the %{release_link_start}Releases page%{release_link_end} to read more about it.").html_safe % description_details
+
+ %p
+ %h4= _("Assets:")
+ %ul
+ - @release.links.each do |link|
+ %li= link_to(link.name, link.url)
+ - @release.sources.each do |source|
+ %li= link_to(_("Download %{format}") % { format: source.format }, source.url)
+
+ %p
+ %h4= _("Release notes:")
+ = markdown_field(@release, :description)
diff --git a/app/views/notify/new_release_email.text.erb b/app/views/notify/new_release_email.text.erb
new file mode 100644
index 00000000000..e03cf2d5fd1
--- /dev/null
+++ b/app/views/notify/new_release_email.text.erb
@@ -0,0 +1,12 @@
+<%= _("A new Release %{tag} for %{name} was published. Visit the Releases page to read more about it:").html_safe % { tag: @release.tag, name: @project.name } %> <%= @target_url %>
+
+<%= _("Assets:") %>
+<% @release.links.each do |link| -%>
+ - <%= link.name %>: <%= link.url %>
+<% end -%>
+<% @release.sources.each do |source| -%>
+ - <%= _("Download %{format}:") % { format: source.format } %> <%= source.url %>
+<% end -%>
+
+<%= _("Release notes:") %>
+<%= @release.description %>
diff --git a/app/views/notify/pipeline_failed_email.html.haml b/app/views/notify/pipeline_failed_email.html.haml
index 86dcca4a447..f01181857ce 100644
--- a/app/views/notify/pipeline_failed_email.html.haml
+++ b/app/views/notify/pipeline_failed_email.html.haml
@@ -34,7 +34,7 @@
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-branch-gray.gif'), style: "display:block;", width: "13", alt: "" }/
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
%a.muted{ href: commits_url(@pipeline), style: "color:#333333;text-decoration:none;" }
- = @pipeline.ref
+ = @pipeline.source_ref
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Commit
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:400;padding:14px 0;margin:0;color:#333333;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
diff --git a/app/views/notify/pipeline_failed_email.text.erb b/app/views/notify/pipeline_failed_email.text.erb
index 722eedf90be..9cd479ef1e6 100644
--- a/app/views/notify/pipeline_failed_email.text.erb
+++ b/app/views/notify/pipeline_failed_email.text.erb
@@ -1,7 +1,7 @@
Your pipeline has failed.
Project: <%= @project.name %> ( <%= project_url(@project) %> )
-Branch: <%= @pipeline.ref %> ( <%= commits_url(@pipeline) %> )
+Branch: <%= @pipeline.source_ref %> ( <%= commits_url(@pipeline) %> )
<% if @merge_request -%>
Merge Request: <%= @merge_request.to_reference %> ( <%= merge_request_url(@merge_request) %> )
<% end -%>
diff --git a/app/views/notify/pipeline_success_email.html.haml b/app/views/notify/pipeline_success_email.html.haml
index 4fe3c4c8269..e575a5569fa 100644
--- a/app/views/notify/pipeline_success_email.html.haml
+++ b/app/views/notify/pipeline_success_email.html.haml
@@ -34,7 +34,7 @@
%img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-branch-gray.gif'), style: "display:block;", width: "13", alt: "" }/
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" }
%a.muted{ href: commits_url(@pipeline), style: "color:#333333;text-decoration:none;" }
- = @pipeline.ref
+ = @pipeline.source_ref
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Commit
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:400;padding:14px 0;margin:0;color:#333333;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
diff --git a/app/views/notify/pipeline_success_email.text.erb b/app/views/notify/pipeline_success_email.text.erb
index 9aadf380f79..4005158dc9e 100644
--- a/app/views/notify/pipeline_success_email.text.erb
+++ b/app/views/notify/pipeline_success_email.text.erb
@@ -1,7 +1,7 @@
Your pipeline has passed.
Project: <%= @project.name %> ( <%= project_url(@project) %> )
-Branch: <%= @pipeline.ref %> ( <%= commits_url(@pipeline) %> )
+Branch: <%= @pipeline.source_ref %> ( <%= commits_url(@pipeline) %> )
<% if @merge_request -%>
Merge Request: <%= @merge_request.to_reference %> ( <%= merge_request_url(@merge_request) %> )
<% end -%>
diff --git a/app/views/profiles/emails/index.html.haml b/app/views/profiles/emails/index.html.haml
index 3c20518c038..6ea4eeb66c5 100644
--- a/app/views/profiles/emails/index.html.haml
+++ b/app/views/profiles/emails/index.html.haml
@@ -13,9 +13,9 @@
= form_for 'email', url: profile_emails_path do |f|
.form-group
= f.label :email, _('Email'), class: 'label-bold'
- = f.text_field :email, class: 'form-control'
+ = f.text_field :email, class: 'form-control', data: { qa_selector: 'email_address_field' }
.prepend-top-default
- = f.submit _('Add email address'), class: 'btn btn-success'
+ = f.submit _('Add email address'), class: 'btn btn-success', data: { qa_selector: 'add_email_address_button' }
%hr
%h4.prepend-top-0
= _('Linked emails (%{email_count})') % { email_count: @emails.count + 1 }
@@ -45,7 +45,7 @@
- if @primary_email === current_user.notification_email
%span.badge.badge-info= s_('Profiles|Default notification email')
- @emails.each do |email|
- %li
+ %li{ data: { qa_selector: 'email_row_content' } }
= render partial: 'shared/email_with_badge', locals: { email: email.email, verified: email.confirmed? }
%span.float-right
- if email.email === current_user.commit_email
@@ -58,6 +58,6 @@
- confirm_title = "#{email.confirmation_sent_at ? _('Resend confirmation email') : _('Send confirmation email')}"
= link_to confirm_title, resend_confirmation_instructions_profile_email_path(email), method: :put, class: 'btn btn-sm btn-warning prepend-left-10'
- = link_to profile_email_path(email), data: { confirm: _('Are you sure?')}, method: :delete, class: 'btn btn-sm btn-danger prepend-left-10' do
+ = link_to profile_email_path(email), data: { confirm: _('Are you sure?'), qa_selector: 'delete_email_link'}, method: :delete, class: 'btn btn-sm btn-danger prepend-left-10' do
%span.sr-only= _('Remove')
= icon('trash')
diff --git a/app/views/profiles/notifications/_group_settings.html.haml b/app/views/profiles/notifications/_group_settings.html.haml
index 1776d260e19..33b0aa93d84 100644
--- a/app/views/profiles/notifications/_group_settings.html.haml
+++ b/app/views/profiles/notifications/_group_settings.html.haml
@@ -12,5 +12,5 @@
= render 'shared/notifications/button', notification_setting: setting, emails_disabled: emails_disabled
.table-section.section-30
- = form_for @user.notification_settings.find { |ns| ns.source == group }, url: profile_notifications_group_path(group), method: :put, html: { class: 'update-notifications' } do |f|
+ = form_for setting, url: profile_notifications_group_path(group), method: :put, html: { class: 'update-notifications' } do |f|
= f.select :notification_email, @user.all_emails, { include_blank: 'Global notification email' }, class: 'select2 js-group-notification-email'
diff --git a/app/views/profiles/passwords/edit.html.haml b/app/views/profiles/passwords/edit.html.haml
index ac8c31189d0..0e2b0430fec 100644
--- a/app/views/profiles/passwords/edit.html.haml
+++ b/app/views/profiles/passwords/edit.html.haml
@@ -20,16 +20,16 @@
- unless @user.password_automatically_set?
.form-group
= f.label :current_password, _('Current password'), class: 'label-bold'
- = f.password_field :current_password, required: true, class: 'form-control'
+ = f.password_field :current_password, required: true, class: 'form-control', data: { qa_selector: 'current_password_field' }
%p.form-text.text-muted
= _('You must provide your current password in order to change it.')
.form-group
= f.label :password, _('New password'), class: 'label-bold'
- = f.password_field :password, required: true, class: 'form-control'
+ = f.password_field :password, required: true, class: 'form-control', data: { qa_selector: 'new_password_field' }
.form-group
= f.label :password_confirmation, _('Password confirmation'), class: 'label-bold'
- = f.password_field :password_confirmation, required: true, class: 'form-control'
+ = f.password_field :password_confirmation, required: true, class: 'form-control', data: { qa_selector: 'confirm_password_field' }
.prepend-top-default.append-bottom-default
- = f.submit _('Save password'), class: "btn btn-success append-right-10"
+ = f.submit _('Save password'), class: "btn btn-success append-right-10", data: { qa_selector: 'save_password_button' }
- unless @user.password_automatically_set?
= link_to _('I forgot my password'), reset_profile_password_path, method: :put, class: "account-btn-link"
diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml
index 0576f51fa83..68b7efc6fb4 100644
--- a/app/views/profiles/show.html.haml
+++ b/app/views/profiles/show.html.haml
@@ -94,6 +94,7 @@
- else
= f.text_field :name, label: s_('Profiles|Full name'), required: true, title: s_("Profiles|Using emojis in names seems fun, but please try to set a status message instead"), wrapper: { class: 'col-md-9 qa-full-name rspec-full-name' }, help: s_("Profiles|Enter your name, so people you know can recognize you")
= f.text_field :id, readonly: true, label: s_('Profiles|User ID'), wrapper: { class: 'col-md-3' }
+ = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'input-md'
= render_if_exists 'profiles/email_settings', form: f
= f.text_field :skype, class: 'input-md', placeholder: s_("Profiles|username")
diff --git a/app/views/projects/_export.html.haml b/app/views/projects/_export.html.haml
index f564ed41760..e4129a91daf 100644
--- a/app/views/projects/_export.html.haml
+++ b/app/views/projects/_export.html.haml
@@ -10,12 +10,8 @@
%p.append-bottom-0
%p= _('The following items will be exported:')
%ul
- %li= _('Project and wiki repositories')
- %li= _('Project uploads')
- %li= _('Project configuration, including services')
- %li= _('Issues with comments, merge requests with diffs and comments, labels, milestones, snippets, and other project entities')
- %li= _('LFS objects')
- %li= _('Issue Boards')
+ - project_export_descriptions.each do |desc|
+ %li= desc
%p= _('The following items will NOT be exported:')
%ul
%li= _('Job traces and artifacts')
diff --git a/app/views/projects/_new_project_push_tip.html.haml b/app/views/projects/_new_project_push_tip.html.haml
index 22e9522c0e7..e008130436c 100644
--- a/app/views/projects/_new_project_push_tip.html.haml
+++ b/app/views/projects/_new_project_push_tip.html.haml
@@ -6,6 +6,6 @@
%span
= text_field_tag :push_to_create_tip, push_to_create_project_command, class: "js-select-on-focus form-control monospace", readonly: true, aria: { label: _("Push project from command line") }
%span.input-group-append
- = clipboard_button(text: push_to_create_project_command, title: _("Copy command to clipboard"), class: 'input-group-text', placement: "right")
+ = clipboard_button(text: push_to_create_project_command, title: _("Copy command"), class: 'input-group-text', placement: "right")
%p
= link_to("What does this command do?", help_page_path("gitlab-basics/create-project", anchor: "push-to-create-a-new-project"), target: "_blank")
diff --git a/app/views/projects/artifacts/_artifact.html.haml b/app/views/projects/artifacts/_artifact.html.haml
new file mode 100644
index 00000000000..36e149556e0
--- /dev/null
+++ b/app/views/projects/artifacts/_artifact.html.haml
@@ -0,0 +1,61 @@
+.gl-responsive-table-row.px-md-3
+ .table-section.section-25.section-wrap.commit
+ .table-mobile-header{ role: 'rowheader' }= _('Job')
+ .table-mobile-content
+ .branch-commit.cgray
+ - if can?(current_user, :read_build, @project)
+ = link_to project_job_path(@project, artifact.job) do
+ %span.build-link ##{artifact.job_id}
+ - else
+ %span.build-link ##{artifact.job_id}
+
+ - if artifact.job.ref
+ .icon-container{ "aria-label" => artifact.job.tag? ? _('Tag') : _('Branch') }
+ = artifact.job.tag? ? sprite_icon('tag', css_class: 'sprite') : sprite_icon('branch', css_class: 'sprite')
+ = link_to artifact.job.ref, project_ref_path(@project, artifact.job.ref), class: 'ref-name'
+ - else
+ .light= _('none')
+ .icon-container.commit-icon{ "aria-label" => _('Commit') }
+ = sprite_icon('commit')
+
+ - if artifact.job.sha
+ = link_to artifact.job.short_sha, project_commit_path(@project, artifact.job.sha), class: 'commit-sha mr-0'
+
+ .table-section.section-15.section-wrap
+ .table-mobile-header{ role: 'rowheader' }= _('Name')
+ .table-mobile-content
+ = artifact.job.name
+
+ .table-section.section-20
+ .table-mobile-header{ role: 'rowheader' }= _('Creation date')
+ .table-mobile-content
+ %p.finished-at
+ = icon("calendar")
+ %span= time_ago_with_tooltip(artifact.created_at)
+
+ .table-section.section-20
+ .table-mobile-header{ role: 'rowheader' }= _('Expiration date')
+ .table-mobile-content
+ - if artifact.expire_at
+ %p.finished-at
+ = icon("calendar")
+ %span= time_ago_with_tooltip(artifact.expire_at)
+
+ .table-section.section-10
+ .table-mobile-header{ role: 'rowheader' }= _('Size')
+ .table-mobile-content
+ = number_to_human_size(artifact.size, precision: 2)
+
+ .table-section.table-button-footer.section-10
+ .table-action-buttons
+ .btn-group
+ - if can?(current_user, :read_build, @project)
+ = link_to download_project_job_artifacts_path(@project, artifact.job), rel: 'nofollow', download: '', title: _('Download artifacts'), data: { placement: 'top', container: 'body' }, ref: 'tooltip', aria: { label: _('Download artifacts') }, class: 'btn btn-build has-tooltip ml-0' do
+ = sprite_icon('download')
+
+ = link_to browse_project_job_artifacts_path(@project, artifact.job), rel: 'nofollow', title: _('Browse artifacts'), data: { placement: 'top', container: 'body' }, ref: 'tooltip', aria: { label: _('Browse artifacts') }, class: 'btn btn-build has-tooltip' do
+ = sprite_icon('folder-open')
+
+ - if can?(current_user, :destroy_artifacts, @project)
+ = link_to project_artifact_path(@project, artifact), data: { placement: 'top', container: 'body', confirm: _('Are you sure you want to delete these artifacts?') }, method: :delete, title: _('Delete artifacts'), ref: 'tooltip', aria: { label: _('Delete artifacts') }, class: 'btn btn-remove has-tooltip' do
+ = sprite_icon('remove')
diff --git a/app/views/projects/artifacts/_table.html.haml b/app/views/projects/artifacts/_table.html.haml
new file mode 100644
index 00000000000..1963449d704
--- /dev/null
+++ b/app/views/projects/artifacts/_table.html.haml
@@ -0,0 +1,16 @@
+- if artifacts.blank?
+ .nothing-here-block= _('No jobs to show')
+- else
+ .table-holder
+ .ci-table
+ .gl-responsive-table-row.table-row-header.px-md-3{ role: 'row' }
+ .table-section.section-25{ role: 'rowheader' }= _('Job')
+ .table-section.section-15{ role: 'rowheader' }= _('Name')
+ .table-section.section-20{ role: 'rowheader' }= _('Creation date')
+ .table-section.section-20{ role: 'rowheader' }= _('Expiration date')
+ .table-section.section-10{ role: 'rowheader' }= _('Size')
+ .table-section.section-10{ role: 'rowheader' }
+
+ = render partial: 'artifact', collection: artifacts, as: :artifact
+
+ = paginate artifacts, theme: "gitlab", total_pages: @total_pages
diff --git a/app/views/projects/artifacts/index.html.haml b/app/views/projects/artifacts/index.html.haml
new file mode 100644
index 00000000000..1ab3e8e67d8
--- /dev/null
+++ b/app/views/projects/artifacts/index.html.haml
@@ -0,0 +1,10 @@
+- @no_container = true
+- page_title _('Artifacts')
+
+%div{ class: container_class }
+ .top-area.py-3
+ .align-self-center
+ = _('Total artifacts size: %{total_size}') % { total_size: number_to_human_size(@total_size, precicion: 2) }
+
+ .content-list.builds-content-list
+ = render "table", artifacts: @artifacts, project: @project
diff --git a/app/views/projects/blob/_editor.html.haml b/app/views/projects/blob/_editor.html.haml
index 283b845e40d..961b873b571 100644
--- a/app/views/projects/blob/_editor.html.haml
+++ b/app/views/projects/blob/_editor.html.haml
@@ -3,20 +3,22 @@
- is_markdown = Gitlab::MarkupHelper.gitlab_markdown?(file_name)
.file-holder-bottom-radius.file-holder.file.append-bottom-default
- .js-file-title.file-title.clearfix{ data: { current_action: action } }
+ .js-file-title.file-title.align-items-center.clearfix{ data: { current_action: action } }
.editor-ref.block-truncated
= sprite_icon('fork', size: 12)
= ref
- if current_action?(:edit) || current_action?(:update)
%span.pull-left.append-right-10
- = text_field_tag 'file_path', (params[:file_path] || @path),
- class: 'form-control new-file-path js-file-path-name-input'
+ = text_field_tag 'file_path', (params[:file_path] || @path),
+ class: 'form-control new-file-path js-file-path-name-input'
+ = render 'template_selectors'
- if current_action?(:new) || current_action?(:create)
%span.pull-left.append-right-10
\/
= text_field_tag 'file_name', params[:file_name], placeholder: "File name",
required: true, class: 'form-control new-file-name js-file-path-name-input'
+ = render 'template_selectors'
.file-buttons
- if is_markdown
diff --git a/app/views/projects/blob/_template_selectors.html.haml b/app/views/projects/blob/_template_selectors.html.haml
index bd46f5a4349..5ecfa135446 100644
--- a/app/views/projects/blob/_template_selectors.html.haml
+++ b/app/views/projects/blob/_template_selectors.html.haml
@@ -1,17 +1,12 @@
-.template-selectors-menu
- .templates-selectors-label
- Template
+.template-selectors-menu.gl-pl-2
.template-selector-dropdowns-wrap
.template-type-selector.js-template-type-selector-wrap.hidden
- = dropdown_tag("Choose type", options: { toggle_class: 'js-template-type-selector qa-template-type-dropdown', title: "Choose a template type" } )
+ = dropdown_tag(_("Select a template type"), options: { toggle_class: 'js-template-type-selector qa-template-type-dropdown', dropdown_class: 'dropdown-menu-selectable'} )
.license-selector.js-license-selector-wrap.js-template-selector-wrap.hidden
- = dropdown_tag("Apply a license template", options: { toggle_class: 'js-license-selector qa-license-dropdown', title: "Apply a license", filter: true, placeholder: "Filter", data: { data: licenses_for_select(@project), project: @project.name, fullname: @project.namespace.human_name } } )
+ = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-license-selector qa-license-dropdown', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: licenses_for_select(@project), project: @project.name, fullname: @project.namespace.human_name } } )
.gitignore-selector.js-gitignore-selector-wrap.js-template-selector-wrap.hidden
- = dropdown_tag("Apply a .gitignore template", options: { toggle_class: 'js-gitignore-selector qa-gitignore-dropdown', title: "Apply a template", filter: true, placeholder: "Filter", data: { data: gitignore_names(@project) } } )
+ = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-gitignore-selector qa-gitignore-dropdown', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: gitignore_names(@project) } } )
.gitlab-ci-yml-selector.js-gitlab-ci-yml-selector-wrap.js-template-selector-wrap.hidden
- = dropdown_tag("Apply a GitLab CI Yaml template", options: { toggle_class: 'js-gitlab-ci-yml-selector qa-gitlab-ci-yml-dropdown', title: "Apply a template", filter: true, placeholder: "Filter", data: { data: gitlab_ci_ymls(@project) } } )
+ = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-gitlab-ci-yml-selector qa-gitlab-ci-yml-dropdown', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: gitlab_ci_ymls(@project) } } )
.dockerfile-selector.js-dockerfile-selector-wrap.js-template-selector-wrap.hidden
- = dropdown_tag("Apply a Dockerfile template", options: { toggle_class: 'js-dockerfile-selector qa-dockerfile-dropdown', title: "Apply a template", filter: true, placeholder: "Filter", data: { data: dockerfile_names(@project) } } )
- .template-selectors-undo-menu.hidden
- %span.text-info Template applied
- %button.btn.btn-sm.btn-info Undo
+ = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-dockerfile-selector qa-dockerfile-dropdown', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: dockerfile_names(@project) } } )
diff --git a/app/views/projects/blob/edit.html.haml b/app/views/projects/blob/edit.html.haml
index 51e42091ab8..870e37488cf 100644
--- a/app/views/projects/blob/edit.html.haml
+++ b/app/views/projects/blob/edit.html.haml
@@ -11,7 +11,6 @@
.editor-title-row
%h3.page-title.blob-edit-page-title
Edit file
- = render 'template_selectors'
.file-editor
%ul.nav-links.no-bottom.js-edit-mode.nav.nav-tabs
%li.active
diff --git a/app/views/projects/blob/new.html.haml b/app/views/projects/blob/new.html.haml
index 4be87b9e074..c5e3923f1e8 100644
--- a/app/views/projects/blob/new.html.haml
+++ b/app/views/projects/blob/new.html.haml
@@ -5,7 +5,6 @@
.editor-title-row
%h3.page-title.blob-new-page-title
New file
- = render 'template_selectors'
.file-editor
= form_tag(project_create_blob_path(@project, @id), method: :post, class: 'js-edit-blob-form js-new-blob-form js-quick-submit js-requires-input', data: blob_editor_paths(@project)) do
= render 'projects/blob/editor', ref: @ref
diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml
index 688b8f001c3..7c73bbc7479 100644
--- a/app/views/projects/blob/show.html.haml
+++ b/app/views/projects/blob/show.html.haml
@@ -1,6 +1,6 @@
- breadcrumb_title "Repository"
- page_title @blob.path, @ref
-- signatures_path = namespace_project_signatures_path(namespace_id: @project.namespace.full_path, project_id: @project.path, id: @last_commit)
+- signatures_path = namespace_project_signatures_path(namespace_id: @project.namespace.full_path, project_id: @project.path, id: @last_commit, limit: 1)
.js-signature-container{ data: { 'signatures-path': signatures_path } }
diff --git a/app/views/projects/blob/viewers/_audio.html.haml b/app/views/projects/blob/viewers/_audio.html.haml
new file mode 100644
index 00000000000..dbdf243c36b
--- /dev/null
+++ b/app/views/projects/blob/viewers/_audio.html.haml
@@ -0,0 +1,2 @@
+.file-content.audio
+ %audio{ src: blob_raw_path, controls: true, data: { setup: '{}' } }
diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml
index dbff2115f50..3e53cb510b0 100644
--- a/app/views/projects/branches/_branch.html.haml
+++ b/app/views/projects/branches/_branch.html.haml
@@ -34,8 +34,9 @@
= _('Merge request')
- if branch.name != @repository.root_ref
- = link_to project_compare_path(@project, @repository.root_ref, branch.name),
+ = link_to project_compare_index_path(@project, from: @repository.root_ref, to: branch.name),
class: "btn btn-default js-onboarding-compare-branches #{'prepend-left-10' unless merge_project}",
+ method: :post,
title: s_('Branches|Compare') do
= s_('Branches|Compare')
diff --git a/app/views/projects/buttons/_clone.html.haml b/app/views/projects/buttons/_clone.html.haml
index 09f05b30433..abef33ca01c 100644
--- a/app/views/projects/buttons/_clone.html.haml
+++ b/app/views/projects/buttons/_clone.html.haml
@@ -13,7 +13,7 @@
.input-group
= text_field_tag :ssh_project_clone, project.ssh_url_to_repo, class: "js-select-on-focus form-control qa-ssh-clone-url", readonly: true, aria: { label: 'Project clone URL' }
.input-group-append
- = clipboard_button(target: '#ssh_project_clone', title: _("Copy URL to clipboard"), class: "input-group-text btn-default btn-clipboard")
+ = clipboard_button(target: '#ssh_project_clone', title: _("Copy URL"), class: "input-group-text btn-default btn-clipboard")
= render_if_exists 'projects/buttons/geo'
- if http_enabled?
%li.pt-2
@@ -22,7 +22,7 @@
.input-group
= text_field_tag :http_project_clone, project.http_url_to_repo, class: "js-select-on-focus form-control qa-http-clone-url", readonly: true, aria: { label: 'Project clone URL' }
.input-group-append
- = clipboard_button(target: '#http_project_clone', title: _("Copy URL to clipboard"), class: "input-group-text btn-default btn-clipboard")
+ = clipboard_button(target: '#http_project_clone', title: _("Copy URL"), class: "input-group-text btn-default btn-clipboard")
= render_if_exists 'projects/buttons/geo'
= render_if_exists 'projects/buttons/kerberos_clone_field'
diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml
index 6c77036a85b..d07407a6d13 100644
--- a/app/views/projects/commit/_commit_box.html.haml
+++ b/app/views/projects/commit/_commit_box.html.haml
@@ -6,7 +6,7 @@
%strong
#{ s_('CommitBoxTitle|Commit') }
%span.commit-sha{ data: { qa_selector: 'commit_sha_content' } }= @commit.short_id
- = clipboard_button(text: @commit.id, title: _('Copy commit SHA to clipboard'))
+ = clipboard_button(text: @commit.id, title: _('Copy commit SHA'))
%span.d-none.d-sm-inline= _('authored')
#{time_ago_with_tooltip(@commit.authored_date)}
%span= s_('ByAuthor|by')
diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml
index 2c78e74be2f..3a9c7a8bec5 100644
--- a/app/views/projects/commits/_commit.html.haml
+++ b/app/views/projects/commits/_commit.html.haml
@@ -6,7 +6,8 @@
- merge_request = local_assigns.fetch(:merge_request, nil)
- project = local_assigns.fetch(:project) { merge_request&.project }
- ref = local_assigns.fetch(:ref) { merge_request&.source_branch }
-- commit_status = commit.present(current_user: current_user).status_for(ref)
+- commit = commit.present(current_user: current_user)
+- commit_status = commit.status_for(ref)
- link = commit_path(project, commit, merge_request: merge_request)
@@ -48,12 +49,12 @@
= render partial: 'projects/commit/ajax_signature', locals: { commit: commit }
- if commit_status
- = render_commit_status(commit, ref: ref)
+ = render_commit_status(commit, commit_status, ref: ref)
.js-commit-pipeline-status{ data: { endpoint: pipelines_project_commit_path(project, commit.id, ref: ref) } }
.commit-sha-group.d-none.d-sm-flex
.label.label-monospace.monospace
= commit.short_id
- = clipboard_button(text: commit.id, title: _("Copy commit SHA to clipboard"), class: "btn btn-default", container: "body")
+ = clipboard_button(text: commit.id, title: _("Copy commit SHA"), class: "btn btn-default", container: "body")
= link_to_browse_code(project, commit)
diff --git a/app/views/projects/cycle_analytics/_overview.html.haml b/app/views/projects/cycle_analytics/_overview.html.haml
index 5b0d73b8c68..ea94b637f89 100644
--- a/app/views/projects/cycle_analytics/_overview.html.haml
+++ b/app/views/projects/cycle_analytics/_overview.html.haml
@@ -9,7 +9,7 @@
Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.
To set up CA, you must first define a production environment by setting up your CI and then deploy to production.
%p
- %a.btn{ href: help_page_path('user/project/cycle_analytics'), target: '_blank' } Read more
+ %a.btn{ href: help_page_path('user/analytics/cycle_analytics.md'), target: '_blank' } Read more
.col-md-6.overview-image
%span.overview-icon
= custom_icon ('icon_cycle_analytics_overview')
diff --git a/app/views/projects/cycle_analytics/show.html.haml b/app/views/projects/cycle_analytics/show.html.haml
index 6b56a4ee7ab..7fedd1ab785 100644
--- a/app/views/projects/cycle_analytics/show.html.haml
+++ b/app/views/projects/cycle_analytics/show.html.haml
@@ -3,7 +3,7 @@
#cycle-analytics{ "v-cloak" => "true", data: { request_path: project_cycle_analytics_path(@project) } }
- if @cycle_analytics_no_data
%banner{ "v-if" => "!isOverviewDialogDismissed",
- "documentation-link": help_page_path('user/project/cycle_analytics'),
+ "documentation-link": help_page_path('user/analytics/cycle_analytics.md'),
"v-on:dismiss-overview-dialog" => "dismissOverviewDialog()" }
= icon("spinner spin", "v-show" => "isLoading")
.wrapper{ "v-show" => "!isLoading && !hasError" }
diff --git a/app/views/projects/deploy_tokens/_new_deploy_token.html.haml b/app/views/projects/deploy_tokens/_new_deploy_token.html.haml
index c805ee73acc..f295fa82192 100644
--- a/app/views/projects/deploy_tokens/_new_deploy_token.html.haml
+++ b/app/views/projects/deploy_tokens/_new_deploy_token.html.haml
@@ -7,12 +7,12 @@
.input-group
= text_field_tag 'deploy-token-user', deploy_token.username, readonly: true, class: 'deploy-token-field form-control js-select-on-focus qa-deploy-token-user'
.input-group-append
- = clipboard_button(text: deploy_token.username, title: s_('DeployTokens|Copy username to clipboard'), placement: 'left')
+ = clipboard_button(text: deploy_token.username, title: s_('DeployTokens|Copy username'), placement: 'left')
%span.deploy-token-help-block.prepend-top-5.text-success= s_("DeployTokens|Use this username as a login.")
.form-group
.input-group
= text_field_tag 'deploy-token', deploy_token.token, readonly: true, class: 'deploy-token-field form-control js-select-on-focus qa-deploy-token'
.input-group-append
- = clipboard_button(text: deploy_token.token, title: s_('DeployTokens|Copy deploy token to clipboard'), placement: 'left')
+ = clipboard_button(text: deploy_token.token, title: s_('DeployTokens|Copy deploy token'), placement: 'left')
%span.deploy-token-help-block.prepend-top-5.text-danger= s_("DeployTokens|Use this token as a password. Make sure you save it - you won't be able to access it again.")
diff --git a/app/views/projects/deployments/_deployment.html.haml b/app/views/projects/deployments/_deployment.html.haml
index ef2ab4c698e..8270477ed3f 100644
--- a/app/views/projects/deployments/_deployment.html.haml
+++ b/app/views/projects/deployments/_deployment.html.haml
@@ -1,31 +1,49 @@
.gl-responsive-table-row.deployment{ role: 'row' }
+ .table-section.section-15{ role: 'gridcell' }
+ .table-mobile-header{ role: 'rowheader' }= _("Status")
+ .table-mobile-content
+ = render_deployment_status(deployment)
+
.table-section.section-10{ role: 'gridcell' }
.table-mobile-header{ role: 'rowheader' }= _("ID")
%strong.table-mobile-content ##{deployment.iid}
- .table-section.section-30{ role: 'gridcell' }
+ .table-section.section-10{ role: 'gridcell' }
+ .table-mobile-header{ role: 'rowheader' }= _("Triggerer")
+ .table-mobile-content
+ - if deployment.deployed_by
+ = user_avatar(user: deployment.deployed_by, size: 26, css_class: "mr-0 float-none")
+
+ .table-section.section-25{ role: 'gridcell' }
.table-mobile-header{ role: 'rowheader' }= _("Commit")
= render 'projects/deployments/commit', deployment: deployment
- .table-section.section-25.build-column{ role: 'gridcell' }
+ .table-section.section-10.build-column{ role: 'gridcell' }
.table-mobile-header{ role: 'rowheader' }= _("Job")
- if deployment.deployable
.table-mobile-content
.flex-truncate-parent
.flex-truncate-child
- = link_to [@project.namespace.becomes(Namespace), @project, deployment.deployable], class: 'build-link' do
+ = link_to deployment_path(deployment), class: 'build-link' do
#{deployment.deployable.name} (##{deployment.deployable.id})
- - if deployment.deployed_by
- %div
- by
- = user_avatar(user: deployment.deployed_by, size: 20, css_class: "mr-0 float-none")
+ - else
+ .badge.badge-info.suggestion-help-hover{ title: s_('Deployment|This deployment was created using the API') }
+ = s_('Deployment|API')
- .table-section.section-15{ role: 'gridcell' }
+ .table-section.section-10{ role: 'gridcell' }
.table-mobile-header{ role: 'rowheader' }= _("Created")
+ %span.table-mobile-content.flex-truncate-parent
+ %span.flex-truncate-child
+ = time_ago_with_tooltip(deployment.created_at)
+
+ .table-section.section-10{ role: 'gridcell' }
+ .table-mobile-header{ role: 'rowheader' }= _("Deployed")
- if deployment.deployed_at
- %span.table-mobile-content= time_ago_with_tooltip(deployment.deployed_at)
+ %span.table-mobile-content.flex-truncate-parent
+ %span.flex-truncate-child
+ = time_ago_with_tooltip(deployment.deployed_at)
- .table-section.section-20.table-button-footer{ role: 'gridcell' }
+ .table-section.section-10.table-button-footer{ role: 'gridcell' }
.btn-group.table-action-buttons
= render 'projects/deployments/actions', deployment: deployment
= render 'projects/deployments/rollback', deployment: deployment
diff --git a/app/views/projects/deployments/_rollback.haml b/app/views/projects/deployments/_rollback.haml
index d6bf8d564de..dffa5e4ba40 100644
--- a/app/views/projects/deployments/_rollback.haml
+++ b/app/views/projects/deployments/_rollback.haml
@@ -1,4 +1,4 @@
-- if can?(current_user, :create_deployment, deployment)
+- if deployment.deployable && can?(current_user, :create_deployment, deployment)
- tooltip = deployment.last? ? s_('Environments|Re-deploy to environment') : s_('Environments|Rollback environment')
= button_tag class: 'btn btn-default btn-build has-tooltip', type: 'button', data: { toggle: 'modal', target: "#confirm-rollback-modal-#{deployment.id}" }, title: tooltip do
- if deployment.last?
diff --git a/app/views/projects/diffs/_diffs.html.haml b/app/views/projects/diffs/_diffs.html.haml
index 2dba3fcd664..cf7fe36af9d 100644
--- a/app/views/projects/diffs/_diffs.html.haml
+++ b/app/views/projects/diffs/_diffs.html.haml
@@ -21,7 +21,7 @@
= parallel_diff_btn
= render 'projects/diffs/stats', diff_files: diff_files
-- if render_overflow_warning?(diff_files)
+- if render_overflow_warning?(diffs)
= render 'projects/diffs/warning', diff_files: diffs
.files{ data: { can_create_note: can_create_note } }
diff --git a/app/views/projects/diffs/_stats.html.haml b/app/views/projects/diffs/_stats.html.haml
index c9057f385da..86e6e732610 100644
--- a/app/views/projects/diffs/_stats.html.haml
+++ b/app/views/projects/diffs/_stats.html.haml
@@ -24,9 +24,9 @@
%a.diff-changed-file{ href: "##{hexdigest(diff_file.file_path)}", title: diff_file.new_path }
= sprite_icon(diff_file_changed_icon(diff_file), size: 16, css_class: "#{diff_file_changed_icon_color(diff_file)} diff-file-changed-icon append-right-8")
%span.diff-changed-file-content.append-right-8
- - if diff_file.blob&.name
+ - if diff_file.file_path
%strong.diff-changed-file-name
- = diff_file.blob.name
+ = diff_file.file_path
- else
%strong.diff-changed-blank-file-name
= s_('Diffs|No file name available')
diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml
index 75da151f329..c4c39c227c6 100644
--- a/app/views/projects/environments/show.html.haml
+++ b/app/views/projects/environments/show.html.haml
@@ -60,10 +60,13 @@
.table-holder
.ci-table.environments{ role: 'grid' }
.gl-responsive-table-row.table-row-header{ role: 'row' }
+ .table-section.section-15{ role: 'columnheader' }= _('Status')
.table-section.section-10{ role: 'columnheader' }= _('ID')
- .table-section.section-30{ role: 'columnheader' }= _('Commit')
- .table-section.section-25{ role: 'columnheader' }= _('Job')
- .table-section.section-15{ role: 'columnheader' }= _('Created')
+ .table-section.section-10{ role: 'columnheader' }= _('Triggerer')
+ .table-section.section-25{ role: 'columnheader' }= _('Commit')
+ .table-section.section-10{ role: 'columnheader' }= _('Job')
+ .table-section.section-10{ role: 'columnheader' }= _('Created')
+ .table-section.section-10{ role: 'columnheader' }= _('Deployed')
= render @deployments
diff --git a/app/views/projects/find_file/show.html.haml b/app/views/projects/find_file/show.html.haml
index 82f035f24da..caaf164a763 100644
--- a/app/views/projects/find_file/show.html.haml
+++ b/app/views/projects/find_file/show.html.haml
@@ -15,4 +15,12 @@
.table-holder
%table.table.files-slider{ class: "table_#{@hex_path} tree-table" }
%tbody
+ .col-12.empty-state.hidden
+ .svg-250.svg-content
+ = image_tag('illustrations/profile-page/personal-projects.svg', alt: 'No files svg', lazy: true)
+ .text-center
+ %h4
+ = _('There are no matching files')
+ %p.text-secondary
+ = _('Try using a different search term to find the file you are looking for.')
= spinner nil, true
diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml
index de0c21e7cf6..367b8c1138e 100644
--- a/app/views/projects/issues/_issue.html.haml
+++ b/app/views/projects/issues/_issue.html.haml
@@ -43,7 +43,10 @@
.issuable-meta
%ul.controls
- - if issue.closed?
+ - if issue.moved?
+ %li.issuable-status
+ = _('CLOSED (MOVED)')
+ - elsif issue.closed?
%li.issuable-status
= _('CLOSED')
- if issue.assignees.any?
diff --git a/app/views/projects/issues/import_csv/_button.html.haml b/app/views/projects/issues/import_csv/_button.html.haml
index acc2c50294f..fe89d2fb748 100644
--- a/app/views/projects/issues/import_csv/_button.html.haml
+++ b/app/views/projects/issues/import_csv/_button.html.haml
@@ -3,7 +3,7 @@
%button.csv-import-button.btn{ title: _('Import CSV'), class: ('has-tooltip' if type == :icon),
data: { toggle: 'modal', target: '.issues-import-modal' } }
- if type == :icon
- = sprite_icon('upload')
+ = sprite_icon('import')
- else
= _('Import CSV')
diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml
index 49e482ff1df..2633a3899f7 100644
--- a/app/views/projects/issues/index.html.haml
+++ b/app/views/projects/issues/index.html.haml
@@ -20,4 +20,5 @@
- if new_issue_email
= render 'projects/issuable_by_email', email: new_issue_email, issuable_type: 'issue'
- else
- = render 'shared/empty_states/issues', button_path: new_project_issue_path(@project), show_import_button: true
+ - new_project_issue_button_path = @project.archived? ? false : new_project_issue_path(@project)
+ = render 'shared/empty_states/issues', new_project_issue_button_path: new_project_issue_button_path, show_import_button: true
diff --git a/app/views/projects/merge_requests/_how_to_merge.html.haml b/app/views/projects/merge_requests/_how_to_merge.html.haml
index 928b54ea28f..57205682bda 100644
--- a/app/views/projects/merge_requests/_how_to_merge.html.haml
+++ b/app/views/projects/merge_requests/_how_to_merge.html.haml
@@ -9,7 +9,7 @@
%p
%strong Step 1.
Fetch and check out the branch for this merge request
- = clipboard_button(target: "pre#merge-info-1", title: "Copy commands to clipboard")
+ = clipboard_button(target: "pre#merge-info-1", title: _("Copy commands"))
%pre.dark#merge-info-1
- if @merge_request.for_fork?
:preserve
@@ -27,7 +27,7 @@
%p
%strong Step 3.
Merge the branch and fix any conflicts that come up
- = clipboard_button(target: "pre#merge-info-3", title: "Copy commands to clipboard")
+ = clipboard_button(target: "pre#merge-info-3", title: _("Copy commands"))
%pre.dark#merge-info-3
- if @merge_request.for_fork?
:preserve
@@ -42,7 +42,7 @@
%p
%strong Step 4.
Push the result of the merge to GitLab
- = clipboard_button(target: "pre#merge-info-4", title: "Copy commands to clipboard")
+ = clipboard_button(target: "pre#merge-info-4", title: _("Copy commands"))
%pre.dark#merge-info-4
:preserve
git push origin "#{h @merge_request.target_branch}"
diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml
index da90c41e2f5..dee6bc8bae4 100644
--- a/app/views/projects/merge_requests/show.html.haml
+++ b/app/views/projects/merge_requests/show.html.haml
@@ -24,6 +24,7 @@
window.gl.mrWidgetData.squash_before_merge_help_path = '#{help_page_path("user/project/merge_requests/squash_and_merge")}';
window.gl.mrWidgetData.troubleshooting_docs_path = '#{help_page_path('user/project/merge_requests/index.md', anchor: 'troubleshooting')}';
+ window.gl.mrWidgetData.security_approvals_help_page_path = '#{help_page_path('user/application_security/index.html', anchor: 'security-approvals-in-merge-requests-ultimate')}';
#js-vue-mr-widget.mr-widget
diff --git a/app/views/projects/mirrors/_mirror_repos.html.haml b/app/views/projects/mirrors/_mirror_repos.html.haml
index 104c68919f0..80d2d2afada 100644
--- a/app/views/projects/mirrors/_mirror_repos.html.haml
+++ b/app/views/projects/mirrors/_mirror_repos.html.haml
@@ -1,7 +1,7 @@
- expanded = expanded_by_default?
- protocols = Gitlab::UrlSanitizer::ALLOWED_SCHEMES.join('|')
-%section.settings.project-mirror-settings.js-mirror-settings.no-animate.qa-mirroring-repositories-settings#js-push-remote-settings{ class: ('expanded' if expanded) }
+%section.settings.project-mirror-settings.js-mirror-settings.no-animate#js-push-remote-settings{ class: ('expanded' if expanded), data: { qa_selector: 'mirroring_repositories_settings_section' } }
.settings-header
%h4= _('Mirroring repositories')
%button.btn.js-settings-toggle
@@ -59,10 +59,10 @@
- if mirror.disabled?
= render 'projects/mirrors/disabled_mirror_badge'
- if mirror.last_error.present?
- .badge.mirror-error-badge{ data: { toggle: 'tooltip', html: 'true' }, title: html_escape(mirror.last_error.try(:strip)) }= _('Error')
+ .badge.mirror-error-badge{ data: { toggle: 'tooltip', html: 'true', qa_selector: 'mirror_error_badge' }, title: html_escape(mirror.last_error.try(:strip)) }= _('Error')
%td
.btn-group.mirror-actions-group.pull-right{ role: 'group' }
- if mirror.ssh_key_auth?
- = clipboard_button(text: mirror.ssh_public_key, class: 'btn btn-default', title: _('Copy SSH public key'))
+ = clipboard_button(text: mirror.ssh_public_key, class: 'btn btn-default', title: _('Copy SSH public key'), qa_selector: 'copy_public_key_button')
= render 'shared/remote_mirror_update_button', remote_mirror: mirror
%button.js-delete-mirror.qa-delete-mirror.rspec-delete-mirror.btn.btn-danger{ type: 'button', data: { mirror_id: mirror.id, toggle: 'tooltip', container: 'body' }, title: _('Remove') }= icon('trash-o')
diff --git a/app/views/projects/mirrors/_ssh_host_keys.html.haml b/app/views/projects/mirrors/_ssh_host_keys.html.haml
index 7762fb4b844..3279d3eb251 100644
--- a/app/views/projects/mirrors/_ssh_host_keys.html.haml
+++ b/app/views/projects/mirrors/_ssh_host_keys.html.haml
@@ -3,13 +3,13 @@
- verified_at = mirror.ssh_known_hosts_verified_at
.form-group.js-ssh-host-keys-section{ class: ('collapse' unless mirror.ssh_mirror_url?) }
- %button.btn.btn-inverted.btn-secondary.inline.js-detect-host-keys.append-right-10{ type: 'button' }
+ %button.btn.btn-inverted.btn-secondary.inline.js-detect-host-keys.append-right-10{ type: 'button', data: { qa_selector: 'detect_host_keys' } }
= icon('spinner spin', class: 'js-spinner d-none')
= _('Detect host keys')
.fingerprint-ssh-info.js-fingerprint-ssh-info.prepend-top-10.append-bottom-10{ class: ('collapse' unless mirror.ssh_mirror_url?) }
%label.label-bold
= _('Fingerprints')
- .fingerprints-list.js-fingerprints-list
+ .fingerprints-list.js-fingerprints-list{ data: { qa_selector: 'fingerprints_list' } }
- mirror.ssh_known_hosts_fingerprints.each do |fp|
%code= fp.fingerprint
- if verified_at
diff --git a/app/views/projects/notes/_more_actions_dropdown.html.haml b/app/views/projects/notes/_more_actions_dropdown.html.haml
index 8a6e5fde99b..2f0394538bb 100644
--- a/app/views/projects/notes/_more_actions_dropdown.html.haml
+++ b/app/views/projects/notes/_more_actions_dropdown.html.haml
@@ -7,7 +7,7 @@
= custom_icon('ellipsis_v')
%ul.dropdown-menu.more-actions-dropdown.dropdown-open-left
%li
- = clipboard_button(text: noteable_note_url(note), title: 'Copy reference to clipboard', button_text: 'Copy link', class: 'btn-clipboard', hide_tooltip: true, hide_button_icon: true)
+ = clipboard_button(text: noteable_note_url(note), title: _('Copy reference'), button_text: _('Copy link'), class: 'btn-clipboard', hide_tooltip: true, hide_button_icon: true)
- unless is_current_user
%li
= link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do
diff --git a/app/views/projects/pages/_access.html.haml b/app/views/projects/pages/_access.html.haml
index 7b6d46964a2..178f0acc5b9 100644
--- a/app/views/projects/pages/_access.html.haml
+++ b/app/views/projects/pages/_access.html.haml
@@ -1,11 +1,11 @@
- if @project.pages_deployed?
.card
.card-header
- Access pages
+ = s_('GitLabPages|Access pages')
.card-body
%p
%strong
- = _("Your pages are served under:")
+ = s_('GitLabPages|Your pages are served under:')
%p
= external_link(@project.pages_url, @project.pages_url)
@@ -14,4 +14,4 @@
%p
= external_link(domain.url, domain.url)
.card-footer.alert-primary
- = _("It may take up to 30 minutes before the site is available after the first deployment.")
+ = s_('GitLabPages|It may take up to 30 minutes before the site is available after the first deployment.')
diff --git a/app/views/projects/pages/_destroy.haml b/app/views/projects/pages/_destroy.haml
index 138e2864bad..58dbbb5bcfc 100644
--- a/app/views/projects/pages/_destroy.haml
+++ b/app/views/projects/pages/_destroy.haml
@@ -1,12 +1,14 @@
- if @project.pages_deployed?
- if can?(current_user, :remove_pages, @project)
.card.border-danger
- .card-header.bg-danger.text-white Remove pages
+ .card-header.bg-danger.text-white
+ = s_('GitLabPages|Remove pages')
.errors-holder
.card-body
%p
- Removing pages will prevent them from being exposed to the outside world.
+ = s_('GitLabPages|Removing pages will prevent them from being exposed to the outside world.')
.form-actions
- = link_to 'Remove pages', project_pages_path(@project), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-remove"
+ = link_to s_('GitLabPages|Remove pages'), project_pages_path(@project), data: { confirm: s_('GitLabPages|Are you sure?')}, method: :delete, class: "btn btn-remove"
- else
- .nothing-here-block Only project maintainers can remove pages
+ .nothing-here-block
+ = s_('GitLabPages|Only project maintainers can remove pages')
diff --git a/app/views/projects/pages/_https_only.html.haml b/app/views/projects/pages/_https_only.html.haml
index 74478ee011c..d8c4a5f0a5d 100644
--- a/app/views/projects/pages/_https_only.html.haml
+++ b/app/views/projects/pages/_https_only.html.haml
@@ -3,8 +3,9 @@
.form-check
= f.check_box :pages_https_only, class: 'form-check-input', disabled: pages_https_only_disabled?
= f.label :pages_https_only, class: pages_https_only_label_class do
- %strong Force HTTPS (requires valid certificates)
+ %strong
+ = s_('GitLabPages|Force HTTPS (requires valid certificates)')
- unless pages_https_only_disabled?
.prepend-top-10
- = f.submit 'Save', class: 'btn btn-success'
+ = f.submit s_('GitLabPages|Save'), class: 'btn btn-success'
diff --git a/app/views/projects/pages/_list.html.haml b/app/views/projects/pages/_list.html.haml
index c4285e7f3d2..b05491f2c6e 100644
--- a/app/views/projects/pages/_list.html.haml
+++ b/app/views/projects/pages/_list.html.haml
@@ -8,20 +8,25 @@
- @domains.each do |domain|
%li.pages-domain-list-item.list-group-item.d-flex.justify-content-between
- if verification_enabled
- - tooltip, status = domain.unverified? ? [_('Unverified'), 'failed'] : [_('Verified'), 'success']
+ - tooltip, status = domain.unverified? ? [s_('GitLabPages|Unverified'), 'failed'] : [s_('GitLabPages|Verified'), 'success']
.domain-status.ci-status-icon.has-tooltip{ class: "ci-status-icon-#{status}", title: tooltip }
= sprite_icon("status_#{status}", size: 16 )
.domain-name
= external_link(domain.url, domain.url)
- if domain.subject
%div
- %span.badge.badge-gray Certificate: #{domain.subject}
+ %span.badge.badge-gray
+ = s_('GitLabPages|Certificate: %{subject}') % { subject: domain.subject }
- if domain.expired?
- %span.badge.badge-danger Expired
+ %span.badge.badge-danger
+ = s_('GitLabPages|Expired')
%div
- = link_to 'Details', project_pages_domain_path(@project, domain), class: "btn btn-sm btn-grouped"
- = link_to 'Remove', project_pages_domain_path(@project, domain), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-remove btn-sm btn-grouped"
+ = link_to s_('GitLabPages|Details'), project_pages_domain_path(@project, domain), class: "btn btn-sm btn-grouped"
+ = link_to s_('GitLabPages|Remove'), project_pages_domain_path(@project, domain), data: { confirm: s_('GitLabPages|Are you sure?')}, method: :delete, class: "btn btn-remove btn-sm btn-grouped"
- if verification_enabled && domain.unverified?
%li.list-group-item.bs-callout-warning
- #{domain.domain} is not verified. To learn how to verify ownership, visit your
- #{link_to 'domain details', project_pages_domain_path(@project, domain)}.
+ - details_link_start = "<a href='#{project_pages_domain_path(@project, domain)}'>".html_safe
+ - details_link_end = '</a>'.html_safe
+ = s_('GitLabPages|%{domain} is not verified. To learn how to verify ownership, visit your %{link_start}domain details%{link_end}.').html_safe % { domain: domain.domain,
+ link_start: details_link_start,
+ link_end: details_link_end }
diff --git a/app/views/projects/pages/_no_domains.html.haml b/app/views/projects/pages/_no_domains.html.haml
index 8c93cf7a8ad..8d6e403b93a 100644
--- a/app/views/projects/pages/_no_domains.html.haml
+++ b/app/views/projects/pages/_no_domains.html.haml
@@ -1,7 +1,6 @@
- if can?(current_user, :update_pages, @project)
.card
.card-header
- Domains
+ = s_('GitLabPages|Domains')
.nothing-here-block
- Support for domains and certificates is disabled.
- Ask your system's administrator to enable it.
+ = s_("GitLabPages|Support for domains and certificates is disabled. Ask your system's administrator to enable it.")
diff --git a/app/views/projects/pages/_use.html.haml b/app/views/projects/pages/_use.html.haml
index 988dabef3a0..ab44fd77e1e 100644
--- a/app/views/projects/pages/_use.html.haml
+++ b/app/views/projects/pages/_use.html.haml
@@ -1,10 +1,10 @@
- unless @project.pages_deployed?
.card.border-info
.card-header.bg-info.text-white
- Configure pages
+ = s_('GitLabPages|Configure pages')
.card-body
%p
- Learn how to upload your static site and have it served by
- GitLab by following the
- = succeed '.' do
- = link_to 'documentation on GitLab Pages', help_page_path('user/project/pages/index.md'), target: '_blank'
+ - link_start = "<a href='#{help_page_path('user/project/pages/index.md')}' target='_blank' rel='noopener noreferrer'>".html_safe
+ - link_end = '</a>'.html_safe
+ = s_('GitLabPages|Learn how to upload your static site and have it served by GitLab by following the %{link_start}documentation on GitLab Pages%{link_end}.').html_safe % { link_start: link_start,
+ link_end: link_end }
diff --git a/app/views/projects/pages/show.html.haml b/app/views/projects/pages/show.html.haml
index 88ab486a248..0e1f281410a 100644
--- a/app/views/projects/pages/show.html.haml
+++ b/app/views/projects/pages/show.html.haml
@@ -1,17 +1,14 @@
- page_title 'Pages'
%h3.page-title.with-button
- Pages
+ = s_('GitLabPages|Pages')
- if can?(current_user, :update_pages, @project) && (Gitlab.config.pages.external_http || Gitlab.config.pages.external_https)
- = link_to new_project_pages_domain_path(@project), class: 'btn btn-success float-right', title: 'New Domain' do
- New Domain
+ = link_to new_project_pages_domain_path(@project), class: 'btn btn-success float-right', title: s_('GitLabPages|New Domain') do
+ = s_('GitLabPages|New Domain')
%p.light
- With GitLab Pages you can host your static websites on GitLab.
- Combined with the power of GitLab CI and the help of GitLab Runner
- you can deploy static pages for your individual projects, your user or your group.
-
+ = s_('GitLabPages|With GitLab Pages you can host your static websites on GitLab. Combined with the power of GitLab CI and the help of GitLab Runner you can deploy static pages for your individual projects, your user or your group.')
- if Gitlab.config.pages.external_https
= render 'https_only'
diff --git a/app/views/projects/pipelines/_info.html.haml b/app/views/projects/pipelines/_info.html.haml
index 53bb3c7487d..4eec81c9125 100644
--- a/app/views/projects/pipelines/_info.html.haml
+++ b/app/views/projects/pipelines/_info.html.haml
@@ -43,7 +43,7 @@
} }
Auto DevOps
- if @pipeline.detached_merge_request_pipeline?
- %span.js-pipeline-url-mergerequest.badge.badge-info.has-tooltip{ title: _('Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results.') }
+ %span.js-pipeline-url-mergerequest.badge.badge-info.has-tooltip{ title: _('Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more in the documentation for Pipelines for Merged Results.') }
detached
- if @pipeline.stuck?
%span.js-pipeline-url-stuck.badge.badge-warning
@@ -58,4 +58,10 @@
= sprite_icon('ellipsis_h', size: 12)
%span.js-details-content.hide
= link_to @pipeline.sha, project_commit_path(@project, @pipeline.sha), class: "commit-sha commit-hash-full"
- = clipboard_button(text: @pipeline.sha, title: "Copy commit SHA to clipboard")
+ = clipboard_button(text: @pipeline.sha, title: _("Copy commit SHA"))
+
+ .well-segment.related-merge-request-info
+ .icon-container
+ = sprite_icon("git-merge")
+ %span.related-merge-requests
+ = @pipeline.all_related_merge_request_text
diff --git a/app/views/projects/protected_branches/shared/_branches_list.html.haml b/app/views/projects/protected_branches/shared/_branches_list.html.haml
index 1913d06a6f8..9dff251101b 100644
--- a/app/views/projects/protected_branches/shared/_branches_list.html.haml
+++ b/app/views/projects/protected_branches/shared/_branches_list.html.haml
@@ -1,9 +1,9 @@
.protected-branches-list.js-protected-branches-list.qa-protected-branches-list
- if @protected_branches.empty?
.card-header.bg-white
- Protected branch (#{@protected_branches_count})
+ = s_("ProtectedBranch|Protected branch (%{protected_branches_count})") % { protected_branches_count: @protected_branches_count }
%p.settings-message.text-center
- There are currently no protected branches, protect a branch with the form above.
+ = s_("ProtectedBranch|There are currently no protected branches, protect a branch with the form above.")
- else
%table.table.table-bordered
%colgroup
@@ -15,10 +15,15 @@
%col
%thead
%tr
- %th Protected branch (#{@protected_branches_count})
- %th Last commit
- %th Allowed to merge
- %th Allowed to push
+ %th
+ = s_("ProtectedBranch|Branch")
+ %th
+ = s_("ProtectedBranch|Allowed to merge")
+ %th
+ = s_("ProtectedBranch|Allowed to push")
+
+ = render_if_exists 'projects/protected_branches/ee/code_owner_approval_table_head'
+
- if can_admin_project
%th
%tbody
diff --git a/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml b/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml
index bba4949277d..f84c7b39733 100644
--- a/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml
+++ b/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml
@@ -2,7 +2,7 @@
%input{ type: 'hidden', name: 'update_section', value: 'js-protected-branches-settings' }
.card
.card-header
- Protect a branch
+ = s_("ProtectedBranch|Protect a branch")
.card-body
= form_errors(@protected_branch)
.form-group.row
@@ -11,22 +11,19 @@
.col-md-10
= render partial: "projects/protected_branches/shared/dropdown", locals: { f: f }
.form-text.text-muted
- = link_to 'Wildcards', help_page_path('user/project/protected_branches', anchor: 'wildcard-protected-branches')
- such as
- %code *-stable
- or
- %code production/*
- are supported
+ - wildcards_url = help_page_url('user/project/protected_branches', anchor: 'wildcard-protected-branches')
+ - wildcards_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: wildcards_url }
+ = (s_("ProtectedBranch|%{wildcards_link_start}Wildcards%{wildcards_link_end} such as %{code_tag_start}*-stable%{code_tag_end} or %{code_tag_start}production/*%{code_tag_end} are supported") % { wildcards_link_start: wildcards_link_start, wildcards_link_end: '</a>', code_tag_start: '<code>', code_tag_end: '</code>' }).html_safe
.form-group.row
%label.col-md-2.text-right{ for: 'merge_access_levels_attributes' }
- Allowed to merge:
+ = s_("ProtectedBranch|Allowed to merge:")
.col-md-10
= yield :merge_access_levels
.form-group.row
%label.col-md-2.text-right{ for: 'push_access_levels_attributes' }
- Allowed to push:
+ = s_("ProtectedBranch|Allowed to push:")
.col-md-10
= yield :push_access_levels
-
+ = render_if_exists 'projects/protected_branches/ee/code_owner_approval_form'
.card-footer
- = f.submit 'Protect', class: 'btn-success btn', disabled: true, data: { qa_selector: 'protect_button' }
+ = f.submit s_('ProtectedBranch|Protect'), class: 'btn-success btn', disabled: true, data: { qa_selector: 'protect_button' }
diff --git a/app/views/projects/protected_branches/shared/_protected_branch.html.haml b/app/views/projects/protected_branches/shared/_protected_branch.html.haml
index 81dcab1d1ab..4ca6ebe9c78 100644
--- a/app/views/projects/protected_branches/shared/_protected_branch.html.haml
+++ b/app/views/projects/protected_branches/shared/_protected_branch.html.haml
@@ -5,20 +5,19 @@
%span.ref-name= protected_branch.name
- if @project.root_ref?(protected_branch.name)
- %span.badge.badge-info.prepend-left-5 default
- %td
- - if protected_branch.wildcard?
- - matching_branches = protected_branch.matching(repository.branches)
- = link_to pluralize(matching_branches.count, "matching branch"), namespace_project_protected_branch_path(@project.namespace, @project, protected_branch)
- - else
- - if commit = protected_branch.commit
- = link_to(commit.short_id, namespace_project_commit_path(@project.namespace, @project, commit.id), class: 'commit-sha')
- = time_ago_with_tooltip(commit.committed_date)
- - else
- (branch was deleted from repository)
+ %span.badge.badge-info.d-inline default
+
+ %div
+ - if protected_branch.wildcard?
+ - matching_branches = protected_branch.matching(repository.branches)
+ = link_to pluralize(matching_branches.count, "matching branch"), namespace_project_protected_branch_path(@project.namespace, @project, protected_branch)
+ - elsif !protected_branch.commit
+ %span.text-muted Branch was deleted.
= yield
+ = render_if_exists 'projects/protected_branches/ee/code_owner_approval_table', protected_branch: protected_branch
+
- if can_admin_project
%td
= link_to 'Unprotect', [@project.namespace.becomes(Namespace), @project, protected_branch, { update_section: 'js-protected-branches-settings' }], disabled: local_assigns[:disabled], data: { confirm: 'Branch will be writable for developers. Are you sure?' }, method: :delete, class: "btn btn-warning"
diff --git a/app/views/projects/registry/repositories/index.html.haml b/app/views/projects/registry/repositories/index.html.haml
index d0d06a0df7e..b2e160e37bc 100644
--- a/app/views/projects/registry/repositories/index.html.haml
+++ b/app/views/projects/registry/repositories/index.html.haml
@@ -1,9 +1,14 @@
+- page_title _("Container Registry")
+
%section
.row.registry-placeholder.prepend-bottom-10
.col-12
#js-vue-registry-images{ data: { endpoint: project_container_registry_index_path(@project, format: :json),
"help_page_path" => help_page_path('user/packages/container_registry/index'),
+ "two_factor_auth_help_link" => help_page_path('user/profile/account/two_factor_authentication'),
+ "personal_access_tokens_help_link" => help_page_path('user/profile/personal_access_tokens'),
"no_containers_image" => image_path('illustrations/docker-empty-state.svg'),
"containers_error_image" => image_path('illustrations/docker-error-state.svg'),
"repository_url" => escape_once(@project.container_registry_url),
+ "registry_host_url_with_port" => escape_once(registry_config.host_port),
character_error: @character_error.to_s } }
diff --git a/app/views/projects/releases/edit.html.haml b/app/views/projects/releases/edit.html.haml
new file mode 100644
index 00000000000..88ca64f2af0
--- /dev/null
+++ b/app/views/projects/releases/edit.html.haml
@@ -0,0 +1,3 @@
+- page_title _('Edit Release')
+
+#js-edit-release-page{ data: data_for_edit_release_page }
diff --git a/app/views/projects/runners/_specific_runners.html.haml b/app/views/projects/runners/_specific_runners.html.haml
index dc56a515d4c..4cc67a8f5d8 100644
--- a/app/views/projects/runners/_specific_runners.html.haml
+++ b/app/views/projects/runners/_specific_runners.html.haml
@@ -2,28 +2,9 @@
= _('Specific Runners')
.bs-callout.help-callout
- .append-bottom-10
- %h4= _('Set up a specific Runner automatically')
-
- %p
- - link_to_help_page = link_to(_('Learn more about Kubernetes'),
- help_page_path('user/project/clusters/index'),
- target: '_blank',
- rel: 'noopener noreferrer')
-
- = _('You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}').html_safe % { link_to_help_page: link_to_help_page }
-
- %ol
- %li
- = _('Click the button below to begin the install process by navigating to the Kubernetes page')
- %li
- = _('Select an existing Kubernetes cluster or create a new one')
- %li
- = _('From the Kubernetes cluster details view, install Runner from the applications list')
-
- = link_to _('Install Runner on Kubernetes'),
- project_clusters_path(@project),
- class: 'btn btn-info'
+ = render partial: 'ci/runner/how_to_setup_runner_automatically',
+ locals: { type: 'specific',
+ clusters_path: project_clusters_path(@project) }
%hr
= render partial: 'ci/runner/how_to_setup_runner',
locals: { registration_token: @project.runners_token,
diff --git a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
index 1d5d90593ae..6702786fdb3 100644
--- a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
+++ b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
@@ -46,12 +46,12 @@
= form.radio_button :deploy_strategy, 'timed_incremental', class: 'form-check-input'
= form.label :deploy_strategy_timed_incremental, class: 'form-check-label' do
= s_('CICD|Continuous deployment to production using timed incremental rollout')
- = link_to icon('question-circle'), help_page_path('topics/autodevops/index.md', anchor: 'timed-incremental-rollout-to-production'), target: '_blank'
+ = link_to icon('question-circle'), help_page_path('topics/autodevops/index.md', anchor: 'timed-incremental-rollout-to-production-premium'), target: '_blank'
.form-check
= form.radio_button :deploy_strategy, 'manual', class: 'form-check-input'
= form.label :deploy_strategy_manual, class: 'form-check-label' do
= s_('CICD|Automatic deployment to staging, manual deployment to production')
- = link_to icon('question-circle'), help_page_path('topics/autodevops/index.md', anchor: 'incremental-rollout-to-production'), target: '_blank'
+ = link_to icon('question-circle'), help_page_path('topics/autodevops/index.md', anchor: 'incremental-rollout-to-production-premium'), target: '_blank'
= f.submit _('Save changes'), class: "btn btn-success prepend-top-15", data: { qa_selector: 'save_changes_button' }
diff --git a/app/views/projects/settings/ci_cd/_form.html.haml b/app/views/projects/settings/ci_cd/_form.html.haml
index 430d6071468..66ed1cadf6a 100644
--- a/app/views/projects/settings/ci_cd/_form.html.haml
+++ b/app/views/projects/settings/ci_cd/_form.html.haml
@@ -40,12 +40,21 @@
= _('If any job surpasses this timeout threshold, it will be marked as failed. Human readable time input language is accepted like "1 hour". Values without specification represent seconds.')
= link_to icon('question-circle'), help_page_path('user/project/pipelines/settings', anchor: 'timeout'), target: '_blank'
+ - if can?(current_user, :update_max_artifacts_size, @project)
+ %hr
+ .form-group
+ = f.label :max_artifacts_size, _('Maximum artifacts size (MB)'), class: 'label-bold'
+ = f.number_field :max_artifacts_size, class: 'form-control'
+ %p.form-text.text-muted
+ = _("Set the maximum file size for each job's artifacts")
+ = link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size-core-only'), target: '_blank'
+
%hr
.form-group
- = f.label :ci_config_path, _('Custom CI config path'), class: 'label-bold'
+ = f.label :ci_config_path, _('Custom CI configuration path'), class: 'label-bold'
= f.text_field :ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml'
%p.form-text.text-muted
- = _("The path to CI config file. Defaults to <code>.gitlab-ci.yml</code>").html_safe
+ = _("The path to the CI configuration file. Defaults to <code>.gitlab-ci.yml</code>").html_safe
= link_to icon('question-circle'), help_page_path('user/project/pipelines/settings', anchor: 'custom-ci-config-path'), target: '_blank'
%hr
diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml
index b1432917f1d..c7bd0262c54 100644
--- a/app/views/projects/tags/_tag.html.haml
+++ b/app/views/projects/tags/_tag.html.haml
@@ -19,9 +19,15 @@
- else
%p
= s_("TagsPage|Can't find HEAD commit for this tag")
- - if release && release.description.present?
- .description.md.prepend-top-default
- = markdown_field(release, :description)
+
+ - if release
+ .text-secondary
+ = icon('rocket')
+ = _("Release")
+ = link_to release.name, project_releases_path(@project, anchor: release.tag), class: 'tag-release-link'
+ - if release.description.present?
+ .description.md.prepend-top-default
+ = markdown_field(release, :description)
.row-fixed-content.controls.flex-row
= render 'projects/buttons/download', project: @project, ref: tag.name, pipeline: @tags_pipelines[tag.name]
diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml
index 5e6d06d980e..a7f739ab13d 100644
--- a/app/views/projects/tags/new.html.haml
+++ b/app/views/projects/tags/new.html.haml
@@ -31,7 +31,7 @@
.col-sm-10
= text_area_tag :message, @message, required: false, class: 'form-control', rows: 5
.form-text.text-muted
- = s_('TagsPage|Optionally, add a message to the tag.')
+ = tag_description_help_text
%hr
.form-group.row
= label_tag :release_description, s_('TagsPage|Release notes'), class: 'col-form-label col-sm-2'
diff --git a/app/views/projects/tree/_tree_header.html.haml b/app/views/projects/tree/_tree_header.html.haml
index 41cd044a5b0..38422d4533d 100644
--- a/app/views/projects/tree/_tree_header.html.haml
+++ b/app/views/projects/tree/_tree_header.html.haml
@@ -41,7 +41,7 @@
%li
= link_to '#modal-create-new-dir', { 'data-target' => '#modal-create-new-dir', 'data-toggle' => 'modal' } do
#{ _('New directory') }
- - elsif can?(current_user, :fork_project, @project) && can?(current_user, :create_merge_request_in, @project)
+ - elsif can_create_mr_from_fork
%li
- continue_params = { to: project_new_blob_path(@project, @id),
notice: edit_in_new_fork_notice,
@@ -81,10 +81,15 @@
= render 'projects/find_file_link'
- - if can_collaborate
+ - if can_create_mr_from_fork
= succeed " " do
- = link_to ide_edit_path(@project, @ref, @path), class: 'btn btn-default qa-web-ide-button' do
- = _('Web IDE')
+ - if can_collaborate || current_user&.already_forked?(@project)
+ = link_to ide_edit_path(@project, @ref, @path), class: 'btn btn-default qa-web-ide-button' do
+ = _('Web IDE')
+ - else
+ = link_to '#modal-confirm-fork', class: 'btn btn-default qa-web-ide-button', data: { target: '#modal-confirm-fork', toggle: 'modal'} do
+ = _('Web IDE')
+ = render 'shared/confirm_fork_modal', fork_path: ide_fork_and_edit_path(@project, @ref, @path)
- if show_xcode_link?(@project)
.project-action-button.project-xcode.inline
diff --git a/app/views/projects/triggers/_trigger.html.haml b/app/views/projects/triggers/_trigger.html.haml
index 9899cf9c6de..60de3630bb5 100644
--- a/app/views/projects/triggers/_trigger.html.haml
+++ b/app/views/projects/triggers/_trigger.html.haml
@@ -2,7 +2,7 @@
%td
- if trigger.has_token_exposed?
%span= trigger.token
- = clipboard_button(text: trigger.token, title: "Copy trigger token to clipboard")
+ = clipboard_button(text: trigger.token, title: _("Copy trigger token"))
- else
%span= trigger.short_token
diff --git a/app/views/registrations/welcome.html.haml b/app/views/registrations/welcome.html.haml
new file mode 100644
index 00000000000..02ab974ecc0
--- /dev/null
+++ b/app/views/registrations/welcome.html.haml
@@ -0,0 +1,17 @@
+- content_for(:page_title, _('Welcome to GitLab<br>%{username}!' % { username: html_escape(current_user.username) }).html_safe)
+- max_name_length = 128
+.text-center.mb-3
+ = _('In order to tailor your experience with GitLab<br>we would like to know a bit more about you.').html_safe
+.signup-box.p-3.mb-2
+ .signup-body
+ = form_for(current_user, url: users_sign_up_update_role_path, html: { class: 'new_new_user gl-show-field-errors', 'aria-live' => 'assertive' }) do |f|
+ .devise-errors.mt-0
+ = render 'devise/shared/error_messages', resource: current_user
+ .name.form-group
+ = f.label :name, _('Full name'), class: 'label-bold'
+ = f.text_field :name, class: 'form-control top js-block-emoji js-validate-length', :data => { :max_length => max_name_length, :max_length_message => s_('Name is too long (maximum is %{max_length} characters).') % { max_length: max_name_length }, :qa_selector => 'new_user_name_field' }, required: true, title: _('This field is required.')
+ .form-group
+ = f.label :role, _('Role'), class: 'label-bold'
+ = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'form-control'
+ .submit-container.mt-3
+ = f.submit _('Get started!'), class: 'btn-register btn btn-block mb-0 p-2'
diff --git a/app/views/search/_form.html.haml b/app/views/search/_form.html.haml
index 464db94b7f4..dc75918eb93 100644
--- a/app/views/search/_form.html.haml
+++ b/app/views/search/_form.html.haml
@@ -18,4 +18,3 @@
= render 'filter'
.d-flex-center.flex-column.flex-lg-row
= button_tag _("Search"), class: "btn btn-success btn-search form-control mt-lg-0 ml-lg-1 align-self-end"
- = render_if_exists 'search/form_elasticsearch'
diff --git a/app/views/search/results/_empty.html.haml b/app/views/search/results/_empty.html.haml
index 9d15995bb51..6c7c6de1178 100644
--- a/app/views/search/results/_empty.html.haml
+++ b/app/views/search/results/_empty.html.haml
@@ -2,5 +2,4 @@
.search_glyph
%h4
= icon('search')
- = _("We couldn't find any results matching")
- %code= @search_term
+ = search_entries_empty_message(@scope, @search_term)
diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml
index 9235678bc1d..f300e1d4841 100644
--- a/app/views/search/show.html.haml
+++ b/app/views/search/show.html.haml
@@ -2,9 +2,10 @@
- page_title @search_term
- @hide_breadcrumbs = true
-.page-title-holder.d-flex.align-items-center
+.page-title-holder.d-sm-flex.align-items-sm-center
%h1.page-title<
= _('Search')
+ = render_if_exists 'search/form_elasticsearch', attrs: { class: 'ml-sm-auto' }
.prepend-top-default
= render 'search/form'
diff --git a/app/views/shared/_allow_request_access.html.haml b/app/views/shared/_allow_request_access.html.haml
index 2b24bde9e59..ca82f2f3377 100644
--- a/app/views/shared/_allow_request_access.html.haml
+++ b/app/views/shared/_allow_request_access.html.haml
@@ -3,6 +3,4 @@
.form-check
= form.check_box :request_access_enabled, class: 'form-check-input', data: { qa_selector: 'request_access_checkbox' }
= form.label :request_access_enabled, class: 'form-check-label' do
- %span{ class: label_class }= _('Allow users to request access')
- %br
- %span.text-muted= _('Allow users to request access if visibility is public or internal.')
+ %span{ class: label_class }= _('Allow users to request access (if visibility is public or internal)')
diff --git a/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml b/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml
index 755fd3a17d3..fb03e6e12e3 100644
--- a/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml
+++ b/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml
@@ -1,5 +1,5 @@
- if show_auto_devops_implicitly_enabled_banner?(project, current_user)
- .qa-auto-devops-banner.auto-devops-implicitly-enabled-banner.alert.alert-warning
+ .qa-auto-devops-banner.auto-devops-implicitly-enabled-banner.alert.alert-info
- more_information_link = link_to _('More information'), help_page_path('topics/autodevops/index.md'), target: '_blank', class: 'alert-link'
- auto_devops_message = s_("AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}") % { more_information_link: more_information_link }
= auto_devops_message.html_safe
diff --git a/app/views/shared/_clone_panel.html.haml b/app/views/shared/_clone_panel.html.haml
index 1e509ea0d1f..cb834878276 100644
--- a/app/views/shared/_clone_panel.html.haml
+++ b/app/views/shared/_clone_panel.html.haml
@@ -20,7 +20,7 @@
= text_field_tag :project_clone, default_url_to_repo(project), class: "js-select-on-focus form-control", readonly: true, aria: { label: 'Project clone URL' }
.input-group-append
- = clipboard_button(target: '#project_clone', title: _("Copy URL to clipboard"), class: "input-group-text btn-default btn-clipboard")
+ = clipboard_button(target: '#project_clone', title: _("Copy URL"), class: "input-group-text btn-default btn-clipboard")
= render_if_exists 'shared/geo_modal_button'
diff --git a/app/views/shared/_confirm_fork_modal.html.haml b/app/views/shared/_confirm_fork_modal.html.haml
new file mode 100644
index 00000000000..db50ea41387
--- /dev/null
+++ b/app/views/shared/_confirm_fork_modal.html.haml
@@ -0,0 +1,12 @@
+#modal-confirm-fork.modal.qa-confirm-fork-modal
+ .modal-dialog
+ .modal-content
+ .modal-header
+ %h3.page-title= _('Fork project?')
+ %button.close{ type: "button", "data-dismiss": "modal", "aria-label" => _('Close') }
+ %span{ "aria-hidden": true } &times;
+ .modal-body.p-3
+ %p= _("You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request.") % { tag_start: '', tag_end: ''}
+ .modal-footer
+ = link_to _('Cancel'), '#', class: "btn btn-cancel", "data-dismiss" => "modal"
+ = link_to _('Fork project'), fork_path, class: 'btn btn-success', method: :post
diff --git a/app/views/shared/_confirm_modal.html.haml b/app/views/shared/_confirm_modal.html.haml
index 8e3b482e27d..ecb462205b0 100644
--- a/app/views/shared/_confirm_modal.html.haml
+++ b/app/views/shared/_confirm_modal.html.haml
@@ -12,9 +12,8 @@
%p
%span.js-warning-text= _('This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention.')
%br
- Please type
- %code.js-confirm-danger-match= phrase
- to proceed or close this modal to cancel.
+ - phrase_code = '<code class="js-confirm-danger-match">%{phrase_name}</code>'.html_safe % { phrase_name: phrase }
+ = _('Please type %{phrase_code} to proceed or close this modal to cancel.').html_safe % { phrase_code: phrase_code }
.form-group
= text_field_tag 'confirm_name_input', '', class: 'form-control js-confirm-danger-input qa-confirm-input'
diff --git a/app/views/shared/_event_filter.html.haml b/app/views/shared/_event_filter.html.haml
index 6612497e7e2..ad9eb325ff0 100644
--- a/app/views/shared/_event_filter.html.haml
+++ b/app/views/shared/_event_filter.html.haml
@@ -1,3 +1,5 @@
+- show_group_events = local_assigns.fetch(:show_group_events, false)
+
.scrolling-tabs-container.inner-page-scroll-tabs.is-smaller.flex-fill
.fade-left= icon('angle-left')
.fade-right= icon('angle-right')
@@ -9,6 +11,8 @@
= event_filter_link EventFilter::MERGED, _('Merge events'), s_('EventFilterBy|Filter by merge events')
- if event_filter_visible(:issues)
= event_filter_link EventFilter::ISSUE, _('Issue events'), s_('EventFilterBy|Filter by issue events')
+ - if show_group_events
+ = render_if_exists 'events/epics_filter'
- if comments_visible?
= event_filter_link EventFilter::COMMENTS, _('Comments'), s_('EventFilterBy|Filter by comments')
= event_filter_link EventFilter::TEAM, _('Team'), s_('EventFilterBy|Filter by team')
diff --git a/app/views/shared/_group_form.html.haml b/app/views/shared/_group_form.html.haml
index 973c756f496..959792718ca 100644
--- a/app/views/shared/_group_form.html.haml
+++ b/app/views/shared/_group_form.html.haml
@@ -30,9 +30,9 @@
- if @group.persisted?
.alert.alert-warning.prepend-top-10
- Changing group path can have unintended side effects.
+ = _('Changing group path can have unintended side effects.')
= succeed '.' do
- = link_to 'Learn more', help_page_path('user/group/index', anchor: 'changing-a-groups-path'), target: '_blank'
+ = link_to _('Learn more'), help_page_path('user/group/index', anchor: 'changing-a-groups-path'), target: '_blank'
- if @group.persisted?
.row
diff --git a/app/views/shared/_personal_access_tokens_created_container.html.haml b/app/views/shared/_personal_access_tokens_created_container.html.haml
index 42989b145a2..df4577e2862 100644
--- a/app/views/shared/_personal_access_tokens_created_container.html.haml
+++ b/app/views/shared/_personal_access_tokens_created_container.html.haml
@@ -1,5 +1,5 @@
- container_title = local_assigns.fetch(:container_title, _('Your New Personal Access Token'))
-- clipboard_button_title = local_assigns.fetch(:clipboard_button_title, _('Copy personal access token to clipboard'))
+- clipboard_button_title = local_assigns.fetch(:clipboard_button_title, _('Copy personal access token'))
.created-personal-access-token-container
%h5.prepend-top-0
diff --git a/app/views/shared/_remote_mirror_update_button.html.haml b/app/views/shared/_remote_mirror_update_button.html.haml
index 4b39c8b06e9..54bd4ba04a0 100644
--- a/app/views/shared/_remote_mirror_update_button.html.haml
+++ b/app/views/shared/_remote_mirror_update_button.html.haml
@@ -1,5 +1,5 @@
- if remote_mirror.update_in_progress?
- %button.btn.disabled{ type: 'button', data: { toggle: 'tooltip', container: 'body' }, title: _('Updating') }
+ %button.btn.disabled{ type: 'button', data: { toggle: 'tooltip', container: 'body', qa_selector: 'updating_button' }, title: _('Updating') }
= icon("refresh spin")
- elsif remote_mirror.enabled?
= link_to update_now_project_mirror_path(@project, sync_remote: true), method: :post, class: "btn qa-update-now-button rspec-update-now-button", data: { toggle: 'tooltip', container: 'body' }, title: _('Update now') do
diff --git a/app/views/shared/_user_dropdown_contributing_link.html.haml b/app/views/shared/_user_dropdown_contributing_link.html.haml
index 564d21a39be..d4c3e11d051 100644
--- a/app/views/shared/_user_dropdown_contributing_link.html.haml
+++ b/app/views/shared/_user_dropdown_contributing_link.html.haml
@@ -1,3 +1,2 @@
-%li
- = link_to "https://about.gitlab.com/contributing", target: '_blank', class: 'text-nowrap' do
- = _("Contribute to GitLab")
+= link_to "https://about.gitlab.com/contributing", target: '_blank', class: 'text-nowrap' do
+ = _("Contribute to GitLab")
diff --git a/app/views/shared/boards/_switcher.html.haml b/app/views/shared/boards/_switcher.html.haml
index 79118630762..09a365a290a 100644
--- a/app/views/shared/boards/_switcher.html.haml
+++ b/app/views/shared/boards/_switcher.html.haml
@@ -1,4 +1,4 @@
-- parent = board.parent
+- parent = board.resource_parent
- milestone_filter_opts = { format: :json }
- milestone_filter_opts = milestone_filter_opts.merge(only_group_milestones: true) if board.group_board?
- weights = Gitlab.ee? ? ([Issue::WEIGHT_ANY] + Issue.weight_options) : []
diff --git a/app/views/shared/deploy_keys/_form.html.haml b/app/views/shared/deploy_keys/_form.html.haml
index bc0dc7f9631..1944c293be1 100644
--- a/app/views/shared/deploy_keys/_form.html.haml
+++ b/app/views/shared/deploy_keys/_form.html.haml
@@ -6,7 +6,7 @@
.form-group
= form.label :title, class: 'col-form-label col-sm-2'
- .col-sm-10= form.text_field :title, class: 'form-control'
+ .col-sm-10= form.text_field :title, class: 'form-control', readonly: ('readonly' unless can?(current_user, :update_deploy_key, deploy_key))
.form-group
- if deploy_key.new_record?
diff --git a/app/views/shared/empty_states/_issues.html.haml b/app/views/shared/empty_states/_issues.html.haml
index 9173b802dd4..325e01bb5c8 100644
--- a/app/views/shared/empty_states/_issues.html.haml
+++ b/app/views/shared/empty_states/_issues.html.haml
@@ -1,4 +1,4 @@
-- button_path = local_assigns.fetch(:button_path, false)
+- button_path = local_assigns.fetch(:new_project_issue_button_path, false)
- project_select_button = local_assigns.fetch(:project_select_button, false)
- show_import_button = local_assigns.fetch(:show_import_button, false) && can?(current_user, :import_issues, @project)
- has_button = button_path || project_select_button
@@ -56,4 +56,3 @@
- if show_import_button
= render 'projects/issues/import_csv/modal'
-
diff --git a/app/views/shared/form_elements/_apply_template_warning.html.haml b/app/views/shared/form_elements/_apply_template_warning.html.haml
new file mode 100644
index 00000000000..09ca59a520c
--- /dev/null
+++ b/app/views/shared/form_elements/_apply_template_warning.html.haml
@@ -0,0 +1,14 @@
+.form-group.row.js-template-warning.mb-0.hidden.js-issuable-template-warning
+ .offset-sm-2.col-sm-10
+
+ .warning_message.mb-0{ role: 'alert' }
+ %btn.js-close-btn.js-dismiss-btn.close{ type: "button", "aria-hidden": true, "aria-label": _("Close") }
+ = sprite_icon("close")
+
+ %p
+ = _("Applying a template will replace the existing issue description. Any changes you have made will be lost.")
+
+ %button.js-override-template.btn.btn-warning.mr-2{ type: 'button' }
+ = _("Apply template")
+ %button.js-close-btn.js-cancel-btn.btn.btn-inverted{ type: 'button' }
+ = _("Cancel")
diff --git a/app/views/shared/issuable/_assignees.html.haml b/app/views/shared/issuable/_assignees.html.haml
index 24734ed66cf..cec865ec8de 100644
--- a/app/views/shared/issuable/_assignees.html.haml
+++ b/app/views/shared/issuable/_assignees.html.haml
@@ -7,4 +7,4 @@
= link_to_member(@project, assignee, name: false, title: "Assigned to :name")
- if more_assignees_count.positive?
- %span{ class: 'avatar-counter has-tooltip', data: { container: 'body', placement: 'bottom', 'line-type' => 'old', 'original-title' => "+#{more_assignees_count} more assignees" } } +#{more_assignees_count}
+ %span{ class: 'avatar-counter has-tooltip', data: { container: 'body', placement: 'bottom', 'line-type' => 'old', 'original-title' => "+#{more_assignees_count} more assignees", qa_selector: 'avatar_counter' } } +#{more_assignees_count}
diff --git a/app/views/shared/issuable/_board_create_list_dropdown.html.haml b/app/views/shared/issuable/_board_create_list_dropdown.html.haml
index 416b4a34651..ae0e5e45afe 100644
--- a/app/views/shared/issuable/_board_create_list_dropdown.html.haml
+++ b/app/views/shared/issuable/_board_create_list_dropdown.html.haml
@@ -3,6 +3,6 @@
Add list
.dropdown-menu.dropdown-extended-height.dropdown-menu-paging.dropdown-menu-right.dropdown-menu-issues-board-new.dropdown-menu-selectable.js-tab-container-labels
= render partial: "shared/issuable/label_page_default", locals: { show_footer: true, show_create: true, show_boards_content: true, title: "Add list" }
- - if can?(current_user, :admin_label, board.parent)
+ - if can?(current_user, :admin_label, board.resource_parent)
= render partial: "shared/issuable/label_page_create", locals: { show_add_list: true, add_list: true, add_list_class: 'd-none' }
= dropdown_loading
diff --git a/app/views/shared/issuable/_feed_buttons.html.haml b/app/views/shared/issuable/_feed_buttons.html.haml
index 83f60fa6fe2..4fed95e2607 100644
--- a/app/views/shared/issuable/_feed_buttons.html.haml
+++ b/app/views/shared/issuable/_feed_buttons.html.haml
@@ -1,4 +1,4 @@
-= link_to safe_params.merge(rss_url_options), class: 'btn has-tooltip', data: { container: 'body' }, title: _('Subscribe to RSS feed') do
- = icon('rss')
+= link_to safe_params.merge(rss_url_options), class: 'btn has-tooltip js-rss-button', data: { container: 'body' }, title: _('Subscribe to RSS feed') do
+ = sprite_icon('rss')
= link_to safe_params.merge(calendar_url_options), class: 'btn has-tooltip', data: { container: 'body' }, title: _('Subscribe to calendar') do
- = custom_icon('icon_calendar')
+ = sprite_icon('calendar')
diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml
index 04a70e406ca..5e2b5f95ee3 100644
--- a/app/views/shared/issuable/_form.html.haml
+++ b/app/views/shared/issuable/_form.html.haml
@@ -19,6 +19,7 @@
= render 'shared/issuable/form/title', issuable: issuable, form: form, has_wip_commits: commits && commits.detect(&:work_in_progress?)
#js-suggestions{ data: { project_path: @project.full_path } }
+= render 'shared/form_elements/apply_template_warning'
= render 'shared/form_elements/description', model: issuable, form: form, project: project
- if issuable.respond_to?(:confidential)
diff --git a/app/views/shared/issuable/_search_bar.html.haml b/app/views/shared/issuable/_search_bar.html.haml
index c9458475aa5..9d580930fb8 100644
--- a/app/views/shared/issuable/_search_bar.html.haml
+++ b/app/views/shared/issuable/_search_bar.html.haml
@@ -2,7 +2,7 @@
- board = local_assigns.fetch(:board, nil)
- is_not_boards_modal_or_productivity_analytics = type != :boards_modal && type != :productivity_analytics
- block_css_class = is_not_boards_modal_or_productivity_analytics ? 'row-content-block second-block' : ''
-- user_can_admin_list = board && can?(current_user, :admin_list, board.parent)
+- user_can_admin_list = board && can?(current_user, :admin_list, board.resource_parent)
.issues-filters{ class: ("w-100" if type == :boards_modal) }
.issues-details-filters.filtered-search-block.d-flex.flex-column.flex-md-row{ class: block_css_class, "v-pre" => type == :boards_modal }
@@ -17,12 +17,11 @@
.issues-other-filters.filtered-search-wrapper.d-flex.flex-column.flex-md-row
.filtered-search-box
- if type != :boards_modal && type != :boards
- = dropdown_tag(custom_icon('icon_history'),
+ = dropdown_tag(_('Recent searches'),
options: { wrapper_class: "filtered-search-history-dropdown-wrapper",
toggle_class: "filtered-search-history-dropdown-toggle-button",
dropdown_class: "filtered-search-history-dropdown",
- content_class: "filtered-search-history-dropdown-content",
- title: "Recent searches" }) do
+ content_class: "filtered-search-history-dropdown-content" }) do
.js-filtered-search-history-dropdown{ data: { full_path: search_history_storage_prefix } }
.filtered-search-box-input-container.droplab-dropdown
.scroll-container
diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml
index 3b26b8df8a1..c8b2adcf084 100644
--- a/app/views/shared/issuable/_sidebar.html.haml
+++ b/app/views/shared/issuable/_sidebar.html.haml
@@ -5,174 +5,178 @@
- signed_in = !!issuable_sidebar.dig(:current_user, :id)
- can_edit_issuable = issuable_sidebar.dig(:current_user, :can_edit)
-%aside.right-sidebar.js-right-sidebar.js-issuable-sidebar{ data: { signed: { in: signed_in } }, class: sidebar_gutter_collapsed_class, 'aria-live' => 'polite' }
- .issuable-sidebar
- .block.issuable-sidebar-header
- - if signed_in
- %span.issuable-header-text.hide-collapsed.float-left
- = _('To Do')
- %a.gutter-toggle.float-right.js-sidebar-toggle.has-tooltip{ role: "button", href: "#", "aria-label" => "Toggle sidebar", title: sidebar_gutter_tooltip_text, data: { container: 'body', placement: 'left', boundary: 'viewport' } }
- = sidebar_gutter_toggle_icon
- - if signed_in
- = render "shared/issuable/sidebar_todo", issuable_sidebar: issuable_sidebar
-
- = form_for issuable_type, url: issuable_sidebar[:issuable_json_path], remote: true, html: { class: 'issuable-context-form inline-update js-issuable-update' } do |f|
- - if signed_in
- .block.todo.hide-expanded
- = render "shared/issuable/sidebar_todo", issuable_sidebar: issuable_sidebar, is_collapsed: true
- .block.assignee.qa-assignee-block
- = render "shared/issuable/sidebar_assignees", issuable_sidebar: issuable_sidebar, assignees: assignees
-
- = render_if_exists 'shared/issuable/sidebar_item_epic', issuable_sidebar: issuable_sidebar
-
- - milestone = issuable_sidebar[:milestone] || {}
- .block.milestone
- .sidebar-collapsed-icon.has-tooltip{ title: sidebar_milestone_tooltip_label(milestone), data: { container: 'body', html: 'true', placement: 'left', boundary: 'viewport' } }
- = icon('clock-o', 'aria-hidden': 'true')
- %span.milestone-title.collapse-truncated-title
- - if milestone.present?
- = milestone[:title]
- - else
- = _('None')
- .title.hide-collapsed
- = _('Milestone')
- = icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true')
- - if can_edit_issuable
- = link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link float-right', data: { track_label: "right_sidebar", track_property: "milestone", track_event: "click_edit_button", track_value: "" }
- .value.hide-collapsed
- - if milestone.present?
- = link_to milestone[:title], milestone[:web_url], class: "bold has-tooltip", title: sidebar_milestone_remaining_days(milestone), data: { container: "body", html: 'true', boundary: 'viewport', qa_selector: 'milestone_link' }
- - else
- %span.no-value
- = _('None')
-
- .selectbox.hide-collapsed
- = f.hidden_field 'milestone_id', value: milestone[:id], id: nil
- = dropdown_tag('Milestone', options: { title: _('Assign milestone'), toggle_class: 'js-milestone-select js-extra-options', filter: true, dropdown_class: 'dropdown-menu-selectable', placeholder: _('Search milestones'), data: { show_no: true, field_name: "#{issuable_type}[milestone_id]", project_id: issuable_sidebar[:project_id], issuable_id: issuable_sidebar[:id], milestones: issuable_sidebar[:project_milestones_path], ability_name: issuable_type, issue_update: issuable_sidebar[:issuable_json_path], use_id: true, default_no: true, selected: milestone[:title], null_default: true, display: 'static' }})
-
- #issuable-time-tracker.block
- // Fallback while content is loading
- .title.hide-collapsed
- = _('Time tracking')
- = icon('spinner spin', 'aria-hidden': 'true')
-
- - if issuable_sidebar.has_key?(:due_date)
- .block.due_date
- .sidebar-collapsed-icon.has-tooltip{ data: { placement: 'left', container: 'body', html: 'true', boundary: 'viewport' }, title: sidebar_due_date_tooltip_label(issuable_sidebar[:due_date]) }
- = icon('calendar', 'aria-hidden': 'true')
- %span.js-due-date-sidebar-value
- = issuable_sidebar[:due_date].try(:to_s, :medium) || 'None'
+- if Feature.enabled?(:vue_issuable_sidebar, @project.group)
+ %aside#js-vue-issuable-sidebar{ data: { signed_in: signed_in,
+ sidebar_status_class: sidebar_gutter_collapsed_class } }
+- else
+ %aside.right-sidebar.js-right-sidebar.js-issuable-sidebar{ data: { signed: { in: signed_in } }, class: sidebar_gutter_collapsed_class, 'aria-live' => 'polite' }
+ .issuable-sidebar
+ .block.issuable-sidebar-header
+ - if signed_in
+ %span.issuable-header-text.hide-collapsed.float-left
+ = _('To Do')
+ %a.gutter-toggle.float-right.js-sidebar-toggle.has-tooltip{ role: "button", href: "#", "aria-label" => "Toggle sidebar", title: sidebar_gutter_tooltip_text, data: { container: 'body', placement: 'left', boundary: 'viewport' } }
+ = sidebar_gutter_toggle_icon
+ - if signed_in
+ = render "shared/issuable/sidebar_todo", issuable_sidebar: issuable_sidebar
+
+ = form_for issuable_type, url: issuable_sidebar[:issuable_json_path], remote: true, html: { class: 'issuable-context-form inline-update js-issuable-update' } do |f|
+ - if signed_in
+ .block.todo.hide-expanded
+ = render "shared/issuable/sidebar_todo", issuable_sidebar: issuable_sidebar, is_collapsed: true
+ .block.assignee.qa-assignee-block
+ = render "shared/issuable/sidebar_assignees", issuable_sidebar: issuable_sidebar, assignees: assignees
+
+ = render_if_exists 'shared/issuable/sidebar_item_epic', issuable_sidebar: issuable_sidebar
+
+ - milestone = issuable_sidebar[:milestone] || {}
+ .block.milestone
+ .sidebar-collapsed-icon.has-tooltip{ title: sidebar_milestone_tooltip_label(milestone), data: { container: 'body', html: 'true', placement: 'left', boundary: 'viewport' } }
+ = icon('clock-o', 'aria-hidden': 'true')
+ %span.milestone-title.collapse-truncated-title
+ - if milestone.present?
+ = milestone[:title]
+ - else
+ = _('None')
.title.hide-collapsed
- = _('Due date')
+ = _('Milestone')
= icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true')
- if can_edit_issuable
- = link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link float-right', data: { track_label: "right_sidebar", track_property: "due_date", track_event: "click_edit_button", track_value: "" }
+ = link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link float-right', data: { track_label: "right_sidebar", track_property: "milestone", track_event: "click_edit_button", track_value: "" }
.value.hide-collapsed
- %span.value-content
- - if issuable_sidebar[:due_date]
- %span.bold= issuable_sidebar[:due_date].to_s(:medium)
- - else
- %span.no-value
- = _('None')
+ - if milestone.present?
+ = link_to milestone[:title], milestone[:web_url], class: "bold has-tooltip", title: sidebar_milestone_remaining_days(milestone), data: { container: "body", html: 'true', boundary: 'viewport', qa_selector: 'milestone_link' }
+ - else
+ %span.no-value
+ = _('None')
+
+ .selectbox.hide-collapsed
+ = f.hidden_field 'milestone_id', value: milestone[:id], id: nil
+ = dropdown_tag('Milestone', options: { title: _('Assign milestone'), toggle_class: 'js-milestone-select js-extra-options', filter: true, dropdown_class: 'dropdown-menu-selectable', placeholder: _('Search milestones'), data: { show_no: true, field_name: "#{issuable_type}[milestone_id]", project_id: issuable_sidebar[:project_id], issuable_id: issuable_sidebar[:id], milestones: issuable_sidebar[:project_milestones_path], ability_name: issuable_type, issue_update: issuable_sidebar[:issuable_json_path], use_id: true, default_no: true, selected: milestone[:title], null_default: true, display: 'static' }})
+
+ #issuable-time-tracker.block
+ // Fallback while content is loading
+ .title.hide-collapsed
+ = _('Time tracking')
+ = icon('spinner spin', 'aria-hidden': 'true')
+
+ - if issuable_sidebar.has_key?(:due_date)
+ .block.due_date
+ .sidebar-collapsed-icon.has-tooltip{ data: { placement: 'left', container: 'body', html: 'true', boundary: 'viewport' }, title: sidebar_due_date_tooltip_label(issuable_sidebar[:due_date]) }
+ = icon('calendar', 'aria-hidden': 'true')
+ %span.js-due-date-sidebar-value
+ = issuable_sidebar[:due_date].try(:to_s, :medium) || 'None'
+ .title.hide-collapsed
+ = _('Due date')
+ = icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true')
+ - if can_edit_issuable
+ = link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link float-right', data: { track_label: "right_sidebar", track_property: "due_date", track_event: "click_edit_button", track_value: "" }
+ .value.hide-collapsed
+ %span.value-content
+ - if issuable_sidebar[:due_date]
+ %span.bold= issuable_sidebar[:due_date].to_s(:medium)
+ - else
+ %span.no-value
+ = _('None')
+ - if can_edit_issuable
+ %span.no-value.js-remove-due-date-holder{ class: ("hidden" if issuable_sidebar[:due_date].nil?) }
+ \-
+ %a.js-remove-due-date{ href: "#", role: "button" }
+ = _('remove due date')
- if can_edit_issuable
- %span.no-value.js-remove-due-date-holder{ class: ("hidden" if issuable_sidebar[:due_date].nil?) }
- \-
- %a.js-remove-due-date{ href: "#", role: "button" }
- = _('remove due date')
- - if can_edit_issuable
- .selectbox.hide-collapsed
- = f.hidden_field :due_date, value: issuable_sidebar[:due_date].try(:strftime, 'yy-mm-dd')
- .dropdown
- %button.dropdown-menu-toggle.js-due-date-select{ type: 'button', data: { toggle: 'dropdown', field_name: "#{issuable_type}[due_date]", ability_name: issuable_type, issue_update: issuable_sidebar[:issuable_json_path], display: 'static' } }
- %span.dropdown-toggle-text
- = _('Due date')
- = icon('chevron-down', 'aria-hidden': 'true')
- .dropdown-menu.dropdown-menu-due-date
- = dropdown_title(_('Due date'))
- = dropdown_content do
- .js-due-date-calendar
-
- - selected_labels = issuable_sidebar[:labels]
- .block.labels
- .sidebar-collapsed-icon.js-sidebar-labels-tooltip{ title: issuable_labels_tooltip(selected_labels), data: { placement: "left", container: "body", boundary: 'viewport' } }
- = icon('tags', 'aria-hidden': 'true')
- %span
- = selected_labels.size
- .title.hide-collapsed
- = _('Labels')
- = icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true')
- - if can_edit_issuable
- = link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link qa-edit-link-labels float-right', data: { track_label: "right_sidebar", track_property: "labels", track_event: "click_edit_button", track_value: "" }
- .value.issuable-show-labels.dont-hide.hide-collapsed.qa-labels-block{ class: ("has-labels" if selected_labels.any?) }
- - if selected_labels.any?
- - selected_labels.each do |label_hash|
- = render_label(label_from_hash(label_hash).present(issuable_subject: nil), link: sidebar_label_filter_path(issuable_sidebar[:project_issuables_path], label_hash[:title]))
- - else
- %span.no-value
- = _('None')
- .selectbox.hide-collapsed
- - selected_labels.each do |label|
- = hidden_field_tag "#{issuable_type}[label_names][]", label[:id], id: nil
- .dropdown
- %button.dropdown-menu-toggle.js-label-select.js-multiselect.js-label-sidebar-dropdown{ type: "button", data: sidebar_label_dropdown_data(issuable_type, issuable_sidebar) }
- %span.dropdown-toggle-text{ class: ("is-default" if selected_labels.empty?) }
- = multi_label_name(selected_labels, "Labels")
- = icon('chevron-down', 'aria-hidden': 'true')
- .dropdown-menu.dropdown-select.dropdown-menu-paging.qa-dropdown-menu-labels.dropdown-menu-labels.dropdown-menu-selectable.dropdown-extended-height
- = render partial: "shared/issuable/label_page_default"
- - if issuable_sidebar.dig(:current_user, :can_admin_label)
- = render partial: "shared/issuable/label_page_create"
-
- = render_if_exists 'shared/issuable/sidebar_weight', issuable_sidebar: issuable_sidebar
-
- - if issuable_sidebar.has_key?(:confidential)
+ .selectbox.hide-collapsed
+ = f.hidden_field :due_date, value: issuable_sidebar[:due_date].try(:strftime, 'yy-mm-dd')
+ .dropdown
+ %button.dropdown-menu-toggle.js-due-date-select{ type: 'button', data: { toggle: 'dropdown', field_name: "#{issuable_type}[due_date]", ability_name: issuable_type, issue_update: issuable_sidebar[:issuable_json_path], display: 'static' } }
+ %span.dropdown-toggle-text
+ = _('Due date')
+ = icon('chevron-down', 'aria-hidden': 'true')
+ .dropdown-menu.dropdown-menu-due-date
+ = dropdown_title(_('Due date'))
+ = dropdown_content do
+ .js-due-date-calendar
+
+ - selected_labels = issuable_sidebar[:labels]
+ .block.labels
+ .sidebar-collapsed-icon.js-sidebar-labels-tooltip{ title: issuable_labels_tooltip(selected_labels), data: { placement: "left", container: "body", boundary: 'viewport' } }
+ = icon('tags', 'aria-hidden': 'true')
+ %span
+ = selected_labels.size
+ .title.hide-collapsed
+ = _('Labels')
+ = icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true')
+ - if can_edit_issuable
+ = link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link qa-edit-link-labels float-right', data: { track_label: "right_sidebar", track_property: "labels", track_event: "click_edit_button", track_value: "" }
+ .value.issuable-show-labels.dont-hide.hide-collapsed.qa-labels-block{ class: ("has-labels" if selected_labels.any?) }
+ - if selected_labels.any?
+ - selected_labels.each do |label_hash|
+ = render_label(label_from_hash(label_hash).present(issuable_subject: nil), link: sidebar_label_filter_path(issuable_sidebar[:project_issuables_path], label_hash[:title]))
+ - else
+ %span.no-value
+ = _('None')
+ .selectbox.hide-collapsed
+ - selected_labels.each do |label|
+ = hidden_field_tag "#{issuable_type}[label_names][]", label[:id], id: nil
+ .dropdown
+ %button.dropdown-menu-toggle.js-label-select.js-multiselect.js-label-sidebar-dropdown{ type: "button", data: sidebar_label_dropdown_data(issuable_type, issuable_sidebar) }
+ %span.dropdown-toggle-text{ class: ("is-default" if selected_labels.empty?) }
+ = multi_label_name(selected_labels, "Labels")
+ = icon('chevron-down', 'aria-hidden': 'true')
+ .dropdown-menu.dropdown-select.dropdown-menu-paging.qa-dropdown-menu-labels.dropdown-menu-labels.dropdown-menu-selectable.dropdown-extended-height
+ = render partial: "shared/issuable/label_page_default"
+ - if issuable_sidebar.dig(:current_user, :can_admin_label)
+ = render partial: "shared/issuable/label_page_create"
+
+ = render_if_exists 'shared/issuable/sidebar_weight', issuable_sidebar: issuable_sidebar
+
+ - if issuable_sidebar.has_key?(:confidential)
+ -# haml-lint:disable InlineJavaScript
+ %script#js-confidential-issue-data{ type: "application/json" }= { is_confidential: issuable_sidebar[:confidential], is_editable: can_edit_issuable }.to_json.html_safe
+ #js-confidential-entry-point
+
-# haml-lint:disable InlineJavaScript
- %script#js-confidential-issue-data{ type: "application/json" }= { is_confidential: issuable_sidebar[:confidential], is_editable: can_edit_issuable }.to_json.html_safe
- #js-confidential-entry-point
+ %script#js-lock-issue-data{ type: "application/json" }= { is_locked: !!issuable_sidebar[:discussion_locked], is_editable: can_edit_issuable }.to_json.html_safe
+ #js-lock-entry-point
+
+ .js-sidebar-participants-entry-point
+
+ - if signed_in
+ - if issuable_sidebar[:project_emails_disabled]
+ .block.js-emails-disabled
+ .sidebar-collapsed-icon.has-tooltip{ title: notification_description(:owner_disabled), data: { placement: "left", container: "body", boundary: 'viewport' } }
+ = notification_setting_icon
+ .hide-collapsed= notification_description(:owner_disabled)
+ - else
+ .js-sidebar-subscriptions-entry-point
+
+ - project_ref = issuable_sidebar[:reference]
+ .block.project-reference
+ .sidebar-collapsed-icon.dont-change-state
+ = clipboard_button(text: project_ref, title: _('Copy reference'), placement: "left", boundary: 'viewport')
+ .cross-project-reference.hide-collapsed
+ %span
+ = _('Reference:')
+ %cite{ title: project_ref }
+ = project_ref
+ = clipboard_button(text: project_ref, title: _('Copy reference'), placement: "left", boundary: 'viewport')
+
+ - if issuable_sidebar.dig(:current_user, :can_move)
+ .block.js-sidebar-move-issue-block
+ .sidebar-collapsed-icon{ data: { toggle: 'tooltip', placement: 'left', container: 'body', boundary: 'viewport' }, title: _('Move issue') }
+ = custom_icon('icon_arrow_right')
+ .dropdown.sidebar-move-issue-dropdown.hide-collapsed
+ %button.btn.btn-default.btn-block.js-sidebar-dropdown-toggle.js-move-issue{ type: 'button',
+ data: { toggle: 'dropdown', display: 'static', track_label: "right_sidebar", track_property: "move_issue", track_event: "click_button", track_value: "" } }
+ = _('Move issue')
+ .dropdown-menu.dropdown-menu-selectable.dropdown-extended-height
+ = dropdown_title(_('Move issue'))
+ = dropdown_filter(_('Search project'), search_id: 'sidebar-move-issue-dropdown-search')
+ = dropdown_content
+ = dropdown_loading
+ = dropdown_footer add_content_class: true do
+ %button.btn.btn-success.sidebar-move-issue-confirmation-button.js-move-issue-confirmation-button{ type: 'button', disabled: true }
+ = _('Move')
+ = icon('spinner spin', class: 'sidebar-move-issue-confirmation-loading-icon')
-# haml-lint:disable InlineJavaScript
- %script#js-lock-issue-data{ type: "application/json" }= { is_locked: !!issuable_sidebar[:discussion_locked], is_editable: can_edit_issuable }.to_json.html_safe
- #js-lock-entry-point
-
- .js-sidebar-participants-entry-point
-
- - if signed_in
- - if issuable_sidebar[:project_emails_disabled]
- .block.js-emails-disabled
- .sidebar-collapsed-icon.has-tooltip{ title: notification_description(:owner_disabled), data: { placement: "left", container: "body", boundary: 'viewport' } }
- = notification_setting_icon
- .hide-collapsed= notification_description(:owner_disabled)
- - else
- .js-sidebar-subscriptions-entry-point
-
- - project_ref = issuable_sidebar[:reference]
- .block.project-reference
- .sidebar-collapsed-icon.dont-change-state
- = clipboard_button(text: project_ref, title: _('Copy reference to clipboard'), placement: "left", boundary: 'viewport')
- .cross-project-reference.hide-collapsed
- %span
- = _('Reference:')
- %cite{ title: project_ref }
- = project_ref
- = clipboard_button(text: project_ref, title: _('Copy reference to clipboard'), placement: "left", boundary: 'viewport')
-
- - if issuable_sidebar.dig(:current_user, :can_move)
- .block.js-sidebar-move-issue-block
- .sidebar-collapsed-icon{ data: { toggle: 'tooltip', placement: 'left', container: 'body', boundary: 'viewport' }, title: _('Move issue') }
- = custom_icon('icon_arrow_right')
- .dropdown.sidebar-move-issue-dropdown.hide-collapsed
- %button.btn.btn-default.btn-block.js-sidebar-dropdown-toggle.js-move-issue{ type: 'button',
- data: { toggle: 'dropdown', display: 'static', track_label: "right_sidebar", track_property: "move_issue", track_event: "click_button", track_value: "" } }
- = _('Move issue')
- .dropdown-menu.dropdown-menu-selectable.dropdown-extended-height
- = dropdown_title(_('Move issue'))
- = dropdown_filter(_('Search project'), search_id: 'sidebar-move-issue-dropdown-search')
- = dropdown_content
- = dropdown_loading
- = dropdown_footer add_content_class: true do
- %button.btn.btn-success.sidebar-move-issue-confirmation-button.js-move-issue-confirmation-button{ type: 'button', disabled: true }
- = _('Move')
- = icon('spinner spin', class: 'sidebar-move-issue-confirmation-loading-icon')
-
- -# haml-lint:disable InlineJavaScript
- %script.js-sidebar-options{ type: "application/json" }= issuable_sidebar_options(issuable_sidebar).to_json.html_safe
+ %script.js-sidebar-options{ type: "application/json" }= issuable_sidebar_options(issuable_sidebar).to_json.html_safe
diff --git a/app/views/shared/issuable/_sidebar_assignees.html.haml b/app/views/shared/issuable/_sidebar_assignees.html.haml
index dfb0e7ed297..e6b8e299e1c 100644
--- a/app/views/shared/issuable/_sidebar_assignees.html.haml
+++ b/app/views/shared/issuable/_sidebar_assignees.html.haml
@@ -11,7 +11,7 @@
= hidden_field_tag "#{issuable_type}[assignee_ids][]", 0, id: nil
- else
- assignees.each do |assignee|
- = hidden_field_tag "#{issuable_type}[assignee_ids][]", assignee.id, id: nil, data: { avatar_url: assignee.avatar_url, name: assignee.name, username: assignee.username }
+ = hidden_field_tag "#{issuable_type}[assignee_ids][]", assignee.id, id: nil, data: assignee_sidebar_data(assignee, merge_request: @merge_request)
- options = { toggle_class: 'js-user-search js-author-search',
title: _('Assign to'),
diff --git a/app/views/shared/milestones/_sidebar.html.haml b/app/views/shared/milestones/_sidebar.html.haml
index ced6af50501..22a6d5e33f0 100644
--- a/app/views/shared/milestones/_sidebar.html.haml
+++ b/app/views/shared/milestones/_sidebar.html.haml
@@ -142,10 +142,10 @@
- if milestone_ref.present?
.block.reference
.sidebar-collapsed-icon.dont-change-state
- = clipboard_button(text: milestone_ref, title: "Copy reference to clipboard", placement: "left", boundary: 'viewport')
+ = clipboard_button(text: milestone_ref, title: _("Copy reference"), placement: "left", boundary: 'viewport')
.cross-project-reference.hide-collapsed
%span
Reference:
%cite{ title: milestone_ref }
= milestone_ref
- = clipboard_button(text: milestone_ref, title: "Copy reference to clipboard", placement: "left", boundary: 'viewport')
+ = clipboard_button(text: milestone_ref, title: _("Copy reference"), placement: "left", boundary: 'viewport')
diff --git a/app/views/shared/projects/_project.html.haml b/app/views/shared/projects/_project.html.haml
index bcce7cb52fb..67dad9b7a75 100644
--- a/app/views/shared/projects/_project.html.haml
+++ b/app/views/shared/projects/_project.html.haml
@@ -12,7 +12,9 @@
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
- cache_key = project_list_cache_key(project, pipeline_status: pipeline_status)
- updated_tooltip = time_ago_with_tooltip(project.last_activity_date)
-- css_controls_class = compact_mode ? "" : "flex-lg-row justify-content-lg-between"
+- show_pipeline_status_icon = pipeline_status && can?(current_user, :read_cross_project) && project.pipeline_status.has_status? && can?(current_user, :read_build, project)
+- css_controls_class = compact_mode ? [] : ["flex-lg-row", "justify-content-lg-between"]
+- css_controls_class << "with-pipeline-status" if show_pipeline_status_icon
- avatar_container_class = project.creator && use_creator_avatar ? '' : 'rect-avatar'
%li.project-row.d-flex{ class: css_class }
@@ -58,12 +60,12 @@
.description.d-none.d-sm-block.append-right-default
= markdown_field(project, :description)
- .controls.d-flex.flex-sm-column.align-items-center.align-items-sm-end.flex-wrap.flex-shrink-0.text-secondary{ class: css_controls_class }
+ .controls.d-flex.flex-sm-column.align-items-center.align-items-sm-end.flex-wrap.flex-shrink-0.text-secondary{ class: css_controls_class.join(" ") }
.icon-container.d-flex.align-items-center
- - if pipeline_status && can?(current_user, :read_cross_project) && project.pipeline_status.has_status? && can?(current_user, :read_build, project)
+ - if show_pipeline_status_icon
- pipeline_path = pipelines_project_commit_path(project.pipeline_status.project, project.pipeline_status.sha, ref: project.pipeline_status.ref)
%span.icon-wrapper.pipeline-status
- = render 'ci/status/icon', status: project.commit.last_pipeline.detailed_status(current_user), tooltip_placement: 'top', path: pipeline_path
+ = render 'ci/status/icon', status: project.last_pipeline.detailed_status(current_user), tooltip_placement: 'top', path: pipeline_path
- if project.archived
%span.d-flex.icon-wrapper.badge.badge-warning archived
diff --git a/app/views/shared/snippets/_header.html.haml b/app/views/shared/snippets/_header.html.haml
index 69481293f90..8d94a87a775 100644
--- a/app/views/shared/snippets/_header.html.haml
+++ b/app/views/shared/snippets/_header.html.haml
@@ -46,5 +46,5 @@
%strong.embed-toggle-list-item= _("Share")
%input.js-snippet-url-area.snippet-embed-input.form-control{ type: "text", autocomplete: 'off', value: snippet_embed }
.input-group-append
- = clipboard_button(title: s_('Copy to clipboard'), class: 'js-clipboard-btn snippet-clipboard-btn btn btn-default', target: '.js-snippet-url-area')
+ = clipboard_button(title: _('Copy'), class: 'js-clipboard-btn snippet-clipboard-btn btn btn-default', target: '.js-snippet-url-area')
.clearfix
diff --git a/app/workers/admin_email_worker.rb b/app/workers/admin_email_worker.rb
index f69e74b2674..be05d2a6752 100644
--- a/app/workers/admin_email_worker.rb
+++ b/app/workers/admin_email_worker.rb
@@ -4,6 +4,8 @@ class AdminEmailWorker
include ApplicationWorker
include CronjobQueue
+ feature_category_not_owned!
+
def perform
send_repository_check_mail if Gitlab::CurrentSettings.repository_checks_enabled
end
diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml
index a33afd436b0..b161cc65602 100644
--- a/app/workers/all_queues.yml
+++ b/app/workers/all_queues.yml
@@ -119,6 +119,8 @@
- container_repository:delete_container_repository
- container_repository:cleanup_container_repository
+- notifications:new_release
+
- default
- mailers # ActionMailer::DeliveryJob.queue_name
@@ -173,3 +175,4 @@
- delete_stored_files
- import_issues_csv
- project_daily_statistics
+- create_evidence
diff --git a/app/workers/authorized_projects_worker.rb b/app/workers/authorized_projects_worker.rb
index c9ddeb08613..577c439f4a2 100644
--- a/app/workers/authorized_projects_worker.rb
+++ b/app/workers/authorized_projects_worker.rb
@@ -4,6 +4,8 @@ class AuthorizedProjectsWorker
include ApplicationWorker
prepend WaitableWorker
+ feature_category :authentication_and_authorization
+
# This is a workaround for a Ruby 2.3.7 bug. rspec-mocks cannot restore the
# visibility of prepended modules. See https://github.com/rspec/rspec-mocks/issues/1231
# for more details.
diff --git a/app/workers/auto_merge_process_worker.rb b/app/workers/auto_merge_process_worker.rb
index cd81cdbc60c..e4dccb891ce 100644
--- a/app/workers/auto_merge_process_worker.rb
+++ b/app/workers/auto_merge_process_worker.rb
@@ -4,6 +4,7 @@ class AutoMergeProcessWorker
include ApplicationWorker
queue_namespace :auto_merge
+ feature_category :continuous_delivery
def perform(merge_request_id)
MergeRequest.find_by_id(merge_request_id).try do |merge_request|
diff --git a/app/workers/background_migration_worker.rb b/app/workers/background_migration_worker.rb
index b83412b5e6e..20e2cdd7f96 100644
--- a/app/workers/background_migration_worker.rb
+++ b/app/workers/background_migration_worker.rb
@@ -3,6 +3,8 @@
class BackgroundMigrationWorker
include ApplicationWorker
+ feature_category_not_owned!
+
# The minimum amount of time between processing two jobs of the same migration
# class.
#
diff --git a/app/workers/build_hooks_worker.rb b/app/workers/build_hooks_worker.rb
index b0c3676714c..15b31acf3e5 100644
--- a/app/workers/build_hooks_worker.rb
+++ b/app/workers/build_hooks_worker.rb
@@ -5,6 +5,7 @@ class BuildHooksWorker
include PipelineQueue
queue_namespace :pipeline_hooks
+ feature_category :continuous_integration
# rubocop: disable CodeReuse/ActiveRecord
def perform(build_id)
diff --git a/app/workers/build_queue_worker.rb b/app/workers/build_queue_worker.rb
index 67d5b0f5f5b..6584fba4c65 100644
--- a/app/workers/build_queue_worker.rb
+++ b/app/workers/build_queue_worker.rb
@@ -5,6 +5,7 @@ class BuildQueueWorker
include PipelineQueue
queue_namespace :pipeline_processing
+ feature_category :continuous_integration
# rubocop: disable CodeReuse/ActiveRecord
def perform(build_id)
diff --git a/app/workers/chat_notification_worker.rb b/app/workers/chat_notification_worker.rb
index 25a306e94d8..3bc2edad62c 100644
--- a/app/workers/chat_notification_worker.rb
+++ b/app/workers/chat_notification_worker.rb
@@ -3,6 +3,8 @@
class ChatNotificationWorker
include ApplicationWorker
+ feature_category :chatops
+
RESCHEDULE_INTERVAL = 2.seconds
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/ci/archive_traces_cron_worker.rb b/app/workers/ci/archive_traces_cron_worker.rb
index ad7a29719ac..74f389175b9 100644
--- a/app/workers/ci/archive_traces_cron_worker.rb
+++ b/app/workers/ci/archive_traces_cron_worker.rb
@@ -5,6 +5,8 @@ module Ci
include ApplicationWorker
include CronjobQueue
+ feature_category :continuous_integration
+
# rubocop: disable CodeReuse/ActiveRecord
def perform
# Archive stale live traces which still resides in redis or database
diff --git a/app/workers/ci/build_prepare_worker.rb b/app/workers/ci/build_prepare_worker.rb
index 1a35a74ae53..20208c18d03 100644
--- a/app/workers/ci/build_prepare_worker.rb
+++ b/app/workers/ci/build_prepare_worker.rb
@@ -6,6 +6,7 @@ module Ci
include PipelineQueue
queue_namespace :pipeline_processing
+ feature_category :continuous_integration
def perform(build_id)
Ci::Build.find_by_id(build_id).try do |build|
diff --git a/app/workers/ci/build_schedule_worker.rb b/app/workers/ci/build_schedule_worker.rb
index da219adffc6..f22ec4c7810 100644
--- a/app/workers/ci/build_schedule_worker.rb
+++ b/app/workers/ci/build_schedule_worker.rb
@@ -6,6 +6,7 @@ module Ci
include PipelineQueue
queue_namespace :pipeline_processing
+ feature_category :continuous_integration
def perform(build_id)
::Ci::Build.find_by_id(build_id).try do |build|
diff --git a/app/workers/cleanup_container_repository_worker.rb b/app/workers/cleanup_container_repository_worker.rb
index 0331fc7b01c..83fb3e58d29 100644
--- a/app/workers/cleanup_container_repository_worker.rb
+++ b/app/workers/cleanup_container_repository_worker.rb
@@ -4,6 +4,7 @@ class CleanupContainerRepositoryWorker
include ApplicationWorker
queue_namespace :container_repository
+ feature_category :container_registry
attr_reader :container_repository, :current_user
diff --git a/app/workers/concerns/application_worker.rb b/app/workers/concerns/application_worker.rb
index 2b36ccb8304..62748808ff1 100644
--- a/app/workers/concerns/application_worker.rb
+++ b/app/workers/concerns/application_worker.rb
@@ -8,6 +8,7 @@ module ApplicationWorker
extend ActiveSupport::Concern
include Sidekiq::Worker # rubocop:disable Cop/IncludeSidekiqWorker
+ include WorkerAttributes
included do
set_queue
diff --git a/app/workers/concerns/auto_devops_queue.rb b/app/workers/concerns/auto_devops_queue.rb
index aba928ccaab..61e3c1544bd 100644
--- a/app/workers/concerns/auto_devops_queue.rb
+++ b/app/workers/concerns/auto_devops_queue.rb
@@ -5,5 +5,6 @@ module AutoDevopsQueue
included do
queue_namespace :auto_devops
+ feature_category :auto_devops
end
end
diff --git a/app/workers/concerns/chaos_queue.rb b/app/workers/concerns/chaos_queue.rb
index e406509d12d..c5db10491f2 100644
--- a/app/workers/concerns/chaos_queue.rb
+++ b/app/workers/concerns/chaos_queue.rb
@@ -5,5 +5,6 @@ module ChaosQueue
included do
queue_namespace :chaos
+ feature_category :chaos_engineering
end
end
diff --git a/app/workers/concerns/cluster_queue.rb b/app/workers/concerns/cluster_queue.rb
index e44b40c36c9..180b86b0124 100644
--- a/app/workers/concerns/cluster_queue.rb
+++ b/app/workers/concerns/cluster_queue.rb
@@ -8,5 +8,6 @@ module ClusterQueue
included do
queue_namespace :gcp_cluster
+ feature_category :kubernetes_configuration
end
end
diff --git a/app/workers/concerns/gitlab/github_import/object_importer.rb b/app/workers/concerns/gitlab/github_import/object_importer.rb
index eeeff6e93a0..b856a9329dd 100644
--- a/app/workers/concerns/gitlab/github_import/object_importer.rb
+++ b/app/workers/concerns/gitlab/github_import/object_importer.rb
@@ -12,6 +12,8 @@ module Gitlab
include GithubImport::Queue
include ReschedulingMethods
include NotifyUponDeath
+
+ feature_category :importers
end
# project - An instance of `Project` to import the data into.
diff --git a/app/workers/concerns/gitlab/github_import/queue.rb b/app/workers/concerns/gitlab/github_import/queue.rb
index 59b621f16ab..7cc23dd7c0b 100644
--- a/app/workers/concerns/gitlab/github_import/queue.rb
+++ b/app/workers/concerns/gitlab/github_import/queue.rb
@@ -7,6 +7,7 @@ module Gitlab
included do
queue_namespace :github_importer
+ feature_category :importers
# If a job produces an error it may block a stage from advancing
# forever. To prevent this from happening we prevent jobs from going to
diff --git a/app/workers/concerns/object_pool_queue.rb b/app/workers/concerns/object_pool_queue.rb
index 5b648df9c72..c2e84470fba 100644
--- a/app/workers/concerns/object_pool_queue.rb
+++ b/app/workers/concerns/object_pool_queue.rb
@@ -8,5 +8,6 @@ module ObjectPoolQueue
included do
queue_namespace :object_pool
+ feature_category :gitaly
end
end
diff --git a/app/workers/concerns/pipeline_background_queue.rb b/app/workers/concerns/pipeline_background_queue.rb
index bbb8ad0c982..0a23780b807 100644
--- a/app/workers/concerns/pipeline_background_queue.rb
+++ b/app/workers/concerns/pipeline_background_queue.rb
@@ -8,5 +8,6 @@ module PipelineBackgroundQueue
included do
queue_namespace :pipeline_background
+ feature_category :continuous_integration
end
end
diff --git a/app/workers/concerns/pipeline_queue.rb b/app/workers/concerns/pipeline_queue.rb
index 3aaed4669e5..27cbf6eb61c 100644
--- a/app/workers/concerns/pipeline_queue.rb
+++ b/app/workers/concerns/pipeline_queue.rb
@@ -8,5 +8,6 @@ module PipelineQueue
included do
queue_namespace :pipeline_default
+ feature_category :continuous_integration
end
end
diff --git a/app/workers/concerns/repository_check_queue.rb b/app/workers/concerns/repository_check_queue.rb
index 216d67e5dbc..76f6e1c2e91 100644
--- a/app/workers/concerns/repository_check_queue.rb
+++ b/app/workers/concerns/repository_check_queue.rb
@@ -6,7 +6,7 @@ module RepositoryCheckQueue
included do
queue_namespace :repository_check
-
sidekiq_options retry: false
+ feature_category :source_code_management
end
end
diff --git a/app/workers/concerns/todos_destroyer_queue.rb b/app/workers/concerns/todos_destroyer_queue.rb
index 8e2b1d30579..1bbccbfb1f9 100644
--- a/app/workers/concerns/todos_destroyer_queue.rb
+++ b/app/workers/concerns/todos_destroyer_queue.rb
@@ -8,5 +8,6 @@ module TodosDestroyerQueue
included do
queue_namespace :todos_destroyer
+ feature_category :issue_tracking
end
end
diff --git a/app/workers/create_evidence_worker.rb b/app/workers/create_evidence_worker.rb
new file mode 100644
index 00000000000..027dbd2f101
--- /dev/null
+++ b/app/workers/create_evidence_worker.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class CreateEvidenceWorker
+ include ApplicationWorker
+
+ feature_category :release_governance
+
+ def perform(release_id)
+ release = Release.find_by_id(release_id)
+ return unless release
+
+ Evidence.create!(release: release)
+ end
+end
diff --git a/app/workers/create_gpg_signature_worker.rb b/app/workers/create_gpg_signature_worker.rb
index e3fb5d479ae..fc36a2adccd 100644
--- a/app/workers/create_gpg_signature_worker.rb
+++ b/app/workers/create_gpg_signature_worker.rb
@@ -3,6 +3,8 @@
class CreateGpgSignatureWorker
include ApplicationWorker
+ feature_category :source_code_management
+
# rubocop: disable CodeReuse/ActiveRecord
def perform(commit_shas, project_id)
# Older versions of Git::BranchPushService may push a single commit ID on
diff --git a/app/workers/create_note_diff_file_worker.rb b/app/workers/create_note_diff_file_worker.rb
index 0850250f7e3..ca200bd17b4 100644
--- a/app/workers/create_note_diff_file_worker.rb
+++ b/app/workers/create_note_diff_file_worker.rb
@@ -3,6 +3,8 @@
class CreateNoteDiffFileWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(diff_note_id)
diff_note = DiffNote.find(diff_note_id)
diff --git a/app/workers/create_pipeline_worker.rb b/app/workers/create_pipeline_worker.rb
index 037b4a57d4b..70412ffd095 100644
--- a/app/workers/create_pipeline_worker.rb
+++ b/app/workers/create_pipeline_worker.rb
@@ -5,6 +5,7 @@ class CreatePipelineWorker
include PipelineQueue
queue_namespace :pipeline_creation
+ feature_category :continuous_integration
def perform(project_id, user_id, ref, source, params = {})
project = Project.find(project_id)
diff --git a/app/workers/delete_container_repository_worker.rb b/app/workers/delete_container_repository_worker.rb
index 42e66513ff1..e70b4fb0a58 100644
--- a/app/workers/delete_container_repository_worker.rb
+++ b/app/workers/delete_container_repository_worker.rb
@@ -5,6 +5,7 @@ class DeleteContainerRepositoryWorker
include ExclusiveLeaseGuard
queue_namespace :container_repository
+ feature_category :container_registry
LEASE_TIMEOUT = 1.hour
diff --git a/app/workers/delete_diff_files_worker.rb b/app/workers/delete_diff_files_worker.rb
index f518dfe871c..e0c1724f1f7 100644
--- a/app/workers/delete_diff_files_worker.rb
+++ b/app/workers/delete_diff_files_worker.rb
@@ -3,6 +3,8 @@
class DeleteDiffFilesWorker
include ApplicationWorker
+ feature_category :source_code_management
+
# rubocop: disable CodeReuse/ActiveRecord
def perform(merge_request_diff_id)
merge_request_diff = MergeRequestDiff.find(merge_request_diff_id)
diff --git a/app/workers/delete_merged_branches_worker.rb b/app/workers/delete_merged_branches_worker.rb
index 017d7fd1cb0..44b3db30d0d 100644
--- a/app/workers/delete_merged_branches_worker.rb
+++ b/app/workers/delete_merged_branches_worker.rb
@@ -3,6 +3,8 @@
class DeleteMergedBranchesWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(project_id, user_id)
begin
project = Project.find(project_id)
diff --git a/app/workers/delete_stored_files_worker.rb b/app/workers/delete_stored_files_worker.rb
index ff7931849d8..8a693a64055 100644
--- a/app/workers/delete_stored_files_worker.rb
+++ b/app/workers/delete_stored_files_worker.rb
@@ -3,6 +3,8 @@
class DeleteStoredFilesWorker
include ApplicationWorker
+ feature_category_not_owned!
+
def perform(class_name, keys)
klass = begin
class_name.constantize
diff --git a/app/workers/delete_user_worker.rb b/app/workers/delete_user_worker.rb
index efa8794b214..0e49e787d8a 100644
--- a/app/workers/delete_user_worker.rb
+++ b/app/workers/delete_user_worker.rb
@@ -3,6 +3,8 @@
class DeleteUserWorker
include ApplicationWorker
+ feature_category :authentication_and_authorization
+
def perform(current_user_id, delete_user_id, options = {})
delete_user = User.find(delete_user_id)
current_user = User.find(current_user_id)
diff --git a/app/workers/deployments/finished_worker.rb b/app/workers/deployments/finished_worker.rb
index c9d448d5d18..79a1caccc92 100644
--- a/app/workers/deployments/finished_worker.rb
+++ b/app/workers/deployments/finished_worker.rb
@@ -5,6 +5,7 @@ module Deployments
include ApplicationWorker
queue_namespace :deployment
+ feature_category :continuous_delivery
def perform(deployment_id)
Deployment.find_by_id(deployment_id).try(:execute_hooks)
diff --git a/app/workers/deployments/success_worker.rb b/app/workers/deployments/success_worker.rb
index da517f3fb26..f6520307186 100644
--- a/app/workers/deployments/success_worker.rb
+++ b/app/workers/deployments/success_worker.rb
@@ -5,12 +5,13 @@ module Deployments
include ApplicationWorker
queue_namespace :deployment
+ feature_category :continuous_delivery
def perform(deployment_id)
Deployment.find_by_id(deployment_id).try do |deployment|
break unless deployment.success?
- UpdateDeploymentService.new(deployment).execute
+ Deployments::AfterCreateService.new(deployment).execute
end
end
end
diff --git a/app/workers/detect_repository_languages_worker.rb b/app/workers/detect_repository_languages_worker.rb
index 838c3be78f0..954d0f9336b 100644
--- a/app/workers/detect_repository_languages_worker.rb
+++ b/app/workers/detect_repository_languages_worker.rb
@@ -6,6 +6,7 @@ class DetectRepositoryLanguagesWorker
include ExclusiveLeaseGuard
sidekiq_options retry: 1
+ feature_category :source_code_management
LEASE_TIMEOUT = 300
diff --git a/app/workers/email_receiver_worker.rb b/app/workers/email_receiver_worker.rb
index e70bf17d5a9..c82728be329 100644
--- a/app/workers/email_receiver_worker.rb
+++ b/app/workers/email_receiver_worker.rb
@@ -3,6 +3,8 @@
class EmailReceiverWorker
include ApplicationWorker
+ feature_category :issue_tracking
+
def perform(raw)
return unless Gitlab::IncomingEmail.enabled?
diff --git a/app/workers/emails_on_push_worker.rb b/app/workers/emails_on_push_worker.rb
index ed3e354e4c2..2231c91a720 100644
--- a/app/workers/emails_on_push_worker.rb
+++ b/app/workers/emails_on_push_worker.rb
@@ -5,6 +5,8 @@ class EmailsOnPushWorker
attr_reader :email, :skip_premailer
+ feature_category :source_code_management
+
def perform(project_id, recipients, push_data, options = {})
options.symbolize_keys!
options.reverse_merge!(
diff --git a/app/workers/expire_build_artifacts_worker.rb b/app/workers/expire_build_artifacts_worker.rb
index 6f0e0fd33f7..9545227fa31 100644
--- a/app/workers/expire_build_artifacts_worker.rb
+++ b/app/workers/expire_build_artifacts_worker.rb
@@ -4,6 +4,8 @@ class ExpireBuildArtifactsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :continuous_integration
+
def perform
if Feature.enabled?(:ci_new_expire_job_artifacts_service, default_enabled: true)
perform_efficient_artifacts_removal
diff --git a/app/workers/expire_build_instance_artifacts_worker.rb b/app/workers/expire_build_instance_artifacts_worker.rb
index 71e61dcb878..db5240d5c8e 100644
--- a/app/workers/expire_build_instance_artifacts_worker.rb
+++ b/app/workers/expire_build_instance_artifacts_worker.rb
@@ -3,6 +3,8 @@
class ExpireBuildInstanceArtifactsWorker
include ApplicationWorker
+ feature_category :continuous_integration
+
# rubocop: disable CodeReuse/ActiveRecord
def perform(build_id)
build = Ci::Build
diff --git a/app/workers/git_garbage_collect_worker.rb b/app/workers/git_garbage_collect_worker.rb
index 5499e12e49b..ad119917774 100644
--- a/app/workers/git_garbage_collect_worker.rb
+++ b/app/workers/git_garbage_collect_worker.rb
@@ -4,6 +4,7 @@ class GitGarbageCollectWorker
include ApplicationWorker
sidekiq_options retry: false
+ feature_category :gitaly
# Timeout set to 24h
LEASE_TIMEOUT = 86400
diff --git a/app/workers/gitlab/github_import/advance_stage_worker.rb b/app/workers/gitlab/github_import/advance_stage_worker.rb
index 0b3437a8a33..44e69e48694 100644
--- a/app/workers/gitlab/github_import/advance_stage_worker.rb
+++ b/app/workers/gitlab/github_import/advance_stage_worker.rb
@@ -10,6 +10,7 @@ module Gitlab
include ApplicationWorker
sidekiq_options dead: false
+ feature_category :importers
INTERVAL = 30.seconds.to_i
diff --git a/app/workers/gitlab/github_import/stage/finish_import_worker.rb b/app/workers/gitlab/github_import/stage/finish_import_worker.rb
index a779e631516..ee64f62637e 100644
--- a/app/workers/gitlab/github_import/stage/finish_import_worker.rb
+++ b/app/workers/gitlab/github_import/stage/finish_import_worker.rb
@@ -8,6 +8,10 @@ module Gitlab
include GithubImport::Queue
include StageMethods
+ # technical debt: https://gitlab.com/gitlab-org/gitlab/issues/33991
+ sidekiq_options memory_killer_memory_growth_kb: ENV.fetch('MEMORY_KILLER_FINISH_IMPORT_WORKER_MEMORY_GROWTH_KB', 50).to_i
+ sidekiq_options memory_killer_max_memory_growth_kb: ENV.fetch('MEMORY_KILLER_FINISH_IMPORT_WORKER_MAX_MEMORY_GROWTH_KB', 200_000).to_i
+
# project - An instance of Project.
def import(_, project)
project.after_import
diff --git a/app/workers/gitlab/github_import/stage/import_repository_worker.rb b/app/workers/gitlab/github_import/stage/import_repository_worker.rb
index 4d16cef1130..b5e30470070 100644
--- a/app/workers/gitlab/github_import/stage/import_repository_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_repository_worker.rb
@@ -8,6 +8,10 @@ module Gitlab
include GithubImport::Queue
include StageMethods
+ # technical debt: https://gitlab.com/gitlab-org/gitlab/issues/33991
+ sidekiq_options memory_killer_memory_growth_kb: ENV.fetch('MEMORY_KILLER_IMPORT_REPOSITORY_WORKER_MEMORY_GROWTH_KB', 50).to_i
+ sidekiq_options memory_killer_max_memory_growth_kb: ENV.fetch('MEMORY_KILLER_IMPORT_REPOSITORY_WORKER_MAX_MEMORY_GROWTH_KB', 300_000).to_i
+
# client - An instance of Gitlab::GithubImport::Client.
# project - An instance of Project.
def import(client, project)
diff --git a/app/workers/gitlab_shell_worker.rb b/app/workers/gitlab_shell_worker.rb
index 0e4d40acc5c..9766331cf4b 100644
--- a/app/workers/gitlab_shell_worker.rb
+++ b/app/workers/gitlab_shell_worker.rb
@@ -4,6 +4,8 @@ class GitlabShellWorker
include ApplicationWorker
include Gitlab::ShellAdapter
+ feature_category :source_code_management
+
def perform(action, *arg)
gitlab_shell.__send__(action, *arg) # rubocop:disable GitlabSecurity/PublicSend
end
diff --git a/app/workers/gitlab_usage_ping_worker.rb b/app/workers/gitlab_usage_ping_worker.rb
index a5e22f88a3b..ad8302a844a 100644
--- a/app/workers/gitlab_usage_ping_worker.rb
+++ b/app/workers/gitlab_usage_ping_worker.rb
@@ -6,6 +6,8 @@ class GitlabUsagePingWorker
include ApplicationWorker
include CronjobQueue
+ feature_category_not_owned!
+
# Retry for up to approximately three hours then give up.
sidekiq_options retry: 10, dead: false
diff --git a/app/workers/group_destroy_worker.rb b/app/workers/group_destroy_worker.rb
index b4a3ddcae51..553fd359baf 100644
--- a/app/workers/group_destroy_worker.rb
+++ b/app/workers/group_destroy_worker.rb
@@ -4,6 +4,8 @@ class GroupDestroyWorker
include ApplicationWorker
include ExceptionBacktrace
+ feature_category :groups
+
def perform(group_id, user_id)
begin
group = Group.find(group_id)
diff --git a/app/workers/hashed_storage/base_worker.rb b/app/workers/hashed_storage/base_worker.rb
index 237e278c537..1ab2108f6bb 100644
--- a/app/workers/hashed_storage/base_worker.rb
+++ b/app/workers/hashed_storage/base_worker.rb
@@ -3,6 +3,9 @@
module HashedStorage
class BaseWorker
include ExclusiveLeaseGuard
+ include WorkerAttributes
+
+ feature_category :source_code_management
LEASE_TIMEOUT = 30.seconds.to_i
LEASE_KEY_SEGMENT = 'project_migrate_hashed_storage_worker'
diff --git a/app/workers/hashed_storage/migrator_worker.rb b/app/workers/hashed_storage/migrator_worker.rb
index 49e347d4060..72a3faec5f4 100644
--- a/app/workers/hashed_storage/migrator_worker.rb
+++ b/app/workers/hashed_storage/migrator_worker.rb
@@ -5,6 +5,7 @@ module HashedStorage
include ApplicationWorker
queue_namespace :hashed_storage
+ feature_category :source_code_management
# @param [Integer] start initial ID of the batch
# @param [Integer] finish last ID of the batch
diff --git a/app/workers/hashed_storage/rollbacker_worker.rb b/app/workers/hashed_storage/rollbacker_worker.rb
index a4da8443787..8babdcfb96d 100644
--- a/app/workers/hashed_storage/rollbacker_worker.rb
+++ b/app/workers/hashed_storage/rollbacker_worker.rb
@@ -5,6 +5,7 @@ module HashedStorage
include ApplicationWorker
queue_namespace :hashed_storage
+ feature_category :source_code_management
# @param [Integer] start initial ID of the batch
# @param [Integer] finish last ID of the batch
diff --git a/app/workers/import_export_project_cleanup_worker.rb b/app/workers/import_export_project_cleanup_worker.rb
index da3debdeede..07c29d40b54 100644
--- a/app/workers/import_export_project_cleanup_worker.rb
+++ b/app/workers/import_export_project_cleanup_worker.rb
@@ -4,6 +4,8 @@ class ImportExportProjectCleanupWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :importers
+
def perform
ImportExportCleanUpService.new.execute
end
diff --git a/app/workers/import_issues_csv_worker.rb b/app/workers/import_issues_csv_worker.rb
index d44fdfec8ae..d9834320318 100644
--- a/app/workers/import_issues_csv_worker.rb
+++ b/app/workers/import_issues_csv_worker.rb
@@ -3,6 +3,8 @@
class ImportIssuesCsvWorker
include ApplicationWorker
+ feature_category :issue_tracking
+
sidekiq_retries_exhausted do |job|
Upload.find(job['args'][2]).destroy
end
@@ -12,7 +14,7 @@ class ImportIssuesCsvWorker
@project = Project.find(project_id)
@upload = Upload.find(upload_id)
- importer = Issues::ImportCsvService.new(@user, @project, @upload.build_uploader)
+ importer = Issues::ImportCsvService.new(@user, @project, @upload.retrieve_uploader)
importer.execute
@upload.destroy
diff --git a/app/workers/invalid_gpg_signature_update_worker.rb b/app/workers/invalid_gpg_signature_update_worker.rb
index fc8a731b427..573efdf9fb1 100644
--- a/app/workers/invalid_gpg_signature_update_worker.rb
+++ b/app/workers/invalid_gpg_signature_update_worker.rb
@@ -3,6 +3,8 @@
class InvalidGpgSignatureUpdateWorker
include ApplicationWorker
+ feature_category :source_code_management
+
# rubocop: disable CodeReuse/ActiveRecord
def perform(gpg_key_id)
gpg_key = GpgKey.find_by(id: gpg_key_id)
diff --git a/app/workers/irker_worker.rb b/app/workers/irker_worker.rb
index 29631c6b7ac..a133ed6ed1b 100644
--- a/app/workers/irker_worker.rb
+++ b/app/workers/irker_worker.rb
@@ -6,6 +6,8 @@ require 'socket'
class IrkerWorker
include ApplicationWorker
+ feature_category :integrations
+
def perform(project_id, chans, colors, push_data, settings)
project = Project.find(project_id)
diff --git a/app/workers/issue_due_scheduler_worker.rb b/app/workers/issue_due_scheduler_worker.rb
index 476cba47ad7..d4d47659ef0 100644
--- a/app/workers/issue_due_scheduler_worker.rb
+++ b/app/workers/issue_due_scheduler_worker.rb
@@ -4,6 +4,8 @@ class IssueDueSchedulerWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :issue_tracking
+
# rubocop: disable CodeReuse/ActiveRecord
def perform
project_ids = Issue.opened.due_tomorrow.group(:project_id).pluck(:project_id).map { |id| [id] }
diff --git a/app/workers/mail_scheduler/issue_due_worker.rb b/app/workers/mail_scheduler/issue_due_worker.rb
index 1e1dde1e829..6df816de71f 100644
--- a/app/workers/mail_scheduler/issue_due_worker.rb
+++ b/app/workers/mail_scheduler/issue_due_worker.rb
@@ -5,6 +5,8 @@ module MailScheduler
include ApplicationWorker
include MailSchedulerQueue
+ feature_category :issue_tracking
+
# rubocop: disable CodeReuse/ActiveRecord
def perform(project_id)
Issue.opened.due_tomorrow.in_projects(project_id).preload(:project).find_each do |issue|
diff --git a/app/workers/mail_scheduler/notification_service_worker.rb b/app/workers/mail_scheduler/notification_service_worker.rb
index 421fbf04e28..0d06dab3b2e 100644
--- a/app/workers/mail_scheduler/notification_service_worker.rb
+++ b/app/workers/mail_scheduler/notification_service_worker.rb
@@ -7,6 +7,8 @@ module MailScheduler
include ApplicationWorker
include MailSchedulerQueue
+ feature_category :issue_tracking
+
def perform(meth, *args)
check_arguments!(args)
diff --git a/app/workers/merge_worker.rb b/app/workers/merge_worker.rb
index ee864b733cd..70b909afea8 100644
--- a/app/workers/merge_worker.rb
+++ b/app/workers/merge_worker.rb
@@ -3,6 +3,8 @@
class MergeWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(merge_request_id, current_user_id, params)
params = params.with_indifferent_access
current_user = User.find(current_user_id)
diff --git a/app/workers/migrate_external_diffs_worker.rb b/app/workers/migrate_external_diffs_worker.rb
index debac97af2c..d248e2b5500 100644
--- a/app/workers/migrate_external_diffs_worker.rb
+++ b/app/workers/migrate_external_diffs_worker.rb
@@ -1,8 +1,10 @@
-# frozen_string_literal: false
+# frozen_string_literal: true
class MigrateExternalDiffsWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(merge_request_diff_id)
diff = MergeRequestDiff.find_by_id(merge_request_diff_id)
return unless diff
diff --git a/app/workers/namespaceless_project_destroy_worker.rb b/app/workers/namespaceless_project_destroy_worker.rb
index f6e98746055..113afc268f2 100644
--- a/app/workers/namespaceless_project_destroy_worker.rb
+++ b/app/workers/namespaceless_project_destroy_worker.rb
@@ -10,6 +10,8 @@ class NamespacelessProjectDestroyWorker
include ApplicationWorker
include ExceptionBacktrace
+ feature_category :authentication_and_authorization
+
def perform(project_id)
begin
project = Project.unscoped.find(project_id)
@@ -31,6 +33,6 @@ class NamespacelessProjectDestroyWorker
def unlink_fork(project)
merge_requests = project.forked_from_project.merge_requests.opened.from_project(project)
- merge_requests.update_all(state: 'closed')
+ merge_requests.update_all(state_id: MergeRequest.available_states[:closed])
end
end
diff --git a/app/workers/namespaces/prune_aggregation_schedules_worker.rb b/app/workers/namespaces/prune_aggregation_schedules_worker.rb
index 4e40feee702..16259ffbfa6 100644
--- a/app/workers/namespaces/prune_aggregation_schedules_worker.rb
+++ b/app/workers/namespaces/prune_aggregation_schedules_worker.rb
@@ -5,6 +5,8 @@ module Namespaces
include ApplicationWorker
include CronjobQueue
+ feature_category :source_code_management
+
# Worker to prune pending rows on Namespace::AggregationSchedule
# It's scheduled to run once a day at 1:05am.
def perform
diff --git a/app/workers/namespaces/root_statistics_worker.rb b/app/workers/namespaces/root_statistics_worker.rb
index 0c1ca5eb975..fd772c8cff6 100644
--- a/app/workers/namespaces/root_statistics_worker.rb
+++ b/app/workers/namespaces/root_statistics_worker.rb
@@ -5,6 +5,7 @@ module Namespaces
include ApplicationWorker
queue_namespace :update_namespace_statistics
+ feature_category :source_code_management
def perform(namespace_id)
namespace = Namespace.find(namespace_id)
diff --git a/app/workers/namespaces/schedule_aggregation_worker.rb b/app/workers/namespaces/schedule_aggregation_worker.rb
index b7d580220d6..87e135fbf21 100644
--- a/app/workers/namespaces/schedule_aggregation_worker.rb
+++ b/app/workers/namespaces/schedule_aggregation_worker.rb
@@ -5,6 +5,7 @@ module Namespaces
include ApplicationWorker
queue_namespace :update_namespace_statistics
+ feature_category :source_code_management
def perform(namespace_id)
return unless aggregation_schedules_table_exists?
diff --git a/app/workers/new_issue_worker.rb b/app/workers/new_issue_worker.rb
index 85b53973f56..1b0fec597e7 100644
--- a/app/workers/new_issue_worker.rb
+++ b/app/workers/new_issue_worker.rb
@@ -4,6 +4,8 @@ class NewIssueWorker
include ApplicationWorker
include NewIssuable
+ feature_category :issue_tracking
+
def perform(issue_id, user_id)
return unless objects_found?(issue_id, user_id)
diff --git a/app/workers/new_merge_request_worker.rb b/app/workers/new_merge_request_worker.rb
index fa48c1b29a8..0a5b2f86331 100644
--- a/app/workers/new_merge_request_worker.rb
+++ b/app/workers/new_merge_request_worker.rb
@@ -4,6 +4,8 @@ class NewMergeRequestWorker
include ApplicationWorker
include NewIssuable
+ feature_category :source_code_management
+
def perform(merge_request_id, user_id)
return unless objects_found?(merge_request_id, user_id)
diff --git a/app/workers/new_note_worker.rb b/app/workers/new_note_worker.rb
index 7648af3a8b9..d0d2a563738 100644
--- a/app/workers/new_note_worker.rb
+++ b/app/workers/new_note_worker.rb
@@ -3,6 +3,8 @@
class NewNoteWorker
include ApplicationWorker
+ feature_category :issue_tracking
+
# Keep extra parameter to preserve backwards compatibility with
# old `NewNoteWorker` jobs (can remove later)
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/new_release_worker.rb b/app/workers/new_release_worker.rb
new file mode 100644
index 00000000000..28d2517238e
--- /dev/null
+++ b/app/workers/new_release_worker.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class NewReleaseWorker
+ include ApplicationWorker
+
+ queue_namespace :notifications
+ feature_category :release_orchestration
+
+ def perform(release_id)
+ release = Release.with_project_and_namespace.find_by_id(release_id)
+ return unless release
+
+ NotificationService.new.send_new_release_notifications(release)
+ end
+end
diff --git a/app/workers/object_storage/background_move_worker.rb b/app/workers/object_storage/background_move_worker.rb
index 8dff65e46e3..55f8e1c3ede 100644
--- a/app/workers/object_storage/background_move_worker.rb
+++ b/app/workers/object_storage/background_move_worker.rb
@@ -6,6 +6,7 @@ module ObjectStorage
include ObjectStorageQueue
sidekiq_options retry: 5
+ feature_category_not_owned!
def perform(uploader_class_name, subject_class_name, file_field, subject_id)
uploader_class = uploader_class_name.constantize
@@ -22,7 +23,7 @@ module ObjectStorage
def build_uploader(subject, mount_point)
case subject
- when Upload then subject.build_uploader(mount_point)
+ when Upload then subject.retrieve_uploader(mount_point)
else
subject.send(mount_point) # rubocop:disable GitlabSecurity/PublicSend
end
diff --git a/app/workers/object_storage/migrate_uploads_worker.rb b/app/workers/object_storage/migrate_uploads_worker.rb
index 55ac7cd9b3c..01e6fdb2d3e 100644
--- a/app/workers/object_storage/migrate_uploads_worker.rb
+++ b/app/workers/object_storage/migrate_uploads_worker.rb
@@ -5,6 +5,8 @@ module ObjectStorage
include ApplicationWorker
include ObjectStorageQueue
+ feature_category_not_owned!
+
SanityCheckError = Class.new(StandardError)
class MigrationResult
@@ -119,7 +121,7 @@ module ObjectStorage
end
def build_uploaders(uploads)
- uploads.map { |upload| upload.build_uploader(@mounted_as) }
+ uploads.map { |upload| upload.retrieve_uploader(@mounted_as) }
end
def migrate(uploads)
diff --git a/app/workers/pages_domain_removal_cron_worker.rb b/app/workers/pages_domain_removal_cron_worker.rb
index 79f38e1b89f..25e747c78d0 100644
--- a/app/workers/pages_domain_removal_cron_worker.rb
+++ b/app/workers/pages_domain_removal_cron_worker.rb
@@ -4,6 +4,8 @@ class PagesDomainRemovalCronWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :pages
+
def perform
PagesDomain.for_removal.find_each do |domain|
domain.destroy!
diff --git a/app/workers/pages_domain_ssl_renewal_cron_worker.rb b/app/workers/pages_domain_ssl_renewal_cron_worker.rb
index e5dde07a648..f7a243e9b3b 100644
--- a/app/workers/pages_domain_ssl_renewal_cron_worker.rb
+++ b/app/workers/pages_domain_ssl_renewal_cron_worker.rb
@@ -4,6 +4,8 @@ class PagesDomainSslRenewalCronWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :pages
+
def perform
return unless ::Gitlab::LetsEncrypt.enabled?
diff --git a/app/workers/pages_domain_ssl_renewal_worker.rb b/app/workers/pages_domain_ssl_renewal_worker.rb
index 87fd8059946..4db7d22ef7e 100644
--- a/app/workers/pages_domain_ssl_renewal_worker.rb
+++ b/app/workers/pages_domain_ssl_renewal_worker.rb
@@ -3,6 +3,8 @@
class PagesDomainSslRenewalWorker
include ApplicationWorker
+ feature_category :pages
+
def perform(domain_id)
domain = PagesDomain.find_by_id(domain_id)
return unless domain&.enabled?
diff --git a/app/workers/pages_domain_verification_cron_worker.rb b/app/workers/pages_domain_verification_cron_worker.rb
index 60703c83e9e..bb3a7fede9a 100644
--- a/app/workers/pages_domain_verification_cron_worker.rb
+++ b/app/workers/pages_domain_verification_cron_worker.rb
@@ -4,6 +4,8 @@ class PagesDomainVerificationCronWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :pages
+
def perform
return if Gitlab::Database.read_only?
diff --git a/app/workers/pages_domain_verification_worker.rb b/app/workers/pages_domain_verification_worker.rb
index 7817b2ee5fc..b0888036498 100644
--- a/app/workers/pages_domain_verification_worker.rb
+++ b/app/workers/pages_domain_verification_worker.rb
@@ -3,6 +3,8 @@
class PagesDomainVerificationWorker
include ApplicationWorker
+ feature_category :pages
+
# rubocop: disable CodeReuse/ActiveRecord
def perform(domain_id)
return if Gitlab::Database.read_only?
diff --git a/app/workers/pages_worker.rb b/app/workers/pages_worker.rb
index fa0dfa2ff4b..484d9053849 100644
--- a/app/workers/pages_worker.rb
+++ b/app/workers/pages_worker.rb
@@ -4,6 +4,7 @@ class PagesWorker
include ApplicationWorker
sidekiq_options retry: 3
+ feature_category :pages
def perform(action, *arg)
send(action, *arg) # rubocop:disable GitlabSecurity/PublicSend
diff --git a/app/workers/pipeline_process_worker.rb b/app/workers/pipeline_process_worker.rb
index 96524d93f8d..96f3725dbbe 100644
--- a/app/workers/pipeline_process_worker.rb
+++ b/app/workers/pipeline_process_worker.rb
@@ -5,6 +5,7 @@ class PipelineProcessWorker
include PipelineQueue
queue_namespace :pipeline_processing
+ feature_category :continuous_integration
# rubocop: disable CodeReuse/ActiveRecord
def perform(pipeline_id, build_ids = nil)
diff --git a/app/workers/pipeline_schedule_worker.rb b/app/workers/pipeline_schedule_worker.rb
index 9410fd1a786..f500ea08353 100644
--- a/app/workers/pipeline_schedule_worker.rb
+++ b/app/workers/pipeline_schedule_worker.rb
@@ -4,6 +4,8 @@ class PipelineScheduleWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :continuous_integration
+
def perform
Ci::PipelineSchedule.runnable_schedules.preloaded.find_in_batches do |schedules|
schedules.each do |schedule|
diff --git a/app/workers/plugin_worker.rb b/app/workers/plugin_worker.rb
index c293e28be4a..e708031abdf 100644
--- a/app/workers/plugin_worker.rb
+++ b/app/workers/plugin_worker.rb
@@ -4,6 +4,7 @@ class PluginWorker
include ApplicationWorker
sidekiq_options retry: false
+ feature_category :integrations
def perform(file_name, data)
success, message = Gitlab::Plugin.execute(file_name, data)
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb
index 843ba3e980e..a3bc7e5b9c9 100644
--- a/app/workers/post_receive.rb
+++ b/app/workers/post_receive.rb
@@ -3,7 +3,7 @@
class PostReceive
include ApplicationWorker
- PIPELINE_PROCESS_LIMIT = 4
+ feature_category :source_code_management
def perform(gl_repository, identifier, changes, push_options = {})
project, repo_type = Gitlab::GlRepository.parse(gl_repository)
@@ -37,53 +37,31 @@ class PostReceive
end
def process_project_changes(post_received)
- changes = []
- refs = Set.new
user = identify_user(post_received)
+
return false unless user
+ project = post_received.project
+ push_options = post_received.push_options
+ changes = post_received.changes
+
# We only need to expire certain caches once per push
- expire_caches(post_received)
-
- post_received.enum_for(:changes_refs).with_index do |(oldrev, newrev, ref), index|
- service_klass =
- if Gitlab::Git.tag_ref?(ref)
- Git::TagPushService
- elsif Gitlab::Git.branch_ref?(ref)
- Git::BranchPushService
- end
-
- if service_klass
- service_klass.new(
- post_received.project,
- user,
- oldrev: oldrev,
- newrev: newrev,
- ref: ref,
- push_options: post_received.push_options,
- create_pipelines: index < PIPELINE_PROCESS_LIMIT || Feature.enabled?(:git_push_create_all_pipelines, post_received.project)
- ).execute
- end
-
- changes << Gitlab::DataBuilder::Repository.single_change(oldrev, newrev, ref)
- refs << ref
- end
+ expire_caches(post_received, post_received.project.repository)
+ enqueue_repository_cache_update(post_received)
- after_project_changes_hooks(post_received, user, refs.to_a, changes)
+ process_ref_changes(project, user, push_options: push_options, changes: changes)
+ update_remote_mirrors(post_received)
+ after_project_changes_hooks(project, user, changes.refs, changes.repository_data)
end
- # Expire the project, branch, and tag cache once per push. Schedule an
- # update for the repository size and commit count if necessary.
- def expire_caches(post_received)
- project = post_received.project
-
- project.repository.expire_status_cache if project.empty_repo?
- project.repository.expire_branches_cache if post_received.includes_branches?
- project.repository.expire_caches_for_tags if post_received.includes_tags?
-
- enqueue_repository_cache_update(post_received)
+ # Expire the repository status, branch, and tag cache once per push.
+ def expire_caches(post_received, repository)
+ repository.expire_status_cache if repository.empty?
+ repository.expire_branches_cache if post_received.includes_branches?
+ repository.expire_caches_for_tags if post_received.includes_tags?
end
+ # Schedule an update for the repository size and commit count if necessary.
def enqueue_repository_cache_update(post_received)
stats_to_invalidate = [:repository_size]
stats_to_invalidate << :commit_count if post_received.includes_default_branch?
@@ -96,9 +74,25 @@ class PostReceive
)
end
- def after_project_changes_hooks(post_received, user, refs, changes)
- hook_data = Gitlab::DataBuilder::Repository.update(post_received.project, user, changes, refs)
- SystemHooksService.new.execute_hooks(hook_data, :repository_update_hooks)
+ def process_ref_changes(project, user, params = {})
+ return unless params[:changes].any?
+
+ Git::ProcessRefChangesService.new(project, user, params).execute
+ end
+
+ def update_remote_mirrors(post_received)
+ return unless post_received.includes_branches? || post_received.includes_tags?
+
+ project = post_received.project
+ return unless project.has_remote_mirror?
+
+ project.mark_stuck_remote_mirrors_as_failed!
+ project.update_remote_mirrors
+ end
+
+ def after_project_changes_hooks(project, user, refs, changes)
+ repository_update_hook_data = Gitlab::DataBuilder::Repository.update(project, user, changes, refs)
+ SystemHooksService.new.execute_hooks(repository_update_hook_data, :repository_update_hooks)
Gitlab::UsageDataCounters::SourceCodeCounter.count(:pushes)
end
@@ -110,7 +104,10 @@ class PostReceive
user = identify_user(post_received)
return false unless user
- ::Git::WikiPushService.new(post_received.project, user, changes: post_received.enum_for(:changes_refs)).execute
+ # We only need to expire certain caches once per push
+ expire_caches(post_received, post_received.project.wiki.repository)
+
+ ::Git::WikiPushService.new(post_received.project, user, changes: post_received.changes).execute
end
def log(message)
diff --git a/app/workers/process_commit_worker.rb b/app/workers/process_commit_worker.rb
index f6ebe4ab006..1e4561fc6ea 100644
--- a/app/workers/process_commit_worker.rb
+++ b/app/workers/process_commit_worker.rb
@@ -10,6 +10,8 @@
class ProcessCommitWorker
include ApplicationWorker
+ feature_category :source_code_management
+
# project_id - The ID of the project this commit belongs to.
# user_id - The ID of the user that pushed the commit.
# commit_hash - Hash containing commit details to use for constructing a
diff --git a/app/workers/project_cache_worker.rb b/app/workers/project_cache_worker.rb
index e3f1f61991c..57a01c0dd8e 100644
--- a/app/workers/project_cache_worker.rb
+++ b/app/workers/project_cache_worker.rb
@@ -5,6 +5,8 @@ class ProjectCacheWorker
include ApplicationWorker
LEASE_TIMEOUT = 15.minutes.to_i
+ feature_category :source_code_management
+
# project_id - The ID of the project for which to flush the cache.
# files - An Array containing extra types of files to refresh such as
# `:readme` to flush the README and `:changelog` to flush the
diff --git a/app/workers/project_daily_statistics_worker.rb b/app/workers/project_daily_statistics_worker.rb
index 101f5c28459..19c2fd67763 100644
--- a/app/workers/project_daily_statistics_worker.rb
+++ b/app/workers/project_daily_statistics_worker.rb
@@ -3,6 +3,8 @@
class ProjectDailyStatisticsWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(project_id)
project = Project.find_by_id(project_id)
diff --git a/app/workers/project_destroy_worker.rb b/app/workers/project_destroy_worker.rb
index 4447e867240..1d20837faa2 100644
--- a/app/workers/project_destroy_worker.rb
+++ b/app/workers/project_destroy_worker.rb
@@ -4,6 +4,8 @@ class ProjectDestroyWorker
include ApplicationWorker
include ExceptionBacktrace
+ feature_category :source_code_management
+
def perform(project_id, user_id, params)
project = Project.find(project_id)
user = User.find(user_id)
diff --git a/app/workers/project_export_worker.rb b/app/workers/project_export_worker.rb
index ed9da39c7c3..bbcf3b72718 100644
--- a/app/workers/project_export_worker.rb
+++ b/app/workers/project_export_worker.rb
@@ -5,6 +5,7 @@ class ProjectExportWorker
include ExceptionBacktrace
sidekiq_options retry: 3
+ feature_category :source_code_management
def perform(current_user_id, project_id, after_export_strategy = {}, params = {})
current_user = User.find(current_user_id)
diff --git a/app/workers/project_service_worker.rb b/app/workers/project_service_worker.rb
index 25567cec08b..8041404fc71 100644
--- a/app/workers/project_service_worker.rb
+++ b/app/workers/project_service_worker.rb
@@ -4,6 +4,7 @@ class ProjectServiceWorker
include ApplicationWorker
sidekiq_options dead: false
+ feature_category :integrations
def perform(hook_id, data)
data = data.with_indifferent_access
diff --git a/app/workers/propagate_service_template_worker.rb b/app/workers/propagate_service_template_worker.rb
index 3ccd7615697..73a2b453207 100644
--- a/app/workers/propagate_service_template_worker.rb
+++ b/app/workers/propagate_service_template_worker.rb
@@ -4,6 +4,8 @@
class PropagateServiceTemplateWorker
include ApplicationWorker
+ feature_category :source_code_management
+
LEASE_TIMEOUT = 4.hours.to_i
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/prune_old_events_worker.rb b/app/workers/prune_old_events_worker.rb
index dc4b7670131..f421e8dbf59 100644
--- a/app/workers/prune_old_events_worker.rb
+++ b/app/workers/prune_old_events_worker.rb
@@ -4,15 +4,17 @@ class PruneOldEventsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category_not_owned!
+
# rubocop: disable CodeReuse/ActiveRecord
def perform
- # Contribution calendar shows maximum 12 months of events, we retain 2 years for data integrity.
+ # Contribution calendar shows maximum 12 months of events, we retain 3 years for data integrity.
# Double nested query is used because MySQL doesn't allow DELETE subqueries on the same table.
Event.unscoped.where(
'(id IN (SELECT id FROM (?) ids_to_remove))',
Event.unscoped.where(
'created_at < ?',
- (2.years + 1.day).ago)
+ (3.years + 1.day).ago)
.select(:id)
.limit(10_000))
.delete_all
diff --git a/app/workers/prune_web_hook_logs_worker.rb b/app/workers/prune_web_hook_logs_worker.rb
index 38054069f4e..8e48b45fc34 100644
--- a/app/workers/prune_web_hook_logs_worker.rb
+++ b/app/workers/prune_web_hook_logs_worker.rb
@@ -6,6 +6,8 @@ class PruneWebHookLogsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :integrations
+
# The maximum number of rows to remove in a single job.
DELETE_LIMIT = 50_000
diff --git a/app/workers/reactive_caching_worker.rb b/app/workers/reactive_caching_worker.rb
index b30864db802..af4a3def062 100644
--- a/app/workers/reactive_caching_worker.rb
+++ b/app/workers/reactive_caching_worker.rb
@@ -3,6 +3,8 @@
class ReactiveCachingWorker
include ApplicationWorker
+ feature_category_not_owned!
+
def perform(class_name, id, *args)
klass = begin
class_name.constantize
diff --git a/app/workers/rebase_worker.rb b/app/workers/rebase_worker.rb
index 8d06adcd993..7343226fdcd 100644
--- a/app/workers/rebase_worker.rb
+++ b/app/workers/rebase_worker.rb
@@ -5,6 +5,8 @@
class RebaseWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(merge_request_id, current_user_id)
current_user = User.find(current_user_id)
merge_request = MergeRequest.find(merge_request_id)
diff --git a/app/workers/remote_mirror_notification_worker.rb b/app/workers/remote_mirror_notification_worker.rb
index 368abfeda99..8bc19230caf 100644
--- a/app/workers/remote_mirror_notification_worker.rb
+++ b/app/workers/remote_mirror_notification_worker.rb
@@ -3,6 +3,8 @@
class RemoteMirrorNotificationWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(remote_mirror_id)
remote_mirror = RemoteMirror.find_by_id(remote_mirror_id)
diff --git a/app/workers/remove_expired_group_links_worker.rb b/app/workers/remove_expired_group_links_worker.rb
index 25128caf72f..147b412b772 100644
--- a/app/workers/remove_expired_group_links_worker.rb
+++ b/app/workers/remove_expired_group_links_worker.rb
@@ -4,6 +4,8 @@ class RemoveExpiredGroupLinksWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :authentication_and_authorization
+
def perform
ProjectGroupLink.expired.destroy_all # rubocop: disable DestroyAll
end
diff --git a/app/workers/remove_expired_members_worker.rb b/app/workers/remove_expired_members_worker.rb
index 3497a1f9280..75f06fd9f6b 100644
--- a/app/workers/remove_expired_members_worker.rb
+++ b/app/workers/remove_expired_members_worker.rb
@@ -4,6 +4,8 @@ class RemoveExpiredMembersWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :authentication_and_authorization
+
def perform
Member.expired.find_each do |member|
Members::DestroyService.new.execute(member, skip_authorization: true)
diff --git a/app/workers/remove_unreferenced_lfs_objects_worker.rb b/app/workers/remove_unreferenced_lfs_objects_worker.rb
index 95e7a9f537f..7f2c23f4685 100644
--- a/app/workers/remove_unreferenced_lfs_objects_worker.rb
+++ b/app/workers/remove_unreferenced_lfs_objects_worker.rb
@@ -4,6 +4,8 @@ class RemoveUnreferencedLfsObjectsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :source_code_management
+
def perform
LfsObject.destroy_unreferenced
end
diff --git a/app/workers/repository_archive_cache_worker.rb b/app/workers/repository_archive_cache_worker.rb
index c1dff8ced90..ebc83c1b17a 100644
--- a/app/workers/repository_archive_cache_worker.rb
+++ b/app/workers/repository_archive_cache_worker.rb
@@ -4,6 +4,8 @@ class RepositoryArchiveCacheWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :source_code_management
+
def perform
RepositoryArchiveCleanUpService.new.execute
end
diff --git a/app/workers/repository_check/dispatch_worker.rb b/app/workers/repository_check/dispatch_worker.rb
index 0a7d9a14c6a..d2bd5f9b967 100644
--- a/app/workers/repository_check/dispatch_worker.rb
+++ b/app/workers/repository_check/dispatch_worker.rb
@@ -7,6 +7,8 @@ module RepositoryCheck
include ::EachShardWorker
include ExclusiveLeaseGuard
+ feature_category :source_code_management
+
LEASE_TIMEOUT = 1.hour
def perform
diff --git a/app/workers/repository_cleanup_worker.rb b/app/workers/repository_cleanup_worker.rb
index aa26c173a72..dd2cbd42d1f 100644
--- a/app/workers/repository_cleanup_worker.rb
+++ b/app/workers/repository_cleanup_worker.rb
@@ -4,6 +4,7 @@ class RepositoryCleanupWorker
include ApplicationWorker
sidekiq_options retry: 3
+ feature_category :source_code_management
sidekiq_retries_exhausted do |msg, err|
next if err.is_a?(ActiveRecord::RecordNotFound)
diff --git a/app/workers/repository_fork_worker.rb b/app/workers/repository_fork_worker.rb
index 35e9c58eb13..0adf745c7ac 100644
--- a/app/workers/repository_fork_worker.rb
+++ b/app/workers/repository_fork_worker.rb
@@ -6,6 +6,8 @@ class RepositoryForkWorker
include ProjectStartImport
include ProjectImportOptions
+ feature_category :source_code_management
+
def perform(*args)
target_project_id = args.shift
target_project = Project.find(target_project_id)
diff --git a/app/workers/repository_import_worker.rb b/app/workers/repository_import_worker.rb
index 5be439ecbc5..bc2d0366fdd 100644
--- a/app/workers/repository_import_worker.rb
+++ b/app/workers/repository_import_worker.rb
@@ -6,6 +6,12 @@ class RepositoryImportWorker
include ProjectStartImport
include ProjectImportOptions
+ feature_category :importers
+
+ # technical debt: https://gitlab.com/gitlab-org/gitlab/issues/33991
+ sidekiq_options memory_killer_memory_growth_kb: ENV.fetch('MEMORY_KILLER_REPOSITORY_IMPORT_WORKER_MEMORY_GROWTH_KB', 50).to_i
+ sidekiq_options memory_killer_max_memory_growth_kb: ENV.fetch('MEMORY_KILLER_REPOSITORY_IMPORT_WORKER_MAX_MEMORY_GROWTH_KB', 300_000).to_i
+
def perform(project_id)
@project = Project.find(project_id)
diff --git a/app/workers/repository_remove_remote_worker.rb b/app/workers/repository_remove_remote_worker.rb
index a85e9fa9394..3e55ebc77ed 100644
--- a/app/workers/repository_remove_remote_worker.rb
+++ b/app/workers/repository_remove_remote_worker.rb
@@ -4,6 +4,8 @@ class RepositoryRemoveRemoteWorker
include ApplicationWorker
include ExclusiveLeaseGuard
+ feature_category :source_code_management
+
LEASE_TIMEOUT = 1.hour
attr_reader :project, :remote_name
diff --git a/app/workers/repository_update_remote_mirror_worker.rb b/app/workers/repository_update_remote_mirror_worker.rb
index d13c7641eb3..b4d96546fa4 100644
--- a/app/workers/repository_update_remote_mirror_worker.rb
+++ b/app/workers/repository_update_remote_mirror_worker.rb
@@ -7,6 +7,7 @@ class RepositoryUpdateRemoteMirrorWorker
include Gitlab::ExclusiveLeaseHelpers
sidekiq_options retry: 3, dead: false
+ feature_category :source_code_management
LOCK_WAIT_TIME = 30.seconds
MAX_TRIES = 3
diff --git a/app/workers/requests_profiles_worker.rb b/app/workers/requests_profiles_worker.rb
index ae022d43e29..6ab020afb10 100644
--- a/app/workers/requests_profiles_worker.rb
+++ b/app/workers/requests_profiles_worker.rb
@@ -4,6 +4,8 @@ class RequestsProfilesWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :source_code_management
+
def perform
Gitlab::RequestProfiler.remove_all_profiles
end
diff --git a/app/workers/run_pipeline_schedule_worker.rb b/app/workers/run_pipeline_schedule_worker.rb
index 659f8b80397..853f774875a 100644
--- a/app/workers/run_pipeline_schedule_worker.rb
+++ b/app/workers/run_pipeline_schedule_worker.rb
@@ -5,6 +5,7 @@ class RunPipelineScheduleWorker
include PipelineQueue
queue_namespace :pipeline_creation
+ feature_category :continuous_integration
# rubocop: disable CodeReuse/ActiveRecord
def perform(schedule_id, user_id)
diff --git a/app/workers/schedule_migrate_external_diffs_worker.rb b/app/workers/schedule_migrate_external_diffs_worker.rb
index 70910f7ca04..8abb5922b54 100644
--- a/app/workers/schedule_migrate_external_diffs_worker.rb
+++ b/app/workers/schedule_migrate_external_diffs_worker.rb
@@ -1,10 +1,12 @@
-# frozen_string_literal: false
+# frozen_string_literal: true
class ScheduleMigrateExternalDiffsWorker
include ApplicationWorker
include CronjobQueue
include Gitlab::ExclusiveLeaseHelpers
+ feature_category :source_code_management
+
def perform
in_lock(self.class.name.underscore, ttl: 2.hours, retries: 0) do
MergeRequests::MigrateExternalDiffsService.enqueue!
diff --git a/app/workers/stuck_ci_jobs_worker.rb b/app/workers/stuck_ci_jobs_worker.rb
index 7e002d8822c..971edb1f14f 100644
--- a/app/workers/stuck_ci_jobs_worker.rb
+++ b/app/workers/stuck_ci_jobs_worker.rb
@@ -4,6 +4,8 @@ class StuckCiJobsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :continuous_integration
+
EXCLUSIVE_LEASE_KEY = 'stuck_ci_builds_worker_lease'
BUILD_RUNNING_OUTDATED_TIMEOUT = 1.hour
diff --git a/app/workers/stuck_import_jobs_worker.rb b/app/workers/stuck_import_jobs_worker.rb
index a9ff5b22b25..4993cd1220c 100644
--- a/app/workers/stuck_import_jobs_worker.rb
+++ b/app/workers/stuck_import_jobs_worker.rb
@@ -4,6 +4,8 @@ class StuckImportJobsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :importers
+
IMPORT_JOBS_EXPIRATION = 15.hours.to_i
def perform
diff --git a/app/workers/stuck_merge_jobs_worker.rb b/app/workers/stuck_merge_jobs_worker.rb
index e840ae47421..024863ab530 100644
--- a/app/workers/stuck_merge_jobs_worker.rb
+++ b/app/workers/stuck_merge_jobs_worker.rb
@@ -4,6 +4,8 @@ class StuckMergeJobsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :source_code_management
+
def self.logger
Rails.logger # rubocop:disable Gitlab/RailsLogger
end
@@ -31,7 +33,7 @@ class StuckMergeJobsWorker
def apply_current_state!(completed_jids, completed_ids)
merge_requests = MergeRequest.where(id: completed_ids)
- merge_requests.where.not(merge_commit_sha: nil).update_all(state: :merged)
+ merge_requests.where.not(merge_commit_sha: nil).update_all(state_id: MergeRequest.available_states[:merged])
merge_requests_to_reopen = merge_requests.where(merge_commit_sha: nil)
diff --git a/app/workers/system_hook_push_worker.rb b/app/workers/system_hook_push_worker.rb
index 15e369ebcfb..fc6237f359a 100644
--- a/app/workers/system_hook_push_worker.rb
+++ b/app/workers/system_hook_push_worker.rb
@@ -3,6 +3,8 @@
class SystemHookPushWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(push_data, hook_id)
SystemHooksService.new.execute_hooks(push_data, hook_id)
end
diff --git a/app/workers/trending_projects_worker.rb b/app/workers/trending_projects_worker.rb
index 55b599ba38f..4c8ee1ee425 100644
--- a/app/workers/trending_projects_worker.rb
+++ b/app/workers/trending_projects_worker.rb
@@ -4,6 +4,8 @@ class TrendingProjectsWorker
include ApplicationWorker
include CronjobQueue
+ feature_category :source_code_management
+
def perform
Rails.logger.info('Refreshing trending projects') # rubocop:disable Gitlab/RailsLogger
diff --git a/app/workers/update_external_pull_requests_worker.rb b/app/workers/update_external_pull_requests_worker.rb
index c5acfa82ada..8b0952528fa 100644
--- a/app/workers/update_external_pull_requests_worker.rb
+++ b/app/workers/update_external_pull_requests_worker.rb
@@ -3,6 +3,8 @@
class UpdateExternalPullRequestsWorker
include ApplicationWorker
+ feature_category :source_code_management
+
def perform(project_id, user_id, ref)
project = Project.find_by_id(project_id)
return unless project
diff --git a/app/workers/update_head_pipeline_for_merge_request_worker.rb b/app/workers/update_head_pipeline_for_merge_request_worker.rb
index 4ec2b9d8fbe..77859abfea4 100644
--- a/app/workers/update_head_pipeline_for_merge_request_worker.rb
+++ b/app/workers/update_head_pipeline_for_merge_request_worker.rb
@@ -5,6 +5,7 @@ class UpdateHeadPipelineForMergeRequestWorker
include PipelineQueue
queue_namespace :pipeline_processing
+ feature_category :continuous_integration
def perform(merge_request_id)
MergeRequest.find_by_id(merge_request_id).try do |merge_request|
diff --git a/app/workers/update_merge_requests_worker.rb b/app/workers/update_merge_requests_worker.rb
index 6c0e472e05a..8e1703cdd0b 100644
--- a/app/workers/update_merge_requests_worker.rb
+++ b/app/workers/update_merge_requests_worker.rb
@@ -3,6 +3,8 @@
class UpdateMergeRequestsWorker
include ApplicationWorker
+ feature_category :source_code_management
+
LOG_TIME_THRESHOLD = 90 # seconds
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/update_project_statistics_worker.rb b/app/workers/update_project_statistics_worker.rb
index 9a29cc12707..e36cebf6f4f 100644
--- a/app/workers/update_project_statistics_worker.rb
+++ b/app/workers/update_project_statistics_worker.rb
@@ -1,10 +1,11 @@
-
# frozen_string_literal: true
# Worker for updating project statistics.
class UpdateProjectStatisticsWorker
include ApplicationWorker
+ feature_category :source_code_management
+
# project_id - The ID of the project for which to flush the cache.
# statistics - An Array containing columns from ProjectStatistics to
# refresh, if empty all columns will be refreshed
diff --git a/app/workers/upload_checksum_worker.rb b/app/workers/upload_checksum_worker.rb
index 834dcaa435d..d35367145b8 100644
--- a/app/workers/upload_checksum_worker.rb
+++ b/app/workers/upload_checksum_worker.rb
@@ -3,6 +3,8 @@
class UploadChecksumWorker
include ApplicationWorker
+ feature_category :geo_replication
+
def perform(upload_id)
upload = Upload.find(upload_id)
upload.calculate_checksum!
diff --git a/app/workers/web_hook_worker.rb b/app/workers/web_hook_worker.rb
index 09219a24a16..fd7ca93683e 100644
--- a/app/workers/web_hook_worker.rb
+++ b/app/workers/web_hook_worker.rb
@@ -3,6 +3,7 @@
class WebHookWorker
include ApplicationWorker
+ feature_category :integrations
sidekiq_options retry: 4, dead: false
def perform(hook_id, data, hook_name)
diff --git a/babel.config.js b/babel.config.js
index 05554e8763e..79c401ed975 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -44,7 +44,7 @@ if (isJest) {
plugins.push('@babel/plugin-transform-modules-commonjs');
/*
without the following, babel-plugin-istanbul throws an error:
- https://gitlab.com/gitlab-org/gitlab-ce/issues/58390
+ https://gitlab.com/gitlab-org/gitlab-foss/issues/58390
*/
plugins.push('babel-plugin-dynamic-import-node');
}
diff --git a/bin/background_jobs b/bin/background_jobs
index 9d12422b81a..06f26df5409 100755
--- a/bin/background_jobs
+++ b/bin/background_jobs
@@ -28,7 +28,7 @@ restart()
stop
fi
killall
- start_sidekiq -d -L $sidekiq_logfile >> $sidekiq_logfile 2>&1
+ start_sidekiq -P $sidekiq_pidfile -d -L $sidekiq_logfile >> $sidekiq_logfile 2>&1
}
start_no_deamonize()
@@ -45,7 +45,7 @@ start_sidekiq()
cmd="${cmd} ${chpst} -P"
fi
- ${cmd} bundle exec sidekiq -C "${sidekiq_config}" -e $RAILS_ENV -P $sidekiq_pidfile "$@"
+ ${cmd} bundle exec sidekiq -C "${sidekiq_config}" -e $RAILS_ENV "$@"
}
load_ok()
diff --git a/bin/secpick b/bin/secpick
index 8a61356a088..a44867846d0 100755
--- a/bin/secpick
+++ b/bin/secpick
@@ -20,7 +20,7 @@ module Secpick
end
def ee?
- File.exist?('./CHANGELOG-EE.md')
+ File.exist?('./ee/app/models/license.rb')
end
def dry_run?
diff --git a/changelogs/unreleased/10893-hide-redundant-labels-in-issue-boards.yml b/changelogs/unreleased/10893-hide-redundant-labels-in-issue-boards.yml
new file mode 100644
index 00000000000..4e5547030de
--- /dev/null
+++ b/changelogs/unreleased/10893-hide-redundant-labels-in-issue-boards.yml
@@ -0,0 +1,5 @@
+---
+title: Hide redundant labels in issue boards
+merge_request: 17937
+author:
+type: fixed
diff --git a/changelogs/unreleased/10904-insights-include-projects.yml b/changelogs/unreleased/10904-insights-include-projects.yml
new file mode 100644
index 00000000000..224ae9b786f
--- /dev/null
+++ b/changelogs/unreleased/10904-insights-include-projects.yml
@@ -0,0 +1,5 @@
+---
+title: Add projects.only option to Insights
+merge_request: 15930
+author:
+type: added
diff --git a/changelogs/unreleased/10946-fix-the-following-style-lint-errors-and-warnings-for-ee-app-assets-.yml b/changelogs/unreleased/10946-fix-the-following-style-lint-errors-and-warnings-for-ee-app-assets-.yml
new file mode 100644
index 00000000000..4c167ad7ea5
--- /dev/null
+++ b/changelogs/unreleased/10946-fix-the-following-style-lint-errors-and-warnings-for-ee-app-assets-.yml
@@ -0,0 +1,5 @@
+---
+title: Fix stylelint errors in epics.scss
+merge_request: 17243
+author:
+type: fixed
diff --git a/changelogs/unreleased/11412-fix-security-dashboard-history-bug.yml b/changelogs/unreleased/11412-fix-security-dashboard-history-bug.yml
new file mode 100644
index 00000000000..3d7a862b2b8
--- /dev/null
+++ b/changelogs/unreleased/11412-fix-security-dashboard-history-bug.yml
@@ -0,0 +1,5 @@
+---
+title: Fix routing bugs in security dashboards
+merge_request: 16738
+author:
+type: fixed
diff --git a/changelogs/unreleased/12564-email-regex.yml b/changelogs/unreleased/12564-email-regex.yml
new file mode 100644
index 00000000000..68f489d31ef
--- /dev/null
+++ b/changelogs/unreleased/12564-email-regex.yml
@@ -0,0 +1,5 @@
+---
+title: Adjust placeholder to solve misleading regex
+merge_request: 18235
+author:
+type: fixed
diff --git a/changelogs/unreleased/12739-incomplete-group-audit-logs-in-group-view.yml b/changelogs/unreleased/12739-incomplete-group-audit-logs-in-group-view.yml
new file mode 100644
index 00000000000..206badd5ab2
--- /dev/null
+++ b/changelogs/unreleased/12739-incomplete-group-audit-logs-in-group-view.yml
@@ -0,0 +1,5 @@
+---
+title: Specify sort order explicitly for Group and Project audit events
+merge_request: 17739
+author:
+type: fixed
diff --git a/changelogs/unreleased/12764-refactor-checksum-code.yml b/changelogs/unreleased/12764-refactor-checksum-code.yml
new file mode 100644
index 00000000000..b29d7bad5be
--- /dev/null
+++ b/changelogs/unreleased/12764-refactor-checksum-code.yml
@@ -0,0 +1,5 @@
+---
+title: Refactor checksum code in uploads
+merge_request: 18065
+author: briankabiro
+type: other
diff --git a/changelogs/unreleased/12819-remove-feature-flag.yml b/changelogs/unreleased/12819-remove-feature-flag.yml
new file mode 100644
index 00000000000..0096a0d00ac
--- /dev/null
+++ b/changelogs/unreleased/12819-remove-feature-flag.yml
@@ -0,0 +1,5 @@
+---
+title: Fix pod logs failure when pod contains more than 1 container
+merge_request: 18574
+author:
+type: fixed
diff --git a/changelogs/unreleased/13321-show-issue-weight-when-zero.yml b/changelogs/unreleased/13321-show-issue-weight-when-zero.yml
new file mode 100644
index 00000000000..422245548d6
--- /dev/null
+++ b/changelogs/unreleased/13321-show-issue-weight-when-zero.yml
@@ -0,0 +1,5 @@
+---
+title: Show issue weight when weight is 0
+merge_request: 17329
+author: briankabiro
+type: fixed
diff --git a/changelogs/unreleased/13360-fix-epics-api.yml b/changelogs/unreleased/13360-fix-epics-api.yml
new file mode 100644
index 00000000000..ab89f2a8b5c
--- /dev/null
+++ b/changelogs/unreleased/13360-fix-epics-api.yml
@@ -0,0 +1,5 @@
+---
+title: Fix creating epics with dates from api
+merge_request: 18393
+author:
+type: fixed
diff --git a/changelogs/unreleased/13422-empty-security-dashboard-on-public-project-with-found-vulnerabiliti.yml b/changelogs/unreleased/13422-empty-security-dashboard-on-public-project-with-found-vulnerabiliti.yml
new file mode 100644
index 00000000000..6f5a0054a58
--- /dev/null
+++ b/changelogs/unreleased/13422-empty-security-dashboard-on-public-project-with-found-vulnerabiliti.yml
@@ -0,0 +1,5 @@
+---
+title: Fix empty security dashboard for public projects
+merge_request: 17915
+author:
+type: fixed
diff --git a/changelogs/unreleased/13426-add-user-and-timestamps-to-design-management-version.yml b/changelogs/unreleased/13426-add-user-and-timestamps-to-design-management-version.yml
new file mode 100644
index 00000000000..2f56de32b2d
--- /dev/null
+++ b/changelogs/unreleased/13426-add-user-and-timestamps-to-design-management-version.yml
@@ -0,0 +1,5 @@
+---
+title: Add user_id and created_at columns to design_management_versions table
+merge_request: 17316
+author:
+type: added
diff --git a/changelogs/unreleased/13426-disable-design-mutation-abilities-when-issue-moved-or-locked.yml b/changelogs/unreleased/13426-disable-design-mutation-abilities-when-issue-moved-or-locked.yml
new file mode 100644
index 00000000000..21c2dbff7e9
--- /dev/null
+++ b/changelogs/unreleased/13426-disable-design-mutation-abilities-when-issue-moved-or-locked.yml
@@ -0,0 +1,5 @@
+---
+title: Make designs read-only if the issue has been moved, or if its discussion has been locked
+merge_request: 18551
+author:
+type: changed
diff --git a/changelogs/unreleased/13536-add-sort-to-group-packages.yml b/changelogs/unreleased/13536-add-sort-to-group-packages.yml
new file mode 100644
index 00000000000..cf0e835510c
--- /dev/null
+++ b/changelogs/unreleased/13536-add-sort-to-group-packages.yml
@@ -0,0 +1,5 @@
+---
+title: Adds sorting of packages at the group level
+merge_request: 18062
+author:
+type: added
diff --git a/changelogs/unreleased/14064-commit-status-on-any-pipelines.yml b/changelogs/unreleased/14064-commit-status-on-any-pipelines.yml
new file mode 100644
index 00000000000..db55148cf65
--- /dev/null
+++ b/changelogs/unreleased/14064-commit-status-on-any-pipelines.yml
@@ -0,0 +1,5 @@
+---
+title: Make commit status created for any pipelines
+merge_request: 17524
+author: Aufar Gilbran
+type: changed
diff --git a/changelogs/unreleased/14794-rake-gitlab-geo-check-does-not-give-the-actual-state.yml b/changelogs/unreleased/14794-rake-gitlab-geo-check-does-not-give-the-actual-state.yml
new file mode 100644
index 00000000000..4a4ee2f8c97
--- /dev/null
+++ b/changelogs/unreleased/14794-rake-gitlab-geo-check-does-not-give-the-actual-state.yml
@@ -0,0 +1,5 @@
+---
+title: 'Geo: Invalidate cache after refreshing foreign tables'
+merge_request: 17885
+author:
+type: fixed
diff --git a/changelogs/unreleased/14945-fix-jira-api-url-parsing.yml b/changelogs/unreleased/14945-fix-jira-api-url-parsing.yml
new file mode 100644
index 00000000000..c7323080e95
--- /dev/null
+++ b/changelogs/unreleased/14945-fix-jira-api-url-parsing.yml
@@ -0,0 +1,5 @@
+---
+title: 'JIRA Integration API URL works having a trailing slash'
+merge_request: 18526
+author:
+type: fixed
diff --git a/changelogs/unreleased/15018-build-results-fe.yml b/changelogs/unreleased/15018-build-results-fe.yml
new file mode 100644
index 00000000000..6d619910937
--- /dev/null
+++ b/changelogs/unreleased/15018-build-results-fe.yml
@@ -0,0 +1,5 @@
+---
+title: Creates Vue and Vuex app to render exposed artifacts
+merge_request: 17934
+author:
+type: added
diff --git a/changelogs/unreleased/16188-warn-before-applying-issue-templates.yml b/changelogs/unreleased/16188-warn-before-applying-issue-templates.yml
new file mode 100644
index 00000000000..c6cc6cb0992
--- /dev/null
+++ b/changelogs/unreleased/16188-warn-before-applying-issue-templates.yml
@@ -0,0 +1,5 @@
+---
+title: Warn before applying issue templates
+merge_request: 16865
+author:
+type: changed
diff --git a/changelogs/unreleased/16388-abort-mwps-on-impossible-ff-merge.yml b/changelogs/unreleased/16388-abort-mwps-on-impossible-ff-merge.yml
new file mode 100644
index 00000000000..4823c75bf2d
--- /dev/null
+++ b/changelogs/unreleased/16388-abort-mwps-on-impossible-ff-merge.yml
@@ -0,0 +1,5 @@
+---
+title: Abort Merge When Pipeline Succeeds when Fast Forward merge is impossible
+merge_request: 17886
+author:
+type: fixed
diff --git a/changelogs/unreleased/16482-split-sign-in-and-sign-up.yml b/changelogs/unreleased/16482-split-sign-in-and-sign-up.yml
new file mode 100644
index 00000000000..bb3c01385d8
--- /dev/null
+++ b/changelogs/unreleased/16482-split-sign-in-and-sign-up.yml
@@ -0,0 +1,5 @@
+---
+title: Experimental separate sign up flow
+merge_request: 16482
+author:
+type: other
diff --git a/changelogs/unreleased/16654-audio-in-markdown.yml b/changelogs/unreleased/16654-audio-in-markdown.yml
new file mode 100644
index 00000000000..8983e06da2c
--- /dev/null
+++ b/changelogs/unreleased/16654-audio-in-markdown.yml
@@ -0,0 +1,5 @@
+---
+title: Feature enabling embedded audio elements in markdown.
+merge_request: 17860
+author: Jesse Hall @jessehall3
+type: added
diff --git a/16790-render-xml-artifacts.yml b/changelogs/unreleased/16790-render-xml-artifacts.yml
index d9cfcc04a68..d9cfcc04a68 100644
--- a/16790-render-xml-artifacts.yml
+++ b/changelogs/unreleased/16790-render-xml-artifacts.yml
diff --git a/changelogs/unreleased/17596-show-all-matching-labels-when-using-label-quick-action.yml b/changelogs/unreleased/17596-show-all-matching-labels-when-using-label-quick-action.yml
new file mode 100644
index 00000000000..7618e89b7c9
--- /dev/null
+++ b/changelogs/unreleased/17596-show-all-matching-labels-when-using-label-quick-action.yml
@@ -0,0 +1,5 @@
+---
+title: Show 20 labels in dropdown instead of 5
+merge_request: 17596
+author:
+type: fixed
diff --git a/changelogs/unreleased/17970-preserve-leading-whitespace.yml b/changelogs/unreleased/17970-preserve-leading-whitespace.yml
new file mode 100644
index 00000000000..84085b80547
--- /dev/null
+++ b/changelogs/unreleased/17970-preserve-leading-whitespace.yml
@@ -0,0 +1,5 @@
+---
+title: Prevent the slash command parser from removing leading whitespace from content that is unrelated to slash commands
+merge_request: 18589
+author: Jared Deckard
+type: fixed
diff --git a/changelogs/unreleased/18217-request-access-to-project-should-be-on-by-default.yml b/changelogs/unreleased/18217-request-access-to-project-should-be-on-by-default.yml
new file mode 100644
index 00000000000..3fb1b874e77
--- /dev/null
+++ b/changelogs/unreleased/18217-request-access-to-project-should-be-on-by-default.yml
@@ -0,0 +1,5 @@
+---
+title: Enable Request Access functionality by default for new projects and groups
+merge_request: 17662
+author:
+type: changed
diff --git a/changelogs/unreleased/19152-improve-jira-username-validation.yml b/changelogs/unreleased/19152-improve-jira-username-validation.yml
new file mode 100644
index 00000000000..8f007497d32
--- /dev/null
+++ b/changelogs/unreleased/19152-improve-jira-username-validation.yml
@@ -0,0 +1,5 @@
+---
+title: 'JIRA Service: Improve username/email validation'
+merge_request: 18397
+author:
+type: fixed
diff --git a/changelogs/unreleased/19822-audio-preview-in-repo.yml b/changelogs/unreleased/19822-audio-preview-in-repo.yml
new file mode 100644
index 00000000000..9b165479f09
--- /dev/null
+++ b/changelogs/unreleased/19822-audio-preview-in-repo.yml
@@ -0,0 +1,5 @@
+---
+title: Users can preview audio files in a repository.
+merge_request: 18354
+author: Jesse Hall @jessehall3
+type: added
diff --git a/changelogs/unreleased/20-add-signup-step-2.yml b/changelogs/unreleased/20-add-signup-step-2.yml
new file mode 100644
index 00000000000..cfaa57cea97
--- /dev/null
+++ b/changelogs/unreleased/20-add-signup-step-2.yml
@@ -0,0 +1,5 @@
+---
+title: Add step 2 of the experimental signup flow
+merge_request: 16583
+author:
+type: changed
diff --git a/changelogs/unreleased/20718-extend-issue-attributes-returned-by-graphql.yml b/changelogs/unreleased/20718-extend-issue-attributes-returned-by-graphql.yml
new file mode 100644
index 00000000000..1142772f434
--- /dev/null
+++ b/changelogs/unreleased/20718-extend-issue-attributes-returned-by-graphql.yml
@@ -0,0 +1,5 @@
+---
+title: Add more attributes to issues GraphQL endpoint
+merge_request: 17802
+author:
+type: changed
diff --git a/changelogs/unreleased/20829-extend-mr-attributes-returned-by-graphql.yml b/changelogs/unreleased/20829-extend-mr-attributes-returned-by-graphql.yml
new file mode 100644
index 00000000000..86e34bcdab1
--- /dev/null
+++ b/changelogs/unreleased/20829-extend-mr-attributes-returned-by-graphql.yml
@@ -0,0 +1,5 @@
+---
+title: Extend graphql query endpoint for merge requests to return more attributes to support sidebar implementation
+merge_request: 17813
+author:
+type: other
diff --git a/changelogs/unreleased/21405-fix-registry-tag-delete.yml b/changelogs/unreleased/21405-fix-registry-tag-delete.yml
new file mode 100644
index 00000000000..48890ec62fc
--- /dev/null
+++ b/changelogs/unreleased/21405-fix-registry-tag-delete.yml
@@ -0,0 +1,5 @@
+---
+title: 'Adds the ability to delete single tags from the docker registry. Fix the issue that caused all related tags and image to be deleted at the same time.'
+merge_request: 16886
+author:
+type: fixed
diff --git a/changelogs/unreleased/21800-parse-mentioned-users-group-projects-from-markdown.yml b/changelogs/unreleased/21800-parse-mentioned-users-group-projects-from-markdown.yml
new file mode 100644
index 00000000000..463d8a0ab98
--- /dev/null
+++ b/changelogs/unreleased/21800-parse-mentioned-users-group-projects-from-markdown.yml
@@ -0,0 +1,5 @@
+---
+title: Adds separate parsers for mentions of users, groups, projects in markdown content
+merge_request: 18318
+author:
+type: added
diff --git a/changelogs/unreleased/22388-limit-the-number-of-comments-on-a-noteable.yml b/changelogs/unreleased/22388-limit-the-number-of-comments-on-a-noteable.yml
new file mode 100644
index 00000000000..f047d3ddac1
--- /dev/null
+++ b/changelogs/unreleased/22388-limit-the-number-of-comments-on-a-noteable.yml
@@ -0,0 +1,5 @@
+---
+title: Limit the number of comments on an issue, MR, or commit
+merge_request: 18111
+author:
+type: added
diff --git a/changelogs/unreleased/22879-close-jira-issues-with-issues-disabled.yml b/changelogs/unreleased/22879-close-jira-issues-with-issues-disabled.yml
new file mode 100644
index 00000000000..c8f32d2226e
--- /dev/null
+++ b/changelogs/unreleased/22879-close-jira-issues-with-issues-disabled.yml
@@ -0,0 +1,5 @@
+---
+title: 'Merge Request: Close JIRA issues when issues are disabled'
+merge_request: 17743
+author:
+type: fixed
diff --git a/changelogs/unreleased/22904-fix-overflow.yml b/changelogs/unreleased/22904-fix-overflow.yml
new file mode 100644
index 00000000000..06669d5b548
--- /dev/null
+++ b/changelogs/unreleased/22904-fix-overflow.yml
@@ -0,0 +1,5 @@
+---
+title: Fixes job overflow in stages dropdown
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/22959-remove-map-get-grid-breakpoints-xs-for-max-width.yml b/changelogs/unreleased/22959-remove-map-get-grid-breakpoints-xs-for-max-width.yml
new file mode 100644
index 00000000000..12ef1fb23f2
--- /dev/null
+++ b/changelogs/unreleased/22959-remove-map-get-grid-breakpoints-xs-for-max-width.yml
@@ -0,0 +1,5 @@
+---
+title: Remove map-get($grid-breakpoints, xs) for max-width
+merge_request: 17420
+author: Takuya Noguchi
+type: other
diff --git a/changelogs/unreleased/23079-write-permission-global-deploy-keys.yml b/changelogs/unreleased/23079-write-permission-global-deploy-keys.yml
new file mode 100644
index 00000000000..04f9dfc9043
--- /dev/null
+++ b/changelogs/unreleased/23079-write-permission-global-deploy-keys.yml
@@ -0,0 +1,5 @@
+---
+title: Allow maintainers to toggle write permission for public deploy keys
+merge_request: 17210
+author:
+type: fixed
diff --git a/changelogs/unreleased/23315-group-level-container-registry-browser.yml b/changelogs/unreleased/23315-group-level-container-registry-browser.yml
new file mode 100644
index 00000000000..4340c565a88
--- /dev/null
+++ b/changelogs/unreleased/23315-group-level-container-registry-browser.yml
@@ -0,0 +1,5 @@
+---
+title: Group level Container Registry browser
+merge_request: 17615
+author:
+type: added
diff --git a/changelogs/unreleased/23400-fix-duplicate-replies.yml b/changelogs/unreleased/23400-fix-duplicate-replies.yml
new file mode 100644
index 00000000000..26b24c66085
--- /dev/null
+++ b/changelogs/unreleased/23400-fix-duplicate-replies.yml
@@ -0,0 +1,5 @@
+---
+title: Fix new discussion replies sometimes showing up twice
+merge_request: 17255
+author:
+type: fixed
diff --git a/changelogs/unreleased/2358-elasticsearch-project-snippets.yml b/changelogs/unreleased/2358-elasticsearch-project-snippets.yml
new file mode 100644
index 00000000000..28324c1827d
--- /dev/null
+++ b/changelogs/unreleased/2358-elasticsearch-project-snippets.yml
@@ -0,0 +1,5 @@
+---
+title: Support ES searches for project snippets
+merge_request: 18459
+author:
+type: fixed
diff --git a/changelogs/unreleased/24818-fix-jira-favicon-link.yml b/changelogs/unreleased/24818-fix-jira-favicon-link.yml
new file mode 100644
index 00000000000..c6857d1f83c
--- /dev/null
+++ b/changelogs/unreleased/24818-fix-jira-favicon-link.yml
@@ -0,0 +1,5 @@
+---
+title: Fix Jira integration favicon image with relative URL
+merge_request: 16802
+author:
+type: fixed
diff --git a/changelogs/unreleased/26001-notification-release-be.yml b/changelogs/unreleased/26001-notification-release-be.yml
new file mode 100644
index 00000000000..f3e81a60dc9
--- /dev/null
+++ b/changelogs/unreleased/26001-notification-release-be.yml
@@ -0,0 +1,5 @@
+---
+title: Add 'New release' to the project custom notifications
+merge_request: 17877
+author:
+type: added
diff --git a/changelogs/unreleased/26019-evidence-collection.yml b/changelogs/unreleased/26019-evidence-collection.yml
new file mode 100644
index 00000000000..439a4b55900
--- /dev/null
+++ b/changelogs/unreleased/26019-evidence-collection.yml
@@ -0,0 +1,5 @@
+---
+title: Creation of Evidence collection of new releases.
+merge_request: 17217
+author:
+type: added
diff --git a/changelogs/unreleased/26210-toc-links.yml b/changelogs/unreleased/26210-toc-links.yml
new file mode 100644
index 00000000000..c37798c5b39
--- /dev/null
+++ b/changelogs/unreleased/26210-toc-links.yml
@@ -0,0 +1,5 @@
+---
+title: Fix issue with wiki TOC links being treated as external links
+merge_request:
+author: Oren Kanner
+type: fixed
diff --git a/changelogs/unreleased/27502-enable-cloud-run-on-gke.yml b/changelogs/unreleased/27502-enable-cloud-run-on-gke.yml
new file mode 100644
index 00000000000..77b365f17db
--- /dev/null
+++ b/changelogs/unreleased/27502-enable-cloud-run-on-gke.yml
@@ -0,0 +1,5 @@
+---
+title: Enable Cloud Run on GKE cluster creation
+merge_request: 16566
+author:
+type: added
diff --git a/changelogs/unreleased/27715-fix-unrenderable-notes.yml b/changelogs/unreleased/27715-fix-unrenderable-notes.yml
new file mode 100644
index 00000000000..329f9cbb30c
--- /dev/null
+++ b/changelogs/unreleased/27715-fix-unrenderable-notes.yml
@@ -0,0 +1,5 @@
+---
+title: Fix showing diff when it has legacy diff notes
+merge_request: 18510
+author:
+type: fixed
diff --git a/changelogs/unreleased/27835-move-and-resize-panels-in-dashboard-save-to-branch.yml b/changelogs/unreleased/27835-move-and-resize-panels-in-dashboard-save-to-branch.yml
new file mode 100644
index 00000000000..b7d7f37bccc
--- /dev/null
+++ b/changelogs/unreleased/27835-move-and-resize-panels-in-dashboard-save-to-branch.yml
@@ -0,0 +1,5 @@
+---
+title: Add property to enable metrics dashboards to be rearranged
+merge_request: 16605
+author:
+type: changed
diff --git a/changelogs/unreleased/28211-check-if-mapping-is-empty-before-caching.yml b/changelogs/unreleased/28211-check-if-mapping-is-empty-before-caching.yml
new file mode 100644
index 00000000000..efdd47bb061
--- /dev/null
+++ b/changelogs/unreleased/28211-check-if-mapping-is-empty-before-caching.yml
@@ -0,0 +1,5 @@
+---
+title: Check if mapping is empty before caching in File Collections
+merge_request: 18290
+author: briankabiro
+type: performance
diff --git a/changelogs/unreleased/28243-check-for-docker-images-before-renaming-group.yml b/changelogs/unreleased/28243-check-for-docker-images-before-renaming-group.yml
new file mode 100644
index 00000000000..8717d59b1bc
--- /dev/null
+++ b/changelogs/unreleased/28243-check-for-docker-images-before-renaming-group.yml
@@ -0,0 +1,6 @@
+---
+title: Prevents a group path change when a project inside the group has container
+ registry images
+merge_request: 17583
+author:
+type: fixed
diff --git a/changelogs/unreleased/28311-extremely-low-contrast-in-dropdown-for-group-file-templates.yml b/changelogs/unreleased/28311-extremely-low-contrast-in-dropdown-for-group-file-templates.yml
new file mode 100644
index 00000000000..9f690e02a47
--- /dev/null
+++ b/changelogs/unreleased/28311-extremely-low-contrast-in-dropdown-for-group-file-templates.yml
@@ -0,0 +1,5 @@
+---
+title: Increase color contrast of select option path
+merge_request:
+author:
+type: other
diff --git a/changelogs/unreleased/28492-upgrade-ingress-to-latest.yml b/changelogs/unreleased/28492-upgrade-ingress-to-latest.yml
new file mode 100644
index 00000000000..2e4d8baf9f6
--- /dev/null
+++ b/changelogs/unreleased/28492-upgrade-ingress-to-latest.yml
@@ -0,0 +1,5 @@
+---
+title: Unpin ingress image version, upgrade chart to 1.22.1
+merge_request: 18047
+author:
+type: added
diff --git a/changelogs/unreleased/28781-migrate-pages-metadata-in-background.yml b/changelogs/unreleased/28781-migrate-pages-metadata-in-background.yml
new file mode 100644
index 00000000000..171fd8ff554
--- /dev/null
+++ b/changelogs/unreleased/28781-migrate-pages-metadata-in-background.yml
@@ -0,0 +1,5 @@
+---
+title: Schedule background migration to populate pages metadata
+merge_request: 17993
+author:
+type: added
diff --git a/changelogs/unreleased/28781-migrate-pages-metadata-on-demand.yml b/changelogs/unreleased/28781-migrate-pages-metadata-on-demand.yml
new file mode 100644
index 00000000000..ad478c8895d
--- /dev/null
+++ b/changelogs/unreleased/28781-migrate-pages-metadata-on-demand.yml
@@ -0,0 +1,5 @@
+---
+title: Add index on ci_builds for successful Pages deploys
+merge_request: 17204
+author:
+type: added
diff --git a/changelogs/unreleased/28781-pages-namespaces-virtual-domain.yml b/changelogs/unreleased/28781-pages-namespaces-virtual-domain.yml
new file mode 100644
index 00000000000..6725d070440
--- /dev/null
+++ b/changelogs/unreleased/28781-pages-namespaces-virtual-domain.yml
@@ -0,0 +1,5 @@
+---
+title: Add project_pages_metadata DB table
+merge_request: 17197
+author:
+type: added
diff --git a/changelogs/unreleased/29020-merge-requests-issues-links.yml b/changelogs/unreleased/29020-merge-requests-issues-links.yml
new file mode 100644
index 00000000000..ec0b6990cac
--- /dev/null
+++ b/changelogs/unreleased/29020-merge-requests-issues-links.yml
@@ -0,0 +1,5 @@
+---
+title: Provide Merge requests and Issue links through the Release API
+merge_request: 18311
+author:
+type: added
diff --git a/changelogs/unreleased/29020-update-release-blocks-for-multiple-milestone-support.yml b/changelogs/unreleased/29020-update-release-blocks-for-multiple-milestone-support.yml
new file mode 100644
index 00000000000..9520302068e
--- /dev/null
+++ b/changelogs/unreleased/29020-update-release-blocks-for-multiple-milestone-support.yml
@@ -0,0 +1,5 @@
+---
+title: Add support for the association of multiple milestones to the Releases page
+merge_request: 17091
+author:
+type: changed
diff --git a/changelogs/unreleased/29215-500-error-when-deleting-group-web-hook-activerecord-statementinvali.yml b/changelogs/unreleased/29215-500-error-when-deleting-group-web-hook-activerecord-statementinvali.yml
new file mode 100644
index 00000000000..f1b82620418
--- /dev/null
+++ b/changelogs/unreleased/29215-500-error-when-deleting-group-web-hook-activerecord-statementinvali.yml
@@ -0,0 +1,5 @@
+---
+title: Use cascading deletes for deleting logs upon deleting a webhook
+merge_request: 18642
+author:
+type: performance
diff --git a/changelogs/unreleased/29284-video-preview-not-working.yml b/changelogs/unreleased/29284-video-preview-not-working.yml
new file mode 100644
index 00000000000..1d36b3e0dff
--- /dev/null
+++ b/changelogs/unreleased/29284-video-preview-not-working.yml
@@ -0,0 +1,5 @@
+---
+title: Fix inline rendering of videos for uploads with uppercase file extensions
+merge_request: 17924
+author:
+type: fixed
diff --git a/changelogs/unreleased/29477-notification-settings-display-all-groups.yml b/changelogs/unreleased/29477-notification-settings-display-all-groups.yml
new file mode 100644
index 00000000000..a4cb6fe1643
--- /dev/null
+++ b/changelogs/unreleased/29477-notification-settings-display-all-groups.yml
@@ -0,0 +1,5 @@
+---
+title: Show all groups user belongs to in Notification settings
+merge_request: 17303
+author:
+type: fixed
diff --git a/changelogs/unreleased/29513-continue-improvements-for-time-window-filtering-on-metrics-dashboar.yml b/changelogs/unreleased/29513-continue-improvements-for-time-window-filtering-on-metrics-dashboar.yml
new file mode 100644
index 00000000000..668e25f4749
--- /dev/null
+++ b/changelogs/unreleased/29513-continue-improvements-for-time-window-filtering-on-metrics-dashboar.yml
@@ -0,0 +1,5 @@
+---
+title: Improve time window filtering on metrics dashboard
+merge_request: 17554
+author:
+type: added
diff --git a/changelogs/unreleased/29835-webide-fork.yml b/changelogs/unreleased/29835-webide-fork.yml
new file mode 100644
index 00000000000..1849b414a2d
--- /dev/null
+++ b/changelogs/unreleased/29835-webide-fork.yml
@@ -0,0 +1,6 @@
+---
+title: Web IDE button should fork and open forked project when selected from read-only
+ project
+merge_request: 17672
+author:
+type: added
diff --git a/changelogs/unreleased/29881-fix-ide-delete-and-readd.yml b/changelogs/unreleased/29881-fix-ide-delete-and-readd.yml
new file mode 100644
index 00000000000..91445ca791b
--- /dev/null
+++ b/changelogs/unreleased/29881-fix-ide-delete-and-readd.yml
@@ -0,0 +1,5 @@
+---
+title: Fix Web IDE tree not updating modified status
+merge_request: 18647
+author:
+type: fixed
diff --git a/changelogs/unreleased/30112-private-internal-sub-group-email-notifications-not-sent-when-mentio.yml b/changelogs/unreleased/30112-private-internal-sub-group-email-notifications-not-sent-when-mentio.yml
new file mode 100644
index 00000000000..fd20fc274e8
--- /dev/null
+++ b/changelogs/unreleased/30112-private-internal-sub-group-email-notifications-not-sent-when-mentio.yml
@@ -0,0 +1,5 @@
+---
+title: Fix notifications for private group mentions in Notes, Issues, and Merge Requests
+merge_request: 18183
+author:
+type: fixed
diff --git a/changelogs/unreleased/30186-mirror-pull-api-no-unpause.yml b/changelogs/unreleased/30186-mirror-pull-api-no-unpause.yml
new file mode 100644
index 00000000000..dee4128051e
--- /dev/null
+++ b/changelogs/unreleased/30186-mirror-pull-api-no-unpause.yml
@@ -0,0 +1,5 @@
+---
+title: Do not start mirroring via API when paused
+merge_request: 17930
+author:
+type: changed
diff --git a/changelogs/unreleased/30217-refactor-email-notification-code.yml b/changelogs/unreleased/30217-refactor-email-notification-code.yml
new file mode 100644
index 00000000000..c55096301cb
--- /dev/null
+++ b/changelogs/unreleased/30217-refactor-email-notification-code.yml
@@ -0,0 +1,5 @@
+---
+title: Refactor email notification code
+merge_request: 17741
+author: briankabiro
+type: other
diff --git a/changelogs/unreleased/30392-variables.yml b/changelogs/unreleased/30392-variables.yml
new file mode 100644
index 00000000000..2a35ffd3215
--- /dev/null
+++ b/changelogs/unreleased/30392-variables.yml
@@ -0,0 +1,5 @@
+---
+title: Fixes variables overflowing in sm screens
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/30497-race-condition-in-discussions-json-request-could-lead-to-notes-show.yml b/changelogs/unreleased/30497-race-condition-in-discussions-json-request-could-lead-to-notes-show.yml
new file mode 100644
index 00000000000..32e21a6d003
--- /dev/null
+++ b/changelogs/unreleased/30497-race-condition-in-discussions-json-request-could-lead-to-notes-show.yml
@@ -0,0 +1,5 @@
+---
+title: Fix notes race condition when linking to specific note
+merge_request: 17777
+author:
+type: fixed
diff --git a/changelogs/unreleased/30525-iframe_jaeger.yml b/changelogs/unreleased/30525-iframe_jaeger.yml
new file mode 100644
index 00000000000..19fdccf6333
--- /dev/null
+++ b/changelogs/unreleased/30525-iframe_jaeger.yml
@@ -0,0 +1,5 @@
+---
+title: Embed Jaeger in Gitlab UI
+merge_request:
+author:
+type: changed
diff --git a/changelogs/unreleased/30619-make-recent-searches-more-visible.yml b/changelogs/unreleased/30619-make-recent-searches-more-visible.yml
new file mode 100644
index 00000000000..c57806fcdd9
--- /dev/null
+++ b/changelogs/unreleased/30619-make-recent-searches-more-visible.yml
@@ -0,0 +1,5 @@
+---
+title: Use text instead of icon for recent searches dropdown
+merge_request:
+author:
+type: changed
diff --git a/changelogs/unreleased/30807-fix-usability-problem.yml b/changelogs/unreleased/30807-fix-usability-problem.yml
new file mode 100644
index 00000000000..691a6a8ff1d
--- /dev/null
+++ b/changelogs/unreleased/30807-fix-usability-problem.yml
@@ -0,0 +1,5 @@
+---
+title: Fix usability problems with the file template picker
+merge_request: 17522
+author:
+type: changed
diff --git a/changelogs/unreleased/30839-asciidoc-table-styles.yml b/changelogs/unreleased/30839-asciidoc-table-styles.yml
new file mode 100644
index 00000000000..11960f3620d
--- /dev/null
+++ b/changelogs/unreleased/30839-asciidoc-table-styles.yml
@@ -0,0 +1,5 @@
+---
+title: Enable grid, frame and stripes styling on AsciiDoc tables
+merge_request: 18165
+author: Guillaume Grossetie
+type: fixed
diff --git a/changelogs/unreleased/30877-optimize-explore-snippets.yml b/changelogs/unreleased/30877-optimize-explore-snippets.yml
new file mode 100644
index 00000000000..7ca52876609
--- /dev/null
+++ b/changelogs/unreleased/30877-optimize-explore-snippets.yml
@@ -0,0 +1,5 @@
+---
+title: Show only personal snippets on explore page
+merge_request: 18092
+author:
+type: performance
diff --git a/changelogs/unreleased/30881-webide-mr-confirmation.yml b/changelogs/unreleased/30881-webide-mr-confirmation.yml
new file mode 100644
index 00000000000..075e091adc4
--- /dev/null
+++ b/changelogs/unreleased/30881-webide-mr-confirmation.yml
@@ -0,0 +1,6 @@
+---
+title: 'Fix Issue: WebIDE asks for confirmation to leave the page when committing
+ and creating a new MR'
+merge_request: 17671
+author:
+type: fixed
diff --git a/changelogs/unreleased/31007-limit-activity-events.yml b/changelogs/unreleased/31007-limit-activity-events.yml
new file mode 100644
index 00000000000..d5ad588af33
--- /dev/null
+++ b/changelogs/unreleased/31007-limit-activity-events.yml
@@ -0,0 +1,5 @@
+---
+title: Aggregate push events when there are too many
+merge_request: 18239
+author:
+type: changed
diff --git a/changelogs/unreleased/31009-limit-project-hooks-services.yml b/changelogs/unreleased/31009-limit-project-hooks-services.yml
new file mode 100644
index 00000000000..dc1e0461567
--- /dev/null
+++ b/changelogs/unreleased/31009-limit-project-hooks-services.yml
@@ -0,0 +1,5 @@
+---
+title: Don't execute webhooks/services when above limit
+merge_request: 17874
+author:
+type: performance
diff --git a/changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml b/changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml
new file mode 100644
index 00000000000..5ff7f31d86b
--- /dev/null
+++ b/changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml
@@ -0,0 +1,5 @@
+---
+title: Fix broken notes avatar rendering in Chrome 77
+merge_request: 18110
+author:
+type: fixed
diff --git a/changelogs/unreleased/31118-do-not-use-blob-for-file-path.yml b/changelogs/unreleased/31118-do-not-use-blob-for-file-path.yml
new file mode 100644
index 00000000000..454ad15ee46
--- /dev/null
+++ b/changelogs/unreleased/31118-do-not-use-blob-for-file-path.yml
@@ -0,0 +1,5 @@
+---
+title: Reduce Gitaly calls when viewing a commit
+merge_request: 17095
+author:
+type: performance
diff --git a/changelogs/unreleased/31290-mr-diffs-batch-load.yml b/changelogs/unreleased/31290-mr-diffs-batch-load.yml
new file mode 100644
index 00000000000..933493e80d7
--- /dev/null
+++ b/changelogs/unreleased/31290-mr-diffs-batch-load.yml
@@ -0,0 +1,5 @@
+---
+title: Introduce diffs_batch JSON endpoint for paginated diffs
+merge_request: 17651
+author:
+type: added
diff --git a/changelogs/unreleased/31329-hidden-nav-content.yml b/changelogs/unreleased/31329-hidden-nav-content.yml
new file mode 100644
index 00000000000..2c85c8df2e3
--- /dev/null
+++ b/changelogs/unreleased/31329-hidden-nav-content.yml
@@ -0,0 +1,5 @@
+---
+title: Update top nav bar to fit all content in at all screen sizes
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/31393-when-adding-labels-in-a-merge-request-adds-them-out-of-order-until-.yml b/changelogs/unreleased/31393-when-adding-labels-in-a-merge-request-adds-them-out-of-order-until-.yml
new file mode 100644
index 00000000000..2b47255a06f
--- /dev/null
+++ b/changelogs/unreleased/31393-when-adding-labels-in-a-merge-request-adds-them-out-of-order-until-.yml
@@ -0,0 +1,5 @@
+---
+title: Alphabetically sorts selected sidebar labels.
+merge_request: 17309
+author:
+type: fixed
diff --git a/changelogs/unreleased/31427-flaky-spec-finders-members_finder_spec-rb-85.yml b/changelogs/unreleased/31427-flaky-spec-finders-members_finder_spec-rb-85.yml
new file mode 100644
index 00000000000..13d4735d2d0
--- /dev/null
+++ b/changelogs/unreleased/31427-flaky-spec-finders-members_finder_spec-rb-85.yml
@@ -0,0 +1,5 @@
+---
+title: Fix Flaky spec/finders/members_finder_spec.rb:85
+merge_request: 18257
+author: Jacopo Beschi @jacopo-beschi
+type: fixed
diff --git a/changelogs/unreleased/31441-make-it-easy-for-includes-to-add-jobs-at-beginning-end-of-pipeline.yml b/changelogs/unreleased/31441-make-it-easy-for-includes-to-add-jobs-at-beginning-end-of-pipeline.yml
new file mode 100644
index 00000000000..e909c56983b
--- /dev/null
+++ b/changelogs/unreleased/31441-make-it-easy-for-includes-to-add-jobs-at-beginning-end-of-pipeline.yml
@@ -0,0 +1,5 @@
+---
+title: Add two new predefined stages to pipelines
+merge_request: 18205
+author:
+type: added
diff --git a/changelogs/unreleased/31492-banners-should-only-be-dismissable-by-clicking-x.yml b/changelogs/unreleased/31492-banners-should-only-be-dismissable-by-clicking-x.yml
new file mode 100644
index 00000000000..322f006e8af
--- /dev/null
+++ b/changelogs/unreleased/31492-banners-should-only-be-dismissable-by-clicking-x.yml
@@ -0,0 +1,5 @@
+---
+title: Banners should only be dismissable by clicking x button
+merge_request: 17642
+author:
+type: changed
diff --git a/changelogs/unreleased/31547-update-registry-tag-delete-popup-message.yml b/changelogs/unreleased/31547-update-registry-tag-delete-popup-message.yml
new file mode 100644
index 00000000000..fe1afaca080
--- /dev/null
+++ b/changelogs/unreleased/31547-update-registry-tag-delete-popup-message.yml
@@ -0,0 +1,5 @@
+---
+title: Update registry tag delete popup message
+merge_request: 17257
+author:
+type: changed
diff --git a/changelogs/unreleased/31573-cross-project-pipeline-triggering-does-not-work-in-core.yml b/changelogs/unreleased/31573-cross-project-pipeline-triggering-does-not-work-in-core.yml
new file mode 100644
index 00000000000..1638746ea72
--- /dev/null
+++ b/changelogs/unreleased/31573-cross-project-pipeline-triggering-does-not-work-in-core.yml
@@ -0,0 +1,5 @@
+---
+title: Allow cross-project pipeline triggering with CI_JOB_TOKEN in core
+merge_request: 17251
+author:
+type: added
diff --git a/changelogs/unreleased/31573-cross-project-piplelines.yml b/changelogs/unreleased/31573-cross-project-piplelines.yml
new file mode 100644
index 00000000000..37db74b035b
--- /dev/null
+++ b/changelogs/unreleased/31573-cross-project-piplelines.yml
@@ -0,0 +1,5 @@
+---
+title: Port over EE pipeline functionality to CE
+merge_request: 18136
+author:
+type: changed
diff --git a/changelogs/unreleased/31590-tag-delete-instrumentation.yml b/changelogs/unreleased/31590-tag-delete-instrumentation.yml
new file mode 100644
index 00000000000..d071808987f
--- /dev/null
+++ b/changelogs/unreleased/31590-tag-delete-instrumentation.yml
@@ -0,0 +1,5 @@
+---
+title: Collect docker registry related metrics
+merge_request: 17063
+author:
+type: added
diff --git a/changelogs/unreleased/31678-update-cluster-link-text.yml b/changelogs/unreleased/31678-update-cluster-link-text.yml
new file mode 100644
index 00000000000..fc759749380
--- /dev/null
+++ b/changelogs/unreleased/31678-update-cluster-link-text.yml
@@ -0,0 +1,5 @@
+---
+title: Update cluster link text
+merge_request: 18322
+author:
+type: changed
diff --git a/changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml b/changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml
new file mode 100644
index 00000000000..362d0c88eea
--- /dev/null
+++ b/changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml
@@ -0,0 +1,5 @@
+---
+title: Nullify platform Kubernetes namespace if blank
+merge_request: 17657
+author:
+type: fixed
diff --git a/changelogs/unreleased/31837-sidebar-icons-jump.yml b/changelogs/unreleased/31837-sidebar-icons-jump.yml
new file mode 100644
index 00000000000..2cf359d5398
--- /dev/null
+++ b/changelogs/unreleased/31837-sidebar-icons-jump.yml
@@ -0,0 +1,5 @@
+---
+title: Stop sidebar icons from jumping when expanded & collapsed
+merge_request: 16971
+author:
+type: fixed
diff --git a/changelogs/unreleased/31914-graphql-todos-query-pd.yml b/changelogs/unreleased/31914-graphql-todos-query-pd.yml
new file mode 100644
index 00000000000..e39bcda1ff6
--- /dev/null
+++ b/changelogs/unreleased/31914-graphql-todos-query-pd.yml
@@ -0,0 +1,5 @@
+---
+title: Add ability to query todos using GraphQL
+merge_request: 18218
+author:
+type: added
diff --git a/changelogs/unreleased/31923-Snowplow-custom-events-Monitor.yml b/changelogs/unreleased/31923-Snowplow-custom-events-Monitor.yml
new file mode 100644
index 00000000000..161fb59ca6e
--- /dev/null
+++ b/changelogs/unreleased/31923-Snowplow-custom-events-Monitor.yml
@@ -0,0 +1,5 @@
+---
+title: 'Snowplow custom events for Monitor: Health Product Categories'
+merge_request: 18157
+author:
+type: added
diff --git a/changelogs/unreleased/32030-move-licence-complience-to-the-backend-FE.yml b/changelogs/unreleased/32030-move-licence-complience-to-the-backend-FE.yml
new file mode 100644
index 00000000000..a37732960a4
--- /dev/null
+++ b/changelogs/unreleased/32030-move-licence-complience-to-the-backend-FE.yml
@@ -0,0 +1,5 @@
+---
+title: Moves the license compliance reports to the Backend
+merge_request: 17905
+author:
+type: other
diff --git a/changelogs/unreleased/32036-add-some-spacing-offset-to-the-star-icon-to-project-row-in-case-the.yml b/changelogs/unreleased/32036-add-some-spacing-offset-to-the-star-icon-to-project-row-in-case-the.yml
new file mode 100644
index 00000000000..6ec9504b1a9
--- /dev/null
+++ b/changelogs/unreleased/32036-add-some-spacing-offset-to-the-star-icon-to-project-row-in-case-the.yml
@@ -0,0 +1,5 @@
+---
+title: 'Project list: Align star icons'
+merge_request: 17833
+author:
+type: other
diff --git a/changelogs/unreleased/32133-remove-feature-flag-for-zoom.yml b/changelogs/unreleased/32133-remove-feature-flag-for-zoom.yml
new file mode 100644
index 00000000000..74e4d15c67f
--- /dev/null
+++ b/changelogs/unreleased/32133-remove-feature-flag-for-zoom.yml
@@ -0,0 +1,5 @@
+---
+title: Allow users to add and remove zoom rooms on an issue using quick action commands
+merge_request:
+author:
+type: added
diff --git a/changelogs/unreleased/32146-remove-fe-code.yml b/changelogs/unreleased/32146-remove-fe-code.yml
new file mode 100644
index 00000000000..f7dd251de44
--- /dev/null
+++ b/changelogs/unreleased/32146-remove-fe-code.yml
@@ -0,0 +1,5 @@
+---
+title: Removes Collapsible Sections from Job Log
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/32192-remove-gap-at-the-top-of-expandable-code-diff-blocks.yml b/changelogs/unreleased/32192-remove-gap-at-the-top-of-expandable-code-diff-blocks.yml
new file mode 100644
index 00000000000..737390b2522
--- /dev/null
+++ b/changelogs/unreleased/32192-remove-gap-at-the-top-of-expandable-code-diff-blocks.yml
@@ -0,0 +1,5 @@
+---
+title: Remove thin white line at top of diff view code blocks
+merge_request: 17026
+author:
+type: fixed
diff --git a/changelogs/unreleased/32279-fix_graphql_for_secondary_node.yml b/changelogs/unreleased/32279-fix_graphql_for_secondary_node.yml
new file mode 100644
index 00000000000..746ed2e2333
--- /dev/null
+++ b/changelogs/unreleased/32279-fix_graphql_for_secondary_node.yml
@@ -0,0 +1,5 @@
+---
+title: Fix GraphQL for read-only instances
+merge_request: 17225
+author:
+type: fixed
diff --git a/changelogs/unreleased/32380-update-issue-list-icons.yml b/changelogs/unreleased/32380-update-issue-list-icons.yml
new file mode 100644
index 00000000000..42ad9b1eb99
--- /dev/null
+++ b/changelogs/unreleased/32380-update-issue-list-icons.yml
@@ -0,0 +1,5 @@
+---
+title: Use correct icons for issue actions
+merge_request:
+author:
+type: other
diff --git a/changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml b/changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml
new file mode 100644
index 00000000000..49ee7ea6c0a
--- /dev/null
+++ b/changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml
@@ -0,0 +1,5 @@
+---
+title: Fix css selector for details in issue description
+merge_request: 17557
+author:
+type: fixed
diff --git a/changelogs/unreleased/32397-geo-instructions-to-update-fdw-schema-aren-t-entirely-correct.yml b/changelogs/unreleased/32397-geo-instructions-to-update-fdw-schema-aren-t-entirely-correct.yml
new file mode 100644
index 00000000000..1ee73c2b959
--- /dev/null
+++ b/changelogs/unreleased/32397-geo-instructions-to-update-fdw-schema-aren-t-entirely-correct.yml
@@ -0,0 +1,5 @@
+---
+title: 'Geo: Fix instruction from rake geo:gitlab:check'
+merge_request: 17895
+author:
+type: changed
diff --git a/changelogs/unreleased/32457-change-welcome-to-gitlab-message.yml b/changelogs/unreleased/32457-change-welcome-to-gitlab-message.yml
new file mode 100644
index 00000000000..2d1c29d90ce
--- /dev/null
+++ b/changelogs/unreleased/32457-change-welcome-to-gitlab-message.yml
@@ -0,0 +1,5 @@
+---
+title: Change welcome message and make translatable
+merge_request: 17391
+author:
+type: other
diff --git a/changelogs/unreleased/32595-blame-or-history-newline-in-filename.yml b/changelogs/unreleased/32595-blame-or-history-newline-in-filename.yml
new file mode 100644
index 00000000000..b67b823704f
--- /dev/null
+++ b/changelogs/unreleased/32595-blame-or-history-newline-in-filename.yml
@@ -0,0 +1,5 @@
+---
+title: Users can view the blame or history of a file with newlines in its filename.
+merge_request: 17543
+author: Jesse Hall @jessehall3
+type: fixed
diff --git a/changelogs/unreleased/32839-fix-relative-position-edge-case.yml b/changelogs/unreleased/32839-fix-relative-position-edge-case.yml
new file mode 100644
index 00000000000..fd975f27cdc
--- /dev/null
+++ b/changelogs/unreleased/32839-fix-relative-position-edge-case.yml
@@ -0,0 +1,5 @@
+---
+title: Fix relative positioning when moving items down and there is no space
+merge_request: 17781
+author:
+type: fixed
diff --git a/changelogs/unreleased/32899-handle-race-condition-for-container-registry-sync.yml b/changelogs/unreleased/32899-handle-race-condition-for-container-registry-sync.yml
new file mode 100644
index 00000000000..4182f49b730
--- /dev/null
+++ b/changelogs/unreleased/32899-handle-race-condition-for-container-registry-sync.yml
@@ -0,0 +1,5 @@
+---
+title: 'Geo: Fix race condition for container synchronization'
+merge_request: 17823
+author:
+type: fixed
diff --git a/changelogs/unreleased/32919-inform-the-user-that-removing-the-last-tag-of-an-image-it-will-remo.yml b/changelogs/unreleased/32919-inform-the-user-that-removing-the-last-tag-of-an-image-it-will-remo.yml
new file mode 100644
index 00000000000..76da5fcebc8
--- /dev/null
+++ b/changelogs/unreleased/32919-inform-the-user-that-removing-the-last-tag-of-an-image-it-will-remo.yml
@@ -0,0 +1,6 @@
+---
+title: Add more specific message to clarify the role of empty images in container
+ registry
+merge_request: 32919
+author:
+type: changed
diff --git a/changelogs/unreleased/32930-matching-branch-code-owner-approval.yml b/changelogs/unreleased/32930-matching-branch-code-owner-approval.yml
new file mode 100644
index 00000000000..b2e1d6d5958
--- /dev/null
+++ b/changelogs/unreleased/32930-matching-branch-code-owner-approval.yml
@@ -0,0 +1,5 @@
+---
+title: Add matching branch info to branch column
+merge_request: 18352
+author:
+type: added
diff --git a/changelogs/unreleased/33158-time-window-filter-dropdown-doesn-t-retain-previously-selected-wind.yml b/changelogs/unreleased/33158-time-window-filter-dropdown-doesn-t-retain-previously-selected-wind.yml
new file mode 100644
index 00000000000..16951ac7051
--- /dev/null
+++ b/changelogs/unreleased/33158-time-window-filter-dropdown-doesn-t-retain-previously-selected-wind.yml
@@ -0,0 +1,5 @@
+---
+title: Time window filter in monitor dashboard gets reset
+merge_request: 17972
+author:
+type: fixed
diff --git a/changelogs/unreleased/33230-undefined-method-terms_of_service_url.yml b/changelogs/unreleased/33230-undefined-method-terms_of_service_url.yml
new file mode 100644
index 00000000000..547612ccf39
--- /dev/null
+++ b/changelogs/unreleased/33230-undefined-method-terms_of_service_url.yml
@@ -0,0 +1,5 @@
+---
+title: Fix 500 error on clicking to LetsEncrypt Terms of Service
+merge_request: 18263
+author:
+type: fixed
diff --git a/changelogs/unreleased/33322-missing-page-title-on-projects-container-registry.yml b/changelogs/unreleased/33322-missing-page-title-on-projects-container-registry.yml
new file mode 100644
index 00000000000..94c46c9d057
--- /dev/null
+++ b/changelogs/unreleased/33322-missing-page-title-on-projects-container-registry.yml
@@ -0,0 +1,5 @@
+---
+title: Add missing page title to projects/container-registry
+merge_request: 18114
+author:
+type: changed
diff --git a/changelogs/unreleased/33337-fix-insights-only-projects-for-project.yml b/changelogs/unreleased/33337-fix-insights-only-projects-for-project.yml
new file mode 100644
index 00000000000..7dea4519d10
--- /dev/null
+++ b/changelogs/unreleased/33337-fix-insights-only-projects-for-project.yml
@@ -0,0 +1,5 @@
+---
+title: Make sure project insights stick on its own
+merge_request: 18082
+author:
+type: fixed
diff --git a/changelogs/unreleased/33405-container-registry-improve-delete-modal-button.yml b/changelogs/unreleased/33405-container-registry-improve-delete-modal-button.yml
new file mode 100644
index 00000000000..23ebd3b038e
--- /dev/null
+++ b/changelogs/unreleased/33405-container-registry-improve-delete-modal-button.yml
@@ -0,0 +1,5 @@
+---
+title: Container registry tag(s) delete button pluralization
+merge_request: 18260
+author:
+type: changed
diff --git a/changelogs/unreleased/33582-fix-protected-branch-wildcard.yml b/changelogs/unreleased/33582-fix-protected-branch-wildcard.yml
new file mode 100644
index 00000000000..091a88f80a5
--- /dev/null
+++ b/changelogs/unreleased/33582-fix-protected-branch-wildcard.yml
@@ -0,0 +1,5 @@
+---
+title: Fix protected branch detection used by notification service
+merge_request: 18221
+author:
+type: fixed
diff --git a/changelogs/unreleased/33668-fix-search-term-xss.yml b/changelogs/unreleased/33668-fix-search-term-xss.yml
new file mode 100644
index 00000000000..ed54542bd9c
--- /dev/null
+++ b/changelogs/unreleased/33668-fix-search-term-xss.yml
@@ -0,0 +1,5 @@
+---
+title: HTML-escape search term in empty message
+merge_request: 18319
+author:
+type: security
diff --git a/changelogs/unreleased/33750-follow-up-from-resolve-deactivate-a-user-with-self-service-reactiva.yml b/changelogs/unreleased/33750-follow-up-from-resolve-deactivate-a-user-with-self-service-reactiva.yml
new file mode 100644
index 00000000000..7fca33c0cd2
--- /dev/null
+++ b/changelogs/unreleased/33750-follow-up-from-resolve-deactivate-a-user-with-self-service-reactiva.yml
@@ -0,0 +1,5 @@
+---
+title: Do not allow deactivated users to use slash commands
+merge_request: 18365
+author:
+type: fixed
diff --git a/changelogs/unreleased/33876-ensure-proper-access-level-check-on-pa.yml b/changelogs/unreleased/33876-ensure-proper-access-level-check-on-pa.yml
new file mode 100644
index 00000000000..686382c7caf
--- /dev/null
+++ b/changelogs/unreleased/33876-ensure-proper-access-level-check-on-pa.yml
@@ -0,0 +1,5 @@
+---
+title: Allow to view productivity analytics page without a license
+merge_request: 33876
+author:
+type: fixed
diff --git a/changelogs/unreleased/34032-container-registry-bug-on-modal-delete-button-and-title-text.yml b/changelogs/unreleased/34032-container-registry-bug-on-modal-delete-button-and-title-text.yml
new file mode 100644
index 00000000000..a4d3e62a48a
--- /dev/null
+++ b/changelogs/unreleased/34032-container-registry-bug-on-modal-delete-button-and-title-text.yml
@@ -0,0 +1,5 @@
+---
+title: Fix container registry delete tag modal title and button
+merge_request: 34032
+author:
+type: fixed
diff --git a/changelogs/unreleased/34120-design-system-notes-icon-does-not-appear.yml b/changelogs/unreleased/34120-design-system-notes-icon-does-not-appear.yml
new file mode 100644
index 00000000000..8533067a408
--- /dev/null
+++ b/changelogs/unreleased/34120-design-system-notes-icon-does-not-appear.yml
@@ -0,0 +1,5 @@
+---
+title: Resolve missing design system notes icons
+merge_request: 18693
+author:
+type: fixed
diff --git a/changelogs/unreleased/45797-welcome-screen.yml b/changelogs/unreleased/45797-welcome-screen.yml
new file mode 100644
index 00000000000..4f0868c484f
--- /dev/null
+++ b/changelogs/unreleased/45797-welcome-screen.yml
@@ -0,0 +1,5 @@
+---
+title: Fix formatting welcome screen external users
+merge_request: 16667
+author:
+type: fixed
diff --git a/changelogs/unreleased/46686-add-aws-cluster-data-model.yml b/changelogs/unreleased/46686-add-aws-cluster-data-model.yml
new file mode 100644
index 00000000000..130c4c0c855
--- /dev/null
+++ b/changelogs/unreleased/46686-add-aws-cluster-data-model.yml
@@ -0,0 +1,5 @@
+---
+title: Add database tables to store AWS roles and cluster providers
+merge_request: 17057
+author:
+type: added
diff --git a/changelogs/unreleased/53041-groups-named-shared.yml b/changelogs/unreleased/53041-groups-named-shared.yml
new file mode 100644
index 00000000000..165b6727fe9
--- /dev/null
+++ b/changelogs/unreleased/53041-groups-named-shared.yml
@@ -0,0 +1,5 @@
+---
+title: Naming a project "shared" will no longer automatically open the "Shared Projects" tab.
+merge_request: 16847
+author: Jesse Hall @jessehall3
+type: fixed
diff --git a/changelogs/unreleased/5582-add-missing-actions-and-data-to-environments-and-deployments-apis.yml b/changelogs/unreleased/5582-add-missing-actions-and-data-to-environments-and-deployments-apis.yml
new file mode 100644
index 00000000000..7c90834385f
--- /dev/null
+++ b/changelogs/unreleased/5582-add-missing-actions-and-data-to-environments-and-deployments-apis.yml
@@ -0,0 +1,5 @@
+---
+title: Add status to deployments and state to environments in API responses
+merge_request: 16242
+author:
+type: changed
diff --git a/changelogs/unreleased/59036-object-to-local-storage.yml b/changelogs/unreleased/59036-object-to-local-storage.yml
new file mode 100644
index 00000000000..213361b7b7e
--- /dev/null
+++ b/changelogs/unreleased/59036-object-to-local-storage.yml
@@ -0,0 +1,5 @@
+---
+title: "[ObjectStorage] Allow migrating back to local storage"
+merge_request: 16868
+author:
+type: added
diff --git a/changelogs/unreleased/61061-links-to-sha-commits-in-release-notes.yml b/changelogs/unreleased/61061-links-to-sha-commits-in-release-notes.yml
new file mode 100644
index 00000000000..554d30c9dc5
--- /dev/null
+++ b/changelogs/unreleased/61061-links-to-sha-commits-in-release-notes.yml
@@ -0,0 +1,5 @@
+---
+title: Links on Releases page to commits and tags
+merge_request: 16128
+author:
+type: changed
diff --git a/changelogs/unreleased/61078-empty-state-file-finder.yml b/changelogs/unreleased/61078-empty-state-file-finder.yml
new file mode 100644
index 00000000000..694ac4a3b7c
--- /dev/null
+++ b/changelogs/unreleased/61078-empty-state-file-finder.yml
@@ -0,0 +1,5 @@
+---
+title: Add empty state in file search
+merge_request: 16851
+author:
+type: changed
diff --git a/changelogs/unreleased/61933-toggling-a-task-inside-a-collapsible-section-collapses-all-sections.yml b/changelogs/unreleased/61933-toggling-a-task-inside-a-collapsible-section-collapses-all-sections.yml
new file mode 100644
index 00000000000..2239bffcd5e
--- /dev/null
+++ b/changelogs/unreleased/61933-toggling-a-task-inside-a-collapsible-section-collapses-all-sections.yml
@@ -0,0 +1,6 @@
+---
+title: When user toggles task list item, keep details open until user closes the details
+ manually
+merge_request: 16153
+author:
+type: fixed
diff --git a/changelogs/unreleased/63768-group-settings-kubernetes-runner-section.yml b/changelogs/unreleased/63768-group-settings-kubernetes-runner-section.yml
new file mode 100644
index 00000000000..ed374922632
--- /dev/null
+++ b/changelogs/unreleased/63768-group-settings-kubernetes-runner-section.yml
@@ -0,0 +1,5 @@
+---
+title: Add kubernetes section to group runner settings
+merge_request: 16338
+author:
+type: added
diff --git a/changelogs/unreleased/63921-deactivate-a-user-with-self-service-reactivation.yml b/changelogs/unreleased/63921-deactivate-a-user-with-self-service-reactivation.yml
new file mode 100644
index 00000000000..5f4d9e41e04
--- /dev/null
+++ b/changelogs/unreleased/63921-deactivate-a-user-with-self-service-reactivation.yml
@@ -0,0 +1,5 @@
+---
+title: Deactivate a user (with self-service reactivation)
+merge_request: 17037
+author:
+type: added
diff --git a/changelogs/unreleased/64251-branch-name-set-cache.yml b/changelogs/unreleased/64251-branch-name-set-cache.yml
new file mode 100644
index 00000000000..6ce4bdf5e43
--- /dev/null
+++ b/changelogs/unreleased/64251-branch-name-set-cache.yml
@@ -0,0 +1,5 @@
+---
+title: Cache branch and tag names as Redis sets
+merge_request: 30476
+author:
+type: performance
diff --git a/changelogs/unreleased/64837-persist-refs-over-browser-tabs.yml b/changelogs/unreleased/64837-persist-refs-over-browser-tabs.yml
new file mode 100644
index 00000000000..68042383ed6
--- /dev/null
+++ b/changelogs/unreleased/64837-persist-refs-over-browser-tabs.yml
@@ -0,0 +1,5 @@
+---
+title: persist the refs when open the link of refs in a new tab of browser
+merge_request: 31998
+author: minghuan lei
+type: added
diff --git a/changelogs/unreleased/66123-over-a-thousand-todos-displays-count-of-one.yml b/changelogs/unreleased/66123-over-a-thousand-todos-displays-count-of-one.yml
new file mode 100644
index 00000000000..3feb8539378
--- /dev/null
+++ b/changelogs/unreleased/66123-over-a-thousand-todos-displays-count-of-one.yml
@@ -0,0 +1,6 @@
+---
+title: Fix for count in todo badge when user has over 1,000 todos. Will now correctly
+ display todo count after user marks some todos as done.
+merge_request: 16844
+author: Jesse Hall @jessehall3
+type: fixed
diff --git a/changelogs/unreleased/66330-confidential-quick-action-is-available-for-confidential-issues.yml b/changelogs/unreleased/66330-confidential-quick-action-is-available-for-confidential-issues.yml
new file mode 100644
index 00000000000..4ed18adb7e2
--- /dev/null
+++ b/changelogs/unreleased/66330-confidential-quick-action-is-available-for-confidential-issues.yml
@@ -0,0 +1,5 @@
+---
+title: Changed confidential quick action to only be available on non confidential issues
+merge_request: 16902
+author: Marc Schwede
+type: fixed
diff --git a/changelogs/unreleased/9102-update-hide-dismissed-param.yml b/changelogs/unreleased/9102-update-hide-dismissed-param.yml
new file mode 100644
index 00000000000..0bc2146b0c1
--- /dev/null
+++ b/changelogs/unreleased/9102-update-hide-dismissed-param.yml
@@ -0,0 +1,5 @@
+---
+title: Use scope param instead of hide_dismissed
+merge_request: 16834
+author:
+type: changed
diff --git a/changelogs/unreleased/9801-epic-copy-link.yml b/changelogs/unreleased/9801-epic-copy-link.yml
new file mode 100644
index 00000000000..c3d24010a59
--- /dev/null
+++ b/changelogs/unreleased/9801-epic-copy-link.yml
@@ -0,0 +1,5 @@
+---
+title: Added 'copy link' in epic comment dropdown.
+merge_request: 17224
+author:
+type: added
diff --git a/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml b/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml
new file mode 100644
index 00000000000..037e63c4813
--- /dev/null
+++ b/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml
@@ -0,0 +1,5 @@
+---
+title: Allow users to compare Git revisions on a read-only instance
+merge_request: 18038
+author:
+type: fixed
diff --git a/changelogs/unreleased/ab-iid-unnecessary-locks.yml b/changelogs/unreleased/ab-iid-unnecessary-locks.yml
new file mode 100644
index 00000000000..cbdef4ffa87
--- /dev/null
+++ b/changelogs/unreleased/ab-iid-unnecessary-locks.yml
@@ -0,0 +1,5 @@
+---
+title: Avoid unnecessary locks on internal_ids
+merge_request: 18328
+author:
+type: performance
diff --git a/changelogs/unreleased/ab-replace-index.yml b/changelogs/unreleased/ab-replace-index.yml
new file mode 100644
index 00000000000..3e8586d2ad1
--- /dev/null
+++ b/changelogs/unreleased/ab-replace-index.yml
@@ -0,0 +1,5 @@
+---
+title: Replace index on ci_triggers
+merge_request: 18652
+author:
+type: performance
diff --git a/changelogs/unreleased/ac-fix-only-os-uplods.yml b/changelogs/unreleased/ac-fix-only-os-uplods.yml
new file mode 100644
index 00000000000..d63ddc059b6
--- /dev/null
+++ b/changelogs/unreleased/ac-fix-only-os-uplods.yml
@@ -0,0 +1,5 @@
+---
+title: Avoid dumping files on disk when direct_upload is enabled
+merge_request: 18135
+author:
+type: performance
diff --git a/changelogs/unreleased/ac-pull-mirror-branch-prefix.yml b/changelogs/unreleased/ac-pull-mirror-branch-prefix.yml
new file mode 100644
index 00000000000..b39308ea38a
--- /dev/null
+++ b/changelogs/unreleased/ac-pull-mirror-branch-prefix.yml
@@ -0,0 +1,5 @@
+---
+title: Add pull_mirror_branch_prefix column on projects table
+merge_request: 17368
+author:
+type: added
diff --git a/changelogs/unreleased/ac-workhorse-8-11-0.yml b/changelogs/unreleased/ac-workhorse-8-11-0.yml
new file mode 100644
index 00000000000..1f86416449e
--- /dev/null
+++ b/changelogs/unreleased/ac-workhorse-8-11-0.yml
@@ -0,0 +1,5 @@
+---
+title: Handle wiki and graphql attachments in gitlab-workhorse
+merge_request: 17690
+author:
+type: performance
diff --git a/changelogs/unreleased/add-ansi2json-log-parser.yml b/changelogs/unreleased/add-ansi2json-log-parser.yml
new file mode 100644
index 00000000000..1aec5d36fbe
--- /dev/null
+++ b/changelogs/unreleased/add-ansi2json-log-parser.yml
@@ -0,0 +1,5 @@
+---
+title: Introduce new Ansi2json parser to convert job logs to JSON
+merge_request: 18133
+author:
+type: added
diff --git a/changelogs/unreleased/add-ci-project-title-variable.yml b/changelogs/unreleased/add-ci-project-title-variable.yml
new file mode 100644
index 00000000000..68f650a8f58
--- /dev/null
+++ b/changelogs/unreleased/add-ci-project-title-variable.yml
@@ -0,0 +1,5 @@
+---
+title: Introduce CI_PROJECT_TITLE as predefined environment variable
+merge_request: 17849
+author: Nejc Habjan
+type: added
diff --git a/changelogs/unreleased/add-first-parent-to-find-commits.yml b/changelogs/unreleased/add-first-parent-to-find-commits.yml
new file mode 100644
index 00000000000..076eed90f68
--- /dev/null
+++ b/changelogs/unreleased/add-first-parent-to-find-commits.yml
@@ -0,0 +1,5 @@
+---
+title: Add first_parent option to list commits api
+merge_request: 32410
+author: jhenkens
+type: added
diff --git a/changelogs/unreleased/add-health-checks-exporter.yml b/changelogs/unreleased/add-health-checks-exporter.yml
new file mode 100644
index 00000000000..7ffce51b82c
--- /dev/null
+++ b/changelogs/unreleased/add-health-checks-exporter.yml
@@ -0,0 +1,5 @@
+---
+title: Export liveness and readiness probes
+merge_request:
+author:
+type: changed
diff --git a/changelogs/unreleased/add-sorting-to-packages-list.yml b/changelogs/unreleased/add-sorting-to-packages-list.yml
new file mode 100644
index 00000000000..8eab37326a1
--- /dev/null
+++ b/changelogs/unreleased/add-sorting-to-packages-list.yml
@@ -0,0 +1,5 @@
+---
+title: Adds sorting of packages at the project level
+merge_request: 15448
+author:
+type: added
diff --git a/changelogs/unreleased/add-timestamps-to-api-deployments-response.yml b/changelogs/unreleased/add-timestamps-to-api-deployments-response.yml
new file mode 100644
index 00000000000..f136efc088d
--- /dev/null
+++ b/changelogs/unreleased/add-timestamps-to-api-deployments-response.yml
@@ -0,0 +1,5 @@
+---
+title: Added timestamp (updated_at) to API deployments response
+merge_request: 17913
+author:
+type: added
diff --git a/changelogs/unreleased/add-timestamps-to-api-pipelines-response.yml b/changelogs/unreleased/add-timestamps-to-api-pipelines-response.yml
new file mode 100644
index 00000000000..54975d3229d
--- /dev/null
+++ b/changelogs/unreleased/add-timestamps-to-api-pipelines-response.yml
@@ -0,0 +1,5 @@
+---
+title: Added timestamps (created_at and updated_at) to API pipelines response
+merge_request: 17911
+author:
+type: added
diff --git a/changelogs/unreleased/ak-health-check-custom-error.yml b/changelogs/unreleased/ak-health-check-custom-error.yml
new file mode 100644
index 00000000000..dd9ef8f9c7a
--- /dev/null
+++ b/changelogs/unreleased/ak-health-check-custom-error.yml
@@ -0,0 +1,5 @@
+---
+title: Disable gitlab-workhorse static error page on health endpoints
+merge_request: 17770
+author:
+type: fixed
diff --git a/changelogs/unreleased/ak-unhandled-exception-in-health-checks.yml b/changelogs/unreleased/ak-unhandled-exception-in-health-checks.yml
new file mode 100644
index 00000000000..a738cbb0369
--- /dev/null
+++ b/changelogs/unreleased/ak-unhandled-exception-in-health-checks.yml
@@ -0,0 +1,5 @@
+---
+title: Catch unhandled exceptions in health checks
+merge_request: 17694
+author:
+type: fixed
diff --git a/changelogs/unreleased/ak-upgrade-workhorse.yml b/changelogs/unreleased/ak-upgrade-workhorse.yml
new file mode 100644
index 00000000000..f92e8f876a6
--- /dev/null
+++ b/changelogs/unreleased/ak-upgrade-workhorse.yml
@@ -0,0 +1,5 @@
+---
+title: Upgrade gitlab-workhorse to 8.12.0
+merge_request: 17892
+author:
+type: changed
diff --git a/changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml b/changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml
new file mode 100644
index 00000000000..f266d197c6c
--- /dev/null
+++ b/changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml
@@ -0,0 +1,5 @@
+---
+title: Add individual inherited member lookup API
+merge_request: 17744
+author:
+type: added
diff --git a/changelogs/unreleased/allow-username-search-to-work-with-at-sign.yml b/changelogs/unreleased/allow-username-search-to-work-with-at-sign.yml
new file mode 100644
index 00000000000..fa6d679f7a2
--- /dev/null
+++ b/changelogs/unreleased/allow-username-search-to-work-with-at-sign.yml
@@ -0,0 +1,5 @@
+---
+title: Allow users to be searched with a @ prefix
+merge_request: 17742
+author:
+type: added
diff --git a/changelogs/unreleased/an-priority-bump-authorized_projects.yml b/changelogs/unreleased/an-priority-bump-authorized_projects.yml
new file mode 100644
index 00000000000..a52143698cd
--- /dev/null
+++ b/changelogs/unreleased/an-priority-bump-authorized_projects.yml
@@ -0,0 +1,5 @@
+---
+title: Priority bump authorized_projects sidekiq queue
+merge_request: 18125
+author:
+type: performance
diff --git a/changelogs/unreleased/an-sidekiq-job-feature-attribution.yml b/changelogs/unreleased/an-sidekiq-job-feature-attribution.yml
new file mode 100644
index 00000000000..6f5832dfef2
--- /dev/null
+++ b/changelogs/unreleased/an-sidekiq-job-feature-attribution.yml
@@ -0,0 +1,5 @@
+---
+title: Attribute each Sidekiq worker to a feature category
+merge_request: 18462
+author:
+type: other
diff --git a/changelogs/unreleased/ancestor_groups.yml b/changelogs/unreleased/ancestor_groups.yml
new file mode 100644
index 00000000000..1b5d6573b86
--- /dev/null
+++ b/changelogs/unreleased/ancestor_groups.yml
@@ -0,0 +1,5 @@
+---
+title: 'Allow to exclude ancestor groups on group labels API'
+merge_request: 17221
+author: Mathieu Parent
+type: added
diff --git a/changelogs/unreleased/backfill-releases-updated-at.yml b/changelogs/unreleased/backfill-releases-updated-at.yml
new file mode 100644
index 00000000000..dfaaf8cd41e
--- /dev/null
+++ b/changelogs/unreleased/backfill-releases-updated-at.yml
@@ -0,0 +1,5 @@
+---
+title: Backfill releases table updated_at column and add not null constraints to created_at and updated_at
+merge_request: 17400
+author:
+type: fixed
diff --git a/changelogs/unreleased/bjk-32646_puma_killer.yml b/changelogs/unreleased/bjk-32646_puma_killer.yml
new file mode 100644
index 00000000000..11318966a01
--- /dev/null
+++ b/changelogs/unreleased/bjk-32646_puma_killer.yml
@@ -0,0 +1,5 @@
+---
+title: Update PumaWorkerKiller defaults
+merge_request: 17758
+author:
+type: performance
diff --git a/changelogs/unreleased/bump-elasticsearch-indexer-to-v1-4-0.yml b/changelogs/unreleased/bump-elasticsearch-indexer-to-v1-4-0.yml
new file mode 100644
index 00000000000..561514a2dc4
--- /dev/null
+++ b/changelogs/unreleased/bump-elasticsearch-indexer-to-v1-4-0.yml
@@ -0,0 +1,5 @@
+---
+title: Bump GITLAB_ELASTICSEARCH_INDEXER_VERSION=v1.4.0
+merge_request: 18558
+author:
+type: fixed
diff --git a/changelogs/unreleased/bvl-fix-view-mr-deleted-repo.yml b/changelogs/unreleased/bvl-fix-view-mr-deleted-repo.yml
new file mode 100644
index 00000000000..ffd7135eec1
--- /dev/null
+++ b/changelogs/unreleased/bvl-fix-view-mr-deleted-repo.yml
@@ -0,0 +1,5 @@
+---
+title: Fix viewing merge reqeust from a fork that's being deleted
+merge_request: 17894
+author:
+type: fixed
diff --git a/changelogs/unreleased/bvl-only-one-pushmirror-per-push.yml b/changelogs/unreleased/bvl-only-one-pushmirror-per-push.yml
new file mode 100644
index 00000000000..29090739d8b
--- /dev/null
+++ b/changelogs/unreleased/bvl-only-one-pushmirror-per-push.yml
@@ -0,0 +1,5 @@
+---
+title: Only schedule updating push-mirrors once per push
+merge_request: 17902
+author:
+type: performance
diff --git a/changelogs/unreleased/cache-issues-with-has_visible_content.yml b/changelogs/unreleased/cache-issues-with-has_visible_content.yml
new file mode 100644
index 00000000000..0007b3086e8
--- /dev/null
+++ b/changelogs/unreleased/cache-issues-with-has_visible_content.yml
@@ -0,0 +1,5 @@
+---
+title: Use cache_method_asymmetrically with Repository#has_visible_content?
+merge_request: 17975
+author:
+type: fixed
diff --git a/changelogs/unreleased/cluster_management_projects.yml b/changelogs/unreleased/cluster_management_projects.yml
new file mode 100644
index 00000000000..9958537f25f
--- /dev/null
+++ b/changelogs/unreleased/cluster_management_projects.yml
@@ -0,0 +1,5 @@
+---
+title: Adds management project for a cluster
+merge_request: 17866
+author:
+type: changed
diff --git a/changelogs/unreleased/dedicated-pipeline-ref.yml b/changelogs/unreleased/dedicated-pipeline-ref.yml
new file mode 100644
index 00000000000..6484bab1da4
--- /dev/null
+++ b/changelogs/unreleased/dedicated-pipeline-ref.yml
@@ -0,0 +1,6 @@
+---
+title: Create a persistent ref per pipeline for keeping pipelines run from force-push
+ and merged results
+merge_request: 17043
+author:
+type: fixed
diff --git a/changelogs/unreleased/deployment-iid-transaction-improvement.yml b/changelogs/unreleased/deployment-iid-transaction-improvement.yml
new file mode 100644
index 00000000000..aefc3349c35
--- /dev/null
+++ b/changelogs/unreleased/deployment-iid-transaction-improvement.yml
@@ -0,0 +1,6 @@
+---
+title: Reduce lock contention of deployment creation by allocating IID outside
+ of the pipeline transaction
+merge_request: 17696
+author:
+type: performance
diff --git a/changelogs/unreleased/deployments-api.yml b/changelogs/unreleased/deployments-api.yml
new file mode 100644
index 00000000000..dce1763bdf1
--- /dev/null
+++ b/changelogs/unreleased/deployments-api.yml
@@ -0,0 +1,5 @@
+---
+title: Add API for manually creating and updating deployments
+merge_request: 17620
+author:
+type: added
diff --git a/changelogs/unreleased/dz-fix-group-settings-projects-page.yml b/changelogs/unreleased/dz-fix-group-settings-projects-page.yml
new file mode 100644
index 00000000000..9d5b93f9a50
--- /dev/null
+++ b/changelogs/unreleased/dz-fix-group-settings-projects-page.yml
@@ -0,0 +1,5 @@
+---
+title: Improve UI for admin/projects and group/settings/projects pages
+merge_request: 17247
+author:
+type: changed
diff --git a/changelogs/unreleased/dz-improve-groups-list-ui.yml b/changelogs/unreleased/dz-improve-groups-list-ui.yml
new file mode 100644
index 00000000000..36460eb911a
--- /dev/null
+++ b/changelogs/unreleased/dz-improve-groups-list-ui.yml
@@ -0,0 +1,5 @@
+---
+title: Increase group avatar size to 40px
+merge_request: 18654
+author:
+type: changed
diff --git a/changelogs/unreleased/dz-improve-help-layout.yml b/changelogs/unreleased/dz-improve-help-layout.yml
new file mode 100644
index 00000000000..2e4d885e2c2
--- /dev/null
+++ b/changelogs/unreleased/dz-improve-help-layout.yml
@@ -0,0 +1,5 @@
+---
+title: Improve UI of documentation under /help
+merge_request: 18331
+author:
+type: changed
diff --git a/changelogs/unreleased/dz-redesign-admin-system-info.yml b/changelogs/unreleased/dz-redesign-admin-system-info.yml
new file mode 100644
index 00000000000..f86f6c6d603
--- /dev/null
+++ b/changelogs/unreleased/dz-redesign-admin-system-info.yml
@@ -0,0 +1,5 @@
+---
+title: Improve admin/system_info page ui
+merge_request: 17829
+author:
+type: changed
diff --git a/changelogs/unreleased/eb-fix-ci-status-indicator-for-warnings.yml b/changelogs/unreleased/eb-fix-ci-status-indicator-for-warnings.yml
new file mode 100644
index 00000000000..efc3238a267
--- /dev/null
+++ b/changelogs/unreleased/eb-fix-ci-status-indicator-for-warnings.yml
@@ -0,0 +1,5 @@
+---
+title: Show correct CI indicator when build succeeded with warnings.
+merge_request: 17034
+author:
+type: fixed
diff --git a/changelogs/unreleased/eb-missing-dependencies-custom-callout-message.yml b/changelogs/unreleased/eb-missing-dependencies-custom-callout-message.yml
new file mode 100644
index 00000000000..eda37da11b4
--- /dev/null
+++ b/changelogs/unreleased/eb-missing-dependencies-custom-callout-message.yml
@@ -0,0 +1,6 @@
+---
+title: Include in the callout message a list of jobs that caused missing dependencies
+ failure.
+merge_request: 18219
+author:
+type: added
diff --git a/changelogs/unreleased/eb-project-group-max-artifacts-size-fields.yml b/changelogs/unreleased/eb-project-group-max-artifacts-size-fields.yml
new file mode 100644
index 00000000000..8e911ffead5
--- /dev/null
+++ b/changelogs/unreleased/eb-project-group-max-artifacts-size-fields.yml
@@ -0,0 +1,5 @@
+---
+title: Add max_artifacts_size fields under project and group settings.
+merge_request: 18286
+author:
+type: added
diff --git a/changelogs/unreleased/eb-support-test-report-error-key.yml b/changelogs/unreleased/eb-support-test-report-error-key.yml
new file mode 100644
index 00000000000..304e9814529
--- /dev/null
+++ b/changelogs/unreleased/eb-support-test-report-error-key.yml
@@ -0,0 +1,5 @@
+---
+title: MR Test Summary now shows errors as failures.
+merge_request: 17039
+author:
+type: changed
diff --git a/changelogs/unreleased/ee-16726-signup-not-disabled.yml b/changelogs/unreleased/ee-16726-signup-not-disabled.yml
new file mode 100644
index 00000000000..eb0482f7046
--- /dev/null
+++ b/changelogs/unreleased/ee-16726-signup-not-disabled.yml
@@ -0,0 +1,5 @@
+---
+title: Fix signup link in admin area not being disabled
+merge_request: 16726
+author: Illya Klymov
+type: fixed
diff --git a/changelogs/unreleased/expose-name-property-in-import-api.yml b/changelogs/unreleased/expose-name-property-in-import-api.yml
new file mode 100644
index 00000000000..9a0fb581321
--- /dev/null
+++ b/changelogs/unreleased/expose-name-property-in-import-api.yml
@@ -0,0 +1,5 @@
+---
+title: Expose name property in imports API
+merge_request: 16848
+author:
+type: added
diff --git a/changelogs/unreleased/feat-user-mode-in-session-for-admins.yml b/changelogs/unreleased/feat-user-mode-in-session-for-admins.yml
new file mode 100644
index 00000000000..ea8760d5224
--- /dev/null
+++ b/changelogs/unreleased/feat-user-mode-in-session-for-admins.yml
@@ -0,0 +1,6 @@
+---
+title: Require admins to enter admin-mode by re-authenticating before performing
+ administrative operations
+merge_request: 16981
+author: Roger Rüttimann & Diego Louzán
+type: added
diff --git a/changelogs/unreleased/feature-add-copyable-login-with-copy-to-empty-container-registry-view.yml b/changelogs/unreleased/feature-add-copyable-login-with-copy-to-empty-container-registry-view.yml
new file mode 100644
index 00000000000..6d7a773120b
--- /dev/null
+++ b/changelogs/unreleased/feature-add-copyable-login-with-copy-to-empty-container-registry-view.yml
@@ -0,0 +1,5 @@
+---
+title: Adds login input with copy box and supporting copy to empty container registry view
+merge_request: 18244
+author: nate geslin
+type: added
diff --git a/changelogs/unreleased/feature-default-cluster-to-vpc-enabled.yml b/changelogs/unreleased/feature-default-cluster-to-vpc-enabled.yml
new file mode 100644
index 00000000000..feb000554a8
--- /dev/null
+++ b/changelogs/unreleased/feature-default-cluster-to-vpc-enabled.yml
@@ -0,0 +1,5 @@
+---
+title: Create clusters with VPC-Native enabled
+merge_request: 18284
+author:
+type: changed
diff --git a/changelogs/unreleased/feature-ignore-prometheus-metrics-not-present.yml b/changelogs/unreleased/feature-ignore-prometheus-metrics-not-present.yml
new file mode 100644
index 00000000000..ab480548387
--- /dev/null
+++ b/changelogs/unreleased/feature-ignore-prometheus-metrics-not-present.yml
@@ -0,0 +1,5 @@
+---
+title: Avoid knative and prometheus uninstall race condition
+merge_request: 18020
+author:
+type: changed
diff --git a/changelogs/unreleased/fix-cache-expiration-new-wiki-page.yml b/changelogs/unreleased/fix-cache-expiration-new-wiki-page.yml
new file mode 100644
index 00000000000..7bc0205ff1a
--- /dev/null
+++ b/changelogs/unreleased/fix-cache-expiration-new-wiki-page.yml
@@ -0,0 +1,5 @@
+---
+title: Fix bug with new wiki not being indexed
+merge_request: 18051
+author:
+type: fixed
diff --git a/changelogs/unreleased/fix-moved-help-doc-administration-monitoring-performance.yml b/changelogs/unreleased/fix-moved-help-doc-administration-monitoring-performance.yml
new file mode 100644
index 00000000000..2fe34855ee8
--- /dev/null
+++ b/changelogs/unreleased/fix-moved-help-doc-administration-monitoring-performance.yml
@@ -0,0 +1,5 @@
+---
+title: Fix moved help URL for monitoring performance
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/fix-n-plus-one-in-jira-github-api.yml b/changelogs/unreleased/fix-n-plus-one-in-jira-github-api.yml
new file mode 100644
index 00000000000..f8cc5985b0f
--- /dev/null
+++ b/changelogs/unreleased/fix-n-plus-one-in-jira-github-api.yml
@@ -0,0 +1,5 @@
+---
+title: Fix N+1 queries in Jira Development Panel API endpoint
+merge_request: 18329
+author:
+type: performance
diff --git a/changelogs/unreleased/fix-service-desk-forward.yml b/changelogs/unreleased/fix-service-desk-forward.yml
new file mode 100644
index 00000000000..e675eaf9b39
--- /dev/null
+++ b/changelogs/unreleased/fix-service-desk-forward.yml
@@ -0,0 +1,6 @@
+---
+title: Do not strip forwarded message body when creating an issue from Service Desk
+ email.
+merge_request: 18196
+author:
+type: fixed
diff --git a/changelogs/unreleased/fix-set-status-emoji-button.yml b/changelogs/unreleased/fix-set-status-emoji-button.yml
new file mode 100644
index 00000000000..e7a8c119c91
--- /dev/null
+++ b/changelogs/unreleased/fix-set-status-emoji-button.yml
@@ -0,0 +1,5 @@
+---
+title: Fix styling of set status emoji picker
+merge_request: 18509
+author:
+type: fixed
diff --git a/changelogs/unreleased/fj-26123-narrow-snippet-search-scope-in-com.yml b/changelogs/unreleased/fj-26123-narrow-snippet-search-scope-in-com.yml
new file mode 100644
index 00000000000..a5f670257e1
--- /dev/null
+++ b/changelogs/unreleased/fj-26123-narrow-snippet-search-scope-in-com.yml
@@ -0,0 +1,5 @@
+---
+title: Narrow snippet search scope in GitLab.com
+merge_request: 17625
+author:
+type: performance
diff --git a/changelogs/unreleased/fj-28429-generate-lfs-token-authorization.yml b/changelogs/unreleased/fj-28429-generate-lfs-token-authorization.yml
new file mode 100644
index 00000000000..2b5ddb4ab7c
--- /dev/null
+++ b/changelogs/unreleased/fj-28429-generate-lfs-token-authorization.yml
@@ -0,0 +1,5 @@
+---
+title: Generate LFS token authorization for user LFS requests
+merge_request: 17332
+author:
+type: fixed
diff --git a/changelogs/unreleased/fj-32643-limit-snippets-search-count.yml b/changelogs/unreleased/fj-32643-limit-snippets-search-count.yml
new file mode 100644
index 00000000000..8b5382f0a70
--- /dev/null
+++ b/changelogs/unreleased/fj-32643-limit-snippets-search-count.yml
@@ -0,0 +1,5 @@
+---
+title: Limit snippets search count
+merge_request: 17585
+author:
+type: performance
diff --git a/changelogs/unreleased/fj-32885-add-trigram-index-snippet-content.yml b/changelogs/unreleased/fj-32885-add-trigram-index-snippet-content.yml
new file mode 100644
index 00000000000..695098d41ff
--- /dev/null
+++ b/changelogs/unreleased/fj-32885-add-trigram-index-snippet-content.yml
@@ -0,0 +1,5 @@
+---
+title: Add trigram index on snippet content
+merge_request: 17806
+author:
+type: performance
diff --git a/changelogs/unreleased/fj-fix-smau-usage-counters.yml b/changelogs/unreleased/fj-fix-smau-usage-counters.yml
new file mode 100644
index 00000000000..3bc4bb348ee
--- /dev/null
+++ b/changelogs/unreleased/fj-fix-smau-usage-counters.yml
@@ -0,0 +1,5 @@
+---
+title: Move SMAU usage counters to the UsageData count field
+merge_request: 17074
+author:
+type: fixed
diff --git a/changelogs/unreleased/fork_gitlab_ci.yml b/changelogs/unreleased/fork_gitlab_ci.yml
new file mode 100644
index 00000000000..4b64fe735dd
--- /dev/null
+++ b/changelogs/unreleased/fork_gitlab_ci.yml
@@ -0,0 +1,5 @@
+---
+title: Preserve custom .gitlab-ci.yml config path when forking.
+merge_request: 17817
+author: Mathieu Parent
+type: added
diff --git a/changelogs/unreleased/geo-mk-add-custom-http-clone-url-root.yml b/changelogs/unreleased/geo-mk-add-custom-http-clone-url-root.yml
new file mode 100644
index 00000000000..5bd7cc1761d
--- /dev/null
+++ b/changelogs/unreleased/geo-mk-add-custom-http-clone-url-root.yml
@@ -0,0 +1,5 @@
+---
+title: Add "Custom HTTP Git clone URL root" setting
+merge_request: 18422
+author:
+type: added
diff --git a/changelogs/unreleased/georgekoltsov-add-github-importer-filtering.yml b/changelogs/unreleased/georgekoltsov-add-github-importer-filtering.yml
new file mode 100644
index 00000000000..9c7a8caea66
--- /dev/null
+++ b/changelogs/unreleased/georgekoltsov-add-github-importer-filtering.yml
@@ -0,0 +1,5 @@
+---
+title: Add GitHub & Gitea importers project filtering
+merge_request: 16823
+author:
+type: added
diff --git a/changelogs/unreleased/georgekoltsov-bitbucket-cloud-import-filtering.yml b/changelogs/unreleased/georgekoltsov-bitbucket-cloud-import-filtering.yml
new file mode 100644
index 00000000000..8fdbdb20d28
--- /dev/null
+++ b/changelogs/unreleased/georgekoltsov-bitbucket-cloud-import-filtering.yml
@@ -0,0 +1,5 @@
+---
+title: Add project filtering to Bitbucket Cloud import
+merge_request: 16828
+author:
+type: added
diff --git a/changelogs/unreleased/gitaly-1-64.yml b/changelogs/unreleased/gitaly-1-64.yml
new file mode 100644
index 00000000000..53ae64c9830
--- /dev/null
+++ b/changelogs/unreleased/gitaly-1-64.yml
@@ -0,0 +1,5 @@
+---
+title: Upgrade Gitaly to v1.64
+merge_request: 16788
+author:
+type: added
diff --git a/changelogs/unreleased/gitaly-version-v1.66.0.yml b/changelogs/unreleased/gitaly-version-v1.66.0.yml
new file mode 100644
index 00000000000..41a0e1ab87a
--- /dev/null
+++ b/changelogs/unreleased/gitaly-version-v1.66.0.yml
@@ -0,0 +1,5 @@
+---
+title: Upgrade to Gitaly v1.66.0
+merge_request: 17900
+author:
+type: changed
diff --git a/changelogs/unreleased/gitaly-version-v1.67.0.yml b/changelogs/unreleased/gitaly-version-v1.67.0.yml
new file mode 100644
index 00000000000..03846e4d4d8
--- /dev/null
+++ b/changelogs/unreleased/gitaly-version-v1.67.0.yml
@@ -0,0 +1,5 @@
+---
+title: Upgrade to Gitaly v1.67.0
+merge_request: 18326
+author:
+type: changed
diff --git a/changelogs/unreleased/github-release-importer-fixup.yml b/changelogs/unreleased/github-release-importer-fixup.yml
new file mode 100644
index 00000000000..3c688426ad2
--- /dev/null
+++ b/changelogs/unreleased/github-release-importer-fixup.yml
@@ -0,0 +1,5 @@
+---
+title: Set name and updated_at properly in GitHub ReleaseImporter
+merge_request: 17020
+author:
+type: fixed
diff --git a/changelogs/unreleased/graphql-epic-mutate.yml b/changelogs/unreleased/graphql-epic-mutate.yml
new file mode 100644
index 00000000000..322c069aa46
--- /dev/null
+++ b/changelogs/unreleased/graphql-epic-mutate.yml
@@ -0,0 +1,5 @@
+---
+title: Add support for epic update through GraphQL API.
+merge_request: 18440
+author:
+type: added
diff --git a/changelogs/unreleased/group_default_visibility.yml b/changelogs/unreleased/group_default_visibility.yml
new file mode 100644
index 00000000000..3816223c066
--- /dev/null
+++ b/changelogs/unreleased/group_default_visibility.yml
@@ -0,0 +1,5 @@
+---
+title: Fix visibility level error when updating group from API
+merge_request: 17227
+author: Mathieu Parent
+type: fixed
diff --git a/changelogs/unreleased/groups_api.yml b/changelogs/unreleased/groups_api.yml
new file mode 100644
index 00000000000..09e85c45811
--- /dev/null
+++ b/changelogs/unreleased/groups_api.yml
@@ -0,0 +1,5 @@
+---
+title: 'API: Add missing group parameters'
+merge_request: 17220
+author: Mathieu Parent
+type: added
diff --git a/changelogs/unreleased/id-blame-controller-performance.yml b/changelogs/unreleased/id-blame-controller-performance.yml
new file mode 100644
index 00000000000..2f7477adfde
--- /dev/null
+++ b/changelogs/unreleased/id-blame-controller-performance.yml
@@ -0,0 +1,5 @@
+---
+title: Optimize SQL requests for BlameController and CommitsController
+merge_request: 18342
+author:
+type: performance
diff --git a/changelogs/unreleased/id-cleanup-anny-approver-migrations.yml b/changelogs/unreleased/id-cleanup-anny-approver-migrations.yml
new file mode 100644
index 00000000000..979250d4762
--- /dev/null
+++ b/changelogs/unreleased/id-cleanup-anny-approver-migrations.yml
@@ -0,0 +1,5 @@
+---
+title: Cleanup background migrations for any approval rules
+merge_request: 18256
+author:
+type: changed
diff --git a/changelogs/unreleased/id-fix-nplus1-for-signatures.yml b/changelogs/unreleased/id-fix-nplus1-for-signatures.yml
new file mode 100644
index 00000000000..e060c771227
--- /dev/null
+++ b/changelogs/unreleased/id-fix-nplus1-for-signatures.yml
@@ -0,0 +1,5 @@
+---
+title: Remove N+1 for fetching commits signatures
+merge_request: 18389
+author:
+type: performance
diff --git a/changelogs/unreleased/id-merge-request-dependencies.yml b/changelogs/unreleased/id-merge-request-dependencies.yml
new file mode 100644
index 00000000000..7532979a9f6
--- /dev/null
+++ b/changelogs/unreleased/id-merge-request-dependencies.yml
@@ -0,0 +1,5 @@
+---
+title: Allow intra-project MR dependencies
+merge_request: 16799
+author:
+type: changed
diff --git a/changelogs/unreleased/ignore-autreply.yml b/changelogs/unreleased/ignore-autreply.yml
new file mode 100644
index 00000000000..69f9885a16f
--- /dev/null
+++ b/changelogs/unreleased/ignore-autreply.yml
@@ -0,0 +1,5 @@
+---
+title: Ignore incoming emails with X-Autoreply header.
+merge_request: 18118
+author:
+type: fixed
diff --git a/changelogs/unreleased/ignore-id-column-ci_build_trace_sections.yml b/changelogs/unreleased/ignore-id-column-ci_build_trace_sections.yml
new file mode 100644
index 00000000000..4208273be19
--- /dev/null
+++ b/changelogs/unreleased/ignore-id-column-ci_build_trace_sections.yml
@@ -0,0 +1,5 @@
+---
+title: Ignore id column of ci_build_trace_sections table
+merge_request: 17805
+author:
+type: change
diff --git a/changelogs/unreleased/improve-search-empty-message.yml b/changelogs/unreleased/improve-search-empty-message.yml
new file mode 100644
index 00000000000..cc9692c4fd6
--- /dev/null
+++ b/changelogs/unreleased/improve-search-empty-message.yml
@@ -0,0 +1,5 @@
+---
+title: Use search scope label in empty results message
+merge_request: 16324
+author:
+type: changed
diff --git a/changelogs/unreleased/increase-limit-for-recursively-include.yml b/changelogs/unreleased/increase-limit-for-recursively-include.yml
new file mode 100644
index 00000000000..5fed53e8f24
--- /dev/null
+++ b/changelogs/unreleased/increase-limit-for-recursively-include.yml
@@ -0,0 +1,5 @@
+---
+title: Increase the limit of includes in CI file to 100
+merge_request: 17807
+author:
+type: fixed
diff --git a/changelogs/unreleased/internationalization-time-series-wrapper.yml b/changelogs/unreleased/internationalization-time-series-wrapper.yml
new file mode 100644
index 00000000000..b49a2875c1c
--- /dev/null
+++ b/changelogs/unreleased/internationalization-time-series-wrapper.yml
@@ -0,0 +1,5 @@
+---
+title: Provides internationalization support to chart legends
+merge_request: 16832
+author:
+type: added
diff --git a/changelogs/unreleased/introduce-feature-flag-api.yml b/changelogs/unreleased/introduce-feature-flag-api.yml
new file mode 100644
index 00000000000..fa6c3be302f
--- /dev/null
+++ b/changelogs/unreleased/introduce-feature-flag-api.yml
@@ -0,0 +1,5 @@
+---
+title: Support Create/Read/Destroy operations in Feature Flag API
+merge_request: 18198
+author:
+type: added
diff --git a/changelogs/unreleased/issue_11240.yml b/changelogs/unreleased/issue_11240.yml
new file mode 100644
index 00000000000..751440d1e8c
--- /dev/null
+++ b/changelogs/unreleased/issue_11240.yml
@@ -0,0 +1,5 @@
+---
+title: Expose subscribed attribute for epic on API
+merge_request: 18475
+author:
+type: added
diff --git a/changelogs/unreleased/issue_11241.yml b/changelogs/unreleased/issue_11241.yml
new file mode 100644
index 00000000000..ff9364b4b5b
--- /dev/null
+++ b/changelogs/unreleased/issue_11241.yml
@@ -0,0 +1,5 @@
+---
+title: Expose web_url for epics on API
+merge_request: 17380
+author:
+type: added
diff --git a/changelogs/unreleased/issue_26823_sync_state_id.yml b/changelogs/unreleased/issue_26823_sync_state_id.yml
new file mode 100644
index 00000000000..fd3993d3b65
--- /dev/null
+++ b/changelogs/unreleased/issue_26823_sync_state_id.yml
@@ -0,0 +1,5 @@
+---
+title: Sync issuables state_id with null values
+merge_request: 16480
+author:
+type: other
diff --git a/changelogs/unreleased/issue_28457.yml b/changelogs/unreleased/issue_28457.yml
new file mode 100644
index 00000000000..51e19660ffc
--- /dev/null
+++ b/changelogs/unreleased/issue_28457.yml
@@ -0,0 +1,5 @@
+---
+title: Deprecate usage of state column for issues and merge requests
+merge_request: 18099
+author:
+type: changed
diff --git a/changelogs/unreleased/issue_32364.yml b/changelogs/unreleased/issue_32364.yml
new file mode 100644
index 00000000000..c68115ed707
--- /dev/null
+++ b/changelogs/unreleased/issue_32364.yml
@@ -0,0 +1,5 @@
+---
+title: Fix permissions for group milestones
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/jc-add-config-options-for-partial-clone.yml b/changelogs/unreleased/jc-add-config-options-for-partial-clone.yml
new file mode 100644
index 00000000000..72a6339aa78
--- /dev/null
+++ b/changelogs/unreleased/jc-add-config-options-for-partial-clone.yml
@@ -0,0 +1,5 @@
+---
+title: Add allowFilter and allowAnySHA1InWant for partial clones
+merge_request: 16850
+author:
+type: added
diff --git a/changelogs/unreleased/jc-optimize-uri-type.yml b/changelogs/unreleased/jc-optimize-uri-type.yml
new file mode 100644
index 00000000000..41625abe072
--- /dev/null
+++ b/changelogs/unreleased/jc-optimize-uri-type.yml
@@ -0,0 +1,5 @@
+---
+title: Use GetBlobs RPC for uri type
+merge_request: 16824
+author:
+type: performance
diff --git a/changelogs/unreleased/jc-remove-cleanup-rake-tasks.yml b/changelogs/unreleased/jc-remove-cleanup-rake-tasks.yml
new file mode 100644
index 00000000000..fd2d0e323e8
--- /dev/null
+++ b/changelogs/unreleased/jc-remove-cleanup-rake-tasks.yml
@@ -0,0 +1,5 @@
+---
+title: Removing cleanup:repo, cleanup:dirs
+merge_request: 18087
+author:
+type: deprecated
diff --git a/changelogs/unreleased/job_file_matching.yml b/changelogs/unreleased/job_file_matching.yml
new file mode 100644
index 00000000000..e74878471bd
--- /dev/null
+++ b/changelogs/unreleased/job_file_matching.yml
@@ -0,0 +1,5 @@
+---
+title: Add file matching rule to flexible CI rules
+merge_request: 16574
+author:
+type: added
diff --git a/changelogs/unreleased/jramsay-clarify-git-lfs-push-rule-behavior.yml b/changelogs/unreleased/jramsay-clarify-git-lfs-push-rule-behavior.yml
new file mode 100644
index 00000000000..ca85114e5ac
--- /dev/null
+++ b/changelogs/unreleased/jramsay-clarify-git-lfs-push-rule-behavior.yml
@@ -0,0 +1,5 @@
+---
+title: Document Git LFS and max file size interaction
+merge_request: 17609
+author:
+type: other
diff --git a/changelogs/unreleased/knative-0-7.yml b/changelogs/unreleased/knative-0-7.yml
new file mode 100644
index 00000000000..71c661bf306
--- /dev/null
+++ b/changelogs/unreleased/knative-0-7.yml
@@ -0,0 +1,5 @@
+---
+title: Knative version bump 0.6 -> 0.7
+merge_request: 17367
+author: Chris Baumbauer
+type: changed
diff --git a/changelogs/unreleased/labels_rest.yml b/changelogs/unreleased/labels_rest.yml
new file mode 100644
index 00000000000..e2b37ee2a11
--- /dev/null
+++ b/changelogs/unreleased/labels_rest.yml
@@ -0,0 +1,5 @@
+---
+title: Add proper label REST API for update, delete and promote
+merge_request: 17239
+author: Mathieu Parent
+type: added
diff --git a/changelogs/unreleased/mc-feature-show-setup-cicd-empty-repo.yml b/changelogs/unreleased/mc-feature-show-setup-cicd-empty-repo.yml
new file mode 100644
index 00000000000..3165159fdab
--- /dev/null
+++ b/changelogs/unreleased/mc-feature-show-setup-cicd-empty-repo.yml
@@ -0,0 +1,5 @@
+---
+title: Show the "Set up CI/CD" prompt in empty repositories when applicable.
+merge_request: 17274
+author: Ben McCormick
+type: changed
diff --git a/changelogs/unreleased/mc-fixes-wrong-link-on-protected-paths-admin-ui.yml b/changelogs/unreleased/mc-fixes-wrong-link-on-protected-paths-admin-ui.yml
new file mode 100644
index 00000000000..61e54f2f5e0
--- /dev/null
+++ b/changelogs/unreleased/mc-fixes-wrong-link-on-protected-paths-admin-ui.yml
@@ -0,0 +1,5 @@
+---
+title: Fixes wrong link on Protected paths admin settings
+merge_request: 17945
+author:
+type: other
diff --git a/changelogs/unreleased/mc-moves-protected-path-throttle-to-gitlab-rails.yml b/changelogs/unreleased/mc-moves-protected-path-throttle-to-gitlab-rails.yml
new file mode 100644
index 00000000000..47c6c926b42
--- /dev/null
+++ b/changelogs/unreleased/mc-moves-protected-path-throttle-to-gitlab-rails.yml
@@ -0,0 +1,5 @@
+---
+title: Allow users to configure protected paths from Admin panel
+merge_request: 31246
+author:
+type: added
diff --git a/changelogs/unreleased/mfluharty-add-mr-links-to-pipeline-view.yml b/changelogs/unreleased/mfluharty-add-mr-links-to-pipeline-view.yml
new file mode 100644
index 00000000000..e3bb00bc5bd
--- /dev/null
+++ b/changelogs/unreleased/mfluharty-add-mr-links-to-pipeline-view.yml
@@ -0,0 +1,5 @@
+---
+title: Show related merge requests in pipeline view
+merge_request: 18697
+author:
+type: added
diff --git a/changelogs/unreleased/mk-remove-flag-geo_object_storage_replication.yml b/changelogs/unreleased/mk-remove-flag-geo_object_storage_replication.yml
new file mode 100644
index 00000000000..8e2c6d4b093
--- /dev/null
+++ b/changelogs/unreleased/mk-remove-flag-geo_object_storage_replication.yml
@@ -0,0 +1,5 @@
+---
+title: 'Geo: Enable replicating uploads, LFS objects, and artifacts in Object Storage'
+merge_request: 18482
+author:
+type: added
diff --git a/changelogs/unreleased/mr-links-4-pipes.yml b/changelogs/unreleased/mr-links-4-pipes.yml
new file mode 100644
index 00000000000..8eed38963ea
--- /dev/null
+++ b/changelogs/unreleased/mr-links-4-pipes.yml
@@ -0,0 +1,5 @@
+---
+title: Use MR links in PipelinePresenter#ref_text for branch pipelines
+merge_request: 17947
+author:
+type: changed
diff --git a/changelogs/unreleased/nfriend-add-edit-button-to-release-blocks.yml b/changelogs/unreleased/nfriend-add-edit-button-to-release-blocks.yml
new file mode 100644
index 00000000000..ac0439f9f63
--- /dev/null
+++ b/changelogs/unreleased/nfriend-add-edit-button-to-release-blocks.yml
@@ -0,0 +1,5 @@
+---
+title: Add edit button to release blocks on Releases page
+merge_request: 18411
+author:
+type: added
diff --git a/changelogs/unreleased/nfriend-add-edit-release-page.yml b/changelogs/unreleased/nfriend-add-edit-release-page.yml
new file mode 100644
index 00000000000..5369ab6b19c
--- /dev/null
+++ b/changelogs/unreleased/nfriend-add-edit-release-page.yml
@@ -0,0 +1,5 @@
+---
+title: Add "Edit Release" page
+merge_request: 18033
+author:
+type: added
diff --git a/changelogs/unreleased/nfriend-allow-release-page-anchor-scrolling.yml b/changelogs/unreleased/nfriend-allow-release-page-anchor-scrolling.yml
new file mode 100644
index 00000000000..7b30852eba4
--- /dev/null
+++ b/changelogs/unreleased/nfriend-allow-release-page-anchor-scrolling.yml
@@ -0,0 +1,5 @@
+---
+title: Allow releases to be targeted by URL anchor links on the Releases page
+merge_request: 17150
+author:
+type: added
diff --git a/changelogs/unreleased/nfriend-fix-lin.yml b/changelogs/unreleased/nfriend-fix-lin.yml
new file mode 100644
index 00000000000..0b16eb9c1f4
--- /dev/null
+++ b/changelogs/unreleased/nfriend-fix-lin.yml
@@ -0,0 +1,5 @@
+---
+title: Fix button link foreground color
+merge_request: 18669
+author:
+type: fixed
diff --git a/changelogs/unreleased/nfriend-suppress-ajax-errors-again.yml b/changelogs/unreleased/nfriend-suppress-ajax-errors-again.yml
new file mode 100644
index 00000000000..04909152aa8
--- /dev/null
+++ b/changelogs/unreleased/nfriend-suppress-ajax-errors-again.yml
@@ -0,0 +1,5 @@
+---
+title: Suppress error messages shown when navigating to a new page
+merge_request: 17706
+author:
+type: fixed
diff --git a/changelogs/unreleased/not_silent_retry_failure.yml b/changelogs/unreleased/not_silent_retry_failure.yml
new file mode 100644
index 00000000000..bccd046db7b
--- /dev/null
+++ b/changelogs/unreleased/not_silent_retry_failure.yml
@@ -0,0 +1,5 @@
+---
+title: Stopped CRD apply retrying from allowing silent failures
+merge_request: 18421
+author:
+type: fixed
diff --git a/changelogs/unreleased/osw-diffs-metadata-endpoint.yml b/changelogs/unreleased/osw-diffs-metadata-endpoint.yml
new file mode 100644
index 00000000000..c8da00249f1
--- /dev/null
+++ b/changelogs/unreleased/osw-diffs-metadata-endpoint.yml
@@ -0,0 +1,5 @@
+---
+title: Introduce a lightweight diffs_metadata endpoint
+merge_request: 18104
+author:
+type: added
diff --git a/changelogs/unreleased/osw-unnappliable-suggestion-on-expanded-lines.yml b/changelogs/unreleased/osw-unnappliable-suggestion-on-expanded-lines.yml
new file mode 100644
index 00000000000..726ac455466
--- /dev/null
+++ b/changelogs/unreleased/osw-unnappliable-suggestion-on-expanded-lines.yml
@@ -0,0 +1,5 @@
+---
+title: Adjust unnapliable suggestions in expanded lines
+merge_request: 17286
+author:
+type: fixed
diff --git a/changelogs/unreleased/pages-1-11-0.yml b/changelogs/unreleased/pages-1-11-0.yml
new file mode 100644
index 00000000000..da798340ee2
--- /dev/null
+++ b/changelogs/unreleased/pages-1-11-0.yml
@@ -0,0 +1,5 @@
+---
+title: Update Pages to v1.11.0
+merge_request: 18010
+author:
+type: other
diff --git a/changelogs/unreleased/pages-per-project-size-limit-db.yml b/changelogs/unreleased/pages-per-project-size-limit-db.yml
new file mode 100644
index 00000000000..97a24b356e6
--- /dev/null
+++ b/changelogs/unreleased/pages-per-project-size-limit-db.yml
@@ -0,0 +1,5 @@
+---
+title: Add columns for per project/group max pages/artifacts sizes
+merge_request: 17231
+author:
+type: added
diff --git a/changelogs/unreleased/patch-29.yml b/changelogs/unreleased/patch-29.yml
new file mode 100644
index 00000000000..e5e1d639a69
--- /dev/null
+++ b/changelogs/unreleased/patch-29.yml
@@ -0,0 +1,5 @@
+---
+title: Better job naming for Docker.gitlab-ci.yml
+merge_request: 17218
+author: luca.orlandi@gmail.com
+type: other
diff --git a/changelogs/unreleased/performance-bar-warnings.yml b/changelogs/unreleased/performance-bar-warnings.yml
new file mode 100644
index 00000000000..d1d02ce9b94
--- /dev/null
+++ b/changelogs/unreleased/performance-bar-warnings.yml
@@ -0,0 +1,5 @@
+---
+title: Add warnings to performance bar when page shows signs of poor performance
+merge_request: 17612
+author:
+type: changed
diff --git a/changelogs/unreleased/preview_private_artifacts.yml b/changelogs/unreleased/preview_private_artifacts.yml
new file mode 100644
index 00000000000..9f5caad624c
--- /dev/null
+++ b/changelogs/unreleased/preview_private_artifacts.yml
@@ -0,0 +1,5 @@
+---
+title: Enable preview of private artifacts
+merge_request: 16675
+author: Tuomo Ala-Vannesluoma
+type: added
diff --git a/changelogs/unreleased/psi-indy-embed-zooms.yml b/changelogs/unreleased/psi-indy-embed-zooms.yml
new file mode 100644
index 00000000000..a05977664f3
--- /dev/null
+++ b/changelogs/unreleased/psi-indy-embed-zooms.yml
@@ -0,0 +1,5 @@
+---
+title: Embed metrics time window scroll no longer affects other embeds
+merge_request: 18109
+author:
+type: fixed
diff --git a/changelogs/unreleased/psi-responsive-error-tracking.yml b/changelogs/unreleased/psi-responsive-error-tracking.yml
new file mode 100644
index 00000000000..36be17d7bf0
--- /dev/null
+++ b/changelogs/unreleased/psi-responsive-error-tracking.yml
@@ -0,0 +1,5 @@
+---
+title: Fix error tracking table layout on small screens
+merge_request: 18325
+author:
+type: fixed
diff --git a/changelogs/unreleased/rd-fix-show-trial-errors-helper.yml b/changelogs/unreleased/rd-fix-show-trial-errors-helper.yml
new file mode 100644
index 00000000000..ddcc5f34676
--- /dev/null
+++ b/changelogs/unreleased/rd-fix-show-trial-errors-helper.yml
@@ -0,0 +1,5 @@
+---
+title: Fix error where helper was incorrectly returning `true`
+merge_request: 18231
+author:
+type: fixed
diff --git a/changelogs/unreleased/remove-duplicate-primary-button-in-dashboard-snippets.yml b/changelogs/unreleased/remove-duplicate-primary-button-in-dashboard-snippets.yml
new file mode 100644
index 00000000000..6b08e8fbc0f
--- /dev/null
+++ b/changelogs/unreleased/remove-duplicate-primary-button-in-dashboard-snippets.yml
@@ -0,0 +1,5 @@
+---
+title: Remove duplicate primary button in dashboard snippets
+merge_request: 32048
+author: George Tsiolis
+type: fixed
diff --git a/changelogs/unreleased/return-error-message-when-performance-bar-group-is-not-found.yml b/changelogs/unreleased/return-error-message-when-performance-bar-group-is-not-found.yml
new file mode 100644
index 00000000000..1d00597ba7d
--- /dev/null
+++ b/changelogs/unreleased/return-error-message-when-performance-bar-group-is-not-found.yml
@@ -0,0 +1,5 @@
+---
+title: Show error message when setting an invalid group ID for the performance bar
+merge_request:
+author:
+type: fixed
diff --git a/changelogs/unreleased/sec-rep-mr-fixes.yml b/changelogs/unreleased/sec-rep-mr-fixes.yml
new file mode 100644
index 00000000000..30e4a367552
--- /dev/null
+++ b/changelogs/unreleased/sec-rep-mr-fixes.yml
@@ -0,0 +1,5 @@
+---
+title: Fixes issues with the security reports migration
+merge_request: 17519
+author:
+type: fixed
diff --git a/changelogs/unreleased/security-12630-private-system-note-disclosed-in-graphql.yml b/changelogs/unreleased/security-12630-private-system-note-disclosed-in-graphql.yml
new file mode 100644
index 00000000000..03658c931a3
--- /dev/null
+++ b/changelogs/unreleased/security-12630-private-system-note-disclosed-in-graphql.yml
@@ -0,0 +1,6 @@
+---
+title: Add a policy check for system notes that may not be visible due to cross references
+ to private items
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-12717-fix-confidential-issue-assignee-visible-to-guests.yml b/changelogs/unreleased/security-12717-fix-confidential-issue-assignee-visible-to-guests.yml
new file mode 100644
index 00000000000..574f9f8283c
--- /dev/null
+++ b/changelogs/unreleased/security-12717-fix-confidential-issue-assignee-visible-to-guests.yml
@@ -0,0 +1,5 @@
+---
+title: Display only participants that user has permission to see on milestone page
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-12718-project-milestones-disclosed-via-groups.yml b/changelogs/unreleased/security-12718-project-milestones-disclosed-via-groups.yml
new file mode 100644
index 00000000000..7625655cadd
--- /dev/null
+++ b/changelogs/unreleased/security-12718-project-milestones-disclosed-via-groups.yml
@@ -0,0 +1,6 @@
+---
+title: Do not disclose project milestones on group milestones page when project milestones
+ access is disabled in project settings
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-13338-fix-head-pipeline-leak.yml b/changelogs/unreleased/security-13338-fix-head-pipeline-leak.yml
new file mode 100644
index 00000000000..1091a302aba
--- /dev/null
+++ b/changelogs/unreleased/security-13338-fix-head-pipeline-leak.yml
@@ -0,0 +1,5 @@
+---
+title: Check permissions before showing head pipeline blocking merge requests
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-29491.yml b/changelogs/unreleased/security-29491.yml
new file mode 100644
index 00000000000..ec4ada47c62
--- /dev/null
+++ b/changelogs/unreleased/security-29491.yml
@@ -0,0 +1,5 @@
+---
+title: Fix private feature Elasticsearch leak
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-64938-dont-disclose-path.yml b/changelogs/unreleased/security-64938-dont-disclose-path.yml
new file mode 100644
index 00000000000..0c858401233
--- /dev/null
+++ b/changelogs/unreleased/security-64938-dont-disclose-path.yml
@@ -0,0 +1,6 @@
+---
+title: Fix new project path being disclosed through unsubscribe link of issue/merge
+ requests
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-bypass-email-verification-using-salesforce.yml b/changelogs/unreleased/security-bypass-email-verification-using-salesforce.yml
new file mode 100644
index 00000000000..20b841b68f8
--- /dev/null
+++ b/changelogs/unreleased/security-bypass-email-verification-using-salesforce.yml
@@ -0,0 +1,5 @@
+---
+title: Prevent bypassing email verification using Salesforce
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-cross-reference-fix.yml b/changelogs/unreleased/security-cross-reference-fix.yml
new file mode 100644
index 00000000000..15d6509fd63
--- /dev/null
+++ b/changelogs/unreleased/security-cross-reference-fix.yml
@@ -0,0 +1,5 @@
+---
+title: Do not show resource label events referencing not accessible labels.
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-fp-stop-jobs-when-blocking-user.yml b/changelogs/unreleased/security-fp-stop-jobs-when-blocking-user.yml
new file mode 100644
index 00000000000..1bc4345d5b6
--- /dev/null
+++ b/changelogs/unreleased/security-fp-stop-jobs-when-blocking-user.yml
@@ -0,0 +1,5 @@
+---
+title: Cancel all running CI jobs triggered by the user who is just blocked
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-gitaly-1-65-1.yml b/changelogs/unreleased/security-gitaly-1-65-1.yml
new file mode 100644
index 00000000000..e532a8aba9f
--- /dev/null
+++ b/changelogs/unreleased/security-gitaly-1-65-1.yml
@@ -0,0 +1,5 @@
+---
+title: Fix Gitaly SearchBlobs flag RPC injection
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-mermaid-block.yml b/changelogs/unreleased/security-mermaid-block.yml
new file mode 100644
index 00000000000..993e8cfec08
--- /dev/null
+++ b/changelogs/unreleased/security-mermaid-block.yml
@@ -0,0 +1,5 @@
+---
+title: Only render fixed number of mermaid blocks
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-sarcila-verify-saml-request-origin.yml b/changelogs/unreleased/security-sarcila-verify-saml-request-origin.yml
new file mode 100644
index 00000000000..9022bc8a26f
--- /dev/null
+++ b/changelogs/unreleased/security-sarcila-verify-saml-request-origin.yml
@@ -0,0 +1,5 @@
+---
+title: Prevent GitLab accounts takeover if SAML is configured
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/security-search-by-iid-leaks-data.yml b/changelogs/unreleased/security-search-by-iid-leaks-data.yml
new file mode 100644
index 00000000000..cf68fe504de
--- /dev/null
+++ b/changelogs/unreleased/security-search-by-iid-leaks-data.yml
@@ -0,0 +1,6 @@
+---
+title: Limit search for IID to a type to avoid leaking records with the same IID that
+ the user does not have access to
+merge_request:
+author:
+type: security
diff --git a/changelogs/unreleased/sh-bump-rouge-3-11-0.yml b/changelogs/unreleased/sh-bump-rouge-3-11-0.yml
new file mode 100644
index 00000000000..6ef44fcbafc
--- /dev/null
+++ b/changelogs/unreleased/sh-bump-rouge-3-11-0.yml
@@ -0,0 +1,5 @@
+---
+title: Upgrade Rouge to v3.11.0
+merge_request: 17011
+author:
+type: other
diff --git a/changelogs/unreleased/sh-disable-pager-on-small-counts.yml b/changelogs/unreleased/sh-disable-pager-on-small-counts.yml
new file mode 100644
index 00000000000..1d86d9aaf94
--- /dev/null
+++ b/changelogs/unreleased/sh-disable-pager-on-small-counts.yml
@@ -0,0 +1,5 @@
+---
+title: Fix erroneous "No activities found" message
+merge_request: 18434
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-enable-google-api-retries.yml b/changelogs/unreleased/sh-enable-google-api-retries.yml
new file mode 100644
index 00000000000..5c6b10faa91
--- /dev/null
+++ b/changelogs/unreleased/sh-enable-google-api-retries.yml
@@ -0,0 +1,5 @@
+---
+title: Enable Google API retries for uploads
+merge_request: 18040
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-fix-gitaly-nplus-one-issues-related-mrs.yml b/changelogs/unreleased/sh-fix-gitaly-nplus-one-issues-related-mrs.yml
new file mode 100644
index 00000000000..4cc0e8f0746
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-gitaly-nplus-one-issues-related-mrs.yml
@@ -0,0 +1,5 @@
+---
+title: Fix Gitaly N+1 queries in related merge requests API
+merge_request: 17850
+author:
+type: performance
diff --git a/changelogs/unreleased/sh-fix-project-export-for-pipelines-for-mrs.yml b/changelogs/unreleased/sh-fix-project-export-for-pipelines-for-mrs.yml
new file mode 100644
index 00000000000..1236255e3fd
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-project-export-for-pipelines-for-mrs.yml
@@ -0,0 +1,5 @@
+---
+title: Fix project imports for pipelines for merge requests
+merge_request: 17799
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-fix-snippet-visibility-api.yml b/changelogs/unreleased/sh-fix-snippet-visibility-api.yml
new file mode 100644
index 00000000000..837da277179
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-snippet-visibility-api.yml
@@ -0,0 +1,5 @@
+---
+title: Fix inability to set snippet visibility via API
+merge_request: 18612
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-github-import-handle-nil-dates.yml b/changelogs/unreleased/sh-github-import-handle-nil-dates.yml
new file mode 100644
index 00000000000..d9b350a5197
--- /dev/null
+++ b/changelogs/unreleased/sh-github-import-handle-nil-dates.yml
@@ -0,0 +1,5 @@
+---
+title: 'GitHub import: Handle nil published_at dates'
+merge_request: 18355
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-handle-exceptions-sidekiq.yml b/changelogs/unreleased/sh-handle-exceptions-sidekiq.yml
new file mode 100644
index 00000000000..e2569d5beb5
--- /dev/null
+++ b/changelogs/unreleased/sh-handle-exceptions-sidekiq.yml
@@ -0,0 +1,5 @@
+---
+title: Log Sidekiq exceptions properly in JSON format
+merge_request: 17412
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-hide-license-breakdown.yml b/changelogs/unreleased/sh-hide-license-breakdown.yml
new file mode 100644
index 00000000000..f6b8efdc773
--- /dev/null
+++ b/changelogs/unreleased/sh-hide-license-breakdown.yml
@@ -0,0 +1,5 @@
+---
+title: Hide license breakdown in /admin if user count is high
+merge_request: 18825
+author:
+type: performance
diff --git a/changelogs/unreleased/sh-limit-diverging-commit-counts.yml b/changelogs/unreleased/sh-limit-diverging-commit-counts.yml
new file mode 100644
index 00000000000..8f0acf879cf
--- /dev/null
+++ b/changelogs/unreleased/sh-limit-diverging-commit-counts.yml
@@ -0,0 +1,5 @@
+---
+title: Limit diverging commit counts requests
+merge_request: 16737
+author:
+type: performance
diff --git a/changelogs/unreleased/sh-move-mr-diff-after-commit.yml b/changelogs/unreleased/sh-move-mr-diff-after-commit.yml
new file mode 100644
index 00000000000..7eb1edcfe4f
--- /dev/null
+++ b/changelogs/unreleased/sh-move-mr-diff-after-commit.yml
@@ -0,0 +1,5 @@
+---
+title: Reduce idle in transaction time when updating a merge request
+merge_request: 18493
+author:
+type: performance
diff --git a/changelogs/unreleased/sh-use-template-project-id-backend.yml b/changelogs/unreleased/sh-use-template-project-id-backend.yml
new file mode 100644
index 00000000000..00be1dcbd42
--- /dev/null
+++ b/changelogs/unreleased/sh-use-template-project-id-backend.yml
@@ -0,0 +1,5 @@
+---
+title: Add backend support for selecting custom templates by ID
+merge_request: 18178
+author:
+type: fixed
diff --git a/changelogs/unreleased/show-correct-link-in-mr-pipelines.yml b/changelogs/unreleased/show-correct-link-in-mr-pipelines.yml
new file mode 100644
index 00000000000..8a4b557f716
--- /dev/null
+++ b/changelogs/unreleased/show-correct-link-in-mr-pipelines.yml
@@ -0,0 +1,5 @@
+---
+title: Show the original branch name and link of merge request in pipeline emails
+merge_request: 17513
+author:
+type: fixed
diff --git a/changelogs/unreleased/sort-severity-then-confidence.yml b/changelogs/unreleased/sort-severity-then-confidence.yml
new file mode 100644
index 00000000000..3c7ab63d60b
--- /dev/null
+++ b/changelogs/unreleased/sort-severity-then-confidence.yml
@@ -0,0 +1,5 @@
+---
+title: Sort vulnerabilities by severity then confidence for dashboard and pipeline views
+merge_request: 18675
+author:
+type: changed
diff --git a/changelogs/unreleased/stop-liveness-check-returning-incorrect-data.yml b/changelogs/unreleased/stop-liveness-check-returning-incorrect-data.yml
new file mode 100644
index 00000000000..0238ac469f8
--- /dev/null
+++ b/changelogs/unreleased/stop-liveness-check-returning-incorrect-data.yml
@@ -0,0 +1,5 @@
+---
+title: Changes response body of liveness check to be more accurate
+merge_request: 17655
+author:
+type: changed
diff --git a/changelogs/unreleased/stop-showing-new-issue-button-when-project-is-archived.yml b/changelogs/unreleased/stop-showing-new-issue-button-when-project-is-archived.yml
new file mode 100644
index 00000000000..f786df41528
--- /dev/null
+++ b/changelogs/unreleased/stop-showing-new-issue-button-when-project-is-archived.yml
@@ -0,0 +1,5 @@
+---
+title: Do not show new issue button on archived projects
+merge_request: 18590
+author:
+type: changed
diff --git a/changelogs/unreleased/stop-the-expand-button-expanding.yml b/changelogs/unreleased/stop-the-expand-button-expanding.yml
new file mode 100644
index 00000000000..f722e17707a
--- /dev/null
+++ b/changelogs/unreleased/stop-the-expand-button-expanding.yml
@@ -0,0 +1,5 @@
+---
+title: Stops the expand button in reports from expanding
+merge_request: 18064
+author:
+type: fixed
diff --git a/changelogs/unreleased/sy-grafana-auth-be.yml b/changelogs/unreleased/sy-grafana-auth-be.yml
new file mode 100644
index 00000000000..3fbd53f9e98
--- /dev/null
+++ b/changelogs/unreleased/sy-grafana-auth-be.yml
@@ -0,0 +1,5 @@
+---
+title: Create table for grafana api token for metrics embeds
+merge_request: 17234
+author:
+type: added
diff --git a/changelogs/unreleased/sy-grafana-proxy.yml b/changelogs/unreleased/sy-grafana-proxy.yml
new file mode 100644
index 00000000000..2c2a3959bff
--- /dev/null
+++ b/changelogs/unreleased/sy-grafana-proxy.yml
@@ -0,0 +1,5 @@
+---
+title: Add endpoint to proxy requests to grafana's proxy endpoint
+merge_request: 18210
+author:
+type: added
diff --git a/changelogs/unreleased/tc-link-geo-unrepl-docs.yml b/changelogs/unreleased/tc-link-geo-unrepl-docs.yml
new file mode 100644
index 00000000000..c4cd42fa7e8
--- /dev/null
+++ b/changelogs/unreleased/tc-link-geo-unrepl-docs.yml
@@ -0,0 +1,5 @@
+---
+title: Cross-link unreplicated Geo types to issues
+merge_request: 18443
+author:
+type: changed
diff --git a/changelogs/unreleased/timeout-ci-includes-expansion.yml b/changelogs/unreleased/timeout-ci-includes-expansion.yml
new file mode 100644
index 00000000000..07551655e2d
--- /dev/null
+++ b/changelogs/unreleased/timeout-ci-includes-expansion.yml
@@ -0,0 +1,5 @@
+---
+title: Add timeout mechanism for CI config validation
+merge_request: 16807
+author:
+type: fixed
diff --git a/changelogs/unreleased/tr-fix-embed-tooltip.yml b/changelogs/unreleased/tr-fix-embed-tooltip.yml
new file mode 100644
index 00000000000..0bd09d29c93
--- /dev/null
+++ b/changelogs/unreleased/tr-fix-embed-tooltip.yml
@@ -0,0 +1,5 @@
+---
+title: Fixes embedded metrics chart tooltip spacing
+merge_request: 18543
+author:
+type: fixed
diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-9-0.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-9-0.yml
new file mode 100644
index 00000000000..b7709b10402
--- /dev/null
+++ b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-9-0.yml
@@ -0,0 +1,5 @@
+---
+title: Update GitLab Runner Helm Chart to 0.9.0
+merge_request: 17326
+author:
+type: other
diff --git a/changelogs/unreleased/update-gitlab-shell-10-2.yml b/changelogs/unreleased/update-gitlab-shell-10-2.yml
new file mode 100644
index 00000000000..cc13c18d633
--- /dev/null
+++ b/changelogs/unreleased/update-gitlab-shell-10-2.yml
@@ -0,0 +1,5 @@
+---
+title: Update GitLab Shell to v10.2.0
+merge_request: 18735
+author:
+type: other
diff --git a/changelogs/unreleased/update-preparing-stage-icon.yml b/changelogs/unreleased/update-preparing-stage-icon.yml
new file mode 100644
index 00000000000..6fc5bc4cd7c
--- /dev/null
+++ b/changelogs/unreleased/update-preparing-stage-icon.yml
@@ -0,0 +1,5 @@
+---
+title: Add pipeline preparing status icons
+merge_request: 17923
+author:
+type: added
diff --git a/changelogs/unreleased/update-schema-rb.yml b/changelogs/unreleased/update-schema-rb.yml
new file mode 100644
index 00000000000..7e0756dc489
--- /dev/null
+++ b/changelogs/unreleased/update-schema-rb.yml
@@ -0,0 +1,5 @@
+---
+title: Remove Postgresql specific setup tasks and move to schema.rb
+merge_request:
+author:
+type: other
diff --git a/changelogs/unreleased/use-ansi2json-for-job-logs.yml b/changelogs/unreleased/use-ansi2json-for-job-logs.yml
new file mode 100644
index 00000000000..1fce00e821c
--- /dev/null
+++ b/changelogs/unreleased/use-ansi2json-for-job-logs.yml
@@ -0,0 +1,5 @@
+---
+title: Use new Ansi2json job log converter via feature flag
+merge_request: 18134
+author:
+type: added
diff --git a/changelogs/unreleased/user-friendly-instance-configuration.yml b/changelogs/unreleased/user-friendly-instance-configuration.yml
new file mode 100644
index 00000000000..07a0250dff9
--- /dev/null
+++ b/changelogs/unreleased/user-friendly-instance-configuration.yml
@@ -0,0 +1,5 @@
+---
+title: Make instance configuration user friendly
+merge_request: 18363
+author: Takuya Noguchi
+type: other
diff --git a/changelogs/unreleased/web-metrics-exporter-ee.yml b/changelogs/unreleased/web-metrics-exporter-ee.yml
new file mode 100644
index 00000000000..89d6efba654
--- /dev/null
+++ b/changelogs/unreleased/web-metrics-exporter-ee.yml
@@ -0,0 +1,5 @@
+---
+title: Add web_exporter to expose Prometheus metrics
+merge_request: 17943
+author:
+type: added
diff --git a/changelogs/unreleased/winh-confidential-issue-recaptcha.yml b/changelogs/unreleased/winh-confidential-issue-recaptcha.yml
new file mode 100644
index 00000000000..3256c8f5507
--- /dev/null
+++ b/changelogs/unreleased/winh-confidential-issue-recaptcha.yml
@@ -0,0 +1,5 @@
+---
+title: Display reCAPTCHA modal when making issue public
+merge_request: 17553
+author:
+type: fixed
diff --git a/changelogs/unreleased/winh-issue-list-moved.yml b/changelogs/unreleased/winh-issue-list-moved.yml
new file mode 100644
index 00000000000..c8113e39b97
--- /dev/null
+++ b/changelogs/unreleased/winh-issue-list-moved.yml
@@ -0,0 +1,5 @@
+---
+title: Display if an issue was moved in issue list
+merge_request: 17102
+author:
+type: changed
diff --git a/changelogs/unreleased/winh-related-issues-border.yml b/changelogs/unreleased/winh-related-issues-border.yml
new file mode 100644
index 00000000000..8b6b62b440d
--- /dev/null
+++ b/changelogs/unreleased/winh-related-issues-border.yml
@@ -0,0 +1,5 @@
+---
+title: Redo fix for related issues border radius
+merge_request: 17480
+author:
+type: fixed
diff --git a/changelogs/unreleased/workhorse-8-14.yml b/changelogs/unreleased/workhorse-8-14.yml
new file mode 100644
index 00000000000..5df25876201
--- /dev/null
+++ b/changelogs/unreleased/workhorse-8-14.yml
@@ -0,0 +1,5 @@
+---
+title: Update Workhorse to v8.14.0
+merge_request: 18391
+author:
+type: other
diff --git a/changelogs/unreleased/zj-timeouts-gitaly-rpcs.yml b/changelogs/unreleased/zj-timeouts-gitaly-rpcs.yml
new file mode 100644
index 00000000000..f028df84b6e
--- /dev/null
+++ b/changelogs/unreleased/zj-timeouts-gitaly-rpcs.yml
@@ -0,0 +1,5 @@
+---
+title: Add timeouts for each RPC call
+merge_request: 31766
+author:
+type: changed
diff --git a/config/application.rb b/config/application.rb
index c1e3b6f7a20..5d7c52c5d81 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -13,6 +13,7 @@ Bundler.require(*Rails.groups)
module Gitlab
class Application < Rails::Application
require_dependency Rails.root.join('lib/gitlab')
+ require_dependency Rails.root.join('lib/gitlab/utils')
require_dependency Rails.root.join('lib/gitlab/redis/wrapper')
require_dependency Rails.root.join('lib/gitlab/redis/cache')
require_dependency Rails.root.join('lib/gitlab/redis/queues')
@@ -46,18 +47,20 @@ module Gitlab
config.generators.templates.push("#{config.root}/generator_templates")
- ee_paths = config.eager_load_paths.each_with_object([]) do |path, memo|
- ee_path = config.root.join('ee', Pathname.new(path).relative_path_from(config.root))
- memo << ee_path.to_s if ee_path.exist?
- end
+ if Gitlab.ee?
+ ee_paths = config.eager_load_paths.each_with_object([]) do |path, memo|
+ ee_path = config.root.join('ee', Pathname.new(path).relative_path_from(config.root))
+ memo << ee_path.to_s
+ end
- # Eager load should load CE first
- config.eager_load_paths.push(*ee_paths)
- config.helpers_paths.push "#{config.root}/ee/app/helpers"
+ # Eager load should load CE first
+ config.eager_load_paths.push(*ee_paths)
+ config.helpers_paths.push "#{config.root}/ee/app/helpers"
- # Other than Ruby modules we load EE first
- config.paths['lib/tasks'].unshift "#{config.root}/ee/lib/tasks"
- config.paths['app/views'].unshift "#{config.root}/ee/app/views"
+ # Other than Ruby modules we load EE first
+ config.paths['lib/tasks'].unshift "#{config.root}/ee/lib/tasks"
+ config.paths['app/views'].unshift "#{config.root}/ee/app/views"
+ end
# Rake tasks ignore the eager loading settings, so we need to set the
# autoload paths explicitly
@@ -178,16 +181,18 @@ module Gitlab
config.assets.paths << "#{config.root}/node_modules/xterm/src/"
config.assets.precompile << "xterm.css"
- %w[images javascripts stylesheets].each do |path|
- config.assets.paths << "#{config.root}/ee/app/assets/#{path}"
- config.assets.precompile << "jira_connect.js"
- config.assets.precompile << "pages/jira_connect.css"
+ if Gitlab.ee?
+ %w[images javascripts stylesheets].each do |path|
+ config.assets.paths << "#{config.root}/ee/app/assets/#{path}"
+ config.assets.precompile << "jira_connect.js"
+ config.assets.precompile << "pages/jira_connect.css"
+ end
end
# Import path for EE specific SCSS entry point
# In CE it will import a noop file, in EE a functioning file
# Order is important, so that the ee file takes precedence:
- config.assets.paths << "#{config.root}/ee/app/assets/stylesheets/_ee"
+ config.assets.paths << "#{config.root}/ee/app/assets/stylesheets/_ee" if Gitlab.ee?
config.assets.paths << "#{config.root}/app/assets/stylesheets/_ee"
config.assets.paths << "#{config.root}/vendor/assets/javascripts/"
@@ -197,13 +202,15 @@ module Gitlab
# See https://gitlab.com/gitlab-org/gitlab-foss/issues/64091#note_194512508
config.assets.paths << "#{config.root}/node_modules"
- # Compile non-JS/CSS assets in the ee/app/assets folder by default
- # Mimic sprockets-rails default: https://github.com/rails/sprockets-rails/blob/v3.2.1/lib/sprockets/railtie.rb#L84-L87
- LOOSE_EE_APP_ASSETS = lambda do |logical_path, filename|
- filename.start_with?(config.root.join("ee/app/assets").to_s) &&
- !['.js', '.css', ''].include?(File.extname(logical_path))
+ if Gitlab.ee?
+ # Compile non-JS/CSS assets in the ee/app/assets folder by default
+ # Mimic sprockets-rails default: https://github.com/rails/sprockets-rails/blob/v3.2.1/lib/sprockets/railtie.rb#L84-L87
+ LOOSE_EE_APP_ASSETS = lambda do |logical_path, filename|
+ filename.start_with?(config.root.join("ee/app/assets").to_s) &&
+ !['.js', '.css', ''].include?(File.extname(logical_path))
+ end
+ config.assets.precompile << LOOSE_EE_APP_ASSETS
end
- config.assets.precompile << LOOSE_EE_APP_ASSETS
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'
diff --git a/config/brakeman.ignore b/config/brakeman.ignore
deleted file mode 100644
index 0e4fef65781..00000000000
--- a/config/brakeman.ignore
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "ignored_warnings": [
- {
- "warning_type": "Cross-Site Request Forgery",
- "warning_code": 7,
- "fingerprint": "dc562678129557cdb8b187217da304044547a3605f05fe678093dcb4b4d8bbe4",
- "message": "'protect_from_forgery' should be called in Oauth::GeoAuthController",
- "file": "app/controllers/oauth/geo_auth_controller.rb",
- "line": 1,
- "link": "http://brakemanscanner.org/docs/warning_types/cross-site_request_forgery/",
- "code": null,
- "render_path": null,
- "location": {
- "type": "controller",
- "controller": "Oauth::GeoAuthController"
- },
- "user_input": null,
- "confidence": "High",
- "note": ""
- }
- ],
- "updated": "2017-01-20 02:06:54 +0000",
- "brakeman_version": "3.4.1"
-}
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 3881f1be152..2939e13ef94 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -11,9 +11,6 @@ Rails.application.configure do
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
- # Don't care if the mailer can't send
- config.action_mailer.raise_delivery_errors = false
-
# Print deprecation notices to the Rails logger
config.active_support.deprecation = :log
@@ -38,6 +35,8 @@ Rails.application.configure do
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
# Open sent mails in browser
config.action_mailer.delivery_method = :letter_opener_web
+ # Log mail delivery errors
+ config.action_mailer.raise_delivery_errors = true
# Don't make a mess when bootstrapping a development environment
config.action_mailer.perform_deliveries = (ENV['BOOTSTRAP'] != '1')
config.action_mailer.preview_path = 'app/mailers/previews'
diff --git a/config/feature_categories.yml b/config/feature_categories.yml
new file mode 100644
index 00000000000..59752a81f60
--- /dev/null
+++ b/config/feature_categories.yml
@@ -0,0 +1,103 @@
+#
+# This file contains a list of all feature categories in GitLab
+# It is generated from the stages file at https://gitlab.com/gitlab-com/www-gitlab-com/raw/master/data/stages.yml.
+# If you would like to update it, please run
+# `./scripts/update-feature-categories` to generate a new copy
+#
+# PLEASE DO NOT EDIT THIS FILE MANUALLY.
+#
+---
+- accessibility_testing
+- account-management
+- agile_portfolio_management
+- analysis
+- audit_management
+- authentication_and_authorization
+- auto_devops
+- backup_restore
+- behavior_analytics
+- chaos_engineering
+- chatops
+- cloud_native_installation
+- cluster_cost_optimization
+- cluster_monitoring
+- code_analytics
+- code_quality
+- code_review
+- collection
+- container_network_security
+- container_registry
+- container_scanning
+- continuous_delivery
+- continuous_integration
+- data_loss_prevention
+- dependency_proxy
+- dependency_scanning
+- design_management
+- devops_score
+- disaster_recovery
+- dynamic_application_security_testing
+- error_tracking
+- feature_flags
+- fuzzing
+- geo_replication
+- gitaly
+- gitter
+- groups
+- helm_chart_registry
+- importers
+- incident_management
+- incremental_rollout
+- infrastructure_as_code
+- integration_testing
+- integrations
+- interactive_application_security_testing
+- internationalization
+- issue_tracking
+- kanban_boards
+- kubernetes_configuration
+- language_specific
+- license_compliance
+- live_coding
+- load_testing
+- logging
+- metrics
+- omnibus_package
+- package_registry
+- pages
+- quality_management
+- release_governance
+- release_orchestration
+- requirements_management
+- review_apps
+- runbooks
+- runner
+- runtime_application_self_protection
+- sdk
+- search
+- secret_detection
+- secrets_management
+- serverless
+- service_desk
+- snippets
+- source_code_management
+- static_application_security_testing
+- status_page
+- storage_security
+- synthetic_monitoring
+- system_testing
+- templates
+- threat_detection
+- time_tracking
+- tracing
+- unit_testing
+- usability_testing
+- users
+- value_stream_management
+- vulnerability_database
+- vulnerability_management
+- web_firewall
+- web_ide
+- web_performance
+- wiki
+- workflow_policies
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index 814ea551e19..f6814262b7a 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -319,8 +319,7 @@ production: &base
artifacts_server: true # Set to false if you want to disable online view of HTML artifacts
# external_http: ["1.1.1.1:80", "[2001::1]:80"] # If defined, enables custom domain support in GitLab Pages
# external_https: ["1.1.1.1:443", "[2001::1]:443"] # If defined, enables custom domain and certificate support in GitLab Pages
- admin:
- address: unix:/home/git/gitlab/tmp/sockets/private/pages-admin.socket # TCP connections are supported too (e.g. tcp://host:port)
+
# File that contains the shared secret key for verifying access for gitlab-pages.
# Default is '.gitlab_pages_shared_secret' relative to Rails.root (i.e. root of the GitLab app).
# secret_file: /home/git/gitlab/.gitlab_pages_shared_secret
@@ -1017,7 +1016,20 @@ production: &base
sidekiq_exporter:
# enabled: true
# address: localhost
- # port: 3807
+ # port: 8082
+
+ # Web exporter is webserver built in to Unicorn/Puma to expose Prometheus metrics
+ # It runs alongside the `/metrics` endpoints to ease the publish of metrics
+ web_exporter:
+ # enabled: true
+ # address: localhost
+ # port: 8083
+ # # blackout_seconds:
+ # # defines an interval to block healthcheck,
+ # # but continue accepting application requests
+ # # this allows Load Balancer to notice service
+ # # being shutdown and not interrupt any of the clients
+ # blackout_seconds: 10
## Prometheus settings
# Do not modify these settings here. They should be modified in /etc/gitlab/gitlab.rb
@@ -1061,6 +1073,21 @@ production: &base
development:
<<: *base
+ # We want to run web/sidekiq exporters for devs
+ # to catch errors from using them.
+ #
+ # We use random port to not block ability to run
+ # multiple instances of the service
+ monitoring:
+ sidekiq_exporter:
+ enabled: true
+ address: 127.0.0.1
+ port: 0
+ web_exporter:
+ enabled: true
+ address: 127.0.0.1
+ port: 0
+
test:
<<: *base
gravatar:
diff --git a/config/helpers/is_ee_env.js b/config/helpers/is_ee_env.js
index 3fe9bb891eb..78f0bd65528 100644
--- a/config/helpers/is_ee_env.js
+++ b/config/helpers/is_ee_env.js
@@ -3,7 +3,12 @@ const path = require('path');
const ROOT_PATH = path.resolve(__dirname, '../..');
+// The `FOSS_ONLY` is always `string` or `nil`
+// Thus the nil or empty string will result
+// in using default value: false
+//
+// The behavior needs to be synchronised with
+// lib/gitlab.rb: Gitlab.ee?
+const isFossOnly = JSON.parse(process.env.FOSS_ONLY || 'false');
module.exports =
- process.env.IS_GITLAB_EE !== undefined
- ? JSON.parse(process.env.IS_GITLAB_EE)
- : fs.existsSync(path.join(ROOT_PATH, 'ee'));
+ fs.existsSync(path.join(ROOT_PATH, 'ee', 'app', 'models', 'license.rb')) && !isFossOnly;
diff --git a/config/initializers/0_inflections.rb b/config/initializers/0_inflections.rb
index d317825c1b8..c0afa207ac3 100644
--- a/config/initializers/0_inflections.rb
+++ b/config/initializers/0_inflections.rb
@@ -20,6 +20,7 @@ ActiveSupport::Inflector.inflections do |inflect|
file_registry
job_artifact_registry
container_repository_registry
+ design_registry
vulnerability_feedback
vulnerabilities_feedback
group_view
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index fbe6c21e53d..7ee4a4e3610 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -290,9 +290,6 @@ Settings.pages['url'] ||= Settings.__send__(:build_pages_url)
Settings.pages['external_http'] ||= false unless Settings.pages['external_http'].present?
Settings.pages['external_https'] ||= false unless Settings.pages['external_https'].present?
Settings.pages['artifacts_server'] ||= Settings.pages['enabled'] if Settings.pages['artifacts_server'].nil?
-
-Settings.pages['admin'] ||= Settingslogic.new({})
-Settings.pages.admin['certificate'] ||= ''
Settings.pages['secret_file'] ||= Rails.root.join('.gitlab_pages_shared_secret')
#
@@ -491,6 +488,9 @@ Gitlab.ee do
Settings.cron_jobs['historical_data_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['historical_data_worker']['cron'] ||= '0 12 * * *'
Settings.cron_jobs['historical_data_worker']['job_class'] = 'HistoricalDataWorker'
+ Settings.cron_jobs['import_software_licenses_worker'] ||= Settingslogic.new({})
+ Settings.cron_jobs['import_software_licenses_worker']['cron'] ||= '0 3 * * 0'
+ Settings.cron_jobs['import_software_licenses_worker']['job_class'] = 'ImportSoftwareLicensesWorker'
Settings.cron_jobs['ldap_group_sync_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['ldap_group_sync_worker']['cron'] ||= '0 * * * *'
Settings.cron_jobs['ldap_group_sync_worker']['job_class'] = 'LdapAllGroupsSyncWorker'
@@ -663,7 +663,12 @@ Settings.monitoring['ruby_sampler_interval'] ||= 60
Settings.monitoring['sidekiq_exporter'] ||= Settingslogic.new({})
Settings.monitoring.sidekiq_exporter['enabled'] ||= false
Settings.monitoring.sidekiq_exporter['address'] ||= 'localhost'
-Settings.monitoring.sidekiq_exporter['port'] ||= 3807
+Settings.monitoring.sidekiq_exporter['port'] ||= 8082
+Settings.monitoring['web_exporter'] ||= Settingslogic.new({})
+Settings.monitoring.web_exporter['enabled'] ||= false
+Settings.monitoring.web_exporter['address'] ||= 'localhost'
+Settings.monitoring.web_exporter['port'] ||= 8083
+Settings.monitoring.web_exporter['blackout_seconds'] ||= 10
#
# Testing settings
diff --git a/config/initializers/7_prometheus_metrics.rb b/config/initializers/7_prometheus_metrics.rb
index 6bd2256ac0e..974eff1a528 100644
--- a/config/initializers/7_prometheus_metrics.rb
+++ b/config/initializers/7_prometheus_metrics.rb
@@ -34,8 +34,14 @@ Sidekiq.configure_server do |config|
config.on(:startup) do
# webserver metrics are cleaned up in config.ru: `warmup` block
Prometheus::CleanupMultiprocDirService.new.execute
+ # In production, sidekiq is run in a multi-process setup where processes might interfere
+ # with each other cleaning up and reinitializing prometheus database files, which is why
+ # we're re-doing the work every time here.
+ # A cleaner solution would be to run the cleanup pre-fork, and the initialization once
+ # after all workers have forked, but I don't know how at this point.
+ ::Prometheus::Client.reinitialize_on_pid_change(force: true)
- Gitlab::Metrics::SidekiqMetricsExporter.instance.start
+ Gitlab::Metrics::Exporter::SidekiqExporter.instance.start
end
end
@@ -54,5 +60,36 @@ if !Rails.env.test? && Gitlab::Metrics.prometheus_metrics_enabled?
elsif defined?(::Puma)
Gitlab::Metrics::Samplers::PumaSampler.instance(Settings.monitoring.puma_sampler_interval).start
end
+
+ Gitlab::Metrics::RequestsRackMiddleware.initialize_http_request_duration_seconds
+ end
+end
+
+if defined?(::Unicorn) || defined?(::Puma)
+ Gitlab::Cluster::LifecycleEvents.on_master_start do
+ Gitlab::Metrics::Exporter::WebExporter.instance.start
+ end
+
+ Gitlab::Cluster::LifecycleEvents.on_before_phased_restart do
+ # We need to ensure that before we re-exec server
+ # we do stop the exporter
+ Gitlab::Metrics::Exporter::WebExporter.instance.stop
+ end
+
+ Gitlab::Cluster::LifecycleEvents.on_before_master_restart do
+ # We need to ensure that before we re-exec server
+ # we do stop the exporter
+ #
+ # We do it again, for being extra safe,
+ # but it should not be needed
+ Gitlab::Metrics::Exporter::WebExporter.instance.stop
+ end
+
+ Gitlab::Cluster::LifecycleEvents.on_worker_start do
+ # The `#close_on_exec=` takes effect only on `execve`
+ # but this does not happen for Ruby fork
+ #
+ # This does stop server, as it is running on master.
+ Gitlab::Metrics::Exporter::WebExporter.instance.stop
end
end
diff --git a/config/initializers/cluster_events_before_phased_restart.rb b/config/initializers/cluster_events_before_phased_restart.rb
new file mode 100644
index 00000000000..cbb1dd1a53a
--- /dev/null
+++ b/config/initializers/cluster_events_before_phased_restart.rb
@@ -0,0 +1,14 @@
+# Technical debt, this should be ideally upstreamed.
+#
+# However, there's currently no way to hook before doing
+# graceful shutdown today.
+#
+# Follow-up the issue: https://gitlab.com/gitlab-org/gitlab/issues/34107
+
+if defined?(::Puma)
+ Puma::Cluster.prepend(::Gitlab::Cluster::Mixins::PumaCluster)
+end
+
+if defined?(::Unicorn::HttpServer)
+ Unicorn::HttpServer.prepend(::Gitlab::Cluster::Mixins::UnicornHttpServer)
+end
diff --git a/config/initializers/fog_core_patch.rb b/config/initializers/fog_core_patch.rb
index d3d02216d45..053e0460a19 100644
--- a/config/initializers/fog_core_patch.rb
+++ b/config/initializers/fog_core_patch.rb
@@ -34,6 +34,7 @@ module Fog
# Gems that have not yet updated with the new fog-core namespace
LEGACY_FOG_PROVIDERS = %w(google rackspace aliyun).freeze
+ # rubocop:disable Gitlab/ConstGetInheritFalse
def service_provider_constant(service_name, provider_name)
args = service_provider_search_args(service_name, provider_name)
Fog.const_get(args.first).const_get(*const_get_args(args.second))
@@ -48,5 +49,6 @@ module Fog
[provider_name, service_name]
end
end
+ # rubocop:enable Gitlab/ConstGetInheritFalse
end
end
diff --git a/config/initializers/google_api_client.rb b/config/initializers/google_api_client.rb
new file mode 100644
index 00000000000..443bb29fb52
--- /dev/null
+++ b/config/initializers/google_api_client.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+#
+# google-api-client >= 0.26.0 supports enabling CloudRun and Istio during
+# cluster creation, but fog-google currently hard deps on '~> 0.23.0', which
+# prevents us from upgrading. We are injecting these options as hashes below
+# as a workaround until this is resolved.
+#
+# This can be removed once fog-google and google-api-client can be upgraded.
+# See https://gitlab.com/gitlab-org/gitlab/issues/31280 for more details.
+#
+
+require 'google/apis/container_v1beta1'
+require 'google/apis/options'
+
+# As stated in https://github.com/googleapis/google-api-ruby-client#errors--retries,
+# enabling retries is strongly encouraged but disabled by default. Large uploads
+# that may hit timeouts will mainly benefit from this.
+Google::Apis::RequestOptions.default.retries = 3 if Gitlab::Utils.to_boolean(ENV.fetch('ENABLE_GOOGLE_API_RETRIES', true))
+
+Google::Apis::ContainerV1beta1::AddonsConfig::Representation.tap do |representation|
+ representation.hash :cloud_run_config, as: 'cloudRunConfig'
+ representation.hash :istio_config, as: 'istioConfig'
+end
diff --git a/config/initializers/lograge.rb b/config/initializers/lograge.rb
index 346725e4080..d5d4c589884 100644
--- a/config/initializers/lograge.rb
+++ b/config/initializers/lograge.rb
@@ -32,6 +32,10 @@ unless Sidekiq.server?
payload[:response] = event.payload[:response] if event.payload[:response]
payload[Labkit::Correlation::CorrelationId::LOG_KEY] = Labkit::Correlation::CorrelationId.current_id
+ if cpu_s = Gitlab::Metrics::System.thread_cpu_duration(::Gitlab::RequestContext.start_thread_cpu_time)
+ payload[:cpu_s] = cpu_s
+ end
+
payload
end
end
diff --git a/config/initializers/pages.rb b/config/initializers/pages.rb
deleted file mode 100644
index 835197557e8..00000000000
--- a/config/initializers/pages.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-Gitlab::PagesClient.read_or_create_token
-Gitlab::PagesClient.load_certificate
diff --git a/config/initializers/rack_attack_global.rb b/config/initializers/rack_attack_global.rb
deleted file mode 100644
index 7f0439ef9bf..00000000000
--- a/config/initializers/rack_attack_global.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-module Gitlab::Throttle
- def self.settings
- Gitlab::CurrentSettings.current_application_settings
- end
-
- def self.unauthenticated_options
- limit_proc = proc { |req| settings.throttle_unauthenticated_requests_per_period }
- period_proc = proc { |req| settings.throttle_unauthenticated_period_in_seconds.seconds }
- { limit: limit_proc, period: period_proc }
- end
-
- def self.authenticated_api_options
- limit_proc = proc { |req| settings.throttle_authenticated_api_requests_per_period }
- period_proc = proc { |req| settings.throttle_authenticated_api_period_in_seconds.seconds }
- { limit: limit_proc, period: period_proc }
- end
-
- def self.authenticated_web_options
- limit_proc = proc { |req| settings.throttle_authenticated_web_requests_per_period }
- period_proc = proc { |req| settings.throttle_authenticated_web_period_in_seconds.seconds }
- { limit: limit_proc, period: period_proc }
- end
-end
-
-class Rack::Attack
- throttle('throttle_unauthenticated', Gitlab::Throttle.unauthenticated_options) do |req|
- Gitlab::Throttle.settings.throttle_unauthenticated_enabled &&
- req.unauthenticated? &&
- !req.should_be_skipped? &&
- req.ip
- end
-
- throttle('throttle_authenticated_api', Gitlab::Throttle.authenticated_api_options) do |req|
- Gitlab::Throttle.settings.throttle_authenticated_api_enabled &&
- req.api_request? &&
- req.authenticated_user_id([:api])
- end
-
- throttle('throttle_authenticated_web', Gitlab::Throttle.authenticated_web_options) do |req|
- Gitlab::Throttle.settings.throttle_authenticated_web_enabled &&
- req.web_request? &&
- req.authenticated_user_id([:api, :rss, :ics])
- end
-
- class Request
- def unauthenticated?
- !authenticated_user_id([:api, :rss, :ics])
- end
-
- def authenticated_user_id(request_formats)
- Gitlab::Auth::RequestAuthenticator.new(self).user(request_formats)&.id
- end
-
- def api_request?
- path.start_with?('/api')
- end
-
- def api_internal_request?
- path =~ %r{^/api/v\d+/internal/}
- end
-
- def should_be_skipped?
- api_internal_request?
- end
-
- def web_request?
- !api_request?
- end
- end
-end
-
-::Rack::Attack::Request.prepend_if_ee('::EE::Gitlab::Rack::Attack::Request')
diff --git a/config/initializers/rack_attack_logging.rb b/config/initializers/rack_attack_logging.rb
index b43fff24bb0..be7c2175cb2 100644
--- a/config/initializers/rack_attack_logging.rb
+++ b/config/initializers/rack_attack_logging.rb
@@ -12,10 +12,18 @@ ActiveSupport::Notifications.subscribe('rack.attack') do |name, start, finish, r
path: req.fullpath
}
- if %w(throttle_authenticated_api throttle_authenticated_web).include? req.env['rack.attack.matched']
+ throttles_with_user_information = [
+ :throttle_authenticated_api,
+ :throttle_authenticated_web,
+ :throttle_authenticated_protected_paths_api,
+ :throttle_authenticated_protected_paths_web
+ ]
+
+ if throttles_with_user_information.include? req.env['rack.attack.matched'].to_sym
user_id = req.env['rack.attack.match_discriminator']
user = User.find_by(id: user_id)
+ rack_attack_info[:throttle_type] = req.env['rack.attack.matched']
rack_attack_info[:user_id] = user_id
rack_attack_info[:username] = user.username unless user.nil?
end
diff --git a/config/initializers/rack_attack_new.rb b/config/initializers/rack_attack_new.rb
new file mode 100644
index 00000000000..b0f7febe427
--- /dev/null
+++ b/config/initializers/rack_attack_new.rb
@@ -0,0 +1,129 @@
+module Gitlab::Throttle
+ def self.settings
+ Gitlab::CurrentSettings.current_application_settings
+ end
+
+ def self.protected_paths_enabled?
+ !self.omnibus_protected_paths_present? &&
+ self.settings.throttle_protected_paths_enabled?
+ end
+
+ def self.omnibus_protected_paths_present?
+ Rack::Attack.throttles.key?('protected paths')
+ end
+
+ def self.unauthenticated_options
+ limit_proc = proc { |req| settings.throttle_unauthenticated_requests_per_period }
+ period_proc = proc { |req| settings.throttle_unauthenticated_period_in_seconds.seconds }
+ { limit: limit_proc, period: period_proc }
+ end
+
+ def self.authenticated_api_options
+ limit_proc = proc { |req| settings.throttle_authenticated_api_requests_per_period }
+ period_proc = proc { |req| settings.throttle_authenticated_api_period_in_seconds.seconds }
+ { limit: limit_proc, period: period_proc }
+ end
+
+ def self.authenticated_web_options
+ limit_proc = proc { |req| settings.throttle_authenticated_web_requests_per_period }
+ period_proc = proc { |req| settings.throttle_authenticated_web_period_in_seconds.seconds }
+ { limit: limit_proc, period: period_proc }
+ end
+
+ def self.protected_paths_options
+ limit_proc = proc { |req| settings.throttle_protected_paths_requests_per_period }
+ period_proc = proc { |req| settings.throttle_protected_paths_period_in_seconds.seconds }
+
+ { limit: limit_proc, period: period_proc }
+ end
+end
+
+class Rack::Attack
+ throttle('throttle_unauthenticated', Gitlab::Throttle.unauthenticated_options) do |req|
+ Gitlab::Throttle.settings.throttle_unauthenticated_enabled &&
+ req.unauthenticated? &&
+ !req.should_be_skipped? &&
+ req.ip
+ end
+
+ throttle('throttle_authenticated_api', Gitlab::Throttle.authenticated_api_options) do |req|
+ Gitlab::Throttle.settings.throttle_authenticated_api_enabled &&
+ req.api_request? &&
+ req.authenticated_user_id([:api])
+ end
+
+ throttle('throttle_authenticated_web', Gitlab::Throttle.authenticated_web_options) do |req|
+ Gitlab::Throttle.settings.throttle_authenticated_web_enabled &&
+ req.web_request? &&
+ req.authenticated_user_id([:api, :rss, :ics])
+ end
+
+ throttle('throttle_unauthenticated_protected_paths', Gitlab::Throttle.protected_paths_options) do |req|
+ Gitlab::Throttle.protected_paths_enabled? &&
+ req.unauthenticated? &&
+ !req.should_be_skipped? &&
+ req.protected_path? &&
+ req.ip
+ end
+
+ throttle('throttle_authenticated_protected_paths_api', Gitlab::Throttle.protected_paths_options) do |req|
+ Gitlab::Throttle.protected_paths_enabled? &&
+ req.api_request? &&
+ req.protected_path? &&
+ req.authenticated_user_id([:api])
+ end
+
+ throttle('throttle_authenticated_protected_paths_web', Gitlab::Throttle.protected_paths_options) do |req|
+ Gitlab::Throttle.protected_paths_enabled? &&
+ req.web_request? &&
+ req.protected_path? &&
+ req.authenticated_user_id([:api, :rss, :ics])
+ end
+
+ class Request
+ def unauthenticated?
+ !authenticated_user_id([:api, :rss, :ics])
+ end
+
+ def authenticated_user_id(request_formats)
+ Gitlab::Auth::RequestAuthenticator.new(self).user(request_formats)&.id
+ end
+
+ def api_request?
+ path.start_with?('/api')
+ end
+
+ def api_internal_request?
+ path =~ %r{^/api/v\d+/internal/}
+ end
+
+ def should_be_skipped?
+ api_internal_request?
+ end
+
+ def web_request?
+ !api_request?
+ end
+
+ def protected_path?
+ !protected_path_regex.nil?
+ end
+
+ def protected_path_regex
+ path =~ protected_paths_regex
+ end
+
+ private
+
+ def protected_paths
+ Gitlab::CurrentSettings.current_application_settings.protected_paths
+ end
+
+ def protected_paths_regex
+ Regexp.union(protected_paths.map { |path| /\A#{Regexp.escape(path)}/ })
+ end
+ end
+end
+
+::Rack::Attack.extend_if_ee('::EE::Gitlab::Rack::Attack') # rubocop: disable Cop/InjectEnterpriseEditionModule
+::Rack::Attack::Request.prepend_if_ee('::EE::Gitlab::Rack::Attack::Request')
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 20f31ff6810..b5d98399015 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -28,16 +28,18 @@ if Rails.env.development?
end
enable_json_logs = Gitlab.config.sidekiq.log_format == 'json'
-enable_sidekiq_monitor = ENV.fetch("SIDEKIQ_MONITOR_WORKER", 0).to_i.nonzero?
+enable_sidekiq_memory_killer = ENV['SIDEKIQ_MEMORY_KILLER_MAX_RSS'].to_i.nonzero?
+use_sidekiq_daemon_memory_killer = ENV["SIDEKIQ_DAEMON_MEMORY_KILLER"].to_i.nonzero?
+use_sidekiq_legacy_memory_killer = !use_sidekiq_daemon_memory_killer
Sidekiq.configure_server do |config|
config.redis = queues_config_hash
config.server_middleware do |chain|
- chain.add Gitlab::SidekiqMiddleware::Monitor if enable_sidekiq_monitor
+ chain.add Gitlab::SidekiqMiddleware::Monitor
chain.add Gitlab::SidekiqMiddleware::Metrics if Settings.monitoring.sidekiq_exporter
chain.add Gitlab::SidekiqMiddleware::ArgumentsLogger if ENV['SIDEKIQ_LOG_ARGUMENTS'] && !enable_json_logs
- chain.add Gitlab::SidekiqMiddleware::MemoryKiller if ENV['SIDEKIQ_MEMORY_KILLER_MAX_RSS']
+ chain.add Gitlab::SidekiqMiddleware::MemoryKiller if enable_sidekiq_memory_killer && use_sidekiq_legacy_memory_killer
chain.add Gitlab::SidekiqMiddleware::RequestStoreMiddleware unless ENV['SIDEKIQ_REQUEST_STORE'] == '0'
chain.add Gitlab::SidekiqMiddleware::BatchLoader
chain.add Gitlab::SidekiqMiddleware::CorrelationLogger
@@ -48,6 +50,10 @@ Sidekiq.configure_server do |config|
if enable_json_logs
Sidekiq.logger.formatter = Gitlab::SidekiqLogging::JSONFormatter.new
config.options[:job_logger] = Gitlab::SidekiqLogging::StructuredLogger
+
+ # Remove the default-provided handler
+ config.error_handlers.reject! { |handler| handler.is_a?(Sidekiq::ExceptionHandler::Logger) }
+ config.error_handlers << Gitlab::SidekiqLogging::ExceptionHandler.new
end
config.client_middleware do |chain|
@@ -60,7 +66,11 @@ Sidekiq.configure_server do |config|
# Sidekiq (e.g. in an initializer).
ActiveRecord::Base.clear_all_connections!
- Gitlab::SidekiqDaemon::Monitor.instance.start if enable_sidekiq_monitor
+ # Start monitor to track running jobs. By default, cancel job is not enabled
+ # To cancel job, it requires `SIDEKIQ_MONITOR_WORKER=1` to enable notification channel
+ Gitlab::SidekiqDaemon::Monitor.instance.start
+
+ Gitlab::SidekiqDaemon::MemoryKiller.instance.start if enable_sidekiq_memory_killer && use_sidekiq_daemon_memory_killer
end
if enable_reliable_fetch?
diff --git a/config/initializers/zz_metrics.rb b/config/initializers/zz_metrics.rb
index 501ec8ccc06..bc28780cc77 100644
--- a/config/initializers/zz_metrics.rb
+++ b/config/initializers/zz_metrics.rb
@@ -13,7 +13,7 @@ def instrument_classes(instrumentation)
instrumentation.instrument_methods(Gitlab::Git)
Gitlab::Git.constants.each do |name|
- const = Gitlab::Git.const_get(name)
+ const = Gitlab::Git.const_get(name, false)
next unless const.is_a?(Module)
@@ -75,7 +75,7 @@ def instrument_classes(instrumentation)
instrumentation.instrument_instance_methods(Rouge::Formatters::HTMLGitlab)
[:XML, :HTML].each do |namespace|
- namespace_mod = Nokogiri.const_get(namespace)
+ namespace_mod = Nokogiri.const_get(namespace, false)
instrumentation.instrument_methods(namespace_mod)
instrumentation.instrument_methods(namespace_mod::Document)
diff --git a/config/knative/api_resources.yml b/config/knative/api_resources.yml
index 43427b730db..095f44ed799 100644
--- a/config/knative/api_resources.yml
+++ b/config/knative/api_resources.yml
@@ -61,4 +61,10 @@
- virtualservices.networking.istio.io
- rbacconfigs.rbac.istio.io
- servicerolebindings.rbac.istio.io
-- serviceroles.rbac.istio.io \ No newline at end of file
+- serviceroles.rbac.istio.io
+- cloudwatches.config.istio.io
+- clusterrbacconfigs.rbac.istio.io
+- dogstatsds.config.istio.io
+- ingresses.networking.internal.knative.dev
+- sidecars.networking.istio.io
+- zipkins.config.istio.io
diff --git a/config/locales/en.yml b/config/locales/en.yml
index a60f86e1d80..eff015459e3 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -16,6 +16,9 @@ en:
api_url: "Sentry API URL"
project/metrics_setting:
external_dashboard_url: "External dashboard URL"
+ project/grafana_integration:
+ token: "Grafana HTTP API Token"
+ grafana_url: "Grafana API URL"
views:
pagination:
previous: "Prev"
diff --git a/config/locales/sherlock.en.yml b/config/locales/sherlock.en.yml
index f24b825f585..963e1d6295a 100644
--- a/config/locales/sherlock.en.yml
+++ b/config/locales/sherlock.en.yml
@@ -30,7 +30,7 @@ en:
origin: Origin
line: line
line_capitalized: Line
- copy_to_clipboard: Copy to clipboard
+ copy_to_clipboard: Copy
query_plan: Query Plan
events: Events
percent: '%'
diff --git a/config/prometheus/common_metrics.yml b/config/prometheus/common_metrics.yml
index 08504d6f7d5..795243fab49 100644
--- a/config/prometheus/common_metrics.yml
+++ b/config/prometheus/common_metrics.yml
@@ -209,6 +209,6 @@ panel_groups:
weight: 1
metrics:
- id: system_metrics_knative_function_invocation_count
- query_range: 'floor(sum(rate(istio_revision_request_count{destination_configuration="%{function_name}", destination_namespace="%{kube_namespace}"}[1m])/3))'
+ query_range: 'sum(ceil(rate(istio_requests_total{destination_service_namespace="%{kube_namespace}", destination_app=~"%{function_name}.*"}[1m])*60))'
label: invocations / minute
unit: requests
diff --git a/config/puma.example.development.rb b/config/puma.example.development.rb
index 9df24bf74e3..f23ccc23c9a 100644
--- a/config/puma.example.development.rb
+++ b/config/puma.example.development.rb
@@ -45,7 +45,7 @@ require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events"
on_restart do
# Signal application hooks that we're about to restart
- Gitlab::Cluster::LifecycleEvents.do_master_restart
+ Gitlab::Cluster::LifecycleEvents.do_before_master_restart
end
before_fork do
diff --git a/config/puma.rb.example b/config/puma.rb.example
index 6558dbc6cfe..10f255a87de 100644
--- a/config/puma.rb.example
+++ b/config/puma.rb.example
@@ -40,7 +40,7 @@ require_relative "/home/git/gitlab/lib/gitlab/cluster/puma_worker_killer_initial
on_restart do
# Signal application hooks that we're about to restart
- Gitlab::Cluster::LifecycleEvents.do_master_restart
+ Gitlab::Cluster::LifecycleEvents.do_before_master_restart
end
before_fork do
diff --git a/config/routes.rb b/config/routes.rb
index 4319431ed48..5bfae777f17 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -55,6 +55,10 @@ Rails.application.routes.draw do
get '/autocomplete/project_groups' => 'autocomplete#project_groups'
end
+ # Sign up
+ get 'users/sign_up/welcome' => 'registrations#welcome'
+ patch 'users/sign_up/update_role' => 'registrations#update_role'
+
# Search
get 'search' => 'search#show'
get 'search/autocomplete' => 'search#autocomplete', as: :search_autocomplete
@@ -145,6 +149,7 @@ Rails.application.routes.draw do
get :metrics, format: :json
get :metrics_dashboard
get :'/prometheus/api/v1/*proxy_path', to: 'clusters#prometheus_proxy', as: :prometheus_api
+ get :environments, format: :json
end
scope :applications do
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index a003ffca270..9238eae3a8e 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -13,6 +13,8 @@ namespace :admin do
get :keys
put :block
put :unblock
+ put :deactivate
+ put :activate
put :unlock
put :confirm
post :impersonate
@@ -21,6 +23,10 @@ namespace :admin do
end
end
+ resource :session, only: [:new, :create] do
+ get 'destroy', action: :destroy, as: :destroy
+ end
+
resource :impersonation, only: :destroy
resources :abuse_reports, only: [:index, :destroy]
@@ -110,7 +116,7 @@ namespace :admin do
put :reset_registration_token
put :reset_health_check_token
put :clear_repository_check_states
- match :general, :integrations, :repository, :templates, :ci_cd, :reporting, :metrics_and_profiling, :network, :geo, :preferences, via: [:get, :patch]
+ match :general, :integrations, :repository, :ci_cd, :reporting, :metrics_and_profiling, :network, :preferences, via: [:get, :patch]
get :lets_encrypt_terms_of_service
end
diff --git a/config/routes/group.rb b/config/routes/group.rb
index 37bc6085931..093cde64c85 100644
--- a/config/routes/group.rb
+++ b/config/routes/group.rb
@@ -30,7 +30,7 @@ constraints(::Constraints::GroupUrlConstrainer.new) do
as: :group,
constraints: { group_id: Gitlab::PathRegex.full_namespace_route_regex }) do
namespace :settings do
- resource :ci_cd, only: [:show], controller: 'ci_cd' do
+ resource :ci_cd, only: [:show, :update], controller: 'ci_cd' do
put :reset_registration_token
patch :update_auto_devops
end
@@ -77,6 +77,8 @@ constraints(::Constraints::GroupUrlConstrainer.new) do
post :pause
end
end
+
+ resources :container_registries, only: [:index], controller: 'registry/repositories'
end
scope(path: '*id',
diff --git a/config/routes/project.rb b/config/routes/project.rb
index c1273db8ee5..7d51cfd6dee 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -37,6 +37,8 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
scope '-' do
get 'archive/*id', constraints: { format: Gitlab::PathRegex.archive_formats_regex, id: /.+?/ }, to: 'repositories#archive', as: 'archive'
+ resources :artifacts, only: [:index, :destroy]
+
resources :jobs, only: [:index, :show], constraints: { id: /\d+/ } do
collection do
resources :artifacts, only: [] do
@@ -184,6 +186,10 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
resource :import, only: [:new, :create, :show]
resource :avatar, only: [:show, :destroy]
+
+ get 'grafana/proxy/:datasource_id/*proxy_path',
+ to: 'grafana_api#proxy',
+ as: :grafana_api
end
# End of the /-/ scope.
@@ -195,6 +201,12 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
defaults: { format: 'json' },
constraints: { key: %r{[^/]+}, template_type: %r{issue|merge_request}, format: 'json' }
+ get '/description_templates/names/:template_type',
+ to: 'templates#names',
+ as: :template_names,
+ defaults: { format: 'json' },
+ constraints: { template_type: %r{issue|merge_request}, format: 'json' }
+
resources :commit, only: [:show], constraints: { id: /\h{7,40}/ } do
member do
get :branches
@@ -273,6 +285,8 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
get :commits
get :pipelines
get :diffs, to: 'merge_requests/diffs#show'
+ get :diffs_batch, to: 'merge_requests/diffs#diffs_batch'
+ get :diffs_metadata, to: 'merge_requests/diffs#diffs_metadata'
get :widget, to: 'merge_requests/content#widget'
get :cached_widget, to: 'merge_requests/content#cached_widget'
end
@@ -379,6 +393,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
get :builds
get :failures
get :status
+ get :test_report
Gitlab.ee do
get :security
diff --git a/config/routes/repository.rb b/config/routes/repository.rb
index 093b86f3259..4815575ba9f 100644
--- a/config/routes/repository.rb
+++ b/config/routes/repository.rb
@@ -34,7 +34,7 @@ scope format: false do
# ref regex used in constraints. Regex verification now done in controller.
get 'logs_tree/*path', action: :logs_tree, as: :logs_file, format: false, constraints: {
id: /.*/,
- path: /.*/
+ path: /[^\0]*/
}
end
end
diff --git a/config/settings.rb b/config/settings.rb
index 8756c120645..767c6c56337 100644
--- a/config/settings.rb
+++ b/config/settings.rb
@@ -104,10 +104,10 @@ class Settings < Settingslogic
# check that `current` (string or integer) is a contant in `modul`.
def verify_constant(modul, current, default)
- constant = modul.constants.find { |name| modul.const_get(name) == current }
- value = constant.nil? ? default : modul.const_get(constant)
+ constant = modul.constants.find { |name| modul.const_get(name, false) == current }
+ value = constant.nil? ? default : modul.const_get(constant, false)
if current.is_a? String
- value = modul.const_get(current.upcase) rescue default
+ value = modul.const_get(current.upcase, false) rescue default
end
value
diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml
index f37cd518d48..b97e8ad67c9 100644
--- a/config/sidekiq_queues.yml
+++ b/config/sidekiq_queues.yml
@@ -24,6 +24,7 @@
- [process_commit, 3]
- [new_note, 2]
- [new_issue, 2]
+ - [notifications, 2]
- [new_merge_request, 2]
- [pipeline_processing, 5]
- [pipeline_creation, 4]
@@ -49,7 +50,7 @@
- [delete_user, 1]
- [todos_destroyer, 1]
- [delete_merged_branches, 1]
- - [authorized_projects, 1]
+ - [authorized_projects, 2]
- [expire_build_instance_artifacts, 1]
- [group_destroy, 1]
- [irker, 1]
@@ -96,6 +97,7 @@
- [phabricator_import_import_tasks, 1]
- [update_namespace_statistics, 1]
- [chaos, 2]
+ - [create_evidence, 2]
# EE-specific queues
- [ldap_group_sync, 2]
@@ -117,3 +119,4 @@
- [jira_connect, 1]
- [update_external_pull_requests, 3]
- [refresh_license_compliance_checks, 2]
+ - [design_management_new_version, 1]
diff --git a/config/unicorn.rb.example b/config/unicorn.rb.example
index 581fde84c95..9f13fac5cca 100644
--- a/config/unicorn.rb.example
+++ b/config/unicorn.rb.example
@@ -85,7 +85,7 @@ require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events"
before_exec do |server|
# Signal application hooks that we're about to restart
- Gitlab::Cluster::LifecycleEvents.do_master_restart
+ Gitlab::Cluster::LifecycleEvents.do_before_master_restart
end
run_once = true
diff --git a/config/unicorn.rb.example.development b/config/unicorn.rb.example.development
index 9a02d5f1007..92bb1c7344a 100644
--- a/config/unicorn.rb.example.development
+++ b/config/unicorn.rb.example.development
@@ -18,7 +18,7 @@ require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events"
before_exec do |server|
# Signal application hooks that we're about to restart
- Gitlab::Cluster::LifecycleEvents.do_master_restart
+ Gitlab::Cluster::LifecycleEvents.do_before_master_restart
end
run_once = true
diff --git a/config/webpack.config.js b/config/webpack.config.js
index f3f0a5f8934..25fb6cc5f5a 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -11,7 +11,7 @@ const CopyWebpackPlugin = require('copy-webpack-plugin');
const ROOT_PATH = path.resolve(__dirname, '..');
const CACHE_PATH = process.env.WEBPACK_CACHE_PATH || path.join(ROOT_PATH, 'tmp/cache');
const IS_PRODUCTION = process.env.NODE_ENV === 'production';
-const IS_DEV_SERVER = process.argv.join(' ').indexOf('webpack-dev-server') !== -1;
+const IS_DEV_SERVER = process.env.WEBPACK_DEV_SERVER === 'true';
const IS_EE = require('./helpers/is_ee_env');
const DEV_SERVER_HOST = process.env.DEV_SERVER_HOST || 'localhost';
const DEV_SERVER_PORT = parseInt(process.env.DEV_SERVER_PORT, 10) || 3808;
@@ -373,11 +373,14 @@ module.exports = {
openAnalyzer: false,
reportFilename: path.join(ROOT_PATH, 'webpack-report/index.html'),
statsFilename: path.join(ROOT_PATH, 'webpack-report/stats.json'),
+ statsOptions: {
+ source: false,
+ },
}),
new webpack.DefinePlugin({
// This one is used to define window.gon.ee and other things properly in tests:
- 'process.env.IS_GITLAB_EE': JSON.stringify(IS_EE),
+ 'process.env.IS_EE': JSON.stringify(IS_EE),
// This one is used to check against "EE" properly in application code
IS_EE: IS_EE ? 'window.gon && window.gon.ee' : JSON.stringify(false),
}),
diff --git a/danger/documentation/Dangerfile b/danger/documentation/Dangerfile
index ad64c3a6c60..1e27f9779e8 100644
--- a/danger/documentation/Dangerfile
+++ b/danger/documentation/Dangerfile
@@ -20,8 +20,8 @@ unless docs_paths_to_review.empty?
- [Documentation workflows](https://docs.gitlab.com/ee/development/documentation/workflow.html) for information on when to assign a merge request for review.
MARKDOWN
- unless gitlab.mr_labels.include?('Documentation')
- warn 'This merge request is missing the ~Documentation label.'
+ unless gitlab.mr_labels.include?('documentation')
+ warn 'This merge request is missing the ~documentation label.'
end
end
end
diff --git a/danger/specs/Dangerfile b/danger/specs/Dangerfile
index a526bb8adaa..50887c44b3e 100644
--- a/danger/specs/Dangerfile
+++ b/danger/specs/Dangerfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-NO_SPECS_LABELS = %w[backstage Documentation QA].freeze
+NO_SPECS_LABELS = %w[backstage documentation QA].freeze
NO_NEW_SPEC_MESSAGE = <<~MSG.freeze
You've made some app changes, but didn't add any tests.
That's OK as long as you're refactoring existing code,
diff --git a/db/fixtures/development/17_cycle_analytics.rb b/db/fixtures/development/17_cycle_analytics.rb
index 9d293f425e6..b7ddeef95b8 100644
--- a/db/fixtures/development/17_cycle_analytics.rb
+++ b/db/fixtures/development/17_cycle_analytics.rb
@@ -150,9 +150,11 @@ class Gitlab::Seeder::CycleAnalytics
::Git::BranchPushService.new(
issue.project,
@user,
- oldrev: issue.project.repository.commit("master").sha,
- newrev: commit_sha,
- ref: 'refs/heads/master'
+ change: {
+ oldrev: issue.project.repository.commit("master").sha,
+ newrev: commit_sha,
+ ref: 'refs/heads/master'
+ }
).execute
branch_name
diff --git a/db/migrate/20180113220114_rework_redirect_routes_indexes.rb b/db/migrate/20180113220114_rework_redirect_routes_indexes.rb
index 4c3bb0a26ce..2b9365ce827 100644
--- a/db/migrate/20180113220114_rework_redirect_routes_indexes.rb
+++ b/db/migrate/20180113220114_rework_redirect_routes_indexes.rb
@@ -20,9 +20,7 @@ class ReworkRedirectRoutesIndexes < ActiveRecord::Migration[4.2]
def up
disable_statement_timeout do
# this is a plain btree on a single boolean column. It'll never be
- # selective enough to be valuable. This class is called by
- # setup_postgresql.rake so it needs to be able to handle this
- # index not existing.
+ # selective enough to be valuable.
if index_exists?(:redirect_routes, :permanent)
remove_concurrent_index(:redirect_routes, :permanent)
end
diff --git a/db/migrate/20190801142441_add_throttle_protected_path_columns.rb b/db/migrate/20190801142441_add_throttle_protected_path_columns.rb
new file mode 100644
index 00000000000..bb6d54f3b7b
--- /dev/null
+++ b/db/migrate/20190801142441_add_throttle_protected_path_columns.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+class AddThrottleProtectedPathColumns < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ DEFAULT_PROTECTED_PATHS = [
+ '/users/password',
+ '/users/sign_in',
+ '/api/v3/session.json',
+ '/api/v3/session',
+ '/api/v4/session.json',
+ '/api/v4/session',
+ '/users',
+ '/users/confirmation',
+ '/unsubscribes/',
+ '/import/github/personal_access_token'
+ ]
+
+ def change
+ add_column :application_settings, :throttle_protected_paths_enabled, :boolean, default: true, null: false
+ add_column :application_settings, :throttle_protected_paths_requests_per_period, :integer, default: 10, null: false
+ add_column :application_settings, :throttle_protected_paths_period_in_seconds, :integer, default: 60, null: false
+ add_column :application_settings, :protected_paths, :string, array: true, limit: 255, default: DEFAULT_PROTECTED_PATHS
+ end
+end
diff --git a/db/migrate/20190807023052_design_issue_id_nullable.rb b/db/migrate/20190807023052_design_issue_id_nullable.rb
new file mode 100644
index 00000000000..4429e23d520
--- /dev/null
+++ b/db/migrate/20190807023052_design_issue_id_nullable.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class DesignIssueIdNullable < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ change_column_null :design_management_designs, :issue_id, true
+ end
+end
diff --git a/db/migrate/20190821040941_create_cluster_providers_aws.rb b/db/migrate/20190821040941_create_cluster_providers_aws.rb
new file mode 100644
index 00000000000..f80559861c4
--- /dev/null
+++ b/db/migrate/20190821040941_create_cluster_providers_aws.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class CreateClusterProvidersAws < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ create_table :cluster_providers_aws do |t|
+ t.references :cluster, null: false, type: :bigint, index: { unique: true }, foreign_key: { on_delete: :cascade }
+ t.references :created_by_user, type: :integer, foreign_key: { on_delete: :nullify, to_table: :users }
+
+ t.integer :num_nodes, null: false
+ t.integer :status, null: false
+
+ t.timestamps_with_timezone null: false
+
+ t.string :key_name, null: false, limit: 255
+ t.string :role_arn, null: false, limit: 2048
+ t.string :region, null: false, limit: 255
+ t.string :vpc_id, null: false, limit: 255
+ t.string :subnet_ids, null: false, array: true, default: [], limit: 255
+ t.string :security_group_id, null: false, limit: 255
+ t.string :instance_type, null: false, limit: 255
+
+ t.string :access_key_id, limit: 255
+ t.string :encrypted_secret_access_key_iv, limit: 255
+ t.text :encrypted_secret_access_key
+ t.text :session_token
+ t.text :status_reason
+
+ t.index [:cluster_id, :status]
+ end
+ end
+end
diff --git a/db/migrate/20190901174200_add_max_issue_count_to_list.rb b/db/migrate/20190901174200_add_max_issue_count_to_list.rb
new file mode 100644
index 00000000000..59359f28d6a
--- /dev/null
+++ b/db/migrate/20190901174200_add_max_issue_count_to_list.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddMaxIssueCountToList < ActiveRecord::Migration[4.2]
+ include Gitlab::Database::MigrationHelpers
+ disable_ddl_transaction!
+
+ DOWNTIME = false
+
+ def up
+ add_column_with_default :lists, :max_issue_count, :integer, default: 0
+ end
+
+ def down
+ remove_column :lists, :max_issue_count
+ end
+end
diff --git a/db/migrate/20190903150358_create_analytics_repository_files_table.rb b/db/migrate/20190903150358_create_analytics_repository_files_table.rb
new file mode 100644
index 00000000000..e7c30a149f9
--- /dev/null
+++ b/db/migrate/20190903150358_create_analytics_repository_files_table.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class CreateAnalyticsRepositoryFilesTable < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ create_table :analytics_repository_files do |t|
+ t.references :project,
+ index: false,
+ foreign_key: { on_delete: :cascade },
+ null: false
+ t.string :file_path,
+ limit: 4096,
+ null: false
+ end
+
+ add_index :analytics_repository_files, [:project_id, :file_path], unique: true
+ end
+end
diff --git a/db/migrate/20190903150435_create_analytics_repository_file_edits_table.rb b/db/migrate/20190903150435_create_analytics_repository_file_edits_table.rb
new file mode 100644
index 00000000000..dca3fa1b37d
--- /dev/null
+++ b/db/migrate/20190903150435_create_analytics_repository_file_edits_table.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+class CreateAnalyticsRepositoryFileEditsTable < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ create_table :analytics_repository_file_edits do |t|
+ t.references :project,
+ index: true,
+ foreign_key: { on_delete: :cascade }, null: false
+ t.references :analytics_repository_file,
+ index: false,
+ foreign_key: { on_delete: :cascade },
+ null: false
+ t.date :committed_date,
+ null: false
+ t.integer :num_edits,
+ null: false,
+ default: 0
+ end
+
+ add_index :analytics_repository_file_edits,
+ [:analytics_repository_file_id, :committed_date, :project_id],
+ name: 'index_file_edits_on_committed_date_file_id_and_project_id',
+ unique: true
+ end
+end
diff --git a/db/migrate/20190905022045_add_issues_prometheus_alert_event_join_table.rb b/db/migrate/20190905022045_add_issues_prometheus_alert_event_join_table.rb
new file mode 100644
index 00000000000..861b97f0a09
--- /dev/null
+++ b/db/migrate/20190905022045_add_issues_prometheus_alert_event_join_table.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class AddIssuesPrometheusAlertEventJoinTable < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ create_table :issues_prometheus_alert_events, id: false do |t|
+ t.references :issue, null: false,
+ index: false, # Uses the index below
+ foreign_key: { on_delete: :cascade }
+ t.references :prometheus_alert_event, null: false,
+ index: { name: 'issue_id_issues_prometheus_alert_events_index' },
+ foreign_key: { on_delete: :cascade }
+
+ t.timestamps_with_timezone
+ t.index [:issue_id, :prometheus_alert_event_id],
+ unique: true, name: 'issue_id_prometheus_alert_event_id_index'
+ end
+ end
+end
diff --git a/db/migrate/20190905074652_index_timestamp_columns_for_issue_metrics.rb b/db/migrate/20190905074652_index_timestamp_columns_for_issue_metrics.rb
new file mode 100644
index 00000000000..e468b2decd9
--- /dev/null
+++ b/db/migrate/20190905074652_index_timestamp_columns_for_issue_metrics.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+class IndexTimestampColumnsForIssueMetrics < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index(*index_arguments)
+ end
+
+ def down
+ remove_concurrent_index(*index_arguments)
+ end
+
+ private
+
+ def index_arguments
+ [
+ :issue_metrics,
+ [:issue_id, :first_mentioned_in_commit_at, :first_associated_with_milestone_at, :first_added_to_board_at],
+ {
+ name: 'index_issue_metrics_on_issue_id_and_timestamps'
+ }
+ ]
+ end
+end
diff --git a/db/migrate/20190905140605_add_cloud_run_to_clusters_providers_gcp.rb b/db/migrate/20190905140605_add_cloud_run_to_clusters_providers_gcp.rb
new file mode 100644
index 00000000000..e7ffd7cd4d3
--- /dev/null
+++ b/db/migrate/20190905140605_add_cloud_run_to_clusters_providers_gcp.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddCloudRunToClustersProvidersGcp < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_column_with_default(:cluster_providers_gcp, :cloud_run, :boolean, default: false)
+ end
+
+ def down
+ remove_column(:cluster_providers_gcp, :cloud_run)
+ end
+end
diff --git a/db/migrate/20190909045845_create_project_pages_metadata.rb b/db/migrate/20190909045845_create_project_pages_metadata.rb
new file mode 100644
index 00000000000..5fc8fc6e6c1
--- /dev/null
+++ b/db/migrate/20190909045845_create_project_pages_metadata.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class CreateProjectPagesMetadata < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ create_table :project_pages_metadata, id: false do |t|
+ t.references :project, null: false, index: { unique: true }, foreign_key: { on_delete: :cascade }
+ t.boolean :deployed, null: false, default: false
+
+ t.index :project_id, name: 'index_project_pages_metadata_on_project_id_and_deployed_is_true', where: "deployed = TRUE"
+ end
+ end
+end
diff --git a/db/migrate/20190911115056_add_projects_max_pages_size.rb b/db/migrate/20190911115056_add_projects_max_pages_size.rb
new file mode 100644
index 00000000000..175c66953ed
--- /dev/null
+++ b/db/migrate/20190911115056_add_projects_max_pages_size.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddProjectsMaxPagesSize < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :projects, :max_pages_size, :integer
+ end
+end
diff --git a/db/migrate/20190911115109_add_namespaces_max_pages_size.rb b/db/migrate/20190911115109_add_namespaces_max_pages_size.rb
new file mode 100644
index 00000000000..c14dfa74a5a
--- /dev/null
+++ b/db/migrate/20190911115109_add_namespaces_max_pages_size.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddNamespacesMaxPagesSize < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :namespaces, :max_pages_size, :integer
+ end
+end
diff --git a/db/migrate/20190911115207_add_projects_max_artifacts_size.rb b/db/migrate/20190911115207_add_projects_max_artifacts_size.rb
new file mode 100644
index 00000000000..41cab7e5282
--- /dev/null
+++ b/db/migrate/20190911115207_add_projects_max_artifacts_size.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddProjectsMaxArtifactsSize < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :projects, :max_artifacts_size, :integer
+ end
+end
diff --git a/db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb b/db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb
new file mode 100644
index 00000000000..60c594c47a6
--- /dev/null
+++ b/db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddNamespacesMaxArtifactsSize < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :namespaces, :max_artifacts_size, :integer
+ end
+end
diff --git a/db/migrate/20190912223232_add_role_to_users.rb b/db/migrate/20190912223232_add_role_to_users.rb
new file mode 100644
index 00000000000..afbd78ed509
--- /dev/null
+++ b/db/migrate/20190912223232_add_role_to_users.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddRoleToUsers < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :users, :role, :smallint
+ end
+end
diff --git a/db/migrate/20190913174707_add_spdx_id_to_software_licenses.rb b/db/migrate/20190913174707_add_spdx_id_to_software_licenses.rb
new file mode 100644
index 00000000000..66cd450895c
--- /dev/null
+++ b/db/migrate/20190913174707_add_spdx_id_to_software_licenses.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddSpdxIdToSoftwareLicenses < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def up
+ add_column :software_licenses, :spdx_identifier, :string, limit: 255
+ end
+
+ def down
+ remove_column :software_licenses, :spdx_identifier
+ end
+end
diff --git a/db/migrate/20190913175827_add_index_to_software_licenses_on_spdx_id.rb b/db/migrate/20190913175827_add_index_to_software_licenses_on_spdx_id.rb
new file mode 100644
index 00000000000..94f8738b0cc
--- /dev/null
+++ b/db/migrate/20190913175827_add_index_to_software_licenses_on_spdx_id.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddIndexToSoftwareLicensesOnSpdxId < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :software_licenses, :spdx_identifier
+ end
+
+ def down
+ remove_concurrent_index :software_licenses, :spdx_identifier
+ end
+end
diff --git a/db/migrate/20190918025618_add_user_and_timestamps_to_design_management_versions.rb b/db/migrate/20190918025618_add_user_and_timestamps_to_design_management_versions.rb
new file mode 100644
index 00000000000..3daca8a8e97
--- /dev/null
+++ b/db/migrate/20190918025618_add_user_and_timestamps_to_design_management_versions.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddUserAndTimestampsToDesignManagementVersions < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ add_column :design_management_versions, :user_id, :integer
+ add_column :design_management_versions, :created_at, :datetime_with_timezone
+ end
+
+ def down
+ remove_columns :design_management_versions, :user_id, :created_at
+ end
+end
diff --git a/db/migrate/20190918102042_create_grafana_integrations.rb b/db/migrate/20190918102042_create_grafana_integrations.rb
new file mode 100644
index 00000000000..aac27d129db
--- /dev/null
+++ b/db/migrate/20190918102042_create_grafana_integrations.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class CreateGrafanaIntegrations < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ create_table :grafana_integrations do |t|
+ t.references :project, index: true, foreign_key: { on_delete: :cascade }, unique: true, null: false
+ t.timestamps_with_timezone null: false
+ t.string :encrypted_token, limit: 255, null: false
+ t.string :encrypted_token_iv, limit: 255, null: false
+ t.string :grafana_url, null: false, limit: 1024
+ end
+ end
+end
diff --git a/db/migrate/20190919040324_add_successfull_pages_deploy_partial_index_on_ci_builds.rb b/db/migrate/20190919040324_add_successfull_pages_deploy_partial_index_on_ci_builds.rb
new file mode 100644
index 00000000000..d736b21dddf
--- /dev/null
+++ b/db/migrate/20190919040324_add_successfull_pages_deploy_partial_index_on_ci_builds.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddSuccessfullPagesDeployPartialIndexOnCiBuilds < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ INDEX_NAME = 'index_ci_builds_on_project_id_for_successfull_pages_deploy'
+
+ def up
+ add_concurrent_index(
+ :ci_builds, :project_id,
+ name: INDEX_NAME,
+ where: "type='GenericCommitStatus' AND stage='deploy' AND name='pages:deploy' AND status = 'success'"
+ )
+ end
+
+ def down
+ remove_concurrent_index_by_name :ci_builds, INDEX_NAME
+ end
+end
diff --git a/db/migrate/20190919091300_create_evidences.rb b/db/migrate/20190919091300_create_evidences.rb
new file mode 100644
index 00000000000..3f861ed26bd
--- /dev/null
+++ b/db/migrate/20190919091300_create_evidences.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class CreateEvidences < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ create_table :evidences do |t|
+ t.references :release, foreign_key: { on_delete: :cascade }, null: false
+ t.timestamps_with_timezone
+ t.binary :summary_sha
+ t.jsonb :summary, null: false, default: {}
+ end
+ end
+end
diff --git a/db/migrate/20190919104119_index_timestamp_columns_for_merge_requests_creation_date.rb b/db/migrate/20190919104119_index_timestamp_columns_for_merge_requests_creation_date.rb
new file mode 100644
index 00000000000..5e0d80630cd
--- /dev/null
+++ b/db/migrate/20190919104119_index_timestamp_columns_for_merge_requests_creation_date.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+class IndexTimestampColumnsForMergeRequestsCreationDate < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index(*index_arguments)
+ end
+
+ def down
+ remove_concurrent_index(*index_arguments)
+ end
+
+ private
+
+ def index_arguments
+ [
+ :merge_requests,
+ [:target_project_id, :created_at],
+ {
+ name: 'index_merge_requests_target_project_id_created_at'
+ }
+ ]
+ end
+end
diff --git a/db/migrate/20190919162036_add_index_to_clusters_providers_gcp_on_cloud_run.rb b/db/migrate/20190919162036_add_index_to_clusters_providers_gcp_on_cloud_run.rb
new file mode 100644
index 00000000000..8e0bde97cc1
--- /dev/null
+++ b/db/migrate/20190919162036_add_index_to_clusters_providers_gcp_on_cloud_run.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddIndexToClustersProvidersGcpOnCloudRun < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index(:cluster_providers_gcp, :cloud_run)
+ end
+
+ def down
+ remove_concurrent_index(:cluster_providers_gcp, :cloud_run)
+ end
+end
diff --git a/db/migrate/20190919183411_add_index_packages_on_name_trigram_to_packages_packages.rb b/db/migrate/20190919183411_add_index_packages_on_name_trigram_to_packages_packages.rb
new file mode 100644
index 00000000000..d359350a891
--- /dev/null
+++ b/db/migrate/20190919183411_add_index_packages_on_name_trigram_to_packages_packages.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddIndexPackagesOnNameTrigramToPackagesPackages < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_packages_packages_on_name_trigram'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :packages_packages, :name, name: INDEX_NAME, using: :gin, opclass: { name: :gin_trgm_ops }
+ end
+
+ def down
+ remove_concurrent_index_by_name(:packages_packages, INDEX_NAME)
+ end
+end
diff --git a/db/migrate/20190920194925_backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps.rb b/db/migrate/20190920194925_backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps.rb
new file mode 100644
index 00000000000..f8f1c6c231b
--- /dev/null
+++ b/db/migrate/20190920194925_backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class BackfillReleasesTableUpdatedAtAndAddNotNullConstraintsToTimestamps < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ change_column_null(:releases, :created_at, false, Time.zone.now)
+
+ update_column_in_batches(:releases, :updated_at, Arel.sql('created_at')) do |table, query|
+ query.where(table[:updated_at].eq(nil))
+ end
+
+ change_column_null(:releases, :updated_at, false, Time.zone.now)
+ end
+
+ def down
+ change_column_null(:releases, :updated_at, true)
+ change_column_null(:releases, :created_at, true)
+ end
+end
diff --git a/db/migrate/20190924124627_add_pull_mirror_branch_prefix_to_projects.rb b/db/migrate/20190924124627_add_pull_mirror_branch_prefix_to_projects.rb
new file mode 100644
index 00000000000..b9f729d7d66
--- /dev/null
+++ b/db/migrate/20190924124627_add_pull_mirror_branch_prefix_to_projects.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddPullMirrorBranchPrefixToProjects < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :projects, :pull_mirror_branch_prefix, :string, limit: 50
+ end
+end
diff --git a/db/migrate/20190925055714_default_request_access_groups.rb b/db/migrate/20190925055714_default_request_access_groups.rb
new file mode 100644
index 00000000000..ba3efbe56f4
--- /dev/null
+++ b/db/migrate/20190925055714_default_request_access_groups.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class DefaultRequestAccessGroups < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ change_column_default :namespaces, :request_access_enabled, true
+ end
+
+ def down
+ change_column_default :namespaces, :request_access_enabled, false
+ end
+end
diff --git a/db/migrate/20190925055902_default_request_access_projects.rb b/db/migrate/20190925055902_default_request_access_projects.rb
new file mode 100644
index 00000000000..3ad88d0963d
--- /dev/null
+++ b/db/migrate/20190925055902_default_request_access_projects.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class DefaultRequestAccessProjects < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ change_column_default :projects, :request_access_enabled, true
+ end
+
+ def down
+ change_column_default :projects, :request_access_enabled, false
+ end
+end
diff --git a/db/migrate/20190926041216_add_user_indexes_to_design_management_versions.rb b/db/migrate/20190926041216_add_user_indexes_to_design_management_versions.rb
new file mode 100644
index 00000000000..6eb9fdbbcaa
--- /dev/null
+++ b/db/migrate/20190926041216_add_user_indexes_to_design_management_versions.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddUserIndexesToDesignManagementVersions < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key :design_management_versions, :users, column: :user_id, on_delete: :nullify
+ add_concurrent_index :design_management_versions, :user_id, where: 'user_id IS NOT NULL'
+ end
+
+ def down
+ remove_concurrent_index :design_management_versions, :user_id
+ remove_foreign_key :design_management_versions, column: :user_id
+ end
+end
diff --git a/db/migrate/20190927055500_create_description_versions.rb b/db/migrate/20190927055500_create_description_versions.rb
new file mode 100644
index 00000000000..6ad34d4a89e
--- /dev/null
+++ b/db/migrate/20190927055500_create_description_versions.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+class CreateDescriptionVersions < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ create_table :description_versions do |t|
+ t.timestamps_with_timezone
+ t.references :issue, index: false, foreign_key: { on_delete: :cascade }, type: :integer
+ t.references :merge_request, index: false, foreign_key: { on_delete: :cascade }, type: :integer
+ t.references :epic, index: false, foreign_key: { on_delete: :cascade }, type: :integer
+ t.text :description
+ end
+
+ add_index :description_versions, :issue_id, where: 'issue_id IS NOT NULL'
+ add_index :description_versions, :merge_request_id, where: 'merge_request_id IS NOT NULL'
+ add_index :description_versions, :epic_id, where: 'epic_id IS NOT NULL'
+
+ add_column :system_note_metadata, :description_version_id, :bigint
+ end
+
+ def down
+ remove_column :system_note_metadata, :description_version_id
+
+ drop_table :description_versions
+ end
+end
diff --git a/db/migrate/20190927055540_add_index_to_sytem_note_metadata_description_version_id.rb b/db/migrate/20190927055540_add_index_to_sytem_note_metadata_description_version_id.rb
new file mode 100644
index 00000000000..695ba955043
--- /dev/null
+++ b/db/migrate/20190927055540_add_index_to_sytem_note_metadata_description_version_id.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddIndexToSytemNoteMetadataDescriptionVersionId < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :system_note_metadata, :description_version_id, unique: true, where: 'description_version_id IS NOT NULL'
+ add_concurrent_foreign_key :system_note_metadata, :description_versions, column: :description_version_id, on_delete: :nullify
+ end
+
+ def down
+ remove_foreign_key :system_note_metadata, column: :description_version_id
+ remove_concurrent_index :system_note_metadata, :description_version_id
+ end
+end
diff --git a/db/migrate/20190927074328_add_index_on_snippet_content.rb b/db/migrate/20190927074328_add_index_on_snippet_content.rb
new file mode 100644
index 00000000000..ef7583508f2
--- /dev/null
+++ b/db/migrate/20190927074328_add_index_on_snippet_content.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddIndexOnSnippetContent < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ INDEX_NAME = 'index_snippets_on_content_trigram'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :snippets, :content, name: INDEX_NAME, using: :gin, opclass: { content: :gin_trgm_ops }
+ end
+
+ def down
+ remove_concurrent_index_by_name(:snippets, INDEX_NAME)
+ end
+end
diff --git a/db/migrate/20190929180751_create_vulnerabilities.rb b/db/migrate/20190929180751_create_vulnerabilities.rb
new file mode 100644
index 00000000000..aea018c5979
--- /dev/null
+++ b/db/migrate/20190929180751_create_vulnerabilities.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class CreateVulnerabilities < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ create_table :vulnerabilities do |t|
+ t.bigint "milestone_id"
+ t.bigint "epic_id"
+ t.bigint "project_id", null: false
+ t.bigint "author_id", null: false
+ t.bigint "updated_by_id"
+ t.bigint "last_edited_by_id"
+ t.bigint "start_date_sourcing_milestone_id"
+ t.bigint "due_date_sourcing_milestone_id"
+ t.bigint "closed_by_id"
+ t.datetime_with_timezone "last_edited_at"
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.datetime_with_timezone "closed_at"
+ t.date "start_date"
+ t.date "due_date"
+ t.integer "state", limit: 2, default: 1, null: false # initially: open, closed
+ t.integer "severity", limit: 2, null: false # auto-calculated as highest-severity finding, but overrideable
+ t.integer "confidence", limit: 2, null: false # auto-calculated as lowest-confidence finding, but overrideable
+ t.boolean "severity_overridden", default: false
+ t.boolean "confidence_overridden", default: false
+ t.string "title", limit: 255, null: false
+ t.text "title_html", null: false
+ t.text "description"
+ t.text "description_html"
+ end
+ end
+end
diff --git a/db/migrate/20190929180813_add_reference_from_vulnerability_occurrences_to_occurrences.rb b/db/migrate/20190929180813_add_reference_from_vulnerability_occurrences_to_occurrences.rb
new file mode 100644
index 00000000000..eb8e8fb73d1
--- /dev/null
+++ b/db/migrate/20190929180813_add_reference_from_vulnerability_occurrences_to_occurrences.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddReferenceFromVulnerabilityOccurrencesToOccurrences < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ add_column :vulnerability_occurrences, :vulnerability_id, :bigint
+ end
+end
diff --git a/db/migrate/20190929180827_add_foreign_keys_and_indexes_to_vulnerabilities.rb b/db/migrate/20190929180827_add_foreign_keys_and_indexes_to_vulnerabilities.rb
new file mode 100644
index 00000000000..4d7c2363083
--- /dev/null
+++ b/db/migrate/20190929180827_add_foreign_keys_and_indexes_to_vulnerabilities.rb
@@ -0,0 +1,76 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddForeignKeysAndIndexesToVulnerabilities < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :vulnerabilities, :milestone_id
+ add_concurrent_foreign_key :vulnerabilities, :milestones, column: :milestone_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerabilities, :epic_id
+ add_concurrent_foreign_key :vulnerabilities, :epics, column: :epic_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerabilities, :project_id
+ add_concurrent_foreign_key :vulnerabilities, :projects, column: :project_id
+
+ add_concurrent_index :vulnerabilities, :author_id
+ add_concurrent_foreign_key :vulnerabilities, :users, column: :author_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerabilities, :updated_by_id
+ add_concurrent_foreign_key :vulnerabilities, :users, column: :updated_by_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerabilities, :last_edited_by_id
+ add_concurrent_foreign_key :vulnerabilities, :users, column: :last_edited_by_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerabilities, :closed_by_id
+ add_concurrent_foreign_key :vulnerabilities, :users, column: :closed_by_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerabilities, :start_date_sourcing_milestone_id
+ add_concurrent_foreign_key :vulnerabilities, :milestones, column: :start_date_sourcing_milestone_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerabilities, :due_date_sourcing_milestone_id
+ add_concurrent_foreign_key :vulnerabilities, :milestones, column: :due_date_sourcing_milestone_id, on_delete: :nullify
+
+ add_concurrent_index :vulnerability_occurrences, :vulnerability_id
+ add_concurrent_foreign_key :vulnerability_occurrences, :vulnerabilities, column: :vulnerability_id, on_delete: :nullify
+ end
+
+ def down
+ remove_foreign_key :vulnerability_occurrences, :vulnerabilities
+ remove_concurrent_index :vulnerability_occurrences, :vulnerability_id
+
+ remove_foreign_key :vulnerabilities, column: :due_date_sourcing_milestone_id
+ remove_concurrent_index :vulnerabilities, :due_date_sourcing_milestone_id
+
+ remove_foreign_key :vulnerabilities, column: :start_date_sourcing_milestone_id
+ remove_concurrent_index :vulnerabilities, :start_date_sourcing_milestone_id
+
+ remove_foreign_key :vulnerabilities, column: :closed_by_id
+ remove_concurrent_index :vulnerabilities, :closed_by_id
+
+ remove_foreign_key :vulnerabilities, column: :last_edited_by_id
+ remove_concurrent_index :vulnerabilities, :last_edited_by_id
+
+ remove_foreign_key :vulnerabilities, column: :updated_by_id
+ remove_concurrent_index :vulnerabilities, :updated_by_id
+
+ remove_foreign_key :vulnerabilities, column: :author_id
+ remove_concurrent_index :vulnerabilities, :author_id
+
+ remove_foreign_key :vulnerabilities, :projects
+ remove_concurrent_index :vulnerabilities, :project_id
+
+ remove_foreign_key :vulnerabilities, :epics
+ remove_concurrent_index :vulnerabilities, :epic_id
+
+ remove_foreign_key :vulnerabilities, :milestones
+ remove_concurrent_index :vulnerabilities, :milestone_id
+ end
+end
diff --git a/db/migrate/20190930025655_add_incident_management_throttle_columns_to_application_setting.rb b/db/migrate/20190930025655_add_incident_management_throttle_columns_to_application_setting.rb
new file mode 100644
index 00000000000..577c705fbef
--- /dev/null
+++ b/db/migrate/20190930025655_add_incident_management_throttle_columns_to_application_setting.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class AddIncidentManagementThrottleColumnsToApplicationSetting < ActiveRecord::Migration[5.2]
+ # Set this constant to true if this migration requires downtime.
+ DOWNTIME = false
+
+ def up
+ add_column(:application_settings,
+ :throttle_incident_management_notification_enabled,
+ :boolean,
+ null: false,
+ default: false)
+
+ add_column(:application_settings,
+ :throttle_incident_management_notification_period_in_seconds,
+ :integer,
+ default: 3_600)
+
+ add_column(:application_settings,
+ :throttle_incident_management_notification_per_period,
+ :integer,
+ default: 3_600)
+ end
+
+ def down
+ remove_column :application_settings, :throttle_incident_management_notification_enabled
+ remove_column :application_settings, :throttle_incident_management_notification_period_in_seconds
+ remove_column :application_settings, :throttle_incident_management_notification_per_period
+ end
+end
diff --git a/db/migrate/20190930063627_add_management_project_id_to_clusters.rb b/db/migrate/20190930063627_add_management_project_id_to_clusters.rb
new file mode 100644
index 00000000000..46c3fef8e76
--- /dev/null
+++ b/db/migrate/20190930063627_add_management_project_id_to_clusters.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddManagementProjectIdToClusters < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :clusters, :management_project_id, :integer
+ end
+end
diff --git a/db/migrate/20190930082942_add_new_release_to_notification_settings.rb b/db/migrate/20190930082942_add_new_release_to_notification_settings.rb
new file mode 100644
index 00000000000..2ec5815f542
--- /dev/null
+++ b/db/migrate/20190930082942_add_new_release_to_notification_settings.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddNewReleaseToNotificationSettings < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ add_column :notification_settings, :new_release, :boolean
+ end
+end
diff --git a/db/migrate/20191001040549_add_management_project_id_index_fk_to_clusters.rb b/db/migrate/20191001040549_add_management_project_id_index_fk_to_clusters.rb
new file mode 100644
index 00000000000..97253dd1f2d
--- /dev/null
+++ b/db/migrate/20191001040549_add_management_project_id_index_fk_to_clusters.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class AddManagementProjectIdIndexFkToClusters < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_foreign_key :clusters, :projects, column: :management_project_id, on_delete: :nullify
+ add_concurrent_index :clusters, :management_project_id, where: 'management_project_id IS NOT NULL'
+ end
+
+ def down
+ remove_concurrent_index :clusters, :management_project_id
+ remove_foreign_key_if_exists :clusters, column: :management_project_id
+ end
+end
diff --git a/db/migrate/20191003015155_add_self_managed_prometheus_alerts.rb b/db/migrate/20191003015155_add_self_managed_prometheus_alerts.rb
new file mode 100644
index 00000000000..94d16e921df
--- /dev/null
+++ b/db/migrate/20191003015155_add_self_managed_prometheus_alerts.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddSelfManagedPrometheusAlerts < ActiveRecord::Migration[5.2]
+ # Set this constant to true if this migration requires downtime.
+ DOWNTIME = false
+
+ def change
+ create_table :self_managed_prometheus_alert_events do |t|
+ t.references :project, index: false, foreign_key: { on_delete: :cascade }, null: false
+ t.references :environment, index: true, foreign_key: { on_delete: :cascade }
+ t.datetime_with_timezone :started_at, null: false
+ t.datetime_with_timezone :ended_at
+
+ t.integer :status, null: false, limit: 2
+ t.string :title, null: false, limit: 255
+ t.string :query_expression, limit: 255
+ t.string :payload_key, null: false, limit: 255
+ t.index [:project_id, :payload_key], unique: true, name: 'idx_project_id_payload_key_self_managed_prometheus_alert_events'
+ end
+ end
+end
diff --git a/db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb b/db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb
new file mode 100644
index 00000000000..f107181bbde
--- /dev/null
+++ b/db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddPushEventHooksLimitToApplicationSettings < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_column_with_default(:application_settings, :push_event_hooks_limit, :integer, default: 3)
+ end
+
+ def down
+ remove_column(:application_settings, :push_event_hooks_limit)
+ end
+end
diff --git a/db/migrate/20191003064615_create_aws_roles.rb b/db/migrate/20191003064615_create_aws_roles.rb
new file mode 100644
index 00000000000..ee35953f558
--- /dev/null
+++ b/db/migrate/20191003064615_create_aws_roles.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class CreateAwsRoles < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ create_table :aws_roles, id: false do |t|
+ t.references :user, primary_key: true, default: nil, type: :integer, index: { unique: true }, foreign_key: { on_delete: :cascade }
+
+ t.timestamps_with_timezone null: false
+
+ t.string :role_arn, null: false, limit: 2048
+ t.string :role_external_id, null: false, limit: 64
+
+ t.index :role_external_id, unique: true
+ end
+ end
+end
diff --git a/db/migrate/20191004133612_create_analytics_repository_file_commits.rb b/db/migrate/20191004133612_create_analytics_repository_file_commits.rb
new file mode 100644
index 00000000000..f2064b2b301
--- /dev/null
+++ b/db/migrate/20191004133612_create_analytics_repository_file_commits.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class CreateAnalyticsRepositoryFileCommits < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def change
+ create_table :analytics_repository_file_commits do |t|
+ t.references :analytics_repository_file, index: { name: 'index_analytics_repository_file_commits_file_id' }, foreign_key: { on_delete: :cascade }, null: false
+ t.references :project, index: false, foreign_key: { on_delete: :cascade }, null: false
+ t.date :committed_date, null: false
+ t.integer :commit_count, limit: 2, null: false
+ end
+
+ add_index :analytics_repository_file_commits,
+ [:project_id, :committed_date, :analytics_repository_file_id],
+ name: 'index_file_commits_on_committed_date_file_id_and_project_id',
+ unique: true
+ end
+end
diff --git a/db/migrate/20191008013056_add_push_event_activities_limit_to_application_settings.rb b/db/migrate/20191008013056_add_push_event_activities_limit_to_application_settings.rb
new file mode 100644
index 00000000000..84befc95d00
--- /dev/null
+++ b/db/migrate/20191008013056_add_push_event_activities_limit_to_application_settings.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddPushEventActivitiesLimitToApplicationSettings < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_column_with_default(:application_settings, :push_event_activities_limit, :integer, default: 3)
+ end
+
+ def down
+ remove_column(:application_settings, :push_event_activities_limit)
+ end
+end
diff --git a/db/migrate/20191008142331_add_ref_count_to_push_event_payloads.rb b/db/migrate/20191008142331_add_ref_count_to_push_event_payloads.rb
new file mode 100644
index 00000000000..72621971dbb
--- /dev/null
+++ b/db/migrate/20191008142331_add_ref_count_to_push_event_payloads.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class AddRefCountToPushEventPayloads < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ add_column :push_event_payloads, :ref_count, :integer
+ end
+end
diff --git a/db/migrate/20191008180203_add_issuable_state_id_indexes.rb b/db/migrate/20191008180203_add_issuable_state_id_indexes.rb
new file mode 100644
index 00000000000..a9a8b8b6359
--- /dev/null
+++ b/db/migrate/20191008180203_add_issuable_state_id_indexes.rb
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+class AddIssuableStateIdIndexes < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ # Creates the same indexes that are currently using state:string column
+ # for issues and merge_requests tables
+ create_indexes_for_issues
+ create_indexes_for_merge_requests
+ end
+
+ def down
+ # Removes indexes for issues
+ remove_concurrent_index_by_name :issues, 'idx_issues_on_state_id'
+ remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_created_at_and_id_and_state_id'
+ remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_due_date_and_id_and_state_id'
+ remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_rel_position_and_state_id_and_id'
+ remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_updated_at_and_id_and_state_id'
+
+ # Removes indexes from merge_requests
+ remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_id_and_merge_jid'
+ remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_source_project_and_branch_state_opened'
+ remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_state_id_and_merge_status'
+ remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_target_project_id_and_iid_opened'
+ end
+
+ def create_indexes_for_issues
+ add_concurrent_index :issues, :state_id, name: 'idx_issues_on_state_id'
+
+ add_concurrent_index :issues,
+ [:project_id, :created_at, :id, :state_id],
+ name: 'idx_issues_on_project_id_and_created_at_and_id_and_state_id'
+
+ add_concurrent_index :issues,
+ [:project_id, :due_date, :id, :state_id],
+ where: 'due_date IS NOT NULL',
+ name: 'idx_issues_on_project_id_and_due_date_and_id_and_state_id'
+
+ add_concurrent_index :issues,
+ [:project_id, :relative_position, :state_id, :id],
+ order: { id: :desc },
+ name: 'idx_issues_on_project_id_and_rel_position_and_state_id_and_id'
+
+ add_concurrent_index :issues,
+ [:project_id, :updated_at, :id, :state_id],
+ name: 'idx_issues_on_project_id_and_updated_at_and_id_and_state_id'
+ end
+
+ def create_indexes_for_merge_requests
+ add_concurrent_index :merge_requests,
+ [:id, :merge_jid],
+ where: 'merge_jid IS NOT NULL and state_id = 4',
+ name: 'idx_merge_requests_on_id_and_merge_jid'
+
+ add_concurrent_index :merge_requests,
+ [:source_project_id, :source_branch],
+ where: 'state_id = 1',
+ name: 'idx_merge_requests_on_source_project_and_branch_state_opened'
+
+ add_concurrent_index :merge_requests,
+ [:state_id, :merge_status],
+ where: "state_id = 1 AND merge_status = 'can_be_merged'",
+ name: 'idx_merge_requests_on_state_id_and_merge_status'
+
+ add_concurrent_index :merge_requests,
+ [:target_project_id, :iid],
+ where: 'state_id = 1',
+ name: 'idx_merge_requests_on_target_project_id_and_iid_opened'
+ end
+end
diff --git a/db/migrate/20191008200204_add_state_id_default_value.rb b/db/migrate/20191008200204_add_state_id_default_value.rb
new file mode 100644
index 00000000000..15a80163ca8
--- /dev/null
+++ b/db/migrate/20191008200204_add_state_id_default_value.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddStateIdDefaultValue < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ change_column_default :issues, :state_id, 1
+ change_column_null :issues, :state_id, false
+ change_column_default :merge_requests, :state_id, 1
+ change_column_null :merge_requests, :state_id, false
+ end
+
+ def down
+ change_column_default :issues, :state_id, nil
+ change_column_null :issues, :state_id, true
+ change_column_default :merge_requests, :state_id, nil
+ change_column_null :merge_requests, :state_id, true
+ end
+end
diff --git a/db/migrate/20191009222222_add_custom_http_clone_url_root_to_application_settings.rb b/db/migrate/20191009222222_add_custom_http_clone_url_root_to_application_settings.rb
new file mode 100644
index 00000000000..0fa8ff449f7
--- /dev/null
+++ b/db/migrate/20191009222222_add_custom_http_clone_url_root_to_application_settings.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddCustomHttpCloneUrlRootToApplicationSettings < ActiveRecord::Migration[5.2]
+ # Set this constant to true if this migration requires downtime.
+ DOWNTIME = false
+
+ def change
+ add_column :application_settings, :custom_http_clone_url_root, :string, limit: 511
+ end
+end
diff --git a/db/migrate/20191014084150_add_index_on_snippets_project_id_and_visibility_level.rb b/db/migrate/20191014084150_add_index_on_snippets_project_id_and_visibility_level.rb
new file mode 100644
index 00000000000..a8f40953e5d
--- /dev/null
+++ b/db/migrate/20191014084150_add_index_on_snippets_project_id_and_visibility_level.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class AddIndexOnSnippetsProjectIdAndVisibilityLevel < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :snippets, [:project_id, :visibility_level]
+ end
+
+ def down
+ remove_concurrent_index :snippets, [:project_id, :visibility_level]
+ end
+end
diff --git a/db/migrate/20191014132931_remove_index_on_snippets_project_id.rb b/db/migrate/20191014132931_remove_index_on_snippets_project_id.rb
new file mode 100644
index 00000000000..a1d3ffdb8c8
--- /dev/null
+++ b/db/migrate/20191014132931_remove_index_on_snippets_project_id.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class RemoveIndexOnSnippetsProjectId < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ remove_concurrent_index :snippets, [:project_id]
+ end
+
+ def down
+ add_concurrent_index :snippets, [:project_id]
+ end
+end
diff --git a/db/migrate/20191016072826_replace_ci_trigger_requests_index.rb b/db/migrate/20191016072826_replace_ci_trigger_requests_index.rb
new file mode 100644
index 00000000000..d7c9524806e
--- /dev/null
+++ b/db/migrate/20191016072826_replace_ci_trigger_requests_index.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class ReplaceCiTriggerRequestsIndex < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :ci_trigger_requests, [:trigger_id, :id], order: { id: :desc }
+
+ remove_concurrent_index :ci_trigger_requests, [:trigger_id]
+ end
+
+ def down
+ add_concurrent_index :ci_trigger_requests, [:trigger_id]
+
+ remove_concurrent_index :ci_trigger_requests, [:trigger_id, :id], order: { id: :desc }
+ end
+end
diff --git a/db/migrate/20191016220135_add_join_table_for_self_managed_prometheus_alert_issues.rb b/db/migrate/20191016220135_add_join_table_for_self_managed_prometheus_alert_issues.rb
new file mode 100644
index 00000000000..68b448f8836
--- /dev/null
+++ b/db/migrate/20191016220135_add_join_table_for_self_managed_prometheus_alert_issues.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class AddJoinTableForSelfManagedPrometheusAlertIssues < ActiveRecord::Migration[5.2]
+ # Set this constant to true if this migration requires downtime.
+ DOWNTIME = false
+
+ def change
+ # Join table to Issues
+ create_table :issues_self_managed_prometheus_alert_events, id: false do |t|
+ t.references :issue, null: false,
+ index: false, # Uses the index below
+ foreign_key: { on_delete: :cascade }
+ t.references :self_managed_prometheus_alert_event, null: false,
+ index: { name: 'issue_id_issues_self_managed_rometheus_alert_events_index' },
+ foreign_key: { on_delete: :cascade }
+
+ t.timestamps_with_timezone
+ t.index [:issue_id, :self_managed_prometheus_alert_event_id],
+ unique: true, name: 'issue_id_self_managed_prometheus_alert_event_id_index'
+ end
+ end
+end
diff --git a/db/post_migrate/20180306164012_add_path_index_to_redirect_routes.rb b/db/post_migrate/20180306164012_add_path_index_to_redirect_routes.rb
index 53918250b4c..d44ec1036c4 100644
--- a/db/post_migrate/20180306164012_add_path_index_to_redirect_routes.rb
+++ b/db/post_migrate/20180306164012_add_path_index_to_redirect_routes.rb
@@ -14,9 +14,7 @@ class AddPathIndexToRedirectRoutes < ActiveRecord::Migration[4.2]
# RedirectRoute.matching_path_and_descendants
#
# This same index is also added in the `ReworkRedirectRoutesIndexes` so this
- # is a no-op in most cases. But this migration is also called from the
- # `setup_postgresql.rake` task when setting up a new database, in which case
- # we want to create the index.
+ # is a no-op in most cases.
def up
return unless Gitlab::Database.postgresql?
@@ -31,8 +29,5 @@ class AddPathIndexToRedirectRoutes < ActiveRecord::Migration[4.2]
# Do nothing in the DOWN. Since the index above is originally created in the
# `ReworkRedirectRoutesIndexes`. This migration wouldn't have actually
# created any new index.
- #
- # This migration is only here to be called form `setup_postgresql.rake` so
- # any newly created database would have this index.
end
end
diff --git a/db/post_migrate/20190819231552_update_knative_prometheus_query_for_invocation_count.rb b/db/post_migrate/20190819231552_update_knative_prometheus_query_for_invocation_count.rb
new file mode 100644
index 00000000000..828f551baf6
--- /dev/null
+++ b/db/post_migrate/20190819231552_update_knative_prometheus_query_for_invocation_count.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class UpdateKnativePrometheusQueryForInvocationCount < ActiveRecord::Migration[5.2]
+ DOWNTIME = false
+
+ def up
+ ::Gitlab::DatabaseImporters::CommonMetrics::Importer.new.execute
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20190827102026_migrate_code_owner_approval_status_to_protected_branches_in_batches.rb b/db/post_migrate/20190827102026_migrate_code_owner_approval_status_to_protected_branches_in_batches.rb
new file mode 100644
index 00000000000..b109f582909
--- /dev/null
+++ b/db/post_migrate/20190827102026_migrate_code_owner_approval_status_to_protected_branches_in_batches.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+class MigrateCodeOwnerApprovalStatusToProtectedBranchesInBatches < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ DOWNTIME = false
+ BATCH_SIZE = 200
+
+ class Project < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'projects'
+ self.inheritance_column = :_type_disabled
+
+ has_many :protected_branches
+ end
+
+ class ProtectedBranch < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'protected_branches'
+ self.inheritance_column = :_type_disabled
+
+ belongs_to :project
+ end
+
+ def up
+ add_concurrent_index :projects, :id, name: "temp_active_projects_with_prot_branches", where: 'archived = false and pending_delete = false and merge_requests_require_code_owner_approval = true'
+
+ ProtectedBranch
+ .joins(:project)
+ .where(projects: { archived: false, pending_delete: false, merge_requests_require_code_owner_approval: true })
+ .each_batch(of: BATCH_SIZE) do |batch|
+ batch.update_all(code_owner_approval_required: true)
+ end
+
+ remove_concurrent_index_by_name(:projects, "temp_active_projects_with_prot_branches")
+ end
+
+ def down
+ # noop
+ #
+ end
+end
diff --git a/db/post_migrate/20190905091812_schedule_project_any_approval_rule_migration.rb b/db/post_migrate/20190905091812_schedule_project_any_approval_rule_migration.rb
index ef1cb452c26..be47e4dfdf5 100644
--- a/db/post_migrate/20190905091812_schedule_project_any_approval_rule_migration.rb
+++ b/db/post_migrate/20190905091812_schedule_project_any_approval_rule_migration.rb
@@ -22,6 +22,8 @@ class ScheduleProjectAnyApprovalRuleMigration < ActiveRecord::Migration[5.2]
end
def up
+ return unless Gitlab.ee?
+
add_concurrent_index :projects, :id,
name: 'tmp_projects_with_approvals_before_merge',
where: 'approvals_before_merge <> 0'
diff --git a/db/post_migrate/20190905091831_schedule_merge_request_any_approval_rule_migration.rb b/db/post_migrate/20190905091831_schedule_merge_request_any_approval_rule_migration.rb
index 4a8398a9eea..cdec87270f0 100644
--- a/db/post_migrate/20190905091831_schedule_merge_request_any_approval_rule_migration.rb
+++ b/db/post_migrate/20190905091831_schedule_merge_request_any_approval_rule_migration.rb
@@ -22,6 +22,8 @@ class ScheduleMergeRequestAnyApprovalRuleMigration < ActiveRecord::Migration[5.2
end
def up
+ return unless Gitlab.ee?
+
add_concurrent_index :merge_requests, :id,
name: 'tmp_merge_requests_with_approvals_before_merge',
where: 'approvals_before_merge <> 0'
diff --git a/db/post_migrate/20190909141517_update_cs_vulnerability_confidence_column.rb b/db/post_migrate/20190909141517_update_cs_vulnerability_confidence_column.rb
new file mode 100644
index 00000000000..befa08e0cb6
--- /dev/null
+++ b/db/post_migrate/20190909141517_update_cs_vulnerability_confidence_column.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+class UpdateCsVulnerabilityConfidenceColumn < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ DOWNTIME = false
+ BATCH_SIZE = 1_000
+ INTERVAL = 5.minutes
+
+ # 137_424 records to be updated on GitLab.com,
+ # giving us an estimated runtime of 12 hours.
+ def up
+ # no-op in CE
+ return unless Gitlab.ee?
+
+ migration = Gitlab::BackgroundMigration::UpdateVulnerabilityConfidence
+ migration_name = migration.to_s.demodulize
+ relation = migration::Occurrence.container_scanning_reports_with_medium_confidence
+ queue_background_migration_jobs_by_range_at_intervals(relation,
+ migration_name,
+ INTERVAL,
+ batch_size: BATCH_SIZE)
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20190911251732_sync_issuables_state_id.rb b/db/post_migrate/20190911251732_sync_issuables_state_id.rb
new file mode 100644
index 00000000000..4865e98a75e
--- /dev/null
+++ b/db/post_migrate/20190911251732_sync_issuables_state_id.rb
@@ -0,0 +1,79 @@
+# frozen_string_literal: true
+
+# Sync remaining records for issues/merge_requests tables where state_id
+# is still null.
+# For more information check: https://gitlab.com/gitlab-org/gitlab/issues/26823
+# It creates a temporary index before performing the UPDATES to sync values.
+#
+# In 09-11-2019 we have the following numbers for records with state_id == nil:
+#
+# 1348 issues - default batch size for each update 67
+# 10247 merge requests - default batch size for each update 511
+
+class SyncIssuablesStateId < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ %i(issues merge_requests).each do |table|
+ temp_index_name = index_name_for(table)
+
+ add_concurrent_index(
+ table,
+ 'id',
+ name: temp_index_name,
+ where: 'state_id IS NULL'
+ )
+
+ update_value = update_condition_for(table)
+
+ update_column_in_batches(table, :state_id, update_value) do |table, query|
+ query.where(table[:state_id].eq(nil))
+ end
+ ensure
+ remove_concurrent_index_by_name(table, temp_index_name)
+ end
+ end
+
+ def down
+ # NO OP
+ end
+
+ def update_condition_for(table)
+ value_expresson =
+ if table == :issues
+ issues_state_id_condition
+ else
+ merge_requests_state_id_condition
+ end
+
+ Arel.sql(value_expresson)
+ end
+
+ def index_name_for(table)
+ "idx_tmp_on_#{table}_where_state_id_is_null"
+ end
+
+ def issues_state_id_condition
+ <<~SQL
+ CASE state
+ WHEN 'opened' THEN 1
+ WHEN 'closed' THEN 2
+ END
+ SQL
+ end
+
+ def merge_requests_state_id_condition
+ <<~SQL
+ CASE state
+ WHEN 'opened' THEN 1
+ WHEN 'closed' THEN 2
+ WHEN 'merged' THEN 3
+ WHEN 'locked' THEN 4
+ END
+ SQL
+ end
+end
diff --git a/db/post_migrate/20190917173107_backfill_software_licenses_spdx_identifiers.rb b/db/post_migrate/20190917173107_backfill_software_licenses_spdx_identifiers.rb
new file mode 100644
index 00000000000..09492f5f99e
--- /dev/null
+++ b/db/post_migrate/20190917173107_backfill_software_licenses_spdx_identifiers.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+class BackfillSoftwareLicensesSpdxIdentifiers < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ CURRENT_LICENSES = {
+ 'AGPL-1.0' => 'AGPL-1.0',
+ 'AGPL-3.0' => 'AGPL-3.0',
+ 'Apache 2.0' => 'Apache-2.0',
+ 'Artistic-2.0' => 'Artistic-2.0',
+ 'BSD' => 'BSD-4-Clause',
+ 'CC0 1.0 Universal' => 'CC0-1.0',
+ 'CDDL-1.0' => 'CDDL-1.0',
+ 'CDDL-1.1' => 'CDDL-1.1',
+ 'EPL-1.0' => 'EPL-1.0',
+ 'EPL-2.0' => 'EPL-2.0',
+ 'GPLv2' => 'GPL-2.0',
+ 'GPLv3' => 'GPL-3.0',
+ 'ISC' => 'ISC',
+ 'LGPL' => 'LGPL-3.0-only',
+ 'LGPL-2.1' => 'LGPL-2.1',
+ 'MIT' => 'MIT',
+ 'Mozilla Public License 2.0' => 'MPL-2.0',
+ 'MS-PL' => 'MS-PL',
+ 'MS-RL' => 'MS-RL',
+ 'New BSD' => 'BSD-3-Clause',
+ 'Python Software Foundation License' => 'Python-2.0',
+ 'ruby' => 'Ruby',
+ 'Simplified BSD' => 'BSD-2-Clause',
+ 'WTFPL' => 'WTFPL',
+ 'Zlib' => 'Zlib'
+ }.freeze
+
+ disable_ddl_transaction!
+
+ # 25 records to be updated on GitLab.com
+ def up
+ return unless Gitlab.ee?
+
+ say "Expect #{CURRENT_LICENSES.count} updates to the software_licenses table to occur"
+ CURRENT_LICENSES.each do |name, spdx_identifier|
+ # The following cop is disabled because of https://gitlab.com/gitlab-org/gitlab/issues/33470
+ # For more context see https://gitlab.com/gitlab-org/gitlab/merge_requests/17004#note_226264823
+ # rubocop:disable Migration/UpdateColumnInBatches
+ update_column_in_batches(:software_licenses, :spdx_identifier, spdx_identifier) do |table, query|
+ query.where(table[:name].eq(name))
+ end
+ end
+ end
+
+ def down
+ return unless Gitlab.ee?
+
+ update_column_in_batches(:software_licenses, :spdx_identifier, nil)
+ end
+end
diff --git a/db/post_migrate/20191002031332_schedule_pages_metadata_migration.rb b/db/post_migrate/20191002031332_schedule_pages_metadata_migration.rb
new file mode 100644
index 00000000000..0cd24da50d0
--- /dev/null
+++ b/db/post_migrate/20191002031332_schedule_pages_metadata_migration.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class SchedulePagesMetadataMigration < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ BATCH_SIZE = 10_000
+ MIGRATION = 'MigratePagesMetadata'
+
+ disable_ddl_transaction!
+
+ class Project < ActiveRecord::Base
+ include ::EachBatch
+
+ self.table_name = 'projects'
+ end
+
+ def up
+ say "Scheduling `#{MIGRATION}` jobs"
+
+ # At the time of writing there are ~10_669_292 records to be inserted for GitLab.com,
+ # batches of 10_000 with delay interval of 2 minutes gives us an estimate of close to 36 hours.
+ queue_background_migration_jobs_by_range_at_intervals(Project, MIGRATION, 2.minutes, batch_size: BATCH_SIZE)
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20191007163701_populate_remaining_any_approver_rules_for_merge_requests.rb b/db/post_migrate/20191007163701_populate_remaining_any_approver_rules_for_merge_requests.rb
new file mode 100644
index 00000000000..e1c0f1d6c0c
--- /dev/null
+++ b/db/post_migrate/20191007163701_populate_remaining_any_approver_rules_for_merge_requests.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class PopulateRemainingAnyApproverRulesForMergeRequests < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ BATCH_SIZE = 10_000
+ MIGRATION = 'PopulateAnyApprovalRuleForMergeRequests'
+
+ disable_ddl_transaction!
+
+ class MergeRequest < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'merge_requests'
+
+ scope :with_approvals_before_merge, -> { where.not(approvals_before_merge: 0) }
+ end
+
+ def up
+ return unless Gitlab.ee?
+
+ add_concurrent_index :merge_requests, :id,
+ name: 'tmp_merge_requests_with_approvals_before_merge',
+ where: 'approvals_before_merge != 0'
+
+ Gitlab::BackgroundMigration.steal(MIGRATION)
+
+ PopulateRemainingAnyApproverRulesForMergeRequests::MergeRequest.with_approvals_before_merge.each_batch(of: BATCH_SIZE) do |batch|
+ range = batch.pluck('MIN(id)', 'MAX(id)').first
+
+ Gitlab::BackgroundMigration::PopulateAnyApprovalRuleForMergeRequests.new.perform(*range)
+ end
+
+ remove_concurrent_index_by_name(:merge_requests, 'tmp_merge_requests_with_approvals_before_merge')
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/post_migrate/20191007163736_populate_remaining_any_approver_rules_for_projects.rb b/db/post_migrate/20191007163736_populate_remaining_any_approver_rules_for_projects.rb
new file mode 100644
index 00000000000..fce17ffcf16
--- /dev/null
+++ b/db/post_migrate/20191007163736_populate_remaining_any_approver_rules_for_projects.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class PopulateRemainingAnyApproverRulesForProjects < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ BATCH_SIZE = 5_000
+ MIGRATION = 'PopulateAnyApprovalRuleForProjects'
+
+ disable_ddl_transaction!
+
+ class Project < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'projects'
+
+ scope :with_approvals_before_merge, -> { where.not(approvals_before_merge: 0) }
+ end
+
+ def up
+ return unless Gitlab.ee?
+
+ add_concurrent_index :projects, :id,
+ name: 'tmp_projects_with_approvals_before_merge',
+ where: 'approvals_before_merge != 0'
+
+ Gitlab::BackgroundMigration.steal(MIGRATION)
+
+ PopulateRemainingAnyApproverRulesForProjects::Project.with_approvals_before_merge.each_batch(of: BATCH_SIZE) do |batch|
+ range = batch.pluck('MIN(id)', 'MAX(id)').first
+
+ Gitlab::BackgroundMigration::PopulateAnyApprovalRuleForProjects.new.perform(*range)
+ end
+
+ remove_concurrent_index_by_name(:projects, 'tmp_projects_with_approvals_before_merge')
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 09f27d2f9cb..f3a2b4608f5 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2019_09_18_104222) do
+ActiveRecord::Schema.define(version: 2019_10_16_220135) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_trgm"
@@ -93,6 +93,30 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["project_id"], name: "analytics_repository_languages_on_project_id"
end
+ create_table "analytics_repository_file_commits", force: :cascade do |t|
+ t.bigint "analytics_repository_file_id", null: false
+ t.bigint "project_id", null: false
+ t.date "committed_date", null: false
+ t.integer "commit_count", limit: 2, null: false
+ t.index ["analytics_repository_file_id"], name: "index_analytics_repository_file_commits_file_id"
+ t.index ["project_id", "committed_date", "analytics_repository_file_id"], name: "index_file_commits_on_committed_date_file_id_and_project_id", unique: true
+ end
+
+ create_table "analytics_repository_file_edits", force: :cascade do |t|
+ t.bigint "project_id", null: false
+ t.bigint "analytics_repository_file_id", null: false
+ t.date "committed_date", null: false
+ t.integer "num_edits", default: 0, null: false
+ t.index ["analytics_repository_file_id", "committed_date", "project_id"], name: "index_file_edits_on_committed_date_file_id_and_project_id", unique: true
+ t.index ["project_id"], name: "index_analytics_repository_file_edits_on_project_id"
+ end
+
+ create_table "analytics_repository_files", force: :cascade do |t|
+ t.bigint "project_id", null: false
+ t.string "file_path", limit: 4096, null: false
+ t.index ["project_id", "file_path"], name: "index_analytics_repository_files_on_project_id_and_file_path", unique: true
+ end
+
create_table "appearances", id: :serial, force: :cascade do |t|
t.string "title", null: false
t.text "description", null: false
@@ -307,6 +331,16 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "encrypted_asset_proxy_secret_key_iv"
t.string "static_objects_external_storage_url", limit: 255
t.string "static_objects_external_storage_auth_token", limit: 255
+ t.boolean "throttle_protected_paths_enabled", default: true, null: false
+ t.integer "throttle_protected_paths_requests_per_period", default: 10, null: false
+ t.integer "throttle_protected_paths_period_in_seconds", default: 60, null: false
+ t.string "protected_paths", limit: 255, default: ["/users/password", "/users/sign_in", "/api/v3/session.json", "/api/v3/session", "/api/v4/session.json", "/api/v4/session", "/users", "/users/confirmation", "/unsubscribes/", "/import/github/personal_access_token"], array: true
+ t.boolean "throttle_incident_management_notification_enabled", default: false, null: false
+ t.integer "throttle_incident_management_notification_period_in_seconds", default: 3600
+ t.integer "throttle_incident_management_notification_per_period", default: 3600
+ t.integer "push_event_hooks_limit", default: 3, null: false
+ t.integer "push_event_activities_limit", default: 3, null: false
+ t.string "custom_http_clone_url_root", limit: 511
t.index ["custom_project_templates_group_id"], name: "index_application_settings_on_custom_project_templates_group_id"
t.index ["file_template_project_id"], name: "index_application_settings_on_file_template_project_id"
t.index ["instance_administration_project_id"], name: "index_applicationsettings_on_instance_administration_project_id"
@@ -435,6 +469,15 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["user_id", "name"], name: "index_award_emoji_on_user_id_and_name"
end
+ create_table "aws_roles", primary_key: "user_id", id: :integer, default: nil, force: :cascade do |t|
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.string "role_arn", limit: 2048, null: false
+ t.string "role_external_id", limit: 64, null: false
+ t.index ["role_external_id"], name: "index_aws_roles_on_role_external_id", unique: true
+ t.index ["user_id"], name: "index_aws_roles_on_user_id", unique: true
+ end
+
create_table "badges", id: :serial, force: :cascade do |t|
t.string "link_url", null: false
t.string "image_url", null: false
@@ -624,6 +667,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["name"], name: "index_ci_builds_on_name_for_security_products_values", where: "((name)::text = ANY (ARRAY[('container_scanning'::character varying)::text, ('dast'::character varying)::text, ('dependency_scanning'::character varying)::text, ('license_management'::character varying)::text, ('sast'::character varying)::text]))"
t.index ["project_id", "id"], name: "index_ci_builds_on_project_id_and_id"
t.index ["project_id", "status"], name: "index_ci_builds_project_id_and_status_for_live_jobs_partial2", where: "(((type)::text = 'Ci::Build'::text) AND ((status)::text = ANY (ARRAY[('running'::character varying)::text, ('pending'::character varying)::text, ('created'::character varying)::text])))"
+ t.index ["project_id"], name: "index_ci_builds_on_project_id_for_successfull_pages_deploy", where: "(((type)::text = 'GenericCommitStatus'::text) AND ((stage)::text = 'deploy'::text) AND ((name)::text = 'pages:deploy'::text) AND ((status)::text = 'success'::text))"
t.index ["protected"], name: "index_ci_builds_on_protected"
t.index ["queued_at"], name: "index_ci_builds_on_queued_at"
t.index ["runner_id"], name: "index_ci_builds_on_runner_id"
@@ -874,7 +918,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.datetime "updated_at"
t.integer "commit_id"
t.index ["commit_id"], name: "index_ci_trigger_requests_on_commit_id"
- t.index ["trigger_id"], name: "index_ci_trigger_requests_on_trigger_id"
+ t.index ["trigger_id", "id"], name: "index_ci_trigger_requests_on_trigger_id_and_id", order: { id: :desc }
end
create_table "ci_triggers", id: :serial, force: :cascade do |t|
@@ -935,6 +979,30 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["project_id"], name: "index_cluster_projects_on_project_id"
end
+ create_table "cluster_providers_aws", force: :cascade do |t|
+ t.bigint "cluster_id", null: false
+ t.integer "created_by_user_id"
+ t.integer "num_nodes", null: false
+ t.integer "status", null: false
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.string "key_name", limit: 255, null: false
+ t.string "role_arn", limit: 2048, null: false
+ t.string "region", limit: 255, null: false
+ t.string "vpc_id", limit: 255, null: false
+ t.string "subnet_ids", limit: 255, default: [], null: false, array: true
+ t.string "security_group_id", limit: 255, null: false
+ t.string "instance_type", limit: 255, null: false
+ t.string "access_key_id", limit: 255
+ t.string "encrypted_secret_access_key_iv", limit: 255
+ t.text "encrypted_secret_access_key"
+ t.text "session_token"
+ t.text "status_reason"
+ t.index ["cluster_id", "status"], name: "index_cluster_providers_aws_on_cluster_id_and_status"
+ t.index ["cluster_id"], name: "index_cluster_providers_aws_on_cluster_id", unique: true
+ t.index ["created_by_user_id"], name: "index_cluster_providers_aws_on_created_by_user_id"
+ end
+
create_table "cluster_providers_gcp", id: :serial, force: :cascade do |t|
t.integer "cluster_id", null: false
t.integer "status"
@@ -950,6 +1018,8 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.text "encrypted_access_token"
t.string "encrypted_access_token_iv"
t.boolean "legacy_abac", default: false, null: false
+ t.boolean "cloud_run", default: false, null: false
+ t.index ["cloud_run"], name: "index_cluster_providers_gcp_on_cloud_run"
t.index ["cluster_id"], name: "index_cluster_providers_gcp_on_cluster_id", unique: true
end
@@ -966,7 +1036,9 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "domain"
t.boolean "managed", default: true, null: false
t.boolean "namespace_per_environment", default: true, null: false
+ t.integer "management_project_id"
t.index ["enabled"], name: "index_clusters_on_enabled"
+ t.index ["management_project_id"], name: "index_clusters_on_management_project_id", where: "(management_project_id IS NOT NULL)"
t.index ["user_id"], name: "index_clusters_on_user_id"
end
@@ -1194,9 +1266,21 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["project_id", "status"], name: "index_deployments_on_project_id_and_status"
end
+ create_table "description_versions", force: :cascade do |t|
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.integer "issue_id"
+ t.integer "merge_request_id"
+ t.integer "epic_id"
+ t.text "description"
+ t.index ["epic_id"], name: "index_description_versions_on_epic_id", where: "(epic_id IS NOT NULL)"
+ t.index ["issue_id"], name: "index_description_versions_on_issue_id", where: "(issue_id IS NOT NULL)"
+ t.index ["merge_request_id"], name: "index_description_versions_on_merge_request_id", where: "(merge_request_id IS NOT NULL)"
+ end
+
create_table "design_management_designs", force: :cascade do |t|
t.integer "project_id", null: false
- t.integer "issue_id", null: false
+ t.integer "issue_id"
t.string "filename", null: false
t.index ["issue_id", "filename"], name: "index_design_management_designs_on_issue_id_and_filename", unique: true
t.index ["project_id"], name: "index_design_management_designs_on_project_id"
@@ -1215,8 +1299,11 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
create_table "design_management_versions", force: :cascade do |t|
t.binary "sha", null: false
t.bigint "issue_id"
+ t.integer "user_id"
+ t.datetime_with_timezone "created_at"
t.index ["issue_id"], name: "index_design_management_versions_on_issue_id"
t.index ["sha", "issue_id"], name: "index_design_management_versions_on_sha_and_issue_id", unique: true
+ t.index ["user_id"], name: "index_design_management_versions_on_user_id", where: "(user_id IS NOT NULL)"
end
create_table "draft_notes", force: :cascade do |t|
@@ -1350,6 +1437,15 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id"
end
+ create_table "evidences", force: :cascade do |t|
+ t.bigint "release_id", null: false
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.binary "summary_sha"
+ t.jsonb "summary", default: {}, null: false
+ t.index ["release_id"], name: "index_evidences_on_release_id"
+ end
+
create_table "external_pull_requests", force: :cascade do |t|
t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false
@@ -1679,6 +1775,16 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["project_id"], name: "index_gpg_signatures_on_project_id"
end
+ create_table "grafana_integrations", force: :cascade do |t|
+ t.bigint "project_id", null: false
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.string "encrypted_token", limit: 255, null: false
+ t.string "encrypted_token_iv", limit: 255, null: false
+ t.string "grafana_url", limit: 1024, null: false
+ t.index ["project_id"], name: "index_grafana_integrations_on_project_id"
+ end
+
create_table "group_custom_attributes", id: :serial, force: :cascade do |t|
t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false
@@ -1778,6 +1884,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.datetime "first_added_to_board_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.index ["issue_id", "first_mentioned_in_commit_at", "first_associated_with_milestone_at", "first_added_to_board_at"], name: "index_issue_metrics_on_issue_id_and_timestamps"
t.index ["issue_id"], name: "index_issue_metrics"
end
@@ -1821,7 +1928,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.boolean "discussion_locked"
t.datetime_with_timezone "closed_at"
t.integer "closed_by_id"
- t.integer "state_id", limit: 2
+ t.integer "state_id", limit: 2, default: 1, null: false
t.integer "duplicated_to_id"
t.index ["author_id"], name: "index_issues_on_author_id"
t.index ["closed_by_id"], name: "index_issues_on_closed_by_id"
@@ -1831,17 +1938,40 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["milestone_id"], name: "index_issues_on_milestone_id"
t.index ["moved_to_id"], name: "index_issues_on_moved_to_id", where: "(moved_to_id IS NOT NULL)"
t.index ["project_id", "created_at", "id", "state"], name: "index_issues_on_project_id_and_created_at_and_id_and_state"
+ t.index ["project_id", "created_at", "id", "state_id"], name: "idx_issues_on_project_id_and_created_at_and_id_and_state_id"
t.index ["project_id", "due_date", "id", "state"], name: "idx_issues_on_project_id_and_due_date_and_id_and_state_partial", where: "(due_date IS NOT NULL)"
+ t.index ["project_id", "due_date", "id", "state_id"], name: "idx_issues_on_project_id_and_due_date_and_id_and_state_id", where: "(due_date IS NOT NULL)"
t.index ["project_id", "iid"], name: "index_issues_on_project_id_and_iid", unique: true
t.index ["project_id", "relative_position", "state", "id"], name: "index_issues_on_project_id_and_rel_position_and_state_and_id", order: { id: :desc }
+ t.index ["project_id", "relative_position", "state_id", "id"], name: "idx_issues_on_project_id_and_rel_position_and_state_id_and_id", order: { id: :desc }
t.index ["project_id", "updated_at", "id", "state"], name: "index_issues_on_project_id_and_updated_at_and_id_and_state"
+ t.index ["project_id", "updated_at", "id", "state_id"], name: "idx_issues_on_project_id_and_updated_at_and_id_and_state_id"
t.index ["relative_position"], name: "index_issues_on_relative_position"
t.index ["state"], name: "index_issues_on_state"
+ t.index ["state_id"], name: "idx_issues_on_state_id"
t.index ["title"], name: "index_issues_on_title_trigram", opclass: :gin_trgm_ops, using: :gin
t.index ["updated_at"], name: "index_issues_on_updated_at"
t.index ["updated_by_id"], name: "index_issues_on_updated_by_id", where: "(updated_by_id IS NOT NULL)"
end
+ create_table "issues_prometheus_alert_events", id: false, force: :cascade do |t|
+ t.bigint "issue_id", null: false
+ t.bigint "prometheus_alert_event_id", null: false
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.index ["issue_id", "prometheus_alert_event_id"], name: "issue_id_prometheus_alert_event_id_index", unique: true
+ t.index ["prometheus_alert_event_id"], name: "issue_id_issues_prometheus_alert_events_index"
+ end
+
+ create_table "issues_self_managed_prometheus_alert_events", id: false, force: :cascade do |t|
+ t.bigint "issue_id", null: false
+ t.bigint "self_managed_prometheus_alert_event_id", null: false
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.index ["issue_id", "self_managed_prometheus_alert_event_id"], name: "issue_id_self_managed_prometheus_alert_event_id_index", unique: true
+ t.index ["self_managed_prometheus_alert_event_id"], name: "issue_id_issues_self_managed_rometheus_alert_events_index"
+ end
+
create_table "jira_connect_installations", force: :cascade do |t|
t.string "client_key"
t.string "encrypted_shared_secret"
@@ -1997,6 +2127,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.datetime "updated_at", null: false
t.integer "user_id"
t.integer "milestone_id"
+ t.integer "max_issue_count", default: 0, null: false
t.index ["board_id", "label_id"], name: "index_lists_on_board_id_and_label_id", unique: true
t.index ["label_id"], name: "index_lists_on_label_id"
t.index ["list_type"], name: "index_lists_on_list_type"
@@ -2162,22 +2293,27 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.boolean "discussion_locked"
t.integer "latest_merge_request_diff_id"
t.boolean "allow_maintainer_to_push"
- t.integer "state_id", limit: 2
+ t.integer "state_id", limit: 2, default: 1, null: false
t.string "rebase_jid"
t.index ["assignee_id"], name: "index_merge_requests_on_assignee_id"
t.index ["author_id"], name: "index_merge_requests_on_author_id"
t.index ["created_at"], name: "index_merge_requests_on_created_at"
t.index ["description"], name: "index_merge_requests_on_description_trigram", opclass: :gin_trgm_ops, using: :gin
t.index ["head_pipeline_id"], name: "index_merge_requests_on_head_pipeline_id"
+ t.index ["id", "merge_jid"], name: "idx_merge_requests_on_id_and_merge_jid", where: "((merge_jid IS NOT NULL) AND (state_id = 4))"
t.index ["id", "merge_jid"], name: "index_merge_requests_on_id_and_merge_jid", where: "((merge_jid IS NOT NULL) AND ((state)::text = 'locked'::text))"
t.index ["latest_merge_request_diff_id"], name: "index_merge_requests_on_latest_merge_request_diff_id"
t.index ["merge_user_id"], name: "index_merge_requests_on_merge_user_id", where: "(merge_user_id IS NOT NULL)"
t.index ["milestone_id"], name: "index_merge_requests_on_milestone_id"
t.index ["source_branch"], name: "index_merge_requests_on_source_branch"
+ t.index ["source_project_id", "source_branch"], name: "idx_merge_requests_on_source_project_and_branch_state_opened", where: "(state_id = 1)"
t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_and_branch_state_opened", where: "((state)::text = 'opened'::text)"
t.index ["source_project_id", "source_branch"], name: "index_merge_requests_on_source_project_id_and_source_branch"
t.index ["state", "merge_status"], name: "index_merge_requests_on_state_and_merge_status", where: "(((state)::text = 'opened'::text) AND ((merge_status)::text = 'can_be_merged'::text))"
+ t.index ["state_id", "merge_status"], name: "idx_merge_requests_on_state_id_and_merge_status", where: "((state_id = 1) AND ((merge_status)::text = 'can_be_merged'::text))"
t.index ["target_branch"], name: "index_merge_requests_on_target_branch"
+ t.index ["target_project_id", "created_at"], name: "index_merge_requests_target_project_id_created_at"
+ t.index ["target_project_id", "iid"], name: "idx_merge_requests_on_target_project_id_and_iid_opened", where: "(state_id = 1)"
t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid", unique: true
t.index ["target_project_id", "iid"], name: "index_merge_requests_on_target_project_id_and_iid_opened", where: "((state)::text = 'opened'::text)"
t.index ["target_project_id", "merge_commit_sha", "id"], name: "index_merge_requests_on_tp_id_and_merge_commit_sha_and_id"
@@ -2272,7 +2408,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.boolean "membership_lock", default: false
t.boolean "share_with_group_lock", default: false
t.integer "visibility_level", default: 20, null: false
- t.boolean "request_access_enabled", default: false, null: false
+ t.boolean "request_access_enabled", default: true, null: false
t.string "ldap_sync_status", default: "ready", null: false
t.string "ldap_sync_error"
t.datetime "ldap_sync_last_update_at"
@@ -2300,6 +2436,8 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.integer "last_ci_minutes_usage_notification_level"
t.integer "subgroup_creation_level", default: 1
t.boolean "emails_disabled"
+ t.integer "max_pages_size"
+ t.integer "max_artifacts_size"
t.index ["created_at"], name: "index_namespaces_on_created_at"
t.index ["custom_project_templates_group_id", "type"], name: "index_namespaces_on_custom_project_templates_group_id_and_type", where: "(custom_project_templates_group_id IS NOT NULL)"
t.index ["file_template_project_id"], name: "index_namespaces_on_file_template_project_id"
@@ -2393,6 +2531,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.boolean "issue_due"
t.boolean "new_epic"
t.string "notification_email"
+ t.boolean "new_release"
t.index ["source_id", "source_type"], name: "index_notification_settings_on_source_id_and_source_type"
t.index ["user_id", "source_id", "source_type"], name: "index_notifications_on_user_id_and_source_id_and_source_type", unique: true
t.index ["user_id"], name: "index_notification_settings_on_user_id"
@@ -2518,6 +2657,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "name", null: false
t.string "version"
t.integer "package_type", limit: 2, null: false
+ t.index ["name"], name: "index_packages_packages_on_name_trigram", opclass: :gin_trgm_ops, using: :gin
t.index ["project_id"], name: "index_packages_packages_on_project_id"
end
@@ -2757,6 +2897,13 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["status"], name: "index_project_mirror_data_on_status"
end
+ create_table "project_pages_metadata", id: false, force: :cascade do |t|
+ t.bigint "project_id", null: false
+ t.boolean "deployed", default: false, null: false
+ t.index ["project_id"], name: "index_project_pages_metadata_on_project_id", unique: true
+ t.index ["project_id"], name: "index_project_pages_metadata_on_project_id_and_deployed_is_true", where: "(deployed = true)"
+ end
+
create_table "project_repositories", force: :cascade do |t|
t.integer "shard_id", null: false
t.string "disk_path", null: false
@@ -2851,7 +2998,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.boolean "has_external_issue_tracker"
t.string "repository_storage", default: "default", null: false
t.boolean "repository_read_only"
- t.boolean "request_access_enabled", default: false, null: false
+ t.boolean "request_access_enabled", default: true, null: false
t.boolean "has_external_wiki"
t.string "ci_config_path"
t.boolean "lfs_enabled"
@@ -2885,6 +3032,10 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.boolean "merge_requests_disable_committers_approval"
t.boolean "require_password_to_approve"
t.boolean "emails_disabled"
+ t.integer "max_pages_size"
+ t.integer "max_artifacts_size"
+ t.string "pull_mirror_branch_prefix", limit: 50
+ t.index "lower((name)::text)", name: "index_projects_on_lower_name"
t.index ["archived", "pending_delete", "merge_requests_require_code_owner_approval"], name: "projects_requiring_code_owner_approval", where: "((pending_delete = false) AND (archived = false) AND (merge_requests_require_code_owner_approval = true))"
t.index ["created_at"], name: "index_projects_on_created_at"
t.index ["creator_id"], name: "index_projects_on_creator_id"
@@ -3049,6 +3200,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.binary "commit_to"
t.text "ref"
t.string "commit_title", limit: 70
+ t.integer "ref_count"
t.index ["event_id"], name: "index_push_event_payloads_on_event_id", unique: true
end
@@ -3081,6 +3233,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "path", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.index "lower((path)::text) varchar_pattern_ops", name: "index_redirect_routes_on_path_unique_text_pattern_ops", unique: true
t.index ["path"], name: "index_redirect_routes_on_path", unique: true
t.index ["source_type", "source_id"], name: "index_redirect_routes_on_source_type_and_source_id"
end
@@ -3099,8 +3252,8 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "tag"
t.text "description"
t.integer "project_id"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
t.text "description_html"
t.integer "cached_markdown_version"
t.integer "author_id"
@@ -3197,6 +3350,19 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["group_id", "token_encrypted"], name: "index_scim_oauth_access_tokens_on_group_id_and_token_encrypted", unique: true
end
+ create_table "self_managed_prometheus_alert_events", force: :cascade do |t|
+ t.bigint "project_id", null: false
+ t.bigint "environment_id"
+ t.datetime_with_timezone "started_at", null: false
+ t.datetime_with_timezone "ended_at"
+ t.integer "status", limit: 2, null: false
+ t.string "title", limit: 255, null: false
+ t.string "query_expression", limit: 255
+ t.string "payload_key", limit: 255, null: false
+ t.index ["environment_id"], name: "index_self_managed_prometheus_alert_events_on_environment_id"
+ t.index ["project_id", "payload_key"], name: "idx_project_id_payload_key_self_managed_prometheus_alert_events", unique: true
+ end
+
create_table "sent_notifications", id: :serial, force: :cascade do |t|
t.integer "project_id"
t.integer "noteable_id"
@@ -3281,8 +3447,9 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.text "description"
t.text "description_html"
t.index ["author_id"], name: "index_snippets_on_author_id"
+ t.index ["content"], name: "index_snippets_on_content_trigram", opclass: :gin_trgm_ops, using: :gin
t.index ["file_name"], name: "index_snippets_on_file_name_trigram", opclass: :gin_trgm_ops, using: :gin
- t.index ["project_id"], name: "index_snippets_on_project_id"
+ t.index ["project_id", "visibility_level"], name: "index_snippets_on_project_id_and_visibility_level"
t.index ["title"], name: "index_snippets_on_title_trigram", opclass: :gin_trgm_ops, using: :gin
t.index ["updated_at"], name: "index_snippets_on_updated_at"
t.index ["visibility_level"], name: "index_snippets_on_visibility_level"
@@ -3298,7 +3465,9 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
create_table "software_licenses", id: :serial, force: :cascade do |t|
t.string "name", null: false
+ t.string "spdx_identifier", limit: 255
t.index ["name"], name: "index_software_licenses_on_name"
+ t.index ["spdx_identifier"], name: "index_software_licenses_on_spdx_identifier"
end
create_table "spam_logs", id: :serial, force: :cascade do |t|
@@ -3346,6 +3515,8 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "action"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.bigint "description_version_id"
+ t.index ["description_version_id"], name: "index_system_note_metadata_on_description_version_id", unique: true, where: "(description_version_id IS NOT NULL)"
t.index ["note_id"], name: "index_system_note_metadata_on_note_id", unique: true
end
@@ -3609,6 +3780,8 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "first_name", limit: 255
t.string "last_name", limit: 255
t.string "static_object_token", limit: 255
+ t.integer "role", limit: 2
+ t.index "lower((name)::text)", name: "index_on_users_name_lower"
t.index ["accepted_term_id"], name: "index_users_on_accepted_term_id"
t.index ["admin"], name: "index_users_on_admin"
t.index ["bot_type"], name: "index_users_on_bot_type"
@@ -3652,6 +3825,42 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.index ["user_id", "project_id"], name: "index_users_star_projects_on_user_id_and_project_id", unique: true
end
+ create_table "vulnerabilities", force: :cascade do |t|
+ t.bigint "milestone_id"
+ t.bigint "epic_id"
+ t.bigint "project_id", null: false
+ t.bigint "author_id", null: false
+ t.bigint "updated_by_id"
+ t.bigint "last_edited_by_id"
+ t.date "start_date"
+ t.date "due_date"
+ t.datetime_with_timezone "last_edited_at"
+ t.datetime_with_timezone "created_at", null: false
+ t.datetime_with_timezone "updated_at", null: false
+ t.string "title", limit: 255, null: false
+ t.text "title_html", null: false
+ t.text "description"
+ t.text "description_html"
+ t.bigint "start_date_sourcing_milestone_id"
+ t.bigint "due_date_sourcing_milestone_id"
+ t.bigint "closed_by_id"
+ t.datetime_with_timezone "closed_at"
+ t.integer "state", limit: 2, default: 1, null: false
+ t.integer "severity", limit: 2, null: false
+ t.boolean "severity_overridden", default: false
+ t.integer "confidence", limit: 2, null: false
+ t.boolean "confidence_overridden", default: false
+ t.index ["author_id"], name: "index_vulnerabilities_on_author_id"
+ t.index ["closed_by_id"], name: "index_vulnerabilities_on_closed_by_id"
+ t.index ["due_date_sourcing_milestone_id"], name: "index_vulnerabilities_on_due_date_sourcing_milestone_id"
+ t.index ["epic_id"], name: "index_vulnerabilities_on_epic_id"
+ t.index ["last_edited_by_id"], name: "index_vulnerabilities_on_last_edited_by_id"
+ t.index ["milestone_id"], name: "index_vulnerabilities_on_milestone_id"
+ t.index ["project_id"], name: "index_vulnerabilities_on_project_id"
+ t.index ["start_date_sourcing_milestone_id"], name: "index_vulnerabilities_on_start_date_sourcing_milestone_id"
+ t.index ["updated_by_id"], name: "index_vulnerabilities_on_updated_by_id"
+ end
+
create_table "vulnerability_feedback", id: :serial, force: :cascade do |t|
t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false
@@ -3719,10 +3928,12 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
t.string "name", null: false
t.string "metadata_version", null: false
t.text "raw_metadata", null: false
+ t.bigint "vulnerability_id"
t.index ["primary_identifier_id"], name: "index_vulnerability_occurrences_on_primary_identifier_id"
t.index ["project_id", "primary_identifier_id", "location_fingerprint", "scanner_id"], name: "index_vulnerability_occurrences_on_unique_keys", unique: true
t.index ["scanner_id"], name: "index_vulnerability_occurrences_on_scanner_id"
t.index ["uuid"], name: "index_vulnerability_occurrences_on_uuid", unique: true
+ t.index ["vulnerability_id"], name: "index_vulnerability_occurrences_on_vulnerability_id"
end
create_table "vulnerability_scanners", force: :cascade do |t|
@@ -3789,6 +4000,11 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "analytics_cycle_analytics_project_stages", "projects", on_delete: :cascade
add_foreign_key "analytics_language_trend_repository_languages", "programming_languages", on_delete: :cascade
add_foreign_key "analytics_language_trend_repository_languages", "projects", on_delete: :cascade
+ add_foreign_key "analytics_repository_file_commits", "analytics_repository_files", on_delete: :cascade
+ add_foreign_key "analytics_repository_file_commits", "projects", on_delete: :cascade
+ add_foreign_key "analytics_repository_file_edits", "analytics_repository_files", on_delete: :cascade
+ add_foreign_key "analytics_repository_file_edits", "projects", on_delete: :cascade
+ add_foreign_key "analytics_repository_files", "projects", on_delete: :cascade
add_foreign_key "application_settings", "namespaces", column: "custom_project_templates_group_id", on_delete: :nullify
add_foreign_key "application_settings", "projects", column: "file_template_project_id", name: "fk_ec757bd087", on_delete: :nullify
add_foreign_key "application_settings", "projects", column: "instance_administration_project_id", on_delete: :nullify
@@ -3809,6 +4025,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "approval_project_rules_users", "users", on_delete: :cascade
add_foreign_key "approvals", "merge_requests", name: "fk_310d714958", on_delete: :cascade
add_foreign_key "approver_groups", "namespaces", column: "group_id", on_delete: :cascade
+ add_foreign_key "aws_roles", "users", on_delete: :cascade
add_foreign_key "badges", "namespaces", column: "group_id", on_delete: :cascade
add_foreign_key "badges", "projects", on_delete: :cascade
add_foreign_key "board_assignees", "boards", on_delete: :cascade
@@ -3872,7 +4089,10 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "cluster_platforms_kubernetes", "clusters", on_delete: :cascade
add_foreign_key "cluster_projects", "clusters", on_delete: :cascade
add_foreign_key "cluster_projects", "projects", on_delete: :cascade
+ add_foreign_key "cluster_providers_aws", "clusters", on_delete: :cascade
+ add_foreign_key "cluster_providers_aws", "users", column: "created_by_user_id", on_delete: :nullify
add_foreign_key "cluster_providers_gcp", "clusters", on_delete: :cascade
+ add_foreign_key "clusters", "projects", column: "management_project_id", name: "fk_f05c5e5a42", on_delete: :nullify
add_foreign_key "clusters", "users", on_delete: :nullify
add_foreign_key "clusters_applications_cert_managers", "clusters", on_delete: :cascade
add_foreign_key "clusters_applications_helm", "clusters", on_delete: :cascade
@@ -3893,11 +4113,15 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "deploy_keys_projects", "projects", name: "fk_58a901ca7e", on_delete: :cascade
add_foreign_key "deployments", "clusters", name: "fk_289bba3222", on_delete: :nullify
add_foreign_key "deployments", "projects", name: "fk_b9a3851b82", on_delete: :cascade
+ add_foreign_key "description_versions", "epics", on_delete: :cascade
+ add_foreign_key "description_versions", "issues", on_delete: :cascade
+ add_foreign_key "description_versions", "merge_requests", on_delete: :cascade
add_foreign_key "design_management_designs", "issues", on_delete: :cascade
add_foreign_key "design_management_designs", "projects", on_delete: :cascade
add_foreign_key "design_management_designs_versions", "design_management_designs", column: "design_id", name: "fk_03c671965c", on_delete: :cascade
add_foreign_key "design_management_designs_versions", "design_management_versions", column: "version_id", name: "fk_f4d25ba00c", on_delete: :cascade
add_foreign_key "design_management_versions", "issues", on_delete: :cascade
+ add_foreign_key "design_management_versions", "users", name: "fk_ee16b939e5", on_delete: :nullify
add_foreign_key "draft_notes", "merge_requests", on_delete: :cascade
add_foreign_key "draft_notes", "users", column: "author_id", on_delete: :cascade
add_foreign_key "elasticsearch_indexed_namespaces", "namespaces", on_delete: :cascade
@@ -3915,6 +4139,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "events", "namespaces", column: "group_id", name: "fk_61fbf6ca48", on_delete: :cascade
add_foreign_key "events", "projects", on_delete: :cascade
add_foreign_key "events", "users", column: "author_id", name: "fk_edfd187b6f", on_delete: :cascade
+ add_foreign_key "evidences", "releases", on_delete: :cascade
add_foreign_key "external_pull_requests", "projects", on_delete: :cascade
add_foreign_key "fork_network_members", "fork_networks", on_delete: :cascade
add_foreign_key "fork_network_members", "projects", column: "forked_from_project_id", name: "fk_b01280dae4", on_delete: :nullify
@@ -3951,6 +4176,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "gpg_signatures", "gpg_key_subkeys", on_delete: :nullify
add_foreign_key "gpg_signatures", "gpg_keys", on_delete: :nullify
add_foreign_key "gpg_signatures", "projects", on_delete: :cascade
+ add_foreign_key "grafana_integrations", "projects", on_delete: :cascade
add_foreign_key "group_custom_attributes", "namespaces", column: "group_id", on_delete: :cascade
add_foreign_key "identities", "saml_providers", name: "fk_aade90f0fc", on_delete: :cascade
add_foreign_key "import_export_uploads", "projects", on_delete: :cascade
@@ -3973,6 +4199,10 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "issues", "users", column: "author_id", name: "fk_05f1e72feb", on_delete: :nullify
add_foreign_key "issues", "users", column: "closed_by_id", name: "fk_c63cbf6c25", on_delete: :nullify
add_foreign_key "issues", "users", column: "updated_by_id", name: "fk_ffed080f01", on_delete: :nullify
+ add_foreign_key "issues_prometheus_alert_events", "issues", on_delete: :cascade
+ add_foreign_key "issues_prometheus_alert_events", "prometheus_alert_events", on_delete: :cascade
+ add_foreign_key "issues_self_managed_prometheus_alert_events", "issues", on_delete: :cascade
+ add_foreign_key "issues_self_managed_prometheus_alert_events", "self_managed_prometheus_alert_events", on_delete: :cascade
add_foreign_key "jira_connect_subscriptions", "jira_connect_installations", on_delete: :cascade
add_foreign_key "jira_connect_subscriptions", "namespaces", on_delete: :cascade
add_foreign_key "jira_tracker_data", "services", on_delete: :cascade
@@ -4064,6 +4294,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "project_incident_management_settings", "projects", on_delete: :cascade
add_foreign_key "project_metrics_settings", "projects", on_delete: :cascade
add_foreign_key "project_mirror_data", "projects", name: "fk_d1aad367d7", on_delete: :cascade
+ add_foreign_key "project_pages_metadata", "projects", on_delete: :cascade
add_foreign_key "project_repositories", "projects", on_delete: :cascade
add_foreign_key "project_repositories", "shards", on_delete: :restrict
add_foreign_key "project_repository_states", "projects", on_delete: :cascade
@@ -4111,6 +4342,8 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "reviews", "users", column: "author_id", on_delete: :nullify
add_foreign_key "saml_providers", "namespaces", column: "group_id", on_delete: :cascade
add_foreign_key "scim_oauth_access_tokens", "namespaces", column: "group_id", on_delete: :cascade
+ add_foreign_key "self_managed_prometheus_alert_events", "environments", on_delete: :cascade
+ add_foreign_key "self_managed_prometheus_alert_events", "projects", on_delete: :cascade
add_foreign_key "services", "projects", name: "fk_71cce407f9", on_delete: :cascade
add_foreign_key "slack_integrations", "services", on_delete: :cascade
add_foreign_key "smartcard_identities", "users", on_delete: :cascade
@@ -4119,6 +4352,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "software_license_policies", "software_licenses", on_delete: :cascade
add_foreign_key "subscriptions", "projects", on_delete: :cascade
add_foreign_key "suggestions", "notes", on_delete: :cascade
+ add_foreign_key "system_note_metadata", "description_versions", name: "fk_fbd87415c9", on_delete: :nullify
add_foreign_key "system_note_metadata", "notes", name: "fk_d83a918cb1", on_delete: :cascade
add_foreign_key "term_agreements", "application_setting_terms", column: "term_id"
add_foreign_key "term_agreements", "users", on_delete: :cascade
@@ -4143,6 +4377,15 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "users_ops_dashboard_projects", "projects", on_delete: :cascade
add_foreign_key "users_ops_dashboard_projects", "users", on_delete: :cascade
add_foreign_key "users_star_projects", "projects", name: "fk_22cd27ddfc", on_delete: :cascade
+ add_foreign_key "vulnerabilities", "epics", name: "fk_1d37cddf91", on_delete: :nullify
+ add_foreign_key "vulnerabilities", "milestones", column: "due_date_sourcing_milestone_id", name: "fk_7c5bb22a22", on_delete: :nullify
+ add_foreign_key "vulnerabilities", "milestones", column: "start_date_sourcing_milestone_id", name: "fk_88b4d546ef", on_delete: :nullify
+ add_foreign_key "vulnerabilities", "milestones", name: "fk_131d289c65", on_delete: :nullify
+ add_foreign_key "vulnerabilities", "projects", name: "fk_efb96ab1e2", on_delete: :cascade
+ add_foreign_key "vulnerabilities", "users", column: "author_id", name: "fk_b1de915a15", on_delete: :nullify
+ add_foreign_key "vulnerabilities", "users", column: "closed_by_id", name: "fk_cf5c60acbf", on_delete: :nullify
+ add_foreign_key "vulnerabilities", "users", column: "last_edited_by_id", name: "fk_1302949740", on_delete: :nullify
+ add_foreign_key "vulnerabilities", "users", column: "updated_by_id", name: "fk_7ac31eacb9", on_delete: :nullify
add_foreign_key "vulnerability_feedback", "ci_pipelines", column: "pipeline_id", on_delete: :nullify
add_foreign_key "vulnerability_feedback", "issues", on_delete: :nullify
add_foreign_key "vulnerability_feedback", "merge_requests", name: "fk_563ff1912e", on_delete: :nullify
@@ -4155,6 +4398,7 @@ ActiveRecord::Schema.define(version: 2019_09_18_104222) do
add_foreign_key "vulnerability_occurrence_pipelines", "ci_pipelines", column: "pipeline_id", on_delete: :cascade
add_foreign_key "vulnerability_occurrence_pipelines", "vulnerability_occurrences", column: "occurrence_id", on_delete: :cascade
add_foreign_key "vulnerability_occurrences", "projects", on_delete: :cascade
+ add_foreign_key "vulnerability_occurrences", "vulnerabilities", name: "fk_97ffe77653", on_delete: :nullify
add_foreign_key "vulnerability_occurrences", "vulnerability_identifiers", column: "primary_identifier_id", on_delete: :cascade
add_foreign_key "vulnerability_occurrences", "vulnerability_scanners", column: "scanner_id", on_delete: :cascade
add_foreign_key "vulnerability_scanners", "projects", on_delete: :cascade
diff --git a/doc/README.md b/doc/README.md
index 0ba2fd27b6a..61265f94004 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -258,6 +258,7 @@ The following documentation relates to the DevOps **Package** stage:
|:----------------------------------------------------------------|:-------------------------------------------------------|
| [Container Registry](user/packages/container_registry/index.md) | The GitLab Container Registry enables every project in GitLab to have its own space to store [Docker](https://www.docker.com/) images. |
| [Dependency Proxy](user/packages/dependency_proxy/index.md) **(PREMIUM)** | The GitLab Dependency Proxy sets up a local proxy for frequently used upstream images/packages. |
+| [Conan Repository](user/packages/conan_repository/index.md) **(PREMIUM)** | The GitLab Conan Repository enables every project in GitLab to have its own space to store [Conan](https://conan.io/) packages. |
| [Maven Repository](user/packages/maven_repository/index.md) **(PREMIUM)** | The GitLab Maven Repository enables every project in GitLab to have its own space to store [Maven](https://maven.apache.org/) packages. |
| [NPM Registry](user/packages/npm_registry/index.md) **(PREMIUM)** | The GitLab NPM Registry enables every project in GitLab to have its own space to store [NPM](https://www.npmjs.com/) packages. |
diff --git a/doc/administration/audit_events.md b/doc/administration/audit_events.md
index bd51a3e18d7..61ea673071e 100644
--- a/doc/administration/audit_events.md
+++ b/doc/administration/audit_events.md
@@ -117,6 +117,35 @@ on adding these events into GitLab:
- [Group settings and activity](https://gitlab.com/groups/gitlab-org/-/epics/475)
- [Instance-level settings and activity](https://gitlab.com/groups/gitlab-org/-/epics/476)
+### Disabled events
+
+#### Repository push
+
+The current architecture of audit events is not prepared to receive a very high amount of records.
+It may make your project/admin audit logs UI very busy and the disk space consumed by the
+`audit_events` Postgres table will increase considerably. Thus, it's disabled by default
+to prevent performance degradations on GitLab instances with very high Git write traffic.
+
+In an upcoming release, Audit Logs for Git push events will be enabled
+by default. Follow [#7865](https://gitlab.com/gitlab-org/gitlab/issues/7865) for updates.
+
+If you still wish to enable **Repository push** events in your instance, follow
+the steps bellow.
+
+**In Omnibus installations:**
+
+1. Enter the Rails console:
+
+ ```sh
+ sudo gitlab-rails console
+ ```
+
+1. Flip the switch and enable the feature flag:
+
+ ```ruby
+ Feature.enable(:repository_push_audit_event)
+ ```
+
[ee-2336]: https://gitlab.com/gitlab-org/gitlab/issues/2336
[ee]: https://about.gitlab.com/pricing/
[permissions]: ../user/permissions.md
diff --git a/doc/administration/auth/how_to_configure_ldap_gitlab_ce/index.md b/doc/administration/auth/how_to_configure_ldap_gitlab_ce/index.md
index ef35a2d5266..743893d984a 100644
--- a/doc/administration/auth/how_to_configure_ldap_gitlab_ce/index.md
+++ b/doc/administration/auth/how_to_configure_ldap_gitlab_ce/index.md
@@ -8,7 +8,7 @@ Managing a large number of users in GitLab can become a burden for system admini
In this guide we will focus on configuring GitLab with Active Directory. [Active Directory](https://en.wikipedia.org/wiki/Active_Directory) is a popular LDAP compatible directory service provided by Microsoft, included in all modern Windows Server operating systems.
-GitLab has supported LDAP integration since [version 2.2](https://about.gitlab.com/2012/02/22/gitlab-version-2-2/). With GitLab LDAP [group syncing](../how_to_configure_ldap_gitlab_ee/index.html#group-sync) being added to GitLab Enterprise Edition in [version 6.0](https://about.gitlab.com/2013/08/20/gitlab-6-dot-0-released/). LDAP integration has become one of the most popular features in GitLab.
+GitLab has supported LDAP integration since [version 2.2](https://about.gitlab.com/blog/2012/02/22/gitlab-version-2-2/). With GitLab LDAP [group syncing](../how_to_configure_ldap_gitlab_ee/index.html#group-sync) being added to GitLab Enterprise Edition in [version 6.0](https://about.gitlab.com/blog/2013/08/20/gitlab-6-dot-0-released/). LDAP integration has become one of the most popular features in GitLab.
## Getting started
@@ -18,12 +18,12 @@ The main reason organizations choose to utilize a LDAP server is to keep the ent
There are many commercial and open source [directory servers](https://en.wikipedia.org/wiki/Directory_service#LDAP_implementations) that support the LDAP protocol. Deciding on the right directory server highly depends on the existing IT environment in which the server will be integrated with.
-For example, [Active Directory](https://technet.microsoft.com/en-us/library/hh831484(v=ws.11).aspx) is generally favored in a primarily Windows environment, as this allows quick integration with existing services. Other popular directory services include:
+For example, [Active Directory](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831484(v=ws.11)) is generally favored in a primarily Windows environment, as this allows quick integration with existing services. Other popular directory services include:
-- [Oracle Internet Directory](http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index-082035.html)
+- [Oracle Internet Directory](https://www.oracle.com/middleware/technologies/internet-directory.html)
- [OpenLDAP](http://www.openldap.org/)
- [389 Directory](http://directory.fedoraproject.org/)
-- [OpenDJ](https://forgerock.org/opendj/)
+- [OpenDJ (Renamed to Foregerock Directory Services)](https://www.forgerock.com/platform/directory-services)
- [ApacheDS](https://directory.apache.org/)
> GitLab uses the [Net::LDAP](https://rubygems.org/gems/net-ldap) library under the hood. This means it supports all [IETF](https://tools.ietf.org/html/rfc2251) compliant LDAPv3 servers.
@@ -32,9 +32,9 @@ For example, [Active Directory](https://technet.microsoft.com/en-us/library/hh83
We won't cover the installation and configuration of Windows Server or Active Directory Domain Services in this tutorial. There are a number of resources online to guide you through this process:
-- Install Windows Server 2012 - (_technet.microsoft.com_) - [Installing Windows Server 2012](https://technet.microsoft.com/en-us/library/jj134246(v=ws.11).aspx)
+- Install Windows Server 2012 - (`technet.microsoft.com`) - [Installing Windows Server 2012](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/jj134246(v=ws.11))
-- Install Active Directory Domain Services (AD DS) (_technet.microsoft.com_)- [Install Active Directory Domain Services](https://technet.microsoft.com/windows-server-docs/identity/ad-ds/deploy/install-active-directory-domain-services--level-100-#BKMK_PS)
+- Install Active Directory Domain Services (AD DS) (`technet.microsoft.com`)- [Install Active Directory Domain Services](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/deploy/install-active-directory-domain-services--level-100-#BKMK_PS)
> **Shortcut:** You can quickly install AD DS via PowerShell using
`Install-WindowsFeature AD-Domain-Services -IncludeManagementTools`
@@ -97,7 +97,7 @@ People Ops US GitLab.org/GitLab INT/Global Groups/People Ops US
Global Admins GitLab.org/GitLab INT/Global Groups/Global Admins
```
-> See [more information](https://technet.microsoft.com/en-us/library/ff730967.aspx) on searching Active Directory with Windows PowerShell from [The Scripting Guys](https://technet.microsoft.com/en-us/scriptcenter/dd901334.aspx)
+> See [more information](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-powershell-1.0/ff730967(v=technet.10)) on searching Active Directory with Windows PowerShell from [The Scripting Guys](https://devblogs.microsoft.com/scripting/)
## GitLab LDAP configuration
diff --git a/doc/administration/auth/how_to_configure_ldap_gitlab_ee/index.md b/doc/administration/auth/how_to_configure_ldap_gitlab_ee/index.md
index 9977f9aee14..f0eb6c5180b 100644
--- a/doc/administration/auth/how_to_configure_ldap_gitlab_ee/index.md
+++ b/doc/administration/auth/how_to_configure_ldap_gitlab_ee/index.md
@@ -110,7 +110,7 @@ gitlab_rails['ldap_servers'] = {
Integration of GitLab with Active Directory (LDAP) reduces the complexity of user management.
It has the advantage of improving user permission controls, whilst easing the deployment of GitLab into an existing [IT environment](https://www.techopedia.com/definition/29199/it-infrastructure). GitLab EE offers advanced group management and multiple LDAP servers.
-With the assistance of the [GitLab Support](https://about.gitlab.com/support) team, setting up GitLab with an existing AD/LDAP solution will be a smooth and painless process.
+With the assistance of the [GitLab Support](https://about.gitlab.com/support/) team, setting up GitLab with an existing AD/LDAP solution will be a smooth and painless process.
<!-- ## Troubleshooting
diff --git a/doc/administration/auth/ldap-ee.md b/doc/administration/auth/ldap-ee.md
index d9b7d8b4382..e2894318fe5 100644
--- a/doc/administration/auth/ldap-ee.md
+++ b/doc/administration/auth/ldap-ee.md
@@ -281,7 +281,7 @@ sync to run once every 2 hours at the top of the hour.
> Introduced in GitLab Enterprise Edition Starter 8.9.
Using the `external_groups` setting will allow you to mark all users belonging
-to these groups as [external users](../../user/permissions.md#external-users-permissions).
+to these groups as [external users](../../user/permissions.md#external-users-core-only).
Group membership is checked periodically through the `LdapGroupSync` background
task.
@@ -415,7 +415,7 @@ main: # 'main' is the GitLab 'provider ID' of this LDAP server
[^1]: In Active Directory, a user is marked as disabled/blocked if the user
account control attribute (`userAccountControl:1.2.840.113556.1.4.803`)
- has bit 2 set. See <https://ctogonewild.com/2009/09/03/bitmask-searches-in-ldap/>
+ has bit 2 set. See <https://ctovswild.com/2009/09/03/bitmask-searches-in-ldap/>
for more information.
### User DN has changed
diff --git a/doc/administration/auth/ldap.md b/doc/administration/auth/ldap.md
index 186bf4c4825..e02ce1c0a21 100644
--- a/doc/administration/auth/ldap.md
+++ b/doc/administration/auth/ldap.md
@@ -408,12 +408,12 @@ group, you can use the following syntax:
```
Find more information about this "LDAP_MATCHING_RULE_IN_CHAIN" filter at
-<https://docs.microsoft.com/en-us/windows/desktop/ADSI/search-filter-syntax>. Support for
+<https://docs.microsoft.com/en-us/windows/win32/adsi/search-filter-syntax>. Support for
nested members in the user filter should not be confused with
[group sync nested groups support](ldap-ee.md#supported-ldap-group-typesattributes). **(STARTER ONLY)**
Please note that GitLab does not support the custom filter syntax used by
-omniauth-ldap.
+OmniAuth LDAP.
### Escaping special characters
@@ -536,7 +536,7 @@ ldapsearch -H ldaps://$host:$port -D "$bind_dn" -y bind_dn_password.txt -b "$ba
- Variables beginning with a `$` refer to a variable from the LDAP section of
your configuration file.
-- Replace ldaps:// with ldap:// if you are using the plain authentication method.
+- Replace `ldaps://` with `ldap://` if you are using the plain authentication method.
Port `389` is the default `ldap://` port and `636` is the default `ldaps://`
port.
- We are assuming the password for the bind_dn user is in bind_dn_password.txt.
@@ -563,3 +563,15 @@ If you are getting 'Connection Refused' errors when trying to connect to the
LDAP server please double-check the LDAP `port` and `encryption` settings used by
GitLab. Common combinations are `encryption: 'plain'` and `port: 389`, OR
`encryption: 'simple_tls'` and `port: 636`.
+
+### Connection times out
+
+If GitLab cannot reach your LDAP endpoint, you will see a message like this:
+
+```
+Could not authenticate you from Ldapmain because "Connection timed out - user specified timeout".
+```
+
+If your configured LDAP provider and/or endpoint is offline or otherwise unreachable by GitLab, no LDAP user will be able to authenticate and log in. GitLab does not cache or store credentials for LDAP users to provide authentication during an LDAP outage.
+
+Contact your LDAP provider or administrator if you are seeing this error.
diff --git a/doc/administration/auth/oidc.md b/doc/administration/auth/oidc.md
index 3445f916ef4..698a5506b83 100644
--- a/doc/administration/auth/oidc.md
+++ b/doc/administration/auth/oidc.md
@@ -35,7 +35,7 @@ The OpenID Connect will provide you with a client details and secret for you to
{ 'name' => 'openid_connect',
'label' => '<your_oidc_label>',
'args' => {
- "name' => 'openid_connect',
+ 'name' => 'openid_connect',
'scope' => ['openid','profile'],
'response_type' => 'code',
'issuer' => '<your_oidc_url>',
diff --git a/doc/administration/auth/smartcard.md b/doc/administration/auth/smartcard.md
index 2d2734096ed..eb63df6b482 100644
--- a/doc/administration/auth/smartcard.md
+++ b/doc/administration/auth/smartcard.md
@@ -206,7 +206,7 @@ attribute. As a prerequisite, you must use an LDAP server that:
**For installations from source**
-1. Add the `san_extensions` line to config/gitlab.yml` within the smartcard section:
+1. Add the `san_extensions` line to `config/gitlab.yml` within the smartcard section:
```yaml
smartcard:
diff --git a/doc/administration/custom_hooks.md b/doc/administration/custom_hooks.md
index 3e714b446af..0702e0aa141 100644
--- a/doc/administration/custom_hooks.md
+++ b/doc/administration/custom_hooks.md
@@ -48,10 +48,9 @@ as appropriate.
## Set a global Git hook for all repositories
To create a Git hook that applies to all of your repositories in
-your instance, set a global Git hook. Since all the repositories' `hooks`
-directories are symlinked to GitLab Shell's `hooks` directory, adding any hook
-to the GitLab Shell `hooks` directory will also apply it to all repositories. Follow
-the steps below to properly set up a custom hook for all repositories:
+your instance, set a global Git hook. Since GitLab will look inside the GitLab Shell
+`hooks` directory for global hooks, adding any hook there will apply it to all repositories.
+Follow the steps below to properly set up a custom hook for all repositories:
1. On the GitLab server, navigate to the configured custom hook directory. The
default is in the GitLab Shell directory. The GitLab Shell `hook` directory
diff --git a/doc/administration/geo/disaster_recovery/index.md b/doc/administration/geo/disaster_recovery/index.md
index 5eb23422374..ad5284938fa 100644
--- a/doc/administration/geo/disaster_recovery/index.md
+++ b/doc/administration/geo/disaster_recovery/index.md
@@ -51,7 +51,7 @@ must disable the **primary** node.
NOTE: **Note:**
(**CentOS only**) In CentOS 6 or older, there is no easy way to prevent GitLab from being
- started if the machine reboots isn't available (see [gitlab-org/omnibus-gitlab#3058]).
+ started if the machine reboots isn't available (see [Omnibus GitLab issue #3058](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3058)).
It may be safest to uninstall the GitLab package completely:
```sh
@@ -317,6 +317,5 @@ section to resolve the error. Otherwise, the secret is lost and you'll need to
[setup-geo]: ../replication/index.md#setup-instructions
[updating-geo]: ../replication/version_specific_updates.md#updating-to-gitlab-105
[sec-tfa]: ../../../security/two_factor_authentication.md#disabling-2fa-for-everyone
-[gitlab-org/omnibus-gitlab#3058]: https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3058
[initiate-the-replication-process]: ../replication/database.html#step-3-initiate-the-replication-process
[configure-the-primary-server]: ../replication/database.html#step-1-configure-the-primary-server
diff --git a/doc/administration/geo/disaster_recovery/planned_failover.md b/doc/administration/geo/disaster_recovery/planned_failover.md
index 75e07bcf863..8fee172ec64 100644
--- a/doc/administration/geo/disaster_recovery/planned_failover.md
+++ b/doc/administration/geo/disaster_recovery/planned_failover.md
@@ -43,23 +43,14 @@ will go smoothly.
### Object storage
-Some classes of non-repository data can use object storage in preference to
-file storage. Geo [does not replicate data in object storage](../replication/object_storage.md),
-leaving that task up to the object store itself. For a planned failover, this
-means you can decouple the replication of this data from the failover of the
-GitLab service.
-
-If you're already using object storage, simply verify that your **secondary**
-node has access to the same data as the **primary** node - they must either they share the
-same object storage configuration, or the **secondary** node should be configured to
-access a [geographically-replicated][os-repl] copy provided by the object store
-itself.
-
If you have a large GitLab installation or cannot tolerate downtime, consider
[migrating to Object Storage][os-conf] **before** scheduling a planned failover.
Doing so reduces both the length of the maintenance window, and the risk of data
loss as a result of a poorly executed planned failover.
+In GitLab 12.4, you can optionally allow GitLab to manage replication of Object Storage for
+**secondary** nodes. For more information, see [Object Storage replication][os-conf].
+
### Review the configuration of each **secondary** node
Database settings are automatically replicated to the **secondary** node, but the
@@ -224,5 +215,4 @@ Don't forget to remove the broadcast message after failover is complete.
[background-verification]: background_verification.md
[limitations]: ../replication/index.md#current-limitations
[moving-repositories]: ../../operations/moving_repositories.md
-[os-conf]: ../replication/object_storage.md#configuration
-[os-repl]: ../replication/object_storage.md#replication
+[os-conf]: ../replication/object_storage.md
diff --git a/doc/administration/geo/replication/configuration.md b/doc/administration/geo/replication/configuration.md
index ddb5f22fd05..f09d9f20dab 100644
--- a/doc/administration/geo/replication/configuration.md
+++ b/doc/administration/geo/replication/configuration.md
@@ -25,7 +25,7 @@ Any change that requires access to the **Admin Area** needs to be done in the
GitLab stores a number of secret values in the `/etc/gitlab/gitlab-secrets.json`
file which *must* be the same on all nodes. Until there is
-a means of automatically replicating these between nodes (see issue [gitlab-org/gitlab-ee#3789]),
+a means of automatically replicating these between nodes (see [issue #3789](https://gitlab.com/gitlab-org/gitlab/issues/3789)),
they must be manually replicated to the **secondary** node.
1. SSH into the **primary** node, and execute the command below:
@@ -75,7 +75,7 @@ they must be manually replicated to the **secondary** node.
### Step 2. Manually replicate the **primary** node's SSH host keys
GitLab integrates with the system-installed SSH daemon, designating a user
-(typically named git) through which all access requests are handled.
+(typically named `git`) through which all access requests are handled.
In a [Disaster Recovery] situation, GitLab system
administrators will promote a **secondary** node to the **primary** node. DNS records for the
@@ -165,10 +165,32 @@ keys must be manually replicated to the **secondary** node.
### Step 3. Add the **secondary** node
+1. SSH into your GitLab **secondary** server and login as root:
+
+ ```sh
+ sudo -i
+ ```
+
+1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** name for your node. You will need this in the next steps:
+
+ ```ruby
+ # The unique identifier for the Geo node.
+ gitlab_rails['geo_node_name'] = '<node_name_here>'
+ ```
+
+1. Reconfigure the **secondary** node for the change to take effect:
+
+ ```sh
+ gitlab-ctl reconfigure
+ ```
+
1. Visit the **primary** node's **Admin Area > Geo**
(`/admin/geo/nodes`) in your browser.
-1. Add the **secondary** node by providing its full URL. **Do NOT** check the
+1. Click the **New node** button.
+1. Add the **secondary** node. Use the **exact** name you inputed for `gitlab_rails['geo_node_name']` as the Name and the full URL as the URL. **Do NOT** check the
**This is a primary node** checkbox.
+
+ ![Add secondary node](img/adding_a_secondary_node.png)
1. Optionally, choose which groups or storage shards should be replicated by the
**secondary** node. Leave blank to replicate all. Read more in
[selective synchronization](#selective-synchronization).
@@ -299,7 +321,6 @@ See the [troubleshooting document](troubleshooting.md).
[setup-geo-omnibus]: index.md#using-omnibus-gitlab
[Hashed Storage]: ../../repository_storage_types.md
[Disaster Recovery]: ../disaster_recovery/index.md
-[gitlab-org/gitlab-ee#3789]: https://gitlab.com/gitlab-org/gitlab/issues/3789
[gitlab-com/infrastructure#2821]: https://gitlab.com/gitlab-com/infrastructure/issues/2821
[omnibus-ssl]: https://docs.gitlab.com/omnibus/settings/ssl.html
[using-geo]: using_a_geo_server.md
diff --git a/doc/administration/geo/replication/database.md b/doc/administration/geo/replication/database.md
index 33f240ed11f..fa1b0f0e1d7 100644
--- a/doc/administration/geo/replication/database.md
+++ b/doc/administration/geo/replication/database.md
@@ -1,9 +1,6 @@
# Geo database replication **(PREMIUM ONLY)**
NOTE: **Note:**
-The following steps are for Omnibus installs only. Using Geo with source-based installs was **deprecated** in GitLab 11.5.
-
-NOTE: **Note:**
If your GitLab installation uses external (not managed by Omnibus) PostgreSQL
instances, the Omnibus roles will not be able to perform all necessary
configuration steps. In this case,
@@ -37,8 +34,8 @@ recover. See below for more details.
The following guide assumes that:
- You are using Omnibus and therefore you are using PostgreSQL 9.6 or later
- which includes the [`pg_basebackup` tool][pgback] and improved
- [Foreign Data Wrapper][FDW] support.
+ which includes the [`pg_basebackup` tool](https://www.postgresql.org/docs/9.6/app-pgbasebackup.html) and improved
+ [Foreign Data Wrapper][FDW](https://www.postgresql.org/docs/9.6/postgres-fdw.html) support.
- You have a **primary** node already set up (the GitLab server you are
replicating from), running Omnibus' PostgreSQL (or equivalent version), and
you have a new **secondary** server set up with the same versions of the OS,
@@ -56,6 +53,19 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
sudo -i
```
+1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** name for your node:
+
+ ```ruby
+ # The unique identifier for the Geo node.
+ gitlab_rails['geo_node_name'] = '<node_name_here>'
+ ```
+
+1. Reconfigure the **primary** node for the change to take effect:
+
+ ```sh
+ gitlab-ctl reconfigure
+ ```
+
1. Execute the command below to define the node as **primary** node:
```sh
@@ -149,9 +159,9 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
address (corresponds to "internal address" for Google Cloud Platform) for
`postgresql['md5_auth_cidr_addresses']` and `postgresql['listen_address']`.
- The `listen_address` option opens PostgreSQL up to network connections
- with the interface corresponding to the given address. See [the PostgreSQL
- documentation][pg-docs-runtime-conn] for more details.
+ The `listen_address` option opens PostgreSQL up to network connections with the interface
+ corresponding to the given address. See [the PostgreSQL documentation](https://www.postgresql.org/docs/9.6/runtime-config-connection.html)
+ for more details.
Depending on your network configuration, the suggested addresses may not
be correct. If your **primary** node and **secondary** nodes connect over a local
@@ -202,9 +212,8 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
postgresql['md5_auth_cidr_addresses'] = ['<primary_node_ip>/32', '<secondary_node_ip>/32', '<another_secondary_node_ip>/32']
```
- You may also want to edit the `wal_keep_segments` and `max_wal_senders` to
- match your database replication requirements. Consult the [PostgreSQL -
- Replication documentation][pg-docs-runtime-replication]
+ You may also want to edit the `wal_keep_segments` and `max_wal_senders` to match your
+ database replication requirements. Consult the [PostgreSQL - Replication documentation](https://www.postgresql.org/docs/9.6/runtime-config-replication.html)
for more information.
1. Save the file and reconfigure GitLab for the database listen changes and
@@ -430,7 +439,7 @@ data before running `pg_basebackup`.
(e.g., you know the network path is secure, or you are using a site-to-site
VPN). This is **not** safe over the public Internet!
- You can read more details about each `sslmode` in the
- [PostgreSQL documentation][pg-docs-ssl];
+ [PostgreSQL documentation](https://www.postgresql.org/docs/9.6/libpq-ssl.html#LIBPQ-SSL-PROTECTION);
the instructions above are carefully written to ensure protection against
both passive eavesdroppers and active "man-in-the-middle" attackers.
- Change the `--slot-name` to the name of the replication slot
@@ -443,16 +452,16 @@ data before running `pg_basebackup`.
The replication process is now complete.
-## PGBouncer support (optional)
+## PgBouncer support (optional)
-[PGBouncer](http://pgbouncer.github.io/) may be used with GitLab Geo to pool
-PostgreSQL connections. We recommend using PGBouncer if you use GitLab in a
+[PgBouncer](http://pgbouncer.github.io/) may be used with GitLab Geo to pool
+PostgreSQL connections. We recommend using PgBouncer if you use GitLab in a
high-availability configuration with a cluster of nodes supporting a Geo
**primary** node and another cluster of nodes supporting a Geo **secondary** node. For more
information, see [High Availability with GitLab Omnibus](../../high_availability/database.md#high-availability-with-gitlab-omnibus-premium-only).
-For a Geo **secondary** node to work properly with PGBouncer in front of the database,
-it will need a separate read-only user to make [PostgreSQL FDW queries][FDW]
+For a Geo **secondary** node to work properly with PgBouncer in front of the database,
+it will need a separate read-only user to make [PostgreSQL FDW queries](https://www.postgresql.org/docs/9.6/postgres-fdw.html)
work:
1. On the **primary** Geo database, enter the PostgreSQL on the console as an
@@ -498,11 +507,6 @@ work:
Read the [troubleshooting document](troubleshooting.md).
[replication-slots-article]: https://medium.com/@tk512/replication-slots-in-postgresql-b4b03d277c75
-[pgback]: http://www.postgresql.org/docs/9.2/static/app-pgbasebackup.html
[replication user]:https://wiki.postgresql.org/wiki/Streaming_Replication
-[FDW]: https://www.postgresql.org/docs/9.6/static/postgres-fdw.html
[toc]: index.md#using-omnibus-gitlab
[rake-maintenance]: ../../raketasks/maintenance.md
-[pg-docs-ssl]: https://www.postgresql.org/docs/9.6/static/libpq-ssl.html#LIBPQ-SSL-PROTECTION
-[pg-docs-runtime-conn]: https://www.postgresql.org/docs/9.6/static/runtime-config-connection.html
-[pg-docs-runtime-replication]: https://www.postgresql.org/docs/9.6/static/runtime-config-replication.html
diff --git a/doc/administration/geo/replication/external_database.md b/doc/administration/geo/replication/external_database.md
index 256195998a7..4451d3c6c08 100644
--- a/doc/administration/geo/replication/external_database.md
+++ b/doc/administration/geo/replication/external_database.md
@@ -132,7 +132,7 @@ when `roles ['geo_secondary_role']` is set. For high availability,
refer to [Geo High Availability](../../high_availability/README.md).
If you want to run this database external to Omnibus, please follow the instructions below.
-The tracking database requires an [FDW](https://www.postgresql.org/docs/9.6/static/postgres-fdw.html)
+The tracking database requires an [FDW](https://www.postgresql.org/docs/9.6/postgres-fdw.html)
connection with the **secondary** replica database for improved performance.
If you have an external database ready to be used as the tracking database,
@@ -173,7 +173,7 @@ the tracking database on port 5432.
gitlab-rake geo:db:migrate
```
-1. Configure the [PostgreSQL FDW](https://www.postgresql.org/docs/9.6/static/postgres-fdw.html)
+1. Configure the [PostgreSQL FDW](https://www.postgresql.org/docs/9.6/postgres-fdw.html)
connection and credentials:
Save the script below in a file, ex. `/tmp/geo_fdw.sh` and modify the connection
diff --git a/doc/administration/geo/replication/faq.md b/doc/administration/geo/replication/faq.md
index b3580a706c3..b07b518d3b1 100644
--- a/doc/administration/geo/replication/faq.md
+++ b/doc/administration/geo/replication/faq.md
@@ -43,9 +43,9 @@ attachments / avatars and the whole database. This means user accounts,
issues, merge requests, groups, project data, etc., will be available for
query.
-## Can I git push to a **secondary** node?
+## Can I `git push` to a **secondary** node?
-Yes! Pushing directly to a **secondary** node (for both HTTP and SSH, including git-lfs) was [introduced](https://about.gitlab.com/2018/09/22/gitlab-11-3-released/) in [GitLab Premium](https://about.gitlab.com/pricing/#self-managed) 11.3.
+Yes! Pushing directly to a **secondary** node (for both HTTP and SSH, including Git LFS) was [introduced](https://about.gitlab.com/blog/2018/09/22/gitlab-11-3-released/) in [GitLab Premium](https://about.gitlab.com/pricing/#self-managed) 11.3.
## How long does it take to have a commit replicated to a **secondary** node?
diff --git a/doc/administration/geo/replication/high_availability.md b/doc/administration/geo/replication/high_availability.md
index 9d84e10d496..faa9d051107 100644
--- a/doc/administration/geo/replication/high_availability.md
+++ b/doc/administration/geo/replication/high_availability.md
@@ -8,7 +8,7 @@ described, it is possible to adapt these instructions to your needs.
![Geo HA Diagram](../../high_availability/img/geo-ha-diagram.png)
-_[diagram source - gitlab employees only][diagram-source]_
+_[diagram source - GitLab employees only][diagram-source]_
The topology above assumes that the **primary** and **secondary** Geo clusters
are located in two separate locations, on their own virtual network
@@ -57,6 +57,11 @@ The following steps enable a GitLab cluster to serve as the **primary** node.
roles ['geo_primary_role']
##
+ ## The unique identifier for the Geo node.
+ ##
+ gitlab_rails['geo_node_name'] = '<node_name_here>'
+
+ ##
## Disable automatic migrations
##
gitlab_rails['auto_migrate'] = false
@@ -71,8 +76,16 @@ high availability configuration documentation for
[PostgreSQL](../../high_availability/database.md#configuring-the-application-nodes)
and [Redis](../../high_availability/redis.md#example-configuration-for-the-gitlab-application).
-The **primary** database will require modification later, as part of
-[step 2](#step-2-configure-the-main-read-only-replica-postgresql-database-on-the-secondary-node).
+### Step 2: Configure the **primary** database
+
+1. Edit `/etc/gitlab/gitlab.rb` and add the following:
+
+ ```ruby
+ ##
+ ## Configure the Geo primary role and the PostgreSQL role
+ ##
+ roles ['geo_primary_role', 'postgres_role']
+ ```
## Configure a **secondary** node
@@ -115,9 +128,9 @@ the **primary** database. Use the following as a guide.
```ruby
##
- ## Configure the PostgreSQL role
+ ## Configure the Geo secondary role and the PostgreSQL role
##
- roles ['postgres_role']
+ roles ['geo_secondary_role', 'postgres_role']
##
## Secondary address
@@ -222,6 +235,11 @@ following modifications:
roles ['geo_secondary_role', 'application_role']
##
+ ## The unique identifier for the Geo node.
+ ##
+ gitlab_rails['geo_node_name'] = '<node_name_here>'
+
+ ##
## Disable automatic migrations
##
gitlab_rails['auto_migrate'] = false
@@ -274,15 +292,15 @@ After making these changes [Reconfigure GitLab][gitlab-reconfigure] so the chang
On the secondary the following GitLab frontend services will be enabled:
-- geo-logcursor
-- gitlab-pages
-- gitlab-workhorse
-- logrotate
-- nginx
-- registry
-- remote-syslog
-- sidekiq
-- unicorn
+- `geo-logcursor`
+- `gitlab-pages`
+- `gitlab-workhorse`
+- `logrotate`
+- `nginx`
+- `registry`
+- `remote-syslog`
+- `sidekiq`
+- `unicorn`
Verify these services by running `sudo gitlab-ctl status` on the frontend
application servers.
diff --git a/doc/administration/geo/replication/img/adding_a_secondary_node.png b/doc/administration/geo/replication/img/adding_a_secondary_node.png
new file mode 100644
index 00000000000..5421b578672
--- /dev/null
+++ b/doc/administration/geo/replication/img/adding_a_secondary_node.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_add_geolocation_rule.png b/doc/administration/geo/replication/img/single_git_add_geolocation_rule.png
new file mode 100644
index 00000000000..4b04ba8d1f1
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_add_geolocation_rule.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_add_traffic_policy_endpoints.png b/doc/administration/geo/replication/img/single_git_add_traffic_policy_endpoints.png
new file mode 100644
index 00000000000..c19ad57c953
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_add_traffic_policy_endpoints.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_clone_panel.png b/doc/administration/geo/replication/img/single_git_clone_panel.png
new file mode 100644
index 00000000000..8aa0bd2f7d8
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_clone_panel.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_create_policy_records_with_traffic_policy.png b/doc/administration/geo/replication/img/single_git_create_policy_records_with_traffic_policy.png
new file mode 100644
index 00000000000..a554532f3b8
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_create_policy_records_with_traffic_policy.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_created_policy_record.png b/doc/administration/geo/replication/img/single_git_created_policy_record.png
new file mode 100644
index 00000000000..74c42395e15
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_created_policy_record.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_name_policy.png b/doc/administration/geo/replication/img/single_git_name_policy.png
new file mode 100644
index 00000000000..1a976539e94
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_name_policy.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_policy_diagram.png b/doc/administration/geo/replication/img/single_git_policy_diagram.png
new file mode 100644
index 00000000000..d62952dbbb3
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_policy_diagram.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/single_git_traffic_policies.png b/doc/administration/geo/replication/img/single_git_traffic_policies.png
new file mode 100644
index 00000000000..b3193c23d99
--- /dev/null
+++ b/doc/administration/geo/replication/img/single_git_traffic_policies.png
Binary files differ
diff --git a/doc/administration/geo/replication/index.md b/doc/administration/geo/replication/index.md
index f9f56b96e22..1fef2e85ce6 100644
--- a/doc/administration/geo/replication/index.md
+++ b/doc/administration/geo/replication/index.md
@@ -63,7 +63,7 @@ Keep in mind that:
- Get user data for logins (API).
- Replicate repositories, LFS Objects, and Attachments (HTTPS + JWT).
- Since GitLab Premium 10.0, the **primary** node no longer talks to **secondary** nodes to notify for changes (API).
-- Pushing directly to a **secondary** node (for both HTTP and SSH, including git-lfs) was [introduced](https://about.gitlab.com/2018/09/22/gitlab-11-3-released/) in [GitLab Premium](https://about.gitlab.com/pricing/#self-managed) 11.3.
+- Pushing directly to a **secondary** node (for both HTTP and SSH, including Git LFS) was [introduced](https://about.gitlab.com/blog/2018/09/22/gitlab-11-3-released/) in [GitLab Premium](https://about.gitlab.com/pricing/#self-managed) 11.3.
- There are [limitations](#current-limitations) in the current implementation.
### Architecture
@@ -108,7 +108,7 @@ The following are required to run Geo:
[fast lookup of authorized SSH keys in the database](../../operations/fast_ssh_key_lookup.md))
The following operating systems are known to ship with a current version of OpenSSH:
- [CentOS](https://www.centos.org) 7.4+
- - [Ubuntu](https://www.ubuntu.com) 16.04+
+ - [Ubuntu](https://ubuntu.com) 16.04+
- PostgreSQL 9.6+ with [FDW](https://www.postgresql.org/docs/9.6/postgres-fdw.html) support and [Streaming Replication](https://wiki.postgresql.org/wiki/Streaming_Replication)
- Git 2.9+
- All nodes must run the same GitLab version.
@@ -229,6 +229,10 @@ For more information on Geo security, see [Geo security review](security_review.
For more information on tuning Geo, see [Tuning Geo](tuning.md).
+### Set up a location-aware Git URL
+
+For an example of how to set up a location-aware Git remote URL with AWS Route53, see [Location-aware Git remote URL with AWS Route53](location_aware_git_url.md).
+
## Remove Geo node
For more information on removing a Geo node, see [Removing **secondary** Geo nodes](remove_geo_node.md).
@@ -240,7 +244,7 @@ This list of limitations only reflects the latest version of GitLab. If you are
- Pushing directly to a **secondary** node redirects (for HTTP) or proxies (for SSH) the request to the **primary** node instead of [handling it directly](https://gitlab.com/gitlab-org/gitlab/issues/1381), except when using Git over HTTP with credentials embedded within the URI. For example, `https://user:password@secondary.tld`.
- The **primary** node has to be online for OAuth login to happen. Existing sessions and Git are not affected.
-- The installation takes multiple manual steps that together can take about an hour depending on circumstances. We are working on improving this experience. See [gitlab-org/omnibus-gitlab#2978](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2978) for details.
+- The installation takes multiple manual steps that together can take about an hour depending on circumstances. We are working on improving this experience. See [Omnibus GitLab issue #2978](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2978) for details.
- Real-time updates of issues/merge requests (for example, via long polling) doesn't work on the **secondary** node.
- [Selective synchronization](configuration.md#selective-synchronization) applies only to files and repositories. Other datasets are replicated to the **secondary** node in full, making it inappropriate for use as an access control mechanism.
- Object pools for forked project deduplication work only on the **primary** node, and are duplicated on the **secondary** node.
@@ -251,36 +255,58 @@ This list of limitations only reflects the latest version of GitLab. If you are
The following table lists the GitLab features along with their replication
and verification status on a **secondary** node.
-You can keep track of the progress to include the missing items in:
-
-- [ee-893](https://gitlab.com/groups/gitlab-org/-/epics/893).
-- [ee-1430](https://gitlab.com/groups/gitlab-org/-/epics/1430).
-
-| Feature | Replicated | Verified |
-|-----------|------------|----------|
-| All database content (e.g. snippets, epics, issues, merge requests, groups, and project metadata) | Yes | Yes |
-| Project repository | Yes | Yes |
-| Project wiki repository | Yes | Yes |
-| Project designs repository | No | No |
-| Uploads (e.g. attachments to issues, merge requests, epics, and avatars) | Yes | Yes, only on transfer, or manually (1) |
-| LFS Objects | Yes | Yes, only on transfer, or manually (1) |
-| CI job artifacts (other than traces) | Yes | No, only manually (1) |
-| Archived traces | Yes | Yes, only on transfer, or manually (1) |
-| Personal snippets | Yes | Yes |
-| Version-controlled personal snippets ([unsupported](https://gitlab.com/gitlab-org/gitlab-foss/issues/13426)) | No | No |
-| Project snippets | Yes | Yes |
-| Version-controlled project snippets ([unsupported](https://gitlab.com/gitlab-org/gitlab-foss/issues/13426)) | No | No |
-| Object pools for forked project deduplication | No | No |
-| [Server-side Git Hooks](../../custom_hooks.md) | No | No |
-| [Elasticsearch integration](../../../integration/elasticsearch.md) | No | No |
-| [GitLab Pages](../../pages/index.md) | No | No |
-| [Container Registry](../../packages/container_registry.md) | Yes | No |
-| [NPM Registry](../../../user/packages/npm_registry/index.md) | No | No |
-| [Maven Packages](../../../user/packages/maven_repository/index.md) | No | No |
-| [External merge request diffs](../../merge_request_diffs.md) | No, if they are on-disk | No |
-| Content in object storage ([track progress](https://gitlab.com/groups/gitlab-org/-/epics/1526)) | No | No |
-
-1. The integrity can be verified manually using [Integrity Check Rake Task](../../raketasks/check.md) on both nodes and comparing the output between them.
+You can keep track of the progress to implement the missing items in
+these epics/issues:
+
+- [Unreplicated Data Types](https://gitlab.com/groups/gitlab-org/-/epics/893)
+- [Verify all replicated data](https://gitlab.com/groups/gitlab-org/-/epics/1430)
+
+| Feature | Replicated | Verified | Notes |
+|-----------------------------------------------------|--------------------------|-----------------------------|--------------------------------------------|
+| All database content | **Yes** | **Yes** | |
+| Project repository | **Yes** | **Yes** | |
+| Project wiki repository | **Yes** | **Yes** | |
+| Project designs repository | [No][design-replication] | [No][design-verification] | |
+| Uploads | **Yes** | [No][upload-verification] | Verified only on transfer, or manually (1) |
+| LFS Objects | **Yes** | [No][lfs-verification] | Verified only on transfer, or manually (1) |
+| CI job artifacts (other than traces) | **Yes** | [No][artifact-verification] | Verified only manually (1) |
+| Archived traces | **Yes** | [No][artifact-verification] | Verified only on transfer, or manually (1) |
+| Personal snippets | **Yes** | **Yes** | |
+| Version-controlled personal snippets | No | No | [Not yet supported][unsupported-snippets] |
+| Project snippets | **Yes** | **Yes** | |
+| Version-controlled project snippets | No | No | [Not yet supported][unsupported-snippets] |
+| Object pools for forked project deduplication | **Yes** | No | |
+| [Server-side Git Hooks][custom-hooks] | No | No | |
+| [Elasticsearch integration][elasticsearch] | No | No | |
+| [GitLab Pages][gitlab-pages] | [No][pages-replication] | No | |
+| [Container Registry][container-registry] | **Yes** | No | |
+| [NPM Registry][npm-registry] | No | No | |
+| [Maven Repository][maven-repository] | No | No | |
+| [Conan Repository][conan-repository] | No | No | |
+| [External merge request diffs][merge-request-diffs] | [No][diffs-replication] | No | |
+| Content in object storage | **Yes** | No | |
+
+[design-replication]: https://gitlab.com/groups/gitlab-org/-/epics/1633
+[design-verification]: https://gitlab.com/gitlab-org/gitlab/issues/32467
+[upload-verification]: https://gitlab.com/groups/gitlab-org/-/epics/1817
+[lfs-verification]: https://gitlab.com/gitlab-org/gitlab/issues/8922
+[artifact-verification]: https://gitlab.com/gitlab-org/gitlab/issues/8923
+[diffs-replication]: https://gitlab.com/gitlab-org/gitlab/issues/33817
+[pages-replication]: https://gitlab.com/groups/gitlab-org/-/epics/589
+
+[unsupported-snippets]: https://gitlab.com/gitlab-org/gitlab/issues/14228
+[custom-hooks]: ../../custom_hooks.md
+[elasticsearch]: ../../../integration/elasticsearch.md
+[gitlab-pages]: ../../pages/index.md
+[container-registry]: ../../packages/container_registry.md
+[npm-registry]: ../../../user/packages/npm_registry/index.md
+[maven-repository]: ../../../user/packages/maven_repository/index.md
+[conan-repository]: ../../../user/packages/conan_repository/index.md
+[merge-request-diffs]: ../../merge_request_diffs.md
+
+1. The integrity can be verified manually using
+[Integrity Check Rake Task](../../raketasks/check.md)
+on both nodes and comparing the output between them.
DANGER: **DANGER**
Features not on this list, or with **No** in the **Replicated** column,
diff --git a/doc/administration/geo/replication/location_aware_git_url.md b/doc/administration/geo/replication/location_aware_git_url.md
new file mode 100644
index 00000000000..6183a0ad119
--- /dev/null
+++ b/doc/administration/geo/replication/location_aware_git_url.md
@@ -0,0 +1,119 @@
+# Location-aware Git remote URL with AWS Route53 **(PREMIUM ONLY)**
+
+You can provide GitLab users with a single remote URL that automatically uses
+the Geo node closest to them. This means users don't need to update their Git
+configuration to take advantage of closer Geo nodes as they move.
+
+This is possible because, Git push requests can be automatically redirected
+(HTTP) or proxied (SSH) from **secondary** nodes to the **primary** node.
+
+Though these instructions use [AWS Route53](https://aws.amazon.com/route53/),
+other services such as [Cloudflare](https://www.cloudflare.com/) could be used
+as well.
+
+NOTE: **Note**
+You can also use a load balancer to distribute web UI or API traffic to
+[multiple Geo **secondary** nodes](../../../user/admin_area/geo_nodes.md#multiple-secondary-nodes-behind-a-load-balancer).
+Importantly, the **primary** node cannot yet be included. See the feature request
+[Support putting the **primary** behind a Geo node load balancer](https://gitlab.com/gitlab-org/gitlab/issues/10888).
+
+## Prerequisites
+
+In this example, we have already set up:
+
+- `primary.example.com` as a Geo **primary** node.
+- `secondary.example.com` as a Geo **secondary** node.
+
+We will create a `git.example.com` subdomain that will automatically direct
+requests:
+
+- From Europe to the **secondary** node.
+- From all other locations to the **primary** node.
+
+In any case, you require:
+
+- A working GitLab **primary** node that is accessible at its own address.
+- A working GitLab **secondary** node.
+- A Route53 Hosted Zone managing your domain.
+
+If you have not yet setup a Geo **primary** node and **secondary** node, please consult
+[the Geo setup instructions](https://docs.gitlab.com/ee/administration/geo/replication/#setup-instructions).
+
+## Create a traffic policy
+
+In a Route53 Hosted Zone, traffic policies can be used to set up a variety of
+routing configurations.
+
+1. Navigate to the
+[Route53 dashboard](https://console.aws.amazon.com/route53/home) and click
+**Traffic policies**.
+
+ ![Traffic policies](img/single_git_traffic_policies.png)
+
+1. Click the **Create traffic policy** button.
+
+ ![Name policy](img/single_git_name_policy.png)
+
+1. Fill in the **Policy Name** field with `Single Git Host` and click **Next**.
+
+ ![Policy diagram](img/single_git_policy_diagram.png)
+
+1. Leave **DNS type** as `A: IP Address in IPv4 format`.
+1. Click **Connect to...** and select **Geolocation rule**.
+
+ ![Add geolocation rule](img/single_git_add_geolocation_rule.png)
+
+1. For the first **Location**, leave it as `Default`.
+1. Click **Connect to...** and select **New endpoint**.
+1. Choose **Type** `value` and fill it in with `<your **primary** IP address>`.
+1. For the second **Location**, choose `Europe`.
+1. Click **Connect to...** and select **New endpoint**.
+1. Choose **Type** `value` and fill it in with `<your **secondary** IP address>`.
+
+ ![Add traffic policy endpoints](img/single_git_add_traffic_policy_endpoints.png)
+
+1. Click **Create traffic policy**.
+
+ ![Create policy records with traffic policy](img/single_git_create_policy_records_with_traffic_policy.png)
+
+1. Fill in **Policy record DNS name** with `git`.
+1. Click **Create policy records**.
+
+ ![Created policy record](img/single_git_created_policy_record.png)
+
+You have successfully set up a single host, e.g. `git.example.com` which
+distributes traffic to your Geo nodes by geolocation!
+
+## Configure Git clone URLs to use the special Git URL
+
+When a user clones a repository for the first time, they typically copy the Git
+remote URL from the project page. By default, these SSH and HTTP URLs are based
+on the external URL of the current host. For example:
+
+- `git@secondary.example.com:group1/project1.git`
+- `https://secondary.example.com/group1/project1.git`
+
+![Clone panel](img/single_git_clone_panel.png)
+
+You can customize the:
+
+- SSH remote URL to use the location-aware `git.example.com`. To do so, change the SSH remote URL's
+ host by setting `gitlab_rails['gitlab_ssh_host']` in `gitlab.rb` of web nodes.
+- HTTP remote URL as shown in
+ [Custom Git clone URL for HTTP(S)](../../../user/admin_area/settings/visibility_and_access_controls.md#custom-git-clone-url-for-https).
+
+## Example Git request handling behavior
+
+After following the configuration steps above, handling for Git requests is now location aware.
+For requests:
+
+- Outside Europe, all requests are directed to the **primary** node.
+- Within Europe, over:
+ - HTTP:
+ - `git clone http://git.example.com/foo/bar.git` is directed to the **secondary** node.
+ - `git push` is initially directed to the **secondary**, which automatically
+ redirects to `primary.example.com`.
+ - SSH:
+ - `git clone git@git.example.com:foo/bar.git` is directed to the **secondary**.
+ - `git push` is initially directed to the **secondary**, which automatically
+ proxies the request to `primary.example.com`.
diff --git a/doc/administration/geo/replication/object_storage.md b/doc/administration/geo/replication/object_storage.md
index 878b67a8f8e..a9087abcbd9 100644
--- a/doc/administration/geo/replication/object_storage.md
+++ b/doc/administration/geo/replication/object_storage.md
@@ -1,16 +1,33 @@
# Geo with Object storage **(PREMIUM ONLY)**
-Geo can be used in combination with Object Storage (AWS S3, or
-other compatible object storage).
+Geo can be used in combination with Object Storage (AWS S3, or other compatible object storage).
-## Configuration
+Currently, **secondary** nodes can use either:
-At this time it is required that if object storage is enabled on the
-**primary** node, it must also be enabled on each **secondary** node.
+- The same storage bucket as the **primary** node.
+- A replicated storage bucket.
-**Secondary** nodes can use the same storage bucket as the **primary** node, or
-they can use a replicated storage bucket. At this time GitLab does not
-take care of content replication in object storage.
+To have:
+
+- GitLab manage replication, follow [Enabling GitLab replication](#enabling-gitlab-managed-object-storage-replication).
+- Third-party services manage replication, follow [Third-party replication services](#third-party-replication-services).
+
+## Enabling GitLab managed object storage replication
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/10586) in GitLab 12.4.
+
+CAUTION: **Caution:**
+This is a [**beta** feature](https://about.gitlab.com/handbook/product/#beta) and is not ready yet for production use at any scale.
+
+**Secondary** nodes can replicate files stored on the **primary** node regardless of
+whether they are stored on the local filesystem or in object storage.
+
+To enable GitLab replication, you must:
+
+1. Go to **Admin Area > Geo**.
+1. Press **Edit** on the **secondary** node.
+1. Enable the **Allow this secondary node to replicate content on Object Storage**
+ checkbox.
For LFS, follow the documentation to
[set up LFS object storage](../../../workflow/lfs/lfs_administration.md#storing-lfs-objects-in-remote-object-storage).
@@ -20,12 +37,21 @@ For CI job artifacts, there is similar documentation to configure
For user uploads, there is similar documentation to configure [upload object storage](../../uploads.md#using-object-storage-core-only)
-You should enable and configure object storage on both **primary** and **secondary**
-nodes. Migrating existing data to object storage should be performed on the
-**primary** node only. **Secondary** nodes will automatically notice that the migrated
-files are now in object storage.
+If you want to migrate the **primary** node's files to object storage, you can
+configure the **secondary** in a few ways:
+
+- Use the exact same object storage.
+- Use a separate object store but leverage your object storage solution's built-in
+ replication.
+- Use a separate object store and enable the **Allow this secondary node to replicate
+ content on Object Storage** setting.
+
+GitLab does not currently support the case where both:
+
+- The **primary** node uses local storage.
+- A **secondary** node uses object storage.
-## Replication
+## Third-party replication services
When using Amazon S3, you can use
[CRR](https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html) to
diff --git a/doc/administration/geo/replication/security_review.md b/doc/administration/geo/replication/security_review.md
index 832d02be9a5..68bf5b5d23a 100644
--- a/doc/administration/geo/replication/security_review.md
+++ b/doc/administration/geo/replication/security_review.md
@@ -1,9 +1,9 @@
# Geo security review (Q&A) **(PREMIUM ONLY)**
-The following security review of the Geo feature set focuses on security
-aspects of the feature as they apply to customers running their own GitLab
-instances. The review questions are based in part on the [application security architecture](https://www.owasp.org/index.php/Application_Security_Architecture_Cheat_Sheet)
-questions from [owasp.org](https://www.owasp.org).
+The following security review of the Geo feature set focuses on security aspects of
+the feature as they apply to customers running their own GitLab instances. The review
+questions are based in part on the [OWASP Application Security Verification Standard Project](https://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project)
+from [owasp.org](https://www.owasp.org/index.php/Main_Page).
## Business Model
@@ -30,7 +30,7 @@ questions from [owasp.org](https://www.owasp.org).
private projects. Geo replicates them all indiscriminately. “Selective syncâ€
exists for files and repositories (but not database content), which would permit
only less-sensitive projects to be replicated to a **secondary** node if desired.
-- See also: [developing a data classification policy](https://gitlab.com/gitlab-com/security/issues/4).
+- See also: [GitLab data classification policy](https://about.gitlab.com/handbook/engineering/security/data-classification-policy.html).
### What data backup and retention requirements have been defined for the application?
@@ -49,9 +49,9 @@ questions from [owasp.org](https://www.owasp.org).
### How do the endâ€users interact with the application?
- **Secondary** nodes provide all the interfaces a **primary** node does
- (notably a HTTP/HTTPS web application, and HTTP/HTTPS or SSH git repository
+ (notably a HTTP/HTTPS web application, and HTTP/HTTPS or SSH Git repository
access), but is constrained to read-only activities. The principal use case is
- envisioned to be cloning git repositories from the **secondary** node in favor of the
+ envisioned to be cloning Git repositories from the **secondary** node in favor of the
**primary** node, but end-users may use the GitLab web interface to view projects,
issues, merge requests, snippets, etc.
@@ -229,7 +229,7 @@ questions from [owasp.org](https://www.owasp.org).
- A static secret shared across all hosts in a GitLab deployment.
- In transit, data should be encrypted, although the application does permit
communication to proceed unencrypted. The two main transits are the **secondary** node’s
- replication process for PostgreSQL, and for git repositories/files. Both should
+ replication process for PostgreSQL, and for Git repositories/files. Both should
be protected using TLS, with the keys for that managed via Omnibus per existing
configuration for end-user access to GitLab.
diff --git a/doc/administration/geo/replication/troubleshooting.md b/doc/administration/geo/replication/troubleshooting.md
index 263fc05dce9..4d64941411a 100644
--- a/doc/administration/geo/replication/troubleshooting.md
+++ b/doc/administration/geo/replication/troubleshooting.md
@@ -252,7 +252,7 @@ to start again from scratch, there are a few steps that can help you:
gitlab-ctl stop geo-logcursor
```
- You can watch sidekiq logs to know when sidekiq jobs processing have finished:
+ You can watch Sidekiq logs to know when Sidekiq jobs processing have finished:
```sh
gitlab-ctl tail sidekiq
@@ -280,8 +280,8 @@ to start again from scratch, there are a few steps that can help you:
Any uploaded content like file attachments, avatars or LFS objects are stored in a
subfolder in one of the two paths below:
- - /var/opt/gitlab/gitlab-rails/shared
- - /var/opt/gitlab/gitlab-rails/uploads
+ - `/var/opt/gitlab/gitlab-rails/shared`
+ - `/var/opt/gitlab/gitlab-rails/uploads`
To rename all of them:
diff --git a/doc/administration/geo/replication/using_a_geo_server.md b/doc/administration/geo/replication/using_a_geo_server.md
index 55b5d486676..55c7e78da92 100644
--- a/doc/administration/geo/replication/using_a_geo_server.md
+++ b/doc/administration/geo/replication/using_a_geo_server.md
@@ -4,7 +4,7 @@
After you set up the [database replication and configure the Geo nodes][req], use your closest GitLab node as you would a normal standalone GitLab instance.
-Pushing directly to a **secondary** node (for both HTTP, SSH including git-lfs) was [introduced](https://about.gitlab.com/2018/09/22/gitlab-11-3-released/) in [GitLab Premium](https://about.gitlab.com/pricing/#self-managed) 11.3.
+Pushing directly to a **secondary** node (for both HTTP, SSH including Git LFS) was [introduced](https://about.gitlab.com/blog/2018/09/22/gitlab-11-3-released/) in [GitLab Premium](https://about.gitlab.com/pricing/#self-managed) 11.3.
Example of the output you will see when pushing to a **secondary** node:
diff --git a/doc/administration/gitaly/index.md b/doc/administration/gitaly/index.md
index 3b32baf28b9..d5749427f6e 100644
--- a/doc/administration/gitaly/index.md
+++ b/doc/administration/gitaly/index.md
@@ -3,7 +3,7 @@
[Gitaly](https://gitlab.com/gitlab-org/gitaly) is the service that
provides high-level RPC access to Git repositories. Without it, no other
components can read or write Git data. GitLab components that access Git
-repositories (gitlab-rails, gitlab-shell, gitlab-workhorse, etc.) act as clients
+repositories (GitLab Rails, GitLab Shell, GitLab Workhorse, etc.) act as clients
to Gitaly. End users do not have direct access to Gitaly.
In the rest of this page, Gitaly server is referred to the standalone node that
@@ -47,8 +47,8 @@ But since 11.8 the indexer uses Gitaly for data access as well. NFS can still
be leveraged for redudancy on block level of the Git data. But only has to
be mounted on the Gitaly server.
-Starting with GitLab 11.8, it is possible to use ElasticSearch in conjunction with
-a Gitaly setup that isn't utilising NFS. In order to use ElasticSearch in this
+Starting with GitLab 11.8, it is possible to use Elasticsearch in conjunction with
+a Gitaly setup that isn't utilising NFS. In order to use Elasticsearch in this
scenario, the [new repository indexer](../../integration/elasticsearch.md#elasticsearch-repository-indexer-beta)
needs to be enabled in your GitLab configuration.
@@ -71,8 +71,8 @@ The following list depicts what the network architecture of Gitaly is:
- A GitLab server can use one or more Gitaly servers.
- Gitaly addresses must be specified in such a way that they resolve
correctly for ALL Gitaly clients.
-- Gitaly clients are: Unicorn, Sidekiq, gitlab-workhorse,
- gitlab-shell, Elasticsearch Indexer, and Gitaly itself.
+- Gitaly clients are: Unicorn, Sidekiq, GitLab Workhorse,
+ GitLab Shell, Elasticsearch Indexer, and Gitaly itself.
- A Gitaly server must be able to make RPC calls **to itself** via its own
`(Gitaly address, Gitaly token)` pair as specified in `/config/gitlab.yml`.
- Gitaly servers must not be exposed to the public internet as Gitaly's network
@@ -86,7 +86,8 @@ Below we describe how to configure two Gitaly servers one at
`gitaly1.internal` and the other at `gitaly2.internal`
with secret token `abc123secret`. We assume
your GitLab installation has three repository storages: `default`,
-`storage1` and `storage2`.
+`storage1` and `storage2`. You can use as little as just one server with one
+repository storage if desired.
### 1. Installation
@@ -129,7 +130,7 @@ Configure a token on the instance that runs the GitLab Rails application.
Next, on the Gitaly servers, you need to configure storage paths, enable
the network listener and configure the token.
-NOTE: **Note:** if you want to reduce the risk of downtime when you enable
+NOTE: **Note:** If you want to reduce the risk of downtime when you enable
authentication you can temporarily disable enforcement, see [the
documentation on configuring Gitaly
authentication](https://gitlab.com/gitlab-org/gitaly/blob/master/doc/configuration/README.md#authentication)
@@ -177,20 +178,19 @@ Check the directory layout on your Gitaly server to be sure.
# Don't forget to copy `/etc/gitlab/gitlab-secrets.json` from web server to Gitaly server.
gitlab_rails['internal_api_url'] = 'https://gitlab.example.com'
+ # Authentication token to ensure only authorized servers can communicate with
+ # Gitaly server
+ gitaly['auth_token'] = 'abc123secret'
+
# Make Gitaly accept connections on all network interfaces. You must use
# firewalls to restrict access to this address/port.
+ # Comment out following line if you only want to support TLS connections
gitaly['listen_addr'] = "0.0.0.0:8075"
- gitaly['auth_token'] = 'abc123secret'
-
- # To use TLS for Gitaly you need to add
- gitaly['tls_listen_addr'] = "0.0.0.0:9999"
- gitaly['certificate_path'] = "path/to/cert.pem"
- gitaly['key_path'] = "path/to/key.pem"
```
1. Append the following to `/etc/gitlab/gitlab.rb` for each respective server:
- For `gitaly1.internal`:
+ On `gitaly1.internal`:
```
gitaly['storage'] = [
@@ -199,7 +199,7 @@ Check the directory layout on your Gitaly server to be sure.
]
```
- For `gitaly2.internal`:
+ On `gitaly2.internal`:
```
gitaly['storage'] = [
@@ -219,11 +219,6 @@ Check the directory layout on your Gitaly server to be sure.
```toml
listen_addr = '0.0.0.0:8075'
- tls_listen_addr = '0.0.0.0:9999'
-
- [tls]
- certificate_path = /path/to/cert.pem
- key_path = /path/to/key.pem
[auth]
token = 'abc123secret'
@@ -231,7 +226,7 @@ Check the directory layout on your Gitaly server to be sure.
1. Append the following to `/home/git/gitaly/config.toml` for each respective server:
- For `gitaly1.internal`:
+ On `gitaly1.internal`:
```toml
[[storage]]
@@ -241,7 +236,7 @@ Check the directory layout on your Gitaly server to be sure.
name = 'storage1'
```
- For `gitaly2.internal`:
+ On `gitaly2.internal`:
```toml
[[storage]]
@@ -369,14 +364,23 @@ To disable Gitaly on a client node:
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/22602) in GitLab 11.8.
Gitaly supports TLS encryption. To be able to communicate
-with a Gitaly instance that listens for secure connections you will need to use `tls://` url
+with a Gitaly instance that listens for secure connections you will need to use `tls://` URL
scheme in the `gitaly_address` of the corresponding storage entry in the GitLab configuration.
You will need to bring your own certificates as this isn't provided automatically.
-The certificate to be used needs to be installed on all Gitaly nodes and on all
+The certificate to be used needs to be installed on all Gitaly nodes, and the
+certificate (or CA of certificate) on all
client nodes that communicate with it following the procedure described in
[GitLab custom certificate configuration](https://docs.gitlab.com/omnibus/settings/ssl.html#install-custom-public-certificates).
+NOTE: **Note**
+The self-signed certificate must specify the address you use to access the
+Gitaly server. If you are addressing the Gitaly server by a hostname, you can
+either use the Common Name field for this, or add it as a Subject Alternative
+Name. If you are addressing the Gitaly server by its IP address, you must add it
+as a Subject Alternative Name to the certificate.
+[gRPC does not support using an IP address as Common Name in a certificate](https://github.com/grpc/grpc/issues/2691).
+
NOTE: **Note:**
It is possible to configure Gitaly servers with both an
unencrypted listening address `listen_addr` and an encrypted listening
@@ -387,7 +391,7 @@ To configure Gitaly with TLS:
**For Omnibus GitLab**
-1. On the client nodes, edit `/etc/gitlab/gitlab.rb`:
+1. On the client node(s), edit `/etc/gitlab/gitlab.rb` as follows:
```ruby
git_data_dirs({
@@ -399,20 +403,38 @@ To configure Gitaly with TLS:
gitlab_rails['gitaly_token'] = 'abc123secret'
```
-1. Save the file and [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
-1. On the Gitaly server nodes, edit `/etc/gitlab/gitlab.rb`:
+1. Save the file and [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure) on client node(s).
+1. Create the `/etc/gitlab/ssl` directory and copy your key and certificate there:
+
+ ```sh
+ sudo mkdir -p /etc/gitlab/ssl
+ sudo chmod 700 /etc/gitlab/ssl
+ sudo cp key.pem cert.pem /etc/gitlab/ssl/
+ ```
+
+1. On the Gitaly server node(s), edit `/etc/gitlab/gitlab.rb` and add:
+
+ <!--
+ updates to following example must also be made at
+ https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab
+ -->
```ruby
gitaly['tls_listen_addr'] = "0.0.0.0:9999"
- gitaly['certificate_path'] = "path/to/cert.pem"
- gitaly['key_path'] = "path/to/key.pem"
+ gitaly['certificate_path'] = "/etc/gitlab/ssl/cert.pem"
+ gitaly['key_path'] = "/etc/gitlab/ssl/key.pem"
```
-1. Save the file and [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
+1. Save the file and [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure) on Gitaly server node(s).
+1. (Optional) After [verifying that all Gitaly traffic is being served over TLS](#observe-type-of-gitaly-connections),
+ you can improve security by disabling non-TLS connections by commenting out
+ or deleting `gitaly['listen_addr']` in `/etc/gitlab/gitlab.rb`, saving the file,
+ and [reconfiguring GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure)
+ on Gitaly server node(s).
**For installations from source**
-1. On the client nodes, edit `/home/git/gitlab/config/gitlab.yml`:
+1. On the client node(s), edit `/home/git/gitlab/config/gitlab.yml` as follows:
```yaml
gitlab:
@@ -437,18 +459,33 @@ To configure Gitaly with TLS:
data will be stored in this folder. This will no longer be necessary after
[this issue](https://gitlab.com/gitlab-org/gitaly/issues/1282) is resolved.
-1. Save the file and [restart GitLab](../restart_gitlab.md#installations-from-source).
-1. On the Gitaly server nodes, edit `/home/git/gitaly/config.toml`:
+1. Save the file and [restart GitLab](../restart_gitlab.md#installations-from-source) on client node(s).
+1. Create the `/etc/gitlab/ssl` directory and copy your key and certificate there:
+
+ ```sh
+ sudo mkdir -p /etc/gitlab/ssl
+ sudo chmod 700 /etc/gitlab/ssl
+ sudo cp key.pem cert.pem /etc/gitlab/ssl/
+ ```
+
+1. On the Gitaly server node(s), edit `/home/git/gitaly/config.toml` and add:
```toml
tls_listen_addr = '0.0.0.0:9999'
[tls]
- certificate_path = '/path/to/cert.pem'
- key_path = '/path/to/key.pem'
+ certificate_path = '/etc/gitlab/ssl/cert.pem'
+ key_path = '/etc/gitlab/ssl/key.pem'
```
-1. Save the file and [restart GitLab](../restart_gitlab.md#installations-from-source).
+1. Save the file and [restart GitLab](../restart_gitlab.md#installations-from-source) on Gitaly server node(s).
+1. (Optional) After [verifying that all Gitaly traffic is being served over TLS](#observe-type-of-gitaly-connections),
+ you can improve security by disabling non-TLS connections by commenting out
+ or deleting `listen_addr` in `/home/git/gitaly/config.toml`, saving the file,
+ and [restarting GitLab](../restart_gitlab.md#installations-from-source)
+ on Gitaly server node(s).
+
+### Observe type of Gitaly connections
To observe what type of connections are actually being used in a
production environment you can use the following Prometheus query:
@@ -512,7 +549,7 @@ a few things that you need to do:
1. Configure [database lookup of SSH keys](../operations/fast_ssh_key_lookup.md)
to eliminate the need for a shared authorized_keys file.
1. Configure [object storage for job artifacts](../job_artifacts.md#using-object-storage)
- including [live tracing](../job_traces.md#new-live-trace-architecture).
+ including [incremental logging](../job_logs.md#new-incremental-logging-architecture).
1. Configure [object storage for LFS objects](../../workflow/lfs/lfs_administration.md#storing-lfs-objects-in-remote-object-storage).
1. Configure [object storage for uploads](../uploads.md#using-object-storage-core-only).
@@ -564,6 +601,109 @@ concurrency limiter, not a rate limiter. If a client makes 1000 requests
in a row in a very short timespan, the concurrency will not exceed 1,
and this mechanism (the concurrency limiter) will do nothing.
+## Rotating a Gitaly authentication token
+
+Rotating credentials in a production environment often either requires
+downtime, or causes outages, or both. If you are careful, though, you
+*can* rotate Gitaly credentials without a service interruption.
+
+This procedure also works if you are running GitLab on a single server.
+In that case, "Gitaly servers" and "Gitaly clients" refers to the same
+machine.
+
+### 1. Monitor current authentication behavior
+
+Use Prometheus to see what the current authentication behavior of your
+GitLab installation is.
+
+```
+sum(rate(gitaly_authentications_total[5m])) by (enforced, status)
+```
+
+In a system where authentication is configured correctly, and where you
+have live traffic, you will see something like this:
+
+```
+{enforced="true",status="ok"} 4424.985419441742
+```
+
+There may also be other numbers with rate 0. We only care about the
+non-zero numbers.
+
+The only non-zero number should have `enforced="true",status="ok"`. If
+you have other non-zero numbers, something is wrong in your
+configuration.
+
+The 'status="ok"' number reflects your current request rate. In the example
+above, Gitaly is handling about 4000 requests per second.
+
+Now you have established that you can monitor the Gitaly authentication
+behavior of your GitLab installation.
+
+### 2. Reconfigure all Gitaly servers to be in "auth transitioning" mode
+
+The second step is to temporarily disable authentication on the Gitaly servers.
+
+```ruby
+# in /etc/gitlab/gitlab.rb
+gitaly['auth_transitioning'] = true
+```
+
+After you have applied this, your Prometheus query should return
+something like this:
+
+```
+{enforced="false",status="would be ok"} 4424.985419441742
+```
+
+Because `enforced="false"`, it will be safe to start rolling out the new
+token.
+
+### 3. Update Gitaly token on all clients and servers
+
+```ruby
+# in /etc/gitlab/gitlab.rb
+
+gitaly['auth_token'] = 'my new secret token'
+```
+
+Remember to apply this on both your Gitaly clients *and* servers. If you
+check your Prometheus query while this change is being rolled out, you
+will see non-zero values for the `enforced="false",status="denied"` counter.
+
+### 4. Use Prometheus to ensure there are no authentication failures
+
+After you applied the Gitaly token change everywhere, and all services
+involved have been restarted, you should will temporarily see a mix of
+`status="would be ok"` and `status="denied"`.
+
+After the new token has been picked up by all Gitaly clients and
+servers, the **only non-zero rate** should be
+`enforced="false",status="would be ok"`.
+
+### 5. Disable "auth transitioning" Mode
+
+Now we turn off the 'auth transitioning' mode. These final steps are
+important: without them, you have **no authentication**.
+
+Update the configuration on your Gitaly servers:
+
+```ruby
+# in /etc/gitlab/gitlab.rb
+gitaly['auth_transitioning'] = false
+```
+
+### 6. Verify that authentication is enforced again
+
+Refresh your Prometheus query. You should now see the same kind of
+result as you did in the beginning:
+
+```
+{enforced="true",status="ok"} 4424.985419441742
+```
+
+Note that `enforced="true"`, meaning that authentication is being enforced.
+
## Troubleshooting Gitaly
### `gitaly-debug`
@@ -747,3 +887,8 @@ To remove the proxy setting, run the following commands (depending on which vari
unset http_proxy
unset https_proxy
```
+
+### Praefect
+
+Praefect is an experimental daemon that allows for replication of the Git data.
+It can be setup with omnibus, [as explained here](./praefect.md).
diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md
new file mode 100644
index 00000000000..9038675a28f
--- /dev/null
+++ b/doc/administration/gitaly/praefect.md
@@ -0,0 +1,114 @@
+# Praefect
+
+NOTE: **Note:** Praefect is an experimental service, and for testing purposes only at
+this time.
+
+Praefect is an optional reverse-proxy for [Gitaly](../index.md) to manage a
+cluster of Gitaly nodes for high availability through replication.
+If a Gitaly node becomes unavailable, it will be possible to fail over to a
+warm Gitaly replica.
+
+The first minimal version will support:
+
+- Eventual consistency of the secondary replicas.
+- Manual fail over from the primary to the secondary.
+
+Follow the [HA Gitaly epic](https://gitlab.com/groups/gitlab-org/-/epics/1489)
+for updates and roadmap.
+
+## Omnibus
+
+### Architecture
+
+For this document, the following network topology is assumed:
+
+```mermaid
+graph TB
+ GitLab --> Gitaly;
+ GitLab --> Praefect;
+ Praefect --> Preafect-Git-1;
+ Praefect --> Preafect-Git-2;
+ Praefect --> Preafect-Git-3;
+```
+
+Where `GitLab` is the collection of clients that can request Git operations.
+`Gitaly` is a Gitaly server before using Praefect. The Praefect node has two
+storage nodes attached. Praefect itself doesn't store data, but connects to
+three Gitaly nodes, `Praefect-Git-1`, `Praefect-Git-2`, and `Praefect-Git-3`.
+There should be no knowledge other than with Praefect about the existence of
+the `Praefect-Git-X` nodes.
+
+### Setup
+
+In this setup guide, the Gitaly node will be added first, then Praefect, and
+lastly we update the GitLab configuration.
+
+#### Gitaly
+
+In their own machine, configure the Gitaly server as described in the
+[gitaly documentation](index.md#3-gitaly-server-configuration).
+
+#### Praefect
+
+Next, Praefect has to be enabled on its own node. Disable all other services,
+and add each Gitaly node that will be connected to Praefect. In the example below,
+the Gitaly nodes are named `praefect-git-X`. Note that one node is designated as
+primary, by setting the primary to `true`:
+
+```ruby
+# /etc/gitlab/gitlab.rb
+
+# Avoid running unnecessary services on the Gitaly server
+postgresql['enable'] = false
+redis['enable'] = false
+nginx['enable'] = false
+prometheus['enable'] = false
+unicorn['enable'] = false
+sidekiq['enable'] = false
+gitlab_workhorse['enable'] = false
+gitaly['enable'] = false
+
+# virtual_storage_name must match the same storage name given to praefect in git_data_dirs
+praefect['virtual_storage_name'] = 'praefect'
+praefect['auth_token'] = 'super_secret_abc'
+praefect['enable'] = true
+praefect['storage_nodes'] = [
+ {
+ 'storage' => 'praefect-git-1',
+ 'address' => 'tcp://praefect-git-1.internal',
+ 'token' => 'token1',
+ 'primary' => true
+ },
+ {
+ 'storage' => 'praefect-git-2',
+ 'address' => 'tcp://praefect-git-2.internal',
+ 'token' => 'token2'
+ },
+ {
+ 'storage' => 'praefect-git-3',
+ 'address' => 'tcp://praefect-git-3.internal',
+ 'token' => 'token3'
+ }
+]
+```
+
+Save the file and [reconfigure Praefect](../restart_gitlab.md#omnibus-gitlab-reconfigure).
+
+#### GitLab
+
+When Praefect is running, it should be exposed as a storage to GitLab. This
+is done through setting the `git_data_dirs`. Assuming the default storage
+configuration is used, there would be two storages available to GitLab:
+
+```ruby
+git_data_dirs({
+ "default" => {
+ "gitaly_address" => "tcp://gitaly.internal"
+ },
+ "praefect" => {
+ "gitaly_address" => "tcp://praefect.internal:2305"
+ }
+})
+```
+
+Restart GitLab using `gitlab-ctl restart` on the GitLab node.
diff --git a/doc/administration/gitaly/reference.md b/doc/administration/gitaly/reference.md
index a3bb4f8a509..fe88ef13958 100644
--- a/doc/administration/gitaly/reference.md
+++ b/doc/administration/gitaly/reference.md
@@ -134,7 +134,7 @@ A lot of Gitaly RPCs need to look up Git objects from repositories.
Most of the time we use `git cat-file --batch` processes for that. For
better performance, Gitaly can re-use these `git cat-file` processes
across RPC calls. Previously used processes are kept around in a
-["git cat-file cache"](https://about.gitlab.com/2019/07/08/git-performance-on-nfs/#enter-cat-file-cache).
+["git cat-file cache"](https://about.gitlab.com/blog/2019/07/08/git-performance-on-nfs/#enter-cat-file-cache).
In order to control how much system resources this uses, we have a maximum number
of cat-file processes that can go into the cache.
diff --git a/doc/administration/high_availability/README.md b/doc/administration/high_availability/README.md
index 0aaf956f169..199944a160c 100644
--- a/doc/administration/high_availability/README.md
+++ b/doc/administration/high_availability/README.md
@@ -25,24 +25,24 @@ solution should balance the costs against the benefits.
There are many options when choosing a highly-available GitLab architecture. We
recommend engaging with GitLab Support to choose the best architecture for your
-use-case. This page contains some various options and guidelines based on
+use case. This page contains some various options and guidelines based on
experience with GitLab.com and Enterprise Edition on-premises customers.
-For a detailed insight into how GitLab scales and configures GitLab.com, you can
+For detailed insight into how GitLab scales and configures GitLab.com, you can
watch [this 1 hour Q&A](https://www.youtube.com/watch?v=uCU8jdYzpac)
with [John Northrup](https://gitlab.com/northrup), and live questions coming in from some of our customers.
## GitLab Components
The following components need to be considered for a scaled or highly-available
-environment. In many cases components can be combined on the same nodes to reduce
+environment. In many cases, components can be combined on the same nodes to reduce
complexity.
- Unicorn/Workhorse - Web-requests (UI, API, Git over HTTP)
- Sidekiq - Asynchronous/Background jobs
- PostgreSQL - Database
- Consul - Database service discovery and health checks/failover
- - PGBouncer - Database pool manager
+ - PgBouncer - Database pool manager
- Redis - Key/Value store (User sessions, cache, queue for Sidekiq)
- Sentinel - Redis health check/failover manager
- Gitaly - Provides high-level RPC access to Git repositories
@@ -57,12 +57,12 @@ infrastructure and maintenance costs of full high availability.
### Basic Scaling
This is the simplest form of scaling and will work for the majority of
-cases. Backend components such as PostgreSQL, Redis and storage are offloaded
+cases. Backend components such as PostgreSQL, Redis, and storage are offloaded
to their own nodes while the remaining GitLab components all run on 2 or more
application nodes.
This form of scaling also works well in a cloud environment when it is more
-cost-effective to deploy several small nodes rather than a single
+cost effective to deploy several small nodes rather than a single
larger one.
- 1 PostgreSQL node
@@ -85,11 +85,11 @@ you can continue with the next step.
### Full Scaling
-For very large installations it may be necessary to further split components
-for maximum scalability. In a fully-scaled architecture the application node
+For very large installations, it might be necessary to further split components
+for maximum scalability. In a fully-scaled architecture, the application node
is split into separate Sidekiq and Unicorn/Workhorse nodes. One indication that
this architecture is required is if Sidekiq queues begin to periodically increase
-in size, indicating that there is contention or not enough resources.
+in size, indicating that there is contention or there are not enough resources.
- 1 PostgreSQL node
- 1 Redis node
@@ -100,7 +100,7 @@ in size, indicating that there is contention or not enough resources.
## High Availability Architecture Examples
-When organizations require scaling *and* high availability the following
+When organizations require scaling *and* high availability, the following
architectures can be utilized. As the introduction section at the top of this
page mentions, there is a tradeoff between cost/complexity and uptime. Be sure
this complexity is absolutely required before taking the step into full
@@ -108,11 +108,11 @@ high availability.
For all examples below, we recommend running Consul and Redis Sentinel on
dedicated nodes. If Consul is running on PostgreSQL nodes or Sentinel on
-Redis nodes there is a potential that high resource usage by PostgreSQL or
+Redis nodes, there is a potential that high resource usage by PostgreSQL or
Redis could prevent communication between the other Consul and Sentinel nodes.
-This may lead to the other nodes believing a failure has occurred and automated
-failover is necessary. Isolating them from the services they monitor reduces
-the chances of split-brain.
+This may lead to the other nodes believing a failure has occurred and initiating
+automated failover. Isolating Redis and Consul from the services they monitor
+reduces the chances of a false positive that a failure has occurred.
The examples below do not really address high availability of NFS. Some enterprises
have access to NFS appliances that manage availability. This is the best case
@@ -131,14 +131,14 @@ trade-offs and limits.
This architecture will work well for many GitLab customers. Larger customers
may begin to notice certain events cause contention/high load - for example,
cloning many large repositories with binary files, high API usage, a large
-number of enqueued Sidekiq jobs, etc. If this happens you should consider
+number of enqueued Sidekiq jobs, and so on. If this happens, you should consider
moving to a hybrid or fully distributed architecture depending on what is causing
the contention.
- 3 PostgreSQL nodes
- 2 Redis nodes
- 3 Consul/Sentinel nodes
-- 2 or more GitLab application nodes (Unicorn, Workhorse, Sidekiq, PGBouncer)
+- 2 or more GitLab application nodes (Unicorn, Workhorse, Sidekiq, PgBouncer)
- 1 NFS/Gitaly server
- 1 Monitoring node (Prometheus, Grafana)
@@ -162,32 +162,11 @@ contention due to certain workloads.
![Hybrid architecture diagram](img/hybrid.png)
-#### Reference Architecture
-
-- **Supported Users (approximate):** 10,000
-- **Known Issues:** While validating the reference architecture, slow endpoints were discovered and are being investigated. [gitlab-org/gitlab-ce/issues/64335](https://gitlab.com/gitlab-org/gitlab-foss/issues/64335)
-
-The Support and Quality teams built, performance tested, and validated an
-environment that supports about 10,000 users. The specifications below are a
-representation of the work so far. The specifications may be adjusted in the
-future based on additional testing and iteration.
-
-NOTE: **Note:** The specifications here were performance tested against a specific coded workload. Your exact needs may be more, depending on your workload. Your workload is influenced by factors such as - but not limited to - how active your users are, how much automation you use, mirroring, and repo/change size.
-
-- 3 PostgreSQL - 4 CPU, 16GiB memory per node
-- 1 PgBouncer - 2 CPU, 4GiB memory
-- 2 Redis - 2 CPU, 8GiB memory per node
-- 3 Consul/Sentinel - 2 CPU, 2GiB memory per node
-- 4 Sidekiq - 4 CPU, 16GiB memory per node
-- 5 GitLab application nodes - 16 CPU, 64GiB memory per node
-- 1 Gitaly - 16 CPU, 64GiB memory
-- 1 Monitoring node - 2 CPU, 8GiB memory, 100GiB local storage
-
### Fully Distributed
This architecture scales to hundreds of thousands of users and projects and is
the basis of the GitLab.com architecture. While this scales well it also comes
-with the added complexity of many more nodes to configure, manage and monitor.
+with the added complexity of many more nodes to configure, manage, and monitor.
- 3 PostgreSQL nodes
- 4 or more Redis nodes (2 separate clusters for persistent and cache data)
@@ -214,3 +193,110 @@ separately:
1. [Configure the GitLab application servers](gitlab.md)
1. [Configure the load balancers](load_balancer.md)
1. [Monitoring node (Prometheus and Grafana)](monitoring_node.md)
+
+## Reference Architecture Examples
+
+These reference architecture examples rely on the general rule that approximately 2 requests per second (RPS) of load is generated for every 100 users.
+
+The specifications here were performance tested against a specific coded
+workload. Your exact needs may be more, depending on your workload. Your
+workload is influenced by factors such as - but not limited to - how active your
+users are, how much automation you use, mirroring, and repo/change size.
+
+### 10,000 User Configuration
+
+- **Supported Users (approximate):** 10,000
+- **RPS:** 200 requests per second
+- **Known Issues:** While validating the reference architecture, slow API endpoints
+ were discovered. For details, see the related issues list in
+ [this issue](https://gitlab.com/gitlab-org/gitlab-foss/issues/64335).
+
+The Support and Quality teams built, performance tested, and validated an
+environment that supports about 10,000 users. The specifications below are a
+representation of the work so far. The specifications may be adjusted in the
+future based on additional testing and iteration.
+
+| Service | Configuration | GCP type |
+| ------------------------------|-------------------------|----------------|
+| 3 GitLab Rails <br> - Puma workers on each node set to 90% of available CPUs with 16 threads | 32 vCPU, 28.8GB Memory | n1-highcpu-32 |
+| 3 PostgreSQL | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 1 PgBouncer | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+| X Gitaly[^1] <br> - Gitaly Ruby workers on each node set to 90% of available CPUs with 16 threads | 16 vCPU, 60GB Memory | n1-standard-16 |
+| 3 Redis Cache + Sentinel <br> - Cache maxmemory set to 90% of available memory | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 3 Redis Persistent + Sentinel | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 4 Sidekiq | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 3 Consul | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+| 1 NFS Server | 16 vCPU, 14.4GB Memory | n1-highcpu-16 |
+| 1 Monitoring node | 4 CPU, 3.6GB Memory | n1-highcpu-4 |
+| 1 Load Balancing node[^2] . | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+
+### 25,000 User Configuration
+
+- **Supported Users (approximate):** 25,000
+- **RPS:** 500 requests per second
+- **Known Issues:** The slow API endpoints that were discovered during testing
+ the 10,000 user architecture also affect the 25,000 user architecture. For
+ details, see the related issues list in
+ [this issue](https://gitlab.com/gitlab-org/gitlab-foss/issues/64335).
+
+The GitLab Support and Quality teams built, performance tested, and validated an
+environment that supports around 25,000 users. The specifications below are a
+representation of the work so far. The specifications may be adjusted in the
+future based on additional testing and iteration.
+
+NOTE: **Note:** The specifications here were performance tested against a
+specific coded workload. Your exact needs may be more, depending on your
+workload. Your workload is influenced by factors such as - but not limited to -
+how active your users are, how much automation you use, mirroring, and
+repo/change size.
+
+| Service | Configuration | GCP type |
+| ------------------------------|-------------------------|----------------|
+| 7 GitLab Rails <br> - Puma workers on each node set to 90% of available CPUs with 16 threads | 32 vCPU, 28.8GB Memory | n1-highcpu-32 |
+| 3 PostgreSQL | 8 vCPU, 30GB Memory | n1-standard-8 |
+| 1 PgBouncer | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+| X Gitaly[^1] <br> - Gitaly Ruby workers on each node set to 90% of available CPUs with 16 threads | 32 vCPU, 120GB Memory | n1-standard-32 |
+| 3 Redis Cache + Sentinel <br> - Cache maxmemory set to 90% of available memory | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 3 Redis Persistent + Sentinel | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 4 Sidekiq | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 3 Consul | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+| 1 NFS Server | 16 vCPU, 14.4GB Memory | n1-highcpu-16 |
+| 1 Monitoring node | 4 CPU, 3.6GB Memory | n1-highcpu-4 |
+| 1 Load Balancing node[^2] . | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+
+### 50,000 User Configuration
+
+- **Supported Users (approximate):** 50,000
+- **RPS:** 1,000 requests per second
+- **Status:** Work-in-progress
+- **Related Issue:** See the [related issue](https://gitlab.com/gitlab-org/quality/performance/issues/66) for more information.
+
+The Support and Quality teams are in the process of building and performance
+testing an environment that will support around 50,000 users. The specifications
+below are a very rough work-in-progress representation of the work so far. The
+Quality team will be certifying this environment in late 2019. The
+specifications may be adjusted prior to certification based on performance
+testing.
+
+| Service | Configuration | GCP type |
+| ------------------------------|-------------------------|----------------|
+| 15 GitLab Rails <br> - Puma workers on each node set to 90% of available CPUs with 16 threads | 32 vCPU, 28.8GB Memory | n1-highcpu-32 |
+| 3 PostgreSQL | 8 vCPU, 30GB Memory | n1-standard-8 |
+| 1 PgBouncer | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+| X Gitaly[^1] <br> - Gitaly Ruby workers on each node set to 90% of available CPUs with 16 threads | 64 vCPU, 240GB Memory | n1-standard-64 |
+| 3 Redis Cache + Sentinel <br> - Cache maxmemory set to 90% of available memory | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 3 Redis Persistent + Sentinel | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 4 Sidekiq | 4 vCPU, 15GB Memory | n1-standard-4 |
+| 3 Consul | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+| 1 NFS Server | 16 vCPU, 14.4GB Memory | n1-highcpu-16 |
+| 1 Monitoring node | 4 CPU, 3.6GB Memory | n1-highcpu-4 |
+| 1 Load Balancing node[^2] . | 2 vCPU, 1.8GB Memory | n1-highcpu-2 |
+
+[^1]: Gitaly node requirements are dependent on customer data. We recommend 2
+ nodes as an absolute minimum for performance at the 10,000 and 25,000 user
+ scale and 4 nodes as an absolute minimum at the 50,000 user scale, but
+ additional nodes should be considered in conjunction with a review of
+ project counts and sizes.
+
+[^2]: HAProxy is the only tested and recommended load balancer. Additional
+ options may be supported in the future.
diff --git a/doc/administration/high_availability/consul.md b/doc/administration/high_availability/consul.md
index b02a61b9256..b01419200cc 100644
--- a/doc/administration/high_availability/consul.md
+++ b/doc/administration/high_availability/consul.md
@@ -6,7 +6,7 @@ type: reference
As part of its High Availability stack, GitLab Premium includes a bundled version of [Consul](https://www.consul.io/) that can be managed through `/etc/gitlab/gitlab.rb`.
-A Consul cluster consists of multiple server agents, as well as client agents that run on other nodes which need to talk to the consul cluster.
+A Consul cluster consists of multiple server agents, as well as client agents that run on other nodes which need to talk to the Consul cluster.
## Prerequisites
@@ -96,7 +96,7 @@ Ideally all nodes will have a `Status` of `alive`.
**Note**: This section only applies to server agents. It is safe to restart client agents whenever needed.
-If it is necessary to restart the server cluster, it is important to do this in a controlled fashion in order to maintain quorum. If quorum is lost, you will need to follow the consul [outage recovery](#outage-recovery) process to recover the cluster.
+If it is necessary to restart the server cluster, it is important to do this in a controlled fashion in order to maintain quorum. If quorum is lost, you will need to follow the Consul [outage recovery](#outage-recovery) process to recover the cluster.
To be safe, we recommend you only restart one server agent at a time to ensure the cluster remains intact.
@@ -129,7 +129,7 @@ To fix this:
1. Run `gitlab-ctl reconfigure`
-If you still see the errors, you may have to [erase the consul database and reinitialize](#recreate-from-scratch) on the affected node.
+If you still see the errors, you may have to [erase the Consul database and reinitialize](#recreate-from-scratch) on the affected node.
### Consul agents do not start - Multiple private IPs
@@ -158,11 +158,11 @@ To fix this:
### Outage recovery
-If you lost enough server agents in the cluster to break quorum, then the cluster is considered failed, and it will not function without manual intervenetion.
+If you lost enough server agents in the cluster to break quorum, then the cluster is considered failed, and it will not function without manual intervention.
#### Recreate from scratch
-By default, GitLab does not store anything in the consul cluster that cannot be recreated. To erase the consul database and reinitialize
+By default, GitLab does not store anything in the Consul cluster that cannot be recreated. To erase the Consul database and reinitialize
```
# gitlab-ctl stop consul
@@ -174,4 +174,4 @@ After this, the cluster should start back up, and the server agents rejoin. Shor
#### Recover a failed cluster
-If you have taken advantage of consul to store other data, and want to restore the failed cluster, please follow the [Consul guide](https://www.consul.io/docs/guides/outage.html) to recover a failed cluster.
+If you have taken advantage of Consul to store other data, and want to restore the failed cluster, please follow the [Consul guide](https://learn.hashicorp.com/consul/day-2-operations/outage) to recover a failed cluster.
diff --git a/doc/administration/high_availability/database.md b/doc/administration/high_availability/database.md
index 99582dae57a..a50cc0cbd03 100644
--- a/doc/administration/high_availability/database.md
+++ b/doc/administration/high_availability/database.md
@@ -153,9 +153,9 @@ Database nodes run two services with PostgreSQL:
- Instructing remaining servers to follow the new master node.
On failure, the old master node is automatically evicted from the cluster, and should be rejoined manually once recovered.
-- Consul. Monitors the status of each node in the database cluster and tracks its health in a service definition on the consul cluster.
+- Consul. Monitors the status of each node in the database cluster and tracks its health in a service definition on the Consul cluster.
-Alongside pgbouncer, there is a consul agent that watches the status of the PostgreSQL service. If that status changes, consul runs a script which updates the configuration and reloads pgbouncer
+Alongside PgBouncer, there is a Consul agent that watches the status of the PostgreSQL service. If that status changes, Consul runs a script which updates the configuration and reloads PgBouncer
##### Connection flow
@@ -198,7 +198,7 @@ When using default setup, minimum configuration requires:
- `CONSUL_USERNAME`. Defaults to `gitlab-consul`
- `CONSUL_DATABASE_PASSWORD`. Password for the database user.
-- `CONSUL_PASSWORD_HASH`. This is a hash generated out of consul username/password pair.
+- `CONSUL_PASSWORD_HASH`. This is a hash generated out of Consul username/password pair.
Can be generated with:
```sh
@@ -248,26 +248,26 @@ We will need the following password information for the application's database u
sudo gitlab-ctl pg-password-md5 POSTGRESQL_USERNAME
```
-##### Pgbouncer information
+##### PgBouncer information
When using default setup, minimum configuration requires:
- `PGBOUNCER_USERNAME`. Defaults to `pgbouncer`
-- `PGBOUNCER_PASSWORD`. This is a password for pgbouncer service.
-- `PGBOUNCER_PASSWORD_HASH`. This is a hash generated out of pgbouncer username/password pair.
+- `PGBOUNCER_PASSWORD`. This is a password for PgBouncer service.
+- `PGBOUNCER_PASSWORD_HASH`. This is a hash generated out of PgBouncer username/password pair.
Can be generated with:
```sh
sudo gitlab-ctl pg-password-md5 PGBOUNCER_USERNAME
```
-- `PGBOUNCER_NODE`, is the IP address or a FQDN of the node running Pgbouncer.
+- `PGBOUNCER_NODE`, is the IP address or a FQDN of the node running PgBouncer.
Few notes on the service itself:
- The service runs as the same system account as the database
- In the package, this is by default `gitlab-psql`
-- If you use a non-default user account for Pgbouncer service (by default `pgbouncer`), you will have to specify this username. We will refer to this requirement with `PGBOUNCER_USERNAME`.
+- If you use a non-default user account for PgBouncer service (by default `pgbouncer`), you will have to specify this username. We will refer to this requirement with `PGBOUNCER_USERNAME`.
- The service will have a regular database user account generated for it
- This defaults to `repmgr`
- Passwords will be stored in the following locations:
@@ -315,7 +315,7 @@ When installing the GitLab package, do not supply `EXTERNAL_URL` value.
# Disable automatic database migrations
gitlab_rails['auto_migrate'] = false
- # Configure the consul agent
+ # Configure the Consul agent
consul['services'] = %w(postgresql)
# START user configuration
@@ -348,7 +348,7 @@ When installing the GitLab package, do not supply `EXTERNAL_URL` value.
1. On secondary nodes, add all the configuration specified above for primary node
to `/etc/gitlab/gitlab.rb`. In addition, append the following configuration
- to inform gitlab-ctl that they are standby nodes initially and it need not
+ to inform `gitlab-ctl` that they are standby nodes initially and it need not
attempt to register them as primary node
```
@@ -363,7 +363,7 @@ When installing the GitLab package, do not supply `EXTERNAL_URL` value.
>
> - If you want your database to listen on a specific interface, change the config:
> `postgresql['listen_address'] = '0.0.0.0'`.
-> - If your Pgbouncer service runs under a different user account,
+> - If your PgBouncer service runs under a different user account,
> you also need to specify: `postgresql['pgbouncer_user'] = PGBOUNCER_USERNAME` in
> your configuration.
@@ -484,9 +484,9 @@ or secondary. The most important thing here is that this command does not produc
If there are errors it's most likely due to incorrect `gitlab-consul` database user permissions.
Check the [Troubleshooting section](#troubleshooting) before proceeding.
-#### Configuring the Pgbouncer node
+#### Configuring the PgBouncer node
-See our [documentation for Pgbouncer](pgbouncer.md) for information on running Pgbouncer as part of an HA setup.
+See our [documentation for PgBouncer](pgbouncer.md) for information on running PgBouncer as part of an HA setup.
#### Configuring the Application nodes
@@ -515,10 +515,10 @@ Ensure that all migrations ran:
gitlab-rake gitlab:db:configure
```
-> **Note**: If you encounter a `rake aborted!` error stating that PGBouncer is failing to connect to
-PostgreSQL it may be that your PGBouncer node's IP address is missing from
+> **Note**: If you encounter a `rake aborted!` error stating that PgBouncer is failing to connect to
+PostgreSQL it may be that your PgBouncer node's IP address is missing from
PostgreSQL's `trust_auth_cidr_addresses` in `gitlab.rb` on your database nodes. See
-[PGBouncer error `ERROR: pgbouncer cannot connect to server`](#pgbouncer-error-error-pgbouncer-cannot-connect-to-server)
+[PgBouncer error `ERROR: pgbouncer cannot connect to server`](#pgbouncer-error-error-pgbouncer-cannot-connect-to-server)
in the Troubleshooting section before proceeding.
##### Ensure GitLab is running
@@ -533,7 +533,7 @@ Here we'll show you some fully expanded example configurations.
##### Example recommended setup
-This example uses 3 consul servers, 3 postgresql servers, and 1 application node.
+This example uses 3 Consul servers, 3 PostgreSQL servers, and 1 application node.
We start with all servers on the same 10.6.0.0/16 private network range, they
can connect to each freely other on those addresses.
@@ -589,7 +589,7 @@ postgresql['shared_preload_libraries'] = 'repmgr_funcs'
# Disable automatic database migrations
gitlab_rails['auto_migrate'] = false
-# Configure the consul agent
+# Configure the Consul agent
consul['services'] = %w(postgresql)
postgresql['pgbouncer_user_password'] = '771a8625958a529132abe6f1a4acb19c'
@@ -635,7 +635,7 @@ postgresql['enable'] = false
pgbouncer['enable'] = true
consul['enable'] = true
-# Configure Pgbouncer
+# Configure PgBouncer
pgbouncer['admin_users'] = %w(pgbouncer gitlab-consul)
# Configure Consul agent
@@ -691,7 +691,7 @@ After deploying the configuration follow these steps:
1. On `10.6.0.31`, our application server
- Set gitlab-consul's pgbouncer password to `toomanysecrets`
+ Set `gitlab-consul` user's PgBouncer password to `toomanysecrets`
```sh
gitlab-ctl write-pgpass --host 127.0.0.1 --database pgbouncer --user pgbouncer --hostuser gitlab-consul
@@ -705,10 +705,10 @@ After deploying the configuration follow these steps:
#### Example minimal setup
-This example uses 3 postgresql servers, and 1 application node.
+This example uses 3 PostgreSQL servers, and 1 application node.
-It differs from the [recommended setup](#example-recommended-setup) by moving the consul servers into the same servers we use for PostgreSQL.
-The trade-off is between reducing server counts, against the increased operational complexity of needing to deal with postgres [failover](#failover-procedure) and [restore](#restore-procedure) procedures in addition to [consul outage recovery](consul.md#outage-recovery) on the same set of machines.
+It differs from the [recommended setup](#example-recommended-setup) by moving the Consul servers into the same servers we use for PostgreSQL.
+The trade-off is between reducing server counts, against the increased operational complexity of needing to deal with PostgreSQL [failover](#failover-procedure) and [restore](#restore-procedure) procedures in addition to [Consul outage recovery](consul.md#outage-recovery) on the same set of machines.
In this example we start with all servers on the same 10.6.0.0/16 private network range, they can connect to each freely other on those addresses.
@@ -744,7 +744,7 @@ postgresql['shared_preload_libraries'] = 'repmgr_funcs'
# Disable automatic database migrations
gitlab_rails['auto_migrate'] = false
-# Configure the consul agent
+# Configure the Consul agent
consul['services'] = %w(postgresql)
postgresql['pgbouncer_user_password'] = '771a8625958a529132abe6f1a4acb19c'
@@ -788,7 +788,7 @@ postgresql['enable'] = false
pgbouncer['enable'] = true
consul['enable'] = true
-# Configure Pgbouncer
+# Configure PgBouncer
pgbouncer['admin_users'] = %w(pgbouncer gitlab-consul)
# Configure Consul agent
@@ -817,7 +817,7 @@ The manual steps for this configuration are the same as for the [example recomme
#### Failover procedure
By default, if the master database fails, `repmgrd` should promote one of the
-standby nodes to master automatically, and consul will update pgbouncer with
+standby nodes to master automatically, and Consul will update PgBouncer with
the new master.
If you need to failover manually, you have two options:
@@ -907,7 +907,7 @@ can require md5 authentication.
##### Trust specific addresses
-If you know the IP address, or FQDN of all database and pgbouncer nodes in the
+If you know the IP address, or FQDN of all database and PgBouncer nodes in the
cluster, you can trust only those nodes.
In `/etc/gitlab/gitlab.rb` on all of the database nodes, set
@@ -926,7 +926,7 @@ repmgr['trust_auth_cidr_addresses'] = %w(192.168.1.44/32 db2.example.com)
##### MD5 Authentication
If you are running on an untrusted network, repmgr can use md5 authentication
-with a [.pgpass file](https://www.postgresql.org/docs/9.6/static/libpq-pgpass.html)
+with a [.pgpass file](https://www.postgresql.org/docs/9.6/libpq-pgpass.html)
to authenticate.
You can specify by IP address, FQDN, or by subnet, using the same format as in
@@ -950,7 +950,7 @@ the previous section:
1. Set `postgresql['md5_auth_cidr_addresses']` to the desired value
1. Set `postgresql['sql_replication_user'] = 'gitlab_repmgr'`
1. Reconfigure with `gitlab-ctl reconfigure`
- 1. Restart postgresql with `gitlab-ctl restart postgresql`
+ 1. Restart PostgreSQL with `gitlab-ctl restart postgresql`
1. Create a `.pgpass` file. Enter the `gitlab_repmgr` password twice to
when asked:
@@ -959,7 +959,7 @@ the previous section:
gitlab-ctl write-pgpass --user gitlab_repmgr --hostuser gitlab-psql --database '*'
```
-1. On each pgbouncer node, edit `/etc/gitlab/gitlab.rb`:
+1. On each PgBouncer node, edit `/etc/gitlab/gitlab.rb`:
1. Ensure `gitlab_rails['db_password']` is set to the plaintext password for
the `gitlab` database user
1. [Reconfigure GitLab] for the changes to take effect
@@ -993,7 +993,7 @@ To restart either service, run `gitlab-ctl restart SERVICE`
For PostgreSQL, it is usually safe to restart the master node by default. Automatic failover defaults to a 1 minute timeout. Provided the database returns before then, nothing else needs to be done. To be safe, you can stop `repmgrd` on the standby nodes first with `gitlab-ctl stop repmgrd`, then start afterwards with `gitlab-ctl start repmgrd`.
-On the consul server nodes, it is important to restart the consul service in a controlled fashion. Read our [consul documentation](consul.md#restarting-the-server-cluster) for instructions on how to restart the service.
+On the Consul server nodes, it is important to restart the Consul service in a controlled fashion. Read our [Consul documentation](consul.md#restarting-the-server-cluster) for instructions on how to restart the service.
### `gitlab-ctl repmgr-check-master` command produces errors
@@ -1010,16 +1010,16 @@ steps to fix the problem:
Now there should not be errors. If errors still occur then there is another problem.
-### PGBouncer error `ERROR: pgbouncer cannot connect to server`
+### PgBouncer error `ERROR: pgbouncer cannot connect to server`
You may get this error when running `gitlab-rake gitlab:db:configure` or you
-may see the error in the PGBouncer log file.
+may see the error in the PgBouncer log file.
```
PG::ConnectionBad: ERROR: pgbouncer cannot connect to server
```
-The problem may be that your PGBouncer node's IP address is not included in the
+The problem may be that your PgBouncer node's IP address is not included in the
`trust_auth_cidr_addresses` setting in `/etc/gitlab/gitlab.rb` on the database nodes.
You can confirm that this is the issue by checking the PostgreSQL log on the master
@@ -1049,7 +1049,7 @@ If you're running into an issue with a component not outlined here, be sure to c
## Configure using Omnibus
**Note**: We recommend that you follow the instructions here for a full [PostgreSQL cluster](#high-availability-with-gitlab-omnibus-premium-only).
-If you are reading this section due to an old bookmark, you can find that old documentation [in the repository](https://gitlab.com/gitlab-org/gitlab-foss/blob/v10.1.4/doc/administration/high_availability/database.md#configure-using-omnibus).
+If you are reading this section due to an old bookmark, you can find that old documentation [in the repository](https://gitlab.com/gitlab-org/gitlab/blob/v10.1.4/doc/administration/high_availability/database.md#configure-using-omnibus).
Read more on high-availability configuration:
diff --git a/doc/administration/high_availability/gitlab.md b/doc/administration/high_availability/gitlab.md
index 0d1dd06871a..71ab169a801 100644
--- a/doc/administration/high_availability/gitlab.md
+++ b/doc/administration/high_availability/gitlab.md
@@ -40,7 +40,7 @@ these additional steps before proceeding with GitLab installation.
```
1. Download/install GitLab Omnibus using **steps 1 and 2** from
- [GitLab downloads](https://about.gitlab.com/downloads). Do not complete other
+ [GitLab downloads](https://about.gitlab.com/install/). Do not complete other
steps on the download page.
1. Create/edit `/etc/gitlab/gitlab.rb` and use the following configuration.
Be sure to change the `external_url` to match your eventual GitLab front-end
@@ -90,8 +90,8 @@ these additional steps before proceeding with GitLab installation.
NOTE: **Note:** When you specify `https` in the `external_url`, as in the example
above, GitLab assumes you have SSL certificates in `/etc/gitlab/ssl/`. If
- certificates are not present, Nginx will fail to start. See
- [Nginx documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https)
+ certificates are not present, NGINX will fail to start. See
+ [NGINX documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https)
for more information.
NOTE: **Note:** It is best to set the `uid` and `gid`s prior to the initial reconfigure
@@ -99,14 +99,14 @@ these additional steps before proceeding with GitLab installation.
## First GitLab application server
-As a final step, run the setup rake task **only on** the first GitLab application server.
-Do not run this on additional application servers.
+On the first application server, run:
-1. Initialize the database by running `sudo gitlab-rake gitlab:setup`.
-1. Run `sudo gitlab-ctl reconfigure` to compile the configuration.
+```sh
+sudo gitlab-ctl reconfigure
+```
- CAUTION: **WARNING:** Only run this setup task on **NEW** GitLab instances because it
- will wipe any existing data.
+This should compile the configuration and initialize the database. Do
+not run this on additional application servers until the next step.
## Extra configuration for additional GitLab application servers
@@ -175,7 +175,7 @@ If you enable Monitoring, it must be enabled on **all** GitLab servers.
CAUTION: **Warning:**
After changing `unicorn['listen']` in `gitlab.rb`, and running `sudo gitlab-ctl reconfigure`,
- it can take an extended period of time for unicorn to complete reloading after receiving a `HUP`.
+ it can take an extended period of time for Unicorn to complete reloading after receiving a `HUP`.
For more information, see the [issue](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/4401).
## Troubleshooting
diff --git a/doc/administration/high_availability/load_balancer.md b/doc/administration/high_availability/load_balancer.md
index f11d27487d1..43a7c442d8c 100644
--- a/doc/administration/high_availability/load_balancer.md
+++ b/doc/administration/high_availability/load_balancer.md
@@ -27,10 +27,10 @@ options:
Configure your load balancer(s) to pass connections on port 443 as 'TCP' rather
than 'HTTP(S)' protocol. This will pass the connection to the application nodes
-Nginx service untouched. Nginx will have the SSL certificate and listen on port 443.
+NGINX service untouched. NGINX will have the SSL certificate and listen on port 443.
-See [Nginx HTTPS documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https)
-for details on managing SSL certificates and configuring Nginx.
+See [NGINX HTTPS documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https)
+for details on managing SSL certificates and configuring NGINX.
### Load Balancer(s) terminate SSL without backend SSL
@@ -40,7 +40,7 @@ terminating SSL.
Since communication between the load balancer(s) and GitLab will not be secure,
there is some additional configuration needed. See
-[Nginx Proxied SSL documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#supporting-proxied-ssl)
+[NGINX Proxied SSL documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#supporting-proxied-ssl)
for details.
### Load Balancer(s) terminate SSL with backend SSL
@@ -49,12 +49,12 @@ Configure your load balancer(s) to use the 'HTTP(S)' protocol rather than 'TCP'.
The load balancer(s) will be responsible for managing SSL certificates that
end users will see.
-Traffic will also be secure between the load balancer(s) and Nginx in this
+Traffic will also be secure between the load balancer(s) and NGINX in this
scenario. There is no need to add configuration for proxied SSL since the
connection will be secure all the way. However, configuration will need to be
added to GitLab to configure SSL certificates. See
-[Nginx HTTPS documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https)
-for details on managing SSL certificates and configuring Nginx.
+[NGINX HTTPS documentation](https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https)
+for details on managing SSL certificates and configuring NGINX.
## Ports
diff --git a/doc/administration/high_availability/monitoring_node.md b/doc/administration/high_availability/monitoring_node.md
index 0b04e48f74a..d293fc350fa 100644
--- a/doc/administration/high_availability/monitoring_node.md
+++ b/doc/administration/high_availability/monitoring_node.md
@@ -34,6 +34,9 @@ Omnibus:
prometheus['listen_address'] = '0.0.0.0:9090'
prometheus['monitor_kubernetes'] = false
+ # Enable Login form
+ grafana['disable_login_form'] = false
+
# Enable Grafana
grafana['enable'] = true
grafana['admin_password'] = 'toomanysecrets'
@@ -63,6 +66,7 @@ Omnibus:
sidekiq['enable'] = false
unicorn['enable'] = false
node_exporter['enable'] = false
+ gitlab_exporter['enable'] = false
```
1. Run `sudo gitlab-ctl reconfigure` to compile the configuration.
diff --git a/doc/administration/high_availability/nfs.md b/doc/administration/high_availability/nfs.md
index 987db3c89a5..f7c5593e211 100644
--- a/doc/administration/high_availability/nfs.md
+++ b/doc/administration/high_availability/nfs.md
@@ -103,13 +103,12 @@ If you do choose to use EFS, avoid storing GitLab log files (e.g. those in `/var
there because this will also affect performance. We recommend that the log files be
stored on a local volume.
-For more details on another person's experience with EFS, see
-[Amazon's Elastic File System: Burst Credits](https://rawkode.com/2017/04/16/amazons-elastic-file-system-burst-credits/)
+For more details on another person's experience with EFS, see this [Commit Brooklyn 2019 video](https://youtu.be/K6OS8WodRBQ?t=313).
## Avoid using CephFS and GlusterFS
GitLab strongly recommends against using CephFS and GlusterFS.
-These distributed file systems are not well-suited for GitLab's input/output access patterns because git uses many small files and access times and file locking times to propagate will make git activity very slow.
+These distributed file systems are not well-suited for GitLab's input/output access patterns because Git uses many small files and access times and file locking times to propagate will make Git activity very slow.
## Avoid using PostgreSQL with NFS
@@ -118,7 +117,7 @@ across NFS. The GitLab support team will not be able to assist on performance is
this configuration.
Additionally, this configuration is specifically warned against in the
-[Postgres Documentation](https://www.postgresql.org/docs/current/static/creating-cluster.html#CREATING-CLUSTER-NFS):
+[Postgres Documentation](https://www.postgresql.org/docs/current/creating-cluster.html#CREATING-CLUSTER-NFS):
>PostgreSQL does nothing special for NFS file systems, meaning it assumes NFS behaves exactly like
>locally-connected drives. If the client or server NFS implementation does not provide standard file
@@ -147,7 +146,7 @@ Note there are several options that you should consider using:
## A single NFS mount
-It's recommended to nest all gitlab data dirs within a mount, that allows automatic
+It's recommended to nest all GitLab data dirs within a mount, that allows automatic
restore of backups without manually moving existing data.
```
diff --git a/doc/administration/high_availability/nfs_host_client_setup.md b/doc/administration/high_availability/nfs_host_client_setup.md
index 9b0e085fe25..5b6b28bf633 100644
--- a/doc/administration/high_availability/nfs_host_client_setup.md
+++ b/doc/administration/high_availability/nfs_host_client_setup.md
@@ -11,7 +11,7 @@ setup act as clients while the NFS server plays host.
> Note: The instructions provided in this documentation allow for setting a quick
proof of concept but will leave NFS as potential single point of failure and
therefore not recommended for use in production. Explore options such as [Pacemaker
-and Corosync](http://clusterlabs.org/) for highly available NFS in production.
+and Corosync](https://clusterlabs.org) for highly available NFS in production.
Below are instructions for setting up an application node(client) in an HA cluster
to read from and write to a central NFS server(host).
@@ -56,7 +56,7 @@ You may need to update your server's firewall. See the [firewall section](#nfs-i
## Client/ GitLab application node Setup
-> Follow the instructions below to connect any GitLab rails application node running
+> Follow the instructions below to connect any GitLab Rails application node running
inside your HA environment to the NFS server configured above.
### Step 1 - Install NFS Common on Client
@@ -108,7 +108,7 @@ When using the default Omnibus configuration you will need to share 5 data locat
between all GitLab cluster nodes. No other locations should be shared. Changing the
default file locations in `gitlab.rb` on the client allows you to have one main mount
point and have all the required locations as subdirectories to use the NFS mount for
-git-data.
+`git-data`.
```text
git_data_dirs({"default" => {"path" => "/nfs/home/var/opt/gitlab-data/git-data"}})
diff --git a/doc/administration/high_availability/pgbouncer.md b/doc/administration/high_availability/pgbouncer.md
index b99724d12a2..e7479ad1ecb 100644
--- a/doc/administration/high_availability/pgbouncer.md
+++ b/doc/administration/high_availability/pgbouncer.md
@@ -2,29 +2,29 @@
type: reference
---
-# Working with the bundle Pgbouncer service
+# Working with the bundle PgBouncer service
-As part of its High Availability stack, GitLab Premium includes a bundled version of [Pgbouncer](https://pgbouncer.github.io/) that can be managed through `/etc/gitlab/gitlab.rb`.
+As part of its High Availability stack, GitLab Premium includes a bundled version of [PgBouncer](https://pgbouncer.github.io/) that can be managed through `/etc/gitlab/gitlab.rb`.
-In a High Availability setup, Pgbouncer is used to seamlessly migrate database connections between servers in a failover scenario.
+In a High Availability setup, PgBouncer is used to seamlessly migrate database connections between servers in a failover scenario.
Additionally, it can be used in a non-HA setup to pool connections, speeding up response time while reducing resource usage.
-It is recommended to run pgbouncer alongside the `gitlab-rails` service, or on its own dedicated node in a cluster.
+It is recommended to run PgBouncer alongside the `gitlab-rails` service, or on its own dedicated node in a cluster.
## Operations
-### Running Pgbouncer as part of an HA GitLab installation
+### Running PgBouncer as part of an HA GitLab installation
1. Make sure you collect [`CONSUL_SERVER_NODES`](database.md#consul-information), [`CONSUL_PASSWORD_HASH`](database.md#consul-information), and [`PGBOUNCER_PASSWORD_HASH`](database.md#pgbouncer-information) before executing the next step.
1. Edit `/etc/gitlab/gitlab.rb` replacing values noted in the `# START user configuration` section:
```ruby
- # Disable all components except Pgbouncer and Consul agent
+ # Disable all components except PgBouncer and Consul agent
roles ['pgbouncer_role']
- # Configure Pgbouncer
+ # Configure PgBouncer
pgbouncer['admin_users'] = %w(pgbouncer gitlab-consul)
# Configure Consul agent
@@ -59,13 +59,13 @@ It is recommended to run pgbouncer alongside the `gitlab-rails` service, or on i
1. Run `gitlab-ctl reconfigure`
1. Create a `.pgpass` file so Consul is able to
- reload pgbouncer. Enter the `PGBOUNCER_PASSWORD` twice when asked:
+ reload PgBouncer. Enter the `PGBOUNCER_PASSWORD` twice when asked:
```sh
gitlab-ctl write-pgpass --host 127.0.0.1 --database pgbouncer --user pgbouncer --hostuser gitlab-consul
```
-#### PGBouncer Checkpoint
+#### PgBouncer Checkpoint
1. Ensure the node is talking to the current master:
@@ -100,7 +100,7 @@ It is recommended to run pgbouncer alongside the `gitlab-rails` service, or on i
(2 rows)
```
-### Running Pgbouncer as part of a non-HA GitLab installation
+### Running PgBouncer as part of a non-HA GitLab installation
1. Generate PGBOUNCER_USER_PASSWORD_HASH with the command `gitlab-ctl pg-password-md5 pgbouncer`
@@ -119,7 +119,7 @@ It is recommended to run pgbouncer alongside the `gitlab-rails` service, or on i
**Note:** If the database was already running, it will need to be restarted after reconfigure by running `gitlab-ctl restart postgresql`.
-1. On the node you are running pgbouncer on, make sure the following is set in `/etc/gitlab/gitlab.rb`
+1. On the node you are running PgBouncer on, make sure the following is set in `/etc/gitlab/gitlab.rb`
```ruby
pgbouncer['enable'] = true
@@ -134,7 +134,7 @@ It is recommended to run pgbouncer alongside the `gitlab-rails` service, or on i
1. Run `gitlab-ctl reconfigure`
-1. On the node running unicorn, make sure the following is set in `/etc/gitlab/gitlab.rb`
+1. On the node running Unicorn, make sure the following is set in `/etc/gitlab/gitlab.rb`
```ruby
gitlab_rails['db_host'] = 'PGBOUNCER_HOST'
@@ -144,13 +144,13 @@ It is recommended to run pgbouncer alongside the `gitlab-rails` service, or on i
1. Run `gitlab-ctl reconfigure`
-1. At this point, your instance should connect to the database through pgbouncer. If you are having issues, see the [Troubleshooting](#troubleshooting) section
+1. At this point, your instance should connect to the database through PgBouncer. If you are having issues, see the [Troubleshooting](#troubleshooting) section
## Enable Monitoring
> [Introduced](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3786) in GitLab 12.0.
-If you enable Monitoring, it must be enabled on **all** pgbouncer servers.
+If you enable Monitoring, it must be enabled on **all** PgBouncer servers.
1. Create/edit `/etc/gitlab/gitlab.rb` and add the following configuration:
@@ -173,11 +173,11 @@ If you enable Monitoring, it must be enabled on **all** pgbouncer servers.
1. Run `sudo gitlab-ctl reconfigure` to compile the configuration.
-### Interacting with pgbouncer
+### Interacting with PgBouncer
#### Administrative console
-As part of omnibus-gitlab, we provide a command `gitlab-ctl pgb-console` to automatically connect to the pgbouncer administrative console. Please see the [pgbouncer documentation](https://pgbouncer.github.io/usage.html#admin-console) for detailed instructions on how to interact with the console.
+As part of Omnibus GitLab, we provide a command `gitlab-ctl pgb-console` to automatically connect to the PgBouncer administrative console. Please see the [PgBouncer documentation](https://pgbouncer.github.io/usage.html#admin-console) for detailed instructions on how to interact with the console.
To start a session, run
@@ -235,7 +235,7 @@ ote_pid | tls
## Troubleshooting
-In case you are experiencing any issues connecting through pgbouncer, the first place to check is always the logs:
+In case you are experiencing any issues connecting through PgBouncer, the first place to check is always the logs:
```shell
# gitlab-ctl tail pgbouncer
diff --git a/doc/administration/high_availability/redis.md b/doc/administration/high_availability/redis.md
index aa616ec91d8..ba4599e5bcd 100644
--- a/doc/administration/high_availability/redis.md
+++ b/doc/administration/high_availability/redis.md
@@ -68,7 +68,7 @@ Omnibus:
gitaly['enable'] = false
redis['bind'] = '0.0.0.0'
- redis['port'] = '6379'
+ redis['port'] = 6379
redis['password'] = 'SECRET_PASSWORD_HERE'
gitlab_rails['auto_migrate'] = false
@@ -313,12 +313,12 @@ Pick the one that suits your needs.
- [Installations from source][source]: You need to install Redis and Sentinel
yourself. Use the [Redis HA installation from source](redis_source.md)
documentation.
-- [Omnibus GitLab **Community Edition** (CE) package][ce]: Redis is bundled, so you
+- [Omnibus GitLab **Community Edition** (CE) package](https://about.gitlab.com/install/?version=ce): Redis is bundled, so you
can use the package with only the Redis service enabled as described in steps
1 and 2 of this document (works for both master and slave setups). To install
and configure Sentinel, jump directly to the Sentinel section in the
[Redis HA installation from source](redis_source.md#step-3-configuring-the-redis-sentinel-instances) documentation.
-- [Omnibus GitLab **Enterprise Edition** (EE) package][ee]: Both Redis and Sentinel
+- [Omnibus GitLab **Enterprise Edition** (EE) package](https://about.gitlab.com/install/?version=ee): Both Redis and Sentinel
are bundled in the package, so you can use the EE package to set up the whole
Redis HA infrastructure (master, slave and Sentinel) which is described in
this document.
@@ -397,7 +397,7 @@ The prerequisites for a HA Redis setup are the following:
1. [Reconfigure Omnibus GitLab][reconfigure] for the changes to take effect.
-> Note: You can specify multiple roles like sentinel and redis as:
+> Note: You can specify multiple roles like sentinel and Redis as:
> `roles ['redis_sentinel_role', 'redis_master_role']`. Read more about high
> availability roles at <https://docs.gitlab.com/omnibus/roles/>.
@@ -446,7 +446,7 @@ The prerequisites for a HA Redis setup are the following:
1. [Reconfigure Omnibus GitLab][reconfigure] for the changes to take effect.
1. Go through the steps again for all the other slave nodes.
-> Note: You can specify multiple roles like sentinel and redis as:
+> Note: You can specify multiple roles like sentinel and Redis as:
> `roles ['redis_sentinel_role', 'redis_slave_role']`. Read more about high
> availability roles at <https://docs.gitlab.com/omnibus/roles/>.
@@ -628,7 +628,7 @@ single-machine install, to rotate the **Master** to one of the new nodes.
Make the required changes in configuration and restart the new nodes again.
-To disable redis in the single install, edit `/etc/gitlab/gitlab.rb`:
+To disable Redis in the single install, edit `/etc/gitlab/gitlab.rb`:
```ruby
redis['enable'] = false
@@ -902,7 +902,7 @@ You can check if everything is correct by connecting to each server using
/opt/gitlab/embedded/bin/redis-cli -h <redis-host-or-ip> -a '<redis-password>' info replication
```
-When connected to a `master` redis, you will see the number of connected
+When connected to a `master` Redis, you will see the number of connected
`slaves`, and a list of each with connection details:
```
@@ -948,7 +948,7 @@ to [this issue][gh-531].
You must make sure you are defining the same value in `redis['master_name']`
and `redis['master_pasword']` as you defined for your sentinel node.
-The way the redis connector `redis-rb` works with sentinel is a bit
+The way the Redis connector `redis-rb` works with sentinel is a bit
non-intuitive. We try to hide the complexity in omnibus, but it still requires
a few extra configs.
@@ -1025,6 +1025,4 @@ Read more on High Availability:
[sentinel]: https://redis.io/topics/sentinel
[omnifile]: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/libraries/gitlab_rails.rb
[source]: ../../install/installation.md
-[ce]: https://about.gitlab.com/downloads
-[ee]: https://about.gitlab.com/downloads-ee
[it]: https://gitlab.com/gitlab-org/gitlab-foss/uploads/c4cc8cd353604bd80315f9384035ff9e/The_Internet_IT_Crowd.png
diff --git a/doc/administration/high_availability/redis_source.md b/doc/administration/high_availability/redis_source.md
index 0758b240a25..9ab9d9a206d 100644
--- a/doc/administration/high_availability/redis_source.md
+++ b/doc/administration/high_availability/redis_source.md
@@ -341,7 +341,7 @@ to [this upstream issue][gh-531].
You must make sure that `resque.yml` and `sentinel.conf` are configured correctly,
otherwise `redis-rb` will not work properly.
-The `master-group-name` ('gitlab-redis') defined in (`sentinel.conf`)
+The `master-group-name` (`gitlab-redis`) defined in (`sentinel.conf`)
**must** be used as the hostname in GitLab (`resque.yml`):
```conf
@@ -374,4 +374,4 @@ When in doubt, please read [Redis Sentinel documentation](https://redis.io/topic
[downloads]: https://about.gitlab.com/downloads
[restart]: ../restart_gitlab.md#installations-from-source
[it]: https://gitlab.com/gitlab-org/gitlab-foss/uploads/c4cc8cd353604bd80315f9384035ff9e/The_Internet_IT_Crowd.png
-[resque]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/resque.yml.example
+[resque]: https://gitlab.com/gitlab-org/gitlab/blob/master/config/resque.yml.example
diff --git a/doc/administration/housekeeping.md b/doc/administration/housekeeping.md
index 43c9679be65..9083619841e 100644
--- a/doc/administration/housekeeping.md
+++ b/doc/administration/housekeeping.md
@@ -1,6 +1,6 @@
# Housekeeping
-> [Introduced][ce-2371] in GitLab 8.4.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/3041) in GitLab 8.4.
## Automatic housekeeping
@@ -23,16 +23,12 @@ For example in the following scenario a `git repack -d` will be executed:
When the `pushes_since_gc` value is 50 a `repack -A -d --pack-kept-objects` will run, similarly when
the `pushes_since_gc` value is 200 a `git gc` will be run.
-- `git gc` ([man page][man-gc]) runs a number of housekeeping tasks,
+- `git gc` ([man page](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-gc.html)) runs a number of housekeeping tasks,
such as compressing filerevisions (to reduce disk space and increase performance)
and removing unreachable objects which may have been created from prior invocations of
`git add`.
-- `git repack` ([man page][man-repack]) re-organize existing packs into a single, more efficient pack.
+- `git repack` ([man page](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-repack.html)) re-organize existing packs into a single, more efficient pack.
You can find this option under your project's **Settings > General > Advanced**.
![Housekeeping settings](img/housekeeping_settings.png)
-
-[ce-2371]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/2371 "Housekeeping merge request"
-[man-gc]: https://www.kernel.org/pub/software/scm/git/docs/git-gc.html "git gc man page"
-[man-repack]: https://www.kernel.org/pub/software/scm/git/docs/git-repack.html
diff --git a/doc/administration/img/integration/plantuml-example.png b/doc/administration/img/integration/plantuml-example.png
deleted file mode 100644
index 3e0d6389cbd..00000000000
--- a/doc/administration/img/integration/plantuml-example.png
+++ /dev/null
Binary files differ
diff --git a/doc/administration/incoming_email.md b/doc/administration/incoming_email.md
index 45634d50b91..88cf702cf0e 100644
--- a/doc/administration/incoming_email.md
+++ b/doc/administration/incoming_email.md
@@ -58,7 +58,7 @@ this method only supports replies, and not the other features of [incoming email
## Set it up
If you want to use Gmail / Google Apps for incoming emails, make sure you have
-[IMAP access enabled](https://support.google.com/mail/troubleshooter/1668960?hl=en#ts=1665018)
+[IMAP access enabled](https://support.google.com/mail/answer/7126229)
and [allowed less secure apps to access the account](https://support.google.com/accounts/answer/6010255)
or [turn-on 2-step validation](https://support.google.com/accounts/answer/185839)
and use [an application password](https://support.google.com/mail/answer/185833).
diff --git a/doc/administration/index.md b/doc/administration/index.md
index 6d40039026d..f90b9b2c7d5 100644
--- a/doc/administration/index.md
+++ b/doc/administration/index.md
@@ -97,7 +97,7 @@ Learn how to install, configure, update, and maintain your GitLab instance.
### GitLab platform integrations
-- [Mattermost](https://docs.gitlab.com/omnibus/gitlab-mattermost/): Integrate with [Mattermost](https://about.mattermost.com/), an open source, private cloud workplace for web messaging.
+- [Mattermost](https://docs.gitlab.com/omnibus/gitlab-mattermost/): Integrate with [Mattermost](https://mattermost.com), an open source, private cloud workplace for web messaging.
- [PlantUML](integration/plantuml.md): Create simple diagrams in AsciiDoc and Markdown documents
created in snippets, wikis, and repos.
- [Web terminals](integration/terminal.md): Provide terminal access to your applications deployed to Kubernetes from within GitLab's CI/CD [environments](../ci/environments.md#web-terminals).
@@ -154,7 +154,7 @@ Learn how to install, configure, update, and maintain your GitLab instance.
- [Enable/disable GitLab CI/CD](../ci/enable_or_disable_ci.md#site-wide-admin-setting): Enable or disable GitLab CI/CD for your instance.
- [GitLab CI/CD admin settings](../user/admin_area/settings/continuous_integration.md): Enable or disable Auto DevOps site-wide and define the artifacts' max size and expiration time.
- [Job artifacts](job_artifacts.md): Enable, disable, and configure job artifacts (a set of files and directories which are outputted by a job when it completes successfully).
-- [Job traces](job_traces.md): Information about the job traces (logs).
+- [Job logs](job_logs.md): Information about the job logs.
- [Register Shared and specific Runners](../ci/runners/README.md#registering-a-shared-runner): Learn how to register and configure Shared and specific Runners to your own instance.
- [Shared Runners pipelines quota](../user/admin_area/settings/continuous_integration.md#shared-runners-pipeline-minutes-quota-starter-only): Limit the usage of pipeline minutes for Shared Runners. **(STARTER ONLY)**
- [Enable/disable Auto DevOps](../topics/autodevops/index.md#enablingdisabling-auto-devops): Enable or disable Auto DevOps for your instance.
@@ -193,7 +193,7 @@ Learn how to install, configure, update, and maintain your GitLab instance.
- [Debugging tips](troubleshooting/debug.md): Tips to debug problems when things go wrong
- [Log system](logs.md): Where to look for logs.
- [Sidekiq Troubleshooting](troubleshooting/sidekiq.md): Debug when Sidekiq appears hung and is not processing jobs.
-- [Troubleshooting ElasticSearch](troubleshooting/elasticsearch.md)
+- [Troubleshooting Elasticsearch](troubleshooting/elasticsearch.md)
### Support Team Docs
@@ -212,8 +212,9 @@ who are aware of the risks.
- [Useful diagnostics tools](troubleshooting/diagnostics_tools.md)
- [Useful Linux commands](troubleshooting/linux_cheat_sheet.md)
- [Troubleshooting Kubernetes](troubleshooting/kubernetes_cheat_sheet.md)
+- [Troubleshooting PostgreSQL](troubleshooting/postgresql.md)
- [Guide to test environments](troubleshooting/test_environments.md) (for Support Engineers)
-- [GitLab rails console commands](troubleshooting/gitlab_rails_cheat_sheet.md) (for Support Engineers)
+- [GitLab Rails console commands](troubleshooting/gitlab_rails_cheat_sheet.md) (for Support Engineers)
- Useful links:
- [GitLab Developer Docs](../development/README.md)
- [Repairing and recovering broken Git repositories](https://git.seveas.net/repairing-and-recovering-broken-git-repositories.html)
diff --git a/doc/administration/integration/plantuml.md b/doc/administration/integration/plantuml.md
index 67e1729e7fd..e595c640aac 100644
--- a/doc/administration/integration/plantuml.md
+++ b/doc/administration/integration/plantuml.md
@@ -21,6 +21,28 @@ docker run -d --name plantuml -p 8080:8080 plantuml/plantuml-server:tomcat
The **PlantUML URL** will be the hostname of the server running the container.
+When running GitLab in Docker, it will need to have access to the PlantUML container.
+The easiest way to achieve that is by using [Docker Compose](https://docs.docker.com/compose/).
+
+A simple `docker-compose.yml` file would be:
+
+```yaml
+version: "3"
+services:
+ gitlab:
+ image: 'gitlab/gitlab-ce:12.2.5-ce.0'
+ environment:
+ GITLAB_OMNIBUS_CONFIG: |
+ nginx['custom_gitlab_server_config'] = "location /-/plantuml/ { \n proxy_cache off; \n proxy_pass http://plantuml:8080/; \n}\n"
+
+ plantuml:
+ image: 'plantuml/plantuml-server:tomcat'
+ container_name: plantuml
+```
+
+In this scenario, PlantUML will be accessible for GitLab at the URL
+`http://plantuml:8080/`.
+
### Debian/Ubuntu
Installing and configuring your
@@ -54,6 +76,10 @@ http://localhost:8080/plantuml
you can change these defaults by editing the `/etc/tomcat7/server.xml` file.
+Note that the default URL is different than when using the Docker-based image,
+where the service is available at the root of URL with no relative path. Adjust
+the configuration below accordingly.
+
### Making local PlantUML accessible using custom GitLab setup
The PlantUML server runs locally on your server, so it is not accessible
@@ -61,12 +87,22 @@ externally. As such, it is necessary to catch external PlantUML calls and
redirect them to the local server.
The idea is to redirect each call to `https://gitlab.example.com/-/plantuml/`
-to the local PlantUML server `http://localhost:8080/plantuml`.
+to the local PlantUML server `http://plantuml:8080/` or `http://localhost:8080/plantuml/`, depending on your setup.
To enable the redirection, add the following line in `/etc/gitlab/gitlab.rb`:
```ruby
-nginx['custom_gitlab_server_config'] = "location /-/plantuml { \n proxy_cache off; \n proxy_pass http://127.0.0.1:8080; \n}\n"
+# Docker deployment
+nginx['custom_gitlab_server_config'] = "location /-/plantuml/ { \n proxy_cache off; \n proxy_pass http://plantuml:8080/; \n}\n"
+
+# Built from source
+nginx['custom_gitlab_server_config'] = "location /-/plantuml/ { \n proxy_cache off; \n proxy_pass http://127.0.0.1:8080/plantuml/; \n}\n"
+```
+
+To activate the changes, run the following command:
+
+```sh
+sudo gitlab-ctl reconfigure
```
## GitLab
@@ -89,7 +125,7 @@ our AsciiDoc snippets, wikis and repos using delimited blocks:
~~~markdown
```plantuml
Bob -> Alice : hello
- Alice -> Bob : Go Away
+ Alice -> Bob : hi
```
~~~
@@ -99,7 +135,7 @@ our AsciiDoc snippets, wikis and repos using delimited blocks:
[plantuml, format="png", id="myDiagram", width="200px"]
----
Bob->Alice : hello
- Alice -> Bob : Go Away
+ Alice -> Bob : hi
----
```
@@ -110,7 +146,7 @@ our AsciiDoc snippets, wikis and repos using delimited blocks:
:caption: Caption with **bold** and *italic*
Bob -> Alice: hello
- Alice -> Bob: Go Away
+ Alice -> Bob: hi
```
You can also use the `uml::` directive for compatibility with [sphinxcontrib-plantuml](https://pypi.org/project/sphinxcontrib-plantuml/), but please note that we currently only support the `caption` option.
@@ -119,7 +155,10 @@ The above blocks will be converted to an HTML img tag with source pointing to th
PlantUML instance. If the PlantUML server is correctly configured, this should
render a nice diagram instead of the block:
-![PlantUML Integration](../img/integration/plantuml-example.png)
+```plantuml
+Bob -> Alice : hello
+Alice -> Bob : hi
+```
Inside the block you can add any of the supported diagrams by PlantUML such as
[Sequence](http://plantuml.com/sequence-diagram), [Use Case](http://plantuml.com/use-case-diagram),
diff --git a/doc/administration/integration/terminal.md b/doc/administration/integration/terminal.md
index dbc61c82061..1af15648b97 100644
--- a/doc/administration/integration/terminal.md
+++ b/doc/administration/integration/terminal.md
@@ -60,8 +60,8 @@ guides document the necessary steps for a selection of popular reverse proxies:
- [Apache](https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html)
- [NGINX](https://www.nginx.com/blog/websocket-nginx/)
-- [HAProxy](http://blog.haproxy.com/2012/11/07/websockets-load-balancing-with-haproxy/)
-- [Varnish](https://www.varnish-cache.org/docs/4.1/users-guide/vcl-example-websockets.html)
+- [HAProxy](https://www.haproxy.com/blog/websockets-load-balancing-with-haproxy/)
+- [Varnish](https://varnish-cache.org/docs/4.1/users-guide/vcl-example-websockets.html)
Workhorse won't let WebSocket requests through to non-WebSocket endpoints, so
it's safe to enable support for these headers globally. If you'd rather had a
diff --git a/doc/administration/issue_closing_pattern.md b/doc/administration/issue_closing_pattern.md
index 0e34505c2b0..7b815143597 100644
--- a/doc/administration/issue_closing_pattern.md
+++ b/doc/administration/issue_closing_pattern.md
@@ -13,11 +13,11 @@ in the project's default branch.
In order to change the pattern you need to have access to the server that GitLab
is installed on.
-The default pattern can be located in [`gitlab.yml.example`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/gitlab.yml.example)
+The default pattern can be located in [`gitlab.yml.example`](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
under the "Automatic issue closing" section.
> **Tip:**
-You are advised to use <http://rubular.com> to test the issue closing pattern.
+You are advised to use <https://rubular.com> to test the issue closing pattern.
Because Rubular doesn't understand `%{issue_ref}`, you can replace this by
`#\d+` when testing your patterns, which matches only local issue references like `#123`.
diff --git a/doc/administration/job_artifacts.md b/doc/administration/job_artifacts.md
index 913321012e4..ec2f40700f5 100644
--- a/doc/administration/job_artifacts.md
+++ b/doc/administration/job_artifacts.md
@@ -90,9 +90,9 @@ This configuration relies on valid AWS credentials to be configured already.
Use an object storage option like AWS S3 to store job artifacts.
DANGER: **Danger:**
-If you're enabling S3 in [GitLab HA](high_availability/README.md), you will need to have an [NFS mount set up for CI traces and artifacts](high_availability/nfs.md#a-single-nfs-mount) or enable [live tracing](job_traces.md#new-live-trace-architecture). If these settings are not set, you will risk job traces disappearing or not being saved.
+If you're enabling S3 in [GitLab HA](high_availability/README.md), you will need to have an [NFS mount set up for CI logs and artifacts](high_availability/nfs.md#a-single-nfs-mount) or enable [incremental logging](job_logs.md#new-incremental-logging-architecture). If these settings are not set, you will risk job logs disappearing or not being saved.
-### Object Storage Settings
+#### Object Storage Settings
For source installations the following settings are nested under `artifacts:` and then `object_store:`. On Omnibus GitLab installs they are prefixed by `artifacts_object_store_`.
@@ -105,7 +105,7 @@ For source installations the following settings are nested under `artifacts:` an
| `proxy_download` | Set to true to enable proxying all files served. Option allows to reduce egress traffic as this allows clients to download directly from remote storage instead of proxying all data | `false` |
| `connection` | Various connection options described below | |
-#### S3 compatible connection settings
+##### S3 compatible connection settings
The connection settings match those provided by [Fog](https://github.com/fog), and are as follows:
@@ -118,7 +118,7 @@ The connection settings match those provided by [Fog](https://github.com/fog), a
| `enable_signature_v4_streaming` | Set to true to enable HTTP chunked transfers with [AWS v4 signatures](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html). Oracle Cloud S3 needs this to be false | true |
| `region` | AWS region | us-east-1 |
| `host` | S3 compatible host for when not using AWS, e.g. `localhost` or `storage.example.com` | s3.amazonaws.com |
-| `endpoint` | Can be used when configuring an S3 compatible service such as [Minio](https://www.minio.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
+| `endpoint` | Can be used when configuring an S3 compatible service such as [MinIO](https://min.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
| `path_style` | Set to true to use `host/bucket_name/object` style paths instead of `bucket_name.host/object`. Leave as false for AWS S3 | false |
| `use_iam_profile` | Set to true to use IAM profile instead of access keys | false
@@ -188,6 +188,14 @@ _The artifacts are stored by default in
sudo -u git -H bundle exec rake gitlab:artifacts:migrate RAILS_ENV=production
```
+### Migrating from object storage to local storage
+
+In order to migrate back to local storage:
+
+1. Set both `direct_upload` and `background_upload` to false under the artifacts object storage settings. Don't forget to restart GitLab.
+1. Run `rake gitlab:artifacts:migrate_to_local` on your console.
+1. Disable `object_storage` for artifacts in `gitlab.rb`. Remember to restart GitLab afterwards.
+
## Expiring artifacts
If an expiry date is used for the artifacts, they are marked for deletion
diff --git a/doc/administration/job_logs.md b/doc/administration/job_logs.md
new file mode 100644
index 00000000000..d6d56515ac6
--- /dev/null
+++ b/doc/administration/job_logs.md
@@ -0,0 +1,169 @@
+# Job logs
+
+> [Renamed from Job Traces to Job logs](https://gitlab.com/gitlab-org/gitlab/issues/29121) in 12.4.
+
+Job logs (traces) are sent by GitLab Runner while it's processing a job. You can see
+logs in job pages, pipelines, email notifications, etc.
+
+## Data flow
+
+In general, there are two states for job logs: `log` and `archived log`.
+In the following table you can see the phases a log goes through:
+
+| Phase | State | Condition | Data flow | Stored path |
+| -------------- | ------------ | ----------------------- | -----------------------------------------| ----------- |
+| 1: patching | log | When a job is running | GitLab Runner => Unicorn => file storage | `#{ROOT_PATH}/gitlab-ci/builds/#{YYYY_mm}/#{project_id}/#{job_id}.log` |
+| 2: overwriting | log | When a job is finished | GitLab Runner => Unicorn => file storage | `#{ROOT_PATH}/gitlab-ci/builds/#{YYYY_mm}/#{project_id}/#{job_id}.log` |
+| 3: archiving | archived log | After a job is finished | Sidekiq moves log to artifacts folder | `#{ROOT_PATH}/gitlab-rails/shared/artifacts/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log` |
+| 4: uploading | archived log | After a log is archived | Sidekiq moves archived log to [object storage](#uploading-logs-to-object-storage) (if configured) | `#{bucket_name}/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log` |
+
+The `ROOT_PATH` varies per environment. For Omnibus GitLab it
+would be `/var/opt/gitlab`, and for installations from source
+it would be `/home/git/gitlab`.
+
+## Changing the job logs local location
+
+To change the location where the job logs will be stored, follow the steps below.
+
+**In Omnibus installations:**
+
+1. Edit `/etc/gitlab/gitlab.rb` and add or amend the following line:
+
+ ```ruby
+ gitlab_ci['builds_directory'] = '/mnt/to/gitlab-ci/builds'
+ ```
+
+1. Save the file and [reconfigure GitLab][] for the changes to take effect.
+
+---
+
+**In installations from source:**
+
+1. Edit `/home/git/gitlab/config/gitlab.yml` and add or amend the following lines:
+
+ ```yaml
+ gitlab_ci:
+ # The location where build logs are stored (default: builds/).
+ # Relative paths are relative to Rails.root.
+ builds_path: path/to/builds/
+ ```
+
+1. Save the file and [restart GitLab][] for the changes to take effect.
+
+[reconfigure gitlab]: restart_gitlab.md#omnibus-gitlab-reconfigure "How to reconfigure Omnibus GitLab"
+[restart gitlab]: restart_gitlab.md#installations-from-source "How to restart GitLab"
+
+## Uploading logs to object storage
+
+Archived logs are considered as [job artifacts](job_artifacts.md).
+Therefore, when you [set up the object storage integration](job_artifacts.md#object-storage-settings),
+job logs are automatically migrated to it along with the other job artifacts.
+
+See "Phase 4: uploading" in [Data flow](#data-flow) to learn about the process.
+
+## How to remove job logs
+
+There isn't a way to automatically expire old job logs, but it's safe to remove
+them if they're taking up too much space. If you remove the logs manually, the
+job output in the UI will be empty.
+
+## New incremental logging architecture
+
+> [Introduced][ce-18169] in GitLab 10.4.
+> [Announced as General availability][ce-46097] in GitLab 11.0.
+
+NOTE: **Note:**
+This feature is off by default. See below for how to [enable or disable](#enabling-incremental-logging) it.
+
+By combining the process with object storage settings, we can completely bypass
+the local file storage. This is a useful option if GitLab is installed as
+cloud-native, for example on Kubernetes.
+
+The data flow is the same as described in the [data flow section](#data-flow)
+with one change: _the stored path of the first two phases is different_. This incremental
+log architecture stores chunks of logs in Redis and a persistent store (object storage or database) instead of
+file storage. Redis is used as first-class storage, and it stores up-to 128KB
+of data. Once the full chunk is sent, it is flushed to a persistent store, either object storage(temporary directory) or database.
+After a while, the data in Redis and a persitent store will be archived to [object storage](#uploading-logs-to-object-storage).
+
+The data are stored in the following Redis namespace: `Gitlab::Redis::SharedState`.
+
+Here is the detailed data flow:
+
+1. GitLab Runner picks a job from GitLab
+1. GitLab Runner sends a piece of log to GitLab
+1. GitLab appends the data to Redis
+1. Once the data in Redis reach 128KB, the data is flushed to a persistent store (object storage or the database).
+1. The above steps are repeated until the job is finished.
+1. Once the job is finished, GitLab schedules a Sidekiq worker to archive the log.
+1. The Sidekiq worker archives the log to object storage and cleans up the log
+ in Redis and a persistent store (object storage or the database).
+
+### Enabling incremental logging
+
+The following commands are to be issued in a Rails console:
+
+```sh
+# Omnibus GitLab
+gitlab-rails console
+
+# Installation from source
+cd /home/git/gitlab
+sudo -u git -H bin/rails console RAILS_ENV=production
+```
+
+**To check if incremental logging (trace) is enabled:**
+
+```ruby
+Feature.enabled?('ci_enable_live_trace')
+```
+
+**To enable incremental logging (trace):**
+
+```ruby
+Feature.enable('ci_enable_live_trace')
+```
+
+NOTE: **Note:**
+The transition period will be handled gracefully. Upcoming logs will be
+generated with the incremental architecture, and on-going logs will stay with the
+legacy architecture, which means that on-going logs won't be forcibly
+re-generated with the incremental architecture.
+
+**To disable incremental logging (trace):**
+
+```ruby
+Feature.disable('ci_enable_live_trace')
+```
+
+NOTE: **Note:**
+The transition period will be handled gracefully. Upcoming logs will be generated
+with the legacy architecture, and on-going incremental logs will stay with the incremental
+architecture, which means that on-going incremental logs won't be forcibly re-generated
+with the legacy architecture.
+
+### Potential implications
+
+In some cases, having data stored on Redis could incur data loss:
+
+1. **Case 1: When all data in Redis are accidentally flushed**
+ - On going incremental logs could be recovered by re-sending logs (this is
+ supported by all versions of the GitLab Runner).
+ - Finished jobs which have not archived incremental logs will lose the last part
+ (~128KB) of log data.
+
+1. **Case 2: When Sidekiq workers fail to archive (e.g., there was a bug that
+ prevents archiving process, Sidekiq inconsistency, etc.)**
+ - Currently all log data in Redis will be deleted after one week. If the
+ Sidekiq workers can't finish by the expiry date, the part of log data will be lost.
+
+Another issue that might arise is that it could consume all memory on the Redis
+instance. If the number of jobs is 1000, 128MB (128KB * 1000) is consumed.
+
+Also, it could pressure the database replication lag. `INSERT`s are generated to
+indicate that we have log chunk. `UPDATE`s with 128KB of data is issued once we
+receive multiple chunks.
+
+[ce-18169]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/18169
+[ce-21193]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/21193
+[ce-46097]: https://gitlab.com/gitlab-org/gitlab-foss/issues/46097
diff --git a/doc/administration/job_traces.md b/doc/administration/job_traces.md
index 8a68f82d2fc..d0b346a931e 100644
--- a/doc/administration/job_traces.md
+++ b/doc/administration/job_traces.md
@@ -1,207 +1,5 @@
-# Job traces (logs)
-
-Job traces are sent by GitLab Runner while it's processing a job. You can see
-traces in job pages, pipelines, email notifications, etc.
-
-## Data flow
-
-In general, there are two states in job traces: "live trace" and "archived trace".
-In the following table you can see the phases a trace goes through.
-
-| Phase | State | Condition | Data flow | Stored path |
-| ----- | ----- | --------- | --------- | ----------- |
-| 1: patching | Live trace | When a job is running | GitLab Runner => Unicorn => file storage |`#{ROOT_PATH}/gitlab-ci/builds/#{YYYY_mm}/#{project_id}/#{job_id}.log`|
-| 2: overwriting | Live trace | When a job is finished | GitLab Runner => Unicorn => file storage |`#{ROOT_PATH}/gitlab-ci/builds/#{YYYY_mm}/#{project_id}/#{job_id}.log`|
-| 3: archiving | Archived trace | After a job is finished | Sidekiq moves live trace to artifacts folder |`#{ROOT_PATH}/gitlab-rails/shared/artifacts/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log`|
-| 4: uploading | Archived trace | After a trace is archived | Sidekiq moves archived trace to [object storage](#uploading-traces-to-object-storage) (if configured) |`#{bucket_name}/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log`|
-
-The `ROOT_PATH` varies per your environment. For Omnibus GitLab it
-would be `/var/opt/gitlab`, whereas for installations from source
-it would be `/home/git/gitlab`.
-
-## Changing the job traces local location
-
-To change the location where the job logs will be stored, follow the steps below.
-
-**In Omnibus installations:**
-
-1. Edit `/etc/gitlab/gitlab.rb` and add or amend the following line:
-
- ```ruby
- gitlab_ci['builds_directory'] = '/mnt/to/gitlab-ci/builds'
- ```
-
-1. Save the file and [reconfigure GitLab][] for the changes to take effect.
-
+---
+redirect_to: 'job_logs.md'
---
-**In installations from source:**
-
-1. Edit `/home/git/gitlab/config/gitlab.yml` and add or amend the following lines:
-
- ```yaml
- gitlab_ci:
- # The location where build traces are stored (default: builds/).
- # Relative paths are relative to Rails.root.
- builds_path: path/to/builds/
- ```
-
-1. Save the file and [restart GitLab][] for the changes to take effect.
-
-[reconfigure gitlab]: restart_gitlab.md#omnibus-gitlab-reconfigure "How to reconfigure Omnibus GitLab"
-[restart gitlab]: restart_gitlab.md#installations-from-source "How to restart GitLab"
-
-## Uploading traces to object storage
-
-Archived traces are considered as [job artifacts](job_artifacts.md).
-Therefore, when you [set up the object storage integration](job_artifacts.md#object-storage-settings),
-job traces are automatically migrated to it along with the other job artifacts.
-
-See "Phase 4: uploading" in [Data flow](#data-flow) to learn about the process.
-
-## How to archive legacy job trace files
-
-Legacy job traces, which were created before GitLab 10.5, were not archived regularly.
-It's the same state with the "2: overwriting" in the above [Data flow](#data-flow).
-To archive those legacy job traces, please follow the instruction below.
-
-1. Execute the following command
-
- ```bash
- gitlab-rake gitlab:traces:archive
- ```
-
- After you executed this task, GitLab instance queues up Sidekiq jobs (asynchronous processes)
- for migrating job trace files from local storage to object storage.
- It could take time to complete the all migration jobs. You can check the progress by the following command
-
- ```bash
- sudo gitlab-rails console
- ```
-
- ```bash
- [1] pry(main)> Sidekiq::Stats.new.queues['pipeline_background:archive_trace']
- => 100
- ```
-
- If the count becomes zero, the archiving processes are done
-
-## How to migrate archived job traces to object storage
-
-> [Introduced][ce-21193] in GitLab 11.3.
-
-If job traces have already been archived into local storage, and you want to migrate those traces to object storage, please follow the instruction below.
-
-1. Ensure [Object storage integration for Job Artifacts](job_artifacts.md#object-storage-settings) is enabled
-1. Execute the following command
-
- ```bash
- gitlab-rake gitlab:traces:migrate
- ```
-
-## How to remove job traces
-
-There isn't a way to automatically expire old job logs, but it's safe to remove
-them if they're taking up too much space. If you remove the logs manually, the
-job output in the UI will be empty.
-
-## New live trace architecture
-
-> [Introduced][ce-18169] in GitLab 10.4.
-> [Announced as General availability][ce-46097] in GitLab 11.0.
-
-NOTE: **Note:**
-This feature is off by default. Check below how to [enable/disable](#enabling-live-trace) it.
-
-By combining the process with object storage settings, we can completely bypass
-the local file storage. This is a useful option if GitLab is installed as
-cloud-native, for example on Kubernetes.
-
-The data flow is the same as described in the [data flow section](#data-flow)
-with one change: _the stored path of the first two phases is different_. This new live
-trace architecture stores chunks of traces in Redis and a persistent store (object storage or database) instead of
-file storage. Redis is used as first-class storage, and it stores up-to 128KB
-of data. Once the full chunk is sent, it is flushed a persistent store, either object storage(temporary directory) or database.
-After a while, the data in Redis and a persitent store will be archived to [object storage](#uploading-traces-to-object-storage).
-
-The data are stored in the following Redis namespace: `Gitlab::Redis::SharedState`.
-
-Here is the detailed data flow:
-
-1. GitLab Runner picks a job from GitLab
-1. GitLab Runner sends a piece of trace to GitLab
-1. GitLab appends the data to Redis
-1. Once the data in Redis reach 128KB, the data is flushed to a persistent store (object storage or the database).
-1. The above steps are repeated until the job is finished.
-1. Once the job is finished, GitLab schedules a Sidekiq worker to archive the trace.
-1. The Sidekiq worker archives the trace to object storage and cleans up the trace
- in Redis and a persistent store (object storage or the database).
-
-### Enabling live trace
-
-The following commands are to be issues in a Rails console:
-
-```sh
-# Omnibus GitLab
-gitlab-rails console
-
-# Installation from source
-cd /home/git/gitlab
-sudo -u git -H bin/rails console RAILS_ENV=production
-```
-
-**To check if live trace is enabled:**
-
-```ruby
-Feature.enabled?('ci_enable_live_trace')
-```
-
-**To enable live trace:**
-
-```ruby
-Feature.enable('ci_enable_live_trace')
-```
-
-NOTE: **Note:**
-The transition period will be handled gracefully. Upcoming traces will be
-generated with the new architecture, and on-going live traces will stay with the
-legacy architecture, which means that on-going live traces won't be forcibly
-re-generated with the new architecture.
-
-**To disable live trace:**
-
-```ruby
-Feature.disable('ci_enable_live_trace')
-```
-
-NOTE: **Note:**
-The transition period will be handled gracefully. Upcoming traces will be generated
-with the legacy architecture, and on-going live traces will stay with the new
-architecture, which means that on-going live traces won't be forcibly re-generated
-with the legacy architecture.
-
-### Potential implications
-
-In some cases, having data stored on Redis could incur data loss:
-
-1. **Case 1: When all data in Redis are accidentally flushed**
- - On going live traces could be recovered by re-sending traces (this is
- supported by all versions of the GitLab Runner).
- - Finished jobs which have not archived live traces will lose the last part
- (~128KB) of trace data.
-
-1. **Case 2: When Sidekiq workers fail to archive (e.g., there was a bug that
- prevents archiving process, Sidekiq inconsistency, etc.)**
- - Currently all trace data in Redis will be deleted after one week. If the
- Sidekiq workers can't finish by the expiry date, the part of trace data will be lost.
-
-Another issue that might arise is that it could consume all memory on the Redis
-instance. If the number of jobs is 1000, 128MB (128KB * 1000) is consumed.
-
-Also, it could pressure the database replication lag. `INSERT`s are generated to
-indicate that we have trace chunk. `UPDATE`s with 128KB of data is issued once we
-receive multiple chunks.
-
-[ce-18169]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/18169
-[ce-21193]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/21193
-[ce-46097]: https://gitlab.com/gitlab-org/gitlab-foss/issues/46097
+This document was moved to [another location](job_logs.md).
diff --git a/doc/administration/libravatar.md b/doc/administration/libravatar.md
new file mode 100644
index 00000000000..43a6b8f0d34
--- /dev/null
+++ b/doc/administration/libravatar.md
@@ -0,0 +1,101 @@
+---
+type: howto
+---
+
+# Using the Libravatar service with GitLab
+
+GitLab by default supports the [Gravatar](https://gravatar.com) avatar service.
+
+Libravatar is another service that delivers your avatar (profile picture) to
+other websites. The Libravatar API is
+[heavily based on gravatar](https://wiki.libravatar.org/api/), so you can
+easily switch to the Libravatar avatar service or even a self-hosted Libravatar
+server.
+
+## Configuration
+
+In the [`gitlab.yml` gravatar section](https://gitlab.com/gitlab-org/gitlab/blob/672bd3902d86b78d730cea809fce312ec49d39d7/config/gitlab.yml.example#L122), set
+the configuration options as follows:
+
+### For HTTP
+
+```yml
+ gravatar:
+ enabled: true
+ # gravatar URLs: possible placeholders: %{hash} %{size} %{email} %{username}
+ plain_url: "http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
+```
+
+### For HTTPS
+
+```yml
+ gravatar:
+ enabled: true
+ # gravatar URLs: possible placeholders: %{hash} %{size} %{email} %{username}
+ ssl_url: "https://seccdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
+```
+
+### Self-hosted Libravatar server
+
+If you are [running your own libravatar service](https://wiki.libravatar.org/running_your_own/),
+the URL will be different in the configuration, but you must provide the same
+placeholders so GitLab can parse the URL correctly.
+
+For example, you host a service on `http://libravatar.example.com` and the
+`plain_url` you need to supply in `gitlab.yml` is
+
+`http://libravatar.example.com/avatar/%{hash}?s=%{size}&d=identicon`
+
+### Omnibus GitLab example
+
+In `/etc/gitlab/gitlab.rb`:
+
+#### For HTTP
+
+```ruby
+gitlab_rails['gravatar_enabled'] = true
+gitlab_rails['gravatar_plain_url'] = "http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
+```
+
+#### For HTTPS
+
+```ruby
+gitlab_rails['gravatar_enabled'] = true
+gitlab_rails['gravatar_ssl_url'] = "https://seccdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
+```
+
+Then run `sudo gitlab-ctl reconfigure` for the changes to take effect.
+
+## Default URL for missing images
+
+[Libravatar supports different sets](https://wiki.libravatar.org/api/) of
+missing images for user email addresses that are not found on the Libravatar
+service.
+
+In order to use a set other than `identicon`, replace the `&d=identicon`
+portion of the URL with another supported set.
+For example, you can use the `retro` set, in which case the URL would look like:
+`plain_url: "http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=retro"`
+
+## Usage examples for Microsoft Office 365
+
+If your users are Office 365 users, the `GetPersonaPhoto` service can be used.
+Note that this service requires a login, so this use case is most useful in a
+corporate installation where all users have access to Office 365.
+
+```ruby
+gitlab_rails['gravatar_plain_url'] = 'http://outlook.office365.com/owa/service.svc/s/GetPersonaPhoto?email=%{email}&size=HR120x120'
+gitlab_rails['gravatar_ssl_url'] = 'https://outlook.office365.com/owa/service.svc/s/GetPersonaPhoto?email=%{email}&size=HR120x120'
+```
+
+<!-- ## Troubleshooting
+
+Include any troubleshooting steps that you can foresee. If you know beforehand what issues
+one might have when setting this up, or when something is changed, or on upgrading, it's
+important to describe those, too. Think of things that may go wrong and include them here.
+This is important to minimize requests for support, and to avoid doc comments with
+questions that you know someone might ask.
+
+Each scenario can be a third-level heading, e.g. `### Getting error message X`.
+If you have none to add when creating a doc, leave this section in place
+but commented out to help encourage others to add to it in the future. -->
diff --git a/doc/administration/logs.md b/doc/administration/logs.md
index 7857dcc1f08..dae0dae8395 100644
--- a/doc/administration/logs.md
+++ b/doc/administration/logs.md
@@ -23,7 +23,7 @@ requests from the API are logged to a separate file in `api_json.log`.
Each line contains a JSON line that can be ingested by Elasticsearch, Splunk, etc. For example:
```json
-{"method":"GET","path":"/gitlab/gitlab-ce/issues/1234","format":"html","controller":"Projects::IssuesController","action":"show","status":200,"duration":229.03,"view":174.07,"db":13.24,"time":"2017-08-08T20:15:54.821Z","params":[{"key":"param_key","value":"param_value"}],"remote_ip":"18.245.0.1","user_id":1,"username":"admin","gitaly_calls":76,"gitaly_duration":7.41,"queue_duration": 112.47}
+{"method":"GET","path":"/gitlab/gitlab-foss/issues/1234","format":"html","controller":"Projects::IssuesController","action":"show","status":200,"duration":229.03,"view":174.07,"db":13.24,"time":"2017-08-08T20:15:54.821Z","params":[{"key":"param_key","value":"param_value"}],"remote_ip":"18.245.0.1","user_id":1,"username":"admin","gitaly_calls":76,"gitaly_duration":7.41,"queue_duration": 112.47}
```
In this example, you can see this was a GET request for a specific
@@ -233,7 +233,7 @@ This file lives in `/var/log/gitlab/gitlab-shell/gitlab-shell.log` for
Omnibus GitLab packages or in `/home/git/gitlab-shell/gitlab-shell.log` for
installations from source.
-GitLab shell is used by GitLab for executing Git commands and provide
+GitLab Shell is used by GitLab for executing Git commands and provide
SSH access to Git repositories. For example:
```
@@ -241,7 +241,7 @@ I, [2015-02-13T06:17:00.671315 #9291] INFO -- : Adding project root/example.git
I, [2015-02-13T06:17:00.679433 #9291] INFO -- : Moving existing hooks directory and symlinking global hooks directory for /var/opt/gitlab/git-data/repositories/root/example.git.
```
-User clone/fetch activity using ssh transport appears in this log as `executing git command <gitaly-upload-pack...`.
+User clone/fetch activity using SSH transport appears in this log as `executing git command <gitaly-upload-pack...`.
## `unicorn_stderr.log`
@@ -252,7 +252,7 @@ installations from source.
Unicorn is a high-performance forking Web server which is used for
serving the GitLab application. You can look at this log if, for
example, your application does not respond. This log contains all
-information about the state of unicorn processes at any given time.
+information about the state of Unicorn processes at any given time.
```
I, [2015-02-13T06:14:46.680381 #9047] INFO -- : Refreshing Gem list
@@ -294,9 +294,11 @@ This log records:
- Information whenever [Rack Attack] registers an abusive request.
- Requests over the [Rate Limit] on raw endpoints.
+- [Protected paths] abusive requests.
NOTE: **Note:**
-From [%12.1](https://gitlab.com/gitlab-org/gitlab-foss/issues/62756), user id and username are available on this log.
+From [%12.1](https://gitlab.com/gitlab-org/gitlab-foss/issues/62756), user id and username are also
+recorded on this log, if available.
## `graphql_json.log`
@@ -327,17 +329,19 @@ is populated whenever `gitlab-ctl reconfigure` is run manually or as part of an
Reconfigure logs files are named according to the UNIX timestamp of when the reconfigure
was initiated, such as `1509705644.log`
-## `sidekiq_exporter.log`
+## `sidekiq_exporter.log` and `web_exporter.log`
If Prometheus metrics and the Sidekiq Exporter are both enabled, Sidekiq will
-start a Web server and listen to the defined port (default: 3807). Access logs
+start a Web server and listen to the defined port (default: 8082). Access logs
will be generated in `/var/log/gitlab/gitlab-rails/sidekiq_exporter.log` for
Omnibus GitLab packages or in `/home/git/gitlab/log/sidekiq_exporter.log` for
installations from source.
-[repocheck]: repository_checks.md
-[Rack Attack]: ../security/rack_attack.md
-[Rate Limit]: ../user/admin_area/settings/rate_limits_on_raw_endpoints.md
+If Prometheus metrics and the Web Exporter are both enabled, Unicorn/Puma will
+start a Web server and listen to the defined port (default: 8083). Access logs
+will be generated in `/var/log/gitlab/gitlab-rails/web_exporter.log` for
+Omnibus GitLab packages or in `/home/git/gitlab/log/web_exporter.log` for
+installations from source.
## `database_load_balancing.log` **(PREMIUM ONLY)**
@@ -348,3 +352,8 @@ It is stored at:
- `/var/log/gitlab/gitlab-rails/database_load_balancing.log` for Omnibus GitLab packages.
- `/home/git/gitlab/log/database_load_balancing.log` for installations from source.
+
+[repocheck]: repository_checks.md
+[Rack Attack]: ../security/rack_attack.md
+[Rate Limit]: ../user/admin_area/settings/rate_limits_on_raw_endpoints.md
+[Protected paths]: ../user/admin_area/settings/protected_paths.md
diff --git a/doc/administration/merge_request_diffs.md b/doc/administration/merge_request_diffs.md
index f24a3f94ceb..ca09171e5ff 100644
--- a/doc/administration/merge_request_diffs.md
+++ b/doc/administration/merge_request_diffs.md
@@ -61,6 +61,9 @@ To enable external storage of merge request diffs, follow the instructions below
## Using object storage
+CAUTION: **WARNING:**
+ Currently migrating to object storage is **non-reversible**
+
Instead of storing the external diffs on disk, we recommended the use of an object
store like AWS S3 instead. This configuration relies on valid AWS credentials to
be configured already.
@@ -93,7 +96,7 @@ The connection settings match those provided by [Fog](https://github.com/fog), a
| `enable_signature_v4_streaming` | Set to true to enable HTTP chunked transfers with [AWS v4 signatures](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html). Oracle Cloud S3 needs this to be false | true |
| `region` | AWS region | us-east-1 |
| `host` | S3 compatible host for when not using AWS, e.g. `localhost` or `storage.example.com` | s3.amazonaws.com |
-| `endpoint` | Can be used when configuring an S3 compatible service such as [Minio](https://www.minio.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
+| `endpoint` | Can be used when configuring an S3 compatible service such as [MinIO](https://min.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
| `path_style` | Set to true to use `host/bucket_name/object` style paths instead of `bucket_name.host/object`. Leave as false for AWS S3 | false |
| `use_iam_profile` | Set to true to use IAM profile instead of access keys | false
diff --git a/doc/administration/monitoring/github_imports.md b/doc/administration/monitoring/github_imports.md
index 2b1b7a230f7..4d60cf0d491 100644
--- a/doc/administration/monitoring/github_imports.md
+++ b/doc/administration/monitoring/github_imports.md
@@ -16,7 +16,7 @@ This metric tracks the total time spent (in seconds) importing a project (from
project creation until the import process finishes), for every imported project.
The name of the project is stored in the `project` label in the format
-`namespace/name` (e.g. `gitlab-org/gitlab-ce`).
+`namespace/name` (e.g. `gitlab-org/gitlab`).
## Number of imported projects
@@ -54,7 +54,7 @@ projects. This metric does not expose any labels.
This metric tracks the number of imported issues across all projects.
The name of the project is stored in the `project` label in the format
-`namespace/name` (e.g. `gitlab-org/gitlab-ce`).
+`namespace/name` (e.g. `gitlab-org/gitlab`).
## Number of imported pull requests
@@ -65,7 +65,7 @@ The name of the project is stored in the `project` label in the format
This metric tracks the number of imported pull requests across all projects.
The name of the project is stored in the `project` label in the format
-`namespace/name` (e.g. `gitlab-org/gitlab-ce`).
+`namespace/name` (e.g. `gitlab-org/gitlab`).
## Number of imported comments
@@ -76,7 +76,7 @@ The name of the project is stored in the `project` label in the format
This metric tracks the number of imported comments across all projects.
The name of the project is stored in the `project` label in the format
-`namespace/name` (e.g. `gitlab-org/gitlab-ce`).
+`namespace/name` (e.g. `gitlab-org/gitlab`).
## Number of imported pull request review comments
@@ -87,7 +87,7 @@ The name of the project is stored in the `project` label in the format
This metric tracks the number of imported comments across all projects.
The name of the project is stored in the `project` label in the format
-`namespace/name` (e.g. `gitlab-org/gitlab-ce`).
+`namespace/name` (e.g. `gitlab-org/gitlab`).
## Number of imported repositories
diff --git a/doc/administration/monitoring/index.md b/doc/administration/monitoring/index.md
index 2b3daec42bd..80e727f6a5c 100644
--- a/doc/administration/monitoring/index.md
+++ b/doc/administration/monitoring/index.md
@@ -10,4 +10,4 @@ Explore our features to monitor your GitLab instance:
- [GitHub imports](github_imports.md): Monitor the health and progress of GitLab's GitHub importer with various Prometheus metrics.
- [Monitoring uptime](../../user/admin_area/monitoring/health_check.md): Check the server status using the health check endpoint.
- [IP whitelists](ip_whitelist.md): Configure GitLab for monitoring endpoints that provide health check information when probed.
-- [nginx_status](https://docs.gitlab.com/omnibus/settings/nginx.html#enablingdisabling-nginx_status): Monitor your Nginx server status
+- [`nginx_status`](https://docs.gitlab.com/omnibus/settings/nginx.html#enablingdisabling-nginx_status): Monitor your NGINX server status
diff --git a/doc/administration/monitoring/performance/grafana_configuration.md b/doc/administration/monitoring/performance/grafana_configuration.md
index d389c7c5003..ccba0a55479 100644
--- a/doc/administration/monitoring/performance/grafana_configuration.md
+++ b/doc/administration/monitoring/performance/grafana_configuration.md
@@ -32,14 +32,14 @@ in the top bar.
Fill in the configuration details for the InfluxDB data source. Save and
Test Connection to ensure the configuration is correct.
-- **Name**: InfluxDB
+- **Name**: `InfluxDB`
- **Default**: Checked
-- **Type**: InfluxDB 0.9.x (Even if you're using InfluxDB 0.10.x)
+- **Type**: `InfluxDB 0.9.x` (Even if you're using InfluxDB 0.10.x)
- **Url**: `https://localhost:8086` (Or the remote URL if you've installed InfluxDB
on a separate server)
-- **Access**: proxy
-- **Database**: gitlab
-- **User**: admin (Or the username configured when setting up InfluxDB)
+- **Access**: `proxy`
+- **Database**: `gitlab`
+- **User**: `admin` (Or the username configured when setting up InfluxDB)
- **Password**: The password configured when you set up InfluxDB
![Grafana data source configurations](img/grafana_data_source_configuration.png)
@@ -146,7 +146,7 @@ However, you should **not** reinstate your old data _except_ under one of the fo
If you require access to your old Grafana data but do not meet one of these criteria, you may consider reinstating it temporarily, [exporting the dashboards](https://grafana.com/docs/reference/export_import/#exporting-a-dashboard) you need, then refreshing the data and [re-importing your dashboards](https://grafana.com/docs/reference/export_import/#importing-a-dashboard). Note that this poses a temporary vulnerability while your old Grafana data is in use, and the decision to do so should be weighed carefully with your need to access existing data and dashboards.
-For more information and further mitigation details, please refer to our [blog post on the security release](https://about.gitlab.com/2019/08/12/critical-security-release-gitlab-12-dot-1-dot-6-released/).
+For more information and further mitigation details, please refer to our [blog post on the security release](https://about.gitlab.com/blog/2019/08/12/critical-security-release-gitlab-12-dot-1-dot-6-released/).
---
diff --git a/doc/administration/monitoring/performance/img/performance_bar_gitaly_threshold.png b/doc/administration/monitoring/performance/img/performance_bar_gitaly_threshold.png
new file mode 100644
index 00000000000..d4bf5c69ffa
--- /dev/null
+++ b/doc/administration/monitoring/performance/img/performance_bar_gitaly_threshold.png
Binary files differ
diff --git a/doc/administration/monitoring/performance/img/performance_bar_request_selector_warning.png b/doc/administration/monitoring/performance/img/performance_bar_request_selector_warning.png
new file mode 100644
index 00000000000..966549554a4
--- /dev/null
+++ b/doc/administration/monitoring/performance/img/performance_bar_request_selector_warning.png
Binary files differ
diff --git a/doc/administration/monitoring/performance/img/performance_bar_request_selector_warning_expanded.png b/doc/administration/monitoring/performance/img/performance_bar_request_selector_warning_expanded.png
new file mode 100644
index 00000000000..3362186bb48
--- /dev/null
+++ b/doc/administration/monitoring/performance/img/performance_bar_request_selector_warning_expanded.png
Binary files differ
diff --git a/doc/administration/monitoring/performance/index.md b/doc/administration/monitoring/performance/index.md
index ef71ca1d6c3..5204ab40dc9 100644
--- a/doc/administration/monitoring/performance/index.md
+++ b/doc/administration/monitoring/performance/index.md
@@ -31,8 +31,8 @@ including (but not limited to):
- System statistics such as the process' memory usage and open file descriptors.
- Ruby garbage collection statistics.
-Metrics data is written to [InfluxDB][influxdb] over [UDP][influxdb-udp]. Stored
-data can be visualized using [Grafana][grafana] or any other application that
+Metrics data is written to [InfluxDB](https://www.influxdata.com/products/influxdb-overview/)
+over [UDP][influxdb-udp]. Stored data can be visualized using [Grafana](https://grafana.com) or any other application that
supports reading data from InfluxDB. Alternatively data can be queried using the
InfluxDB CLI.
@@ -67,6 +67,4 @@ the actual interval can be anywhere between 7.5 and 22.5. The interval is
re-generated for every sampling run instead of being generated once and re-used
for the duration of the process' lifetime.
-[influxdb]: https://influxdata.com/time-series-platform/influxdb/
[influxdb-udp]: https://docs.influxdata.com/influxdb/v0.9/write_protocols/udp/
-[grafana]: http://grafana.org/
diff --git a/doc/administration/monitoring/performance/influxdb_configuration.md b/doc/administration/monitoring/performance/influxdb_configuration.md
index cf6728510fe..f1f588a924d 100644
--- a/doc/administration/monitoring/performance/influxdb_configuration.md
+++ b/doc/administration/monitoring/performance/influxdb_configuration.md
@@ -38,8 +38,8 @@ InfluxDB needs to be restarted.
### Storage Engine
InfluxDB comes with different storage engines and as of InfluxDB 0.9.5 a new
-storage engine is available, called [TSM Tree]. All users **must** use the new
-`tsm1` storage engine as this [will be the default engine][tsm1-commit] in
+storage engine is available, called [TSM Tree](https://www.influxdata.com/blog/new-storage-engine-time-structured-merge-tree/).
+All users **must** use the new `tsm1` storage engine as this [will be the default engine][tsm1-commit] in
upcoming InfluxDB releases.
Make sure you have the following in your configuration file:
@@ -95,7 +95,7 @@ UDP can be done using the following settings:
This does the following:
1. Enable UDP and bind it to port 8089 for all addresses.
-1. Store any data received in the "gitlab" database.
+1. Store any data received in the `gitlab` database.
1. Define a batch of points to be 1000 points in size and allow a maximum of
5 batches _or_ flush them automatically after 1 second.
1. Define a UDP read buffer size of 200 MB.
@@ -188,6 +188,5 @@ Read more on:
[influxdb cli]: https://docs.influxdata.com/influxdb/v0.9/tools/shell/
[udp]: https://docs.influxdata.com/influxdb/v0.9/write_protocols/udp/
[influxdb]: https://www.influxdata.com/products/influxdb-overview/
-[tsm tree]: https://influxdata.com/blog/new-storage-engine-time-structured-merge-tree/
[tsm1-commit]: https://github.com/influxdata/influxdb/commit/15d723dc77651bac83e09e2b1c94be480966cb0d
[influx-admin]: https://docs.influxdata.com/influxdb/v0.9/administration/authentication_and_authorization/#create-a-new-admin-user
diff --git a/doc/administration/monitoring/performance/performance_bar.md b/doc/administration/monitoring/performance/performance_bar.md
index 02f4b78bd60..53c08e32cb2 100644
--- a/doc/administration/monitoring/performance/performance_bar.md
+++ b/doc/administration/monitoring/performance/performance_bar.md
@@ -21,6 +21,24 @@ On the far right is a request selector that allows you to view the same metrics
(excluding the page timing and line profiler) for any requests made while the
page was open. Only the first two requests per unique URL are captured.
+## Request warnings
+
+For requests exceeding pre-defined limits, a warning icon will be shown
+next to the failing metric, along with an explanation. In this example,
+the Gitaly call duration exceeded the threshold:
+
+![Gitaly call duration exceeded threshold](img/performance_bar_gitaly_threshold.png)
+
+If any requests on the current page generated warnings, the icon will
+appear next to the request selector:
+
+![Request selector showing two requests with warnings](img/performance_bar_request_selector_warning.png)
+
+And requests with warnings are indicated in the request selector with a
+`(!)` after their path:
+
+![Request selector showing dropdown](img/performance_bar_request_selector_warning_expanded.png)
+
## Enable the Performance Bar via the Admin panel
GitLab Performance Bar is disabled by default. To enable it for a given group,
diff --git a/doc/administration/monitoring/performance/prometheus.md b/doc/administration/monitoring/performance/prometheus.md
index 2c5bab46dd9..f05a420fc19 100644
--- a/doc/administration/monitoring/performance/prometheus.md
+++ b/doc/administration/monitoring/performance/prometheus.md
@@ -2,4 +2,4 @@
redirect_to: '../prometheus/index.md'
---
-This document was moved to [monitoring/prometheus](../prometheus/index.md).
+This document was moved to [another location](../prometheus/index.md).
diff --git a/doc/administration/monitoring/prometheus/gitlab_exporter.md b/doc/administration/monitoring/prometheus/gitlab_exporter.md
index cfd9f55acc3..f6178799e0a 100644
--- a/doc/administration/monitoring/prometheus/gitlab_exporter.md
+++ b/doc/administration/monitoring/prometheus/gitlab_exporter.md
@@ -1,12 +1,16 @@
# GitLab exporter
->**Note:**
-Available since [Omnibus GitLab 8.17][1132]. For installations from source
-you'll have to install and configure it yourself.
+>- Available since [Omnibus GitLab 8.17](https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1132).
+>- Renamed from `GitLab monitor exporter` to `GitLab exporter` in [GitLab 12.3](https://gitlab.com/gitlab-org/gitlab/merge_requests/16511).
-The [GitLab exporter] allows you to measure various GitLab metrics, pulled from Redis and the database.
+The [GitLab exporter](https://gitlab.com/gitlab-org/gitlab-exporter) allows you to
+measure various GitLab metrics, pulled from Redis and the database, in Omnibus GitLab
+instances.
-To enable the GitLab exporter:
+NOTE: **Note:**
+For installations from source you'll have to install and configure it yourself.
+
+To enable the GitLab exporter in an Omnibus GitLab instance:
1. [Enable Prometheus](index.md#configuring-prometheus)
1. Edit `/etc/gitlab/gitlab.rb`
@@ -16,15 +20,10 @@ To enable the GitLab exporter:
gitlab_exporter['enable'] = true
```
-1. Save the file and [reconfigure GitLab][reconfigure] for the changes to
- take effect
+1. Save the file and [reconfigure GitLab](../../restart_gitlab.md#omnibus-gitlab-reconfigure)
+ for the changes to take effect
Prometheus will now automatically begin collecting performance data from
the GitLab exporter exposed under `localhost:9168`.
[↠Back to the main Prometheus page](index.md)
-
-[1132]: https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1132
-[GitLab exporter]: https://gitlab.com/gitlab-org/gitlab-exporter
-[prometheus]: https://prometheus.io
-[reconfigure]: ../../restart_gitlab.md#omnibus-gitlab-reconfigure
diff --git a/doc/administration/monitoring/prometheus/gitlab_metrics.md b/doc/administration/monitoring/prometheus/gitlab_metrics.md
index 302d74dd96a..02920293daa 100644
--- a/doc/administration/monitoring/prometheus/gitlab_metrics.md
+++ b/doc/administration/monitoring/prometheus/gitlab_metrics.md
@@ -42,10 +42,10 @@ The following metrics are available:
| `gitlab_transaction_cache_read_hit_count_total` | Counter | 10.2 | Counter for cache hits for Rails cache calls | controller, action |
| `gitlab_transaction_cache_read_miss_count_total` | Counter | 10.2 | Counter for cache misses for Rails cache calls | controller, action |
| `gitlab_transaction_duration_seconds` | Histogram | 10.2 | Duration for all transactions (gitlab_transaction_* metrics) | controller, action |
-| `gitlab_transaction_event_build_found_total` | Counter | 9.4 | Counter for build found for api /jobs/request | |
-| `gitlab_transaction_event_build_invalid_total` | Counter | 9.4 | Counter for build invalid due to concurrency conflict for api /jobs/request | |
-| `gitlab_transaction_event_build_not_found_cached_total` | Counter | 9.4 | Counter for cached response of build not found for api /jobs/request | |
-| `gitlab_transaction_event_build_not_found_total` | Counter | 9.4 | Counter for build not found for api /jobs/request | |
+| `gitlab_transaction_event_build_found_total` | Counter | 9.4 | Counter for build found for API /jobs/request | |
+| `gitlab_transaction_event_build_invalid_total` | Counter | 9.4 | Counter for build invalid due to concurrency conflict for API /jobs/request | |
+| `gitlab_transaction_event_build_not_found_cached_total` | Counter | 9.4 | Counter for cached response of build not found for API /jobs/request | |
+| `gitlab_transaction_event_build_not_found_total` | Counter | 9.4 | Counter for build not found for API /jobs/request | |
| `gitlab_transaction_event_change_default_branch_total` | Counter | 9.4 | Counter when default branch is changed for any repository | |
| `gitlab_transaction_event_create_repository_total` | Counter | 9.4 | Counter when any repository is created | |
| `gitlab_transaction_event_etag_caching_cache_hit_total` | Counter | 9.4 | Counter for etag cache hit. | endpoint |
@@ -66,10 +66,10 @@ The following metrics are available:
| `gitlab_transaction_event_remove_branch_total` | Counter | 9.4 | Counter when a branch is removed for any repository | |
| `gitlab_transaction_event_remove_repository_total` | Counter | 9.4 | Counter when a repository is removed | |
| `gitlab_transaction_event_remove_tag_total` | Counter | 9.4 | Counter when a tag is remove for any repository | |
-| `gitlab_transaction_event_sidekiq_exception_total` | Counter | 9.4 | Counter of sidekiq exceptions | |
+| `gitlab_transaction_event_sidekiq_exception_total` | Counter | 9.4 | Counter of Sidekiq exceptions | |
| `gitlab_transaction_event_stuck_import_jobs_total` | Counter | 9.4 | Count of stuck import jobs | projects_without_jid_count, projects_with_jid_count |
-| `gitlab_transaction_event_update_build_total` | Counter | 9.4 | Counter for update build for api /jobs/request/:id | |
-| `gitlab_transaction_new_redis_connections_total` | Counter | 9.4 | Counter for new redis connections | |
+| `gitlab_transaction_event_update_build_total` | Counter | 9.4 | Counter for update build for API /jobs/request/:id | |
+| `gitlab_transaction_new_redis_connections_total` | Counter | 9.4 | Counter for new Redis connections | |
| `gitlab_transaction_queue_duration_total` | Counter | 9.4 | Duration jobs were enqueued before processing | |
| `gitlab_transaction_rails_queue_duration_total` | Counter | 9.4 | Measures latency between GitLab Workhorse forwarding a request to Rails | controller, action |
| `gitlab_transaction_view_duration_total` | Counter | 9.4 | Duration for views | controller, action, view |
@@ -140,8 +140,7 @@ The following metrics are available:
| Metric | Type | Since | Description |
|:--------------------------------- |:--------- |:------------------------------------------------------------- |:-------------------------------------- |
-| `db_load_balancing_hosts` | Gauge | [12.3](https://gitlab.com/gitlab-org/gitlab/issues/13630) | Current number of load balancing hosts |
-| `db_load_balancing_index` | Gauge | [12.3](https://gitlab.com/gitlab-org/gitlab/issues/13630) | Current load balancing host index |
+| `db_load_balancing_hosts` | Gauge | [12.3](https://gitlab.com/gitlab-org/gitlab/issues/13630) | Current number of load balancing hosts |
## Ruby metrics
diff --git a/doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md b/doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md
new file mode 100644
index 00000000000..ae3a3d739b5
--- /dev/null
+++ b/doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md
@@ -0,0 +1,5 @@
+---
+redirect_to: 'gitlab_exporter.md'
+---
+
+This document was moved to [another location](gitlab_exporter.md).
diff --git a/doc/administration/monitoring/prometheus/index.md b/doc/administration/monitoring/prometheus/index.md
index 9228ebf4fed..c35d6f505be 100644
--- a/doc/administration/monitoring/prometheus/index.md
+++ b/doc/administration/monitoring/prometheus/index.md
@@ -21,7 +21,7 @@ Prometheus works by periodically connecting to data sources and collecting their
performance metrics via the [various exporters](#bundled-software-metrics). To view
and work with the monitoring data, you can either
[connect directly to Prometheus](#viewing-performance-metrics) or utilize a
-dashboard tool like [Grafana].
+dashboard tool like [Grafana](https://grafana.com).
## Configuring Prometheus
@@ -114,7 +114,7 @@ To use an external Prometheus server:
gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
```
-1. To scrape nginx metrics, you'll also need to configure nginx to allow the Prometheus server
+1. To scrape NGINX metrics, you'll also need to configure NGINX to allow the Prometheus server
IP. For example:
```ruby
@@ -199,8 +199,8 @@ having [NGINX proxy it][nginx-custom-config].
The performance data collected by Prometheus can be viewed directly in the
Prometheus console or through a compatible dashboard tool.
-The Prometheus interface provides a [flexible query language][prom-query] to work
-with the collected data where you can visualize their output.
+The Prometheus interface provides a [flexible query language](https://prometheus.io/docs/prometheus/latest/querying/basics/)
+to work with the collected data where you can visualize their output.
For a more fully featured dashboard, Grafana can be used and has
[official support for Prometheus][prom-grafana].
@@ -274,7 +274,7 @@ The GitLab exporter allows you to measure various GitLab metrics, pulled from Re
> Introduced in GitLab 9.0.
> Pod monitoring introduced in GitLab 9.4.
-If your GitLab server is running within Kubernetes, Prometheus will collect metrics from the Nodes and [annotated Pods](https://prometheus.io/docs/operating/configuration/#kubernetes_sd_config) in the cluster, including performance data on each container. This is particularly helpful if your CI/CD environments run in the same cluster, as you can use the [Prometheus project integration][prometheus integration] to monitor them.
+If your GitLab server is running within Kubernetes, Prometheus will collect metrics from the Nodes and [annotated Pods](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config) in the cluster, including performance data on each container. This is particularly helpful if your CI/CD environments run in the same cluster, as you can use the [Prometheus project integration][prometheus integration] to monitor them.
To disable the monitoring of Kubernetes:
@@ -288,16 +288,11 @@ To disable the monitoring of Kubernetes:
1. Save the file and [reconfigure GitLab][reconfigure] for the changes to
take effect.
-[grafana]: https://grafana.net
[hsts]: https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
[multi-user-prometheus]: https://gitlab.com/gitlab-org/multi-user-prometheus
[nginx-custom-config]: https://docs.gitlab.com/omnibus/settings/nginx.html#inserting-custom-nginx-settings-into-the-gitlab-server-block
[prometheus]: https://prometheus.io
-[prom-exporters]: https://prometheus.io/docs/instrumenting/exporters/
-[prom-query]: https://prometheus.io/docs/querying/basics
[prom-grafana]: https://prometheus.io/docs/visualization/grafana/
-[scrape-config]: https://prometheus.io/docs/operating/configuration/#%3Cscrape_config%3E
[reconfigure]: ../../restart_gitlab.md#omnibus-gitlab-reconfigure
[1261]: https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1261
[prometheus integration]: ../../../user/project/integrations/prometheus.md
-[prometheus-cadvisor-metrics]: https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md
diff --git a/doc/administration/operations/cleaning_up_redis_sessions.md b/doc/administration/operations/cleaning_up_redis_sessions.md
index c9b5ab9d290..fd469ae23e3 100644
--- a/doc/administration/operations/cleaning_up_redis_sessions.md
+++ b/doc/administration/operations/cleaning_up_redis_sessions.md
@@ -11,8 +11,8 @@ start building up again after you clean up.
In GitLab versions prior to 7.3.0, the session keys in Redis are 16-byte
hexadecimal values such as '976aa289e2189b17d7ef525a6702ace9'. Starting with
GitLab 7.3.0, the keys are
-prefixed with 'session:gitlab:', so they would look like
-'session:gitlab:976aa289e2189b17d7ef525a6702ace9'. Below we describe how to
+prefixed with `session:gitlab:`, so they would look like
+`session:gitlab:976aa289e2189b17d7ef525a6702ace9`. Below we describe how to
remove the keys in the old format.
**Note:** the instructions below must be modified in accordance with your
diff --git a/doc/administration/operations/fast_ssh_key_lookup.md b/doc/administration/operations/fast_ssh_key_lookup.md
index 16424c25a98..9a38e8ddd23 100644
--- a/doc/administration/operations/fast_ssh_key_lookup.md
+++ b/doc/administration/operations/fast_ssh_key_lookup.md
@@ -2,7 +2,7 @@
NOTE: **Note:** This document describes a drop-in replacement for the
`authorized_keys` file for normal (non-deploy key) users. Consider
-using [ssh certificates](ssh_certificates.md), they are even faster,
+using [SSH certificates](ssh_certificates.md), they are even faster,
but are not a drop-in replacement.
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1631) in
@@ -78,7 +78,7 @@ CAUTION: **Caution:** Do not disable writes until SSH is confirmed to be working
perfectly, because the file will quickly become out-of-date.
In the case of lookup failures (which are common), the `authorized_keys`
-file will still be scanned. So git SSH performance will still be slow for many
+file will still be scanned. So Git SSH performance will still be slow for many
users as long as a large file exists.
You can disable any more writes to the `authorized_keys` file by unchecking
diff --git a/doc/administration/operations/moving_repositories.md b/doc/administration/operations/moving_repositories.md
index ec11a92db1b..d54ffacd281 100644
--- a/doc/administration/operations/moving_repositories.md
+++ b/doc/administration/operations/moving_repositories.md
@@ -31,7 +31,7 @@ If you want to see progress, replace `-xf` with `-xvf`.
### Tar pipe to another server
You can also use a tar pipe to copy data to another server. If your
-'git' user has SSH access to the newserver as 'git@newserver', you
+`git` user has SSH access to the newserver as `git@newserver`, you
can pipe the data through SSH.
```
@@ -61,7 +61,7 @@ If you want to see progress, replace `-a` with `-av`.
### Single rsync to another server
-If the 'git' user on your source system has SSH access to the target
+If the `git` user on your source system has SSH access to the target
server you can send the repositories over the network with rsync.
```
@@ -95,7 +95,7 @@ after switching to the new repository storage directory.
This will sync repositories with 10 rsync processes at a time. We keep
track of progress so that the transfer can be restarted if necessary.
-First we create a new directory, owned by 'git', to hold transfer
+First we create a new directory, owned by `git`, to hold transfer
logs. We assume the directory is empty before we start the transfer
procedure, and that we are the only ones writing files in it.
diff --git a/doc/administration/operations/sidekiq_memory_killer.md b/doc/administration/operations/sidekiq_memory_killer.md
index 8eac42f2fe2..79e9fb778b6 100644
--- a/doc/administration/operations/sidekiq_memory_killer.md
+++ b/doc/administration/operations/sidekiq_memory_killer.md
@@ -2,7 +2,7 @@
The GitLab Rails application code suffers from memory leaks. For web requests
this problem is made manageable using
-[unicorn-worker-killer](https://github.com/kzk/unicorn-worker-killer) which
+[`unicorn-worker-killer`](https://github.com/kzk/unicorn-worker-killer) which
restarts Unicorn worker processes in between requests when needed. The Sidekiq
MemoryKiller applies the same approach to the Sidekiq processes used by GitLab
to process background jobs.
@@ -10,8 +10,8 @@ to process background jobs.
Unlike unicorn-worker-killer, which is enabled by default for all GitLab
installations since GitLab 6.4, the Sidekiq MemoryKiller is enabled by default
_only_ for Omnibus packages. The reason for this is that the MemoryKiller
-relies on Runit to restart Sidekiq after a memory-induced shutdown and GitLab
-installations from source do not all use Runit or an equivalent.
+relies on runit to restart Sidekiq after a memory-induced shutdown and GitLab
+installations from source do not all use runit or an equivalent.
With the default settings, the MemoryKiller will cause a Sidekiq restart no
more often than once every 15 minutes, with the restart causing about one
@@ -26,18 +26,50 @@ run as a process group leader (e.g., using `chpst -P`). If using Omnibus or the
The MemoryKiller is controlled using environment variables.
-- `SIDEKIQ_MEMORY_KILLER_MAX_RSS`: if this variable is set, and its value is
- greater than 0, then after each Sidekiq job, the MemoryKiller will check the
- RSS of the Sidekiq process that executed the job. If the RSS of the Sidekiq
- process (expressed in kilobytes) exceeds SIDEKIQ_MEMORY_KILLER_MAX_RSS, a
- delayed shutdown is triggered. The default value for Omnibus packages is set
- [in the omnibus-gitlab
+- `SIDEKIQ_DAEMON_MEMORY_KILLER`: defaults to 0. When set to 1, the MemoryKiller
+ works in _daemon_ mode. Otherwise, the MemoryKiller works in _legacy_ mode.
+
+ In _legacy_ mode, the MemoryKiller checks the Sidekiq process RSS after each job.
+
+ In _daemon_ mode, the MemoryKiller checks the Sidekiq process RSS every 3 seconds
+ (defined by `SIDEKIQ_MEMORY_KILLER_CHECK_INTERVAL`).
+
+- `SIDEKIQ_MEMORY_KILLER_MAX_RSS`: if this variable is set, and its value is greater
+ than 0, the MemoryKiller is enabled. Otherwise the MemoryKiller is disabled.
+
+ `SIDEKIQ_MEMORY_KILLER_MAX_RSS` defines the Sidekiq process allowed RSS.
+
+ In _legacy_ mode, if the Sidekiq process exceeds the allowed RSS then an irreversible
+ delayed graceful restart will be triggered. The restart of Sidekiq will happen
+ after `SIDEKIQ_MEMORY_KILLER_GRACE_TIME` seconds.
+
+ In _daemon_ mode, if the Sidekiq process exceeds the allowed RSS for longer than
+ `SIDEKIQ_MEMORY_KILLER_GRACE_TIME` the graceful restart will be triggered. If the
+ Sidekiq process go below the allowed RSS within `SIDEKIQ_MEMORY_KILLER_GRACE_TIME`,
+ the restart will be aborted.
+
+ The default value for Omnibus packages is set
+ [in the Omnibus GitLab
repository](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/attributes/default.rb).
-- `SIDEKIQ_MEMORY_KILLER_GRACE_TIME`: defaults to 900 seconds (15 minutes). When
- a shutdown is triggered, the Sidekiq process will keep working normally for
- another 15 minutes.
-- `SIDEKIQ_MEMORY_KILLER_SHUTDOWN_WAIT`: defaults to 30 seconds. When the grace
- time has expired, the MemoryKiller tells Sidekiq to stop accepting new jobs.
- Existing jobs get 30 seconds to finish. After that, the MemoryKiller tells
- Sidekiq to shut down, and an external supervision mechanism (e.g. Runit) must
- restart Sidekiq.
+
+- `SIDEKIQ_MEMORY_KILLER_HARD_LIMIT_RSS`: is used by _daemon_ mode. If the Sidekiq
+ process RSS (expressed in kilobytes) exceeds `SIDEKIQ_MEMORY_KILLER_HARD_LIMIT_RSS`,
+ an immediate graceful restart of Sidekiq is triggered.
+
+- `SIDEKIQ_MEMORY_KILLER_CHECK_INTERVAL`: used in _daemon_ mode to define how
+ often to check process RSS, default to 3 seconds.
+
+- `SIDEKIQ_MEMORY_KILLER_GRACE_TIME`: defaults to 900 seconds (15 minutes).
+ The usage of this variable is described as part of `SIDEKIQ_MEMORY_KILLER_MAX_RSS`.
+
+- `SIDEKIQ_MEMORY_KILLER_SHUTDOWN_WAIT`: defaults to 30 seconds. This defines the
+ maximum time allowed for all Sidekiq jobs to finish. No new jobs will be accepted
+ during that time, and the process will exit as soon as all jobs finish.
+
+ If jobs do not finish during that time, the MemoryKiller will interrupt all currently
+ running jobs by sending `SIGTERM` to the Sidekiq process.
+
+ If the process hard shutdown/restart is not performed by Sidekiq,
+ the Sidekiq process will be forcefully terminated after
+ `Sidekiq.options[:timeout] * 2` seconds. An external supervision mechanism
+ (e.g. runit) must restart Sidekiq afterwards.
diff --git a/doc/administration/operations/ssh_certificates.md b/doc/administration/operations/ssh_certificates.md
index 3792bcd3bca..2a9a4cff34e 100644
--- a/doc/administration/operations/ssh_certificates.md
+++ b/doc/administration/operations/ssh_certificates.md
@@ -3,7 +3,7 @@
> [Available in](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/19911) GitLab
> Community Edition 11.2.
-GitLab's default SSH authentication requires users to upload their ssh
+GitLab's default SSH authentication requires users to upload their SSH
public keys before they can use the SSH transport.
In centralized (e.g. corporate) environments this can be a hassle
diff --git a/doc/administration/operations/unicorn.md b/doc/administration/operations/unicorn.md
index 8178cb243f3..969f1211643 100644
--- a/doc/administration/operations/unicorn.md
+++ b/doc/administration/operations/unicorn.md
@@ -40,7 +40,7 @@ master process has PID 56227 below.
The main tunables for Unicorn are the number of worker processes and the
request timeout after which the Unicorn master terminates a worker process.
-See the [omnibus-gitlab Unicorn settings
+See the [Omnibus GitLab Unicorn settings
documentation](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/unicorn.md)
if you want to adjust these settings.
diff --git a/doc/administration/packages/container_registry.md b/doc/administration/packages/container_registry.md
index b5320d39d92..bf86a549fda 100644
--- a/doc/administration/packages/container_registry.md
+++ b/doc/administration/packages/container_registry.md
@@ -5,8 +5,8 @@
> Docker versions earlier than 1.10.
NOTE: **Note:**
-This document is about the admin guide. To learn how to use GitLab Container
-Registry [user documentation](../../user/packages/container_registry/index.md).
+This document is the administrator's guide. To learn how to use GitLab Container
+Registry, see the [user documentation](../../user/packages/container_registry/index.md).
With the Container Registry integrated into GitLab, every project can have its
own space to store its Docker images.
@@ -37,7 +37,7 @@ If you have installed GitLab from source:
1. After the installation is complete, you will have to configure the Registry's
settings in `gitlab.yml` in order to enable it.
1. Use the sample NGINX configuration file that is found under
- [`lib/support/nginx/registry-ssl`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/support/nginx/registry-ssl) and edit it to match the
+ [`lib/support/nginx/registry-ssl`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/nginx/registry-ssl) and edit it to match the
`host`, `port` and TLS certs paths.
The contents of `gitlab.yml` are:
@@ -360,9 +360,9 @@ The different supported drivers are:
| Driver | Description |
|------------|-------------------------------------|
| filesystem | Uses a path on the local filesystem |
-| azure | Microsoft Azure Blob Storage |
+| Azure | Microsoft Azure Blob Storage |
| gcs | Google Cloud Storage |
-| s3 | Amazon Simple Storage Service. Be sure to configure your storage bucket with the correct [S3 Permission Scopes](https://docs.docker.com/registry/storage-drivers/s3/#s3-permission-scopes). |
+| s3 | Amazon Simple Storage Service. Be sure to configure your storage bucket with the correct [S3 Permission Scopes](https://docs.docker.com/registry/storage-drivers/s3/#s3-permission-scopes). |
| swift | OpenStack Swift Object Storage |
| oss | Aliyun OSS |
@@ -374,7 +374,7 @@ filesystem. Remember to enable backups with your object storage provider if
desired.
NOTE: **Note:**
-`regionendpoint` is only required when configuring an S3 compatible service such as Minio. It takes a URL such as `http://127.0.0.1:9000`.
+`regionendpoint` is only required when configuring an S3 compatible service such as MinIO. It takes a URL such as `http://127.0.0.1:9000`.
**Omnibus GitLab installations**
@@ -877,6 +877,6 @@ The above image shows:
- The HEAD request to the AWS bucket reported a 403 Unauthorized.
What does this mean? This strongly suggests that the S3 user does not have the right
-[permissions to perform a HEAD request](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html).
+[permissions to perform a HEAD request](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html).
The solution: check the [IAM permissions again](https://docs.docker.com/registry/storage-drivers/s3/).
Once the right permissions were set, the error will go away.
diff --git a/doc/administration/packages/index.md b/doc/administration/packages/index.md
index 99ec5811681..d4afc65577e 100644
--- a/doc/administration/packages/index.md
+++ b/doc/administration/packages/index.md
@@ -8,6 +8,7 @@ The Packages feature allows GitLab to act as a repository for the following:
| Software repository | Description | Available in GitLab version |
| ------------------- | ----------- | --------------------------- |
+| [Conan Repository](../../user/packages/conan_repository/index.md) | The GitLab Conan Repository enables every project in GitLab to have its own space to store [Conan](https://conan.io/) packages. | 12.4+ |
| [Maven Repository](../../user/packages/maven_repository/index.md) | The GitLab Maven Repository enables every project in GitLab to have its own space to store [Maven](https://maven.apache.org/) packages. | 11.3+ |
| [NPM Registry](../../user/packages/npm_registry/index.md) | The GitLab NPM Registry enables every project in GitLab to have its own space to store [NPM](https://www.npmjs.com/) packages. | 11.7+ |
diff --git a/doc/administration/pages/index.md b/doc/administration/pages/index.md
index 41a372c4aeb..cacfb73451c 100644
--- a/doc/administration/pages/index.md
+++ b/doc/administration/pages/index.md
@@ -13,10 +13,6 @@ description: 'Learn how to administer GitLab Pages.'
GitLab Pages allows for hosting of static sites. It must be configured by an
administrator. Separate [user documentation][pages-userguide] is available.
-Read the [changelog](#changelog) if you are upgrading to a new GitLab
-version as it may include new features and changes needed to be made in your
-configuration.
-
NOTE: **Note:**
This guide is for Omnibus GitLab installations. If you have installed
GitLab from source, see
@@ -119,7 +115,7 @@ since that is needed in all configurations.
URL scheme: `http://page.example.io`
This is the minimum setup that you can use Pages with. It is the base for all
-other setups as described below. Nginx will proxy all requests to the daemon.
+other setups as described below. NGINX will proxy all requests to the daemon.
The Pages daemon doesn't listen to the outside world.
1. Set the external URL for GitLab Pages in `/etc/gitlab/gitlab.rb`:
@@ -143,7 +139,7 @@ Watch the [video tutorial][video-admin] for this configuration.
URL scheme: `https://page.example.io`
-Nginx will proxy all requests to the daemon. Pages daemon doesn't listen to the
+NGINX will proxy all requests to the daemon. Pages daemon doesn't listen to the
outside world.
1. Place the certificate and key inside `/etc/gitlab/ssl`
@@ -200,7 +196,7 @@ you have IPv6 as well as IPv4 addresses, you can use them both.
URL scheme: `http://page.example.io` and `http://domain.com`
-In that case, the Pages daemon is running, Nginx still proxies requests to
+In that case, the Pages daemon is running, NGINX still proxies requests to
the daemon but the daemon is also able to receive requests from the outside
world. Custom domains are supported, but no TLS.
@@ -231,7 +227,7 @@ world. Custom domains are supported, but no TLS.
URL scheme: `https://page.example.io` and `https://domain.com`
-In that case, the Pages daemon is running, Nginx still proxies requests to
+In that case, the Pages daemon is running, NGINX still proxies requests to
the daemon but the daemon is also able to receive requests from the outside
world. Custom domains and TLS are supported.
@@ -309,7 +305,7 @@ Pages access control is disabled by default. To enable it:
```
1. [Reconfigure GitLab][reconfigure].
-1. Users can now configure it in their [projects' settings](../../user/project/pages/introduction.md#gitlab-pages-access-control-core-only).
+1. Users can now configure it in their [projects' settings](../../user/project/pages/introduction.md#gitlab-pages-access-control-core).
### Running behind a proxy
@@ -323,7 +319,7 @@ pages:
gitlab_pages['http_proxy'] = 'http://example:8080'
```
-1. [Reconfigure Gitlab][reconfigure] for the changes to take effect.
+1. [Reconfigure GitLab][reconfigure] for the changes to take effect.
## Activate verbose logging for daemon
@@ -430,37 +426,9 @@ Pages are part of the [regular backup][backup] so there is nothing to configure.
## Security
-You should strongly consider running GitLab pages under a different hostname
+You should strongly consider running GitLab Pages under a different hostname
than GitLab to prevent XSS attacks.
-## Changelog
-
-GitLab Pages were first introduced in GitLab EE 8.3. Since then, many features
-where added, like custom CNAME and TLS support, and many more are likely to
-come. Below is a brief changelog. If no changes were introduced or a version is
-missing from the changelog, assume that the documentation is the same as the
-latest previous version.
-
----
-
-**GitLab 8.17 ([documentation](https://gitlab.com/gitlab-org/gitlab-foss/blob/8-17-stable/doc/administration/pages/index.md))**
-
-- GitLab Pages were ported to Community Edition in GitLab 8.17.
-- Documentation was refactored to be more modular and easy to follow.
-
-**GitLab 8.5 ([documentation](https://gitlab.com/gitlab-org/gitlab/blob/8-5-stable-ee/doc/pages/administration.md))**
-
-- In GitLab 8.5 we introduced the [gitlab-pages][] daemon which is now the
- recommended way to set up GitLab Pages.
-- The [NGINX configs][] have changed to reflect this change. So make sure to
- update them.
-- Custom CNAME and TLS certificates support.
-- Documentation was moved to one place.
-
-**GitLab 8.3 ([documentation](https://gitlab.com/gitlab-org/gitlab/blob/8-3-stable-ee/doc/pages/administration.md))**
-
-- GitLab Pages feature was introduced.
-
[backup]: ../../raketasks/backup_restore.md
[ce-14605]: https://gitlab.com/gitlab-org/gitlab-foss/issues/14605
[ee-80]: https://gitlab.com/gitlab-org/gitlab/merge_requests/80
diff --git a/doc/administration/pages/source.md b/doc/administration/pages/source.md
index bacfa0117bb..be8bba3c95b 100644
--- a/doc/administration/pages/source.md
+++ b/doc/administration/pages/source.md
@@ -93,7 +93,7 @@ since that is needed in all configurations.
URL scheme: `http://page.example.io`
This is the minimum setup that you can use Pages with. It is the base for all
-other setups as described below. Nginx will proxy all requests to the daemon.
+other setups as described below. NGINX will proxy all requests to the daemon.
The Pages daemon doesn't listen to the outside world.
1. Install the Pages daemon:
@@ -136,7 +136,7 @@ The Pages daemon doesn't listen to the outside world.
gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090"
```
-1. Copy the `gitlab-pages` Nginx configuration file:
+1. Copy the `gitlab-pages` NGINX configuration file:
```bash
sudo cp lib/support/nginx/gitlab-pages /etc/nginx/sites-available/gitlab-pages.conf
@@ -155,7 +155,7 @@ The Pages daemon doesn't listen to the outside world.
URL scheme: `https://page.example.io`
-Nginx will proxy all requests to the daemon. Pages daemon doesn't listen to the
+NGINX will proxy all requests to the daemon. Pages daemon doesn't listen to the
outside world.
1. Install the Pages daemon:
@@ -193,7 +193,7 @@ outside world.
gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090 -root-cert /path/to/example.io.crt -root-key /path/to/example.io.key
```
-1. Copy the `gitlab-pages-ssl` Nginx configuration file:
+1. Copy the `gitlab-pages-ssl` NGINX configuration file:
```bash
sudo cp lib/support/nginx/gitlab-pages-ssl /etc/nginx/sites-available/gitlab-pages-ssl.conf
@@ -219,7 +219,7 @@ that without TLS certificates.
URL scheme: `http://page.example.io` and `http://domain.com`
-In that case, the pages daemon is running, Nginx still proxies requests to
+In that case, the pages daemon is running, NGINX still proxies requests to
the daemon but the daemon is also able to receive requests from the outside
world. Custom domains are supported, but no TLS.
@@ -261,7 +261,7 @@ world. Custom domains are supported, but no TLS.
gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090 -listen-http 192.0.2.2:80"
```
-1. Copy the `gitlab-pages-ssl` Nginx configuration file:
+1. Copy the `gitlab-pages-ssl` NGINX configuration file:
```bash
sudo cp lib/support/nginx/gitlab-pages /etc/nginx/sites-available/gitlab-pages.conf
@@ -284,7 +284,7 @@ world. Custom domains are supported, but no TLS.
URL scheme: `https://page.example.io` and `https://domain.com`
-In that case, the pages daemon is running, Nginx still proxies requests to
+In that case, the pages daemon is running, NGINX still proxies requests to
the daemon but the daemon is also able to receive requests from the outside
world. Custom domains and TLS are supported.
@@ -330,7 +330,7 @@ world. Custom domains and TLS are supported.
gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090 -listen-http 192.0.2.2:80 -listen-https 192.0.2.2:443 -root-cert /path/to/example.io.crt -root-key /path/to/example.io.key
```
-1. Copy the `gitlab-pages-ssl` Nginx configuration file:
+1. Copy the `gitlab-pages-ssl` NGINX configuration file:
```bash
sudo cp lib/support/nginx/gitlab-pages-ssl /etc/nginx/sites-available/gitlab-pages-ssl.conf
@@ -351,7 +351,7 @@ The following information applies only for installations from source.
Be extra careful when setting up the domain name in the NGINX config. You must
not remove the backslashes.
-If your GitLab pages domain is `example.io`, replace:
+If your GitLab Pages domain is `example.io`, replace:
```bash
server_name ~^.*\.YOUR_GITLAB_PAGES\.DOMAIN$;
@@ -401,7 +401,7 @@ Pages access control is disabled by default. To enable it:
1. Create a new [system OAuth application](../../integration/oauth_provider.md#adding-an-application-through-the-profile).
This should be called `GitLab Pages` and have a `Redirect URL` of
`https://projects.example.io/auth`. It does not need to be a "trusted"
- application, but it does need the "api" scope.
+ application, but it does need the `api` scope.
1. Start the Pages daemon with the following additional arguments:
```shell
@@ -411,7 +411,7 @@ Pages access control is disabled by default. To enable it:
-auth-server <URL of the GitLab instance>
```
-1. Users can now configure it in their [projects' settings](../../user/project/pages/introduction.md#gitlab-pages-access-control-core-only).
+1. Users can now configure it in their [projects' settings](../../user/project/pages/introduction.md#gitlab-pages-access-control-core).
## Change storage path
@@ -443,7 +443,7 @@ Pages are part of the [regular backup][backup] so there is nothing to configure.
## Security
-You should strongly consider running GitLab pages under a different hostname
+You should strongly consider running GitLab Pages under a different hostname
than GitLab to prevent XSS attacks.
[backup]: ../../raketasks/backup_restore.md
@@ -455,5 +455,5 @@ than GitLab to prevent XSS attacks.
[pages-userguide]: ../../user/project/pages/index.md
[restart]: ../restart_gitlab.md#installations-from-source
[gitlab-pages]: https://gitlab.com/gitlab-org/gitlab-pages/tree/v0.4.0
-[gl-example]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/support/init.d/gitlab.default.example
+[gl-example]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/init.d/gitlab.default.example
[shared runners]: ../../ci/runners/README.md
diff --git a/doc/administration/raketasks/check.md b/doc/administration/raketasks/check.md
index d8f80965c21..eb230f02c0d 100644
--- a/doc/administration/raketasks/check.md
+++ b/doc/administration/raketasks/check.md
@@ -8,7 +8,7 @@ help GitLab administrators diagnose problem repositories so they can be fixed.
There are 3 things that are checked to determine integrity.
-1. Git repository file system check ([git fsck](https://git-scm.com/docs/git-fsck)).
+1. Git repository file system check ([`git fsck`](https://git-scm.com/docs/git-fsck)).
This step verifies the connectivity and validity of objects in the repository.
1. Check for `config.lock` in the repository directory.
1. Check for any branch/references lock files in `refs/heads`.
diff --git a/doc/administration/raketasks/geo.md b/doc/administration/raketasks/geo.md
index 387bc71965b..09f72c3411d 100644
--- a/doc/administration/raketasks/geo.md
+++ b/doc/administration/raketasks/geo.md
@@ -2,7 +2,7 @@
## Git housekeeping
-There are few tasks you can run to schedule a git housekeeping to start at the
+There are few tasks you can run to schedule a Git housekeeping to start at the
next repository sync in a **Secondary node**:
### Incremental Repack
diff --git a/doc/administration/raketasks/maintenance.md b/doc/administration/raketasks/maintenance.md
index 89335fcd2a8..e63e0c40393 100644
--- a/doc/administration/raketasks/maintenance.md
+++ b/doc/administration/raketasks/maintenance.md
@@ -62,7 +62,7 @@ It will check that each component was set up according to the installation guide
You may also have a look at our Troubleshooting Guides:
- [Troubleshooting Guide (GitLab)](../index.md#troubleshooting)
-- [Troubleshooting Guide (Omnibus Gitlab)](https://docs.gitlab.com/omnibus/README.html#troubleshooting)
+- [Troubleshooting Guide (Omnibus GitLab)](https://docs.gitlab.com/omnibus/README.html#troubleshooting)
**Omnibus Installation**
@@ -76,7 +76,7 @@ sudo gitlab-rake gitlab:check
bundle exec rake gitlab:check RAILS_ENV=production
```
-NOTE: Use SANITIZE=true for gitlab:check if you want to omit project names from the output.
+NOTE: Use `SANITIZE=true` for `gitlab:check` if you want to omit project names from the output.
Example output:
@@ -146,7 +146,7 @@ You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? yes
```
-## Clear redis cache
+## Clear Redis cache
If for some reason the dashboard shows wrong information you might want to
clear Redis' cache.
@@ -183,7 +183,7 @@ For omnibus versions, the unoptimized assets (JavaScript, CSS) are frozen at
the release of upstream GitLab. The omnibus version includes optimized versions
of those assets. Unless you are modifying the JavaScript / CSS code on your
production machine after installing the package, there should be no reason to redo
-rake gitlab:assets:compile on the production machine. If you suspect that assets
+`rake gitlab:assets:compile` on the production machine. If you suspect that assets
have been corrupted, you should reinstall the omnibus package.
## Tracking Deployments
diff --git a/doc/administration/raketasks/uploads/migrate.md b/doc/administration/raketasks/uploads/migrate.md
index d9b4c9b3369..517d6b01438 100644
--- a/doc/administration/raketasks/uploads/migrate.md
+++ b/doc/administration/raketasks/uploads/migrate.md
@@ -113,3 +113,39 @@ To migrate all uploads created by legacy uploaders, run:
```shell
bundle exec rake gitlab:uploads:legacy:migrate
```
+
+## Migrate from object storage to local storage
+
+If you need to disable Object Storage for any reason, first you need to migrate
+your data out of Object Storage and back into your local storage.
+
+**Before proceeding, it is important to disable both `direct_upload` and `background_upload` under `uploads` settings in `gitlab.rb`**
+
+CAUTION: **Warning:**
+ **Extended downtime is required** so no new files are created in object storage during
+ the migration. A configuration setting will be added soon to allow migrating
+ from object storage to local files with only a brief moment of downtime for configuration changes.
+ See issue [gitlab-org/gitlab#30979](https://gitlab.com/gitlab-org/gitlab/issues/30979)
+
+### All-in-one rake task
+
+GitLab provides a wrapper rake task that migrates all uploaded files - avatars,
+logos, attachments, favicon, etc. - to local storage in one go. Under the hood,
+it invokes individual rake tasks to migrate files falling under each of this
+category one by one. For details on these rake tasks please [refer to the section above](#individual-rake-tasks),
+keeping in mind the task name in this case is `gitlab:uploads:migrate_to_local`.
+
+**Omnibus Installation**
+
+```bash
+gitlab-rake "gitlab:uploads:migrate_to_local:all"
+```
+
+**Source Installation**
+
+```bash
+sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:migrate_to_local:all
+```
+
+After this is done, you may disable Object Storage by undoing the changes described
+in the instructions to [configure object storage](../../uploads.md#using-object-storage-core-only)
diff --git a/doc/administration/repository_storage_paths.md b/doc/administration/repository_storage_paths.md
index 376eb90deea..7d3e36e9796 100644
--- a/doc/administration/repository_storage_paths.md
+++ b/doc/administration/repository_storage_paths.md
@@ -118,6 +118,6 @@ randomly placed on one of the selected paths.
[restart-gitlab]: restart_gitlab.md#installations-from-source
[reconfigure-gitlab]: restart_gitlab.md#omnibus-gitlab-reconfigure
[backups]: ../raketasks/backup_restore.md
-[raketask]: https://gitlab.com/gitlab-org/gitlab-foss/blob/033e5423a2594e08a7ebcd2379bd2331f4c39032/lib/backup/repository.rb#L54-56
-[repospath]: https://gitlab.com/gitlab-org/gitlab-foss/blob/8-9-stable/config/gitlab.yml.example#L457
+[raketask]: https://gitlab.com/gitlab-org/gitlab/blob/033e5423a2594e08a7ebcd2379bd2331f4c39032/lib/backup/repository.rb#L54-56
+[repospath]: https://gitlab.com/gitlab-org/gitlab/blob/8-9-stable/config/gitlab.yml.example#L457
[ce-11449]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/11449
diff --git a/doc/administration/repository_storage_types.md b/doc/administration/repository_storage_types.md
index 5f6738dc190..227d6928baf 100644
--- a/doc/administration/repository_storage_types.md
+++ b/doc/administration/repository_storage_types.md
@@ -10,7 +10,7 @@ that can be:
- Mounted to the local disk
- Exposed as an NFS shared volume
-- Accessed via [gitaly] on its own machine.
+- Accessed via [Gitaly] on its own machine.
In GitLab, this is configured in `/etc/gitlab/gitlab.rb` by the `git_data_dirs({})`
configuration hash. The storage layouts discussed here will apply to any shard
diff --git a/doc/administration/restart_gitlab.md b/doc/administration/restart_gitlab.md
index 169a220b9a9..9f95080654f 100644
--- a/doc/administration/restart_gitlab.md
+++ b/doc/administration/restart_gitlab.md
@@ -141,5 +141,5 @@ If you are using other init systems, like systemd, you can check the
[install]: ../install/installation.md "Documentation to install GitLab from source"
[mailroom]: reply_by_email.md "Used for replying by email in GitLab issues and merge requests"
[chef]: https://www.chef.io/products/chef-infra/ "Chef official website"
-[src-service]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/support/init.d/gitlab "GitLab init service file"
+[src-service]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/init.d/gitlab "GitLab init service file"
[gl-recipes]: https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/init "GitLab Recipes repository"
diff --git a/doc/administration/smime_signing_email.md b/doc/administration/smime_signing_email.md
index 530553ec1c4..60cab22d1f4 100644
--- a/doc/administration/smime_signing_email.md
+++ b/doc/administration/smime_signing_email.md
@@ -1,6 +1,6 @@
# Signing outgoing email with S/MIME
-Notification emails sent by Gitlab can be signed with S/MIME for improved
+Notification emails sent by GitLab can be signed with S/MIME for improved
security.
> **Note:**
diff --git a/doc/administration/troubleshooting/debug.md b/doc/administration/troubleshooting/debug.md
index 562624fc9dc..3007b711405 100644
--- a/doc/administration/troubleshooting/debug.md
+++ b/doc/administration/troubleshooting/debug.md
@@ -89,10 +89,10 @@ in Omnibus, run as root:
Many of the tips to diagnose issues below apply to many different situations. We'll use one
concrete example to illustrate what you can do to learn what is going wrong.
-### 502 Gateway Timeout after unicorn spins at 100% CPU
+### 502 Gateway Timeout after Unicorn spins at 100% CPU
This error occurs when the Web server times out (default: 60 s) after not
-hearing back from the unicorn worker. If the CPU spins to 100% while this in
+hearing back from the Unicorn worker. If the CPU spins to 100% while this in
progress, there may be something taking longer than it should.
To fix this issue, we first need to figure out what is happening. The
@@ -100,7 +100,7 @@ following tips are only recommended if you do NOT mind users being affected by
downtime. Otherwise skip to the next section.
1. Load the problematic URL
-1. Run `sudo gdb -p <PID>` to attach to the unicorn process.
+1. Run `sudo gdb -p <PID>` to attach to the Unicorn process.
1. In the gdb window, type:
```
@@ -135,7 +135,7 @@ downtime. Otherwise skip to the next section.
exit
```
-Note that if the unicorn process terminates before you are able to run these
+Note that if the Unicorn process terminates before you are able to run these
commands, gdb will report an error. To buy more time, you can always raise the
Unicorn timeout. For omnibus users, you can edit `/etc/gitlab/gitlab.rb` and
increase it from 60 seconds to 300:
@@ -152,7 +152,7 @@ For source installations, edit `config/unicorn.rb`.
#### Troubleshooting without affecting other users
-The previous section attached to a running unicorn process, and this may have
+The previous section attached to a running Unicorn process, and this may have
undesirable effects for users trying to access GitLab during this time. If you
are concerned about affecting others during a production system, you can run a
separate Rails process to debug the issue:
@@ -183,7 +183,7 @@ separate Rails process to debug the issue:
### GitLab: API is not accessible
-This often occurs when gitlab-shell attempts to request authorization via the
+This often occurs when GitLab Shell attempts to request authorization via the
internal API (e.g., `http://localhost:8080/api/v4/internal/allowed`), and
something in the check fails. There are many reasons why this may happen:
@@ -192,7 +192,7 @@ something in the check fails. There are many reasons why this may happen:
1. Error accessing the repository (e.g., stale NFS handles)
To diagnose this problem, try to reproduce the problem and then see if there
-is a unicorn worker that is spinning via `top`. Try to use the `gdb`
+is a Unicorn worker that is spinning via `top`. Try to use the `gdb`
techniques above. In addition, using `strace` may help isolate issues:
```shell
@@ -211,5 +211,5 @@ The output in `/tmp/unicorn.txt` may help diagnose the root cause.
## More information
-- [Debugging Stuck Ruby Processes](https://blog.newrelic.com/2013/04/29/debugging-stuck-ruby-processes-what-to-do-before-you-kill-9/)
+- [Debugging Stuck Ruby Processes](https://blog.newrelic.com/engineering/debugging-stuck-ruby-processes-what-to-do-before-you-kill-9/)
- [Cheatsheet of using gdb and ruby processes](gdb-stuck-ruby.txt)
diff --git a/doc/administration/troubleshooting/elasticsearch.md b/doc/administration/troubleshooting/elasticsearch.md
index 13b9c30b29d..37ec32413f8 100644
--- a/doc/administration/troubleshooting/elasticsearch.md
+++ b/doc/administration/troubleshooting/elasticsearch.md
@@ -1,6 +1,6 @@
-# Troubleshooting ElasticSearch
+# Troubleshooting Elasticsearch
-Troubleshooting ElasticSearch requires:
+Troubleshooting Elasticsearch requires:
- Knowledge of common terms.
- Establishing within which category the problem fits.
@@ -30,7 +30,7 @@ The type of problem will determine what steps to take. The possible troubleshoot
### Search Results workflow
-The following workflow is for ElasticSearch search results issues:
+The following workflow is for Elasticsearch search results issues:
```mermaid
graph TD;
@@ -42,11 +42,11 @@ graph TD;
B5 --> |Yes| B6
B5 --> |No| B7
B7 --> B8
- B{Is GitLab using<br>ElasticSearch for<br>searching?}
+ B{Is GitLab using<br>Elasticsearch for<br>searching?}
B1[Check Admin Area > Integrations<br>to ensure the settings are correct]
B2[Perform a search via<br>the rails console]
- B3[If all settings are correct<br>and it still doesn't show ElasticSearch<br>doing the searches, escalate<br>to GitLab support.]
- B4[Perform<br>the same search via the<br>ElasticSearch API]
+ B3[If all settings are correct<br>and it still doesn't show Elasticsearch<br>doing the searches, escalate<br>to GitLab support.]
+ B4[Perform<br>the same search via the<br>Elasticsearch API]
B5{Are the results<br>the same?}
B6[This means it is working as intended.<br>Speak with GitLab support<br>to confirm if the issue lies with<br>the filters.]
B7[Check the index status of the project<br>containing the missing search<br>results.]
@@ -55,7 +55,7 @@ graph TD;
### Indexing workflow
-The following workflow is for ElasticSearch indexing issues:
+The following workflow is for Elasticsearch indexing issues:
```mermaid
graph TD;
@@ -67,7 +67,7 @@ graph TD;
C --> |No| C6
C6 --> |No| C10
C7 --> |GitLab| C8
- C7 --> |ElasticSearch| C9
+ C7 --> |Elasticsearch| C9
C6 --> |Yes| C7
C10 --> |No| C12
C10 --> |Yes| C11
@@ -76,27 +76,27 @@ graph TD;
C14 --> |Yes| C15
C14 --> |No| C16
C{Is the problem with<br>creating an empty<br>index?}
- C1{Does the gitlab-production<br>index exist on the<br>ElasticSearch instance?}
- C2(Try to manually<br>delete the index on the<br>ElasticSearch instance and<br>retry creating an empty index.)
- C3{Can indices be made<br>manually on the ElasticSearch<br>instance?}
+ C1{Does the gitlab-production<br>index exist on the<br>Elasticsearch instance?}
+ C2(Try to manually<br>delete the index on the<br>Elasticsearch instance and<br>retry creating an empty index.)
+ C3{Can indices be made<br>manually on the Elasticsearch<br>instance?}
C4(Retry the creation of an empty index)
- C5(It is best to speak with an<br>ElasticSearch admin concerning the<br>instance's inability to create indices.)
+ C5(It is best to speak with an<br>Elasticsearch admin concerning the<br>instance's inability to create indices.)
C6{Is the indexer presenting<br>errors during indexing?}
- C7{Is the error a GitLab<br>error or an ElasticSearch<br>error?}
+ C7{Is the error a GitLab<br>error or an Elasticsearch<br>error?}
C8[Escalate to<br>GitLab support]
- C9[You will want<br>to speak with an<br>ElasticSearch admin.]
+ C9[You will want<br>to speak with an<br>Elasticsearch admin.]
C10{Does the index status<br>show 100%?}
C11[Escalate to<br>GitLab support]
C12{Does re-indexing the project<br> present any GitLab errors?}
C13[Rectify the GitLab errors and<br>restart troubleshooting, or<br>escalate to GitLab support.]
- C14{Does re-indexing the project<br>present errors on the <br>ElasticSearch instance?}
- C15[It would be best<br>to speak with an<br>ElasticSearch admin.]
+ C14{Does re-indexing the project<br>present errors on the <br>Elasticsearch instance?}
+ C15[It would be best<br>to speak with an<br>Elasticsearch admin.]
C16[This is likely a bug/issue<br>in GitLab and will require<br>deeper investigation. Escalate<br>to GitLab support.]
```
### Integration workflow
-The following workflow is for ElasticSearch integration issues:
+The following workflow is for Elasticsearch integration issues:
```mermaid
graph TD;
@@ -107,7 +107,7 @@ graph TD;
D4 --> |No| D5
D4 --> |Yes| D6
D{Is the error concerning<br>the beta indexer?}
- D1[It would be best<br>to speak with an<br>ElasticSearch admin.]
+ D1[It would be best<br>to speak with an<br>Elasticsearch admin.]
D2{Is the ICU development<br>package installed?}
D3>This package is required.<br>Install the package<br>and retry.]
D4{Is the error stemming<br>from the indexer?}
@@ -117,7 +117,7 @@ graph TD;
### Performance workflow
-The following workflow is for ElasticSearch performance issues:
+The following workflow is for Elasticsearch performance issues:
```mermaid
graph TD;
@@ -128,19 +128,19 @@ graph TD;
F4 --> F5
F5 --> |No| F6
F5 --> |Yes| F7
- F{Is the ElasticSearch instance<br>running on the same server<br>as the GitLab instance?}
- F1(This is not advised and will cause issues.<br>We recommend moving the ElasticSearch<br>instance to a different server.)
- F2{Does the ElasticSearch<br>server have at least 8<br>GB of RAM and 2 CPU<br>cores?}
- F3(According to ElasticSearch, a non-prod<br>server needs these as a base requirement.<br>Production often requires more. We recommend<br>you increase the server specifications.)
+ F{Is the Elasticsearch instance<br>running on the same server<br>as the GitLab instance?}
+ F1(This is not advised and will cause issues.<br>We recommend moving the Elasticsearch<br>instance to a different server.)
+ F2{Does the Elasticsearch<br>server have at least 8<br>GB of RAM and 2 CPU<br>cores?}
+ F3(According to Elasticsearch, a non-prod<br>server needs these as a base requirement.<br>Production often requires more. We recommend<br>you increase the server specifications.)
F4(Obtain the <br>cluster health information)
F5(Does it show the<br>status as green?)
- F6(We recommend you speak with<br>an ElasticSearch admin<br>about implementing sharding.)
+ F6(We recommend you speak with<br>an Elasticsearch admin<br>about implementing sharding.)
F7(Escalate to<br>GitLab support.)
```
## Troubleshooting walkthrough
-Most ElasticSearch troubleshooting can be broken down into 4 categories:
+Most Elasticsearch troubleshooting can be broken down into 4 categories:
- [Troubleshooting search results](#troubleshooting-search-results)
- [Troubleshooting indexing](#troubleshooting-indexing)
@@ -150,19 +150,19 @@ Most ElasticSearch troubleshooting can be broken down into 4 categories:
Generally speaking, if it does not fall into those four categories, it is either:
- Something GitLab support needs to look into.
-- Not a true ElasticSearch issue.
+- Not a true Elasticsearch issue.
-Exercise caution. Issues that appear to be ElasticSearch problems can be OS-level issues.
+Exercise caution. Issues that appear to be Elasticsearch problems can be OS-level issues.
### Troubleshooting search results
-Troubleshooting search result issues is rather straight forward on ElasticSearch.
+Troubleshooting search result issues is rather straight forward on Elasticsearch.
-The first step is to confirm GitLab is using ElasticSearch for the search function.
+The first step is to confirm GitLab is using Elasticsearch for the search function.
To do this:
1. Confirm the integration is enabled in **Admin Area > Settings > Integrations**.
-1. Confirm searches utilize ElasticSearch by accessing the rails console
+1. Confirm searches utilize Elasticsearch by accessing the rails console
(`sudo gitlab-rails console`) and running the following commands:
```rails
@@ -173,21 +173,21 @@ To do this:
The ouput from the last command is the key here. If it shows:
-- `ActiveRecord::Relation`, **it is not** using ElasticSearch.
-- `Kaminari::PaginatableArray`, **it is** using ElasticSearch.
+- `ActiveRecord::Relation`, **it is not** using Elasticsearch.
+- `Kaminari::PaginatableArray`, **it is** using Elasticsearch.
-| Not using ElasticSearch | Using ElasticSearch |
+| Not using Elasticsearch | Using Elasticsearch |
|--------------------------|------------------------------|
| `ActiveRecord::Relation` | `Kaminari::PaginatableArray` |
-If all the settings look correct and it is still not using ElasticSearch for the search function, it is best to escalate to GitLab support. This could be a bug/issue.
+If all the settings look correct and it is still not using Elasticsearch for the search function, it is best to escalate to GitLab support. This could be a bug/issue.
-Moving past that, it is best to attempt the same search using the [ElasticSearch Search API](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html) and compare the results from what you see in GitLab.
+Moving past that, it is best to attempt the same search using the [Elasticsearch Search API](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html) and compare the results from what you see in GitLab.
If the results:
- Sync up, then there is not a technical "issue" per se. Instead, it might be a problem
- with the ElasticSearch filters we are using. This can be complicated, so it is best to
+ with the Elasticsearch filters we are using. This can be complicated, so it is best to
escalate to GitLab support to check these and guide you on the potential on whether or
not a feature request is needed.
- Do not match up, this indicates a problem with the documents generated from the
@@ -197,20 +197,20 @@ If the results:
### Troubleshooting indexing
Troubleshooting indexing issues can be tricky. It can pretty quickly go to either GitLab
-support or your ElasticSearch admin.
+support or your Elasticsearch admin.
The best place to start is to determine if the issue is with creating an empty index.
-If it is, check on the ElasticSearch side to determine if the `gitlab-production` (the
-name for the GitLab index) exists. If it exists, manually delete it on the ElasticSearch
+If it is, check on the Elasticsearch side to determine if the `gitlab-production` (the
+name for the GitLab index) exists. If it exists, manually delete it on the Elasticsearch
side and attempt to recreate it from the
[`create_empty_index`](../../integration/elasticsearch.md#gitlab-elasticsearch-rake-tasks)
rake task.
-If you still encounter issues, try creating an index manually on the ElasticSearch
+If you still encounter issues, try creating an index manually on the Elasticsearch
instance. The details of the index aren't important here, as we want to test if indices
can be made. If the indices:
-- Cannot be made, speak with your ElasticSearch admin.
+- Cannot be made, speak with your Elasticsearch admin.
- Can be made, Escalate this to GitLab support.
If the issue is not with creating an empty index, the next step is to check for errors
@@ -218,7 +218,7 @@ during the indexing of projects. If errors do occur, they will either stem from
- On the GitLab side. You need to rectify those. If they are not
something you are familiar with, contact GitLab support for guidance.
-- Within the ElasticSearch instance itself. See if the error is [documented and has a fix](../../integration/elasticsearch.md#troubleshooting). If not, speak with your ElasticSearch admin.
+- Within the Elasticsearch instance itself. See if the error is [documented and has a fix](../../integration/elasticsearch.md#troubleshooting). If not, speak with your Elasticsearch admin.
If the indexing process does not present errors, you will want to check the status of the indexed projects. You can do this via the following rake tasks:
@@ -235,8 +235,8 @@ If:
If reindexing the project shows:
- Errors on the GitLab side, escalate those to GitLab support.
-- ElasticSearch errors or doesn't present any errors at all, reach out to your
- ElasticSearch admin to check the instance.
+- Elasticsearch errors or doesn't present any errors at all, reach out to your
+ Elasticsearch admin to check the instance.
### Troubleshooting integration
@@ -246,7 +246,7 @@ much to "integrate" here.
If the issue is:
- Not concerning the beta indexer, it is almost always an
- ElasticSearch-side issue. This means you should reach out to your ElasticSearch admin
+ Elasticsearch-side issue. This means you should reach out to your Elasticsearch admin
regarding the error(s) you are seeing. If you are unsure here, it never hurts to reach
out to GitLab support.
- With the beta indexer, check if the ICU development package is installed.
@@ -260,48 +260,48 @@ Beyond that, you will want to review the error. If it is:
### Troubleshooting performance
-Troubleshooting performance can be difficult on ElasticSearch. There is a ton of tuning
+Troubleshooting performance can be difficult on Elasticsearch. There is a ton of tuning
that *can* be done, but the majority of this falls on shoulders of a skilled
-ElasticSearch administrator.
+Elasticsearch administrator.
Generally speaking, ensure:
-- The ElasticSearch server **is not** running on the same node as GitLab.
-- The ElasticSearch server have enough RAM and CPU cores.
+- The Elasticsearch server **is not** running on the same node as GitLab.
+- The Elasticsearch server have enough RAM and CPU cores.
- That sharding **is** being used.
-Going into some more detail here, if ElasticSearch is running on the same server as GitLab, resource contention is **very** likely to occur. Ideally, ElasticSearch, which requires ample resources, should be running on its own server (maybe coupled with logstash and kibana).
+Going into some more detail here, if Elasticsearch is running on the same server as GitLab, resource contention is **very** likely to occur. Ideally, Elasticsearch, which requires ample resources, should be running on its own server (maybe coupled with logstash and kibana).
-When it comes to ElasticSearch, RAM is the key resource. ElasticSearch themselves recommend:
+When it comes to Elasticsearch, RAM is the key resource. Elasticsearch themselves recommend:
- **At least** 8 GB of RAM for a non-production instance.
- **At least** 16 GB of RAM for a production instance.
- Ideally, 64 GB of RAM.
-For CPU, ElasticSearch recommends at least 2 CPU cores, but ElasticSearch states common
+For CPU, Elasticsearch recommends at least 2 CPU cores, but Elasticsearch states common
setups use up to 8 cores. For more details on server specs, check out
-[ElasticSearch's hardware guide](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html).
+[Elasticsearch's hardware guide](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html).
-Beyond the obvious, sharding comes into play. Sharding is a core part of ElasticSearch.
+Beyond the obvious, sharding comes into play. Sharding is a core part of Elasticsearch.
It allows for horizontal scaling of indices, which is helpful when you are dealing with
a large amount of data.
With the way GitLab does indexing, there is a **huge** amount of documents being
-indexed. By utilizing sharding, you can speed up ElasticSearch's ability to locate
+indexed. By utilizing sharding, you can speed up Elasticsearch's ability to locate
data, since each shard is a Lucene index.
If you are not using sharding, you are likely to hit issues when you start using
-ElasticSearch in a production environment.
+Elasticsearch in a production environment.
Keep in mind that an index with only one shard has **no scale factor** and will
likely encounter issues when called upon with some frequency.
If you need to know how many shards, read
-[ElasticSearch's documentation on capacity planning](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/capacity-planning.html),
+[Elasticsearch's documentation on capacity planning](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/capacity-planning.html),
as the answer is not straight forward.
The easiest way to determine if sharding is in use is to check the output of the
-[ElasticSearch Health API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html):
+[Elasticsearch Health API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html):
- Red means the cluster is down.
- Yellow means it is up with no sharding/replication.
@@ -311,11 +311,11 @@ For production use, it should always be green.
Beyond these steps, you get into some of the more complicated things to check,
such as merges and caching. These can get complicated and it takes some time to
-learn them, so it is best to escalate/pair with an ElasticSearch expert if you need to
+learn them, so it is best to escalate/pair with an Elasticsearch expert if you need to
dig further into these.
Feel free to reach out to GitLab support, but this is likely to be something a skilled
-ElasticSearch admin has more experience with.
+Elasticsearch admin has more experience with.
## Common issues
@@ -324,12 +324,12 @@ feel free to update that page with issues you encounter and solutions.
## Replication
-Setting up ElasticSearch isn't too bad, but it can be a bit finnicky and time consuming.
+Setting up Elasticsearch isn't too bad, but it can be a bit finnicky and time consuming.
The eastiest method is to spin up a docker container with the required version and
bind ports 9200/9300 so it can be used.
-The following is an example of running a docker container of ElasticSearch v7.2.0:
+The following is an example of running a docker container of Elasticsearch v7.2.0:
```bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.2.0
@@ -341,5 +341,5 @@ From here, you can:
- Grab the IP of the docker container (use `docker inspect <container_id>`)
- Use `<IP.add.re.ss:9200>` to communicate with it.
-This is a quick method to test out ElasticSearch, but by no means is this a
+This is a quick method to test out Elasticsearch, but by no means is this a
production solution.
diff --git a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
index a064dfbfbe2..34a5acbe7b7 100644
--- a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
+++ b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
@@ -4,7 +4,7 @@ type: reference
# GitLab Rails Console Cheat Sheet
-This is the GitLab Support Team's collection of information regarding the GitLab rails
+This is the GitLab Support Team's collection of information regarding the GitLab Rails
console, for use while troubleshooting. It is listed here for transparency,
and it may be useful for users with experience with these tools. If you are currently
having an issue with GitLab, it is highly recommended that you check your
@@ -556,6 +556,14 @@ parent.members_with_descendants.count
GroupDestroyWorker.perform_async(group_id, user_id)
```
+### Modify group project creation
+
+```ruby
+# Project creation levels: 0 - No one, 1 - Maintainers, 2 - Developers + Maintainers
+group = Group.find_by_path_or_name('group-name')
+group.project_creation_level=0
+```
+
## LDAP
### LDAP commands in the rails console
@@ -680,6 +688,15 @@ u = User.find_by_username('')
MergeRequests::PostMergeService.new(p, u).execute(m)
```
+### Delete a merge request
+
+```ruby
+u = User.find_by_username('<username>')
+p = Project.find_by_full_path('<group>/<project>')
+m = p.merge_requests.find_by(iid: <IID>)
+Issuable::DestroyService.new(m.project, u).execute(m)
+```
+
### Rebase manually
```ruby
@@ -693,7 +710,8 @@ MergeRequests::RebaseService.new(m.target_project, u).execute(m)
### Cancel stuck pending pipelines
-See <https://gitlab.com/gitlab-com/support-forum/issues/2449#note_41929707>.
+For more information, see the [confidential issue](../../user/project/issues/confidential_issues.md)
+`https://gitlab.com/gitlab-com/support-forum/issues/2449#note_41929707`.
```ruby
Ci::Pipeline.where(project_id: p.id).where(status: 'pending').count
@@ -715,13 +733,15 @@ Namespace.find_by_full_path("user/proj").namespace_statistics.update(shared_runn
project = Project.find_by_full_path('')
builds_with_artifacts = project.builds.with_artifacts_archive
-# Prior to 10.6 the above line would be:
-# builds_with_artifacts = project.builds.with_artifacts
-
# Instance-wide:
-builds_with_artifacts = Ci::Build.with_artifacts
+builds_with_artifacts = Ci::Build.with_artifacts_archive
+
+# Prior to 10.6 the above lines would be:
+# builds_with_artifacts = project.builds.with_artifacts
+# builds_with_artifacts = Ci::Build.with_artifacts
### CLEAR THEM OUT
+# Note that this will also erase artifacts that developers marked to "Keep"
builds_to_clear = builds_with_artifacts.where("finished_at < ?", 1.week.ago)
builds_to_clear.each do |build|
build.artifacts_expire_at = Time.now
@@ -812,7 +832,7 @@ License.current # check to make sure it applied
From [Zendesk ticket #91083](https://gitlab.zendesk.com/agent/tickets/91083) (internal)
-### Poll unicorn requests by seconds
+### Poll Unicorn requests by seconds
```ruby
require 'rubygems'
@@ -872,6 +892,23 @@ queue = Sidekiq::Queue.new('repository_import')
queue.each { |job| job.delete if <condition>}
```
+`<condition>` probably includes references to job arguments, which depend on the type of job in question.
+
+| queue | worker | job args |
+| ----- | ------ | -------- |
+| repository_import | RepositoryImportWorker | project_id |
+| update_merge_requests | UpdateMergeRequestsWorker | project_id, user_id, oldrev, newrev, ref |
+
+**Example:** Delete all UpdateMergeRequestsWorker jobs associated with a merge request on project_id 125,
+merging branch `ref/heads/my_branch`.
+
+```ruby
+queue = Sidekiq::Queue.new('update_merge_requests')
+queue.each { |job| job.delete if job.args[0]==125 and job.args[4]=='ref/heads/my_branch'}
+```
+
+**Note:** Running jobs will not be killed. Stop sidekiq before doing this, to get all matching jobs.
+
### Enable debug logging of Sidekiq
```ruby
@@ -888,13 +925,13 @@ See <https://github.com/mperham/sidekiq/wiki/Signals#ttin>.
## Redis
-### Connect to redis (omnibus)
+### Connect to Redis (omnibus)
```sh
/opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
```
-### Connect to redis (HA)
+### Connect to Redis (HA)
```sh
/opt/gitlab/embedded/bin/redis-cli -h <host ip> -a <password>
diff --git a/doc/administration/troubleshooting/kubernetes_cheat_sheet.md b/doc/administration/troubleshooting/kubernetes_cheat_sheet.md
index 1247060058b..7c2c2050b12 100644
--- a/doc/administration/troubleshooting/kubernetes_cheat_sheet.md
+++ b/doc/administration/troubleshooting/kubernetes_cheat_sheet.md
@@ -15,7 +15,7 @@ If you are on a [paid tier](https://about.gitlab.com/pricing/) and are not sure
to use these commands, it is best to [contact Support](https://about.gitlab.com/support/)
and they will assist you with any issues you are having.
-## Generic kubernetes commands
+## Generic Kubernetes commands
- How to authorize to your GCP project (can be especially useful if you have projects
under different GCP accounts):
@@ -33,7 +33,7 @@ and they will assist you with any issues you are having.
kubectl proxy
```
-- How to ssh to a Kubernetes node and enter the container as root
+- How to SSH to a Kubernetes node and enter the container as root
<https://github.com/kubernetes/kubernetes/issues/30656>:
- For GCP, you may find the node name and run `gcloud compute ssh node-name`.
@@ -72,12 +72,12 @@ and they will assist you with any issues you are having.
This is the principle of Kubernetes, read [Twelve-factor app](https://12factor.net/)
for details.
-## GitLab-specific kubernetes information
+## GitLab-specific Kubernetes information
-- Minimal config that can be used to test a Kubernetes helm chart can be found
+- Minimal config that can be used to test a Kubernetes Helm chart can be found
[here](https://gitlab.com/gitlab-org/charts/gitlab/issues/620).
-- Tailing logs of a separate pod. An example for a unicorn pod:
+- Tailing logs of a separate pod. An example for a Unicorn pod:
```bash
kubectl logs gitlab-unicorn-7656fdd6bf-jqzfs -c unicorn
@@ -101,7 +101,7 @@ and they will assist you with any issues you are having.
```
- Check all events in the `gitlab` namespace (the namespace name can be different if you
- specified a different one when deploying the helm chart):
+ specified a different one when deploying the Helm chart):
```bash
kubectl get events -w --namespace=gitlab
@@ -140,8 +140,8 @@ and they will assist you with any issues you are having.
- Check the output of `kubectl get events -w --all-namespaces`.
- Check the logs of pods within `gitlab-managed-apps` namespace.
- - On the side of GitLab check sidekiq log and kubernetes log. When GitLab is installed
- via Helm Chart, `kubernetes.log` can be found inside the sidekiq pod.
+ - On the side of GitLab check Sidekiq log and Kubernetes log. When GitLab is installed
+ via Helm Chart, `kubernetes.log` can be found inside the Sidekiq pod.
- How to get your initial admin password <https://docs.gitlab.com/charts/installation/deployment.html#initial-login>:
@@ -191,8 +191,8 @@ and they will assist you with any issues you are having.
## Installation of minimal GitLab config via Minukube on macOS
-This section is based on [Developing for Kubernetes with Minikube](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/minikube/index.md)
-and [Helm](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/helm/index.md). Refer
+This section is based on [Developing for Kubernetes with Minikube](https://docs.gitlab.com/charts/development/minikube/index.html)
+and [Helm](https://docs.gitlab.com/charts/installation/tools.html#helm). Refer
to those documents for details.
- Install Kubectl via Homebrew:
diff --git a/doc/administration/troubleshooting/postgresql.md b/doc/administration/troubleshooting/postgresql.md
new file mode 100644
index 00000000000..f427cd88ce0
--- /dev/null
+++ b/doc/administration/troubleshooting/postgresql.md
@@ -0,0 +1,146 @@
+---
+type: reference
+---
+
+# PostgreSQL
+
+This page is useful information about PostgreSQL that the GitLab Support
+Team sometimes uses while troubleshooting. GitLab is making this public, so that anyone
+can make use of the Support team's collected knowledge.
+
+CAUTION: **Caution:** Some procedures documented here may break your GitLab instance. Use at your own risk.
+
+If you are on a [paid tier](https://about.gitlab.com/pricing/) and are not sure how
+to use these commands, it is best to [contact Support](https://about.gitlab.com/support/)
+and they will assist you with any issues you are having.
+
+## Other GitLab PostgreSQL documentation
+
+This section is for links to information elsewhere in the GitLab documentation.
+
+### Procedures
+
+- [Connect to the PostgreSQL console.](https://docs.gitlab.com/omnibus/settings/database.html#connecting-to-the-bundled-postgresql-database)
+
+- [Omnibus database procedures](https://docs.gitlab.com/omnibus/settings/database.html) including
+ - SSL: enabling, disabling, and verifying.
+ - Enabling Write Ahead Log (WAL) archiving.
+ - Using an external (non-Omnibus) PostgreSQL installation; and backing it up.
+ - Listening on TCP/IP as well as or instead of sockets.
+ - Storing data in another location.
+ - Destructively reseeding the GitLab database.
+ - Guidance around updating packaged PostgreSQL, including how to stop it happening automatically.
+
+- [More about external PostgreSQL](../external_database.md)
+
+- [Running GEO with external PostgreSQL](../geo/replication/external_database.md)
+
+- [Upgrades when running PostgreSQL configured for HA.](https://docs.gitlab.com/omnibus/settings/database.html#upgrading-a-gitlab-ha-cluster)
+
+- Consuming PostgreSQL from [within CI runners](../../ci/services/postgres.md)
+
+- [Using Slony to update PostgreSQL](../../update/upgrading_postgresql_using_slony.md)
+ - Uses replication to handle PostgreSQL upgrades - providing the schemas are the same.
+ - Reduces downtime to a short window for swinging over to the newer vewrsion.
+
+- Managing Omnibus PostgreSQL versions [from the development docs](https://docs.gitlab.com/omnibus/development/managing-postgresql-versions.html)
+
+- [PostgreSQL scaling and HA](../high_availability/database.md)
+ - including [troubleshooting](../high_availability/database.md#troubleshooting) gitlab-ctl repmgr-check-master and pgbouncer errors
+
+- [Developer database documentation](../../development/README.md#database-guides) - some of which is absolutely not for production use. Including:
+ - understanding EXPLAIN plans
+
+### Troubleshooting/Fixes
+
+- [GitLab database requirements](../../install/requirements.md#database) including
+ - Support for MySQL was removed in GitLab 12.1; [migrate to PostgreSQL](../../update/mysql_to_postgresql.md)
+ - required extension pg_trgm
+ - required extension postgres_fdw for Geo
+
+- Errors like this in the production/sidekiq log; see: [Set default_transaction_isolation into read committed](https://docs.gitlab.com/omnibus/settings/database.html#set-default_transaction_isolation-into-read-committed)
+
+```
+ActiveRecord::StatementInvalid PG::TRSerializationFailure: ERROR: could not serialize access due to concurrent update
+```
+
+- PostgreSQL HA - [replication slot errors](https://docs.gitlab.com/omnibus/settings/database.html#troubleshooting-upgrades-in-an-ha-cluster)
+
+```
+pg_basebackup: could not create temporary replication slot "pg_basebackup_12345": ERROR: all replication slots are in use
+HINT: Free one or increase max_replication_slots.
+```
+
+- GEO [replication errors](../geo/replication/troubleshooting.md#fixing-replication-errors) including:
+
+```
+ERROR: replication slots can only be used if max_replication_slots > 0
+
+FATAL: could not start WAL streaming: ERROR: replication slot “geo_secondary_my_domain_com†does not exist
+
+Command exceeded allowed execution time
+
+PANIC: could not write to file ‘pg_xlog/xlogtemp.123’: No space left on device
+```
+
+- [Checking GEO configuration](../geo/replication/troubleshooting.md#checking-configuration) including
+ - reconfiguring hosts/ports
+ - checking and fixing user/password mappings
+
+- [Common GEO errors](../geo/replication/troubleshooting.md#fixing-common-errors)
+
+## Support topics
+
+### Database deadlocks
+
+References:
+
+- [Issue #1 Deadlocks with GitLab 12.1, PostgreSQL 10.7](https://gitlab.com/gitlab-org/gitlab/issues/30528)
+- [Customer ticket (internal) GitLab 12.1.6](https://gitlab.zendesk.com/agent/tickets/134307) and [google doc (internal)](https://docs.google.com/document/d/19xw2d_D1ChLiU-MO1QzWab-4-QXgsIUcN5e_04WTKy4)
+- [Issue #2 deadlocks can occur if an instance is flooded with pushes](https://gitlab.com/gitlab-org/gitlab/issues/33650). Provided for context about how GitLab code can have this sort of unanticipated effect in unusual situations.
+
+```
+ERROR: deadlock detected
+```
+
+Three applicable timeouts are identified in the issue [#1](https://gitlab.com/gitlab-org/gitlab/issues/30528); our recommended settings are as follows:
+
+```
+deadlock_timeout = 5s
+statement_timeout = 15s
+idle_in_transaction_session_timeout = 60s
+```
+
+Quoting from from issue [#1](https://gitlab.com/gitlab-org/gitlab/issues/30528):
+
+> "If a deadlock is hit, and we resolve it through aborting the transaction after a short period, then the retry mechanisms we already have will make the deadlocked piece of work try again, and it's unlikely we'll deadlock multiple times in a row."
+
+TIP: **Tip:** In support, our general approach to reconfiguring timeouts (applies also to the HTTP stack as well) is that it's acceptable to do it temporarily as a workaround. If it makes GitLab usable for the customer, then it buys time to understand the problem more completely, implement a hot fix, or make some other change that addresses the root cause. Generally, the timeouts should be put back to reasonable defaults once the root cause is resolved.
+
+In this case, the guidance we had from development was to drop deadlock_timeout and/or statement_timeout but to leave the third setting at 60s. Setting idle_in_transaction protects the database from sessions potentially hanging for days. There's more discussion in [the issue relating to introducing this timeout on gitlab.com.](https://gitlab.com/gitlab-com/gl-infra/production/issues/1053)
+
+PostgresSQL defaults:
+
+- statement_timeout = 0 (never)
+- idle_in_transaction_session_timeout = 0 (never)
+
+Comments in issue [#1](https://gitlab.com/gitlab-org/gitlab/issues/30528) indicate that these should both be set to at least a number of minutes for all Omnibus installations (so they don't hang indefinitely). However, 15s for statement_timeout is very short, and will only be effective if the underlying infrastructure is very performant.
+
+See current settings with:
+
+```
+sudo gitlab-rails runner "c = ApplicationRecord.connection ; puts c.execute('SHOW statement_timeout').to_a ;
+puts c.execute('SHOW lock_timeout').to_a ;
+puts c.execute('SHOW idle_in_transaction_session_timeout').to_a ;"
+```
+
+It may take a little while to respond.
+
+```
+{"statement_timeout"=>"1min"}
+{"lock_timeout"=>"0"}
+{"idle_in_transaction_session_timeout"=>"1min"}
+```
+
+NOTE: **Note:**
+These are Omnibus settings. If an external database, such as a customer's PostgreSQL installation or Amazon RDS is being used, these values don't get set, and would have to be set externally.
diff --git a/doc/administration/troubleshooting/sidekiq.md b/doc/administration/troubleshooting/sidekiq.md
index fdafac8420e..41657368ea4 100644
--- a/doc/administration/troubleshooting/sidekiq.md
+++ b/doc/administration/troubleshooting/sidekiq.md
@@ -238,7 +238,7 @@ workers.each do |process_id, thread_id, work|
end
```
-### Remove sidekiq jobs for given parameters (destructive)
+### Remove Sidekiq jobs for given parameters (destructive)
```ruby
# for jobs like this:
diff --git a/doc/administration/troubleshooting/test_environments.md b/doc/administration/troubleshooting/test_environments.md
index f1cdaf580a3..d0f670a5663 100644
--- a/doc/administration/troubleshooting/test_environments.md
+++ b/doc/administration/troubleshooting/test_environments.md
@@ -49,7 +49,7 @@ gitlab/gitlab-ee:11.5.3-ee.0
#### SAML for Authentication
-We can use the [test-saml-idp Docker image](https://hub.docker.com/r/jamedjo/test-saml-idp)
+We can use the [`test-saml-idp` Docker image](https://hub.docker.com/r/jamedjo/test-saml-idp)
to do the work for us:
```sh
@@ -91,7 +91,7 @@ gitlab_rails['omniauth_providers'] = [
See [the GDK SAML documentation](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/saml.md).
-### ElasticSearch
+### Elasticsearch
```sh
docker run -d --name elasticsearch \
@@ -101,7 +101,7 @@ docker.elastic.co/elasticsearch/elasticsearch:5.5.1
```
Then confirm it works in the browser at `curl http://<IP_ADDRESS>:9200/_cat/health`.
-ElasticSearch's default username is `elastic` and password is `changeme`.
+Elasticsearch's default username is `elastic` and password is `changeme`.
### PlantUML
diff --git a/doc/administration/uploads.md b/doc/administration/uploads.md
index c6dadbb500b..04cebe568f3 100644
--- a/doc/administration/uploads.md
+++ b/doc/administration/uploads.md
@@ -81,7 +81,7 @@ The connection settings match those provided by [Fog](https://github.com/fog), a
| `enable_signature_v4_streaming` | Set to true to enable HTTP chunked transfers with [AWS v4 signatures](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html). Oracle Cloud S3 needs this to be false | true |
| `region` | AWS region | us-east-1 |
| `host` | S3 compatible host for when not using AWS, e.g. `localhost` or `storage.example.com` | s3.amazonaws.com |
-| `endpoint` | Can be used when configuring an S3 compatible service such as [Minio](https://www.minio.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
+| `endpoint` | Can be used when configuring an S3 compatible service such as [MinIO](https://min.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
| `path_style` | Set to true to use `host/bucket_name/object` style paths instead of `bucket_name.host/object`. Leave as false for AWS S3 | false |
| `use_iam_profile` | Set to true to use IAM profile instead of access keys | false
@@ -165,7 +165,7 @@ The connection settings match those provided by [Fog](https://github.com/fog), a
|---------|-------------|---------|
| `provider` | Always `OpenStack` for compatible hosts | OpenStack |
| `openstack_username` | OpenStack username | |
-| `openstack_api_key` | OpenStack api key | |
+| `openstack_api_key` | OpenStack API key | |
| `openstack_temp_url_key` | OpenStack key for generating temporary urls | |
| `openstack_auth_url` | OpenStack authentication endpont | |
| `openstack_region` | OpenStack region | |
diff --git a/doc/api/README.md b/doc/api/README.md
index d037ab1a95f..6858e5b7d56 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -329,7 +329,7 @@ curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
### Pagination Link header
-[Link headers](http://www.w3.org/wiki/LinkHeader) are sent back with each
+[Link headers](https://www.w3.org/wiki/LinkHeader) are sent back with each
response. They have `rel` set to prev/next/first/last and contain the relevant
URL. Please use these links instead of generating your own URLs.
@@ -563,7 +563,7 @@ The correct encoding for the query parameter would be:
## Clients
There are many unofficial GitLab API Clients for most of the popular
-programming languages. Visit the [GitLab website] for a complete list.
+programming languages. Visit the [GitLab website](https://about.gitlab.com/partners/#api-clients) for a complete list.
## Rate limits
@@ -572,7 +572,6 @@ For administrator documentation on rate limit settings, see
specifically used by GitLab.com, see
[GitLab.com-specific rate limits](../user/gitlab_com/index.md#gitlabcom-specific-rate-limits).
-[GitLab website]: https://about.gitlab.com/applications/#api-clients "Clients using the GitLab API"
[lib-api-url]: https://gitlab.com/gitlab-org/gitlab-foss/tree/master/lib/api/api.rb
[ce-3749]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/3749
[ce-5951]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/5951
diff --git a/doc/api/access_requests.md b/doc/api/access_requests.md
index 973c3968d90..584a4ecb89c 100644
--- a/doc/api/access_requests.md
+++ b/doc/api/access_requests.md
@@ -6,7 +6,7 @@
The access levels are defined in the `Gitlab::Access` module. Currently, these levels are recognized:
-```
+```plaintext
10 => Guest access
20 => Reporter access
30 => Developer access
@@ -18,14 +18,16 @@
Gets a list of access requests viewable by the authenticated user.
-```
+```plaintext
GET /groups/:id/access_requests
GET /projects/:id/access_requests
```
-| Attribute | Type | Required | Description |
-| --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| Attribute | Type | Required | Description |
+| --------- | -------------- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+
+Example request:
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/:id/access_requests
@@ -59,14 +61,16 @@ Example response:
Requests access for the authenticated user to a group or project.
-```
+```plaintext
POST /groups/:id/access_requests
POST /projects/:id/access_requests
```
-| Attribute | Type | Required | Description |
-| --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| Attribute | Type | Required | Description |
+| --------- | -------------- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+
+Example request:
```bash
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/:id/access_requests
@@ -90,16 +94,18 @@ Example response:
Approves an access request for the given user.
-```
+```plaintext
PUT /groups/:id/access_requests/:user_id/approve
PUT /projects/:id/access_requests/:user_id/approve
```
-| Attribute | Type | Required | Description |
-| --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `user_id` | integer | yes | The user ID of the access requester |
-| `access_level` | integer | no | A valid access level (defaults: `30`, developer access level) |
+| Attribute | Type | Required | Description |
+| -------------- | -------------- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `user_id` | integer | yes | The user ID of the access requester |
+| `access_level` | integer | no | A valid access level (defaults: `30`, developer access level) |
+
+Example request:
```bash
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/:id/access_requests/:user_id/approve?access_level=20
@@ -123,15 +129,17 @@ Example response:
Denies an access request for the given user.
-```
+```plaintext
DELETE /groups/:id/access_requests/:user_id
DELETE /projects/:id/access_requests/:user_id
```
-| Attribute | Type | Required | Description |
-| --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `user_id` | integer | yes | The user ID of the access requester |
+| Attribute | Type | Required | Description |
+| --------- | -------------- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `user_id` | integer | yes | The user ID of the access requester |
+
+Example request:
```bash
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/:id/access_requests/:user_id
diff --git a/doc/api/api_resources.md b/doc/api/api_resources.md
index e2ddc2cbc18..232a9825691 100644
--- a/doc/api/api_resources.md
+++ b/doc/api/api_resources.md
@@ -104,6 +104,7 @@ The following API resources are available outside of project and group contexts
| Resource | Available endpoints |
|:--------------------------------------------------|:------------------------------------------------------------------------|
| [Applications](applications.md) | `/applications` |
+| [Audit Events](audit_events.md) **(PREMIUM ONLY)** | `/audit_events` |
| [Avatar](avatar.md) | `/avatar` |
| [Broadcast messages](broadcast_messages.md) | `/broadcast_messages` |
| [Code snippets](snippets.md) | `/snippets` |
diff --git a/doc/api/audit_events.md b/doc/api/audit_events.md
new file mode 100644
index 00000000000..aca221cf990
--- /dev/null
+++ b/doc/api/audit_events.md
@@ -0,0 +1,115 @@
+# Audit Events API **(PREMIUM ONLY)**
+
+The Audit Events API allows you to retrieve [instance audit events](../administration/audit_events.md#instance-events-premium-only).
+
+To retrieve audit events using the API, you must [authenticate yourself](README.html#authentication) as an Administrator.
+
+## Retrieve all instance audit events
+
+```
+GET /audit_events
+```
+
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `created_after` | string | no | Return audit events created on or after the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
+| `created_before` | string | no | Return audit events created on or before the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
+| `entity_type` | string | no | Return audit events for the given entity type. Valid values are: `User`, `Group`, or `Project`. |
+| `entity_id` | boolean | no | Return audit events for the given entity ID. Requires `entity_type` attribute to be present. |
+
+By default, `GET` requests return 20 results at a time because the API results
+are paginated.
+
+Read more on [pagination](README.md#pagination).
+
+```bash
+curl --header "PRIVATE-TOKEN: <your_access_token>" https://primary.example.com/api/v4/audit_events
+```
+
+Example response:
+
+```json
+[
+ {
+ "id": 1,
+ "author_id": 1,
+ "entity_id": 6,
+ "entity_type": "Project",
+ "details": {
+ "custom_message": "Project archived",
+ "author_name": "Administrator",
+ "target_id": "flightjs/flight",
+ "target_type": "Project",
+ "target_details": "flightjs/flight",
+ "ip_address": "127.0.0.1",
+ "entity_path": "flightjs/flight"
+ },
+ "created_at": "2019-08-30T07:00:41.885Z"
+ },
+ {
+ "id": 2,
+ "author_id": 1,
+ "entity_id": 60,
+ "entity_type": "Group",
+ "details": {
+ "add": "group",
+ "author_name": "Administrator",
+ "target_id": "flightjs",
+ "target_type": "Group",
+ "target_details": "flightjs",
+ "ip_address": "127.0.0.1",
+ "entity_path": "flightjs"
+ },
+ "created_at": "2019-08-27T18:36:44.162Z"
+ },
+ {
+ "id": 3,
+ "author_id": 51,
+ "entity_id": 51,
+ "entity_type": "User",
+ "details": {
+ "change": "email address",
+ "from": "hello@flightjs.com",
+ "to": "maintainer@flightjs.com",
+ "author_name": "Andreas",
+ "target_id": 51,
+ "target_type": "User",
+ "target_details": "Andreas",
+ "ip_address": null,
+ "entity_path": "Andreas"
+ },
+ "created_at": "2019-08-22T16:34:25.639Z"
+ }
+]
+```
+
+## Retrieve single instance audit event
+
+```
+GET /audit_events/:id
+```
+
+```bash
+curl --header "PRIVATE-TOKEN: <your_access_token>" https://primary.example.com/api/v4/audit_events/1
+```
+
+Example response:
+
+```json
+{
+ "id": 1,
+ "author_id": 1,
+ "entity_id": 6,
+ "entity_type": "Project",
+ "details": {
+ "custom_message": "Project archived",
+ "author_name": "Administrator",
+ "target_id": "flightjs/flight",
+ "target_type": "Project",
+ "target_details": "flightjs/flight",
+ "ip_address": "127.0.0.1",
+ "entity_path": "flightjs/flight"
+ },
+ "created_at": "2019-08-30T07:00:41.885Z"
+}
+```
diff --git a/doc/api/boards.md b/doc/api/boards.md
index 151ab5487dd..b9c2a984dc5 100644
--- a/doc/api/boards.md
+++ b/doc/api/boards.md
@@ -48,7 +48,8 @@ Example response:
"color" : "#F0AD4E",
"description" : null
},
- "position" : 1
+ "position" : 1,
+ "max_issue_count": 0
},
{
"id" : 2,
@@ -57,7 +58,8 @@ Example response:
"color" : "#FF0000",
"description" : null
},
- "position" : 2
+ "position" : 2,
+ "max_issue_count": 0
},
{
"id" : 3,
@@ -66,7 +68,8 @@ Example response:
"color" : "#FF5F00",
"description" : null
},
- "position" : 3
+ "position" : 3,
+ "max_issue_count": 0
}
]
}
@@ -117,7 +120,8 @@ Example response:
"color" : "#F0AD4E",
"description" : null
},
- "position" : 1
+ "position" : 1,
+ "max_issue_count": 0
},
{
"id" : 2,
@@ -126,7 +130,8 @@ Example response:
"color" : "#FF0000",
"description" : null
},
- "position" : 2
+ "position" : 2,
+ "max_issue_count": 0
},
{
"id" : 3,
@@ -135,7 +140,8 @@ Example response:
"color" : "#FF5F00",
"description" : null
},
- "position" : 3
+ "position" : 3,
+ "max_issue_count": 0
}
]
}
@@ -185,7 +191,8 @@ Example response:
"color" : "#F0AD4E",
"description" : null
},
- "position" : 1
+ "position" : 1,
+ "max_issue_count": 0
},
{
"id" : 2,
@@ -194,7 +201,8 @@ Example response:
"color" : "#FF0000",
"description" : null
},
- "position" : 2
+ "position" : 2,
+ "max_issue_count": 0
},
{
"id" : 3,
@@ -203,7 +211,8 @@ Example response:
"color" : "#FF5F00",
"description" : null
},
- "position" : 3
+ "position" : 3,
+ "max_issue_count": 0
}
]
}
@@ -336,7 +345,8 @@ Example response:
"color" : "#F0AD4E",
"description" : null
},
- "position" : 1
+ "position" : 1,
+ "max_issue_count": 0
},
{
"id" : 2,
@@ -345,7 +355,8 @@ Example response:
"color" : "#FF0000",
"description" : null
},
- "position" : 2
+ "position" : 2,
+ "max_issue_count": 0
},
{
"id" : 3,
@@ -354,7 +365,8 @@ Example response:
"color" : "#FF5F00",
"description" : null
},
- "position" : 3
+ "position" : 3,
+ "max_issue_count": 0
}
]
```
@@ -387,7 +399,8 @@ Example response:
"color" : "#F0AD4E",
"description" : null
},
- "position" : 1
+ "position" : 1,
+ "max_issue_count": 0
}
```
@@ -427,7 +440,8 @@ Example response:
"color" : "#F0AD4E",
"description" : null
},
- "position" : 1
+ "position" : 1,
+ "max_issue_count": 0
}
```
@@ -460,7 +474,8 @@ Example response:
"color" : "#F0AD4E",
"description" : null
},
- "position" : 1
+ "position" : 1,
+ "max_issue_count": 0
}
```
diff --git a/doc/api/commits.md b/doc/api/commits.md
index cf1bca7b193..3927a4bbc62 100644
--- a/doc/api/commits.md
+++ b/doc/api/commits.md
@@ -11,12 +11,13 @@ GET /projects/:id/repository/commits
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
-| `ref_name` | string | no | The name of a repository branch or tag or if not given the default branch |
+| `ref_name` | string | no | The name of a repository branch, tag or revision range, or if not given the default branch |
| `since` | string | no | Only commits after or on this date will be returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ |
| `until` | string | no | Only commits before or on this date will be returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ |
| `path` | string | no | The file path |
| `all` | boolean | no | Retrieve every commit from the repository |
| `with_stats` | boolean | no | Stats about each commit will be added to the response |
+| `first_parent` | boolean | no | Follow only the first parent commit upon seeing a merge commit |
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/commits"
@@ -533,7 +534,7 @@ Example response:
},
"description" : null,
"sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
- "target_url" : "https://gitlab.example.com/thedude/gitlab-ce/builds/91",
+ "target_url" : "https://gitlab.example.com/thedude/gitlab-foss/builds/91",
"finished_at" : null,
"id" : 91,
"ref" : "master"
@@ -544,7 +545,7 @@ Example response:
"allow_failure" : false,
"status" : "pending",
"created_at" : "2016-01-19T08:40:25.832Z",
- "target_url" : "https://gitlab.example.com/thedude/gitlab-ce/builds/90",
+ "target_url" : "https://gitlab.example.com/thedude/gitlab-foss/builds/90",
"id" : 90,
"finished_at" : null,
"ref" : "master",
diff --git a/doc/api/container_registry.md b/doc/api/container_registry.md
index cb1a81b97b6..7e5e265351e 100644
--- a/doc/api/container_registry.md
+++ b/doc/api/container_registry.md
@@ -252,8 +252,8 @@ This action does not delete blobs. In order to delete them and recycle disk spac
[run the garbage collection](https://docs.gitlab.com/omnibus/maintenance/README.html#removing-unused-layers-not-referenced-by-manifests).
NOTE: **Note:**
-Due to a [Docker Distribution deficiency](https://gitlab.com/gitlab-org/gitlab-foss/issues/21405),
-it doesn't remove tags whose manifest is shared by multiple tags.
+Since GitLab 12.4, individual tags are deleted.
+For more details, see the [discussion](https://gitlab.com/gitlab-org/gitlab/issues/15737).
Examples:
diff --git a/doc/api/deployments.md b/doc/api/deployments.md
index 0a67f134d54..27254c42e3a 100644
--- a/doc/api/deployments.md
+++ b/doc/api/deployments.md
@@ -24,6 +24,7 @@ Example of response
[
{
"created_at": "2016-08-11T07:36:40.222Z",
+ "updated_at": "2016-08-11T07:38:12.414Z",
"deployable": {
"commit": {
"author_email": "admin@example.com",
@@ -83,6 +84,7 @@ Example of response
},
{
"created_at": "2016-08-11T11:32:35.444Z",
+ "updated_at": "2016-08-11T11:34:01.123Z",
"deployable": {
"commit": {
"author_email": "admin@example.com",
@@ -167,6 +169,7 @@ Example of response
"ref": "master",
"sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
"created_at": "2016-08-11T11:32:35.444Z",
+ "updated_at": "2016-08-11T11:34:01.123Z",
"user": {
"name": "Administrator",
"username": "root",
@@ -220,3 +223,100 @@ Example of response
}
}
```
+
+## Create a deployment
+
+```
+POST /projects/:id/deployments
+```
+
+| Attribute | Type | Required | Description |
+|------------------|----------------|----------|---------------------|
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `environment` | string | yes | The name of the environment to create the deployment for |
+| `sha` | string | yes | The SHA of the commit that is deployed |
+| `ref` | string | yes | The name of the branch or tag that is deployed |
+| `tag` | boolean | yes | A boolean that indicates if the deployed ref is a tag (true) or not (false) |
+| `status` | string | yes | The status of the deployment |
+
+The status can be one of the following values:
+
+- created
+- running
+- success
+- failed
+- canceled
+
+```bash
+curl --data "environment=production&sha=a91957a858320c0e17f3a0eca7cfacbff50ea29a&ref=master&tag=false&status=success" --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/deployments"
+```
+
+Example of a response:
+
+```json
+{
+ "id": 42,
+ "iid": 2,
+ "ref": "master",
+ "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
+ "created_at": "2016-08-11T11:32:35.444Z",
+ "status": "success",
+ "user": {
+ "name": "Administrator",
+ "username": "root",
+ "id": 1,
+ "state": "active",
+ "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "environment": {
+ "id": 9,
+ "name": "production",
+ "external_url": "https://about.gitlab.com"
+ },
+ "deployable": null
+}
+```
+
+## Updating a deployment
+
+```
+PUT /projects/:id/deployments/:deployment_id
+```
+
+| Attribute | Type | Required | Description |
+|------------------|----------------|----------|---------------------|
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `deployment_id` | integer | yes | The ID of the deployment to update |
+| `status` | string | yes | The new status of the deployment |
+
+```bash
+curl --request PUT --data "status=success" --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/deployments/42"
+```
+
+Example of a response:
+
+```json
+{
+ "id": 42,
+ "iid": 2,
+ "ref": "master",
+ "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
+ "created_at": "2016-08-11T11:32:35.444Z",
+ "status": "success",
+ "user": {
+ "name": "Administrator",
+ "username": "root",
+ "id": 1,
+ "state": "active",
+ "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+ "web_url": "http://localhost:3000/root"
+ },
+ "environment": {
+ "id": 9,
+ "name": "production",
+ "external_url": "https://about.gitlab.com"
+ },
+ "deployable": null
+}
+```
diff --git a/doc/api/environments.md b/doc/api/environments.md
index 44f86861ff7..3f46c11ed69 100644
--- a/doc/api/environments.md
+++ b/doc/api/environments.md
@@ -26,7 +26,8 @@ Example response:
"id": 1,
"name": "review/fix-foo",
"slug": "review-fix-foo-dfjre3",
- "external_url": "https://review-fix-foo-dfjre3.example.gitlab.com"
+ "external_url": "https://review-fix-foo-dfjre3.example.gitlab.com",
+ "state": "available"
}
]
```
@@ -54,12 +55,14 @@ Example of response
"name": "review/fix-foo",
"slug": "review-fix-foo-dfjre3",
"external_url": "https://review-fix-foo-dfjre3.example.gitlab.com"
+ "state": "available",
"last_deployment": {
"id": 100,
"iid": 34,
"ref": "fdroid",
"sha": "416d8ea11849050d3d1f5104cf8cf51053e790ab",
"created_at": "2019-03-25T18:55:13.252Z",
+ "status": "success",
"user": {
"id": 1,
"name": "Administrator",
@@ -163,7 +166,8 @@ Example response:
"id": 1,
"name": "deploy",
"slug": "deploy",
- "external_url": "https://deploy.example.gitlab.com"
+ "external_url": "https://deploy.example.gitlab.com",
+ "state": "available"
}
```
@@ -180,7 +184,7 @@ PUT /projects/:id/environments/:environments_id
| Attribute | Type | Required | Description |
| --------------- | ------- | --------------------------------- | ------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `environment_id` | integer | yes | The ID of the environment | The ID of the environment |
+| `environment_id` | integer | yes | The ID of the environment |
| `name` | string | no | The new name of the environment |
| `external_url` | string | no | The new external_url |
@@ -195,7 +199,8 @@ Example response:
"id": 1,
"name": "staging",
"slug": "staging",
- "external_url": "https://staging.example.gitlab.com"
+ "external_url": "https://staging.example.gitlab.com",
+ "state": "available"
}
```
@@ -240,6 +245,7 @@ Example response:
"id": 1,
"name": "deploy",
"slug": "deploy",
- "external_url": "https://deploy.example.gitlab.com"
+ "external_url": "https://deploy.example.gitlab.com",
+ "state": "stopped"
}
```
diff --git a/doc/api/epics.md b/doc/api/epics.md
index 92b534fc187..c7a050f1465 100644
--- a/doc/api/epics.md
+++ b/doc/api/epics.md
@@ -67,7 +67,7 @@ Example response:
"title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
"description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
"state": "opened",
- "web_edit_url": "http://localhost:3001/groups/test/-/epics/4",
+ "web_url": "http://localhost:3001/groups/test/-/epics/4",
"reference": "&4",
"author": {
"id": 10,
@@ -88,6 +88,7 @@ Example response:
"due_date_from_milestones": "2018-07-31",
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
+ "closed_at": "2018-08-18T12:22:05.239Z",
"labels": [],
"upvotes": 4,
"downvotes": 0
@@ -122,7 +123,7 @@ Example response:
"title": "Ea cupiditate dolores ut vero consequatur quasi veniam voluptatem et non.",
"description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
"state": "opened",
- "web_edit_url": "http://localhost:3001/groups/test/-/epics/5",
+ "web_url": "http://localhost:3001/groups/test/-/epics/5",
"reference": "&5",
"author":{
"id": 7,
@@ -143,9 +144,11 @@ Example response:
"due_date_from_milestones": "2018-07-31",
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
+ "closed_at": "2018-08-18T12:22:05.239Z",
"labels": [],
"upvotes": 4,
- "downvotes": 0
+ "downvotes": 0,
+ "subscribed": true
}
```
@@ -167,7 +170,7 @@ POST /groups/:id/epics
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user |
| `title` | string | yes | The title of the epic |
| `labels` | string | no | The comma separated list of labels |
-| `description` | string | no | The description of the epic. Limited to 1 000 000 characters. |
+| `description` | string | no | The description of the epic. Limited to 1,048,576 characters. |
| `start_date_is_fixed` | boolean | no | Whether start date should be sourced from `start_date_fixed` or from milestones (since 11.3) |
| `start_date_fixed` | string | no | The fixed start date of an epic (since 11.3) |
| `due_date_is_fixed` | boolean | no | Whether due date should be sourced from `due_date_fixed` or from milestones (since 11.3) |
@@ -188,7 +191,7 @@ Example response:
"title": "Epic",
"description": "Epic description",
"state": "opened",
- "web_edit_url": "http://localhost:3001/groups/test/-/epics/6",
+ "web_url": "http://localhost:3001/groups/test/-/epics/5",
"reference": "&6",
"author": {
"name" : "Alexandra Bashirian",
@@ -209,6 +212,7 @@ Example response:
"due_date_from_milestones": "2018-07-31",
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
+ "closed_at": "2018-08-18T12:22:05.239Z",
"labels": [],
"upvotes": 4,
"downvotes": 0
@@ -233,7 +237,7 @@ PUT /groups/:id/epics/:epic_iid
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user |
| `epic_iid` | integer/string | yes | The internal ID of the epic |
| `title` | string | no | The title of an epic |
-| `description` | string | no | The description of an epic. Limited to 1 000 000 characters. |
+| `description` | string | no | The description of an epic. Limited to 1,048,576 characters. |
| `labels` | string | no | The comma separated list of labels |
| `start_date_is_fixed` | boolean | no | Whether start date should be sourced from `start_date_fixed` or from milestones (since 11.3) |
| `start_date_fixed` | string | no | The fixed start date of an epic (since 11.3) |
@@ -255,7 +259,7 @@ Example response:
"title": "New Title",
"description": "Epic description",
"state": "opened",
- "web_edit_url": "http://localhost:3001/groups/test/-/epics/6",
+ "web_url": "http://localhost:3001/groups/test/-/epics/5",
"reference": "&6",
"author": {
"name" : "Alexandra Bashirian",
@@ -276,6 +280,7 @@ Example response:
"due_date_from_milestones": "2018-07-31",
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
+ "closed_at": "2018-08-18T12:22:05.239Z",
"labels": [],
"upvotes": 4,
"downvotes": 0
@@ -358,7 +363,8 @@ Example response:
"start_date": null,
"end_date": null,
"created_at": "2018-01-21T06:21:13.165Z",
- "updated_at": "2018-01-22T12:41:41.166Z"
+ "updated_at": "2018-01-22T12:41:41.166Z",
+ "closed_at": "2018-08-18T12:22:05.239Z"
},
"target_url": "https://gitlab.example.com/groups/epics/5",
"body": "Vel voluptas atque dicta mollitia adipisci qui at.",
diff --git a/doc/api/features.md b/doc/api/features.md
index e8d0c7c942b..8b5ea27007d 100644
--- a/doc/api/features.md
+++ b/doc/api/features.md
@@ -61,7 +61,7 @@ POST /features/:name
| `feature_group` | string | no | A Feature group name |
| `user` | string | no | A GitLab username |
| `group` | string | no | A GitLab group's path, for example `gitlab-org` |
-| `project` | string | no | A projects path, for example `gitlab-org/gitlab-ce` |
+| `project` | string | no | A projects path, for example `gitlab-org/gitlab-foss` |
Note that you can enable or disable a feature for a `feature_group`, a `user`,
a `group`, and a `project` in a single API call.
diff --git a/doc/api/graphql/index.md b/doc/api/graphql/index.md
index eb5faac5ede..9eb254b4677 100644
--- a/doc/api/graphql/index.md
+++ b/doc/api/graphql/index.md
@@ -42,7 +42,7 @@ A first iteration of a GraphQL API includes the following queries
### Multiplex queries
GitLab supports batching queries into a single request using
-[apollo-link-batch-http](https://www.apollographql.com/docs/link/links/batch-http). More
+[apollo-link-batch-http](https://www.apollographql.com/docs/link/links/batch-http/). More
info about multiplexed queries is also available for
[graphql-ruby](https://graphql-ruby.org/queries/multiplex.html) the
library GitLab uses on the backend.
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index e87270f884a..839289cf677 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -54,9 +54,87 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `message` | String | |
| `authoredDate` | Time | |
| `webUrl` | String! | |
+| `signatureHtml` | String | Rendered html for the commit signature |
| `author` | User | |
| `latestPipeline` | Pipeline | Latest pipeline for this commit |
+### CreateDiffNotePayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `note` | Note | The note after mutation |
+
+### CreateImageDiffNotePayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `note` | Note | The note after mutation |
+
+### CreateNotePayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `note` | Note | The note after mutation |
+
+### Design
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `id` | ID! | |
+| `project` | Project! | |
+| `issue` | Issue! | |
+| `notesCount` | Int! | The total count of user-created notes for this design |
+| `filename` | String! | |
+| `fullPath` | String! | |
+| `event` | DesignVersionEvent! | The change that happened to the design at this version |
+| `image` | String! | |
+| `diffRefs` | DiffRefs! | |
+
+### DesignCollection
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `project` | Project! | |
+| `issue` | Issue! | |
+
+### DesignManagementDeletePayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `version` | DesignVersion | The new version in which the designs are deleted |
+
+### DesignManagementUploadPayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `designs` | Design! => Array | The designs that were uploaded by the mutation |
+| `skippedDesigns` | Design! => Array | Any designs that were skipped from the upload due to there being no change to their content since their last version |
+
+### DesignVersion
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `id` | ID! | |
+| `sha` | ID! | |
+
+### DestroyNotePayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `note` | Note | The note after mutation |
+
### DetailedStatus
| Name | Type | Description |
@@ -74,9 +152,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| Name | Type | Description |
| --- | ---- | ---------- |
-| `headSha` | String! | The sha of the head at the time the comment was made |
-| `baseSha` | String | The merge base of the branch the comment was made on |
-| `startSha` | String! | The sha of the branch being compared against |
+| `diffRefs` | DiffRefs! | |
| `filePath` | String! | The path of the file that was changed |
| `oldPath` | String | The path of the file on the start sha. |
| `newPath` | String | The path of the file on the head sha. |
@@ -88,13 +164,147 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `width` | Int | The total width of the image |
| `height` | Int | The total height of the image |
+### DiffRefs
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `headSha` | String! | The sha of the head at the time the comment was made |
+| `baseSha` | String! | The merge base of the branch the comment was made on |
+| `startSha` | String! | The sha of the branch being compared against |
+
### Discussion
| Name | Type | Description |
| --- | ---- | ---------- |
| `id` | ID! | |
+| `replyId` | ID! | The ID used to reply to this discussion |
| `createdAt` | Time! | |
+### Epic
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `userPermissions` | EpicPermissions! | Permissions for the current user on the resource |
+| `id` | ID! | |
+| `iid` | ID! | |
+| `title` | String | |
+| `description` | String | |
+| `state` | EpicState! | |
+| `group` | Group! | |
+| `parent` | Epic | |
+| `author` | User! | |
+| `startDate` | Time | |
+| `startDateIsFixed` | Boolean | |
+| `startDateFixed` | Time | |
+| `startDateFromMilestones` | Time | |
+| `dueDate` | Time | |
+| `dueDateIsFixed` | Boolean | |
+| `dueDateFixed` | Time | |
+| `dueDateFromMilestones` | Time | |
+| `closedAt` | Time | |
+| `createdAt` | Time | |
+| `updatedAt` | Time | |
+| `hasChildren` | Boolean! | |
+| `hasIssues` | Boolean! | |
+| `webPath` | String! | |
+| `webUrl` | String! | |
+| `relativePosition` | Int | The relative position of the epic in the Epic tree |
+| `relationPath` | String | |
+| `reference` | String! | |
+| `subscribed` | Boolean! | Boolean flag for whether the currently logged in user is subscribed to this epic |
+
+### EpicIssue
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `userPermissions` | IssuePermissions! | Permissions for the current user on the resource |
+| `iid` | ID! | |
+| `title` | String! | |
+| `titleHtml` | String | The GitLab Flavored Markdown rendering of `title` |
+| `description` | String | |
+| `descriptionHtml` | String | The GitLab Flavored Markdown rendering of `description` |
+| `state` | IssueState! | |
+| `reference` | String! | |
+| `author` | User! | |
+| `milestone` | Milestone | |
+| `dueDate` | Time | |
+| `confidential` | Boolean! | |
+| `discussionLocked` | Boolean! | |
+| `upvotes` | Int! | |
+| `downvotes` | Int! | |
+| `userNotesCount` | Int! | |
+| `webPath` | String! | |
+| `webUrl` | String! | |
+| `relativePosition` | Int | |
+| `timeEstimate` | Int! | The time estimate on the issue |
+| `totalTimeSpent` | Int! | Total time reported as spent on the issue |
+| `closedAt` | Time | |
+| `createdAt` | Time! | |
+| `updatedAt` | Time! | |
+| `taskCompletionStatus` | TaskCompletionStatus! | |
+| `epic` | Epic | The epic to which issue belongs |
+| `weight` | Int | |
+| `designs` | DesignCollection | |
+| `designCollection` | DesignCollection | |
+| `epicIssueId` | ID! | |
+| `relationPath` | String | |
+| `id` | ID | The global id of the epic-issue relation |
+
+### EpicPermissions
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `readEpic` | Boolean! | Whether or not a user can perform `read_epic` on this resource |
+| `readEpicIid` | Boolean! | Whether or not a user can perform `read_epic_iid` on this resource |
+| `updateEpic` | Boolean! | Whether or not a user can perform `update_epic` on this resource |
+| `destroyEpic` | Boolean! | Whether or not a user can perform `destroy_epic` on this resource |
+| `adminEpic` | Boolean! | Whether or not a user can perform `admin_epic` on this resource |
+| `createEpic` | Boolean! | Whether or not a user can perform `create_epic` on this resource |
+| `createNote` | Boolean! | Whether or not a user can perform `create_note` on this resource |
+| `awardEmoji` | Boolean! | Whether or not a user can perform `award_emoji` on this resource |
+
+### EpicTreeReorderPayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+
+### ExtendedIssue
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `userPermissions` | IssuePermissions! | Permissions for the current user on the resource |
+| `iid` | ID! | |
+| `title` | String! | |
+| `titleHtml` | String | The GitLab Flavored Markdown rendering of `title` |
+| `description` | String | |
+| `descriptionHtml` | String | The GitLab Flavored Markdown rendering of `description` |
+| `state` | IssueState! | |
+| `reference` | String! | |
+| `author` | User! | |
+| `milestone` | Milestone | |
+| `dueDate` | Time | |
+| `confidential` | Boolean! | |
+| `discussionLocked` | Boolean! | |
+| `upvotes` | Int! | |
+| `downvotes` | Int! | |
+| `userNotesCount` | Int! | |
+| `webPath` | String! | |
+| `webUrl` | String! | |
+| `relativePosition` | Int | |
+| `timeEstimate` | Int! | The time estimate on the issue |
+| `totalTimeSpent` | Int! | Total time reported as spent on the issue |
+| `closedAt` | Time | |
+| `createdAt` | Time! | |
+| `updatedAt` | Time! | |
+| `taskCompletionStatus` | TaskCompletionStatus! | |
+| `epic` | Epic | The epic to which issue belongs |
+| `weight` | Int | |
+| `designs` | DesignCollection | |
+| `designCollection` | DesignCollection | |
+| `subscribed` | Boolean! | Boolean flag for whether the currently logged in user is subscribed to this issue |
+
### Group
| Name | Type | Description |
@@ -109,11 +319,13 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `visibility` | String | |
| `lfsEnabled` | Boolean | |
| `requestAccessEnabled` | Boolean | |
-| `rootStorageStatistics` | RootStorageStatistics | The aggregated storage statistics. Only available if the namespace has no parent |
+| `rootStorageStatistics` | RootStorageStatistics | The aggregated storage statistics. Only available for root namespaces |
| `userPermissions` | GroupPermissions! | Permissions for the current user on the resource |
| `webUrl` | String! | |
| `avatarUrl` | String | |
| `parent` | Group | |
+| `epicsEnabled` | Boolean | |
+| `epic` | Epic | |
### GroupPermissions
@@ -144,10 +356,16 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `webPath` | String! | |
| `webUrl` | String! | |
| `relativePosition` | Int | |
+| `timeEstimate` | Int! | The time estimate on the issue |
+| `totalTimeSpent` | Int! | Total time reported as spent on the issue |
| `closedAt` | Time | |
| `createdAt` | Time! | |
| `updatedAt` | Time! | |
| `taskCompletionStatus` | TaskCompletionStatus! | |
+| `epic` | Epic | The epic to which issue belongs |
+| `weight` | Int | |
+| `designs` | DesignCollection | |
+| `designCollection` | DesignCollection | |
### IssuePermissions
@@ -158,6 +376,9 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `updateIssue` | Boolean! | Whether or not a user can perform `update_issue` on this resource |
| `createNote` | Boolean! | Whether or not a user can perform `create_note` on this resource |
| `reopenIssue` | Boolean! | Whether or not a user can perform `reopen_issue` on this resource |
+| `readDesign` | Boolean! | Whether or not a user can perform `read_design` on this resource |
+| `createDesign` | Boolean! | Whether or not a user can perform `create_design` on this resource |
+| `destroyDesign` | Boolean! | Whether or not a user can perform `destroy_design` on this resource |
### Label
@@ -185,6 +406,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `updatedAt` | Time! | |
| `sourceProject` | Project | |
| `targetProject` | Project! | |
+| `diffRefs` | DiffRefs | |
| `project` | Project! | |
| `projectId` | Int! | |
| `sourceProjectId` | Int | |
@@ -213,8 +435,13 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `webUrl` | String | |
| `upvotes` | Int! | |
| `downvotes` | Int! | |
-| `subscribed` | Boolean! | |
| `headPipeline` | Pipeline | |
+| `milestone` | Milestone | The milestone this merge request is linked to |
+| `subscribed` | Boolean! | Boolean flag for whether the currently logged in user is subscribed to this MR |
+| `discussionLocked` | Boolean! | Boolean flag determining if comments on the merge request are locked to members only |
+| `timeEstimate` | Int! | The time estimate for the merge request |
+| `totalTimeSpent` | Int! | Total time reported as spent on the merge request |
+| `reference` | String! | Internal merge request reference. Returned in shortened format by default |
| `taskCompletionStatus` | TaskCompletionStatus! | |
### MergeRequestPermissions
@@ -271,6 +498,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `visibility` | String | |
| `lfsEnabled` | Boolean | |
| `requestAccessEnabled` | Boolean | |
+| `rootStorageStatistics` | RootStorageStatistics | The aggregated storage statistics. Only available for root namespaces |
### Note
@@ -381,7 +609,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `statistics` | ProjectStatistics | |
| `repository` | Repository | |
| `mergeRequest` | MergeRequest | |
-| `issue` | Issue | |
+| `issue` | ExtendedIssue | |
### ProjectPermissions
@@ -424,6 +652,10 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `createPages` | Boolean! | Whether or not a user can perform `create_pages` on this resource |
| `destroyPages` | Boolean! | Whether or not a user can perform `destroy_pages` on this resource |
| `readPagesContent` | Boolean! | Whether or not a user can perform `read_pages_content` on this resource |
+| `adminOperations` | Boolean! | Whether or not a user can perform `admin_operations` on this resource |
+| `readDesign` | Boolean! | Whether or not a user can perform `read_design` on this resource |
+| `createDesign` | Boolean! | Whether or not a user can perform `create_design` on this resource |
+| `destroyDesign` | Boolean! | Whether or not a user can perform `destroy_design` on this resource |
### ProjectStatistics
@@ -458,12 +690,12 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| Name | Type | Description |
| --- | ---- | ---------- |
-| `storageSize` | Int! | The total storage in Bytes |
-| `repositorySize` | Int! | The git repository size in Bytes |
-| `lfsObjectsSize` | Int! | The LFS objects size in Bytes |
-| `buildArtifactsSize` | Int! | The CI artifacts size in Bytes |
-| `packagesSize` | Int! | The packages size in Bytes |
-| `wikiSize` | Int! | The wiki size in Bytes |
+| `storageSize` | Int! | The total storage in bytes |
+| `repositorySize` | Int! | The git repository size in bytes |
+| `lfsObjectsSize` | Int! | The LFS objects size in bytes |
+| `buildArtifactsSize` | Int! | The CI artifacts size in bytes |
+| `packagesSize` | Int! | The packages size in bytes |
+| `wikiSize` | Int! | The wiki size in bytes |
### Submodule
@@ -474,6 +706,8 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `type` | EntryType! | |
| `path` | String! | |
| `flatPath` | String! | |
+| `webUrl` | String | |
+| `treeUrl` | String | |
### TaskCompletionStatus
@@ -482,6 +716,20 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `count` | Int! | |
| `completedCount` | Int! | |
+### Todo
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `id` | ID! | Id of the todo |
+| `project` | Project | The project this todo is associated with |
+| `group` | Group | Group this todo is associated with |
+| `author` | User! | The owner of this todo |
+| `action` | TodoActionEnum! | Action of the todo |
+| `targetType` | TodoTargetEnum! | Target type of the todo |
+| `body` | String! | Body of the todo |
+| `state` | TodoStateEnum! | State of the todo |
+| `createdAt` | Time! | Timestamp this todo was created |
+
### ToggleAwardEmojiPayload
| Name | Type | Description |
@@ -495,7 +743,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| Name | Type | Description |
| --- | ---- | ---------- |
-| `lastCommit` | Commit | |
+| `lastCommit` | Commit | Last commit for the tree |
### TreeEntry
@@ -508,6 +756,22 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `flatPath` | String! | |
| `webUrl` | String | |
+### UpdateEpicPayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `epic` | Epic | The epic after mutation |
+
+### UpdateNotePayload
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `note` | Note | The note after mutation |
+
### User
| Name | Type | Description |
diff --git a/doc/api/group_clusters.md b/doc/api/group_clusters.md
index 8a85b5b8763..e878bb5fa4d 100644
--- a/doc/api/group_clusters.md
+++ b/doc/api/group_clusters.md
@@ -276,5 +276,5 @@ Parameters:
Example request:
```bash
-curl --request DELETE --header 'Private-Token: <your_access_token>' https://gitlab.example.com/api/v4/groups/26/clusters/23'
+curl --request DELETE --header 'Private-Token: <your_access_token>' https://gitlab.example.com/api/v4/groups/26/clusters/23
```
diff --git a/doc/api/group_labels.md b/doc/api/group_labels.md
index 5030bba3159..f3c3a821354 100644
--- a/doc/api/group_labels.md
+++ b/doc/api/group_labels.md
@@ -16,6 +16,7 @@ GET /groups/:id/labels
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user. |
| `with_counts` | boolean | no | Whether or not to include issue and merge request counts. Defaults to `false`. _([Introduced in GitLab 12.2](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31543))_ |
+| `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/5/labels?with_counts=true
@@ -50,6 +51,40 @@ Example response:
]
```
+## Get a single group label
+
+Get a single label for a given group.
+
+```
+GET /groups/:id/labels/:label_id
+```
+
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user. |
+| `label_id` | integer or string | yes | The ID or title of a group's label. |
+| `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
+
+```bash
+curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/5/labels/bug
+```
+
+Example response:
+
+```json
+{
+ "id": 7,
+ "name": "bug",
+ "color": "#FF0000",
+ "text_color" : "#FFFFFF",
+ "description": null,
+ "open_issues_count": 0,
+ "closed_issues_count": 0,
+ "open_merge_requests_count": 0,
+ "subscribed": false
+}
+```
+
## Create a new group label
Create a new group label for a given group.
@@ -90,19 +125,19 @@ Example response:
Updates an existing group label. At least one parameter is required, to update the group label.
```
-PUT /groups/:id/labels
+PUT /groups/:id/labels/:label_id
```
| Attribute | Type | Required | Description |
| ------------- | ------- | -------- | ---------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `name` | string | yes | The name of the label |
+| `label_id` | integer or string | yes | The ID or title of a group's label. |
| `new_name` | string | no | The new name of the label |
| `color` | string | no | The color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB) or one of the [CSS color names](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords) |
| `description` | string | no | The description of the label. |
```bash
-curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" --data '{"name": "Feature Proposal", "new_name": "Feature Idea" }' https://gitlab.example.com/api/v4/groups/5/labels
+curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" --data '{"new_name": "Feature Idea" }' https://gitlab.example.com/api/v4/groups/5/labels/Feature%20Proposal
```
Example response:
@@ -121,23 +156,27 @@ Example response:
}
```
+NOTE: **Note:** An older endpoint `PUT /groups/:id/labels` with `name` in the params is still available, but deprecated.
+
## Delete a group label
Deletes a group label with a given name.
```
-DELETE /groups/:id/labels
+DELETE /groups/:id/labels/:label_id
```
| Attribute | Type | Required | Description |
| --------- | ------- | -------- | --------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `name` | string | yes | The name of the label. |
+| `label_id` | integer or string | yes | The ID or title of a group's label. |
```bash
-curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/5/labels?name=bug
+curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/5/labels/bug
```
+NOTE: **Note:** An older endpoint `DELETE /groups/:id/labels` with `name` in the params is still available, but deprecated.
+
## Subscribe to a group label
Subscribes the authenticated user to a group label to receive notifications. If
diff --git a/doc/api/groups.md b/doc/api/groups.md
index b0d60d58049..312bd04e24c 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -31,6 +31,13 @@ GET /groups
"path": "foo-bar",
"description": "An interesting group",
"visibility": "public",
+ "share_with_group_lock": false,
+ "require_two_factor_authentication": false,
+ "two_factor_grace_period": 48,
+ "project_creation_level": "developer",
+ "auto_devops_enabled": null,
+ "subgroup_creation_level": "owner",
+ "emails_disabled": null,
"lfs_enabled": true,
"avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg",
"web_url": "http://localhost:3000/groups/foo-bar",
@@ -57,6 +64,13 @@ GET /groups?statistics=true
"path": "foo-bar",
"description": "An interesting group",
"visibility": "public",
+ "share_with_group_lock": false,
+ "require_two_factor_authentication": false,
+ "two_factor_grace_period": 48,
+ "project_creation_level": "developer",
+ "auto_devops_enabled": null,
+ "subgroup_creation_level": "owner",
+ "emails_disabled": null,
"lfs_enabled": true,
"avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg",
"web_url": "http://localhost:3000/groups/foo-bar",
@@ -119,6 +133,13 @@ GET /groups/:id/subgroups
"path": "foo-bar",
"description": "An interesting group",
"visibility": "public",
+ "share_with_group_lock": false,
+ "require_two_factor_authentication": false,
+ "two_factor_grace_period": 48,
+ "project_creation_level": "developer",
+ "auto_devops_enabled": null,
+ "subgroup_creation_level": "owner",
+ "emails_disabled": null,
"lfs_enabled": true,
"avatar_url": "http://gitlab.example.com/uploads/group/avatar/1/foo.jpg",
"web_url": "http://gitlab.example.com/groups/foo-bar",
@@ -434,6 +455,13 @@ Parameters:
| `path` | string | yes | The path of the group. |
| `description` | string | no | The group's description. |
| `visibility` | string | no | The group's visibility. Can be `private`, `internal`, or `public`. |
+| `share_with_group_lock` | boolean | no | Prevent sharing a project with another group within this group. |
+| `require_two_factor_authentication` | boolean | no | Require all users in this group to setup Two-factor authentication. |
+| `two_factor_grace_period` | integer | no | Time before Two-factor authentication is enforced (in hours). |
+| `project_creation_level` | string | no | Determine if developers can create projects in the group. Can be `noone` (No one), `maintainer` (Maintainers), or `developer` (Developers + Maintainers). |
+| `auto_devops_enabled` | boolean | no | Default to Auto DevOps pipeline for all projects within this group. |
+| `subgroup_creation_level` | integer | no | Allowed to create subgroups. Can be `owner` (Owners), or `maintainer` (Maintainers). |
+| `emails_disabled` | boolean | no | Disable email notifications |
| `lfs_enabled` | boolean | no | Enable/disable Large File Storage (LFS) for the projects in this group. |
| `request_access_enabled` | boolean | no | Allow users to request member access. |
| `parent_id` | integer | no | The parent group ID for creating nested group. |
@@ -472,6 +500,13 @@ PUT /groups/:id
| `membership_lock` | boolean | no | **(STARTER)** Prevent adding new members to project membership within this group. |
| `share_with_group_lock` | boolean | no | Prevent sharing a project with another group within this group. |
| `visibility` | string | no | The visibility level of the group. Can be `private`, `internal`, or `public`. |
+| `share_with_group_lock` | boolean | no | Prevent sharing a project with another group within this group. |
+| `require_two_factor_authentication` | boolean | no | Require all users in this group to setup Two-factor authentication. |
+| `two_factor_grace_period` | integer | no | Time before Two-factor authentication is enforced (in hours). |
+| `project_creation_level` | string | no | Determine if developers can create projects in the group. Can be `noone` (No one), `maintainer` (Maintainers), or `developer` (Developers + Maintainers). |
+| `auto_devops_enabled` | boolean | no | Default to Auto DevOps pipeline for all projects within this group. |
+| `subgroup_creation_level` | integer | no | Allowed to create subgroups. Can be `owner` (Owners), or `maintainer` (Maintainers). |
+| `emails_disabled` | boolean | no | Disable email notifications |
| `lfs_enabled` (optional) | boolean | no | Enable/disable Large File Storage (LFS) for the projects in this group. |
| `request_access_enabled` | boolean | no | Allow users to request member access. |
| `file_template_project_id` | integer | no | **(PREMIUM)** The ID of a project to load custom file templates from. |
diff --git a/doc/api/issues.md b/doc/api/issues.md
index e323ebce7ca..0ddbb18ce92 100644
--- a/doc/api/issues.md
+++ b/doc/api/issues.md
@@ -58,7 +58,7 @@ GET /issues?confidential=true
| `updated_after` | datetime | no | Return issues updated on or after the given time |
| `updated_before` | datetime | no | Return issues updated on or before the given time |
| `confidential` | Boolean | no | Filter confidential or public issues. |
-| `not` | Hash | no | Return issues that do not match the parameters supplied. Accepts: `labels`, `milestone`, `author_id`, `author_username`, `assignee_id`, `assignee_username`, `my_reaction_emoji`, `search`, `in` |
+| `not` | Hash | no | Return issues that do not match the parameters supplied. Accepts: `labels`, `milestone`, `author_id`, `author_username`, `assignee_id`, `assignee_username`, `my_reaction_emoji`, `search`, `in` |
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/issues
@@ -207,7 +207,7 @@ GET /groups/:id/issues?confidential=true
| `updated_after` | datetime | no | Return issues updated on or after the given time |
| `updated_before` | datetime | no | Return issues updated on or before the given time |
| `confidential` | Boolean | no | Filter confidential or public issues. |
-| `not` | Hash | no | Return issues that do not match the parameters supplied. Accepts: `labels`, `milestone`, `author_id`, `author_username`, `assignee_id`, `assignee_username`, `my_reaction_emoji`, `search`, `in` |
+| `not` | Hash | no | Return issues that do not match the parameters supplied. Accepts: `labels`, `milestone`, `author_id`, `author_username`, `assignee_id`, `assignee_username`, `my_reaction_emoji`, `search`, `in` |
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/4/issues
@@ -605,7 +605,7 @@ POST /projects/:id/issues
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
| `iid` | integer/string | no | The internal ID of the project's issue (requires admin or project owner rights) |
| `title` | string | yes | The title of an issue |
-| `description` | string | no | The description of an issue. Limited to 1 000 000 characters. |
+| `description` | string | no | The description of an issue. Limited to 1,048,576 characters. |
| `confidential` | boolean | no | Set an issue to be confidential. Default is `false`. |
| `assignee_ids` | integer array | no | The ID of a user to assign issue |
| `milestone_id` | integer | no | The global ID of a milestone to assign issue |
@@ -615,6 +615,7 @@ POST /projects/:id/issues
| `merge_request_to_resolve_discussions_of` | integer | no | The IID of a merge request in which to resolve all issues. This will fill the issue with a default description and mark all discussions as resolved. When passing a description or title, these values will take precedence over the default values.|
| `discussion_to_resolve` | string | no | The ID of a discussion to resolve. This will fill in the issue with a default description and mark the discussion as resolved. Use in combination with `merge_request_to_resolve_discussions_of`. |
| `weight` **(STARTER)** | integer | no | The weight of the issue. Valid values are greater than or equal to 0. |
+| `epic_iid` **(ULTIMATE)** | integer | no | IID of the epic to add the issue to. Valid values are greater than or equal to 0. |
```bash
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/4/issues?title=Issues%20with%20auth&labels=bug
@@ -706,7 +707,7 @@ PUT /projects/:id/issues/:issue_iid
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
| `issue_iid` | integer | yes | The internal ID of a project's issue |
| `title` | string | no | The title of an issue |
-| `description` | string | no | The description of an issue. Limited to 1 000 000 characters. |
+| `description` | string | no | The description of an issue. Limited to 1,048,576 characters. |
| `confidential` | boolean | no | Updates an issue to be confidential |
| `assignee_ids` | integer array | no | The ID of the user(s) to assign the issue to. Set to `0` or provide an empty value to unassign all assignees. |
| `milestone_id` | integer | no | The global ID of a milestone to assign the issue to. Set to `0` or provide an empty value to unassign a milestone.|
@@ -716,6 +717,7 @@ PUT /projects/:id/issues/:issue_iid
| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
| `weight` **(STARTER)** | integer | no | The weight of the issue. Valid values are greater than or equal to 0. 0 |
| `discussion_locked` | boolean | no | Flag indicating if the issue's discussion is locked. If the discussion is locked only project members can add or edit comments. |
+| `epic_iid` **(ULTIMATE)** | integer | no | IID of the epic to add the issue to. Valid values are greater than or equal to 0. |
```bash
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/4/issues/85?state_event=close
@@ -1370,8 +1372,11 @@ Example response:
"state": "opened",
"created_at": "2018-09-18T14:36:15.510Z",
"updated_at": "2018-09-19T07:45:13.089Z",
+ "closed_by": null,
+ "closed_at": null,
"target_branch": "v2.x",
"source_branch": "so_long_jquery",
+ "user_notes_count": 9,
"upvotes": 0,
"downvotes": 0,
"author": {
@@ -1411,10 +1416,10 @@ Example response:
"merge_status": "cannot_be_merged",
"sha": "3b7b528e9353295c1c125dad281ac5b5deae5f12",
"merge_commit_sha": null,
- "user_notes_count": 9,
"discussion_locked": null,
"should_remove_source_branch": null,
"force_remove_source_branch": false,
+ "reference": "!11",
"web_url": "https://gitlab.example.com/twitter/flight/merge_requests/4",
"time_stats": {
"time_estimate": 0,
@@ -1422,7 +1427,67 @@ Example response:
"human_time_estimate": null,
"human_total_time_spent": null
},
- "squash": false
+ "squash": false,
+ "task_completion_status": {
+ "count": 0,
+ "completed_count": 0
+ },
+ "changes_count": "10",
+ "latest_build_started_at": "2018-12-05T01:16:41.723Z",
+ "latest_build_finished_at": "2018-12-05T02:35:54.046Z",
+ "first_deployed_to_production_at": null,
+ "pipeline": {
+ "id": 38980952,
+ "sha": "81c6a84c7aebd45a1ac2c654aa87f11e32338e0a",
+ "ref": "test-branch",
+ "status": "success",
+ "web_url": "https://gitlab.com/gitlab-org/gitlab/pipelines/38980952"
+ },
+ "head_pipeline": {
+ "id": 38980952,
+ "sha": "81c6a84c7aebd45a1ac2c654aa87f11e32338e0a",
+ "ref": "test-branch",
+ "status": "success",
+ "web_url": "https://gitlab.example.com/twitter/flight/pipelines/38980952",
+ "before_sha": "3c738a37eb23cf4c0ed0d45d6ddde8aad4a8da51",
+ "tag": false,
+ "yaml_errors": null,
+ "user": {
+ "id": 19,
+ "name": "Jody Baumbach",
+ "username": "felipa.kuvalis",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/6541fc75fc4e87e203529bd275fafd07?s=80&d=identicon",
+ "web_url": "https://gitlab.example.com/felipa.kuvalis"
+ },
+ "created_at": "2018-12-05T01:16:13.342Z",
+ "updated_at": "2018-12-05T02:35:54.086Z",
+ "started_at": "2018-12-05T01:16:41.723Z",
+ "finished_at": "2018-12-05T02:35:54.046Z",
+ "committed_at": null,
+ "duration": 4436,
+ "coverage": "46.68",
+ "detailed_status": {
+ "icon": "status_warning",
+ "text": "passed",
+ "label": "passed with warnings",
+ "group": "success-with-warnings",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/twitter/flight/pipelines/38",
+ "illustration": null,
+ "favicon": "https://gitlab.example.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ }
+ },
+ "diff_refs": {
+ "base_sha": "d052d768f0126e8cddf80afd8b1eb07f406a3fcb",
+ "head_sha": "81c6a84c7aebd45a1ac2c654aa87f11e32338e0a",
+ "start_sha": "d052d768f0126e8cddf80afd8b1eb07f406a3fcb"
+ },
+ "merge_error": null,
+ "user": {
+ "can_merge": true
+ }
}
]
```
diff --git a/doc/api/jobs.md b/doc/api/jobs.md
index 8ee4facc018..bafcfd110d3 100644
--- a/doc/api/jobs.md
+++ b/doc/api/jobs.md
@@ -537,9 +537,9 @@ Possible response status codes:
| 400 | Invalid path provided |
| 404 | Build not found or no file/artifacts |
-## Get a trace file
+## Get a log file
-Get a trace of a specific job of a project
+Get a log (trace) of a specific job of a project:
```
GET /projects/:id/jobs/:job_id/trace
@@ -556,10 +556,10 @@ curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.ex
Possible response status codes:
-| Status | Description |
-|-----------|-----------------------------------|
-| 200 | Serves the trace file |
-| 404 | Build not found or no trace file |
+| Status | Description |
+|-----------|-------------------------------|
+| 200 | Serves the log file |
+| 404 | Job not found or no log file |
## Cancel a job
@@ -661,7 +661,7 @@ Example of response
## Erase a job
-Erase a single job of a project (remove job artifacts and a job trace)
+Erase a single job of a project (remove job artifacts and a job log)
```
POST /projects/:id/jobs/:job_id/erase
diff --git a/doc/api/labels.md b/doc/api/labels.md
index 93833fd81cb..525dbe02e5f 100644
--- a/doc/api/labels.md
+++ b/doc/api/labels.md
@@ -12,6 +12,7 @@ GET /projects/:id/labels
| --------- | ------- | -------- | --------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
| `with_counts` | boolean | no | Whether or not to include issue and merge request counts. Defaults to `false`. _([Introduced in GitLab 12.2](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31543))_ |
+| `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/1/labels?with_counts=true
@@ -89,6 +90,42 @@ Example response:
]
```
+## Get a single project label
+
+Get a single label for a given project.
+
+```
+GET /projects/:id/labels/:label_id
+```
+
+| Attribute | Type | Required | Description |
+| --------- | ------- | -------- | --------------------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `label_id` | integer or string | yes | The ID or title of a group's label. |
+| `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
+
+```bash
+curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/1/labels/bug
+```
+
+Example response:
+
+```json
+{
+ "id" : 1,
+ "name" : "bug",
+ "color" : "#d9534f",
+ "text_color" : "#FFFFFF",
+ "description": "Bug reported by user",
+ "open_issues_count": 1,
+ "closed_issues_count": 0,
+ "open_merge_requests_count": 1,
+ "subscribed": false,
+ "priority": 10,
+ "is_project_label": true
+}
+```
+
## Create a new label
Creates a new label for the given repository with the given name and color.
@@ -132,40 +169,40 @@ Example response:
Deletes a label with a given name.
```
-DELETE /projects/:id/labels
+DELETE /projects/:id/labels/:label_id
```
| Attribute | Type | Required | Description |
| --------- | ------- | -------- | --------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `label_id` | integer | yes (or `name`) | The id of the existing label |
-| `name` | string | yes (or `label_id`) | The name of the existing label |
+| `label_id` | integer or string | yes | The ID or title of a group's label. |
```bash
-curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/labels?name=bug"
+curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/labels/bug"
```
+NOTE: **Note:** An older endpoint `DELETE /projects/:id/labels` with `name` in the params is still available, but deprecated.
+
## Edit an existing label
Updates an existing label with new name or new color. At least one parameter
is required, to update the label.
```
-PUT /projects/:id/labels
+PUT /projects/:id/labels/:label_id
```
| Attribute | Type | Required | Description |
| --------------- | ------- | --------------------------------- | ------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `label_id` | integer | yes (or `name`) | The id of the existing label |
-| `name` | string | yes (or `label_id`) | The name of the existing label |
+| `label_id` | integer or string | yes | The ID or title of a group's label. |
| `new_name` | string | yes if `color` is not provided | The new name of the label |
| `color` | string | yes if `new_name` is not provided | The color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB) or one of the [CSS color names](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords) |
| `description` | string | no | The new description of the label |
| `priority` | integer | no | The new priority of the label. Must be greater or equal than zero or `null` to remove the priority. |
```bash
-curl --request PUT --data "name=documentation&new_name=docs&color=#8E44AD&description=Documentation" --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/labels"
+curl --request PUT --data "new_name=docs&color=#8E44AD&description=Documentation" --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/labels/documentation"
```
Example response:
@@ -186,6 +223,8 @@ Example response:
}
```
+NOTE: **Note:** An older endpoint `PUT /projects/:id/labels` with `name` or `label_id` in the params is still available, but deprecated.
+
## Promote a project label to a group label
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/25218) in GitLab 12.3.
@@ -193,16 +232,16 @@ Example response:
Promotes a project label to a group label.
```
-PUT /projects/:id/labels/promote
+PUT /projects/:id/labels/:label_id/promote
```
| Attribute | Type | Required | Description |
| --------------- | ------- | --------------------------------- | ------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `name` | string | yes | The name of the existing label |
+| `label_id` | integer or string | yes | The ID or title of a group's label. |
```bash
-curl --request PUT --data "name=documentation" --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/labels/promote"
+curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/labels/documentation/promote"
```
Example response:
@@ -220,6 +259,8 @@ Example response:
}
```
+NOTE: **Note:** An older endpoint `PUT /projects/:id/labels/promote` with `name` in the params is still available, but deprecated.
+
## Subscribe to a label
Subscribes the authenticated user to a label to receive notifications.
diff --git a/doc/api/members.md b/doc/api/members.md
index da62dc53659..50dcf86c972 100644
--- a/doc/api/members.md
+++ b/doc/api/members.md
@@ -26,6 +26,7 @@ GET /projects/:id/members
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project or group](README.md#namespaced-path-encoding) owned by the authenticated user |
| `query` | string | no | A query string to search for members |
+| `user_ids` | array of integers | no | Filter the results on the given user IDs |
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/:id/members
@@ -62,9 +63,8 @@ Example response:
## List all members of a group or project including inherited members
Gets a list of group or project members viewable by the authenticated user, including inherited members through ancestor groups.
-When a user is a member of the project/group and of one or more ancestor groups the user is returned only once with the project access_level (if exists)
-or the access_level for the user in the first group which he belongs to in the project groups ancestors chain.
-**Note:** We plan to [change](https://gitlab.com/gitlab-org/gitlab-foss/issues/62284) this behavior to return highest access_level instead.
+When a user is a member of the project/group and of one or more ancestor groups the user is returned only once with the project `access_level` (if exists)
+or the `access_level` for the user in the first group which he belongs to in the project groups ancestors chain.
```
GET /groups/:id/members/all
@@ -75,6 +75,7 @@ GET /projects/:id/members/all
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project or group](README.md#namespaced-path-encoding) owned by the authenticated user |
| `query` | string | no | A query string to search for members |
+| `user_ids` | array of integers | no | Filter the results on the given user IDs |
```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/:id/members/all
@@ -120,7 +121,7 @@ Example response:
## Get a member of a group or project
-Gets a member of a group or project.
+Gets a member of a group or project. Returns only direct members and not inherited members through ancestor groups.
```
GET /groups/:id/members/:user_id
@@ -152,6 +153,42 @@ Example response:
}
```
+## Get a member of a group or project, including inherited members
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/17744) in GitLab 12.4.
+
+Gets a member of a group or project, including members inherited through ancestor groups. See the corresponding [endpoint to list all inherited members](#list-all-members-of-a-group-or-project-including-inherited-members) for details.
+
+```
+GET /groups/:id/members/all/:user_id
+GET /projects/:id/members/all/:user_id
+```
+
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project or group](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `user_id` | integer | yes | The user ID of the member |
+
+```bash
+curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/:id/members/all/:user_id
+curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/:id/members/all/:user_id
+```
+
+Example response:
+
+```json
+{
+ "id": 1,
+ "username": "raymond_smith",
+ "name": "Raymond Smith",
+ "state": "active",
+ "avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
+ "web_url": "http://192.168.1.8:3000/root",
+ "access_level": 30,
+ "expires_at": null
+}
+```
+
## Add a member to a group or project
Adds a member to a group or project.
diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md
index 21e24dc7934..4bc46c3030d 100644
--- a/doc/api/merge_requests.md
+++ b/doc/api/merge_requests.md
@@ -823,7 +823,7 @@ Parameters:
## Create MR Pipeline
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31722) in Gitlab 12.3.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31722) in GitLab 12.3.
Create a new [pipeline for a merge request](../ci/merge_request_pipelines/index.md). A pipeline created via this endpoint will not run a regular branch/tag pipeline, it requires `.gitlab-ci.yml` to be configured with `only: [merge_requests]` to create jobs.
@@ -897,7 +897,7 @@ POST /projects/:id/merge_requests
| `title` | string | yes | Title of MR |
| `assignee_id` | integer | no | Assignee user ID |
| `assignee_ids` | integer array | no | The ID of the user(s) to assign the MR to. Set to `0` or provide an empty value to unassign all assignees. |
-| `description` | string | no | Description of MR. Limited to 1 000 000 characters. |
+| `description` | string | no | Description of MR. Limited to 1,048,576 characters. |
| `target_project_id` | integer | no | The target project (numeric id) |
| `labels` | string | no | Labels for MR as a comma-separated list |
| `milestone_id` | integer | no | The global ID of a milestone |
@@ -1050,7 +1050,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid
| `assignee_ids` | integer array | no | The ID of the user(s) to assign the MR to. Set to `0` or provide an empty value to unassign all assignees. |
| `milestone_id` | integer | no | The global ID of a milestone to assign the merge request to. Set to `0` or provide an empty value to unassign a milestone.|
| `labels` | string | no | Comma-separated label names for a merge request. Set to an empty string to unassign all labels. |
-| `description` | string | no | Description of MR. Limited to 1 000 000 characters. |
+| `description` | string | no | Description of MR. Limited to 1,048,576 characters. |
| `state_event` | string | no | New state (close/reopen) |
| `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging |
| `squash` | boolean | no | Squash commits into a single commit when merging |
diff --git a/doc/api/notes.md b/doc/api/notes.md
index 1f5baf7d0e1..2cace425ff2 100644
--- a/doc/api/notes.md
+++ b/doc/api/notes.md
@@ -113,7 +113,7 @@ Parameters:
- `id` (required) - The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding)
- `issue_iid` (required) - The IID of an issue
-- `body` (required) - The content of a note. Limited to 1 000 000 characters.
+- `body` (required) - The content of a note. Limited to 1,000,000 characters.
- `created_at` (optional) - Date time string, ISO 8601 formatted, e.g. 2016-03-11T03:45:40Z (requires admin or project/group owner rights)
```bash
@@ -133,7 +133,7 @@ Parameters:
- `id` (required) - The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding)
- `issue_iid` (required) - The IID of an issue
- `note_id` (required) - The ID of a note
-- `body` (required) - The content of a note. Limited to 1 000 000 characters.
+- `body` (required) - The content of a note. Limited to 1,000,000 characters.
```bash
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/5/issues/11/notes?body=note
@@ -231,7 +231,7 @@ Parameters:
- `id` (required) - The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding)
- `snippet_id` (required) - The ID of a snippet
-- `body` (required) - The content of a note. Limited to 1 000 000 characters.
+- `body` (required) - The content of a note. Limited to 1,000,000 characters.
- `created_at` (optional) - Date time string, ISO 8601 formatted, e.g. 2016-03-11T03:45:40Z
```bash
@@ -251,7 +251,7 @@ Parameters:
- `id` (required) - The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding)
- `snippet_id` (required) - The ID of a snippet
- `note_id` (required) - The ID of a note
-- `body` (required) - The content of a note. Limited to 1 000 000 characters.
+- `body` (required) - The content of a note. Limited to 1,000,000 characters.
```bash
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/5/snippets/11/notes?body=note
@@ -354,7 +354,7 @@ Parameters:
- `id` (required) - The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding)
- `merge_request_iid` (required) - The IID of a merge request
-- `body` (required) - The content of a note. Limited to 1 000 000 characters.
+- `body` (required) - The content of a note. Limited to 1,000,000 characters.
- `created_at` (optional) - Date time string, ISO 8601 formatted, e.g. 2016-03-11T03:45:40Z
### Modify existing merge request note
@@ -370,7 +370,7 @@ Parameters:
- `id` (required) - The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding)
- `merge_request_iid` (required) - The IID of a merge request
- `note_id` (required) - The ID of a note
-- `body` (required) - The content of a note. Limited to 1 000 000 characters.
+- `body` (required) - The content of a note. Limited to 1,000,000 characters.
```bash
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/5/merge_requests/11/notes?body=note
@@ -472,7 +472,7 @@ Parameters:
| --------- | -------------- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) |
| `epic_id` | integer | yes | The ID of an epic |
-| `body` | string | yes | The content of a note. Limited to 1 000 000 characters. |
+| `body` | string | yes | The content of a note. Limited to 1,000,000 characters. |
```bash
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/5/snippet/11/notes?body=note
@@ -493,7 +493,7 @@ Parameters:
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](README.md#namespaced-path-encoding) |
| `epic_id` | integer | yes | The ID of an epic |
| `note_id` | integer | yes | The ID of a note |
-| `body` | string | yes | The content of a note. Limited to 1 000 000 characters. |
+| `body` | string | yes | The content of a note. Limited to 1,000,000 characters. |
```bash
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/5/snippet/11/notes?body=note
diff --git a/doc/api/oauth2.md b/doc/api/oauth2.md
index f9382361187..6b49a39b83a 100644
--- a/doc/api/oauth2.md
+++ b/doc/api/oauth2.md
@@ -102,7 +102,7 @@ CAUTION: **Important:**
Avoid using this flow for applications that store data outside of the GitLab
instance. If you do, make sure to verify `application id` associated with the
access token before granting access to the data
-(see [/oauth/token/info](https://github.com/doorkeeper-gem/doorkeeper/wiki/API-endpoint-descriptions-and-examples#get----oauthtokeninfo)).
+(see [`/oauth/token/info`](https://github.com/doorkeeper-gem/doorkeeper/wiki/API-endpoint-descriptions-and-examples#get----oauthtokeninfo)).
Unlike the web flow, the client receives an `access token` immediately as a
result of the authorization request. The flow does not use the client secret
diff --git a/doc/api/pipelines.md b/doc/api/pipelines.md
index c012c947c3a..90a4f8d6e26 100644
--- a/doc/api/pipelines.md
+++ b/doc/api/pipelines.md
@@ -34,14 +34,18 @@ Example of response
"status": "pending",
"ref": "new-pipeline",
"sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
- "web_url": "https://example.com/foo/bar/pipelines/47"
+ "web_url": "https://example.com/foo/bar/pipelines/47",
+ "created_at": "2016-08-11T11:28:34.085Z",
+ "updated_at": "2016-08-11T11:32:35.169Z",
},
{
"id": 48,
"status": "pending",
"ref": "new-pipeline",
"sha": "eb94b618fb5865b26e80fdd8ae531b7a63ad851a",
- "web_url": "https://example.com/foo/bar/pipelines/48"
+ "web_url": "https://example.com/foo/bar/pipelines/48",
+ "created_at": "2016-08-12T10:06:04.561Z",
+ "updated_at": "2016-08-12T10:09:56.223Z",
}
]
```
diff --git a/doc/api/project_aliases.md b/doc/api/project_aliases.md
index 9d59ca1e3b5..da8d7600c7c 100644
--- a/doc/api/project_aliases.md
+++ b/doc/api/project_aliases.md
@@ -23,12 +23,12 @@ Example response:
{
"id": 1,
"project_id": 1,
- "name": "gitlab-ce"
+ "name": "gitlab-foss"
},
{
"id": 2,
"project_id": 2,
- "name": "gitlab-ee"
+ "name": "gitlab"
}
]
```
@@ -46,7 +46,7 @@ GET /project_aliases/:name
| `name` | string | yes | The name of the alias |
```
-curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases/gitlab-ee"
+curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases/gitlab"
```
Example response:
@@ -55,7 +55,7 @@ Example response:
{
"id": 1,
"project_id": 1,
- "name": "gitlab-ee"
+ "name": "gitlab"
}
```
@@ -74,13 +74,13 @@ POST /project_aliases
| `name` | string | yes | The name of the alias. Must be unique. |
```
-curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases" --form "project_id=1" --form "name=gitlab-ee"
+curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases" --form "project_id=1" --form "name=gitlab"
```
or
```
-curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases" --form "project_id=gitlab-org/gitlab-ee" --form "name=gitlab-ee"
+curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases" --form "project_id=gitlab-org/gitlab" --form "name=gitlab"
```
Example response:
@@ -89,7 +89,7 @@ Example response:
{
"id": 1,
"project_id": 1,
- "name": "gitlab-ee"
+ "name": "gitlab"
}
```
@@ -107,5 +107,5 @@ DELETE /project_aliases/:name
| `name` | string | yes | The name of the alias |
```
-curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases/gitlab-ee"
+curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/project_aliases/gitlab"
```
diff --git a/doc/api/project_import_export.md b/doc/api/project_import_export.md
index e285c721d11..cd02d423a9f 100644
--- a/doc/api/project_import_export.md
+++ b/doc/api/project_import_export.md
@@ -111,6 +111,7 @@ POST /projects/import
| Attribute | Type | Required | Description |
| --------- | -------------- | -------- | ---------------------------------------- |
| `namespace` | integer/string | no | The ID or path of the namespace that the project will be imported to. Defaults to the current user's namespace |
+| `name` | string | no | The name of the project to be imported. Defaults to the path of the project if not provided |
| `file` | string | yes | The file to be uploaded |
| `path` | string | yes | Name and path for new project |
| `overwrite` | boolean | no | If there is a project with the same path the import will overwrite it. Default to false |
@@ -131,14 +132,12 @@ cURL doesn't support posting a file from a remote server. Importing a project fr
```python
import requests
-import urllib
-import json
-import sys
+from io import BytesIO
-s3_file = urllib.urlopen(presigned_url)
+s3_file = requests.get(presigned_url)
url = 'https://gitlab.example.com/api/v4/projects/import'
-files = {'file': s3_file}
+files = {'file': ('file.tar.gz', BytesIO(s3_file.content))}
data = {
"path": "example-project",
"namespace": "example-group"
diff --git a/doc/api/project_snippets.md b/doc/api/project_snippets.md
index c2a39fd2178..7a6c90701ba 100644
--- a/doc/api/project_snippets.md
+++ b/doc/api/project_snippets.md
@@ -78,7 +78,7 @@ Parameters:
- `title` (required) - The title of a snippet
- `file_name` (required) - The name of a snippet file
- `description` (optional) - The description of a snippet
-- `code` (required) - The content of a snippet
+- `content` (required) - The content of a snippet
- `visibility` (required) - The snippet's visibility
Example request:
@@ -97,7 +97,7 @@ curl --request POST https://gitlab.com/api/v4/projects/:id/snippets \
"title" : "Example Snippet Title",
"description" : "More verbose snippet description",
"file_name" : "example.txt",
- "code" : "source code \n with multiple lines\n",
+ "content" : "source code \n with multiple lines\n",
"visibility" : "private"
}
```
@@ -117,7 +117,7 @@ Parameters:
- `title` (optional) - The title of a snippet
- `file_name` (optional) - The name of a snippet file
- `description` (optional) - The description of a snippet
-- `code` (optional) - The content of a snippet
+- `content` (optional) - The content of a snippet
- `visibility` (optional) - The snippet's visibility
Example request:
@@ -136,7 +136,7 @@ curl --request PUT https://gitlab.com/api/v4/projects/:id/snippets \
"title" : "Updated Snippet Title",
"description" : "More verbose snippet description",
"file_name" : "new_filename.txt",
- "code" : "updated source code \n with multiple lines\n",
+ "content" : "updated source code \n with multiple lines\n",
"visibility" : "private"
}
```
diff --git a/doc/api/projects.md b/doc/api/projects.md
index af0c8ed7c5b..c352b972b17 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -809,16 +809,16 @@ If the project is a fork, and you provide a valid token to authenticate, the
"description":"GitLab Community Edition",
"name":"GitLab Community Edition",
"name_with_namespace":"GitLab.org / GitLab Community Edition",
- "path":"gitlab-ce",
- "path_with_namespace":"gitlab-org/gitlab-ce",
+ "path":"gitlab-foss",
+ "path_with_namespace":"gitlab-org/gitlab-foss",
"created_at":"2013-09-26T06:02:36.000Z",
"default_branch":"master",
"tag_list":[],
- "ssh_url_to_repo":"git@gitlab.com:gitlab-org/gitlab-ce.git",
+ "ssh_url_to_repo":"git@gitlab.com:gitlab-org/gitlab-foss.git",
"http_url_to_repo":"https://gitlab.com/gitlab-org/gitlab-foss.git",
"web_url":"https://gitlab.com/gitlab-org/gitlab-foss",
"avatar_url":"https://assets.gitlab-static.net/uploads/-/system/project/avatar/13083/logo-extra-whitespace.png",
- "license_url": "https://gitlab.com/gitlab-org/gitlab-foss/blob/master/LICENSE",
+ "license_url": "https://gitlab.com/gitlab-org/gitlab/blob/master/LICENSE",
"license": {
"key": "mit",
"name": "MIT License",
@@ -931,9 +931,13 @@ POST /projects
| `auto_devops_deploy_strategy` | string | no | Auto Deploy strategy (`continuous`, `manual` or `timed_incremental`) |
| `repository_storage` | string | no | **(STARTER ONLY)** Which storage shard the repository is on. Available only to admins |
| `approvals_before_merge` | integer | no | **(STARTER)** How many approvers should approve merge requests by default |
+| `external_authorization_classification_label` | string | no | **(PREMIUM)** The classification label for the project |
| `mirror` | boolean | no | **(STARTER)** Enables pull mirroring in a project |
| `mirror_trigger_builds` | boolean | no | **(STARTER)** Pull mirroring triggers builds |
| `initialize_with_readme` | boolean | no | `false` by default |
+| `template_name` | string | no | When used without `use_custom_template`, name of a [built-in project template](../gitlab-basics/create-project.md#built-in-templates). When used with `use_custom_template`, name of a custom project template |
+| `use_custom_template` | boolean | no | **(PREMIUM)** Use either custom [instance](../user/admin_area/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template |
+| `group_with_project_templates_id` | integer | no | **(PREMIUM)** For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires `use_custom_template` to be true |
NOTE: **Note:** If your HTTP repository is not publicly accessible,
add authentication information to the URL: `https://username:password@gitlab.company.com/group/project.git`
@@ -991,6 +995,7 @@ POST /projects/user/:user_id
| `external_authorization_classification_label` | string | no | **(PREMIUM)** The classification label for the project |
| `mirror` | boolean | no | **(STARTER)** Enables pull mirroring in a project |
| `mirror_trigger_builds` | boolean | no | **(STARTER)** Pull mirroring triggers builds |
+| `initialize_with_readme` | boolean | no | `false` by default |
| `template_name` | string | no | When used without `use_custom_template`, name of a [built-in project template](../gitlab-basics/create-project.md#built-in-templates). When used with `use_custom_template`, name of a custom project template |
| `use_custom_template` | boolean | no | **(PREMIUM)** Use either custom [instance](../user/admin_area/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template |
| `group_with_project_templates_id` | integer | no | **(PREMIUM)** For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires `use_custom_template` to be true |
@@ -2018,7 +2023,7 @@ Read more in the [Project members](members.md) documentation.
## Start the pull mirroring process for a Project **(STARTER)**
-> Introduced in [GitLab Starter](https://about.gitlab.com/pricing) 10.3.
+> Introduced in [GitLab Starter](https://about.gitlab.com/pricing/) 10.3.
```
POST /projects/:id/mirror/pull
diff --git a/doc/api/protected_branches.md b/doc/api/protected_branches.md
index a14c9046ca7..4a750b42f65 100644
--- a/doc/api/protected_branches.md
+++ b/doc/api/protected_branches.md
@@ -46,7 +46,8 @@ Example response:
"access_level": 40,
"access_level_description": "Maintainers"
}
- ]
+ ],
+ "code_owner_approval_required": "false"
},
...
]
@@ -76,7 +77,8 @@ Example response:
"group_id": 1234,
"access_level_description": "Example Merge Group"
}
- ]
+ ],
+ "code_owner_approval_required": "false"
},
...
]
@@ -115,7 +117,8 @@ Example response:
"access_level": 40,
"access_level_description": "Maintainers"
}
- ]
+ ],
+ "code_owner_approval_required": "false"
}
```
@@ -142,7 +145,8 @@ Example response:
"group_id": 1234,
"access_level_description": "Example Merge Group"
}
- ]
+ ],
+ "code_owner_approval_required": "false"
}
```
@@ -161,14 +165,15 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" 'https://gitla
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
-| `name` | string | yes | The name of the branch or wildcard |
-| `push_access_level` | string | no | Access levels allowed to push (defaults: `40`, maintainer access level) |
-| `merge_access_level` | string | no | Access levels allowed to merge (defaults: `40`, maintainer access level) |
-| `unprotect_access_level` | string | no | Access levels allowed to unprotect (defaults: `40`, maintainer access level) |
-| `allowed_to_push` | array | no | **(STARTER)** Array of access levels allowed to push, with each described by a hash |
-| `allowed_to_merge` | array | no | **(STARTER)** Array of access levels allowed to merge, with each described by a hash |
-| `allowed_to_unprotect` | array | no | **(STARTER)**Array of access levels allowed to unprotect, with each described by a hash |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `name` | string | yes | The name of the branch or wildcard |
+| `push_access_level` | string | no | Access levels allowed to push (defaults: `40`, maintainer access level) |
+| `merge_access_level` | string | no | Access levels allowed to merge (defaults: `40`, maintainer access level) |
+| `unprotect_access_level` | string | no | Access levels allowed to unprotect (defaults: `40`, maintainer access level) |
+| `allowed_to_push` | array | no | **(STARTER)** Array of access levels allowed to push, with each described by a hash |
+| `allowed_to_merge` | array | no | **(STARTER)** Array of access levels allowed to merge, with each described by a hash |
+| `allowed_to_unprotect` | array | no | **(STARTER)** Array of access levels allowed to unprotect, with each described by a hash |
+| `code_owner_approval_required` | boolean | no | **(PREMIUM)** Prevent pushes to this branch if it matches an item in the [`CODEOWNERS` file](../user/project/code_owners.md). (defaults: false) |
Example response:
@@ -192,7 +197,8 @@ Example response:
"access_level": 40,
"access_level_description": "Maintainers"
}
- ]
+ ],
+ "code_owner_approval_required": "false"
}
```
@@ -227,7 +233,8 @@ Example response:
"group_id": null,
"access_level_description": "Maintainers"
}
- ]
+ ],
+ "code_owner_approval_required": "false"
}
```
@@ -268,7 +275,8 @@ Example response:
"group_id": null,
"access_level_description": "Maintainers"
}
- ]
+ ],
+ "code_owner_approval_required": "false"
}
```
@@ -288,3 +296,21 @@ curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" 'https://git
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
| `name` | string | yes | The name of the branch |
+
+## Require code owner approvals for a single branch
+
+Update the "code owner approval required" option for the given protected branch protected branch.
+
+```
+PATCH /projects/:id/protected_branches/:name
+```
+
+```bash
+curl --request PATCH --header "PRIVATE-TOKEN: <your_access_token>" 'https://gitlab.example.com/api/v4/projects/5/protected_branches/feature-branch'
+```
+
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user |
+| `name` | string | yes | The name of the branch |
+| `code_owner_approval_required` | boolean | no | **(PREMIUM)** Prevent pushes to this branch if it matches an item in the [`CODEOWNERS` file](../user/project/code_owners.md). (defaults: false)|
diff --git a/doc/api/releases/index.md b/doc/api/releases/index.md
index c856a06b57d..ee2df3e4c5d 100644
--- a/doc/api/releases/index.md
+++ b/doc/api/releases/index.md
@@ -85,6 +85,8 @@ Example response:
"web_url":"https://gitlab.example.com/root/awesome-app/-/milestones/2"
}
],
+ "commit_path":"/root/awesome-app/commit/588440f66559714280628a4f9799f0c4eb880a4a",
+ "tag_path":"/root/awesome-app/-/tags/v0.11.1",
"assets":{
"count":6,
"sources":[
@@ -119,7 +121,7 @@ Example response:
"external":true
}
]
- }
+ },
},
{
"tag_name":"v0.1",
@@ -175,7 +177,7 @@ Example response:
"links":[
]
- }
+ },
}
]
```
@@ -261,6 +263,8 @@ Example response:
"web_url":"https://gitlab.example.com/root/awesome-app/-/milestones/2"
}
],
+ "commit_path":"/root/awesome-app/commit/588440f66559714280628a4f9799f0c4eb880a4a",
+ "tag_path":"/root/awesome-app/-/tags/v0.11.1",
"assets":{
"count":4,
"sources":[
@@ -284,7 +288,7 @@ Example response:
"links":[
]
- }
+ },
}
```
@@ -296,18 +300,18 @@ Create a Release. You need push access to the repository to create a Release.
POST /projects/:id/releases
```
-| Attribute | Type | Required | Description |
-| -------------------| --------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../README.md#namespaced-path-encoding). |
-| `name` | string | yes | The release name. |
-| `tag_name` | string | yes | The tag where the release will be created from. |
-| `description` | string | yes | The description of the release. You can use [markdown](../../user/markdown.md). |
-| `ref` | string | no | If `tag_name` doesn't exist, the release will be created from `ref`. It can be a commit SHA, another tag name, or a branch name. |
-| `milestones` | array of string | no | The title of each milestone the release is associated with. |
-| `assets:links` | array of hash | no | An array of assets links. |
-| `assets:links:name`| string | required by: `assets:links` | The name of the link. |
-| `assets:links:url` | string | required by: `assets:links` | The url of the link. |
-| `released_at` | datetime | no | The date when the release will be/was ready. Defaults to the current time. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). |
+| Attribute | Type | Required | Description |
+| -------------------| --------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../README.md#namespaced-path-encoding). |
+| `name` | string | yes | The release name. |
+| `tag_name` | string | yes | The tag where the release will be created from. |
+| `description` | string | yes | The description of the release. You can use [markdown](../../user/markdown.md). |
+| `ref` | string | yes, if `tag_name` doesn't exist | If `tag_name` doesn't exist, the release will be created from `ref`. It can be a commit SHA, another tag name, or a branch name. |
+| `milestones` | array of string | no | The title of each milestone the release is associated with. |
+| `assets:links` | array of hash | no | An array of assets links. |
+| `assets:links:name`| string | required by: `assets:links` | The name of the link. |
+| `assets:links:url` | string | required by: `assets:links` | The url of the link. |
+| `released_at` | datetime | no | The date when the release will be/was ready. Defaults to the current time. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). |
Example request:
@@ -379,6 +383,8 @@ Example response:
"web_url":"https://gitlab.example.com/root/awesome-app/-/milestones/2"
}
],
+ "commit_path":"/root/awesome-app/commit/588440f66559714280628a4f9799f0c4eb880a4a",
+ "tag_path":"/root/awesome-app/-/tags/v0.11.1",
"assets":{
"count":5,
"sources":[
@@ -407,7 +413,7 @@ Example response:
"external":true
}
]
- }
+ },
}
```
@@ -483,6 +489,8 @@ Example response:
"web_url":"https://gitlab.example.com/root/awesome-app/-/milestones/3"
}
],
+ "commit_path":"/root/awesome-app/commit/588440f66559714280628a4f9799f0c4eb880a4a",
+ "tag_path":"/root/awesome-app/-/tags/v0.11.1",
"assets":{
"count":4,
"sources":[
@@ -506,7 +514,7 @@ Example response:
"links":[
]
- }
+ },
}
```
@@ -563,6 +571,8 @@ Example response:
"committer_email":"admin@example.com",
"committed_date":"2019-01-03T01:53:28.000Z"
},
+ "commit_path":"/root/awesome-app/commit/588440f66559714280628a4f9799f0c4eb880a4a",
+ "tag_path":"/root/awesome-app/-/tags/v0.11.1",
"assets":{
"count":4,
"sources":[
@@ -586,7 +596,7 @@ Example response:
"links":[
]
- }
+ },
}
```
diff --git a/doc/api/runners.md b/doc/api/runners.md
index 51a546e91dc..45d68e40777 100644
--- a/doc/api/runners.md
+++ b/doc/api/runners.md
@@ -184,8 +184,8 @@ Example response:
"id": 1,
"name": "GitLab Community Edition",
"name_with_namespace": "GitLab.org / GitLab Community Edition",
- "path": "gitlab-ce",
- "path_with_namespace": "gitlab-org/gitlab-ce"
+ "path": "gitlab-foss",
+ "path_with_namespace": "gitlab-org/gitlab-foss"
}
],
"token": "205086a8e3b9a2b818ffac9b89d102",
@@ -243,8 +243,8 @@ Example response:
"id": 1,
"name": "GitLab Community Edition",
"name_with_namespace": "GitLab.org / GitLab Community Edition",
- "path": "gitlab-ce",
- "path_with_namespace": "gitlab-org/gitlab-ce"
+ "path": "gitlab-foss",
+ "path_with_namespace": "gitlab-org/gitlab-foss"
}
],
"token": "205086a8e3b9a2b818ffac9b89d102",
diff --git a/doc/api/scim.md b/doc/api/scim.md
index bc4f2bf9040..8cbd6103e88 100644
--- a/doc/api/scim.md
+++ b/doc/api/scim.md
@@ -24,6 +24,11 @@ Parameters:
|:----------|:--------|:---------|:----------------------------------------------------------------------------------------------------------------------------------------|
| `filter` | string | yes | A [filter](#available-filters) expression. |
| `group_path` | string | yes | Full path to the group. |
+| `startIndex` | integer | no | The 1-based index indicating where to start returning results from. A value of less than one will be interpreted as 1. |
+| `count` | integer | no | Desired maximum number of query results. |
+
+NOTE: **Note:**
+Pagination follows the [SCIM spec](https://tools.ietf.org/html/rfc7644#section-3.4.2.4) rather than GitLab pagination as used elsewhere. If records change between requests it is possible for a page to either be missing records that have moved to a different page or repeat records from a previous request.
Example request:
diff --git a/doc/api/services.md b/doc/api/services.md
index ff181f2ba61..4abc02dec3c 100644
--- a/doc/api/services.md
+++ b/doc/api/services.md
@@ -10,7 +10,7 @@ Asana - Teamwork without email
Set Asana service for a project.
-> This service adds commit messages as comments to Asana tasks. Once enabled, commit messages are checked for Asana task URLs (for example, `https://app.asana.com/0/123456/987654`) or task IDs starting with # (for example, `#987654`). Every task ID found will get the commit comment added to it. You can also close a task with a message containing: `fix #123456`. You can find your Api Keys here: <https://asana.com/developers/documentation/getting-started/auth#api-key>.
+> This service adds commit messages as comments to Asana tasks. Once enabled, commit messages are checked for Asana task URLs (for example, `https://app.asana.com/0/123456/987654`) or task IDs starting with # (for example, `#987654`). Every task ID found will get the commit comment added to it. You can also close a task with a message containing: `fix #123456`. You can find your API Keys here: <https://asana.com/developers/documentation/getting-started/auth#api-key>.
```
PUT /projects/:id/services/asana
@@ -414,6 +414,42 @@ Get Flowdock service settings for a project.
GET /projects/:id/services/flowdock
```
+## GitHub **(PREMIUM)**
+
+Code collaboration software.
+
+### Create/Edit GitHub service
+
+Set GitHub service for a project.
+
+```
+PUT /projects/:id/services/github
+```
+
+Parameters:
+
+| Parameter | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `token` | string | true | GitHub API token with `repo:status` OAuth scope |
+| `repository_url` | string | true | GitHub repository URL |
+| `static_context` | boolean | false | Append instance name instead of branch to [status check name](../user/project/integrations/github.md#static--dynamic-status-check-names) |
+
+### Delete GitHub service
+
+Delete GitHub service for a project.
+
+```
+DELETE /projects/:id/services/github
+```
+
+### Get GitHub service settings
+
+Get GitHub service settings for a project.
+
+```
+GET /projects/:id/services/github
+```
+
## Hangouts Chat
Google GSuite team collaboration tool.
@@ -1189,7 +1225,7 @@ GET /projects/:id/services/jenkins-deprecated
```
[jira-doc]: ../user/project/integrations/jira.md
-[old-jira-api]: https://gitlab.com/gitlab-org/gitlab-foss/blob/8-13-stable/doc/api/services.md#jira
+[old-jira-api]: https://gitlab.com/gitlab-org/gitlab/blob/8-13-stable/doc/api/services.md#jira
## MockCI
diff --git a/doc/api/settings.md b/doc/api/settings.md
index 39fc848b272..2d9e435bbb6 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -1,7 +1,3 @@
----
-table_display_block: true
----
-
# Application settings API
These API calls allow you to read and modify GitLab instance
@@ -183,8 +179,8 @@ are listed in the descriptions of the relevant settings.
| `admin_notification_email` | string | no | Abuse reports will be sent to this address if it is set. Abuse reports are always available in the admin area. |
| `after_sign_out_path` | string | no | Where to redirect users after logout. |
| `after_sign_up_text` | string | no | Text shown to the user after signing up |
-| `akismet_api_key` | string | required by: `akismet_enabled` | API key for akismet spam protection. |
-| `akismet_enabled` | boolean | no | (**If enabled, requires:** `akismet_api_key`) Enable or disable akismet spam protection. |
+| `akismet_api_key` | string | required by: `akismet_enabled` | API key for Akismet spam protection. |
+| `akismet_enabled` | boolean | no | (**If enabled, requires:** `akismet_api_key`) Enable or disable Akismet spam protection. |
| `allow_group_owners_to_manage_ldap` | boolean | no | **(PREMIUM)** Set to `true` to allow group owners to manage LDAP |
| `allow_local_requests_from_hooks_and_services` | boolean | no | (Deprecated: Use `allow_local_requests_from_web_hooks_and_services` instead) Allow requests to the local network from hooks and services. |
| `allow_local_requests_from_system_hooks` | boolean | no | Allow requests to the local network from system hooks. |
@@ -218,7 +214,7 @@ are listed in the descriptions of the relevant settings.
| `ed25519_key_restriction` | integer | no | The minimum allowed curve size (in bits) of an uploaded ED25519 key. Default is `0` (no restriction). `-1` disables ED25519 keys. |
| `elasticsearch_aws_access_key` | string | no | **(PREMIUM)** AWS IAM access key |
| `elasticsearch_aws` | boolean | no | **(PREMIUM)** Enable the use of AWS hosted Elasticsearch |
-| `elasticsearch_aws_region` | string | no | **(PREMIUM)** The AWS region the elasticsearch domain is configured |
+| `elasticsearch_aws_region` | string | no | **(PREMIUM)** The AWS region the Elasticsearch domain is configured |
| `elasticsearch_aws_secret_access_key` | string | no | **(PREMIUM)** AWS IAM secret access key |
| `elasticsearch_indexing` | boolean | no | **(PREMIUM)** Enable Elasticsearch indexing |
| `elasticsearch_limit_indexing` | boolean | no | **(PREMIUM)** Limit Elasticsearch to index certain namespaces and projects |
@@ -290,12 +286,14 @@ are listed in the descriptions of the relevant settings.
| `plantuml_url` | string | required by: `plantuml_enabled` | The PlantUML instance URL for integration. |
| `polling_interval_multiplier` | decimal | no | Interval multiplier used by endpoints that perform polling. Set to `0` to disable polling. |
| `project_export_enabled` | boolean | no | Enable project export. |
-| `prometheus_metrics_enabled` | boolean | no | Enable prometheus metrics. |
+| `prometheus_metrics_enabled` | boolean | no | Enable Prometheus metrics. |
| `protected_ci_variables` | boolean | no | Environment variables are protected by default. |
| `pseudonymizer_enabled` | boolean | no | **(PREMIUM)** When enabled, GitLab will run a background job that will produce pseudonymized CSVs of the GitLab database that will be uploaded to your configured object storage directory.
-| `recaptcha_enabled` | boolean | no | (**If enabled, requires:** `recaptcha_private_key` and `recaptcha_site_key`) Enable recaptcha. |
-| `recaptcha_private_key` | string | required by: `recaptcha_enabled` | Private key for recaptcha. |
-| `recaptcha_site_key` | string | required by: `recaptcha_enabled` | Site key for recaptcha. |
+| `push_event_hooks_limit` | integer | no | Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value. |
+| `push_event_activities_limit` | integer | no | Number of changes (branches or tags) in a single push to determine whether individual push events or bulk push events will be created. [Bulk push events will be created](../user/admin_area/settings/push_event_activities_limit.md) if it surpasses that value. |
+| `recaptcha_enabled` | boolean | no | (**If enabled, requires:** `recaptcha_private_key` and `recaptcha_site_key`) Enable reCAPTCHA. |
+| `recaptcha_private_key` | string | required by: `recaptcha_enabled` | Private key for reCAPTCHA. |
+| `recaptcha_site_key` | string | required by: `recaptcha_enabled` | Site key for reCAPTCHA. |
| `receive_max_input_size` | integer | no | Maximum push size (MB). |
| `repository_checks_enabled` | boolean | no | GitLab will periodically run `git fsck` in all project and wiki repositories to look for silent disk corruption issues. |
| `repository_size_limit` | integer | no | **(PREMIUM)** Size limit per repository (MB) |
diff --git a/doc/api/tags.md b/doc/api/tags.md
index 3807688ffe3..56143969e3c 100644
--- a/doc/api/tags.md
+++ b/doc/api/tags.md
@@ -116,6 +116,12 @@ Parameters:
- `message` (optional) - Creates annotated tag.
- `release_description` (optional) - Add release notes to the Git tag and store it in the GitLab database.
+```bash
+curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/tags?tag_name=test&ref=master"
+```
+
+Example response:
+
```json
{
"commit": {
diff --git a/doc/api/templates/gitignores.md b/doc/api/templates/gitignores.md
index 0b6d944cb62..45820b24f10 100644
--- a/doc/api/templates/gitignores.md
+++ b/doc/api/templates/gitignores.md
@@ -12,10 +12,12 @@ information on `gitignore`, see the
Get all `.gitignore` templates.
-```
+```plaintext
GET /templates/gitignores
```
+Example request:
+
```bash
curl https://gitlab.example.com/api/v4/templates/gitignores
```
@@ -111,14 +113,16 @@ Example response:
Get a single `.gitignore` template.
-```
+```plaintext
GET /templates/gitignores/:key
```
-| Attribute | Type | Required | Description |
-| ---------- | ------ | -------- | ----------- |
+| Attribute | Type | Required | Description |
+| ---------- | ------ | -------- | ------------------------------------ |
| `key` | string | yes | The key of the `.gitignore` template |
+Example request:
+
```bash
curl https://gitlab.example.com/api/v4/templates/gitignores/Ruby
```
diff --git a/doc/api/templates/gitlab_ci_ymls.md b/doc/api/templates/gitlab_ci_ymls.md
index 80f94b953e3..b8fdb9e233c 100644
--- a/doc/api/templates/gitlab_ci_ymls.md
+++ b/doc/api/templates/gitlab_ci_ymls.md
@@ -12,10 +12,12 @@ information on CI/CD pipeline configuration in GitLab, see the
Get all GitLab CI YML templates.
-```
+```plaintext
GET /templates/gitlab_ci_ymls
```
+Example request:
+
```bash
curl https://gitlab.example.com/api/v4/templates/gitlab_ci_ymls
```
@@ -29,6 +31,10 @@ Example response:
"name": "Android"
},
{
+ "key": "Android-Fastlane",
+ "name": "Android-Fastlane"
+ },
+ {
"key": "Auto-DevOps",
"name": "Auto-DevOps"
},
@@ -49,6 +55,10 @@ Example response:
"name": "Clojure"
},
{
+ "key": "Code-Quality",
+ "name": "Code-Quality"
+ },
+ {
"key": "Crystal",
"name": "Crystal"
},
@@ -95,14 +105,6 @@ Example response:
{
"key": "Mono",
"name": "Mono"
- },
- {
- "key": "Nodejs",
- "name": "Nodejs"
- },
- {
- "key": "OpenShift",
- "name": "OpenShift"
}
]
```
@@ -111,14 +113,16 @@ Example response:
Get a single GitLab CI YML template.
-```
+```plaintext
GET /templates/gitlab_ci_ymls/:key
```
-| Attribute | Type | Required | Description |
-| ---------- | ------ | -------- | ----------- |
+| Attribute | Type | Required | Description |
+| ---------- | ------ | -------- | ------------------------------------- |
| `key` | string | yes | The key of the GitLab CI YML template |
+Example request:
+
```bash
curl https://gitlab.example.com/api/v4/templates/gitlab_ci_ymls/Ruby
```
@@ -128,7 +132,7 @@ Example response:
```json
{
"name": "Ruby",
- "content": "# This file is a template, and might need editing before it works on your project.\n# Official language image. Look for the different tagged releases at:\n# https://hub.docker.com/r/library/ruby/tags/\nimage: \"ruby:2.5\"\n\n# Pick zero or more services to be used on all builds.\n# Only needed when using a docker container to run your tests in.\n# Check out: http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-a-service\nservices:\n - mysql:latest\n - redis:latest\n - postgres:latest\n\nvariables:\n POSTGRES_DB: database_name\n\n# Cache gems in between builds\ncache:\n paths:\n - vendor/ruby\n\n# This is a basic example for a gem or script which doesn't use\n# services such as redis or postgres\nbefore_script:\n - ruby -v # Print out ruby version for debugging\n # Uncomment next line if your rails app needs a JS runtime:\n # - apt-get update -q && apt-get install nodejs -yqq\n - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby\n\n# Optional - Delete if not using `rubocop`\nrubocop:\n script:\n - rubocop\n\nrspec:\n script:\n - rspec spec\n\nrails:\n variables:\n DATABASE_URL: \"postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB\"\n script:\n - rails db:migrate\n - rails db:seed\n - rails test\n\n# This deploy job uses a simple deploy flow to Heroku, other providers, e.g. AWS Elastic Beanstalk\n# are supported too: https://github.com/travis-ci/dpl\ndeploy:\n type: deploy\n environment: production\n script:\n - gem install dpl\n - dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_PRODUCTION_KEY\n"
+ "content": "# This file is a template, and might need editing before it works on your project.\n# Official language image. Look for the different tagged releases at:\n# https://hub.docker.com/r/library/ruby/tags/\nimage: \"ruby:2.5\"\n\n# Pick zero or more services to be used on all builds.\n# Only needed when using a docker container to run your tests in.\n# Check out: http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-a-service\nservices:\n - mysql:latest\n - redis:latest\n - postgres:latest\n\nvariables:\n POSTGRES_DB: database_name\n\n# Cache gems in between builds\ncache:\n paths:\n - vendor/ruby\n\n# This is a basic example for a gem or script which doesn't use\n# services such as redis or postgres\nbefore_script:\n - ruby -v # Print out ruby version for debugging\n # Uncomment next line if your rails app needs a JS runtime:\n # - apt-get update -q && apt-get install nodejs -yqq\n - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby\n\n# Optional - Delete if not using `rubocop`\nrubocop:\n script:\n - rubocop\n\nrspec:\n script:\n - rspec spec\n\nrails:\n variables:\n DATABASE_URL: \"postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB\"\n script:\n - rails db:migrate\n - rails db:seed\n - rails test\n\n# This deploy job uses a simple deploy flow to Heroku, other providers, e.g. AWS Elastic Beanstalk\n# are supported too: https://github.com/travis-ci/dpl\ndeploy:\n type: deploy\n environment: production\n script:\n - gem install dpl\n - dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_PRODUCTION_KEY\n"
}
```
diff --git a/doc/api/todos.md b/doc/api/todos.md
index bc2eeccacbe..b708b4391a2 100644
--- a/doc/api/todos.md
+++ b/doc/api/todos.md
@@ -36,8 +36,8 @@ Example Response:
"id": 2,
"name": "Gitlab Ce",
"name_with_namespace": "Gitlab Org / Gitlab Ce",
- "path": "gitlab-ce",
- "path_with_namespace": "gitlab-org/gitlab-ce"
+ "path": "gitlab-foss",
+ "path_with_namespace": "gitlab-org/gitlab-foss"
},
"author": {
"name": "Administrator",
@@ -109,8 +109,8 @@ Example Response:
"id": 2,
"name": "Gitlab Ce",
"name_with_namespace": "Gitlab Org / Gitlab Ce",
- "path": "gitlab-ce",
- "path_with_namespace": "gitlab-org/gitlab-ce"
+ "path": "gitlab-foss",
+ "path_with_namespace": "gitlab-org/gitlab-foss"
},
"author": {
"name": "Maxie Medhurst",
@@ -207,8 +207,8 @@ Example Response:
"id": 2,
"name": "Gitlab Ce",
"name_with_namespace": "Gitlab Org / Gitlab Ce",
- "path": "gitlab-ce",
- "path_with_namespace": "gitlab-org/gitlab-ce"
+ "path": "gitlab-foss",
+ "path_with_namespace": "gitlab-org/gitlab-foss"
},
"author": {
"name": "Administrator",
diff --git a/doc/api/users.md b/doc/api/users.md
index 380396c7377..33b6efa7a02 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -393,20 +393,21 @@ PUT /users/:id
Parameters:
-- `email` - Email
-- `username` - Username
-- `name` - Name
-- `password` - Password
-- `skype` - Skype ID
-- `linkedin` - LinkedIn
-- `twitter` - Twitter account
-- `website_url` - Website URL
-- `organization` - Organization name
-- `projects_limit` - Limit projects each user can create
-- `extern_uid` - External UID
-- `provider` - External provider name
+- `id` (required) - The ID of the user
+- `email` (optional) - Email
+- `username` (optional) - Username
+- `name` (optional) - Name
+- `password` (optional) - Password
+- `skype` (optional) - Skype ID
+- `linkedin` (optional) - LinkedIn
+- `twitter` (optional) - Twitter account
+- `website_url` (optional) - Website URL
+- `organization` (optional) - Organization name
+- `projects_limit` (optional) - Limit projects each user can create
+- `extern_uid` (optional) - External UID
+- `provider` (optional) - External provider name
- `group_id_for_saml` (optional) - ID of group where SAML has been configured
-- `bio` - User's biography
+- `bio` (optional) - User's biography
- `location` (optional) - User's location
- `public_email` (optional) - The public email of the user
- `admin` (optional) - User is admin - true or false (default)
@@ -419,7 +420,7 @@ Parameters:
- `private_profile` (optional) - User's profile is private - true or false (default)
- `shared_runners_minutes_limit` (optional) - Pipeline minutes quota for this user **(STARTER)**
- `extra_shared_runners_minutes_limit` (optional) - Extra pipeline minutes quota for this user **(STARTER)**
-- `note` (optional) - Admin notes for this user **(STARTER)**
+- `note` (optional) - Admin notes for this user **(STARTER)**
On password update, user will be forced to change it upon next login.
Note, at the moment this method does only return a `404` error,
@@ -595,7 +596,7 @@ PUT /user/status
| Attribute | Type | Required | Description |
| --------- | ------ | -------- | ----------- |
-| `emoji` | string | no | The name of the emoji to use as status, if omitted `speech_balloon` is used. Emoji name can be one of the specified names in the [Gemojione index][gemojione-index]. |
+| `emoji` | string | no | The name of the emoji to use as status, if omitted `speech_balloon` is used. Emoji name can be one of the specified names in the [Gemojione index](https://github.com/bonusly/gemojione/blob/master/config/index.json). |
| `message` | string | no | The message to set as a status. It can also contain emoji codes. |
When both parameters `emoji` and `message` are empty, the status will be cleared.
@@ -1151,6 +1152,48 @@ Parameters:
Will return `201 OK` on success, `404 User Not Found` is user cannot be found or
`403 Forbidden` when trying to unblock a user blocked by LDAP synchronization.
+## Deactivate user
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/63921) in GitLab 12.4.
+
+Deactivates the specified user. Available only for admin.
+
+```
+POST /users/:id/deactivate
+```
+
+Parameters:
+
+- `id` (required) - id of specified user
+
+Returns:
+
+- `201 OK` on success.
+- `404 User Not Found` if user cannot be found.
+- `403 Forbidden` when trying to deactivate a user:
+ - Blocked by admin or by LDAP synchronization.
+ - That has any activity in past 14 days. These cannot be deactivated.
+
+## Activate user
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/63921) in GitLab 12.4.
+
+Activates the specified user. Available only for admin.
+
+```
+POST /users/:id/activate
+```
+
+Parameters:
+
+- `id` (required) - id of specified user
+
+Returns:
+
+- `201 OK` on success.
+- `404 User Not Found` if user cannot be found.
+- `403 Forbidden` when trying to activate a user blocked by admin or by LDAP synchronization.
+
### Get user contribution events
Please refer to the [Events API documentation](events.md#get-user-contribution-events)
@@ -1362,5 +1405,3 @@ Example response:
```
Please note that `last_activity_at` is deprecated, please use `last_activity_on`.
-
-[gemojione-index]: https://github.com/jonathanwiesel/gemojione/blob/master/config/index.json
diff --git a/doc/ci/README.md b/doc/ci/README.md
index cc1c85d1a53..5286764d178 100644
--- a/doc/ci/README.md
+++ b/doc/ci/README.md
@@ -85,7 +85,7 @@ GitLab CI/CD supports numerous configuration options:
| [Job artifacts](../user/project/pipelines/job_artifacts.md) | Output, use, and reuse job artifacts. |
| [Cache dependencies](caching/index.md) | Cache your dependencies for a faster execution. |
| [Schedule pipelines](../user/project/pipelines/schedules.md) | Schedule pipelines to run as often as you need. |
-| [Custom path for `.gitlab-ci.yml`](../user/project/pipelines/settings.md#custom-ci-config-path) | Define a custom path for the CI/CD configuration file. |
+| [Custom path for `.gitlab-ci.yml`](../user/project/pipelines/settings.md#custom-ci-configuration-path) | Define a custom path for the CI/CD configuration file. |
| [Git submodules for CI/CD](git_submodules.md) | Configure jobs for using Git submodules.|
| [SSH keys for CI/CD](ssh_keys/README.md) | Using SSH keys in your CI pipelines. |
| [Pipelines triggers](triggers/README.md) | Trigger pipelines through the API. |
@@ -113,7 +113,7 @@ Its feature set is listed on the table below according to DevOps stages.
| [Browser Performance Testing](../user/project/merge_requests/browser_performance_testing.md) | Quickly determine the performance impact of pending code changes. |
| [CI services](services/README.md) | Link Docker containers with your base image.|
| [Code Quality](../user/project/merge_requests/code_quality.md) **(STARTER)** | Analyze your source code quality. |
-| [GitLab CI/CD for external repositories](ci_cd_for_external_repos/index.md) **(PREMIUM)** | Get the benefits of GitLab CI/CD combined with repositories in GitHub and BitBucket Cloud. |
+| [GitLab CI/CD for external repositories](ci_cd_for_external_repos/index.md) **(PREMIUM)** | Get the benefits of GitLab CI/CD combined with repositories in GitHub and Bitbucket Cloud. |
| [Interactive Web Terminals](interactive_web_terminal/index.md) **(CORE ONLY)** | Open an interactive web terminal to debug the running jobs. |
| [JUnit tests](junit_test_reports.md) | Identify script failures directly on merge requests. |
| [Using Docker images](docker/using_docker_images.md) | Use GitLab and GitLab Runner with Docker to build and test applications. |
@@ -161,9 +161,9 @@ See also:
The following articles explain reasons to use GitLab CI/CD
for your CI/CD infrastructure:
-- [Why we chose GitLab CI for our CI/CD solution](https://about.gitlab.com/2016/10/17/gitlab-ci-oohlala/)
-- [Building our web-app on GitLab CI](https://about.gitlab.com/2016/07/22/building-our-web-app-on-gitlab-ci/)
-- [5 Teams that made the switch to GitLab CI/CD](https://about.gitlab.com/2019/04/25/5-teams-that-made-the-switch-to-gitlab-ci-cd/)
+- [Why we chose GitLab CI for our CI/CD solution](https://about.gitlab.com/blog/2016/10/17/gitlab-ci-oohlala/)
+- [Building our web-app on GitLab CI](https://about.gitlab.com/blog/2016/07/22/building-our-web-app-on-gitlab-ci/)
+- [5 Teams that made the switch to GitLab CI/CD](https://about.gitlab.com/blog/2019/04/25/5-teams-that-made-the-switch-to-gitlab-ci-cd/)
See also the [Why CI/CD?](https://docs.google.com/presentation/d/1OGgk2Tcxbpl7DJaIOzCX4Vqg3dlwfELC3u2jEeCBbDk) presentation.
diff --git a/doc/ci/caching/index.md b/doc/ci/caching/index.md
index 558229187f1..6b8e7fa2ad5 100644
--- a/doc/ci/caching/index.md
+++ b/doc/ci/caching/index.md
@@ -12,8 +12,9 @@ content of a previous job. It can be particularly useful when you are
developing software that depends on other libraries which are fetched via the
internet during build time.
-If caching is enabled, it's shared between pipelines and jobs by default,
-starting from GitLab 9.0.
+If caching is enabled, it's shared between pipelines and jobs at the project
+level by default, starting from GitLab 9.0. Caches are not shared across
+projects.
Make sure you read the [`cache` reference](../yaml/README.md#cache) to learn
how it is defined in `.gitlab-ci.yml`.
@@ -202,7 +203,7 @@ For more fine tuning, read also about the
The most common use case of cache is to preserve contents between subsequent
runs of jobs for things like dependencies and commonly used libraries
-(Nodejs packages, PHP packages, rubygems, python libraries, etc.),
+(Nodejs packages, PHP packages, rubygems, Python libraries, etc.),
so they don't have to be re-fetched from the public internet.
NOTE: **Note:**
@@ -268,7 +269,7 @@ test:
### Caching Python dependencies
Assuming your project is using [pip](https://pip.pypa.io/en/stable/) to install
-the python dependencies, the following example defines `cache` globally so that
+the Python dependencies, the following example defines `cache` globally so that
all jobs inherit it. Python libraries are installed in a virtualenv under `venv/`,
pip's cache is defined under `.cache/pip/` and both are cached per-branch:
@@ -490,8 +491,8 @@ job B:
To fix that, use different `keys` for each job.
In another case, let's assume you have more than one Runners assigned to your
-project, but the distributed cache is not enabled. We want the second time the
-pipeline is run, `job A` and `job B` to re-use their cache (which in this case
+project, but the distributed cache is not enabled. The second time the
+pipeline is run, we want `job A` and `job B` to re-use their cache (which in this case
will be different):
```yaml
@@ -517,7 +518,7 @@ job B:
```
In that case, even if the `key` is different (no fear of overwriting), you
-might experience the cached files to "get cleaned" before each stage if the
+might experience that the cached files "get cleaned" before each stage if the
jobs run on different Runners in the subsequent pipelines.
## Clearing the cache
diff --git a/doc/ci/chatops/README.md b/doc/ci/chatops/README.md
index 40357608da4..234e7f4ed80 100644
--- a/doc/ci/chatops/README.md
+++ b/doc/ci/chatops/README.md
@@ -19,7 +19,7 @@ GitLab ChatOps is built upon two existing features:
- [GitLab CI/CD](../README.md).
- [Slack Slash Commands](../../user/project/integrations/slack_slash_commands.md).
-A new `run` action has been added to the [slash commands](../../integration/slash_commands.md), which takes two arguments: a `<job name>` to execute and the `<job arguments>`. When executed, ChatOps will look up the specified job name and attempt to match it to a corresponding job in [.gitlab-ci.yml](../yaml/README.md). If a matching job is found on `master`, a pipeline containing just that job is scheduled. Two additional [CI/CD variables](../variables/README.md#predefined-environment-variables) are passed to the job: `CHAT_INPUT` contains any additional arguments, and `CHAT_CHANNEL` is set to the name of channel the action was triggered in.
+A new `run` action has been added to the [slash commands](../../integration/slash_commands.md), which takes two arguments: a `<job name>` to execute and the `<job arguments>`. When executed, ChatOps will look up the specified job name and attempt to match it to a corresponding job in [`.gitlab-ci.yml`](../yaml/README.md). If a matching job is found on `master`, a pipeline containing just that job is scheduled. Two additional [CI/CD variables](../variables/README.md#predefined-environment-variables) are passed to the job: `CHAT_INPUT` contains any additional arguments, and `CHAT_CHANNEL` is set to the name of channel the action was triggered in.
After the job has finished, its output is sent back to Slack provided it has completed within 30 minutes. If a job takes more than 30 minutes to run it must use the Slack API to manually send data back to a channel.
diff --git a/doc/ci/ci_cd_for_external_repos/index.md b/doc/ci/ci_cd_for_external_repos/index.md
index db647530fcd..35e2117c285 100644
--- a/doc/ci/ci_cd_for_external_repos/index.md
+++ b/doc/ci/ci_cd_for_external_repos/index.md
@@ -7,7 +7,7 @@ type: index, howto
>[Introduced][ee-4642] in [GitLab Premium][eep] 10.6.
NOTE: **Note:**
-This feature [is available for free](https://about.gitlab.com/2019/09/09/ci-cd-github-extended-again/) to
+This feature [is available for free](https://about.gitlab.com/blog/2019/09/09/ci-cd-github-extended-again/) to
GitLab.com users until March 22nd, 2020.
GitLab CI/CD can be used with:
@@ -100,7 +100,6 @@ requests and not on branches you can add `except: [branches]` to the job specs.
[Read more](https://gitlab.com/gitlab-org/gitlab/issues/24089#workaround).
[ee-4642]: https://gitlab.com/gitlab-org/gitlab/merge_requests/4642
-[ee-4642]: https://gitlab.com/gitlab-org/gitlab/merge_requests/4642
[eep]: https://about.gitlab.com/pricing/
[mirroring]: ../../workflow/repository_mirroring.md
[settings]: ../../user/project/settings/index.md#sharing-and-permissions
diff --git a/doc/ci/directed_acyclic_graph/index.md b/doc/ci/directed_acyclic_graph/index.md
index 23604e8f898..7215dec287e 100644
--- a/doc/ci/directed_acyclic_graph/index.md
+++ b/doc/ci/directed_acyclic_graph/index.md
@@ -73,4 +73,4 @@ A directed acyclic graph is a complicated feature, and as of the initial MVC the
are certain use cases that you may need to work around. For more information:
- [`needs` requirements and limitations](../yaml/README.md#requirements-and-limitations).
-- Related epic [gitlab-org#1716](https://gitlab.com/groups/gitlab-org/-/epics/1716).
+- Related epic [tracking planned improvements](https://gitlab.com/groups/gitlab-org/-/epics/1716).
diff --git a/doc/ci/docker/using_docker_build.md b/doc/ci/docker/using_docker_build.md
index a60ede2c8f8..f4bb7cd7d9f 100644
--- a/doc/ci/docker/using_docker_build.md
+++ b/doc/ci/docker/using_docker_build.md
@@ -117,10 +117,10 @@ not without its own challenges:
history. Concurrent jobs work fine because every build gets it's own
instance of Docker engine so they won't conflict with each other. But this
also means jobs can be slower because there's no caching of layers.
-- By default, `docker:dind` uses `--storage-driver vfs` which is the slowest
- form offered. To use a different driver, see
- [Using the overlayfs driver](#using-the-overlayfs-driver).
-- Since the `docker:dind` container and the runner container don't share their
+- By default, Docker 17.09 and higher uses `--storage-driver overlay2` which is
+ the recommended storage driver. See [Using the overlayfs driver](#using-the-overlayfs-driver)
+ for details.
+- Since the `docker:19.03.1-dind` container and the Runner container don't share their
root filesystem, the job's working directory can be used as a mount point for
child containers. For example, if you have files you want to share with a
child container, you may create a subdirectory under `/builds/$CI_PROJECT_PATH`
@@ -155,7 +155,7 @@ docker-in-docker service and
[GitLab.com Shared Runners](../../user/gitlab_com/index.html#shared-runners)
support this.
-1. Install [GitLab Runner](https://docs.gitlab.com/runner/install).
+1. Install [GitLab Runner](https://docs.gitlab.com/runner/install/).
1. Register GitLab Runner from the command line to use `docker` and `privileged`
mode:
@@ -218,13 +218,10 @@ support this.
# https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#accessing-the-services.
#
# Note that if you're using the Kubernetes executor, the variable
- # should be set to tcp://localhost:2376/ because of how the
+ # should be set to tcp://localhost:2376 because of how the
# Kubernetes executor connects services to the job container
- # DOCKER_HOST: tcp://localhost:2376/
+ # DOCKER_HOST: tcp://localhost:2376
#
- # When using dind, it's wise to use the overlayfs driver for
- # improved performance.
- DOCKER_DRIVER: overlay2
# Specify to Docker where to create the certificates, Docker will
# create them automatically on boot, and will create
# `/certs/client` that will be shared between the service and job
@@ -283,15 +280,12 @@ variables:
# https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#accessing-the-services
#
# Note that if you're using the Kubernetes executor, the variable should be set to
- # tcp://localhost:2375/ because of how the Kubernetes executor connects services
+ # tcp://localhost:2375 because of how the Kubernetes executor connects services
# to the job container
- # DOCKER_HOST: tcp://localhost:2375/
+ # DOCKER_HOST: tcp://localhost:2375
#
- # For non-Kubernetes executors, we use tcp://docker:2375/
- DOCKER_HOST: tcp://docker:2375/
- # When using dind, it's wise to use the overlayfs driver for
- # improved performance.
- DOCKER_DRIVER: overlay2
+ # For non-Kubernetes executors, we use tcp://docker:2375
+ DOCKER_HOST: tcp://docker:2375
#
# This will instruct Docker not to start over TLS.
DOCKER_TLS_CERTDIR: ""
@@ -317,12 +311,12 @@ container so that Docker is available in the context of that image.
NOTE: **Note:**
If you bind the Docker socket [when using GitLab Runner 11.11 or
newer](https://gitlab.com/gitlab-org/gitlab-runner/merge_requests/1261),
-you can no longer use `docker:dind` as a service because volume bindings
+you can no longer use `docker:19.03.1-dind` as a service because volume bindings
are done to the services as well, making these incompatible.
In order to do that, follow the steps:
-1. Install [GitLab Runner](https://docs.gitlab.com/runner/install).
+1. Install [GitLab Runner](https://docs.gitlab.com/runner/install/).
1. Register GitLab Runner from the command line to use `docker` and share `/var/run/docker.sock`:
@@ -332,14 +326,14 @@ In order to do that, follow the steps:
--registration-token REGISTRATION_TOKEN \
--executor docker \
--description "My Docker Runner" \
- --docker-image "docker:stable" \
+ --docker-image "docker:19.03.1" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
```
The above command will register a new Runner to use the special
- `docker:stable` image which is provided by Docker. **Notice that it's using
- the Docker daemon of the Runner itself, and any containers spawned by docker
- commands will be siblings of the Runner rather than children of the runner.**
+ `docker:19.03.1` image which is provided by Docker. **Notice that it's using
+ the Docker daemon of the Runner itself, and any containers spawned by Docker
+ commands will be siblings of the Runner rather than children of the Runner.**
This may have complications and limitations that are unsuitable for your workflow.
The above command will create a `config.toml` entry similar to this:
@@ -351,7 +345,7 @@ In order to do that, follow the steps:
executor = "docker"
[runners.docker]
tls_verify = false
- image = "docker:stable"
+ image = "docker:19.03.1"
privileged = false
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
@@ -360,10 +354,11 @@ In order to do that, follow the steps:
```
1. You can now use `docker` in the build script (note that you don't need to
- include the `docker:dind` service as when using the Docker in Docker executor):
+ include the `docker:19.03.1-dind` service as when using the Docker in Docker
+ executor):
```yaml
- image: docker:stable
+ image: docker:19.03.1
before_script:
- docker info
@@ -417,14 +412,15 @@ any image that's used with the `--cache-from` argument must first be pulled
Here's a simple `.gitlab-ci.yml` file showing how Docker caching can be utilized:
```yaml
-image: docker:stable
+image: docker:19.03.1
services:
- - docker:dind
+ - docker:19.03.1-dind
variables:
- DOCKER_HOST: tcp://docker:2375
- DOCKER_DRIVER: overlay2
+ # Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
+ DOCKER_HOST: tcp://docker:2376
+ DOCKER_TLS_CERTDIR: "/certs"
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
@@ -526,7 +522,7 @@ Some things you should be aware of:
longer, but means you don’t get stuck without security patches to base images.
- Doing an explicit `docker pull` before each `docker run` fetches
the latest image that was just built. This is especially important if you are
- using multiple runners that cache images locally. Using the git SHA in your
+ using multiple runners that cache images locally. Using the Git SHA in your
image tag makes this less necessary since each job will be unique and you
shouldn't ever have a stale image. However, it's still possible to have a
stale image if you re-build a given commit after a dependency has changed.
@@ -597,7 +593,6 @@ assuming you have it configured with [TLS enabled](#tls-enabled):
# `/certs/client` that will be shared between the service and
# build container.
DOCKER_TLS_CERTDIR: "/certs"
- DOCKER_DRIVER: overlay2
stage: build
script:
- docker build -t my-docker-image .
@@ -618,37 +613,36 @@ If you're using docker-in-docker on your Runners, this is how your `.gitlab-ci.y
could look like:
```yaml
- build:
- image: docker:stable
- services:
- - docker:dind
- variables:
- DOCKER_HOST: tcp://docker:2375
- DOCKER_DRIVER: overlay2
- stage: build
- script:
- - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- - docker build -t $CI_REGISTRY/group/project/image:latest .
- - docker push $CI_REGISTRY/group/project/image:latest
+build:
+ image: docker:19.03.1
+ stage: build
+ services:
+ - docker:19.03.1-dind
+ variables:
+ # Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
+ DOCKER_HOST: tcp://docker:2376
+ DOCKER_TLS_CERTDIR: "/certs"
+ script:
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+ - docker build -t $CI_REGISTRY/group/project/image:latest .
+ - docker push $CI_REGISTRY/group/project/image:latest
```
You can also make use of [other variables](../variables/README.md) to avoid hardcoding:
```yaml
-services:
- - docker:dind
-
-variables:
- DOCKER_HOST: tcp://docker:2375
- DOCKER_DRIVER: overlay2
- IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
-
-before_script:
- - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
-
build:
+ image: docker:19.03.1
stage: build
+ services:
+ - docker:19.03.1-dind
+ variables:
+ # Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
+ DOCKER_HOST: tcp://docker:2376
+ DOCKER_TLS_CERTDIR: "/certs"
+ IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
script:
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
```
@@ -667,9 +661,9 @@ when needed. Changes to `master` also get tagged as `latest` and deployed using
an application-specific deploy script:
```yaml
-image: docker:stable
+image: docker:19.03.1
services:
- - docker:dind
+ - docker:19.03.1-dind
stages:
- build
@@ -678,8 +672,9 @@ stages:
- deploy
variables:
- DOCKER_HOST: tcp://docker:2375
- DOCKER_DRIVER: overlay2
+ # Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
+ DOCKER_HOST: tcp://docker:2376
+ DOCKER_TLS_CERTDIR: "/certs"
CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
diff --git a/doc/ci/enable_or_disable_ci.md b/doc/ci/enable_or_disable_ci.md
index 56200142055..dcf4d8dde2d 100644
--- a/doc/ci/enable_or_disable_ci.md
+++ b/doc/ci/enable_or_disable_ci.md
@@ -28,18 +28,28 @@ either:
- Site-wide by modifying the settings in `gitlab.yml` and `gitlab.rb` for source
and Omnibus installations respectively.
+NOTE: **Note:**
+This only applies to pipelines run as part of GitLab CI/CD. This will not enable or disable
+pipelines that are run from an [external integration](../user/project/integrations/project_services.md#services).
+
## Per-project user setting
-The setting to enable or disable GitLab CI/CD can be found under your project's
-**Settings > General > Permissions**. Choose one of "Disabled", "Only team members"
-or "Everyone with access" and hit **Save changes** for the settings to take effect.
+The setting to enable or disable GitLab CI/CD Pipelines can be found in your project in
+**Settings > General > Visibility, project features, permissions**. If the project
+visibility is set to:
+
+- **Private**, only project members can access pipelines.
+- **Internal** or **Public**, pipelines can be made accessible to either
+ project members only or everyone with access.
+
+Press **Save changes** for the settings to take effect.
-![Sharing & Permissions settings](../user/project/settings/img/sharing_and_permissions_settings.png)
+![Sharing & Permissions settings](../user/project/settings/img/sharing_and_permissions_settings_v12_3.png)
## Site-wide admin setting
You can disable GitLab CI/CD site-wide, by modifying the settings in `gitlab.yml`
-and `gitlab.rb` for source and Omnibus installations respectively.
+for source installations, and `gitlab.rb` for Omnibus installations.
Two things to note:
diff --git a/doc/ci/environments.md b/doc/ci/environments.md
index d3a8689551a..cef95c8e22a 100644
--- a/doc/ci/environments.md
+++ b/doc/ci/environments.md
@@ -131,15 +131,27 @@ In summary, with the above `.gitlab-ci.yml` we have achieved the following:
job will deploy our code to a staging server while the deployment
will be recorded in an environment named `staging`.
-> Starting with GitLab 8.15, the environment name is exposed to the Runner in
-> two forms: `$CI_ENVIRONMENT_NAME`, and `$CI_ENVIRONMENT_SLUG`. The first is
-> the name given in `.gitlab-ci.yml` (with any variables expanded), while the
-> second is a "cleaned-up" version of the name, suitable for use in URLs, DNS,
-> etc.
->
-> Starting with GitLab 9.3, the environment URL is exposed to the Runner via
-> `$CI_ENVIRONMENT_URL`. The URL is expanded from `.gitlab-ci.yml`, or if
-> the URL was not defined there, the external URL from the environment is used.
+#### Environment variables and Runner
+
+Starting with GitLab 8.15, the environment name is exposed to the Runner in
+two forms:
+
+- `$CI_ENVIRONMENT_NAME`. The name given in `.gitlab-ci.yml` (with any variables
+ expanded).
+- `$CI_ENVIRONMENT_SLUG`. A "cleaned-up" version of the name, suitable for use in URLs,
+ DNS, etc.
+
+If you change the name of an existing environment, the:
+
+- `$CI_ENVIRONMENT_NAME` variable will be updated with the new environment name.
+- `$CI_ENVIRONMENT_SLUG` variable will remain unchanged to prevent unintended side
+ effects.
+
+Starting with GitLab 9.3, the environment URL is exposed to the Runner via
+`$CI_ENVIRONMENT_URL`. The URL is expanded from either:
+
+- `.gitlab-ci.yml`.
+- The external URL from the environment if not defined in `.gitlab-ci.yml`.
### Configuring manual deployments
@@ -679,7 +691,7 @@ fetch = +refs/environments/*:refs/remotes/origin/environments/*
### Scoping environments with specs
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/2112) in [GitLab Premium](https://about.gitlab.com/pricing/) 9.4.
-> - [Scoping for environment variables was moved to Core](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/30779) to Core in Gitlab 12.2.
+> - [Scoping for environment variables was moved to Core](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/30779) to Core in GitLab 12.2.
You can limit the environment scope of a variable by
defining which environments it can be available for.
@@ -736,7 +748,7 @@ Re-using variables defined inside `script` as part of the environment name will
Below are some links you may find interesting:
- [The `.gitlab-ci.yml` definition of environments](yaml/README.md#environment)
-- [A blog post on Deployments & Environments](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/)
+- [A blog post on Deployments & Environments](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/)
- [Review Apps - Use dynamic environments to deploy your code for every branch](review_apps/index.md)
- [Deploy Boards for your applications running on Kubernetes](../user/project/deploy_boards.md) **(PREMIUM)**
diff --git a/doc/ci/examples/README.md b/doc/ci/examples/README.md
index 73f7a555b9c..d2333f7e468 100644
--- a/doc/ci/examples/README.md
+++ b/doc/ci/examples/README.md
@@ -11,9 +11,9 @@ implement [GitLab CI/CD](../README.md) for your specific use case.
Examples are available in several forms. As a collection of:
- `.gitlab-ci.yml` [template files](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/lib/gitlab/ci/templates) maintained in GitLab. When you create a new file via the UI,
- GitLab will give you the option to choose one of these templates. This will allow you to quickly bootstrap your project for CI/CD.
+ GitLab will give you the option to choose one of these templates. This will allow you to start using CI/CD with your project quickly.
If your favorite programming language or framework are missing, we would love your help by sending a merge request with a new `.gitlab-ci.yml` to this project.
-- Repositories with [example projects](https://gitlab.com/gitlab-examples) for various languages. You can fork and adjust them to your own needs. Projects include demonstrations of [multi-project pipelines](https://gitlab.com/gitlab-examples/multi-project-pipelines) and using [Review Apps with a static site served by nginx](https://gitlab.com/gitlab-examples/review-apps-nginx/).
+- Repositories with [example projects](https://gitlab.com/gitlab-examples) for various languages. You can fork and adjust them to your own needs. Projects include demonstrations of [multi-project pipelines](https://gitlab.com/gitlab-examples/multi-project-pipelines) and using [Review Apps with a static site served by NGINX](https://gitlab.com/gitlab-examples/review-apps-nginx/).
- Examples and [other resources](#other-resources) listed below.
## CI/CD examples
@@ -59,10 +59,10 @@ Note that older articles and videos may not reflect the state of the latest GitL
For examples of setting up GitLab CI/CD for cloud-based environments, see:
-- [How to set up multi-account AWS SAM deployments with GitLab CI](https://about.gitlab.com/2019/02/04/multi-account-aws-sam-deployments-with-gitlab-ci/)
+- [How to set up multi-account AWS SAM deployments with GitLab CI](https://about.gitlab.com/blog/2019/02/04/multi-account-aws-sam-deployments-with-gitlab-ci/)
- [Automating Kubernetes Deployments with GitLab CI/CD](https://www.youtube.com/watch?v=wEDRfAz6_Uw)
-- [How to autoscale continuous deployment with GitLab Runner on DigitalOcean](https://about.gitlab.com/2018/06/19/autoscale-continuous-deployment-gitlab-runner-digital-ocean/)
-- [How to create a CI/CD pipeline with Auto Deploy to Kubernetes using GitLab and Helm](https://about.gitlab.com/2017/09/21/how-to-create-ci-cd-pipeline-with-autodeploy-to-kubernetes-using-gitlab-and-helm/)
+- [How to autoscale continuous deployment with GitLab Runner on DigitalOcean](https://about.gitlab.com/blog/2018/06/19/autoscale-continuous-deployment-gitlab-runner-digital-ocean/)
+- [How to create a CI/CD pipeline with Auto Deploy to Kubernetes using GitLab and Helm](https://about.gitlab.com/blog/2017/09/21/how-to-create-ci-cd-pipeline-with-autodeploy-to-kubernetes-using-gitlab-and-helm/)
- [Demo - Deploying from GitLab to OpenShift Container Cluster](https://youtu.be/EwbhA53Jpp4)
See also the following video overviews:
@@ -74,32 +74,32 @@ See also the following video overviews:
For some customer experiences with GitLab CI/CD, see:
-- [How Verizon Connect reduced datacenter deploys from 30 days to under 8 hours with GitLab](https://about.gitlab.com/2019/02/14/verizon-customer-story/)
-- [How Wag! cut their release process from 40 minutes to just 6](https://about.gitlab.com/2019/01/16/wag-labs-blog-post/)
-- [How Jaguar Land Rover embraced CI to speed up their software lifecycle](https://about.gitlab.com/2018/07/23/chris-hill-devops-enterprise-summit-talk/)
+- [How Verizon Connect reduced datacenter deploys from 30 days to under 8 hours with GitLab](https://about.gitlab.com/blog/2019/02/14/verizon-customer-story/)
+- [How Wag! cut their release process from 40 minutes to just 6](https://about.gitlab.com/blog/2019/01/16/wag-labs-blog-post/)
+- [How Jaguar Land Rover embraced CI to speed up their software lifecycle](https://about.gitlab.com/blog/2018/07/23/chris-hill-devops-enterprise-summit-talk/)
### Getting started
For some examples to help get you started, see:
-- [GitLab CI/CD's 2018 highlights](https://about.gitlab.com/2019/01/21/gitlab-ci-cd-features-improvements/)
-- [A beginner's guide to continuous integration](https://about.gitlab.com/2018/01/22/a-beginners-guide-to-continuous-integration/)
+- [GitLab CI/CD's 2018 highlights](https://about.gitlab.com/blog/2019/01/21/gitlab-ci-cd-features-improvements/)
+- [A beginner's guide to continuous integration](https://about.gitlab.com/blog/2018/01/22/a-beginners-guide-to-continuous-integration/)
### Implementing GitLab CI/CD
For examples of others who have implemented GitLab CI/CD, see:
-- [How to streamline interactions between multiple repositories with multi-project pipelines](https://about.gitlab.com/2018/10/31/use-multiproject-pipelines-with-gitlab-cicd/)
-- [How we used GitLab CI to build GitLab faster](https://about.gitlab.com/2018/05/02/using-gitlab-ci-to-build-gitlab-faster/)
-- [Test all the things in GitLab CI with Docker by example](https://about.gitlab.com/2018/02/05/test-all-the-things-gitlab-ci-docker-examples/)
-- [A Craftsman looks at continuous integration](https://about.gitlab.com/2018/01/17/craftsman-looks-at-continuous-integration/)
-- [Go tools and GitLab: How to do continuous integration like a boss](https://about.gitlab.com/2017/11/27/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss/)
-- [GitBot – automating boring Git operations with CI](https://about.gitlab.com/2017/11/02/automating-boring-git-operations-gitlab-ci/)
-- [How to use GitLab CI for Vue.js](https://about.gitlab.com/2017/09/12/vuejs-app-gitlab/)
+- [How to streamline interactions between multiple repositories with multi-project pipelines](https://about.gitlab.com/blog/2018/10/31/use-multiproject-pipelines-with-gitlab-cicd/)
+- [How we used GitLab CI to build GitLab faster](https://about.gitlab.com/blog/2018/05/02/using-gitlab-ci-to-build-gitlab-faster/)
+- [Test all the things in GitLab CI with Docker by example](https://about.gitlab.com/blog/2018/02/05/test-all-the-things-gitlab-ci-docker-examples/)
+- [A Craftsman looks at continuous integration](https://about.gitlab.com/blog/2018/01/17/craftsman-looks-at-continuous-integration/)
+- [Go tools and GitLab: How to do continuous integration like a boss](https://about.gitlab.com/blog/2017/11/27/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss/)
+- [GitBot – automating boring Git operations with CI](https://about.gitlab.com/blog/2017/11/02/automating-boring-git-operations-gitlab-ci/)
+- [How to use GitLab CI for Vue.js](https://about.gitlab.com/blog/2017/09/12/vuejs-app-gitlab/)
- Video: [GitLab CI/CD Deep Dive](https://youtu.be/pBe4t1CD8Fc?t=195)
-- [Dockerizing GitLab Review Apps](https://about.gitlab.com/2017/07/11/dockerizing-review-apps/)
-- [Fast and natural continuous integration with GitLab CI](https://about.gitlab.com/2017/05/22/fast-and-natural-continuous-integration-with-gitlab-ci/)
-- [Demo: CI/CD with GitLab in action](https://about.gitlab.com/2017/03/13/ci-cd-demo/)
+- [Dockerizing GitLab Review Apps](https://about.gitlab.com/blog/2017/07/11/dockerizing-review-apps/)
+- [Fast and natural continuous integration with GitLab CI](https://about.gitlab.com/blog/2017/05/22/fast-and-natural-continuous-integration-with-gitlab-ci/)
+- [Demo: CI/CD with GitLab in action](https://about.gitlab.com/blog/2017/03/13/ci-cd-demo/)
### Migrating to GitLab from third-party CI tools
@@ -109,17 +109,17 @@ For examples of others who have implemented GitLab CI/CD, see:
To see how you can integrate GitLab CI/CD with third-party systems, see:
-- [Streamline and shorten error remediation with Sentry’s new GitLab integration](https://about.gitlab.com/2019/01/25/sentry-integration-blog-post/)
-- [How to simplify your smart home configuration with GitLab CI/CD](https://about.gitlab.com/2018/08/02/using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management/)
-- [Demo: GitLab + Jira + Jenkins](https://about.gitlab.com/2018/07/30/gitlab-workflow-with-jira-jenkins/)
-- [Introducing Auto Breakfast from GitLab (sort of)](https://about.gitlab.com/2018/06/29/introducing-auto-breakfast-from-gitlab/)
+- [Streamline and shorten error remediation with Sentry’s new GitLab integration](https://about.gitlab.com/blog/2019/01/25/sentry-integration-blog-post/)
+- [How to simplify your smart home configuration with GitLab CI/CD](https://about.gitlab.com/blog/2018/08/02/using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management/)
+- [Demo: GitLab + Jira + Jenkins](https://about.gitlab.com/blog/2018/07/30/gitlab-workflow-with-jira-jenkins/)
+- [Introducing Auto Breakfast from GitLab (sort of)](https://about.gitlab.com/blog/2018/06/29/introducing-auto-breakfast-from-gitlab/)
### Mobile development
For help with using GitLab CI/CD for mobile application development, see:
-- [How to publish Android apps to the Google Play Store with GitLab and fastlane](https://about.gitlab.com/2019/01/28/android-publishing-with-gitlab-and-fastlane/)
-- [Setting up GitLab CI for Android projects](https://about.gitlab.com/2018/10/24/setting-up-gitlab-ci-for-android-projects/)
-- [Working with YAML in GitLab CI from the Android perspective](https://about.gitlab.com/2017/11/20/working-with-yaml-gitlab-ci-android/)
-- [How to use GitLab CI and MacStadium to build your macOS or iOS projects](https://about.gitlab.com/2017/05/15/how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects/)
-- [Setting up GitLab CI for iOS projects](https://about.gitlab.com/2016/03/10/setting-up-gitlab-ci-for-ios-projects/)
+- [How to publish Android apps to the Google Play Store with GitLab and fastlane](https://about.gitlab.com/blog/2019/01/28/android-publishing-with-gitlab-and-fastlane/)
+- [Setting up GitLab CI for Android projects](https://about.gitlab.com/blog/2018/10/24/setting-up-gitlab-ci-for-android-projects/)
+- [Working with YAML in GitLab CI from the Android perspective](https://about.gitlab.com/blog/2017/11/20/working-with-yaml-gitlab-ci-android/)
+- [How to use GitLab CI and MacStadium to build your macOS or iOS projects](https://about.gitlab.com/blog/2017/05/15/how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects/)
+- [Setting up GitLab CI for iOS projects](https://about.gitlab.com/blog/2016/03/10/setting-up-gitlab-ci-for-ios-projects/)
diff --git a/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/index.md b/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/index.md
index 1d4c9221cf2..49f4a14c5ac 100644
--- a/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/index.md
+++ b/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/index.md
@@ -16,14 +16,14 @@ description: "Continuous Deployment of a Spring Boot application to Cloud Foundr
In this article, we'll demonstrate how to deploy a [Spring
Boot](https://projects.spring.io/spring-boot/) application to [Cloud
Foundry (CF)](https://www.cloudfoundry.org/) with GitLab CI/CD using the [Continuous
-Deployment](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#continuous-deployment)
+Deployment](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#continuous-deployment)
method.
All the code for this project can be found in this [GitLab
repo](https://gitlab.com/gitlab-examples/spring-gitlab-cf-deploy-demo).
In case you're interested in deploying Spring Boot applications to Kubernetes
-using GitLab CI/CD, read through the blog post [Continuous Delivery of a Spring Boot application with GitLab CI and Kubernetes](https://about.gitlab.com/2016/12/14/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes/).
+using GitLab CI/CD, read through the blog post [Continuous Delivery of a Spring Boot application with GitLab CI and Kubernetes](https://about.gitlab.com/blog/2016/12/14/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes/).
## Requirements
diff --git a/doc/ci/examples/deployment/README.md b/doc/ci/examples/deployment/README.md
index 26b10c7eeaf..afe02e0a7d8 100644
--- a/doc/ci/examples/deployment/README.md
+++ b/doc/ci/examples/deployment/README.md
@@ -46,7 +46,7 @@ staging:
- dpl --provider=heroku --app=my-app-staging --api-key=$HEROKU_STAGING_API_KEY
```
-In the above example we use Dpl to deploy `my-app-staging` to Heroku server with api-key stored in `HEROKU_STAGING_API_KEY` secure variable.
+In the above example we use Dpl to deploy `my-app-staging` to Heroku server with API key stored in `HEROKU_STAGING_API_KEY` secure variable.
To use different provider take a look at long list of [Supported Providers](https://github.com/travis-ci/dpl#supported-providers).
diff --git a/doc/ci/examples/deployment/composer-npm-deploy.md b/doc/ci/examples/deployment/composer-npm-deploy.md
index 79b3cbd0c69..c9c78c9a4e4 100644
--- a/doc/ci/examples/deployment/composer-npm-deploy.md
+++ b/doc/ci/examples/deployment/composer-npm-deploy.md
@@ -46,7 +46,7 @@ All these operations will put all files into a `build` folder, which is ready to
You have multiple options: rsync, scp, sftp and so on. For now, we will use scp.
-To make this work, you need to add a GitLab CI/CD Variable (accessible on _gitlab.example/your-project-name/variables_). That variable will be called `STAGING_PRIVATE_KEY` and it's the **private** ssh key of your server.
+To make this work, you need to add a GitLab CI/CD Variable (accessible on `gitlab.example/your-project-name/variables`). That variable will be called `STAGING_PRIVATE_KEY` and it's the **private** SSH key of your server.
### Security tip
@@ -98,7 +98,7 @@ Here's the breakdown:
1. We will connect via `ssh` and create a new `_tmp` folder
1. We will connect via `scp` and upload the `build` folder (which was generated by a `npm` script) to our previously created `_tmp` folder
1. We will connect again via `ssh` and move the `live` folder to an `_old` folder, then move `_tmp` to `live`.
-1. We connect to ssh and remove the `_old` folder
+1. We connect to SSH and remove the `_old` folder
What's the deal with the artifacts? We just tell GitLab CI to keep the `build` directory (later on, you can download that as needed).
diff --git a/doc/ci/examples/devops_and_game_dev_with_gitlab_ci_cd/index.md b/doc/ci/examples/devops_and_game_dev_with_gitlab_ci_cd/index.md
index 44d3ec8046c..e1c59f3b025 100644
--- a/doc/ci/examples/devops_and_game_dev_with_gitlab_ci_cd/index.md
+++ b/doc/ci/examples/devops_and_game_dev_with_gitlab_ci_cd/index.md
@@ -22,7 +22,7 @@ and the basics of game development.
Our [demo game](http://gitlab-game-demo.s3-website-us-east-1.amazonaws.com/) consists of a simple spaceship traveling in space that shoots by clicking the mouse in a given direction.
-Creating a strong CI/CD pipeline at the beginning of developing another game, [Dark Nova](http://darknova.io/),
+Creating a strong CI/CD pipeline at the beginning of developing another game, [Dark Nova](https://www.darknova.io),
was essential for the fast pace the team worked at. This tutorial will build upon my
[previous introductory article](https://ryanhallcs.wordpress.com/2017/03/15/devops-and-game-dev/) and go through the following steps:
@@ -254,7 +254,7 @@ pipeline to include running the tests along with the existing build job.
To ensure our changes don't break the build and all tests still pass, we utilize
Continuous Integration (CI) to run these checks automatically for every push.
-Read through this article to understand [Continuous Integration, Continuous Delivery, and Continuous Deployment](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/),
+Read through this article to understand [Continuous Integration, Continuous Delivery, and Continuous Deployment](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/),
and how these methods are leveraged by GitLab.
From the [last tutorial](https://ryanhallcs.wordpress.com/2017/03/15/devops-and-game-dev/) we already have a `.gitlab-ci.yml` file set up for building our app from
every push. We need to set up a new CI job for testing, which GitLab CI/CD will run after the build job using our generated artifacts from gulp.
@@ -390,7 +390,7 @@ We have our codebase built and tested on every push. To complete the full pipeli
let's set up [free web hosting with AWS S3](https://aws.amazon.com/s/dm/optimization/server-side-test/free-tier/free_np/) and a job through which our build artifacts get
deployed. GitLab also has a free static site hosting service we could use, [GitLab Pages](https://about.gitlab.com/product/pages/),
however Dark Nova specifically uses other AWS tools that necessitates using `AWS S3`.
-Read through this article that describes [deploying to both S3 and GitLab Pages](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/)
+Read through this article that describes [deploying to both S3 and GitLab Pages](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/)
and further delves into the principles of GitLab CI/CD than discussed in this article.
### Set up S3 Bucket
@@ -509,7 +509,7 @@ deploy:
Within the [demo repository](https://gitlab.com/blitzgren/gitlab-game-demo) you can also find a handful of boilerplate code to get
[Typescript](https://www.typescriptlang.org/), [Mocha](https://mochajs.org/), [Gulp](https://gulpjs.com/) and [Phaser](https://phaser.io) all playing
-together nicely with GitLab CI/CD, which is the result of lessons learned while making [Dark Nova](http://darknova.io/).
+together nicely with GitLab CI/CD, which is the result of lessons learned while making [Dark Nova](https://www.darknova.io).
Using a combination of free and open source software, we have a full CI/CD pipeline, a game foundation,
and unit tests, all running and deployed at every push to master - with shockingly little code.
Errors can be easily debugged through GitLab's build logs, and within minutes of a successful commit,
@@ -527,6 +527,6 @@ Here are some ideas to further investigate that can speed up or improve your pip
- [Yarn](https://yarnpkg.com) instead of npm
- Set up a custom [Docker](../../../ci/docker/using_docker_images.md#define-image-and-services-from-gitlab-ciyml) image that can preload dependencies and tools (like AWS CLI)
-- Forward a [custom domain](https:/docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html) to your game's S3 static website
+- Forward a [custom domain](https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html) to your game's S3 static website
- Combine jobs if you find it unnecessary for a small project
-- Avoid the queues and set up your own [custom GitLab CI/CD runner](https://about.gitlab.com/2016/03/01/gitlab-runner-with-docker/)
+- Avoid the queues and set up your own [custom GitLab CI/CD runner](https://about.gitlab.com/blog/2016/03/01/gitlab-runner-with-docker/)
diff --git a/doc/ci/examples/end_to_end_testing_webdriverio/index.md b/doc/ci/examples/end_to_end_testing_webdriverio/index.md
index 38d0d86ffa2..17fb6f9a7c9 100644
--- a/doc/ci/examples/end_to_end_testing_webdriverio/index.md
+++ b/doc/ci/examples/end_to_end_testing_webdriverio/index.md
@@ -28,7 +28,7 @@ layers of your application, from the frontend to the database.
In this article, we will discuss how
to write such end-to-end tests, and how to set up GitLab CI/CD to automatically run these tests
against your new code, on a branch-by-branch basis. For the scope of this article, we will walk you
-through the process of setting up GitLab CI/CD for end-to-end testing Javascript-based applications
+through the process of setting up GitLab CI/CD for end-to-end testing JavaScript-based applications
with WebdriverIO, but the general strategy should carry over to other languages.
We assume you are familiar with GitLab, [GitLab CI/CD](../../README.md), [Review Apps](../../review_apps/index.md), and running your app locally, e.g., on `localhost:8000`.
@@ -47,14 +47,14 @@ infrastructure is up and running, and that your units of code work well together
[Selenium](http://www.seleniumhq.org/) is a piece of software that can control web browsers, e.g., to make them
visit a specific URL or interact with elements on the page. It can be programmatically controlled
from a variety of programming languages. In this article we're going to be using the
-[WebdriverIO](http://webdriver.io/) Javascript bindings, but the general concept should carry over
+[WebdriverIO](https://webdriver.io/) JavaScript bindings, but the general concept should carry over
pretty well to
[other programming languages supported by Selenium](http://docs.seleniumhq.org/about/platforms.jsp#programming-languages).
## Writing tests
You can write tests using
-[several testing frameworks supported by WebdriverIO](http://webdriver.io/guide/testrunner/frameworks.html).
+[several testing frameworks supported by WebdriverIO](https://webdriver.io/guide/testrunner/frameworks.html).
We will be using [Jasmine](https://jasmine.github.io/) here:
```javascript
@@ -79,14 +79,14 @@ multiple tests, such as making sure you are logged in.
The function `it` defines an individual test.
-[The `browser` object](http://webdriver.io/guide/testrunner/browserobject.html) is WebdriverIO's
-special sauce. It provides most of [the WebdriverIO API methods](http://webdriver.io/api.html) that are the key to
+[The `browser` object](https://webdriver.io/guide/testrunner/browserobject.html) is WebdriverIO's
+special sauce. It provides most of [the WebdriverIO API methods](https://webdriver.io/api.html) that are the key to
steering the browser. In this case, we can use
-[`browser.url`](http://webdriver.io/api/protocol/url.html) to visit `/page-that-does-not-exist` to
-hit our 404 page. We can then use [`browser.getUrl`](http://webdriver.io/api/property/getUrl.html)
+[`browser.url`](https://webdriver.io/api/protocol/url.html) to visit `/page-that-does-not-exist` to
+hit our 404 page. We can then use [`browser.getUrl`](https://webdriver.io/api/property/getUrl.html)
to verify that the current page is indeed at the location we specified. To interact with the page,
we can simply pass CSS selectors to
-[`browser.element`](http://webdriver.io/api/protocol/element.html) to get access to elements on the
+[`browser.element`](https://webdriver.io/api/protocol/element.html) to get access to elements on the
page and to interact with them - for example, to click on the link back to the home page.
The simple test shown above
@@ -107,9 +107,9 @@ you can use [the Webpack Dev Server WebdriverIO plugin](https://www.npmjs.com/pa
that automatically starts a development server before executing the tests.
The WebdriverIO documentation has
-[an overview of all configuration options](http://webdriver.io/guide/getstarted/configuration.html), but the
+[an overview of all configuration options](https://webdriver.io/guide/getstarted/configuration.html), but the
easiest way to get started is to start with
-[WebdriverIO's default configuration](http://webdriver.io/guide/testrunner/configurationfile.html), which
+[WebdriverIO's default configuration](https://webdriver.io/guide/testrunner/configurationfile.html), which
provides an overview of all available options. The two options that are going to be most relevant now are the
`specs` option, which is an array of paths to your tests, and the `baseUrl` option, which points to where your app is
running. And finally, we will need to tell WebdriverIO in which browsers we would like to run our
@@ -182,7 +182,7 @@ e2e:chrome:
Now that we have a job to run the end-to-end tests in, we need to tell WebdriverIO how to connect to
the Selenium servers running alongside it. We've already cheated a bit above by
-passing the value of the [`host`](http://webdriver.io/guide/getstarted/configuration.html#host)
+passing the value of the [`host`](https://webdriver.io/guide/getstarted/configuration.html#host)
option as an argument to `npm run confidence-check` on the command line.
However, we still need to tell WebdriverIO which browser is available for it to use.
@@ -248,7 +248,7 @@ production project, see:
- [Flockademic's `.gitlab-ci.yml`](https://gitlab.com/Flockademic/Flockademic/blob/dev/.gitlab-ci.yml)
- [Flockademic's tests](https://gitlab.com/Flockademic/Flockademic/tree/dev/__e2e__)
-There's plenty more that WebdriverIO can do. For example, you can configure a [`screenshotPath`](http://webdriver.io/guide/getstarted/configuration.html#screenshotPath) to tell WebdriverIO to take
+There's plenty more that WebdriverIO can do. For example, you can configure a [`screenshotPath`](https://webdriver.io/guide/getstarted/configuration.html#screenshotPath) to tell WebdriverIO to take
a screenshot when tests are failing. Then tell GitLab CI/CD to store those
[artifacts](../../yaml/README.md#artifacts), and you'll be able to see what went
wrong within GitLab.
diff --git a/doc/ci/examples/laravel_with_gitlab_and_envoy/index.md b/doc/ci/examples/laravel_with_gitlab_and_envoy/index.md
index d79821ff258..a7ed4ca3514 100644
--- a/doc/ci/examples/laravel_with_gitlab_and_envoy/index.md
+++ b/doc/ci/examples/laravel_with_gitlab_and_envoy/index.md
@@ -15,7 +15,7 @@ last_updated: 2019-03-06
GitLab features our applications with Continuous Integration, and it is possible to easily deploy the new code changes to the production server whenever we want.
-In this tutorial, we'll show you how to initialize a [Laravel](http://laravel.com/) application and set up our [Envoy](https://laravel.com/docs/envoy) tasks, then we'll jump into see how to test and deploy it with [GitLab CI/CD](../README.md) via [Continuous Delivery](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/).
+In this tutorial, we'll show you how to initialize a [Laravel](https://laravel.com) application and set up our [Envoy](https://laravel.com/docs/master/envoy) tasks, then we'll jump into see how to test and deploy it with [GitLab CI/CD](../README.md) via [Continuous Delivery](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/).
We assume you have a basic experience with Laravel, Linux servers,
and you know how to use GitLab.
@@ -25,11 +25,11 @@ It has a great community with a [fantastic documentation](https://laravel.com/do
Aside from the usual routing, controllers, requests, responses, views, and (blade) templates, out of the box Laravel provides plenty of additional services such as cache, events, localization, authentication and many others.
We will use [Envoy](https://laravel.com/docs/master/envoy) as an SSH task runner based on PHP.
-It uses a clean, minimal [Blade syntax](https://laravel.com/docs/blade) to set up tasks that can run on remote servers, such as, cloning your project from the repository, installing the Composer dependencies, and running [Artisan commands](https://laravel.com/docs/artisan).
+It uses a clean, minimal [Blade syntax](https://laravel.com/docs/master/blade) to set up tasks that can run on remote servers, such as, cloning your project from the repository, installing the Composer dependencies, and running [Artisan commands](https://laravel.com/docs/master/artisan).
## Initialize our Laravel app on GitLab
-We assume [you have installed a new laravel project](https://laravel.com/docs/installation#installation), so let's start with a unit test, and initialize Git for the project.
+We assume [you have installed a new laravel project](https://laravel.com/docs/master/installation#installation), so let's start with a unit test, and initialize Git for the project.
### Unit Test
@@ -82,12 +82,12 @@ git push -u origin master
## Configure the production server
Before we begin setting up Envoy and GitLab CI/CD, let's quickly make sure the production server is ready for deployment.
-We have installed LEMP stack which stands for Linux, Nginx, MySQL and PHP on our Ubuntu 16.04.
+We have installed LEMP stack which stands for Linux, NGINX, MySQL and PHP on our Ubuntu 16.04.
### Create a new user
Let's now create a new user that will be used to deploy our website and give it
-the needed permissions using [Linux ACL](https://serversforhackers.com/video/linux-acls):
+the needed permissions using [Linux ACL](https://serversforhackers.com/c/linux-acls):
```bash
# Create user deployer
@@ -151,11 +151,11 @@ git clone git@gitlab.example.com:<USERNAME>/laravel-sample.git
Answer **yes** if asked `Are you sure you want to continue connecting (yes/no)?`.
It adds GitLab.com to the known hosts.
-### Configuring Nginx
+### Configuring NGINX
Now, let's make sure our web server configuration points to the `current/public` rather than `public`.
-Open the default Nginx server block configuration file by typing:
+Open the default NGINX server block configuration file by typing:
```bash
sudo nano /etc/nginx/sites-available/default
@@ -179,7 +179,7 @@ You may replace the app's name in `/var/www/app/current/public` with the folder
So we have our Laravel app ready for production.
The next thing is to use Envoy to perform the deploy.
-To use Envoy, we should first install it on our local machine [using the given instructions by Laravel](https://laravel.com/docs/envoy/#introduction).
+To use Envoy, we should first install it on our local machine [using the given instructions by Laravel](https://laravel.com/docs/master/envoy/#introduction).
### How Envoy works
@@ -216,7 +216,7 @@ Our deployment plan is to clone the latest release from GitLab repository, insta
#### @setup directive
-The first step of our deployment process is to define a set of variables within [@setup](https://laravel.com/docs/envoy/#setup) directive.
+The first step of our deployment process is to define a set of variables within [@setup](https://laravel.com/docs/master/envoy/#setup) directive.
You may change the `app` to your application's name:
```php
@@ -241,7 +241,7 @@ You may change the `app` to your application's name:
#### @story directive
-The [@story](https://laravel.com/docs/envoy/#stories) directive allows us define a list of tasks that can be run as a single task.
+The [@story](https://laravel.com/docs/master/envoy/#stories) directive allows us define a list of tasks that can be run as a single task.
Here we have three tasks called `clone_repository`, `run_composer`, `update_symlinks`. These variables are usable to making our task's codes more cleaner:
```php
@@ -391,10 +391,10 @@ git push origin master
## Continuous Integration with GitLab
We have our app ready on GitLab, and we also can deploy it manually.
-But let's take a step forward to do it automatically with [Continuous Delivery](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#continuous-delivery) method.
+But let's take a step forward to do it automatically with [Continuous Delivery](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#continuous-delivery) method.
We need to check every commit with a set of automated tests to become aware of issues at the earliest, and then, we can deploy to the target environment if we are happy with the result of the tests.
-[GitLab CI/CD](../../README.md) allows us to use [Docker](https://docker.com/) engine to handle the process of testing and deploying our app.
+[GitLab CI/CD](../../README.md) allows us to use [Docker](https://www.docker.com) engine to handle the process of testing and deploying our app.
In the case you're not familiar with Docker, refer to [How to Automate Docker Deployments](http://paislee.io/how-to-automate-docker-deployments/).
To be able to build, test, and deploy our app with GitLab CI/CD, we need to prepare our work environment.
@@ -431,7 +431,7 @@ RUN curl --silent --show-error https://getcomposer.org/installer | php -- --inst
RUN composer global require "laravel/envoy=~1.0"
```
-We added the [official PHP 7.1 Docker image](https://hub.docker.com/r/_/php/), which consist of a minimum installation of Debian Jessie with PHP pre-installed, and works perfectly for our use case.
+We added the [official PHP 7.1 Docker image](https://hub.docker.com/_/php), which consist of a minimum installation of Debian Jessie with PHP pre-installed, and works perfectly for our use case.
We used `docker-php-ext-install` (provided by the official PHP Docker image) to install the PHP extensions we need.
@@ -469,7 +469,7 @@ Congratulations! You just pushed the first Docker image to the GitLab Registry,
![container registry page with image](img/container_registry_page_with_image.jpg)
>**Note:**
-You can also [use GitLab CI/CD](https://about.gitlab.com/2016/05/23/gitlab-container-registry/#use-with-gitlab-ci) to build and push your Docker images, rather than doing that on your machine.
+You can also [use GitLab CI/CD](https://about.gitlab.com/blog/2016/05/23/gitlab-container-registry/#use-with-gitlab-ci) to build and push your Docker images, rather than doing that on your machine.
We'll use this image further down in the `.gitlab-ci.yml` configuration file to handle the process of testing and deploying our app.
@@ -557,7 +557,7 @@ GitLab CI/CD allows us to use [environment variables](../../yaml/README.md#varia
We defined MySQL as our database management system, which comes with a superuser root created by default.
So we should adjust the configuration of MySQL instance by defining `MYSQL_DATABASE` variable as our database name and `MYSQL_ROOT_PASSWORD` variable as the password of `root`.
-Find out more about MySQL variables at the [official MySQL Docker Image](https://hub.docker.com/r/_/mysql/).
+Find out more about MySQL variables at the [official MySQL Docker Image](https://hub.docker.com/_/mysql).
Also set the variables `DB_HOST` to `mysql` and `DB_USERNAME` to `root`, which are Laravel specific variables.
We define `DB_HOST` as `mysql` instead of `127.0.0.1`, as we use MySQL Docker image as a service which [is linked to the main Docker image](../../docker/using_docker_images.md#how-services-are-linked-to-the-job).
@@ -605,7 +605,7 @@ The job `deploy_production` will deploy the app to the production server.
To deploy our app with Envoy, we had to set up the `$SSH_PRIVATE_KEY` variable as an [SSH private key](../../ssh_keys/README.md#ssh-keys-when-using-the-docker-executor).
If the SSH keys have added successfully, we can run Envoy.
-As mentioned before, GitLab supports [Continuous Delivery](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#continuous-delivery) methods as well.
+As mentioned before, GitLab supports [Continuous Delivery](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#continuous-delivery) methods as well.
The [environment](../../yaml/README.md#environment) keyword tells GitLab that this job deploys to the `production` environment.
The `url` keyword is used to generate a link to our application on the GitLab Environments page.
The `only` keyword tells GitLab CI that the job should be executed only when the pipeline is building the `master` branch.
@@ -634,7 +634,7 @@ deploy_production:
- master
```
-You may also want to add another job for [staging environment](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments), to final test your application before deploying to production.
+You may also want to add another job for [staging environment](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/), to final test your application before deploying to production.
### Turn on GitLab CI/CD
diff --git a/doc/ci/examples/test-and-deploy-python-application-to-heroku.md b/doc/ci/examples/test-and-deploy-python-application-to-heroku.md
index f9d185f187c..34d53f67adc 100644
--- a/doc/ci/examples/test-and-deploy-python-application-to-heroku.md
+++ b/doc/ci/examples/test-and-deploy-python-application-to-heroku.md
@@ -72,7 +72,7 @@ You can do this through the [Dashboard](https://dashboard.heroku.com/).
First install [Docker Engine](https://docs.docker.com/installation/).
-To build this project you also need to have [GitLab Runner](https://docs.gitlab.com/runner).
+To build this project you also need to have [GitLab Runner](https://docs.gitlab.com/runner/index.html).
You can use public runners available on `gitlab.com` or you can register your own:
```sh
@@ -86,6 +86,6 @@ gitlab-runner register \
--docker-postgres latest
```
-With the command above, you create a runner that uses the [python:3.5](https://hub.docker.com/r/_/python/) image and uses a [postgres](https://hub.docker.com/r/_/postgres/) database.
+With the command above, you create a runner that uses the [`python:3.5`](https://hub.docker.com/_/python) image and uses a [PostgreSQL](https://hub.docker.com/_/postgres) database.
To access the PostgreSQL database, connect to `host: postgres` as user `postgres` with no password.
diff --git a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
index 79d54b52b5a..9a4fbfcce6d 100644
--- a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
+++ b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
@@ -77,6 +77,6 @@ gitlab-runner register \
--docker-postgres latest
```
-With the command above, you create a Runner that uses the [ruby:2.2](https://hub.docker.com/r/_/ruby/) image and uses a [postgres](https://hub.docker.com/r/_/postgres/) database.
+With the command above, you create a Runner that uses the [ruby:2.2](https://hub.docker.com/_/ruby) image and uses a [postgres](https://hub.docker.com/_/postgres) database.
To access the PostgreSQL database, connect to `host: postgres` as user `postgres` with no password.
diff --git a/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md b/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md
index 0e595e1a0be..a81568d6cd4 100644
--- a/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md
+++ b/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md
@@ -205,7 +205,7 @@ when running our Phoenix in our `localhost`.
As our project is still fresh, we don't have any data on our database, so, the `migrations`
directory will be empty.
- Without `.gitkeep`, git will not upload this empty directory and we'll got an error when running our
+ Without `.gitkeep`, Git will not upload this empty directory and we'll got an error when running our
test on GitLab.
> **Note:** If we add a folder via the GitLab UI, GitLab itself will add the `.gitkeep` to that new dir.
@@ -412,8 +412,8 @@ other reasons][ci-reasons] to keep using GitLab CI/CD. The benefits to our teams
[mix-ecto]: https://hexdocs.pm/ecto/Mix.Tasks.Ecto.Create.html "mix and Ecto"
[iex]: https://elixir-lang.org/getting-started/introduction.html#interactive-mode "Interactive Mode"
[ci-lint]: https://gitlab.com/ci/lint "CI Lint Tool"
-[ci-reasons]: https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/ "7 Reasons Why You Should Be Using CI"
-[ci-guide]: https://about.gitlab.com/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/ "Getting Started With GitLab And GitLab CI/CD"
+[ci-reasons]: https://about.gitlab.com/blog/2015/02/03/7-reasons-why-you-should-be-using-ci/ "7 Reasons Why You Should Be Using CI"
+[ci-guide]: https://about.gitlab.com/blog/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/ "Getting Started With GitLab And GitLab CI/CD"
[ci-docs]: ../../README.md "GitLab CI/CD Documentation"
[skipping-jobs]: ../../yaml/README.md#skipping-jobs "Skipping Jobs"
[gitlab-runners]: ../../runners/README.md "GitLab Runners Documentation"
diff --git a/doc/ci/interactive_web_terminal/index.md b/doc/ci/interactive_web_terminal/index.md
index c1d4f784ddd..361e526ed96 100644
--- a/doc/ci/interactive_web_terminal/index.md
+++ b/doc/ci/interactive_web_terminal/index.md
@@ -30,7 +30,7 @@ Two things need to be configured for the interactive web terminal to work:
NOTE: **Note:**
Interactive web terminals are not yet supported by
-[`gitlab-runner` helm chart](https://docs.gitlab.com/charts/charts/gitlab/gitlab-runner/index.html),
+[`gitlab-runner` Helm chart](https://docs.gitlab.com/charts/charts/gitlab/gitlab-runner/index.html),
but support [is planned](https://gitlab.com/gitlab-org/charts/gitlab-runner/issues/79).
## Debugging a running job
diff --git a/doc/ci/introduction/index.md b/doc/ci/introduction/index.md
index 4389b2ce015..a644a89eee4 100644
--- a/doc/ci/introduction/index.md
+++ b/doc/ci/introduction/index.md
@@ -190,6 +190,7 @@ according to each stage (Verify, Package, Release).
- Store Docker images with [Container Registry](../../user/packages/container_registry/index.md).
- Store NPM packages with [NPM Registry](../../user/packages/npm_registry/index.md). **(PREMIUM)**
- Store Maven artifacts with [Maven Repository](../../user/packages/maven_repository/index.md). **(PREMIUM)**
+ - Store Conan packages with [Conan Repository](../../user/packages/conan_repository/index.md). **(PREMIUM)**
1. **Release**:
- Continuous Deployment, automatically deploying your app to production.
- Continuous Delivery, manually click to deploy your app to production.
diff --git a/doc/ci/jenkins/index.md b/doc/ci/jenkins/index.md
index 2c3bdcf30d6..321d0d2778f 100644
--- a/doc/ci/jenkins/index.md
+++ b/doc/ci/jenkins/index.md
@@ -202,7 +202,7 @@ can provide any variables they like.
#### `triggers` / `cron`
-Because GitLab is integrated tightly with git, SCM polling options for triggers are not needed. We support an easy to use
+Because GitLab is integrated tightly with Git, SCM polling options for triggers are not needed. We support an easy to use
[syntax for scheduling pipelines](../../user/project/pipelines/schedules.md).
#### `tools`
diff --git a/doc/ci/large_repositories/index.md b/doc/ci/large_repositories/index.md
index b1359537fca..ce998502b69 100644
--- a/doc/ci/large_repositories/index.md
+++ b/doc/ci/large_repositories/index.md
@@ -111,7 +111,7 @@ machines, and have an existing worktree that you can re-use for builds.
For exact parameters accepted by
[`GIT_CLEAN_FLAGS`](../yaml/README.md#git-clean-flags), see the documentation
-for [git clean](https://git-scm.com/docs/git-clean). The available parameters
+for [`git clean`](https://git-scm.com/docs/git-clean). The available parameters
are dependent on Git version.
## Fork-based workflow
diff --git a/doc/ci/merge_request_pipelines/index.md b/doc/ci/merge_request_pipelines/index.md
index e29a13e87af..a49279f1932 100644
--- a/doc/ci/merge_request_pipelines/index.md
+++ b/doc/ci/merge_request_pipelines/index.md
@@ -151,13 +151,13 @@ parent project. This means you cannot completely trust the pipeline result,
because, technically, external contributors can disguise their pipeline results
by tweaking their GitLab Runner in the forked project.
-There are multiple reasons about why GitLab doesn't allow those pipelines to be
+There are multiple reasons why GitLab doesn't allow those pipelines to be
created in the parent project, but one of the biggest reasons is security concern.
External users could steal secret variables from the parent project by modifying
`.gitlab-ci.yml`, which could be some sort of credentials. This should not happen.
We're discussing a secure solution of running pipelines for merge requests
-that submitted from forked projects,
+that are submitted from forked projects,
see [the issue about the permission extension](https://gitlab.com/gitlab-org/gitlab-foss/issues/23902).
## Additional predefined variables
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline.png b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline.png
deleted file mode 100644
index 6d4b66824e1..00000000000
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merged_result_pipeline_v12_3.png b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merged_result_pipeline_v12_3.png
new file mode 100644
index 00000000000..6f0752bb940
--- /dev/null
+++ b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merged_result_pipeline_v12_3.png
Binary files differ
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md
index e1c5848af03..3a0848fcd08 100644
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md
+++ b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md
@@ -20,7 +20,7 @@ GitLab can run pipelines for merge requests
on this merged result. That is, where the source and target branches are combined into a
new ref and a pipeline for this ref validates the result prior to merging.
-![Merge request pipeline as the head pipeline](img/merge_request_pipeline.png)
+![Merge request pipeline as the head pipeline](img/merged_result_pipeline_v12_3.png)
There are some cases where creating a combined ref is not possible or not wanted.
For example, a source branch that has conflicts with the target branch
@@ -93,6 +93,17 @@ To check these feature flag values, please ask administrator to execute the foll
> Feature.enable(:ci_use_merge_request_ref) # Enable the feature flag.
```
+### Intermittently pipelines fail by `fatal: reference is not a tree:` error
+
+Since pipelines for merged results are a run on a merge ref of a merge request
+(`refs/merge-requests/<iid>/merge`), the git-reference could be overwritten at an
+unexpected timing, for example, when a source or target branch is advanced.
+In this case, the pipeline fails because of `fatal: reference is not a tree:` error,
+which indicates that the checkout-SHA is not found in the merge ref.
+
+This behavior was improved at GitLab 12.4 by introducing [Persistent pipeline refs](../../pipelines.md#persistent-pipeline-refs).
+You should be able to create pipelines at any timings without concerning the error.
+
## Using Merge Trains **(PREMIUM)**
By enabling [Pipelines for merged results](#pipelines-for-merged-results-premium),
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md
index 767058376ca..f2a7902c9ca 100644
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md
+++ b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md
@@ -122,6 +122,12 @@ is unavailable when
Follow [this issue](https://gitlab.com/gitlab-org/gitlab/issues/12267) to
track progress on this issue.
+### Merge Train Pipeline cannot be retried
+
+A Merge Train pipeline cannot be retried because the merge request is dropped from the merge train upon failure. For this reason, the retry button does not appear next to the pipeline icon.
+
+In the case of pipeline failure, you should [re-enqueue](#how-to-add-a-merge-request-to-a-merge-train) the merge request to the merge train, which will then initiate a new pipeline.
+
### Merge Train disturbs your workflow
First of all, please check if [merge immediately](#immediately-merge-a-merge-request-with-a-merge-train)
diff --git a/doc/ci/multi_project_pipelines.md b/doc/ci/multi_project_pipelines.md
index 8ae38db5c96..093d334e937 100644
--- a/doc/ci/multi_project_pipelines.md
+++ b/doc/ci/multi_project_pipelines.md
@@ -5,7 +5,7 @@ type: reference
# Multi-project pipelines **(PREMIUM)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/2121) in
-[GitLab Premium 9.3](https://about.gitlab.com/2017/06/22/gitlab-9-3-released/#multi-project-pipeline-graphs).
+[GitLab Premium 9.3](https://about.gitlab.com/blog/2017/06/22/gitlab-9-3-released/#multi-project-pipeline-graphs).
When you set up [GitLab CI/CD](README.md) across multiple projects, you can visualize
the entire pipeline, including all cross-project inter-dependencies.
@@ -24,7 +24,7 @@ and when hovering or tapping (on touchscreen devices) they will expand and be sh
![Multi-project mini graph](img/multi_pipeline_mini_graph.gif)
Multi-project pipelines are useful for larger products that require cross-project inter-dependencies, such as those
-adopting a [microservices architecture](https://about.gitlab.com/2016/08/16/trends-in-version-control-land-microservices/).
+adopting a [microservices architecture](https://about.gitlab.com/blog/2016/08/16/trends-in-version-control-land-microservices/).
For a demonstration of how cross-functional development teams can use cross-pipeline
triggering to trigger multiple pipelines for different microservices projects, see
@@ -115,8 +115,12 @@ staging:
branch: stable-11-2
```
-Use a `project` keyword to specify full path to a downstream project. Use
-a `branch` keyword to specify a branch name.
+Use:
+
+- The `project` keyword to specify the full path to a downstream project.
+- The `branch` keyword to specify the name of a branch in the project specified by `project`.
+ [From GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/issues/10126), variable expansion is
+ supported.
GitLab will use a commit that is currently on the HEAD of the branch when
creating a downstream pipeline.
diff --git a/doc/ci/pipelines.md b/doc/ci/pipelines.md
index de9bac76281..e5f2701c6ae 100644
--- a/doc/ci/pipelines.md
+++ b/doc/ci/pipelines.md
@@ -204,7 +204,7 @@ the following (you can even use them interchangeably):
- A colon (`:`).
NOTE: **Note:**
-More specifically, it uses [this](https://gitlab.com/gitlab-org/gitlab-foss/blob/2f3dc314f42dbd79813e6251792853bc231e69dd/app/models/commit_status.rb#L99) regular expression: `\d+[\s:\/\\]+\d+\s*`.
+More specifically, it uses [this](https://gitlab.com/gitlab-org/gitlab/blob/2f3dc314f42dbd79813e6251792853bc231e69dd/app/models/commit_status.rb#L99) regular expression: `\d+[\s:\/\\]+\d+\s*`.
#### How grouping works
@@ -283,11 +283,11 @@ You can also access pipelines for a merge request by navigating to its **Pipelin
When you access a pipeline, you can see the related jobs for that pipeline.
-Clicking on an individual job will show you its job trace, and allow you to:
+Clicking on an individual job will show you its job log, and allow you to:
- Cancel the job.
- Retry the job.
-- Erase the job trace.
+- Erase the job log.
### Seeing the failure reason for jobs
@@ -379,6 +379,8 @@ This functionality is only available:
## Most Recent Pipeline
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/50499) in GitLab 12.3.
+
There's a link to the latest pipeline for the last commit of a given branch at `/project/pipelines/[branch]/latest`. Also, `/project/pipelines/latest` will redirect you to the latest pipeline for the last commit on the project's default branch.
## Security on protected branches
@@ -405,3 +407,32 @@ branches, avoiding untrusted code to be executed on the protected runner and
preserving deployment keys and other credentials from being unintentionally
accessed. In order to ensure that jobs intended to be executed on protected
runners will not use regular runners, they must be tagged accordingly.
+
+## Persistent pipeline refs
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/17043) in GitLab 12.4.
+
+Previously, you'd have encountered unexpected pipeline failures when you force-pushed
+a branch to its remote repository. To illustrate the problem, suppose you've had the current workflow:
+
+1. A user creates a feature branch named `example` and pushes it to a remote repository.
+1. A new pipeline starts running on the `example` branch.
+1. A user rebases the `example` branch on the latest `master` branch and force-pushes it to its remote repository.
+1. A new pipeline starts running on the `example` branch again, however,
+ the previous pipeline (2) fails because of `fatal: reference is not a tree:` error.
+
+This is because the previous pipeline cannot find a checkout-SHA (which associated with the pipeline record)
+from the `example` branch that the commit history has already been overwritten by the force-push.
+Similarly, [Pipelines for merged results](merge_request_pipelines/pipelines_for_merged_results/index.md)
+might have failed intermittently due to [the same reason](merge_request_pipelines/pipelines_for_merged_results/index.md#intermittently-pipelines-fail-by-fatal-reference-is-not-a-tree-error).
+
+As of GitLab 12.4, we've improved this behavior by persisting pipeline refs exclusively.
+To illustrate its life cycle:
+
+1. A pipeline is created on a feature branch named `example`.
+1. A persistent pipeline ref is created at `refs/pipelines/<pipeline-id>`,
+ which retains the checkout-SHA of the associated pipeline record.
+ This persistent ref stays intact during the pipeline execution,
+ even if the commit history of the `example` branch has been overwritten by force-push.
+1. GitLab Runner fetches the persistent pipeline ref and gets source code from the checkout-SHA.
+1. When the pipeline finished, its persistent ref is cleaned up in a background process.
diff --git a/doc/ci/quick_start/README.md b/doc/ci/quick_start/README.md
index 0822b01d553..10a898be900 100644
--- a/doc/ci/quick_start/README.md
+++ b/doc/ci/quick_start/README.md
@@ -22,7 +22,7 @@ GitLab offers a [continuous integration][ci] service. If you
and configure your GitLab project to use a [Runner], then each commit or
push triggers your CI [pipeline].
-The `.gitlab-ci.yml` file tells the GitLab runner what to do. By default it runs
+The `.gitlab-ci.yml` file tells the GitLab Runner what to do. By default it runs
a pipeline with three [stages]: `build`, `test`, and `deploy`. You don't need to
use all three stages; stages with no jobs are simply ignored.
@@ -126,7 +126,7 @@ a "CI Lint" button to go to this page under **CI/CD âž” Pipelines** and
**Pipelines âž” Jobs** in your project.
For more information and a complete `.gitlab-ci.yml` syntax, please read
-[the reference documentation on .gitlab-ci.yml](../yaml/README.md).
+[the reference documentation on `.gitlab-ci.yml`](../yaml/README.md).
### Push `.gitlab-ci.yml` to GitLab
@@ -235,7 +235,7 @@ Visit the [examples README][examples] to see a list of examples using GitLab
CI with various languages.
[runner-install]: https://docs.gitlab.com/runner/install/
-[blog-ci]: https://about.gitlab.com/2015/05/06/why-were-replacing-gitlab-ci-jobs-with-gitlab-ci-dot-yml/
+[blog-ci]: https://about.gitlab.com/blog/2015/05/06/why-were-replacing-gitlab-ci-jobs-with-gitlab-ci-dot-yml/
[examples]: ../examples/README.md
[ci]: https://about.gitlab.com/product/continuous-integration/
[yaml]: ../yaml/README.md
diff --git a/doc/ci/review_apps/index.md b/doc/ci/review_apps/index.md
index 7a1e6e4e1b8..da92fadafc4 100644
--- a/doc/ci/review_apps/index.md
+++ b/doc/ci/review_apps/index.md
@@ -24,8 +24,8 @@ In the above example:
- A Review App is built every time a commit is pushed to `topic branch`.
- The reviewer fails two reviews before passing the third review.
-- Once the review as passed, `topic branch` is merged into `master` where it's deploy to staging.
-- After been approved in staging, the changes that were merged into `master` are deployed in to production.
+- Once the review has passed, `topic branch` is merged into `master` where it is deployed to staging.
+- After having been approved in staging, the changes that were merged into `master` are deployed in to production.
## How Review Apps work
diff --git a/doc/ci/runners/README.md b/doc/ci/runners/README.md
index f7d1a3e88a2..4011ae4df70 100644
--- a/doc/ci/runners/README.md
+++ b/doc/ci/runners/README.md
@@ -365,8 +365,8 @@ We're always looking for contributions that can mitigate these
### Resetting the registration token for a Project
If you think that registration token for a Project was revealed, you should
-reset them. It's recommended because such token can be used to register another
-Runner to the Project. It may be next used to obtain the values of secret
+reset them. It's recommended because such a token can be used to register another
+Runner to the Project. It may then be used to obtain the values of secret
variables or clone the project code, that normally may be unavailable for the
attacker.
@@ -379,10 +379,10 @@ To reset the token:
1. After the page is refreshed, expand the **Runners settings** section
and check the registration token - it should be changed.
-From now on the old token is not valid anymore and will not allow to register
-a new Runner to the project. If you are using any tools to provision and
-register new Runners, you should now update the token that is used to the
-new value.
+From now on the old token is no longer valid and will not register
+any new Runners to the project. If you are using any tools to provision and
+register new Runners, the tokens used in those tools should be updated to reflect the
+value of the new token.
## Determining the IP address of a Runner
diff --git a/doc/ci/services/redis.md b/doc/ci/services/redis.md
index 8b227154b06..ccb92fa94d7 100644
--- a/doc/ci/services/redis.md
+++ b/doc/ci/services/redis.md
@@ -30,7 +30,7 @@ Host: redis
And that's it. Redis will now be available to be used within your testing
framework.
-You can also use any other docker image available on [Docker Hub][hub-redis].
+You can also use any other docker image available on [Docker Hub](https://hub.docker.com/_/redis).
For example, to use Redis 2.8 the service becomes `redis:2.8`.
## Use Redis with the Shell executor
@@ -62,12 +62,9 @@ Host: localhost
## Example project
-We have set up an [Example Redis Project][redis-example-repo] for your convenience
+We have set up an [Example Redis Project](https://gitlab.com/gitlab-examples/redis) for your convenience
that runs on [GitLab.com](https://gitlab.com) using our publicly available
[shared runners](../runners/README.md).
Want to hack on it? Simply fork it, commit and push your changes. Within a few
moments the changes will be picked by a public runner and the job will begin.
-
-[hub-redis]: https://hub.docker.com/r/_/redis/
-[redis-example-repo]: https://gitlab.com/gitlab-examples/redis
diff --git a/doc/ci/ssh_keys/README.md b/doc/ci/ssh_keys/README.md
index b6aebd3bd78..bee1501aed8 100644
--- a/doc/ci/ssh_keys/README.md
+++ b/doc/ci/ssh_keys/README.md
@@ -25,18 +25,18 @@ with any type of [executor](https://docs.gitlab.com/runner/executors/)
## How it works
-1. Create a new SSH key pair locally with [ssh-keygen](http://linux.die.net/man/1/ssh-keygen)
+1. Create a new SSH key pair locally with [`ssh-keygen`](https://linux.die.net/man/1/ssh-keygen)
1. Add the private key as a [variable](../variables/README.md) to
your project
-1. Run the [ssh-agent](http://linux.die.net/man/1/ssh-agent) during job to load
+1. Run the [`ssh-agent`](https://linux.die.net/man/1/ssh-agent) during job to load
the private key.
1. Copy the public key to the servers you want to have access to (usually in
`~/.ssh/authorized_keys`) or add it as a [deploy key](../../ssh/README.md#deploy-keys)
if you are accessing a private GitLab repository.
NOTE: **Note:**
-The private key will not be displayed in the job trace, unless you enable
-[debug tracing](../variables/README.md#debug-tracing). You might also want to
+The private key will not be displayed in the job log, unless you enable
+[debug logging](../variables/README.md#debug-logging). You might also want to
check the [visibility of your pipelines](../../user/project/pipelines/settings.md#visibility-of-pipelines).
## SSH keys when using the Docker executor
diff --git a/doc/ci/triggers/README.md b/doc/ci/triggers/README.md
index d2efae8ebef..82cbd40c4c6 100644
--- a/doc/ci/triggers/README.md
+++ b/doc/ci/triggers/README.md
@@ -6,7 +6,7 @@ type: tutorial
> **Notes**:
>
-> - [Introduced](https://about.gitlab.com/2015/08/22/gitlab-7-14-released/) in GitLab 7.14.
+> - [Introduced](https://about.gitlab.com/blog/2015/08/22/gitlab-7-14-released/) in GitLab 7.14.
> - GitLab 8.12 has a completely redesigned job permissions system. Read all
> about the [new model and its implications](../../user/project/new_ci_build_permissions_model.md#pipeline-triggers).
@@ -157,7 +157,7 @@ curl --request POST \
You can also benefit by using triggers in your `.gitlab-ci.yml`. Let's say that
you have two projects, A and B, and you want to trigger a rebuild on the `master`
branch of project B whenever a tag on project A is created. This is the job you
-need to add in project's A `.gitlab-ci.yml`:
+need to add in project A's `.gitlab-ci.yml`:
```yaml
build_docs:
diff --git a/doc/ci/variables/README.md b/doc/ci/variables/README.md
index 5e871ec7958..5d86d382aa8 100644
--- a/doc/ci/variables/README.md
+++ b/doc/ci/variables/README.md
@@ -1,5 +1,4 @@
---
-table_display_block: true
type: reference
---
@@ -263,12 +262,13 @@ export CI_JOB_TOKEN="abcde-1234ABCD5678ef"
export CI_PIPELINE_ID="1000"
export CI_PIPELINE_IID="10"
export CI_PAGES_DOMAIN="gitlab.io"
-export CI_PAGES_URL="https://gitlab-org.gitlab.io/gitlab-ce"
+export CI_PAGES_URL="https://gitlab-org.gitlab.io/gitlab-foss"
export CI_PROJECT_ID="34"
export CI_PROJECT_DIR="/builds/gitlab-org/gitlab-foss"
-export CI_PROJECT_NAME="gitlab-ce"
+export CI_PROJECT_NAME="gitlab-foss"
+export CI_PROJECT_TITLE="GitLab FOSS"
export CI_PROJECT_NAMESPACE="gitlab-org"
-export CI_PROJECT_PATH="gitlab-org/gitlab-ce"
+export CI_PROJECT_PATH="gitlab-org/gitlab-foss"
export CI_PROJECT_URL="https://example.com/gitlab-org/gitlab-foss"
export CI_REGISTRY="registry.example.com"
export CI_REGISTRY_IMAGE="registry.example.com/gitlab-org/gitlab-foss"
@@ -568,7 +568,7 @@ Below you can find supported syntax reference:
Precedence of operators follows standard Ruby 2.5 operation
[precedence](https://ruby-doc.org/core-2.5.0/doc/syntax/precedence_rdoc.html).
-## Debug tracing
+## Debug logging
> Introduced in GitLab Runner 1.7.
@@ -576,24 +576,24 @@ CAUTION: **Warning:**
Enabling debug tracing can have severe security implications. The
output **will** contain the content of all your variables and any other
secrets! The output **will** be uploaded to the GitLab server and made visible
-in job traces!
+in job logs!
By default, GitLab Runner hides most of the details of what it is doing when
-processing a job. This behavior keeps job traces short, and prevents secrets
-from being leaked into the trace unless your script writes them to the screen.
+processing a job. This behavior keeps job logs short, and prevents secrets
+from being leaked into the log unless your script writes them to the screen.
If a job isn't working as expected, this can make the problem difficult to
investigate; in these cases, you can enable debug tracing in `.gitlab-ci.yml`.
Available on GitLab Runner v1.7+, this feature enables the shell's execution
-trace, resulting in a verbose job trace listing all commands that were run,
+log, resulting in a verbose job log listing all commands that were run,
variables that were set, etc.
Before enabling this, you should ensure jobs are visible to
[team members only](../../user/permissions.md#project-features). You should
-also [erase](../pipelines.md#accessing-individual-jobs) all generated job traces
+also [erase](../pipelines.md#accessing-individual-jobs) all generated job logs
before making them visible again.
-To enable debug traces, set the `CI_DEBUG_TRACE` variable to `true`:
+To enable debug logs (traces), set the `CI_DEBUG_TRACE` variable to `true`:
```yaml
job_name:
@@ -601,7 +601,7 @@ job_name:
CI_DEBUG_TRACE: "true"
```
-Example truncated output with debug trace set to true:
+Example truncated output with `CI_DEBUG_TRACE` set to `true`:
```bash
...
@@ -708,6 +708,8 @@ Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-mach
++ CI_PROJECT_ID=17893
++ export CI_PROJECT_NAME=ci-debug-trace
++ CI_PROJECT_NAME=ci-debug-trace
+++ export 'CI_PROJECT_TITLE="GitLab FOSS'
+++ CI_PROJECT_TITLE='GitLab FOSS'
++ export CI_PROJECT_PATH=gitlab-examples/ci-debug-trace
++ CI_PROJECT_PATH=gitlab-examples/ci-debug-trace
++ export CI_PROJECT_NAMESPACE=gitlab-examples
diff --git a/doc/ci/variables/predefined_variables.md b/doc/ci/variables/predefined_variables.md
index e3ff3385f97..20e70d212b0 100644
--- a/doc/ci/variables/predefined_variables.md
+++ b/doc/ci/variables/predefined_variables.md
@@ -40,13 +40,14 @@ future GitLab releases.**
| `CI_COMMIT_TAG` | 9.0 | 0.5 | The commit tag name. Present only when building tags. |
| `CI_COMMIT_TITLE` | 10.8 | all | The title of the commit - the full first line of the message |
| `CI_CONFIG_PATH` | 9.4 | 0.5 | The path to CI config file. Defaults to `.gitlab-ci.yml` |
-| `CI_DEBUG_TRACE` | all | 1.7 | Whether [debug tracing](README.md#debug-tracing) is enabled |
+| `CI_DEBUG_TRACE` | all | 1.7 | Whether [debug logging (tracing)](README.md#debug-logging) is enabled |
| `CI_DEPLOY_PASSWORD` | 10.8 | all | Authentication password of the [GitLab Deploy Token][gitlab-deploy-token], only present if the Project has one related.|
| `CI_DEPLOY_USER` | 10.8 | all | Authentication username of the [GitLab Deploy Token][gitlab-deploy-token], only present if the Project has one related.|
| `CI_DISPOSABLE_ENVIRONMENT` | all | 10.1 | Marks that the job is executed in a disposable environment (something that is created only for this job and disposed of/destroyed after the execution - all executors except `shell` and `ssh`). If the environment is disposable, it is set to true, otherwise it is not defined at all. |
| `CI_ENVIRONMENT_NAME` | 8.15 | all | The name of the environment for this job. Only present if [`environment:name`](../yaml/README.md#environmentname) is set. |
| `CI_ENVIRONMENT_SLUG` | 8.15 | all | A simplified version of the environment name, suitable for inclusion in DNS, URLs, Kubernetes labels, etc. Only present if [`environment:name`](../yaml/README.md#environmentname) is set. |
| `CI_ENVIRONMENT_URL` | 9.3 | all | The URL of the environment for this job. Only present if [`environment:url`](../yaml/README.md#environmenturl) is set. |
+| `CI_DEFAULT_BRANCH` | 12.4 | all | The name of the default branch for the project. |
| `CI_JOB_ID` | 9.0 | all | The unique id of the current job that GitLab CI uses internally |
| `CI_JOB_MANUAL` | 8.12 | all | The flag to indicate that job was manually started |
| `CI_JOB_NAME` | 9.0 | 0.5 | The name of the job as defined in `.gitlab-ci.yml` |
@@ -60,12 +61,12 @@ future GitLab releases.**
| `CI_MERGE_REQUEST_PROJECT_URL` | 11.6 | all | The URL of the project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md) (e.g. `http://192.168.10.15:3000/namespace/awesome-project`). Available only if `only: [merge_requests]` is used and the merge request is created. |
| `CI_MERGE_REQUEST_REF_PATH` | 11.6 | all | The ref path of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). (e.g. `refs/merge-requests/1/head`). Available only if `only: [merge_requests]` is used and the merge request is created. |
| `CI_MERGE_REQUEST_SOURCE_BRANCH_NAME` | 11.6 | all | The source branch name of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
-| `CI_MERGE_REQUEST_SOURCE_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the source branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
+| `CI_MERGE_REQUEST_SOURCE_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the source branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used, the merge request is created, and the pipeline is a [merged result pipeline](../merge_request_pipelines/pipelines_for_merged_results/index.md). **(PREMIUM)** |
| `CI_MERGE_REQUEST_SOURCE_PROJECT_ID` | 11.6 | all | The ID of the source project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
| `CI_MERGE_REQUEST_SOURCE_PROJECT_PATH` | 11.6 | all | The path of the source project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
| `CI_MERGE_REQUEST_SOURCE_PROJECT_URL` | 11.6 | all | The URL of the source project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
| `CI_MERGE_REQUEST_TARGET_BRANCH_NAME` | 11.6 | all | The target branch name of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
-| `CI_MERGE_REQUEST_TARGET_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the target branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
+| `CI_MERGE_REQUEST_TARGET_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the target branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used, the merge request is created, and the pipeline is a [merged result pipeline](../merge_request_pipelines/pipelines_for_merged_results/index.md). **(PREMIUM)** |
| `CI_MERGE_REQUEST_TITLE` | 11.9 | all | The title of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
| `CI_MERGE_REQUEST_ASSIGNEES` | 11.9 | all | Comma-separated list of username(s) of assignee(s) for the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
| `CI_MERGE_REQUEST_MILESTONE` | 11.9 | all | The milestone title of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. |
@@ -87,7 +88,8 @@ future GitLab releases.**
| `CI_PIPELINE_URL` | 11.1 | 0.5 | Pipeline details URL |
| `CI_PROJECT_DIR` | all | all | The full path where the repository is cloned and where the job is run. If the GitLab Runner `builds_dir` parameter is set, this variable is set relative to the value of `builds_dir`. For more information, see [Advanced configuration](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section) for GitLab Runner. |
| `CI_PROJECT_ID` | all | all | The unique id of the current project that GitLab CI uses internally |
-| `CI_PROJECT_NAME` | 8.10 | 0.5 | The project name that is currently being built (actually it is project folder name) |
+| `CI_PROJECT_NAME` | 8.10 | 0.5 | The name of the directory for the project that is currently being built. For example, if the project URL is `gitlab.example.com/group-name/project-1`, the `CI_PROJECT_NAME` would be `project-1`. |
+| `CI_PROJECT_TITLE` | 12.4 | all | The human-readable project name as displayed in the GitLab web interface. |
| `CI_PROJECT_NAMESPACE` | 8.10 | 0.5 | The project namespace (username or groupname) that is currently being built |
| `CI_PROJECT_PATH` | 8.10 | 0.5 | The namespace with project name |
| `CI_PROJECT_PATH_SLUG` | 9.3 | all | `$CI_PROJECT_PATH` lowercased and with everything except `0-9` and `a-z` replaced with `-`. Use in URLs and domain names. |
@@ -108,7 +110,7 @@ future GitLab releases.**
| `CI_RUNNER_VERSION` | all | 10.6 | GitLab Runner version that is executing the current job |
| `CI_RUNNER_SHORT_TOKEN` | all | 12.3 | First eight characters of GitLab Runner's token used to authenticate new job requests. Used as Runner's unique ID |
| `CI_SERVER` | all | all | Mark that job is executed in CI environment |
-| `CI_SERVER_HOST` | 12.1 | all | Host component of the GitLab instance URL, without protocol and port (like gitlab.example.com) |
+| `CI_SERVER_HOST` | 12.1 | all | Host component of the GitLab instance URL, without protocol and port (like `gitlab.example.com`) |
| `CI_SERVER_NAME` | all | all | The name of CI server that is used to coordinate jobs |
| `CI_SERVER_REVISION` | all | all | GitLab revision that is used to schedule jobs |
| `CI_SERVER_VERSION` | all | all | GitLab version that is used to schedule jobs |
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 5c747688bb1..4569e9ff9b6 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -20,7 +20,7 @@ We have complete examples of configuring pipelines:
- For a quick introduction to GitLab CI, follow our [quick start guide](../quick_start/README.md).
- For a collection of examples, see [GitLab CI/CD Examples](../examples/README.md).
-- To see a large `.gitlab-ci.yml` file used in an enterprise, see the [`.gitlab-ci.yml` file for `gitlab-ce`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/.gitlab-ci.yml).
+- To see a large `.gitlab-ci.yml` file used in an enterprise, see the [`.gitlab-ci.yml` file for `gitlab`](https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab-ci.yml).
NOTE: **Note:**
If you have a [mirrored repository where GitLab pulls from](../../workflow/repository_mirroring.md#pulling-from-a-remote-repository-starter),
@@ -56,7 +56,7 @@ Jobs are picked up by [Runners](../runners/README.md) and executed within the
environment of the Runner. What is important, is that each job is run
independently from each other.
-### Validate the .gitlab-ci.yml
+### Validate the `.gitlab-ci.yml`
Each instance of GitLab CI has an embedded debug tool called Lint, which validates the
content of your `.gitlab-ci.yml` files. You can find the Lint under the page `ci/lint` of your
@@ -107,17 +107,17 @@ The following table lists available parameters for jobs:
| [`environment`](#environment) | Name of an environment to which the job deploys. Also available: `environment:name`, `environment:url`, `environment:on_stop`, and `environment:action`. |
| [`cache`](#cache) | List of files that should be cached between subsequent runs. Also available: `cache:paths`, `cache:key`, `cache:untracked`, and `cache:policy`. |
| [`artifacts`](#artifacts) | List of files and directories to attach to a job on success. Also available: `artifacts:paths`, `artifacts:name`, `artifacts:untracked`, `artifacts:when`, `artifacts:expire_in`, `artifacts:reports`, and `artifacts:reports:junit`.<br><br>In GitLab [Enterprise Edition](https://about.gitlab.com/pricing/), these are available: `artifacts:reports:codequality`, `artifacts:reports:sast`, `artifacts:reports:dependency_scanning`, `artifacts:reports:container_scanning`, `artifacts:reports:dast`, `artifacts:reports:license_management`, `artifacts:reports:performance` and `artifacts:reports:metrics`. |
-| [`dependencies`](#dependencies) | Other jobs that a job depends on so that you can pass artifacts between them. |
+| [`dependencies`](#dependencies) | Restrict which artifacts are passed to a specific job by providing a list of jobs to fetch artifacts from. |
| [`coverage`](#coverage) | Code coverage settings for a given job. |
| [`retry`](#retry) | When and how many times a job can be auto-retried in case of a failure. |
-| [`timeout`](#timeout) | Define a custom timeout that would take precedence over the project-wide one. |
+| [`timeout`](#timeout) | Define a custom job-level timeout that takes precedence over the project-wide setting. |
| [`parallel`](#parallel) | How many instances of a job should be run in parallel. |
| [`trigger`](#trigger-premium) | Defines a downstream pipeline trigger. |
| [`include`](#include) | Allows this job to include external YAML files. Also available: `include:local`, `include:file`, `include:template`, and `include:remote`. |
| [`extends`](#extends) | Configuration entries that this job is going to inherit from. |
| [`pages`](#pages) | Upload the result of a job to use with GitLab Pages. |
| [`variables`](#variables) | Define job variables on a job level. |
-| [interruptible](#interruptible) | Defines if a job can be canceled when made redundant by a newer run |
+| [`interruptible`](#interruptible) | Defines if a job can be canceled when made redundant by a newer run. |
NOTE: **Note:**
Parameters `types` and `type` are [deprecated](#deprecated-parameters).
@@ -187,7 +187,7 @@ Used to specify [a Docker image](../docker/using_docker_images.md#what-is-an-ima
For:
-- Simple definition examples, see [Define `image` and `services` from .gitlab-ci.yml](../docker/using_docker_images.md#define-image-and-services-from-gitlab-ciyml).
+- Simple definition examples, see [Define `image` and `services` from `.gitlab-ci.yml`](../docker/using_docker_images.md#define-image-and-services-from-gitlab-ciyml).
- Detailed usage information, refer to [Docker integration](../docker/README.md) documentation.
#### `image:name`
@@ -208,7 +208,7 @@ Used to specify a [service Docker image](../docker/using_docker_images.md#what-i
For:
-- Simple definition examples, see [Define `image` and `services` from .gitlab-ci.yml](../docker/using_docker_images.md#define-image-and-services-from-gitlab-ciyml).
+- Simple definition examples, see [Define `image` and `services` from `.gitlab-ci.yml`](../docker/using_docker_images.md#define-image-and-services-from-gitlab-ciyml).
- Detailed usage information, refer to [Docker integration](../docker/README.md) documentation.
- For example services, see [GitLab CI Services](../services/README.md).
@@ -242,10 +242,10 @@ For more information, see see [Available settings for `services`](../docker/usin
`before_script` is used to define the command that should be run before all
jobs, including deploy jobs, but after the restoration of [artifacts](#artifacts).
-This can be an array or a multi-line string.
+This must be an an array.
`after_script` is used to define the command that will be run after all
-jobs, including failed ones. This has to be an array or a multi-line string.
+jobs, including failed ones. This must be an an array.
Scripts specified in `before_script` are:
@@ -318,6 +318,17 @@ There are also two edge cases worth mentioning:
`test` and `deploy` are allowed to be used as job's stage by default.
1. If a job doesn't specify a `stage`, the job is assigned the `test` stage.
+#### `.pre` and `.post`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/31441) in GitLab 12.4.
+
+The following stages are available to every pipeline:
+
+- `.pre`, which is guaranteed to always be the first stage in a pipeline.
+- `.post`, which is guaranteed to always be the last stage in a pipeline.
+
+User-defined stages are executed after `.pre` and before `.post`.
+
### `stage`
`stage` is defined per-job and relies on [`stages`](#stages) which is defined
@@ -330,6 +341,10 @@ stages:
- test
- deploy
+job 0:
+ stage: .pre
+ script: make something useful before build stage
+
job 1:
stage: build
script: make build dependencies
@@ -345,6 +360,10 @@ job 3:
job 4:
stage: deploy
script: make deploy
+
+job 5:
+ stage: .post
+ script: make something useful at the end of pipeline
```
#### Using your own Runners
@@ -379,8 +398,8 @@ In addition, `only` and `except` allow the use of special keywords:
| **Value** | **Description** |
| --------- | ---------------- |
-| `branches` | When a git reference of a pipeline is a branch. |
-| `tags` | When a git reference of a pipeline is a tag. |
+| `branches` | When a Git reference of a pipeline is a branch. |
+| `tags` | When a Git reference of a pipeline is a tag. |
| `api` | When pipeline has been triggered by a second pipelines API (not triggers API). |
| `external` | When using CI services other than GitLab. |
| `pipelines` | For multi-project triggers, created using the API with `CI_JOB_TOKEN`. |
@@ -436,13 +455,13 @@ repository and not forks:
```yaml
job:
only:
- - branches@gitlab-org/gitlab-ce
+ - branches@gitlab-org/gitlab
except:
- - master@gitlab-org/gitlab-ce
- - /^release/.*$/@gitlab-org/gitlab-ce
+ - master@gitlab-org/gitlab
+ - /^release/.*$/@gitlab-org/gitlab
```
-The above example will run `job` for all branches on `gitlab-org/gitlab-ce`,
+The above example will run `job` for all branches on `gitlab-org/gitlab`,
except `master` and those with names prefixed with `release/`.
If a job does not have an `only` rule, `only: ['branches', 'tags']` is set by
@@ -530,15 +549,15 @@ single conjoined expression. That is:
With `only`, individual keys are logically joined by an AND:
-> (any of refs) AND (any of variables) AND (any of changes) AND (if kubernetes is active)
+> (any of refs) AND (any of variables) AND (any of changes) AND (if Kubernetes is active)
`except` is implemented as a negation of this complete expression:
-> NOT((any of refs) AND (any of variables) AND (any of changes) AND (if kubernetes is active))
+> NOT((any of refs) AND (any of variables) AND (any of changes) AND (if Kubernetes is active))
This, more intuitively, means the keys join by an OR. A functionally equivalent expression:
-> (any of refs) OR (any of variables) OR (any of changes) OR (if kubernetes is active)
+> (any of refs) OR (any of variables) OR (any of changes) OR (if Kubernetes is active)
#### `only:refs`/`except:refs`
@@ -612,7 +631,7 @@ Learn more about [variables expressions](../variables/README.md#environment-vari
> `changes` policy [introduced][ce-19232] in GitLab 11.4.
Using the `changes` keyword with `only` or `except` makes it possible to define if
-a job should be created based on files modified by a git push event.
+a job should be created based on files modified by a Git push event.
For example:
@@ -627,8 +646,8 @@ docker build:
- more_scripts/*.{rb,py,sh}
```
-In the scenario above, when pushing multiple commits to GitLab to an existing
-branch, GitLab creates and triggers the `docker build` job, provided that one of the
+In the scenario above, when pushing commits to an existing branch in GitLab,
+it creates and triggers the `docker build` job, provided that one of the
commits contains changes to any of the following:
- The `Dockerfile` file.
@@ -636,7 +655,13 @@ commits contains changes to any of the following:
- Any of the files and subdirectories inside the `dockerfiles` directory.
- Any of the files with `rb`, `py`, `sh` extensions inside the `more_scripts` directory.
-You can also use glob patterns to match multiple files in either the root directory of the repo, or in _any_ directory within the repo. For example:
+CAUTION: **Warning:**
+If using `only:changes` with [only allow merge requests to be merged if the pipeline succeeds](../../user/project/merge_requests/merge_when_pipeline_succeeds.md#only-allow-merge-requests-to-be-merged-if-the-pipeline-succeeds),
+undesired behavior could result if you do not [also use `only:merge_requests`](#using-onlychanges-with-pipelines-for-merge-requests).
+
+You can also use glob patterns to match multiple files in either the root directory
+of the repo, or in _any_ directory within the repo, but they must be wrapped
+in double quotes or GitLab will fail to parse the `.gitlab-ci.yml`. For example:
```yaml
test:
@@ -647,10 +672,8 @@ test:
- "**/*.sql"
```
-NOTE: **Note:**
-In the example above, the expressions are wrapped double quotes because they are glob patterns. GitLab will fail to parse `.gitlab-ci.yml` files with unwrapped glob patterns.
-
-The following example will skip the CI job if a change is detected in any file in the root directory of the repo with a `.md` extension:
+The following example will skip the `build` job if a change is detected in any file
+in the root directory of the repo with a `.md` extension:
```yaml
build:
@@ -661,22 +684,20 @@ build:
```
CAUTION: **Warning:**
-There are some caveats when using this feature with new branches and tags. See
-the section below.
-
-##### Using `changes` with new branches and tags
+There are some points to be aware of when
+[using this feature with new branches or tags *without* pipelines for merge requests](#using-onlychanges-without-pipelines-for-merge-requests).
-When pushing a **new** branch or a **new** tag to GitLab, the policy always
-evaluates to true and GitLab will create a job. This feature is not connected
-with merge requests yet and, because GitLab is creating pipelines before a user
-can create a merge request, it is unknown what the target branch is at this point.
-
-##### Using `changes` with `merge_requests`
+##### Using `only:changes` with pipelines for merge requests
With [pipelines for merge requests](../merge_request_pipelines/index.md),
it is possible to define a job to be created based on files modified
in a merge request.
+In order to deduce the correct base SHA of the source branch, we recommend combining
+this keyword with `only: merge_requests`. This way, file differences are correctly
+calculated from any further commits, thus all changes in the merge requests are properly
+tested in pipelines.
+
For example:
```yaml
@@ -694,6 +715,42 @@ In the scenario above, if a merge request is created or updated that changes
either files in `service-one` directory or the `Dockerfile`, GitLab creates
and triggers the `docker build service one` job.
+Note that if [pipelines for merge requests](../merge_request_pipelines/index.md) is
+combined with `only: change`, but `only: merge_requests` is omitted, there could be
+unwanted behavior.
+
+For example:
+
+```yaml
+docker build service one:
+ script: docker build -t my-service-one-image:$CI_COMMIT_REF_SLUG .
+ only:
+ changes:
+ - Dockerfile
+ - service-one/**/*
+```
+
+In the example above, a pipeline could fail due to changes to a file in `service-one/**/*`.
+A later commit could then be pushed that does not include any changes to this file,
+but includes changes to the `Dockerfile`, and this pipeline could pass because it is only
+testing the changes to the `Dockerfile`. GitLab checks the **most recent pipeline**,
+that **passed**, and will show the merge request as mergable, despite the earlier
+failed pipeline caused by a change that was not yet corrected.
+
+With this configuration, care must be taken to check that the most recent pipeline
+properly corrected any failures from previous pipelines.
+
+##### Using `only:changes` without pipelines for merge requests
+
+Without [pipelines for merge requests](../merge_request_pipelines/index.md), pipelines
+run on branches or tags that don't have an explicit association with a merge request.
+In this case, a previous SHA is used to calculate the diff, which equivalent to `git diff HEAD~`.
+This could result in some unexpected behavior, including:
+
+- When pushing a new branch or a new tag to GitLab, the policy always evaluates to true.
+- When pushing a new commit, the changed files are calculated using the previous commit
+ as the base SHA.
+
### `rules`
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/29011) in GitLab 12.3.
@@ -707,6 +764,7 @@ Available rule clauses include:
(similar to [`only:variables`](#onlyvariablesexceptvariables)).
- [`changes`](#ruleschanges)
(same as [`only:changes`](#onlychangesexceptchanges)).
+- [`exists`](#rulesexists)
For example, using `if`. This configuration specifies that `job` should be built
and run for every pipeline on merge requests targeting `master`, regardless of
@@ -716,7 +774,7 @@ the status of other builds:
job:
script: "echo Hello, Rules!"
rules:
- - if: '$CI_MERGE_REQUEST_TARGET_BRANCH == "master"'
+ - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
when: always
- if: '$VAR =~ /pattern/'
when: manual
@@ -742,11 +800,11 @@ evaluated should be conjoined into a single expression using `&&` or `||`. For e
job:
script: "echo Hello, Rules!"
rules:
- - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH =~ /^feature/ && $CI_MERGE_REQUEST_TARGET_BRANCH == "master"' # This rule will be evaluated
+ - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"' # This rule will be evaluated
when: always
- - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH =~ /^feature/' # This rule will only be evaluated if the target branch is not "master"
+ - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/' # This rule will only be evaluated if the target branch is not "master"
when: manual
- - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH' # If neither of the first two match but the simple presence does, we set to "on_success" by default
+ - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME' # If neither of the first two match but the simple presence does, we set to "on_success" by default
```
If none of the provided rules match, the job will be set to `when:never`, and
@@ -779,9 +837,44 @@ In this example, a job either set to:
- Run manually if `Dockerfile` has changed OR `$VAR == "string value"`.
- `when:on_success` by the last rule, where no earlier clauses evaluate to true.
+#### `rules:exists`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/16574) in GitLab 12.4.
+
+`exists` accepts an array of paths and will match if any of these paths exist
+as files in the repository.
+
+For example:
+
+```yaml
+job:
+ script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
+ rules:
+ - exists:
+ - Dockerfile
+```
+
+You can also use glob patterns to match multiple files in any directory within
+the repository.
+
+For example:
+
+```yaml
+job:
+ script: bundle exec rspec
+ rules:
+ - exists:
+ - spec/**.rb
+```
+
+NOTE: **Note:**
+For performance reasons, using `exists` with patterns is limited to 10000
+checks. After the 10000th check, rules with patterned globs will always match.
+
#### Complex rule clauses
-To conjoin `if` and `changes` clauses with an AND, use them in the same rule.
+To conjoin `if`, `changes`, and `exists` clauses with an AND, use them in the
+same rule.
In the following example:
@@ -805,6 +898,7 @@ The only clauses currently available are:
- `if`
- `changes`
+- `exists`
Keywords such as `branches` or `refs` that are currently available for
`only`/`except` are not yet available in `rules` as they are being individually
@@ -837,7 +931,7 @@ docker build:
Additional job configuration may be added to rules in the future. If something
useful isn't available, please
-[open an issue](https://www.gitlab.com/gitlab-org/gitlab-foss/issues).
+[open an issue](https://www.gitlab.com/gitlab-org/gitlab/issues).
### `tags`
@@ -1011,7 +1105,52 @@ Manual actions are considered to be write actions, so permissions for
[protected branches](../../user/project/protected_branches.md) are used when
a user wants to trigger an action. In other words, in order to trigger a manual
action assigned to a branch that the pipeline is running for, the user needs to
-have the ability to merge to this branch.
+have the ability to merge to this branch. It is possible to use protected environments
+to more strictly [protect manual deployments](#protecting-manual-jobs-premium) from being
+run by unauthorized users.
+
+NOTE: **Note:**
+Using `when:manual` and `trigger` together results in the error `jobs:#{job-name} when
+should be on_success, on_failure or always`, because `when:manual` prevents triggers
+being used.
+
+##### Protecting manual jobs **(PREMIUM)**
+
+It's possible to use [protected environments](../environments/protected_environments.md)
+to define a precise list of users authorized to run a manual job. By allowing only
+users associated with a protected environment to trigger manual jobs, it is possible
+to implement some special use cases, such as:
+
+- More precisely limiting who can deploy to an environment.
+- Enabling a pipeline to be blocked until an approved user "approves" it.
+
+To do this, you must:
+
+1. Add an `environment` to the job. For example:
+
+ ```yaml
+ deploy_prod:
+ stage: deploy
+ script:
+ - echo "Deploy to production server"
+ environment:
+ name: production
+ url: https://example.com
+ when: manual
+ only:
+ - master
+ ```
+
+1. In the [protected environments settings](../environments/protected_environments.md#protecting-environments),
+ select the environment (`production` in the example above) and add the users, roles or groups
+ that are authorized to trigger the manual job to the **Allowed to Deploy** list. Only those in
+ this list will be able to trigger this manual job, as well as GitLab administrators
+ who are always able to use protected environments.
+
+Additionally, if a manual job is defined as blocking by adding `allow_failure: false`,
+the next stages of the pipeline will not run until the manual job is triggered. This
+can be used as a way to have a defined list of users allowed to "approve" later pipeline
+stages by triggering the blocking manual job.
#### `when:delayed`
@@ -1047,7 +1186,7 @@ You can stop the active timer of a delayed job by clicking the **Unschedule** bu
This job will never be executed in the future unless you execute the job manually.
You can start a delayed job immediately by clicking the **Play** button.
-GitLab runner will pick your job soon and start the job.
+GitLab Runner will pick your job soon and start the job.
### `environment`
@@ -1241,15 +1380,15 @@ Read how caching works and find out some good practices in the
[caching dependencies documentation](../caching/index.md).
`cache` is used to specify a list of files and directories which should be
-cached between jobs. You can only use paths that are within the project
-workspace.
+cached between jobs. You can only use paths that are within the local working
+copy.
If `cache` is defined outside the scope of jobs, it means it is set
globally and all jobs will use that definition.
#### `cache:paths`
-Use the `paths` directive to choose which files or directories will be cached.
+Use the `paths` directive to choose which files or directories will be cached. You can only specify paths within your `$CI_PROJECT_DIR`.
Wildcards can be used that follow the [glob](https://en.wikipedia.org/wiki/Glob_(programming)) patterns and [filepath.Match](https://golang.org/pkg/path/filepath/#Match).
Cache all files in `binaries` that end in `.apk` and the `.config` file:
@@ -1412,10 +1551,10 @@ be available for download in the GitLab UI.
#### `artifacts:paths`
-You can only use paths that are within the project workspace.
+You can only use paths that are within the local working copy.
Wildcards can be used that follow the [glob](https://en.wikipedia.org/wiki/Glob_(programming)) patterns and [filepath.Match](https://golang.org/pkg/path/filepath/#Match).
-To pass artifacts between different jobs, see [dependencies](#dependencies).
+To restrict which jobs a specific job will fetch artifacts from, see [dependencies](#dependencies).
Send all files in `binaries` and `.config`:
@@ -1759,10 +1898,9 @@ be automatically shown in merge requests.
> Introduced in GitLab 8.6 and GitLab Runner v1.1.1.
-This feature should be used in conjunction with [`artifacts`](#artifacts) and
-allows you to define the artifacts to pass between different jobs.
-
-Note that `artifacts` from all previous [stages](#stages) are passed by default.
+By default, all [`artifacts`](#artifacts) from all previous [stages](#stages)
+are passed, but you can use the `dependencies` parameter to define a limited
+list of jobs (or no jobs) to fetch artifacts from.
To use this feature, define `dependencies` in context of the job and pass
a list of all previous jobs from which the artifacts should be downloaded.
@@ -1892,14 +2030,14 @@ This example creates three paths of execution:
- For self-managed instances, the limit is:
- Five by default (`ci_dag_limit_needs` feature flag is enabled).
- 50 if the `ci_dag_limit_needs` feature flag is disabled.
-- It is impossible for now to have `needs: []` (empty needs),
- the job always needs to depend on something, unless this is the job
- in the first stage (see [gitlab-ce#65504](https://gitlab.com/gitlab-org/gitlab-foss/issues/65504)).
+- It is impossible for now to have `needs: []` (empty needs), the job always needs to
+ depend on something, unless this is the job in the first stage. However, support for
+ an empty needs array [is planned](https://gitlab.com/gitlab-org/gitlab/issues/30631).
- If `needs:` refers to a job that is marked as `parallel:`.
the current job will depend on all parallel jobs created.
-- `needs:` is similar to `dependencies:` in that it needs to use jobs from
- prior stages, meaning it is impossible to create circular
- dependencies or depend on jobs in the current stage (see [gitlab-ce#65505](https://gitlab.com/gitlab-org/gitlab-foss/issues/65505)).
+- `needs:` is similar to `dependencies:` in that it needs to use jobs from prior stages,
+ meaning it is impossible to create circular dependencies. Depending on jobs in the
+ current stage is not possible either, but support [is planned](https://gitlab.com/gitlab-org/gitlab/issues/30632).
- Related to the above, stages must be explicitly defined for all jobs
that have the keyword `needs:` or are referred to by one.
@@ -1996,9 +2134,11 @@ Possible values for `when` are:
- `missing_dependency_failure`: Retry if a dependency was missing.
- `runner_unsupported`: Retry if the runner was unsupported.
-### timeout
+### `timeout`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/14887) in GitLab 12.3.
-`timeout` allows you to configure a timeout for a specific job:
+`timeout` allows you to configure a timeout for a specific job. For example:
```yaml
build:
@@ -2010,6 +2150,10 @@ test:
timeout: 3h 30m
```
+The job-level timeout can exceed the
+[project-level timeout](../../user/project/pipelines/settings.md#timeout) but can not
+exceed the Runner-specific timeout.
+
### `parallel`
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/22631) in GitLab 11.5.
@@ -2068,6 +2212,11 @@ created.
Learn more about [multi-project pipelines](../multi_project_pipelines.md#creating-multi-project-pipelines-from-gitlab-ciyml).
+NOTE: **Note:**
+Using a `trigger` with `when:manual` together results in the error `jobs:#{job-name}
+when should be on_success, on_failure or always`, because `when:manual` prevents
+triggers being used.
+
#### Simple `trigger` syntax
The most simple way to configure a downstream trigger to use `trigger` keyword
@@ -2104,19 +2253,19 @@ staging:
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/23464) in GitLab 12.3.
-`interruptible` is used to indicate that a job should be canceled if made redundant by a newer run of the same job. Defaults to `false`.
+`interruptible` is used to indicate that a job should be canceled if made redundant by a newer pipeline run. Defaults to `false`.
This value will only be used if the [automatic cancellation of redundant pipelines feature](../../user/project/pipelines/settings.md#auto-cancel-pending-pipelines)
is enabled.
When enabled, a pipeline on the same branch will be canceled when:
- It is made redundant by a newer pipeline run.
-- Either all jobs are set as interruptible, or any uninterruptible jobs are not yet pending.
+- Either all jobs are set as interruptible, or any uninterruptible jobs have not started.
Pending jobs are always considered interruptible.
TIP: **Tip:**
-Set jobs as uninterruptible that should behave atomically and should never be canceled once started.
+Set jobs as interruptible that can be safely canceled once started (for instance, a build job).
Here is a simple example:
@@ -2124,23 +2273,33 @@ Here is a simple example:
stages:
- stage1
- stage2
+ - stage3
step-1:
stage: stage1
script:
- - echo "Can be canceled"
-
+ - echo "Can be canceled."
+ interruptible: true
+
step-2:
stage: stage2
script:
- - echo "Can not be canceled"
- interruptible: false
+ - echo "Can not be canceled."
+
+step-3:
+ stage: stage3
+ script:
+ - echo "Because step-2 can not be canceled, this step will never be canceled, even though set as interruptible."
+ interruptible: true
```
In the example above, a new pipeline run will cause an existing running pipeline to be:
- Canceled, if only `step-1` is running or pending.
-- Not canceled, once `step-2` becomes pending.
+- Not canceled, once `step-2` starts running.
+
+NOTE: **Note:**
+Once an uninterruptible job is running, the pipeline will never be canceled, regardless of the final job's state.
### `include`
@@ -2243,7 +2402,7 @@ or template includes.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/53445) in GitLab 11.7.
`include:template` can be used to include `.gitlab-ci.yml` templates that are
-[shipped with GitLab](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/lib/gitlab/ci/templates).
+[shipped with GitLab](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates).
For example:
@@ -2284,9 +2443,13 @@ or public project, or template is allowed.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/56836) in GitLab 11.9.
Nested includes allow you to compose a set of includes.
-A total of 50 includes is allowed.
+A total of 100 includes is allowed.
Duplicate includes are considered a configuration error.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/28212) in GitLab 12.4.
+
+A hard limit of 30 seconds was set for resolving all files.
+
#### `include` examples
Here are a few more `include` examples.
@@ -2722,14 +2885,14 @@ unspecified, the default from project settings will be used.
There are three possible values: `clone`, `fetch`, and `none`.
`clone` is the slowest option. It clones the repository from scratch for every
-job, ensuring that the project workspace is always pristine.
+job, ensuring that the local working copy is always pristine.
```yaml
variables:
GIT_STRATEGY: clone
```
-`fetch` is faster as it re-uses the project workspace (falling back to `clone`
+`fetch` is faster as it re-uses the local working copy (falling back to `clone`
if it doesn't exist). `git clean` is used to undo any changes made by the last
job, and `git fetch` is used to retrieve commits made since the last job ran.
@@ -2738,11 +2901,11 @@ variables:
GIT_STRATEGY: fetch
```
-`none` also re-uses the project workspace, but skips all Git operations
+`none` also re-uses the local working copy, but skips all Git operations
(including GitLab Runner's pre-clone script, if present). It is mostly useful
for jobs that operate exclusively on artifacts (e.g., `deploy`). Git repository
data may be present, but it is certain to be out of date, so you should only
-rely on files brought into the project workspace from cache or artifacts.
+rely on files brought into the local working copy from cache or artifacts.
```yaml
variables:
@@ -2829,7 +2992,7 @@ The `GIT_CLEAN_FLAGS` variable is used to control the default behavior of
`git clean` after checking out the sources. You can set it globally or per-job in the
[`variables`](#variables) section.
-`GIT_CLEAN_FLAGS` accepts all possible options of the [git clean](https://git-scm.com/docs/git-clean)
+`GIT_CLEAN_FLAGS` accepts all possible options of the [`git clean`](https://git-scm.com/docs/git-clean)
command.
`git clean` is disabled if `GIT_CHECKOUT: "false"` is specified.
@@ -2944,7 +3107,7 @@ default:
## Custom build directories
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-runner/merge_requests/1267) in Gitlab Runner 11.10
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-runner/merge_requests/1267) in GitLab Runner 11.10
NOTE: **Note:**
This can only be used when `custom_build_dir` is enabled in the [Runner's
@@ -3205,13 +3368,8 @@ all updated Merge Requests will have a pipeline created when using
If your commit message contains `[ci skip]` or `[skip ci]`, using any
capitalization, the commit will be created but the pipeline will be skipped.
-Alternatively, one can pass the `ci.skip` [Git push option][push-option] if
-using Git 2.10 or newer:
-
-```sh
-git push --push-option=ci.skip # using git 2.10+
-git push -o ci.skip # using git 2.18+
-```
+Alternatively, one can pass the `ci.skip` [Git push option](../../user/project/push_options.md#push-options-for-gitlab-cicd)
+if using Git 2.10 or newer.
<!-- ## Troubleshooting
diff --git a/doc/customization/branded_login_page.md b/doc/customization/branded_login_page.md
index afcc2b71284..9667e5e380a 100644
--- a/doc/customization/branded_login_page.md
+++ b/doc/customization/branded_login_page.md
@@ -1,38 +1,5 @@
---
-type: howto
+redirect_to: '../user/admin_area/appearance.md#sign-in--sign-up-pages'
---
-# Changing the logo and description on the login page
-
-You can customize the login page of your GitLab server to show the logo and
-description of your organization.
-
-By default, the page shows the GitLab logo and description:
-
-![default_login_page](branded_login_page/default_login_page.png)
-
-To customize the login page:
-
-1. Navigate to the **Admin** area and go to the **Appearance** page.
-1. Fill in your desired Title and Description. You can also choose an image file
- of the logo for your organization.
-
- ![appearance](branded_login_page/appearance.png)
-
-1. Save your changes.
-
-Your GitLab login page will display the details you provided:
-
-![company_login_page](branded_login_page/custom_sign_in.png)
-
-<!-- ## Troubleshooting
-
-Include any troubleshooting steps that you can foresee. If you know beforehand what issues
-one might have when setting this up, or when something is changed, or on upgrading, it's
-important to describe those, too. Think of things that may go wrong and include them here.
-This is important to minimize requests for support, and to avoid doc comments with
-questions that you know someone might ask.
-
-Each scenario can be a third-level heading, e.g. `### Getting error message X`.
-If you have none to add when creating a doc, leave this section in place
-but commented out to help encourage others to add to it in the future. -->
+This document was moved to [another location](../user/admin_area/appearance.md#sign-in--sign-up-pages).
diff --git a/doc/customization/branded_login_page/appearance.png b/doc/customization/branded_login_page/appearance.png
deleted file mode 100644
index 31ea4559d37..00000000000
--- a/doc/customization/branded_login_page/appearance.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/branded_login_page/custom_sign_in.png b/doc/customization/branded_login_page/custom_sign_in.png
deleted file mode 100644
index 03ea5281ebe..00000000000
--- a/doc/customization/branded_login_page/custom_sign_in.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/branded_login_page/default_login_page.png b/doc/customization/branded_login_page/default_login_page.png
deleted file mode 100644
index 9b1233cef45..00000000000
--- a/doc/customization/branded_login_page/default_login_page.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/branded_page_and_email_header.md b/doc/customization/branded_page_and_email_header.md
index 370c1461d30..64958521f64 100644
--- a/doc/customization/branded_page_and_email_header.md
+++ b/doc/customization/branded_page_and_email_header.md
@@ -1,37 +1,5 @@
---
-type: howto
+redirect_to: '../user/admin_area/appearance.md#navigation-bar'
---
-# Changing the navigation bar and email header logo
-
-You can customize the logo that appears in email headers and in the navigation
-bar on pages that are displayed by your GitLab server.
-
-1. Navigate to the **Admin** area and go to the **Appearance** page, then locate
- the **Navigation bar** section.
-1. For the **Header Logo**, choose an image file of the logo for your
- organization.
-
- ![appearance](branded_page_and_email_header/appearance.png)
-
-1. Save your changes.
-
-Your GitLab navigation bar will display the custom logo:
-
-![custom_brand_header](branded_page_and_email_header/custom_brand_header.png)
-
-The GitLab pipeline emails will also display the custom logo:
-
-![custom_email_header](branded_page_and_email_header/custom_email_header.png)
-
-<!-- ## Troubleshooting
-
-Include any troubleshooting steps that you can foresee. If you know beforehand what issues
-one might have when setting this up, or when something is changed, or on upgrading, it's
-important to describe those, too. Think of things that may go wrong and include them here.
-This is important to minimize requests for support, and to avoid doc comments with
-questions that you know someone might ask.
-
-Each scenario can be a third-level heading, e.g. `### Getting error message X`.
-If you have none to add when creating a doc, leave this section in place
-but commented out to help encourage others to add to it in the future. -->
+This document was moved to [another location](../user/admin_area/appearance.md#navigation-bar).
diff --git a/doc/customization/branded_page_and_email_header/appearance.png b/doc/customization/branded_page_and_email_header/appearance.png
deleted file mode 100644
index 6b79bc47005..00000000000
--- a/doc/customization/branded_page_and_email_header/appearance.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/branded_page_and_email_header/custom_brand_header.png b/doc/customization/branded_page_and_email_header/custom_brand_header.png
deleted file mode 100644
index d779236bbe7..00000000000
--- a/doc/customization/branded_page_and_email_header/custom_brand_header.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/branded_page_and_email_header/custom_email_header.png b/doc/customization/branded_page_and_email_header/custom_email_header.png
deleted file mode 100644
index 729b166364b..00000000000
--- a/doc/customization/branded_page_and_email_header/custom_email_header.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/favicon.md b/doc/customization/favicon.md
index e165a16ffd9..d43ed944e26 100644
--- a/doc/customization/favicon.md
+++ b/doc/customization/favicon.md
@@ -1,37 +1,5 @@
---
-type: howto
+redirect_to: '../user/admin_area/appearance.md#favicon'
---
-# Changing the favicon
-
-> [Introduced][ce-14497] in GitLab 11.0.
-
-[ce-14497]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14497
-
-You can customize the favicon (the icon displayed in your web browser's
-address bar and web page tabs) for your GitLab server.
-
-1. Navigate to the **Admin** area and go to the **Appearance** page, then
- locate the **Favicon** section.
-1. Upload an image file of your favicon.
-
- ![appearance](favicon/appearance.png)
-
-1. Save your changes.
-
-Your new favicon will display in the browser. The main favicon and the CI
-status icons will show the custom icon:
-
-![custom_favicon](favicon/custom_favicon.png)
-
-<!-- ## Troubleshooting
-
-Include any troubleshooting steps that you can foresee. If you know beforehand what issues
-one might have when setting this up, or when something is changed, or on upgrading, it's
-important to describe those, too. Think of things that may go wrong and include them here.
-This is important to minimize requests for support, and to avoid doc comments with
-questions that you know someone might ask.
-
-Each scenario can be a third-level heading, e.g. `### Getting error message X`.
-If you have none to add when creating a doc, leave this section in place
-but commented out to help encourage others to add to it in the future. -->
+This document was moved to [another location](../user/admin_area/appearance.md#favicon).
diff --git a/doc/customization/favicon/appearance.png b/doc/customization/favicon/appearance.png
deleted file mode 100644
index da1002826dd..00000000000
--- a/doc/customization/favicon/appearance.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/favicon/custom_favicon.png b/doc/customization/favicon/custom_favicon.png
deleted file mode 100644
index 20dddfbea33..00000000000
--- a/doc/customization/favicon/custom_favicon.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/help_message.md b/doc/customization/help_message.md
index a4d8f295750..5694ee89c17 100644
--- a/doc/customization/help_message.md
+++ b/doc/customization/help_message.md
@@ -1,36 +1,5 @@
---
-type: howto
+redirect_to: '../user/admin_area/settings/help_page.md'
---
-# Customizing the 'Help' and login page messages
-
-In large organizations, it is useful to have information about who maintains
-the company GitLab server. You can customize and display this information on
-the GitLab login page and on the GitLab server's `/help` page.
-
-1. Navigate to the **Admin** area, then click on **Preferences** and expand
- **Help page**.
-1. Under **Help page text**, fill in the required information about the
- person(s) administering GitLab. This text can also contain any other
- information that you wish to display to users.
-
- ![help message](help_message/help_text.png)
-
-1. Save your changes.
-
-The information you entered will be shown on the GitLab login page and on the
-GitLab `/help` page (e.g., <https://gitlab.com/help>).
-
-![help text on help page](help_message/help_text_on_help_page.png)
-
-<!-- ## Troubleshooting
-
-Include any troubleshooting steps that you can foresee. If you know beforehand what issues
-one might have when setting this up, or when something is changed, or on upgrading, it's
-important to describe those, too. Think of things that may go wrong and include them here.
-This is important to minimize requests for support, and to avoid doc comments with
-questions that you know someone might ask.
-
-Each scenario can be a third-level heading, e.g. `### Getting error message X`.
-If you have none to add when creating a doc, leave this section in place
-but commented out to help encourage others to add to it in the future. -->
+This document was moved to [another location](../user/admin_area/settings/help_page.md).
diff --git a/doc/customization/help_message/help_text.png b/doc/customization/help_message/help_text.png
deleted file mode 100644
index 5fcabcdb757..00000000000
--- a/doc/customization/help_message/help_text.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/help_message/help_text_on_help_page.png b/doc/customization/help_message/help_text_on_help_page.png
deleted file mode 100644
index 288b4b8c1eb..00000000000
--- a/doc/customization/help_message/help_text_on_help_page.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/index.md b/doc/customization/index.md
index f17a2d80e2c..f3e1e3190fd 100644
--- a/doc/customization/index.md
+++ b/doc/customization/index.md
@@ -1,18 +1,5 @@
---
-type: index
-description: Learn how to customize GitLab's appearance for self-managed installations.
+redirect_to: '../user/admin_area/appearance.md'
---
-# Customizing GitLab's appearance **(CORE ONLY)**
-
-For GitLab self-managed instances, you can customize the page logo,
-email headers, favicon, and several other aspects of GitLab's appearance.
-
-The following pages explain how to customize the appearance of your instance:
-
-- [Changing the logo and description on the login page](branded_login_page.md)
-- [Changing the navigation bar and email header logo](branded_page_and_email_header.md)
-- [Changing the favicon](favicon.md)
-- [Customizing the new project page](new_project_page.md)
-- [Customizing the `/help` and login page messages](help_message.md)
-- [Using the Libravatar service with GitLab](libravatar.md)
+This document was moved to [another location](../user/admin_area/appearance.md).
diff --git a/doc/customization/libravatar.md b/doc/customization/libravatar.md
index 577528fb33b..78df24066ea 100644
--- a/doc/customization/libravatar.md
+++ b/doc/customization/libravatar.md
@@ -1,101 +1,5 @@
---
-type: howto
+redirect_to: '../administration/libravatar.md'
---
-# Using the Libravatar service with GitLab
-
-GitLab by default supports the [Gravatar](https://gravatar.com) avatar service.
-
-Libravatar is another service that delivers your avatar (profile picture) to
-other websites. The Libravatar API is
-[heavily based on gravatar](https://wiki.libravatar.org/api/), so you can
-easily switch to the Libravatar avatar service or even a self-hosted Libravatar
-server.
-
-## Configuration
-
-In the [`gitlab.yml` gravatar section](https://gitlab.com/gitlab-org/gitlab-foss/blob/672bd3902d86b78d730cea809fce312ec49d39d7/config/gitlab.yml.example#L122), set
-the configuration options as follows:
-
-### For HTTP
-
-```yml
- gravatar:
- enabled: true
- # gravatar URLs: possible placeholders: %{hash} %{size} %{email} %{username}
- plain_url: "http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
-```
-
-### For HTTPS
-
-```yml
- gravatar:
- enabled: true
- # gravatar URLs: possible placeholders: %{hash} %{size} %{email} %{username}
- ssl_url: "https://seccdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
-```
-
-### Self-hosted Libravatar server
-
-If you are [running your own libravatar service](https://wiki.libravatar.org/running_your_own/),
-the URL will be different in the configuration, but you must provide the same
-placeholders so GitLab can parse the URL correctly.
-
-For example, you host a service on `http://libravatar.example.com` and the
-`plain_url` you need to supply in `gitlab.yml` is
-
-`http://libravatar.example.com/avatar/%{hash}?s=%{size}&d=identicon`
-
-### Omnibus GitLab example
-
-In `/etc/gitlab/gitlab.rb`:
-
-#### For HTTP
-
-```ruby
-gitlab_rails['gravatar_enabled'] = true
-gitlab_rails['gravatar_plain_url'] = "http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
-```
-
-#### For HTTPS
-
-```ruby
-gitlab_rails['gravatar_enabled'] = true
-gitlab_rails['gravatar_ssl_url'] = "https://seccdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon"
-```
-
-Then run `sudo gitlab-ctl reconfigure` for the changes to take effect.
-
-## Default URL for missing images
-
-[Libravatar supports different sets](https://wiki.libravatar.org/api/) of
-missing images for user email addresses that are not found on the Libravatar
-service.
-
-In order to use a set other than `identicon`, replace the `&d=identicon`
-portion of the URL with another supported set.
-For example, you can use the `retro` set, in which case the URL would look like:
-`plain_url: "http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=retro"`
-
-## Usage examples for Microsoft Office 365
-
-If your users are Office 365 users, the `GetPersonaPhoto` service can be used.
-Note that this service requires a login, so this use case is most useful in a
-corporate installation where all users have access to Office 365.
-
-```ruby
-gitlab_rails['gravatar_plain_url'] = 'http://outlook.office365.com/owa/service.svc/s/GetPersonaPhoto?email=%{email}&size=HR120x120'
-gitlab_rails['gravatar_ssl_url'] = 'https://outlook.office365.com/owa/service.svc/s/GetPersonaPhoto?email=%{email}&size=HR120x120'
-```
-
-<!-- ## Troubleshooting
-
-Include any troubleshooting steps that you can foresee. If you know beforehand what issues
-one might have when setting this up, or when something is changed, or on upgrading, it's
-important to describe those, too. Think of things that may go wrong and include them here.
-This is important to minimize requests for support, and to avoid doc comments with
-questions that you know someone might ask.
-
-Each scenario can be a third-level heading, e.g. `### Getting error message X`.
-If you have none to add when creating a doc, leave this section in place
-but commented out to help encourage others to add to it in the future. -->
+This document was moved to [another location](../administration/libravatar.md).
diff --git a/doc/customization/new_project_page.md b/doc/customization/new_project_page.md
index 43b95a76d08..ee09df26cb1 100644
--- a/doc/customization/new_project_page.md
+++ b/doc/customization/new_project_page.md
@@ -1,38 +1,5 @@
---
-type: howto
+redirect_to: '../user/admin_area/appearance.md#new-project-pages'
---
-# Customizing the new project page
-
-You can add a markdown-formatted message to your GitLab new project page.
-
-By default, the new project page shows a sidebar with general information:
-
-![default_new_project_page](new_project_page/default_new_project_page.png)
-
-To customize the information in the sidebar:
-
-1. Navigate to the **Admin** area and go to the **Appearance** page, then
- locate the **New project pages** section.
-1. Fill in your new project project guidelines:
-
- ![appearance_settings](new_project_page/appearance_settings.png)
-
-1. Save the page.
-
-Your new project page will show the customized guidelines in the sidebar, below
-the general information:
-
-![custom_new_project_page](new_project_page/custom_new_project_page.png)
-
-<!-- ## Troubleshooting
-
-Include any troubleshooting steps that you can foresee. If you know beforehand what issues
-one might have when setting this up, or when something is changed, or on upgrading, it's
-important to describe those, too. Think of things that may go wrong and include them here.
-This is important to minimize requests for support, and to avoid doc comments with
-questions that you know someone might ask.
-
-Each scenario can be a third-level heading, e.g. `### Getting error message X`.
-If you have none to add when creating a doc, leave this section in place
-but commented out to help encourage others to add to it in the future. -->
+This document was moved to [another location](../user/admin_area/appearance.md#new-project-pages).
diff --git a/doc/customization/new_project_page/appearance_settings.png b/doc/customization/new_project_page/appearance_settings.png
deleted file mode 100644
index 4fcdd1caa21..00000000000
--- a/doc/customization/new_project_page/appearance_settings.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/new_project_page/custom_new_project_page.png b/doc/customization/new_project_page/custom_new_project_page.png
deleted file mode 100644
index c6f7839e9c3..00000000000
--- a/doc/customization/new_project_page/custom_new_project_page.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/new_project_page/default_new_project_page.png b/doc/customization/new_project_page/default_new_project_page.png
deleted file mode 100644
index f5b209ac5ea..00000000000
--- a/doc/customization/new_project_page/default_new_project_page.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/system_header_and_footer_messages.md b/doc/customization/system_header_and_footer_messages.md
index b3aa48b1e2f..1d17f3bee3f 100644
--- a/doc/customization/system_header_and_footer_messages.md
+++ b/doc/customization/system_header_and_footer_messages.md
@@ -1,23 +1,5 @@
-# Adding a system message to every page
+---
+redirect_to: '../user/admin_area/appearance.md#system-header-and-footer-messages'
+---
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/5023) in [GitLab Premium](https://about.gitlab.com/pricing/) 10.7.
-> [Added](https://gitlab.com/gitlab-org/gitlab-foss/issues/55057) to [GitLab Core](https://about.gitlab.com/pricing/) in 11.9.
-
-Navigate to the **Admin** area and go to the **Appearance** page.
-
-Under **System header and footer** insert your header message and/or footer message.
-Both background and font color of the header and footer are customizable.
-
-You can also apply the header and footer messages to GitLab emails,
-by checking the **Enable header and footer in emails** checkbox.
-Note that color settings will only be applied within the app interface and not to emails
-
-![appearance](system_header_and_footer_messages/appearance.png)
-
-After saving, all GitLab pages will contain the custom system header and/or footer messages:
-
-![custom_header_footer](system_header_and_footer_messages/custom_header_footer.png)
-
-The GitLab sign in page will also show the header and the footer messages:
-
-![sign_up_custom_header_and_footer](system_header_and_footer_messages/sign_up_custom_header_and_footer.png)
+This document was moved to [another location](../user/admin_area/appearance.md#system-header-and-footer-messages).
diff --git a/doc/customization/system_header_and_footer_messages/appearance.png b/doc/customization/system_header_and_footer_messages/appearance.png
deleted file mode 100644
index d5a66bcb9f1..00000000000
--- a/doc/customization/system_header_and_footer_messages/appearance.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/system_header_and_footer_messages/custom_header_footer.png b/doc/customization/system_header_and_footer_messages/custom_header_footer.png
deleted file mode 100644
index 15d19c87dd7..00000000000
--- a/doc/customization/system_header_and_footer_messages/custom_header_footer.png
+++ /dev/null
Binary files differ
diff --git a/doc/customization/system_header_and_footer_messages/sign_up_custom_header_and_footer.png b/doc/customization/system_header_and_footer_messages/sign_up_custom_header_and_footer.png
deleted file mode 100644
index 51349ddf6f4..00000000000
--- a/doc/customization/system_header_and_footer_messages/sign_up_custom_header_and_footer.png
+++ /dev/null
Binary files differ
diff --git a/doc/development/README.md b/doc/development/README.md
index 0d1168c4450..16b073045cc 100644
--- a/doc/development/README.md
+++ b/doc/development/README.md
@@ -19,7 +19,6 @@ description: 'Learn how to contribute to GitLab.'
- [Code review guidelines](code_review.md) for reviewing code and having code reviewed
- [Database review guidelines](database_review.md) for reviewing database-related changes and complex SQL queries
- [Pipelines for the GitLab project](pipelines.md)
-- [Automatic CE->EE merge](automatic_ce_ee_merge.md)
- [Guidelines for implementing Enterprise Edition features](ee_features.md)
- [Security process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer)
- [Requesting access to Chatops on GitLab.com](chatops_on_gitlabcom.md#requesting-access) (for GitLabbers)
@@ -34,6 +33,7 @@ description: 'Learn how to contribute to GitLab.'
## Backend guides
- [GitLab utilities](utilities.md)
+- [Issuable-like Rails models](issuable-like-models.md)
- [Logging](logging.md)
- [API styleguide](api_styleguide.md) Use this styleguide if you are
contributing to the API
@@ -68,6 +68,7 @@ description: 'Learn how to contribute to GitLab.'
- [Git LFS](lfs.md)
- [Developing against interacting components or features](interacting_components.md)
- [File uploads](uploads.md)
+- [Auto DevOps development guide](auto_devops.md)
## Performance guides
@@ -94,9 +95,11 @@ description: 'Learn how to contribute to GitLab.'
- [What requires downtime?](what_requires_downtime.md)
- [SQL guidelines](sql.md) for working with SQL queries
- [Migrations style guide](migration_style_guide.md) for creating safe SQL migrations
+- [Testing Rails migrations](testing_guide/testing_migrations_guide.md) guide
- [Post deployment migrations](post_deployment_migrations.md)
- [Background migrations](background_migrations.md)
- [Swapping tables](swapping_tables.md)
+- [Deleting exiting migrations](deleting_migrations.md)
### Best practices
@@ -116,7 +119,7 @@ description: 'Learn how to contribute to GitLab.'
- [Database helper modules](database_helpers.md)
- [Code comments](code_comments.md)
-## Case studies
+### Case studies
- [Database case study: Filtering by label](filtering_by_label.md)
- [Database case study: Namespaces storage statistics](namespaces_storage_statistics.md)
@@ -148,6 +151,10 @@ description: 'Learn how to contribute to GitLab.'
- [Frontend tracking guide](event_tracking/frontend.md)
- [Backend tracking guide](event_tracking/backend.md)
+## Experiment Guide
+
+- [Introduction](experiment_guide/index.md)
+
## Build guides
- [Building a package for testing purposes](build_test_package.md)
@@ -164,6 +171,10 @@ description: 'Learn how to contribute to GitLab.'
- [Shell scripting standards and style guidelines](shell_scripting_guide/index.md)
+## Other Development guides
+
+- [Defining relations between files using projections](projections.md)
+
## Other GitLab Development Kit (GDK) guides
- [Run full Auto DevOps cycle in a GDK instance](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/auto_devops.md)
diff --git a/doc/development/adding_database_indexes.md b/doc/development/adding_database_indexes.md
index c47ce0f1182..6932858c699 100644
--- a/doc/development/adding_database_indexes.md
+++ b/doc/development/adding_database_indexes.md
@@ -108,7 +108,7 @@ This query outputs a list containing all indexes that are never used and sorts
them by indexes sizes in descending order. This query can be useful to
determine if any previously indexes are useful after all. More information on
the meaning of the various columns can be found at
-<https://www.postgresql.org/docs/current/static/monitoring-stats.html>.
+<https://www.postgresql.org/docs/current/monitoring-stats.html>.
Because the output of this query relies on the actual usage of your database it
may be affected by factors such as (but not limited to):
diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md
index c3165dc2e21..cdd0e9b2a7b 100644
--- a/doc/development/api_graphql_styleguide.md
+++ b/doc/development/api_graphql_styleguide.md
@@ -526,7 +526,7 @@ Using these helpers, we can build specs like this:
let(:mutation) do
graphql_mutation(
:merge_request_set_wip,
- project_path: 'gitlab-org/gitlab-ce',
+ project_path: 'gitlab-org/gitlab-foss',
iid: '1',
wip: true
)
@@ -539,3 +539,8 @@ it 'returns a successful response' do
expect(graphql_mutation_response(:merge_request_set_wip)['errors']).to be_empty
end
```
+
+## Documentation
+
+For information on generating GraphQL documentation, see
+[Rake tasks related to GraphQL](rake_tasks.md#update-graphql-documentation).
diff --git a/doc/development/api_styleguide.md b/doc/development/api_styleguide.md
index e3c8c860062..71963ee0c0a 100644
--- a/doc/development/api_styleguide.md
+++ b/doc/development/api_styleguide.md
@@ -14,7 +14,7 @@ Always use an [Entity] to present the endpoint's payload.
## Methods and parameters description
Every method must be described using the [Grape DSL](https://github.com/ruby-grape/grape#describing-methods)
-(see <https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/api/environments.rb>
+(see <https://gitlab.com/gitlab-org/gitlab/blob/master/lib/api/environments.rb>
for a good example):
- `desc` for the method summary. You should pass it a block for additional
@@ -104,6 +104,11 @@ For instance:
- endpoint = expose_path(api_v4_projects_issues_related_merge_requests_path(id: @project.id, issue_iid: @issue.iid))
```
-[Entity]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/api/entities.rb
+## Internal API
+
+The [internal API](./internal_api.md) is documented for internal use. Please keep it up to date so we know what endpoints
+different components are making use of.
+
+[Entity]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/api/entities.rb
[validation, and coercion of the parameters]: https://github.com/ruby-grape/grape#parameter-validation-and-coercion
[installing GitLab under a relative URL]: https://docs.gitlab.com/ee/install/relative_url.html
diff --git a/doc/development/architecture.md b/doc/development/architecture.md
index 75562f692ad..ccedb96d27d 100644
--- a/doc/development/architecture.md
+++ b/doc/development/architecture.md
@@ -1,7 +1,3 @@
----
-table_display_block: true
----
-
# GitLab Architecture Overview
## Software delivery
@@ -16,7 +12,7 @@ Both EE and CE require some add-on components called GitLab Shell and Gitaly. Th
## Components
-A typical install of GitLab will be on GNU/Linux. It uses Nginx or Apache as a web front end to proxypass the Unicorn web server. By default, communication between Unicorn and the front end is via a Unix domain socket but forwarding requests via TCP is also supported. The web front end accesses `/home/git/gitlab/public` bypassing the Unicorn server to serve static pages, uploads (e.g. avatar images or attachments), and precompiled assets. GitLab serves web pages and a [GitLab API](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/doc/api) using the Unicorn web server. It uses Sidekiq as a job queue which, in turn, uses redis as a non-persistent database backend for job information, meta data, and incoming jobs.
+A typical install of GitLab will be on GNU/Linux. It uses NGINX or Apache as a web front end to proxypass the Unicorn web server. By default, communication between Unicorn and the front end is via a Unix domain socket but forwarding requests via TCP is also supported. The web front end accesses `/home/git/gitlab/public` bypassing the Unicorn server to serve static pages, uploads (e.g. avatar images or attachments), and precompiled assets. GitLab serves web pages and the [GitLab API](../api/README.md) using the Unicorn web server. It uses Sidekiq as a job queue which, in turn, uses Redis as a non-persistent database backend for job information, meta data, and incoming jobs.
We also support deploying GitLab on Kubernetes using our [GitLab Helm chart](https://docs.gitlab.com/charts/).
@@ -24,7 +20,7 @@ The GitLab web app uses PostgreSQL for persistent database information (e.g. use
When serving repositories over HTTP/HTTPS GitLab utilizes the GitLab API to resolve authorization and access as well as serving Git objects.
-The add-on component GitLab Shell serves repositories over SSH. It manages the SSH keys within `/home/git/.ssh/authorized_keys` which should not be manually edited. GitLab Shell accesses the bare repositories through Gitaly to serve Git objects and communicates with redis to submit jobs to Sidekiq for GitLab to process. GitLab Shell queries the GitLab API to determine authorization and access.
+The add-on component GitLab Shell serves repositories over SSH. It manages the SSH keys within `/home/git/.ssh/authorized_keys` which should not be manually edited. GitLab Shell accesses the bare repositories through Gitaly to serve Git objects and communicates with Redis to submit jobs to Sidekiq for GitLab to process. GitLab Shell queries the GitLab API to determine authorization and access.
Gitaly executes Git operations from GitLab Shell and the GitLab web app, and provides an API to the GitLab web app to get attributes from Git (e.g. title, branches, tags, other meta data), and to get blobs (e.g. diffs, commits, files).
@@ -161,7 +157,7 @@ Component statuses are linked to configuration documentation for each component.
| [Elasticsearch](#elasticsearch) | Improved search within GitLab | [⤓][elasticsearch-omnibus] | [⤓][elasticsearch-charts] | [⤓][elasticsearch-charts] | [âŒ](https://gitlab.com/groups/gitlab-org/-/epics/153) | [⤓][elasticsearch-source] | [⤓][elasticsearch-gdk] | EE Only |
| [Sentry integration](#sentry) | Error tracking for deployed apps | [⤓][sentry-integration] | [⤓][sentry-integration] | [⤓][sentry-integration] | [⤓][sentry-integration] | [⤓][sentry-integration] | [⤓][sentry-integration] | CE & EE |
| [Jaeger integration](#jaeger) | Distributed tracing for deployed apps | [⤓][jaeger-integration] | [⤓][jaeger-integration] | [⤓][jaeger-integration] | [⤓][jaeger-integration] | [⤓][jaeger-integration] | [⤓][jaeger-integration] | EE Only |
-| [GitLab Managed Apps](#gitlab-managed-apps) | Deploy [Helm](https://docs.helm.sh/), [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/), [Cert-Manager](https://docs.cert-manager.io/en/latest/), [Prometheus](https://prometheus.io/docs/introduction/overview/), a [Runner](https://docs.gitlab.com/runner/), [JupyterHub](http://jupyter.org/), [Knative](https://cloud.google.com/knative) to a cluster | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | CE & EE |
+| [GitLab Managed Apps](#gitlab-managed-apps) | Deploy [Helm](https://helm.sh/docs/), [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/), [Cert-Manager](https://docs.cert-manager.io/en/latest/), [Prometheus](https://prometheus.io/docs/introduction/overview/), a [Runner](https://docs.gitlab.com/runner/), [JupyterHub](https://jupyter.org), [Knative](https://cloud.google.com/knative/) to a cluster | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | [⤓][managed-k8s-apps] | CE & EE |
### Component details
@@ -228,7 +224,7 @@ Gitaly is a service designed by GitLab to remove our need for NFS for Git storag
- Configuration: [Omnibus][geo-omnibus], [Charts][geo-charts], [GDK][geo-gdk]
- Layer: Core Service (Processor)
-#### Gitlab Exporter
+#### GitLab Exporter
- [Project page](https://gitlab.com/gitlab-org/gitlab-exporter)
- Configuration: [Omnibus][gitlab-exporter-omnibus], [Charts][gitlab-exporter-charts]
@@ -262,7 +258,7 @@ GitLab CI is the open-source continuous integration service included with GitLab
- Configuration: [Omnibus][shell-omnibus], [Charts][shell-charts], [Source][shell-source], [GDK][gitlab-yml]
- Layer: Core Service (Processor)
-[GitLab Shell](https://gitlab.com/gitlab-org/gitlab-shell) is a program designed at GitLab to handle ssh-based `git` sessions, and modifies the list of authorized keys. GitLab Shell is not a Unix shell nor a replacement for Bash or Zsh.
+[GitLab Shell](https://gitlab.com/gitlab-org/gitlab-shell) is a program designed at GitLab to handle SSH-based `git` sessions, and modifies the list of authorized keys. GitLab Shell is not a Unix shell nor a replacement for Bash or Zsh.
#### GitLab Workhorse
@@ -271,7 +267,7 @@ GitLab CI is the open-source continuous integration service included with GitLab
- Layer: Core Service (Processor)
- Process: `gitlab-workhorse`
-[GitLab Workhorse](https://gitlab.com/gitlab-org/gitlab-workhorse) is a program designed at GitLab to help alleviate pressure from Unicorn. You can read more about the [historical reasons for developing](https://about.gitlab.com/2016/04/12/a-brief-history-of-gitlab-workhorse/). It's designed to act as a smart reverse proxy to help speed up GitLab as a whole.
+[GitLab Workhorse](https://gitlab.com/gitlab-org/gitlab-workhorse) is a program designed at GitLab to help alleviate pressure from Unicorn. You can read more about the [historical reasons for developing](https://about.gitlab.com/blog/2016/04/12/a-brief-history-of-gitlab-workhorse/). It's designed to act as a smart reverse proxy to help speed up GitLab as a whole.
#### Grafana
@@ -321,7 +317,7 @@ MinIO is an object storage server released under Apache License v2.0. It is comp
- Layer: Core Service (Processor)
- Process: `nginx`
-Nginx as an ingress port for all HTTP requests and routes them to the appropriate sub-systems within GitLab. We are bundling an unmodified version of the popular open source webserver.
+NGINX has an Ingress port for all HTTP requests and routes them to the appropriate sub-systems within GitLab. We are bundling an unmodified version of the popular open source webserver.
#### Node Exporter
@@ -348,7 +344,7 @@ Lightweight connection pooler for PostgreSQL.
Prometheus exporter for PgBouncer. Exports metrics at 9127/metrics.
-#### Postgresql
+#### PostgreSQL
- [Project page](https://github.com/postgres/postgres/blob/master/README)
- Configuration: [Omnibus][postgres-omnibus], [Charts][postgres-charts], [Source][postgres-source]
@@ -404,7 +400,7 @@ Redis is packaged to provide a place to store:
- Layer: Core Service (Processor)
The registry is what users use to store their own Docker images. The bundled
-registry uses nginx as a load balancer and GitLab as an authentication manager.
+registry uses NGINX as a load balancer and GitLab as an authentication manager.
Whenever a client requests to pull or push an image from the registry, it will
return a `401` response along with a header detailing where to get an
authentication token, in this case the GitLab instance. The client will then
@@ -428,7 +424,7 @@ Sentry fundamentally is a service that helps you monitor and fix crashes in real
- Layer: Core Service (Processor)
- Process: `sidekiq`
-Sidekiq is a Ruby background job processor that pulls jobs from the redis queue and processes them. Background jobs allow GitLab to provide a faster request/response cycle by moving work into the background.
+Sidekiq is a Ruby background job processor that pulls jobs from the Redis queue and processes them. Background jobs allow GitLab to provide a faster request/response cycle by moving work into the background.
#### Unicorn
@@ -474,9 +470,9 @@ It's important to understand the distinction as some processes are used in both
When making a request to an HTTP Endpoint (think `/users/sign_in`) the request will take the following path through the GitLab Service:
-- nginx - Acts as our first line reverse proxy.
+- NGINX - Acts as our first line reverse proxy.
- GitLab Workhorse - This determines if it needs to go to the Rails application or somewhere else to reduce load on Unicorn.
-- unicorn - Since this is a web request, and it needs to access the application it will go to Unicorn.
+- Unicorn - Since this is a web request, and it needs to access the application it will go to Unicorn.
- Postgres/Gitaly/Redis - Depending on the type of request, it may hit these services to store or retrieve data.
### GitLab Git Request Cycle
@@ -512,7 +508,7 @@ ps aux | grep '^git'
```
GitLab has several components to operate. It requires a persistent database
-(PostgreSQL) and redis database, and uses Apache httpd or Nginx to proxypass
+(PostgreSQL) and Redis database, and uses Apache httpd or NGINX to proxypass
Unicorn. All these components should run as different system users to GitLab
(e.g., `postgres`, `redis` and `www-data`, instead of `git`).
@@ -584,7 +580,7 @@ SSH:
- `/var/log/auth.log` auth log (on Ubuntu).
- `/var/log/secure` auth log (on RHEL).
-nginx:
+NGINX:
- `/var/log/nginx/` contains error and access logs.
@@ -614,7 +610,7 @@ GitLab Shell has a configuration file at `/home/git/gitlab-shell/config.yml`.
### Maintenance Tasks
-[GitLab](https://gitlab.com/gitlab-org/gitlab/tree/master) provides rake tasks with which you see version information and run a quick check on your configuration to ensure it is configured properly within the application. See [maintenance rake tasks](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/doc/raketasks/maintenance.md).
+[GitLab](https://gitlab.com/gitlab-org/gitlab/tree/master) provides rake tasks with which you see version information and run a quick check on your configuration to ensure it is configured properly within the application. See [maintenance rake tasks](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/raketasks/maintenance.md).
In a nutshell, do the following:
```
@@ -638,7 +634,7 @@ We've also detailed [our architecture of GitLab.com](https://about.gitlab.com/ha
[unicorn-omnibus]: https://docs.gitlab.com/omnibus/settings/unicorn.html
[unicorn-charts]: https://docs.gitlab.com/charts/charts/gitlab/unicorn/
[unicorn-source]: ../install/installation.md#configure-it
-[gitlab-yml]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/gitlab.yml.example
+[gitlab-yml]: https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example
[sidekiq-omnibus]: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template
[sidekiq-charts]: https://docs.gitlab.com/charts/charts/gitlab/sidekiq/
[gitaly-omnibus]: ../administration/gitaly/index.md
diff --git a/doc/development/auto_devops.md b/doc/development/auto_devops.md
new file mode 100644
index 00000000000..f88bcc9cfb8
--- /dev/null
+++ b/doc/development/auto_devops.md
@@ -0,0 +1,42 @@
+# Auto DevOps development guide
+
+This document provides a development guide for contributors to
+[Auto DevOps](../topics/autodevops/index.md)
+
+## Development
+
+Auto DevOps builds on top of GitLab CI to create an automatic pipeline
+based on your project contents. When Auto DevOps is enabled for a
+project, the user does not need to explicitly include any pipeline configuration
+through a [`.gitlab-ci.yml` file](../ci/yaml/README.md).
+
+In the absence of a `.gitlab-ci.yml` file, the [Auto DevOps CI
+template](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml)
+is used implicitly to configure the pipeline for the project. This
+template is a top-level template that includes other sub-templates,
+which then defines jobs.
+
+Some jobs use images that are built from external projects:
+
+- [Auto Build](../topics/autodevops/index.md#auto-build) uses
+ [configuration](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml)
+ in which the `build` job uses an image that is built using the
+ [`auto-build-image`](https://gitlab.com/gitlab-org/cluster-integration/auto-build-image)
+ project.
+- [Auto Deploy](../topics/autodevops/index.md#auto-deploy) uses
+ [configuration](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml)
+ in which the jobs defined in this template use an image that is built using the
+ [`auto-deploy-image`](https://gitlab.com/gitlab-org/cluster-integration/auto-deploy-image)
+ project. By default, the Helm chart defined in
+ [`auto-deploy-app`](https://gitlab.com/gitlab-org/charts/auto-deploy-app)
+ is used to deploy.
+
+There are extra variables that get passed to the CI jobs when Auto
+DevOps is enabled that are not present in a normal CI job. These can be
+found in
+[`ProjectAutoDevops`](https://gitlab.com/gitlab-org/gitlab/blob/bf69484afa94e091c3e1383945f60dbe4e8681af/app/models/project_auto_devops.rb).
+
+## Development environment
+
+Configuring [GDK for Auto
+DevOps](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/auto_devops.md).
diff --git a/doc/development/automatic_ce_ee_merge.md b/doc/development/automatic_ce_ee_merge.md
deleted file mode 100644
index f7816091b49..00000000000
--- a/doc/development/automatic_ce_ee_merge.md
+++ /dev/null
@@ -1,243 +0,0 @@
-# Automatic CE->EE merge
-
-Commits pushed to CE `master` are automatically merged into EE `master` roughly
-every 5 minutes. Changes are merged using the `recursive=ours` merge strategy in
-the context of EE. This means that any merge conflicts are resolved by taking
-the EE changes and discarding the CE changes. This removes the need for
-resolving conflicts or reverting changes, at the cost of **absolutely
-requiring** EE merge requests to be created whenever a CE merge request causes
-merge conflicts. Failing to do so can result in changes not making their way
-into EE.
-
-## Always create an EE merge request if there are conflicts
-
-In CI there is a job called `ee_compat_check`, which checks if a CE MR causes
-merge conflicts with EE. If this job reports conflicts, you **must** create an
-EE merge request. If you are an external contributor you can ask the reviewer to
-do this for you.
-
-## Always merge EE merge requests before their CE counterparts
-
-**In order to avoid conflicts in the CE->EE merge, you should always merge the
-EE version of your CE merge request first, if present.**
-
-Failing to do so will lead to CE changes being discarded when merging into EE,
-if they cause merge conflicts.
-
-## Avoiding CE->EE merge conflicts beforehand
-
-To avoid the conflicts beforehand, check out the
-[Guidelines for implementing Enterprise Edition features](ee_features.md).
-
-In any case, the CI `ee_compat_check` job will tell you if you need to open an
-EE version of your CE merge request.
-
-### Conflicts detection in CE merge requests
-
-For each commit (except on `master`), the `ee_compat_check` CI job tries to
-detect if the current branch's changes will conflict during the CE->EE merge.
-
-The job reports what files are conflicting and how to set up a merge request
-against EE.
-
-#### How the job works
-
-1. Generates the diff between your branch and current CE `master`
-1. Tries to apply it to current EE `master`
-1. If it applies cleanly, the job succeeds, otherwise...
-1. Detects a branch with the `ee-` prefix or `-ee` suffix in EE
-1. If it exists, generate the diff between this branch and current EE `master`
-1. Tries to apply it to current EE `master`
-1. If it applies cleanly, the job succeeds
-
-In the case where the job fails, it means you should create an `ee-<ce_branch>`
-or `<ce_branch>-ee` branch, push it to EE and open a merge request against EE
-`master`.
-At this point if you retry the failing job in your CE merge request, it should
-now pass.
-
-Notes:
-
-- This task is not a silver-bullet, its current goal is to bring awareness to
- developers that their work needs to be ported to EE.
-- Community contributors shouldn't be required to submit merge requests against
- EE, but reviewers should take actions by either creating such EE merge request
- or asking a GitLab developer to do it **before the merge request is merged**.
-- If you branch is too far behind `master`, the job will fail. In that case you
- should rebase your branch upon latest `master`.
-- Code reviews for merge requests often consist of multiple iterations of
- feedback and fixes. There is no need to update your EE MR after each
- iteration. Instead, create an EE MR as soon as you see the
- `ee_compat_check` job failing. After you receive the final approval
- from a Maintainer (but **before the CE MR is merged**) update the EE MR.
- This helps to identify significant conflicts sooner, but also reduces the
- number of times you have to resolve conflicts.
-- Please remember to
- [always have your EE merge request merged before the CE version](#always-merge-ee-merge-requests-before-their-ce-counterparts).
-- You can use [`git rerere`](https://git-scm.com/docs/git-rerere)
- to avoid resolving the same conflicts multiple times.
-
-### Cherry-picking from CE to EE
-
-For avoiding merge conflicts, we use a method of creating equivalent branches
-for CE and EE. If the `ee-compat-check` job fails, this process is required.
-
-This method only requires that you have cloned both CE and EE into your computer.
-If you don't have them yet, please go ahead and clone them:
-
-- Clone CE repo: `git clone git@gitlab.com:gitlab-org/gitlab-ce.git`
-- Clone EE repo: `git clone git@gitlab.com:gitlab-org/gitlab-ee.git`
-
-And the only additional setup we need is to add CE as remote of EE and vice-versa:
-
-- Open two terminal windows, one in CE, and another one in EE:
- - In EE: `git remote add ce git@gitlab.com:gitlab-org/gitlab-ce.git`
- - In CE: `git remote add ee git@gitlab.com:gitlab-org/gitlab-ee.git`
-
-That's all setup we need, so that we can cherry-pick a commit from CE to EE, and
-from EE to CE.
-
-Now, every time you create an MR for CE and EE:
-
-1. Open two terminal windows, one in CE, and another one in EE
-1. In the CE terminal:
- 1. Create the CE branch, e.g., `branch-example`
- 1. Make your changes and push a commit (commit A)
- 1. Create the CE merge request in GitLab
-1. In the EE terminal:
- 1. Create the EE-equivalent branch ending with `-ee`, e.g.,
- `git checkout -b branch-example-ee`
- 1. Fetch the CE branch: `git fetch ce branch-example`
- 1. Cherry-pick the commit A: `git cherry-pick commit-A-SHA`
- 1. If Git prompts you to fix the conflicts, do a `git status`
- to check which files contain conflicts, fix them, save the files
- 1. Add the changes with `git add .` but **DO NOT commit** them
- 1. Continue cherry-picking: `git cherry-pick --continue`
- 1. Push to EE: `git push origin branch-example-ee`
-1. Create the EE-equivalent MR and link to the CE MR from the
- description `Ports [CE-MR-LINK] to EE`
-1. Once all the jobs are passing in both CE and EE, you've addressed the
- feedback from your own team, and got them approved, the merge requests can be merged.
-1. When both MRs are ready, the EE merge request will be merged first, and the
- CE-equivalent will be merged next.
-
-**Important notes:**
-
-- The commit SHA can be easily found from the GitLab UI. From a merge request,
- open the tab **Commits** and click the copy icon to copy the commit SHA.
-- To cherry-pick a **commit range**, such as (A > B > C > D) use:
-
- ```shell
- git cherry-pick "oldest-commit-SHA^..newest-commit-SHA"
- ```
-
- For example, suppose the commit A is the oldest, and its SHA is `4f5e4018c09ed797fdf446b3752f82e46f5af502`,
- and the commit D is the newest, and its SHA is `80e1c9e56783bd57bd7129828ec20b252ebc0538`.
- The cherry-pick command will be:
-
- ```shell
- git cherry-pick "4f5e4018c09ed797fdf446b3752f82e46f5af502^..80e1c9e56783bd57bd7129828ec20b252ebc0538"
- ```
-
-- To cherry-pick a **merge commit**, use the flag `-m 1`. For example, suppose that the
- merge commit SHA is `138f5e2f20289bb376caffa0303adb0cac859ce1`:
-
- ```shell
- git cherry-pick -m 1 138f5e2f20289bb376caffa0303adb0cac859ce1
- ```
-
-- To cherry-pick multiple commits, such as B and D in a range (A > B > C > D), use:
-
- ```shell
- git cherry-pick commit-B-SHA commit-D-SHA
- ```
-
- For example, suppose commit B SHA = `4f5e4018c09ed797fdf446b3752f82e46f5af502`,
- and the commit D SHA = `80e1c9e56783bd57bd7129828ec20b252ebc0538`.
- The cherry-pick command will be:
-
- ```shell
- git cherry-pick 4f5e4018c09ed797fdf446b3752f82e46f5af502 80e1c9e56783bd57bd7129828ec20b252ebc0538
- ```
-
- This case is particularly useful when you have a merge commit in a sequence of
- commits and you want to cherry-pick all but the merge commit.
-
-- If you push more commits to the CE branch, you can safely repeat the procedure
- to cherry-pick them to the EE-equivalent branch. You can do that as many times as
- necessary, using the same CE and EE branches.
-- If you submitted the merge request to the CE repo and the `ee-compat-check` job passed,
- you are not required to submit the EE-equivalent MR, but it's still recommended. If the
- job failed, you are required to submit the EE MR so that you can fix the conflicts in EE
- before merging your changes into CE.
-
-## How we run the Automatic CE->EE merge at GitLab
-
-At GitLab, we use the [Merge Train](https://gitlab.com/gitlab-org/merge-train)
-project to keep our [GitLab EE](https://gitlab.com/gitlab-org/gitlab)
-repository updated with commits from
-[GitLab CE](https://gitlab.com/gitlab-org/gitlab-foss).
-
-We have a mirror of the [Merge Train](https://gitlab.com/gitlab-org/merge-train)
-project [configured](https://ops.gitlab.net/gitlab-org/merge-train) to run an
-automatic CE->EE merge job every twenty minutes as a scheduled CI job. The
-[configured](https://ops.gitlab.net/gitlab-org/merge-train) Merge Train project
-is only accessible to authorized GitLab staff.
-
-## FAQ
-
-### How does automatic merging work?
-
-The automatic merging is performed using a project called [Merge
-Train](https://gitlab.com/gitlab-org/merge-train/). This project will clone CE
-and EE master, and merge CE master into EE master using `git merge
---strategy=recursive --strategy-option=ours`. This process runs multiple times
-per hour.
-
-For more information on the exact implementation you can refer to the source
-code.
-
-### Why merge automatically?
-
-As we work towards continuous deployments and a single repository for both CE
-and EE, we need to first make sure that all CE changes make their way into EE as
-fast as possible. Past experiences and data have shown that periodic CE to EE
-merge requests do not scale, and often take a very long time to complete. For
-example, [in this
-comment](https://gitlab.com/gitlab-org/release/framework/issues/49#note_114614619)
-we determined that the average time to close an upstream merge request is around
-5 hours, with peaks up to several days. Periodic merge requests are also
-frustrating to work with, because they often include many changes unrelated to
-your own changes.
-
-To resolve these problems, we now merge changes using the `ours` strategy to
-automatically resolve merge conflicts. This removes the need for resolving
-conflicts in a periodic merge request, and allows us to merge changes from CE
-into EE much faster.
-
-### My CE merge request caused conflicts after it was merged. What do I do?
-
-If you notice this, you should set up an EE merge request that resolves these
-conflicts as **soon as possible**. Failing to do so can lead to your changes not
-being available in EE, which may break tests. This in turn would prevent us from
-being able to deploy.
-
-### Won't this setup be risky?
-
-No, not if there is an EE merge request for every CE merge request that causes
-conflicts _and_ that EE merge request is merged first. In the past we may have
-been a bit more relaxed when it comes to enforcing EE merge requests, but to
-enable automatic merging we have to start requiring such merge requests even for
-the smallest conflicts.
-
-### Some files I work with often conflict, how can I best deal with this?
-
-If you find you keep running into merge conflicts, consider refactoring the file
-so that the EE specific changes are not intertwined with CE code. For Ruby code
-you can do this by moving the EE code to a separate module, which can then be
-injected into the appropriate classes or modules. See [Guidelines for
-implementing Enterprise Edition features](ee_features.md) for more information.
-
----
-
-[Return to Development documentation](README.md)
diff --git a/doc/development/background_migrations.md b/doc/development/background_migrations.md
index 364e276b6cc..0a08360b727 100644
--- a/doc/development/background_migrations.md
+++ b/doc/development/background_migrations.md
@@ -290,7 +290,9 @@ It is required to write tests for:
- A cleanup migration.
You can use the `:migration` RSpec tag when testing the migrations.
-See [README][migrations-readme].
+See the
+[Testing Rails migrations](testing_guide/testing_migrations_guide.md#testing-a-non-activerecordmigration-class)
+style guide.
When you do that, keep in mind that `before` and `after` RSpec hooks are going
to migrate you database down and up, which can result in other background
diff --git a/doc/development/build_test_package.md b/doc/development/build_test_package.md
index 21891f70d73..f58ac79b6f4 100644
--- a/doc/development/build_test_package.md
+++ b/doc/development/build_test_package.md
@@ -9,7 +9,7 @@ that will create:
- A deb package for Ubuntu 16.04, available as a build artifact, and
- A docker image, which is pushed to [Omnibus GitLab's container
registry](https://gitlab.com/gitlab-org/omnibus-gitlab/container_registry)
- (images titled `gitlab-ce` and `gitlab-ee` respectively and image tag is the
+ (images titled `gitlab-foss` and `gitlab-ee` respectively and image tag is the
commit which triggered the pipeline).
When you push a commit to either the GitLab CE or GitLab EE project, the
diff --git a/doc/development/changelog.md b/doc/development/changelog.md
index cd09438e7c7..8ded3f393ee 100644
--- a/doc/development/changelog.md
+++ b/doc/development/changelog.md
@@ -33,8 +33,13 @@ the `author` field. GitLab team members **should not**.
## What warrants a changelog entry?
+- Any change that introduces a database migration **must** have a changelog entry.
- Any user-facing change **should** have a changelog entry. Example: "GitLab now
uses system fonts for all text."
+- Performance improvements **should** have a changelog entry.
+- _Any_ contribution from a community member, no matter how small, **may** have
+ a changelog entry regardless of these guidelines if the contributor wants one.
+ Example: "Fixed a typo on the search results page."
- Any docs-only changes **should not** have a changelog entry.
- Any change behind a feature flag **should not** have a changelog entry. The entry should be added [in the merge request removing the feature flags](feature_flags/development.md).
- A fix for a regression introduced and then fixed in the same release (i.e.,
@@ -43,12 +48,6 @@ the `author` field. GitLab team members **should not**.
- Any developer-facing change (e.g., refactoring, technical debt remediation,
test suite changes) **should not** have a changelog entry. Example: "Reduce
database records created during Cycle Analytics model spec."
-- _Any_ contribution from a community member, no matter how small, **may** have
- a changelog entry regardless of these guidelines if the contributor wants one.
- Example: "Fixed a typo on the search results page."
-- Performance improvements **should** have a changelog entry.
-- Any change that introduces a database migration **must** have a
- changelog entry.
## Writing good changelog entries
@@ -80,7 +79,7 @@ changes.
- **Bad:** Strip out `nil`s in the Array of Commit objects returned from
`find_commits_by_message_with_elastic`
-- **Good:** Fix 500 errors caused by elasticsearch results referencing
+- **Good:** Fix 500 errors caused by Elasticsearch results referencing
garbage-collected commits
The first example focuses on _how_ we fixed something, not on _what_ it fixes.
diff --git a/doc/development/chatops_on_gitlabcom.md b/doc/development/chatops_on_gitlabcom.md
index 09d6638924a..8a313a120f1 100644
--- a/doc/development/chatops_on_gitlabcom.md
+++ b/doc/development/chatops_on_gitlabcom.md
@@ -13,8 +13,8 @@ tasks such as:
To request access to Chatops on GitLab.com:
-1. Log into <https://ops.gitlab.net/users/sign_in> using the same username as for GitLab.com.
-1. Ask [anyone in the `chatops` project](https://gitlab.com/gitlab-com/chatops/-/project_members) to add you by running `/chatops run member add <username> gitlab-com/chatops --ops`.
+1. Log into <https://ops.gitlab.net/users/sign_in> **using the same username** as for GitLab.com (you may have to rename it).
+1. Ask [an owner/maintainer in the `chatops` project](https://gitlab.com/gitlab-com/chatops/-/project_members?search=&sort=access_level_desc) to add you by running `/chatops run member add <username> gitlab-com/chatops --ops`.
## See also
diff --git a/doc/development/code_review.md b/doc/development/code_review.md
index f616eb90bda..421b70bd2db 100644
--- a/doc/development/code_review.md
+++ b/doc/development/code_review.md
@@ -18,7 +18,7 @@ recommended to pick someone who knows the domain well. You can read more about t
importance of involving reviewer(s) in the section on the responsibility of the author below.
If you need some guidance (e.g. it's your first merge request), feel free to ask
-one of the [Merge request coaches][team].
+one of the [Merge request coaches](https://about.gitlab.com/company/team/).
If you need assistance with security scans or comments, feel free to include the
Security Team (`@gitlab-com/gl-security`) in the review.
@@ -66,13 +66,13 @@ from teams other than your own.
1. If your merge request includes frontend changes [^1], it must be
**approved by a [frontend maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab-ce_maintainers_frontend)**.
1. If your merge request includes UX changes [^1], it must be
- **approved by a [UX team member][team]**.
+ **approved by a [UX team member](https://about.gitlab.com/company/team/)**.
1. If your merge request includes adding a new JavaScript library [^1], it must be
- **approved by a [frontend lead][team]**.
+ **approved by a [frontend lead](https://about.gitlab.com/company/team/)**.
1. If your merge request includes adding a new UI/UX paradigm [^1], it must be
- **approved by a [UX lead][team]**.
+ **approved by a [UX lead](https://about.gitlab.com/company/team/)**.
1. If your merge request includes a new dependency or a filesystem change, it must be
- **approved by a [Distribution team member][team]**. See how to work with the [Distribution team](https://about.gitlab.com/handbook/engineering/development/enablement/distribution/#how-to-work-with-distribution) for more details.
+ **approved by a [Distribution team member](https://about.gitlab.com/company/team/)**. See how to work with the [Distribution team](https://about.gitlab.com/handbook/engineering/development/enablement/distribution/#how-to-work-with-distribution) for more details.
#### Security requirements
@@ -172,7 +172,7 @@ required approvers.
Maintainers must check before merging if the merge request is introducing new
vulnerabilities, by inspecting the list in the Merge Request [Security
Widget](../user/project/merge_requests/index.md#security-reports-ultimate).
-When in doubt, a [Security Engineer][team] can be involved. The list of detected
+When in doubt, a [Security Engineer](https://about.gitlab.com/company/team/) can be involved. The list of detected
vulnerabilities must be either empty or containing:
- dismissed vulnerabilities in case of false positives
@@ -256,18 +256,12 @@ Since [unblocking others is always a top priority](https://about.gitlab.com/hand
reviewers are expected to review assigned merge requests in a timely manner,
even when this may negatively impact their other tasks and priorities.
Doing so allows everyone involved in the merge request to iterate faster as the
-context is fresh in memory, improves contributors' experiences significantly,
-and gives authors more time to address feedback and iterate on their work before
-the [feature freeze](https://gitlab.com/gitlab-org/gitlab/blob/master/PROCESS.md#feature-freeze-on-the-7th-for-the-release-on-the-22nd).
+context is fresh in memory, improves contributors' experiences significantly.
A turnaround time of two working days is usually acceptable, since engineers
will typically have other things to work on while they're waiting for review,
but don't hesitate to ask the author if it's unclear what time frame would be
-acceptable, how urgent the review is, or how significant the blockage. Authors
-are also encouraged to provide this information up-front to reviewers, but are
-expected to be mindful of the [guidelines on when to ask for review on MRs that
-are intended to go in before the feature freeze](https://gitlab.com/gitlab-org/gitlab/blob/master/PROCESS.md#between-the-1st-and-the-7th),
-and realistic in their expectations if these were not followed.
+acceptable, how urgent the review is, or how significant the blockage.
If you don't think you'll be able to review a merge request within a reasonable
time frame, let the author know as soon as possible and try to help them find
@@ -433,7 +427,6 @@ Largely based on the [thoughtbot code review guide].
[Return to Development documentation](README.md)
[projects]: https://about.gitlab.com/handbook/engineering/projects/
-[team]: https://about.gitlab.com/team/
[build handbook]: https://about.gitlab.com/handbook/build/handbook/build#how-to-work-with-build
[^1]: Please note that specs other than JavaScript specs are considered backend code.
[^2]: We encourage you to seek guidance from a database maintainer if your merge request is potentially introducing expensive queries. It is most efficient to comment on the line of code in question with the SQL queries so they can give their advice.
diff --git a/doc/development/contributing/design.md b/doc/development/contributing/design.md
index 79750878aac..9796e195f86 100644
--- a/doc/development/contributing/design.md
+++ b/doc/development/contributing/design.md
@@ -5,7 +5,7 @@ For guidance on UX implementation at GitLab, please refer to our [Design System]
The UX team uses labels to manage their workflow.
The ~"UX" label on an issue is a signal to the UX team that it will need UX attention.
-To better understand the priority by which UX tackles issues, see the [UX section](https://about.gitlab.com/handbook/engineering/ux) of the handbook.
+To better understand the priority by which UX tackles issues, see the [UX section](https://about.gitlab.com/handbook/engineering/ux/) of the handbook.
Once an issue has been worked on and is ready for development, a UXer removes the ~"UX" label and applies the ~"UX ready" label to that issue.
diff --git a/doc/development/contributing/index.md b/doc/development/contributing/index.md
index 694f8d2cb45..92dd040a2bd 100644
--- a/doc/development/contributing/index.md
+++ b/doc/development/contributing/index.md
@@ -15,7 +15,7 @@ abbreviation.
To get an overview of GitLab community membership including those that would be reviewing or merging your contributions, please visit [the community roles page](community_roles.md).
-If you want to know how the GitLab [core team]
+If you want to know how the GitLab [core team](https://about.gitlab.com/community/core-team/)
operates please see [the GitLab contributing process](https://gitlab.com/gitlab-org/gitlab/blob/master/PROCESS.md).
[GitLab Inc engineers should refer to the engineering workflow document](https://about.gitlab.com/handbook/engineering/workflow/)
@@ -24,7 +24,7 @@ operates please see [the GitLab contributing process](https://gitlab.com/gitlab-
Please report suspected security vulnerabilities in private to
`support@gitlab.com`, also see the
-[disclosure section on the GitLab.com website](https://about.gitlab.com/disclosure/).
+[disclosure section on the GitLab.com website](https://about.gitlab.com/security/disclosure/).
Please do **NOT** create publicly viewable issues for suspected security
vulnerabilities.
@@ -48,7 +48,7 @@ for audiences of all ages.
If a contributor is no longer actively working on a submitted merge request
we can decide that the merge request will be finished by one of our
-[Merge request coaches][team] or close the merge request. We make this decision
+[Merge request coaches](https://about.gitlab.com/company/team/) or close the merge request. We make this decision
based on how important the change is for our product vision. If a merge request
coach is going to finish the merge request we assign the
~"coach will finish" label. When a team member picks up a community contribution,
@@ -59,18 +59,17 @@ within the MR.
## Helping others
Please help other GitLab users when you can.
-The methods people will use to seek help can be found on the [getting help page][getting-help].
+The methods people will use to seek help can be found on the [getting help page](https://about.gitlab.com/get-help/).
Sign up for the mailing list, answer GitLab questions on StackOverflow or
-respond in the IRC channel. You can also sign up on [CodeTriage][codetriage] to help with
-the remaining issues on the GitHub issue tracker.
+respond in the IRC channel.
## I want to contribute
If you want to contribute to GitLab,
[issues with the `Accepting merge requests` label](issue_workflow.md#label-for-community-contributors)
are a great place to start.
-If you have any questions or need help visit [Getting Help](https://about.gitlab.com/getting-help/#discussion) to
+If you have any questions or need help visit [Getting Help](https://about.gitlab.com/get-help/) to
learn how to communicate with GitLab. If you're looking for a Gitter or Slack channel
please consider we favor
[asynchronous communication](https://about.gitlab.com/handbook/communication/#internal-communication) over real time communication. Thanks for your contribution!
@@ -85,7 +84,7 @@ When maintainers are reading through a merge request they may request guidance f
Sometimes style guides will be followed but the code will lack structural integrity, or the maintainer will have reservations about the code’s overall quality. When there is a reservation the maintainer will inform the author and provide some guidance. The author may then choose to update the merge request. Once the merge request has been updated and reassigned to the maintainer, they will review the code again. Once the code has been resubmitted any number of times, the maintainer may choose to close the merge request with a summary of why it will not be merged, as well as some guidance. If the merge request is closed the maintainer will be open to discussion as to how to improve the code so it can be approved in the future.
-GitLab will do its best to review community contributions as quickly as possible. Specially appointed developers review community contributions daily. You may take a look at the [team page](https://about.gitlab.com/team/) for the merge request coach who specializes in the type of code you have written and mention them in the merge request. For example, if you have written some JavaScript in your code then you should mention the frontend merge request coach. If your code has multiple disciplines you may mention multiple merge request coaches.
+GitLab will do its best to review community contributions as quickly as possible. Specially appointed developers review community contributions daily. You may take a look at the [team page](https://about.gitlab.com/company/team/) for the merge request coach who specializes in the type of code you have written and mention them in the merge request. For example, if you have written some JavaScript in your code then you should mention the frontend merge request coach. If your code has multiple disciplines you may mention multiple merge request coaches.
GitLab receives a lot of community contributions, so if your code has not been reviewed within two days (excluding weekend and public holidays) of its initial submission feel free to re-mention the appropriate merge request coach.
@@ -122,8 +121,3 @@ This [documentation](style_guides.md) outlines the current style guidelines.
---
[Return to Development documentation](../README.md)
-
-[core team]: https://about.gitlab.com/core-team/
-[team]: https://about.gitlab.com/company/team/
-[getting-help]: https://about.gitlab.com/getting-help/
-[codetriage]: http://www.codetriage.com/gitlabhq/gitlabhq
diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md
index 810d03e82c5..349bb371835 100644
--- a/doc/development/contributing/issue_workflow.md
+++ b/doc/development/contributing/issue_workflow.md
@@ -22,14 +22,15 @@ once every quarter.
The most important thing is making sure valid issues receive feedback from the
development team. Therefore the priority is mentioning developers that can help
on those issues. Please select someone with relevant experience from the
-[GitLab team](https://about.gitlab.com/team/).
+[GitLab team](https://about.gitlab.com/company/team/).
If there is nobody mentioned with that expertise look in the commit history for
the affected files to find someone.
-We also use [GitLab Triage](https://gitlab.com/gitlab-org/gitlab-triage) to
-automate some triaging policies. This is currently set up as a
-[scheduled pipeline](https://gitlab.com/gitlab-org/quality/triage-ops/pipeline_schedules/10512/edit)
-running on [quality/triage-ops](https://gitlab.com/gitlab-org/quality/triage-ops) project.
+We also use [GitLab Triage](https://gitlab.com/gitlab-org/gitlab-triage) to automate
+some triaging policies. This is currently set up as a scheduled pipeline
+(`https://gitlab.com/gitlab-org/quality/triage-ops/pipeline_schedules/10512/editpipeline_schedules/10512/edit`,
+must have at least developer access to the project) running on [quality/triage-ops](https://gitlab.com/gitlab-org/quality/triage-ops)
+project.
## Labels
@@ -45,8 +46,8 @@ Most issues will have labels for at least one of the following:
- Category: ~"Category:Code Analytics", ~"Category:DevOps Score", ~"Category:Templates", etc.
- Feature: ~wiki, ~ldap, ~api, ~issues, ~"merge requests", etc.
- Department: ~UX, ~Quality
-- Team: ~Documentation, ~Delivery
-- Specialization: ~frontend, ~backend
+- Team: ~"Technical Writing", ~Delivery
+- Specialization: ~frontend, ~backend, ~documentation
- Release Scoping: ~Deliverable, ~Stretch, ~"Next Patch Release"
- Priority: ~P1, ~P2, ~P3, ~P4
- Severity: ~S1, ~S2, ~S3, ~S4
@@ -96,6 +97,7 @@ Following is a non-exhaustive list of facet labels:
- ~security: A security issue could describe a ~bug or a ~feature.
- ~database: A database issue could describe a ~bug or a ~feature.
- ~customer: This relates to an issue that was created by a customer, or that is of interest for a customer.
+- ~"UI text": Issues that add or modify any text within the UI such as user-assistance microcopy, button/menu labels, or error messages.
### Stage labels
@@ -148,10 +150,15 @@ You can find the groups listed in the [Product Stages, Groups, and Categories](h
We use the term group to map down product requirements from our product stages.
As a team needs some way to collect the work their members are planning to be assigned to, we use the `~group::` labels to do so.
-Normally there is a 1:1 relationship between Stage labels and Group labels. In the spirit of "Everyone can contribute",
-any issue can be picked up by any group, depending on current priorities. For example, an issue labeled ~"devops::create" may be picked up by the ~"group::access" group.
+Normally there is a 1:1 relationship between Stage labels and Group labels. In
+the spirit of "Everyone can contribute", any issue can be picked up by any group,
+depending on current priorities. When picking up an issue belonging to a different
+group, it should be relabelled. For example, if an issue labelled ~"devops::create"
+and ~"group::knowledge" is picked up by someone in the Access group of the Plan stage,
+the issue should be relabelled as ~"group::access" while keeping the original
+~"devops::create" unchanged.
-We also use stage and group labels to help quantify our [throughput](https://about.gitlab.com/handbook/engineering/management/throughput).
+We also use stage and group labels to help quantify our [throughput](https://about.gitlab.com/handbook/engineering/management/throughput/).
Please read [Stage and Group labels in Throughtput](https://about.gitlab.com/handbook/engineering/management/throughput/#stage-and-group-labels-in-throughput) for more information on how the labels are used in this context.
### Category labels
@@ -228,7 +235,7 @@ people.
The current team labels are:
- ~Delivery
-- ~Documentation
+- ~"Technical Writing"
#### Naming and color convention
@@ -241,6 +248,7 @@ These labels narrow the [specialization](https://about.gitlab.com/company/team/s
- ~frontend
- ~backend
+- ~documentation
### Release scoping labels
@@ -334,7 +342,7 @@ know how difficult the issue is. Additionally:
- We advertise [`Accepting merge requests` issues with weight < 5](https://gitlab.com/groups/gitlab-org/-/issues?state=opened&label_name[]=Accepting+merge+requests&assignee_id=None&sort=weight)
as suitable for people that have never contributed to GitLab before on the
- [Up For Grabs campaign](http://up-for-grabs.net)
+ [Up For Grabs campaign](https://up-for-grabs.net/#/)
- We encourage people that have never contributed to any open source project to
look for [`Accepting merge requests` issues with a weight of 1](https://gitlab.com/groups/gitlab-org/-/issues?state=opened&label_name[]=Accepting+merge+requests&assignee_id=None&sort=weight&weight=1)
diff --git a/doc/development/contributing/merge_request_workflow.md b/doc/development/contributing/merge_request_workflow.md
index 1931dda7151..86f17f4ecdb 100644
--- a/doc/development/contributing/merge_request_workflow.md
+++ b/doc/development/contributing/merge_request_workflow.md
@@ -89,7 +89,7 @@ request is as follows:
1. Write tests for more complex migrations.
1. Merge requests **must** adhere to the [merge request performance guidelines](../merge_request_performance_guidelines.md).
1. For tests that use Capybara, read
- [how to write reliable, asynchronous integration tests](https://robots.thoughtbot.com/write-reliable-asynchronous-integration-tests-with-capybara).
+ [how to write reliable, asynchronous integration tests](https://thoughtbot.com/blog/write-reliable-asynchronous-integration-tests-with-capybara).
1. If your merge request introduces changes that require additional steps when
installing GitLab from source, add them to `doc/install/installation.md` in
the same merge request.
@@ -101,7 +101,7 @@ request is as follows:
If you would like quick feedback on your merge request feel free to mention someone
from the [core team](https://about.gitlab.com/community/core-team/) or one of the
-[merge request coaches](https://about.gitlab.com/team/). When having your code reviewed
+[merge request coaches](https://about.gitlab.com/company/team/). When having your code reviewed
and when reviewing merge requests, please keep the [code review guidelines](../code_review.md)
in mind. And if your code also makes changes to the database, or does expensive queries,
check the [database review guidelines](../database_review.md).
@@ -140,7 +140,7 @@ When writing commit messages, please follow the guidelines below:
- The merge request must not contain more than 10 commit messages.
If the guidelines are not met, the MR will not pass the
-[Danger checks](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/danger/commit_messages/Dangerfile).
+[Danger checks](https://gitlab.com/gitlab-org/gitlab/blob/master/danger/commit_messages/Dangerfile).
For more information see [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/).
Example commit message template that can be used on your machine that embodies the above (guide for [how to apply template](https://codeinthehole.com/tips/a-useful-template-for-commit-messages/)):
@@ -220,6 +220,8 @@ requirements.
1. Working and clean code that is commented where needed.
1. [Unit, integration, and system tests](../testing_guide/index.md) that all pass
on the CI server.
+1. Regressions and bugs are covered with tests that reduce the risk of the issue happening
+ again.
1. Performance/scalability implications have been considered, addressed, and tested.
1. [Documented](../documentation/index.md) in the `/doc` directory.
1. [Changelog entry added](../changelog.md), if necessary.
@@ -244,5 +246,5 @@ request:
1. [The upgrade guide](../../update/upgrading_from_source.md).
1. The [GitLab Installation Guide](../../install/installation.md#1-packages-and-dependencies).
1. The [GitLab Development Kit](https://gitlab.com/gitlab-org/gitlab-development-kit).
-1. The [CI environment preparation](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/scripts/prepare_build.sh).
+1. The [CI environment preparation](https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/prepare_build.sh).
1. The [Omnibus package creator](https://gitlab.com/gitlab-org/omnibus-gitlab).
diff --git a/doc/development/dangerbot.md b/doc/development/dangerbot.md
index a6650a50878..0b2e2b43512 100644
--- a/doc/development/dangerbot.md
+++ b/doc/development/dangerbot.md
@@ -15,7 +15,7 @@ to the existing rules, then this is the document for you.
## Operation
-On startup, Danger reads a [`Dangerfile`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/Dangerfile)
+On startup, Danger reads a [`Dangerfile`](https://gitlab.com/gitlab-org/gitlab/blob/master/Dangerfile)
from the project root. GitLab's Danger code is decomposed into a set of helpers
and plugins, all within the [`danger/`](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/danger/)
subdirectory, so ours just tells Danger to load it all. Danger will then run
diff --git a/doc/development/database_debugging.md b/doc/development/database_debugging.md
index 6c9fa983c96..9947f9c16c0 100644
--- a/doc/development/database_debugging.md
+++ b/doc/development/database_debugging.md
@@ -3,7 +3,7 @@
This section is to help give some copy-pasta you can use as a reference when you
run into some head-banging database problems.
-An easy first step is to search for your error in Slack or google "GitLab (my error)".
+An easy first step is to search for your error in Slack, or search for `GitLab <my error>` with Google.
---
diff --git a/doc/development/database_review.md b/doc/development/database_review.md
index 57cdc2135aa..39236ab1910 100644
--- a/doc/development/database_review.md
+++ b/doc/development/database_review.md
@@ -78,7 +78,8 @@ and details for a database reviewer:
- Format any queries with a SQL query formatter, for example with [sqlformat.darold.net](http://sqlformat.darold.net).
- Consider providing query plans via a link to [explain.depesz.com](https://explain.depesz.com) or another tool instead of textual form.
- For query changes, it is best to provide the SQL query along with a plan *before* and *after* the change. This helps to spot differences quickly.
-- When providing query plans, make sure to use good parameter values, so that the query executed is a good example and also hits enough data. Usually, the `gitlab-org` namespace (`namespace_id = 9970`) and the `gitlab-org/gitlab-ce` project (`project_id = 13083`) provides enough data to serve as a good example.
+- When providing query plans, make sure to use good parameter values, so that the query executed is a good example and also hits enough data.
+ - Usually, the `gitlab-org` namespace (`namespace_id = 9970`) and the `gitlab-org/gitlab-foss` (`project_id = 13083`) or the `gitlab-org/gitlab` (`project_id = 278964`) projects provide enough data to serve as a good example.
### How to review for database
@@ -94,17 +95,22 @@ and details for a database reviewer:
- Check queries timing (If any): Queries executed in a migration
need to fit comfortably within `15s` - preferably much less than that - on GitLab.com.
- Check [background migrations](background_migrations.md):
- - For data migrations, establish a time estimate for execution
+ - Establish a time estimate for execution on GitLab.com.
- They should only be used when migrating data in larger tables.
- If a single `update` is below than `1s` the query can be placed
directly in a regular migration (inside `db/migrate`).
- Review queries (for example, make sure batch sizes are fine)
- - Establish a time estimate for execution
- Because execution time can be longer than for a regular migration,
it's suggested to treat background migrations as post migrations:
place them in `db/post_migrate` instead of `db/migrate`. Keep in mind
that post migrations are executed post-deployment in production.
- Check [timing guidelines for migrations](#timing-guidelines-for-migrations)
+- Check migrations are reversible and implement a `#down` method
+- Check data migrations:
+ - Establish a time estimate for execution on GitLab.com.
+ - Depending on timing, data migrations can be placed on regular, post-deploy or background migrations.
+ - Data migrations should be reversible too or come with a description of how to reverse, when possible.
+ This applies to all types of migrations (regular, post-deploy, background).
- Query performance
- Check for any obviously complex queries and queries the author specifically
points out for review (if any)
@@ -120,7 +126,7 @@ and details for a database reviewer:
pipeline](https://ops.gitlab.net/gitlab-com/gl-infra/gitlab-restore/postgres-gprd)
in order to establish a proper testing environment.
-### Timing guidelines for migrations
+### Timing guidelines for migrations
In general, migrations for a single deploy shouldn't take longer than
1 hour for GitLab.com. The following guidelines are not hard rules, they were
diff --git a/doc/development/deleting_migrations.md b/doc/development/deleting_migrations.md
new file mode 100644
index 00000000000..438e8c9f5e9
--- /dev/null
+++ b/doc/development/deleting_migrations.md
@@ -0,0 +1,33 @@
+# Delete existing migrations
+
+When removing existing migrations from the GitLab project, you have to take into account
+the possibility of the migration already been included in past releases or in the current release, and thus already executed on GitLab.com and/or in self-hosted instances.
+
+Because of it, it's not possible to delete existing migrations, as that could lead to:
+
+- Schema inconsistency, as changes introduced into the database were not rollbacked properly.
+- Leaving a record on the `schema_versions` table, that points out to migration that no longer exists on the codebase.
+
+Instead of deleting we can opt for disabling the migration.
+
+## Pre-requisites to disable a migration
+
+Migrations can be disabled if:
+
+- They caused a timeout or general issue on GitLab.com.
+- They are obsoleted, e.g. changes are not necessary due to a feature change.
+- Migration is a data migration only, i.e. the migration does not change the database schema.
+
+## How to disable a data migration?
+
+In order to disable a migration, the following steps apply to all types of migrations:
+
+1. Turn the migration into a noop by removing the code inside `#up`, `#down`
+ or `#perform` methods, and adding `#no-op` comment instead.
+1. Add a comment explaining why the code is gone.
+
+Disabling migrations requires explicit approval of Database Maintainer.
+
+## Examples
+
+- [Disable scheduling of productivity analytics](https://gitlab.com/gitlab-org/gitlab/merge_requests/17253)
diff --git a/doc/development/documentation/feature-change-workflow.md b/doc/development/documentation/feature-change-workflow.md
index 4512b0fc987..004d8833e63 100644
--- a/doc/development/documentation/feature-change-workflow.md
+++ b/doc/development/documentation/feature-change-workflow.md
@@ -1,178 +1,5 @@
---
-description: How to add docs for new or enhanced GitLab features.
+redirect_to: 'workflow.md'
---
-# Documentation process for feature changes
-
-At GitLab, developers contribute new or updated documentation along with their code, but product managers and technical writers also have essential roles in the process.
-
-- **Developers**: Author/update documentation in the same MR as their code, and
- merge it by the feature freeze for the assigned milestone. Request technical writer
- assistance if needed. Other developers typically act as reviewers.
-- **Product Managers** (PMs): In the issue for all new and enhanced features,
- confirm the documentation requirements, plus the mentioned feature description
- and use cases, which can be reused in docs. They can bring in a technical
- writer for discussion or collaboration, and can be called upon themselves as a doc reviewer.
-- **Technical Writers**: Review doc requirements in issues, track issues and MRs
- that contain docs changes, help with any questions throughout the authoring/editing process,
- work on special projects related to the documentation, and review all new and updated
- docs content, whether before or after it is merged.
-
-Beyond this process, any member of the GitLab community can also author or request documentation
-improvements that are not associated with a new or changed feature. See the [Documentation improvement workflow](improvement-workflow.md).
-
-## When documentation is required
-
-Documentation must be delivered whenever:
-
-- A new or enhanced feature is shipped that impacts the user/admin experience.
-- There are changes to the UI or API.
-- A process, workflow, or previously documented feature is changed.
-- A feature is deprecated or removed.
-
-For example, a UI restyling that offers no difference in functionality may require
-documentation updates if screenshots are now needed, or need to be updated.
-
-Documentation is not required when a feature is changed on the backend
-only and does not directly affect the way that any user or administrator would
-interact with GitLab.
-
-NOTE: **Note:**
-When revamping documentation, if unrelated to the feature change, this should be submitted
-in its own MR (using the [documentation improvement workflow](improvement-workflow.md))
-so that we can ensure the more time-sensitive doc updates are merged with code by the freeze.
-
-## Documentation requirements in feature issues
-
-Requirements for the documentation of a feature should be included as part of the
-issue for planning that feature, in a Documentation section within the issue description.
-
-This section is provided as part of the Feature Proposal template and should be added
-to the issue if it is not already present.
-
-Anyone can add these details, but the product manager who assigns the issue to a specific release
-milestone will ensure these details are present and finalized by the time of that milestone's kickoff.
-Developers, technical writers, and others may help further refine this plan at any time.
-
-### Details to include
-
-- What concepts and procedures should the docs guide and enable the user to understand or accomplish?
-- To this end, what new page(s) are needed, if any? What pages/subsections need updates? Consider user, admin, and API doc changes and additions.
-- For any guide or instruction set, should it help address a single use case, or be flexible to address a certain range of use cases?
-- Do we need to update a previously recommended workflow? Should we link the new feature from various relevant locations? Consider all ways documentation should be affected.
-- Are there any key terms or task descriptions that should be included so that the docs are found in relevant searches?
-- Include suggested titles of any pages or subsections, if applicable.
-
-## Documenting a new or changed feature
-
-To follow a consistent workflow every month, documentation changes
-involve the Product Managers, the developer who shipped the feature,
-and the technical writer for the DevOps stage. Each role is described below.
-
-The Documentation items in the GitLab CE/EE [Feature Proposal issue template](https://gitlab.com/gitlab-org/gitlab/raw/master/.gitlab/issue_templates/Feature%20proposal.md)
-and default merge request template will assist you with following this process.
-
-### Product Manager role
-
-For issues requiring any new or updated documentation, the Product Manager (PM)
-must:
-
-- Add the `Documentation` label.
-- Confirm or add the [documentation requirements](#documentation-requirements-in-feature-issues).
-- Ensure the issue contains any new or updated feature name, overview/description,
- and use cases, as required per the [documentation structure and template](structure.md), when applicable.
-
-Everyone is encouraged to draft the requirements in the issue, but a product manager will
-do the following:
-
-- When the issue is assigned a release milestone, review and update the Documentation details.
-- By the kickoff, finalize the Documentation details.
-
-### Developer and maintainer roles
-
-#### Authoring
-
-As a developer, if a ~feature issue also contains the ~Documentation label, you must ship the new or updated documentation with the code of the feature. The documentation is an essential part of the product.
-Technical writers are happy to help, as requested and planned on an issue-by-issue basis.
-
-For feature issues requiring documentation, follow the process below unless otherwise agreed with the product manager and technical writer for a given issue:
-
-- Include any new and edited docs in the MR introducing the code.
-- Use the Documentation requirements confirmed by the Product Manager in the
- issue and discuss any further doc plans or ideas as needed.
- - If the new or changed doc requires extensive collaboration or conversation, a separate,
- linked issue can be used for the planning process.
- - We are trying to avoid using a separate MR, so that the docs stay with the code, but the
- Technical Writing team is interested in discussing any potential exceptions that may be suggested.
-- Use the [Documentation guidelines](index.md), as well as other resources linked from there,
- including the Documentation [Structure and template](structure.md) page, [Style Guide](styleguide.md), and [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/).
-- If you need any help to choose the correct place for a doc, discuss a documentation
- idea or outline, or request any other help, ping the Technical Writer for the relevant
- [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages)
- in your issue or MR, or write within `#docs` on the GitLab Slack.
-- If you are working on documentation in a separate MR, ensure that if the code is merged by the 17th, the docs are as well, per the [Engineering Workflow](https://about.gitlab.com/handbook/engineering/workflow/). If the docs are not ready, the PM can approve merging the code if the engineer and tech writer commit to get documentation merged by the 21st. Otherwise the feature is not considered complete, and should not be merged.
-- A policy for documenting feature-flagged
- issues is forthcoming and you are welcome to join the [discussion](https://gitlab.com/gitlab-org/gitlab-foss/issues/56813).
-
-#### Reviews and merging
-
-All reviewers can help ensure accuracy, clarity, completeness, and adherence to the plans in the issue, as well as the [Documentation Guidelines](index.md) and [Style Guide](styleguide.md).
-
-- **Prior to merging**, documentation changes committed by the developer must be reviewed by:
-
- 1. **The code reviewer** for the MR, to confirm accuracy, clarity, and completeness.
- 1. Optionally: Others involved in the work, such as other devs or the PM.
- 1. Optionally: The technical writer for the DevOps stage. If not prior to merging, the technical writer will review after the merge.
- This helps us ensure that the developer has time to merge good content by the freeze, and that it can be further refined by the release, if needed.
- - To decide whether to request this review before the merge, consider the amount of time left before the code freeze, the size of the change,
- and your degree of confidence in having users of an RC use your docs as written.
- - Pre-merge tech writer reviews should be most common when the code is complete well in advance of the freeze and/or for larger documentation changes.
- - You can request a review and if there is not sufficient time to complete it prior to the freeze,
- the maintainer can merge the current doc changes (if complete) and create a follow-up doc review issue.
- - The technical writer can also help decide what docs to merge before the freeze and whether to work on further changes in a follow up MR.
- - **To request a pre-merge technical writer review**, assign the writer listed for the applicable [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages).
- - **To request a post-merge technical writer review**, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-foss/issues/new?issuable_template=Doc%20Review) and link it from the MR that makes the doc change.
- 1. **The maintainer** who is assigned to merge the MR, to verify clarity, completeness, and quality, to the best of their ability.
-
-- Upon merging, if a technical writer review has not been performed and there is not yet a linked issue for a follow-up review, the maintainer should [create an issue using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-foss/issues/new?issuable_template=Doc%20Review), link it from the MR, and
- mention the original MR author in the new issue. Alternatively, the maintainer can ask the MR author to create and link this issue before the MR is merged.
-
-- After merging, documentation changes are reviewed by:
-
- 1. The technical writer -- **if** their review was not performed prior to the merge.
- 1. Optionally: by the PM (for accuracy and to ensure it's consistent with the vision for how the product will be used).
- Any party can raise the item to the PM for review at any point: the dev, the technical writer, or the PM, who can request/plan a review at the outset.
-
-### Technical Writer role
-
-#### Planning
-
-- The technical writer monitors the documentation needs of issues assigned to the current and next milestone
- for their DevOps stage(s), and participates in any needed discussion on docs planning and requirements refinement
- with the dev, PM, and others.
-- The technical writer will review these requirements again upon the kickoff and provide feedback, as needed.
- This is not a blocking review and developers should not wait to work on docs.
-
-#### Collaboration
-
-By default, the developer will work on documentation changes independently, but
-the developer, PM, or technical writer can propose a broader collaboration for
-any given issue.
-
-Additionally, technical writers are available for questions at any time.
-
-#### Review
-
-- Technical writers provide non-blocking reviews of all documentation changes,
- before or after the change is merged. However, if the docs are ready in the MR while
- there's time before the freeze, the technical writer's review can commence early, on request.
-- The technical writer will confirm that the doc is clear, grammatically correct,
- and discoverable, while avoiding redundancy, bad file locations, typos, broken links,
- etc. The technical writer will review the documentation for the following, which
- the developer and code reviewer should have already made a good-faith effort to ensure:
- - Clarity.
- - Adherence to the plans and goals in the issue.
- - Location (make sure the docs are in the correct directories and has the correct name).
- - Syntax, typos, and broken links.
- - Improvements to the content.
- - Accordance with the [Documentation Style Guide](styleguide.md), and [Structure and Template](structure.md) doc.
+This document was moved to [another location](workflow.md).
diff --git a/doc/development/documentation/improvement-workflow.md b/doc/development/documentation/improvement-workflow.md
index 9f3b789712f..004d8833e63 100644
--- a/doc/development/documentation/improvement-workflow.md
+++ b/doc/development/documentation/improvement-workflow.md
@@ -1,63 +1,5 @@
---
-description: How to improve GitLab's documentation.
+redirect_to: 'workflow.md'
---
-# Documentation improvement workflow
-
-Anyone can contribute a merge request or create an issue for GitLab's documentation.
-
-This page covers the process for any contributions to GitLab's docs that are
-not part of feature development. If you are looking for information on updating
-GitLab's docs as is required with the development and release of a new feature
-or feature enhancement, see the [documentation process for feature changes](feature-change-workflow.md).
-
-## Who updates the docs
-
-Anyone can contribute! You can create a merge request with documentation
-when you find errors or other room for improvement in an existing doc, or when you
-have an idea for all-new documentation that would help a GitLab user or administrator
-to accomplish their work with GitLab.
-
-## How to update the docs
-
-1. Click "Edit this Page" at the bottom of any page on docs.gitlab.com, or navigate to
- one of the repositories and doc paths listed on the [GitLab Documentation guidelines](index.md) page.
- Work in a fork if you do not have developer access to the GitLab project.
-1. Follow the described standards and processes listed on that Guidelines page,
- including the linked resources: the [Structure and template](structure.md) page, [Style Guide](styleguide.md), and [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/).
-1. Follow GitLab's [Merge Request Guidelines](../contributing/merge_request_workflow.md#merge-request-guidelines).
-
-If you need any help to choose the correct place for a doc, discuss a documentation
-idea or outline, or request any other help, ping the Technical Writer for the relevant
-[DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages)
-in your issue or MR, or write within `#docs` if you are a member of GitLab's Slack workspace.
-
-## Review and merging
-
-Anyone with master access to the affected GitLab project can merge documentation changes.
-This person must make a good-faith effort to ensure that the content is clear
-(sufficiently easy for the intended audience to navigate and understand) and
-that it meets the [Documentation Guidelines](index.md) and [Style Guide](styleguide.md).
-
-If the author or reviewer has any questions, or would like a techncial writer's review
-before merging, mention the writer who is assigned to the relevant [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages).
-
-The process can involve the following parties/phases, and is replicated in the `Documentation` MR template for GitLab CE and EE, to help with following the process.
-
-**1. Primary Reviewer** - Review by a [code reviewer](https://about.gitlab.com/handbook/engineering/projects/) or other appropriate colleague to confirm accuracy, clarity, and completeness. This can be skipped for minor fixes without substantive content changes.
-
-**2. Technical Writer** - Optional - If not requested for this MR, must be scheduled post-merge. To request a pre-merge review, assign the writer listed for the applicable [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages).
-To request a post-merge review, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-foss/issues/new?issuable_template=Doc%20Review) and link it from the MR that makes the doc change.
-
-**3. Maintainer**
-
-1. Review by assigned maintainer, who can always request/require the above reviews. Maintainer review can occur before or after a technical writer review.
-1. Ensure a release milestone of the format XX.Y is set. If the freeze for that release has begun, add the label `pick into <XX.Y>` unless this change is not required for the release. In that case, simply change the milestone.
-1. If EE and CE MRs exist, merge the EE MR first, then the CE MR.
-1. After merging, if there has not been a technical writer review and an issue for a follow-up review was not already created and linked from the MR, [create the issue using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-foss/issues/new?issuable_template=Doc%20Review) and link it from the MR.
-
-## Other ways to help
-
-If you have ideas for further documentation resources that would be best
-considered/handled by technical writers, devs, and other SMEs, please [create an issue](https://gitlab.com/gitlab-org/gitlab-foss/issues/new?issuable_template=Documentation)
-using the Documentation template.
+This document was moved to [another location](workflow.md).
diff --git a/doc/development/documentation/index.md b/doc/development/documentation/index.md
index 4ad24d08d17..fb0aa5130f8 100644
--- a/doc/development/documentation/index.md
+++ b/doc/development/documentation/index.md
@@ -8,19 +8,16 @@ GitLab's documentation is [intended as the single source of truth (SSOT)](https:
In addition to this page, the following resources can help you craft and contribute documentation:
-- [Style Guide](styleguide.md) - What belongs in the docs, language guidelines, and more.
+- [Style Guide](styleguide.md) - What belongs in the docs, language guidelines, Markdown standards to follow, and more.
- [Structure and template](structure.md) - Learn the typical parts of a doc page and how to write each one.
-- [Workflows](workflow.md) - A landing page for our key workflows:
- - [Documentation process for feature changes](feature-change-workflow.md) - Adding required documentation when developing a GitLab feature.
- - [Documentation improvement workflow](improvement-workflow.md) - New content not associated with a new feature.
-- [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/) - A reference for the markdown implementation used by GitLab's documentation site and about.gitlab.com.
-- [Site architecture](site_architecture/index.md) - How docs.gitlab.com is built.
+- [Documentation process](workflow.md).
+- [Markdown Guide](../../user/markdown.md) - A reference for all Markdown syntax supported by GitLab.
+- [Site architecture](site_architecture/index.md) - How <https://docs.gitlab.com> is built.
## Source files and rendered web locations
-Documentation for GitLab, GitLab Runner, and Omnibus is published to [docs.gitlab.com](https://docs.gitlab.com). Documentation for GitLab is also published within the application at `/help` on the domain of the GitLab instance.
-
-At `/help`, only help for your current edition and version is included. Help for other versions is available at docs.gitlab.com.
+Documentation for GitLab, GitLab Runner, Omnibus GitLab and Charts are published to <https://docs.gitlab.com>. Documentation for GitLab is also published within the application at `/help` on the domain of the GitLab instance.
+At `/help`, only help for your current edition and version is included. Help for other versions is available at <https://docs.gitlab.com/archives/>.
The source of the documentation exists within the codebase of each GitLab application in the following repository locations:
@@ -29,6 +26,7 @@ The source of the documentation exists within the codebase of each GitLab applic
| [GitLab](https://gitlab.com/gitlab-org/gitlab/) | [`/doc`](https://gitlab.com/gitlab-org/gitlab/tree/master/doc) |
| [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/) | [`/docs`](https://gitlab.com/gitlab-org/gitlab-runner/tree/master/docs) |
| [Omnibus GitLab](https://gitlab.com/gitlab-org/omnibus-gitlab/) | [`/doc`](https://gitlab.com/gitlab-org/gitlab/tree/master/doc) |
+| [Charts](https://gitlab.com/gitlab-org/charts/gitlab) | [`/doc`](https://gitlab.com/gitlab-org/charts/gitlab/tree/master/doc) |
Documentation issues and merge requests are part of their respective repositories and all have the label `Documentation`.
@@ -55,8 +53,8 @@ See the [Structure](styleguide.md#structure) section of the [Documentation Style
Changing a document's location requires specific steps to ensure that
users can seamlessly access the new doc page, whether they are accessing content
-on a GitLab instance domain at `/help` or at docs.gitlab.com. Be sure to ping a
-GitLab technical writer if you have any questions during the process (such as
+on a GitLab instance domain at `/help` or at <https://docs.gitlab.com>. Be sure to assign a
+technical writer if you have any questions during the process (such as
whether the move is necessary), and ensure that a technical writer reviews this
change prior to merging.
@@ -132,7 +130,7 @@ land on the doc via `/help`.
If the documentation page being relocated already has Disqus comments,
we need to preserve the Disqus thread.
-Disqus uses an identifier per page, and for docs.gitlab.com, the page identifier
+Disqus uses an identifier per page, and for <https://docs.gitlab.com>, the page identifier
is configured to be the page URL. Therefore, when we change the document location,
we need to preserve the old URL as the same Disqus identifier.
@@ -181,9 +179,9 @@ Every GitLab instance includes the documentation, which is available at `/help`
(`https://gitlab.example.com/help`). For example, <https://gitlab.com/help>.
There are [plans](https://gitlab.com/groups/gitlab-org/-/epics/693) to end this
-practice and instead link out from the GitLab application to docs.gitlab.com URLs.
+practice and instead link out from the GitLab application to <https://docs.gitlab.com> URLs.
-The documentation available online on docs.gitlab.com is continuously
+The documentation available online on <https://docs.gitlab.com> is continuously
deployed every hour from the `master` branch of GitLab, Omnibus, and Runner. Therefore,
once a merge request gets merged, it will be available online on the same day.
However, they will be shipped (and available on `/help`) within the milestone assigned
@@ -195,7 +193,7 @@ available online on 2018-09-15, but, as the feature freeze date has passed, if
the MR does not have a "pick into 11.3" label, the milestone has to be changed
to 11.4 and it will be shipped with all GitLab packages only on 2018-10-22,
with GitLab 11.4. Meaning, it will only be available under `/help` from GitLab
-11.4 onwards, but available on docs.gitlab.com on the same day it was merged.
+11.4 onwards, but available on <https://docs.gitlab.com/> on the same day it was merged.
### Linking to `/help`
@@ -271,7 +269,7 @@ For example, [GitLab.com's `/help`](https://gitlab.com/help).
## Docs site architecture
See the [Docs site architecture](site_architecture/index.md) page to learn
-how we build and deploy the site at [docs.gitlab.com](https://docs.gitlab.com) and
+how we build and deploy the site at <https://docs.gitlab.com> and
to review all the assets and libraries in use.
### Global navigation
@@ -301,18 +299,18 @@ You will need to push a branch to those repositories, it doesn't work for forks.
The `review-docs-deploy*` job will:
-1. Create a new branch in the [gitlab-docs](https://gitlab.com/gitlab-org/gitlab-docs)
- project named after the scheme: `$DOCS_GITLAB_REPO_SUFFIX-$CI_ENVIRONMENT_SLUG`,
- where `DOCS_GITLAB_REPO_SUFFIX` is the suffix for each product, e.g, `ce` for
- CE, etc.
-1. Trigger a cross project pipeline and build the docs site with your changes
-
-After a few minutes, the Review App will be deployed and you will be able to
-preview the changes. The docs URL can be found in two places:
+1. Create a new branch in the [`gitlab-docs`](https://gitlab.com/gitlab-org/gitlab-docs)
+ project named after the scheme: `docs-preview-$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID`,
+ where `DOCS_GITLAB_REPO_SUFFIX` is the suffix for each product, e.g, `ee` for
+ EE, `omnibus` for Omnibus GitLab, etc, and `CI_MERGE_REQUEST_IID` is the ID
+ of the respective merge request.
+1. Trigger a cross project pipeline and build the docs site with your changes.
-- In the merge request widget
-- In the output of the `review-docs-deploy*` job, which also includes the
- triggered pipeline so that you can investigate whether something went wrong
+In case the review app URL returns 404, this means that either the site is not
+yet deployed, or something went wrong with the remote pipeline. Give it a few
+minutes and it should appear online, otherwise you can check the status of the
+remote pipeline from the link in the merge request's job output.
+If the pipeline failed or got stuck, drop a line in the `#docs` chat channel.
TIP: **Tip:**
Someone with no merge rights to the GitLab projects (think of forks from
@@ -345,12 +343,11 @@ If you want to know the in-depth details, here's what's really happening:
1. The job runs the [`scripts/trigger-build-docs`](https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/trigger-build-docs)
script with the `deploy` flag, which in turn:
1. Takes your branch name and applies the following:
- - The slug of the branch name is used to avoid special characters since
- ultimately this will be used by NGINX.
- - The `preview-` prefix is added to avoid conflicts if there's a remote branch
- with the same name that you created in the merge request.
- - The final branch name is truncated to 42 characters to avoid filesystem
- limitations with long branch names (> 63 chars).
+ - The `docs-preview-` prefix is added.
+ - The product slug is used to know the project the review app originated
+ from.
+ - The number of the merge request is added so that you can know by the
+ `gitlab-docs` branch name the merge request it originated from.
1. The remote branch is then created if it doesn't exist (meaning you can
re-run the manual job as many times as you want and this step will be skipped).
1. A new cross-project pipeline is triggered in the docs project.
@@ -371,20 +368,33 @@ The following GitLab features are used among others:
- [Review Apps](../../ci/review_apps/index.md)
- [Artifacts](../../ci/yaml/README.md#artifacts)
- [Specific Runner](../../ci/runners/README.md#locking-a-specific-runner-from-being-enabled-for-other-projects)
+- [Pipelines for merge requests](../../ci/merge_request_pipelines/index.md)
## Testing
-We treat documentation as code, and so use tests to maintain the standards and quality of the docs.
-The current tests are:
-
-1. `docs lint`: Check that all internal (relative) links work correctly and
- that all cURL examples in API docs use the full switches. It's recommended
- to [check locally](#previewing-the-changes-live) before pushing to GitLab by executing the command
- `bundle exec nanoc check internal_links` on your local
- [`gitlab-docs`](https://gitlab.com/gitlab-org/gitlab-docs) directory. In addition,
- `docs-lint` also runs [`markdownlint`](#markdownlint) to ensure the
- markdown is consistent across all documentation.
-1. In a full pipeline, tests for [`/help`](#gitlab-help-tests).
+We treat documentation as code, and so use tests in our CI pipeline to maintain the
+standards and quality of the docs. The current tests, which run in CI jobs when a
+merge request with new or changed docs is submitted, are:
+
+- [`docs lint`](https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab/ci/docs.gitlab-ci.yml#L48):
+ Runs several tests on the content of the docs themselves:
+ - [`lint-doc.sh` script](https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/lint-doc.sh)
+ checks that:
+ - All cURL examples use the long flags (ex: `--header`, not `-H`).
+ - The `CHANGELOG.md` does not contain duplicate versions.
+ - No files in `doc/` are executable.
+ - No new `README.md` was added.
+ - [`markdownlint`](#markdownlint).
+ - Nanoc tests, which you can [run locally](#previewing-the-changes-live) before
+ pushing to GitLab by executing the command `bundle exec nanoc check internal_links`
+ (or `internal_anchors`) on your local [`gitlab-docs`](https://gitlab.com/gitlab-org/gitlab-docs) directory:
+ - [`internal_links`](https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab/ci/docs.gitlab-ci.yml#L67)
+ checks that all internal links (ex: `[link](../index.md)`) are valid.
+ - [`internal_anchors`](https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab/ci/docs.gitlab-ci.yml#L69)
+ checks that all internal anchors (ex: `[link](../index.md#internal_anchor)`)
+ are valid.
+- If any code or the `doc/README.md` file is changed, a full pipeline will run, which
+ runs tests for [`/help`](#gitlab-help-tests).
### Linting
@@ -490,7 +500,10 @@ four repos that are the sources for <https://docs.gitlab.com>:
- <https://gitlab.com/charts/gitlab/blob/master/.markdownlint.json>
By default all rules are enabled, so the configuration file is used to disable unwanted
-rules, and also to configure optional parameters for enabled rules as needed.
+rules, and also to configure optional parameters for enabled rules as needed. You can
+also check [the issue](https://gitlab.com/gitlab-org/gitlab-foss/issues/64352) that
+tracked the changes required to implement these rules, and details which rules were
+on or off when `markdownlint` was enabled on the docs.
## Danger Bot
diff --git a/doc/development/documentation/site_architecture/index.md b/doc/development/documentation/site_architecture/index.md
index bb598906967..f5a12e9c216 100644
--- a/doc/development/documentation/site_architecture/index.md
+++ b/doc/development/documentation/site_architecture/index.md
@@ -18,8 +18,8 @@ from where content is sourced, the `gitlab-docs` project, and the published outp
```mermaid
graph LR
- A[gitlab-ce/doc]
- B[gitlab-ee/doc]
+ A[gitlab-foss/doc]
+ B[gitlab/doc]
C[gitlab-runner/docs]
D[omnibus-gitlab/doc]
E[charts/doc]
@@ -68,7 +68,7 @@ the GitLab Documentation website.
## Global navigation
-Read through the global navigation](global_nav.md) documentation to understand:
+Read through [the global navigation documentation](global_nav.md) to understand:
- How the global navigation is built.
- How to add new navigation items.
diff --git a/doc/development/documentation/structure.md b/doc/development/documentation/structure.md
index 158e69df2a6..21219dc100a 100644
--- a/doc/development/documentation/structure.md
+++ b/doc/development/documentation/structure.md
@@ -32,7 +32,7 @@ For additional details on each, see the [template for new docs](#template-for-ne
below.
Note that you can include additional subsections, as appropriate, such as 'How it Works', 'Architecture',
-and other logicial divisions such as pre- and post-deployment steps.
+and other logical divisions such as pre- and post-deployment steps.
## Template for new docs
diff --git a/doc/development/documentation/styleguide.md b/doc/development/documentation/styleguide.md
index 79797107a5b..b6ec7a858fa 100644
--- a/doc/development/documentation/styleguide.md
+++ b/doc/development/documentation/styleguide.md
@@ -212,15 +212,36 @@ Do not include the same information in multiple places. [Link to a SSOT instead.
- Use inclusive language and avoid jargon, as well as uncommon
words. The docs should be clear and easy to understand.
-- Write in the 3rd person (use "we", "you", "us", "one", instead of "I" or "me").
+- Write in the 3rd person (use "we," "you," "us," "one," instead of "I" or "me").
- Be clear, concise, and stick to the goal of the doc.
-- Write in US English.
+- Write in US English with US grammar.
- Capitalize "G" and "L" in GitLab.
-- Use title case when referring to [features](https://about.gitlab.com/features/) or
- [products](https://about.gitlab.com/pricing/) (e.g., GitLab Runner, Geo,
- Issue Boards, GitLab Core, Git, Prometheus, Kubernetes, etc), and methods or methodologies
- (e.g., Continuous Integration, Continuous Deployment, Scrum, Agile, etc). Note that
- some features are also objects (e.g. "GitLab's Merge Requests support X." and "Create a new merge request for Z.").
+- Use title case when referring to:
+ - [GitLab Features](https://about.gitlab.com/features/). For example, Issue Board,
+ Geo, and Runner.
+ - GitLab [product tiers](https://about.gitlab.com/pricing/). For example, GitLab Core
+ and GitLab Ultimate.
+ - Third-party products. For example, Prometheus, Kubernetes, and Git.
+ - Methods or methodologies. For example, Continuous Integration, Continuous
+ Deployment, Scrum, and Agile.
+
+ NOTE: **Note:**
+ Some features are also objects. For example, "GitLab's Merge Requests support X" and
+ "Create a new merge request for Z."
+
+- Avoid use of the future tense:
+ - Instead of, "After you execute this command, the result will be displayed," say "After you execute this command, the result is displayed."
+ - Only use the future tense to convey when the action or result will actually occur at a future time.
+- Do not use contractions:
+ - Instead of "don't," "can't," "doesn't," and so on, say "do not," "cannot," or "does not."
+ - Possible exceptions are cases when a more familiar tone is desired, such as a blog post or other casual context.
+- Do not use slashes to clump different words together or as a replacement for the word "or":
+ - Instead of "and/or," consider saying "or," or use another sensible construction.
+ - Other examples include "clone/fetch," author/assignee," and "namespace/repository name." Break apart any such instances in an appropriate way.
+ - Exceptions to this rule include commonly accepted technical terms such as CI/CD, TCP/IP, and so on.
+- Do not use "may" and "might" interchangeably:
+ - Use "might" to indicate the probability of something occurring. "If you skip this step, the import process might fail."
+ - Use "may" to indicate giving permission for someone to do something, or consider using "can" instead. "You may select either option on this screen." Or, "you can select either option on this screen."
## Text
@@ -239,27 +260,13 @@ Do not include the same information in multiple places. [Link to a SSOT instead.
- List item 2
```
-### Tables overlapping the TOC
-
-By default, all tables have a width of 100% on docs.gitlab.com.
-In a few cases, the table will overlap the table of contents (ToC).
-For these cases, add an entry to the document's frontmatter to
-render them displaying block. This will make sure the table
-is displayed behind the ToC, scrolling horizontally:
-
-```md
----
-table_display_block: true
----
-```
-
-## Emphasis
+### Emphasis
- Use double asterisks (`**`) to mark a word or text in bold (`**bold**`).
- Use underscore (`_`) for text in italics (`_italic_`).
- Use greater than (`>`) for blockquotes.
-## Punctuation
+### Punctuation
Check the general punctuation rules for the GitLab documentation on the table below.
Check specific punctuation rules for [lists](#lists) below.
@@ -274,6 +281,20 @@ Check specific punctuation rules for [lists](#lists) below.
| Always add a space before and after dashes when using it in a sentence (for replacing a comma, for example). | _You should try this - or not._ |
| Always use lowercase after a colon. | _Related Issues: a way to create a relationship between issues._ |
+### Placeholder text
+
+Often in examples, a writer will provide a command or configuration that is complete apart from
+a value specific to the reader.
+
+In these cases, use [`<` and `>`](https://en.wikipedia.org/wiki/Usage_message#Pattern) to call out
+where a reader must replace text with their own value.
+
+For example:
+
+```sh
+cp <your_source_directory> <your_destination_directory>
+```
+
## Lists
- Always start list items with a capital letter, unless they are parameters or commands
@@ -463,24 +484,58 @@ For other punctuation rules, please refer to the
- Leave exactly one blank line before and after a heading.
- Do not use links in headings.
- Add the corresponding [product badge](#product-badges) according to the tier the feature belongs.
+- Use sentence case in headings. Do not capitalize the words of the title, unless
+ it refers to a product feature. For example, capitalizing "issues" is acceptable in
+ `## What you can do with GitLab Issues`, but not in `## Closing multiple issues`.
## Links
- Use inline link markdown markup `[Text](https://example.com)`.
It's easier to read, review, and maintain. **Do not** use `[Text][identifier]`.
-- To link to internal documentation, use relative links, not full URLs. Use `../` to
- navigate to high-level directories, and always add the file name `file.md` at the
- end of the link with the `.md` extension, not `.html`.
- Example: instead of `[text](../../merge_requests/)`, use
- `[text](../../merge_requests/index.md)` or, `[text](../../ci/README.md)`, or,
- for anchor links, `[text](../../ci/README.md#examples)`.
- Using the markdown extension is necessary for the [`/help`](index.md#gitlab-help)
- section of GitLab.
-- To link from CE to EE-only documentation, use the EE-only doc full URL.
+
- Use [meaningful anchor texts](https://www.futurehosting.com/blog/links-should-have-meaningful-anchor-text-heres-why/).
E.g., instead of writing something like `Read more about GitLab Issue Boards [here](LINK)`,
write `Read more about [GitLab Issue Boards](LINK)`.
+### Links to internal documentation
+
+- To link to internal documentation, use relative links, not full URLs.
+ Use `../` to navigate to high-level directories. Links should not refer to root.
+
+ Don't:
+
+ ```md
+ [Geo Troubleshooting](https://docs.gitlab.com/ee/administration/geo/replication/troubleshooting.html)
+ [Geo Troubleshooting](/ee/administration/geo/replication/troubleshooting.md)
+ ```
+
+ Do:
+
+ ```md
+ [Geo Troubleshooting](../../geo/replication/troubleshooting.md)
+ ```
+
+- Always add the file name `file.md` at the end of the link with the `.md` extension, not `.html`.
+
+ Don't:
+
+ ```md
+ [merge requests](../../merge_requests/)
+ [issues](../../issues/tags.html)
+ [issue tags](../../issues/tags.html#stages)
+ ```
+
+ Do:
+
+ ```md
+ [merge requests](../../merge_requests/index.md)
+ [issues](../../issues/tags.md)
+ [issue tags](../../issues/tags.md#stages)
+ ```
+
+- Using the markdown extension is necessary for the [`/help`](index.md#gitlab-help)
+ section of GitLab.
+
### Links requiring permissions
Don't link directly to:
@@ -535,7 +590,7 @@ To indicate the steps of navigation through the UI:
a valid name for an illustration is `devops_diagram_v11_1.png`.
- Keep all file names in lower case.
- Consider using PNG images instead of JPEG.
-- Compress all images with <https://tinypng.com/> or similar tool.
+- Compress all images with <https://pngquant.org/> or similar tool.
- Compress gifs with <https://ezgif.com/optimize> or similar tool.
- Images should be used (only when necessary) to _illustrate_ the description
of a process, not to _replace_ it.
@@ -557,7 +612,7 @@ Inside the document:
### Remove image shadow
-All images displayed on docs.gitlab.com have a box shadow by default.
+All images displayed on the [GitLab Docs site](https://docs.gitlab.com) have a box shadow by default.
To remove the box shadow, use the image class `.image-noshadow` applied
directly to an HTML `img` tag:
@@ -591,7 +646,7 @@ You can link any up-to-date video that is useful to the GitLab user.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-docs/merge_requests/472) in GitLab 12.1.
-GitLab docs (docs.gitlab.com) support embedded videos.
+The [GitLab Docs site](https://docs.gitlab.com) supports embedded videos.
You can only embed videos from
[GitLab's official YouTube account](https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg).
@@ -627,7 +682,7 @@ leave a blank line here
leave a blank line here
```
-This is how it renders on docs.gitlab.com:
+This is how it renders on the GitLab Docs site:
<div class="video-fallback">
See the video: <a href="https://www.youtube.com/watch?v=enMumwvLAug">What is GitLab</a>.
@@ -686,6 +741,10 @@ use the following markup for highlighting.
_Note that the alert boxes only work for one paragraph only. Multiple paragraphs,
lists, headers, etc will not render correctly. For multiple lines, use blockquotes instead._
+Alert boxes only render on the GitLab Docs site (<https://docs.gitlab.com>).
+Within GitLab itself, they will appear as plain markdown text (like the examples
+above the rendered versions, below).
+
### Note
Notes catch the eye of most readers, and therefore should be used very sparingly.
@@ -710,7 +769,7 @@ NOTE: **Note:**
This is something to note.
```
-How it renders in docs.gitlab.com:
+How it renders on the GitLab Docs site:
NOTE: **Note:**
This is something to note.
@@ -722,7 +781,7 @@ TIP: **Tip:**
This is a tip.
```
-How it renders in docs.gitlab.com:
+How it renders on the GitLab Docs site:
TIP: **Tip:**
This is a tip.
@@ -734,7 +793,7 @@ CAUTION: **Caution:**
This is something to be cautious about.
```
-How it renders in docs.gitlab.com:
+How it renders on the GitLab Docs site:
CAUTION: **Caution:**
This is something to be cautious about.
@@ -746,7 +805,7 @@ DANGER: **Danger:**
This is a breaking change, a bug, or something very important to note.
```
-How it renders in docs.gitlab.com:
+How it renders on the GitLab Docs site:
DANGER: **Danger:**
This is a breaking change, a bug, or something very important to note.
@@ -759,7 +818,7 @@ For highlighting a text within a blue blockquote, use this format:
> This is a blockquote.
```
-which renders in docs.gitlab.com to:
+which renders on the [GitLab Docs site](https://docs.gitlab.com) as:
> This is a blockquote.
@@ -992,6 +1051,38 @@ In this case:
- Different highlighting languages are used for each config in the code block.
- The [GitLab Restart](#gitlab-restart) section is used to explain a required restart/reconfigure of GitLab.
+## Feature flags
+
+Sometimes features are shipped with feature flags, either:
+
+- On by default, but providing the option to turn the feature off.
+- Off by default, but providing the option to turn the feature on.
+
+When documenting feature flags for a feature, it's important that users know:
+
+- Why a feature flag is necessary. Some of the reasons are
+ [outlined in the handbook](https://about.gitlab.com/handbook/product/#alpha-beta-ga).
+- That administrative access is required to make a feature flag change.
+- What to ask for when requesting a change to a feature flag's state.
+
+NOTE: **Note:**
+The [Product Manager for the relevant group](https://about.gitlab.com/handbook/product/categories/#devops-stages)
+must review and approve the addition or removal of any mentions of using feature flags before the doc change is merged.
+
+The following is sample text for adding feature flag documentation for a feature:
+
+````md
+### Disabling the feature
+
+This feature comes with the `:feature_flag` feature flag enabled by default. However, in some cases
+this feature is incompatible with old configuration. To turn off the feature while configuration is
+migrated, ask a GitLab administrator with Rails console access to run the following command:
+
+```ruby
+Feature.disable(:feature_flag)
+```
+````
+
## API
Here is a list of must-have items. Use them in the exact order that appears
@@ -1100,7 +1191,7 @@ Rendered example:
### cURL Examples
-Below is a set of [cURL][] examples that you can use in the API documentation.
+Below is a set of [cURL](https://curl.haxx.se) examples that you can use in the API documentation.
#### Simple cURL command
@@ -1147,7 +1238,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form "title=
```
The above example is run by and administrator and will add an SSH public key
-titled ssh-key to user's account which has an id of 25.
+titled `ssh-key` to user's account which has an id of 25.
#### Escape special characters
@@ -1172,7 +1263,6 @@ restrict the sign-up e-mail domains of a GitLab instance to `*.example.com` and
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" --data "domain_whitelist[]=*.example.com" --data "domain_whitelist[]=example.net" https://gitlab.example.com/api/v4/application/settings
```
-[cURL]: http://curl.haxx.se/ "cURL website"
[single spaces]: http://www.slate.com/articles/technology/technology/2011/01/space_invaders.html
[gfm]: ../../user/markdown.md#newlines "GitLab flavored markdown documentation"
[ce-1242]: https://gitlab.com/gitlab-org/gitlab-foss/issues/1242
diff --git a/doc/development/documentation/workflow.md b/doc/development/documentation/workflow.md
index 9f488fac7d0..24399391b1a 100644
--- a/doc/development/documentation/workflow.md
+++ b/doc/development/documentation/workflow.md
@@ -1,10 +1,332 @@
----
-description: Learn the processes for contributing to GitLab's documentation.
----
+# Documentation process
-# Documentation workflows
+The process for creating and maintaining GitLab product documentation depends on whether the
+documentation is associated with:
-Documentation workflows at GitLab differ depending on the reason for the change:
+- [A new feature or feature enhancement](#for-a-product-change).
-- [Documentation process for feature changes](feature-change-workflow.md) - The documentation is being created or updated as part of the development and release of a new or enhanced feature. This process involves the developer of the feature (who includes new/updated documentation files as part of the same merge request containing the feature's code) and also involves the product manager and technical writer who are listed for the feature's [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages).
-- [Documentation improvement workflow](improvement-workflow.md) - All documentation additions not associated with a feature release. Documentation is being created or updated to improve accuracy, completeness, ease of use, or any reason other than a feature change. Anyone (and everyone) can contribute a merge request for this type of change at any time.
+ Delivered for a specific milestone and associated with specific code changes. This documentation
+ has the highest priority.
+
+- [Changes outside a specific milestone](#for-all-other-documentation).
+
+ It is usually not associated with a specific code change and has a lower priority.
+
+Documentation is not usually required when a "backstage feature" is added or changed, and does not
+directly affect the way that any user or administrator interacts with GitLab.
+
+## For a product change
+
+This documentation is required for any new or changed feature and is:
+
+- Created or updated as part of feature development, typically via the same merge request as the
+ feature code.
+- Required with the delivery of a feature for a specific milestone as part of GitLab's
+ [definition of done](../contributing/merge_request_workflow.md#definition-of-done).
+- Often linked from the release post.
+
+### Roles and responsibilities
+
+Documentation for specific milestones involves the:
+
+- Developer of a feature or enhancement.
+- Product Manager for the group delivering the new feature or feature enhancement.
+- Technical Writer assigned to the group.
+
+Each role is described below.
+
+#### Developers
+
+Developers are the primary author of documentation for a feature or feature enhancement. They are
+responsible for:
+
+- Developing initial content required for a feature.
+- Liaising with their Product Manager to understand what documentation must be delivered, and when.
+- Requesting technical reviews from other developers within their group.
+- Requesting documentation reviews from the Technical Writer
+ [assigned to the DevOps stage group](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments)
+ that is delivering the new feature or feature enhancements.
+
+TIP: **Tip:**
+Community Contributors can ask for additional help from GitLab team members.
+
+##### Authoring
+
+Because the documentation is an essential part of the product, if a ~feature issue also contains the
+~documentation label, you must ship the new or updated documentation with the code of the feature.
+
+Technical Writers are happy to help, as requested and planned on an issue-by-issue basis.
+
+For feature issues requiring documentation, follow the process below unless otherwise agreed with
+the Product Manager and Technical Writer for a given issue:
+
+- Include any new and edited documentation, either in:
+ - The merge request introducing the code.
+ - A separate merge request raised around the same time.
+- Use the [documentation requirements](#documentation-requirements) developed by the Product Manager
+ in the issue and discuss any further documentation plans or ideas as needed.
+
+ If the new or changed documentation requires extensive collaboration or conversation, a
+ separate, linked issue can be used for the planning process.
+
+- Use the [Documentation guidelines](index.md), as well as other resources linked from there,
+ including:
+ - Documentation [Structure and template](structure.md) page.
+ - [Style Guide](styleguide.md).
+ - [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/).
+- Contact the Technical Writer for the relevant [DevOps stage](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments)
+ in your issue or merge request, or within `#docs` on GitLab Slack, if you:
+ - Need any help to choose the correct place for documentation.
+ - Want to discuss a documentation idea or outline.
+ - Want to request any other help.
+- If you are working on documentation in a separate merge request, ensure the documentation is
+ merged as close as possible to the code merge.
+- A policy for documenting [feature-flagged](../feature_flags/index.md) issues is forthcoming and you
+ are welcome to join the [discussion](https://gitlab.com/gitlab-org/gitlab/issues/26347).
+
+##### Reviews and merging
+
+Reviewers help ensure:
+
+- Accuracy.
+- Clarity.
+- Completeness.
+- Adherence to:
+ - [Documentation requirements](#documentation-requirements) in the issue.
+ - [Documentation guidelines](index.md).
+ - [Style guide](styleguide.md).
+
+Prior to merging, documentation changes committed by the developer must be reviewed by:
+
+- The code reviewer for the merge request. This is known as a technical review.
+- Optionally, others involved in the work, such as other developers or the Product Manager.
+- Optionally, the Technical Writer for the DevOps stage group.
+- A maintainer of the project.
+
+If not assigned to a Technical Writer for review prior to merging, a review must be scheduled
+immediately after merge by the developer or maintainer. For this,
+create an issue using the [Doc Review description template](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review)
+and link to it from the merged merge request that introduced the documentation change.
+
+To decide whether to request a Technical Writer review before or after merge, consider:
+
+- The amount of time left before the milestone release. If there is less than three days
+ remaining, seek a post-merge review and ping the writer via Slack to ensure the review is
+ completed in time.
+- The size of the change and your degree of confidence in having early users (for example,
+ GitLab.com users) of features use your documentation as written.
+- That pre-merge Technical Writer reviews should be most common when the code is complete well in
+ advance of a milestone release and for larger documentation changes.
+- You can request a post-merge Technical Writer review if it's important to get the code part of
+ a merge request merged as soon as possible.
+- The Technical Writer can also help decide that documentation can be merged without Technical
+ writer review, with the review to occur soon after merge.
+
+#### Product Managers
+
+Product Managers are responsible for the [documentation requirements](#documentation-requirements)
+for a feature or feature enhancement. They can also:
+
+- Liaise with the Technical Writer for discussion and collaboration.
+- Review documentation themselves.
+
+For issues requiring any new or updated documentation, the Product Manager must:
+
+- Add the ~documentation label.
+- Confirm or add the [documentation requirements](#documentation-requirements).
+- Ensure the issue contains:
+ - Any new or updated feature name.
+ - Overview, description, and use cases, as required by the
+ [documentation structure and template](structure.md), when applicable.
+
+Everyone is encouraged to draft the documentation requirements in the issue, but a Product Manager
+will do the following:
+
+- When the issue is assigned a release milestone, review and update the Documentation details.
+- By the kickoff, finalize the documentation details.
+
+#### Technical Writers
+
+Technical Writers are responsible for:
+
+- Reviewing documentation requirements in issues when called upon.
+- Answering questions, and helping and providing advice throughout the authoring and editing
+ process.
+- Reviewing all new and updated documentation content, whether before merge or after it is merged.
+- Assisting the developer and Product Manager with feature documentation delivery.
+
+##### Planning
+
+The Technical Writer:
+
+- Reviews their group's `~feature` issues that are part of the next milestone to get a sense of the
+ scope of content likely to be authored.
+- Recommends the `~documentation` label on issues from that list which don't have it but should, or
+ inquires with the PM to determine if documentation is truly required.
+- For `~direction` issues from that list, reads the full issue and reviews its Documentation
+ requirements section. Addresses any recommendations or questions with the PMs and others
+ collaborating on the issue in order to refine or expand the Documentation requirements.
+
+##### Collaboration
+
+By default, the developer will work on documentation changes independently, but
+the developer, Product Manager, or Technical Writer can propose a broader collaboration for
+any given issue.
+
+Additionally, Technical Writers are available for questions at any time.
+
+##### Review
+
+Technical Writers:
+
+- Provide non-blocking reviews of all documentation changes, before or after the change is merged.
+- Confirm that the documentation is:
+ - Clear.
+ - Grammatically correct.
+ - Discoverable.
+ - Navigable.
+- Ensures that the documentation avoids:
+ - Redundancy.
+ - Bad file locations.
+ - Typos.
+ - Broken links.
+
+The Technical Writer will review the documentation to check that the developer and
+code reviewer have ensured:
+
+- Clarity.
+- Appropriate location, making sure the documentation is in the correct directories (often
+ reflecting how the product is structured) and has the correct name.
+- Syntax, typos, and broken links.
+- Improvements to the content.
+- Accordance with the:
+ - [Documentation Style Guide](styleguide.md).
+ - [Structure and Template](structure.md) doc.
+
+### When documentation is required
+
+Documentation [is required](../contributing/merge_request_workflow.html#definition-of-done) for a
+milestone when:
+
+- A new or enhanced feature is shipped that impacts the user of administrator experience.
+- There are changes to the UI or API.
+- A process, workflow, or previously documented feature is changed.
+- A feature is deprecated or removed.
+
+NOTE: **Note:**
+Documentation refactoring unrelated to a feature change is covered in the
+[other process](#for-all-other-documentation), so that time-sensitive documentation updates are
+prioritized.
+
+### Documentation requirements
+
+Requirements for the documentation of a feature should be included as part of the
+issue for planning that feature in a **Documentation** section within the issue description. Issues
+created using the [**Feature Proposal** template](https://gitlab.com/gitlab-org/gitlab/raw/master/.gitlab/issue_templates/Feature%20proposal.md)
+have this section by default.
+
+Anyone can add these details, but the Product Manager who assigns the issue to a specific release
+milestone will ensure these details are present and finalized by the time of that milestone's kickoff.
+
+Developers, Technical Writers, and others may help further refine this plan at any time.
+
+The following details should be included:
+
+- What concepts and procedures should the documentation guide and enable the user to understand or
+ accomplish?
+- To this end, what new page(s) are needed, if any? What pages or subsections need updates?
+ Consider user, admin, and API documentation changes and additions.
+- For any guide or instruction set, should it help address a single use case, or be flexible to
+ address a certain range of use cases?
+- Do we need to update a previously recommended workflow? Should we link the new feature from
+ various relevant locations? Consider all ways documentation should be affected.
+- Are there any key terms or task descriptions that should be included so that the documentation is
+ found in relevant searches?
+- Include suggested titles of any pages or subsection headings, if applicable.
+- List any documentation that should be cross-linked, if applicable.
+
+## For all other documentation
+
+These documentation changes are not associated with the release of a new or updated feature, and are
+therefore labeled `backstage` in GitLab, rather than `feature`. They may include:
+
+- Documentation created or updated to improve accuracy, completeness, ease of use, or any reason
+ other than a [feature change](#for-a-product-change).
+- Addressing gaps in existing documentation, or making improvements to existing documentation.
+- Work on special projects related to the documentation.
+
+TIP: **Tip:**
+Anyone can contribute a merge request or create an issue for GitLab's documentation.
+
+### Who updates the docs
+
+Anyone can contribute! You can create a merge request for documentation when:
+
+- You find errors or other room for improvement in existing documentation.
+- You have an idea for all-new documentation that would help a GitLab user or administrator to
+ accomplish their work with GitLab.
+
+### How to update the docs
+
+To update GitLab documentation:
+
+1. Either:
+ - Click the **Edit this Page** link at the bottom of any page on <https://docs.gitlab.com>.
+ - Navigate to one of the repositories and documentation paths listed on the
+ [GitLab Documentation guidelines](index.md) page.
+1. Follow the described standards and processes listed on the page, including:
+ - The [Structure and template](structure.md) page.
+ - The [Style Guide](styleguide.md).
+ - The [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/).
+1. Follow GitLab's [Merge Request Guidelines](../contributing/merge_request_workflow.md#merge-request-guidelines).
+
+TIP: **Tip:**
+Work in a fork if you do not have developer access to the GitLab project.
+
+Ping the Technical Writer for the relevant [DevOps stage group](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments)
+in your issue or merge request, or within `#docs` if you are a member of GitLab's Slack workspace, if you:
+
+- Need help to choose the correct place for documentation.
+- Want to discuss a documentation idea or outline.
+- Want to request any other help.
+
+### Reviewing and merging
+
+Anyone with Maintainer access to the relevant GitLab project can merge documentation changes.
+Maintainers must make a good-faith effort to ensure that the content:
+
+- Is clear and sufficiently easy for the intended audience to navigate and understand.
+- Meets the [Documentation Guidelines](index.md) and [Style Guide](styleguide.md).
+
+If the author or reviewer has any questions, they can mention the writer who is assigned to the relevant
+[DevOps stage group](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments).
+
+The process involves the following:
+
+- Primary Reviewer. Review by a [code reviewer](https://about.gitlab.com/handbook/engineering/projects/)
+ or other appropriate colleague to confirm accuracy, clarity, and completeness. This can be skipped
+ for minor fixes without substantive content changes.
+- Technical Writer (Optional). If not completed for a merge request prior to merging, must be scheduled
+ post-merge. To request a:
+ - Pre-merge review, assign the Technical Writer listed for the applicable
+ [DevOps stage group](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments).
+ - Post-merge review, [create an issue for one](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review)
+ and link it from the MR that makes the documentation change.
+- Maintainer. For merge requests, Maintainers:
+ - Can always request any of the above reviews.
+ - Review before or after a Technical Writer review.
+ - Ensure the given release milestone is set.
+ - Ensure the appropriate labels are applied, including any required to pick a merge request into
+ a release.
+ - Ensure that, if there has not been a Technical Writer review completed or scheduled, they
+ [create the required issue](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review), assign to the technical writer of the given stage group,
+ and link it from the merge request.
+
+The process is reflected in the **Documentation**
+[merge request template](https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab/merge_request_templates/Documentation.md).
+
+### Other ways to help
+
+If you have ideas for further documentation resources please
+[create an issue](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Documentation)
+using the Documentation template.
diff --git a/doc/development/ee_features.md b/doc/development/ee_features.md
index d34c3ce5ba1..cc9df479492 100644
--- a/doc/development/ee_features.md
+++ b/doc/development/ee_features.md
@@ -19,86 +19,22 @@ CE specs should remain untouched as much as possible and extra specs
should be added for EE. Licensed features can be stubbed using the
spec helper `stub_licensed_features` in `EE::LicenseHelpers`.
-You can force Webpack to act as CE by either deleting the `ee/` directory or by
-setting the [`IS_GITLAB_EE` environment variable](https://gitlab.com/gitlab-org/gitlab/blob/master/config/helpers/is_ee_env.js)
-to something that evaluates as `false`. The same works for running tests
-(for example `IS_GITLAB_EE=0 yarn jest`).
+You can force GitLab to act as CE by either deleting the `ee/` directory or by
+setting the [`FOSS_ONLY` environment variable](https://gitlab.com/gitlab-org/gitlab/blob/master/config/helpers/is_ee_env.js)
+to something that evaluates as `true`. The same works for running tests
+(for example `FOSS_ONLY=1 yarn jest`).
[ee-as-ce]: https://gitlab.com/gitlab-org/gitlab/issues/2500
## Separation of EE code
-We want a [single code base][] eventually, but before we reach the goal,
-we still need to merge changes from GitLab CE to EE. To help us get there,
-we should make sure that we no longer edit CE files in place in order to
-implement EE features.
-
-Instead, all EE code should be put inside the `ee/` top-level directory. The
+All EE code should be put inside the `ee/` top-level directory. The
rest of the code should be as close to the CE files as possible.
-[single code base]: https://gitlab.com/gitlab-org/gitlab/issues/2952#note_41016454
-
-### EE-specific comments
-
-When complete separation can't be achieved with the `ee/` directory, you can wrap
-code in EE specific comments to designate the difference from CE/EE and add
-some context for someone resolving a conflict.
-
-```rb
-# EE-specific start
-stub_licensed_features(variable_environment_scope: true)
-# EE specific end
-```
-
-```haml
--# EE-specific start
-= render 'ci/variables/environment_scope', form_field: form_field, variable: variable
--# EE-specific end
-```
-
-EE-specific comments should not be backported to CE.
-
-**Note:** This is only meant as a workaround, we should follow up and
-resolve this soon.
-
-### Detection of EE-only files
-
-For each commit (except on `master`), the `ee-files-location-check` CI job tries
-to detect if there are any new files that are EE-only. If any file is detected,
-the job fails with an explanation of why and what to do to make it pass.
-
-Basically, the fix is simple: `git mv <file> ee/<file>`.
-
-#### How to name your branches?
-
-For any EE branch, the job will try to detect its CE counterpart by removing any
-`ee-` prefix or `-ee` suffix from the EE branch name, and matching the last
-branch that contains it.
-
-For instance, from the EE branch `new-shiny-feature-ee` (or
-`ee-new-shiny-feature`), the job would find the corresponding CE branches:
-
-- `new-shiny-feature`
-- `ce-new-shiny-feature`
-- `new-shiny-feature-ce`
-- `my-super-new-shiny-feature-in-ce`
-
-#### Whitelist some EE-only files that cannot be moved to `ee/`
-
-The `ee-files-location-check` CI job provides a whitelist of files or folders
-that cannot or should not be moved to `ee/`. Feel free to open an issue to
-discuss adding a new file/folder to this whitelist.
-
-For instance, it was decided that moving EE-only files from `qa/` to `ee/qa/`
-would make it difficult to build the `gitLab-{ce,ee}-qa` Docker images and it
-was [not worth the complexity].
-
-[not worth the complexity]: https://gitlab.com/gitlab-org/gitlab/issues/4997#note_59764702
-
### EE-only features
If the feature being developed is not present in any form in CE, we don't
-need to put the codes under `EE` namespace. For example, an EE model could
+need to put the code under the `EE` namespace. For example, an EE model could
go into: `ee/app/models/awesome.rb` using `Awesome` as the class name. This
is applied not only to models. Here's a list of other examples:
@@ -116,7 +52,7 @@ is applied not only to models. Here's a list of other examples:
- `ee/app/views/foo.html.haml`
- `ee/app/views/foo/_bar.html.haml`
-This works because for every path that are present in CE's eager-load/auto-load
+This works because for every path that is present in CE's eager-load/auto-load
paths, we add the same `ee/`-prepended path in [`config/application.rb`].
This also applies to views.
@@ -170,7 +106,7 @@ still having access the class's implementation with `super`.
There are a few gotchas with it:
-- you should always [`extend ::Gitlab::Utils::Override`](utilities.md#overridehttpsgitlabcomgitlab-orggitlab-fossblobmasterlibgitlabutilsoverriderb) and use `override` to
+- you should always [`extend ::Gitlab::Utils::Override`](utilities.md#override) and use `override` to
guard the "overrider" method to ensure that if the method gets renamed in
CE, the EE override won't be silently forgotten.
- when the "overrider" would add a line in the middle of the CE
@@ -441,13 +377,10 @@ CE and EE.
The advantages of this:
-- Minimal code difference between CE and EE.
-- Very clear hints about where we're extending EE views while reading CE codes.
+- Very clear hints about where we're extending EE views while reading CE code.
The disadvantage of this:
-- Slightly more work while developing EE features, because now we need to
- port `render_if_exists` to CE.
- If we have typos in the partial name, it would be silently ignored.
##### Caveats
@@ -858,7 +791,7 @@ end
### Code in `spec/`
When you're testing EE-only features, avoid adding examples to the
-existing CE specs. Also do no change existing CE examples, since they
+existing CE specs. Also do not change existing CE examples, since they
should remain working as-is when EE is running without a license.
Instead place EE specs in the `ee/spec` folder.
@@ -992,10 +925,8 @@ For regular JS files, the approach is similar.
## SCSS code in `assets/stylesheets`
-To separate EE-specific styles in SCSS files, if a component you're adding styles for
-is limited to only EE, it is better to have a separate SCSS file in appropriate directory
-within `app/assets/stylesheets`.
-See [backporting changes](#backporting-changes-from-ee-to-ce) for instructions on how to merge changes safely.
+If a component you're adding styles for is limited to EE, it is better to have a
+separate SCSS file in an appropriate directory within `app/assets/stylesheets`.
In some cases, this is not entirely possible or creating dedicated SCSS file is an overkill,
e.g. a text style of some component is different for EE. In such cases,
@@ -1037,24 +968,6 @@ to avoid conflicts during CE to EE merge.
// EE-specific end
```
-## Backporting changes from EE to CE
-
-Until the work completed to merge the ce and ee codebases, which is tracked on [epic &802](https://gitlab.com/groups/gitlab-org/-/epics/802), there exists times in which some changes for EE require specific changes to the CE
-code base. Examples of backports include the following:
-
-- Features intended or originally built for EE that are later decided to move to CE
-- Sometimes some code in CE may impact the EE feature
-
-Here is a workflow to make sure those changes end up backported safely into CE too.
-
-1. **Make your changes in the EE branch.** If possible, keep a separated commit (to be squashed) to help backporting and review.
-1. **Open merge request to EE project.**
-1. **Apply the changes you made to CE files in a branch of the CE project.** (Tip: Use `patch` with the diff from your commit in EE branch)
-1. **Open merge request to CE project**, referring it's a backport of EE changes and link to MR open in EE.
-1. Once EE MR is merged, the MR towards CE can be merged. **But not before**.
-
-**Note:** regarding SCSS, make sure the files living outside `/ee/` don't diverge between CE and EE projects.
-
## GitLab-svgs
Conflicts in `app/assets/images/icons.json` or `app/assets/images/icons.svg` can
diff --git a/doc/development/elasticsearch.md b/doc/development/elasticsearch.md
index 1475e356b5b..1375bd6d56d 100644
--- a/doc/development/elasticsearch.md
+++ b/doc/development/elasticsearch.md
@@ -1,8 +1,9 @@
# Elasticsearch knowledge **(STARTER ONLY)**
-This area is to maintain a compendium of useful information when working with elasticsearch.
+This area is to maintain a compendium of useful information when working with Elasticsearch.
-Information on how to enable Elasticsearch and perform the initial indexing is kept in ../integration/elasticsearch.md#enabling-elasticsearch
+Information on how to enable Elasticsearch and perform the initial indexing is in
+the [Elasticsearch integration documentation](../integration/elasticsearch.md#enabling-elasticsearch).
## Deep Dive
@@ -59,9 +60,9 @@ Additionally, if you need large repos or multiple forks for testing, please cons
## How does it work?
-The Elasticsearch integration depends on an external indexer. We ship an [indexer written in Go](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer). The user must trigger the initial indexing via a rake task but, after this is done, GitLab itself will trigger reindexing when required via `after_` callbacks on create, update, and destroy that are inherited from [/ee/app/models/concerns/elastic/application_search.rb](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/app/models/concerns/elastic/application_search.rb).
+The Elasticsearch integration depends on an external indexer. We ship an [indexer written in Go](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer). The user must trigger the initial indexing via a rake task but, after this is done, GitLab itself will trigger reindexing when required via `after_` callbacks on create, update, and destroy that are inherited from [/ee/app/models/concerns/elastic/application_versioned_search.rb](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/app/models/concerns/elastic/application_versioned_search.rb).
-All indexing after the initial one is done via `ElasticIndexerWorker` (sidekiq jobs).
+All indexing after the initial one is done via `ElasticIndexerWorker` (Sidekiq jobs).
Search queries are generated by the concerns found in [ee/app/models/concerns/elastic](https://gitlab.com/gitlab-org/gitlab/tree/master/ee/app/models/concerns/elastic). These concerns are also in charge of access control, and have been a historic source of security bugs so please pay close attention to them!
@@ -243,4 +244,4 @@ cluster.routing.allocation.disk.watermark.high: 10gb
Restart Elasticsearch, and the `read_only_allow_delete` will clear on it's own.
-_from "Disk-based Shard Allocation | Elasticsearch Reference" [5.6](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/disk-allocator.html#disk-allocator) and [6.x](https://www.elastic.co/guide/en/elasticsearch/reference/6.x/disk-allocator.html)_
+_from "Disk-based Shard Allocation | Elasticsearch Reference" [5.6](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/disk-allocator.html#disk-allocator) and [6.x](https://www.elastic.co/guide/en/elasticsearch/reference/6.7/disk-allocator.html)_
diff --git a/doc/development/emails.md b/doc/development/emails.md
index 91b9e11f7f6..2c5f3be45d8 100644
--- a/doc/development/emails.md
+++ b/doc/development/emails.md
@@ -17,10 +17,9 @@ dummy data.
The previews live in [`app/mailers/previews`][previews] and can be viewed at
[`/rails/mailers`](http://localhost:3000/rails/mailers).
-See the [Rails guides] for more info.
+See the [Rails guides](https://guides.rubyonrails.org/action_mailer_basics.html#previewing-emails) for more info.
[previews]: https://gitlab.com/gitlab-org/gitlab-foss/tree/master/app/mailers/previews
-[Rails guides]: http://guides.rubyonrails.org/action_mailer_basics.html#previewing-emails
## Incoming email
@@ -88,15 +87,15 @@ for the format of the email key:
- Actions are always at the end, separated by `-`. For example `-issue` or `-merge-request`
- If your feature is related to a project, the key begins with the project identifiers (project path slug
- and project id), separated by `-`. For example, `gitlab-org-gitlab-ce-20`
+ and project id), separated by `-`. For example, `gitlab-org-gitlab-foss-20`
- Additional information, such as an author's token, can be added between the project identifiers and
- the action, separated by `-`. For example, `gitlab-org-gitlab-ce-20-Author_Token12345678-issue`
+ the action, separated by `-`. For example, `gitlab-org-gitlab-foss-20-Author_Token12345678-issue`
- You register your handlers in `lib/gitlab/email/handler.rb`
Examples of valid email keys:
-- `gitlab-org-gitlab-ce-20-Author_Token12345678-issue` (create a new issue)
-- `gitlab-org-gitlab-ce-20-Author_Token12345678-merge-request` (create a new merge request)
+- `gitlab-org-gitlab-foss-20-Author_Token12345678-issue` (create a new issue)
+- `gitlab-org-gitlab-foss-20-Author_Token12345678-merge-request` (create a new merge request)
- `1234567890abcdef1234567890abcdef-unsubscribe` (unsubscribe from a conversation)
- `1234567890abcdef1234567890abcdef` (reply to a conversation)
diff --git a/doc/development/event_tracking/frontend.md b/doc/development/event_tracking/frontend.md
index cdc2e94bf9e..c767efc65b2 100644
--- a/doc/development/event_tracking/frontend.md
+++ b/doc/development/event_tracking/frontend.md
@@ -1,6 +1,6 @@
# Frontend tracking guide
-GitLab provides `Tracking`, an interface that wraps the [Snowplow Javascript Tracker](https://github.com/snowplow/snowplow/wiki/javascript-tracker) for tracking custom events. There are a few ways to utilizing tracking, but each generally requires at minimum, a `category` and an `action`. Additional data can be provided that adheres to our [Feature instrumentation taxonomy](https://about.gitlab.com/handbook/product/feature-instrumentation/#taxonomy).
+GitLab provides `Tracking`, an interface that wraps the [Snowplow JavaScript Tracker](https://github.com/snowplow/snowplow/wiki/javascript-tracker) for tracking custom events. There are a few ways to utilize tracking, but each generally requires at minimum, a `category` and an `action`. Additional data can be provided that adheres to our [Feature instrumentation taxonomy](https://about.gitlab.com/handbook/product/feature-instrumentation/#taxonomy).
| field | type | default value | description |
|:-----------|:-------|:---------------------------|:------------|
@@ -26,7 +26,7 @@ Below is an example of `data-track-*` attributes assigned to a button:
/>
```
-Event listeners are bound at the document level to handle click events on or within elements with these data attributes. This allows for them to be properly handled on rerendering and changes to the DOM, but it's important to know that because of the way these events are bound, click events shouldn't be stopped from propagating up the DOM tree. If for any reason click events are being stopped from propagating, you'll need to implement your own listeners and follow the instructions in [Tracking in raw Javascript](#tracking-in-raw-javascript).
+Event listeners are bound at the document level to handle click events on or within elements with these data attributes. This allows for them to be properly handled on rerendering and changes to the DOM, but it's important to know that because of the way these events are bound, click events shouldn't be stopped from propagating up the DOM tree. If for any reason click events are being stopped from propagating, you'll need to implement your own listeners and follow the instructions in [Tracking in raw JavaScript](#tracking-in-raw-javascript).
Below is a list of supported `data-track-*` attributes:
@@ -99,7 +99,7 @@ And if needed within the template, you can use the `track` method directly as we
</template>
```
-## Tracking in raw Javascript
+## Tracking in raw JavaScript
Custom event tracking and instrumentation can be added by directly calling the `Tracking.event` static function. The following example demonstrates tracking a click on a button by calling `Tracking.event` manually.
diff --git a/doc/development/experiment_guide/index.md b/doc/development/experiment_guide/index.md
new file mode 100644
index 00000000000..5155433c9ad
--- /dev/null
+++ b/doc/development/experiment_guide/index.md
@@ -0,0 +1,65 @@
+# Experiment Guide
+
+Experiments will be conducted by teams from the [Growth Section](https://about.gitlab.com/handbook/engineering/development/growth/) and are not tied to releases, because they will primarily target GitLab.com.
+
+Experiments will be run as an A/B test and will be behind a feature flag to turn the test on or off. Based on the data the experiment generates, the team decides if the experiment had a positive impact and will be the new default or rolled back.
+
+## Follow-up issue
+
+Each experiment requires a follow-up issue to resolve the experiment. Immediately after an experiment is deployed, the deadline of the issue needs to be set (this depends on the experiment but can be up to a few weeks in the future).
+After the deadline, the issue needs to be resolved and either:
+
+- It was successful and the experiment will be the new default.
+- It was not successful and all code related to the experiment will be removed.
+
+In either case, an outcome of the experiment should be posted to the issue with the reasoning for the decision.
+
+## Code reviews
+
+Since the code of experiments will not be part of the codebase for a long time and we want to iterate fast to retrieve data,the code quality of experiments might sometimes not fulfill our standards but should not negatively impact the availability of GitLab whether the experiment is running or not.
+Experiments will only be deployed to a fraction of users but we still want a flawless experience for those users. Therefore, experiments still require tests.
+
+For reviewers and maintainers: if you find code that would usually not make it through the review, but is temporarily acceptable, please mention your concerns but note that it's not necessary to change.
+The author then adds a comment to this piece of code and adds a link to the issue that resolves the experiment.
+
+## How to create an A/B test
+
+- [ ] Add the experiment to the `Gitlab::Experimentation::EXPERIMENTS` hash in [`experimentation.rb`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib%2Fgitlab%2Fexperimentation.rb):
+
+ ```ruby
+ EXPERIMENTS = {
+ other_experiment: {
+ #...
+ },
+ # Add your experiment here:
+ sign_up_flow: {
+ feature_toggle: :experimental_sign_up_flow, # Feature flag that will be used
+ environment: ::Gitlab.dev_env_or_com?, # Target environment
+ enabled_ratio: 0.1 # Percentage of users that will be part of the experiment. 10% of the users would be part of this experiments.
+ }
+ }.freeze
+ ```
+
+- [ ] Use the experiment in a controller:
+
+ ```ruby
+ class RegistrationController < Applicationcontroller
+ def show
+ # experiment_enabled?(:feature_name) is also available in views and helpers
+ if experiment_enabled?(:sign_up_flow)
+ # render the experiment
+ else
+ # render the original version
+ end
+ end
+ end
+ ```
+
+- [ ] Track necessery events. See the [event tracking guide](../event_tracking/index.md) for details.
+- [ ] After the merge request is merged, use [`chatops`](../../ci/chatops/README.md) to enable the feature flag and start the experiment. For visibility, please run the command in the `#s_growth` channel:
+
+ ```
+ /chatops run feature set --project=gitlab-org/gitlab experimental_sign_up_flow true
+ ```
+
+ If you notice issues with the experiment, you can disable the experiment by setting the feature flag to `false` again.
diff --git a/doc/development/fe_guide/components.md b/doc/development/fe_guide/components.md
index e88827f78c1..6b6274a6480 100644
--- a/doc/development/fe_guide/components.md
+++ b/doc/development/fe_guide/components.md
@@ -1,63 +1,3 @@
-# Components
-
-## Contents
-
-- [Dropdowns](#dropdowns)
-- [Modals](#modals)
-
-## Dropdowns
-
-See also the [corresponding UX guide](https://design.gitlab.com/#/components/dropdowns).
-
-### How to style a bootstrap dropdown
-
-1. Use the HTML structure provided by the [docs][bootstrap-dropdowns]
-1. Add a specific class to the top level `.dropdown` element
-
- ```Haml
- .dropdown.my-dropdown
- %button{ type: 'button', data: { toggle: 'dropdown' }, 'aria-haspopup': true, 'aria-expanded': false }
- %span.dropdown-toggle-text
- Toggle Dropdown
- = icon('chevron-down')
-
- %ul.dropdown-menu
- %li
- %a
- item!
- ```
-
- Or use the helpers
-
- ```Haml
- .dropdown.my-dropdown
- = dropdown_toggle('Toogle!', { toggle: 'dropdown' })
- = dropdown_content
- %li
- %a
- item!
- ```
-
-[bootstrap-dropdowns]: https://getbootstrap.com/docs/3.3/javascript/#dropdowns
-
-## Modals
-
-See also the [corresponding UX guide](https://design.gitlab.com/#/components/modals).
-
-We have a reusable Vue component for modals: [vue_shared/components/gl_modal.vue](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/assets/javascripts/vue_shared/components/gl_modal.vue)
-
-Here is an example of how to use it:
-
-```html
- <gl-modal
- id="dogs-out-modal"
- :header-title-text="s__('ModalExample|Let the dogs out?')"
- footer-primary-button-variant="danger"
- :footer-primary-button-text="s__('ModalExample|Let them out')"
- @submit="letOut(theDogs)"
- >
- {{ s__('ModalExample|You’re about to let the dogs out.') }}
- </gl-modal>
-```
-
-![example modal](img/gl-modal.png)
+---
+redirect_to: 'https://design.gitlab.com/components/status/'
+---
diff --git a/doc/development/fe_guide/design_patterns.md b/doc/development/fe_guide/design_patterns.md
index 0893299540f..a7a0f39e2f3 100644
--- a/doc/development/fe_guide/design_patterns.md
+++ b/doc/development/fe_guide/design_patterns.md
@@ -77,4 +77,4 @@ new Foo({ container: '.my-element' });
You can find an example of the above in this [class][container-class-example];
-[container-class-example]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/assets/javascripts/mini_pipeline_graph_dropdown.js
+[container-class-example]: https://gitlab.com/gitlab-org/gitlab/blob/master/app/assets/javascripts/mini_pipeline_graph_dropdown.js
diff --git a/doc/development/fe_guide/development_process.md b/doc/development/fe_guide/development_process.md
index 41513e6d57e..3724bf60757 100644
--- a/doc/development/fe_guide/development_process.md
+++ b/doc/development/fe_guide/development_process.md
@@ -80,7 +80,7 @@ With the purpose of being [respectful of others' time](https://about.gitlab.com/
1. Before writing code, ensure your vision of the architecture is aligned with
GitLab's architecture.
-1. Add a diagram to the issue and ask a frontend architect in the slack channel `#fe_architectural` about it.
+1. Add a diagram to the issue and ask a frontend maintainer in the Slack channel `#frontend_maintainers` about it.
![Diagram of Issue Boards Architecture](img/boards_diagram.png)
diff --git a/doc/development/fe_guide/dropdowns.md b/doc/development/fe_guide/dropdowns.md
index e9d6244355c..019bd36573d 100644
--- a/doc/development/fe_guide/dropdowns.md
+++ b/doc/development/fe_guide/dropdowns.md
@@ -1 +1,3 @@
-This page has moved [here](components.md#dropdowns).
+---
+redirect_to: 'https://design.gitlab.com/components/dropdowns/'
+---
diff --git a/doc/development/fe_guide/frontend_faq.md b/doc/development/fe_guide/frontend_faq.md
index 2ec3f8017a1..36c8a03a241 100644
--- a/doc/development/fe_guide/frontend_faq.md
+++ b/doc/development/fe_guide/frontend_faq.md
@@ -26,7 +26,7 @@ question:
document.body.dataset.page
```
-Find here the [source code setting the attribute](https://gitlab.com/gitlab-org/gitlab-foss/blob/cc5095edfce2b4d4083a4fb1cdc7c0a1898b9921/app/views/layouts/application.html.haml#L4).
+Find here the [source code setting the attribute](https://gitlab.com/gitlab-org/gitlab/blob/cc5095edfce2b4d4083a4fb1cdc7c0a1898b9921/app/views/layouts/application.html.haml#L4).
#### Rails routes
diff --git a/doc/development/fe_guide/graphql.md b/doc/development/fe_guide/graphql.md
index 366c2894b81..fe4f6d7bec8 100644
--- a/doc/development/fe_guide/graphql.md
+++ b/doc/development/fe_guide/graphql.md
@@ -1,11 +1,18 @@
# GraphQL
+Our GraphQL API can be explored via GraphiQL at your instance's
+`/-/graphql-explorer` or at [GitLab.com](https://gitlab.com/-/graphql-explorer).
+
+You can check all existing queries and mutations on the right side
+of GraphiQL in its **Documentation explorer**. It's also possible to
+write queries and mutations directly on the left tab and check
+their execution by clicking **Execute query** button on the top left:
+
+![GraphiQL interface](img/graphiql_explorer_v12_4.png)
+
We use [Apollo] and [Vue Apollo][vue-apollo] for working with GraphQL
on the frontend.
-In order to use GraphQL, you need to enable the `graphql` feature flag,
-read more about [Feature Flags][feature-flags].
-
## Apollo Client
To save duplicated clients getting created in different apps, we have a
@@ -119,6 +126,6 @@ Read more about the [Apollo] client in the [Apollo documentation](https://www.ap
[Apollo]: https://www.apollographql.com/
[vue-apollo]: https://github.com/Akryum/vue-apollo/
[feature-flags]: ../feature_flags.md
-[default-client]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/assets/javascripts/lib/graphql.js
+[default-client]: https://gitlab.com/gitlab-org/gitlab/blob/master/app/assets/javascripts/lib/graphql.js
[vue-test-utils]: https://vue-test-utils.vuejs.org/
[apollo-link-state]: https://www.apollographql.com/docs/link/links/state.html
diff --git a/doc/development/fe_guide/icons.md b/doc/development/fe_guide/icons.md
index 4f687d8642e..d81a520c5f3 100644
--- a/doc/development/fe_guide/icons.md
+++ b/doc/development/fe_guide/icons.md
@@ -1,6 +1,6 @@
# Icons and SVG Illustrations
-We manage our own Icon and Illustration library in the [gitlab-svgs][gitlab-svgs] repository.
+We manage our own Icon and Illustration library in the [`gitlab-svgs`][gitlab-svgs] repository.
This repository is published on [npm][npm] and managed as a dependency via yarn.
You can browse all available Icons and Illustrations [here][svg-preview].
To upgrade to a new version run `yarn upgrade @gitlab/svgs`.
@@ -59,8 +59,8 @@ export default {
<template>
<icon
name="issues"
- :size="72"
- css-classes="icon-danger"
+ :size="24"
+ class="icon-danger"
/>
</template>
```
diff --git a/doc/development/fe_guide/img/graphiql_explorer_v12_4.png b/doc/development/fe_guide/img/graphiql_explorer_v12_4.png
new file mode 100644
index 00000000000..8981b37ba23
--- /dev/null
+++ b/doc/development/fe_guide/img/graphiql_explorer_v12_4.png
Binary files differ
diff --git a/doc/development/fe_guide/index.md b/doc/development/fe_guide/index.md
index 4cccd4aa5fb..1cf798cedb6 100644
--- a/doc/development/fe_guide/index.md
+++ b/doc/development/fe_guide/index.md
@@ -5,8 +5,8 @@ across GitLab's frontend team.
## Overview
-GitLab is built on top of [Ruby on Rails][rails] using [Haml][haml] and also a JavaScript based Frontend with [Vue.js][vue].
-Be wary of [the limitations that come with using Hamlit][hamlit-limits]. We also use [SCSS][scss] and plain JavaScript with
+GitLab is built on top of [Ruby on Rails](https://rubyonrails.org) using [Haml][haml] and also a JavaScript based Frontend with [Vue.js](https://vuejs.org).
+Be wary of [the limitations that come with using Hamlit][hamlit-limits]. We also use [SCSS](https://sass-lang.com) and plain JavaScript with
modern ECMAScript standards supported through [Babel][babel] and ES module support through [webpack][webpack].
Working with our frontend assets requires Node (v8.10.0 or greater) and Yarn
@@ -41,6 +41,11 @@ or make changes to our frontend development guidelines.
How we write frontend tests, run the GitLab test suite, and debug test related
issues.
+## Pajamas Design System
+
+Reusable components with technical and usage guidelines can be found in our
+[Pajamas Design System](https://design.gitlab.com/).
+
## [Design Patterns](design_patterns.md)
Common JavaScript design patterns in GitLab's codebase.
@@ -65,10 +70,6 @@ How to use GraphQL
How we use SVG for our Icons and Illustrations.
-## [Components](components.md)
-
-How we use UI components.
-
## Frontend FAQ
Read the [frontend's FAQ](frontend_faq.md) for common small pieces of helpful information.
@@ -83,7 +84,7 @@ changes.
### [SCSS Style Guide](style_guide_scss.md)
-Our SCSS conventions which are enforced through [scss-lint][scss-lint].
+Our SCSS conventions which are enforced through [scss-lint](https://github.com/sds/scss-lint).
## [Performance](performance.md)
@@ -102,17 +103,13 @@ Our accessibility standards and resources.
Frontend internationalization support is described in [this document](../i18n/).
The [externalization part of the guide](../i18n/externalization.md) explains the helpers/methods available.
-[rails]: http://rubyonrails.org/
[haml]: http://haml.info/
[hamlit]: https://github.com/k0kubun/hamlit
[hamlit-limits]: https://github.com/k0kubun/hamlit/blob/master/REFERENCE.md#limitations
-[scss]: http://sass-lang.com/
[babel]: https://babeljs.io/
[webpack]: https://webpack.js.org/
[jquery]: https://jquery.com/
-[vue]: http://vuejs.org/
[axios]: https://github.com/axios/axios
[airbnb-js-style-guide]: https://github.com/airbnb/javascript
-[scss-lint]: https://github.com/brigade/scss-lint
[install]: ../../install/installation.md#4-node
[requirements]: ../../install/requirements.md#supported-web-browsers
diff --git a/doc/development/fe_guide/performance.md b/doc/development/fe_guide/performance.md
index bcd22a170e1..6d5021c0f08 100644
--- a/doc/development/fe_guide/performance.md
+++ b/doc/development/fe_guide/performance.md
@@ -65,26 +65,27 @@ within the `pages` directory correspond to Rails controllers and actions. These
auto-generated bundles will be automatically included on the corresponding
pages.
-For example, if you were to visit [gitlab.com/gitlab-org/gitlab-foss/issues](https://gitlab.com/gitlab-org/gitlab-foss/issues),
+For example, if you were to visit <https://gitlab.com/gitlab-org/gitlab/issues>,
you would be accessing the `app/controllers/projects/issues_controller.rb`
controller with the `index` action. If a corresponding file exists at
`pages/projects/issues/index/index.js`, it will be compiled into a webpack
bundle and included on the page.
-> **Note:** Previously we had encouraged the use of
-> `content_for :page_specific_javascripts` within haml files, along with
-> manually generated webpack bundles. However under this new system you should
-> not ever need to manually add an entry point to the `webpack.config.js` file.
->
-> **Tip:**
-> If you are unsure what controller and action corresponds to a given page, you
-> can find this out by inspecting `document.body.dataset.page` within your
-> browser's developer console while on any page within gitlab.
+NOTE: **Note:**
+Previously we had encouraged the use of
+`content_for :page_specific_javascripts` within haml files, along with
+manually generated webpack bundles. However under this new system you should
+not ever need to manually add an entry point to the `webpack.config.js` file.
+
+TIP: **Tip:**
+If you are unsure what controller and action corresponds to a given page, you
+can find this out by inspecting `document.body.dataset.page` within your
+browser's developer console while on any page within GitLab.
#### Important Considerations
- **Keep Entry Points Lite:**
- Page-specific javascript entry points should be as lite as possible. These
+ Page-specific JavaScript entry points should be as lite as possible. These
files are exempt from unit tests, and should be used primarily for
instantiation and dependency injection of classes and methods that live in
modules outside of the entry point script. Just import, read the DOM,
@@ -165,14 +166,12 @@ General tips:
## Additional Resources
-- [WebPage Test][web-page-test] for testing site loading time and size.
+- [WebPage Test](https://www.webpagetest.org) for testing site loading time and size.
- [Google PageSpeed Insights][pagespeed-insights] grades web pages and provides feedback to improve the page.
-- [Profiling with Chrome DevTools][google-devtools-profiling]
+- [Profiling with Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/)
- [Browser Diet][browser-diet] is a community-built guide that catalogues practical tips for improving web page performance.
-[web-page-test]: http://www.webpagetest.org/
[pagespeed-insights]: https://developers.google.com/speed/pagespeed/insights/
-[google-devtools-profiling]: https://developers.google.com/web/tools/chrome-devtools/profile/?hl=en
[browser-diet]: https://browserdiet.com/
[high-perf-animations]: https://www.html5rocks.com/en/tutorials/speed/high-performance-animations/
[flip]: https://aerotwist.com/blog/flip-your-animations/
diff --git a/doc/development/fe_guide/security.md b/doc/development/fe_guide/security.md
index 47ac87fc895..7dba61d6b45 100644
--- a/doc/development/fe_guide/security.md
+++ b/doc/development/fe_guide/security.md
@@ -63,7 +63,7 @@ External fonts, CSS, and JavaScript should never be used with the exception of
Google Analytics and Piwik - and only when the instance has enabled it. Assets
should always be hosted and served locally from the GitLab instance. Embedded
resources via `iframes` should never be used except in certain circumstances
-such as with ReCaptcha, which cannot be used without an `iframe`.
+such as with reCAPTCHA, which cannot be used without an `iframe`.
## Avoiding inline scripts and styles
diff --git a/doc/development/fe_guide/style_guide_js.md b/doc/development/fe_guide/style_guide_js.md
index db076243812..306b19c6e5d 100644
--- a/doc/development/fe_guide/style_guide_js.md
+++ b/doc/development/fe_guide/style_guide_js.md
@@ -7,7 +7,7 @@ See the relevant style guides for our guidelines and for information on linting:
We defer to [Airbnb][airbnb-js-style-guide] on most style-related
conventions and enforce them with eslint.
-See [our current .eslintrc](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/.eslintrc.yml) for specific rules and patterns.
+See [our current .eslintrc](https://gitlab.com/gitlab-org/gitlab/blob/master/.eslintrc.yml) for specific rules and patterns.
### Common
@@ -287,7 +287,7 @@ See [our current .eslintrc](https://gitlab.com/gitlab-org/gitlab-foss/blob/maste
#### CSS classes used for JavaScript
-1. If the class is being used in Javascript it needs to be prepend with `js-`
+1. If the class is being used in JavaScript it needs to be prepend with `js-`
```html
// bad
@@ -693,7 +693,7 @@ Useful links:
$('span').tooltip('_fixTitle');
```
-### The Javascript/Vue Accord
+### The JavaScript/Vue Accord
The goal of this accord is to make sure we are all on the same page.
@@ -713,7 +713,7 @@ The goal of this accord is to make sure we are all on the same page.
- [SCSS](style_guide_scss.md)
[airbnb-js-style-guide]: https://github.com/airbnb/javascript
-[eslintrc]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/.eslintrc
+[eslintrc]: https://gitlab.com/gitlab-org/gitlab/blob/master/.eslintrc
[eslint-plugin-vue]: https://github.com/vuejs/eslint-plugin-vue
[eslint-plugin-vue-rules]: https://github.com/vuejs/eslint-plugin-vue#bulb-rules
[vue-order]: https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/order-in-components.md
diff --git a/doc/development/fe_guide/style_guide_scss.md b/doc/development/fe_guide/style_guide_scss.md
index d5af19e0ea4..07c87920dab 100644
--- a/doc/development/fe_guide/style_guide_scss.md
+++ b/doc/development/fe_guide/style_guide_scss.md
@@ -13,12 +13,12 @@ led by the [GitLab UI WG](https://gitlab.com/gitlab-com/www-gitlab-com/merge_req
#### Where are utility classes defined?
- [Bootstrap's Utility Classes](https://getbootstrap.com/docs/4.3/utilities/)
-- [`common.scss`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/assets/stylesheets/framework/common.scss) (old)
-- [`utilities.scss`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/assets/stylesheets/utilities.scss) (new)
+- [`common.scss`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/assets/stylesheets/framework/common.scss) (old)
+- [`utilities.scss`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/assets/stylesheets/utilities.scss) (new)
#### Where should I put new utility classes?
-New utility classes should be added to [`utilities.scss`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/assets/stylesheets/utilities.scss). Existing classes include:
+New utility classes should be added to [`utilities.scss`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/assets/stylesheets/utilities.scss). Existing classes include:
| Name | Pattern | Example |
|------|---------|---------|
@@ -27,8 +27,8 @@ New utility classes should be added to [`utilities.scss`](https://gitlab.com/git
| Font size | `.text-{size}` | `.text-2` |
- `{variant}` is one of 'primary', 'secondary', 'success', 'warning', 'error'
-- `{shade}` is on of the shades listed on [colors](https://design.gitlab.com/foundations/colors/)
-- `{size}` is a number from 1-6 from our [Type scale](https://design.gitlab.com/foundations/typography)
+- `{shade}` is on of the shades listed on [colors](https://design.gitlab.com/product-foundations/colors/)
+- `{size}` is a number from 1-6 from our [Type scale](https://design.gitlab.com/product-foundations/typography)
#### When should I create component classes?
@@ -41,13 +41,13 @@ This encourages an organic growth of component classes and prevents the creation
Examples of component classes that were created using "utility-first" include:
-- [`.circle-icon-container`](https://gitlab.com/gitlab-org/gitlab-foss/blob/579fa8b8ec7eb38d40c96521f517c9dab8c3b97a/app/assets/stylesheets/framework/icons.scss#L85)
-- [`.d-flex-center`](https://gitlab.com/gitlab-org/gitlab-foss/blob/900083d89cd6af391d26ab7922b3f64fa2839bef/app/assets/stylesheets/framework/common.scss#L425)
+- [`.circle-icon-container`](https://gitlab.com/gitlab-org/gitlab/blob/579fa8b8ec7eb38d40c96521f517c9dab8c3b97a/app/assets/stylesheets/framework/icons.scss#L85)
+- [`.d-flex-center`](https://gitlab.com/gitlab-org/gitlab/blob/900083d89cd6af391d26ab7922b3f64fa2839bef/app/assets/stylesheets/framework/common.scss#L425)
Inspiration:
-- <https://tailwindcss.com/docs/utility-first>
-- <https://tailwindcss.com/docs/extracting-components>
+- <https://tailwindcss.com/docs/utility-first/>
+- <https://tailwindcss.com/docs/extracting-components/>
### Naming
@@ -236,7 +236,7 @@ Before adding a new variable for a color or a size, guarantee:
## Linting
-We use [SCSS Lint][scss-lint] to check for style guide conformity. It uses the
+We use [SCSS Lint](https://github.com/sds/scss-lint) to check for style guide conformity. It uses the
ruleset in `.scss-lint.yml`, which is located in the home directory of the
project.
@@ -245,7 +245,7 @@ scss_lint` in the GitLab directory. SCSS Lint will also run in GitLab CI to
catch any warnings.
If the Rake task is throwing warnings you don't understand, SCSS Lint's
-documentation includes [a full list of their linters][scss-lint-documentation].
+documentation includes [a full list of their linters][scss-lint-documentation](https://github.com/sds/scss-lint/blob/master/lib/scss_lint/linter/README.md).
### Fixing issues
@@ -260,7 +260,7 @@ Note that this won't fix every problem, but it should fix a majority.
### Ignoring issues
If you want a line or set of lines to be ignored by the linter, you can use
-`// scss-lint:disable RuleName` ([more info][disabling-linters]):
+`// scss-lint:disable RuleName` ([more info](https://github.com/sds/scss-lint#disabling-linters-via-source)):
```scss
// This lint rule is disabled because it is supported only in Chrome/Safari
@@ -279,6 +279,3 @@ guide is ignored in this instance.
[csscomb]: https://github.com/csscomb/csscomb.js
[node]: https://github.com/nodejs/node
[npm]: https://www.npmjs.com/
-[scss-lint]: https://github.com/brigade/scss-lint
-[scss-lint-documentation]: https://github.com/brigade/scss-lint/blob/master/lib/scss_lint/linter/README.md
-[disabling-linters]: https://github.com/brigade/scss-lint#disabling-linters-via-source
diff --git a/doc/development/fe_guide/vue.md b/doc/development/fe_guide/vue.md
index 396467b47d1..bca24e6ee0b 100644
--- a/doc/development/fe_guide/vue.md
+++ b/doc/development/fe_guide/vue.md
@@ -1,6 +1,6 @@
# Vue
-To get started with Vue, read through [their documentation][vue-docs].
+To get started with Vue, read through [their documentation](https://vuejs.org/v2/guide/).
## Examples
@@ -104,6 +104,51 @@ document.addEventListener('DOMContentLoaded', () => new Vue({
}));
```
+#### Accessing feature flags
+
+Use Vue's [provide/inject](https://vuejs.org/v2/api/#provide-inject) mechanism
+to make feature flags available to any descendant components in a Vue
+application. The `glFeatures` object is already provided in `commons/vue.js`, so
+only the mixin is required to utilize the flags:
+
+```javascript
+// An arbitrary descendant component
+
+import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
+
+export default {
+ // ...
+ mixins: [glFeatureFlagsMixin()],
+ // ...
+ created() {
+ if (this.glFeatures.myFlag) {
+ // ...
+ }
+ },
+}
+```
+
+This approach has a few benefits:
+
+- Arbitrarily deeply nested components can opt-in and access the flag without
+ intermediate components being aware of it (c.f. passing the flag down via
+ props).
+- Good testability, since the flag can be provided to `mount`/`shallowMount`
+ from `vue-test-utils` as easily as a prop.
+
+ ```javascript
+ import { shallowMount } from '@vue/test-utils';
+
+ shallowMount(component, {
+ provide: {
+ glFeatures: { myFlag: true },
+ },
+ });
+ ```
+
+- No need to access a global variable, except in the application's
+ [entry point](#accessing-the-gl-object).
+
### A folder for Components
This folder holds all components that are specific of this new feature.
@@ -245,7 +290,6 @@ One should apply to be a Vue.js expert by opening an MR when the Merge Request's
- Vuex code follows the [documented pattern](vuex.md#actions-pattern-request-and-receive-namespaces)
- Knowledge about the existing Vue and Vuex applications and existing reusable components
-[vue-docs]: http://vuejs.org/guide/index.html
[issue-boards]: https://gitlab.com/gitlab-org/gitlab-foss/tree/master/app/assets/javascripts/boards
[environments-table]: https://gitlab.com/gitlab-org/gitlab-foss/tree/master/app/assets/javascripts/environments
[page_specific_javascript]: ./performance.md#page-specific-javascript
@@ -253,5 +297,5 @@ One should apply to be a Vue.js expert by opening an MR when the Merge Request's
[state-management]: https://vuejs.org/v2/guide/state-management.html#Simple-State-Management-from-Scratch
[one-way-data-flow]: https://vuejs.org/v2/guide/components.html#One-Way-Data-Flow
[vue-test]: https://vuejs.org/v2/guide/unit-testing.html
-[flux]: https://facebook.github.io/flux
+[flux]: https://facebook.github.io/flux/
[axios]: https://github.com/axios/axios
diff --git a/doc/development/fe_guide/vuex.md b/doc/development/fe_guide/vuex.md
index bb131746ecf..20abf4fcb3e 100644
--- a/doc/development/fe_guide/vuex.md
+++ b/doc/development/fe_guide/vuex.md
@@ -232,7 +232,7 @@ import { mapGetters } from 'vuex';
### `mutation_types.js`
-From [vuex mutations docs][vuex-mutations]:
+From [vuex mutations docs](https://vuex.vuejs.org/guide/mutations.html):
> It is a commonly seen pattern to use constants for mutation types in various Flux implementations. This allows the code to take advantage of tooling like linters, and putting all constants in a single file allows your collaborators to get an at-a-glance view of what mutations are possible in the entire application.
```javascript
@@ -336,7 +336,7 @@ export default {
#### Testing Vuex concerns
-Refer to [vuex docs][vuex-testing] regarding testing Actions, Getters and Mutations.
+Refer to [vuex docs](https://vuex.vuejs.org/guide/testing.html) regarding testing Actions, Getters and Mutations.
#### Testing components that need a store
@@ -396,6 +396,3 @@ export default () => {};
```
[vuex-docs]: https://vuex.vuejs.org
-[vuex-structure]: https://vuex.vuejs.org/en/structure.html
-[vuex-mutations]: https://vuex.vuejs.org/en/mutations.html
-[vuex-testing]: https://vuex.vuejs.org/en/testing.html
diff --git a/doc/development/feature_flags/controls.md b/doc/development/feature_flags/controls.md
index 739f4207e27..f22c3bb1e37 100644
--- a/doc/development/feature_flags/controls.md
+++ b/doc/development/feature_flags/controls.md
@@ -1,9 +1,11 @@
-# Access for enabling a feature flag in production
+# Feature flag controls
-In order to be able to turn on/off features behind feature flags in any of the
+## Access
+
+To be able to turn on/off features behind feature flags in any of the
GitLab Inc. provided environments such as staging and production, you need to
-have access to the chatops bot. Chatops bot is currently running on the ops instance,
-which is different from GitLab.com or dev.gitlab.org.
+have access to the [Chatops](../chatops_on_gitlabcom.md) bot. The Chatops bot
+is currently running on the ops instance, which is different from <https://gitlab.com> or <https://dev.gitlab.org>.
Follow the Chatops document to [request access](../chatops_on_gitlabcom.md#requesting-access).
@@ -14,6 +16,19 @@ run:
/chatops run feature --help
```
+## Where to run commands
+
+To increase visibility, we recommend that GitLab team members run feature flag
+related Chatops commands within certain slack channels based on the environment
+and related feature. For the [staging](https://staging.gitlab.com)
+and [development](https://dev.gitlab.org) environments of GitLab.com,
+the commands should run in a channel for the stage the feature is relevant too.
+
+For example, use the `#s_monitor` channel for features developed by the
+Monitor stage, Health group.
+
+For all production environment Chatops commands, use the `#production` channel.
+
## Rolling out changes
When the changes are deployed to the environments it is time to start
@@ -28,7 +43,7 @@ easier to measure the impact of both separately.
GitLab's feature library (using
[Flipper](https://github.com/jnunemaker/flipper), and covered in the [Feature
Flags process](process.md) guide) supports rolling out changes to a percentage of
-users. This in turn can be controlled using [GitLab chatops](../../ci/chatops/README.md).
+users. This in turn can be controlled using [GitLab Chatops](../../ci/chatops/README.md).
For an up to date list of feature flag commands please see [the source
code](https://gitlab.com/gitlab-com/chatops/blob/master/lib/chatops/commands/feature.rb).
@@ -37,9 +52,9 @@ Note that all the examples in that file must be preceded by
If you get an error "Whoops! This action is not allowed. This incident
will be reported." that means your Slack account is not allowed to
-change feature flags or you do not [have access](#access-for-enabling-a-feature-flag-in-production).
+change feature flags or you do not [have access](#access).
-### Enabling feature for staging and dev.gitlab.org
+### Enabling feature for preproduction testing
As a first step in a feature rollout, you should enable the feature on <https://staging.gitlab.com>
and <https://dev.gitlab.org>.
@@ -64,7 +79,7 @@ there for any exceptions while testing your feature after enabling the feature f
Once you are confident enough that these environments are in a good state with your
feature enabled, you can roll out the change to GitLab.com.
-## Enabling feature for GitLab.com
+### Enabling a feature for GitLab.com
Similar to above, to enable a feature for 25% of all users, run the following in
Slack:
@@ -91,11 +106,11 @@ sure it is clearly communicated to your team, and the Production team if you
anticipate any potential problems.
Feature gates can also be actor based, for example a feature could first be
-enabled for only the `gitlab-ce` project. The project is passed by supplying a
+enabled for only the `gitlab` project. The project is passed by supplying a
`--project` flag:
```
-/chatops run feature set --project=gitlab-org/gitlab-ce some_feature true
+/chatops run feature set --project=gitlab-org/gitlab some_feature true
```
For groups the `--group` flag is available:
@@ -114,10 +129,17 @@ merge request has to be picked into a stable branch, make sure to also add the
appropriate "Pick into X" label (e.g. "Pick into XX.X").
See [the process document](process.md#including-a-feature-behind-feature-flag-in-the-final-release) for further details.
-When a feature gate has been removed from the code base, the value still exists
-in the database.
-This can be removed through ChatOps:
+When a feature gate has been removed from the code base, the feature
+record still exists in the database that the flag was deployed too.
+The record can be deleted once the MR is deployed to each environment:
+```sh
+/chatops run feature delete some_feature --dev
+/chatops run feature delete some_feature --staging
```
+
+Then, you can delete it from production after the MR is deployed to prod:
+
+```sh
/chatops run feature delete some_feature
```
diff --git a/doc/development/feature_flags/development.md b/doc/development/feature_flags/development.md
index b338a191f76..929c9b1c71c 100644
--- a/doc/development/feature_flags/development.md
+++ b/doc/development/feature_flags/development.md
@@ -109,6 +109,9 @@ if ( gon.features.vimBindings ) {
The name of the feature flag in JavaScript will always be camelCased, meaning
that checking for `gon.features.vim_bindings` would not work.
+See the [Vue guide](../fe_guide/vue.md#accessing-feature-flags) for details about
+how to access feature flags in a Vue component.
+
### Specs
In the test environment `Feature.enabled?` is stubbed to always respond to `true`,
diff --git a/doc/development/file_storage.md b/doc/development/file_storage.md
index 8d486df9a8a..47a6babe8bc 100644
--- a/doc/development/file_storage.md
+++ b/doc/development/file_storage.md
@@ -146,4 +146,4 @@ end
[CarrierWave]: https://github.com/carrierwaveuploader/carrierwave
[Hashed Storage]: ../administration/repository_storage_types.md
[all-in-one rake task]: ../administration/raketasks/uploads/migrate.md
-[category list]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/tasks/gitlab/uploads/migrate.rake
+[category list]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/tasks/gitlab/uploads/migrate.rake
diff --git a/doc/development/filtering_by_label.md b/doc/development/filtering_by_label.md
index 6aa7e7a5293..32df54eafd3 100644
--- a/doc/development/filtering_by_label.md
+++ b/doc/development/filtering_by_label.md
@@ -79,7 +79,7 @@ it did not improve query performance.
## Attempt B: Denormalize using an array column
-Having [removed MySQL support in GitLab 12.1](https://about.gitlab.com/2019/06/27/removing-mysql-support/),
+Having [removed MySQL support in GitLab 12.1](https://about.gitlab.com/blog/2019/06/27/removing-mysql-support/),
using [Postgres's arrays](https://www.postgresql.org/docs/9.6/arrays.html) became more
tractable as we didn't have to support two databases. We discussed denormalizing
the `label_links` table for querying in
diff --git a/doc/development/gitaly.md b/doc/development/gitaly.md
index 792ddeed201..64f283f69d9 100644
--- a/doc/development/gitaly.md
+++ b/doc/development/gitaly.md
@@ -15,9 +15,9 @@ In May 2019, Bob Van Landuyt hosted a [Deep Dive] on GitLab's [Gitaly project] a
## Beginner's guide
-Start by reading the gitaly repository's
+Start by reading the Gitaly repository's
[Beginner's guide to Gitaly contributions](https://gitlab.com/gitlab-org/gitaly/blob/master/doc/beginners_guide.md).
-It describes how to setup gitaly, the various components of gitaly and what they do, and how to run its test suites.
+It describes how to set up Gitaly, the various components of Gitaly and what they do, and how to run its test suites.
## Developing new Git features
@@ -41,14 +41,14 @@ disk access (e.g. Rugged, `git`, `rm -rf`) anywhere outside
The process for adding new Gitaly features is:
- exploration / prototyping
-- design and create a new Gitaly RPC [in gitaly-proto](https://gitlab.com/gitlab-org/gitaly-proto)
-- release a new version of gitaly-proto
+- design and create a new Gitaly RPC in [`gitaly-proto`](https://gitlab.com/gitlab-org/gitaly-proto)
+- release a new version of `gitaly-proto`
- write implementation and tests for the RPC [in Gitaly](https://gitlab.com/gitlab-org/gitaly), in Go or Ruby
- release a new version of Gitaly
- write client code in GitLab CE/EE, GitLab Workhorse or GitLab Shell that calls the new Gitaly RPC
These steps often overlap. It is possible to use an unreleased version
-of Gitaly and gitaly-proto during testing and development.
+of Gitaly and `gitaly-proto` during testing and development.
- See the [Gitaly repo](https://gitlab.com/gitlab-org/gitaly/blob/master/CONTRIBUTING.md#development-and-testing-with-a-custom-gitaly-proto) for instructions on writing server side code with an unreleased protocol.
- See [below](#running-tests-with-a-locally-modified-version-of-gitaly) for instructions on running GitLab CE tests with a modified version of Gitaly.
@@ -58,7 +58,7 @@ of Gitaly and gitaly-proto during testing and development.
It is possible to implement and test RPC's in Gitaly using Ruby code,
in
-[gitaly-ruby](https://gitlab.com/gitlab-org/gitaly/tree/master/ruby).
+[`gitaly-ruby`](https://gitlab.com/gitlab-org/gitaly/tree/master/ruby).
This should make it easier to contribute for developers who are less
comfortable writing Go code.
@@ -234,7 +234,7 @@ Here are the steps to gate a new feature in Gitaly behind a feature flag.
}
```
-1. Create prometheus metrics:
+1. Create Prometheus metrics:
```go
var findAllTagsRequests = prometheus.NewCounterVec(
diff --git a/doc/development/go_guide/index.md b/doc/development/go_guide/index.md
index 1e230a54023..33dd9dd9b6f 100644
--- a/doc/development/go_guide/index.md
+++ b/doc/development/go_guide/index.md
@@ -62,8 +62,8 @@ file and ask your manager to review and merge.
```yaml
projects:
- gitlab-ee: reviewer go
- gitlab-ce: reviewer go
+ gitlab: reviewer go
+ gitlab-foss: reviewer go
```
## Code style and format
diff --git a/doc/development/gotchas.md b/doc/development/gotchas.md
index e492b8ea7c9..c7eed880554 100644
--- a/doc/development/gotchas.md
+++ b/doc/development/gotchas.md
@@ -106,13 +106,16 @@ end
Using `any_instance` to stub a method (elasticsearch_indexing) that has been defined on a prepended module (EE::ApplicationSetting) is not supported.
```
-### Alternative: `expect_next_instance_of`
+### Alternative: `expect_next_instance_of` or `allow_next_instance_of`
Instead of writing:
```ruby
# Don't do this:
expect_any_instance_of(Project).to receive(:add_import_job)
+
+# Don't do this:
+allow_any_instance_of(Project).to receive(:add_import_job)
```
We could write:
@@ -122,10 +125,15 @@ We could write:
expect_next_instance_of(Project) do |project|
expect(project).to receive(:add_import_job)
end
+
+# Do this:
+allow_next_instance_of(Project) do |project|
+ allow(project).to receive(:add_import_job)
+end
```
-If we also want to expect the instance was initialized with some particular
-arguments, we could also pass it to `expect_next_instance_of` like:
+If we also want to initialize the instance with some particular arguments, we
+could also pass it like:
```ruby
# Do this:
@@ -144,21 +152,19 @@ refresh_service.execute(oldrev, newrev, ref)
## Do not `rescue Exception`
-See ["Why is it bad style to `rescue Exception => e` in Ruby?"][Exception].
+See ["Why is it bad style to `rescue Exception => e` in Ruby?"](https://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby).
_**Note:** This rule is [enforced automatically by
-Rubocop](https://gitlab.com/gitlab-org/gitlab-foss/blob/8-4-stable/.rubocop.yml#L911-914)._
-
-[Exception]: http://stackoverflow.com/q/10048173/223897
+Rubocop](https://gitlab.com/gitlab-org/gitlab/blob/8-4-stable/.rubocop.yml#L911-914)._
## Do not use inline JavaScript in views
Using the inline `:javascript` Haml filters comes with a
performance overhead. Using inline JavaScript is not a good way to structure your code and should be avoided.
-_**Note:** We've [removed these two filters](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/initializers/hamlit.rb)
+_**Note:** We've [removed these two filters](https://gitlab.com/gitlab-org/gitlab/blob/master/config/initializers/hamlit.rb)
in an initializer._
### Further reading
-- Stack Overflow: [Why you should not write inline JavaScript](http://programmers.stackexchange.com/questions/86589/why-should-i-avoid-inline-scripting)
+- Stack Overflow: [Why you should not write inline JavaScript](https://softwareengineering.stackexchange.com/questions/86589/why-should-i-avoid-inline-scripting)
diff --git a/doc/development/i18n/externalization.md b/doc/development/i18n/externalization.md
index b5e1641abcb..2f067ede70f 100644
--- a/doc/development/i18n/externalization.md
+++ b/doc/development/i18n/externalization.md
@@ -236,11 +236,11 @@ This makes use of [`Intl.DateTimeFormat`].
- In Ruby/HAML, we have two ways of adding format to dates and times:
1. **Through the `l` helper**, i.e. `l(active_session.created_at, format: :short)`. We have some predefined formats for
- [dates](https://gitlab.com/gitlab-org/gitlab-foss/blob/v11.7.0/config/locales/en.yml#L54) and [times](https://gitlab.com/gitlab-org/gitlab-foss/blob/v11.7.0/config/locales/en.yml#L261).
+ [dates](https://gitlab.com/gitlab-org/gitlab/blob/4ab54c2233e91f60a80e5b6fa2181e6899fdcc3e/config/locales/en.yml#L54) and [times](https://gitlab.com/gitlab-org/gitlab/blob/4ab54c2233e91f60a80e5b6fa2181e6899fdcc3e/config/locales/en.yml#L262).
If you need to add a new format, because other parts of the code could benefit from it,
- you'll need to add it to [en.yml](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/locales/en.yml) file.
+ you'll need to add it to [en.yml](https://gitlab.com/gitlab-org/gitlab/blob/master/config/locales/en.yml) file.
1. **Through `strftime`**, i.e. `milestone.start_date.strftime('%b %-d')`. We use `strftime` in case none of the formats
- defined on [en.yml](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/locales/en.yml) matches the date/time
+ defined on [en.yml](https://gitlab.com/gitlab-org/gitlab/blob/master/config/locales/en.yml) matches the date/time
specifications we need, and if there is no need to add it as a new format because is very particular (i.e. it's only used in a single view).
## Best practices
@@ -313,17 +313,22 @@ Developer documentation][mdn].
## Updating the PO files with the new content
-Now that the new content is marked for translation, we need to update the PO
-files with the following command:
+Now that the new content is marked for translation, we need to update
+`locale/gitlab.pot` files with the following command:
```sh
bin/rake gettext:regenerate
```
-This command will update the `locale/gitlab.pot` file with the newly externalized
+This command will update `locale/gitlab.pot` file with the newly externalized
strings and remove any strings that aren't used anymore. You should check this
file in. Once the changes are on master, they will be picked up by
-[Crowdin](http://translate.gitlab.com) and be presented for translation.
+[Crowdin](https://translate.gitlab.com) and be presented for
+translation.
+
+We don't need to check in any changes to the
+`locale/[language]/gitlab.po` files. Those will be updated in a [when
+translations from Crowdin are merged](merging_translations.md).
If there are merge conflicts in the `gitlab.pot` file, you can delete the file
and regenerate it using the same command.
diff --git a/doc/development/i18n/index.md b/doc/development/i18n/index.md
index 5e4923341af..7f59d30f8f9 100644
--- a/doc/development/i18n/index.md
+++ b/doc/development/i18n/index.md
@@ -29,7 +29,7 @@ See [Externalization for GitLab](externalization.md).
### Translate strings
-The translation process is managed at [translate.gitlab.com](https://translate.gitlab.com)
+The translation process is managed at <https://translate.gitlab.com>
using [Crowdin](https://crowdin.com/).
You will need to create an account before you can submit translations.
Once you are signed in, select the language you wish to contribute translations to.
diff --git a/doc/development/i18n/merging_translations.md b/doc/development/i18n/merging_translations.md
index 7a8046ccdd9..f5953cc5f6c 100644
--- a/doc/development/i18n/merging_translations.md
+++ b/doc/development/i18n/merging_translations.md
@@ -15,8 +15,8 @@ By default Crowdin commits translations with `[skip ci]` in the commit
message. This is done to avoid a bunch of pipelines being run. Before
merging translations, make sure to trigger a pipeline to validate
translations, we have static analysis validating things Crowdin
-doesn't do. Create a [new pipeline](https://gitlab.com/gitlab-org/gitlab/pipelines/new) for the
-`master-i18n` branch.
+doesn't do. Create a new pipeline at `https://gitlab.com/gitlab-org/gitlab/pipelines/new`
+(need Developer access permissions) for the `master-i18n` branch.
If there are validation errors, the easiest solution is to disapprove
the offending string in Crowdin, leaving a comment with what is
@@ -53,7 +53,7 @@ or merged. But it won't recreate the `master-i18n` branch every
time. To force Crowdin to recreate the branch, close any [open merge
request](https://gitlab.com/gitlab-org/gitlab/merge_requests?scope=all&utf8=%E2%9C%93&state=opened&author_username=gitlab-crowdin-bot)
and delete the
-[`master-18n`](https://gitlab.com/gitlab-org/gitlab/branches/all?utf8=%E2%9C%93&search=master-i18n).
+[`master-18n`](https://gitlab.com/gitlab-org/gitlab/-/branches/all?utf8=✓&search=master-i18n).
This might be needed when the merge request contains failures that
have been fixed on master.
diff --git a/doc/development/i18n/proofreader.md b/doc/development/i18n/proofreader.md
index db15633fc73..8b3a5d893fe 100644
--- a/doc/development/i18n/proofreader.md
+++ b/doc/development/i18n/proofreader.md
@@ -57,7 +57,7 @@ are very appreciative of the work done by translators and proofreaders!
- Paolo Falomo - [GitLab](https://gitlab.com/paolofalomo), [Crowdin](https://crowdin.com/profile/paolo.falomo)
- Japanese
- Hiroyuki Sato - [GitLab](https://gitlab.com/hiroponz), [Crowdin](https://crowdin.com/profile/hiroponz)
- - Tomo Dote - [Gitlab](https://gitlab.com/fu7mu4), [Crowdin](https://crowdin.com/profile/fu7mu4)
+ - Tomo Dote - [GitLab](https://gitlab.com/fu7mu4), [Crowdin](https://crowdin.com/profile/fu7mu4)
- Korean
- Chang-Ho Cha - [GitLab](https://gitlab.com/changho-cha), [Crowdin](https://crowdin.com/profile/zzazang)
- Ji Hun Oh - [GitLab](https://gitlab.com/Baw-Appie), [Crowdin](https://crowdin.com/profile/BawAppie)
@@ -128,10 +128,10 @@ are very appreciative of the work done by translators and proofreaders!
have previously translated.
1. Your request to become a proofreader will be considered on the merits of
- your previous translations by [GitLab team members](https://about.gitlab.com/team/)
- or [Core team members](https://about.gitlab.com/core-team/) who are fluent in
+ your previous translations by [GitLab team members](https://about.gitlab.com/company/team/)
+ or [Core team members](https://about.gitlab.com/community/core-team/) who are fluent in
the language or current proofreaders.
- - When a request is made for the first proofreader for a language and there are no [GitLab team members](https://about.gitlab.com/team/)
- or [Core team members](https://about.gitlab.com/core-team/) who speak the language, we will request links to previous translation work in other communities or projects.
+ - When a request is made for the first proofreader for a language and there are no [GitLab team members](https://about.gitlab.com/company/team/)
+ or [Core team members](https://about.gitlab.com/community/core-team/) who speak the language, we will request links to previous translation work in other communities or projects.
[proofreader-src]: https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/i18n/proofreader.md
diff --git a/doc/development/i18n/translation.md b/doc/development/i18n/translation.md
index 1793afcd86d..c1a6fd8983c 100644
--- a/doc/development/i18n/translation.md
+++ b/doc/development/i18n/translation.md
@@ -8,7 +8,7 @@ The first step is to get familiar with Crowdin.
### Sign In
-To contribute translations at [translate.gitlab.com](https://translate.gitlab.com)
+To contribute translations at <https://translate.gitlab.com>
you must create a Crowdin account.
You may create a new account or use any of their supported sign in services.
@@ -54,7 +54,7 @@ For example in French `OpenedNDaysAgo|Opened` would be translated to
Some technical terms should be treated like proper nouns and not be translated.
Technical terms that should always be in English are noted in the glossary when
-using [translate.gitlab.com](https://translate.gitlab.com).
+using <https://translate.gitlab.com>.
This helps maintain a logical connection and consistency between tools (e.g.
`git` client) and GitLab.
diff --git a/doc/development/img/memory_ruby_heap_fragmentation.png b/doc/development/img/memory_ruby_heap_fragmentation.png
new file mode 100644
index 00000000000..6567abe58bb
--- /dev/null
+++ b/doc/development/img/memory_ruby_heap_fragmentation.png
Binary files differ
diff --git a/doc/development/import_export.md b/doc/development/import_export.md
index fcfb9bf4915..38119d9bbd0 100644
--- a/doc/development/import_export.md
+++ b/doc/development/import_export.md
@@ -31,10 +31,12 @@ Read through the current performance problems using the Import/Export below.
Out of memory (OOM) errors are normally caused by the [Sidekiq Memory Killer](../administration/operations/sidekiq_memory_killer.md):
```bash
-SIDEKIQ_MEMORY_KILLER_MAX_RSS = 2GB in GitLab.com
+SIDEKIQ_MEMORY_KILLER_MAX_RSS = 2000000
+SIDEKIQ_MEMORY_KILLER_HARD_LIMIT_RSS = 3000000
+SIDEKIQ_MEMORY_KILLER_GRACE_TIME = 900
```
-An import status `started`, and the following sidekiq logs will signal a memory issue:
+An import status `started`, and the following Sidekiq logs will signal a memory issue:
```bash
WARN: Work still in progress <struct with JID>
@@ -96,7 +98,8 @@ importing big projects, using a foreground import:
## Security
The Import/Export feature is constantly updated (adding new things to export), however
-the code hasn't been refactored in a long time. We should perform a [code audit](https://gitlab.com/gitlab-org/gitlab-foss/issues/42135)
+the code hasn't been refactored in a long time. We should perform a code audit (see
+[confidential issue](../user/project/issues/confidential_issues.md) `https://gitlab.com/gitlab-org/gitlab/issues/20720`).
to make sure its dynamic nature does not increase the number of security concerns.
### Security in the code
@@ -309,7 +312,7 @@ module Gitlab
class Importer
def execute
if import_file && check_version! && restorers.all?(&:restore) && overwrite_project
- project_tree.restored_project
+ project
else
raise Projects::ImportService::Error.new(@shared.errors.join(', '))
end
diff --git a/doc/development/interacting_components.md b/doc/development/interacting_components.md
index 5e6dc8d460a..3db260d5f85 100644
--- a/doc/development/interacting_components.md
+++ b/doc/development/interacting_components.md
@@ -14,7 +14,7 @@ change that affects uploads should also be tested against [object storage],
which is _not_ enabled by default in [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit).
When working on a related feature, make sure to enable and test it
-against [Minio](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/object_storage.md).
+against [MinIO](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/object_storage.md).
See also [File Storage in GitLab](file_storage.md).
diff --git a/doc/development/internal_api.md b/doc/development/internal_api.md
new file mode 100644
index 00000000000..b08112aacb2
--- /dev/null
+++ b/doc/development/internal_api.md
@@ -0,0 +1,328 @@
+# Internal API
+
+The internal API is used by different GitLab components, it can not be
+used by other consumers. This documentation is intended for people
+working on the GitLab codebase.
+
+This documentation does not yet include the internal api used by
+GitLab pages.
+
+## Authentication
+
+These methods are all authenticated using a shared secret. This secret
+is stored in a file at the path configured in `config/gitlab.yml` by
+default this is in the root of the rails app named
+`.gitlab_shell_secret`
+
+To authenticate using that token, clients read the contents of that
+file, and include the token Base64 encoded in a `secret_token` param
+or in the `Gitlab-Shared-Secret` header.
+
+NOTE: **Note:**
+The internal api used by GitLab pages uses a different kind of
+authentication.
+
+## Git Authentication
+
+This is called by Gitaly and GitLab-shell to check access to a
+repository.
+
+When called from GitLab-shell no changes are passed and the internal
+API replies with the information needed to pass the request on to
+Gitaly.
+
+When called from Gitaly in a `pre-receive` hook the changes are passed
+and those are validated to determine if the push is allowed.
+
+```
+POST /internal/allowed
+```
+
+| Attribute | Type | Required | Description |
+|:----------|:-------|:---------|:------------|
+| `key_id` | string | no | Id of the SSH-key used to connect to GitLab-shell |
+| `username` | string | no | Username from the certificate used to connect to GitLab-Shell |
+| `project` | string | no (if `gl_repository` is passed) | Path to the project |
+| `gl_repository` | string | no (if `project` is passed) | Path to the project |
+| `protocol` | string | yes | SSH when called from GitLab-shell, HTTP or SSH when called from Gitaly |
+| `action` | string | yes | Git command being run (`git-upload-pack`, `git-receive-pack`, `git-upload-archive`) |
+| `changes` | string | yes | `<oldrev> <newrev> <refname>` when called from Gitaly, The magic string `_any` when called from GitLab Shell |
+| `check_ip` | string | no | Ip adress from which call to GitLab Shell was made |
+
+Example request:
+
+```sh
+curl --request POST --header "Gitlab-Shared-Secret: <Base64 encoded token>" --data "key_id=11&project=gnuwget/wget2&action=git-upload-pack&protocol=ssh" http://localhost:3001/api/v4/internal/allowed
+```
+
+Example response:
+
+```
+{
+ "status": true,
+ "gl_repository": "project-3",
+ "gl_project_path": "gnuwget/wget2",
+ "gl_id": "user-1",
+ "gl_username": "root",
+ "git_config_options": [],
+ "gitaly": {
+ "repository": {
+ "storage_name": "default",
+ "relative_path": "@hashed/4e/07/4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce.git",
+ "git_object_directory": "",
+ "git_alternate_object_directories": [],
+ "gl_repository": "project-3",
+ "gl_project_path": "gnuwget/wget2"
+ },
+ "address": "unix:/Users/bvl/repos/gitlab/gitaly.socket",
+ "token": null
+ },
+ "gl_console_messages": []
+}
+```
+
+### Known consumers
+
+- Gitaly
+- GitLab-shell
+
+## LFS Authentication
+
+This is the endpoint that gets called from GitLab-shell to provide
+information for LFS clients when the repository is accessed over SSH.
+
+| Attribute | Type | Required | Description |
+|:----------|:-------|:---------|:------------|
+| `key_id` | string | no | Id of the SSH-key used to connect to GitLab-shell |
+| `username`| string | no | Username from the certificate used to connect to GitLab-Shell |
+| `project` | string | no | Path to the project |
+
+Example request:
+
+```sh
+curl --request POST --header "Gitlab-Shared-Secret: <Base64 encoded token>" --data "key_id=11&project=gnuwget/wget2" http://localhost:3001/api/v4/internal/lfs_authenticate
+```
+
+```
+{
+ "username": "root",
+ "lfs_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7ImFjdG9yIjoicm9vdCJ9LCJqdGkiOiIyYWJhZDcxZC0xNDFlLTQ2NGUtOTZlMi1mODllYWRiMGVmZTYiLCJpYXQiOjE1NzAxMTc2NzYsIm5iZiI6MTU3MDExNzY3MSwiZXhwIjoxNTcwMTE5NDc2fQ.g7atlBw1QMY7QEBVPE0LZ8ZlKtaRzaMRmNn41r2YITM",
+ "repository_http_path": "http://localhost:3001/gnuwget/wget2.git",
+ "expires_in": 1800
+}
+```
+
+### Known consumers
+
+- GitLab-shell
+
+## Authorized Keys Check
+
+This endpoint is called by the GitLab-shell authorized keys
+check. Which is called by OpenSSH for [fast ssh key
+lookup](../administration/operations/fast_ssh_key_lookup.md).
+
+| Attribute | Type | Required | Description |
+|:----------|:-------|:---------|:------------|
+| `key` | string | yes | SSH key as passed by OpenSSH to GitLab-shell |
+
+```
+GET /internal/authorized_keys
+```
+
+Example request:
+
+```sh
+curl --request GET --header "Gitlab-Shared-Secret: <Base64 encoded secret>""http://localhost:3001/api/v4/internal/authorized_keys?key=<key as passed by OpenSSH>"
+```
+
+Example response:
+
+```
+{
+ "id": 11,
+ "title": "admin@example.com",
+ "key": "ssh-rsa ...",
+ "created_at": "2019-06-27T15:29:02.219Z"
+}
+```
+
+### Known consumers
+
+- GitLab-shell
+
+## Get user for user id or key
+
+This endpoint is used when a user performs `ssh git@gitlab.com`. It
+discovers the user associated with an SSH key.
+
+| Attribute | Type | Required | Description |
+|:----------|:-------|:---------|:------------|
+| `key_id` | integer | no | The id of the SSH key used as found in the authorized-keys file or through the `/authorized_keys` check |
+| `username` | string | no | Username of the user being looked up, used by GitLab-shell when authenticating using a certificate |
+
+```
+GET /internal/discover
+```
+
+Example request:
+
+```sh
+curl --request GET --header "Gitlab-Shared-Secret: <Base64 encoded secret>" "http://localhost:3001/api/v4/internal/discover?key_id=7"
+```
+
+Example response:
+
+```
+{
+ "id": 7,
+ "name": "Dede Eichmann",
+ "username": "rubi"
+}
+```
+
+### Known consumers
+
+- GitLab-shell
+
+## Instance information
+
+This get's some generic information about the instance. This is used
+by Geo nodes to get information about eachother
+
+```
+GET /internal/check
+```
+
+Example request:
+
+```sh
+curl --request GET --header "Gitlab-Shared-Secret: <Base64 encoded secret>" "http://localhost:3001/api/v4/internal/check"
+```
+
+Example response:
+
+```
+{
+ "api_version": "v4",
+ "gitlab_version": "12.3.0-pre",
+ "gitlab_rev": "d69c988e6a6",
+ "redis": true
+}
+```
+
+### Known consumers
+
+- GitLab Geo
+- GitLab-shell's `bin/check`
+
+## Get new 2FA recovery codes using an SSH key
+
+This is called from GitLab-shell and allows users to get new 2FA
+recovery codes based on their SSH key
+
+| Attribute | Type | Required | Description |
+|:----------|:-------|:---------|:------------|
+| `key_id` | integer | no | The id of the SSH key used as found in the authorized-keys file or through the `/authorized_keys` check |
+| `user_id` | integer | no | **Deprecated** User_id for which to generate new recovery codes |
+
+```
+GET /internal/two_factor_recovery_codes
+```
+
+Example request:
+
+```sh
+curl --request POST --header "Gitlab-Shared-Secret: <Base64 encoded secret>" --data "key_id=7" http://localhost:3001/api/v4/internal/two_factor_recovery_codes
+```
+
+Example response:
+
+```
+{
+ "success": true,
+ "recovery_codes": [
+ "d93ee7037944afd5",
+ "19d7b84862de93dd",
+ "1e8c52169195bf71",
+ "be50444dddb7ca84",
+ "26048c77d161d5b7",
+ "482d5c03d1628c47",
+ "d2c695e309ce7679",
+ "dfb4748afc4f12a7",
+ "0e5f53d1399d7979",
+ "af04d5622153b020"
+ ]
+}
+```
+
+### Known consumers
+
+- GitLab-shell
+
+## Incrementing counter on pre-receive
+
+This is called from the Gitaly hooks increasing the reference counter
+for a push that might be accepted.
+
+| Attribute | Type | Required | Description |
+|:----------|:-------|:---------|:------------|
+| `gl_repository` | string | yes | repository identifier for the repository receiving the push |
+
+```
+POST /internal/pre_receive
+```
+
+Example request:
+
+```sh
+curl --request POST --header "Gitlab-Shared-Secret: <Base64 encoded secret>" --data "gl_repository=project-7" http://localhost:3001/api/v4/internal/pre_receive
+```
+
+Example response:
+
+```
+{
+ "reference_counter_increased": true
+}
+```
+
+## Notify Post Receive [UNUSED] ?
+
+## PostReceive
+
+Called from Gitaly after a receiving a push. This triggers the
+`PostReceive`-worker in sidekiq, processes the passed push options and
+builds the response including messages that need to be displayed to
+the user.
+
+| Attribute | Type | Required | Description |
+|:----------|:-------|:---------|:------------|
+| `identifier` | string | yes | `user-[id]` or `key-[id]` Identifying the user performing the push |
+| `gl_repository` | string | yes | identifier of the repository being pushed to |
+| `push_options` | [string] | no | array of push options |
+| `changes` | string | no | refs to be updated in the push in the format `oldrev newrev refname\n`. |
+
+```
+POST /internal/post_receive
+```
+
+Example Request:
+
+```sh
+curl --request POST --header "Gitlab-Shared-Secret: <Base64 encoded secret>" --data "gl_repository=project-7" --data "identifier=user-1" --data "changes=0000000000000000000000000000000000000000 fd9e76b9136bdd9fe217061b497745792fe5a5ee gh-pages\n" http://localhost:3001/api/v4/internal/post_receive
+```
+
+Example response:
+
+```
+{
+ "messages": [
+ {
+ "message": "Hello from post-receive",
+ "type": "alert"
+ }
+ ],
+ "reference_counter_decreased": true
+}
+```
diff --git a/doc/development/issuable-like-models.md b/doc/development/issuable-like-models.md
new file mode 100644
index 00000000000..ce19fd77496
--- /dev/null
+++ b/doc/development/issuable-like-models.md
@@ -0,0 +1,19 @@
+# Issuable-like Rails models utilities
+
+GitLab Rails codebase contains several models that hold common functionality and behave similarly to an [Issue]. Other
+examples of `Issuable`s are [Merge Requests] and [Epics].
+
+This guide accumulates guidelines on working with such Rails models.
+
+## Important text fields
+
+There are max length constraints for the most important text fields for `Issuable`s:
+
+- `title`: 255 chars
+- `title_html`: 800 chars
+- `description`: 1 megabyte
+- `description_html`: 5 megabytes
+
+[Issue]: https://docs.gitlab.com/ee/user/project/issues
+[Merge Requests]: https://docs.gitlab.com/ee/user/project/merge_requests
+[Epics]: https://docs.gitlab.com/ee/user/group/epics
diff --git a/doc/development/kubernetes.md b/doc/development/kubernetes.md
index 5265e5b11cd..82aa02ac75d 100644
--- a/doc/development/kubernetes.md
+++ b/doc/development/kubernetes.md
@@ -29,12 +29,12 @@ We use the [`kubeclient`](https://rubygems.org/gems/kubeclient) gem to
perform Kubernetes API calls. As the `kubeclient` gem does not support
different API Groups (e.g. `apis/rbac.authorization.k8s.io`) from a
single client, we have created a wrapper class,
-[`Gitlab::Kubernetes::KubeClient`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/kubernetes/kube_client.rb)
+[`Gitlab::Kubernetes::KubeClient`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/kubernetes/kube_client.rb)
that will enable you to achieve this.
Selected Kubernetes API groups are currently supported. Do add support
for new API groups or methods to
-[`Gitlab::Kubernetes::KubeClient`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/kubernetes/kube_client.rb)
+[`Gitlab::Kubernetes::KubeClient`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/kubernetes/kube_client.rb)
if you need to use them. New API groups or API group versions can be
added to `SUPPORTED_API_GROUPS` - internally, this will create an
internal client for that group. New methods can be added as a delegation
@@ -44,17 +44,16 @@ to the relevant internal client.
All calls to the Kubernetes API must be in a background process. Do not
perform Kubernetes API calls within a web request as this will block
-unicorn and can easily lead to a Denial Of Service (DoS) attack in GitLab as
+Unicorn and can easily lead to a Denial Of Service (DoS) attack in GitLab as
the Kubernetes cluster response times are outside of our control.
The easiest way to ensure your calls happen a background process is to
-delegate any such work to happen in a [sidekiq
-worker](sidekiq_style_guide.md).
+delegate any such work to happen in a [Sidekiq worker](sidekiq_style_guide.md).
There are instances where you would like to make calls to Kubernetes and
return the response and as such a background worker does not seem to be
a good fit. For such cases you should make use of [reactive
-caching](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/models/concerns/reactive_caching.rb).
+caching](https://gitlab.com/gitlab-org/gitlab/blob/master/app/models/concerns/reactive_caching.rb).
For example:
```ruby
@@ -72,7 +71,7 @@ For example:
### Testing
We have some Webmock stubs in
-[`KubernetesHelpers`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/spec/support/helpers/kubernetes_helpers.rb)
+[`KubernetesHelpers`](https://gitlab.com/gitlab-org/gitlab/blob/master/spec/support/helpers/kubernetes_helpers.rb)
which can help with mocking out calls to Kubernetes API in your tests.
## Security
@@ -87,7 +86,7 @@ a cluster.
Mitigation strategies include:
1. Not allowing redirects to attacker controller resources:
- [`Kubeclient::KubeClient`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/kubernetes/kube_client.rb#)
+ [`Kubeclient::KubeClient`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/kubernetes/kube_client.rb#)
can be configured to disallow any redirects by passing in
`http_max_redirects: 0` as an option.
1. Not exposing error messages: by doing so, we
@@ -111,7 +110,7 @@ Logs related to the Kubernetes integration can be found in
GDK install, this will be present in `log/kubernetes.log`.
Some services such as
-[`Clusters::Applications::InstallService`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/services/clusters/applications/install_service.rb#L18)
+[`Clusters::Applications::InstallService`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/services/clusters/applications/install_service.rb#L18)
rescues `StandardError` which can make it harder to debug issues in an
development environment. The current workaround is to temporarily
comment out the `rescue` in your local development source.
diff --git a/doc/development/licensing.md b/doc/development/licensing.md
index 538c8f2039b..40ff604c7c4 100644
--- a/doc/development/licensing.md
+++ b/doc/development/licensing.md
@@ -46,9 +46,9 @@ More detailed information on how the gem and its commands work is available in t
Libraries with the following licenses are acceptable for use:
-- [The MIT License][MIT] (the MIT Expat License specifically): The MIT License requires that the license itself is included with all copies of the source. It is a permissive (non-copyleft) license as defined by the Open Source Initiative.
-- [LGPL][LGPL] (version 2, version 3): GPL constraints regarding modification and redistribution under the same license are not required of projects using an LGPL library, only upon modification of the LGPL-licensed library itself.
-- [Apache 2.0 License][apache-2]: A permissive license that also provides an express grant of patent rights from contributors to users.
+- [The MIT License](https://choosealicense.com/licenses/mit/) (the MIT Expat License specifically): The MIT License requires that the license itself is included with all copies of the source. It is a permissive (non-copyleft) license as defined by the Open Source Initiative.
+- [LGPL](https://choosealicense.com/licenses/lgpl-3.0/) (version 2, version 3): GPL constraints regarding modification and redistribution under the same license are not required of projects using an LGPL library, only upon modification of the LGPL-licensed library itself.
+- [Apache 2.0 License](https://choosealicense.com/licenses/apache-2.0/): A permissive license that also provides an express grant of patent rights from contributors to users.
- [Ruby 1.8 License][ruby-1.8]: Dual-licensed under either itself or the GPLv2, defer to the Ruby License itself. Acceptable because of point 3b: "You may distribute the software in object code or binary form, provided that you do at least ONE of the following: b) accompany the distribution with the machine-readable source of the software."
- [Ruby 1.9 License][ruby-1.9]: Dual-licensed under either itself or the BSD 2-Clause License, defer to BSD 2-Clause.
- [BSD 2-Clause License][BSD-2-Clause]: A permissive (non-copyleft) license as defined by the Open Source Initiative.
@@ -62,8 +62,8 @@ Libraries with the following licenses are acceptable for use:
Libraries with the following licenses require legal approval for use:
-- [GNU GPL][GPL] (version 1, [version 2][GPLv2], [version 3][GPLv3], or any future versions): GPL-licensed libraries cannot be linked to from non-GPL projects.
-- [GNU AGPLv3][AGPLv3]: AGPL-licensed libraries cannot be linked to from non-GPL projects.
+- [GNU GPL](https://choosealicense.com/licenses/gpl-3.0/) (version 1, [version 2][GPLv2], [version 3][GPLv3], or any future versions): GPL-licensed libraries cannot be linked to from non-GPL projects.
+- [GNU AGPLv3](https://choosealicense.com/licenses/agpl-3.0/): AGPL-licensed libraries cannot be linked to from non-GPL projects.
- [Open Software License (OSL)][OSL]: is a copyleft license. In addition, the FSF [recommend against its use][OSL-GNU].
- [Facebook BSD + PATENTS][Facebook]: is a 3-clause BSD license with a patent grant that has been deemed [Category X][x-list] by the Apache foundation.
- [WTFPL][WTFPL]: is a public domain dedication [rejected by the OSI (3.2)][WTFPL-OSI]. Also has a strong language which is not in accordance with our diversity policy.
@@ -109,19 +109,14 @@ Dependencies which are only used in development or test environment are exempt f
[CE]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/LICENSE
[EE]: https://gitlab.com/gitlab-org/gitlab/blob/master/LICENSE
[license_finder]: https://github.com/pivotal/LicenseFinder
-[MIT]: http://choosealicense.com/licenses/mit/
-[LGPL]: http://choosealicense.com/licenses/lgpl-3.0/
-[apache-2]: http://choosealicense.com/licenses/apache-2.0/
[ruby-1.8]: https://github.com/ruby/ruby/blob/ruby_1_8_6/COPYING
[ruby-1.9]: https://www.ruby-lang.org/en/about/license.txt
[BSD-2-Clause]: https://opensource.org/licenses/BSD-2-Clause
[BSD-3-Clause]: https://opensource.org/licenses/BSD-3-Clause
[ISC]: https://opensource.org/licenses/ISC
[CC0]: https://creativecommons.org/publicdomain/zero/1.0/
-[GPL]: http://choosealicense.com/licenses/gpl-3.0/
[GPLv2]: http://www.gnu.org/licenses/gpl-2.0.txt
[GPLv3]: http://www.gnu.org/licenses/gpl-3.0.txt
-[AGPLv3]: http://choosealicense.com/licenses/agpl-3.0/
[GNU-GPL-FAQ]: http://www.gnu.org/licenses/gpl-faq.html#IfLibraryIsGPL
[OSI-GPL]: https://opensource.org/faq#linking-proprietary-code
[OSL]: https://opensource.org/licenses/OSL-3.0
diff --git a/doc/development/merge_request_performance_guidelines.md b/doc/development/merge_request_performance_guidelines.md
index 6f1baad3a2d..4456e5e6d18 100644
--- a/doc/development/merge_request_performance_guidelines.md
+++ b/doc/development/merge_request_performance_guidelines.md
@@ -41,7 +41,7 @@ about the impact.
Sometimes it's hard to assess the impact of a merge request. In this case you
should ask one of the merge request reviewers to review your changes. You can
-find a list of these reviewers at <https://about.gitlab.com/team/>. A reviewer
+find a list of these reviewers at <https://about.gitlab.com/company/team/>. A reviewer
in turn can request a performance specialist to review the changes.
## Query Counts
@@ -68,7 +68,7 @@ end
This will end up running one query for every object to update. This code can
easily overload a database given enough rows to update or many instances of this
code running in parallel. This particular problem is known as the
-["N+1 query problem"](http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations). You can write a test with [QueryRecoder](query_recorder.md) to detect this and prevent regressions.
+["N+1 query problem"](https://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations). You can write a test with [QueryRecoder](query_recorder.md) to detect this and prevent regressions.
In this particular case the workaround is fairly easy:
@@ -171,4 +171,4 @@ Caching data per transaction can be done using
[RequestStore](https://github.com/steveklabnik/request_store) (use
`Gitlab::SafeRequestStore` to avoid having to remember to check
`RequestStore.active?`). Caching data in Redis can be done using [Rails' caching
-system](http://guides.rubyonrails.org/caching_with_rails.html).
+system](https://guides.rubyonrails.org/caching_with_rails.html).
diff --git a/doc/development/migration_style_guide.md b/doc/development/migration_style_guide.md
index 5fded9e3aed..20d705136b2 100644
--- a/doc/development/migration_style_guide.md
+++ b/doc/development/migration_style_guide.md
@@ -286,6 +286,48 @@ For a small table (such as an empty one or one with less than `1,000` records),
use `add_column` and `change_column_default` in a single-transaction migration,
combining it with other operations that don't require `disable_ddl_transaction!`.
+## Changing the column default
+
+One might think that changing a default column with `change_column_default` is an
+expensive and disruptive operation for larger tables, but in reality it's not.
+
+Take the following migration as an example:
+
+```ruby
+class DefaultRequestAccessGroups < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ change_column_default :namespaces, :request_access_enabled, true
+ end
+
+ def down
+ change_column_default :namespaces, :request_access_enabled, false
+ end
+end
+```
+
+Migration above changes the default column value of one of our largest
+tables: `namespaces`. This can be translated to:
+
+```sql
+ALTER TABLE namespaces
+ALTER COLUMN request_access_enabled
+DEFAULT false
+```
+
+In this particular case, the default value exists and we're just changing the metadata for
+`request_access_enabled` column, which does not imply a rewrite of all the existing records
+in the `namespaces` table. Only when creating a new column with a default, all the records are going be rewritten.
+
+NOTE: **Note:** A faster [ALTER TABLE ADD COLUMN with a non-null default](https://www.depesz.com/2018/04/04/waiting-for-postgresql-11-fast-alter-table-add-column-with-a-non-null-default/)
+was introduced on PostgresSQL 11.0, removing the need of rewritting the table when a new column with a default value is added.
+
+For the reasons mentioned above, it's safe to use `change_column_default` in a single-transaction migration
+without requiring `disable_ddl_transaction!`.
+
## Updating an existing column
To update an existing column to a particular value, you can use
@@ -375,6 +417,7 @@ timestamps with timezones:
- `add_timestamps_with_timezone`
- `timestamps_with_timezone`
+- `datetime_with_timezone`
This ensures all timestamps have a time zone specified. This, in turn, means
existing timestamps won't suddenly use a different timezone when the system's
@@ -406,10 +449,7 @@ end
## Testing
-Make sure that your migration works for databases with data. An
-empty database does not guarantee that your migration is correct.
-
-Make sure your migration can be reversed.
+See the [Testing Rails migrations](testing_guide/testing_migrations_guide.md) style guide.
## Data migration
@@ -481,5 +521,5 @@ by an integer. For example: `users` would turn into `users0`
### Moving migrations from EE to CE
When migrations need to be moved from GitLab Enterprise Edition to GitLab Community Edition,
-a migration file should be moved from `ee/db/{post_,}migrate` directory in the `gitlab-ee` project to `db/{post_,}migrate` directory in the `gitlab-ce` project. This way
+a migration file should be moved from `ee/db/{post_,}migrate` directory in the `gitlab` project to `db/{post_,}migrate` directory in the `gitlab-foss` project. This way
the schema number remains intact, there is no need to modify old migrations, and proper columns, tables or data are added in the Community Edition.
diff --git a/doc/development/namespaces_storage_statistics.md b/doc/development/namespaces_storage_statistics.md
index f8aea10097d..648f189a826 100644
--- a/doc/development/namespaces_storage_statistics.md
+++ b/doc/development/namespaces_storage_statistics.md
@@ -14,11 +14,11 @@ storage consumed by a group, and allow easy management.
## Problem
In GitLab, we update the project storage statistics through a
-[callback](https://gitlab.com/gitlab-org/gitlab-foss/blob/v12.2.0.pre/app/models/project.rb#L90)
+[callback](https://gitlab.com/gitlab-org/gitlab/blob/4ab54c2233e91f60a80e5b6fa2181e6899fdcc3e/app/models/project.rb#L97)
every time the project is saved.
The summary of those statistics per namespace is then retrieved
-by [`Namespaces#with_statistics`](https://gitlab.com/gitlab-org/gitlab-foss/blob/v12.2.0.pre/app/models/namespace.rb#L70) scope. Analyzing this query we noticed that:
+by [`Namespaces#with_statistics`](https://gitlab.com/gitlab-org/gitlab/blob/4ab54c2233e91f60a80e5b6fa2181e6899fdcc3e/app/models/namespace.rb#L70) scope. Analyzing this query we noticed that:
- It takes up to `1.2` seconds for namespaces with over `15k` projects.
- It can't be analyzed with [ChatOps](chatops_on_gitlabcom.md), as it times out.
diff --git a/doc/development/new_fe_guide/development/components.md b/doc/development/new_fe_guide/development/components.md
index cebdc87eab9..7cccd4b5b1b 100644
--- a/doc/development/new_fe_guide/development/components.md
+++ b/doc/development/new_fe_guide/development/components.md
@@ -7,7 +7,7 @@ We have a lot of graphing libraries in our codebase to render graphs. In an effo
We chose D3 as our library going forward because of the following features:
- [Tree shaking webpack capabilities](https://github.com/d3/d3/blob/master/CHANGES.md#changes-in-d3-40).
-- [Compatible with vue.js as well as vanilla javascript](https://github.com/d3/d3/blob/master/CHANGES.md#changes-in-d3-40).
+- [Compatible with vue.js as well as vanilla JavaScript](https://github.com/d3/d3/blob/master/CHANGES.md#changes-in-d3-40).
D3 is very popular across many projects outside of GitLab:
diff --git a/doc/development/new_fe_guide/development/performance.md b/doc/development/new_fe_guide/development/performance.md
index d41239693bf..4a85c04d8cf 100644
--- a/doc/development/new_fe_guide/development/performance.md
+++ b/doc/development/new_fe_guide/development/performance.md
@@ -2,9 +2,9 @@
## Monitoring
-We have a performance dashboard available in one of our [grafana instances](https://dashboards.gitlab.net/d/1EBTz3Dmz/sitespeed-page-summary?orgId=1). This dashboard automatically aggregates metric data from [sitespeed.io](https://www.sitespeed.io/) every 6 hours. These changes are displayed after a set number of pages are aggregated.
+We have a performance dashboard available in one of our [Grafana instances](https://dashboards.gitlab.net/d/1EBTz3Dmz/sitespeed-page-summary?orgId=1). This dashboard automatically aggregates metric data from [sitespeed.io](https://www.sitespeed.io/) every 6 hours. These changes are displayed after a set number of pages are aggregated.
-These pages can be found inside a text file in the gitlab-build-images [repository](https://gitlab.com/gitlab-org/gitlab-build-images) called [gitlab.txt](https://gitlab.com/gitlab-org/gitlab-build-images/blob/master/scripts/gitlab.txt)
+These pages can be found inside a text file in the [`gitlab-build-images` repository](https://gitlab.com/gitlab-org/gitlab-build-images) called [`gitlab.txt`](https://gitlab.com/gitlab-org/gitlab-build-images/blob/master/scripts/gitlab.txt)
Any frontend engineer can contribute to this dashboard. They can contribute by adding or removing urls of pages from this text file. Please have a [frontend monitoring expert](https://about.gitlab.com/company/team/) review your changes before assigning to a maintainer of the `gitlab-build-images` project. The changes will go live on the next scheduled run after the changes are merged into `master`.
There are 3 recommended high impact metrics to review on each page:
diff --git a/doc/development/new_fe_guide/modules/dirty_submit.md b/doc/development/new_fe_guide/modules/dirty_submit.md
index 2ad6b8b60a3..dd7d5d61c4d 100644
--- a/doc/development/new_fe_guide/modules/dirty_submit.md
+++ b/doc/development/new_fe_guide/modules/dirty_submit.md
@@ -8,7 +8,7 @@ Prevent submitting forms with no changes.
Currently handles `input`, `textarea` and `select` elements.
-Also, see [the code](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/assets/javascripts/dirty_submit/)
+Also, see [the code](https://gitlab.com/gitlab-org/gitlab/blob/master/app/assets/javascripts/dirty_submit/)
within the GitLab project.
## Usage
diff --git a/doc/development/new_fe_guide/style/javascript.md b/doc/development/new_fe_guide/style/javascript.md
index b742d567f41..d31edcb372d 100644
--- a/doc/development/new_fe_guide/style/javascript.md
+++ b/doc/development/new_fe_guide/style/javascript.md
@@ -188,8 +188,8 @@ disabled due to legacy compatibility reasons but they are in the process of bein
Do not disable specific ESLint rules. Due to technical debt, you may disable the following
rules only if you are invoking/instantiating existing code modules.
-- [no-new](http://eslint.org/docs/rules/no-new)
-- [class-method-use-this](http://eslint.org/docs/rules/class-methods-use-this)
+- [no-new](https://eslint.org/docs/rules/no-new)
+- [class-method-use-this](https://eslint.org/docs/rules/class-methods-use-this)
> Note: Disable these rules on a per line basis. This makes it easier to refactor
> in the future. E.g. use `eslint-disable-next-line` or `eslint-disable-line`.
diff --git a/doc/development/performance.md b/doc/development/performance.md
index 39fcc8ff806..786b590ec70 100644
--- a/doc/development/performance.md
+++ b/doc/development/performance.md
@@ -251,6 +251,36 @@ These results can also be placed into a PostgreSQL database by setting the
`RSPEC_PROFILING_POSTGRES_URL` variable. This is used to profile the test suite
when running in the CI environment.
+## Memory profiling
+
+One of the reasons of the increased memory footprint could be Ruby memory fragmentation.
+
+To diagnose it, you can visualize Ruby heap as described in [this post by Aaron Patterson](https://tenderlovemaking.com/2017/09/27/visualizing-your-ruby-heap.html).
+
+To start, you want to dump the heap of the process you are investigating to a JSON file.
+
+You need to run the command inside the process you are exploring, you may do that with `rbtrace`.
+`rbtrace` is already present in GitLab `Gemfile`, you just need to require it.
+It could be achieved running webserver or Sidekiq with the environment variable set to `ENABLE_RBTRACE=1`.
+
+To get the heap dump:
+
+```ruby
+bundle exec rbtrace -p <PID> -e 'File.open("heap.json", "wb") { |t| ObjectSpace.dump_all(output: t) }'
+```
+
+Having the JSON, you finally could render a picture using the script [provided by Aaron](https://gist.github.com/tenderlove/f28373d56fdd03d8b514af7191611b88) or similar:
+
+```sh
+ruby heapviz.rb heap.json
+```
+
+Fragmented Ruby heap snapshot could look like this:
+
+![Ruby heap fragmentation](img/memory_ruby_heap_fragmentation.png)
+
+Memory fragmentation could be reduced by tuning GC parameters as described in [this post by Nate Berkopec](https://www.speedshop.co/2017/12/04/malloc-doubles-ruby-memory.html), which should be considered as a tradeoff, as it may affect overall performance of memory allocation and GC cycles.
+
## Importance of Changes
When working on performance improvements, it's important to always ask yourself
diff --git a/doc/development/pipelines.md b/doc/development/pipelines.md
index 448fb0f9f5a..5954de03db4 100644
--- a/doc/development/pipelines.md
+++ b/doc/development/pipelines.md
@@ -27,6 +27,7 @@ The current stages are:
- `review`: This stage includes jobs that deploy the GitLab and Docs Review Apps.
- `qa`: This stage includes jobs that perform QA tasks against the Review App
that is deployed in the previous stage.
+- `notification`: This stage includes jobs that sends notifications about pipeline status.
- `post-test`: This stage includes jobs that build reports or gather data from
the previous stages' jobs (e.g. coverage, Knapsack metadata etc.).
- `pages`: This stage includes a job that deploys the various reports as
@@ -37,7 +38,7 @@ The current stages are:
## Default image
The default image is currently
-`dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33`.
+`gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33`.
It includes Ruby 2.6.3, Go 1.11, Git 2.22, Chrome 73, Node 12, Yarn 1.16,
PostgreSQL 9.6, and Graphics Magick 1.3.33.
@@ -57,11 +58,10 @@ each pipeline includes the following [variables](../ci/variables/README.md):
- `RAILS_ENV: "test"`
- `NODE_ENV: "test"`
- `SIMPLECOV: "true"`
-- `GIT_DEPTH: "20"`
+- `GIT_DEPTH: "50"`
- `GIT_SUBMODULE_STRATEGY: "none"`
- `GET_SOURCES_ATTEMPTS: "3"`
- `KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master.json`
-- `EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master-ee.json`
- `FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json`
- `BUILD_ASSETS_IMAGE: "false"`
- `ES_JAVA_OPTS: "-Xms256m -Xmx256m"`
@@ -92,9 +92,17 @@ These common definitions are:
for `master` and auto-deploy branches.
- `.only-review-schedules`: Same as `.only-review` but also restrict a job to
only run for [schedules](../user/project/pipelines/schedules.md).
-- `.use-pg`: Allows a job to use the `postgres:9.6.14` and `redis:alpine` services.
-- `.use-pg-10`: Allows a job to use the `postgres:10.9` and `redis:alpine` services.
+- `.only-canonical-schedules`: Only creates a job for scheduled pipelines in
+ the `gitlab-org/gitlab` and `gitlab-org/gitlab-foss` projects
+- `.use-pg9`: Allows a job to use the `postgres:9.6` and `redis:alpine` services.
+- `.use-pg10`: Allows a job to use the `postgres:10.9` and `redis:alpine` services.
+- `.use-pg9-ee`: Same as `.use-pg9` but also use the
+ `docker.elastic.co/elasticsearch/elasticsearch:5.6.12` services.
+- `.use-pg10-ee`: Same as `.use-pg10` but also use the
+ `docker.elastic.co/elasticsearch/elasticsearch:5.6.12` services.
- `.only-ee`: Only creates a job for the `gitlab` project.
+- `.only-ee-as-if-foss`: Same as `.only-ee` but simulate the FOSS project by
+ setting the `FOSS_ONLY='1'` environment variable.
## Changes detection
@@ -107,6 +115,7 @@ from a commit or MR by extending from the following CI definitions:
- `.only-qa-changes`: Allows a job to only be created upon QA-related changes.
- `.only-docs-changes`: Allows a job to only be created upon docs-related changes.
- `.only-code-qa-changes`: Allows a job to only be created upon code-related or QA-related changes.
+- `.only-graphql-changes`: Allows a job to only be created upon graphql-related changes.
**See <https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab/ci/global.gitlab-ci.yml>
for the list of exact patterns.**
@@ -119,7 +128,7 @@ execute jobs out of order for the following jobs:
```mermaid
graph RL;
A[setup-test-env];
- B["gitlab:assets:compile<br/>(master only)"];
+ B["gitlab:assets:compile pull-push-cache<br/>(master only)"];
C[gitlab:assets:compile pull-cache];
D["cache gems<br/>(master and tags only)"];
E[review-build-cng];
@@ -128,48 +137,51 @@ graph RL;
G2["schedule:review-deploy<br/>(master only)"];
H[karma];
I[jest];
- J["compile-assets<br/>(master only)"];
+ J["compile-assets pull-push-cache<br/>(master only)"];
K[compile-assets pull-cache];
L[webpack-dev-server];
M[coverage];
N[pages];
O[static-analysis];
- P["package-and-qa-manual:master<br/>(master schedule only)"];
+ P["schedule:package-and-qa<br/>(master schedule only)"];
Q[package-and-qa];
R[package-and-qa-manual];
+ S["RSpec<br/>(e.g. rspec unit pg9)"]
+ T[retrieve-tests-metadata];
subgraph "`prepare` stage"
A
F
- J
K
+ J
+ T
end
subgraph "`test` stage"
B --> |needs| A;
C --> |needs| A;
D --> |needs| A;
- H -.-> |depends on| A;
- H -.-> |depends on| J;
- H -.-> |depends on| K;
- I -.-> |depends on| A;
- I -.-> |depends on| J;
- I -.-> |depends on| K;
- L -.-> |depends on| A;
- L -.-> |depends on| J;
- L -.-> |depends on| K;
+ H -.-> |needs and depends on| A;
+ H -.-> |needs and depends on| K;
+ I -.-> |needs and depends on| A;
+ I -.-> |needs and depends on| K;
+ L -.-> |needs and depends on| A;
+ L -.-> |needs and depends on| K;
+ O -.-> |needs and depends on| A;
+ O -.-> |needs and depends on| K;
+ S -.-> |needs and depends on| A;
+ S -.-> |needs and depends on| K;
+ S -.-> |needs and depends on| T;
downtime_check --> |needs and depends on| A;
db:* --> |needs| A;
gitlab:setup --> |needs| A;
- O -.-> |depends on| A;
- O -.-> |depends on| B;
- O -.-> |depends on| C;
downtime_check --> |needs and depends on| A;
+ graphql-docs-verify --> |needs| A;
end
subgraph "`review-prepare` stage"
E --> |needs| C;
- X["schedule:review-build-cng<br/>(master schedule only)"] --> |needs| B;
+ X["schedule:review-build-cng<br/>(master schedule only)"] --> |needs| C;
end
subgraph "`review` stage"
@@ -182,13 +194,18 @@ subgraph "`qa` stage"
Q --> |needs| F;
R --> |needs| C;
R --> |needs| F;
- P --> |needs| B;
+ P --> |needs| C;
P --> |needs| F;
- review-qa-smoke -.-> |depends on| G;
- review-qa-all -.-> |depends on| G;
- review-qa-performance -.-> |depends on| G;
- X2["schedule:review-performance<br/>(master only)"] -.-> |depends on| G2;
- dast -.-> |depends on| G;
+ review-qa-smoke -.-> |needs and depends on| G;
+ review-qa-all -.-> |needs and depends on| G;
+ review-performance -.-> |needs and depends on| G;
+ X2["schedule:review-performance<br/>(master only)"] -.-> |needs and depends on| G2;
+ dast -.-> |needs and depends on| G;
+ end
+
+subgraph "`notification` stage"
+ NOTIFICATION1["schedule:package-and-qa:notify-success<br>(on_success)"] -.-> |needs| P;
+ NOTIFICATION2["schedule:package-and-qa:notify-failure<br>(on_failure)"] -.-> |needs| P;
end
subgraph "`post-test` stage"
@@ -196,7 +213,7 @@ subgraph "`post-test` stage"
end
subgraph "`pages` stage"
- N -.-> |depends on| B;
+ N -.-> |depends on| C;
N -.-> |depends on| H;
N -.-> |depends on| M;
end
diff --git a/doc/development/profiling.md b/doc/development/profiling.md
index e1d1d2e33fa..04897e770f8 100644
--- a/doc/development/profiling.md
+++ b/doc/development/profiling.md
@@ -86,8 +86,8 @@ that builds on this to add some additional niceties, such as allowing
configuration with a single Yaml file for multiple URLs, and uploading of the
profile and log output to S3.
-For GitLab.com, you can find the latest results here:
-<http://redash.gitlab.com/dashboard/gitlab-profiler-statistics>
+For GitLab.com, you can find the latest results here (restricted to GitLab Team members only):
+`https://redash.gitlab.com/dashboard/gitlab-profiler-statistics`
## Sherlock
diff --git a/doc/development/projections.md b/doc/development/projections.md
new file mode 100644
index 00000000000..9d5702da530
--- /dev/null
+++ b/doc/development/projections.md
@@ -0,0 +1,34 @@
+# Projections
+
+Projections are a way to define relations between files. Every file can have a
+"related" or "alternate" file. It's common to consider spec files to be
+"alternate" files to source files.
+
+## How to use it
+
+- Install an editor plugin that consumes projections
+- Copy `.projections.json.example` to `.projections.json`
+
+## How to customize it
+
+You can find a basic list of projection options in
+[projectionist.txt](https://github.com/tpope/vim-projectionist/blob/master/doc/projectionist.txt)
+
+## Which plugins can I use
+
+- vim
+ - [vim-projectionist](https://github.com/tpope/vim-projectionist)
+- VSCode
+ - [Alternate File](https://marketplace.visualstudio.com/items?itemName=will-wow.vscode-alternate-file)
+ - [projectionist](https://github.com/jarsen/projectionist)
+ - [jumpto](https://github.com/gmdayley/jumpto)
+- Atom
+ - [projectionist-atom](https://atom.io/packages/projectionist-atom)
+- Command-line
+ - [projectionist](https://github.com/glittershark/projectionist)
+
+## History
+
+This started as a
+[plugin for vim by tpope](https://github.com/tpope/vim-projectionist)
+It has since become editor-agnostic and ported to most modern editors.
diff --git a/doc/development/prometheus_metrics.md b/doc/development/prometheus_metrics.md
index eecce9f4f11..b479c053862 100644
--- a/doc/development/prometheus_metrics.md
+++ b/doc/development/prometheus_metrics.md
@@ -2,7 +2,7 @@
## Adding to the library
-We strive to support the 2-4 most important metrics for each common system service that supports Prometheus. If you are looking for support for a particular exporter which has not yet been added to the library, additions can be made [to the `common_metrics.yml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/prometheus/common_metrics.yml) file.
+We strive to support the 2-4 most important metrics for each common system service that supports Prometheus. If you are looking for support for a particular exporter which has not yet been added to the library, additions can be made [to the `common_metrics.yml`](https://gitlab.com/gitlab-org/gitlab/blob/master/config/prometheus/common_metrics.yml) file.
### Query identifier
diff --git a/doc/development/python_guide/index.md b/doc/development/python_guide/index.md
index 47d9d96766c..d898351345d 100644
--- a/doc/development/python_guide/index.md
+++ b/doc/development/python_guide/index.md
@@ -27,7 +27,7 @@ To install `pyenv` on Linux, you can run the command below:
curl https://pyenv.run | bash
```
-Alternatively, you may find `pypenv` available as a system package via your distro package manager.
+Alternatively, you may find `pyenv` available as a system package via your distro package manager.
You can read more about it in: <https://github.com/pyenv/pyenv-installer#prerequisites>.
diff --git a/doc/development/query_recorder.md b/doc/development/query_recorder.md
index 3ed75c87f6f..81970b45bbd 100644
--- a/doc/development/query_recorder.md
+++ b/doc/development/query_recorder.md
@@ -2,7 +2,7 @@
QueryRecorder is a tool for detecting the [N+1 queries problem](https://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations) from tests.
-> Implemented in [spec/support/query_recorder.rb](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/spec/support/helpers/query_recorder.rb) via [9c623e3e](https://gitlab.com/gitlab-org/gitlab-foss/commit/9c623e3e5d7434f2e30f7c389d13e5af4ede770a)
+> Implemented in [spec/support/query_recorder.rb](https://gitlab.com/gitlab-org/gitlab/blob/master/spec/support/helpers/query_recorder.rb) via [9c623e3e](https://gitlab.com/gitlab-org/gitlab-foss/commit/9c623e3e5d7434f2e30f7c389d13e5af4ede770a)
As a rule, merge requests [should not increase query counts](merge_request_performance_guidelines.md#query-counts). If you find yourself adding something like `.includes(:author, :assignee)` to avoid having `N+1` queries, consider using QueryRecorder to enforce this with a test. Without this, a new feature which causes an additional model to be accessed will silently reintroduce the problem.
diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md
index a144bf70a86..a6d3c008686 100644
--- a/doc/development/rake_tasks.md
+++ b/doc/development/rake_tasks.md
@@ -143,12 +143,6 @@ This will compile and minify all JavaScript and CSS assets and copy them along
with all other frontend assets (images, fonts, etc) into `/public/assets` where
they can be easily inspected.
-## Generate API documentation for project services (e.g. Slack)
-
-```
-bundle exec rake services:doc
-```
-
## Updating Emoji Aliases
To update the Emoji aliases file (used for Emoji autocomplete) you must run the
@@ -226,3 +220,26 @@ bundle exec rake db:obsolete_ignored_columns
```
Feel free to remove their definitions from their `ignored_columns` definitions.
+
+## Update GraphQL Documentation
+
+To generate GraphQL documentation based on the GitLab schema, run:
+
+```shell
+bundle exec rake gitlab:graphql:compile_docs
+```
+
+In its current state, the rake task:
+
+- Generates output for GraphQL objects.
+- Places the output at `doc/api/graphql/reference/index.md`.
+
+This uses some features from `graphql-docs` gem like its schema parser and helper methods.
+The docs generator code comes from our side giving us more flexibility, like using Haml templates and generating Markdown files.
+
+To edit the template used, please take a look at `lib/gitlab/graphql/docs/templates/default.md.haml`.
+The actual renderer is at `Gitlab::Graphql::Docs::Renderer`.
+
+`@parsed_schema` is an instance variable that the `graphql-docs` gem expects to have available.
+`Gitlab::Graphql::Docs::Helper` defines the `object` method we currently use. This is also where you
+should implement any new methods for new types you'd like to display.
diff --git a/doc/development/repository_mirroring.md b/doc/development/repository_mirroring.md
index dc51bf80e92..8521d6fcd30 100644
--- a/doc/development/repository_mirroring.md
+++ b/doc/development/repository_mirroring.md
@@ -2,10 +2,9 @@
## Deep Dive
-In December 2018, Tiago Botelho hosted a [Deep Dive] on GitLab's [Pull Repository Mirroring functionality] to share his domain specific knowledge with anyone who may work in this part of the code base in the future. You can find the [recording on YouTube], and the slides on [Google Slides] and in [PDF]. Everything covered in this deep dive was accurate as of GitLab 11.6, and while specific details may have changed since then, it should still serve as a good introduction.
+In December 2018, Tiago Botelho hosted a [Deep Dive] on GitLab's [Pull Repository Mirroring functionality] to share his domain specific knowledge with anyone who may work in this part of the code base in the future. You can find the [recording on YouTube], and the slides in [PDF]. Everything covered in this deep dive was accurate as of GitLab 11.6, and while specific details may have changed since then, it should still serve as a good introduction.
[Deep Dive]: https://gitlab.com/gitlab-org/create-stage/issues/1
[Pull Repository Mirroring functionality]: ../workflow/repository_mirroring.md#pulling-from-a-remote-repository-starter
[recording on YouTube]: https://www.youtube.com/watch?v=sSZq0fpdY-Y
-[Google Slides]: https://docs.google.com/presentation/d/17BTT6M6RyNRckV4wTt-dr07nIfBvD325_xVBoLtSoPM/edit?usp=sharing
[PDF]: https://gitlab.com/gitlab-org/create-stage/uploads/8693404888a941fd851f8a8ecdec9675/Gitlab_Create_-_Pull_Mirroring_Deep_Dive.pdf
diff --git a/doc/development/routing.md b/doc/development/routing.md
index 0b95477974b..e0741e78821 100644
--- a/doc/development/routing.md
+++ b/doc/development/routing.md
@@ -57,9 +57,9 @@ client or other software requires something different.
Examples:
```
-gitlab-org/gitlab-ce/-/activity
-gitlab-org/gitlab-ce/-/jobs/123
-gitlab-org/gitlab-ce/-/settings/repository
+gitlab-org/gitlab/-/activity
+gitlab-org/gitlab/-/jobs/123
+gitlab-org/gitlab/-/settings/repository
gitlab-org/serverless/runtimes/-/settings/repository
```
diff --git a/doc/development/shell_commands.md b/doc/development/shell_commands.md
index 1300c99622e..aa326cbdd34 100644
--- a/doc/development/shell_commands.md
+++ b/doc/development/shell_commands.md
@@ -5,9 +5,9 @@ These guidelines are meant to make your code more reliable _and_ secure.
## References
-- [Google Ruby Security Reviewer's Guide](https://code.google.com/p/ruby-security/wiki/Guide)
+- [Google Ruby Security Reviewer's Guide](https://code.google.com/archive/p/ruby-security/wikis/Guide.wiki)
- [OWASP Command Injection](https://www.owasp.org/index.php/Command_Injection)
-- [Ruby on Rails Security Guide Command Line Injection](http://guides.rubyonrails.org/security.html#command-line-injection)
+- [Ruby on Rails Security Guide Command Line Injection](https://guides.rubyonrails.org/security.html#command-line-injection)
## Use File and FileUtils instead of shell commands
@@ -87,7 +87,7 @@ $ cat -- -l
hello
```
-In the GitLab codebase, we avoid the option/argument ambiguity by _always_ using `--`.
+In the GitLab codebase, we avoid the option/argument ambiguity by _always_ using `--` for commands that support it.
```ruby
# Wrong
diff --git a/doc/development/sidekiq_style_guide.md b/doc/development/sidekiq_style_guide.md
index 8e268224c98..d52a3e652e3 100644
--- a/doc/development/sidekiq_style_guide.md
+++ b/doc/development/sidekiq_style_guide.md
@@ -27,7 +27,7 @@ While different workers cannot share a queue, they can share a queue namespace.
Defining a queue namespace for a worker makes it possible to start a Sidekiq
process that automatically handles jobs for all workers in that namespace,
without needing to explicitly list all their queue names. If, for example, all
-workers that are managed by sidekiq-cron use the `cronjob` queue namespace, we
+workers that are managed by `sidekiq-cron` use the `cronjob` queue namespace, we
can spin up a Sidekiq process specifically for these kinds of scheduled jobs.
If a new worker using the `cronjob` namespace is added later on, the Sidekiq
process will automatically pick up jobs for that worker too (after having been
@@ -61,6 +61,56 @@ the extra jobs will take resources away from jobs from workers that were already
there, if the resources available to the Sidekiq process handling the namespace
are not adjusted appropriately.
+## Feature Categorization
+
+Each Sidekiq worker, or one of its ancestor classes, must declare a
+`feature_category` attribute. This attribute maps each worker to a feature
+category. This is done for error budgeting, alert routing, and team attribution
+for Sidekiq workers.
+
+The declaration uses the `feature_category` class method, as shown below.
+
+```ruby
+class SomeScheduledTaskWorker
+ include ApplicationWorker
+
+ # Declares that this feature is part of the
+ # `continuous_integration` feature category
+ feature_category :continuous_integration
+
+ # ...
+end
+```
+
+The list of value values can be found in the file `config/feature_categories.yml`.
+This file is, in turn generated from the [`stages.yml` from the GitLab Company Handbook
+source](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml).
+
+### Updating `config/feature_categories.yml`
+
+Occassionally new features will be added to GitLab stages. When this occurs, you
+can automatically update `config/feature_categories.yml` by running
+`scripts/update-feature-categories`. This script will fetch and parse
+[`stages.yml`](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml)
+and generare a new version of the file, which needs to be checked into source control.
+
+### Excluding Sidekiq workers from feature categorization
+
+A few Sidekiq workers, that are used across all features, cannot be mapped to a
+single category. These should be declared as such using the `feature_category_not_owned!`
+ declaration, as shown below:
+
+```ruby
+class SomeCrossCuttingConcernWorker
+ include ApplicationWorker
+
+ # Declares that this worker does not map to a feature category
+ feature_category_not_owned!
+
+ # ...
+end
+```
+
## Tests
Each Sidekiq worker must be tested using RSpec, just like any other class. These
diff --git a/doc/development/sql.md b/doc/development/sql.md
index 2584dcfb4ca..8a8204ffe87 100644
--- a/doc/development/sql.md
+++ b/doc/development/sql.md
@@ -74,7 +74,7 @@ USING GIN(column_name gin_trgm_ops);
```
The key here is the `GIN(column_name gin_trgm_ops)` part. This creates a [GIN
-index][gin-index] with the operator class set to `gin_trgm_ops`. These indexes
+index](https://www.postgresql.org/docs/current/gin.html) with the operator class set to `gin_trgm_ops`. These indexes
_can_ be used by `ILIKE` / `LIKE` and can lead to greatly improved performance.
One downside of these indexes is that they can easily get quite large (depending
on the amount of data indexed).
@@ -247,8 +247,6 @@ WHERE EXISTS (
)
```
-[gin-index]: http://www.postgresql.org/docs/current/static/gin.html
-
## `.find_or_create_by` is not atomic
The inherent pattern with methods like `.find_or_create_by` and
diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md
index a8cbf3aaa5b..32e079f915c 100644
--- a/doc/development/testing_guide/best_practices.md
+++ b/doc/development/testing_guide/best_practices.md
@@ -51,7 +51,7 @@ bundle exec rspec spec/[path]/[to]/[spec].rb
methods.
- Use `context` to test branching logic.
- Try to match the ordering of tests to the ordering within the class.
-- Try to follow the [Four-Phase Test][four-phase-test] pattern, using newlines
+- Try to follow the [Four-Phase Test](https://thoughtbot.com/blog/four-phase-test) pattern, using newlines
to separate phases.
- Use `Gitlab.config.gitlab.host` rather than hard coding `'localhost'`
- Don't assert against the absolute value of a sequence-generated attribute (see
@@ -62,8 +62,6 @@ bundle exec rspec spec/[path]/[to]/[spec].rb
use a Capyabara matcher beforehand (e.g. `find('.js-foo')`) to ensure the element actually exists.
- Use `focus: true` to isolate parts of the specs you want to run.
-[four-phase-test]: https://robots.thoughtbot.com/four-phase-test
-
### System / Feature tests
NOTE: **Note:** Before writing a new system test, [please consider **not**
@@ -115,7 +113,7 @@ Finished in 34.51 seconds (files took 0.76702 seconds to load)
1 example, 0 failures
```
-Note: `live_debug` only works on javascript enabled specs.
+Note: `live_debug` only works on JavaScript enabled specs.
#### Run `:js` spec in a visible browser
@@ -160,7 +158,7 @@ really fast since:
- Gems loading is skipped
- Rails app boot is skipped
-- gitlab-shell and Gitaly setup are skipped
+- GitLab Shell and Gitaly setup are skipped
- Test repositories setup are skipped
`fast_spec_helper` also support autoloading classes that are located inside the
@@ -185,7 +183,7 @@ instead of 30+ seconds in case of a regular `spec_helper`.
### `let` variables
GitLab's RSpec suite has made extensive use of `let`(along with it strict, non-lazy
-version `let!`) variables to reduce duplication. However, this sometimes [comes at the cost of clarity][lets-not],
+version `let!`) variables to reduce duplication. However, this sometimes [comes at the cost of clarity](https://thoughtbot.com/blog/lets-not),
so we need to set some guidelines for their use going forward:
- `let!` variables are preferable to instance variables. `let` variables
@@ -204,10 +202,51 @@ so we need to set some guidelines for their use going forward:
order is required, otherwise `let` will suffice. Remember that `let` is lazy and won't
be evaluated until it is referenced.
-[lets-not]: https://robots.thoughtbot.com/lets-not
+### Common test setup
+
+In some cases, there is no need to recreate the same object for tests
+again for each example. For example, a project and a guest of that project
+is needed to test issues on the same project, one project and user will do for the entire file.
+This can be achieved by using
+[`let_it_be`](https://test-prof.evilmartians.io/#/let_it_be) variables and the
+[`before_all`](https://test-prof.evilmartians.io/#/before_all) hook
+from the [`test-prof` gem](https://rubygems.org/gems/test-prof).
+
+```
+let_it_be(:project) { create(:project) }
+let_it_be(:user) { create(:user) }
+
+before_all do
+ project.add_guest(user)
+end
+```
+
+This will result in only one `Project`, `User`, and `ProjectMember` created for this context.
+
+`let_it_be` and `before_all` are also available within nested contexts. Cleanup after the context
+is handled automatically using a transaction rollback.
+
+Note that if you modify an object defined inside a `let_it_be` block,
+then you will need to reload the object as needed, or specify the `reload`
+option to reload for every example.
+
+```
+let_it_be(:project, reload: true) { create(:project) }
+```
+
+You can also specify the `refind` option as well to completely load a
+new object.
+
+```
+let_it_be(:project, refind: true) { create(:project) }
+```
### `set` variables
+NOTE: **Note:**
+We are incrementally removing `set` in favour of `let_it_be`. See the
+[removal issue](https://gitlab.com/gitlab-org/gitlab/issues/27922).
+
In some cases there is no need to recreate the same object for tests again for
each example. For example, a project is needed to test issues on the same
project, one project will do for the entire file. This can be achieved by using
@@ -308,7 +347,7 @@ them unspecified, and look up the value after the row is created.
#### Redis
-GitLab stores two main categories of data in Redis: cached items, and sidekiq
+GitLab stores two main categories of data in Redis: cached items, and Sidekiq
jobs.
In most specs, the Rails cache is actually an in-memory store. This is replaced
@@ -532,7 +571,7 @@ GitLab uses [factory_bot] as a test fixture replacement.
- There should be only one top-level factory definition per file.
- FactoryBot methods are mixed in to all RSpec groups. This means you can (and
should) call `create(...)` instead of `FactoryBot.create(...)`.
-- Make use of [traits] to clean up definitions and usages.
+- Make use of [traits](https://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Traits) to clean up definitions and usages.
- When defining a factory, don't define attributes that are not required for the
resulting record to pass validation.
- When instantiating from a factory, don't supply attributes that aren't
@@ -541,7 +580,6 @@ GitLab uses [factory_bot] as a test fixture replacement.
[See example](https://gitlab.com/gitlab-org/gitlab-foss/commit/0b8cefd3b2385a21cfed779bd659978c0402766d).
[factory_bot]: https://github.com/thoughtbot/factory_bot
-[traits]: http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Traits
### Fixtures
@@ -549,9 +587,9 @@ All fixtures should be placed under `spec/fixtures/`.
### Repositories
-Testing some functionality, e.g., merging a merge request, requires a git
+Testing some functionality, e.g., merging a merge request, requires a Git
repository with a certain state to be present in the test environment. GitLab
-maintains the [gitlab-test](https://gitlab.com/gitlab-org/gitlab-test)
+maintains the [`gitlab-test`](https://gitlab.com/gitlab-org/gitlab-test)
repository for certain common cases - you can ensure a copy of the repository is
used with the `:repository` trait for project factories:
diff --git a/doc/development/testing_guide/ci.md b/doc/development/testing_guide/ci.md
index d9f66a827de..5bdd0a69d7f 100644
--- a/doc/development/testing_guide/ci.md
+++ b/doc/development/testing_guide/ci.md
@@ -4,27 +4,24 @@
Our current CI parallelization setup is as follows:
-1. The `knapsack` job in the prepare stage that is supposed to ensure we have a
- `knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file:
- - The `knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file is fetched
- from S3, if it's not here we initialize the file with `{}`.
-1. Each `rspec x y` job are run with `knapsack rspec` and should have an evenly
- distributed share of tests:
- - It works because the jobs have access to the
- `knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` since the "artifacts
- from all previous stages are passed by default".
+1. The `retrieve-tests-metadata` job in the `prepare` stage ensures we have a
+ `knapsack/report-master.json` file:
+ - The `knapsack/report-master.json` file is fetched from S3, if it's not here
+ we initialize the file with `{}`.
+1. Each `[rspec|rspec-ee] [unit|integration|system|geo] n m` job are run with
+ `knapsack rspec` and should have an evenly distributed share of tests:
+ - It works because the jobs have access to the `knapsack/report-master.json`
+ since the "artifacts from all previous stages are passed by default".
- the jobs set their own report path to
- `KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json`.
+ `"knapsack/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json"`.
- if knapsack is doing its job, test files that are run should be listed under
`Report specs`, not under `Leftover specs`.
-1. The `update-knapsack` job takes all the
- `knapsack/${CI_PROJECT_NAME}/${JOB_NAME[0]}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json`
- files from the `rspec x y` jobs and merge them all together into a single
- `knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file that is then
- uploaded to S3.
-
-After that, the next pipeline will use the up-to-date
-`knapsack/${CI_PROJECT_NAME}/rspec_report-master.json` file.
+1. The `update-tests-metadata` job (which only runs on scheduled pipelines for
+ [the canonical project](https://gitlab.com/gitlab-org/gitlab) takes all the
+ `knapsack/rspec*_pg_*.json` files and merge them all together into a single
+ `knapsack/report-master.json` file that is then uploaded to S3.
+
+After that, the next pipeline will use the up-to-date `knapsack/report-master.json` file.
## Monitoring
diff --git a/doc/development/testing_guide/end_to_end/best_practices.md b/doc/development/testing_guide/end_to_end/best_practices.md
index 2200069ecfd..042879b47aa 100644
--- a/doc/development/testing_guide/end_to_end/best_practices.md
+++ b/doc/development/testing_guide/end_to_end/best_practices.md
@@ -53,3 +53,15 @@ In summary:
- **Do**: Split tests across separate files, unless the tests share expensive setup.
- **Don't**: Put new tests in an existing file without considering the impact on parallelization.
+
+## Limit the use of `before(:all)` hook
+
+Limit the use of `before(:all)` to perform setup tasks with only API calls, non UI operations
+or basic UI operations such as login.
+
+We use [`capybara-screenshot`](https://github.com/mattheworiordan/capybara-screenshot) library to automatically save screenshots on failures.
+This library [saves the screenshots in the RSpec's `after` hook](https://github.com/mattheworiordan/capybara-screenshot/blob/master/lib/capybara-screenshot/rspec.rb#L97).
+[If there is a failure in `before(:all)`, the `after` hook is not called](https://github.com/rspec/rspec-core/pull/2652/files#diff-5e04af96d5156e787f28d519a8c99615R148) and so the screenshots are not saved.
+
+Given this fact, we should limit the use of `before(:all)` to only those operations where a screenshot is not
+necessary in case of failure and QA logs would be enough for debugging.
diff --git a/doc/development/testing_guide/end_to_end/index.md b/doc/development/testing_guide/end_to_end/index.md
index 9685a61d0c1..a9fb4be284e 100644
--- a/doc/development/testing_guide/end_to_end/index.md
+++ b/doc/development/testing_guide/end_to_end/index.md
@@ -16,14 +16,14 @@ a black-box testing framework for the API and the UI.
### Testing nightly builds
We run scheduled pipeline each night to test nightly builds created by Omnibus.
-You can find these nightly pipelines at [gitlab-org/quality/nightly/pipelines][quality-nightly-pipelines].
-Results are reported in the `#qa-nightly` Slack channel.
+You can find these nightly pipelines at `https://gitlab.com/gitlab-org/quality/nightly/pipelines`
+(need Developer access permissions). Results are reported in the `#qa-nightly` Slack channel.
### Testing staging
We run scheduled pipeline each night to test staging.
-You can find these nightly pipelines at [gitlab-org/quality/staging/pipelines][quality-staging-pipelines].
-Results are reported in the `#qa-staging` Slack channel.
+You can find these nightly pipelines at `https://gitlab.com/gitlab-org/quality/staging/pipelines`
+(need developer access permissions). Results are reported in the `#qa-staging` Slack channel.
### Testing code in merge requests
@@ -52,7 +52,7 @@ graph LR
A1 -.->|1. Triggers an omnibus-gitlab pipeline and wait for it to be done| A2
B2[`Trigger-qa` stage<br>`Trigger:qa-test` job] -.->|2. Triggers a gitlab-qa pipeline and wait for it to be done| A3
-subgraph "gitlab-ce/ee pipeline"
+subgraph "gitlab-foss/gitlab pipeline"
A1[`test` stage<br>`package-and-qa-manual` job]
end
@@ -135,20 +135,16 @@ Continued reading:
You can ask question in the `#quality` channel on Slack (GitLab internal) or
you can find an issue you would like to work on in
-[the `gitlab-ce` issue tracker][gitlab-ce-issues],
-[the `gitlab-ee` issue tracker][gitlab-ce-issues], or
+[the `gitlab` issue tracker][gitlab-issues], or
[the `gitlab-qa` issue tracker][gitlab-qa-issues].
[omnibus-gitlab]: https://gitlab.com/gitlab-org/omnibus-gitlab
[gitlab-qa]: https://gitlab.com/gitlab-org/gitlab-qa
[gitlab-qa-readme]: https://gitlab.com/gitlab-org/gitlab-qa/tree/master/README.md
-[quality-nightly-pipelines]: https://gitlab.com/gitlab-org/quality/nightly/pipelines
-[quality-staging-pipelines]: https://gitlab.com/gitlab-org/quality/staging/pipelines
[review-apps]: ../review_apps.md
[gitlab-qa-architecture]: https://gitlab.com/gitlab-org/gitlab-qa/blob/master/docs/architecture.md
[gitlab-qa-issues]: https://gitlab.com/gitlab-org/gitlab-qa/issues?label_name%5B%5D=new+scenario
-[gitlab-ce-issues]: https://gitlab.com/gitlab-org/gitlab-foss/issues?label_name[]=QA&label_name[]=test
-[gitlab-ee-issues]: https://gitlab.com/gitlab-org/gitlab/issues?label_name[]=QA&label_name[]=test
+[gitlab-issues]: https://gitlab.com/gitlab-org/gitlab/issues?label_name[]=QA&label_name[]=test
[test environment orchestration scenarios]: https://gitlab.com/gitlab-org/gitlab-qa/tree/master/lib/gitlab/qa/scenario
[instance-level scenarios]: https://gitlab.com/gitlab-org/gitlab-foss/tree/master/qa/qa/specs/features
[Page objects documentation]: https://gitlab.com/gitlab-org/gitlab/tree/master/qa/qa/page/README.md
diff --git a/doc/development/testing_guide/end_to_end/page_objects.md b/doc/development/testing_guide/end_to_end/page_objects.md
index 8820b54fa87..28111c18378 100644
--- a/doc/development/testing_guide/end_to_end/page_objects.md
+++ b/doc/development/testing_guide/end_to_end/page_objects.md
@@ -2,7 +2,7 @@
In GitLab QA we are using a known pattern, called _Page Objects_.
-This means that we have built an abstraction for all GitLab pages that we use
+This means that we have built an abstraction for all pages in GitLab that we use
to drive GitLab QA scenarios. Whenever we do something on a page, like filling
in a form, or clicking a button, we do that only through a page object
associated with this area of GitLab.
diff --git a/doc/development/testing_guide/end_to_end/quick_start_guide.md b/doc/development/testing_guide/end_to_end/quick_start_guide.md
index f5a46d574b0..2457d8ada5a 100644
--- a/doc/development/testing_guide/end_to_end/quick_start_guide.md
+++ b/doc/development/testing_guide/end_to_end/quick_start_guide.md
@@ -24,7 +24,7 @@ If you don't exactly understand what we mean by **not everything needs to happen
### 0. Are end-to-end tests needed?
-At GitLab we respect the [test pyramid](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/testing_guide/testing_levels.md), and so, we recommend you check the code coverage of a specific feature before writing end-to-end tests, for both [CE](https://gitlab-org.gitlab.io/gitlab-ce/coverage-ruby/#_AllFiles) and [EE](https://gitlab-org.gitlab.io/gitlab-ee/coverage-ruby/#_AllFiles) projects.
+At GitLab we respect the [test pyramid](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/testing_guide/testing_levels.md), and so, we recommend you check the code coverage of a specific feature before writing end-to-end tests, for both [CE](https://gitlab-org.gitlab.io/gitlab-foss/coverage-ruby/#_AllFiles) and [EE](https://gitlab-org.gitlab.io/gitlab/coverage-ruby/#_AllFiles) projects.
Sometimes you may notice that there is already good coverage in other test levels, and we can stay confident that if we break a feature, we will still have quick feedback about it, even without having end-to-end tests.
@@ -38,7 +38,7 @@ The GitLab QA end-to-end tests are organized by the different [stages in the Dev
> There may be sub-directories inside the stages directories, for different features. For example: `.../browser_ui/2_plan/ee_epics/` and `.../browser_ui/2_plan/issues/`.
-Now, let's say we want to create tests for the [scoped labels](https://about.gitlab.com/2019/04/22/gitlab-11-10-released/#scoped-labels) feature, available on GitLab EE Premium (this feature is part of the Plan stage.)
+Now, let's say we want to create tests for the [scoped labels](https://about.gitlab.com/blog/2019/04/22/gitlab-11-10-released/#scoped-labels) feature, available on GitLab EE Premium (this feature is part of the Plan stage.)
> Because these tests are for a feature available only on GitLab EE, we need to create them in the [EE repository](https://gitlab.com/gitlab-org/gitlab).
diff --git a/doc/development/testing_guide/flaky_tests.md b/doc/development/testing_guide/flaky_tests.md
index 8e73b3d9ae9..0823c2e02b8 100644
--- a/doc/development/testing_guide/flaky_tests.md
+++ b/doc/development/testing_guide/flaky_tests.md
@@ -51,7 +51,7 @@ is detected in any other branch (`flaky-examples-check` job). In the future, the
This was originally implemented in: <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/13021>.
[rspec-retry]: https://github.com/NoRedInk/rspec-retry
-[`spec/spec_helper.rb`]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/spec/spec_helper.rb
+[`spec/spec_helper.rb`]: https://gitlab.com/gitlab-org/gitlab/blob/master/spec/spec_helper.rb
## Problems we had in the past at GitLab
@@ -61,7 +61,7 @@ This was originally implemented in: <https://gitlab.com/gitlab-org/gitlab-foss/m
- [Capybara.reset_session! should be called before requests are blocked](https://gitlab.com/gitlab-org/gitlab-foss/issues/33779): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/12224>
- FFaker generates funky data that tests are not ready to handle (and tests should be predictable so that's bad!):
- [Make `spec/mailers/notify_spec.rb` more robust](https://gitlab.com/gitlab-org/gitlab-foss/issues/20121): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/10015>
- - [Transient failure in spec/requests/api/commits_spec.rb](https://gitlab.com/gitlab-org/gitlab-foss/issues/27988#note_25342521): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/9944>
+ - [Transient failure in `spec/requests/api/commits_spec.rb`](https://gitlab.com/gitlab-org/gitlab-foss/issues/27988#note_25342521): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/9944>
- [Replace FFaker factory data with sequences](https://gitlab.com/gitlab-org/gitlab-foss/issues/29643): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/10184>
- [Transient failure in spec/finders/issues_finder_spec.rb](https://gitlab.com/gitlab-org/gitlab-foss/issues/30211#note_26707685): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/10404>
@@ -80,6 +80,9 @@ This was originally implemented in: <https://gitlab.com/gitlab-org/gitlab-foss/m
- [Bis](https://gitlab.com/gitlab-org/gitlab-foss/issues/34609#note_34048715): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/12604>
- [Bis](https://gitlab.com/gitlab-org/gitlab-foss/issues/34698#note_34276286): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/12664>
- [Assert against the underlying database state instead of against a page's content](https://gitlab.com/gitlab-org/gitlab-foss/issues/31437): <https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/10934>
+- In JS tests, shifting elements can cause Capybara to misclick when the element moves at the exact time Capybara sends the click
+ - [Dropdowns rendering upward or downward due to window size and scroll position](https://gitlab.com/gitlab-org/gitlab/merge_requests/17660)
+ - [Lazy loaded images can cause Capybara to misclick](https://gitlab.com/gitlab-org/gitlab/merge_requests/18713)
#### Capybara viewport size related issues
diff --git a/doc/development/testing_guide/frontend_testing.md b/doc/development/testing_guide/frontend_testing.md
index da843218d8b..314995ca9b3 100644
--- a/doc/development/testing_guide/frontend_testing.md
+++ b/doc/development/testing_guide/frontend_testing.md
@@ -38,7 +38,7 @@ which could arise (especially with testing against browser specific features).
- Jest runs in a Node.js environment, not in a browser. Support for running Jest tests in a browser [is planned](https://gitlab.com/gitlab-org/gitlab-foss/issues/58205).
- Because Jest runs in a Node.js environment, it uses [jsdom](https://github.com/jsdom/jsdom) by default. See also its [limitations](#limitations-of-jsdom) below.
- Jest does not have access to Webpack loaders or aliases.
- The aliases used by Jest are defined in its [own config](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/jest.config.js).
+ The aliases used by Jest are defined in its [own config](https://gitlab.com/gitlab-org/gitlab/blob/master/jest.config.js).
- All calls to `setTimeout` and `setInterval` are mocked away. See also [Jest Timer Mocks](https://jestjs.io/docs/en/timer-mocks).
- `rewire` is not required because Jest supports mocking modules. See also [Manual Mocks](https://jestjs.io/docs/en/manual-mocks).
- No [context object](https://jasmine.github.io/tutorials/your_first_suite#section-The_%3Ccode%3Ethis%3C/code%3E_keyword) is passed to tests in Jest.
@@ -67,13 +67,13 @@ Running `yarn jest-debug` will run Jest in debug mode, allowing you to debug/ins
### Timeout error
The default timeout for Jest is set in
-[`/spec/frontend/test_setup.js`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/spec/frontend/test_setup.js).
+[`/spec/frontend/test_setup.js`](https://gitlab.com/gitlab-org/gitlab/blob/master/spec/frontend/test_setup.js).
If your test exceeds that time, it will fail.
If you cannot improve the performance of the tests, you can increase the timeout
for a specific test using
-[`setTestTimeout`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/spec/frontend/helpers/timeout.js).
+[`setTestTimeout`](https://gitlab.com/gitlab-org/gitlab/blob/master/spec/frontend/helpers/timeout.js).
```javascript
import { setTestTimeout } from 'helpers/timeout';
@@ -388,7 +388,7 @@ it('renders something', done => {
##### `setTimeout()` / `setInterval()` in application
If the application itself is waiting for some time, mock await the waiting. In Jest this is already
-[done by default](https://gitlab.com/gitlab-org/gitlab-foss/blob/a2128edfee799e49a8732bfa235e2c5e14949c68/jest.config.js#L47)
+[done by default](https://gitlab.com/gitlab-org/gitlab/blob/a2128edfee799e49a8732bfa235e2c5e14949c68/jest.config.js#L47)
(see also [Jest Timer Mocks](https://jestjs.io/docs/en/timer-mocks)). In Karma you can use the
[Jasmine mock clock](https://jasmine.github.io/api/2.9/Clock.html).
@@ -482,7 +482,7 @@ As long as the fixtures don't change, `yarn test` is sufficient (and saves you s
While developing locally, it may be helpful to keep Karma running so that you
can get instant feedback on as you write tests and modify code. To do this
-you can start Karma with `yarn run karma-start`. It will compile the javascript
+you can start Karma with `yarn run karma-start`. It will compile the JavaScript
assets and run a server at `http://localhost:9876/` where it will automatically
run the tests on any browser which connects to it. You can enter that url on
multiple browsers at once to have it run the tests on each in parallel.
@@ -516,11 +516,6 @@ glob otherwise your shell may split it into multiple arguments:
yarn karma -f 'spec/javascripts/ide/**/file_spec.js'
```
-## RSpec feature integration tests
-
-Information on setting up and running RSpec integration tests with
-[Capybara] can be found in the [Testing Best Practices](best_practices.md).
-
## Frontend test fixtures
Code that is added to HAML templates (in `app/views/`) or makes Ajax requests to the backend has tests that require HTML or JSON from the backend.
@@ -598,7 +593,6 @@ end
[karma]: http://karma-runner.github.io/
[vue-test]: ../fe_guide/vue.md#testing-vue-components
[rspec]: https://github.com/rspec/rspec-rails#feature-specs
-[capybara]: https://github.com/teamcapybara/capybara
[jasmine]: https://jasmine.github.io/
## Overview of Frontend Testing Levels
@@ -955,7 +949,11 @@ graph RL
In contrast to [frontend integration tests](#frontend-integration-tests), feature tests make requests against the real backend instead of using fixtures.
This also implies that database queries are executed which makes this category significantly slower.
-See also the [RSpec testing guidelines](../testing_guide/best_practices.md#rspec).
+See also
+
+- The [RSpec testing guidelines](../testing_guide/best_practices.md#rspec).
+- System / Feature tests in the [Testing Best Practices](best_practices.md#system--feature-tests).
+- [Issue #26159](https://gitlab.com/gitlab-org/gitlab/issues/26159) which aims at combine those guidelines with this page.
```mermaid
graph RL
@@ -1048,7 +1046,7 @@ testAction(
);
```
-Check an example in [spec/javascripts/ide/stores/actions_spec.jsspec/javascripts/ide/stores/actions_spec.js](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/spec/javascripts/ide/stores/actions_spec.js).
+Check an example in [spec/javascripts/ide/stores/actions_spec.jsspec/javascripts/ide/stores/actions_spec.js](https://gitlab.com/gitlab-org/gitlab/blob/master/spec/javascripts/ide/stores/actions_spec.js).
### Vue Helper: `mountComponent`
diff --git a/doc/development/testing_guide/index.md b/doc/development/testing_guide/index.md
index 173471e3af8..25da72b6b6a 100644
--- a/doc/development/testing_guide/index.md
+++ b/doc/development/testing_guide/index.md
@@ -19,7 +19,7 @@ integration testing.
Following are two great articles that everyone should read to understand what
automated testing means, and what are its principles:
-- [Five Factor Testing](https://www.devmynd.com/blog/five-factor-testing): Why do we need tests?
+- [Five Factor Testing](https://madeintandem.com/blog/five-factor-testing/): Why do we need tests?
- [Principles of Automated Testing](http://www.lihaoyi.com/post/PrinciplesofAutomatedTesting.html): Levels of testing. Prioritize tests. Cost of tests.
## [Testing levels](testing_levels.md)
@@ -60,6 +60,10 @@ Everything you should know about how to test Rake tasks.
Everything you should know about how to run end-to-end tests using
[GitLab QA][gitlab-qa] testing framework.
+## [Migrations tests](testing_migrations_guide.md)
+
+Everything you should know about how to test migrations.
+
[Return to Development documentation](../README.md)
[RSpec]: https://github.com/rspec/rspec-rails#feature-specs
diff --git a/doc/development/testing_guide/review_apps.md b/doc/development/testing_guide/review_apps.md
index 8ce25376a05..3dd403f148e 100644
--- a/doc/development/testing_guide/review_apps.md
+++ b/doc/development/testing_guide/review_apps.md
@@ -16,23 +16,23 @@ graph TD
review-build-cng -->|once the `review-build-cng` job is done| review-deploy
review-deploy -->|once the `review-deploy` job is done| review-qa-smoke
-subgraph "1. gitlab-ce/ee `prepare` stage"
+subgraph "1. gitlab-foss/gitlab `prepare` stage"
build-qa-image
end
-subgraph "2. gitlab-ce/ee `test` stage"
+subgraph "2. gitlab-foss/gitlab `test` stage"
gitlab:assets:compile
end
-subgraph "3. gitlab-ce/ee `review-prepare` stage"
+subgraph "3. gitlab-foss/gitlab `review-prepare` stage"
review-build-cng
end
-subgraph "4. gitlab-ce/ee `review` stage"
+subgraph "4. gitlab-foss/gitlab `review` stage"
review-deploy["review-deploy<br><br>Helm deploys the Review App using the Cloud<br/>Native images built by the CNG-mirror pipeline.<br><br>Cloud Native images are deployed to the `review-apps-ce` or `review-apps-ee`<br>Kubernetes (GKE) cluster, in the GCP `gitlab-review-apps` project."]
end
-subgraph "5. gitlab-ce/ee `qa` stage"
+subgraph "5. gitlab-foss/gitlab `qa` stage"
review-qa-smoke[review-qa-smoke<br><br>gitlab-qa runs the smoke suite against the Review App.]
end
@@ -142,7 +142,7 @@ their node under pressure.
### Log into my Review App
The default username is `root` and its password can be found in the 1Password
-secure note named **gitlab-{ce,ee} Review App's root password**.
+secure note named `gitlab-{ce,ee} Review App's root password`.
### Enable a feature flag for my Review App
@@ -193,7 +193,7 @@ The following items may help diagnose this:
- [Instance Group size in GCP](https://console.cloud.google.com/compute/instanceGroups/details/us-central1-b/gke-review-apps-ee-preemp-n1-standard-8affc0f5-grp?project=gitlab-review-apps&tab=monitoring&graph=GCE_SIZE&duration=P30D) - aids in identifying load spikes on the cluster. Kubernetes will add nodes up to 220 based on total resource requests.
- `kubectl top nodes --sort-by=cpu` - can identify if node spikes are common or load on specific nodes which may get rebalanced by the Kubernetes scheduler.
- `kubectl top pods --sort-by=cpu` -
-- [K9s] - K9s is a powerful command line dashboard which allows you to filter by labels. This can help identify trends with apps exceeding the [review-app resource requests](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/scripts/review_apps/base-config.yaml). Kubernetes will schedule pods to nodes based on resource requests and allow for CPU usage up to the limits.
+- [K9s] - K9s is a powerful command line dashboard which allows you to filter by labels. This can help identify trends with apps exceeding the [review-app resource requests](https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/review_apps/base-config.yaml). Kubernetes will schedule pods to nodes based on resource requests and allow for CPU usage up to the limits.
- In K9s you can sort or add filters by typing the `/` character
- `-lrelease=<review-app-slug>` - filters down to all pods for a release. This aids in determining what is having issues in a single deployment
- `-lapp=<app>` - filters down to all pods for a specific app. This aids in determining resource usage by app.
@@ -232,10 +232,10 @@ using `v232`.
For the record, the debugging steps to find out this issue were:
-1. Switch kubectl context to review-apps-ce (we recommend using [kubectx](https://kubectx.dev/))
+1. Switch kubectl context to review-apps-ce (we recommend using [kubectx](https://github.com/ahmetb/kubectx/))
1. `kubectl get pods | grep dns`
1. `kubectl describe pod <pod name>` & confirm exact error message
-1. Web search for exact error message, following rabbit hole to [a relevant kubernetes bug report](https://github.com/kubernetes/kubernetes/issues/57345)
+1. Web search for exact error message, following rabbit hole to [a relevant Kubernetes bug report](https://github.com/kubernetes/kubernetes/issues/57345)
1. Access the node over SSH via the GCP console (**Computer Engine > VM
instances** then click the "SSH" button for the node where the `dns-gitlab-review-app-external-dns` pod runs)
1. In the node: `systemctl --version` => systemd 232
@@ -311,8 +311,8 @@ find a way to limit it to only us.**
[review-apps-ee]: https://console.cloud.google.com/kubernetes/clusters/details/us-central1-b/review-apps-ee?project=gitlab-review-apps
[review-apps.sh]: https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/review_apps/review-apps.sh
[automated_cleanup.rb]: https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/review_apps/automated_cleanup.rb
-[Auto-DevOps.gitlab-ci.yml]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
-[gitlab-ci-yml]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/.gitlab-ci.yml
+[Auto-DevOps.gitlab-ci.yml]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
+[gitlab-ci-yml]: https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab-ci.yml
[gitlab-k8s-integration]: ../../user/project/clusters/index.md
[K9s]: https://github.com/derailed/k9s
[password-bug]: https://gitlab.com/gitlab-org/gitlab-foss/issues/53621
diff --git a/doc/development/testing_guide/testing_levels.md b/doc/development/testing_guide/testing_levels.md
index b9436abf856..13659d66180 100644
--- a/doc/development/testing_guide/testing_levels.md
+++ b/doc/development/testing_guide/testing_levels.md
@@ -44,7 +44,7 @@ records should use stubs/doubles as much as possible.
| `config/routes.rb`, `config/routes/` | `spec/routing/` | RSpec | |
| `config/puma.example.development.rb`, `config/unicorn.rb.example` | `spec/rack_servers/` | RSpec | |
| `db/` | `spec/db/` | RSpec | |
-| `db/{post_,}migrate/` | `spec/migrations/` | RSpec | More details at [`spec/migrations/README.md`](https://gitlab.com/gitlab-org/gitlab/blob/master/spec/migrations/README.md). |
+| `db/{post_,}migrate/` | `spec/migrations/` | RSpec | More details in the [Testing Rails migrations guide](testing_migrations_guide.md). |
| `Gemfile` | `spec/dependencies/`, `spec/sidekiq/` | RSpec | |
| `lib/` | `spec/lib/` | RSpec | |
| `lib/tasks/` | `spec/tasks/` | RSpec | |
@@ -99,7 +99,7 @@ Formal definitions:
- <https://en.wikipedia.org/wiki/White-box_testing>
These kind of tests ensure the GitLab *Rails* application (i.e.
-`gitlab-ce`/`gitlab-ee`) works as expected from a *browser* point of view.
+`gitlab-foss`/`gitlab`) works as expected from a *browser* point of view.
Note that:
diff --git a/doc/development/testing_guide/testing_migrations_guide.md b/doc/development/testing_guide/testing_migrations_guide.md
new file mode 100644
index 00000000000..b28d17a4b55
--- /dev/null
+++ b/doc/development/testing_guide/testing_migrations_guide.md
@@ -0,0 +1,216 @@
+---
+type: reference
+---
+
+# Testing Rails migrations at GitLab
+
+In order to reliably check Rails migrations, we need to test them against
+a database schema.
+
+## When to write a migration test
+
+- Post migrations (`/db/post_migrate`) and background migrations
+ (`lib/gitlab/background_migration`) **must** have migration tests performed.
+- If your migration is a data migration then it **must** have a migration test.
+- Other migrations may have a migration test if necessary.
+
+## How does it work?
+
+Adding a `:migration` tag to a test signature enables some custom RSpec
+`before` and `after` hooks in our
+[`spec_helper.rb`](https://gitlab.com/gitlab-org/gitlab/blob/3b29908a64ff729c0cf6d93452fe00ab23079c75/spec%2Fspec_helper.rb#L259)
+to run.
+
+A `before` hook will revert all migrations to the point that a migration
+under test is not yet migrated.
+
+In other words, our custom RSpec hooks will find a previous migration, and
+migrate the database **down** to the previous migration version.
+
+With this approach you can test a migration against a database schema.
+
+An `after` hook will migrate the database **up** and reinstitute the latest
+schema version, so that the process does not affect subsequent specs and
+ensures proper isolation.
+
+## Testing an `ActiveRecord::Migration` class
+
+To test an `ActiveRecord::Migration` class (i.e., a
+regular migration `db/migrate` or a post-migration `db/post_migrate`), you
+will need to manually `require` the migration file because it is not
+autoloaded with Rails. Example:
+
+```ruby
+require Rails.root.join('db', 'post_migrate', '20170526185842_migrate_pipeline_stages.rb')
+```
+
+### Test helpers
+
+#### `table`
+
+Use the `table` helper to create a temporary `ActiveRecord::Base`-derived model
+for a table. [FactoryBot](https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#factories)
+**should not** be used to create data for migration specs. For example, to
+create a record in the `projects` table:
+
+```ruby
+project = table(:projects).create!(id: 1, name: 'gitlab1', path: 'gitlab1')
+```
+
+#### `migrate!`
+
+Use the `migrate!` helper to run the migration that is under test. It will not only
+run the migration, but will also bump the schema version in the `schema_migrations`
+table. It is necessary because in the `after` hook we trigger the rest of
+the migrations, and we need to know where to start. Example:
+
+```ruby
+it 'migrates successfully' do
+ # ... pre-migration expectations
+
+ migrate!
+
+ # ... post-migration expectations
+end
+```
+
+#### `reversible_migration`
+
+Use the `reversible_migration` helper to test migrations with either a
+`change` or both `up` and `down` hooks. This will test that the state of
+the application and its data after the migration becomes reversed is the
+same as it was before the migration ran in the first place. The helper:
+
+1. Runs the `before` expectations before the **up** migration.
+1. Migrates **up**.
+1. Runs the `after` expectations.
+1. Migrates **down**.
+1. Runs the `before` expectations a second time.
+
+Example:
+
+```ruby
+reversible_migration do |migration|
+ migration.before -> {
+ # ... pre-migration expectations
+ }
+
+ migration.after -> {
+ # ... post-migration expectations
+ }
+end
+```
+
+### Example database migration test
+
+This spec tests the
+[`db/post_migrate/20170526185842_migrate_pipeline_stages.rb`](https://gitlab.com/gitlab-org/gitlab/blob/v11.6.5/db/post_migrate/20170526185842_migrate_pipeline_stages.rb)
+migration. You can find the complete spec in
+[`spec/migrations/migrate_pipeline_stages_spec.rb`](https://gitlab.com/gitlab-org/gitlab/blob/v11.6.5/spec/migrations/migrate_pipeline_stages_spec.rb).
+
+```ruby
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20170526185842_migrate_pipeline_stages.rb')
+
+describe MigratePipelineStages, :migration do
+ # Create test data - pipeline and CI/CD jobs.
+ let(:jobs) { table(:ci_builds) }
+ let(:stages) { table(:ci_stages) }
+ let(:pipelines) { table(:ci_pipelines) }
+ let(:projects) { table(:projects) }
+
+ before do
+ projects.create!(id: 123, name: 'gitlab1', path: 'gitlab1')
+ pipelines.create!(id: 1, project_id: 123, ref: 'master', sha: 'adf43c3a')
+ jobs.create!(id: 1, commit_id: 1, project_id: 123, stage_idx: 2, stage: 'build')
+ jobs.create!(id: 2, commit_id: 1, project_id: 123, stage_idx: 1, stage: 'test')
+ end
+
+ # Test just the up migration.
+ it 'correctly migrates pipeline stages' do
+ expect(stages.count).to be_zero
+
+ migrate!
+
+ expect(stages.count).to eq 2
+ expect(stages.all.pluck(:name)).to match_array %w[test build]
+ end
+
+ # Test a reversible migration.
+ it 'correctly migrates up and down pipeline stages' do
+ reversible_migration do |migration|
+ # Expectations will run before the up migration,
+ # and then again after the down migration
+ migration.before -> {
+ expect(stages.count).to be_zero
+ }
+
+ # Expectations will run after the up migration.
+ migration.after -> {
+ expect(stages.count).to eq 2
+ expect(stages.all.pluck(:name)).to match_array %w[test build]
+ }
+ end
+end
+```
+
+## Testing a non-`ActiveRecord::Migration` class
+
+To test a non-`ActiveRecord::Migration` test (a background migration),
+you will need to manually provide a required schema version. Please add a
+schema tag to a context that you want to switch the database schema within.
+
+Example:
+
+```ruby
+describe SomeClass, :migration, schema: 20170608152748 do
+ # ...
+end
+```
+
+### Example background migration test
+
+This spec tests the
+[`lib/gitlab/background_migration/archive_legacy_traces.rb`](https://gitlab.com/gitlab-org/gitlab/blob/v11.6.5/lib/gitlab/background_migration/archive_legacy_traces.rb)
+background migration. You can find the complete spec on
+[`spec/lib/gitlab/background_migration/archive_legacy_traces_spec.rb`](https://gitlab.com/gitlab-org/gitlab/blob/v11.6.5/spec/lib/gitlab/background_migration/archive_legacy_traces_spec.rb)
+
+```ruby
+require 'spec_helper'
+
+describe Gitlab::BackgroundMigration::ArchiveLegacyTraces, :migration, schema: 20180529152628 do
+ include TraceHelpers
+
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+ let(:builds) { table(:ci_builds) }
+ let(:job_artifacts) { table(:ci_job_artifacts) }
+
+ before do
+ namespaces.create!(id: 123, name: 'gitlab1', path: 'gitlab1')
+ projects.create!(id: 123, name: 'gitlab1', path: 'gitlab1', namespace_id: 123)
+ @build = builds.create!(id: 1, project_id: 123, status: 'success', type: 'Ci::Build')
+ end
+
+ context 'when trace file exists at the right place' do
+ before do
+ create_legacy_trace(@build, 'trace in file')
+ end
+
+ it 'correctly archive legacy traces' do
+ expect(job_artifacts.count).to eq(0)
+ expect(File.exist?(legacy_trace_path(@build))).to be_truthy
+
+ described_class.new.perform(1, 1)
+
+ expect(job_artifacts.count).to eq(1)
+ expect(File.exist?(legacy_trace_path(@build))).to be_falsy
+ expect(File.read(archived_trace_path(job_artifacts.first))).to eq('trace in file')
+ end
+ end
+end
+```
+
+NOTE: **Note:**
+These tests do not run within a database transaction, as we use a deletion database
+cleanup strategy. Do not depend on a transaction being present.
diff --git a/doc/development/uploads.md b/doc/development/uploads.md
index 1af3e9db954..e3ff62f1d2f 100644
--- a/doc/development/uploads.md
+++ b/doc/development/uploads.md
@@ -82,7 +82,7 @@ To address this problem an HA object storage can be used and it's supported by [
Scaling NFS is outside of our support scope, and NFS is not a part of cloud native installations.
-All features that require sidekiq and do not use object storage acceleration won't work without NFS. In Kubernetes, machine boundaries translate to PODs, and in this case the uploaded file will be written into the POD private disk. Since sidekiq POD cannot reach into other pods, the operation will fail to read it.
+All features that require Sidekiq and do not use object storage acceleration won't work without NFS. In Kubernetes, machine boundaries translate to PODs, and in this case the uploaded file will be written into the POD private disk. Since Sidekiq POD cannot reach into other pods, the operation will fail to read it.
## How to select the proper level of acceleration?
@@ -92,19 +92,19 @@ We can identify three major use-cases for an upload:
1. **storage:** if we are uploading for storing a file (i.e. artifacts, packages, discussion attachments). In this case [object storage acceleration](#workhorse-object-storage-acceleration) is the proper level as it's the less resource-intensive operation. Additional information can be found on [File Storage in GitLab](file_storage.md).
1. **in-controller/synchronous processing:** if we allow processing **small files** synchronously, using [disk acceleration](#workhorse-disk-acceleration) may speed up development.
-1. **sidekiq/asynchronous processing:** Async processing must implement [object storage acceleration](#workhorse-object-storage-acceleration), the reason being that it's the only way to support Cloud Native deployments without a shared NFS.
+1. **Sidekiq/asynchronous processing:** Async processing must implement [object storage acceleration](#workhorse-object-storage-acceleration), the reason being that it's the only way to support Cloud Native deployments without a shared NFS.
For more details about currently broken feature see [epic &1802](https://gitlab.com/groups/gitlab-org/-/epics/1802).
### Handling repository uploads
-Some features involves git repository uploads without using a regular git client.
+Some features involves Git repository uploads without using a regular Git client.
Some examples are uploading a repository file from the web interface and [design management](../user/project/issues/design_management.md).
-Those uploads requires the rails controller to act as a git client in lieu of the user.
+Those uploads requires the rails controller to act as a Git client in lieu of the user.
Those operation falls into _in-controller/synchronous processing_ category, but we have no warranties on the file size.
-In case of a LFS upload, the file pointer is committed synchronously, but file upload to object storage is performed asynchronously with sidekiq.
+In case of a LFS upload, the file pointer is committed synchronously, but file upload to object storage is performed asynchronously with Sidekiq.
## Upload encodings
@@ -114,7 +114,7 @@ We have three kinds of file encoding in our uploads:
1. <i class="fa fa-check-circle"></i> **multipart**: `multipart/form-data` is the most common, a file is encoded as a part of a multipart encoded request.
1. <i class="fa fa-check-circle"></i> **body**: some APIs uploads files as the whole request body.
-1. <i class="fa fa-times-circle"></i> **JSON**: some JSON API uploads files as base64 encoded strings. This requires [gitlab-workhorse#226](https://gitlab.com/gitlab-org/gitlab-workhorse/issues/226) to be implemented.
+1. <i class="fa fa-times-circle"></i> **JSON**: some JSON API uploads files as base64 encoded strings. This will require a change to GitLab Workhorse, which [is planned](https://gitlab.com/gitlab-org/gitlab-workhorse/issues/226).
## Uploading technologies
@@ -209,10 +209,12 @@ This is the more advanced acceleration technique we have in place.
Workhorse asks rails for temporary pre-signed object storage URLs and directly uploads to object storage.
In this setup an extra rails route needs to be implemented in order to handle authorization,
-you can see an example of this in [`Projects::LfsStorageController`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/app/controllers/projects/lfs_storage_controller.rb)
-and [its routes](https://gitlab.com/gitlab-org/gitlab-foss/blob/v12.2.0/config/routes/git_http.rb#L31-32).
+you can see an example of this in [`Projects::LfsStorageController`](https://gitlab.com/gitlab-org/gitlab/blob/cc723071ad337573e0360a879cbf99bc4fb7adb9/app/controllers/projects/lfs_storage_controller.rb)
+and [its routes](https://gitlab.com/gitlab-org/gitlab/blob/cc723071ad337573e0360a879cbf99bc4fb7adb9/config/routes/git_http.rb#L31-32).
-**note:** this will fallback to _Workhorse disk acceleration_ when object storage is not enabled in the gitlab instance. The answer to the `/authorize` call will only contain a file system path.
+NOTE: **Note:**
+This will fall back to _Workhorse disk acceleration_ when object storage is not enabled
+in the GitLab instance. The answer to the `/authorize` call will only contain a file system path.
```mermaid
sequenceDiagram
@@ -267,4 +269,4 @@ sequenceDiagram
This option affect the response to the `/authorize` call. When not enabled, the API response will not contain presigned URLs and workhorse will write the file the shared disk, on the path is provided by rails, acting like object storage was disabled.
-Once the request reachs rails, it will schedule an object storage upload as a sidekiq job.
+Once the request reachs rails, it will schedule an object storage upload as a Sidekiq job.
diff --git a/doc/development/utilities.md b/doc/development/utilities.md
index 11de0d56ef3..38e416d68e4 100644
--- a/doc/development/utilities.md
+++ b/doc/development/utilities.md
@@ -2,7 +2,9 @@
We developed a number of utilities to ease development.
-## [`MergeHash`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/utils/merge_hash.rb)
+## `MergeHash`
+
+Refer to: <https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/utils/merge_hash.rb>:
- Deep merges an array of hashes:
@@ -45,7 +47,9 @@ We developed a number of utilities to ease development.
[:hello, "world", :this, :crushes, "an entire", "hash"]
```
-## [`Override`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/utils/override.rb)
+## `Override`
+
+Refer to <https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/utils/override.rb>:
- This utility could help us check if a particular method would override
another method or not. It has the same idea of Java's `@Override` annotation
@@ -90,7 +94,9 @@ We developed a number of utilities to ease development.
end
```
-## [`StrongMemoize`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/utils/strong_memoize.rb)
+## `StrongMemoize`
+
+Refer to <https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/utils/strong_memoize.rb>:
- Memoize the value even if it is `nil` or `false`.
@@ -136,7 +142,9 @@ We developed a number of utilities to ease development.
Find.new.clear_memoization(:result)
```
-## [`RequestCache`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/cache/request_cache.rb)
+## `RequestCache`
+
+Refer to <https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/cache/request_cache.rb>.
This module provides a simple way to cache values in RequestStore,
and the cache key would be based on the class name, method name,
diff --git a/doc/downgrade_ee_to_ce/README.md b/doc/downgrade_ee_to_ce/README.md
index 0dc029a4cd1..db4bbe8ae39 100644
--- a/doc/downgrade_ee_to_ce/README.md
+++ b/doc/downgrade_ee_to_ce/README.md
@@ -90,7 +90,7 @@ your GitLab installation with the Community Edition's remote, fetch the latest
changes, and checkout the latest stable branch:
```sh
-git remote set-url origin git@gitlab.com:gitlab-org/gitlab-ce.git
+git remote set-url origin git@gitlab.com:gitlab-org/gitlab-foss.git
git fetch --all
git checkout 8-x-stable
```
diff --git a/doc/gitlab-basics/create-project.md b/doc/gitlab-basics/create-project.md
index de63abe2b14..8edce515ec8 100644
--- a/doc/gitlab-basics/create-project.md
+++ b/doc/gitlab-basics/create-project.md
@@ -81,10 +81,10 @@ You can improve the existing built-in templates or contribute new ones in the
#### Custom project templates **(PREMIUM)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/6860) in
-[GitLab Premium](https://about.gitlab.com/pricing) 11.2.
+[GitLab Premium](https://about.gitlab.com/pricing/) 11.2.
-Creating new projects based on custom project templates is a convenient option to
-bootstrap a project.
+Creating new projects based on custom project templates is a convenient option for
+quickly starting projects.
Custom projects are available at the [instance-level](../user/admin_area/custom_project_templates.md)
from the **Instance** tab, or at the [group-level](../user/group/custom_project_templates.md)
diff --git a/doc/gitlab-basics/start-using-git.md b/doc/gitlab-basics/start-using-git.md
index 385f69e62ab..05329993c64 100644
--- a/doc/gitlab-basics/start-using-git.md
+++ b/doc/gitlab-basics/start-using-git.md
@@ -13,9 +13,9 @@ make sure that you have created and/or signed into an account on GitLab.
Depending on your operating system, you will need to use a shell of your preference.
Here are some suggestions:
-- [Terminal](http://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line) on macOS
+- [Terminal](https://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line) on macOS
- [GitBash](https://msysgit.github.io) on Windows
-- [Linux Terminal](http://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/) on Linux
+- [Linux Terminal](https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/) on Linux
## Check if Git has already been installed
@@ -110,8 +110,8 @@ and paste in your command line.
As an example, consider this repository path:
-- HTTPS: `https://gitlab.com/gitlab-org/gitlab-foss.git`
-- SSH: `git@gitlab.com:gitlab-org/gitlab-ce.git`
+- HTTPS: `https://gitlab.com/gitlab-org/gitlab.git`
+- SSH: `git@gitlab.com:gitlab-org/gitlab.git`
To get started, open a terminal window in the directory you wish to clone the repository
files into, and run one of the following commands.
@@ -119,13 +119,13 @@ files into, and run one of the following commands.
Clone via HTTPS:
```bash
-git clone https://gitlab.com/gitlab-org/gitlab-foss.git
+git clone https://gitlab.com/gitlab-org/gitlab.git
```
Clone via SSH:
```bash
-git clone git@gitlab.com:gitlab-org/gitlab-ce.git
+git clone git@gitlab.com:gitlab-org/gitlab.git
```
Both commands will download a copy of the files in a folder named after the project's
diff --git a/doc/install/README.md b/doc/install/README.md
index fd91527ed4c..b906deadca9 100644
--- a/doc/install/README.md
+++ b/doc/install/README.md
@@ -83,7 +83,7 @@ the above methods, provided the cloud provider supports it.
- [Install GitLab on Google Cloud Platform](google_cloud_platform/index.md): Install Omnibus GitLab on a VM in GCP.
- [Install GitLab on Azure](azure/index.md): Install Omnibus GitLab from Azure Marketplace.
- [Install GitLab on OpenShift](https://docs.gitlab.com/charts/installation/cloud/openshift.html): Install GitLab on OpenShift by using GitLab's Helm charts.
-- [Install GitLab on DC/OS](https://mesosphere.com/blog/gitlab-dcos/): Install GitLab on Mesosphere DC/OS via the [GitLab-Mesosphere integration](https://about.gitlab.com/2016/09/16/announcing-gitlab-and-mesosphere/).
-- [Install GitLab on DigitalOcean](https://about.gitlab.com/2016/04/27/getting-started-with-gitlab-and-digitalocean/): Install Omnibus GitLab on DigitalOcean.
+- [Install GitLab on DC/OS](https://d2iq.com/blog/gitlab-dcos): Install GitLab on Mesosphere DC/OS via the [GitLab-Mesosphere integration](https://about.gitlab.com/blog/2016/09/16/announcing-gitlab-and-mesosphere/).
+- [Install GitLab on DigitalOcean](https://about.gitlab.com/blog/2016/04/27/getting-started-with-gitlab-and-digitalocean/): Install Omnibus GitLab on DigitalOcean.
- _Testing only!_ [DigitalOcean and Docker Machine](digitaloceandocker.md):
Quickly test any version of GitLab on DigitalOcean using Docker Machine.
diff --git a/doc/install/aws/index.md b/doc/install/aws/index.md
index d08a50b3804..2dea763688e 100644
--- a/doc/install/aws/index.md
+++ b/doc/install/aws/index.md
@@ -43,7 +43,7 @@ Below is a diagram of the recommended architecture.
Here's a list of the AWS services we will use, with links to pricing information:
- **EC2**: GitLab will deployed on shared hardware which means
- [on-demand pricing](https://aws.amazon.com/ec2/pricing/on-demand)
+ [on-demand pricing](https://aws.amazon.com/ec2/pricing/on-demand/)
will apply. If you want to run it on a dedicated or reserved instance,
consult the [EC2 pricing page](https://aws.amazon.com/ec2/pricing/) for more
information on the cost.
@@ -112,12 +112,12 @@ RDS instances as well:
1. Follow the same steps to create all subnets:
- | Name tag | Type |Availability Zone | CIDR block |
- | -------- | ---- | ---------------- | ---------- |
- | gitlab-public-10.0.0.0 | public | us-west-2a | 10.0.0.0 |
- | gitlab-private-10.0.1.0 | private | us-west-2a | 10.0.1.0 |
- | gitlab-public-10.0.2.0 | public | us-west-2b | 10.0.2.0 |
- | gitlab-private-10.0.3.0 | private | us-west-2b | 10.0.3.0 |
+ | Name tag | Type | Availability Zone | CIDR block |
+ | ------------------------- | ------- | ----------------- | ---------- |
+ | `gitlab-public-10.0.0.0` | public | `us-west-2a` | `10.0.0.0` |
+ | `gitlab-private-10.0.1.0` | private | `us-west-2a` | `10.0.1.0` |
+ | `gitlab-public-10.0.2.0` | public | `us-west-2b` | `10.0.2.0` |
+ | `gitlab-private-10.0.3.0` | private | `us-west-2b` | `10.0.3.0` |
### Route Table
@@ -222,16 +222,16 @@ Now, it's time to create the database:
1. For the size, let's select a `t2.medium` instance.
1. Multi-AZ-deployment is recommended as redundancy, so choose "Create
replica in different zone". Read more at
- [High Availability (Multi-AZ)](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html).
+ [High Availability (Multi-AZ)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html).
1. A Provisioned IOPS (SSD) storage type is best suited for HA (though you can
choose a General Purpose (SSD) to reduce the costs). Read more about it at
- [Storage for Amazon RDS](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html).
+ [Storage for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html).
1. The rest of the settings on this page request a DB instance identifier, username
and a master password. We've chosen to use `gitlab-db-ha`, `gitlab` and a
very secure password respectively. Keep these in hand for later.
1. Click **Next** to proceed to the advanced settings.
-1. Make sure to choose our gitlab VPC, our subnet group, set public accessibility to
+1. Make sure to choose our GitLab VPC, our subnet group, set public accessibility to
**No**, and to leave it to create a new security group. The only additional
change which will be helpful is the database name for which we can use
`gitlabhq_production`. At the very bottom, there's an option to enable
@@ -668,7 +668,7 @@ to request additional material:
about administering your GitLab instance.
- [Upload a license](../../user/admin_area/license.md):
Activate all GitLab Enterprise Edition functionality with a license.
-- [Pricing](https://about.gitlab.com/pricing): Pricing for the different tiers.
+- [Pricing](https://about.gitlab.com/pricing/): Pricing for the different tiers.
<!-- ## Troubleshooting
diff --git a/doc/install/azure/index.md b/doc/install/azure/index.md
index dfb1dbcf1ed..c789467175a 100644
--- a/doc/install/azure/index.md
+++ b/doc/install/azure/index.md
@@ -28,8 +28,8 @@ First, you'll need an account on Azure. There are three ways to do this:
## Working with Azure
-Once you have an Azure account, you can get started. Login to Azure using
-[portal.azure.com](https://portal.azure.com) and the first thing you will see is the Dashboard:
+Once you have an Azure account, you can get started. [Log in to Azure](https://portal.azure.com)
+and the first thing you will see is the Dashboard:
![Azure Dashboard](img/azure-dashboard.png)
@@ -38,7 +38,7 @@ create SQL Databases, author websites, and perform lots of other cloud tasks.
## Create New VM
-The [Azure Marketplace][Azure-Marketplace] is an online store for pre-configured applications and
+The [Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/) is an online store for pre-configured applications and
services which have been optimized for the cloud by software vendors like GitLab,
available on the Azure Marketplace as pre-configured solutions. In this tutorial
we will install GitLab Community Edition, but for GitLab Enterprise Edition you
@@ -64,7 +64,7 @@ The first items we need to configure are the basic settings of the underlying vi
1. Enter a `Name` for the VM - e.g. **"GitLab-CE"**
1. Select a `VM disk type` - either **HDD** _(slower, lower cost)_ or **SSD** _(faster, higher cost)_
-1. Enter a `User name` - e.g. **"gitlab-admin"**
+1. Enter a `User name` - e.g. `gitlab-admin`
1. Select an `Authentication type`, either **SSH public key** or **Password**:
> **Note:** if you're unsure which authentication type to use, select **Password**
@@ -108,7 +108,7 @@ ahead and select this one, but please choose the size which best meets your own
> **Note:** be aware that whilst your VM is active (known as "allocated"), it will incur
"compute charges" which, ultimately, you will be billed for. So, even if you're using the
free trial credits, you'll likely want to learn
-[how to properly shutdown an Azure VM to save money][Azure-Properly-Shutdown-VM].
+[how to properly shutdown an Azure VM to save money](https://buildazure.com/properly-shutdown-azure-vm-to-save-money/).
Go ahead and click your chosen size, then click **"Select"** when you're ready to proceed to the
next step.
@@ -167,7 +167,7 @@ in the `DNS name label` field:
![Azure - VM - Domain Name](img/azure-vm-domain-name.png)
-In the screenshot above, you'll see that we've set the `DNS name label` to **"gitlab-ce-test"**.
+In the screenshot above, you'll see that we've set the `DNS name label` to `gitlab-ce-test`.
This will make our VM accessible at `gitlab-ce-test.centralus.cloudapp.azure.com`
_(the full domain name of your own VM will be different, of course)_.
@@ -329,7 +329,7 @@ To perform an update, we need to connect directly to our Azure VM instance and r
from the terminal. Our Azure VM is actually a server running Linux (Ubuntu), so we'll need to
connect to it using SSH ([Secure Shell][SSH]).
-If you're running Windows, you'll need to connect using [PuTTY] or an equivalent Windows SSH client.
+If you're running Windows, you'll need to connect using [PuTTY](https://www.putty.org) or an equivalent Windows SSH client.
If you're running Linux or macOS, then you already have an SSH client installed.
> **Note:**
@@ -337,7 +337,7 @@ If you're running Linux or macOS, then you already have an SSH client installed.
> - Remember that you will need to login with the username and password you specified
> [when you created](#basics) your Azure VM
> - If you need to reset your VM password, read
-> [how to reset SSH credentials for a user on an Azure VM][Azure-Troubleshoot-SSH-Connection].
+> [how to reset SSH credentials for a user on an Azure VM](https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshoot-ssh-connection).
#### SSH from the command-line
@@ -356,7 +356,7 @@ Provide your password at the prompt to authenticate.
#### SSH from Windows (PuTTY)
-If you're using [PuTTY] in Windows as your [SSH] client, then you might want to take a quick
+If you're using [PuTTY](https://www.putty.org) in Windows as your [SSH] client, then you might want to take a quick
read on [using PuTTY in Windows][Using-SSH-In-Putty].
### Updating GitLab
@@ -397,7 +397,7 @@ is now showing **"up-to-date"**:
## Conclusion
-Naturally, we believe that GitLab is a great git repository tool. However, GitLab is a whole lot
+Naturally, we believe that GitLab is a great Git repository tool. However, GitLab is a whole lot
more than that too. GitLab unifies issues, code review, CI and CD into a single UI, helping you to
move faster from idea to production, and in this tutorial we showed you how quick and easy it is to
set up and run your own instance of GitLab on Azure, Microsoft's cloud service.
@@ -416,30 +416,26 @@ Check out our other [Technical Articles](../../articles/index.md) or browse the
- [GitLab Enterprise Edition][EE]
- [Microsoft Azure][Azure]
- [Azure - Free Account FAQ][Azure-Free-Account-FAQ]
- - [Azure - Marketplace][Azure-Marketplace]
+ - [Azure - Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/)
- [Azure Portal][Azure-Portal]
- [Azure - Pricing Calculator][Azure-Pricing-Calculator]
- - [Azure - Troubleshoot SSH Connections to an Azure Linux VM][Azure-Troubleshoot-SSH-Connection]
- - [Azure - Properly Shutdown an Azure VM][Azure-Properly-Shutdown-VM]
-- [SSH], [PuTTY] and [Using SSH in PuTTY][Using-SSH-In-Putty]
+ - [Azure - Troubleshoot SSH Connections to an Azure Linux VM](https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshoot-ssh-connection)
+ - [Azure - Properly Shutdown an Azure VM](https://buildazure.com/properly-shutdown-azure-vm-to-save-money/)
+- [SSH], [PuTTY](https://www.putty.org) and [Using SSH in PuTTY][Using-SSH-In-Putty]
-[Original-Blog-Post]: https://about.gitlab.com/2016/07/13/how-to-setup-a-gitlab-instance-on-microsoft-azure/ "How to Set up a GitLab Instance on Microsoft Azure"
+[Original-Blog-Post]: https://about.gitlab.com/blog/2016/07/13/how-to-setup-a-gitlab-instance-on-microsoft-azure/ "How to Set up a GitLab Instance on Microsoft Azure"
[CE]: https://about.gitlab.com/features/
[EE]: https://about.gitlab.com/features/#ee-starter
[Azure-Troubleshoot-Linux-VM]: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/troubleshoot-app-connection "Troubleshoot application connectivity issues on a Linux virtual machine in Azure"
[Azure-IP-Address-Types]: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-ip-addresses-overview-arm "IP address types and allocation methods in Azure"
[Azure-How-To-Open-Ports]: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/nsg-quickstart-portal "How to open ports to a virtual machine with the Azure portal"
-[Azure-Troubleshoot-SSH-Connection]: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/troubleshoot-ssh-connection "Troubleshoot SSH connections to an Azure Linux VM"
[Azure]: https://azure.microsoft.com/en-us/
[Azure-Free-Account-FAQ]: https://azure.microsoft.com/en-us/free/free-account-faq/
-[Azure-Marketplace]: https://azure.microsoft.com/en-us/marketplace/
[Azure-Portal]: https://portal.azure.com
[Azure-Pricing-Calculator]: https://azure.microsoft.com/en-us/pricing/calculator/
-[Azure-Properly-Shutdown-VM]: https://buildazure.com/2017/03/16/properly-shutdown-azure-vm-to-save-money/ "Properly Shutdown an Azure VM to Save Money"
[SSH]: https://en.wikipedia.org/wiki/Secure_Shell
-[PuTTY]: http://www.putty.org/
[Using-SSH-In-Putty]: https://mediatemple.net/community/products/dv/204404604/using-ssh-in-putty-
<!-- ## Troubleshooting
diff --git a/doc/install/digitaloceandocker.md b/doc/install/digitaloceandocker.md
index b6bf7c95527..bff7d97830f 100644
--- a/doc/install/digitaloceandocker.md
+++ b/doc/install/digitaloceandocker.md
@@ -14,9 +14,9 @@ locally on either macOS or Linux.
### On macOS
-#### Install Docker Toolbox
+#### Install Docker Desktop
-- <https://www.docker.com/products/docker-toolbox>
+- <https://www.docker.com/products/docker-desktop>
### On Linux
@@ -115,7 +115,7 @@ docker-machine ip gitlab-test-env-do
# example output: 192.168.151.134
```
-Browse to: <http://192.168.151.134:8888/>.
+Browse to: `http://192.168.151.134:8888/`.
#### Execute interactive shell/edit configuration
diff --git a/doc/install/google_cloud_platform/index.md b/doc/install/google_cloud_platform/index.md
index 56e5ecb3a58..aba30870640 100644
--- a/doc/install/google_cloud_platform/index.md
+++ b/doc/install/google_cloud_platform/index.md
@@ -72,7 +72,7 @@ By default, Google assigns an ephemeral IP to your instance. It is strongly
recommended to assign a static IP if you are going to use GitLab in production
and use a domain name as we'll see below.
-Read Google's documentation on how to [promote an ephemeral IP address][ip].
+Read Google's documentation on how to [promote an ephemeral IP address](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address#promote_ephemeral_ip).
### Using a domain name
@@ -133,9 +133,7 @@ Kerberos, etc. Here are some documents you might be interested in reading:
- [GitLab Container Registry configuration](../../administration/packages/container_registry.md)
[freetrial]: https://console.cloud.google.com/freetrial "GCP free trial"
-[ip]: https://cloud.google.com/compute/docs/configure-instance-ip-addresses#promote_ephemeral_ip "Configuring an Instance's IP Addresses"
[gcp]: https://cloud.google.com/ "Google Cloud Platform"
-[launcher]: https://cloud.google.com/launcher/ "Google Cloud Launcher home page"
[req]: ../requirements.md "GitLab hardware and software requirements"
[ssh]: https://cloud.google.com/compute/docs/instances/connecting-to-instance "Connecting to Linux Instances"
[omni-smtp]: https://docs.gitlab.com/omnibus/settings/smtp.html#smtp-settings "Omnibus GitLab SMTP settings"
diff --git a/doc/install/installation.md b/doc/install/installation.md
index 41ce6cb2f8b..dd4b5544659 100644
--- a/doc/install/installation.md
+++ b/doc/install/installation.md
@@ -10,7 +10,7 @@ other installation options, see the [main installation page](README.md).
It was created for and tested on **Debian/Ubuntu** operating systems.
Read [requirements.md](requirements.md) for hardware and operating system requirements.
If you want to install on RHEL/CentOS, we recommend using the
-[Omnibus packages](https://about.gitlab.com/downloads/).
+[Omnibus packages](https://about.gitlab.com/install/).
This guide is long because it covers many cases and includes all commands you
need, this is [one of the few installation scripts that actually works out of the box](https://twitter.com/robinvdvleuten/status/424163226532986880).
@@ -25,14 +25,14 @@ following the
## Consider the Omnibus package installation
-Since an installation from source is a lot of work and error prone we strongly recommend the fast and reliable [Omnibus package installation](https://about.gitlab.com/downloads/) (deb/rpm).
+Since an installation from source is a lot of work and error prone we strongly recommend the fast and reliable [Omnibus package installation](https://about.gitlab.com/install/) (deb/rpm).
-One reason the Omnibus package is more reliable is its use of Runit to restart any of the GitLab processes in case one crashes.
+One reason the Omnibus package is more reliable is its use of runit to restart any of the GitLab processes in case one crashes.
On heavily used GitLab instances the memory usage of the Sidekiq background worker will grow over time.
Omnibus packages solve this by [letting the Sidekiq terminate gracefully](../administration/operations/sidekiq_memory_killer.md) if it uses too much memory.
-After this termination Runit will detect Sidekiq is not running and will start it.
-Since installations from source don't use Runit for process supervision, Sidekiq
+After this termination runit will detect Sidekiq is not running and will start it.
+Since installations from source don't use runit for process supervision, Sidekiq
can't be terminated and its memory usage will grow over time.
## Select version to install
@@ -84,7 +84,7 @@ The GitLab installation consists of setting up the following components:
1. [Database](#6-database).
1. [Redis](#7-redis).
1. [GitLab](#8-gitlab).
-1. [Nginx](#9-nginx).
+1. [NGINX](#9-nginx).
## 1. Packages and dependencies
@@ -205,7 +205,7 @@ The Ruby interpreter is required to run GitLab.
**Note:** The current supported Ruby (MRI) version is 2.6.x. GitLab 12.2
dropped support for Ruby 2.5.x.
-The use of Ruby version managers such as [RVM], [rbenv] or [chruby] with GitLab
+The use of Ruby version managers such as [RVM], [rbenv](https://github.com/rbenv/rbenv) or [chruby] with GitLab
in production, frequently leads to hard to diagnose problems. For example,
GitLab Shell is called from OpenSSH, and having a version manager can prevent
pushing and pulling over SSH. Version managers are not supported and we strongly
@@ -448,7 +448,7 @@ sudo -u git -H mkdir -p public/uploads/
# now that files in public/uploads are served by gitlab-workhorse
sudo chmod 0700 public/uploads
-# Change the permissions of the directory where CI job traces are stored
+# Change the permissions of the directory where CI job logs are stored
sudo chmod -R u+rwX builds/
# Change the permissions of the directory where CI artifacts are stored
@@ -484,6 +484,9 @@ sudo -u git -H git config --global repack.writeBitmaps true
# Enable push options
sudo -u git -H git config --global receive.advertisePushOptions true
+# Enable fsyncObjectFiles to reduce risk of repository corruption if the server crashes
+sudo -u git -H git config --global core.fsyncObjectFiles true
+
# Configure Redis connection settings
sudo -u git -H cp config/resque.yml.example config/resque.yml
@@ -529,7 +532,7 @@ sudo -u git -H chmod o-rwx config/database.yml
### Install Gems
NOTE: **Note:**
-As of Bundler 1.5.2, you can invoke `bundle install -jN` (where `N` is the number of your processor cores) and enjoy parallel gems installation with measurable difference in completion time (~60% faster). Check the number of your cores with `nproc`. For more information, see this [post](https://robots.thoughtbot.com/parallel-gem-installing-using-bundler).
+As of Bundler 1.5.2, you can invoke `bundle install -jN` (where `N` is the number of your processor cores) and enjoy parallel gems installation with measurable difference in completion time (~60% faster). Check the number of your cores with `nproc`. For more information, see this [post](https://thoughtbot.com/blog/parallel-gem-installing-using-bundler).
Make sure you have `bundle` (run `bundle -v`):
@@ -585,7 +588,7 @@ You can specify a different Git repository by providing it as an extra parameter
sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse,https://example.com/gitlab-workhorse.git]" RAILS_ENV=production
```
-### Install gitlab-elasticsearch-indexer
+### Install GitLab-Elasticsearch-indexer`
GitLab-Elasticsearch-Indexer uses [GNU Make](https://www.gnu.org/software/make/). The
following command-line will install GitLab-Elasticsearch-Indexer in `/home/git/gitlab-elasticsearch-indexer`
@@ -643,7 +646,7 @@ sudo -u git -H editor config.toml
```
For more information about configuring Gitaly see
-[doc/administration/gitaly](../administration/gitaly).
+[the Gitaly documentation](../administration/gitaly/index.md).
### Start Gitaly
@@ -746,10 +749,10 @@ sudo service gitlab start
sudo /etc/init.d/gitlab restart
```
-## 9. Nginx
+## 9. NGINX
NOTE: **Note:**
-Nginx is the officially supported web server for GitLab. If you cannot or do not want to use Nginx as your web server, see [GitLab recipes](https://gitlab.com/gitlab-org/gitlab-recipes/).
+NGINX is the officially supported web server for GitLab. If you cannot or do not want to use NGINX as your web server, see [GitLab recipes](https://gitlab.com/gitlab-org/gitlab-recipes/).
### Installation
@@ -781,21 +784,21 @@ Make sure to edit the config file to match your setup. Also, ensure that you mat
sudo editor /etc/nginx/sites-available/gitlab
```
-If you intend to enable GitLab pages, there is a separate Nginx config you need
+If you intend to enable GitLab Pages, there is a separate NGINX config you need
to use. Read all about the needed configuration at the
[GitLab Pages administration guide](../administration/pages/index.md).
-**Note:** If you want to use HTTPS, replace the `gitlab` Nginx config with `gitlab-ssl`. See [Using HTTPS](#using-https) for HTTPS configuration details.
+**Note:** If you want to use HTTPS, replace the `gitlab` NGINX config with `gitlab-ssl`. See [Using HTTPS](#using-https) for HTTPS configuration details.
### Test Configuration
-Validate your `gitlab` or `gitlab-ssl` Nginx config file with the following command:
+Validate your `gitlab` or `gitlab-ssl` NGINX config file with the following command:
```sh
sudo nginx -t
```
-You should receive `syntax is okay` and `test is successful` messages. If you receive errors check your `gitlab` or `gitlab-ssl` Nginx config file for typos, etc. as indicated in the error message given.
+You should receive `syntax is okay` and `test is successful` messages. If you receive errors check your `gitlab` or `gitlab-ssl` NGINX config file for typos, etc. as indicated in the error message given.
NOTE: **Note:**
Verify that the installed version is greater than 1.12.1 by running `nginx -v`. If it's lower, you may receive the error below:
@@ -855,7 +858,7 @@ To use GitLab with HTTPS:
1. In the `config.yml` of GitLab Shell:
1. Set `gitlab_url` option to the HTTPS endpoint of GitLab (e.g. `https://git.example.com`).
1. Set the certificates using either the `ca_file` or `ca_path` option.
-1. Use the `gitlab-ssl` Nginx example config instead of the `gitlab` config.
+1. Use the `gitlab-ssl` NGINX example config instead of the `gitlab` config.
1. Update `YOUR_SERVER_FQDN`.
1. Update `ssl_certificate` and `ssl_certificate_key`.
1. Review the configuration file and consider applying other security and performance enhancing features.
@@ -881,9 +884,9 @@ See the ["Reply by email" documentation](../administration/reply_by_email.md) fo
You can configure LDAP authentication in `config/gitlab.yml`. Restart GitLab after editing this file.
-### Using Custom Omniauth Providers
+### Using Custom OmniAuth Providers
-See the [omniauth integration document](../integration/omniauth.md).
+See the [OmniAuth integration documentation](../integration/omniauth.md).
### Build your projects
@@ -942,7 +945,7 @@ You also need to change the corresponding options (e.g. `ssh_user`, `ssh_host`,
### Additional Markup Styles
-Apart from the always supported markdown style, there are other rich text files that GitLab can display. But you might have to install a dependency to do so. See the [github-markup gem README](https://github.com/gitlabhq/markup#markups) for more information.
+Apart from the always supported Markdown style, there are other rich text files that GitLab can display. But you might have to install a dependency to do so. See the [`github-markup` gem README](https://github.com/gitlabhq/markup#markups) for more information.
### Using Puma
@@ -968,12 +971,12 @@ To use GitLab with Puma:
### "You appear to have cloned an empty repository."
If you see this message when attempting to clone a repository hosted by GitLab,
-this is likely due to an outdated Nginx or Apache configuration, or a missing or
+this is likely due to an outdated NGINX or Apache configuration, or a missing or
misconfigured GitLab Workhorse instance. Double-check that you've
[installed Go](#3-go), [installed GitLab Workhorse](#install-gitlab-workhorse),
-and correctly [configured Nginx](#site-configuration).
+and correctly [configured NGINX](#site-configuration).
-### google-protobuf "LoadError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found"
+### `google-protobuf` "LoadError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found"
This can happen on some platforms for some versions of the
`google-protobuf` gem. The workaround is to install a source-only
@@ -1022,5 +1025,4 @@ sudo yum groupinstall 'Development Tools'
```
[RVM]: https://rvm.io/ "RVM Homepage"
-[rbenv]: https://github.com/sstephenson/rbenv "rbenv on GitHub"
[chruby]: https://github.com/postmodern/chruby "chruby on GitHub"
diff --git a/doc/install/openshift_and_gitlab/index.md b/doc/install/openshift_and_gitlab/index.md
index cfd0fd48c70..010e56fb097 100644
--- a/doc/install/openshift_and_gitlab/index.md
+++ b/doc/install/openshift_and_gitlab/index.md
@@ -14,14 +14,14 @@ for details.
## Introduction
[OpenShift Origin](https://www.okd.io/) (**Note:** renamed to OKD in Aug 2018) is an open source container application
-platform created by [RedHat], based on [kubernetes](https://kubernetes.io/) and [Docker]. That means
+platform created by [RedHat], based on [Kubernetes](https://kubernetes.io/) and [Docker]. That means
you can host your own PaaS for free and almost with no hassle.
In this tutorial, we will see how to deploy GitLab in OpenShift using GitLab's
official Docker image while getting familiar with the web interface and CLI
tools that will help us achieve our goal.
-For a video demonstration on installing GitLab on OpenShift, check the article [In 13 minutes from Kubernetes to a complete application development tool](https://about.gitlab.com/2016/11/14/idea-to-production/).
+For a video demonstration on installing GitLab on OpenShift, check the article [In 13 minutes from Kubernetes to a complete application development tool](https://about.gitlab.com/blog/2016/11/14/idea-to-production/).
---
@@ -30,7 +30,7 @@ For a video demonstration on installing GitLab on OpenShift, check the article [
CAUTION: **Caution:** This information is no longer up to date, as the current versions
have changed and products have been renamed.
-OpenShift 3 is not yet deployed on RedHat's offered Online platform, [openshift.com](https://www.openshift.com/),
+OpenShift 3 is not yet deployed on RedHat's offered [Online platform](https://www.openshift.com/),
so in order to test it, we will use an [all-in-one Virtualbox image](https://www.okd.io/minishift/) that is
offered by the OpenShift developers and managed by Vagrant. If you haven't done
already, go ahead and install the following components as they are essential to
@@ -38,14 +38,14 @@ test OpenShift easily:
- [VirtualBox]
- [Vagrant]
-- [OpenShift Client][oc] (`oc` for short)
+- [OpenShift Client](https://docs.okd.io/latest/cli_reference/get_started_cli.html) (`oc` for short)
It is also important to mention that for the purposes of this tutorial, the
latest Origin release is used:
- **oc** `v1.3.0` (must be [installed][oc-gh] locally on your computer)
-- **openshift** `v1.3.0` (is pre-installed in the [VM image][vm-new])
-- **kubernetes** `v1.3.0` (is pre-installed in the [VM image][vm-new])
+- **OpenShift** `v1.3.0` (is pre-installed in the [VM image][vm-new])
+- **Kubernetes** `v1.3.0` (is pre-installed in the [VM image][vm-new])
>**Note:**
If you intend to deploy GitLab on a production OpenShift cluster, there are some
@@ -59,7 +59,7 @@ on your computer.
## Getting familiar with OpenShift Origin
The environment we are about to use is based on CentOS 7 which comes with all
-the tools needed pre-installed: Docker, kubernetes, OpenShift, etcd.
+the tools needed pre-installed: Docker, Kubernetes, OpenShift, etcd.
### Test OpenShift using Vagrant
@@ -92,7 +92,7 @@ Now that OpenShift is set up, let's see how the web console looks like.
Once Vagrant finishes its thing with the VM, you will be presented with a
message which has some important information. One of them is the IP address
-of the deployed OpenShift platform and in particular <https://10.2.2.2:8443/console/>.
+of the deployed OpenShift platform and in particular `https://10.2.2.2:8443/console/`.
Open this link with your browser and accept the self-signed certificate in
order to proceed.
@@ -101,7 +101,7 @@ landing page looks like:
![openshift web console](img/web-console.png)
-You can see that a number of [projects] are already created for testing purposes.
+You can see that a number of [projects](https://docs.okd.io/latest/dev_guide/projects.html) are already created for testing purposes.
If you head over the `openshift-infra` project, a number of services with their
respective pods are there to explore.
@@ -109,15 +109,15 @@ respective pods are there to explore.
![openshift web console](img/openshift-infra-project.png)
We are not going to explore the whole interface, but if you want to learn about
-the key concepts of OpenShift, read the [core concepts reference][core] in the
-official documentation.
+the key concepts of OpenShift, read the [core concepts reference](https://docs.okd.io/latest/architecture/core_concepts/index.html)
+in the official documentation.
### Explore the OpenShift CLI
OpenShift Client (`oc`), is a powerful CLI tool that talks to the OpenShift API
and performs pretty much everything you can do from the web UI and much more.
-Assuming you have [installed][oc] it, let's explore some of its main
+Assuming you have [installed](https://docs.okd.io/latest/cli_reference/get_started_cli.html) it, let's explore some of its main
functionalities.
Let's first see the version of `oc`:
@@ -130,7 +130,7 @@ kubernetes v1.3.0+52492b4
```
With `oc help` you can see the top level arguments you can run with `oc` and
-interact with your cluster, kubernetes, run applications, create projects and
+interact with your cluster, Kubernetes, run applications, create projects and
much more.
Let's login to the all-in-one VM and see how to achieve the same results like
@@ -174,7 +174,7 @@ The last command should spit a bunch of information about the statuses of the
pods and the services, which if you look closely is what we encountered in the
second image when we explored the web console.
-You can always read more about `oc` in the [OpenShift CLI documentation][oc].
+You can always read more about `oc` in the [OpenShift CLI documentation](https://docs.okd.io/latest/cli_reference/get_started_cli.html).
### Troubleshooting the all-in-one VM
@@ -250,7 +250,7 @@ The next step is to import the OpenShift template for GitLab.
### Import the template
-The [template][templates] is basically a JSON file which describes a set of
+The [template](https://docs.okd.io/latest/architecture/core_concepts/templates.html) is basically a JSON file which describes a set of
related object definitions to be created together, as well as a set of
parameters for those objects.
@@ -318,7 +318,7 @@ password for PostgreSQL, it will be created automatically.
The `gitlab.apps.10.2.2.2.nip.io` hostname that is used by default will
resolve to the host with IP `10.2.2.2` which is the IP our VM uses. It is a
trick to have distinct FQDNs pointing to services that are on our local network.
-Read more on how this works in <http://nip.io>.
+Read more on how this works in <https://nip.io>.
Now that we configured this, let's see how to manage and scale GitLab.
@@ -349,13 +349,13 @@ tab.
![GitLab logs](img/gitlab-logs.png)
-At a point you should see a _**gitlab Reconfigured!**_ message in the logs.
+At a point you should see a `gitlab Reconfigured!` message in the logs.
Navigate back to the **Overview** and hopefully all pods will be up and running.
![GitLab running](img/gitlab-running.png)
Congratulations! You can now navigate to your new shinny GitLab instance by
-visiting <http://gitlab.apps.10.2.2.2.nip.io> where you will be asked to
+visiting `http://gitlab.apps.10.2.2.2.nip.io` where you will be asked to
change the root user password. Login using `root` as username and providing the
password you just set, and start using GitLab!
@@ -366,7 +366,7 @@ of resources, you'd be happy to know that you can scale up with the push of a
button.
In the **Overview** page just click the up arrow button in the pod where
-GitLab is. The change is instant and you can see the number of [replicas] now
+GitLab is. The change is instant and you can see the number of [replicas](https://docs.okd.io/latest/architecture/core_concepts/deployments.html#replication-controllers) now
running scaled to 2.
![GitLab scale](img/gitlab-scale.png)
@@ -384,7 +384,7 @@ scale up. If a pod is in pending state for too long, you can navigate to
### Scale GitLab using the `oc` CLI
Using `oc` is super easy to scale up the replicas of a pod. You may want to
-skim through the [basic CLI operations][basic-cli] to get a taste how the CLI
+skim through the [basic CLI operations](https://docs.okd.io/latest/cli_reference/basic_cli_operations.html) to get a taste how the CLI
commands are used. Pay extra attention to the object types as we will use some
of them and their abbreviated versions below.
@@ -457,7 +457,7 @@ In case you were wondering whether there is an option to autoscale a pod based
on the resources of your server, the answer is yes, of course there is.
We will not expand on this matter, but feel free to read the documentation on
-OpenShift's website about [autoscaling].
+OpenShift's website about [autoscaling](https://docs.okd.io/latest/dev_guide/pod_autoscaling.html).
## Current limitations
@@ -472,7 +472,7 @@ bother us. In any case, it is something to keep in mind when deploying GitLab
on a production cluster.
In order to deploy GitLab on a production cluster, you will need to assign the
-GitLab service account to the `anyuid` [Security Context Constraints][scc].
+GitLab service account to the `anyuid` [Security Context Constraints](https://docs.okd.io/latest/admin_guide/manage_scc.html).
For OpenShift v3.0, you will need to do this manually:
@@ -505,25 +505,16 @@ application and you are done. You are ready to login to your new GitLab instance
And remember that in this tutorial we just scratched the surface of what Origin
is capable of. As always, you can refer to the detailed
-[documentation][openshift-docs] to learn more about deploying your own OpenShift
+[documentation](https://docs.okd.io) to learn more about deploying your own OpenShift
PaaS and managing your applications with the ease of containers.
[RedHat]: https://www.redhat.com/en "RedHat website"
[vm-new]: https://app.vagrantup.com/openshift/boxes/origin-all-in-one "Official OpenShift Vagrant box on Vagrant Cloud"
[template]: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/docker/openshift-template.json "OpenShift template for GitLab"
[Docker]: https://www.docker.com "Docker website"
-[oc]: https://docs.openshift.org/latest/cli_reference/get_started_cli.html "Documentation - oc CLI documentation"
[VirtualBox]: https://www.virtualbox.org/wiki/Downloads "VirtualBox downloads"
[Vagrant]: https://www.vagrantup.com/downloads.html "Vagrant downloads"
-[projects]: https://docs.openshift.org/latest/dev_guide/projects.html "Documentation - Projects overview"
-[core]: https://docs.openshift.org/latest/architecture/core_concepts/index.html "Documentation - Core concepts of OpenShift Origin"
-[templates]: https://docs.openshift.org/latest/architecture/core_concepts/templates.html "Documentation - OpenShift templates"
[old-post]: https://blog.openshift.com/deploy-gitlab-openshift/ "Old post - Deploy GitLab on OpenShift"
[line]: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/658c065c8d022ce858dd63eaeeadb0b2ddc8deea/docker/openshift-template.json#L239 "GitLab - OpenShift template"
[oc-gh]: https://github.com/openshift/origin/releases/tag/v1.3.0 "OpenShift Origin 1.3.0 release on GitHub"
-[ha]: ../../administration/high_availability/gitlab.html "Documentation - GitLab High Availability"
-[replicas]: https://docs.openshift.org/latest/architecture/core_concepts/deployments.html#replication-controllers "Documentation - Replication controller"
-[autoscaling]: https://docs.openshift.org/latest/dev_guide/pod_autoscaling.html "Documentation - Autoscale"
-[basic-cli]: https://docs.openshift.org/latest/cli_reference/basic_cli_operations.html "Documentation - Basic CLI operations"
-[openshift-docs]: https://docs.openshift.org "OpenShift documentation"
-[scc]: https://docs.openshift.org/latest/admin_guide/manage_scc.html "Documentation - Managing Security Context Constraints"
+[ha]: ../../administration/high_availability/gitlab.md "Documentation - GitLab High Availability"
diff --git a/doc/install/requirements.md b/doc/install/requirements.md
index 21bee67ec1d..8b53ee7c3e1 100644
--- a/doc/install/requirements.md
+++ b/doc/install/requirements.md
@@ -69,7 +69,7 @@ This is the recommended minimum hardware for a handful of example GitLab user ba
- 4 cores supports up to 500 users
- 8 cores supports up to 1,000 users
- 32 cores supports up to 5,000 users
-- More users? Run it high-availability on [multiple application servers](https://about.gitlab.com/high-availability/)
+- More users? Run it high-availability on [multiple application servers](https://about.gitlab.com/solutions/high-availability/)
### Memory
@@ -86,7 +86,7 @@ errors during usage.
- 16GB RAM supports up to 500 users
- 32GB RAM supports up to 1,000 users
- 128GB RAM supports up to 5,000 users
-- More users? Run it high-availability on [multiple application servers](https://about.gitlab.com/high-availability/)
+- More users? Run it high-availability on [multiple application servers](https://about.gitlab.com/solutions/high-availability/)
We recommend having at least [2GB of swap on your server](https://askubuntu.com/a/505344/310789), even if you currently have
enough available RAM. Having swap will help reduce the chance of errors occurring
@@ -139,7 +139,7 @@ If you are using [GitLab Geo](../development/geo.md):
- The
[tracking database](../development/geo.md#using-the-tracking-database)
requires the
- [postgres_fdw](https://www.postgresql.org/docs/9.6/static/postgres-fdw.html)
+ [postgres_fdw](https://www.postgresql.org/docs/9.6/postgres-fdw.html)
extension.
```
@@ -148,13 +148,13 @@ CREATE EXTENSION postgres_fdw;
## Unicorn Workers
-For most instances we recommend using: (CPU cores * 1.5) + 1 = unicorn workers.
-For example a node with 4 cores would have 7 unicorn workers.
+For most instances we recommend using: (CPU cores * 1.5) + 1 = Unicorn workers.
+For example a node with 4 cores would have 7 Unicorn workers.
-For all machines that have 2GB and up we recommend a minimum of three unicorn workers.
+For all machines that have 2GB and up we recommend a minimum of three Unicorn workers.
If you have a 1GB machine we recommend to configure only two Unicorn workers to prevent excessive swapping.
-As long as you have enough available CPU and memory capacity, it's okay to increase the number of unicorn workers and this will usually help to reduce the response time of the applications and increase the ability to handle parallel requests.
+As long as you have enough available CPU and memory capacity, it's okay to increase the number of Unicorn workers and this will usually help to reduce the response time of the applications and increase the ability to handle parallel requests.
To change the Unicorn workers when you have the Omnibus package (which defaults to the recommendation above) please see [the Unicorn settings in the Omnibus GitLab documentation](https://docs.gitlab.com/omnibus/settings/unicorn.html).
diff --git a/doc/integration/README.md b/doc/integration/README.md
index 55f9666e3a3..3a08303bf20 100644
--- a/doc/integration/README.md
+++ b/doc/integration/README.md
@@ -47,10 +47,10 @@ application, most likely Sidekiq. There are 2 approaches you can take to solve t
**OS main trusted chain**
-This [resource](http://kb.kerio.com/product/kerio-connect/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html)
+This [resource](https://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html)
has all the information you need to add a certificate to the main trusted chain.
-This [answer](http://superuser.com/questions/437330/how-do-you-add-a-certificate-authority-ca-to-ubuntu)
+This [answer](https://superuser.com/questions/437330/how-do-you-add-a-certificate-authority-ca-to-ubuntu)
at Super User also has relevant information.
**Omnibus Trusted Chain**
diff --git a/doc/integration/bitbucket.md b/doc/integration/bitbucket.md
index 1973d18ca34..63ffa69e606 100644
--- a/doc/integration/bitbucket.md
+++ b/doc/integration/bitbucket.md
@@ -137,7 +137,7 @@ you can [disable Sign-Ins in the admin panel](omniauth.md#enable-or-disable-sign
[init-oauth]: omniauth.md#initial-omniauth-configuration
[bb-import]: ../workflow/importing/import_projects_from_bitbucket.md
-[bb-old]: https://gitlab.com/gitlab-org/gitlab-foss/blob/8-14-stable/doc/integration/bitbucket.md
+[bb-old]: https://gitlab.com/gitlab-org/gitlab/blob/8-14-stable/doc/integration/bitbucket.md
[bitbucket-docs]: https://confluence.atlassian.com/bitbucket/use-the-ssh-protocol-with-bitbucket-cloud-221449711.html#UsetheSSHprotocolwithBitbucketCloud-KnownhostorBitbucket%27spublickeyfingerprints
[reconfigure GitLab]: ../administration/restart_gitlab.md#omnibus-gitlab-reconfigure
[restart]: ../administration/restart_gitlab.md#installations-from-source
diff --git a/doc/integration/elasticsearch.md b/doc/integration/elasticsearch.md
index 000bb0c2def..da53987ce1b 100644
--- a/doc/integration/elasticsearch.md
+++ b/doc/integration/elasticsearch.md
@@ -1,7 +1,7 @@
# Elasticsearch integration **(STARTER ONLY)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/109 "Elasticsearch Merge Request") in GitLab [Starter](https://about.gitlab.com/pricing/) 8.4. Support
-> for [Amazon Elasticsearch](http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html) was [introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/1305) in GitLab
+> for [Amazon Elasticsearch](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html) was [introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/1305) in GitLab
> [Starter](https://about.gitlab.com/pricing/) 9.0.
This document describes how to set up Elasticsearch with GitLab. Once enabled,
@@ -32,7 +32,7 @@ of this document.
NOTE: **Note:**
Elasticsearch should be installed on a separate server, whether you install
it yourself or by using the
-[Amazon Elasticsearch](http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html)
+[Amazon Elasticsearch](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html)
service. Running Elasticsearch on the same server as GitLab is not recommended
and it will likely cause performance degradation on the GitLab installation.
@@ -42,7 +42,7 @@ updated automatically.
## Elasticsearch repository indexer (beta)
-In order to improve elasticsearch indexing performance, GitLab has made available a [new indexer written in Go](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer).
+In order to improve Elasticsearch indexing performance, GitLab has made available a [new indexer written in Go](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer).
This will replace the included Ruby indexer in the future but should be considered beta software for now, so there may be some bugs.
The Elasticsearch Go indexer is included in Omnibus for GitLab 11.8 and newer.
@@ -110,7 +110,7 @@ Example:
PREFIX=/usr sudo -E make install
```
-Once installed, enable it under your instance's elasticsearch settings explained [below](#enabling-elasticsearch).
+Once installed, enable it under your instance's Elasticsearch settings explained [below](#enabling-elasticsearch).
## System Requirements
@@ -136,19 +136,19 @@ Click **Save changes** for the changes to take effect.
The following Elasticsearch settings are available:
-| Parameter | Description |
-| --------- | ----------- |
-| `Elasticsearch indexing` | Enables/disables Elasticsearch indexing. You may want to enable indexing but disable search in order to give the index time to be fully completed, for example. Also, keep in mind that this option doesn't have any impact on existing data, this only enables/disables background indexer which tracks data changes. So by enabling this you will not get your existing data indexed, use special rake task for that as explained in [Adding GitLab's data to the Elasticsearch index](#adding-gitlabs-data-to-the-elasticsearch-index). |
-| `Use the new repository indexer (beta)` | Perform repository indexing using [GitLab Elasticsearch Indexer](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer). |
-| `Search with Elasticsearch enabled` | Enables/disables using Elasticsearch in search. |
-| `URL` | The URL to use for connecting to Elasticsearch. Use a comma-separated list to support clustering (e.g., `http://host1, https://host2:9200`). If your Elasticsearch instance is password protected, pass the `username:password` in the URL (e.g., `http://<username>:<password>@<elastic_host>:9200/`). |
-| `Number of Elasticsearch shards` | Elasticsearch indexes are split into multiple shards for performance reasons. In general, larger indexes need to have more shards. Changes to this value do not take effect until the index is recreated. You can read more about tradeoffs in the [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html#create-index-settings) |
-| `Number of Elasticsearch replicas` | Each Elasticsearch shard can have a number of replicas. These are a complete copy of the shard, and can provide increased query performance or resilience against hardware failure. Increasing this value will greatly increase total disk space required by the index. |
-| `Limit namespaces and projects that can be indexed` | Enabling this will allow you to select namespaces and projects to index. All other namespaces and projects will use database search instead. Please note that if you enable this option but do not select any namespaces or projects, none will be indexed. [Read more below](#limiting-namespaces-and-projects).
-| `Using AWS hosted Elasticsearch with IAM credentials` | Sign your Elasticsearch requests using [AWS IAM authorization](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) or [AWS EC2 Instance Profile Credentials](http://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html#getting-started-create-iam-instance-profile-cli). The policies must be configured to allow `es:*` actions. |
-| `AWS Region` | The AWS region your Elasticsearch service is located in. |
-| `AWS Access Key` | The AWS access key. |
-| `AWS Secret Access Key` | The AWS secret access key. |
+| Parameter | Description |
+| ----------------------------------------------------- | ----------- |
+| `Elasticsearch indexing` | Enables/disables Elasticsearch indexing. You may want to enable indexing but disable search in order to give the index time to be fully completed, for example. Also, keep in mind that this option doesn't have any impact on existing data, this only enables/disables background indexer which tracks data changes. So by enabling this you will not get your existing data indexed, use special rake task for that as explained in [Adding GitLab's data to the Elasticsearch index](#adding-gitlabs-data-to-the-elasticsearch-index). |
+| `Use the new repository indexer (beta)` | Perform repository indexing using [GitLab Elasticsearch Indexer](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer). |
+| `Search with Elasticsearch enabled` | Enables/disables using Elasticsearch in search. |
+| `URL` | The URL to use for connecting to Elasticsearch. Use a comma-separated list to support clustering (e.g., `http://host1, https://host2:9200`). If your Elasticsearch instance is password protected, pass the `username:password` in the URL (e.g., `http://<username>:<password>@<elastic_host>:9200/`). |
+| `Number of Elasticsearch shards` | Elasticsearch indexes are split into multiple shards for performance reasons. In general, larger indexes need to have more shards. Changes to this value do not take effect until the index is recreated. You can read more about tradeoffs in the [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html#create-index-settings) |
+| `Number of Elasticsearch replicas` | Each Elasticsearch shard can have a number of replicas. These are a complete copy of the shard, and can provide increased query performance or resilience against hardware failure. Increasing this value will greatly increase total disk space required by the index. |
+| `Limit namespaces and projects that can be indexed` | Enabling this will allow you to select namespaces and projects to index. All other namespaces and projects will use database search instead. Please note that if you enable this option but do not select any namespaces or projects, none will be indexed. [Read more below](#limiting-namespaces-and-projects).
+| `Using AWS hosted Elasticsearch with IAM credentials` | Sign your Elasticsearch requests using [AWS IAM authorization](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) or [AWS EC2 Instance Profile Credentials](https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html#getting-started-create-iam-instance-profile-cli). The policies must be configured to allow `es:*` actions. |
+| `AWS Region` | The AWS region your Elasticsearch service is located in. |
+| `AWS Access Key` | The AWS access key. |
+| `AWS Secret Access Key` | The AWS secret access key. |
### Limiting namespaces and projects
@@ -402,7 +402,7 @@ There are several rake tasks available to you via the command line:
- `sudo gitlab-rake gitlab:elastic:index_projects`
- `sudo gitlab-rake gitlab:elastic:index_snippets`
- [`sudo gitlab-rake gitlab:elastic:index_projects`](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/lib/tasks/gitlab/elastic.rake)
- - This iterates over all projects and queues sidekiq jobs to index them in the background.
+ - This iterates over all projects and queues Sidekiq jobs to index them in the background.
- [`sudo gitlab-rake gitlab:elastic:index_projects_status`](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/lib/tasks/gitlab/elastic.rake)
- This determines the overall status of the indexing. It is done by counting the total number of indexed projects, dividing by a count of the total number of projects, then multiplying by 100.
- [`sudo gitlab-rake gitlab:elastic:create_empty_index`](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/lib/tasks/gitlab/elastic.rake)
@@ -580,6 +580,6 @@ Here are some common pitfalls and how to overcome them:
`http.max_content_length` setting in `elasticsearch.yml`. Increase it to a
larger size and restart your Elasticsearch cluster.
- AWS has [fixed limits](http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/aes-limits.html)
+ AWS has [fixed limits](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/aes-limits.html)
for this setting ("Maximum Size of HTTP Request Payloads"), based on the size of
the underlying instance.
diff --git a/doc/integration/google.md b/doc/integration/google.md
index 4f6999571b6..97323557878 100644
--- a/doc/integration/google.md
+++ b/doc/integration/google.md
@@ -16,7 +16,7 @@ In Google's side:
the randomly generated ID or choose a new one.
1. Refresh the page and you should see your new project in the list
1. Go to the [Google API Console](https://console.developers.google.com/apis/dashboard)
-1. Select the previously created project form the upper left corner
+1. Select the previously created project in the upper left corner
1. Select **Credentials** from the sidebar
1. Select **OAuth consent screen** and fill the form with the required information
1. In the **Credentials** tab, select **Create credentials > OAuth client ID**
@@ -41,6 +41,13 @@ In Google's side:
- Cloud Resource Manager API
- Cloud Billing API
+ To do so you need to:
+
+ 1. Go to the [Google API Console](https://console.developers.google.com/apis/dashboard).
+ 1. Click on **ENABLE APIS AND SERVICES** button at the top of the page.
+ 1. Find each of the above APIs. On the page for the API, press the **ENABLE** button.
+ It may take a few minutes for the API to be fully functional.
+
On your GitLab server:
1. Open the configuration file.
diff --git a/doc/integration/jenkins.md b/doc/integration/jenkins.md
index d865f977799..a54f6843c53 100644
--- a/doc/integration/jenkins.md
+++ b/doc/integration/jenkins.md
@@ -33,7 +33,7 @@ and [Migrating from Jenkins to GitLab](https://www.youtube.com/watch?v=RlEVGOpYF
therefore, you opt for keep using Jenkins to build your apps. Show the results of your
pipelines directly in GitLab.
-For a real use case, read the blog post [Continuous integration: From Jenkins to GitLab using Docker](https://about.gitlab.com/2017/07/27/docker-my-precious/).
+For a real use case, read the blog post [Continuous integration: From Jenkins to GitLab using Docker](https://about.gitlab.com/blog/2017/07/27/docker-my-precious/).
NOTE: **Moving from a traditional CI plug-in to a single application for the entire software development lifecycle can decrease hours spent on maintaining toolchains by 10% or more.**
Visit the ['GitLab vs. Jenkins' comparison page](https://about.gitlab.com/devops-tools/jenkins-vs-gitlab.html) to learn how our built-in CI compares to Jenkins.
diff --git a/doc/integration/jenkins_deprecated.md b/doc/integration/jenkins_deprecated.md
index 3e437eb688a..af7f847f803 100644
--- a/doc/integration/jenkins_deprecated.md
+++ b/doc/integration/jenkins_deprecated.md
@@ -14,7 +14,7 @@ Integration includes:
Requirements:
- [Jenkins GitLab Hook plugin](https://wiki.jenkins.io/display/JENKINS/GitLab+Hook+Plugin)
-- Git clone access for Jenkins from GitLab repo (via ssh key)
+- Git clone access for Jenkins from GitLab repo (via SSH key)
## Jenkins
diff --git a/doc/integration/kerberos.md b/doc/integration/kerberos.md
index 1888d7c51d5..2a3e2e43d72 100644
--- a/doc/integration/kerberos.md
+++ b/doc/integration/kerberos.md
@@ -46,7 +46,7 @@ sudo chmod 0600 /etc/http.keytab
For source installations, make sure the `kerberos` gem group
[has been installed](../install/installation.md#install-gems).
-1. Edit the `kerberos` section of [`gitlab.yml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/gitlab.yml.example) to enable Kerberos ticket-based
+1. Edit the `kerberos` section of [`gitlab.yml`](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example) to enable Kerberos ticket-based
authentication. In most cases, you only need to enable Kerberos and specify
the location of the keytab:
@@ -153,7 +153,7 @@ keep offering only `basic` authentication.
listen [::]:8443 ipv6only=on ssl;
```
-1. Update the `kerberos` section of [`gitlab.yml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/gitlab.yml.example):
+1. Update the `kerberos` section of [`gitlab.yml`](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example):
```yaml
kerberos:
@@ -203,7 +203,7 @@ remove the OmniAuth provider named `kerberos` from your `gitlab.yml` /
**For installations from source**
-1. Edit [`gitlab.yml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/gitlab.yml.example) and remove the `- { name: 'kerberos' }` line under omniauth
+1. Edit [`gitlab.yml`](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example) and remove the `- { name: 'kerberos' }` line under OmniAuth
providers:
```yaml
@@ -293,7 +293,7 @@ See also: [Git v2.11 release notes](https://github.com/git/git/blob/master/Docum
- <https://help.ubuntu.com/community/Kerberos>
- <http://blog.manula.org/2012/04/setting-up-kerberos-server-with-debian.html>
-- <http://www.roguelynn.com/words/explain-like-im-5-kerberos/>
+- <https://www.roguelynn.com/words/explain-like-im-5-kerberos/>
[restart gitlab]: ../administration/restart_gitlab.md#installations-from-source
[reconfigure gitlab]: ../administration/restart_gitlab.md#omnibus-gitlab-reconfigure
diff --git a/doc/integration/omniauth.md b/doc/integration/omniauth.md
index 30a4c348c22..6ac2e3e13d6 100644
--- a/doc/integration/omniauth.md
+++ b/doc/integration/omniauth.md
@@ -35,7 +35,7 @@ contains some settings that are common for all providers.
- [JWT](../administration/auth/jwt.md)
- [OpenID Connect](../administration/auth/oidc.md)
- [UltraAuth](ultra_auth.md)
-- [SalesForce](salesforce.md)
+- [Salesforce](salesforce.md)
## Initial OmniAuth Configuration
@@ -43,7 +43,7 @@ Before configuring individual OmniAuth providers there are a few global settings
that are in common for all providers that we need to consider.
> **NOTE:**
-> Starting from GitLab 11.4, Omniauth is enabled by default. If you're using an
+> Starting from GitLab 11.4, OmniAuth is enabled by default. If you're using an
> earlier version, you'll need to explicitly enable it.
- `allow_single_sign_on` allows you to specify the providers you want to allow to
@@ -171,20 +171,20 @@ omniauth:
external_providers: ['twitter', 'google_oauth2']
```
-## Using Custom Omniauth Providers
+## Using Custom OmniAuth Providers
>**Note:**
The following information only applies for installations from source.
-GitLab uses [Omniauth](https://github.com/omniauth/omniauth) for authentication and already ships
+GitLab uses [OmniAuth](https://github.com/omniauth/omniauth) for authentication and already ships
with a few providers pre-installed (e.g. LDAP, GitHub, Twitter). But sometimes that
is not enough and you need to integrate with other authentication solutions. For
-these cases you can use the Omniauth provider.
+these cases you can use the OmniAuth provider.
### Steps
These steps are fairly general and you will need to figure out the exact details
-from the Omniauth provider's documentation.
+from the OmniAuth provider's documentation.
- Stop GitLab:
@@ -192,13 +192,13 @@ from the Omniauth provider's documentation.
sudo service gitlab stop
```
-- Add the gem to your [Gemfile](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/Gemfile):
+- Add the gem to your [Gemfile](https://gitlab.com/gitlab-org/gitlab/blob/master/Gemfile):
```sh
gem "omniauth-your-auth-provider"
```
-- Install the new Omniauth provider gem by running the following command:
+- Install the new OmniAuth provider gem by running the following command:
```sh
sudo -u git -H bundle install --without development test mysql --path vendor/bundle --no-deployment
@@ -238,13 +238,13 @@ In order to enable/disable an OmniAuth provider, go to Admin Area -> Settings ->
![Enabled OAuth Sign-In sources](img/enabled-oauth-sign-in-sources.png)
-## Disabling Omniauth
+## Disabling OmniAuth
-Starting from version 11.4 of GitLab, Omniauth is enabled by default. This only
+Starting from version 11.4 of GitLab, OmniAuth is enabled by default. This only
has an effect if providers are configured and [enabled](#enable-or-disable-sign-in-with-an-omniauth-provider-without-disabling-import-sources).
-If omniauth providers are causing problems even when individually disabled, you
-can disable the entire omniauth subsystem by modifying the configuration file:
+If OmniAuth providers are causing problems even when individually disabled, you
+can disable the entire OmniAuth subsystem by modifying the configuration file:
**For Omnibus installations**
diff --git a/doc/integration/openid_connect_provider.md b/doc/integration/openid_connect_provider.md
index 89f4924d717..f75630b93a2 100644
--- a/doc/integration/openid_connect_provider.md
+++ b/doc/integration/openid_connect_provider.md
@@ -13,7 +13,7 @@ REST-like manner. OIDC performs many of the same tasks as OpenID 2.0,
but does so in a way that is API-friendly, and usable by native and
mobile applications.
-On the client side, you can use [omniauth-openid-connect] for Rails
+On the client side, you can use [OmniAuth::OpenIDConnect](https://github.com/jjbohn/omniauth-openid-connect/) for Rails
applications, or any of the other available [client implementations](https://openid.net/developers/libraries/#connect).
GitLab's implementation uses the [doorkeeper-openid_connect] gem, refer
@@ -48,4 +48,3 @@ Only the `sub` and `sub_legacy` claims are included in the ID token, all other c
[doorkeeper-openid_connect]: https://github.com/doorkeeper-gem/doorkeeper-openid_connect "Doorkeeper::OpenidConnect website"
[OAuth guide]: oauth_provider.md "GitLab as OAuth2 authentication service provider"
-[omniauth-openid-connect]: https://github.com/jjbohn/omniauth-openid-connect/ "OmniAuth::OpenIDConnect website"
diff --git a/doc/integration/recaptcha.md b/doc/integration/recaptcha.md
index 825c3654492..10613129490 100644
--- a/doc/integration/recaptcha.md
+++ b/doc/integration/recaptcha.md
@@ -12,7 +12,7 @@ To use reCAPTCHA, first you must create a site and private key.
1. Fill out the form necessary to obtain reCAPTCHA v2 keys.
1. Log in to your GitLab server, with administrator credentials.
1. Go to Reporting Applications Settings in the Admin Area (`admin/application_settings/reporting`).
-1. Fill all recaptcha fields with keys from previous steps.
+1. Fill all reCAPTCHA fields with keys from previous steps.
1. Check the `Enable reCAPTCHA` checkbox.
1. Save the configuration.
diff --git a/doc/integration/salesforce.md b/doc/integration/salesforce.md
index 10ab9d3c126..958f05cf030 100644
--- a/doc/integration/salesforce.md
+++ b/doc/integration/salesforce.md
@@ -21,7 +21,7 @@ To get the credentials (a pair of Client ID and Client Secret), you must [create
1. Select **API (Enable OAuth Settings)** and click on **Enable OAuth Settings**.
1. Fill in the application details into the following fields:
- **Callback URL**: The callback URL of your GitLab installation. For example, `https://gitlab.example.com/users/auth/salesforce/callback`.
- - **Selected OAuth Scopes**: Move **Access your basic information (id, profile, email, address, phone)** and **Allow access to your unique identifier (openid)** to the right column.
+ - **Selected OAuth Scopes**: Move **Access your basic information (id, profile, email, address, phone)** and **Allow access to your unique identifier (OpenID)** to the right column.
![Salesforce Oauth App Details](img/salesforce_oauth_app_details.png)
diff --git a/doc/integration/saml.md b/doc/integration/saml.md
index 23e9e44e076..b72be55aca3 100644
--- a/doc/integration/saml.md
+++ b/doc/integration/saml.md
@@ -111,7 +111,7 @@ in your SAML IdP:
1. Change the values of `idp_cert_fingerprint`, `idp_sso_target_url`,
`name_identifier_format` to match your IdP. If a fingerprint is used it must
be a SHA1 fingerprint; check
- [the omniauth-saml documentation](https://github.com/omniauth/omniauth-saml)
+ [the OmniAuth SAML documentation](https://github.com/omniauth/omniauth-saml)
for more details on these options.
1. Change the value of `issuer` to a unique name, which will identify the application
@@ -133,7 +133,7 @@ https://gitlab.example.com/users/auth/saml/metadata
At a minimum the IdP *must* provide a claim containing the user's email address, using
claim name `email` or `mail`. The email will be used to automatically generate the GitLab
username. GitLab will also use claims with name `name`, `first_name`, `last_name`
-(see [the omniauth-saml gem](https://github.com/omniauth/omniauth-saml/blob/master/lib/omniauth/strategies/saml.rb)
+(see [the OmniAuth SAML gem](https://github.com/omniauth/omniauth-saml/blob/master/lib/omniauth/strategies/saml.rb)
for supported claims).
On the sign in page there should now be a SAML button below the regular sign in form.
@@ -370,7 +370,7 @@ This setting should only be used to map attributes that are part of the
OmniAuth info hash schema.
`attribute_statements` is used to map Attribute Names in a SAMLResponse to entries
-in the OmniAuth [info hash](https://github.com/intridea/omniauth/wiki/Auth-Hash-Schema#schema-10-and-later).
+in the OmniAuth [info hash](https://github.com/omniauth/omniauth/wiki/Auth-Hash-Schema#schema-10-and-later).
For example, if your SAMLResponse contains an Attribute called 'EmailAddress',
specify `{ email: ['EmailAddress'] }` to map the Attribute to the
@@ -414,7 +414,7 @@ args: {
### `uid_attribute`
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/43806) in GitLab 10.7.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/17734) in GitLab 10.7.
By default, the `uid` is set as the `name_id` in the SAML response. If you'd like to designate a unique attribute for the `uid`, you can set the `uid_attribute`. In the example below, the value of `uid` attribute in the SAML response is set as the `uid_attribute`.
@@ -429,6 +429,120 @@ args: {
}
```
+## Response signature validation (required)
+
+We require Identity Providers to sign SAML responses to ensure that the assertions are
+not tampered with.
+
+This prevents user impersonation and prevents privilege escalation when specific group
+membership is required. Typically this:
+
+- Is configured using `idp_cert_fingerprint`.
+- Includes the full certificate in the response, although if your Identity Provider
+ doesn't support this, you can directly configure GitLab using the `idp_cert` option.
+
+Example configuration with `idp_cert_fingerprint`:
+
+```yaml
+args: {
+ assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
+ idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8',
+ idp_sso_target_url: 'https://login.example.com/idp',
+ issuer: 'https://gitlab.example.com',
+ name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
+}
+```
+
+Example configuration with `idp_cert`:
+
+```yaml
+args: {
+ assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
+ idp_cert: '-----BEGIN CERTIFICATE-----
+ <redacted>
+ -----END CERTIFICATE-----',
+ idp_sso_target_url: 'https://login.example.com/idp',
+ issuer: 'https://gitlab.example.com',
+ name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
+}
+```
+
+If the response signature validation is configured incorrectly, you can see error messages
+such as:
+
+- A key validation error.
+- Digest mismatch.
+- Fingerprint mismatch.
+
+Refer to the [troubleshooting section](#troubleshooting) for more information on
+debugging these errors.
+
+## Assertion Encryption (optional)
+
+GitLab requires the use of TLS encryption with SAML, but in some cases there can be a
+need for additional encryption of the assertions.
+
+This may be the case, for example, if you terminate TLS encryption early at a load
+balancer and include sensitive details in assertions that you do not want appearing
+in logs. Most organizations should not need additional encryption at this layer.
+
+The SAML integration supports EncryptedAssertion. You need to define the private key and the public certificate of your GitLab instance in the SAML settings:
+
+```yaml
+args: {
+ assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
+ idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8',
+ idp_sso_target_url: 'https://login.example.com/idp',
+ issuer: 'https://gitlab.example.com',
+ name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
+ certificate: '-----BEGIN CERTIFICATE-----
+ <redacted>
+ -----END CERTIFICATE-----',
+ private_key: '-----BEGIN PRIVATE KEY-----
+ <redacted>
+ -----END PRIVATE KEY-----'
+}
+```
+
+Your Identity Provider will encrypt the assertion with the public certificate of GitLab. GitLab will decrypt the EncryptedAssertion with its private key.
+
+NOTE: **Note:**
+This integration uses the `certificate` and `private_key` settings for both assertion encryption and request signing.
+
+## Request signing (optional)
+
+Another optional configuration is to sign SAML authentication requests. GitLab SAML Requests uses the SAML redirect binding so this is not necessary, unlike the SAML POST binding where signing is required to prevent intermediaries tampering with the requests.
+
+In order to sign, you need to create a private key and public certificate pair for your GitLab instance to use for SAML. The settings related to signing can be set in the `security` section of the configuration.
+
+For example:
+
+```yaml
+args: {
+ assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
+ idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8',
+ idp_sso_target_url: 'https://login.example.com/idp',
+ issuer: 'https://gitlab.example.com',
+ name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
+ certificate: '-----BEGIN CERTIFICATE-----
+ <redacted>
+ -----END CERTIFICATE-----',
+ private_key: '-----BEGIN PRIVATE KEY-----
+ <redacted>
+ -----END PRIVATE KEY-----',
+ security: {
+ authn_requests_signed: true, # enable signature on AuthNRequest
+ want_assertions_signed: true, # enable the requirement of signed assertion
+ embed_sign: true, # embedded signature or HTTP GET parameter signature
+ metadata_signed: false, # enable signature on Metadata
+ signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
+ digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256',
+ }
+}
+```
+
+GitLab will sign the request with the provided private key. GitLab will include the configured public x500 certificate in the metadata for your Identity Provider to validate the signature of the received request with. For more information on this option, see the [ruby-saml gem documentation](https://github.com/onelogin/ruby-saml/tree/v1.7.0). The `ruby-saml` gem is used by the [omniauth-saml gem](https://github.com/omniauth/omniauth-saml) to implement the client side of the SAML authentication.
+
## Troubleshooting
### 500 error after login
@@ -458,7 +572,7 @@ installations from source. Restart Unicorn using the `sudo gitlab-ctl restart un
command on Omnibus installations and `sudo service gitlab restart` on installations
from source.
-You may also find the [SSO Tracer](https://addons.mozilla.org/en-US/firefox/addon/sso-tracer)
+You may also find the [SSO Tracer](https://addons.mozilla.org/en-US/firefox/addon/sso-tracer/)
(Firefox) and [SAML Chrome Panel](https://chrome.google.com/webstore/detail/saml-chrome-panel/paijfdbeoenhembfhkhllainmocckace)
(Chrome) browser extensions useful in your debugging.
diff --git a/doc/integration/shibboleth.md b/doc/integration/shibboleth.md
index 1b4e75e0ca1..885a6fe59da 100644
--- a/doc/integration/shibboleth.md
+++ b/doc/integration/shibboleth.md
@@ -2,9 +2,9 @@
NOTE: **Note:**
The preferred approach for integrating a Shibboleth authentication system
-with Gitlab 10 or newer is to use [GitLab's SAML integration](saml.md). This documentation is for Omnibus GitLab 9.x installs or older.
+with GitLab 10 or newer is to use [GitLab's SAML integration](saml.md). This documentation is for Omnibus GitLab 9.x installs or older.
-In order to enable Shibboleth support in GitLab we need to use Apache instead of Nginx (It may be possible to use Nginx, however this is difficult to configure using the bundled Nginx provided in the Omnibus GitLab package). Apache uses mod_shib2 module for Shibboleth authentication and can pass attributes as headers to Omniauth Shibboleth provider.
+In order to enable Shibboleth support in GitLab we need to use Apache instead of NGINX (It may be possible to use NGINX, however this is difficult to configure using the bundled NGINX provided in the Omnibus GitLab package). Apache uses mod_shib2 module for Shibboleth authentication and can pass attributes as headers to OmniAuth Shibboleth provider.
To enable the Shibboleth OmniAuth provider you must configure Apache Shibboleth module.
The installation and configuration of the module itself is out of the scope of this document.
@@ -14,7 +14,7 @@ You can find Apache config in [GitLab Recipes](https://gitlab.com/gitlab-org/git
The following changes are needed to enable Shibboleth:
-1. Protect Omniauth Shibboleth callback URL:
+1. Protect OmniAuth Shibboleth callback URL:
```
<Location /users/auth/shibboleth/callback>
diff --git a/doc/integration/slack.md b/doc/integration/slack.md
index 9fcf2c2d99a..815032a08d5 100644
--- a/doc/integration/slack.md
+++ b/doc/integration/slack.md
@@ -2,4 +2,4 @@
redirect_to: '../user/project/integrations/slack.md'
---
-This document was moved to [project_services/slack.md](../user/project/integrations/slack.md).
+This document was moved to [another location](../user/project/integrations/slack.md).
diff --git a/doc/migrate_ci_to_ce/README.md b/doc/migrate_ci_to_ce/README.md
index 4a96001f2de..85e69be6516 100644
--- a/doc/migrate_ci_to_ce/README.md
+++ b/doc/migrate_ci_to_ce/README.md
@@ -268,11 +268,11 @@ If you installed GitLab CI from source we now need to configure a redirect in
NGINX so that existing CI runners can keep using the old CI server address, and
so that existing links to your CI server keep working.
-### 1. Update Nginx configuration
+### 1. Update NGINX configuration
To ensure that your existing CI runners are able to communicate with the
migrated installation, and that existing build triggers still work, you'll need
-to update your Nginx configuration to redirect requests for the old locations to
+to update your NGINX configuration to redirect requests for the old locations to
the new ones.
Edit `/etc/nginx/sites-available/gitlab_ci` and paste:
@@ -324,13 +324,13 @@ You should also make sure that you can:
1. `curl https://YOUR_GITLAB_SERVER_FQDN/` from your previous GitLab CI server.
1. `curl https://YOUR_CI_SERVER_FQDN/` from your GitLab CE (or EE) server.
-### 2. Check Nginx configuration
+### 2. Check NGINX configuration
```sh
sudo nginx -t
```
-### 3. Restart Nginx
+### 3. Restart NGINX
```sh
sudo /etc/init.d/nginx restart
diff --git a/doc/policy/maintenance.md b/doc/policy/maintenance.md
index f7ba7c16a9e..d118c2f40cb 100644
--- a/doc/policy/maintenance.md
+++ b/doc/policy/maintenance.md
@@ -10,7 +10,7 @@ patch and security releases. New releases are usually announced on the [GitLab b
## Versioning
GitLab uses [Semantic Versioning](https://semver.org/) for its releases:
-`(Major).(Minor).(Patch)` in a [pragmatic way](https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e).
+`(Major).(Minor).(Patch)`.
For example, for GitLab version 10.5.7:
@@ -24,7 +24,7 @@ The following table describes the version types and their release cadence:
| Version type | Description | Cadence |
|:-------------|:------------|:--------|
-| Major | For significant changes, or when any backward-incompatible changes are introduced to the public API. | Yearly. The next major release is GitLab 12.0 on June 22, 2019. Subsequent major releases will be scheduled for May 22 each year, by default. |
+| Major | For significant changes, or when any backward-incompatible changes are introduced to the public API. | Yearly. The next major release is GitLab 13.0 on May 22, 2020. Subsequent major releases will be scheduled for May 22 each year, by default. |
| Minor | For when new backward-compatible functionality is introduced to the public API, a minor feature is introduced, or when a set of smaller features is rolled out. | Monthly on the 22nd. |
| Patch | For backward-compatible bug fixes that fix incorrect behavior. See [Patch releases](#patch-releases). | As needed. |
@@ -47,7 +47,7 @@ medium-level security issues, we may backport security fixes to the previous two
monthly releases.
For very serious security issues, there is
-[precedent](https://about.gitlab.com/2016/05/02/cve-2016-4340-patches/)
+[precedent](https://about.gitlab.com/blog/2016/05/02/cve-2016-4340-patches/)
to backport security fixes to even more monthly releases of GitLab.
This decision is made on a case-by-case basis.
diff --git a/doc/public_access/img/restrict_visibility_levels.png b/doc/public_access/img/restrict_visibility_levels.png
deleted file mode 100644
index e9315cfb701..00000000000
--- a/doc/public_access/img/restrict_visibility_levels.png
+++ /dev/null
Binary files differ
diff --git a/doc/public_access/public_access.md b/doc/public_access/public_access.md
index e7d29fb8018..bb19436017a 100644
--- a/doc/public_access/public_access.md
+++ b/doc/public_access/public_access.md
@@ -4,7 +4,7 @@ type: reference
# Public access
-GitLab allows [Owners](../user/permissions.md) to set a projects' visibility as **public**, **internal**
+GitLab allows [Owners](../user/permissions.md) to set a project's visibility as **public**, **internal**,
or **private**. These visibility levels affect who can see the project in the
public access directory (`/public` under your GitLab instance), like at <https://gitlab.com/public>
@@ -12,7 +12,7 @@ public access directory (`/public` under your GitLab instance), like at <https:/
### Public projects
-Public projects can be cloned **without any** authentication over https.
+Public projects can be cloned **without any** authentication over HTTPS.
They will be listed in the public access directory (`/public`) for all users.
@@ -43,8 +43,8 @@ They will appear in the public access directory (`/public`) for project members
### How to change project visibility
-1. Go to your project's **Settings**
-1. Change "Visibility Level" to either Public, Internal or Private
+1. Go to your project's **Settings**.
+1. Change **Visibility Level** to either Public, Internal, or Private.
## Visibility of groups
@@ -71,15 +71,12 @@ If the public level is restricted, user profiles are only visible to logged in u
## Restricting the use of public or internal projects
-In the Admin area under **Settings** (`/admin/application_settings`), you can
-restrict the use of visibility levels for users when they create a project or a
-snippet:
-
-![Restrict visibility levels](img/restrict_visibility_levels.png)
-
-This is useful to prevent people exposing their repositories to public
+You can restrict the use of visibility levels for users when they create a project or a
+snippet. This is useful to prevent users from publicly exposing their repositories
by accident. The restricted visibility settings do not apply to admin users.
+For details, see [Restricted visibility levels](../user/admin_area/settings/visibility_and_access_controls.md#restricted-visibility-levels).
+
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
diff --git a/doc/push_rules/push_rules.md b/doc/push_rules/push_rules.md
index 08484fb4187..0771a3e4225 100644
--- a/doc/push_rules/push_rules.md
+++ b/doc/push_rules/push_rules.md
@@ -74,10 +74,10 @@ The following options are available.
| Restrict by branch name | **Starter** 9.3 | Only branch names that match this regular expression are allowed to be pushed. Leave empty to allow any branch name. |
| Restrict by commit author's email | **Starter** 7.10 | Only commit author's email that match this regular expression are allowed to be pushed. Leave empty to allow any email. |
| Prohibited file names | **Starter** 7.10 | Any committed filenames that match this regular expression are not allowed to be pushed. Leave empty to allow any filenames. |
-| Maximum file size | **Starter** 7.12 | Pushes that contain added or updated files that exceed this file size (in MB) are rejected. Set to 0 to allow files of any size. |
+| Maximum file size | **Starter** 7.12 | Pushes that contain added or updated files that exceed this file size (in MB) are rejected. Set to 0 to allow files of any size. Files tracked by Git LFS are exempted. |
TIP: **Tip:**
-GitLab uses [RE2 syntax](https://github.com/google/re2/wiki/Syntax) for regular expressions in push rules, and you can test them at the [GoLang regex tester](https://regex-golang.appspot.com).
+GitLab uses [RE2 syntax](https://github.com/google/re2/wiki/Syntax) for regular expressions in push rules, and you can test them at the [GoLang regex tester](https://regex-golang.appspot.com/assets/html/index.html).
## Prevent pushing secrets to the repository
diff --git a/doc/raketasks/backup_restore.md b/doc/raketasks/backup_restore.md
index cc43a120e22..fe9617c75ad 100644
--- a/doc/raketasks/backup_restore.md
+++ b/doc/raketasks/backup_restore.md
@@ -98,7 +98,7 @@ docker exec -t <container name> gitlab-backup create
NOTE: **Note**
For GitLab 12.1 and earlier, use `gitlab-rake gitlab:backup:create`.
-If you are using the [GitLab helm chart](https://gitlab.com/gitlab-org/charts/gitlab) on a
+If you are using the [GitLab Helm chart](https://gitlab.com/gitlab-org/charts/gitlab) on a
Kubernetes cluster, you can run the backup task using `backup-utility` script on
the GitLab task runner pod via `kubectl`. Refer to [backing up a GitLab installation](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/backup-restore/backup.md#backing-up-a-gitlab-installation) for more details:
@@ -277,7 +277,7 @@ Starting with GitLab 7.4 you can let the backup script upload the '.tar' file it
It uses the [Fog library](http://fog.io/) to perform the upload.
In the example below we use Amazon S3 for storage, but Fog also lets you use
[other storage providers](http://fog.io/storage/). GitLab
-[imports cloud drivers](https://gitlab.com/gitlab-org/gitlab-foss/blob/30f5b9a5b711b46f1065baf755e413ceced5646b/Gemfile#L88)
+[imports cloud drivers](https://gitlab.com/gitlab-org/gitlab/blob/30f5b9a5b711b46f1065baf755e413ceced5646b/Gemfile#L88)
for AWS, Google, OpenStack Swift, Rackspace and Aliyun as well. A local driver is
[also available](#uploading-to-locally-mounted-shares).
@@ -575,7 +575,7 @@ files. GitLab does not automatically prune old files stored in a third-party
object storage (e.g., AWS S3) because the user may not have permission to list
and delete files. We recommend that you configure the appropriate retention
policy for your object storage. For example, you can configure [the S3 backup
-policy as described here](http://stackoverflow.com/questions/37553070/gitlab-omnibus-delete-backup-from-amazon-s3).
+policy as described here](https://stackoverflow.com/questions/37553070/gitlab-omnibus-delete-backup-from-amazon-s3).
To schedule a cron job that backs up your repositories and GitLab metadata, use the root user:
@@ -775,9 +775,9 @@ If there is a GitLab version mismatch between your backup tar file and the insta
version of GitLab, the restore command will abort with an error. Install the
[correct GitLab version](https://packages.gitlab.com/gitlab/) and try again.
-### Restore for Docker image and GitLab helm chart installations
+### Restore for Docker image and GitLab Helm chart installations
-For GitLab installations using the Docker image or the GitLab helm chart on
+For GitLab installations using the Docker image or the GitLab Helm chart on
a Kubernetes cluster, the restore task expects the restore directories to be empty.
However, with docker and Kubernetes volume mounts, some system level directories
may be created at the volume roots, like `lost+found` directory found in Linux
@@ -803,8 +803,8 @@ CAUTION: **Warning:**
This is a [known issue](https://gitlab.com/gitlab-org/gitlab-foss/issues/62759). On GitLab 12.2 or newer, you can
use `gitlab-backup restore` to avoid this issue.
-The GitLab helm chart uses a different process, documented in
-[restoring a GitLab helm chart installation](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/backup-restore/restore.md).
+The GitLab Helm chart uses a different process, documented in
+[restoring a GitLab Helm chart installation](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/backup-restore/restore.md).
## Alternative backup strategies
@@ -859,7 +859,7 @@ Be advised that, backup is successfully restored in spite of these warnings.
The rake task runs this as the `gitlab` user which does not have the superuser access to the database. When restore is initiated it will also run as `gitlab` user but it will also try to alter the objects it does not have access to.
Those objects have no influence on the database backup/restore but they give this annoying warning.
-For more information see similar questions on postgresql issue tracker[here](http://www.postgresql.org/message-id/201110220712.30886.adrian.klaver@gmail.com) and [here](http://www.postgresql.org/message-id/2039.1177339749@sss.pgh.pa.us) as well as [stack overflow](http://stackoverflow.com/questions/4368789/error-must-be-owner-of-language-plpgsql).
+For more information see similar questions on PostgreSQL issue tracker[here](https://www.postgresql.org/message-id/201110220712.30886.adrian.klaver@gmail.com) and [here](https://www.postgresql.org/message-id/2039.1177339749@sss.pgh.pa.us) as well as [stack overflow](https://stackoverflow.com/questions/4368789/error-must-be-owner-of-language-plpgsql).
### When the secrets file is lost
diff --git a/doc/raketasks/cleanup.md b/doc/raketasks/cleanup.md
index e2ec58be367..67bf7cbd828 100644
--- a/doc/raketasks/cleanup.md
+++ b/doc/raketasks/cleanup.md
@@ -2,46 +2,6 @@
## Remove garbage from filesystem
-DANGER: **Danger:**
-The commands below will remove data permanently from your GitLab instance. Only use
-these commands if you are 100% certain that it is safe to delete this data.
-
-Remove namespaces(dirs) from all repository storage paths if they don't exist in GitLab database.
-
-```
-# omnibus-gitlab
-sudo gitlab-rake gitlab:cleanup:dirs
-
-# installation from source
-bundle exec rake gitlab:cleanup:dirs RAILS_ENV=production
-```
-
-DANGER: **Danger:**
-The following task does not currently work as expected.
-The use will probably mark more existing repositories as orphaned.
-For more information, see the [issue](https://gitlab.com/gitlab-org/gitlab-ee/issues/24633).
-
-Rename repositories from all repository storage paths if they don't exist in GitLab database.
-The repositories get a `+orphaned+TIMESTAMP` suffix so that they cannot block new repositories from being created.
-
-```
-# omnibus-gitlab
-sudo gitlab-rake gitlab:cleanup:repos
-
-# installation from source
-bundle exec rake gitlab:cleanup:repos RAILS_ENV=production
-```
-
-Remove old repository copies from repositories moved to another storage.
-
-```
-# omnibus-gitlab
-sudo gitlab-rake gitlab:cleanup:moved
-
-# installation from source
-bundle exec rake gitlab:cleanup:moved RAILS_ENV=production
-```
-
Clean up local project upload files if they don't exist in GitLab database. The
task attempts to fix the file if it can find its project, otherwise it moves the
file to a lost and found directory.
diff --git a/doc/raketasks/import.md b/doc/raketasks/import.md
index b6253bbecdc..5f11af0213d 100644
--- a/doc/raketasks/import.md
+++ b/doc/raketasks/import.md
@@ -100,7 +100,7 @@ the Git repository's config file. This section is formatted as follows:
```
[gitlab]
- fullpath = gitlab-org/gitlab-ce
+ fullpath = gitlab-org/gitlab
```
However, existing repositories were not migrated to include this path.
@@ -129,7 +129,7 @@ Until then, you may wish to manually migrate repositories yourself. You can use
to do so. In a Rails console session, run the following to migrate a project:
```
-project = Project.find_by_full_path('gitlab-org/gitlab-ce')
+project = Project.find_by_full_path('gitlab-org/gitlab')
project.write_repository_config
```
diff --git a/doc/raketasks/list_repos.md b/doc/raketasks/list_repos.md
index 476428eb4f5..cfcf11cf3c2 100644
--- a/doc/raketasks/list_repos.md
+++ b/doc/raketasks/list_repos.md
@@ -15,7 +15,7 @@ sudo -u git -H bundle exec rake gitlab:list_repos RAILS_ENV=production
If you only want to list projects with recent activity you can pass
a date with the 'SINCE' environment variable. The time you specify
is parsed by the Rails [TimeZone#parse
-function](http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-parse).
+function](https://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-parse).
```
# Omnibus
diff --git a/doc/security/asset_proxy.md b/doc/security/asset_proxy.md
index b480905339b..6e615028e8b 100644
--- a/doc/security/asset_proxy.md
+++ b/doc/security/asset_proxy.md
@@ -11,12 +11,12 @@ to log the IP address of the user.
One way to mitigate this is by proxying any external images to a server you
control.
-GitLab can be configured to use an asset proxy server when requesting external images/videos in
+GitLab can be configured to use an asset proxy server when requesting external images/videos/audio in
issues, comments, etc. This helps ensure that malicious images do not expose the user's IP address
when they are fetched.
We currently recommend using [cactus/go-camo](https://github.com/cactus/go-camo#how-it-works)
-as it supports proxying video and is more configurable.
+as it supports proxying video, audio, and is more configurable.
## Installing Camo server
@@ -52,7 +52,7 @@ To install a Camo server as an asset proxy:
## Using the Camo server
-Once the Camo server is running and you've enabled the GitLab settings, any image or video that
+Once the Camo server is running and you've enabled the GitLab settings, any image, video, or audio that
references an external source will get proxied to the Camo server.
For example, the following is a link to an image in Markdown:
diff --git a/doc/security/crime_vulnerability.md b/doc/security/crime_vulnerability.md
index 6e0a62b6510..77592f1b440 100644
--- a/doc/security/crime_vulnerability.md
+++ b/doc/security/crime_vulnerability.md
@@ -56,11 +56,11 @@ vulnerability.
## References
-- Nginx ["Module ngx_http_spdy_module"][ngx-spdy]
+- NGINX ["Module ngx_http_spdy_module"][ngx-spdy]
- Tenable Network Security, Inc. ["Transport Layer Security (TLS) Protocol CRIME Vulnerability"][nessus]
- Wikipedia contributors, ["CRIME"][wiki-crime] Wikipedia, The Free Encyclopedia
-[source-nginx]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/support/nginx/gitlab-ssl
+[source-nginx]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/nginx/gitlab-ssl
[omnibus-nginx]: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/templates/default/nginx-gitlab-http.conf.erb
[ngx-spdy]: http://nginx.org/en/docs/http/ngx_http_spdy_module.html
[nessus]: https://www.tenable.com/plugins/index.php?view=single&id=62565
diff --git a/doc/security/rack_attack.md b/doc/security/rack_attack.md
index 09d29bf3446..51b7d7db3e4 100644
--- a/doc/security/rack_attack.md
+++ b/doc/security/rack_attack.md
@@ -36,6 +36,9 @@ will be enabled:
### Protected paths throttle
+NOTE: **Note:** Omnibus GitLab protected paths throttle is deprecated and is scheduled for removal in
+GitLab 13.0. Please refer to [Migrate settings from GitLab 12.3 and earlier](../user/admin_area/settings/protected_paths.md#migrate-settings-from-gitlab-123-and-earlier).
+
GitLab responds with HTTP status code `429` to POST requests at protected paths
that exceed 10 requests per minute per IP address.
@@ -124,6 +127,9 @@ The following settings can be configured:
**Installations from source**
+NOTE: **Note:** Rack Attack initializer was temporarily renamed to `rack_attack_new`, to
+support backwards compatibility with the one [Omnibus initializer](https://docs.gitlab.com/omnibus/settings/configuration.html#setting-up-paths-to-be-protected-by-rack-attack). It'll be renamed back to `rack_attack.rb` once Omnibus throttle is removed. Please see the [GitLab issue](https://gitlab.com/gitlab-org/gitlab/issues/29952) for more information.
+
These settings can be found in `config/initializers/rack_attack.rb`. If you are
missing `config/initializers/rack_attack.rb`, the following steps need to be
taken in order to enable protection for your GitLab instance:
diff --git a/doc/ssh/README.md b/doc/ssh/README.md
index e18f49de3f0..07b426b7f28 100644
--- a/doc/ssh/README.md
+++ b/doc/ssh/README.md
@@ -83,20 +83,6 @@ The minimum key size is 1024 bits, defaulting to 2048. If you wish to generate a
stronger RSA key pair, specify the `-b` flag with a higher bit value than the
default.
-The old, default password encoding for SSH private keys is
-[insecure](https://latacora.singles/2018/08/03/the-default-openssh.html);
-it's only a single round of an MD5 hash. Since OpenSSH version 6.5, you should
-use the `-o` option to `ssh-keygen` to encode your private key in a new, more
-secure format.
-
-If you already have an RSA SSH key pair to use with GitLab, consider upgrading it
-to use the more secure password encryption format by using the following command
-on the private key:
-
-```bash
-ssh-keygen -o -f ~/.ssh/id_rsa
-```
-
## Generating a new SSH key pair
Before creating an SSH key pair, make sure to understand the
@@ -114,7 +100,7 @@ To create a new SSH key pair:
Or, if you want to use RSA:
```bash
- ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
+ ssh-keygen -t rsa -b 4096 -C "email@example.com"
```
The `-C` flag adds a comment in the key in case you have multiple of them
@@ -139,9 +125,31 @@ To create a new SSH key pair:
you can use the `-p` flag:
```
- ssh-keygen -p -o -f <keyname>
+ ssh-keygen -p -f <keyname>
```
+### OpenSSH < v7.8
+
+Pre OpenSSH 7.8, default password encoding for SSH private keys was
+[insecure](https://latacora.micro.blog/the-default-openssh/);
+it's only a single round of an MD5 hash. For OpenSSH version 6.5 to version 7.8, you should
+use the `-o` option to `ssh-keygen` to [encode your private key in a new, more
+secure format.](https://superuser.com/questions/1455735/what-does-ssh-keygen-o-do#answer-1455738)
+
+If you already have an RSA SSH key pair to use with GitLab, consider upgrading it
+to use the more secure password encryption format by using the following command
+on the private key:
+
+```bash
+ssh-keygen -o -f ~/.ssh/id_rsa
+```
+
+Or generate a new RSA key:
+
+```bash
+ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
+```
+
Now, it's time to add the newly created public key to your GitLab account.
## Adding an SSH key to your GitLab account
diff --git a/doc/subscriptions/index.md b/doc/subscriptions/index.md
index 950850536e9..cae83d6186f 100644
--- a/doc/subscriptions/index.md
+++ b/doc/subscriptions/index.md
@@ -148,7 +148,7 @@ For more information, please see our:
- [Subscription FAQ](https://about.gitlab.com/pricing/licensing-faq/).
- [Pricing page](https://about.gitlab.com/pricing/), which includes information
- on our [true-up pricing policy](https://about.gitlab.com/handbook/product/pricing/#true-up-pricing)
+ on our [true-up pricing policy](https://about.gitlab.com/handbook/ceo/pricing/#true-up-pricing)
when adding more users other than at the time of purchase.
NOTE: **Note:**
@@ -192,13 +192,15 @@ account:
#### Change associated namespace
-With a linked GitLab.com account, go to the
-[**Subscriptions**](https://customers.gitlab.com/subscriptions) page to choose
-or change the namespace your subscription applies to.
+With a linked GitLab.com account:
-NOTE: **Note:**
-Please note that you need to be a group owner to associate a group to your
-subscription.
+1. Log in to the [GitLab Subscription Manager](https://customers.gitlab.com/customers/sign_in).
+1. Navigate to the **Manage Purchases** page.
+1. Click **Change linked group**.
+1. Select the desired group from the **This subscription is for** dropdown.
+1. Click **Proceed to checkout**.
+
+Subscription charges are calculated based on the total number of users in a group, including its subgroups and nested projects. If the total number of users exceeds the number of seats in your subscription, you will be charged for the additional users.
### Confirm or upgrade your subscription
@@ -247,6 +249,9 @@ In order to purchase additional minutes, you should follow these steps:
![Additional minutes](img/additional_minutes.png)
+ The **Additional minutes** displayed now includes the purchased additional CI minutes, plus any
+ minutes rolled over from last month.
+
Be aware that:
1. If you have purchased extra CI minutes before the purchase of a paid plan,
diff --git a/doc/topics/authentication/index.md b/doc/topics/authentication/index.md
index ad196e27f53..9e4a666d442 100644
--- a/doc/topics/authentication/index.md
+++ b/doc/topics/authentication/index.md
@@ -8,8 +8,8 @@ This page gathers all the resources for the topic **Authentication** within GitL
- [Two-Factor Authentication (2FA)](../../user/profile/account/two_factor_authentication.md#two-factor-authentication)
- [Why do I keep getting signed out?](../../user/profile/index.md#why-do-i-keep-getting-signed-out)
- **Articles:**
- - [Support for Universal 2nd Factor Authentication - YubiKeys](https://about.gitlab.com/2016/06/22/gitlab-adds-support-for-u2f/)
- - [Security Webcast with Yubico](https://about.gitlab.com/2016/08/31/gitlab-and-yubico-security-webcast/)
+ - [Support for Universal 2nd Factor Authentication - YubiKeys](https://about.gitlab.com/blog/2016/06/22/gitlab-adds-support-for-u2f/)
+ - [Security Webcast with Yubico](https://about.gitlab.com/blog/2016/08/31/gitlab-and-yubico-security-webcast/)
- **Integrations:**
- [GitLab as OAuth2 authentication service provider](../../integration/oauth_provider.md#introduction-to-oauth)
- [GitLab as OpenID Connect identity provider](../../integration/openid_connect_provider.md)
@@ -22,7 +22,7 @@ This page gathers all the resources for the topic **Authentication** within GitL
- **Articles:**
- [How to Configure LDAP with GitLab CE](../../administration/auth/how_to_configure_ldap_gitlab_ce/index.md)
- [How to Configure LDAP with GitLab EE](../../administration/auth/how_to_configure_ldap_gitlab_ee/index.md) **(STARTER)**
- - [Feature Highlight: LDAP Integration](https://about.gitlab.com/2014/07/10/feature-highlight-ldap-sync/)
+ - [Feature Highlight: LDAP Integration](https://about.gitlab.com/blog/2014/07/10/feature-highlight-ldap-sync/)
- [Debugging LDAP](https://about.gitlab.com/handbook/support/workflows/debugging_ldap.html)
- **Integrations:**
- [OmniAuth](../../integration/omniauth.md)
diff --git a/doc/topics/autodevops/img/disable_postgres.png b/doc/topics/autodevops/img/disable_postgres.png
new file mode 100644
index 00000000000..f8fe508915c
--- /dev/null
+++ b/doc/topics/autodevops/img/disable_postgres.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_base_domain_v12_3.png b/doc/topics/autodevops/img/guide_base_domain_v12_3.png
new file mode 100644
index 00000000000..0c8ab9b26e4
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_base_domain_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_choose_gke.png b/doc/topics/autodevops/img/guide_choose_gke.png
deleted file mode 100644
index 6da3a7220da..00000000000
--- a/doc/topics/autodevops/img/guide_choose_gke.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_cluster_apps.png b/doc/topics/autodevops/img/guide_cluster_apps.png
deleted file mode 100644
index 33d25f2950d..00000000000
--- a/doc/topics/autodevops/img/guide_cluster_apps.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_cluster_apps_v12_3.png b/doc/topics/autodevops/img/guide_cluster_apps_v12_3.png
new file mode 100644
index 00000000000..f903ae40c02
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_cluster_apps_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_create_project.png b/doc/topics/autodevops/img/guide_create_project.png
deleted file mode 100644
index 4ed1071db03..00000000000
--- a/doc/topics/autodevops/img/guide_create_project.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_create_project_v12_3.png b/doc/topics/autodevops/img/guide_create_project_v12_3.png
new file mode 100644
index 00000000000..68ab7f23f3c
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_create_project_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_enable_autodevops.png b/doc/topics/autodevops/img/guide_enable_autodevops.png
deleted file mode 100644
index 0fc3ecca19a..00000000000
--- a/doc/topics/autodevops/img/guide_enable_autodevops.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_enable_autodevops_v12_3.png b/doc/topics/autodevops/img/guide_enable_autodevops_v12_3.png
new file mode 100644
index 00000000000..7f0e7c60086
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_enable_autodevops_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_environments.png b/doc/topics/autodevops/img/guide_environments.png
deleted file mode 100644
index 404db17c57a..00000000000
--- a/doc/topics/autodevops/img/guide_environments.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_environments_metrics.png b/doc/topics/autodevops/img/guide_environments_metrics.png
deleted file mode 100644
index f0d31f31581..00000000000
--- a/doc/topics/autodevops/img/guide_environments_metrics.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_environments_metrics_v12_3.png b/doc/topics/autodevops/img/guide_environments_metrics_v12_3.png
new file mode 100644
index 00000000000..74f997a5122
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_environments_metrics_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_environments_v12_3.png b/doc/topics/autodevops/img/guide_environments_v12_3.png
new file mode 100644
index 00000000000..0ad282cfe4e
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_environments_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_first_pipeline.png b/doc/topics/autodevops/img/guide_first_pipeline.png
deleted file mode 100644
index 57459dcc9d9..00000000000
--- a/doc/topics/autodevops/img/guide_first_pipeline.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_first_pipeline_v12_3.png b/doc/topics/autodevops/img/guide_first_pipeline_v12_3.png
new file mode 100644
index 00000000000..7654b4f0934
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_first_pipeline_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_gitlab_gke_details.png b/doc/topics/autodevops/img/guide_gitlab_gke_details.png
deleted file mode 100644
index bc5a53800f7..00000000000
--- a/doc/topics/autodevops/img/guide_gitlab_gke_details.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.png b/doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.png
new file mode 100644
index 00000000000..ba2b00dd984
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_google_auth.png b/doc/topics/autodevops/img/guide_google_auth_v12_3.png
index b97b2be9f15..b97b2be9f15 100644
--- a/doc/topics/autodevops/img/guide_google_auth.png
+++ b/doc/topics/autodevops/img/guide_google_auth_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_google_signin.png b/doc/topics/autodevops/img/guide_google_signin.png
deleted file mode 100644
index e59fc94bd4c..00000000000
--- a/doc/topics/autodevops/img/guide_google_signin.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_google_signin_v12_3.png b/doc/topics/autodevops/img/guide_google_signin_v12_3.png
new file mode 100644
index 00000000000..ac8a325dde6
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_google_signin_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_ide_commit.png b/doc/topics/autodevops/img/guide_ide_commit.png
deleted file mode 100644
index d7be66f4049..00000000000
--- a/doc/topics/autodevops/img/guide_ide_commit.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_ide_commit_v12_3.png b/doc/topics/autodevops/img/guide_ide_commit_v12_3.png
new file mode 100644
index 00000000000..c40658e9ba9
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_ide_commit_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_merge_request.png b/doc/topics/autodevops/img/guide_merge_request.png
deleted file mode 100644
index d78e69be776..00000000000
--- a/doc/topics/autodevops/img/guide_merge_request.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_merge_request_review_app.png b/doc/topics/autodevops/img/guide_merge_request_review_app.png
deleted file mode 100644
index 1b9b854ddac..00000000000
--- a/doc/topics/autodevops/img/guide_merge_request_review_app.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_merge_request_review_app_v12_3.png b/doc/topics/autodevops/img/guide_merge_request_review_app_v12_3.png
new file mode 100644
index 00000000000..e1a4f181744
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_merge_request_review_app_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_merge_request_v12_3.png b/doc/topics/autodevops/img/guide_merge_request_v12_3.png
new file mode 100644
index 00000000000..8c70620162c
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_merge_request_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_pipeline_stages.png b/doc/topics/autodevops/img/guide_pipeline_stages.png
deleted file mode 100644
index 6e2f078152b..00000000000
--- a/doc/topics/autodevops/img/guide_pipeline_stages.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_pipeline_stages_v12_3.png b/doc/topics/autodevops/img/guide_pipeline_stages_v12_3.png
new file mode 100644
index 00000000000..f55a985f543
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_pipeline_stages_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_project_landing_page.png b/doc/topics/autodevops/img/guide_project_landing_page.png
deleted file mode 100644
index 4f8d2eb10b1..00000000000
--- a/doc/topics/autodevops/img/guide_project_landing_page.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_project_landing_page_v12_3.png b/doc/topics/autodevops/img/guide_project_landing_page_v12_3.png
new file mode 100644
index 00000000000..4d62588ed90
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_project_landing_page_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_project_template.png b/doc/topics/autodevops/img/guide_project_template.png
deleted file mode 100644
index 298ac0f6fcf..00000000000
--- a/doc/topics/autodevops/img/guide_project_template.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_project_template_v12_3.png b/doc/topics/autodevops/img/guide_project_template_v12_3.png
new file mode 100644
index 00000000000..9ce730518d0
--- /dev/null
+++ b/doc/topics/autodevops/img/guide_project_template_v12_3.png
Binary files differ
diff --git a/doc/topics/autodevops/index.md b/doc/topics/autodevops/index.md
index e42c89ac567..a1373639a87 100644
--- a/doc/topics/autodevops/index.md
+++ b/doc/topics/autodevops/index.md
@@ -77,7 +77,7 @@ As Auto DevOps relies on many different components, it's good to have a basic
knowledge of the following:
- [Kubernetes](https://kubernetes.io/docs/home/)
-- [Helm](https://docs.helm.sh/)
+- [Helm](https://helm.sh/docs/)
- [Docker](https://docs.docker.com)
- [GitLab Runner](https://docs.gitlab.com/runner/)
- [Prometheus](https://prometheus.io/docs/introduction/overview/)
@@ -85,7 +85,7 @@ knowledge of the following:
Auto DevOps provides great defaults for all the stages; you can, however,
[customize](#customizing) almost everything to your needs.
-For an overview on the creation of Auto DevOps, read the blog post [From 2/3 of the Self-Hosted Git Market, to the Next-Generation CI System, to Auto DevOps](https://about.gitlab.com/2017/06/29/whats-next-for-gitlab-ci/).
+For an overview on the creation of Auto DevOps, read the blog post [From 2/3 of the Self-Hosted Git Market, to the Next-Generation CI System, to Auto DevOps](https://about.gitlab.com/blog/2017/06/29/whats-next-for-gitlab-ci/).
NOTE: **Note**
Kubernetes clusters can [be used without](../../user/project/clusters/index.md)
@@ -98,7 +98,7 @@ To make full use of Auto DevOps, you will need:
- **GitLab Runner** (for all stages)
Your Runner needs to be configured to be able to run Docker. Generally this
- means using the either the [Docker](https://docs.gitlab.com/runner/executors/docker.html)
+ means using either the [Docker](https://docs.gitlab.com/runner/executors/docker.html)
or [Kubernetes](https://docs.gitlab.com/runner/executors/kubernetes.html) executors, with
[privileged mode enabled](https://docs.gitlab.com/runner/executors/docker.html#use-docker-in-docker-with-privileged-mode).
@@ -122,9 +122,9 @@ To make full use of Auto DevOps, you will need:
- Kubernetes 1.5+.
- A [Kubernetes cluster][kubernetes-clusters] for the project.
- - A load balancer. You can use NGINX ingress by deploying it to your
+ - A load balancer. You can use NGINX Ingress by deploying it to your
Kubernetes cluster by either:
- - Using the [`nginx-ingress`](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress) Helm chart.
+ - Using the [`nginx-ingress`](https://github.com/helm/charts/tree/master/stable/nginx-ingress) Helm chart.
- Installing the Ingress [GitLab Managed App](../../user/clusters/applications.md#ingress).
- **Prometheus** (for Auto Monitoring)
@@ -172,7 +172,7 @@ and `1.2.3.4` is the IP address of your load balancer; generally NGINX
([see requirements](#requirements)). How to set up the DNS record is beyond
the scope of this document; you should check with your DNS provider.
-Alternatively you can use free public services like [nip.io](http://nip.io)
+Alternatively you can use free public services like [nip.io](https://nip.io)
which provide automatic wildcard DNS without any configuration. Just set the
Auto DevOps base domain to `1.2.3.4.nip.io`.
@@ -331,7 +331,7 @@ If a project's repository contains a `Dockerfile`, Auto Build will use
If you are also using Auto Review Apps and Auto Deploy and choose to provide
your own `Dockerfile`, make sure you expose your application to port
`5000` as this is the port assumed by the
-[default Helm chart](https://gitlab.com/gitlab-org/charts/auto-deploy-app). Alternatively you can override the default values by [customizing the Auto Deploy helm chart](#custom-helm-chart)
+[default Helm chart](https://gitlab.com/gitlab-org/charts/auto-deploy-app). Alternatively you can override the default values by [customizing the Auto Deploy Helm chart](#custom-helm-chart)
#### Auto Build using Heroku buildpacks
@@ -487,6 +487,9 @@ in the first place, and thus not realize that it needs to re-apply the old confi
> Introduced in [GitLab Ultimate][ee] 10.4.
+This is an optional step, since it requires a [review app](#auto-review-apps).
+If that requirement is not met, the job will be silently skipped.
+
Dynamic Application Security Testing (DAST) uses the
popular open source tool [OWASP ZAProxy](https://github.com/zaproxy/zaproxy)
to perform an analysis on the current code and checks for potential security
@@ -498,6 +501,29 @@ later download and check out.
Any security warnings are also shown in the merge request widget. Read how
[DAST works](../../user/application_security/dast/index.md).
+On your default branch, DAST scans an app deployed specifically for that purpose.
+The app is deleted after DAST has run.
+
+On feature branches, DAST scans the [review app](#auto-review-apps).
+
+#### Overriding the DAST target
+
+To use a custom target instead of the auto-deployed review apps,
+set a `DAST_WEBSITE` environment variable to the URL for DAST to scan.
+
+NOTE: **Note:**
+If [DAST Full Scan](../../user/application_security/dast/index.md#full-scan) is enabled, it is strongly advised **not**
+to set `DAST_WEBSITE` to any staging or production environment. DAST Full Scan
+actively attacks the target, which can take down the application and lead to
+data loss or corruption.
+
+#### Disabling Auto DAST
+
+DAST can be disabled:
+
+- On all branches by setting the `DAST_DISABLED` environment variable to `"true"`.
+- Only on the default branch by setting the `DAST_DISABLED_FOR_DEFAULT_BRANCH` environment variable to `"true"`.
+
### Auto Browser Performance Testing **(PREMIUM)**
> Introduced in [GitLab Premium][ee] 10.4.
@@ -529,7 +555,7 @@ Auto Deploy doesn't include deployments to staging or canary by default, but the
enable them.
You can make use of [environment variables](#environment-variables) to automatically
-scale your pod replicas and to apply custom arguments to the Auto DevOps `helm upgrade` commands. This is an easy way to [customize the Auto Deploy helm chart](#custom-helm-chart).
+scale your pod replicas and to apply custom arguments to the Auto DevOps `helm upgrade` commands. This is an easy way to [customize the Auto Deploy Helm chart](#custom-helm-chart).
Apps are deployed using the
[auto-deploy-app](https://gitlab.com/gitlab-org/charts/auto-deploy-app) chart with
@@ -572,7 +598,7 @@ within the application pod by setting the project variables `DB_INITIALIZE` and
`DB_MIGRATE` respectively.
If present, `DB_INITIALIZE` will be run as a shell command within an
-application pod as a helm post-install hook. As some applications will
+application pod as a Helm post-install hook. As some applications will
not run without a successful database initialization step, GitLab will
deploy the first release without the application deployment and only the
database initialization step. After the database initialization completes,
@@ -583,7 +609,7 @@ Note that a post-install hook means that if any deploy succeeds,
`DB_INITIALIZE` will not be processed thereafter.
If present, `DB_MIGRATE` will be run as a shell command within an application pod as
-a helm pre-upgrade hook.
+a Helm pre-upgrade hook.
For example, in a Rails application in an image built with
[Herokuish](https://github.com/gliderlabs/herokuish):
@@ -734,14 +760,16 @@ Avoid passing secrets as Docker build arguments if possible, as they may be
persisted in your image. See
[this discussion](https://github.com/moby/moby/issues/13490) for details.
-### Passing secrets to `docker build` (beta)
+### Passing secrets to `docker build`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/25514) in GitLab 12.3, but available in versions 11.9 and above.
CI environment variables can be passed as [build
secrets](https://docs.docker.com/develop/develop-images/build_enhancements/#new-docker-build-secret-information) to the `docker build` command by listing them comma separated by name in the
`AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES` variable. For example, in order to forward the variables `CI_COMMIT_SHA` and `CI_ENVIRONMENT_NAME`, one would set `AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES` to `CI_COMMIT_SHA,CI_ENVIRONMENT_NAME`.
Unlike build arguments, these are not persisted by Docker in the final image
-(though you can still persist them yourself, so be careful).
+(though you can still persist them yourself, so **be careful**).
In projects:
@@ -845,6 +873,35 @@ the database are preconfigured, but can be customized by setting the associated
postgres://user:password@postgres-host:postgres-port/postgres-database
```
+#### Using external PostgreSQL database providers
+
+While Auto DevOps provides out-of-the-box support for a PostgreSQL container for
+production environments, for some use-cases it may not be sufficiently secure or
+resilient and you may wish to use an external managed provider for PostgreSQL.
+For example, AWS Relational Database Service.
+
+You will need to define environment-scoped variables for `POSTGRES_ENABLED` and `DATABASE_URL` in your project's CI/CD settings.
+
+To achieve this:
+
+1. Disable the built-in PostgreSQL installation for the required environments using
+ scoped [environment variables](../../ci/environments.md#scoping-environments-with-specs).
+ For this use case, it's likely that only `production` will need to be added to this
+ list as the builtin PostgreSQL setup for Review Apps and staging will be sufficient
+ as a high availability setup is not required.
+
+ ![Auto Metrics](img/disable_postgres.png)
+
+1. Define the `DATABASE_URL` CI variable as a scoped environment variable that will be
+ available to your application. This should be a URL in the following format:
+
+ ```yaml
+ postgres://user:password@postgres-host:postgres-port/postgres-database
+ ```
+
+You will need to ensure that your Kubernetes cluster has network access to wherever
+PostgreSQL is hosted.
+
### Environment variables
The following variables can be used for setting up the Auto DevOps domain,
@@ -858,27 +915,27 @@ applications.
| **Variable** | **Description** |
|-----------------------------------------|------------------------------------|
-| `ADDITIONAL_HOSTS` | Fully qualified domain names specified as a comma-separated list that are added to the ingress hosts. |
-| `<ENVIRONMENT>_ADDITIONAL_HOSTS` | For a specific environment, the fully qualified domain names specified as a comma-separated list that are added to the ingress hosts. This takes precedence over `ADDITIONAL_HOSTS`. |
+| `ADDITIONAL_HOSTS` | Fully qualified domain names specified as a comma-separated list that are added to the Ingress hosts. |
+| `<ENVIRONMENT>_ADDITIONAL_HOSTS` | For a specific environment, the fully qualified domain names specified as a comma-separated list that are added to the Ingress hosts. This takes precedence over `ADDITIONAL_HOSTS`. |
| `AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS` | Extra arguments to be passed to the `docker build` command. Note that using quotes will not prevent word splitting. [More details](#passing-arguments-to-docker-build). |
-| `AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES` | A [comma-separated list of CI variable names](#passing-secrets-to-docker-build-beta) to be passed to the `docker build` command as secrets. |
+| `AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES` | A [comma-separated list of CI variable names](#passing-secrets-to-docker-build) to be passed to the `docker build` command as secrets. |
| `AUTO_DEVOPS_CHART` | Helm Chart used to deploy your apps. Defaults to the one [provided by GitLab](https://gitlab.com/gitlab-org/charts/auto-deploy-app). |
| `AUTO_DEVOPS_CHART_REPOSITORY` | Helm Chart repository used to search for charts. Defaults to `https://charts.gitlab.io`. |
-| `AUTO_DEVOPS_CHART_REPOSITORY_NAME` | From Gitlab 11.11, used to set the name of the helm repository. Defaults to `gitlab`. |
-| `AUTO_DEVOPS_CHART_REPOSITORY_USERNAME` | From Gitlab 11.11, used to set a username to connect to the helm repository. Defaults to no credentials. Also set `AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD`. |
-| `AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD` | From Gitlab 11.11, used to set a password to connect to the helm repository. Defaults to no credentials. Also set `AUTO_DEVOPS_CHART_REPOSITORY_USERNAME`. |
+| `AUTO_DEVOPS_CHART_REPOSITORY_NAME` | From GitLab 11.11, used to set the name of the Helm repository. Defaults to `gitlab`. |
+| `AUTO_DEVOPS_CHART_REPOSITORY_USERNAME` | From GitLab 11.11, used to set a username to connect to the Helm repository. Defaults to no credentials. Also set `AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD`. |
+| `AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD` | From GitLab 11.11, used to set a password to connect to the Helm repository. Defaults to no credentials. Also set `AUTO_DEVOPS_CHART_REPOSITORY_USERNAME`. |
| `BUILDPACK_URL` | Buildpack's full URL. Can point to either Git repositories or a tarball URL. For Git repositories, it is possible to point to a specific `ref`. For example `https://github.com/heroku/heroku-buildpack-ruby.git#v142`. |
| `CANARY_ENABLED` | From GitLab 11.0, used to define a [deploy policy for canary environments](#deploy-policy-for-canary-environments-premium). |
| `CANARY_PRODUCTION_REPLICAS` | Number of canary replicas to deploy for [Canary Deployments](../../user/project/canary_deployments.md) in the production environment. Takes precedence over `CANARY_REPLICAS`. Defaults to 1. |
| `CANARY_REPLICAS` | Number of canary replicas to deploy for [Canary Deployments](../../user/project/canary_deployments.md). Defaults to 1. |
| `HELM_RELEASE_NAME` | From GitLab 12.1, allows the `helm` release name to be overridden. Can be used to assign unique release names when deploying multiple projects to a single namespace. |
-| `HELM_UPGRADE_EXTRA_ARGS` | From GitLab 11.11, allows extra arguments in `helm` commands when deploying the application. Note that using quotes will not prevent word splitting. **Tip:** you can use this variable to [customize the Auto Deploy helm chart](#custom-helm-chart) by applying custom override values with `--values my-values.yaml`. |
+| `HELM_UPGRADE_EXTRA_ARGS` | From GitLab 11.11, allows extra arguments in `helm` commands when deploying the application. Note that using quotes will not prevent word splitting. **Tip:** you can use this variable to [customize the Auto Deploy Helm chart](#custom-helm-chart) by applying custom override values with `--values my-values.yaml`. |
| `INCREMENTAL_ROLLOUT_MODE` | From GitLab 11.4, if present, can be used to enable an [incremental rollout](#incremental-rollout-to-production-premium) of your application for the production environment. Set to `manual` for manual deployment jobs or `timed` for automatic rollout deployments with a 5 minute delay each one. |
| `K8S_SECRET_*` | From GitLab 11.7, any variable prefixed with [`K8S_SECRET_`](#application-secret-variables) will be made available by Auto DevOps as environment variables to the deployed application. |
| `KUBE_INGRESS_BASE_DOMAIN` | From GitLab 11.8, can be used to set a domain per cluster. See [cluster domains](../../user/project/clusters/index.md#base-domain) for more information. |
| `PRODUCTION_REPLICAS` | Number of replicas to deploy in the production environment. Takes precedence over `REPLICAS` and defaults to 1. For zero downtime upgrades, set to 2 or greater. |
| `REPLICAS` | Number of replicas to deploy. Defaults to 1. |
-| `ROLLOUT_RESOURCE_TYPE` | From GitLab 11.9, allows specification of the resource type being deployed when using a custom helm chart. Default value is `deployment`. |
+| `ROLLOUT_RESOURCE_TYPE` | From GitLab 11.9, allows specification of the resource type being deployed when using a custom Helm chart. Default value is `deployment`. |
| `ROLLOUT_STATUS_DISABLED` | From GitLab 12.0, used to disable rollout status check because it doesn't support all resource types, for example, `cronjob`. |
| `STAGING_ENABLED` | From GitLab 10.8, used to define a [deploy policy for staging and production environments](#deploy-policy-for-staging-and-production-environments). |
@@ -1138,13 +1195,13 @@ This configuration is deprecated and will be removed in the future.
TIP: **Tip:**
You can also set this inside your [project's settings](#deployment-strategy).
-This configuration based on
+This configuration is based on
[incremental rollout to production](#incremental-rollout-to-production-premium).
Everything behaves the same way, except:
- It's enabled by setting the `INCREMENTAL_ROLLOUT_MODE` variable to `timed`.
-- Instead of the standard `production` job, the following jobs with a 5 minute delay between each are created:
+- Instead of the standard `production` job, the following jobs are created with a 5 minute delay between each :
1. `timed rollout 10%`
1. `timed rollout 25%`
1. `timed rollout 50%`
@@ -1181,22 +1238,6 @@ As of GitLab 10.0, the supported buildpacks are:
The following restrictions apply.
-### Private project support
-
-CAUTION: **Caution:** Private project support in Auto DevOps is experimental.
-
-When a project has been marked as private, GitLab's [Container
-Registry][container-registry] requires authentication when downloading
-containers. Auto DevOps will automatically provide the required authentication
-information to Kubernetes, allowing temporary access to the registry.
-Authentication credentials will be valid while the pipeline is running, allowing
-for a successful initial deployment.
-
-After the pipeline completes, Kubernetes will no longer be able to access the
-Container Registry. **Restarting a pod, scaling a service, or other actions which
-require on-going access to the registry may fail**. On-going secure access is
-planned for a subsequent release.
-
### Private registry support
There is no documented way of using private container registry with Auto DevOps.
@@ -1265,11 +1306,11 @@ curl --data "value=true" --header "PRIVATE-TOKEN: personal_access_token" https:/
[review-app]: ../../ci/review_apps/index.md
[container-registry]: ../../user/packages/container_registry/index.md
[postgresql]: https://www.postgresql.org/
-[Auto DevOps template]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
+[Auto DevOps template]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
[ee]: https://about.gitlab.com/pricing/
[ce-21955]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/21955
[ce-19507]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/19507
## Development guides
-Configuring [GDK for Auto DevOps](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/auto_devops.md).
+[Development guide for Auto DevOps](../../development/auto_devops.md)
diff --git a/doc/topics/autodevops/quick_start_guide.md b/doc/topics/autodevops/quick_start_guide.md
index d0ff149cf31..d9bdd73221f 100644
--- a/doc/topics/autodevops/quick_start_guide.md
+++ b/doc/topics/autodevops/quick_start_guide.md
@@ -25,7 +25,7 @@ Google account (for example, one that you use to access Gmail, Drive, etc.) or c
TIP: **Tip:**
Every new Google Cloud Platform (GCP) account receives [$300 in credit](https://console.cloud.google.com/freetrial),
and in partnership with Google, GitLab is able to offer an additional $200 for new GCP accounts to get started with GitLab's
-Google Kubernetes Engine Integration. All you have to do is [follow this link](https://goo.gl/AaJzRW) and apply for credit.
+Google Kubernetes Engine Integration. All you have to do is [follow this link](https://cloud.google.com/partners/partnercredit/?PCN=a0n60000006Vpz4AAC) and apply for credit.
## Creating a new project from a template
@@ -35,16 +35,16 @@ those projects provide a barebones application built on some well-known framewor
1. In GitLab, click the plus icon (**+**) at the top of the navigation bar and select
**New project**.
1. Go to the **Create from template** tab where you can choose among a Ruby on
- Rails, Spring, or NodeJS Express project. For this example,
- we'll use the Ruby on Rails template.
+ Rails, Spring, or NodeJS Express project.
+ We'll use the Ruby on Rails template.
- ![Select project template](img/guide_project_template.png)
+ ![Select project template](img/guide_project_template_v12_3.png)
1. Give your project a name, optionally a description, and make it public so that
you can take advantage of the features available in the
[GitLab Gold plan](https://about.gitlab.com/pricing/#gitlab-com).
- ![Create project](img/guide_create_project.png)
+ ![Create project](img/guide_create_project_v12_3.png)
1. Click **Create project**.
@@ -56,37 +56,30 @@ under which this application will be deployed.
1. On the project's landing page, click the button labeled **Add Kubernetes cluster**
(note that this option is also available when you navigate to **Operations > Kubernetes**).
- ![Project landing page](img/guide_project_landing_page.png)
+ ![Project landing page](img/guide_project_landing_page_v12_3.png)
-1. Choose **Create on Google Kubernetes Engine**.
+1. One the **Create new cluster on GKE** tab, click "Sign in with Google".
- ![Choose GKE](img/guide_choose_gke.png)
-
-1. Sign in with Google.
-
- ![Google sign in](img/guide_google_signin.png)
+ ![Google sign in](img/guide_google_signin_v12_3.png)
1. Connect with your Google account and press **Allow** when asked (this will
be shown only the first time you connect GitLab with your Google account).
- ![Google auth](img/guide_google_auth.png)
+ ![Google auth](img/guide_google_auth_v12_3.png)
-1. The last step is to fill in the cluster details. Give it a name, leave the
+1. The last step is to provide the cluster details. Give it a name, leave the
environment scope as is, and choose the GCP project under which the cluster
will be created. (Per the instructions when you
[configured your Google account](#configuring-your-google-account), a project
should have already been created for you.) Next, choose the
[region/zone](https://cloud.google.com/compute/docs/regions-zones/) under which the
cluster will be created, enter the number of nodes you want it to have, and
- finally choose their [machine type](https://cloud.google.com/compute/docs/machine-types).
+ finally choose the [machine type](https://cloud.google.com/compute/docs/machine-types).
- ![GitLab GKE cluster details](img/guide_gitlab_gke_details.png)
+ ![GitLab GKE cluster details](img/guide_gitlab_gke_details_v12_3.png)
1. Once ready, click **Create Kubernetes cluster**.
-NOTE: **Note:**
-Do not select `f1-micro` from the **Machine type** dropdown. `f1-micro` machines cannot support a full GitLab installation.
-
After a couple of minutes, the cluster will be created. You can also see its
status on your [GCP dashboard](https://console.cloud.google.com/kubernetes).
@@ -99,7 +92,7 @@ GitLab's Kubernetes integration comes with some
[pre-defined applications](../../user/project/clusters/index.md#installing-applications)
for you to install.
-![Cluster applications](img/guide_cluster_apps.png)
+![Cluster applications](img/guide_cluster_apps_v12_3.png)
The first one to install is Helm Tiller, a package manager for Kubernetes, which
is needed in order to install the rest of the applications. Go ahead and click
@@ -113,32 +106,31 @@ use to supervise the deployed application. We will not install GitLab Runner as
we'll use the shared Runners that GitLab.com provides.
After the Ingress is installed, wait a few seconds and copy the IP address that
-is displayed, which we'll use in the next step when enabling Auto DevOps.
+is displayed in order to add in your base **Domain** at the top of the page. For
+the purpose of this guide, we will use the one suggested by GitLab. Once you have
+filled in the domain, click **Save changes**.
+
+![Cluster Base Domain](img/guide_base_domain_v12_3.png)
-## Enabling Auto DevOps
+## Enabling Auto DevOps (optional)
-Now that the Kubernetes cluster is set up and ready, let's enable Auto DevOps.
+Starting with GitLab 11.3, Auto DevOps is enabled by default. However, it is possible to disable
+Auto DevOps at both the instance-level (for self-managed instances) and also at the group-level.
+Follow these steps if Auto DevOps has been manually disabled.
1. First, navigate to **Settings > CI/CD > Auto DevOps**.
-1. Select **Enable Auto DevOps**.
-1. Add in your base **Domain** by using the one GitLab suggests. Note that
- generally, you would associate the IP address with a domain name on your
- registrar's settings. In this case, for the sake of the guide, we will use
- an alternative DNS that will map any domain name of the scheme
- `anything.ip_address.nip.io` to the corresponding `ip_address`. For example,
- if the IP address of the Ingress is `1.2.3.4`, the domain name to fill in
- would be `1.2.3.4.nip.io`.
+1. Select **Default to Auto DevOps pipeline**.
1. Lastly, let's select the [continuous deployment strategy](index.md#deployment-strategy)
which will automatically deploy the application to production once the pipeline
successfully runs on the `master` branch.
1. Click **Save changes**.
- ![Auto DevOps settings](img/guide_enable_autodevops.png)
+ ![Auto DevOps settings](img/guide_enable_autodevops_v12_3.png)
Once you complete all the above and save your changes, a new pipeline is
automatically created. To view the pipeline, go to **CI/CD > Pipelines**.
-![First pipeline](img/guide_first_pipeline.png)
+![First pipeline](img/guide_first_pipeline_v12_3.png)
In the next section we'll break down the pipeline and explain what each job does.
@@ -149,7 +141,7 @@ By now you should see the pipeline running, but what is it running exactly?
To navigate inside the pipeline, click its status badge. (Its status should be "running").
The pipeline is split into 4 stages, each running a couple of jobs.
-![Pipeline stages](img/guide_pipeline_stages.png)
+![Pipeline stages](img/guide_pipeline_stages_v12_3.png)
In the **build** stage, the application is built into a Docker image and then
uploaded to your project's [Container Registry](../../user/packages/container_registry/index.md) ([Auto Build](index.md#auto-build)).
@@ -190,7 +182,7 @@ page where you can also monitor your application. Let's explore that.
Now that the application is successfully deployed, let's navigate to its
website. First, go to **Operations > Environments**.
-![Environments](img/guide_environments.png)
+![Environments](img/guide_environments_v12_3.png)
In **Environments** you can see some details about the deployed
applications. In the rightmost column for the production environment, you can make use of the three icons:
@@ -201,7 +193,7 @@ applications. In the rightmost column for the production environment, you can ma
Prometheus collects data about the Kubernetes cluster and how the application
affects it (in terms of memory/CPU usage, latency, etc.).
- ![Environments metrics](img/guide_environments_metrics.png)
+ ![Environments metrics](img/guide_environments_metrics_v12_3.png)
- The third icon is the [web terminal](../../ci/environments.md#web-terminals)
and it will open a terminal session right inside the container where the
@@ -235,13 +227,13 @@ you're on the Web IDE, make the following change:
Stage the file, add a commit message, and create a new branch and a merge request
by clicking **Commit**.
-![Web IDE commit](img/guide_ide_commit.png)
+![Web IDE commit](img/guide_ide_commit_v12_3.png)
Once you submit the merge request, you'll see the pipeline running. This will
run all the jobs as [described previously](#deploying-the-application), as well as
a few more that run only on branches other than `master`.
-![Merge request](img/guide_merge_request.png)
+![Merge request](img/guide_merge_request_v12_3.png)
After a few minutes you'll notice that there was a failure in a test.
This means there's a test that was 'broken' by our change.
@@ -259,7 +251,7 @@ bin/rails test test/controllers/welcome_controller_test.rb:4
Let's fix that:
-1. Back to the merge request, click the **Web IDE** button.
+1. Back to the merge request, click the **Open in Web IDE** button.
1. Find the `test/controllers/welcome_controller_test.rb` file and open it.
1. Change line 7 to say `You're on Rails! Powered by GitLab Auto DevOps.`
1. Click **Commit**.
@@ -269,10 +261,10 @@ Let's fix that:
Now, if you go back to the merge request you should not only see the test passing, but
also the application deployed as a [review app](index.md#auto-review-apps). You
-can visit it by following the URL in the merge request. The changes that we
-previously made should be there.
+can visit it by following clicking the **View app** button. You will see
+the changes that we previously made.
-![Review app](img/guide_merge_request_review_app.png)
+![Review app](img/guide_merge_request_review_app_v12_3.png)
Once you merge the merge request, the pipeline will run on the `master` branch,
and the application will be eventually deployed straight to production.
diff --git a/doc/topics/git/how_to_install_git/index.md b/doc/topics/git/how_to_install_git/index.md
index c7bede2d269..db474559627 100644
--- a/doc/topics/git/how_to_install_git/index.md
+++ b/doc/topics/git/how_to_install_git/index.md
@@ -38,7 +38,7 @@ through the macOS App Store.
### Installing Homebrew
-Once Xcode is installed browse to the [Homebrew website](http://brew.sh/index.html)
+Once Xcode is installed browse to the [Homebrew website](https://brew.sh/index.html)
for the official Homebrew installation instructions.
### Installing Git via Homebrew
diff --git a/doc/topics/git/index.md b/doc/topics/git/index.md
index 6a539b526f3..d6e1f83b876 100644
--- a/doc/topics/git/index.md
+++ b/doc/topics/git/index.md
@@ -11,7 +11,7 @@ large projects with speed and efficiency.
[GitLab](https://about.gitlab.com) is a Git-based fully integrated platform for
software development. Besides Git's functionalities, GitLab has a lot of
powerful [features](https://about.gitlab.com/features/) to enhance your
-[workflow](https://about.gitlab.com/2016/10/25/gitlab-workflow-an-overview/).
+[workflow](https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/).
We've gathered some resources to help you to get the best from Git with GitLab.
@@ -39,8 +39,8 @@ The following resources will help you get started with Git:
The following are resources about version control concepts:
- [Git concepts](../../university/training/user_training.md#git-concepts)
-- [Why Git is Worth the Learning Curve](https://about.gitlab.com/2017/05/17/learning-curve-is-the-biggest-challenge-developers-face-with-git/)
-- [The future of SaaS hosted Git repository pricing](https://about.gitlab.com/2016/05/11/git-repository-pricing/)
+- [Why Git is Worth the Learning Curve](https://about.gitlab.com/blog/2017/05/17/learning-curve-is-the-biggest-challenge-developers-face-with-git/)
+- [The future of SaaS hosted Git repository pricing](https://about.gitlab.com/blog/2016/05/11/git-repository-pricing/)
- [Git website topic about version control](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)
- [GitLab University presentation about Version Control](https://docs.google.com/presentation/d/16sX7hUrCZyOFbpvnrAFrg6tVO5_yT98IgdAqOmXwBho/edit?usp=sharing)
@@ -49,8 +49,8 @@ The following are resources about version control concepts:
The following resources may help you become more efficient at using Git:
- [Useful Git commands](useful_git_commands.md) collected by the GitLab support team.
-- [Git Tips & Tricks](https://about.gitlab.com/2016/12/08/git-tips-and-tricks/)
-- [Eight Tips to help you work better with Git](https://about.gitlab.com/2015/02/19/8-tips-to-help-you-work-better-with-git/)
+- [Git Tips & Tricks](https://about.gitlab.com/blog/2016/12/08/git-tips-and-tricks/)
+- [Eight Tips to help you work better with Git](https://about.gitlab.com/blog/2015/02/19/8-tips-to-help-you-work-better-with-git/)
## Troubleshooting Git
@@ -63,7 +63,7 @@ If you have problems with Git, the following may help:
- [Git Branching - Branches in a Nutshell](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell)
- [Git Branching - Branching Workflows](https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows)
-- [GitLab Flow](https://about.gitlab.com/2014/09/29/gitlab-flow/)
+- [GitLab Flow](https://about.gitlab.com/blog/2014/09/29/gitlab-flow/)
## Advanced use
@@ -83,9 +83,9 @@ Git-related queries from GitLab.
The following relate to Git Large File Storage:
-- [Getting Started with Git LFS](https://about.gitlab.com/2017/01/30/getting-started-with-git-lfs-tutorial/)
+- [Getting Started with Git LFS](https://about.gitlab.com/blog/2017/01/30/getting-started-with-git-lfs-tutorial/)
- [Migrate an existing Git repo with Git LFS](migrate_to_git_lfs/index.md)
- [GitLab Git LFS user documentation](../../workflow/lfs/manage_large_binaries_with_git_lfs.md)
- [GitLab Git LFS admin documentation](../../workflow/lfs/lfs_administration.md)
-- [Git-Annex to Git-LFS migration guide](../../workflow/lfs/migrate_from_git_annex_to_git_lfs.md)
-- [Towards a production quality open source Git LFS server](https://about.gitlab.com/2015/08/13/towards-a-production-quality-open-source-git-lfs-server/)
+- [git-annex to Git-LFS migration guide](../../workflow/lfs/migrate_from_git_annex_to_git_lfs.md)
+- [Towards a production quality open source Git LFS server](https://about.gitlab.com/blog/2015/08/13/towards-a-production-quality-open-source-git-lfs-server/)
diff --git a/doc/topics/git/migrate_to_git_lfs/index.md b/doc/topics/git/migrate_to_git_lfs/index.md
index c879e404997..0c30b45c552 100644
--- a/doc/topics/git/migrate_to_git_lfs/index.md
+++ b/doc/topics/git/migrate_to_git_lfs/index.md
@@ -15,7 +15,7 @@ will not actually reduce the size of your repository because
the files are still referenced by previous commits.
Through the method described on this document, first migrate
-to Git LFS with [BFG](https://rtyley.github.io/bfg-repo-cleaner/)
+to Git LFS with a tool such as the open source community-maintained [BFG](https://rtyley.github.io/bfg-repo-cleaner/)
through a mirror repo, then clean up the repository's history,
and lastly create LFS tracking rules to prevent new binary files
from being added.
@@ -133,7 +133,7 @@ Consider an example upstream project, `git@gitlab.com:gitlab-tests/test-git-lfs-
# You may need to reset your local copy with upstream's `master` after force-pushing from the mirror:
git reset --hard origin/master
# Track the files with LFS:
- git lfs track "*.gif" "*.png" "*.jpg" "*.psd" "*.mp4" ".gitattributes" "img/"
+ git lfs track "*.gif" "*.png" "*.jpg" "*.psd" "*.mp4" "img/"
```
Now all existing the files you converted, as well as the new
@@ -162,7 +162,7 @@ but commented out to help encourage others to add to it in the future. -->
## References
-- [Getting Started with Git LFS](https://about.gitlab.com/2017/01/30/getting-started-with-git-lfs-tutorial/)
+- [Getting Started with Git LFS](https://about.gitlab.com/blog/2017/01/30/getting-started-with-git-lfs-tutorial/)
- [Migrate from Git Annex to Git LFS](../../../workflow/lfs/migrate_from_git_annex_to_git_lfs.md)
- [GitLab's Git LFS user documentation](../../../workflow/lfs/manage_large_binaries_with_git_lfs.md)
- [GitLab's Git LFS administrator documentation](../../../workflow/lfs/lfs_administration.md)
diff --git a/doc/topics/git/numerous_undo_possibilities_in_git/index.md b/doc/topics/git/numerous_undo_possibilities_in_git/index.md
index 2ab03df095c..33da01d35b8 100644
--- a/doc/topics/git/numerous_undo_possibilities_in_git/index.md
+++ b/doc/topics/git/numerous_undo_possibilities_in_git/index.md
@@ -487,9 +487,9 @@ git filter-branch --tree-filter 'rm filename' HEAD
Since `git filter-branch` command might be slow on big repositories, there are
tools that can use some of Git specifics to enable faster execution of common
tasks (which is exactly what removing sensitive information file is about).
-An alternative is [BFG Repo-cleaner][bfg-repo-cleaner]. Keep in mind that these
-tools are faster because they do not provide a same fully feature set as `git filter-branch`
-does, but focus on specific use cases.
+An alternative is the open source community-maintained tool [BFG][bfg-repo-cleaner].
+Keep in mind that these tools are faster because they do not provide the same
+feature set as `git filter-branch` does, but focus on specific use cases.
## Conclusion
@@ -521,5 +521,5 @@ but commented out to help encourage others to add to it in the future. -->
[git-filters-manual]: https://git-scm.com/docs/git-filter-branch#_options
[git-official]: https://git-scm.com/
[gitlab]: https://gitlab.com/gitlab-org/gitlab/blob/master/CONTRIBUTING.md#contribution-acceptance-criteria
-[gitlab-flow]: https://about.gitlab.com/2014/09/29/gitlab-flow/
-[gitlab-git-tips-n-tricks]: https://about.gitlab.com/2016/12/08/git-tips-and-tricks/
+[gitlab-flow]: https://about.gitlab.com/blog/2014/09/29/gitlab-flow/
+[gitlab-git-tips-n-tricks]: https://about.gitlab.com/blog/2016/12/08/git-tips-and-tricks/
diff --git a/doc/topics/git/partial_clone.md b/doc/topics/git/partial_clone.md
index c9a5430b2c6..ce1b551ddb6 100644
--- a/doc/topics/git/partial_clone.md
+++ b/doc/topics/git/partial_clone.md
@@ -102,7 +102,8 @@ enabled on the Git server:
1. *Create a new Git repository and fetch.* Support for `--filter=sparse:oid`
using the clone command is incomplete, so we will emulate the clone command
by hand, using `git init` and `git fetch`. Follow
- [gitaly#1769](https://gitlab.com/gitlab-org/gitaly/issues/1769) for updates.
+ [issue tracking support for `--filter=sparse:oid`](https://gitlab.com/gitlab-org/git/issues/4)
+ for updates.
```bash
# Create a new directory for the Git repository
@@ -133,7 +134,7 @@ enabled on the Git server:
1. **Sparse checkout** must be enabled and configured to prevent objects from
other paths being downloaded automatically when checking out branches. Follow
- [gitaly#1765](https://gitlab.com/gitlab-org/gitaly/issues/1765) for updates.
+ [issue proposing automating sparse checkouts](https://gitlab.com/gitlab-org/git/issues/5) for updates.
```bash
# Enable sparse checkout
diff --git a/doc/topics/git/troubleshooting_git.md b/doc/topics/git/troubleshooting_git.md
index 11284da30af..5391f6e5ad6 100644
--- a/doc/topics/git/troubleshooting_git.md
+++ b/doc/topics/git/troubleshooting_git.md
@@ -8,7 +8,7 @@ Sometimes things don't work the way they should or as you might expect when
you're using Git. Here are some tips on troubleshooting and resolving issues
with Git.
-## Broken pipe errors on git push
+## Broken pipe errors on `git push`
'Broken pipe' errors can occur when attempting to push to a remote repository.
When pushing you will usually see:
@@ -22,8 +22,13 @@ To fix this issue, here are some possible solutions.
### Increase the POST buffer size in Git
-**If pushing over HTTP**, you can try increasing the POST buffer size in Git's
-configuration. Open a terminal and enter:
+**If you're using Git over HTTP instead of SSH**, you can try increasing the POST buffer size in Git's
+configuration.
+
+Example of an error during a clone:
+`fatal: pack has bad object at offset XXXXXXXXX: inflate returned -5`
+
+Open a terminal and enter:
```sh
git config http.postBuffer 52428800
@@ -68,7 +73,7 @@ ClientAliveInterval 60
ClientAliveCountMax 5
```
-### Running a git repack
+### Running a `git repack`
**If 'pack-objects' type errors are also being displayed**, you can try to
run a `git repack` before attempting to push to the remote repository again:
@@ -110,7 +115,7 @@ MaxStartups 100
Restart SSHD for the change to take effect.
-## Timeout during git push/pull
+## Timeout during `git push` / `git pull`
If pulling/pushing from/to your repository ends up taking more than 50 seconds,
a timeout will be issued with a log of the number of operations performed
diff --git a/doc/topics/git/useful_git_commands.md b/doc/topics/git/useful_git_commands.md
index 030e62f485a..cfe19c89618 100644
--- a/doc/topics/git/useful_git_commands.md
+++ b/doc/topics/git/useful_git_commands.md
@@ -108,7 +108,7 @@ git reflog
### Check the Git history of a file
-The basic command to check the git history of a file:
+The basic command to check the Git history of a file:
```sh
git log <file>
@@ -147,7 +147,7 @@ gitk --follow <file>
## Debugging
-### Use a custom SSH key for a git command
+### Use a custom SSH key for a Git command
```sh
GIT_SSH_COMMAND="ssh -i ~/.ssh/gitlabadmin" git <command>
@@ -183,7 +183,7 @@ git rebase -i master
git rebase --continue
```
-### Use git rerere
+### Use `git rerere`
To _reuse_ recorded solutions to the same problems when repeated:
diff --git a/doc/university/README.md b/doc/university/README.md
index 2d2321ffc2d..8f5a5038bb9 100644
--- a/doc/university/README.md
+++ b/doc/university/README.md
@@ -26,7 +26,7 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
### 1.1. Version Control and Git
1. [Version Control Systems](https://docs.google.com/presentation/d/16sX7hUrCZyOFbpvnrAFrg6tVO5_yT98IgdAqOmXwBho/edit#slide=id.g72f2e4906_2_29)
-1. [Code School: An Introduction to Git](https://www.codeschool.com/account/courses/try-git)
+1. [Katakoda: Learn Git Version Control using Interactive Browser-Based Scenarios](https://www.katacoda.com/courses/git)
### 1.2. GitLab Basics
@@ -34,49 +34,49 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
1. [Why Use Git and GitLab - Slides](https://docs.google.com/a/gitlab.com/presentation/d/1RcZhFmn5VPvoFu6UMxhMOy7lAsToeBZRjLRn0LIdaNc/edit?usp=drive_web)
1. [GitLab Basics - Article](../gitlab-basics/README.md)
1. [Git and GitLab Basics - Video](https://www.youtube.com/watch?v=03wb9FvO4Ak&index=5&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
-1. [Git and GitLab Basics - Online Course](https://courses.platzi.com/classes/git-gitlab/concepto/part-1/part-23370/material/)
+1. [Git and GitLab Basics - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2475-part-233-2/)
1. [Comparison of GitLab Versions](https://about.gitlab.com/features/#compare)
### 1.3. Your GitLab Account
-1. [Create a GitLab Account - Online Course](https://courses.platzi.com/classes/git-gitlab/concepto/first-steps/create-an-account-on-gitlab/material/)
+1. [Create a GitLab Account - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2434-create-an-account-on-gitlab/)
1. [Create and Add your SSH key to GitLab - Video](https://www.youtube.com/watch?v=54mxyLo3Mqk)
### 1.4. GitLab Projects
1. [Repositories, Projects and Groups - Video](https://www.youtube.com/watch?v=4TWfh1aKHHw&index=1&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
1. [Creating a Project in GitLab - Video](https://www.youtube.com/watch?v=7p0hrpNaJ14)
-1. [How to Create Files and Directories](https://about.gitlab.com/2016/02/10/feature-highlight-create-files-and-directories-from-files-page/)
-1. [GitLab Todos](https://about.gitlab.com/2016/03/02/gitlab-todos-feature-highlight/)
-1. [GitLab's Work in Progress (WIP) Flag](https://about.gitlab.com/2016/01/08/feature-highlight-wip/)
+1. [How to Create Files and Directories](https://about.gitlab.com/blog/2016/02/10/feature-highlight-create-files-and-directories-from-files-page/)
+1. [GitLab Todos](https://about.gitlab.com/blog/2016/03/02/gitlab-todos-feature-highlight/)
+1. [GitLab's Work in Progress (WIP) Flag](https://about.gitlab.com/blog/2016/01/08/feature-highlight-wip/)
### 1.5. Migrating from other Source Control
-1. [Migrating from BitBucket/Stash](../user/project/import/bitbucket.md)
+1. [Migrating from Bitbucket/Stash](../user/project/import/bitbucket.md)
1. [Migrating from GitHub](../user/project/import/github.md)
1. [Migrating from SVN](../user/project/import/svn.md)
1. [Migrating from Fogbugz](../user/project/import/fogbugz.md)
### 1.6. The GitLab team
-1. [About GitLab](https://about.gitlab.com/about/)
+1. [About GitLab](https://about.gitlab.com/company/)
1. [GitLab Direction](https://about.gitlab.com/direction/)
-1. [GitLab Master Plan](https://about.gitlab.com/2016/09/13/gitlab-master-plan/)
+1. [GitLab Master Plan](https://about.gitlab.com/blog/2016/09/13/gitlab-master-plan/)
1. [Making GitLab Great for Everyone - Video](https://www.youtube.com/watch?v=GGC40y4vMx0) - Response to "Dear GitHub" letter
-1. [Using Innersourcing to Improve Collaboration](https://about.gitlab.com/2014/09/05/innersourcing-using-the-open-source-workflow-to-improve-collaboration-within-an-organization/)
+1. [Using Innersourcing to Improve Collaboration](https://about.gitlab.com/blog/2014/09/05/innersourcing-using-the-open-source-workflow-to-improve-collaboration-within-an-organization/)
1. [The Software Development Market and GitLab - Video](https://www.youtube.com/watch?v=sXlhgPK1NTY&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e&index=6) - [Slides](https://docs.google.com/presentation/d/1vCU-NbZWz8NTNK8Vu3y4zGMAHb5DpC8PE5mHtw1PWfI/edit)
1. [The GitLab Book Club](bookclub/index.md)
1. [GitLab Resources](https://about.gitlab.com/resources/)
### 1.7 Community and Support
-1. [Getting Help](https://about.gitlab.com/getting-help/)
+1. [Getting Help](https://about.gitlab.com/get-help/)
- Proposing Features and Reporting and Tracking bugs for GitLab
- The GitLab IRC channel, Gitter Chat Room, Community Forum and Mailing List
- Getting Technical Support
- Being part of our Great Community and Contributing to GitLab
-1. [Getting Started with the GitLab Development Kit (GDK)](https://about.gitlab.com/2016/06/08/getting-started-with-gitlab-development-kit/)
-1. [Contributing Technical Articles to the GitLab Blog](https://about.gitlab.com/2016/01/26/call-for-writers/)
+1. [Getting Started with the GitLab Development Kit (GDK)](https://about.gitlab.com/blog/2016/06/08/getting-started-with-gitlab-development-kit/)
+1. [Contributing Technical Articles to the GitLab Blog](https://about.gitlab.com/blog/2016/01/26/call-for-writers/)
1. [GitLab Training Workshops](training/end-user/README.md)
1. [GitLab Professional Services](https://about.gitlab.com/services/)
@@ -88,56 +88,56 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
### 2.1 GitLab Pages
-1. [Using any Static Site Generator with GitLab Pages](https://about.gitlab.com/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/)
-1. [Securing GitLab Pages with SSL](https://about.gitlab.com/2016/06/24/secure-gitlab-pages-with-startssl/)
+1. [Using any Static Site Generator with GitLab Pages](https://about.gitlab.com/blog/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/)
+1. [Securing GitLab Pages with SSL](https://about.gitlab.com/blog/2016/06/24/secure-gitlab-pages-with-startssl/)
1. [GitLab Pages Documentation](../user/project/pages/index.md)
### 2.2. GitLab Issues
1. [Markdown in GitLab](../user/markdown.md)
1. [Issues and Merge Requests - Video](https://www.youtube.com/watch?v=raXvuwet78M)
-1. [Due Dates and Milestones for GitLab Issues](https://about.gitlab.com/2016/08/05/feature-highlight-set-dates-for-issues/)
-1. [How to Use GitLab Labels](https://about.gitlab.com/2016/08/17/using-gitlab-labels/)
-1. [Applying GitLab Labels Automatically](https://about.gitlab.com/2016/08/19/applying-gitlab-labels-automatically/)
+1. [Due Dates and Milestones for GitLab Issues](https://about.gitlab.com/blog/2016/08/05/feature-highlight-set-dates-for-issues/)
+1. [How to Use GitLab Labels](https://about.gitlab.com/blog/2016/08/17/using-gitlab-labels/)
+1. [Applying GitLab Labels Automatically](https://about.gitlab.com/blog/2016/08/19/applying-gitlab-labels-automatically/)
1. [GitLab Issue Board - Product Page](https://about.gitlab.com/product/issueboard/)
-1. [An Overview of GitLab Issue Board](https://about.gitlab.com/2016/08/22/announcing-the-gitlab-issue-board/)
-1. [Designing GitLab Issue Board](https://about.gitlab.com/2016/08/31/designing-issue-boards/)
+1. [An Overview of GitLab Issue Board](https://about.gitlab.com/blog/2016/08/22/announcing-the-gitlab-issue-board/)
+1. [Designing GitLab Issue Board](https://about.gitlab.com/blog/2016/08/31/designing-issue-boards/)
1. [From Idea to Production with GitLab - Video](https://www.youtube.com/watch?v=25pHyknRgEo&index=14&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
### 2.3. Continuous Integration
1. [Operating Systems, Servers, VMs, Containers and Unix - Video](https://www.youtube.com/watch?v=V61kL6IC-zY&index=8&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
-1. [GitLab CI - Product Page](https://about.gitlab.com/gitlab-ci/)
-1. [Getting started with GitLab and GitLab CI](https://about.gitlab.com/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/)
-1. [GitLab Container Registry](https://about.gitlab.com/2016/05/23/gitlab-container-registry/)
+1. [GitLab CI - Product Page](https://about.gitlab.com/product/continuous-integration/)
+1. [Getting started with GitLab and GitLab CI](https://about.gitlab.com/blog/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/)
+1. [GitLab Container Registry](https://about.gitlab.com/blog/2016/05/23/gitlab-container-registry/)
1. [GitLab and Docker - Video](https://www.youtube.com/watch?v=ugOrCcbdHko&index=12&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
-1. [How we scale GitLab with built in Docker](https://about.gitlab.com/2016/06/21/how-we-scale-gitlab-by-having-docker-built-in/)
-1. [Continuous Integration, Delivery, and Deployment with GitLab](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/)
-1. [Deployments and Environments](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/)
-1. [Sequential, Parallel or Custom Pipelines](https://about.gitlab.com/2016/07/29/the-basics-of-gitlab-ci/)
-1. [Setting up GitLab Runner For Continuous Integration](https://about.gitlab.com/2016/03/01/gitlab-runner-with-docker/)
-1. [Setting up GitLab Runner on DigitalOcean](https://about.gitlab.com/2016/04/19/how-to-set-up-gitlab-runner-on-digitalocean/)
-1. [Setting up GitLab CI for iOS projects](https://about.gitlab.com/2016/03/10/setting-up-gitlab-ci-for-ios-projects/)
+1. [How we scale GitLab with built in Docker](https://about.gitlab.com/blog/2016/06/21/how-we-scale-gitlab-by-having-docker-built-in/)
+1. [Continuous Integration, Delivery, and Deployment with GitLab](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/)
+1. [Deployments and Environments](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/)
+1. [Sequential, Parallel or Custom Pipelines](https://about.gitlab.com/blog/2016/07/29/the-basics-of-gitlab-ci/)
+1. [Setting up GitLab Runner For Continuous Integration](https://about.gitlab.com/blog/2016/03/01/gitlab-runner-with-docker/)
+1. [Setting up GitLab Runner on DigitalOcean](https://about.gitlab.com/blog/2016/04/19/how-to-set-up-gitlab-runner-on-digitalocean/)
+1. [Setting up GitLab CI for iOS projects](https://about.gitlab.com/blog/2016/03/10/setting-up-gitlab-ci-for-ios-projects/)
1. [IBM: Continuous Delivery vs Continuous Deployment - Video](https://www.youtube.com/watch?v=igwFj8PPSnw)
1. [Amazon: Transition to Continuous Delivery - Video](https://www.youtube.com/watch?v=esEFaY0FDKc)
-1. [TechBeacon: Doing continuous delivery? Focus first on reducing release cycle times](https://techbeacon.com/doing-continuous-delivery-focus-first-reducing-release-cycle-times)
+1. [TechBeacon: Doing continuous delivery? Focus first on reducing release cycle times](https://techbeacon.com/devops/doing-continuous-delivery-focus-first-reducing-release-cycle-times)
1. See **[Integrations](#39-integrations)** for integrations with other CI services.
### 2.4. Workflow
1. [GitLab Flow - Video](https://youtu.be/enMumwvLAug?list=PLFGfElNsQthZnwMUFi6rqkyUZkI00OxIV)
1. [GitLab Flow vs Forking in GitLab - Video](https://www.youtube.com/watch?v=UGotqAUACZA)
-1. [GitLab Flow Overview](https://about.gitlab.com/2014/09/29/gitlab-flow/)
-1. [Always Start with an Issue](https://about.gitlab.com/2016/03/03/start-with-an-issue/)
+1. [GitLab Flow Overview](https://about.gitlab.com/blog/2014/09/29/gitlab-flow/)
+1. [Always Start with an Issue](https://about.gitlab.com/blog/2016/03/03/start-with-an-issue/)
1. [GitLab Flow Documentation](../workflow/gitlab_flow.md)
### 2.5. GitLab Comparisons
-1. [GitLab Compared to Other Tools](https://about.gitlab.com/comparison/)
-1. [Comparing GitLab Terminology](https://about.gitlab.com/2016/01/27/comparing-terms-gitlab-github-bitbucket/)
+1. [GitLab Compared to Other Tools](https://about.gitlab.com/devops-tools/)
+1. [Comparing GitLab Terminology](https://about.gitlab.com/blog/2016/01/27/comparing-terms-gitlab-github-bitbucket/)
1. [GitLab Compared to Atlassian (Recording 2016-03-03)](https://youtu.be/Nbzp1t45ERo)
-1. [GitLab Position FAQ](https://about.gitlab.com/handbook/positioning-faq)
-1. [Customer review of GitLab with points on why they prefer GitLab](https://www.enovate.co.uk/web-design-blog/2015/11/25/gitlab-review/)
+1. [GitLab Position FAQ](https://about.gitlab.com/handbook/positioning-faq/)
+1. [Customer review of GitLab with points on why they prefer GitLab](https://www.enovate.co.uk/blog/2015/11/25/gitlab-review)
## 3. GitLab Advanced
@@ -145,16 +145,16 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
1. [Xebia Labs: Dev Ops Terminology](https://xebialabs.com/glossary/)
1. [Xebia Labs: Periodic Table of DevOps Tools](https://xebialabs.com/periodic-table-of-devops-tools/)
-1. [Puppet Labs: State of Dev Ops 2016 - Book](https://puppet.com/resources/white-paper/2016-state-of-devops-report)
+1. [Puppet Labs: State of Dev Ops 2016 - Book](https://puppet.com/resources/whitepaper/2016-state-of-devops-report)
### 3.2. Installing GitLab with Omnibus
1. [What is Omnibus - Video](https://www.youtube.com/watch?v=XTmpKudd-Oo)
1. [How to Install GitLab with Omnibus - Video](https://www.youtube.com/watch?v=Q69YaOjqNhg)
-1. [Installing GitLab - Online Course](https://courses.platzi.com/classes/git-gitlab/concepto/part-1/part-3/material/)
+1. [Installing GitLab - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2476-part-0/)
1. [Using a Non-Packaged PostgreSQL Database](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#using-a-non-packaged-postgresql-database-management-server)
-1. [Installing GitLab on Microsoft Azure](https://about.gitlab.com/2016/07/13/how-to-setup-a-gitlab-instance-on-microsoft-azure/)
-1. [Installing GitLab on Digital Ocean](https://about.gitlab.com/2016/04/27/getting-started-with-gitlab-and-digitalocean/)
+1. [Installing GitLab on Microsoft Azure](https://about.gitlab.com/blog/2016/07/13/how-to-setup-a-gitlab-instance-on-microsoft-azure/)
+1. [Installing GitLab on Digital Ocean](https://about.gitlab.com/blog/2016/04/27/getting-started-with-gitlab-and-digitalocean/)
### 3.3. Permissions
@@ -176,11 +176,11 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
1. [Scalability and High Availability - Video](https://www.youtube.com/watch?v=cXRMJJb6sp4&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e&index=2)
1. [High Availability - Video](https://www.youtube.com/watch?v=36KS808u6bE&index=15&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
-1. [High Availability Documentation](https://about.gitlab.com/high-availability/)
+1. [High Availability Documentation](https://about.gitlab.com/solutions/high-availability/)
### 3.8 Cycle Analytics
-1. [GitLab Cycle Analytics Overview](https://about.gitlab.com/2016/09/21/cycle-analytics-feature-highlight/)
+1. [GitLab Cycle Analytics Overview](https://about.gitlab.com/blog/2016/09/21/cycle-analytics-feature-highlight/)
1. [GitLab Cycle Analytics - Product Page](https://about.gitlab.com/product/cycle-analytics/)
### 3.9. Integrations
@@ -190,8 +190,8 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
1. [How to Integrate Jenkins with GitLab](../integration/jenkins.md)
1. [How to Integrate Bamboo with GitLab](../user/project/integrations/bamboo.md)
1. [How to Integrate Slack with GitLab](../user/project/integrations/slack.md)
-1. [How to Integrate Convox with GitLab](https://about.gitlab.com/2016/06/09/continuous-delivery-with-gitlab-and-convox/)
-1. [Getting Started with GitLab and Shippable CI](https://about.gitlab.com/2016/05/05/getting-started-gitlab-and-shippable/)
+1. [How to Integrate Convox with GitLab](https://about.gitlab.com/blog/2016/06/09/continuous-delivery-with-gitlab-and-convox/)
+1. [Getting Started with GitLab and Shippable CI](https://about.gitlab.com/blog/2016/05/05/getting-started-gitlab-and-shippable/)
## 4. External Articles
@@ -205,7 +205,7 @@ NOTE: **Note:**
Some content can only be accessed by GitLab team members.
1. [Support Path](support/README.md)
-1. [Sales Path](https://about.gitlab.com/handbook/sales-onboarding/)
+1. [Sales Path](https://about.gitlab.com/handbook/sales/onboarding/)
1. [User Training](training/user_training.md)
1. [GitLab Flow Training](training/gitlab_flow.md)
1. [Training Topics](training/index.md)
diff --git a/doc/university/bookclub/index.md b/doc/university/bookclub/index.md
index 330078e979f..c6dad663c0e 100644
--- a/doc/university/bookclub/index.md
+++ b/doc/university/bookclub/index.md
@@ -15,10 +15,10 @@ See the [book list](booklist.md) for additional recommendations.
1. **Remote: Office not required**
David Heinemeier Hansson and Jason Fried, 2013
- ([amazon](http://www.amazon.co.uk/Remote-Required-David-Heinemeier-Hansson/dp/0091954673))
+ ([amazon](https://www.amazon.co.uk/Remote-Required-David-Heinemeier-Hansson/dp/0091954673))
1. **The Year Without Pants**
- Scott Berkun, 2013 ([ScottBerkun.com](http://scottberkun.com/yearwithoutpants/))
+ Scott Berkun, 2013 ([ScottBerkun.com](https://scottberkun.com/yearwithoutpants/))
Any other books you'd like to suggest? Edit this page and add them to the queue.
diff --git a/doc/university/glossary/README.md b/doc/university/glossary/README.md
index 21e2da3e47c..297b841b283 100644
--- a/doc/university/glossary/README.md
+++ b/doc/university/glossary/README.md
@@ -6,6 +6,6 @@ comments: false
This page has been removed after an effort to ensure that all applicable GitLab-specific
terms are available in context on the relevant [GitLab Documentation](https://docs.gitlab.com/)
-or [about.gitlab.com](https://about.gitlab.com/) pages.
+or <https://about.gitlab.com/> pages.
If you are looking for a definition of a specific term, please search these sites.
diff --git a/doc/university/process/README.md b/doc/university/process/README.md
index c3e023da655..a9835ce879c 100644
--- a/doc/university/process/README.md
+++ b/doc/university/process/README.md
@@ -19,10 +19,10 @@ please submit a merge request to add an upcoming class, assign to
1. Don't make materials that are needlessly specific to one group of people, try
to keep the wording broad and inclusive (don't make things for only GitLab Inc.
people, only interns, only customers, etc.).
-1. To allow people to contribute all content should be in git.
+1. To allow people to contribute all content should be in Git.
1. The content can go in a subdirectory under `/doc/university/`.
-1. To make, view or modify the slides of the classes use [Deckset](http://www.decksetapp.com/)
- or [RevealJS](http://lab.hakim.se/reveal-js/). Do not use Powerpoint or Google
+1. To make, view or modify the slides of the classes use [Deckset](https://www.deckset.com)
+ or [RevealJS](https://revealjs.com/#/). Do not use Powerpoint or Google
Slides since this prevents everyone from contributing.
1. Please upload any video recordings to our Youtube channel. We prefer them to
be public, if needed they can be unlisted but if so they should be linked from
diff --git a/doc/university/support/README.md b/doc/university/support/README.md
index 76cc258355f..1c77fbeb8d6 100644
--- a/doc/university/support/README.md
+++ b/doc/university/support/README.md
@@ -70,7 +70,7 @@ Sometimes we need to upgrade customers from old versions of GitLab to latest, so
- [Perform the MySQL to PostgreSQL migration to convert your backup](../../update/mysql_to_postgresql.md)
- [Upgrade to Omnibus 7.14](https://docs.gitlab.com/omnibus/update/README.html#upgrading-from-a-non-omnibus-installation-to-an-omnibus-installation)
- [Restore backup using our Restore rake task](../../raketasks/backup_restore.md#restore)
- - [Upgrade to latest EE](https://about.gitlab.com/downloads-ee)
+ - [Upgrade to latest EE](https://about.gitlab.com/update/)
- (GitLab inc. only) Acquire and apply a license for the Enterprise Edition product, ask in #support
- Perform a downgrade from [EE to CE](../../downgrade_ee_to_ce/README.md)
@@ -147,12 +147,12 @@ Some tickets need specific knowledge or a deep understanding of a particular com
- Read about [Escalation](https://about.gitlab.com/handbook/support/workflows/issue_escalations.html)
- Find the macros in Zendesk for ticket escalations
-- Take a look at the [GitLab.com Team page](https://about.gitlab.com/team/) to find the resident experts in their fields
+- Take a look at the [GitLab.com Team page](https://about.gitlab.com/company/team/) to find the resident experts in their fields
### Learn about raising issues and fielding feature proposals
- Understand what's in the pipeline and proposed features at GitLab: [Direction Page](https://about.gitlab.com/direction/)
-- Practice searching issues and filtering using [labels](https://gitlab.com/gitlab-org/gitlab-foss/labels) to find existing feature proposals and bugs
+- Practice searching issues and filtering using [labels](https://gitlab.com/gitlab-org/gitlab/-/labels) to find existing feature proposals and bugs
- If raising a new issue always provide a relevant label and a link to the relevant ticket in Zendesk
- Add [customer labels](https://gitlab.com/gitlab-org/gitlab-foss/issues?label_name%5B%5D=customer) for those issues relevant to our subscribers
- Take a look at the [existing issue templates](https://gitlab.com/gitlab-org/gitlab/blob/master/CONTRIBUTING.md#issue-tracker) to see what is expected
diff --git a/doc/university/training/end-user/README.md b/doc/university/training/end-user/README.md
index 0ea51a95445..4c86aedff8f 100644
--- a/doc/university/training/end-user/README.md
+++ b/doc/university/training/end-user/README.md
@@ -48,7 +48,7 @@ Workshop Time!
### Setup
- Windows: Install 'Git for Windows'
- - <https://git-for-windows.github.io>
+ - <https://gitforwindows.org>
- Mac: Type `git` in the Terminal application.
- If it's not installed, it will prompt you to install it.
- Linux
@@ -109,11 +109,11 @@ cd ~/workspace
- GitLab is an application to code, test and deploy.
- Provides repository management with access controls, code reviews,
issue tracking, Merge Requests, and other features.
-- The hosted version of GitLab is gitlab.com
+- The hosted version of GitLab is <https://gitlab.com>
### New Project
-- Sign in into your gitlab.com account
+- Sign in into your <https://gitlab.com> account
- Create a project
- Choose to import from 'Any Repo by URL' and use <https://gitlab.com/gitlab-org/training-examples.git>
- On your machine clone the `training-examples` project
@@ -126,7 +126,7 @@ cd ~/workspace
1. Stage the file
1. Commit
1. Push the commit to the remote
-1. View the git log
+1. View the Git log
```shell
# Edit `edit_this_file.rb`
@@ -253,7 +253,7 @@ git push origin conflicts_branch -f
- When to use `git merge` and when to use `git rebase`
- Rebase when updating your branch with master
- Merge when bringing changes from feature to master
-- Reference: <https://www.atlassian.com/git/tutorials/merging-vs-rebasing/>
+- Reference: <https://www.atlassian.com/git/tutorials/merging-vs-rebasing>
## Revert and Unstage
@@ -271,7 +271,7 @@ This will unstage the file but maintain the modifications. To revert the file ba
git checkout -- <file>
```
-To remove a file from disk and repo use 'git rm' and to rm a dir use the '-r' flag:
+To remove a file from disk and repo use `git rm` and to remove a directory use the `-r` flag:
```sh
git rm '*.txt'
@@ -338,7 +338,7 @@ git pull origin master
git push origin master
```
-### git revert vs git reset
+### `git revert` vs `git reset`
Reset removes the commit while revert removes the changes but leaves the commit
Revert is safer considering we can revert a revert
diff --git a/doc/university/training/topics/env_setup.md b/doc/university/training/topics/env_setup.md
index 92d2613c5d2..f65b4f68868 100644
--- a/doc/university/training/topics/env_setup.md
+++ b/doc/university/training/topics/env_setup.md
@@ -7,7 +7,7 @@ comments: false
## Install
- **Windows**
- - Install 'Git for Windows' from <https://git-for-windows.github.io>
+ - Install 'Git for Windows' from <https://gitforwindows.org>
- **Mac**
- Type '`git`' in the Terminal application.
diff --git a/doc/university/training/topics/getting_started.md b/doc/university/training/topics/getting_started.md
index 3fadb58e804..bb197f3f1ed 100644
--- a/doc/university/training/topics/getting_started.md
+++ b/doc/university/training/topics/getting_started.md
@@ -65,7 +65,7 @@ Modified files that have been marked to go in the next commit.
1. Stage the file
1. Commit
1. Push the commit to the remote
-1. View the git log
+1. View the Git log
```sh
# Edit `edit_this_file.rb`
@@ -79,5 +79,5 @@ git log
## Note
-- git fetch vs pull
-- Pull is git fetch + git merge
+- `git fetch` vs `git pull`
+- Pull is `git fetch` + `git merge`
diff --git a/doc/university/training/topics/merge_conflicts.md b/doc/university/training/topics/merge_conflicts.md
index 97bb038f405..a01b3dbf3e0 100644
--- a/doc/university/training/topics/merge_conflicts.md
+++ b/doc/university/training/topics/merge_conflicts.md
@@ -60,7 +60,7 @@ git push origin conflicts_branch -f
## Note
-- When to use 'git merge' and when to use 'git rebase'
+- When to use `git merge` and when to use `git rebase`
- Rebase when updating your branch with master
- Merge when bringing changes from feature to master
-- Reference: <https://www.atlassian.com/git/tutorials/merging-vs-rebasing/>
+- Reference: <https://www.atlassian.com/git/tutorials/merging-vs-rebasing>
diff --git a/doc/university/training/topics/rollback_commits.md b/doc/university/training/topics/rollback_commits.md
index c17e8d59737..333b2f23a1b 100644
--- a/doc/university/training/topics/rollback_commits.md
+++ b/doc/university/training/topics/rollback_commits.md
@@ -62,7 +62,7 @@ git push origin master
## Note
-- git revert vs git reset
+- `git revert` vs `git reset`
- Reset removes the commit while revert removes the changes but leaves the commit
- Revert is safer considering we can revert a revert
diff --git a/doc/university/training/topics/stash.md b/doc/university/training/topics/stash.md
index d3e63db0c6a..c582240d0f7 100644
--- a/doc/university/training/topics/stash.md
+++ b/doc/university/training/topics/stash.md
@@ -4,7 +4,7 @@ comments: false
# Git Stash
-We use git stash to store our changes when they are not ready to be committed
+We use `git stash` to store our changes when they are not ready to be committed
and we need to change to a different branch.
- Stash:
diff --git a/doc/university/training/topics/unstage.md b/doc/university/training/topics/unstage.md
index d7482bf2bd5..9a9d42221a4 100644
--- a/doc/university/training/topics/unstage.md
+++ b/doc/university/training/topics/unstage.md
@@ -16,7 +16,7 @@ comments: false
git checkout -- <file>
```
-- To remove a file from disk and repo use 'git rm' and to rm a dir use the '-r' flag:
+- To remove a file from disk and repo use `git rm` and to remove a directory use the `-r` flag:
```sh
git rm '*.txt'
diff --git a/doc/university/training/user_training.md b/doc/university/training/user_training.md
index 231039b0be8..08b7635f9ce 100644
--- a/doc/university/training/user_training.md
+++ b/doc/university/training/user_training.md
@@ -39,7 +39,7 @@ Use the tools at your disposal when you get stuck.
- Windows: Install 'Git for Windows'
-> <https://git-for-windows.github.io>
+> <https://gitforwindows.org>
- Mac: Type '`git`' in the Terminal application.
@@ -140,7 +140,7 @@ Modified files that have been marked to go in the next commit.
1. Stage the file.
1. Commit.
1. Push the commit to the remote.
-1. View the git log.
+1. View the Git log.
## Commands (committing)
@@ -242,7 +242,7 @@ See GitLab merge requests for examples: <https://gitlab.com/gitlab-org/gitlab-fo
1. Create an annotated tag.
1. Push the tags to the remote repository.
-Additional resources: <http://git-scm.com/book/en/Git-Basics-Tagging>.
+Additional resources: <https://git-scm.com/book/en/v2/Git-Basics-Tagging>.
## Commands (tags)
diff --git a/doc/update/mysql_to_postgresql.md b/doc/update/mysql_to_postgresql.md
index b202dd7e9d2..7f6162cca88 100644
--- a/doc/update/mysql_to_postgresql.md
+++ b/doc/update/mysql_to_postgresql.md
@@ -196,7 +196,7 @@ After the database is created, go on with the following steps:
sudo -u git -H chmod o-rwx config/database.yml
```
-1. Install Gems related to Postgresql
+1. Install Gems related to PostgreSQL
```bash
sudo -u git -H rm .bundle/config
diff --git a/doc/update/patch_versions.md b/doc/update/patch_versions.md
index a555f1c82bf..7314e34666d 100644
--- a/doc/update/patch_versions.md
+++ b/doc/update/patch_versions.md
@@ -72,7 +72,7 @@ cd /home/git/gitlab
sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse]" RAILS_ENV=production
```
-### 5. Update gitaly to the corresponding version
+### 5. Update Gitaly to the corresponding version
```bash
cd /home/git/gitlab
@@ -87,7 +87,7 @@ cd /home/git/gitlab-shell
sudo -u git -H git fetch --all --tags
sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_SHELL_VERSION) -b v$(</home/git/gitlab/GITLAB_SHELL_VERSION)
-sudo -u git -H sh -c 'if [ -x bin/compile ]; then bin/compile; fi'
+sudo -u git -H make build
```
### 7. Update GitLab Pages to the corresponding version (skip if not using pages)
@@ -102,7 +102,7 @@ sudo -u git -H make
### 8. Install/Update `gitlab-elasticsearch-indexer` (optional) **(STARTER ONLY)**
-If you're interested in using GitLab's new [elasticsearch repository indexer](../integration/elasticsearch.md#elasticsearch-repository-indexer-beta) (currently in beta)
+If you're interested in using GitLab's new [Elasticsearch repository indexer](../integration/elasticsearch.md#elasticsearch-repository-indexer-beta) (currently in beta)
please follow the instructions on the document linked above and enable the
indexer usage in the GitLab admin settings.
diff --git a/doc/update/upgrading_from_ce_to_ee.md b/doc/update/upgrading_from_ce_to_ee.md
index ea9235c6d2a..b553b4aa405 100644
--- a/doc/update/upgrading_from_ce_to_ee.md
+++ b/doc/update/upgrading_from_ce_to_ee.md
@@ -74,8 +74,8 @@ sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS
### 4. Install `gitlab-elasticsearch-indexer` (optional) **(STARTER ONLY)**
-If you're interested in using GitLab's new [elasticsearch repository
-indexer](../integration/elasticsearch.md) (currently in beta) please follow the instructions on the
+If you're interested in using GitLab's new [Elasticsearch repository indexer](../integration/elasticsearch.md)
+(currently in beta) please follow the instructions on the
document linked above and enable the indexer usage in the GitLab admin settings.
### 5. Start application
diff --git a/doc/update/upgrading_from_source.md b/doc/update/upgrading_from_source.md
index d0265781777..662701dbb56 100644
--- a/doc/update/upgrading_from_source.md
+++ b/doc/update/upgrading_from_source.md
@@ -193,7 +193,7 @@ cd /home/git/gitlab-shell
sudo -u git -H git fetch --all --tags --prune
sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_SHELL_VERSION)
-sudo -u git -H bin/compile
+sudo -u git -H make build
```
### 9. Update GitLab Workhorse
@@ -253,7 +253,7 @@ cd /home/git/gitlab
git diff origin/PREVIOUS_BRANCH:config/gitlab.yml.example origin/BRANCH:config/gitlab.yml.example
```
-#### Nginx configuration
+#### NGINX configuration
Ensure you're still up-to-date with the latest NGINX configuration changes:
@@ -268,13 +268,13 @@ git diff origin/PREVIOUS_BRANCH:lib/support/nginx/gitlab origin/BRANCH:lib/suppo
```
If you are using Strict-Transport-Security in your installation to continue
-using it you must enable it in your Nginx configuration as GitLab application no
+using it you must enable it in your NGINX configuration as GitLab application no
longer handles setting it.
If you are using Apache instead of NGINX please see the updated [Apache templates].
Also note that because Apache does not support upstreams behind Unix sockets you
will need to let GitLab Workhorse listen on a TCP port. You can do this
-via [`/etc/default/gitlab`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/support/init.d/gitlab.default.example#L38).
+via [`/etc/default/gitlab`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/init.d/gitlab.default.example#L38).
#### SMTP configuration
@@ -400,7 +400,7 @@ sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production
If you have more than one backup `*.tar` file(s) please add `BACKUP=timestamp_of_backup` to the command above.
-[yaml]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/gitlab.yml.example
-[gl-example]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/support/init.d/gitlab.default.example
-[smtp_settings.rb.sample]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/config/initializers/smtp_settings.rb.sample#L13
+[yaml]: https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example
+[gl-example]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/init.d/gitlab.default.example
+[smtp_settings.rb.sample]: https://gitlab.com/gitlab-org/gitlab/blob/master/config/initializers/smtp_settings.rb.sample#L13
[Apache templates]: https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache
diff --git a/doc/user/admin_area/appearance.md b/doc/user/admin_area/appearance.md
new file mode 100644
index 00000000000..1fea6ab8b02
--- /dev/null
+++ b/doc/user/admin_area/appearance.md
@@ -0,0 +1,113 @@
+---
+type: howto
+disqus_identifier: 'https://docs.gitlab.com/ee/customization/branded_login_page.html'
+---
+
+# GitLab Appearance **(CORE ONLY)**
+
+There are several options for customizing the appearance of a self hosted instance
+of GitLab. These settings are accessed from the **Admin Area** in the **Appearance**
+section.
+
+## Navigation bar
+
+By default, the navigation bar has the GitLab logo, but this can be customized with
+any image desired. It is optimized for images 28px high (any width), but any image can be
+used (less than 1MB) and it will automatically be resized.
+
+![navbar header logo screenshot](img/appearance_header_logo_v12_3.png)
+
+Once you select and upload an image, click **Update appearance settings** at the bottom
+of the page to activate it in the GitLab instance.
+
+NOTE: **Note:**
+GitLab pipeline emails will also display the custom logo.
+
+## Favicon
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14497) in GitLab 11.0.
+
+By default, the favicon (used by the browser as the tab icon, as well as the CI status icon)
+uses the GitLab logo, but this can be customized with any icon desired. It must be a
+32x32 `.png` or `.ico` image.
+
+![favicon screenshot](img/appearance_favicon_v12_3.png)
+
+After you select and upload an icon, click **Update appearance settings** at the bottom
+of the page to activate it in the GitLab instance.
+
+## System header and footer messages
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/5023) in [GitLab Premium](https://about.gitlab.com/pricing/) 10.7.
+> - [Added](https://gitlab.com/gitlab-org/gitlab-foss/issues/55057) to [GitLab Core](https://about.gitlab.com/pricing/) in 11.9.
+
+You can add a small header message, a small footer message, or both, to the interface
+of your GitLab instance. These messages will appear on all projects and pages of the
+instance, including the sign in / sign up page. The default color is white text on
+an orange background, but this can be customized by clicking on **Customize colors**.
+
+Limited [markdown](../markdown.md) is supported, such as bold, italics, and links, for
+example. Other markdown features, including lists, images and quotes, are not supported,
+as the header and footer messages can only be a single line.
+
+![header and footer screenshot](img/appearance_header_footer_v12_3.png)
+
+If desired, you can select **Enable header and footer in emails** to have the text of
+the header and footer added to all emails sent by the GitLab instance.
+
+After you add a message, click **Update appearance settings** at the bottom of the page
+to activate it in the GitLab instance.
+
+## Sign in / Sign up pages
+
+You can replace the default message on the sign in / sign up page with your own message
+and logo. You can make full use of [markdown](../markdown.md) in the description:
+
+![sign in message screenshot](img/appearance_sign_in_v12_3.png)
+
+The optimal size for the logo is 640x360px, but any image can be used (below 1MB)
+and it will be resized automatically. The logo image will appear between the title and
+the description, on the left of the sign-up page.
+
+![sign in message preview screenshot](img/appearance_sign_in_preview_v12_3.png)
+
+After you add a message, click **Update appearance settings** at the bottom of the page
+to activate it in the GitLab instance. You can also click on the **Sign-in page** button,
+to review the saved appearance settings:
+
+NOTE: **Note:**
+You can add also add a [customized help message](settings/help_page.md) below the sign in message.
+
+## New project pages
+
+You can add a new project guidelines message to the **New project page** within GitLab.
+You can make full use of [markdown](../markdown.md) in the description:
+
+![new project message screenshot](img/appearance_new_project_v12_3.png)
+
+The message will be displayed below the **New Project** message, on the left side
+of the **New project page**.
+
+After you add a message, click **Update appearance settings** at the bottom of the page
+to activate it in the GitLab instance. You can also click on the **New project page**
+button, which will bring you to the new project page so you can review the change.
+
+![new project message preview screenshot](img/appearance_new_project_preview_v12_3.png)
+
+## Libravatar
+
+[Libravatar](https://www.libravatar.org) is supported by GitLab for avatar images, but you must
+[manually enable Libravatar support on the GitLab instance](../../administration/libravatar.md)
+in order to use the service.
+
+<!-- ## Troubleshooting
+
+Include any troubleshooting steps that you can foresee. If you know beforehand what issues
+one might have when setting this up, or when something is changed, or on upgrading, it's
+important to describe those, too. Think of things that may go wrong and include them here.
+This is important to minimize requests for support, and to avoid doc comments with
+questions that you know someone might ask.
+
+Each scenario can be a third-level heading, e.g. `### Getting error message X`.
+If you have none to add when creating a doc, leave this section in place
+but commented out to help encourage others to add to it in the future. -->
diff --git a/doc/user/admin_area/geo_nodes.md b/doc/user/admin_area/geo_nodes.md
index 817b44bfdc8..bbdb9cb07a6 100644
--- a/doc/user/admin_area/geo_nodes.md
+++ b/doc/user/admin_area/geo_nodes.md
@@ -16,7 +16,7 @@ All Geo nodes have the following settings:
| Setting | Description |
| --------| ----------- |
| Primary | This marks a Geo Node as **primary** node. There can be only one **primary** node; make sure that you first add the **primary** node and then all the others. |
-| Name | The unique identifier for the Geo node. Must match the setting `gitlab_rails[geo_node_name]` in `/etc/gitlab/gitlab.rb`. The setting defaults to `external_url` with a trailing slash. |
+| Name | The unique identifier for the Geo node. Must match the setting `gitlab_rails['geo_node_name']` in `/etc/gitlab/gitlab.rb`. The setting defaults to `external_url` with a trailing slash. |
| URL | The instance's user-facing URL. |
The node you're reading from is indicated with a green `Current node` label, and
@@ -71,7 +71,7 @@ terminated at the load balancer.
In GitLab 11.11, **secondary** nodes can use identical external URLs as long as
a unique `name` is set for each Geo node. The `gitlab.rb` setting
-`gitlab_rails[geo_node_name]` must:
+`gitlab_rails['geo_node_name']` must:
- Be set for each GitLab instance that runs `unicorn`, `sidekiq`, or `geo_logcursor`.
- Match a Geo node name.
diff --git a/doc/user/admin_area/img/appearance_favicon_v12_3.png b/doc/user/admin_area/img/appearance_favicon_v12_3.png
new file mode 100644
index 00000000000..b464c9087e9
--- /dev/null
+++ b/doc/user/admin_area/img/appearance_favicon_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/img/appearance_header_footer_v12_3.png b/doc/user/admin_area/img/appearance_header_footer_v12_3.png
new file mode 100644
index 00000000000..aed0ff820fb
--- /dev/null
+++ b/doc/user/admin_area/img/appearance_header_footer_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/img/appearance_header_logo_v12_3.png b/doc/user/admin_area/img/appearance_header_logo_v12_3.png
new file mode 100644
index 00000000000..0da56d196c0
--- /dev/null
+++ b/doc/user/admin_area/img/appearance_header_logo_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/img/appearance_new_project_preview_v12_3.png b/doc/user/admin_area/img/appearance_new_project_preview_v12_3.png
new file mode 100644
index 00000000000..621e62e787b
--- /dev/null
+++ b/doc/user/admin_area/img/appearance_new_project_preview_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/img/appearance_new_project_v12_3.png b/doc/user/admin_area/img/appearance_new_project_v12_3.png
new file mode 100644
index 00000000000..ae1a8ca0f85
--- /dev/null
+++ b/doc/user/admin_area/img/appearance_new_project_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/img/appearance_sign_in_preview_v12_3.png b/doc/user/admin_area/img/appearance_sign_in_preview_v12_3.png
new file mode 100644
index 00000000000..64bd62c2d32
--- /dev/null
+++ b/doc/user/admin_area/img/appearance_sign_in_preview_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/img/appearance_sign_in_v12_3.png b/doc/user/admin_area/img/appearance_sign_in_v12_3.png
new file mode 100644
index 00000000000..6abe10f8bea
--- /dev/null
+++ b/doc/user/admin_area/img/appearance_sign_in_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md
index 9bc0f64b68d..c75a8bcac79 100644
--- a/doc/user/admin_area/index.md
+++ b/doc/user/admin_area/index.md
@@ -27,12 +27,12 @@ The Admin Area is made up of the following sections:
| Applications | Create system [OAuth applications](../../integration/oauth_provider.md) for integrations with other services. |
| Abuse Reports | Manage [abuse reports](abuse_reports.md) submitted by your users. |
| License **(STARTER ONLY)** | Upload, display, and remove [licenses](license.md). |
-| Push Rules **(STARTER)** | Configure pre-defined git [push rules](../../push_rules/push_rules.md) for projects. |
+| Push Rules **(STARTER)** | Configure pre-defined Git [push rules](../../push_rules/push_rules.md) for projects. |
| Geo **(PREMIUM ONLY)** | Configure and maintain [Geo nodes](geo_nodes.md). |
| Deploy Keys | Create instance-wide [SSH deploy keys](../../ssh/README.md#deploy-keys). |
| Service Templates | Create [service templates](../project/integrations/services_templates.md) for projects. |
| Labels | Create and maintain [labels](labels.md) for your GitLab instance. |
-| Appearance | Customize [GitLab's appearance](../../customization/index.md). |
+| Appearance | Customize [GitLab's appearance](appearance.md). |
| Settings | Modify the [settings](settings/index.md) for your GitLab instance. |
## Admin Dashboard
@@ -105,8 +105,16 @@ You can administer all users in the GitLab instance from the Admin Area's Users
To access the Users page, go to **Admin Area > Overview > Users**.
-Click the **Active**, **Admins**, **2FA Enabled**, or **2FA Disabled**, **External**, or
-**Without projects** tab to list only users of that criteria.
+To list users matching a specific criteria, click on one of the following tabs on the **Users** page:
+
+- **Active**
+- **Admins**
+- **2FA Enabled**
+- **2FA Disabled**
+- **External**
+- **Blocked**
+- **Deactivated**
+- **Without projects**
For each user, their username, email address, are listed, also the date their account was
created and the date of last activity. To edit a user, click the **Edit** button in that user's
diff --git a/doc/user/admin_area/monitoring/health_check.md b/doc/user/admin_area/monitoring/health_check.md
index f5e812cad1b..6439607de33 100644
--- a/doc/user/admin_area/monitoring/health_check.md
+++ b/doc/user/admin_area/monitoring/health_check.md
@@ -59,7 +59,7 @@ GitLab OK
## Readiness
-The readiness probe checks whether the Gitlab instance is ready to use. It checks the dependent services (Database, Redis, Gitaly etc.) and gives a status for each.
+The readiness probe checks whether the GitLab instance is ready to use. It checks the dependent services (Database, Redis, Gitaly etc.) and gives a status for each.
```text
GET /-/readiness
@@ -102,6 +102,9 @@ Example response:
## Liveness
+DANGER: **Warning:**
+In Gitlab [12.4](https://about.gitlab.com/upcoming-releases/) the response body of the Liveness check will change to match the example below.
+
The liveness probe checks whether the application server is alive. Unlike the [`health`](#health) check, this check hits the database.
```text
@@ -116,28 +119,11 @@ curl 'https://gitlab.example.com/-/liveness'
Example response:
-On success, the endpoint will return a valid successful HTTP status code, and a response like below.
+On success, the endpoint will return a `200` HTTP status code, and a response like below.
```json
{
- "db_check":{
- "status":"ok"
- },
- "redis_check":{
- "status":"ok"
- },
- "cache_check":{
- "status":"ok"
- },
- "queues_check":{
- "status":"ok"
- },
- "shared_state_check":{
- "status":"ok"
- },
- "gitaly_check":{
- "status":"ok"
- }
+ "status": "ok"
}
```
diff --git a/doc/user/admin_area/settings/account_and_limit_settings.md b/doc/user/admin_area/settings/account_and_limit_settings.md
index cdbc6346f3f..a1beee404eb 100644
--- a/doc/user/admin_area/settings/account_and_limit_settings.md
+++ b/doc/user/admin_area/settings/account_and_limit_settings.md
@@ -17,7 +17,7 @@ details.
## Repository size limit **(STARTER)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/740) in [GitLab Enterprise Edition 8.12](https://about.gitlab.com/2016/09/22/gitlab-8-12-released/#limit-project-size-ee).
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/740) in [GitLab Enterprise Edition 8.12](https://about.gitlab.com/blog/2016/09/22/gitlab-8-12-released/#limit-project-size-ee).
> Available in [GitLab Starter](https://about.gitlab.com/pricing/).
Repositories within your GitLab instance can grow quickly, especially if you are
diff --git a/doc/user/admin_area/settings/continuous_integration.md b/doc/user/admin_area/settings/continuous_integration.md
index 6ba027dc24a..c60b3323105 100644
--- a/doc/user/admin_area/settings/continuous_integration.md
+++ b/doc/user/admin_area/settings/continuous_integration.md
@@ -29,14 +29,38 @@ If you want to disable it for a specific project, you can do so in
## Maximum artifacts size **(CORE ONLY)**
The maximum size of the [job artifacts](../../../administration/job_artifacts.md)
-can be set in the Admin area of your GitLab instance. The value is in *MB* and
-the default is 100MB per job; on GitLab.com it's [set to 1G](../../gitlab_com/index.md#gitlab-cicd).
+can be set at:
-To change it:
+- The instance level.
+- [From GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/issues/21688), the project and group level.
-1. Go to **Admin area > Settings > Continuous Integration and Deployment**.
-1. Change the value of maximum artifacts size (in MB).
-1. Hit **Save changes** for the changes to take effect.
+The value is:
+
+- In *MB* and the default is 100MB per job.
+- [Set to 1G](../../gitlab_com/index.md#gitlab-cicd) on GitLab.com.
+
+To change it at the:
+
+- Instance level:
+
+ 1. Go to **Admin area > Settings > Continuous Integration and Deployment**.
+ 1. Change the value of maximum artifacts size (in MB).
+ 1. Hit **Save changes** for the changes to take effect.
+
+- [Group level](../../group/index.md#group-settings) (this will override the instance setting):
+
+ 1. Go to the group's **Settings > CI / CD > General Pipelines**.
+ 1. Change the value of **maximum artifacts size (in MB)**.
+ 1. Press **Save changes** for the changes to take effect.
+
+- [Project level](../../project/pipelines/settings.md) (this will override the instance and group settings):
+
+ 1. Go to the project's **Settings > CI / CD > General Pipelines**.
+ 1. Change the value of **maximum artifacts size (in MB)**.
+ 1. Press **Save changes** for the changes to take effect.
+
+NOTE: **Note**
+The setting at all levels is only available to GitLab administrators.
## Default artifacts expiration **(CORE ONLY)**
diff --git a/doc/user/admin_area/settings/help_page.md b/doc/user/admin_area/settings/help_page.md
new file mode 100644
index 00000000000..a2c99f94d8b
--- /dev/null
+++ b/doc/user/admin_area/settings/help_page.md
@@ -0,0 +1,49 @@
+---
+type: howto
+---
+
+# Customizing the 'Help' and login page messages
+
+In large organizations, it is useful to have information about who to contact or where
+to go for help. You can customize and display this information on the GitLab server's
+`/help` page and on the GitLab login page.
+
+## Adding a help message to the help page
+
+You can add a help message, which will be shown on the GitLab `/help` page (e.g.,
+<https://gitlab.com/help>) in a new section at the top of the `/help` page:
+
+1. Navigate to **Admin area > Settings > Preferences**, then expand **Help page**.
+1. Under **Help page text**, fill in the information you wish to display on `/help`.
+
+ ![help page help message](img/help_page_help_page_text_v12_3.png)
+
+1. Save your changes. You can now see the message on `/help`.
+
+![help message on help page example](img/help_page_help_page_text_ex_v12_3.png)
+
+## Adding a help message to the login page **(STARTER)**
+
+You can add a help message, which will be shown on the GitLab login page in a new section
+titled `Need Help?`, located below the login page message:
+
+1. Navigate to **Admin area > Settings > Preferences**, then expand **Help page**.
+1. Under **Help text**, fill in the information you wish to display on the login page.
+
+ ![help message on login page](img/help_page_help_text_v12_3.png)
+
+1. Save your changes.
+
+![help message on login page example](img/help_page_help_text_ex_v12_3.png)
+
+<!-- ## Troubleshooting
+
+Include any troubleshooting steps that you can foresee. If you know beforehand what issues
+one might have when setting this up, or when something is changed, or on upgrading, it's
+important to describe those, too. Think of things that may go wrong and include them here.
+This is important to minimize requests for support, and to avoid doc comments with
+questions that you know someone might ask.
+
+Each scenario can be a third-level heading, e.g. `### Getting error message X`.
+If you have none to add when creating a doc, leave this section in place
+but commented out to help encourage others to add to it in the future. -->
diff --git a/doc/user/admin_area/settings/img/access_restrictions.png b/doc/user/admin_area/settings/img/access_restrictions.png
deleted file mode 100644
index 8c5336c7835..00000000000
--- a/doc/user/admin_area/settings/img/access_restrictions.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/img/bulk_push_event_v12_4.png b/doc/user/admin_area/settings/img/bulk_push_event_v12_4.png
new file mode 100644
index 00000000000..38e666e32ac
--- /dev/null
+++ b/doc/user/admin_area/settings/img/bulk_push_event_v12_4.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/clone_panel_v12_4.png b/doc/user/admin_area/settings/img/clone_panel_v12_4.png
new file mode 100644
index 00000000000..8aa0bd2f7d8
--- /dev/null
+++ b/doc/user/admin_area/settings/img/clone_panel_v12_4.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/custom_git_clone_url_for_https_v12_4.png b/doc/user/admin_area/settings/img/custom_git_clone_url_for_https_v12_4.png
new file mode 100644
index 00000000000..22cdd15cc0c
--- /dev/null
+++ b/doc/user/admin_area/settings/img/custom_git_clone_url_for_https_v12_4.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/help_page_help_page_text_ex_v12_3.png b/doc/user/admin_area/settings/img/help_page_help_page_text_ex_v12_3.png
new file mode 100644
index 00000000000..9dc7ef28149
--- /dev/null
+++ b/doc/user/admin_area/settings/img/help_page_help_page_text_ex_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/help_page_help_page_text_v12_3.png b/doc/user/admin_area/settings/img/help_page_help_page_text_v12_3.png
new file mode 100644
index 00000000000..59d3343db34
--- /dev/null
+++ b/doc/user/admin_area/settings/img/help_page_help_page_text_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/help_page_help_text_ex_v12_3.png b/doc/user/admin_area/settings/img/help_page_help_text_ex_v12_3.png
new file mode 100644
index 00000000000..9de26ac0758
--- /dev/null
+++ b/doc/user/admin_area/settings/img/help_page_help_text_ex_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/help_page_help_text_v12_3.png b/doc/user/admin_area/settings/img/help_page_help_text_v12_3.png
new file mode 100644
index 00000000000..1b6aad5753a
--- /dev/null
+++ b/doc/user/admin_area/settings/img/help_page_help_text_v12_3.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/import_sources.png b/doc/user/admin_area/settings/img/import_sources.png
deleted file mode 100644
index 20829a27dd7..00000000000
--- a/doc/user/admin_area/settings/img/import_sources.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/img/protected_paths.png b/doc/user/admin_area/settings/img/protected_paths.png
new file mode 100644
index 00000000000..7aa9124b845
--- /dev/null
+++ b/doc/user/admin_area/settings/img/protected_paths.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/push_event_activities_limit_v12_4.png b/doc/user/admin_area/settings/img/push_event_activities_limit_v12_4.png
new file mode 100644
index 00000000000..fd3775ac4d7
--- /dev/null
+++ b/doc/user/admin_area/settings/img/push_event_activities_limit_v12_4.png
Binary files differ
diff --git a/doc/user/admin_area/settings/index.md b/doc/user/admin_area/settings/index.md
index 2a12614e325..4ca91ae5339 100644
--- a/doc/user/admin_area/settings/index.md
+++ b/doc/user/admin_area/settings/index.md
@@ -20,6 +20,9 @@ include:
- [Visibility and access controls](visibility_and_access_controls.md)
- [User and IP rate limits](user_and_ip_rate_limits.md)
- [Custom templates repository](instance_template_repository.md) **(PREMIUM)**
+- [Protected paths](protected_paths.md) **(CORE ONLY)**
+- [Help messages for the `/help` page and the login page](help_page.md)
+- [Push event activities limit and bulk push events](push_event_activities_limit.md)
NOTE: **Note:**
You can change the [first day of the week](../../profile/preferences.md) for the entire GitLab instance
diff --git a/doc/user/admin_area/settings/protected_paths.md b/doc/user/admin_area/settings/protected_paths.md
new file mode 100644
index 00000000000..21c8d79b138
--- /dev/null
+++ b/doc/user/admin_area/settings/protected_paths.md
@@ -0,0 +1,76 @@
+---
+type: reference
+---
+
+# Protected paths **(CORE ONLY)**
+
+GitLab protects the following paths with Rack Attack by default:
+
+```
+'/users/password',
+'/users/sign_in',
+'/api/#{API::API.version}/session.json',
+'/api/#{API::API.version}/session',
+'/users',
+'/users/confirmation',
+'/unsubscribes/',
+'/import/github/personal_access_token'
+```
+
+GitLab responds with HTTP status code `429` to POST requests at protected paths
+that exceed 10 requests per minute per IP address.
+
+This header is included in responses to blocked requests:
+
+```
+Retry-After: 60
+```
+
+For example, the following are limited to a maximum 10 requests per minute:
+
+- User sign-in
+- User sign-up (if enabled)
+- User password reset
+
+After 10 requests, the client must wait 60 seconds before it can
+try again.
+
+## Configure using GitLab UI
+
+> Introduced in [GitLab 12.4](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31246).
+
+Throttling of protected paths is enabled by default and can be disabled or
+customized on **Admin > Network > Protected Paths**, along with these options:
+
+- Maximum number of requests per period per user.
+- Rate limit period in seconds.
+- Paths to be protected.
+
+![protected-paths](img/protected_paths.png)
+
+Requests over the rate limit are logged into `auth.log`.
+
+## Migrate settings from GitLab 12.3 and earlier
+
+Omnibus GitLab protected paths throttle is deprecated and is scheduled for removal in
+GitLab 13.0. Please see the [GitLab issue](https://gitlab.com/gitlab-org/gitlab/issues/29952) and the [Omnibus GitLab issue](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/4688) for more information.
+
+NOTE: **Note:** If Omnibus settings are present, applications settings will be automatically ignored to avoid generating multiple requests blocks.
+
+To migrate from Omnibus GitLab 12.3 and earlier settings:
+
+1. Disable the Protected Paths throttle from Omnibus, by changing `rack_attack_enabled` value to `false` on [`rack_attack.rb.erb`](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/templates/default/rack_attack.rb.erb#L18):
+
+ ```ruby
+ rack_attack_enabled = false
+ ```
+
+1. Customize and enable your protected paths settings by following [Configure using GitLab UI](#configure-using-gitlab-ui) section.
+
+1. Restart GitLab:
+
+ ```bash
+ sudo gitlab-ctl restart
+ ```
+
+That's it. Protected paths throttle are now managed by GitLab admin settings.
diff --git a/doc/user/admin_area/settings/push_event_activities_limit.md b/doc/user/admin_area/settings/push_event_activities_limit.md
new file mode 100644
index 00000000000..9850de0f4b3
--- /dev/null
+++ b/doc/user/admin_area/settings/push_event_activities_limit.md
@@ -0,0 +1,28 @@
+---
+type: reference
+---
+
+# Push event activities limit and bulk push events
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/31007) in GitLab 12.4.
+
+This allows you to set the number of changes (branches or tags) in a single push
+to determine whether individual push events or bulk push event will be created.
+Bulk push events will be created if it surpasses that value.
+
+For example, if 4 branches are pushed and the limit is currently set to 3,
+you'll see the following in the activity feed:
+
+![Bulk push event](img/bulk_push_event_v12_4.png)
+
+With this feature, when a single push includes a lot of changes (e.g. 1,000
+branches), only 1 bulk push event will be created instead of creating 1,000 push
+events. This helps in maintaining good system performance and preventing spam on
+the activity feed.
+
+This setting can be modified in **Admin Area > Settings > Network > Performance Optimization**.
+This can also be configured via the [Application settings API](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls)
+as `push_event_activities_limit`. The default value is 3, but it can be greater
+than or equal 0.
+
+![Push event activities limit](img/push_event_activities_limit_v12_4.png)
diff --git a/doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md b/doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md
index 3a6f3a8c20e..29a3591184b 100644
--- a/doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md
+++ b/doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md
@@ -7,7 +7,7 @@ type: reference
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/30829) in GitLab 12.2.
This setting allows you to rate limit the requests to raw endpoints, defaults to `300` requests per minute.
-It can be modified in **Admin Area > Network > Performance Optimization**.
+It can be modified in **Admin Area > Settings > Network > Performance Optimization**.
For example, requests over `300` per minute to `https://gitlab.com/gitlab-org/gitlab-foss/raw/master/app/controllers/application_controller.rb` will be blocked. Access to the raw file will be released after 1 minute.
diff --git a/doc/user/admin_area/settings/user_and_ip_rate_limits.md b/doc/user/admin_area/settings/user_and_ip_rate_limits.md
index b9d93bf3671..5d49d88d254 100644
--- a/doc/user/admin_area/settings/user_and_ip_rate_limits.md
+++ b/doc/user/admin_area/settings/user_and_ip_rate_limits.md
@@ -8,7 +8,7 @@ Rate limiting is a common technique used to improve the security and durability
of a web application. For more details, see
[Rate limits](../../../security/rate_limits.md).
-The following limits can be enforced in **Admin Area > Network > User and
+The following limits can be enforced in **Admin Area > Settings > Network > User and
IP rate limits**:
- Unauthenticated requests
diff --git a/doc/user/admin_area/settings/visibility_and_access_controls.md b/doc/user/admin_area/settings/visibility_and_access_controls.md
index ad08c852332..f718e31e8bd 100644
--- a/doc/user/admin_area/settings/visibility_and_access_controls.md
+++ b/doc/user/admin_area/settings/visibility_and_access_controls.md
@@ -4,15 +4,7 @@ type: reference
# Visibility and access controls **(CORE ONLY)**
-GitLab allows administrators to:
-
-- Control access and visibility to GitLab resources including branches and projects.
-- Select from which hosting sites code can be imported into GitLab.
-- Select the protocols permitted to access GitLab.
-- Enable or disable repository mirroring.
-- Prevent non-administrators from deleting projects
- ([introduced](https://gitlab.com/gitlab-org/gitlab/issues/5615) in GitLab 12.0).
- **(PREMIUM ONLY)**
+GitLab allows administrators to enforce specific controls.
To access the visibility and access control options:
@@ -20,29 +12,111 @@ To access the visibility and access control options:
1. Go to **Admin Area > Settings > General**.
1. Expand the **Visibility and access controls** section.
+## Default branch protection
+
+Branch protection specifies which roles can push to branches and which roles can delete
+branches.
+
+To change the default branch protection:
+
+1. Select the desired option.
+1. Click **Save changes**.
+
+For more details, see [Protected branches](../../project/protected_branches.md).
+
+## Default project creation protection
+
+Project creation protection specifies which roles can create projects.
+
+To change the default project creation protection:
+
+1. Select the desired option.
+1. Click **Save changes**.
+
+For more details, see [Default project-creation level](../../group/index.md#default-project-creation-level).
+
+## Default project deletion protection
+
+By default, a project can be deleted by anyone with the **Owner** role, either at the project or
+group level.
+
+To ensure only admin users can delete projects:
+
+1. Check the **Default project deletion protection** checkbox.
+1. Click **Save changes**.
+
+## Default project visibility
+
+To set the default visibility levels for new projects:
+
+1. Select the desired default project visibility.
+1. Click **Save changes**.
+
+For more details on project visibility, see [Public access](../../../public_access/public_access.md).
+
+## Default snippet visibility
+
+To set the default visibility levels for new snippets:
+
+1. Select the desired default snippet visibility.
+1. Click **Save changes**.
+
+For more details on snippet visibility, see [Public access](../../../public_access/public_access.md).
+
+## Default group visibility
+
+To set the default visibility levels for new groups:
+
+1. Select the desired default group visibility.
+1. Click **Save changes**.
+
+For more details on group visibility, see [Public access](../../../public_access/public_access.md).
+
+## Restricted visibility levels
+
+To set the available visibility levels for new projects and snippets:
+
+1. Check the desired visibility levels.
+1. Click **Save changes**.
+
+For more details on project visibility, see [Public access](../../../public_access/public_access.md).
+
## Import sources
-Choose from which hosting sites users can
-[import their projects](../../project/import/index.md).
+To specify from which hosting sites users can [import their projects](../../project/import/index.md):
+
+1. Check the checkbox beside the name of each hosting site.
+1. Click **Save changes**.
+
+## Project export
-![import sources](img/import_sources.png)
+To enable project export:
+
+1. Check the **Project export enabled** checkbox.
+1. Click **Save changes**.
+
+For more details, see [Exporting a project and its data](../../../user/project/settings/import_export.md#exporting-a-project-and-its-data).
## Enabled Git access protocols
-> [Introduced][ce-4696] in GitLab 8.10.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4696) in GitLab 8.10.
With GitLab's access restrictions, you can select with which protocols users can communicate with
GitLab.
-From the **Enabled Git access protocols** dropdown, select one of the following:
+Disabling an access protocol does not block access to the server itself via those ports. The ports
+used for the protocol, SSH or HTTP(S), will still be accessible. The GitLab restrictions apply at the
+application level.
-- Both SSH and HTTP(S)
-- Only SSH
-- Only HTTP(s)
+To specify the enabled Git access protocols:
-![Settings Overview](img/access_restrictions.png)
+1. Select the desired Git access protocols from the dropdown:
+ - Both SSH and HTTP(S)
+ - Only SSH
+ - Only HTTP(S)
+1. Click **Save changes**.
-When both SSH and HTTP(S) are enabled, your users can choose either protocol.
+When both SSH and HTTP(S) are enabled, users can choose either protocol.
When only one protocol is enabled:
@@ -57,20 +131,53 @@ On top of these UI restrictions, GitLab will deny all Git actions on the protoco
not selected.
CAUTION: **Important:**
-Starting with [GitLab 10.7][ce-18021], HTTP(s) protocol will be allowed for
-git clone/fetch requests done by GitLab Runner from CI/CD Jobs, even if
-_Only SSH_ was selected.
+Starting with [GitLab 10.7](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/18021),
+HTTP(S) protocol will be allowed for Git clone or fetch requests done by GitLab Runner
+from CI/CD jobs, even if _Only SSH_ was selected.
-> **Note:** Please keep in mind that disabling an access protocol does not actually
-block access to the server itself. The ports used for the protocol, be it SSH or
-HTTP, will still be accessible. What GitLab does is restrict access on the
-application level.
+## Custom Git clone URL for HTTP(S)
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/18422) in GitLab 12.4.
+
+You can customize project Git clone URLs for HTTP(S). This will affect the clone
+panel:
+
+![Clone panel](img/clone_panel_v12_4.png)
+
+For example, if:
+
+- Your GitLab instance is at `https://example.com`, then project clone URLs are like
+ `https://example.com/foo/bar.git`.
+- You want clone URLs that look like `https://git.example.com/gitlab/foo/bar.git` instead,
+ you can set this setting to `https://git.example.com/gitlab/`.
+
+![Custom Git clone URL for HTTP](img/custom_git_clone_url_for_https_v12_4.png)
+
+To specify a custom Git clone URL for HTTP(S):
+
+1. Enter a root URL for **Custom Git clone URL for HTTP(S)**.
+1. Click on **Save changes**.
+
+NOTE: **Note:**
+SSH clone URLs can be customized in `gitlab.rb` by setting `gitlab_rails['gitlab_ssh_host']` and
+other related settings.
+
+## RSA, DSA, ECDSA, ED25519 SSH keys
+
+These options specify the permitted types and lengths for SSH keys.
+
+To specify a restriction for each key type:
+
+1. Select the desired option from the dropdown.
+1. Click **Save changes**.
+
+For more details, see [SSH key restrictions](../../../security/ssh_keys_restrictions.md).
## Allow mirrors to be set up for projects
-> [Introduced][ee-3586] in GitLab 10.3.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/3586) in GitLab 10.3.
-This option is enabled by default. By disabling it, both pull and push mirroring will no longer
+This option is enabled by default. By disabling it, both [pull and push mirroring](../../../workflow/repository_mirroring.md) will no longer
work in every repository and can only be re-enabled by an admin on a per-project basis.
![Mirror settings](img/mirror_settings.png)
@@ -86,7 +193,3 @@ questions that you know someone might ask.
Each scenario can be a third-level heading, e.g. `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->
-
-[ce-4696]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/4696
-[ce-18021]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/18021
-[ee-3586]: https://gitlab.com/gitlab-org/gitlab/merge_requests/3586
diff --git a/doc/user/analytics/cycle_analytics.md b/doc/user/analytics/cycle_analytics.md
index 7a966f92934..e17202645d3 100644
--- a/doc/user/analytics/cycle_analytics.md
+++ b/doc/user/analytics/cycle_analytics.md
@@ -1,7 +1,7 @@
# Cycle Analytics
> - Introduced prior to GitLab 12.3 at the project level.
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/12077) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.3 at the group level.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/12077) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.3 at the group level.
Cycle Analytics measures the time spent to go from an [idea to production] - also known
as cycle time - for each of your projects. Cycle Analytics displays the median time for an idea to
@@ -169,14 +169,14 @@ For Cycle Analytics functionality introduced in GitLab 12.3 and later:
Learn more about Cycle Analytics in the following resources:
-- [Cycle Analytics feature page](https://about.gitlab.com/features/cycle-analytics/)
-- [Cycle Analytics feature preview](https://about.gitlab.com/2016/09/16/feature-preview-introducing-cycle-analytics/)
-- [Cycle Analytics feature highlight](https://about.gitlab.com/2016/09/21/cycle-analytics-feature-highlight/)
+- [Cycle Analytics feature page](https://about.gitlab.com/product/cycle-analytics/)
+- [Cycle Analytics feature preview](https://about.gitlab.com/blog/2016/09/16/feature-preview-introducing-cycle-analytics/)
+- [Cycle Analytics feature highlight](https://about.gitlab.com/blog/2016/09/21/cycle-analytics-feature-highlight/)
[ce-5986]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/5986
[ce-20975]: https://gitlab.com/gitlab-org/gitlab-foss/issues/20975
[environment]: ../../ci/yaml/README.md#environment
[GitLab flow]: ../../workflow/gitlab_flow.md
-[idea to production]: https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#from-idea-to-production-with-gitlab
+[idea to production]: https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/#from-idea-to-production-with-gitlab
[permissions]: ../permissions.md
[yml]: ../../ci/yaml/README.md
diff --git a/doc/user/analytics/productivity_analytics.md b/doc/user/analytics/productivity_analytics.md
index a53ef56bbf7..09f83dcff4b 100644
--- a/doc/user/analytics/productivity_analytics.md
+++ b/doc/user/analytics/productivity_analytics.md
@@ -1,6 +1,6 @@
# Productivity Analytics **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/12079) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.3 (enabled by feature flags `productivity_analytics`).
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/12079) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.3 (enabled by default using the feature flags `productivity_analytics`, `productivity_analytics_scatterplot_enabled`).
Track development velocity with Productivity Analytics.
@@ -12,6 +12,8 @@ Software Development Life Cycle (SDLC) process, Productivity Analytics provides
Productivity can slow down for many reasons ranging from degrading code base to quickly growing teams. In order to investigate, department or team leaders can start by visualizing the time it takes for merge requests to be merged.
+By default, a data migration job covering three months of historical data will kick off when deploying Productivity Analytics for the first time.
+
## Supported features
Productivity Analytics allows GitLab users to:
@@ -41,7 +43,7 @@ The following metrics and visualizations are available on a project or group lev
- Number of files touched.
- Scatterplot showing all MRs merged on a certain date, together with the days it took to complete the action and a 30 day rolling median.
- Users can zoom in and out on specific days of interest.
-- Table showing list of merge requests with their respective times and size metrics.
+- Table showing the list of merge requests with their respective time duration metrics.
- Users can sort by any of the above metrics.
## Permissions
diff --git a/doc/user/application_security/container_scanning/index.md b/doc/user/application_security/container_scanning/index.md
index ad3f0663ed5..14dae56f087 100644
--- a/doc/user/application_security/container_scanning/index.md
+++ b/doc/user/application_security/container_scanning/index.md
@@ -87,7 +87,7 @@ The results will be saved as a
that you can later download and analyze.
Due to implementation limitations, we always take the latest Container Scanning
artifact available. Behind the scenes, the
-[GitLab Container Scanning analyzer](https://gitlab.com/gitlab-org/security-products/container-scanning)
+[GitLab Klar analyzer](https://gitlab.com/gitlab-org/security-products/analyzers/klar/)
is used and runs the scans.
## Example
@@ -145,6 +145,23 @@ container_scanning:
GIT_STRATEGY: fetch
```
+### Available variables
+
+Container Scanning can be [configured](#overriding-the-container-scanning-template)
+using environment variables.
+
+| Environment Variable | Description | Default |
+| ------ | ------ | ------ |
+| `KLAR_TRACE` | Set to true to enable more verbose output from klar. | `"false"` |
+| `DOCKER_USER` | Username for accessing a Docker registry requiring authentication. | `$CI_REGISTRY_USER` |
+| `DOCKER_PASSWORD` | Password for accessing a Docker registry requiring authentication. | `$CI_REGISTRY_PASSWORD` |
+| `CLAIR_OUTPUT` | Severity level threshold. Vulnerabilities with severity level higher than or equal to this threshold will be outputted. Supported levels are `Unknown`, `Negligible`, `Low`, `Medium`, `High`, `Critical` and `Defcon1`. | `Unknown` |
+| `REGISTRY_INSECURE` | Allow [Klar](https://github.com/optiopay/klar) to access insecure registries (HTTP only). Should only be set to `true` when testing the image locally. | `"false"` |
+| `CLAIR_VULNERABILITIES_DB_URL` | This variable is explicitly set in the [services section](https://gitlab.com/gitlab-org/gitlab/blob/30522ca8b901223ac8c32b633d8d67f340b159c1/lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml#L17-19) of the `Container-Scanning.gitlab-ci.yml` file and defaults to `clair-vulnerabilities-db`. This value represents the address that the [postgres server hosting the vulnerabilities definitions](https://hub.docker.com/r/arminc/clair-db) is running on and **shouldn't be changed** unless you're running the image locally as described in the [Running the scanning tool](https://gitlab.com/gitlab-org/security-products/analyzers/klar/#running-the-scanning-tool) section of the [klar readme](https://gitlab.com/gitlab-org/security-products/analyzers/klar). | `clair-vulnerabilities-db` |
+| `CI_APPLICATION_REPOSITORY` | Docker repository URL for the image to be scanned. | `$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG` |
+| `CI_APPLICATION_TAG` | Docker respository tag for the image to be scanned. | `$CI_COMMIT_SHA` |
+| `CLAIR_DB_IMAGE_TAG` | The Docker image tag for the [postgres server hosting the vulnerabilities definitions](https://hub.docker.com/r/arminc/clair-db). It can be useful to override this value with a specific version, for example, to provide a consistent set of vulnerabilities for integration testing purposes. | `latest` |
+
## Security Dashboard
The Security Dashboard is a good place to get an overview of all the security
diff --git a/doc/user/application_security/dast/index.md b/doc/user/application_security/dast/index.md
index e90f219337b..951c4b9dd73 100644
--- a/doc/user/application_security/dast/index.md
+++ b/doc/user/application_security/dast/index.md
@@ -81,8 +81,15 @@ variables:
There are two ways to define the URL to be scanned by DAST:
-- Set the `DAST_WEBSITE` [variable](../../../ci/yaml/README.md#variables).
-- Add it in an `environment_url.txt` file at the root of your project.
+1. Set the `DAST_WEBSITE` [variable](../../../ci/yaml/README.md#variables).
+
+1. Add it in an `environment_url.txt` file at the root of your project.
+ This is great for testing in dynamic environments. In order to run DAST against
+ an app that is dynamically created during a Gitlab CI pipeline, have the app
+ persist its domain in an `environment_url.txt` file, and DAST will
+ automatically parse that file to find its scan target.
+ You can see an [example](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml)
+ of this in our Auto DevOps CI YML.
If both values are set, the `DAST_WEBSITE` value will take precedence.
diff --git a/doc/user/application_security/dependency_scanning/index.md b/doc/user/application_security/dependency_scanning/index.md
index b2f754c17bd..9f87d79025e 100644
--- a/doc/user/application_security/dependency_scanning/index.md
+++ b/doc/user/application_security/dependency_scanning/index.md
@@ -55,7 +55,7 @@ The following languages and dependency managers are supported.
|----------------------------- | --------- | ------------ |
| Java ([Gradle](https://gradle.org/)) | not currently ([issue](https://gitlab.com/gitlab-org/gitlab/issues/13075 "Dependency Scanning for Gradle" )) | not available |
| Java ([Maven](https://maven.apache.org/)) | yes | [gemnasium](https://gitlab.com/gitlab-org/security-products/gemnasium) |
-| JavaScript ([npm](https://www.npmjs.com/), [yarn](https://yarnpkg.com/en/)) | yes | [gemnasium](https://gitlab.com/gitlab-org/security-products/gemnasium), [Retire.js](https://retirejs.github.io/retire.js) |
+| JavaScript ([npm](https://www.npmjs.com/), [yarn](https://yarnpkg.com/en/)) | yes | [gemnasium](https://gitlab.com/gitlab-org/security-products/gemnasium), [Retire.js](https://retirejs.github.io/retire.js/) |
| Go ([Golang](https://golang.org/)) | not currently ([issue](https://gitlab.com/gitlab-org/gitlab/issues/7132 "Dependency Scanning for Go")) | not available |
| PHP ([Composer](https://getcomposer.org/)) | yes | [gemnasium](https://gitlab.com/gitlab-org/security-products/gemnasium) |
| Python ([pip](https://pip.pypa.io/en/stable/)) | yes | [gemnasium](https://gitlab.com/gitlab-org/security-products/gemnasium) |
diff --git a/doc/user/application_security/img/dismissed_info.png b/doc/user/application_security/img/dismissed_info.png
deleted file mode 100644
index b4470b664d2..00000000000
--- a/doc/user/application_security/img/dismissed_info.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/img/dismissed_info_v12_3.png b/doc/user/application_security/img/dismissed_info_v12_3.png
new file mode 100644
index 00000000000..92037493eaa
--- /dev/null
+++ b/doc/user/application_security/img/dismissed_info_v12_3.png
Binary files differ
diff --git a/doc/user/application_security/index.md b/doc/user/application_security/index.md
index 0e52496ec43..e9f5898950e 100644
--- a/doc/user/application_security/index.md
+++ b/doc/user/application_security/index.md
@@ -57,7 +57,7 @@ This workflow comes with some drawbacks and there's a
## Interacting with the vulnerabilities
-> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing) 10.8.
+> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing/) 10.8.
CAUTION: **Warning:**
This feature is currently [Alpha](https://about.gitlab.com/handbook/product/#alpha-beta-ga) and while you can start using it, it may receive important changes in the future.
@@ -84,13 +84,15 @@ If you wish to undo this dismissal, you can click the **Undo dismiss** button.
#### Adding a dismissal reason
-> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing) 12.0.
+> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.0.
When dismissing a vulnerability, it's often helpful to provide a reason for doing so.
-If you press the comment button next to **Dismiss vulnerability** in the modal, a text box will appear, allowing you to add a comment with your dismissal.
-This comment can not currently be edited or removed, but [future versions](https://gitlab.com/gitlab-org/gitlab/issues/11721) will add this functionality.
+If you press the comment button next to **Dismiss vulnerability** in the modal,
+a text box will appear, allowing you to add a comment with your dismissal.
+Once added, you can edit it or delete it. This allows you to add and update
+context for a vulnerability as you learn more over time.
-![Dismissed vulnerability comment](img/dismissed_info.png)
+![Dismissed vulnerability comment](img/dismissed_info_v12_3.png)
### Creating an issue for a vulnerability
@@ -110,7 +112,7 @@ the vulnerability will now have an associated issue next to the name.
### Solutions for vulnerabilities (auto-remediation)
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/5656) in [GitLab Ultimate](https://about.gitlab.com/pricing) 11.7.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/5656) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.7.
Some vulnerabilities can be fixed by applying the solution that GitLab
automatically generates. The following scanners are supported:
@@ -134,7 +136,7 @@ generated by GitLab. To apply the fix:
#### Creating a merge request from a vulnerability
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9224) in [GitLab Ultimate](https://about.gitlab.com/pricing) 11.9.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9224) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.9.
In certain cases, GitLab will allow you to create a merge request that will
automatically remediate the vulnerability. Any vulnerability that has a
@@ -148,10 +150,10 @@ Clicking on this button will create a merge request to apply the solution onto t
## Security approvals in merge requests **(ULTIMATE)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9928) in [GitLab Ultimate](https://about.gitlab.com/pricing) 12.2.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9928) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.2.
Merge Request Approvals can be configured to require approval from a member
-of your security team when a vulnerability would be introduced by a merge request.
+of your security team when a vulnerability, or a software license compliance violation would be introduced by a merge request.
This threshold is defined as `high`, `critical`, or `unknown`
severity. When any vulnerabilities are present within a merge request, an
@@ -178,6 +180,29 @@ An approval will be optional when a security report:
- Contains no new vulnerabilities.
- Contains only new vulnerabilities of `low` or `medium` severity.
+### Enabling License Approvals within a project
+
+To enable License Approvals, a [project approval rule](../project/merge_requests/merge_request_approvals.md#multiple-approval-rules-premium)
+must be created with the case-sensitive name `License-Check`. This approval
+group must be set with an "Approvals required" count greater than zero.
+
+Once this group has been added to your project, the approval rule will be enabled
+for all Merge Requests. To configure how this rule behaves, you can choose which
+licenses to `approve` or `blacklist` in the
+[project policies for License Compliance](license_compliance/index.md#project-policies-for-license-compliance) section.
+
+Any code changes made will cause the count of approvals required to reset.
+
+An approval will be required when a license report:
+
+- Contains a dependency that includes a software license that is `blacklisted`.
+- Is not generated during pipeline execution.
+
+An approval will be optional when a license report:
+
+- Contains no software license violations.
+- Contains only new licenses that are `approved` or unknown.
+
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
diff --git a/doc/user/application_security/license_compliance/index.md b/doc/user/application_security/license_compliance/index.md
index fb361acf6e8..75a3b33e32e 100644
--- a/doc/user/application_security/license_compliance/index.md
+++ b/doc/user/application_security/license_compliance/index.md
@@ -60,7 +60,7 @@ The following languages and package managers are supported.
| Elixir | [mix](https://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html) ([experimental support](https://github.com/pivotal/LicenseFinder#experimental-project-types)) |[License Finder](https://github.com/pivotal/LicenseFinder)|
| C++/C | [conan](https://conan.io/) ([experimental support](https://github.com/pivotal/LicenseFinder#experimental-project-types))|[License Finder](https://github.com/pivotal/LicenseFinder)|
| Scala | [sbt](https://www.scala-sbt.org/) ([experimental support](https://github.com/pivotal/LicenseFinder#experimental-project-types))|[License Finder](https://github.com/pivotal/LicenseFinder)|
-| Rust | [cargo](https://crates.io/) ([experimental support](https://github.com/pivotal/LicenseFinder#experimental-project-types))|[License Finder](https://github.com/pivotal/LicenseFinder)|
+| Rust | [cargo](https://crates.io) ([experimental support](https://github.com/pivotal/LicenseFinder#experimental-project-types))|[License Finder](https://github.com/pivotal/LicenseFinder)|
| PHP | [composer](https://getcomposer.org/) ([experimental support](https://github.com/pivotal/LicenseFinder#experimental-project-types))|[License Finder](https://github.com/pivotal/LicenseFinder)|
## Requirements
diff --git a/doc/user/application_security/sast/analyzers.md b/doc/user/application_security/sast/analyzers.md
index a1bd00f34e3..76a566f7514 100644
--- a/doc/user/application_security/sast/analyzers.md
+++ b/doc/user/application_security/sast/analyzers.md
@@ -1,7 +1,3 @@
----
-table_display_block: true
----
-
# SAST Analyzers **(ULTIMATE)**
SAST relies on underlying third party tools that are wrapped into what we call
@@ -19,7 +15,7 @@ SAST supports the following official analyzers:
- [`bandit`](https://gitlab.com/gitlab-org/security-products/analyzers/bandit) (Bandit)
- [`brakeman`](https://gitlab.com/gitlab-org/security-products/analyzers/brakeman) (Brakeman)
-- [`eslint`](https://gitlab.com/gitlab-org/security-products/analyzers/eslint) (ESLint (Javascript))
+- [`eslint`](https://gitlab.com/gitlab-org/security-products/analyzers/eslint) (ESLint (JavaScript))
- [`flawfinder`](https://gitlab.com/gitlab-org/security-products/analyzers/flawfinder) (Flawfinder)
- [`gosec`](https://gitlab.com/gitlab-org/security-products/analyzers/gosec) (Gosec)
- [`nodejs-scan`](https://gitlab.com/gitlab-org/security-products/analyzers/nodejs-scan) (NodeJsScan)
diff --git a/doc/user/application_security/sast/index.md b/doc/user/application_security/sast/index.md
index 0618c14a3d1..cb54d9f3853 100644
--- a/doc/user/application_security/sast/index.md
+++ b/doc/user/application_security/sast/index.md
@@ -45,12 +45,15 @@ The results are sorted by the priority of the vulnerability:
## Requirements
-To run a SAST job, you need GitLab Runner with the
+To run a SAST job, by default, you need GitLab Runner with the
[`docker`](https://docs.gitlab.com/runner/executors/docker.html#use-docker-in-docker-with-privileged-mode) or
[`kubernetes`](https://docs.gitlab.com/runner/install/kubernetes.html#running-privileged-containers-for-the-runners)
executor running in privileged mode. If you're using the shared Runners on GitLab.com,
this is enabled by default.
+Privileged mode is not necessary if you've [disabled Docker in Docker
+for SAST](#disabling-docker-in-docker-for-sast)
+
CAUTION: **Caution:**
If you use your own Runners, make sure that the Docker version you have installed
is **not** `19.03.00`. See [troubleshooting information](#error-response-from-daemon-error-processing-tar-file-docker-tar-relocation-error) for details.
@@ -62,14 +65,14 @@ The following table shows which languages, package managers and frameworks are s
| Language (package managers) / framework | Scan tool | Introduced in GitLab Version |
|-----------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------|
| .NET | [Security Code Scan](https://security-code-scan.github.io) | 11.0 |
-| Any | [Gitleaks](https://github.com/zricethezav/gitleaks) and [TruffleHog](https://github.com/dxa4481/truffleHog) | 11.9 |
+| Any | [Gitleaks](https://github.com/zricethezav/gitleaks) and [TruffleHog](https://github.com/dxa4481/truffleHog) | 11.9 |
| Apex (Salesforce) | [pmd](https://pmd.github.io/pmd/index.html) | 12.1 |
-| C/C++ | [Flawfinder](https://www.dwheeler.com/flawfinder/) | 10.7 |
+| C/C++ | [Flawfinder](https://dwheeler.com/flawfinder/) | 10.7 |
| Elixir (Phoenix) | [Sobelow](https://github.com/nccgroup/sobelow) | 11.10 |
| Go | [Gosec](https://github.com/securego/gosec) | 10.7 |
| Groovy ([Ant](https://ant.apache.org/), [Gradle](https://gradle.org/), [Maven](https://maven.apache.org/) and [SBT](https://www.scala-sbt.org/)) | [SpotBugs](https://spotbugs.github.io/) with the [find-sec-bugs](https://find-sec-bugs.github.io/) plugin | 11.3 (Gradle) & 11.9 (Ant, Maven, SBT) |
| Java ([Ant](https://ant.apache.org/), [Gradle](https://gradle.org/), [Maven](https://maven.apache.org/) and [SBT](https://www.scala-sbt.org/)) | [SpotBugs](https://spotbugs.github.io/) with the [find-sec-bugs](https://find-sec-bugs.github.io/) plugin | 10.6 (Maven), 10.8 (Gradle) & 11.9 (Ant, SBT) |
-| Javascript | [ESLint security plugin](https://github.com/nodesecurity/eslint-plugin-security) | 11.8 |
+| JavaScript | [ESLint security plugin](https://github.com/nodesecurity/eslint-plugin-security) | 11.8 |
| Node.js | [NodeJsScan](https://github.com/ajinabraham/NodeJsScan) | 11.1 |
| PHP | [phpcs-security-audit](https://github.com/FloeDesignTechnologies/phpcs-security-audit) | 10.8 |
| Python ([pip](https://pip.pypa.io/en/stable/)) | [bandit](https://github.com/PyCQA/bandit) | 10.3 |
@@ -110,10 +113,9 @@ is used to detect the languages/frameworks and in turn runs the matching scan to
### Customizing the SAST settings
-The SAST settings can be changed through environment variables by using the
+The SAST settings can be changed through [environment variables](#available-variables)
+by using the
[`variables`](../../../ci/yaml/README.md#variables) parameter in `.gitlab-ci.yml`.
-These variables are documented in the
-[SAST tool documentation](https://gitlab.com/gitlab-org/security-products/sast#settings).
In the following example, we include the SAST template and at the same time we
set the `SAST_GOSEC_LEVEL` variable to `2`:
@@ -129,7 +131,22 @@ variables:
Because the template is [evaluated before](../../../ci/yaml/README.md#include)
the pipeline configuration, the last mention of the variable will take precedence.
-#### Using a variable to pass username and password to a private Maven repository
+### Overriding the SAST template
+
+If you want to override the job definition (for example, change properties like
+`variables` or `dependencies`), you need to declare a `sast` job after the
+template inclusion and specify any additional keys under it. For example:
+
+```yaml
+include:
+ template: SAST.gitlab-ci.yml
+
+sast:
+ variables:
+ CI_DEBUG_TRACE: "true"
+```
+
+### Using a variable to pass username and password to a private Maven repository
If you have a private Apache Maven repository that requires login credentials,
you can use the `MAVEN_CLI_OPTS` [environment variable](#available-variables)
@@ -137,28 +154,28 @@ to pass a username and password. You can set it under your project's settings
so that your credentials aren't exposed in `.gitlab-ci.yml`.
If the username is `myuser` and the password is `verysecret` then you would
-set the following [variable](../../../ci/variables/README.md#via-the-ui)
+[set the following variable](../../../ci/variables/README.md#via-the-ui)
under your project's settings:
| Type | Key | Value |
| ---- | --- | ----- |
| Variable | `MAVEN_CLI_OPTS` | `-Drepository.password=verysecret -Drepository.user=myuser` |
-### Overriding the SAST template
+### Disabling Docker in Docker for SAST
-If you want to override the job definition (for example, change properties like
-`variables` or `dependencies`), you need to declare a `sast` job after the
-template inclusion and specify any additional keys under it. For example:
+You can avoid the need for Docker in Docker by running the individual analyzers.
+This does not require running the executor in privileged mode. For example:
```yaml
include:
template: SAST.gitlab-ci.yml
-sast:
- variables:
- CI_DEBUG_TRACE: "true"
+variables:
+ SAST_DISABLE_DIND: "true"
```
+This will create individual `<analyzer-name>-sast` jobs for each analyzer that runs in your CI/CD pipeline.
+
### Available variables
SAST can be [configured](#customizing-the-sast-settings) using environment variables.
@@ -173,9 +190,10 @@ The following are Docker image-related variables.
| `SAST_ANALYZER_IMAGE_PREFIX` | Override the name of the Docker registry providing the default images (proxy). Read more about [customizing analyzers](analyzers.md). |
| `SAST_ANALYZER_IMAGE_TAG` | Override the Docker tag of the default images. Read more about [customizing analyzers](analyzers.md). |
| `SAST_DEFAULT_ANALYZERS` | Override the names of default images. Read more about [customizing analyzers](analyzers.md). |
+| `SAST_DISABLE_DIND` | Disable Docker in Docker and run analyzers [individually](#disabling-docker-in-docker-for-sast). |
| `SAST_PULL_ANALYZER_IMAGES` | Pull the images from the Docker registry (set to 0 to disable). Read more about [customizing analyzers](analyzers.md). |
-### Vulnerability filters
+#### Vulnerability filters
Some analyzers make it possible to filter out vulnerabilities under a given threshold.
@@ -188,7 +206,7 @@ Some analyzers make it possible to filter out vulnerabilities under a given thre
| `SAST_GOSEC_LEVEL` | 0 | Ignore gosec vulnerabilities under given confidence level. Integer, 0=Undefined, 1=Low, 2=Medium, 3=High. | |
| `SAST_EXCLUDED_PATHS` | - | Exclude vulnerabilities from output based on the paths. This is a comma-separated list of patterns. Patterns can be globs, file or folder paths. Parent directories will also match patterns. | `SAST_EXCLUDED_PATHS=doc,spec` |
-### Timeouts
+#### Timeouts
The following variables configure timeouts.
@@ -198,7 +216,7 @@ The following variables configure timeouts.
| `SAST_PULL_ANALYZER_IMAGE_TIMEOUT` | 5m | Time limit when pulling the image of an analyzer. Timeouts are parsed using Go's [`ParseDuration`](https://golang.org/pkg/time/#ParseDuration). Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". For example, "300ms", "1.5h" or "2h45m". |
| `SAST_RUN_ANALYZER_TIMEOUT` | 20m | Time limit when running an analyzer. Timeouts are parsed using Go's [`ParseDuration`](https://golang.org/pkg/time/#ParseDuration). Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". For example, "300ms", "1.5h" or "2h45m".|
-### Analyzer settings
+#### Analyzer settings
Some analyzers can be customized with environment variables.
diff --git a/doc/user/application_security/security_dashboard/index.md b/doc/user/application_security/security_dashboard/index.md
index 999b98bfa3d..0e26206f070 100644
--- a/doc/user/application_security/security_dashboard/index.md
+++ b/doc/user/application_security/security_dashboard/index.md
@@ -36,7 +36,7 @@ To use the group, project or pipeline security dashboard:
## Pipeline Security Dashboard
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/13496) in [GitLab Ultimate](https://about.gitlab.com/pricing) 12.3.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/13496) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.3.
At the pipeline level, the Security Dashboard displays the vulnerabilities present in the branch of the project the pipeline was run against.
@@ -46,7 +46,7 @@ Visit the page for any pipeline which has run any of the [supported reports](#su
## Project Security Dashboard
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/6165) in [GitLab Ultimate](https://about.gitlab.com/pricing) 11.1.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/6165) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.1.
At the project level, the Security Dashboard displays the latest security reports
for your project. Use it to find and fix vulnerabilities affecting the
@@ -56,7 +56,7 @@ for your project. Use it to find and fix vulnerabilities affecting the
## Group Security Dashboard
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/6709) in [GitLab Ultimate](https://about.gitlab.com/pricing) 11.5.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/6709) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.5.
The group Security Dashboard gives an overview of the vulnerabilities of all the
projects in a group and its subgroups.
diff --git a/doc/user/asciidoc.md b/doc/user/asciidoc.md
index 862316b57da..b4d3cb58e97 100644
--- a/doc/user/asciidoc.md
+++ b/doc/user/asciidoc.md
@@ -6,7 +6,7 @@ Consult the [Asciidoctor User Manual](https://asciidoctor.org/docs/user-manual/)
## Syntax
Here's a brief reference of the most commonly used AsciiDoc syntax.
-You can find the full documentation for the AsciiDoc syntax at <https://asciidoctor.org/docs>.
+You can find the full documentation for the AsciiDoc syntax at <https://asciidoctor.org/docs/>.
### Paragraphs
@@ -44,7 +44,7 @@ monospaced font:
An admonition paragraph grabs the reader's attention:
```asciidoc
-NOTE: This is a brief reference, please read the full documentation at https://asciidoctor.org/docs.
+NOTE: This is a brief reference, please read the full documentation at https://asciidoctor.org/docs/.
TIP: Lists can be indented. Leading whitespace is not significant.
```
diff --git a/doc/user/clusters/applications.md b/doc/user/clusters/applications.md
index 8a53b4c0e47..dc6f859e881 100644
--- a/doc/user/clusters/applications.md
+++ b/doc/user/clusters/applications.md
@@ -62,7 +62,7 @@ can lead to confusion during deployments.
> - Introduced in GitLab 10.2 for project-level clusters.
> - Introduced in GitLab 11.6 for group-level clusters.
-[Helm](https://docs.helm.sh/) is a package manager for Kubernetes and is
+[Helm](https://helm.sh/docs/) is a package manager for Kubernetes and is
required to install all the other applications. It is installed in its
own pod inside the cluster which can run the `helm` CLI in a safe
environment.
@@ -86,11 +86,16 @@ NOTE: **Note:**
The
[jetstack/cert-manager](https://github.com/jetstack/cert-manager)
chart is used to install this application with a
-[`values.yaml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/vendor/cert_manager/values.yaml)
+[`values.yaml`](https://gitlab.com/gitlab-org/gitlab/blob/master/vendor/cert_manager/values.yaml)
file. Prior to GitLab 12.3,
the [stable/cert-manager](https://github.com/helm/charts/tree/master/stable/cert-manager)
chart was used.
+NOTE: **Note:**
+If you have installed cert-manager prior to GitLab 12.3, Let's Encrypt will
+[block requests from older versions of cert-manager](https://community.letsencrypt.org/t/blocking-old-cert-manager-versions/98753).
+To resolve this, uninstall cert-manager (consider [backing up any additional configuration](https://docs.cert-manager.io/en/latest/tasks/backup-restore-crds.html)), then install cert-manager again.
+
### GitLab Runner
> - Introduced in GitLab 10.6 for project-level clusters.
@@ -106,11 +111,10 @@ mode** by default. Make sure you read the [security
implications](../project/clusters/index.md#security-implications) before doing so.
NOTE: **Note:**
-The
-[runner/gitlab-runner](https://gitlab.com/gitlab-org/charts/gitlab-runner)
+The [`runner/gitlab-runner`](https://gitlab.com/gitlab-org/charts/gitlab-runner)
chart is used to install this application with a
-[`values.yaml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/vendor/runner/values.yaml)
-file.
+[`values.yaml`](https://gitlab.com/gitlab-org/gitlab/blob/master/vendor/runner/values.yaml)
+file. Customizing installation by modifying this file is not supported.
### Ingress
@@ -123,23 +127,26 @@ web proxy for your applications and is useful if you want to use [Auto
DevOps](../../topics/autodevops/index.md) or deploy your own web apps.
NOTE: **Note:**
-The
-[stable/nginx-ingress](https://github.com/helm/charts/tree/master/stable/nginx-ingress)
+The [`stable/nginx-ingress`](https://github.com/helm/charts/tree/master/stable/nginx-ingress)
chart is used to install this application with a
-[`values.yaml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/vendor/ingress/values.yaml)
+[`values.yaml`](https://gitlab.com/gitlab-org/gitlab/blob/master/vendor/ingress/values.yaml)
file.
-#### Modsecurity Application Firewall
+#### Web Application Firewall (ModSecurity)
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/65192) in GitLab 12.3 (enabled using `ingress_modsecurity` [feature flag](../../development/feature_flags/development.md#enabling-a-feature-flag-in-development)).
-GitLab supports
+Out of the box, GitLab provides you real-time security monitoring with
[`modsecurity`](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#modsecurity)
-to check requests against [OWASP's Core Rule Set](https://www.modsecurity.org/CRS/Documentation/).
+
+Modsecurity is a toolkit for real-time web application monitoring, logging,
+and access control. With GitLab's offering, the [OWASP's Core Rule Set](https://www.modsecurity.org/CRS/Documentation/), which provides generic attack detection capabilities,
+is automatically applied.
+
This feature:
- Runs in "Detection-only mode" unless configured otherwise.
-- Is viewable by checking your ingress controller's `modsec` log for rule violations.
+- Is viewable by checking your Ingress controller's `modsec` log for rule violations.
For example:
```sh
@@ -160,7 +167,7 @@ application for the changes to take effect.
### JupyterHub
> - Introduced in GitLab 11.0 for project-level clusters.
-> - Introduced in GitLab 12.3 for group-level clusters.
+> - Introduced in GitLab 12.3 for group and instance-level clusters.
[JupyterHub](https://jupyterhub.readthedocs.io/en/stable/) is a
multi-user service for managing notebooks across a team. [Jupyter
@@ -176,7 +183,7 @@ higher](../permissions.md) access to the associated project or group.
We use a [custom Jupyter
image](https://gitlab.com/gitlab-org/jupyterhub-user-image/blob/master/Dockerfile)
that installs additional useful packages on top of the base Jupyter. You
-will also see ready-to-use DevOps Runbooks built with Nurtch's [Rubix library](https://github.com/amit1rrr/rubix).
+will also see ready-to-use DevOps Runbooks built with Nurtch's [Rubix library](https://github.com/Nurtch/rubix).
More information on
creating executable runbooks can be found in [our Runbooks
@@ -185,15 +192,15 @@ Ingress must be installed and have an IP address assigned before
JupyterHub can be installed.
NOTE: **Note:**
-The
-[jupyter/jupyterhub](https://jupyterhub.github.io/helm-chart/)
+The [`jupyter/jupyterhub`](https://jupyterhub.github.io/helm-chart/)
chart is used to install this application with a
-[`values.yaml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/vendor/jupyter/values.yaml)
+[`values.yaml`](https://gitlab.com/gitlab-org/gitlab/blob/master/vendor/jupyter/values.yaml)
file.
#### Jupyter Git Integration
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/28783) in GitLab 12.0 for project-level clusters.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/32512) in GitLab 12.3 for group and instance-level clusters.
When installing JupyterHub onto your Kubernetes cluster, [JupyterLab's Git extension](https://github.com/jupyterlab/jupyterlab-git)
is automatically provisioned and configured using the authenticated user's:
@@ -223,7 +230,7 @@ You can clone repositories from the files tab in Jupyter:
> - Introduced in GitLab 11.5 for project-level clusters.
> - Introduced in GitLab 12.3 for group- and instance-level clusters.
-[Knative](https://cloud.google.com/knative) provides a platform to
+[Knative](https://cloud.google.com/knative/) provides a platform to
create, deploy, and manage serverless workloads from a Kubernetes
cluster. It is used in conjunction with, and includes
[Istio](https://istio.io) to provide an external IP address for all
@@ -234,12 +241,11 @@ domain where your applications will be exposed. Configure your DNS
server to use the external IP address for that domain. For any
application created and installed, they will be accessible as
`<program_name>.<kubernetes_namespace>.<domain_name>`. This will require
-your kubernetes cluster to have [RBAC
+your Kubernetes cluster to have [RBAC
enabled](../project/clusters/index.md#rbac-cluster-resources).
NOTE: **Note:**
-The
-[knative/knative](https://storage.googleapis.com/triggermesh-charts)
+The [`knative/knative`](https://storage.googleapis.com/triggermesh-charts)
chart is used to install this application.
### Prometheus
@@ -252,10 +258,9 @@ open-source monitoring and alerting system useful to supervise your
deployed applications.
NOTE: **Note:**
-The
-[stable/prometheus](https://github.com/helm/charts/tree/master/stable/prometheus)
+The [`stable/prometheus`](https://github.com/helm/charts/tree/master/stable/prometheus)
chart is used to install this application with a
-[`values.yaml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/vendor/prometheus/values.yaml)
+[`values.yaml`](https://gitlab.com/gitlab-org/gitlab/blob/master/vendor/prometheus/values.yaml)
file.
## Upgrading applications
@@ -281,7 +286,7 @@ To upgrade an application:
NOTE: **Note:**
Upgrades will reset values back to the values built into the `runner`
chart plus the values set by
-[`values.yaml`](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/vendor/runner/values.yaml)
+[`values.yaml`](https://gitlab.com/gitlab-org/gitlab/blob/master/vendor/runner/values.yaml)
## Uninstalling applications
@@ -293,7 +298,7 @@ The applications below can be uninstalled.
| ----------- | -------------- | ----- |
| Cert-Manager | 12.2+ | The associated private key will be deleted and cannot be restored. Deployed applications will continue to use HTTPS, but certificates will not be renewed. Before uninstalling, you may wish to [back up your configuration](https://docs.cert-manager.io/en/latest/tasks/backup-restore-crds.html) or [revoke your certificates](https://letsencrypt.org/docs/revoking/) |
| GitLab Runner | 12.2+ | Any running pipelines will be canceled. |
-| Helm | 12.2+ | The associated Tiller pod will be deleted and cannot be restored. |
+| Helm | 12.2+ | The associated Tiller pod, the `gitlab-managed-apps` namespace, and all of its resources will be deleted and cannot be restored. |
| Ingress | 12.1+ | The associated load balancer and IP will be deleted and cannot be restored. Furthermore, it can only be uninstalled if JupyterHub is not installed. |
| JupyterHub | 12.1+ | All data not committed to GitLab will be deleted and cannot be restored. |
| Knative | 12.1+ | The associated IP will be deleted and cannot be restored. |
diff --git a/doc/user/clusters/environments.md b/doc/user/clusters/environments.md
index 4aef871af55..f83be85726a 100644
--- a/doc/user/clusters/environments.md
+++ b/doc/user/clusters/environments.md
@@ -1,6 +1,7 @@
# Cluster Environments **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/13392) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.3.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/13392) for group-level clusters in [GitLab Premium](https://about.gitlab.com/pricing/) 12.3.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/14809) for instance-level clusters in [GitLab Premium](https://about.gitlab.com/pricing/) 12.4.
Cluster environments provide a consolidated view of which CI [environments](../../ci/environments.md) are
deployed to the Kubernetes cluster and it:
@@ -10,12 +11,6 @@ deployed to the Kubernetes cluster and it:
## Overview
-NOTE: **Note:**
-Cluster environments are only available for
-[group-level clusters](../group/clusters/index.md).
-Support for [instance-level](../instance/clusters/index.md) clusters is
-[planned](https://gitlab.com/gitlab-org/gitlab-ce/issues/63985).
-
With cluster environments, you can gain insight into:
- Which projects are deployed to the cluster.
@@ -37,7 +32,7 @@ In order to:
- Show pod usage correctly, you must
[enable Deploy Boards](../project/deploy_boards.md#enabling-deploy-boards).
-Once you have successful deployments to your group-level cluster:
+Once you have successful deployments to your group-level or instance-level cluster:
1. Navigate to your group's **Kubernetes** page.
1. Click on the **Environments** tab.
diff --git a/doc/user/clusters/management_project.md b/doc/user/clusters/management_project.md
new file mode 100644
index 00000000000..37308ad7175
--- /dev/null
+++ b/doc/user/clusters/management_project.md
@@ -0,0 +1,101 @@
+# Cluster management project (alpha)
+
+CAUTION: **Warning:**
+This is an _alpha_ feature, and it is subject to change at any time without
+prior notice.
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/17866) in GitLab 12.4
+
+A project can be designated as the management project for a cluster.
+A management project can be used to run deployment jobs with
+Kubernetes
+[`cluster-admin`](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)
+privileges.
+
+This can be useful for:
+
+- Creating pipelines to install cluster-wide applications into your cluster.
+- Any jobs that require `cluster-admin` privileges.
+
+## Permissions
+
+Only the management project will receive `cluster-admin` privileges. All
+other projects will continue to receive [namespace scoped `edit` level privileges](../project/clusters/index.md#rbac-cluster-resources).
+
+## Usage
+
+### Selecting a cluster management project
+
+This will be implemented as part of [this
+issue](https://gitlab.com/gitlab-org/gitlab/issues/32810).
+
+### Configuring your pipeline
+
+After designating a project as the management project for the cluster,
+write a [`.gitlab-ci,yml`](../../ci/yaml/README.md) in that project. For example:
+
+```yaml
+configure cluster:
+ stage: deploy
+ script: kubectl get namespaces
+ environment:
+ name: production
+```
+
+### Setting the environment scope **(PREMIUM)**
+
+[Environment
+scopes](../project/clusters/index.md#setting-the-environment-scope-premium)
+are usable when associating multiple clusters to the same management
+project.
+
+Each scope can only be used by a single cluster for a management project.
+
+For example, let's say the following Kubernetes clusters are associated
+to a management project:
+
+| Cluster | Environment scope |
+| ----------- | ----------------- |
+| Development | `*` |
+| Staging | `staging` |
+| Production | `production` |
+
+The the following environments set in
+[`.gitlab-ci.yml`](../../ci/yaml/README.md) will deploy to the
+Development, Staging, and Production cluster respectively.
+
+```yaml
+stages:
+- deploy
+
+configure development cluster:
+ stage: deploy
+ script: kubectl get namespaces
+ environment:
+ name: development
+
+configure staging cluster:
+ stage: deploy
+ script: kubectl get namespaces
+ environment:
+ name: staging
+
+configure production cluster:
+ stage: deploy
+ script: kubectl get namespaces
+ environment:
+ name: production
+```
+
+## Disabling this feature
+
+This feature is enabled by default. To disable this feature, disable the
+feature flag `:cluster_management_project`.
+
+To check if the feature flag is enabled on your GitLab instance,
+please ask an administrator to execute the following in a Rails console:
+
+```ruby
+Feature.enabled?(:cluster_management_project) # Check if it's enabled or not.
+Feature.disable(:cluster_management_project) # Disable the feature flag.
+```
diff --git a/doc/user/discussions/index.md b/doc/user/discussions/index.md
index 98f744e6e04..dcb75a19b2a 100644
--- a/doc/user/discussions/index.md
+++ b/doc/user/discussions/index.md
@@ -24,6 +24,9 @@ You can also reply to a comment notification email to reply to the comment if
creates another standard comment. Replying to a threaded comment creates a reply in the thread. Email replies support
[Markdown] and [quick actions], just as if you replied from the web.
+NOTE: **Note:**
+There is a limit of 5,000 comments for every object, for example: issue, epic, and merge request.
+
## Resolvable comments and threads
> **Notes:**
diff --git a/doc/user/gitlab_com/index.md b/doc/user/gitlab_com/index.md
index 463ce2056fc..5912fc8e9f9 100644
--- a/doc/user/gitlab_com/index.md
+++ b/doc/user/gitlab_com/index.md
@@ -41,7 +41,7 @@ Host gitlab.com
## GitLab Pages
-Below are the settings for [GitLab Pages].
+Below are the settings for [GitLab Pages](https://about.gitlab.com/product/pages/).
| Setting | GitLab.com | Default |
| --------------------------- | ---------------- | ------------- |
@@ -103,13 +103,11 @@ Below are the shared Runners settings.
| Setting | GitLab.com | Default |
| ----------- | ----------------- | ---------- |
-| [GitLab Runner] | [Runner versions dashboard][ci_version_dashboard] | - |
+| [GitLab Runner] | [Runner versions dashboard](https://dashboards.gitlab.com/d/000000159/ci?from=now-1h&to=now&refresh=5m&orgId=1&panelId=12&fullscreen&theme=light) | - |
| Executor | `docker+machine` | - |
| Default Docker image | `ruby:2.5` | - |
| `privileged` (run [Docker in Docker]) | `true` | `false` |
-[ci_version_dashboard]: https://dashboards.gitlab.com/dashboard/db/ci?from=now-1h&to=now&refresh=5m&orgId=1&panelId=12&fullscreen&theme=light
-
### `config.toml`
The full contents of our `config.toml` are:
@@ -174,14 +172,22 @@ sentry_dsn = "X"
## Sidekiq
-GitLab.com runs [Sidekiq][sidekiq] with arguments `--timeout=4 --concurrency=4`
+GitLab.com runs [Sidekiq](https://sidekiq.org) with arguments `--timeout=4 --concurrency=4`
and the following environment variables:
-| Setting | GitLab.com | Default |
-|-------- |----------- |-------- |
-| `SIDEKIQ_MEMORY_KILLER_MAX_RSS` | `1000000` | `2000000` |
-| `SIDEKIQ_MEMORY_KILLER_SHUTDOWN_SIGNAL` | `SIGKILL` | - |
-| `SIDEKIQ_LOG_ARGUMENTS` | `1` | - |
+| Setting | GitLab.com | Default |
+|-------- |----------- |-------- |
+| `SIDEKIQ_DAEMON_MEMORY_KILLER` | - | - |
+| `SIDEKIQ_MEMORY_KILLER_MAX_RSS` | `2000000` | `2000000` |
+| `SIDEKIQ_MEMORY_KILLER_HARD_LIMIT_RSS` | - | - |
+| `SIDEKIQ_MEMORY_KILLER_CHECK_INTERVAL` | - | `3` |
+| `SIDEKIQ_MEMORY_KILLER_GRACE_TIME` | - | `900` |
+| `SIDEKIQ_MEMORY_KILLER_SHUTDOWN_WAIT` | - | `30` |
+| `SIDEKIQ_LOG_ARGUMENTS` | `1` | - |
+
+NOTE: **Note:**
+The `SIDEKIQ_MEMORY_KILLER_MAX_RSS` setting is `16000000` on Sidekiq import
+nodes and Sidekiq export nodes.
## Cron jobs
@@ -267,7 +273,7 @@ released depending on the type of block, as described below.
If you receive a `403 Forbidden` error for all requests to GitLab.com, please
check for any automated processes that may be triggering a block. For
-assistance, contact [GitLab Support](https://support.gitlab.com)
+assistance, contact [GitLab Support](https://support.gitlab.com/hc/en-us)
with details, such as the affected IP address.
### HAProxy API throttle
@@ -308,9 +314,7 @@ This header is included in responses to blocked requests:
Retry-After: 60
```
-Source:
-
-- Search for `rate_limit_requests_per_period`, `rate_limit_period`, and `rack_attack_protected_paths` in [GitLab.com's current Rails app settings](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/attributes/default.rb).
+See [Protected Paths](../admin_area/settings/protected_paths.md) for more details.
#### Git and container registry failed authentication ban
@@ -347,47 +351,45 @@ publicly available at [chef cookbooks](https://gitlab.com/gitlab-cookbooks).
We use Elasticsearch, logstash, and Kibana for part of our monitoring solution:
-- [gitlab-cookbooks / gitlab-elk · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-elk)
-- [gitlab-cookbooks / gitlab_elasticsearch · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab_elasticsearch)
+- [`gitlab-cookbooks` / `gitlab-elk` · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-elk)
+- [`gitlab-cookbooks` / `gitlab_elasticsearch` · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab_elasticsearch)
### Prometheus
Prometheus complete our monitoring stack:
-- [gitlab-cookbooks / gitlab-prometheus · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-prometheus)
+- [`gitlab-cookbooks` / `gitlab-prometheus` · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-prometheus)
### Grafana
For the visualization of monitoring data:
-- [gitlab-cookbooks / gitlab-grafana · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-grafana)
+- [`gitlab-cookbooks` / `gitlab-grafana` · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-grafana)
### Sentry
Open source error tracking:
-- [gitlab-cookbooks / gitlab-sentry · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-sentry)
+- [`gitlab-cookbooks` / `gitlab-sentry` · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-sentry)
### Consul
Service discovery:
-- [gitlab-cookbooks / gitlab_consul · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab_consul)
+- [`gitlab-cookbooks` / `gitlab_consul` · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab_consul)
### Haproxy
High Performance TCP/HTTP Load Balancer:
-- [gitlab-cookbooks / gitlab-haproxy · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-haproxy)
+- [`gitlab-cookbooks` / `gitlab-haproxy` · GitLab](https://gitlab.com/gitlab-cookbooks/gitlab-haproxy)
[autoscale mode]: https://docs.gitlab.com/runner/configuration/autoscale.html "How Autoscale works"
-[runners-post]: https://about.gitlab.com/2016/04/05/shared-runners/ "Shared Runners on GitLab.com"
+[runners-post]: https://about.gitlab.com/blog/2016/04/05/shared-runners/ "Shared Runners on GitLab.com"
[GitLab Runner]: https://gitlab.com/gitlab-org/gitlab-runner
-[altssh]: https://about.gitlab.com/2016/02/18/gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port/ "GitLab.com now supports an alternate git+ssh port"
-[GitLab Pages]: https://about.gitlab.com/features/pages "GitLab Pages"
+[altssh]: https://about.gitlab.com/blog/2016/02/18/gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port/ "GitLab.com now supports an alternate git+ssh port"
[docker in docker]: https://hub.docker.com/_/docker/ "Docker in Docker at DockerHub"
[mailgun]: https://www.mailgun.com/ "Mailgun website"
-[sidekiq]: http://sidekiq.org/ "Sidekiq website"
[unicorn-worker-killer]: https://rubygems.org/gems/unicorn-worker-killer "unicorn-worker-killer"
[4010]: https://gitlab.com/gitlab-com/infrastructure/issues/4010 "Find a good value for maximum timeout for Shared Runners"
[4070]: https://gitlab.com/gitlab-com/infrastructure/issues/4070 "Configure per-runner timeout for shared-runners-manager-X on GitLab.com"
diff --git a/doc/user/group/clusters/index.md b/doc/user/group/clusters/index.md
index 1eed1281bba..4742e7189b7 100644
--- a/doc/user/group/clusters/index.md
+++ b/doc/user/group/clusters/index.md
@@ -18,7 +18,7 @@ your group, enabling you to use the same cluster across multiple projects.
GitLab can install and manage some applications in your group-level
cluster. For more information on installing, upgrading, uninstalling,
and troubleshooting applications for your group cluster, see
-[Gitlab Managed Apps](../../clusters/applications.md).
+[GitLab Managed Apps](../../clusters/applications.md).
## RBAC compatibility
@@ -139,7 +139,9 @@ The result will then be:
## Cluster environments **(PREMIUM)**
-Please see the documentation for [cluster environments](../../clusters/environments.md).
+For a consolidated view of which CI [environments](../../../ci/environments.md)
+are deployed to the Kubernetes cluster, see the documentation for
+[cluster environments](../../clusters/environments.md).
## Security of Runners
diff --git a/doc/user/group/custom_project_templates.md b/doc/user/group/custom_project_templates.md
index 094732e6a93..e47a281141d 100644
--- a/doc/user/group/custom_project_templates.md
+++ b/doc/user/group/custom_project_templates.md
@@ -7,7 +7,7 @@ type: reference
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/6861) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.6.
When you create a new [project](../project/index.md), creating it based on custom project templates is
-a convenient bootstrap option.
+a convenient option.
Users can configure a GitLab group that serves as template
source under a group's **Settings > General > Custom project templates**.
diff --git a/doc/user/group/epics/img/child_epics_roadmap.png b/doc/user/group/epics/img/child_epics_roadmap.png
deleted file mode 100644
index 819fed58989..00000000000
--- a/doc/user/group/epics/img/child_epics_roadmap.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/group/epics/img/epic_view.png b/doc/user/group/epics/img/epic_view.png
deleted file mode 100644
index c55d302ec29..00000000000
--- a/doc/user/group/epics/img/epic_view.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/group/epics/img/epic_view_roadmap_v12.3.png b/doc/user/group/epics/img/epic_view_roadmap_v12.3.png
new file mode 100755
index 00000000000..a17c56c618b
--- /dev/null
+++ b/doc/user/group/epics/img/epic_view_roadmap_v12.3.png
Binary files differ
diff --git a/doc/user/group/epics/img/epic_view_v12.3.png b/doc/user/group/epics/img/epic_view_v12.3.png
new file mode 100755
index 00000000000..79758cf3d52
--- /dev/null
+++ b/doc/user/group/epics/img/epic_view_v12.3.png
Binary files differ
diff --git a/doc/user/group/epics/img/epics_list_view.png b/doc/user/group/epics/img/epics_list_view.png
deleted file mode 100644
index b30608d9d31..00000000000
--- a/doc/user/group/epics/img/epics_list_view.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/group/epics/img/epics_list_view_v12.3.png b/doc/user/group/epics/img/epics_list_view_v12.3.png
new file mode 100755
index 00000000000..c6817a503e7
--- /dev/null
+++ b/doc/user/group/epics/img/epics_list_view_v12.3.png
Binary files differ
diff --git a/doc/user/group/epics/index.md b/doc/user/group/epics/index.md
index d04ecedc7a2..f9690d4edfe 100644
--- a/doc/user/group/epics/index.md
+++ b/doc/user/group/epics/index.md
@@ -10,13 +10,13 @@ Epics let you manage your portfolio of projects more efficiently and with less
effort by tracking groups of issues that share a theme, across projects and
milestones.
-![epics list view](img/epics_list_view.png)
+![epics list view](img/epics_list_view_v12.3.png)
## Use cases
- Suppose your team is working on a large feature that involves multiple discussions throughout different issues created in distinct projects within a [Group](../index.md). With Epics, you can track all the related activities that together contribute to that single feature.
- Track when the work for the group of issues is targeted to begin, and when it is targeted to end.
-- Discuss and collaborate on feature ideas and scope at a high-level.
+- Discuss and collaborate on feature ideas and scope at a high level.
## Creating an epic
@@ -24,78 +24,114 @@ A paginated list of epics is available in each group from where you can create
a new epic. The list of epics includes also epics from all subgroups of the
selected group. From your group page:
-1. Go to **Epics**
-1. Click the **New epic** button at the top right
-1. Enter a descriptive title and hit **Create epic**
+1. Go to **Epics**.
+1. Click **New epic**.
+1. Enter a descriptive title and click **Create epic**.
-Once created, you will be taken to the view for that newly-created epic where
-you can change its title, description, start date, and due date.
+You will be taken to the new epic where can edit the following details:
-![epic view](img/epic_view.png)
+- Title
+- Description
+- Start date
+- Due date
+- Labels
+
+An epic's page contains the following tabs:
+
+- **Epics and Issues**: epics and issues added to this epic. Child epics, and their issues, are shown in a tree view.
+ - Click on the <kbd>></kbd> beside a parent epic to reveal the child epics and issues.
+- **Roadmap**: a roadmap view of child epics which have start and due dates.
+
+![epic view](img/epic_view_v12.3.png)
## Adding an issue to an epic
+Any issue that belongs to a project in the epic's group, or any of the epic's
+subgroups, are eligible to be added. New issues appear at the top of the list of issues in the **Epics and Issues** tab.
+
An epic contains a list of issues and an issue can be associated with at most
-one epic. When on an epic, you can add its associated issues:
+one epic. When you add an issue to an epic that is already associated with another epic,
+the issue is automatically removed from the previous epic.
+
+To add an issue to an epic:
-1. Click the plus icon (<kbd>+</kbd>) under the epic description.
-1. Paste the link of the issue (you can hit <kbd>Spacebar</kbd> to add more than
- one issues at a time).
+1. Click **Add an issue**.
+1. Paste the link of the issue.
+ - Press <kbd>Spacebar</kbd> and repeat this step if there are multiple issues.
1. Click **Add**.
-Any issue belonging to a project in the epic's group or any of the epic's
-subgroups are eligible to be added. To remove an issue from an epic, click
-on the <kbd>x</kbd> button in the epic's issue list.
+To remove an issue from an epic:
-NOTE: **Note:**
-When you add an issue or an epic to an epic that's already associated with another epic,
-the issue or the epic is automatically removed from the previous epic.
+1. Click on the <kbd>x</kbd> button in the epic's issue list.
+1. Click **Remove** in the **Remove issue** warning message.
## Multi-level child epics
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/8333) in GitLab Ultimate 11.7.
-Much like adding issues to an epic, an epic can have multiple child epics with
-the maximum depth being 5. To add a child epic:
+Any epic that belongs to a group, or subgroup of the parent epic's group, is
+eligible to be added. New child epics appear at the top of the list of epics in the **Epics and Issues** tab.
+
+When you add a child epic that is already associated with another epic,
+that epic is automatically removed from the previous epic.
-1. Click the plus icon (<kbd>+</kbd>) under the epic description.
+An epic can have multiple child epics with
+the maximum depth being 5.
+
+To add a child epic:
+
+1. Click **Add an epic**.
1. Paste the link of the epic.
+ - Press <kbd>Spacebar</kbd> and repeat this step if there are multiple issues.
1. Click **Add**.
-Any epic that belongs to a group or subgroup of the parent epic's group is
-eligible to be added. To remove a child epic from a parent epic,
-click on the <kbd>x</kbd> button in the parent epic's epic list.
+To remove a child epic from a parent epic:
+
+1. Click on the <kbd>x</kbd> button in the parent epic's list of epics.
+1. Click **Remove** in the **Remove epic** warning message.
## Start date and due date
-For each of the dates in the sidebar of an epic, you can choose to either:
+To set a **Start date** and **Due date** for an epic, you can choose either of the following:
-- Enter a fixed value.
-- Inherit a dynamic value called "From milestones".
+- **Fixed**: Enter a fixed value.
+- **From milestones:** Inherit a dynamic value from the issues added to the epic.
-If you select "From milestones" for the start date, GitLab will automatically set the
+If you select **From milestones** for the start date, GitLab will automatically set the
date to be earliest start date across all milestones that are currently assigned
-to the issues that are attached to the epic. Similarly, if you select "From milestones"
+to the issues that are added to the epic. Similarly, if you select "From milestones"
for the due date, GitLab will set it to be the latest due date across all
milestones that are currently assigned to those issues.
-These are dynamic dates in that if milestones are re-assigned to the issues, if the
-milestone dates change, or if issues are added or removed from the epic, then
-the re-calculation will happen immediately to set a new dynamic date.
+These are dynamic dates which are recalculated immediately if any of the following occur:
+
+- Milestones are re-assigned to the issues.
+- Milestone dates change.
+- Issues are added or removed from the epic.
-## Roadmap in epics
+## Roadmap
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/7327) in [GitLab Ultimate](https://about.gitlab.com/pricing) 11.10.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/7327) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.10.
If your epic contains one or more [child epics](#multi-level-child-epics) which
-have a [start or due date](#start-date-and-due-date), then you can see a
-[roadmap](../roadmap/index.md) view of the child epics under the parent epic itself.
+have a [start or due date](#start-date-and-due-date), a
+[roadmap](../roadmap/index.md) view of the child epics is listed under the parent epic.
-![Child epics roadmap](img/child_epics_roadmap.png)
+![Child epics roadmap](img/epic_view_roadmap_v12.3.png)
## Reordering issues and child epics
-Drag and drop to reorder issues and child epics. New issues and child epics added to an epic appear at the top of the list.
+New issues and child epics are added to the top of their respective lists in the **Epics and Issues** tab. You can reorder the list of issues and the list of child epics. Issues and child epics cannot be intermingled.
+
+To reorder issues assigned to an epic:
+
+1. Go to the **Epics and Issues** tab.
+1. Drag and drop issues into the desired order.
+
+To reorder child epics assigned to an epic:
+
+1. Go to the **Epics and Issues** tab.
+1. Drag and drop epics into the desired order.
## Updating epics
diff --git a/doc/user/group/index.md b/doc/user/group/index.md
index 036730ba700..c4be08c842b 100644
--- a/doc/user/group/index.md
+++ b/doc/user/group/index.md
@@ -17,7 +17,7 @@ Find your groups by clicking **Groups > Your Groups** in the top navigation.
![GitLab Groups](img/groups.png)
-> The **Groups** dropdown in the top navigation was [introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/36234) in [GitLab 11.1](https://about.gitlab.com/2018/07/22/gitlab-11-1-released/#groups-dropdown-in-navigation).
+> The **Groups** dropdown in the top navigation was [introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/36234) in [GitLab 11.1](https://about.gitlab.com/blog/2018/07/22/gitlab-11-1-released/#groups-dropdown-in-navigation).
The **Groups** page displays:
@@ -178,18 +178,20 @@ There are two different ways to add a new project to a group:
### Default project-creation level
-> [Introduced][ee-2534] in [GitLab Premium][ee] 10.5.
-> Brought to [GitLab Starter][ee] in 10.7.
-> [Moved](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/25975) to [GitLab Core](https://about.gitlab.com/pricing/) in 11.10.
+> - [Introduced][ee-2534] in [GitLab Premium][ee] 10.5.
+> - Brought to [GitLab Starter][ee] in 10.7.
+> - [Moved](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/25975) to [GitLab Core](https://about.gitlab.com/pricing/) in 11.10.
-Group owners and administrators can allow users with the
-Developer role to create projects under groups.
+By default, [Developers and Maintainers](../permissions.md#group-members-permissions) can create projects under a group.
-By default, [Developers and Maintainers](../permissions.md#group-members-permissions) can create projects under a group. You can change this setting for a specific group within the group settings, or
-you can set this option globally in the Admin area
-at **Settings > General > Visibility and access controls** (you must be a GitLab administrator).
+To change this setting for a specific group:
-Available settings are `No one`, `Maintainers`, or `Developers + Maintainers`.
+1. Go to the group's **Settings > General** page.
+1. Expand the **Permissions, LFS, 2FA** section.
+1. Select the desired option in the **Allowed to create projects** dropdown list.
+1. Click **Save changes**.
+
+To change this setting globally, see [Default project creation protection](../admin_area/settings/visibility_and_access_controls.md#default-project-creation-protection).
## Transfer projects into groups
@@ -334,10 +336,9 @@ This will disable the option for all users who previously had permissions to
operate project memberships, so no new users can be added. Furthermore, any
request to add a new user to a project through API will not be possible.
-#### IP access restriction **(ULTIMATE ONLY)**
+#### IP access restriction **(ULTIMATE)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1985) in
-[GitLab Ultimate](https://about.gitlab.com/pricing/) 12.0.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1985) in [GitLab Ultimate and Gold](https://about.gitlab.com/pricing/) 12.0.
To make sure only people from within your organization can access particular
resources, you have the option to restrict access to groups and their
@@ -349,16 +350,20 @@ Add one or more whitelisted IP subnets using CIDR notation in comma separated fo
coming from a different IP address won't be able to access the restricted
content.
-Restriction currently applies to UI and API access, Git actions via ssh are not restricted.
+Restriction currently applies to:
+
+- UI.
+- API access.
+- [From GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/issues/32113), Git actions via SSH.
+
To avoid accidental lock-out, admins and group owners are are able to access
the group regardless of the IP restriction.
-#### Allowed domain restriction **(PREMIUM ONLY)**
+#### Allowed domain restriction **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/7297) in
-[GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/7297) in [GitLab Premium and Silver](https://about.gitlab.com/pricing/) 12.2.
-You can restrict access to groups and their underlying projects by
+You can restrict access to groups by
allowing only users with email addresses in particular domains to be added to the group.
Add email domains you want to whitelist and users with emails from different
@@ -449,6 +454,11 @@ For performance reasons, we may delay the update up to 1 hour and 30 minutes.
If your namespace shows `N/A` as the total storage usage, you can trigger a recalculation by pushing a commit to any project in that namespace.
+### Maximum artifacts size **(CORE ONLY)**
+
+For information about setting a maximum artifact size for a group, see
+[Maximum artifacts size](../admin_area/settings/continuous_integration.md#maximum-artifacts-size-core-only).
+
## User contribution analysis **(STARTER)**
With [GitLab Contribution Analytics](contribution_analytics/index.md),
diff --git a/doc/user/group/roadmap/index.md b/doc/user/group/roadmap/index.md
index a72cd990706..bcd79bd04bf 100644
--- a/doc/user/group/roadmap/index.md
+++ b/doc/user/group/roadmap/index.md
@@ -26,7 +26,7 @@ Epics in the view can be sorted by:
Each option contains a button that toggles the sort order between **ascending** and **descending**. The sort option and order will be persisted when browsing Epics,
including the [epics list view](../epics/index.md).
-Roadmaps can also be [visualized inside an epic](../epics/index.md#roadmap-in-epics).
+Roadmaps can also be [visualized inside an epic](../epics/index.md#roadmap).
## Timeline duration
diff --git a/doc/user/group/saml_sso/index.md b/doc/user/group/saml_sso/index.md
index 90e4dacbd76..ecf2934b877 100644
--- a/doc/user/group/saml_sso/index.md
+++ b/doc/user/group/saml_sso/index.md
@@ -64,7 +64,10 @@ GitLab.com uses the SAML NameID to identify users. The NameID element:
- Is a required field in the SAML response.
- Must be unique to each user.
-- Must be a persistent value that will never change, such as a unique ID or username. Email could also be used as the NameID, but only if it can be guaranteed to never change.
+- Must be a persistent value that will never change, such as a randomly generated unique user ID.
+- Is case sensitive. The NameID must match exactly on subsequent login attempts, so should not rely on user input that could change between upper and lower case.
+
+We strongly recommend against using Email as the NameID as it is hard to guarantee it will never change, for example when a person's name changes. Similarly usernames should be avoided if possible.
### Assertions
@@ -97,16 +100,37 @@ Once you've set up your identity provider to work with GitLab, you'll need to co
## Providers
+NOTE: **Note:** GitLab is unable to provide support for IdPs that are not listed here.
+
| Provider | Documentation |
|----------|---------------|
| ADFS (Active Directory Federation Services) | [Create a Relying Party Trust](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/create-a-relying-party-trust) |
-| Azure | [Configuring single sign-on to applications](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-saas-custom-apps) |
+| Azure | [Configuring single sign-on to applications](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-single-sign-on-non-gallery-applications) |
| Auth0 | [Auth0 as Identity Provider](https://auth0.com/docs/protocols/saml/saml-idp-generic) |
| G Suite | [Set up your own custom SAML application](https://support.google.com/a/answer/6087519?hl=en) |
| JumpCloud | [Single Sign On (SSO) with GitLab](https://support.jumpcloud.com/customer/en/portal/articles/2810701-single-sign-on-sso-with-gitlab) |
-| Okta | [Setting up a SAML application in Okta](https://developer.okta.com/standards/SAML/setting_up_a_saml_application_in_okta) |
+| Okta | [Setting up a SAML application in Okta](https://developer.okta.com/docs/guides/saml-application-setup/overview/) |
| OneLogin | [Use the OneLogin SAML Test Connector](https://onelogin.service-now.com/support?id=kb_article&sys_id=93f95543db109700d5505eea4b96198f) |
-| Ping Identity | [Add and configure a new SAML application](https://docs.pingidentity.com/bundle/p1_enterpriseConfigSsoSaml_cas/page/enableAppWithoutURL.html) |
+| Ping Identity | [Add and configure a new SAML application](https://support.pingidentity.com/s/document-item?bundleId=pingone&topicId=xsh1564020480660-1.html) |
+
+When [configuring your identify provider](#configuring-your-identity-provider), please consider the notes below for specific providers to help avoid common issues and as a guide for terminology used.
+
+### OneLogin setup notes
+
+NOTE: **Note:**
+The GitLab app listed in the directory is for self-managed GitLab instances. Please use a generic SAML Test Connector.
+
+| GitLab Setting | OneLogin Field |
+|--------------|----------------|
+| Identifier | Audience |
+| Assertion consumer service URL | Recipient |
+| Assertion consumer service URL | ACS (Consumer) URL |
+| Assertion consumer service URL (escaped version) | ACS (Consumer) URL Validator |
+| GitLab single sign on URL | Login URL |
+
+Recommended `NameID` value: `OneLogin ID`.
+
+Set parameters according to the [assertions table](#assertions).
## Linking SAML to your existing GitLab.com account
@@ -148,14 +172,41 @@ For example, to unlink the `MyOrg` account, the following **Disconnect** button
| Issuer | How GitLab identifies itself to the identity provider. Also known as a "Relying party trust identifier". |
| Certificate fingerprint | Used to confirm that communications over SAML are secure by checking that the server is signing communications with the correct certificate. Also known as a certificate thumbprint. |
-<!-- ## Troubleshooting
+## Troubleshooting
+
+### SAML debugging tools
+
+SAML responses are base64 encoded, so we recommend the following browser plugins to decode them on the fly:
+
+- [SAML tracer for Firefox](https://addons.mozilla.org/en-US/firefox/addon/saml-tracer/)
+- [Chrome SAML Panel](https://chrome.google.com/webstore/detail/saml-chrome-panel/paijfdbeoenhembfhkhllainmocckace?hl=en)
+
+Specific attention should be paid to:
+
+- The [NameID](#nameid), which we use to identify which user is signing in. If the user has previously signed in, this [must match the value we have stored](#verifying-nameid).
+- The presence of a `X509Certificate`, which we require to verify the response signature.
+- The `SubjectConfirmation` and `Conditions`, which can cause errors if misconfigured.
+
+### Verifying NameID
+
+In troubleshooting the Group SAML setup, any authenticated user can use the API to verify the NameID GitLab already has linked to the user by visiting [https://gitlab.com/api/v4/user](https://gitlab.com/api/v4/user) and checking the `extern_uid` under identities.
+
+This can then be compared to the [NameID](#nameid) being sent by the Identity Provider by decoding the message with a [SAML debugging tool](#saml-debugging-tools). We require that these match in order to identify users.
+
+### Message: "SAML authentication failed: Extern uid has already been taken"
+
+This error suggests you are signed in as a GitLab user but have already linked your SAML identity to a different GitLab user. Sign out and then try to sign in again using the SSO SAML link, which should log you into GitLab with the linked user account.
+
+If you do not wish to use that GitLab user with the SAML login, you can [unlink the GitLab account from the group's SAML](#unlinking-accounts).
+
+### Message: "SAML authentication failed: User has already been taken"
+
+The user you are signed in with already has SAML linked to a different identity. This might mean you've attempted to link multiple SAML identities to the same user for a given Identity Provider. This could also be a symptom of the Identity Provider returning an inconsistent [NameID](#nameid).
+
+To change which identity you sign in with, you can [unlink the previous SAML identity](#unlinking-accounts) from this GitLab account.
+
+### Message: "SAML authentication failed: Extern uid has already been taken, User has already been taken"
-Include any troubleshooting steps that you can foresee. If you know beforehand what issues
-one might have when setting this up, or when something is changed, or on upgrading, it's
-important to describe those, too. Think of things that may go wrong and include them here.
-This is important to minimize requests for support, and to avoid doc comments with
-questions that you know someone might ask.
+Getting both of these errors at the same time suggests the NameID capitalization provided by the Identity Provider didn't exactly match the previous value for that user.
-Each scenario can be a third-level heading, e.g. `### Getting error message X`.
-If you have none to add when creating a doc, leave this section in place
-but commented out to help encourage others to add to it in the future. -->
+This can be prevented by configuring the [NameID](#nameid) to return a consistent value. Fixing this for an individual user involves [unlinking SAML in the GitLab account](#unlinking-accounts), although this will cause group membership and Todos to be lost.
diff --git a/doc/user/group/subgroups/index.md b/doc/user/group/subgroups/index.md
index eec929e3309..a3606fadb89 100644
--- a/doc/user/group/subgroups/index.md
+++ b/doc/user/group/subgroups/index.md
@@ -4,8 +4,7 @@ type: reference, howto, concepts
# Subgroups
-NOTE: **Note:**
-[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/2772) in GitLab 9.0.
+>[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/2772) in GitLab 9.0.
Subgroups, also known as nested groups or hierarchical groups, allow you to have up to 20
levels of groups.
@@ -68,9 +67,9 @@ Another example of GitLab as a company would be the following:
The maximum subgroups a group can have, including the first one in the
hierarchy, is 21.
-Actions such as transferring or importing a project inside subgroups, work like
-when performing these actions the traditional way with the `group/project`
-structure.
+When performing actions such as transferring or importing a project between
+subgroups, the behavior is the same as when performing these actions at the
+`group/project` level.
## Creating a subgroup
@@ -117,6 +116,10 @@ When you add a member to a subgroup, they inherit the membership and permission
level from the parent group. This model allows access to nested groups if you
have membership in one of its parents.
+Jobs for pipelines in subgroups can use [Runners](../../../ci/runners/README.md) registered to the parent group. This means secrets configured for the parent group are available to subgroup jobs.
+
+In addition, maintainers of projects that belong to subgroups can see the details of Runners registered to parent groups.
+
The group permissions for a member can be changed only by Owners, and only on
the **Members** page of the group the member was added.
diff --git a/doc/user/img/markdown_audio.mp3 b/doc/user/img/markdown_audio.mp3
new file mode 100644
index 00000000000..8946c3b3b10
--- /dev/null
+++ b/doc/user/img/markdown_audio.mp3
Binary files differ
diff --git a/doc/user/index.md b/doc/user/index.md
index e1833cab6b8..ee5d4a0a07b 100644
--- a/doc/user/index.md
+++ b/doc/user/index.md
@@ -26,11 +26,11 @@ For more information, see [All GitLab Features](https://about.gitlab.com/feature
To get familiar with the concepts needed to develop code on GitLab, read the following articles:
-- [Demo: Mastering Code Review With GitLab](https://about.gitlab.com/2017/03/17/demo-mastering-code-review-with-gitlab/).
-- [GitLab Workflow: An Overview](https://about.gitlab.com/2016/10/25/gitlab-workflow-an-overview/#gitlab-workflow-use-case-scenario).
-- [Tutorial: It's all connected in GitLab](https://about.gitlab.com/2016/03/08/gitlab-tutorial-its-all-connected/): an overview on code collaboration with GitLab.
-- [Trends in Version Control Land: Microservices](https://about.gitlab.com/2016/08/16/trends-in-version-control-land-microservices/).
-- [Trends in Version Control Land: Innersourcing](https://about.gitlab.com/2016/07/07/trends-version-control-innersourcing/).
+- [Demo: Mastering Code Review With GitLab](https://about.gitlab.com/blog/2017/03/17/demo-mastering-code-review-with-gitlab/).
+- [GitLab Workflow: An Overview](https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/#gitlab-workflow-use-case-scenario).
+- [Tutorial: It's all connected in GitLab](https://about.gitlab.com/blog/2016/03/08/gitlab-tutorial-its-all-connected/): an overview on code collaboration with GitLab.
+- [Trends in Version Control Land: Microservices](https://about.gitlab.com/blog/2016/08/16/trends-in-version-control-land-microservices/).
+- [Trends in Version Control Land: Innersourcing](https://about.gitlab.com/blog/2016/07/07/trends-version-control-innersourcing/).
## Use cases
@@ -88,7 +88,7 @@ it all at once, from one single project.
Use built-in [GitLab CI/CD](../ci/README.md) to test, build, and deploy your applications
directly from GitLab. No third-party integrations needed.
-- [GitLab Auto Deploy](../ci/autodeploy/index.md): Deploy your application out-of-the-box with GitLab Auto Deploy.
+- [GitLab Auto Deploy](../topics/autodevops/index.md#auto-deploy): Deploy your application out-of-the-box with GitLab Auto Deploy.
- [Review Apps](../ci/review_apps/index.md): Live-preview the changes introduced by a merge request with Review Apps.
- [GitLab Pages](project/pages/index.md): Publish your static site directly from
GitLab with GitLab Pages. You can build, test, and deploy any Static Site Generator with Pages.
diff --git a/doc/user/instance/clusters/index.md b/doc/user/instance/clusters/index.md
index 56693a1db1f..3d9a1eb219e 100644
--- a/doc/user/instance/clusters/index.md
+++ b/doc/user/instance/clusters/index.md
@@ -20,3 +20,9 @@ GitLab will try match to clusters in the following order:
To be selected, the cluster must be enabled and
match the [environment selector](../../../ci/environments.md#scoping-environments-with-specs).
+
+## Cluster environments **(PREMIUM)**
+
+For a consolidated view of which CI [environments](../../../ci/environments.md)
+are deployed to the Kubernetes cluster, see the documentation for
+[cluster environments](../../clusters/environments.md).
diff --git a/doc/user/markdown.md b/doc/user/markdown.md
index 3f77431aa69..0b4bb43b4bf 100644
--- a/doc/user/markdown.md
+++ b/doc/user/markdown.md
@@ -14,7 +14,7 @@ NOTE: **Note:** We encourage you to view this document as [rendered by GitLab it
GitLab uses "GitLab Flavored Markdown" (GFM). It extends the [CommonMark specification](https://spec.commonmark.org/current/)
(which is based on standard Markdown) in several ways to add additional useful functionality.
-It was inspired by [GitHub Flavored Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/).
+It was inspired by [GitHub Flavored Markdown](https://help.github.com/en/articles/basic-writing-and-formatting-syntax).
You can use GFM in the following areas:
@@ -108,7 +108,7 @@ changing how standard markdown is used:
| [code blocks](#code-spans-and-blocks) | [colored code and syntax highlighting](#colored-code-and-syntax-highlighting) |
| [emphasis](#emphasis) | [multiple underscores in words](#multiple-underscores-in-words-and-mid-word-emphasis)
| [headers](#headers) | [linkable Header IDs](#header-ids-and-links) |
-| [images](#images) | [embedded videos](#videos) |
+| [images](#images) | [embedded videos](#videos) and [audio](#audio) |
| [linebreaks](#line-breaks) | [more linebreak control](#newlines) |
| [links](#links) | [automatically linking URLs](#url-auto-linking) |
@@ -352,7 +352,7 @@ However the wrapping tags cannot be mixed:
> If this is not rendered correctly, [view it in GitLab itself](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#math).
-It is possible to have math written with LaTeX syntax rendered using [KaTeX](https://github.com/Khan/KaTeX).
+It is possible to have math written with LaTeX syntax rendered using [KaTeX](https://github.com/KaTeX/KaTeX).
Math written between dollar signs `$` will be rendered inline with the text. Math written
inside a [code block](#code-spans-and-blocks) with the language declared as `math`, will be rendered
@@ -379,7 +379,7 @@ a^2+b^2=c^2
_Be advised that KaTeX only supports a [subset](https://katex.org/docs/supported.html) of LaTeX._
NOTE: **Note:** This also works for the asciidoctor `:stem: latexmath`. For details see
-the [asciidoctor user manual](http://asciidoctor.org/docs/user-manual/#activating-stem-support).
+the [asciidoctor user manual](https://asciidoctor.org/docs/user-manual/#activating-stem-support).
### Special GitLab references
@@ -641,7 +641,7 @@ Tildes are OK too.
GitLab uses the [Rouge Ruby library](http://rouge.jneen.net/) for more colorful syntax
highlighting in code blocks. For a list of supported languages visit the
-[Rouge project wiki](https://github.com/jneen/rouge/wiki/List-of-supported-languages-and-lexers).
+[Rouge project wiki](https://github.com/rouge-ruby/rouge/wiki/List-of-supported-languages-and-lexers).
Syntax highlighting is only supported in code blocks, it is not possible to highlight
code when it is inline.
@@ -899,13 +899,30 @@ Here's a sample video:
![Sample Video](img/markdown_video.mp4)
+#### Audio
+
+> If this is not rendered correctly, [view it in GitLab itself](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#audio).
+
+Similar to videos, link tags for files with an audio extension are automatically converted to
+an audio player. The valid audio extensions are `.mp3`, `.ogg`, and `.wav`:
+
+```md
+Here's a sample audio clip:
+
+![Sample Audio](img/markdown_audio.mp3)
+```
+
+Here's a sample audio clip:
+
+![Sample Audio](img/markdown_audio.mp3)
+
### Inline HTML
> To see the markdown rendered within HTML in the second example, [view it in GitLab itself](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#inline-html).
You can also use raw HTML in your Markdown, and it'll usually work pretty well.
-See the documentation for HTML::Pipeline's [SanitizationFilter](http://www.rubydoc.info/gems/html-pipeline/1.11.0/HTML/Pipeline/SanitizationFilter#WHITELIST-constant)
+See the documentation for HTML::Pipeline's [SanitizationFilter](https://www.rubydoc.info/gems/html-pipeline/1.11.0/HTML/Pipeline/SanitizationFilter#WHITELIST-constant)
class for the list of allowed HTML tags and attributes. In addition to the default
`SanitizationFilter` whitelist, GitLab allows `span`, `abbr`, `details` and `summary` elements.
@@ -1109,8 +1126,8 @@ Using references:
Some text to show that the reference links can follow later.
-[arbitrary case-insensitive reference text]: https://www.mozilla.org
-[1]: http://slashdot.org
+[arbitrary case-insensitive reference text]: https://www.mozilla.org/en-US/
+[1]: https://slashdot.org
[link text itself]: https://www.reddit.com
```
@@ -1132,8 +1149,8 @@ Using references:
Some text to show that the reference links can follow later.
-[arbitrary case-insensitive reference text]: https://www.mozilla.org
-[1]: http://slashdot.org
+[arbitrary case-insensitive reference text]: https://www.mozilla.org/en-US/
+[1]: https://slashdot.org
[link text itself]: https://www.reddit.com
NOTE: **Note:** Relative links do not allow the referencing of project files in a wiki
@@ -1147,7 +1164,7 @@ GFM will autolink almost any URL you put into your text:
```markdown
- https://www.google.com
-- https://google.com/
+- https://www.google.com
- ftp://ftp.us.debian.org/debian/
- smb://foo/bar/baz
- irc://irc.freenode.net/
@@ -1155,7 +1172,7 @@ GFM will autolink almost any URL you put into your text:
```
- <https://www.google.com>
-- <https://google.com/>
+- <https://www.google.com>
- <ftp://ftp.us.debian.org/debian/>
- <smb://foo/bar/baz>
- <irc://irc.freenode.net/>
@@ -1305,7 +1322,7 @@ Example:
```markdown
| header 1 | header 2 | header 3 |
-| --- | ------ |----------|
+| --- | ------ |---------:|
| cell 1 | cell 2 | cell 3 |
| cell 4 | cell 5 is longer | cell 6 is much longer than the others, but that's ok. It will eventually wrap the text when the cell is too large for the display size. |
| cell 7 | | cell <br> 9 |
diff --git a/doc/user/packages/conan_repository/img/conan_package_view.png b/doc/user/packages/conan_repository/img/conan_package_view.png
new file mode 100644
index 00000000000..79a188d7856
--- /dev/null
+++ b/doc/user/packages/conan_repository/img/conan_package_view.png
Binary files differ
diff --git a/doc/user/packages/conan_repository/index.md b/doc/user/packages/conan_repository/index.md
new file mode 100644
index 00000000000..f81756f7979
--- /dev/null
+++ b/doc/user/packages/conan_repository/index.md
@@ -0,0 +1,135 @@
+# GitLab Conan Repository **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/8248) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.4.
+
+With the GitLab Conan Repository, every
+project can have its own space to store Conan packages.
+
+![GitLab Conan Repository](img/conan_package_view.png)
+
+## Enabling the Conan Repository
+
+NOTE: **Note:**
+This option is available only if your GitLab administrator has
+[enabled support for the Conan Repository](../../../administration/packages/index.md).**(PREMIUM ONLY)**
+
+After the Conan Repository is enabled, it will be available for all new projects
+by default. To enable it for existing projects, or if you want to disable it:
+
+1. Navigate to your project's **Settings > General > Permissions**.
+1. Find the Packages feature and enable or disable it.
+1. Click on **Save changes** for the changes to take effect.
+
+You should then be able to see the **Packages** section on the left sidebar.
+
+Before proceeding to authenticating with the GitLab Conan Repository, you should
+get familiar with the package naming convention.
+
+## Authenticating to the GitLab Conan Repository
+
+You will need to generate a [personal access token](../../../user/profile/personal_access_tokens.md) for repository authentication.
+
+Now you can run conan commands using your token.
+
+`CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan upload Hello/0.2@user/channel --remote=gitlab`
+`CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan search Hello* --all --remote=gitlab`
+
+Alternatively, you can set the `CONAN_LOGIN_USERNAME` and `CONAN_PASSWORD` in your local conan config to be used when connecting to the `gitlab` remote. The examples here show the username and password inline.
+
+Next, you'll need to set your Conan remote to point to the GitLab Package Registry.
+
+## Setting the Conan remote to the GitLab Package Registry
+
+After you authenticate to the [GitLab Conan Repository](#authenticating-to-the-gitlab-conan-repository),
+you can set the Conan remote:
+
+```sh
+conan remote add gitlab https://gitlab.example.com/api/v4/packages/conan
+```
+
+Once the remote is set, you can use the remote when running Conan commands:
+
+```sh
+conan search Hello* --all --remote=gitlab
+```
+
+## Supported CLI commands
+
+The GitLab Conan repository supports the following Conan CLI commands:
+
+- `conan upload`: Upload your recipe and package files to the GitLab Package Registry.
+- `conan install`: Install a conan package from the GitLab Package Registry, this includes using the `conan.txt` file.
+- `conan search`: Search the GitLab Package Registry for public packages, and private packages you have permission to view.
+- `conan info`: View the info on a given package from the GitLab Package Registry.
+- `conan remove`: Delete the package from the GitLab Package Registry.
+
+## Uploading a package
+
+First you need to [create your Conan package locally](https://docs.conan.io/en/latest/creating_packages/getting_started.html). In order to work with the GitLab Package Registry, a specific [naming convention](#package-recipe-naming-convention) must be followed.
+
+Ensure you have a project created on GitLab and that the personal access token you are using has the correct permissions for write access to the container registry by selecting the `api` [scope](../../../user/profile/personal_access_tokens.md#limiting-scopes-of-a-personal-access-token).
+
+You can upload your package to the GitLab Package Registry using the `conan upload` command:
+
+```sh
+CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan upload Hello/0.1@my-group+my-project/beta --all --remote=gitlab
+```
+
+### Package recipe naming convention
+
+Standard Conan recipe convention looks like `package_name/version@username/channel`.
+
+**Recipe usernames must be the `+` separated project path**. The package
+name may be anything, but it is preferred that the project name be used unless
+it is not possible due to a naming collision. For example:
+
+| Project | Package | Supported |
+| ---------------------------------- | ----------------------------------------------- | --------- |
+| `foo/bar` | `my-package/1.0.0@foo+bar/stable` | Yes |
+| `foo/bar-baz/buz` | `my-package/1.0.0@foo+bar-baz+buz/stable` | Yes |
+| `gitlab-org/gitlab-ce` | `my-package/1.0.0@gitlab-org+gitlab-ce/stable` | Yes |
+| `gitlab-org/gitlab-ce` | `my-package/1.0.0@foo/stable` | No |
+
+NOTE: **Note:**
+A future iteration will extend support to [project and group level](https://gitlab.com/gitlab-org/gitlab/issues/11679) remotes which will allow for more flexible naming conventions.
+
+## Installing a package
+
+Add the conan package to the `[requires]` section of your `conan.txt` file and they will be installed when you run `conan install` within your project.
+
+## Removing a package
+
+There are two ways to remove a Conan package from the GitLab Package Registry.
+
+- **Using the Conan client in the command line:**
+
+ ```sh
+ CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan remove Hello/0.2@user/channel -r gitlab
+ ```
+
+ NOTE: **Note:**
+ This command will remove all recipe and binary package files from the Package Registry.
+
+- **GitLab project interface**: in the packages view of your project page, you can delete packages by clicking the red trash icons.
+
+## Searching the GitLab Package Registry for Conan packages
+
+The `conan search` command can be run searching by full or partial package name, or by exact recipe.
+
+To search using a partial name, use the wildcard symbol `*`, which should be placed at the end of your search (e.g., `my-packa*`):
+
+```sh
+CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan search Hello --all --remote=gitlab
+CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan search He* --all --remote=gitlab
+CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan search Hello/1.0.0@my-group+my-project/stable --all --remote=gitlab
+```
+
+The scope of your search will include all projects you have permission to access, this includes your private projects as well as all public projects.
+
+## Fetching Conan package info from the GitLab Package Registry
+
+The `conan info` command will return info about a given package:
+
+```sh
+CONAN_LOGIN_USERNAME=<gitlab-username> CONAN_PASSWORD=<personal_access_token> conan info Hello/1.0.0@my-group+my-project/stable -r gitlab
+```
diff --git a/doc/user/packages/index.md b/doc/user/packages/index.md
index 506eb5703a6..9873bd80e8b 100644
--- a/doc/user/packages/index.md
+++ b/doc/user/packages/index.md
@@ -10,6 +10,7 @@ The Packages feature allows GitLab to act as a repository for the following:
| ------------------- | ----------- | --------------------------- |
| [Container Registry](container_registry/index.md) | The GitLab Container Registry enables every project in GitLab to have its own space to store [Docker](https://www.docker.com/) images. | 8.8+ |
| [Dependency Proxy](dependency_proxy/index.md) **(PREMIUM)** | The GitLab Dependency Proxy sets up a local proxy for frequently used upstream images/packages. | 11.11+ |
+| [Conan Repository](conan_repository/index.md) **(PREMIUM)** | The GitLab Conan Repository enables every project in GitLab to have its own space to store [Conan](https://conan.io/) packages. | 12.4+ |
| [Maven Repository](maven_repository/index.md) **(PREMIUM)** | The GitLab Maven Repository enables every project in GitLab to have its own space to store [Maven](https://maven.apache.org/) packages. | 11.3+ |
| [NPM Registry](npm_registry/index.md) **(PREMIUM)** | The GitLab NPM Registry enables every project in GitLab to have its own space to store [NPM](https://www.npmjs.com/) packages. | 11.7+ |
diff --git a/doc/user/packages/maven_repository/index.md b/doc/user/packages/maven_repository/index.md
index 0c0b44b3cd8..8ed10c09891 100644
--- a/doc/user/packages/maven_repository/index.md
+++ b/doc/user/packages/maven_repository/index.md
@@ -170,7 +170,7 @@ the `distributionManagement` section:
<repositories>
<repository>
<id>gitlab-maven</id>
- <url>https://gitlab.com/api/v4/groups/my-group/-/packages/maven</url>
+ <url>https://gitlab.com/api/v4/groups/GROUP_ID/-/packages/maven</url>
</repository>
</repositories>
<distributionManagement>
diff --git a/doc/user/packages/npm_registry/index.md b/doc/user/packages/npm_registry/index.md
index 6d11ab603ef..5f5d86ab17e 100644
--- a/doc/user/packages/npm_registry/index.md
+++ b/doc/user/packages/npm_registry/index.md
@@ -84,6 +84,28 @@ NOTE: **Note:**
If you encounter an error message with [Yarn](https://yarnpkg.com/en/), see the
[troubleshooting section](#troubleshooting).
+### Using variables to avoid hard-coding auth token values
+
+To avoid hard-coding the `authToken` value, you may use a variables in its place.
+In your `.npmrc` file, you would add:
+
+```ini
+@foo:registry=https://gitlab.com/api/v4/packages/npm/
+//gitlab.com/api/v4/packages/npm/:_authToken=${NPM_TOKEN}
+//gitlab.com/api/v4/projects/<your_project_id>/packages/npm/:_authToken=${NPM_TOKEN}
+```
+
+Then, you could run `npm publish` either locally or via GitLab CI/CD:
+
+- **Locally:** Export `NPM_TOKEN` before publishing:
+
+ ```sh
+ NPM_TOKEN=<your_token> npm publish
+ ```
+
+- **GitLab CI/CD:** Set an `NPM_TOKEN` [variable](../../../ci/variables/README.md)
+ under your project's **Settings > CI/CD > Variables**.
+
## Uploading packages
Before you will be able to upload a package, you need to specify the registry
@@ -145,3 +167,29 @@ with your with your OAuth or personal access token):
```text
//gitlab.com/api/v4/projects/:_authToken=<your_oauth_token>
```
+
+### `npm publish` targets default NPM registry (`registry.npmjs.org`)
+
+Ensure that your package scope is set consistently in your `package.json` and `.npmrc` files.
+
+For example, if your project name in GitLab is `foo/my-package`, then your `package.json` file
+should look like:
+
+```json
+{
+ "name": "@foo/my-package",
+ "version": "1.0.0",
+ "description": "Example package for GitLab NPM registry",
+ "publishConfig": {
+ "@foo:registry":"https://gitlab.com/api/v4/projects/<your_project_id>/packages/npm/"
+ }
+}
+```
+
+And the `.npmrc` file should look like:
+
+```ini
+//gitlab.com/api/v4/projects/<your_project_id>/packages/npm/:_authToken=<your_oauth_token>
+//gitlab.com/api/v4/packages/npm/:_authToken=<your_oauth_token>
+@foo:registry=https://gitlab.com/api/v4/packages/npm/
+```
diff --git a/doc/user/permissions.md b/doc/user/permissions.md
index 4f660d07071..90874eca2eb 100644
--- a/doc/user/permissions.md
+++ b/doc/user/permissions.md
@@ -24,7 +24,7 @@ For information on eligible approvers for Merge Requests, see
## Principles behind permissions
-See our [product handbook on permissions](https://about.gitlab.com/handbook/product#permissions-in-gitlab)
+See our [product handbook on permissions](https://about.gitlab.com/handbook/product/#permissions-in-gitlab)
## Instance-wide user permissions
@@ -48,13 +48,13 @@ The following table depicts the various user permission levels in a project.
| View Insights charts **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| View approved/blacklisted licenses **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| View License Compliance reports **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| View Security reports **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
+| View Security reports **(ULTIMATE)** | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
| View Dependency list **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| View licenses in Dependency list **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| View [Design Management](project/issues/design_management.md) pages **(PREMIUM)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| View project code | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| Pull project code | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| View GitLab Pages protected by [access control](project/pages/introduction.md#gitlab-pages-access-control-core-only) | ✓ | ✓ | ✓ | ✓ | ✓ |
+| View GitLab Pages protected by [access control](project/pages/introduction.md#gitlab-pages-access-control-core) | ✓ | ✓ | ✓ | ✓ | ✓ |
| View wiki pages | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| See a list of jobs | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
| See a job log | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
@@ -76,8 +76,8 @@ The following table depicts the various user permission levels in a project.
| See a list of merge requests | | ✓ | ✓ | ✓ | ✓ |
| View project statistics | | ✓ | ✓ | ✓ | ✓ |
| View Error Tracking list | | ✓ | ✓ | ✓ | ✓ |
-| Pull from [Maven repository](packages/maven_repository/index.md) or [NPM registry](packages/npm_registry/index.md) **(PREMIUM)** | | ✓ | ✓ | ✓ | ✓ |
-| Publish to [Maven repository](packages/maven_repository/index.md) or [NPM registry](packages/npm_registry/index.md) **(PREMIUM)** | | | ✓ | ✓ | ✓ |
+| Pull from [Conan repository](packages/conan_repository/index.md), [Maven repository](packages/maven_repository/index.md), or [NPM registry](packages/npm_registry/index.md) **(PREMIUM)** | | ✓ | ✓ | ✓ | ✓ |
+| Publish to [Conan repository](packages/conan_repository/index.md), [Maven repository](packages/maven_repository/index.md), or [NPM registry](packages/npm_registry/index.md) **(PREMIUM)** | | | ✓ | ✓ | ✓ |
| Upload [Design Management](project/issues/design_management.md) files **(PREMIUM)** | | | ✓ | ✓ | ✓ |
| Create new branches | | | ✓ | ✓ | ✓ |
| Push to non-protected branches | | | ✓ | ✓ | ✓ |
@@ -125,6 +125,7 @@ The following table depicts the various user permission levels in a project.
| Manage Error Tracking | | | | ✓ | ✓ |
| Delete wiki pages | | | | ✓ | ✓ |
| View project Audit Events | | | | ✓ | ✓ |
+| Manage [push rules](../push_rules/push_rules.md) | | | | ✓ | ✓ |
| Switch visibility level | | | | | ✓ |
| Transfer project to another namespace | | | | | ✓ |
| Remove project | | | | | ✓ |
@@ -133,10 +134,10 @@ The following table depicts the various user permission levels in a project.
| Force push to protected branches (*4*) | | | | | |
| Remove protected branches (*4*) | | | | | |
-- (*1*): All users are able to perform this action on public and internal projects, but not private projects.
+- (*1*): Guest users are able to perform this action on public and internal projects, but not private projects.
- (*2*): Guest users can only view the confidential issues they created themselves
- (*3*): If **Public pipelines** is enabled in **Project Settings > CI/CD**
-- (*4*): Not allowed for Guest, Reporter, Developer, Maintainer, or Owner
+- (*4*): Not allowed for Guest, Reporter, Developer, Maintainer, or Owner. See [Protected Branches](./project/protected_branches.md).
## Project features permissions
@@ -210,7 +211,7 @@ group.
| View group epic **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| Create/edit group epic **(ULTIMATE)** | | ✓ | ✓ | ✓ | ✓ |
| Manage group labels | | ✓ | ✓ | ✓ | ✓ |
-| Create project in group | | | ✓ | ✓ | ✓ |
+| Create project in group | | | ✓ (3) | ✓ (3) | ✓ (3) |
| Create/edit/delete group milestones | | | ✓ | ✓ | ✓ |
| Enable/disable a dependency proxy **(PREMIUM)** | | | ✓ | ✓ | ✓ |
| Use security dashboard **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
@@ -222,10 +223,14 @@ group.
| Edit epic comments (posted by any user) **(ULTIMATE)** | | | | ✓ (2) | ✓ (2) |
| View group Audit Events | | | | | ✓ |
| Disable notification emails | | | | | ✓ |
+| View/manage group-level Kubernetes cluster | | | | ✓ | ✓ |
- (1): Groups can be set to [allow either Owners or Owners and
Maintainers to create subgroups](group/subgroups/index.md#creating-a-subgroup)
- (2): Introduced in GitLab 12.2.
+- (3): Default project creation role can be changed at:
+ - The [instance level](admin_area/settings/visibility_and_access_controls.md#default-project-creation-protection).
+ - The [group level](group/index.html#default-project-creation-level).
### Subgroup permissions
@@ -236,57 +241,83 @@ nested groups if you have membership in one of its parents.
To learn more, read through the documentation on
[subgroups memberships](group/subgroups/index.md#membership).
-## Guest User
-
-When a user is given `Guest` permissions on a project and/or group, and holds no
-higher permission level on any other project or group on the instance, the user
-is considered a guest user by GitLab and will not consume a license seat.
-There is no other specific "guest" designation for newly created users.
-
-If the user is assigned a higher role on any projects or groups, the user will
-take a license seat. If a user creates a project, the user becomes a `Maintainer`
-on the project, resulting in the use of a license seat. To prevent a guest user
-from creating projects, you can edit the user profile to mark the user as
-[External](#external-users-permissions).
-
-## External users permissions
+## External users **(CORE ONLY)**
In cases where it is desired that a user has access only to some internal or
private projects, there is the option of creating **External Users**. This
feature may be useful when for example a contractor is working on a given
project and should only have access to that project.
-External users can only access projects to which they are explicitly granted
-access, thus hiding all other internal or private ones from them. Access can be
-granted by adding the user as member to the project or group.
+External users:
+
+- Cannot create groups or projects.
+- Can only access projects to which they are explicitly granted access,
+ thus hiding all other internal or private ones from them (like being
+ logged out).
+Access can be granted by adding the user as member to the project or group.
They will, like usual users, receive a role in the project or group with all
-the abilities that are mentioned in the table above. They cannot however create
-groups or projects, and they have the same access as logged out users in all
-other cases.
+the abilities that are mentioned in the [permissions table above](#project-members-permissions).
+For example, if an external user is added as Guest, and your project is
+private, they will not have access to the code; you would need to grant the external
+user access at the Reporter level or above if you want them to have access to the code. You should
+always take into account the
+[project's visibility and permissions settings](project/settings/index.md#sharing-and-permissions)
+as well as the permission level of the user.
-An administrator can flag a user as external [through the API](../api/users.md)
-or by checking the checkbox on the admin panel. As an administrator, navigate
-to **Admin > Users** to create a new user or edit an existing one. There, you
-will find the option to flag the user as external.
+NOTE: **Note:**
+External users still count towards a license seat.
+
+An administrator can flag a user as external by either of the following methods:
+
+- Either [through the API](../api/users.md#user-modification).
+- Or by navigating to the **Admin area > Overview > Users** to create a new user
+ or edit an existing one. There, you will find the option to flag the user as
+ external.
-By default new users are not set as external users. This behavior can be changed
-by an administrator under **Admin > Application Settings**.
+### Setting new users to external
-### Default internal users
+By default, new users are not set as external users. This behavior can be changed
+by an administrator under the **Admin Area > Settings > General > Account and limit** page.
-The "Internal users" field allows specifying an e-mail address regex pattern to identify default internal users.
+If you change the default behavior of creating new users as external, you will
+have the option to narrow it down by defining a set of internal users.
+The **Internal users** field allows specifying an email address regex pattern to
+identify default internal users. New users whose email address matches the regex
+pattern will be set to internal by default rather than an external collaborator.
-New users whose email address matches the regex pattern will be set to internal by default rather than an external collaborator.
+The regex pattern format is Ruby, but it needs to be convertible to JavaScript,
+and the ignore case flag will be set (`/regex pattern/i`). Here are some examples:
-The regex pattern format is Ruby, but it needs to be convertible to JavaScript, and the ignore case flag will be set, e.g. "/regex pattern/i".
+- Use `\.internal@domain\.com$` to mark email addresses ending with
+ `.internal@domain.com` as internal.
+- Use `^(?:(?!\.ext@domain\.com).)*$\r?` to mark users with email addresses
+ NOT including `.ext@domain.com` as internal.
-Here are some examples:
+CAUTION: **Warning:**
+Be aware that this regex could lead to a
+[regular expression denial of service (ReDoS) attack](https://en.wikipedia.org/wiki/ReDoS).
-- Use `\.internal@domain\.com$` to mark email addresses ending with ".internal@domain.com" internal.
-- Use `^(?:(?!\.ext@domain\.com).)*$\r?` to mark users with email addresses NOT including .ext@domain.com internal.
+## Free Guest users **(ULTIMATE)**
-Please be aware that this regex could lead to a DOS attack, [see](https://en.wikipedia.org/wiki/ReDoS?) ReDos on Wikipedia.
+When a user is given Guest permissions on a project, group, or both, and holds no
+higher permission level on any other project or group on the GitLab instance,
+the user is considered a guest user by GitLab and will not consume a license seat.
+There is no other specific "guest" designation for newly created users.
+
+If the user is assigned a higher role on any projects or groups, the user will
+take a license seat. If a user creates a project, the user becomes a Maintainer
+on the project, resulting in the use of a license seat. Also, note that if your
+project is internal or private, Guest users will have all the abilities that are
+mentioned in the [permissions table above](#project-members-permissions) (they
+will not be able to browse the project's repository for example).
+
+TIP: **Tip:**
+To prevent a guest user from creating projects, as an admin, you can edit the
+user's profile to mark the user as [external](#external-users-core-only).
+Beware though that even if a user is external, if they already have Reporter or
+higher permissions in any project or group, they will **not** be counted as a
+free guest user.
## Auditor users **(PREMIUM ONLY)**
diff --git a/doc/user/profile/account/delete_account.md b/doc/user/profile/account/delete_account.md
index 9b72956a55e..65896bd19cd 100644
--- a/doc/user/profile/account/delete_account.md
+++ b/doc/user/profile/account/delete_account.md
@@ -42,6 +42,53 @@ a user can be blocked directly from the Admin area. To do this:
1. Selecting a user.
1. Under the **Account** tab, click **Block user**.
+### Deactivating a user
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/63921) in GitLab 12.4.
+
+A user can be deactivated from the Admin area. Deactivating a user is functionally identical to blocking a user, with the following differences:
+
+- It does not prohibit the user from logging back in via the UI.
+- Once a deactivated user logs back into the GitLab UI, their account is set to active.
+
+A deactivated user:
+
+- Cannot access Git repositories or the API.
+- Will not receive any notifications from GitLab.
+- Will not be able to use [slash commands](../../../integration/slash_commands.md).
+
+Personal projects, group and user history of the deactivated user will be left intact.
+
+NOTE: **Note:**
+A deactivated user does not consume a [seat](../../../subscriptions/index.md#managing-subscriptions).
+
+To do this:
+
+1. Navigate to **Admin Area > Overview > Users**.
+1. Select a user.
+1. Under the **Account** tab, click **Deactivate user**.
+
+Please note that for the deactivation option to be visible to an admin, the user:
+
+- Must be currently active.
+- Should not have any activity in the last 14 days.
+
+### Activating a user
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/63921) in GitLab 12.4.
+
+A deactivated user can be activated from the Admin area. Activating a user sets their account to active state.
+
+To do this:
+
+1. Navigate to **Admin Area > Overview > Users**.
+1. Click on the **Deactivated** tab.
+1. Select a user.
+1. Under the **Account** tab, click **Activate user**.
+
+TIP: **Tip:**
+A deactivated user can also activate their account by themselves by simply logging back via the UI.
+
## Associated Records
> - Introduced for issues in
diff --git a/doc/user/profile/account/two_factor_authentication.md b/doc/user/profile/account/two_factor_authentication.md
index f7ba921aa7d..108d4f0b387 100644
--- a/doc/user/profile/account/two_factor_authentication.md
+++ b/doc/user/profile/account/two_factor_authentication.md
@@ -107,7 +107,7 @@ prompted to download a set of set recovery codes. Should you ever lose access
to your one time password authenticator, you can use one of them to log in to
your account. We suggest copying them, printing them, or downloading them using
the **Download codes** button for storage in a safe place. If you choose to
-download them, the file will be called **gitlab-recovery-codes.txt**.
+download them, the file will be called `gitlab-recovery-codes.txt`.
If you lose the recovery codes or just want to generate new ones, you can do so
[using SSH](#generate-new-recovery-codes-using-ssh).
@@ -244,6 +244,12 @@ Sign in and re-enable two-factor authentication as soon as possible.
- The user logs out and attempts to log in via `second.host.xyz` - U2F authentication fails, because
the U2F key has only been registered on `first.host.xyz`.
+## Troubleshooting
+
+If you are receiving an `invalid pin code` error, this may indicate that there is a time sync issue between the authentication application and the GitLab instance itself.
+
+Most authentication apps have a feature in the settings for syncing the time for the codes themselves. For Google Authenticator for example, go to `Settings > Time correction for codes`.
+
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
diff --git a/doc/user/profile/personal_access_tokens.md b/doc/user/profile/personal_access_tokens.md
index 4c99d58e51d..980a7d5968d 100644
--- a/doc/user/profile/personal_access_tokens.md
+++ b/doc/user/profile/personal_access_tokens.md
@@ -47,8 +47,8 @@ the following table.
| `api` | [GitLab 8.15](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/5951) | Grants complete read/write access to the API, including all groups and projects, the container registry, and the package registry. |
| `read_registry` | [GitLab 9.3](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/11845) | Allows to read (pull) [container registry] images if a project is private and authorization is required. |
| `sudo` | [GitLab 10.2](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14838) | Allows performing API actions as any user in the system (if the authenticated user is an admin). |
-| `read_repository` | [GitLab 10.7](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/17894) | Allows read-only access (pull) to the repository through git clone. |
-| `write_repository` | [GitLab 11.11](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/26021) | Allows read-write access (pull, push) to the repository through git clone. Required for accessing Git repositories over HTTP when 2FA is enabled. |
+| `read_repository` | [GitLab 10.7](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/17894) | Allows read-only access (pull) to the repository through `git clone`. |
+| `write_repository` | [GitLab 11.11](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/26021) | Allows read-write access (pull, push) to the repository through `git clone`. Required for accessing Git repositories over HTTP when 2FA is enabled. |
[2fa]: ../account/two_factor_authentication.md
[api]: ../../api/README.md
diff --git a/doc/user/project/canary_deployments.md b/doc/user/project/canary_deployments.md
index 95ed511d0b3..3a19c29b241 100644
--- a/doc/user/project/canary_deployments.md
+++ b/doc/user/project/canary_deployments.md
@@ -44,7 +44,7 @@ Canary deployments require that you properly configure Deploy Boards:
1. Follow the steps to [enable Deploy Boards](deploy_boards.md#enabling-deploy-boards).
1. To track canary deployments you need to label your Kubernetes deployments and
- pods with `track: canary`. To get started quickly, you can use the [Auto Deploy](../../ci/autodeploy/index.md)
+ pods with `track: canary`. To get started quickly, you can use the [Auto Deploy](../../topics/autodevops/index.md#auto-deploy)
template for canary deployments that GitLab provides.
Depending on the deploy, the label should be either `stable` or `canary`.
@@ -66,5 +66,5 @@ can easily notice them.
[ee-1659]: https://gitlab.com/gitlab-org/gitlab/issues/1659
[kube-canary]: https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments
[deploy board]: deploy_boards.md
-[cd-blog]: https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/
+[cd-blog]: https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/
[kube-net]: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
diff --git a/doc/user/project/clusters/eks_and_gitlab/index.md b/doc/user/project/clusters/eks_and_gitlab/index.md
index 28f3420de35..22576b84926 100644
--- a/doc/user/project/clusters/eks_and_gitlab/index.md
+++ b/doc/user/project/clusters/eks_and_gitlab/index.md
@@ -192,7 +192,7 @@ deployment of the other applications.
Next, if you would like the deployed app to be reachable on the internet, deploy
the Ingress. Note that this will also cause an
-[Elastic Load Balancer](https://aws.amazon.com/documentation/elastic-load-balancing/)
+[Elastic Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/)
to be created, which will incur additional AWS costs.
Once installed, you may see a `?` for "Ingress IP Address". This is because the
diff --git a/doc/user/project/clusters/img/kubernetes_pod_logs.png b/doc/user/project/clusters/img/kubernetes_pod_logs.png
deleted file mode 100644
index e664a47386a..00000000000
--- a/doc/user/project/clusters/img/kubernetes_pod_logs.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/clusters/img/kubernetes_pod_logs_v12_4.png b/doc/user/project/clusters/img/kubernetes_pod_logs_v12_4.png
new file mode 100644
index 00000000000..73c2ecd182a
--- /dev/null
+++ b/doc/user/project/clusters/img/kubernetes_pod_logs_v12_4.png
Binary files differ
diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md
index 97fa973d3e3..9ecb785d6fe 100644
--- a/doc/user/project/clusters/index.md
+++ b/doc/user/project/clusters/index.md
@@ -61,7 +61,7 @@ GitLab makes it easy to view the logs of running pods in connected Kubernetes cl
### Kubernetes monitoring
Automatically detect and monitor Kubernetes metrics. Automatic monitoring of
-[NGINX ingress](../integrations/prometheus_library/nginx.md) is also supported.
+[NGINX Ingress](../integrations/prometheus_library/nginx.md) is also supported.
[Read more about Kubernetes monitoring](../integrations/prometheus_library/kubernetes.md)
@@ -112,7 +112,7 @@ There are two options when adding a new cluster to your project:
TIP: **Tip:**
Every new Google Cloud Platform (GCP) account receives [$300 in credit upon sign up](https://console.cloud.google.com/freetrial),
and in partnership with Google, GitLab is able to offer an additional $200 for new GCP accounts to get started with GitLab's
-Google Kubernetes Engine Integration. All you have to do is [follow this link](https://goo.gl/AaJzRW) and apply for credit.
+Google Kubernetes Engine Integration. All you have to do is [follow this link](https://cloud.google.com/partners/partnercredit/?PCN=a0n60000006Vpz4AAC) and apply for credit.
NOTE: **Note:**
The [Google authentication integration](../../../integration/google.md) must
@@ -154,6 +154,7 @@ new Kubernetes cluster to your project:
- **Number of nodes** - Enter the number of nodes you wish the cluster to have.
- **Machine type** - The [machine type](https://cloud.google.com/compute/docs/machine-types)
of the Virtual Machine instance that the cluster will be based on.
+ - **Enable Cloud Run on GKE (beta)** - Check this if you want to use Cloud Run on GKE for this cluster. See the [Cloud Run on GKE section](#cloud-run-on-gke) for more information.
- **GitLab-managed cluster** - Leave this checked if you want GitLab to manage namespaces and service accounts for this cluster. See the [Managed clusters section](#gitlab-managed-clusters) for more information.
1. Finally, click the **Create Kubernetes cluster** button.
@@ -339,6 +340,15 @@ functionalities needed to successfully build and deploy a containerized
application. Bear in mind that the same credentials are used for all the
applications running on the cluster.
+### Cloud Run on GKE
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/16566) in GitLab 12.4.
+
+You can choose to use Cloud Run on GKE in place of installing Knative and Istio
+separately after the cluster has been created. This means that Cloud Run
+(Knative), Istio, and HTTP Load Balancing will be enabled on the cluster at
+create time and cannot be [installed or uninstalled](../../clusters/applications.md) separately.
+
### GitLab-managed clusters
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/22011) in GitLab 11.5.
@@ -370,7 +380,7 @@ Specifying a base domain will automatically set `KUBE_INGRESS_BASE_DOMAIN` as an
If you are using [Auto DevOps](../../../topics/autodevops/index.md), this domain will be used for the different
stages. For example, Auto Review Apps and Auto Deploy.
-The domain should have a wildcard DNS configured to the Ingress IP address. After ingress has been installed (see [Installing Applications](#installing-applications)),
+The domain should have a wildcard DNS configured to the Ingress IP address. After Ingress has been installed (see [Installing Applications](#installing-applications)),
you can either:
- Create an `A` record that points to the Ingress IP address with your domain provider.
@@ -380,8 +390,8 @@ you can either:
When creating a cluster in GitLab, you will be asked if you would like to create either:
-- An [Attribute-based access control (ABAC)](https://kubernetes.io/docs/admin/authorization/abac/) cluster.
-- A [Role-based access control (RBAC)](https://kubernetes.io/docs/admin/authorization/rbac/) cluster.
+- An [Attribute-based access control (ABAC)](https://kubernetes.io/docs/reference/access-authn-authz/abac/) cluster.
+- A [Role-based access control (RBAC)](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) cluster.
NOTE: **Note:**
[RBAC](#rbac-cluster-resources) is recommended and the GitLab default.
@@ -538,7 +548,7 @@ differentiate the new cluster with the rest.
GitLab can install and manage some applications in your project-level
cluster. For more information on installing, upgrading, uninstalling,
and troubleshooting applications for your project cluster, see
-[Gitlab Managed Apps](../../clusters/applications.md).
+[GitLab Managed Apps](../../clusters/applications.md).
### Getting the external endpoint
@@ -555,7 +565,7 @@ address or a hostname associated with your load balancer.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/17052) in GitLab 10.6.
-After you install [Ingress or Knative](#installing-applications), Gitlab attempts to determine the external endpoint
+After you install [Ingress or Knative](#installing-applications), GitLab attempts to determine the external endpoint
and it should be available within a few minutes. If the endpoint doesn't appear
and your cluster runs on Google Kubernetes Engine:
diff --git a/doc/user/project/clusters/kubernetes_pod_logs.md b/doc/user/project/clusters/kubernetes_pod_logs.md
index 82f658ce724..4036eaf0bfb 100644
--- a/doc/user/project/clusters/kubernetes_pod_logs.md
+++ b/doc/user/project/clusters/kubernetes_pod_logs.md
@@ -17,8 +17,14 @@ Everything you need to build, test, deploy, and run your app at scale.
1. On the **Environments** page, you should see the status of the environment's pods with [Deploy Boards](../deploy_boards.md).
1. When mousing over the list of pods, a tooltip will appear with the exact pod name and status.
![Deploy Boards pod list](img/pod_logs_deploy_board.png)
-1. Click on the desired pod to bring up the logs view, which will contain the last 500 lines for that pod. Support for pods with multiple containers is coming [in a future release](https://gitlab.com/gitlab-org/gitlab/issues/6502).
- ![Deploy Boards pod list](img/kubernetes_pod_logs.png)
+1. Click on the desired pod to bring up the logs view, which will contain the last 500 lines for that pod.
+ You may switch between the following in this view:
+ - Pods.
+ - [From GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/issues/5769), environments.
+
+ Support for pods with multiple containers is coming [in a future release](https://gitlab.com/gitlab-org/gitlab/issues/6502).
+
+ ![Deploy Boards pod list](img/kubernetes_pod_logs_v12_4.png)
## Requirements
diff --git a/doc/user/project/clusters/runbooks/index.md b/doc/user/project/clusters/runbooks/index.md
index 7e5c1b3d4ed..7b17ec68234 100644
--- a/doc/user/project/clusters/runbooks/index.md
+++ b/doc/user/project/clusters/runbooks/index.md
@@ -38,7 +38,7 @@ To create an executable runbook, you will need:
The simplest way to get started is to add a cluster using [GitLab's GKE integration](../index.md#add-new-gke-cluster).
1. **Helm Tiller** - Helm is a package manager for Kubernetes and is required to install
all the other applications. It is installed in its own pod inside the cluster which
- can run the helm CLI in a safe environment.
+ can run the Helm CLI in a safe environment.
1. **Ingress** - Ingress can provide load balancing, SSL termination, and name-based
virtual hosting. It acts as a web proxy for your applications.
1. **JupyterHub** - [JupyterHub](https://jupyterhub.readthedocs.io/) is a multi-user service for managing notebooks across
@@ -48,9 +48,9 @@ To create an executable runbook, you will need:
## Nurtch
Nurtch is the company behind the [Rubix library](https://github.com/Nurtch/rubix). Rubix is
-an open-source python library that makes it easy to perform common DevOps tasks inside Jupyter Notebooks.
+an open-source Python library that makes it easy to perform common DevOps tasks inside Jupyter Notebooks.
Tasks such as plotting Cloudwatch metrics and rolling your ECS/Kubernetes app are simplified
-down to a couple of lines of code. See the [Nurtch Documentation](http://docs.nurtch.com/en/latest)
+down to a couple of lines of code. See the [Nurtch Documentation](http://docs.nurtch.com/en/latest/)
for more information.
## Configure an executable runbook with GitLab
diff --git a/doc/user/project/clusters/serverless/index.md b/doc/user/project/clusters/serverless/index.md
index 5d91b01e5b0..9a9857bd5da 100644
--- a/doc/user/project/clusters/serverless/index.md
+++ b/doc/user/project/clusters/serverless/index.md
@@ -9,12 +9,12 @@ Serverless is currently in [alpha](https://about.gitlab.com/handbook/product/#al
Serverless architectures offer Operators and Developers the ability write highly scalable applications without provisioning a single server.
-Gitlab supports several ways deploy Serverless applications in both Kubernetes Environments and also major cloud FAAS environments.
+GitLab supports several ways deploy Serverless applications in both Kubernetes Environments and also major cloud FAAS environments.
Currently we support:
- [Knative](#knative): Build Knative applications with Knative and gitlabktl on GKE
-- [AWS Lambda](aws.md): Create serverless applications via the Serverless Framework and gitlab-ci
+- [AWS Lambda](aws.md): Create serverless applications via the Serverless Framework and GitLab CI
## Knative
@@ -31,7 +31,7 @@ With GitLab Serverless, you can deploy both functions-as-a-service (FaaS) and se
## Prerequisites
-To run Knative on Gitlab, you will need:
+To run Knative on GitLab, you will need:
1. **Existing GitLab project:** You will need a GitLab project to associate all resources. The simplest way to get started:
@@ -82,10 +82,10 @@ The minimum recommended cluster size to run Knative is 3-nodes, 6 vCPUs, and 22.
For clusters created on GKE, see [GKE Cluster Access](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl),
for other platforms [Install kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/).
-1. The ingress is now available at this address and will route incoming requests to the proper service based on the DNS
+1. The Ingress is now available at this address and will route incoming requests to the proper service based on the DNS
name in the request. To support this, a wildcard DNS A record should be created for the desired domain name. For example,
if your Knative base domain is `knative.info` then you need to create an A record or CNAME record with domain `*.knative.info`
- pointing the ip address or hostname of the ingress.
+ pointing the ip address or hostname of the Ingress.
![dns entry](img/dns-entry.png)
diff --git a/doc/user/project/code_owners.md b/doc/user/project/code_owners.md
index 0d422612f02..476f513480c 100644
--- a/doc/user/project/code_owners.md
+++ b/doc/user/project/code_owners.md
@@ -1,8 +1,13 @@
+---
+type: reference
+---
+
# Code Owners **(STARTER)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/6916)
in [GitLab Starter](https://about.gitlab.com/pricing/) 11.3.
> - [Support for group namespaces](https://gitlab.com/gitlab-org/gitlab-foss/issues/53182) added in GitLab Starter 12.1.
+> - Code Owners for Merge Request approvals was [introduced](https://gitlab.com/gitlab-org/gitlab/issues/4418) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.9.
You can use a `CODEOWNERS` file to specify users or
[shared groups](members/share_project_with_groups.md)
@@ -10,9 +15,9 @@ that are responsible for certain files in a repository.
You can choose and add the `CODEOWNERS` file in three places:
-- to the root directory of the repository
-- inside the `.gitlab/` directory
-- inside the `docs/` directory
+- To the root directory of the repository
+- Inside the `.gitlab/` directory
+- Inside the `docs/` directory
The `CODEOWNERS` file is scoped to a branch, which means that with the
introduction of new files, the person adding the new content can
@@ -23,6 +28,18 @@ When a file matches multiple entries in the `CODEOWNERS` file,
the users from all entries are displayed on the blob page of
the given file.
+## Approvals by Code Owners
+
+Once you've set Code Owners to a project, you can configure it to
+receive approvals:
+
+- As [merge request eligible approvers](merge_requests/merge_request_approvals.md#code-owners-as-eligible-approvers-starter). **(STARTER)**
+- As required approvers for [protected branches](protected_branches.md#protected-branches-approval-by-code-owners-premium). **(PREMIUM)**
+
+Once set, Code Owners are displayed in merge requests widgets:
+
+![MR widget - Code Owners](img/code_owners_mr_widget_v12_4.png)
+
## The syntax of Code Owners files
Files can be specified using the same kind of patterns you would use
diff --git a/doc/user/project/deploy_boards.md b/doc/user/project/deploy_boards.md
index 23d11c87676..b14d7f821bb 100644
--- a/doc/user/project/deploy_boards.md
+++ b/doc/user/project/deploy_boards.md
@@ -29,9 +29,9 @@ to the latest release.
Since Deploy Boards are tightly coupled with Kubernetes, there is some required
knowledge. In particular you should be familiar with:
-- [Kubernetes pods](https://kubernetes.io/docs/user-guide/pods)
+- [Kubernetes pods](https://kubernetes.io/docs/concepts/workloads/pods/pod/)
- [Kubernetes labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)
-- [Kubernetes namespaces](https://kubernetes.io/docs/user-guide/namespaces/)
+- [Kubernetes namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/)
- [Kubernetes canary deployments](https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments)
## Use cases
@@ -91,7 +91,8 @@ To display the Deploy Boards for a specific [environment] you should:
Matching based on the Kubernetes `app` label was removed in [GitLab
12.1](https://gitlab.com/gitlab-org/gitlab/merge_requests/14020).
To migrate, please apply the required annotations (see above) and
- re-deploy your application.
+ re-deploy your application. If you are using Auto DevOps, this will
+ be done automatically and no action is necessary.
![Deploy Boards Kubernetes Label](img/deploy_boards_kubernetes_label.png)
diff --git a/doc/user/project/deploy_tokens/index.md b/doc/user/project/deploy_tokens/index.md
index 6dcf56da4f0..5c3c2188629 100644
--- a/doc/user/project/deploy_tokens/index.md
+++ b/doc/user/project/deploy_tokens/index.md
@@ -71,7 +71,7 @@ To read the container registry images, you'll need to:
1. Log in to GitLab’s Container Registry using the deploy token:
```sh
-docker login registry.example.com -u <username> -p <deploy_token>
+docker login -u <username> -p <deploy_token> registry.example.com
```
Just replace `<username>` and `<deploy_token>` with the proper values. Then you can simply
diff --git a/doc/user/project/highlighting.md b/doc/user/project/highlighting.md
index 73a2d176b54..a715a313adf 100644
--- a/doc/user/project/highlighting.md
+++ b/doc/user/project/highlighting.md
@@ -1,8 +1,6 @@
-[Rouge]: https://rubygems.org/gems/rouge
-
# Syntax Highlighting
-GitLab provides syntax highlighting on all files and snippets through the [Rouge][] rubygem. It will try to guess what language to use based on the file extension, which most of the time is sufficient.
+GitLab provides syntax highlighting on all files and snippets through the [Rouge](https://rubygems.org/gems/rouge) rubygem. It will try to guess what language to use based on the file extension, which most of the time is sufficient.
If GitLab is guessing wrong, you can override its choice of language using the `gitlab-language` attribute in `.gitattributes`. For example, if you are working in a Prolog project and using the `.pl` file extension (which would normally be highlighted as Perl), you can add the following to your `.gitattributes` file:
@@ -12,7 +10,7 @@ If GitLab is guessing wrong, you can override its choice of language using the `
When you check in and push that change, all `*.pl` files in your project will be highlighted as Prolog.
-The paths here are simply git's builtin [`.gitattributes` interface](https://git-scm.com/docs/gitattributes). So, if you were to invent a file format called a `Nicefile` at the root of your project that used ruby syntax, all you need is:
+The paths here are simply Git's built-in [`.gitattributes` interface](https://git-scm.com/docs/gitattributes). So, if you were to invent a file format called a `Nicefile` at the root of your project that used ruby syntax, all you need is:
``` conf
/Nicefile gitlab-language=ruby
diff --git a/doc/user/project/img/code_owners_approval_new_protected_branch_v12_4.png b/doc/user/project/img/code_owners_approval_new_protected_branch_v12_4.png
new file mode 100755
index 00000000000..f813b60dcd9
--- /dev/null
+++ b/doc/user/project/img/code_owners_approval_new_protected_branch_v12_4.png
Binary files differ
diff --git a/doc/user/project/img/code_owners_approval_protected_branch_v12_4.png b/doc/user/project/img/code_owners_approval_protected_branch_v12_4.png
new file mode 100755
index 00000000000..59da6874d14
--- /dev/null
+++ b/doc/user/project/img/code_owners_approval_protected_branch_v12_4.png
Binary files differ
diff --git a/doc/user/project/img/code_owners_mr_widget_v12_4.png b/doc/user/project/img/code_owners_mr_widget_v12_4.png
new file mode 100644
index 00000000000..7f7b15ee017
--- /dev/null
+++ b/doc/user/project/img/code_owners_mr_widget_v12_4.png
Binary files differ
diff --git a/doc/user/project/img/issue_boards_multi_select.png b/doc/user/project/img/issue_boards_multi_select.png
new file mode 100644
index 00000000000..34ec0c1c58e
--- /dev/null
+++ b/doc/user/project/img/issue_boards_multi_select.png
Binary files differ
diff --git a/doc/user/project/img/protected_branches_list_v12_3.png b/doc/user/project/img/protected_branches_list_v12_3.png
index 365d8d99e5a..2353ddd23be 100644
--- a/doc/user/project/img/protected_branches_list_v12_3.png
+++ b/doc/user/project/img/protected_branches_list_v12_3.png
Binary files differ
diff --git a/doc/user/project/img/protected_branches_page_v12_3.png b/doc/user/project/img/protected_branches_page_v12_3.png
index 17f19642552..9a194c85c41 100644
--- a/doc/user/project/img/protected_branches_page_v12_3.png
+++ b/doc/user/project/img/protected_branches_page_v12_3.png
Binary files differ
diff --git a/doc/user/project/import/bitbucket.md b/doc/user/project/import/bitbucket.md
index e509e333313..77fc2761e07 100644
--- a/doc/user/project/import/bitbucket.md
+++ b/doc/user/project/import/bitbucket.md
@@ -56,10 +56,10 @@ namespace that started the import process.
![Grant access](img/bitbucket_import_grant_access.png)
1. Click on the projects that you'd like to import or **Import all projects**.
- You can also select the namespace under which each project will be
- imported.
+ You can also filter projects by name and select the namespace under which
+ each project will be imported.
- ![Import projects](img/bitbucket_import_select_project.png)
+ ![Import projects](img/bitbucket_import_select_project_v12_3.png)
[bb-import]: ../../../integration/bitbucket.md
[social sign-in]: ../../profile/account/social_sign_in.md
diff --git a/doc/user/project/import/bitbucket_server.md b/doc/user/project/import/bitbucket_server.md
index 7f2c6005cd4..f10bbaa707d 100644
--- a/doc/user/project/import/bitbucket_server.md
+++ b/doc/user/project/import/bitbucket_server.md
@@ -4,7 +4,7 @@
in GitLab 11.2.
NOTE: **Note:**
-The Bitbucket Server importer does not work with Bitbucket Cloud (aka bitbucket.org).
+The Bitbucket Server importer does not work with [Bitbucket Cloud](https://bitbucket.org).
Use the [Bitbucket Cloud importer](bitbucket.md) for that.
Import your projects from Bitbucket Server to GitLab with minimal effort.
diff --git a/doc/user/project/import/cvs.md b/doc/user/project/import/cvs.md
index cabd0eef8d6..3b2404912f7 100644
--- a/doc/user/project/import/cvs.md
+++ b/doc/user/project/import/cvs.md
@@ -64,5 +64,5 @@ Here's a few links to get you started with the migration:
- [Migrate using the `cvs-fast-export` tool](http://www.catb.org/~esr/reposurgeon/dvcs-migration-guide.html) ([_source code_](https://gitlab.com/esr/cvs-fast-export))
- [Stack Overflow post on importing the CVS repo](https://stackoverflow.com/a/11490134/974710)
-- [Convert a CVS repository to Git](http://www.techrepublic.com/blog/linux-and-open-source/convert-cvs-repositories-to-git/)
-- [Man page of the `git-cvsimport` tool](https://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html)
+- [Convert a CVS repository to Git](https://www.techrepublic.com/blog/linux-and-open-source/convert-cvs-repositories-to-git/)
+- [Man page of the `git-cvsimport` tool](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-cvsimport.html)
diff --git a/doc/user/project/import/gemnasium.md b/doc/user/project/import/gemnasium.md
index 3217bbc4772..f1121745c7e 100644
--- a/doc/user/project/import/gemnasium.md
+++ b/doc/user/project/import/gemnasium.md
@@ -53,7 +53,7 @@ Otherwise, you must configure your `.gitlab-ci.yml` according to the
### If your project is hosted on GitHub (`https://github.com` / GitHub Enterprise)
-Since [GitLab 10.6 comes with GitHub integration](https://about.gitlab.com/features/github/),
+Since [GitLab 10.6 comes with GitHub integration](https://about.gitlab.com/solutions/github/),
GitLab users can now create a CI/CD project in GitLab connected to an external
GitHub.com or GitHub Enterprise repository. This will automatically prompt
GitLab CI/CD to run whenever code is pushed to GitHub and post CI/CD results
@@ -81,7 +81,7 @@ back to both GitLab and GitHub when completed.
Optional step: If you set this up on GitLab.com, make sure the project is
public (in the project settings) if your GitHub project is public, since
- the security feature is available only for [GitLab Ultimate](https://about.gitlab.com/pricing).
+ the security feature is available only for [GitLab Ultimate](https://about.gitlab.com/pricing/).
1. To set up the dependency scanning job, corresponding to what Gemnasium was
doing, you must create a `.gitlab-ci.yml` file, or update it according to
diff --git a/doc/user/project/import/gitea.md b/doc/user/project/import/gitea.md
index f5746a0fb31..f883e4474e2 100644
--- a/doc/user/project/import/gitea.md
+++ b/doc/user/project/import/gitea.md
@@ -43,8 +43,8 @@ Click on the **Gitea** link and the import authorization process will start.
With this method, you will perform a one-off authorization with Gitea to grant
GitLab access your repositories:
-1. Go to <https://you-gitea-instance/user/settings/applications> (replace
- `you-gitea-instance` with the host of your Gitea instance).
+1. Go to `https://your-gitea-instance/user/settings/applications` (replace
+ `your-gitea-instance` with the host of your Gitea instance).
1. Click **Generate New Token**.
1. Enter a token description.
1. Click **Generate Token**.
@@ -66,10 +66,14 @@ From there, you can see the import statuses of your Gitea repositories.
- whereas those that are not yet imported will have an **Import** button on the
right side of the table.
-If you want, you can import all your Gitea projects in one go by hitting
-**Import all projects** in the upper left corner.
+You also can:
-![Gitea importer page](img/import_projects_from_github_importer.png)
+- Import all your Gitea projects in one go by hitting **Import all projects** in
+ the upper left corner
+- Filter projects by name. If filter is applied, hitting **Import all projects**
+ will only import matched projects
+
+![Gitea importer page](img/import_projects_from_gitea_importer_v12_3.png)
---
diff --git a/doc/user/project/import/github.md b/doc/user/project/import/github.md
index dad53a600dc..0aeca7f73ad 100644
--- a/doc/user/project/import/github.md
+++ b/doc/user/project/import/github.md
@@ -42,7 +42,7 @@ assignees in the database of the GitLab instance (note that pull requests are ca
For this association to succeed, prior to the import, each GitHub author and assignee in the repository must
have either previously logged in to a GitLab account using the GitHub icon **or** have a GitHub account with
-a [public email address](https://help.github.com/articles/setting-your-commit-email-address-on-github/) that
+a [public email address](https://help.github.com/en/articles/setting-your-commit-email-address) that
matches their GitLab account's email address.
If a user referenced in the project is not found in GitLab's database, the project creator (typically the user
@@ -71,7 +71,7 @@ Before you begin, ensure that any GitHub users who you want to map to GitLab use
- A GitLab account that has logged in using the GitHub icon
\- or -
-- A GitLab account with an email address that matches the [public email address](https://help.github.com/articles/setting-your-commit-email-address-on-github/) of the GitHub user
+- A GitLab account with an email address that matches the [public email address](https://help.github.com/en/articles/setting-your-commit-email-address) of the GitHub user
User-matching attempts occur in that order, and if a user is not identified either way, the activity is associated with
the user account that is performing the import.
@@ -82,7 +82,7 @@ If you are using a self-hosted GitLab instance or if you are importing from GitH
1. From the top navigation bar, click **+** and select **New project**.
1. Select the **Import project** tab and then select **GitHub**.
-1. Select the first button to **List your GitHub repositories**. You are redirected to a page on github.com to authorize the GitLab application.
+1. Select the first button to **List your GitHub repositories**. You are redirected to a page on [GitHub](https://github.com) to authorize the GitLab application.
1. Click **Authorize gitlabhq**. You are redirected back to GitLab's Import page and all of your GitHub repositories are listed.
1. Continue on to [selecting which repositories to import](#selecting-which-repositories-to-import).
@@ -115,11 +115,14 @@ your GitHub repositories are listed.
1. By default, the proposed repository namespaces match the names as they exist in GitHub, but based on your permissions,
you can choose to edit these names before you proceed to import any of them.
-1. Select the **Import** button next to any number of repositories, or select **Import all repositories**.
+1. Select the **Import** button next to any number of repositories, or select **Import all repositories**. Additionally,
+ you can filter projects by name. If filter is applied, **Import all repositories** only imports matched repositories.
1. The **Status** column shows the import status of each repository. You can choose to leave the page open and it will
update in realtime or you can return to it later.
1. Once a repository has been imported, click its GitLab path to open its GitLab URL.
+![Github importer page](img/import_projects_from_github_importer_v12_3.png)
+
## Mirroring and pipeline status sharing
Depending your GitLab tier, [project mirroring](../../../workflow/repository_mirroring.md) can be set up to keep
diff --git a/doc/user/project/import/img/bitbucket_import_select_project.png b/doc/user/project/import/img/bitbucket_import_select_project.png
deleted file mode 100644
index 1bca6166ec8..00000000000
--- a/doc/user/project/import/img/bitbucket_import_select_project.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/import/img/bitbucket_import_select_project_v12_3.png b/doc/user/project/import/img/bitbucket_import_select_project_v12_3.png
new file mode 100644
index 00000000000..1f1febd9068
--- /dev/null
+++ b/doc/user/project/import/img/bitbucket_import_select_project_v12_3.png
Binary files differ
diff --git a/doc/user/project/import/img/import_projects_from_gitea_importer_v12_3.png b/doc/user/project/import/img/import_projects_from_gitea_importer_v12_3.png
new file mode 100644
index 00000000000..d8ae1a54851
--- /dev/null
+++ b/doc/user/project/import/img/import_projects_from_gitea_importer_v12_3.png
Binary files differ
diff --git a/doc/user/project/import/img/import_projects_from_github_importer.png b/doc/user/project/import/img/import_projects_from_github_importer.png
deleted file mode 100644
index d8effaf6075..00000000000
--- a/doc/user/project/import/img/import_projects_from_github_importer.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/import/img/import_projects_from_github_importer_v12_3.png b/doc/user/project/import/img/import_projects_from_github_importer_v12_3.png
new file mode 100644
index 00000000000..6a53d9e6d1d
--- /dev/null
+++ b/doc/user/project/import/img/import_projects_from_github_importer_v12_3.png
Binary files differ
diff --git a/doc/user/project/import/index.md b/doc/user/project/import/index.md
index ecd491d8e5b..571968dd065 100644
--- a/doc/user/project/import/index.md
+++ b/doc/user/project/import/index.md
@@ -1,7 +1,7 @@
# Migrating projects to a GitLab instance
-1. [From Bitbucket Cloud (aka bitbucket.org)](bitbucket.md)
-1. [From Bitbucket Server (aka Stash)](bitbucket_server.md)
+1. [From Bitbucket Cloud](bitbucket.md)
+1. [From Bitbucket Server (also known as Stash)](bitbucket_server.md)
1. [From ClearCase](clearcase.md)
1. [From CVS](cvs.md)
1. [From FogBugz](fogbugz.md)
@@ -24,7 +24,7 @@ There is also the option of [connecting your external repository to get CI/CD be
## Migrating from self-hosted GitLab to GitLab.com
-If you only need to migrate git repos, you can [import each project by URL](repo_by_url.md), but issues and merge requests can't be imported.
+If you only need to migrate Git repos, you can [import each project by URL](repo_by_url.md), but issues and merge requests can't be imported.
If you want to retain all metadata like issues and merge requests, you can use
the [import/export feature](../settings/import_export.md) to export projects from self-hosted GitLab and import those projects into GitLab.com.
@@ -34,7 +34,7 @@ This approach assumes all users from the self-hosted instance have already been
If the users haven't been migrated yet, the user conducting the import
will take the place of all references to the missing user(s).
-If you need to migrate all data over, you can leverage our [api](../../../api/README.md) to migrate from self-hosted to GitLab.com.
+If you need to migrate all data over, you can leverage our [API](../../../api/README.md) to migrate from self-hosted to GitLab.com.
The order of assets to migrate from a self-hosted instance to GitLab is the following:
1. [Users](../../../api/users.md)
diff --git a/doc/user/project/import/perforce.md b/doc/user/project/import/perforce.md
index a1ea716b606..a08488a4baf 100644
--- a/doc/user/project/import/perforce.md
+++ b/doc/user/project/import/perforce.md
@@ -45,8 +45,8 @@ submit back from Git to Perforce.
Here's a few links to get you started:
-- [git-p4 manual page](https://www.kernel.org/pub/software/scm/git/docs/git-p4.html)
-- [git-p4 example usage](https://git.wiki.kernel.org/index.php/Git-p4_Usage)
+- [`git-p4` manual page](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-p4.html)
+- [`git-p4` example usage](https://git.wiki.kernel.org/index.php/Git-p4_Usage)
- [Git book migration guide](https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git#_perforce_import)
Note that `git p4` and `git filter-branch` are not very good at
diff --git a/doc/user/project/import/svn.md b/doc/user/project/import/svn.md
index 267dca5bf4d..6b22c5f2fd0 100644
--- a/doc/user/project/import/svn.md
+++ b/doc/user/project/import/svn.md
@@ -97,7 +97,7 @@ subgit import $GIT_REPO_PATH
### SubGit licensing
Running SubGit in a mirror mode requires a
-[registration](https://subgit.com/pricing/). Registration is free for open
+[registration](https://subgit.com/pricing). Registration is free for open
source, academic and startup projects.
We're currently working on deeper GitLab/SubGit integration. You may track our
diff --git a/doc/user/project/index.md b/doc/user/project/index.md
index 2700d43ed10..7ae288996da 100644
--- a/doc/user/project/index.md
+++ b/doc/user/project/index.md
@@ -59,10 +59,10 @@ When you create a project in GitLab, you'll have access to a large number of
**GitLab CI/CD:**
-- [GitLab CI/CD](../../ci/README.md): GitLab's built-in [Continuous Integration, Delivery, and Deployment](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/) tool
+- [GitLab CI/CD](../../ci/README.md): GitLab's built-in [Continuous Integration, Delivery, and Deployment](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/) tool
- [Container Registry](../packages/container_registry/index.md): Build and push Docker
images out-of-the-box
- - [Auto Deploy](../../ci/autodeploy/index.md): Configure GitLab CI/CD
+ - [Auto Deploy](../../topics/autodevops/index.md#auto-deploy): Configure GitLab CI/CD
to automatically set up your app's deployment
- [Enable and disable GitLab CI](../../ci/enable_or_disable_ci.md)
- [Pipelines](../../ci/pipelines.md): Configure and visualize
@@ -95,6 +95,7 @@ When you create a project in GitLab, you'll have access to a large number of
- [Releases](releases/index.md): a way to track deliverables in your project as snapshot in time of
the source, build output, and other metadata or artifacts
associated with a released version of your code.
+- [Conan packages](../packages/conan_repository/index.md): your private Conan repository in GitLab. **(PREMIUM)**
- [Maven packages](../packages/maven_repository/index.md): your private Maven repository in GitLab. **(PREMIUM)**
- [NPM packages](../packages/npm_registry/index.md): your private NPM package registry in GitLab. **(PREMIUM)**
- [Code owners](code_owners.md): specify code owners for certain files **(STARTER)**
@@ -129,7 +130,7 @@ Read through the documentation on [project settings](settings/index.md).
- [Import a project](import/index.md) from:
- [GitHub to GitLab](import/github.md)
- - [BitBucket to GitLab](import/bitbucket.md)
+ - [Bitbucket to GitLab](import/bitbucket.md)
- [Gitea to GitLab](import/gitea.md)
- [FogBugz to GitLab](import/fogbugz.md)
- [Export a project from GitLab](settings/import_export.md#exporting-a-project-and-its-data)
@@ -154,6 +155,26 @@ when a project is part of a group (under a
If you choose to leave a project you will no longer be a project
member, therefore, unable to contribute.
+## Project's landing page
+
+The project's landing page shows different information depending on
+the project's visibility settings and user permissions.
+
+For public projects, and to members of internal and private projects
+with [permissions to view the project's code](../permissions.md#project-members-permissions):
+
+- The content of a
+ [`README` or an index file](repository/#repository-readme-and-index-files)
+ is displayed (if any), followed by the list of directories within the
+ project's repository.
+- If the project doesn't contain either of these files, the
+ visitor will see the list of files and directories of the repository.
+
+For users without permissions to view the project's code:
+
+- The wiki homepage is displayed, if any.
+- The list of issues within the project is displayed.
+
## Redirects when changing repository paths
When a repository path changes, it is essential to smoothly transition from the
@@ -214,10 +235,10 @@ A project alias can be only created via API and only by GitLab administrators.
Follow the [Project Aliases API documentation](../../api/project_aliases.md) for
more details.
-Once an alias has been created for a project (e.g., an alias `gitlab-ce` for the
-project `https://gitlab.com/gitlab-org/gitlab-foss`), the repository can be cloned
-using the alias (e.g `git clone git@gitlab.com:gitlab-ce.git` instead of
-`git clone git@gitlab.com:gitlab-org/gitlab-ce.git`).
+Once an alias has been created for a project (e.g., an alias `gitlab` for the
+project `https://gitlab.com/gitlab-org/gitlab`), the repository can be cloned
+using the alias (e.g `git clone git@gitlab.com:gitlab.git` instead of
+`git clone git@gitlab.com:gitlab-org/gitlab.git`).
## Project APIs
diff --git a/doc/user/project/insights/index.md b/doc/user/project/insights/index.md
index 76a6a96eec5..ec3831f2d27 100644
--- a/doc/user/project/insights/index.md
+++ b/doc/user/project/insights/index.md
@@ -58,9 +58,9 @@ For example, here's a single definition for Insights that will display one page
```yaml
bugsCharts:
- title: 'Charts for Bugs'
+ title: "Charts for bugs"
charts:
- - title: Monthly Bugs Created (bar)
+ - title: "Monthly bugs created"
type: bar
query:
issuable_type: issue
@@ -76,7 +76,7 @@ Each chart definition is made up of a hash composed of key-value pairs.
For example, here's single chart definition:
```yaml
-- title: Monthly Bugs Created (bar)
+- title: "Monthly bugs created"
type: bar
query:
issuable_type: issue
@@ -111,7 +111,7 @@ For example:
```yaml
monthlyBugsCreated:
- title: Monthly Bugs Created (bar)
+ title: "Monthly bugs created"
```
### `type`
@@ -122,7 +122,7 @@ For example:
```yaml
monthlyBugsCreated:
- title: Monthly Bugs Created (bar)
+ title: "Monthly bugs created"
type: bar
```
@@ -145,7 +145,7 @@ Example:
```yaml
monthlyBugsCreated:
- title: Monthly Bugs Created (bar)
+ title: "Monthly bugs created"
type: bar
query:
issuable_type: issue
@@ -174,7 +174,7 @@ Supported values are:
Filter by the state of the queried "issuable".
-If you omit it, the `opened` state filter will be applied.
+By default, the `opened` state filter will be applied.
Supported values are:
@@ -188,14 +188,14 @@ Supported values are:
Filter by labels applied to the queried "issuable".
-If you omit it, no labels filter will be applied. All the defined labels must be
+By default, no labels filter will be applied. All the defined labels must be
applied to the "issuable" in order for it to be selected.
Example:
```yaml
monthlyBugsCreated:
- title: Monthly regressions Created (bar)
+ title: "Monthly regressions created"
type: bar
query:
issuable_type: issue
@@ -209,14 +209,14 @@ monthlyBugsCreated:
Group "issuable" by the configured labels.
-If you omit it, no grouping will be done. When using this keyword, you need to
+By default, no grouping will be done. When using this keyword, you need to
set `type` to either `line` or `stacked-bar`.
Example:
```yaml
weeklyBugsBySeverity:
- title: Weekly Bugs By Severity (stacked bar)
+ title: "Weekly bugs by severity"
type: stacked-bar
query:
issuable_type: issue
@@ -248,7 +248,7 @@ The unit is related to the `query.group_by` you defined. For instance if you
defined `query.group_by: 'day'` then `query.period_limit: 365` would mean
"Gather and display data for the last 365 days".
-If you omit it, default values will be applied depending on the `query.group_by`
+By default, default values will be applied depending on the `query.group_by`
you defined.
| `query.group_by` | Default value |
@@ -257,14 +257,63 @@ you defined.
| `week` | 4 |
| `month` | 12 |
+### `projects`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/10904) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.4.
+
+You can limit where the "issuables" can be queried from:
+
+- If `.gitlab/insights.yml` is used for a [group's insights](../../group/insights/index.md#configure-your-insights), with `projects`, you can limit the projects to be queried. By default, all projects under the group will be used.
+- If `.gitlab/insights.yml` is used for a project's insights, specifying any other projects will yield no results. By default, the project itself will be used.
+
+#### `projects.only`
+
+The `projects.only` option specifies the projects which the "issuables"
+should be queried from.
+
+Projects listed here will be ignored when:
+
+- They don't exist.
+- The current user doesn't have sufficient permissions to read them.
+- They are outside of the group.
+
+In the following `insights.yml` example, we specify the projects
+the queries will be used on. This example is useful when setting
+a group's insights:
+
+```yaml
+monthlyBugsCreated:
+ title: "Monthly bugs created"
+ type: bar
+ query:
+ issuable_type: issue
+ issuable_state: opened
+ filter_labels:
+ - bug
+ projects:
+ only:
+ - 3 # You can use the project ID
+ - groupA/projectA # Or full project path
+ - groupA/subgroupB/projectC # Projects in subgroups can be included
+ - groupB/project # Projects outside the group will be ignored
+```
+
## Complete example
```yaml
+.projectsOnly: &projectsOnly
+ projects:
+ only:
+ - 3
+ - groupA/projectA
+ - groupA/subgroupB/projectC
+
bugsCharts:
- title: 'Charts for Bugs'
+ title: "Charts for bugs"
charts:
- - title: Monthly Bugs Created (bar)
+ - title: "Monthly bugs created"
type: bar
+ <<: *projectsOnly
query:
issuable_type: issue
issuable_state: opened
@@ -272,8 +321,10 @@ bugsCharts:
- bug
group_by: month
period_limit: 24
- - title: Weekly Bugs By Severity (stacked bar)
+
+ - title: "Weekly bugs by severity"
type: stacked-bar
+ <<: *projectsOnly
query:
issuable_type: issue
issuable_state: opened
@@ -286,8 +337,10 @@ bugsCharts:
- S4
group_by: week
period_limit: 104
- - title: Monthly Bugs By Team (line)
+
+ - title: "Monthly bugs by team"
type: line
+ <<: *projectsOnly
query:
issuable_type: merge_request
issuable_state: opened
diff --git a/doc/user/project/integrations/bamboo.md b/doc/user/project/integrations/bamboo.md
index 94e0c9fd886..ec9b8bd8bb2 100644
--- a/doc/user/project/integrations/bamboo.md
+++ b/doc/user/project/integrations/bamboo.md
@@ -25,9 +25,9 @@ need to be configured in a Bamboo build plan before GitLab can integrate.
whitelist of IP addresses that are allowed to trigger Bamboo builds.
1. Save the trigger.
1. In the left pane, select a build stage. If you have multiple build stages
- you want to select the last stage that contains the git checkout task.
+ you want to select the last stage that contains the Git checkout task.
1. Select the 'Miscellaneous' tab.
-1. Under 'Pattern Match Labelling' put '${bamboo.repository.revision.number}'
+1. Under 'Pattern Match Labelling' put `${bamboo.repository.revision.number}`
in the 'Labels' box.
1. Save
diff --git a/doc/user/project/integrations/generic_alerts.md b/doc/user/project/integrations/generic_alerts.md
index 37fe5132ec2..ec43696fdee 100644
--- a/doc/user/project/integrations/generic_alerts.md
+++ b/doc/user/project/integrations/generic_alerts.md
@@ -1,6 +1,6 @@
# Generic alerts integration **(ULTIMATE)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/13203) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.3.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/13203) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.3.
GitLab can accept alerts from any source via a generic webhook receiver.
When you set up the generic alerts integration, a unique endpoint will
@@ -13,11 +13,11 @@ authored by the GitLab Alert Bot.
## Setting up generic alerts
-To set up the generic alerts integration:
+To set up the generic alerts integration:
-1. Navigate to **Settings > Integrations** in a project.
+1. Navigate to **Settings > Integrations** in a project.
1. Click on **Alert endpoint**.
-1. Toggle the **Active** alert setting. The `URL` and `Authorization Key` for the webhook configuration can be found there.
+1. Toggle the **Active** alert setting. The `URL` and `Authorization Key` for the webhook configuration can be found there.
## Customizing the payload
@@ -35,7 +35,11 @@ You can customize the payload by sending the following parameters. All fields ar
Example request:
```sh
-curl --request POST --data '{"title": "Incident title"}' --header "Authorization: Bearer <autorization_key>" <url>
+curl --request POST \
+ --data '{"title": "Incident title"}' \
+ --header "Authorization: Bearer <autorization_key>" \
+ --header "Content-Type: application/json" \
+ <url>
```
The `<autorization_key>` and `<url>` values can be found when [setting up generic alerts](#setting-up-generic-alerts).
diff --git a/doc/user/project/integrations/gitlab_slack_application.md b/doc/user/project/integrations/gitlab_slack_application.md
index 91de64be1fa..50adb5993e5 100644
--- a/doc/user/project/integrations/gitlab_slack_application.md
+++ b/doc/user/project/integrations/gitlab_slack_application.md
@@ -53,11 +53,11 @@ The only difference with the [manually configurable Slack slash commands][slack-
is that all the commands should be prefixed with the `/gitlab` keyword.
We are working on making this configurable in the future.
-For example, to show the issue number `1001` under the `gitlab-org/gitlab-ce`
+For example, to show the issue number `1001` under the `gitlab-org/gitlab`
project, you would do:
```
-/gitlab gitlab-org/gitlab-ce issue show 1001
+/gitlab gitlab-org/gitlab issue show 1001
```
[slack-docs]: https://get.slack.help/hc/en-us/articles/202035138-Adding-apps-to-your-team
diff --git a/doc/user/project/integrations/hipchat.md b/doc/user/project/integrations/hipchat.md
index 7a0540aa9e3..85c3eda1208 100644
--- a/doc/user/project/integrations/hipchat.md
+++ b/doc/user/project/integrations/hipchat.md
@@ -18,7 +18,7 @@ allow GitLab to send messages only to *one* room.
### Complete these steps in HipChat
-1. Go to: <https://admin.hipchat.com/admin>
+1. Go to: `https://admin.hipchat.com/admin`
1. Click on "Group Admin" -> "Integrations".
1. Find "Build Your Own!" and click "Create".
1. Select the desired room, name the integration "GitLab", and click "Create".
diff --git a/doc/user/project/integrations/img/prometheus_add_metric.png b/doc/user/project/integrations/img/prometheus_add_metric.png
index e85670e1a13..9afeb535123 100644
--- a/doc/user/project/integrations/img/prometheus_add_metric.png
+++ b/doc/user/project/integrations/img/prometheus_add_metric.png
Binary files differ
diff --git a/doc/user/project/integrations/img/prometheus_alert.png b/doc/user/project/integrations/img/prometheus_alert.png
index a37f0477fd9..ffa1008ff51 100644
--- a/doc/user/project/integrations/img/prometheus_alert.png
+++ b/doc/user/project/integrations/img/prometheus_alert.png
Binary files differ
diff --git a/doc/user/project/integrations/img/prometheus_dashboard.png b/doc/user/project/integrations/img/prometheus_dashboard.png
index 1fa36ca2675..24d855eb50c 100644
--- a/doc/user/project/integrations/img/prometheus_dashboard.png
+++ b/doc/user/project/integrations/img/prometheus_dashboard.png
Binary files differ
diff --git a/doc/user/project/integrations/irker.md b/doc/user/project/integrations/irker.md
index 4fb753d1707..22228025969 100644
--- a/doc/user/project/integrations/irker.md
+++ b/doc/user/project/integrations/irker.md
@@ -15,7 +15,7 @@ repository on <https://gitlab.com/esr/irker>:
git clone https://gitlab.com/esr/irker.git
```
-Once you have downloaded the code, you can run the python script named `irkerd`.
+Once you have downloaded the code, you can run the Python script named `irkerd`.
This script is the gateway script, it acts both as an IRC client, for sending
messages to an IRC server obviously, and as a TCP server, for receiving messages
from the GitLab service.
diff --git a/doc/user/project/integrations/jira.md b/doc/user/project/integrations/jira.md
index 1b8af89de61..6d2a0563ec1 100644
--- a/doc/user/project/integrations/jira.md
+++ b/doc/user/project/integrations/jira.md
@@ -21,13 +21,13 @@ Here's how the integration responds when you take the following actions in GitLa
- GitLab hyperlinks to the Jira issue.
- The Jira issue adds an issue link to the commit/MR in GitLab.
- The Jira issue adds a comment reflecting the comment made in GitLab, the comment author, and a link to the commit/MR in GitLab.
-- **Mention that a commit or MR 'closes', 'resolves', or 'fixes' a Jira issue ID**. When the commit is made on master or the change is merged to master:
+- **Mention that a commit or MR 'closes', 'resolves', or 'fixes' a Jira issue ID**. When the commit is made on the project's default branch (usually master) or the change is merged to the default branch:
- GitLab's merge request page displays a note that it "Closed" the Jira issue, with a link to the issue. (Note: Before the merge, an MR will display that it "Closes" the Jira issue.)
- The Jira issue shows the activity and the Jira issue is closed, or otherwise transitioned.
-You can also use [Jira's Smart Commits](https://confluence.atlassian.com/fisheye/using-smart-commits-298976812.html)
+You can also use [Jira's Smart Commits](https://confluence.atlassian.com/fisheye/using-smart-commits-960155400.html)
directly from GitLab, as covered in the article
-[How and why to integrate GitLab with Jira](https://www.programmableweb.com/news/how-and-why-to-integrate-gitlab-Jira/how-to/2017/04/25).
+[How and why to integrate GitLab with Jira](https://www.programmableweb.com/news/how-and-why-to-integrate-gitlab-jira/how-to/2017/04/25).
## Configuration
@@ -45,7 +45,7 @@ In order to enable the Jira service in GitLab, you need to first configure the p
#### Jira Server
-When connecting to **Jira Server**, which supports basic authentication, a **username and password** are required. Note that connecting to a Jira server via CAS is not possible. [Set up a user in Jira Server](jira_server_configuration.md) first and then proceed to [Configuring GitLab](#configuring-gitlab).
+When connecting to **Jira Server**, which supports basic authentication, a **username and password** are required. Note that connecting to Jira Server via CAS is not possible. [Set up a user in Jira Server](jira_server_configuration.md) first and then proceed to [Configuring GitLab](#configuring-gitlab).
#### Jira Cloud
@@ -205,4 +205,4 @@ authenticate with the Jira site. You will need to log in to your Jira instance
and complete the CAPTCHA.
[services-templates]: services_templates.md
-[jira-repo-old-docs]: https://gitlab.com/gitlab-org/gitlab-foss/blob/8-13-stable/doc/project_services/jira.md
+[jira-repo-old-docs]: https://gitlab.com/gitlab-org/gitlab/blob/8-13-stable/doc/project_services/jira.md
diff --git a/doc/user/project/integrations/jira_cloud_configuration.md b/doc/user/project/integrations/jira_cloud_configuration.md
index 1d5a4a3d4c7..9fa92f19e4f 100644
--- a/doc/user/project/integrations/jira_cloud_configuration.md
+++ b/doc/user/project/integrations/jira_cloud_configuration.md
@@ -15,6 +15,6 @@ below to create one:
![Jira API token](img/jira_api_token.png)
-1. Click **Copy to clipboard**, or click **View** and write down the new API token. It is required when [configuring GitLab](jira.md#configuring-gitlab).
+1. Click **Copy**, or click **View** and write down the new API token. It is required when [configuring GitLab](jira.md#configuring-gitlab).
The Jira configuration is complete. You need the newly created token, and the associated email address, when [configuring GitLab](jira.md#configuring-gitlab) in the next section.
diff --git a/doc/user/project/integrations/mattermost_slash_commands.md b/doc/user/project/integrations/mattermost_slash_commands.md
index a3a2568445e..563cad717e2 100644
--- a/doc/user/project/integrations/mattermost_slash_commands.md
+++ b/doc/user/project/integrations/mattermost_slash_commands.md
@@ -131,12 +131,12 @@ The available slash commands are:
| Command | Description | Example |
| ------- | ----------- | ------- |
-| <kbd>/&lt;trigger&gt; issue new &lt;title&gt; <kbd>⇧ Shift</kbd>+<kbd>↵ Enter</kbd> &lt;description&gt;</kbd> | Create a new issue in the project that `<trigger>` is tied to. `<description>` is optional. | <samp>/gitlab issue new We need to change the homepage</samp> |
-| <kbd>/&lt;trigger&gt; issue show &lt;issue-number&gt;</kbd> | Show the issue with ID `<issue-number>` from the project that `<trigger>` is tied to. | <samp>/gitlab issue show 42</samp> |
-| <kbd>/&lt;trigger&gt; deploy &lt;environment&gt; to &lt;environment&gt;</kbd> | Start the CI job that deploys from one environment to another, for example `staging` to `production`. CI/CD must be [properly configured][ciyaml]. | <samp>/gitlab deploy staging to production</samp> |
+| <kbd>/&lt;trigger&gt; issue new &lt;title&gt; <kbd>⇧ Shift</kbd>+<kbd>↵ Enter</kbd> &lt;description&gt;</kbd> | Create a new issue in the project that `<trigger>` is tied to. `<description>` is optional. | `/gitlab issue new We need to change the homepage` |
+| <kbd>/&lt;trigger&gt; issue show &lt;issue-number&gt;</kbd> | Show the issue with ID `<issue-number>` from the project that `<trigger>` is tied to. | `/gitlab issue show 42` |
+| <kbd>/&lt;trigger&gt; deploy &lt;environment&gt; to &lt;environment&gt;</kbd> | Start the CI job that deploys from one environment to another, for example `staging` to `production`. CI/CD must be [properly configured][ciyaml]. | `/gitlab deploy staging to production` |
To see a list of available commands to interact with GitLab, type the
-trigger word followed by <kbd>help</kbd>. Example: <samp>/gitlab help</samp>
+trigger word followed by <kbd>help</kbd>. Example: `/gitlab help`
![Mattermost bot available commands](img/mattermost_bot_available_commands.png)
diff --git a/doc/user/project/integrations/project_services.md b/doc/user/project/integrations/project_services.md
index 168ec1b15ea..e385ee53636 100644
--- a/doc/user/project/integrations/project_services.md
+++ b/doc/user/project/integrations/project_services.md
@@ -56,6 +56,16 @@ Click on the service links to see further configuration instructions and details
| [Redmine](redmine.md) | Redmine issue tracker |
| [YouTrack](youtrack.md) | YouTrack issue tracker |
+## Push hooks limit
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/31009) in GitLab 12.4.
+
+If a single push includes changes to more than three branches or tags, services
+supported by `push_hooks` and `tag_push_hooks` events won't be executed.
+
+The number of branches or tags supported can be changed via
+[`push_event_hooks_limit` application setting](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls).
+
## Services templates
Services templates is a way to set some predefined values in the Service of
diff --git a/doc/user/project/integrations/prometheus.md b/doc/user/project/integrations/prometheus.md
index 1ecefa210a0..d7666d00e76 100644
--- a/doc/user/project/integrations/prometheus.md
+++ b/doc/user/project/integrations/prometheus.md
@@ -115,7 +115,7 @@ You can view the performance dashboard for an environment by [clicking on the mo
> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/3799) in [GitLab Premium](https://about.gitlab.com/pricing/) 10.6.
-Custom metrics can be monitored by adding them on the Prometheus integration page. Once saved, they will be displayed on the environment performance dashboard provided that either:
+Custom metrics can be monitored by adding them on the monitoring dashboard page. Once saved, they will be displayed on the environment performance dashboard provided that either:
- A [connected Kubernetes cluster](../clusters/index.md#adding-and-removing-clusters) with the environment scope of `*` is used and [Prometheus installed on the cluster](#enabling-prometheus-integration), or
- Prometheus is [manually configured](#manual-configuration-of-prometheus).
@@ -300,8 +300,12 @@ Data from Prometheus charts on the metrics dashboard can be downloaded as CSV.
For managed Prometheus instances using auto configuration, alerts for metrics [can be configured](#adding-additional-metrics-premium) directly in the performance dashboard.
-To set an alert, click on the alarm icon in the top right corner of the metric you want to create the alert for. A dropdown
-will appear, with options to set the threshold and operator. Click **Add** to save and activate the alert.
+To set an alert:
+
+1. Click on the ellipsis icon in the top right corner of the metric you want to create the alert for.
+1. Choose **Alerts**
+1. Set threshold and operator.
+1. Click **Add** to save and activate the alert.
![Adding an alert](img/prometheus_alert.png)
@@ -441,7 +445,7 @@ If the "No data found" screen continues to appear, it could be due to:
[run a query](prometheus_library/kubernetes.html#metrics-supported), replacing `$CI_ENVIRONMENT_SLUG`
with the name of your environment.
-[autodeploy]: ../../../ci/autodeploy/index.md
+[autodeploy]: ../../../topics/autodevops/index.md#auto-deploy
[kubernetes]: https://kubernetes.io
[kube]: ./kubernetes.md
[prometheus-k8s-sd]: https://prometheus.io/docs/operating/configuration/#<kubernetes_sd_config>
diff --git a/doc/user/project/integrations/prometheus_library/nginx_ingress.md b/doc/user/project/integrations/prometheus_library/nginx_ingress.md
index 1966fc1d289..d630956c109 100644
--- a/doc/user/project/integrations/prometheus_library/nginx_ingress.md
+++ b/doc/user/project/integrations/prometheus_library/nginx_ingress.md
@@ -4,7 +4,7 @@
NOTE: **Note:** NGINX Ingress versions prior to 0.16.0 offer an included [VTS Prometheus metrics exporter](nginx_ingress_vts.md), which exports metrics different than the built-in metrics.
-GitLab has support for automatically detecting and monitoring the Kubernetes NGINX ingress controller. This is provided by leveraging the built-in Prometheus metrics included starting with [version 0.16.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0160).
+GitLab has support for automatically detecting and monitoring the Kubernetes NGINX Ingress controller. This is provided by leveraging the built-in Prometheus metrics included with Kubernetes NGINX Ingress controller [version 0.16.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0160) onward.
## Requirements
@@ -18,7 +18,7 @@ GitLab has support for automatically detecting and monitoring the Kubernetes NGI
| Latency (ms) | `sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_sum{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_count{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 1000` |
| HTTP Error Rate (%) | `sum(rate(nginx_ingress_controller_requests{status=~"5.*",namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 100` |
-## Configuring NGINX ingress monitoring
+## Configuring NGINX Ingress monitoring
If you have deployed NGINX Ingress using GitLab's [Kubernetes cluster integration](../../clusters/index.md#installing-applications), it will [automatically be monitored](#about-managed-nginx-ingress-deployments) by Prometheus.
@@ -30,7 +30,7 @@ For other deployments, there is [some configuration](#manually-setting-up-nginx-
### About managed NGINX Ingress deployments
-NGINX Ingress is deployed into the `gitlab-managed-apps` namespace, using the [official Helm chart](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress). NGINX Ingress will be [externally reachable via the Load Balancer's Endpoint](../../clusters/index.md#getting-the-external-endpoint).
+NGINX Ingress is deployed into the `gitlab-managed-apps` namespace, using the [official Helm chart](https://github.com/helm/charts/tree/master/stable/nginx-ingress). NGINX Ingress will be [externally reachable via the Load Balancer's Endpoint](../../clusters/index.md#getting-the-external-endpoint).
NGINX is configured for Prometheus monitoring, by setting:
@@ -42,14 +42,14 @@ When used in conjunction with the GitLab deployed Prometheus service, response m
### Manually setting up NGINX Ingress for Prometheus monitoring
-Version 0.9.0 and above of [NGINX ingress](https://github.com/kubernetes/ingress-nginx) have built-in support for exporting Prometheus metrics. To enable, a ConfigMap setting must be passed: `enable-vts-status: "true"`. Once enabled, a Prometheus metrics endpoint will start running on port 10254.
+Version 0.9.0 and above of [NGINX Ingress](https://github.com/kubernetes/ingress-nginx) have built-in support for exporting Prometheus metrics. To enable, a ConfigMap setting must be passed: `enable-vts-status: "true"`. Once enabled, a Prometheus metrics endpoint will start running on port 10254.
-Next, the ingress needs to be annotated for Prometheus monitoring. Two new annotations need to be added:
+Next, the Ingress needs to be annotated for Prometheus monitoring. Two new annotations need to be added:
- `prometheus.io/scrape: "true"`
- `prometheus.io/port: "10254"`
-Managing these settings depends on how NGINX ingress has been deployed. If you have deployed via the [official Helm chart](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress), metrics can be enabled with `controller.stats.enabled` along with the required annotations. Alternatively it is possible edit the NGINX ingress YML directly in the [Kubernetes dashboard](https://github.com/kubernetes/dashboard).
+Managing these settings depends on how NGINX Ingress has been deployed. If you have deployed via the [official Helm chart](https://github.com/helm/charts/tree/master/stable/nginx-ingress), metrics can be enabled with `controller.stats.enabled` along with the required annotations. Alternatively it is possible to edit the NGINX Ingress YML directly in the [Kubernetes dashboard](https://github.com/kubernetes/dashboard).
## Specifying the Environment label
diff --git a/doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md b/doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md
index 0c848496149..83eac44666c 100644
--- a/doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md
+++ b/doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md
@@ -4,7 +4,7 @@
NOTE: **Note:** [NGINX Ingress version 0.16](nginx_ingress.md) and above have built-in Prometheus metrics, which are different than the VTS based metrics.
-GitLab has support for automatically detecting and monitoring the Kubernetes NGINX ingress controller. This is provided by leveraging the included VTS Prometheus metrics exporter in [version 0.9.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#09-beta1) through [0.15.x](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0150).
+GitLab has support for automatically detecting and monitoring the Kubernetes NGINX Ingress controller. This is provided by leveraging the included VTS Prometheus metrics exporter in [version 0.9.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#09-beta1) through [0.15.x](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0150).
## Requirements
@@ -18,7 +18,7 @@ GitLab has support for automatically detecting and monitoring the Kubernetes NGI
| Latency (ms) | `avg(nginx_upstream_response_msecs_avg{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"})` |
| HTTP Error Rate (%) | `sum(rate(nginx_upstream_responses_total{status_code="5xx", upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) / sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) * 100` |
-## Configuring NGINX ingress monitoring
+## Configuring NGINX Ingress monitoring
If you have deployed NGINX Ingress using GitLab's [Kubernetes cluster integration](../../clusters/index.md#installing-applications), it will [automatically be monitored](#about-managed-nginx-ingress-deployments) by Prometheus.
@@ -30,7 +30,7 @@ For other deployments, there is [some configuration](#manually-setting-up-nginx-
### About managed NGINX Ingress deployments
-NGINX Ingress is deployed into the `gitlab-managed-apps` namespace, using the [official Helm chart](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress). NGINX Ingress will be [externally reachable via the Load Balancer's Endpoint](../../clusters/index.md#getting-the-external-endpoint).
+NGINX Ingress is deployed into the `gitlab-managed-apps` namespace, using the [official Helm chart](https://github.com/helm/charts/tree/master/stable/nginx-ingress). NGINX Ingress will be [externally reachable via the Load Balancer's Endpoint](../../clusters/index.md#getting-the-external-endpoint).
NGINX is configured for Prometheus monitoring, by setting:
@@ -42,14 +42,14 @@ When used in conjunction with the GitLab deployed Prometheus service, response m
### Manually setting up NGINX Ingress for Prometheus monitoring
-Version 0.9.0 and above of [NGINX ingress](https://github.com/kubernetes/ingress-nginx) have built-in support for exporting Prometheus metrics. To enable, a ConfigMap setting must be passed: `enable-vts-status: "true"`. Once enabled, a Prometheus metrics endpoint will start running on port 10254.
+Version 0.9.0 and above of [NGINX Ingress](https://github.com/kubernetes/ingress-nginx) has built-in support for exporting Prometheus metrics. To enable, a ConfigMap setting must be passed: `enable-vts-status: "true"`. Once enabled, a Prometheus metrics endpoint will start running on port 10254.
-Next, the ingress needs to be annotated for Prometheus monitoring. Two new annotations need to be added:
+Next, the Ingress needs to be annotated for Prometheus monitoring. Two new annotations need to be added:
- `prometheus.io/scrape: "true"`
- `prometheus.io/port: "10254"`
-Managing these settings depends on how NGINX ingress has been deployed. If you have deployed via the [official Helm chart](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress), metrics can be enabled with `controller.stats.enabled` along with the required annotations. Alternatively it is possible edit the NGINX ingress YML directly in the [Kubernetes dashboard](https://github.com/kubernetes/dashboard).
+Managing these settings depends on how NGINX Ingress has been deployed. If you have deployed via the [official Helm chart](https://github.com/helm/charts/tree/master/stable/nginx-ingress), metrics can be enabled with `controller.stats.enabled` along with the required annotations. Alternatively it is possible edit the NGINX Ingress YAML directly in the [Kubernetes dashboard](https://github.com/kubernetes/dashboard).
## Specifying the Environment label
diff --git a/doc/user/project/integrations/redmine.md b/doc/user/project/integrations/redmine.md
index 25b000b2753..56e219fade5 100644
--- a/doc/user/project/integrations/redmine.md
+++ b/doc/user/project/integrations/redmine.md
@@ -14,7 +14,7 @@
Once you have configured and enabled Redmine you'll see the Redmine link on the GitLab project pages that takes you to the appropriate Redmine project.
- As an example, below is a configuration for a project named gitlab-ci.
+ As an example, below is a configuration for a project named `gitlab-ci`.
![Redmine configuration](img/redmine_configuration.png)
diff --git a/doc/user/project/integrations/webhooks.md b/doc/user/project/integrations/webhooks.md
index ae6a215fc34..d0f538a4b52 100644
--- a/doc/user/project/integrations/webhooks.md
+++ b/doc/user/project/integrations/webhooks.md
@@ -53,7 +53,7 @@ Navigate to the webhooks page by going to your project's
[Slack](https://api.slack.com/incoming-webhooks) every time a job fails.
- You can [integrate with Twilio to be notified via SMS](https://www.datadoghq.com/blog/send-alerts-sms-customizable-webhooks-twilio/)
every time an issue is created for a specific project or group within GitLab
-- You can use them to [automatically assign labels to merge requests](https://about.gitlab.com/2016/08/19/applying-gitlab-labels-automatically/).
+- You can use them to [automatically assign labels to merge requests](https://about.gitlab.com/blog/2016/08/19/applying-gitlab-labels-automatically/).
## Webhook endpoint tips
@@ -107,6 +107,9 @@ detailed commit data is expensive. Note that despite only 20 commits being
present in the `commits` attribute, the `total_commits_count` attribute will
contain the actual total.
+Also, if a single push includes changes for more than three (by default, depending on
+[`push_event_hooks_limit` setting](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls)) branches, this hook won't be executed.
+
**Request header**:
```
@@ -190,6 +193,10 @@ X-Gitlab-Event: Push Hook
Triggered when you create (or delete) tags to the repository.
+NOTE: **Note:**
+If a single push includes changes for more than three (by default, depending on
+[`push_event_hooks_limit` setting](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls)) tags, this hook won't be executed.
+
**Request header**:
```
@@ -1251,8 +1258,8 @@ its description:
```
It will appear in the webhook body as the below (assuming that GitLab is
-installed at gitlab.example.com, and the project is at
-example-group/example-project):
+installed at `gitlab.example.com`, and the project is at
+`example-group/example-project`):
```markdown
![image](https://gitlab.example.com/example-group/example-project/uploads/$sha/image.png)
diff --git a/doc/user/project/issue_board.md b/doc/user/project/issue_board.md
index 0c0068ddd09..103d50a94e8 100644
--- a/doc/user/project/issue_board.md
+++ b/doc/user/project/issue_board.md
@@ -1,6 +1,6 @@
# Issue Boards
-> [Introduced][ce-5554] in [GitLab 8.11](https://about.gitlab.com/2016/08/22/gitlab-8-11-released/#issue-board).
+> [Introduced][ce-5554] in [GitLab 8.11](https://about.gitlab.com/blog/2016/08/22/gitlab-8-11-released/#issue-board).
## Overview
@@ -125,9 +125,9 @@ Cards finished by the UX team will automatically appear in the **Frontend** colu
NOTE: **Note:**
For a broader use case, please see the blog post
-[GitLab Workflow, an Overview](https://about.gitlab.com/2016/10/25/gitlab-workflow-an-overview/#gitlab-workflow-use-case-scenario).
+[GitLab Workflow, an Overview](https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/#gitlab-workflow-use-case-scenario).
For a real use case example, you can read why
-[Codepen decided to adopt Issue Boards](https://about.gitlab.com/2017/01/27/codepen-welcome-to-gitlab/#project-management-everything-in-one-place)
+[Codepen decided to adopt Issue Boards](https://about.gitlab.com/blog/2017/01/27/codepen-welcome-to-gitlab/#project-management-everything-in-one-place)
to improve their workflow with multiple boards.
#### Quick assignments
@@ -180,9 +180,21 @@ These are shortcuts to your last 4 visited boards.
When you're revisiting an issue board in a project or group with multiple boards,
GitLab will automatically load the last board you visited.
+### Multi-select Issue Cards
+
+As the name suggest, multi-select issue cards allows more than one issue card
+to be dragged and dropped across different lists. This becomes helpful while
+moving and grooming a lot of issues at once.
+
+You can multi-select an issue card by pressing `CTRL` + `Left mouse click` on
+Windows or `CMD` + `Left mouse click` on MacOS. Once done, start by dragging one
+of the issue card you have selected and drop it in the new list you want.
+
+![Multi-select Issue Cards](img/issue_boards_multi_select.png)
+
### Configurable Issue Boards **(STARTER)**
-> Introduced in [GitLab Starter Edition 10.2](https://about.gitlab.com/2017/11/22/gitlab-10-2-released/#issue-boards-configuration).
+> Introduced in [GitLab Starter Edition 10.2](https://about.gitlab.com/blog/2017/11/22/gitlab-10-2-released/#issue-boards-configuration).
An Issue Board can be associated with a GitLab [Milestone](milestones/index.md#milestones),
[Labels](labels.md), Assignee and Weight
@@ -202,7 +214,7 @@ If you don't have editing permission in a board, you're still able to see the co
### Focus mode **(STARTER)**
-> Introduced in [GitLab Starter 9.1](https://about.gitlab.com/2017/04/22/gitlab-9-1-released/#issue-boards-focus-mode-ees-eep).
+> Introduced in [GitLab Starter 9.1](https://about.gitlab.com/blog/2017/04/22/gitlab-9-1-released/#issue-boards-focus-mode-ees-eep).
Click the button at the top right to toggle focus mode on and off. In focus mode, the navigation UI is hidden, allowing you to focus on issues in the board.
@@ -218,7 +230,7 @@ especially in combination with [assignee lists](#assignee-lists-premium).
### Group Issue Boards **(PREMIUM)**
-> Introduced in [GitLab Premium 10.0](https://about.gitlab.com/2017/09/22/gitlab-10-0-released/#group-issue-boards).
+> Introduced in [GitLab Premium 10.0](https://about.gitlab.com/blog/2017/09/22/gitlab-10-0-released/#group-issue-boards).
Accessible at the group navigation level, a group issue board offers the same features as a project-level board,
but it can display issues from all projects in that
@@ -227,7 +239,7 @@ boards. When updating milestones and labels for an issue through the sidebar upd
group-level objects are available.
NOTE: **Note:**
-Multiple group issue boards were originally introduced in [GitLab 10.0 Premium](https://about.gitlab.com/2017/09/22/gitlab-10-0-released/#group-issue-boards) and
+Multiple group issue boards were originally introduced in [GitLab 10.0 Premium](https://about.gitlab.com/blog/2017/09/22/gitlab-10-0-released/#group-issue-boards) and
one group issue board per group was made available in GitLab 10.6 Core.
![Group issue board](img/group_issue_board.png)
diff --git a/doc/user/project/issues/crosslinking_issues.md b/doc/user/project/issues/crosslinking_issues.md
index ec9eb7b62bb..ba442ed0a38 100644
--- a/doc/user/project/issues/crosslinking_issues.md
+++ b/doc/user/project/issues/crosslinking_issues.md
@@ -26,7 +26,7 @@ git commit -m "this is my commit message. Related to https://gitlab.com/<usernam
Of course, you can replace `gitlab.com` with the URL of your own GitLab instance.
NOTE: **Note:** Linking your first commit to your issue is going to be relevant
-for tracking your process with [GitLab Cycle Analytics](https://about.gitlab.com/features/cycle-analytics/).
+for tracking your process with [GitLab Cycle Analytics](https://about.gitlab.com/product/cycle-analytics/).
It will measure the time taken for planning the implementation of that issue,
which is the time between creating an issue and making the first commit.
diff --git a/doc/user/project/issues/csv_export.md b/doc/user/project/issues/csv_export.md
index 6ad96f41572..fb7fdde7b94 100644
--- a/doc/user/project/issues/csv_export.md
+++ b/doc/user/project/issues/csv_export.md
@@ -1,6 +1,6 @@
# Export Issues to CSV **(STARTER)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/1126) in [GitLab Starter 9.0](https://about.gitlab.com/2017/03/22/gitlab-9-0-released/#export-issues-ees-eep).
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/1126) in [GitLab Starter 9.0](https://about.gitlab.com/blog/2017/03/22/gitlab-9-0-released/#export-issues-ees-eep).
Issues can be exported as CSV from GitLab and are sent to your default notification email as an attachment.
@@ -28,7 +28,7 @@ Among numerous use cases for exporting issues for CSV, we can name a few:
## Choosing which issues to include
-From the issues page you can narrow down which issues to export using the search bar, along with the All/Open/Closed tabs. All issues returned will be exported, including those not shown on the first page.
+After selecting a project, from the issues page you can narrow down which issues to export using the search bar, along with the All/Open/Closed tabs. All issues returned will be exported, including those not shown on the first page.
![CSV export button](img/csv_export_button.png)
@@ -72,4 +72,5 @@ Data will be encoded with a comma as the column delimiter, with `"` used to quot
## Limitations
-As the issues will be sent as an email attachment, there is a limit on how much data can be exported. Currently this limit is 15MB to ensure successful delivery across a range of email providers. If this limit is reached we suggest narrowing the search before export, perhaps by exporting open and closed issues separately.
+- Export Issues to CSV is not available at the Group's Issues List.
+- As the issues will be sent as an email attachment, there is a limit on how much data can be exported. Currently this limit is 15MB to ensure successful delivery across a range of email providers. If this limit is reached we suggest narrowing the search before export, perhaps by exporting open and closed issues separately.
diff --git a/doc/user/project/issues/design_management.md b/doc/user/project/issues/design_management.md
index 9850b401b6f..169da7049a6 100644
--- a/doc/user/project/issues/design_management.md
+++ b/doc/user/project/issues/design_management.md
@@ -38,7 +38,6 @@ to be enabled:
- Files uploaded must have a file extension of either `png`, `jpg`, `jpeg`, `gif`, `bmp`, `tiff` or `ico`.
The [`svg` extension is not yet supported](https://gitlab.com/gitlab-org/gitlab/issues/12771).
- Design uploads are limited to 10 files at a time.
-- [Designs cannot yet be deleted](https://gitlab.com/gitlab-org/gitlab/issues/11089).
- Design Management is
[not yet supported in the project export](https://gitlab.com/gitlab-org/gitlab/issues/11090).
- Design Management data
@@ -48,6 +47,8 @@ to be enabled:
when an issue is deleted.
- Design Management
[isn't supported by Geo](https://gitlab.com/groups/gitlab-org/-/epics/1633) yet.
+- Only the latest version of the designs can be deleted.
+- Deleted designs cannot be recovered but you can see them on previous designs versions.
## The Design Management page
@@ -62,15 +63,18 @@ To upload design images, click the **Upload Designs** button and select images t
Designs with the same filename as an existing uploaded design will create a new version
of the design, and will replace the previous version.
+Designs cannot be added if the issue has been moved, or its
+[discussion is locked](../../discussions/#lock-discussions).
+
## Viewing designs
-Images on the Design Management page can be enlarged by clicking on them.
+Images on the Design Management page can be enlarged by clicking on them.
The number of comments on a design — if any — is listed to the right
of the design filename. Clicking on this number enlarges the design
just like clicking anywhere else on the design.
When a design is added or modified, an icon is displayed on the item
-to help summarize changes between versions.
+to help summarize changes between versions.
| Indicator | Example |
| --------- | ------- |
@@ -78,6 +82,34 @@ to help summarize changes between versions.
| Modified (in the selected version) | ![Design Modified](img/design_modified_v12_3.png) |
| Added (in the selected version) | ![Design Added](img/design_added_v12_3.png) |
+## Deleting designs
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/11089) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.4.
+
+There are two ways to delete designs: manually delete them
+individually, or select a few of them to delete at once,
+as shown below.
+
+To delete a single design, click it to view it enlarged,
+then click the trash icon on the top right corner and confirm
+the deletion by clicking the **Delete** button on the modal window:
+
+![Confirm design deletion](img/confirm_design_deletion_v12_4.png)
+
+To delete multiple designs at once, on the design's list view,
+first select the designs you want to delete:
+
+![Select designs](img/select_designs_v12_4.png)
+
+Once selected, click the **Delete selected** button to confirm the deletion:
+
+![Delete multiple designs](img/delete_multiple_designs_v12_4.png)
+
+NOTE: **Note:**
+Only the latest version of the designs can be deleted.
+Deleted designs are not permanently lost; they can be
+viewed by browsing previous versions.
+
## Adding annotations to designs
When a design image is displayed, you can add annotations to it by clicking on
diff --git a/doc/user/project/issues/img/confirm_design_deletion_v12_4.png b/doc/user/project/issues/img/confirm_design_deletion_v12_4.png
new file mode 100644
index 00000000000..b1a55c639ca
--- /dev/null
+++ b/doc/user/project/issues/img/confirm_design_deletion_v12_4.png
Binary files differ
diff --git a/doc/user/project/issues/img/delete_multiple_designs_v12_4.png b/doc/user/project/issues/img/delete_multiple_designs_v12_4.png
new file mode 100644
index 00000000000..b421a5577df
--- /dev/null
+++ b/doc/user/project/issues/img/delete_multiple_designs_v12_4.png
Binary files differ
diff --git a/doc/user/project/issues/img/delete_single_design_v12_4.png b/doc/user/project/issues/img/delete_single_design_v12_4.png
new file mode 100644
index 00000000000..0ca03b48e76
--- /dev/null
+++ b/doc/user/project/issues/img/delete_single_design_v12_4.png
Binary files differ
diff --git a/doc/user/project/issues/img/select_all_designs_v12_4.png b/doc/user/project/issues/img/select_all_designs_v12_4.png
new file mode 100644
index 00000000000..b08b04c1214
--- /dev/null
+++ b/doc/user/project/issues/img/select_all_designs_v12_4.png
Binary files differ
diff --git a/doc/user/project/issues/img/select_designs_v12_4.png b/doc/user/project/issues/img/select_designs_v12_4.png
new file mode 100644
index 00000000000..a53bd516300
--- /dev/null
+++ b/doc/user/project/issues/img/select_designs_v12_4.png
Binary files differ
diff --git a/doc/user/project/issues/index.md b/doc/user/project/issues/index.md
index eaf4922bec9..6abd6fd7047 100644
--- a/doc/user/project/issues/index.md
+++ b/doc/user/project/issues/index.md
@@ -20,7 +20,7 @@ you can also view all the issues collectively at the group level.
- Accepting feature proposals, questions, support requests, or bug reports
- Elaborating on new code implementations
-See also [Always start a discussion with an issue](https://about.gitlab.com/2016/03/03/start-with-an-issue/).
+See also [Always start a discussion with an issue](https://about.gitlab.com/blog/2016/03/03/start-with-an-issue/).
## Parts of an issue
diff --git a/doc/user/project/issues/issue_data_and_actions.md b/doc/user/project/issues/issue_data_and_actions.md
index 5313975908b..01f4eb5b912 100644
--- a/doc/user/project/issues/issue_data_and_actions.md
+++ b/doc/user/project/issues/issue_data_and_actions.md
@@ -141,9 +141,9 @@ for the issue. This will automatically enable if you participate in the issue in
#### 14. Reference
-- A quick "copy to clipboard" button for that issue's reference, which looks like `foo/bar#xxx`,
- where `foo` is the `username` or `groupname`, `bar` is the `project-name`, and
- `xxx` is the issue number.
+- A quick "copy" button for that issue's reference, which looks like
+ `foo/bar#xxx`, where `foo` is the `username` or `groupname`, `bar` is the
+ `project-name`, and `xxx` is the issue number.
#### 15. Edit
diff --git a/doc/user/project/issues/multiple_assignees_for_issues.md b/doc/user/project/issues/multiple_assignees_for_issues.md
index a1b16457a0d..b442f70a061 100644
--- a/doc/user/project/issues/multiple_assignees_for_issues.md
+++ b/doc/user/project/issues/multiple_assignees_for_issues.md
@@ -2,7 +2,7 @@
> **Note:**
[Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1904)
-in [GitLab Starter 9.2](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#multiple-assignees-for-issues).
+in [GitLab Starter 9.2](https://about.gitlab.com/blog/2017/05/22/gitlab-9-2-released/#multiple-assignees-for-issues).
## Overview
diff --git a/doc/user/project/labels.md b/doc/user/project/labels.md
index 32c8c4d0453..cfd6d4eaf4b 100644
--- a/doc/user/project/labels.md
+++ b/doc/user/project/labels.md
@@ -2,9 +2,9 @@
## Overview
-Labels allow you to categorize issues or merge requests using descriptive titles like
+Labels allow you to categorize epics, issues, and merge requests using descriptive titles like
`bug`, `feature request`, or `docs`. Each label also has a customizable color. They
-allow you to quickly and dynamically filter and manage issues or merge requests you
+allow you to quickly and dynamically filter and manage epics, issues and merge requests you
care about, and are visible throughout GitLab in most places where issues and merge
requests are located.
@@ -12,8 +12,8 @@ requests are located.
In GitLab, you can create project and group labels:
-- **Project labels** can be assigned to issues or merge requests in that project only.
-- **Group labels** can be assigned to any issue or merge request in any project in
+- **Project labels** can be assigned to epics, issues and merge requests in that project only.
+- **Group labels** can be assigned to any epics, issue and merge request in any project in
that group, or any subgroups of the group.
## Scoped labels **(PREMIUM)**
@@ -21,7 +21,7 @@ In GitLab, you can create project and group labels:
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9175) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.10.
Scoped labels allow teams to use the simple and familiar label feature to
-annotate their issues, merge requests, and epics to achieve custom fields and
+annotate their epics, issues, merge requests, and epics to achieve custom fields and
custom workflow states by leveraging a special label title syntax.
A scoped label is a kind of label defined by a special double-colon syntax
@@ -141,11 +141,8 @@ action cannot be reversed and the changes are permanent.
## Assigning labels from the sidebar
-Every issue and merge request can be assigned any number of labels. The labels are
-visible on every issue and merge request page, in the sidebar. They are also visible on:
-
-- Every issue and merge request page in the sidebar.
-- The issue board.
+Every epic, issue, and merge request can be assigned any number of labels. The labels are
+visible on every epic, issue and merge request page, in the sidebar and on your issue boards.
From the sidebar, you can assign or unassign a label to the object (i.e. label or
unlabel it). You can also perform this as a [quick action](quick_actions.md),
@@ -166,11 +163,11 @@ GitLab will check both the label titles and descriptions for the search.
## Filtering by label
-The following can be filtered labels:
+The following can be filtered by labels:
+- Epic lists **(ULTIMATE)**
- Issue lists
- Merge Request lists
-- Epic lists **(ULTIMATE)**
- Issue Boards
### Filtering in list pages
@@ -180,7 +177,7 @@ The following can be filtered labels:
- Group labels (including subgroup ancestors)
- Project labels
-- From the group issue list page and the group merge request list page, you can
+- From the group epic lists page, issue list page and the group merge request list page, you can
[filter](../search/index.md#issues-and-merge-requests) by:
- Group labels (including subgroup ancestors and subgroup descendants)
- Project labels
@@ -214,7 +211,7 @@ The following can be filtered labels:
From the project label list page and the group label list page, you can subscribe
to [notifications](../../workflow/notifications.md) of a given label, to alert you
-that the label has been assigned to an issue or merge request.
+that the label has been assigned to an epic, issue, and merge request.
![Labels subscriptions](img/labels_subscriptions_v12_1.png)
@@ -226,7 +223,7 @@ that the label has been assigned to an issue or merge request.
> - Priority sorting is based on the highest priority label only. [This discussion](https://gitlab.com/gitlab-org/gitlab-foss/issues/18554) considers changing this.
Labels can have relative priorities, which are used in the "Label priority" and
-"Priority" sort orders of the issue and merge request list pages.
+"Priority" sort orders of the epic, issue, and merge request list pages.
From the project label list page, star a label to indicate that it has a priority.
@@ -242,8 +239,8 @@ on the project label list page.
![Drag to change label priority](img/labels_drag_priority_v12_1.gif)
-On the merge request and issue pages, for both groups and projects, you can sort by `Label priority`
-and `Priority`, which account for objects (issues and merge requests) that have prioritized
+On the epic, merge request and issue pages, for both groups and projects, you can sort by `Label priority`
+and `Priority`, which account for objects (epic, issues, and merge requests) that have prioritized
labels assigned to them.
If you sort by `Label priority`, GitLab considers this sort comparison order:
diff --git a/doc/user/project/merge_requests/allow_collaboration.md b/doc/user/project/merge_requests/allow_collaboration.md
index 3a389eb1e3a..083a117600b 100644
--- a/doc/user/project/merge_requests/allow_collaboration.md
+++ b/doc/user/project/merge_requests/allow_collaboration.md
@@ -52,7 +52,7 @@ Here's how the process would look like:
![Check out branch button](img/checkout_button.png)
-1. Use the copy to clipboard button to copy the first command and paste them
+1. Use the copy button to copy the first command and paste them
in your terminal:
```sh
diff --git a/doc/user/project/merge_requests/browser_performance_testing.md b/doc/user/project/merge_requests/browser_performance_testing.md
index de8a47f3d73..3cfc30a68e9 100644
--- a/doc/user/project/merge_requests/browser_performance_testing.md
+++ b/doc/user/project/merge_requests/browser_performance_testing.md
@@ -44,7 +44,7 @@ For instance, consider the following workflow:
First of all, you need to define a job in your `.gitlab-ci.yml` file that generates the
[Performance report artifact](../../../ci/yaml/README.md#artifactsreportsperformance-premium).
For more information on how the Performance job should look like, check the
-example on [Testing Browser Performance](../../../ci/examples/browser_performance.md).
+example on [Configuring Browser Performance Testing](#configuring-browser-performance-testing).
GitLab then checks this report, compares key performance metrics for each page
between the source and target branches, and shows the information right on the merge request.
@@ -60,11 +60,6 @@ report will be shown properly.
## Configuring Browser Performance Testing
-NOTE: **Note:**
-The job definition shown below is supported in GitLab 11.5 and later versions.
-It also requires GitLab Runner 11.5 or later. For earlier versions, use the
-[previous job definitions](#previous-job-definitions).
-
This example shows how to run the [sitespeed.io container](https://hub.docker.com/r/sitespeedio/sitespeed.io/)
on your code by using GitLab CI/CD and [sitespeed.io](https://www.sitespeed.io)
using Docker-in-Docker.
@@ -73,29 +68,35 @@ First, you need GitLab Runner with
[docker-in-docker build](../../../ci/docker/using_docker_build.md#use-docker-in-docker-workflow-with-docker-executor).
Once you set up the Runner, add a new job to `.gitlab-ci.yml` that generates the
-expected report:
+expected report.
+
+For GitLab 12.4 and later, to define the `performance` job, you must
+[include](../../../ci/yaml/README.md#includetemplate) the
+[`Browser-Performance.gitlab-ci.yml` template](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Verify/Browser-Performance.gitlab-ci.yml)
+that's provided as a part of your GitLab installation.
+For GitLab versions earlier than 12.4, you can copy and use the job as defined
+in that template.
+
+CAUTION: **Caution:**
+The job definition provided by the template does not support Kubernetes yet. For a complete example of a more complex setup
+that works in Kubernetes, see [here](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Browser-Performance-Testing.gitlab-ci.yml).
+
+Add the following to your `.gitlab-ci.yml` file:
```yaml
+include:
+ template: Verify/Browser-Performance.gitlab-ci.yml
+
performance:
- stage: performance
- image: docker:git
variables:
URL: https://example.com
- services:
- - docker:stable-dind
- script:
- - mkdir gitlab-exporter
- - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js
- - mkdir sitespeed-results
- - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results $URL
- - mv sitespeed-results/data/performance.json performance.json
- artifacts:
- paths:
- - sitespeed-results/
- reports:
- performance: performance.json
```
+CAUTION: **Caution:**
+The job definition provided by the template is supported in GitLab 11.5 and later versions.
+It also requires GitLab Runner 11.5 or later. For earlier versions, use the
+[previous job definitions](#previous-job-definitions).
+
The above example will create a `performance` job in your CI/CD pipeline and will run
sitespeed.io against the webpage you defined in `URL` to gather key metrics.
The [GitLab plugin for sitespeed.io](https://gitlab.com/gitlab-org/gl-performance)
@@ -106,6 +107,20 @@ take the latest Performance artifact available.
The full HTML sitespeed.io report will also be saved as an artifact, and if you have
[GitLab Pages](../pages/index.md) enabled, it can be viewed directly in your browser.
+It is also possible to customize options by setting the `SITESPEED_OPTIONS` variable.
+For example, this is how to override the number of runs sitespeed.io
+will make on the given URL:
+
+```yaml
+include:
+ template: Verify/Browser-Performance.gitlab-ci.yml
+
+performance:
+ variables:
+ URL: https://example.com
+ SITESPEED_OPTIONS: -n 5
+```
+
For further customization options for sitespeed.io, including the ability to provide a
list of URLs to test, please see the [Sitespeed.io Configuration](https://www.sitespeed.io/documentation/sitespeed.io/configuration/)
documentation.
@@ -126,8 +141,9 @@ set this up:
as an artifact is as simple as `echo $CI_ENVIRONMENT_URL > environment_url.txt`
in your job's `script`.
1. In the `performance` job, read the previous artifact into an environment
- variable, like `$CI_ENVIRONMENT_URL`, and use it to parameterize the test
- URLs.
+ variable, in this case `$URL` because this is what our sitespeed.io command
+ uses for the URL parameter. Because Review App URLs are dynamic, we define
+ the `URL` variable through `before_script` instead of `variables`.
1. You can now run the sitespeed.io container against the desired hostname and
paths.
@@ -138,6 +154,9 @@ stages:
- deploy
- performance
+include:
+ template: Verify/Browser-Performance.gitlab-ci.yml
+
review:
stage: deploy
environment:
@@ -155,28 +174,12 @@ review:
- master
performance:
- stage: performance
- image: docker:git
- services:
- - docker:stable-dind
dependencies:
- review
- script:
- - export CI_ENVIRONMENT_URL=$(cat environment_url.txt)
- - mkdir gitlab-exporter
- - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js
- - mkdir sitespeed-results
- - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "$CI_ENVIRONMENT_URL"
- - mv sitespeed-results/data/performance.json performance.json
- artifacts:
- paths:
- - sitespeed-results/
- reports:
- performance: performance.json
+ before_script:
+ - export URL=$(cat environment_url.txt)
```
-A complete example can be found in our [Auto DevOps CI YML](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml).
-
### Previous job definitions
CAUTION: **Caution:**
diff --git a/doc/user/project/merge_requests/code_quality.md b/doc/user/project/merge_requests/code_quality.md
index 3c667755787..92681e741de 100644
--- a/doc/user/project/merge_requests/code_quality.md
+++ b/doc/user/project/merge_requests/code_quality.md
@@ -66,6 +66,13 @@ will scan your source code for code quality issues. The report will be saved as
that you can later download and analyze. Due to implementation limitations we always
take the latest Code Quality artifact available.
+The included `code_quality` job is running in the `test` stage, so it needs to be included in your CI config, like so:
+
+```yaml
+stages:
+ - test
+```
+
TIP: **Tip:**
This information will be automatically extracted and shown right in the merge request widget.
diff --git a/doc/user/project/merge_requests/img/cross_project_dependencies_edit_inaccessible_v12_2.png b/doc/user/project/merge_requests/img/cross_project_dependencies_edit_inaccessible_v12_2.png
deleted file mode 100644
index 2dc02634fd8..00000000000
--- a/doc/user/project/merge_requests/img/cross_project_dependencies_edit_inaccessible_v12_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/cross_project_dependencies_edit_v12_2.png b/doc/user/project/merge_requests/img/cross_project_dependencies_edit_v12_2.png
deleted file mode 100644
index 362e7e0ead2..00000000000
--- a/doc/user/project/merge_requests/img/cross_project_dependencies_edit_v12_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/dependencies_edit_inaccessible_v12_4.png b/doc/user/project/merge_requests/img/dependencies_edit_inaccessible_v12_4.png
new file mode 100644
index 00000000000..3699ffd16b4
--- /dev/null
+++ b/doc/user/project/merge_requests/img/dependencies_edit_inaccessible_v12_4.png
Binary files differ
diff --git a/doc/user/project/merge_requests/img/dependencies_edit_v12_4.png b/doc/user/project/merge_requests/img/dependencies_edit_v12_4.png
new file mode 100644
index 00000000000..beb452e80cf
--- /dev/null
+++ b/doc/user/project/merge_requests/img/dependencies_edit_v12_4.png
Binary files differ
diff --git a/doc/user/project/merge_requests/img/cross_project_dependencies_view_v12_2.png b/doc/user/project/merge_requests/img/dependencies_view_v12_2.png
index e00231c839b..e00231c839b 100644
--- a/doc/user/project/merge_requests/img/cross_project_dependencies_view_v12_2.png
+++ b/doc/user/project/merge_requests/img/dependencies_view_v12_2.png
Binary files differ
diff --git a/doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_4.png b/doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_4.png
new file mode 100755
index 00000000000..c704129685f
--- /dev/null
+++ b/doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_4.png
Binary files differ
diff --git a/doc/user/project/merge_requests/index.md b/doc/user/project/merge_requests/index.md
index 3f563d58287..2ab7c3fb15b 100644
--- a/doc/user/project/merge_requests/index.md
+++ b/doc/user/project/merge_requests/index.md
@@ -47,7 +47,7 @@ With **[GitLab Enterprise Edition][ee]**, you can also:
- Analyze your dependencies for vulnerabilities with [Dependency Scanning](../../application_security/dependency_scanning/index.md) **(ULTIMATE)**
- Analyze your Docker images for vulnerabilities with [Container Scanning](../../application_security/container_scanning/index.md) **(ULTIMATE)**
- Determine the performance impact of changes with [Browser Performance Testing](#browser-performance-testing-premium) **(PREMIUM)**
-- Specify merge order dependencies with [Cross-project Merge Request Dependencies](#cross-project-merge-request-dependencies-premium) **(PREMIUM)**
+- Specify merge order dependencies with [Merge Request Dependencies](#merge-request-dependencies-premium) **(PREMIUM)**
## Use cases
@@ -70,7 +70,7 @@ B. Consider you're a web developer writing a webpage for your company's website:
1. Your changes are previewed with [Review Apps](../../../ci/review_apps/index.md)
1. You request your web designers for their implementation
1. You request the [approval](merge_request_approvals.md) from your manager **(STARTER)**
-1. Once approved, your merge request is [squashed and merged](squash_and_merge.md), and [deployed to staging with GitLab Pages](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/)
+1. Once approved, your merge request is [squashed and merged](squash_and_merge.md), and [deployed to staging with GitLab Pages](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/)
1. Your production team [cherry picks](#cherry-pick-changes) the merge commit into production
## Merge requests per project
@@ -221,7 +221,7 @@ to learn more.
## Multiple assignees **(STARTER)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/2004)
-in [GitLab Starter 11.11](https://about.gitlab.com/pricing).
+in [GitLab Starter 11.11](https://about.gitlab.com/pricing/).
Multiple people often review merge requests at the same time. GitLab allows you to have multiple assignees for merge requests to indicate everyone that is reviewing or accountable for it.
@@ -290,140 +290,10 @@ apply the patches. The target branch can be specified using the
[`/target_branch` quick action](../quick_actions.md). If the source
branch already exists, the patches will be applied on top of it.
-## Git push options
+## Use Git push options with merge requests
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/26752) in GitLab 11.10.
-
-NOTE: **Note:**
-Git push options are only available with Git 2.10 or newer. With Git older than 2.18
-`git push --push-option=...` should be used instead of `git push -o ...`.
-
-GitLab supports using
-[Git push options](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt)
-to perform the following actions against merge requests at the same time
-as pushing changes:
-
-- Create a new merge request for the pushed branch.
-- Set the target of the merge request to a particular branch.
-- Set the merge request to merge when its pipeline succeeds.
-- Set the merge request to remove the source branch when it's merged.
-- Set the title of the merge request to a particular title.
-- Set the description of the merge request to a particular description.
-- Add or remove labels from the merge request.
-
-### Create a new merge request using git push options
-
-To create a new merge request for a branch, use the
-`merge_request.create` push option:
-
-```sh
-git push -o merge_request.create
-```
-
-### Set the target branch of a merge request using git push options
-
-To update an existing merge request's target branch, use the
-`merge_request.target=<branch_name>` push option:
-
-```sh
-git push -o merge_request.target=branch_name
-```
-
-You can also create a merge request and set its target branch at the
-same time using a `-o` flag per push option:
-
-```sh
-git push -o merge_request.create -o merge_request.target=branch_name
-```
-
-### Set merge when pipeline succeeds using git push options
-
-To set an existing merge request to
-[merge when its pipeline succeeds](merge_when_pipeline_succeeds.md), use
-the `merge_request.merge_when_pipeline_succeeds` push option:
-
-```sh
-git push -o merge_request.merge_when_pipeline_succeeds
-```
-
-You can also create a merge request and set it to merge when its
-pipeline succeeds at the same time using a `-o` flag per push option:
-
-```sh
-git push -o merge_request.create -o merge_request.merge_when_pipeline_succeeds
-```
-
-### Set removing the source branch using git push options
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/64320) in GitLab 12.2.
-
-To set an existing merge request to remove the source branch when the
-merge request is merged, the
-`merge_request.remove_source_branch` push option can be used:
-
-```sh
-git push -o merge_request.remove_source_branch
-```
-
-You can also use this push option in addition to the
-`merge_request.create` push option.
-
-### Set merge request title using git push options
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/64320) in GitLab 12.2.
-
-To set the title of an existing merge request, use
-the `merge_request.title` push option:
-
-```sh
-git push -o merge_request.title="The title I want"
-```
-
-You can also use this push option in addition to the
-`merge_request.create` push option.
-
-### Set merge request description using git push options
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/64320) in GitLab 12.2.
-
-To set the description of an existing merge request, use
-the `merge_request.description` push option:
-
-```sh
-git push -o merge_request.description="The description I want"
-```
-
-You can also use this push option in addition to the
-`merge_request.create` push option.
-
-### Add or remove labels using git push options
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31831) in GitLab 12.3.
-
-You can add or remove labels from merge requests using push options.
-
-For example, to add two labels to an existing merge request, use the
-`merge_request.label` push option:
-
-```sh
-git push -o merge_request.label="label1" -o merge_request.label="label2"
-```
-
-To remove two labels from an existing merge request, use
-the `merge_request.unlabel` push option:
-
-```sh
-git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2"
-```
-
-You can also use these push options in addition to the
-`merge_request.create` push option.
-
-To create a merge request and add two labels to it, use:
-
-```sh
-git push -o merge_request.create -o merge_request.label="label1" -o merge_request.label="label2"
-```
+Use [Git push options](../push_options.md) to create or update merge requests when
+pushing changes to GitLab with Git, without needing to use the GitLab interface.
## Find the merge request that introduced a change
@@ -465,11 +335,11 @@ have been marked as a **Work In Progress**.
## Merge Requests for Confidential Issues
Create [merge requests to resolve confidential issues](../issues/confidential_issues.md#merge-requests-for-confidential-issues)
-for preventing leakage or early release of sentive data through regular merge requests.
+for preventing leakage or early release of sensitive data through regular merge requests.
## Merge request approvals **(STARTER)**
-> Included in [GitLab Starter][products].
+> Included in [GitLab Starter](https://about.gitlab.com/product/).
If you want to make sure every merge request is approved by one or more people,
you can enforce this workflow by using merge request approvals. Merge request
@@ -480,7 +350,7 @@ list of approvers that will need to approve every merge request in a project.
## Code Quality **(STARTER)**
-> Introduced in [GitLab Starter][products] 9.3.
+> Introduced in [GitLab Starter](https://about.gitlab.com/product/) 9.3.
If you are using [GitLab CI][ci], you can analyze your source code quality using
the [Code Climate][cc] analyzer [Docker image][cd]. Going a step further, GitLab
@@ -490,7 +360,7 @@ can show the Code Climate report right in the merge request widget area.
## Metrics Reports **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9788) in [GitLab Premium][products] 11.10.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9788) in [GitLab Premium](https://about.gitlab.com/product/) 11.10.
Requires GitLab Runner 11.10 and above.
If you are using [GitLab CI][ci], you can configure your job to output custom
@@ -501,7 +371,7 @@ that it's fast and easy to identify changes to important metrics.
## Browser Performance Testing **(PREMIUM)**
-> Introduced in [GitLab Premium][products] 10.3.
+> Introduced in [GitLab Premium](https://about.gitlab.com/product/) 10.3.
If your application offers a web interface and you are using [GitLab CI/CD][ci], you can quickly determine the performance impact of pending code changes. GitLab uses [Sitespeed.io][sitespeed], a free and open source tool for measuring the performance of web sites, to analyze the performance of specific pages.
@@ -509,9 +379,9 @@ GitLab runs the [Sitespeed.io container][sitespeed-container] and displays the d
[Read more about Browser Performance Testing.](browser_performance_testing.md)
-## Cross-project Merge Request Dependencies **(PREMIUM)**
+## Merge Request Dependencies **(PREMIUM)**
-> Introduced in [GitLab Premium][products] 12.2.
+> Introduced in [GitLab Premium](https://about.gitlab.com/product/) 12.2.
A single logical change may be split across several merge requests, across
several projects. When this happens, the order in which MRs are merged is
@@ -522,7 +392,7 @@ this relationship in place, the merge request cannot be merged until all of its
dependencies have also been merged, helping to maintain the consistency of a
single logical change.
-[Read more about cross-project merge request dependencies.](merge_request_dependencies.md)
+[Read more about merge request dependencies.](merge_request_dependencies.md)
## Security reports **(ULTIMATE)**
@@ -570,7 +440,7 @@ whitespace changes.
## Live preview with Review Apps
-If you configured [Review Apps](https://about.gitlab.com/features/review-apps/) for your project,
+If you configured [Review Apps](https://about.gitlab.com/product/review-apps/) for your project,
you can preview the changes submitted to a feature-branch through a merge request
in a per-branch basis. No need to checkout the branch, install and preview locally;
all your changes will be available to preview by anyone with the Review Apps link.
@@ -666,7 +536,7 @@ tricks to checkout a merge request locally.
Please note that you can checkout a merge request locally even if the source
project is a fork (even a private fork) of the target project.
-#### Checkout locally by adding a git alias
+#### Checkout locally by adding a Git alias
Add the following alias to your `~/.gitconfig`:
@@ -736,10 +606,8 @@ And to check out a particular merge request:
git checkout origin/merge-requests/1
```
-all the above can be done with [git-mr] script.
+All the above can be done with the [`git-mr`](https://gitlab.com/glensc/git-mr) script.
-[git-mr]: https://gitlab.com/glensc/git-mr
-[products]: https://about.gitlab.com/products/ "GitLab products page"
[protected branches]: ../protected_branches.md
[ci]: ../../../ci/README.md
[cc]: https://codeclimate.com/
diff --git a/doc/user/project/merge_requests/merge_request_approvals.md b/doc/user/project/merge_requests/merge_request_approvals.md
index 6f8d821e1c6..2aa92ba2316 100644
--- a/doc/user/project/merge_requests/merge_request_approvals.md
+++ b/doc/user/project/merge_requests/merge_request_approvals.md
@@ -4,7 +4,7 @@ type: reference, concepts
# Merge request approvals **(STARTER)**
-> Introduced in [GitLab Enterprise Edition 7.12](https://about.gitlab.com/2015/06/22/gitlab-7-12-released/#merge-request-approvers-ee-only).
+> Introduced in [GitLab Enterprise Edition 7.12](https://about.gitlab.com/blog/2015/06/22/gitlab-7-12-released/#merge-request-approvers-ee-only).
Merge request approvals enable enforced code review by requiring specified people
to approve a merge request before it can be unblocked for merging.
@@ -66,13 +66,7 @@ suitable to your workflow:
## Editing approvals **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1979) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.8.
-
-CAUTION: **Caution:**
-There was a [regression affecting this feature in 11.8](https://gitlab.com/gitlab-org/gitlab/merge_requests/9648). We recommend upgrading _at least_ to version 11.8.2. to avoid any issues.
-
-NOTE: **Note:**
-In 11.8 this feature does not work in [private groups](https://gitlab.com/gitlab-org/gitlab/issues/10356).
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1979) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.10.
For GitLab Premium, [multiple approver rules](#multiple-approval-rules-premium) can be configured. To configure the merge
request approval rules:
@@ -87,7 +81,7 @@ request approval rules:
## Multiple approval rules **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1979) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.8.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/1979) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.10.
For GitLab Premium, a merge request's overall approval status is determined by a set of rules. Each rule contains:
@@ -107,7 +101,7 @@ any [eligible approver](#eligible-approvers) may approve.
The following can approve merge requests:
- Users being added as approvers at project or merge request level.
-- [Code owners](../code_owners.md) related to the merge request ([introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/7933) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.5).
+- [Code owners](#code-owners-as-eligible-approvers-starter) to the files changed by the merge request.
An individual user can be added as an approver for a project if they are a member of:
@@ -125,6 +119,31 @@ if [**Prevent author approval**](#allowing-merge-request-authors-to-approve-thei
and [**Prevent committers approval**](#prevent-approval-of-merge-requests-by-their-committers) (disabled by default)
are enabled on the project settings.
+### Code Owners as eligible approvers **(STARTER)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/7933) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.5.
+
+Once you've added [Code Owners](../code_owners.md) to your
+repository, the owners to the corresponding files will become
+eligible approvers, together with members with Developer or
+higher permissions.
+
+To enable this merge request approval rule:
+
+1. Navigate to your project's **Settings > General** and expand
+**Merge request approvals**.
+1. Locate **All members with Developer role or higher and code owners (if any)** and click **Edit** to choose the number of approvals required.
+
+![MR approvals by Code Owners](img/mr_approvals_by_code_owners_v12_4.png)
+
+Once set, merge requests can only be merged once approved by the
+number of approvals you've set. GitLab will accept approvals from
+users with Developer or higher permissions, as well as by Code Owners,
+indistinguishably.
+
+Alternatively, you can **require**
+[Code Owner's approvals for Protected Branches](../protected_branches.md#protected-branches-approval-by-code-owners-premium). **(PREMIUM)**
+
### Implicit approvers
If the number of required approvals is greater than the number of approvers,
@@ -168,26 +187,6 @@ are other conditions that may block it, such as merge conflicts,
[pending discussions](../../discussions/index.md#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved)
or a [failed CI/CD pipeline](merge_when_pipeline_succeeds.md).
-## Code Owners approvals **(PREMIUM)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/4418) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.9.
-
-It is possible to require at least one approval for each entry in the
-[`CODEOWNERS` file](../code_owners.md) that matches a file changed in
-the merge request. To enable this feature:
-
-1. Navigate to your project's **Settings > General** and expand
- **Merge request approvals**.
-1. Tick the **Require approval from code owners** checkbox.
-1. Click **Save changes**.
-
-When this feature is enabled, all merge requests will need approval
-from one code owner per matched rule before it can be merged.
-
-NOTE: **Note:** Only the `CODEOWNERS` file on the default branch is evaluated for
-Merge Request approvals. If `CODEOWNERS` is changed on a non-default branch, those
-changes will not affect approvals until merged to the default branch.
-
## Overriding the merge request approvals default settings
> Introduced in GitLab Enterprise Edition 9.4.
@@ -329,7 +328,7 @@ the dropdown) `approver` and select the user.
## Security approvals in merge requests **(ULTIMATE)**
-> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing) 12.2.
+> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.2.
Merge Request Approvals can be configured to require approval from a member
of your security team when a vulnerability would be introduced by a merge request.
@@ -337,6 +336,16 @@ of your security team when a vulnerability would be introduced by a merge reques
For more information, see
[Security approvals in merge requests](../../application_security/index.md#security-approvals-in-merge-requests-ultimate).
+## License compliance approvals in merge requests **(ULTIMATE)**
+
+> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.3.
+
+Merge Request Approvals can be configured to require approval from a member
+of your security team when a blacklisted software license would be introduced by a merge request.
+
+For more information, see
+[Security approvals in merge requests](../../application_security/index.md#security-approvals-in-merge-requests-ultimate).
+
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
diff --git a/doc/user/project/merge_requests/merge_request_dependencies.md b/doc/user/project/merge_requests/merge_request_dependencies.md
index c982bd7f78d..c99e6663093 100644
--- a/doc/user/project/merge_requests/merge_request_dependencies.md
+++ b/doc/user/project/merge_requests/merge_request_dependencies.md
@@ -2,14 +2,17 @@
type: reference, concepts
---
-# Cross-project Merge Request dependencies **(PREMIUM)**
+# Merge Request dependencies **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9688) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9688) in
+[GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
+> - [Renamed](https://gitlab.com/gitlab-org/gitlab/merge_requests/17291) from
+"Cross-project dependencies" to "Merge Requests dependencies" in
+[GitLab Premium](https://about.gitlab.com/pricing/) 12.4.
-Cross-project merge request dependencies allows a required order of merging
-between merge requests in different projects to be expressed. If a
-merge request "depends on" another, then it cannot be merged until its
-dependency is itself merged.
+Merge request dependencies allows a required order of merging
+between merge requests to be expressed. If a merge request "depends on" another,
+then it cannot be merged until its dependency is itself merged.
NOTE: **Note:**
Merge requests dependencies are a **PREMIUM** feature, but this restriction is
@@ -58,20 +61,20 @@ instead.
To continue the above example, you can configure a dependency when creating the
new merge request in `awesome-project` (or by editing it, if it already exists).
The dependency needs to be configured on the **dependent** merge
-request. There is a "Cross-project dependencies" section in the form:
+request. There is a **Merge request dependencies** section in the form:
-![Cross-project dependencies form control](img/cross_project_dependencies_edit_v12_2.png)
+![Merge request dependencies form control](img/dependencies_edit_v12_4.png)
Anyone who can edit a merge request can change the list of dependencies.
New dependencies can be added by reference, or by URL. To remove a dependency,
press the **X** by its reference.
-As dependencies are specified across projects, it's possible that someone else
+As dependencies can be specified across projects, it's possible that someone else
has added a dependency for a merge request in a project you don't have access to.
These are shown as a simple count:
-![Cross-project dependencies form control with inaccessible merge requests](img/cross_project_dependencies_edit_inaccessible_v12_2.png)
+![Merge request dependencies form control with inaccessible merge requests](img/dependencies_edit_inaccessible_v12_4.png)
If necessary, you can remove all the dependencies like this by pressing the
**X**, just as you would for a single, visible dependency.
@@ -82,7 +85,7 @@ or **Cancel** to return without making any changes.
The list of configured dependencies, and the status of each one, is shown in the
merge request widget:
-![Cross-project dependencies in merge request widget](img/cross_project_dependencies_view_v12_2.png)
+![Dependencies in merge request widget](img/dependencies_view_v12_2.png)
Until all dependencies have, themselves, been merged, the **Merge**
button will be disabled for the dependent merge request. In
@@ -97,9 +100,9 @@ merge.
## Limitations
-- API support: [gitlab-ee#12551](https://gitlab.com/gitlab-org/gitlab/issues/12551)
-- Dependencies are not preserved across project export/import: [gitlab-ee#12549](https://gitlab.com/gitlab-org/gitlab/issues/12549)
-- Complex merge order dependencies are not supported: [gitlab-ee#11393](https://gitlab.com/gitlab-org/gitlab/issues/11393)
+- API support: [issue #12551](https://gitlab.com/gitlab-org/gitlab/issues/12551)
+- Dependencies are not preserved across project export/import: [issue #12549](https://gitlab.com/gitlab-org/gitlab/issues/12549)
+- Complex merge order dependencies are not supported: [issue #11393](https://gitlab.com/gitlab-org/gitlab/issues/11393)
The last item merits a little more explanation. Dependencies between merge
requests can be described as a graph of relationships. The simplest possible
diff --git a/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md b/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md
index b717cb0ec24..dab2184448a 100644
--- a/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md
+++ b/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md
@@ -36,11 +36,19 @@ changes to be reviewed.
## Only allow merge requests to be merged if the pipeline succeeds
You can prevent merge requests from being merged if their pipeline did not succeed
-or if there are threads to be resolved.
+or if there are threads to be resolved. This works for both:
-Navigate to your project's settings page and expand the **Merge requests** section.
-In the **Merge checks** subsection, select the **Pipelines must succeed** check
-box and hit **Save** for the changes to take effect.
+- GitLab CI/CD pipelines
+- Pipelines run from an [external CI integration](../integrations/project_services.md#services)
+
+As a result, [disabling GitLab CI/CD pipelines](../../../ci/enable_or_disable_ci.md)
+will not disable this feature, as it will still be possible to use pipelines from external
+CI providers with this feature. To enable it, you must:
+
+1. Navigate to your project's **Settings > General** page.
+1. Expand the **Merge requests** section.
+1. In the **Merge checks** subsection, select the **Pipelines must succeed** checkbox.
+1. Press **Save** for the changes to take effect.
NOTE: **Note:** This setting also prevents merge requests from being merged if there is no pipeline.
diff --git a/doc/user/project/milestones/index.md b/doc/user/project/milestones/index.md
index 453983fa882..105854ccd33 100644
--- a/doc/user/project/milestones/index.md
+++ b/doc/user/project/milestones/index.md
@@ -130,13 +130,13 @@ These features are only available for project milestones and not group milestone
### Project Burndown Charts **(STARTER)**
-For project milestones in [GitLab Starter](https://about.gitlab.com/pricing), a [burndown chart](burndown_charts.md) is in the milestone view, showing the progress of completing a milestone.
+For project milestones in [GitLab Starter](https://about.gitlab.com/pricing/), a [burndown chart](burndown_charts.md) is in the milestone view, showing the progress of completing a milestone.
![burndown chart](img/burndown_chart.png)
### Group Burndown Charts **(PREMIUM)**
-For group milestones in [GitLab Premium](https://about.gitlab.com/pricing), a [burndown chart](burndown_charts.md) is in the milestone view, showing the progress of completing a milestone.
+For group milestones in [GitLab Premium](https://about.gitlab.com/pricing/), a [burndown chart](burndown_charts.md) is in the milestone view, showing the progress of completing a milestone.
### Milestone sidebar
diff --git a/doc/user/project/new_ci_build_permissions_model.md b/doc/user/project/new_ci_build_permissions_model.md
index 0e60c4eca75..5f3bb83df70 100644
--- a/doc/user/project/new_ci_build_permissions_model.md
+++ b/doc/user/project/new_ci_build_permissions_model.md
@@ -47,7 +47,7 @@ It is important to note that we have a few types of users:
Administrator will have to be a member of it in order to have access to it
via another project's job.
-- **External users**: CI jobs created by [external users](../permissions.md#external-users-permissions) will have
+- **External users**: CI jobs created by [external users](../permissions.md#external-users-core-only) will have
access only to projects to which user has at least reporter access. This
rules out accessing all internal projects by default.
@@ -58,7 +58,7 @@ Let's consider the following scenario:
hosted in private repositories and you have multiple CI jobs that make use
of these repositories.
-1. You invite a new [external user](../permissions.md#external-users-permissions). CI jobs created by that user do not
+1. You invite a new [external user](../permissions.md#external-users-core-only). CI jobs created by that user do not
have access to internal repositories, because the user also doesn't have the
access from within GitLab. You as an employee have to grant explicit access
for this user. This allows us to prevent from accidental data leakage.
diff --git a/doc/user/project/operations/feature_flags.md b/doc/user/project/operations/feature_flags.md
index 97b3ca0067e..08df92959c3 100644
--- a/doc/user/project/operations/feature_flags.md
+++ b/doc/user/project/operations/feature_flags.md
@@ -174,9 +174,9 @@ Official clients:
Community contributed clients:
-- [stiano/unleash-client-dotnet](https://github.com/stiano/unleash-client-dotnet) (.Net Core)
-- [onybo/unleash-client-core](https://github.com/onybo/unleash-client-core) (.Net Core)
-- [aes/unleash-client-python](https://github.com/aes/unleash-client-python) (Python 3)
+- [Unleash FeatureToggle Client for .Net](https://github.com/stiano/unleash-client-dotnet)
+- [Unofficial .Net Core Unleash client](https://github.com/onybo/unleash-client-core)
+- [Unleash client for Python 3](https://github.com/aes/unleash-client-python)
### Golang application example
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/dns_concepts.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/dns_concepts.md
index dc75eb450a3..e561da423f4 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/dns_concepts.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/dns_concepts.md
@@ -27,16 +27,16 @@ to do it for you.
To help you out, we've gathered some instructions on how to do that
for the most popular hosting services:
-- [Amazon](http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-configure-route53.html)
+- [Amazon](https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html)
- [Bluehost](https://my.bluehost.com/cgi/help/559)
- [CloudFlare](https://support.cloudflare.com/hc/en-us/articles/200169096-How-do-I-add-A-records-)
-- [cPanel](https://documentation.cpanel.net/display/ALD/Edit+DNS+Zone)
+- [cPanel](https://documentation.cpanel.net/display/84Docs/Edit+DNS+Zone)
- [DreamHost](https://help.dreamhost.com/hc/en-us/articles/215414867-How-do-I-add-custom-DNS-records-)
- [Go Daddy](https://www.godaddy.com/help/add-an-a-record-19238)
-- [Hostgator](http://support.hostgator.com/articles/changing-dns-records)
+- [Hostgator](https://www.hostgator.com/help/article/changing-dns-records)
- [Inmotion hosting](https://my.bluehost.com/cgi/help/559)
- [Media Temple](https://mediatemple.net/community/products/dv/204403794/how-can-i-change-the-dns-records-for-my-domain)
-- [Microsoft](https://msdn.microsoft.com/en-us/library/bb727018.aspx)
+- [Microsoft](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/bb727018(v=technet.10))
If your hosting service is not listed above, you can just try to
search the web for `how to add dns record on <my hosting service>`.
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
index 849cd1a8ee4..326a2d302d2 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
@@ -67,10 +67,10 @@ Root domains (`example.com`) require:
- A [DNS A record](dns_concepts.md#a-record) pointing your domain to the Pages server.
- A [TXT record](dns_concepts.md#txt-record) to verify your domain's ownership.
-| From | DNS Record | To |
-| ---- | ---------- | -- |
-| example.com | A | 35.185.44.232 |
-| _gitlab-pages-verification-code.example.com | TXT | gitlab-pages-verification-code=00112233445566778899aabbccddeeff |
+| From | DNS Record | To |
+| --------------------------------------------- | ---------- | --------------- |
+| `example.com` | A | `35.185.44.232` |
+| `_gitlab-pages-verification-code.example.com` | TXT | `gitlab-pages-verification-code=00112233445566778899aabbccddeeff` |
For projects on GitLab.com, this IP is `35.185.44.232`.
For projects living in other GitLab instances (CE or EE), please contact
@@ -95,10 +95,10 @@ Subdomains (`subdomain.example.com`) require:
- A DNS [CNAME record](dns_concepts.md#cname-record) record pointing your subdomain to the Pages server.
- A DNS [TXT record](dns_concepts.md#txt-record) to verify your domain's ownership.
-| From | DNS Record | To |
-| ---- | ---------- | -- |
-| subdomain.example.com | CNAME | namespace.gitlab.io |
-| _gitlab-pages-verification-code.subdomain.example.com | TXT | gitlab-pages-verification-code=00112233445566778899aabbccddeeff |
+| From | DNS Record | To |
+| ------------------------------------------------------- | ---------- | --------------------- |
+| `subdomain.example.com` | CNAME | `namespace.gitlab.io` |
+| `_gitlab-pages-verification-code.subdomain.example.com` | TXT | `gitlab-pages-verification-code=00112233445566778899aabbccddeeff` |
Note that, whether it's a user or a project website, the `CNAME`
should point to your Pages domain (`namespace.gitlab.io`),
@@ -117,13 +117,13 @@ They require:
- A DNS CNAME record for the subdomain.
- A DNS TXT record for each.
-| From | DNS Record | To |
-| ---- | ---------- | -- |
-| example.com | A | 35.185.44.232 |
-| _gitlab-pages-verification-code.example.com | TXT | gitlab-pages-verification-code=00112233445566778899aabbccddeeff |
-|---+---|
-| www.example.com | CNAME | namespace.gitlab.io |
-| _gitlab-pages-verification-code.www.example.com | TXT | gitlab-pages-verification-code=00112233445566778899aabbccddeeff |
+| From | DNS Record | To |
+| ------------------------------------------------- | ---------- | ---------------------- |
+| `example.com` | A | `35.185.44.232` |
+| `_gitlab-pages-verification-code.example.com` | TXT | `gitlab-pages-verification-code=00112233445566778899aabbccddeeff` |
+|--------------------------------------------+--------------------------------------------|
+| `www.example.com` | CNAME | `namespace.gitlab.io` |
+| `_gitlab-pages-verification-code.www.example.com` | TXT | `gitlab-pages-verification-code=00112233445566778899aabbccddeeff` |
If you're using CloudFlare, check
[Redirecting `www.domain.com` to `domain.com` with Cloudflare](#redirecting-wwwdomaincom-to-domaincom-with-cloudflare).
@@ -135,8 +135,8 @@ If you're using CloudFlare, check
> - **Do not** add any special chars after the default Pages
domain. E.g., don't point `subdomain.domain.com` to
or `namespace.gitlab.io/`. Some domain hosting providers may request a trailling dot (`namespace.gitlab.io.`), though.
-> - GitLab Pages IP on GitLab.com [was changed](https://about.gitlab.com/2017/03/06/we-are-changing-the-ip-of-gitlab-pages-on-gitlab-com/) in 2017.
-> - GitLab Pages IP on GitLab.com [has changed](https://about.gitlab.com/2018/07/19/gcp-move-update/#gitlab-pages-and-custom-domains)
+> - GitLab Pages IP on GitLab.com [was changed](https://about.gitlab.com/blog/2017/03/06/we-are-changing-the-ip-of-gitlab-pages-on-gitlab-com/) in 2017.
+> - GitLab Pages IP on GitLab.com [has changed](https://about.gitlab.com/blog/2018/07/19/gcp-move-update/#gitlab-pages-and-custom-domains)
from `52.167.214.135` to `35.185.44.232` in 2018.
#### 4. Verify the domain's ownership
@@ -162,7 +162,7 @@ from the GitLab project.
> - Domain verification is **required for GitLab.com users**;
for GitLab self-managed instances, your GitLab administrator has the option
to [disabled custom domain verification](../../../../administration/pages/index.md#custom-domain-verification).
-> - [DNS propagation may take some time (up to 24h)](http://www.inmotionhosting.com/support/domain-names/dns-nameserver-changes/domain-names-dns-changes),
+> - [DNS propagation may take some time (up to 24h)](https://www.inmotionhosting.com/support/domain-names/dns-nameserver-changes/domain-names-dns-changes),
although it's usually a matter of minutes to complete. Until it does, verification
will fail and attempts to visit your domain will respond with a 404.
> - Once your domain has been verified, leave the verification record
@@ -221,7 +221,7 @@ To secure your custom domain with GitLab Pages you can opt by:
the part of the encryption keychain that identifies the CA.
Usually it's combined with the PEM certificate, but there are
some cases in which you need to add them manually.
- [CloudFlare certs](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/)
+ [CloudFlare certs](https://about.gitlab.com/blog/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/)
are one of these cases.
- **A private key**, it's an encrypted key which validates
your PEM against your domain.
@@ -238,7 +238,7 @@ To secure your custom domain with GitLab Pages you can opt by:
1. Add the PEM certificate to its corresponding field.
1. If your certificate is missing its intermediate, copy
and paste the root certificate (usually available from your CA website)
- and paste it in the [same field as your PEM certificate](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/),
+ and paste it in the [same field as your PEM certificate](https://about.gitlab.com/blog/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/),
just jumping a line between them.
1. Copy your private key and paste it in the last field.
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
index ef5466f03c4..c9b504dc6ee 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
@@ -57,7 +57,7 @@ Once you've met the requirements, to enable Let's Encrypt integration:
1. Click **Save changes**.
Once enabled, GitLab will obtain a LE certificate and add it to the
-associated Pages domain. It will be also renewed automatically by GitLab.
+associated Pages domain. It also will be renewed automatically by GitLab.
> **Notes:**
>
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
index ee0550bfca2..ac0a1f1ceba 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
@@ -31,7 +31,7 @@ security measure, necessary just for big companies, like banks and shoppings sit
with financial transactions.
Now we have a different picture. [According to Josh Aas](https://letsencrypt.org/2015/10/29/phishing-and-malware.html), Executive Director at [ISRG](https://en.wikipedia.org/wiki/Internet_Security_Research_Group):
-> _We’ve since come to realize that HTTPS is important for almost all websites. It’s important for any website that allows people to log in with a password, any website that [tracks its users](https://www.washingtonpost.com/news/the-switch/wp/2013/12/10/nsa-uses-google-cookies-to-pinpoint-targets-for-hacking/) in any way, any website that [doesn’t want its content altered](http://arstechnica.com/tech-policy/2014/09/why-comcasts-javascript-ad-injections-threaten-security-net-neutrality/), and for any site that offers content people might not want others to know they are consuming. We’ve also learned that any site not secured by HTTPS [can be used to attack other sites](https://krebsonsecurity.com/2015/04/dont-be-fodder-for-chinas-great-cannon/)._
+> _We’ve since come to realize that HTTPS is important for almost all websites. It’s important for any website that allows people to log in with a password, any website that [tracks its users](https://www.washingtonpost.com/news/the-switch/wp/2013/12/10/nsa-uses-google-cookies-to-pinpoint-targets-for-hacking/) in any way, any website that [doesn’t want its content altered](https://arstechnica.com/tech-policy/2014/09/why-comcasts-javascript-ad-injections-threaten-security-net-neutrality/), and for any site that offers content people might not want others to know they are consuming. We’ve also learned that any site not secured by HTTPS [can be used to attack other sites](https://krebsonsecurity.com/2015/04/dont-be-fodder-for-chinas-great-cannon/)._
Therefore, the reason why certificates are so important is that they encrypt
the connection between the **client** (you, me, your visitors)
@@ -54,7 +54,7 @@ reiterating the importance of HTTPS.
## Issuing Certificates
GitLab Pages accepts certificates provided in the [PEM](https://support.quovadisglobal.com/kb/a37/what-is-pem-format.aspx) format, issued by
-[Certificate Authorities (CAs)](https://en.wikipedia.org/wiki/Certificate_authority) or as
+[Certificate Authorities](https://en.wikipedia.org/wiki/Certificate_authority) or as
[self-signed certificates](https://en.wikipedia.org/wiki/Self-signed_certificate). Note that [self-signed certificates are typically not used](https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/self-signed-certificates-secure-so-why-ban/)
for public websites for security reasons and to ensure that browsers trust your site's certificate.
@@ -72,4 +72,4 @@ source, and free to use. See [GitLab Pages integration with Let's Encrypt](../cu
Similarly popular are [certificates issued by CloudFlare](https://www.cloudflare.com/ssl/),
which also offers a [free CDN service](https://blog.cloudflare.com/cloudflares-free-cdn-and-you/).
Their certs are valid up to 15 years. See the tutorial on
-[how to add a CloudFlare Certificate to your GitLab Pages website](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/).
+[how to add a CloudFlare Certificate to your GitLab Pages website](https://about.gitlab.com/blog/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/).
diff --git a/doc/user/project/pages/getting_started_part_four.md b/doc/user/project/pages/getting_started_part_four.md
index 80fa64b162d..27bd9da8d18 100644
--- a/doc/user/project/pages/getting_started_part_four.md
+++ b/doc/user/project/pages/getting_started_part_four.md
@@ -38,7 +38,7 @@ Explaining [every detail of GitLab CI/CD](../../../ci/yaml/README.md)
and GitLab Runner is out of the scope of this guide, but we'll
need to understand just a few things to be able to write our own
`.gitlab-ci.yml` or tweak an existing one. It's an
-[Yaml](http://docs.ansible.com/ansible/YAMLSyntax.html) file,
+[Yaml](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html) file,
with its own syntax. You can always check your CI syntax with
the [GitLab CI Lint Tool](https://gitlab.com/ci/lint).
@@ -127,7 +127,7 @@ pages:
The script above would be enough to build your Jekyll
site with GitLab Pages. But, from Jekyll 3.4.0 on, its default
template originated by `jekyll new project` requires
-[Bundler](http://bundler.io/) to install Jekyll dependencies
+[Bundler](https://bundler.io) to install Jekyll dependencies
and the default theme. To adjust our script to meet these new
requirements, we only need to install and build Jekyll with Bundler:
@@ -385,10 +385,10 @@ to understand how to go even further on your scripts.
- On this blog post, understand the concept of
[using GitLab CI `environments` to deploy your
- web app to staging and production](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/).
+ web app to staging and production](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/).
- On this post, learn [how to run jobs sequentially,
- in parallel, or build a custom pipeline](https://about.gitlab.com/2016/07/29/the-basics-of-gitlab-ci/)
+ in parallel, or build a custom pipeline](https://about.gitlab.com/blog/2016/07/29/the-basics-of-gitlab-ci/)
- On this blog post, we go through the process of
- [pulling specific directories from different projects](https://about.gitlab.com/2016/12/07/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages/)
- to deploy this website you're looking at, docs.gitlab.com.
-- On this blog post, we teach you [how to use GitLab Pages to produce a code coverage report](https://about.gitlab.com/2016/11/03/publish-code-coverage-report-with-gitlab-pages/).
+ [pulling specific directories from different projects](https://about.gitlab.com/blog/2016/12/07/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages/)
+ to deploy this website you're looking at, <https://docs.gitlab.com>.
+- On this blog post, we teach you [how to use GitLab Pages to produce a code coverage report](https://about.gitlab.com/blog/2016/11/03/publish-code-coverage-report-with-gitlab-pages/).
diff --git a/doc/user/project/pages/getting_started_part_one.md b/doc/user/project/pages/getting_started_part_one.md
index 45fdab1ca3a..0b1cae9ab4c 100644
--- a/doc/user/project/pages/getting_started_part_one.md
+++ b/doc/user/project/pages/getting_started_part_one.md
@@ -5,7 +5,7 @@ type: concepts, reference
# Static sites and GitLab Pages domains
-On this docucument, learn how to name your project for GitLab Pages
+On this document, learn how to name your project for GitLab Pages
according to your intended website's URL.
## Static sites
@@ -97,7 +97,7 @@ _Read on about [Projects for GitLab Pages and URL structure](getting_started_par
### Further reading
-- Read through this technical overview on [Static versus Dynamic Websites](https://about.gitlab.com/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/)
-- Understand [how modern Static Site Generators work](https://about.gitlab.com/2016/06/10/ssg-overview-gitlab-pages-part-2/) and what you can add to your static site
-- You can use [any SSG with GitLab Pages](https://about.gitlab.com/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/)
+- Read through this technical overview on [Static versus Dynamic Websites](https://about.gitlab.com/blog/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/)
+- Understand [how modern Static Site Generators work](https://about.gitlab.com/blog/2016/06/10/ssg-overview-gitlab-pages-part-2/) and what you can add to your static site
+- You can use [any SSG with GitLab Pages](https://about.gitlab.com/blog/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/)
- Fork an [example project](https://gitlab.com/pages) to build your website based upon
diff --git a/doc/user/project/pages/getting_started_part_two.md b/doc/user/project/pages/getting_started_part_two.md
index cb80bf1c433..ff752917087 100644
--- a/doc/user/project/pages/getting_started_part_two.md
+++ b/doc/user/project/pages/getting_started_part_two.md
@@ -122,7 +122,7 @@ where you'll find its default URL.
> **Notes:**
>
-> - GitLab Pages [supports any SSG](https://about.gitlab.com/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/), but,
+> - GitLab Pages [supports any SSG](https://about.gitlab.com/blog/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/), but,
> if you don't find yours among the templates, you'll need
> to configure your own `.gitlab-ci.yml`. To do that, please
> read through the article [Creating and Tweaking GitLab CI/CD for GitLab Pages](getting_started_part_four.md). New SSGs are very welcome among
diff --git a/doc/user/project/pages/index.md b/doc/user/project/pages/index.md
index 41a89a2130d..7d533c6f9d1 100644
--- a/doc/user/project/pages/index.md
+++ b/doc/user/project/pages/index.md
@@ -64,7 +64,7 @@ To publish a website with Pages, you can use any Static Site Generator (SSG),
such as Jekyll, Hugo, Middleman, Harp, Hexo, and Brunch, just to name a few. You can also
publish any website written directly in plain HTML, CSS, and JavaScript.</p>
<p>Pages does <strong>not</strong> support dynamic server-side processing, for instance, as <code>.php</code> and <code>.asp</code> requires. See this article to learn more about
-<a href="https://about.gitlab.com/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/">static websites vs dynamic websites</a>.</p>
+<a href="https://about.gitlab.com/blog/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/">static websites vs dynamic websites</a>.</p>
</div>
<div class="col-md-3"><img src="img/ssgs_pages.png" alt="Examples of SSGs supported by Pages" class="image-noshadow middle display-block"></div>
</div>
@@ -146,11 +146,11 @@ To learn more about configuration options for GitLab Pages, read the following:
|---+---|
| [Custom domains and SSL/TLS Certificates](custom_domains_ssl_tls_certification/index.md) | How to add custom domains and subdomains to your website, configure DNS records and SSL/TLS certificates. |
| [Let's Encrypt integration](custom_domains_ssl_tls_certification/lets_encrypt_integration.md) | Secure your Pages sites with Let's Encrypt certificates automatically obtained and renewed by GitLab. |
-| [CloudFlare certificates](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/) | Secure your Pages site with CloudFlare certificates. |
+| [CloudFlare certificates](https://about.gitlab.com/blog/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/) | Secure your Pages site with CloudFlare certificates. |
|---+---|
-| [Static vs dynamic websites](https://about.gitlab.com/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/) | A conceptual overview on static versus dynamic sites. |
-| [Modern static site generators](https://about.gitlab.com/2016/06/10/ssg-overview-gitlab-pages-part-2/) | A conceptual overview on SSGs. |
-| [Build any SSG site with GitLab Pages](https://about.gitlab.com/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/) | An overview on using SSGs for GitLab Pages. |
+| [Static vs dynamic websites](https://about.gitlab.com/blog/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/) | A conceptual overview on static versus dynamic sites. |
+| [Modern static site generators](https://about.gitlab.com/blog/2016/06/10/ssg-overview-gitlab-pages-part-2/) | A conceptual overview on SSGs. |
+| [Build any SSG site with GitLab Pages](https://about.gitlab.com/blog/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/) | An overview on using SSGs for GitLab Pages. |
## Advanced use
@@ -158,11 +158,11 @@ There are quite some great examples of GitLab Pages websites built for some
specific reasons. These examples can teach you some advanced techniques
to use and adapt to your own needs:
-- [Posting to your GitLab Pages blog from iOS](https://about.gitlab.com/2016/08/19/posting-to-your-gitlab-pages-blog-from-ios/).
-- [GitLab CI: Run jobs sequentially, in parallel, or build a custom pipeline](https://about.gitlab.com/2016/07/29/the-basics-of-gitlab-ci/).
-- [GitLab CI: Deployment & environments](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/).
-- [Building a new GitLab docs site with Nanoc, GitLab CI, and GitLab Pages](https://about.gitlab.com/2016/12/07/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages/).
-- [Publish code coverage reports with GitLab Pages](https://about.gitlab.com/2016/11/03/publish-code-coverage-report-with-gitlab-pages/).
+- [Posting to your GitLab Pages blog from iOS](https://about.gitlab.com/blog/2016/08/19/posting-to-your-gitlab-pages-blog-from-ios/).
+- [GitLab CI: Run jobs sequentially, in parallel, or build a custom pipeline](https://about.gitlab.com/blog/2016/07/29/the-basics-of-gitlab-ci/).
+- [GitLab CI: Deployment & environments](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/).
+- [Building a new GitLab docs site with Nanoc, GitLab CI, and GitLab Pages](https://about.gitlab.com/blog/2016/12/07/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages/).
+- [Publish code coverage reports with GitLab Pages](https://about.gitlab.com/blog/2016/11/03/publish-code-coverage-report-with-gitlab-pages/).
## Admin GitLab Pages for self-managed instances
@@ -173,5 +173,5 @@ the [admin guide](../../../administration/pages/index.md).
## More information about GitLab Pages
-- Announcement (2016-12-24): ["We're bringing GitLab Pages to CE"](https://about.gitlab.com/2016/12/24/were-bringing-gitlab-pages-to-community-edition/)
-- Announcement (2017-03-06): ["We are changing the IP of GitLab Pages on GitLab.com"](https://about.gitlab.com/2017/03/06/we-are-changing-the-ip-of-gitlab-pages-on-gitlab-com/)
+- Announcement (2016-12-24): ["We're bringing GitLab Pages to CE"](https://about.gitlab.com/blog/2016/12/24/were-bringing-gitlab-pages-to-community-edition/)
+- Announcement (2017-03-06): ["We are changing the IP of GitLab Pages on GitLab.com"](https://about.gitlab.com/blog/2017/03/06/we-are-changing-the-ip-of-gitlab-pages-on-gitlab-com/)
diff --git a/doc/user/project/pages/introduction.md b/doc/user/project/pages/introduction.md
index e197d7c588f..86257e2aa03 100644
--- a/doc/user/project/pages/introduction.md
+++ b/doc/user/project/pages/introduction.md
@@ -67,15 +67,10 @@ Some static site generators provide plugins for that functionality so that you
don't have to create and edit HTML files manually. For example, Jekyll has the
[redirect-from plugin](https://github.com/jekyll/jekyll-redirect-from).
-## GitLab Pages Access Control **(CORE ONLY)**
+## GitLab Pages Access Control **(CORE)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/33422) in GitLab 11.5.
-NOTE: **Note:**
-GitLab Pages access control is not activated on GitLab.com. You can check its
-progress on the
-[infrastructure issue tracker](https://gitlab.com/gitlab-com/gl-infra/infrastructure/issues/5576).
-
You can enable Pages access control on your project, so that only
[members of your project](../../permissions.md#project-members-permissions)
(at least Guest) can access your website:
diff --git a/doc/user/project/pipelines/job_artifacts.md b/doc/user/project/pipelines/job_artifacts.md
index 703b0a94470..794c3030c6a 100644
--- a/doc/user/project/pipelines/job_artifacts.md
+++ b/doc/user/project/pipelines/job_artifacts.md
@@ -50,12 +50,9 @@ For more examples on artifacts, follow the [artifacts reference in
## Browsing artifacts
-> With GitLab 9.2, PDFs, images, videos and other formats can be previewed
-> directly in the job artifacts browser without the need to download them.
-> With [GitLab 10.1][ce-14399], HTML files in a public project can be previewed
-> directly in a new tab without the need to download them when
-> [GitLab Pages](../../../administration/pages/index.md) is enabled.
-> The same holds for textual formats (currently supported extensions: `.txt`, `.json`, and `.log`).
+> - From GitLab 9.2, PDFs, images, videos and other formats can be previewed directly in the job artifacts browser without the need to download them.
+> - Introduced in [GitLab 10.1][ce-14399], HTML files in a public project can be previewed directly in a new tab without the need to download them when [GitLab Pages](../../../administration/pages/index.md) is enabled. The same applies for textual formats (currently supported extensions: `.txt`, `.json`, and `.log`).
+> - Introduced in [GitLab 12.4][gitlab-16675], artifacts in private projects can be previewed when [GitLab Pages access control](../../../administration/pages/index.md#access-control) is enabled.
After a job finishes, if you visit the job's specific page, there are three
buttons. You can download the artifacts archive or browse its contents, whereas
@@ -68,7 +65,7 @@ The archive browser shows the name and the actual file size of each file in the
archive. If your artifacts contained directories, then you are also able to
browse inside them.
-Below you can see how browsing looks like. In this case we have browsed inside
+Below you can see what browsing looks like. In this case we have browsed inside
the archive and at this point there is one directory, a couple files, and
one HTML file that you can view directly online when
[GitLab Pages](../../../administration/pages/index.md) is enabled (opens in a new tab).
@@ -123,18 +120,18 @@ https://example.com/<namespace>/<project>/-/jobs/artifacts/<ref>/raw/<path_to_fi
```
For example, to download the latest artifacts of the job named `coverage` of
-the `master` branch of the `gitlab-ce` project that belongs to the `gitlab-org`
+the `master` branch of the `gitlab` project that belongs to the `gitlab-org`
namespace, the URL would be:
```
-https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/master/download?job=coverage
+https://gitlab.com/gitlab-org/gitlab/-/jobs/artifacts/master/download?job=coverage
```
To download the file `coverage/index.html` from the same
artifacts use the following URL:
```
-https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/master/raw/coverage/index.html?job=coverage
+https://gitlab.com/gitlab-org/gitlab/-/jobs/artifacts/master/raw/coverage/index.html?job=coverage
```
There is also a URL to browse the latest job artifacts:
@@ -146,7 +143,7 @@ https://example.com/<namespace>/<project>/-/jobs/artifacts/<ref>/browse?job=<job
For example:
```
-https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/master/browse?job=coverage
+https://gitlab.com/gitlab-org/gitlab/-/jobs/artifacts/master/browse?job=coverage
```
There is also a URL to specific files, including html files that
@@ -160,7 +157,7 @@ For example, when a job `coverage` creates the artifact `htmlcov/index.html`,
you can access it at:
```
-https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/master/file/htmlcov/index.html?job=coverage
+https://gitlab.com/gitlab-org/gitlab/-/jobs/artifacts/master/file/htmlcov/index.html?job=coverage
```
The latest builds are also exposed in the UI in various places. Specifically,
@@ -198,6 +195,7 @@ In order to retrieve a job artifact of a different project, you might need to us
[expiry date]: ../../../ci/yaml/README.md#artifactsexpire_in
[ce-14399]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14399
+[gitlab-16675]: https://gitlab.com/gitlab-org/gitlab/merge_requests/16675
<!-- ## Troubleshooting
diff --git a/doc/user/project/pipelines/schedules.md b/doc/user/project/pipelines/schedules.md
index bb3e37ef2bf..bffb0b58230 100644
--- a/doc/user/project/pipelines/schedules.md
+++ b/doc/user/project/pipelines/schedules.md
@@ -84,7 +84,7 @@ For example, only two pipelines will be created per day if:
To change the Sidekiq worker's frequency:
1. Edit the `gitlab_rails['pipeline_schedule_worker_cron']` value in your instance's `gitlab.rb` file.
-1. [Restart GitLab](../../../administration/restart_gitlab.md).
+1. [Reconfigure GitLab](../../../administration/restart_gitlab.md#omnibus-gitlab-reconfigure) for the changes to take effect.
For GitLab.com, refer to the [dedicated settings page](../../gitlab_com/index.md#cron-jobs).
diff --git a/doc/user/project/pipelines/settings.md b/doc/user/project/pipelines/settings.md
index 26ea328c730..6480c7e0af9 100644
--- a/doc/user/project/pipelines/settings.md
+++ b/doc/user/project/pipelines/settings.md
@@ -21,8 +21,8 @@ from GitLab in a job.
There are two options. Using:
- `git clone`, which is slower since it clones the repository from scratch
- for every job, ensuring that the project workspace is always pristine.
-- `git fetch`, which is faster as it re-uses the project workspace (falling
+ for every job, ensuring that the local working copy is always pristine.
+- `git fetch`, which is faster as it re-uses the local working copy (falling
back to clone if it doesn't exist).
The default Git strategy can be overridden by the [GIT_STRATEGY variable](../../../ci/yaml/README.md#git-strategy)
@@ -60,14 +60,19 @@ if the job surpasses the threshold, it is marked as failed.
Project defined timeout (either specific timeout set by user or the default
60 minutes timeout) may be [overridden on Runner level](../../../ci/runners/README.html#setting-maximum-job-timeout-for-a-runner).
-## Custom CI config path
+## Maximum artifacts size **(CORE ONLY)**
+
+For information about setting a maximum artifact size for a project, see
+[Maximum artifacts size](../../admin_area/settings/continuous_integration.md#maximum-artifacts-size-core-only).
+
+## Custom CI configuration path
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/12509) in GitLab 9.4.
By default we look for the `.gitlab-ci.yml` file in the project's root
directory. If you require a different location **within** the repository,
-you can set a custom filepath that will be used to lookup the config file,
-this filepath should be **relative** to the root.
+you can set a custom path that will be used to look up the configuration file,
+this path should be **relative** to the root.
Here are some valid examples:
@@ -80,7 +85,7 @@ The path can be customized at a project level. To customize the path:
1. Go to the project's **Settings > CI / CD**.
1. Expand the **General pipelines** section.
-1. Provide a value in the **Custom CI config path** field.
+1. Provide a value in the **Custom CI configuration path** field.
1. Click **Save changes**.
## Test coverage parsing
@@ -92,7 +97,7 @@ job log using a regular expression. In the pipelines settings, search for the
![Pipelines settings test coverage](img/pipelines_settings_test_coverage.png)
Leave blank if you want to disable it or enter a ruby regular expression. You
-can use <http://rubular.com> to test your regex.
+can use <https://rubular.com> to test your regex.
If the pipeline succeeds, the coverage is shown in the merge request widget and
in the jobs table.
@@ -122,37 +127,40 @@ lein cloverage | perl -pe 's/\e\[?.*?[\@-~]//g'
## Visibility of pipelines
-Access to pipelines and job details (including output of logs and artifacts)
-is checked against your current user access level and the **Public pipelines**
-project setting under your project's **Settings > CI/CD > General pipelines settings**.
+Pipeline visibility is determined by:
+
+- Your current [user access level](../../permissions.md).
+- The **Public pipelines** project setting under your project's **Settings > CI/CD > General pipelines**.
+
+This also determines the visibility of these related features:
+
+- Job output logs
+- Job artifacts
+- The [pipeline security dashboard](../../application_security/security_dashboard/index.md#pipeline-security-dashboard) **(ULTIMATE)**
If **Public pipelines** is enabled (default):
-- For **public** projects, anyone can view the pipelines and access the job details
- (output logs and artifacts).
+- For **public** projects, anyone can view the pipelines and related features.
- For **internal** projects, any logged in user can view the pipelines
- and access the job details
- (output logs and artifacts).
-- For **private** projects, any member (guest or higher) can view the pipelines
- and access the job details
- (output logs and artifacts).
+ and related features.
+- For **private** projects, any project member (guest or higher) can view the pipelines
+ and related features.
If **Public pipelines** is disabled:
- For **public** projects, anyone can view the pipelines, but only members
- (reporter or higher) can access the job details (output logs and artifacts).
+ (reporter or higher) can access the related features.
- For **internal** projects, any logged in user can view the pipelines.
- However, only members (reporter or higher) can access the job details (output logs
- and artifacts).
-- For **private** projects, only members (reporter or higher)
- can view the pipelines and access the job details (output logs and artifacts).
+ However, only members (reporter or higher) can access the job related features.
+- For **private** projects, only project members (reporter or higher)
+ can view the pipelines or access the related features.
## Auto-cancel pending pipelines
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/9362) in GitLab 9.1.
If you want to auto-cancel all pending non-HEAD pipelines on branch, when
-new pipeline will be created (after your git push or manually from UI),
+new pipeline will be created (after your Git push or manually from UI),
check **Auto-cancel pending pipelines** checkbox and save the changes.
## Pipeline Badges
diff --git a/doc/user/project/protected_branches.md b/doc/user/project/protected_branches.md
index cf4afef15cd..b7c9faeb1df 100644
--- a/doc/user/project/protected_branches.md
+++ b/doc/user/project/protected_branches.md
@@ -23,6 +23,8 @@ A GitLab admin is allowed to push to the protected branches.
See the [Changelog](#changelog) section for changes over time.
+The default branch protection level is set in the [Admin Area](../admin_area/settings/visibility_and_access_controls.md#default-branch-protection).
+
## Configuring protected branches
To protect a branch, you need to have at least Maintainer permission level. Note
@@ -41,7 +43,7 @@ that the `master` branch is protected by default.
## Using the Allowed to merge and Allowed to push settings
-> [Introduced][ce-5081] in GitLab 8.11.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/5081) in GitLab 8.11.
Since GitLab 8.11, we added another layer of branch protection which provides
more granular management of protected branches. The "Developers can push"
@@ -71,7 +73,7 @@ they are set to "Maintainers" by default.
## Restricting push and merge access to certain users **(STARTER)**
-> [Introduced][ce-5081] in [GitLab Starter][ee] 8.11.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/5081) in [GitLab Starter](https://about.gitlab.com/pricing/) 8.11.
With GitLab Enterprise Edition you can restrict access to protected branches
by choosing a role (Maintainers, Developers) as well as certain users. From the
@@ -86,7 +88,7 @@ Click **Protect** and the branch will appear in the "Protected branch" list.
## Wildcard protected branches
-> [Introduced][ce-4665] in GitLab 8.10.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/4665) in GitLab 8.10.
You can specify a wildcard protected branch, which will protect all branches
matching the wildcard. For example:
@@ -131,12 +133,12 @@ To create a new branch through the user interface:
## Deleting a protected branch
-> [Introduced][ce-21393] in GitLab 9.3.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/21393) in GitLab 9.3.
From time to time, it may be required to delete or clean up branches that are
protected.
-User with [Maintainer permissions][perm] and up can manually delete protected
+User with [Maintainer permissions](../permissions.md) and up can manually delete protected
branches via GitLab's web interface:
1. Visit **Repository > Branches**
@@ -150,6 +152,35 @@ Deleting a protected branch is only allowed via the web interface, not via Git.
This means that you can't accidentally delete a protected branch from your
command line or a Git client application.
+## Protected Branches approval by Code Owners **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/13251) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.4.
+
+It is possible to require at least one approval by a
+[Code Owner](code_owners.md) to a file changed by the
+merge request. You can either set Code Owners approvals
+at the time you protect a new branch, or set it to a branch
+already protected, as described below.
+
+To protect a new branch and enable Code Owner's approval:
+
+1. Navigate to your project's **Settings > Repository** and expand **Protected branches**.
+1. Scroll down to **Protect a branch**, select a **Branch** or wildcard you'd like to protect, select who's **Allowed to merge** and **Allowed to push**, and toggle the **Require approval from code owners** slider.
+1. Click **Protect**.
+
+![Code Owners approval - new protected branch](img/code_owners_approval_new_protected_branch_v12_4.png)
+
+To enable Code Owner's approval to branches already protected:
+
+1. Navigate to your project's **Settings > Repository** and expand **Protected branches**.
+1. Scroll down to **Protected branch** and toggle the **Code owner approval** slider for the chosen branch.
+
+![Code Owners approval - branch already protected](img/code_owners_approval_protected_branch_v12_4.png)
+
+When enabled, all merge requests targeting these branches will require approval
+by a Code Owner per matched rule before they can be merged.
+Additionally, direct pushes to the protected branch are denied if a rule is matched.
+
## Running pipelines on protected branches
The permission to merge or push to protected branches is used to define if a user can
@@ -166,23 +197,16 @@ for details about the pipelines security model.
**9.2**
-- Allow deletion of protected branches via the web interface [gitlab-org/gitlab-ce#21393][ce-21393]
+- Allow deletion of protected branches via the web interface ([issue #21393](https://gitlab.com/gitlab-org/gitlab-foss/issues/21393)).
**8.11**
-- Allow creating protected branches that can't be pushed to [gitlab-org/gitlab-ce!5081][ce-5081]
+- Allow creating protected branches that can't be pushed to ([merge request !5081](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/5081)).
**8.10**
-- Allow developers to merge into a protected branch without having push access [gitlab-org/gitlab-ce!4892][ce-4892]
-- Allow specifying protected branches using wildcards [gitlab-org/gitlab-ce!4665][ce-4665]
-
-[ce-4665]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/4665 "Allow specifying protected branches using wildcards"
-[ce-4892]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/4892 "Allow developers to merge into a protected branch without having push access"
-[ce-5081]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/5081 "Allow creating protected branches that can't be pushed to"
-[ce-21393]: https://gitlab.com/gitlab-org/gitlab-foss/issues/21393
-[perm]: ../permissions.md
-[ee]: https://about.gitlab.com/pricing/
+- Allow developers without push access to merge into a protected branch ([merge request !4892](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/4892)).
+- Allow specifying protected branches using wildcards ([merge request !4665](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/4665)).
<!-- ## Troubleshooting
diff --git a/doc/user/project/push_options.md b/doc/user/project/push_options.md
new file mode 100644
index 00000000000..51c46dbd1d4
--- /dev/null
+++ b/doc/user/project/push_options.md
@@ -0,0 +1,77 @@
+---
+type: reference
+---
+
+# Push Options
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/15643) in GitLab 11.7.
+
+GitLab supports using [Git push options](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt)
+to perform various actions at the same time as pushing changes.
+
+Currently, there are push options available for:
+
+- [Skipping CI jobs](#push-options-for-gitlab-cicd)
+- [Merge requests](#push-options-for-merge-requests)
+
+NOTE: **Note:**
+Git push options are only available with Git 2.10 or newer.
+
+For Git versions 2.10 to 2.17 use `--push-option`:
+
+```shell
+git push --push-option=<push_option>
+```
+
+For version 2.18 and later, you can use the above format, or the shorter `-o`:
+
+```shell
+git push -o <push_option>
+```
+
+## Push options for GitLab CI/CD
+
+If the `ci.skip` push option is used, the commit will be pushed, but no [CI pipeline](../../ci/pipelines.md)
+will be created.
+
+| Push option | Description |
+| ----------- | ----------- |
+| `ci.skip` | Do not create a CI pipeline for the latest push. |
+
+For example:
+
+```shell
+git push -o ci.skip
+```
+
+## Push options for merge requests
+
+You can use Git push options to perform certain actions for merge requests at the same
+time as pushing changes:
+
+| Push option | Description | Introduced in version |
+| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------- |
+| `merge_request.create` | Create a new merge request for the pushed branch. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/26752) |
+| `merge_request.target=<branch_name>` | Set the target of the merge request to a particular branch. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/26752) |
+| `merge_request.merge_when_pipeline_succeeds` | Set the merge request to [merge when its pipeline succeeds](merge_requests/merge_when_pipeline_succeeds.md). | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/26752) |
+| `merge_request.remove_source_branch` | Set the merge request to remove the source branch when it's merged. | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/issues/64320) |
+| `merge_request.title="<title>"` | Set the title of the merge request. Ex: `git push -o merge_request.title="The title I want"`. | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/issues/64320) |
+| `merge_request.description="<description>"` | Set the description of the merge request. Ex: `git push -o merge_request.description="The description I want"`. | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/issues/64320) |
+| `merge_request.label="<label>"` | Add labels to the merge request. If the label does not exist, it will be created. For example, for two labels: `git push -o merge_request.label="label1" -o merge_request.label="label2"`. | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31831) |
+| `merge_request.unlabel="<label>"` | Remove labels from the merge request. For example, for two labels: `git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2"`. | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31831) |
+
+If you use a push option that requires text with spaces in it, you need to enclose it
+in quotes (`"`). You can omit the quotes if there are no spaces. Some examples:
+
+```shell
+git push -o merge_request.label="Label with spaces"
+git push -o merge_request.label=Label-with-no-spaces
+```
+
+You can combine push options to accomplish multiple tasks at once, by using
+multiple `-o` (or `--push-option`) flags. For example, if you want to create a new
+merge request, and target a branch named `my-target-branch`:
+
+```shell
+git push -o merge_request.create -o merge_request.target=my-target-branch
+```
diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md
index 0078e9ea417..61bc66a6a69 100644
--- a/doc/user/project/quick_actions.md
+++ b/doc/user/project/quick_actions.md
@@ -64,8 +64,8 @@ The following quick actions are applicable to descriptions, discussions and thre
| `/create_merge_request <branch name>` | ✓ | | | Create a new merge request starting from the current issue |
| `/relate #issue1 #issue2` | ✓ | | | Mark issues as related **(STARTER)** |
| `/move <path/to/project>` | ✓ | | | Move this issue to another project |
-| `/zoom <Zoom URL>` | ✓ | | | Add Zoom meeting to this issue. ([Introduced in GitLab 12.3](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/16609) enabled by feature flag `issue_zoom_integration`) |
-| `/remove_zoom` | ✓ | | | Remove Zoom meeting from this issue. ([Introduced in GitLab 12.3](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/16609) enabled by feature flag `issue_zoom_integration`) |
+| `/zoom <Zoom URL>` | ✓ | | | Add Zoom meeting to this issue. ([Introduced in GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/merge_requests/16609)) |
+| `/remove_zoom` | ✓ | | | Remove Zoom meeting from this issue. ([Introduced in GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/merge_requests/16609)) |
| `/target_branch <local branch name>` | | ✓ | | Set target branch |
| `/wip` | | ✓ | | Toggle the Work In Progress status |
| `/approve` | | ✓ | | Approve the merge request |
diff --git a/doc/user/project/releases/img/custom_notifications_new_release_v12_4.png b/doc/user/project/releases/img/custom_notifications_new_release_v12_4.png
new file mode 100644
index 00000000000..6b4231d5804
--- /dev/null
+++ b/doc/user/project/releases/img/custom_notifications_new_release_v12_4.png
Binary files differ
diff --git a/doc/user/project/releases/index.md b/doc/user/project/releases/index.md
index d5ac6f99e7f..ceb077ab8af 100644
--- a/doc/user/project/releases/index.md
+++ b/doc/user/project/releases/index.md
@@ -65,6 +65,18 @@ project.
![Releases list](img/releases.png)
+## Notification for Releases
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/26001) in GitLab 12.4.
+
+You can be notified by email when a new Release is created for your project.
+
+To subscribe to these notifications, navigate to your **Project**'s landing page, then click on the
+bell icon. Choose **Custom** from the dropdown menu. The
+following modal window will be then displayed, from which you can select **New release** to complete your subscription to new Releases notifications.
+
+![Custom notification - New release](img/custom_notifications_new_release_v12_4.png)
+
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
diff --git a/doc/user/project/repository/reducing_the_repo_size_using_git.md b/doc/user/project/repository/reducing_the_repo_size_using_git.md
index fb07981e033..1187a44fda8 100644
--- a/doc/user/project/repository/reducing_the_repo_size_using_git.md
+++ b/doc/user/project/repository/reducing_the_repo_size_using_git.md
@@ -19,7 +19,8 @@ Unfortunately, it's not so easy and that workflow won't work. Deleting files in
a commit doesn't actually reduce the size of the repo since the earlier commits
and blobs are still around. What you need to do is rewrite history with Git's
[`filter-branch` option](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#The-Nuclear-Option:-filter-branch),
-or a tool like the [BFG Repo-Cleaner](https://rtyley.github.io/bfg-repo-cleaner/).
+or an open source community-maintained tool like the
+[BFG](https://rtyley.github.io/bfg-repo-cleaner/).
Note that even with that method, until `git gc` runs on the GitLab side, the
"removed" commits and blobs will still be around. You also need to be able to
@@ -34,8 +35,9 @@ temporarily increase it for you, your only option is to prune all the unneeded
stuff locally, and then create a new project on GitLab and start using that
instead.
-If you can continue to use the original project, we recommend [using the
-BFG Repo-Cleaner](#using-the-bfg-repo-cleaner). It's faster and simpler than
+If you can continue to use the original project, we recommend [using
+BFG](#using-the-bfg-repo-cleaner), a tool that's built and
+maintained by the open source community. It's faster and simpler than
`git filter-branch`, and GitLab can use its account of what has changed to clean
up its own internal state, maximizing the space saved.
@@ -54,7 +56,7 @@ removed from the repository.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/issues/19376) in GitLab 11.6.
-1. [Install BFG](https://rtyley.github.io/bfg-repo-cleaner/).
+1. [Install BFG](https://rtyley.github.io/bfg-repo-cleaner/) from its open source community repository.
1. Navigate to your repository:
@@ -99,7 +101,7 @@ removed from the repository.
![Repository settings cleanup form](img/repository_cleanup.png)
Upload the `object-id-map.old-new.txt` file and press **Start cleanup**.
- This will remove any internal git references to the old commits, and run
+ This will remove any internal Git references to the old commits, and run
`git gc` against the repository. You will receive an email once it has
completed.
diff --git a/doc/user/project/repository/web_editor.md b/doc/user/project/repository/web_editor.md
index a3cfa48e27e..944720c3863 100644
--- a/doc/user/project/repository/web_editor.md
+++ b/doc/user/project/repository/web_editor.md
@@ -117,7 +117,7 @@ the description field will automatically display the [issue closing pattern](../
merge request is merged.
[project-services-doc]: ../integrations/project_services.md
-[auto-deploy-doc]: ../../../ci/autodeploy/index.md
+[auto-deploy-doc]: ../../../topics/autodevops/index.md#auto-deploy
### Create a new branch from a project's dashboard
diff --git a/doc/user/project/service_desk.md b/doc/user/project/service_desk.md
index 3f3536838e7..0ca34c4ed02 100644
--- a/doc/user/project/service_desk.md
+++ b/doc/user/project/service_desk.md
@@ -1,6 +1,6 @@
# Service Desk **(PREMIUM)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/149) in [GitLab Premium 9.1](https://about.gitlab.com/2017/04/22/gitlab-9-1-released/#service-desk-eep).
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/149) in [GitLab Premium 9.1](https://about.gitlab.com/blog/2017/04/22/gitlab-9-1-released/#service-desk-eep).
## Overview
@@ -18,7 +18,7 @@ As Service Desk is built right into GitLab itself, the complexity and inefficien
of multiple tools and external integrations are eliminated, significantly shortening
the cycle time from feedback to software update.
-For an overview, check the video demonstration on [GitLab Service Desk](https://about.gitlab.com/2017/05/09/demo-service-desk/).
+For an overview, check the video demonstration on [GitLab Service Desk](https://about.gitlab.com/blog/2017/05/09/demo-service-desk/).
## Use cases
@@ -50,7 +50,7 @@ users will only see the thread through email.
> **Note:**
Service Desk is enabled on GitLab.com. If you're a
-[Silver subscriber](https://about.gitlab.com/gitlab-com/),
+[Silver subscriber](https://about.gitlab.com/pricing/#gitlab-com),
you can skip the step 1 below; you only need to enable it per project.
1. [Set up incoming email](../../administration/incoming_email.md#set-it-up) for the GitLab instance. This must
diff --git a/doc/user/project/settings/img/sharing_and_permissions_settings.png b/doc/user/project/settings/img/sharing_and_permissions_settings.png
deleted file mode 100644
index 6cb89c6ea1d..00000000000
--- a/doc/user/project/settings/img/sharing_and_permissions_settings.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/settings/img/sharing_and_permissions_settings_v12_3.png b/doc/user/project/settings/img/sharing_and_permissions_settings_v12_3.png
new file mode 100644
index 00000000000..cf7fdfe4cce
--- /dev/null
+++ b/doc/user/project/settings/img/sharing_and_permissions_settings_v12_3.png
Binary files differ
diff --git a/doc/user/project/settings/import_export.md b/doc/user/project/settings/import_export.md
index 948102110f3..9449ab6d10f 100644
--- a/doc/user/project/settings/import_export.md
+++ b/doc/user/project/settings/import_export.md
@@ -65,6 +65,7 @@ The following items will be exported:
- Project configuration, including services
- Issues with comments, merge requests with diffs and comments, labels, milestones, snippets,
and other project entities
+- Design Management files and data **(PREMIUM)**
- LFS objects
- Issue boards
diff --git a/doc/user/project/settings/index.md b/doc/user/project/settings/index.md
index 66a861faf93..131999dbf60 100644
--- a/doc/user/project/settings/index.md
+++ b/doc/user/project/settings/index.md
@@ -24,7 +24,7 @@ The project description also partially supports [standard markdown](../../markdo
Set up your project's access, [visibility](../../../public_access/public_access.md), and enable [Container Registry](../../packages/container_registry/index.md) for your projects:
-![projects sharing permissions](img/sharing_and_permissions_settings.png)
+![projects sharing permissions](img/sharing_and_permissions_settings_v12_3.png)
If Issues are disabled, or you can't access Issues because you're not a project member, then Labels and Milestones
links will be missing from the sidebar UI.
diff --git a/doc/user/reserved_names.md b/doc/user/reserved_names.md
index 16d032217b3..b160cb03f94 100644
--- a/doc/user/reserved_names.md
+++ b/doc/user/reserved_names.md
@@ -4,7 +4,8 @@ Not all project & group names are allowed because they would conflict with
existing routes used by GitLab.
For a list of words that are not allowed to be used as group or project names, see the
-[`path_regex.rb` file][reserved] under the `TOP_LEVEL_ROUTES`, `PROJECT_WILDCARD_ROUTES` and `GROUP_ROUTES` lists:
+[`path_regex.rb` file](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/path_regex.rb)
+under the `TOP_LEVEL_ROUTES`, `PROJECT_WILDCARD_ROUTES` and `GROUP_ROUTES` lists:
- `TOP_LEVEL_ROUTES`: are names that are reserved as usernames or top level groups
- `PROJECT_WILDCARD_ROUTES`: are names that are reserved for child groups or projects.
@@ -40,52 +41,50 @@ It is currently not possible to create a project with the following names:
Currently the following names are reserved as top level groups:
-- \-
-- .well-known
-- 404.html
-- 422.html
-- 500.html
-- 502.html
-- 503.html
-- abuse_reports
-- admin
-- api
-- apple-touch-icon-precomposed.png
-- apple-touch-icon.png
-- assets
-- autocomplete
-- ci
-- dashboard
-- deploy.html
-- explore
-- favicon.ico
-- favicon.png
-- files
-- groups
-- health_check
-- help
-- import
-- invites
-- jwt
-- login
-- notification_settings
-- oauth
-- profile
-- projects
-- public
-- robots.txt
-- s
-- search
-- sent_notifications
-- slash-command-logo.png
-- snippets
-- unsubscribes
-- uploads
-- users
-- v2
+- `\-`
+- `.well-known`
+- `404.html`
+- `422.html`
+- `500.html`
+- `502.html`
+- `503.html`
+- `abuse_reports`
+- `admin`
+- `api`
+- `apple-touch-icon-precomposed.png`
+- `apple-touch-icon.png`
+- `assets`
+- `autocomplete`
+- `ci`
+- `dashboard`
+- `deploy.html`
+- `explore`
+- `favicon.ico`
+- `favicon.png`
+- `files`
+- `groups`
+- `health_check`
+- `help`
+- `import`
+- `invites`
+- `jwt`
+- `login`
+- `notification_settings`
+- `oauth`
+- `profile`
+- `projects`
+- `public`
+- `robots.txt`
+- `s`
+- `search`
+- `sent_notifications`
+- `slash-command-logo.png`
+- `snippets`
+- `unsubscribes`
+- `uploads`
+- `users`
+- `v2`
These group names are unavailable as subgroup names:
-- \-
-
-[reserved]: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/path_regex.rb
+- `\-`
diff --git a/doc/user/snippets.md b/doc/user/snippets.md
index e55a407295e..77997c53210 100644
--- a/doc/user/snippets.md
+++ b/doc/user/snippets.md
@@ -70,8 +70,8 @@ To embed a snippet, first make sure that:
- In **Project > Settings > Permissions**, the snippets permissions are
set to **Everyone with access**
-Once the above conditions are met, the "Embed" section will appear in your snippet
-where you can simply click on the "Copy to clipboard" button. This copies a one-line
+Once the above conditions are met, the "Embed" section will appear in your
+snippet where you can simply click on the "Copy" button. This copies a one-line
script that you can add to any website or blog post.
Here's how an example code looks like:
diff --git a/doc/workflow/file_finder.md b/doc/workflow/file_finder.md
index 324989c173b..8eb705b5363 100644
--- a/doc/workflow/file_finder.md
+++ b/doc/workflow/file_finder.md
@@ -23,7 +23,7 @@ and go back to **Files**.
## How it works
-The File finder feature is powered by the [Fuzzy filter] library.
+The File finder feature is powered by the [Fuzzy filter](https://github.com/jeancroy/fuzz-aldrin-plus) library.
It implements a fuzzy search with highlight, and tries to provide intuitive
results by recognizing patterns that people use while searching.
@@ -38,5 +38,4 @@ Using fuzzy search, we start by typing letters that get us closer to the file.
![Find file button](img/file_finder_find_file.png)
[gh-9889]: https://github.com/gitlabhq/gitlabhq/pull/9889 "File finder pull request"
-[fuzzy filter]: https://github.com/jeancroy/fuzzaldrin-plus "fuzzaldrin-plus on GitHub"
[ce]: https://gitlab.com/gitlab-org/gitlab-foss/tree/master "GitLab CE repository"
diff --git a/doc/workflow/forking_workflow.md b/doc/workflow/forking_workflow.md
index 82c2709143d..48be38b2eca 100644
--- a/doc/workflow/forking_workflow.md
+++ b/doc/workflow/forking_workflow.md
@@ -48,4 +48,4 @@ changes will be added to the repository and branch you're merging into.
![New merge request](forking/merge_request.png)
-[gitlab flow]: https://about.gitlab.com/2014/09/29/gitlab-flow/ "GitLab Flow blog post"
+[gitlab flow]: https://about.gitlab.com/blog/2014/09/29/gitlab-flow/ "GitLab Flow blog post"
diff --git a/doc/workflow/gitlab_flow.md b/doc/workflow/gitlab_flow.md
index 136e05281a6..e3568d6489d 100644
--- a/doc/workflow/gitlab_flow.md
+++ b/doc/workflow/gitlab_flow.md
@@ -168,7 +168,6 @@ This branch is the place for any work related to this change.
NOTE: **Note:**
The name of a branch might be dictated by organizational standards.
-For example, in GitLab, any branches in GitLab EE that are equivalent to branches in GitLab CE [must end in `-ee`](../development/automatic_ce_ee_merge.md#cherry-picking-from-ce-to-ee).
When you are done or want to discuss the code, open a merge request.
A merge request is an online place to discuss the change and review the code.
diff --git a/doc/workflow/lfs/lfs_administration.md b/doc/workflow/lfs/lfs_administration.md
index 89ad7c174a2..7ad87982501 100644
--- a/doc/workflow/lfs/lfs_administration.md
+++ b/doc/workflow/lfs/lfs_administration.md
@@ -53,7 +53,7 @@ to offload local hard disk R/W operations, and free up disk space significantly.
GitLab is tightly integrated with `Fog`, so you can refer to its [documentation](http://fog.io/about/provider_documentation.html)
to check which storage services can be integrated with GitLab.
You can also use external object storage in a private local network. For example,
-[Minio](https://min.io/) is a standalone object storage service, is easy to set up, and works well with GitLab instances.
+[MinIO](https://min.io/) is a standalone object storage service, is easy to set up, and works well with GitLab instances.
GitLab provides two different options for the uploading mechanism: "Direct upload" and "Background upload".
@@ -93,7 +93,7 @@ Here is a configuration example with S3.
| `enable_signature_v4_streaming` | Set to true to enable HTTP chunked transfers with [AWS v4 signatures](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html). Oracle Cloud S3 needs this to be false | true |
| `region` | AWS region | us-east-1 |
| `host` | S3 compatible host for when not using AWS, e.g. `localhost` or `storage.example.com` | s3.amazonaws.com |
-| `endpoint` | Can be used when configuring an S3 compatible service such as [Minio](https://www.minio.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
+| `endpoint` | Can be used when configuring an S3 compatible service such as [MinIO](https://min.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) |
| `path_style` | Set to true to use `host/bucket_name/object` style paths instead of `bucket_name.host/object`. Leave as false for AWS S3 | false |
| `use_iam_profile` | Set to true to use IAM profile instead of access keys | false
@@ -124,7 +124,7 @@ NOTE: **Note:**
Regardless of whether the container has public access enabled or disabled, Fog will
use the TempURL method to grant access to LFS objects. If you see errors in logs referencing
instantiating storage with a temp-url-key, ensure that you have set they key properly
-on the Rackspace API and in gitlab.rb. You can verify the value of the key Rackspace
+on the Rackspace API and in `gitlab.rb`. You can verify the value of the key Rackspace
has set by sending a GET request with token header to the service access endpoint URL
and comparing the output of the returned headers.
@@ -218,6 +218,14 @@ For source installations the settings are nested under `lfs:` and then
will be forwarded to object storage unless `background_upload` is set to
false.
+### Migrating back to local storage
+
+In order to migrate back to local storage:
+
+1. Set both `direct_upload` and `background_upload` to false under the LFS object storage settings. Don't forget to restart GitLab.
+1. Run `rake gitlab:lfs:migrate_to_local` on your console.
+1. Disable `object_storage` for LFS objects in `gitlab.rb`. Remember to restart GitLab afterwards.
+
## Storage statistics
You can see the total storage used for LFS objects on groups and projects
@@ -227,7 +235,7 @@ and [projects APIs](../../api/projects.md).
## Troubleshooting: `Google::Apis::TransmissionError: execution expired`
If LFS integration is configred with Google Cloud Storage and background uploads (`background_upload: true` and `direct_upload: false`),
-sidekiq workers may encouter this error. This is because the uploading timed out with very large files.
+Sidekiq workers may encouter this error. This is because the uploading timed out with very large files.
LFS files up to 6Gb can be uploaded without any extra steps, otherwise you need to use the following workaround.
```shell
@@ -251,7 +259,7 @@ See more information in [!19581](https://gitlab.com/gitlab-org/gitlab-foss/merge
- Support for removing unreferenced LFS objects was added in 8.14 onwards.
- LFS authentications via SSH was added with GitLab 8.12.
-- Only compatible with the GitLFS client versions 1.1.0 and up, or 1.0.2.
+- Only compatible with the Git LFS client versions 1.1.0 and up, or 1.0.2.
- The storage statistics currently count each LFS object multiple times for
every project linking to it.
diff --git a/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md b/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md
index 10728f79b6c..f747a7b5196 100644
--- a/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md
+++ b/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md
@@ -70,7 +70,7 @@ git add .gitattributes
```
Cloning the repository works the same as before. Git automatically detects the
-LFS-tracked files and clones them via HTTP. If you performed the git clone
+LFS-tracked files and clones them via HTTP. If you performed the `git clone`
command with a SSH URL, you have to enter your GitLab credentials for HTTP
authentication.
@@ -172,7 +172,7 @@ Check if you have permissions to push to the project or fetch from the project.
LFS object you are trying to push to the project or fetch from the project is not
available to the project anymore. Probably the object was removed from the server.
-- Local git repository is using deprecated LFS API
+- Local Git repository is using deprecated LFS API
### Invalid status for `<url>` : 501
@@ -250,7 +250,7 @@ GitLab checks files to detect LFS pointers on push. If LFS pointers are detected
Verify that LFS in installed locally and consider a manual push with `git lfs push --all`.
-If you are storing LFS files outside of GitLab you can disable LFS on the project by setting `lfs_enabled: false` with the [projects api](../../api/projects.md#edit-project).
+If you are storing LFS files outside of GitLab you can disable LFS on the project by setting `lfs_enabled: false` with the [projects API](../../api/projects.md#edit-project).
### Hosting LFS objects externally
diff --git a/doc/workflow/lfs/migrate_from_git_annex_to_git_lfs.md b/doc/workflow/lfs/migrate_from_git_annex_to_git_lfs.md
index 905d5624688..8f24929c9dc 100644
--- a/doc/workflow/lfs/migrate_from_git_annex_to_git_lfs.md
+++ b/doc/workflow/lfs/migrate_from_git_annex_to_git_lfs.md
@@ -247,8 +247,8 @@ git annex uninit
[Git LFS]: https://git-lfs.github.com/
[install-lfs]: https://git-lfs.github.com/
[issue-remove-annex]: https://gitlab.com/gitlab-org/gitlab/issues/1648
-[lfs-track]: https://about.gitlab.com/2017/01/30/getting-started-with-git-lfs-tutorial/#tracking-files-with-lfs
-[post-1]: https://about.gitlab.com/2017/01/30/getting-started-with-git-lfs-tutorial/
-[post-2]: https://about.gitlab.com/2015/11/23/announcing-git-lfs-support-in-gitlab/
-[post-3]: https://about.gitlab.com/2015/02/17/gitlab-annex-solves-the-problem-of-versioning-large-binaries-with-git/
+[lfs-track]: https://about.gitlab.com/blog/2017/01/30/getting-started-with-git-lfs-tutorial/#tracking-files-with-lfs
+[post-1]: https://about.gitlab.com/blog/2017/01/30/getting-started-with-git-lfs-tutorial/
+[post-2]: https://about.gitlab.com/blog/2015/11/23/announcing-git-lfs-support-in-gitlab/
+[post-3]: https://about.gitlab.com/blog/2015/02/17/gitlab-annex-solves-the-problem-of-versioning-large-binaries-with-git/
[uninit]: https://git-annex.branchable.com/git-annex-uninit/
diff --git a/doc/workflow/notifications.md b/doc/workflow/notifications.md
index 6205ef7b4c3..d619c870c5e 100644
--- a/doc/workflow/notifications.md
+++ b/doc/workflow/notifications.md
@@ -78,12 +78,13 @@ Below is the table of events users can be notified of:
| New email added | User | Security email, always sent. |
| Email changed | User | Security email, always sent. |
| Password changed | User | Security email, always sent. |
-| New user created | User | Sent on user creation, except for omniauth (LDAP)|
+| New user created | User | Sent on user creation, except for OmniAuth (LDAP)|
| User added to project | User | Sent when user is added to project |
| Project access level changed | User | Sent when user project access level is changed |
| User added to group | User | Sent when user is added to group |
| Group access level changed | User | Sent when user group access level is changed |
| Project moved | Project members (1) | (1) not disabled |
+| New release | Project members | Custom notification |
### Issue / Epics / Merge request events
@@ -150,7 +151,7 @@ Notification emails include headers that provide extra content about the notific
| X-GitLab-Pipeline-Id | Only in pipeline emails, the ID of the pipeline the notification is for |
| X-GitLab-Reply-Key | A unique token to support reply by email |
| X-GitLab-NotificationReason | The reason for being notified. "mentioned", "assigned", etc |
-| List-Id | The path of the project in a RFC 2919 mailing list identifier useful for email organization, for example, with GMail filters |
+| List-Id | The path of the project in a RFC 2919 mailing list identifier useful for email organization, for example, with Gmail filters |
#### X-GitLab-NotificationReason
diff --git a/doc/workflow/repository_mirroring.md b/doc/workflow/repository_mirroring.md
index cfa846a9c12..6d1a5913789 100644
--- a/doc/workflow/repository_mirroring.md
+++ b/doc/workflow/repository_mirroring.md
@@ -79,7 +79,7 @@ mirror.
To set up a mirror from GitLab to GitHub, you need to follow these steps:
-1. Create a [GitHub personal access token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) with the `public_repo` box checked.
+1. Create a [GitHub personal access token](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line) with the `public_repo` box checked.
1. Fill in the **Git repository URL** field using this format: `https://<your_github_username>@github.com/<your_github_group>/<your_github_project>.git`.
1. Fill in **Password** field with your GitHub personal access token.
1. Click the **Mirror repository** button.
@@ -197,10 +197,10 @@ Assuming you used the former, you now need to verify that the fingerprints are
those you expect. GitLab.com and other code hosting sites publish their
fingerprints in the open for you to check:
-- [AWS CodeCommit](http://docs.aws.amazon.com/codecommit/latest/userguide/regions.html#regions-fingerprints)
-- [Bitbucket](https://confluence.atlassian.com/bitbucket/use-the-ssh-protocol-with-bitbucket-cloud-221449711.html#UsetheSSHprotocolwithBitbucketCloud-KnownhostorBitbucket%27spublickeyfingerprints)
-- [GitHub](https://help.github.com/articles/github-s-ssh-key-fingerprints/)
-- [GitLab.com](https://about.gitlab.com/gitlab-com/settings/#ssh-host-keys-fingerprints)
+- [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/regions.html#regions-fingerprints)
+- [Bitbucket](https://confluence.atlassian.com/bitbucket/ssh-keys-935365775.html)
+- [GitHub](https://help.github.com/en/articles/githubs-ssh-key-fingerprints)
+- [GitLab.com](../user/gitlab_com/index.md#ssh-host-keys-fingerprints)
- [Launchpad](https://help.launchpad.net/SSHFingerprints)
- [Savannah](http://savannah.gnu.org/maintenance/SshAccess/)
- [SourceForge](https://sourceforge.net/p/forge/documentation/SSH%20Key%20Fingerprints/)
@@ -398,7 +398,7 @@ CAUTION: **Warning:**
Bidirectional mirroring should not be used as a permanent configuration. Refer to
[Migrating from Perforce Helix](../user/project/import/perforce.md) for alternative migration approaches.
-[Git Fusion](https://www.perforce.com/video-tutorials/git-fusion-overview) provides a Git interface
+[Git Fusion](https://www.perforce.com/manuals/git-fusion/#Git-Fusion/section_avy_hyc_gl.html) provides a Git interface
to [Perforce Helix](https://www.perforce.com/products) which can be used by GitLab to bidirectionally
mirror projects with GitLab. This may be useful in some situations when migrating from Perforce Helix
to GitLab where overlapping Perforce Helix workspaces cannot be migrated simultaneously to GitLab.
@@ -415,7 +415,7 @@ settings are recommended:
- `unknown_git` user will be used as the commit author if the GitLab user does not exist in
Perforce Helix.
-Read about [Git Fusion settings on Perforce.com](https://www.perforce.com/perforce/doc.current/manuals/git-fusion/Content/Git-Fusion/section_vss_bdw_w3.html#section_zdp_zz1_3l).
+Read about [Git Fusion settings on Perforce.com](https://www.perforce.com/manuals/git-fusion/Content/Git-Fusion/section_vss_bdw_w3.html#section_zdp_zz1_3l).
## Troubleshooting
@@ -423,4 +423,4 @@ Should an error occur during a push, GitLab will display an "Error" highlight fo
### 13:Received RST_STREAM with error code 2 with GitHub
-If you receive an "13:Received RST_STREAM with error code 2" while mirroring to a GitHub repository, your GitHub settings might be set to block pushes that expose your email address used in commits. Either set your email address on GitHub to be public, or disable the [Block command line pushes that expose my email](http://github.com/settings/emails) setting.
+If you receive an "13:Received RST_STREAM with error code 2" while mirroring to a GitHub repository, your GitHub settings might be set to block pushes that expose your email address used in commits. Either set your email address on GitHub to be public, or disable the [Block command line pushes that expose my email](https://github.com/settings/emails) setting.
diff --git a/doc/workflow/time_tracking.md b/doc/workflow/time_tracking.md
index 8c57c43b7d6..3d2e1de24da 100644
--- a/doc/workflow/time_tracking.md
+++ b/doc/workflow/time_tracking.md
@@ -11,7 +11,7 @@ requests within GitLab.
## Overview
-Time Tracking allows you:
+Time Tracking allows you to:
- Record the time spent working on an issue or a merge request.
- Add an estimate of the amount of time needed to complete an issue or a merge
diff --git a/jest.config.js b/jest.config.js
index 646648c6928..c2a512e8afa 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -3,7 +3,7 @@ const IS_EE = require('./config/helpers/is_ee_env');
const reporters = ['default'];
// To have consistent date time parsing both in local and CI environments we set
-// the timezone of the Node process. https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/27738
+// the timezone of the Node process. https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/27738
process.env.TZ = 'GMT';
if (process.env.CI) {
@@ -15,11 +15,15 @@ if (process.env.CI) {
]);
}
-let testMatch = ['<rootDir>/spec/frontend/**/*_spec.js', '<rootDir>/ee/spec/frontend/**/*_spec.js'];
+let testMatch = ['<rootDir>/spec/frontend/**/*_spec.js'];
+if (IS_EE) {
+ testMatch.push('<rootDir>/ee/spec/frontend/**/*_spec.js');
+}
// workaround for eslint-import-resolver-jest only resolving in test files
// see https://github.com/JoinColony/eslint-import-resolver-jest#note
-const isESLint = module.parent.filename.includes('/eslint-import-resolver-jest/');
+const { filename: parentModuleName } = module.parent;
+const isESLint = parentModuleName && parentModuleName.includes('/eslint-import-resolver-jest/');
if (isESLint) {
testMatch = testMatch.map(path => path.replace('_spec.js', ''));
}
@@ -41,6 +45,7 @@ module.exports = {
'^vendor(/.*)$': '<rootDir>/vendor/assets/javascripts$1',
'\\.(jpg|jpeg|png|svg)$': '<rootDir>/spec/frontend/__mocks__/file_mock.js',
'emojis(/.*).json': '<rootDir>/fixtures/emojis$1.json',
+ '^spec/test_constants$': '<rootDir>/spec/frontend/helpers/test_constants',
},
collectCoverageFrom: ['<rootDir>/app/assets/javascripts/**/*.{js,vue}'],
coverageDirectory: '<rootDir>/coverage-frontend/',
@@ -62,3 +67,15 @@ module.exports = {
IS_EE,
},
};
+
+const karmaTestFile = process.argv.find(arg => arg.includes('spec/javascripts/'));
+if (karmaTestFile) {
+ console.error(`
+Files in spec/javascripts/ and ee/spec/javascripts need to be run with Karma.
+Please use the following command instead:
+
+yarn karma -f ${karmaTestFile}
+
+`);
+ process.exit(1);
+}
diff --git a/lib/api/api_guard.rb b/lib/api/api_guard.rb
index a3fa7cd5cf9..02ea321df67 100644
--- a/lib/api/api_guard.rb
+++ b/lib/api/api_guard.rb
@@ -17,6 +17,8 @@ module API
request.access_token
end
+ use AdminModeMiddleware
+
helpers HelperMethods
install_error_responders(base)
@@ -52,6 +54,11 @@ module API
forbidden!(api_access_denied_message(user))
end
+ # Set admin mode for API requests (if admin)
+ if Feature.enabled?(:user_mode_in_session)
+ Gitlab::Auth::CurrentUserMode.new(user).enable_admin_mode!(skip_password_validation: true)
+ end
+
user
end
@@ -141,5 +148,22 @@ module API
end
end
end
+
+ class AdminModeMiddleware < ::Grape::Middleware::Base
+ def initialize(app, **options)
+ super
+ end
+
+ def call(env)
+ if Feature.enabled?(:user_mode_in_session)
+ session = {}
+ Gitlab::Session.with_session(session) do
+ app.call(env)
+ end
+ else
+ app.call(env)
+ end
+ end
+ end
end
end
diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb
index d58a5e214ed..d108c811f4b 100644
--- a/lib/api/commit_statuses.rb
+++ b/lib/api/commit_statuses.rb
@@ -58,7 +58,6 @@ module API
post ':id/statuses/:sha' do
authorize! :create_commit_status, user_project
- commit = @project.commit(params[:sha])
not_found! 'Commit' unless commit
# Since the CommitStatus is attached to Ci::Pipeline (in the future Pipeline)
@@ -68,14 +67,15 @@ module API
# If we don't receive it, we will attach the CommitStatus to
# the first found branch on that commit
+ pipeline = all_matching_pipelines.first
+
ref = params[:ref]
+ ref ||= pipeline&.ref
ref ||= @project.repository.branch_names_contains(commit.sha).first
not_found! 'References for commit' unless ref
name = params[:name] || params[:context] || 'default'
- pipeline = @project.pipeline_for(ref, commit.sha, params[:pipeline_id])
-
unless pipeline
pipeline = @project.ci_pipelines.create!(
source: :external,
@@ -126,6 +126,20 @@ module API
end
end
# rubocop: enable CodeReuse/ActiveRecord
+ helpers do
+ def commit
+ strong_memoize(:commit) do
+ user_project.commit(params[:sha])
+ end
+ end
+
+ def all_matching_pipelines
+ pipelines = user_project.ci_pipelines.newest_first(sha: commit.sha)
+ pipelines = pipelines.for_ref(params[:ref]) if params[:ref]
+ pipelines = pipelines.for_id(params[:pipeline_id]) if params[:pipeline_id]
+ pipelines
+ end
+ end
end
end
end
diff --git a/lib/api/commits.rb b/lib/api/commits.rb
index a2f3e87ebd2..ffff40141de 100644
--- a/lib/api/commits.rb
+++ b/lib/api/commits.rb
@@ -37,6 +37,7 @@ module API
optional :path, type: String, desc: 'The file path'
optional :all, type: Boolean, desc: 'Every commit will be returned'
optional :with_stats, type: Boolean, desc: 'Stats about each commit will be added to the response'
+ optional :first_parent, type: Boolean, desc: 'Only include the first parent of merges'
use :pagination
end
get ':id/repository/commits' do
@@ -47,6 +48,7 @@ module API
offset = (params[:page] - 1) * params[:per_page]
all = params[:all]
with_stats = params[:with_stats]
+ first_parent = params[:first_parent]
commits = user_project.repository.commits(ref,
path: path,
@@ -54,11 +56,12 @@ module API
offset: offset,
before: before,
after: after,
- all: all)
+ all: all,
+ first_parent: first_parent)
commit_count =
- if all || path || before || after
- user_project.repository.count_commits(ref: ref, path: path, before: before, after: after, all: all)
+ if all || path || before || after || first_parent
+ user_project.repository.count_commits(ref: ref, path: path, before: before, after: after, all: all, first_parent: first_parent)
else
# Cacheable commit count.
user_project.repository.commit_count_for_ref(ref)
diff --git a/lib/api/deploy_keys.rb b/lib/api/deploy_keys.rb
index df6d2721977..e86bcc19b2b 100644
--- a/lib/api/deploy_keys.rb
+++ b/lib/api/deploy_keys.rb
@@ -115,14 +115,20 @@ module API
put ":id/deploy_keys/:key_id" do
deploy_keys_project = find_by_deploy_key(user_project, params[:key_id])
- authorize!(:update_deploy_key, deploy_keys_project.deploy_key)
+ if !can?(current_user, :update_deploy_key, deploy_keys_project.deploy_key) &&
+ !can?(current_user, :update_deploy_keys_project, deploy_keys_project)
+ forbidden!(nil)
+ end
+
+ update_params = {}
+ update_params[:can_push] = params[:can_push] if params.key?(:can_push)
+ update_params[:deploy_key_attributes] = { id: params[:key_id] }
- can_push = params[:can_push].nil? ? deploy_keys_project.can_push : params[:can_push]
- title = params[:title] || deploy_keys_project.deploy_key.title
+ if can?(current_user, :update_deploy_key, deploy_keys_project.deploy_key)
+ update_params[:deploy_key_attributes][:title] = params[:title] if params.key?(:title)
+ end
- result = deploy_keys_project.update(can_push: can_push,
- deploy_key_attributes: { id: params[:key_id],
- title: title })
+ result = deploy_keys_project.update(update_params)
if result
present deploy_keys_project, with: Entities::DeployKeysProject
diff --git a/lib/api/deployments.rb b/lib/api/deployments.rb
index eb45df31ff9..da882547071 100644
--- a/lib/api/deployments.rb
+++ b/lib/api/deployments.rb
@@ -42,6 +42,88 @@ module API
present deployment, with: Entities::Deployment
end
+
+ desc 'Creates a new deployment' do
+ detail 'This feature was introduced in GitLab 12.4'
+ success Entities::Deployment
+ end
+ params do
+ requires :environment,
+ type: String,
+ desc: 'The name of the environment to deploy to'
+
+ requires :sha,
+ type: String,
+ desc: 'The SHA of the commit that was deployed'
+
+ requires :ref,
+ type: String,
+ desc: 'The name of the branch or tag that was deployed'
+
+ requires :tag,
+ type: Boolean,
+ desc: 'A boolean indicating if the deployment ran for a tag'
+
+ requires :status,
+ type: String,
+ desc: 'The status of the deployment',
+ values: %w[running success failed canceled]
+ end
+ post ':id/deployments' do
+ authorize!(:create_deployment, user_project)
+ authorize!(:create_environment, user_project)
+
+ environment = user_project
+ .environments
+ .find_or_create_by_name(params[:environment])
+
+ unless environment.persisted?
+ render_validation_error!(deployment)
+ end
+
+ authorize!(:create_deployment, environment)
+
+ service = ::Deployments::CreateService
+ .new(environment, current_user, declared_params)
+
+ deployment = service.execute
+
+ if deployment.persisted?
+ present(deployment, with: Entities::Deployment, current_user: current_user)
+ else
+ render_validation_error!(deployment)
+ end
+ end
+
+ desc 'Updates an existing deployment' do
+ detail 'This feature was introduced in GitLab 12.4'
+ success Entities::Deployment
+ end
+ params do
+ requires :status,
+ type: String,
+ desc: 'The new status of the deployment',
+ values: %w[running success failed canceled]
+ end
+ put ':id/deployments/:deployment_id' do
+ authorize!(:read_deployment, user_project)
+
+ deployment = user_project.deployments.find(params[:deployment_id])
+
+ authorize!(:update_deployment, deployment)
+
+ if deployment.deployable
+ forbidden!('Deployments created using GitLab CI can not be updated using the API')
+ end
+
+ service = ::Deployments::UpdateService.new(deployment, declared_params)
+
+ if service.execute
+ present(deployment, with: Entities::Deployment, current_user: current_user)
+ else
+ render_validation_error!(deployment)
+ end
+ end
end
end
end
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 89951498489..91811efacd7 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -378,6 +378,13 @@ module API
class Group < BasicGroupDetails
expose :path, :description, :visibility
+ expose :share_with_group_lock
+ expose :require_two_factor_authentication
+ expose :two_factor_grace_period
+ expose :project_creation_level_str, as: :project_creation_level
+ expose :auto_devops_enabled
+ expose :subgroup_creation_level_str, as: :subgroup_creation_level
+ expose :emails_disabled
expose :lfs_enabled?, as: :lfs_enabled
expose :avatar_url do |group, options|
group.avatar_url(only_path: false)
@@ -682,6 +689,7 @@ module API
class PipelineBasic < Grape::Entity
expose :id, :sha, :ref, :status
+ expose :created_at, :updated_at
expose :web_url do |pipeline, _options|
Gitlab::Routing.url_helpers.project_pipeline_url(pipeline.project, pipeline)
@@ -771,7 +779,7 @@ module API
end
class MergeRequest < MergeRequestBasic
- expose :subscribed do |merge_request, options|
+ expose :subscribed, if: -> (_, options) { options.fetch(:include_subscribed, true) } do |merge_request, options|
merge_request.subscribed?(options[:current_user], options[:project])
end
@@ -925,8 +933,8 @@ module API
end
class PushEventPayload < Grape::Entity
- expose :commit_count, :action, :ref_type, :commit_from, :commit_to
- expose :ref, :commit_title
+ expose :commit_count, :action, :ref_type, :commit_from, :commit_to, :ref,
+ :commit_title, :ref_count
end
class Event < Grape::Entity
@@ -965,13 +973,7 @@ module API
end
expose :target_url do |todo, options|
- target_type = todo.target_type.underscore
- target_url = "#{todo.parent.class.to_s.underscore}_#{target_type}_url"
- target_anchor = "note_#{todo.note_id}" if todo.note_id?
-
- Gitlab::Routing
- .url_helpers
- .public_send(target_url, todo.parent, todo.target, anchor: target_anchor) # rubocop:disable GitlabSecurity/PublicSend
+ todo_target_url(todo)
end
expose :body
@@ -983,6 +985,19 @@ module API
# see also https://gitlab.com/gitlab-org/gitlab-foss/issues/59719
::API::Entities.const_get(target_type, false)
end
+
+ def todo_target_url(todo)
+ target_type = todo.target_type.underscore
+ target_url = "#{todo.resource_parent.class.to_s.underscore}_#{target_type}_url"
+
+ Gitlab::Routing
+ .url_helpers
+ .public_send(target_url, todo.resource_parent, todo.target, anchor: todo_target_anchor(todo)) # rubocop:disable GitlabSecurity/PublicSend
+ end
+
+ def todo_target_anchor(todo)
+ "note_#{todo.note_id}" if todo.note_id?
+ end
end
class NamespaceBasic < Grape::Entity
@@ -1045,7 +1060,7 @@ module API
expose :job_events
# Expose serialized properties
expose :properties do |service, options|
- # TODO: Simplify as part of https://gitlab.com/gitlab-org/gitlab-ce/issues/63084
+ # TODO: Simplify as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
if service.data_fields_present?
service.data_fields.as_json.slice(*service.api_field_names)
else
@@ -1276,7 +1291,7 @@ module API
class Release < Grape::Entity
expose :name
- expose :tag, as: :tag_name, if: lambda { |_, _| can_download_code? }
+ expose :tag, as: :tag_name, if: ->(_, _) { can_download_code? }
expose :description
expose :description_html do |entity|
MarkupHelper.markdown_field(entity, :description)
@@ -1284,26 +1299,61 @@ module API
expose :created_at
expose :released_at
expose :author, using: Entities::UserBasic, if: -> (release, _) { release.author.present? }
- expose :commit, using: Entities::Commit, if: lambda { |_, _| can_download_code? }
+ expose :commit, using: Entities::Commit, if: ->(_, _) { can_download_code? }
expose :upcoming_release?, as: :upcoming_release
expose :milestones, using: Entities::Milestone, if: -> (release, _) { release.milestones.present? }
-
+ expose :commit_path, if: ->(_, _) { can_download_code? }
+ expose :tag_path, if: ->(_, _) { can_download_code? }
expose :assets do
expose :assets_count, as: :count do |release, _|
assets_to_exclude = can_download_code? ? [] : [:sources]
release.assets_count(except: assets_to_exclude)
end
- expose :sources, using: Entities::Releases::Source, if: lambda { |_, _| can_download_code? }
+ expose :sources, using: Entities::Releases::Source, if: ->(_, _) { can_download_code? }
expose :links, using: Entities::Releases::Link do |release, options|
release.links.sorted
end
end
+ expose :_links do
+ expose :merge_requests_url, if: -> (_) { release_mr_issue_urls_available? }
+ expose :issues_url, if: -> (_) { release_mr_issue_urls_available? }
+ end
private
def can_download_code?
Ability.allowed?(options[:current_user], :download_code, object.project)
end
+
+ def commit_path
+ return unless object.commit
+
+ Gitlab::Routing.url_helpers.project_commit_path(project, object.commit.id)
+ end
+
+ def tag_path
+ Gitlab::Routing.url_helpers.project_tag_path(project, object.tag)
+ end
+
+ def merge_requests_url
+ Gitlab::Routing.url_helpers.project_merge_requests_url(project, params_for_issues_and_mrs)
+ end
+
+ def issues_url
+ Gitlab::Routing.url_helpers.project_issues_url(project, params_for_issues_and_mrs)
+ end
+
+ def params_for_issues_and_mrs
+ { scope: 'all', state: 'opened', release_tag: object.tag }
+ end
+
+ def release_mr_issue_urls_available?
+ ::Feature.enabled?(:release_mr_issue_urls, project)
+ end
+
+ def project
+ @project ||= object.project
+ end
end
class Tag < Grape::Entity
@@ -1448,15 +1498,17 @@ module API
end
class Deployment < Grape::Entity
- expose :id, :iid, :ref, :sha, :created_at
+ expose :id, :iid, :ref, :sha, :created_at, :updated_at
expose :user, using: Entities::UserBasic
expose :environment, using: Entities::EnvironmentBasic
expose :deployable, using: Entities::Job
+ expose :status
end
class Environment < EnvironmentBasic
expose :project, using: Entities::BasicProjectDetails
expose :last_deployment, using: Entities::Deployment, if: { last_deployment: true }
+ expose :state
end
class LicenseBasic < Grape::Entity
diff --git a/lib/api/group_labels.rb b/lib/api/group_labels.rb
index 79a44941c81..7585293031f 100644
--- a/lib/api/group_labels.rb
+++ b/lib/api/group_labels.rb
@@ -18,10 +18,24 @@ module API
params do
optional :with_counts, type: Boolean, default: false,
desc: 'Include issue and merge request counts'
+ optional :include_ancestor_groups, type: Boolean, default: true,
+ desc: 'Include ancestor groups'
use :pagination
end
get ':id/labels' do
- get_labels(user_group, Entities::GroupLabel)
+ get_labels(user_group, Entities::GroupLabel, include_ancestor_groups: params[:include_ancestor_groups])
+ end
+
+ desc 'Get a single label' do
+ detail 'This feature was added in GitLab 12.4.'
+ success Entities::GroupLabel
+ end
+ params do
+ optional :include_ancestor_groups, type: Boolean, default: true,
+ desc: 'Include ancestor groups'
+ end
+ get ':id/labels/:name' do
+ get_label(user_group, Entities::GroupLabel, include_ancestor_groups: params[:include_ancestor_groups])
end
desc 'Create a new label' do
@@ -36,22 +50,21 @@ module API
end
desc 'Update an existing label. At least one optional parameter is required.' do
- detail 'This feature was added in GitLab 11.8'
+ detail 'This feature was added in GitLab 11.8 and deprecated in GitLab 12.4.'
success Entities::GroupLabel
end
params do
- requires :name, type: String, desc: 'The name of the label to be updated'
- optional :new_name, type: String, desc: 'The new name of the label'
- optional :color, type: String, desc: "The new color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB) or one of the allowed CSS color names"
- optional :description, type: String, desc: 'The new description of label'
- at_least_one_of :new_name, :color, :description
+ optional :label_id, type: Integer, desc: 'The id of the label to be updated'
+ optional :name, type: String, desc: 'The name of the label to be updated'
+ use :group_label_update_params
+ exactly_one_of :label_id, :name
end
put ':id/labels' do
update_label(user_group, Entities::GroupLabel)
end
desc 'Delete an existing label' do
- detail 'This feature was added in GitLab 11.8'
+ detail 'This feature was added in GitLab 11.8 and deprecated in GitLab 12.4.'
success Entities::GroupLabel
end
params do
@@ -60,6 +73,29 @@ module API
delete ':id/labels' do
delete_label(user_group)
end
+
+ desc 'Update an existing label. At least one optional parameter is required.' do
+ detail 'This feature was added in GitLab 12.4.'
+ success Entities::GroupLabel
+ end
+ params do
+ requires :name, type: String, desc: 'The name or id of the label to be updated'
+ use :group_label_update_params
+ end
+ put ':id/labels/:name' do
+ update_label(user_group, Entities::GroupLabel)
+ end
+
+ desc 'Delete an existing label' do
+ detail 'This feature was added in GitLab 12.4.'
+ success Entities::GroupLabel
+ end
+ params do
+ requires :name, type: String, desc: 'The name or id of the label to be deleted'
+ end
+ delete ':id/labels/:name' do
+ delete_label(user_group)
+ end
end
end
end
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index fad8bb13150..19c29847ce3 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -350,7 +350,7 @@ module API
render_api_error!(message || '409 Conflict', 409)
end
- def file_to_large!
+ def file_too_large!
render_api_error!('413 Request Entity Too Large', 413)
end
diff --git a/lib/api/helpers/graphql_helpers.rb b/lib/api/helpers/graphql_helpers.rb
index bd60470fbd6..3ddef0c16b3 100644
--- a/lib/api/helpers/graphql_helpers.rb
+++ b/lib/api/helpers/graphql_helpers.rb
@@ -6,7 +6,7 @@ module API
# against the graphql API. Helper code for the graphql server implementation
# should be in app/graphql/ or lib/gitlab/graphql/
module GraphqlHelpers
- def conditionally_graphql!(fallback:, query:, context: {}, transform: nil)
+ def run_graphql!(query:, context: {}, transform: nil)
result = GitlabSchema.execute(query, context: context)
if transform
diff --git a/lib/api/helpers/groups_helpers.rb b/lib/api/helpers/groups_helpers.rb
index 585ae1eb5c4..2cc18acb7ec 100644
--- a/lib/api/helpers/groups_helpers.rb
+++ b/lib/api/helpers/groups_helpers.rb
@@ -10,12 +10,16 @@ module API
optional :description, type: String, desc: 'The description of the group'
optional :visibility, type: String,
values: Gitlab::VisibilityLevel.string_values,
- default: Gitlab::VisibilityLevel.string_level(
- Gitlab::CurrentSettings.current_application_settings.default_group_visibility),
desc: 'The visibility of the group'
+ optional :share_with_group_lock, type: Boolean, desc: 'Prevent sharing a project with another group within this group'
+ optional :require_two_factor_authentication, type: Boolean, desc: 'Require all users in this group to setup Two-factor authentication'
+ optional :two_factor_grace_period, type: Integer, desc: 'Time before Two-factor authentication is enforced'
+ optional :project_creation_level, type: String, values: ::Gitlab::Access.project_creation_string_values, desc: 'Determine if developers can create projects in the group', as: :project_creation_level_str
+ optional :auto_devops_enabled, type: Boolean, desc: 'Default to Auto DevOps pipeline for all projects within this group'
+ optional :subgroup_creation_level, type: String, values: ::Gitlab::Access.subgroup_creation_string_values, desc: 'Allowed to create subgroups', as: :subgroup_creation_level_str
+ optional :emails_disabled, type: Boolean, desc: 'Disable email notifications'
optional :lfs_enabled, type: Boolean, desc: 'Enable/disable LFS for the projects in this group'
optional :request_access_enabled, type: Boolean, desc: 'Allow users to request member access'
- optional :share_with_group_lock, type: Boolean, desc: 'Prevent sharing a project with another group within this group'
end
params :optional_params_ee do
diff --git a/lib/api/helpers/label_helpers.rb b/lib/api/helpers/label_helpers.rb
index ec5b688dd1c..2fb2d9b79cf 100644
--- a/lib/api/helpers/label_helpers.rb
+++ b/lib/api/helpers/label_helpers.rb
@@ -11,6 +11,23 @@ module API
optional :description, type: String, desc: 'The description of label to be created'
end
+ params :label_update_params do
+ optional :new_name, type: String, desc: 'The new name of the label'
+ optional :color, type: String, desc: "The new color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB) or one of the allowed CSS color names"
+ optional :description, type: String, desc: 'The new description of label'
+ end
+
+ params :project_label_update_params do
+ use :label_update_params
+ optional :priority, type: Integer, desc: 'The priority of the label', allow_blank: true
+ at_least_one_of :new_name, :color, :description, :priority
+ end
+
+ params :group_label_update_params do
+ use :label_update_params
+ at_least_one_of :new_name, :color, :description
+ end
+
def find_label(parent, id_or_title, include_ancestor_groups: true)
labels = available_labels_for(parent, include_ancestor_groups: include_ancestor_groups)
label = labels.find_by_id(id_or_title) || labels.find_by_title(id_or_title)
@@ -18,14 +35,20 @@ module API
label || not_found!('Label')
end
- def get_labels(parent, entity)
- present paginate(available_labels_for(parent)),
+ def get_labels(parent, entity, include_ancestor_groups: true)
+ present paginate(available_labels_for(parent, include_ancestor_groups: include_ancestor_groups)),
with: entity,
current_user: current_user,
parent: parent,
with_counts: params[:with_counts]
end
+ def get_label(parent, entity, include_ancestor_groups: true)
+ label = find_label(parent, params_id_or_title, include_ancestor_groups: include_ancestor_groups)
+
+ present label, with: entity, current_user: current_user, parent: parent
+ end
+
def create_label(parent, entity)
authorize! :admin_label, parent
@@ -57,6 +80,7 @@ module API
# params is used to update the label so we need to remove this field here
params.delete(:label_id)
+ params.delete(:name)
label = ::Labels::UpdateService.new(declared_params(include_missing: false)).execute(label)
render_validation_error!(label) unless label.valid?
@@ -80,6 +104,24 @@ module API
destroy_conditionally!(label)
end
+ def promote_label(parent)
+ authorize! :admin_label, parent
+
+ label = find_label(parent, params[:name], include_ancestor_groups: false)
+
+ begin
+ group_label = ::Labels::PromoteService.new(parent, current_user).execute(label)
+
+ if group_label
+ present group_label, with: Entities::GroupLabel, current_user: current_user, parent: parent.group
+ else
+ render_api_error!('Failed to promote project label to group label', 400)
+ end
+ rescue => error
+ render_api_error!(error.to_s, 400)
+ end
+ end
+
def params_id_or_title
@params_id_or_title ||= params[:label_id] || params[:name]
end
diff --git a/lib/api/helpers/runner.rb b/lib/api/helpers/runner.rb
index 11631378137..fa8b9ad79bd 100644
--- a/lib/api/helpers/runner.rb
+++ b/lib/api/helpers/runner.rb
@@ -59,8 +59,9 @@ module API
token && job.valid_token?(token)
end
- def max_artifacts_size
- Gitlab::CurrentSettings.max_artifacts_size.megabytes.to_i
+ def max_artifacts_size(job)
+ max_size = job.project.closest_setting(:max_artifacts_size)
+ max_size.megabytes.to_i
end
def job_forbidden!(job, reason)
diff --git a/lib/api/internal/base.rb b/lib/api/internal/base.rb
index d5f0ddb0805..d9a22484c1f 100644
--- a/lib/api/internal/base.rb
+++ b/lib/api/internal/base.rb
@@ -26,20 +26,11 @@ module API
def ee_post_receive_response_hook(response)
# Hook for EE to add messages
end
- end
- namespace 'internal' do
- # Check if git command is allowed for project
- #
- # Params:
- # key_id - ssh key id for Git over SSH
- # user_id - user id for Git over HTTP or over SSH in keyless SSH CERT mode
- # username - user name for Git over SSH in keyless SSH cert mode
- # protocol - Git access protocol being used, e.g. HTTP or SSH
- # project - project full_path (not path on disk)
- # action - git action (git-upload-pack or git-receive-pack)
- # changes - changes as "oldrev newrev ref", see Gitlab::ChangesList
- post "/allowed" do
+ def check_allowed(params)
+ # This is a separate method so that EE can alter its behaviour more
+ # easily.
+
# Stores some Git-specific env thread-safely
env = parse_env
Gitlab::Git::HookEnv.set(gl_repository, env) if project
@@ -53,11 +44,11 @@ module API
@project ||= access_checker.project
result
rescue Gitlab::GitAccess::UnauthorizedError => e
- break response_with_status(code: 401, success: false, message: e.message)
+ return response_with_status(code: 401, success: false, message: e.message)
rescue Gitlab::GitAccess::TimeoutError => e
- break response_with_status(code: 503, success: false, message: e.message)
+ return response_with_status(code: 503, success: false, message: e.message)
rescue Gitlab::GitAccess::NotFoundError => e
- break response_with_status(code: 404, success: false, message: e.message)
+ return response_with_status(code: 404, success: false, message: e.message)
end
log_user_activity(actor.user)
@@ -78,6 +69,10 @@ module API
receive_max_input_size = Gitlab::CurrentSettings.receive_max_input_size.to_i
if receive_max_input_size > 0
payload[:git_config_options] << "receive.maxInputSize=#{receive_max_input_size.megabytes}"
+
+ if Feature.enabled?(:gitaly_upload_pack_filter, project)
+ payload[:git_config_options] << "uploadpack.allowFilter=true" << "uploadpack.allowAnySHA1InWant=true"
+ end
end
response_with_status(**payload)
@@ -87,6 +82,26 @@ module API
response_with_status(code: 500, success: false, message: UNKNOWN_CHECK_RESULT_ERROR)
end
end
+ end
+
+ namespace 'internal' do
+ # Check if git command is allowed for project
+ #
+ # Params:
+ # key_id - ssh key id for Git over SSH
+ # user_id - user id for Git over HTTP or over SSH in keyless SSH CERT mode
+ # username - user name for Git over SSH in keyless SSH cert mode
+ # protocol - Git access protocol being used, e.g. HTTP or SSH
+ # project - project full_path (not path on disk)
+ # action - git action (git-upload-pack or git-receive-pack)
+ # changes - changes as "oldrev newrev ref", see Gitlab::ChangesList
+ # check_ip - optional, only in EE version, may limit access to
+ # group resources based on its IP restrictions
+ post "/allowed" do
+ # It was moved to a separate method so that EE can alter its behaviour more
+ # easily.
+ check_allowed(params)
+ end
# rubocop: disable CodeReuse/ActiveRecord
post "/lfs_authenticate" do
@@ -108,10 +123,6 @@ module API
end
# rubocop: enable CodeReuse/ActiveRecord
- get "/merge_request_urls" do
- merge_request_urls
- end
-
#
# Get a ssh key using the fingerprint
#
@@ -129,20 +140,15 @@ module API
#
# Discover user by ssh key, user id or username
#
- # rubocop: disable CodeReuse/ActiveRecord
- get "/discover" do
+ get '/discover' do
if params[:key_id]
- key = Key.find(params[:key_id])
- user = key.user
- elsif params[:user_id]
- user = User.find_by(id: params[:user_id])
+ user = UserFinder.new(params[:key_id]).find_by_ssh_key_id
elsif params[:username]
user = UserFinder.new(params[:username]).find_by_username
end
present user, with: Entities::UserSafe
end
- # rubocop: enable CodeReuse/ActiveRecord
get "/check" do
{
@@ -153,22 +159,6 @@ module API
}
end
- get "/broadcast_messages" do
- if messages = BroadcastMessage.current
- present messages, with: Entities::BroadcastMessage
- else
- []
- end
- end
-
- get "/broadcast_message" do
- if message = BroadcastMessage.current&.last
- present message, with: Entities::BroadcastMessage
- else
- {}
- end
- end
-
# rubocop: disable CodeReuse/ActiveRecord
post '/two_factor_recovery_codes' do
status 200
diff --git a/lib/api/internal/pages.rb b/lib/api/internal/pages.rb
index eaa434cff51..003af7f6dd4 100644
--- a/lib/api/internal/pages.rb
+++ b/lib/api/internal/pages.rb
@@ -17,11 +17,18 @@ module API
namespace 'internal' do
namespace 'pages' do
+ desc 'Get GitLab Pages domain configuration by hostname' do
+ detail 'This feature was introduced in GitLab 12.3.'
+ end
+ params do
+ requires :host, type: String, desc: 'The host to query for'
+ end
get "/" do
- host = PagesDomain.find_by_domain(params[:host])
+ host = Namespace.find_by_pages_host(params[:host]) || PagesDomain.find_by_domain(params[:host])
not_found! unless host
virtual_domain = host.pages_virtual_domain
+ no_content! unless virtual_domain
present virtual_domain, with: Entities::Internal::Pages::VirtualDomain
end
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index de6af980896..4208385a48d 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -343,7 +343,8 @@ module API
present paginate(::Kaminari.paginate_array(merge_requests)),
with: Entities::MergeRequest,
current_user: current_user,
- project: user_project
+ project: user_project,
+ include_subscribed: false
end
desc 'List merge requests closing issue' do
diff --git a/lib/api/labels.rb b/lib/api/labels.rb
index de89e94b0c0..2b283d82e4a 100644
--- a/lib/api/labels.rb
+++ b/lib/api/labels.rb
@@ -17,10 +17,24 @@ module API
params do
optional :with_counts, type: Boolean, default: false,
desc: 'Include issue and merge request counts'
+ optional :include_ancestor_groups, type: Boolean, default: true,
+ desc: 'Include ancestor groups'
use :pagination
end
get ':id/labels' do
- get_labels(user_project, Entities::ProjectLabel)
+ get_labels(user_project, Entities::ProjectLabel, include_ancestor_groups: params[:include_ancestor_groups])
+ end
+
+ desc 'Get a single label' do
+ detail 'This feature was added in GitLab 12.4.'
+ success Entities::ProjectLabel
+ end
+ params do
+ optional :include_ancestor_groups, type: Boolean, default: true,
+ desc: 'Include ancestor groups'
+ end
+ get ':id/labels/:name' do
+ get_label(user_project, Entities::ProjectLabel, include_ancestor_groups: params[:include_ancestor_groups])
end
desc 'Create a new label' do
@@ -35,23 +49,21 @@ module API
end
desc 'Update an existing label. At least one optional parameter is required.' do
+ detail 'This feature was deprecated in GitLab 12.4.'
success Entities::ProjectLabel
end
params do
optional :label_id, type: Integer, desc: 'The id of the label to be updated'
optional :name, type: String, desc: 'The name of the label to be updated'
- optional :new_name, type: String, desc: 'The new name of the label'
- optional :color, type: String, desc: "The new color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB) or one of the allowed CSS color names"
- optional :description, type: String, desc: 'The new description of label'
- optional :priority, type: Integer, desc: 'The priority of the label', allow_blank: true
+ use :project_label_update_params
exactly_one_of :label_id, :name
- at_least_one_of :new_name, :color, :description, :priority
end
put ':id/labels' do
update_label(user_project, Entities::ProjectLabel)
end
desc 'Delete an existing label' do
+ detail 'This feature was deprecated in GitLab 12.4.'
success Entities::ProjectLabel
end
params do
@@ -64,28 +76,48 @@ module API
end
desc 'Promote a label to a group label' do
- detail 'This feature was added in GitLab 12.3'
+ detail 'This feature was added in GitLab 12.3 and deprecated in GitLab 12.4.'
success Entities::GroupLabel
end
params do
requires :name, type: String, desc: 'The name of the label to be promoted'
end
put ':id/labels/promote' do
- authorize! :admin_label, user_project
+ promote_label(user_project)
+ end
- label = find_label(user_project, params[:name], include_ancestor_groups: false)
+ desc 'Update an existing label. At least one optional parameter is required.' do
+ detail 'This feature was added in GitLab 12.4.'
+ success Entities::ProjectLabel
+ end
+ params do
+ requires :name, type: String, desc: 'The name or id of the label to be updated'
+ use :project_label_update_params
+ end
+ put ':id/labels/:name' do
+ update_label(user_project, Entities::ProjectLabel)
+ end
- begin
- group_label = ::Labels::PromoteService.new(user_project, current_user).execute(label)
+ desc 'Delete an existing label' do
+ detail 'This feature was added in GitLab 12.4.'
+ success Entities::ProjectLabel
+ end
+ params do
+ requires :name, type: String, desc: 'The name or id of the label to be deleted'
+ end
+ delete ':id/labels/:name' do
+ delete_label(user_project)
+ end
- if group_label
- present group_label, with: Entities::GroupLabel, current_user: current_user, parent: user_project.group
- else
- render_api_error!('Failed to promote project label to group label', 400)
- end
- rescue => error
- render_api_error!(error.to_s, 400)
- end
+ desc 'Promote a label to a group label' do
+ detail 'This feature was added in GitLab 12.4.'
+ success Entities::GroupLabel
+ end
+ params do
+ requires :name, type: String, desc: 'The name or id of the label to be promoted'
+ end
+ put ':id/labels/:name/promote' do
+ promote_label(user_project)
end
end
end
diff --git a/lib/api/members.rb b/lib/api/members.rb
index 461ffe71a62..1d4616fed52 100644
--- a/lib/api/members.rb
+++ b/lib/api/members.rb
@@ -18,6 +18,7 @@ module API
end
params do
optional :query, type: String, desc: 'A query string to search for members'
+ optional :user_ids, type: Array[Integer], desc: 'Array of user ids to look up for membership'
use :pagination
end
# rubocop: disable CodeReuse/ActiveRecord
@@ -26,6 +27,7 @@ module API
members = source.members.where.not(user_id: nil).includes(:user)
members = members.joins(:user).merge(User.search(params[:query])) if params[:query].present?
+ members = members.where(user_id: params[:user_ids]) if params[:user_ids].present?
members = paginate(members)
present members, with: Entities::Member
@@ -37,6 +39,7 @@ module API
end
params do
optional :query, type: String, desc: 'A query string to search for members'
+ optional :user_ids, type: Array[Integer], desc: 'Array of user ids to look up for membership'
use :pagination
end
# rubocop: disable CodeReuse/ActiveRecord
@@ -45,6 +48,7 @@ module API
members = find_all_members(source_type, source)
members = members.includes(:user).references(:user).merge(User.search(params[:query])) if params[:query].present?
+ members = members.where(user_id: params[:user_ids]) if params[:user_ids].present?
members = paginate(members)
present members, with: Entities::Member
@@ -68,6 +72,23 @@ module API
end
# rubocop: enable CodeReuse/ActiveRecord
+ desc 'Gets a member of a group or project, including those who gained membership through ancestor group' do
+ success Entities::Member
+ end
+ params do
+ requires :user_id, type: Integer, desc: 'The user ID of the member'
+ end
+ # rubocop: disable CodeReuse/ActiveRecord
+ get ":id/members/all/:user_id" do
+ source = find_source(source_type, params[:id])
+
+ members = find_all_members(source_type, source)
+ member = members.find_by!(user_id: params[:user_id])
+
+ present member, with: Entities::Member
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+
desc 'Adds a member to a group or project.' do
success Entities::Member
end
diff --git a/lib/api/notes.rb b/lib/api/notes.rb
index 16fca9acccb..89e4da5a42e 100644
--- a/lib/api/notes.rb
+++ b/lib/api/notes.rb
@@ -80,7 +80,7 @@ module API
note = create_note(noteable, opts)
if note.valid?
- present note, with: Entities.const_get(note.class.name)
+ present note, with: Entities.const_get(note.class.name, false)
else
bad_request!("Note #{note.errors.messages}")
end
diff --git a/lib/api/project_container_repositories.rb b/lib/api/project_container_repositories.rb
index c10ef96922c..2a05974509a 100644
--- a/lib/api/project_container_repositories.rb
+++ b/lib/api/project_container_repositories.rb
@@ -106,9 +106,15 @@ module API
authorize_destroy_container_image!
validate_tag!
- tag.delete
-
- status :ok
+ result = ::Projects::ContainerRepository::DeleteTagsService
+ .new(repository.project, current_user, tags: [declared_params[:tag_name]])
+ .execute(repository)
+
+ if result[:status] == :success
+ status :ok
+ else
+ status :bad_request
+ end
end
end
diff --git a/lib/api/project_import.rb b/lib/api/project_import.rb
index 7f1ae5ffbe6..b3f17447ea0 100644
--- a/lib/api/project_import.rb
+++ b/lib/api/project_import.rb
@@ -29,6 +29,7 @@ module API
requires :path, type: String, desc: 'The new project path and name'
# TODO: remove rubocop disable - https://gitlab.com/gitlab-org/gitlab/issues/14960
requires :file, type: File, desc: 'The project export file to be imported' # rubocop:disable Scalability/FileUploads
+ optional :name, type: String, desc: 'The name of the project to be imported. Defaults to the path of the project if not provided.'
optional :namespace, type: String, desc: "The ID or name of the namespace that the project will be imported into. Defaults to the current user's namespace."
optional :overwrite, type: Boolean, default: false, desc: 'If there is a project in the same namespace and with the same name overwrite it'
optional :override_params,
@@ -55,6 +56,7 @@ module API
project_params = {
path: import_params[:path],
namespace_id: namespace.id,
+ name: import_params[:name],
file: import_params[:file]['tempfile'],
overwrite: import_params[:overwrite]
}
diff --git a/lib/api/protected_branches.rb b/lib/api/protected_branches.rb
index ca75ee906ce..c7665c20234 100644
--- a/lib/api/protected_branches.rb
+++ b/lib/api/protected_branches.rb
@@ -42,7 +42,7 @@ module API
end
# rubocop: enable CodeReuse/ActiveRecord
- desc 'Protect a single branch or wildcard' do
+ desc 'Protect a single branch' do
success Entities::ProtectedBranch
end
params do
@@ -93,3 +93,5 @@ module API
end
end
end
+
+API::ProtectedBranches.prepend_if_ee('EE::API::ProtectedBranches')
diff --git a/lib/api/runner.rb b/lib/api/runner.rb
index fdf4904e9f5..f383c541f8a 100644
--- a/lib/api/runner.rb
+++ b/lib/api/runner.rb
@@ -221,14 +221,16 @@ module API
job = authenticate_job!
forbidden!('Job is not running') unless job.running?
+ max_size = max_artifacts_size(job)
+
if params[:filesize]
file_size = params[:filesize].to_i
- file_to_large! unless file_size < max_artifacts_size
+ file_too_large! unless file_size < max_size
end
status 200
content_type Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE
- JobArtifactUploader.workhorse_authorize(has_length: false, maximum_size: max_artifacts_size)
+ JobArtifactUploader.workhorse_authorize(has_length: false, maximum_size: max_size)
end
desc 'Upload artifacts for job' do
@@ -268,7 +270,7 @@ module API
metadata = UploadedFile.from_params(params, :metadata, JobArtifactUploader.workhorse_local_upload_path)
bad_request!('Missing artifacts file!') unless artifacts
- file_to_large! unless artifacts.size < max_artifacts_size
+ file_too_large! unless artifacts.size < max_artifacts_size(job)
expire_in = params['expire_in'] ||
Gitlab::CurrentSettings.current_application_settings.default_artifacts_expire_in
diff --git a/lib/api/settings.rb b/lib/api/settings.rb
index e4ef507228b..c90ba0c9b5d 100644
--- a/lib/api/settings.rb
+++ b/lib/api/settings.rb
@@ -101,6 +101,8 @@ module API
optional :polling_interval_multiplier, type: BigDecimal, desc: 'Interval multiplier used by endpoints that perform polling. Set to 0 to disable polling.'
optional :project_export_enabled, type: Boolean, desc: 'Enable project export'
optional :prometheus_metrics_enabled, type: Boolean, desc: 'Enable Prometheus metrics'
+ optional :push_event_hooks_limit, type: Integer, desc: "Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value."
+ optional :push_event_activities_limit, type: Integer, desc: 'Number of changes (branches or tags) in a single push to determine whether individual push events or bulk push event will be created. Bulk push event will be created if it surpasses that value.'
optional :recaptcha_enabled, type: Boolean, desc: 'Helps prevent bots from creating accounts'
given recaptcha_enabled: ->(val) { val } do
requires :recaptcha_site_key, type: String, desc: 'Generate site key at http://www.google.com/recaptcha'
diff --git a/lib/api/todos.rb b/lib/api/todos.rb
index 404675bfaec..e3f3aca27df 100644
--- a/lib/api/todos.rb
+++ b/lib/api/todos.rb
@@ -49,7 +49,7 @@ module API
resource :todos do
helpers do
def issuable_and_awardable?(type)
- obj_type = Object.const_get(type)
+ obj_type = Object.const_get(type, false)
(obj_type < Issuable) && (obj_type < Awardable)
rescue NameError
diff --git a/lib/api/users.rb b/lib/api/users.rb
index ff8b82e1898..ff0b1e87b03 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -459,6 +459,42 @@ module API
end
# rubocop: enable CodeReuse/ActiveRecord
+ desc 'Activate a deactivated user. Available only for admins.'
+ params do
+ requires :id, type: Integer, desc: 'The ID of the user'
+ end
+ # rubocop: disable CodeReuse/ActiveRecord
+ post ':id/activate' do
+ authenticated_as_admin!
+
+ user = User.find_by(id: params[:id])
+ not_found!('User') unless user
+ forbidden!('A blocked user must be unblocked to be activated') if user.blocked?
+
+ user.activate
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+ desc 'Deactivate an active user. Available only for admins.'
+ params do
+ requires :id, type: Integer, desc: 'The ID of the user'
+ end
+ # rubocop: disable CodeReuse/ActiveRecord
+ post ':id/deactivate' do
+ authenticated_as_admin!
+ user = User.find_by(id: params[:id])
+ not_found!('User') unless user
+
+ break if user.deactivated?
+
+ unless user.can_be_deactivated?
+ forbidden!('A blocked user cannot be deactivated by the API') if user.blocked?
+ forbidden!("The user you are trying to deactivate has been active in the past #{::User::MINIMUM_INACTIVE_DAYS} days and cannot be deactivated")
+ end
+
+ user.deactivate
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+
desc 'Block a user. Available only for admins.'
params do
requires :id, type: Integer, desc: 'The ID of the user'
@@ -489,6 +525,8 @@ module API
if user.ldap_blocked?
forbidden!('LDAP blocked users cannot be unblocked by the API')
+ elsif user.deactivated?
+ forbidden!('Deactivated users cannot be unblocked by the API')
else
user.activate
end
diff --git a/lib/api/version.rb b/lib/api/version.rb
index eca1b529094..f79bb3428f2 100644
--- a/lib/api/version.rb
+++ b/lib/api/version.rb
@@ -19,11 +19,10 @@ module API
detail 'This feature was introduced in GitLab 8.13.'
end
get '/version' do
- conditionally_graphql!(
+ run_graphql!(
query: METADATA_QUERY,
context: { current_user: current_user },
- transform: ->(result) { result.dig('data', 'metadata') },
- fallback: -> { { version: Gitlab::VERSION, revision: Gitlab.revision } }
+ transform: ->(result) { result.dig('data', 'metadata') }
)
end
end
diff --git a/lib/backup/manager.rb b/lib/backup/manager.rb
index c0390959269..ce0c4c5d974 100644
--- a/lib/backup/manager.rb
+++ b/lib/backup/manager.rb
@@ -127,7 +127,7 @@ module Backup
end
tar_file = if ENV['BACKUP'].present?
- "#{ENV['BACKUP']}#{FILE_NAME_SUFFIX}"
+ File.basename(ENV['BACKUP']) + FILE_NAME_SUFFIX
else
backup_file_list.first
end
@@ -235,8 +235,8 @@ module Backup
end
def tar_file
- @tar_file ||= if ENV['BACKUP']
- ENV['BACKUP'] + "#{FILE_NAME_SUFFIX}"
+ @tar_file ||= if ENV['BACKUP'].present?
+ File.basename(ENV['BACKUP']) + FILE_NAME_SUFFIX
else
"#{backup_information[:backup_created_at].strftime('%s_%Y_%m_%d_')}#{backup_information[:gitlab_version]}#{FILE_NAME_SUFFIX}"
end
diff --git a/lib/backup/repository.rb b/lib/backup/repository.rb
index 22ed1d8e7b4..974e32ce17c 100644
--- a/lib/backup/repository.rb
+++ b/lib/backup/repository.rb
@@ -41,12 +41,6 @@ module Backup
end
end
- def prepare_directories
- Gitlab.config.repositories.storages.each do |name, _repository_storage|
- Gitlab::GitalyClient::StorageService.new(name).delete_all_repositories
- end
- end
-
def backup_project(project)
path_to_project_bundle = path_to_bundle(project)
Gitlab::GitalyClient::RepositoryService.new(project.repository)
@@ -75,14 +69,13 @@ module Backup
end
def restore
- prepare_directories
-
Project.find_each(batch_size: 1000) do |project|
progress.print " * #{project.full_path} ... "
path_to_project_bundle = path_to_bundle(project)
- project.ensure_storage_path_exists
+ project.repository.remove rescue nil
restore_repo_success = nil
+
if File.exist?(path_to_project_bundle)
begin
project.repository.create_from_bundle(path_to_project_bundle)
diff --git a/lib/banzai/filter.rb b/lib/banzai/filter.rb
index 7d9766c906c..2438cb3c166 100644
--- a/lib/banzai/filter.rb
+++ b/lib/banzai/filter.rb
@@ -3,7 +3,7 @@
module Banzai
module Filter
def self.[](name)
- const_get("#{name.to_s.camelize}Filter")
+ const_get("#{name.to_s.camelize}Filter", false)
end
end
end
diff --git a/lib/banzai/filter/ascii_doc_sanitization_filter.rb b/lib/banzai/filter/ascii_doc_sanitization_filter.rb
index 9105e86ad04..e41f7d8488a 100644
--- a/lib/banzai/filter/ascii_doc_sanitization_filter.rb
+++ b/lib/banzai/filter/ascii_doc_sanitization_filter.rb
@@ -22,6 +22,10 @@ module Banzai
CHECKLIST_CLASSES = %w(fa fa-check-square-o fa-square-o).freeze
LIST_CLASSES = %w(checklist none no-bullet unnumbered unstyled).freeze
+ TABLE_FRAME_CLASSES = %w(frame-all frame-topbot frame-sides frame-ends frame-none).freeze
+ TABLE_GRID_CLASSES = %w(grid-all grid-rows grid-cols grid-none).freeze
+ TABLE_STRIPES_CLASSES = %w(stripes-all stripes-odd stripes-even stripes-hover stripes-none).freeze
+
ELEMENT_CLASSES_WHITELIST = {
span: %w(big small underline overline line-through).freeze,
div: ['admonitionblock'].freeze,
@@ -29,7 +33,8 @@ module Banzai
i: ADMONITION_CLASSES + CALLOUT_CLASSES + CHECKLIST_CLASSES,
ul: LIST_CLASSES,
ol: LIST_CLASSES,
- a: ['anchor'].freeze
+ a: ['anchor'].freeze,
+ table: TABLE_FRAME_CLASSES + TABLE_GRID_CLASSES + TABLE_STRIPES_CLASSES
}.freeze
def customize_whitelist(whitelist)
@@ -45,6 +50,7 @@ module Banzai
whitelist[:attributes]['ul'] = %w(class)
whitelist[:attributes]['ol'] = %w(class)
whitelist[:attributes]['a'].push('class')
+ whitelist[:attributes]['table'] = %w(class)
whitelist[:transformers].push(self.class.remove_element_classes)
# Allow `id` in heading elements for section anchors
diff --git a/lib/banzai/filter/audio_link_filter.rb b/lib/banzai/filter/audio_link_filter.rb
new file mode 100644
index 00000000000..50472c3cf81
--- /dev/null
+++ b/lib/banzai/filter/audio_link_filter.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+# Generated HTML is transformed back to GFM by app/assets/javascripts/behaviors/markdown/nodes/audio.js
+module Banzai
+ module Filter
+ class AudioLinkFilter < PlayableLinkFilter
+ private
+
+ def media_type
+ "audio"
+ end
+
+ def safe_media_ext
+ Gitlab::FileTypeDetection::SAFE_AUDIO_EXT
+ end
+ end
+ end
+end
diff --git a/lib/banzai/filter/playable_link_filter.rb b/lib/banzai/filter/playable_link_filter.rb
new file mode 100644
index 00000000000..0a043aa809c
--- /dev/null
+++ b/lib/banzai/filter/playable_link_filter.rb
@@ -0,0 +1,87 @@
+# frozen_string_literal: true
+
+module Banzai
+ module Filter
+ # Find every image that isn't already wrapped in an `a` tag, and that has
+ # a `src` attribute ending with an audio or video extension, add a new audio or video node and
+ # a "Download" link in the case the media cannot be played.
+ class PlayableLinkFilter < HTML::Pipeline::Filter
+ def call
+ doc.xpath('descendant-or-self::img[not(ancestor::a)]').each do |el|
+ el.replace(media_node(doc, el)) if has_media_extension?(el)
+ end
+
+ doc
+ end
+
+ private
+
+ def media_type
+ raise NotImplementedError
+ end
+
+ def safe_media_ext
+ raise NotImplementedError
+ end
+
+ def extra_element_attrs
+ {}
+ end
+
+ def has_media_extension?(element)
+ src = element.attr('data-canonical-src').presence || element.attr('src')
+
+ return unless src.present?
+
+ src_ext = File.extname(src).sub('.', '').downcase
+ safe_media_ext.include?(src_ext)
+ end
+
+ def media_element(doc, element)
+ media_element_attrs = {
+ src: element['src'],
+ controls: true,
+ 'data-setup': '{}',
+ 'data-title': element['title'] || element['alt']
+ }.merge!(extra_element_attrs)
+
+ if element['data-canonical-src']
+ media_element_attrs['data-canonical-src'] = element['data-canonical-src']
+ end
+
+ doc.document.create_element(media_type, media_element_attrs)
+ end
+
+ def download_paragraph(doc, element)
+ link_content = element['title'] || element['alt']
+
+ link_element_attrs = {
+ href: element['src'],
+ target: '_blank',
+ rel: 'noopener noreferrer',
+ title: "Download '#{link_content}'"
+ }
+
+ # make sure the original non-proxied src carries over
+ if element['data-canonical-src']
+ link_element_attrs['data-canonical-src'] = element['data-canonical-src']
+ end
+
+ link = doc.document.create_element('a', link_content, link_element_attrs)
+
+ doc.document.create_element('p').tap do |paragraph|
+ paragraph.children = link
+ end
+ end
+
+ def media_node(doc, element)
+ container_element_attrs = { class: "#{media_type}-container" }
+
+ doc.document.create_element( "div", container_element_attrs).tap do |container|
+ container.add_child(media_element(doc, element))
+ container.add_child(download_paragraph(doc, element))
+ end
+ end
+ end
+ end
+end
diff --git a/lib/banzai/filter/relative_link_filter.rb b/lib/banzai/filter/relative_link_filter.rb
index e8001889ca3..c7589e69262 100644
--- a/lib/banzai/filter/relative_link_filter.rb
+++ b/lib/banzai/filter/relative_link_filter.rb
@@ -20,16 +20,13 @@ module Banzai
def call
return doc if context[:system_note]
- @uri_types = {}
clear_memoization(:linkable_files)
+ clear_memoization(:linkable_attributes)
- doc.search('a:not(.gfm)').each do |el|
- process_link_attr el.attribute('href')
- end
+ load_uri_types
- doc.css('img, video').each do |el|
- process_link_attr el.attribute('src')
- process_link_attr el.attribute('data-src')
+ linkable_attributes.each do |attr|
+ process_link_attr(attr)
end
doc
@@ -37,16 +34,80 @@ module Banzai
protected
+ def load_uri_types
+ return unless linkable_files?
+ return unless linkable_attributes.present?
+ return {} unless repository
+
+ @uri_types = request_path.present? ? get_uri_types([request_path]) : {}
+
+ paths = linkable_attributes.flat_map do |attr|
+ [get_uri(attr).to_s, relative_file_path(get_uri(attr))]
+ end
+
+ paths.reject!(&:blank?)
+ paths.uniq!
+
+ @uri_types.merge!(get_uri_types(paths))
+ end
+
def linkable_files?
strong_memoize(:linkable_files) do
context[:project_wiki].nil? && repository.try(:exists?) && !repository.empty?
end
end
- def process_link_attr(html_attr)
- return if html_attr.blank?
- return if html_attr.value.start_with?('//')
+ def linkable_attributes
+ strong_memoize(:linkable_attributes) do
+ attrs = []
+
+ attrs += doc.search('a:not(.gfm)').map do |el|
+ el.attribute('href')
+ end
+
+ attrs += doc.search('img, video, audio').flat_map do |el|
+ [el.attribute('src'), el.attribute('data-src')]
+ end
+
+ attrs.reject do |attr|
+ attr.blank? || attr.value.start_with?('//')
+ end
+ end
+ end
+
+ def get_uri_types(paths)
+ return {} if paths.empty?
+
+ uri_types = Hash[paths.collect { |name| [name, nil] }]
+
+ get_blob_types(paths).each do |name, type|
+ if type == :blob
+ blob = ::Blob.decorate(Gitlab::Git::Blob.new(name: name), project)
+ uri_types[name] = blob.image? || blob.video? || blob.audio? ? :raw : :blob
+ else
+ uri_types[name] = type
+ end
+ end
+
+ uri_types
+ end
+ def get_blob_types(paths)
+ revision_paths = paths.collect do |path|
+ [current_commit.sha, path.chomp("/")]
+ end
+
+ Gitlab::GitalyClient::BlobService.new(repository).get_blob_types(revision_paths, 1)
+ end
+
+ def get_uri(html_attr)
+ uri = URI(html_attr.value)
+
+ uri if uri.relative? && uri.path.present?
+ rescue URI::Error, Addressable::URI::InvalidURIError
+ end
+
+ def process_link_attr(html_attr)
if html_attr.value.start_with?('/uploads/')
process_link_to_upload_attr(html_attr)
elsif linkable_files? && repo_visible_to_user?
@@ -81,6 +142,7 @@ module Banzai
def process_link_to_repository_attr(html_attr)
uri = URI(html_attr.value)
+
if uri.relative? && uri.path.present?
html_attr.value = rebuild_relative_uri(uri).to_s
end
@@ -89,7 +151,7 @@ module Banzai
end
def rebuild_relative_uri(uri)
- file_path = relative_file_path(uri)
+ file_path = nested_file_path_if_exists(uri)
uri.path = [
relative_url_root,
@@ -102,13 +164,29 @@ module Banzai
uri
end
- def relative_file_path(uri)
- path = Addressable::URI.unescape(uri.path).delete("\0")
- request_path = Addressable::URI.unescape(context[:requested_path])
- nested_path = build_relative_path(path, request_path)
+ def nested_file_path_if_exists(uri)
+ path = cleaned_file_path(uri)
+ nested_path = relative_file_path(uri)
+
file_exists?(nested_path) ? nested_path : path
end
+ def cleaned_file_path(uri)
+ Addressable::URI.unescape(uri.path).delete("\0").chomp("/")
+ end
+
+ def relative_file_path(uri)
+ return if uri.nil?
+
+ build_relative_path(cleaned_file_path(uri), request_path)
+ end
+
+ def request_path
+ return unless context[:requested_path]
+
+ Addressable::URI.unescape(context[:requested_path]).chomp("/")
+ end
+
# Convert a relative path into its correct location based on the currently
# requested path
#
@@ -136,6 +214,7 @@ module Banzai
return path[1..-1] if path.start_with?('/')
parts = request_path.split('/')
+
parts.pop if uri_type(request_path) != :tree
path.sub!(%r{\A\./}, '')
@@ -149,14 +228,11 @@ module Banzai
end
def file_exists?(path)
- path.present? && !!uri_type(path)
+ path.present? && uri_type(path).present?
end
def uri_type(path)
- # https://gitlab.com/gitlab-org/gitlab-foss/issues/58657
- Gitlab::GitalyClient.allow_n_plus_1_calls do
- @uri_types[path] ||= current_commit.uri_type(path)
- end
+ @uri_types[path] == :unknown ? "" : @uri_types[path]
end
def current_commit
diff --git a/lib/banzai/filter/table_of_contents_filter.rb b/lib/banzai/filter/table_of_contents_filter.rb
index ade4d260be1..a2c8e92e560 100644
--- a/lib/banzai/filter/table_of_contents_filter.rb
+++ b/lib/banzai/filter/table_of_contents_filter.rb
@@ -56,7 +56,8 @@ module Banzai
private
def anchor_tag(href)
- %Q{<a id="user-content-#{href}" class="anchor" href="##{href}" aria-hidden="true"></a>}
+ escaped_href = CGI.escape(href) # account for non-ASCII characters
+ %Q{<a id="user-content-#{href}" class="anchor" href="##{escaped_href}" aria-hidden="true"></a>}
end
def push_toc(children, root: false)
@@ -80,7 +81,7 @@ module Banzai
def initialize(node: nil, href: nil, previous_header: nil)
@node = node
- @href = href
+ @href = CGI.escape(href) if href
@children = []
@parent = find_parent(previous_header)
diff --git a/lib/banzai/filter/video_link_filter.rb b/lib/banzai/filter/video_link_filter.rb
index a278fcfdb47..ed82fbc1f94 100644
--- a/lib/banzai/filter/video_link_filter.rb
+++ b/lib/banzai/filter/video_link_filter.rb
@@ -3,73 +3,19 @@
# Generated HTML is transformed back to GFM by app/assets/javascripts/behaviors/markdown/nodes/video.js
module Banzai
module Filter
- # Find every image that isn't already wrapped in an `a` tag, and that has
- # a `src` attribute ending with a video extension, add a new video node and
- # a "Download" link in the case the video cannot be played.
- class VideoLinkFilter < HTML::Pipeline::Filter
- def call
- doc.xpath(query).each do |el|
- el.replace(video_node(doc, el))
- end
-
- doc
- end
-
+ class VideoLinkFilter < PlayableLinkFilter
private
- def query
- @query ||= begin
- src_query = UploaderHelper::VIDEO_EXT.map do |ext|
- "'.#{ext}' = substring(@src, string-length(@src) - #{ext.size})"
- end
-
- if context[:asset_proxy_enabled].present?
- src_query.concat(
- UploaderHelper::VIDEO_EXT.map do |ext|
- "'.#{ext}' = substring(@data-canonical-src, string-length(@data-canonical-src) - #{ext.size})"
- end
- )
- end
-
- "descendant-or-self::img[not(ancestor::a) and (#{src_query.join(' or ')})]"
- end
+ def media_type
+ "video"
end
- def video_node(doc, element)
- container = doc.document.create_element(
- 'div',
- class: 'video-container'
- )
-
- video = doc.document.create_element(
- 'video',
- src: element['src'],
- width: '400',
- controls: true,
- 'data-setup' => '{}',
- 'data-title' => element['title'] || element['alt'])
-
- link = doc.document.create_element(
- 'a',
- element['title'] || element['alt'],
- href: element['src'],
- target: '_blank',
- rel: 'noopener noreferrer',
- title: "Download '#{element['title'] || element['alt']}'")
-
- # make sure the original non-proxied src carries over
- if element['data-canonical-src']
- video['data-canonical-src'] = element['data-canonical-src']
- link['data-canonical-src'] = element['data-canonical-src']
- end
-
- download_paragraph = doc.document.create_element('p')
- download_paragraph.children = link
-
- container.add_child(video)
- container.add_child(download_paragraph)
+ def safe_media_ext
+ Gitlab::FileTypeDetection::SAFE_VIDEO_EXT
+ end
- container
+ def extra_element_attrs
+ { width: "100%" }
end
end
end
diff --git a/lib/banzai/filter/wiki_link_filter.rb b/lib/banzai/filter/wiki_link_filter.rb
index 18947679b69..205f777bc90 100644
--- a/lib/banzai/filter/wiki_link_filter.rb
+++ b/lib/banzai/filter/wiki_link_filter.rb
@@ -15,7 +15,7 @@ module Banzai
doc.search('a:not(.gfm)').each { |el| process_link(el.attribute('href'), el) }
- doc.search('video').each { |el| process_link(el.attribute('src'), el) }
+ doc.search('video, audio').each { |el| process_link(el.attribute('src'), el) }
doc.search('img').each do |el|
attr = el.attribute('data-src') || el.attribute('src')
diff --git a/lib/banzai/pipeline.rb b/lib/banzai/pipeline.rb
index e8a81bebaa9..497d3f27542 100644
--- a/lib/banzai/pipeline.rb
+++ b/lib/banzai/pipeline.rb
@@ -4,7 +4,7 @@ module Banzai
module Pipeline
def self.[](name)
name ||= :full
- const_get("#{name.to_s.camelize}Pipeline")
+ const_get("#{name.to_s.camelize}Pipeline", false)
end
end
end
diff --git a/lib/banzai/pipeline/gfm_pipeline.rb b/lib/banzai/pipeline/gfm_pipeline.rb
index bb0d1eaa1e1..08e27257fdf 100644
--- a/lib/banzai/pipeline/gfm_pipeline.rb
+++ b/lib/banzai/pipeline/gfm_pipeline.rb
@@ -26,6 +26,7 @@ module Banzai
Filter::ColorFilter,
Filter::MermaidFilter,
Filter::VideoLinkFilter,
+ Filter::AudioLinkFilter,
Filter::ImageLazyLoadFilter,
Filter::ImageLinkFilter,
Filter::InlineMetricsFilter,
diff --git a/lib/banzai/reference_parser.rb b/lib/banzai/reference_parser.rb
index efe15096f08..c08d3364a87 100644
--- a/lib/banzai/reference_parser.rb
+++ b/lib/banzai/reference_parser.rb
@@ -10,7 +10,7 @@ module Banzai
#
# This would return the `Banzai::ReferenceParser::IssueParser` class.
def self.[](name)
- const_get("#{name.to_s.camelize}Parser")
+ const_get("#{name.to_s.camelize}Parser", false)
end
end
end
diff --git a/lib/banzai/reference_parser/mentioned_user_parser.rb b/lib/banzai/reference_parser/mentioned_user_parser.rb
new file mode 100644
index 00000000000..4b1bcb3ca09
--- /dev/null
+++ b/lib/banzai/reference_parser/mentioned_user_parser.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module Banzai
+ module ReferenceParser
+ class MentionedUserParser < BaseParser
+ self.reference_type = :user
+
+ def references_relation
+ User
+ end
+
+ # any user can be mentioned by username
+ def can_read_reference?(user, ref_attr, node)
+ true
+ end
+ end
+ end
+end
diff --git a/lib/banzai/reference_parser/mentioned_users_by_group_parser.rb b/lib/banzai/reference_parser/mentioned_users_by_group_parser.rb
new file mode 100644
index 00000000000..d4ff6a12cd0
--- /dev/null
+++ b/lib/banzai/reference_parser/mentioned_users_by_group_parser.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+module Banzai
+ module ReferenceParser
+ class MentionedUsersByGroupParser < BaseParser
+ GROUP_ATTR = 'data-group'
+
+ self.reference_type = :user
+
+ def self.data_attribute
+ @data_attribute ||= GROUP_ATTR
+ end
+
+ def references_relation
+ Group
+ end
+
+ def nodes_visible_to_user(user, nodes)
+ groups = lazy { grouped_objects_for_nodes(nodes, Group, GROUP_ATTR) }
+
+ nodes.select do |node|
+ node.has_attribute?(GROUP_ATTR) && can_read_group_reference?(node, user, groups)
+ end
+ end
+
+ def can_read_group_reference?(node, user, groups)
+ node_group = groups[node]
+
+ node_group && can?(user, :read_group, node_group)
+ end
+ end
+ end
+end
diff --git a/lib/banzai/reference_parser/mentioned_users_by_project_parser.rb b/lib/banzai/reference_parser/mentioned_users_by_project_parser.rb
new file mode 100644
index 00000000000..79258d81cc3
--- /dev/null
+++ b/lib/banzai/reference_parser/mentioned_users_by_project_parser.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Banzai
+ module ReferenceParser
+ class MentionedUsersByProjectParser < ProjectParser
+ PROJECT_ATTR = 'data-project'
+
+ self.reference_type = :user
+
+ def self.data_attribute
+ @data_attribute ||= PROJECT_ATTR
+ end
+
+ def references_relation
+ Project
+ end
+ end
+ end
+end
diff --git a/lib/bitbucket/client.rb b/lib/bitbucket/client.rb
index 1343f424c51..92894575ec2 100644
--- a/lib/bitbucket/client.rb
+++ b/lib/bitbucket/client.rb
@@ -38,8 +38,10 @@ module Bitbucket
Representation::Repo.new(parsed_response)
end
- def repos
+ def repos(filter: nil)
path = "/repositories?role=member"
+ path += "&q=name~\"#{filter}\"" if filter
+
get_collection(path, :repo)
end
diff --git a/lib/bitbucket/page.rb b/lib/bitbucket/page.rb
index 7cc1342ad65..38c689628dd 100644
--- a/lib/bitbucket/page.rb
+++ b/lib/bitbucket/page.rb
@@ -30,7 +30,7 @@ module Bitbucket
end
def representation_class(type)
- Bitbucket::Representation.const_get(type.to_s.camelize)
+ Bitbucket::Representation.const_get(type.to_s.camelize, false)
end
end
end
diff --git a/lib/bitbucket_server/page.rb b/lib/bitbucket_server/page.rb
index 5d9a3168876..304f7cd9d72 100644
--- a/lib/bitbucket_server/page.rb
+++ b/lib/bitbucket_server/page.rb
@@ -30,7 +30,7 @@ module BitbucketServer
end
def representation_class(type)
- BitbucketServer::Representation.const_get(type.to_s.camelize)
+ BitbucketServer::Representation.const_get(type.to_s.camelize, false)
end
end
end
diff --git a/lib/container_registry/client.rb b/lib/container_registry/client.rb
index 15f40993ea3..92861c567a8 100644
--- a/lib/container_registry/client.rb
+++ b/lib/container_registry/client.rb
@@ -2,6 +2,7 @@
require 'faraday'
require 'faraday_middleware'
+require 'digest'
module ContainerRegistry
class Client
@@ -9,6 +10,8 @@ module ContainerRegistry
DOCKER_DISTRIBUTION_MANIFEST_V2_TYPE = 'application/vnd.docker.distribution.manifest.v2+json'
OCI_MANIFEST_V1_TYPE = 'application/vnd.oci.image.manifest.v1+json'
+ CONTAINER_IMAGE_V1_TYPE = 'application/vnd.docker.container.image.v1+json'
+
ACCEPTED_TYPES = [DOCKER_DISTRIBUTION_MANIFEST_V2_TYPE, OCI_MANIFEST_V1_TYPE].freeze
# Taken from: FaradayMiddleware::FollowRedirects
@@ -33,7 +36,48 @@ module ContainerRegistry
end
def delete_repository_tag(name, reference)
- faraday.delete("/v2/#{name}/manifests/#{reference}").success?
+ result = faraday.delete("/v2/#{name}/manifests/#{reference}")
+
+ result.success? || result.status == 404
+ end
+
+ def upload_raw_blob(path, blob)
+ digest = "sha256:#{Digest::SHA256.hexdigest(blob)}"
+
+ if upload_blob(path, blob, digest).success?
+ [blob, digest]
+ end
+ end
+
+ def upload_blob(name, content, digest)
+ upload = faraday.post("/v2/#{name}/blobs/uploads/")
+ return unless upload.success?
+
+ location = URI(upload.headers['location'])
+
+ faraday.put("#{location.path}?#{location.query}") do |req|
+ req.params['digest'] = digest
+ req.headers['Content-Type'] = 'application/octet-stream'
+ req.body = content
+ end
+ end
+
+ def generate_empty_manifest(path)
+ image = {
+ config: {}
+ }
+ image, image_digest = upload_raw_blob(path, JSON.pretty_generate(image))
+ return unless image
+
+ {
+ schemaVersion: 2,
+ mediaType: DOCKER_DISTRIBUTION_MANIFEST_V2_TYPE,
+ config: {
+ mediaType: CONTAINER_IMAGE_V1_TYPE,
+ size: image.size,
+ digest: image_digest
+ }
+ }
end
def blob(name, digest, type = nil)
@@ -42,7 +86,18 @@ module ContainerRegistry
end
def delete_blob(name, digest)
- faraday.delete("/v2/#{name}/blobs/#{digest}").success?
+ result = faraday.delete("/v2/#{name}/blobs/#{digest}")
+
+ result.success? || result.status == 404
+ end
+
+ def put_tag(name, reference, manifest)
+ response = faraday.put("/v2/#{name}/manifests/#{reference}") do |req|
+ req.headers['Content-Type'] = DOCKER_DISTRIBUTION_MANIFEST_V2_TYPE
+ req.body = JSON.pretty_generate(manifest)
+ end
+
+ response.headers['docker-content-digest'] if response.success?
end
private
diff --git a/lib/container_registry/tag.rb b/lib/container_registry/tag.rb
index ebea84fa1ca..2cc4c8d8b1c 100644
--- a/lib/container_registry/tag.rb
+++ b/lib/container_registry/tag.rb
@@ -98,6 +98,10 @@ module ContainerRegistry
end
end
+ def put(digests)
+ repository.client.put_tag(repository.path, name, digests)
+ end
+
# rubocop: disable CodeReuse/ActiveRecord
def total_size
return unless layers
@@ -106,7 +110,10 @@ module ContainerRegistry
end
# rubocop: enable CodeReuse/ActiveRecord
- def delete
+ # Deletes the image associated with this tag
+ # Note this will delete the image and all tags associated with it.
+ # Consider using DeleteTagsService instead.
+ def unsafe_delete
return unless digest
client.delete_repository_tag(repository.path, digest)
diff --git a/lib/event_filter.rb b/lib/event_filter.rb
index 85bf9c14f26..e062e3ddb1c 100644
--- a/lib/event_filter.rb
+++ b/lib/event_filter.rb
@@ -9,12 +9,11 @@ class EventFilter
ISSUE = 'issue'
COMMENTS = 'comments'
TEAM = 'team'
- FILTERS = [ALL, PUSH, MERGED, ISSUE, COMMENTS, TEAM].freeze
def initialize(filter)
# Split using comma to maintain backward compatibility Ex/ "filter1,filter2"
filter = filter.to_s.split(',')[0].to_s
- @filter = FILTERS.include?(filter) ? filter : ALL
+ @filter = filters.include?(filter) ? filter : ALL
end
def active?(key)
@@ -39,4 +38,12 @@ class EventFilter
end
end
# rubocop: enable CodeReuse/ActiveRecord
+
+ private
+
+ def filters
+ [ALL, PUSH, MERGED, ISSUE, COMMENTS, TEAM]
+ end
end
+
+EventFilter.prepend_if_ee('EE::EventFilter')
diff --git a/lib/gitlab.rb b/lib/gitlab.rb
index b337f5cbf2c..ad8e693ccbc 100644
--- a/lib/gitlab.rb
+++ b/lib/gitlab.rb
@@ -65,14 +65,18 @@ module Gitlab
def self.ee?
@is_ee ||=
- if ENV['IS_GITLAB_EE'] && !ENV['IS_GITLAB_EE'].empty?
- Gitlab::Utils.to_boolean(ENV['IS_GITLAB_EE'])
- else
- # We may use this method when the Rails environment is not loaded. This
- # means that checking the presence of the License class could result in
- # this method returning `false`, even for an EE installation.
- root.join('ee/app/models/license.rb').exist?
- end
+ # We use this method when the Rails environment is not loaded. This
+ # means that checking the presence of the License class could result in
+ # this method returning `false`, even for an EE installation.
+ #
+ # The `FOSS_ONLY` is always `string` or `nil`
+ # Thus the nil or empty string will result
+ # in using default value: false
+ #
+ # The behavior needs to be synchronised with
+ # config/helpers/is_ee_env.js
+ root.join('ee/app/models/license.rb').exist? &&
+ !%w[true 1].include?(ENV['FOSS_ONLY'].to_s)
end
def self.ee
diff --git a/lib/gitlab/access.rb b/lib/gitlab/access.rb
index ed5816482a9..6492ccc286a 100644
--- a/lib/gitlab/access.rb
+++ b/lib/gitlab/access.rb
@@ -103,10 +103,22 @@ module Gitlab
}
end
+ def project_creation_string_options
+ {
+ 'noone' => NO_ONE_PROJECT_ACCESS,
+ 'maintainer' => MAINTAINER_PROJECT_ACCESS,
+ 'developer' => DEVELOPER_MAINTAINER_PROJECT_ACCESS
+ }
+ end
+
def project_creation_values
project_creation_options.values
end
+ def project_creation_string_values
+ project_creation_string_options.keys
+ end
+
def project_creation_level_name(name)
project_creation_options.key(name)
end
@@ -117,6 +129,21 @@ module Gitlab
s_('SubgroupCreationlevel|Maintainers') => MAINTAINER_SUBGROUP_ACCESS
}
end
+
+ def subgroup_creation_string_options
+ {
+ 'owner' => OWNER_SUBGROUP_ACCESS,
+ 'maintainer' => MAINTAINER_SUBGROUP_ACCESS
+ }
+ end
+
+ def subgroup_creation_values
+ subgroup_creation_options.values
+ end
+
+ def subgroup_creation_string_values
+ subgroup_creation_string_options.keys
+ end
end
def human_access
diff --git a/lib/gitlab/analytics/cycle_analytics/base_query_builder.rb b/lib/gitlab/analytics/cycle_analytics/base_query_builder.rb
new file mode 100644
index 00000000000..33cbe1a62ef
--- /dev/null
+++ b/lib/gitlab/analytics/cycle_analytics/base_query_builder.rb
@@ -0,0 +1,70 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Analytics
+ module CycleAnalytics
+ class BaseQueryBuilder
+ include Gitlab::CycleAnalytics::MetricsTables
+
+ delegate :subject_class, to: :stage
+
+ # rubocop: disable CodeReuse/ActiveRecord
+
+ def initialize(stage:, params: {})
+ @stage = stage
+ @params = params
+ end
+
+ def build
+ query = subject_class
+ query = filter_by_parent_model(query)
+ query = filter_by_time_range(query)
+ query = stage.start_event.apply_query_customization(query)
+ query = stage.end_event.apply_query_customization(query)
+ query.where(duration_condition)
+ end
+
+ private
+
+ attr_reader :stage, :params
+
+ def duration_condition
+ stage.end_event.timestamp_projection.gteq(stage.start_event.timestamp_projection)
+ end
+
+ def filter_by_parent_model(query)
+ if parent_class.eql?(Project)
+ if subject_class.eql?(Issue)
+ query.where(project_id: stage.parent_id)
+ elsif subject_class.eql?(MergeRequest)
+ query.where(target_project_id: stage.parent_id)
+ else
+ raise ArgumentError, "unknown subject_class: #{subject_class}"
+ end
+ else
+ raise ArgumentError, "unknown parent_class: #{parent_class}"
+ end
+ end
+
+ def filter_by_time_range(query)
+ from = params.fetch(:from, 30.days.ago)
+ to = params[:to]
+
+ query = query.where(subject_table[:created_at].gteq(from))
+ query = query.where(subject_table[:created_at].lteq(to)) if to
+ query
+ end
+
+ def subject_table
+ subject_class.arel_table
+ end
+
+ def parent_class
+ stage.parent.class
+ end
+
+ # rubocop: enable CodeReuse/ActiveRecord
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/analytics/cycle_analytics/data_collector.rb b/lib/gitlab/analytics/cycle_analytics/data_collector.rb
new file mode 100644
index 00000000000..0c0f737f2c9
--- /dev/null
+++ b/lib/gitlab/analytics/cycle_analytics/data_collector.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Analytics
+ module CycleAnalytics
+ # Arguments:
+ # stage - an instance of CycleAnalytics::ProjectStage or CycleAnalytics::GroupStage
+ # params:
+ # current_user: an instance of User
+ # from: DateTime
+ # to: DateTime
+ class DataCollector
+ include Gitlab::Utils::StrongMemoize
+
+ def initialize(stage:, params: {})
+ @stage = stage
+ @params = params
+ end
+
+ def records_fetcher
+ strong_memoize(:records_fetcher) do
+ RecordsFetcher.new(stage: stage, query: query, params: params)
+ end
+ end
+
+ def median
+ strong_memoize(:median) do
+ Median.new(stage: stage, query: query)
+ end
+ end
+
+ private
+
+ attr_reader :stage, :params
+
+ def query
+ BaseQueryBuilder.new(stage: stage, params: params).build
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/analytics/cycle_analytics/default_stages.rb b/lib/gitlab/analytics/cycle_analytics/default_stages.rb
index 286c393005f..8e70236ce75 100644
--- a/lib/gitlab/analytics/cycle_analytics/default_stages.rb
+++ b/lib/gitlab/analytics/cycle_analytics/default_stages.rb
@@ -23,6 +23,10 @@ module Gitlab
]
end
+ def self.names
+ all.map { |stage| stage[:name] }
+ end
+
def self.params_for_issue_stage
{
name: 'issue',
@@ -88,8 +92,8 @@ module Gitlab
name: 'production',
custom: false,
relative_position: 7,
- start_event_identifier: :merge_request_merged,
- end_event_identifier: :merge_request_first_deployed_to_production
+ start_event_identifier: :issue_created,
+ end_event_identifier: :production_stage_end
}
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/median.rb b/lib/gitlab/analytics/cycle_analytics/median.rb
new file mode 100644
index 00000000000..41883a80338
--- /dev/null
+++ b/lib/gitlab/analytics/cycle_analytics/median.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Analytics
+ module CycleAnalytics
+ class Median
+ include StageQueryHelpers
+
+ def initialize(stage:, query:)
+ @stage = stage
+ @query = query
+ end
+
+ def seconds
+ @query = @query.select(median_duration_in_seconds.as('median'))
+ result = execute_query(@query).first || {}
+
+ result['median'] ? result['median'].to_i : nil
+ end
+
+ private
+
+ attr_reader :stage
+
+ def percentile_cont
+ percentile_cont_ordering = Arel::Nodes::UnaryOperation.new(Arel::Nodes::SqlLiteral.new('ORDER BY'), duration)
+ Arel::Nodes::NamedFunction.new(
+ 'percentile_cont(0.5) WITHIN GROUP',
+ [percentile_cont_ordering]
+ )
+ end
+
+ def median_duration_in_seconds
+ Arel::Nodes::Extract.new(percentile_cont, :epoch)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/analytics/cycle_analytics/records_fetcher.rb b/lib/gitlab/analytics/cycle_analytics/records_fetcher.rb
new file mode 100644
index 00000000000..90d03142b2a
--- /dev/null
+++ b/lib/gitlab/analytics/cycle_analytics/records_fetcher.rb
@@ -0,0 +1,132 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Analytics
+ module CycleAnalytics
+ class RecordsFetcher
+ include Gitlab::Utils::StrongMemoize
+ include StageQueryHelpers
+ include Gitlab::CycleAnalytics::MetricsTables
+
+ MAX_RECORDS = 20
+
+ MAPPINGS = {
+ Issue => {
+ finder_class: IssuesFinder,
+ serializer_class: AnalyticsIssueSerializer,
+ includes_for_query: { project: [:namespace], author: [] },
+ columns_for_select: %I[title iid id created_at author_id project_id]
+ },
+ MergeRequest => {
+ finder_class: MergeRequestsFinder,
+ serializer_class: AnalyticsMergeRequestSerializer,
+ includes_for_query: { target_project: [:namespace], author: [] },
+ columns_for_select: %I[title iid id created_at author_id state target_project_id]
+ }
+ }.freeze
+
+ delegate :subject_class, to: :stage
+
+ def initialize(stage:, query:, params: {})
+ @stage = stage
+ @query = query
+ @params = params
+ end
+
+ def serialized_records
+ strong_memoize(:serialized_records) do
+ # special case (legacy): 'Test' and 'Staging' stages should show Ci::Build records
+ if default_test_stage? || default_staging_stage?
+ AnalyticsBuildSerializer.new.represent(ci_build_records.map { |e| e['build'] })
+ else
+ records.map do |record|
+ project = record.project
+ attributes = record.attributes.merge({
+ project_path: project.path,
+ namespace_path: project.namespace.path,
+ author: record.author
+ })
+ serializer.represent(attributes)
+ end
+ end
+ end
+ end
+
+ private
+
+ attr_reader :stage, :query, :params
+
+ def finder_query
+ MAPPINGS
+ .fetch(subject_class)
+ .fetch(:finder_class)
+ .new(params.fetch(:current_user), finder_params.fetch(stage.parent.class))
+ .execute
+ end
+
+ def columns
+ MAPPINGS.fetch(subject_class).fetch(:columns_for_select).map do |column_name|
+ subject_class.arel_table[column_name]
+ end
+ end
+
+ # EE will override this to include Group rules
+ def finder_params
+ {
+ Project => { project_id: stage.parent_id }
+ }
+ end
+
+ def default_test_stage?
+ stage.matches_with_stage_params?(Gitlab::Analytics::CycleAnalytics::DefaultStages.params_for_test_stage)
+ end
+
+ def default_staging_stage?
+ stage.matches_with_stage_params?(Gitlab::Analytics::CycleAnalytics::DefaultStages.params_for_staging_stage)
+ end
+
+ def serializer
+ MAPPINGS.fetch(subject_class).fetch(:serializer_class).new
+ end
+
+ # Loading Ci::Build records instead of MergeRequest records
+ # rubocop: disable CodeReuse/ActiveRecord
+ def ci_build_records
+ ci_build_join = mr_metrics_table
+ .join(build_table)
+ .on(mr_metrics_table[:pipeline_id].eq(build_table[:commit_id]))
+ .join_sources
+
+ q = ordered_and_limited_query
+ .joins(ci_build_join)
+ .select(build_table[:id], round_duration_to_seconds.as('total_time'))
+
+ results = execute_query(q).to_a
+
+ Gitlab::CycleAnalytics::Updater.update!(results, from: 'id', to: 'build', klass: ::Ci::Build.includes({ project: [:namespace], user: [], pipeline: [] }))
+ end
+
+ def ordered_and_limited_query
+ query
+ .reorder(stage.end_event.timestamp_projection.desc)
+ .limit(MAX_RECORDS)
+ end
+
+ def records
+ results = finder_query
+ .merge(ordered_and_limited_query)
+ .select(*columns, round_duration_to_seconds.as('total_time'))
+
+ # using preloader instead of includes to avoid AR generating a large column list
+ ActiveRecord::Associations::Preloader.new.preload(
+ results,
+ MAPPINGS.fetch(subject_class).fetch(:includes_for_query)
+ )
+
+ results
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events.rb b/lib/gitlab/analytics/cycle_analytics/stage_events.rb
index d21f344f483..58572446de6 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events.rb
@@ -18,7 +18,8 @@ module Gitlab
StageEvents::MergeRequestMerged => 104,
StageEvents::CodeStageStart => 1_000,
StageEvents::IssueStageEnd => 1_001,
- StageEvents::PlanStageStart => 1_002
+ StageEvents::PlanStageStart => 1_002,
+ StageEvents::ProductionStageEnd => 1_003
}.freeze
EVENTS = ENUM_MAPPING.keys.freeze
@@ -32,7 +33,8 @@ module Gitlab
StageEvents::MergeRequestCreated
],
StageEvents::IssueCreated => [
- StageEvents::IssueStageEnd
+ StageEvents::IssueStageEnd,
+ StageEvents::ProductionStageEnd
],
StageEvents::MergeRequestCreated => [
StageEvents::MergeRequestMerged
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start.rb
index ff9c8a79225..6af1b90bccc 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start.rb
@@ -16,6 +16,21 @@ module Gitlab
def object_type
MergeRequest
end
+
+ def timestamp_projection
+ issue_metrics_table[:first_mentioned_in_commit_at]
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ issue_metrics_join = mr_closing_issues_table
+ .join(issue_metrics_table)
+ .on(mr_closing_issues_table[:issue_id].eq(issue_metrics_table[:issue_id]))
+ .join_sources
+
+ query.joins(:merge_requests_closing_issues).joins(issue_metrics_join)
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created.rb
index a601c9797f8..8c9a80740a9 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created.rb
@@ -16,6 +16,10 @@ module Gitlab
def object_type
Issue
end
+
+ def timestamp_projection
+ issue_table[:created_at]
+ end
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit.rb
index 7424043ef7b..fe7f2d85f8b 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit.rb
@@ -16,6 +16,16 @@ module Gitlab
def object_type
Issue
end
+
+ def timestamp_projection
+ issue_metrics_table[:first_mentioned_in_commit_at]
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query.joins(:metrics)
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end.rb
index ceb229c552f..77e4092b9ab 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end.rb
@@ -16,6 +16,19 @@ module Gitlab
def object_type
Issue
end
+
+ def timestamp_projection
+ Arel::Nodes::NamedFunction.new('COALESCE', [
+ issue_metrics_table[:first_associated_with_milestone_at],
+ issue_metrics_table[:first_added_to_board_at]
+ ])
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query.joins(:metrics).where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created.rb
index 8be00831b4f..7059c425b8f 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created.rb
@@ -16,6 +16,10 @@ module Gitlab
def object_type
MergeRequest
end
+
+ def timestamp_projection
+ mr_table[:created_at]
+ end
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production.rb
index 6d7a2c023ff..3d7482eaaf0 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production.rb
@@ -16,6 +16,16 @@ module Gitlab
def object_type
MergeRequest
end
+
+ def timestamp_projection
+ mr_metrics_table[:first_deployed_to_production_at]
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query.joins(:metrics).where(timestamp_projection.gteq(mr_table[:created_at]))
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished.rb
index 12d82fe2c62..36bb4d6fc8d 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished.rb
@@ -16,6 +16,16 @@ module Gitlab
def object_type
MergeRequest
end
+
+ def timestamp_projection
+ mr_metrics_table[:latest_build_finished_at]
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query.joins(:metrics)
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started.rb
index 9e749b0fdfa..468d9899cc7 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started.rb
@@ -16,6 +16,16 @@ module Gitlab
def object_type
MergeRequest
end
+
+ def timestamp_projection
+ mr_metrics_table[:latest_build_started_at]
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query.joins(:metrics)
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged.rb
index bbfb5d12992..82ecaf1cd6b 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged.rb
@@ -16,6 +16,16 @@ module Gitlab
def object_type
MergeRequest
end
+
+ def timestamp_projection
+ mr_metrics_table[:merged_at]
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query.joins(:metrics)
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start.rb
index 803317d8b55..7ece7d62faa 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start.rb
@@ -16,6 +16,22 @@ module Gitlab
def object_type
Issue
end
+
+ def timestamp_projection
+ Arel::Nodes::NamedFunction.new('COALESCE', [
+ issue_metrics_table[:first_associated_with_milestone_at],
+ issue_metrics_table[:first_added_to_board_at]
+ ])
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query
+ .joins(:metrics)
+ .where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
+ .where(issue_metrics_table[:first_mentioned_in_commit_at].not_eq(nil))
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/production_stage_end.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/production_stage_end.rb
new file mode 100644
index 00000000000..607371a32e8
--- /dev/null
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/production_stage_end.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Analytics
+ module CycleAnalytics
+ module StageEvents
+ class ProductionStageEnd < SimpleStageEvent
+ def self.name
+ PlanStageStart.name
+ end
+
+ def self.identifier
+ :production_stage_end
+ end
+
+ def object_type
+ Issue
+ end
+
+ def timestamp_projection
+ mr_metrics_table[:first_deployed_to_production_at]
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def apply_query_customization(query)
+ query.joins(merge_requests_closing_issues: { merge_request: [:metrics] }).where(mr_metrics_table[:first_deployed_to_production_at].gteq(mr_table[:created_at]))
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event.rb b/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event.rb
index a55eee048c2..aa392140eb5 100644
--- a/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event.rb
+++ b/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event.rb
@@ -6,6 +6,8 @@ module Gitlab
module StageEvents
# Base class for expressing an event that can be used for a stage.
class StageEvent
+ include Gitlab::CycleAnalytics::MetricsTables
+
def initialize(params)
@params = params
end
@@ -21,6 +23,21 @@ module Gitlab
def object_type
raise NotImplementedError
end
+
+ # Each StageEvent must expose a timestamp or a timestamp like expression in order to build a range query.
+ # Example: get me all the Issue records between start event end end event
+ def timestamp_projection
+ raise NotImplementedError
+ end
+
+ # Optionally a StageEvent may apply additional filtering or join other tables on the base query.
+ def apply_query_customization(query)
+ query
+ end
+
+ private
+
+ attr_reader :params
end
end
end
diff --git a/lib/gitlab/analytics/cycle_analytics/stage_query_helpers.rb b/lib/gitlab/analytics/cycle_analytics/stage_query_helpers.rb
new file mode 100644
index 00000000000..34c726b2254
--- /dev/null
+++ b/lib/gitlab/analytics/cycle_analytics/stage_query_helpers.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Analytics
+ module CycleAnalytics
+ module StageQueryHelpers
+ def execute_query(query)
+ ActiveRecord::Base.connection.execute(query.to_sql)
+ end
+
+ def zero_interval
+ Arel::Nodes::NamedFunction.new("CAST", [Arel.sql("'0' AS INTERVAL")])
+ end
+
+ def round_duration_to_seconds
+ Arel::Nodes::Extract.new(duration, :epoch)
+ end
+
+ def duration
+ Arel::Nodes::Subtraction.new(
+ stage.end_event.timestamp_projection,
+ stage.start_event.timestamp_projection
+ )
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/artifacts/migration_helper.rb b/lib/gitlab/artifacts/migration_helper.rb
new file mode 100644
index 00000000000..4f047ab3ea8
--- /dev/null
+++ b/lib/gitlab/artifacts/migration_helper.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Artifacts
+ class MigrationHelper
+ def migrate_to_remote_storage(&block)
+ artifacts = ::Ci::JobArtifact.with_files_stored_locally
+ migrate(artifacts, ObjectStorage::Store::REMOTE, &block)
+ end
+
+ def migrate_to_local_storage(&block)
+ artifacts = ::Ci::JobArtifact.with_files_stored_remotely
+ migrate(artifacts, ObjectStorage::Store::LOCAL, &block)
+ end
+
+ private
+
+ def batch_size
+ ENV.fetch('MIGRATION_BATCH_SIZE', 10).to_i
+ end
+
+ def migrate(artifacts, store, &block)
+ artifacts.find_each(batch_size: batch_size) do |artifact| # rubocop:disable CodeReuse/ActiveRecord
+ artifact.file.migrate!(store)
+
+ yield artifact if block
+ rescue => e
+ raise StandardError.new("Failed to transfer artifact of type #{artifact.file_type} and ID #{artifact.id} with error: #{e.message}")
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb
index 53c1398d6ab..4217859f9fb 100644
--- a/lib/gitlab/auth.rb
+++ b/lib/gitlab/auth.rb
@@ -69,7 +69,7 @@ module Gitlab
Gitlab::Auth::UniqueIpsLimiter.limit_user! do
user = User.by_login(login)
- break if user && !user.active?
+ break if user && !user.can?(:log_in)
authenticators = []
@@ -231,7 +231,7 @@ module Gitlab
authentication_abilities =
if token_handler.user?
- full_authentication_abilities
+ read_write_project_authentication_abilities
elsif token_handler.deploy_key_pushable?(project)
read_write_authentication_abilities
else
@@ -272,10 +272,21 @@ module Gitlab
]
end
- def read_only_authentication_abilities
+ def read_only_project_authentication_abilities
[
:read_project,
- :download_code,
+ :download_code
+ ]
+ end
+
+ def read_write_project_authentication_abilities
+ read_only_project_authentication_abilities + [
+ :push_code
+ ]
+ end
+
+ def read_only_authentication_abilities
+ read_only_project_authentication_abilities + [
:read_container_image
]
end
diff --git a/lib/gitlab/auth/current_user_mode.rb b/lib/gitlab/auth/current_user_mode.rb
new file mode 100644
index 00000000000..df5039f50c1
--- /dev/null
+++ b/lib/gitlab/auth/current_user_mode.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Auth
+ # Keeps track of the current session user mode
+ #
+ # In order to perform administrative tasks over some interfaces,
+ # an administrator must have explicitly enabled admin-mode
+ # e.g. on web access require re-authentication
+ class CurrentUserMode
+ SESSION_STORE_KEY = :current_user_mode
+ ADMIN_MODE_START_TIME_KEY = 'admin_mode'
+ MAX_ADMIN_MODE_TIME = 6.hours
+
+ def initialize(user)
+ @user = user
+ end
+
+ def admin_mode?
+ return false unless user
+
+ Gitlab::SafeRequestStore.fetch(request_store_key) do
+ user&.admin? && any_session_with_admin_mode?
+ end
+ end
+
+ def enable_admin_mode!(password: nil, skip_password_validation: false)
+ return unless user&.admin?
+ return unless skip_password_validation || user&.valid_password?(password)
+
+ current_session_data[ADMIN_MODE_START_TIME_KEY] = Time.now
+ end
+
+ def disable_admin_mode!
+ current_session_data[ADMIN_MODE_START_TIME_KEY] = nil
+ Gitlab::SafeRequestStore.delete(request_store_key)
+ end
+
+ private
+
+ attr_reader :user
+
+ def request_store_key
+ @request_store_key ||= { res: :current_user_mode, user: user.id }
+ end
+
+ def current_session_data
+ @current_session ||= Gitlab::NamespacedSessionStore.new(SESSION_STORE_KEY)
+ end
+
+ def any_session_with_admin_mode?
+ return true if current_session_data.initiated? && current_session_data[ADMIN_MODE_START_TIME_KEY].to_i > MAX_ADMIN_MODE_TIME.ago.to_i
+
+ all_sessions.any? do |session|
+ session[ADMIN_MODE_START_TIME_KEY].to_i > MAX_ADMIN_MODE_TIME.ago.to_i
+ end
+ end
+
+ def all_sessions
+ @all_sessions ||= ActiveSession.list_sessions(user).lazy.map do |session|
+ Gitlab::NamespacedSessionStore.new(SESSION_STORE_KEY, session.with_indifferent_access )
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/auth/ip_rate_limiter.rb b/lib/gitlab/auth/ip_rate_limiter.rb
index 0b7055b3256..74d359bcd28 100644
--- a/lib/gitlab/auth/ip_rate_limiter.rb
+++ b/lib/gitlab/auth/ip_rate_limiter.rb
@@ -24,6 +24,7 @@ module Gitlab
# Allow2Ban.filter will return false if this IP has not failed too often yet
@banned = Rack::Attack::Allow2Ban.filter(ip, config) do
# If we return false here, the failure for this IP is ignored by Allow2Ban
+ # If we return true here, the count for the IP is incremented.
ip_can_be_banned?
end
end
diff --git a/lib/gitlab/auth/user_access_denied_reason.rb b/lib/gitlab/auth/user_access_denied_reason.rb
index fd09fe76c02..e73f6ca808c 100644
--- a/lib/gitlab/auth/user_access_denied_reason.rb
+++ b/lib/gitlab/auth/user_access_denied_reason.rb
@@ -14,6 +14,9 @@ module Gitlab
when :terms_not_accepted
"You (#{@user.to_reference}) must accept the Terms of Service in order to perform this action. "\
"Please access GitLab from a web browser to accept these terms."
+ when :deactivated
+ "Your account has been deactivated by your administrator. "\
+ "Please log back in from a web browser to reactivate your account at #{Gitlab.config.gitlab.url}"
else
"Your account has been blocked."
end
@@ -26,6 +29,8 @@ module Gitlab
:internal
elsif @user.required_terms_not_accepted?
:terms_not_accepted
+ elsif @user.deactivated?
+ :deactivated
else
:blocked
end
diff --git a/lib/gitlab/background_migration.rb b/lib/gitlab/background_migration.rb
index 2e3a4f3b869..61e0a075018 100644
--- a/lib/gitlab/background_migration.rb
+++ b/lib/gitlab/background_migration.rb
@@ -78,7 +78,7 @@ module Gitlab
end
def self.migration_class_for(class_name)
- const_get(class_name)
+ const_get(class_name, false)
end
def self.enqueued_job?(queues, migration_class)
diff --git a/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config.rb b/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config.rb
index 29fa0f18448..3c142327e94 100644
--- a/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config.rb
+++ b/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config.rb
@@ -171,7 +171,11 @@ module Gitlab
end
def schedule_retry(project, retry_count)
- BackgroundMigrationWorker.perform_in(RETRY_DELAY, self.class::RetryOne.name, [project.id, retry_count])
+ # Constants provided to BackgroundMigrationWorker must be within the
+ # scope of Gitlab::BackgroundMigration
+ retry_class_name = self.class::RetryOne.name.sub('Gitlab::BackgroundMigration::', '')
+
+ BackgroundMigrationWorker.perform_in(RETRY_DELAY, retry_class_name, [project.id, retry_count])
end
end
diff --git a/lib/gitlab/background_migration/legacy_upload_mover.rb b/lib/gitlab/background_migration/legacy_upload_mover.rb
index 051c1176edb..c9e47f210be 100644
--- a/lib/gitlab/background_migration/legacy_upload_mover.rb
+++ b/lib/gitlab/background_migration/legacy_upload_mover.rb
@@ -92,7 +92,7 @@ module Gitlab
def legacy_file_uploader
strong_memoize(:legacy_file_uploader) do
- uploader = upload.build_uploader
+ uploader = upload.retrieve_uploader
uploader.retrieve_from_store!(File.basename(upload.path))
uploader
end
diff --git a/lib/gitlab/background_migration/migrate_pages_metadata.rb b/lib/gitlab/background_migration/migrate_pages_metadata.rb
new file mode 100644
index 00000000000..68fd0c17d29
--- /dev/null
+++ b/lib/gitlab/background_migration/migrate_pages_metadata.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module BackgroundMigration
+ # Class that will insert record into project_pages_metadata
+ # for each existing project
+ class MigratePagesMetadata
+ def perform(start_id, stop_id)
+ perform_on_relation(Project.where(id: start_id..stop_id))
+ end
+
+ def perform_on_relation(relation)
+ successful_pages_deploy = <<~SQL
+ SELECT TRUE
+ FROM ci_builds
+ WHERE ci_builds.type = 'GenericCommitStatus'
+ AND ci_builds.status = 'success'
+ AND ci_builds.stage = 'deploy'
+ AND ci_builds.name = 'pages:deploy'
+ AND ci_builds.project_id = projects.id
+ LIMIT 1
+ SQL
+
+ select_from = relation
+ .select("projects.id", "COALESCE((#{successful_pages_deploy}), FALSE)")
+ .to_sql
+
+ ActiveRecord::Base.connection_pool.with_connection do |connection|
+ connection.execute <<~SQL
+ INSERT INTO project_pages_metadata (project_id, deployed)
+ #{select_from}
+ ON CONFLICT (project_id) DO NOTHING
+ SQL
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/badge/pipeline/template.rb b/lib/gitlab/badge/pipeline/template.rb
index 2c5f9654496..0d3d44135e7 100644
--- a/lib/gitlab/badge/pipeline/template.rb
+++ b/lib/gitlab/badge/pipeline/template.rb
@@ -15,7 +15,7 @@ module Gitlab
failed: '#e05d44',
running: '#dfb317',
pending: '#dfb317',
- preparing: '#dfb317',
+ preparing: '#a7a7a7',
canceled: '#9f9f9f',
skipped: '#9f9f9f',
unknown: '#9f9f9f'
diff --git a/lib/gitlab/bitbucket_import/importer.rb b/lib/gitlab/bitbucket_import/importer.rb
index 24bc73e0de5..e01ffb631ba 100644
--- a/lib/gitlab/bitbucket_import/importer.rb
+++ b/lib/gitlab/bitbucket_import/importer.rb
@@ -104,7 +104,7 @@ module Gitlab
iid: issue.iid,
title: issue.title,
description: description,
- state: issue.state,
+ state_id: Issue.available_states[issue.state],
author_id: gitlab_user_id(project, issue.author),
milestone: milestone,
created_at: issue.created_at,
diff --git a/lib/gitlab/blame.rb b/lib/gitlab/blame.rb
index f1a653a9d95..5382bdab7eb 100644
--- a/lib/gitlab/blame.rb
+++ b/lib/gitlab/blame.rb
@@ -17,6 +17,7 @@ module Gitlab
i = 0
blame.each do |commit, line|
commit = Commit.new(commit, project)
+ commit.lazy_author # preload author
sha = commit.sha
if prev_sha != sha
diff --git a/lib/gitlab/cache/request_cache.rb b/lib/gitlab/cache/request_cache.rb
index 4c658dc0b8d..6e48ca90054 100644
--- a/lib/gitlab/cache/request_cache.rb
+++ b/lib/gitlab/cache/request_cache.rb
@@ -23,7 +23,7 @@ module Gitlab
end
def request_cache(method_name, &method_key_block)
- const_get(:RequestCacheExtension).module_eval do
+ const_get(:RequestCacheExtension, false).module_eval do
cache_key_method_name = "#{method_name}_cache_key"
define_method(method_name) do |*args|
diff --git a/lib/gitlab/ci/ansi2html.rb b/lib/gitlab/ci/ansi2html.rb
index b7886114e9c..eb5d78ebcd4 100644
--- a/lib/gitlab/ci/ansi2html.rb
+++ b/lib/gitlab/ci/ansi2html.rb
@@ -178,6 +178,8 @@ module Gitlab
close_open_tags
+ # TODO: replace OpenStruct with a better type
+ # https://gitlab.com/gitlab-org/gitlab/issues/34305
OpenStruct.new(
html: @out.force_encoding(Encoding.default_external),
state: state,
diff --git a/lib/gitlab/ci/ansi2json.rb b/lib/gitlab/ci/ansi2json.rb
new file mode 100644
index 00000000000..79114d35916
--- /dev/null
+++ b/lib/gitlab/ci/ansi2json.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+# Convert terminal stream to JSON
+module Gitlab
+ module Ci
+ module Ansi2json
+ def self.convert(ansi, state = nil)
+ Converter.new.convert(ansi, state)
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/ansi2json/converter.rb b/lib/gitlab/ci/ansi2json/converter.rb
new file mode 100644
index 00000000000..8d25b66af9c
--- /dev/null
+++ b/lib/gitlab/ci/ansi2json/converter.rb
@@ -0,0 +1,133 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Ansi2json
+ class Converter
+ def convert(stream, new_state)
+ @lines = []
+ @state = State.new(new_state, stream.size)
+
+ append = false
+ truncated = false
+
+ cur_offset = stream.tell
+ if cur_offset > @state.offset
+ @state.offset = cur_offset
+ truncated = true
+ else
+ stream.seek(@state.offset)
+ append = @state.offset > 0
+ end
+
+ start_offset = @state.offset
+
+ @state.set_current_line!(style: Style.new(@state.inherited_style))
+
+ stream.each_line do |line|
+ s = StringScanner.new(line)
+ convert_line(s)
+ end
+
+ # This must be assigned before flushing the current line
+ # or the @current_line.offset will advance to the very end
+ # of the trace. Instead we want @last_line_offset to always
+ # point to the beginning of last line.
+ @state.set_last_line_offset
+
+ flush_current_line
+
+ # TODO: replace OpenStruct with a better type
+ # https://gitlab.com/gitlab-org/gitlab/issues/34305
+ OpenStruct.new(
+ lines: @lines,
+ state: @state.encode,
+ append: append,
+ truncated: truncated,
+ offset: start_offset,
+ size: stream.tell - start_offset,
+ total: stream.size
+ )
+ end
+
+ private
+
+ def convert_line(scanner)
+ until scanner.eos?
+
+ if scanner.scan(Gitlab::Regex.build_trace_section_regex)
+ handle_section(scanner)
+ elsif scanner.scan(/\e([@-_])(.*?)([@-~])/)
+ handle_sequence(scanner)
+ elsif scanner.scan(/\e(([@-_])(.*?)?)?$/)
+ break
+ elsif scanner.scan(/</)
+ @state.current_line << '&lt;'
+ elsif scanner.scan(/\r?\n/)
+ # we advance the offset of the next current line
+ # so it does not start from \n
+ flush_current_line(advance_offset: scanner.matched_size)
+ else
+ @state.current_line << scanner.scan(/./m)
+ end
+
+ @state.offset += scanner.matched_size
+ end
+ end
+
+ def handle_sequence(scanner)
+ indicator = scanner[1]
+ commands = scanner[2].split ';'
+ terminator = scanner[3]
+
+ # We are only interested in color and text style changes - triggered by
+ # sequences starting with '\e[' and ending with 'm'. Any other control
+ # sequence gets stripped (including stuff like "delete last line")
+ return unless indicator == '[' && terminator == 'm'
+
+ @state.update_style(commands)
+ end
+
+ def handle_section(scanner)
+ action = scanner[1]
+ timestamp = scanner[2]
+ section = scanner[3]
+
+ section_name = sanitize_section_name(section)
+
+ if action == "start"
+ handle_section_start(section_name, timestamp)
+ elsif action == "end"
+ handle_section_end(section_name, timestamp)
+ end
+ end
+
+ def handle_section_start(section, timestamp)
+ flush_current_line unless @state.current_line.empty?
+ @state.open_section(section, timestamp)
+ end
+
+ def handle_section_end(section, timestamp)
+ return unless @state.section_open?(section)
+
+ flush_current_line unless @state.current_line.empty?
+ @state.close_section(section, timestamp)
+
+ # ensure that section end is detached from the last
+ # line in the section
+ flush_current_line
+ end
+
+ def flush_current_line(advance_offset: 0)
+ @lines << @state.current_line.to_h
+
+ @state.set_current_line!(advance_offset: advance_offset)
+ end
+
+ def sanitize_section_name(section)
+ section.to_s.downcase.gsub(/[^a-z0-9]/, '-')
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/ansi2json/line.rb b/lib/gitlab/ci/ansi2json/line.rb
new file mode 100644
index 00000000000..173fb1df88e
--- /dev/null
+++ b/lib/gitlab/ci/ansi2json/line.rb
@@ -0,0 +1,93 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Ansi2json
+ # Line class is responsible for keeping the internal state of
+ # a log line and to finally serialize it as Hash.
+ class Line
+ # Line::Segment is a portion of a line that has its own style
+ # and text. Multiple segments make the line content.
+ class Segment
+ attr_accessor :text, :style
+
+ def initialize(style:)
+ @text = +''
+ @style = style
+ end
+
+ def empty?
+ text.empty?
+ end
+
+ def to_h
+ # Without force encoding to UTF-8 we could get an error
+ # when serializing the Hash to JSON.
+ # Encoding::UndefinedConversionError:
+ # "\xE2" from ASCII-8BIT to UTF-8
+ { text: text.force_encoding('UTF-8') }.tap do |result|
+ result[:style] = style.to_s if style.set?
+ end
+ end
+ end
+
+ attr_reader :offset, :sections, :segments, :current_segment,
+ :section_header, :section_duration
+
+ def initialize(offset:, style:, sections: [])
+ @offset = offset
+ @segments = []
+ @sections = sections
+ @section_header = false
+ @duration = nil
+ @current_segment = Segment.new(style: style)
+ end
+
+ def <<(data)
+ @current_segment.text << data
+ end
+
+ def style
+ @current_segment.style
+ end
+
+ def empty?
+ @segments.empty? && @current_segment.empty?
+ end
+
+ def update_style(ansi_commands)
+ @current_segment.style.update(ansi_commands)
+ end
+
+ def add_section(section)
+ @sections << section
+ end
+
+ def set_as_section_header
+ @section_header = true
+ end
+
+ def set_section_duration(duration)
+ @section_duration = Time.at(duration.to_i).strftime('%M:%S')
+ end
+
+ def flush_current_segment!
+ return if @current_segment.empty?
+
+ @segments << @current_segment.to_h
+ @current_segment = Segment.new(style: @current_segment.style)
+ end
+
+ def to_h
+ flush_current_segment!
+
+ { offset: offset, content: @segments }.tap do |result|
+ result[:section] = sections.last if sections.any?
+ result[:section_header] = true if @section_header
+ result[:section_duration] = @section_duration if @section_duration
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/ansi2json/parser.rb b/lib/gitlab/ci/ansi2json/parser.rb
new file mode 100644
index 00000000000..d428680fb2a
--- /dev/null
+++ b/lib/gitlab/ci/ansi2json/parser.rb
@@ -0,0 +1,200 @@
+# frozen_string_literal: true
+
+# This Parser translates ANSI escape codes into human readable format.
+# It considers color and format changes.
+# Inspired by http://en.wikipedia.org/wiki/ANSI_escape_code
+module Gitlab
+ module Ci
+ module Ansi2json
+ class Parser
+ # keys represent the trailing digit in color changing command (30-37, 40-47, 90-97. 100-107)
+ COLOR = {
+ 0 => 'black', # not that this is gray in the intense color table
+ 1 => 'red',
+ 2 => 'green',
+ 3 => 'yellow',
+ 4 => 'blue',
+ 5 => 'magenta',
+ 6 => 'cyan',
+ 7 => 'white' # not that this is gray in the dark (aka default) color table
+ }.freeze
+
+ STYLE_SWITCHES = {
+ bold: 0x01,
+ italic: 0x02,
+ underline: 0x04,
+ conceal: 0x08,
+ cross: 0x10
+ }.freeze
+
+ def self.bold?(mask)
+ mask & STYLE_SWITCHES[:bold] != 0
+ end
+
+ def self.matching_formats(mask)
+ formats = []
+ STYLE_SWITCHES.each do |text_format, flag|
+ formats << "term-#{text_format}" if mask & flag != 0
+ end
+
+ formats
+ end
+
+ def initialize(command, ansi_stack = nil)
+ @command = command
+ @ansi_stack = ansi_stack
+ end
+
+ def changes
+ if self.respond_to?("on_#{@command}")
+ send("on_#{@command}", @ansi_stack) # rubocop:disable GitlabSecurity/PublicSend
+ end
+ end
+
+ # rubocop:disable Style/SingleLineMethods
+ def on_0(_) { reset: true } end
+
+ def on_1(_) { enable: STYLE_SWITCHES[:bold] } end
+
+ def on_3(_) { enable: STYLE_SWITCHES[:italic] } end
+
+ def on_4(_) { enable: STYLE_SWITCHES[:underline] } end
+
+ def on_8(_) { enable: STYLE_SWITCHES[:conceal] } end
+
+ def on_9(_) { enable: STYLE_SWITCHES[:cross] } end
+
+ def on_21(_) { disable: STYLE_SWITCHES[:bold] } end
+
+ def on_22(_) { disable: STYLE_SWITCHES[:bold] } end
+
+ def on_23(_) { disable: STYLE_SWITCHES[:italic] } end
+
+ def on_24(_) { disable: STYLE_SWITCHES[:underline] } end
+
+ def on_28(_) { disable: STYLE_SWITCHES[:conceal] } end
+
+ def on_29(_) { disable: STYLE_SWITCHES[:cross] } end
+
+ def on_30(_) { fg: fg_color(0) } end
+
+ def on_31(_) { fg: fg_color(1) } end
+
+ def on_32(_) { fg: fg_color(2) } end
+
+ def on_33(_) { fg: fg_color(3) } end
+
+ def on_34(_) { fg: fg_color(4) } end
+
+ def on_35(_) { fg: fg_color(5) } end
+
+ def on_36(_) { fg: fg_color(6) } end
+
+ def on_37(_) { fg: fg_color(7) } end
+
+ def on_38(stack) { fg: fg_color_256(stack) } end
+
+ def on_39(_) { fg: fg_color(9) } end
+
+ def on_40(_) { bg: bg_color(0) } end
+
+ def on_41(_) { bg: bg_color(1) } end
+
+ def on_42(_) { bg: bg_color(2) } end
+
+ def on_43(_) { bg: bg_color(3) } end
+
+ def on_44(_) { bg: bg_color(4) } end
+
+ def on_45(_) { bg: bg_color(5) } end
+
+ def on_46(_) { bg: bg_color(6) } end
+
+ def on_47(_) { bg: bg_color(7) } end
+
+ def on_48(stack) { bg: bg_color_256(stack) } end
+
+ # TODO: all the x9 never get called?
+ def on_49(_) { fg: fg_color(9) } end
+
+ def on_90(_) { fg: fg_color(0, 'l') } end
+
+ def on_91(_) { fg: fg_color(1, 'l') } end
+
+ def on_92(_) { fg: fg_color(2, 'l') } end
+
+ def on_93(_) { fg: fg_color(3, 'l') } end
+
+ def on_94(_) { fg: fg_color(4, 'l') } end
+
+ def on_95(_) { fg: fg_color(5, 'l') } end
+
+ def on_96(_) { fg: fg_color(6, 'l') } end
+
+ def on_97(_) { fg: fg_color(7, 'l') } end
+
+ def on_99(_) { fg: fg_color(9, 'l') } end
+
+ def on_100(_) { fg: bg_color(0, 'l') } end
+
+ def on_101(_) { fg: bg_color(1, 'l') } end
+
+ def on_102(_) { fg: bg_color(2, 'l') } end
+
+ def on_103(_) { fg: bg_color(3, 'l') } end
+
+ def on_104(_) { fg: bg_color(4, 'l') } end
+
+ def on_105(_) { fg: bg_color(5, 'l') } end
+
+ def on_106(_) { fg: bg_color(6, 'l') } end
+
+ def on_107(_) { fg: bg_color(7, 'l') } end
+
+ def on_109(_) { fg: bg_color(9, 'l') } end
+ # rubocop:enable Style/SingleLineMethods
+
+ def fg_color(color_index, prefix = nil)
+ term_color_class(color_index, ['fg', prefix])
+ end
+
+ def fg_color_256(command_stack)
+ xterm_color_class(command_stack, 'fg')
+ end
+
+ def bg_color(color_index, prefix = nil)
+ term_color_class(color_index, ['bg', prefix])
+ end
+
+ def bg_color_256(command_stack)
+ xterm_color_class(command_stack, 'bg')
+ end
+
+ def term_color_class(color_index, prefix)
+ color_name = COLOR[color_index]
+ return if color_name.nil?
+
+ color_class(['term', prefix, color_name])
+ end
+
+ def xterm_color_class(command_stack, prefix)
+ # the 38 and 48 commands have to be followed by "5" and the color index
+ return unless command_stack.length >= 2
+ return unless command_stack[0] == "5"
+
+ command_stack.shift # ignore the "5" command
+ color_index = command_stack.shift.to_i
+
+ return unless color_index >= 0
+ return unless color_index <= 255
+
+ color_class(["xterm", prefix, color_index])
+ end
+
+ def color_class(segments)
+ [segments].flatten.compact.join('-')
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/ansi2json/state.rb b/lib/gitlab/ci/ansi2json/state.rb
new file mode 100644
index 00000000000..db7a9035b8b
--- /dev/null
+++ b/lib/gitlab/ci/ansi2json/state.rb
@@ -0,0 +1,98 @@
+# frozen_string_literal: true
+
+# In this class we keep track of the state changes that the
+# Converter makes as it scans through the log stream.
+module Gitlab
+ module Ci
+ module Ansi2json
+ class State
+ attr_accessor :offset, :current_line, :inherited_style, :open_sections, :last_line_offset
+
+ def initialize(new_state, stream_size)
+ @offset = 0
+ @inherited_style = {}
+ @open_sections = {}
+ @stream_size = stream_size
+
+ restore_state!(new_state)
+ end
+
+ def encode
+ state = {
+ offset: @last_line_offset,
+ style: @current_line.style.to_h,
+ open_sections: @open_sections
+ }
+ Base64.urlsafe_encode64(state.to_json)
+ end
+
+ def open_section(section, timestamp)
+ @open_sections[section] = timestamp
+
+ @current_line.add_section(section)
+ @current_line.set_as_section_header
+ end
+
+ def close_section(section, timestamp)
+ return unless section_open?(section)
+
+ duration = timestamp.to_i - @open_sections[section].to_i
+ @current_line.set_section_duration(duration)
+
+ @open_sections.delete(section)
+ end
+
+ def section_open?(section)
+ @open_sections.key?(section)
+ end
+
+ def set_current_line!(style: nil, advance_offset: 0)
+ new_line = Line.new(
+ offset: @offset + advance_offset,
+ style: style || @current_line.style,
+ sections: @open_sections.keys
+ )
+ @current_line = new_line
+ end
+
+ def set_last_line_offset
+ @last_line_offset = @current_line.offset
+ end
+
+ def update_style(commands)
+ @current_line.flush_current_segment!
+ @current_line.update_style(commands)
+ end
+
+ private
+
+ def restore_state!(encoded_state)
+ state = decode_state(encoded_state)
+
+ return unless state
+ return if state['offset'].to_i > @stream_size
+
+ @offset = state['offset'].to_i if state['offset']
+ @open_sections = state['open_sections'] if state['open_sections']
+
+ if state['style']
+ @inherited_style = {
+ fg: state.dig('style', 'fg'),
+ bg: state.dig('style', 'bg'),
+ mask: state.dig('style', 'mask')
+ }
+ end
+ end
+
+ def decode_state(state)
+ return unless state.present?
+
+ decoded_state = Base64.urlsafe_decode64(state)
+ return unless decoded_state.present?
+
+ JSON.parse(decoded_state)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/ansi2json/style.rb b/lib/gitlab/ci/ansi2json/style.rb
new file mode 100644
index 00000000000..2739ffdfa5d
--- /dev/null
+++ b/lib/gitlab/ci/ansi2json/style.rb
@@ -0,0 +1,84 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Ansi2json
+ class Style
+ attr_reader :fg, :bg, :mask
+
+ def initialize(fg: nil, bg: nil, mask: 0)
+ @fg = fg
+ @bg = bg
+ @mask = mask
+
+ update_formats
+ end
+
+ def update(ansi_commands)
+ command = ansi_commands.shift
+ return unless command
+
+ if changes = Gitlab::Ci::Ansi2json::Parser.new(command, ansi_commands).changes
+ apply_changes(changes)
+ end
+
+ update(ansi_commands)
+ end
+
+ def set?
+ @fg || @bg || @formats.any?
+ end
+
+ def reset!
+ @fg = nil
+ @bg = nil
+ @mask = 0
+ @formats = []
+ end
+
+ def ==(other)
+ self.to_h == other.to_h
+ end
+
+ def to_s
+ [@fg, @bg, @formats].flatten.compact.join(' ')
+ end
+
+ def to_h
+ { fg: @fg, bg: @bg, mask: @mask }
+ end
+
+ private
+
+ def apply_changes(changes)
+ case
+ when changes[:reset]
+ reset!
+ when changes[:fg]
+ @fg = changes[:fg]
+ when changes[:bg]
+ @bg = changes[:bg]
+ when changes[:enable]
+ @mask |= changes[:enable]
+ when changes[:disable]
+ @mask &= ~changes[:disable]
+ else
+ return
+ end
+
+ update_formats
+ end
+
+ def update_formats
+ # Most terminals show bold colored text in the light color variant
+ # Let's mimic that here
+ if @fg.present? && Gitlab::Ci::Ansi2json::Parser.bold?(@mask)
+ @fg = @fg.sub(/fg-([a-z]{2,}+)/, 'fg-l-\1')
+ end
+
+ @formats = Gitlab::Ci::Ansi2json::Parser.matching_formats(@mask)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/build/policy.rb b/lib/gitlab/ci/build/policy.rb
index 43c46ad74af..ebeebe7fb5b 100644
--- a/lib/gitlab/ci/build/policy.rb
+++ b/lib/gitlab/ci/build/policy.rb
@@ -6,7 +6,7 @@ module Gitlab
module Policy
def self.fabricate(specs)
specifications = specs.to_h.map do |spec, value|
- self.const_get(spec.to_s.camelize).new(value)
+ self.const_get(spec.to_s.camelize, false).new(value)
end
specifications.compact
diff --git a/lib/gitlab/ci/build/prerequisite/kubernetes_namespace.rb b/lib/gitlab/ci/build/prerequisite/kubernetes_namespace.rb
index f448d55f00a..9950e1dec55 100644
--- a/lib/gitlab/ci/build/prerequisite/kubernetes_namespace.rb
+++ b/lib/gitlab/ci/build/prerequisite/kubernetes_namespace.rb
@@ -36,7 +36,7 @@ module Gitlab
Clusters::KubernetesNamespaceFinder.new(
deployment_cluster,
project: environment.project,
- environment_slug: environment.slug,
+ environment_name: environment.name,
allow_blank_token: true
).execute
end
diff --git a/lib/gitlab/ci/build/rules/rule/clause/exists.rb b/lib/gitlab/ci/build/rules/rule/clause/exists.rb
new file mode 100644
index 00000000000..62f8371283f
--- /dev/null
+++ b/lib/gitlab/ci/build/rules/rule/clause/exists.rb
@@ -0,0 +1,64 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Build
+ class Rules::Rule::Clause::Exists < Rules::Rule::Clause
+ # The maximum number of patterned glob comparisons that will be
+ # performed before the rule assumes that it has a match
+ MAX_PATTERN_COMPARISONS = 10_000
+
+ def initialize(globs)
+ globs = Array(globs)
+
+ @top_level_only = globs.all?(&method(:top_level_glob?))
+ @exact_globs, @pattern_globs = globs.partition(&method(:exact_glob?))
+ end
+
+ def satisfied_by?(pipeline, seed)
+ paths = worktree_paths(pipeline)
+
+ exact_matches?(paths) || pattern_matches?(paths)
+ end
+
+ private
+
+ def worktree_paths(pipeline)
+ if @top_level_only
+ pipeline.top_level_worktree_paths
+ else
+ pipeline.all_worktree_paths
+ end
+ end
+
+ def exact_matches?(paths)
+ @exact_globs.any? { |glob| paths.bsearch { |path| glob <=> path } }
+ end
+
+ def pattern_matches?(paths)
+ comparisons = 0
+ @pattern_globs.any? do |glob|
+ paths.any? do |path|
+ comparisons += 1
+ comparisons > MAX_PATTERN_COMPARISONS || pattern_match?(glob, path)
+ end
+ end
+ end
+
+ def pattern_match?(glob, path)
+ File.fnmatch?(glob, path, File::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB)
+ end
+
+ # matches glob patterns that only match files in the top level directory
+ def top_level_glob?(glob)
+ !glob.include?('/') && !glob.include?('**')
+ end
+
+ # matches glob patterns that have no metacharacters for File#fnmatch?
+ def exact_glob?(glob)
+ !glob.include?('*') && !glob.include?('?') && !glob.include?('[') && !glob.include?('{')
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb
index 668e4a5e246..9c1e6277e95 100644
--- a/lib/gitlab/ci/config.rb
+++ b/lib/gitlab/ci/config.rb
@@ -7,6 +7,8 @@ module Gitlab
#
class Config
ConfigError = Class.new(StandardError)
+ TIMEOUT_SECONDS = 30.seconds
+ TIMEOUT_MESSAGE = 'Resolving config took longer than expected'
RESCUE_ERRORS = [
Gitlab::Config::Loader::FormatError,
@@ -17,17 +19,17 @@ module Gitlab
attr_reader :root
def initialize(config, project: nil, sha: nil, user: nil)
- @config = Config::Extendable
- .new(build_config(config, project: project, sha: sha, user: user))
- .to_hash
+ @context = build_context(project: project, sha: sha, user: user)
+
+ if Feature.enabled?(:ci_limit_yaml_expansion, project, default_enabled: true)
+ @context.set_deadline(TIMEOUT_SECONDS)
+ end
+
+ @config = expand_config(config)
@root = Entry::Root.new(@config)
@root.compose!
- rescue Gitlab::Config::Loader::Yaml::DataTooLargeError => e
- Gitlab::Sentry.track_exception(e, extra: { user: user.inspect, project: project.inspect })
- raise Config::ConfigError, e.message
-
rescue *rescue_errors => e
raise Config::ConfigError, e.message
end
@@ -61,18 +63,39 @@ module Gitlab
private
- def build_config(config, project:, sha:, user:)
+ def expand_config(config)
+ build_config(config)
+
+ rescue Gitlab::Config::Loader::Yaml::DataTooLargeError => e
+ track_exception(e)
+ raise Config::ConfigError, e.message
+
+ rescue Gitlab::Ci::Config::External::Context::TimeoutError => e
+ track_exception(e)
+ raise Config::ConfigError, TIMEOUT_MESSAGE
+ end
+
+ def build_config(config)
initial_config = Gitlab::Config::Loader::Yaml.new(config).load!
+ initial_config = Config::External::Processor.new(initial_config, @context).perform
+ initial_config = Config::Extendable.new(initial_config).to_hash
- process_external_files(initial_config, project: project, sha: sha, user: user)
+ if Feature.enabled?(:ci_pre_post_pipeline_stages, @context.project, default_enabled: true)
+ initial_config = Config::EdgeStagesInjector.new(initial_config).to_hash
+ end
+
+ initial_config
end
- def process_external_files(config, project:, sha:, user:)
- Config::External::Processor.new(config,
+ def build_context(project:, sha:, user:)
+ Config::External::Context.new(
project: project,
sha: sha || project&.repository&.root_ref_sha,
- user: user,
- expandset: Set.new).perform
+ user: user)
+ end
+
+ def track_exception(error)
+ Gitlab::Sentry.track_exception(error, extra: @context.sentry_payload)
end
# Overriden in EE
diff --git a/lib/gitlab/ci/config/edge_stages_injector.rb b/lib/gitlab/ci/config/edge_stages_injector.rb
new file mode 100644
index 00000000000..64ff9f951e4
--- /dev/null
+++ b/lib/gitlab/ci/config/edge_stages_injector.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ class Config
+ class EdgeStagesInjector
+ PRE_PIPELINE = '.pre'
+ POST_PIPELINE = '.post'
+ EDGES = [PRE_PIPELINE, POST_PIPELINE].freeze
+
+ def self.wrap_stages(stages)
+ stages = stages.to_a - EDGES
+ stages.unshift PRE_PIPELINE
+ stages.push POST_PIPELINE
+
+ stages
+ end
+
+ def initialize(config)
+ @config = config.to_h.deep_dup
+ end
+
+ def to_hash
+ if config.key?(:stages)
+ process(:stages)
+ elsif config.key?(:types)
+ process(:types)
+ else
+ config
+ end
+ end
+
+ private
+
+ attr_reader :config
+
+ delegate :wrap_stages, to: :class
+
+ def process(keyword)
+ stages = extract_stages(keyword)
+ return config if stages.empty?
+
+ stages = wrap_stages(stages)
+ config[keyword] = stages
+ config
+ end
+
+ def extract_stages(keyword)
+ stages = config[keyword]
+ return [] unless stages.is_a?(Array)
+
+ stages
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/config/entry/rules/rule.rb b/lib/gitlab/ci/config/entry/rules/rule.rb
index 1f2a34ec90e..5d6d1c026e3 100644
--- a/lib/gitlab/ci/config/entry/rules/rule.rb
+++ b/lib/gitlab/ci/config/entry/rules/rule.rb
@@ -8,11 +8,11 @@ module Gitlab
include ::Gitlab::Config::Entry::Validatable
include ::Gitlab::Config::Entry::Attributable
- CLAUSES = %i[if changes].freeze
- ALLOWED_KEYS = %i[if changes when start_in].freeze
+ CLAUSES = %i[if changes exists].freeze
+ ALLOWED_KEYS = %i[if changes exists when start_in].freeze
ALLOWED_WHEN = %w[on_success on_failure always never manual delayed].freeze
- attributes :if, :changes, :when, :start_in
+ attributes :if, :changes, :exists, :when, :start_in
validations do
validates :config, presence: true
@@ -24,7 +24,7 @@ module Gitlab
with_options allow_nil: true do
validates :if, expression: true
- validates :changes, array_of_strings: true
+ validates :changes, :exists, array_of_strings: true, length: { maximum: 50 }
validates :when, allowed_values: { in: ALLOWED_WHEN }
end
end
diff --git a/lib/gitlab/ci/config/entry/stages.rb b/lib/gitlab/ci/config/entry/stages.rb
index 2d715cbc6bb..7e431f0f8bb 100644
--- a/lib/gitlab/ci/config/entry/stages.rb
+++ b/lib/gitlab/ci/config/entry/stages.rb
@@ -15,7 +15,7 @@ module Gitlab
end
def self.default
- %w[build test deploy]
+ Config::EdgeStagesInjector.wrap_stages %w[build test deploy]
end
end
end
diff --git a/lib/gitlab/ci/config/external/context.rb b/lib/gitlab/ci/config/external/context.rb
new file mode 100644
index 00000000000..bb4439cd069
--- /dev/null
+++ b/lib/gitlab/ci/config/external/context.rb
@@ -0,0 +1,64 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ class Config
+ module External
+ class Context
+ TimeoutError = Class.new(StandardError)
+
+ attr_reader :project, :sha, :user
+ attr_reader :expandset, :execution_deadline
+
+ def initialize(project: nil, sha: nil, user: nil)
+ @project = project
+ @sha = sha
+ @user = user
+ @expandset = Set.new
+ @execution_deadline = 0
+
+ yield self if block_given?
+ end
+
+ def mutate(attrs = {})
+ self.class.new(**attrs) do |ctx|
+ ctx.expandset = expandset
+ ctx.execution_deadline = execution_deadline
+ end
+ end
+
+ def set_deadline(timeout_seconds)
+ @execution_deadline = current_monotonic_time + timeout_seconds.to_f
+ end
+
+ def check_execution_time!
+ raise TimeoutError if execution_expired?
+ end
+
+ def sentry_payload
+ {
+ user: user.inspect,
+ project: project.inspect
+ }
+ end
+
+ protected
+
+ attr_writer :expandset, :execution_deadline
+
+ private
+
+ def current_monotonic_time
+ Gitlab::Metrics::System.monotonic_time
+ end
+
+ def execution_expired?
+ return false if execution_deadline.zero?
+
+ current_monotonic_time > execution_deadline
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/config/external/file/base.rb b/lib/gitlab/ci/config/external/file/base.rb
index c56d33544ba..4684a9eb981 100644
--- a/lib/gitlab/ci/config/external/file/base.rb
+++ b/lib/gitlab/ci/config/external/file/base.rb
@@ -12,8 +12,6 @@ module Gitlab
YAML_WHITELIST_EXTENSION = /.+\.(yml|yaml)$/i.freeze
- Context = Struct.new(:project, :sha, :user, :expandset)
-
def initialize(params, context)
@params = params
@context = context
@@ -69,11 +67,16 @@ module Gitlab
end
def validate!
+ validate_execution_time!
validate_location!
validate_content! if errors.none?
validate_hash! if errors.none?
end
+ def validate_execution_time!
+ context.check_execution_time!
+ end
+
def validate_location!
if invalid_location_type?
errors.push("Included file `#{location}` needs to be a string")
@@ -95,11 +98,11 @@ module Gitlab
end
def expand_includes(hash)
- External::Processor.new(hash, **expand_context).perform
+ External::Processor.new(hash, context.mutate(expand_context_attrs)).perform
end
- def expand_context
- { project: nil, sha: nil, user: nil, expandset: context.expandset }
+ def expand_context_attrs
+ {}
end
end
end
diff --git a/lib/gitlab/ci/config/external/file/local.rb b/lib/gitlab/ci/config/external/file/local.rb
index cac321ec4a6..8cb1575a3e1 100644
--- a/lib/gitlab/ci/config/external/file/local.rb
+++ b/lib/gitlab/ci/config/external/file/local.rb
@@ -6,6 +6,7 @@ module Gitlab
module External
module File
class Local < Base
+ extend ::Gitlab::Utils::Override
include Gitlab::Utils::StrongMemoize
def initialize(params, context)
@@ -34,11 +35,13 @@ module Gitlab
context.project.repository.blob_data_at(context.sha, location)
end
- def expand_context
- super.merge(
+ override :expand_context_attrs
+ def expand_context_attrs
+ {
project: context.project,
sha: context.sha,
- user: context.user)
+ user: context.user
+ }
end
end
end
diff --git a/lib/gitlab/ci/config/external/file/project.rb b/lib/gitlab/ci/config/external/file/project.rb
index b828f77835c..c7b49b495fa 100644
--- a/lib/gitlab/ci/config/external/file/project.rb
+++ b/lib/gitlab/ci/config/external/file/project.rb
@@ -6,11 +6,12 @@ module Gitlab
module External
module File
class Project < Base
+ extend ::Gitlab::Utils::Override
include Gitlab::Utils::StrongMemoize
attr_reader :project_name, :ref_name
- def initialize(params, context = {})
+ def initialize(params, context)
@location = params[:file]
@project_name = params[:project]
@ref_name = params[:ref] || 'HEAD'
@@ -65,11 +66,13 @@ module Gitlab
end
end
- def expand_context
- super.merge(
+ override :expand_context_attrs
+ def expand_context_attrs
+ {
project: project,
sha: sha,
- user: context.user)
+ user: context.user
+ }
end
end
end
diff --git a/lib/gitlab/ci/config/external/mapper.rb b/lib/gitlab/ci/config/external/mapper.rb
index aff5c5b9651..0143d7784fa 100644
--- a/lib/gitlab/ci/config/external/mapper.rb
+++ b/lib/gitlab/ci/config/external/mapper.rb
@@ -7,7 +7,7 @@ module Gitlab
class Mapper
include Gitlab::Utils::StrongMemoize
- MAX_INCLUDES = 50
+ MAX_INCLUDES = 100
FILE_CLASSES = [
External::File::Remote,
@@ -21,14 +21,9 @@ module Gitlab
DuplicateIncludesError = Class.new(Error)
TooManyIncludesError = Class.new(Error)
- def initialize(values, project:, sha:, user:, expandset:)
- raise Error, 'Expanded needs to be `Set`' unless expandset.is_a?(Set)
-
+ def initialize(values, context)
@locations = Array.wrap(values.fetch(:include, []))
- @project = project
- @sha = sha
- @user = user
- @expandset = expandset
+ @context = context
end
def process
@@ -43,7 +38,9 @@ module Gitlab
private
- attr_reader :locations, :project, :sha, :user, :expandset
+ attr_reader :locations, :context
+
+ delegate :expandset, to: :context
# convert location if String to canonical form
def normalize_location(location)
@@ -68,11 +65,11 @@ module Gitlab
end
# We scope location to context, as this allows us to properly support
- # relative incldues, and similarly looking relative in another project
+ # relative includes, and similarly looking relative in another project
# does not trigger duplicate error
scoped_location = location.merge(
- context_project: project,
- context_sha: sha)
+ context_project: context.project,
+ context_sha: context.sha)
unless expandset.add?(scoped_location)
raise DuplicateIncludesError, "Include `#{location.to_json}` was already included!"
@@ -88,12 +85,6 @@ module Gitlab
matching.first
end
-
- def context
- strong_memoize(:context) do
- External::File::Base::Context.new(project, sha, user, expandset)
- end
- end
end
end
end
diff --git a/lib/gitlab/ci/config/external/processor.rb b/lib/gitlab/ci/config/external/processor.rb
index 4a049ecae49..de69a1b1e8f 100644
--- a/lib/gitlab/ci/config/external/processor.rb
+++ b/lib/gitlab/ci/config/external/processor.rb
@@ -7,9 +7,9 @@ module Gitlab
class Processor
IncludeError = Class.new(StandardError)
- def initialize(values, project:, sha:, user:, expandset:)
+ def initialize(values, context)
@values = values
- @external_files = External::Mapper.new(values, project: project, sha: sha, user: user, expandset: expandset).process
+ @external_files = External::Mapper.new(values, context).process
@content = {}
rescue External::Mapper::Error,
OpenSSL::SSL::SSLError => e
diff --git a/lib/gitlab/ci/parsers/test/junit.rb b/lib/gitlab/ci/parsers/test/junit.rb
index dca60eabc1c..8f8cae0b5f2 100644
--- a/lib/gitlab/ci/parsers/test/junit.rb
+++ b/lib/gitlab/ci/parsers/test/junit.rb
@@ -49,6 +49,12 @@ module Gitlab
if data['failure']
status = ::Gitlab::Ci::Reports::TestCase::STATUS_FAILED
system_output = data['failure']
+ elsif data['error']
+ # For now, as an MVC, we are grouping error test cases together
+ # with failed ones. But we will improve this further on
+ # https://gitlab.com/gitlab-org/gitlab/issues/32046.
+ status = ::Gitlab::Ci::Reports::TestCase::STATUS_FAILED
+ system_output = data['error']
else
status = ::Gitlab::Ci::Reports::TestCase::STATUS_SUCCESS
system_output = nil
diff --git a/lib/gitlab/ci/pipeline/seed/build.rb b/lib/gitlab/ci/pipeline/seed/build.rb
index 1f6b3853069..fc9c540088b 100644
--- a/lib/gitlab/ci/pipeline/seed/build.rb
+++ b/lib/gitlab/ci/pipeline/seed/build.rb
@@ -73,7 +73,9 @@ module Gitlab
if bridge?
::Ci::Bridge.new(attributes)
else
- ::Ci::Build.new(attributes)
+ ::Ci::Build.new(attributes).tap do |job|
+ job.deployment = Seed::Deployment.new(job).to_resource
+ end
end
end
end
diff --git a/lib/gitlab/ci/pipeline/seed/deployment.rb b/lib/gitlab/ci/pipeline/seed/deployment.rb
new file mode 100644
index 00000000000..8c90f03cb1d
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/seed/deployment.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Pipeline
+ module Seed
+ class Deployment < Seed::Base
+ attr_reader :job, :environment
+
+ def initialize(job)
+ @job = job
+ @environment = Seed::Environment.new(@job)
+ end
+
+ def to_resource
+ return job.deployment if job.deployment
+ return unless job.starts_environment?
+
+ deployment = ::Deployment.new(attributes)
+ deployment.environment = environment.to_resource
+
+ # If there is a validation error on environment creation, such as
+ # the name contains invalid character, the job will fall back to a
+ # non-environment job.
+ return unless deployment.valid? && deployment.environment.persisted?
+
+ deployment.cluster_id =
+ deployment.environment.deployment_platform&.cluster_id
+
+ # Allocate IID for deployments.
+ # This operation must be outside of transactions of pipeline creations.
+ deployment.ensure_project_iid!
+
+ deployment
+ end
+
+ private
+
+ def attributes
+ {
+ project: job.project,
+ user: job.user,
+ ref: job.ref,
+ tag: job.tag,
+ sha: job.sha,
+ on_stop: job.on_stop
+ }
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/pipeline/seed/environment.rb b/lib/gitlab/ci/pipeline/seed/environment.rb
new file mode 100644
index 00000000000..2d3a1e702f9
--- /dev/null
+++ b/lib/gitlab/ci/pipeline/seed/environment.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Pipeline
+ module Seed
+ class Environment < Seed::Base
+ attr_reader :job
+
+ def initialize(job)
+ @job = job
+ end
+
+ def to_resource
+ find_environment || ::Environment.create(attributes)
+ end
+
+ private
+
+ def find_environment
+ job.project.environments.find_by_name(expanded_environment_name)
+ end
+
+ def expanded_environment_name
+ job.expanded_environment_name
+ end
+
+ def attributes
+ {
+ project: job.project,
+ name: expanded_environment_name
+ }
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/status/composite.rb b/lib/gitlab/ci/status/composite.rb
new file mode 100644
index 00000000000..3c00b67911f
--- /dev/null
+++ b/lib/gitlab/ci/status/composite.rb
@@ -0,0 +1,120 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Status
+ class Composite
+ include Gitlab::Utils::StrongMemoize
+
+ # This class accepts an array of arrays/hashes/or objects
+ def initialize(all_statuses, with_allow_failure: true)
+ unless all_statuses.respond_to?(:pluck)
+ raise ArgumentError, "all_statuses needs to respond to `.pluck`"
+ end
+
+ @status_set = Set.new
+ @status_key = 0
+ @allow_failure_key = 1 if with_allow_failure
+
+ consume_all_statuses(all_statuses)
+ end
+
+ # The status calculation is order dependent,
+ # 1. In some cases we assume that that status is exact
+ # if the we only have given statues,
+ # 2. In other cases we assume that status is of that type
+ # based on what statuses are no longer valid based on the
+ # data set that we have
+ def status
+ return if none?
+
+ strong_memoize(:status) do
+ if only_of?(:skipped, :ignored)
+ 'skipped'
+ elsif only_of?(:success, :skipped, :success_with_warnings, :ignored)
+ 'success'
+ elsif only_of?(:created, :success_with_warnings, :ignored)
+ 'created'
+ elsif only_of?(:preparing, :success_with_warnings, :ignored)
+ 'preparing'
+ elsif only_of?(:canceled, :success, :skipped, :success_with_warnings, :ignored)
+ 'canceled'
+ elsif only_of?(:pending, :created, :skipped, :success_with_warnings, :ignored)
+ 'pending'
+ elsif any_of?(:running, :pending)
+ 'running'
+ elsif any_of?(:manual)
+ 'manual'
+ elsif any_of?(:scheduled)
+ 'scheduled'
+ elsif any_of?(:preparing)
+ 'preparing'
+ elsif any_of?(:created)
+ 'running'
+ else
+ 'failed'
+ end
+ end
+ end
+
+ def warnings?
+ @status_set.include?(:success_with_warnings)
+ end
+
+ private
+
+ def none?
+ @status_set.empty?
+ end
+
+ def any_of?(*names)
+ names.any? { |name| @status_set.include?(name) }
+ end
+
+ def only_of?(*names)
+ matching = names.count { |name| @status_set.include?(name) }
+ matching > 0 &&
+ matching == @status_set.size
+ end
+
+ def consume_all_statuses(all_statuses)
+ columns = []
+ columns[@status_key] = :status
+ columns[@allow_failure_key] = :allow_failure if @allow_failure_key
+
+ all_statuses
+ .pluck(*columns) # rubocop: disable CodeReuse/ActiveRecord
+ .each(&method(:consume_status))
+ end
+
+ def consume_status(description)
+ # convert `"status"` into `["status"]`
+ description = Array(description)
+
+ status =
+ if success_with_warnings?(description)
+ :success_with_warnings
+ elsif ignored_status?(description)
+ :ignored
+ else
+ description[@status_key].to_sym
+ end
+
+ @status_set.add(status)
+ end
+
+ def success_with_warnings?(status)
+ @allow_failure_key &&
+ status[@allow_failure_key] &&
+ HasStatus::PASSED_WITH_WARNINGS_STATUSES.include?(status[@status_key])
+ end
+
+ def ignored_status?(status)
+ @allow_failure_key &&
+ status[@allow_failure_key] &&
+ HasStatus::EXCLUDE_IGNORED_STATUSES.include?(status[@status_key])
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/status/factory.rb b/lib/gitlab/ci/status/factory.rb
index 2a0bf060c9b..c29dc51f076 100644
--- a/lib/gitlab/ci/status/factory.rb
+++ b/lib/gitlab/ci/status/factory.rb
@@ -20,7 +20,7 @@ module Gitlab
def core_status
Gitlab::Ci::Status
- .const_get(@status.capitalize)
+ .const_get(@status.capitalize, false)
.new(@subject, @user)
.extend(self.class.common_helpers)
end
diff --git a/lib/gitlab/ci/status/preparing.rb b/lib/gitlab/ci/status/preparing.rb
index 62985d0a9f9..1ebdbc482b7 100644
--- a/lib/gitlab/ci/status/preparing.rb
+++ b/lib/gitlab/ci/status/preparing.rb
@@ -12,20 +12,12 @@ module Gitlab
s_('CiStatusLabel|preparing')
end
- ##
- # TODO: shared with 'created'
- # until we get one for 'preparing'
- #
def icon
- 'status_created'
+ 'status_preparing'
end
- ##
- # TODO: shared with 'created'
- # until we get one for 'preparing'
- #
def favicon
- 'favicon_status_created'
+ 'favicon_status_preparing'
end
end
end
diff --git a/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml b/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
index 1ad9dd2913e..5a7642d24ee 100644
--- a/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
@@ -77,15 +77,10 @@ include:
- template: Jobs/Test.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Jobs/Test.gitlab-ci.yml
- template: Jobs/Code-Quality.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml
- template: Jobs/Deploy.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
+ - template: Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml
- template: Jobs/Browser-Performance-Testing.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Jobs/Browser-Performance-Testing.gitlab-ci.yml
- template: Security/DAST.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Security/DAST.gitlab-ci.yml
- template: Security/Container-Scanning.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml
- template: Security/Dependency-Scanning.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Security/Dependency-Scanning.gitlab-ci.yml
- template: Security/License-Management.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Security/License-Management.gitlab-ci.yml
- template: Security/SAST.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml
-
-# Override DAST job to exclude master branch
-dast:
- except:
- refs:
- - master
diff --git a/lib/gitlab/ci/templates/Docker.gitlab-ci.yml b/lib/gitlab/ci/templates/Docker.gitlab-ci.yml
index f6d240b7b6d..15cdbf63cb1 100644
--- a/lib/gitlab/ci/templates/Docker.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Docker.gitlab-ci.yml
@@ -1,4 +1,4 @@
-build-master:
+docker-build-master:
# Official docker image.
image: docker:latest
stage: build
@@ -12,7 +12,7 @@ build-master:
only:
- master
-build:
+docker-build:
# Official docker image.
image: docker:latest
stage: build
diff --git a/lib/gitlab/ci/templates/Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml b/lib/gitlab/ci/templates/Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml
new file mode 100644
index 00000000000..ae2ff9992f9
--- /dev/null
+++ b/lib/gitlab/ci/templates/Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml
@@ -0,0 +1,55 @@
+.auto-deploy:
+ image: "registry.gitlab.com/gitlab-org/cluster-integration/auto-deploy-image:v0.1.0"
+
+dast_environment_deploy:
+ extends: .auto-deploy
+ stage: review
+ script:
+ - auto-deploy check_kube_domain
+ - auto-deploy download_chart
+ - auto-deploy ensure_namespace
+ - auto-deploy initialize_tiller
+ - auto-deploy create_secret
+ - auto-deploy deploy
+ - auto-deploy persist_environment_url
+ environment:
+ name: dast-default
+ url: http://dast-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN
+ on_stop: stop_dast_environment
+ artifacts:
+ paths: [environment_url.txt]
+ only:
+ refs:
+ - branches
+ variables:
+ - $GITLAB_FEATURES =~ /\bdast\b/
+ kubernetes: active
+ except:
+ variables:
+ - $CI_DEFAULT_BRANCH != $CI_COMMIT_REF_NAME
+ - $DAST_DISABLED || $DAST_DISABLED_FOR_DEFAULT_BRANCH
+ - $DAST_WEBSITE # we don't need to create a review app if a URL is already given
+
+stop_dast_environment:
+ extends: .auto-deploy
+ stage: cleanup
+ variables:
+ GIT_STRATEGY: none
+ script:
+ - auto-deploy initialize_tiller
+ - auto-deploy delete
+ environment:
+ name: dast-default
+ action: stop
+ needs: ["dast"]
+ only:
+ refs:
+ - branches
+ variables:
+ - $GITLAB_FEATURES =~ /\bdast\b/
+ kubernetes: active
+ except:
+ variables:
+ - $CI_DEFAULT_BRANCH != $CI_COMMIT_REF_NAME
+ - $DAST_DISABLED || $DAST_DISABLED_FOR_DEFAULT_BRANCH
+ - $DAST_WEBSITE
diff --git a/lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml b/lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml
index 7f9a7df2f31..f058468ed8e 100644
--- a/lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml
@@ -1,9 +1,12 @@
# Read more about this feature here: https://docs.gitlab.com/ee/user/application_security/container_scanning/
+variables:
+ CS_MAJOR_VERSION: 1
+
container_scanning:
stage: test
image:
- name: registry.gitlab.com/gitlab-org/security-products/analyzers/klar:$CI_SERVER_VERSION_MAJOR-$CI_SERVER_VERSION_MINOR-stable
+ name: registry.gitlab.com/gitlab-org/security-products/analyzers/klar:$CS_MAJOR_VERSION
entrypoint: []
variables:
# By default, use the latest clair vulnerabilities database, however, allow it to be overridden here
diff --git a/lib/gitlab/ci/templates/Security/DAST.gitlab-ci.yml b/lib/gitlab/ci/templates/Security/DAST.gitlab-ci.yml
index 4b55ffd3771..23c65a0cb67 100644
--- a/lib/gitlab/ci/templates/Security/DAST.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Security/DAST.gitlab-ci.yml
@@ -46,3 +46,4 @@ dast:
except:
variables:
- $DAST_DISABLED
+ - $DAST_DISABLED_FOR_DEFAULT_BRANCH && $CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
diff --git a/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml b/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml
index 88f4b72044c..a0c2ab3aa26 100644
--- a/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml
@@ -4,7 +4,13 @@
# List of the variables: https://gitlab.com/gitlab-org/security-products/sast#settings
# How to set: https://docs.gitlab.com/ee/ci/yaml/#variables
-.sast:
+variables:
+ SAST_ANALYZER_IMAGE_PREFIX: "registry.gitlab.com/gitlab-org/security-products/analyzers"
+ SAST_DEFAULT_ANALYZERS: "bandit, brakeman, gosec, spotbugs, flawfinder, phpcs-security-audit, security-code-scan, nodejs-scan, eslint, tslint, secrets, sobelow, pmd-apex"
+ SAST_MAJOR_VERSION: 2
+ SAST_DISABLE_DIND: "false"
+
+sast:
stage: test
allow_failure: true
artifacts:
@@ -15,13 +21,6 @@
- branches
variables:
- $GITLAB_FEATURES =~ /\bsast\b/
-
-variables:
- SAST_ANALYZER_IMAGE_PREFIX: "registry.gitlab.com/gitlab-org/security-products/analyzers"
- SAST_DISABLE_DIND: "false"
-
-sast:
- extends: .sast
image: docker:stable
variables:
DOCKER_DRIVER: overlay2
@@ -84,7 +83,8 @@ sast:
- $SAST_DISABLE_DIND == 'true'
.analyzer:
- extends: .sast
+ extends: sast
+ services: []
except:
variables:
- $SAST_DISABLE_DIND == 'false'
@@ -94,100 +94,128 @@ sast:
bandit-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/bandit"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/bandit:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /python/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /bandit/&&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /python/
brakeman-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/brakeman"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/brakeman:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /ruby/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /brakeman/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /ruby/
eslint-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/eslint"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/eslint:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /javascript/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /eslint/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /javascript/
flawfinder-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/flawfinder"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/flawfinder:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /\b(c\+\+|c\b)/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /flawfinder/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /\b(c\+\+|c)\b/
gosec-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/gosec"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/gosec:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /go/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /gosec/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /\bgo\b/
nodejs-scan-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/nodejs-scan"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/nodejs-scan:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /javascript/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /nodejs-scan/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /javascript/
phpcs-security-audit-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/phpcs-security-audit"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/phpcs-security-audit:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /php/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /phpcs-security-audit/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /php/
pmd-apex-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/pmd-apex"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/pmd-apex:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /apex/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /pmd-apex/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /apex/
secrets-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/secrets"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/secrets:$SAST_MAJOR_VERSION"
+ only:
+ variables:
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /secrets/
security-code-scan-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/security-code-scan"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/security-code-scan:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /c\#/ || $CI_PROJECT_REPOSITORY_LANGUAGES =~ /visual basic/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /security-code-scan/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /\b(c\#|visual basic\b)/
sobelow-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/sobelow"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/sobelow:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /elixir/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /sobelow/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /elixir/
spotbugs-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/spotbugs"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/spotbugs:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /java\b/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /spotbugs/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /java\b/
tslint-sast:
extends: .analyzer
image:
- name: "$SAST_ANALYZER_IMAGE_PREFIX/tslint"
+ name: "$SAST_ANALYZER_IMAGE_PREFIX/tslint:$SAST_MAJOR_VERSION"
only:
variables:
- - '$CI_PROJECT_REPOSITORY_LANGUAGES =~ /typescript/'
+ - $GITLAB_FEATURES =~ /\bsast\b/ &&
+ $SAST_DEFAULT_ANALYZERS =~ /tslint/ &&
+ $CI_PROJECT_REPOSITORY_LANGUAGES =~ /typescript/
diff --git a/lib/gitlab/ci/templates/Verify/Browser-Performance.gitlab-ci.yml b/lib/gitlab/ci/templates/Verify/Browser-Performance.gitlab-ci.yml
new file mode 100644
index 00000000000..eced181e966
--- /dev/null
+++ b/lib/gitlab/ci/templates/Verify/Browser-Performance.gitlab-ci.yml
@@ -0,0 +1,29 @@
+# Read more about the feature here: https://docs.gitlab.com/ee/user/project/merge_requests/browser_performance_testing.html
+
+stages:
+ - build
+ - test
+ - deploy
+ - performance
+
+performance:
+ stage: performance
+ image: docker:git
+ variables:
+ URL: https://example.com
+ SITESPEED_VERSION: 6.3.1
+ SITESPEED_OPTIONS: ''
+ services:
+ - docker:stable-dind
+ script:
+ - mkdir gitlab-exporter
+ - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js
+ - mkdir sitespeed-results
+ - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:$SITESPEED_VERSION --plugins.add ./gitlab-exporter --outputFolder sitespeed-results $URL $SITESPEED_OPTIONS
+ - mv sitespeed-results/data/performance.json performance.json
+ artifacts:
+ paths:
+ - performance.json
+ - sitespeed-results/
+ reports:
+ performance: performance.json
diff --git a/lib/gitlab/ci/trace.rb b/lib/gitlab/ci/trace.rb
index 5b8c2d2f7c7..941f7178dac 100644
--- a/lib/gitlab/ci/trace.rb
+++ b/lib/gitlab/ci/trace.rb
@@ -4,6 +4,7 @@ module Gitlab
module Ci
class Trace
include ::Gitlab::ExclusiveLeaseHelpers
+ include Checksummable
LOCK_TTL = 10.minutes
LOCK_RETRIES = 2
@@ -193,7 +194,7 @@ module Gitlab
project: job.project,
file_type: :trace,
file: stream,
- file_sha256: Digest::SHA256.file(path).hexdigest)
+ file_sha256: self.class.hexdigest(path))
end
end
diff --git a/lib/gitlab/ci/trace/stream.rb b/lib/gitlab/ci/trace/stream.rb
index e61fb50a303..20f5620dd64 100644
--- a/lib/gitlab/ci/trace/stream.rb
+++ b/lib/gitlab/ci/trace/stream.rb
@@ -63,10 +63,6 @@ module Gitlab
end.force_encoding(Encoding.default_external)
end
- def html_with_state(state = nil)
- ::Gitlab::Ci::Ansi2html.convert(stream, state)
- end
-
def html(last_lines: nil)
text = raw(last_lines: last_lines)
buffer = StringIO.new(text)
diff --git a/lib/gitlab/cluster/lifecycle_events.rb b/lib/gitlab/cluster/lifecycle_events.rb
index 8f796748199..294ffad02ce 100644
--- a/lib/gitlab/cluster/lifecycle_events.rb
+++ b/lib/gitlab/cluster/lifecycle_events.rb
@@ -8,14 +8,50 @@ module Gitlab
# watchdog threads. This lets us abstract away the Unix process
# lifecycles of Unicorn, Sidekiq, Puma, Puma Cluster, etc.
#
- # We have three lifecycle events.
+ # We have the following lifecycle events.
#
- # - before_fork (only in forking processes)
- # In forking processes (Unicorn and Puma in multiprocess mode) this
- # will be called exactly once, on startup, before the workers are
- # forked. This will be called in the parent process.
- # - worker_start
- # - before_master_restart (only in forking processes)
+ # - on_master_start:
+ #
+ # Unicorn/Puma Cluster: This will be called exactly once,
+ # on startup, before the workers are forked. This is
+ # called in the PARENT/MASTER process.
+ #
+ # Sidekiq/Puma Single: This is called immediately.
+ #
+ # - on_before_fork:
+ #
+ # Unicorn/Puma Cluster: This will be called exactly once,
+ # on startup, before the workers are forked. This is
+ # called in the PARENT/MASTER process.
+ #
+ # Sidekiq/Puma Single: This is not called.
+ #
+ # - on_worker_start:
+ #
+ # Unicorn/Puma Cluster: This is called in the worker process
+ # exactly once before processing requests.
+ #
+ # Sidekiq/Puma Single: This is called immediately.
+ #
+ # - on_before_phased_restart:
+ #
+ # Unicorn/Puma Cluster: This will be called before a graceful
+ # shutdown of workers starts happening.
+ # This is called on `master` process.
+ #
+ # Sidekiq/Puma Single: This is not called.
+ #
+ # - on_before_master_restart:
+ #
+ # Unicorn: This will be called before a new master is spun up.
+ # This is called on forked master before `execve` to become
+ # a new masterfor Unicorn. This means that this does not really
+ # affect old master process.
+ #
+ # Puma Cluster: This will be called before a new master is spun up.
+ # This is called on `master` process.
+ #
+ # Sidekiq/Puma Single: This is not called.
#
# Blocks will be executed in the order in which they are registered.
#
@@ -34,15 +70,17 @@ module Gitlab
end
def on_before_fork(&block)
- return unless in_clustered_environment?
-
# Defer block execution
(@before_fork_hooks ||= []) << block
end
- def on_master_restart(&block)
- return unless in_clustered_environment?
+ # Read the config/initializers/cluster_events_before_phased_restart.rb
+ def on_before_phased_restart(&block)
+ # Defer block execution
+ (@master_phased_restart ||= []) << block
+ end
+ def on_before_master_restart(&block)
# Defer block execution
(@master_restart_hooks ||= []) << block
end
@@ -70,12 +108,21 @@ module Gitlab
end
end
- def do_master_restart
- @master_restart_hooks && @master_restart_hooks.each do |block|
+ def do_before_phased_restart
+ @master_phased_restart&.each do |block|
block.call
end
end
+ def do_before_master_restart
+ @master_restart_hooks&.each do |block|
+ block.call
+ end
+ end
+
+ # DEPRECATED
+ alias_method :do_master_restart, :do_before_master_restart
+
# Puma doesn't use singletons (which is good) but
# this means we need to pass through whether the
# puma server is running in single mode or cluster mode
diff --git a/lib/gitlab/cluster/mixins/puma_cluster.rb b/lib/gitlab/cluster/mixins/puma_cluster.rb
new file mode 100644
index 00000000000..e9157d9f1e4
--- /dev/null
+++ b/lib/gitlab/cluster/mixins/puma_cluster.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Cluster
+ module Mixins
+ module PumaCluster
+ def self.prepended(base)
+ raise 'missing method Puma::Cluster#stop_workers' unless base.method_defined?(:stop_workers)
+ end
+
+ def stop_workers
+ Gitlab::Cluster::LifecycleEvents.do_before_phased_restart
+
+ super
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/cluster/mixins/unicorn_http_server.rb b/lib/gitlab/cluster/mixins/unicorn_http_server.rb
new file mode 100644
index 00000000000..765fd0c2baa
--- /dev/null
+++ b/lib/gitlab/cluster/mixins/unicorn_http_server.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Cluster
+ module Mixins
+ module UnicornHttpServer
+ def self.prepended(base)
+ raise 'missing method Unicorn::HttpServer#reexec' unless base.method_defined?(:reexec)
+ end
+
+ def reexec
+ Gitlab::Cluster::LifecycleEvents.do_before_phased_restart
+
+ super
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/cluster/puma_worker_killer_initializer.rb b/lib/gitlab/cluster/puma_worker_killer_initializer.rb
index 4affc52b7b0..a8440b63baa 100644
--- a/lib/gitlab/cluster/puma_worker_killer_initializer.rb
+++ b/lib/gitlab/cluster/puma_worker_killer_initializer.rb
@@ -3,7 +3,7 @@
module Gitlab
module Cluster
class PumaWorkerKillerInitializer
- def self.start(puma_options, puma_per_worker_max_memory_mb: 650)
+ def self.start(puma_options, puma_per_worker_max_memory_mb: 850, puma_master_max_memory_mb: 550)
require 'puma_worker_killer'
PumaWorkerKiller.config do |config|
@@ -12,10 +12,9 @@ module Gitlab
# not each worker as is the case with GITLAB_UNICORN_MEMORY_MAX
worker_count = puma_options[:workers] || 1
# The Puma Worker Killer checks the total RAM used by both the master
- # and worker processes. Bump the limits to N+1 instead of N workers
- # to account for this:
+ # and worker processes.
# https://github.com/schneems/puma_worker_killer/blob/v0.1.0/lib/puma_worker_killer/puma_memory.rb#L57
- config.ram = (worker_count + 1) * puma_per_worker_max_memory_mb
+ config.ram = puma_master_max_memory_mb + (worker_count * puma_per_worker_max_memory_mb)
config.frequency = 20 # seconds
@@ -23,10 +22,9 @@ module Gitlab
# of available RAM.
config.percent_usage = 0.98
- # Ideally we'll never hit the maximum amount of memory. If so the worker
- # is restarted already, thus periodically restarting workers shouldn't be
- # needed.
- config.rolling_restart_frequency = false
+ # Ideally we'll never hit the maximum amount of memory. Restart the workers
+ # regularly rather than rely on OOM behavior for periodic restarting.
+ config.rolling_restart_frequency = 43200 # 12 hours in seconds.
observer = Gitlab::Cluster::PumaWorkerKillerObserver.new
config.pre_term = observer.callback
diff --git a/lib/gitlab/config/entry/simplifiable.rb b/lib/gitlab/config/entry/simplifiable.rb
index a56a89adb35..d58aba07d15 100644
--- a/lib/gitlab/config/entry/simplifiable.rb
+++ b/lib/gitlab/config/entry/simplifiable.rb
@@ -37,7 +37,7 @@ module Gitlab
def self.entry_class(strategy)
if strategy.present?
- self.const_get(strategy.name)
+ self.const_get(strategy.name, false)
else
self::UnknownStrategy
end
diff --git a/lib/gitlab/cycle_analytics/base_query.rb b/lib/gitlab/cycle_analytics/base_query.rb
index 459bb5177b5..6aedbf64f26 100644
--- a/lib/gitlab/cycle_analytics/base_query.rb
+++ b/lib/gitlab/cycle_analytics/base_query.rb
@@ -23,6 +23,7 @@ module Gitlab
.project(routes_table[:path].as("namespace_path"))
query = limit_query(query, project_ids)
+ query = limit_query_by_date_range(query)
# Load merge_requests
@@ -34,7 +35,12 @@ module Gitlab
def limit_query(query, project_ids)
query.where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace'))
- .where(issue_table[:created_at].gteq(options[:from]))
+ end
+
+ def limit_query_by_date_range(query)
+ query = query.where(issue_table[:created_at].gteq(options[:from]))
+ query = query.where(issue_table[:created_at].lteq(options[:to])) if options[:to]
+ query
end
def load_merge_requests(query)
diff --git a/lib/gitlab/cycle_analytics/event_fetcher.rb b/lib/gitlab/cycle_analytics/event_fetcher.rb
index 98a30a8fc97..04f4b4f053f 100644
--- a/lib/gitlab/cycle_analytics/event_fetcher.rb
+++ b/lib/gitlab/cycle_analytics/event_fetcher.rb
@@ -4,7 +4,7 @@ module Gitlab
module CycleAnalytics
module EventFetcher
def self.[](stage_name)
- CycleAnalytics.const_get("#{stage_name.to_s.camelize}EventFetcher")
+ CycleAnalytics.const_get("#{stage_name.to_s.camelize}EventFetcher", false)
end
end
end
diff --git a/lib/gitlab/cycle_analytics/issue_helper.rb b/lib/gitlab/cycle_analytics/issue_helper.rb
index 295eca5edca..f6f85b84ed8 100644
--- a/lib/gitlab/cycle_analytics/issue_helper.rb
+++ b/lib/gitlab/cycle_analytics/issue_helper.rb
@@ -12,14 +12,12 @@ module Gitlab
.project(routes_table[:path].as("namespace_path"))
query = limit_query(query, project_ids)
-
- query
+ limit_query_by_date_range(query)
end
def limit_query(query, project_ids)
query.where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace'))
- .where(issue_table[:created_at].gteq(options[:from]))
.where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
end
end
diff --git a/lib/gitlab/cycle_analytics/plan_helper.rb b/lib/gitlab/cycle_analytics/plan_helper.rb
index a63ae58ad21..af4bf6ed3eb 100644
--- a/lib/gitlab/cycle_analytics/plan_helper.rb
+++ b/lib/gitlab/cycle_analytics/plan_helper.rb
@@ -14,12 +14,11 @@ module Gitlab
.where(routes_table[:source_type].eq('Namespace'))
query = limit_query(query)
- query
+ limit_query_by_date_range(query)
end
def limit_query(query)
- query.where(issue_table[:created_at].gteq(options[:from]))
- .where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
+ query.where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
.where(issue_metrics_table[:first_mentioned_in_commit_at].not_eq(nil))
end
end
diff --git a/lib/gitlab/cycle_analytics/stage.rb b/lib/gitlab/cycle_analytics/stage.rb
index 1bd40a7aa18..5cfd9ea4730 100644
--- a/lib/gitlab/cycle_analytics/stage.rb
+++ b/lib/gitlab/cycle_analytics/stage.rb
@@ -4,7 +4,7 @@ module Gitlab
module CycleAnalytics
module Stage
def self.[](stage_name)
- CycleAnalytics.const_get("#{stage_name.to_s.camelize}Stage")
+ CycleAnalytics.const_get("#{stage_name.to_s.camelize}Stage", false)
end
end
end
diff --git a/lib/gitlab/cycle_analytics/stage_summary.rb b/lib/gitlab/cycle_analytics/stage_summary.rb
index 5198dd5b4eb..ea440c441b7 100644
--- a/lib/gitlab/cycle_analytics/stage_summary.rb
+++ b/lib/gitlab/cycle_analytics/stage_summary.rb
@@ -3,16 +3,17 @@
module Gitlab
module CycleAnalytics
class StageSummary
- def initialize(project, from:, current_user:)
+ def initialize(project, from:, to: nil, current_user:)
@project = project
@from = from
+ @to = to
@current_user = current_user
end
def data
- [serialize(Summary::Issue.new(project: @project, from: @from, current_user: @current_user)),
- serialize(Summary::Commit.new(project: @project, from: @from)),
- serialize(Summary::Deploy.new(project: @project, from: @from))]
+ [serialize(Summary::Issue.new(project: @project, from: @from, to: @to, current_user: @current_user)),
+ serialize(Summary::Commit.new(project: @project, from: @from, to: @to)),
+ serialize(Summary::Deploy.new(project: @project, from: @from, to: @to))]
end
private
diff --git a/lib/gitlab/cycle_analytics/summary/base.rb b/lib/gitlab/cycle_analytics/summary/base.rb
index 709221c648e..a825d48fb77 100644
--- a/lib/gitlab/cycle_analytics/summary/base.rb
+++ b/lib/gitlab/cycle_analytics/summary/base.rb
@@ -4,9 +4,10 @@ module Gitlab
module CycleAnalytics
module Summary
class Base
- def initialize(project:, from:)
+ def initialize(project:, from:, to: nil)
@project = project
@from = from
+ @to = to
end
def title
diff --git a/lib/gitlab/cycle_analytics/summary/commit.rb b/lib/gitlab/cycle_analytics/summary/commit.rb
index f0019b26fa2..76049c6b742 100644
--- a/lib/gitlab/cycle_analytics/summary/commit.rb
+++ b/lib/gitlab/cycle_analytics/summary/commit.rb
@@ -21,7 +21,7 @@ module Gitlab
def count_commits
return unless ref
- gitaly_commit_client.commit_count(ref, after: @from)
+ gitaly_commit_client.commit_count(ref, after: @from, before: @to)
end
def gitaly_commit_client
diff --git a/lib/gitlab/cycle_analytics/summary/deploy.rb b/lib/gitlab/cycle_analytics/summary/deploy.rb
index 3b56dc2a7bc..5ff8d881143 100644
--- a/lib/gitlab/cycle_analytics/summary/deploy.rb
+++ b/lib/gitlab/cycle_analytics/summary/deploy.rb
@@ -4,12 +4,18 @@ module Gitlab
module CycleAnalytics
module Summary
class Deploy < Base
+ include Gitlab::Utils::StrongMemoize
+
def title
n_('Deploy', 'Deploys', value)
end
def value
- @value ||= @project.deployments.where("created_at > ?", @from).count
+ strong_memoize(:value) do
+ query = @project.deployments.success.where("created_at >= ?", @from)
+ query = query.where("created_at <= ?", @to) if @to
+ query.count
+ end
end
end
end
diff --git a/lib/gitlab/cycle_analytics/summary/issue.rb b/lib/gitlab/cycle_analytics/summary/issue.rb
index 51695c86192..52892eb5a1a 100644
--- a/lib/gitlab/cycle_analytics/summary/issue.rb
+++ b/lib/gitlab/cycle_analytics/summary/issue.rb
@@ -4,9 +4,10 @@ module Gitlab
module CycleAnalytics
module Summary
class Issue < Base
- def initialize(project:, from:, current_user:)
+ def initialize(project:, from:, to: nil, current_user:)
@project = project
@from = from
+ @to = to
@current_user = current_user
end
@@ -15,7 +16,7 @@ module Gitlab
end
def value
- @value ||= IssuesFinder.new(@current_user, project_id: @project.id).execute.created_after(@from).count
+ @value ||= IssuesFinder.new(@current_user, project_id: @project.id, created_after: @from, created_before: @to).execute.count
end
end
end
diff --git a/lib/gitlab/daemon.rb b/lib/gitlab/daemon.rb
index 43c159fee27..8a253893892 100644
--- a/lib/gitlab/daemon.rb
+++ b/lib/gitlab/daemon.rb
@@ -34,7 +34,9 @@ module Gitlab
@mutex.synchronize do
break thread if thread?
- @thread = Thread.new { start_working }
+ if start_working
+ @thread = Thread.new { run_thread }
+ end
end
end
@@ -57,10 +59,18 @@ module Gitlab
private
+ # Executed in lock context before starting thread
+ # Needs to return success
def start_working
+ true
+ end
+
+ # Executed in separate thread
+ def run_thread
raise NotImplementedError
end
+ # Executed in lock context
def stop_working
# no-ops
end
diff --git a/lib/gitlab/danger/helper.rb b/lib/gitlab/danger/helper.rb
index e2911b4e6c8..f22fc41a6d8 100644
--- a/lib/gitlab/danger/helper.rb
+++ b/lib/gitlab/danger/helper.rb
@@ -35,7 +35,8 @@ module Gitlab
end
def ee?
- ENV['CI_PROJECT_NAME'] == 'gitlab-ee' || File.exist?('../../CHANGELOG-EE.md')
+ # Support former project name for `dev` and support local Danger run
+ %w[gitlab gitlab-ee].include?(ENV['CI_PROJECT_NAME']) || Dir.exist?('../../ee')
end
def gitlab_helper
@@ -52,7 +53,7 @@ module Gitlab
end
def project_name
- ee? ? 'gitlab-ee' : 'gitlab-ce'
+ ee? ? 'gitlab' : 'gitlab-foss'
end
def markdown_list(items)
@@ -89,7 +90,7 @@ module Gitlab
end
CATEGORY_LABELS = {
- docs: "~Documentation", # Docs are reviewed along DevOps stages, so don't need roulette for now.
+ docs: "~documentation", # Docs are reviewed along DevOps stages, so don't need roulette for now.
none: "",
qa: "~QA",
test: "~test for `spec/features/*`",
diff --git a/lib/gitlab/danger/request_helper.rb b/lib/gitlab/danger/request_helper.rb
new file mode 100644
index 00000000000..06da4ed9ad3
--- /dev/null
+++ b/lib/gitlab/danger/request_helper.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+require 'net/http'
+require 'json'
+
+module Gitlab
+ module Danger
+ module RequestHelper
+ HTTPError = Class.new(RuntimeError)
+
+ # @param [String] url
+ def self.http_get_json(url)
+ rsp = Net::HTTP.get_response(URI.parse(url))
+
+ unless rsp.is_a?(Net::HTTPOK)
+ raise HTTPError, "Failed to read #{url}: #{rsp.code} #{rsp.message}"
+ end
+
+ JSON.parse(rsp.body)
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/danger/roulette.rb b/lib/gitlab/danger/roulette.rb
index 25de0a87c9d..dbf42912882 100644
--- a/lib/gitlab/danger/roulette.rb
+++ b/lib/gitlab/danger/roulette.rb
@@ -1,16 +1,11 @@
# frozen_string_literal: true
-require 'net/http'
-require 'json'
-require 'cgi'
-
require_relative 'teammate'
module Gitlab
module Danger
module Roulette
ROULETTE_DATA_URL = 'https://about.gitlab.com/roulette.json'
- HTTPError = Class.new(RuntimeError)
# Looks up the current list of GitLab team members and parses it into a
# useful form
@@ -19,7 +14,7 @@ module Gitlab
def team
@team ||=
begin
- data = http_get_json(ROULETTE_DATA_URL)
+ data = Gitlab::Danger::RequestHelper.http_get_json(ROULETTE_DATA_URL)
data.map { |hash| ::Gitlab::Danger::Teammate.new(hash) }
rescue JSON::ParserError
raise "Failed to parse JSON response from #{ROULETTE_DATA_URL}"
@@ -44,6 +39,7 @@ module Gitlab
# Known issue: If someone is rejected due to OOO, and then becomes not OOO, the
# selection will change on next spin
+ # @param [Array<Teammate>] people
def spin_for_person(people, random:)
people.shuffle(random: random)
.find(&method(:valid_person?))
@@ -51,32 +47,17 @@ module Gitlab
private
+ # @param [Teammate] person
+ # @return [Boolean]
def valid_person?(person)
- !mr_author?(person) && !out_of_office?(person)
+ !mr_author?(person) && person.available?
end
+ # @param [Teammate] person
+ # @return [Boolean]
def mr_author?(person)
person.username == gitlab.mr_author
end
-
- def out_of_office?(person)
- username = CGI.escape(person.username)
- api_endpoint = "https://gitlab.com/api/v4/users/#{username}/status"
- response = http_get_json(api_endpoint)
- response["message"]&.match?(/OOO/i)
- rescue HTTPError, JSON::ParserError
- false # this is no worse than not checking for OOO
- end
-
- def http_get_json(url)
- rsp = Net::HTTP.get_response(URI.parse(url))
-
- unless rsp.is_a?(Net::HTTPSuccess)
- raise HTTPError, "Failed to read #{url}: #{rsp.code} #{rsp.message}"
- end
-
- JSON.parse(rsp.body)
- end
end
end
end
diff --git a/lib/gitlab/danger/teammate.rb b/lib/gitlab/danger/teammate.rb
index 4ad66f61c2b..5c2324836d7 100644
--- a/lib/gitlab/danger/teammate.rb
+++ b/lib/gitlab/danger/teammate.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require 'cgi'
+
module Gitlab
module Danger
class Teammate
@@ -34,8 +36,30 @@ module Gitlab
has_capability?(project, category, :maintainer, labels)
end
+ def status
+ api_endpoint = "https://gitlab.com/api/v4/users/#{CGI.escape(username)}/status"
+ @status ||= Gitlab::Danger::RequestHelper.http_get_json(api_endpoint)
+ rescue Gitlab::Danger::RequestHelper::HTTPError, JSON::ParserError
+ nil # better no status than a crashing Danger
+ end
+
+ # @return [Boolean]
+ def available?
+ !out_of_office? && has_capacity?
+ end
+
private
+ # @return [Boolean]
+ def out_of_office?
+ status&.dig("message")&.match?(/OOO/i) || false
+ end
+
+ # @return [Boolean]
+ def has_capacity?
+ status&.dig("emoji") != 'red_circle'
+ end
+
def has_capability?(project, category, kind, labels)
case category
when :test
diff --git a/lib/gitlab/data_builder/push.rb b/lib/gitlab/data_builder/push.rb
index 3460e07fdc5..a83b03f540c 100644
--- a/lib/gitlab/data_builder/push.rb
+++ b/lib/gitlab/data_builder/push.rb
@@ -107,6 +107,14 @@ module Gitlab
}
end
+ def build_bulk(action:, ref_type:, changes:)
+ {
+ action: action,
+ ref_count: changes.count,
+ ref_type: ref_type
+ }
+ end
+
# This method provides a sample data generated with
# existing project and commits to test webhooks
def build_sample(project, user)
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index bea9eb8cb31..50e23681de0 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -87,10 +87,6 @@ module Gitlab
version.to_f < 10
end
- def self.join_lateral_supported?
- version.to_f >= 9.3
- end
-
def self.replication_slots_supported?
version.to_f >= 9.4
end
diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb
index 5a42952796c..ae29546cdac 100644
--- a/lib/gitlab/database/migration_helpers.rb
+++ b/lib/gitlab/database/migration_helpers.rb
@@ -1018,7 +1018,7 @@ into similar problems in the future (e.g. when new tables are created).
end
model_class.each_batch(of: batch_size) do |relation, index|
- start_id, end_id = relation.pluck('MIN(id), MAX(id)').first
+ start_id, end_id = relation.pluck(Arel.sql('MIN(id), MAX(id)')).first
# `BackgroundMigrationWorker.bulk_perform_in` schedules all jobs for
# the same time, which is not helpful in most cases where we wish to
diff --git a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb b/lib/gitlab/database_importers/self_monitoring/project/create_service.rb
index 5422a8631a0..dfef158cc1d 100644
--- a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb
+++ b/lib/gitlab/database_importers/self_monitoring/project/create_service.rb
@@ -33,7 +33,7 @@ module Gitlab
if result[:status] == :success
result
- elsif STEPS_ALLOWED_TO_FAIL.include?(result[:failed_step])
+ elsif STEPS_ALLOWED_TO_FAIL.include?(result[:last_step])
success
else
raise StandardError, result[:message]
@@ -42,121 +42,124 @@ module Gitlab
private
- def validate_application_settings
+ def validate_application_settings(_result)
return success if application_settings
log_error('No application_settings found')
error(_('No application_settings found'))
end
- def validate_project_created
- return success unless project_created?
+ def validate_project_created(result)
+ return success(result) unless project_created?
log_error('Project already created')
error(_('Project already created'))
end
- def validate_admins
+ def validate_admins(result)
unless instance_admins.any?
log_error('No active admin user found')
return error(_('No active admin user found'))
end
- success
+ success(result)
end
- def create_group
+ def create_group(result)
if project_created?
log_info(_('Instance administrators group already exists'))
- @group = application_settings.instance_administration_project.owner
- return success(group: @group)
+ result[:group] = application_settings.instance_administration_project.owner
+ return success(result)
end
- @group = ::Groups::CreateService.new(group_owner, create_group_params).execute
+ result[:group] = ::Groups::CreateService.new(group_owner, create_group_params).execute
- if @group.persisted?
- success(group: @group)
+ if result[:group].persisted?
+ success(result)
else
error(_('Could not create group'))
end
end
- def create_project
+ def create_project(result)
if project_created?
log_info('Instance administration project already exists')
- @project = application_settings.instance_administration_project
- return success(project: project)
+ result[:project] = application_settings.instance_administration_project
+ return success(result)
end
- @project = ::Projects::CreateService.new(group_owner, create_project_params).execute
+ result[:project] = ::Projects::CreateService.new(group_owner, create_project_params(result[:group])).execute
- if project.persisted?
- success(project: project)
+ if result[:project].persisted?
+ success(result)
else
- log_error("Could not create instance administration project. Errors: %{errors}" % { errors: project.errors.full_messages })
+ log_error("Could not create instance administration project. Errors: %{errors}" % { errors: result[:project].errors.full_messages })
error(_('Could not create project'))
end
end
- def save_project_id
+ def save_project_id(result)
return success if project_created?
- result = application_settings.update(instance_administration_project_id: @project.id)
+ response = application_settings.update(
+ instance_administration_project_id: result[:project].id
+ )
- if result
- success
+ if response
+ success(result)
else
log_error("Could not save instance administration project ID, errors: %{errors}" % { errors: application_settings.errors.full_messages })
error(_('Could not save project ID'))
end
end
- def add_group_members
- members = @group.add_users(members_to_add, Gitlab::Access::MAINTAINER)
+ def add_group_members(result)
+ group = result[:group]
+ members = group.add_users(members_to_add(group), Gitlab::Access::MAINTAINER)
errors = members.flat_map { |member| member.errors.full_messages }
if errors.any?
log_error('Could not add admins as members to self-monitoring project. Errors: %{errors}' % { errors: errors })
error(_('Could not add admins as members'))
else
- success
+ success(result)
end
end
- def add_to_whitelist
- return success unless prometheus_enabled?
- return success unless prometheus_listen_address.present?
+ def add_to_whitelist(result)
+ return success(result) unless prometheus_enabled?
+ return success(result) unless prometheus_listen_address.present?
uri = parse_url(internal_prometheus_listen_address_uri)
return error(_('Prometheus listen_address in config/gitlab.yml is not a valid URI')) unless uri
application_settings.add_to_outbound_local_requests_whitelist([uri.normalized_host])
- result = application_settings.save
+ response = application_settings.save
- if result
+ if response
# Expire the Gitlab::CurrentSettings cache after updating the whitelist.
# This happens automatically in an after_commit hook, but in migrations,
# the after_commit hook only runs at the end of the migration.
Gitlab::CurrentSettings.expire_current_application_settings
- success
+ success(result)
else
log_error("Could not add prometheus URL to whitelist, errors: %{errors}" % { errors: application_settings.errors.full_messages })
error(_('Could not add prometheus URL to whitelist'))
end
end
- def add_prometheus_manual_configuration
- return success unless prometheus_enabled?
- return success unless prometheus_listen_address.present?
+ def add_prometheus_manual_configuration(result)
+ return success(result) unless prometheus_enabled?
+ return success(result) unless prometheus_listen_address.present?
- service = project.find_or_initialize_service('prometheus')
+ service = result[:project].find_or_initialize_service('prometheus')
unless service.update(prometheus_service_attributes)
log_error('Could not save prometheus manual configuration for self-monitoring project. Errors: %{errors}' % { errors: service.errors.full_messages })
return error(_('Could not save prometheus manual configuration'))
end
- success
+ success(result)
end
def application_settings
@@ -196,11 +199,11 @@ module Gitlab
instance_admins.first
end
- def members_to_add
+ def members_to_add(group)
# Exclude admins who are already members of group because
- # `@group.add_users(users)` returns an error if the users parameter contains
+ # `group.add_users(users)` returns an error if the users parameter contains
# users who are already members of the group.
- instance_admins - @group.members.collect(&:user)
+ instance_admins - group.members.collect(&:user)
end
def create_group_params
@@ -217,13 +220,13 @@ module Gitlab
)
end
- def create_project_params
+ def create_project_params(group)
{
initialize_with_readme: true,
visibility_level: VISIBILITY_LEVEL,
name: PROJECT_NAME,
description: "This project is automatically generated and will be used to help monitor this GitLab instance. [More information](#{docs_path})",
- namespace_id: @group.id
+ namespace_id: group.id
}
end
diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb
index c46087e65de..30fe7440148 100644
--- a/lib/gitlab/diff/file.rb
+++ b/lib/gitlab/diff/file.rb
@@ -428,8 +428,8 @@ module Gitlab
def viewer_class_from(classes)
return unless diffable?
- return if different_type? || external_storage_error?
return unless new_file? || deleted_file? || content_changed?
+ return if different_type? || external_storage_error?
verify_binary = !stored_externally?
diff --git a/lib/gitlab/diff/file_collection/merge_request_diff.rb b/lib/gitlab/diff/file_collection/merge_request_diff.rb
index e29bf75f341..c4288ca6408 100644
--- a/lib/gitlab/diff/file_collection/merge_request_diff.rb
+++ b/lib/gitlab/diff/file_collection/merge_request_diff.rb
@@ -3,19 +3,7 @@
module Gitlab
module Diff
module FileCollection
- class MergeRequestDiff < Base
- extend ::Gitlab::Utils::Override
-
- def initialize(merge_request_diff, diff_options:)
- @merge_request_diff = merge_request_diff
-
- super(merge_request_diff,
- project: merge_request_diff.project,
- diff_options: diff_options,
- diff_refs: merge_request_diff.diff_refs,
- fallback_diff_refs: merge_request_diff.fallback_diff_refs)
- end
-
+ class MergeRequestDiff < MergeRequestDiffBase
def diff_files
diff_files = super
diff --git a/lib/gitlab/diff/file_collection/merge_request_diff_base.rb b/lib/gitlab/diff/file_collection/merge_request_diff_base.rb
new file mode 100644
index 00000000000..a747a6ed475
--- /dev/null
+++ b/lib/gitlab/diff/file_collection/merge_request_diff_base.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Diff
+ module FileCollection
+ class MergeRequestDiffBase < Base
+ extend ::Gitlab::Utils::Override
+
+ def initialize(merge_request_diff, diff_options:)
+ @merge_request_diff = merge_request_diff
+
+ super(merge_request_diff,
+ project: merge_request_diff.project,
+ diff_options: diff_options,
+ diff_refs: merge_request_diff.diff_refs,
+ fallback_diff_refs: merge_request_diff.fallback_diff_refs)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/diff/file_collection/merge_request_diff_batch.rb b/lib/gitlab/diff/file_collection/merge_request_diff_batch.rb
new file mode 100644
index 00000000000..663326e01d5
--- /dev/null
+++ b/lib/gitlab/diff/file_collection/merge_request_diff_batch.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Diff
+ module FileCollection
+ # Builds a paginated diff file collection and collects pagination
+ # metadata.
+ #
+ # It doesn't handle caching yet as we're not prepared to write/read
+ # separate file keys (https://gitlab.com/gitlab-org/gitlab/issues/30550).
+ #
+ class MergeRequestDiffBatch < MergeRequestDiffBase
+ DEFAULT_BATCH_PAGE = 1
+ DEFAULT_BATCH_SIZE = 20
+
+ attr_reader :pagination_data
+
+ def initialize(merge_request_diff, batch_page, batch_size, diff_options:)
+ super(merge_request_diff, diff_options: diff_options)
+
+ batch_page ||= DEFAULT_BATCH_PAGE
+ batch_size ||= DEFAULT_BATCH_SIZE
+
+ @paginated_collection = relation.page(batch_page).per(batch_size)
+ @pagination_data = {
+ current_page: @paginated_collection.current_page,
+ next_page: @paginated_collection.next_page,
+ total_pages: @paginated_collection.total_pages
+ }
+ end
+
+ def diff_file_paths
+ diff_files.map(&:file_path)
+ end
+
+ override :diffs
+ def diffs
+ strong_memoize(:diffs) do
+ @merge_request_diff.opening_external_diff do
+ # Avoiding any extra queries.
+ collection = @paginated_collection.to_a
+
+ # The offset collection and calculation is required so that we
+ # know how much has been loaded in previous batches, collapsing
+ # the current paginated set accordingly (collection limit calculation).
+ # See: https://docs.gitlab.com/ee/development/diffs.html#diff-collection-limits
+ #
+ offset_index = collection.first&.index
+ options = diff_options.dup
+
+ collection =
+ if offset_index && offset_index > 0
+ offset_collection = relation.limit(offset_index) # rubocop:disable CodeReuse/ActiveRecord
+ options[:offset_index] = offset_index
+ offset_collection + collection
+ else
+ collection
+ end
+
+ Gitlab::Git::DiffCollection.new(collection.map(&:to_hash), options)
+ end
+ end
+ end
+
+ private
+
+ def relation
+ @merge_request_diff.merge_request_diff_files
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/diff/lines_unfolder.rb b/lib/gitlab/diff/lines_unfolder.rb
index 0bd18fe9622..6def3a074a3 100644
--- a/lib/gitlab/diff/lines_unfolder.rb
+++ b/lib/gitlab/diff/lines_unfolder.rb
@@ -54,7 +54,7 @@ module Gitlab
def unfold_required?
strong_memoize(:unfold_required) do
next false unless @diff_file.text?
- next false unless @position.on_text? && @position.unchanged?
+ next false unless @position.unfoldable?
next false if @diff_file.new_file? || @diff_file.deleted_file?
next false unless @position.old_line
# Invalid position (MR import scenario)
diff --git a/lib/gitlab/diff/position.rb b/lib/gitlab/diff/position.rb
index dfa80eb4a64..8b99fd5cd42 100644
--- a/lib/gitlab/diff/position.rb
+++ b/lib/gitlab/diff/position.rb
@@ -79,6 +79,10 @@ module Gitlab
formatter.line_age
end
+ def unfoldable?
+ on_text? && unchanged?
+ end
+
def unchanged?
type.nil?
end
@@ -118,8 +122,14 @@ module Gitlab
path: file_path
}
+ # Takes action when creating diff notes (multiple calls are
+ # submitted to this method).
Gitlab::SafeRequestStore.fetch(key) { find_diff_file(repository) }
end
+
+ # We need to unfold diff lines according to the position in order
+ # to correctly calculate the line code and trace position changes.
+ @diff_file&.tap { |file| file.unfold_diff_lines(self) }
end
def diff_options
@@ -152,13 +162,7 @@ module Gitlab
return unless diff_refs.complete?
return unless comparison = diff_refs.compare_in(repository.project)
- file = comparison.diffs(diff_options).diff_files.first
-
- # We need to unfold diff lines according to the position in order
- # to correctly calculate the line code and trace position changes.
- file&.unfold_diff_lines(self)
-
- file
+ comparison.diffs(diff_options).diff_files.first
end
def get_formatter_class(type)
diff --git a/lib/gitlab/diff/position_collection.rb b/lib/gitlab/diff/position_collection.rb
new file mode 100644
index 00000000000..2112d347678
--- /dev/null
+++ b/lib/gitlab/diff/position_collection.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Diff
+ class PositionCollection
+ include Enumerable
+
+ # collection - An array of Gitlab::Diff::Position
+ def initialize(collection, diff_head_sha = nil)
+ @collection = collection
+ @diff_head_sha = diff_head_sha
+ end
+
+ def each(&block)
+ filtered_positions.each(&block)
+ end
+
+ def concat(positions)
+ tap { @collection.concat(positions) }
+ end
+
+ # Doing a lightweight filter in-memory given we're not prepared for querying
+ # positions (https://gitlab.com/gitlab-org/gitlab/issues/33271).
+ def unfoldable
+ select do |position|
+ position.unfoldable? && valid_head_sha?(position)
+ end
+ end
+
+ private
+
+ def filtered_positions
+ @collection.select { |item| item.is_a?(Position) }
+ end
+
+ def valid_head_sha?(position)
+ return true unless @diff_head_sha
+
+ position.head_sha == @diff_head_sha
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/discussions_diff/file_collection.rb b/lib/gitlab/discussions_diff/file_collection.rb
index 6692dd76438..7a9d4c5c0c2 100644
--- a/lib/gitlab/discussions_diff/file_collection.rb
+++ b/lib/gitlab/discussions_diff/file_collection.rb
@@ -27,12 +27,14 @@ module Gitlab
# - The cache content is not updated (there's no need to do so)
def load_highlight
ids = highlightable_collection_ids
+ return if ids.empty?
+
cached_content = read_cache(ids)
uncached_ids = ids.select.each_with_index { |_, i| cached_content[i].nil? }
mapping = highlighted_lines_by_ids(uncached_ids)
- HighlightCache.write_multiple(mapping)
+ HighlightCache.write_multiple(mapping) if mapping.any?
diffs = diff_files_indexed_by_id.values_at(*ids)
diff --git a/lib/gitlab/downtime_check.rb b/lib/gitlab/downtime_check.rb
index 31bb6810391..457a3c12206 100644
--- a/lib/gitlab/downtime_check.rb
+++ b/lib/gitlab/downtime_check.rb
@@ -58,13 +58,13 @@ module Gitlab
# Returns true if the given migration can be performed without downtime.
def online?(migration)
- migration.const_get(DOWNTIME_CONST) == false
+ migration.const_get(DOWNTIME_CONST, false) == false
end
# Returns the downtime reason, or nil if none was defined.
def downtime_reason(migration)
if migration.const_defined?(DOWNTIME_REASON_CONST)
- migration.const_get(DOWNTIME_REASON_CONST)
+ migration.const_get(DOWNTIME_REASON_CONST, false)
else
nil
end
diff --git a/lib/gitlab/email/receiver.rb b/lib/gitlab/email/receiver.rb
index 7da8b385266..847260b2e0f 100644
--- a/lib/gitlab/email/receiver.rb
+++ b/lib/gitlab/email/receiver.rb
@@ -32,7 +32,7 @@ module Gitlab
mail = build_mail
- ignore_auto_submitted!(mail)
+ ignore_auto_reply!(mail)
mail_key = extract_mail_key(mail)
handler = Handler.for(mail, mail_key)
@@ -96,14 +96,25 @@ module Gitlab
end
end
- def ignore_auto_submitted!(mail)
+ def ignore_auto_reply!(mail)
+ if auto_submitted?(mail) || auto_replied?(mail)
+ raise AutoGeneratedEmailError
+ end
+ end
+
+ def auto_submitted?(mail)
# Mail::Header#[] is case-insensitive
auto_submitted = mail.header['Auto-Submitted']&.value
# Mail::Field#value would strip leading and trailing whitespace
- raise AutoGeneratedEmailError if
- # See also https://tools.ietf.org/html/rfc3834
- auto_submitted && auto_submitted != 'no'
+ # See also https://tools.ietf.org/html/rfc3834
+ auto_submitted && auto_submitted != 'no'
+ end
+
+ def auto_replied?(mail)
+ autoreply = mail.header['X-Autoreply']&.value
+
+ autoreply && autoreply == 'yes'
end
end
end
diff --git a/lib/gitlab/experimentation.rb b/lib/gitlab/experimentation.rb
new file mode 100644
index 00000000000..895755376ee
--- /dev/null
+++ b/lib/gitlab/experimentation.rb
@@ -0,0 +1,93 @@
+# frozen_string_literal: true
+
+# == Experimentation
+#
+# Utility module used for A/B testing experimental features. Define your experiments in the `EXPERIMENTS` constant.
+# The feature_toggle and environment keys are optional. If the feature_toggle is not set, a feature with the name of
+# the experiment will be checked, with a default value of true. The enabled_ratio is required and should be
+# the ratio for the number of users for which this experiment is enabled. For example: a ratio of 0.1 will
+# enable the experiment for 10% of the users (determined by the `experimentation_subject_index`).
+#
+module Gitlab
+ module Experimentation
+ EXPERIMENTS = {
+ signup_flow: {
+ feature_toggle: :experimental_separate_sign_up_flow,
+ environment: ::Gitlab.dev_env_or_com?,
+ enabled_ratio: 0.1
+ }
+ }.freeze
+
+ # Controller concern that checks if an experimentation_subject_id cookie is present and sets it if absent.
+ # Used for A/B testing of experimental features. Exposes the `experiment_enabled?(experiment_name)` method
+ # to controllers and views.
+ #
+ module ControllerConcern
+ extend ActiveSupport::Concern
+
+ included do
+ before_action :set_experimentation_subject_id_cookie
+ helper_method :experiment_enabled?
+ end
+
+ def set_experimentation_subject_id_cookie
+ return if cookies[:experimentation_subject_id].present?
+
+ cookies.permanent.signed[:experimentation_subject_id] = {
+ value: SecureRandom.uuid,
+ domain: :all,
+ secure: ::Gitlab.config.gitlab.https
+ }
+ end
+
+ def experiment_enabled?(experiment_key)
+ Experimentation.enabled?(experiment_key, experimentation_subject_index)
+ end
+
+ private
+
+ def experimentation_subject_index
+ experimentation_subject_id = cookies.signed[:experimentation_subject_id]
+ return if experimentation_subject_id.blank?
+
+ experimentation_subject_id.delete('-').hex % 100
+ end
+ end
+
+ class << self
+ def experiment(key)
+ Experiment.new(EXPERIMENTS[key].merge(key: key))
+ end
+
+ def enabled?(experiment_key, experimentation_subject_index)
+ return false unless EXPERIMENTS.key?(experiment_key)
+
+ experiment = experiment(experiment_key)
+
+ experiment.feature_toggle_enabled? &&
+ experiment.enabled_for_environment? &&
+ experiment.enabled_for_experimentation_subject?(experimentation_subject_index)
+ end
+ end
+
+ Experiment = Struct.new(:key, :feature_toggle, :environment, :enabled_ratio, keyword_init: true) do
+ def feature_toggle_enabled?
+ return Feature.enabled?(key, default_enabled: true) if feature_toggle.nil?
+
+ Feature.enabled?(feature_toggle)
+ end
+
+ def enabled_for_environment?
+ return true if environment.nil?
+
+ environment
+ end
+
+ def enabled_for_experimentation_subject?(experimentation_subject_index)
+ return false if enabled_ratio.nil? || experimentation_subject_index.blank?
+
+ experimentation_subject_index <= enabled_ratio * 100
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/file_markdown_link_builder.rb b/lib/gitlab/file_markdown_link_builder.rb
index 180140e7da2..09d799b859d 100644
--- a/lib/gitlab/file_markdown_link_builder.rb
+++ b/lib/gitlab/file_markdown_link_builder.rb
@@ -10,14 +10,14 @@ module Gitlab
return unless name = markdown_name
markdown = "[#{name.gsub(']', '\\]')}](#{secure_url})"
- markdown = "!#{markdown}" if image_or_video? || dangerous?
+ markdown = "!#{markdown}" if embeddable? || dangerous_embeddable?
markdown
end
def markdown_name
return unless filename.present?
- image_or_video? ? File.basename(filename, File.extname(filename)) : filename
+ embeddable? ? File.basename(filename, File.extname(filename)) : filename
end
end
end
diff --git a/lib/gitlab/file_type_detection.rb b/lib/gitlab/file_type_detection.rb
index 25ee07cf940..ca78d49f99b 100644
--- a/lib/gitlab/file_type_detection.rb
+++ b/lib/gitlab/file_type_detection.rb
@@ -1,34 +1,69 @@
# frozen_string_literal: true
-# File helpers methods.
-# It needs the method filename to be defined.
+# The method `filename` must be defined in classes that use this module.
+#
+# This module is intended to be used as a helper and not a security gate
+# to validate that a file is safe, as it identifies files only by the
+# file extension and not its actual contents.
+#
+# An example useage of this module is in `FileMarkdownLinkBuilder` that
+# renders markdown depending on a file name.
+#
+# We use Workhorse to detect the real extension when we serve files with
+# the `SendsBlob` helper methods, and ask Workhorse to set the content
+# type when it serves the file:
+# https://gitlab.com/gitlab-org/gitlab/blob/33e5955/app/helpers/workhorse_helper.rb#L48.
+#
+# Because Workhorse has access to the content when it is downloaded, if
+# the type/extension doesn't match the real type, we adjust the
+# `Content-Type` and `Content-Disposition` to the one we get from the detection.
module Gitlab
module FileTypeDetection
- IMAGE_EXT = %w[png jpg jpeg gif bmp tiff ico].freeze
+ SAFE_IMAGE_EXT = %w[png jpg jpeg gif bmp tiff ico].freeze
# We recommend using the .mp4 format over .mov. Videos in .mov format can
# still be used but you really need to make sure they are served with the
# proper MIME type video/mp4 and not video/quicktime or your videos won't play
# on IE >= 9.
# http://archive.sublimevideo.info/20150912/docs.sublimevideo.net/troubleshooting.html
- VIDEO_EXT = %w[mp4 m4v mov webm ogv].freeze
+ SAFE_VIDEO_EXT = %w[mp4 m4v mov webm ogv].freeze
+ SAFE_AUDIO_EXT = %w[mp3 oga ogg spx wav].freeze
+
# These extension types can contain dangerous code and should only be embedded inline with
# proper filtering. They should always be tagged as "Content-Disposition: attachment", not "inline".
- DANGEROUS_EXT = %w[svg].freeze
+ DANGEROUS_IMAGE_EXT = %w[svg].freeze
+ DANGEROUS_VIDEO_EXT = [].freeze # None, yet
+ DANGEROUS_AUDIO_EXT = [].freeze # None, yet
def image?
- extension_match?(IMAGE_EXT)
+ extension_match?(SAFE_IMAGE_EXT)
end
def video?
- extension_match?(VIDEO_EXT)
+ extension_match?(SAFE_VIDEO_EXT)
+ end
+
+ def audio?
+ extension_match?(SAFE_AUDIO_EXT)
+ end
+
+ def embeddable?
+ image? || video? || audio?
+ end
+
+ def dangerous_image?
+ extension_match?(DANGEROUS_IMAGE_EXT)
+ end
+
+ def dangerous_video?
+ extension_match?(DANGEROUS_VIDEO_EXT)
end
- def image_or_video?
- image? || video?
+ def dangerous_audio?
+ extension_match?(DANGEROUS_AUDIO_EXT)
end
- def dangerous?
- extension_match?(DANGEROUS_EXT)
+ def dangerous_embeddable?
+ dangerous_image? || dangerous_video? || dangerous_audio?
end
private
diff --git a/lib/gitlab/git/changes.rb b/lib/gitlab/git/changes.rb
new file mode 100644
index 00000000000..4e888eec44f
--- /dev/null
+++ b/lib/gitlab/git/changes.rb
@@ -0,0 +1,74 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Git
+ class Changes
+ include Enumerable
+
+ attr_reader :repository_data
+
+ def initialize
+ @refs = Set.new
+ @items = []
+ @branches_index = []
+ @tags_index = []
+ @repository_data = []
+ end
+
+ def includes_branches?
+ branches_index.any?
+ end
+
+ def includes_tags?
+ tags_index.any?
+ end
+
+ def add_branch_change(change)
+ @branches_index << add_change(change)
+ self
+ end
+
+ def add_tag_change(change)
+ @tags_index << add_change(change)
+ self
+ end
+
+ def each
+ items.each do |item|
+ yield item
+ end
+ end
+
+ def refs
+ @refs.to_a
+ end
+
+ def branch_changes
+ items.values_at(*branches_index)
+ end
+
+ def tag_changes
+ items.values_at(*tags_index)
+ end
+
+ private
+
+ attr_reader :items, :branches_index, :tags_index
+
+ def add_change(change)
+ # refs and repository_data are being cached when a change is added to
+ # the collection to remove the need to iterate through changes multiple
+ # times.
+ @refs << change[:ref]
+ @repository_data << build_change_repository_data(change)
+ @items << change
+
+ @items.size - 1
+ end
+
+ def build_change_repository_data(change)
+ DataBuilder::Repository.single_change(change[:oldrev], change[:newrev], change[:ref])
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/git/diff_collection.rb b/lib/gitlab/git/diff_collection.rb
index cb9154cb1e8..b79e30bff78 100644
--- a/lib/gitlab/git/diff_collection.rb
+++ b/lib/gitlab/git/diff_collection.rb
@@ -31,6 +31,7 @@ module Gitlab
@limits = self.class.limits(options)
@enforce_limits = !!options.fetch(:limits, true)
@expanded = !!options.fetch(:expanded, true)
+ @offset_index = options.fetch(:offset_index, 0)
@line_count = 0
@byte_count = 0
@@ -128,7 +129,7 @@ module Gitlab
def each_serialized_patch
i = @array.length
- @iterator.each do |raw|
+ @iterator.each_with_index do |raw, iterator_index|
@empty = false
if @enforce_limits && i >= max_files
@@ -154,8 +155,12 @@ module Gitlab
break
end
- yield @array[i] = diff
- i += 1
+ # We should not yield / memoize diffs before the offset index. Though,
+ # we still consider the limit buffers for diffs before it.
+ if iterator_index >= @offset_index
+ yield @array[i] = diff
+ i += 1
+ end
end
end
end
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 4ea618f063b..b2c22898079 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -131,6 +131,18 @@ module Gitlab
end
end
+ def rename(new_relative_path)
+ wrapped_gitaly_errors do
+ gitaly_repository_client.rename(new_relative_path)
+ end
+ end
+
+ def remove
+ wrapped_gitaly_errors do
+ gitaly_repository_client.remove
+ end
+ end
+
def expire_has_local_branches_cache
clear_memoization(:has_local_branches)
end
diff --git a/lib/gitlab/git_post_receive.rb b/lib/gitlab/git_post_receive.rb
index 2a8bcd015a8..5264bae47a1 100644
--- a/lib/gitlab/git_post_receive.rb
+++ b/lib/gitlab/git_post_receive.rb
@@ -8,7 +8,7 @@ module Gitlab
def initialize(project, identifier, changes, push_options = {})
@project = project
@identifier = identifier
- @changes = deserialize_changes(changes)
+ @changes = parse_changes(changes)
@push_options = push_options
end
@@ -16,27 +16,12 @@ module Gitlab
super(identifier)
end
- def changes_refs
- return changes unless block_given?
-
- changes.each do |change|
- change.strip!
- oldrev, newrev, ref = change.split(' ')
-
- yield oldrev, newrev, ref
- end
- end
-
def includes_branches?
- enum_for(:changes_refs).any? do |_oldrev, _newrev, ref|
- Gitlab::Git.branch_ref?(ref)
- end
+ changes.includes_branches?
end
def includes_tags?
- enum_for(:changes_refs).any? do |_oldrev, _newrev, ref|
- Gitlab::Git.tag_ref?(ref)
- end
+ changes.includes_tags?
end
def includes_default_branch?
@@ -44,16 +29,28 @@ module Gitlab
# first branch pushed will be the default.
return true unless project.default_branch.present?
- enum_for(:changes_refs).any? do |_oldrev, _newrev, ref|
- Gitlab::Git.branch_ref?(ref) &&
- Gitlab::Git.branch_name(ref) == project.default_branch
+ changes.branch_changes.any? do |change|
+ Gitlab::Git.branch_name(change[:ref]) == project.default_branch
end
end
private
- def deserialize_changes(changes)
- utf8_encode_changes(changes).each_line
+ def parse_changes(changes)
+ deserialized_changes = utf8_encode_changes(changes).each_line
+
+ Git::Changes.new.tap do |collection|
+ deserialized_changes.each_with_index do |raw_change, index|
+ oldrev, newrev, ref = raw_change.strip.split(' ')
+ change = { index: index, oldrev: oldrev, newrev: newrev, ref: ref }
+
+ if Git.branch_ref?(ref)
+ collection.add_branch_change(change)
+ elsif Git.tag_ref?(ref)
+ collection.add_tag_change(change)
+ end
+ end
+ end
end
def utf8_encode_changes(changes)
diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb
index 2ac99b1ff02..b0f29d22ad4 100644
--- a/lib/gitlab/gitaly_client.rb
+++ b/lib/gitlab/gitaly_client.rb
@@ -86,7 +86,7 @@ module Gitlab
if name == :health_check
Grpc::Health::V1::Health::Stub
else
- Gitaly.const_get(name.to_s.camelcase.to_sym).const_get(:Stub)
+ Gitaly.const_get(name.to_s.camelcase.to_sym, false).const_get(:Stub, false)
end
end
@@ -142,13 +142,13 @@ module Gitlab
# kwargs.merge(deadline: Time.now + 10)
# end
#
- def self.call(storage, service, rpc, request, remote_storage: nil, timeout: nil)
+ def self.call(storage, service, rpc, request, remote_storage: nil, timeout: default_timeout)
start = Gitlab::Metrics::System.monotonic_time
request_hash = request.is_a?(Google::Protobuf::MessageExts) ? request.to_h : {}
enforce_gitaly_request_limits(:call)
- kwargs = request_kwargs(storage, timeout, remote_storage: remote_storage)
+ kwargs = request_kwargs(storage, timeout: timeout.to_f, remote_storage: remote_storage)
kwargs = yield(kwargs) if block_given?
stub(service, storage).__send__(rpc, request, kwargs) # rubocop:disable GitlabSecurity/PublicSend
@@ -200,7 +200,7 @@ module Gitlab
end
private_class_method :authorization_token
- def self.request_kwargs(storage, timeout, remote_storage: nil)
+ def self.request_kwargs(storage, timeout:, remote_storage: nil)
metadata = {
'authorization' => "Bearer #{authorization_token(storage)}",
'client_name' => CLIENT_NAME
@@ -216,14 +216,7 @@ module Gitlab
result = { metadata: metadata }
- # nil timeout indicates that we should use the default
- timeout = default_timeout if timeout.nil?
-
- return result unless timeout > 0
-
- deadline = real_time + timeout
- result[:deadline] = deadline
-
+ result[:deadline] = real_time + timeout if timeout > 0
result
end
@@ -357,8 +350,6 @@ module Gitlab
# The default timeout on all Gitaly calls
def self.default_timeout
- return no_timeout if Sidekiq.server?
-
timeout(:gitaly_timeout_default)
end
@@ -370,8 +361,12 @@ module Gitlab
timeout(:gitaly_timeout_medium)
end
- def self.no_timeout
- 0
+ def self.long_timeout
+ if Sidekiq.server?
+ 6.hours
+ else
+ default_timeout
+ end
end
def self.storage_metadata_file_path(storage)
diff --git a/lib/gitlab/gitaly_client/attributes_bag.rb b/lib/gitlab/gitaly_client/attributes_bag.rb
index 3f1a0ef4888..f935281ac2e 100644
--- a/lib/gitlab/gitaly_client/attributes_bag.rb
+++ b/lib/gitlab/gitaly_client/attributes_bag.rb
@@ -8,7 +8,7 @@ module Gitlab
extend ActiveSupport::Concern
included do
- attr_accessor(*const_get(:ATTRS))
+ attr_accessor(*const_get(:ATTRS, false))
end
def initialize(params)
@@ -26,7 +26,7 @@ module Gitlab
end
def attributes
- self.class.const_get(:ATTRS)
+ self.class.const_get(:ATTRS, false)
end
end
end
diff --git a/lib/gitlab/gitaly_client/blob_service.rb b/lib/gitlab/gitaly_client/blob_service.rb
index 8ccefb00d20..5cde06bb6aa 100644
--- a/lib/gitlab/gitaly_client/blob_service.rb
+++ b/lib/gitlab/gitaly_client/blob_service.rb
@@ -76,6 +76,30 @@ module Gitlab
GitalyClient::BlobsStitcher.new(response)
end
+ def get_blob_types(revision_paths, limit = -1)
+ return {} if revision_paths.empty?
+
+ request_revision_paths = revision_paths.map do |rev, path|
+ Gitaly::GetBlobsRequest::RevisionPath.new(revision: rev, path: encode_binary(path))
+ end
+
+ request = Gitaly::GetBlobsRequest.new(
+ repository: @gitaly_repo,
+ revision_paths: request_revision_paths,
+ limit: limit
+ )
+
+ response = GitalyClient.call(
+ @gitaly_repo.storage_name,
+ :blob_service,
+ :get_blobs,
+ request,
+ timeout: GitalyClient.fast_timeout
+ )
+
+ map_blob_types(response)
+ end
+
def get_new_lfs_pointers(revision, limit, not_in, dynamic_timeout = nil)
request = Gitaly::GetNewLFSPointersRequest.new(
repository: @gitaly_repo,
@@ -132,6 +156,16 @@ module Gitlab
end
end
end
+
+ def map_blob_types(response)
+ types = {}
+
+ response.each do |msg|
+ types[msg.path.dup.force_encoding('utf-8')] = msg.type.downcase
+ end
+
+ types
+ end
end
end
end
diff --git a/lib/gitlab/gitaly_client/cleanup_service.rb b/lib/gitlab/gitaly_client/cleanup_service.rb
index a56bc35f6d7..e2293d3121a 100644
--- a/lib/gitlab/gitaly_client/cleanup_service.rb
+++ b/lib/gitlab/gitaly_client/cleanup_service.rb
@@ -18,7 +18,7 @@ module Gitlab
:cleanup_service,
:apply_bfg_object_map_stream,
build_object_map_enum(io),
- timeout: GitalyClient.no_timeout
+ timeout: GitalyClient.long_timeout
)
responses.each(&blk)
diff --git a/lib/gitlab/gitaly_client/commit_service.rb b/lib/gitlab/gitaly_client/commit_service.rb
index a80ce462ab0..b0559729ff3 100644
--- a/lib/gitlab/gitaly_client/commit_service.rb
+++ b/lib/gitlab/gitaly_client/commit_service.rb
@@ -140,7 +140,8 @@ module Gitlab
request = Gitaly::CountCommitsRequest.new(
repository: @gitaly_repo,
revision: encode_binary(ref),
- all: !!options[:all]
+ all: !!options[:all],
+ first_parent: !!options[:first_parent]
)
request.after = Google::Protobuf::Timestamp.new(seconds: options[:after].to_i) if options[:after].present?
request.before = Google::Protobuf::Timestamp.new(seconds: options[:before].to_i) if options[:before].present?
@@ -254,7 +255,7 @@ module Gitlab
def languages(ref = nil)
request = Gitaly::CommitLanguagesRequest.new(repository: @gitaly_repo, revision: ref || '')
- response = GitalyClient.call(@repository.storage, :commit_service, :commit_languages, request)
+ response = GitalyClient.call(@repository.storage, :commit_service, :commit_languages, request, timeout: GitalyClient.long_timeout)
response.languages.map { |l| { value: l.share.round(2), label: l.name, color: l.color, highlight: l.color } }
end
@@ -297,18 +298,6 @@ module Gitlab
Gitlab::SafeRequestStore[key] = commit
end
- # rubocop: disable CodeReuse/ActiveRecord
- def patch(revision)
- request = Gitaly::CommitPatchRequest.new(
- repository: @gitaly_repo,
- revision: encode_binary(revision)
- )
- response = GitalyClient.call(@repository.storage, :diff_service, :commit_patch, request, timeout: GitalyClient.medium_timeout)
-
- response.sum(&:data)
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
def commit_stats(revision)
request = Gitaly::CommitStatsRequest.new(
repository: @gitaly_repo,
@@ -325,6 +314,7 @@ module Gitlab
follow: options[:follow],
skip_merges: options[:skip_merges],
all: !!options[:all],
+ first_parent: !!options[:first_parent],
disable_walk: true # This option is deprecated. The 'walk' implementation is being removed.
)
request.after = GitalyClient.timestamp(options[:after]) if options[:after]
@@ -360,7 +350,7 @@ module Gitlab
def extract_signature(commit_id)
request = Gitaly::ExtractCommitSignatureRequest.new(repository: @gitaly_repo, commit_id: commit_id)
- response = GitalyClient.call(@repository.storage, :commit_service, :extract_commit_signature, request)
+ response = GitalyClient.call(@repository.storage, :commit_service, :extract_commit_signature, request, timeout: GitalyClient.fast_timeout)
signature = +''.b
signed_text = +''.b
diff --git a/lib/gitlab/gitaly_client/conflict_files_stitcher.rb b/lib/gitlab/gitaly_client/conflict_files_stitcher.rb
index 0e00f6e8c44..38ec910111c 100644
--- a/lib/gitlab/gitaly_client/conflict_files_stitcher.rb
+++ b/lib/gitlab/gitaly_client/conflict_files_stitcher.rb
@@ -5,8 +5,11 @@ module Gitlab
class ConflictFilesStitcher
include Enumerable
- def initialize(rpc_response)
+ attr_reader :gitaly_repo
+
+ def initialize(rpc_response, gitaly_repo)
@rpc_response = rpc_response
+ @gitaly_repo = gitaly_repo
end
def each
@@ -31,7 +34,7 @@ module Gitlab
def file_from_gitaly_header(header)
Gitlab::Git::Conflict::File.new(
- Gitlab::GitalyClient::Util.git_repository(header.repository),
+ Gitlab::GitalyClient::Util.git_repository(gitaly_repo),
header.commit_oid,
conflict_from_gitaly_file_header(header),
''
diff --git a/lib/gitlab/gitaly_client/conflicts_service.rb b/lib/gitlab/gitaly_client/conflicts_service.rb
index d16e45c964d..f7eb4b45197 100644
--- a/lib/gitlab/gitaly_client/conflicts_service.rb
+++ b/lib/gitlab/gitaly_client/conflicts_service.rb
@@ -20,9 +20,9 @@ module Gitlab
our_commit_oid: @our_commit_oid,
their_commit_oid: @their_commit_oid
)
- response = GitalyClient.call(@repository.storage, :conflicts_service, :list_conflict_files, request)
+ response = GitalyClient.call(@repository.storage, :conflicts_service, :list_conflict_files, request, timeout: GitalyClient.long_timeout)
- GitalyClient::ConflictFilesStitcher.new(response)
+ GitalyClient::ConflictFilesStitcher.new(response, @gitaly_repo)
end
def conflicts?
diff --git a/lib/gitlab/gitaly_client/namespace_service.rb b/lib/gitlab/gitaly_client/namespace_service.rb
index f0be3cbebd2..0be214f3035 100644
--- a/lib/gitlab/gitaly_client/namespace_service.rb
+++ b/lib/gitlab/gitaly_client/namespace_service.rb
@@ -22,7 +22,7 @@ module Gitlab
def remove(name)
request = Gitaly::RemoveNamespaceRequest.new(storage_name: @storage, name: name)
- gitaly_client_call(:remove_namespace, request, timeout: nil)
+ gitaly_client_call(:remove_namespace, request, timeout: GitalyClient.long_timeout)
end
def rename(from, to)
diff --git a/lib/gitlab/gitaly_client/object_pool_service.rb b/lib/gitlab/gitaly_client/object_pool_service.rb
index d7fac26bc13..786ef0ebebe 100644
--- a/lib/gitlab/gitaly_client/object_pool_service.rb
+++ b/lib/gitlab/gitaly_client/object_pool_service.rb
@@ -15,13 +15,15 @@ module Gitlab
object_pool: object_pool,
origin: repository.gitaly_repository)
- GitalyClient.call(storage, :object_pool_service, :create_object_pool, request)
+ GitalyClient.call(storage, :object_pool_service, :create_object_pool,
+ request, timeout: GitalyClient.medium_timeout)
end
def delete
request = Gitaly::DeleteObjectPoolRequest.new(object_pool: object_pool)
- GitalyClient.call(storage, :object_pool_service, :delete_object_pool, request)
+ GitalyClient.call(storage, :object_pool_service, :delete_object_pool,
+ request, timeout: GitalyClient.long_timeout)
end
def link_repository(repository)
@@ -40,7 +42,8 @@ module Gitlab
origin: repository.gitaly_repository
)
- GitalyClient.call(storage, :object_pool_service, :fetch_into_object_pool, request)
+ GitalyClient.call(storage, :object_pool_service, :fetch_into_object_pool,
+ request, timeout: GitalyClient.long_timeout)
end
end
end
diff --git a/lib/gitlab/gitaly_client/operation_service.rb b/lib/gitlab/gitaly_client/operation_service.rb
index 33ca428a942..6e486c763da 100644
--- a/lib/gitlab/gitaly_client/operation_service.rb
+++ b/lib/gitlab/gitaly_client/operation_service.rb
@@ -19,7 +19,7 @@ module Gitlab
user: Gitlab::Git::User.from_gitlab(user).to_gitaly
)
- response = GitalyClient.call(@repository.storage, :operation_service, :user_delete_tag, request, timeout: GitalyClient.medium_timeout)
+ response = GitalyClient.call(@repository.storage, :operation_service, :user_delete_tag, request, timeout: GitalyClient.long_timeout)
if pre_receive_error = response.pre_receive_error.presence
raise Gitlab::Git::PreReceiveError, pre_receive_error
@@ -35,7 +35,7 @@ module Gitlab
message: encode_binary(message.to_s)
)
- response = GitalyClient.call(@repository.storage, :operation_service, :user_create_tag, request, timeout: GitalyClient.medium_timeout)
+ response = GitalyClient.call(@repository.storage, :operation_service, :user_create_tag, request, timeout: GitalyClient.long_timeout)
if pre_receive_error = response.pre_receive_error.presence
raise Gitlab::Git::PreReceiveError, pre_receive_error
elsif response.exists
@@ -55,7 +55,7 @@ module Gitlab
start_point: encode_binary(start_point)
)
response = GitalyClient.call(@repository.storage, :operation_service,
- :user_create_branch, request)
+ :user_create_branch, request, timeout: GitalyClient.long_timeout)
if response.pre_receive_error.present?
raise Gitlab::Git::PreReceiveError.new(response.pre_receive_error)
@@ -79,7 +79,8 @@ module Gitlab
oldrev: encode_binary(oldrev)
)
- response = GitalyClient.call(@repository.storage, :operation_service, :user_update_branch, request)
+ response = GitalyClient.call(@repository.storage, :operation_service,
+ :user_update_branch, request, timeout: GitalyClient.long_timeout)
if pre_receive_error = response.pre_receive_error.presence
raise Gitlab::Git::PreReceiveError, pre_receive_error
@@ -93,7 +94,8 @@ module Gitlab
user: Gitlab::Git::User.from_gitlab(user).to_gitaly
)
- response = GitalyClient.call(@repository.storage, :operation_service, :user_delete_branch, request)
+ response = GitalyClient.call(@repository.storage, :operation_service,
+ :user_delete_branch, request, timeout: GitalyClient.long_timeout)
if pre_receive_error = response.pre_receive_error.presence
raise Gitlab::Git::PreReceiveError, pre_receive_error
@@ -111,7 +113,8 @@ module Gitlab
first_parent_ref: encode_binary(first_parent_ref)
)
- response = GitalyClient.call(@repository.storage, :operation_service, :user_merge_to_ref, request)
+ response = GitalyClient.call(@repository.storage, :operation_service,
+ :user_merge_to_ref, request, timeout: GitalyClient.long_timeout)
if pre_receive_error = response.pre_receive_error.presence
raise Gitlab::Git::PreReceiveError, pre_receive_error
@@ -126,7 +129,8 @@ module Gitlab
@repository.storage,
:operation_service,
:user_merge_branch,
- request_enum.each
+ request_enum.each,
+ timeout: GitalyClient.long_timeout
)
request_enum.push(
@@ -170,7 +174,8 @@ module Gitlab
@repository.storage,
:operation_service,
:user_ff_branch,
- request
+ request,
+ timeout: GitalyClient.long_timeout
)
Gitlab::Git::OperationService::BranchUpdate.from_gitaly(response.branch_update)
@@ -215,6 +220,7 @@ module Gitlab
:operation_service,
:user_rebase,
request,
+ timeout: GitalyClient.long_timeout,
remote_storage: remote_repository.storage
)
@@ -236,6 +242,7 @@ module Gitlab
:operation_service,
:user_rebase_confirmable,
request_enum.each,
+ timeout: GitalyClient.long_timeout,
remote_storage: remote_repository.storage
)
@@ -286,7 +293,8 @@ module Gitlab
@repository.storage,
:operation_service,
:user_squash,
- request
+ request,
+ timeout: GitalyClient.long_timeout
)
if response.git_error.presence
@@ -310,7 +318,8 @@ module Gitlab
@repository.storage,
:operation_service,
:user_update_submodule,
- request
+ request,
+ timeout: GitalyClient.long_timeout
)
if response.pre_receive_error.present?
@@ -352,7 +361,8 @@ module Gitlab
end
response = GitalyClient.call(@repository.storage, :operation_service,
- :user_commit_files, req_enum, remote_storage: start_repository.storage)
+ :user_commit_files, req_enum, timeout: GitalyClient.long_timeout,
+ remote_storage: start_repository.storage)
if (pre_receive_error = response.pre_receive_error.presence)
raise Gitlab::Git::PreReceiveError, pre_receive_error
@@ -384,7 +394,8 @@ module Gitlab
end
end
- response = GitalyClient.call(@repository.storage, :operation_service, :user_apply_patch, chunks)
+ response = GitalyClient.call(@repository.storage, :operation_service,
+ :user_apply_patch, chunks, timeout: GitalyClient.long_timeout)
Gitlab::Git::OperationService::BranchUpdate.from_gitaly(response.branch_update)
end
@@ -424,7 +435,7 @@ module Gitlab
:"user_#{rpc}",
request,
remote_storage: start_repository.storage,
- timeout: GitalyClient.medium_timeout
+ timeout: GitalyClient.long_timeout
)
handle_cherry_pick_or_revert_response(response)
diff --git a/lib/gitlab/gitaly_client/ref_service.rb b/lib/gitlab/gitaly_client/ref_service.rb
index b7d509dfa48..d1f848fae26 100644
--- a/lib/gitlab/gitaly_client/ref_service.rb
+++ b/lib/gitlab/gitaly_client/ref_service.rb
@@ -21,7 +21,7 @@ module Gitlab
def remote_branches(remote_name)
request = Gitaly::FindAllRemoteBranchesRequest.new(repository: @gitaly_repo, remote_name: remote_name)
- response = GitalyClient.call(@repository.storage, :ref_service, :find_all_remote_branches, request)
+ response = GitalyClient.call(@repository.storage, :ref_service, :find_all_remote_branches, request, timeout: GitalyClient.medium_timeout)
consume_find_all_remote_branches_response(remote_name, response)
end
@@ -158,7 +158,7 @@ module Gitlab
start_point: encode_binary(start_point)
)
- response = GitalyClient.call(@repository.storage, :ref_service, :create_branch, request)
+ response = GitalyClient.call(@repository.storage, :ref_service, :create_branch, request, timeout: GitalyClient.medium_timeout)
case response.status
when :OK
@@ -182,7 +182,7 @@ module Gitlab
name: encode_binary(branch_name)
)
- GitalyClient.call(@repository.storage, :ref_service, :delete_branch, request)
+ GitalyClient.call(@repository.storage, :ref_service, :delete_branch, request, timeout: GitalyClient.medium_timeout)
end
def delete_refs(refs: [], except_with_prefixes: [])
@@ -192,7 +192,7 @@ module Gitlab
except_with_prefix: except_with_prefixes.map { |r| encode_binary(r) }
)
- response = GitalyClient.call(@repository.storage, :ref_service, :delete_refs, request, timeout: GitalyClient.default_timeout)
+ response = GitalyClient.call(@repository.storage, :ref_service, :delete_refs, request, timeout: GitalyClient.medium_timeout)
raise Gitlab::Git::Repository::GitError, response.git_error if response.git_error.present?
end
@@ -242,7 +242,7 @@ module Gitlab
def pack_refs
request = Gitaly::PackRefsRequest.new(repository: @gitaly_repo)
- GitalyClient.call(@storage, :ref_service, :pack_refs, request)
+ GitalyClient.call(@storage, :ref_service, :pack_refs, request, timeout: GitalyClient.long_timeout)
end
private
diff --git a/lib/gitlab/gitaly_client/remote_service.rb b/lib/gitlab/gitaly_client/remote_service.rb
index f3589fea39f..d01a29e1a05 100644
--- a/lib/gitlab/gitaly_client/remote_service.rb
+++ b/lib/gitlab/gitaly_client/remote_service.rb
@@ -38,9 +38,7 @@ module Gitlab
def remove_remote(name)
request = Gitaly::RemoveRemoteRequest.new(repository: @gitaly_repo, name: name)
- response = GitalyClient.call(@storage, :remote_service, :remove_remote, request)
-
- response.result
+ GitalyClient.call(@storage, :remote_service, :remove_remote, request, timeout: GitalyClient.long_timeout).result
end
def fetch_internal_remote(repository)
@@ -51,6 +49,7 @@ module Gitlab
response = GitalyClient.call(@storage, :remote_service,
:fetch_internal_remote, request,
+ timeout: GitalyClient.medium_timeout,
remote_storage: repository.storage)
response.result
@@ -63,7 +62,7 @@ module Gitlab
)
response = GitalyClient.call(@storage, :remote_service,
- :find_remote_root_ref, request)
+ :find_remote_root_ref, request, timeout: GitalyClient.medium_timeout)
encode_utf8(response.ref)
end
@@ -95,7 +94,7 @@ module Gitlab
end
end
- GitalyClient.call(@storage, :remote_service, :update_remote_mirror, req_enum)
+ GitalyClient.call(@storage, :remote_service, :update_remote_mirror, req_enum, timeout: GitalyClient.long_timeout)
end
end
end
diff --git a/lib/gitlab/gitaly_client/repository_service.rb b/lib/gitlab/gitaly_client/repository_service.rb
index ca3e5b51ecc..d0e5e0db830 100644
--- a/lib/gitlab/gitaly_client/repository_service.rb
+++ b/lib/gitlab/gitaly_client/repository_service.rb
@@ -28,17 +28,17 @@ module Gitlab
def garbage_collect(create_bitmap)
request = Gitaly::GarbageCollectRequest.new(repository: @gitaly_repo, create_bitmap: create_bitmap)
- GitalyClient.call(@storage, :repository_service, :garbage_collect, request)
+ GitalyClient.call(@storage, :repository_service, :garbage_collect, request, timeout: GitalyClient.long_timeout)
end
def repack_full(create_bitmap)
request = Gitaly::RepackFullRequest.new(repository: @gitaly_repo, create_bitmap: create_bitmap)
- GitalyClient.call(@storage, :repository_service, :repack_full, request)
+ GitalyClient.call(@storage, :repository_service, :repack_full, request, timeout: GitalyClient.long_timeout)
end
def repack_incremental
request = Gitaly::RepackIncrementalRequest.new(repository: @gitaly_repo)
- GitalyClient.call(@storage, :repository_service, :repack_incremental, request)
+ GitalyClient.call(@storage, :repository_service, :repack_incremental, request, timeout: GitalyClient.long_timeout)
end
def repository_size
@@ -86,12 +86,12 @@ module Gitlab
end
end
- GitalyClient.call(@storage, :repository_service, :fetch_remote, request)
+ GitalyClient.call(@storage, :repository_service, :fetch_remote, request, timeout: GitalyClient.long_timeout)
end
def create_repository
request = Gitaly::CreateRepositoryRequest.new(repository: @gitaly_repo)
- GitalyClient.call(@storage, :repository_service, :create_repository, request, timeout: GitalyClient.medium_timeout)
+ GitalyClient.call(@storage, :repository_service, :create_repository, request, timeout: GitalyClient.fast_timeout)
end
def has_local_branches?
@@ -123,7 +123,7 @@ module Gitlab
:create_fork,
request,
remote_storage: source_repository.storage,
- timeout: GitalyClient.default_timeout
+ timeout: GitalyClient.long_timeout
)
end
@@ -138,7 +138,7 @@ module Gitlab
:repository_service,
:create_repository_from_url,
request,
- timeout: GitalyClient.default_timeout
+ timeout: GitalyClient.long_timeout
)
end
@@ -189,6 +189,7 @@ module Gitlab
:repository_service,
:fetch_source_branch,
request,
+ timeout: GitalyClient.long_timeout,
remote_storage: source_repository.storage
)
@@ -197,7 +198,7 @@ module Gitlab
def fsck
request = Gitaly::FsckRequest.new(repository: @gitaly_repo)
- response = GitalyClient.call(@storage, :repository_service, :fsck, request, timeout: GitalyClient.no_timeout)
+ response = GitalyClient.call(@storage, :repository_service, :fsck, request, timeout: GitalyClient.long_timeout)
if response.error.empty?
return "", 0
@@ -211,7 +212,7 @@ module Gitlab
save_path,
:create_bundle,
Gitaly::CreateBundleRequest,
- GitalyClient.no_timeout
+ GitalyClient.long_timeout
)
end
@@ -229,7 +230,7 @@ module Gitlab
bundle_path,
:create_repository_from_bundle,
Gitaly::CreateRepositoryFromBundleRequest,
- GitalyClient.no_timeout
+ GitalyClient.long_timeout
)
end
@@ -254,7 +255,7 @@ module Gitlab
:repository_service,
:create_repository_from_snapshot,
request,
- timeout: GitalyClient.no_timeout
+ timeout: GitalyClient.long_timeout
)
end
@@ -333,7 +334,7 @@ module Gitlab
def search_files_by_content(ref, query)
request = Gitaly::SearchFilesByContentRequest.new(repository: @gitaly_repo, ref: ref, query: query)
- response = GitalyClient.call(@storage, :repository_service, :search_files_by_content, request)
+ response = GitalyClient.call(@storage, :repository_service, :search_files_by_content, request, timeout: GitalyClient.default_timeout)
search_results_from_response(response)
end
@@ -343,7 +344,19 @@ module Gitlab
repository: @gitaly_repo
)
- GitalyClient.call(@storage, :object_pool_service, :disconnect_git_alternates, request)
+ GitalyClient.call(@storage, :object_pool_service, :disconnect_git_alternates, request, timeout: GitalyClient.long_timeout)
+ end
+
+ def rename(relative_path)
+ request = Gitaly::RenameRepositoryRequest.new(repository: @gitaly_repo, relative_path: relative_path)
+
+ GitalyClient.call(@storage, :repository_service, :rename_repository, request, timeout: GitalyClient.fast_timeout)
+ end
+
+ def remove
+ request = Gitaly::RemoveRepositoryRequest.new(repository: @gitaly_repo)
+
+ GitalyClient.call(@storage, :repository_service, :remove_repository, request, timeout: GitalyClient.long_timeout)
end
private
diff --git a/lib/gitlab/gitaly_client/storage_service.rb b/lib/gitlab/gitaly_client/storage_service.rb
deleted file mode 100644
index 4edcb0b8ba9..00000000000
--- a/lib/gitlab/gitaly_client/storage_service.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module GitalyClient
- class StorageService
- def initialize(storage)
- @storage = storage
- end
-
- # Returns all directories in the git storage directory, lexically ordered
- def list_directories(depth: 1)
- request = Gitaly::ListDirectoriesRequest.new(storage_name: @storage, depth: depth)
-
- GitalyClient.call(@storage, :storage_service, :list_directories, request)
- .flat_map(&:paths)
- end
-
- # Delete all repositories in the storage. This is a slow and VERY DESTRUCTIVE operation.
- def delete_all_repositories
- request = Gitaly::DeleteAllRepositoriesRequest.new(storage_name: @storage)
- GitalyClient.call(@storage, :storage_service, :delete_all_repositories, request)
- end
- end
- end
-end
diff --git a/lib/gitlab/gitaly_client/storage_settings.rb b/lib/gitlab/gitaly_client/storage_settings.rb
index 7d1206e551b..43848772947 100644
--- a/lib/gitlab/gitaly_client/storage_settings.rb
+++ b/lib/gitlab/gitaly_client/storage_settings.rb
@@ -53,7 +53,7 @@ module Gitlab
@legacy_disk_path = File.expand_path(storage['path'], Rails.root) if storage['path']
storage['path'] = Deprecated
- @hash = storage
+ @hash = storage.with_indifferent_access
end
def gitaly_address
diff --git a/lib/gitlab/gitaly_client/wiki_service.rb b/lib/gitlab/gitaly_client/wiki_service.rb
index ce9faad825c..15e0d7349dd 100644
--- a/lib/gitlab/gitaly_client/wiki_service.rb
+++ b/lib/gitlab/gitaly_client/wiki_service.rb
@@ -34,7 +34,7 @@ module Gitlab
end
end
- response = GitalyClient.call(@repository.storage, :wiki_service, :wiki_write_page, enum)
+ response = GitalyClient.call(@repository.storage, :wiki_service, :wiki_write_page, enum, timeout: GitalyClient.medium_timeout)
if error = response.duplicate_error.presence
raise Gitlab::Git::Wiki::DuplicatePageError, error
end
@@ -61,7 +61,7 @@ module Gitlab
end
end
- GitalyClient.call(@repository.storage, :wiki_service, :wiki_update_page, enum)
+ GitalyClient.call(@repository.storage, :wiki_service, :wiki_update_page, enum, timeout: GitalyClient.medium_timeout)
end
def delete_page(page_path, commit_details)
@@ -187,7 +187,7 @@ module Gitlab
directory: encode_binary(dir)
)
- response = GitalyClient.call(@repository.storage, :wiki_service, :wiki_get_formatted_data, request)
+ response = GitalyClient.call(@repository.storage, :wiki_service, :wiki_get_formatted_data, request, timeout: GitalyClient.medium_timeout)
response.reduce([]) { |memo, msg| memo << msg.data }.join
end
diff --git a/lib/gitlab/github_import/importer/releases_importer.rb b/lib/gitlab/github_import/importer/releases_importer.rb
index 9d925581441..a3734ccf069 100644
--- a/lib/gitlab/github_import/importer/releases_importer.rb
+++ b/lib/gitlab/github_import/importer/releases_importer.rb
@@ -32,11 +32,13 @@ module Gitlab
def build(release)
{
+ name: release.name,
tag: release.tag_name,
description: description_for(release),
created_at: release.created_at,
- updated_at: release.updated_at,
- released_at: release.published_at,
+ updated_at: release.created_at,
+ # Draft releases will have a null published_at
+ released_at: release.published_at || Time.current,
project_id: project.id
}
end
@@ -46,11 +48,7 @@ module Gitlab
end
def description_for(release)
- if release.body.present?
- release.body
- else
- "Release for tag #{release.tag_name}"
- end
+ release.body.presence || "Release for tag #{release.tag_name}"
end
end
end
diff --git a/lib/gitlab/gl_repository/repo_type.rb b/lib/gitlab/gl_repository/repo_type.rb
index 19915980d7f..01bc27f963b 100644
--- a/lib/gitlab/gl_repository/repo_type.rb
+++ b/lib/gitlab/gl_repository/repo_type.rb
@@ -40,3 +40,5 @@ module Gitlab
end
end
end
+
+Gitlab::GlRepository::RepoType.prepend_if_ee('EE::Gitlab::GlRepository::RepoType')
diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb
index 92917028851..f1e31a615a4 100644
--- a/lib/gitlab/gon_helper.rb
+++ b/lib/gitlab/gon_helper.rb
@@ -38,6 +38,13 @@ module Gitlab
gon.current_user_fullname = current_user.name
gon.current_user_avatar_url = current_user.avatar_url
end
+
+ # Initialize gon.features with any flags that should be
+ # made globally available to the frontend
+ push_frontend_feature_flag(:suppress_ajax_navigation_errors, default_enabled: true)
+
+ # Flag controls a GFM feature used across many routes.
+ push_frontend_feature_flag(:gfm_grafana_integration)
end
# Exposes the state of a feature flag to the frontend code.
diff --git a/lib/gitlab/google_code_import/importer.rb b/lib/gitlab/google_code_import/importer.rb
index 1e7203cb82a..4da2004b74f 100644
--- a/lib/gitlab/google_code_import/importer.rb
+++ b/lib/gitlab/google_code_import/importer.rb
@@ -117,7 +117,7 @@ module Gitlab
description: body,
author_id: project.creator_id,
assignee_ids: [assignee_id],
- state: raw_issue['state'] == 'closed' ? 'closed' : 'opened'
+ state_id: raw_issue['state'] == 'closed' ? Issue.available_states[:closed] : Issue.available_states[:opened]
)
issue_labels = ::LabelsFinder.new(nil, project_id: project.id, title: labels).execute(skip_authorization: true)
diff --git a/lib/gitlab/gpg/commit.rb b/lib/gitlab/gpg/commit.rb
index 4b797a0e397..dc71d0b427a 100644
--- a/lib/gitlab/gpg/commit.rb
+++ b/lib/gitlab/gpg/commit.rb
@@ -10,6 +10,8 @@ module Gitlab
repo = commit.project.repository.raw_repository
@signature_data = Gitlab::Git::Commit.extract_signature_lazily(repo, commit.sha || commit.id)
+
+ lazy_signature
end
def signature_text
@@ -28,18 +30,16 @@ module Gitlab
!!(signature_text && signed_text)
end
- # rubocop: disable CodeReuse/ActiveRecord
def signature
return unless has_signature?
return @signature if @signature
- cached_signature = GpgSignature.find_by(commit_sha: @commit.sha)
+ cached_signature = lazy_signature&.itself
return @signature = cached_signature if cached_signature.present?
@signature = create_cached_signature!
end
- # rubocop: enable CodeReuse/ActiveRecord
def update_signature!(cached_signature)
using_keychain do |gpg_key|
@@ -50,6 +50,14 @@ module Gitlab
private
+ def lazy_signature
+ BatchLoader.for(@commit.sha).batch do |shas, loader|
+ GpgSignature.by_commit_sha(shas).each do |signature|
+ loader.call(signature.commit_sha, signature)
+ end
+ end
+ end
+
def using_keychain
Gitlab::Gpg.using_tmp_keychain do
# first we need to get the fingerprint from the signature to query the gpg
diff --git a/lib/gitlab/graphql/docs/renderer.rb b/lib/gitlab/graphql/docs/renderer.rb
index f47a372aa19..41aef64f683 100644
--- a/lib/gitlab/graphql/docs/renderer.rb
+++ b/lib/gitlab/graphql/docs/renderer.rb
@@ -23,15 +23,12 @@ module Gitlab
@parsed_schema = GraphQLDocs::Parser.new(schema, {}).parse
end
- def render
- contents = @layout.render(self)
-
- write_file(contents)
+ def contents
+ # Render and remove an extra trailing new line
+ @contents ||= @layout.render(self).sub!(/\n(?=\Z)/, '')
end
- private
-
- def write_file(contents)
+ def write
filename = File.join(@output_dir, 'index.md')
FileUtils.mkdir_p(@output_dir)
diff --git a/lib/gitlab/graphql/docs/templates/default.md.haml b/lib/gitlab/graphql/docs/templates/default.md.haml
index cc22d43ab4f..33acff38ef4 100644
--- a/lib/gitlab/graphql/docs/templates/default.md.haml
+++ b/lib/gitlab/graphql/docs/templates/default.md.haml
@@ -20,6 +20,3 @@
- type[:fields].each do |field|
= "| `#{field[:name]}` | #{render_field_type(field[:type][:info])} | #{field[:description]} |"
\
-
-
-
diff --git a/lib/gitlab/health_checks/base_abstract_check.rb b/lib/gitlab/health_checks/base_abstract_check.rb
index 1d31f59999c..199cd2f9b2d 100644
--- a/lib/gitlab/health_checks/base_abstract_check.rb
+++ b/lib/gitlab/health_checks/base_abstract_check.rb
@@ -15,10 +15,6 @@ module Gitlab
raise NotImplementedError
end
- def liveness
- HealthChecks::Result.new(true)
- end
-
def metrics
[]
end
diff --git a/lib/gitlab/health_checks/gitaly_check.rb b/lib/gitlab/health_checks/gitaly_check.rb
index e560f87bf98..e780bf8a986 100644
--- a/lib/gitlab/health_checks/gitaly_check.rb
+++ b/lib/gitlab/health_checks/gitaly_check.rb
@@ -5,7 +5,7 @@ module Gitlab
class GitalyCheck
extend BaseAbstractCheck
- METRIC_PREFIX = 'gitaly_health_check'
+ METRIC_PREFIX = 'gitaly_health_check'.freeze
class << self
def readiness
@@ -29,7 +29,13 @@ module Gitlab
def check(storage_name)
serv = Gitlab::GitalyClient::HealthCheckService.new(storage_name)
result = serv.check
- HealthChecks::Result.new(result[:success], result[:message], shard: storage_name)
+
+ HealthChecks::Result.new(
+ name,
+ result[:success],
+ result[:message],
+ shard: storage_name
+ )
end
private
diff --git a/lib/gitlab/health_checks/metric.rb b/lib/gitlab/health_checks/metric.rb
index 184083de2bc..b697cb0d027 100644
--- a/lib/gitlab/health_checks/metric.rb
+++ b/lib/gitlab/health_checks/metric.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
-module Gitlab::HealthChecks
- Metric = Struct.new(:name, :value, :labels)
+module Gitlab
+ module HealthChecks
+ Metric = Struct.new(:name, :value, :labels)
+ end
end
diff --git a/lib/gitlab/health_checks/probes/collection.rb b/lib/gitlab/health_checks/probes/collection.rb
new file mode 100644
index 00000000000..db3ef4834c2
--- /dev/null
+++ b/lib/gitlab/health_checks/probes/collection.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module HealthChecks
+ module Probes
+ class Collection
+ attr_reader :checks
+
+ # This accepts an array of objects implementing `:readiness`
+ # that returns `::Gitlab::HealthChecks::Result`
+ def initialize(*checks)
+ @checks = checks
+ end
+
+ def execute
+ readiness = probe_readiness
+ success = all_succeeded?(readiness)
+
+ Probes::Status.new(
+ success ? 200 : 503,
+ status(success).merge(payload(readiness))
+ )
+ end
+
+ private
+
+ def all_succeeded?(readiness)
+ readiness.all? do |name, probes|
+ probes.any?(&:success)
+ end
+ end
+
+ def status(success)
+ { status: success ? 'ok' : 'failed' }
+ end
+
+ def payload(readiness)
+ readiness.transform_values do |probes|
+ probes.map(&:payload)
+ end
+ end
+
+ def probe_readiness
+ checks
+ .flat_map(&:readiness)
+ .compact
+ .group_by(&:name)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/health_checks/probes/status.rb b/lib/gitlab/health_checks/probes/status.rb
new file mode 100644
index 00000000000..192e9366001
--- /dev/null
+++ b/lib/gitlab/health_checks/probes/status.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module HealthChecks
+ module Probes
+ Status = Struct.new(:http_status, :json) do
+ # We accept 2xx
+ def success?
+ http_status / 100 == 2
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/health_checks/prometheus_text_format.rb b/lib/gitlab/health_checks/prometheus_text_format.rb
deleted file mode 100644
index 2a8f9d31cd5..00000000000
--- a/lib/gitlab/health_checks/prometheus_text_format.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module HealthChecks
- class PrometheusTextFormat
- def marshal(metrics)
- "#{metrics_with_type_declarations(metrics).join("\n")}\n"
- end
-
- private
-
- def metrics_with_type_declarations(metrics)
- type_declaration_added = {}
-
- metrics.flat_map do |metric|
- metric_lines = []
-
- unless type_declaration_added.key?(metric.name)
- type_declaration_added[metric.name] = true
- metric_lines << metric_type_declaration(metric)
- end
-
- metric_lines << metric_text(metric)
- end
- end
-
- def metric_type_declaration(metric)
- "# TYPE #{metric.name} gauge"
- end
-
- def metric_text(metric)
- labels = metric.labels&.map { |key, value| "#{key}=\"#{value}\"" }&.join(',') || ''
-
- if labels.empty?
- "#{metric.name} #{metric.value}"
- else
- "#{metric.name}{#{labels}} #{metric.value}"
- end
- end
- end
- end
-end
diff --git a/lib/gitlab/health_checks/puma_check.rb b/lib/gitlab/health_checks/puma_check.rb
new file mode 100644
index 00000000000..7aafe29fbae
--- /dev/null
+++ b/lib/gitlab/health_checks/puma_check.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module HealthChecks
+ # This check can only be run on Puma `master` process
+ class PumaCheck
+ extend SimpleAbstractCheck
+
+ class << self
+ private
+
+ def metric_prefix
+ 'puma_check'
+ end
+
+ def successful?(result)
+ result > 0
+ end
+
+ def check
+ return unless defined?(::Puma)
+
+ stats = Puma.stats
+ stats = JSON.parse(stats)
+
+ # If `workers` is missing this means that
+ # Puma server is running in single mode
+ stats.fetch('workers', 1)
+ rescue NoMethodError
+ # server is not ready
+ 0
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/health_checks/result.rb b/lib/gitlab/health_checks/result.rb
index 4586b1d94a7..38a36100ec7 100644
--- a/lib/gitlab/health_checks/result.rb
+++ b/lib/gitlab/health_checks/result.rb
@@ -1,5 +1,15 @@
# frozen_string_literal: true
-module Gitlab::HealthChecks
- Result = Struct.new(:success, :message, :labels)
+module Gitlab
+ module HealthChecks
+ Result = Struct.new(:name, :success, :message, :labels) do
+ def payload
+ {
+ status: success ? 'ok' : 'failed',
+ message: message,
+ labels: labels
+ }.compact
+ end
+ end
+ end
end
diff --git a/lib/gitlab/health_checks/simple_abstract_check.rb b/lib/gitlab/health_checks/simple_abstract_check.rb
index 5a1e8c2a1dd..4e0b9296819 100644
--- a/lib/gitlab/health_checks/simple_abstract_check.rb
+++ b/lib/gitlab/health_checks/simple_abstract_check.rb
@@ -7,17 +7,23 @@ module Gitlab
def readiness
check_result = check
+ return if check_result.nil?
+
if successful?(check_result)
- HealthChecks::Result.new(true)
+ HealthChecks::Result.new(name, true)
elsif check_result.is_a?(Timeout::Error)
- HealthChecks::Result.new(false, "#{human_name} check timed out")
+ HealthChecks::Result.new(name, false, "#{human_name} check timed out")
else
- HealthChecks::Result.new(false, "unexpected #{human_name} check result: #{check_result}")
+ HealthChecks::Result.new(name, false, "unexpected #{human_name} check result: #{check_result}")
end
+ rescue => e
+ HealthChecks::Result.new(name, false, "unexpected #{human_name} check result: #{e}")
end
def metrics
result, elapsed = with_timing(&method(:check))
+ return if result.nil?
+
Rails.logger.error("#{human_name} check returned unexpected result #{result}") unless successful?(result) # rubocop:disable Gitlab/RailsLogger
[
metric("#{metric_prefix}_timeout", result.is_a?(Timeout::Error) ? 1 : 0),
diff --git a/lib/gitlab/health_checks/unicorn_check.rb b/lib/gitlab/health_checks/unicorn_check.rb
new file mode 100644
index 00000000000..a30ae015257
--- /dev/null
+++ b/lib/gitlab/health_checks/unicorn_check.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module HealthChecks
+ # This check can only be run on Unicorn `master` process
+ class UnicornCheck
+ extend SimpleAbstractCheck
+
+ class << self
+ include Gitlab::Utils::StrongMemoize
+
+ private
+
+ def metric_prefix
+ 'unicorn_check'
+ end
+
+ def successful?(result)
+ result > 0
+ end
+
+ def check
+ return unless http_servers
+
+ http_servers.sum(&:worker_processes) # rubocop: disable CodeReuse/ActiveRecord
+ end
+
+ # Traversal of ObjectSpace is expensive, on fully loaded application
+ # it takes around 80ms. The instances of HttpServers are not a subject
+ # to change so we can cache the list of servers.
+ def http_servers
+ strong_memoize(:http_servers) do
+ next unless defined?(::Unicorn::HttpServer)
+
+ ObjectSpace.each_object(::Unicorn::HttpServer).to_a
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/hook_data/issue_builder.rb b/lib/gitlab/hook_data/issue_builder.rb
index 1f64e440141..9d9db6cf94f 100644
--- a/lib/gitlab/hook_data/issue_builder.rb
+++ b/lib/gitlab/hook_data/issue_builder.rb
@@ -27,7 +27,7 @@ module Gitlab
duplicated_to_id
project_id
relative_position
- state
+ state_id
time_estimate
title
updated_at
@@ -46,7 +46,8 @@ module Gitlab
human_time_estimate: issue.human_time_estimate,
assignee_ids: issue.assignee_ids,
assignee_id: issue.assignee_ids.first, # This key is deprecated
- labels: issue.labels_hook_attrs
+ labels: issue.labels_hook_attrs,
+ state: issue.state
}
issue.attributes.with_indifferent_access.slice(*self.class.safe_hook_attributes)
diff --git a/lib/gitlab/import_export.rb b/lib/gitlab/import_export.rb
index d08848a65a8..b2ac60fe825 100644
--- a/lib/gitlab/import_export.rb
+++ b/lib/gitlab/import_export.rb
@@ -38,6 +38,10 @@ module Gitlab
"lfs-objects"
end
+ def wiki_repo_bundle_filename
+ "project.wiki.bundle"
+ end
+
def config_file
Rails.root.join('lib/gitlab/import_export/import_export.yml')
end
@@ -61,3 +65,5 @@ module Gitlab
end
end
end
+
+Gitlab::ImportExport.prepend_if_ee('EE::Gitlab::ImportExport')
diff --git a/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb b/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb
index c5fb39b7b52..b30258123d4 100644
--- a/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb
+++ b/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb
@@ -10,11 +10,9 @@ module Gitlab
StrategyError = Class.new(StandardError)
- AFTER_EXPORT_LOCK_FILE_NAME = '.after_export_action'
-
private
- attr_reader :project, :current_user
+ attr_reader :project, :current_user, :lock_file
public
@@ -29,8 +27,9 @@ module Gitlab
def execute(current_user, project)
@project = project
- return unless @project.export_status == :finished
-
+ ensure_export_ready!
+ ensure_lock_files_path!
+ @lock_file = File.join(lock_files_path, SecureRandom.hex)
@current_user = current_user
if invalid?
@@ -48,19 +47,32 @@ module Gitlab
false
ensure
delete_after_export_lock
+ delete_export_file
+ delete_archive_path
end
def to_json(options = {})
@options.to_h.merge!(klass: self.class.name).to_json
end
- def self.lock_file_path(project)
- return unless project.export_path || export_file_exists?
+ def ensure_export_ready!
+ raise StrategyError unless project.export_file_exists?
+ end
+
+ def ensure_lock_files_path!
+ FileUtils.mkdir_p(lock_files_path) unless Dir.exist?(lock_files_path)
+ end
+
+ def lock_files_path
+ project.import_export_shared.lock_files_path
+ end
- lock_path = project.import_export_shared.archive_path
+ def archive_path
+ project.import_export_shared.archive_path
+ end
- mkdir_p(lock_path)
- File.join(lock_path, AFTER_EXPORT_LOCK_FILE_NAME)
+ def locks_present?
+ project.import_export_shared.locks_present?
end
protected
@@ -69,25 +81,33 @@ module Gitlab
raise NotImplementedError
end
+ def delete_export?
+ true
+ end
+
private
+ def delete_export_file
+ return if locks_present? || !delete_export?
+
+ project.remove_exports
+ end
+
+ def delete_archive_path
+ FileUtils.rm_rf(archive_path) if File.directory?(archive_path)
+ end
+
def create_or_update_after_export_lock
- FileUtils.touch(self.class.lock_file_path(project))
+ FileUtils.touch(lock_file)
end
def delete_after_export_lock
- lock_file = self.class.lock_file_path(project)
-
FileUtils.rm(lock_file) if lock_file.present? && File.exist?(lock_file)
end
def log_validation_errors
errors.full_messages.each { |msg| project.import_export_shared.add_error_message(msg) }
end
-
- def export_file_exists?
- project.export_file_exists?
- end
end
end
end
diff --git a/lib/gitlab/import_export/after_export_strategies/download_notification_strategy.rb b/lib/gitlab/import_export/after_export_strategies/download_notification_strategy.rb
index 1b391314a74..39a6090ad87 100644
--- a/lib/gitlab/import_export/after_export_strategies/download_notification_strategy.rb
+++ b/lib/gitlab/import_export/after_export_strategies/download_notification_strategy.rb
@@ -4,6 +4,12 @@ module Gitlab
module ImportExport
module AfterExportStrategies
class DownloadNotificationStrategy < BaseAfterExportStrategy
+ protected
+
+ def delete_export?
+ false
+ end
+
private
def strategy_execute
diff --git a/lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb b/lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb
index aaa70f0b36d..fd98bc2caad 100644
--- a/lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb
+++ b/lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb
@@ -24,8 +24,6 @@ module Gitlab
def strategy_execute
handle_response_error(send_file)
-
- project.remove_exports
end
def handle_response_error(response)
diff --git a/lib/gitlab/import_export/fast_hash_serializer.rb b/lib/gitlab/import_export/fast_hash_serializer.rb
index a6ab4f3a3d9..5a067b5c9f3 100644
--- a/lib/gitlab/import_export/fast_hash_serializer.rb
+++ b/lib/gitlab/import_export/fast_hash_serializer.rb
@@ -26,6 +26,51 @@ module Gitlab
class FastHashSerializer
attr_reader :subject, :tree
+ # Usage of this class results in delayed
+ # serialization of relation. The serialization
+ # will be triggered when the `JSON.generate`
+ # is exected.
+ #
+ # This class uses memory-optimised, lazily
+ # initialised, fast to recycle relation
+ # serialization.
+ #
+ # The `JSON.generate` does use `#to_json`,
+ # that returns raw JSON content that is written
+ # directly to file.
+ class JSONBatchRelation
+ include Gitlab::Utils::StrongMemoize
+
+ def initialize(relation, options, preloads)
+ @relation = relation
+ @options = options
+ @preloads = preloads
+ end
+
+ def raw_json
+ strong_memoize(:raw_json) do
+ result = +''
+
+ batch = @relation
+ batch = batch.preload(@preloads) if @preloads
+ batch.each do |item|
+ result.concat(",") unless result.empty?
+ result.concat(item.to_json(@options))
+ end
+
+ result
+ end
+ end
+
+ def to_json(options = {})
+ raw_json
+ end
+
+ def as_json(*)
+ raise NotImplementedError
+ end
+ end
+
BATCH_SIZE = 100
def initialize(subject, tree, batch_size: BATCH_SIZE)
@@ -34,8 +79,11 @@ module Gitlab
@tree = tree
end
- # Serializes the subject into a Hash for the given option tree
- # (e.g. Project#as_json)
+ # With the usage of `JSONBatchRelation`, it returns partially
+ # serialized hash which is not easily accessible.
+ # It means you can only manipulate and replace top-level objects.
+ # All future mutations of the hash (such as `fix_project_tree`)
+ # should be aware of that.
def execute
simple_serialize.merge(serialize_includes)
end
@@ -85,12 +133,15 @@ module Gitlab
return record.as_json(options)
end
- # has-many relation
data = []
record.in_batches(of: @batch_size) do |batch| # rubocop:disable Cop/InBatches
- batch = batch.preload(preloads[key]) if preloads&.key?(key)
- data += batch.as_json(options)
+ if Feature.enabled?(:export_fast_serialize_with_raw_json, default_enabled: true)
+ data.append(JSONBatchRelation.new(batch, options, preloads[key]).tap(&:raw_json))
+ else
+ batch = batch.preload(preloads[key]) if preloads&.key?(key)
+ data += batch.as_json(options)
+ end
end
data
diff --git a/lib/gitlab/import_export/group_project_object_builder.rb b/lib/gitlab/import_export/group_project_object_builder.rb
index 1c62591ed5a..de1629d0e28 100644
--- a/lib/gitlab/import_export/group_project_object_builder.rb
+++ b/lib/gitlab/import_export/group_project_object_builder.rb
@@ -26,30 +26,60 @@ module Gitlab
end
def find
- find_object || @klass.create(project_attributes)
+ find_object || klass.create(project_attributes)
end
private
+ attr_reader :klass, :attributes, :group, :project
+
def find_object
- @klass.where(where_clause).first
+ klass.where(where_clause).first
end
def where_clause
- @attributes.slice('title').map do |key, value|
- scope_clause = table[:project_id].eq(@project.id)
- scope_clause = scope_clause.or(table[:group_id].eq(@group.id)) if @group
+ where_clauses.reduce(:and)
+ end
+
+ def where_clauses
+ [
+ where_clause_base,
+ where_clause_for_title,
+ where_clause_for_klass
+ ].compact
+ end
+
+ # Returns Arel clause `"{table_name}"."project_id" = {project.id}`
+ # or, if group is present:
+ # `"{table_name}"."project_id" = {project.id} OR "{table_name}"."group_id" = {group.id}`
+ def where_clause_base
+ clause = table[:project_id].eq(project.id)
+ clause = clause.or(table[:group_id].eq(group.id)) if group
+
+ clause
+ end
- table[key].eq(value).and(scope_clause)
- end.reduce(:or)
+ # Returns Arel clause `"{table_name}"."title" = '{attributes['title']}'`
+ # if attributes has 'title key, otherwise `nil`.
+ def where_clause_for_title
+ attrs_to_arel(attributes.slice('title'))
+ end
+
+ # Returns Arel clause:
+ # `"{table_name}"."{attrs.keys[0]}" = '{attrs.values[0]} AND {table_name}"."{attrs.keys[1]}" = '{attrs.values[1]}"`
+ # from the given Hash of attributes.
+ def attrs_to_arel(attrs)
+ attrs.map do |key, value|
+ table[key].eq(value)
+ end.reduce(:and)
end
def table
- @table ||= @klass.arel_table
+ @table ||= klass.arel_table
end
def project_attributes
- @attributes.except('group').tap do |atts|
+ attributes.except('group').tap do |atts|
if label?
atts['type'] = 'ProjectLabel' # Always create project labels
elsif milestone?
@@ -60,15 +90,17 @@ module Gitlab
claim_iid
end
end
+
+ atts['importing'] = true if klass.ancestors.include?(Importable)
end
end
def label?
- @klass == Label
+ klass == Label
end
def milestone?
- @klass == Milestone
+ klass == Milestone
end
# If an existing group milestone used the IID
@@ -79,7 +111,7 @@ module Gitlab
def claim_iid
# The milestone has to be a group milestone, as it's the only case where
# we set the IID as the maximum. The rest of them are fixed.
- milestone = @project.milestones.find_by(iid: @attributes['iid'])
+ milestone = project.milestones.find_by(iid: attributes['iid'])
return unless milestone
@@ -87,6 +119,15 @@ module Gitlab
milestone.ensure_project_iid!
milestone.save!
end
+
+ protected
+
+ # Returns Arel clause for a particular model or `nil`.
+ def where_clause_for_klass
+ # no-op
+ end
end
end
end
+
+Gitlab::ImportExport::GroupProjectObjectBuilder.prepend_if_ee('EE::Gitlab::ImportExport::GroupProjectObjectBuilder')
diff --git a/lib/gitlab/import_export/import_export.yml b/lib/gitlab/import_export/import_export.yml
index 511b702553e..141e73e6a47 100644
--- a/lib/gitlab/import_export/import_export.yml
+++ b/lib/gitlab/import_export/import_export.yml
@@ -66,6 +66,7 @@ tree:
- stages:
- :statuses
- :external_pull_request
+ - :merge_request
- :external_pull_requests
- :auto_devops
- :triggers
@@ -138,11 +139,14 @@ excluded_attributes:
- :mirror_trigger_builds
- :only_mirror_protected_branches
- :pull_mirror_available_overridden
+ - :pull_mirror_branch_prefix
- :mirror_overwrites_diverged_branches
- :packages_enabled
- :mirror_last_update_at
- :mirror_last_successful_update_at
- :emails_disabled
+ - :max_pages_size
+ - :max_artifacts_size
namespaces:
- :runners_token
- :runners_token_encrypted
@@ -166,6 +170,12 @@ excluded_attributes:
- :external_diff_size
issues:
- :milestone_id
+ merge_request:
+ - :milestone_id
+ - :ref_fetched
+ - :merge_jid
+ - :rebase_jid
+ - :latest_merge_request_diff_id
merge_requests:
- :milestone_id
- :ref_fetched
@@ -246,7 +256,16 @@ preloads:
ee:
tree:
project:
- protected_branches:
+ - issues:
+ - designs:
+ - notes:
+ - :author
+ - events:
+ - :push_event_payload
+ - design_versions:
+ - actions:
+ - :design # Duplicate export of issues.designs in order to link the record to both Issue and DesignVersion
+ - protected_branches:
- :unprotect_access_levels
- protected_environments:
+ - protected_environments:
- :deploy_access_levels
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb
index 767f1b5de0e..62cf6c86906 100644
--- a/lib/gitlab/import_export/importer.rb
+++ b/lib/gitlab/import_export/importer.rb
@@ -19,9 +19,9 @@ module Gitlab
def execute
if import_file && check_version! && restorers.all?(&:restore) && overwrite_project
- project_tree.restored_project
+ project
else
- raise Projects::ImportService::Error.new(@shared.errors.join(', '))
+ raise Projects::ImportService::Error.new(shared.errors.to_sentence)
end
rescue => e
raise Projects::ImportService::Error.new(e.message)
@@ -31,70 +31,72 @@ module Gitlab
private
+ attr_accessor :archive_file, :current_user, :project, :shared
+
def restorers
[repo_restorer, wiki_restorer, project_tree, avatar_restorer,
uploads_restorer, lfs_restorer, statistics_restorer]
end
def import_file
- Gitlab::ImportExport::FileImporter.import(project: @project,
- archive_file: @archive_file,
- shared: @shared)
+ Gitlab::ImportExport::FileImporter.import(project: project,
+ archive_file: archive_file,
+ shared: shared)
end
def check_version!
- Gitlab::ImportExport::VersionChecker.check!(shared: @shared)
+ Gitlab::ImportExport::VersionChecker.check!(shared: shared)
end
def project_tree
- @project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(user: @current_user,
- shared: @shared,
- project: @project)
+ @project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(user: current_user,
+ shared: shared,
+ project: project)
end
def avatar_restorer
- Gitlab::ImportExport::AvatarRestorer.new(project: project_tree.restored_project, shared: @shared)
+ Gitlab::ImportExport::AvatarRestorer.new(project: project, shared: shared)
end
def repo_restorer
Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: repo_path,
- shared: @shared,
- project: project_tree.restored_project)
+ shared: shared,
+ project: project)
end
def wiki_restorer
Gitlab::ImportExport::WikiRestorer.new(path_to_bundle: wiki_repo_path,
- shared: @shared,
- project: ProjectWiki.new(project_tree.restored_project),
- wiki_enabled: @project.wiki_enabled?)
+ shared: shared,
+ project: ProjectWiki.new(project),
+ wiki_enabled: project.wiki_enabled?)
end
def uploads_restorer
- Gitlab::ImportExport::UploadsRestorer.new(project: project_tree.restored_project, shared: @shared)
+ Gitlab::ImportExport::UploadsRestorer.new(project: project, shared: shared)
end
def lfs_restorer
- Gitlab::ImportExport::LfsRestorer.new(project: project_tree.restored_project, shared: @shared)
+ Gitlab::ImportExport::LfsRestorer.new(project: project, shared: shared)
end
def statistics_restorer
- Gitlab::ImportExport::StatisticsRestorer.new(project: project_tree.restored_project, shared: @shared)
+ Gitlab::ImportExport::StatisticsRestorer.new(project: project, shared: shared)
end
def path_with_namespace
- File.join(@project.namespace.full_path, @project.path)
+ File.join(project.namespace.full_path, project.path)
end
def repo_path
- File.join(@shared.export_path, 'project.bundle')
+ File.join(shared.export_path, Gitlab::ImportExport.project_bundle_filename)
end
def wiki_repo_path
- File.join(@shared.export_path, 'project.wiki.bundle')
+ File.join(shared.export_path, Gitlab::ImportExport.wiki_repo_bundle_filename)
end
def remove_import_file
- upload = @project.import_export_upload
+ upload = project.import_export_upload
return unless upload&.import_file&.file
@@ -103,12 +105,10 @@ module Gitlab
end
def overwrite_project
- project = project_tree.restored_project
-
- return unless can?(@current_user, :admin_namespace, project.namespace)
+ return unless can?(current_user, :admin_namespace, project.namespace)
if overwrite_project?
- ::Projects::OverwriteProjectService.new(project, @current_user)
+ ::Projects::OverwriteProjectService.new(project, current_user)
.execute(project_to_overwrite)
end
@@ -116,7 +116,7 @@ module Gitlab
end
def original_path
- @project.import_data&.data&.fetch('original_path', nil)
+ project.import_data&.data&.fetch('original_path', nil)
end
def overwrite_project?
@@ -125,9 +125,11 @@ module Gitlab
def project_to_overwrite
strong_memoize(:project_to_overwrite) do
- Project.find_by_full_path("#{@project.namespace.full_path}/#{original_path}")
+ Project.find_by_full_path("#{project.namespace.full_path}/#{original_path}")
end
end
end
end
end
+
+Gitlab::ImportExport::Importer.prepend_if_ee('EE::Gitlab::ImportExport::Importer')
diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb
index 2dd18616cd6..3fa5765fd4a 100644
--- a/lib/gitlab/import_export/project_tree_restorer.rb
+++ b/lib/gitlab/import_export/project_tree_restorer.rb
@@ -6,19 +6,21 @@ module Gitlab
# Relations which cannot be saved at project level (and have a group assigned)
GROUP_MODELS = [GroupLabel, Milestone].freeze
+ attr_reader :user
+ attr_reader :shared
+ attr_reader :project
+
def initialize(user:, shared:, project:)
@path = File.join(shared.export_path, 'project.json')
@user = user
@shared = shared
@project = project
- @project_id = project.id
@saved = true
end
def restore
begin
- json = IO.read(@path)
- @tree_hash = ActiveSupport::JSON.decode(json)
+ @tree_hash = read_tree_hash
rescue => e
Rails.logger.error("Import/Export error: #{e.message}") # rubocop:disable Gitlab/RailsLogger
raise Gitlab::ImportExport::Error.new('Incorrect JSON format')
@@ -30,26 +32,36 @@ module Gitlab
ActiveRecord::Base.uncached do
ActiveRecord::Base.no_touching do
+ update_project_params!
create_relations
end
end
+
+ # ensure that we have latest version of the restore
+ @project.reload # rubocop:disable Cop/ActiveRecordAssociationReload
+
+ true
rescue => e
@shared.error(e)
false
end
- def restored_project
- return @project unless @tree_hash
+ private
- @restored_project ||= restore_project
+ def read_tree_hash
+ json = IO.read(@path)
+ ActiveSupport::JSON.decode(json)
end
- private
-
def members_mapper
@members_mapper ||= Gitlab::ImportExport::MembersMapper.new(exported_members: @project_members,
user: @user,
- project: restored_project)
+ project: @project)
+ end
+
+ # A Hash of the imported merge request ID -> imported ID.
+ def merge_requests_mapping
+ @merge_requests_mapping ||= {}
end
# Loops through the tree of models defined in import_export.yml and
@@ -58,7 +70,7 @@ module Gitlab
# the configuration yaml file too.
# Finally, it updates each attribute in the newly imported project.
def create_relations
- project_relations_without_project_members.each do |relation_key, relation_definition|
+ project_relations.each do |relation_key, relation_definition|
relation_key_s = relation_key.to_s
if relation_definition.present?
@@ -78,10 +90,25 @@ module Gitlab
remove_group_models(relation_hash) if relation_hash.is_a?(Array)
- @saved = false unless restored_project.append_or_update_attribute(relation_key, relation_hash)
+ @saved = false unless @project.append_or_update_attribute(relation_key, relation_hash)
- # Restore the project again, extra query that skips holding the AR objects in memory
- @restored_project = Project.find(@project_id)
+ save_id_mappings(relation_key, relation_hash_batch, relation_hash)
+
+ @project.reset
+ end
+
+ # Older, serialized CI pipeline exports may only have a
+ # merge_request_id and not the full hash of the merge request. To
+ # import these pipelines, we need to preserve the mapping between
+ # the old and new the merge request ID.
+ def save_id_mappings(relation_key, relation_hash_batch, relation_hash)
+ return unless relation_key == 'merge_requests'
+
+ relation_hash = Array(relation_hash)
+
+ Array(relation_hash_batch).each_with_index do |raw_data, index|
+ merge_requests_mapping[raw_data['id']] = relation_hash[index]['id']
+ end
end
# Remove project models that became group models as we found them at group level.
@@ -93,58 +120,44 @@ module Gitlab
end
end
- def project_relations_without_project_members
- # We remove `project_members` as they are deserialized separately
- project_relations.except(:project_members)
+ def remove_feature_dependent_sub_relations!(_relation_item)
+ # no-op
end
def project_relations
- reader.attributes_finder.find_relations_tree(:project)
+ @project_relations ||= reader.attributes_finder.find_relations_tree(:project)
end
- def restore_project
+ def update_project_params!
Gitlab::Timeless.timeless(@project) do
- @project.update(project_params)
- end
-
- @project
- end
+ project_params = @tree_hash.reject do |key, value|
+ project_relations.include?(key.to_sym)
+ end
- def project_params
- @project_params ||= begin
- attrs = json_params.merge(override_params).merge(visibility_level, external_label)
+ project_params = project_params.merge(present_project_override_params)
# Cleaning all imported and overridden params
- Gitlab::ImportExport::AttributeCleaner.clean(relation_hash: attrs,
- relation_class: Project,
- excluded_keys: excluded_keys_for_relation(:project))
- end
- end
-
- def override_params
- @override_params ||= @project.import_data&.data&.fetch('override_params', nil) || {}
- end
-
- def json_params
- @json_params ||= @tree_hash.reject do |key, value|
- # return params that are not 1 to many or 1 to 1 relations
- value.respond_to?(:each) && !Project.column_names.include?(key)
+ project_params = Gitlab::ImportExport::AttributeCleaner.clean(
+ relation_hash: project_params,
+ relation_class: Project,
+ excluded_keys: excluded_keys_for_relation(:project))
+
+ @project.assign_attributes(project_params)
+ @project.drop_visibility_level!
+ @project.save!
end
end
- def visibility_level
- level = override_params['visibility_level'] || json_params['visibility_level'] || @project.visibility_level
- level = @project.group.visibility_level if @project.group && level.to_i > @project.group.visibility_level
- level = Gitlab::VisibilityLevel::PRIVATE if level == Gitlab::VisibilityLevel::INTERNAL && Gitlab::CurrentSettings.restricted_visibility_levels.include?(level)
-
- { 'visibility_level' => level }
+ def present_project_override_params
+ # we filter out the empty strings from the overrides
+ # keeping the default values configured
+ project_override_params.transform_values do |value|
+ value.is_a?(String) ? value.presence : value
+ end.compact
end
- def external_label
- label = override_params['external_authorization_classification_label'].presence ||
- json_params['external_authorization_classification_label'].presence
-
- { 'external_authorization_classification_label' => label }
+ def project_override_params
+ @project_override_params ||= @project.import_data&.data&.fetch('override_params', nil) || {}
end
# Given a relation hash containing one or more models and its relationships,
@@ -159,17 +172,10 @@ module Gitlab
return if tree_hash[relation_key].blank?
tree_array = [tree_hash[relation_key]].flatten
- null_iid_pipelines = []
# Avoid keeping a possible heavy object in memory once we are done with it
- while relation_item = (tree_array.shift || null_iid_pipelines.shift)
- if nil_iid_pipeline?(relation_key, relation_item) && tree_array.any?
- # Move pipelines with NULL IIDs to the end
- # so they don't clash with existing IIDs.
- null_iid_pipelines << relation_item
-
- next
- end
+ while relation_item = tree_array.shift
+ remove_feature_dependent_sub_relations!(relation_item)
# The transaction at this level is less speedy than one single transaction
# But we can't have it in the upper level or GC won't get rid of the AR objects
@@ -216,8 +222,9 @@ module Gitlab
relation_sym: relation_key.to_sym,
relation_hash: relation_hash,
members_mapper: members_mapper,
+ merge_requests_mapping: merge_requests_mapping,
user: @user,
- project: @restored_project,
+ project: @project,
excluded_keys: excluded_keys_for_relation(relation_key))
end.compact
@@ -231,10 +238,8 @@ module Gitlab
def excluded_keys_for_relation(relation)
reader.attributes_finder.find_excluded_keys(relation)
end
-
- def nil_iid_pipeline?(relation_key, relation_item)
- relation_key == 'ci_pipelines' && relation_item['iid'].nil?
- end
end
end
end
+
+Gitlab::ImportExport::ProjectTreeRestorer.prepend_if_ee('::EE::Gitlab::ImportExport::ProjectTreeRestorer')
diff --git a/lib/gitlab/import_export/project_tree_saver.rb b/lib/gitlab/import_export/project_tree_saver.rb
index f75f69b2c75..63c71105efe 100644
--- a/lib/gitlab/import_export/project_tree_saver.rb
+++ b/lib/gitlab/import_export/project_tree_saver.rb
@@ -20,7 +20,8 @@ module Gitlab
project_tree = serialize_project_tree
fix_project_tree(project_tree)
- File.write(full_path, project_tree.to_json)
+ project_tree_json = JSON.generate(project_tree)
+ File.write(full_path, project_tree_json)
true
rescue => e
@@ -30,6 +31,8 @@ module Gitlab
private
+ # Aware that the resulting hash needs to be pure-hash and
+ # does not include any AR objects anymore, only objects that run `.to_json`
def fix_project_tree(project_tree)
if @params[:description].present?
project_tree['description'] = @params[:description]
diff --git a/lib/gitlab/import_export/relation_factory.rb b/lib/gitlab/import_export/relation_factory.rb
index 1e9dff405c5..cb85af91f75 100644
--- a/lib/gitlab/import_export/relation_factory.rb
+++ b/lib/gitlab/import_export/relation_factory.rb
@@ -34,13 +34,13 @@ module Gitlab
PROJECT_REFERENCES = %w[project_id source_project_id target_project_id].freeze
- BUILD_MODELS = %w[Ci::Build commit_status].freeze
+ BUILD_MODELS = %i[Ci::Build commit_status].freeze
IMPORTED_OBJECT_MAX_RETRIES = 5.freeze
- EXISTING_OBJECT_CHECK = %i[milestone milestones label labels project_label project_labels group_label group_labels project_feature].freeze
+ EXISTING_OBJECT_CHECK = %i[milestone milestones label labels project_label project_labels group_label group_labels project_feature merge_request].freeze
- TOKEN_RESET_MODELS = %w[Project Namespace Ci::Trigger Ci::Build Ci::Runner ProjectHook].freeze
+ TOKEN_RESET_MODELS = %i[Project Namespace Ci::Trigger Ci::Build Ci::Runner ProjectHook].freeze
def self.create(*args)
new(*args).create
@@ -55,10 +55,11 @@ module Gitlab
relation_name.to_s.constantize
end
- def initialize(relation_sym:, relation_hash:, members_mapper:, user:, project:, excluded_keys: [])
- @relation_name = self.class.overrides[relation_sym] || relation_sym
+ def initialize(relation_sym:, relation_hash:, members_mapper:, merge_requests_mapping:, user:, project:, excluded_keys: [])
+ @relation_name = self.class.overrides[relation_sym]&.to_sym || relation_sym
@relation_hash = relation_hash.except('noteable_id')
@members_mapper = members_mapper
+ @merge_requests_mapping = merge_requests_mapping
@user = user
@project = project
@imported_object_retries = 0
@@ -92,6 +93,10 @@ module Gitlab
OVERRIDES
end
+ def self.existing_object_check
+ EXISTING_OBJECT_CHECK
+ end
+
private
def setup_models
@@ -105,7 +110,10 @@ module Gitlab
update_group_references
remove_duplicate_assignees
- setup_pipeline if @relation_name == 'Ci::Pipeline'
+ if @relation_name == :'Ci::Pipeline'
+ update_merge_request_references
+ setup_pipeline
+ end
reset_tokens!
remove_encrypted_attributes!
@@ -184,14 +192,36 @@ module Gitlab
end
def update_group_references
- return unless EXISTING_OBJECT_CHECK.include?(@relation_name)
+ return unless self.class.existing_object_check.include?(@relation_name)
return unless @relation_hash['group_id']
@relation_hash['group_id'] = @project.namespace_id
end
+ # This code is a workaround for broken project exports that don't
+ # export merge requests with CI pipelines (i.e. exports that were
+ # generated from
+ # https://gitlab.com/gitlab-org/gitlab/merge_requests/17844).
+ # This method can be removed in GitLab 12.6.
+ def update_merge_request_references
+ # If a merge request was properly created, we don't need to fix
+ # up this export.
+ return if @relation_hash['merge_request']
+
+ merge_request_id = @relation_hash['merge_request_id']
+
+ return unless merge_request_id
+
+ new_merge_request_id = @merge_requests_mapping[merge_request_id]
+
+ return unless new_merge_request_id
+
+ @relation_hash['merge_request_id'] = new_merge_request_id
+ parsed_relation_hash['merge_request_id'] = new_merge_request_id
+ end
+
def reset_tokens!
- return unless Gitlab::ImportExport.reset_tokens? && TOKEN_RESET_MODELS.include?(@relation_name.to_s)
+ return unless Gitlab::ImportExport.reset_tokens? && TOKEN_RESET_MODELS.include?(@relation_name)
# If we import/export a project to the same instance, tokens will have to be reset.
# We also have to reset them to avoid issues when the gitlab secrets file cannot be copied across.
@@ -255,14 +285,18 @@ module Gitlab
# Only find existing records to avoid mapping tables such as milestones
# Otherwise always create the record, skipping the extra SELECT clause.
@existing_or_new_object ||= begin
- if EXISTING_OBJECT_CHECK.include?(@relation_name)
+ if self.class.existing_object_check.include?(@relation_name)
attribute_hash = attribute_hash_for(['events'])
existing_object.assign_attributes(attribute_hash) if attribute_hash.any?
existing_object
else
- relation_class.new(parsed_relation_hash)
+ object = relation_class.new
+
+ # Use #assign_attributes here to call object custom setters
+ object.assign_attributes(parsed_relation_hash)
+ object
end
end
end
@@ -284,21 +318,27 @@ module Gitlab
end
def legacy_trigger?
- @relation_name == 'Ci::Trigger' && @relation_hash['owner_id'].nil?
+ @relation_name == :'Ci::Trigger' && @relation_hash['owner_id'].nil?
end
def find_or_create_object!
return relation_class.find_or_create_by(project_id: @project.id) if @relation_name == :project_feature
+ return find_or_create_merge_request! if @relation_name == :merge_request
# Can't use IDs as validation exists calling `group` or `project` attributes
finder_hash = parsed_relation_hash.tap do |hash|
hash['group'] = @project.group if relation_class.attribute_method?('group_id')
- hash['project'] = @project
+ hash['project'] = @project if relation_class.reflect_on_association(:project)
hash.delete('project_id')
end
GroupProjectObjectBuilder.build(relation_class, finder_hash)
end
+
+ def find_or_create_merge_request!
+ @project.merge_requests.find_by(iid: parsed_relation_hash['iid']) ||
+ relation_class.new(parsed_relation_hash)
+ end
end
end
end
diff --git a/lib/gitlab/import_export/repo_restorer.rb b/lib/gitlab/import_export/repo_restorer.rb
index 91167a9c4fb..3123687453f 100644
--- a/lib/gitlab/import_export/repo_restorer.rb
+++ b/lib/gitlab/import_export/repo_restorer.rb
@@ -6,19 +6,23 @@ module Gitlab
include Gitlab::ImportExport::CommandLineUtil
def initialize(project:, shared:, path_to_bundle:)
- @project = project
+ @repository = project.repository
@path_to_bundle = path_to_bundle
@shared = shared
end
def restore
- return true unless File.exist?(@path_to_bundle)
+ return true unless File.exist?(path_to_bundle)
- @project.repository.create_from_bundle(@path_to_bundle)
+ repository.create_from_bundle(path_to_bundle)
rescue => e
- @shared.error(e)
+ shared.error(e)
false
end
+
+ private
+
+ attr_accessor :repository, :path_to_bundle, :shared
end
end
end
diff --git a/lib/gitlab/import_export/repo_saver.rb b/lib/gitlab/import_export/repo_saver.rb
index a60618dfcec..898cd7898ba 100644
--- a/lib/gitlab/import_export/repo_saver.rb
+++ b/lib/gitlab/import_export/repo_saver.rb
@@ -5,27 +5,35 @@ module Gitlab
class RepoSaver
include Gitlab::ImportExport::CommandLineUtil
- attr_reader :full_path
+ attr_reader :project, :repository, :shared
def initialize(project:, shared:)
@project = project
@shared = shared
+ @repository = @project.repository
end
def save
- return true if @project.empty_repo? # it's ok to have no repo
+ return true unless repository_exists? # it's ok to have no repo
- @full_path = File.join(@shared.export_path, ImportExport.project_bundle_filename)
bundle_to_disk
end
private
+ def repository_exists?
+ repository.exists? && !repository.empty?
+ end
+
+ def bundle_full_path
+ File.join(shared.export_path, ImportExport.project_bundle_filename)
+ end
+
def bundle_to_disk
- mkdir_p(@shared.export_path)
- @project.repository.bundle_to_disk(@full_path)
+ mkdir_p(shared.export_path)
+ repository.bundle_to_disk(bundle_full_path)
rescue => e
- @shared.error(e)
+ shared.error(e)
false
end
end
diff --git a/lib/gitlab/import_export/shared.rb b/lib/gitlab/import_export/shared.rb
index 725c1101d70..02d46a1f498 100644
--- a/lib/gitlab/import_export/shared.rb
+++ b/lib/gitlab/import_export/shared.rb
@@ -1,10 +1,32 @@
# frozen_string_literal: true
-
+#
+# This class encapsulates the directories used by project import/export:
+#
+# 1. The project export job first generates the project metadata tree
+# (e.g. `project.json) and repository bundle (e.g. `project.bundle`)
+# inside a temporary `export_path`
+# (e.g. /path/to/shared/tmp/project_exports/namespace/project/:randomA/:randomB).
+#
+# 2. The job then creates a tarball (e.g. `project.tar.gz`) in
+# `archive_path` (e.g. /path/to/shared/tmp/project_exports/namespace/project/:randomA).
+# CarrierWave moves this tarball files into its permanent location.
+#
+# 3. Lock files are used to indicate whether a project is in the
+# `after_export` state. These are stored in a directory
+# (e.g. /path/to/shared/tmp/project_exports/namespace/project/locks. The
+# number of lock files present signifies how many concurrent project
+# exports are running. Note that this assumes the temporary directory
+# is a shared mount:
+# https://gitlab.com/gitlab-org/gitlab/issues/32203
+#
+# NOTE: Stale files should be cleaned up via ImportExportCleanupService.
module Gitlab
module ImportExport
class Shared
attr_reader :errors, :project
+ LOCKS_DIRECTORY = 'locks'
+
def initialize(project)
@project = project
@errors = []
@@ -12,20 +34,31 @@ module Gitlab
end
def active_export_count
- Dir[File.join(archive_path, '*')].count { |name| File.directory?(name) }
+ Dir[File.join(base_path, '*')].count { |name| File.basename(name) != LOCKS_DIRECTORY && File.directory?(name) }
end
+ # The path where the project metadata and repository bundle is saved
def export_path
@export_path ||= Gitlab::ImportExport.export_path(relative_path: relative_path)
end
+ # The path where the tarball is saved
def archive_path
@archive_path ||= Gitlab::ImportExport.export_path(relative_path: relative_archive_path)
end
+ def base_path
+ @base_path ||= Gitlab::ImportExport.export_path(relative_path: relative_base_path)
+ end
+
+ def lock_files_path
+ @locks_files_path ||= File.join(base_path, LOCKS_DIRECTORY)
+ end
+
def error(error)
- log_error(message: error.message, caller: caller[0].dup)
- log_debug(backtrace: error.backtrace&.join("\n"))
+ error_payload = { message: error.message }
+ error_payload[:error_backtrace] = Gitlab::Profiler.clean_backtrace(error.backtrace) if error.backtrace
+ log_error(error_payload)
Gitlab::Sentry.track_acceptable_exception(error, extra: log_base_data)
@@ -37,16 +70,24 @@ module Gitlab
end
def after_export_in_progress?
- File.exist?(after_export_lock_file)
+ locks_present?
+ end
+
+ def locks_present?
+ Dir.exist?(lock_files_path) && !Dir.empty?(lock_files_path)
end
private
def relative_path
- File.join(relative_archive_path, SecureRandom.hex)
+ @relative_path ||= File.join(relative_archive_path, SecureRandom.hex)
end
def relative_archive_path
+ @relative_archive_path ||= File.join(@project.disk_path, SecureRandom.hex)
+ end
+
+ def relative_base_path
@project.disk_path
end
@@ -70,10 +111,6 @@ module Gitlab
def filtered_error_message(message)
Projects::ImportErrorFilter.filter_message(message)
end
-
- def after_export_lock_file
- AfterExportStrategies::BaseAfterExportStrategy.lock_file_path(project)
- end
end
end
end
diff --git a/lib/gitlab/import_export/uploads_manager.rb b/lib/gitlab/import_export/uploads_manager.rb
index e232198150a..dca8e3a7449 100644
--- a/lib/gitlab/import_export/uploads_manager.rb
+++ b/lib/gitlab/import_export/uploads_manager.rb
@@ -68,7 +68,7 @@ module Gitlab
yield(@project.avatar)
else
project_uploads_except_avatar(avatar_path).find_each(batch_size: UPLOADS_BATCH_SIZE) do |upload|
- yield(upload.build_uploader)
+ yield(upload.retrieve_uploader)
end
end
end
diff --git a/lib/gitlab/import_export/wiki_repo_saver.rb b/lib/gitlab/import_export/wiki_repo_saver.rb
index 7303bcf61a4..93ae6f6b02a 100644
--- a/lib/gitlab/import_export/wiki_repo_saver.rb
+++ b/lib/gitlab/import_export/wiki_repo_saver.rb
@@ -4,28 +4,16 @@ module Gitlab
module ImportExport
class WikiRepoSaver < RepoSaver
def save
- @wiki = ProjectWiki.new(@project)
- return true unless wiki_repository_exists? # it's okay to have no Wiki
+ wiki = ProjectWiki.new(project)
+ @repository = wiki.repository
- bundle_to_disk(File.join(@shared.export_path, project_filename))
- end
-
- def bundle_to_disk(full_path)
- mkdir_p(@shared.export_path)
- @wiki.repository.bundle_to_disk(full_path)
- rescue => e
- @shared.error(e)
- false
+ super
end
private
- def project_filename
- "project.wiki.bundle"
- end
-
- def wiki_repository_exists?
- @wiki.repository.exists? && !@wiki.repository.empty?
+ def bundle_full_path
+ File.join(shared.export_path, ImportExport.wiki_repo_bundle_filename)
end
end
end
diff --git a/lib/gitlab/import_export/wiki_restorer.rb b/lib/gitlab/import_export/wiki_restorer.rb
index 28b5e7449cd..359ba8ba769 100644
--- a/lib/gitlab/import_export/wiki_restorer.rb
+++ b/lib/gitlab/import_export/wiki_restorer.rb
@@ -6,19 +6,22 @@ module Gitlab
def initialize(project:, shared:, path_to_bundle:, wiki_enabled:)
super(project: project, shared: shared, path_to_bundle: path_to_bundle)
+ @project = project
@wiki_enabled = wiki_enabled
end
def restore
- @project.wiki if create_empty_wiki?
+ project.wiki if create_empty_wiki?
super
end
private
+ attr_accessor :project, :wiki_enabled
+
def create_empty_wiki?
- !File.exist?(@path_to_bundle) && @wiki_enabled
+ !File.exist?(path_to_bundle) && wiki_enabled
end
end
end
diff --git a/lib/gitlab/jira/http_client.rb b/lib/gitlab/jira/http_client.rb
index 11a33a7b358..0c8b509740c 100644
--- a/lib/gitlab/jira/http_client.rb
+++ b/lib/gitlab/jira/http_client.rb
@@ -4,7 +4,7 @@ module Gitlab
module Jira
# Gitlab JIRA HTTP client to be used with jira-ruby gem, this subclasses JIRA::HTTPClient.
# Uses Gitlab::HTTP to make requests to JIRA REST API.
- # The parent class implementation can be found at: https://github.com/sumoheavy/jira-ruby/blob/v1.4.0/lib/jira/http_client.rb
+ # The parent class implementation can be found at: https://github.com/sumoheavy/jira-ruby/blob/v1.7.0/lib/jira/http_client.rb
class HttpClient < JIRA::HttpClient
extend ::Gitlab::Utils::Override
@@ -24,7 +24,7 @@ module Gitlab
password: @options.delete(:password)
}.to_json
- make_request(:post, @options[:context_path] + '/rest/auth/1/session', body, { 'Content-Type' => 'application/json' })
+ make_request(:post, @options[:context_path] + '/rest/auth/1/session', body, 'Content-Type' => 'application/json')
end
override :make_request
diff --git a/lib/gitlab/kubernetes/helm/client_command.rb b/lib/gitlab/kubernetes/helm/client_command.rb
index 6ae68306a9b..a3f732e1283 100644
--- a/lib/gitlab/kubernetes/helm/client_command.rb
+++ b/lib/gitlab/kubernetes/helm/client_command.rb
@@ -17,7 +17,8 @@ module Gitlab
# This is necessary to give Tiller time to restart after upgrade.
# Ideally we'd be able to use --wait but cannot because of
# https://github.com/helm/helm/issues/4855
- "for i in $(seq 1 30); do #{helm_check} && break; sleep 1s; echo \"Retrying ($i)...\"; done"
+
+ "for i in $(seq 1 30); do #{helm_check} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)"
end
def repository_command
diff --git a/lib/gitlab/kubernetes/helm/reset_command.rb b/lib/gitlab/kubernetes/helm/reset_command.rb
index c8349639ec3..13176360227 100644
--- a/lib/gitlab/kubernetes/helm/reset_command.rb
+++ b/lib/gitlab/kubernetes/helm/reset_command.rb
@@ -18,7 +18,8 @@ module Gitlab
def generate_script
super + [
reset_helm_command,
- delete_tiller_replicaset
+ delete_tiller_replicaset,
+ delete_tiller_clusterrolebinding
].join("\n")
end
@@ -43,6 +44,12 @@ module Gitlab
Gitlab::Kubernetes::KubectlCmd.delete(*delete_args)
end
+ def delete_tiller_clusterrolebinding
+ delete_args = %w[clusterrolebinding tiller-admin]
+
+ Gitlab::Kubernetes::KubectlCmd.delete(*delete_args)
+ end
+
def reset_helm_command
command = %w[helm reset] + optional_tls_flags
diff --git a/lib/gitlab/kubernetes/kube_client.rb b/lib/gitlab/kubernetes/kube_client.rb
index 64317225ec6..66c28a9b702 100644
--- a/lib/gitlab/kubernetes/kube_client.rb
+++ b/lib/gitlab/kubernetes/kube_client.rb
@@ -39,7 +39,9 @@ module Gitlab
:get_secret,
:get_service,
:get_service_account,
+ :delete_namespace,
:delete_pod,
+ :delete_service_account,
:create_config_map,
:create_namespace,
:create_pod,
diff --git a/lib/gitlab/legacy_github_import/release_formatter.rb b/lib/gitlab/legacy_github_import/release_formatter.rb
index fdab6b512ea..a083ae60726 100644
--- a/lib/gitlab/legacy_github_import/release_formatter.rb
+++ b/lib/gitlab/legacy_github_import/release_formatter.rb
@@ -10,7 +10,8 @@ module Gitlab
name: raw_data.name,
description: raw_data.body,
created_at: raw_data.created_at,
- released_at: raw_data.published_at,
+ # Draft releases will have a null published_at
+ released_at: raw_data.published_at || Time.current,
updated_at: raw_data.created_at
}
end
diff --git a/lib/gitlab/lets_encrypt.rb b/lib/gitlab/lets_encrypt.rb
index 08ad2ab91b0..9d14b151f7d 100644
--- a/lib/gitlab/lets_encrypt.rb
+++ b/lib/gitlab/lets_encrypt.rb
@@ -5,5 +5,9 @@ module Gitlab
def self.enabled?
Gitlab::CurrentSettings.lets_encrypt_terms_of_service_accepted
end
+
+ def self.terms_of_service_url
+ ::Gitlab::LetsEncrypt::Client.new.terms_of_service_url
+ end
end
end
diff --git a/lib/gitlab/lfs_token.rb b/lib/gitlab/lfs_token.rb
index 124e34562c1..e90f3f05a33 100644
--- a/lib/gitlab/lfs_token.rb
+++ b/lib/gitlab/lfs_token.rb
@@ -34,8 +34,11 @@ module Gitlab
HMACToken.new(actor).token(DEFAULT_EXPIRE_TIME)
end
+ # When the token is an lfs one and the actor
+ # is blocked or the password has been changed,
+ # the token is no longer valid
def token_valid?(token_to_check)
- HMACToken.new(actor).token_valid?(token_to_check)
+ HMACToken.new(actor).token_valid?(token_to_check) && valid_user?
end
def deploy_key_pushable?(project)
@@ -46,6 +49,12 @@ module Gitlab
user? ? :lfs_token : :lfs_deploy_token
end
+ def valid_user?
+ return true unless user?
+
+ !actor.blocked? && (!actor.allow_password_authentication? || !actor.password_expired?)
+ end
+
def authentication_payload(repository_http_path)
{
username: actor_name,
@@ -55,6 +64,10 @@ module Gitlab
}
end
+ def basic_encoding
+ ActionController::HttpAuthentication::Basic.encode_credentials(actor_name, token)
+ end
+
private # rubocop:disable Lint/UselessAccessModifier
class HMACToken
diff --git a/lib/gitlab/metrics/dashboard/finder.rb b/lib/gitlab/metrics/dashboard/finder.rb
index c3169418371..297f109ff81 100644
--- a/lib/gitlab/metrics/dashboard/finder.rb
+++ b/lib/gitlab/metrics/dashboard/finder.rb
@@ -20,13 +20,17 @@ module Gitlab
# @param options - dashboard_path [String] Path at which the
# dashboard can be found. Nil values will
# default to the system dashboard.
- # @param options - group [String] Title of the group
+ # @param options - group [String, Group] Title of the group
# to which a panel might belong. Used by
- # embedded dashboards.
+ # embedded dashboards. If cluster dashboard,
+ # refers to the Group corresponding to the cluster.
# @param options - title [String] Title of the panel.
# Used by embedded dashboards.
# @param options - y_label [String] Y-Axis label of
# a panel. Used by embedded dashboards.
+ # @param options - cluster [Cluster]
+ # @param options - cluster_type [Symbol] The level of
+ # cluster, one of [:admin, :project, :group]
# @return [Hash]
def find(project, user, options = {})
service_for(options)
diff --git a/lib/gitlab/metrics/exporter/base_exporter.rb b/lib/gitlab/metrics/exporter/base_exporter.rb
new file mode 100644
index 00000000000..7111835c85a
--- /dev/null
+++ b/lib/gitlab/metrics/exporter/base_exporter.rb
@@ -0,0 +1,93 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Metrics
+ module Exporter
+ class BaseExporter < Daemon
+ attr_reader :server
+
+ attr_accessor :readiness_checks
+
+ def enabled?
+ settings.enabled
+ end
+
+ def settings
+ raise NotImplementedError
+ end
+
+ def log_filename
+ raise NotImplementedError
+ end
+
+ private
+
+ def start_working
+ logger = WEBrick::Log.new(log_filename)
+ logger.time_format = "[%Y-%m-%dT%H:%M:%S.%L%z]"
+
+ access_log = [
+ [logger, WEBrick::AccessLog::COMBINED_LOG_FORMAT]
+ ]
+
+ @server = ::WEBrick::HTTPServer.new(
+ Port: settings.port, BindAddress: settings.address,
+ Logger: logger, AccessLog: access_log)
+ server.mount_proc '/readiness' do |req, res|
+ render_probe(readiness_probe, req, res)
+ end
+ server.mount_proc '/liveness' do |req, res|
+ render_probe(liveness_probe, req, res)
+ end
+ server.mount '/', Rack::Handler::WEBrick, rack_app
+
+ true
+ end
+
+ def run_thread
+ server&.start
+ rescue IOError
+ # ignore forcibily closed servers
+ end
+
+ def stop_working
+ if server
+ # we close sockets if thread is not longer running
+ # this happens, when the process forks
+ if thread.alive?
+ server.shutdown
+ else
+ server.listeners.each(&:close)
+ end
+ end
+
+ @server = nil
+ end
+
+ def rack_app
+ Rack::Builder.app do
+ use Rack::Deflater
+ use ::Prometheus::Client::Rack::Exporter if ::Gitlab::Metrics.metrics_folder_present?
+ run -> (env) { [404, {}, ['']] }
+ end
+ end
+
+ def readiness_probe
+ ::Gitlab::HealthChecks::Probes::Collection.new(*readiness_checks)
+ end
+
+ def liveness_probe
+ ::Gitlab::HealthChecks::Probes::Collection.new
+ end
+
+ def render_probe(probe, req, res)
+ result = probe.execute
+
+ res.status = result.http_status
+ res.content_type = 'application/json; charset=utf-8'
+ res.body = result.json.to_json
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/metrics/exporter/sidekiq_exporter.rb b/lib/gitlab/metrics/exporter/sidekiq_exporter.rb
new file mode 100644
index 00000000000..5ba7b29734b
--- /dev/null
+++ b/lib/gitlab/metrics/exporter/sidekiq_exporter.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'webrick'
+require 'prometheus/client/rack/exporter'
+
+module Gitlab
+ module Metrics
+ module Exporter
+ class SidekiqExporter < BaseExporter
+ def settings
+ Settings.monitoring.sidekiq_exporter
+ end
+
+ def log_filename
+ File.join(Rails.root, 'log', 'sidekiq_exporter.log')
+ end
+
+ private
+
+ # Sidekiq Exporter does not work properly in sidekiq-cluster
+ # mode. It tries to start the service on the same port for
+ # each of the cluster workers, this results in failure
+ # due to duplicate binding.
+ #
+ # For now we ignore this error, as metrics are still "kind of"
+ # valid as they are rendered from shared directory.
+ #
+ # Issue: https://gitlab.com/gitlab-org/gitlab/issues/5714
+ def start_working
+ super
+ rescue Errno::EADDRINUSE => e
+ Sidekiq.logger.error(
+ class: self.class.to_s,
+ message: 'Cannot start sidekiq_exporter',
+ exception: e.message
+ )
+
+ false
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/metrics/exporter/web_exporter.rb b/lib/gitlab/metrics/exporter/web_exporter.rb
new file mode 100644
index 00000000000..3940f6fa155
--- /dev/null
+++ b/lib/gitlab/metrics/exporter/web_exporter.rb
@@ -0,0 +1,67 @@
+# frozen_string_literal: true
+
+require 'webrick'
+require 'prometheus/client/rack/exporter'
+
+module Gitlab
+ module Metrics
+ module Exporter
+ class WebExporter < BaseExporter
+ ExporterCheck = Struct.new(:exporter) do
+ def readiness
+ Gitlab::HealthChecks::Result.new(
+ 'web_exporter', exporter.running)
+ end
+ end
+
+ attr_reader :running
+
+ # This exporter is always run on master process
+ def initialize
+ super
+
+ self.readiness_checks = [
+ WebExporter::ExporterCheck.new(self),
+ Gitlab::HealthChecks::PumaCheck,
+ Gitlab::HealthChecks::UnicornCheck
+ ]
+ end
+
+ def settings
+ Gitlab.config.monitoring.web_exporter
+ end
+
+ def log_filename
+ File.join(Rails.root, 'log', 'web_exporter.log')
+ end
+
+ private
+
+ def start_working
+ @running = true
+ super
+ end
+
+ def stop_working
+ @running = false
+ wait_in_blackout_period if server && thread.alive?
+ super
+ end
+
+ def wait_in_blackout_period
+ return unless blackout_seconds > 0
+
+ @server.logger.info(
+ message: 'starting blackout...',
+ duration_s: blackout_seconds)
+
+ sleep(blackout_seconds)
+ end
+
+ def blackout_seconds
+ settings['blackout_seconds'].to_i
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/metrics/requests_rack_middleware.rb b/lib/gitlab/metrics/requests_rack_middleware.rb
index 26aa0910047..46477587934 100644
--- a/lib/gitlab/metrics/requests_rack_middleware.rb
+++ b/lib/gitlab/metrics/requests_rack_middleware.rb
@@ -3,6 +3,18 @@
module Gitlab
module Metrics
class RequestsRackMiddleware
+ HTTP_METHODS = {
+ "delete" => %w(200 202 204 303 400 401 403 404 410 422 500 503),
+ "get" => %w(200 204 301 302 303 304 307 400 401 403 404 410 412 422 429 500 503),
+ "head" => %w(200 204 301 302 303 304 400 401 403 404 410 429 500 503),
+ "options" => %w(200 404),
+ "patch" => %w(200 202 204 400 403 404 409 416 422 500),
+ "post" => %w(200 201 202 204 301 302 303 304 400 401 403 404 406 409 410 412 413 415 422 429 500 503),
+ "propfind" => %w(404),
+ "put" => %w(200 202 204 400 401 403 404 405 406 409 410 415 422 500),
+ "report" => %w(404)
+ }.freeze
+
def initialize(app)
@app = app
end
@@ -20,6 +32,14 @@ module Gitlab
{}, [0.05, 0.1, 0.25, 0.5, 0.7, 1, 2.5, 5, 10, 25])
end
+ def self.initialize_http_request_duration_seconds
+ HTTP_METHODS.each do |method, statuses|
+ statuses.each do |status|
+ http_request_duration_seconds.get({ method: method, status: status })
+ end
+ end
+ end
+
def call(env)
method = env['REQUEST_METHOD'].downcase
started = Time.now.to_f
diff --git a/lib/gitlab/metrics/samplers/base_sampler.rb b/lib/gitlab/metrics/samplers/base_sampler.rb
index d7d848d2833..90051f85f31 100644
--- a/lib/gitlab/metrics/samplers/base_sampler.rb
+++ b/lib/gitlab/metrics/samplers/base_sampler.rb
@@ -50,6 +50,11 @@ module Gitlab
def start_working
@running = true
+
+ true
+ end
+
+ def run_thread
sleep(sleep_interval)
while running
safe_sample
diff --git a/lib/gitlab/metrics/samplers/puma_sampler.rb b/lib/gitlab/metrics/samplers/puma_sampler.rb
index 8a24d4f3663..f788f51b1ce 100644
--- a/lib/gitlab/metrics/samplers/puma_sampler.rb
+++ b/lib/gitlab/metrics/samplers/puma_sampler.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'puma/state_file'
-
module Gitlab
module Metrics
module Samplers
diff --git a/lib/gitlab/metrics/sidekiq_metrics_exporter.rb b/lib/gitlab/metrics/sidekiq_metrics_exporter.rb
deleted file mode 100644
index 71a5406815f..00000000000
--- a/lib/gitlab/metrics/sidekiq_metrics_exporter.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'webrick'
-require 'prometheus/client/rack/exporter'
-
-module Gitlab
- module Metrics
- class SidekiqMetricsExporter < Daemon
- LOG_FILENAME = File.join(Rails.root, 'log', 'sidekiq_exporter.log')
-
- def enabled?
- ::Gitlab::Metrics.metrics_folder_present? && settings.enabled
- end
-
- def settings
- Settings.monitoring.sidekiq_exporter
- end
-
- private
-
- attr_reader :server
-
- def start_working
- logger = WEBrick::Log.new(LOG_FILENAME)
- access_log = [
- [logger, WEBrick::AccessLog::COMBINED_LOG_FORMAT]
- ]
-
- @server = ::WEBrick::HTTPServer.new(Port: settings.port, BindAddress: settings.address,
- Logger: logger, AccessLog: access_log)
- server.mount "/", Rack::Handler::WEBrick, rack_app
- server.start
- end
-
- def stop_working
- server.shutdown if server
- @server = nil
- end
-
- def rack_app
- Rack::Builder.app do
- use Rack::Deflater
- use ::Prometheus::Client::Rack::Exporter
- run -> (env) { [404, {}, ['']] }
- end
- end
- end
- end
-end
diff --git a/lib/gitlab/metrics/system.rb b/lib/gitlab/metrics/system.rb
index 51f48095cb5..2a61b3de405 100644
--- a/lib/gitlab/metrics/system.rb
+++ b/lib/gitlab/metrics/system.rb
@@ -63,6 +63,21 @@ module Gitlab
def self.monotonic_time
Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_second)
end
+
+ def self.thread_cpu_time
+ # Not all OS kernels are supporting `Process::CLOCK_THREAD_CPUTIME_ID`
+ # Refer: https://gitlab.com/gitlab-org/gitlab/issues/30567#note_221765627
+ return unless defined?(Process::CLOCK_THREAD_CPUTIME_ID)
+
+ Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID, :float_second)
+ end
+
+ def self.thread_cpu_duration(start_time)
+ end_time = thread_cpu_time
+ return unless start_time && end_time
+
+ end_time - start_time
+ end
end
end
end
diff --git a/lib/gitlab/metrics/transaction.rb b/lib/gitlab/metrics/transaction.rb
index ba2a0b2ecf8..115368c8bc6 100644
--- a/lib/gitlab/metrics/transaction.rb
+++ b/lib/gitlab/metrics/transaction.rb
@@ -44,6 +44,10 @@ module Gitlab
duration.in_milliseconds.to_i
end
+ def thread_cpu_duration
+ System.thread_cpu_duration(@thread_cputime_start)
+ end
+
def allocated_memory
@memory_after - @memory_before
end
@@ -53,12 +57,14 @@ module Gitlab
@memory_before = System.memory_usage
@started_at = System.monotonic_time
+ @thread_cputime_start = System.thread_cpu_time
yield
ensure
@memory_after = System.memory_usage
@finished_at = System.monotonic_time
+ self.class.gitlab_transaction_cputime_seconds.observe(labels, thread_cpu_duration)
self.class.gitlab_transaction_duration_seconds.observe(labels, duration)
self.class.gitlab_transaction_allocated_memory_bytes.observe(labels, allocated_memory * 1024.0)
@@ -142,6 +148,12 @@ module Gitlab
"#{labels[:controller]}##{labels[:action]}" if labels && !labels.empty?
end
+ define_histogram :gitlab_transaction_cputime_seconds do
+ docstring 'Transaction thread cputime'
+ base_labels BASE_LABELS
+ buckets [0.1, 0.25, 0.5, 1.0, 2.5, 5.0]
+ end
+
define_histogram :gitlab_transaction_duration_seconds do
docstring 'Transaction duration'
base_labels BASE_LABELS
diff --git a/lib/gitlab/middleware/read_only/controller.rb b/lib/gitlab/middleware/read_only/controller.rb
index a29dc5395f3..b18f0eed1fa 100644
--- a/lib/gitlab/middleware/read_only/controller.rb
+++ b/lib/gitlab/middleware/read_only/controller.rb
@@ -20,6 +20,12 @@ module Gitlab
'projects/lfs_locks_api' => %w{verify create unlock}
}.freeze
+ WHITELISTED_GIT_REVISION_ROUTES = {
+ 'projects/compare' => %w{create}
+ }.freeze
+
+ GRAPHQL_URL = '/api/graphql'
+
def initialize(app, env)
@app = app
@env = env
@@ -79,7 +85,7 @@ module Gitlab
# Overridden in EE module
def whitelisted_routes
- grack_route? || internal_route? || lfs_route? || sidekiq_route?
+ grack_route? || internal_route? || lfs_route? || compare_git_revisions_route? || sidekiq_route? || graphql_query?
end
def grack_route?
@@ -94,6 +100,13 @@ module Gitlab
ReadOnly.internal_routes.any? { |path| request.path.include?(path) }
end
+ def compare_git_revisions_route?
+ # Calling route_hash may be expensive. Only do it if we think there's a possible match
+ return false unless request.post? && request.path.end_with?('compare')
+
+ WHITELISTED_GIT_REVISION_ROUTES[route_hash[:controller]]&.include?(route_hash[:action])
+ end
+
def lfs_route?
# Calling route_hash may be expensive. Only do it if we think there's a possible match
unless request.path.end_with?('/info/lfs/objects/batch',
@@ -108,6 +121,10 @@ module Gitlab
def sidekiq_route?
request.path.start_with?("#{relative_url}/admin/sidekiq")
end
+
+ def graphql_query?
+ request.post? && request.path.start_with?(GRAPHQL_URL)
+ end
end
end
end
diff --git a/lib/gitlab/pages_client.rb b/lib/gitlab/pages_client.rb
deleted file mode 100644
index 30a1f9ede25..00000000000
--- a/lib/gitlab/pages_client.rb
+++ /dev/null
@@ -1,119 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- class PagesClient
- class << self
- attr_reader :certificate, :token
-
- def call(service, rpc, request, timeout: nil)
- kwargs = request_kwargs(timeout)
- stub(service).__send__(rpc, request, kwargs) # rubocop:disable GitlabSecurity/PublicSend
- end
-
- # This function is not thread-safe. Call it from an initializer only.
- def read_or_create_token
- @token = read_token
- rescue Errno::ENOENT
- # TODO: uncomment this when omnibus knows how to write the token file for us
- # https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/2466
- #
- # write_token(SecureRandom.random_bytes(64))
- #
- # # Read from disk in case someone else won the race and wrote the file
- # # before us. If this fails again let the exception bubble up.
- # @token = read_token
- end
-
- # This function is not thread-safe. Call it from an initializer only.
- def load_certificate
- cert_path = config.certificate
- return unless cert_path.present?
-
- @certificate = File.read(cert_path)
- end
-
- def ping
- request = Grpc::Health::V1::HealthCheckRequest.new
- call(:health_check, :check, request, timeout: 5.seconds)
- end
-
- private
-
- def request_kwargs(timeout)
- encoded_token = Base64.strict_encode64(token.to_s)
- metadata = {
- 'authorization' => "Bearer #{encoded_token}"
- }
-
- result = { metadata: metadata }
-
- return result unless timeout
-
- # Do not use `Time.now` for deadline calculation, since it
- # will be affected by Timecop in some tests, but grpc's c-core
- # uses system time instead of timecop's time, so tests will fail
- # `Time.at(Process.clock_gettime(Process::CLOCK_REALTIME))` will
- # circumvent timecop
- deadline = Time.at(Process.clock_gettime(Process::CLOCK_REALTIME)) + timeout
- result[:deadline] = deadline
-
- result
- end
-
- def stub(name)
- stub_class(name).new(address, grpc_creds)
- end
-
- def stub_class(name)
- if name == :health_check
- Grpc::Health::V1::Health::Stub
- else
- # TODO use pages namespace
- Gitaly.const_get(name.to_s.camelcase.to_sym).const_get(:Stub)
- end
- end
-
- def address
- addr = config.address
- addr = addr.sub(%r{^tcp://}, '') if URI(addr).scheme == 'tcp'
- addr
- end
-
- def grpc_creds
- if address.start_with?('unix:')
- :this_channel_is_insecure
- elsif @certificate
- GRPC::Core::ChannelCredentials.new(@certificate)
- else
- # Use system certificate pool
- GRPC::Core::ChannelCredentials.new
- end
- end
-
- def config
- Gitlab.config.pages.admin
- end
-
- def read_token
- File.read(token_path)
- end
-
- def token_path
- Rails.root.join('.gitlab_pages_secret').to_s
- end
-
- def write_token(new_token)
- Tempfile.open(File.basename(token_path), File.dirname(token_path), encoding: 'ascii-8bit') do |f|
- f.write(new_token)
- f.close
- File.link(f.path, token_path)
- end
- rescue Errno::EACCES => ex
- # TODO stop rescuing this exception in GitLab 11.0 https://gitlab.com/gitlab-org/gitlab-foss/issues/45672
- Rails.logger.error("Could not write pages admin token file: #{ex}") # rubocop:disable Gitlab/RailsLogger
- rescue Errno::EEXIST
- # Another process wrote the token file concurrently with us. Use their token, not ours.
- end
- end
- end
-end
diff --git a/lib/gitlab/patch/prependable.rb b/lib/gitlab/patch/prependable.rb
index a9f6cfb19cb..22ece0a6a8b 100644
--- a/lib/gitlab/patch/prependable.rb
+++ b/lib/gitlab/patch/prependable.rb
@@ -24,7 +24,7 @@ module Gitlab
super
if const_defined?(:ClassMethods)
- klass_methods = const_get(:ClassMethods)
+ klass_methods = const_get(:ClassMethods, false)
base.singleton_class.prepend klass_methods
base.instance_variable_set(:@_prepended_class_methods, klass_methods)
end
@@ -40,7 +40,7 @@ module Gitlab
super
if instance_variable_defined?(:@_prepended_class_methods)
- const_get(:ClassMethods).prepend @_prepended_class_methods
+ const_get(:ClassMethods, false).prepend @_prepended_class_methods
end
end
diff --git a/lib/gitlab/phabricator_import/base_worker.rb b/lib/gitlab/phabricator_import/base_worker.rb
index b69c65e78f8..d2c2ef8db48 100644
--- a/lib/gitlab/phabricator_import/base_worker.rb
+++ b/lib/gitlab/phabricator_import/base_worker.rb
@@ -23,6 +23,8 @@ module Gitlab
include ProjectImportOptions # This marks the project as failed after too many tries
include Gitlab::ExclusiveLeaseHelpers
+ feature_category :importers
+
class << self
def schedule(project_id, *args)
perform_async(project_id, *args)
diff --git a/lib/gitlab/profiler.rb b/lib/gitlab/profiler.rb
index 275151f7fc1..560618bb486 100644
--- a/lib/gitlab/profiler.rb
+++ b/lib/gitlab/profiler.rb
@@ -37,8 +37,7 @@ module Gitlab
# - post_data: a string of raw POST data to use. Changes the HTTP verb to
# POST.
#
- # - user: a user to authenticate as. Only works if the user has a valid
- # personal access token.
+ # - user: a user to authenticate as.
#
# - private_token: instead of providing a user instance, the token can be
# given as a string. Takes precedence over the user option.
diff --git a/lib/gitlab/quick_actions/extractor.rb b/lib/gitlab/quick_actions/extractor.rb
index ff9bb293b47..e04d6f250b1 100644
--- a/lib/gitlab/quick_actions/extractor.rb
+++ b/lib/gitlab/quick_actions/extractor.rb
@@ -50,7 +50,7 @@ module Gitlab
content, commands = perform_substitutions(content, commands)
- [content.strip, commands]
+ [content.rstrip, commands]
end
private
@@ -109,7 +109,7 @@ module Gitlab
[ ]
(?<arg>[^\n]*)
)?
- (?:\n|$)
+ (?:\s*\n|$)
)
}mix
end
diff --git a/lib/gitlab/quick_actions/issue_actions.rb b/lib/gitlab/quick_actions/issue_actions.rb
index 7e64fe2a1f4..404e0c31871 100644
--- a/lib/gitlab/quick_actions/issue_actions.rb
+++ b/lib/gitlab/quick_actions/issue_actions.rb
@@ -135,7 +135,8 @@ module Gitlab
end
types Issue
condition do
- current_user.can?(:"admin_#{quick_action_target.to_ability_name}", quick_action_target)
+ !quick_action_target.confidential? &&
+ current_user.can?(:"admin_#{quick_action_target.to_ability_name}", quick_action_target)
end
command :confidential do
@updates[:confidential] = true
diff --git a/lib/gitlab/reference_extractor.rb b/lib/gitlab/reference_extractor.rb
index 00f817c2399..ea2b03b42c1 100644
--- a/lib/gitlab/reference_extractor.rb
+++ b/lib/gitlab/reference_extractor.rb
@@ -3,7 +3,8 @@
module Gitlab
# Extract possible GFM references from an arbitrary String for further processing.
class ReferenceExtractor < Banzai::ReferenceExtractor
- REFERABLES = %i(user issue label milestone merge_request snippet commit commit_range directly_addressed_user epic).freeze
+ REFERABLES = %i(user issue label milestone
+ merge_request snippet commit commit_range directly_addressed_user epic).freeze
attr_accessor :project, :current_user, :author
def initialize(project, current_user = nil)
@@ -54,9 +55,9 @@ module Gitlab
def self.references_pattern
return @pattern if @pattern
- patterns = REFERABLES.map do |ref|
- ref.to_s.classify.constantize.try(:reference_pattern)
- end
+ patterns = REFERABLES.map do |type|
+ Banzai::ReferenceParser[type].reference_type.to_s.classify.constantize.try(:reference_pattern)
+ end.uniq
@pattern = Regexp.union(patterns.compact)
end
diff --git a/lib/gitlab/regex.rb b/lib/gitlab/regex.rb
index 4bfa6f7e9a5..3d1f15c72ae 100644
--- a/lib/gitlab/regex.rb
+++ b/lib/gitlab/regex.rb
@@ -119,6 +119,15 @@ module Gitlab
def breakline_regex
@breakline_regex ||= /\r\n|\r|\n/
end
+
+ # https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
+ def aws_arn_regex
+ /\Aarn:\S+\z/
+ end
+
+ def aws_arn_regex_message
+ "must be a valid Amazon Resource Name"
+ end
end
end
diff --git a/lib/gitlab/request_context.rb b/lib/gitlab/request_context.rb
index ab2549d5e68..13187836e02 100644
--- a/lib/gitlab/request_context.rb
+++ b/lib/gitlab/request_context.rb
@@ -6,6 +6,10 @@ module Gitlab
def client_ip
Gitlab::SafeRequestStore[:client_ip]
end
+
+ def start_thread_cpu_time
+ Gitlab::SafeRequestStore[:start_thread_cpu_time]
+ end
end
def initialize(app)
@@ -23,6 +27,8 @@ module Gitlab
Gitlab::SafeRequestStore[:client_ip] = req.ip
+ Gitlab::SafeRequestStore[:start_thread_cpu_time] = Gitlab::Metrics::System.thread_cpu_time
+
@app.call(env)
end
end
diff --git a/lib/gitlab/sanitizers/exif.rb b/lib/gitlab/sanitizers/exif.rb
index 2f3d14ecebd..5eeb8b00ff3 100644
--- a/lib/gitlab/sanitizers/exif.rb
+++ b/lib/gitlab/sanitizers/exif.rb
@@ -68,7 +68,7 @@ module Gitlab
}
relation.find_each(find_params) do |upload|
- clean(upload.build_uploader, dry_run: dry_run)
+ clean(upload.retrieve_uploader, dry_run: dry_run)
sleep sleep_time if sleep_time
rescue => err
logger.error "failed to sanitize #{upload_ref(upload)}: #{err.message}"
diff --git a/lib/gitlab/search_results.rb b/lib/gitlab/search_results.rb
index 93e172299b9..782ac534a7b 100644
--- a/lib/gitlab/search_results.rb
+++ b/lib/gitlab/search_results.rb
@@ -2,7 +2,7 @@
module Gitlab
class SearchResults
- COUNT_LIMIT = 101
+ COUNT_LIMIT = 100
COUNT_LIMIT_MESSAGE = "#{COUNT_LIMIT - 1}+"
attr_reader :current_user, :query, :per_page
diff --git a/lib/gitlab/shell.rb b/lib/gitlab/shell.rb
index 7dbed591b84..125d0d1cfbb 100644
--- a/lib/gitlab/shell.rb
+++ b/lib/gitlab/shell.rb
@@ -113,10 +113,6 @@ module Gitlab
success
end
- # Move repository reroutes to mv_directory which is an alias for
- # mv_namespace. Given the underlying implementation is a move action,
- # indescriminate of what the folders might be.
- #
# storage - project's storage path
# path - project disk path
# new_path - new project disk path
@@ -126,7 +122,13 @@ module Gitlab
def mv_repository(storage, path, new_path)
return false if path.empty? || new_path.empty?
- !!mv_directory(storage, "#{path}.git", "#{new_path}.git")
+ Gitlab::Git::Repository.new(storage, "#{path}.git", nil, nil).rename("#{new_path}.git")
+
+ true
+ rescue => e
+ Gitlab::Sentry.track_acceptable_exception(e, extra: { path: path, new_path: new_path, storage: storage })
+
+ false
end
# Fork repository to new path
@@ -151,9 +153,13 @@ module Gitlab
def remove_repository(storage, name)
return false if name.empty?
- !!rm_directory(storage, "#{name}.git")
- rescue ArgumentError => e
+ Gitlab::Git::Repository.new(storage, "#{name}.git", nil, nil).remove
+
+ true
+ rescue => e
Rails.logger.warn("Repository does not exist: #{e} at: #{name}.git") # rubocop:disable Gitlab/RailsLogger
+ Gitlab::Sentry.track_acceptable_exception(e, extra: { path: name, storage: storage })
+
false
end
@@ -265,7 +271,6 @@ module Gitlab
false
end
- alias_method :mv_directory, :mv_namespace # Note: ShellWorker uses this alias
def url_to_repo(path)
Gitlab.config.gitlab_shell.ssh_path_prefix + "#{path}.git"
@@ -292,6 +297,12 @@ module Gitlab
end
# rubocop: enable CodeReuse/ActiveRecord
+ def repository_exists?(storage, dir_name)
+ Gitlab::Git::Repository.new(storage, dir_name, nil, nil).exists?
+ rescue GRPC::Internal
+ false
+ end
+
def hooks_path
File.join(gitlab_shell_path, 'hooks')
end
diff --git a/lib/gitlab/sidekiq_config.rb b/lib/gitlab/sidekiq_config.rb
index c102fa14cfc..ffceeb68f20 100644
--- a/lib/gitlab/sidekiq_config.rb
+++ b/lib/gitlab/sidekiq_config.rb
@@ -5,7 +5,11 @@ require 'set'
module Gitlab
module SidekiqConfig
- QUEUE_CONFIG_PATHS = %w[app/workers/all_queues.yml ee/app/workers/all_queues.yml].freeze
+ QUEUE_CONFIG_PATHS = begin
+ result = %w[app/workers/all_queues.yml]
+ result << 'ee/app/workers/all_queues.yml' if Gitlab.ee?
+ result
+ end.freeze
# This method is called by `ee/bin/sidekiq-cluster` in EE, which runs outside
# of bundler/Rails context, so we cannot use any gem or Rails methods.
@@ -48,9 +52,11 @@ module Gitlab
end
def self.workers
- @workers ||=
- find_workers(Rails.root.join('app', 'workers')) +
- find_workers(Rails.root.join('ee', 'app', 'workers'))
+ @workers ||= begin
+ result = find_workers(Rails.root.join('app', 'workers'))
+ result.concat(find_workers(Rails.root.join('ee', 'app', 'workers'))) if Gitlab.ee?
+ result
+ end
end
def self.find_workers(root)
diff --git a/lib/gitlab/sidekiq_daemon/memory_killer.rb b/lib/gitlab/sidekiq_daemon/memory_killer.rb
new file mode 100644
index 00000000000..9d0d67a488f
--- /dev/null
+++ b/lib/gitlab/sidekiq_daemon/memory_killer.rb
@@ -0,0 +1,263 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module SidekiqDaemon
+ class MemoryKiller < Daemon
+ include ::Gitlab::Utils::StrongMemoize
+
+ # Today 64-bit CPU support max 256T memory. It is big enough.
+ MAX_MEMORY_KB = 256 * 1024 * 1024 * 1024
+ # RSS below `soft_limit_rss` is considered safe
+ SOFT_LIMIT_RSS_KB = ENV.fetch('SIDEKIQ_MEMORY_KILLER_MAX_RSS', 2000000).to_i
+ # RSS above `hard_limit_rss` will be stopped
+ HARD_LIMIT_RSS_KB = ENV.fetch('SIDEKIQ_MEMORY_KILLER_HARD_LIMIT_RSS', MAX_MEMORY_KB).to_i
+ # RSS in range (soft_limit_rss, hard_limit_rss) is allowed for GRACE_BALLOON_SECONDS
+ GRACE_BALLOON_SECONDS = ENV.fetch('SIDEKIQ_MEMORY_KILLER_GRACE_TIME', 15 * 60).to_i
+ # Check RSS every CHECK_INTERVAL_SECONDS, minimum 2 seconds
+ CHECK_INTERVAL_SECONDS = [ENV.fetch('SIDEKIQ_MEMORY_KILLER_CHECK_INTERVAL', 3).to_i, 2].max
+ # Give Sidekiq up to 30 seconds to allow existing jobs to finish after exceeding the limit
+ SHUTDOWN_TIMEOUT_SECONDS = ENV.fetch('SIDEKIQ_MEMORY_KILLER_SHUTDOWN_WAIT', 30).to_i
+ # Developer/admin should always set `memory_killer_max_memory_growth_kb` explicitly
+ # In case not set, default to 300M. This is for extra-safe.
+ DEFAULT_MAX_MEMORY_GROWTH_KB = 300_000
+
+ # Phases of memory killer
+ PHASE = {
+ running: 1,
+ above_soft_limit: 2,
+ stop_fetching_new_jobs: 3,
+ shutting_down: 4,
+ killing_sidekiq: 5
+ }.freeze
+
+ def initialize
+ super
+
+ @enabled = true
+ @metrics = init_metrics
+ end
+
+ private
+
+ def init_metrics
+ {
+ sidekiq_current_rss: ::Gitlab::Metrics.gauge(:sidekiq_current_rss, 'Current RSS of Sidekiq Worker'),
+ sidekiq_memory_killer_soft_limit_rss: ::Gitlab::Metrics.gauge(:sidekiq_memory_killer_soft_limit_rss, 'Current soft_limit_rss of Sidekiq Worker'),
+ sidekiq_memory_killer_hard_limit_rss: ::Gitlab::Metrics.gauge(:sidekiq_memory_killer_hard_limit_rss, 'Current hard_limit_rss of Sidekiq Worker'),
+ sidekiq_memory_killer_phase: ::Gitlab::Metrics.gauge(:sidekiq_memory_killer_phase, 'Current phase of Sidekiq Worker')
+ }
+ end
+
+ def refresh_state(phase)
+ @phase = PHASE.fetch(phase)
+ @current_rss = get_rss
+ @soft_limit_rss = get_soft_limit_rss
+ @hard_limit_rss = get_hard_limit_rss
+
+ # track the current state as prometheus gauges
+ @metrics[:sidekiq_memory_killer_phase].set({}, @phase)
+ @metrics[:sidekiq_current_rss].set({}, @current_rss)
+ @metrics[:sidekiq_memory_killer_soft_limit_rss].set({}, @soft_limit_rss)
+ @metrics[:sidekiq_memory_killer_hard_limit_rss].set({}, @hard_limit_rss)
+ end
+
+ def run_thread
+ Sidekiq.logger.info(
+ class: self.class.to_s,
+ action: 'start',
+ pid: pid,
+ message: 'Starting Gitlab::SidekiqDaemon::MemoryKiller Daemon'
+ )
+
+ while enabled?
+ begin
+ sleep(CHECK_INTERVAL_SECONDS)
+ restart_sidekiq unless rss_within_range?
+ rescue => e
+ log_exception(e, __method__)
+ rescue Exception => e # rubocop:disable Lint/RescueException
+ log_exception(e, __method__ )
+ raise e
+ end
+ end
+ ensure
+ Sidekiq.logger.warn(
+ class: self.class.to_s,
+ action: 'stop',
+ pid: pid,
+ message: 'Stopping Gitlab::SidekiqDaemon::MemoryKiller Daemon'
+ )
+ end
+
+ def log_exception(exception, method)
+ Sidekiq.logger.warn(
+ class: self.class.to_s,
+ pid: pid,
+ message: "Exception from #{method}: #{exception.message}"
+ )
+ end
+
+ def stop_working
+ @enabled = false
+ end
+
+ def enabled?
+ @enabled
+ end
+
+ def restart_sidekiq
+ # Tell Sidekiq to stop fetching new jobs
+ # We first SIGNAL and then wait given time
+ # We also monitor a number of running jobs and allow to restart early
+ refresh_state(:stop_fetching_new_jobs)
+ signal_and_wait(SHUTDOWN_TIMEOUT_SECONDS, 'SIGTSTP', 'stop fetching new jobs')
+ return unless enabled?
+
+ # Tell sidekiq to restart itself
+ # Keep extra safe to wait `Sidekiq.options[:timeout] + 2` seconds before SIGKILL
+ refresh_state(:shutting_down)
+ signal_and_wait(Sidekiq.options[:timeout] + 2, 'SIGTERM', 'gracefully shut down')
+ return unless enabled?
+
+ # Ideally we should never reach this condition
+ # Wait for Sidekiq to shutdown gracefully, and kill it if it didn't
+ # Kill the whole pgroup, so we can be sure no children are left behind
+ refresh_state(:killing_sidekiq)
+ signal_pgroup('SIGKILL', 'die')
+ end
+
+ def rss_within_range?
+ refresh_state(:running)
+
+ deadline = Gitlab::Metrics::System.monotonic_time + GRACE_BALLOON_SECONDS.seconds
+ loop do
+ return true unless enabled?
+
+ # RSS go above hard limit should trigger forcible shutdown right away
+ break if @current_rss > @hard_limit_rss
+
+ # RSS go below the soft limit
+ return true if @current_rss < @soft_limit_rss
+
+ # RSS did not go below the soft limit within deadline, restart
+ break if Gitlab::Metrics::System.monotonic_time > deadline
+
+ sleep(CHECK_INTERVAL_SECONDS)
+
+ refresh_state(:above_soft_limit)
+ end
+
+ # There are two chances to break from loop:
+ # - above hard limit, or
+ # - above soft limit after deadline
+ # When `above hard limit`, it immediately go to `stop_fetching_new_jobs`
+ # So ignore `above hard limit` and always set `above_soft_limit` here
+ refresh_state(:above_soft_limit)
+ log_rss_out_of_range(@current_rss, @hard_limit_rss, @soft_limit_rss)
+
+ false
+ end
+
+ def log_rss_out_of_range(current_rss, hard_limit_rss, soft_limit_rss)
+ Sidekiq.logger.warn(
+ class: self.class.to_s,
+ pid: pid,
+ message: 'Sidekiq worker RSS out of range',
+ current_rss: current_rss,
+ hard_limit_rss: hard_limit_rss,
+ soft_limit_rss: soft_limit_rss,
+ reason: out_of_range_description(current_rss, hard_limit_rss, soft_limit_rss)
+ )
+ end
+
+ def out_of_range_description(rss, hard_limit, soft_limit)
+ if rss > hard_limit
+ "current_rss(#{rss}) > hard_limit_rss(#{hard_limit})"
+ else
+ "current_rss(#{rss}) > soft_limit_rss(#{soft_limit}) longer than GRACE_BALLOON_SECONDS(#{GRACE_BALLOON_SECONDS})"
+ end
+ end
+
+ def get_rss
+ output, status = Gitlab::Popen.popen(%W(ps -o rss= -p #{pid}), Rails.root.to_s)
+ return 0 unless status&.zero?
+
+ output.to_i
+ end
+
+ def get_soft_limit_rss
+ SOFT_LIMIT_RSS_KB + rss_increase_by_jobs
+ end
+
+ def get_hard_limit_rss
+ HARD_LIMIT_RSS_KB
+ end
+
+ def signal_and_wait(time, signal, explanation)
+ Sidekiq.logger.warn(
+ class: self.class.to_s,
+ pid: pid,
+ signal: signal,
+ explanation: explanation,
+ wait_time: time,
+ message: "Sending signal and waiting"
+ )
+ Process.kill(signal, pid)
+
+ deadline = Gitlab::Metrics::System.monotonic_time + time
+
+ # we try to finish as early as all jobs finished
+ # so we retest that in loop
+ sleep(CHECK_INTERVAL_SECONDS) while enabled? && any_jobs? && Gitlab::Metrics::System.monotonic_time < deadline
+ end
+
+ def signal_pgroup(signal, explanation)
+ if Process.getpgrp == pid
+ pid_or_pgrp_str = 'PGRP'
+ pid_to_signal = 0
+ else
+ pid_or_pgrp_str = 'PID'
+ pid_to_signal = pid
+ end
+
+ Sidekiq.logger.warn(
+ class: self.class.to_s,
+ signal: signal,
+ pid: pid,
+ message: "sending Sidekiq worker #{pid_or_pgrp_str}-#{pid} #{signal} (#{explanation})"
+ )
+ Process.kill(signal, pid_to_signal)
+ end
+
+ def rss_increase_by_jobs
+ Gitlab::SidekiqDaemon::Monitor.instance.jobs.sum do |job| # rubocop:disable CodeReuse/ActiveRecord
+ rss_increase_by_job(job)
+ end
+ end
+
+ def rss_increase_by_job(job)
+ memory_growth_kb = get_job_options(job, 'memory_killer_memory_growth_kb', 0).to_i
+ max_memory_growth_kb = get_job_options(job, 'memory_killer_max_memory_growth_kb', DEFAULT_MAX_MEMORY_GROWTH_KB).to_i
+
+ return 0 if memory_growth_kb.zero?
+
+ time_elapsed = [Gitlab::Metrics::System.monotonic_time - job[:started_at], 0].max
+ [memory_growth_kb * time_elapsed, max_memory_growth_kb].min
+ end
+
+ def get_job_options(job, key, default)
+ job[:worker_class].sidekiq_options.fetch(key, default)
+ rescue
+ default
+ end
+
+ def pid
+ Process.pid
+ end
+
+ def any_jobs?
+ Gitlab::SidekiqDaemon::Monitor.instance.jobs.any?
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/sidekiq_daemon/monitor.rb b/lib/gitlab/sidekiq_daemon/monitor.rb
index bbfca130425..a3d61c69ae1 100644
--- a/lib/gitlab/sidekiq_daemon/monitor.rb
+++ b/lib/gitlab/sidekiq_daemon/monitor.rb
@@ -14,19 +14,19 @@ module Gitlab
# that should not be caught by application
CancelledError = Class.new(Exception) # rubocop:disable Lint/InheritException
- attr_reader :jobs_thread
+ attr_reader :jobs
attr_reader :jobs_mutex
def initialize
super
- @jobs_thread = {}
+ @jobs = {}
@jobs_mutex = Mutex.new
end
- def within_job(jid, queue)
+ def within_job(worker_class, jid, queue)
jobs_mutex.synchronize do
- jobs_thread[jid] = Thread.current
+ jobs[jid] = { worker_class: worker_class, thread: Thread.current, started_at: Gitlab::Metrics::System.monotonic_time }
end
if cancelled?(jid)
@@ -43,7 +43,7 @@ module Gitlab
yield
ensure
jobs_mutex.synchronize do
- jobs_thread.delete(jid)
+ jobs.delete(jid)
end
end
@@ -61,24 +61,28 @@ module Gitlab
private
- def start_working
- Sidekiq.logger.info(
- class: self.class.to_s,
- action: 'start',
- message: 'Starting Monitor Daemon'
- )
+ def run_thread
+ return unless notification_channel_enabled?
- while enabled?
- process_messages
- sleep(RECONNECT_TIME)
- end
+ begin
+ Sidekiq.logger.info(
+ class: self.class.to_s,
+ action: 'start',
+ message: 'Starting Monitor Daemon'
+ )
- ensure
- Sidekiq.logger.warn(
- class: self.class.to_s,
- action: 'stop',
- message: 'Stopping Monitor Daemon'
- )
+ while enabled?
+ process_messages
+ sleep(RECONNECT_TIME)
+ end
+
+ ensure
+ Sidekiq.logger.warn(
+ class: self.class.to_s,
+ action: 'stop',
+ message: 'Stopping Monitor Daemon'
+ )
+ end
end
def stop_working
@@ -156,7 +160,7 @@ module Gitlab
# This is why it passes thread in block,
# to ensure that we do process this thread
def find_thread_unsafe(jid)
- jobs_thread[jid]
+ jobs.dig(jid, :thread)
end
def find_thread_with_lock(jid)
@@ -179,6 +183,10 @@ module Gitlab
def self.cancel_job_key(jid)
"sidekiq:cancel:#{jid}"
end
+
+ def notification_channel_enabled?
+ ENV.fetch("SIDEKIQ_MONITOR_WORKER", 0).to_i.nonzero?
+ end
end
end
end
diff --git a/lib/gitlab/sidekiq_logging/exception_handler.rb b/lib/gitlab/sidekiq_logging/exception_handler.rb
new file mode 100644
index 00000000000..fba74b6c9ed
--- /dev/null
+++ b/lib/gitlab/sidekiq_logging/exception_handler.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module SidekiqLogging
+ class ExceptionHandler
+ def call(job_exception, context)
+ data = {
+ error_class: job_exception.class.name,
+ error_message: job_exception.message
+ }
+
+ if context.is_a?(Hash)
+ data.merge!(context)
+ # correlation_id, jid, and class are available inside the job
+ # Hash, so promote these arguments to the root tree so that
+ # can be searched alongside other Sidekiq log messages.
+ job_data = data.delete(:job)
+ data.merge!(job_data) if job_data.present?
+ end
+
+ data[:error_backtrace] = Gitlab::Profiler.clean_backtrace(job_exception.backtrace) if job_exception.backtrace.present?
+
+ Sidekiq.logger.warn(data)
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/sidekiq_logging/structured_logger.rb b/lib/gitlab/sidekiq_logging/structured_logger.rb
index 48b1524f9c7..853fb2777c3 100644
--- a/lib/gitlab/sidekiq_logging/structured_logger.rb
+++ b/lib/gitlab/sidekiq_logging/structured_logger.rb
@@ -58,8 +58,7 @@ module Gitlab
payload['message'] = "#{message}: fail: #{payload['duration']} sec"
payload['job_status'] = 'fail'
payload['error_message'] = job_exception.message
- payload['error'] = job_exception.class
- payload['error_backtrace'] = backtrace_cleaner.clean(job_exception.backtrace)
+ payload['error_class'] = job_exception.class.name
else
payload['message'] = "#{message}: done: #{payload['duration']} sec"
payload['job_status'] = 'done'
@@ -71,10 +70,11 @@ module Gitlab
end
def add_time_keys!(time, payload)
- payload['duration'] = time[:duration].round(3)
- payload['system_s'] = time[:stime].round(3)
- payload['user_s'] = time[:utime].round(3)
- payload['child_s'] = time[:ctime].round(3) if time[:ctime] > 0
+ payload['duration'] = time[:duration].round(6)
+
+ # ignore `cpu_s` if the platform does not support Process::CLOCK_THREAD_CPUTIME_ID (time[:cputime] == 0)
+ # supported OS version can be found at: https://www.rubydoc.info/stdlib/core/2.1.6/Process:clock_gettime
+ payload['cpu_s'] = time[:cputime].round(6) if time[:cputime] > 0
payload['completed_at'] = Time.now.utc
end
@@ -99,42 +99,32 @@ module Gitlab
end
def elapsed_by_absolute_time(start)
- (Time.now.utc - start).to_f.round(3)
+ (Time.now.utc - start).to_f.round(6)
end
def elapsed(t0)
t1 = get_time
{
duration: t1[:now] - t0[:now],
- stime: t1[:times][:stime] - t0[:times][:stime],
- utime: t1[:times][:utime] - t0[:times][:utime],
- ctime: ctime(t1[:times]) - ctime(t0[:times])
+ cputime: t1[:thread_cputime] - t0[:thread_cputime]
}
end
def get_time
{
now: current_time,
- times: Process.times
+ thread_cputime: defined?(Process::CLOCK_THREAD_CPUTIME_ID) ? Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID) : 0
}
end
- def ctime(times)
- times[:cstime] + times[:cutime]
- end
-
def current_time
Gitlab::Metrics::System.monotonic_time
end
- def backtrace_cleaner
- @backtrace_cleaner ||= ActiveSupport::BacktraceCleaner.new
- end
-
def format_time(timestamp)
return timestamp if timestamp.is_a?(String)
- Time.at(timestamp).utc.iso8601(3)
+ Time.at(timestamp).utc.iso8601(6)
end
def limited_job_args(args)
diff --git a/lib/gitlab/sidekiq_middleware/metrics.rb b/lib/gitlab/sidekiq_middleware/metrics.rb
index 368f37a5d8c..8af353d8674 100644
--- a/lib/gitlab/sidekiq_middleware/metrics.rb
+++ b/lib/gitlab/sidekiq_middleware/metrics.rb
@@ -19,10 +19,16 @@ module Gitlab
@metrics[:sidekiq_jobs_retried_total].increment(labels, 1)
end
+ job_thread_cputime_start = get_thread_cputime
+
realtime = Benchmark.realtime do
yield
end
+ job_thread_cputime_end = get_thread_cputime
+ job_thread_cputime = job_thread_cputime_end - job_thread_cputime_start
+ @metrics[:sidekiq_jobs_cpu_seconds].observe(labels, job_thread_cputime)
+
@metrics[:sidekiq_jobs_completion_seconds].observe(labels, realtime)
rescue Exception # rubocop: disable Lint/RescueException
@metrics[:sidekiq_jobs_failed_total].increment(labels, 1)
@@ -35,6 +41,7 @@ module Gitlab
def init_metrics
{
+ sidekiq_jobs_cpu_seconds: ::Gitlab::Metrics.histogram(:sidekiq_jobs_cpu_seconds, 'Seconds of cpu time to run sidekiq job', {}, SIDEKIQ_LATENCY_BUCKETS),
sidekiq_jobs_completion_seconds: ::Gitlab::Metrics.histogram(:sidekiq_jobs_completion_seconds, 'Seconds to complete sidekiq job', {}, SIDEKIQ_LATENCY_BUCKETS),
sidekiq_jobs_failed_total: ::Gitlab::Metrics.counter(:sidekiq_jobs_failed_total, 'Sidekiq jobs failed'),
sidekiq_jobs_retried_total: ::Gitlab::Metrics.counter(:sidekiq_jobs_retried_total, 'Sidekiq jobs retried'),
@@ -47,6 +54,10 @@ module Gitlab
queue: queue
}
end
+
+ def get_thread_cputime
+ defined?(Process::CLOCK_THREAD_CPUTIME_ID) ? Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID) : 0
+ end
end
end
end
diff --git a/lib/gitlab/sidekiq_middleware/monitor.rb b/lib/gitlab/sidekiq_middleware/monitor.rb
index 00965bf5506..ed825dbfd60 100644
--- a/lib/gitlab/sidekiq_middleware/monitor.rb
+++ b/lib/gitlab/sidekiq_middleware/monitor.rb
@@ -4,7 +4,7 @@ module Gitlab
module SidekiqMiddleware
class Monitor
def call(worker, job, queue)
- Gitlab::SidekiqDaemon::Monitor.instance.within_job(job['jid'], queue) do
+ Gitlab::SidekiqDaemon::Monitor.instance.within_job(worker.class, job['jid'], queue) do
yield
end
rescue Gitlab::SidekiqDaemon::Monitor::CancelledError
diff --git a/lib/gitlab/slash_commands/presenters/access.rb b/lib/gitlab/slash_commands/presenters/access.rb
index b1bfaa6cb59..9ce1bcfb37c 100644
--- a/lib/gitlab/slash_commands/presenters/access.rb
+++ b/lib/gitlab/slash_commands/presenters/access.rb
@@ -15,6 +15,15 @@ module Gitlab
MESSAGE
end
+ def deactivated
+ ephemeral_response(text: <<~MESSAGE)
+ You are not allowed to perform the given chatops command since
+ your account has been deactivated by your administrator.
+
+ Please log back in from a web browser to reactivate your account at #{Gitlab.config.gitlab.url}
+ MESSAGE
+ end
+
def not_found
ephemeral_response(text: "404 not found! GitLab couldn't find what you were looking for! :boom:")
end
diff --git a/lib/gitlab/snippet_search_results.rb b/lib/gitlab/snippet_search_results.rb
index ac3b219e0c7..e955ccd35da 100644
--- a/lib/gitlab/snippet_search_results.rb
+++ b/lib/gitlab/snippet_search_results.rb
@@ -4,19 +4,19 @@ module Gitlab
class SnippetSearchResults < SearchResults
include SnippetsHelper
- attr_reader :limit_snippets
+ attr_reader :current_user
- def initialize(limit_snippets, query)
- @limit_snippets = limit_snippets
+ def initialize(current_user, query)
+ @current_user = current_user
@query = query
end
def objects(scope, page = nil)
case scope
when 'snippet_titles'
- snippet_titles.page(page).per(per_page)
+ paginated_objects(snippet_titles, page)
when 'snippet_blobs'
- snippet_blobs.page(page).per(per_page)
+ paginated_objects(snippet_blobs, page)
else
super(scope, nil, false)
end
@@ -25,38 +25,53 @@ module Gitlab
def formatted_count(scope)
case scope
when 'snippet_titles'
- snippet_titles_count.to_s
+ formatted_limited_count(limited_snippet_titles_count)
when 'snippet_blobs'
- snippet_blobs_count.to_s
+ formatted_limited_count(limited_snippet_blobs_count)
else
super
end
end
- def snippet_titles_count
- @snippet_titles_count ||= snippet_titles.count
+ def limited_snippet_titles_count
+ @limited_snippet_titles_count ||= limited_count(snippet_titles)
end
- def snippet_blobs_count
- @snippet_blobs_count ||= snippet_blobs.count
+ def limited_snippet_blobs_count
+ @limited_snippet_blobs_count ||= limited_count(snippet_blobs)
end
private
# rubocop: disable CodeReuse/ActiveRecord
- def snippet_titles
- limit_snippets.search(query).order('updated_at DESC').includes(:author)
+ def snippets
+ SnippetsFinder.new(current_user, finder_params)
+ .execute
+ .includes(:author)
+ .reorder(updated_at: :desc)
end
# rubocop: enable CodeReuse/ActiveRecord
- # rubocop: disable CodeReuse/ActiveRecord
+ def snippet_titles
+ snippets.search(query)
+ end
+
def snippet_blobs
- limit_snippets.search_code(query).order('updated_at DESC').includes(:author)
+ snippets.search_code(query)
end
- # rubocop: enable CodeReuse/ActiveRecord
def default_scope
'snippet_blobs'
end
+
+ def paginated_objects(relation, page)
+ relation.page(page).per(per_page)
+ end
+
+ def finder_params
+ {}
+ end
end
end
+
+Gitlab::SnippetSearchResults.prepend_if_ee('::EE::Gitlab::SnippetSearchResults')
diff --git a/lib/gitlab/submodule_links.rb b/lib/gitlab/submodule_links.rb
index 18fd604a3b0..b0ee0877f30 100644
--- a/lib/gitlab/submodule_links.rb
+++ b/lib/gitlab/submodule_links.rb
@@ -6,6 +6,7 @@ module Gitlab
def initialize(repository)
@repository = repository
+ @cache_store = {}
end
def for(submodule, sha)
@@ -18,8 +19,9 @@ module Gitlab
attr_reader :repository
def submodule_urls_for(sha)
- strong_memoize(:"submodule_urls_for_#{sha}") do
- repository.submodule_urls_for(sha)
+ @cache_store.fetch(sha) do
+ submodule_urls = repository.submodule_urls_for(sha)
+ @cache_store[sha] = submodule_urls
end
end
diff --git a/lib/gitlab/tracking.rb b/lib/gitlab/tracking.rb
index 78177c6d306..2470685bc00 100644
--- a/lib/gitlab/tracking.rb
+++ b/lib/gitlab/tracking.rb
@@ -6,6 +6,21 @@ module Gitlab
module Tracking
SNOWPLOW_NAMESPACE = 'gl'
+ module ControllerConcern
+ extend ActiveSupport::Concern
+
+ protected
+
+ def track_event(action = action_name, **args)
+ category = args.delete(:category) || self.class.name
+ Gitlab::Tracking.event(category, action.to_s, **args)
+ end
+
+ def track_self_describing_event(schema_url, event_data_json, **args)
+ Gitlab::Tracking.self_describing_event(schema_url, event_data_json, **args)
+ end
+ end
+
class << self
def enabled?
Gitlab::CurrentSettings.snowplow_enabled?
@@ -17,6 +32,13 @@ module Gitlab
snowplow.track_struct_event(category, action, label, property, value, context, Time.now.to_i)
end
+ def self_describing_event(schema_url, event_data_json, context: nil)
+ return unless enabled?
+
+ event_json = SnowplowTracker::SelfDescribingJson.new(schema_url, event_data_json)
+ snowplow.track_self_describing_event(event_json, context, Time.now.to_i)
+ end
+
def snowplow_options(group)
additional_features = Feature.enabled?(:additional_snowplow_tracking, group)
{
@@ -33,7 +55,7 @@ module Gitlab
def snowplow
@snowplow ||= SnowplowTracker::Tracker.new(
- SnowplowTracker::Emitter.new(Gitlab::CurrentSettings.snowplow_collector_hostname),
+ SnowplowTracker::AsyncEmitter.new(Gitlab::CurrentSettings.snowplow_collector_hostname, protocol: 'https'),
SnowplowTracker::Subject.new,
SNOWPLOW_NAMESPACE,
Gitlab::CurrentSettings.snowplow_site_id
diff --git a/lib/gitlab/tracking/incident_management.rb b/lib/gitlab/tracking/incident_management.rb
new file mode 100644
index 00000000000..bd8d1669dd3
--- /dev/null
+++ b/lib/gitlab/tracking/incident_management.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Tracking
+ module IncidentManagement
+ class << self
+ def track_from_params(incident_params)
+ return if incident_params.blank?
+
+ incident_params.each do |k, v|
+ prefix = ['', '0'].include?(v.to_s) ? 'disabled' : 'enabled'
+
+ key = tracking_keys.dig(k, :name)
+ label = tracking_keys.dig(k, :label)
+
+ next if key.blank?
+
+ details = label ? { label: label, property: v } : {}
+
+ ::Gitlab::Tracking.event('IncidentManagement::Settings', "#{prefix}_#{key}", **details )
+ end
+ end
+
+ def tracking_keys
+ {
+ create_issue: {
+ name: 'issue_auto_creation_on_alerts'
+ },
+ issue_template_key: {
+ name: 'issue_template_on_alerts',
+ label: 'Template name'
+ },
+ send_email: {
+ name: 'sending_emails'
+ }
+ }.with_indifferent_access.freeze
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/uploads/migration_helper.rb b/lib/gitlab/uploads/migration_helper.rb
new file mode 100644
index 00000000000..4ff064007f1
--- /dev/null
+++ b/lib/gitlab/uploads/migration_helper.rb
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Uploads
+ class MigrationHelper
+ attr_reader :logger
+
+ CATEGORIES = [%w(AvatarUploader Project :avatar),
+ %w(AvatarUploader Group :avatar),
+ %w(AvatarUploader User :avatar),
+ %w(AttachmentUploader Note :attachment),
+ %w(AttachmentUploader Appearance :logo),
+ %w(AttachmentUploader Appearance :header_logo),
+ %w(FaviconUploader Appearance :favicon),
+ %w(FileUploader Project),
+ %w(PersonalFileUploader Snippet),
+ %w(NamespaceFileUploader Snippet),
+ %w(FileUploader MergeRequest)].freeze
+
+ def initialize(args, logger)
+ prepare_variables(args, logger)
+ end
+
+ def migrate_to_remote_storage
+ @to_store = ObjectStorage::Store::REMOTE
+
+ uploads.each_batch(of: batch_size, &method(:enqueue_batch))
+ end
+
+ def migrate_to_local_storage
+ @to_store = ObjectStorage::Store::LOCAL
+
+ uploads(ObjectStorage::Store::REMOTE).each_batch(of: batch_size, &method(:enqueue_batch))
+ end
+
+ private
+
+ def batch_size
+ ENV.fetch('MIGRATION_BATCH_SIZE', 200).to_i
+ end
+
+ def prepare_variables(args, logger)
+ @mounted_as = args.mounted_as&.gsub(':', '')&.to_sym
+ @uploader_class = args.uploader_class.constantize
+ @model_class = args.model_class.constantize
+ @logger = logger
+ end
+
+ def enqueue_batch(batch, index)
+ job = ObjectStorage::MigrateUploadsWorker.enqueue!(batch,
+ @model_class,
+ @mounted_as,
+ @to_store)
+ logger.info(message: "[Uploads migration] Enqueued upload migration job", index: index, job_id: job)
+ rescue ObjectStorage::MigrateUploadsWorker::SanityCheckError => e
+ # continue for the next batch
+ logger.warn(message: "[Uploads migration] Could not enqueue batch", ids: batch.ids, reason: e.message) # rubocop:disable CodeReuse/ActiveRecord
+ end
+
+ # rubocop:disable CodeReuse/ActiveRecord
+ def uploads(store_type = [nil, ObjectStorage::Store::LOCAL])
+ Upload.class_eval { include EachBatch } unless Upload < EachBatch
+
+ Upload
+ .where(store: store_type,
+ uploader: @uploader_class.to_s,
+ model_type: @model_class.base_class.sti_name)
+ end
+ # rubocop:enable CodeReuse/ActiveRecord
+ end
+ end
+end
diff --git a/lib/gitlab/url_blocker.rb b/lib/gitlab/url_blocker.rb
index 4285b2675c5..0adca34440c 100644
--- a/lib/gitlab/url_blocker.rb
+++ b/lib/gitlab/url_blocker.rb
@@ -125,6 +125,11 @@ module Gitlab
# If the addr can't be resolved or the url is invalid (i.e http://1.1.1.1.1)
# we block the url
raise BlockedUrlError, "Host cannot be resolved or invalid"
+ rescue ArgumentError => error
+ # Addrinfo.getaddrinfo errors if the domain exceeds 1024 characters.
+ raise unless error.message.include?('hostname too long')
+
+ raise BlockedUrlError, "Host is too long (maximum is 1024 characters)"
end
def validate_local_request(
diff --git a/lib/gitlab/url_builder.rb b/lib/gitlab/url_builder.rb
index 42cf1ec1f0e..038067eeae4 100644
--- a/lib/gitlab/url_builder.rb
+++ b/lib/gitlab/url_builder.rb
@@ -81,3 +81,5 @@ module Gitlab
end
end
end
+
+::Gitlab::UrlBuilder.prepend_if_ee('EE::Gitlab::UrlBuilder')
diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb
index c6c2876033d..cb492b69fec 100644
--- a/lib/gitlab/usage_data.rb
+++ b/lib/gitlab/usage_data.rb
@@ -17,7 +17,6 @@ module Gitlab
.merge(features_usage_data)
.merge(components_usage_data)
.merge(cycle_analytics_usage_data)
- .merge(usage_counters)
end
def to_json(force_refresh: false)
@@ -38,7 +37,7 @@ module Gitlab
usage_data
end
- # rubocop:disable Metrics/AbcSize
+ # rubocop: disable Metrics/AbcSize
# rubocop: disable CodeReuse/ActiveRecord
def system_usage_data
{
@@ -97,13 +96,16 @@ module Gitlab
todos: count(Todo),
uploads: count(Upload),
web_hooks: count(WebHook)
- }.merge(services_usage)
- .merge(approximate_counts)
- }.tap do |data|
- data[:counts][:user_preferences] = user_preferences_usage
- end
+ }.merge(
+ services_usage,
+ approximate_counts,
+ usage_counters,
+ user_preferences_usage
+ )
+ }
end
# rubocop: enable CodeReuse/ActiveRecord
+ # rubocop: enable Metrics/AbcSize
def cycle_analytics_usage_data
Gitlab::CycleAnalytics::UsageData.new.to_json
@@ -116,6 +118,7 @@ module Gitlab
def features_usage_data_ce
{
container_registry_enabled: Gitlab.config.registry.enabled,
+ dependency_proxy_enabled: Gitlab.config.try(:dependency_proxy)&.enabled,
gitlab_shared_runners_enabled: Gitlab.config.gitlab_ci.shared_runners_enabled,
gravatar_enabled: Gitlab::CurrentSettings.gravatar_enabled?,
influxdb_metrics_enabled: Gitlab::Metrics.influx_metrics_enabled?,
@@ -136,15 +139,15 @@ module Gitlab
# @return [Array<#totals>] An array of objects that respond to `#totals`
def usage_data_counters
[
- Gitlab::UsageDataCounters::WikiPageCounter,
- Gitlab::UsageDataCounters::WebIdeCounter,
- Gitlab::UsageDataCounters::NoteCounter,
- Gitlab::UsageDataCounters::SnippetCounter,
- Gitlab::UsageDataCounters::SearchCounter,
- Gitlab::UsageDataCounters::CycleAnalyticsCounter,
- Gitlab::UsageDataCounters::ProductivityAnalyticsCounter,
- Gitlab::UsageDataCounters::SourceCodeCounter,
- Gitlab::UsageDataCounters::MergeRequestCounter
+ Gitlab::UsageDataCounters::WikiPageCounter,
+ Gitlab::UsageDataCounters::WebIdeCounter,
+ Gitlab::UsageDataCounters::NoteCounter,
+ Gitlab::UsageDataCounters::SnippetCounter,
+ Gitlab::UsageDataCounters::SearchCounter,
+ Gitlab::UsageDataCounters::CycleAnalyticsCounter,
+ Gitlab::UsageDataCounters::ProductivityAnalyticsCounter,
+ Gitlab::UsageDataCounters::SourceCodeCounter,
+ Gitlab::UsageDataCounters::MergeRequestCounter
]
end
@@ -186,7 +189,7 @@ module Gitlab
.find_in_batches(batch_size: BATCH_SIZE) do |services|
counts = services.group_by do |service|
- # TODO: Simplify as part of https://gitlab.com/gitlab-org/gitlab-ce/issues/63084
+ # TODO: Simplify as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
service_url = service.data_fields&.url || (service.properties && service.properties['url'])
service_url&.include?('.atlassian.net') ? :cloud : :server
end
diff --git a/lib/gitlab/utils.rb b/lib/gitlab/utils.rb
index c66ce0434a4..7fbfc4c45c4 100644
--- a/lib/gitlab/utils.rb
+++ b/lib/gitlab/utils.rb
@@ -13,14 +13,6 @@ module Gitlab
path
end
- # Run system command without outputting to stdout.
- #
- # @param cmd [Array<String>]
- # @return [Boolean]
- def system_silent(cmd)
- Popen.popen(cmd).last.zero?
- end
-
def force_utf8(str)
str.dup.force_encoding(Encoding::UTF_8)
end
diff --git a/lib/gitlab/utils/inline_hash.rb b/lib/gitlab/utils/inline_hash.rb
new file mode 100644
index 00000000000..41e5f3ee4c3
--- /dev/null
+++ b/lib/gitlab/utils/inline_hash.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Utils
+ module InlineHash
+ extend self
+
+ # Transforms a Hash into an inline Hash by merging its nested keys.
+ #
+ # Input
+ #
+ # {
+ # 'root_param' => 'Root',
+ # 12 => 'number',
+ # symbol: 'symbol',
+ # nested_param: {
+ # key: 'Value'
+ # },
+ # 'very' => {
+ # 'deep' => {
+ # 'nested' => {
+ # 12 => 'Deep nested value'
+ # }
+ # }
+ # }
+ # }
+ #
+ #
+ # Result
+ #
+ # {
+ # 'root_param' => 'Root',
+ # 12 => 'number',
+ # symbol: symbol,
+ # 'nested_param.key' => 'Value',
+ # 'very.deep.nested.12' => 'Deep nested value'
+ # }
+ #
+ def merge_keys(hash, prefix: nil, connector: '.')
+ result = {}
+ pairs =
+ if prefix
+ base_prefix = "#{prefix}#{connector}"
+ hash.map { |key, value| ["#{base_prefix}#{key}", value] }
+ else
+ hash.to_a
+ end
+
+ until pairs.empty?
+ key, value = pairs.shift
+
+ if value.is_a?(Hash)
+ value.each { |k, v| pairs.unshift ["#{key}#{connector}#{k}", v] }
+ else
+ result[key] = value
+ end
+ end
+
+ result
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/utils/safe_inline_hash.rb b/lib/gitlab/utils/safe_inline_hash.rb
new file mode 100644
index 00000000000..644d87c6876
--- /dev/null
+++ b/lib/gitlab/utils/safe_inline_hash.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Utils
+ class SafeInlineHash
+ # Validates the hash size using `Gitlab::Utils::DeepSize` before merging keys using `Gitlab::Utils::InlineHash`
+ def initialize(hash, prefix: nil, connector: '.')
+ @hash = hash
+ end
+
+ def self.merge_keys!(hash, prefix: nil, connector: '.')
+ new(hash).merge_keys!(prefix: prefix, connector: connector)
+ end
+
+ def merge_keys!(prefix:, connector:)
+ raise ArgumentError, 'The Hash is too big' unless valid?
+
+ Gitlab::Utils::InlineHash.merge_keys(hash, prefix: prefix, connector: connector)
+ end
+
+ private
+
+ attr_reader :hash
+
+ def valid?
+ Gitlab::Utils::DeepSize.new(hash).valid?
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/verify/uploads.rb b/lib/gitlab/verify/uploads.rb
index 875e8a120e9..afcdbd087d2 100644
--- a/lib/gitlab/verify/uploads.rb
+++ b/lib/gitlab/verify/uploads.rb
@@ -32,7 +32,7 @@ module Gitlab
end
def remote_object_exists?(upload)
- upload.build_uploader.file.exists?
+ upload.retrieve_uploader.file.exists?
end
end
end
diff --git a/lib/google_api/cloud_platform/client.rb b/lib/google_api/cloud_platform/client.rb
index 9f01a3f97ce..9085835dee6 100644
--- a/lib/google_api/cloud_platform/client.rb
+++ b/lib/google_api/cloud_platform/client.rb
@@ -2,6 +2,7 @@
require 'google/apis/compute_v1'
require 'google/apis/container_v1'
+require 'google/apis/container_v1beta1'
require 'google/apis/cloudbilling_v1'
require 'google/apis/cloudresourcemanager_v1'
@@ -53,30 +54,13 @@ module GoogleApi
service.get_zone_cluster(project_id, zone, cluster_id, options: user_agent_header)
end
- def projects_zones_clusters_create(project_id, zone, cluster_name, cluster_size, machine_type:, legacy_abac:)
- service = Google::Apis::ContainerV1::ContainerService.new
+ def projects_zones_clusters_create(project_id, zone, cluster_name, cluster_size, machine_type:, legacy_abac:, enable_addons: [])
+ service = Google::Apis::ContainerV1beta1::ContainerService.new
service.authorization = access_token
- request_body = Google::Apis::ContainerV1::CreateClusterRequest.new(
- {
- "cluster": {
- "name": cluster_name,
- "initial_node_count": cluster_size,
- "node_config": {
- "machine_type": machine_type
- },
- "master_auth": {
- "username": CLUSTER_MASTER_AUTH_USERNAME,
- "client_certificate_config": {
- issue_client_certificate: true
- }
- },
- "legacy_abac": {
- "enabled": legacy_abac
- }
- }
- }
- )
+ cluster_options = make_cluster_options(cluster_name, cluster_size, machine_type, legacy_abac, enable_addons)
+
+ request_body = Google::Apis::ContainerV1beta1::CreateClusterRequest.new(cluster_options)
service.create_cluster(project_id, zone, request_body, options: user_agent_header)
end
@@ -95,6 +79,33 @@ module GoogleApi
private
+ def make_cluster_options(cluster_name, cluster_size, machine_type, legacy_abac, enable_addons)
+ {
+ cluster: {
+ name: cluster_name,
+ initial_node_count: cluster_size,
+ node_config: {
+ machine_type: machine_type
+ },
+ master_auth: {
+ username: CLUSTER_MASTER_AUTH_USERNAME,
+ client_certificate_config: {
+ issue_client_certificate: true
+ }
+ },
+ legacy_abac: {
+ enabled: legacy_abac
+ },
+ ip_allocation_policy: {
+ use_ip_aliases: true
+ },
+ addons_config: enable_addons.each_with_object({}) do |addon, hash|
+ hash[addon] = { disabled: false }
+ end
+ }
+ }
+ end
+
def token_life_time(expires_at)
DateTime.strptime(expires_at, '%s').to_time.utc - Time.now.utc
end
diff --git a/lib/grafana/client.rb b/lib/grafana/client.rb
new file mode 100644
index 00000000000..0765630f9bb
--- /dev/null
+++ b/lib/grafana/client.rb
@@ -0,0 +1,67 @@
+# frozen_string_literal: true
+
+module Grafana
+ class Client
+ Error = Class.new(StandardError)
+
+ # @param api_url [String] Base URL of the Grafana instance
+ # @param token [String] Admin-level API token for instance
+ def initialize(api_url:, token:)
+ @api_url = api_url
+ @token = token
+ end
+
+ # @param datasource_id [String] Grafana ID for the datasource
+ # @param proxy_path [String] Path to proxy - ex) 'api/v1/query_range'
+ def proxy_datasource(datasource_id:, proxy_path:, query: {})
+ http_get("#{@api_url}/api/datasources/proxy/#{datasource_id}/#{proxy_path}", query: query)
+ end
+
+ private
+
+ def http_get(url, params = {})
+ response = handle_request_exceptions do
+ Gitlab::HTTP.get(url, **request_params.merge(params))
+ end
+
+ handle_response(response)
+ end
+
+ def request_params
+ {
+ headers: {
+ 'Authorization' => "Bearer #{@token}",
+ 'Accept' => 'application/json',
+ 'Content-Type' => 'application/json'
+ },
+ follow_redirects: false
+ }
+ end
+
+ def handle_request_exceptions
+ yield
+ rescue Gitlab::HTTP::Error
+ raise_error 'Error when connecting to Grafana'
+ rescue Net::OpenTimeout
+ raise_error 'Connection to Grafana timed out'
+ rescue SocketError
+ raise_error 'Received SocketError when trying to connect to Grafana'
+ rescue OpenSSL::SSL::SSLError
+ raise_error 'Grafana returned invalid SSL data'
+ rescue Errno::ECONNREFUSED
+ raise_error 'Connection refused'
+ rescue => e
+ raise_error "Grafana request failed due to #{e.class}"
+ end
+
+ def handle_response(response)
+ return response if response.code == 200
+
+ raise_error "Grafana response status code: #{response.code}"
+ end
+
+ def raise_error(message)
+ raise Client::Error, message
+ end
+ end
+end
diff --git a/lib/quality/test_level.rb b/lib/quality/test_level.rb
index a65657dadd0..b7822adf6ed 100644
--- a/lib/quality/test_level.rb
+++ b/lib/quality/test_level.rb
@@ -53,11 +53,11 @@ module Quality
end
def pattern(level)
- @patterns[level] ||= "#{prefix}spec/{#{TEST_LEVEL_FOLDERS.fetch(level).join(',')}}{,/**/}*_spec.rb"
+ @patterns[level] ||= "#{prefix}spec/#{folders_pattern(level)}{,/**/}*_spec.rb"
end
def regexp(level)
- @regexps[level] ||= Regexp.new("#{prefix}spec/(#{TEST_LEVEL_FOLDERS.fetch(level).join('|')})").freeze
+ @regexps[level] ||= Regexp.new("#{prefix}spec/#{folders_regex(level)}").freeze
end
def level_for(file_path)
@@ -72,5 +72,27 @@ module Quality
raise UnknownTestLevelError, "Test level for #{file_path} couldn't be set. Please rename the file properly or change the test level detection regexes in #{__FILE__}."
end
end
+
+ private
+
+ def folders_pattern(level)
+ case level
+ # Geo specs aren't in a specific folder, but they all have the :geo tag, so we must search for them globally
+ when :all, :geo
+ '**'
+ else
+ "{#{TEST_LEVEL_FOLDERS.fetch(level).join(',')}}"
+ end
+ end
+
+ def folders_regex(level)
+ case level
+ # Geo specs aren't in a specific folder, but they all have the :geo tag, so we must search for them globally
+ when :all, :geo
+ ''
+ else
+ "(#{TEST_LEVEL_FOLDERS.fetch(level).join('|')})"
+ end
+ end
end
end
diff --git a/lib/tasks/frontend.rake b/lib/tasks/frontend.rake
index 1cac7520227..6e90229830d 100644
--- a/lib/tasks/frontend.rake
+++ b/lib/tasks/frontend.rake
@@ -2,7 +2,10 @@ unless Rails.env.production?
namespace :frontend do
desc 'GitLab | Frontend | Generate fixtures for JavaScript tests'
RSpec::Core::RakeTask.new(:fixtures, [:pattern]) do |t, args|
- args.with_defaults(pattern: '{spec,ee/spec}/frontend/fixtures/*.rb')
+ directories = %w[spec]
+ directories << 'ee/spec' if Gitlab.ee?
+ directory_glob = "{#{directories.join(',')}}"
+ args.with_defaults(pattern: "#{directory_glob}/frontend/fixtures/*.rb")
ENV['NO_KNAPSACK'] = 'true'
t.pattern = args[:pattern]
t.rspec_opts = '--format documentation'
diff --git a/lib/tasks/gitlab/artifacts/migrate.rake b/lib/tasks/gitlab/artifacts/migrate.rake
index 9012e55a70c..0d09fd0a4e3 100644
--- a/lib/tasks/gitlab/artifacts/migrate.rake
+++ b/lib/tasks/gitlab/artifacts/migrate.rake
@@ -6,18 +6,31 @@ namespace :gitlab do
namespace :artifacts do
task migrate: :environment do
logger = Logger.new(STDOUT)
- logger.info('Starting transfer of artifacts')
+ logger.info('Starting transfer of artifacts to remote storage')
- Ci::Build.joins(:project)
- .with_artifacts_stored_locally
- .find_each(batch_size: 10) do |build|
+ helper = Gitlab::Artifacts::MigrationHelper.new
- build.artifacts_file.migrate!(ObjectStorage::Store::REMOTE)
- build.artifacts_metadata.migrate!(ObjectStorage::Store::REMOTE)
+ begin
+ helper.migrate_to_remote_storage do |artifact|
+ logger.info("Transferred artifact ID #{artifact.id} of type #{artifact.file_type} with size #{artifact.size} to object storage")
+ end
+ rescue => e
+ logger.error(e.message)
+ end
+ end
+
+ task migrate_to_local: :environment do
+ logger = Logger.new(STDOUT)
+ logger.info('Starting transfer of artifacts to local storage')
+
+ helper = Gitlab::Artifacts::MigrationHelper.new
- logger.info("Transferred artifact ID #{build.id} with size #{build.artifacts_size} to object storage")
+ begin
+ helper.migrate_to_local_storage do |artifact|
+ logger.info("Transferred artifact ID #{artifact.id} of type #{artifact.file_type} with size #{artifact.size} to local storage")
+ end
rescue => e
- logger.error("Failed to transfer artifacts of #{build.id} with error: #{e.message}")
+ logger.error(e.message)
end
end
end
diff --git a/lib/tasks/gitlab/cleanup.rake b/lib/tasks/gitlab/cleanup.rake
index 4d854cd178d..0a0ee7b4bfa 100644
--- a/lib/tasks/gitlab/cleanup.rake
+++ b/lib/tasks/gitlab/cleanup.rake
@@ -3,69 +3,6 @@ require 'set'
namespace :gitlab do
namespace :cleanup do
- desc "GitLab | Cleanup | Clean namespaces"
- task dirs: :gitlab_environment do
- namespaces = Set.new(Namespace.pluck(:path))
- namespaces << Storage::HashedProject::REPOSITORY_PATH_PREFIX
-
- Gitaly::Server.all.each do |server|
- all_dirs = Gitlab::GitalyClient::StorageService
- .new(server.storage)
- .list_directories(depth: 0)
- .reject { |dir| dir.ends_with?('.git') || namespaces.include?(File.basename(dir)) }
-
- puts "Looking for directories to remove... "
- all_dirs.each do |dir_path|
- if remove?
- begin
- Gitlab::GitalyClient::NamespaceService.new(server.storage)
- .remove(dir_path)
-
- puts "Removed...#{dir_path}"
- rescue StandardError => e
- puts "Cannot remove #{dir_path}: #{e.message}".color(:red)
- end
- else
- puts "Can be removed: #{dir_path}".color(:red)
- end
- end
- end
-
- unless remove?
- puts "To cleanup this directories run this command with REMOVE=true".color(:yellow)
- end
- end
-
- desc "GitLab | Cleanup | Clean repositories"
- task repos: :gitlab_environment do
- move_suffix = "+orphaned+#{Time.now.to_i}"
-
- Gitaly::Server.all.each do |server|
- Gitlab::GitalyClient::StorageService
- .new(server.storage)
- .list_directories
- .each do |path|
- repo_with_namespace = path.chomp('.git').chomp('.wiki')
-
- # TODO ignoring hashed repositories for now. But revisit to fully support
- # possible orphaned hashed repos
- next if repo_with_namespace.start_with?(Storage::HashedProject::REPOSITORY_PATH_PREFIX)
- next if Project.find_by_full_path(repo_with_namespace)
-
- new_path = path + move_suffix
- puts path.inspect + ' -> ' + new_path.inspect
-
- begin
- Gitlab::GitalyClient::NamespaceService
- .new(server.storage)
- .rename(path, new_path)
- rescue StandardError => e
- puts "Error occurred while moving the repository: #{e.message}".color(:red)
- end
- end
- end
- end
-
desc "GitLab | Cleanup | Block users that have been removed in LDAP"
task block_removed_ldap_users: :gitlab_environment do
warn_user_is_not_gitlab
diff --git a/lib/tasks/gitlab/graphql.rake b/lib/tasks/gitlab/graphql.rake
index fd8df015903..902f22684ee 100644
--- a/lib/tasks/gitlab/graphql.rake
+++ b/lib/tasks/gitlab/graphql.rake
@@ -11,10 +11,28 @@ namespace :gitlab do
task compile_docs: :environment do
renderer = Gitlab::Graphql::Docs::Renderer.new(GitlabSchema.graphql_definition, render_options)
- renderer.render
+ renderer.write
puts "Documentation compiled."
end
+
+ desc 'GitLab | Check if GraphQL docs are up to date'
+ task check_docs: :environment do
+ renderer = Gitlab::Graphql::Docs::Renderer.new(GitlabSchema.graphql_definition, render_options)
+
+ doc = File.read(Rails.root.join(OUTPUT_DIR, 'index.md'))
+
+ if doc == renderer.contents
+ puts "GraphQL documentation is up to date"
+ else
+ puts '#' * 10
+ puts '#'
+ puts '# GraphQL documentation is outdated! Please update it by running `bundle exec rake gitlab:graphql:compile_docs`.'
+ puts '#'
+ puts '#' * 10
+ abort
+ end
+ end
end
end
diff --git a/lib/tasks/gitlab/lfs/migrate.rake b/lib/tasks/gitlab/lfs/migrate.rake
index 97c15175a23..4142903d9c3 100644
--- a/lib/tasks/gitlab/lfs/migrate.rake
+++ b/lib/tasks/gitlab/lfs/migrate.rake
@@ -17,5 +17,20 @@ namespace :gitlab do
logger.error("Failed to transfer LFS object #{lfs_object.oid} with error: #{e.message}")
end
end
+
+ task migrate_to_local: :environment do
+ logger = Logger.new(STDOUT)
+ logger.info('Starting transfer of LFS files to local storage')
+
+ LfsObject.with_files_stored_remotely
+ .find_each(batch_size: 10) do |lfs_object|
+
+ lfs_object.file.migrate!(LfsObjectUploader::Store::LOCAL)
+
+ logger.info("Transferred LFS object #{lfs_object.oid} of size #{lfs_object.size.to_i.bytes} to local storage")
+ rescue => e
+ logger.error("Failed to transfer LFS object #{lfs_object.oid} with error: #{e.message}")
+ end
+ end
end
end
diff --git a/lib/tasks/gitlab/pages.rake b/lib/tasks/gitlab/pages.rake
deleted file mode 100644
index 100e480bd66..00000000000
--- a/lib/tasks/gitlab/pages.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace :gitlab do
- namespace :pages do
- desc 'Ping the pages admin API'
- task admin_ping: :gitlab_environment do
- Gitlab::PagesClient.ping
- puts "OK: gitlab-pages admin API is reachable"
- end
- end
-end
diff --git a/lib/tasks/gitlab/setup.rake b/lib/tasks/gitlab/setup.rake
index 5d86d6e466c..50774de77c9 100644
--- a/lib/tasks/gitlab/setup.rake
+++ b/lib/tasks/gitlab/setup.rake
@@ -31,7 +31,6 @@ namespace :gitlab do
terminate_all_connections unless Rails.env.production?
Rake::Task["db:reset"].invoke
- Rake::Task["setup_postgresql"].invoke
Rake::Task["db:seed_fu"].invoke
rescue Gitlab::TaskAbortedByUserError
puts "Quitting...".color(:red)
diff --git a/lib/tasks/gitlab/traces.rake b/lib/tasks/gitlab/traces.rake
deleted file mode 100644
index 5e1ec481ece..00000000000
--- a/lib/tasks/gitlab/traces.rake
+++ /dev/null
@@ -1,38 +0,0 @@
-require 'logger'
-require 'resolv-replace'
-
-desc "GitLab | Archive legacy traces to trace artifacts"
-namespace :gitlab do
- namespace :traces do
- task archive: :environment do
- logger = Logger.new(STDOUT)
- logger.info('Archiving legacy traces')
-
- Ci::Build.finished.without_archived_trace
- .order(id: :asc)
- .find_in_batches(batch_size: 1000) do |jobs|
- job_ids = jobs.map { |job| [job.id] }
-
- ArchiveTraceWorker.bulk_perform_async(job_ids)
-
- logger.info("Scheduled #{job_ids.count} jobs. From #{job_ids.min} to #{job_ids.max}")
- end
- end
-
- task migrate: :environment do
- logger = Logger.new(STDOUT)
- logger.info('Starting transfer of job traces')
-
- Ci::Build.joins(:project)
- .with_archived_trace_stored_locally
- .find_each(batch_size: 10) do |build|
-
- build.job_artifacts_trace.file.migrate!(ObjectStorage::Store::REMOTE)
-
- logger.info("Transferred job trace of #{build.id} to object storage")
- rescue => e
- logger.error("Failed to transfer artifacts of #{build.id} with error: #{e.message}")
- end
- end
- end
-end
diff --git a/lib/tasks/gitlab/uploads/migrate.rake b/lib/tasks/gitlab/uploads/migrate.rake
index 1c93609a006..44536a447c7 100644
--- a/lib/tasks/gitlab/uploads/migrate.rake
+++ b/lib/tasks/gitlab/uploads/migrate.rake
@@ -3,19 +3,7 @@ namespace :gitlab do
namespace :migrate do
desc "GitLab | Uploads | Migrate all uploaded files to object storage"
task all: :environment do
- categories = [%w(AvatarUploader Project :avatar),
- %w(AvatarUploader Group :avatar),
- %w(AvatarUploader User :avatar),
- %w(AttachmentUploader Note :attachment),
- %w(AttachmentUploader Appearance :logo),
- %w(AttachmentUploader Appearance :header_logo),
- %w(FaviconUploader Appearance :favicon),
- %w(FileUploader Project),
- %w(PersonalFileUploader Snippet),
- %w(NamespaceFileUploader Snippet),
- %w(FileUploader MergeRequest)]
-
- categories.each do |args|
+ Gitlab::Uploads::MigrationHelper::CATEGORIES.each do |args|
Rake::Task["gitlab:uploads:migrate"].invoke(*args)
Rake::Task["gitlab:uploads:migrate"].reenable
end
@@ -25,34 +13,23 @@ namespace :gitlab do
# The following is the actual rake task that migrates uploads of specified
# category to object storage
desc 'GitLab | Uploads | Migrate the uploaded files of specified type to object storage'
- task :migrate, [:uploader_class, :model_class, :mounted_as] => :environment do |task, args|
- batch_size = ENV.fetch('BATCH', 200).to_i
- @to_store = ObjectStorage::Store::REMOTE
- @mounted_as = args.mounted_as&.gsub(':', '')&.to_sym
- @uploader_class = args.uploader_class.constantize
- @model_class = args.model_class.constantize
-
- uploads.each_batch(of: batch_size, &method(:enqueue_batch))
+ task :migrate, [:uploader_class, :model_class, :mounted_as] => :environment do |_t, args|
+ Gitlab::Uploads::MigrationHelper.new(args, Logger.new(STDOUT)).migrate_to_remote_storage
end
- def enqueue_batch(batch, index)
- job = ObjectStorage::MigrateUploadsWorker.enqueue!(batch,
- @model_class,
- @mounted_as,
- @to_store)
- puts "Enqueued job ##{index}: #{job}"
- rescue ObjectStorage::MigrateUploadsWorker::SanityCheckError => e
- # continue for the next batch
- puts "Could not enqueue batch (#{batch.ids}) #{e.message}".color(:red)
+ namespace :migrate_to_local do
+ desc "GitLab | Uploads | Migrate all uploaded files to local storage"
+ task all: :environment do
+ Gitlab::Uploads::MigrationHelper::CATEGORIES.each do |args|
+ Rake::Task["gitlab:uploads:migrate_to_local"].invoke(*args)
+ Rake::Task["gitlab:uploads:migrate_to_local"].reenable
+ end
+ end
end
- def uploads
- Upload.class_eval { include EachBatch } unless Upload < EachBatch
-
- Upload
- .where(store: [nil, ObjectStorage::Store::LOCAL],
- uploader: @uploader_class.to_s,
- model_type: @model_class.base_class.sti_name)
+ desc 'GitLab | Uploads | Migrate the uploaded files of specified type to local storage'
+ task :migrate_to_local, [:uploader_class, :model_class, :mounted_as] => :environment do |_t, args|
+ Gitlab::Uploads::MigrationHelper.new(args, Logger.new(STDOUT)).migrate_to_local_storage
end
end
end
diff --git a/lib/tasks/migrate/setup_postgresql.rake b/lib/tasks/migrate/setup_postgresql.rake
index cda88c130bb..4c8f13b63a4 100644
--- a/lib/tasks/migrate/setup_postgresql.rake
+++ b/lib/tasks/migrate/setup_postgresql.rake
@@ -1,14 +1,3 @@
-desc 'GitLab | Sets up PostgreSQL'
-task setup_postgresql: :environment do
- require Rails.root.join('db/migrate/20180215181245_users_name_lower_index.rb')
- require Rails.root.join('db/migrate/20180504195842_project_name_lower_index.rb')
- require Rails.root.join('db/post_migrate/20180306164012_add_path_index_to_redirect_routes.rb')
-
- UsersNameLowerIndex.new.up
- ProjectNameLowerIndex.new.up
- AddPathIndexToRedirectRoutes.new.up
-end
-
desc 'GitLab | Generate PostgreSQL Password Hash'
task :postgresql_md5_hash do
require 'digest'
diff --git a/lib/tasks/services.rake b/lib/tasks/services.rake
deleted file mode 100644
index 4ec4fdd281f..00000000000
--- a/lib/tasks/services.rake
+++ /dev/null
@@ -1,98 +0,0 @@
-services_template = <<-ERB
-# Services
-
-<% services.each do |service| %>
-## <%= service[:title] %>
-
-
-<% unless service[:description].blank? %>
-<%= service[:description] %>
-<% end %>
-
-
-### Create/Edit <%= service[:title] %> service
-
-Set <%= service[:title] %> service for a project.
-<% unless service[:help].blank? %>
-
-> <%= service[:help].gsub("\n", ' ') %>
-
-<% end %>
-
-```
-PUT /projects/:id/services/<%= service[:dashed_name] %>
-
-```
-
-Parameters:
-
-<% service[:params].each do |param| %>
-- `<%= param[:name] %>` <%= param[:required] ? "(**required**)" : "(optional)" %><%= [" -", param[:description]].join(" ").gsub("\n", '') unless param[:description].blank? %>
-
-<% end %>
-
-### Delete <%= service[:title] %> service
-
-Delete <%= service[:title] %> service for a project.
-
-```
-DELETE /projects/:id/services/<%= service[:dashed_name] %>
-
-```
-
-### Get <%= service[:title] %> service settings
-
-Get <%= service[:title] %> service settings for a project.
-
-```
-GET /projects/:id/services/<%= service[:dashed_name] %>
-
-```
-
-<% end %>
-ERB
-
-namespace :services do
- task doc: :environment do
- services = Service.available_services_names.map do |s|
- service_start = Time.now
- klass = "#{s}_service".classify.constantize
-
- service = klass.new
-
- service_hash = {}
-
- service_hash[:title] = service.title
- service_hash[:dashed_name] = s.dasherize
- service_hash[:description] = service.description
- service_hash[:help] = service.help
- service_hash[:params] = service.fields.map do |p|
- param_hash = {}
-
- param_hash[:name] = p[:name]
- param_hash[:description] = p[:placeholder] || p[:title]
- param_hash[:required] = klass.validators_on(p[:name].to_sym).any? do |v|
- v.class == ActiveRecord::Validations::PresenceValidator
- end
-
- param_hash
- end
- service_hash[:params].sort_by! { |p| p[:required] ? 0 : 1 }
-
- puts "Collected data for: #{service.title}, #{Time.now - service_start}"
- service_hash
- end
-
- doc_start = Time.now
- doc_path = File.join(Rails.root, 'doc', 'api', 'services.md')
-
- result = ERB.new(services_template, trim_mode: '>')
- .result(OpenStruct.new(services: services).instance_eval { binding })
-
- File.open(doc_path, 'w') do |f|
- f.write result
- end
-
- puts "write a new service.md to: #{doc_path}, #{Time.now - doc_start}"
- end
-end
diff --git a/lib/uploaded_file.rb b/lib/uploaded_file.rb
index aae542f02ac..424db653fb8 100644
--- a/lib/uploaded_file.rb
+++ b/lib/uploaded_file.rb
@@ -6,6 +6,7 @@ require "fileutils"
class UploadedFile
InvalidPathError = Class.new(StandardError)
+ UnknownSizeError = Class.new(StandardError)
# The filename, *not* including the path, of the "uploaded" file
attr_reader :original_filename
@@ -18,37 +19,50 @@ class UploadedFile
attr_reader :remote_id
attr_reader :sha256
-
- def initialize(path, filename: nil, content_type: "application/octet-stream", sha256: nil, remote_id: nil)
- raise InvalidPathError, "#{path} file does not exist" unless ::File.exist?(path)
+ attr_reader :size
+
+ def initialize(path, filename: nil, content_type: "application/octet-stream", sha256: nil, remote_id: nil, size: nil)
+ if path.present?
+ raise InvalidPathError, "#{path} file does not exist" unless ::File.exist?(path)
+
+ @tempfile = File.new(path, 'rb')
+ @size = @tempfile.size
+ else
+ begin
+ @size = Integer(size)
+ rescue ArgumentError, TypeError
+ raise UnknownSizeError, 'Unable to determine file size'
+ end
+ end
@content_type = content_type
- @original_filename = sanitize_filename(filename || path)
+ @original_filename = sanitize_filename(filename || path || '')
@content_type = content_type
@sha256 = sha256
@remote_id = remote_id
- @tempfile = File.new(path, 'rb')
end
def self.from_params(params, field, upload_paths)
- unless params["#{field}.path"]
- raise InvalidPathError, "file is invalid" if params["#{field}.remote_id"]
-
- return
- end
-
- file_path = File.realpath(params["#{field}.path"])
-
- paths = Array(upload_paths) << Dir.tmpdir
- unless self.allowed_path?(file_path, paths.compact)
- raise InvalidPathError, "insecure path used '#{file_path}'"
+ path = params["#{field}.path"]
+ remote_id = params["#{field}.remote_id"]
+ return if path.blank? && remote_id.blank?
+
+ file_path = nil
+ if path
+ file_path = File.realpath(path)
+
+ paths = Array(upload_paths) << Dir.tmpdir
+ unless self.allowed_path?(file_path, paths.compact)
+ raise InvalidPathError, "insecure path used '#{file_path}'"
+ end
end
UploadedFile.new(file_path,
filename: params["#{field}.name"],
content_type: params["#{field}.type"] || 'application/octet-stream',
sha256: params["#{field}.sha256"],
- remote_id: params["#{field}.remote_id"])
+ remote_id: remote_id,
+ size: params["#{field}.size"])
end
def self.allowed_path?(file_path, paths)
@@ -68,7 +82,11 @@ class UploadedFile
end
def path
- @tempfile.path
+ @tempfile&.path
+ end
+
+ def close
+ @tempfile&.close
end
alias_method :local_path, :path
diff --git a/locale/ar_SA/gitlab.po b/locale/ar_SA/gitlab.po
index fd2be81c476..e543747177e 100644
--- a/locale/ar_SA/gitlab.po
+++ b/locale/ar_SA/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: ar\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:42\n"
+"PO-Revision-Date: 2019-09-24 10:17\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -48,12 +57,18 @@ msgstr[5] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -81,6 +96,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d commits"
msgstr ""
@@ -120,6 +144,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -174,6 +207,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
@@ -183,6 +225,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -213,13 +264,13 @@ msgstr[5] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -234,6 +285,9 @@ msgstr[5] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -264,12 +318,24 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -285,6 +351,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -300,10 +369,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -312,6 +381,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -387,6 +459,9 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -411,9 +486,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -423,6 +510,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -438,18 +528,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -597,9 +699,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -648,6 +747,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -684,6 +786,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -720,6 +825,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -729,6 +837,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -783,6 +894,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -801,6 +972,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -810,12 +984,24 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -828,12 +1014,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -852,9 +1053,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -864,6 +1062,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -885,6 +1086,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -903,12 +1107,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -921,7 +1134,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -936,9 +1149,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -954,7 +1185,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -990,6 +1230,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -1038,6 +1281,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1137,6 +1404,12 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1146,9 +1419,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1167,9 +1446,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1203,6 +1479,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1215,6 +1497,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1227,13 +1512,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1248,7 +1527,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1308,6 +1587,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1350,6 +1632,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1395,10 +1680,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1419,6 +1704,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1467,6 +1758,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1485,6 +1779,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1509,6 +1806,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1551,6 +1851,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1608,7 +1911,7 @@ msgstr[5] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1617,12 +1920,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1659,6 +1977,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1701,6 +2028,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1728,6 +2058,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1764,6 +2100,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1782,6 +2121,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1792,7 +2134,13 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1803,6 +2151,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1827,12 +2178,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1890,6 +2250,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1911,6 +2274,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -2091,31 +2466,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -2130,13 +2505,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2154,6 +2526,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2166,39 +2541,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2361,6 +2748,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2472,7 +2862,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2481,6 +2874,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2508,9 +2907,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2520,6 +2925,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2547,12 +2955,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2589,6 +3006,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2610,6 +3033,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2652,6 +3126,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2688,9 +3165,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2781,6 +3255,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2790,6 +3267,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2835,15 +3315,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2865,6 +3354,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2901,6 +3393,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2910,12 +3405,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2964,6 +3474,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2973,6 +3486,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -3012,12 +3528,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -3048,12 +3570,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -3102,6 +3633,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3189,7 +3723,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3204,6 +3738,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3216,6 +3753,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3225,6 +3768,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3234,6 +3780,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3258,6 +3807,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3270,6 +3822,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3288,15 +3843,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3315,6 +3879,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3354,18 +3921,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3387,6 +3960,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3423,16 +3999,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3462,15 +4044,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3480,10 +4071,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3492,6 +4083,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3507,6 +4101,9 @@ msgstr[5] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3603,12 +4200,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3618,6 +4221,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3627,6 +4233,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3693,31 +4302,43 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3729,13 +4350,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3798,15 +4434,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3843,6 +4488,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3858,6 +4506,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3873,13 +4527,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3888,12 +4545,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3906,7 +4572,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3927,12 +4593,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3963,6 +4641,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3981,6 +4662,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -4005,6 +4689,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -4026,18 +4716,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -4074,6 +4776,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -4083,18 +4824,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -4116,6 +4890,39 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -4140,7 +4947,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4161,6 +4968,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4182,12 +4992,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4230,12 +5049,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4272,6 +5100,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4290,6 +5121,30 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4302,12 +5157,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4317,6 +5181,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4335,6 +5202,24 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4350,6 +5235,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4422,6 +5316,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4473,6 +5370,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4497,9 +5397,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4515,6 +5436,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4524,9 +5451,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4548,9 +5472,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4563,6 +5493,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4620,6 +5553,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4650,6 +5589,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4659,6 +5601,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4680,9 +5625,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4692,6 +5643,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4728,9 +5682,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4752,12 +5712,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4776,6 +5745,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4800,6 +5781,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4884,12 +5868,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4902,6 +5889,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4920,12 +5910,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4959,18 +5955,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4983,9 +5997,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5154,9 +6177,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5193,12 +6222,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5217,9 +6261,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5235,6 +6276,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5292,9 +6339,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5313,13 +6366,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5412,9 +6468,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5436,6 +6498,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5448,9 +6513,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5460,6 +6534,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5514,6 +6594,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5553,6 +6639,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5574,6 +6669,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5595,6 +6693,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5604,6 +6714,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5637,6 +6750,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5664,6 +6780,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5694,6 +6813,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5715,6 +6843,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5724,19 +6855,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5751,10 +6882,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5766,19 +6897,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5787,6 +6942,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5805,9 +6963,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5874,6 +7029,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5916,6 +7074,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5979,6 +7140,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -6015,12 +7179,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -6081,6 +7251,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -6093,6 +7266,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6156,6 +7332,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6264,10 +7443,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6276,10 +7455,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6288,9 +7470,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6315,10 +7503,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6369,12 +7560,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6393,6 +7578,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6417,7 +7608,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6474,6 +7665,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6531,6 +7725,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6549,9 +7752,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6567,9 +7767,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6582,6 +7791,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6591,15 +7806,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6609,7 +7908,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6618,12 +7917,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6687,15 +7992,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6732,6 +8037,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6807,6 +8115,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6840,6 +8151,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6963,6 +8277,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6984,6 +8304,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6996,6 +8319,9 @@ msgstr[5] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -7014,6 +8340,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -7023,6 +8352,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -7032,6 +8364,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -7044,9 +8379,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -7083,6 +8424,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -7146,6 +8490,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7251,7 +8601,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7305,13 +8655,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7356,6 +8709,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7377,6 +8733,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7419,6 +8778,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7467,16 +8829,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7521,9 +8889,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7539,7 +8925,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7557,6 +8946,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7734,6 +9129,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7758,10 +9156,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7851,6 +9252,9 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7872,15 +9276,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7899,7 +9312,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7917,9 +9330,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7938,6 +9348,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7947,6 +9360,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7977,76 +9393,106 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -8058,6 +9504,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -8070,12 +9519,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -8088,13 +9543,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -8106,6 +9561,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -8145,13 +9603,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8163,6 +9627,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8178,19 +9645,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8235,6 +9708,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8253,6 +9729,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8262,7 +9744,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8274,15 +9756,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8340,9 +9873,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8370,6 +9912,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8382,6 +9927,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8415,34 +9963,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8457,19 +10005,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8493,24 +10041,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8679,9 +10245,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8721,6 +10284,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8733,7 +10299,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8745,6 +10311,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8775,6 +10347,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8784,6 +10362,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8883,6 +10467,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8970,13 +10557,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8988,13 +10587,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -9009,9 +10614,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -9021,6 +10623,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -9045,12 +10656,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -9105,9 +10722,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -9117,6 +10740,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9129,6 +10755,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -9147,6 +10776,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -9156,6 +10788,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9171,6 +10806,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9267,6 +10905,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9285,9 +10926,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9303,6 +10956,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9336,6 +10992,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9360,6 +11022,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9369,6 +11037,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9378,6 +11049,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9459,6 +11136,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9483,6 +11166,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9519,13 +11214,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9597,9 +11292,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9627,12 +11340,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9699,7 +11421,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9723,12 +11445,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9777,15 +11508,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9816,6 +11562,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9828,18 +11577,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9870,6 +11613,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9888,6 +11634,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9975,6 +11724,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9984,7 +11736,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -10011,6 +11763,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -10068,6 +11823,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -10104,6 +11865,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10218,6 +11994,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10260,6 +12039,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10290,6 +12072,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10395,6 +12180,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10440,6 +12231,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10449,6 +12243,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10500,9 +12297,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10545,6 +12339,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10563,13 +12363,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10578,6 +12408,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10749,10 +12585,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10770,9 +12654,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10806,6 +12687,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10836,6 +12720,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10860,6 +12747,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10878,6 +12771,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10908,6 +12804,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10983,6 +12882,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -11076,6 +12978,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -11085,9 +12990,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -11097,6 +13011,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -11169,9 +13086,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11199,6 +13113,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11208,9 +13125,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11232,6 +13155,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11241,12 +13167,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11256,30 +13191,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11313,6 +13293,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11322,12 +13311,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11394,6 +13392,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11418,9 +13419,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11433,6 +13440,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11448,6 +13458,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11472,6 +13485,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11487,10 +13503,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11499,6 +13521,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11547,6 +13572,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11616,6 +13644,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11676,7 +13707,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11751,6 +13782,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11760,6 +13794,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11781,15 +13818,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11877,9 +13929,120 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11892,6 +14055,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11907,24 +14073,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11952,6 +14142,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11979,6 +14172,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11988,12 +14184,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -12006,6 +14208,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -12015,7 +14220,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -12027,6 +14241,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -12042,13 +14259,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -12075,6 +14298,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -12102,6 +14331,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -12132,9 +14364,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -12153,6 +14397,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12186,12 +14433,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12201,16 +14460,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12228,6 +14493,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12255,6 +14523,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12312,9 +14586,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12342,6 +14622,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12372,6 +14664,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12384,6 +14679,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12393,6 +14691,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12417,6 +14721,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12435,6 +14742,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12468,9 +14790,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12501,6 +14829,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12510,6 +14841,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12543,6 +14880,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12594,6 +14934,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12663,6 +15006,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12678,6 +15024,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12756,6 +15108,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12777,13 +15132,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12792,6 +15147,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12801,28 +15162,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12849,12 +15219,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12885,6 +15261,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12900,6 +15288,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12924,6 +15315,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12936,9 +15333,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12999,6 +15393,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -13092,9 +15489,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -13152,6 +15555,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13305,6 +15714,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13323,6 +15735,9 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13347,9 +15762,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13374,6 +15786,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13410,9 +15828,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13527,7 +15942,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13554,7 +15969,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13563,7 +15978,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13587,7 +16002,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13623,9 +16038,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13647,6 +16068,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13656,18 +16080,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13692,6 +16119,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13749,10 +16179,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13800,6 +16230,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13809,12 +16245,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13836,13 +16275,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13899,9 +16338,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13920,9 +16365,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13953,6 +16395,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13962,6 +16407,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13983,6 +16431,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -14001,6 +16452,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -14010,6 +16470,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -14019,12 +16482,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -14148,6 +16620,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -14187,6 +16662,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14202,6 +16680,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14229,12 +16710,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14259,12 +16734,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14289,16 +16782,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14307,6 +16800,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14316,9 +16812,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14331,16 +16824,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14361,6 +16863,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14379,6 +16884,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14415,9 +16926,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14445,9 +16953,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14472,12 +16977,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14511,6 +17025,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14523,6 +17049,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14553,6 +17082,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14580,12 +17115,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14622,6 +17169,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14631,15 +17187,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14670,6 +17238,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14682,6 +17253,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14745,6 +17319,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14913,6 +17490,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14925,6 +17505,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14988,7 +17571,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -15000,7 +17583,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -15015,10 +17598,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -15066,6 +17649,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -15078,6 +17667,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -15105,6 +17697,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -15183,6 +17778,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15261,6 +17859,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15282,16 +17883,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15300,16 +17913,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15351,6 +17967,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15366,10 +17985,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15423,6 +18039,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15441,12 +18060,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15456,6 +18081,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15528,15 +18156,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15552,19 +18174,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15585,6 +18204,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15615,6 +18237,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15651,6 +18276,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15705,6 +18333,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15729,7 +18360,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15750,6 +18384,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15771,9 +18408,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15801,6 +18435,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15825,6 +18471,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15915,6 +18567,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15954,6 +18609,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15969,7 +18627,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -16041,6 +18699,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -16053,12 +18714,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -16074,6 +18744,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -16092,6 +18765,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -16101,6 +18780,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16230,6 +18912,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16248,10 +18933,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16269,10 +18954,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16293,40 +18978,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16353,6 +19011,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16416,6 +19077,9 @@ msgstr[5] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16458,6 +19122,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16476,7 +19143,10 @@ msgstr[5] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16485,15 +19155,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
msgid "done"
msgstr ""
@@ -16506,16 +19167,28 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16560,6 +19233,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16608,21 +19284,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16647,15 +19323,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16680,6 +19365,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16803,6 +19497,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16836,6 +19533,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16887,7 +19587,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16899,9 +19599,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16911,6 +19623,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16944,9 +19659,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16959,7 +19680,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16983,7 +19704,10 @@ msgstr[5] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -17013,12 +19737,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -17031,6 +19761,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -17121,15 +19854,42 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -17139,6 +19899,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -17154,12 +19917,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/bg/gitlab.po b/locale/bg/gitlab.po
index 9e3d97343fa..8190c27e65c 100644
--- a/locale/bg/gitlab.po
+++ b/locale/bg/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: bg\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:43\n"
+"PO-Revision-Date: 2019-09-24 10:18\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] "%s Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð±Ñха пропуÑнати, за да не Ñ
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr "Ðктивно"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr "ДейноÑÑ‚"
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr "ДобавÑне на нова папка"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr "Преглед на файла"
msgid "Browse Files"
msgstr "Преглед на файловете"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Разглеждане на файловете"
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Отказ"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr "ОтмÑна"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr "Графики"
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "отказано"
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] "ПодаваниÑ"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "Създаване на нова папка"
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr "Създайте Ñи личен жетон за доÑтъп в акаÑ
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "Създаване на папка"
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr "Създаване на нов…"
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "ЧаÑова зона за „Cron“"
msgid "Cron syntax"
msgstr "СинтакÑÐ¸Ñ Ð½Ð° „Cron“"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr "Ðнализ на циклите"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Програмиране"
@@ -3924,6 +4678,31 @@ msgstr "Подготовка за издаване"
msgid "CycleAnalyticsStage|Test"
msgstr "ТеÑтване"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr "Изтриване"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "ВнедрÑване"
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr "Име на папката"
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr "СвалÑне"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr "Редактиране"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr "Ð’ÑÑка Ñедмица (в неделÑ, в 4 ч. Ñутринта)"
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "СобÑтвеникът не може да бъде променен"
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr "ОÑвежаването започна уÑпешно"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] "ПоÑÐ»ÐµÐ´Ð½Ð¸Ñ %d ден"
msgstr[1] "ПоÑледните %d дни"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "ПоÑледна Ñхема"
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "Ðаучете повече в"
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "Ðов план за Ñхема"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr "ÐÑма планове"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "Ðе е налично"
@@ -8927,6 +10504,9 @@ msgstr "ÐÑма доÑтатъчно данни"
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr "Филтър"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "Схема"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "План за Ñхема"
@@ -9475,7 +11145,7 @@ msgstr "Променливи"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "ÑобÑтвен"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr "вÑички"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "уÑпешни"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "Ñ ÐµÑ‚Ð°Ð¿"
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr "Проектът „%{project_name}“ беше обновен уÑпеÑ
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr "ДоÑтъпът до проекта Ñ‚Ñ€Ñбва да бъде даван поотделно на вÑеки потребител."
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Прочетете повече"
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr "Свързани внедрени задачи"
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "ÐапомнÑне по-къÑно"
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr "Премахване на проекта"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr "Запазване на плана за Ñхема"
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr "Създаване на нов план за Ñхема"
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr "Изберете формата на архива"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr "Изберете чаÑова зона"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "зададете парола"
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "Показване на %d Ñъбитие"
msgstr[1] "Показване на %d ÑъбитиÑ"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "Създайте %{new_merge_request} Ñ Ñ‚ÐµÐ·Ð¸ промени"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Етикети"
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "Етапът на подготовка за издаване показва времето между прилагането на заÑвката за Ñливане и внедрÑването на кода в Ñредата на работещата крайна верÑиÑ. Данните ще бъдат добавени автоматично Ñлед като направите първото Ñи внедрÑване в крайната верÑиÑ."
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr "Етапът на теÑтване показва времето, кое
msgid "The time taken by each data entry gathered by that stage."
msgstr "Времето, което отнема вÑеки Ð·Ð°Ð¿Ð¸Ñ Ð¾Ñ‚ данни за ÑÑŠÐ¾Ñ‚Ð²ÐµÑ‚Ð½Ð¸Ñ ÐµÑ‚Ð°Ð¿."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Това означава, че нÑма да можете да изпращате код, докато не Ñъздадете празно хранилище или не внеÑете ÑъщеÑтвуващо такова."
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr "Време между Ñъздаване на заÑвка за Ñлив
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr "Време преди първата заÑвка за Ñливане"
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "преди %s дни"
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr "Общо време"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "Общо време за теÑтване на вÑички подаваниÑ/ÑливаниÑ"
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr "ÐеизвеÑтно"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "ИÑкате ли да видите данните? Помолете админиÑтратор за доÑтъп."
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr "Можете да добавÑте файлове Ñамо когато
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "Ðе можете да Ñъздавате повече проекти"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] "дни"
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr "нова заÑвка за Ñливане"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "извеÑÑ‚Ð¸Ñ Ð¿Ð¾ е-поща"
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] "родители"
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/bn_BD/gitlab.po b/locale/bn_BD/gitlab.po
index aa3e12a795f..0d25da46afd 100644
--- a/locale/bn_BD/gitlab.po
+++ b/locale/bn_BD/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: bn\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:42\n"
+"PO-Revision-Date: 2019-09-24 10:18\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/bn_IN/gitlab.po b/locale/bn_IN/gitlab.po
index de83f07be4e..945f7f66d52 100644
--- a/locale/bn_IN/gitlab.po
+++ b/locale/bn_IN/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: bn-IN\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:42\n"
+"PO-Revision-Date: 2019-09-24 10:18\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/ca_ES/gitlab.po b/locale/ca_ES/gitlab.po
index d1c0418d21d..318efa98afa 100644
--- a/locale/ca_ES/gitlab.po
+++ b/locale/ca_ES/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: ca\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:43\n"
+"PO-Revision-Date: 2019-09-24 10:19\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] "%d mètrica"
msgstr[1] "%d mètriques"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files}"
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr "2FA activat"
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr "Quant al GitLab"
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "Compte"
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr "Actiu"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr "Sessions actives"
@@ -654,12 +812,20 @@ msgstr "Activitat"
msgid "Add"
msgstr "Afegeix"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr "Afegeix una taula"
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr "Afegeix un comentari a la imatge"
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr "Afegeix una aplicació nova"
msgid "Add new directory"
msgstr "Afegeix un directori nou"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr "Afegeix una reacció"
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr "Tots"
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr "Tots els usuaris"
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr "Analítiques"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Aparença"
@@ -1391,6 +1671,9 @@ msgstr "Aplicacions"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "abr"
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Artefactes"
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "ag."
msgid "August"
msgstr "agost"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr "Facturació"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr "per usuari"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "Taulers"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Cancel·la"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "Cancel·la aquesta tasca"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr "Diagrames"
msgid "Chat"
msgstr "Xat"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "cancel·lat"
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr "Tanca"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "Tancades"
msgid "Closed issues"
msgstr "Incidències tancades"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "Comentaris"
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "Confidencial"
msgid "Confidentiality"
msgstr "Confidencialitat"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr "Registre de contenidors"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr "Etiqueta"
msgid "ContainerRegistry|Tag ID"
msgstr "ID de l'etiqueta"
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr "Crea una petició de fusió i una branca"
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "Crea una branca nova"
@@ -3789,6 +4450,9 @@ msgstr "Crea una etiqueta nova"
msgid "Create new..."
msgstr "Crea..."
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "Crea una etiqueta de projecte"
@@ -3813,6 +4477,12 @@ msgstr "Creat"
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "Creat per mi"
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "Branca actual"
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "Personalitza els colors"
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Codi"
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr "Depura"
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr "Suprimeix"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr "Descripció:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr "Nom del directori"
msgid "Disable"
msgstr "Desactiva"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "Desactiva per a aquest projecte"
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr "Domini"
@@ -4484,9 +5385,15 @@ msgstr "Fet"
msgid "Download"
msgstr "Baixa"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr "Edita"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr "Edita l'aplicació"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4604,6 +5541,9 @@ msgstr "Adreça electrònica"
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr "Introduïu el títol de la petició de fusió"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr "Error"
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr "Nova"
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "Estat"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "feb."
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "Filtra..."
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr "Tots els projectes"
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr "Usuari del GitLab"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr "Enrere"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr "Vés a"
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr "Pàgina d'ajuda"
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Amaga el valor"
@@ -6792,6 +8071,9 @@ msgstr[1] "Amaga els valors"
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "Adreça IP"
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "Petició de fusió"
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr "Petició de fusió"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr "Peticions de fusió"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "Missatges"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "Mètriques"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr "Cancel·la"
msgid "Modal|Close"
msgstr "Tanca"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr "Mesos"
msgid "More"
msgstr "Més"
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/cs_CZ/gitlab.po b/locale/cs_CZ/gitlab.po
index d504b45c395..2123f8235de 100644
--- a/locale/cs_CZ/gitlab.po
+++ b/locale/cs_CZ/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: cs\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:45\n"
+"PO-Revision-Date: 2019-09-24 10:21\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr " a"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -44,12 +53,18 @@ msgstr[3] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -71,6 +86,13 @@ msgstr[1] "%d commity pozadu"
msgstr[2] "%d commitů pozadu"
msgstr[3] "%d commitů pozadu"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d commits"
msgstr ""
@@ -102,6 +124,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -144,6 +173,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
@@ -151,6 +187,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -175,13 +218,13 @@ msgstr[3] "%s dalších commitů bylo vynecháno, aby se předešlo problémům
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -194,6 +237,9 @@ msgstr[3] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -220,12 +266,24 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -241,6 +299,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -256,10 +317,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -268,6 +329,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -337,6 +401,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -359,9 +426,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -371,6 +450,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -384,18 +466,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -519,9 +613,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr "Dvoufaktorové ověření povoleno"
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -570,6 +661,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -606,6 +700,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -642,6 +739,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -651,6 +751,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -705,6 +808,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -723,6 +886,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -732,12 +898,22 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -750,12 +926,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -774,9 +965,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -786,6 +974,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -807,6 +998,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -825,12 +1019,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr "Přidat reakci"
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -843,8 +1046,8 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
-msgstr "Přidat úkol"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr ""
@@ -858,9 +1061,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -876,7 +1097,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -912,6 +1142,9 @@ msgstr "Zastavení úloh selhalo"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Chystáte se zastavit všechny úlohy. To způsobí přerušení všech aktuálně spuštěných úloh."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -960,6 +1193,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1057,6 +1314,12 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1066,9 +1329,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1087,9 +1356,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1123,6 +1389,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1135,6 +1407,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1147,13 +1422,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1168,7 +1437,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1228,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1270,6 +1542,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1315,10 +1590,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1339,6 +1614,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1387,6 +1668,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1405,6 +1689,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1429,6 +1716,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Vzhled"
@@ -1471,6 +1761,9 @@ msgstr "Aplikace"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1520,7 +1813,7 @@ msgstr[3] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1529,12 +1822,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "Dub"
@@ -1571,6 +1879,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1613,6 +1930,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1640,6 +1960,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Artefakty"
@@ -1676,6 +2002,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr "PÅ™iÅ™aÄte vlastní barvu jako například #FF0000"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "Přiřadit štítky"
@@ -1694,6 +2023,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1704,7 +2036,11 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1715,6 +2051,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1737,12 +2076,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "Srp"
msgid "August"
msgstr "Srpen"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1800,6 +2148,9 @@ msgstr "Auto DevOps aktivní"
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1821,6 +2172,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -2001,31 +2364,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -2040,13 +2403,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2064,6 +2424,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2076,35 +2439,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2267,6 +2646,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2378,7 +2760,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2387,6 +2772,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2414,9 +2805,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2426,6 +2823,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2453,12 +2853,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2495,6 +2904,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2516,6 +2931,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2558,6 +3024,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2594,9 +3063,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2687,6 +3153,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2696,6 +3165,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2741,15 +3213,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2771,6 +3252,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2807,6 +3291,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2816,12 +3303,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2870,6 +3372,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2879,6 +3384,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2918,12 +3426,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2954,12 +3468,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -3008,6 +3531,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3095,7 +3621,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3110,6 +3636,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3122,6 +3651,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3131,6 +3666,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3140,6 +3678,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3164,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3176,6 +3720,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3194,15 +3741,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3221,6 +3777,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3260,18 +3819,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3293,6 +3858,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3329,16 +3897,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3368,15 +3942,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3386,10 +3969,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3398,6 +3981,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3411,6 +3997,9 @@ msgstr[3] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3507,12 +4096,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3522,6 +4117,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3531,6 +4129,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3597,31 +4198,41 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3633,13 +4244,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3702,15 +4328,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3747,6 +4382,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3762,6 +4400,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3777,13 +4421,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3792,12 +4439,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3810,7 +4466,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3831,12 +4487,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3867,6 +4535,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3885,6 +4556,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3909,6 +4583,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3930,18 +4610,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3978,6 +4670,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3987,18 +4718,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -4020,6 +4784,35 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -4044,7 +4837,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4065,6 +4858,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4086,12 +4882,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4134,12 +4939,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4176,6 +4990,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4194,6 +5011,26 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4206,12 +5043,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4221,6 +5067,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4239,6 +5088,20 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4252,6 +5115,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4324,6 +5196,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4375,6 +5250,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4399,9 +5277,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4417,6 +5316,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4426,9 +5331,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4450,9 +5352,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4465,6 +5373,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4522,6 +5433,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4552,6 +5469,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4561,6 +5481,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4582,9 +5505,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4594,6 +5523,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4630,9 +5562,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4654,12 +5592,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4678,6 +5625,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4702,6 +5661,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4786,12 +5748,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4804,6 +5769,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4822,12 +5790,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4861,18 +5835,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4885,9 +5877,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5056,9 +6057,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5095,12 +6102,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5119,9 +6141,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5137,6 +6156,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5194,9 +6219,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5215,13 +6246,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5314,9 +6348,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5338,6 +6378,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5350,9 +6393,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5362,6 +6414,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5416,6 +6474,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5455,6 +6519,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5476,6 +6549,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5497,6 +6573,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5506,6 +6594,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5539,6 +6630,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5566,6 +6660,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5596,6 +6693,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5617,6 +6723,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5626,19 +6735,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5653,10 +6762,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5668,19 +6777,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5689,6 +6822,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5707,9 +6843,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5774,6 +6907,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5816,6 +6952,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5879,6 +7018,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5915,12 +7057,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5981,6 +7129,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5993,6 +7144,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6056,6 +7210,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6164,10 +7321,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6176,10 +7333,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6188,9 +7348,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6215,10 +7381,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6269,12 +7438,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6293,6 +7456,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6317,7 +7486,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6374,6 +7543,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6431,6 +7603,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6449,9 +7630,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6467,9 +7645,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6482,6 +7669,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6491,15 +7684,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6509,7 +7786,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6518,12 +7795,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6587,15 +7870,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6632,6 +7915,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6707,6 +7993,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6740,6 +8029,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6863,6 +8155,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6884,6 +8182,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6894,6 +8195,9 @@ msgstr[3] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6912,6 +8216,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6921,6 +8228,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6930,6 +8240,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6942,9 +8255,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6981,6 +8300,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -7044,6 +8366,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7149,7 +8477,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7203,13 +8531,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7254,6 +8585,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7273,6 +8607,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7315,6 +8652,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7363,16 +8703,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7417,9 +8763,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7435,7 +8799,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7453,6 +8820,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7630,6 +9003,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7654,10 +9030,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7745,6 +9124,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7766,15 +9148,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7793,7 +9184,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7811,9 +9202,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7832,6 +9220,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7841,6 +9232,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7871,76 +9265,102 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
+msgstr ""
+
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Approve"
+msgstr ""
+
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7952,6 +9372,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7962,12 +9385,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7980,13 +9409,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7998,6 +9427,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -8037,13 +9469,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8055,6 +9493,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8070,19 +9511,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8127,6 +9574,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8145,6 +9595,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8154,7 +9610,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8166,15 +9622,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8232,9 +9739,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8262,6 +9778,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8274,6 +9793,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8307,34 +9829,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8349,19 +9871,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8385,24 +9907,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8571,9 +10111,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8613,6 +10150,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8625,7 +10165,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8637,6 +10177,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8667,6 +10213,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8676,6 +10228,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8773,6 +10331,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8860,13 +10421,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8878,13 +10451,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8899,9 +10478,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8911,6 +10487,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8935,12 +10520,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8995,9 +10586,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -9007,6 +10604,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9019,6 +10619,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -9037,6 +10640,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -9046,6 +10652,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9061,6 +10670,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9157,6 +10769,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9175,9 +10790,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9193,6 +10820,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9224,6 +10854,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9248,6 +10884,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9257,6 +10899,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9266,6 +10911,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9347,6 +10998,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9371,6 +11028,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9407,13 +11076,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9485,9 +11154,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9515,12 +11202,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9587,7 +11283,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9611,12 +11307,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9665,15 +11370,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9704,6 +11424,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9716,18 +11439,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9758,6 +11475,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9776,6 +11496,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9863,6 +11586,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9872,7 +11598,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9899,6 +11625,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9956,6 +11685,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9992,6 +11727,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10106,6 +11856,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10148,6 +11901,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10178,6 +11934,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10283,6 +12042,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10328,6 +12093,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10337,6 +12105,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10388,9 +12159,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10433,6 +12201,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10451,13 +12225,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10466,6 +12270,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10637,10 +12447,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10658,9 +12516,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10694,6 +12549,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10724,6 +12582,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10748,6 +12609,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10766,6 +12633,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10796,6 +12666,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10871,6 +12744,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10964,6 +12840,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10973,9 +12852,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10985,6 +12873,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -11055,9 +12946,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11085,6 +12973,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11094,9 +12985,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11118,6 +13015,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11127,12 +13027,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11142,30 +13051,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11199,6 +13153,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11208,12 +13171,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11280,6 +13252,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11304,9 +13279,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11319,6 +13300,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11334,6 +13318,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11354,6 +13341,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11369,10 +13359,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11381,6 +13377,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11429,6 +13428,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11496,6 +13498,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11556,7 +13561,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11631,6 +13636,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11640,6 +13648,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11661,15 +13672,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11757,9 +13783,98 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11772,6 +13887,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11787,24 +13905,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11832,6 +13974,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11859,6 +14004,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11868,12 +14016,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11886,6 +14040,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11895,7 +14052,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11907,6 +14073,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11922,13 +14091,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11955,6 +14130,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11982,6 +14163,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -12012,9 +14196,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -12033,6 +14229,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12066,12 +14265,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12081,16 +14292,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12108,6 +14325,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12135,6 +14355,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12192,9 +14418,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12220,6 +14452,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12250,6 +14494,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12262,6 +14509,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12271,6 +14521,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12295,6 +14551,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12313,6 +14572,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12346,9 +14620,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12379,6 +14659,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12388,6 +14671,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12421,6 +14710,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12472,6 +14764,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12541,6 +14836,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12556,6 +14854,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12634,6 +14938,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12655,13 +14962,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12670,6 +14977,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12679,28 +14992,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12727,12 +15049,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12763,6 +15091,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12778,6 +15118,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12802,6 +15145,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12814,9 +15163,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12877,6 +15223,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12970,9 +15319,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -13030,6 +15385,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13183,6 +15544,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13199,6 +15563,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13223,9 +15590,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13250,6 +15614,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13286,9 +15656,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13403,7 +15770,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13430,7 +15797,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13439,7 +15806,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13463,7 +15830,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13499,9 +15866,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13523,6 +15896,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13532,18 +15908,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13568,6 +15947,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13625,10 +16007,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13676,6 +16058,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13685,12 +16073,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13712,13 +16103,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13775,9 +16166,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13796,9 +16193,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13829,6 +16223,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13838,6 +16235,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13859,6 +16259,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13877,6 +16280,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13886,6 +16298,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13895,12 +16310,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -14024,6 +16448,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -14059,6 +16486,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14074,6 +16504,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14101,12 +16534,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14131,12 +16558,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14161,16 +16606,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14179,6 +16624,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14188,9 +16636,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14203,16 +16648,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14233,6 +16687,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14251,6 +16708,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14287,9 +16750,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14317,9 +16777,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14344,12 +16801,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14383,6 +16849,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14395,6 +16873,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14425,6 +16906,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14452,12 +16939,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14494,6 +16993,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14503,15 +17011,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14542,6 +17062,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14554,6 +17077,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14617,6 +17143,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14785,6 +17314,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14797,6 +17329,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14860,7 +17395,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14872,7 +17407,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14887,10 +17422,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14938,6 +17473,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14950,6 +17491,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14977,6 +17521,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -15055,6 +17602,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15133,6 +17683,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15154,16 +17707,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15172,16 +17737,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15223,6 +17791,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15238,10 +17809,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15295,6 +17863,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15311,12 +17882,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15326,6 +17903,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15398,15 +17978,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15422,19 +17996,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15455,6 +18026,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15485,6 +18059,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15521,6 +18098,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15575,6 +18155,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15599,7 +18182,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15620,6 +18206,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15641,9 +18230,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15671,6 +18257,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15695,6 +18293,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15785,6 +18389,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15824,6 +18431,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15839,7 +18449,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15911,6 +18521,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15923,12 +18536,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15944,6 +18566,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15962,6 +18587,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15971,6 +18602,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16088,6 +18722,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16106,10 +18743,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16127,10 +18764,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16151,36 +18788,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16207,6 +18821,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16268,6 +18885,9 @@ msgstr[3] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16310,6 +18930,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16326,7 +18949,10 @@ msgstr[3] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16335,13 +18961,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "done"
msgstr ""
@@ -16352,16 +18971,28 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16406,6 +19037,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16452,21 +19086,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16491,15 +19125,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16522,6 +19165,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16645,6 +19297,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16678,6 +19333,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16729,7 +19387,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16741,9 +19399,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16753,6 +19423,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16786,9 +19459,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16801,7 +19480,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16821,7 +19500,10 @@ msgstr[3] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16847,12 +19529,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16865,6 +19553,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16953,15 +19644,40 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16971,6 +19687,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16986,12 +19705,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/cy_GB/gitlab.po b/locale/cy_GB/gitlab.po
index 49eab6a83bd..f831c880f7d 100644
--- a/locale/cy_GB/gitlab.po
+++ b/locale/cy_GB/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: cy\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:47\n"
+"PO-Revision-Date: 2019-09-24 10:27\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -48,12 +57,18 @@ msgstr[5] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -81,6 +96,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d commits"
msgstr ""
@@ -120,6 +144,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -174,6 +207,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
@@ -183,6 +225,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -213,13 +264,13 @@ msgstr[5] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -234,6 +285,9 @@ msgstr[5] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -264,12 +318,24 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -285,6 +351,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -300,10 +369,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -312,6 +381,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -387,6 +459,9 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -411,9 +486,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -423,6 +510,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -438,18 +528,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -597,9 +699,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -648,6 +747,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -684,6 +786,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -720,6 +825,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -729,6 +837,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -783,6 +894,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -801,6 +972,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -810,12 +984,24 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -828,12 +1014,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -852,9 +1053,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -864,6 +1062,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -885,6 +1086,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -903,12 +1107,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -921,7 +1134,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -936,9 +1149,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -954,7 +1185,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -990,6 +1230,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -1038,6 +1281,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1137,6 +1404,12 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1146,9 +1419,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1167,9 +1446,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1203,6 +1479,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1215,6 +1497,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1227,13 +1512,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1248,7 +1527,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1308,6 +1587,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1350,6 +1632,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1395,10 +1680,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1419,6 +1704,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1467,6 +1758,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1485,6 +1779,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1509,6 +1806,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1551,6 +1851,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1608,7 +1911,7 @@ msgstr[5] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1617,12 +1920,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1659,6 +1977,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1701,6 +2028,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1728,6 +2058,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1764,6 +2100,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1782,6 +2121,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1792,7 +2134,13 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1803,6 +2151,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1827,12 +2178,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1890,6 +2250,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1911,6 +2274,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -2091,31 +2466,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -2130,13 +2505,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2154,6 +2526,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2166,39 +2541,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2361,6 +2748,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2472,7 +2862,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2481,6 +2874,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2508,9 +2907,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2520,6 +2925,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2547,12 +2955,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2589,6 +3006,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2610,6 +3033,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2652,6 +3126,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2688,9 +3165,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2781,6 +3255,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2790,6 +3267,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2835,15 +3315,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2865,6 +3354,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2901,6 +3393,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2910,12 +3405,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2964,6 +3474,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2973,6 +3486,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -3012,12 +3528,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -3048,12 +3570,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -3102,6 +3633,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3189,7 +3723,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3204,6 +3738,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3216,6 +3753,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3225,6 +3768,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3234,6 +3780,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3258,6 +3807,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3270,6 +3822,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3288,15 +3843,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3315,6 +3879,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3354,18 +3921,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3387,6 +3960,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3423,16 +3999,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3462,15 +4044,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3480,10 +4071,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3492,6 +4083,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3507,6 +4101,9 @@ msgstr[5] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3603,12 +4200,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3618,6 +4221,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3627,6 +4233,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3693,31 +4302,43 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3729,13 +4350,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3798,15 +4434,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3843,6 +4488,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3858,6 +4506,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3873,13 +4527,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3888,12 +4545,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3906,7 +4572,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3927,12 +4593,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3963,6 +4641,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3981,6 +4662,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -4005,6 +4689,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -4026,18 +4716,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -4074,6 +4776,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -4083,18 +4824,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -4116,6 +4890,39 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -4140,7 +4947,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4161,6 +4968,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4182,12 +4992,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4230,12 +5049,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4272,6 +5100,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4290,6 +5121,30 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4302,12 +5157,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4317,6 +5181,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4335,6 +5202,24 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4350,6 +5235,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4422,6 +5316,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4473,6 +5370,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4497,9 +5397,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4515,6 +5436,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4524,9 +5451,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4548,9 +5472,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4563,6 +5493,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4620,6 +5553,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4650,6 +5589,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4659,6 +5601,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4680,9 +5625,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4692,6 +5643,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4728,9 +5682,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4752,12 +5712,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4776,6 +5745,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4800,6 +5781,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4884,12 +5868,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4902,6 +5889,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4920,12 +5910,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4959,18 +5955,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4983,9 +5997,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5154,9 +6177,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5193,12 +6222,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5217,9 +6261,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5235,6 +6276,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5292,9 +6339,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5313,13 +6366,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5412,9 +6468,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5436,6 +6498,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5448,9 +6513,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5460,6 +6534,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5514,6 +6594,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5553,6 +6639,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5574,6 +6669,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5595,6 +6693,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5604,6 +6714,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5637,6 +6750,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5664,6 +6780,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5694,6 +6813,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5715,6 +6843,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5724,19 +6855,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5751,10 +6882,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5766,19 +6897,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5787,6 +6942,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5805,9 +6963,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5874,6 +7029,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5916,6 +7074,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5979,6 +7140,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -6015,12 +7179,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -6081,6 +7251,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -6093,6 +7266,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6156,6 +7332,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6264,10 +7443,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6276,10 +7455,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6288,9 +7470,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6315,10 +7503,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6369,12 +7560,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6393,6 +7578,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6417,7 +7608,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6474,6 +7665,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6531,6 +7725,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6549,9 +7752,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6567,9 +7767,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6582,6 +7791,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6591,15 +7806,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6609,7 +7908,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6618,12 +7917,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6687,15 +7992,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6732,6 +8037,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6807,6 +8115,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6840,6 +8151,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6963,6 +8277,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6984,6 +8304,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6996,6 +8319,9 @@ msgstr[5] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -7014,6 +8340,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -7023,6 +8352,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -7032,6 +8364,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -7044,9 +8379,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -7083,6 +8424,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -7146,6 +8490,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7251,7 +8601,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7305,13 +8655,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7356,6 +8709,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7377,6 +8733,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7419,6 +8778,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7467,16 +8829,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7521,9 +8889,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7539,7 +8925,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7557,6 +8946,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7734,6 +9129,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7758,10 +9156,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7851,6 +9252,9 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7872,15 +9276,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7899,7 +9312,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7917,9 +9330,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7938,6 +9348,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7947,6 +9360,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7977,76 +9393,106 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -8058,6 +9504,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -8070,12 +9519,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -8088,13 +9543,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -8106,6 +9561,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -8145,13 +9603,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8163,6 +9627,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8178,19 +9645,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8235,6 +9708,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8253,6 +9729,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8262,7 +9744,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8274,15 +9756,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8340,9 +9873,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8370,6 +9912,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8382,6 +9927,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8415,34 +9963,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8457,19 +10005,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8493,24 +10041,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8679,9 +10245,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8721,6 +10284,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8733,7 +10299,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8745,6 +10311,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8775,6 +10347,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8784,6 +10362,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8883,6 +10467,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8970,13 +10557,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8988,13 +10587,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -9009,9 +10614,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -9021,6 +10623,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -9045,12 +10656,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -9105,9 +10722,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -9117,6 +10740,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9129,6 +10755,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -9147,6 +10776,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -9156,6 +10788,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9171,6 +10806,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9267,6 +10905,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9285,9 +10926,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9303,6 +10956,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9336,6 +10992,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9360,6 +11022,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9369,6 +11037,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9378,6 +11049,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9459,6 +11136,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9483,6 +11166,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9519,13 +11214,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9597,9 +11292,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9627,12 +11340,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9699,7 +11421,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9723,12 +11445,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9777,15 +11508,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9816,6 +11562,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9828,18 +11577,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9870,6 +11613,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9888,6 +11634,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9975,6 +11724,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9984,7 +11736,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -10011,6 +11763,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -10068,6 +11823,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -10104,6 +11865,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10218,6 +11994,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10260,6 +12039,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10290,6 +12072,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10395,6 +12180,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10440,6 +12231,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10449,6 +12243,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10500,9 +12297,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10545,6 +12339,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10563,13 +12363,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10578,6 +12408,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10749,10 +12585,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10770,9 +12654,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10806,6 +12687,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10836,6 +12720,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10860,6 +12747,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10878,6 +12771,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10908,6 +12804,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10983,6 +12882,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -11076,6 +12978,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -11085,9 +12990,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -11097,6 +13011,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -11169,9 +13086,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11199,6 +13113,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11208,9 +13125,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11232,6 +13155,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11241,12 +13167,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11256,30 +13191,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11313,6 +13293,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11322,12 +13311,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11394,6 +13392,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11418,9 +13419,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11433,6 +13440,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11448,6 +13458,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11472,6 +13485,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11487,10 +13503,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11499,6 +13521,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11547,6 +13572,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11616,6 +13644,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11676,7 +13707,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11751,6 +13782,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11760,6 +13794,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11781,15 +13818,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11877,9 +13929,120 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11892,6 +14055,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11907,24 +14073,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11952,6 +14142,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11979,6 +14172,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11988,12 +14184,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -12006,6 +14208,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -12015,7 +14220,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -12027,6 +14241,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -12042,13 +14259,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -12075,6 +14298,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -12102,6 +14331,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -12132,9 +14364,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -12153,6 +14397,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12186,12 +14433,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12201,16 +14460,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12228,6 +14493,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12255,6 +14523,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12312,9 +14586,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12342,6 +14622,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12372,6 +14664,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12384,6 +14679,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12393,6 +14691,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12417,6 +14721,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12435,6 +14742,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12468,9 +14790,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12501,6 +14829,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12510,6 +14841,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12543,6 +14880,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12594,6 +14934,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12663,6 +15006,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12678,6 +15024,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12756,6 +15108,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12777,13 +15132,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12792,6 +15147,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12801,28 +15162,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12849,12 +15219,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12885,6 +15261,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12900,6 +15288,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12924,6 +15315,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12936,9 +15333,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12999,6 +15393,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -13092,9 +15489,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -13152,6 +15555,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13305,6 +15714,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13323,6 +15735,9 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13347,9 +15762,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13374,6 +15786,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13410,9 +15828,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13527,7 +15942,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13554,7 +15969,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13563,7 +15978,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13587,7 +16002,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13623,9 +16038,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13647,6 +16068,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13656,18 +16080,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13692,6 +16119,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13749,10 +16179,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13800,6 +16230,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13809,12 +16245,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13836,13 +16275,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13899,9 +16338,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13920,9 +16365,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13953,6 +16395,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13962,6 +16407,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13983,6 +16431,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -14001,6 +16452,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -14010,6 +16470,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -14019,12 +16482,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -14148,6 +16620,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -14187,6 +16662,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14202,6 +16680,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14229,12 +16710,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14259,12 +16734,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14289,16 +16782,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14307,6 +16800,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14316,9 +16812,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14331,16 +16824,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14361,6 +16863,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14379,6 +16884,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14415,9 +16926,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14445,9 +16953,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14472,12 +16977,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14511,6 +17025,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14523,6 +17049,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14553,6 +17082,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14580,12 +17115,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14622,6 +17169,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14631,15 +17187,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14670,6 +17238,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14682,6 +17253,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14745,6 +17319,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14913,6 +17490,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14925,6 +17505,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14988,7 +17571,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -15000,7 +17583,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -15015,10 +17598,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -15066,6 +17649,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -15078,6 +17667,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -15105,6 +17697,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -15183,6 +17778,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15261,6 +17859,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15282,16 +17883,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15300,16 +17913,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15351,6 +17967,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15366,10 +17985,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15423,6 +18039,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15441,12 +18060,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15456,6 +18081,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15528,15 +18156,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15552,19 +18174,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15585,6 +18204,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15615,6 +18237,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15651,6 +18276,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15705,6 +18333,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15729,7 +18360,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15750,6 +18384,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15771,9 +18408,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15801,6 +18435,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15825,6 +18471,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15915,6 +18567,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15954,6 +18609,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15969,7 +18627,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -16041,6 +18699,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -16053,12 +18714,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -16074,6 +18744,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -16092,6 +18765,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -16101,6 +18780,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16230,6 +18912,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16248,10 +18933,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16269,10 +18954,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16293,40 +18978,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16353,6 +19011,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16416,6 +19077,9 @@ msgstr[5] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16458,6 +19122,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16476,7 +19143,10 @@ msgstr[5] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16485,15 +19155,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
msgid "done"
msgstr ""
@@ -16506,16 +19167,28 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16560,6 +19233,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16608,21 +19284,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16647,15 +19323,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16680,6 +19365,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16803,6 +19497,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16836,6 +19533,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16887,7 +19587,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16899,9 +19599,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16911,6 +19623,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16944,9 +19659,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16959,7 +19680,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16983,7 +19704,10 @@ msgstr[5] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -17013,12 +19737,18 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -17031,6 +19761,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -17121,15 +19854,42 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -17139,6 +19899,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -17154,12 +19917,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/da_DK/gitlab.po b/locale/da_DK/gitlab.po
index 080ed7751e4..352219b4745 100644
--- a/locale/da_DK/gitlab.po
+++ b/locale/da_DK/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: da\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:45\n"
+"PO-Revision-Date: 2019-09-24 10:17\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/de/gitlab.po b/locale/de/gitlab.po
index 8d8803cc2bc..57f17ae854d 100644
--- a/locale/de/gitlab.po
+++ b/locale/de/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: de\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:47\n"
+"PO-Revision-Date: 2019-09-24 10:26\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (von %{timeoutSource})"
msgid " Please sign in."
msgstr " Bitte melde dich an."
@@ -27,6 +30,12 @@ msgstr " Das musst du vor %{grace_period_deadline} tun."
msgid " and"
msgstr " und"
+msgid " and "
+msgstr " und "
+
+msgid " and %{sliced}"
+msgstr " und %{sliced}"
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " um %d Punkt verschlechtert"
@@ -40,12 +49,18 @@ msgstr[1] " um %d Punkte verbessert"
msgid " or "
msgstr " oder "
+msgid " or <!merge request id>"
+msgstr " oder <!merge request id>"
+
msgid " or <#epic id>"
msgstr " oder <#epic id>"
msgid " or <#issue id>"
msgstr " oder <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr " oder Referenzen (z.B. Pfad/zum/Projekt!merge_request_id)"
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d Kommentar"
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] "%d Commit hinterher"
msgstr[1] "%d Commits hinterher"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d Commit,"
+msgstr[1] "%d Commits,"
+
msgid "%d commits"
msgstr "%d Commits"
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d festes Testergebnis"
msgstr[1] "%d feste Testergebnisse"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] "%d Merge-Request nicht erreichbar"
+msgstr[1] "%d nicht erreichbare Merge-Requests"
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d Ticket"
@@ -106,19 +131,29 @@ msgstr[1] "%d Merge-Requests"
msgid "%d merge request that you don't have access to."
msgid_plural "%d merge requests that you don't have access to."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d Merge Request auf das du keinen Zugriff hast."
+msgstr[1] "%d Merge Requests auf die du keinen Zugriff hast."
msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d Metrik"
msgstr[1] "%d Metriken"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] "%d Minute"
+msgstr[1] "%d Minuten"
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "%d weiterer Kommentar"
msgstr[1] "%d weiterere Kommentare"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] "%d Sekunde"
+msgstr[1] "%d Sekunden"
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d vorgemerkte Änderung"
@@ -137,14 +172,14 @@ msgstr[1] "%s zusätzliche Commits wurden ausgelassen um Leistungsprobleme zu ve
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName}'s Diskussion"
+msgid "%{authorsName}'s thread"
+msgstr "%{authorsName}s Unterhaltung"
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} verfasste %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
-msgstr "%{counter_repositories} Repositories, %{counter_wikis} Wikis, %{counter_build_artifacts} Build-Artefakte, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
+msgstr "%{count} LOC/Commit"
msgid "%{count} approval required from %{name}"
msgid_plural "%{count} approvals required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] "%{count} Zustimmungen erforderlich von %{name}"
msgid "%{count} approvals from %{name}"
msgstr "%{count} Zustimmungen von %{name}"
+msgid "%{count} files touched"
+msgstr "%{count} Dateien verändert"
+
msgid "%{count} more"
msgstr "%{count} weitere"
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] "%{count} ausstehender Kommentar"
msgstr[1] "%{count} ausstehende Kommentare"
+msgid "%{duration}ms"
+msgstr "%{duration}ms"
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} Versuche erneut, diesen Commit zu cherry-picken."
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr "%{edit_in_new_fork_notice} Versuche erneut, ein neues Verzeichnis zu erstellen."
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} Versuche erneut, diesen Commit rückgängig zu machen."
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr "%{edit_in_new_fork_notice} Versuche erneut, eine Datei hochzuladen."
+
+msgid "%{extra} more downstream pipelines"
+msgstr "%{extra} weitere Downstream-Pipelines"
+
msgid "%{filePath} deleted"
msgstr "%{filePath} gelöscht"
@@ -197,6 +247,9 @@ msgstr "%{group_docs_link_start}Gruppen%{group_docs_link_end} ermöglichen dir d
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr "%{group_name} nutzt Accounts, die von einer Gruppe verwaltet werden. Du musst dir einen neuen GitLab-Account erstellen, welcher von %{group_name} verwaltet wird."
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr "%{icon}Sie sind dabei, %{usersTag} Personen zur Diskussion hinzuzufügen. Lassen Sie Vorsicht walten."
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} wird entfernt! Bist du sicher?"
@@ -212,18 +265,21 @@ msgstr "%{level_name} ist in einer %{group_level_name} -Gruppe nicht erlaubt."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr "%{level_name} ist nicht zulässig, da das Fork-Quellprojekt eine geringere Sichtbarkeit hat."
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "%{level_name} Sichtbarkeit wurde vom/von der Administrator(in) eingeschränkt."
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}Erfahre mehr%{link_end} über Rollenberechtigungen"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Gestartet"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} ist durch Gitlab-Benutzer(in) %{lock_user_id} gesperrt"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr "%{mergeLength}/%{usersLength} können zusammenführen"
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText}, dieses Ticket wird automatisch geschlossen werden."
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} Tag"
msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Tags"
+msgid "%{tabname} changed"
+msgstr "%{tabname} geändert"
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files}"
@@ -307,9 +366,21 @@ msgstr "%{unstaged} nicht vorgemerkte und %{staged} vorgemerkte Änderungen"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}Erfahre mehr%{usage_ping_link_end} darüber, welche Informationen mit GitLab Inc. geteilt werden."
+msgid "%{userName} (cannot merge)"
+msgstr "%{userName} (kann nicht mergen)"
+
+msgid "%{userName}'s avatar"
+msgstr "Avatar von %{userName}"
+
msgid "%{user_name} profile page"
msgstr "Profileseite von %{user_name}"
+msgid "%{username}'s avatar"
+msgstr "Avatar von %{username}"
+
+msgid "%{value} ms"
+msgstr "%{value} ms"
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr "%{verb} %{time_spent_value} verbrachte Zeit."
@@ -319,29 +390,44 @@ msgstr "'%{level}' ist kein gültiger Sichtbarkeitslevel"
msgid "'%{source}' is not a import source"
msgstr "'%{source}' ist keine Import-Quelle"
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "(%d geschlossen)"
+msgstr[1] "(%d geschlossen)"
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} zusammengeführt)"
msgid "(No changes)"
msgstr "(Keine Änderungen)"
+msgid "(Show all)"
+msgstr "(Alle anzeigen)"
+
msgid "(check progress)"
msgstr "(Fortschritt überprüfen)"
msgid "(external source)"
msgstr "(externe Quelle)"
+msgid "(removed)"
+msgstr "(entfernt)"
+
+msgid "+ %{amount} more"
+msgstr "+ %{amount} weitere"
+
msgid "+ %{count} more"
msgstr "+ %{count} weitere"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} weitere"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr "+ %{numberOfHiddenAssignees} weitere"
+
msgid "+%{extraOptionCount} more"
msgstr "+%{extraOptionCount} weitere"
@@ -377,13 +463,13 @@ msgstr[1] "%d Tage"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 geschlossenes Ticket"
+msgstr[1] "%{issues} geschlossene Tickets"
msgid "1 closed merge request"
msgid_plural "%{merge_requests} closed merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 geschlossener Merge Request"
+msgstr[1] "%{merge_requests} geschlossene Merge Requests"
msgid "1 day"
msgstr "1 Tag"
@@ -395,18 +481,18 @@ msgstr[1] "%d Gruppen"
msgid "1 merged merge request"
msgid_plural "%{merge_requests} merged merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 zusammengeführte Merge Request"
+msgstr[1] "%{merge_requests} zusammengeführte Merge Requests"
msgid "1 open issue"
msgid_plural "%{issues} open issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 offenes Ticket"
+msgstr[1] "%{issues} offene Tickets"
msgid "1 open merge request"
msgid_plural "%{merge_requests} open merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 offene Merge Request"
+msgstr[1] "%{merge_requests} offene Merge Requests"
msgid "1 pipeline"
msgid_plural "%d pipelines"
@@ -441,11 +527,8 @@ msgstr "20-29 Beiträge"
msgid "2FA"
msgstr "2FA"
-msgid "2FA enabled"
-msgstr "Zwei-Faktor-Authentifizierung aktiviert"
-
msgid "2FADevice|Registered On"
-msgstr ""
+msgstr "Registriert am"
msgid "3 days"
msgstr "3 Tage"
@@ -492,6 +575,9 @@ msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> fügt
msgid "<no name set>"
msgstr "<no name set>"
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} nicht vorgemerkte</strong> und <strong>%{stagedFilesLength} vorgemerkte</strong> Änderungen"
@@ -528,6 +614,9 @@ msgstr "Eine Hugo-Seite, die statt GitLab Netlify für CI/CD nutzt, aber trotzde
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "Eine Jekyll-Seite, die statt GitLab Netlify für CI/CD nutzt, aber trotzdem von all den anderen nützlichen GitLab-Funktionen profitiert."
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr "Ein SSL-Zertifikat von Let's Encrypt kann erst nach Domainbestätigung abgerufen werden."
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr "Ein Let's Encrypt-Konto wird für diese GitLab-Installation mit deiner E-Mail-Adresse konfiguriert. Du erhältst E-Mails, um vor dem Ablaufen der Zertifikate zu warnen."
@@ -564,6 +653,9 @@ msgstr "Eine gebrauchsfertige Vorlage zur Nutzung mit iOS Swift-Apps."
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "Ein regulärer Ausdruck, um die Ausgabe der Testabdeckung in der Fehlerprotokollierung des Jobs zu finden. Zum Deaktivieren leer lassen"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "Ein(e) Benutzer(in) mit Schreibzugriff auf den Quellbranch hat diese Option ausgewählt"
@@ -573,6 +665,9 @@ msgstr "API-Hilfe"
msgid "API Token"
msgstr "API Token"
+msgid "Abort"
+msgstr "Abbrechen"
+
msgid "About GitLab"
msgstr "Ãœber GitLab"
@@ -619,14 +714,74 @@ msgid "Access to '%{classification_label}' not allowed"
msgstr "Zugriff auf '%{classification_label}' nicht erlaubt"
msgid "AccessDropdown|Groups"
-msgstr ""
+msgstr "Gruppen"
msgid "AccessDropdown|Roles"
-msgstr ""
+msgstr "Rollen"
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr "Zugangs-Token"
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "Sind Sie sicher? Jegliche RSS- oder Kalender-Links, die aktuell genutzt werden aufhören zu funktionieren."
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr "Sind Sie sicher? Jegliche betroffene E-Mail-Adressen, die aktuell genutzt werden aufhören zu funktionieren."
+
+msgid "AccessTokens|Created"
+msgstr "Erstellt"
+
+msgid "AccessTokens|Feed token"
+msgstr "Feed-Token"
+
+msgid "AccessTokens|Incoming email token"
+msgstr "Token für eingehende E-Mails"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "Es kann nicht für den Zugriff auf andere Daten verwendet werden."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Halte dieses Token geheim. Alle, die dieses Token erfahren, haben Vollzugriff. Sie können das Token unter folgendem Link zurücksetzen %{link_reset_it}."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "Konto"
@@ -645,6 +800,9 @@ msgstr "Service-Desk aktivieren"
msgid "Active"
msgstr "Aktiv"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr "Aktive %{type}-Tokens (%{token_length})"
+
msgid "Active Sessions"
msgstr "Aktive Sitzungen"
@@ -654,12 +812,20 @@ msgstr "Aktivität"
msgid "Add"
msgstr "Hinzufügen"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] "%d Ticket hinzufügen"
+msgstr[1] "%d Tickets hinzufügen"
+
msgid "Add CHANGELOG"
msgstr "CHANGELOG hinzufügen"
msgid "Add CONTRIBUTING"
msgstr "CONTRIBUTING hinzufügen"
+msgid "Add GitLab to Slack"
+msgstr "GitLab zu Slack hinzufügen"
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Gruppen-Webhooks und GitLab Enterprise Edition hinzufügen."
@@ -672,12 +838,27 @@ msgstr "Kubernetes-Cluster hinzufügen"
msgid "Add README"
msgstr "README hinzufügen"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr "Fügen Sie ein %{type} Token hinzu"
+
msgid "Add a GPG key"
msgstr "GPG-Schlüssel hinzufügen"
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr "To-Do hinzufügen"
+
msgid "Add a bullet list"
msgstr "Aufzählungsliste hinzufügen"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr "Füge einen allgemeinen Kommentar zu %{noteableDisplayName} hinzu."
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Trage einen allgemeinen Kommentar zu diesem %{noteable_name} bei."
@@ -696,9 +877,6 @@ msgstr "Tabelle hinzufügen"
msgid "Add a task list"
msgstr "Eine Aufgabenliste hinzufügen"
-msgid "Add a todo"
-msgstr "To-do hinzufügen"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Füge zusätzlichen Text hinzu, der in jeglicher E-Mail-Kommunikation angezeigt wird. Maximal %{character_limit} Zeichen"
@@ -706,7 +884,10 @@ msgid "Add an SSH key"
msgstr "SSH-Schlüssel hinzufügen"
msgid "Add an issue"
-msgstr ""
+msgstr "Ticket hinzufügen"
+
+msgid "Add approval rule"
+msgstr "Füge Zustimmungsregel hinzu"
msgid "Add approvers"
msgstr "Genehmigungsberechtigte hinzufügen"
@@ -721,7 +902,7 @@ msgid "Add comment now"
msgstr "Jetzt kommentieren"
msgid "Add email address"
-msgstr ""
+msgstr "E-Mail-Adresse hinzufügen"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
msgstr "Kopf- und Fußzeile zu E-Mails hinzufügen. Bitte beachte, dass Farbeinstellungen nur innerhalb des Anwendungs-Interfaces angewendet werden"
@@ -729,6 +910,9 @@ msgstr "Kopf- und Fußzeile zu E-Mails hinzufügen. Bitte beachte, dass Farbeins
msgid "Add image comment"
msgstr "Bildkommentar hinzufügen"
+msgid "Add issues"
+msgstr "Tickets hinzufügen"
+
msgid "Add italic text"
msgstr "Kursiven Text hinzufügen"
@@ -747,12 +931,21 @@ msgstr "Neue Anwendung hinzufügen"
msgid "Add new directory"
msgstr "Erstelle eine neues Verzeichnis"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr "Neues Mitglied zu %{strong_start}%{group_name}%{strong_end} hinzufügen"
+
msgid "Add or subtract spent time"
msgstr "Addiere oder subtrahiere verbrachte Zeit"
msgid "Add reaction"
msgstr "Reaktion hinzufügen"
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,8 +958,8 @@ msgstr "Zum Projekt hinzufügen"
msgid "Add to review"
msgstr "Zum Review hinzufügen"
-msgid "Add todo"
-msgstr "To-do hinzufügen"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "Benutzer(innen) zur Gruppe hinzufügen:"
@@ -780,9 +973,27 @@ msgstr "Keine Benutzer(innen) angegeben."
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "Zu viele Benutzer(innen) angegeben (Limit ist %{user_limit})"
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr "Hinzugefügt um"
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "Das Hinzufügen neuer Anwendungen ist in deiner GitLab-Instanz deaktiviert. Bitte kontaktiere deine(n) GitLab-Administrator(in), um die Berechtigung zu erhalten"
@@ -798,8 +1009,17 @@ msgstr "Fügt hinzu"
msgid "Adds %{epic_ref} as child epic."
msgstr "Fügt %{epic_ref} als Sub-Epic hinzu."
-msgid "Adds a todo."
-msgstr "Fügt ein To-do hinzu."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "Adminbereich"
@@ -834,6 +1054,9 @@ msgstr "Stoppen von Jobs ist fehlgeschlagen"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Du bist dabei, alle Jobs zu stoppen. Dies hält alle aktuellen Jobs, die ausgeführt werden, an."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr "Notiz"
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "Eine neu erstellte Umgebungsvariable ist standardmäßig geschützt."
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "2FA deaktiviert"
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] "Alarm"
msgstr[1] "Alarme"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "Alarme"
@@ -986,9 +1239,15 @@ msgstr "Alle"
msgid "All Members"
msgstr "Alle Mitglieder"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "Alle Änderungen sind committed"
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr "Alle Merge-Konflikte wurden gelöst. Der Merge-Request kann nun gemerged
msgid "All projects"
msgstr "Alle Projekte"
-msgid "All todos were marked as done."
-msgstr "Alle To-dos wurden als erledigt markiert."
-
msgid "All users"
msgstr "Alle Benutzer(innen)"
@@ -1043,6 +1299,12 @@ msgstr "Rendering von PlantUML-Diagrammen in Asciidoc-Dokumenten erlauben."
msgid "Allow requests to the local network from hooks and services."
msgstr "Erlaube Anfragen an das lokale Netzwerk von Hooks und Diensten."
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr "Diesem Schlüssel auch erlauben, in das Repository zu pushen? (Normalerweise ist nur Pull-Zugriff erlaubt)"
@@ -1055,6 +1317,9 @@ msgstr "Erlaube es Benutzer(innen) Zugriff zu beantragen"
msgid "Allow users to request access if visibility is public or internal."
msgstr "Erlaube es Benutzer(innen) Zugriff zu beantragen, wenn die Sichtbarkeit Öffentlich oder Intern ist."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "Scheitern erlaubt"
@@ -1067,14 +1332,8 @@ msgstr "Wird auch \"Herausgeber\" oder \"Relying-Party-Trust-Identifier\" genann
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "Wird auch \"Relying-Party-Service-URL\" oder \"Antwort-URL\" genannt"
-msgid "Alternate support URL for help page"
-msgstr "Alternative Support-URL für die Hilfe-Seite"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "Alternativ kannst du einen %{personal_access_token_link} verwenden. Wenn du deinen persönlichen Access-Token erzeugst, musst du den Gültigkeitsbereich <code>repo</code> auswählen, damit wir eine Liste deiner öffentlichen und privaten Repositories anzeigen können, die für die Verbindung verfügbar sind."
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Alternativ kannst du einen %{personal_access_token_link} verwenden. Wenn du deinen persönlichen Access-Token erzeugst, musst du den Gültigkeitsbereich <code>repo</code> auswählen, damit wir eine Liste deiner öffentlichen und privaten Repositories anzeigen können, die für den Import verfügbar sind."
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "Dauer (in Stunden), für die der/die Benutzer(in) die erzwungene Konfiguration der Zwei-Faktor-Authentifizierung überspringen darf"
@@ -1088,8 +1347,8 @@ msgstr "Bei einem leeren GitLab-Benutzerfeld wird der vollständigen Namen des F
msgid "An error has occurred"
msgstr "Es ist ein Fehler aufgetreten"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Beim Hinzufügen eines Entwurfs zur Diskussion ist ein Fehler aufgetreten."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "Beim Hinzufügen eines neuen Entwurfs ist ein Fehler aufgetreten."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr "Beim Abrufen der Label-Farben ist ein Fehler aufgetreten."
@@ -1190,6 +1452,9 @@ msgstr "Beim Abrufen der Releases ist ein Fehler aufgetreten. Bitte versuche es
msgid "An error occurred while fetching this tab."
msgstr "Beim Abrufen des Tabs ist ein Fehler aufgetreten."
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "Beim Abrufen der Projekte ist ein Fehler aufgetreten"
@@ -1235,12 +1500,12 @@ msgstr "Beim Entfernen des Epics ist ein Fehler aufgetreten."
msgid "An error occurred while removing issues."
msgstr "Beim Entfernen der Tickets ist ein Fehler aufgetreten."
-msgid "An error occurred while rendering KaTeX"
-msgstr "Beim Erstellen der Vorschau für KaTeX trat ein Fehler auf"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "Beim Rendern der Vorschau der Broadcast-Nachricht ist ein Fehler aufgetreten"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "Beim Abrufen der Kalenderaktivität ist ein Fehler aufgetreten"
@@ -1259,6 +1524,12 @@ msgstr "Beim Speichern der Genehmigungseinstellungen ist ein Fehler aufgetreten"
msgid "An error occurred while subscribing to notifications."
msgstr "Beim Abonnieren von Benachrichtigungen ist ein Fehler aufgetreten."
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "Beim Abbestellen der Benachrichtigungen ist ein Fehler aufgetreten."
@@ -1307,6 +1578,9 @@ msgstr "Beim Laden der Pipeline-Jobs ist ein Fehler aufgetreten."
msgid "An error occurred. Please try again."
msgstr "Ein Fehler ist aufgetreten. Bitte versuche es erneut."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "Beim Überprüfen der Projektumgebung ist ein unerwarteter Fehler aufgetreten."
@@ -1325,6 +1599,9 @@ msgstr "Beim Beenden des Web-Terminals ist ein unerwarteter Fehler aufgetreten."
msgid "Analytics"
msgstr "Analysen"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr "Vorfahren"
@@ -1349,6 +1626,9 @@ msgstr "Alle verschlüsselten Tokens"
msgid "Any namespace"
msgstr "Jeder Namensraum"
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Aussehen"
@@ -1391,6 +1671,9 @@ msgstr "Anwendungen"
msgid "Applied"
msgstr "Angewendet"
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr "Vorschlag anwenden"
@@ -1432,8 +1715,8 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
-msgstr "Mitglieder"
+msgid "ApprovalRule|Approvers"
+msgstr ""
msgid "ApprovalRule|Name"
msgstr "Name"
@@ -1441,12 +1724,27 @@ msgstr "Name"
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr "z.B. QS, Sicherheit, etc."
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "Apr"
@@ -1483,6 +1781,15 @@ msgstr "Möchtest du wirklich die Erstellung dieses Kommentars abbrechen?"
msgid "Are you sure you want to cancel editing this comment?"
msgstr "Möchtest du wirklich die Bearbeitung dieses Kommentars abbrechen?"
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr "Bist du sicher, dass du den Health-Check-Token zurücksetzen willst?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr "Artefakt-ID"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Artefakte"
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr "Benutzerdefinierte Farbe wie #FF0000 zuweisen"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "Label zuweisen"
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "Zugewiesene Tickets"
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr "Mir zugewiesen"
msgid "Assignee"
-msgstr "Zugewiesen an"
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr "Zuweisungslisten sind mit deiner momentanen Lizenz nicht verfügbar"
@@ -1627,6 +1951,9 @@ msgstr "Zuweisungslisten zeigen alle dem ausgewählten Benutzer zugewiesenen Tic
msgid "Assignee(s)"
msgstr "Zugewiesene Personen"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr "Die Datei konnte nicht angehängt werden."
msgid "Audit Events"
msgstr "Audit-Ereignisse"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "Aug"
msgid "August"
msgstr "August"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "Authentifizierungsprotokoll"
@@ -1710,6 +2046,9 @@ msgstr "Auto-DevOps aktiviert"
msgid "Auto DevOps, runners and job artifacts"
msgstr "Auto-DevOps, Runners und Jobartefakte"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "Lösche redundante, ausstehende Pipelines automatisch"
@@ -1731,6 +2070,18 @@ msgstr "Erfahre mehr in der %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Die Auto-DevOps-Pipeline wurde aktiviert und wir verwendet, falls keine alternative CI-Konfigurationsdatei gefunden wurde. %{more_information_link}"
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,32 +2262,32 @@ msgstr "Unten findest du alle Gruppen, die öffentlich sind."
msgid "Billing"
msgstr "Abrechnung"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} nutzt aktuell den Tarif %{plan_link}."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "Derzeit ist ein automatisches Downgrade und Upgrade auf einige Tarife nicht möglich."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "Aktueller Tarif"
-msgid "BillingPlans|Customer Support"
-msgstr "Kundensupport"
-
msgid "BillingPlans|Downgrade"
msgstr "Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "Erfahre mehr über unsere Tarife, indem du unsere %{faq_link} liest, oder beginne einen kostenlosen 30-Tage Test von GitLab.com Gold."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "Erfahre mehr über die einzelnen Tarife, indem du unsere %{faq_link} liest."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "Tarif verwalten"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "Wende dich in diesem Fall bitte an %{customer_support_link}."
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "Alle Features von %{plan_name} ansehen"
@@ -1950,14 +2301,11 @@ msgstr "Im Abschnitt Abrechnung von %{parent_billing_page_link} kannst du den Ta
msgid "BillingPlans|Upgrade"
msgstr "Upgrade"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "Dein aktueller Tarif ist %{plan_link}."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "Deine GitLab.com Testversion ist am %{expiration_date} abgelaufen. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "Deine Gold-Testversion <strong>läuft am %{expiration_date}</strong> ab. Erfahre mehr über GitLab.com Gold, indem du unsere %{features_link} liest."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "Features"
@@ -1974,6 +2322,9 @@ msgstr "%{price_per_year} jährlich"
msgid "BillingPlans|per user"
msgstr "je Benutzer(in)"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr "Bitbucket-Server-Import"
@@ -1986,31 +2337,51 @@ msgstr "Sperren"
msgid "Blocked"
msgstr "Gesperrt"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr "Blog"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "Boards"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "Branch %{branchName} wurde im Repository dieses Projekts nicht gefunden."
@@ -2173,6 +2544,9 @@ msgstr "Datei durchsuchen"
msgid "Browse Files"
msgstr "Dateien durchsuchen"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Dateien durchsuchen"
@@ -2284,8 +2658,11 @@ msgstr "Erfahre mehr über Auto-DevOps"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "Die Auto-DevOps-Pipeline wird ausgeführt, wenn keine alternative CI-Konfigurationsdatei gefunden wird."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
-msgstr "Du musst eine %{kubernetes_cluster_start}Kubernetes-Cluster-integration%{kubernetes_cluster_end} mit einer Domain zu diesem Projekt hinzufügen, damit deine Bereitstellungsstrategie korrekt funktioniert."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
msgid "CICD|group enabled"
msgstr "Gruppe aktiviert"
@@ -2293,6 +2670,12 @@ msgstr "Gruppe aktiviert"
msgid "CICD|instance enabled"
msgstr "Instanz aktiviert"
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr "CONTRIBUTING"
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Abbrechen"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "Job abbrechen"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "Kann nicht automatisch zusammengeführt werden"
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "Kann verwalteten Kubernetes-Cluster nicht ändern"
@@ -2359,12 +2751,21 @@ msgstr "Zertifikat (PEM)"
msgid "Change Weight"
msgstr "Gewichtung ändern"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr "Zuweisung(en) ändern"
msgid "Change assignee(s)."
msgstr "Zuweisung(en) ändern."
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr "Pfad ändern"
@@ -2401,6 +2802,12 @@ msgstr "Wiederherstellen "
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "Dies wird einen neuen Commit erzeugen, um die vorhandenen Änderungen rückgängig zu machen."
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr "Änderungen"
@@ -2422,6 +2829,57 @@ msgstr "Diagramme"
msgid "Chat"
msgstr "Chat"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr "Wähle einen Branch/Tag (z. B. %{master}) oder gib einen Commit ein (z.
msgid "Choose a file"
msgstr "Wähle eine Datei"
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr "Wähle eine Rollenberechtigung aus"
@@ -2500,9 +2961,6 @@ msgstr "Wähle welche Repositories du verbinden und die CI/CD-Pipelines ausführ
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "Wähle die Fragmente aus, die du mit diesem sekundären Knoten synchronisieren möchtest."
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "abgebrochen"
@@ -2593,6 +3051,9 @@ msgstr "Variable jetzt löschen"
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "* (Alle Umgebungen)"
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "Suche löschen"
msgid "Clear search input"
msgstr "Suchfelder löschen"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr "Klicke auf die Schaltfläche <strong>Keine auswählen</strong> auf der r
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "Klicke auf die Schaltfläche unten um den Installationsprozess zu starten indem du auf die Kubernetes-Seite gehst"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "Zum Erweitern klicken."
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr "Schließen"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "Epic schließen"
@@ -2722,12 +3201,27 @@ msgstr "Meilenstein abschließen"
msgid "Close sidebar"
msgstr "Seitenleiste schließen"
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "Geschlossen"
msgid "Closed issues"
msgstr "Geschlossene Tickets"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr "%{custom_domain_start}Mehr Informationen%{custom_domain_end}."
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Erweiterte Optionen für die Integration dieses Kubernetes-Clusters"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Ein Fehler ist bei dem Verbindungsversuch mit der Google Cloud API aufgetreten. Bitte versuche es später erneut."
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Zertifizierungsstellen-Bundle (PEM-Format)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "Wähle, welche Anwendungen auf deinem Kubernetes Cluster installiert werden sollen. Um eine der folgenden Anwendungen zu installieren ist Helm Tiller erforderlich."
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Wähle, welche deiner Umgebungen du für dieses Cluster verwenden willst."
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr "Kubernetes-Clusternamen kopieren"
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Kubernetes-Cluster erstellen"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "Wusstest du schon?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Aktiviere oder deaktiviere die Verbindung zwischen GitLab und deinem Kubernetes-Cluster."
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Google Cloud Platform-Projekt"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes-Engine"
@@ -3001,8 +3519,8 @@ msgstr "Kubernetes-Cluster wird mit der Google Kubernetes-Engine erstellt..."
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Kubernetes-Clustername"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Kubernetes-Cluster wurde erfolgreich mit der Google Kubernetes Engine erstellt. Aktualisiere die Seite um Clusterdetails anzuzeigen"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "Kubernetes-Cluster ermöglichen dir auf einfache Weise die Benutzung der Review-Anwendungen, die Bereitstellung deiner Anwendungen, deine Pipelines auszuführen, und vieles mehr."
@@ -3016,6 +3534,9 @@ msgstr "Erfahre mehr über %{help_link_start_machine_type}Maschinentypen%{help_l
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "Erfahre mehr über %{help_link_start}Zonen%{help_link_end}."
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "Lerne mehr über Kubernetes"
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Maschinentyp"
@@ -3037,6 +3564,9 @@ msgstr "Stelle sicher, dass dein Konto %{link_to_requirements}, um Kubernetes-Cl
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "Verwalte dein Kubernetes-Cluster hier: %{link_gke}"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "Keine Maschinentypen stimmen mit deiner Suche überein"
@@ -3046,6 +3576,9 @@ msgstr "Keine Projekte gefunden"
msgid "ClusterIntegration|No projects matched your search"
msgstr "Keine Projekte entsprechen deiner Suche"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "Keine Zonen entsprechen deiner Suche"
@@ -3070,6 +3603,9 @@ msgstr "Projektcluster"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "Projekt-Namensraum (optional, einzigartig)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3082,6 +3618,9 @@ msgstr "RBAC-kompatibles Cluster"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "Lies unsere %{link_to_help_page} zur Kubernetes-Cluster-Integration."
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Entferne die Kubernetes-Cluster-Integration"
@@ -3100,15 +3639,24 @@ msgstr "Anfrage zur Installation fehlgeschlagen"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "Änderungen speichern"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "Suche Maschinentypen"
msgid "ClusterIntegration|Search projects"
msgstr "Suche Projekte"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "Suche Zonen"
@@ -3127,6 +3675,9 @@ msgstr "Wähle ein Projekt und ein Zone, um den Maschinentyp auszuwählen"
msgid "ClusterIntegration|Select project to choose zone"
msgstr "Wähle ein Projekt aus, um die Zone auszuwählen"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "Wähle eine Zone aus"
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "Validierung des Projektabrechnungsstatus"
@@ -3235,18 +3795,24 @@ msgstr "Dokumentation"
msgid "ClusterIntegration|help page"
msgstr "Hilfeseite"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "erfüllt die Anforderungen"
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
-msgstr "ordnungsgemäß konfiguriert"
-
msgid "ClusterIntegration|sign up"
msgstr "Registrierung"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr ""
@@ -3274,15 +3840,24 @@ msgstr "Genehmigungsberechtigte ausblenden"
msgid "Collapse sidebar"
msgstr "Seitenleiste einklappen"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "Kommentieren"
@@ -3292,11 +3867,11 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
-msgstr "Kommentieren & Diskussion beenden"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "Kommentieren & Diskussion wieder eröffnen"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "Position des Kommentarformulars"
@@ -3304,6 +3879,9 @@ msgstr "Position des Kommentarformulars"
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "Kommentare"
@@ -3315,6 +3893,9 @@ msgstr[1] "Commits"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "Commit-Nachricht"
@@ -3411,12 +3992,18 @@ msgstr "Ziel"
msgid "CompareBranches|There isn't anything to compare."
msgstr "Es gibt nichts zu vergleichen."
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "Vertraulich"
msgid "Confidentiality"
msgstr "Vertraulichkeit"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr "Zeitüberschreitung für Gitaly konfigurieren."
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr "Tracing konfigurieren"
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "Automatische \"Git-Checks\" und Bereinigung für Repositories konfigurieren."
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr "Einschränkungen für Web- und API-Anfragen konfigurieren."
@@ -3501,32 +4094,40 @@ msgstr "Container-Registry"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "Melde dich zunächst mit deinem GitLab-Benutzernamen und Passwort in GitLabs Container-Registry an. Wenn du %{link_2fa} hast, musst du ein %{link_token} verwenden:"
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab unterstützt bis zu 3 Ebenen von Image-Namen. Die folgenden Beispiel-Images gelten für dein Projekt:"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "Wie man die Container-Registry verwendet"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "Erfahre mehr über"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "Keine Tags in der Container-Registry für dieses Container-Image."
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "Sobald du dich eingeloggt hast, steht es dir frei, ein Container-Image mit den üblichen %{build}- und %{push}-Befehlen zu erstellen und hochzuladen"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "Repository entfernen"
-msgid "ContainerRegistry|Remove tag"
-msgstr "Tag entfernen"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "Größe"
@@ -3537,14 +4138,29 @@ msgstr "Tag"
msgid "ContainerRegistry|Tag ID"
msgstr "Tag-ID"
-msgid "ContainerRegistry|Use different image names"
-msgstr "Verwende einen anderen Image-Namen"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "Mit der in GitLab integrierten Docker-Container-Registry kann jedes Projekt seinen eigenen Speicherplatz haben um seine Docker-Images zu speichern."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "Du kannst auch %{deploy_token} für den schreibgeschützten Zugriff auf die Registry-Images verwenden."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
msgstr ""
@@ -3606,15 +4222,24 @@ msgstr "Steuere die maximale Parallelität des Repository-Backfills für diesen
msgid "ConvDev Index"
msgstr "ConvDev-Index"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr "Kopiere %{protocol} clone-URL"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr "ID in Zwischenablage kopieren"
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr "Link kopieren"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr "Referenz in Zwischenablage kopieren"
@@ -3666,6 +4294,12 @@ msgstr "In Zwischenablage kopieren"
msgid "Copy token to clipboard"
msgstr "Token in Zwischenablage kopieren"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,27 +4315,39 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr ""
+
msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
msgid "Could not remove the trigger."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "Der Status der Pipeline konnte nicht abgerufen werden. Zur Fehlerbehebung lies die %{linkStart}Dokumentation.%{linkEnd}"
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr "Erstellen"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "Erstelle neues Verzeichnis"
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr "Erstelle einen persönlichen Zugriffstoken in deinem Konto um mittels %{
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "Branch erstellen"
msgid "Create commit"
msgstr "Commit erstellen"
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "Erstelle Verzeichnis"
@@ -3771,6 +4429,9 @@ msgstr "Merge-Request und Branch erstellen"
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "Neuen Branch erstellen"
@@ -3789,6 +4450,9 @@ msgstr "Neues Label erstellen"
msgid "Create new..."
msgstr "Neu erstellen..."
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "Projektlabel erstellen"
@@ -3813,6 +4477,12 @@ msgstr "Erstellt"
msgid "Created At"
msgstr "Erstellt am"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "Von mir erstellt"
@@ -3834,18 +4504,30 @@ msgstr "Erstellt am"
msgid "Created on:"
msgstr "Erstellt am:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr "Epic wird angelegt"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Cron-Zeitzone"
msgid "Cron syntax"
msgstr "Cron-Syntax"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "Aktueller Branch"
@@ -3882,6 +4564,45 @@ msgstr "Benutzerspezifische Projektvorlage"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "Farben anpassen"
@@ -3891,18 +4612,51 @@ msgstr "Passe an, wie E-Mail-Adressen und Benutzernamen von FogBugz in GitLab im
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "Passe an, wie E-Mail-Adressen und Benutzernamen von Google Code in GitLab importiert werden. Im nächsten Schritt kannst du die Projekte auswählen, die du importieren möchtest."
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "Passe deine Pipeline-Konfiguration an und zeige deinen Pipeline-Status und den Abdeckungsbericht an."
msgid "Cycle Analytics"
msgstr "Zyklusanalysen"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "Zyklusanalysen liefern einen Überblick darüber, wie viel Zeit in deinem Projekt von einer Idee bis zur Bereitstellung vergeht."
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Code"
@@ -3924,6 +4678,31 @@ msgstr "Staging"
msgid "CycleAnalyticsStage|Test"
msgstr "Test"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr "Debug"
@@ -3990,12 +4772,21 @@ msgstr "Default-Branch"
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr "Standardklassifikationslabel"
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr "verzögert"
msgid "Delete"
msgstr "Löschen"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "Paket löschen"
msgid "Delete Snippet"
msgstr "Codeausschnitt löschen"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "Kommentar entfernen"
@@ -4080,6 +4880,9 @@ msgstr "Gelöscht"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr "Verweigern"
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "Bereitstellung"
@@ -4154,6 +4995,15 @@ msgstr "Bereitstellungsschlüssel"
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} andere"
@@ -4226,6 +5076,9 @@ msgstr "Bereitstellungstoken erstellen"
msgid "DeployTokens|Created"
msgstr "Erstellt"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "Bereitstellungstoken"
@@ -4277,6 +5130,9 @@ msgstr "Dein neuer Projektbereitstellungstoken wurde erstellt."
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr "Bereitgestellt für"
@@ -4301,9 +5157,30 @@ msgstr "Beschreibungsvorlagen ermöglichen dir, kontextspezifische Vorlagen für
msgid "Description:"
msgstr "Beschreibung:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr "Diff Inhaltsbeschränkungen"
msgid "Diff limits"
msgstr "Diff-Grenzen"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr "Kein Dateiname verfügbar"
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "Etwas ging schief, während die Diff-Zeilen abgerufen wurden."
@@ -4367,6 +5253,9 @@ msgstr "Verzeichnisname"
msgid "Disable"
msgstr "Deaktivieren"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "Für dieses Projekt deaktivieren"
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "Möchtest du festlegen, wie die E-Mail-Adressen und Nutzernamen von Google Code in GitLab importiert werden?"
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr "Dokumentation für gängige Identitätsanbieter"
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr "Domäne"
@@ -4484,9 +5385,15 @@ msgstr "Erledigt"
msgid "Download"
msgstr "Herunterladen"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr "Jeder Runner kann in einem der folgenden Zustände sein:"
msgid "Edit"
msgstr "Bearbeiten"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr "Codeausschnitt bearbeiten"
msgid "Edit application"
msgstr "Anwendung bearbeiten"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4604,6 +5541,9 @@ msgstr "E-Mail"
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "E-Mail-Patch"
@@ -4688,12 +5628,15 @@ msgstr "Aktiviere die Pseudonymizer-Datensammlung"
msgid "Enable SAML authentication for this group"
msgstr "SAML-Authentifizierung für diese Gruppe aktivieren"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "Aktiviere Sentry für die Fehlerberichterstattung und -protokollierung."
+msgid "Enable access to Grafana"
+msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr "Aktiviere und konfiguriere InfluxDB-Messwerte."
@@ -4706,6 +5649,9 @@ msgstr "Aktiviere die Klassifizierungskontrolle mithilfe eines externen Service"
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "Für dieses Projekt aktivieren"
@@ -4724,12 +5670,18 @@ msgstr "Aktiviere oder deaktiviere die Pseudonymizer-Datensammlung."
msgid "Enable or disable version check and usage ping."
msgstr "Aktiviere oder deaktiviere die Versionsprüfung und den Nutzungsbericht."
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "Aktiviere reCAPTCHA oder Akismet und lege die IP-Grenzwerte fest."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr "Endet am (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "Gib unten deine Bitbucket-Server-URL und deinen persönlichen Zugriffstoken ein"
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "Gib die Beschreibung des Tickets ein"
@@ -4787,9 +5757,18 @@ msgstr "Gib die Beschreibung des Merge-Requests ein"
msgid "Enter the merge request title"
msgstr "Gib den Titel des Merge-Requests ein"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr "Epic"
msgid "Epics"
msgstr "Epics"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr "Epics Roadmap"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Mit Epics kannst du deine Projekte effizienter und mit weniger Aufwand verwalten"
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "Diese Daten beeinflussen, wie deine Epics in der Roadmap erscheinen. Die Daten der Meilensteine ​​stammen aus den Meilensteinen, die den Tickets im Epic zugewiesen wurden. Du kannst auch feste Termine festlegen oder sie vollständig entfernen."
@@ -5021,9 +6021,6 @@ msgstr "starten"
msgid "Error"
msgstr "Fehler"
-msgid "Error Reporting and Logging"
-msgstr "Fehlerberichterstattung und Protokollierung"
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr "Fehler beim Abrufen der Daten der Mitwirkenden."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "Fehler beim Abrufen der Label."
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "Beim Umschalten des Benachrichtigungs-Abonnements trat ein Fehler auf"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,14 +6126,17 @@ msgstr ""
msgid "Error saving label update."
msgstr "Fehler beim Speichern der Label-Aktualisierung."
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "Fehler beim Aktualisieren des Status für alle To-dos."
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "Fehler beim Aktualisieren des To-do-Status."
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5216,9 +6228,15 @@ msgstr "Wöchentlich (Sonntags um 4:00 Uhr)"
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr "Jeder kann beitragen"
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr "Alle erweitern"
msgid "Expand approvers"
msgstr "Genehmigungsberechtigte anzeigen"
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "Menüleiste ausklappen"
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr "Ablaufdatum"
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr "Externe Autorisierung verbietet den Zugriff auf dieses Projekt"
msgid "External authorization request timeout"
msgstr "Zeitüberschreitung für externe Autorisierungsanfrage"
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "Klassifizierungslabel"
@@ -5357,6 +6399,15 @@ msgstr "Fehlgeschlagene Jobs"
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Wechsel des/der Besitzers/-in fehlgeschlagen"
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr "Bereitstellung fehlgeschlagen für"
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "Fehler beim Entfernen des Tickets vom Bord, bitte versuche es erneut."
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr "Signieren mit Smartcard-Authentifizierung fehlgeschlagen"
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr "Fehlschlag"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr "API-URL"
msgid "FeatureFlags|Active"
msgstr "Aktiv"
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr "Konfiguriere"
@@ -5519,6 +6603,9 @@ msgstr "Beschreibung"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "Feature-Flag bearbeiten"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr "Feature-Flag"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr "Instanz-ID"
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr "Neu"
msgid "FeatureFlags|New Feature Flag"
msgstr "Neues Feature-Flag"
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "Status"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "Feb"
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "Felder auf dieser Seite sind jetzt nicht mehr editierbar, du kannst nun konfigurieren"
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "Filter..."
@@ -5716,6 +6830,9 @@ msgstr "Fertiggestellt"
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr "Fester Termin"
@@ -5779,6 +6896,9 @@ msgstr "Bei privaten Projekten kann jedes Mitglied (Gast oder höher) Pipelines
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr "Bei öffentlichen Projekten, kann jeder sich die Pipelines ansehen und auf Job-Details (Ausgabeprotokolle und Artefakte) zugreifen"
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr "Fehler in deiner .gitlab-ci.yml gefunden:"
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "Kostenlose Testversion von GitLab.com Gold"
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr "Generiere einen Standardsatz von Labels"
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr "Geo-Knoten"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Mit Geo kannst du deine GitLab-Instanz an andere geografische Orte replizieren."
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "Knoten fällt aus oder ist kaputt."
@@ -5956,6 +7088,9 @@ msgstr "Lokale LFS Objekte"
msgid "GeoNodes|Local attachments"
msgstr "Lokale Anhänge"
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr "Lokale Job-Artefakte"
@@ -6064,33 +7199,42 @@ msgstr "Du hast Geo-Knoten mit einer unsicheren HTTP-Verbindung konfiguriert. Wi
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} ist für einen erzwungenen erneuten Download vorgemerkt"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} ist für eine erneute Prüfung vorgemerkt"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} ist für die erneute Synchronisierung vorgemerkt"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
msgid "Geo|All"
msgstr "Alle"
msgid "Geo|All projects"
msgstr "Alle Projekte"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "Alle Projekte sind für eine erneute Überprüfung eingeplant"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "Alle Projekte sind für eine erneute Synchronisierung eingeplant"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "Stapelverarbeitung"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr "Geo-Status"
msgid "Geo|Groups to synchronize"
msgstr "Gruppen für die Synchronisierung"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "Wird synchronisiert"
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr "Projekte in bestimmten Speicherfragmenten"
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr "Neuprüfung"
-
-msgid "Geo|Recheck all projects"
-msgstr "Alle Projekte überprüfen"
-
msgid "Geo|Redownload"
msgstr "Erneuter Download"
@@ -6193,6 +7334,12 @@ msgstr "Alle Projekte erneut synchronisieren"
msgid "Geo|Retry count"
msgstr "Wiederholversuch"
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr "Wähle zu replizierende Gruppen aus."
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr "Synchronisierung fehlgeschlagen - %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr "Erhalte eine kostenlose Instanzprüfung"
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr "GitLab-Nutzer(in)"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr "GitLab wird einen Hintergrundjob ausführen, der pseudonymisierte CSVs d
msgid "GitLab.com import"
msgstr "GitLab.com-Import"
-msgid "GitLab’s issue tracker"
-msgstr "GitLabs Ticketsystem"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6367,9 +7523,18 @@ msgstr "Gitea-Host-URL"
msgid "Gitea Import"
msgstr "Gitea-Import"
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr "Zurück"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr "Gehe zu"
msgid "Go to %{link_to_google_takeout}."
msgstr "Gehe zu %{link_to_google_takeout}."
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,8 +7664,8 @@ msgstr "Google Code-Import"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "Google-Authentifizierung ist nicht %{link_to_documentation}. Frage deinen GitLab Administrator, wenn du diesen Service nutzen möchtest."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr ""
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr "Verstanden!"
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr "Diagramm"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr "Gruppe: %{group_name}"
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "Vom %{dateWord}"
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr "Deine Gruppen-Badges anpassen."
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "Erfahre mehr über Badges."
@@ -6640,6 +7907,9 @@ msgstr "Diese Einstellung wird auf %{ancestor_group} angewendet. Du kannst die E
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "Diese Einstellung wird auf alle Untergruppen angewendet, es sei denn, sie wird von einem/einer Gruppenbesitzer(in) überschrieben. Gruppen, die bereits Zugriff auf das Projekt haben, behalten diesen, bis sie manuell entfernt werden."
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "wenn bei der übergeordneten Gruppe „Freigeben mit Gruppensperre“ aktiviert ist, kann nur der/die Eigentümer(in) der übergeordneten Gruppe dies deaktivieren"
@@ -6763,6 +8033,12 @@ msgstr "Hilfe-Seite"
msgid "Help page text and support page url."
msgstr "Text der Hilfeseite und die Supportseiten-URL."
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr "Nutzdaten ausblenden"
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Wert ausblenden"
@@ -6792,6 +8071,9 @@ msgstr[1] "Werte ausblenden"
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr "Bereinigung erfolgreich gestartet"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "Ich akzeptiere die %{terms_link}"
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "Ermöglicht Live-Vorschauen von JavaScript-Projekten in der Web-IDE mithilfe der clientseitigen CodeSandbox-Auswertung."
@@ -6879,6 +8176,9 @@ msgstr "Vorschau aktualisieren"
msgid "IDE|Review"
msgstr "Review"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "IP-Adresse"
@@ -6942,6 +8242,12 @@ msgstr "Onion-Skin"
msgid "ImageDiffViewer|Swipe"
msgstr "Wischen"
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr "Inkompatibles Projekt"
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr "Installiere einen Runner auf Kubernetes"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr "Instanzstatistiken"
msgid "Instance Statistics visibility"
msgstr "Sichtbarkeit der Instanzstatistiken"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "Instanz unterstützt nicht mehrere Kubernetes-Cluster"
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "Tickets"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "Tickets können Bugs, Tasks oder zu diskutierende Ideen sein. Tickets sind darüber hinaus auch durchsuchbar und filterbar."
@@ -7331,8 +8673,11 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
-msgstr "Erstellte Tickets"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
msgid "IssuesAnalytics|Issues created per month"
msgstr "Erstellte Tickets pro Monat"
@@ -7349,6 +8694,12 @@ msgstr "Es gibt keine Tickets für die Projekte in deiner Gruppe"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "Um deine Suche auszuweiten, ändere oder entferne Filter in der Filterleiste oben"
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7550,11 +8904,14 @@ msgstr "Kubernetes-Cluster wurde erfolgreich aktualisiert."
msgid "Kubernetes configured"
msgstr "Kubernetes konfiguriert"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "Die Kubernetes-Service-Integration wurde eingestellt. %{deprecated_message_content} deine Kubernetes-Cluster mit der neuen Seite <a href=\"%{url}\"/>Kubernetes-Cluster</a>"
+msgid "LDAP"
+msgstr ""
msgid "LDAP settings"
msgstr ""
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] "Letzten %d Tag"
msgstr[1] "Letzten %d Tage"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "Letzte Pipeline"
@@ -7660,15 +9020,24 @@ msgstr "Zuletzt bearbeitet %{date}"
msgid "Last edited by %{name}"
msgstr "Zuletzt bearbeitet von %{name}"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr "Letzte Antwort von"
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "Letzte Aktualisierung"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "Letzte Aktualisierung"
@@ -7687,7 +9056,7 @@ msgstr "am"
msgid "Latest changes"
msgstr "Letzte Änderungen"
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr "Mehr Informationen"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "Erfahre mehr über %{issue_boards_url}, um Tickets in mehreren Listen zu verfolgen, indem du Labels, Verantwortliche und Meilensteine verwendest. Falls du etwas im Ticketboard vermisst, erstelle bitte ein Ticket auf %{gitlab_issues_url}."
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "Erfahre mehr in den"
@@ -7765,77 +9137,99 @@ msgstr ""
msgid "License"
msgstr "Lizenz"
-msgid "LicenseManagement|Add a license"
-msgstr "Lizenz hinzufügen"
+msgid "License Compliance"
+msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "Füge eine Lizenz manuell hinzu um sie zu genehmigen oder zu sperren"
+msgid "LicenseCompliance|Add a license"
+msgstr ""
-msgid "LicenseManagement|Approve"
-msgstr "Genehmigen"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "Lizenz genehmigen"
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "Lizenz genehmigen?"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "Genehmigt"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
-msgstr "Sperren"
+msgid "LicenseCompliance|Approved"
+msgstr ""
-msgid "LicenseManagement|Blacklist license"
-msgstr "Lizenz sperren"
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
-msgid "LicenseManagement|Blacklist license?"
-msgstr "Lizenz sperren?"
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
-msgid "LicenseManagement|Blacklisted"
-msgstr "Gesperrt"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "Abbrechen"
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
-msgid "LicenseManagement|License"
-msgstr "Lizenz"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
-msgid "LicenseManagement|License Management"
-msgstr "Lizenz-Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
-msgid "LicenseManagement|License details"
-msgstr "Lizenzdetails"
+msgid "LicenseCompliance|License"
+msgstr ""
-msgid "LicenseManagement|License name"
-msgstr "Lizenzname"
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "Verwalte genehmigte und gesperrte Lizenzen für dieses Projekt."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
-msgid "LicenseManagement|Packages"
-msgstr "Pakete"
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
-msgid "LicenseManagement|Remove license"
-msgstr "Lizenz entfernen"
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
+
+msgid "LicenseCompliance|License details"
+msgstr ""
+
+msgid "LicenseCompliance|License name"
+msgstr ""
+
+msgid "LicenseCompliance|Packages"
+msgstr ""
-msgid "LicenseManagement|Remove license?"
-msgstr "Lizenz entfernen?"
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "Senden"
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "Derzeit gibt es in diesem Projekt keine genehmigten oder gesperrte Lizenzen."
+msgid "LicenseCompliance|Submit"
+msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "Diese Lizenz ist in diesem Projekt bereits vorhanden."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
-msgid "LicenseManagement|URL"
-msgstr "URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "Du bist im Begriff, die Lizenz %{name} aus diesem Projekt zu entfernen."
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
msgid "Licensed Features"
msgstr ""
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr "Lizenzen"
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] "Anzeige beschränkt auf maximal %d Ereignis"
msgstr[1] "Anzeige beschränkt auf maximal %d Ereignisse"
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "Liste"
@@ -7872,15 +9275,15 @@ msgstr "Verfügbare Repositories auflisten"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "Listenansicht"
msgid "List your Bitbucket Server repositories"
msgstr "Liste deine Bitbucket-Server-Repositorys auf"
-msgid "List your GitHub repositories"
-msgstr "Liste deine GitHub-Repositories auf"
-
msgid "Live preview"
msgstr "Live-Vorschau"
@@ -7890,6 +9293,9 @@ msgstr "Beitragsstatistiken für Gruppenmitglieder laden"
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr "Laden der GitLab IDE..."
@@ -7929,13 +9335,19 @@ msgstr "Gesperrt"
msgid "Locked Files"
msgstr "Gesperrte Dateien"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "Auf aktuelle Projekte beschränkt"
msgid "Locks give the ability to lock specific file or folder."
msgstr "Sperrungen bieten die Möglichkeit, bestimmte Dateien oder Ordner zu sperren."
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr "Protokolle"
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr "Genehmigt von"
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "Mache alle in deinem Team unabhängig von ihrem Standort produktiver. GitLab Geo erstellt schreibgeschützte Mirror deiner GitLab-Instanz, sodass du die Zeit zum Klonen und Abrufen großer Repos reduzieren kannst."
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "Stelle sicher, dass du mit dem Konto angemeldet bist, welches Besitzer der zu importierenden Projekte ist."
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr "Manifestdateiimport"
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "Ordne eine FogBugz-Konto-ID einem/einer GitLab-Benutzer(in) zu"
@@ -8037,6 +9461,12 @@ msgstr "März"
msgid "March"
msgstr "März"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,8 +9476,8 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
-msgstr "To-do als erledigt markieren"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr ""
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr "Markdown aktiviert"
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Maven-Metadaten"
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "Merge-Request"
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr "Merge-Request"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "Merge-Request-Genehmigungen"
@@ -8166,6 +9659,9 @@ msgstr "Merge-Requests"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "Merge-Requests dienen dazu, deine Änderungsvorschläge für ein Projekt einzureichen und sie mit anderen zu diskutieren"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "Beim Hinzufügen des Kommentarentwurfs ist ein Fehler aufgetreten."
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
-msgstr ""
+msgid "MergeRequests|Saving the comment failed"
+msgstr "Speichern des Kommentars fehlgeschlagen"
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "Löse diese Diskussion in einem neuen Ticket"
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
-msgid "MergeRequests|Saving the comment failed"
-msgstr "Speichern des Kommentars fehlgeschlagen"
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr "Ersetzte Datei anzeigen @ %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr "Merged"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "Nachrichten"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "Metriken"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "Metriken - Influx"
msgid "Metrics - Prometheus"
msgstr "Metriken - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr "Metriken und Profiling"
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr "Repository spiegeln"
-
msgid "Mirror direction"
msgstr "Richtung der Spiegelung"
@@ -8505,6 +10016,9 @@ msgstr "Abbrechen"
msgid "Modal|Close"
msgstr "Schließen"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr "Monate"
msgid "More"
msgstr "Mehr"
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr "Weitere Aktionen"
@@ -8559,6 +10079,12 @@ msgstr "Ticket verschieben"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "Neuer Pipeline Zeitplan"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "Neuer Codeausschnitt"
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr "Nein"
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "Es konnte keine Verbindung zu einem Gitaly-Server hergestellt werden. Bitte überprüfe deine Protokolle!"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr "Für dieses Projekt wurden keine Container-Images gespeichert. Füge eines hinzu, indem du den Anweisungen oben folgst."
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr "Keine Beiträge gefunden"
msgid "No credit card required."
msgstr "Keine Kreditkarte erforderlich."
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr "Keine Dateien gefunden."
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr "Keine Tickets für den ausgewählten Zeitraum."
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "Keine Tags mit einem solchen Namen oder einer solchen Beschreibung"
@@ -8885,9 +10450,15 @@ msgstr "Keine Runner gefunden"
msgid "No schedules"
msgstr "Keine Zeitpläne"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr "Nein, importiere die vorhandenen E-Mail-Adressen und Benutzernamen direk
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr "Knoten"
msgid "None"
msgstr "Keine"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "Nicht verfügbar"
@@ -8927,6 +10504,9 @@ msgstr "Nicht genügend Daten"
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr "Nicht jetzt"
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr "Hinweis: Ãœberlege dir, deine(n) GitLab-Administrator(in) zu bitten, ein
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "Hinweis: Überlege dir, deine(n) GitLab Administrator(in) zu bitten, einen %{github_integration_link} zu konfigurieren. Mit diesem kannst du dich über GitHub anmelden und Repositories importieren, ohne einen persönlichen Access-Token generieren zu müssen."
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr "Benachrichtigungen"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "Benachrichtigungen aus"
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "OK"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr "Filter"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr "Ein oder mehrere Ihrer Google Code-Projekte kann/können nicht direkt in
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr "Nur Administrator(inn)en"
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr "Ups, bist du sicher?"
@@ -9145,6 +10761,9 @@ msgstr "Offen"
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr "In Xcode öffnen"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr "Projekte öffnen"
@@ -9235,6 +10860,12 @@ msgstr "Andere Informationen"
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr "Ausgehende Anfragen"
@@ -9259,6 +10890,18 @@ msgstr "Paketinformationen"
msgid "Package was removed"
msgstr "Paket wurde entfernt"
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "Pakete"
@@ -9295,15 +10938,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr "Letzte »"
-msgid "Pagination|Next"
-msgstr "Nächste"
-
-msgid "Pagination|Prev"
-msgstr "Vorherige"
+msgid "Pagination|Next ›"
+msgstr ""
msgid "Pagination|« First"
msgstr "« Erste"
+msgid "Pagination|‹ Prev"
+msgstr ""
+
msgid "Parameter"
msgstr ""
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "Führe erweiterte Optionen aus, wie z. B. das Ändern des Pfades, Übertragen oder Entfernen einer Gruppe."
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr "Leistungsoptimierung"
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr "Zugriffsberechtigungen"
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "Zeitplan der Pipeline"
@@ -9475,7 +11145,7 @@ msgstr "Variablen"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Benutzerdefiniert"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr "Pipelines der letzten Woche"
msgid "Pipelines for last year"
msgstr "Pipelines des letzten Jahres"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr "Dieses Projekt ist derzeit nicht zum Ausführen von Pipelines eingericht
msgid "Pipeline|Commit"
msgstr "Commit"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr "Dauer"
msgid "Pipeline|Existing branch name or tag"
msgstr "Bestehender Branchname oder Tag"
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "Pipeline"
@@ -9592,6 +11286,9 @@ msgstr "Pipeline #%{pipelineId} stoppen?"
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr "Variabeln"
@@ -9604,18 +11301,12 @@ msgstr "Alle"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "Erfolg"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "mit Phase"
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "Bitte akzeptiere die Nutzungsbedingungen, um fortzufahren."
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr "Bitte wähle eine Gruppen-URL ohne Sonderzeichen."
@@ -9751,6 +11448,9 @@ msgstr "Bitte warte, während wir uns mit deinem Repository verbinden. Aktualisi
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "Warte bitte, während wir das Repository für dich importieren. Aktualisiere nach Belieben."
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "Einstellungen"
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr "Navigationsthema"
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr "Vorschau der Nutzdaten"
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "Primär"
@@ -9880,6 +11589,21 @@ msgstr "Private Projekte können in deinem persönlichen Namensraum erstellt wer
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "Profil"
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr "Pfad"
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr "Lege Position und Größe deines neuen Avatars fest"
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "Einige Optionen sind für LDAP-Accounts nicht verfügbar"
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr "Dein Status"
msgid "Profiles|e.g. My MacBook key"
msgstr "z. B. Mein MacBook-Schlüssel"
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr "Das Projekt '%{project_name}' wurde erfolgreich aktualisiert."
msgid "Project Badges"
msgstr "Projekt-Badges"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr "Projekt-URL"
msgid "Project access must be granted explicitly to each user."
msgstr "Jedem/Jeder Benutzer(in) muss explizit der Zugriff auf das Projekt gewährt werden."
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr "Gehe zu deinem Fork"
msgid "ProjectOverview|Star"
msgstr "Markieren"
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr "Markierung entfernen"
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr "Badges"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "Kontaktiere eine(n) Administrator(in), um diese Einstellung zu ändern."
@@ -10525,12 +12309,60 @@ msgstr "Entschuldigung, es wurden keine Projekte mit diesen Suchkriterien gefund
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Dieses Feature erfordert einen Browser, der LocalStorage unterstützt"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
msgid "PrometheusAlerts|Add alert"
msgstr "Alarm hinzufügen"
-msgid "PrometheusAlerts|Alert set"
-msgstr "Alarm eingerichtet"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "Alarm bearbeiten"
@@ -10546,9 +12378,6 @@ msgstr "Fehler beim Abrufen des Alarms"
msgid "PrometheusAlerts|Error saving alert"
msgstr "Fehler beim Speichern des Alarm"
-msgid "PrometheusAlerts|No alert set"
-msgstr "Kein Alarm eingerichtet"
-
msgid "PrometheusAlerts|Operator"
msgstr "Operator"
@@ -10582,6 +12411,9 @@ msgstr "Gemeinsame Metriken werden anhand einer Bibliothek von Metriken bekannte
msgid "PrometheusService|Custom metrics"
msgstr "Benutzerdefinierte Metriken"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr "Weitere Informationen"
msgid "PrometheusService|New metric"
msgstr "Neue Metrik"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Prometheus-API-Basis-URL, wie http://prometheus.example.com/"
@@ -10636,6 +12471,12 @@ msgstr "Warte auf deine erste Bereitstellung in eine Umgebung, um allgemeine Met
msgid "Promote"
msgstr "Hochstufen"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "Stufe diese Projektmeilensteine zu einem Gruppenmeilenstein hoch."
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr "Nicht wieder anzeigen"
@@ -10684,6 +12528,9 @@ msgstr "Geschützte Umgebungen"
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} wird für Entwickler änderbar sein. Bist du sicher?"
@@ -10759,6 +12606,9 @@ msgstr "Öffentliche Pipelines"
msgid "Pull"
msgstr "Pull"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "Push"
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Mehr lesen"
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "Lies mehr über Projektberechtigungen <strong>%{link_to_help}</strong>"
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "Echtzeit-Features"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "Registry"
-
msgid "Related Deployed Jobs"
msgstr "Zugehörige Bereitstellungsjobs"
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "Später erinnern"
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr "Entfernen"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr "Runner entfernen"
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr "Avatar entfernen"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr "Gruppe entfernen"
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "Priorität entfernen"
@@ -11028,30 +12911,75 @@ msgstr "Projekt entfernen"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr "Entfernte Gruppe kann nicht wiederhergestellt werden!"
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr "Epic erneut öffnen"
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr "Authentifizierung reparieren"
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr "Antworte direkt auf diese E-Mail oder %{view_it_on_gitlab}."
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr "Repo via URL"
@@ -11166,6 +13112,9 @@ msgstr "Keine geänderten Testergebnisse"
msgid "Repository"
msgstr "Repository"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "Repository-Einstellungen"
@@ -11190,9 +13139,15 @@ msgstr "Repository-Wartung"
msgid "Repository mirror"
msgstr "Repository-Mirror"
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr "Repository-Speicher"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "Auswählen"
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr "Fordert Profile an"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "Alle Benutzer(innen) dieser Gruppe müssen die Zwei-Faktor-Authentifizierung einrichten"
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] "Benötigt die Zustimmung von %{names}."
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,11 +13215,17 @@ msgstr ""
msgid "Reset runners registration token"
msgstr "Registrierungstoken für Runner zurücksetzen"
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
-msgstr "Löse alle Diskussionen in einem neuen Ticket"
+msgid "Resolve all threads in new issue"
+msgstr ""
msgid "Resolve conflicts on source branch"
msgstr "Konflikte im Quell-Branch lösen"
@@ -11263,6 +13233,9 @@ msgstr "Konflikte im Quell-Branch lösen"
msgid "Resolve discussion"
msgstr "Diskussion beenden"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr "Fortsetzen"
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr "Roadmap"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "Führe CI/CD-Pipelines für externe Repositories aus"
@@ -11436,8 +13415,8 @@ msgstr "Runners-Seite"
msgid "Runners page."
msgstr "Runners-Seite."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "Du hast alle deine Pipeline-Minuten für geteilte Runner verbraucht."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "Wird ausgeführt"
@@ -11511,6 +13490,9 @@ msgstr "Zeitplan der Pipeline speichern"
msgid "Save variables"
msgstr "Variablen speichern"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr "Plane eine neue Pipeline"
msgid "Scheduled"
msgstr "Geplant"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "Zeitpläne"
@@ -11541,15 +13526,30 @@ msgstr "Ticketboards mit festgelegtem Umfang"
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr "Scrolle nach unten zu <strong>Google Code Project Hosting</strong> und aktiviere den Schalter auf der rechten Seite."
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr "Zum Seitenende scrollen"
msgid "Scroll to top"
msgstr "Nach oben scrollen"
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "Suche"
@@ -11637,9 +13637,76 @@ msgstr "in dieser Gruppe"
msgid "SearchAutocomplete|in this project"
msgstr "in diesem Projekt"
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr "Secret"
msgid "Security"
msgstr "Sicherheit"
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr "Sicherheits-Dashboard"
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr "Ticket erstellt"
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr "Ticket erstellen"
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr "Mehr Informationen"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr "Das Sicherheits-Dashboard zeigt den neuesten Sicherheitsbericht an. Verw
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr "Überwache Sicherheitslücken in deinem Code"
@@ -11739,6 +13836,9 @@ msgstr "Auswählen"
msgid "Select Archive Format"
msgstr "Archivierungsformat auswählen"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr "Wähle eine Gruppe aus, die du einladen möchtest"
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr "Wähle einen Namensraum aus, um einen Fork des Projekts zu erstellen"
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr "Wähle ein Vorlagen-Repository aus"
msgid "Select a timezone"
msgstr "Zeitzone auswählen"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "Wähle eine existierendes Kubernetes-Cluster aus oder erstelle ein neues"
@@ -11775,7 +13884,16 @@ msgstr "Branch/Tag auswählen"
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr "Wähle ein Projekt und eine Zone, um den Maschinentyp auszuwählen"
msgid "Select project to choose zone"
msgstr "Wähle ein Projekt aus, um die Zone auszuwählen"
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr "Wähle die Projekte aus, die du importieren möchtest."
@@ -11802,13 +13923,19 @@ msgstr "Wähle den Branch aus, den du als Standard für dieses Projekt festlegen
msgid "Select the custom project template source group."
msgstr "Wähle die Quellgruppe der benutzerdefinierten Projektvorlage aus."
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "Wenn du eine(n) GitLab-Benutzer(in) azswählst, wird in der Beschreibung des Tickets und den Kommentaren ein Link zum/zur Benutzer(in) hinzugefügt (z. B. \"Von <a href=\"#\">@johnsmith</a>\"). Außerdem wird der/die ausgewählte Benutzer(in) dem Ticket oder Kommentar zugeordnet und/oder es ihm/ihr zugewiesen."
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr "September"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr "Sitzungsablauf, Projektlimit und Anhangsgröße."
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr "Benachrichtigungs-E-Mail für Missbrauchsberichte festlegen."
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "Lege Anforderungen für eine(n) Benutzer(in) fest, um sich anzumelden. Aktiviere die erforderliche Zwei-Faktor-Authentifizierung."
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,18 +14124,24 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "CI/CD einrichten"
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
msgid "Set up a %{type} Runner manually"
msgstr "Einen %{type} Runner manuell erstellen"
-msgid "Set up a specific Runner automatically"
-msgstr "Richte einen bestimmten Runner automatisch ein"
-
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr "Richte notwendige Angaben (E-Mail, Vorname, Nachname) und NameID gemäß %{docsLinkStart}der Dokumentation %{icon}%{docsLinkEnd} ein"
@@ -11988,6 +14157,9 @@ msgstr "Richte dein Projekt so ein, dass Änderungen automatisch an ein anderes
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "ein Passwort festlegst"
@@ -12015,6 +14187,12 @@ msgstr "Leider konnten wir deinen Status nicht festlegen. Bitte versuche es spä
msgid "SetStatusModal|What's your status?"
msgstr "Wie ist dein Status?"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr "Befehl anzeigen"
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr "Zeige komplettes Rohprotokoll"
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "Zeige %d Ereignis"
msgstr[1] "Zeige %d Ereignisse"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr "Nebeneinander"
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr "Melde dich mit Single Sign-On an"
@@ -12140,6 +14339,9 @@ msgstr "Abmelden"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr "Anmeldebeschränkungen"
msgid "Sign-up restrictions"
msgstr "Registrierungsbeschränkungen"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr "Größe"
@@ -12191,6 +14402,21 @@ msgstr "Slack-Anwendung"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr "Die Slack-Integration ermöglicht es dir, mit GitLab über Slash-Befehle im Chat-Fenster zu interagieren."
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "Langsamer, aber stellt sicher, dass der Projektarbeitsbereich unberührt ist, da das Repository für jeden Job neu geklont wird"
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr "Beim Umschalten des Buttons ist etwas schief gelaufen"
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr "Beim Schließen des %{issuable} ist etwas schief gelaufen. Bitte versuch
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "Etwas ist beim Laden der Liste %{listType} fehlgeschlagen"
@@ -12299,6 +14540,9 @@ msgstr "Etwas ist beim Wiedereröffnen von %{issuable} fehlgeschlagen. Versuche
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "Etwas ist beim Auflösen der Diskussion fehlgeschlagen. Versuche es später nochmal."
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "Etwas lief schief, %{project} konnte nicht zum Dashboard hinzugefügt werden"
@@ -12350,6 +14594,9 @@ msgstr "Spätere Fälligkeit"
msgid "SortOptions|Due soon"
msgstr "Bald fällig"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "Label-Priorität"
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr "Älteste Anmeldung"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "Älteste Aktualisierung"
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr "Zuletzt angemeldet"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr "Vorgemerkt %{type}"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "Markiere ein Label, um es zu einem priorisierten Label zu machen. Ordne die priorisierten Labels durch Ziehen an, um ihre relative Priorität zu ändern."
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "Beginne einen %{new_merge_request} mit diesen Änderungen"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,29 +14822,38 @@ msgstr "Einen Review starten"
msgid "Start and due date"
msgstr "Start- und Fälligkeitsdatum"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr "Startdatum"
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
+msgstr "Starte den Runner!"
+
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
-msgstr "Starte den Runner!"
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
msgid "Start your trial"
msgstr "Testzeitraum beginnen"
@@ -12605,12 +14879,18 @@ msgstr "Beginnt am (UTC)"
msgid "State your message to activate"
msgstr "Gib deine Nachricht an, um sie zu aktivieren"
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "Status"
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr "Speicher:"
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "Untergruppen"
@@ -12656,6 +14948,9 @@ msgstr "Als Spam einreichen"
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr "Review senden"
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr "Abonniert"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Tags"
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "Die „Erweiterte Globale Suche“ in GitLab ist ein leistungsfähiger Suchdienst, der dir Zeit spart. Anstatt doppelten Code zu erstellen und Zeit zu verschwenden, kannst du nun bei anderen Teams nach Code suchen, der für dein eigenes Projekt hilfreich sein kann."
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "Das Character-Highlighter hilft dir, die Betreffzeile auf %{titleLength} Zeichen zu beschränken und den Textkörper auf %{bodyLength} zu kürzen, damit sie in Git lesbar sind."
@@ -13126,6 +15442,12 @@ msgstr "Die Bereitstellung dieses Jobs auf %{environmentLink} war nicht erfolgre
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "Der Import wird nach %{timeout} beendet. Verwende eine Clone/Push-Kombination für Repositorys, die länger brauchen."
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,8 +15598,8 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "Das Repository muss über <code>http://</code>, <code>https://</code> oder <code>git://</code> erreichbar sein."
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "Das Repository muss über <code>http://</code>, <code>https://</code>, <code>ssh://</code> oder <code>git://</code> erreichbar sein."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "Die Review-Phase stellt die Zeit vom Anlegen eines Merge-Requests bis zu dessen Merge dar. Sobald du deinen ersten Merge-Request abschließt, werden diese Daten hier automatisch angezeigt."
@@ -13306,8 +15625,8 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "Die Staging-Phase stellt die Zeit zwischen dem Mergen des Merge-Requests und der Bereitstellung des Codes zur Produktivumgebung dar. Sobald du das erste Mal zur Produktivumgebung ausgeliefert hast, werden deren Daten hier automatisch angezeigt."
-msgid "The tabs below will be removed in a future version"
-msgstr "Die folgenden Tabs werden in einer zukünftigen Version entfernt werden"
+msgid "The target element is missing."
+msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "Die Testphase stellt die Zeit dar, die GitLab CI benötigt um die Pipelines von zugehörigen Merge-Requests abzuarbeiten. Sobald die erste Pipeline abgeschlossen ist, werden deren Daten hier automatisch angezeigt."
@@ -13315,7 +15634,7 @@ msgstr "Die Testphase stellt die Zeit dar, die GitLab CI benötigt um die Pipeli
msgid "The time taken by each data entry gathered by that stage."
msgstr "Die Zeit, die jede Dateneingabe in dieser Phase benötigt."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr "Die Benutzerzuordnung ist ein JSON-Dokument das festlegt, wie die E-Mail
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "Die Benutzerzuordnung legt fest, wie die E-Mail-Adressen und Benutzernamen der FogBuz-Benutzer(innen), die an deinem Projekt teilnehmen, in GitLab importiert werden. Du kannst dies ändern, indem du die Tabelle unten ausfüllst."
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "Es gibt keine Tickets die angezeigt werden können"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr "Es gibt noch keine Labels"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr "Es gibt keine nicht vorgemerkten Änderungen"
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
-msgstr "Beim Hinzufügen eines To-dos ist ein Fehler aufgetreten."
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
-msgstr "Beim Löschen des To-dos ist ein Fehler aufgetreten."
+msgid "There was an error deleting the To Do."
+msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr "Beim Speichern deiner Benachrichtigungseinstellungen ist ein Fehler aufg
msgid "There was an error subscribing to this label."
msgstr "Beim Abonnieren dieses Labels ist ein Fehler aufgetreten."
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr "Beim Zurücksetzen des E-Mail-Tokens ist ein Fehler aufgetreten."
@@ -13501,10 +15835,10 @@ msgstr "Der Umfang dieses Boards ist reduziert"
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "Dieser Branch wurde verändert, seit du begonnen hast ihn zu bearbeiten. Möchtest du einen neuen Branch anlegen?"
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr "Diese Gruppe"
msgid "This group does not provide any group Runners yet."
msgstr "Diese Gruppe stellt noch keine Gruppenrunner zur Verfügung."
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "Dies ist ein vertrauliches Ticket."
@@ -13588,15 +15931,15 @@ msgstr ""
msgid "This is your current session"
msgstr ""
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "Dieses Ticket ist vertraulich"
msgid "This issue is locked."
msgstr "Dieses Ticket ist gesperrt."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "Dieser Job ist davon abhängig, dass ein(e) Benutzer(in) den Prozess auslöst. Sie werden oft zum Bereitstellen von Code in Produktionsumgebungen verwendet"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "Dieser Job hängt von Upstream-Jobs ab, die erfolgreich ausgeführt werden müssen, damit dieser Job getriggert wird"
@@ -13651,9 +15994,15 @@ msgstr "Dieser Job ist die neueste Bereitstellung für %{link}."
msgid "This job requires a manual action"
msgstr "Dieser Job erfordert eine manuelle Aktion"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Dies bedeutet, dass du keinen Code pushen kannst, bevor du kein leeres Repository erstellt oder ein existierendes importiert hast."
@@ -13672,9 +16021,6 @@ msgstr "Diese Seite ist nicht verfügbar, da du nicht Informationen über mehrer
msgid "This page will be removed in a future release."
msgstr "Diese Seite wird in einer zukünftigen Version entfernt."
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr "Dieser Runner wird nur Pipelines von geschützen Branches ausführen"
msgid "This setting can be overridden in each project."
msgstr "Diese Einstellung kann in jedem Projekt überschrieben werden."
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr "Diese Einstellung aktualisiert den Hostnamen der für die Generierung von privaten Commit-E-Mails verwendet wird. %{learn_more}"
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr "Diese(r) Benutzer(in) hat keine Identitäten"
@@ -13735,6 +16087,9 @@ msgstr "Diese E-Mails werden automatisch zu hier gelisteten Tickets (wobei die K
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr "Zeit zwischen Anlegen und Mergen/Schließen eines Merge-Requests"
msgid "Time estimate"
msgstr "Geschätzte Zeit"
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "Zeit in Sekunden die GitLab auf die Antwort des externen Dienstes warten wird. Wenn der Dienst nicht rechtzeitig antwortet, wird der Zugriff verweigert."
@@ -13762,6 +16126,9 @@ msgstr "Verbleibende Zeit"
msgid "Time spent"
msgstr "Benötigte Zeit"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "Zeiterfassung"
@@ -13771,12 +16138,21 @@ msgstr "Zeit bis zum ersten Merge-Request"
msgid "TimeTrackingEstimated|Est"
msgstr "Geschätzt"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "Geschätzt:"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "Verbracht"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "vor %s Tagen"
@@ -13900,6 +16276,9 @@ msgstr "vor kurzem"
msgid "Timeago|right now"
msgstr "gerade jetzt"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "Zeitüberschreitung"
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr "Zu GitLab"
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "Um GitHub-Repositories zu verbinden kannst du einen %{personal_access_token_link} verwenden. Wenn du deinen persönlichen Access-Token erzeugst, musst du den Gültigkeitsbereich <code>repo</code> auswählen, damit wir eine Liste deiner öffentlichen und privaten Repositories anzeigen können, die für die Verbindung verfügbar sind."
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "Um GitHub-Repositories zu verbinden, musst du GitLab zunächst erlauben, auf die Liste deiner GitHub-Repositories zuzugreifen:"
@@ -13973,12 +16358,6 @@ msgstr "Zur Verbesserung von GitLab und seiner Benutzererfahrung sammelt GitLab
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "Zur Verbesserung von GitLab würden wir gerne regelmäßig Nutzungsinformationen sammeln. Dies kann jederzeit in den %{settings_link_start}Einstellungen%{link_end} geändert werden. %{info_link_start}Weitere Informationen%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Um GitHub-Repositories zu importieren kannst du einen %{personal_access_token_link} verwenden. Wenn du deinen persönlichen Access-Token erzeugst, musst du den Gültigkeitsbereich <code>repo</code> auswählen, damit wir eine Liste deiner öffentlichen und privaten Repositories anzeigen können, die für den Import verfügbar sind."
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "Um GitHub-Repositories zu importieren, musst du GitLab zunächst erlauben, auf die Liste deiner GitHub-Repositories zuzugreifen:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "Um ein SVN-Repository zu importieren, schaue dir %{svn_link} an."
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "So richtest du die SAML-Authentifizierung für deine Gruppe über einen Identitätsanbieter wie Azure, Okta, Onelogin, Ping Identity oder deinen benutzerdefinierten SAML 2.0-Anbieter ein:"
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,24 +16430,27 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr "Um deine Suche zu erweitern, verändere oder entferne Filter."
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
msgid "Today"
msgstr "Heute"
-msgid "Todo"
-msgstr "To-do"
-
-msgid "Todo was successfully marked as done."
+msgid "Toggle Markdown preview"
msgstr ""
-msgid "Todos"
-msgstr "To-dos"
-
msgid "Toggle Sidebar"
msgstr "Seitenleiste ein-/ausblenden"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr "Beschreibung des Commits ein-/ausklappen"
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr "Diskussion ein-/ausblenden"
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,17 +16472,26 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "Seitenleiste ein-/ausblenden"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "Toggle Status: OFF"
msgid "ToggleButton|Toggle Status: ON"
msgstr "Toggle Status: ON"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
-msgstr "Token"
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
msgid "Tomorrow"
msgstr "Morgen"
@@ -14105,6 +16511,9 @@ msgstr "Gesamte Beiträge"
msgid "Total Time"
msgstr "Gesamtzeit"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "Gesamte Testzeit für alle Commits/Merges"
@@ -14123,6 +16532,12 @@ msgstr "Verfolge Gruppen von Tickets, die ein Thema teilen, über Projekte und M
msgid "Track time with quick actions"
msgstr "Verfolge die Zeit mit Kurzbefehlen"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr "Baumstrukturansicht"
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr "Teste für 30 Tage alles was GitLab zu bieten hat."
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "Aktiviere den Service-Desk"
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr "Der Diff konnten nicht geladen werden. %{button_try_again}"
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr "Rückgängig machen"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "Unbekannt"
@@ -14324,12 +16763,24 @@ msgstr "Dieses %{issuableDisplayName} entsperren? <strong>Jeder</strong> wird in
msgid "Unlocked"
msgstr "Entsperrt"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "Diskussion wieder starten"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr "Abmeldung auf Projektebene"
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "Nicht bestätigt"
@@ -14375,15 +16835,27 @@ msgstr "Aktuell"
msgid "Upcoming"
msgstr "Demnächst"
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "Aktualisieren"
-msgid "Update approvers"
-msgstr "Genehmigungsberechtigte aktualisieren"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
+msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr "Jetzt updaten"
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "Aktualisiere"
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "Aktualisiere deinen Tarif, um die erweiterte globale Suche zu aktivieren."
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "Aktualisiere deinen Tarif, um Beitragsanalysen zu aktivieren."
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr "Der Nutzungsbericht ist nicht aktiviert"
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "Nutzungsstatistiken"
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr "Codeausschnitte"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr "Abonnieren"
@@ -14822,6 +17315,9 @@ msgstr "Diese(r) Benutzer(in) hat ein privates Profil"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "Alles anzeigen"
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "Benutzer(innen)"
@@ -14927,6 +17426,9 @@ msgstr "Bestätigt"
msgid "Version"
msgstr "Version"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr "App anzeigen"
@@ -15005,6 +17507,9 @@ msgstr "Sichtbarkeitsstufe"
msgid "Visibility level:"
msgstr "Sichtbarkeitsstufe:"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr "Unbekannt"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr "Schweregrad"
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "Du möchtest die Daten sehen? Bitte frage eine(n) Administrator(in) nach dem Zugang."
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Wenn ein Runner gesperrt ist, kann er keinem anderen Projekt zugewiesen werden"
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "Wer kann diese Gruppe sehen?"
@@ -15196,6 +17725,9 @@ msgstr "Wer wird in der Lage sein diese Gruppe zu sehen?"
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr "Dokumentation"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "Um zu einer (neuen) Seite zu verknüpfen, gib einfach %{link_example} ein"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "Anleitung zum Einrichten"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "Hinweis: Du kannst den vollständigen Pfad für die neue Datei angeben. Fehlende Verzeichnisse werden automatisch erstellt."
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "Neue Wiki-Seite"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "Bist du sicher, dass du diese Seite löschen möchtest?"
@@ -15292,20 +17818,17 @@ msgstr "Jemand hat die Seite zur selben Zeit wie du bearbeitet. Bitte überprüf
msgid "WikiPageConflictMessage|the page"
msgstr "die Seite"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "%{page_title} erstellen"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "%{page_title} aktualisieren"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
-msgstr "Seiten-Slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr "Schreibe deinen Inhalt oder ziehe hier Dateien hinein…"
-msgid "Wiki|Create Page"
-msgstr "Seite erstellen"
+msgid "Wiki|Create New Page"
+msgstr ""
msgid "Wiki|Create page"
msgstr "Seite erstellen"
@@ -15325,6 +17848,9 @@ msgstr "Neue Seite"
msgid "Wiki|Page history"
msgstr "Seitenverlauf"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "Seitenversion"
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr "Du kannst einfach dazu beitragen, indem du um Aufnahme in diesen Gruppen
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Du kannst ganz einfach einen Runner auf einem Kubernetes-Cluster installieren. %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr "Du kannst Dateien nur hinzufügen, wenn du dich auf einem Branch befinde
msgid "You can only edit files when you are on a branch"
msgstr "Du kannst Dateien nur bearbeiten, wenn du dich auf einem Branch befindest"
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "Du kannst deine .gitlab-ci.yml mit %{linkStart}CI Lint%{linkEnd} testen."
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr "Du kannst nicht auf dieser schreibgeschützte GitLab-Instanz schreiben."
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr "Du hast noch keine Abonnements"
@@ -15541,6 +18079,18 @@ msgstr "Du hast keine autorisierten Anwendungen"
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr "Du hast keine Genehmigungsberechtigten hinzugefügt. Beginne, indem du B
msgid "You have reached your project limit"
msgstr "Du hast die Projektbegrenzung erreicht"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Du musst unterschiedliche Branchnamen verwenden, um einen gültigen Vergleich zu erhalten."
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr "Deine Gruppen"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,8 +18271,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "Deine To-dos"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr "Deine Projekte"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "ein(e) gelöschte(r) Benutzer(in)"
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "vor"
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr "unter anderem"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}Lerne mehr über Containerüberprüfung%{linkEndTag}"
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr "Klasse"
@@ -15964,10 +18553,10 @@ msgstr "Container-Scan"
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "Containerüberprüfung entdeckt bekannte Sicherheitslücken in deinen Docker-Images."
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr "Abhängigkeitsüberprüfung"
msgid "ciReport|Description"
msgstr "Beschreibung"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,33 +18598,14 @@ msgstr "Bezeichner"
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr "Instanzen"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "Lerne mehr über die Interaktion mit Sicherheitsberichten (Alpha)."
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "Lizenzmanagement hat nur %d Lizenz für den Quellbranch gefunden"
-msgstr[1] "Lizenzmanagement hat nur %d Lizenzen für den Quellbranch gefunden"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "Lizenzmanagement hat %d neue Lizenz entdeckt"
-msgstr[1] "Lizenzmanagement hat %d neue Lizenzen entdeckt"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "Lizenzmanagement hat nur keine Lizenzen für den Quellbranch gefunden"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "Lizenzmanagement hat keine neuen Lizenzen entdeckt"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr ""
msgid "ciReport|Links"
msgstr "Links"
@@ -16061,6 +18631,9 @@ msgstr "Keine Änderungen an den Leistungsmetriken"
msgid "ciReport|Performance metrics"
msgstr "Leistungsmetriken"
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16120,6 +18693,9 @@ msgstr[1] "Verwendet von %{packagesString} und %{lastPackage}"
msgid "ciReport|View full report"
msgstr "Gesamten Bericht anzeigen"
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr "Verbinde"
msgid "could not read private key, is the passphrase correct?"
msgstr "konnte den privaten Schlüssel nicht lesen, ist die Passphrase korrekt?"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr "anpassen"
@@ -16176,8 +18755,11 @@ msgstr[1] "Tage"
msgid "deleted"
msgstr ""
-msgid "deploy token"
-msgstr "Bereitstellungstoken"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
msgid "detached"
msgstr ""
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr "dektiviert"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr "erledigt"
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] "Entwurf"
msgstr[1] "Entwürfe"
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "aktiviert"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "hier"
@@ -16296,21 +18888,21 @@ msgstr "ist ungültig, weil es eine Downstream-Sperre gibt"
msgid "is invalid because there is upstream lock"
msgstr "ist aufgrund einer Upstream-Sperre ungültig"
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "ist kein gültiges X509-Zertifikat."
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr "Ticketboards"
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr "Neuste Version"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
-msgstr "Lizenzverwaltung"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "gesperrt durch %{path_lock_user_name} %{created_at}"
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "Merge-Request"
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "Bitte stelle es wieder her, oder verwende einen anderen Branch %{missingBranchName}"
@@ -16487,6 +19097,9 @@ msgstr "Merge-Request genehmigt."
msgid "mrWidget|Merged by"
msgstr "Merged von"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "Anfrage zum Mergen"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "Konflikte auflösen"
@@ -16571,8 +19187,8 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr "Es gibt Merge-Konflikte"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "Es gibt ungelöste Diskussionen. Bitte löse diese Diskussionen"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr ""
@@ -16583,9 +19199,21 @@ msgstr "Dieser Merge-Request konnte nicht automatisch gemerged werden"
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "Dieser Merge-Reqeust wird gerade gemerged"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Dieses Projekt wurde archiviert, der Schreibzugriff wurde deaktiviert"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "Du darfst dieses Projekt nicht direkt bearbeiten. Bitte erstelle einen Fork, um Änderungen vorzunehmen."
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "Du kannst diesen Merge-Request manuell mergen mit der"
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "Branch existiert nicht."
@@ -16628,9 +19259,15 @@ msgstr "Neuer Merge-Request"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "Benachrichtungs-E-mails"
@@ -16643,8 +19280,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "oder"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16659,8 +19296,11 @@ msgstr[1] "Ãœbergeordnete"
msgid "password"
msgstr "Passwort"
-msgid "personal access token"
-msgstr "Persönlicher Zugangs-Token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] "Projekt"
msgstr[1] "Projekte"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "verbleibend"
@@ -16699,6 +19345,9 @@ msgstr "Fälligkeitsdatum entfernen"
msgid "remove weight"
msgstr "Gewichtung entfernen"
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr "dieses Dokument"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "um deinen Mitwirkenden zu helfen möglichst effizient zu kommunizieren!"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "Benutzername"
@@ -16803,6 +19475,9 @@ msgstr "verwendet Kubernetes-Cluster, um deinen Code bereitzustellen!"
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/el_GR/gitlab.po b/locale/el_GR/gitlab.po
index 5ca04aeb14f..b1af45f753a 100644
--- a/locale/el_GR/gitlab.po
+++ b/locale/el_GR/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: el\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:44\n"
+"PO-Revision-Date: 2019-09-24 10:26\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/eo/gitlab.po b/locale/eo/gitlab.po
index a596c854125..76d9514c20c 100644
--- a/locale/eo/gitlab.po
+++ b/locale/eo/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: eo\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:45\n"
+"PO-Revision-Date: 2019-09-24 10:23\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] "%s enmetadoj estis transsaltitaj, por ne troÅarÄi la sistemon."
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr "Aktiva"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr "Aktiveco"
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr "Aldoni novan dosierujon"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr "Foliumi dosieron"
msgid "Browse Files"
msgstr "Foliumi dosierojn"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Elekti dosierojn"
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Nuligi"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr "Malfari"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr "Diagramoj"
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "nuligita"
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] "Enmetadoj"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "Krei novan dosierujon"
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr "Kreu propran atingoĵetonon en via konto por ebligi al vi eltiri kaj alp
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "Krei dosierujon"
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr "Krei novan…"
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Horzono por Cron"
msgid "Cron syntax"
msgstr "La sintakso de Cron"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr "Cikla analizo"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Programado"
@@ -3924,6 +4678,31 @@ msgstr "Preparo por eldono"
msgid "CycleAnalyticsStage|Test"
msgstr "Testado"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr "Forigi"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "Disponigado"
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr "Nomo de dosierujo"
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr "ElÅuti"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr "Redakti"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr "Ĉiusemajne (en dimanĉo, je 4:00)"
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Ne eblas ÅanÄi la posedanton"
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr "La refreÅigo komenciÄis sukcese"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] "La lasta %d tago"
msgstr[1] "La lastaj %d tagoj"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "Lasta ĉenstablo"
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "Lernu pli en la"
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "Nova ĉenstabla plano"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr "Ne estas planoj"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "Ne disponebla"
@@ -8927,6 +10504,9 @@ msgstr "Ne estas sufiĉe da datenoj"
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr "Filtrilo"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "Ĉenstablo"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "Ĉenstabla plano"
@@ -9475,7 +11145,7 @@ msgstr "Variabloj"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Propra"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr "ĉiuj"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "sukcesaj"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "kun etapo"
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr "La projekto „%{project_name}“ estis sukcese Äisdatigita."
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr "Ĉiu uzanto devas akiri propran atingon al la projekto."
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Legu pli"
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr "Rilataj disponigitaj taskoj"
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "Rememorigu denove"
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr "Forigi la projekton"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr "Konservi ĉenstablan planon"
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr "Plani novan ĉenstablon"
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr "Elektu formaton de arkivo"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr "Elektu horzonon"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "kreos pasvorton"
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "Estas montrata %d evento"
msgstr[1] "Estas montrataj %d eventoj"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "Kreu %{new_merge_request} kun ĉi tiuj ÅanÄoj"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Etikedoj"
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "La etapo de preparo por eldono montras la tempon inter la aplikado de la peto pri kunfando kaj la disponigado de la kodo en la publika versio. La datenoj aldoniÄos aÅ­tomate post kiam vi faros la unuan disponigadon en la publika versio."
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr "La etapo de testado montras kiom da tempo necesas al „GitLab CI“ por
msgid "The time taken by each data entry gathered by that stage."
msgstr "La tempo, kiu estas necesa por ĉiu dateno kolektita de la etapo."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Ĉi tiu signifas, ke vi ne povos alpuÅi kodon, antaÅ­ ol vi kreos malplenan deponejon aÅ­ enportos jam ekzistantan."
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr "Tempo inter la kreado de poeto pri kunfando kaj Äia aplikado/fermado"
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr "Tempo Äis la unua peto pri kunfando"
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "antaÅ­ %s tagoj"
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr "Totala tempo"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "Totala tempo por la testado de ĉiuj enmetadoj/kunfandoj"
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr "Nekonata"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "Ĉu vi volas vidi la datenojn? Bonvolu peti atingeblon de administranto."
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr "Oni povas aldoni dosierojn nur kiam oni estas en branĉo"
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "Vi ne povas krei pliajn projektojn"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] "tagoj"
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr "novan peton pri kunfando"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "sciigoj per retpoÅto"
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] "patroj"
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/es/gitlab.po b/locale/es/gitlab.po
index 2bb35469c83..b5968b6981d 100644
--- a/locale/es/gitlab.po
+++ b/locale/es/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:39\n"
+"PO-Revision-Date: 2019-09-24 10:14\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (desde %{timeoutSource})"
msgid " Please sign in."
msgstr " Por favor, inicie sesión."
@@ -27,6 +30,12 @@ msgstr "Necesita hacer esto antes de %{grace_period_deadline}."
msgid " and"
msgstr " y"
+msgid " and "
+msgstr " y "
+
+msgid " and %{sliced}"
+msgstr " y %{sliced}"
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " degradado en %d punto"
@@ -40,12 +49,18 @@ msgstr[1] " mejorado en %d puntos"
msgid " or "
msgstr " o "
+msgid " or <!merge request id>"
+msgstr " o <!merge request id>"
+
msgid " or <#epic id>"
msgstr " o <#epic id>"
msgid " or <#issue id>"
msgstr " o <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr " o referencias (e.j. path/to/project!merge_request_id)"
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d comentario"
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] "%d commit detrás"
msgstr[1] "%d commits detrás"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d commit"
+msgstr[1] "%d commits"
+
msgid "%d commits"
msgstr "%d commits"
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d solucionado el resultado de la prueba"
msgstr[1] "%d solucionados los resultados de la prueba"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d incidencia"
@@ -106,19 +131,29 @@ msgstr[1] "%d merge requests"
msgid "%d merge request that you don't have access to."
msgid_plural "%d merge requests that you don't have access to."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d merge request al que no tiene acceso."
+msgstr[1] "%d merge requests a los que no tiene acceso."
msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d métrica"
msgstr[1] "%d métricas"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] "%d minutos"
+msgstr[1] "%d minutos"
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "%d comentarios más"
msgstr[1] "%d comentarios más"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] "%d segundo"
+msgstr[1] "%d segundos"
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,14 +172,14 @@ msgstr[1] "%s cambios adicionales han sido omitidos para evitar problemas de ren
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "Discusión de %{authorsName}"
+msgid "%{authorsName}'s thread"
+msgstr "Hilo de %{authorsName}"
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} escribió %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
-msgstr "%{counter_repositories} repositorios, %{counter_wikis} wikis, %{counter_build_artifacts} artefactos, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
+msgstr "%{count} LOC/commit"
msgid "%{count} approval required from %{name}"
msgid_plural "%{count} approvals required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] "%{count} se requieren las aprobaciones de %{name}"
msgid "%{count} approvals from %{name}"
msgstr "%{count} aprobaciones de %{name}"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "%{count} más"
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] "%{count} comentario pendiente"
msgstr[1] "%{count} comentarios pendientes"
+msgid "%{duration}ms"
+msgstr "%{duration}ms"
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} Intente hacer cherry-pick de nuevo de este commit."
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr "%{edit_in_new_fork_notice} Intente crear un nuevo directorio de nuevo."
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} Intentar revertir este commit otra vez."
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr "%{edit_in_new_fork_notice} Intente subir un archivo de nuevo."
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} eliminado"
@@ -197,6 +247,9 @@ msgstr "Los %{group_docs_link_start}Grupos%{group_docs_link_end} le permiten adm
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr "%{group_name} utiliza cuentas administradas de grupo. Debe crear una nueva cuenta de GitLab que será administrada por %{group_name}."
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr "%{icon} Está apunto de añadir %{usersTag} gente a la discusión.Por favor, proceda con precaución."
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "¡Va a eliminar %{issuableType}! ¿Está seguro de que desea realizar esta acción?"
@@ -212,18 +265,21 @@ msgstr "%{level_name} no está permitido en un grupo de %{group_level_name}."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr "%{level_name} no está permitido debido a que el fork del proyecto origen tiene menor visibilidad."
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "La visibilidad de %{level_name} ha sido restringida por el administrador."
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}Lea más%{link_end} acerca de los permisos de rol"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr "%{listToShow}, y %{awardsListLength} más."
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Iniciado"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} está bloqueado por el usuario de GitLab %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr "%{mergeLength}/%{usersLength} puede fusionarse"
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText}, esta incidencia se cerrará automáticamente."
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} Etiqueta"
msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Etiquetas"
+msgid "%{tabname} changed"
+msgstr "%{tabname} cambiado"
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text}%{files}"
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}Más información%{usage_ping_link_end} acerca de lo que se comparte en GitLab Inc."
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr "Avatar de %{userName}"
+
msgid "%{user_name} profile page"
msgstr "%{user_name} página de perfil"
+msgid "%{username}'s avatar"
+msgstr "Avatar de %{username}"
+
+msgid "%{value} ms"
+msgstr "%{value} ms"
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr "%{verb} %{time_spent_value} tiempo gastado."
@@ -319,29 +390,44 @@ msgstr "'%{level}' no es un nivel de visibilidad válido"
msgid "'%{source}' is not a import source"
msgstr "'%{source}' no es una fuente valida para importar"
+msgid "'%{template_name}' is unknown or invalid"
+msgstr "'%{template_name}' es desconocido o no es válido"
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "(%d cerrado)"
+msgstr[1] "(%d cerrados)"
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} fusionado)"
msgid "(No changes)"
msgstr "(Sin cambios)"
+msgid "(Show all)"
+msgstr "(Mostrar todo)"
+
msgid "(check progress)"
msgstr "(comprobar el progreso)"
msgid "(external source)"
msgstr "(fuente externa)"
+msgid "(removed)"
+msgstr "(eliminado)"
+
+msgid "+ %{amount} more"
+msgstr "+ %{amount} más"
+
msgid "+ %{count} more"
msgstr "+ %{count} más"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} más"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr "+ %{numberOfHiddenAssignees} más"
+
msgid "+%{extraOptionCount} more"
msgstr "+%{extraOptionCount} más"
@@ -377,8 +463,8 @@ msgstr[1] "%d Días"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 incidencia cerrada"
+msgstr[1] "%{issues} incidencias cerradas"
msgid "1 closed merge request"
msgid_plural "%{merge_requests} closed merge requests"
@@ -400,8 +486,8 @@ msgstr[1] ""
msgid "1 open issue"
msgid_plural "%{issues} open issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 incidencia abierta"
+msgstr[1] "%{issues} incidencias abiertas"
msgid "1 open merge request"
msgid_plural "%{merge_requests} open merge requests"
@@ -441,9 +527,6 @@ msgstr "20-29 contribuciones"
msgid "2FA"
msgstr "2FA"
-msgid "2FA enabled"
-msgstr "Verificación en 2 pasos habilitada"
-
msgid "2FADevice|Registered On"
msgstr "Registrado En"
@@ -492,6 +575,9 @@ msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> añadi
msgid "<no name set>"
msgstr "<no tiene el nombre establecido>"
+msgid "<no scopes selected>"
+msgstr "<ningún alcance seleccionado>"
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr "Un sitio basado en Hugo que usa Netlify como herramienta de CI/CD en lug
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "Un sitio basado en Jekyll que usa Netlify como herramienta de CI/CD en lugar de GitLab, pero con las de más excelentes características de GitLab."
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr "No se puede obtener un certificado SSL de Let's Encrypt hasta que se verifique su dominio."
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr "Se configurará una cuenta de Let's Encrypt para esta instalación de GitLab utilizando su correo electrónico. Recibirá correos electrónicos con avisos sobre la caducidad de los certificados."
@@ -541,7 +630,7 @@ msgid "A fork is a copy of a project.<br />Forking a repository allows you to ma
msgstr "Un fork es una copia de un proyecto.<br />Realizar un fork de un repositorio le permite realizar cambios sin afectar al proyecto original."
msgid "A member of the abuse team will review your report as soon as possible."
-msgstr ""
+msgstr "Un miembro del equipo revisará su informe tan pronto como sea posible."
msgid "A new branch will be created in your fork and a new merge request will be started."
msgstr "Se creará una nueva rama en su proceso de fork y se iniciará una nueva solicitud de merge."
@@ -564,6 +653,9 @@ msgstr "Una plantilla lista para utilizar con las aplicaciones iOS basadas en Sw
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "Una expresión regular que se utilizará para rastrear la cantidad de cobertura de código en la salida del trabajo. Déjela en blanco para deshabilitarla"
+msgid "A secure token that identifies an external storage request."
+msgstr "Un token seguro que identifica una petición de almacenamiento externo."
+
msgid "A user with write access to the source branch selected this option"
msgstr "Un usuario con acceso de escritura a la rama origen seleccionó esta opción"
@@ -573,6 +665,9 @@ msgstr "Ayuda de la API"
msgid "API Token"
msgstr "Token del API"
+msgid "Abort"
+msgstr "Cancelar"
+
msgid "About GitLab"
msgstr "Acerca de Gitlab"
@@ -627,6 +722,66 @@ msgstr "Roles"
msgid "AccessDropdown|Users"
msgstr "Usuarios"
+msgid "AccessTokens|Access Tokens"
+msgstr "Tokens de acceso"
+
+msgid "AccessTokens|Are you sure?"
+msgstr "¿Está seguro?"
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "¿Está seguro? Cualquier RSS o URLs de calendarios que esté utilizando actualmente dejarán de funcionar."
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr "¿Está seguro? Cualquier dirección de correo electrónico de incidencias que esté utilizando dejará de funcionar."
+
+msgid "AccessTokens|Created"
+msgstr "Creado"
+
+msgid "AccessTokens|Feed token"
+msgstr "Token de Feed"
+
+msgid "AccessTokens|Incoming email token"
+msgstr "Token de correo entrante"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "No se puede utilizar para acceder a ningún otro dato."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr "Mantenga este token en secreto. Cualquiera puede obtener acceso a los objetos estáticos del repositorio como si fuese usted. Debería %{reset_link_start}restablecer este token%{reset_link_end} si esto alguna vez sucede."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Mantenga este token en secreto. Cualquiera que tenga acceso a él puede crear incidencias como si fuese usted. Debería %{link_reset_it} si eso sucede."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Mantenga este token en secreto. Cualquier persona que tenga acceso a él puede leer la actividad y las incidencias de los canales RSS o del calendario como si fuese usted. Debería %{link_reset_it} si eso sucede."
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr "Tokens de acceso personal"
+
+msgid "AccessTokens|Static object token"
+msgstr "Token de objeto estático"
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr "Son las únicas contraseñas aceptadas cuando tiene la autenticación de dos factores (2FA) habilitada."
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr "También puede utilizar los tokens de acceso personal para autenticarse contra Git a través de HTTP."
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr "Puede generar un token de acceso personal para cada aplicación que utilice y que necesite acceso a la API de GitLab."
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr "Su token de feed se utiliza para autenticarlo cuando su lector de RSS carga una fuente de RSS personalizada o cuando su calendario carga un calendario personalizado, y se incluye en las URL de los feeds."
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr "Su token de correo electrónico entrante se utiliza para autenticarlo cuando crea una nueva incidencia por correo electrónico y se incluye en sus direcciones de correo electrónico personales específicas para el proyecto."
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr "Su token se utiliza para autenticarle cuando los objetos estáticos del repositorio (por ejemplo: archivos, blobs, ...) se sirven desde un sistema de almacenamiento externo."
+
+msgid "AccessTokens|reset it"
+msgstr "Reiniciarlo"
+
msgid "Account"
msgstr "Cuenta"
@@ -645,6 +800,9 @@ msgstr "Activar Service Desk"
msgid "Active"
msgstr "Activo"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr "Tokens activos %{type} (%{token_length})"
+
msgid "Active Sessions"
msgstr "Sesiones activas"
@@ -654,12 +812,20 @@ msgstr "Actividad"
msgid "Add"
msgstr "Añadir"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] "Añadir %d incidencia"
+msgstr[1] "Añadir %d incidencias"
+
msgid "Add CHANGELOG"
msgstr "Añadir CHANGELOG"
msgid "Add CONTRIBUTING"
msgstr "Añadir CONTRIBUTING"
+msgid "Add GitLab to Slack"
+msgstr "Añadir GitLab a Slack"
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Añadir Webhooks de grupo y GitLab Enterprise Edition."
@@ -672,12 +838,27 @@ msgstr "Añadir clúster de Kubernetes"
msgid "Add README"
msgstr "Añadir README"
+msgid "Add Zoom meeting"
+msgstr "Añadir una reunión de Zoom"
+
+msgid "Add a %{type} token"
+msgstr "Añadir un token %{type}"
+
msgid "Add a GPG key"
msgstr "Añadir una clave GPG"
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr "Agrega un botón de Grafana en la sección de monitorización que se encuentra en el menú de administración, para poder acceder a una variedad de estadísticas sobre el estado y el rendimiento de GitLab."
+
+msgid "Add a To Do"
+msgstr "Añadir a tareas pendientes"
+
msgid "Add a bullet list"
msgstr "Añadir una lista de viñetas"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr "Añadir un comentario general a este %{noteableDisplayName}."
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Añadir un comentario general a este %{noteable_name}."
@@ -696,9 +877,6 @@ msgstr "Añadir tabla"
msgid "Add a task list"
msgstr "Añadir una lista de tareas"
-msgid "Add a todo"
-msgstr "Añadir tarea pendiente"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Añada un texto adicional que aparecerá en todas las comunicaciones vía correo electrónico. El límite es de %{character_limit} caracteres"
@@ -708,6 +886,9 @@ msgstr "Añadir una clave SSH"
msgid "Add an issue"
msgstr "Agregar una incidencia"
+msgid "Add approval rule"
+msgstr "Agregar una regla de aprobación"
+
msgid "Add approvers"
msgstr "Añadir aprobadores"
@@ -721,7 +902,7 @@ msgid "Add comment now"
msgstr "Añadir comentario ahora"
msgid "Add email address"
-msgstr ""
+msgstr "Añadir dirección de correo electrónico"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
msgstr "Añadir encabezado y pie de página a los correos electrónicos. Tenga en cuenta que la configuración de los colores solo se aplicará dentro de la interfaz de la aplicación"
@@ -729,6 +910,9 @@ msgstr "Añadir encabezado y pie de página a los correos electrónicos. Tenga e
msgid "Add image comment"
msgstr "Añadir comentario a la imagen"
+msgid "Add issues"
+msgstr "Añadir Incidencia"
+
msgid "Add italic text"
msgstr "Añadir texto en cursiva"
@@ -747,17 +931,26 @@ msgstr "Añadir una nueva aplicación"
msgid "Add new directory"
msgstr "Agregar nuevo directorio"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr "Agregar nuevo miembro a %{strong_start}%{group_name}%{strong_end}"
+
msgid "Add or subtract spent time"
msgstr "Agregar o restar tiempo consumido"
msgid "Add reaction"
msgstr "Añadir reacción"
+msgid "Add to Slack"
+msgstr "Añadir a Slack"
+
+msgid "Add to epic"
+msgstr "Agregar a la tarea épica"
+
msgid "Add to merge train"
-msgstr ""
+msgstr "Agregar al merge train"
msgid "Add to merge train when pipeline succeeds"
-msgstr ""
+msgstr "Agregar al merge train cuando el pipeline se ejecute correctamente"
msgid "Add to project"
msgstr "Añadir al proyecto"
@@ -765,8 +958,8 @@ msgstr "Añadir al proyecto"
msgid "Add to review"
msgstr "Añadir a revisión"
-msgid "Add todo"
-msgstr "Añadir tarea pendiente"
+msgid "Add to tree"
+msgstr "Agregar al árbol"
msgid "Add user(s) to the group:"
msgstr "Añadir usuario(s) al grupo:"
@@ -780,9 +973,27 @@ msgstr "No se han especificado usuarios."
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "Demasiados usuarios especificados (el límite es %{user_limit})"
+msgid "Added"
+msgstr "Añadido"
+
+msgid "Added %{epic_ref} as child epic."
+msgstr "Agregada %{epic_ref} como tarea épica hija."
+
+msgid "Added %{label_references} %{label_text}."
+msgstr "Agregada %{label_references} %{label_text}."
+
+msgid "Added a To Do."
+msgstr "Agregado a la lista de tareas pendientes."
+
+msgid "Added an issue to an epic."
+msgstr "Agrada una incidencia a una tarea épica."
+
msgid "Added at"
msgstr "Añadido el"
+msgid "Added in this version"
+msgstr "Añadido en esta versión"
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "Se ha deshabilitado la opción de añadir nuevas aplicaciones en su instancia de GitLab. Póngase en contacto con su administrador de GitLab para obtener el permiso"
@@ -798,8 +1009,17 @@ msgstr "Añadir"
msgid "Adds %{epic_ref} as child epic."
msgstr "Añade %{epic_ref} como tarea épica hija."
-msgid "Adds a todo."
-msgstr "Añadir una tarea pendiente."
+msgid "Adds %{labels} %{label_text}."
+msgstr "Agrega %{labels} %{label_text}."
+
+msgid "Adds a To Do."
+msgstr "Agregar a la lista de tareas pendientes."
+
+msgid "Adds a Zoom meeting"
+msgstr "Agregar una reunión de Zoom"
+
+msgid "Adds an issue to an epic."
+msgstr "Agregar una incidencia a una tarea épica."
msgid "Admin Area"
msgstr "Ãrea de administración"
@@ -834,6 +1054,9 @@ msgstr "Error al detener trabajos"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Está a punto de detener todos los trabajos. Esto detendrá todos los trabajos que se están ejecutando actualmente."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr "Se ha producido un error al cargar las estadísticas. Por favor, inténtalo de nuevo"
+
msgid "AdminNote|Note"
msgstr "Nota"
@@ -859,16 +1082,16 @@ msgid "AdminSettings|Environment variables are protected by default"
msgstr "Las variables de entorno están protegidas por defecto"
msgid "AdminSettings|No required pipeline"
-msgstr ""
+msgstr "No se requiere un pipeline"
msgid "AdminSettings|Required pipeline configuration"
-msgstr ""
+msgstr "Configuración del pipeline requerida"
msgid "AdminSettings|Select a pipeline configuration file"
-msgstr ""
+msgstr "Seleccione un archivo de configuración del pipeline"
msgid "AdminSettings|Select a template"
-msgstr ""
+msgstr "Seleccione una plantilla"
msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "Cuando crea una nueva variable de entorno, se protegerá por defecto."
+msgid "AdminStatistics|Active Users"
+msgstr "Usuarios activos"
+
+msgid "AdminStatistics|Forks"
+msgstr "Forks"
+
+msgid "AdminStatistics|Issues"
+msgstr "Incidencias"
+
+msgid "AdminStatistics|Merge Requests"
+msgstr "Merge Requests"
+
+msgid "AdminStatistics|Milestones"
+msgstr "Hitos"
+
+msgid "AdminStatistics|Notes"
+msgstr "Notas"
+
+msgid "AdminStatistics|SSH Keys"
+msgstr "Claves SSH"
+
+msgid "AdminStatistics|Snippets"
+msgstr "Fragmentos de código"
+
msgid "AdminUsers|2FA Disabled"
msgstr "2FA desactivado"
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] "Alerta"
msgstr[1] "Alertas"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr "%{linkStart}Aprenda más%{linkEnd} sobre la configuración de este endpoint para recibir alertas."
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr "Cada origen de la alerta debe ser autorizado mediante la siguiente URL y la clave de autorización."
+
msgid "Alerts"
msgstr "Alertas"
@@ -986,11 +1239,17 @@ msgstr "Todos"
msgid "All Members"
msgstr "Todos los miembros"
+msgid "All branches"
+msgstr "Todas las ramas"
+
msgid "All changes are committed"
msgstr "Se ha realizado commit de todos los cambios"
+msgid "All cross-project dependencies have merged"
+msgstr "Se han fusionado todas las dependencias entre proyectos"
+
msgid "All email addresses will be used to identify your commits."
-msgstr ""
+msgstr "Todas las direcciones de correo electrónico se utilizarán para identificar sus commits."
msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
msgstr "Todas las funcionalidades están habilitadas para proyectos en blanco, plantillas, o al importar, pero puedes deshabilitarlas posteriormente en la configuración del proyecto."
@@ -1007,9 +1266,6 @@ msgstr "Se han solucionado todos los conflictos del merge. Puede realizar el mer
msgid "All projects"
msgstr "Todos los proyectos"
-msgid "All todos were marked as done."
-msgstr "Se marcaron todas las tareas pendientes como realizadas."
-
msgid "All users"
msgstr "Todos los usuarios"
@@ -1043,9 +1299,15 @@ msgstr "Permitir el renderizado de diagramas PlantUML en documentos Asciidoc."
msgid "Allow requests to the local network from hooks and services."
msgstr "Permitir peticiones a la red local desde los hooks y los servicios."
-msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
+msgid "Allow requests to the local network from system hooks"
+msgstr "Permitir solicitudes a la red local desde hooks de sistema"
+
+msgid "Allow requests to the local network from web hooks and services"
msgstr ""
+msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
+msgstr "¿Permitir que esta clave también haga push al repositorio? (El valor predeterminado solo permite hacer pull)"
+
msgid "Allow users to register any application to use GitLab as an OAuth provider"
msgstr "Permitir a los usuarios registrar cualquier aplicación para usar GitLab como proveedor de OAuth"
@@ -1055,6 +1317,9 @@ msgstr "Permitir a los usuarios solicitar acceso"
msgid "Allow users to request access if visibility is public or internal."
msgstr "Permitir a los usuarios solicitar acceso si la visibilidad es pública o interna."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "Permitido fallar"
@@ -1062,19 +1327,13 @@ msgid "Allows you to add and manage Kubernetes clusters."
msgstr "Le permite agregar y administrar clusters de Kubernetes."
msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
-msgstr ""
+msgstr "También llamado \"emisor\" o \"identificador de confianza\""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
-msgstr ""
-
-msgid "Alternate support URL for help page"
-msgstr "URL de soporte alternativa para la página de ayuda"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "Alternativamente, puede utilizar un %{personal_access_token_link}. Cuando cree su token de acceso personal, debe seleccionar el alcance del <code>repositorio</code>, para que podamos mostrar una lista de sus repositorios públicos y privados que estén disponibles para conectarse."
+msgstr "También llamado \"URL de servicio confiable\" o \"URL de respuesta\""
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Alternativamente, puedes utilizar un %{personal_access_token_link}. Cuando crea su token de acceso personal, deberá seleccionar el ámbito del <code>repo</code>, entonces podremos mostrar una lista de sus repositorios públicos y privados disponibles para importar."
+msgid "Alternate support URL for help page and help dropdown"
+msgstr "URL de soporte alternativa para las páginas y para el menu desplegable de ayuda"
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "Cantidad de tiempo (en horas) que los usuarios pueden omitir la configuración forzada de la autenticación de dos factores"
@@ -1088,7 +1347,7 @@ msgstr "Se agregará a un campo de usuario de Gitlab el nombre completo del usua
msgid "An error has occurred"
msgstr "Se ha producido un error"
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr "Se ha producido un error al agregar un borrador a la discusión."
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr "Se ha producido un error al obtener los entornos."
msgid "An error occurred while fetching folder content."
msgstr "Se ha producido un error al obtener el contenido de la carpeta."
+msgid "An error occurred while fetching issues."
+msgstr "Se ha producido un error al obtener las incidencias."
+
msgid "An error occurred while fetching label colors."
msgstr "Se ha producido un error al obtener los colores de las etiquetas."
@@ -1190,6 +1452,9 @@ msgstr "Se ha producido un error al obtener las versiones. Por favor, inténtelo
msgid "An error occurred while fetching this tab."
msgstr "Se ha producido un error al obtener esta pestaña."
+msgid "An error occurred while generating a username. Please try again."
+msgstr "Se ha producido un error al generar un nombre de usuario. Por favor, inténtelo de nuevo."
+
msgid "An error occurred while getting projects"
msgstr "Se ha producido un error al obtener los proyectos"
@@ -1235,12 +1500,12 @@ msgstr "Se ha producido un error al eliminar las tareas épicas."
msgid "An error occurred while removing issues."
msgstr "Se ha producido un error al eliminar las incidencias."
-msgid "An error occurred while rendering KaTeX"
-msgstr "Se ha producido un error durante el renderizado con KaTeX"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr ""
+msgid "An error occurred while reordering issues."
+msgstr "Se ha producido un error al ordenar las incidencias."
+
msgid "An error occurred while retrieving calendar activity"
msgstr "Se ha producido un error al recuperar la actividad del calendario"
@@ -1259,6 +1524,12 @@ msgstr "Se ha producido un error al guardar la configuración de aprobaciones"
msgid "An error occurred while subscribing to notifications."
msgstr "Se ha producido un error al suscribirse a las notificaciones."
+msgid "An error occurred while triggering the job."
+msgstr "Se ha producido un error al ejecutar el trabajo."
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "Se ha producido un error al cancelar la suscripción a las notificaciones."
@@ -1307,6 +1578,9 @@ msgstr "Se ha producido un error al cargar los trabajos de lo pipelines."
msgid "An error occurred. Please try again."
msgstr "Se ha producido un error. Por favor inténtelo de nuevo."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr "Una incidencia puede ser un error, una tarea pendiente o una solicitud de una nueva funcionalidad que debe tratarse en un proyecto. Además, recuerde que las incidencias se pueden buscar y filtrar."
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "Se ha producido un error inesperado al comprobar el entorno del proyecto."
@@ -1325,6 +1599,9 @@ msgstr "Se ha producido un error inesperado al detener el Terminal Web."
msgid "Analytics"
msgstr "Analíticas"
+msgid "Analytics|Timeframe"
+msgstr "Periodo de tiempo"
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr "Cualquier token encriptado"
msgid "Any namespace"
msgstr "Cualquier espacio de nombres"
+msgid "Any user"
+msgstr "Cualquier usuario"
+
msgid "Appearance"
msgstr "Apariencia"
@@ -1391,6 +1671,9 @@ msgstr "Aplicaciones"
msgid "Applied"
msgstr "Aplicado"
+msgid "Apply a label"
+msgstr "Aplicar a la etiqueta"
+
msgid "Apply suggestion"
msgstr "Aplicar sugerencia"
@@ -1432,8 +1715,8 @@ msgstr[1] "%{count} aprobaciones requeridas para %{membersCount}"
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr "Todos los miembros con un rol de desarrollador o superior y que son propietarios del código (si los hay)"
-msgid "ApprovalRule|Members"
-msgstr "Miembros"
+msgid "ApprovalRule|Approvers"
+msgstr "Aprobadores"
msgid "ApprovalRule|Name"
msgstr "Nombre"
@@ -1441,12 +1724,27 @@ msgstr "Nombre"
msgid "ApprovalRule|No. approvals required"
msgstr "No se requiere aprobaciones"
+msgid "ApprovalRule|Rule name"
+msgstr "Nombre de la regla"
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr "por ejemplo, QA, Seguridad, etc."
msgid "Approvals"
msgstr "Aprobaciones"
+msgid "Approve"
+msgstr "Aprobar"
+
+msgid "Approve a merge request"
+msgstr "Aprobar el merge request"
+
+msgid "Approve the current merge request."
+msgstr "Aprobar el merge request actual."
+
+msgid "Approved the current merge request."
+msgstr "Aprobado el merge request actual."
+
msgid "Apr"
msgstr "Abril"
@@ -1483,6 +1781,15 @@ msgstr "¿Está seguro que deseas cancelar la creación de este comentario?"
msgid "Are you sure you want to cancel editing this comment?"
msgstr "¿Está seguro de que desea cancelar la edición de este comentario?"
+msgid "Are you sure you want to delete these artifacts?"
+msgstr "¿Está seguro de que deseas eliminar estos artefactos?"
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr "¿Esta seguro de que desea eliminar esto %{typeOfComment}?"
+
+msgid "Are you sure you want to delete this board?"
+msgstr "¿Está seguro de que desea eliminar esta tablero?"
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr "¿Está seguro de que desea borrar este dispositivo? Esta acción no se puede deshacer."
@@ -1525,6 +1832,9 @@ msgstr "¿Está seguro de que desea restablecer el token SCIM? La provisión de
msgid "Are you sure you want to reset the health check token?"
msgstr "¿Está seguro que desea restablecer el token de verificación de estado?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr "¿Está seguro de que desea revocar este token %{type}? Esta acción no se puede deshacer."
+
msgid "Are you sure you want to revoke this nickname?"
msgstr "¿Está seguro que desea revocar este nick?"
@@ -1552,6 +1862,12 @@ msgstr "¿Está seguro?. Al hacer esto invalidará sus aplicaciones registradas
msgid "Artifact ID"
msgstr "ID del artefacto"
+msgid "Artifact could not be deleted."
+msgstr "Se ha producido un error al eliminar la categoría."
+
+msgid "Artifact was successfully deleted."
+msgstr "El artefacto se ha eliminado correctamente."
+
msgid "Artifacts"
msgstr "Artefactos"
@@ -1588,6 +1904,9 @@ msgstr "Asignar"
msgid "Assign custom color like #FF0000"
msgstr "Asigne colores personalizados como #FF0000"
+msgid "Assign epic"
+msgstr "Asignar tarea épica"
+
msgid "Assign labels"
msgstr "Asignar etiquetas"
@@ -1606,6 +1925,9 @@ msgstr "Asignarse estas incidencias"
msgid "Assign yourself to this issue"
msgstr "Asignarse esta incidencia"
+msgid "Assigned %{assignee_users_sentence}."
+msgstr "Asignado a %{assignee_users_sentence}."
+
msgid "Assigned Issues"
msgstr "Incidencias asignadas"
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr "Asignado a mí"
msgid "Assignee"
-msgstr "Asignado a"
+msgid_plural "%d Assignees"
+msgstr[0] "Asignado"
+msgstr[1] "Asignados %d"
msgid "Assignee lists not available with your current license"
msgstr "Las listas de asignaciones no se encuentran disponibles con su licencia actual"
@@ -1627,6 +1951,9 @@ msgstr "Las listas de asignados muestran todos las incidencias asignadas al usua
msgid "Assignee(s)"
msgstr "Asignado(s)"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr "Asigna %{assignee_users_sentence}."
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr "Se requiere al menos la aprobación de un propietario del código para cambiar los archivos que coincidan con las reglas de CODEOWNER."
@@ -1647,12 +1974,21 @@ msgstr "Se ha producido un error al adjuntar el archivo."
msgid "Audit Events"
msgstr "Eventos de auditoría"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr "Audit Events es una forma de realizar un seguimiento de los eventos importantes que ocurrieron en GitLab."
+
msgid "Aug"
msgstr "Ago"
msgid "August"
msgstr "Agosto"
+msgid "Authenticate"
+msgstr "Autenticar"
+
+msgid "Authenticate with GitHub"
+msgstr "Autenticar con GitHub"
+
msgid "Authentication Log"
msgstr "Registro de Autenticación"
@@ -1710,6 +2046,9 @@ msgstr "Auto DevOps habilitado"
msgid "Auto DevOps, runners and job artifacts"
msgstr "Auto DevOps, ejecutores y artefactos"
+msgid "Auto License Compliance"
+msgstr "License Compliance automático"
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "Cancelación redundante automática, pipelines pendientes"
@@ -1731,6 +2070,18 @@ msgstr "Más información en %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "El pipeline de Auto DevOps ha sido habilitado y será utilizado si no se encuentra un archivo de configuración CI alternativo. %{more_information_link}"
+msgid "Autocomplete"
+msgstr "Autocompletar"
+
+msgid "Autocomplete description"
+msgstr "Autocompletar descripción"
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr "Gestión automática de los certificados utilizando %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
@@ -1744,7 +2095,7 @@ msgid "Automatically resolved"
msgstr "Resuelto automáticamente"
msgid "Automatically update this project's branches and tags from the upstream repository every hour."
-msgstr ""
+msgstr "Actualizar automáticamente las ramas y las etiquetas desde el repositorio upstream cada hora."
msgid "Autosave|Note"
msgstr "Nota"
@@ -1911,32 +2262,32 @@ msgstr "A continuación encontrará todos los grupos públicos."
msgid "Billing"
msgstr "Facturación"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} está actualmente en el plan %{plan_link}."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr "%{group_name} está utilizando actualmente el plan %{plan_link}."
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "Actualizar o volver a un plan anterior de forma automática no está actualmente disponible para algunos de los planes."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr "@%{user_name}, actualmente está utilizando el plan %{plan_link}."
msgid "BillingPlans|Current plan"
msgstr "Plan actual"
-msgid "BillingPlans|Customer Support"
-msgstr "Servicio al Cliente"
-
msgid "BillingPlans|Downgrade"
msgstr "Planes de Facturación | Volver a un plan anterior"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "Obtenga más información sobre cada plan leyendo nuestro %{faq_link}, o pruebe una versión gratuita de 30 días de Gitlab.com Gold."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "Aprenda más sobre cada plan, leyendo nuestro %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr "Obtenga más información sobre cada plan visitando nuestro %{pricing_page_link}."
msgid "BillingPlans|Manage plan"
msgstr "Gestionar plan"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "Por favor contacte con %{customer_support_link} para ese caso."
+msgid "BillingPlans|Pricing page"
+msgstr "Página de precios"
msgid "BillingPlans|See all %{plan_name} features"
msgstr "Ver todas las novedades del %{plan_name}"
@@ -1950,14 +2301,11 @@ msgstr "Para administrar el plan de este grupo, por favor visite la sección de
msgid "BillingPlans|Upgrade"
msgstr "Actualizar plan"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "Está actualmente en el plan %{plan_link}."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "Su periodo de prueba de Gitlab.com expiró el %{expiration_date}. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "Su periodo de prueba de la versión de Gitlab Gold <strong> finalizará después de %{expiration_date} </strong>. Puede obtener más información acerca de Gitlab Gold leyendo nuestro %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr "Su periodo de prueba de GitLab.com <strong>finalizará después del %{expiration_date}</strong>. Puede obtener más información sobre GitLab.com Gold leyendo sobre nuestros %{features_link}."
msgid "BillingPlans|features"
msgstr "características"
@@ -1974,6 +2322,9 @@ msgstr "pagado anualmente a %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "por usuario"
+msgid "BillingPlan|Upgrade plan"
+msgstr "Actualizar plan"
+
msgid "Bitbucket Server Import"
msgstr "Importar desde un servidor de Bitbucket"
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr "Bloqueado"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr "Blog"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr "Nombre del tablero"
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr "Añadir listas por defecto"
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr "Agregue las siguientes listas predeterminadas a su tablero de incidencias con un solo clic:"
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr "No importa, voy a utilizar el mío"
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr "Comenzar con el conjunto de listas por defecto, lo pondrá en el camino correcto para aprovechar al máximo su tablero."
+
msgid "Boards"
msgstr "Tableros"
+msgid "Boards|Collapse"
+msgstr "Contraer"
+
msgid "Boards|Edit board"
msgstr "Editar tablero"
+msgid "Boards|Expand"
+msgstr "Expandir"
+
msgid "Boards|View scope"
msgstr "Ver alcance"
+msgid "Branch"
+msgstr "Branch"
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "No se encontró la rama %{branchName} en el repositorio de este proyecto."
@@ -2173,6 +2544,9 @@ msgstr "Examinar archivo"
msgid "Browse Files"
msgstr "Examinar archivos"
+msgid "Browse artifacts"
+msgstr "Examinar artefactos"
+
msgid "Browse files"
msgstr "Examinar archivos"
@@ -2284,8 +2658,11 @@ msgstr "Aprenda más de Auto DevOps"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "El pipeline de Auto DevOps se ejecutará si no se encuentra ningún archivo de configuración alternativo de CI."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
-msgstr "Debe añadir un %{kubernetes_cluster_start} cluster de integración Kubernetes%{kubernetes_cluster_end} a este proyecto con un dominio para que su estrategia de despliegue funcione correctamente."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
msgid "CICD|group enabled"
msgstr "grupo habilitado"
@@ -2293,6 +2670,12 @@ msgstr "grupo habilitado"
msgid "CICD|instance enabled"
msgstr "Instancia habilitada"
+msgid "CLOSED"
+msgstr "CERRADO"
+
+msgid "CLOSED (MOVED)"
+msgstr "CERRADO (MOVIDO)"
+
msgid "CONTRIBUTING"
msgstr "CONTRIBUTING"
@@ -2320,9 +2703,15 @@ msgstr "Canary Deployment es una estrategia de CI, donde solo una pequeña porci
msgid "Cancel"
msgstr "Cancelar"
+msgid "Cancel running"
+msgstr "Cancelar ejecución"
+
msgid "Cancel this job"
msgstr "Cancelar este trabajo"
+msgid "Cancelling Preview"
+msgstr "Cancelando la vista previa"
+
msgid "Cannot be merged automatically"
msgstr "No se puede hacer merge automáticamente"
@@ -2332,6 +2721,9 @@ msgstr "No se puede crear el informe de abuso. El usuario ha sido eliminado."
msgid "Cannot create the abuse report. This user has been blocked."
msgstr "No se puede crear el informe de abuso. Este usuario ha sido bloqueado."
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "No se puede modificar el clúster de Kubernetes gestionado"
@@ -2359,12 +2751,21 @@ msgstr "Certificado (PEM)"
msgid "Change Weight"
msgstr "Cambiar peso"
+msgid "Change assignee"
+msgstr "Cambiar el asignado"
+
msgid "Change assignee(s)"
msgstr "Cambiar asignado(s)"
msgid "Change assignee(s)."
msgstr "Cambiar asignado(s)."
+msgid "Change label"
+msgstr "Cambiar la etiqueta"
+
+msgid "Change milestone"
+msgstr "Cambiar el hito"
+
msgid "Change path"
msgstr "Cambiar la ruta"
@@ -2401,6 +2802,12 @@ msgstr "Revertir"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "Esta acción creará un nuevo commit para deshacer los cambios existentes."
+msgid "Changed assignee(s)."
+msgstr "Asignado(s) cambiado(s)."
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr "Título cambiado a \"%{title_param}\"."
+
msgid "Changes"
msgstr "Cambios"
@@ -2422,6 +2829,57 @@ msgstr "Gráficos"
msgid "Chat"
msgstr "Chat"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr "Branch"
+
+msgid "ChatMessage|Commit"
+msgstr "Commit"
+
+msgid "ChatMessage|Failed job"
+msgstr "Trabajo fallido"
+
+msgid "ChatMessage|Failed stage"
+msgstr "Etapa fallida"
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr "Archivo YAML de configuración de CI no válido"
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr "Tag"
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr "falló"
+
+msgid "ChatMessage|has failed"
+msgstr "ha fallado"
+
+msgid "ChatMessage|has passed"
+msgstr "ha pasado"
+
+msgid "ChatMessage|has passed with warnings"
+msgstr "ha pasado con advertencias"
+
+msgid "ChatMessage|in %{duration}"
+msgstr "en %{duration}"
+
+msgid "ChatMessage|in %{project_link}"
+msgstr "en %{project_link}"
+
+msgid "ChatMessage|passed"
+msgstr "pasó"
+
msgid "Check again"
msgstr "Verficar de nuevo"
@@ -2464,6 +2922,9 @@ msgstr "Elija un branch/tag (por ejemplo, %{master}) o introduzca un commit (por
msgid "Choose a file"
msgstr "Seleccione un archivo"
+msgid "Choose a group"
+msgstr "Elija un grupo"
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr "Elija que repositorios quiere conectar y ejecutar los CI/CD pipelines."
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "Elija cuál de los shards desea sincronizar para este nodo secundario."
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "cancelado"
@@ -2593,6 +3051,9 @@ msgstr "Eliminar fila de variables"
msgid "CiVariables|Scope"
msgstr "Alcance"
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr "Estado"
@@ -2602,6 +3063,9 @@ msgstr "Tipo"
msgid "CiVariables|Value"
msgstr "Valor"
+msgid "CiVariables|Variables"
+msgstr "Variables"
+
msgid "CiVariable|* (All environments)"
msgstr "* (Todos los entornos)"
@@ -2647,15 +3111,24 @@ msgstr "Limpiar"
msgid "Clear input"
msgstr "Limpiar entrada"
+msgid "Clear recent searches"
+msgstr "Borrar el historial de búsquedas recientes"
+
msgid "Clear search"
msgstr "Limpiar búsqueda"
msgid "Clear search input"
msgstr "Limpiar el historial de búsqueda"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr "Limpiar peso"
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr "Limpiar peso."
@@ -2677,6 +3150,9 @@ msgstr "Haga click en el botón <strong>Seleccionar uno</strong> en la parte der
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "Haga clic en el botón que se muestra a continuación para comenzar con el proceso de instalación navegando hasta la página de Kubernetes"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr "Haga clic en la imagen donde desea comenzar una nueva discusión"
+
msgid "Click to expand it."
msgstr "Haga clic para expandir."
@@ -2713,6 +3189,9 @@ msgstr "Clonar con SSH"
msgid "Close"
msgstr "Cerrar"
+msgid "Close %{tabname}"
+msgstr "Cerrar %{tabname}"
+
msgid "Close epic"
msgstr "Cerrar épica"
@@ -2722,12 +3201,27 @@ msgstr "Cerrar hito"
msgid "Close sidebar"
msgstr "Cerrar la barra lateral"
+msgid "Close this %{quick_action_target}"
+msgstr "Cierra este %{quick_action_target}"
+
msgid "Closed"
msgstr "Cerrado"
msgid "Closed issues"
msgstr "Incidencias cerradas"
+msgid "Closed this %{quick_action_target}."
+msgstr "Cerrado este %{quick_action_target}."
+
+msgid "Closes this %{quick_action_target}."
+msgstr "Cierra este %{quick_action_target}."
+
+msgid "Cluster %{cluster} was used."
+msgstr "Se usó el clúster %{cluster}."
+
+msgid "Cluster Health"
+msgstr "Estado de salud del clúster"
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr "ClusterIntegration | %{custom_domain_start}Más información%{custom_domain_end}."
@@ -2776,6 +3270,9 @@ msgstr "Agregar una integración compartirá el cluster en todos sus proyectos."
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Opciones avanzadas para la integración de este clúster de Kubernetes"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr "Todos los datos serán eliminados y no se podrán restaurar."
@@ -2785,6 +3282,9 @@ msgstr "Permitir que GitLab administre el espacio de nombres y las cuentas de se
msgid "ClusterIntegration|Alternatively"
msgstr "Alternativamente"
+msgid "ClusterIntegration|Amazon EKS"
+msgstr "Amazon EKS"
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Se ha producido un error al intentar contactar con la API de Google Cloud. Por favor, inténtelo de nuevo más tarde."
@@ -2824,12 +3324,18 @@ msgstr "Cert-Manager es un controlador de administración de certificados de Kub
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "paquete de certificado de autoridad (formato PEM)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "Seleccione que aplicaciones instalar en su clúster Kubernetes. Es necesario Helm Tiller para instalar cualquiera de las siguientes aplicaciones."
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Seleccione cuál de los entornos de su proyecto utilizará este clúster de Kubernetes."
+msgid "ClusterIntegration|Cloud Run"
+msgstr "Cloud Run"
+
msgid "ClusterIntegration|Cluster health"
msgstr "Estado de salud del cluster"
@@ -2860,12 +3366,21 @@ msgstr "Copiar el nombre del clúster Kubernetes"
msgid "ClusterIntegration|Copy Service Token"
msgstr "Copiar token de servicio"
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Crear cluster de Kubernetes"
+msgid "ClusterIntegration|Create cluster on"
+msgstr "Crear clúster en"
+
msgid "ClusterIntegration|Did you know?"
msgstr "¿Sabía usted?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr "Habilitar Cloud Run en GKE (beta)"
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Habilita o inhabilita la conexión de GitLab con su clúster Kubernetes."
@@ -2914,6 +3429,9 @@ msgstr "Cluster de GitLab administrado"
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Proyecto de Google Cloud Platform"
+msgid "ClusterIntegration|Google GKE"
+msgstr "Google GKE"
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -2963,7 +3481,7 @@ msgid "ClusterIntegration|Issuer Email"
msgstr "Correo electrónico del emisor"
msgid "ClusterIntegration|Issuers represent a certificate authority. You must provide an email address for your Issuer. "
-msgstr ""
+msgstr "Los emisores representan una autoridad de certificación. Debe proporcionar una dirección de correo electrónico para su emisor. "
msgid "ClusterIntegration|Jupyter Hostname"
msgstr "Nombre del host Jupyter"
@@ -3001,8 +3519,8 @@ msgstr "Se está creando el clúster de Kubernetes en Google Kubernetes Engine..
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Nombre de cluster de Kubernetes"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "El clúster de Kubernetes se creó correctamente en Google Kubernetes Engine. Actualice la página para ver los detalles del clúster Kubernetes"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "ClusterIntegration | Los clústeres de Kubernetes le permiten utilizar aplicaciones de revisión, desplegar sus aplicaciones, ejecutar sus pipelines y mucho más de una manera sencilla."
@@ -3016,6 +3534,9 @@ msgstr "Aprenda más sobre los tipos de %{help_link_start_machine_type}instancia
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "Conozca más sobre las %{help_link_start}zonas%{help_link_end}."
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "Más información sobre Kubernetes"
@@ -3028,6 +3549,12 @@ msgstr "Más información sobre los grupos de clústeres de Kubernetes"
msgid "ClusterIntegration|Let's Encrypt"
msgstr "Let's Encrypt"
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr "Cargando roles de IAM"
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Tipo de máquina"
@@ -3037,6 +3564,9 @@ msgstr "Asegúrese de que su cuenta %{link_to_requirements} cumple con los requi
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "Administre su cluster de Kubernetes visitando %{link_gke}"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr "No se han encontrado roles de IAM"
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "No hay tipos de máquinas que coincidan con su búsqueda"
@@ -3046,6 +3576,9 @@ msgstr "No se encontraron proyectos"
msgid "ClusterIntegration|No projects matched your search"
msgstr "No hay proyectos que coincidan con su búsqueda"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "No hay zonas que coincidan con su búsqueda"
@@ -3070,6 +3603,9 @@ msgstr "Clúster del proyecto"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "Espacio de nombres del proyecto (opcional, único)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr "Prefijo del espacio de nombres del proyecto (opcional, único)"
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3082,6 +3618,9 @@ msgstr "Cluster RBAC habilitado"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "Lea nuestra %{link_to_help_page} sobre la integración de clústeres Kubernetes."
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Eliminar la integración de clústeres de Kubernetes"
@@ -3100,15 +3639,24 @@ msgstr "Falló la solicitud para iniciar la instalación"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr "La solicitud para comenzar la desinstalación ha fallado"
+msgid "ClusterIntegration|Role name"
+msgstr "Nombre del rol"
+
msgid "ClusterIntegration|Save changes"
msgstr "Guardar cambios"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr "Buscar roles de IAM"
+
msgid "ClusterIntegration|Search machine types"
msgstr "Buscar tipos de máquina"
msgid "ClusterIntegration|Search projects"
msgstr "Buscar proyectos"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "Buscar zonas"
@@ -3127,6 +3675,9 @@ msgstr "Seleccione el proyecto y la zona para elegir el tipo de máquina"
msgid "ClusterIntegration|Select project to choose zone"
msgstr "Seleccione un proyecto para elegir la zona"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "Seleccione la zona"
@@ -3158,7 +3709,7 @@ msgid "ClusterIntegration|Something went wrong while updating Knative domain nam
msgstr "Se ha producido un error al intentar actualizar el nombre de dominio de Knative."
msgid "ClusterIntegration|Specifying a domain will allow you to use Auto Review Apps and Auto Deploy stages for %{auto_devops_start}Auto DevOps%{auto_devops_end}. The domain should have a wildcard DNS configured matching the domain."
-msgstr ""
+msgstr "Especificar un dominio le permitirá utilizar las apps Auto Review y Auto Deploy stages para %{auto_devops_start}Auto DevOps%{auto_devops_end}. El dominio debe tener un comodín DNS configurado que coincida con el dominio."
msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster."
msgstr "El certificado Kubernetes utilizado para autenticarse en el clúster."
@@ -3166,18 +3717,24 @@ msgstr "El certificado Kubernetes utilizado para autenticarse en el clúster."
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr "La URL utilizada para acceder a la API de Kubernetes."
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
-msgstr "Se eliminará la dirección IP asociada y no se podrá restaurar."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
+msgstr "La dirección IP asociada y todos los servicios implementados seran eliminados y no se podrán restaurar. Al desinstalar Knative también se eliminará Istio de su clúster. Estos cambios no afectarán a ninguna de sus otras aplicaciones."
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
-msgstr "El certificado asociado se eliminará y no se podrá restaurar."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
+msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr "Se eliminarán el balanceador de carga asociado y la dirección IP y no podrán ser restaurados."
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr "Se eliminará la clave privada asociada y no podrá ser restaurada."
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr "El endpoint está en proceso de ser asignado. Por favor verifique su cluster o las cuotas de Google Kubernetes Engine si es proceso tarda mucho tiempo en finalizar."
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr "El espacio de nombres asociado con su proyecto. Este será utilizado para desplegar los paneles de control, los pods de registro y los terminales Web."
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr "Se ha producido un error durante la autenticación con su cluster. Por favor, asegúrese de que su la CA de su certificado y su token son válidos."
@@ -3199,6 +3756,9 @@ msgstr "ClusterIntegration | Desinstalar %{appTitle}"
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr "Se ha podroducido un erro al actualizar. Por favor revise los registros y vuelva a intentarlo."
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr "Utiliza los complementos Cloud Run, Istio y balanceo de carga HTTP para este clúster."
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "Validación del estado de facturación del proyecto"
@@ -3235,18 +3795,24 @@ msgstr "documentación"
msgid "ClusterIntegration|help page"
msgstr "página de ayuda"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr "instalado a través de %{installed_via}"
+
msgid "ClusterIntegration|meets the requirements"
msgstr "cumple con los requisitos"
msgid "ClusterIntegration|pricing"
msgstr "Precios"
-msgid "ClusterIntegration|properly configured"
-msgstr "configurado correctamente"
-
msgid "ClusterIntegration|sign up"
msgstr "regístrese"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr "Seleccione el nombre del rol"
+
msgid "Code"
msgstr "Código"
@@ -3269,20 +3835,29 @@ msgid "Collapse"
msgstr "Contraer"
msgid "Collapse approvers"
-msgstr ""
+msgstr "Contraer aprobadores"
msgid "Collapse sidebar"
msgstr "Contraer la barra lateral"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr "ComboSearch no está definido"
+msgid "Command"
+msgstr "Comando"
+
msgid "Command line instructions"
msgstr "Instrucciones de la línea de comando"
msgid "Commands applied"
msgstr "Comandos aplicados"
+msgid "Commands did not apply"
+msgstr "No se aplicaron los comandos"
+
msgid "Comment"
msgstr "Comentar"
@@ -3292,11 +3867,11 @@ msgstr "Comentar y cerrar %{noteable_name}"
msgid "Comment & reopen %{noteable_name}"
msgstr "Comentar y volver a abrir %{noteable_name}"
-msgid "Comment & resolve discussion"
-msgstr "Comentar y resolver la discusión"
+msgid "Comment & resolve thread"
+msgstr "Comentar y resolver hilo"
-msgid "Comment & unresolve discussion"
-msgstr "Comentar y dejar la discusión sin resolver"
+msgid "Comment & unresolve thread"
+msgstr "Comentar y dejar el hilo sin resolver"
msgid "Comment form position"
msgstr ""
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr "El comentario está siendo actualizado"
+msgid "Comment/Reply (quoting selected text)"
+msgstr "Comentar/Responder (citando el texto seleccionado)"
+
msgid "Comments"
msgstr "Comentarios"
@@ -3315,6 +3893,9 @@ msgstr[1] "Cambios"
msgid "Commit %{commit_id}"
msgstr "Commit %{commit_id}"
+msgid "Commit (when editing commit message)"
+msgstr "Commit (al editar el mensaje de confirmación)"
+
msgid "Commit Message"
msgstr "Mensaje del commit"
@@ -3394,7 +3975,7 @@ msgid "Compare changes with the last commit"
msgstr "Comparar los cambios con el último commit"
msgid "Compare changes with the merge request target branch"
-msgstr ""
+msgstr "Comparar los cambios con la rama de destino del merge request"
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr "Los 'branches' %{source_branch} y %{target_branch} son iguales."
@@ -3411,12 +3992,18 @@ msgstr "Destino"
msgid "CompareBranches|There isn't anything to compare."
msgstr "No hay nada que comparar."
+msgid "Complete"
+msgstr "Completado"
+
msgid "Confidential"
msgstr "Confidencial"
msgid "Confidentiality"
msgstr "Confidencialidad"
+msgid "Configuration"
+msgstr "Configuración"
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr "Configure los ejecutores de GitLab para comenzar a usar el terminal web. %{helpStart}Aprenda más.%{helpEnd}"
@@ -3426,6 +4013,9 @@ msgstr "Configurar los tiempos de espera de Gitaly."
msgid "Configure Let's Encrypt"
msgstr "Configurar Let's Encrypt"
+msgid "Configure Prometheus"
+msgstr "Configurar Prometheus"
+
msgid "Configure Tracing"
msgstr "Configurar seguimiento"
@@ -3435,6 +4025,9 @@ msgstr "Configure un archivo <code>.gitlab-webide.yml</code> en el directorio <c
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "Configurar las comprobaciones automáticas de Git y el mantenimiento en los repositorios."
+msgid "Configure existing installation"
+msgstr "Configurar la instalación existente"
+
msgid "Configure limits for web and API requests."
msgstr "Configurar los límites para las peticiones web y las peticiones API."
@@ -3475,7 +4068,7 @@ msgid "Connect your external repositories, and CI/CD pipelines will run for new
msgstr "Conecte sus repositorios externos, y los pipelines de CI/CD se ejecutarán para los nuevos commits. Se creará un proyecto de Gitlab sólo con las caracteristicas de CI/CD habilitadas."
msgid "Connecting to terminal sync service"
-msgstr ""
+msgstr "Conectando al terminal de servicio de sincronización"
msgid "Connecting..."
msgstr "Conectando..."
@@ -3501,32 +4094,40 @@ msgstr "Registro de contenedores"
msgid "Container registry images"
msgstr "Imágenes del registro de contenedores"
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "Inicie sesión por primera vez en el Container Registry de GitLab&rsquo; utilizando su usuario y su contraseña. Si tiene %{link_2fa} necesita utilizar un %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
+msgstr "Registro de contenedores"
+
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr "Copiar el comando build al portapapeles"
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "Gitlab soporta hasta 3 niveles para nombres de imágenes. Los siguientes ejemplos de imágenes son válidos para tu proyecto:"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr "Copiar el comando push al portapapeles"
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "Cómo utilizar el registro de contenedores"
+msgid "ContainerRegistry|Docker connection error"
+msgstr "Error de conexión de Docker"
msgid "ContainerRegistry|Last Updated"
-msgstr ""
-
-msgid "ContainerRegistry|Learn more about"
-msgstr "Conozca más sobre"
+msgstr "Última actualización"
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "No hay etiquetas en el Container Registry para esta imagen de contenedor."
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "Una vez que inicies sesión, eres libre de crear y cargar una imagen de contenedor utilizando los comandos comunes %{build} y %{push}"
+msgid "ContainerRegistry|Quick Start"
+msgstr "Inicio rápido"
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] "Eliminar imagen"
+msgstr[1] "Eliminar imágenes"
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr "Eliminar las imágenes y las etiquetas"
msgid "ContainerRegistry|Remove repository"
msgstr "Borrar repositorio"
-msgid "ContainerRegistry|Remove tag"
-msgstr "Borrar etiqueta"
+msgid "ContainerRegistry|Remove selected images"
+msgstr "Eliminar las imágenes seleccionadas"
msgid "ContainerRegistry|Size"
msgstr "Tamaño"
@@ -3537,14 +4138,29 @@ msgstr "Etiqueta"
msgid "ContainerRegistry|Tag ID"
msgstr "Etiqueta ID"
-msgid "ContainerRegistry|Use different image names"
-msgstr "Utilizar nombres de imagen diferentes"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr "No hay imágenes de contenedores almacenadas para este proyecto"
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "Estamos teniendo problemas para conectar con Docker, lo que podría deberse a una incidencia con la ruta o el nombre de su proyecto. %{docLinkStart}Más Información%{docLinkEnd}"
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "Con el registro de contenedores, cada proyecto puede tener su propio espacio para almacenar sus imágenes de Docker. %{docLinkStart}Más Información%{docLinkEnd}"
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "Con el registro de contenedores de Docker integrado en GitLab, cada proyecto puede tener su propio espacio para almacenar sus imágenes de contenedores. %{docLinkStart}Más Información%{docLinkEnd}"
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "Con el registro de contenedores de Docker integrado en GitLab, cada proyecto puede tener su propio espacio para almacenar sus imágenes de Docker."
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr "Está a punto de eliminar <b>%{count}</b> imágenes. Al hacer esto, eliminará las imágenes y todas las etiquetas que apunten a ellas."
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "También puede utilizar un %{deploy_token} para acceder en modo de solo lectura al registro de imágenes."
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr "Está a punto de eliminar la imagen <b>%{title}</b>. Al hacer esto se eliminará la imagen y todas las etiquetas que apuntan a esta imagen."
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr "Está a punto de eliminar el repositorio <b>%{title}</b>. Una vez que confirme esta acción, el repositorio será eliminado de forma permanente."
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr "Puede añadir una imagen a este registro utilizando los siguientes comandos:"
msgid "Contains %{count} blobs of images (%{size})"
msgstr "Contiene %{count} archivos de imágenes de tipo blob con un tamaño de (%{size})"
@@ -3595,7 +4211,7 @@ msgid "ContributorsPage|Please wait a moment, this page will automatically refre
msgstr "Espere un momento; esta página se actualizará automáticamente cuando esté lista."
msgid "Control emails linked to your account"
-msgstr ""
+msgstr "Controle los correos electrónicos vinculados a su cuenta"
msgid "Control the display of third party offers."
msgstr "Controlar la visualización de las ofertas de terceros."
@@ -3606,15 +4222,24 @@ msgstr "Controla la concurrencia máxima para el backfill del repositorio para e
msgid "ConvDev Index"
msgstr "Ãndice ConvDev"
+msgid "Cookie domain"
+msgstr "Dominio de la cookie"
+
msgid "Copied"
msgstr "Copiado"
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr "Etiquetas e hitos copiados desde %{source_issuable_reference}."
+
msgid "Copy %{http_label} clone URL"
msgstr "Copiar la URL %{http_label} de clonado"
msgid "Copy %{protocol} clone URL"
msgstr "Copiar la URL de clonado del protocolo %{protocol}"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr "Copiar %{proxy_url} al portapapeles"
+
msgid "Copy ID to clipboard"
msgstr "Copiar el ID a portapapeles"
@@ -3651,6 +4276,9 @@ msgstr "Copiar las etiquetas y los hitos desde otras incidencias ó merge reques
msgid "Copy link"
msgstr "Copiar enlace"
+msgid "Copy personal access token to clipboard"
+msgstr "Copiar el token de acceso personal al portapapeles"
+
msgid "Copy reference to clipboard"
msgstr "Copiar la referencia al portapapeles"
@@ -3666,6 +4294,12 @@ msgstr "Copiar al portapapeles"
msgid "Copy token to clipboard"
msgstr "Copiar token al portapapeles"
+msgid "Could not add admins as members"
+msgstr "No se puede agregar administradores como miembros"
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr "No se puede agregar la URL de Prometheus a la lista de URLs permitida"
+
msgid "Could not authorize chat nickname. Try again!"
msgstr "No se puede autorizar el nick del chat. Por favor, inténtelo de nuevo"
@@ -3676,32 +4310,44 @@ msgid "Could not connect to FogBugz, check your URL"
msgstr "No se puede conectar a FogBugz, por favor, compruebe su URL"
msgid "Could not connect to Web IDE file mirror service."
-msgstr ""
+msgstr "No se puede conectar con el servicio de duplicación de archivos del web IDE."
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr "No es posible crear la Wiki del repositorio en este momento. Por favor, inténtelo de nuevo más tarde."
+msgid "Could not create group"
+msgstr "Se ha producido un error al crear el grupo"
+
+msgid "Could not create project"
+msgstr "Se ha producido un error al crear el proyecto"
+
msgid "Could not delete chat nickname %{chat_name}."
msgstr "No es posible eliminar el apodo del chate %{chat_name}."
msgid "Could not remove the trigger."
msgstr "No es posible eliminar el disparador."
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "No es posible recuperar el estado del pipeline. Para obtener información, sobre los pasos a seguir para la solución de problemas, lea la documentación %{linkStart}.%{linkEnd}"
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr "No se puede revocar el token de suplantación %{token_name}."
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr "No se pudo revocar el token de acceso personal %{personal_access_token_name}."
+msgid "Could not save project ID"
+msgstr "Se ha producido un error al guardar el ID del proyecto"
+
+msgid "Could not save prometheus manual configuration"
+msgstr "Se ha producido un error al guardar la configuración manual de Prometheus"
+
msgid "Coverage"
msgstr "Cobertura"
msgid "Create"
msgstr "Crear"
+msgid "Create %{type} token"
+msgstr "Crear un token %{type}"
+
msgid "Create New Directory"
msgstr "Crear Nuevo Directorio"
@@ -3714,8 +4360,8 @@ msgstr "Cree primero una cuenta de GitLab y luego conéctela a su cuenta %{label
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr "Cree un proxy local para almacenar las imágenes usadas frecuentemente con anterioridad. %{link_start}Obtenga más%{link_end} información sobre los proxies de dependencias."
-msgid "Create a merge request."
-msgstr "Crear un merge request."
+msgid "Create a merge request"
+msgstr "Crear un merge request"
msgid "Create a new branch"
msgstr "Crear un nuevo 'branch'"
@@ -3735,12 +4381,24 @@ msgstr "Crear un token de acceso personal en tu cuenta para actualizar o enviar
msgid "Create an issue. Issues are created for each alert triggered."
msgstr "Crear una incidencia. Se crearán incidencias para cada alerta activada."
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr "Cree y proporcione su %{link_start}token de acceso personal %{link_end}de GitHub. Necesitará seleccionar el alcance del <code>repositorio</code>, para que podamos mostrar una lista de sus repositorios públicos y privados que estén disponibles para importar."
+
+msgid "Create board"
+msgstr "Crear tablero"
+
msgid "Create branch"
msgstr "Crear rama"
msgid "Create commit"
msgstr "Crear commit"
+msgid "Create confidential merge request"
+msgstr "Crear un merge request confidencial"
+
+msgid "Create confidential merge request and branch"
+msgstr "Crear un merge request y una rama confidencial"
+
msgid "Create directory"
msgstr "Crear directorio"
@@ -3771,6 +4429,9 @@ msgstr "Crear un merge request y un branch"
msgid "Create milestone"
msgstr "Crear hito"
+msgid "Create new board"
+msgstr "Crear nuevo tablero"
+
msgid "Create new branch"
msgstr "Crear una nueva rama"
@@ -3789,6 +4450,9 @@ msgstr "Crear nueva etiqueta"
msgid "Create new..."
msgstr "Crear nuevo..."
+msgid "Create project"
+msgstr "Crear proyecto"
+
msgid "Create project label"
msgstr "Crear etiqueta de proyecto"
@@ -3813,6 +4477,12 @@ msgstr "Creado"
msgid "Created At"
msgstr "Creado en"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr "Creada una rama y un merge request para resolver esta incidencia."
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr "Creada una rama '%{branch_name}' y un merge request para resolver esta incidencia."
+
msgid "Created by me"
msgstr "Creado por mí"
@@ -3834,18 +4504,30 @@ msgstr "Creado en"
msgid "Created on:"
msgstr "Creado sobre:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
-msgstr "Crea una rama %{branch_name} y un merge request para resolver esta incidencia"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr "Creada una rama y un merge request para resolver esta incidencia."
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr "Crea una rama '%{branch_name}' y un merge request para resolver esta incidencia."
msgid "Creating epic"
msgstr "Creando épica"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr "La creación de los gráficos utiliza los datos del servidor Prometheus. Si esta proceso tarda mucho tiempo, asegúrese de que los datos estén disponibles."
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Zona horaria del Cron"
msgid "Cron syntax"
msgstr "Sintaxis de Cron"
+msgid "Cross-project dependencies"
+msgstr "Dependencias entre proyectos"
+
msgid "Current Branch"
msgstr "Rama actual"
@@ -3882,6 +4564,45 @@ msgstr "Plantillas de proyectos personalizadas"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr "No se han configurado plantillas de proyecto personalizadas para grupos de los que es miembro. Las plantillas se habilitan desde la página de configuración de un grupo. Póngase en contacto con el propietario o el encargado de su grupo para configurar las plantillas de proyecto personalizadas."
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr "Añadir una etapa"
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "Personalizar colores"
@@ -3891,18 +4612,51 @@ msgstr "Personalice cómo las direcciones de correo electrónico y los nombres d
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "Personalice cómo las direcciones de correo electrónico y los nombres de usuario de FogBugz se importan en GitLab. En el siguiente paso, podrá seleccionar los proyectos que desea importar."
+msgid "Customize icon"
+msgstr "Personalizar icono"
+
msgid "Customize language and region related settings."
msgstr "Personalice los ajustes relacionados con el idioma y la región."
+msgid "Customize name"
+msgstr "Personalizar nombre"
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "Personalice la configuración de su pipeline, vea el estado de su pipeline y el informe de cobertura."
msgid "Cycle Analytics"
msgstr "Cycle Analytics"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr "Las estadísticas cíclicas pueden ayudarle a determinar la velocidad de su equipo"
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "Cycle Analytics proporciona una visión general del tiempo que se tarda en pasar una idea a producción, en su proyecto."
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr "Incidencia creada"
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr "Incidencia mencionada por primera vez en un commit"
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Código"
@@ -3924,6 +4678,31 @@ msgstr "Puesta en escena"
msgid "CycleAnalyticsStage|Test"
msgstr "Pruebas"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] "%{projectName}"
+msgstr[1] "%d proyectos seleccionados"
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] "%{stageName}"
+msgstr[1] "%d etapas seleccionadas"
+
+msgid "CycleAnalytics|All stages"
+msgstr "Todas las etapas"
+
+msgid "CycleAnalytics|Stages"
+msgstr "Etapas"
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr "DNS"
@@ -3934,10 +4713,10 @@ msgid "DashboardProjects|All"
msgstr "Todos"
msgid "DashboardProjects|Personal"
-msgstr "Personales"
+msgstr "Personal"
msgid "DashboardProjects|Trending"
-msgstr "Tendencias"
+msgstr "Tendencia"
msgid "Dashboards"
msgstr "Paneles de control"
@@ -3948,8 +4727,8 @@ msgstr "%{firstProject} y %{secondProject}"
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr "%{firstProject}, %{rest}, y %{secondProject}"
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
-msgstr "No se puede agregar %{invalidProjects}. Este panel de control está disponible para proyectos públicos y proyectos privados en grupos con un plan Gold."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
+msgstr ""
msgid "Data is still calculating..."
msgstr "Los datos aún se están calculando..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr "Mi"
+msgid "Days"
+msgstr "Días"
+
msgid "Debug"
msgstr "Depurar"
@@ -3990,12 +4772,21 @@ msgstr "Branch por defecto"
msgid "Default artifacts expiration"
msgstr "Vencimiento predeterminado para los artefactos"
+msgid "Default branch"
+msgstr "Rama por defecto"
+
+msgid "Default branch and protected branches"
+msgstr "Ramas por defecto y ramas protegidas"
+
msgid "Default classification label"
msgstr "Etiqueta de clasificación por defecto"
msgid "Default description template for issues"
msgstr "Plantilla de descripción predeterminada para las incidencias"
+msgid "Default description template for merge requests"
+msgstr "Descripción por defecto de la plantilla para los merge requests"
+
msgid "Default first day of the week"
msgstr "Primer día de la semana por defecto"
@@ -4038,12 +4829,21 @@ msgstr "retrasado"
msgid "Delete"
msgstr "Eliminar"
+msgid "Delete Comment"
+msgstr "Eliminar el comentario"
+
msgid "Delete Package"
msgstr "Eliminar paquete"
msgid "Delete Snippet"
msgstr "Eliminar fragmento de código"
+msgid "Delete artifacts"
+msgstr "Eliminar artefactos"
+
+msgid "Delete board"
+msgstr "Eliminar el tablero"
+
msgid "Delete comment"
msgstr "Eliminar comentario"
@@ -4080,6 +4880,9 @@ msgstr "Eliminado"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr "¡Eliminado el nick del chat %{chat_name}!"
+msgid "Deleted in this version"
+msgstr "Eliminado en esta versión"
+
msgid "Deleting the license failed."
msgstr "Se ha producido un error al eliminar la licencia."
@@ -4098,6 +4901,22 @@ msgstr "Denegar"
msgid "Dependencies"
msgstr "Dependencias"
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] "%d vulnerabilidad adicional no mostrada"
+msgstr[1] "%d vulnerabilidades adicionales no mostradas"
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] "%d vulnerabilidad"
+msgstr[1] "%d vulnerabilidades"
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr "%{remainingLicensesCount} más"
+
+msgid "Dependencies|All"
+msgstr "Todas"
+
msgid "Dependencies|Component"
msgstr "Componente"
@@ -4110,12 +4929,21 @@ msgstr "Exportar como JSON"
msgid "Dependencies|Job failed to generate the dependency list"
msgstr "El trabajo ha fallado al generar la lista de dependencias"
+msgid "Dependencies|License"
+msgstr "Licencia"
+
msgid "Dependencies|Location"
msgstr "Ubicación"
msgid "Dependencies|Packager"
msgstr "Empaquetador"
+msgid "Dependencies|Safe"
+msgstr "Seguras"
+
+msgid "Dependencies|Status"
+msgstr "Estado"
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr "Ficheros no admitidos detectados"
msgid "Dependencies|Version"
msgstr "Versión"
+msgid "Dependencies|Vulnerable components"
+msgstr "Componentes vulnerables"
+
msgid "Dependency List"
msgstr "Lista de dependencias"
@@ -4143,6 +4974,16 @@ msgstr "La funcionalidad del proxy de dependencias está limitada, por ahora, ú
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr "Cambiar el proxy de dependencias"
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "Despliegue"
@@ -4154,6 +4995,15 @@ msgstr "Claves de despliegue"
msgid "Deploy key was successfully updated."
msgstr "La clave de despliegue se actualizó correctamente."
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr "Desplegar en..."
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} otros"
@@ -4226,6 +5076,9 @@ msgstr "Crear un token de despliegue"
msgid "DeployTokens|Created"
msgstr "Creado"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr "El formato por defecto es \"GitLab+token-de-despliegue-{n}\". Por favor, introduzca un nombre de usuario personalizado si desea cambiarlo."
+
msgid "DeployTokens|Deploy Tokens"
msgstr "Tokens de despliegue"
@@ -4277,6 +5130,9 @@ msgstr "Se ha creado su nuevo token de despliegue de proyecto."
msgid "Deployed"
msgstr "Desplegado"
+msgid "Deployed %{deployedSince}"
+msgstr "Desplegado %{deployedSince}"
+
msgid "Deployed to"
msgstr "Desplegado en"
@@ -4301,9 +5157,30 @@ msgstr "Las plantillas de descripción le permiten definir plantillas relativas
msgid "Description:"
msgstr "Descripción:"
+msgid "Descriptive label"
+msgstr "Etiqueta descriptiva"
+
+msgid "Deselect all"
+msgstr "Deseleccionar todo"
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr "%{current_design} de %{designs_count}"
+msgid "DesignManagement|Add designs"
+msgstr "Agregar diseños"
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr "Agregar un diseño con el mismo nombre de archivo reemplaza el archivo en una nueva versión."
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr "Se ha producido un error mientras se cargaban los diseños. Por favor, inténtelo de nuevo."
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr "Se ha producido un error al crear una nueva discusión. Por favor, inténtelo de nuevo."
+
msgid "DesignManagement|Could not find design, please try again."
msgstr "Se ha producido un error al buscar el diseño, por favor, inténtelo de nuevo."
@@ -4319,6 +5196,12 @@ msgstr "Ir al siguiente diseño"
msgid "DesignManagement|Go to previous design"
msgstr "Ir al diseño anterior"
+msgid "DesignManagement|Requested design version does not exist"
+msgstr "La versión del diseño solicitada no existe"
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr "La versión del diseño solicitada no existe. Mostrando la última versión en su lugar"
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr "El número máximo de diseños permitidos que se pueden cargar es %{upload_limit}. Por favor, inténtalo de nuevo."
@@ -4328,9 +5211,6 @@ msgstr "Un lugar para tus diseños"
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr "Cargue y vea los últimos diseños para esta incidencia. Consistente y fácil de encontrar, para que todos estén al día."
-msgid "DesignManagement|Upload designs"
-msgstr "Cargar diseños"
-
msgid "Designs"
msgstr "Diseños"
@@ -4352,9 +5232,15 @@ msgstr "Límites de contenido del diff"
msgid "Diff limits"
msgstr "Límites del diff"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr "(base)"
+
msgid "Diffs|No file name available"
msgstr "Sin nombre de archivo disponible"
+msgid "Diffs|Show all lines"
+msgstr "Mostrar todas las líneas"
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "Se ha producido un error mientras se obtienen las líneas del diff."
@@ -4367,6 +5253,9 @@ msgstr "Nombre del directorio"
msgid "Disable"
msgstr "Deshabilitar"
+msgid "Disable email notifications"
+msgstr "Deshabilitar las notificaciones por correo electrónico"
+
msgid "Disable for this project"
msgstr "Deshabilitar para este proyecto"
@@ -4424,6 +5313,12 @@ msgstr "Discuta una sugerencia específica o una pregunta"
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr "Discuta una propuesta específica o una pregunta que necesita ser resuelta"
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr "Discusión"
@@ -4454,6 +5349,9 @@ msgstr "Descartado en el pipeline %{pipelineLink}"
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr "Descartado en el pipeline %{pipelineLink} en %{projectLink}"
+msgid "Display name"
+msgstr "Nombre para mostrar"
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "¿Desea personalizar cómo se importan en GitLab las direcciones de correo electrónico y los nombres de usuario de Google Code?"
@@ -4463,6 +5361,9 @@ msgstr "Dockerfile"
msgid "Documentation for popular identity providers"
msgstr "Documentación para los proveedores de identidad más populares"
+msgid "Doing"
+msgstr "En proceso"
+
msgid "Domain"
msgstr "Dominio"
@@ -4470,7 +5371,7 @@ msgid "Domain verification is an essential security measure for public GitLab si
msgstr "La verificación del dominio es una medida de seguridad esencial para los sitios públicos de GitLab. Los usuarios deben demostrar que administran o que son los propietarios de un dominio antes de poder habilitarlo"
msgid "Don't paste the private part of the GPG key. Paste the public part which begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
-msgstr ""
+msgstr "No pegue la parte privada de la clave GPG. Pegue la parte pública que empieza por: '----- BEGIN PGP PUBLIC KEY BLOCK -----'."
msgid "Don't show again"
msgstr "No mostrar de nuevo"
@@ -4484,9 +5385,15 @@ msgstr "Hecho"
msgid "Download"
msgstr "Descargar"
+msgid "Download CSV"
+msgstr "Descargar CSV"
+
msgid "Download artifacts"
msgstr "Descargar artefactos"
+msgid "Download as"
+msgstr "Descargar como"
+
msgid "Download asset"
msgstr "Descargar activo"
@@ -4496,6 +5403,9 @@ msgstr "Descargar codigos"
msgid "Download export"
msgstr "Descargar exportación"
+msgid "Download image"
+msgstr "Descargar imagen"
+
msgid "Download license"
msgstr "Descargar licencia"
@@ -4515,7 +5425,7 @@ msgid "DownloadSource|Download"
msgstr "Descargar"
msgid "Downstream"
-msgstr ""
+msgstr "Downstream"
msgid "Downvotes"
msgstr "Voto negativo"
@@ -4532,9 +5442,15 @@ msgstr "Cada ejecutor puede estar en uno de los siguientes estados:"
msgid "Edit"
msgstr "Editar"
+msgid "Edit %{issuable}"
+msgstr "Editar %{issuable}"
+
msgid "Edit %{name}"
msgstr "Editar %{name}"
+msgid "Edit Comment"
+msgstr "Editar comentario"
+
msgid "Edit Deploy Key"
msgstr "Editar la clave de despliegue"
@@ -4556,12 +5472,21 @@ msgstr "Editar fragmento de código"
msgid "Edit application"
msgstr "Editar aplicación"
+msgid "Edit board"
+msgstr "Editar tablero"
+
msgid "Edit comment"
msgstr "Editar comentario"
+msgid "Edit description"
+msgstr "Editar descripción"
+
msgid "Edit environment"
msgstr "Editar el entorno"
+msgid "Edit epic description"
+msgstr "Editar la descripción de la tarea épica"
+
msgid "Edit file"
msgstr "Editar archivo"
@@ -4580,6 +5505,18 @@ msgstr "Editar incidencias"
msgid "Edit public deploy key"
msgstr "Editar clave pública de despliegue"
+msgid "Edit stage"
+msgstr "Editar etapa"
+
+msgid "Edit wiki page"
+msgstr "Editar página wiki"
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr "Edite su comentario más reciente en un hilo (desde un cuadro de texto vacío)"
+
+msgid "Editing"
+msgstr "Editando"
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4604,6 +5541,9 @@ msgstr "Correo electrónico"
msgid "Email address"
msgstr "Correo electrónico"
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr "El dominio de correo electrónico no es editable en los subgrupos. El valor se hereda desde el grupo de nivel superior."
+
msgid "Email patch"
msgstr "Enviar parche por correo electrónico"
@@ -4688,11 +5628,14 @@ msgstr "Habilitar la recolección de datos Pseudonymizer"
msgid "Enable SAML authentication for this group"
msgstr "Habilitar autenticación SAML para este grupo"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "Habilite Sentry para el obtener el informe de errores y el registro."
+msgid "Enable access to Grafana"
+msgstr "Habilitar el acceso a Grafana"
msgid "Enable access to the Performance Bar for a given group."
-msgstr ""
+msgstr "Habilitar el acceso a la barra de rendimiento para un grupos determinado."
+
+msgid "Enable and configure Grafana."
+msgstr "Habilitar y configurar Grafana."
msgid "Enable and configure InfluxDB metrics."
msgstr "Habilitar y configurar las métricas de InfluxDB."
@@ -4706,6 +5649,9 @@ msgstr "Habilitar control de clasificación utilizando un servicio externo"
msgid "Enable error tracking"
msgstr "Habilitar seguimiento de errores"
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "Habilitar para este proyecto"
@@ -4724,12 +5670,18 @@ msgstr "Habilitar o deshabilitar la recolección de datos con Pseudonymizer."
msgid "Enable or disable version check and usage ping."
msgstr "Habilite o deshabilite la comprobación de versión y el ping de uso."
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "Habilite reCAPTCHA o Akismet y establezca límites IP."
+msgid "Enable proxy"
+msgstr "Habilitar el proxy"
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr "Habilite reCAPTCHA o Akismet y establezca límites por IP. Para reCAPTCHA, actualmente sólo soportamos %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgid "Enable shared Runners"
msgstr "Habilitar ejecutores compartidos"
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr "Habilitar la autenticación de dos factores"
@@ -4763,18 +5715,36 @@ msgstr "Finaliza a las (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr "Reforzar la protección de ataques a DNS"
-msgid "Enter IP address range"
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
msgstr ""
+msgid "Enter IP address range"
+msgstr "Introduzca un rango de direcciones IP"
+
+msgid "Enter a number"
+msgstr "Introduzca un número"
+
msgid "Enter at least three characters to search"
msgstr "Introduzca al menos tres caracteres para buscar"
+msgid "Enter board name"
+msgstr "Introduzca el nombre del tablero"
+
+msgid "Enter domain"
+msgstr "Introduzca un dominio"
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "Introduzca a continuación, la URL de su servidor de Bitbucket y su token de acceso personal"
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr "Introduzca la URL de su servidor Phabricator y su token de acceso"
+msgid "Enter merge request URLs"
+msgstr "Introduzca las URL de la solicitud de fusión"
+
msgid "Enter the issue description"
msgstr "Introduzca la descripción de la incidencia"
@@ -4787,11 +5757,20 @@ msgstr "Introduzca la descripción del merge request"
msgid "Enter the merge request title"
msgstr "Introduzca el título del merge request"
+msgid "Enter your password to approve"
+msgstr "Introduzca su contraseña para aprobar"
+
+msgid "Enter zen mode"
+msgstr "Acceder al modo zen"
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr "Está viendo el último entorno actualizado"
+msgid "Environment"
+msgstr "Entorno"
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
-msgstr ""
+msgstr "Las variables de entorno se aplican a los entornos a través de los ejecutores. Sólo se pueden proteger exponiéndolas solo en ramas o etiquetas protegidas. Además, se pueden enmascarar para que estén ocultas en los logs de ejecución de los trabajos, aunque para ello deben coincidir con ciertos requisitos de expresiones regulares. Puede utilizar variables de entorno para almacenar contraseñas, claves secretas o lo que desee."
msgid "Environment variables are configured by your administrator to be %{link_start}protected%{link_end} by default"
msgstr "Las variables de entorno están configuradas por el administrador para estar %{link_start}protegidas%{link_end} por defecto"
@@ -4809,7 +5788,7 @@ msgid "Environments allow you to track deployments of your application %{link_to
msgstr "Los Entornos le permiten hacer un seguimiento de los despliegues de su aplicación %{link_to_read_more}."
msgid "EnvironmentsDashboard|Add a project to the dashboard"
-msgstr "Añadir un proyecto al panel"
+msgstr "Añadir un proyecto al panel de control"
msgid "EnvironmentsDashboard|Add projects"
msgstr "Añadir proyectos"
@@ -4958,32 +5937,38 @@ msgstr "Épica"
msgid "Epics"
msgstr "Épicas"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr "Tareas épicas (solo para las licencias Ultimate y Gold de Gitlab.com)"
+
msgid "Epics Roadmap"
msgstr "Hoja de ruta de tareas épicas"
+msgid "Epics and Issues"
+msgstr "Tareas épicas e incidencias"
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Las tareas épicas le permiten administrar sus proyectos de manera más eficiente y con menos esfuerzo"
msgid "Epics|%{epicsCount} epics and %{issuesCount} issues"
-msgstr ""
+msgstr "%{epicsCount} tareas épicas y %{issuesCount} incidencias"
msgid "Epics|Add an epic"
-msgstr ""
+msgstr "Añadir una tarea épica"
msgid "Epics|Add an existing epic as a child epic."
-msgstr ""
+msgstr "Añadir una tarea épica existente como sub tarea épica."
msgid "Epics|An error occurred while saving the %{epicDateType} date"
msgstr "Se ha producido un error mientras se guardaba la fecha tipo %{epicDateType}"
msgid "Epics|Are you sure you want to remove %{bStart}%{targetIssueTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}?"
-msgstr ""
+msgstr "¿Está seguro de que desea eliminar %{bStart}%{targetIssueTitle}%{bEnd} de %{bStart}%{parentEpicTitle}%{bEnd}?"
msgid "Epics|Create an epic within this group and add it as a child epic."
-msgstr ""
+msgstr "Cree una tarea épica dentro de este grupo y agréguela como una tarea épica hija."
msgid "Epics|Create new epic"
-msgstr ""
+msgstr "Crear nueva épica"
msgid "Epics|How can I solve this?"
msgstr "¿Cómo puedo resolver esto?"
@@ -4992,22 +5977,37 @@ msgid "Epics|More information"
msgstr "Más información"
msgid "Epics|Remove epic"
-msgstr ""
+msgstr "Eliminar tarea épica"
msgid "Epics|Remove issue"
+msgstr "Eliminar la incidencia"
+
+msgid "Epics|Show more"
+msgstr "Mostrar más"
+
+msgid "Epics|Something went wrong while assigning issue to epic."
msgstr ""
msgid "Epics|Something went wrong while creating child epics."
-msgstr ""
+msgstr "Se ha producido un error al crear las tareas épicas hijas."
msgid "Epics|Something went wrong while fetching child epics."
+msgstr "Se ha producido un error al obtener las tareas épicas hijas."
+
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr "Se ha producido un error al ordenar el elemento."
+
+msgid "Epics|Something went wrong while removing issue from epic."
msgstr ""
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "Estas fechas afectan en como aparecen sus épicas en la hoja de ruta. Las fechas de los hitos provienen de los hitos asignados a las incidencias en su épica. También puede establecer fechas fijas o eliminarlas por completo."
msgid "Epics|This will also remove any descendents of %{bStart}%{targetEpicTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}. Are you sure?"
-msgstr ""
+msgstr "Al hacer esto también eliminará cualquier descendiente de %{bStart}%{targetEpicTitle}%{bEnd} desde %{bStart}%{parentEpicTitle}%{bEnd}. ¿Está seguro de que desea continuar?"
msgid "Epics|To schedule your epic's %{epicDateType} date based on milestones, assign a milestone with a %{epicDateType} date to any issue in the epic."
msgstr "Para programar la fecha %{epicDateType} de su épica basada en hitos, asigne un hito con una fecha %{epicDateType} a cualquier incidencia de la épica."
@@ -5021,9 +6021,6 @@ msgstr "Inicio"
msgid "Error"
msgstr "Error"
-msgid "Error Reporting and Logging"
-msgstr "Informe y registro de errores"
-
msgid "Error Tracking"
msgstr "Control de errores"
@@ -5039,6 +6036,12 @@ msgstr "Se ha producido un error al eliminar %{issuableType}"
msgid "Error fetching contributors data."
msgstr "Se ha producido un error al obtener los datos de los colaboradores."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "Se ha producido un error en la recuperación de las etiquetas."
@@ -5052,7 +6055,7 @@ msgid "Error fetching refs"
msgstr "Se ha producido un error al obtener los refs"
msgid "Error fetching the dependency list. Please check your network connection and try again."
-msgstr ""
+msgstr "Se ha producido un error al obtener la lista de dependencias. Por favor revise su conexión a internet y vuelva a intentarlo."
msgid "Error fetching usage ping data."
msgstr "Se ha producido un error al obtener los datos de uso de ping."
@@ -5064,7 +6067,7 @@ msgid "Error loading branches."
msgstr "Error al cargar ramas."
msgid "Error loading burndown chart data"
-msgstr ""
+msgstr "Se ha producido un error al cargar los datos del gráfico de burndown"
msgid "Error loading file viewer."
msgstr "Se ha producido un error al cargar el visor de archivos."
@@ -5096,9 +6099,15 @@ msgstr "Se ha producido un error al cargar el visor"
msgid "Error occurred when fetching sidebar data"
msgstr "Se ha producido un error al obtener los datos de la barra lateral"
+msgid "Error occurred when saving assignees"
+msgstr "Se ha producido un error mientras se guardaban los asignados"
+
msgid "Error occurred when toggling the notification subscription"
msgstr "Se ha producido un error al activar/desactivar la suscripción de las notificaciones"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr "Se ha producido un error. No se ha bloqueado el usuario"
@@ -5117,14 +6126,17 @@ msgstr "Se ha producido un error al renderizar la vista previa de markdown"
msgid "Error saving label update."
msgstr "Se ha producido un error al guardar la actualización de la etiqueta."
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr "Se ha producido un error al actualizar %{issuableType}"
-msgid "Error updating status for all todos."
-msgstr "Se ha producido un error al actualizar el estado de las tareas pendientes."
+msgid "Error updating status for all to-do items."
+msgstr "Se ha producido un error al actualizar el estado de todas las tareas pendientes."
-msgid "Error updating todo status."
-msgstr "Se ha producido un error al actualizar el estado de las tareas pendientes."
+msgid "Error updating status of to-do item."
+msgstr "Se ha producido un error al actualizar el estado de la tarea pendiente."
msgid "Error uploading file"
msgstr "Se ha producido un error al enviar el fichero"
@@ -5216,9 +6228,15 @@ msgstr "Todas las semanas (domingos a las 4:00 am)"
msgid "Everyone"
msgstr "Todo el mundo"
+msgid "Everyone With Access"
+msgstr "Todos los usuarios con acceso"
+
msgid "Everyone can contribute"
msgstr "Todo el mundo puede colaborar"
+msgid "Everything on your to-do list is marked as done."
+msgstr "Todo lo que está en su lista de tareas se ha marcado como hecho."
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr "Todo lo que necesita para crear un sitio de GitLab Pages con GitBook."
@@ -5235,11 +6253,14 @@ msgid "Everything you need to create a GitLab Pages site using plain HTML."
msgstr "Todo lo que necesita para crear un sitio de GitLab Pages utilizando HTML plano."
msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple queries combined into a formula."
-msgstr ""
+msgstr "Ejemplo: Uso = consulta simple. (Solicitado)/(Capacidad) = Varias consultas combinadas en una sola fórmula."
msgid "Except policy:"
msgstr "Extracto de la política:"
+msgid "Existing"
+msgstr "Existente"
+
msgid "Existing members and groups"
msgstr "Miembros y grupos existentes"
@@ -5252,9 +6273,18 @@ msgstr "Expandir todo"
msgid "Expand approvers"
msgstr "Expandir aprobadores"
+msgid "Expand down"
+msgstr "Expandir hacia abajo"
+
+msgid "Expand dropdown"
+msgstr "Expandir el menú desplegable"
+
msgid "Expand sidebar"
msgstr "Expandir barra lateral"
+msgid "Expand up"
+msgstr "Expandir todo"
+
msgid "Expiration date"
msgstr "Fecha de vencimiento"
@@ -5264,6 +6294,12 @@ msgstr "Caducó"
msgid "Expired %{expiredOn}"
msgstr "Caducado el %{expiredOn}"
+msgid "Expires"
+msgstr "Caduca"
+
+msgid "Expires at"
+msgstr "Caduca a las"
+
msgid "Expires in %{expires_at}"
msgstr "Caduca en %{expires_at}"
@@ -5318,6 +6354,12 @@ msgstr "Se ha denegado la autorización externa para el acceso a este proyecto"
msgid "External authorization request timeout"
msgstr "Tiempo de espera agotado para la solicitud de acceso"
+msgid "External storage URL"
+msgstr "URL de almacenamiento externo"
+
+msgid "External storage authentication token"
+msgstr "Token de autenticación de almacenamiento externo"
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "Etiqueta de clasificación"
@@ -5357,6 +6399,15 @@ msgstr "Trabajos fallidos"
msgid "Failed create wiki"
msgstr "Se ha producido un error al crear el wiki"
+msgid "Failed to add a Zoom meeting"
+msgstr "Se ha producido un error al agregar una reunión de Zoom"
+
+msgid "Failed to apply commands."
+msgstr "Se ha producido un error al aplicar los comandos."
+
+msgid "Failed to assign a user because no user was found."
+msgstr "Se ha producido un error al asignar un usuario debido no se ha encontrado el usuario."
+
msgid "Failed to change the owner"
msgstr "Error al cambiar el propietario"
@@ -5378,6 +6429,9 @@ msgstr "Se ha producido un error al crear el repositorio a través de gitlab-she
msgid "Failed to create resources"
msgstr "Se ha producido un error al crear los recursos"
+msgid "Failed to delete board. Please try again."
+msgstr "Se ha producido un error al eliminar el panel de control. Por favor, inténtelo de nuevo."
+
msgid "Failed to deploy to"
msgstr "Se ha producido un error al desplegar a"
@@ -5399,6 +6453,18 @@ msgstr "Se ha producido un error al cargar grupos y usuarios."
msgid "Failed to load related branches"
msgstr "Se ha producido un error al cargar ramas relacionadas"
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr "Se ha producido un error al marcar esta incidencia como duplicada ya que se hace referencia a una incidencia no encontrada."
+
+msgid "Failed to move this issue because label was not found."
+msgstr "Se ha producido un error al mover esta incidencia debido a que no se ha encontrado la etiqueta."
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr "Se ha producido un error al mover esta incidencia debido a que solo se puede proporcionar una única etiqueta."
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr "Se ha producido un error al mover esta incidencia debido a que el proyecto de destino no existe."
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr "Se ha producido un erro al promocionar la etiqueta debido a un error interno. Por favor, póngase en contacto con los administradores."
@@ -5408,6 +6474,9 @@ msgstr "Se ha producido un error al proteger la rama"
msgid "Failed to protect the environment"
msgstr "Se ha producido un error al proteger el entorno"
+msgid "Failed to remove a Zoom meeting"
+msgstr "Se ha producido un error al eliminar una reunión de Zoom"
+
msgid "Failed to remove issue from board, please try again."
msgstr "Se ha producido un error al eliminar la incidencia del tablero, por favor, inténtelo de nuevo."
@@ -5441,6 +6510,9 @@ msgstr "Se ha producido un error al guardar las preferencias (%{error_message}).
msgid "Failed to save preferences."
msgstr "Se ha producido un error al guardar las preferencias."
+msgid "Failed to set due date because the date format is invalid."
+msgstr "Se ha producido un error al establecer la fecha de vencimiento debido a que el formato de fecha no es válido."
+
msgid "Failed to signing using smartcard authentication"
msgstr "Se ha producido un error al inciar sesión utilizando la autenticación mediante una tarjeta inteligente"
@@ -5468,9 +6540,12 @@ msgstr "Se ha producido un error al cargar el archivo de mapa de objetos"
msgid "Failure"
msgstr "Error"
-msgid "Fast-forward merge without a merge commit"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
msgstr ""
+msgid "Fast-forward merge without a merge commit"
+msgstr "Fast-forward merge sin hacer merge commit"
+
msgid "Faster as it re-uses the project workspace (falling back to clone if it doesn't exist)"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr "API Url"
msgid "FeatureFlags|Active"
msgstr "Activo"
+msgid "FeatureFlags|Add"
+msgstr "Añadir"
+
+msgid "FeatureFlags|All users"
+msgstr "Todos los usuarios"
+
+msgid "FeatureFlags|Clear all"
+msgstr "Borrar todo"
+
msgid "FeatureFlags|Configure"
msgstr "Configurar"
@@ -5519,6 +6603,9 @@ msgstr "Descripción"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "Editar Feature Flag"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr "Introduzca una lista de IDs de usuario separados por comas"
+
msgid "FeatureFlags|Environment Spec"
msgstr "Especificación del entorno"
@@ -5528,20 +6615,20 @@ msgstr "Especificaciones del entorno"
msgid "FeatureFlags|Feature Flag"
msgstr "Feature Flag"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
-msgstr "Feature Flag se construye creando un conjunto de reglas para definir el estado de los entornos de destino. Se establece una regla por defecto comodín %{codeStart}*%{codeEnd} para %{boldStart}Todos los entornos%{boldEnd}, y a continuación, puede agregar tantas reglas como sea necesario seleccionando las especificaciones. Puede alternar el comportamiento de cada una de sus reglas estableciéndolas cómo %{boldStart}Activas%{boldEnd} o %{boldStart}Inactivas%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr "Feature Flags"
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
-msgstr "Las Feature Flags le permiten configurar su código en diferentes sabores y alternar dinámicamente ciertas funciones."
-
msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr "Se a a eliminar la Feature Flag%{name}. ¿Está seguro de que desea continuar?"
-msgid "FeatureFlags|Get started with Feature Flags"
-msgstr "Acerca de las Feature Flags"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgstr ""
+
+msgid "FeatureFlags|Get started with feature flags"
+msgstr ""
msgid "FeatureFlags|Inactive"
msgstr "Inactivo"
@@ -5550,15 +6637,15 @@ msgid "FeatureFlags|Inactive flag for %{scope}"
msgstr "Desactivar Flag para %{scope}"
msgid "FeatureFlags|Install a %{docs_link_anchored_start}compatible client library%{docs_link_anchored_end} and specify the API URL, application name, and instance ID during the configuration setup. %{docs_link_start}More Information%{docs_link_end}"
-msgstr ""
+msgstr "Instale un %{docs_link_anchored_start}cliente compatible con la biblioteca de%{docs_link_anchored_end} y especifique la URL de la API, el nombre de la aplicación y él ID de la instancia durante el proceso de configuración.%{docs_link_start}Más información%{docs_link_end}"
msgid "FeatureFlags|Instance ID"
msgstr "ID de instancia"
-msgid "FeatureFlags|Loading Feature Flags"
-msgstr "Cargar Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
+msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr "Más información"
msgid "FeatureFlags|Name"
@@ -5570,20 +6657,44 @@ msgstr "Nuevo"
msgid "FeatureFlags|New Feature Flag"
msgstr "Nueva Feature Flag"
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr "Protegido"
+msgid "FeatureFlags|Remove"
+msgstr "Eliminar"
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "Estado"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr "Entornos de destino"
-msgid "FeatureFlags|There are no active Feature Flags"
-msgstr "No hay Feature Flags activas"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
-msgstr "No hay Feature Flags inactivas"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
+msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
msgstr "Se ha producido un error al obtener las Feature Flag."
@@ -5591,6 +6702,9 @@ msgstr "Se ha producido un error al obtener las Feature Flag."
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr "Inténtelo de nuevo en un momento o contacte con su equipo de soporte."
+msgid "FeatureFlags|User IDs"
+msgstr "IDs de usuarios"
+
msgid "Feb"
msgstr "Feb"
@@ -5609,9 +6723,6 @@ msgstr "Se ha producido un error al obtener las licencias. No es posible encontr
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr "Se ha producido un error al obtener las licencias. No está autorizado a realizar esta acción."
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "Ahora puede editar los campos en esta página, puede configurar"
-
msgid "File"
msgid_plural "Files"
msgstr[0] "Archivo"
@@ -5674,6 +6785,9 @@ msgstr "Filtrar resultados por grupo"
msgid "Filter results by project"
msgstr "Filtrar resultados por proyecto"
+msgid "Filter your projects by name"
+msgstr "Filtra sus proyectos por nombre"
+
msgid "Filter..."
msgstr "Filtrar..."
@@ -5716,6 +6830,9 @@ msgstr "Finalizado"
msgid "First day of the week"
msgstr "Primer día de la semana"
+msgid "First name"
+msgstr "Primer nombre"
+
msgid "Fixed date"
msgstr "Fecha fija"
@@ -5779,6 +6896,9 @@ msgstr "Para los proyectos privados, cualquier miembro (visitante o administrado
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr "Para los proyectos públicos, cualquiera puede visualizar los pipelines y acceder los detalles de los trabajos (registros de salida and artefactos)"
+msgid "Forgot your password?"
+msgstr "¿Olvidó su contraseña?"
+
msgid "Fork"
msgstr "Fork"
@@ -5815,12 +6935,18 @@ msgstr "Se han encontrado errores en su archivo %{gitlab_ci_yml}:"
msgid "Found errors in your .gitlab-ci.yml:"
msgstr "Se han encontrado errores en su fichero .gitlab-ci.yml:"
+msgid "Free Trial"
+msgstr "Prueba gratuita"
+
msgid "Free Trial of GitLab.com Gold"
msgstr "Prueba gratuita de GitLab.com Gold"
msgid "Friday"
msgstr "Viernes"
+msgid "From"
+msgstr "Desde"
+
msgid "From %{providerTitle}"
msgstr "De %{providerTitle}"
@@ -5881,6 +7007,9 @@ msgstr "Generar un conjunto predeterminado de etiquetas"
msgid "Generate key"
msgstr "Generar clave"
+msgid "Generate link to chart"
+msgstr "Generar un enlace al gráfico"
+
msgid "Generate new export"
msgstr "Generar nueva exportación"
@@ -5893,6 +7022,9 @@ msgstr "Geo Nodos"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Geo le permite replicar su instancia de Gitlab a otras ubicaciones geográficas."
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr "%{timeAgoStr} (%{pendingEvents} eventos)"
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "El nodo está caído o fallando."
@@ -5956,6 +7088,9 @@ msgstr "Objetos LFS locales"
msgid "GeoNodes|Local attachments"
msgstr "Adjuntos locales"
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr "Artefactos de trabajo locales"
@@ -6064,33 +7199,42 @@ msgstr "Ha configurado los nodos Geo utilizando una conexión HTTP insegura. Le
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} está programado para una nueva descarga forzada"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} está programado para volver a comprobar"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} está programado para volver a sincronizar"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr "Se ha programado %{name} para que se vuelva a comprobar"
+
msgid "Geo|All"
msgstr "Todos"
msgid "Geo|All projects"
msgstr "Todos los proyectos"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "Se ha programado la comprobación de todos los proyectos"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "Se ha programado la sincronización de los proyectos"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr "Se ha programado la verificación de todos los proyectos"
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "Operaciones por lotes"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr "Escoja que grupos desea sincronizar con este nodo secundario."
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr "Controla la concurrencia máxima de LFS/attachment para este nodo secundario"
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr "Controla el número máximo de operaciones de verificación concurrentes para este nodo Geo"
@@ -6115,11 +7259,14 @@ msgstr "Estado de Geo"
msgid "Geo|Groups to synchronize"
msgstr "Grupos a sincronizar"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "Sincronizado"
-msgid "Geo|Internal URL"
-msgstr "URL interna"
+msgid "Geo|Internal URL (optional)"
+msgstr "URL interna (opcional)"
msgid "Geo|Last repository check run"
msgstr "Comprobar último repositorio ejecutado"
@@ -6169,12 +7316,6 @@ msgstr "Proyectos en determinados grupos de almacenamiento"
msgid "Geo|Re-verification interval"
msgstr "Intervalo de verificación"
-msgid "Geo|Recheck"
-msgstr "Volver a comprobar"
-
-msgid "Geo|Recheck all projects"
-msgstr "Volver a comprobar todos los proyectos"
-
msgid "Geo|Redownload"
msgstr "Volver a descargar"
@@ -6193,6 +7334,12 @@ msgstr "Resincronizar todos los proyectos"
msgid "Geo|Retry count"
msgstr "Contador de reintentos"
+msgid "Geo|Reverify"
+msgstr "Volver a comprobar"
+
+msgid "Geo|Reverify all projects"
+msgstr "Volver a comprobar todos los proyectos"
+
msgid "Geo|Select groups to replicate."
msgstr "Seleccionar grupos a replicar."
@@ -6217,8 +7364,8 @@ msgstr "Sincronizado en"
msgid "Geo|Synchronization failed - %{error}"
msgstr "Se ha producido un error durante la sincronización - %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
-msgstr "La URL definida en el nodo primario que los nodos secundarios deben usar para contactarlo. Devuelve `url` si no está establecida"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
+msgstr "La URL definida en el nodo primario que los nodos secundarios deben utilizar para contactarlo. Por defecto apunta a la URL"
msgid "Geo|The database is currently %{db_lag} behind the primary node."
msgstr "La base de datos está %{db_lag} detrás del nodo primario."
@@ -6274,6 +7421,9 @@ msgstr "Obtenga una revisión de instancia gratuita"
msgid "Get started with error tracking"
msgstr "Comenzar con el control de errores"
+msgid "Get started with performance monitoring"
+msgstr "Comenzar con la monitorización de rendimiento"
+
msgid "Getting started with releases"
msgstr "Primeros pasos con las versiones"
@@ -6331,6 +7481,15 @@ msgstr "Usuario de GitLab"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr "GitLab le permite continuar usando su licencia incluso si excede la cantidad puestos que compró. Deberá por pagar estos puestos cuando renueve su licencia."
+msgid "GitLab for Slack"
+msgstr "GitLab para Slack"
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr "GitLab está obteniendo un certificado SSL desde Let's Encrypt para este dominio. Este proceso puede llevar algo de tiempo. Por favor, inténtelo de nuevo más tarde."
+
+msgid "GitLab member or Email address"
+msgstr "Miembro de GitLab o dirección de correo electrónico"
+
msgid "GitLab metadata URL"
msgstr "URL de metadatos de GitLab"
@@ -6349,9 +7508,6 @@ msgstr "Gitlab ejecutará un trabajo como tarea de fondo que producirá un archi
msgid "GitLab.com import"
msgstr "Importar desde GitLab.com"
-msgid "GitLab’s issue tracker"
-msgstr "El gestor de incidencias de GitLab"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6367,9 +7523,18 @@ msgstr "URL del host de Gitea"
msgid "Gitea Import"
msgstr "Importar desde Gitea"
+msgid "Gitlab CI/CD"
+msgstr "Gitlab CI/CD"
+
+msgid "Gitlab Pages"
+msgstr "GitLab Pages"
+
msgid "Given access %{time_ago}"
msgstr "Acceso concedido %{time_ago}"
+msgid "Global Shortcuts"
+msgstr "Accesos directos globales"
+
msgid "Global notification settings"
msgstr "Configuración global de las notificaciones"
@@ -6382,6 +7547,12 @@ msgstr "Go Micro es un framework para el desarrollo de microservicios."
msgid "Go back"
msgstr "Volver"
+msgid "Go back (while searching for files"
+msgstr "Volver (mientras busca archivos"
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr "Vuelva a %{startTag}Incidencias abiertas%{endTag} y seleccione alguna de las incidencias mostradas para añadirlas a su tablero."
+
msgid "Go full screen"
msgstr "Ir a pantalla completa"
@@ -6391,17 +7562,101 @@ msgstr "Ir a"
msgid "Go to %{link_to_google_takeout}."
msgstr "Ir a %{link_to_google_takeout}."
+msgid "Go to commits"
+msgstr "Ir a commits"
+
+msgid "Go to environments"
+msgstr "Ir a los entornos"
+
+msgid "Go to file"
+msgstr "Ir al archivo"
+
+msgid "Go to file (MRs only)"
+msgstr "Ir al archivo (sólo MRs)"
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr "Ir al enlace permanente de archivo (mientras ve un archivo)"
+
+msgid "Go to files"
+msgstr "Ir a archivos"
+
+msgid "Go to find file"
+msgstr "Ir a la búsqueda de archivos"
+
+msgid "Go to issue boards"
+msgstr "Ir al tablero de incidencias"
+
+msgid "Go to issues"
+msgstr "Ir a las incidencias"
+
+msgid "Go to jobs"
+msgstr "Ir a trabajos"
+
+msgid "Go to kubernetes"
+msgstr "Ir a kubernetes"
+
+msgid "Go to merge requests"
+msgstr "Ir a merge requests"
+
+msgid "Go to metrics"
+msgstr "Ir a métricas"
+
msgid "Go to parent"
msgstr "Ir al principal"
msgid "Go to project"
msgstr "Ir al proyecto"
+msgid "Go to releases"
+msgstr "Ir a releases"
+
+msgid "Go to repository charts"
+msgstr "Ir a los gráficos del repositorio"
+
+msgid "Go to repository graph"
+msgstr "Ir al gráfico del repositorio"
+
+msgid "Go to snippets"
+msgstr "Ir a los fragmentos de código"
+
+msgid "Go to the activity feed"
+msgstr "Ir al feed de actividad"
+
+msgid "Go to the milestone list"
+msgstr "Ir a la lista de hitos"
+
+msgid "Go to the project's activity feed"
+msgstr "Ir al feed de actividad del proyecto"
+
+msgid "Go to the project's overview page"
+msgstr "Ir a la página de información general del proyecto"
+
+msgid "Go to wiki"
+msgstr "Ir al wiki"
+
+msgid "Go to your To-Do list"
+msgstr "Ir a su lista de tareas pendientes"
+
msgid "Go to your fork"
msgstr "Ir a su fork"
+msgid "Go to your groups"
+msgstr "Ir a sus grupos"
+
+msgid "Go to your issues"
+msgstr "Ir a sus incidencias"
+
+msgid "Go to your merge requests"
+msgstr "Ir a sus merge requests"
+
+msgid "Go to your projects"
+msgstr "Ir a sus proyectos"
+
+msgid "Go to your snippets"
+msgstr "Ir a sus fragmentos de código"
+
msgid "Golden Tanuki"
-msgstr ""
+msgstr "Tanuki dorado"
msgid "Google Code import"
msgstr "Importar desde Google Code"
@@ -6409,21 +7664,27 @@ msgstr "Importar desde Google Code"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "La autenticación de Google no se encuentra %{link_to_documentation}. Pregúntale a tu administrador de GitLab si quieres utilizar este servicio."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr "La autenticación de Google no está %{link_start}configurada correctamente%{link_end}. Si desea utilizar este servicio, pregunte a su administrador de GitLab."
msgid "Got it"
-msgstr ""
+msgstr "¡Lo tengo!"
msgid "Got it!"
msgstr "¡Lo tengo!"
+msgid "Grafana URL"
+msgstr "URL de Grafana"
+
msgid "Grant access"
msgstr "Conceder acceso"
msgid "Graph"
msgstr "Gráfico"
+msgid "Gravatar"
+msgstr "Gravatar"
+
msgid "Gravatar enabled"
msgstr "Gravatar habilitado"
@@ -6487,15 +7748,15 @@ msgstr "La cuota de minutos del pipeline fue restablecida con éxito."
msgid "Group was successfully updated."
msgstr "Grupo actualizado correctamente."
-msgid "Group:"
-msgstr "Grupo:"
-
msgid "Group: %{group_name}"
msgstr "Grupo: %{group_name}"
msgid "Group: %{name}"
msgstr "Grupo: %{name}"
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "Desde %{dateWord}"
@@ -6524,7 +7785,7 @@ msgid "GroupSAML|Certificate fingerprint"
msgstr "Huella digital del certificado"
msgid "GroupSAML|Configuration"
-msgstr ""
+msgstr "Configuración"
msgid "GroupSAML|Enable SAML authentication for this group."
msgstr "Habilitar la autenticación SAML para este grupo."
@@ -6532,6 +7793,9 @@ msgstr "Habilitar la autenticación SAML para este grupo."
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr "Forzar autenticación SSO para este grupo."
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr "Forzar la autenticación mediante SSO para este grupo."
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr "Obligar a los usuarios tener cuentas administradas de grupo dedicadas para este grupo."
@@ -6607,6 +7871,9 @@ msgstr "Personalice sus insignias de grupo."
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr "Por defecto, al pipeline de Auto DevOps para todos los proyectos englobados dentro de este grupo"
+msgid "GroupSettings|Disable email notifications"
+msgstr "Desactivar las notificaciones por correo electrónico"
+
msgid "GroupSettings|Learn more about badges."
msgstr "Aprenda más sobre insignias."
@@ -6640,6 +7907,9 @@ msgstr "Esta configuración se aplica en %{ancestor_group}. Puede sobrescribir l
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "Esta configuración se aplicará a todos los subgrupos a menos que se sobrescriba por el propietario de un grupo. Los grupos que ya tienen acceso al proyecto seguirán teniendo acceso, a menos que estos permisos se eliminen manualmente."
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr "Esta configuración sobrescribirá las preferencias de notificación del usuario para todos los miembros del grupo, los subgrupos y los proyectos."
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "No se puede deshabilitar cuando el grupo principal \"Compartir con bloqueo de grupo\" está habilitado, excepto por el propietario del grupo principal"
@@ -6763,6 +8033,12 @@ msgstr "Página de ayuda"
msgid "Help page text and support page url."
msgstr "Texto de la página de ayuda y url de la página de soporte."
+msgid "Helps prevent bots from brute-force attacks."
+msgstr "Ayuda a evitar que los bots realicen ataques de fuerza bruta."
+
+msgid "Helps prevent bots from creating accounts."
+msgstr "Ayuda a evitar que los bots creen nuevas cuentas."
+
msgid "Hide archived projects"
msgstr "Ocultar proyectos archivados"
@@ -6773,17 +8049,20 @@ msgid "Hide group projects"
msgstr "Ocultar grupos de proyectos"
msgid "Hide host keys manual input"
-msgstr ""
+msgstr "Ocultar la entrada manual de claves del host"
msgid "Hide marketing-related entries from help"
msgstr "Ocultar en la ayuda las entradas relacionadas con marketing"
msgid "Hide payload"
-msgstr ""
+msgstr "Ocultar payload"
msgid "Hide shared projects"
msgstr "Ocultar proyectos compartidos"
+msgid "Hide stage"
+msgstr "Ocultar etapa"
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Ocultar valor"
@@ -6792,6 +8071,9 @@ msgstr[1] "Ocultar valores"
msgid "Hide values"
msgstr "Ocultar valores"
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr "Mayor número de solicitudes por minuto para cada ruta sin procesar, por defecto, 300. Para deshabilitar esta limitación, establezca en 0."
+
msgid "Highest role:"
msgstr "Rol más alto:"
@@ -6810,6 +8092,9 @@ msgstr "El hook se ha creado correctamente."
msgid "Hook was successfully updated."
msgstr "El hook se actualizó correctamente."
+msgid "Hours"
+msgstr "Horas"
+
msgid "Housekeeping"
msgstr "Mantenimiento"
@@ -6819,6 +8104,9 @@ msgstr "Servicio de limpieza iniciado con éxito"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr "Tareas de mantenimiento, exportación, ruta, transferencia, eliminación, archivo."
+msgid "How it works"
+msgstr "Cómo funciona"
+
msgid "How many replicas each Elasticsearch shard has."
msgstr "Cuántas réplicas tiene cada shard de Elasticsearch."
@@ -6828,6 +8116,9 @@ msgstr "¿En cuántos shards se puede dividir el índice de Elasticsearch?."
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr "Sin embargo, ya es miembro de este %{member_source}. Inicie sesión con una cuenta diferente para aceptar la invitación."
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr "Acepto los %{terms_link_start}Términos de servicio y la Política de privacidad%{terms_link_end}"
+
msgid "I accept the %{terms_link}"
msgstr "Aceptar los %{terms_link}"
@@ -6840,9 +8131,15 @@ msgstr "He olvidado mi contraseña"
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr "He leído y acepto los términos de servicio de Let's Encrypt %{link_start}%{link_end}"
+msgid "I'd like to receive updates via email about GitLab"
+msgstr "Me gustaría recibir actualizaciones por correo electrónico sobre GitLab"
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr "ID:"
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,14 +8176,17 @@ msgstr "Actualizar vista previa"
msgid "IDE|Review"
msgstr "Revisión"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "Direccion IP"
msgid "IP address restriction is not editable in subgroups. Value inherited from top-level parent group."
-msgstr ""
+msgstr "La restricción de la dirección IP no se puede editar en los subgrupos. El valor se hereda directamente desde grupo de nivel superior."
msgid "IP subnet restriction only allowed for top-level groups"
-msgstr ""
+msgstr "La restricción de la subred IP solo está permitida en grupos de nivel superior"
msgid "Identifier"
msgstr "Identificador"
@@ -6901,7 +8201,7 @@ msgid "If checked, group owners can manage LDAP group links and LDAP member over
msgstr "Si está marcado, los propietarios de grupos pueden administrar enlaces de grupo LDAP y anular los miembros LDAP"
msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization"
-msgstr ""
+msgstr "Si se marca, las nuevas miembros del grupo y los permisos sólo se pueden agregar a través de la sincronización vía LDAP"
msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored."
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr "Onion skin"
msgid "ImageDiffViewer|Swipe"
msgstr "Swipe"
+msgid "ImageViewerDimensions|H"
+msgstr "Alto"
+
+msgid "ImageViewerDimensions|W"
+msgstr "Ancho"
+
msgid "Impersonation has been disabled"
msgstr "La suplantación ha sido deshabilitada"
@@ -7047,11 +8353,11 @@ msgstr "No se pudieron importar los datos remotos."
msgid "ImportProjects|The repository could not be created."
msgstr "No se pudo crear el repositorio."
-msgid "ImportProjects|Updating the imported projects failed"
-msgstr "Se ha producido un error al actualizar los proyectos importados"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr "Se ha producido un error al actualizar los proyectos importados con cambios en tiempo real"
msgid "Improve Issue boards"
-msgstr ""
+msgstr "Mejorar el tablero de incidencias"
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr "Mejore los tableros de incidencias con GitLab Enterprise Edition."
@@ -7101,14 +8407,17 @@ msgstr "Incluye una estructura MVC, Gemfile, Rakefile, junto con muchos otros, p
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr "Incluye una estructura MVC, mvnw y pom.xml para ayudarle a comenzar."
+msgid "Incoming email"
+msgstr "Correo electrónico entrante"
+
msgid "Incompatible Project"
msgstr "Proyecto incompatible"
msgid "Incompatible options set!"
msgstr "¡Conjunto de opciones incompatibles configuradas!"
-msgid "Indexing"
-msgstr "Indexando"
+msgid "Index all projects"
+msgstr "Indexar todos los proyectos"
msgid "Indicates whether this runner can pick jobs without tags"
msgstr "Indica si este ejecutor puede seleccionar trabajos sin etiquetas"
@@ -7123,7 +8432,7 @@ msgid "Inline"
msgstr "En línea"
msgid "Input host keys manually"
-msgstr ""
+msgstr "Introducir las claves del host manualmente"
msgid "Input your repository URL"
msgstr "Introduzca la URL de su repositorio"
@@ -7141,7 +8450,7 @@ msgid "Insights"
msgstr "Insights"
msgid "Install"
-msgstr ""
+msgstr "Instalar"
msgid "Install GitLab Runner"
msgstr "Instalar GitLab Runner"
@@ -7150,13 +8459,16 @@ msgid "Install Runner on Kubernetes"
msgstr "Instalar Gitlab Runner en Kubernetes"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
-msgstr ""
+msgstr "Instale un autenticador de token de software como %{free_otp_link} o Google Authenticator desde su repositorio de aplicaciones y escanee este código QR. Puede obtener más información en la %{help_link_start}Documentación%{help_link_end}."
+
+msgid "Install on clusters"
+msgstr "Instala en los clústeres"
msgid "Installed"
-msgstr ""
+msgstr "Instalado"
msgid "Installing"
-msgstr ""
+msgstr "Instalando"
msgid "Instance"
msgid_plural "Instances"
@@ -7169,6 +8481,9 @@ msgstr "Estadísticas de la Instancia"
msgid "Instance Statistics visibility"
msgstr "Visibilidad de las estadísticas de instancia"
+msgid "Instance administrators group already exists"
+msgstr "Ya existe el grupo de administrador de instancias"
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "La instancia no soporta múltiples clústeres de Kubernetes"
@@ -7211,8 +8526,11 @@ msgstr "Archivo de configuración de Insights no válido detectado"
msgid "Invalid Login or password"
msgstr "Inicio de sesión o contraseña no válida"
+msgid "Invalid URL"
+msgstr "URL no válida"
+
msgid "Invalid date"
-msgstr ""
+msgstr "Fecha no válida"
msgid "Invalid feature"
msgstr "Característica no válida"
@@ -7233,13 +8551,13 @@ msgid "Invalid pin code"
msgstr "Código PIN inválido."
msgid "Invalid query"
-msgstr ""
+msgstr "Consulta no válida"
msgid "Invalid repository path"
msgstr "Ruta del repositorio no válida"
msgid "Invalid server response"
-msgstr ""
+msgstr "Respuesta del servidor no válida"
msgid "Invalid two-factor code."
msgstr "Código de dos factores no válido."
@@ -7259,17 +8577,23 @@ msgstr "Invitar al grupo"
msgid "Invite member"
msgstr "Invitar al miembro"
-msgid "Invoke Count"
-msgstr ""
-
-msgid "Invoke Time"
-msgstr "Tiempo de invocación"
+msgid "Invocations"
+msgstr "Ejecuciones"
msgid "Is using license seat:"
msgstr "Está usando el asiento de licencia:"
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
-msgstr "Cerrado (%{moved_link_start}movido%{moved_link_end})"
+msgid "IssuableStatus|Closed"
+msgstr "Cerrada"
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr "Cerrada (%{link})"
+
+msgid "IssuableStatus|duplicated"
+msgstr "duplicada"
+
+msgid "IssuableStatus|moved"
+msgstr "movida"
msgid "Issue"
msgstr "Incidencia"
@@ -7290,7 +8614,7 @@ msgid "Issue update failed"
msgstr "Se ha producido un error al actualizar incidencia"
msgid "Issue was closed by %{name} %{reason}"
-msgstr ""
+msgstr "La incidencia fue cerrada por %{name} %{reason}"
msgid "IssueBoards|Board"
msgstr "Tablero"
@@ -7313,9 +8637,27 @@ msgstr "Algunos de sus tableros están ocultos, active una licencia para verlos
msgid "IssueBoards|Switch board"
msgstr "Cambiar tablero"
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr "Gestor de incidencias Bugzilla"
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr "Gestor de incidencias personalizado"
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr "Gestor de incidencias GitLab"
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr "Gestor de incidencias Redmine"
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr "Gestor de incidencias YouTrack"
+
msgid "Issues"
msgstr "Incidencias"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "Las incidencias pueden ser errores, tareas o ideas para ser discutidas. Además, las mismas, pueden ser buscadas y filtradas."
@@ -7331,7 +8673,10 @@ msgstr "Incidencias, merge requests, pushes y comentarios."
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr "Una vez haya comenzado a crear incidencias, podremos iniciar el seguimiento y mostrar distintas métricas para sus proyectos"
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr "Promedio mensual:"
+
+msgid "IssuesAnalytics|Issues created"
msgstr "Incidencias creadas"
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr "No hay incidencias para los proyectos contenidos en su grupo"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "Para ampliar su búsqueda, cambie o elimine los filtros en la barra de filtros que se muestra en la parte superior"
+msgid "IssuesAnalytics|Total:"
+msgstr "Total:"
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7377,10 +8728,10 @@ msgid "JiraService|Jira API URL"
msgstr "URL del API de JIRA"
msgid "JiraService|Jira comments will be created when an issue gets referenced in a commit."
-msgstr "Los comentarios de JIRA se crearán cuando se haga referencia a una incidencia en un commit."
+msgstr "Los comentarios de Jira se crearán cuando se haga referencia a una incidencia en un commit."
msgid "JiraService|Jira comments will be created when an issue gets referenced in a merge request."
-msgstr "Los comentarios de JIRA se crearán cuando se haga referencia a una incidencia en un commit."
+msgstr "Los comentarios de Jira se crearán cuando se haga referencia a una incidencia en un merge request."
msgid "JiraService|Jira issue tracker"
msgstr "Gestos de incidencias Jira"
@@ -7446,7 +8797,7 @@ msgid "Job|Browse"
msgstr "Explorar"
msgid "Job|Complete Raw"
-msgstr ""
+msgstr "Raw completo"
msgid "Job|Download"
msgstr "Descargar"
@@ -7500,7 +8851,7 @@ msgid "Job|with"
msgstr "con"
msgid "Join Zoom meeting"
-msgstr ""
+msgstr "Unirse a la reunión de Zoom"
msgid "Jul"
msgstr "Jul"
@@ -7526,6 +8877,9 @@ msgstr "Clave (PEM)"
msgid "Key: %{key}"
msgstr "Clave: %{key}"
+msgid "Keyboard Shortcuts"
+msgstr "Atajos de teclado"
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7550,11 +8904,14 @@ msgstr "El clúster de Kubernetes se actualizó correctamente."
msgid "Kubernetes configured"
msgstr "Kubernetes configurado"
+msgid "Kubernetes deployment not found"
+msgstr "Despliegue de Kubernetes no encontrado"
+
msgid "Kubernetes error: %{error_code}"
msgstr "Error de Kubernetes: %{error_code}"
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "La integración del servicio de Kubernetes ha quedado obsoleta. %{deprecated_message_content} sus clústeres de Kubernetes con la nueva página de <a href=\"%{url}\"/>Clústers de Kubernetes</a>"
+msgid "LDAP"
+msgstr "LDAP"
msgid "LDAP settings"
msgstr "Configuración LDAP"
@@ -7623,7 +8980,7 @@ msgid "Labels|Promote Label"
msgstr "Promocionar etiqueta"
msgid "Labels|Promoting %{labelTitle} will make it available for all projects inside %{groupName}. Existing project labels with the same title will be merged. This action cannot be reversed."
-msgstr ""
+msgstr "Promocionar la etiqueta %{labelTitle} la hará disponible a todos los proyectos dentro de %{groupName}. Se hará un merge con las etiquetas de los proyectos existentes que tengan el mismo título. Esta acción no puede deshacer."
msgid "Labels|and %{count} more"
msgstr "Y %{count} más"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] "Último %d día"
msgstr[1] "Últimos %d días"
+msgid "Last %{days} days"
+msgstr "Últimos %{days} días"
+
msgid "Last Pipeline"
msgstr "Último Pipeline"
@@ -7660,15 +9020,24 @@ msgstr "Última edición el %{date}"
msgid "Last edited by %{name}"
msgstr "Última edición por %{name}"
+msgid "Last name"
+msgstr "Apellido(s)"
+
msgid "Last reply by"
msgstr "Última respuesta por"
msgid "Last seen"
msgstr "Visto por ùltima vez"
+msgid "Last successful update"
+msgstr "Última actualización con éxito"
+
msgid "Last update"
msgstr "Última actualización"
+msgid "Last update attempt"
+msgstr "Último intento de actualización"
+
msgid "Last updated"
msgstr "Última actualización"
@@ -7676,7 +9045,7 @@ msgid "Last used"
msgstr "Utilizado por última vez"
msgid "Last used on:"
-msgstr ""
+msgstr "Utilizado por última vez en:"
msgid "LastPushEvent|You pushed to"
msgstr "Ha hecho push a"
@@ -7687,8 +9056,8 @@ msgstr "en"
msgid "Latest changes"
msgstr "Últimos cambios"
-msgid "Latest pipeline for this branch"
-msgstr "Último pipeline para este branch"
+msgid "Latest pipeline for the most recent commit on this branch"
+msgstr ""
msgid "Lead"
msgstr ""
@@ -7705,9 +9074,6 @@ msgstr "Aprenda como %{no_packages_link_start}publicar y compartir sus paquetes%
msgid "Learn more"
msgstr "Conozca más"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "Obtenga más información sobre %{issue_boards_url}, para realizar un seguimiento de las incidencias en varias listas, mediante el uso de etiquetas, asignaciones e hitos. Si echa en falta alguna incidencia, en los tableros de incidencias, por favor cree un incidencia en %{gitlab_issues_url}."
-
msgid "Learn more about Auto DevOps"
msgstr "Aprenda más sobre Auto DevOps"
@@ -7718,7 +9084,7 @@ msgid "Learn more about Web Terminal"
msgstr "Aprenda más sobre la Terminal Web"
msgid "Learn more about adding certificates to your project by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
-msgstr ""
+msgstr "Obtenga más información sobre cómo agregar certificados a su proyecto siguiendo la documentación %{docs_link_start}en las páginas%{docs_link_end}GitLab."
msgid "Learn more about approvals."
msgstr "Obtenga más información sobre las aprobaciones."
@@ -7726,6 +9092,9 @@ msgstr "Obtenga más información sobre las aprobaciones."
msgid "Learn more about custom project templates"
msgstr "Más información sobre las plantillas de proyecto personalizadas"
+msgid "Learn more about deploying to a cluster"
+msgstr "Obtenga más información sobre los despliegues en un clúster"
+
msgid "Learn more about group-level project templates"
msgstr "Obtenga más información sobre las plantillas de proyectos a nivel de grupo"
@@ -7733,7 +9102,10 @@ msgid "Learn more about signing commits"
msgstr "Más información sobre los commits firmados"
msgid "Learn more about the dependency list"
-msgstr ""
+msgstr "Obtenga más información sobre la lista de dependencias"
+
+msgid "Learn more about vulnerability check"
+msgstr "Obtenga más información sobre la comprobación de vulnerabilidades"
msgid "Learn more in the"
msgstr "Más información en la"
@@ -7760,82 +9132,104 @@ msgid "Let's Encrypt does not accept emails on example.com"
msgstr "Let's Encrypt no acepta correos electrónicos de example.com"
msgid "Let's Encrypt is a free, automated, and open certificate authority (CA) that gives digital certificates in order to enable HTTPS (SSL/TLS) for websites. Learn more about Let's Encrypt configuration by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
-msgstr ""
+msgstr "Let's encrypt es una autoridad de certificación (CA) gratuita y automatizada, que proporciona certificados HTTPS (SSL/TLS) para sitios web. Para saber cómo configurarlo consulte el enlace de la documentación %{docs_link_start} en GitLab Pages%{docs_link_end}."
msgid "License"
msgstr "Licencia"
-msgid "LicenseManagement|Add a license"
-msgstr "Añadir licencia"
+msgid "License Compliance"
+msgstr "License Compliance"
+
+msgid "LicenseCompliance|Add a license"
+msgstr "Agregar una licencia"
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "Añadir licencias manualmente para aprobar o agregar la licencia a la lista negra"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr "Añadir licencias manualmente para aprobarlas o agregarlas a la lista negra"
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approve"
msgstr "Aprobar"
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve license"
msgstr "Aprobar licencia"
-msgid "LicenseManagement|Approve license?"
-msgstr "¿Aprobar licencia?"
+msgid "LicenseCompliance|Approve license?"
+msgstr "¿Aprobar la licencia?"
-msgid "LicenseManagement|Approved"
-msgstr "Aprobado"
+msgid "LicenseCompliance|Approved"
+msgstr "Aprobada"
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklist"
msgstr "Lista negra"
-msgid "LicenseManagement|Blacklist license"
-msgstr "Lista Negra"
+msgid "LicenseCompliance|Blacklist license"
+msgstr "Agregar la licencia a la lista negra"
-msgid "LicenseManagement|Blacklist license?"
-msgstr "¿Bloquear licencia?"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr "¿Agregar la licencia a la lista negra?"
-msgid "LicenseManagement|Blacklisted"
-msgstr "Bloqueada"
+msgid "LicenseCompliance|Blacklisted"
+msgstr "Licencia en la lista negra"
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Cancel"
msgstr "Cancelar"
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr "Aquí puede aprobar o agregar licencias a la lista negra de este proyecto. El utilizar %{ci} o %{license} le permitirá ver si hay licencias que no estén administradas y aprobarlas o incluirlas en la lista negra en el merge request."
+
+msgid "LicenseCompliance|License"
msgstr "Licencia"
-msgid "LicenseManagement|License Management"
-msgstr "Gestión de licencias"
+msgid "LicenseCompliance|License Compliance"
+msgstr "License Compliance"
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] "License Compliance detectó %d licencia solo para la rama origen"
+msgstr[1] "License Compliance detectó %d licencias solo para la rama origen"
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] "License Compliance detectó %d licencia nueva"
+msgstr[1] "License Compliance detectó %d licencias nuevas"
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr "License Compliance no ha detectado licencias para la rama origen"
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr "License Compliance no ha detectado nuevas licencias"
+
+msgid "LicenseCompliance|License details"
msgstr "Detalles de la licencia"
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr "Nombre de la licencia"
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "Administrar licencias aprobadas y en lista negra para este proyecto."
-
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Packages"
msgstr "Paquetes"
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license"
msgstr "Eliminar la licencia"
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Remove license?"
msgstr "¿Eliminar la licencia?"
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Submit"
msgstr "Enviar"
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "Actualmente no hay licencias aprobadas o incluidas en la lista negra en este proyecto."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr "Actualmente no hay licencias aprobadas o incluidas en la lista negra de este proyecto."
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "Esta licencia ya existe en este proyecto."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr "Actualmente no hay licencias aprobadas o incluidas en la lista negra que coincidan con este proyecto."
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr "Ya existe esta licencia en este proyecto."
+
+msgid "LicenseCompliance|URL"
msgstr "URL"
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "Está a punto de eliminar la licencia, %{name}, de este proyecto."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr "Está a punto de eliminar esta licencia, %{name}, para este proyecto."
msgid "Licensed Features"
msgstr "Características licenciadas"
@@ -7846,6 +9240,9 @@ msgstr "Licenciado a"
msgid "Licenses"
msgstr "Licencias"
+msgid "Limit display of time tracking units to hours."
+msgstr "Limitar la visualización de las unidades de seguimiento de tiempo a horas."
+
msgid "Limit namespaces and projects that can be indexed"
msgstr "Limitar los espacios de nombres y los proyectos que se pueden indexar"
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] "Limitado a mostrar %d evento como máximo"
msgstr[1] "Limitado a mostrar %d eventos como máximo"
+msgid "Link copied to clipboard"
+msgstr "Enlace copiado al portapapeles"
+
msgid "Linked emails (%{email_count})"
-msgstr ""
+msgstr "Correos electrónicos vinculados (%{email_count})"
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "Lista"
@@ -7872,15 +9275,15 @@ msgstr "Lista de repositorios disponibles"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr "Lista de IPs y CIDRs permitidos de los nodos secundarios. Separados por comas, por ejemplo, \"1.1.1.1, 2.2.2.0/24\""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "Vista de lista"
msgid "List your Bitbucket Server repositories"
msgstr "Listar sus repositorios de Bitbucket Server"
-msgid "List your GitHub repositories"
-msgstr "Listar sus repositorios de GitHub"
-
msgid "Live preview"
msgstr "Vista previa"
@@ -7888,7 +9291,10 @@ msgid "Loading contribution stats for group members"
msgstr "Cargando las estadísticas de las colaboraciones de los miembros del grupo"
msgid "Loading functions timed out. Please reload the page to try again."
-msgstr ""
+msgstr "Se agotó el tiempo de espera al cargar las funciones. Por favor, vuelva a cargar la página e inténtelo de nuevo."
+
+msgid "Loading issues"
+msgstr "Cargando incidencias"
msgid "Loading the GitLab IDE..."
msgstr "Cargando el IDE de GitLab..."
@@ -7929,14 +9335,20 @@ msgstr "Bloqueado"
msgid "Locked Files"
msgstr "Archivos bloqueados"
+msgid "Locked by %{fileLockUserName}"
+msgstr "Bloqueado por %{fileLockUserName}"
+
+msgid "Locked the discussion."
+msgstr "Bloqueó la discusión."
+
msgid "Locked to current projects"
msgstr "Bloqueado a los proyectos actuales"
msgid "Locks give the ability to lock specific file or folder."
msgstr "Los bloqueos brindan la capacidad de bloquear archivos o carpetas específicos."
-msgid "Locks the discussion"
-msgstr "Bloquear la discusión"
+msgid "Locks the discussion."
+msgstr "Bloquea la discusión."
msgid "Login with smartcard"
msgstr "Iniciar sesión con una tarjeta inteligente"
@@ -7947,6 +9359,9 @@ msgstr "El logotipo se ha eliminado correctamente."
msgid "Logs"
msgstr "Logs"
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr "Aprobado por"
@@ -7962,20 +9377,26 @@ msgstr "Mostrar sólo los cambios"
msgid "MRDiff|Show full file"
msgstr "Mostrar el archivo completo"
+msgid "Made this issue confidential."
+msgstr "Convierte este problema en confidencial."
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr "Realice y revise los cambios en el navegador con el Web IDE"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "Haga que todos en su equipo sean más productivos, independientemente de su ubicación. GitLab Geo crea réplicas de solo lectura de su instancia de GitLab para que pueda reducir el tiempo que lleva clonar y obtener grandes repositorios."
-msgid "Make issue confidential."
-msgstr "Hacer esta incidencia confidencial."
+msgid "Make issue confidential"
+msgstr "Convertir este problema en confidencial"
+
+msgid "Make sure you save it - you won't be able to access it again."
+msgstr "Asegúrese de guardarlo, no podrá volver a acceder a él."
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "Asegúrese de haber iniciado sesión en la cuenta que posee los proyectos que desea importar."
-msgid "Makes this issue confidential"
-msgstr "Hace este incidencia confidencial"
+msgid "Makes this issue confidential."
+msgstr "Convierte la incidencia en confidencial."
msgid "Manage"
msgstr "Administrar"
@@ -8019,6 +9440,9 @@ msgstr "Importar fichero de manifiesto"
msgid "Manual job"
msgstr "Trabajo manual"
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr "No ha sido posible guardar el orden de las incidencias"
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "Asigne una ID de cuenta de FogBugz a un usuario de GitLab"
@@ -8037,6 +9461,12 @@ msgstr "Marzo"
msgid "March"
msgstr "Marzo"
+msgid "Mark To Do as done"
+msgstr "Marcar la tarea pendiente como hecha"
+
+msgid "Mark as done"
+msgstr "Marcar como completado"
+
msgid "Mark as resolved"
msgstr "Marcar como resuelto"
@@ -8046,8 +9476,8 @@ msgstr "Marcar comentario como resuelto"
msgid "Mark this issue as a duplicate of another issue"
msgstr "Marque esta incidencia como duplicada de otra incidencia"
-msgid "Mark todo as done"
-msgstr "Marcar tarea pendiente como completada"
+msgid "Mark this issue as related to another issue"
+msgstr "Marque esta incidencia como relacionada con otra incidencia"
msgid "Markdown"
msgstr "Markdown"
@@ -8058,15 +9488,66 @@ msgstr "Ayuda de Markdown"
msgid "Markdown enabled"
msgstr "Markdown habilitado"
+msgid "Markdown is supported"
+msgstr "Compatible con la sintaxis de Markdown"
+
+msgid "Marked To Do as done."
+msgstr "Marcado tarea pendiente como hecha."
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr "Marcado este %{noun} como trabajo en progreso."
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr "Esta incidencia esta marcada como un duplicado de %{duplicate_param}."
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr "Marcar esta incidencia como incidencia relacionada con %{issue_ref}."
+
+msgid "Marks To Do as done."
+msgstr "Marcar tarea pendiente como hecha."
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr "Marca este %{noun} como un trabajo en progreso."
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr "Marca esta incidencia como un duplicada de %{duplicate_reference}."
-msgid "Marks todo as done."
-msgstr "Marcar tarea pendiente como completada."
+msgid "Marks this issue as related to %{issue_ref}."
+msgstr "Marca esta incidencia como una incidencia relacionada con %{issue_ref}."
msgid "Match not found; try refining your search query."
msgstr "No se encontró la coincidencia; por favor refine la consulta de su búsqueda."
+msgid "MattermostService|Add to Mattermost"
+msgstr "Agregar a Mattermost"
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr "Sugerencias:"
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Metadatos de Maven"
@@ -8124,9 +9605,18 @@ msgstr "Los miembros se pueden añadir por proyecto <i>Mantenedores</i> o <i>Pro
msgid "Members of <strong>%{project_name}</strong>"
msgstr "Miembros de <strong>%{project_name}</strong>"
-msgid "Merge"
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
msgstr ""
+msgid "Merge"
+msgstr "Merge"
+
+msgid "Merge (when the pipeline succeeds)"
+msgstr "Merge (cuando el pipeline finalice correctamente)"
+
msgid "Merge Request"
msgstr "Merge request"
@@ -8154,11 +9644,14 @@ msgstr "Merge en progreso"
msgid "Merge request"
msgstr "Merge request"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr "Merge request %{iid} creado por %{authorName}"
+
msgid "Merge request approvals"
msgstr "Aprobar los merge request"
msgid "Merge request approvals allow you to set the number of necessary approvals and predefine a list of approvers that will need to approve every merge request in a project."
-msgstr ""
+msgstr "Las autorizaciones de los merge request le permiten establecer el número de autorizaciones necesarias y predefinir una lista de usuarios autorizadores que deben autorizar cada merge request en un proyecto."
msgid "Merge requests"
msgstr "Merge requests"
@@ -8166,6 +9659,9 @@ msgstr "Merge requests"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "Los merge request son un lugar para proponer los cambios que ha realizado en un proyecto y discutir esos cambios con otros miembros"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr "Los merge requests son de solo lectura en un Geo nodo secundario"
+
msgid "Merge when pipeline succeeds"
msgstr "Ejecutar merge cuando el pipeline se ejecute con éxito"
@@ -8176,7 +9672,7 @@ msgid "MergeConflict|Committing..."
msgstr "Realizando commit..."
msgid "MergeConflict|HEAD//our changes"
-msgstr ""
+msgstr "HEAD//nuestros cambios"
msgid "MergeConflict|Use ours"
msgstr "Utilizar el nuestro"
@@ -8191,7 +9687,7 @@ msgid "MergeConflict|conflicts"
msgstr "conflictos"
msgid "MergeConflict|origin//their changes"
-msgstr ""
+msgstr "origen//sus cambios"
msgid "MergeRequests|Add a reply"
msgstr "Añadir una respuesta"
@@ -8199,20 +9695,8 @@ msgstr "Añadir una respuesta"
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "Se ha producido un error al guardar el borrador del comentario."
-msgid "MergeRequests|Discussion stays resolved"
-msgstr "La discusión permanece resuelta"
-
-msgid "MergeRequests|Discussion stays unresolved"
-msgstr "La discusión permanece sin resolver"
-
-msgid "MergeRequests|Discussion will be resolved"
-msgstr "Se resolverá la discusión"
-
-msgid "MergeRequests|Discussion will be unresolved"
-msgstr "La discusión no se resolverá"
-
msgid "MergeRequests|Failed to squash. Should be done manually."
-msgstr ""
+msgstr "Se ha producido un error al realizar el squash. Debe hacerse de forma manual."
msgid "MergeRequests|Jump to next unresolved discussion"
msgstr "Saltar a la siguiente discusión sin resolver"
@@ -8220,14 +9704,26 @@ msgstr "Saltar a la siguiente discusión sin resolver"
msgid "MergeRequests|Reply..."
msgstr "Responder..."
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "Resolver esta discusión en una nueva incidencia"
+msgid "MergeRequests|Resolve this thread in a new issue"
+msgstr "Resolver este hilo en una nueva incidencia"
msgid "MergeRequests|Saving the comment failed"
msgstr "Se ha producido un error al guardar el comentario"
msgid "MergeRequests|Squash task canceled: another squash is already in progress."
-msgstr ""
+msgstr "Tarea de squash cancelada: Ya hay otro squash en progreso."
+
+msgid "MergeRequests|Thread stays resolved"
+msgstr "El hilo permanece resuelto"
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr "El hilo permanece sin resolver"
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr "El hilo será resuelto"
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr "El hilo no se resolverá"
msgid "MergeRequests|Toggle comments for this file"
msgstr "Alternar los comentarios para este archivo"
@@ -8241,20 +9737,20 @@ msgstr "Ver el archivo reemplazado @ %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr "comentado en el commit %{commitLink}"
-msgid "MergeRequests|started a discussion"
-msgstr "comenzó una discusión"
+msgid "MergeRequests|started a thread"
+msgstr "Hilo iniciado"
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
-msgstr "Comenzó una discusión en %{linkStart}una versión antigua del diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr "Hilo iniciado en %{linkStart} en una antigua versión del diff %{linkEnd}"
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
-msgstr "Inició una discusión en %{linkStart}el dif%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr "Hilo iniciado en %{linkStart} del diff %{linkEnd}"
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "comenzó una discusión sobre un cambio desactualizado en el commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "comenzó una discusión en el commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
msgstr "%{paragraphStart}cambió la descripción %{descriptionChangedTimes} veces %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr "Fusionado"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "Mensajes"
+msgid "Method"
+msgstr "Método"
+
msgid "Metric was successfully added."
msgstr "La métrica se añadió correctamente."
msgid "Metric was successfully updated."
msgstr "La métrica se actualizó correctamente."
+msgid "MetricChart|Please select a metric"
+msgstr "Por favor seleccione una métrica"
+
+msgid "MetricChart|Selected"
+msgstr "Seleccionado"
+
msgid "Metrics"
msgstr "Métricas"
+msgid "Metrics - Grafana"
+msgstr "Métricas - Grafana"
+
msgid "Metrics - Influx"
msgstr "Métricas - Influx"
msgid "Metrics - Prometheus"
msgstr "Métricas - Prometheus"
+msgid "Metrics Dashboard"
+msgstr "Panel de control de métricas"
+
msgid "Metrics and profiling"
msgstr "Métricas e informes"
@@ -8463,9 +9977,6 @@ msgstr "La longitud mínima es de %{minimum_password_length} caracteres."
msgid "Minutes"
msgstr "Minutos"
-msgid "Mirror a repository"
-msgstr "Replicar un repositorio"
-
msgid "Mirror direction"
msgstr "Dirección de la réplica"
@@ -8505,6 +10016,9 @@ msgstr "Cancelar"
msgid "Modal|Close"
msgstr "Cerrar"
+msgid "Modified in this version"
+msgstr "Modificado en esta versión"
+
msgid "Modify commit message"
msgstr "Modificar el mensaje de commit"
@@ -8517,8 +10031,8 @@ msgstr "Modificar el merge commit"
msgid "Monday"
msgstr "Lunes"
-msgid "Monitor your errors by integrating with Sentry"
-msgstr "Monitorice sus errores integrando Sentry"
+msgid "Monitor your errors by integrating with Sentry."
+msgstr "Monitorice los errores de su aplicación al integrarse con Sentry."
msgid "Monitoring"
msgstr "Monitorizar"
@@ -8529,6 +10043,12 @@ msgstr "Meses"
msgid "More"
msgstr "Más"
+msgid "More Information"
+msgstr "Más información"
+
+msgid "More Slack commands"
+msgstr "Más comandos de Slack"
+
msgid "More actions"
msgstr "Más acciones"
@@ -8559,6 +10079,12 @@ msgstr "Mover incidencia"
msgid "Move issue from one column of the board to another"
msgstr "Mover la incidencia de una columna del tablero a otra"
+msgid "Move selection down"
+msgstr "Mover la selección hacia abajo"
+
+msgid "Move selection up"
+msgstr "Mover la selección hacia arriba"
+
msgid "Move this issue to another project."
msgstr "Mueve esta incodencia a otro proyecto."
@@ -8568,6 +10094,12 @@ msgstr "¡No se puede mover la incidencia debido a permisos insuficientes!"
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr "¡No se puede mover la incidencia al proyecto en el que se crea!"
+msgid "Moved issue to %{label} column in the board."
+msgstr "Se ha movido la incidencia para %{label} la columna del tablero."
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr "Se ha movido esta incidencia para %{path_to_project}."
+
msgid "Moves issue to %{label} column in the board."
msgstr "Mover la incidencia a la columna %{label} en el tablero."
@@ -8663,6 +10195,9 @@ msgstr "Nueva contraseña"
msgid "New Pipeline Schedule"
msgstr "Nueva Programación del Pipeline"
+msgid "New Project"
+msgstr "Nuevo proyecto"
+
msgid "New Snippet"
msgstr "Nuevo fragmento de código"
@@ -8685,7 +10220,7 @@ msgid "New epic"
msgstr "Nueva tarea épica"
msgid "New epic title"
-msgstr ""
+msgstr "Nuevo título de la tarea épica"
msgid "New file"
msgstr "Nuevo archivo"
@@ -8739,7 +10274,7 @@ msgid "New users set to external"
msgstr "Nuevos usuarios configurados como externos"
msgid "New! Suggest changes directly"
-msgstr ""
+msgstr "¡Nuevo! Sugerir cambios directamente"
msgid "New..."
msgstr "Nuevo..."
@@ -8750,14 +10285,26 @@ msgstr "Los usuarios recién registrados serán creados, por defecto, como exter
msgid "Next"
msgstr "Siguiente"
+msgid "Next file in diff (MRs only)"
+msgstr "Siguiente archivo en diff (sólo MRs)"
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr "Siguiente discusión sin resolver (solo MRs)"
+
msgid "Nickname"
msgstr "Seudónimo"
msgid "No"
msgstr "No"
-msgid "No %{providerTitle} repositories available to import"
-msgstr "No hay %{providerTitle} repositorios disponibles para importar"
+msgid "No %{header} for this request."
+msgstr "Sin %{header} para esta solicitud."
+
+msgid "No %{providerTitle} repositories found"
+msgstr "No se han encontrado repositorios de %{providerTitle}"
+
+msgid "No Epic"
+msgstr "No hay tarea épica"
msgid "No Label"
msgstr "Sin etiqueta"
@@ -8768,15 +10315,21 @@ msgstr "Sin hito"
msgid "No Tag"
msgstr "Sin etiquetas"
+msgid "No active admin user found"
+msgstr "No se ha encontrado ningún usuario administrador activo"
+
msgid "No activities found"
msgstr "No se han encontrado actividades"
+msgid "No application_settings found"
+msgstr "No se han encontrado application_settings"
+
+msgid "No authentication methods configured."
+msgstr "No hay métodos de autenticación configurados."
+
msgid "No available namespaces to fork the project."
msgstr "No hay espacios de nombres disponibles para hacer un fork el proyecto."
-msgid "No blocking merge requests "
-msgstr ""
-
msgid "No branches found"
msgstr "No se han encontrado ramas"
@@ -8789,9 +10342,6 @@ msgstr "No hay cambios entre %{ref_start}%{source_branch}%{ref_end} y %{ref_star
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "¡No ha sido posible realizar la conexión con un servidor de Gitaly, por favor compruebe sus logs!"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr "No hay imágenes de contenedores guardadas para este proyecto. puede agregar una imagen siguiendo las instrucciones que se muestran más arriba."
-
msgid "No contributions"
msgstr "Sin contribuciones"
@@ -8801,6 +10351,15 @@ msgstr "No se encontraron contribuciones"
msgid "No credit card required."
msgstr "No se necesita tarjeta de crédito."
+msgid "No data found"
+msgstr "No se han encontrado datos"
+
+msgid "No data to display"
+msgstr "No hay ningún dato para mostrar"
+
+msgid "No deployments found"
+msgstr "No se han encontrado despliegues"
+
msgid "No details available"
msgstr "No hay detalles disponibles"
@@ -8825,12 +10384,18 @@ msgstr "No hay archivos"
msgid "No files found."
msgstr "No se han encontrado archivos."
+msgid "No forks available to you."
+msgstr "No hay forks disponibles."
+
msgid "No issues for the selected time period."
msgstr "No hay incidencias para el período de tiempo seleccionado."
msgid "No job trace"
msgstr "No hay registro de trabajo"
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "No hay etiquetas con ese nombre o descripción"
@@ -8877,7 +10442,7 @@ msgid "No repository"
msgstr "No hay repositorio"
msgid "No required pipeline"
-msgstr ""
+msgstr "No se requiere un pipeline"
msgid "No runners found"
msgstr "No se encontraron ejecutores"
@@ -8885,17 +10450,26 @@ msgstr "No se encontraron ejecutores"
msgid "No schedules"
msgstr "No hay programaciones"
+msgid "No starrers matched your search"
+msgstr "No hay ningún favorito que coincida con su búsqueda"
+
msgid "No start date"
msgstr "Sin fecha de inicio"
+msgid "No template"
+msgstr "Ninguna plantilla"
+
msgid "No value set by top-level parent group."
-msgstr ""
+msgstr "Ningún valor establecido por el grupo principal de nivel superior."
msgid "No, directly import the existing email addresses and usernames."
msgstr "No, importe directamente las direcciones de correo electrónico y los nombres de usuario existentes."
msgid "No, not interested right now"
-msgstr ""
+msgstr "No, no estoy interesado ahora mismo"
+
+msgid "Nobody has starred this repository yet"
+msgstr "Nadie ha marcado este repositorio como favorito"
msgid "Node was successfully created."
msgstr "El nodo se ha creado correctamente."
@@ -8909,6 +10483,9 @@ msgstr "Nodos"
msgid "None"
msgstr "Ninguno"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr "Todavía no se han procesado todos los datos, la precisión del gráfico para el período de tiempo seleccionado es limitada."
+
msgid "Not available"
msgstr "No disponible"
@@ -8927,6 +10504,9 @@ msgstr "No hay suficientes datos"
msgid "Not found."
msgstr "No encontrado."
+msgid "Not helpful"
+msgstr "No es útil"
+
msgid "Not now"
msgstr "Ahora no"
@@ -8936,6 +10516,9 @@ msgstr "No está listo todavía. Por favor, inténtalo de nuevo más tarde."
msgid "Not started"
msgstr "No iniciado"
+msgid "Note"
+msgstr "Nota"
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr "Tenga en cuenta que esta invitación se envió a %{mail_to_invite_email}, pero ha iniciado sesión como %{link_to_current_user} con el correo electrónico %{mail_to_current_user}."
@@ -8951,6 +10534,9 @@ msgstr "Nota: Considere preguntarle a su administrador de GitLab que configure %
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "Nota: Considere pedirle a su administrador de GitLab que configure %{github_integration_link}, que le permitirá el inicio de sesión a través de GitHub y le permitirá la conexión de repositorios sin la necesidad de generar un token de acceso personal."
+msgid "Note: the container registry is always visible when a project is public"
+msgstr "Nota: Cuando un proyecto es público, el registro de contenedores siempre es visible"
+
msgid "NoteForm|Note"
msgstr "Nota"
@@ -9047,6 +10633,9 @@ msgstr "Personalizado"
msgid "Notifications"
msgstr "Notificaciones"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr "El propietario del proyecto o del grupo ha deshabilitado las notificaciones"
+
msgid "Notifications off"
msgstr "Notificaciones desactivadas"
@@ -9065,9 +10654,21 @@ msgstr "Número de réplicas de Elasticsearch"
msgid "Number of Elasticsearch shards"
msgstr "Número de shards de Elasticsearch"
+msgid "Number of LOCs per commit"
+msgstr "Número de LOCs por commit"
+
+msgid "Number of commits per MR"
+msgstr "Número de commits por MR"
+
+msgid "Number of files touched"
+msgstr "Número de archivos tocados"
+
msgid "OK"
msgstr "OK"
+msgid "Object Storage replication"
+msgstr "Replicación del almacenamiento de objetos"
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr "El objeto no existe en el servidor o no tiene permisos para acceder a él"
@@ -9083,6 +10684,9 @@ msgstr "Filtrar"
msgid "Ok let's go"
msgstr "Adelante"
+msgid "OmniAuth"
+msgstr "OmniAuth"
+
msgid "Onboarding"
msgstr "Primeros pasos"
@@ -9110,13 +10714,19 @@ msgid "One or more of your Google Code projects cannot be imported into GitLab d
msgstr "No se ha sido posible importar uno o más de sus proyectos de Google Code a GitLab porque utilizan Subversion o Mercurial como sistema de control de versiones, en lugar de Git."
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
+msgstr "Uno o más de sus archivos de dependencias no son compatibles, y la lista de dependencias puede estar incompleta. A continuación se muestra una lista de los tipos de archivos compatibles."
+
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
msgstr ""
msgid "Only admins"
msgstr "Sólo administradores"
msgid "Only admins can delete project"
-msgstr ""
+msgstr "Solo los administradores pueden borrar un proyecto"
msgid "Only mirror protected branches"
msgstr "Sólo replicar ramas protegidas"
@@ -9136,6 +10746,12 @@ msgstr "Solo se importarán los miembros del proyecto. Los miembros del grupo se
msgid "Only these extensions are supported: %{extension_list}"
msgstr "Sólo se soportan estas extensiones: %{extension_list}"
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr "Oops, ¿está seguro?"
@@ -9145,6 +10761,9 @@ msgstr "Abrir"
msgid "Open Documentation"
msgstr "Abrir documentación"
+msgid "Open Selection"
+msgstr "Abrir la selección"
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,11 +10773,17 @@ msgstr "Errores abiertos"
msgid "Open in Xcode"
msgstr "Abrir en Xcode"
+msgid "Open in file view"
+msgstr "Abrir en la vista de archivo"
+
+msgid "Open issues"
+msgstr "Incidencias abiertas"
+
msgid "Open projects"
msgstr "Proyectos abiertos"
msgid "Open raw"
-msgstr ""
+msgstr "Abrir raw"
msgid "Open sidebar"
msgstr "Abrir barra lateral"
@@ -9191,10 +10816,10 @@ msgid "Operations"
msgstr "Operaciones"
msgid "Operations Dashboard"
-msgstr "Panel de operaciones"
+msgstr "Panel de control de operaciones"
msgid "Operations Settings"
-msgstr ""
+msgstr "Configuración de operaciones"
msgid "OperationsDashboard|Add a project to the dashboard"
msgstr "Agregar un proyecto al panel"
@@ -9235,6 +10860,12 @@ msgstr "Otra información"
msgid "Other merge requests block this MR"
msgstr "Otras merge request bloquean este MR"
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr "Nuestra política de privacidad ha cambiado, por favor visite %{privacy_policy_link} para revisar los cambios."
+
msgid "Outbound requests"
msgstr "Peticiones salientes"
@@ -9242,7 +10873,7 @@ msgid "Overview"
msgstr "Resumen"
msgid "Overwrite diverged branches"
-msgstr ""
+msgstr "Sobreescribir ramas divergentes"
msgid "Owned by anyone"
msgstr "Propiedad de cualquier persona"
@@ -9259,6 +10890,18 @@ msgstr "Información del paquete"
msgid "Package was removed"
msgstr "El paquete ha sido eliminado"
+msgid "PackageRegistry|Delete Package Version"
+msgstr "Eliminar la versión del paquete"
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr "Se ha producido un error al obtener los detalles de este paquete."
+
+msgid "PackageRegistry|Unable to load package"
+msgstr "Se ha producido un error al cargar el paquete"
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "Paquetes"
@@ -9281,29 +10924,29 @@ msgid "Pages getting started guide"
msgstr "Guía de inicio de Pages"
msgid "Pagination|Go to first page"
-msgstr ""
+msgstr "Ir a la primera página"
msgid "Pagination|Go to last page"
-msgstr ""
+msgstr "Ir a la última página"
msgid "Pagination|Go to next page"
-msgstr ""
+msgstr "Ir a la siguiente página"
msgid "Pagination|Go to previous page"
-msgstr ""
+msgstr "Ir a la página anterior"
msgid "Pagination|Last »"
msgstr "Último »"
-msgid "Pagination|Next"
-msgstr "Siguiente"
-
-msgid "Pagination|Prev"
-msgstr "Previo"
+msgid "Pagination|Next ›"
+msgstr "Siguiente ›"
msgid "Pagination|« First"
msgstr "« Primero"
+msgid "Pagination|‹ Prev"
+msgstr "‹ Anterior"
+
msgid "Parameter"
msgstr "Parámetro"
@@ -9341,7 +10984,7 @@ msgid "Paste issue link"
msgstr "Pegar el enlace de la incidencia"
msgid "Paste your public SSH key, which is usually contained in the file '~/.ssh/id_ed25519.pub' or '~/.ssh/id_rsa.pub' and begins with 'ssh-ed25519' or 'ssh-rsa'. Don't use your private SSH key."
-msgstr ""
+msgstr "Pegue su clave pública SSH, que generalmente está contenida en el archivo ~/.ssh/id_ed25519.pub o en el archivo '~/ .ssh/id_rsa.pub' y comienza con 'ssh-rsa'. No utilice su clave SSH privada."
msgid "Path"
msgstr "Ruta"
@@ -9368,14 +11011,32 @@ msgid "People without permission will never get a notification and won't be able
msgstr "Las personas no autorizadas nunca recibirán una notificación y no podrán comentar."
msgid "People without permission will never get a notification."
-msgstr ""
+msgstr "Las personas sin permisos nunca recibirán una notificación."
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "Realice opciones avanzadas como cambiar la ruta, transferir o eliminar el grupo."
+msgid "Perform common operations on GitLab project"
+msgstr "Realice operaciones comunes en el proyecto GitLab"
+
msgid "Performance optimization"
msgstr "Optimización del rendimiento"
+msgid "PerformanceBar|Gitaly calls"
+msgstr "Llamadas a Gitaly"
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr "consultas SQL"
+
+msgid "PerformanceBar|trace"
+msgstr "traza"
+
msgid "Permissions"
msgstr "Permisos"
@@ -9392,7 +11053,7 @@ msgid "Personal project creation is not allowed. Please contact your administrat
msgstr "No se permite la creación de proyectos personales. Por favor, póngase en contacto con su administrador con preguntas"
msgid "Phabricator Server Import"
-msgstr ""
+msgstr "Importar servidor Phabricator"
msgid "Phabricator Server URL"
msgstr "URL del servidor de Phabricator"
@@ -9403,12 +11064,21 @@ msgstr "Tareas de Phabricator"
msgid "Pick a name"
msgstr "Escoja un nombre"
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr "Seleccione un nombre para la aplicación, y le proporcionaremos un token %{type} único."
+
msgid "Pin code"
msgstr "Código pin"
msgid "Pipeline"
msgstr "Pipeline"
+msgid "Pipeline %{label}"
+msgstr "Pipeline %{label}"
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr "Pipeline %{label} para \"%{dataTitle}\""
+
msgid "Pipeline Schedule"
msgstr "Programación del Pipeline"
@@ -9475,8 +11145,8 @@ msgstr "Variables"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Personalizado"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
-msgstr "Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
+msgstr "Canal: %{ciStatus}"
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
msgstr "Pipeline: %{ci_status}"
@@ -9499,10 +11169,19 @@ msgstr "Pipelines de la semana pasada"
msgid "Pipelines for last year"
msgstr "Pipelines del año pasado"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr "La configuración de los pipelines para '%{project_name}' se actualizó correctamente."
msgid "Pipelines| to purchase more minutes."
+msgstr "para comprar más minutos."
+
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr "%{namespace_name} ha excedido la cuota de minutos de su pipeline."
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
msgstr ""
msgid "Pipelines|API"
@@ -9527,7 +11206,7 @@ msgid "Pipelines|Loading Pipelines"
msgstr "Cargar pipelines"
msgid "Pipelines|Pipelines will not run anymore on shared Runners."
-msgstr ""
+msgstr "Los pipelines no se ejecutarán en los ejecutores compartidos."
msgid "Pipelines|Project cache successfully reset."
msgstr "Caché del proyecto restablecida correctamente."
@@ -9553,15 +11232,30 @@ msgstr "Este proyecto no está configurado para ejecutar pipelines."
msgid "Pipeline|Commit"
msgstr "Commit"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr "Cobertura"
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr "Duración"
msgid "Pipeline|Existing branch name or tag"
msgstr "Nombre de la rama o etiqueta existente"
+msgid "Pipeline|Key"
+msgstr "Clave"
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "Pipeline"
@@ -9592,6 +11286,9 @@ msgstr "¿Desea detener la ejecución del pipeline #%{pipelineId}?"
msgid "Pipeline|Triggerer"
msgstr "Disparador"
+msgid "Pipeline|Value"
+msgstr "Valor"
+
msgid "Pipeline|Variables"
msgstr "Variables"
@@ -9604,18 +11301,12 @@ msgstr "todos"
msgid "Pipeline|for"
msgstr "para"
-msgid "Pipeline|into"
-msgstr "en"
-
msgid "Pipeline|on"
msgstr "en"
msgid "Pipeline|success"
msgstr "exitósos"
-msgid "Pipeline|with"
-msgstr "con"
-
msgid "Pipeline|with stage"
msgstr "con etapa"
@@ -9646,6 +11337,9 @@ msgstr "Ejecutar todo manualmente"
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr "Por favor %{link_to_register} o %{link_to_sign_in} para comentar"
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "Por favor, acepte los términos del servicio antes de continuar."
@@ -9664,6 +11358,9 @@ msgstr "Por favor, compruebe el archivo de configuración para asegurarse de que
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr "Por favor, compruebe el archivo de configuración para asegurarse de que está disponible y que el fichero YAML es válido"
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr "Por favor, elija una URL de grupo sin caracteres especiales."
@@ -9740,7 +11437,7 @@ msgid "Please upgrade PostgreSQL to version 9.6 or greater. The status of the re
msgstr "Por favor, actualice PostgreSQL a la versión 9.6 o superior. No es posible determinar el estado de la replicación de manera fiable con la versión instalada actualmente."
msgid "Please use this form to report to the admin users who create spam issues, comments or behave inappropriately."
-msgstr ""
+msgstr "Utilice este formulario para informar a los administradores sobre los usuarios que crean spam en las incidencias, en los comentarios o se comportan de una manera inadecuada."
msgid "Please wait a moment, this page will automatically refresh when ready."
msgstr "Espere un momento; esta página se actualizará automáticamente cuando esté lista."
@@ -9751,6 +11448,9 @@ msgstr "Por favor espere mientras nos conectamos a su repositorio."
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "Por favor espere mientras importamos el repositorio por usted."
+msgid "Pods in use"
+msgstr "Pods en uso"
+
msgid "Preferences"
msgstr "Preferencias"
@@ -9758,19 +11458,19 @@ msgid "Preferences saved."
msgstr "Preferencias guardadas."
msgid "Preferences|Behavior"
-msgstr ""
+msgstr "Comportamiento"
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
-msgstr ""
+msgstr "Seleccione que contenido desea ver en la página de resumen de un proyecto."
msgid "Preferences|Customize the appearance of the application header and navigation sidebar."
-msgstr ""
+msgstr "Personalice la apariencia del encabezado de la aplicación y la barra de navegación lateral."
msgid "Preferences|Default dashboard"
-msgstr ""
+msgstr "Panel de control por defecto"
msgid "Preferences|Display time in 24-hour format"
msgstr "Mostrar tiempo en formato 24 horas"
@@ -9779,16 +11479,19 @@ msgid "Preferences|For example: 30 mins ago."
msgstr "Por ejemplo: hace 30 minutos."
msgid "Preferences|Layout width"
-msgstr ""
+msgstr "Ancho de diseño"
msgid "Preferences|Navigation theme"
msgstr "Tema de navegación"
msgid "Preferences|Project overview content"
-msgstr ""
+msgstr "Resumen del contenido del proyecto"
+
+msgid "Preferences|Show whitespace in diffs"
+msgstr "Mostrar espacios en blanco en los diffs"
msgid "Preferences|Syntax highlighting theme"
-msgstr ""
+msgstr "Tema del resaltado de la sintaxis"
msgid "Preferences|These settings will update how dates and times are displayed for you."
msgstr "Estas opciones de configuración actualizarán la forma en la que se muestran la fecha y las hora."
@@ -9797,10 +11500,10 @@ msgid "Preferences|This feature is experimental and translations are not complet
msgstr "Esta función es experimental y las traducciones todavía no están completas"
msgid "Preferences|This setting allows you to customize the appearance of the syntax."
-msgstr ""
+msgstr "Esta opción le permite personalizar el aspecto de la sintaxis."
msgid "Preferences|This setting allows you to customize the behavior of the system layout and default views."
-msgstr ""
+msgstr "Esta configuración le permite personalizar el comportamiento del diseño del sistema y de las vistas predeterminadas."
msgid "Preferences|Time display"
msgstr "Formato de hora"
@@ -9839,11 +11542,17 @@ msgid "Preview changes"
msgstr "Vista previa de los cambios"
msgid "Preview payload"
-msgstr ""
+msgstr "Vista previa del payload"
msgid "Previous Artifacts"
msgstr "Artefactos anteriores"
+msgid "Previous file in diff (MRs only)"
+msgstr "Archivo previo en diff (sólo MRs)"
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr "Discusión previa sin resolver (solo MRs)"
+
msgid "Primary"
msgstr "Principal"
@@ -9880,6 +11589,21 @@ msgstr "Los proyectos privados se pueden crear en su espacio de nombres personal
msgid "Proceed"
msgstr "Continuar"
+msgid "Productivity Analytics"
+msgstr "Análisis de productividad"
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr "Las analíticas de productividad pueden ayudarle a identificar los problemas que retrasan a su equipo"
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr "Ascendente"
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr "Días para fusionar"
+
+msgid "ProductivityAnalytics|Descending"
+msgstr "Descendente"
+
msgid "Profile"
msgstr "Perfil"
@@ -9944,7 +11668,7 @@ msgid "Profiles|Click on icon to activate signin with one of the following servi
msgstr "Haga clic en el icono para activar el inicio de sesión con uno de los siguientes servicios"
msgid "Profiles|Commit email"
-msgstr ""
+msgstr "Dirección de correo electrónico para los commits"
msgid "Profiles|Connect"
msgstr "Conectar"
@@ -9959,7 +11683,7 @@ msgid "Profiles|Current status"
msgstr "Estado actual"
msgid "Profiles|Default notification email"
-msgstr ""
+msgstr "Correo electrónico de notificación por defecto"
msgid "Profiles|Delete Account"
msgstr "Eliminar la cuenta"
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr "Nombre completo"
+msgid "Profiles|Impersonation"
+msgstr "Suplantación"
+
msgid "Profiles|Include private contributions on my profile"
msgstr "Incluir las contribuciones privadas en mi perfil"
@@ -10028,7 +11755,7 @@ msgid "Profiles|No file chosen"
msgstr "No hay ningún archivo seleccionado"
msgid "Profiles|Notification email"
-msgstr ""
+msgstr "Dirección de correo electrónico de notificación"
msgid "Profiles|Organization"
msgstr "Organización"
@@ -10036,11 +11763,14 @@ msgstr "Organización"
msgid "Profiles|Path"
msgstr "Ruta"
+msgid "Profiles|Personal Access"
+msgstr "Acceso personal"
+
msgid "Profiles|Position and size your new avatar"
msgstr "Posición y tamaño de su nuevo avatar"
msgid "Profiles|Primary email"
-msgstr ""
+msgstr "Dirección de correo electrónico principal"
msgid "Profiles|Private contributions"
msgstr "Contribuciones privadas"
@@ -10052,7 +11782,7 @@ msgid "Profiles|Public Avatar"
msgstr "Avatar público"
msgid "Profiles|Public email"
-msgstr ""
+msgstr "Dirección de correo electrónico pública"
msgid "Profiles|Remove avatar"
msgstr "Eliminar avatar"
@@ -10066,6 +11796,9 @@ msgstr "Inicio de sesión social"
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "Algunas opciones no están disponibles para cuentas LDAP"
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr "Cuéntenos más sobre usted en menos de 250 caracteres"
@@ -10097,7 +11830,7 @@ msgid "Profiles|Type your %{confirmationValue} to confirm:"
msgstr "Escribe tu %{confirmationValue} para confirmar:"
msgid "Profiles|Typically starts with \"ssh-ed25519 …\" or \"ssh-rsa …\""
-msgstr ""
+msgstr "Normalmente comienza con \"ssh-ed25519 …\" o \"ssh-rsa …\""
msgid "Profiles|Update profile settings"
msgstr "Actualizar la configuración del perfil"
@@ -10171,6 +11904,12 @@ msgstr "Su estado"
msgid "Profiles|e.g. My MacBook key"
msgstr "por ejemplo, mi clave MacBook"
+msgid "Profiles|impersonation"
+msgstr "Suplantación"
+
+msgid "Profiles|personal access"
+msgstr "Acceso personal"
+
msgid "Profiles|username"
msgstr "Nombre de usuario"
@@ -10216,6 +11955,9 @@ msgstr "Proyecto ‘%{project_name}’ fue actualizado satisfactoriamente."
msgid "Project Badges"
msgstr "Insignias de proyecto"
+msgid "Project Files"
+msgstr "Archivos del proyecto"
+
msgid "Project ID"
msgstr "ID de proyecto"
@@ -10225,6 +11967,9 @@ msgstr "URL del proyecto"
msgid "Project access must be granted explicitly to each user."
msgstr "El acceso al proyecto debe concederse explícitamente a cada usuario."
+msgid "Project already created"
+msgstr "El proyecto ya existe"
+
msgid "Project and wiki repositories"
msgstr "Repositorios de proyecto y wiki"
@@ -10276,9 +12021,6 @@ msgstr "Proyectos subidos"
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr "Se modificará el nivel de visibilidad del proyecto para hacerlo coincidir con las reglas del espacio de nombres al transferirlo a un grupo."
-msgid "Project:"
-msgstr "Proyecto:"
-
msgid "Project: %{name}"
msgstr "Proyecto: %{name}"
@@ -10321,6 +12063,12 @@ msgstr "Ir a su fork"
msgid "ProjectOverview|Star"
msgstr "Marcar como favorito"
+msgid "ProjectOverview|Starrer"
+msgstr "Favorito"
+
+msgid "ProjectOverview|Starrers"
+msgstr "Favoritos"
+
msgid "ProjectOverview|Unstar"
msgstr "Desmarcar como favorito"
@@ -10339,21 +12087,57 @@ msgstr "o grupo"
msgid "ProjectSelect|Search for project"
msgstr "Buscar proyecto"
+msgid "ProjectService|%{service_title}: status off"
+msgstr "%{service_title}: estado desactivado"
+
+msgid "ProjectService|%{service_title}: status on"
+msgstr "%{service_title}: estado activado"
+
+msgid "ProjectService|Integrations"
+msgstr "Integraciones"
+
+msgid "ProjectService|Last edit"
+msgstr "Última edición"
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr "Realice operaciones comunes en el proyecto GitLab: %{project_name}"
+
+msgid "ProjectService|Project services"
+msgstr "Servicios del proyecto"
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr "Los servicios de proyecto le permiten integrar GitLab con otras aplicaciones"
+
+msgid "ProjectService|Service"
+msgstr "Servicio"
+
+msgid "ProjectService|Services"
+msgstr "Servicios"
+
+msgid "ProjectService|Settings"
+msgstr "Configuración"
+
+msgid "ProjectService|To set up this service:"
+msgstr "Para configurar este servicio:"
+
msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr "Opciones adicionales de los merge request que influyen cómo y cuándo se realizarán los merges"
msgid "ProjectSettings|All discussions must be resolved"
msgstr "Todas las discusiones deben ser resueltas"
-msgid "ProjectSettings|Allow merge trains"
-msgstr ""
-
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
msgstr ""
msgid "ProjectSettings|Badges"
msgstr "Insignias"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "Póngase en contacto con el administrador para cambiar esta configuración."
@@ -10525,12 +12309,60 @@ msgstr "Lo sentimos, no hay proyectos que coincidan con su búsqueda"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Esta función requiere que el navegador permita la utilización de almacenamiento local (localStorage)"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr "En blanco"
+
+msgid "ProjectsNew|Blank project"
+msgstr "Proyecto en blanco"
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr "Crear desde una plantilla"
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr "Importar"
+
+msgid "ProjectsNew|Import project"
+msgstr "Importar proyecto"
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr "Inicializar el repositorio con un archivo README"
+
+msgid "ProjectsNew|No import options available"
+msgstr "No hay opciones de importación disponibles"
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr "Por favor, espere un momento, está página se refrescara automáticamente cuando este lista."
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr "Descripción del proyecto %{tag_start}(opcional)%{tag_end}"
+
+msgid "ProjectsNew|Template"
+msgstr "Plantilla"
+
+msgid "ProjectsNew|Visibility Level"
+msgstr "Nivel de visibilidad"
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr "El valor del campo listen_address en el fichero config/gitlab.yml de Prometheus no es una URI válida"
+
msgid "PrometheusAlerts|Add alert"
msgstr "Añadir alerta"
-msgid "PrometheusAlerts|Alert set"
-msgstr "Establecer alerta"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "Editar alerta"
@@ -10546,9 +12378,6 @@ msgstr "Se ha producido un error al recuperar la alerta"
msgid "PrometheusAlerts|Error saving alert"
msgstr "Se ha producido un error al guardar la alerta"
-msgid "PrometheusAlerts|No alert set"
-msgstr "No hay ninguna alerta establecida"
-
msgid "PrometheusAlerts|Operator"
msgstr "Operador"
@@ -10582,6 +12411,9 @@ msgstr "Las métricas comunes más son monitorizadas automáticamente en base a
msgid "PrometheusService|Custom metrics"
msgstr "Métricas personalizadas"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr "Habilite Prometheus para definir métricas personalizadas, utilizando cualquiera de las opciones anteriores"
@@ -10612,6 +12444,9 @@ msgstr "Más información"
msgid "PrometheusService|New metric"
msgstr "Nueva métrica"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "URL Base de Prometheus, como http://prometheus.example.com/"
@@ -10636,6 +12471,12 @@ msgstr "Esperando su primera despliegue en un entorno para buscar métricas comu
msgid "Promote"
msgstr "Promocionar"
+msgid "Promote issue to an epic"
+msgstr "Promocionar la incidencia a una tarea épica"
+
+msgid "Promote issue to an epic."
+msgstr "Promocionar la incidencia a una tarea épica."
+
msgid "Promote these project milestones into a group milestone."
msgstr "Promocionar estos hitos del proyecto a hitos de grupo."
@@ -10654,6 +12495,9 @@ msgstr "El proyecto no pertenecen a un grupo."
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr "Ha fallado la promoción - %{message}"
+msgid "Promoted issue to an epic."
+msgstr "Incidencia promocionada a tarea épica."
+
msgid "Promotions|Don't show me this again"
msgstr "No mostrar este mensaje de nuevo"
@@ -10684,6 +12528,9 @@ msgstr "Entornos protegidos"
msgid "Protected Tag"
msgstr "Etiqueta protegida"
+msgid "Protected branches"
+msgstr "Ramas protegidas"
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} podrá modificarse por los desarrolladores. ¿Estás seguro de que desea continuar?"
@@ -10759,6 +12606,9 @@ msgstr "Pipelines públicos"
msgid "Pull"
msgstr "Pull"
+msgid "Purchase more minutes"
+msgstr "Comprar más minutos"
+
msgid "Push"
msgstr "Push"
@@ -10841,7 +12691,7 @@ msgid "Query"
msgstr "Consulta"
msgid "Query is valid"
-msgstr ""
+msgstr "La consulta es válida"
msgid "Quick actions can be used in the issues description and comment boxes."
msgstr "Se pueden utilizar acciones rápidas en la descripción de las incidencias y en los cuadros de texto de los comentarios."
@@ -10852,6 +12702,9 @@ msgstr "README"
msgid "Rake Tasks Help"
msgstr "Ayuda sobre las tareas de Rake"
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Leer más"
@@ -10861,9 +12714,18 @@ msgstr "Lea más acerca de los entornos"
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "Lea más sobre los permisos de este proyecto <strong>%{link_to_help}</strong>"
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "Características en tiempo real"
+msgid "Rebase"
+msgstr "Rebase"
+
+msgid "Rebase in progress"
+msgstr "Rebase en progreso"
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr "Recibe alertas desde los servidores de Prometheus configurados manualmente."
@@ -10873,6 +12735,9 @@ msgstr "Recibir notificaciones acerca de su propia actividad"
msgid "Recent"
msgstr "Reciente"
+msgid "Recent Activity"
+msgstr "Actividad reciente"
+
msgid "Recent Project Activity"
msgstr "Actividad reciente del proyecto"
@@ -10900,7 +12765,7 @@ msgstr[0] "Actualizar en un segundo para mostrar el estado actualizado..."
msgstr[1] "Actualizar en %d segundos para mostrar el estado actualizado..."
msgid "Regenerate instance ID"
-msgstr ""
+msgstr "Regenerar el lD de la instancia"
msgid "Regenerate key"
msgstr "Regenerar clave"
@@ -10909,7 +12774,7 @@ msgid "Regenerate recovery codes"
msgstr "Regenerar los códigos de recuperación"
msgid "Regenerating the instance ID can break integration depending on the client you are using."
-msgstr ""
+msgstr "La regeneración del id de una instancia puede interrumpir la integración según que cliente esté utilizando."
msgid "Regex pattern"
msgstr "Patrón regex"
@@ -10941,9 +12806,6 @@ msgstr "Registrarse con la aplicación de dos factores"
msgid "Registration"
msgstr "Registro"
-msgid "Registry"
-msgstr "Registro"
-
msgid "Related Deployed Jobs"
msgstr "Trabajos Desplegados Relacionados"
@@ -10971,6 +12833,9 @@ msgstr "Versiones"
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr "Recordar mis datos acceso"
+
msgid "Remind later"
msgstr "Recordar después"
@@ -10980,9 +12845,15 @@ msgstr "El objeto remoto no tiene una ruta absoluta."
msgid "Remove"
msgstr "Eliminar"
+msgid "Remove %{displayReference}"
+msgstr "Eliminar %{displayReference}"
+
msgid "Remove Runner"
msgstr "Eliminar ejecutor"
+msgid "Remove Zoom meeting"
+msgstr "Eliminar la reunión de Zoom"
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr "Elimine todas las aprobaciones en un merge request cuando se realicen nuevos commits a la rama de origen"
@@ -11004,6 +12875,9 @@ msgstr "Eliminar el usuario asignado"
msgid "Remove avatar"
msgstr "Eliminar avatar"
+msgid "Remove card"
+msgstr "Eliminar la tarjeta"
+
msgid "Remove child epic from an epic"
msgstr "Eliminar la tarea épica hija de una tarea épica"
@@ -11011,7 +12885,13 @@ msgid "Remove due date"
msgstr "Eliminar la fecha de vencimiento"
msgid "Remove fork relationship"
-msgstr ""
+msgstr "Eliminar la relación del fork"
+
+msgid "Remove from board"
+msgstr "Eliminar del tablero"
+
+msgid "Remove from epic"
+msgstr "Eliminar de la tarea épica"
msgid "Remove group"
msgstr "Eliminar grupo"
@@ -11019,6 +12899,9 @@ msgstr "Eliminar grupo"
msgid "Remove milestone"
msgstr "Eliminar el hito"
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "Eliminar prioridad"
@@ -11028,30 +12911,75 @@ msgstr "Eliminar proyecto"
msgid "Remove spent time"
msgstr "Eliminar el tiempo gastado"
+msgid "Remove stage"
+msgstr "Eliminar la etapa"
+
msgid "Remove time estimate"
msgstr "Eliminar el tiempo estimado"
msgid "Removed"
msgstr "Eliminado"
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr "Eliminado %{assignee_text} %{assignee_references}."
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr "Eliminada %{label_references} %{label_text}."
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr "Eliminado %{milestone_reference} hitos."
+
msgid "Removed %{type} with id %{id}"
msgstr "Eliminado %{type} con id %{id}"
+msgid "Removed all labels."
+msgstr "Eliminar todas las etiquetas."
+
+msgid "Removed an issue from an epic."
+msgstr "Se eliminó la incidencia de la tarea épica."
+
msgid "Removed group can not be restored!"
msgstr "¡No se puede restaurar un grupo eliminado!"
+msgid "Removed parent epic %{epic_ref}."
+msgstr "Eliminada la tarea épica padre %{epic_ref}."
+
msgid "Removed projects cannot be restored!"
msgstr "¡No se pueden restaurar los proyectos eliminados!"
+msgid "Removed spent time."
+msgstr "Eliminar el tiempo empleado."
+
+msgid "Removed the due date."
+msgstr "Eliminada la fecha de vencimiento."
+
+msgid "Removed time estimate."
+msgstr "Eliminado el tiempo estimado."
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr "Eliminar %{assignee_text} %{assignee_references}."
+
msgid "Removes %{epic_ref} from child epics."
msgstr "Eliminar %{epic_ref} de las tareas épicas hijas."
+msgid "Removes %{label_references} %{label_text}."
+msgstr "Eliminar %{label_references} %{label_text}."
+
msgid "Removes %{milestone_reference} milestone."
msgstr "Elimina el %{milestone_reference} hito."
msgid "Removes all labels."
msgstr "Elimina todas las etiquetas."
+msgid "Removes an issue from an epic."
+msgstr "Eliminar una incidencia de una tarea épica."
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr "Elimina la tarea épica padre %{epic_ref}."
+
msgid "Removes spent time."
msgstr "Elimina el tiempo gastado."
@@ -11085,6 +13013,15 @@ msgstr "Reabrir la tarea épica"
msgid "Reopen milestone"
msgstr "Reabrir hito"
+msgid "Reopen this %{quick_action_target}"
+msgstr "Reabrir este%{quick_action_target}"
+
+msgid "Reopened this %{quick_action_target}."
+msgstr "Reabrió este %{quick_action_target}."
+
+msgid "Reopens this %{quick_action_target}."
+msgstr "Reabrir este %{quick_action_target}."
+
msgid "Repair authentication"
msgstr "Reparar la autenticación"
@@ -11094,17 +13031,26 @@ msgstr "Reemplazar"
msgid "Replace all label(s)"
msgstr "Reemplazar todas las etiquetas"
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr "Responder por correo electrónico"
+
msgid "Reply to comment"
msgstr "Responder a este comentario"
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr "Responda a este correo directamente o %{view_it_on_gitlab}."
+msgid "Reply..."
+msgstr "Responder..."
+
msgid "Repo by URL"
msgstr "Repo por URL"
msgid "Report abuse to admin"
-msgstr ""
+msgstr "Informar de un abuso al administrador"
msgid "Reporting"
msgstr "Informes"
@@ -11166,6 +13112,9 @@ msgstr "no hay cambios en los resultados de las pruebas"
msgid "Repository"
msgstr "Repositorio"
+msgid "Repository Graph"
+msgstr "Gráfico de repositorio"
+
msgid "Repository Settings"
msgstr "Configuración del repositorio"
@@ -11190,9 +13139,15 @@ msgstr "Mantenimiento del repositorio"
msgid "Repository mirror"
msgstr "Replica del repositorio"
+msgid "Repository static objects"
+msgstr "Repositorio de objetos estáticos"
+
msgid "Repository storage"
msgstr "Almacenamiento del repositorio"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr "Repositorio: %{counter_repositories} / wikis:%{counter_wikis} / Artefactos construidos: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "Seleccionar"
@@ -11205,6 +13160,9 @@ msgstr "Solicitado %{time_ago}"
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "Requerir que todos los usuarios en este grupo configuren la autenticación de dos factores"
@@ -11220,6 +13178,9 @@ msgstr "Requiere una contraseña de usuario para aprobar"
msgid "Require users to prove ownership of custom domains"
msgstr "Requerir a los usuarios desmostrar la propiedad de los dominios personalizados"
+msgid "Required argument 'targetElement' is missing"
+msgstr "Falta el argumento requerido 'targetElement'"
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] "Requiere aprobación de %{names}."
@@ -11231,11 +13192,14 @@ msgstr[0] "Requiere aprobación."
msgstr[1] "Requiere %d aprobaciones más."
msgid "Resend confirmation email"
-msgstr ""
+msgstr "Reenviar correo electrónico de confirmación"
msgid "Resend invite"
msgstr "Reenviar invitación"
+msgid "Resend it"
+msgstr "Reenviarlo"
+
msgid "Reset authorization key"
msgstr "Reiniciar la clave de autorización"
@@ -11251,11 +13215,17 @@ msgstr "Reiniciar la clave"
msgid "Reset runners registration token"
msgstr "Reinicializar el token de registro del runner"
+msgid "Reset template"
+msgstr "Restablecer plantilla"
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr "Al restablecer la clave de autorización se invalidará la clave anterior. Las configuraciones de alerta existentes deberán actualizarse con la nueva clave."
-msgid "Resolve all discussions in new issue"
-msgstr "Resolver todas las discusiones en una nueva incidencia"
+msgid "Resolve all threads in new issue"
+msgstr "Resolver todo los hilos en una nueva incidencia"
msgid "Resolve conflicts on source branch"
msgstr "Resolver conflictos en la rama origen"
@@ -11263,6 +13233,9 @@ msgstr "Resolver conflictos en la rama origen"
msgid "Resolve discussion"
msgstr "Resolver discusión"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr "Resuelto"
@@ -11309,6 +13282,9 @@ msgid "Restart Terminal"
msgstr "Reiniciar el terminal"
msgid "Restrict access by IP address"
+msgstr "Restringir acceso por dirección IP"
+
+msgid "Restrict membership by email"
msgstr ""
msgid "Resume"
@@ -11327,7 +13303,7 @@ msgid "Retry this job in order to create the necessary resources."
msgstr "Vuelva a intentar este trabajo para crear los recursos necesarios."
msgid "Retry update"
-msgstr ""
+msgstr "Reintentar la actualización"
msgid "Retry verification"
msgstr "Reintentar la verificación"
@@ -11376,6 +13352,9 @@ msgstr "Eliminar el"
msgid "Roadmap"
msgstr "Hoja de ruta"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "Ejecutar los pipelines de CI/CD para los repositorios externos"
@@ -11436,8 +13415,8 @@ msgstr "Página de ejecutores"
msgid "Runners page."
msgstr "Página de ejecutores."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "Ha utilizado todos los minutos de sus ejecutores compartidos en el pipeline."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "En ejecución"
@@ -11511,6 +13490,9 @@ msgstr "Guardar programación del pipeline"
msgid "Save variables"
msgstr "Guardar variables"
+msgid "Saving"
+msgstr "Guardando"
+
msgid "Saving project."
msgstr "Guardar proyecto."
@@ -11520,6 +13502,9 @@ msgstr "Programar un nuevo pipeline"
msgid "Scheduled"
msgstr "Programado"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "Programaciones"
@@ -11541,15 +13526,30 @@ msgstr "Tableros de incidencias con alcance limitado"
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr "Desplazar hacia abajo"
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr "Desplácese hasta <strong>Google Code Project</strong> y active el selector de la derecha."
+msgid "Scroll left"
+msgstr "Desplazar hacia la izquierda"
+
+msgid "Scroll right"
+msgstr "Desplazar hacia la derecha"
+
msgid "Scroll to bottom"
msgstr "Desplazar hacia abajo"
msgid "Scroll to top"
msgstr "Desplazar hacia arriba"
+msgid "Scroll up"
+msgstr "Desplazar hacia arriba"
+
msgid "Search"
msgstr "Buscar"
@@ -11637,9 +13637,76 @@ msgstr "en este grupo"
msgid "SearchAutocomplete|in this project"
msgstr "en este proyecto"
+msgid "SearchCodeResults|in"
+msgstr "en"
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr "de %{link_to_project}"
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr "Mostrando %{count} %{scope} para \"%{term}\""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr "Mostrando %{from} - %{to} de %{count} %{scope} para \"%{term}\""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] "comentario"
+msgstr[1] "comentarios"
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] "commit"
+msgstr[1] "commits"
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] "incidencia"
+msgstr[1] "incidencias"
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] "merge request"
+msgstr[1] "merge requests"
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] "hito"
+msgstr[1] "hitos"
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] "proyecto"
+msgstr[1] "proyectos"
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] "fragmento de código"
+msgstr[1] "fragmentos de código"
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] "usuario"
+msgstr[1] "usuarios"
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr "Puestos actualmente en uso"
@@ -11652,6 +13719,9 @@ msgstr "Secreto"
msgid "Security"
msgstr "Seguridad"
+msgid "Security & Compliance"
+msgstr "Seguridad y cumplimiento"
+
msgid "Security Dashboard"
msgstr "Panel de control de seguridad"
@@ -11667,24 +13737,48 @@ msgstr "Se ha producido un error al obtener los datos del panel de control. Por
msgid "Security Dashboard|Issue Created"
msgstr "Incidencia creada"
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr "Comentario agregado a '%{vulnerabilityName}'"
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr "Comentario eliminado en '%{vulnerabilityName}'"
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr "Comentario editado en '%{vulnerabilityName}'"
+
msgid "Security Reports|Create issue"
msgstr "Crear incidencia"
msgid "Security Reports|Dismiss vulnerability"
msgstr "Informes de seguridad | Descartar vulnerabilidad"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr "Descartado '%{vulnerabilityName}'"
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr "Obtenga más información sobre cómo configurar su panel de control"
msgid "Security Reports|More info"
msgstr "Más información"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr "Oops, algo no parece correcto."
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr "Se ha producido un error añadir el comentario."
+
msgid "Security Reports|There was an error creating the issue."
msgstr "Se ha producido un error al crear la incidencia."
msgid "Security Reports|There was an error creating the merge request."
msgstr "Se ha producido un error al crear el merge request."
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11710,6 +13804,9 @@ msgid "SecurityDashboard| The security dashboard displays the latest security re
msgstr "Panel de control de seguridad muestra el último informe de seguridad. Úselo para encontrar y corregir vulnerabilidades."
msgid "SecurityDashboard|Confidence"
+msgstr "Confianza"
+
+msgid "SecurityDashboard|Hide dismissed"
msgstr ""
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
@@ -11719,13 +13816,13 @@ msgid "SecurityDashboard|Pipeline %{pipelineLink} triggered"
msgstr "Activado el pipeline %{pipelineLink}"
msgid "SecurityDashboard|Project"
-msgstr ""
+msgstr "Proyecto"
msgid "SecurityDashboard|Report type"
-msgstr ""
+msgstr "Tipo de informe"
msgid "SecurityDashboard|Severity"
-msgstr ""
+msgstr "Gravedad"
msgid "See metrics"
msgstr "Ver métricas"
@@ -11739,6 +13836,9 @@ msgstr "Seleccionar"
msgid "Select Archive Format"
msgstr "Seleccionar formato de archivo"
+msgid "Select GitLab project to link with your Slack team"
+msgstr "Seleccione el proyecto GitLab para vincular con su equipo de Slack"
+
msgid "Select Page"
msgstr "Seleccionar página"
@@ -11748,12 +13848,18 @@ msgstr "Seleccione un archivo en la barra lateral izquierda para comenzar la edi
msgid "Select a group to invite"
msgstr "Seleccione un grupo a invitar"
+msgid "Select a label"
+msgstr "Seleccione una etiqueta"
+
msgid "Select a namespace to fork the project"
msgstr "Seleccione un espacio de nombres para hacer un fork del proyecto"
msgid "Select a new namespace"
msgstr "Seleccione un nuevo espacio de nombres"
+msgid "Select a project"
+msgstr "Seleccione un proyecto"
+
msgid "Select a project to read Insights configuration file"
msgstr "Seleccione un proyecto para leer el archivo de configuración de Insights"
@@ -11766,6 +13872,9 @@ msgstr "Seleccione una plantilla de repositorio"
msgid "Select a timezone"
msgstr "Selecciona una zona horaria"
+msgid "Select all"
+msgstr "Seleccionar todo"
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "Seleccione un clúster existente de Kubernetes o cree un cluster nuevo"
@@ -11773,10 +13882,19 @@ msgid "Select branch/tag"
msgstr "Selecciona rama/etiqueta"
msgid "Select group or project"
+msgstr "Seleccione un grupo o proyecto"
+
+msgid "Select labels"
+msgstr "Seleccione las etiquetas"
+
+msgid "Select merge moment"
msgstr ""
-msgid "Select members to invite"
-msgstr "Seleccione los miembros a invitar"
+msgid "Select milestone"
+msgstr "Seleccione los hitos de proyecto"
+
+msgid "Select private project"
+msgstr "Seleccione el proyecto privado"
msgid "Select project"
msgstr "Seleccionar proyecto"
@@ -11787,6 +13905,9 @@ msgstr "Seleccione el proyecto y la zona para elegir el tipo de máquina"
msgid "Select project to choose zone"
msgstr "Seleccione el proyecto para elegir la zona"
+msgid "Select projects"
+msgstr "Seleccione los proyectos"
+
msgid "Select projects you want to import."
msgstr "Seleccione qué proyectos desea importar."
@@ -11802,17 +13923,23 @@ msgstr "Seleccione la rama que desea establecer como predeterminada para este pr
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr "Seleccione el período de tiempo"
+
+msgid "Select user"
+msgstr "Seleccione el usuario"
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr "Los niveles seleccionados no pueden ser utilizados por usuarios que no tengan permisos de admnistración para grupos, proyectos o fragmentos de código. Si el nivel público está restringido, los perfiles de usuario solo son visibles para los usuarios registrados."
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "Al seleccionar un usuario de GitLab añadirá un link al usuario en la descripción de las incidencias, así como también, en los comentarios (por ejemplo, \"Por <a href=\"#\">@johnsmith</a>\"). Al hacer esto, también asociará y asignará dichas incidencias y comentarios con el usuario seleccionado."
-msgid "Send an email notification to Developers."
-msgstr "Enviar una notificación por correo electrónico a los desarrolladores."
+msgid "Send a separate email notification to Developers."
+msgstr "Enviar una notificación separada por correo electrónico a los desarrolladores."
msgid "Send confirmation email"
-msgstr ""
+msgstr "Enviar un correo electrónico de confirmación"
msgid "Send email"
msgstr "Enviar correo electrónico"
@@ -11835,6 +13962,12 @@ msgstr "Separar temas con comas."
msgid "September"
msgstr "Septiembre"
+msgid "SeriesFinalConjunction|and"
+msgstr "y"
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr "El servidor solo admite API por lotes, actualice su cliente Git LFS a la versión 1.0.1 o superior."
@@ -11862,6 +13995,9 @@ msgstr "Pods de Kubernetes"
msgid "ServerlessDetails|More information"
msgstr "Más información"
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr "Número de pods de Kubernetes en uso a lo largo del tiempo según la necesidad."
@@ -11892,9 +14028,21 @@ msgstr "Obtenga más información sobre Serverless"
msgid "Serverless|No functions available"
msgstr "No hay funciones disponibles"
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr "Las funciones enumeradas en el archivo %{startTag}serverless.yml%{endTag} no coinciden con el espacio de nombres de su clúster."
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr "Actualmente no hay datos de función disponibles desde Knative. Esto puede deberse por a múltiples razones, incluyendo:"
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr "Su archivo %{startTag}.gitlab-ci.yml%{endTag} no está configurado correctamente."
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr "Su repositorio no tiene un archivo correspondiente %{startTag}serverless.yml%{endTag}."
+
msgid "Service"
msgstr "Servicio"
@@ -11913,6 +14061,9 @@ msgstr "Duración de la sesión (minutos)"
msgid "Session expiration, projects limit and attachment size."
msgstr "Caducidad de la sesión, límite de proyectos y tamaño de los archivos adjuntos."
+msgid "Set %{epic_ref} as parent epic."
+msgstr "Establecer %{epic_ref} cómo tarea épica principal."
+
msgid "Set a default template for issue descriptions."
msgstr "Establecer una plantilla predeterminada para las descripciones de las incidencias."
@@ -11946,12 +14097,24 @@ msgstr "Establecer una nueva contraseña"
msgid "Set notification email for abuse reports."
msgstr "Establecer una dirección de correo electrónico de notificación para los informes de abuso de uso."
+msgid "Set parent epic to an epic"
+msgstr "Establecer la tarea épica principal a una tarea épica"
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "Establezca los requisitos para que un usuario pueda iniciar sesión. Habilite la autenticación basada en dos factores."
+msgid "Set target branch"
+msgstr "Establecer la rama de destino a"
+
+msgid "Set target branch to %{branch_name}."
+msgstr "Establecer la rama de destino a %{branch_name}."
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr "Establezca el tiempo de caducidad predeterminado para los artefactos generados en cada trabajo. 0 para una caducidad ilimitada. La unidad predeterminada son segundos, pero puede definir una alternativa. Por ejemplo: <code>4 minutos 2 segundos</code>, <code>2h42min</code>."
+msgid "Set the due date to %{due_date}."
+msgstr "Establecer la fecha de vencimiento a %{due_date}."
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr "Establezca la duración durante la cual los trabajos se considerarán antiguos y vencidos. Una vez pasado ese tiempo, los trabajos se archivarán y ya no se podrá volver a reintentar su ejecución. Establezca este campo como nulo para que los trabajos no caduquen. Este valor, no debe ser inferior a 1 día, por ejemplo: <code>15 días</code>, <code>1 mes</code>, <code>2 años</code>."
@@ -11961,18 +14124,24 @@ msgstr "Establecer el tamaño máximo de archivo para los artefactos de cada tra
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr "Establece el número máximo de minutos de pipeline que un grupo puede utilize en los ejecutores compartidos mensualmente. Establezca esta valor a 0 para obtener un número ilimitado."
+msgid "Set the milestone to %{milestone_reference}."
+msgstr "Establecer el hito a %{milestone_reference}."
+
msgid "Set time estimate"
msgstr "Establecer el tiempo estimado"
+msgid "Set time estimate to %{time_estimate}."
+msgstr "Establecer el tiempo estimado a %{time_estimate}."
+
msgid "Set up CI/CD"
msgstr "Configurar CI/CD"
+msgid "Set up a %{type} Runner automatically"
+msgstr "Configurar un %{type} ejecutor automáticamente"
+
msgid "Set up a %{type} Runner manually"
msgstr "Configurar un %{type} ejecutor manualmente"
-msgid "Set up a specific Runner automatically"
-msgstr "Configurar un ejecutor específico automáticamente"
-
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr "Configure las afirmaciones/atributos/reclamaciones (correo electrónico, first_name, last_name) y el NameID según %{docsLinkStart}la documentación %{icon}%{docsLinkEnd}"
@@ -11983,11 +14152,14 @@ msgid "Set up new password"
msgstr "Establecer una nueva contraseña"
msgid "Set up your project to automatically push and/or pull changes to/from another repository. Branches, tags, and commits will be synced automatically."
-msgstr ""
+msgstr "Configure su proyecto para hacer push o pull de los cambios de manera automática a/desde otro repositorio. Los branchs, los tags y los commits se sincronizarán automáticamente."
msgid "Set weight"
msgstr "Establecer el peso"
+msgid "Set weight to %{weight}."
+msgstr "Establecer el peso a %{weight}."
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "establecer una contraseña"
@@ -12015,6 +14187,12 @@ msgstr "Lo sentimos, no hemos podido establecer su estado. Por favor, inténtelo
msgid "SetStatusModal|What's your status?"
msgstr "¿Cuál es su estado?"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr "Establecer %{epic_ref} cómo tarea épica principal."
+
+msgid "Sets target branch to %{branch_name}."
+msgstr "Establece la rama de destino a %{branch_name}."
+
msgid "Sets the due date to %{due_date}."
msgstr "Establecer la fecha de vencimiento a %{due_date}."
@@ -12072,9 +14250,15 @@ msgstr "Mostrar solo proyectos archivados"
msgid "Show command"
msgstr "Mostrar comando"
+msgid "Show comments"
+msgstr "Mostrar los comentarios"
+
msgid "Show comments only"
msgstr "Mostrar solo los comentarios"
+msgid "Show commit description"
+msgstr "Mostrar la descripción del commit"
+
msgid "Show complete raw log"
msgstr "Mostrar el registro completo sin procesar"
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "Mostrando %d evento"
msgstr[1] "Mostrando %d eventos"
+msgid "Showing Latest Version"
+msgstr "Mostrar la última versión"
+
+msgid "Showing Version #%{versionNumber}"
+msgstr "Mostrando la versión #%{versionNumber}"
+
+msgid "Showing all issues"
+msgstr "Mostrar todas las incidencias"
+
+msgid "Showing last %{size} of log -"
+msgstr "Mostrando los últimos %{size} del registro -"
+
msgid "Side-by-side"
msgstr "En paralelo"
@@ -12128,6 +14324,9 @@ msgstr "Inicie sesión mediante una tarjeta inteligente"
msgid "Sign in via 2FA code"
msgstr "Inicie sesión mediante un código 2FA"
+msgid "Sign in with Google"
+msgstr "Iniciar sesión con Google"
+
msgid "Sign in with Single Sign-On"
msgstr "Inicie sesión mediante inicio de sesión único"
@@ -12140,6 +14339,9 @@ msgstr "Cerrar sesión"
msgid "Sign out & Register"
msgstr "Cerrar la sesión y regístrarse"
+msgid "Sign up"
+msgstr "Regístrese"
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr "¡Registro creado correctamente! Por favor, confirme su dirección de correo electrónico para iniciar sesión."
@@ -12149,11 +14351,17 @@ msgstr "Restricciones de inicio de sesión"
msgid "Sign-up restrictions"
msgstr "Restricciones de registro"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr "El nombre es demasiado largo (el tamaño máximo permitido es de %{max_length} caracteres)."
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr "Los apellidos son demasiado largos (el tamaño máximo permitido es de %{max_length} caracteres)."
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
-msgstr ""
+msgstr "El nombre es demasiado largo (el tamaño máximo permitido es de %{max_length} caracteres)."
msgid "SignUp|Username is too long (maximum is %{max_length} characters)."
-msgstr ""
+msgstr "El nombre de usuario es demasiado largo (el tamaño máximo permitido es de %{max_length} caracteres)."
msgid "Signed in"
msgstr "Sesión iniciada"
@@ -12171,7 +14379,10 @@ msgid "Similar issues"
msgstr "Incidencias similares"
msgid "Single or combined queries"
-msgstr ""
+msgstr "Consultas simples o combinadas"
+
+msgid "Site ID"
+msgstr "Id del sitio"
msgid "Size"
msgstr "Tamaño"
@@ -12191,6 +14402,21 @@ msgstr "Aplicación Slack"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr "La integración con Slack le permite interactuar con GitLab mediante comandos slash en una ventana de chat."
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "Más lento, pero se asegura de que el espacio de trabajo del proyecto sea prístino, ya que se clona el repositorio desde cero para cada trabajo"
@@ -12224,9 +14450,15 @@ msgstr "No hay fragmentos de código que mostrar."
msgid "SnippetsEmptyState|They can be either public or private."
msgstr "Pueden ser públicos o privados."
+msgid "Snowplow"
+msgstr "Snowplow"
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr "Algunos servidores de correo electrónico no permiten sobreescribir el nombre del remitente del correo electrónico. Habilite esta opción para incluir el nombre del autor de la incidencia, del merge request o del comentario en el cuerpo del correo electrónico."
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr "Alguien editó esta incidencia al mismo tiempo que usted. Por favor revise %{linkStart} esta incidencia%{linkEnd} y asegúrese de que los cambios que ha realizado no eliminen sin querer los cambios realizados por la otra persona."
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr "Alguien editó este %{issueType} al mismo tiempo que usted. La descripción se ha actualizado y deberá volver a realizar los cambios."
@@ -12257,6 +14489,9 @@ msgstr "Algo salió mal al cambiar el estado del botón. ¡Por favor, inténtelo
msgid "Something went wrong while adding your award. Please try again."
msgstr "Se ha producido un error al agregar su premio. Por favor, inténtalo de nuevo."
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr "Se ha producido un error al agregar su comentario. Por favor, inténtalo de nuevo."
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr "Se ha producido un error al aplicar la sugerencia. Por favor, inténtelo de nuevo."
@@ -12266,6 +14501,12 @@ msgstr "Algo salió mal al cerrar la incidencia %{issuable}. ¡Por favor, intén
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr "Se ha producido un error al eliminar la rama origen. Por favor, inténtelo de nuevo."
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr "Se ha producido un error al eliminar su nota. Por favor, inténtalo de nuevo."
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr "Se ha producido un error al editar su comentario. Por favor, inténtalo de nuevo."
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "Algo salió mal al obtener la lista de %{listType}. ¡Por favor, inténtelo de nuevo!"
@@ -12299,6 +14540,9 @@ msgstr "Algo salió mal al volver a abrir la incidencia %{issuable}. ¡Por favor
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "Algo salió mal al resolver esta discusión. ¡Por favor, inténtelo de nuevo!"
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr "Se ha producido un error al detener este entorno. Por favor, inténtalo de nuevo."
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "Algo salió mal, no se puede agregar %{project} al panel de control"
@@ -12350,6 +14594,9 @@ msgstr "Vencen más tarde"
msgid "SortOptions|Due soon"
msgstr "Vencen pronto"
+msgid "SortOptions|Expired date"
+msgstr "Fecha de vencimiento"
+
msgid "SortOptions|Label priority"
msgstr "Prioridad de la etiqueta"
@@ -12419,6 +14666,9 @@ msgstr "Última actividad más antigua"
msgid "SortOptions|Oldest sign in"
msgstr "Registro más antiguo"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "Actualizado más antiguo"
@@ -12434,6 +14684,12 @@ msgstr "Últimas actividades recientes"
msgid "SortOptions|Recent sign in"
msgstr "Registro más reciente"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr "Tamaño"
+
msgid "SortOptions|Sort direction"
msgstr "Dirección de clasificación"
@@ -12474,7 +14730,7 @@ msgid "Spam and Anti-bot Protection"
msgstr "Protección Anti-Spam y Anti-Bot"
msgid "Spam log successfully submitted as ham."
-msgstr ""
+msgstr "Se ha enviado el registro de spam correctamente."
msgid "Specific Runners"
msgstr "Ejecutores específicos"
@@ -12492,7 +14748,7 @@ msgid "Squash commits"
msgstr "Squash commits"
msgid "Stage"
-msgstr ""
+msgstr "Etapa"
msgid "Stage & Commit"
msgstr "Stage & Commit"
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "Resalte una etiqueta para convertirla en una etiqueta con prioridad. Ordene las etiquetas priorizadas para cambiar su prioridad relativa, arrastrando."
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,21 +14792,27 @@ msgstr "Visite una página de proyecto y haga click sobre el ícono de una estre
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr "Aún no tiene proyectos destacados."
+msgid "Starrers"
+msgstr "Favoritos"
+
msgid "Stars"
msgstr "Estrellas"
msgid "Start GitLab Ultimate trial"
msgstr "Iniciar el periodo de prueba de GitLab Ultimate"
-msgid "Start Indexing"
-msgstr "Iniciar indexado"
-
msgid "Start Web Terminal"
msgstr "Iniciar Terminal web"
msgid "Start a %{new_merge_request} with these changes"
msgstr "Iniciar una %{new_merge_request} con estos cambios"
+msgid "Start a Free Trial"
+msgstr "Comenzar la prueba gratuita"
+
+msgid "Start a new discussion..."
+msgstr "Comenzar una nueva discusión..."
+
msgid "Start a new merge request"
msgstr "Iniciar un nuevo merge request"
@@ -12557,30 +14822,39 @@ msgstr "Comenzar una revisión"
msgid "Start and due date"
msgstr "Fechas de inicio y de fin"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr "Comience eligiendo un grupo para ver cómo su equipo gasta el tiempo. Posteriormente podrá profundizar hasta llegar al nivel del proyecto."
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr "Comience eligiendo un grupo para explorar los merge requests en ese grupo. Posteriormente puede proceder a filtrar por proyectos, etiquetas, hitos, autores y asignados."
+
msgid "Start cleanup"
msgstr "Iniciar la limpieza"
msgid "Start date"
msgstr "Fecha de inicio"
-msgid "Start discussion"
-msgstr "Iniciar una discusión"
-
-msgid "Start discussion & close %{noteable_name}"
-msgstr "Iniciar la discusión y cerrar %{noteable_name}"
-
-msgid "Start discussion & reopen %{noteable_name}"
-msgstr "Iniciar la discusión y volver a abrir %{noteable_name}"
-
msgid "Start merge train"
msgstr ""
msgid "Start merge train when pipeline succeeds"
msgstr ""
+msgid "Start search"
+msgstr "Iniciar una búsqueda"
+
msgid "Start the Runner!"
msgstr "¡Inicie el ejecutor!"
+msgid "Start thread"
+msgstr "Iniciar un hilo"
+
+msgid "Start thread & close %{noteable_name}"
+msgstr "Iniciar el hilo y cerrar %{noteable_name}"
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr "Iniciar el hilo y volver a abrir %{noteable_name}"
+
msgid "Start your trial"
msgstr "Comience su prueba gratuita"
@@ -12605,12 +14879,18 @@ msgstr "Comienza a las (UTC)"
msgid "State your message to activate"
msgstr "Indique su mensaje para activar"
+msgid "Statistics"
+msgstr "Estadísticas"
+
msgid "Status"
msgstr "Estado"
msgid "Status:"
msgstr "Estado:"
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr "Manténgase informado sobre el rendimiento y la salud de su entorno mediante la configuración dePrometheus para monitorizar sus despliegues."
+
msgid "Stop Terminal"
msgstr "Detener Terminal"
@@ -12641,6 +14921,18 @@ msgstr "Almacenamiento:"
msgid "StorageSize|Unknown"
msgstr "Desconocido"
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr "Permitido crear subgrupos"
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr "Permitido crear subgrupos"
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr "Mantenedores"
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr "Propietarios"
+
msgid "Subgroups"
msgstr "Sub-grupos"
@@ -12656,6 +14948,9 @@ msgstr "Enviar como correo no deseado"
msgid "Submit feedback"
msgstr "Enviar comentarios"
+msgid "Submit issue"
+msgstr "Enviar incidencia"
+
msgid "Submit review"
msgstr "Enviar para revisión"
@@ -12680,6 +14975,12 @@ msgstr "Suscríbase al calendario"
msgid "Subscribed"
msgstr "Suscrito"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr "Suscrito a este %{quick_action_target}."
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr "Se suscribe a este %{quick_action_target}."
+
msgid "Subscription"
msgstr "Suscripción"
@@ -12692,9 +14993,6 @@ msgstr "Gratis"
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr "GitLab le permite continuar utilizando su suscripción incluso si excede la cantidad de puestos que compró. Deberá pagar estos puestos en el momento de la renovación."
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr "GitLab.com %{planName} %{suffix}"
-
msgid "SubscriptionTable|Last invoice"
msgstr "Última factura"
@@ -12755,6 +15053,9 @@ msgstr "Uso"
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr "El recuento de uso se realiza una vez al día a 12:00 PM."
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr "Sustraer"
@@ -12780,7 +15081,7 @@ msgid "Successfully unlocked"
msgstr "Desbloqueado con éxito"
msgid "Suggest code changes which are immediately applied. Try it out!"
-msgstr ""
+msgstr "Sugiere cambios de código que se aplican inmediatamente. ¡Pruébelo!"
msgid "Suggested change"
msgstr "Cambio sugerido"
@@ -12848,9 +15149,15 @@ msgstr "Verde lima muy oscuro"
msgid "SuggestedColors|Very pale orange"
msgstr "Naranja muy pálido"
+msgid "Suggestions:"
+msgstr "Sugerencias:"
+
msgid "Sunday"
msgstr "Domingo"
+msgid "Support"
+msgstr "Soporte"
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr "El soporte para certificados personalizados está deshabilitado. Pida al administrador de su sistema que lo active."
@@ -12908,6 +15215,12 @@ msgstr "Listas de etiquetas:"
msgid "Tag this commit."
msgstr "Etiquetar este commit."
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Etiquetas"
@@ -13017,7 +15330,7 @@ msgid "Terminal for environment"
msgstr "Terminal para el entorno"
msgid "Terminal sync service is running"
-msgstr ""
+msgstr "Se está ejecutando el servicio de sincronización del Terminal"
msgid "Terms of Service Agreement and Privacy Policy"
msgstr "Términos del acuerdo de servicio y de la política de privacidad"
@@ -13061,6 +15374,9 @@ msgstr "Asegúrese de que el proyecto tenga notas."
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr "Asegúrese de que el wiki está habilitado y tiene páginas."
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr "Gracias por su informe. Un administrador de GitLab lo examinará en breve."
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] "El %{type} contiene el siguiente error:"
msgstr[1] "El %{type} contiene los siguientes errores:"
+msgid "The API path was not specified."
+msgstr "No se ha especificado la ruta del API."
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "La búsqueda avanzada global de GitLab es un potente servicio de búsqueda que le permite ahorrar tiempo. En vez de crear código duplicado y perder el tiempo, puede buscar código de otros equipos que le pueda ayudar a su propio proyecto."
@@ -13099,9 +15418,6 @@ msgstr "Cantidad de segundos a partir de los cuales expirará una petición para
msgid "The branch for this project has no active pipeline configuration."
msgstr "La rama para este proyecto no tiene una configuración de un pipeline activa."
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "El resaltado de caracteres le ayuda a mantener la línea de asunto en %{titleLength} caracteres y a limitar el mensaje a %{bodyLength} para que sea legible en git."
@@ -13118,7 +15434,7 @@ msgid "The content of this page is not encoded in UTF-8. Edits can only be made
msgstr "El contenido de esta página no está codificado en UTF-8. Las ediciones sobre este contenido, solo se pueden realizar a través del repositorio Git."
msgid "The dependency list details information about the components used within your project."
-msgstr ""
+msgstr "La lista de dependencias detalla la información sobre los componentes utilizados en su proyecto."
msgid "The deployment of this job to %{environmentLink} did not succeed."
msgstr "El despliegue de este trabajo en %{environmentLink} no tuvo éxito."
@@ -13126,6 +15442,12 @@ msgstr "El despliegue de este trabajo en %{environmentLink} no tuvo éxito."
msgid "The directory has been successfully created."
msgstr "El directorio se ha creado correctamente."
+msgid "The domain you entered is misformatted."
+msgstr "El dominio que ha introducido está mal formateado."
+
+msgid "The domain you entered is not allowed."
+msgstr "El dominio que ha introducido no está permitido."
+
msgid "The entered user map is not a valid JSON user map."
msgstr "El mapa de usuario introducido no es un mapa de usuario JSON válido."
@@ -13162,9 +15484,6 @@ msgstr "La configuración de grupos para %{group_links} requiere que habilite la
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "La importación finalizará después de %{timeout}. Para los repositorios que necesiten más tiempo, utilice una combinación de comandos 'clone'/'push'."
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr "No se ha podido aceptar la invitación."
@@ -13196,19 +15515,19 @@ msgid "The maximum file size allowed is 200KB."
msgstr "El tamaño máximo de archivo permitido es de 200KB."
msgid "The merge conflicts for this merge request cannot be resolved through GitLab. Please try to resolve them locally."
-msgstr ""
+msgstr "Los conflictos en el merge para este merge request no se pueden resolver a través de GitLab. Por favor, intente resolverlos localmente."
msgid "The merge conflicts for this merge request have already been resolved."
-msgstr ""
+msgstr "Los conflictos en el merge para este merge request ya se han resuelto."
msgid "The merge conflicts for this merge request have already been resolved. Please return to the merge request."
-msgstr ""
+msgstr "Los conflictos en el merge para este merge request ya se han resuelto. Por favor, vuelva al merge request."
msgid "The name %{entryName} is already taken in this directory."
msgstr "El nombre %{entryName} ya se está utilizando en este directorio."
msgid "The number of changes to be fetched from GitLab when cloning a repository. This can speed up Pipelines execution. Keep empty or set to 0 to disable shallow clone by default and make GitLab CI fetch all branches and tags each time."
-msgstr ""
+msgstr "El número de cambios que se recuperarán desde GitLab al clonar un repositorio. Al modificar esta opción puede acelerar la ejecución de los pipelines. Déjelo en blanco o con valor 0 para deshabilitar el clonado superficial por defecto y así hacer que GitLab CI clone todas las ramas y todas las etiquetas cada vez."
msgid "The number of times an upload record could not find its file"
msgstr ""
@@ -13279,8 +15598,8 @@ msgstr "Se está actualizando el repositorio remoto..."
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "El repositorio debe ser accesible a través de <code>http://</code>, <code>https://</code> o <code>git://</code>."
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "El repositorio debe ser accesible a través de <code>http: //</code>, <code>https: //</code>, <code>ssh: //</code> y <code>git: //</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr "El repositorio debe ser accesible a través de <code>http://</code>, <code>https://</code>, <code>ssh://</code> y <code>git://</code>."
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "La etapa de revisión muestra el tiempo desde la creación de la solicitud de fusión hasta que los cambios se fusionaron. Los datos se añadirán automáticamente después de fusionar su primera solicitud de fusión."
@@ -13306,8 +15625,8 @@ msgstr "El fragmento de código es visible por cualquier usuario que haya inicia
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "La etapa de puesta en escena muestra el tiempo entre la fusión y el despliegue de código en el entorno de producción. Los datos se añadirán automáticamente una vez que se despliega a producción por primera vez."
-msgid "The tabs below will be removed in a future version"
-msgstr "Las pestañas que se muestran a continuación serán eliminadas en una versión futura"
+msgid "The target element is missing."
+msgstr "Falta el elemento de destino."
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "La etapa de pruebas muestra el tiempo que GitLab CI toma para ejecutar cada pipeline para la solicitud de fusión relacionada. Los datos se añadirán automáticamente luego de que el primer pipeline termine de ejecutarse."
@@ -13315,8 +15634,8 @@ msgstr "La etapa de pruebas muestra el tiempo que GitLab CI toma para ejecutar c
msgid "The time taken by each data entry gathered by that stage."
msgstr "El tiempo utilizado por cada entrada de datos obtenido por esa etapa."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
-msgstr ""
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
+msgstr "El identificador único para el nodo de Geo. Debe coincidir con el valor del campo `geo_node_name` si está configurado en gitlab.rb, de lo contrario debe coincidir con el valor del campo `external_url`"
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
msgstr "El proceso de actualización finalizará después de %{number_of_minutes} minutos. Para repositorios grandes, utilice una combinación de clone y push."
@@ -13339,8 +15658,8 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
-msgstr "La URL orientada al usuario del nodo Geo."
+msgid "The user-facing URL of the Geo node"
+msgstr "La URL del usuario del nodo Geo"
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr "El valor en el punto medio de una serie de valores observados. Por ejemplo, entre 3, 5, 9, la mediana es 5. Entre 3, 5, 7, 8, la mediana es (5 + 7) / 2 = 6."
@@ -13375,9 +15694,15 @@ msgstr "No hay plantillas de proyecto personalizadas para esta instancia de GitL
msgid "There are no issues to show"
msgstr "Aún no hay incidencias que mostrar"
+msgid "There are no issues to show."
+msgstr "No hay incidencias que mostrar."
+
msgid "There are no labels yet"
msgstr "Aún no hay etiquetas"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr "No hay ninguna incidencia abierta"
@@ -13399,27 +15724,33 @@ msgstr "No hay unstaged changes"
msgid "There is already a repository with that name on disk"
msgstr "Ya hay un repositorio con ese nombre en el disco"
+msgid "There is no data available. Please change your selection."
+msgstr "No hay datos disponibles. Por favor, cambie su selección."
+
msgid "There was a problem communicating with your device."
msgstr "Se ha producido un problema al conectarse con su dispositivo."
msgid "There was a problem sending the confirmation email"
-msgstr ""
+msgstr "Se ha producido un error al enviar el correo electrónico de confirmación"
msgid "There was an error %{message} todo."
msgstr "Se ha producido un un error %{message} en la lista de tareas pendientes."
-msgid "There was an error adding a todo."
-msgstr "Se ha producido un error al añadir la tarea pendiente."
+msgid "There was an error adding a To Do."
+msgstr "Se ha producido un error al añadir la tarea a la lista de tareas pendientes."
msgid "There was an error creating the issue"
-msgstr ""
+msgstr "Se ha producido un error al crear la incidencia"
-msgid "There was an error deleting the todo."
-msgstr "Se ha producido un error al eliminar la tarea pendiente."
+msgid "There was an error deleting the To Do."
+msgstr "Se ha producido un error al eliminar la lista de tareas pendientes."
msgid "There was an error fetching configuration for charts"
msgstr "Se ha producido un error al recuperar la configuración de las gráficas"
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr "Se ha producido un error al recopilar los datos del gráfico"
@@ -13444,6 +15775,9 @@ msgstr "Se ha producido un error al actualizar la configuración de las notifica
msgid "There was an error subscribing to this label."
msgstr "Se ha producido un error al subscribirse a esta etiqueta."
+msgid "There was an error trying to validate your query"
+msgstr "Se ha producido un error al intentar validar su consulta"
+
msgid "There was an error when reseting email token."
msgstr "Se ha producido un error al restablecer el token de correo electrónico."
@@ -13469,7 +15803,7 @@ msgid "Third party offers"
msgstr "Ofertas de terceros"
msgid "This %{issuableDisplayName} is locked. Only project members can comment."
-msgstr ""
+msgstr "Este %{issuableDisplayName} está bloqueado. Solo los miembros del proyecto pueden comentar."
msgid "This %{issuable} is locked. Only <strong>project members</strong> can comment."
msgstr "Este %{issuable} está bloqueado. Solo los <strong>miembros del proyecto</strong> pueden comentar."
@@ -13501,12 +15835,12 @@ msgstr "El alcance de este tablero es limitado"
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "Esta rama ha cambiado desde que se comenzó a editar. ¿Le gustaría crear una nueva rama?"
-msgid "This certificate is automatically managed by Let's Encrypt"
-msgstr ""
-
msgid "This chart could not be displayed"
msgstr "No se puede mostrar este gráfico"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
+msgstr "Este comentario ha cambiado desde que se comenzó a editar, por favor revise el %{startTag}comentario actualizado%{endTag} para asegurar que no se pierde ningún tipo de información."
+
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
msgstr ""
@@ -13552,6 +15886,12 @@ msgstr "Este dominio no está verificado. Es necesario verificar la propiedad de
msgid "This environment has no deployments yet."
msgstr "Este entorno todavía no tiene despliegues."
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr "Este campo es obligatorio."
@@ -13561,12 +15901,15 @@ msgstr "Este grupo"
msgid "This group does not provide any group Runners yet."
msgstr "Este grupo aún no proporciona ningún grupo de 'runners'."
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr "Este es un usuario \"fantasma\", creado para mantener todas las incidencias creadass por usuarios de Gitlab que ya han sido eliminados. Este usuario no se puede eliminar."
+msgid "This is a Work in Progress"
+msgstr "Este es un trabajo en curso"
+
msgid "This is a confidential issue."
msgstr "Esta incidencia es confidencial."
@@ -13588,15 +15931,15 @@ msgstr "Este es el número máximo de usuarios que han existido al mismo tiempo
msgid "This is your current session"
msgstr "Esta es su sesión actual"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "Esta incidencia es confidencial"
msgid "This issue is locked."
msgstr "Esta incidencia está bloqueada."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "Este trabajo depende de que un usuario active su proceso. A menudo se utilizan para implementar código en entornos de producción"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "Este trabajo depende de trabajos anteriores que se deben ejecutar correctamente, antes de que este trabajo se active"
@@ -13651,9 +15994,15 @@ msgstr "Este trabajo es el despliegue más reciente en %{link}."
msgid "This job requires a manual action"
msgstr "Este trabajo requiere una acción manual"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr "Esto puede exponer información confidencial ya que el fork seleccionado está en otro espacio de nombres que puede tener otros miembros."
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Esto significa que no puede enviar código hasta que cree un repositorio vacío o importe uno existente."
@@ -13672,9 +16021,6 @@ msgstr "Esta página no está disponible porque no se le permite leer la informa
msgid "This page will be removed in a future release."
msgstr "Esta página se eliminará en una versión futura."
-msgid "This pipeline is run on the source branch"
-msgstr "Este pipeline se ejecuta en la rama de origen"
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr "Este pipeline utiliza una configuración de CI/CD predefinida habilitada por %{strongStart}Auto DevOps.%{strongEnd}"
@@ -13705,6 +16051,9 @@ msgstr "Este ejecutor solo se ejecutará en pipelines disparados sobre ramas pro
msgid "This setting can be overridden in each project."
msgstr "Esta configuración se puede reemplazar en cada proyecto."
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr "Esta configuración actualizará el nombre del host que se utiliza para generar los correos electrónicos de commit privados. %{learn_more}"
@@ -13714,6 +16063,9 @@ msgstr "Este tiempo de espera tendrá prioridad cuando sea más bajo que el tiem
msgid "This user cannot be unlocked manually from GitLab"
msgstr "Este usuario no puede ser desbloqueado manualmente desde GitLab"
+msgid "This user has no active %{type} Tokens."
+msgstr "Este usuario no tiene tokens %{type} activos."
+
msgid "This user has no identities"
msgstr "El usuario no tiene ninguna identidad"
@@ -13735,8 +16087,11 @@ msgstr "Automáticamente, esos correos electrónicos se convierten en incidencia
msgid "Thursday"
msgstr "Jueves"
+msgid "Time"
+msgstr "Tiempo"
+
msgid "Time based: Yes"
-msgstr ""
+msgstr "Basado en tiempo: Si"
msgid "Time before an issue gets scheduled"
msgstr "Tiempo antes de que una incidencia sea programada"
@@ -13753,6 +16108,15 @@ msgstr "Tiempo entre la creación de la solicitud de fusión y la integración o
msgid "Time estimate"
msgstr "Tiempo estimado"
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "Tiempo en segundos que GitLab esperará hasta obtener una respuesta de un servicio externo. Cuando el servicio no responda a tiempo, se denegará el acceso."
@@ -13762,6 +16126,9 @@ msgstr "Tiempo restante"
msgid "Time spent"
msgstr "Tiempo dedicado"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "Seguimiento de tiempo"
@@ -13771,12 +16138,21 @@ msgstr "Tiempo hasta la primera solicitud de fusión"
msgid "TimeTrackingEstimated|Est"
msgstr "Est"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "Estimado:"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "Gastado"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "hace %s días"
@@ -13900,6 +16276,9 @@ msgstr "solo ahora"
msgid "Timeago|right now"
msgstr "justo ahora"
+msgid "Timeframe"
+msgstr "Periodo de tiempo"
+
msgid "Timeout"
msgstr "Tiempo de espera"
@@ -13931,6 +16310,9 @@ msgstr "Títulos y nombres de archivos"
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr "Para %{link_to_help} de su dominio, añada la clave anterior a un registro TXT dentro de su configuración DNS."
+msgid "To Do"
+msgstr "Tareas pendientes"
+
msgid "To GitLab"
msgstr "A GitLab"
@@ -13946,6 +16328,9 @@ msgstr "Para agregar la entrada manualmente, proporcione los siguientes detalles
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "Para conectar a los repositorios de GitHub, puede utilizar un %{personal_access_token_link}. Cuando cree su token de acceso personal, deberá seleccionar el alcance del <code>repo</code>, para que podamos mostrarle una lista de sus repositorios públicos y privados que están disponibles para conectarse."
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "Para conectar a los repositorios de GitHub, primero debe autorizar a GitLab a acceder a la lista de repositorios de GitHub:"
@@ -13973,12 +16358,6 @@ msgstr "Para ayudar a mejorar GitLab y su experiencia de usuario, GitLab recopil
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "Para ayudar a mejorar GitLab, nos gustaría recopilar periódicamente información de uso. Esto se puede cambiar en cualquier momento en %{settings_link_start}Configuraciones%{link_end}. %{info_link_start}Más información%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Para importar los repositorios de GitHub, puede utilizar un %{personal_access_token_link}. Cuando cree su token de acceso personal, deberá seleccionar el alcance de <code>repo</code>, para que podamos mostrarle una lista de sus repositorios públicos y privados que están disponibles para importar."
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "Para importar los repositorios de GitHub, primero debe autorizar a GitLab a acceder a la lista de repositorios de GitHub:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "Para importar un repositorio SVN, puede ver %{svn_link}."
@@ -14003,12 +16382,30 @@ msgstr "Para abrir Jaeger y ver fácilmente la trazabilidad desde GitLab, enlace
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr "Para mantener el rendimiento, solo se muestran <strong>%{display_size} de %{real_size}</strong> archivos."
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr "Para recibir alertas de los servicios de Prometheus configurados manualmente, agregue la siguiente URL y la clave de autorización a su archivo de configuración del webhook de Prometheus. Puede obtener más información sobre la %{linkStart}configuración de Prometheus%{linkEnd} para enviar alertas a GitLab."
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr "Para ver todos los tokens de acceso personales de los usuarios debe suplantar su identidad primero."
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "Para configurar la autenticación SAML para su grupo a través de un proveedor de identidad como Azure, Okta, Onelogin, Ping Identity o su proveedor SAML 2.0 personalizado:"
+msgid "To set up this service:"
+msgstr "Para configurar este servicio:"
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr "Para especificar el nivel de notificación por proyecto de un grupo al que pertenece, debe visitar la página del proyecto y cambiar el nivel de las notificaciones."
@@ -14033,17 +16430,17 @@ msgstr "Para ampliar la búsqueda, cambie o elimine filtros"
msgid "To widen your search, change or remove filters."
msgstr "Para ampliar la búsqueda, cambie o elimine filtros."
-msgid "Today"
-msgstr "Hoy"
-
-msgid "Todo"
-msgstr "Tareas pendientes"
+msgid "To-Do List"
+msgstr "Lista de tareas pendientes"
-msgid "Todo was successfully marked as done."
+msgid "To-do item successfully marked as done."
msgstr "La tarea pendiente se ha marcado como realizada correctamente."
-msgid "Todos"
-msgstr "Tareas pendientes"
+msgid "Today"
+msgstr "Hoy"
+
+msgid "Toggle Markdown preview"
+msgstr ""
msgid "Toggle Sidebar"
msgstr "Ocultar barra lateral"
@@ -14051,6 +16448,9 @@ msgstr "Ocultar barra lateral"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr "Mostrar/ocultar los comentarios para este archivo"
@@ -14060,9 +16460,6 @@ msgstr "Cambiar la descripción del commit"
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr "Alternar la discusión"
-
msgid "Toggle emoji award"
msgstr ""
@@ -14070,22 +16467,31 @@ msgid "Toggle navigation"
msgstr "Alternar navegación"
msgid "Toggle project"
-msgstr ""
+msgstr "Alternar proyecto"
msgid "Toggle sidebar"
msgstr "Ocultar/mostrar barra lateral"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "Cambiar estado: OFF"
msgid "ToggleButton|Toggle Status: ON"
msgstr "Cambiar estado: ON"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
-msgstr "Token"
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
msgid "Tomorrow"
msgstr "Mañana"
@@ -14105,6 +16511,9 @@ msgstr "Contribuciones totales"
msgid "Total Time"
msgstr "Tiempo Total"
+msgid "Total artifacts size: %{total_size}"
+msgstr "Tamaño total de los artefactos: %{total_size}"
+
msgid "Total test time for all commits/merges"
msgstr "Tiempo total de pruebas para todos los cambios o integraciones"
@@ -14123,6 +16532,12 @@ msgstr "Haga un seguimiento de grupos de incidencias que comparten un tema, a tr
msgid "Track time with quick actions"
msgstr "Seguimiento del tiempo con acciones rápidas"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr "Haga el seguimiento de sus proyectos de GitLab con GitLab para Slack."
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr "Transferir proyecto"
@@ -14159,9 +16574,6 @@ msgstr "Ya existe un proyecto con el mismo nombre o ruta en el espacio de nombre
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr "Se ha producido un error durante el proceso de transferencia, por favor, contacte con un administrador."
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr "Vista de árbol"
@@ -14189,9 +16601,6 @@ msgstr "Variables de disparador:"
msgid "Trigger was created successfully."
msgstr "El disparador fue creado con éxito."
-msgid "Trigger was re-assigned."
-msgstr "Disparador fue reasignado."
-
msgid "Trigger was successfully updated."
msgstr "El disparador se actualizó correctamente."
@@ -14216,12 +16625,21 @@ msgstr "Pruebe todo lo que GitLab tiene para ofrecer durante 30 días."
msgid "Try to fork again"
msgstr "Intentar realizar el fork de nuevo"
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr "Intentando comunicarse con su dispositivo. Conéctelo (si aún no lo ha hecho) y presione el botón en el dispositivo ahora."
msgid "Tuesday"
msgstr "Martes"
+msgid "Turn Off"
+msgstr "Desactivar"
+
+msgid "Turn On"
+msgstr "Activar"
+
msgid "Turn on Service Desk"
msgstr "Activar el Service Desk"
@@ -14255,11 +16673,23 @@ msgstr "U2F sólo funciona con sitios web habilitados con HTTPS. Contacte con su
msgid "URL"
msgstr "URL"
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr "No se ha podido construir el enlace Slack."
+
+msgid "Unable to connect to Prometheus server"
+msgstr "No se ha podido conectar con el servidor de Prometheus"
+
msgid "Unable to connect to server: %{error}"
msgstr "Imposible conectar con el servidor: %{error}"
msgid "Unable to generate new instance ID"
-msgstr ""
+msgstr "No se puede generar un nuevo ID de instancia"
msgid "Unable to load the diff. %{button_try_again}"
msgstr "No se puede cargar el fichero diff. %{button_try_again}"
@@ -14267,6 +16697,9 @@ msgstr "No se puede cargar el fichero diff. %{button_try_again}"
msgid "Unable to resolve"
msgstr "No se puede resolver"
+msgid "Unable to save your changes. Please try again."
+msgstr "No se pueden guardar sus cambios. Por favor, inténtelo de nuevo."
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr "No se puede programar un pipeline para que se ejecute inmediatamente"
@@ -14297,6 +16730,12 @@ msgstr "Deshacer"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr "Desafortunadamente, su mensaje de correo electrónico a GitLab no pudo ser procesado."
+msgid "Uninstall"
+msgstr "Desinstalar"
+
+msgid "Uninstalling"
+msgstr "Desinstalando"
+
msgid "Unknown"
msgstr "Desconocido"
@@ -14324,12 +16763,24 @@ msgstr "Desbloquear este %{issuableDisplayName}? <strong>Todos</strong> podrán
msgid "Unlocked"
msgstr "Desbloqueado"
-msgid "Unlocks the discussion"
-msgstr "Desbloquear la discusión"
+msgid "Unlocked the discussion."
+msgstr "Desbloqueó la discusión."
+
+msgid "Unlocks the discussion."
+msgstr "Desbloquea la discusión."
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr "Desmarcado este %{noun} como trabajo en progreso."
+
+msgid "Unmarks this %{noun} as Work In Progress."
+msgstr "Desmarcar este %{noun} como trabajo en progreso."
msgid "Unresolve discussion"
msgstr "Discusión no resuelta"
+msgid "Unresolve thread"
+msgstr "Hilo sin resolver"
+
msgid "Unschedule job"
msgstr "No programado"
@@ -14366,6 +16817,15 @@ msgstr "Eliminar suscripción a nivel de proyecto"
msgid "Unsubscribe from %{type}"
msgstr "Cancelar la suscripción a %{type}"
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr "Cancelar la suscripción de %{quick_action_target}."
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr "Cancelar la suscripción desde este %{quick_action_target}."
+
+msgid "Until"
+msgstr "Hasta"
+
msgid "Unverified"
msgstr "Sin verificar"
@@ -14375,15 +16835,27 @@ msgstr "Actualizado"
msgid "Upcoming"
msgstr "Próximo"
+msgid "Upcoming Release"
+msgstr "Próxima versión"
+
msgid "Update"
msgstr "Actualizar"
-msgid "Update approvers"
-msgstr "Actualizar aprobadores"
+msgid "Update all"
+msgstr "Actualizar todo"
+
+msgid "Update approval rule"
+msgstr "Actualizar la regla de aprobación"
msgid "Update failed"
msgstr "Se ha producido un error en la actualización"
+msgid "Update failed. Please try again."
+msgstr "Se ha producido un error en la actualización. Por favor, inténtelo de nuevo."
+
+msgid "Update it"
+msgstr "Actualícelo"
+
msgid "Update now"
msgstr "Actualizar ahora"
@@ -14414,6 +16886,9 @@ msgstr "Actualizado"
msgid "Updated %{updated_at} by %{updated_by}"
msgstr "Actualizado %{updated_at} por %{updated_by}"
+msgid "Updated to"
+msgstr "Actualizado a"
+
msgid "Updating"
msgstr "Actualizando"
@@ -14426,6 +16901,9 @@ msgstr "Actualice su plan"
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "Actualice su plan para activar la búsqueda global avanzada."
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "Actualice su plan para activar la herramienta Contribution Analytics."
@@ -14472,7 +16950,7 @@ msgid "Uploaded on"
msgstr "Subido en"
msgid "Uploading changes to terminal"
-msgstr ""
+msgstr "Subir los cambios al terminal"
msgid "Uploads"
msgstr "Subidas"
@@ -14489,14 +16967,17 @@ msgstr "Uso"
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "Estadísticas de uso"
msgid "UsageQuota|%{help_link_start}Shared runners%{help_link_end} are disabled, so there are no limits set on pipeline usage"
-msgstr ""
+msgstr "%{help_link_start}Los ejecutores compartidos%{help_link_end} están deshabilitados, por lo que no hay límites establecidos para el uso de los pipelines"
msgid "UsageQuota|Artifacts"
-msgstr ""
+msgstr "Artefactos"
msgid "UsageQuota|Buy additional minutes"
msgstr "Comprar minutos adicionales"
@@ -14505,22 +16986,22 @@ msgid "UsageQuota|Current period usage"
msgstr "Periodo actual de uso"
msgid "UsageQuota|LFS Storage"
-msgstr ""
+msgstr "Almacenamiento LFS"
msgid "UsageQuota|Packages"
-msgstr ""
+msgstr "Paquetes"
msgid "UsageQuota|Pipelines"
msgstr "Pipelines"
msgid "UsageQuota|Repository"
-msgstr ""
+msgstr "Repositorio"
msgid "UsageQuota|Storage"
-msgstr ""
+msgstr "Almacenamiento"
msgid "UsageQuota|This namespace has no projects which use shared runners"
-msgstr ""
+msgstr "Este espacio de nombres no tiene proyectos que utilicen ejecutores compartidos"
msgid "UsageQuota|Unlimited"
msgstr "|Ilimitado"
@@ -14538,7 +17019,7 @@ msgid "UsageQuota|Usage since"
msgstr "Uso desde"
msgid "UsageQuota|Wiki"
-msgstr ""
+msgstr "Wiki"
msgid "Use %{code_start}::%{code_end} to create a %{link_start}scoped label set%{link_end} (eg. %{code_start}priority::1%{code_end})"
msgstr ""
@@ -14631,10 +17112,10 @@ msgid "User was successfully updated."
msgstr "Usuario actualizado correctamente."
msgid "UserOnboardingTour|%{activeTour}/%{totalTours}"
-msgstr ""
+msgstr "%{activeTour}/%{totalTours}"
msgid "UserOnboardingTour|%{completed}/%{total} steps completed"
-msgstr ""
+msgstr "%{completed}/%{total} de pasos completado"
msgid "UserOnboardingTour|%{emphasisStart}Well done!%{emphasisEnd}%{lineBreak}%{lineBreak}That's it for our guided tour, congratulations for making it all the way to the end!%{lineBreak}%{lineBreak}We hope this gave you a good overview of GitLab and how it can help you. We'll now show you how to create your own project and invite your colleagues."
msgstr ""
@@ -14643,37 +17124,43 @@ msgid "UserOnboardingTour|Adding other members to a project is done through Proj
msgstr ""
msgid "UserOnboardingTour|Alright, that's it for Commits. Let's take a look at the %{emphasisStart}Branches%{emphasisEnd}."
-msgstr ""
+msgstr "Hemos terminado, esto es todo para los commits. Echemos un vistazo ahora a las %{emphasisStart}branches%{emphasisEnd}."
msgid "UserOnboardingTour|Awesome! Now click on %{emphasisStart}Members%{emphasisEnd}."
-msgstr ""
+msgstr "¡Impresionante! Ahora haga clic en %{emphasisStart}Miembros%{emphasisEnd}."
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}Compare%{emphasisEnd} buttons to compare a branch to master."
-msgstr ""
+msgstr "Haga clic en uno de los botones %{emphasisStart}Comparar%{emphasisEnd} para comparar un rama con la rama master."
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}pipeline IDs%{emphasisEnd} to see the details of a pipeline."
-msgstr ""
+msgstr "Haga clic en uno de los %{emphasisStart}IDs del pipeline%{emphasisEnd} para ver los detalles de un pipeline."
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
-msgstr ""
+msgstr "Haga clic para abrir el último commit y ver sus detalles."
+
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr "Cerrar 'Aprender GitLab'"
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
-msgstr ""
+msgstr "Los commits se muestran en orden cronológico y se pueden filtrar por el mensaje del commit o por el branch donde se han realizado."
msgid "UserOnboardingTour|Create a project"
-msgstr ""
+msgstr "Crear un proyecto"
msgid "UserOnboardingTour|Exit 'Learn GitLab'"
-msgstr ""
+msgstr "Salir de 'Aprenda GitLab'"
msgid "UserOnboardingTour|Got it"
+msgstr "Lo tengo"
+
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
msgstr ""
msgid "UserOnboardingTour|Guided GitLab Tour"
-msgstr ""
+msgstr "Tour de GitLab guiado"
msgid "UserOnboardingTour|Here you can compare the changes of this branch to another one. Changes are divided by files so that it's easier to see what was changed where."
-msgstr ""
+msgstr "Aquí puede comparar los cambios de una rama con otra. Los cambios se dividen en archivos para que sea más fácil ver qué se cambió y en qué lugar."
msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Choose a way to create a project and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
msgstr ""
@@ -14691,52 +17178,52 @@ msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}
msgstr ""
msgid "UserOnboardingTour|Invite colleagues"
-msgstr ""
+msgstr "Invitar a sus colegas"
msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progess in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks like when the list is filtered by a label."
msgstr ""
msgid "UserOnboardingTour|Learn GitLab"
-msgstr ""
+msgstr "Aprenda GitLab"
msgid "UserOnboardingTour|Let's take a closer look at a merge request. Click on the title of one."
-msgstr ""
+msgstr "Echemos un vistazo más de cerca a los merge request. Haga clic sobre el título de uno."
msgid "UserOnboardingTour|Let's take a closer look at all the commits. Click on %{emphasisStart}Commits%{emphasisEnd}."
-msgstr ""
+msgstr "Echemos un vistazo más de cerca a todos los commits. Haga clic sobre %{emphasisStart}Commits%{emphasisEnd}."
msgid "UserOnboardingTour|Let's take a closer look at the repository of this project. Click on %{emphasisStart}Repository%{emphasisEnd}."
-msgstr ""
+msgstr "Echemos un vistazo más de cerca a todos los repositorio de este proyecto. Haga clic sobre %{emphasisStart}Repositorio%{emphasisEnd}."
msgid "UserOnboardingTour|No thanks"
-msgstr ""
+msgstr "No gracias"
msgid "UserOnboardingTour|Ok, let's go"
-msgstr ""
+msgstr "De acuerdo, vamos"
msgid "UserOnboardingTour|Ok, show me"
-msgstr ""
+msgstr "De acuerdo, muéstralo"
msgid "UserOnboardingTour|Open one of the issues by clicking on its title."
-msgstr ""
+msgstr "Abra una de las incidencias haciendo clic en su título."
msgid "UserOnboardingTour|Restart this step"
-msgstr ""
+msgstr "Reiniciar este paso"
msgid "UserOnboardingTour|Skip this step"
-msgstr ""
+msgstr "Saltar este paso"
msgid "UserOnboardingTour|Sweet! Your project was created is is ready to be used.%{lineBreak}%{lineBreak}You can start adding files to the repository or clone it. One last thing we want to show you is how to invite your colleagues to your new project."
-msgstr ""
+msgstr "¡Genial! Se ha creado su proyecto y está listo para ser utilizado.%{lineBreak}%{lineBreak}Puede comenzar a agregar archivos al repositorio o clonarlo. Una última cosa que queremos mostrarle es cómo invitar a sus compañeros de equipo a su nuevo proyecto."
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
-msgstr ""
+msgstr "Hemos terminado, esto es todo para las incidencias. Echemos un vistazo ahora a los %{emphasisStart}Merge Requests%{emphasisEnd}."
msgid "UserOnboardingTour|That's it for merge requests. Now for the finla part of this guided tour - the %{emphasisStart}CI/CD%{emphasisEnd}."
msgstr ""
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr "Fragmentos de código"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr "Los fragmentos de código en GitLab pueden ser privados, internos o públicos."
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr "Proyectos destacados"
+
msgid "UserProfile|Subscribe"
msgstr "Suscribirse"
@@ -14822,6 +17315,9 @@ msgstr "Este usuario tiene un perfil privado"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr "Este usuario no ha contribuido a ningún proyecto"
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr "Este usuario no ha marcado ningún proyecto como favorito"
+
msgid "UserProfile|View all"
msgstr "Ver todo"
@@ -14849,6 +17345,9 @@ msgstr "El nombre de usuario no está disponible."
msgid "Username is available."
msgstr "El nombre de usuario está disponible."
+msgid "Username or email"
+msgstr "Nombre de usuario o email"
+
msgid "Users"
msgstr "Usuarios"
@@ -14880,7 +17379,7 @@ msgid "UsersSelect|Unassigned"
msgstr "Sin asignar"
msgid "Using %{code_start}::%{code_end} denotes a %{link_start}scoped label set%{link_end}"
-msgstr ""
+msgstr "Uso de %{code_start}::%{code_end} denota un %{link_start}con ámbito de etiqueta%{link_end}"
msgid "Using required encryption strategy when encrypted field is missing!"
msgstr ""
@@ -14927,11 +17426,14 @@ msgstr "Verificado"
msgid "Version"
msgstr "Versión"
+msgid "Very helpful"
+msgstr "Muy útil"
+
msgid "View app"
msgstr "Ver aplicación"
msgid "View dependency details for your project"
-msgstr ""
+msgstr "Ver los detalles de las dependencia para su proyecto"
msgid "View deployment"
msgstr "Ver despliegue"
@@ -14964,7 +17466,7 @@ msgid "View it on GitLab"
msgstr "Ver en GitLab"
msgid "View job"
-msgstr ""
+msgstr "Ver la tarea"
msgid "View job trace"
msgstr "Ver el registro del trabajo"
@@ -15005,6 +17507,9 @@ msgstr "Nivel de visibilidad"
msgid "Visibility level:"
msgstr "Nivel de visibilidad:"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr "Los ajustes de visibilidad han sido deshabilitados por el administrador."
+
msgid "Visibility, project features, permissions"
msgstr "Visibilidad, características del proyecto, permisos"
@@ -15026,17 +17531,29 @@ msgstr "Desconocido"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr "%{stepStart}Paso 1%{stepEnd}. Copie el siguiente script:"
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
-msgstr "%{stepStart}Paso 2%{stepEnd}. Agregue %{headTags} a cada pagina de su aplicación. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
-msgstr "%{stepStart}Paso 3%{stepEnd}. Abra la app de revisión y proporcione un token de acceso personal siguiendo %{linkStart}token de acceso personal%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
-msgstr "%{stepStart}Paso 4%{stepEnd}. Ahora puede dejar comentarios desde la app de revisión."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
-msgstr "Agregar el siguiente script a su código hace posible dejar feedback directamente desde dentro de la aplicación de revisión. El feedback facilitado sera enviado automáticamente a la discusión del merge request, incluyendo los metadatos."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr "Copiar el id del merge request al portapapeles"
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr "Copiar el script al portapapeles"
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr "Habilitar revisiones visuales"
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
+msgstr ""
msgid "VisualReviewApp|Open review app"
msgstr "Abrir la aplicación de revisión"
@@ -15044,17 +17561,20 @@ msgstr "Abrir la aplicación de revisión"
msgid "VisualReviewApp|Review"
msgstr "Revisión"
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
-msgstr "Revise y haga comentarios directamente desde la aplicación de revisión"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
+msgstr ""
msgid "Vulnerabilities"
-msgstr ""
+msgstr "Vulnerabilidades"
-msgid "Vulnerability Chart"
-msgstr "Gráfico de vulnerabilidades"
+msgid "Vulnerabilities over time"
+msgstr "Vulnerabilidades a lo largo del tiempo"
-msgid "Vulnerability List"
-msgstr "Lista de vulnerabilidades"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
+msgstr "%{formattedStartDate} hasta hoy"
msgid "Vulnerability|Class"
msgstr "Clase"
@@ -15095,6 +17615,9 @@ msgstr "Severidad"
msgid "Wait for the source to load to copy it to the clipboard"
msgstr "Espera a que se cargue la fuente para copiarla al portapapeles"
+msgid "Waiting for performance data"
+msgstr "Esperar por los datos de rendimiento"
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "¿Quieres ver los datos? Por favor pide acceso al administrador."
@@ -15110,11 +17633,8 @@ msgstr "No es posible determinar la ruta para eliminar esta tarea épica"
msgid "We could not determine the path to remove the issue"
msgstr "No es posible determinar la ruta para eliminar esta incidencia"
-msgid "We couldn't find any results matching"
-msgstr "No hemos encontrado ningún resultado coincidente"
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
-msgstr "Hemos creado una breve visita guiada que le ayudará a aprender los conceptos básicos de GitLab y cómo le ayudará a mejorar en su trabajo. Sólo debería llevarle un par de minutos. Será guiado por dos tipos de ayudantes, que puede reconocer por su color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
+msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
msgstr "Hemos detectado spam potencial en %{humanized_resource_name}. Por favor resuelva el reCAPTCHA para poder continuar."
@@ -15126,7 +17646,7 @@ msgid "We heard back from your U2F device. You have been authenticated."
msgstr "Hemos obtenido respuesta desde su dispositivo U2F. Ha sido autenticado correctamente."
msgid "We sent you an email with reset password instructions"
-msgstr ""
+msgstr "Le enviamos un correo electrónico con las instrucciones para restablecer la contraseña"
msgid "We want to be sure it is you, please confirm you are not a robot."
msgstr "Queremos asegurarnos de que sea usted, por favor, ayudenos a confirmar que no es un robot."
@@ -15167,6 +17687,9 @@ msgstr "Bienvenido al tour guiado de GitLab"
msgid "Welcome to your Issue Board!"
msgstr "¡Bienvenido a su tablón de incidendias!"
+msgid "What are you searching for?"
+msgstr "¿Qué está buscando?"
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Cuando un ejecutor está bloqueado, no se puede asignar a otros proyectos"
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] "Cuando el merge request sea aceptado"
msgstr[1] "Cuando los merge request sean aceptados"
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr "Cuando:"
msgid "White helpers give contextual information."
msgstr "Los ayudantes blancos proporcionan información contextual."
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "¿Quién puede ver este grupo?"
@@ -15196,6 +17725,9 @@ msgstr "¿Quién podrá ver a este grupo?"
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr "Páginas del Wiki"
+
msgid "Wiki was successfully updated."
msgstr "El wiki se actualizó correctamente."
@@ -15268,15 +17800,9 @@ msgstr "documentación"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "Para vincular a una página (nueva), simplemente escriba %{link_example}"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "Cómo hacer la configuración"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "Sugerencia: Puede especificar la ruta completa para el nuevo archivo. Crearemos automáticamente cualquier directorio que sea necesario."
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "Nueva página de Wiki"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "¿Está seguro de que desea eliminar esta página?"
@@ -15292,20 +17818,17 @@ msgstr "Alguien editó esta página al mismo tiempo que usted. Por favor revise
msgid "WikiPageConflictMessage|the page"
msgstr "la página"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "Crear %{page_title}"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "Actualizar %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr "Crear %{pageTitle}"
-msgid "WikiPage|Page slug"
-msgstr "Indice de la página"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr "Actualizar %{pageTitle}"
msgid "WikiPage|Write your content or drag files here…"
msgstr "Escriba su contenido o arrastre archivos aquí…"
-msgid "Wiki|Create Page"
-msgstr "Crear página"
+msgid "Wiki|Create New Page"
+msgstr "Crear una página nueva"
msgid "Wiki|Create page"
msgstr "Crear página"
@@ -15325,6 +17848,9 @@ msgstr "Nueva página"
msgid "Wiki|Page history"
msgstr "Historial de página"
+msgid "Wiki|Page title"
+msgstr "Título de la página"
+
msgid "Wiki|Page version"
msgstr "Versión de la página"
@@ -15355,6 +17881,9 @@ msgstr "Escritura"
msgid "Write a comment or drag your files here…"
msgstr "Escriba un comentario o arrastre sus archivos aquí…"
+msgid "Write a comment…"
+msgstr "Escriba un comentario…"
+
msgid "Write access allowed"
msgstr "Acceso de escritura permitido"
@@ -15391,8 +17920,11 @@ msgstr "Está intentando eliminar un archivo que ha sido actualizado previamente
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr "Está intentando actualizar un archivo que ha sido modificado desde que comenzó a editarlo."
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr "Está conectado al servidor de Prometheus, pero actualmente no hay datos disponibles para mostrar."
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr ""
+msgstr "Está a punto de eliminar %{group_name}, al realizar esta acción también eliminará todos sus subgrupos y sus proyectos. ¡Los grupos eliminados NO se pueden restaurar! ¿Está ABSOLUTAMENTE seguro de que desea continuar?"
msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Va a eliminar %{project_full_name}. ¡No es posible restaurar un proyecto eliminado! ¿Está TOTALMENTE seguro?"
@@ -15404,7 +17936,7 @@ msgid "You are going to transfer %{project_full_name} to another owner. Are you
msgstr "Va a transferir %{project_full_name} a otro propietario. ¿Está TOTALMENTE seguro?"
msgid "You are not allowed to unlink your primary login account"
-msgstr ""
+msgstr "No tiene permiso para desvincular su cuenta principal de inicio de sesión"
msgid "You are now impersonating %{username}"
msgstr "Está suplantando la identidad de %{username}"
@@ -15445,6 +17977,9 @@ msgstr "Puede contribuir fácilmente pidiendo unirse a estos grupos."
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Puede instalar fácilmente un ejecutor en un clúster de Kubernetes. %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr "Puede invitar a un nuevo miembro a <strong>%{project_name}</strong> o invitar a otro grupo."
@@ -15458,10 +17993,10 @@ msgid "You can move around the graph by using the arrow keys."
msgstr "Puede moverse por el gráfico usando las teclas de flecha."
msgid "You can now submit a merge request to get this change into the original branch."
-msgstr ""
+msgstr "Puede enviar un merge request para tener este cambio en la rama original."
msgid "You can now submit a merge request to get this change into the original project."
-msgstr ""
+msgstr "Puede enviar un merge request para tener este cambio en el proyecto original."
msgid "You can only add files when you are on a branch"
msgstr "Solo puedes agregar archivos cuando estás en una rama"
@@ -15469,8 +18004,11 @@ msgstr "Solo puedes agregar archivos cuando estás en una rama"
msgid "You can only edit files when you are on a branch"
msgstr "Solo puede agregar archivos cuando está en una rama"
-msgid "You can only merge once the items above are resolved"
-msgstr "Solo puede hacer el merge una vez que haya resuelto los elementos anteriores"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
+msgstr ""
msgid "You can only transfer the project to namespaces you manage."
msgstr "Solo puede transferir el proyecto a los espacios de nombres que administre."
@@ -15490,6 +18028,9 @@ msgstr "Puede especificar el nivel de la notificación por grupo o por proyecto.
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "Puede probar su archivo .gitlab-ci.yml en %{linkStart}CI Lint%{linkEnd}."
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr "No puede acceder al archivo sin formato. Por favor, espere un minuto."
+
msgid "You cannot impersonate a blocked user"
msgstr "No puede suplantar a un usuario bloqueado"
@@ -15511,9 +18052,6 @@ msgstr "No puede escribir en esta instancia de sólo lectura de GitLab."
msgid "You could not create a new trigger."
msgstr "No es posible crear un nuevo disparador."
-msgid "You could not take ownership of trigger."
-msgstr "No es posible obtener la propiedad del disparador."
-
msgid "You do not have any subscriptions yet"
msgstr "Aún no tiene ninguna suscripción"
@@ -15527,7 +18065,7 @@ msgid "You do not have the correct permissions to override the settings from the
msgstr "No tiene los permisos necesarios para sobreescribir la configuración de la sincronización de grupos de LDAP."
msgid "You don't have any U2F devices registered yet."
-msgstr ""
+msgstr "No tiene ningún dispositivo U2F registrado."
msgid "You don't have any active chat names."
msgstr "No tiene ningún nick de chat activo."
@@ -15541,6 +18079,18 @@ msgstr "No tiene ninguna aplicación autorizada"
msgid "You don't have any deployments right now."
msgstr "No tienes ningún despliegue en este momento."
+msgid "You don't have any projects available."
+msgstr "No tiene ningún proyecto disponible."
+
+msgid "You don't have any recent searches"
+msgstr "No tiene ninguna búsquedas reciente"
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr "Se le ha concedido %{access_level} acceso al %{source_link} %{source_type}."
@@ -15565,6 +18115,12 @@ msgstr "No ha añadido aprobadores. Empiece por añadir usuarios o grupos."
msgid "You have reached your project limit"
msgstr "Has alcanzado el límite de tu proyecto"
+msgid "You haven't added any issues to your project yet"
+msgstr "Todavía no ha agregado ninguna incidencia a su proyecto"
+
+msgid "You haven't selected any issues yet"
+msgstr "Todavía no ha seleccionado ninguna incidencia"
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr "Dejó el \"%{membershipable_human_name}\" %{source_type}."
@@ -15581,10 +18137,10 @@ msgid "You must have permission to create a project in a namespace before forkin
msgstr "Debe tener permiso para crear un proyecto en un espacio de nombres antes de realizar fork."
msgid "You must provide a valid current password"
-msgstr ""
+msgstr "Debe proporcionar una contraseña válida"
msgid "You must provide your current password in order to change it."
-msgstr ""
+msgstr "Debe introducir su contraseña actual para poder cambiarla."
msgid "You need a different license to enable FileLocks feature"
msgstr "Necesita una licencia diferente para habilitar la función FileLocks"
@@ -15655,6 +18211,9 @@ msgstr "Se cerrará la sesión de su cuenta actual de forma automática."
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Tendrá que utilizar nombres de ramas diferentes para obtener resultados de comparación correctos."
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr "No tiene permiso para realizar cambios directamente en este proyecto. Se ha creado un fork de este proyecto que puede utilizar para realizar los cambios que desee, por lo que puede enviar un merge request."
@@ -15680,13 +18239,13 @@ msgid "YouTube"
msgstr "YouTube"
msgid "Your Commit Email will be used for web based operations, such as edits and merges."
-msgstr ""
+msgstr "Este correo electrónico se utilizará para operaciones basadas en la web, como por ejemplo, realizar ediciones y merges."
msgid "Your Conversational Development Index gives an overview of how you are using GitLab from a feature perspective. View how you compare with other organizations, discover features you are not using, and learn best practices through blog posts and white papers."
msgstr ""
msgid "Your Default Notification Email will be used for account notifications if a %{openingTag}group-specific email address%{closingTag} is not set."
-msgstr ""
+msgstr "Tu dirección de correo electrónico de notificación por defecto se utilizará para las notificaciones de la cuenta si no se establece una dirección de correo electrónico específica para el %{openingTag}grupo%{closingTag}."
msgid "Your GPG keys (%{count})"
msgstr "Sus claves GPG (%{count})"
@@ -15694,8 +18253,11 @@ msgstr "Sus claves GPG (%{count})"
msgid "Your Groups"
msgstr "Sus grupos"
+msgid "Your New Personal Access Token"
+msgstr "Su nuevo token de acceso personal"
+
msgid "Your Primary Email will be used for avatar detection."
-msgstr ""
+msgstr "Su dirección de correo electrónico principal se utilizará para la detección de avatar."
msgid "Your Projects (default)"
msgstr "Sus proyectos (por defecto)"
@@ -15704,13 +18266,13 @@ msgid "Your Projects' Activity"
msgstr "Actividad de sus proyectos"
msgid "Your Public Email will be displayed on your public profile."
-msgstr ""
+msgstr "Su dirección de correo electrónico pública se mostrará en su perfil público."
msgid "Your SSH keys (%{count})"
msgstr "Sus Claves SSH (%{count})"
-msgid "Your Todos"
-msgstr "Sus tareas pendientes"
+msgid "Your To-Do List"
+msgstr "Su lista de tareas pendientes"
msgid "Your U2F device did not send a valid JSON response."
msgstr "Su dispositivo U2F no envió una respuesta JSON válida."
@@ -15781,6 +18343,9 @@ msgstr "Su nuevo token SCIM"
msgid "Your new personal access token has been created."
msgstr "Se ha creado su nuevo token de acceso personal."
+msgid "Your pages are served under:"
+msgstr "Sus páginas se sirven en:"
+
msgid "Your password reset token has expired."
msgstr "Su token para restablecer la contraseña ha caducado."
@@ -15793,12 +18358,21 @@ msgstr "Tus proyectos"
msgid "Your request for access has been queued for review."
msgstr "Su solicitud de acceso ha sido puesta en cola para su revisión."
+msgid "Zoom meeting added"
+msgstr "Se ha añadido la reunión de Zoom"
+
+msgid "Zoom meeting removed"
+msgstr "Se ha eliminado la reunión de Zoom"
+
msgid "a deleted user"
msgstr "un usuario eliminado"
msgid "added %{created_at_timeago}"
msgstr "añadido %{created_at_timeago}"
+msgid "added a Zoom call to this issue"
+msgstr "añadió una llamada de Zoom a esta incidencia"
+
msgid "ago"
msgstr "hace"
@@ -15814,6 +18388,9 @@ msgstr "compartido previamente con este grupo"
msgid "among other things"
msgstr "entre otras cosas"
+msgid "assign yourself"
+msgstr "asignar a ti mismo"
+
msgid "attach a new file"
msgstr "adjuntar un nuevo archivo"
@@ -15832,6 +18409,12 @@ msgstr "no se puede modificar si un proyecto personal ya contiene etiquetas de r
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr "no se puede habilitar a menos que todos los dominios tengan certificados TLS"
+msgid "cannot be in the same project"
+msgstr "no puede estar en el mismo proyecto"
+
+msgid "cannot be modified"
+msgstr "no se puede modificar"
+
msgid "cannot block others"
msgstr "no puede bloquear a otros"
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr "no se puede bloquer"
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}Aprenda más sobre el analísis de contenedores %{linkEndTag}"
@@ -15946,6 +18532,9 @@ msgstr "Todos los tipos de informes"
msgid "ciReport|All severities"
msgstr "Todos los niveles de gravedad"
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr "Aplicar automáticamente el parche en una nueva rama"
+
msgid "ciReport|Class"
msgstr "Clase"
@@ -15964,12 +18553,12 @@ msgstr "Análisis de contenedores"
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "El análisis de contenedores detecta vulnerabilidades conocidas en sus imágenes de Docker."
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
+msgstr "Cree un merge request para implementar esta solución, o descargue y aplique el parche manualmente."
+
msgid "ciReport|Create issue"
msgstr "Crear incidencia"
-msgid "ciReport|Create merge request"
-msgstr "Crear merge request"
-
msgid "ciReport|DAST"
msgstr "DAST"
@@ -15985,11 +18574,11 @@ msgstr "Escaneo de seguridad"
msgid "ciReport|Description"
msgstr "Descripción"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
-msgstr "Descargue y aplique el parche para corregir esta vulnerabilidad."
+msgid "ciReport|Download patch to resolve"
+msgstr "Descargue el parche para resolver"
-msgid "ciReport|Download patch"
-msgstr "Descargar parche"
+msgid "ciReport|Download the patch to apply it manually"
+msgstr "Descargue el parche para aplicarlo manualmente"
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
msgstr "Dynamic Application Security Testing (DAST) detecta vulnerabilidades conocidas en su código fuente."
@@ -16009,33 +18598,14 @@ msgstr "Identificadores"
msgid "ciReport|Image"
msgstr "Imagen"
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr "Implemente esta solución creando un merge request"
-
msgid "ciReport|Instances"
msgstr "Instancias"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr "Investigue esta vulnerabilidad creando una incidencia"
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "Obtenga más información sobre cómo interactuar con los informes de seguridad (Alpha)."
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "El administrador de licencias detectó %d licencia para la rama de origen"
-msgstr[1] "El administrador de licencias detectó %d licencias para la rama de origen"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "El administrador de licencias detectó %d nueva licencia"
-msgstr[1] "El administrador de licencias detectó %d nueva licencia"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "El administrador de licencias no detectó ninguna licencia para la rama de origen"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "El administrador de licencias no detectó nuevas licencias"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr "Obtenga más información sobre cómo interactuar con los informes de seguridad"
msgid "ciReport|Links"
msgstr "Enlaces"
@@ -16061,6 +18631,9 @@ msgstr "No hay cambios en las métricas de rendimiento"
msgid "ciReport|Performance metrics"
msgstr "Métricas de rendimiento"
+msgid "ciReport|Resolve with merge request"
+msgstr "Resolver con un merge request"
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16120,11 +18693,14 @@ msgstr[1] "Utilizado por %{packagesString} y %{lastPackage}"
msgid "ciReport|View full report"
msgstr "Ver informe completo"
+msgid "comment"
+msgstr "comentario"
+
msgid "commented on %{link_to_project}"
msgstr "comentado en %{link_to_project}"
msgid "commit %{commit_id}"
-msgstr ""
+msgstr "commit %{commit_id}"
msgid "confidence|Confirmed"
msgstr "Confirmada"
@@ -16162,6 +18738,9 @@ msgstr "conectando"
msgid "could not read private key, is the passphrase correct?"
msgstr "no se ha podido leer la clave privada, ¿La contraseña es correcta?"
+msgid "created"
+msgstr "creado"
+
msgid "customize"
msgstr "personalizar"
@@ -16176,8 +18755,11 @@ msgstr[1] "días"
msgid "deleted"
msgstr "eliminado"
-msgid "deploy token"
-msgstr "desplegar token"
+msgid "deploy"
+msgstr "desplegar"
+
+msgid "design"
+msgstr "diseño"
msgid "detached"
msgstr "Desvinculado"
@@ -16185,11 +18767,6 @@ msgstr "Desvinculado"
msgid "disabled"
msgstr "deshabilitado"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] "discusión resuelta"
-msgstr[1] "discusiones resueltas"
-
msgid "done"
msgstr "hecho"
@@ -16198,17 +18775,29 @@ msgid_plural "drafts"
msgstr[0] "borrador"
msgstr[1] "borradores"
+msgid "e.g. %{token}"
+msgstr "por ejemplo %{token}"
+
msgid "element is not a hierarchy"
msgstr "el elemento no es una jerarquía"
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr "el correo electrónico '%{email}' no coincide con el dominio permitido de '%{email_domain}'"
+
msgid "enabled"
msgstr "habilitado"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr "encriptado: debe ser :requerido, :opcional o :migrando"
-msgid "epic"
-msgstr "épica"
+msgid "entries cannot be larger than 255 characters"
+msgstr "las entradas no pueden tener más de 255 caracteres"
+
+msgid "entries cannot be nil"
+msgstr "las entradas no pueden estar vacías"
+
+msgid "entries cannot contain HTML tags"
+msgstr "las entradas no pueden contener etiquetas HTML"
msgid "error"
msgstr "error"
@@ -16252,6 +18841,9 @@ msgstr "grupo"
msgid "has already been taken"
msgstr "ya está en uso"
+msgid "help"
+msgstr "ayuda"
+
msgid "here"
msgstr "aquí"
@@ -16285,7 +18877,7 @@ msgid "invalid milestone state `%{state}`"
msgstr "estado del hito invalido '%{state}'"
msgid "is an invalid IP address range"
-msgstr ""
+msgstr "este es un rango de direcciones IP no válido"
msgid "is enabled."
msgstr "está habilitado."
@@ -16296,21 +18888,21 @@ msgstr "no es válido porque hay un bloqueo en sentido descendente"
msgid "is invalid because there is upstream lock"
msgstr "no es válido porque hay un bloqueo en sentido ascendente"
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "no es un certificado X509 válido."
msgid "is not an email you own"
msgstr "no es un correo electrónico de su propiedad"
-msgid "is out of the hierarchy of the Group owning the template"
-msgstr "Está fuera de la jerarquía del grupo que posee la plantilla"
+msgid "is too long (maximum is 1000 entries)"
+msgstr "es demasiado largo (el máximo es de 1000 entradas)"
msgid "issue"
msgstr "incidencia"
-msgid "issue boards"
-msgstr "tablero de incidencias"
-
msgid "it is stored externally"
msgstr "es almacenado externamente"
@@ -16335,15 +18927,24 @@ msgstr "última versión"
msgid "leave %{group_name}"
msgstr "abandonar %{group_name}"
-msgid "license management"
-msgstr "gestión de licencias"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "bloqueado por %{path_lock_user_name} %{created_at}"
+msgid "log in"
+msgstr "iniciar sesión"
+
msgid "manual"
msgstr "manual"
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr "puede exponer información confidencial"
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "merge request"
@@ -16364,6 +18965,15 @@ msgstr "%{commitCount} se añadirá a %{targetBranch}."
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr "1 merge commit"
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "Restaure o use una rama diferente %{missingBranchName}"
@@ -16476,7 +19086,7 @@ msgid "mrWidget|Merge failed."
msgstr "Merge fallido."
msgid "mrWidget|Merge failed: %{mergeError}. Please try again."
-msgstr ""
+msgstr "Se ha producido un error al realizar el merge: %{mergeError}. Por favor, inténtelo de nuevo."
msgid "mrWidget|Merge locally"
msgstr "Merge local"
@@ -16487,6 +19097,9 @@ msgstr "merge request aprobado."
msgid "mrWidget|Merged by"
msgstr "Merge realizado por"
+msgid "mrWidget|More information"
+msgstr "Más información"
+
msgid "mrWidget|No approval required"
msgstr "No se requiere ninguna aprobación"
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "Solicitud de merge"
+msgid "mrWidget|Resolve WIP status"
+msgstr "Resolver estado WIP"
+
msgid "mrWidget|Resolve conflicts"
msgstr "Resolver conflictos"
@@ -16571,8 +19187,8 @@ msgstr "El branch de origen no será eliminado"
msgid "mrWidget|There are merge conflicts"
msgstr "Hay conflictos de merge"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "Hay discusiones sin resolver. Por favor resuelve estas discusiones"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr ""
@@ -16583,9 +19199,21 @@ msgstr "Esta merge request no se realizó automáticamente"
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "Este mergre request está en proceso de ser realizado"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Este proyecto está archivado, se ha deshabilitado el acceso de escritura"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "No tiene permiso para editar este proyecto directamente. Por favor, haga un fork para hacer cambios."
@@ -16595,6 +19223,9 @@ msgstr "Puede eliminar el branch de origen ahora"
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "Puede hacer merge de este merge request manualmente usando el"
+msgid "mrWidget|Your password"
+msgstr "Su contraseña"
+
msgid "mrWidget|branch does not exist."
msgstr "la rama no existe."
@@ -16628,9 +19259,15 @@ msgstr "nueva solicitud de fusión"
msgid "no contributions"
msgstr "sin contribuciones"
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr "ninguno"
+msgid "not found"
+msgstr "no encontrado"
+
msgid "notification emails"
msgstr "correos electrónicos de notificación"
@@ -16643,8 +19280,8 @@ msgstr "%{item}, %{nextItem}"
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr "%{item}, y %{lastItem}"
-msgid "or"
-msgstr "o"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr "o %{link_start}cree una nueva cuenta de Google%{link_end}"
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16659,8 +19296,11 @@ msgstr[1] "padres"
msgid "password"
msgstr "contraseña"
-msgid "personal access token"
-msgstr "token de acceso personal"
+msgid "pending comment"
+msgstr "comentario pendiente"
+
+msgid "pipeline"
+msgstr "pipeline"
msgid "point"
msgid_plural "points"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] "proyecto"
msgstr[1] "proyectos"
+msgid "project avatar"
+msgstr "avatar del proyecto"
+
msgid "quick actions"
msgstr "acciones rápidas"
msgid "register"
msgstr "registrar"
+msgid "released %{time}"
+msgstr "publicado el %{time}"
+
msgid "remaining"
msgstr "restante"
@@ -16699,6 +19345,9 @@ msgstr "eliminar la fecha de vencimiento"
msgid "remove weight"
msgstr "eliminar el peso"
+msgid "removed a Zoom call from this issue"
+msgstr "eliminó una llamada de Zoom de esta incidencia"
+
msgid "rendered diff"
msgstr "diff renderizado"
@@ -16785,15 +19434,38 @@ msgstr "la sintaxis es incorrecta"
msgid "this document"
msgstr "este documento"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] "hilo resuelto"
+msgstr[1] "hilos resueltos"
+
msgid "to help your contributors communicate effectively!"
msgstr "¡Para ayudar a sus colaboradores a comunicarse de manera efectiva!"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr "disparado"
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr "actualizado"
+msgid "updated %{time_ago}"
+msgstr "actualizado %{time_ago}"
+
+msgid "user avatar"
+msgstr "avatar del usuario"
+
msgid "username"
msgstr "usuario"
@@ -16803,11 +19475,14 @@ msgstr "¡Utilizar los clústeres de Kubernetes para implementar tu código!"
msgid "verify ownership"
msgstr "verificar el propietario"
+msgid "version %{versionIndex}"
+msgstr "versión %{versionIndex}"
+
msgid "via %{closed_via}"
-msgstr ""
+msgstr "vía %{closed_via}"
msgid "via merge request %{link}"
-msgstr ""
+msgstr "vía merge request %{link}"
msgid "view it on GitLab"
msgstr "ver en GitLab"
@@ -16818,12 +19493,18 @@ msgstr "ver el blob"
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr "Añadir un comentario o motivo para el descarte"
+msgid "vulnerability|Add comment"
+msgstr "Agregar un comentario"
+
msgid "vulnerability|Add comment & dismiss"
msgstr "Añadir comentario y descartar"
msgid "vulnerability|Dismiss vulnerability"
msgstr "Descartar vulnerabilidad"
+msgid "vulnerability|Save comment"
+msgstr "guardar el comentario"
+
msgid "vulnerability|Undo dismiss"
msgstr "Deshacer descartar"
diff --git a/locale/et_EE/gitlab.po b/locale/et_EE/gitlab.po
index d55f6904dc6..49d881a72a5 100644
--- a/locale/et_EE/gitlab.po
+++ b/locale/et_EE/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: et\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:46\n"
+"PO-Revision-Date: 2019-09-24 10:23\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/fa_IR/gitlab.po b/locale/fa_IR/gitlab.po
new file mode 100644
index 00000000000..413cf75f212
--- /dev/null
+++ b/locale/fa_IR/gitlab.po
@@ -0,0 +1,19524 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: gitlab-ee\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: GitLab (gitlab)\n"
+"Language-Team: Persian\n"
+"Language: fa_IR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: gitlab-ee\n"
+"X-Crowdin-Language: fa\n"
+"X-Crowdin-File: /master/locale/gitlab.pot\n"
+"PO-Revision-Date: 2019-09-24 10:10\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
+
+msgid " Please sign in."
+msgstr ""
+
+msgid " Try to %{action} this file again."
+msgstr ""
+
+msgid " You need to do this before %{grace_period_deadline}."
+msgstr ""
+
+msgid " and"
+msgstr ""
+
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
+msgid " degraded on %d point"
+msgid_plural " degraded on %d points"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " improved on %d point"
+msgid_plural " improved on %d points"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " or "
+msgstr ""
+
+msgid " or <!merge request id>"
+msgstr ""
+
+msgid " or <#epic id>"
+msgstr ""
+
+msgid " or <#issue id>"
+msgstr ""
+
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
+msgid "%d comment"
+msgid_plural "%d comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d commit"
+msgid_plural "%d commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d commit behind"
+msgid_plural "%d commits behind"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d commits"
+msgstr ""
+
+msgid "%d contribution"
+msgid_plural "%d contributions"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d failed test result"
+msgid_plural "%d failed test results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d fixed test result"
+msgid_plural "%d fixed test results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d issue"
+msgid_plural "%d issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d issue selected"
+msgid_plural "%d issues selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d layer"
+msgid_plural "%d layers"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d merge request"
+msgid_plural "%d merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d merge request that you don't have access to."
+msgid_plural "%d merge requests that you don't have access to."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d more comment"
+msgid_plural "%d more comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d staged change"
+msgid_plural "%d staged changes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%d unstaged change"
+msgid_plural "%d unstaged changes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%s additional commit has been omitted to prevent performance issues."
+msgid_plural "%s additional commits have been omitted to prevent performance issues."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{actionText} & %{openOrClose} %{noteable}"
+msgstr ""
+
+msgid "%{authorsName}'s thread"
+msgstr ""
+
+msgid "%{commit_author_link} authored %{commit_timeago}"
+msgstr ""
+
+msgid "%{count} LOC/commit"
+msgstr ""
+
+msgid "%{count} approval required from %{name}"
+msgid_plural "%{count} approvals required from %{name}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{count} approvals from %{name}"
+msgstr ""
+
+msgid "%{count} files touched"
+msgstr ""
+
+msgid "%{count} more"
+msgstr ""
+
+msgid "%{count} more assignees"
+msgstr ""
+
+msgid "%{count} of %{required} approvals from %{name}"
+msgstr ""
+
+msgid "%{count} of %{total}"
+msgstr ""
+
+msgid "%{count} participant"
+msgid_plural "%{count} participants"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{count} pending comment"
+msgid_plural "%{count} pending comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{duration}ms"
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
+msgid "%{filePath} deleted"
+msgstr ""
+
+msgid "%{firstLabel} +%{labelCount} more"
+msgstr ""
+
+msgid "%{gitlab_ci_yml} not found in this commit"
+msgstr ""
+
+msgid "%{group_docs_link_start}Groups%{group_docs_link_end} allow you to manage and collaborate across multiple projects. Members of a group have access to all of its projects."
+msgstr ""
+
+msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
+msgstr ""
+
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
+msgid "%{issuableType} will be removed! Are you sure?"
+msgstr ""
+
+msgid "%{label_for_message} unavailable"
+msgstr ""
+
+msgid "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free, automated, and open certificate authority (CA), that give digital certificates in order to enable HTTPS (SSL/TLS) for websites."
+msgstr ""
+
+msgid "%{level_name} is not allowed in a %{group_level_name} group."
+msgstr ""
+
+msgid "%{level_name} is not allowed since the fork source project has lower visibility."
+msgstr ""
+
+msgid "%{link_start}Read more%{link_end} about role permissions"
+msgstr ""
+
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
+msgid "%{loadingIcon} Started"
+msgstr ""
+
+msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
+msgstr ""
+
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
+msgid "%{mrText}, this issue will be closed automatically."
+msgstr ""
+
+msgid "%{name} contained %{resultsString}"
+msgstr ""
+
+msgid "%{name} found %{resultsString}"
+msgstr ""
+
+msgid "%{name}'s avatar"
+msgstr ""
+
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
+msgid "%{openOrClose} %{noteable}"
+msgstr ""
+
+msgid "%{percent}%% complete"
+msgstr ""
+
+msgid "%{service_title} activated."
+msgstr ""
+
+msgid "%{service_title} settings saved, but not activated."
+msgstr ""
+
+msgid "%{size} GiB"
+msgstr ""
+
+msgid "%{size} KiB"
+msgstr ""
+
+msgid "%{size} MiB"
+msgstr ""
+
+msgid "%{size} bytes"
+msgstr ""
+
+msgid "%{spammable_titlecase} was submitted to Akismet successfully."
+msgstr ""
+
+msgid "%{state} epics"
+msgstr ""
+
+msgid "%{strong_start}%{branch_count}%{strong_end} Branch"
+msgid_plural "%{strong_start}%{branch_count}%{strong_end} Branches"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{strong_start}%{commit_count}%{strong_end} Commit"
+msgid_plural "%{strong_start}%{commit_count}%{strong_end} Commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{strong_start}%{human_size}%{strong_end} Files"
+msgstr ""
+
+msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
+msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{tabname} changed"
+msgstr ""
+
+msgid "%{text} %{files}"
+msgid_plural "%{text} %{files} files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "%{text} is available"
+msgstr ""
+
+msgid "%{title} %{operator} %{threshold}"
+msgstr ""
+
+msgid "%{title} changes"
+msgstr ""
+
+msgid "%{unstaged} unstaged and %{staged} staged changes"
+msgstr ""
+
+msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
+msgstr ""
+
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
+msgid "%{user_name} profile page"
+msgstr ""
+
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
+msgid "%{verb} %{time_spent_value} spent time."
+msgstr ""
+
+msgid "'%{level}' is not a valid visibility level"
+msgstr ""
+
+msgid "'%{source}' is not a import source"
+msgstr ""
+
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
+msgid "(%d closed)"
+msgid_plural "(%d closed)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "(%{mrCount} merged)"
+msgstr ""
+
+msgid "(No changes)"
+msgstr ""
+
+msgid "(Show all)"
+msgstr ""
+
+msgid "(check progress)"
+msgstr ""
+
+msgid "(external source)"
+msgstr ""
+
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
+msgid "+ %{count} more"
+msgstr ""
+
+msgid "+ %{moreCount} more"
+msgstr ""
+
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
+msgid "+%{extraOptionCount} more"
+msgstr ""
+
+msgid ", or "
+msgstr ""
+
+msgid "- Runner is active and can process any new jobs"
+msgstr ""
+
+msgid "- Runner is paused and will not receive any new jobs"
+msgstr ""
+
+msgid "- show less"
+msgstr ""
+
+msgid "0 for unlimited"
+msgstr ""
+
+msgid "1 %{type} addition"
+msgid_plural "%{count} %{type} additions"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 %{type} modification"
+msgid_plural "%{count} %{type} modifications"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 Day"
+msgid_plural "%d Days"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 closed issue"
+msgid_plural "%{issues} closed issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 closed merge request"
+msgid_plural "%{merge_requests} closed merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 day"
+msgstr ""
+
+msgid "1 group"
+msgid_plural "%d groups"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 merged merge request"
+msgid_plural "%{merge_requests} merged merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 open issue"
+msgid_plural "%{issues} open issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 open merge request"
+msgid_plural "%{merge_requests} open merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 pipeline"
+msgid_plural "%d pipelines"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 role"
+msgid_plural "%d roles"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 user"
+msgid_plural "%d users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "1 week"
+msgstr ""
+
+msgid "1-9 contributions"
+msgstr ""
+
+msgid "10-19 contributions"
+msgstr ""
+
+msgid "1st contribution!"
+msgstr ""
+
+msgid "20-29 contributions"
+msgstr ""
+
+msgid "2FA"
+msgstr ""
+
+msgid "2FADevice|Registered On"
+msgstr ""
+
+msgid "3 days"
+msgstr ""
+
+msgid "3 hours"
+msgstr ""
+
+msgid "30 minutes"
+msgstr ""
+
+msgid "30+ contributions"
+msgstr ""
+
+msgid "403|Please contact your GitLab administrator to get permission."
+msgstr ""
+
+msgid "403|You don't have the permission to access this page."
+msgstr ""
+
+msgid "404|Make sure the address is correct and the page hasn't moved."
+msgstr ""
+
+msgid "404|Page Not Found"
+msgstr ""
+
+msgid "404|Please contact your GitLab administrator if you think this is a mistake."
+msgstr ""
+
+msgid "8 hours"
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"@johnsmith\"</code> will add \"By <a href=\"#\">@johnsmith</a>\" to all issues and comments originally created by johnsmith@example.com, and will set <a href=\"#\">@johnsmith</a> as the assignee on all issues originally assigned to johnsmith@example.com."
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"John Smith\"</code> will add \"By John Smith\" to all issues and comments originally created by johnsmith@example.com."
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"johnsm...@example.com\"</code> will add \"By johnsm...@example.com\" to all issues and comments originally created by johnsmith@example.com. The email address or username is masked to ensure the user's privacy."
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> will add \"By <a href=\"#\">johnsmith@example.com</a>\" to all issues and comments originally created by johnsmith@example.com. By default, the email address or username is masked to ensure the user's privacy. Use this option if you want to show the full email address."
+msgstr ""
+
+msgid "<no name set>"
+msgstr ""
+
+msgid "<no scopes selected>"
+msgstr ""
+
+msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
+msgstr ""
+
+msgid "<strong>%{created_count}</strong> created, <strong>%{accepted_count}</strong> accepted."
+msgstr ""
+
+msgid "<strong>%{created_count}</strong> created, <strong>%{closed_count}</strong> closed."
+msgstr ""
+
+msgid "<strong>%{group_name}</strong> group members"
+msgstr ""
+
+msgid "<strong>%{pushes}</strong> pushes, more than <strong>%{commits}</strong> commits by <strong>%{people}</strong> contributors."
+msgstr ""
+
+msgid "<strong>Deletes</strong> source branch"
+msgstr ""
+
+msgid "A 'Runner' is a process which runs a job. You can set up as many Runners as you need."
+msgstr ""
+
+msgid "A .NET Core console application template, customizable for any .NET Core project"
+msgstr ""
+
+msgid "A GitBook site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Hexo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Hugo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
+msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
+msgstr ""
+
+msgid "A default branch cannot be chosen for an empty project."
+msgstr ""
+
+msgid "A deleted user"
+msgstr ""
+
+msgid "A fork is a copy of a project.<br />Forking a repository allows you to make changes without affecting the original project."
+msgstr ""
+
+msgid "A member of the abuse team will review your report as soon as possible."
+msgstr ""
+
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A new impersonation token has been created."
+msgstr ""
+
+msgid "A plain HTML site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A ready-to-go template for use with Android apps."
+msgstr ""
+
+msgid "A ready-to-go template for use with iOS Swift apps."
+msgstr ""
+
+msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
+msgstr ""
+
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
+msgid "API Help"
+msgstr ""
+
+msgid "API Token"
+msgstr ""
+
+msgid "Abort"
+msgstr ""
+
+msgid "About GitLab"
+msgstr ""
+
+msgid "About GitLab CE"
+msgstr ""
+
+msgid "About auto deploy"
+msgstr ""
+
+msgid "About this feature"
+msgstr ""
+
+msgid "Abuse Reports"
+msgstr ""
+
+msgid "Abuse reports"
+msgstr ""
+
+msgid "Accept invitation"
+msgstr ""
+
+msgid "Accept terms"
+msgstr ""
+
+msgid "Accepted MR"
+msgstr ""
+
+msgid "Access Tokens"
+msgstr ""
+
+msgid "Access denied for your LDAP account."
+msgstr ""
+
+msgid "Access denied! Please verify you can add deploy keys to this repository."
+msgstr ""
+
+msgid "Access expiration date"
+msgstr ""
+
+msgid "Access forbidden. Check your access level."
+msgstr ""
+
+msgid "Access to '%{classification_label}' not allowed"
+msgstr ""
+
+msgid "AccessDropdown|Groups"
+msgstr ""
+
+msgid "AccessDropdown|Roles"
+msgstr ""
+
+msgid "AccessDropdown|Users"
+msgstr ""
+
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
+msgid "Account"
+msgstr ""
+
+msgid "Account and limit"
+msgstr ""
+
+msgid "Account: %{account}"
+msgstr ""
+
+msgid "Action to take when receiving an alert."
+msgstr ""
+
+msgid "Activate Service Desk"
+msgstr ""
+
+msgid "Active"
+msgstr ""
+
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
+msgid "Active Sessions"
+msgstr ""
+
+msgid "Activity"
+msgstr ""
+
+msgid "Add"
+msgstr ""
+
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Add CHANGELOG"
+msgstr ""
+
+msgid "Add CONTRIBUTING"
+msgstr ""
+
+msgid "Add GitLab to Slack"
+msgstr ""
+
+msgid "Add Group Webhooks and GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Add Jaeger URL"
+msgstr ""
+
+msgid "Add Kubernetes cluster"
+msgstr ""
+
+msgid "Add README"
+msgstr ""
+
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
+msgid "Add a GPG key"
+msgstr ""
+
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
+msgid "Add a bullet list"
+msgstr ""
+
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
+msgid "Add a general comment to this %{noteable_name}."
+msgstr ""
+
+msgid "Add a homepage to your wiki that contains information about your project and GitLab will display it here instead of this message."
+msgstr ""
+
+msgid "Add a link"
+msgstr ""
+
+msgid "Add a numbered list"
+msgstr ""
+
+msgid "Add a table"
+msgstr ""
+
+msgid "Add a task list"
+msgstr ""
+
+msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
+msgstr ""
+
+msgid "Add an SSH key"
+msgstr ""
+
+msgid "Add an issue"
+msgstr ""
+
+msgid "Add approval rule"
+msgstr ""
+
+msgid "Add approvers"
+msgstr ""
+
+msgid "Add bold text"
+msgstr ""
+
+msgid "Add child epic to an epic"
+msgstr ""
+
+msgid "Add comment now"
+msgstr ""
+
+msgid "Add email address"
+msgstr ""
+
+msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
+msgstr ""
+
+msgid "Add image comment"
+msgstr ""
+
+msgid "Add issues"
+msgstr ""
+
+msgid "Add italic text"
+msgstr ""
+
+msgid "Add label(s)"
+msgstr ""
+
+msgid "Add license"
+msgstr ""
+
+msgid "Add list"
+msgstr ""
+
+msgid "Add new application"
+msgstr ""
+
+msgid "Add new directory"
+msgstr ""
+
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Add or subtract spent time"
+msgstr ""
+
+msgid "Add reaction"
+msgstr ""
+
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
+msgid "Add to merge train"
+msgstr ""
+
+msgid "Add to merge train when pipeline succeeds"
+msgstr ""
+
+msgid "Add to project"
+msgstr ""
+
+msgid "Add to review"
+msgstr ""
+
+msgid "Add to tree"
+msgstr ""
+
+msgid "Add user(s) to the group:"
+msgstr ""
+
+msgid "Add users to group"
+msgstr ""
+
+msgid "AddMember|No users specified."
+msgstr ""
+
+msgid "AddMember|Too many users specified (limit is %{user_limit})"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
+msgid "Added at"
+msgstr ""
+
+msgid "Added in this version"
+msgstr ""
+
+msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
+msgstr ""
+
+msgid "Additional minutes"
+msgstr ""
+
+msgid "Additional text"
+msgstr ""
+
+msgid "Adds"
+msgstr ""
+
+msgid "Adds %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
+
+msgid "Admin Area"
+msgstr ""
+
+msgid "Admin Overview"
+msgstr ""
+
+msgid "Admin Section"
+msgstr ""
+
+msgid "Admin notes"
+msgstr ""
+
+msgid "AdminArea| You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide \"Ghost-user\". To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "AdminArea| You are about to permanently delete the user %{username}. This will delete all of the issues, merge requests, and groups linked to them. To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "AdminArea|Stop all jobs"
+msgstr ""
+
+msgid "AdminArea|Stop all jobs?"
+msgstr ""
+
+msgid "AdminArea|Stop jobs"
+msgstr ""
+
+msgid "AdminArea|Stopping jobs failed"
+msgstr ""
+
+msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
+msgstr ""
+
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
+msgid "AdminNote|Note"
+msgstr ""
+
+msgid "AdminProjects| You’re about to permanently delete the project %{projectName}, its repository, and all related resources including issues, merge requests, etc.. Once you confirm and press %{strong_start}Delete project%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "AdminProjects|Delete"
+msgstr ""
+
+msgid "AdminProjects|Delete Project %{projectName}?"
+msgstr ""
+
+msgid "AdminProjects|Delete project"
+msgstr ""
+
+msgid "AdminSettings|Auto DevOps domain"
+msgstr ""
+
+msgid "AdminSettings|Enable shared runners for new projects"
+msgstr ""
+
+msgid "AdminSettings|Environment variables are protected by default"
+msgstr ""
+
+msgid "AdminSettings|No required pipeline"
+msgstr ""
+
+msgid "AdminSettings|Required pipeline configuration"
+msgstr ""
+
+msgid "AdminSettings|Select a pipeline configuration file"
+msgstr ""
+
+msgid "AdminSettings|Select a template"
+msgstr ""
+
+msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
+msgstr ""
+
+msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
+msgstr ""
+
+msgid "AdminSettings|The required pipeline configuration can be selected from the %{code_start}gitlab-ci%{code_end} directory inside of the configured %{link_start}instance template repository%{link_end} or from GitLab provided configurations."
+msgstr ""
+
+msgid "AdminSettings|When creating a new environment variable it will be protected by default."
+msgstr ""
+
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
+msgid "AdminUsers|2FA Disabled"
+msgstr ""
+
+msgid "AdminUsers|2FA Enabled"
+msgstr ""
+
+msgid "AdminUsers|Active"
+msgstr ""
+
+msgid "AdminUsers|Admin"
+msgstr ""
+
+msgid "AdminUsers|Admins"
+msgstr ""
+
+msgid "AdminUsers|Block user"
+msgstr ""
+
+msgid "AdminUsers|Blocked"
+msgstr ""
+
+msgid "AdminUsers|Cannot unblock LDAP blocked users"
+msgstr ""
+
+msgid "AdminUsers|Delete User %{username} and contributions?"
+msgstr ""
+
+msgid "AdminUsers|Delete User %{username}?"
+msgstr ""
+
+msgid "AdminUsers|Delete user"
+msgstr ""
+
+msgid "AdminUsers|Delete user and contributions"
+msgstr ""
+
+msgid "AdminUsers|External"
+msgstr ""
+
+msgid "AdminUsers|It's you!"
+msgstr ""
+
+msgid "AdminUsers|New user"
+msgstr ""
+
+msgid "AdminUsers|No users found"
+msgstr ""
+
+msgid "AdminUsers|Search by name, email or username"
+msgstr ""
+
+msgid "AdminUsers|Search users"
+msgstr ""
+
+msgid "AdminUsers|Send email to users"
+msgstr ""
+
+msgid "AdminUsers|Sort by"
+msgstr ""
+
+msgid "AdminUsers|To confirm, type %{projectName}"
+msgstr ""
+
+msgid "AdminUsers|To confirm, type %{username}"
+msgstr ""
+
+msgid "AdminUsers|User will be blocked"
+msgstr ""
+
+msgid "AdminUsers|Without projects"
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Advanced permissions, Large File Storage and Two-Factor authentication settings."
+msgstr ""
+
+msgid "Advanced search functionality"
+msgstr ""
+
+msgid "Advanced settings"
+msgstr ""
+
+msgid "After a successful password update you will be redirected to login screen."
+msgstr ""
+
+msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
+msgstr ""
+
+msgid "Alert"
+msgid_plural "Alerts"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
+msgid "Alerts"
+msgstr ""
+
+msgid "All"
+msgstr ""
+
+msgid "All Members"
+msgstr ""
+
+msgid "All branches"
+msgstr ""
+
+msgid "All changes are committed"
+msgstr ""
+
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
+msgid "All email addresses will be used to identify your commits."
+msgstr ""
+
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "All groups and projects"
+msgstr ""
+
+msgid "All issues for this milestone are closed. You may close this milestone now."
+msgstr ""
+
+msgid "All merge conflicts were resolved. The merge request can now be merged."
+msgstr ""
+
+msgid "All projects"
+msgstr ""
+
+msgid "All users"
+msgstr ""
+
+msgid "All users must have a name."
+msgstr ""
+
+msgid "Allow \"%{group_name}\" to sign you in"
+msgstr ""
+
+msgid "Allow commits from members who can merge to the target branch."
+msgstr ""
+
+msgid "Allow group owners to manage LDAP-related settings"
+msgstr ""
+
+msgid "Allow mirrors to be set up for projects"
+msgstr ""
+
+msgid "Allow only the selected protocols to be used for Git access."
+msgstr ""
+
+msgid "Allow projects within this group to use Git LFS"
+msgstr ""
+
+msgid "Allow public access to pipelines and job details, including output logs and artifacts"
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
+msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
+msgstr ""
+
+msgid "Allow users to register any application to use GitLab as an OAuth provider"
+msgstr ""
+
+msgid "Allow users to request access"
+msgstr ""
+
+msgid "Allow users to request access if visibility is public or internal."
+msgstr ""
+
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
+msgid "Allowed to fail"
+msgstr ""
+
+msgid "Allows you to add and manage Kubernetes clusters."
+msgstr ""
+
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
+
+msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
+msgstr ""
+
+msgid "An application called %{link_to_client} is requesting access to your GitLab account."
+msgstr ""
+
+msgid "An empty GitLab User field will add the FogBugz user's full name (e.g. \"By John Smith\") in the description of all issues and comments. It will also associate and/or assign these issues and comments with the project creator."
+msgstr ""
+
+msgid "An error has occurred"
+msgstr ""
+
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
+
+msgid "An error occurred adding a new draft."
+msgstr ""
+
+msgid "An error occurred creating the new branch."
+msgstr ""
+
+msgid "An error occurred fetching the approval rules."
+msgstr ""
+
+msgid "An error occurred fetching the approvers for the new rule."
+msgstr ""
+
+msgid "An error occurred fetching the dropdown data."
+msgstr ""
+
+msgid "An error occurred previewing the blob"
+msgstr ""
+
+msgid "An error occurred when toggling the notification subscription"
+msgstr ""
+
+msgid "An error occurred when trying to resolve a comment. Please try again."
+msgstr ""
+
+msgid "An error occurred when trying to resolve a discussion. Please try again."
+msgstr ""
+
+msgid "An error occurred when updating the issue weight"
+msgstr ""
+
+msgid "An error occurred while deleting the approvers group"
+msgstr ""
+
+msgid "An error occurred while deleting the comment"
+msgstr ""
+
+msgid "An error occurred while detecting host keys"
+msgstr ""
+
+msgid "An error occurred while disabling Service Desk."
+msgstr ""
+
+msgid "An error occurred while dismissing the alert. Refresh the page and try again."
+msgstr ""
+
+msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again."
+msgstr ""
+
+msgid "An error occurred while enabling Service Desk."
+msgstr ""
+
+msgid "An error occurred while fetching environments."
+msgstr ""
+
+msgid "An error occurred while fetching folder content."
+msgstr ""
+
+msgid "An error occurred while fetching issues."
+msgstr ""
+
+msgid "An error occurred while fetching label colors."
+msgstr ""
+
+msgid "An error occurred while fetching markdown preview"
+msgstr ""
+
+msgid "An error occurred while fetching pending comments"
+msgstr ""
+
+msgid "An error occurred while fetching projects autocomplete."
+msgstr ""
+
+msgid "An error occurred while fetching sidebar data"
+msgstr ""
+
+msgid "An error occurred while fetching the Service Desk address."
+msgstr ""
+
+msgid "An error occurred while fetching the board lists. Please try again."
+msgstr ""
+
+msgid "An error occurred while fetching the builds."
+msgstr ""
+
+msgid "An error occurred while fetching the job log."
+msgstr ""
+
+msgid "An error occurred while fetching the job."
+msgstr ""
+
+msgid "An error occurred while fetching the jobs."
+msgstr ""
+
+msgid "An error occurred while fetching the pipeline."
+msgstr ""
+
+msgid "An error occurred while fetching the releases. Please try again."
+msgstr ""
+
+msgid "An error occurred while fetching this tab."
+msgstr ""
+
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
+msgid "An error occurred while getting projects"
+msgstr ""
+
+msgid "An error occurred while importing project: %{details}"
+msgstr ""
+
+msgid "An error occurred while initializing path locks"
+msgstr ""
+
+msgid "An error occurred while loading chart data"
+msgstr ""
+
+msgid "An error occurred while loading commit signatures"
+msgstr ""
+
+msgid "An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "An error occurred while loading diff"
+msgstr ""
+
+msgid "An error occurred while loading filenames"
+msgstr ""
+
+msgid "An error occurred while loading the file"
+msgstr ""
+
+msgid "An error occurred while loading the subscription details."
+msgstr ""
+
+msgid "An error occurred while making the request."
+msgstr ""
+
+msgid "An error occurred while moving the issue."
+msgstr ""
+
+msgid "An error occurred while parsing recent searches"
+msgstr ""
+
+msgid "An error occurred while removing epics."
+msgstr ""
+
+msgid "An error occurred while removing issues."
+msgstr ""
+
+msgid "An error occurred while rendering preview broadcast message"
+msgstr ""
+
+msgid "An error occurred while reordering issues."
+msgstr ""
+
+msgid "An error occurred while retrieving calendar activity"
+msgstr ""
+
+msgid "An error occurred while retrieving diff"
+msgstr ""
+
+msgid "An error occurred while saving LDAP override status. Please try again."
+msgstr ""
+
+msgid "An error occurred while saving assignees"
+msgstr ""
+
+msgid "An error occurred while saving the approval settings"
+msgstr ""
+
+msgid "An error occurred while subscribing to notifications."
+msgstr ""
+
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
+msgid "An error occurred while unsubscribing to notifications."
+msgstr ""
+
+msgid "An error occurred while updating approvers"
+msgstr ""
+
+msgid "An error occurred while updating the comment"
+msgstr ""
+
+msgid "An error occurred while validating username"
+msgstr ""
+
+msgid "An error occurred whilst committing your changes."
+msgstr ""
+
+msgid "An error occurred whilst fetching the job trace."
+msgstr ""
+
+msgid "An error occurred whilst fetching the latest pipeline."
+msgstr ""
+
+msgid "An error occurred whilst getting files for - %{branchId}"
+msgstr ""
+
+msgid "An error occurred whilst loading all the files."
+msgstr ""
+
+msgid "An error occurred whilst loading the file content."
+msgstr ""
+
+msgid "An error occurred whilst loading the file."
+msgstr ""
+
+msgid "An error occurred whilst loading the merge request changes."
+msgstr ""
+
+msgid "An error occurred whilst loading the merge request version data."
+msgstr ""
+
+msgid "An error occurred whilst loading the merge request."
+msgstr ""
+
+msgid "An error occurred whilst loading the pipelines jobs."
+msgstr ""
+
+msgid "An error occurred. Please try again."
+msgstr ""
+
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
+msgid "An unexpected error occurred while checking the project environment."
+msgstr ""
+
+msgid "An unexpected error occurred while checking the project runners."
+msgstr ""
+
+msgid "An unexpected error occurred while communicating with the Web Terminal."
+msgstr ""
+
+msgid "An unexpected error occurred while starting the Web Terminal."
+msgstr ""
+
+msgid "An unexpected error occurred while stopping the Web Terminal."
+msgstr ""
+
+msgid "Analytics"
+msgstr ""
+
+msgid "Analytics|Timeframe"
+msgstr ""
+
+msgid "Ancestors"
+msgstr ""
+
+msgid "Anonymous"
+msgstr ""
+
+msgid "Anti-spam verification"
+msgstr ""
+
+msgid "Any"
+msgstr ""
+
+msgid "Any Label"
+msgstr ""
+
+msgid "Any Milestone"
+msgstr ""
+
+msgid "Any encrypted tokens"
+msgstr ""
+
+msgid "Any namespace"
+msgstr ""
+
+msgid "Any user"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Appearance was successfully created."
+msgstr ""
+
+msgid "Appearance was successfully updated."
+msgstr ""
+
+msgid "Append the comment with %{TABLEFLIP}"
+msgstr ""
+
+msgid "Append the comment with %{shrug}"
+msgstr ""
+
+msgid "Application"
+msgstr ""
+
+msgid "Application ID"
+msgstr ""
+
+msgid "Application settings saved successfully"
+msgstr ""
+
+msgid "Application uninstalled but failed to destroy: %{error_message}"
+msgstr ""
+
+msgid "Application was successfully destroyed."
+msgstr ""
+
+msgid "Application was successfully updated."
+msgstr ""
+
+msgid "Application: %{name}"
+msgstr ""
+
+msgid "Applications"
+msgstr ""
+
+msgid "Applied"
+msgstr ""
+
+msgid "Apply a label"
+msgstr ""
+
+msgid "Apply suggestion"
+msgstr ""
+
+msgid "Applying command"
+msgstr ""
+
+msgid "Applying command to %{commandDescription}"
+msgstr ""
+
+msgid "Applying multiple commands"
+msgstr ""
+
+msgid "Applying suggestion"
+msgstr ""
+
+msgid "ApprovalRuleRemove|%d member"
+msgid_plural "ApprovalRuleRemove|%d members"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ApprovalRuleRemove|Approvals from this member are not revoked."
+msgid_plural "ApprovalRuleRemove|Approvals from these members are not revoked."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ApprovalRuleRemove|You are about to remove the %{name} approver group which has %{nMembers}."
+msgstr ""
+
+msgid "ApprovalRuleSummary|%d member"
+msgid_plural "ApprovalRuleSummary|%d members"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ApprovalRuleSummary|%{count} approval required from %{membersCount}"
+msgid_plural "ApprovalRuleSummary|%{count} approvals required from %{membersCount}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
+msgstr ""
+
+msgid "ApprovalRule|Approvers"
+msgstr ""
+
+msgid "ApprovalRule|Name"
+msgstr ""
+
+msgid "ApprovalRule|No. approvals required"
+msgstr ""
+
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
+msgid "ApprovalRule|e.g. QA, Security, etc."
+msgstr ""
+
+msgid "Approvals"
+msgstr ""
+
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
+msgid "Apr"
+msgstr ""
+
+msgid "April"
+msgstr ""
+
+msgid "Archive jobs"
+msgstr ""
+
+msgid "Archive project"
+msgstr ""
+
+msgid "Archived project! Repository and other project resources are read-only"
+msgstr ""
+
+msgid "Archived projects"
+msgstr ""
+
+msgid "Archiving the project will make it entirely read-only. It is hidden from the dashboard and doesn't show up in searches. <strong>The repository cannot be committed to, and no issues, comments or other entities can be created.</strong>"
+msgstr ""
+
+msgid "Are you sure"
+msgstr ""
+
+msgid "Are you sure that you want to archive this project?"
+msgstr ""
+
+msgid "Are you sure that you want to unarchive this project?"
+msgstr ""
+
+msgid "Are you sure you want to cancel creating this comment?"
+msgstr ""
+
+msgid "Are you sure you want to cancel editing this comment?"
+msgstr ""
+
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
+msgid "Are you sure you want to delete this device? This action cannot be undone."
+msgstr ""
+
+msgid "Are you sure you want to delete this list?"
+msgstr ""
+
+msgid "Are you sure you want to delete this pipeline schedule?"
+msgstr ""
+
+msgid "Are you sure you want to erase this build?"
+msgstr ""
+
+msgid "Are you sure you want to lose unsaved changes?"
+msgstr ""
+
+msgid "Are you sure you want to lose your issue information?"
+msgstr ""
+
+msgid "Are you sure you want to permanently delete this license?"
+msgstr ""
+
+msgid "Are you sure you want to regenerate the public key? You will have to update the public key on the remote server before mirroring will work again."
+msgstr ""
+
+msgid "Are you sure you want to remove %{group_name}?"
+msgstr ""
+
+msgid "Are you sure you want to remove the attachment?"
+msgstr ""
+
+msgid "Are you sure you want to remove this identity?"
+msgstr ""
+
+msgid "Are you sure you want to reset registration token?"
+msgstr ""
+
+msgid "Are you sure you want to reset the SCIM token? SCIM provisioning will stop working until the new token is updated."
+msgstr ""
+
+msgid "Are you sure you want to reset the health check token?"
+msgstr ""
+
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
+msgid "Are you sure you want to revoke this nickname?"
+msgstr ""
+
+msgid "Are you sure you want to stop this environment?"
+msgstr ""
+
+msgid "Are you sure you want to unlock %{path_lock_path}?"
+msgstr ""
+
+msgid "Are you sure you want to unsubscribe from the %{type}: %{link_to_noteable_text}?"
+msgstr ""
+
+msgid "Are you sure?"
+msgstr ""
+
+msgid "Are you sure? All commits that were signed with this GPG key will be unverified."
+msgstr ""
+
+msgid "Are you sure? Removing this GPG key does not affect already signed commits."
+msgstr ""
+
+msgid "Are you sure? This will invalidate your registered applications and U2F devices."
+msgstr ""
+
+msgid "Artifact ID"
+msgstr ""
+
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
+msgid "Artifacts"
+msgstr ""
+
+msgid "As U2F devices are only supported by a few browsers, we require that you set up a two-factor authentication app before a U2F device. That way you'll always be able to log in - even when you're using an unsupported browser."
+msgstr ""
+
+msgid "AsanaService|%{user} pushed to branch %{branch} of %{project_name} ( %{commit_url} ):"
+msgstr ""
+
+msgid "AsanaService|Asana - Teamwork without email"
+msgstr ""
+
+msgid "AsanaService|Comma-separated list of branches which will be automatically inspected. Leave blank to include all branches."
+msgstr ""
+
+msgid "AsanaService|User Personal Access Token. User must have access to task, all comments will be attributed to this user."
+msgstr ""
+
+msgid "Ascending"
+msgstr ""
+
+msgid "Ask your group maintainer to set up a group Runner."
+msgstr ""
+
+msgid "Assertion consumer service URL"
+msgstr ""
+
+msgid "Assets"
+msgstr ""
+
+msgid "Assign"
+msgstr ""
+
+msgid "Assign custom color like #FF0000"
+msgstr ""
+
+msgid "Assign epic"
+msgstr ""
+
+msgid "Assign labels"
+msgstr ""
+
+msgid "Assign milestone"
+msgstr ""
+
+msgid "Assign some issues to this milestone."
+msgstr ""
+
+msgid "Assign to"
+msgstr ""
+
+msgid "Assign yourself to these issues"
+msgstr ""
+
+msgid "Assign yourself to this issue"
+msgstr ""
+
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to me"
+msgstr ""
+
+msgid "Assignee"
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Assignee lists not available with your current license"
+msgstr ""
+
+msgid "Assignee lists show all issues assigned to the selected user."
+msgstr ""
+
+msgid "Assignee(s)"
+msgstr ""
+
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
+msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
+msgstr ""
+
+msgid "Attach a file"
+msgstr ""
+
+msgid "Attach a file by drag &amp; drop or %{upload_link}"
+msgstr ""
+
+msgid "Attaching a file"
+msgid_plural "Attaching %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Attaching the file failed."
+msgstr ""
+
+msgid "Audit Events"
+msgstr ""
+
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
+msgid "Aug"
+msgstr ""
+
+msgid "August"
+msgstr ""
+
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Authentication failed: %{error_message}"
+msgstr ""
+
+msgid "Authentication log"
+msgstr ""
+
+msgid "Authentication method"
+msgstr ""
+
+msgid "Authentication method updated"
+msgstr ""
+
+msgid "Authentication via U2F device failed."
+msgstr ""
+
+msgid "Author"
+msgstr ""
+
+msgid "Authorization code:"
+msgstr ""
+
+msgid "Authorization key"
+msgstr ""
+
+msgid "Authorization was granted by entering your username and password in the application."
+msgstr ""
+
+msgid "Authorize"
+msgstr ""
+
+msgid "Authorize %{link_to_client} to use your account?"
+msgstr ""
+
+msgid "Authorized %{new_chat_name}"
+msgstr ""
+
+msgid "Authorized At"
+msgstr ""
+
+msgid "Authorized applications (%{size})"
+msgstr ""
+
+msgid "Authors: %{authors}"
+msgstr ""
+
+msgid "Auto DevOps"
+msgstr ""
+
+msgid "Auto DevOps enabled"
+msgstr ""
+
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
+msgid "Auto License Compliance"
+msgstr ""
+
+msgid "Auto-cancel redundant, pending pipelines"
+msgstr ""
+
+msgid "AutoDevOps|Auto DevOps"
+msgstr ""
+
+msgid "AutoDevOps|Auto DevOps documentation"
+msgstr ""
+
+msgid "AutoDevOps|Enable in settings"
+msgstr ""
+
+msgid "AutoDevOps|It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the %{link_to_documentation}"
+msgstr ""
+
+msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
+msgstr ""
+
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
+msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
+msgstr ""
+
+msgid "Automatic certificate management using Let's Encrypt"
+msgstr ""
+
+msgid "Automatically marked as default internal user"
+msgstr ""
+
+msgid "Automatically resolved"
+msgstr ""
+
+msgid "Automatically update this project's branches and tags from the upstream repository every hour."
+msgstr ""
+
+msgid "Autosave|Note"
+msgstr ""
+
+msgid "Available"
+msgstr ""
+
+msgid "Available group Runners: %{runners}"
+msgstr ""
+
+msgid "Available shared Runners:"
+msgstr ""
+
+msgid "Available specific runners"
+msgstr ""
+
+msgid "Avatar for %{assigneeName}"
+msgstr ""
+
+msgid "Avatar for %{name}"
+msgstr ""
+
+msgid "Avatar will be removed. Are you sure?"
+msgstr ""
+
+msgid "Average per day: %{average}"
+msgstr ""
+
+msgid "Background Color"
+msgstr ""
+
+msgid "Background Jobs"
+msgstr ""
+
+msgid "Background color"
+msgstr ""
+
+msgid "Badges"
+msgstr ""
+
+msgid "Badges|A new badge was added."
+msgstr ""
+
+msgid "Badges|Add badge"
+msgstr ""
+
+msgid "Badges|Adding the badge failed, please check the entered URLs and try again."
+msgstr ""
+
+msgid "Badges|Badge image URL"
+msgstr ""
+
+msgid "Badges|Badge image preview"
+msgstr ""
+
+msgid "Badges|Delete badge"
+msgstr ""
+
+msgid "Badges|Delete badge?"
+msgstr ""
+
+msgid "Badges|Deleting the badge failed, please try again."
+msgstr ""
+
+msgid "Badges|Group Badge"
+msgstr ""
+
+msgid "Badges|Link"
+msgstr ""
+
+msgid "Badges|No badge image"
+msgstr ""
+
+msgid "Badges|No image to preview"
+msgstr ""
+
+msgid "Badges|Please fill in a valid URL"
+msgstr ""
+
+msgid "Badges|Project Badge"
+msgstr ""
+
+msgid "Badges|Reload badge image"
+msgstr ""
+
+msgid "Badges|Save changes"
+msgstr ""
+
+msgid "Badges|Saving the badge failed, please check the entered URLs and try again."
+msgstr ""
+
+msgid "Badges|The %{docsLinkStart}variables%{docsLinkEnd} GitLab supports: %{placeholders}"
+msgstr ""
+
+msgid "Badges|The badge was deleted."
+msgstr ""
+
+msgid "Badges|The badge was saved."
+msgstr ""
+
+msgid "Badges|This group has no badges"
+msgstr ""
+
+msgid "Badges|This project has no badges"
+msgstr ""
+
+msgid "Badges|You are going to delete this badge. Deleted badges <strong>cannot</strong> be restored."
+msgstr ""
+
+msgid "Badges|Your badges"
+msgstr ""
+
+msgid "Badges|e.g. %{exampleUrl}"
+msgstr ""
+
+msgid "Badge|New"
+msgstr ""
+
+msgid "Balsamiq file could not be loaded."
+msgstr ""
+
+msgid "BambooService|A continuous integration and build server"
+msgstr ""
+
+msgid "BambooService|A user with API access, if applicable"
+msgstr ""
+
+msgid "BambooService|Atlassian Bamboo CI"
+msgstr ""
+
+msgid "BambooService|Bamboo build plan key like KEY"
+msgstr ""
+
+msgid "BambooService|Bamboo root URL like https://bamboo.example.com"
+msgstr ""
+
+msgid "BambooService|You must set up automatic revision labeling and a repository trigger in Bamboo."
+msgstr ""
+
+msgid "BatchComments|Delete all pending comments"
+msgstr ""
+
+msgid "BatchComments|Discard review?"
+msgstr ""
+
+msgid "BatchComments|You're about to discard your review which will delete all of your pending comments. The deleted comments %{strong_start}cannot%{strong_end} be restored."
+msgstr ""
+
+msgid "Be careful. Changing the project's namespace can have unintended side effects."
+msgstr ""
+
+msgid "Be careful. Renaming a project's repository can have unintended side effects."
+msgstr ""
+
+msgid "Begin with the selected commit"
+msgstr ""
+
+msgid "Below are examples of regex for existing tools:"
+msgstr ""
+
+msgid "Below you will find all the groups that are public."
+msgstr ""
+
+msgid "Billing"
+msgstr ""
+
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
+
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
+
+msgid "BillingPlans|Current plan"
+msgstr ""
+
+msgid "BillingPlans|Downgrade"
+msgstr ""
+
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
+msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
+msgstr ""
+
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
+
+msgid "BillingPlans|Manage plan"
+msgstr ""
+
+msgid "BillingPlans|Pricing page"
+msgstr ""
+
+msgid "BillingPlans|See all %{plan_name} features"
+msgstr ""
+
+msgid "BillingPlans|This group uses the plan associated with its parent group."
+msgstr ""
+
+msgid "BillingPlans|To manage the plan for this group, visit the billing section of %{parent_billing_page_link}."
+msgstr ""
+
+msgid "BillingPlans|Upgrade"
+msgstr ""
+
+msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
+msgstr ""
+
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
+
+msgid "BillingPlans|features"
+msgstr ""
+
+msgid "BillingPlans|frequently asked questions"
+msgstr ""
+
+msgid "BillingPlans|monthly"
+msgstr ""
+
+msgid "BillingPlans|paid annually at %{price_per_year}"
+msgstr ""
+
+msgid "BillingPlans|per user"
+msgstr ""
+
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
+msgid "Bitbucket Server Import"
+msgstr ""
+
+msgid "Bitbucket import"
+msgstr ""
+
+msgid "Block"
+msgstr ""
+
+msgid "Blocked"
+msgstr ""
+
+msgid "Blog"
+msgstr ""
+
+msgid "Blue helpers indicate an action to be taken."
+msgstr ""
+
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
+msgid "Boards"
+msgstr ""
+
+msgid "Boards|Collapse"
+msgstr ""
+
+msgid "Boards|Edit board"
+msgstr ""
+
+msgid "Boards|Expand"
+msgstr ""
+
+msgid "Boards|View scope"
+msgstr ""
+
+msgid "Branch"
+msgstr ""
+
+msgid "Branch %{branchName} was not found in this project's repository."
+msgstr ""
+
+msgid "Branch <strong>%{branch_name}</strong> was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}"
+msgstr ""
+
+msgid "Branch has changed"
+msgstr ""
+
+msgid "Branch is already taken"
+msgstr ""
+
+msgid "Branch name"
+msgstr ""
+
+msgid "Branch not loaded - %{branchId}"
+msgstr ""
+
+msgid "BranchSwitcherPlaceholder|Search branches"
+msgstr ""
+
+msgid "BranchSwitcherTitle|Switch branch"
+msgstr ""
+
+msgid "Branches"
+msgstr ""
+
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project maintainer or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
+msgid "Broadcast Message was successfully created."
+msgstr ""
+
+msgid "Broadcast Message was successfully updated."
+msgstr ""
+
+msgid "Browse Directory"
+msgstr ""
+
+msgid "Browse File"
+msgstr ""
+
+msgid "Browse Files"
+msgstr ""
+
+msgid "Browse artifacts"
+msgstr ""
+
+msgid "Browse files"
+msgstr ""
+
+msgid "Built-in"
+msgstr ""
+
+msgid "BurndownChartLabel|Guideline"
+msgstr ""
+
+msgid "BurndownChartLabel|Open issue weight"
+msgstr ""
+
+msgid "BurndownChartLabel|Open issues"
+msgstr ""
+
+msgid "BurndownChartLabel|Progress"
+msgstr ""
+
+msgid "BurndownChartLabel|Remaining"
+msgstr ""
+
+msgid "Business"
+msgstr ""
+
+msgid "Business metrics (Custom)"
+msgstr ""
+
+msgid "Buy EE"
+msgstr ""
+
+msgid "Buy GitLab Enterprise Edition"
+msgstr ""
+
+msgid "By %{user_name}"
+msgstr ""
+
+msgid "By default GitLab sends emails in HTML and plain text formats so mail clients can choose what format to use. Disable this option if you only want to send emails in plain text format."
+msgstr ""
+
+msgid "By default, all projects and groups will use the global notifications setting."
+msgstr ""
+
+msgid "ByAuthor|by"
+msgstr ""
+
+msgid "CHANGELOG"
+msgstr ""
+
+msgid "CI / CD"
+msgstr ""
+
+msgid "CI / CD Charts"
+msgstr ""
+
+msgid "CI / CD Settings"
+msgstr ""
+
+msgid "CI Lint"
+msgstr ""
+
+msgid "CI variables"
+msgstr ""
+
+msgid "CI will run using the credentials assigned above."
+msgstr ""
+
+msgid "CI/CD"
+msgstr ""
+
+msgid "CI/CD configuration"
+msgstr ""
+
+msgid "CI/CD for external repo"
+msgstr ""
+
+msgid "CI/CD settings"
+msgstr ""
+
+msgid "CICD|Auto DevOps"
+msgstr ""
+
+msgid "CICD|Auto DevOps will automatically build, test, and deploy your application based on a predefined Continuous Integration and Delivery configuration."
+msgstr ""
+
+msgid "CICD|Automatic deployment to staging, manual deployment to production"
+msgstr ""
+
+msgid "CICD|Continuous deployment to production"
+msgstr ""
+
+msgid "CICD|Continuous deployment to production using timed incremental rollout"
+msgstr ""
+
+msgid "CICD|Default to Auto DevOps pipeline"
+msgstr ""
+
+msgid "CICD|Default to Auto DevOps pipeline for all projects"
+msgstr ""
+
+msgid "CICD|Deployment strategy"
+msgstr ""
+
+msgid "CICD|Jobs"
+msgstr ""
+
+msgid "CICD|Learn more about Auto DevOps"
+msgstr ""
+
+msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
+msgstr ""
+
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
+
+msgid "CICD|group enabled"
+msgstr ""
+
+msgid "CICD|instance enabled"
+msgstr ""
+
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
+msgid "CONTRIBUTING"
+msgstr ""
+
+msgid "Callback URL"
+msgstr ""
+
+msgid "Can override approvers and approvals required per merge request"
+msgstr ""
+
+msgid "Can't find HEAD commit for this branch"
+msgstr ""
+
+msgid "Can't find variable: ZiteReader"
+msgstr ""
+
+msgid "Can't remove group members without group managed account"
+msgstr ""
+
+msgid "Can't scan the code?"
+msgstr ""
+
+msgid "Canary Deployments is a popular CI strategy, where a small portion of the fleet is updated to the new version of your application."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Cancel running"
+msgstr ""
+
+msgid "Cancel this job"
+msgstr ""
+
+msgid "Cancelling Preview"
+msgstr ""
+
+msgid "Cannot be merged automatically"
+msgstr ""
+
+msgid "Cannot create the abuse report. The user has been deleted."
+msgstr ""
+
+msgid "Cannot create the abuse report. This user has been blocked."
+msgstr ""
+
+msgid "Cannot merge"
+msgstr ""
+
+msgid "Cannot modify managed Kubernetes cluster"
+msgstr ""
+
+msgid "Cannot refer to a group milestone by an internal id!"
+msgstr ""
+
+msgid "Cannot render the image. Maximum character count (%{charLimit}) has been exceeded."
+msgstr ""
+
+msgid "Cannot show preview. For previews on sketch files, they must have the file format introduced by Sketch version 43 and above."
+msgstr ""
+
+msgid "Cannot skip two factor authentication setup"
+msgstr ""
+
+msgid "Capacity threshold"
+msgstr ""
+
+msgid "Certificate"
+msgstr ""
+
+msgid "Certificate (PEM)"
+msgstr ""
+
+msgid "Change Weight"
+msgstr ""
+
+msgid "Change assignee"
+msgstr ""
+
+msgid "Change assignee(s)"
+msgstr ""
+
+msgid "Change assignee(s)."
+msgstr ""
+
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
+msgid "Change path"
+msgstr ""
+
+msgid "Change permissions"
+msgstr ""
+
+msgid "Change template"
+msgstr ""
+
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
+msgid "Change title"
+msgstr ""
+
+msgid "Change your password"
+msgstr ""
+
+msgid "Change your password or recover your current one"
+msgstr ""
+
+msgid "ChangeTypeActionLabel|Pick into branch"
+msgstr ""
+
+msgid "ChangeTypeActionLabel|Revert in branch"
+msgstr ""
+
+msgid "ChangeTypeAction|Cherry-pick"
+msgstr ""
+
+msgid "ChangeTypeAction|Revert"
+msgstr ""
+
+msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
+msgstr ""
+
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
+msgid "Changes"
+msgstr ""
+
+msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision."
+msgstr ""
+
+msgid "Changes suppressed. Click to show."
+msgstr ""
+
+msgid "Changes the title to \"%{title_param}\"."
+msgstr ""
+
+msgid "Changes won't take place until the index is %{link_start}recreated%{link_end}."
+msgstr ""
+
+msgid "Charts"
+msgstr ""
+
+msgid "Chat"
+msgstr ""
+
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
+msgid "Check again"
+msgstr ""
+
+msgid "Check feature availability on namespace plan"
+msgstr ""
+
+msgid "Check the %{docs_link_start}documentation%{docs_link_end}."
+msgstr ""
+
+msgid "Check your .gitlab-ci.yml"
+msgstr ""
+
+msgid "Checking %{text} availability…"
+msgstr ""
+
+msgid "Checking approval status"
+msgstr ""
+
+msgid "Checking branch availability..."
+msgstr ""
+
+msgid "Checking username availability..."
+msgstr ""
+
+msgid "Cherry-pick this commit"
+msgstr ""
+
+msgid "Cherry-pick this merge request"
+msgstr ""
+
+msgid "Choose <strong>Create archive</strong> and wait for archiving to complete."
+msgstr ""
+
+msgid "Choose <strong>Next</strong> at the bottom of the page."
+msgstr ""
+
+msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
+msgstr ""
+
+msgid "Choose a file"
+msgstr ""
+
+msgid "Choose a group"
+msgstr ""
+
+msgid "Choose a role permission"
+msgstr ""
+
+msgid "Choose a template"
+msgstr ""
+
+msgid "Choose a template..."
+msgstr ""
+
+msgid "Choose a type..."
+msgstr ""
+
+msgid "Choose any color."
+msgstr ""
+
+msgid "Choose between <code>clone</code> or <code>fetch</code> to get the recent application code"
+msgstr ""
+
+msgid "Choose file…"
+msgstr ""
+
+msgid "Choose the top-level group for your repository imports."
+msgstr ""
+
+msgid "Choose visibility level, enable/disable project features (issues, repository, wiki, snippets) and set permissions."
+msgstr ""
+
+msgid "Choose what content you want to see on a group’s overview page"
+msgstr ""
+
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which shards you wish to synchronize to this secondary node."
+msgstr ""
+
+msgid "CiStatusLabel|canceled"
+msgstr ""
+
+msgid "CiStatusLabel|created"
+msgstr ""
+
+msgid "CiStatusLabel|delayed"
+msgstr ""
+
+msgid "CiStatusLabel|failed"
+msgstr ""
+
+msgid "CiStatusLabel|manual action"
+msgstr ""
+
+msgid "CiStatusLabel|passed"
+msgstr ""
+
+msgid "CiStatusLabel|passed with warnings"
+msgstr ""
+
+msgid "CiStatusLabel|pending"
+msgstr ""
+
+msgid "CiStatusLabel|preparing"
+msgstr ""
+
+msgid "CiStatusLabel|skipped"
+msgstr ""
+
+msgid "CiStatusLabel|waiting for delayed job"
+msgstr ""
+
+msgid "CiStatusLabel|waiting for manual action"
+msgstr ""
+
+msgid "CiStatusText|blocked"
+msgstr ""
+
+msgid "CiStatusText|canceled"
+msgstr ""
+
+msgid "CiStatusText|created"
+msgstr ""
+
+msgid "CiStatusText|delayed"
+msgstr ""
+
+msgid "CiStatusText|failed"
+msgstr ""
+
+msgid "CiStatusText|manual"
+msgstr ""
+
+msgid "CiStatusText|passed"
+msgstr ""
+
+msgid "CiStatusText|pending"
+msgstr ""
+
+msgid "CiStatusText|preparing"
+msgstr ""
+
+msgid "CiStatusText|skipped"
+msgstr ""
+
+msgid "CiStatus|running"
+msgstr ""
+
+msgid "CiVariables|Cannot use Masked Variable with current value"
+msgstr ""
+
+msgid "CiVariables|Input variable key"
+msgstr ""
+
+msgid "CiVariables|Input variable value"
+msgstr ""
+
+msgid "CiVariables|Key"
+msgstr ""
+
+msgid "CiVariables|Masked"
+msgstr ""
+
+msgid "CiVariables|Remove variable row"
+msgstr ""
+
+msgid "CiVariables|Scope"
+msgstr ""
+
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
+msgid "CiVariables|State"
+msgstr ""
+
+msgid "CiVariables|Type"
+msgstr ""
+
+msgid "CiVariables|Value"
+msgstr ""
+
+msgid "CiVariables|Variables"
+msgstr ""
+
+msgid "CiVariable|* (All environments)"
+msgstr ""
+
+msgid "CiVariable|All environments"
+msgstr ""
+
+msgid "CiVariable|Create wildcard"
+msgstr ""
+
+msgid "CiVariable|Error occurred while saving variables"
+msgstr ""
+
+msgid "CiVariable|Masked"
+msgstr ""
+
+msgid "CiVariable|New environment"
+msgstr ""
+
+msgid "CiVariable|Protected"
+msgstr ""
+
+msgid "CiVariable|Search environments"
+msgstr ""
+
+msgid "CiVariable|Toggle masked"
+msgstr ""
+
+msgid "CiVariable|Toggle protected"
+msgstr ""
+
+msgid "CiVariable|Validation failed"
+msgstr ""
+
+msgid "Classification Label (optional)"
+msgstr ""
+
+msgid "ClassificationLabelUnavailable|is unavailable: %{reason}"
+msgstr ""
+
+msgid "Clear"
+msgstr ""
+
+msgid "Clear input"
+msgstr ""
+
+msgid "Clear recent searches"
+msgstr ""
+
+msgid "Clear search"
+msgstr ""
+
+msgid "Clear search input"
+msgstr ""
+
+msgid "Clear templates search input"
+msgstr ""
+
+msgid "Clear weight"
+msgstr ""
+
+msgid "Cleared weight."
+msgstr ""
+
+msgid "Clears weight."
+msgstr ""
+
+msgid "Click any <strong>project name</strong> in the project list below to navigate to the project milestone."
+msgstr ""
+
+msgid "Click here"
+msgstr ""
+
+msgid "Click the <strong>Download</strong> button and wait for downloading to complete."
+msgstr ""
+
+msgid "Click the <strong>Promote</strong> button in the top right corner to promote it to a group milestone."
+msgstr ""
+
+msgid "Click the <strong>Select none</strong> button on the right, since we only need \"Google Code Project Hosting\"."
+msgstr ""
+
+msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
+msgstr ""
+
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
+msgid "Click to expand it."
+msgstr ""
+
+msgid "Click to expand text"
+msgstr ""
+
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
+msgid "Clients"
+msgstr ""
+
+msgid "Clone"
+msgstr ""
+
+msgid "Clone repository"
+msgstr ""
+
+msgid "Clone with %{http_label}"
+msgstr ""
+
+msgid "Clone with KRB5"
+msgstr ""
+
+msgid "Clone with SSH"
+msgstr ""
+
+msgid "Close"
+msgstr ""
+
+msgid "Close %{tabname}"
+msgstr ""
+
+msgid "Close epic"
+msgstr ""
+
+msgid "Close milestone"
+msgstr ""
+
+msgid "Close sidebar"
+msgstr ""
+
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
+msgid "Closed"
+msgstr ""
+
+msgid "Closed issues"
+msgstr ""
+
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
+msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
+msgstr ""
+
+msgid "ClusterIntegration| can be used instead of a custom domain."
+msgstr ""
+
+msgid "ClusterIntegration| is the default environment scope for this cluster. This means that all jobs, regardless of their environment, will use this cluster. %{environment_scope_start}More information%{environment_scope_end}"
+msgstr ""
+
+msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|%{title} uninstalled successfully."
+msgstr ""
+
+msgid "ClusterIntegration|%{title} updated successfully."
+msgstr ""
+
+msgid "ClusterIntegration|A service token scoped to %{code}kube-system%{end_code} with %{code}cluster-admin%{end_code} privileges."
+msgstr ""
+
+msgid "ClusterIntegration|API URL"
+msgstr ""
+
+msgid "ClusterIntegration|API URL should be a valid http/https url."
+msgstr ""
+
+msgid "ClusterIntegration|Add Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Add a Kubernetes cluster integration"
+msgstr ""
+
+msgid "ClusterIntegration|Adding a Kubernetes cluster to your group will automatically share the cluster across all your projects. Use review apps, deploy your applications, and easily run your pipelines for all projects using the same cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Adding a Kubernetes cluster will automatically share the cluster across all projects. Use review apps, deploy your applications, and easily run your pipelines for all projects using the same cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Adding an integration to your group will share the cluster across all your projects."
+msgstr ""
+
+msgid "ClusterIntegration|Adding an integration will share the cluster across all projects."
+msgstr ""
+
+msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
+msgstr ""
+
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|All data will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Alternatively"
+msgstr ""
+
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred while trying to fetch project zones: %{error}"
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred while trying to fetch your projects: %{error}"
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred while trying to fetch zone machine types: %{error}"
+msgstr ""
+
+msgid "ClusterIntegration|Any running pipelines will be canceled."
+msgstr ""
+
+msgid "ClusterIntegration|Applications"
+msgstr ""
+
+msgid "ClusterIntegration|Apply for credit"
+msgstr ""
+
+msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Base domain"
+msgstr ""
+
+msgid "ClusterIntegration|CA Certificate"
+msgstr ""
+
+msgid "ClusterIntegration|Cert-Manager"
+msgstr ""
+
+msgid "ClusterIntegration|Cert-Manager is a native Kubernetes certificate management controller that helps with issuing certificates. Installing Cert-Manager on your cluster will issue a certificate by %{letsEncrypt} and ensure that certificates are valid and up-to-date."
+msgstr ""
+
+msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
+msgstr ""
+
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
+msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
+msgstr ""
+
+msgid "ClusterIntegration|Choose which of your environments will use this cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
+msgid "ClusterIntegration|Cluster health"
+msgstr ""
+
+msgid "ClusterIntegration|Cluster name is required."
+msgstr ""
+
+msgid "ClusterIntegration|Clusters are utilized by selecting the nearest ancestor with a matching environment scope. For example, project clusters will override group clusters."
+msgstr ""
+
+msgid "ClusterIntegration|Copy API URL"
+msgstr ""
+
+msgid "ClusterIntegration|Copy CA Certificate"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Ingress Endpoint to clipboard"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Jupyter Hostname to clipboard"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Knative Endpoint to clipboard"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Kubernetes cluster name"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Service Token"
+msgstr ""
+
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
+msgid "ClusterIntegration|Create Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
+msgid "ClusterIntegration|Did you know?"
+msgstr ""
+
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
+msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Enable this setting if using role-based access control (RBAC)."
+msgstr ""
+
+msgid "ClusterIntegration|Enter the details for your Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Environment scope"
+msgstr ""
+
+msgid "ClusterIntegration|Every new Google Cloud Platform (GCP) account receives $300 in credit upon %{sign_up_link}. In partnership with Google, GitLab is able to offer an additional $200 for both new and existing GCP accounts to get started with GitLab's Google Kubernetes Engine Integration."
+msgstr ""
+
+msgid "ClusterIntegration|Failed to configure Google Kubernetes Engine Cluster: %{message}"
+msgstr ""
+
+msgid "ClusterIntegration|Failed to request to Google Cloud Platform: %{message}"
+msgstr ""
+
+msgid "ClusterIntegration|Failed to run Kubeclient: %{message}"
+msgstr ""
+
+msgid "ClusterIntegration|Fetching machine types"
+msgstr ""
+
+msgid "ClusterIntegration|Fetching projects"
+msgstr ""
+
+msgid "ClusterIntegration|Fetching zones"
+msgstr ""
+
+msgid "ClusterIntegration|GitLab Integration"
+msgstr ""
+
+msgid "ClusterIntegration|GitLab Runner"
+msgstr ""
+
+msgid "ClusterIntegration|GitLab Runner connects to the repository and executes CI/CD jobs, pushing results back and deploying applications to production."
+msgstr ""
+
+msgid "ClusterIntegration|GitLab-managed cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Google Cloud Platform project"
+msgstr ""
+
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
+msgid "ClusterIntegration|Google Kubernetes Engine"
+msgstr ""
+
+msgid "ClusterIntegration|Google Kubernetes Engine project"
+msgstr ""
+
+msgid "ClusterIntegration|Group cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Helm Tiller"
+msgstr ""
+
+msgid "ClusterIntegration|Helm streamlines installing and managing Kubernetes applications. Tiller runs inside of your Kubernetes Cluster, and manages releases of your charts."
+msgstr ""
+
+msgid "ClusterIntegration|Hide"
+msgstr ""
+
+msgid "ClusterIntegration|If you are setting up multiple clusters and are using Auto DevOps, %{help_link_start}read this first%{help_link_end}."
+msgstr ""
+
+msgid "ClusterIntegration|In order to view the health of your cluster, you must first install Prometheus below."
+msgstr ""
+
+msgid "ClusterIntegration|Ingress"
+msgstr ""
+
+msgid "ClusterIntegration|Ingress Endpoint"
+msgstr ""
+
+msgid "ClusterIntegration|Ingress gives you a way to route requests to services based on the request host or path, centralizing a number of services into a single entrypoint."
+msgstr ""
+
+msgid "ClusterIntegration|Installing Ingress may incur additional costs. Learn more about %{pricingLink}."
+msgstr ""
+
+msgid "ClusterIntegration|Instance cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Integrate Kubernetes cluster automation"
+msgstr ""
+
+msgid "ClusterIntegration|Integration status"
+msgstr ""
+
+msgid "ClusterIntegration|Issuer Email"
+msgstr ""
+
+msgid "ClusterIntegration|Issuers represent a certificate authority. You must provide an email address for your Issuer. "
+msgstr ""
+
+msgid "ClusterIntegration|Jupyter Hostname"
+msgstr ""
+
+msgid "ClusterIntegration|JupyterHub"
+msgstr ""
+
+msgid "ClusterIntegration|JupyterHub, a multi-user Hub, spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server. JupyterHub can be used to serve notebooks to a class of students, a corporate data science group, or a scientific research group."
+msgstr ""
+
+msgid "ClusterIntegration|Knative"
+msgstr ""
+
+msgid "ClusterIntegration|Knative Domain Name:"
+msgstr ""
+
+msgid "ClusterIntegration|Knative Endpoint:"
+msgstr ""
+
+msgid "ClusterIntegration|Knative domain name was updated successfully."
+msgstr ""
+
+msgid "ClusterIntegration|Knative extends Kubernetes to provide a set of middleware components that are essential to build modern, source-centric, and container-based applications that can run anywhere: on premises, in the cloud, or even in a third-party data center."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster details"
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster name"
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project"
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about %{help_link_start_machine_type}machine types%{help_link_end} and %{help_link_start_pricing}pricing%{help_link_end}."
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about Kubernetes"
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about group Kubernetes clusters"
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about instance Kubernetes clusters"
+msgstr ""
+
+msgid "ClusterIntegration|Let's Encrypt"
+msgstr ""
+
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
+msgid "ClusterIntegration|Machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters"
+msgstr ""
+
+msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
+msgstr ""
+
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
+msgid "ClusterIntegration|No machine types matched your search"
+msgstr ""
+
+msgid "ClusterIntegration|No projects found"
+msgstr ""
+
+msgid "ClusterIntegration|No projects matched your search"
+msgstr ""
+
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
+msgid "ClusterIntegration|No zones matched your search"
+msgstr ""
+
+msgid "ClusterIntegration|Number of nodes"
+msgstr ""
+
+msgid "ClusterIntegration|Number of nodes must be a numerical value."
+msgstr ""
+
+msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes"
+msgstr ""
+
+msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:"
+msgstr ""
+
+msgid "ClusterIntegration|Point a wildcard DNS to this generated endpoint in order to access your application after it has been deployed."
+msgstr ""
+
+msgid "ClusterIntegration|Project cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Project namespace (optional, unique)"
+msgstr ""
+
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
+msgid "ClusterIntegration|Prometheus"
+msgstr ""
+
+msgid "ClusterIntegration|Prometheus is an open-source monitoring system with %{gitlabIntegrationLink} to monitor deployed applications."
+msgstr ""
+
+msgid "ClusterIntegration|RBAC-enabled cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
+msgstr ""
+
+msgid "ClusterIntegration|Region"
+msgstr ""
+
+msgid "ClusterIntegration|Remove Kubernetes cluster integration"
+msgstr ""
+
+msgid "ClusterIntegration|Remove integration"
+msgstr ""
+
+msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Replace this with your own hostname if you want. If you do so, point hostname to Ingress IP Address from above."
+msgstr ""
+
+msgid "ClusterIntegration|Request to begin installing failed"
+msgstr ""
+
+msgid "ClusterIntegration|Request to begin uninstalling failed"
+msgstr ""
+
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
+msgid "ClusterIntegration|Save changes"
+msgstr ""
+
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Search machine types"
+msgstr ""
+
+msgid "ClusterIntegration|Search projects"
+msgstr ""
+
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
+msgid "ClusterIntegration|Search zones"
+msgstr ""
+
+msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Select machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Select project"
+msgstr ""
+
+msgid "ClusterIntegration|Select project and zone to choose machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Select project to choose zone"
+msgstr ""
+
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
+msgid "ClusterIntegration|Select zone"
+msgstr ""
+
+msgid "ClusterIntegration|Select zone to choose machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Service Token"
+msgstr ""
+
+msgid "ClusterIntegration|Service token is required."
+msgstr ""
+
+msgid "ClusterIntegration|Show"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong on our end."
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while installing %{title}"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while uninstalling %{title}"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while updating Knative domain name."
+msgstr ""
+
+msgid "ClusterIntegration|Specifying a domain will allow you to use Auto Review Apps and Auto Deploy stages for %{auto_devops_start}Auto DevOps%{auto_devops_end}. The domain should have a wildcard DNS configured matching the domain."
+msgstr ""
+
+msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster."
+msgstr ""
+
+msgid "ClusterIntegration|The URL used to access the Kubernetes API."
+msgstr ""
+
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
+msgstr ""
+
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
+msgstr ""
+
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
+msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
+msgstr ""
+
+msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
+msgstr ""
+
+msgid "ClusterIntegration|This option will allow you to install applications on RBAC clusters."
+msgstr ""
+
+msgid "ClusterIntegration|To access your application after deployment, point a wildcard DNS to the Knative Endpoint."
+msgstr ""
+
+msgid "ClusterIntegration|Toggle Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Uninstall %{appTitle}"
+msgstr ""
+
+msgid "ClusterIntegration|Update failed. Please check the logs and try again."
+msgstr ""
+
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Validating project billing status"
+msgstr ""
+
+msgid "ClusterIntegration|We could not verify that one of your projects on GCP has billing enabled. Please try again."
+msgstr ""
+
+msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way."
+msgstr ""
+
+msgid "ClusterIntegration|You are about to uninstall %{appTitle} from your cluster."
+msgstr ""
+
+msgid "ClusterIntegration|You must first install Helm Tiller before installing the applications below"
+msgstr ""
+
+msgid "ClusterIntegration|You must have an RBAC-enabled cluster to install Knative."
+msgstr ""
+
+msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}"
+msgstr ""
+
+msgid "ClusterIntegration|Your cluster API is unreachable. Please ensure your API URL is correct."
+msgstr ""
+
+msgid "ClusterIntegration|Zone"
+msgstr ""
+
+msgid "ClusterIntegration|access to Google Kubernetes Engine"
+msgstr ""
+
+msgid "ClusterIntegration|documentation"
+msgstr ""
+
+msgid "ClusterIntegration|help page"
+msgstr ""
+
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
+msgid "ClusterIntegration|meets the requirements"
+msgstr ""
+
+msgid "ClusterIntegration|pricing"
+msgstr ""
+
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
+msgid "Code"
+msgstr ""
+
+msgid "Code Owners"
+msgstr ""
+
+msgid "Code owner approval is required"
+msgstr ""
+
+msgid "Code owners"
+msgstr ""
+
+msgid "CodeOwner|Pattern"
+msgstr ""
+
+msgid "Cohorts"
+msgstr ""
+
+msgid "Collapse"
+msgstr ""
+
+msgid "Collapse approvers"
+msgstr ""
+
+msgid "Collapse sidebar"
+msgstr ""
+
+msgid "Collector hostname"
+msgstr ""
+
+msgid "ComboSearch is not defined"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Command line instructions"
+msgstr ""
+
+msgid "Commands applied"
+msgstr ""
+
+msgid "Commands did not apply"
+msgstr ""
+
+msgid "Comment"
+msgstr ""
+
+msgid "Comment & close %{noteable_name}"
+msgstr ""
+
+msgid "Comment & reopen %{noteable_name}"
+msgstr ""
+
+msgid "Comment & resolve thread"
+msgstr ""
+
+msgid "Comment & unresolve thread"
+msgstr ""
+
+msgid "Comment form position"
+msgstr ""
+
+msgid "Comment is being updated"
+msgstr ""
+
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
+msgid "Comments"
+msgstr ""
+
+msgid "Commit"
+msgid_plural "Commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Commit %{commit_id}"
+msgstr ""
+
+msgid "Commit (when editing commit message)"
+msgstr ""
+
+msgid "Commit Message"
+msgstr ""
+
+msgid "Commit deleted"
+msgstr ""
+
+msgid "Commit duration in minutes for last 30 commits"
+msgstr ""
+
+msgid "Commit message"
+msgstr ""
+
+msgid "Commit statistics for %{ref} %{start_time} - %{end_time}"
+msgstr ""
+
+msgid "Commit to %{branchName} branch"
+msgstr ""
+
+msgid "CommitBoxTitle|Commit"
+msgstr ""
+
+msgid "CommitMessage|Add %{file_name}"
+msgstr ""
+
+msgid "CommitWidget|authored"
+msgstr ""
+
+msgid "Commits"
+msgstr ""
+
+msgid "Commits feed"
+msgstr ""
+
+msgid "Commits per day hour (UTC)"
+msgstr ""
+
+msgid "Commits per day of month"
+msgstr ""
+
+msgid "Commits per weekday"
+msgstr ""
+
+msgid "Commits|An error occurred while fetching merge requests data."
+msgstr ""
+
+msgid "Commits|Commit: %{commitText}"
+msgstr ""
+
+msgid "Commits|History"
+msgstr ""
+
+msgid "Commits|No related merge requests found"
+msgstr ""
+
+msgid "Committed by"
+msgstr ""
+
+msgid "Commit…"
+msgstr ""
+
+msgid "Company"
+msgstr ""
+
+msgid "Compare"
+msgstr ""
+
+msgid "Compare Git revisions"
+msgstr ""
+
+msgid "Compare Revisions"
+msgstr ""
+
+msgid "Compare changes"
+msgstr ""
+
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
+msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
+msgstr ""
+
+msgid "CompareBranches|Compare"
+msgstr ""
+
+msgid "CompareBranches|Source"
+msgstr ""
+
+msgid "CompareBranches|Target"
+msgstr ""
+
+msgid "CompareBranches|There isn't anything to compare."
+msgstr ""
+
+msgid "Complete"
+msgstr ""
+
+msgid "Confidential"
+msgstr ""
+
+msgid "Confidentiality"
+msgstr ""
+
+msgid "Configuration"
+msgstr ""
+
+msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
+msgstr ""
+
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Let's Encrypt"
+msgstr ""
+
+msgid "Configure Prometheus"
+msgstr ""
+
+msgid "Configure Tracing"
+msgstr ""
+
+msgid "Configure a <code>.gitlab-webide.yml</code> file in the <code>.gitlab</code> directory to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure existing installation"
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure push mirrors."
+msgstr ""
+
+msgid "Configure storage path settings."
+msgstr ""
+
+msgid "Configure the %{link} integration."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Confirmation email sent to %{email}"
+msgstr ""
+
+msgid "Confirmation required"
+msgstr ""
+
+msgid "Congratulations! You have enabled Two-factor Authentication!"
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting to terminal sync service"
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
+msgid "Connection failure"
+msgstr ""
+
+msgid "Contact an owner of group %{namespace_name} to upgrade the plan."
+msgstr ""
+
+msgid "Contact owner %{link_start}%{owner_name}%{link_end} to upgrade the plan."
+msgstr ""
+
+msgid "Contact sales to upgrade"
+msgstr ""
+
+msgid "Contact your Administrator to upgrade your license."
+msgstr ""
+
+msgid "Container Registry"
+msgstr ""
+
+msgid "Container registry images"
+msgstr ""
+
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
+
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
+
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
+
+msgid "ContainerRegistry|Docker connection error"
+msgstr ""
+
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
+msgid "ContainerRegistry|No tags in Container Registry for this container image."
+msgstr ""
+
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
+
+msgid "ContainerRegistry|Remove repository"
+msgstr ""
+
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
+
+msgid "ContainerRegistry|Size"
+msgstr ""
+
+msgid "ContainerRegistry|Tag"
+msgstr ""
+
+msgid "ContainerRegistry|Tag ID"
+msgstr ""
+
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
+
+msgid "Contains %{count} blobs of images (%{size})"
+msgstr ""
+
+msgid "Contents of .gitlab-ci.yml"
+msgstr ""
+
+msgid "Continue"
+msgstr ""
+
+msgid "Continue to the next step"
+msgstr ""
+
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribute to GitLab"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
+msgid "Contribution Analytics"
+msgstr ""
+
+msgid "Contribution Charts"
+msgstr ""
+
+msgid "Contributions for <strong>%{calendar_date}</strong>"
+msgstr ""
+
+msgid "Contributions per group member"
+msgstr ""
+
+msgid "Contributors"
+msgstr ""
+
+msgid "ContributorsPage|%{startDate} – %{endDate}"
+msgstr ""
+
+msgid "ContributorsPage|Building repository graph."
+msgstr ""
+
+msgid "ContributorsPage|Commits to %{branch_name}, excluding merge commits. Limited to 6,000 commits."
+msgstr ""
+
+msgid "ContributorsPage|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "Control emails linked to your account"
+msgstr ""
+
+msgid "Control the display of third party offers."
+msgstr ""
+
+msgid "Control the maximum concurrency of repository backfill for this secondary node"
+msgstr ""
+
+msgid "ConvDev Index"
+msgstr ""
+
+msgid "Cookie domain"
+msgstr ""
+
+msgid "Copied"
+msgstr ""
+
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
+msgid "Copy %{http_label} clone URL"
+msgstr ""
+
+msgid "Copy %{protocol} clone URL"
+msgstr ""
+
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
+msgid "Copy ID to clipboard"
+msgstr ""
+
+msgid "Copy KRB5 clone URL"
+msgstr ""
+
+msgid "Copy SSH clone URL"
+msgstr ""
+
+msgid "Copy SSH public key"
+msgstr ""
+
+msgid "Copy URL to clipboard"
+msgstr ""
+
+msgid "Copy branch name to clipboard"
+msgstr ""
+
+msgid "Copy command to clipboard"
+msgstr ""
+
+msgid "Copy commit SHA to clipboard"
+msgstr ""
+
+msgid "Copy file path to clipboard"
+msgstr ""
+
+msgid "Copy labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
+msgid "Copy labels and milestone from other issue or merge request in this project"
+msgstr ""
+
+msgid "Copy link"
+msgstr ""
+
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
+msgid "Copy reference to clipboard"
+msgstr ""
+
+msgid "Copy secret to clipboard"
+msgstr ""
+
+msgid "Copy source to clipboard"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Copy token to clipboard"
+msgstr ""
+
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
+msgid "Could not authorize chat nickname. Try again!"
+msgstr ""
+
+msgid "Could not change HEAD: branch '%{branch}' does not exist"
+msgstr ""
+
+msgid "Could not connect to FogBugz, check your URL"
+msgstr ""
+
+msgid "Could not connect to Web IDE file mirror service."
+msgstr ""
+
+msgid "Could not create Wiki Repository at this time. Please try again later."
+msgstr ""
+
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
+msgstr ""
+
+msgid "Could not revoke impersonation token %{token_name}."
+msgstr ""
+
+msgid "Could not revoke personal access token %{personal_access_token_name}."
+msgstr ""
+
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
+msgid "Coverage"
+msgstr ""
+
+msgid "Create"
+msgstr ""
+
+msgid "Create %{type} token"
+msgstr ""
+
+msgid "Create New Directory"
+msgstr ""
+
+msgid "Create New Domain"
+msgstr ""
+
+msgid "Create a GitLab account first, and then connect it to your %{label} account."
+msgstr ""
+
+msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
+msgstr ""
+
+msgid "Create a merge request"
+msgstr ""
+
+msgid "Create a new branch"
+msgstr ""
+
+msgid "Create a new file as there are no files yet. Afterwards, you'll be able to commit your changes."
+msgstr ""
+
+msgid "Create a new issue"
+msgstr ""
+
+msgid "Create a new repository"
+msgstr ""
+
+msgid "Create a personal access token on your account to pull or push via %{protocol}."
+msgstr ""
+
+msgid "Create an issue. Issues are created for each alert triggered."
+msgstr ""
+
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
+msgid "Create branch"
+msgstr ""
+
+msgid "Create commit"
+msgstr ""
+
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
+msgid "Create directory"
+msgstr ""
+
+msgid "Create empty repository"
+msgstr ""
+
+msgid "Create epic"
+msgstr ""
+
+msgid "Create file"
+msgstr ""
+
+msgid "Create group"
+msgstr ""
+
+msgid "Create group label"
+msgstr ""
+
+msgid "Create lists from labels. Issues with that label appear in that list."
+msgstr ""
+
+msgid "Create merge request"
+msgstr ""
+
+msgid "Create merge request and branch"
+msgstr ""
+
+msgid "Create milestone"
+msgstr ""
+
+msgid "Create new board"
+msgstr ""
+
+msgid "Create new branch"
+msgstr ""
+
+msgid "Create new directory"
+msgstr ""
+
+msgid "Create new file"
+msgstr ""
+
+msgid "Create new file or directory"
+msgstr ""
+
+msgid "Create new label"
+msgstr ""
+
+msgid "Create new..."
+msgstr ""
+
+msgid "Create project"
+msgstr ""
+
+msgid "Create project label"
+msgstr ""
+
+msgid "Create your first page"
+msgstr ""
+
+msgid "CreateGroup|You don’t have permission to create a subgroup in this group."
+msgstr ""
+
+msgid "CreateGroup|You don’t have permission to create groups."
+msgstr ""
+
+msgid "CreateTag|Tag"
+msgstr ""
+
+msgid "CreateTokenToCloneLink|create a personal access token"
+msgstr ""
+
+msgid "Created"
+msgstr ""
+
+msgid "Created At"
+msgstr ""
+
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created by me"
+msgstr ""
+
+msgid "Created issue %{issueLink}"
+msgstr ""
+
+msgid "Created issue %{issueLink} at %{projectLink}"
+msgstr ""
+
+msgid "Created merge request %{mergeRequestLink}"
+msgstr ""
+
+msgid "Created merge request %{mergeRequestLink} at %{projectLink}"
+msgstr ""
+
+msgid "Created on"
+msgstr ""
+
+msgid "Created on:"
+msgstr ""
+
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creating epic"
+msgstr ""
+
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
+msgid "Cron Timezone"
+msgstr ""
+
+msgid "Cron syntax"
+msgstr ""
+
+msgid "Cross-project dependencies"
+msgstr ""
+
+msgid "Current Branch"
+msgstr ""
+
+msgid "Current Project"
+msgstr ""
+
+msgid "Current node"
+msgstr ""
+
+msgid "Current password"
+msgstr ""
+
+msgid "CurrentUser|Profile"
+msgstr ""
+
+msgid "CurrentUser|Settings"
+msgstr ""
+
+msgid "Custom CI config path"
+msgstr ""
+
+msgid "Custom hostname (for private commit emails)"
+msgstr ""
+
+msgid "Custom notification events"
+msgstr ""
+
+msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
+msgstr ""
+
+msgid "Custom project templates"
+msgstr ""
+
+msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
+msgid "Customize colors"
+msgstr ""
+
+msgid "Customize how FogBugz email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
+msgstr ""
+
+msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
+msgstr ""
+
+msgid "Customize icon"
+msgstr ""
+
+msgid "Customize language and region related settings."
+msgstr ""
+
+msgid "Customize name"
+msgstr ""
+
+msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
+msgstr ""
+
+msgid "Cycle Analytics"
+msgstr ""
+
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
+msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Code"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Issue"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Plan"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Production"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Review"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Staging"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Test"
+msgstr ""
+
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
+msgid "DNS"
+msgstr ""
+
+msgid "Dashboard"
+msgstr ""
+
+msgid "DashboardProjects|All"
+msgstr ""
+
+msgid "DashboardProjects|Personal"
+msgstr ""
+
+msgid "DashboardProjects|Trending"
+msgstr ""
+
+msgid "Dashboards"
+msgstr ""
+
+msgid "Dashboard|%{firstProject} and %{secondProject}"
+msgstr ""
+
+msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
+msgstr ""
+
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
+msgstr ""
+
+msgid "Data is still calculating..."
+msgstr ""
+
+msgid "Date picker"
+msgstr ""
+
+msgid "DayTitle|F"
+msgstr ""
+
+msgid "DayTitle|M"
+msgstr ""
+
+msgid "DayTitle|S"
+msgstr ""
+
+msgid "DayTitle|W"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Dec"
+msgstr ""
+
+msgid "December"
+msgstr ""
+
+msgid "Decline"
+msgstr ""
+
+msgid "Decline and sign out"
+msgstr ""
+
+msgid "Default Branch"
+msgstr ""
+
+msgid "Default artifacts expiration"
+msgstr ""
+
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
+msgid "Default classification label"
+msgstr ""
+
+msgid "Default description template for issues"
+msgstr ""
+
+msgid "Default description template for merge requests"
+msgstr ""
+
+msgid "Default first day of the week"
+msgstr ""
+
+msgid "Default first day of the week in calendars and date pickers."
+msgstr ""
+
+msgid "Default issue template"
+msgstr ""
+
+msgid "Default project deletion protection"
+msgstr ""
+
+msgid "Default: Directly import the Google Code email address or username"
+msgstr ""
+
+msgid "Default: Map a FogBugz account ID to a full name"
+msgstr ""
+
+msgid "Define a custom pattern with cron syntax"
+msgstr ""
+
+msgid "Define environments in the deploy stage(s) in <code>.gitlab-ci.yml</code> to track deployments here."
+msgstr ""
+
+msgid "DelayedJobs|Are you sure you want to run %{jobName} immediately? Otherwise this job will run automatically after it's timer finishes."
+msgstr ""
+
+msgid "DelayedJobs|Are you sure you want to run %{job_name} immediately? This job will run automatically after it's timer finishes."
+msgstr ""
+
+msgid "DelayedJobs|Start now"
+msgstr ""
+
+msgid "DelayedJobs|Unschedule"
+msgstr ""
+
+msgid "DelayedJobs|delayed"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Delete Comment"
+msgstr ""
+
+msgid "Delete Package"
+msgstr ""
+
+msgid "Delete Snippet"
+msgstr ""
+
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
+msgid "Delete comment"
+msgstr ""
+
+msgid "Delete license"
+msgstr ""
+
+msgid "Delete list"
+msgstr ""
+
+msgid "Delete source branch"
+msgstr ""
+
+msgid "Delete this attachment"
+msgstr ""
+
+msgid "DeleteProject|Failed to remove project repository. Please try again or contact administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to remove some tags in project container registry. Please try again or contact administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to remove wiki repository. Please try again or contact administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to restore project repository. Please contact the administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to restore wiki repository. Please contact the administrator."
+msgstr ""
+
+msgid "Deleted"
+msgstr ""
+
+msgid "Deleted chat nickname: %{chat_name}!"
+msgstr ""
+
+msgid "Deleted in this version"
+msgstr ""
+
+msgid "Deleting the license failed."
+msgstr ""
+
+msgid "Deleting the license failed. The license was not found."
+msgstr ""
+
+msgid "Deleting the license failed. You are not permitted to perform this action."
+msgstr ""
+
+msgid "Denied authorization of chat nickname %{user_name}."
+msgstr ""
+
+msgid "Deny"
+msgstr ""
+
+msgid "Dependencies"
+msgstr ""
+
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
+msgid "Dependencies|Component"
+msgstr ""
+
+msgid "Dependencies|Component name"
+msgstr ""
+
+msgid "Dependencies|Export as JSON"
+msgstr ""
+
+msgid "Dependencies|Job failed to generate the dependency list"
+msgstr ""
+
+msgid "Dependencies|License"
+msgstr ""
+
+msgid "Dependencies|Location"
+msgstr ""
+
+msgid "Dependencies|Packager"
+msgstr ""
+
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
+msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
+msgstr ""
+
+msgid "Dependencies|Unsupported file(s) detected"
+msgstr ""
+
+msgid "Dependencies|Version"
+msgstr ""
+
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
+msgid "Dependency List"
+msgstr ""
+
+msgid "Dependency Proxy"
+msgstr ""
+
+msgid "Dependency proxy"
+msgstr ""
+
+msgid "Dependency proxy URL"
+msgstr ""
+
+msgid "Dependency proxy feature is limited to public groups for now."
+msgstr ""
+
+msgid "DependencyProxy|Toggle Dependency Proxy"
+msgstr ""
+
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Deploy"
+msgid_plural "Deploys"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Deploy Keys"
+msgstr ""
+
+msgid "Deploy key was successfully updated."
+msgstr ""
+
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
+msgid "DeployKeys|+%{count} others"
+msgstr ""
+
+msgid "DeployKeys|Current project"
+msgstr ""
+
+msgid "DeployKeys|Deploy key"
+msgstr ""
+
+msgid "DeployKeys|Enabled deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Error enabling deploy key"
+msgstr ""
+
+msgid "DeployKeys|Error getting deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Error removing deploy key"
+msgstr ""
+
+msgid "DeployKeys|Expand %{count} other projects"
+msgstr ""
+
+msgid "DeployKeys|Loading deploy keys"
+msgstr ""
+
+msgid "DeployKeys|No deploy keys found. Create one with the form above."
+msgstr ""
+
+msgid "DeployKeys|Privately accessible deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Project usage"
+msgstr ""
+
+msgid "DeployKeys|Publicly accessible deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Read access only"
+msgstr ""
+
+msgid "DeployKeys|Write access allowed"
+msgstr ""
+
+msgid "DeployKeys|You are going to remove this deploy key. Are you sure?"
+msgstr ""
+
+msgid "DeployTokens|Active Deploy Tokens (%{active_tokens})"
+msgstr ""
+
+msgid "DeployTokens|Add a deploy token"
+msgstr ""
+
+msgid "DeployTokens|Allows read-only access to the registry images"
+msgstr ""
+
+msgid "DeployTokens|Allows read-only access to the repository"
+msgstr ""
+
+msgid "DeployTokens|Copy deploy token to clipboard"
+msgstr ""
+
+msgid "DeployTokens|Copy username to clipboard"
+msgstr ""
+
+msgid "DeployTokens|Create deploy token"
+msgstr ""
+
+msgid "DeployTokens|Created"
+msgstr ""
+
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
+msgid "DeployTokens|Deploy Tokens"
+msgstr ""
+
+msgid "DeployTokens|Deploy tokens allow read-only access to your repository and registry images."
+msgstr ""
+
+msgid "DeployTokens|Expires"
+msgstr ""
+
+msgid "DeployTokens|Name"
+msgstr ""
+
+msgid "DeployTokens|Pick a name for the application, and we'll give you a unique deploy token."
+msgstr ""
+
+msgid "DeployTokens|Revoke"
+msgstr ""
+
+msgid "DeployTokens|Revoke %{name}"
+msgstr ""
+
+msgid "DeployTokens|Scopes"
+msgstr ""
+
+msgid "DeployTokens|This action cannot be undone."
+msgstr ""
+
+msgid "DeployTokens|This project has no active Deploy Tokens."
+msgstr ""
+
+msgid "DeployTokens|Use this token as a password. Make sure you save it - you won't be able to access it again."
+msgstr ""
+
+msgid "DeployTokens|Use this username as a login."
+msgstr ""
+
+msgid "DeployTokens|Username"
+msgstr ""
+
+msgid "DeployTokens|You are about to revoke"
+msgstr ""
+
+msgid "DeployTokens|Your New Deploy Token"
+msgstr ""
+
+msgid "DeployTokens|Your new project deploy token has been created."
+msgstr ""
+
+msgid "Deployed"
+msgstr ""
+
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
+msgid "Deployed to"
+msgstr ""
+
+msgid "Deploying to"
+msgstr ""
+
+msgid "Deprioritize label"
+msgstr ""
+
+msgid "Descending"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Description parsed with %{link_start}GitLab Flavored Markdown%{link_end}"
+msgstr ""
+
+msgid "Description templates allow you to define context-specific templates for issue and merge request description fields for your project."
+msgstr ""
+
+msgid "Description:"
+msgstr ""
+
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
+msgid "DesignManagement|%{current_design} of %{designs_count}"
+msgstr ""
+
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not find design, please try again."
+msgstr ""
+
+msgid "DesignManagement|Error uploading a new design. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Go back to designs"
+msgstr ""
+
+msgid "DesignManagement|Go to next design"
+msgstr ""
+
+msgid "DesignManagement|Go to previous design"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
+msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
+msgstr ""
+
+msgid "DesignManagement|The one place for your designs"
+msgstr ""
+
+msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
+msgstr ""
+
+msgid "Designs"
+msgstr ""
+
+msgid "Destroy"
+msgstr ""
+
+msgid "Details"
+msgstr ""
+
+msgid "Details (default)"
+msgstr ""
+
+msgid "Detect host keys"
+msgstr ""
+
+msgid "Diff content limits"
+msgstr ""
+
+msgid "Diff limits"
+msgstr ""
+
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
+msgid "Diffs|No file name available"
+msgstr ""
+
+msgid "Diffs|Show all lines"
+msgstr ""
+
+msgid "Diffs|Something went wrong while fetching diff lines."
+msgstr ""
+
+msgid "Direction"
+msgstr ""
+
+msgid "Directory name"
+msgstr ""
+
+msgid "Disable"
+msgstr ""
+
+msgid "Disable email notifications"
+msgstr ""
+
+msgid "Disable for this project"
+msgstr ""
+
+msgid "Disable group Runners"
+msgstr ""
+
+msgid "Disable shared Runners"
+msgstr ""
+
+msgid "Disable two-factor authentication"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Disabled mirrors can only be enabled by instance owners. It is recommended that you delete them."
+msgstr ""
+
+msgid "Discard"
+msgstr ""
+
+msgid "Discard all changes"
+msgstr ""
+
+msgid "Discard all unstaged changes?"
+msgstr ""
+
+msgid "Discard changes"
+msgstr ""
+
+msgid "Discard changes to %{path}?"
+msgstr ""
+
+msgid "Discard draft"
+msgstr ""
+
+msgid "Discard review"
+msgstr ""
+
+msgid "DiscordService|Discord Notifications"
+msgstr ""
+
+msgid "DiscordService|Receive event notifications in Discord"
+msgstr ""
+
+msgid "Discover GitLab Geo"
+msgstr ""
+
+msgid "Discover projects, groups and snippets. Share your projects with others"
+msgstr ""
+
+msgid "Discuss a specific suggestion or question"
+msgstr ""
+
+msgid "Discuss a specific suggestion or question that needs to be resolved"
+msgstr ""
+
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
+msgid "Discussion"
+msgstr ""
+
+msgid "Dismiss"
+msgstr ""
+
+msgid "Dismiss ConvDev introduction"
+msgstr ""
+
+msgid "Dismiss Cycle Analytics introduction box"
+msgstr ""
+
+msgid "Dismiss Merge Request promotion"
+msgstr ""
+
+msgid "Dismiss trial promotion"
+msgstr ""
+
+msgid "Dismissed"
+msgstr ""
+
+msgid "Dismissed at %{projectLink}"
+msgstr ""
+
+msgid "Dismissed on pipeline %{pipelineLink}"
+msgstr ""
+
+msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
+msgstr ""
+
+msgid "Display name"
+msgstr ""
+
+msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
+msgstr ""
+
+msgid "Dockerfile"
+msgstr ""
+
+msgid "Documentation for popular identity providers"
+msgstr ""
+
+msgid "Doing"
+msgstr ""
+
+msgid "Domain"
+msgstr ""
+
+msgid "Domain verification is an essential security measure for public GitLab sites. Users are required to demonstrate they control a domain before it is enabled"
+msgstr ""
+
+msgid "Don't paste the private part of the GPG key. Paste the public part which begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
+msgstr ""
+
+msgid "Don't show again"
+msgstr ""
+
+msgid "Don't worry, you can access this tour by clicking on the help icon in the top right corner and choose <strong>Learn GitLab</strong>."
+msgstr ""
+
+msgid "Done"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid "Download CSV"
+msgstr ""
+
+msgid "Download artifacts"
+msgstr ""
+
+msgid "Download as"
+msgstr ""
+
+msgid "Download asset"
+msgstr ""
+
+msgid "Download codes"
+msgstr ""
+
+msgid "Download export"
+msgstr ""
+
+msgid "Download image"
+msgstr ""
+
+msgid "Download license"
+msgstr ""
+
+msgid "Download source code"
+msgstr ""
+
+msgid "Download this directory"
+msgstr ""
+
+msgid "DownloadCommit|Email Patches"
+msgstr ""
+
+msgid "DownloadCommit|Plain Diff"
+msgstr ""
+
+msgid "DownloadSource|Download"
+msgstr ""
+
+msgid "Downstream"
+msgstr ""
+
+msgid "Downvotes"
+msgstr ""
+
+msgid "Due date"
+msgstr ""
+
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
+msgid "Each Runner can be in one of the following states:"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit %{issuable}"
+msgstr ""
+
+msgid "Edit %{name}"
+msgstr ""
+
+msgid "Edit Comment"
+msgstr ""
+
+msgid "Edit Deploy Key"
+msgstr ""
+
+msgid "Edit Label"
+msgstr ""
+
+msgid "Edit Milestone"
+msgstr ""
+
+msgid "Edit Password"
+msgstr ""
+
+msgid "Edit Pipeline Schedule %{id}"
+msgstr ""
+
+msgid "Edit Snippet"
+msgstr ""
+
+msgid "Edit application"
+msgstr ""
+
+msgid "Edit board"
+msgstr ""
+
+msgid "Edit comment"
+msgstr ""
+
+msgid "Edit description"
+msgstr ""
+
+msgid "Edit environment"
+msgstr ""
+
+msgid "Edit epic description"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Edit files in the editor and commit changes here"
+msgstr ""
+
+msgid "Edit group: %{group_name}"
+msgstr ""
+
+msgid "Edit identity for %{user_name}"
+msgstr ""
+
+msgid "Edit issues"
+msgstr ""
+
+msgid "Edit public deploy key"
+msgstr ""
+
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch indexing restrictions"
+msgstr ""
+
+msgid "Elasticsearch indexing started"
+msgstr ""
+
+msgid "Elasticsearch integration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Elastic|None. Select namespaces to index."
+msgstr ""
+
+msgid "Elastic|None. Select projects to index."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
+msgid "Email address"
+msgstr ""
+
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
+msgid "Email patch"
+msgstr ""
+
+msgid "Email the pipelines status to a list of recipients."
+msgstr ""
+
+msgid "EmailError|It appears that the email is blank. Make sure your reply is at the top of the email, we can't process inline replies."
+msgstr ""
+
+msgid "EmailError|The thread you are replying to no longer exists, perhaps it was deleted? If you believe this is in error, contact a staff member."
+msgstr ""
+
+msgid "EmailError|We couldn't figure out what the email is for. Please create your issue or comment through the web interface."
+msgstr ""
+
+msgid "EmailError|We couldn't figure out what the email is in reply to. Please create your comment through the web interface."
+msgstr ""
+
+msgid "EmailError|We couldn't figure out what user corresponds to the email. Please create your comment through the web interface."
+msgstr ""
+
+msgid "EmailError|We couldn't find the project. Please check if there's any typo."
+msgstr ""
+
+msgid "EmailError|You are not allowed to perform this action. If you believe this is in error, contact a staff member."
+msgstr ""
+
+msgid "EmailError|Your account has been blocked. If you believe this is in error, contact a staff member."
+msgstr ""
+
+msgid "EmailToken|reset it"
+msgstr ""
+
+msgid "EmailToken|resetting..."
+msgstr ""
+
+msgid "Emails"
+msgstr ""
+
+msgid "Emails separated by comma"
+msgstr ""
+
+msgid "EmailsOnPushService|Disable code diffs"
+msgstr ""
+
+msgid "EmailsOnPushService|Don't include possibly sensitive code diffs in notification body."
+msgstr ""
+
+msgid "EmailsOnPushService|Email the commits and diff of each push to a list of recipients."
+msgstr ""
+
+msgid "EmailsOnPushService|Emails on push"
+msgstr ""
+
+msgid "EmailsOnPushService|Emails separated by whitespace"
+msgstr ""
+
+msgid "EmailsOnPushService|Send from committer"
+msgstr ""
+
+msgid "EmailsOnPushService|Send notifications from the committer's email address if the domain is part of the domain GitLab is running on (e.g. %{domains})."
+msgstr ""
+
+msgid "Embed"
+msgstr ""
+
+msgid "Empty file"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Enable Auto DevOps"
+msgstr ""
+
+msgid "Enable HTML emails"
+msgstr ""
+
+msgid "Enable Pseudonymizer data collection"
+msgstr ""
+
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable access to Grafana"
+msgstr ""
+
+msgid "Enable access to the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enable and configure Grafana."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable error tracking"
+msgstr ""
+
+msgid "Enable feature to choose access level"
+msgstr ""
+
+msgid "Enable for this project"
+msgstr ""
+
+msgid "Enable group Runners"
+msgstr ""
+
+msgid "Enable header and footer in emails"
+msgstr ""
+
+msgid "Enable mirror configuration"
+msgstr ""
+
+msgid "Enable or disable the Pseudonymizer data collection."
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
+
+msgid "Enable shared Runners"
+msgstr ""
+
+msgid "Enable snowplow tracking"
+msgstr ""
+
+msgid "Enable two-factor authentication"
+msgstr ""
+
+msgid "Enable usage ping"
+msgstr ""
+
+msgid "Enable usage ping to get an overview of how you are using GitLab from a feature perspective."
+msgstr ""
+
+msgid "Enable/disable your service desk. %{link_start}Learn more about service desk%{link_end}."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "Enabled Git access protocols"
+msgstr ""
+
+msgid "Enabled sources for code import during project creation. OmniAuth must be configured for GitHub"
+msgstr ""
+
+msgid "Enabling this will only make licensed EE features available to projects if the project namespace's plan includes the feature or if the project is public."
+msgstr ""
+
+msgid "End date"
+msgstr ""
+
+msgid "Ends at (UTC)"
+msgstr ""
+
+msgid "Enforce DNS rebinding attack protection"
+msgstr ""
+
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
+msgid "Enter IP address range"
+msgstr ""
+
+msgid "Enter a number"
+msgstr ""
+
+msgid "Enter at least three characters to search"
+msgstr ""
+
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
+msgid "Enter in your Bitbucket Server URL and personal access token below"
+msgstr ""
+
+msgid "Enter in your Phabricator Server URL and personal access token below"
+msgstr ""
+
+msgid "Enter merge request URLs"
+msgstr ""
+
+msgid "Enter the issue description"
+msgstr ""
+
+msgid "Enter the issue title"
+msgstr ""
+
+msgid "Enter the merge request description"
+msgstr ""
+
+msgid "Enter the merge request title"
+msgstr ""
+
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
+msgid "EnviornmentDashboard|You are looking at the last updated environment"
+msgstr ""
+
+msgid "Environment"
+msgstr ""
+
+msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
+msgstr ""
+
+msgid "Environment variables are configured by your administrator to be %{link_start}protected%{link_end} by default"
+msgstr ""
+
+msgid "Environment:"
+msgstr ""
+
+msgid "Environments"
+msgstr ""
+
+msgid "Environments Dashboard"
+msgstr ""
+
+msgid "Environments allow you to track deployments of your application %{link_to_read_more}."
+msgstr ""
+
+msgid "EnvironmentsDashboard|Add a project to the dashboard"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Add projects"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Environments Dashboard"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Job: %{job}"
+msgstr ""
+
+msgid "EnvironmentsDashboard|More actions"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Remove"
+msgstr ""
+
+msgid "EnvironmentsDashboard|The environments dashboard provides a summary of each project's environments' status, including pipeline and alert statuses."
+msgstr ""
+
+msgid "Environments|An error occurred while fetching the environments."
+msgstr ""
+
+msgid "Environments|An error occurred while making the request."
+msgstr ""
+
+msgid "Environments|An error occurred while re-deploying the environment, please try again"
+msgstr ""
+
+msgid "Environments|An error occurred while rolling back the environment, please try again"
+msgstr ""
+
+msgid "Environments|An error occurred while stopping the environment, please try again"
+msgstr ""
+
+msgid "Environments|Are you sure you want to stop this environment?"
+msgstr ""
+
+msgid "Environments|Commit"
+msgstr ""
+
+msgid "Environments|Deploy to..."
+msgstr ""
+
+msgid "Environments|Deployment"
+msgstr ""
+
+msgid "Environments|Environment"
+msgstr ""
+
+msgid "Environments|Environments"
+msgstr ""
+
+msgid "Environments|Environments are places where code gets deployed, such as staging or production."
+msgstr ""
+
+msgid "Environments|Job"
+msgstr ""
+
+msgid "Environments|Learn more about stopping environments"
+msgstr ""
+
+msgid "Environments|New environment"
+msgstr ""
+
+msgid "Environments|No deployments yet"
+msgstr ""
+
+msgid "Environments|No pod name has been specified"
+msgstr ""
+
+msgid "Environments|Note that this action will stop the environment, but it will %{emphasisStart}not%{emphasisEnd} have an effect on any existing deployment due to no “stop environment action†being defined in the %{ciConfigLinkStart}.gitlab-ci.yml%{ciConfigLinkEnd} file."
+msgstr ""
+
+msgid "Environments|Note that this action will stop the environment, but it will %{emphasis_start}not%{emphasis_end} have an effect on any existing deployment due to no “stop environment action†being defined in the %{ci_config_link_start}.gitlab-ci.yml%{ci_config_link_end} file."
+msgstr ""
+
+msgid "Environments|Open live environment"
+msgstr ""
+
+msgid "Environments|Pod logs from"
+msgstr ""
+
+msgid "Environments|Re-deploy"
+msgstr ""
+
+msgid "Environments|Re-deploy environment %{environment_name}?"
+msgstr ""
+
+msgid "Environments|Re-deploy environment %{name}?"
+msgstr ""
+
+msgid "Environments|Re-deploy to environment"
+msgstr ""
+
+msgid "Environments|Read more about environments"
+msgstr ""
+
+msgid "Environments|Rollback"
+msgstr ""
+
+msgid "Environments|Rollback environment"
+msgstr ""
+
+msgid "Environments|Rollback environment %{environment_name}?"
+msgstr ""
+
+msgid "Environments|Rollback environment %{name}?"
+msgstr ""
+
+msgid "Environments|Show all"
+msgstr ""
+
+msgid "Environments|Stop"
+msgstr ""
+
+msgid "Environments|Stop environment"
+msgstr ""
+
+msgid "Environments|Stopping"
+msgstr ""
+
+msgid "Environments|This action will relaunch the job for commit %{commit_id}, putting the environment in a previous version. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|This action will relaunch the job for commit %{linkStart}%{commitId}%{linkEnd}, putting the environment in a previous version. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|This action will run the job defined by %{name} for commit %{linkStart}%{commitId}%{linkEnd} putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|This action will run the job defined by staging for commit %{commit_id}, putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|Updated"
+msgstr ""
+
+msgid "Environments|You don't have any environments right now"
+msgstr ""
+
+msgid "Environments|protected"
+msgstr ""
+
+msgid "Epic"
+msgstr ""
+
+msgid "Epics"
+msgstr ""
+
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
+msgid "Epics Roadmap"
+msgstr ""
+
+msgid "Epics and Issues"
+msgstr ""
+
+msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
+msgstr ""
+
+msgid "Epics|%{epicsCount} epics and %{issuesCount} issues"
+msgstr ""
+
+msgid "Epics|Add an epic"
+msgstr ""
+
+msgid "Epics|Add an existing epic as a child epic."
+msgstr ""
+
+msgid "Epics|An error occurred while saving the %{epicDateType} date"
+msgstr ""
+
+msgid "Epics|Are you sure you want to remove %{bStart}%{targetIssueTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}?"
+msgstr ""
+
+msgid "Epics|Create an epic within this group and add it as a child epic."
+msgstr ""
+
+msgid "Epics|Create new epic"
+msgstr ""
+
+msgid "Epics|How can I solve this?"
+msgstr ""
+
+msgid "Epics|More information"
+msgstr ""
+
+msgid "Epics|Remove epic"
+msgstr ""
+
+msgid "Epics|Remove issue"
+msgstr ""
+
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
+msgid "Epics|Something went wrong while creating child epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while fetching child epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
+msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
+msgstr ""
+
+msgid "Epics|This will also remove any descendents of %{bStart}%{targetEpicTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}. Are you sure?"
+msgstr ""
+
+msgid "Epics|To schedule your epic's %{epicDateType} date based on milestones, assign a milestone with a %{epicDateType} date to any issue in the epic."
+msgstr ""
+
+msgid "Epics|due"
+msgstr ""
+
+msgid "Epics|start"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+msgid "Error Tracking"
+msgstr ""
+
+msgid "Error creating a new path"
+msgstr ""
+
+msgid "Error creating epic"
+msgstr ""
+
+msgid "Error deleting %{issuableType}"
+msgstr ""
+
+msgid "Error fetching contributors data."
+msgstr ""
+
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
+msgid "Error fetching labels."
+msgstr ""
+
+msgid "Error fetching network graph."
+msgstr ""
+
+msgid "Error fetching projects"
+msgstr ""
+
+msgid "Error fetching refs"
+msgstr ""
+
+msgid "Error fetching the dependency list. Please check your network connection and try again."
+msgstr ""
+
+msgid "Error fetching usage ping data."
+msgstr ""
+
+msgid "Error loading branch data. Please try again."
+msgstr ""
+
+msgid "Error loading branches."
+msgstr ""
+
+msgid "Error loading burndown chart data"
+msgstr ""
+
+msgid "Error loading file viewer."
+msgstr ""
+
+msgid "Error loading last commit."
+msgstr ""
+
+msgid "Error loading markdown preview"
+msgstr ""
+
+msgid "Error loading merge requests."
+msgstr ""
+
+msgid "Error loading milestone tab"
+msgstr ""
+
+msgid "Error loading project data. Please try again."
+msgstr ""
+
+msgid "Error loading template types."
+msgstr ""
+
+msgid "Error loading template."
+msgstr ""
+
+msgid "Error loading viewer"
+msgstr ""
+
+msgid "Error occurred when fetching sidebar data"
+msgstr ""
+
+msgid "Error occurred when saving assignees"
+msgstr ""
+
+msgid "Error occurred when toggling the notification subscription"
+msgstr ""
+
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
+msgid "Error occurred. User was not blocked"
+msgstr ""
+
+msgid "Error occurred. User was not confirmed"
+msgstr ""
+
+msgid "Error occurred. User was not unblocked"
+msgstr ""
+
+msgid "Error occurred. User was not unlocked"
+msgstr ""
+
+msgid "Error rendering markdown preview"
+msgstr ""
+
+msgid "Error saving label update."
+msgstr ""
+
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
+msgid "Error updating %{issuableType}"
+msgstr ""
+
+msgid "Error updating status for all to-do items."
+msgstr ""
+
+msgid "Error updating status of to-do item."
+msgstr ""
+
+msgid "Error uploading file"
+msgstr ""
+
+msgid "Error uploading file: %{stripped}"
+msgstr ""
+
+msgid "Error while loading the merge request. Please try again."
+msgstr ""
+
+msgid "Error while loading the project data. Please try again."
+msgstr ""
+
+msgid "Error while migrating %{upload_id}: %{error_message}"
+msgstr ""
+
+msgid "Error with Akismet. Please check the logs for more info."
+msgstr ""
+
+msgid "Error:"
+msgstr ""
+
+msgid "ErrorTracking|Active"
+msgstr ""
+
+msgid "ErrorTracking|After adding your Auth Token, use the 'Connect' button to load projects"
+msgstr ""
+
+msgid "ErrorTracking|Auth Token"
+msgstr ""
+
+msgid "ErrorTracking|Click 'Connect' to re-establish the connection to Sentry and activate the dropdown."
+msgstr ""
+
+msgid "ErrorTracking|Connection has failed. Re-check Auth Token and try again."
+msgstr ""
+
+msgid "ErrorTracking|Find your hostname in your Sentry account settings page"
+msgstr ""
+
+msgid "ErrorTracking|No projects available"
+msgstr ""
+
+msgid "ErrorTracking|Select project"
+msgstr ""
+
+msgid "ErrorTracking|To enable project selection, enter a valid Auth Token"
+msgstr ""
+
+msgid "Errors"
+msgstr ""
+
+msgid "Estimated"
+msgstr ""
+
+msgid "EventFilterBy|Filter by all"
+msgstr ""
+
+msgid "EventFilterBy|Filter by comments"
+msgstr ""
+
+msgid "EventFilterBy|Filter by issue events"
+msgstr ""
+
+msgid "EventFilterBy|Filter by merge events"
+msgstr ""
+
+msgid "EventFilterBy|Filter by push events"
+msgstr ""
+
+msgid "EventFilterBy|Filter by team"
+msgstr ""
+
+msgid "Events"
+msgstr ""
+
+msgid "Every %{action} attempt has failed: %{job_error_message}. Please try again."
+msgstr ""
+
+msgid "Every day (at 4:00am)"
+msgstr ""
+
+msgid "Every month (on the 1st at 4:00am)"
+msgstr ""
+
+msgid "Every week (Sundays at 4:00am)"
+msgstr ""
+
+msgid "Everyone"
+msgstr ""
+
+msgid "Everyone With Access"
+msgstr ""
+
+msgid "Everyone can contribute"
+msgstr ""
+
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using GitBook."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using Hexo."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using Hugo."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using Jekyll."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using plain HTML."
+msgstr ""
+
+msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple queries combined into a formula."
+msgstr ""
+
+msgid "Except policy:"
+msgstr ""
+
+msgid "Existing"
+msgstr ""
+
+msgid "Existing members and groups"
+msgstr ""
+
+msgid "Expand"
+msgstr ""
+
+msgid "Expand all"
+msgstr ""
+
+msgid "Expand approvers"
+msgstr ""
+
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
+msgid "Expand sidebar"
+msgstr ""
+
+msgid "Expand up"
+msgstr ""
+
+msgid "Expiration date"
+msgstr ""
+
+msgid "Expired"
+msgstr ""
+
+msgid "Expired %{expiredOn}"
+msgstr ""
+
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
+msgid "Expires in %{expires_at}"
+msgstr ""
+
+msgid "Explain the problem. If appropriate, provide a link to the relevant issue or comment."
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Explore GitLab"
+msgstr ""
+
+msgid "Explore Groups"
+msgstr ""
+
+msgid "Explore groups"
+msgstr ""
+
+msgid "Explore projects"
+msgstr ""
+
+msgid "Explore public groups"
+msgstr ""
+
+msgid "Export as CSV"
+msgstr ""
+
+msgid "Export issues"
+msgstr ""
+
+msgid "Export project"
+msgstr ""
+
+msgid "Export this project with all its related data in order to move your project to a new GitLab instance. Once the export is finished, you can import the file from the \"New Project\" page."
+msgstr ""
+
+msgid "External Classification Policy Authorization"
+msgstr ""
+
+msgid "External URL"
+msgstr ""
+
+msgid "External Wiki"
+msgstr ""
+
+msgid "External authentication"
+msgstr ""
+
+msgid "External authorization denied access to this project"
+msgstr ""
+
+msgid "External authorization request timeout"
+msgstr ""
+
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
+msgid "ExternalAuthorizationService|Classification label"
+msgstr ""
+
+msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
+msgstr ""
+
+msgid "ExternalMetrics|Add a button to the metrics dashboard linking directly to your existing external dashboards."
+msgstr ""
+
+msgid "ExternalMetrics|Enter the URL of the dashboard you want to link to"
+msgstr ""
+
+msgid "ExternalMetrics|External Dashboard"
+msgstr ""
+
+msgid "ExternalMetrics|Full dashboard URL"
+msgstr ""
+
+msgid "ExternalWikiService|External Wiki"
+msgstr ""
+
+msgid "ExternalWikiService|Replaces the link to the internal wiki with a link to an external wiki."
+msgstr ""
+
+msgid "ExternalWikiService|The URL of the external Wiki"
+msgstr ""
+
+msgid "Facebook"
+msgstr ""
+
+msgid "Failed"
+msgstr ""
+
+msgid "Failed Jobs"
+msgstr ""
+
+msgid "Failed create wiki"
+msgstr ""
+
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
+msgid "Failed to change the owner"
+msgstr ""
+
+msgid "Failed to check related branches."
+msgstr ""
+
+msgid "Failed to connect to the prometheus server"
+msgstr ""
+
+msgid "Failed to create Merge Request. Please try again."
+msgstr ""
+
+msgid "Failed to create a branch for this issue. Please try again."
+msgstr ""
+
+msgid "Failed to create repository via gitlab-shell"
+msgstr ""
+
+msgid "Failed to create resources"
+msgstr ""
+
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
+msgid "Failed to deploy to"
+msgstr ""
+
+msgid "Failed to get ref."
+msgstr ""
+
+msgid "Failed to install."
+msgstr ""
+
+msgid "Failed to load emoji list."
+msgstr ""
+
+msgid "Failed to load errors from Sentry. Error message: %{errorMessage}"
+msgstr ""
+
+msgid "Failed to load groups & users."
+msgstr ""
+
+msgid "Failed to load related branches"
+msgstr ""
+
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
+msgid "Failed to promote label due to internal error. Please contact administrators."
+msgstr ""
+
+msgid "Failed to protect the branch"
+msgstr ""
+
+msgid "Failed to protect the environment"
+msgstr ""
+
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
+msgid "Failed to remove issue from board, please try again."
+msgstr ""
+
+msgid "Failed to remove mirror."
+msgstr ""
+
+msgid "Failed to remove the pipeline schedule"
+msgstr ""
+
+msgid "Failed to remove user identity."
+msgstr ""
+
+msgid "Failed to remove user key."
+msgstr ""
+
+msgid "Failed to reset key. Please try again."
+msgstr ""
+
+msgid "Failed to save comment!"
+msgstr ""
+
+msgid "Failed to save merge conflicts resolutions. Please try again!"
+msgstr ""
+
+msgid "Failed to save new settings"
+msgstr ""
+
+msgid "Failed to save preferences (%{error_message})."
+msgstr ""
+
+msgid "Failed to save preferences."
+msgstr ""
+
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
+msgid "Failed to signing using smartcard authentication"
+msgstr ""
+
+msgid "Failed to update branch!"
+msgstr ""
+
+msgid "Failed to update environment!"
+msgstr ""
+
+msgid "Failed to update issues, please try again."
+msgstr ""
+
+msgid "Failed to update tag!"
+msgstr ""
+
+msgid "Failed to update."
+msgstr ""
+
+msgid "Failed to upgrade."
+msgstr ""
+
+msgid "Failed to upload object map file"
+msgstr ""
+
+msgid "Failure"
+msgstr ""
+
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
+msgid "Fast-forward merge without a merge commit"
+msgstr ""
+
+msgid "Faster as it re-uses the project workspace (falling back to clone if it doesn't exist)"
+msgstr ""
+
+msgid "Favicon was successfully removed."
+msgstr ""
+
+msgid "Feature Flags"
+msgstr ""
+
+msgid "Feature flag was not removed."
+msgstr ""
+
+msgid "Feature flag was successfully removed."
+msgstr ""
+
+msgid "FeatureFlags|* (All Environments)"
+msgstr ""
+
+msgid "FeatureFlags|* (All environments)"
+msgstr ""
+
+msgid "FeatureFlags|API URL"
+msgstr ""
+
+msgid "FeatureFlags|Active"
+msgstr ""
+
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
+msgid "FeatureFlags|Configure"
+msgstr ""
+
+msgid "FeatureFlags|Configure feature flags"
+msgstr ""
+
+msgid "FeatureFlags|Create feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Delete %{name}?"
+msgstr ""
+
+msgid "FeatureFlags|Delete feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Description"
+msgstr ""
+
+msgid "FeatureFlags|Edit Feature Flag"
+msgstr ""
+
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
+msgid "FeatureFlags|Environment Spec"
+msgstr ""
+
+msgid "FeatureFlags|Environment Specs"
+msgstr ""
+
+msgid "FeatureFlags|Feature Flag"
+msgstr ""
+
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgstr ""
+
+msgid "FeatureFlags|Feature Flags"
+msgstr ""
+
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgstr ""
+
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgstr ""
+
+msgid "FeatureFlags|Get started with feature flags"
+msgstr ""
+
+msgid "FeatureFlags|Inactive"
+msgstr ""
+
+msgid "FeatureFlags|Inactive flag for %{scope}"
+msgstr ""
+
+msgid "FeatureFlags|Install a %{docs_link_anchored_start}compatible client library%{docs_link_anchored_end} and specify the API URL, application name, and instance ID during the configuration setup. %{docs_link_start}More Information%{docs_link_end}"
+msgstr ""
+
+msgid "FeatureFlags|Instance ID"
+msgstr ""
+
+msgid "FeatureFlags|Loading feature flags"
+msgstr ""
+
+msgid "FeatureFlags|More information"
+msgstr ""
+
+msgid "FeatureFlags|Name"
+msgstr ""
+
+msgid "FeatureFlags|New"
+msgstr ""
+
+msgid "FeatureFlags|New Feature Flag"
+msgstr ""
+
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
+msgid "FeatureFlags|Protected"
+msgstr ""
+
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
+msgid "FeatureFlags|Status"
+msgstr ""
+
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
+msgid "FeatureFlags|Target environments"
+msgstr ""
+
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There was an error fetching the feature flags."
+msgstr ""
+
+msgid "FeatureFlags|Try again in a few moments or contact your support team."
+msgstr ""
+
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
+msgid "Feb"
+msgstr ""
+
+msgid "February"
+msgstr ""
+
+msgid "Fetching incoming email"
+msgstr ""
+
+msgid "Fetching licenses failed."
+msgstr ""
+
+msgid "Fetching licenses failed. The request endpoint was not found."
+msgstr ""
+
+msgid "Fetching licenses failed. You are not permitted to perform this action."
+msgstr ""
+
+msgid "File"
+msgid_plural "Files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "File added"
+msgstr ""
+
+msgid "File browser"
+msgstr ""
+
+msgid "File deleted"
+msgstr ""
+
+msgid "File mode changed from %{a_mode} to %{b_mode}"
+msgstr ""
+
+msgid "File moved"
+msgstr ""
+
+msgid "File templates"
+msgstr ""
+
+msgid "File upload error."
+msgstr ""
+
+msgid "Files"
+msgstr ""
+
+msgid "Files breadcrumb"
+msgstr ""
+
+msgid "Files, directories, and submodules in the path %{path} for commit reference %{ref}"
+msgstr ""
+
+msgid "Fill in the fields below, turn on <strong>%{enable_label}</strong>, and press <strong>%{save_changes}</strong>"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Filter by %{issuable_type} that are currently closed."
+msgstr ""
+
+msgid "Filter by %{issuable_type} that are currently opened."
+msgstr ""
+
+msgid "Filter by commit message"
+msgstr ""
+
+msgid "Filter by milestone name"
+msgstr ""
+
+msgid "Filter by two-factor authentication"
+msgstr ""
+
+msgid "Filter results by group"
+msgstr ""
+
+msgid "Filter results by project"
+msgstr ""
+
+msgid "Filter your projects by name"
+msgstr ""
+
+msgid "Filter..."
+msgstr ""
+
+msgid "Find by path"
+msgstr ""
+
+msgid "Find existing members by name"
+msgstr ""
+
+msgid "Find file"
+msgstr ""
+
+msgid "Find the downloaded ZIP file and decompress it."
+msgstr ""
+
+msgid "Find the newly extracted <code>Takeout/Google Code Project Hosting/GoogleCodeProjectHosting.json</code> file."
+msgstr ""
+
+msgid "Fingerprint"
+msgstr ""
+
+msgid "Fingerprint:"
+msgstr ""
+
+msgid "Fingerprints"
+msgstr ""
+
+msgid "Finish editing this message first!"
+msgstr ""
+
+msgid "Finish review"
+msgstr ""
+
+msgid "Finish setting up your dedicated account for <strong>%{group_name}</strong>."
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+msgid "First day of the week"
+msgstr ""
+
+msgid "First name"
+msgstr ""
+
+msgid "Fixed date"
+msgstr ""
+
+msgid "Fixed due date"
+msgstr ""
+
+msgid "Fixed start date"
+msgstr ""
+
+msgid "Fixed:"
+msgstr ""
+
+msgid "FlowdockService|Flowdock Git source token"
+msgstr ""
+
+msgid "FlowdockService|Flowdock is a collaboration web app for technical teams."
+msgstr ""
+
+msgid "FogBugz Email"
+msgstr ""
+
+msgid "FogBugz Import"
+msgstr ""
+
+msgid "FogBugz Password"
+msgstr ""
+
+msgid "FogBugz URL"
+msgstr ""
+
+msgid "FogBugz import"
+msgstr ""
+
+msgid "Follow the steps below to export your Google Code project data."
+msgstr ""
+
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
+msgid "For internal projects, any logged in user can view pipelines and access job details (output logs and artifacts)"
+msgstr ""
+
+msgid "For more info, read the documentation."
+msgstr ""
+
+msgid "For more information, go to the "
+msgstr ""
+
+msgid "For more information, please review %{link_start_tag}Jaeger's configuration doc%{link_end_tag}"
+msgstr ""
+
+msgid "For more information, see the documentation on %{deactivating_usage_ping_link_start}deactivating the usage ping%{deactivating_usage_ping_link_end}."
+msgstr ""
+
+msgid "For private projects, any member (guest or higher) can view pipelines and access job details (output logs and artifacts)"
+msgstr ""
+
+msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
+msgstr ""
+
+msgid "Forgot your password?"
+msgstr ""
+
+msgid "Fork"
+msgstr ""
+
+msgid "Fork Error!"
+msgstr ""
+
+msgid "Fork project"
+msgstr ""
+
+msgid "ForkedFromProjectPath|Forked from"
+msgstr ""
+
+msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
+msgstr ""
+
+msgid "Forking in progress"
+msgstr ""
+
+msgid "Forking repository"
+msgstr ""
+
+msgid "Forks"
+msgstr ""
+
+msgid "Format"
+msgstr ""
+
+msgid "Forward external support email address to"
+msgstr ""
+
+msgid "Found errors in your %{gitlab_ci_yml}:"
+msgstr ""
+
+msgid "Found errors in your .gitlab-ci.yml:"
+msgstr ""
+
+msgid "Free Trial"
+msgstr ""
+
+msgid "Free Trial of GitLab.com Gold"
+msgstr ""
+
+msgid "Friday"
+msgstr ""
+
+msgid "From"
+msgstr ""
+
+msgid "From %{providerTitle}"
+msgstr ""
+
+msgid "From Bitbucket"
+msgstr ""
+
+msgid "From Bitbucket Server"
+msgstr ""
+
+msgid "From FogBugz"
+msgstr ""
+
+msgid "From GitLab.com"
+msgstr ""
+
+msgid "From Google Code"
+msgstr ""
+
+msgid "From issue creation until deploy to production"
+msgstr ""
+
+msgid "From merge request merge until deploy to production"
+msgstr ""
+
+msgid "From milestones:"
+msgstr ""
+
+msgid "From the Kubernetes cluster details view, install Runner from the applications list"
+msgstr ""
+
+msgid "Full name"
+msgstr ""
+
+msgid "GPG Key ID:"
+msgstr ""
+
+msgid "GPG Keys"
+msgstr ""
+
+msgid "GPG keys allow you to verify signed commits."
+msgstr ""
+
+msgid "GPG signature (loading...)"
+msgstr ""
+
+msgid "General"
+msgstr ""
+
+msgid "General Settings"
+msgstr ""
+
+msgid "General pipelines"
+msgstr ""
+
+msgid "Generate a default set of labels"
+msgstr ""
+
+msgid "Generate key"
+msgstr ""
+
+msgid "Generate link to chart"
+msgstr ""
+
+msgid "Generate new export"
+msgstr ""
+
+msgid "Geo"
+msgstr ""
+
+msgid "Geo Nodes"
+msgstr ""
+
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
+msgid "GeoNodeSyncStatus|Node is failing or broken."
+msgstr ""
+
+msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
+msgstr ""
+
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
+msgid "GeoNodes|Data is out of date from %{timeago}"
+msgstr ""
+
+msgid "GeoNodes|Data replication lag"
+msgstr ""
+
+msgid "GeoNodes|Does not match the primary storage configuration"
+msgstr ""
+
+msgid "GeoNodes|Failed"
+msgstr ""
+
+msgid "GeoNodes|Full"
+msgstr ""
+
+msgid "GeoNodes|GitLab version"
+msgstr ""
+
+msgid "GeoNodes|GitLab version does not match the primary node version"
+msgstr ""
+
+msgid "GeoNodes|Health status"
+msgstr ""
+
+msgid "GeoNodes|Internal URL"
+msgstr ""
+
+msgid "GeoNodes|Last event ID processed by cursor"
+msgstr ""
+
+msgid "GeoNodes|Last event ID seen from primary"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Repository checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Repository verification"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Wiki checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Wiki verification"
+msgstr ""
+
+msgid "GeoNodes|Loading nodes"
+msgstr ""
+
+msgid "GeoNodes|Local LFS objects"
+msgstr ""
+
+msgid "GeoNodes|Local attachments"
+msgstr ""
+
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
+msgid "GeoNodes|Local job artifacts"
+msgstr ""
+
+msgid "GeoNodes|New node"
+msgstr ""
+
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
+msgid "GeoNodes|Out of sync"
+msgstr ""
+
+msgid "GeoNodes|Pausing replication stops the sync process."
+msgstr ""
+
+msgid "GeoNodes|Removing a primary node stops the sync process for all nodes. Syncing cannot be resumed without losing some data on all secondaries. In this case we would recommend setting up all nodes from scratch. Are you sure?"
+msgstr ""
+
+msgid "GeoNodes|Removing a secondary node stops the sync process. It is not currently possible to add back the same node without losing some data. We only recommend setting up a new secondary node in this case. Are you sure?"
+msgstr ""
+
+msgid "GeoNodes|Replication slot WAL"
+msgstr ""
+
+msgid "GeoNodes|Replication slots"
+msgstr ""
+
+msgid "GeoNodes|Repositories"
+msgstr ""
+
+msgid "GeoNodes|Repositories checksummed for verification with their counterparts on Secondary nodes"
+msgstr ""
+
+msgid "GeoNodes|Repositories verified with their counterparts on the Primary node"
+msgstr ""
+
+msgid "GeoNodes|Repository checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Repository verification progress"
+msgstr ""
+
+msgid "GeoNodes|Selective"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while fetching nodes"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
+msgid "GeoNodes|Storage config"
+msgstr ""
+
+msgid "GeoNodes|Sync settings"
+msgstr ""
+
+msgid "GeoNodes|Synced"
+msgstr ""
+
+msgid "GeoNodes|Unused slots"
+msgstr ""
+
+msgid "GeoNodes|Unverified"
+msgstr ""
+
+msgid "GeoNodes|Used slots"
+msgstr ""
+
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Wiki verification progress"
+msgstr ""
+
+msgid "GeoNodes|Wikis"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed for verification with their counterparts on Secondary nodes"
+msgstr ""
+
+msgid "GeoNodes|Wikis verified with their counterparts on the Primary node"
+msgstr ""
+
+msgid "GeoNodes|With %{geo} you can install a special read-only and replicated instance anywhere. Before you add nodes, follow the %{instructions} in the exact order they appear."
+msgstr ""
+
+msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS."
+msgstr ""
+
+msgid "Geo|%{name} is scheduled for forced re-download"
+msgstr ""
+
+msgid "Geo|%{name} is scheduled for re-sync"
+msgstr ""
+
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|All"
+msgstr ""
+
+msgid "Geo|All projects"
+msgstr ""
+
+msgid "Geo|All projects are being scheduled for re-sync"
+msgstr ""
+
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
+msgid "Geo|Batch operations"
+msgstr ""
+
+msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
+msgstr ""
+
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
+msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
+msgstr ""
+
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
+msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
+msgstr ""
+
+msgid "Geo|Control the minimum interval in days that a repository should be reverified for this primary node"
+msgstr ""
+
+msgid "Geo|Could not remove tracking entry for an existing project."
+msgstr ""
+
+msgid "Geo|Could not remove tracking entry for an existing upload."
+msgstr ""
+
+msgid "Geo|Failed"
+msgstr ""
+
+msgid "Geo|File sync capacity"
+msgstr ""
+
+msgid "Geo|Geo Status"
+msgstr ""
+
+msgid "Geo|Groups to synchronize"
+msgstr ""
+
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
+msgid "Geo|In sync"
+msgstr ""
+
+msgid "Geo|Internal URL (optional)"
+msgstr ""
+
+msgid "Geo|Last repository check run"
+msgstr ""
+
+msgid "Geo|Last successful sync"
+msgstr ""
+
+msgid "Geo|Last sync attempt"
+msgstr ""
+
+msgid "Geo|Last time verified"
+msgstr ""
+
+msgid "Geo|Never"
+msgstr ""
+
+msgid "Geo|Next sync scheduled at"
+msgstr ""
+
+msgid "Geo|Not synced yet"
+msgstr ""
+
+msgid "Geo|Pending"
+msgstr ""
+
+msgid "Geo|Pending synchronization"
+msgstr ""
+
+msgid "Geo|Pending verification"
+msgstr ""
+
+msgid "Geo|Please refer to Geo Troubleshooting."
+msgstr ""
+
+msgid "Geo|Project"
+msgstr ""
+
+msgid "Geo|Project (ID: %{project_id}) no longer exists on the primary. It is safe to remove this entry, as this will not remove any data on disk."
+msgstr ""
+
+msgid "Geo|Projects in certain groups"
+msgstr ""
+
+msgid "Geo|Projects in certain storage shards"
+msgstr ""
+
+msgid "Geo|Re-verification interval"
+msgstr ""
+
+msgid "Geo|Redownload"
+msgstr ""
+
+msgid "Geo|Remove"
+msgstr ""
+
+msgid "Geo|Repository sync capacity"
+msgstr ""
+
+msgid "Geo|Resync"
+msgstr ""
+
+msgid "Geo|Resync all projects"
+msgstr ""
+
+msgid "Geo|Retry count"
+msgstr ""
+
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
+msgid "Geo|Select groups to replicate."
+msgstr ""
+
+msgid "Geo|Selective synchronization"
+msgstr ""
+
+msgid "Geo|Shards to synchronize"
+msgstr ""
+
+msgid "Geo|Status"
+msgstr ""
+
+msgid "Geo|Sync"
+msgstr ""
+
+msgid "Geo|Synced"
+msgstr ""
+
+msgid "Geo|Synced at"
+msgstr ""
+
+msgid "Geo|Synchronization failed - %{error}"
+msgstr ""
+
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
+msgstr ""
+
+msgid "Geo|The database is currently %{db_lag} behind the primary node."
+msgstr ""
+
+msgid "Geo|The node is currently %{minutes_behind} behind the primary node."
+msgstr ""
+
+msgid "Geo|This is a primary node"
+msgstr ""
+
+msgid "Geo|Tracking entry for project (%{project_id}) was successfully removed."
+msgstr ""
+
+msgid "Geo|Tracking entry for upload (%{type}/%{id}) was successfully removed."
+msgstr ""
+
+msgid "Geo|Tracking entry will be removed. Are you sure?"
+msgstr ""
+
+msgid "Geo|URL"
+msgstr ""
+
+msgid "Geo|Unknown state"
+msgstr ""
+
+msgid "Geo|Verification capacity"
+msgstr ""
+
+msgid "Geo|Verification failed - %{error}"
+msgstr ""
+
+msgid "Geo|Waiting for scheduler"
+msgstr ""
+
+msgid "Geo|You are on a secondary, <b>read-only</b> Geo node. If you want to make changes, you must visit this page on the %{primary_node}."
+msgstr ""
+
+msgid "Geo|You are on a secondary, <b>read-only</b> Geo node. You may be able to make a limited amount of changes or perform a limited amount of actions on this page."
+msgstr ""
+
+msgid "Geo|misconfigured"
+msgstr ""
+
+msgid "Geo|primary"
+msgstr ""
+
+msgid "Geo|secondary"
+msgstr ""
+
+msgid "Get a free instance review"
+msgstr ""
+
+msgid "Get started with error tracking"
+msgstr ""
+
+msgid "Get started with performance monitoring"
+msgstr ""
+
+msgid "Getting started with releases"
+msgstr ""
+
+msgid "Git"
+msgstr ""
+
+msgid "Git LFS is not enabled on this GitLab server, contact your admin."
+msgstr ""
+
+msgid "Git LFS objects will be synced in pull mirrors if LFS is %{docs_link_start}enabled for the project%{docs_link_end}. They will <strong>not</strong> be synced in push mirrors."
+msgstr ""
+
+msgid "Git global setup"
+msgstr ""
+
+msgid "Git repository URL"
+msgstr ""
+
+msgid "Git revision"
+msgstr ""
+
+msgid "Git shallow clone"
+msgstr ""
+
+msgid "Git strategy for pipelines"
+msgstr ""
+
+msgid "Git version"
+msgstr ""
+
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Enterprise Edition %{plan}"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
+msgid "GitLab Group Runners can execute code for all the projects in this group."
+msgstr ""
+
+msgid "GitLab Import"
+msgstr ""
+
+msgid "GitLab Shared Runners execute code of different projects on the same Runner unless you configure GitLab Runner Autoscale with MaxBuilds 1 (which it is on GitLab.com)."
+msgstr ""
+
+msgid "GitLab User"
+msgstr ""
+
+msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
+msgstr ""
+
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
+msgid "GitLab metadata URL"
+msgstr ""
+
+msgid "GitLab project export"
+msgstr ""
+
+msgid "GitLab restart is required to apply changes"
+msgstr ""
+
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "GitLab will run a background job that will produce pseudonymized CSVs of the GitLab database that will be uploaded to your configured object storage directory."
+msgstr ""
+
+msgid "GitLab.com import"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
+msgid "Gitaly Servers"
+msgstr ""
+
+msgid "Gitaly|Address"
+msgstr ""
+
+msgid "Gitea Host URL"
+msgstr ""
+
+msgid "Gitea Import"
+msgstr ""
+
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
+msgid "Given access %{time_ago}"
+msgstr ""
+
+msgid "Global Shortcuts"
+msgstr ""
+
+msgid "Global notification settings"
+msgstr ""
+
+msgid "Go Back"
+msgstr ""
+
+msgid "Go Micro is a framework for micro service development."
+msgstr ""
+
+msgid "Go back"
+msgstr ""
+
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
+msgid "Go full screen"
+msgstr ""
+
+msgid "Go to"
+msgstr ""
+
+msgid "Go to %{link_to_google_takeout}."
+msgstr ""
+
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
+msgid "Go to parent"
+msgstr ""
+
+msgid "Go to project"
+msgstr ""
+
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
+msgid "Go to your fork"
+msgstr ""
+
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
+msgid "Golden Tanuki"
+msgstr ""
+
+msgid "Google Code import"
+msgstr ""
+
+msgid "Google Takeout"
+msgstr ""
+
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
+
+msgid "Got it"
+msgstr ""
+
+msgid "Got it!"
+msgstr ""
+
+msgid "Grafana URL"
+msgstr ""
+
+msgid "Grant access"
+msgstr ""
+
+msgid "Graph"
+msgstr ""
+
+msgid "Gravatar"
+msgstr ""
+
+msgid "Gravatar enabled"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "Group %{group_name} was scheduled for deletion."
+msgstr ""
+
+msgid "Group %{group_name} was successfully created."
+msgstr ""
+
+msgid "Group CI/CD settings"
+msgstr ""
+
+msgid "Group Git LFS status:"
+msgstr ""
+
+msgid "Group ID"
+msgstr ""
+
+msgid "Group ID: %{group_id}"
+msgstr ""
+
+msgid "Group Runners"
+msgstr ""
+
+msgid "Group SAML must be enabled to test"
+msgstr ""
+
+msgid "Group URL"
+msgstr ""
+
+msgid "Group avatar"
+msgstr ""
+
+msgid "Group description"
+msgstr ""
+
+msgid "Group description (optional)"
+msgstr ""
+
+msgid "Group details"
+msgstr ""
+
+msgid "Group info:"
+msgstr ""
+
+msgid "Group maintainers can register group runners in the %{link}"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Group overview content"
+msgstr ""
+
+msgid "Group pipeline minutes were successfully reset."
+msgstr ""
+
+msgid "Group was successfully updated."
+msgstr ""
+
+msgid "Group: %{group_name}"
+msgstr ""
+
+msgid "Group: %{name}"
+msgstr ""
+
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
+msgid "GroupRoadmap|From %{dateWord}"
+msgstr ""
+
+msgid "GroupRoadmap|Something went wrong while fetching epics"
+msgstr ""
+
+msgid "GroupRoadmap|Sorry, no epics matched your search"
+msgstr ""
+
+msgid "GroupRoadmap|The roadmap shows the progress of your epics along a timeline"
+msgstr ""
+
+msgid "GroupRoadmap|To view the roadmap, add a start or due date to one of the %{linkStart}child epics%{linkEnd}."
+msgstr ""
+
+msgid "GroupRoadmap|To view the roadmap, add a start or due date to one of your epics in this group or its subgroups; from %{startDate} to %{endDate}."
+msgstr ""
+
+msgid "GroupRoadmap|To widen your search, change or remove filters; from %{startDate} to %{endDate}."
+msgstr ""
+
+msgid "GroupRoadmap|Until %{dateWord}"
+msgstr ""
+
+msgid "GroupSAML|Certificate fingerprint"
+msgstr ""
+
+msgid "GroupSAML|Configuration"
+msgstr ""
+
+msgid "GroupSAML|Enable SAML authentication for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforce SSO-only authentication for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforced SSO"
+msgstr ""
+
+msgid "GroupSAML|Generate a SCIM token"
+msgstr ""
+
+msgid "GroupSAML|Generate a SCIM token to set up your System for Cross-Domain Identity Management."
+msgstr ""
+
+msgid "GroupSAML|Identity provider single sign on URL"
+msgstr ""
+
+msgid "GroupSAML|Make sure you save this token — you won't be able to access it again."
+msgstr ""
+
+msgid "GroupSAML|Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
+msgid "GroupSAML|Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
+msgid "GroupSAML|SAML Single Sign On"
+msgstr ""
+
+msgid "GroupSAML|SAML Single Sign On Settings"
+msgstr ""
+
+msgid "GroupSAML|SCIM API endpoint URL"
+msgstr ""
+
+msgid "GroupSAML|SCIM Token"
+msgstr ""
+
+msgid "GroupSAML|SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
+msgid "GroupSAML|The SCIM token is now hidden. To see the value of the token again, you need to "
+msgstr ""
+
+msgid "GroupSAML|To be able to enable enforced SSO, you first need to enable SAML authentication."
+msgstr ""
+
+msgid "GroupSAML|To be able to enable group managed accounts, you first need to enable enforced SSO."
+msgstr ""
+
+msgid "GroupSAML|Toggle SAML authentication"
+msgstr ""
+
+msgid "GroupSAML|With group managed accounts enabled, all the users without a group managed account will be excluded from the group."
+msgstr ""
+
+msgid "GroupSAML|Your SCIM token"
+msgstr ""
+
+msgid "GroupSettings|Auto DevOps pipeline was updated for the group"
+msgstr ""
+
+msgid "GroupSettings|Auto DevOps will automatically build, test and deploy your application based on a predefined Continuous Integration and Delivery configuration. %{auto_devops_start}Learn more about Auto DevOps%{auto_devops_end}"
+msgstr ""
+
+msgid "GroupSettings|Badges"
+msgstr ""
+
+msgid "GroupSettings|Custom project templates"
+msgstr ""
+
+msgid "GroupSettings|Customize your group badges."
+msgstr ""
+
+msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
+msgstr ""
+
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
+msgid "GroupSettings|Learn more about badges."
+msgstr ""
+
+msgid "GroupSettings|Learn more about group-level project templates."
+msgstr ""
+
+msgid "GroupSettings|New runners registration token has been generated!"
+msgstr ""
+
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Select a sub-group as the custom project template source for this group."
+msgstr ""
+
+msgid "GroupSettings|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
+msgstr ""
+
+msgid "GroupSettings|There was a problem updating Auto DevOps pipeline: %{error_messages}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
+msgid "Groups (%{count})"
+msgstr ""
+
+msgid "Groups can also be nested by creating %{subgroup_docs_link_start}subgroups%{subgroup_docs_link_end}."
+msgstr ""
+
+msgid "Groups with access to <strong>%{project_name}</strong>"
+msgstr ""
+
+msgid "GroupsDropdown|Frequently visited"
+msgstr ""
+
+msgid "GroupsDropdown|Groups you visit often will appear here"
+msgstr ""
+
+msgid "GroupsDropdown|Loading groups"
+msgstr ""
+
+msgid "GroupsDropdown|Search your groups"
+msgstr ""
+
+msgid "GroupsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "GroupsDropdown|Sorry, no groups matched your search"
+msgstr ""
+
+msgid "GroupsDropdown|This feature requires browser localStorage support"
+msgstr ""
+
+msgid "GroupsEmptyState|A group is a collection of several projects."
+msgstr ""
+
+msgid "GroupsEmptyState|If you organize your projects under a group, it works like a folder."
+msgstr ""
+
+msgid "GroupsEmptyState|No groups found"
+msgstr ""
+
+msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
+msgstr ""
+
+msgid "GroupsTree|Are you sure you want to leave the \"%{fullName}\" group?"
+msgstr ""
+
+msgid "GroupsTree|Create a project in this group."
+msgstr ""
+
+msgid "GroupsTree|Create a subgroup in this group."
+msgstr ""
+
+msgid "GroupsTree|Edit group"
+msgstr ""
+
+msgid "GroupsTree|Failed to leave the group. Please make sure you are not the only owner."
+msgstr ""
+
+msgid "GroupsTree|Leave this group"
+msgstr ""
+
+msgid "GroupsTree|Loading groups"
+msgstr ""
+
+msgid "GroupsTree|No groups matched your search"
+msgstr ""
+
+msgid "GroupsTree|No groups or projects matched your search"
+msgstr ""
+
+msgid "GroupsTree|Search by name"
+msgstr ""
+
+msgid "HTTP Basic: Access denied\\nYou must use a personal access token with 'api' scope for Git over HTTP.\\nYou can generate one at %{profile_personal_access_tokens_url}"
+msgstr ""
+
+msgid "Have your users email"
+msgstr ""
+
+msgid "Header logo was successfully removed."
+msgstr ""
+
+msgid "Header message"
+msgstr ""
+
+msgid "Health Check"
+msgstr ""
+
+msgid "Health information can be retrieved from the following endpoints. More information is available"
+msgstr ""
+
+msgid "HealthCheck|Access token is"
+msgstr ""
+
+msgid "HealthCheck|Healthy"
+msgstr ""
+
+msgid "HealthCheck|No Health Problems Detected"
+msgstr ""
+
+msgid "HealthCheck|Unhealthy"
+msgstr ""
+
+msgid "Hello there"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
+msgid "Hide archived projects"
+msgstr ""
+
+msgid "Hide file browser"
+msgstr ""
+
+msgid "Hide group projects"
+msgstr ""
+
+msgid "Hide host keys manual input"
+msgstr ""
+
+msgid "Hide marketing-related entries from help"
+msgstr ""
+
+msgid "Hide payload"
+msgstr ""
+
+msgid "Hide shared projects"
+msgstr ""
+
+msgid "Hide stage"
+msgstr ""
+
+msgid "Hide value"
+msgid_plural "Hide values"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Hide values"
+msgstr ""
+
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
+msgid "Highest role:"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+msgid "History of authentications"
+msgstr ""
+
+msgid "Hook execution failed. Ensure the group has a project with commits."
+msgstr ""
+
+msgid "Hook was successfully created."
+msgstr ""
+
+msgid "Hook was successfully updated."
+msgstr ""
+
+msgid "Hours"
+msgstr ""
+
+msgid "Housekeeping"
+msgstr ""
+
+msgid "Housekeeping successfully started"
+msgstr ""
+
+msgid "Housekeeping, export, path, transfer, remove, archive."
+msgstr ""
+
+msgid "How it works"
+msgstr ""
+
+msgid "How many replicas each Elasticsearch shard has."
+msgstr ""
+
+msgid "How many shards to split the Elasticsearch index over."
+msgstr ""
+
+msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
+msgstr ""
+
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
+msgid "I accept the %{terms_link}"
+msgstr ""
+
+msgid "I accept the|Terms of Service and Privacy Policy"
+msgstr ""
+
+msgid "I forgot my password"
+msgstr ""
+
+msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
+msgstr ""
+
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
+msgid "ID"
+msgstr ""
+
+msgid "ID:"
+msgstr ""
+
+msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
+msgstr ""
+
+msgid "IDE|Back"
+msgstr ""
+
+msgid "IDE|Client side evaluation"
+msgstr ""
+
+msgid "IDE|Commit"
+msgstr ""
+
+msgid "IDE|Edit"
+msgstr ""
+
+msgid "IDE|Get started with Live Preview"
+msgstr ""
+
+msgid "IDE|Go to project"
+msgstr ""
+
+msgid "IDE|Live Preview"
+msgstr ""
+
+msgid "IDE|Open in file view"
+msgstr ""
+
+msgid "IDE|Preview your web application using Web IDE client-side evaluation."
+msgstr ""
+
+msgid "IDE|Refresh preview"
+msgstr ""
+
+msgid "IDE|Review"
+msgstr ""
+
+msgid "IDE|Successful commit"
+msgstr ""
+
+msgid "IP Address"
+msgstr ""
+
+msgid "IP address restriction is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
+msgid "IP subnet restriction only allowed for top-level groups"
+msgstr ""
+
+msgid "Identifier"
+msgstr ""
+
+msgid "Identities"
+msgstr ""
+
+msgid "If any job surpasses this timeout threshold, it will be marked as failed. Human readable time input language is accepted like \"1 hour\". Values without specification represent seconds."
+msgstr ""
+
+msgid "If checked, group owners can manage LDAP group links and LDAP member overrides"
+msgstr ""
+
+msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization"
+msgstr ""
+
+msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored."
+msgstr ""
+
+msgid "If disabled, only admins will be able to set up mirrors in projects."
+msgstr ""
+
+msgid "If disabled, the access level will depend on the user's permissions in the project."
+msgstr ""
+
+msgid "If enabled"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If this was a mistake you can %{leave_link_start}leave the %{source_type}%{link_end}."
+msgstr ""
+
+msgid "If this was a mistake you can leave the %{source_type}."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
+msgid "If you lose your recovery codes you can generate new ones, invalidating all previous codes."
+msgstr ""
+
+msgid "If your HTTP repository is not publicly accessible, add your credentials."
+msgstr ""
+
+msgid "ImageDiffViewer|2-up"
+msgstr ""
+
+msgid "ImageDiffViewer|Onion skin"
+msgstr ""
+
+msgid "ImageDiffViewer|Swipe"
+msgstr ""
+
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
+msgid "Impersonation has been disabled"
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import CSV"
+msgstr ""
+
+msgid "Import Projects from Gitea"
+msgstr ""
+
+msgid "Import all compatible projects"
+msgstr ""
+
+msgid "Import all projects"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import an exported GitLab project"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import issues"
+msgstr ""
+
+msgid "Import members"
+msgstr ""
+
+msgid "Import members from another project"
+msgstr ""
+
+msgid "Import multiple repositories by uploading a manifest file."
+msgstr ""
+
+msgid "Import project"
+msgstr ""
+
+msgid "Import project members"
+msgstr ""
+
+msgid "Import projects from Bitbucket"
+msgstr ""
+
+msgid "Import projects from Bitbucket Server"
+msgstr ""
+
+msgid "Import projects from FogBugz"
+msgstr ""
+
+msgid "Import projects from GitLab.com"
+msgstr ""
+
+msgid "Import projects from Google Code"
+msgstr ""
+
+msgid "Import repositories from Bitbucket Server"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
+msgid "Import repository"
+msgstr ""
+
+msgid "Import tasks"
+msgstr ""
+
+msgid "Import tasks from Phabricator into issues"
+msgstr ""
+
+msgid "Import timed out. Import took longer than %{import_jobs_expiration} seconds"
+msgstr ""
+
+msgid "Import/Export illustration"
+msgstr ""
+
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
+msgid "ImportProjects|Blocked import URL: %{message}"
+msgstr ""
+
+msgid "ImportProjects|Error importing repository %{project_safe_import_url} into %{project_full_path} - %{message}"
+msgstr ""
+
+msgid "ImportProjects|Importing the project failed"
+msgstr ""
+
+msgid "ImportProjects|Requesting your %{provider} repositories failed"
+msgstr ""
+
+msgid "ImportProjects|Select the projects you want to import"
+msgstr ""
+
+msgid "ImportProjects|The remote data could not be imported."
+msgstr ""
+
+msgid "ImportProjects|The repository could not be created."
+msgstr ""
+
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr ""
+
+msgid "Improve Issue boards"
+msgstr ""
+
+msgid "Improve Issue boards with GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Improve Merge Requests and customer support with GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Improve issues management with Issue weight and GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition."
+msgstr ""
+
+msgid "In order to enable instance-level analytics, please ask an admin to enable %{usage_ping_link_start}usage ping%{usage_ping_link_end}."
+msgstr ""
+
+msgid "In order to gather accurate feature usage data, it can take 1 to 2 weeks to see your index."
+msgstr ""
+
+msgid "In the next step, you'll be able to select the projects you want to import."
+msgstr ""
+
+msgid "Incidents"
+msgstr ""
+
+msgid "Include a Terms of Service agreement and Privacy Policy that all users must accept."
+msgstr ""
+
+msgid "Include author name in notification email body"
+msgstr ""
+
+msgid "Include merge request description"
+msgstr ""
+
+msgid "Include the username in the URL if required: <code>https://username@gitlab.company.com/group/project.git</code>."
+msgstr ""
+
+msgid "Includes LFS objects. It can be overridden per group, or per project. 0 for unlimited."
+msgstr ""
+
+msgid "Includes an MVC structure to help you get started."
+msgstr ""
+
+msgid "Includes an MVC structure, Gemfile, Rakefile, along with many others, to help you get started."
+msgstr ""
+
+msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
+msgstr ""
+
+msgid "Incoming email"
+msgstr ""
+
+msgid "Incompatible Project"
+msgstr ""
+
+msgid "Incompatible options set!"
+msgstr ""
+
+msgid "Index all projects"
+msgstr ""
+
+msgid "Indicates whether this runner can pick jobs without tags"
+msgstr ""
+
+msgid "Inform users without uploaded SSH keys that they can't push over SSH until one is added"
+msgstr ""
+
+msgid "Information about additional Pages templates and how to install them can be found in our %{pages_getting_started_guide}."
+msgstr ""
+
+msgid "Inline"
+msgstr ""
+
+msgid "Input host keys manually"
+msgstr ""
+
+msgid "Input your repository URL"
+msgstr ""
+
+msgid "Insert a quote"
+msgstr ""
+
+msgid "Insert code"
+msgstr ""
+
+msgid "Insert suggestion"
+msgstr ""
+
+msgid "Insights"
+msgstr ""
+
+msgid "Install"
+msgstr ""
+
+msgid "Install GitLab Runner"
+msgstr ""
+
+msgid "Install Runner on Kubernetes"
+msgstr ""
+
+msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
+msgstr ""
+
+msgid "Install on clusters"
+msgstr ""
+
+msgid "Installed"
+msgstr ""
+
+msgid "Installing"
+msgstr ""
+
+msgid "Instance"
+msgid_plural "Instances"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Instance Statistics"
+msgstr ""
+
+msgid "Instance Statistics visibility"
+msgstr ""
+
+msgid "Instance administrators group already exists"
+msgstr ""
+
+msgid "Instance does not support multiple Kubernetes clusters"
+msgstr ""
+
+msgid "Instance license"
+msgstr ""
+
+msgid "Integrations"
+msgstr ""
+
+msgid "Integrations Settings"
+msgstr ""
+
+msgid "Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "Internal"
+msgstr ""
+
+msgid "Internal - The group and any internal projects can be viewed by any logged in user."
+msgstr ""
+
+msgid "Internal - The project can be accessed by any logged in user."
+msgstr ""
+
+msgid "Internal users"
+msgstr ""
+
+msgid "Interval Pattern"
+msgstr ""
+
+msgid "Introducing Cycle Analytics"
+msgstr ""
+
+msgid "Introducing Your Conversational Development Index"
+msgstr ""
+
+msgid "Invalid Insights config file detected"
+msgstr ""
+
+msgid "Invalid Login or password"
+msgstr ""
+
+msgid "Invalid URL"
+msgstr ""
+
+msgid "Invalid date"
+msgstr ""
+
+msgid "Invalid feature"
+msgstr ""
+
+msgid "Invalid field"
+msgstr ""
+
+msgid "Invalid file."
+msgstr ""
+
+msgid "Invalid import params"
+msgstr ""
+
+msgid "Invalid input, please avoid emojis"
+msgstr ""
+
+msgid "Invalid pin code"
+msgstr ""
+
+msgid "Invalid query"
+msgstr ""
+
+msgid "Invalid repository path"
+msgstr ""
+
+msgid "Invalid server response"
+msgstr ""
+
+msgid "Invalid two-factor code."
+msgstr ""
+
+msgid "Invitation"
+msgstr ""
+
+msgid "Invite"
+msgstr ""
+
+msgid "Invite \"%{trimmed}\" by email"
+msgstr ""
+
+msgid "Invite group"
+msgstr ""
+
+msgid "Invite member"
+msgstr ""
+
+msgid "Invocations"
+msgstr ""
+
+msgid "Is using license seat:"
+msgstr ""
+
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
+msgstr ""
+
+msgid "Issue"
+msgstr ""
+
+msgid "Issue Boards"
+msgstr ""
+
+msgid "Issue board focus mode"
+msgstr ""
+
+msgid "Issue events"
+msgstr ""
+
+msgid "Issue template (optional)"
+msgstr ""
+
+msgid "Issue update failed"
+msgstr ""
+
+msgid "Issue was closed by %{name} %{reason}"
+msgstr ""
+
+msgid "IssueBoards|Board"
+msgstr ""
+
+msgid "IssueBoards|Boards"
+msgstr ""
+
+msgid "IssueBoards|Create new board"
+msgstr ""
+
+msgid "IssueBoards|Delete board"
+msgstr ""
+
+msgid "IssueBoards|No matching boards found"
+msgstr ""
+
+msgid "IssueBoards|Some of your boards are hidden, activate a license to see them again."
+msgstr ""
+
+msgid "IssueBoards|Switch board"
+msgstr ""
+
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
+msgid "Issues"
+msgstr ""
+
+msgid "Issues / Merge Requests"
+msgstr ""
+
+msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
+msgstr ""
+
+msgid "Issues closed"
+msgstr ""
+
+msgid "Issues with comments, merge requests with diffs and comments, labels, milestones, snippets, and other project entities"
+msgstr ""
+
+msgid "Issues, merge requests, pushes, and comments."
+msgstr ""
+
+msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
+msgstr ""
+
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created per month"
+msgstr ""
+
+msgid "IssuesAnalytics|Last 12 months"
+msgstr ""
+
+msgid "IssuesAnalytics|Sorry, your filter produced no results"
+msgstr ""
+
+msgid "IssuesAnalytics|There are no issues for the projects in your group"
+msgstr ""
+
+msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
+msgstr ""
+
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
+msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
+msgstr ""
+
+msgid "It's you"
+msgstr ""
+
+msgid "Jaeger URL"
+msgstr ""
+
+msgid "Jaeger tracing"
+msgstr ""
+
+msgid "Jan"
+msgstr ""
+
+msgid "January"
+msgstr ""
+
+msgid "JiraService|Events for %{noteable_model_name} are disabled."
+msgstr ""
+
+msgid "JiraService|If different from Web URL"
+msgstr ""
+
+msgid "JiraService|Jira API URL"
+msgstr ""
+
+msgid "JiraService|Jira comments will be created when an issue gets referenced in a commit."
+msgstr ""
+
+msgid "JiraService|Jira comments will be created when an issue gets referenced in a merge request."
+msgstr ""
+
+msgid "JiraService|Jira issue tracker"
+msgstr ""
+
+msgid "JiraService|Password or API token"
+msgstr ""
+
+msgid "JiraService|Transition ID(s)"
+msgstr ""
+
+msgid "JiraService|Use , or ; to separate multiple transition IDs"
+msgstr ""
+
+msgid "JiraService|Use a password for server version and an API token for cloud version"
+msgstr ""
+
+msgid "JiraService|Use a username for server version and an email for cloud version"
+msgstr ""
+
+msgid "JiraService|Username or Email"
+msgstr ""
+
+msgid "JiraService|Web URL"
+msgstr ""
+
+msgid "JiraService|transition ids can have only numbers which can be split with , or ;"
+msgstr ""
+
+msgid "Job"
+msgstr ""
+
+msgid "Job Failed #%{build_id}"
+msgstr ""
+
+msgid "Job ID"
+msgstr ""
+
+msgid "Job has been erased"
+msgstr ""
+
+msgid "Job has been successfully erased!"
+msgstr ""
+
+msgid "Job has wrong arguments format."
+msgstr ""
+
+msgid "Job is missing the `model_type` argument."
+msgstr ""
+
+msgid "Job is stuck. Check runners."
+msgstr ""
+
+msgid "Job traces and artifacts"
+msgstr ""
+
+msgid "Job was retried"
+msgstr ""
+
+msgid "Jobs"
+msgstr ""
+
+msgid "Job|Browse"
+msgstr ""
+
+msgid "Job|Complete Raw"
+msgstr ""
+
+msgid "Job|Download"
+msgstr ""
+
+msgid "Job|Erase job log"
+msgstr ""
+
+msgid "Job|Job artifacts"
+msgstr ""
+
+msgid "Job|Job has been erased"
+msgstr ""
+
+msgid "Job|Job has been erased by"
+msgstr ""
+
+msgid "Job|Keep"
+msgstr ""
+
+msgid "Job|Pipeline"
+msgstr ""
+
+msgid "Job|Scroll to bottom"
+msgstr ""
+
+msgid "Job|Scroll to top"
+msgstr ""
+
+msgid "Job|Show complete raw"
+msgstr ""
+
+msgid "Job|The artifacts were removed"
+msgstr ""
+
+msgid "Job|The artifacts will be removed"
+msgstr ""
+
+msgid "Job|This job failed because the necessary resources were not successfully created."
+msgstr ""
+
+msgid "Job|This job is stuck because the project doesn't have any runners online assigned to it."
+msgstr ""
+
+msgid "Job|for"
+msgstr ""
+
+msgid "Job|into"
+msgstr ""
+
+msgid "Job|with"
+msgstr ""
+
+msgid "Join Zoom meeting"
+msgstr ""
+
+msgid "Jul"
+msgstr ""
+
+msgid "July"
+msgstr ""
+
+msgid "Jump to first unresolved discussion"
+msgstr ""
+
+msgid "Jump to next unresolved discussion"
+msgstr ""
+
+msgid "Jun"
+msgstr ""
+
+msgid "June"
+msgstr ""
+
+msgid "Key (PEM)"
+msgstr ""
+
+msgid "Key: %{key}"
+msgstr ""
+
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+msgid "Kubernetes"
+msgstr ""
+
+msgid "Kubernetes Cluster"
+msgstr ""
+
+msgid "Kubernetes Clusters"
+msgstr ""
+
+msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}"
+msgstr ""
+
+msgid "Kubernetes cluster integration was not removed."
+msgstr ""
+
+msgid "Kubernetes cluster integration was successfully removed."
+msgstr ""
+
+msgid "Kubernetes cluster was successfully updated."
+msgstr ""
+
+msgid "Kubernetes configured"
+msgstr ""
+
+msgid "Kubernetes deployment not found"
+msgstr ""
+
+msgid "Kubernetes error: %{error_code}"
+msgstr ""
+
+msgid "LDAP"
+msgstr ""
+
+msgid "LDAP settings"
+msgstr ""
+
+msgid "LDAP sync in progress. This could take a few minutes. Refresh the page to see the changes."
+msgstr ""
+
+msgid "LFS"
+msgstr ""
+
+msgid "LFS objects"
+msgstr ""
+
+msgid "LFSStatus|Disabled"
+msgstr ""
+
+msgid "LFSStatus|Enabled"
+msgstr ""
+
+msgid "LICENSE"
+msgstr ""
+
+msgid "Label"
+msgstr ""
+
+msgid "Label actions dropdown"
+msgstr ""
+
+msgid "Label lists show all issues with the selected label."
+msgstr ""
+
+msgid "Label was created"
+msgstr ""
+
+msgid "Label was removed"
+msgstr ""
+
+msgid "Label was successfully updated."
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|Labels"
+msgstr ""
+
+msgid "Labels"
+msgstr ""
+
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
+msgid "Labels can be applied to issues and merge requests to categorize them."
+msgstr ""
+
+msgid "Labels can be applied to issues and merge requests."
+msgstr ""
+
+msgid "Labels|<span>Promote label</span> %{labelTitle} <span>to Group Label?</span>"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
+msgid "Labels|Promoting %{labelTitle} will make it available for all projects inside %{groupName}. Existing project labels with the same title will be merged. This action cannot be reversed."
+msgstr ""
+
+msgid "Labels|and %{count} more"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Large File Storage"
+msgstr ""
+
+msgid "Last %d day"
+msgid_plural "Last %d days"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Last %{days} days"
+msgstr ""
+
+msgid "Last Pipeline"
+msgstr ""
+
+msgid "Last accessed on"
+msgstr ""
+
+msgid "Last activity"
+msgstr ""
+
+msgid "Last commit"
+msgstr ""
+
+msgid "Last contact"
+msgstr ""
+
+msgid "Last edited %{date}"
+msgstr ""
+
+msgid "Last edited by %{name}"
+msgstr ""
+
+msgid "Last name"
+msgstr ""
+
+msgid "Last reply by"
+msgstr ""
+
+msgid "Last seen"
+msgstr ""
+
+msgid "Last successful update"
+msgstr ""
+
+msgid "Last update"
+msgstr ""
+
+msgid "Last update attempt"
+msgstr ""
+
+msgid "Last updated"
+msgstr ""
+
+msgid "Last used"
+msgstr ""
+
+msgid "Last used on:"
+msgstr ""
+
+msgid "LastPushEvent|You pushed to"
+msgstr ""
+
+msgid "LastPushEvent|at"
+msgstr ""
+
+msgid "Latest changes"
+msgstr ""
+
+msgid "Latest pipeline for the most recent commit on this branch"
+msgstr ""
+
+msgid "Lead"
+msgstr ""
+
+msgid "Learn GitLab"
+msgstr ""
+
+msgid "Learn how to %{link_start}contribute to the built-in templates%{link_end}"
+msgstr ""
+
+msgid "Learn how to %{no_packages_link_start}publish and share your packages%{no_packages_link_end} with GitLab."
+msgstr ""
+
+msgid "Learn more"
+msgstr ""
+
+msgid "Learn more about Auto DevOps"
+msgstr ""
+
+msgid "Learn more about Kubernetes"
+msgstr ""
+
+msgid "Learn more about Web Terminal"
+msgstr ""
+
+msgid "Learn more about adding certificates to your project by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
+msgstr ""
+
+msgid "Learn more about approvals."
+msgstr ""
+
+msgid "Learn more about custom project templates"
+msgstr ""
+
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
+msgid "Learn more about group-level project templates"
+msgstr ""
+
+msgid "Learn more about signing commits"
+msgstr ""
+
+msgid "Learn more about the dependency list"
+msgstr ""
+
+msgid "Learn more about vulnerability check"
+msgstr ""
+
+msgid "Learn more in the"
+msgstr ""
+
+msgid "Learn more in the|pipeline schedules documentation"
+msgstr ""
+
+msgid "Leave"
+msgstr ""
+
+msgid "Leave edit mode? All unsaved changes will be lost."
+msgstr ""
+
+msgid "Leave group"
+msgstr ""
+
+msgid "Leave project"
+msgstr ""
+
+msgid "Leave the \"File type\" and \"Delivery method\" options on their default values."
+msgstr ""
+
+msgid "Let's Encrypt does not accept emails on example.com"
+msgstr ""
+
+msgid "Let's Encrypt is a free, automated, and open certificate authority (CA) that gives digital certificates in order to enable HTTPS (SSL/TLS) for websites. Learn more about Let's Encrypt configuration by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
+msgstr ""
+
+msgid "License"
+msgstr ""
+
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
+msgstr ""
+
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Approve"
+msgstr ""
+
+msgid "LicenseCompliance|Approve license"
+msgstr ""
+
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
+
+msgid "LicenseCompliance|Approved"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
+
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
+
+msgid "LicenseCompliance|License details"
+msgstr ""
+
+msgid "LicenseCompliance|License name"
+msgstr ""
+
+msgid "LicenseCompliance|Packages"
+msgstr ""
+
+msgid "LicenseCompliance|Remove license"
+msgstr ""
+
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
+
+msgid "LicenseCompliance|Submit"
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
+
+msgid "Licensed Features"
+msgstr ""
+
+msgid "Licensed to"
+msgstr ""
+
+msgid "Licenses"
+msgstr ""
+
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
+msgid "Limit namespaces and projects that can be indexed"
+msgstr ""
+
+msgid "Limited to showing %d event at most"
+msgid_plural "Limited to showing %d events at most"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Link copied to clipboard"
+msgstr ""
+
+msgid "Linked emails (%{email_count})"
+msgstr ""
+
+msgid "LinkedIn"
+msgstr ""
+
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
+msgid "List"
+msgstr ""
+
+msgid "List Your Gitea Repositories"
+msgstr ""
+
+msgid "List available repositories"
+msgstr ""
+
+msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
+msgstr ""
+
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
+msgid "List view"
+msgstr ""
+
+msgid "List your Bitbucket Server repositories"
+msgstr ""
+
+msgid "Live preview"
+msgstr ""
+
+msgid "Loading contribution stats for group members"
+msgstr ""
+
+msgid "Loading functions timed out. Please reload the page to try again."
+msgstr ""
+
+msgid "Loading issues"
+msgstr ""
+
+msgid "Loading the GitLab IDE..."
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "Loading…"
+msgstr ""
+
+msgid "Localization"
+msgstr ""
+
+msgid "Lock"
+msgstr ""
+
+msgid "Lock %{issuableDisplayName}"
+msgstr ""
+
+msgid "Lock memberships to LDAP synchronization"
+msgstr ""
+
+msgid "Lock not found"
+msgstr ""
+
+msgid "Lock the discussion"
+msgstr ""
+
+msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment."
+msgstr ""
+
+msgid "Lock to current projects"
+msgstr ""
+
+msgid "Locked"
+msgstr ""
+
+msgid "Locked Files"
+msgstr ""
+
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
+msgid "Locked to current projects"
+msgstr ""
+
+msgid "Locks give the ability to lock specific file or folder."
+msgstr ""
+
+msgid "Locks the discussion."
+msgstr ""
+
+msgid "Login with smartcard"
+msgstr ""
+
+msgid "Logo was successfully removed."
+msgstr ""
+
+msgid "Logs"
+msgstr ""
+
+msgid "MERGED"
+msgstr ""
+
+msgid "MRApprovals|Approved by"
+msgstr ""
+
+msgid "MRApprovals|Approvers"
+msgstr ""
+
+msgid "MRApprovals|Pending approvals"
+msgstr ""
+
+msgid "MRDiff|Show changes only"
+msgstr ""
+
+msgid "MRDiff|Show full file"
+msgstr ""
+
+msgid "Made this issue confidential."
+msgstr ""
+
+msgid "Make and review changes in the browser with the Web IDE"
+msgstr ""
+
+msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
+msgstr ""
+
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
+msgstr ""
+
+msgid "Make sure you're logged into the account that owns the projects you'd like to import."
+msgstr ""
+
+msgid "Makes this issue confidential."
+msgstr ""
+
+msgid "Manage"
+msgstr ""
+
+msgid "Manage Git repositories with fine-grained access controls that keep your code secure. Perform code reviews and enhance collaboration with merge requests. Each project can also have an issue tracker and a wiki."
+msgstr ""
+
+msgid "Manage Web IDE features"
+msgstr ""
+
+msgid "Manage access"
+msgstr ""
+
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage applications that can use GitLab as an OAuth provider, and applications that you've authorized to use your account."
+msgstr ""
+
+msgid "Manage applications that you've authorized to use your account."
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
+msgid "Manage labels"
+msgstr ""
+
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage two-factor authentication"
+msgstr ""
+
+msgid "Manifest"
+msgstr ""
+
+msgid "Manifest file import"
+msgstr ""
+
+msgid "Manual job"
+msgstr ""
+
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
+msgid "Map a FogBugz account ID to a GitLab user"
+msgstr ""
+
+msgid "Map a Google Code user to a GitLab user"
+msgstr ""
+
+msgid "Map a Google Code user to a full email address"
+msgstr ""
+
+msgid "Map a Google Code user to a full name"
+msgstr ""
+
+msgid "Mar"
+msgstr ""
+
+msgid "March"
+msgstr ""
+
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
+msgid "Mark as resolved"
+msgstr ""
+
+msgid "Mark comment as resolved"
+msgstr ""
+
+msgid "Mark this issue as a duplicate of another issue"
+msgstr ""
+
+msgid "Mark this issue as related to another issue"
+msgstr ""
+
+msgid "Markdown"
+msgstr ""
+
+msgid "Markdown Help"
+msgstr ""
+
+msgid "Markdown enabled"
+msgstr ""
+
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marks this issue as a duplicate of %{duplicate_reference}."
+msgstr ""
+
+msgid "Marks this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Match not found; try refining your search query."
+msgstr ""
+
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
+msgid "Maven Metadata"
+msgstr ""
+
+msgid "Max access level"
+msgstr ""
+
+msgid "Max seats used"
+msgstr ""
+
+msgid "Maximum artifacts size (MB)"
+msgstr ""
+
+msgid "Maximum attachment size (MB)"
+msgstr ""
+
+msgid "Maximum capacity"
+msgstr ""
+
+msgid "Maximum delay (Minutes)"
+msgstr ""
+
+msgid "Maximum job timeout"
+msgstr ""
+
+msgid "Maximum job timeout has a value which could not be accepted"
+msgstr ""
+
+msgid "Maximum number of mirrors that can be synchronizing at the same time."
+msgstr ""
+
+msgid "Maximum push size (MB)"
+msgstr ""
+
+msgid "Maximum time between updates that a mirror can have when scheduled to synchronize."
+msgstr ""
+
+msgid "May"
+msgstr ""
+
+msgid "Median"
+msgstr ""
+
+msgid "Member lock"
+msgstr ""
+
+msgid "Member since %{date}"
+msgstr ""
+
+msgid "Members"
+msgstr ""
+
+msgid "Members can be added by project <i>Maintainers</i> or <i>Owners</i>"
+msgstr ""
+
+msgid "Members of <strong>%{project_name}</strong>"
+msgstr ""
+
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Merge"
+msgstr ""
+
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
+msgid "Merge Request"
+msgstr ""
+
+msgid "Merge Request Approvals"
+msgstr ""
+
+msgid "Merge Requests"
+msgstr ""
+
+msgid "Merge Requests created"
+msgstr ""
+
+msgid "Merge commit message"
+msgstr ""
+
+msgid "Merge events"
+msgstr ""
+
+msgid "Merge immediately"
+msgstr ""
+
+msgid "Merge in progress"
+msgstr ""
+
+msgid "Merge request"
+msgstr ""
+
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
+msgid "Merge request approvals"
+msgstr ""
+
+msgid "Merge request approvals allow you to set the number of necessary approvals and predefine a list of approvers that will need to approve every merge request in a project."
+msgstr ""
+
+msgid "Merge requests"
+msgstr ""
+
+msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
+msgstr ""
+
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
+msgid "Merge when pipeline succeeds"
+msgstr ""
+
+msgid "MergeConflict|Commit to source branch"
+msgstr ""
+
+msgid "MergeConflict|Committing..."
+msgstr ""
+
+msgid "MergeConflict|HEAD//our changes"
+msgstr ""
+
+msgid "MergeConflict|Use ours"
+msgstr ""
+
+msgid "MergeConflict|Use theirs"
+msgstr ""
+
+msgid "MergeConflict|conflict"
+msgstr ""
+
+msgid "MergeConflict|conflicts"
+msgstr ""
+
+msgid "MergeConflict|origin//their changes"
+msgstr ""
+
+msgid "MergeRequests|Add a reply"
+msgstr ""
+
+msgid "MergeRequests|An error occurred while saving the draft comment."
+msgstr ""
+
+msgid "MergeRequests|Failed to squash. Should be done manually."
+msgstr ""
+
+msgid "MergeRequests|Jump to next unresolved discussion"
+msgstr ""
+
+msgid "MergeRequests|Reply..."
+msgstr ""
+
+msgid "MergeRequests|Resolve this thread in a new issue"
+msgstr ""
+
+msgid "MergeRequests|Saving the comment failed"
+msgstr ""
+
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgstr ""
+
+msgid "MergeRequests|Thread stays resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr ""
+
+msgid "MergeRequests|Toggle comments for this file"
+msgstr ""
+
+msgid "MergeRequests|View file @ %{commitId}"
+msgstr ""
+
+msgid "MergeRequests|View replaced file @ %{commitId}"
+msgstr ""
+
+msgid "MergeRequests|commented on commit %{commitLink}"
+msgstr ""
+
+msgid "MergeRequests|started a thread"
+msgstr ""
+
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
+msgstr ""
+
+msgid "MergeRequest|Error dismissing suggestion popover. Please try again."
+msgstr ""
+
+msgid "MergeRequest|Error loading full diff. Please try again."
+msgstr ""
+
+msgid "MergeRequest|Filter files or search with %{modifier_key}+p"
+msgstr ""
+
+msgid "MergeRequest|No files found"
+msgstr ""
+
+msgid "Merged"
+msgstr ""
+
+msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
+msgstr ""
+
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
+msgid "Messages"
+msgstr ""
+
+msgid "Method"
+msgstr ""
+
+msgid "Metric was successfully added."
+msgstr ""
+
+msgid "Metric was successfully updated."
+msgstr ""
+
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
+msgid "Metrics"
+msgstr ""
+
+msgid "Metrics - Grafana"
+msgstr ""
+
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics Dashboard"
+msgstr ""
+
+msgid "Metrics and profiling"
+msgstr ""
+
+msgid "Metrics for environment"
+msgstr ""
+
+msgid "Metrics|Add metric"
+msgstr ""
+
+msgid "Metrics|Check out the CI/CD documentation on deploying to an environment"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Delete metric"
+msgstr ""
+
+msgid "Metrics|Delete metric?"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|Environment"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the y-axis (usually the unit). The x-axis always represents time."
+msgstr ""
+
+msgid "Metrics|Learn about environments"
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|No deployed environments"
+msgstr ""
+
+msgid "Metrics|PromQL query is valid"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Show last"
+msgstr ""
+
+msgid "Metrics|There was an error fetching the environments data, please try again"
+msgstr ""
+
+msgid "Metrics|There was an error getting deployment information."
+msgstr ""
+
+msgid "Metrics|There was an error getting environments information."
+msgstr ""
+
+msgid "Metrics|There was an error trying to validate your query"
+msgstr ""
+
+msgid "Metrics|There was an error while retrieving metrics"
+msgstr ""
+
+msgid "Metrics|Unexpected deployment data response from prometheus endpoint"
+msgstr ""
+
+msgid "Metrics|Unexpected metrics data response from prometheus endpoint"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|You're about to permanently delete this metric. This cannot be undone."
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
+msgid "Migrated %{success_count}/%{total_count} files."
+msgstr ""
+
+msgid "Migration successful."
+msgstr ""
+
+msgid "Milestone"
+msgstr ""
+
+msgid "Milestone lists not available with your current license"
+msgstr ""
+
+msgid "Milestone lists show all issues from the selected milestone."
+msgstr ""
+
+msgid "Milestones"
+msgstr ""
+
+msgid "Milestones| You’re about to permanently delete the milestone %{milestoneTitle} and remove it from %{issuesWithCount} and %{mergeRequestsWithCount}. Once deleted, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Milestones| You’re about to permanently delete the milestone %{milestoneTitle}. This milestone is not currently used in any issues or merge requests."
+msgstr ""
+
+msgid "Milestones|Delete milestone"
+msgstr ""
+
+msgid "Milestones|Delete milestone %{milestoneTitle}?"
+msgstr ""
+
+msgid "Milestones|Failed to delete milestone %{milestoneTitle}"
+msgstr ""
+
+msgid "Milestones|Milestone %{milestoneTitle} was not found"
+msgstr ""
+
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|Promoting %{milestoneTitle} will make it available for all projects inside %{groupName}. Existing project milestones with the same title will be merged."
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
+msgid "Minimum capacity to be available before we schedule more mirrors preemptively."
+msgstr ""
+
+msgid "Minimum length is %{minimum_password_length} characters"
+msgstr ""
+
+msgid "Minimum length is %{minimum_password_length} characters."
+msgstr ""
+
+msgid "Minutes"
+msgstr ""
+
+msgid "Mirror direction"
+msgstr ""
+
+msgid "Mirror repository"
+msgstr ""
+
+msgid "Mirror user"
+msgstr ""
+
+msgid "Mirrored repositories"
+msgstr ""
+
+msgid "Mirroring repositories"
+msgstr ""
+
+msgid "Mirroring settings were successfully updated."
+msgstr ""
+
+msgid "Mirroring settings were successfully updated. The project is being updated."
+msgstr ""
+
+msgid "Mirroring was successfully disabled."
+msgstr ""
+
+msgid "Mirroring will only be available if the feature is included in the plan of the selected group or user."
+msgstr ""
+
+msgid "Missing commit signatures endpoint!"
+msgstr ""
+
+msgid "MissingSSHKeyWarningLink|add an SSH key"
+msgstr ""
+
+msgid "Modal|Cancel"
+msgstr ""
+
+msgid "Modal|Close"
+msgstr ""
+
+msgid "Modified in this version"
+msgstr ""
+
+msgid "Modify commit message"
+msgstr ""
+
+msgid "Modify commit messages"
+msgstr ""
+
+msgid "Modify merge commit"
+msgstr ""
+
+msgid "Monday"
+msgstr ""
+
+msgid "Monitor your errors by integrating with Sentry."
+msgstr ""
+
+msgid "Monitoring"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "More"
+msgstr ""
+
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
+msgid "More actions"
+msgstr ""
+
+msgid "More info"
+msgstr ""
+
+msgid "More information"
+msgstr ""
+
+msgid "More information is available|here"
+msgstr ""
+
+msgid "More than %{number_commits_distance} commits different with %{default_branch}"
+msgstr ""
+
+msgid "Most stars"
+msgstr ""
+
+msgid "Mount point %{mounted_as} not found in %{model_class}."
+msgstr ""
+
+msgid "Move"
+msgstr ""
+
+msgid "Move issue"
+msgstr ""
+
+msgid "Move issue from one column of the board to another"
+msgstr ""
+
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
+msgid "Move this issue to another project."
+msgstr ""
+
+msgid "MoveIssue|Cannot move issue due to insufficient permissions!"
+msgstr ""
+
+msgid "MoveIssue|Cannot move issue to project it originates from!"
+msgstr ""
+
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
+msgid "Moves issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moves this issue to %{path_to_project}."
+msgstr ""
+
+msgid "Multiple issue boards"
+msgstr ""
+
+msgid "Multiple model types found: %{model_types}"
+msgstr ""
+
+msgid "Multiple uploaders found: %{uploader_types}"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Name has already been taken"
+msgstr ""
+
+msgid "Name new label"
+msgstr ""
+
+msgid "Name your individual key via a title"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Namespaces to index"
+msgstr ""
+
+msgid "Naming, topics, avatar"
+msgstr ""
+
+msgid "Naming, visibility"
+msgstr ""
+
+msgid "Nav|Help"
+msgstr ""
+
+msgid "Nav|Home"
+msgstr ""
+
+msgid "Nav|Sign In / Register"
+msgstr ""
+
+msgid "Nav|Sign out and sign in with a different account"
+msgstr ""
+
+msgid "Need help?"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Never"
+msgstr ""
+
+msgid "New"
+msgstr ""
+
+msgid "New Application"
+msgstr ""
+
+msgid "New Environment"
+msgstr ""
+
+msgid "New Group"
+msgstr ""
+
+msgid "New Identity"
+msgstr ""
+
+msgid "New Issue"
+msgid_plural "New Issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "New Label"
+msgstr ""
+
+msgid "New Milestone"
+msgstr ""
+
+msgid "New Pages Domain"
+msgstr ""
+
+msgid "New Password"
+msgstr ""
+
+msgid "New Pipeline Schedule"
+msgstr ""
+
+msgid "New Project"
+msgstr ""
+
+msgid "New Snippet"
+msgstr ""
+
+msgid "New branch"
+msgstr ""
+
+msgid "New branch unavailable"
+msgstr ""
+
+msgid "New deploy key"
+msgstr ""
+
+msgid "New directory"
+msgstr ""
+
+msgid "New environment"
+msgstr ""
+
+msgid "New epic"
+msgstr ""
+
+msgid "New epic title"
+msgstr ""
+
+msgid "New file"
+msgstr ""
+
+msgid "New group"
+msgstr ""
+
+msgid "New health check access token has been generated!"
+msgstr ""
+
+msgid "New identity"
+msgstr ""
+
+msgid "New issue"
+msgstr ""
+
+msgid "New label"
+msgstr ""
+
+msgid "New merge request"
+msgstr ""
+
+msgid "New milestone"
+msgstr ""
+
+msgid "New password"
+msgstr ""
+
+msgid "New pipelines will cancel older, pending pipelines on the same branch"
+msgstr ""
+
+msgid "New project"
+msgstr ""
+
+msgid "New runners registration token has been generated!"
+msgstr ""
+
+msgid "New schedule"
+msgstr ""
+
+msgid "New snippet"
+msgstr ""
+
+msgid "New subgroup"
+msgstr ""
+
+msgid "New tag"
+msgstr ""
+
+msgid "New users set to external"
+msgstr ""
+
+msgid "New! Suggest changes directly"
+msgstr ""
+
+msgid "New..."
+msgstr ""
+
+msgid "Newly registered users will by default be external"
+msgstr ""
+
+msgid "Next"
+msgstr ""
+
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
+msgid "Nickname"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
+msgstr ""
+
+msgid "No Label"
+msgstr ""
+
+msgid "No Milestone"
+msgstr ""
+
+msgid "No Tag"
+msgstr ""
+
+msgid "No active admin user found"
+msgstr ""
+
+msgid "No activities found"
+msgstr ""
+
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
+msgstr ""
+
+msgid "No branches found"
+msgstr ""
+
+msgid "No changes"
+msgstr ""
+
+msgid "No changes between %{ref_start}%{source_branch}%{ref_end} and %{ref_start}%{target_branch}%{ref_end}"
+msgstr ""
+
+msgid "No connection could be made to a Gitaly Server, please check your logs!"
+msgstr ""
+
+msgid "No contributions"
+msgstr ""
+
+msgid "No contributions were found"
+msgstr ""
+
+msgid "No credit card required."
+msgstr ""
+
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
+msgid "No details available"
+msgstr ""
+
+msgid "No due date"
+msgstr ""
+
+msgid "No errors to display."
+msgstr ""
+
+msgid "No estimate or time spent"
+msgstr ""
+
+msgid "No file chosen"
+msgstr ""
+
+msgid "No file selected"
+msgstr ""
+
+msgid "No files"
+msgstr ""
+
+msgid "No files found."
+msgstr ""
+
+msgid "No forks available to you."
+msgstr ""
+
+msgid "No issues for the selected time period."
+msgstr ""
+
+msgid "No job trace"
+msgstr ""
+
+msgid "No jobs to show"
+msgstr ""
+
+msgid "No labels with such name or description"
+msgstr ""
+
+msgid "No license. All rights reserved"
+msgstr ""
+
+msgid "No licenses found."
+msgstr ""
+
+msgid "No matching results"
+msgstr ""
+
+msgid "No merge requests for the selected time period."
+msgstr ""
+
+msgid "No merge requests found"
+msgstr ""
+
+msgid "No messages were logged"
+msgstr ""
+
+msgid "No milestones to show"
+msgstr ""
+
+msgid "No other labels with such name or description"
+msgstr ""
+
+msgid "No parent group"
+msgstr ""
+
+msgid "No preview for this file type"
+msgstr ""
+
+msgid "No prioritised labels with such name or description"
+msgstr ""
+
+msgid "No public groups"
+msgstr ""
+
+msgid "No pushes for the selected time period."
+msgstr ""
+
+msgid "No repository"
+msgstr ""
+
+msgid "No required pipeline"
+msgstr ""
+
+msgid "No runners found"
+msgstr ""
+
+msgid "No schedules"
+msgstr ""
+
+msgid "No starrers matched your search"
+msgstr ""
+
+msgid "No start date"
+msgstr ""
+
+msgid "No template"
+msgstr ""
+
+msgid "No value set by top-level parent group."
+msgstr ""
+
+msgid "No, directly import the existing email addresses and usernames."
+msgstr ""
+
+msgid "No, not interested right now"
+msgstr ""
+
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
+msgid "Node was successfully created."
+msgstr ""
+
+msgid "Node was successfully updated."
+msgstr ""
+
+msgid "Nodes"
+msgstr ""
+
+msgid "None"
+msgstr ""
+
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
+msgid "Not available"
+msgstr ""
+
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
+msgid "Not confidential"
+msgstr ""
+
+msgid "Not enough data"
+msgstr ""
+
+msgid "Not found."
+msgstr ""
+
+msgid "Not helpful"
+msgstr ""
+
+msgid "Not now"
+msgstr ""
+
+msgid "Not ready yet. Try again later."
+msgstr ""
+
+msgid "Not started"
+msgstr ""
+
+msgid "Note"
+msgstr ""
+
+msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
+msgid "NoteForm|Note"
+msgstr ""
+
+msgid "Notes|Are you sure you want to cancel creating this comment?"
+msgstr ""
+
+msgid "Notes|Collapse replies"
+msgstr ""
+
+msgid "Notes|Show all activity"
+msgstr ""
+
+msgid "Notes|Show comments only"
+msgstr ""
+
+msgid "Notes|Show history only"
+msgstr ""
+
+msgid "Notes|This comment has changed since you started editing, please review the %{open_link}updated comment%{close_link} to ensure information is not lost"
+msgstr ""
+
+msgid "Nothing to preview."
+msgstr ""
+
+msgid "Notification events"
+msgstr ""
+
+msgid "Notification setting"
+msgstr ""
+
+msgid "Notification setting - %{notification_title}"
+msgstr ""
+
+msgid "Notification settings saved"
+msgstr ""
+
+msgid "NotificationEvent|Close issue"
+msgstr ""
+
+msgid "NotificationEvent|Close merge request"
+msgstr ""
+
+msgid "NotificationEvent|Failed pipeline"
+msgstr ""
+
+msgid "NotificationEvent|Merge merge request"
+msgstr ""
+
+msgid "NotificationEvent|New epic"
+msgstr ""
+
+msgid "NotificationEvent|New issue"
+msgstr ""
+
+msgid "NotificationEvent|New merge request"
+msgstr ""
+
+msgid "NotificationEvent|New note"
+msgstr ""
+
+msgid "NotificationEvent|Reassign issue"
+msgstr ""
+
+msgid "NotificationEvent|Reassign merge request"
+msgstr ""
+
+msgid "NotificationEvent|Reopen issue"
+msgstr ""
+
+msgid "NotificationEvent|Successful pipeline"
+msgstr ""
+
+msgid "NotificationLevel|Custom"
+msgstr ""
+
+msgid "NotificationLevel|Disabled"
+msgstr ""
+
+msgid "NotificationLevel|Global"
+msgstr ""
+
+msgid "NotificationLevel|On mention"
+msgstr ""
+
+msgid "NotificationLevel|Participate"
+msgstr ""
+
+msgid "NotificationLevel|Watch"
+msgstr ""
+
+msgid "NotificationSetting|Custom"
+msgstr ""
+
+msgid "Notifications"
+msgstr ""
+
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
+msgid "Notifications off"
+msgstr ""
+
+msgid "Notifications on"
+msgstr ""
+
+msgid "Nov"
+msgstr ""
+
+msgid "November"
+msgstr ""
+
+msgid "Number of Elasticsearch replicas"
+msgstr ""
+
+msgid "Number of Elasticsearch shards"
+msgstr ""
+
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
+msgid "OK"
+msgstr ""
+
+msgid "Object Storage replication"
+msgstr ""
+
+msgid "Object does not exist on the server or you don't have permissions to access it"
+msgstr ""
+
+msgid "Oct"
+msgstr ""
+
+msgid "October"
+msgstr ""
+
+msgid "OfSearchInADropdown|Filter"
+msgstr ""
+
+msgid "Ok let's go"
+msgstr ""
+
+msgid "OmniAuth"
+msgstr ""
+
+msgid "Onboarding"
+msgstr ""
+
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{link_start}here%{link_end}."
+msgstr ""
+
+msgid "Once removed, the fork relationship cannot be restored and you will no longer be able to send merge requests to the source."
+msgstr ""
+
+msgid "Once the exported file is ready, you will receive a notification email with a download link, or you can download it from this page."
+msgstr ""
+
+msgid "One more item"
+msgid_plural "%d more items"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "One or more groups that you don't have access to."
+msgstr ""
+
+msgid "One or more of your Bitbucket projects cannot be imported into GitLab directly because they use Subversion or Mercurial for version control, rather than Git."
+msgstr ""
+
+msgid "One or more of your Google Code projects cannot be imported into GitLab directly because they use Subversion or Mercurial for version control, rather than Git."
+msgstr ""
+
+msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
+msgstr ""
+
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
+msgid "Only admins"
+msgstr ""
+
+msgid "Only admins can delete project"
+msgstr ""
+
+msgid "Only mirror protected branches"
+msgstr ""
+
+msgid "Only policy:"
+msgstr ""
+
+msgid "Only proceed if you trust %{idp_url} to control your GitLab account sign in."
+msgstr ""
+
+msgid "Only project members can comment."
+msgstr ""
+
+msgid "Only project members will be imported. Group members will be skipped."
+msgstr ""
+
+msgid "Only these extensions are supported: %{extension_list}"
+msgstr ""
+
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
+msgid "Oops, are you sure?"
+msgstr ""
+
+msgid "Open"
+msgstr ""
+
+msgid "Open Documentation"
+msgstr ""
+
+msgid "Open Selection"
+msgstr ""
+
+msgid "Open comment type dropdown"
+msgstr ""
+
+msgid "Open errors"
+msgstr ""
+
+msgid "Open in Xcode"
+msgstr ""
+
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
+msgid "Open projects"
+msgstr ""
+
+msgid "Open raw"
+msgstr ""
+
+msgid "Open sidebar"
+msgstr ""
+
+msgid "Open source software to collaborate on code"
+msgstr ""
+
+msgid "Opened"
+msgstr ""
+
+msgid "Opened MR"
+msgstr ""
+
+msgid "Opened issues"
+msgstr ""
+
+msgid "OpenedNDaysAgo|Opened"
+msgstr ""
+
+msgid "Opens in a new window"
+msgstr ""
+
+msgid "Operation failed. Check pod logs for %{pod_name} for more details."
+msgstr ""
+
+msgid "Operation timed out. Check pod logs for %{pod_name} for more details."
+msgstr ""
+
+msgid "Operations"
+msgstr ""
+
+msgid "Operations Dashboard"
+msgstr ""
+
+msgid "Operations Settings"
+msgstr ""
+
+msgid "OperationsDashboard|Add a project to the dashboard"
+msgstr ""
+
+msgid "OperationsDashboard|Add projects"
+msgstr ""
+
+msgid "OperationsDashboard|More information"
+msgstr ""
+
+msgid "OperationsDashboard|Operations Dashboard"
+msgstr ""
+
+msgid "OperationsDashboard|The operations dashboard provides a summary of each project's operational health, including pipeline and alert statuses."
+msgstr ""
+
+msgid "Optional"
+msgstr ""
+
+msgid "Optionally, you can %{link_to_customize} how FogBugz email addresses and usernames are imported into GitLab."
+msgstr ""
+
+msgid "Optionally, you can %{link_to_customize} how Google Code email addresses and usernames are imported into GitLab."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Or you can choose one of the suggested colors below"
+msgstr ""
+
+msgid "Other Labels"
+msgstr ""
+
+msgid "Other information"
+msgstr ""
+
+msgid "Other merge requests block this MR"
+msgstr ""
+
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
+msgid "Outbound requests"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Overwrite diverged branches"
+msgstr ""
+
+msgid "Owned by anyone"
+msgstr ""
+
+msgid "Owned by me"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Package information"
+msgstr ""
+
+msgid "Package was removed"
+msgstr ""
+
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
+msgid "Packages"
+msgstr ""
+
+msgid "Page not found"
+msgstr ""
+
+msgid "Page was successfully deleted"
+msgstr ""
+
+msgid "Pages"
+msgstr ""
+
+msgid "Pages Domain"
+msgstr ""
+
+msgid "Pages Domains"
+msgstr ""
+
+msgid "Pages getting started guide"
+msgstr ""
+
+msgid "Pagination|Go to first page"
+msgstr ""
+
+msgid "Pagination|Go to last page"
+msgstr ""
+
+msgid "Pagination|Go to next page"
+msgstr ""
+
+msgid "Pagination|Go to previous page"
+msgstr ""
+
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next ›"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
+msgid "Pagination|‹ Prev"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+msgid "Part of merge request changes"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Password (optional)"
+msgstr ""
+
+msgid "Password authentication is unavailable."
+msgstr ""
+
+msgid "Password confirmation"
+msgstr ""
+
+msgid "Password successfully changed"
+msgstr ""
+
+msgid "Password was successfully updated. Please login with it"
+msgstr ""
+
+msgid "Past due"
+msgstr ""
+
+msgid "Paste a machine public key here. Read more about how to generate it %{link_start}here%{link_end}"
+msgstr ""
+
+msgid "Paste epic link"
+msgstr ""
+
+msgid "Paste issue link"
+msgstr ""
+
+msgid "Paste your public SSH key, which is usually contained in the file '~/.ssh/id_ed25519.pub' or '~/.ssh/id_rsa.pub' and begins with 'ssh-ed25519' or 'ssh-rsa'. Don't use your private SSH key."
+msgstr ""
+
+msgid "Path"
+msgstr ""
+
+msgid "Path, transfer, remove"
+msgstr ""
+
+msgid "Path:"
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pause replication"
+msgstr ""
+
+msgid "Paused Runners don't accept new jobs"
+msgstr ""
+
+msgid "Pending"
+msgstr ""
+
+msgid "People without permission will never get a notification and won't be able to comment."
+msgstr ""
+
+msgid "People without permission will never get a notification."
+msgstr ""
+
+msgid "Perform advanced options such as changing path, transferring, or removing the group."
+msgstr ""
+
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
+msgid "Permissions"
+msgstr ""
+
+msgid "Permissions Help"
+msgstr ""
+
+msgid "Permissions, LFS, 2FA"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
+msgid "Personal project creation is not allowed. Please contact your administrator with questions"
+msgstr ""
+
+msgid "Phabricator Server Import"
+msgstr ""
+
+msgid "Phabricator Server URL"
+msgstr ""
+
+msgid "Phabricator Tasks"
+msgstr ""
+
+msgid "Pick a name"
+msgstr ""
+
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
+msgid "Pin code"
+msgstr ""
+
+msgid "Pipeline"
+msgstr ""
+
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
+msgid "Pipeline Schedule"
+msgstr ""
+
+msgid "Pipeline Schedules"
+msgstr ""
+
+msgid "Pipeline minutes quota"
+msgstr ""
+
+msgid "Pipeline quota"
+msgstr ""
+
+msgid "Pipeline triggers"
+msgstr ""
+
+msgid "Pipeline: %{status}"
+msgstr ""
+
+msgid "PipelineCharts|Failed:"
+msgstr ""
+
+msgid "PipelineCharts|Overall statistics"
+msgstr ""
+
+msgid "PipelineCharts|Success ratio:"
+msgstr ""
+
+msgid "PipelineCharts|Successful:"
+msgstr ""
+
+msgid "PipelineCharts|Total:"
+msgstr ""
+
+msgid "PipelineSchedules|Activated"
+msgstr ""
+
+msgid "PipelineSchedules|Active"
+msgstr ""
+
+msgid "PipelineSchedules|All"
+msgstr ""
+
+msgid "PipelineSchedules|Inactive"
+msgstr ""
+
+msgid "PipelineSchedules|Next Run"
+msgstr ""
+
+msgid "PipelineSchedules|None"
+msgstr ""
+
+msgid "PipelineSchedules|Provide a short description for this pipeline"
+msgstr ""
+
+msgid "PipelineSchedules|Take ownership"
+msgstr ""
+
+msgid "PipelineSchedules|Target"
+msgstr ""
+
+msgid "PipelineSchedules|Variables"
+msgstr ""
+
+msgid "PipelineSheduleIntervalPattern|Custom"
+msgstr ""
+
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
+msgstr ""
+
+msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
+msgstr ""
+
+msgid "Pipelines"
+msgstr ""
+
+msgid "Pipelines charts"
+msgstr ""
+
+msgid "Pipelines emails"
+msgstr ""
+
+msgid "Pipelines for last month"
+msgstr ""
+
+msgid "Pipelines for last week"
+msgstr ""
+
+msgid "Pipelines for last year"
+msgstr ""
+
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
+msgid "Pipelines settings for '%{project_name}' were successfully updated."
+msgstr ""
+
+msgid "Pipelines| to purchase more minutes."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
+msgid "Pipelines|API"
+msgstr ""
+
+msgid "Pipelines|Build with confidence"
+msgstr ""
+
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
+msgid "Pipelines|Continuous Integration can help catch bugs by running your tests automatically, while Continuous Deployment can help you deliver code to your product environment."
+msgstr ""
+
+msgid "Pipelines|Get started with Pipelines"
+msgstr ""
+
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Pipelines will not run anymore on shared Runners."
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|There was an error fetching the pipelines. Try again in a few moments or contact your support team."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
+msgid "Pipeline|Commit"
+msgstr ""
+
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
+msgid "Pipeline|Coverage"
+msgstr ""
+
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
+msgid "Pipeline|Duration"
+msgstr ""
+
+msgid "Pipeline|Existing branch name or tag"
+msgstr ""
+
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
+msgid "Pipeline|Pipeline"
+msgstr ""
+
+msgid "Pipeline|Run Pipeline"
+msgstr ""
+
+msgid "Pipeline|Run for"
+msgstr ""
+
+msgid "Pipeline|Search branches"
+msgstr ""
+
+msgid "Pipeline|Specify variable values to be used in this run. The values specified in %{settings_link} will be used by default."
+msgstr ""
+
+msgid "Pipeline|Stages"
+msgstr ""
+
+msgid "Pipeline|Status"
+msgstr ""
+
+msgid "Pipeline|Stop pipeline"
+msgstr ""
+
+msgid "Pipeline|Stop pipeline #%{pipelineId}?"
+msgstr ""
+
+msgid "Pipeline|Triggerer"
+msgstr ""
+
+msgid "Pipeline|Value"
+msgstr ""
+
+msgid "Pipeline|Variables"
+msgstr ""
+
+msgid "Pipeline|You’re about to stop pipeline %{pipelineId}."
+msgstr ""
+
+msgid "Pipeline|all"
+msgstr ""
+
+msgid "Pipeline|for"
+msgstr ""
+
+msgid "Pipeline|on"
+msgstr ""
+
+msgid "Pipeline|success"
+msgstr ""
+
+msgid "Pipeline|with stage"
+msgstr ""
+
+msgid "Pipeline|with stages"
+msgstr ""
+
+msgid "PivotalTrackerService|Comma-separated list of branches which will be automatically inspected. Leave blank to include all branches."
+msgstr ""
+
+msgid "PivotalTrackerService|Pivotal Tracker API token."
+msgstr ""
+
+msgid "PivotalTrackerService|Project Management Software (Source Commits Endpoint)"
+msgstr ""
+
+msgid "Plain diff"
+msgstr ""
+
+msgid "PlantUML"
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Play all manual"
+msgstr ""
+
+msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
+msgstr ""
+
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
+msgid "Please accept the Terms of Service before continuing."
+msgstr ""
+
+msgid "Please add a comment in the text area above"
+msgstr ""
+
+msgid "Please add a list to your board first"
+msgstr ""
+
+msgid "Please check the configuration file for this chart"
+msgstr ""
+
+msgid "Please check the configuration file to ensure that a collection of charts has been declared."
+msgstr ""
+
+msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
+msgstr ""
+
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
+msgid "Please choose a group URL with no special characters."
+msgstr ""
+
+msgid "Please complete your profile with email address"
+msgstr ""
+
+msgid "Please convert them to %{link_to_git}, and go through the %{link_to_import_flow} again."
+msgstr ""
+
+msgid "Please convert them to Git on Google Code, and go through the %{link_to_import_flow} again."
+msgstr ""
+
+msgid "Please create a password for your new account."
+msgstr ""
+
+msgid "Please create a username with only alphanumeric characters."
+msgstr ""
+
+msgid "Please enable and migrate to hashed storage to avoid security issues and ensure data integrity. %{migrate_link}"
+msgstr ""
+
+msgid "Please enter a non-negative number"
+msgstr ""
+
+msgid "Please enter a number greater than %{number} (from the project settings)"
+msgstr ""
+
+msgid "Please enter a valid number"
+msgstr ""
+
+msgid "Please enter or upload a license."
+msgstr ""
+
+msgid "Please fill in a descriptive name for your group."
+msgstr ""
+
+msgid "Please migrate all existing projects to hashed storage to avoid security issues and ensure data integrity. %{migrate_link}"
+msgstr ""
+
+msgid "Please note that this application is not provided by GitLab and you should verify its authenticity before allowing access."
+msgstr ""
+
+msgid "Please provide a name"
+msgstr ""
+
+msgid "Please provide a valid email address."
+msgstr ""
+
+msgid "Please retype the email address."
+msgstr ""
+
+msgid "Please select a file"
+msgstr ""
+
+msgid "Please select a group."
+msgstr ""
+
+msgid "Please select and add a member"
+msgstr ""
+
+msgid "Please select at least one filter to see results"
+msgstr ""
+
+msgid "Please set a new password before proceeding."
+msgstr ""
+
+msgid "Please solve the reCAPTCHA"
+msgstr ""
+
+msgid "Please try again"
+msgstr ""
+
+msgid "Please upgrade PostgreSQL to version 9.6 or greater. The status of the replication cannot be determined reliably with the current version."
+msgstr ""
+
+msgid "Please use this form to report to the admin users who create spam issues, comments or behave inappropriately."
+msgstr ""
+
+msgid "Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
+msgid "Pods in use"
+msgstr ""
+
+msgid "Preferences"
+msgstr ""
+
+msgid "Preferences saved."
+msgstr ""
+
+msgid "Preferences|Behavior"
+msgstr ""
+
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
+msgstr ""
+
+msgid "Preferences|Choose what content you want to see on a project’s overview page."
+msgstr ""
+
+msgid "Preferences|Customize the appearance of the application header and navigation sidebar."
+msgstr ""
+
+msgid "Preferences|Default dashboard"
+msgstr ""
+
+msgid "Preferences|Display time in 24-hour format"
+msgstr ""
+
+msgid "Preferences|For example: 30 mins ago."
+msgstr ""
+
+msgid "Preferences|Layout width"
+msgstr ""
+
+msgid "Preferences|Navigation theme"
+msgstr ""
+
+msgid "Preferences|Project overview content"
+msgstr ""
+
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
+msgid "Preferences|Syntax highlighting theme"
+msgstr ""
+
+msgid "Preferences|These settings will update how dates and times are displayed for you."
+msgstr ""
+
+msgid "Preferences|This feature is experimental and translations are not complete yet"
+msgstr ""
+
+msgid "Preferences|This setting allows you to customize the appearance of the syntax."
+msgstr ""
+
+msgid "Preferences|This setting allows you to customize the behavior of the system layout and default views."
+msgstr ""
+
+msgid "Preferences|Time display"
+msgstr ""
+
+msgid "Preferences|Time format"
+msgstr ""
+
+msgid "Preferences|Time preferences"
+msgstr ""
+
+msgid "Preferences|Use relative times"
+msgstr ""
+
+msgid "Press %{key}-C to copy"
+msgstr ""
+
+msgid "Press Enter or click to search"
+msgstr ""
+
+msgid "Prevent adding new members to project membership within this group"
+msgstr ""
+
+msgid "Prevent approval of merge requests by merge request author"
+msgstr ""
+
+msgid "Prevent approval of merge requests by merge request committers"
+msgstr ""
+
+msgid "Preview"
+msgstr ""
+
+msgid "Preview Markdown"
+msgstr ""
+
+msgid "Preview changes"
+msgstr ""
+
+msgid "Preview payload"
+msgstr ""
+
+msgid "Previous Artifacts"
+msgstr ""
+
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
+msgid "Primary"
+msgstr ""
+
+msgid "Prioritize"
+msgstr ""
+
+msgid "Prioritize label"
+msgstr ""
+
+msgid "Prioritized Labels"
+msgstr ""
+
+msgid "Prioritized label"
+msgstr ""
+
+msgid "Private"
+msgstr ""
+
+msgid "Private - Project access must be granted explicitly to each user."
+msgstr ""
+
+msgid "Private - The group and its projects can only be viewed by members."
+msgstr ""
+
+msgid "Private group(s)"
+msgstr ""
+
+msgid "Private profile"
+msgstr ""
+
+msgid "Private projects can be created in your personal namespace with:"
+msgstr ""
+
+msgid "Proceed"
+msgstr ""
+
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
+msgid "Profile"
+msgstr ""
+
+msgid "Profile Settings"
+msgstr ""
+
+msgid "ProfileSession|on"
+msgstr ""
+
+msgid "Profiles| You are about to permanently delete %{yourAccount}, and all of the issues, merge requests, and groups linked to your account. Once you confirm %{deleteAccount}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Profiles| You are going to change the username %{currentUsernameBold} to %{newUsernameBold}. Profile and projects will be redirected to the %{newUsername} namespace but this redirect will expire once the %{currentUsername} namespace is registered by another user or group. Please update your Git repository remotes as soon as possible."
+msgstr ""
+
+msgid "Profiles|@username"
+msgstr ""
+
+msgid "Profiles|Account scheduled for removal."
+msgstr ""
+
+msgid "Profiles|Activate signin with one of the following services"
+msgstr ""
+
+msgid "Profiles|Active"
+msgstr ""
+
+msgid "Profiles|Add key"
+msgstr ""
+
+msgid "Profiles|Add status emoji"
+msgstr ""
+
+msgid "Profiles|Avatar cropper"
+msgstr ""
+
+msgid "Profiles|Avatar will be removed. Are you sure?"
+msgstr ""
+
+msgid "Profiles|Bio"
+msgstr ""
+
+msgid "Profiles|Change username"
+msgstr ""
+
+msgid "Profiles|Changing your username can have unintended side effects."
+msgstr ""
+
+msgid "Profiles|Choose file..."
+msgstr ""
+
+msgid "Profiles|Choose to show contributions of private projects on your public profile without any project, repository or organization information"
+msgstr ""
+
+msgid "Profiles|City, country"
+msgstr ""
+
+msgid "Profiles|Clear status"
+msgstr ""
+
+msgid "Profiles|Click on icon to activate signin with one of the following services"
+msgstr ""
+
+msgid "Profiles|Commit email"
+msgstr ""
+
+msgid "Profiles|Connect"
+msgstr ""
+
+msgid "Profiles|Connected Accounts"
+msgstr ""
+
+msgid "Profiles|Current path: %{path}"
+msgstr ""
+
+msgid "Profiles|Current status"
+msgstr ""
+
+msgid "Profiles|Default notification email"
+msgstr ""
+
+msgid "Profiles|Delete Account"
+msgstr ""
+
+msgid "Profiles|Delete account"
+msgstr ""
+
+msgid "Profiles|Delete your account?"
+msgstr ""
+
+msgid "Profiles|Deleting an account has the following effects:"
+msgstr ""
+
+msgid "Profiles|Disconnect"
+msgstr ""
+
+msgid "Profiles|Do not show on profile"
+msgstr ""
+
+msgid "Profiles|Don't display activity-related personal information on your profiles"
+msgstr ""
+
+msgid "Profiles|Edit Profile"
+msgstr ""
+
+msgid "Profiles|Enter your name, so people you know can recognize you"
+msgstr ""
+
+msgid "Profiles|Feed token was successfully reset"
+msgstr ""
+
+msgid "Profiles|Full name"
+msgstr ""
+
+msgid "Profiles|Impersonation"
+msgstr ""
+
+msgid "Profiles|Include private contributions on my profile"
+msgstr ""
+
+msgid "Profiles|Incoming email token was successfully reset"
+msgstr ""
+
+msgid "Profiles|Increase your account's security by enabling Two-Factor Authentication (2FA)"
+msgstr ""
+
+msgid "Profiles|Invalid password"
+msgstr ""
+
+msgid "Profiles|Invalid username"
+msgstr ""
+
+msgid "Profiles|Key"
+msgstr ""
+
+msgid "Profiles|Learn more"
+msgstr ""
+
+msgid "Profiles|Location"
+msgstr ""
+
+msgid "Profiles|Made a private contribution"
+msgstr ""
+
+msgid "Profiles|Main settings"
+msgstr ""
+
+msgid "Profiles|No file chosen"
+msgstr ""
+
+msgid "Profiles|Notification email"
+msgstr ""
+
+msgid "Profiles|Organization"
+msgstr ""
+
+msgid "Profiles|Path"
+msgstr ""
+
+msgid "Profiles|Personal Access"
+msgstr ""
+
+msgid "Profiles|Position and size your new avatar"
+msgstr ""
+
+msgid "Profiles|Primary email"
+msgstr ""
+
+msgid "Profiles|Private contributions"
+msgstr ""
+
+msgid "Profiles|Profile was successfully updated"
+msgstr ""
+
+msgid "Profiles|Public Avatar"
+msgstr ""
+
+msgid "Profiles|Public email"
+msgstr ""
+
+msgid "Profiles|Remove avatar"
+msgstr ""
+
+msgid "Profiles|Set new profile picture"
+msgstr ""
+
+msgid "Profiles|Social sign-in"
+msgstr ""
+
+msgid "Profiles|Some options are unavailable for LDAP accounts"
+msgstr ""
+
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
+msgid "Profiles|Tell us about yourself in fewer than 250 characters"
+msgstr ""
+
+msgid "Profiles|The maximum file size allowed is 200KB."
+msgstr ""
+
+msgid "Profiles|This doesn't look like a public SSH key, are you sure you want to add it?"
+msgstr ""
+
+msgid "Profiles|This email will be displayed on your public profile"
+msgstr ""
+
+msgid "Profiles|This email will be used for web based operations, such as edits and merges. %{commit_email_link_start}Learn more%{commit_email_link_end}"
+msgstr ""
+
+msgid "Profiles|This emoji and message will appear on your profile and throughout the interface."
+msgstr ""
+
+msgid "Profiles|This information will appear on your profile"
+msgstr ""
+
+msgid "Profiles|Time settings"
+msgstr ""
+
+msgid "Profiles|Two-Factor Authentication"
+msgstr ""
+
+msgid "Profiles|Type your %{confirmationValue} to confirm:"
+msgstr ""
+
+msgid "Profiles|Typically starts with \"ssh-ed25519 …\" or \"ssh-rsa …\""
+msgstr ""
+
+msgid "Profiles|Update profile settings"
+msgstr ""
+
+msgid "Profiles|Update username"
+msgstr ""
+
+msgid "Profiles|Upload new avatar"
+msgstr ""
+
+msgid "Profiles|Use a private email - %{email}"
+msgstr ""
+
+msgid "Profiles|User ID"
+msgstr ""
+
+msgid "Profiles|Username change failed - %{message}"
+msgstr ""
+
+msgid "Profiles|Username successfully changed"
+msgstr ""
+
+msgid "Profiles|Using emojis in names seems fun, but please try to set a status message instead"
+msgstr ""
+
+msgid "Profiles|What's your status?"
+msgstr ""
+
+msgid "Profiles|Who you represent or work for"
+msgstr ""
+
+msgid "Profiles|You can change your avatar here"
+msgstr ""
+
+msgid "Profiles|You can change your avatar here or remove the current avatar to revert to %{gravatar_link}"
+msgstr ""
+
+msgid "Profiles|You can set your current timezone here"
+msgstr ""
+
+msgid "Profiles|You can upload your avatar here"
+msgstr ""
+
+msgid "Profiles|You can upload your avatar here or change it at %{gravatar_link}"
+msgstr ""
+
+msgid "Profiles|You don't have access to delete this user."
+msgstr ""
+
+msgid "Profiles|You must transfer ownership or delete these groups before you can delete your account."
+msgstr ""
+
+msgid "Profiles|Your LinkedIn profile name from linkedin.com/in/profilename"
+msgstr ""
+
+msgid "Profiles|Your account is currently an owner in these groups:"
+msgstr ""
+
+msgid "Profiles|Your email address was automatically set based on your %{provider_label} account"
+msgstr ""
+
+msgid "Profiles|Your location was automatically set based on your %{provider_label} account"
+msgstr ""
+
+msgid "Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you"
+msgstr ""
+
+msgid "Profiles|Your status"
+msgstr ""
+
+msgid "Profiles|e.g. My MacBook key"
+msgstr ""
+
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
+msgid "Profiles|username"
+msgstr ""
+
+msgid "Profiles|website.com"
+msgstr ""
+
+msgid "Profiles|your account"
+msgstr ""
+
+msgid "Profiling - Performance bar"
+msgstr ""
+
+msgid "Programming languages used in this repository"
+msgstr ""
+
+msgid "Progress"
+msgstr ""
+
+msgid "Project"
+msgstr ""
+
+msgid "Project \"%{name}\" is no longer available. Select another project to continue."
+msgstr ""
+
+msgid "Project %{project_repo} could not be found"
+msgstr ""
+
+msgid "Project '%{project_name}' is being imported."
+msgstr ""
+
+msgid "Project '%{project_name}' is in the process of being deleted."
+msgstr ""
+
+msgid "Project '%{project_name}' queued for deletion."
+msgstr ""
+
+msgid "Project '%{project_name}' was successfully created."
+msgstr ""
+
+msgid "Project '%{project_name}' was successfully updated."
+msgstr ""
+
+msgid "Project Badges"
+msgstr ""
+
+msgid "Project Files"
+msgstr ""
+
+msgid "Project ID"
+msgstr ""
+
+msgid "Project URL"
+msgstr ""
+
+msgid "Project access must be granted explicitly to each user."
+msgstr ""
+
+msgid "Project already created"
+msgstr ""
+
+msgid "Project and wiki repositories"
+msgstr ""
+
+msgid "Project avatar"
+msgstr ""
+
+msgid "Project cannot be shared with the group it is in or one of its ancestors."
+msgstr ""
+
+msgid "Project configuration, including services"
+msgstr ""
+
+msgid "Project description (optional)"
+msgstr ""
+
+msgid "Project details"
+msgstr ""
+
+msgid "Project export could not be deleted."
+msgstr ""
+
+msgid "Project export enabled"
+msgstr ""
+
+msgid "Project export has been deleted."
+msgstr ""
+
+msgid "Project export link has expired. Please generate a new export from your project settings."
+msgstr ""
+
+msgid "Project export started. A download link will be sent by email."
+msgstr ""
+
+msgid "Project has too many %{label_for_message} to search"
+msgstr ""
+
+msgid "Project members"
+msgstr ""
+
+msgid "Project name"
+msgstr ""
+
+msgid "Project slug"
+msgstr ""
+
+msgid "Project uploads"
+msgstr ""
+
+msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
+msgstr ""
+
+msgid "Project: %{name}"
+msgstr ""
+
+msgid "ProjectActivityRSS|Subscribe"
+msgstr ""
+
+msgid "ProjectCreationLevel|Allowed to create projects"
+msgstr ""
+
+msgid "ProjectCreationLevel|Default project creation protection"
+msgstr ""
+
+msgid "ProjectCreationLevel|Developers + Maintainers"
+msgstr ""
+
+msgid "ProjectCreationLevel|Maintainers"
+msgstr ""
+
+msgid "ProjectCreationLevel|No one"
+msgstr ""
+
+msgid "ProjectFileTree|Name"
+msgstr ""
+
+msgid "ProjectLastActivity|Never"
+msgstr ""
+
+msgid "ProjectLifecycle|Stage"
+msgstr ""
+
+msgid "ProjectOverview|Fork"
+msgstr ""
+
+msgid "ProjectOverview|Forks"
+msgstr ""
+
+msgid "ProjectOverview|Go to your fork"
+msgstr ""
+
+msgid "ProjectOverview|Star"
+msgstr ""
+
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
+msgid "ProjectOverview|Unstar"
+msgstr ""
+
+msgid "ProjectOverview|You have reached your project limit"
+msgstr ""
+
+msgid "ProjectOverview|You must sign in to star a project"
+msgstr ""
+
+msgid "ProjectPage|Project ID: %{project_id}"
+msgstr ""
+
+msgid "ProjectSelect| or group"
+msgstr ""
+
+msgid "ProjectSelect|Search for project"
+msgstr ""
+
+msgid "ProjectService|%{service_title}: status off"
+msgstr ""
+
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
+msgstr ""
+
+msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
+msgstr ""
+
+msgid "ProjectSettings|Badges"
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
+msgid "ProjectSettings|Contact an admin to change this setting."
+msgstr ""
+
+msgid "ProjectSettings|Customize your project badges."
+msgstr ""
+
+msgid "ProjectSettings|Every merge creates a merge commit"
+msgstr ""
+
+msgid "ProjectSettings|Failed to protect the tag"
+msgstr ""
+
+msgid "ProjectSettings|Failed to update tag!"
+msgstr ""
+
+msgid "ProjectSettings|Fast-forward merge"
+msgstr ""
+
+msgid "ProjectSettings|Fast-forward merges only"
+msgstr ""
+
+msgid "ProjectSettings|Learn more about badges."
+msgstr ""
+
+msgid "ProjectSettings|Merge checks"
+msgstr ""
+
+msgid "ProjectSettings|Merge commit"
+msgstr ""
+
+msgid "ProjectSettings|Merge commit with semi-linear history"
+msgstr ""
+
+msgid "ProjectSettings|Merge method"
+msgstr ""
+
+msgid "ProjectSettings|Merge options"
+msgstr ""
+
+msgid "ProjectSettings|Merge pipelines will try to validate the post-merge result prior to merging"
+msgstr ""
+
+msgid "ProjectSettings|No merge commits are created"
+msgstr ""
+
+msgid "ProjectSettings|Only signed commits can be pushed to this repository."
+msgstr ""
+
+msgid "ProjectSettings|Pipelines must succeed"
+msgstr ""
+
+msgid "ProjectSettings|Pipelines need to be configured to enable this feature."
+msgstr ""
+
+msgid "ProjectSettings|Show link to create/view merge request when pushing from the command line"
+msgstr ""
+
+msgid "ProjectSettings|These checks must pass before merge requests can be merged"
+msgstr ""
+
+msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin."
+msgstr ""
+
+msgid "ProjectSettings|This setting is applied on the server level but has been overridden for this project."
+msgstr ""
+
+msgid "ProjectSettings|This setting will be applied to all projects unless overridden by an admin."
+msgstr ""
+
+msgid "ProjectSettings|This will dictate the commit history when you merge a merge request"
+msgstr ""
+
+msgid "ProjectSettings|Users can only push commits to this repository that were committed with one of their own verified emails."
+msgstr ""
+
+msgid "ProjectSettings|When conflicts arise the user is given the option to rebase"
+msgstr ""
+
+msgid "ProjectTemplates|.NET Core"
+msgstr ""
+
+msgid "ProjectTemplates|Android"
+msgstr ""
+
+msgid "ProjectTemplates|Go Micro"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/GitBook"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Hexo"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Hugo"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Jekyll"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Plain HTML"
+msgstr ""
+
+msgid "ProjectTemplates|NodeJS Express"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/GitBook"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Hexo"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Hugo"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Jekyll"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Plain HTML"
+msgstr ""
+
+msgid "ProjectTemplates|Ruby on Rails"
+msgstr ""
+
+msgid "ProjectTemplates|Spring"
+msgstr ""
+
+msgid "ProjectTemplates|iOS (Swift)"
+msgstr ""
+
+msgid "Projects"
+msgstr ""
+
+msgid "Projects (%{count})"
+msgstr ""
+
+msgid "Projects Successfully Retrieved"
+msgstr ""
+
+msgid "Projects shared with %{group_name}"
+msgstr ""
+
+msgid "Projects that belong to a group are prefixed with the group namespace. Existing projects may be moved into a group."
+msgstr ""
+
+msgid "Projects to index"
+msgstr ""
+
+msgid "Projects with write access"
+msgstr ""
+
+msgid "ProjectsDropdown|Frequently visited"
+msgstr ""
+
+msgid "ProjectsDropdown|Loading projects"
+msgstr ""
+
+msgid "ProjectsDropdown|Projects you visit often will appear here"
+msgstr ""
+
+msgid "ProjectsDropdown|Search your projects"
+msgstr ""
+
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
+msgstr ""
+
+msgid "ProjectsDropdown|This feature requires browser localStorage support"
+msgstr ""
+
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Edit alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error creating alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error deleting alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error fetching alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error saving alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Operator"
+msgstr ""
+
+msgid "PrometheusAlerts|Select query"
+msgstr ""
+
+msgid "PrometheusAlerts|Threshold"
+msgstr ""
+
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|<p class=\"text-tertiary\">No <a href=\"%{docsUrl}\">common metrics</a> were found</p>"
+msgstr ""
+
+msgid "PrometheusService|Active"
+msgstr ""
+
+msgid "PrometheusService|Auto configuration"
+msgstr ""
+
+msgid "PrometheusService|Automatically deploy and configure Prometheus on your clusters to monitor your project’s environments"
+msgstr ""
+
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
+msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
+msgstr ""
+
+msgid "PrometheusService|Finding and configuring metrics..."
+msgstr ""
+
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
+msgid "PrometheusService|Install Prometheus on clusters"
+msgstr ""
+
+msgid "PrometheusService|Manage clusters"
+msgstr ""
+
+msgid "PrometheusService|Manual configuration"
+msgstr ""
+
+msgid "PrometheusService|Metrics"
+msgstr ""
+
+msgid "PrometheusService|Missing environment variable"
+msgstr ""
+
+msgid "PrometheusService|More information"
+msgstr ""
+
+msgid "PrometheusService|New metric"
+msgstr ""
+
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
+msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
+msgstr ""
+
+msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
+msgstr ""
+
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
+msgid "PrometheusService|Time-series monitoring service"
+msgstr ""
+
+msgid "PrometheusService|To enable manual configuration, uninstall Prometheus from your clusters"
+msgstr ""
+
+msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
+msgstr ""
+
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
+msgid "Promote these project milestones into a group milestone."
+msgstr ""
+
+msgid "Promote to Group Milestone"
+msgstr ""
+
+msgid "Promote to group label"
+msgstr ""
+
+msgid "PromoteMilestone|Only project milestones can be promoted."
+msgstr ""
+
+msgid "PromoteMilestone|Project does not belong to a group."
+msgstr ""
+
+msgid "PromoteMilestone|Promotion failed - %{message}"
+msgstr ""
+
+msgid "Promoted issue to an epic."
+msgstr ""
+
+msgid "Promotions|Don't show me this again"
+msgstr ""
+
+msgid "Promotions|Epics let you manage your portfolio of projects more efficiently and with less effort by tracking groups of issues that share a theme, across projects and milestones."
+msgstr ""
+
+msgid "Promotions|This feature is locked."
+msgstr ""
+
+msgid "Promotions|Upgrade plan"
+msgstr ""
+
+msgid "Prompt users to upload SSH keys"
+msgstr ""
+
+msgid "Protected"
+msgstr ""
+
+msgid "Protected Branch"
+msgstr ""
+
+msgid "Protected Environment"
+msgstr ""
+
+msgid "Protected Environments"
+msgstr ""
+
+msgid "Protected Tag"
+msgstr ""
+
+msgid "Protected branches"
+msgstr ""
+
+msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
+msgstr ""
+
+msgid "ProtectedEnvironment|Allowed to deploy"
+msgstr ""
+
+msgid "ProtectedEnvironment|Environment"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protect"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protect an environment"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protected Environment (%{protected_environments_count})"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protecting an environment restricts the users who can execute deployments."
+msgstr ""
+
+msgid "ProtectedEnvironment|Select an environment"
+msgstr ""
+
+msgid "ProtectedEnvironment|Select users"
+msgstr ""
+
+msgid "ProtectedEnvironment|Select users to deploy and manage Feature Flag settings"
+msgstr ""
+
+msgid "ProtectedEnvironment|There are currently no protected environments, protect an environment with the form above."
+msgstr ""
+
+msgid "ProtectedEnvironment|Unprotect"
+msgstr ""
+
+msgid "ProtectedEnvironment|Your environment can't be unprotected"
+msgstr ""
+
+msgid "ProtectedEnvironment|Your environment has been protected."
+msgstr ""
+
+msgid "ProtectedEnvironment|Your environment has been unprotected"
+msgstr ""
+
+msgid "Protip:"
+msgstr ""
+
+msgid "Provider"
+msgstr ""
+
+msgid "Pseudonymizer data collection"
+msgstr ""
+
+msgid "Public"
+msgstr ""
+
+msgid "Public - The group and any public projects can be viewed without any authentication."
+msgstr ""
+
+msgid "Public - The project can be accessed without any authentication."
+msgstr ""
+
+msgid "Public Access Help"
+msgstr ""
+
+msgid "Public deploy keys (%{deploy_keys_count})"
+msgstr ""
+
+msgid "Public pipelines"
+msgstr ""
+
+msgid "Pull"
+msgstr ""
+
+msgid "Purchase more minutes"
+msgstr ""
+
+msgid "Push"
+msgstr ""
+
+msgid "Push Rule updated successfully."
+msgstr ""
+
+msgid "Push Rules"
+msgstr ""
+
+msgid "Push Rules updated successfully."
+msgstr ""
+
+msgid "Push an existing Git repository"
+msgstr ""
+
+msgid "Push an existing folder"
+msgstr ""
+
+msgid "Push events"
+msgstr ""
+
+msgid "Push project from command line"
+msgstr ""
+
+msgid "Push to create a project"
+msgstr ""
+
+msgid "PushRule|Committer restriction"
+msgstr ""
+
+msgid "Pushed"
+msgstr ""
+
+msgid "Pushes"
+msgstr ""
+
+msgid "PushoverService|%{user_name} deleted branch \"%{ref}\"."
+msgstr ""
+
+msgid "PushoverService|%{user_name} push to branch \"%{ref}\"."
+msgstr ""
+
+msgid "PushoverService|%{user_name} pushed new branch \"%{ref}\"."
+msgstr ""
+
+msgid "PushoverService|High Priority"
+msgstr ""
+
+msgid "PushoverService|Leave blank for all active devices"
+msgstr ""
+
+msgid "PushoverService|Low Priority"
+msgstr ""
+
+msgid "PushoverService|Lowest Priority"
+msgstr ""
+
+msgid "PushoverService|Normal Priority"
+msgstr ""
+
+msgid "PushoverService|Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop."
+msgstr ""
+
+msgid "PushoverService|See project %{project_full_name}"
+msgstr ""
+
+msgid "PushoverService|Total commits count: %{total_commits_count}"
+msgstr ""
+
+msgid "PushoverService|Your application key"
+msgstr ""
+
+msgid "PushoverService|Your user key"
+msgstr ""
+
+msgid "Quarters"
+msgstr ""
+
+msgid "Query"
+msgstr ""
+
+msgid "Query is valid"
+msgstr ""
+
+msgid "Quick actions can be used in the issues description and comment boxes."
+msgstr ""
+
+msgid "README"
+msgstr ""
+
+msgid "Rake Tasks Help"
+msgstr ""
+
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
+msgid "Read more"
+msgstr ""
+
+msgid "Read more about environments"
+msgstr ""
+
+msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
+msgstr ""
+
+msgid "Read more about related issues"
+msgstr ""
+
+msgid "Real-time features"
+msgstr ""
+
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
+msgid "Receive alerts from manually configured Prometheus servers."
+msgstr ""
+
+msgid "Receive notifications about your own activity"
+msgstr ""
+
+msgid "Recent"
+msgstr ""
+
+msgid "Recent Activity"
+msgstr ""
+
+msgid "Recent Project Activity"
+msgstr ""
+
+msgid "Recent Searches Service is unavailable"
+msgstr ""
+
+msgid "Recent searches"
+msgstr ""
+
+msgid "Recovery Codes"
+msgstr ""
+
+msgid "Redirect to SAML provider to test configuration"
+msgstr ""
+
+msgid "Reference:"
+msgstr ""
+
+msgid "Refresh"
+msgstr ""
+
+msgid "Refreshing in a second to show the updated status..."
+msgid_plural "Refreshing in %d seconds to show the updated status..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Regenerate instance ID"
+msgstr ""
+
+msgid "Regenerate key"
+msgstr ""
+
+msgid "Regenerate recovery codes"
+msgstr ""
+
+msgid "Regenerating the instance ID can break integration depending on the client you are using."
+msgstr ""
+
+msgid "Regex pattern"
+msgstr ""
+
+msgid "Register"
+msgstr ""
+
+msgid "Register / Sign In"
+msgstr ""
+
+msgid "Register Two-Factor Authenticator"
+msgstr ""
+
+msgid "Register U2F device"
+msgstr ""
+
+msgid "Register Universal Two-Factor (U2F) Device"
+msgstr ""
+
+msgid "Register and see your runners for this group."
+msgstr ""
+
+msgid "Register and see your runners for this project."
+msgstr ""
+
+msgid "Register with two-factor app"
+msgstr ""
+
+msgid "Registration"
+msgstr ""
+
+msgid "Related Deployed Jobs"
+msgstr ""
+
+msgid "Related Issues"
+msgstr ""
+
+msgid "Related Jobs"
+msgstr ""
+
+msgid "Related Merge Requests"
+msgstr ""
+
+msgid "Related Merged Requests"
+msgstr ""
+
+msgid "Related issues"
+msgstr ""
+
+msgid "Related merge requests"
+msgstr ""
+
+msgid "Releases"
+msgstr ""
+
+msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
+msgstr ""
+
+msgid "Remember me"
+msgstr ""
+
+msgid "Remind later"
+msgstr ""
+
+msgid "Remote object has no absolute path."
+msgstr ""
+
+msgid "Remove"
+msgstr ""
+
+msgid "Remove %{displayReference}"
+msgstr ""
+
+msgid "Remove Runner"
+msgstr ""
+
+msgid "Remove Zoom meeting"
+msgstr ""
+
+msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
+msgstr ""
+
+msgid "Remove all or specific assignee(s)"
+msgstr ""
+
+msgid "Remove all or specific label(s)"
+msgstr ""
+
+msgid "Remove approvers"
+msgstr ""
+
+msgid "Remove approvers?"
+msgstr ""
+
+msgid "Remove assignee"
+msgstr ""
+
+msgid "Remove avatar"
+msgstr ""
+
+msgid "Remove card"
+msgstr ""
+
+msgid "Remove child epic from an epic"
+msgstr ""
+
+msgid "Remove due date"
+msgstr ""
+
+msgid "Remove fork relationship"
+msgstr ""
+
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
+msgid "Remove group"
+msgstr ""
+
+msgid "Remove milestone"
+msgstr ""
+
+msgid "Remove parent epic from an epic"
+msgstr ""
+
+msgid "Remove priority"
+msgstr ""
+
+msgid "Remove project"
+msgstr ""
+
+msgid "Remove spent time"
+msgstr ""
+
+msgid "Remove stage"
+msgstr ""
+
+msgid "Remove time estimate"
+msgstr ""
+
+msgid "Removed"
+msgstr ""
+
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
+msgid "Removed %{type} with id %{id}"
+msgstr ""
+
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
+msgid "Removed group can not be restored!"
+msgstr ""
+
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
+msgid "Removed projects cannot be restored!"
+msgstr ""
+
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removes %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removes %{milestone_reference} milestone."
+msgstr ""
+
+msgid "Removes all labels."
+msgstr ""
+
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
+msgid "Removes spent time."
+msgstr ""
+
+msgid "Removes the due date."
+msgstr ""
+
+msgid "Removes time estimate."
+msgstr ""
+
+msgid "Removing group will cause all child projects and resources to be removed."
+msgstr ""
+
+msgid "Removing license…"
+msgstr ""
+
+msgid "Removing the project will delete its repository and all related resources including issues, merge requests etc."
+msgstr ""
+
+msgid "Rename"
+msgstr ""
+
+msgid "Rename file"
+msgstr ""
+
+msgid "Rename folder"
+msgstr ""
+
+msgid "Reopen epic"
+msgstr ""
+
+msgid "Reopen milestone"
+msgstr ""
+
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
+msgid "Repair authentication"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace all label(s)"
+msgstr ""
+
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
+msgid "Reply to comment"
+msgstr ""
+
+msgid "Reply to this email directly or %{view_it_on_gitlab}."
+msgstr ""
+
+msgid "Reply..."
+msgstr ""
+
+msgid "Repo by URL"
+msgstr ""
+
+msgid "Report abuse to admin"
+msgstr ""
+
+msgid "Reporting"
+msgstr ""
+
+msgid "Reports|%{failedString} and %{resolvedString}"
+msgstr ""
+
+msgid "Reports|Actions"
+msgstr ""
+
+msgid "Reports|Class"
+msgstr ""
+
+msgid "Reports|Classname"
+msgstr ""
+
+msgid "Reports|Confidence"
+msgstr ""
+
+msgid "Reports|Execution time"
+msgstr ""
+
+msgid "Reports|Failure"
+msgstr ""
+
+msgid "Reports|Metrics reports are loading"
+msgstr ""
+
+msgid "Reports|Metrics reports changed on %{numberOfChanges} %{pointsString}"
+msgstr ""
+
+msgid "Reports|Metrics reports did not change"
+msgstr ""
+
+msgid "Reports|Metrics reports failed loading results"
+msgstr ""
+
+msgid "Reports|Severity"
+msgstr ""
+
+msgid "Reports|System output"
+msgstr ""
+
+msgid "Reports|Test summary"
+msgstr ""
+
+msgid "Reports|Test summary failed loading results"
+msgstr ""
+
+msgid "Reports|Test summary results are being parsed"
+msgstr ""
+
+msgid "Reports|Vulnerability"
+msgstr ""
+
+msgid "Reports|no changed test results"
+msgstr ""
+
+msgid "Repository"
+msgstr ""
+
+msgid "Repository Graph"
+msgstr ""
+
+msgid "Repository Settings"
+msgstr ""
+
+msgid "Repository URL"
+msgstr ""
+
+msgid "Repository check was triggered."
+msgstr ""
+
+msgid "Repository cleanup"
+msgstr ""
+
+msgid "Repository cleanup has started. You will receive an email once the cleanup operation is complete."
+msgstr ""
+
+msgid "Repository has no locks."
+msgstr ""
+
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror"
+msgstr ""
+
+msgid "Repository static objects"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
+msgid "RepositorySettingsAccessLevel|Select"
+msgstr ""
+
+msgid "Request Access"
+msgstr ""
+
+msgid "Requested %{time_ago}"
+msgstr ""
+
+msgid "Requests Profiles"
+msgstr ""
+
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
+msgid "Require all users in this group to setup Two-factor authentication"
+msgstr ""
+
+msgid "Require all users to accept Terms of Service and Privacy Policy when they access GitLab."
+msgstr ""
+
+msgid "Require approval from code owners"
+msgstr ""
+
+msgid "Require user password to approve"
+msgstr ""
+
+msgid "Require users to prove ownership of custom domains"
+msgstr ""
+
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
+msgid "Requires approval from %{names}."
+msgid_plural "Requires %{count} more approvals from %{names}."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Requires approval."
+msgid_plural "Requires %d more approvals."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Resend confirmation email"
+msgstr ""
+
+msgid "Resend invite"
+msgstr ""
+
+msgid "Resend it"
+msgstr ""
+
+msgid "Reset authorization key"
+msgstr ""
+
+msgid "Reset authorization key?"
+msgstr ""
+
+msgid "Reset health check access token"
+msgstr ""
+
+msgid "Reset key"
+msgstr ""
+
+msgid "Reset runners registration token"
+msgstr ""
+
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
+msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
+msgstr ""
+
+msgid "Resolve all threads in new issue"
+msgstr ""
+
+msgid "Resolve conflicts on source branch"
+msgstr ""
+
+msgid "Resolve discussion"
+msgstr ""
+
+msgid "Resolve thread"
+msgstr ""
+
+msgid "Resolved"
+msgstr ""
+
+msgid "Resolved 1 discussion."
+msgstr ""
+
+msgid "Resolved all discussions."
+msgstr ""
+
+msgid "Resolved by %{name}"
+msgstr ""
+
+msgid "Resolved by %{resolvedByName}"
+msgstr ""
+
+msgid "Resolves IP addresses once and uses them to submit requests"
+msgstr ""
+
+msgid "Response"
+msgstr ""
+
+msgid "Response didn't include `service_desk_address`"
+msgstr ""
+
+msgid "Response metrics (AWS ELB)"
+msgstr ""
+
+msgid "Response metrics (Custom)"
+msgstr ""
+
+msgid "Response metrics (HA Proxy)"
+msgstr ""
+
+msgid "Response metrics (NGINX Ingress VTS)"
+msgstr ""
+
+msgid "Response metrics (NGINX Ingress)"
+msgstr ""
+
+msgid "Response metrics (NGINX)"
+msgstr ""
+
+msgid "Restart Terminal"
+msgstr ""
+
+msgid "Restrict access by IP address"
+msgstr ""
+
+msgid "Restrict membership by email"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Resume replication"
+msgstr ""
+
+msgid "Retry"
+msgstr ""
+
+msgid "Retry this job"
+msgstr ""
+
+msgid "Retry this job in order to create the necessary resources."
+msgstr ""
+
+msgid "Retry update"
+msgstr ""
+
+msgid "Retry verification"
+msgstr ""
+
+msgid "Reveal value"
+msgid_plural "Reveal values"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Reveal values"
+msgstr ""
+
+msgid "Revert this commit"
+msgstr ""
+
+msgid "Revert this merge request"
+msgstr ""
+
+msgid "Review"
+msgstr ""
+
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
+msgid "Revoke"
+msgstr ""
+
+msgid "Revoked impersonation token %{token_name}!"
+msgstr ""
+
+msgid "Revoked personal access token %{personal_access_token_name}!"
+msgstr ""
+
+msgid "RightSidebar|adding a"
+msgstr ""
+
+msgid "RightSidebar|deleting the"
+msgstr ""
+
+msgid "Roadmap"
+msgstr ""
+
+msgid "Rollback"
+msgstr ""
+
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Run housekeeping"
+msgstr ""
+
+msgid "Run tests against your code live using the Web Terminal"
+msgstr ""
+
+msgid "Run untagged jobs"
+msgstr ""
+
+msgid "Runner cannot be assigned to other projects"
+msgstr ""
+
+msgid "Runner runs jobs from all unassigned projects"
+msgstr ""
+
+msgid "Runner runs jobs from all unassigned projects in its group"
+msgstr ""
+
+msgid "Runner runs jobs from assigned projects"
+msgstr ""
+
+msgid "Runner token"
+msgstr ""
+
+msgid "Runner was not updated."
+msgstr ""
+
+msgid "Runner was successfully updated."
+msgstr ""
+
+msgid "Runner will not receive any new jobs"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Runners API"
+msgstr ""
+
+msgid "Runners activated for this project"
+msgstr ""
+
+msgid "Runners can be placed on separate users, servers, and even on your local machine."
+msgstr ""
+
+msgid "Runners can be placed on separate users, servers, even on your local machine."
+msgstr ""
+
+msgid "Runners currently online: %{active_runners_count}"
+msgstr ""
+
+msgid "Runners page"
+msgstr ""
+
+msgid "Runners page."
+msgstr ""
+
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Running…"
+msgstr ""
+
+msgid "Runs a number of housekeeping tasks within the current repository, such as compressing file revisions and removing unreachable objects."
+msgstr ""
+
+msgid "SAML SSO"
+msgstr ""
+
+msgid "SAML SSO for %{group_name}"
+msgstr ""
+
+msgid "SAML for %{group_name}"
+msgstr ""
+
+msgid "SSH Key"
+msgstr ""
+
+msgid "SSH Keys"
+msgstr ""
+
+msgid "SSH Keys Help"
+msgstr ""
+
+msgid "SSH host keys"
+msgstr ""
+
+msgid "SSH keys allow you to establish a secure connection between your computer and GitLab."
+msgstr ""
+
+msgid "SSH public key"
+msgstr ""
+
+msgid "SSL Verification"
+msgstr ""
+
+msgid "Saturday"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Save Changes"
+msgstr ""
+
+msgid "Save anyway"
+msgstr ""
+
+msgid "Save application"
+msgstr ""
+
+msgid "Save changes"
+msgstr ""
+
+msgid "Save changes before testing"
+msgstr ""
+
+msgid "Save comment"
+msgstr ""
+
+msgid "Save password"
+msgstr ""
+
+msgid "Save pipeline schedule"
+msgstr ""
+
+msgid "Save variables"
+msgstr ""
+
+msgid "Saving"
+msgstr ""
+
+msgid "Saving project."
+msgstr ""
+
+msgid "Schedule a new pipeline"
+msgstr ""
+
+msgid "Scheduled"
+msgstr ""
+
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
+msgid "Schedules"
+msgstr ""
+
+msgid "Scheduling"
+msgstr ""
+
+msgid "Scheduling Pipelines"
+msgstr ""
+
+msgid "Scope"
+msgstr ""
+
+msgid "Scope not supported with disabled 'users_search' feature!"
+msgstr ""
+
+msgid "Scoped issue boards"
+msgstr ""
+
+msgid "Scoped label"
+msgstr ""
+
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
+msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
+msgstr ""
+
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
+msgid "Scroll to bottom"
+msgstr ""
+
+msgid "Scroll to top"
+msgstr ""
+
+msgid "Scroll up"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search an environment spec"
+msgstr ""
+
+msgid "Search branches"
+msgstr ""
+
+msgid "Search branches and tags"
+msgstr ""
+
+msgid "Search files"
+msgstr ""
+
+msgid "Search for a LDAP group"
+msgstr ""
+
+msgid "Search for a group"
+msgstr ""
+
+msgid "Search for a user"
+msgstr ""
+
+msgid "Search for projects, issues, etc."
+msgstr ""
+
+msgid "Search forks"
+msgstr ""
+
+msgid "Search groups"
+msgstr ""
+
+msgid "Search merge requests"
+msgstr ""
+
+msgid "Search milestones"
+msgstr ""
+
+msgid "Search or filter results..."
+msgstr ""
+
+msgid "Search or jump to…"
+msgstr ""
+
+msgid "Search project"
+msgstr ""
+
+msgid "Search projects"
+msgstr ""
+
+msgid "Search projects..."
+msgstr ""
+
+msgid "Search users"
+msgstr ""
+
+msgid "Search users or groups"
+msgstr ""
+
+msgid "Search your projects"
+msgstr ""
+
+msgid "SearchAutocomplete|All GitLab"
+msgstr ""
+
+msgid "SearchAutocomplete|Issues I've created"
+msgstr ""
+
+msgid "SearchAutocomplete|Issues assigned to me"
+msgstr ""
+
+msgid "SearchAutocomplete|Merge requests I've created"
+msgstr ""
+
+msgid "SearchAutocomplete|Merge requests assigned to me"
+msgstr ""
+
+msgid "SearchAutocomplete|in all GitLab"
+msgstr ""
+
+msgid "SearchAutocomplete|in this group"
+msgstr ""
+
+msgid "SearchAutocomplete|in this project"
+msgstr ""
+
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
+msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
+msgstr ""
+
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Seats currently in use"
+msgstr ""
+
+msgid "Seats in license"
+msgstr ""
+
+msgid "Secret"
+msgstr ""
+
+msgid "Security"
+msgstr ""
+
+msgid "Security & Compliance"
+msgstr ""
+
+msgid "Security Dashboard"
+msgstr ""
+
+msgid "Security Dashboard|Error fetching the dashboard data. Please check your network connection and try again."
+msgstr ""
+
+msgid "Security Dashboard|Error fetching the vulnerability counts. Please check your network connection and try again."
+msgstr ""
+
+msgid "Security Dashboard|Error fetching the vulnerability list. Please check your network connection and try again."
+msgstr ""
+
+msgid "Security Dashboard|Issue Created"
+msgstr ""
+
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Create issue"
+msgstr ""
+
+msgid "Security Reports|Dismiss vulnerability"
+msgstr ""
+
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
+msgid "Security Reports|Learn more about setting up your dashboard"
+msgstr ""
+
+msgid "Security Reports|More info"
+msgstr ""
+
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
+msgid "Security Reports|There was an error creating the issue."
+msgstr ""
+
+msgid "Security Reports|There was an error creating the merge request."
+msgstr ""
+
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
+msgid "Security Reports|There was an error dismissing the vulnerability."
+msgstr ""
+
+msgid "Security Reports|There was an error reverting the dismissal."
+msgstr ""
+
+msgid "Security Reports|There was an error reverting this dismissal."
+msgstr ""
+
+msgid "Security Reports|Undo dismiss"
+msgstr ""
+
+msgid "Security Reports|We've found no vulnerabilities for your group"
+msgstr ""
+
+msgid "Security Reports|While it's rare to have no vulnerabilities for your group, it can happen. In any event, we ask that you please double check your settings to make sure you've set up your dashboard correctly."
+msgstr ""
+
+msgid "Security dashboard"
+msgstr ""
+
+msgid "SecurityDashboard| The security dashboard displays the latest security report. Use it to find and fix vulnerabilities."
+msgstr ""
+
+msgid "SecurityDashboard|Confidence"
+msgstr ""
+
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
+msgid "SecurityDashboard|Monitor vulnerabilities in your code"
+msgstr ""
+
+msgid "SecurityDashboard|Pipeline %{pipelineLink} triggered"
+msgstr ""
+
+msgid "SecurityDashboard|Project"
+msgstr ""
+
+msgid "SecurityDashboard|Report type"
+msgstr ""
+
+msgid "SecurityDashboard|Severity"
+msgstr ""
+
+msgid "See metrics"
+msgstr ""
+
+msgid "See the affected projects in the GitLab admin panel"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Select Archive Format"
+msgstr ""
+
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
+msgid "Select Page"
+msgstr ""
+
+msgid "Select a file from the left sidebar to begin editing. Afterwards, you'll be able to commit your changes."
+msgstr ""
+
+msgid "Select a group to invite"
+msgstr ""
+
+msgid "Select a label"
+msgstr ""
+
+msgid "Select a namespace to fork the project"
+msgstr ""
+
+msgid "Select a new namespace"
+msgstr ""
+
+msgid "Select a project"
+msgstr ""
+
+msgid "Select a project to read Insights configuration file"
+msgstr ""
+
+msgid "Select a repository"
+msgstr ""
+
+msgid "Select a template repository"
+msgstr ""
+
+msgid "Select a timezone"
+msgstr ""
+
+msgid "Select all"
+msgstr ""
+
+msgid "Select an existing Kubernetes cluster or create a new one"
+msgstr ""
+
+msgid "Select branch/tag"
+msgstr ""
+
+msgid "Select group or project"
+msgstr ""
+
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
+msgstr ""
+
+msgid "Select project"
+msgstr ""
+
+msgid "Select project and zone to choose machine type"
+msgstr ""
+
+msgid "Select project to choose zone"
+msgstr ""
+
+msgid "Select projects"
+msgstr ""
+
+msgid "Select projects you want to import."
+msgstr ""
+
+msgid "Select source branch"
+msgstr ""
+
+msgid "Select target branch"
+msgstr ""
+
+msgid "Select the branch you want to set as the default for this project. All merge requests and commits will automatically be made against this branch unless you specify a different one."
+msgstr ""
+
+msgid "Select the custom project template source group."
+msgstr ""
+
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
+msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
+msgstr ""
+
+msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
+msgstr ""
+
+msgid "Send a separate email notification to Developers."
+msgstr ""
+
+msgid "Send confirmation email"
+msgstr ""
+
+msgid "Send email"
+msgstr ""
+
+msgid "Send report"
+msgstr ""
+
+msgid "Send usage data"
+msgstr ""
+
+msgid "Sentry API URL"
+msgstr ""
+
+msgid "Sep"
+msgstr ""
+
+msgid "Separate topics with commas."
+msgstr ""
+
+msgid "September"
+msgstr ""
+
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
+msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
+msgstr ""
+
+msgid "Server version"
+msgstr ""
+
+msgid "Serverless"
+msgstr ""
+
+msgid "ServerlessDetails|Function invocation metrics require Prometheus to be installed first."
+msgstr ""
+
+msgid "ServerlessDetails|Install Prometheus"
+msgstr ""
+
+msgid "ServerlessDetails|Invocation metrics loading or not available at this time."
+msgstr ""
+
+msgid "ServerlessDetails|Invocations"
+msgstr ""
+
+msgid "ServerlessDetails|Kubernetes Pods"
+msgstr ""
+
+msgid "ServerlessDetails|More information"
+msgstr ""
+
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
+msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
+msgstr ""
+
+msgid "ServerlessDetails|pod in use"
+msgstr ""
+
+msgid "ServerlessDetails|pods in use"
+msgstr ""
+
+msgid "ServerlessURL|Copy URL to clipboard"
+msgstr ""
+
+msgid "Serverless| In order to start using functions as a service, you must first install Knative on your Kubernetes cluster."
+msgstr ""
+
+msgid "Serverless|Getting started with serverless"
+msgstr ""
+
+msgid "Serverless|If you believe none of these apply, please check back later as the function data may be in the process of becoming available."
+msgstr ""
+
+msgid "Serverless|Install Knative"
+msgstr ""
+
+msgid "Serverless|Learn more about Serverless"
+msgstr ""
+
+msgid "Serverless|No functions available"
+msgstr ""
+
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
+msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
+msgstr ""
+
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
+msgid "Service"
+msgstr ""
+
+msgid "Service Desk"
+msgstr ""
+
+msgid "Service Templates"
+msgstr ""
+
+msgid "Service URL"
+msgstr ""
+
+msgid "Session duration (minutes)"
+msgstr ""
+
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Set a default template for issue descriptions."
+msgstr ""
+
+msgid "Set a number of approvals required, the approvers and other approval settings."
+msgstr ""
+
+msgid "Set a password on your account to pull or push via %{protocol}."
+msgstr ""
+
+msgid "Set a template repository for projects in this group"
+msgstr ""
+
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set due date"
+msgstr ""
+
+msgid "Set instance-wide template repository"
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set milestone"
+msgstr ""
+
+msgid "Set new password"
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set parent epic to an epic"
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
+msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
+msgstr ""
+
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
+msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
+msgstr ""
+
+msgid "Set the maximum file size for each job's artifacts"
+msgstr ""
+
+msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
+msgstr ""
+
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
+msgid "Set time estimate"
+msgstr ""
+
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
+msgid "Set up CI/CD"
+msgstr ""
+
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
+msgid "Set up a %{type} Runner manually"
+msgstr ""
+
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
+msgid "Set up new U2F device"
+msgstr ""
+
+msgid "Set up new password"
+msgstr ""
+
+msgid "Set up your project to automatically push and/or pull changes to/from another repository. Branches, tags, and commits will be synced automatically."
+msgstr ""
+
+msgid "Set weight"
+msgstr ""
+
+msgid "Set weight to %{weight}."
+msgstr ""
+
+msgid "SetPasswordToCloneLink|set a password"
+msgstr ""
+
+msgid "SetStatusModal|Add status emoji"
+msgstr ""
+
+msgid "SetStatusModal|Clear status"
+msgstr ""
+
+msgid "SetStatusModal|Edit status"
+msgstr ""
+
+msgid "SetStatusModal|Remove status"
+msgstr ""
+
+msgid "SetStatusModal|Set a status"
+msgstr ""
+
+msgid "SetStatusModal|Set status"
+msgstr ""
+
+msgid "SetStatusModal|Sorry, we weren't able to set your status. Please try again later."
+msgstr ""
+
+msgid "SetStatusModal|What's your status?"
+msgstr ""
+
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
+msgid "Sets the due date to %{due_date}."
+msgstr ""
+
+msgid "Sets the milestone to %{milestone_reference}."
+msgstr ""
+
+msgid "Sets time estimate to %{time_estimate}."
+msgstr ""
+
+msgid "Sets weight to %{weight}."
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Share"
+msgstr ""
+
+msgid "Share the <strong>%{sso_label}</strong> with members so they can sign in to your group through your identity provider"
+msgstr ""
+
+msgid "Shared Runners"
+msgstr ""
+
+msgid "Shared projects"
+msgstr ""
+
+msgid "Shared runners help link"
+msgstr ""
+
+msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
+msgstr ""
+
+msgid "SharedRunnersMinutesSettings|Reset pipeline minutes"
+msgstr ""
+
+msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes"
+msgstr ""
+
+msgid "Sherlock Transactions"
+msgstr ""
+
+msgid "Should you ever lose your phone or access to your one time password secret, each of these recovery codes can be used one time each to regain access to your account. Please save them in a safe place, or you %{b_start}will%{b_end} lose access to your account."
+msgstr ""
+
+msgid "Show all activity"
+msgstr ""
+
+msgid "Show archived projects"
+msgstr ""
+
+msgid "Show archived projects only"
+msgstr ""
+
+msgid "Show command"
+msgstr ""
+
+msgid "Show comments"
+msgstr ""
+
+msgid "Show comments only"
+msgstr ""
+
+msgid "Show commit description"
+msgstr ""
+
+msgid "Show complete raw log"
+msgstr ""
+
+msgid "Show file browser"
+msgstr ""
+
+msgid "Show latest version"
+msgstr ""
+
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
+msgid "Show whitespace changes"
+msgstr ""
+
+msgid "Showing %d event"
+msgid_plural "Showing %d events"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
+msgid "Side-by-side"
+msgstr ""
+
+msgid "Sidebar|Change weight"
+msgstr ""
+
+msgid "Sidebar|None"
+msgstr ""
+
+msgid "Sidebar|Only numeral characters allowed"
+msgstr ""
+
+msgid "Sidebar|Weight"
+msgstr ""
+
+msgid "Sign in"
+msgstr ""
+
+msgid "Sign in / Register"
+msgstr ""
+
+msgid "Sign in to \"%{group_name}\""
+msgstr ""
+
+msgid "Sign in using smart card"
+msgstr ""
+
+msgid "Sign in via 2FA code"
+msgstr ""
+
+msgid "Sign in with Google"
+msgstr ""
+
+msgid "Sign in with Single Sign-On"
+msgstr ""
+
+msgid "Sign in with smart card"
+msgstr ""
+
+msgid "Sign out"
+msgstr ""
+
+msgid "Sign out & Register"
+msgstr ""
+
+msgid "Sign up"
+msgstr ""
+
+msgid "Sign up was successful! Please confirm your email to sign in."
+msgstr ""
+
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Username is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "Signed in"
+msgstr ""
+
+msgid "Signed in with %{authentication} authentication"
+msgstr ""
+
+msgid "Signing in using %{label} has been disabled"
+msgstr ""
+
+msgid "Signing in using your %{label} account without a pre-existing GitLab account is not allowed."
+msgstr ""
+
+msgid "Similar issues"
+msgstr ""
+
+msgid "Single or combined queries"
+msgstr ""
+
+msgid "Site ID"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Size limit per repository (MB)"
+msgstr ""
+
+msgid "Skip this for now"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
+msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
+msgstr ""
+
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
+msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
+msgstr ""
+
+msgid "Smartcard"
+msgstr ""
+
+msgid "Smartcard authentication failed: client certificate header is missing."
+msgstr ""
+
+msgid "Snippet Contents"
+msgstr ""
+
+msgid "Snippets"
+msgstr ""
+
+msgid "SnippetsEmptyState|Explore public snippets"
+msgstr ""
+
+msgid "SnippetsEmptyState|New snippet"
+msgstr ""
+
+msgid "SnippetsEmptyState|No snippets found"
+msgstr ""
+
+msgid "SnippetsEmptyState|Snippets are small pieces of code or notes that you want to keep."
+msgstr ""
+
+msgid "SnippetsEmptyState|There are no snippets to show."
+msgstr ""
+
+msgid "SnippetsEmptyState|They can be either public or private."
+msgstr ""
+
+msgid "Snowplow"
+msgstr ""
+
+msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
+msgstr ""
+
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
+msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
+msgstr ""
+
+msgid "Someone edited this merge request at the same time you did. Please refresh the page to see changes."
+msgstr ""
+
+msgid "Something went wrong on our end"
+msgstr ""
+
+msgid "Something went wrong on our end."
+msgstr ""
+
+msgid "Something went wrong on our end. Please try again!"
+msgstr ""
+
+msgid "Something went wrong on our end. Please try again."
+msgstr ""
+
+msgid "Something went wrong trying to change the confidentiality of this issue"
+msgstr ""
+
+msgid "Something went wrong trying to change the locked state of this %{issuableDisplayName}"
+msgstr ""
+
+msgid "Something went wrong when toggling the button"
+msgstr ""
+
+msgid "Something went wrong while adding your award. Please try again."
+msgstr ""
+
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
+msgid "Something went wrong while applying the suggestion. Please try again."
+msgstr ""
+
+msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgstr ""
+
+msgid "Something went wrong while deleting the source branch. Please try again."
+msgstr ""
+
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
+msgid "Something went wrong while fetching %{listType} list"
+msgstr ""
+
+msgid "Something went wrong while fetching comments. Please try again."
+msgstr ""
+
+msgid "Something went wrong while fetching group member contributions"
+msgstr ""
+
+msgid "Something went wrong while fetching latest comments."
+msgstr ""
+
+msgid "Something went wrong while fetching related merge requests."
+msgstr ""
+
+msgid "Something went wrong while fetching the environments for this merge request. Please try again."
+msgstr ""
+
+msgid "Something went wrong while fetching the projects."
+msgstr ""
+
+msgid "Something went wrong while fetching the registry list."
+msgstr ""
+
+msgid "Something went wrong while merging this merge request. Please try again."
+msgstr ""
+
+msgid "Something went wrong while reopening the %{issuable}. Please try again later"
+msgstr ""
+
+msgid "Something went wrong while resolving this discussion. Please try again."
+msgstr ""
+
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
+msgid "Something went wrong, unable to add %{project} to dashboard"
+msgstr ""
+
+msgid "Something went wrong, unable to get projects"
+msgstr ""
+
+msgid "Something went wrong, unable to remove project"
+msgstr ""
+
+msgid "Something went wrong, unable to search projects"
+msgstr ""
+
+msgid "Something went wrong. Please try again."
+msgstr ""
+
+msgid "Something went wrong. Try again later."
+msgstr ""
+
+msgid "Sorry, no epics matched your search"
+msgstr ""
+
+msgid "Sorry, no projects matched your search"
+msgstr ""
+
+msgid "Sorry, your filter produced no results"
+msgstr ""
+
+msgid "Sort by"
+msgstr ""
+
+msgid "Sort direction"
+msgstr ""
+
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Expired date"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last Contact"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Manual"
+msgstr ""
+
+msgid "SortOptions|Milestone due date"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Most stars"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest last activity"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent last activity"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
+msgid "SortOptions|Sort direction"
+msgstr ""
+
+msgid "SortOptions|Stars"
+msgstr ""
+
+msgid "SortOptions|Start date"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Source (branch or tag)"
+msgstr ""
+
+msgid "Source code"
+msgstr ""
+
+msgid "Source is not available"
+msgstr ""
+
+msgid "Source project cannot be found."
+msgstr ""
+
+msgid "Spam Logs"
+msgstr ""
+
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
+msgid "Spam log successfully submitted as ham."
+msgstr ""
+
+msgid "Specific Runners"
+msgstr ""
+
+msgid "Specify an e-mail address regex pattern to identify default internal users."
+msgstr ""
+
+msgid "Specify the following URL during the Runner setup:"
+msgstr ""
+
+msgid "Squash commit message"
+msgstr ""
+
+msgid "Squash commits"
+msgstr ""
+
+msgid "Stage"
+msgstr ""
+
+msgid "Stage & Commit"
+msgstr ""
+
+msgid "Stage all changes"
+msgstr ""
+
+msgid "Stage changes"
+msgstr ""
+
+msgid "Staged"
+msgstr ""
+
+msgid "Staged %{type}"
+msgstr ""
+
+msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
+msgstr ""
+
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
+msgid "Star toggle failed. Try again later."
+msgstr ""
+
+msgid "StarProject|Star"
+msgstr ""
+
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
+msgid "Starred projects"
+msgstr ""
+
+msgid "StarredProjectsEmptyState|Visit a project page and press on a star icon. Then, you can find the project on this page."
+msgstr ""
+
+msgid "StarredProjectsEmptyState|You don't have starred projects yet."
+msgstr ""
+
+msgid "Starrers"
+msgstr ""
+
+msgid "Stars"
+msgstr ""
+
+msgid "Start GitLab Ultimate trial"
+msgstr ""
+
+msgid "Start Web Terminal"
+msgstr ""
+
+msgid "Start a %{new_merge_request} with these changes"
+msgstr ""
+
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
+msgid "Start a new merge request"
+msgstr ""
+
+msgid "Start a review"
+msgstr ""
+
+msgid "Start and due date"
+msgstr ""
+
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
+msgid "Start cleanup"
+msgstr ""
+
+msgid "Start date"
+msgstr ""
+
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
+msgstr ""
+
+msgid "Start search"
+msgstr ""
+
+msgid "Start the Runner!"
+msgstr ""
+
+msgid "Start thread"
+msgstr ""
+
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
+
+msgid "Start your trial"
+msgstr ""
+
+msgid "Started"
+msgstr ""
+
+msgid "Started %{startsIn}"
+msgstr ""
+
+msgid "Started asynchronous removal of all repository check states."
+msgstr ""
+
+msgid "Starting..."
+msgstr ""
+
+msgid "Starts %{startsIn}"
+msgstr ""
+
+msgid "Starts at (UTC)"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Statistics"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "Status:"
+msgstr ""
+
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
+msgid "Stop Terminal"
+msgstr ""
+
+msgid "Stop environment"
+msgstr ""
+
+msgid "Stop impersonation"
+msgstr ""
+
+msgid "Stop this environment"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "Stopping this environment is currently not possible as a deployment is in progress"
+msgstr ""
+
+msgid "Stopping..."
+msgstr ""
+
+msgid "Storage"
+msgstr ""
+
+msgid "Storage:"
+msgstr ""
+
+msgid "StorageSize|Unknown"
+msgstr ""
+
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
+msgid "Subgroups"
+msgstr ""
+
+msgid "Subgroups and projects"
+msgstr ""
+
+msgid "Subkeys"
+msgstr ""
+
+msgid "Submit as spam"
+msgstr ""
+
+msgid "Submit feedback"
+msgstr ""
+
+msgid "Submit issue"
+msgstr ""
+
+msgid "Submit review"
+msgstr ""
+
+msgid "Submit search"
+msgstr ""
+
+msgid "Subscribe"
+msgstr ""
+
+msgid "Subscribe at group level"
+msgstr ""
+
+msgid "Subscribe at project level"
+msgstr ""
+
+msgid "Subscribe to RSS feed"
+msgstr ""
+
+msgid "Subscribe to calendar"
+msgstr ""
+
+msgid "Subscribed"
+msgstr ""
+
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscription"
+msgstr ""
+
+msgid "SubscriptionTable|Billing"
+msgstr ""
+
+msgid "SubscriptionTable|Free"
+msgstr ""
+
+msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
+msgstr ""
+
+msgid "SubscriptionTable|Last invoice"
+msgstr ""
+
+msgid "SubscriptionTable|Loading subscriptions"
+msgstr ""
+
+msgid "SubscriptionTable|Manage"
+msgstr ""
+
+msgid "SubscriptionTable|Max seats used"
+msgstr ""
+
+msgid "SubscriptionTable|Next invoice"
+msgstr ""
+
+msgid "SubscriptionTable|Seats currently in use"
+msgstr ""
+
+msgid "SubscriptionTable|Seats in subscription"
+msgstr ""
+
+msgid "SubscriptionTable|Seats owed"
+msgstr ""
+
+msgid "SubscriptionTable|Subscription end date"
+msgstr ""
+
+msgid "SubscriptionTable|Subscription start date"
+msgstr ""
+
+msgid "SubscriptionTable|This is the last time the GitLab.com team was in contact with you to settle any outstanding balances."
+msgstr ""
+
+msgid "SubscriptionTable|This is the maximum number of users that have existed at the same time since this subscription started."
+msgstr ""
+
+msgid "SubscriptionTable|This is the next date when the GitLab.com team is scheduled to get in contact with you to settle any outstanding balances."
+msgstr ""
+
+msgid "SubscriptionTable|This is the number of seats you will be required to purchase if you update to a paid plan."
+msgstr ""
+
+msgid "SubscriptionTable|Trial"
+msgstr ""
+
+msgid "SubscriptionTable|Trial end date"
+msgstr ""
+
+msgid "SubscriptionTable|Trial start date"
+msgstr ""
+
+msgid "SubscriptionTable|Upgrade"
+msgstr ""
+
+msgid "SubscriptionTable|Usage"
+msgstr ""
+
+msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
+msgstr ""
+
+msgid "Subtracted"
+msgstr ""
+
+msgid "Subtracts"
+msgstr ""
+
+msgid "Successfully blocked"
+msgstr ""
+
+msgid "Successfully confirmed"
+msgstr ""
+
+msgid "Successfully deleted U2F device."
+msgstr ""
+
+msgid "Successfully removed email."
+msgstr ""
+
+msgid "Successfully scheduled a pipeline to run. Go to the %{pipelines_link_start}Pipelines page%{pipelines_link_end} for details."
+msgstr ""
+
+msgid "Successfully unblocked"
+msgstr ""
+
+msgid "Successfully unlocked"
+msgstr ""
+
+msgid "Suggest code changes which are immediately applied. Try it out!"
+msgstr ""
+
+msgid "Suggested change"
+msgstr ""
+
+msgid "SuggestedColors|Bright green"
+msgstr ""
+
+msgid "SuggestedColors|Dark grayish cyan"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate blue"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate orange"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate pink"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate violet"
+msgstr ""
+
+msgid "SuggestedColors|Feijoa"
+msgstr ""
+
+msgid "SuggestedColors|Lime green"
+msgstr ""
+
+msgid "SuggestedColors|Moderate blue"
+msgstr ""
+
+msgid "SuggestedColors|Pure red"
+msgstr ""
+
+msgid "SuggestedColors|Slightly desaturated blue"
+msgstr ""
+
+msgid "SuggestedColors|Slightly desaturated green"
+msgstr ""
+
+msgid "SuggestedColors|Soft orange"
+msgstr ""
+
+msgid "SuggestedColors|Soft red"
+msgstr ""
+
+msgid "SuggestedColors|Strong pink"
+msgstr ""
+
+msgid "SuggestedColors|Strong red"
+msgstr ""
+
+msgid "SuggestedColors|Strong yellow"
+msgstr ""
+
+msgid "SuggestedColors|UA blue"
+msgstr ""
+
+msgid "SuggestedColors|Very dark desaturated blue"
+msgstr ""
+
+msgid "SuggestedColors|Very dark lime green"
+msgstr ""
+
+msgid "SuggestedColors|Very pale orange"
+msgstr ""
+
+msgid "Suggestions:"
+msgstr ""
+
+msgid "Sunday"
+msgstr ""
+
+msgid "Support"
+msgstr ""
+
+msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
+msgstr ""
+
+msgid "Support page URL"
+msgstr ""
+
+msgid "Switch branch/tag"
+msgstr ""
+
+msgid "Switch to GitLab Next"
+msgstr ""
+
+msgid "Switch to the source to copy it to the clipboard"
+msgstr ""
+
+msgid "Sync information"
+msgstr ""
+
+msgid "System"
+msgstr ""
+
+msgid "System Hooks"
+msgstr ""
+
+msgid "System Hooks Help"
+msgstr ""
+
+msgid "System Info"
+msgstr ""
+
+msgid "System default (%{default})"
+msgstr ""
+
+msgid "System header and footer"
+msgstr ""
+
+msgid "System hook was successfully updated."
+msgstr ""
+
+msgid "System metrics (Custom)"
+msgstr ""
+
+msgid "System metrics (Kubernetes)"
+msgstr ""
+
+msgid "Table of Contents"
+msgstr ""
+
+msgid "Tag"
+msgstr ""
+
+msgid "Tag list:"
+msgstr ""
+
+msgid "Tag this commit."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
+msgid "Tags feed"
+msgstr ""
+
+msgid "Tags this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tags this commit to %{tag_name}."
+msgstr ""
+
+msgid "Tags:"
+msgstr ""
+
+msgid "TagsPage|Browse commits"
+msgstr ""
+
+msgid "TagsPage|Browse files"
+msgstr ""
+
+msgid "TagsPage|Can't find HEAD commit for this tag"
+msgstr ""
+
+msgid "TagsPage|Cancel"
+msgstr ""
+
+msgid "TagsPage|Create tag"
+msgstr ""
+
+msgid "TagsPage|Delete tag"
+msgstr ""
+
+msgid "TagsPage|Deleting the %{tag_name} tag cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "TagsPage|Edit release notes"
+msgstr ""
+
+msgid "TagsPage|Existing branch name, tag, or commit SHA"
+msgstr ""
+
+msgid "TagsPage|Filter by tag name"
+msgstr ""
+
+msgid "TagsPage|New Tag"
+msgstr ""
+
+msgid "TagsPage|New tag"
+msgstr ""
+
+msgid "TagsPage|Optionally, add a message to the tag."
+msgstr ""
+
+msgid "TagsPage|Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page."
+msgstr ""
+
+msgid "TagsPage|Release notes"
+msgstr ""
+
+msgid "TagsPage|Repository has no tags yet."
+msgstr ""
+
+msgid "TagsPage|Sort by"
+msgstr ""
+
+msgid "TagsPage|Tags"
+msgstr ""
+
+msgid "TagsPage|Tags give the ability to mark specific points in history as being important"
+msgstr ""
+
+msgid "TagsPage|This tag has no release notes."
+msgstr ""
+
+msgid "TagsPage|Use git tag command to add a new one:"
+msgstr ""
+
+msgid "TagsPage|Write your release notes or drag files here…"
+msgstr ""
+
+msgid "TagsPage|protected"
+msgstr ""
+
+msgid "Target Branch"
+msgstr ""
+
+msgid "Target branch"
+msgstr ""
+
+msgid "Team"
+msgstr ""
+
+msgid "Team domain"
+msgstr ""
+
+msgid "Template"
+msgstr ""
+
+msgid "Templates"
+msgstr ""
+
+msgid "Terminal"
+msgstr ""
+
+msgid "Terminal for environment"
+msgstr ""
+
+msgid "Terminal sync service is running"
+msgstr ""
+
+msgid "Terms of Service Agreement and Privacy Policy"
+msgstr ""
+
+msgid "Terms of Service and Privacy Policy"
+msgstr ""
+
+msgid "Test SAML SSO"
+msgstr ""
+
+msgid "Test coverage parsing"
+msgstr ""
+
+msgid "Test failed."
+msgstr ""
+
+msgid "Test settings and save changes"
+msgstr ""
+
+msgid "TestHooks|Ensure one of your projects has merge requests."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has CI jobs."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has CI pipelines."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has at least one commit."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has issues."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has merge requests."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has notes."
+msgstr ""
+
+msgid "TestHooks|Ensure the wiki is enabled and has pages."
+msgstr ""
+
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
+msgid "Thank you for your report. A GitLab administrator will look into it shortly."
+msgstr ""
+
+msgid "Thanks! Don't show me this again"
+msgstr ""
+
+msgid "The \"%{group_path}\" group allows you to sign in with your Single Sign-On Account"
+msgstr ""
+
+msgid "The %{type} contains the following error:"
+msgid_plural "The %{type} contains the following errors:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The API path was not specified."
+msgstr ""
+
+msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
+msgstr ""
+
+msgid "The CSV export will be created in the background. Once finished, it will be sent to <strong>%{email}</strong> in an attachment."
+msgstr ""
+
+msgid "The Git LFS objects will <strong>not</strong> be synced."
+msgstr ""
+
+msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project"
+msgstr ""
+
+msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
+msgstr ""
+
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
+msgid "The amount of seconds after which a request to get a secondary node status will time out."
+msgstr ""
+
+msgid "The branch for this project has no active pipeline configuration."
+msgstr ""
+
+msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
+msgstr ""
+
+msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
+msgstr ""
+
+msgid "The collection of events added to the data gathered for that stage."
+msgstr ""
+
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
+msgid "The content of this page is not encoded in UTF-8. Edits can only be made via the Git repository."
+msgstr ""
+
+msgid "The dependency list details information about the components used within your project."
+msgstr ""
+
+msgid "The deployment of this job to %{environmentLink} did not succeed."
+msgstr ""
+
+msgid "The directory has been successfully created."
+msgstr ""
+
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
+msgid "The entered user map is not a valid JSON user map."
+msgstr ""
+
+msgid "The file has been successfully created."
+msgstr ""
+
+msgid "The file has been successfully deleted."
+msgstr ""
+
+msgid "The following items will NOT be exported:"
+msgstr ""
+
+msgid "The following items will be exported:"
+msgstr ""
+
+msgid "The fork relationship has been removed."
+msgstr ""
+
+msgid "The global settings require you to enable Two-Factor Authentication for your account."
+msgstr ""
+
+msgid "The group and any internal projects can be viewed by any logged in user."
+msgstr ""
+
+msgid "The group and any public projects can be viewed without any authentication."
+msgstr ""
+
+msgid "The group and its projects can only be viewed by members."
+msgstr ""
+
+msgid "The group settings for %{group_links} require you to enable Two-Factor Authentication for your account. You can %{leave_group_links}."
+msgstr ""
+
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
+msgid "The invitation could not be accepted."
+msgstr ""
+
+msgid "The invitation could not be declined."
+msgstr ""
+
+msgid "The invitation has already been accepted."
+msgstr ""
+
+msgid "The invitation was successfully resent."
+msgstr ""
+
+msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
+msgstr ""
+
+msgid "The license was removed. GitLab has fallen back on the previous license."
+msgstr ""
+
+msgid "The license was removed. GitLab now no longer has a valid license."
+msgstr ""
+
+msgid "The license was successfully uploaded and is now active. You can see the details below."
+msgstr ""
+
+msgid "The maximum file size allowed is %{size}."
+msgstr ""
+
+msgid "The maximum file size allowed is 200KB."
+msgstr ""
+
+msgid "The merge conflicts for this merge request cannot be resolved through GitLab. Please try to resolve them locally."
+msgstr ""
+
+msgid "The merge conflicts for this merge request have already been resolved."
+msgstr ""
+
+msgid "The merge conflicts for this merge request have already been resolved. Please return to the merge request."
+msgstr ""
+
+msgid "The name %{entryName} is already taken in this directory."
+msgstr ""
+
+msgid "The number of changes to be fetched from GitLab when cloning a repository. This can speed up Pipelines execution. Keep empty or set to 0 to disable shallow clone by default and make GitLab CI fetch all branches and tags each time."
+msgstr ""
+
+msgid "The number of times an upload record could not find its file"
+msgstr ""
+
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
+msgid "The path to CI config file. Defaults to <code>.gitlab-ci.yml</code>"
+msgstr ""
+
+msgid "The phase of the development lifecycle."
+msgstr ""
+
+msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user."
+msgstr ""
+
+msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
+msgstr ""
+
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
+msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
+msgstr ""
+
+msgid "The project can be accessed by any logged in user."
+msgstr ""
+
+msgid "The project can be accessed by any user who is logged in."
+msgstr ""
+
+msgid "The project can be accessed by anyone, regardless of authentication."
+msgstr ""
+
+msgid "The project can be accessed without any authentication."
+msgstr ""
+
+msgid "The project is accessible only by members of the project. Access must be granted explicitly to each user."
+msgstr ""
+
+msgid "The project is still being deleted. Please try again later."
+msgstr ""
+
+msgid "The project was successfully forked."
+msgstr ""
+
+msgid "The project was successfully imported."
+msgstr ""
+
+msgid "The pseudonymizer data collection is disabled. When enabled, GitLab will run a background job that will produce pseudonymized CSVs of the GitLab database that will be uploaded to your configured object storage directory."
+msgstr ""
+
+msgid "The remote mirror took to long to complete."
+msgstr ""
+
+msgid "The remote repository is being updated..."
+msgstr ""
+
+msgid "The repository for this project does not exist."
+msgstr ""
+
+msgid "The repository for this project is empty"
+msgstr ""
+
+msgid "The repository is being updated..."
+msgstr ""
+
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
+msgstr ""
+
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
+
+msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
+msgstr ""
+
+msgid "The roadmap shows the progress of your epics along a timeline"
+msgstr ""
+
+msgid "The schedule time must be in the future!"
+msgstr ""
+
+msgid "The snippet can be accessed without any authentication."
+msgstr ""
+
+msgid "The snippet is visible only to me."
+msgstr ""
+
+msgid "The snippet is visible only to project members."
+msgstr ""
+
+msgid "The snippet is visible to any logged in user."
+msgstr ""
+
+msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
+msgstr ""
+
+msgid "The target element is missing."
+msgstr ""
+
+msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
+msgstr ""
+
+msgid "The time taken by each data entry gathered by that stage."
+msgstr ""
+
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
+msgstr ""
+
+msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
+msgstr ""
+
+msgid "The uploaded file is not a valid Google Takeout archive."
+msgstr ""
+
+msgid "The usage ping is disabled, and cannot be configured through this form."
+msgstr ""
+
+msgid "The user is being deleted."
+msgstr ""
+
+msgid "The user map has been saved. Continue by selecting the projects you want to import."
+msgstr ""
+
+msgid "The user map is a JSON document mapping the Google Code users that participated on your projects to the way their email addresses and usernames will be imported into GitLab. You can change this by changing the value on the right hand side of <code>:</code>. Be sure to preserve the surrounding double quotes, other punctuation and the email address or username on the left hand side."
+msgstr ""
+
+msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
+msgstr ""
+
+msgid "The user-facing URL of the Geo node"
+msgstr ""
+
+msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
+msgstr ""
+
+msgid "There are no GPG keys associated with this account."
+msgstr ""
+
+msgid "There are no GPG keys with access to your account."
+msgstr ""
+
+msgid "There are no SSH keys associated with this account."
+msgstr ""
+
+msgid "There are no SSH keys with access to your account."
+msgstr ""
+
+msgid "There are no archived projects yet"
+msgstr ""
+
+msgid "There are no charts configured for this page"
+msgstr ""
+
+msgid "There are no closed issues"
+msgstr ""
+
+msgid "There are no closed merge requests"
+msgstr ""
+
+msgid "There are no custom project templates set up for this GitLab instance. They are enabled from GitLab's Admin Area. Contact your GitLab instance administrator to setup custom project templates."
+msgstr ""
+
+msgid "There are no issues to show"
+msgstr ""
+
+msgid "There are no issues to show."
+msgstr ""
+
+msgid "There are no labels yet"
+msgstr ""
+
+msgid "There are no matching files"
+msgstr ""
+
+msgid "There are no open issues"
+msgstr ""
+
+msgid "There are no open merge requests"
+msgstr ""
+
+msgid "There are no packages yet"
+msgstr ""
+
+msgid "There are no projects shared with this group yet"
+msgstr ""
+
+msgid "There are no staged changes"
+msgstr ""
+
+msgid "There are no unstaged changes"
+msgstr ""
+
+msgid "There is already a repository with that name on disk"
+msgstr ""
+
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
+msgid "There was a problem communicating with your device."
+msgstr ""
+
+msgid "There was a problem sending the confirmation email"
+msgstr ""
+
+msgid "There was an error %{message} todo."
+msgstr ""
+
+msgid "There was an error adding a To Do."
+msgstr ""
+
+msgid "There was an error creating the issue"
+msgstr ""
+
+msgid "There was an error deleting the To Do."
+msgstr ""
+
+msgid "There was an error fetching configuration for charts"
+msgstr ""
+
+msgid "There was an error fetching the form data"
+msgstr ""
+
+msgid "There was an error gathering the chart data"
+msgstr ""
+
+msgid "There was an error loading users activity calendar."
+msgstr ""
+
+msgid "There was an error removing the e-mail."
+msgstr ""
+
+msgid "There was an error resetting group pipeline minutes."
+msgstr ""
+
+msgid "There was an error resetting user pipeline minutes."
+msgstr ""
+
+msgid "There was an error saving your changes."
+msgstr ""
+
+msgid "There was an error saving your notification settings."
+msgstr ""
+
+msgid "There was an error subscribing to this label."
+msgstr ""
+
+msgid "There was an error trying to validate your query"
+msgstr ""
+
+msgid "There was an error when reseting email token."
+msgstr ""
+
+msgid "There was an error when subscribing to this label."
+msgstr ""
+
+msgid "There was an error when unsubscribing from this label."
+msgstr ""
+
+msgid "There was an error while fetching cycle analytics data."
+msgstr ""
+
+msgid "There was an error with the reCAPTCHA. Please solve the reCAPTCHA again."
+msgstr ""
+
+msgid "These existing issues have a similar title. It might be better to comment there instead of creating another similar issue."
+msgstr ""
+
+msgid "They can be managed using the %{link}."
+msgstr ""
+
+msgid "Third party offers"
+msgstr ""
+
+msgid "This %{issuableDisplayName} is locked. Only project members can comment."
+msgstr ""
+
+msgid "This %{issuable} is locked. Only <strong>project members</strong> can comment."
+msgstr ""
+
+msgid "This %{viewer} could not be displayed because %{reason}. You can %{options} instead."
+msgstr ""
+
+msgid "This GitLab instance does not provide any shared Runners yet. Instance administrators can register shared Runners in the admin area."
+msgstr ""
+
+msgid "This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention."
+msgstr ""
+
+msgid "This also resolves the discussion"
+msgstr ""
+
+msgid "This application was created by %{link_to_owner}."
+msgstr ""
+
+msgid "This application will be able to:"
+msgstr ""
+
+msgid "This block is self-referential"
+msgstr ""
+
+msgid "This board's scope is reduced"
+msgstr ""
+
+msgid "This branch has changed since you started editing. Would you like to create a new branch?"
+msgstr ""
+
+msgid "This chart could not be displayed"
+msgstr ""
+
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
+msgstr ""
+
+msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
+msgstr ""
+
+msgid "This commit was signed with a <strong>verified</strong> signature and the committer email is verified to belong to the same user."
+msgstr ""
+
+msgid "This commit was signed with a different user's verified signature."
+msgstr ""
+
+msgid "This commit was signed with a verified signature, but the committer email is <strong>not verified</strong> to belong to the same user."
+msgstr ""
+
+msgid "This commit was signed with an <strong>unverified</strong> signature."
+msgstr ""
+
+msgid "This container registry has been scheduled for deletion."
+msgstr ""
+
+msgid "This date is after the due date, so this epic won't appear in the roadmap."
+msgstr ""
+
+msgid "This date is before the start date, so this epic won't appear in the roadmap."
+msgstr ""
+
+msgid "This device has already been registered with us."
+msgstr ""
+
+msgid "This device has not been registered with us."
+msgstr ""
+
+msgid "This diff is collapsed."
+msgstr ""
+
+msgid "This diff was suppressed by a .gitattributes entry."
+msgstr ""
+
+msgid "This directory"
+msgstr ""
+
+msgid "This domain is not verified. You will need to verify ownership before access is enabled."
+msgstr ""
+
+msgid "This environment has no deployments yet."
+msgstr ""
+
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
+msgid "This field is required."
+msgstr ""
+
+msgid "This group"
+msgstr ""
+
+msgid "This group does not provide any group Runners yet."
+msgstr ""
+
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
+msgstr ""
+
+msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
+msgstr ""
+
+msgid "This is a Work in Progress"
+msgstr ""
+
+msgid "This is a confidential issue."
+msgstr ""
+
+msgid "This is a delayed job to run in %{remainingTime}"
+msgstr ""
+
+msgid "This is a list of devices that have logged into your account. Revoke any sessions that you do not recognize."
+msgstr ""
+
+msgid "This is a security log of important events involving your account."
+msgstr ""
+
+msgid "This is the author's first Merge Request to this project."
+msgstr ""
+
+msgid "This is the maximum number of users that have existed at the same time since the license started. This is the minimum number of seats you will need to buy when you renew your license."
+msgstr ""
+
+msgid "This is your current session"
+msgstr ""
+
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
+msgid "This issue is confidential"
+msgstr ""
+
+msgid "This issue is locked."
+msgstr ""
+
+msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
+msgstr ""
+
+msgid "This job does not have a trace."
+msgstr ""
+
+msgid "This job has been canceled"
+msgstr ""
+
+msgid "This job has been skipped"
+msgstr ""
+
+msgid "This job has not been triggered yet"
+msgstr ""
+
+msgid "This job has not started yet"
+msgstr ""
+
+msgid "This job is an out-of-date deployment to %{environmentLink}."
+msgstr ""
+
+msgid "This job is an out-of-date deployment to %{environmentLink}. View the most recent deployment %{deploymentLink}."
+msgstr ""
+
+msgid "This job is archived. Only the complete pipeline can be retried."
+msgstr ""
+
+msgid "This job is creating a deployment to %{environmentLink} and will overwrite the %{deploymentLink}."
+msgstr ""
+
+msgid "This job is creating a deployment to %{environmentLink}."
+msgstr ""
+
+msgid "This job is in pending state and is waiting to be picked by a runner"
+msgstr ""
+
+msgid "This job is performing tasks that must complete before it can start"
+msgstr ""
+
+msgid "This job is preparing to start"
+msgstr ""
+
+msgid "This job is stuck because you don't have any active runners online with any of these tags assigned to them:"
+msgstr ""
+
+msgid "This job is stuck because you don't have any active runners that can run this job."
+msgstr ""
+
+msgid "This job is the most recent deployment to %{link}."
+msgstr ""
+
+msgid "This job requires a manual action"
+msgstr ""
+
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
+msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
+msgstr ""
+
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
+msgid "This means you can not push code until you create an empty repository or import existing one."
+msgstr ""
+
+msgid "This merge request is locked."
+msgstr ""
+
+msgid "This namespace has already been taken! Please choose another one."
+msgstr ""
+
+msgid "This option is disabled as you don't have write permissions for the current branch"
+msgstr ""
+
+msgid "This page is unavailable because you are not allowed to read information across multiple projects."
+msgstr ""
+
+msgid "This page will be removed in a future release."
+msgstr ""
+
+msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
+msgstr ""
+
+msgid "This pipeline makes use of a predefined CI/CD configuration enabled by <b>Auto DevOps.</b>"
+msgstr ""
+
+msgid "This project"
+msgstr ""
+
+msgid "This project does not belong to a group and can therefore not make use of group Runners."
+msgstr ""
+
+msgid "This project does not have a wiki homepage yet"
+msgstr ""
+
+msgid "This project does not have billing enabled. To create a cluster, <a href=%{linkToBilling} target=\"_blank\" rel=\"noopener noreferrer\">enable billing <i class=\"fa fa-external-link\" aria-hidden=\"true\"></i></a> and try again."
+msgstr ""
+
+msgid "This repository"
+msgstr ""
+
+msgid "This repository is currently empty. A new Auto DevOps pipeline will be created after a new file has been pushed to a branch."
+msgstr ""
+
+msgid "This runner will only run on pipelines triggered on protected branches"
+msgstr ""
+
+msgid "This setting can be overridden in each project."
+msgstr ""
+
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
+msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
+msgstr ""
+
+msgid "This timeout will take precedence when lower than project-defined timeout and accepts a human readable time input language like \"1 hour\". Values without specification represent seconds."
+msgstr ""
+
+msgid "This user cannot be unlocked manually from GitLab"
+msgstr ""
+
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
+msgid "This user has no identities"
+msgstr ""
+
+msgid "This user will be the author of all events in the activity feed that are the result of an update, like new branches being created or new commits being pushed to existing branches."
+msgstr ""
+
+msgid "This user will be the author of all events in the activity feed that are the result of an update, like new branches being created or new commits being pushed to existing branches. Upon creation or when reassigning you can only assign yourself to be the mirror user."
+msgstr ""
+
+msgid "This will redirect you to an external sign in page."
+msgstr ""
+
+msgid "This will remove the fork relationship to source project"
+msgstr ""
+
+msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
+msgstr ""
+
+msgid "Thursday"
+msgstr ""
+
+msgid "Time"
+msgstr ""
+
+msgid "Time based: Yes"
+msgstr ""
+
+msgid "Time before an issue gets scheduled"
+msgstr ""
+
+msgid "Time before an issue starts implementation"
+msgstr ""
+
+msgid "Time before enforced"
+msgstr ""
+
+msgid "Time between merge request creation and merge/close"
+msgstr ""
+
+msgid "Time estimate"
+msgstr ""
+
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
+msgid "Time remaining"
+msgstr ""
+
+msgid "Time spent"
+msgstr ""
+
+msgid "Time to merge"
+msgstr ""
+
+msgid "Time tracking"
+msgstr ""
+
+msgid "Time until first merge request"
+msgstr ""
+
+msgid "TimeTrackingEstimated|Est"
+msgstr ""
+
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
+msgid "TimeTracking|Estimated:"
+msgstr ""
+
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
+msgid "TimeTracking|Spent"
+msgstr ""
+
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
+msgid "Timeago|%s days ago"
+msgstr ""
+
+msgid "Timeago|%s days remaining"
+msgstr ""
+
+msgid "Timeago|%s hours ago"
+msgstr ""
+
+msgid "Timeago|%s hours remaining"
+msgstr ""
+
+msgid "Timeago|%s minutes ago"
+msgstr ""
+
+msgid "Timeago|%s minutes remaining"
+msgstr ""
+
+msgid "Timeago|%s months ago"
+msgstr ""
+
+msgid "Timeago|%s months remaining"
+msgstr ""
+
+msgid "Timeago|%s seconds remaining"
+msgstr ""
+
+msgid "Timeago|%s weeks ago"
+msgstr ""
+
+msgid "Timeago|%s weeks remaining"
+msgstr ""
+
+msgid "Timeago|%s years ago"
+msgstr ""
+
+msgid "Timeago|%s years remaining"
+msgstr ""
+
+msgid "Timeago|1 day ago"
+msgstr ""
+
+msgid "Timeago|1 day remaining"
+msgstr ""
+
+msgid "Timeago|1 hour ago"
+msgstr ""
+
+msgid "Timeago|1 hour remaining"
+msgstr ""
+
+msgid "Timeago|1 minute ago"
+msgstr ""
+
+msgid "Timeago|1 minute remaining"
+msgstr ""
+
+msgid "Timeago|1 month ago"
+msgstr ""
+
+msgid "Timeago|1 month remaining"
+msgstr ""
+
+msgid "Timeago|1 week ago"
+msgstr ""
+
+msgid "Timeago|1 week remaining"
+msgstr ""
+
+msgid "Timeago|1 year ago"
+msgstr ""
+
+msgid "Timeago|1 year remaining"
+msgstr ""
+
+msgid "Timeago|Past due"
+msgstr ""
+
+msgid "Timeago|in %s days"
+msgstr ""
+
+msgid "Timeago|in %s hours"
+msgstr ""
+
+msgid "Timeago|in %s minutes"
+msgstr ""
+
+msgid "Timeago|in %s months"
+msgstr ""
+
+msgid "Timeago|in %s seconds"
+msgstr ""
+
+msgid "Timeago|in %s weeks"
+msgstr ""
+
+msgid "Timeago|in %s years"
+msgstr ""
+
+msgid "Timeago|in 1 day"
+msgstr ""
+
+msgid "Timeago|in 1 hour"
+msgstr ""
+
+msgid "Timeago|in 1 minute"
+msgstr ""
+
+msgid "Timeago|in 1 month"
+msgstr ""
+
+msgid "Timeago|in 1 week"
+msgstr ""
+
+msgid "Timeago|in 1 year"
+msgstr ""
+
+msgid "Timeago|just now"
+msgstr ""
+
+msgid "Timeago|right now"
+msgstr ""
+
+msgid "Timeframe"
+msgstr ""
+
+msgid "Timeout"
+msgstr ""
+
+msgid "Time|hr"
+msgid_plural "Time|hrs"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|min"
+msgid_plural "Time|mins"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|s"
+msgstr ""
+
+msgid "Tip:"
+msgstr ""
+
+msgid "Title"
+msgstr ""
+
+msgid "Title:"
+msgstr ""
+
+msgid "Titles and Filenames"
+msgstr ""
+
+msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
+msgstr ""
+
+msgid "To Do"
+msgstr ""
+
+msgid "To GitLab"
+msgstr ""
+
+msgid "To access this domain create a new DNS record"
+msgstr ""
+
+msgid "To add an SSH key you need to %{generate_link_start}generate one%{link_end} or use an %{existing_link_start}existing key%{link_end}."
+msgstr ""
+
+msgid "To add the entry manually, provide the following details to the application on your phone."
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To define internal users, first enable new users set to external"
+msgstr ""
+
+msgid "To enable it and see User Cohorts, visit %{application_settings_link_start}application settings%{application_settings_link_end}."
+msgstr ""
+
+msgid "To get started you enter your FogBugz URL and login information below. In the next steps, you'll be able to map users and select the projects you want to import."
+msgstr ""
+
+msgid "To get started, link this page to your Jaeger server, or find out how to %{link_start_tag}install Jaeger%{link_end_tag}"
+msgstr ""
+
+msgid "To get started, please enter your Gitea Host URL and a %{link_to_personal_token}."
+msgstr ""
+
+msgid "To help improve GitLab and its user experience, GitLab will periodically collect usage information."
+msgstr ""
+
+msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To keep this project going, create a new issue"
+msgstr ""
+
+msgid "To keep this project going, create a new merge request"
+msgstr ""
+
+msgid "To link Sentry to GitLab, enter your Sentry URL and Auth Token."
+msgstr ""
+
+msgid "To move or copy an entire GitLab project from another GitLab installation to this one, navigate to the original project's settings page, generate an export file, and upload it here."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose <strong>CI/CD for external repo</strong>."
+msgstr ""
+
+msgid "To open Jaeger and easily view tracing from GitLab, link the %{link} page to your server"
+msgstr ""
+
+msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
+msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
+msgstr ""
+
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To set up this service:"
+msgstr ""
+
+msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
+msgstr ""
+
+msgid "To start serving your jobs you can add Runners to your group"
+msgstr ""
+
+msgid "To start serving your jobs you can either add specific Runners to your project or use shared Runners"
+msgstr ""
+
+msgid "To this GitLab instance"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
+msgid "To view the roadmap, add a start or due date to one of your epics in this group or its subgroups. In the months view, only epics in the past month, current month, and next 5 months are shown."
+msgstr ""
+
+msgid "To widen your search, change or remove filters above"
+msgstr ""
+
+msgid "To widen your search, change or remove filters."
+msgstr ""
+
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
+msgid "Today"
+msgstr ""
+
+msgid "Toggle Markdown preview"
+msgstr ""
+
+msgid "Toggle Sidebar"
+msgstr ""
+
+msgid "Toggle backtrace"
+msgstr ""
+
+msgid "Toggle collapse"
+msgstr ""
+
+msgid "Toggle comments for this file"
+msgstr ""
+
+msgid "Toggle commit description"
+msgstr ""
+
+msgid "Toggle commit list"
+msgstr ""
+
+msgid "Toggle emoji award"
+msgstr ""
+
+msgid "Toggle navigation"
+msgstr ""
+
+msgid "Toggle project"
+msgstr ""
+
+msgid "Toggle sidebar"
+msgstr ""
+
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
+msgid "ToggleButton|Toggle Status: OFF"
+msgstr ""
+
+msgid "ToggleButton|Toggle Status: ON"
+msgstr ""
+
+msgid "Toggled :%{name}: emoji award."
+msgstr ""
+
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
+
+msgid "Tomorrow"
+msgstr ""
+
+msgid "Too many changes to show."
+msgstr ""
+
+msgid "Topics"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Total Contributions"
+msgstr ""
+
+msgid "Total Time"
+msgstr ""
+
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
+msgid "Total test time for all commits/merges"
+msgstr ""
+
+msgid "Total: %{total}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "Track activity with Contribution Analytics."
+msgstr ""
+
+msgid "Track groups of issues that share a theme, across projects and milestones"
+msgstr ""
+
+msgid "Track time with quick actions"
+msgstr ""
+
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
+msgid "Transfer project"
+msgstr ""
+
+msgid "TransferGroup|Database is not supported."
+msgstr ""
+
+msgid "TransferGroup|Group is already a root group."
+msgstr ""
+
+msgid "TransferGroup|Group is already associated to the parent group."
+msgstr ""
+
+msgid "TransferGroup|The parent group already has a subgroup with the same path."
+msgstr ""
+
+msgid "TransferGroup|Transfer failed: %{error_message}"
+msgstr ""
+
+msgid "TransferGroup|You don't have enough permissions."
+msgstr ""
+
+msgid "TransferProject|Cannot move project"
+msgstr ""
+
+msgid "TransferProject|Please select a new namespace for your project."
+msgstr ""
+
+msgid "TransferProject|Project cannot be transferred, because tags are present in its container registry"
+msgstr ""
+
+msgid "TransferProject|Project with same name or path in target namespace already exists"
+msgstr ""
+
+msgid "TransferProject|Transfer failed, please contact an admin."
+msgstr ""
+
+msgid "Tree view"
+msgstr ""
+
+msgid "Trending"
+msgstr ""
+
+msgid "Trigger pipelines for mirror updates"
+msgstr ""
+
+msgid "Trigger pipelines when branches or tags are updated from the upstream repository. Depending on the activity of the upstream repository, this may greatly increase the load on your CI runners. Only enable this if you know they can handle the load."
+msgstr ""
+
+msgid "Trigger removed."
+msgstr ""
+
+msgid "Trigger this manual action"
+msgstr ""
+
+msgid "Trigger token:"
+msgstr ""
+
+msgid "Trigger variables:"
+msgstr ""
+
+msgid "Trigger was created successfully."
+msgstr ""
+
+msgid "Trigger was successfully updated."
+msgstr ""
+
+msgid "Triggerer"
+msgstr ""
+
+msgid "Triggers can force a specific branch or tag to get rebuilt with an API call. These tokens will impersonate their associated user including their access to projects and their project permissions."
+msgstr ""
+
+msgid "Troubleshoot and monitor your application with tracing"
+msgstr ""
+
+msgid "Try again"
+msgstr ""
+
+msgid "Try again?"
+msgstr ""
+
+msgid "Try all GitLab has to offer for 30 days."
+msgstr ""
+
+msgid "Try to fork again"
+msgstr ""
+
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
+msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
+msgstr ""
+
+msgid "Tuesday"
+msgstr ""
+
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
+msgid "Turn on Service Desk"
+msgstr ""
+
+msgid "Twitter"
+msgstr ""
+
+msgid "Two-Factor Authentication"
+msgstr ""
+
+msgid "Two-factor Authentication"
+msgstr ""
+
+msgid "Two-factor Authentication Recovery codes"
+msgstr ""
+
+msgid "Two-factor Authentication has been disabled for this user"
+msgstr ""
+
+msgid "Two-factor authentication"
+msgstr ""
+
+msgid "Type"
+msgstr ""
+
+msgid "U2F Devices (%{length})"
+msgstr ""
+
+msgid "U2F only works with HTTPS-enabled websites. Contact your administrator for more details."
+msgstr ""
+
+msgid "URL"
+msgstr ""
+
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
+msgid "Unable to connect to server: %{error}"
+msgstr ""
+
+msgid "Unable to generate new instance ID"
+msgstr ""
+
+msgid "Unable to load the diff. %{button_try_again}"
+msgstr ""
+
+msgid "Unable to resolve"
+msgstr ""
+
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
+msgid "Unable to schedule a pipeline to run immediately"
+msgstr ""
+
+msgid "Unable to sign you in to the group with SAML due to \"%{reason}\""
+msgstr ""
+
+msgid "Unable to update label prioritization at this time"
+msgstr ""
+
+msgid "Unable to update this epic at this time."
+msgstr ""
+
+msgid "Unable to update this issue at this time."
+msgstr ""
+
+msgid "Unarchive project"
+msgstr ""
+
+msgid "Unarchiving the project will restore people's ability to make changes to it. The repository can be committed to, and issues, comments and other entities can be created. <strong>Once active this project shows up in the search and on the dashboard.</strong>"
+msgstr ""
+
+msgid "Unblock"
+msgstr ""
+
+msgid "Undo"
+msgstr ""
+
+msgid "Unfortunately, your email message to GitLab could not be processed."
+msgstr ""
+
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Unknown encryption strategy: %{encrypted_strategy}!"
+msgstr ""
+
+msgid "Unknown format"
+msgstr ""
+
+msgid "Unknown response text"
+msgstr ""
+
+msgid "Unlimited"
+msgstr ""
+
+msgid "Unlock"
+msgstr ""
+
+msgid "Unlock the discussion"
+msgstr ""
+
+msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment."
+msgstr ""
+
+msgid "Unlocked"
+msgstr ""
+
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unresolve discussion"
+msgstr ""
+
+msgid "Unresolve thread"
+msgstr ""
+
+msgid "Unschedule job"
+msgstr ""
+
+msgid "Unstage"
+msgstr ""
+
+msgid "Unstage all changes"
+msgstr ""
+
+msgid "Unstage changes"
+msgstr ""
+
+msgid "Unstaged"
+msgstr ""
+
+msgid "Unstaged %{type}"
+msgstr ""
+
+msgid "Unstaged and staged %{type}"
+msgstr ""
+
+msgid "Unstar"
+msgstr ""
+
+msgid "Unsubscribe"
+msgstr ""
+
+msgid "Unsubscribe at group level"
+msgstr ""
+
+msgid "Unsubscribe at project level"
+msgstr ""
+
+msgid "Unsubscribe from %{type}"
+msgstr ""
+
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
+msgid "Unverified"
+msgstr ""
+
+msgid "Up to date"
+msgstr ""
+
+msgid "Upcoming"
+msgstr ""
+
+msgid "Upcoming Release"
+msgstr ""
+
+msgid "Update"
+msgstr ""
+
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
+msgstr ""
+
+msgid "Update failed"
+msgstr ""
+
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
+msgid "Update now"
+msgstr ""
+
+msgid "Update your bookmarked URLs as filtered/sorted branches URL has been changed."
+msgstr ""
+
+msgid "Update your group name, description, avatar, and visibility."
+msgstr ""
+
+msgid "Update your project name, topics, description and avatar."
+msgstr ""
+
+msgid "UpdateProject|Cannot rename project because it contains container registry tags!"
+msgstr ""
+
+msgid "UpdateProject|Could not set the default branch"
+msgstr ""
+
+msgid "UpdateProject|New visibility level not allowed!"
+msgstr ""
+
+msgid "UpdateProject|Project could not be updated!"
+msgstr ""
+
+msgid "Updated"
+msgstr ""
+
+msgid "Updated %{updated_at} by %{updated_by}"
+msgstr ""
+
+msgid "Updated to"
+msgstr ""
+
+msgid "Updating"
+msgstr ""
+
+msgid "Upgrade plan to unlock Canary Deployments feature"
+msgstr ""
+
+msgid "Upgrade your plan"
+msgstr ""
+
+msgid "Upgrade your plan to activate Advanced Global Search."
+msgstr ""
+
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
+msgid "Upgrade your plan to activate Contribution Analytics."
+msgstr ""
+
+msgid "Upgrade your plan to activate Group Webhooks."
+msgstr ""
+
+msgid "Upgrade your plan to activate Issue weight."
+msgstr ""
+
+msgid "Upgrade your plan to improve Issue boards."
+msgstr ""
+
+msgid "Upgrade your plan to improve Merge Requests."
+msgstr ""
+
+msgid "Upload <code>GoogleCodeProjectHosting.json</code> here:"
+msgstr ""
+
+msgid "Upload CSV file"
+msgstr ""
+
+msgid "Upload New File"
+msgstr ""
+
+msgid "Upload a certificate for your domain with all intermediates"
+msgstr ""
+
+msgid "Upload a private key for your certificate"
+msgstr ""
+
+msgid "Upload file"
+msgstr ""
+
+msgid "Upload file does not exist"
+msgstr ""
+
+msgid "Upload object map"
+msgstr ""
+
+msgid "UploadLink|click to upload"
+msgstr ""
+
+msgid "Uploaded on"
+msgstr ""
+
+msgid "Uploading changes to terminal"
+msgstr ""
+
+msgid "Uploads"
+msgstr ""
+
+msgid "Upstream"
+msgstr ""
+
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage"
+msgstr ""
+
+msgid "Usage ping is not enabled"
+msgstr ""
+
+msgid "Usage quotas help link"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
+msgid "UsageQuota|%{help_link_start}Shared runners%{help_link_end} are disabled, so there are no limits set on pipeline usage"
+msgstr ""
+
+msgid "UsageQuota|Artifacts"
+msgstr ""
+
+msgid "UsageQuota|Buy additional minutes"
+msgstr ""
+
+msgid "UsageQuota|Current period usage"
+msgstr ""
+
+msgid "UsageQuota|LFS Storage"
+msgstr ""
+
+msgid "UsageQuota|Packages"
+msgstr ""
+
+msgid "UsageQuota|Pipelines"
+msgstr ""
+
+msgid "UsageQuota|Repository"
+msgstr ""
+
+msgid "UsageQuota|Storage"
+msgstr ""
+
+msgid "UsageQuota|This namespace has no projects which use shared runners"
+msgstr ""
+
+msgid "UsageQuota|Unlimited"
+msgstr ""
+
+msgid "UsageQuota|Usage"
+msgstr ""
+
+msgid "UsageQuota|Usage Quotas"
+msgstr ""
+
+msgid "UsageQuota|Usage of group resources across the projects in the %{strong_start}%{group_name}%{strong_end} group"
+msgstr ""
+
+msgid "UsageQuota|Usage since"
+msgstr ""
+
+msgid "UsageQuota|Wiki"
+msgstr ""
+
+msgid "Use %{code_start}::%{code_end} to create a %{link_start}scoped label set%{link_end} (eg. %{code_start}priority::1%{code_end})"
+msgstr ""
+
+msgid "Use <code>%{native_redirect_uri}</code> for local tests"
+msgstr ""
+
+msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
+msgstr ""
+
+msgid "Use a hardware device to add the second factor of authentication."
+msgstr ""
+
+msgid "Use an one time password authenticator on your mobile device or computer to enable two-factor authentication (2FA)."
+msgstr ""
+
+msgid "Use group milestones to manage issues from multiple projects in the same milestone."
+msgstr ""
+
+msgid "Use one line per URI"
+msgstr ""
+
+msgid "Use template"
+msgstr ""
+
+msgid "Use the following registration token during setup:"
+msgstr ""
+
+msgid "Use your global notification setting"
+msgstr ""
+
+msgid "Use your smart card to authenticate with the LDAP server."
+msgstr ""
+
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "Used to help configure your identity provider"
+msgstr ""
+
+msgid "User %{current_user_username} has started impersonating %{username}"
+msgstr ""
+
+msgid "User %{username} was successfully removed."
+msgstr ""
+
+msgid "User Cohorts are only shown when the %{usage_ping_link_start}usage ping%{usage_ping_link_end} is enabled."
+msgstr ""
+
+msgid "User OAuth applications"
+msgstr ""
+
+msgid "User Settings"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
+msgid "User identity was successfully created."
+msgstr ""
+
+msgid "User identity was successfully removed."
+msgstr ""
+
+msgid "User identity was successfully updated."
+msgstr ""
+
+msgid "User key was successfully removed."
+msgstr ""
+
+msgid "User map"
+msgstr ""
+
+msgid "User pipeline minutes were successfully reset."
+msgstr ""
+
+msgid "User settings"
+msgstr ""
+
+msgid "User was successfully created."
+msgstr ""
+
+msgid "User was successfully removed from group and any subresources."
+msgstr ""
+
+msgid "User was successfully removed from project."
+msgstr ""
+
+msgid "User was successfully updated."
+msgstr ""
+
+msgid "UserOnboardingTour|%{activeTour}/%{totalTours}"
+msgstr ""
+
+msgid "UserOnboardingTour|%{completed}/%{total} steps completed"
+msgstr ""
+
+msgid "UserOnboardingTour|%{emphasisStart}Well done!%{emphasisEnd}%{lineBreak}%{lineBreak}That's it for our guided tour, congratulations for making it all the way to the end!%{lineBreak}%{lineBreak}We hope this gave you a good overview of GitLab and how it can help you. We'll now show you how to create your own project and invite your colleagues."
+msgstr ""
+
+msgid "UserOnboardingTour|Adding other members to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Alright, that's it for Commits. Let's take a look at the %{emphasisStart}Branches%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Awesome! Now click on %{emphasisStart}Members%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Click on one of the %{emphasisStart}Compare%{emphasisEnd} buttons to compare a branch to master."
+msgstr ""
+
+msgid "UserOnboardingTour|Click on one of the %{emphasisStart}pipeline IDs%{emphasisEnd} to see the details of a pipeline."
+msgstr ""
+
+msgid "UserOnboardingTour|Click to open the latest commit to see its details."
+msgstr ""
+
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
+msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
+msgstr ""
+
+msgid "UserOnboardingTour|Create a project"
+msgstr ""
+
+msgid "UserOnboardingTour|Exit 'Learn GitLab'"
+msgstr ""
+
+msgid "UserOnboardingTour|Got it"
+msgstr ""
+
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
+msgid "UserOnboardingTour|Guided GitLab Tour"
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can compare the changes of this branch to another one. Changes are divided by files so that it's easier to see what was changed where."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Choose a way to create a project and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can see the breakdown of the pipelines: its stages and jobs in each of the stages and their status.%{lineBreak}%{lineBreak}Our CI/CD pipelines are quite complex, most of our users have fewer and simpler pipelines."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can see the current members of the project (just you at the moment) and invite new members.%{lineBreak}%{lineBreak}You can invite multiple members at once (existing GitLab users or invite by email) and you can also set their roles and permissions.%{lineBreak}%{lineBreak}Add a few members and click on %{emphasisStart}Add to project%{emphasisEnd} to complete this step."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can see what changes were made with this commit, on what branch and if there's a related merge request. The status of the pipeline will also show up if CI/CD is set up.%{lineBreak}%{lineBreak}You can also comment on the lines of code that were changed and start a discussion with your colleagues!"
+msgstr ""
+
+msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}%{projectName}%{emphasisEnd} project. They're split into Active and Stale.%{lineBreak}%{lineBreak}From here, you can create a new merge request, from a branch or compare the branch to any other branch in the project. By default, it will compare it to the master branch."
+msgstr ""
+
+msgid "UserOnboardingTour|Invite colleagues"
+msgstr ""
+
+msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progess in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks like when the list is filtered by a label."
+msgstr ""
+
+msgid "UserOnboardingTour|Learn GitLab"
+msgstr ""
+
+msgid "UserOnboardingTour|Let's take a closer look at a merge request. Click on the title of one."
+msgstr ""
+
+msgid "UserOnboardingTour|Let's take a closer look at all the commits. Click on %{emphasisStart}Commits%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Let's take a closer look at the repository of this project. Click on %{emphasisStart}Repository%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|No thanks"
+msgstr ""
+
+msgid "UserOnboardingTour|Ok, let's go"
+msgstr ""
+
+msgid "UserOnboardingTour|Ok, show me"
+msgstr ""
+
+msgid "UserOnboardingTour|Open one of the issues by clicking on its title."
+msgstr ""
+
+msgid "UserOnboardingTour|Restart this step"
+msgstr ""
+
+msgid "UserOnboardingTour|Skip this step"
+msgstr ""
+
+msgid "UserOnboardingTour|Sweet! Your project was created is is ready to be used.%{lineBreak}%{lineBreak}You can start adding files to the repository or clone it. One last thing we want to show you is how to invite your colleagues to your new project."
+msgstr ""
+
+msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
+msgstr ""
+
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
+msgstr ""
+
+msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|That's it for merge requests. Now for the finla part of this guided tour - the %{emphasisStart}CI/CD%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgstr ""
+
+msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
+msgstr ""
+
+msgid "UserOnboardingTour|These are all the CI/CD pipelines we have for our %{emphasisStart}%{projectName}%{emphasisEnd} project.%{lineBreak}%{lineBreak}Here you can see the status of each pipeline, for what commit it's running for, its stages and the status for them."
+msgstr ""
+
+msgid "UserOnboardingTour|These are all the issues that are available for community contributions. Let's take a closer look at one of them."
+msgstr ""
+
+msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
+msgstr ""
+
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgstr ""
+
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgstr ""
+
+msgid "UserProfile|Activity"
+msgstr ""
+
+msgid "UserProfile|Already reported for abuse"
+msgstr ""
+
+msgid "UserProfile|Contributed projects"
+msgstr ""
+
+msgid "UserProfile|Edit profile"
+msgstr ""
+
+msgid "UserProfile|Explore public groups to find projects to contribute to."
+msgstr ""
+
+msgid "UserProfile|Groups"
+msgstr ""
+
+msgid "UserProfile|Groups are the best way to manage projects and members."
+msgstr ""
+
+msgid "UserProfile|Join or create a group to start contributing by commenting on issues or submitting merge requests!"
+msgstr ""
+
+msgid "UserProfile|Most Recent Activity"
+msgstr ""
+
+msgid "UserProfile|No snippets found."
+msgstr ""
+
+msgid "UserProfile|Overview"
+msgstr ""
+
+msgid "UserProfile|Personal projects"
+msgstr ""
+
+msgid "UserProfile|Report abuse"
+msgstr ""
+
+msgid "UserProfile|Snippets"
+msgstr ""
+
+msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
+msgstr ""
+
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
+msgid "UserProfile|Subscribe"
+msgstr ""
+
+msgid "UserProfile|This user doesn't have any personal projects"
+msgstr ""
+
+msgid "UserProfile|This user has a private profile"
+msgstr ""
+
+msgid "UserProfile|This user hasn't contributed to any projects"
+msgstr ""
+
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
+msgid "UserProfile|View all"
+msgstr ""
+
+msgid "UserProfile|View user in admin area"
+msgstr ""
+
+msgid "UserProfile|You can create a group for several dependent projects."
+msgstr ""
+
+msgid "UserProfile|You haven't created any personal projects."
+msgstr ""
+
+msgid "UserProfile|You haven't created any snippets."
+msgstr ""
+
+msgid "UserProfile|Your projects can be available publicly, internally, or privately, at your choice."
+msgstr ""
+
+msgid "Username (optional)"
+msgstr ""
+
+msgid "Username is already taken."
+msgstr ""
+
+msgid "Username is available."
+msgstr ""
+
+msgid "Username or email"
+msgstr ""
+
+msgid "Users"
+msgstr ""
+
+msgid "Users outside of license"
+msgstr ""
+
+msgid "Users requesting access to"
+msgstr ""
+
+msgid "Users were successfully added."
+msgstr ""
+
+msgid "Users with a Guest role or those who don't belong to any projects or groups don't count towards seats in use."
+msgstr ""
+
+msgid "UsersSelect|%{name} + %{length} more"
+msgstr ""
+
+msgid "UsersSelect|Any User"
+msgstr ""
+
+msgid "UsersSelect|Assignee"
+msgstr ""
+
+msgid "UsersSelect|No assignee - %{openingTag} assign yourself %{closingTag}"
+msgstr ""
+
+msgid "UsersSelect|Unassigned"
+msgstr ""
+
+msgid "Using %{code_start}::%{code_end} denotes a %{link_start}scoped label set%{link_end}"
+msgstr ""
+
+msgid "Using required encryption strategy when encrypted field is missing!"
+msgstr ""
+
+msgid "Validate"
+msgstr ""
+
+msgid "Validate your GitLab CI configuration file"
+msgstr ""
+
+msgid "Validations failed."
+msgstr ""
+
+msgid "Validity"
+msgstr ""
+
+msgid "Value"
+msgstr ""
+
+msgid "Variables"
+msgstr ""
+
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various localization settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "Verification information"
+msgstr ""
+
+msgid "Verification status"
+msgstr ""
+
+msgid "Verified"
+msgstr ""
+
+msgid "Version"
+msgstr ""
+
+msgid "Very helpful"
+msgstr ""
+
+msgid "View app"
+msgstr ""
+
+msgid "View dependency details for your project"
+msgstr ""
+
+msgid "View deployment"
+msgstr ""
+
+msgid "View details: %{details_url}"
+msgstr ""
+
+msgid "View documentation"
+msgstr ""
+
+msgid "View eligible approvers"
+msgstr ""
+
+msgid "View epics list"
+msgstr ""
+
+msgid "View file @ "
+msgstr ""
+
+msgid "View full dashboard"
+msgstr ""
+
+msgid "View group labels"
+msgstr ""
+
+msgid "View in Sentry"
+msgstr ""
+
+msgid "View it on GitLab"
+msgstr ""
+
+msgid "View job"
+msgstr ""
+
+msgid "View job trace"
+msgstr ""
+
+msgid "View jobs"
+msgstr ""
+
+msgid "View labels"
+msgstr ""
+
+msgid "View log"
+msgstr ""
+
+msgid "View open merge request"
+msgstr ""
+
+msgid "View project labels"
+msgstr ""
+
+msgid "View replaced file @ "
+msgstr ""
+
+msgid "View the documentation"
+msgstr ""
+
+msgid "Viewing commit"
+msgstr ""
+
+msgid "Visibility"
+msgstr ""
+
+msgid "Visibility and access controls"
+msgstr ""
+
+msgid "Visibility level"
+msgstr ""
+
+msgid "Visibility level:"
+msgstr ""
+
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Visibility, project features, permissions"
+msgstr ""
+
+msgid "Visibility:"
+msgstr ""
+
+msgid "VisibilityLevel|Internal"
+msgstr ""
+
+msgid "VisibilityLevel|Private"
+msgstr ""
+
+msgid "VisibilityLevel|Public"
+msgstr ""
+
+msgid "VisibilityLevel|Unknown"
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
+msgstr ""
+
+msgid "VisualReviewApp|Open review app"
+msgstr ""
+
+msgid "VisualReviewApp|Review"
+msgstr ""
+
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
+msgstr ""
+
+msgid "Vulnerabilities"
+msgstr ""
+
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
+msgstr ""
+
+msgid "Vulnerability|Class"
+msgstr ""
+
+msgid "Vulnerability|Confidence"
+msgstr ""
+
+msgid "Vulnerability|Description"
+msgstr ""
+
+msgid "Vulnerability|File"
+msgstr ""
+
+msgid "Vulnerability|Identifiers"
+msgstr ""
+
+msgid "Vulnerability|Image"
+msgstr ""
+
+msgid "Vulnerability|Instances"
+msgstr ""
+
+msgid "Vulnerability|Links"
+msgstr ""
+
+msgid "Vulnerability|Namespace"
+msgstr ""
+
+msgid "Vulnerability|Project"
+msgstr ""
+
+msgid "Vulnerability|Report Type"
+msgstr ""
+
+msgid "Vulnerability|Severity"
+msgstr ""
+
+msgid "Wait for the source to load to copy it to the clipboard"
+msgstr ""
+
+msgid "Waiting for performance data"
+msgstr ""
+
+msgid "Want to see the data? Please ask an administrator for access."
+msgstr ""
+
+msgid "We can't find an epic that matches what you are looking for."
+msgstr ""
+
+msgid "We can't find an issue that matches what you are looking for."
+msgstr ""
+
+msgid "We could not determine the path to remove the epic"
+msgstr ""
+
+msgid "We could not determine the path to remove the issue"
+msgstr ""
+
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
+msgstr ""
+
+msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
+msgstr ""
+
+msgid "We don't have enough data to show this stage."
+msgstr ""
+
+msgid "We heard back from your U2F device. You have been authenticated."
+msgstr ""
+
+msgid "We sent you an email with reset password instructions"
+msgstr ""
+
+msgid "We want to be sure it is you, please confirm you are not a robot."
+msgstr ""
+
+msgid "Web IDE"
+msgstr ""
+
+msgid "Web Terminal"
+msgstr ""
+
+msgid "Web terminal"
+msgstr ""
+
+msgid "Webhooks"
+msgstr ""
+
+msgid "Webhooks Help"
+msgstr ""
+
+msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
+msgstr ""
+
+msgid "Wednesday"
+msgstr ""
+
+msgid "Weeks"
+msgstr ""
+
+msgid "Weight"
+msgstr ""
+
+msgid "Weight %{weight}"
+msgstr ""
+
+msgid "Welcome to the Guided GitLab Tour"
+msgstr ""
+
+msgid "Welcome to your Issue Board!"
+msgstr ""
+
+msgid "What are you searching for?"
+msgstr ""
+
+msgid "When a runner is locked, it cannot be assigned to other projects"
+msgstr ""
+
+msgid "When enabled, users cannot use GitLab until the terms have been accepted."
+msgstr ""
+
+msgid "When leaving the URL blank, classification labels can still be specified without disabling cross project features or performing external authorization checks."
+msgstr ""
+
+msgid "When this merge request is accepted"
+msgid_plural "When these merge requests are accepted"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
+msgid "When:"
+msgstr ""
+
+msgid "White helpers give contextual information."
+msgstr ""
+
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
+msgid "Who can see this group?"
+msgstr ""
+
+msgid "Who will be able to see this group?"
+msgstr ""
+
+msgid "Wiki"
+msgstr ""
+
+msgid "Wiki pages"
+msgstr ""
+
+msgid "Wiki was successfully updated."
+msgstr ""
+
+msgid "WikiClone|Clone your wiki"
+msgstr ""
+
+msgid "WikiClone|Git Access"
+msgstr ""
+
+msgid "WikiClone|Install Gollum"
+msgstr ""
+
+msgid "WikiClone|It is recommended to install %{markdown} so that GFM features render locally:"
+msgstr ""
+
+msgid "WikiClone|Start Gollum and edit locally"
+msgstr ""
+
+msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title."
+msgstr ""
+
+msgid "WikiEdit|There is already a page with the same title in that path."
+msgstr ""
+
+msgid "WikiEmptyIssueMessage|Suggest wiki improvement"
+msgstr ""
+
+msgid "WikiEmptyIssueMessage|You must be a project member in order to add wiki pages. If you have suggestions for how to improve the wiki for this project, consider opening an issue in the %{issues_link}."
+msgstr ""
+
+msgid "WikiEmptyIssueMessage|issue tracker"
+msgstr ""
+
+msgid "WikiEmpty|A wiki is where you can store all the details about your project. This can include why you've created it, its principles, how to use it, and so on."
+msgstr ""
+
+msgid "WikiEmpty|Create your first page"
+msgstr ""
+
+msgid "WikiEmpty|Suggest wiki improvement"
+msgstr ""
+
+msgid "WikiEmpty|The wiki lets you write documentation for your project"
+msgstr ""
+
+msgid "WikiEmpty|This project has no wiki pages"
+msgstr ""
+
+msgid "WikiEmpty|You must be a project member in order to add wiki pages."
+msgstr ""
+
+msgid "WikiHistoricalPage|This is an old version of this page."
+msgstr ""
+
+msgid "WikiHistoricalPage|You can view the %{most_recent_link} or browse the %{history_link}."
+msgstr ""
+
+msgid "WikiHistoricalPage|history"
+msgstr ""
+
+msgid "WikiHistoricalPage|most recent version"
+msgstr ""
+
+msgid "WikiMarkdownDocs|More examples are in the %{docs_link}"
+msgstr ""
+
+msgid "WikiMarkdownDocs|documentation"
+msgstr ""
+
+msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
+msgstr ""
+
+msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
+msgstr ""
+
+msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
+msgstr ""
+
+msgid "WikiPageConfirmDelete|Delete page"
+msgstr ""
+
+msgid "WikiPageConfirmDelete|Delete page %{pageTitle}?"
+msgstr ""
+
+msgid "WikiPageConflictMessage|Someone edited the page the same time you did. Please check out %{page_link} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
+msgid "WikiPageConflictMessage|the page"
+msgstr ""
+
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
+
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
+
+msgid "WikiPage|Write your content or drag files here…"
+msgstr ""
+
+msgid "Wiki|Create New Page"
+msgstr ""
+
+msgid "Wiki|Create page"
+msgstr ""
+
+msgid "Wiki|Created date"
+msgstr ""
+
+msgid "Wiki|Edit Page"
+msgstr ""
+
+msgid "Wiki|More Pages"
+msgstr ""
+
+msgid "Wiki|New page"
+msgstr ""
+
+msgid "Wiki|Page history"
+msgstr ""
+
+msgid "Wiki|Page title"
+msgstr ""
+
+msgid "Wiki|Page version"
+msgstr ""
+
+msgid "Wiki|Pages"
+msgstr ""
+
+msgid "Wiki|Title"
+msgstr ""
+
+msgid "Wiki|Wiki Pages"
+msgstr ""
+
+msgid "Will deploy to"
+msgstr ""
+
+msgid "With contribution analytics you can have an overview for the activity of issues, merge requests and push events of your organization and its members."
+msgstr ""
+
+msgid "Withdraw Access Request"
+msgstr ""
+
+msgid "Workflow Help"
+msgstr ""
+
+msgid "Write"
+msgstr ""
+
+msgid "Write a comment or drag your files here…"
+msgstr ""
+
+msgid "Write a comment…"
+msgstr ""
+
+msgid "Write access allowed"
+msgstr ""
+
+msgid "Write milestone description..."
+msgstr ""
+
+msgid "Wrong extern UID provided. Make sure Auth0 is configured correctly."
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "Yes or No"
+msgstr ""
+
+msgid "Yes, add it"
+msgstr ""
+
+msgid "Yes, let me map Google Code users to full names or GitLab users."
+msgstr ""
+
+msgid "Yesterday"
+msgstr ""
+
+msgid "You"
+msgstr ""
+
+msgid "You are an admin, which means granting access to <strong>%{client_name}</strong> will allow them to interact with GitLab as an admin as well. Proceed with caution."
+msgstr ""
+
+msgid "You are attempting to delete a file that has been previously updated."
+msgstr ""
+
+msgid "You are attempting to update a file that has changed since you started editing it."
+msgstr ""
+
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
+msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are not allowed to unlink your primary login account"
+msgstr ""
+
+msgid "You are now impersonating %{username}"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are receiving this message because you are a GitLab administrator for %{url}."
+msgstr ""
+
+msgid "You can %{linkStart}view the blob%{linkEnd} instead."
+msgstr ""
+
+msgid "You can also create a project from the command line."
+msgstr ""
+
+msgid "You can also press &#8984;-Enter"
+msgstr ""
+
+msgid "You can also press Ctrl-Enter"
+msgstr ""
+
+msgid "You can also star a label to make it a priority label."
+msgstr ""
+
+msgid "You can also test your %{gitlab_ci_yml} in %{lint_link_start}CI Lint%{lint_link_end}"
+msgstr ""
+
+msgid "You can also upload existing files from your computer using the instructions below."
+msgstr ""
+
+msgid "You can create files directly in GitLab using one of the following options."
+msgstr ""
+
+msgid "You can easily contribute to them by requesting to join these groups."
+msgstr ""
+
+msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
+msgstr ""
+
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
+msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
+msgstr ""
+
+msgid "You can invite a new member to <strong>%{project_name}</strong>."
+msgstr ""
+
+msgid "You can invite another group to <strong>%{project_name}</strong>."
+msgstr ""
+
+msgid "You can move around the graph by using the arrow keys."
+msgstr ""
+
+msgid "You can now submit a merge request to get this change into the original branch."
+msgstr ""
+
+msgid "You can now submit a merge request to get this change into the original project."
+msgstr ""
+
+msgid "You can only add files when you are on a branch"
+msgstr ""
+
+msgid "You can only edit files when you are on a branch"
+msgstr ""
+
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
+msgstr ""
+
+msgid "You can only transfer the project to namespaces you manage."
+msgstr ""
+
+msgid "You can resolve the merge conflict using either the Interactive mode, by choosing %{use_ours} or %{use_theirs} buttons, or by editing the files directly. Commit these changes into %{branch_name}"
+msgstr ""
+
+msgid "You can see your chat accounts."
+msgstr ""
+
+msgid "You can set up jobs to only use Runners with specific tags. Separate tags with commas."
+msgstr ""
+
+msgid "You can specify notification level per group or per project."
+msgstr ""
+
+msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
+msgstr ""
+
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
+msgid "You cannot impersonate a blocked user"
+msgstr ""
+
+msgid "You cannot impersonate a user who cannot log in"
+msgstr ""
+
+msgid "You cannot impersonate an internal user"
+msgstr ""
+
+msgid "You cannot play this scheduled pipeline at the moment. Please wait a minute."
+msgstr ""
+
+msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead."
+msgstr ""
+
+msgid "You cannot write to this read-only GitLab instance."
+msgstr ""
+
+msgid "You could not create a new trigger."
+msgstr ""
+
+msgid "You do not have any subscriptions yet"
+msgstr ""
+
+msgid "You do not have permission to leave this %{namespaceType}."
+msgstr ""
+
+msgid "You do not have permission to run the Web Terminal. Please contact a project administrator."
+msgstr ""
+
+msgid "You do not have the correct permissions to override the settings from the LDAP group sync."
+msgstr ""
+
+msgid "You don't have any U2F devices registered yet."
+msgstr ""
+
+msgid "You don't have any active chat names."
+msgstr ""
+
+msgid "You don't have any applications"
+msgstr ""
+
+msgid "You don't have any authorized applications"
+msgstr ""
+
+msgid "You don't have any deployments right now."
+msgstr ""
+
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
+msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
+msgstr ""
+
+msgid "You have been granted %{access_level} access to the %{source_name} %{source_type}."
+msgstr ""
+
+msgid "You have been granted %{member_human_access} access to %{label}."
+msgstr ""
+
+msgid "You have been unsubscribed from this thread."
+msgstr ""
+
+msgid "You have declined the invitation to join %{label}."
+msgstr ""
+
+msgid "You have no permissions"
+msgstr ""
+
+msgid "You have not added any approvers. Start by adding users or groups."
+msgstr ""
+
+msgid "You have reached your project limit"
+msgstr ""
+
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
+msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
+msgstr ""
+
+msgid "You may also add variables that are made available to the running application by prepending the variable key with <code>K8S_SECRET_</code>."
+msgstr ""
+
+msgid "You must accept our Terms of Service and privacy policy in order to register an account"
+msgstr ""
+
+msgid "You must have maintainer access to force delete a lock"
+msgstr ""
+
+msgid "You must have permission to create a project in a namespace before forking."
+msgstr ""
+
+msgid "You must provide a valid current password"
+msgstr ""
+
+msgid "You must provide your current password in order to change it."
+msgstr ""
+
+msgid "You need a different license to enable FileLocks feature"
+msgstr ""
+
+msgid "You need a different license to use Geo replication."
+msgstr ""
+
+msgid "You need git-lfs version %{min_git_lfs_version} (or greater) to continue. Please visit https://git-lfs.github.com"
+msgstr ""
+
+msgid "You need permission."
+msgstr ""
+
+msgid "You need to be logged in."
+msgstr ""
+
+msgid "You need to register a two-factor authentication app before you can set up a U2F device."
+msgstr ""
+
+msgid "You need to specify both an Access Token and a Host URL."
+msgstr ""
+
+msgid "You need to upload a GitLab project export archive (ending in .gz)."
+msgstr ""
+
+msgid "You need to upload a Google Takeout archive."
+msgstr ""
+
+msgid "You tried to fork %{link_to_the_project} but it failed for the following reason:"
+msgstr ""
+
+msgid "You will lose all changes you've made to this file. This action cannot be undone."
+msgstr ""
+
+msgid "You will lose all the unstaged changes you've made in this project. This action cannot be undone."
+msgstr ""
+
+msgid "You will need to update your local repositories to point to the new location."
+msgstr ""
+
+msgid "You will not get any notifications via email"
+msgstr ""
+
+msgid "You will only receive notifications for the events you choose"
+msgstr ""
+
+msgid "You will only receive notifications for threads you have participated in"
+msgstr ""
+
+msgid "You will receive notifications for any activity"
+msgstr ""
+
+msgid "You will receive notifications only for comments in which you were @mentioned"
+msgstr ""
+
+msgid "You won't be able to pull or push project code via %{protocol} until you %{set_password_link} on your account"
+msgstr ""
+
+msgid "You won't be able to pull or push project code via SSH until you %{add_ssh_key_link} to your profile"
+msgstr ""
+
+msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile"
+msgstr ""
+
+msgid "You'll be signed out from your current account automatically."
+msgstr ""
+
+msgid "You'll need to use different branch names to get a valid comparison."
+msgstr ""
+
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
+msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
+msgstr ""
+
+msgid "You're not allowed to make changes to this project directly. A fork of this project is being created that you can make changes in, so you can submit a merge request."
+msgstr ""
+
+msgid "You're only seeing %{startTag}other activity%{endTag} in the feed. To add a comment, switch to one of the following options."
+msgstr ""
+
+msgid "You're receiving this email because %{reason}."
+msgstr ""
+
+msgid "You're receiving this email because of your account on %{host}."
+msgstr ""
+
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} &middot; %{help_link}"
+msgstr ""
+
+msgid "You've already enabled two-factor authentication using one time password authenticators. In order to register a different device, you must first disable two-factor authentication."
+msgstr ""
+
+msgid "YouTube"
+msgstr ""
+
+msgid "Your Commit Email will be used for web based operations, such as edits and merges."
+msgstr ""
+
+msgid "Your Conversational Development Index gives an overview of how you are using GitLab from a feature perspective. View how you compare with other organizations, discover features you are not using, and learn best practices through blog posts and white papers."
+msgstr ""
+
+msgid "Your Default Notification Email will be used for account notifications if a %{openingTag}group-specific email address%{closingTag} is not set."
+msgstr ""
+
+msgid "Your GPG keys (%{count})"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
+msgid "Your New Personal Access Token"
+msgstr ""
+
+msgid "Your Primary Email will be used for avatar detection."
+msgstr ""
+
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Public Email will be displayed on your public profile."
+msgstr ""
+
+msgid "Your SSH keys (%{count})"
+msgstr ""
+
+msgid "Your To-Do List"
+msgstr ""
+
+msgid "Your U2F device did not send a valid JSON response."
+msgstr ""
+
+msgid "Your U2F device needs to be set up. Plug it in (if not already) and click the button on the left."
+msgstr ""
+
+msgid "Your U2F device was registered!"
+msgstr ""
+
+msgid "Your access request to the %{source_type} has been withdrawn."
+msgstr ""
+
+msgid "Your account uses dedicated credentials for the \"%{group_name}\" group and can only be updated through SSO."
+msgstr ""
+
+msgid "Your applications (%{size})"
+msgstr ""
+
+msgid "Your authorized applications"
+msgstr ""
+
+msgid "Your browser doesn't support U2F. Please use Google Chrome desktop (version 41 or newer)."
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
+msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
+msgstr ""
+
+msgid "Your changes have been saved"
+msgstr ""
+
+msgid "Your changes have been successfully committed."
+msgstr ""
+
+msgid "Your comment could not be submitted! Please check your network connection and try again."
+msgstr ""
+
+msgid "Your comment could not be updated! Please check your network connection and try again."
+msgstr ""
+
+msgid "Your deployment services will be broken, you will need to manually fix the services after renaming."
+msgstr ""
+
+msgid "Your device was successfully set up! Give it a name and register it with the GitLab server."
+msgstr ""
+
+msgid "Your groups"
+msgstr ""
+
+msgid "Your issues are being imported. Once finished, you'll get a confirmation email."
+msgstr ""
+
+msgid "Your issues will be imported in the background. Once finished, you'll get a confirmation email."
+msgstr ""
+
+msgid "Your message here"
+msgstr ""
+
+msgid "Your name"
+msgstr ""
+
+msgid "Your new SCIM token"
+msgstr ""
+
+msgid "Your new personal access token has been created."
+msgstr ""
+
+msgid "Your pages are served under:"
+msgstr ""
+
+msgid "Your password reset token has expired."
+msgstr ""
+
+msgid "Your project limit is %{limit} projects! Please contact your administrator to increase it"
+msgstr ""
+
+msgid "Your projects"
+msgstr ""
+
+msgid "Your request for access has been queued for review."
+msgstr ""
+
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
+msgid "a deleted user"
+msgstr ""
+
+msgid "added %{created_at_timeago}"
+msgstr ""
+
+msgid "added a Zoom call to this issue"
+msgstr ""
+
+msgid "ago"
+msgstr ""
+
+msgid "allowed to fail"
+msgstr ""
+
+msgid "already being used for another group or project milestone."
+msgstr ""
+
+msgid "already shared with this group"
+msgstr ""
+
+msgid "among other things"
+msgstr ""
+
+msgid "assign yourself"
+msgstr ""
+
+msgid "attach a new file"
+msgstr ""
+
+msgid "authored"
+msgstr ""
+
+msgid "branch name"
+msgstr ""
+
+msgid "by"
+msgstr ""
+
+msgid "cannot be changed if a personal project has container registry tags."
+msgstr ""
+
+msgid "cannot be enabled unless all domains have TLS certificates"
+msgstr ""
+
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
+msgid "cannot block others"
+msgstr ""
+
+msgid "cannot include leading slash or directory traversal."
+msgstr ""
+
+msgid "cannot itself be blocked"
+msgstr ""
+
+msgid "cannot merge"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about DAST %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about Dependency Scanning %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about SAST %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{namespace} is affected by %{vulnerability}."
+msgstr ""
+
+msgid "ciReport|%{remainingPackagesCount} more"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerability"
+msgid_plural "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerability for the source branch only"
+msgid_plural "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerabilities for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerability"
+msgid_plural "ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{fixedCount} fixed, and %{dismissedCount} dismissed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new vulnerability"
+msgid_plural "ciReport|%{reportType} %{status} detected %{newCount} new vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, %{fixedCount} fixed, and %{dismissedCount} dismissed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, and %{dismissedCount} dismissed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, and %{dismissedCount} dismissed vulnerabilities for the source branch only"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, and %{fixedCount} fixed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} vulnerability for the source branch only"
+msgid_plural "ciReport|%{reportType} %{status} detected %{newCount} vulnerabilities for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ciReport|%{reportType} %{status} detected no new vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected no vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected no vulnerabilities for the source branch only"
+msgstr ""
+
+msgid "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerability"
+msgid_plural "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ciReport|%{reportType} detected no vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} is loading"
+msgstr ""
+
+msgid "ciReport|%{reportType}: Loading resulted in an error"
+msgstr ""
+
+msgid "ciReport|%{vulnerability} in %{featurename}"
+msgstr ""
+
+msgid "ciReport|(errors when loading results)"
+msgstr ""
+
+msgid "ciReport|(is loading)"
+msgstr ""
+
+msgid "ciReport|(is loading, errors when loading results)"
+msgstr ""
+
+msgid "ciReport|All confidence levels"
+msgstr ""
+
+msgid "ciReport|All projects"
+msgstr ""
+
+msgid "ciReport|All report types"
+msgstr ""
+
+msgid "ciReport|All severities"
+msgstr ""
+
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
+msgid "ciReport|Class"
+msgstr ""
+
+msgid "ciReport|Code quality"
+msgstr ""
+
+msgid "ciReport|Confidence"
+msgstr ""
+
+msgid "ciReport|Container Scanning"
+msgstr ""
+
+msgid "ciReport|Container scanning"
+msgstr ""
+
+msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
+msgstr ""
+
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
+msgstr ""
+
+msgid "ciReport|Create issue"
+msgstr ""
+
+msgid "ciReport|DAST"
+msgstr ""
+
+msgid "ciReport|Dependency Scanning"
+msgstr ""
+
+msgid "ciReport|Dependency Scanning detects known vulnerabilities in your source code's dependencies."
+msgstr ""
+
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Description"
+msgstr ""
+
+msgid "ciReport|Download patch to resolve"
+msgstr ""
+
+msgid "ciReport|Download the patch to apply it manually"
+msgstr ""
+
+msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
+msgstr ""
+
+msgid "ciReport|Failed to load %{reportName} report"
+msgstr ""
+
+msgid "ciReport|File"
+msgstr ""
+
+msgid "ciReport|Fixed:"
+msgstr ""
+
+msgid "ciReport|Identifiers"
+msgstr ""
+
+msgid "ciReport|Image"
+msgstr ""
+
+msgid "ciReport|Instances"
+msgstr ""
+
+msgid "ciReport|Investigate this vulnerability by creating an issue"
+msgstr ""
+
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr ""
+
+msgid "ciReport|Links"
+msgstr ""
+
+msgid "ciReport|Loading %{reportName} report"
+msgstr ""
+
+msgid "ciReport|Manage licenses"
+msgstr ""
+
+msgid "ciReport|Method"
+msgstr ""
+
+msgid "ciReport|Namespace"
+msgstr ""
+
+msgid "ciReport|No changes to code quality"
+msgstr ""
+
+msgid "ciReport|No changes to performance metrics"
+msgstr ""
+
+msgid "ciReport|Performance metrics"
+msgstr ""
+
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
+msgid "ciReport|SAST"
+msgstr ""
+
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
+msgid "ciReport|Severity"
+msgstr ""
+
+msgid "ciReport|Solution"
+msgstr ""
+
+msgid "ciReport|Static Application Security Testing (SAST) detects known vulnerabilities in your source code."
+msgstr ""
+
+msgid "ciReport|There was an error creating the issue. Please try again."
+msgstr ""
+
+msgid "ciReport|There was an error creating the merge request. Please try again."
+msgstr ""
+
+msgid "ciReport|There was an error dismissing the vulnerability. Please try again."
+msgstr ""
+
+msgid "ciReport|There was an error loading DAST report"
+msgstr ""
+
+msgid "ciReport|There was an error loading SAST report"
+msgstr ""
+
+msgid "ciReport|There was an error loading container scanning report"
+msgstr ""
+
+msgid "ciReport|There was an error loading dependency scanning report"
+msgstr ""
+
+msgid "ciReport|There was an error reverting the dismissal. Please try again."
+msgstr ""
+
+msgid "ciReport|Upgrade %{name} from %{version} to %{fixed}."
+msgstr ""
+
+msgid "ciReport|Upgrade %{name} to %{fixed}."
+msgstr ""
+
+msgid "ciReport|Upgrade to %{fixed}."
+msgstr ""
+
+msgid "ciReport|Used by %{packagesString}"
+msgid_plural "ciReport|Used by %{packagesString}, and %{lastPackage}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ciReport|View full report"
+msgstr ""
+
+msgid "comment"
+msgstr ""
+
+msgid "commented on %{link_to_project}"
+msgstr ""
+
+msgid "commit %{commit_id}"
+msgstr ""
+
+msgid "confidence|Confirmed"
+msgstr ""
+
+msgid "confidence|Experimental"
+msgstr ""
+
+msgid "confidence|High"
+msgstr ""
+
+msgid "confidence|Ignore"
+msgstr ""
+
+msgid "confidence|Low"
+msgstr ""
+
+msgid "confidence|Medium"
+msgstr ""
+
+msgid "confidence|Undefined"
+msgstr ""
+
+msgid "confidence|Unknown"
+msgstr ""
+
+msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue."
+msgstr ""
+
+msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue."
+msgstr ""
+
+msgid "connecting"
+msgstr ""
+
+msgid "could not read private key, is the passphrase correct?"
+msgstr ""
+
+msgid "created"
+msgstr ""
+
+msgid "customize"
+msgstr ""
+
+msgid "date must not be after 9999-12-31"
+msgstr ""
+
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "deleted"
+msgstr ""
+
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
+
+msgid "detached"
+msgstr ""
+
+msgid "disabled"
+msgstr ""
+
+msgid "done"
+msgstr ""
+
+msgid "draft"
+msgid_plural "drafts"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "e.g. %{token}"
+msgstr ""
+
+msgid "element is not a hierarchy"
+msgstr ""
+
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "encrypted: needs to be a :required, :optional or :migrating!"
+msgstr ""
+
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
+msgstr ""
+
+msgid "error"
+msgstr ""
+
+msgid "error code:"
+msgstr ""
+
+msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
+msgstr ""
+
+msgid "expired on %{milestone_due_date}"
+msgstr ""
+
+msgid "expires on %{milestone_due_date}"
+msgstr ""
+
+msgid "failed"
+msgstr ""
+
+msgid "for %{link_to_merge_request} with %{link_to_merge_request_source_branch}"
+msgstr ""
+
+msgid "for %{link_to_merge_request} with %{link_to_merge_request_source_branch} into %{link_to_merge_request_target_branch}"
+msgstr ""
+
+msgid "for %{link_to_pipeline_ref}"
+msgstr ""
+
+msgid "for %{ref}"
+msgstr ""
+
+msgid "for this project"
+msgstr ""
+
+msgid "from"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "has already been taken"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "here"
+msgstr ""
+
+msgid "https://your-bitbucket-server"
+msgstr ""
+
+msgid "image diff"
+msgstr ""
+
+msgid "import flow"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in group %{link_to_group}"
+msgstr ""
+
+msgid "in project %{link_to_project}"
+msgstr ""
+
+msgid "index"
+msgstr ""
+
+msgid "instance completed"
+msgid_plural "instances completed"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "invalid milestone state `%{state}`"
+msgstr ""
+
+msgid "is an invalid IP address range"
+msgstr ""
+
+msgid "is enabled."
+msgstr ""
+
+msgid "is invalid because there is downstream lock"
+msgstr ""
+
+msgid "is invalid because there is upstream lock"
+msgstr ""
+
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
+msgid "is not a valid X509 certificate."
+msgstr ""
+
+msgid "is not an email you own"
+msgstr ""
+
+msgid "is too long (maximum is 1000 entries)"
+msgstr ""
+
+msgid "issue"
+msgstr ""
+
+msgid "it is stored externally"
+msgstr ""
+
+msgid "it is stored in LFS"
+msgstr ""
+
+msgid "it is too large"
+msgstr ""
+
+msgid "jigsaw is not defined"
+msgstr ""
+
+msgid "latest"
+msgstr ""
+
+msgid "latest deployment"
+msgstr ""
+
+msgid "latest version"
+msgstr ""
+
+msgid "leave %{group_name}"
+msgstr ""
+
+msgid "locked by %{path_lock_user_name} %{created_at}"
+msgstr ""
+
+msgid "log in"
+msgstr ""
+
+msgid "manual"
+msgstr ""
+
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
+msgid "merge request"
+msgid_plural "merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "milestone should belong either to a project or a group."
+msgstr ""
+
+msgid "missing"
+msgstr ""
+
+msgid "mrWidgetCommitsAdded|%{commitCount} and %{mergeCommitCount} will be added to %{targetBranch}."
+msgstr ""
+
+msgid "mrWidgetCommitsAdded|%{commitCount} will be added to %{targetBranch}."
+msgstr ""
+
+msgid "mrWidgetCommitsAdded|1 merge commit"
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
+msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
+msgstr ""
+
+msgid "mrWidget|%{link_start}Learn more about resolving conflicts%{link_end}"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
+msgid "mrWidget|Added to the merge train by"
+msgstr ""
+
+msgid "mrWidget|Allows commits from members who can merge to the target branch"
+msgstr ""
+
+msgid "mrWidget|An error occurred while removing your approval."
+msgstr ""
+
+msgid "mrWidget|An error occurred while retrieving approval data for this merge request."
+msgstr ""
+
+msgid "mrWidget|An error occurred while submitting your approval."
+msgstr ""
+
+msgid "mrWidget|Approval password is invalid."
+msgstr ""
+
+msgid "mrWidget|Approve"
+msgstr ""
+
+msgid "mrWidget|Approve additionally"
+msgstr ""
+
+msgid "mrWidget|Approved by"
+msgstr ""
+
+msgid "mrWidget|Cancel automatic merge"
+msgstr ""
+
+msgid "mrWidget|Check out branch"
+msgstr ""
+
+msgid "mrWidget|Checking ability to merge automatically"
+msgstr ""
+
+msgid "mrWidget|Cherry-pick"
+msgstr ""
+
+msgid "mrWidget|Cherry-pick this merge request in a new merge request"
+msgstr ""
+
+msgid "mrWidget|Closed"
+msgstr ""
+
+msgid "mrWidget|Closed by"
+msgstr ""
+
+msgid "mrWidget|Closes"
+msgstr ""
+
+msgid "mrWidget|Create an issue to resolve them later"
+msgstr ""
+
+msgid "mrWidget|Delete source branch"
+msgstr ""
+
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
+msgid "mrWidget|Did not close"
+msgstr ""
+
+msgid "mrWidget|Email patches"
+msgstr ""
+
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
+msgid "mrWidget|Fast-forward merge is not possible. To merge this request, first rebase locally."
+msgstr ""
+
+msgid "mrWidget|Fork merge requests do not create merge request pipelines which validate a post merge result"
+msgstr ""
+
+msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
+msgstr ""
+
+msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
+msgstr ""
+
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
+msgid "mrWidget|Mentions"
+msgstr ""
+
+msgid "mrWidget|Merge"
+msgstr ""
+
+msgid "mrWidget|Merge failed."
+msgstr ""
+
+msgid "mrWidget|Merge failed: %{mergeError}. Please try again."
+msgstr ""
+
+msgid "mrWidget|Merge locally"
+msgstr ""
+
+msgid "mrWidget|Merge request approved."
+msgstr ""
+
+msgid "mrWidget|Merged by"
+msgstr ""
+
+msgid "mrWidget|More information"
+msgstr ""
+
+msgid "mrWidget|No approval required"
+msgstr ""
+
+msgid "mrWidget|No approval required; you can still approve"
+msgstr ""
+
+msgid "mrWidget|Open in Web IDE"
+msgstr ""
+
+msgid "mrWidget|Pipeline blocked. The pipeline for this merge request requires a manual action to proceed"
+msgstr ""
+
+msgid "mrWidget|Plain diff"
+msgstr ""
+
+msgid "mrWidget|Ready to be merged automatically. Ask someone with write access to this repository to merge this request"
+msgstr ""
+
+msgid "mrWidget|Refresh"
+msgstr ""
+
+msgid "mrWidget|Refresh now"
+msgstr ""
+
+msgid "mrWidget|Refreshing now"
+msgstr ""
+
+msgid "mrWidget|Remove from merge train"
+msgstr ""
+
+msgid "mrWidget|Request to merge"
+msgstr ""
+
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
+msgid "mrWidget|Resolve conflicts"
+msgstr ""
+
+msgid "mrWidget|Resolve these conflicts or ask someone with write access to this repository to merge it locally"
+msgstr ""
+
+msgid "mrWidget|Revert"
+msgstr ""
+
+msgid "mrWidget|Revert this merge request in a new merge request"
+msgstr ""
+
+msgid "mrWidget|Revoke approval"
+msgstr ""
+
+msgid "mrWidget|Set by"
+msgstr ""
+
+msgid "mrWidget|The changes were merged into"
+msgstr ""
+
+msgid "mrWidget|The changes were not merged into"
+msgstr ""
+
+msgid "mrWidget|The changes will be merged into"
+msgstr ""
+
+msgid "mrWidget|The pipeline for this merge request failed. Please retry the job or push a new commit to fix the failure"
+msgstr ""
+
+msgid "mrWidget|The source branch HEAD has recently changed. Please reload the page and review the changes before merging"
+msgstr ""
+
+msgid "mrWidget|The source branch has been deleted"
+msgstr ""
+
+msgid "mrWidget|The source branch is %{commitsBehindLinkStart}%{commitsBehind}%{commitsBehindLinkEnd} the target branch"
+msgstr ""
+
+msgid "mrWidget|The source branch is being deleted"
+msgstr ""
+
+msgid "mrWidget|The source branch will be deleted"
+msgstr ""
+
+msgid "mrWidget|The source branch will not be deleted"
+msgstr ""
+
+msgid "mrWidget|There are merge conflicts"
+msgstr ""
+
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
+
+msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
+msgstr ""
+
+msgid "mrWidget|This merge request failed to be merged automatically"
+msgstr ""
+
+msgid "mrWidget|This merge request is in the process of being merged"
+msgstr ""
+
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This project is archived, write access has been disabled"
+msgstr ""
+
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
+msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
+msgstr ""
+
+msgid "mrWidget|You can delete the source branch now"
+msgstr ""
+
+msgid "mrWidget|You can merge this merge request manually using the"
+msgstr ""
+
+msgid "mrWidget|Your password"
+msgstr ""
+
+msgid "mrWidget|branch does not exist."
+msgstr ""
+
+msgid "mrWidget|command line"
+msgstr ""
+
+msgid "mrWidget|into"
+msgstr ""
+
+msgid "mrWidget|to be added to the merge train when the pipeline succeeds"
+msgstr ""
+
+msgid "mrWidget|to be merged automatically when the pipeline succeeds"
+msgstr ""
+
+msgid "mrWidget|to start a merge train when the pipeline succeeds"
+msgstr ""
+
+msgid "must be greater than start date"
+msgstr ""
+
+msgid "n/a"
+msgstr ""
+
+msgid "needs to be between 10 minutes and 1 month"
+msgstr ""
+
+msgid "new merge request"
+msgstr ""
+
+msgid "no contributions"
+msgstr ""
+
+msgid "no one can merge"
+msgstr ""
+
+msgid "none"
+msgstr ""
+
+msgid "not found"
+msgstr ""
+
+msgid "notification emails"
+msgstr ""
+
+msgid "nounSeries|%{firstItem} and %{lastItem}"
+msgstr ""
+
+msgid "nounSeries|%{item}, %{nextItem}"
+msgstr ""
+
+msgid "nounSeries|%{item}, and %{lastItem}"
+msgstr ""
+
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
+
+msgid "out of %d total test"
+msgid_plural "out of %d total tests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "parent"
+msgid_plural "parents"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "password"
+msgstr ""
+
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
+
+msgid "point"
+msgid_plural "points"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "private"
+msgstr ""
+
+msgid "private key does not match certificate."
+msgstr ""
+
+msgid "processing"
+msgstr ""
+
+msgid "project"
+msgid_plural "projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "project avatar"
+msgstr ""
+
+msgid "quick actions"
+msgstr ""
+
+msgid "register"
+msgstr ""
+
+msgid "released %{time}"
+msgstr ""
+
+msgid "remaining"
+msgstr ""
+
+msgid "remove"
+msgstr ""
+
+msgid "remove due date"
+msgstr ""
+
+msgid "remove weight"
+msgstr ""
+
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
+msgid "rendered diff"
+msgstr ""
+
+msgid "reply"
+msgid_plural "replies"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "reset it."
+msgstr ""
+
+msgid "score"
+msgstr ""
+
+msgid "security Reports|There was an error creating the merge request"
+msgstr ""
+
+msgid "severity|Critical"
+msgstr ""
+
+msgid "severity|High"
+msgstr ""
+
+msgid "severity|Info"
+msgstr ""
+
+msgid "severity|Low"
+msgstr ""
+
+msgid "severity|Medium"
+msgstr ""
+
+msgid "severity|Undefined"
+msgstr ""
+
+msgid "severity|Unknown"
+msgstr ""
+
+msgid "should be greater than or equal to %{access} inherited membership from group %{group_name}"
+msgstr ""
+
+msgid "show less"
+msgstr ""
+
+msgid "sign in"
+msgstr ""
+
+msgid "sort:"
+msgstr ""
+
+msgid "source"
+msgstr ""
+
+msgid "source diff"
+msgstr ""
+
+msgid "specified top is not part of the tree"
+msgstr ""
+
+msgid "spendCommand|%{slash_command} will update the sum of the time spent."
+msgstr ""
+
+msgid "started"
+msgstr ""
+
+msgid "started on %{milestone_start_date}"
+msgstr ""
+
+msgid "starts on %{milestone_start_date}"
+msgstr ""
+
+msgid "stuck"
+msgstr ""
+
+msgid "success"
+msgstr ""
+
+msgid "syntax is correct"
+msgstr ""
+
+msgid "syntax is incorrect"
+msgstr ""
+
+msgid "this document"
+msgstr ""
+
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "to help your contributors communicate effectively!"
+msgstr ""
+
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
+msgid "triggered"
+msgstr ""
+
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
+msgid "updated"
+msgstr ""
+
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
+msgid "username"
+msgstr ""
+
+msgid "uses Kubernetes clusters to deploy your code!"
+msgstr ""
+
+msgid "verify ownership"
+msgstr ""
+
+msgid "version %{versionIndex}"
+msgstr ""
+
+msgid "via %{closed_via}"
+msgstr ""
+
+msgid "via merge request %{link}"
+msgstr ""
+
+msgid "view it on GitLab"
+msgstr ""
+
+msgid "view the blob"
+msgstr ""
+
+msgid "vulnerability|Add a comment or reason for dismissal"
+msgstr ""
+
+msgid "vulnerability|Add comment"
+msgstr ""
+
+msgid "vulnerability|Add comment & dismiss"
+msgstr ""
+
+msgid "vulnerability|Dismiss vulnerability"
+msgstr ""
+
+msgid "vulnerability|Save comment"
+msgstr ""
+
+msgid "vulnerability|Undo dismiss"
+msgstr ""
+
+msgid "vulnerability|dismissed"
+msgstr ""
+
+msgid "with %{additions} additions, %{deletions} deletions."
+msgstr ""
+
+msgid "within %d minute "
+msgid_plural "within %d minutes "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "yaml invalid"
+msgstr ""
+
diff --git a/locale/fil_PH/gitlab.po b/locale/fil_PH/gitlab.po
index ede7329449f..314a38468db 100644
--- a/locale/fil_PH/gitlab.po
+++ b/locale/fil_PH/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: fil\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:29\n"
+"PO-Revision-Date: 2019-09-24 10:24\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/fr/gitlab.po b/locale/fr/gitlab.po
index 485e3e9e60e..18d5cc1cd33 100644
--- a/locale/fr/gitlab.po
+++ b/locale/fr/gitlab.po
@@ -13,10 +13,13 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: fr\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:46\n"
+"PO-Revision-Date: 2019-09-24 10:24\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (depuis %{timeoutSource})"
msgid " Please sign in."
-msgstr ""
+msgstr " Veuillez vous identifier."
msgid " Try to %{action} this file again."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr " et"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " dégradé sur %d point"
@@ -40,12 +49,18 @@ msgstr[1] " amélioré sur %d points"
msgid " or "
msgstr " ou "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " ou <#epic id>"
msgid " or <#issue id>"
msgstr " ou <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d commentaire"
@@ -61,13 +76,18 @@ msgid_plural "%d commits behind"
msgstr[0] "%d commit de retard"
msgstr[1] "%d commits de retard"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d commit,"
+msgstr[1] "%d commits,"
+
msgid "%d commits"
msgstr "%d commits"
msgid "%d contribution"
msgid_plural "%d contributions"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d contribution"
+msgstr[1] "%d contributions"
msgid "%d exporter"
msgid_plural "%d exporters"
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d test passé avec succès"
msgstr[1] "%d tests passés avec succès"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d ticket"
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] "%d métrique"
msgstr[1] "%d métriques"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d changement à valider"
@@ -137,13 +172,13 @@ msgstr[1] "%s commits supplémentaires ont été ignorés afin d’éviter de ca
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} et %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "Discussion de %{authorsName}"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} a créé %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] "%{count} approbations de %{name} requises"
msgid "%{count} approvals from %{name}"
msgstr "%{count} approbations de %{name}"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "encore %{count}"
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] "%{count} commentaire en attente"
msgstr[1] "%{count} commentaires en attente"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} supprimé"
@@ -197,6 +247,9 @@ msgstr "Les %{group_docs_link_start}groupes%{group_docs_link_end} vous permetten
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} sera supprimé ! Êtesâ€vous sûr ?"
@@ -212,18 +265,21 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr ""
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}En savoir plus%{link_end} sur les droits des rôles"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Démarré"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} est verrouillé par l’utilisateur GitLab %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} étiquette"
msgstr[1] "%{strong_start}%{tag_count}%{strong_end} étiquettes"
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr "%{staged} changements prêts à être validés et %{unstaged} autres cha
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}En savoir plus%{usage_ping_link_end} sur les informations partagées avec GitLab Inc."
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr "Profil de %{user_name}"
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr "(source externe)"
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ %{count} de plus"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} de plus"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr "%{extraOptionCount} de plus"
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr "Authentification à deux facteurs"
-msgid "2FA enabled"
-msgstr "2FA activé"
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> ajoute
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} modifications non indexées</strong> et <strong>%{stagedFilesLength} modifications d’étape</strong>"
@@ -528,6 +614,9 @@ msgstr "Un site Hugo qui utilise Netlify comme intégration et livraison continu
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "Un site Jekyll qui utilise Netlify comme intégration et livraison continues (CI/CD) au lieu de GitLab, mais en gardant toutes les autres fonctionnalités géniales de GitLab."
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr "Un modèle prêt à l’emploi à utiliser pour les applications iOS en
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "Une expression rationnelle qui sera utilisée pour déterminer la sortie du test lors du traçage d’une tâche. Laissez vide pour désactiver"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "Une personne avec un accès en écriture à la branche source a sélectionné cette option"
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr "À propos de GitLab"
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "Compte"
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr "Actif"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr "Sessions actives"
@@ -654,12 +812,20 @@ msgstr "Activité"
msgid "Add"
msgstr "Ajouter"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr "Ajouter un CHANGELOG"
msgid "Add CONTRIBUTING"
msgstr "Ajouter un CONTRIBUTING"
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Ajoutez des Webhooks de groupe avec GitLab Enterprise Edition."
@@ -672,12 +838,27 @@ msgstr "Ajouter une grappe de serveurs Kubernetes"
msgid "Add README"
msgstr "Ajouter un README"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr "Ajouter une liste à puces"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Ajoutez un commentaire général à %{noteable_name}."
@@ -696,9 +877,6 @@ msgstr "Ajouter un tableau"
msgid "Add a task list"
msgstr "Ajouter une liste de tâches"
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Ajouter un texte apparaissant dans toutes communications par courriel (%{character_limit} caractères maximum)"
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr "Ajouter des approbateurs"
@@ -729,6 +910,9 @@ msgstr "Ajouter un enâ€tête et un pied de page aux courriels. Veuillez noter q
msgid "Add image comment"
msgstr "Ajouter un commentaire à l’image"
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr "Ajouter du texte en italique"
@@ -747,12 +931,21 @@ msgstr "Ajouter une nouvelle application"
msgid "Add new directory"
msgstr "Ajouter un nouveau dossier"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr "Ajouter une réaction"
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,8 +958,8 @@ msgstr "Ajouter au projet"
msgid "Add to review"
msgstr "Ajouter à la revue de code"
-msgid "Add todo"
-msgstr "Ajouter à la liste « à faire »"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "Ajouter un ou des utilisateurs au groupe :"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr "Ajouté à"
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "L’ajout de nouvelles applications est désactivé dans votre instance GitLab. Veuillez contacter votre administrateur GitLab pour en obtenir la permission."
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr "L’arrêt des tâches a échoué"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Vous êtes sur le point d’arrêter toutes les tâches. Toutes les tâches en cours seront interrompues."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] "Alerte"
msgstr[1] "Alertes"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr "Tous"
msgid "All Members"
msgstr "Tous les membres"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "Toutes les modifications sont validées"
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr "Tous les utilisateurs"
@@ -1043,6 +1299,12 @@ msgstr "Permettre le rendu des diagrammes PlantUML dans les documents Asciidoc."
msgid "Allow requests to the local network from hooks and services."
msgstr "Autoriser les requêtes sur le réseau local à partir de hooks et de services."
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr "Autoriser les utilisateurs à demander un accès"
msgid "Allow users to request access if visibility is public or internal."
msgstr "Autoriser les utilisateurs à demander l’accès si la visibilité est publique ou interne."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,15 +1332,9 @@ msgstr "Également appelé « émetteur » ou « identifiant du tiers de conf
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "Aussi appelée « adresse URL du service du tiers de confiance » ou « URL de réponse »"
-msgid "Alternate support URL for help page"
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "Vous pouvez également utiliser un %{personal_access_token_link}. Lorsque vous créerez votre jeton d’accès personnel, sélectionnez la portée <code>dépôt</code>, afin de permettre l’affichage d’une liste de vos dépôts publics et privés disponibles à la connexion."
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Vous pouvez également utiliser un %{personal_access_token_link}. Lorsque vous créerez votre jeton d’accès personnel, sélectionnez la portée <code>dépôt</code>, afin de permettre l’affichage d’une liste de vos dépôts publics et privés qui pourront être importés."
-
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "Durée (en heures) durant laquelle les utilisateurs sont autorisés à outrepasser la configuration de l’authentification à double facteur obligatoire"
@@ -1088,8 +1347,8 @@ msgstr "Un champ utilisateur Gitlab vide ajoutera le nom complet de l’utilisat
msgid "An error has occurred"
msgstr "Une erreur est survenue"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Une erreur est survenue lors de l’ajout d’un brouillon à la discussion."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "Une erreur est survenue lors de l’ajout d’un nouveau brouillon."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "Une erreur s’est produite lors de la récupération des projets"
@@ -1235,12 +1500,12 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
-msgstr "Une erreur s’est produite lors du rendu de KaTeX"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "Une erreur s’est produite lors de la prévisualisation de la bannière"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "Une erreur s’est produite lors de la récupération de l’activité du calendrier"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr "Une erreur est survenue lors de l’abonnement aux notifications."
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "Une erreur est survenue lors du désabonnement aux notifications."
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr "Une erreur est survenue. Merci de réessayer."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr "Analyse"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Apparence"
@@ -1391,6 +1671,9 @@ msgstr "Applications"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "avr."
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr "Êtesâ€vous sûr·e de vouloir réinitialiser le jeton de bilan de santé ?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr "Identifiant de l’artefact"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Artéfacts"
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr "Attribuer une couleur personnalisée comme #FF0000"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "Attribuer des étiquettes"
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "Tickets assignés"
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr "Assigné à moi"
msgid "Assignee"
-msgstr "Assigné·e"
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr "La liste des personnes assignées n’est pas disponible avec votre licence actuelle"
@@ -1627,6 +1951,9 @@ msgstr "Les listes d’assignation montrent tous les bogues assignés à l’uti
msgid "Assignee(s)"
msgstr "Assigné·e(s)"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr "Au moins une approbation d’un propriétaire de code est requise pour modifier les fichiers correspondant aux règles de propriété du code (CODEOWNER)."
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr "Événements d’audit"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "août"
msgid "August"
msgstr "août"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "Journal d’authentification"
@@ -1710,6 +2046,9 @@ msgstr "Auto DevOps activé"
msgid "Auto DevOps, runners and job artifacts"
msgstr "Auto DevOps, exécuteurs et artéfacts de tâches"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "Annuler automatiquement les pipelines redondants en attente"
@@ -1731,6 +2070,18 @@ msgstr "Apprenezâ€en davantage en consultant la %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Le pipeline Auto DevOps a été activé et sera utilisé si aucun autre fichier de configuration d’intégration continue n’est trouvé. %{more_information_link}"
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,32 +2262,32 @@ msgstr "Vous trouverez ciâ€dessous tous les groupes publics."
msgid "Billing"
msgstr "Facturation"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} est actuellement sur le forfait %{plan_link}."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "La rétrogradation automatique et la mise à niveau vers certains forfaits ne sont actuellement pas disponibles."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "Forfait actuel"
-msgid "BillingPlans|Customer Support"
-msgstr "Service client"
-
msgid "BillingPlans|Downgrade"
msgstr "Rétrograder"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "Renseignez-vous sur nos forfaits en lisant notre %{faq_link}, où essayez gratuitement l’édition Or sur GitLab.com pendant 30 jours."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "Apprenezâ€en plus sur chacun des forfaits en lisant notre %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "Gérer les forfaits"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "Veuillez contacter le %{customer_support_link} dans ce cas."
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "Afficher toutes les caractéristiques de %{plan_name}"
@@ -1950,14 +2301,11 @@ msgstr "Pour gérer le forfait de ce groupe, rendez vous à la section facturati
msgid "BillingPlans|Upgrade"
msgstr "Mise à niveau"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "Vous êtes actuellement abonné au forfait %{plan_link}."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "Votre essai gratuit sur GitLab.com a expiré le %{expiration_date}. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "Votre essai gratuit de l’édition Or <strong>expirera le %{expiration_date}</strong>. Vous pouvez en apprendre plus sur l’édition Or de GitLab.com en lisant notre %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "caractéristiques"
@@ -1974,6 +2322,9 @@ msgstr "au prix annuel de %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "par utilisateur"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr "Importation d’un serveur Bitbucket"
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr "Blog"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "Tableaux"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "La branche %{branchName} n’a pas été trouvée dans le dépôt de ce projet."
@@ -2173,6 +2544,9 @@ msgstr "Parcourir le fichier"
msgid "Browse Files"
msgstr "Parcourir les fichiers"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Parcourir les fichiers"
@@ -2284,7 +2658,10 @@ msgstr "En savoir plus à propos d’Auto DevOps"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "Le pipeline Auto DevOps sera exécuté si aucun autre fichier de configuration n’est trouvé."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr "instance activée"
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Annuler"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "Annuler cette tâche"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "Ne peut être fusionnée automatiquement"
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "Impossible de modifier la grappe de serveurs gérée par Kubernetes"
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr "Modifier le poids"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr "Défaire"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "Cela va créer un nouveau commit afin de défaire les modifications existantes."
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr "Statistiques"
msgid "Chat"
msgstr "Discussion"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr "Choisissez une branche ou une étiquette (par exemple %{master}) ou entr
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr "Choisissez quels dépôts vous voulez connecter pour exécuter des pipel
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "Choisissez les fragments que vous souhaitez synchroniser avec ce nœud secondaire."
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "annulé"
@@ -2593,6 +3051,9 @@ msgstr "Supprimer cette variable"
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "* (tout environnement)"
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "Effacer la recherche"
msgid "Clear search input"
msgstr "Vider le champ de recherche"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr "Cliquez sur le bouton <strong>Sélectionner aucun</strong> sur la droit
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "Cliquez sur le bouton ci-dessous pour lancer le processus d’installation en accédant à la page Kubernetes"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "Cliquez pour l’agrandir."
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr "Fermer"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "Clore l’épopée"
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "Fermé(e)"
msgid "Closed issues"
msgstr "Tickets clos"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Options avancées concernant l’intégration de cette grappe de serveurs Kubernetes"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Une erreur est survenue lors de la tentative de contact de l’API Google Cloud. Veuillez réessayer plus tard."
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Ensemble de certificats des autorités de certification (format PEM)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "Choisissez les applications à installer sur votre grappe de serveurs Kubernetes. L’installation de n’importe quelle des applications suivantes nécessite Helm Tiller."
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Choisissez lequel de vos environnements utilisera cette grappe de serveurs."
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr "Copier le nom de la grappe de serveurs Kubernetes"
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Créer une grappe de serveurs Kubernetes"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "Le saviezâ€vous ?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Activez ou désactivez la connexion de GitLab à votre grappe de serveurs Kubernetes."
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Projet Google Cloud Platform"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -3001,8 +3519,8 @@ msgstr "La grappe de serveurs Kubernetes est en cours de création sur Google Ku
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Nom de la grappe de serveurs Kubernetes"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "La grappe de serveurs Kubernetes a été créée avec succès sur Google Kubernetes Engine. Actualisez la page pour voir les détails de la grappe de serveurs Kubernetes"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "Les grappes de serveurs Kubernetes vous permettent d’utiliser des applications de revue de code, de déployer vos applications, d’exécuter vos pipelines et bien plus encore, et ce, de manière très simple."
@@ -3016,6 +3534,9 @@ msgstr "En savoir plus sur les %{help_link_start_machine_type}types de machine
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "En savoir plus sur %{help_link_start}les zones%{help_link_end}."
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "En savoir plus sur Kubernetes"
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Type de machine"
@@ -3037,6 +3564,9 @@ msgstr "Assurezâ€vous que votre compte %{link_to_requirements} pour créer des
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "Gérez votre grappe de serveurs Kubernetes en visitant %{link_gke}"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "Aucun type de machine ne correspond à votre recherche"
@@ -3046,6 +3576,9 @@ msgstr "Aucun projet trouvé"
msgid "ClusterIntegration|No projects matched your search"
msgstr "Aucun projet ne correspond à votre recherche"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "Aucune zone ne correspond à votre recherche"
@@ -3070,6 +3603,9 @@ msgstr "Grappe de serveurs du projet"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "Espace de noms du projet (facultatif, unique)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3082,6 +3618,9 @@ msgstr "Grappe de serveurs avec contrôle d’accès par rôle"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "Lisez notre %{link_to_help_page} sur l’intégration d’une grappe de serveurs Kubernetes."
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Supprimer l’intégration de la grappe de serveurs Kubernetes"
@@ -3100,15 +3639,24 @@ msgstr "La demande de lancement de l’installation a échoué"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "Enregistrer les modifications"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "Rechercher les types de machines"
msgid "ClusterIntegration|Search projects"
msgstr "Rechercher des projets"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "Rechercher les zones"
@@ -3127,6 +3675,9 @@ msgstr "Sélectionnez le projet et la zone afin de choisir le type de machine"
msgid "ClusterIntegration|Select project to choose zone"
msgstr "Sélectionnez le projet afin de choisir la zone"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "Sélectionnez la zone"
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "Validation de l’état de la facturation du projet"
@@ -3235,18 +3795,24 @@ msgstr "documentation"
msgid "ClusterIntegration|help page"
msgstr "page d’aide"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "répond aux exigences"
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
-msgstr "correctement configuré"
-
msgid "ClusterIntegration|sign up"
msgstr "s’inscrire"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr ""
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr "Masquer la barre latérale"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "Commenter"
@@ -3292,11 +3867,11 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
-msgstr "Commenter et marquer la discussion comme résolue"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "Commenter et marquer la discussion comme non résolue"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "Position du formulaire de commentaire"
@@ -3304,6 +3879,9 @@ msgstr "Position du formulaire de commentaire"
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "Commentaires"
@@ -3315,6 +3893,9 @@ msgstr[1] "Commits"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "Message du commit"
@@ -3411,12 +3992,18 @@ msgstr "Cible"
msgid "CompareBranches|There isn't anything to compare."
msgstr "Il n’y a rien à comparer."
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "Confidentiel"
msgid "Confidentiality"
msgstr "Confidentialité"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr "Configurer les délais d’expiration de Gitaly."
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr "Configurer le traçage"
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "Configurer les vérifications Git automatiques et la maintenance des dépôts."
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr "Configurer les limites pour les requêtes Web et d’API."
@@ -3501,32 +4094,40 @@ msgstr "Registre de conteneur"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "Inscrivezâ€vous d’abord au registre de conteneur GitLab à l’aide de votre nom d’utilisateur GitLab et de votre mot de passe. Si vous avez %{link_2fa} vous devrez utiliser un %{link_token} :"
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab prend en charge jusqu’à trois niveaux de noms d’image. Les exemples d’images suivants sont valides pour votre projet :"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "Comment utiliser le registre de conteneur"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "En savoir plus sur"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "Aucune étiquette dans le registre de conteneur pour l’image de ce conteneur."
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "Une fois identifié·e, vous êtes libre de créer et télécharger une image de conteneur en utilisant les commandes courantes de %{build} et %{push}"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "Supprimer le dépôt"
-msgid "ContainerRegistry|Remove tag"
-msgstr "Supprimer l’étiquette"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "Taille"
@@ -3537,14 +4138,29 @@ msgstr "Étiquette"
msgid "ContainerRegistry|Tag ID"
msgstr "Identifiant de l’étiquette"
-msgid "ContainerRegistry|Use different image names"
-msgstr "Utilisez des noms d’image différents"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "Avec le registre de conteneur Docker intégré à GitLab, chaque projet peut avoir son propre espace pour stocker ses images Docker."
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "Vous pouvez également utiliser un %{deploy_token} pour un accès en lecture seule aux images du registre."
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
msgstr ""
@@ -3606,15 +4222,24 @@ msgstr "Contrôle la concurrence maximale des remplacements de dépôt pour ce n
msgid "ConvDev Index"
msgstr "Index ConvDev"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr "Copier l’URL %{protocol} de clonage"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr "Copier l’identifiant dans le presseâ€papiers"
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr "Copier le lien"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr "Copier la référence dans le presseâ€papiers"
@@ -3666,6 +4294,12 @@ msgstr "Copier dans le presseâ€papiers"
msgid "Copy token to clipboard"
msgstr "Copier le jeton dans le presseâ€papiers"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,27 +4315,39 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr ""
+
msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
msgid "Could not remove the trigger."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "Impossible de récupérer l’état du pipeline. Pour obtenir un dépannage pas à pas, veuillez vous référer à la %{linkStart}documentation%{linkEnd}."
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr "Créer"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "Créer un nouveau dossier"
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr "Créer un jeton d’accès personnel pour votre compte afin de récupér
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "Créer une branche"
msgid "Create commit"
msgstr "Créer un commit"
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "Créer un dossier"
@@ -3771,6 +4429,9 @@ msgstr "Créer une demande de fusion et une branche"
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "Créer une nouvelle branche"
@@ -3789,6 +4450,9 @@ msgstr "Créer une nouvelle étiquette"
msgid "Create new..."
msgstr "Créer un nouveau…"
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "Créer une étiquette de projet"
@@ -3813,6 +4477,12 @@ msgstr "Créé"
msgid "Created At"
msgstr "Créé à"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "Créé par moi"
@@ -3834,18 +4504,30 @@ msgstr "Créé le"
msgid "Created on:"
msgstr "Créé le :"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr "Création de l’épopée en cours"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Fuseau horaire des tâches planifiées cron"
msgid "Cron syntax"
msgstr "Syntaxe de la planification cron"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "Branche actuelle"
@@ -3882,6 +4564,45 @@ msgstr "Modèles de projets personnalisés"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "Personnaliser les couleurs"
@@ -3891,18 +4612,51 @@ msgstr "Personnalisez la manière dont les adresses de courriel et les noms d’
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "Personnalisez la manière dont les adresses de courriel et les noms d’utilisateur provenant de Google Code sont importés dans GitLab. À la prochaine étape, vous pourrez sélectionner les projets que vous souhaitez importer."
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "Personnalisez la configuration de votre pipeline et affichez son état et le rapport de couverture."
msgid "Cycle Analytics"
msgstr "Analyse de cycle"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "Cycle Analytics donne un aperçu du temps qu’il faut pour qu’un projet passe d’une idée à sa mise en production."
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Code"
@@ -3924,6 +4678,31 @@ msgstr "Préproduction"
msgid "CycleAnalyticsStage|Test"
msgstr "Test"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr "Déboguer"
@@ -3990,12 +4772,21 @@ msgstr "Branche par défaut"
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr "Étiquette de classement par défaut"
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr "différé"
msgid "Delete"
msgstr "Supprimer"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "Supprimer le paquet"
msgid "Delete Snippet"
msgstr "Supprimer L’extrait de code"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "Supprimer le commentaire"
@@ -4080,6 +4880,9 @@ msgstr "Supprimé"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr "Refuser"
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "Déploiement"
@@ -4154,6 +4995,15 @@ msgstr "Clefs de déploiement"
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} autres"
@@ -4226,6 +5076,9 @@ msgstr "Créer un jeton de déploiement"
msgid "DeployTokens|Created"
msgstr "Créé"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "Jetons de déploiement"
@@ -4277,6 +5130,9 @@ msgstr "Votre nouveau jeton de déploiement pour votre projet a été créé."
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr "Déployé sur"
@@ -4301,9 +5157,30 @@ msgstr "Les modèles de description permettent de définir des modèles spécifi
msgid "Description:"
msgstr "Description :"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr "Limites du contenu du diff"
msgid "Diff limits"
msgstr "Limites du diff"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr "Aucun nom de fichier disponible"
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "Quelque chose s’est mal passé lors de la rapatriement des lignes du diff."
@@ -4367,6 +5253,9 @@ msgstr "Nom du dossier"
msgid "Disable"
msgstr "Désactiver"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "Désactiver pour ce projet"
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "Voulezâ€vous personnaliser la manière dont les adresses de courriel et les noms d’utilisateurs issus de Google Code sont importés dans GitLab ?"
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr "Documentation des principaux fournisseurs d’identité"
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr "Domaine"
@@ -4484,9 +5385,15 @@ msgstr "Effectué"
msgid "Download"
msgstr "Télécharger"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr "Chaque exécuteur peut être dans l’un des états suivants :"
msgid "Edit"
msgstr "Éditer"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr "Modifier le fragment de code"
msgid "Edit application"
msgstr "Modifier l’application"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4604,6 +5541,9 @@ msgstr "Courriel"
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "Correctif par courriel"
@@ -4688,12 +5628,15 @@ msgstr "Activer la collecte de données Pseudonymizer"
msgid "Enable SAML authentication for this group"
msgstr "Activer l’authentification SAML pour ce groupe"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "Activer Sentry pour les rapports d’erreurs et la journalisation."
+msgid "Enable access to Grafana"
+msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr "Activer et configurer les métriques InfluxDB."
@@ -4706,6 +5649,9 @@ msgstr "Activer le contrôle de classification à l’aide d’un service extern
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "Activer pour ce projet"
@@ -4724,12 +5670,18 @@ msgstr "Activer ou désactiver la collecte de données Pseudonymizer."
msgid "Enable or disable version check and usage ping."
msgstr "Activer ou désactiver le contrôle de version et l’envoi des données d’utilisation."
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "Activer reCAPTCHA ou Akismet et définir des limites d’adresse IP."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr "Se termine à (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "Entrez l’URL de votre serveur Bitbucket et votre jeton d’accès personnel ciâ€dessous"
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "Entrez la description du problème"
@@ -4787,9 +5757,18 @@ msgstr "Entrez la description de la demande de fusion"
msgid "Enter the merge request title"
msgstr "Entrez l’intitulé de la demande de fusion"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr "Épopée"
msgid "Epics"
msgstr "Épopées"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr "Feuille de route des épopées"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Les épopées vous permettent de gérer votre portefeuille de projets plus efficacement et avec moins d’efforts"
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "Ces dates affectent la manière dont vos épopées apparaissent sur la feuille de route. Les dates des jalons proviennent des jalons attribués aux tickets de l’épopée. Vous pouvez également définir des dates fixes ou les supprimer complètement."
@@ -5021,9 +6021,6 @@ msgstr "commence"
msgid "Error"
msgstr "Erreur"
-msgid "Error Reporting and Logging"
-msgstr "Rapport d’erreur et journalisation"
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr "Erreur lors de l’extraction des données des contributeur·rice·s."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "Erreur lors de la récupération des étiquettes."
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "Une erreur s’est produite lors de l’activation ou de la désactivation de l’abonnement aux notifications"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,14 +6126,17 @@ msgstr ""
msgid "Error saving label update."
msgstr "Erreur lors de la mise à jour de l’étiquette."
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "Erreur lors de la mise à jour de l’état de la liste de tâches à faire."
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "Erreur lors de la mise à jour du statut de tâche à faire."
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5216,9 +6228,15 @@ msgstr "Chaque semaine (dimanche à 4 h du matin)"
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr "Tout le monde peut contribuer"
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr "Tout étendre"
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "Étendre la barre latérale"
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr "Date d’expiration"
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr "L’autorisation externe a refusé l’accès à ce projet"
msgid "External authorization request timeout"
msgstr "Expiration du délai d’attente de la demande d’autorisation externe"
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "Étiquette de classification"
@@ -5357,6 +6399,15 @@ msgstr "Tâches ayant échoué"
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Échec du changement de propriétaire"
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr "Échec du déploiement sur"
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "Impossible de supprimer le ticket du tableau, veuillez réessayer."
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr "Échec de la signature via authentification par carte à puce"
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr "Échec"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr "URL de l’API"
msgid "FeatureFlags|Active"
msgstr "Actif"
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr "Configurer"
@@ -5519,6 +6603,9 @@ msgstr "Description"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "Modifier l’indicateur de fonctionnalité"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr "Indicateur de fonctionnalité"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr "Identifiant d’instance"
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr "Nouveau"
msgid "FeatureFlags|New Feature Flag"
msgstr "Nouvel indicateur de fonctionnalité"
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "État"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "févr."
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "Les champs de cette page sont désormais non modifiables, vous pouvez configurer"
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "Filtrer…"
@@ -5716,6 +6830,9 @@ msgstr "Terminé"
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr "Date fixée"
@@ -5779,6 +6896,9 @@ msgstr "Pour les projets privés, tout membre (invité ou supérieur) peut affic
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr "Pour les projets publics, tout le monde peut afficher des pipelines et accéder aux détails des tâches (journaux de sortie et artefacts)"
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr "Erreurs trouvées dans votre fichier .gitlab-ci.yml :"
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "Essai gratuit de GitLab.com Gold"
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr "Générer un jeu d’étiquettes par défaut"
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr "NÅ“uds Geo"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Geo vous permet de répliquer votre instance GitLab vers d’autres emplacements géographiques."
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "Le nœud est défaillant ou en panne."
@@ -5956,6 +7088,9 @@ msgstr "Objets LFS locaux"
msgid "GeoNodes|Local attachments"
msgstr "Pièces jointes locales"
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr "Artefacts de la tâche locale"
@@ -6064,33 +7199,42 @@ msgstr "Vous avez configuré des nœuds Geo en utilisant une connexion HTTP non
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} est programmé pour le reâ€téléchargement forcé"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} est programmé pour la revérification"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} est programmé pour la reâ€synchronisation"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
msgid "Geo|All"
msgstr "Tous"
msgid "Geo|All projects"
msgstr "Tous les projets"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "Tous les projets ont été planifiés pour revérification"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "Tous les projets ont été planifiés pour resynchronisation"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "Opérations par lot"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr "État de Geo"
msgid "Geo|Groups to synchronize"
msgstr "Groupes à synchroniser"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "Synchronisé"
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr "Projets dans certains fragments de stockage"
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr "Revérifier"
-
-msgid "Geo|Recheck all projects"
-msgstr "Revérifier tous les projets"
-
msgid "Geo|Redownload"
msgstr "Reâ€télécharger"
@@ -6193,6 +7334,12 @@ msgstr "Resynchroniser tous les projets"
msgid "Geo|Retry count"
msgstr "Nombre de tentatives"
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr "Sélectionner les groupes à répliquer."
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr "Synchro en échec — %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr "Obtenez une revue d’instance gratuite"
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr "Utilisateur GitLab"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr "GitLab va exécuter une tâche en arrièreâ€plan qui permettra de produ
msgid "GitLab.com import"
msgstr "Importation depuis GitLab.com"
-msgid "GitLab’s issue tracker"
-msgstr "Suivi de tickets de GitLab"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6367,9 +7523,18 @@ msgstr "URL de l’hôte Gitea"
msgid "Gitea Import"
msgstr "Importation depuis Gitea"
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr "Retour"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr "Aller vers"
msgid "Go to %{link_to_google_takeout}."
msgstr "Consultez le site de %{link_to_google_takeout}."
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,8 +7664,8 @@ msgstr "Importation depuis Google Code"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "L’authentification Google n’est pas %{link_to_documentation}. Demandez à votre administrat·eur·rice GitLab si vous souhaitez utiliser ce service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr ""
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr "Compris !"
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr "Graphique"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr "Groupe : %{group_name}"
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "Depuis %{dateWord}"
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr "Personnalisez vos badges numériques de groupe."
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "En savoir plus sur les badges numériques."
@@ -6640,6 +7907,9 @@ msgstr "Ce paramètre s’applique au groupe %{ancestor_group}. Vous pouvez écr
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "Ce paramètre s’appliquera à tous les sousâ€groupes, sauf s’il est modifié par un propriétaire du groupe. Les groupes déjà liés au projet continueront d’y avoir accès à moins d’être retirés manuellement."
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "ne peut pas être désactivé lorsque le groupe parent a activé le « Partage avec verrou de groupe », sauf par le propriétaire du groupe parent."
@@ -6763,6 +8033,12 @@ msgstr "Page d’aide"
msgid "Help page text and support page url."
msgstr "Texte de la page d’aide et URL de la page de support."
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr "Masquer la charge utile"
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Masquer la valeur"
@@ -6792,6 +8071,9 @@ msgstr[1] "Masquer les valeurs"
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr "Maintenance démarrée avec succès"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "J’accepte les %{terms_link}"
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "Identifiant"
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "Autoriser les aperçus en direct des projets JavaScript dans l’EDI Web à l’aide de l’évaluation côté client CodeSandbox."
@@ -6879,6 +8176,9 @@ msgstr "Rafraîchir l’aperçu"
msgid "IDE|Review"
msgstr "Examiner"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "Adresse IP"
@@ -6942,6 +8242,12 @@ msgstr "en pelure d’oignon"
msgid "ImageDiffViewer|Swipe"
msgstr "par balayage"
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr "Projet incompatible"
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr "Installez un exécuteur sur Kubernetes"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr "Statistiques de l’instance"
msgid "Instance Statistics visibility"
msgstr "Visibilité des statistiques de l’instance"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "L’instance ne prend pas en charge plusieurs grappes de serveurs Kubernetes"
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "Tickets"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "Les tickets peuvent être des bogues, des tâches ou des sujets de discussion. De plus, les tickets sont consultables et filtrables."
@@ -7331,8 +8673,11 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr "Une fois que vous aurez commencé à créer des tickets d’incident en relation avec vos projets, nous pourrons commencer à en effectuer le suivi et afficher des statistiques les concernant"
-msgid "IssuesAnalytics|Issues Created"
-msgstr "Tickets créés"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
msgid "IssuesAnalytics|Issues created per month"
msgstr "Tickets créés par mois"
@@ -7349,6 +8694,12 @@ msgstr "Il n’y a aucun ticket concernant les projets de votre groupe"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "Afin d’élargir votre recherche, modifiez ou supprimez des critères de recherche dans la barre de filtrage ciâ€dessus"
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7550,11 +8904,14 @@ msgstr "La grappe de serveurs Kubernetes a été mise à jour avec succès."
msgid "Kubernetes configured"
msgstr "Kubernetes configuré"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "L’intégration du service Kubernetes est obsolète. %{deprecated_message_content} vos grappes de serveurs Kubernetes en utilisant la nouvelle page <a href=\"%{url}\"/>Clusters Kubernetes</a>"
+msgid "LDAP"
+msgstr ""
msgid "LDAP settings"
msgstr ""
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] "Le dernier %d jour"
msgstr[1] "Les %d derniers jours"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "Dernier pipeline"
@@ -7660,15 +9020,24 @@ msgstr "Dernière modification le %{date}"
msgid "Last edited by %{name}"
msgstr "Dernière modification par %{name}"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr "Dernière réponse de"
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "Dernière mise à jour"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "Dernière mise à jour"
@@ -7687,7 +9056,7 @@ msgstr "à"
msgid "Latest changes"
msgstr "Derniers changements"
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr "En savoir plus"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "En savoir plus sur %{issue_boards_url}, afin de suivre des tickets dans de multiples listes, à l’aide des étiquettes, des personnes assignées et des jalons. Si une fonctionnalité concernant les tableaux des tickets vous manque, veuillez créer un ticket sur %{gitlab_issues_url}."
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "Apprenezâ€en plus dans la"
@@ -7765,77 +9137,99 @@ msgstr ""
msgid "License"
msgstr "Licence"
-msgid "LicenseManagement|Add a license"
-msgstr "Ajouter une licence"
+msgid "License Compliance"
+msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "Ajouter manuellement des licences afin d’approuver ou mettre sur liste noire"
+msgid "LicenseCompliance|Add a license"
+msgstr ""
-msgid "LicenseManagement|Approve"
-msgstr "Approuver"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "Approuver la licence"
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "Approuver la licence ?"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "Approuvée"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
-msgstr "Mettre sur liste noire"
+msgid "LicenseCompliance|Approved"
+msgstr ""
-msgid "LicenseManagement|Blacklist license"
-msgstr "Mettre la licence en liste noire"
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
-msgid "LicenseManagement|Blacklist license?"
-msgstr "Mettre la licence en liste noire ?"
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
-msgid "LicenseManagement|Blacklisted"
-msgstr "En liste noire"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "Annuler"
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
-msgid "LicenseManagement|License"
-msgstr "Licence"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
-msgid "LicenseManagement|License Management"
-msgstr "Gestion des licences"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
-msgid "LicenseManagement|License details"
-msgstr "Détails de la licence"
+msgid "LicenseCompliance|License"
+msgstr ""
-msgid "LicenseManagement|License name"
-msgstr "Nom de la licence"
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "Gérez les licences approuvées et sur liste noire pour ce projet."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
-msgid "LicenseManagement|Packages"
-msgstr "Paquets"
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
-msgid "LicenseManagement|Remove license"
-msgstr "Supprimer la licence"
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
-msgid "LicenseManagement|Remove license?"
-msgstr "Supprimer la licence ?"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "Envoyer"
+msgid "LicenseCompliance|License details"
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "Il n’y a actuellement aucune licence approuvée ou sur liste noire pour ce projet."
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "Cette licence existe déjà pour ce projet."
+msgid "LicenseCompliance|Packages"
+msgstr ""
-msgid "LicenseManagement|URL"
-msgstr "URL"
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "Vous êtes sur le point de supprimer la licence, %{name}, de ce projet."
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
+
+msgid "LicenseCompliance|Submit"
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
msgid "Licensed Features"
msgstr ""
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr "Licences"
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] "Affichage limité à %d événement maximum"
msgstr[1] "Affichage limité à %d événements maximum"
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "Liste"
@@ -7872,15 +9275,15 @@ msgstr "Lister les dépôts disponibles"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "Vue en liste"
msgid "List your Bitbucket Server repositories"
msgstr "Lister vos dépôts BitBucket Server"
-msgid "List your GitHub repositories"
-msgstr "Lister vos dépôts GitHub"
-
msgid "Live preview"
msgstr "Prévisualisation"
@@ -7890,6 +9293,9 @@ msgstr "Chargement des statistiques de contribution des membres du groupe"
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr "Chargement de l’EDI de GitLab…"
@@ -7929,13 +9335,19 @@ msgstr "Verrouillé"
msgid "Locked Files"
msgstr "Fichiers verrouillés"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "Verrouillé aux projets en cours"
msgid "Locks give the ability to lock specific file or folder."
msgstr "Les verrous permettent de verrouiller un fichier ou un dossier spécifique."
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr "Journaux"
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "Rendez chaque membre de votre équipe plus productif, quel que soit l’endroit où il se situe. GitLab Geo crée des miroirs en lecture seule de votre instance GitLab afin que vous puissiez réduire le temps nécessaire pour cloner et récupérer de gros dépôts."
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "Assurezâ€vous d’être connecté avec le compte propriétaire des projets que vous souhaitez importer."
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr "Importation de fichier manifeste"
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "Associer un identifiant de compte FogBugz à un utilisateur GitLab"
@@ -8037,6 +9461,12 @@ msgstr "mars"
msgid "March"
msgstr "mars"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,8 +9476,8 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
-msgstr "Marquer comme fait"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr ""
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr "Markdown activé"
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Métadonnées Maven"
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "Demande de fusion"
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr "Demande de fusion"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "Approbations de la demande de fusion"
@@ -8166,6 +9659,9 @@ msgstr "Demandes de fusion"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "Les demandes de fusion permettent de proposer les modifications que vous avez apportées à un projet et de discuter de ces modifications avec les autres"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "Une erreur est survenue lors de l’enregistrement du brouillon du commentaire."
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
-msgstr ""
+msgid "MergeRequests|Saving the comment failed"
+msgstr "L’enregistrement du commentaire a échoué"
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "Résoudre cette discussion avec un nouveau ticket"
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
-msgid "MergeRequests|Saving the comment failed"
-msgstr "L’enregistrement du commentaire a échoué"
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr "Afficher le fichier remplacé au commit %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr "Fusionnée"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "Messages"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "Métriques"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "Métriques — Influx"
msgid "Metrics - Prometheus"
msgstr "Métriques — Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr "Statistiques et rapports"
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr "Créer un miroir de dépôt"
-
msgid "Mirror direction"
msgstr "Sens du miroir"
@@ -8505,6 +10016,9 @@ msgstr "Annuler"
msgid "Modal|Close"
msgstr "Fermer"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr "Mois"
msgid "More"
msgstr "Plus"
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr "Autres actions"
@@ -8559,6 +10079,12 @@ msgstr "Déplacer le ticket"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "Nouvelle planification de pipeline"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "Nouvel extrait de code"
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr "Non"
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "Aucune connexion n’a pu être établie avec un serveur Gitaly, veuillez vérifier votre journal !"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr "Aucune image de conteneur stockée pour ce projet. Ajoutezâ€en une en suivant les instructions ciâ€dessous."
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr "Aucune contribution n’a été trouvée"
msgid "No credit card required."
msgstr "Aucune carte de crédit n’est nécessaire."
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr "Aucun fichier trouvé."
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr "Aucun ticket pour la période sélectionnée."
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "Aucune étiquette avec un tel nom ou une telle description"
@@ -8885,9 +10450,15 @@ msgstr "Aucun exécuteur trouvé"
msgid "No schedules"
msgstr "Aucune planification"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr "Non, importer directement les adresses de courriel et les noms d’utili
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr "NÅ“uds"
msgid "None"
msgstr "Aucun·e"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "Indisponible"
@@ -8927,6 +10504,9 @@ msgstr "Données insuffisantes"
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr "Pas maintenant"
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr "Remarque : Envisagez de demander à votre administrateur ou administrat
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "Remarque : Envisagez de demander à votre administra·teur·trice GitLab de configurer %{github_integration_link}, ce qui vous permettra de vous connecter via GitHub et d’importer des dépôts sans générer de jeton d’accès personnel."
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr "Notifications"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "Notifications désactivées"
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "OK"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr "Filtre"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr "Un ou plusieurs de vos projets Google Code ne peuvent être importés d
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr "Seulement les administrateurs"
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr "Ouh là, êtesâ€vous sûr(e) ?"
@@ -9145,6 +10761,9 @@ msgstr "Ouvrir"
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr "Ouvrir dans Xcode"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr "Ouvrir des projets"
@@ -9235,6 +10860,12 @@ msgstr "Autres informations"
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr "Requêtes sortantes"
@@ -9259,6 +10890,18 @@ msgstr "Informations du paquet"
msgid "Package was removed"
msgstr "Le paquet a été supprimé"
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "Paquets"
@@ -9281,29 +10924,29 @@ msgid "Pages getting started guide"
msgstr ""
msgid "Pagination|Go to first page"
-msgstr ""
+msgstr "Aller à la première page"
msgid "Pagination|Go to last page"
-msgstr ""
+msgstr "Aller à la dernière page"
msgid "Pagination|Go to next page"
-msgstr ""
+msgstr "Aller à la page suivante"
msgid "Pagination|Go to previous page"
-msgstr ""
+msgstr "Aller à la page précédente"
msgid "Pagination|Last »"
msgstr "Dernière ⇥"
-msgid "Pagination|Next"
-msgstr "Suivante"
-
-msgid "Pagination|Prev"
-msgstr "Précédente"
+msgid "Pagination|Next ›"
+msgstr "Suiv. ›"
msgid "Pagination|« First"
msgstr "⇤ Première"
+msgid "Pagination|‹ Prev"
+msgstr "‹ Préc."
+
msgid "Parameter"
msgstr ""
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "Effectuer des actions avancées telles que la modification du chemin d’accès, le transfert ou la suppression du groupe."
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr "Optimisation des performances"
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr "Droits d’accès"
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "Planification de pipeline"
@@ -9475,7 +11145,7 @@ msgstr "Variables"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Personnalisé"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr "Pipelines de la semaine dernière"
msgid "Pipelines for last year"
msgstr "Pipelines de l’année dernière"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr "Ce projet n’est actuellement pas configuré pour exécuter des pipelin
msgid "Pipeline|Commit"
msgstr "Commit"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr "Durée"
msgid "Pipeline|Existing branch name or tag"
msgstr "Nom de branche ou d’étiquette existant"
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "Pipeline"
@@ -9592,6 +11286,9 @@ msgstr "Arrêter le pipeline numéro %{pipelineId} ?"
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr "Variables"
@@ -9604,18 +11301,12 @@ msgstr "tous"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "réussi"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "avec l’étape"
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "Veuillez accepter les conditions générales d’utilisation avant de continuer."
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr "Veuillez choisir une URL de groupe sans caractères spéciaux."
@@ -9751,6 +11448,9 @@ msgstr "Veuillez patienter pendant la connexion à votre dépôt. Actualisez à
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "Veuillez patienter pendant l’importation de votre dépôt. Actualisez à votre guise."
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "Préférences"
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr "Thème de navigation"
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr "Aperçu de la charge utile"
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "Principal"
@@ -9880,6 +11589,21 @@ msgstr "Des projets privés peuvent être créés dans votre espace de noms pers
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "Profil"
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr "Chemin d’accès"
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr "Position et taille de votre nouvel avatar"
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "Certaines options ne sont pas disponibles pour les comptes LDAP"
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr "Votre statut"
msgid "Profiles|e.g. My MacBook key"
msgstr "p. ex., Ma clef MacBook"
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr "Mise à jour du projet « %{project_name} » effectuée."
msgid "Project Badges"
msgstr "Badges numériques du projet"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr "URL du projet"
msgid "Project access must be granted explicitly to each user."
msgstr "L’accès au projet doit être explicitement accordé à chaque utilisateur."
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10319,7 +12061,13 @@ msgid "ProjectOverview|Go to your fork"
msgstr "Aller à votre divergence"
msgid "ProjectOverview|Star"
-msgstr "Mettre une étoile"
+msgstr "Ajouter aux favoris"
+
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
msgid "ProjectOverview|Unstar"
msgstr "Supprimer l’étoile"
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr "Badges numériques"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "Contactez un administrateur pour modifier ce paramètre."
@@ -10525,12 +12309,60 @@ msgstr "Désolé, aucun projet ne correspond à votre recherche"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Cette fonctionnalité nécessite un navigateur prenant en charge localStorage"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
msgid "PrometheusAlerts|Add alert"
msgstr "Ajouter une alerte"
-msgid "PrometheusAlerts|Alert set"
-msgstr "Alerte définie"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "Modifier l’alerte"
@@ -10546,9 +12378,6 @@ msgstr "Erreur lors de la récupération de l’alerte"
msgid "PrometheusAlerts|Error saving alert"
msgstr "Erreur lors de l’enregistrement de l’alerte"
-msgid "PrometheusAlerts|No alert set"
-msgstr "Aucune alerte définie"
-
msgid "PrometheusAlerts|Operator"
msgstr "Opérateur"
@@ -10582,6 +12411,9 @@ msgstr "Les métriques courantes sont automatiquement supervisées grâce à une
msgid "PrometheusService|Custom metrics"
msgstr "Métriques personnalisées"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr "Plus d’informations"
msgid "PrometheusService|New metric"
msgstr "Nouvelle métrique"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "URL de base de l’API Prometheus, telle que http://prometheus.example.com/"
@@ -10636,6 +12471,12 @@ msgstr "En attente de votre premier déploiement dans un environnement pour trou
msgid "Promote"
msgstr "Promouvoir"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "Promouvoir ces jalons de projets en jalon de groupe."
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr "Ne plus réafficher ce message"
@@ -10684,6 +12528,9 @@ msgstr "Environnements protégés"
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} sera accessible en écriture aux développeurs. Êtesâ€vous sûr de vouloir cela ?"
@@ -10759,6 +12606,9 @@ msgstr "Pipelines publics"
msgid "Pull"
msgstr "Récupérer"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "Push"
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Lire plus"
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "Pour en savoir plus sur les autorisations de projet : <strong>%{link_to_help}</strong>"
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "Fonctionnalités en temps réel"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "Registre"
-
msgid "Related Deployed Jobs"
msgstr "Tâches déployées liées"
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "Me le rappeler ultérieurement"
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr "Supprimer"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr "Supprimer l’exécuteur"
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr "Supprimer l’avatar"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr "Supprimer le groupe"
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "Supprimer la priorité"
@@ -11028,30 +12911,75 @@ msgstr "Supprimer le projet"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr "Un groupe supprimé ne peut être restauré !"
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr "Rouvrir l’épopée"
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr "Réparer l’authentification"
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr "Répondez directement à ce courriel ou %{view_it_on_gitlab}."
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr "Dépôt par URL"
@@ -11166,6 +13112,9 @@ msgstr "aucun résultat de test modifié"
msgid "Repository"
msgstr "Dépôt"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "Paramètres du dépôt"
@@ -11190,9 +13139,15 @@ msgstr "Maintenance du dépôt"
msgid "Repository mirror"
msgstr "Miroir du dépôt"
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr "Stockage du dépôt"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "Sélectionner"
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr "Profils de requêtes"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "Exiger de tous les utilisateurs de ce groupe la configuration de l’authentification à double facteur"
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,11 +13215,17 @@ msgstr ""
msgid "Reset runners registration token"
msgstr "Réinitialiser le jeton d’inscription des exécuteurs"
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
-msgstr "Résoudre toutes les discussions dans un nouveau ticket"
+msgid "Resolve all threads in new issue"
+msgstr ""
msgid "Resolve conflicts on source branch"
msgstr "Résoudre les conflits sur la branche source"
@@ -11263,6 +13233,9 @@ msgstr "Résoudre les conflits sur la branche source"
msgid "Resolve discussion"
msgstr "Résoudre la discussion"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr "Reprendre"
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr "Feuille de route"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "Exécuter des pipelines CI / CD pour les dépôts externes"
@@ -11436,8 +13415,8 @@ msgstr "Page des exécuteurs"
msgid "Runners page."
msgstr "Page des exécuteurs."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "Vous avez utilisé tout le temps de pipeline partagé de vos exécuteurs."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "En cours d’exécution"
@@ -11511,6 +13490,9 @@ msgstr "Sauvegarder la planification du pipeline"
msgid "Save variables"
msgstr "Enregistrer les variables"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr "Planifier un nouveau pipeline"
msgid "Scheduled"
msgstr "Planifié"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "Planifications"
@@ -11541,15 +13526,30 @@ msgstr "Tableaux de tickets à portée limitée"
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr "Faites défiler jusqu’à <strong>Hébergement de projet Google Code</strong> et activez le commutateur sur la droite."
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr "Faire défiler vers le bas"
msgid "Scroll to top"
msgstr "Faire défiler vers le haut"
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "Rechercher"
@@ -11637,9 +13637,76 @@ msgstr "Dans ce groupe"
msgid "SearchAutocomplete|in this project"
msgstr "Dans ce projet"
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr "Secret"
msgid "Security"
msgstr "Sécurité"
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr "Tableau de bord de sécurité"
@@ -11667,24 +13737,48 @@ msgstr "Erreur lors de la récupération de la liste des vulnérabilités. Veuil
msgid "Security Dashboard|Issue Created"
msgstr "Ticket créé"
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr "Créer un ticket"
msgid "Security Reports|Dismiss vulnerability"
msgstr "Rejeter la vulnérabilité"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr "Plus d’informations"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr "Une erreur est survenue lors de la création du ticket."
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr "Une erreur est survenue lors du rejet de la vulnérabilité."
@@ -11712,6 +13806,9 @@ msgstr "Le tableau de bord de sécurité affiche le dernier rapport de sécuritÃ
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr "Surveiller les vulnérabilités dans votre code"
@@ -11739,6 +13836,9 @@ msgstr "Sélectionner"
msgid "Select Archive Format"
msgstr "Sélectionnez le format de l’archive"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr "Sélectionnez un groupe à inviter"
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr "Sélectionnez un espace de noms afin de créer une divergence du projet"
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr "Sélectionner un modèle de dépôt"
msgid "Select a timezone"
msgstr "Sélectionnez un fuseau horaire"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "Sélectionnez une grappe de serveurs Kubernetes existante ou créezâ€en une nouvelle"
@@ -11775,7 +13884,16 @@ msgstr "Sélectionner une branche ou une étiquette"
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr "Sélectionnez le projet et la zone afin de choisir le type de machine"
msgid "Select project to choose zone"
msgstr "Sélectionnez le projet afin de choisir la zone"
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr "Sélectionnez les projets que vous souhaitez importer."
@@ -11802,13 +13923,19 @@ msgstr "Sélectionnez la branche que vous souhaitez définir comme branche par d
msgid "Select the custom project template source group."
msgstr "Sélectionnez le groupe source de modèles de projet personnalisés."
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "La sélection d’un utilisateur de GitLab va ajouter un lien vers cet utilisateur dans les descriptions des tickets et des commentaires (p. ex., « Par <a href=\"#\">@johnsmith</a> »). Les tickets et commentaires seront également associés ou assignés à cet utilisateur."
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr "septembre"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr "Expiration de la session, restrictions des projets et taille des pièces jointes."
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr "Définissez un courriel de notification pour les rapports d’abus."
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "Définissez les exigences pour la connexion d’un utilisateur. Activez l’authentification obligatoire à deux facteurs."
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,18 +14124,24 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "Configuration CI/CD"
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
msgid "Set up a %{type} Runner manually"
msgstr "Configurer manuellement un exécuteur %{type}"
-msgid "Set up a specific Runner automatically"
-msgstr "Configurer automatiquement un exécuteur spécifique"
-
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr "Configure les assertions, attributs et revendications (courriel, prénom et nom), ainsi que le NameID, conformément à %{docsLinkStart}la documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr "Configurez votre projet afin de pouvoir pousser et/ou récupérer automa
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "définir un mot de passe"
@@ -12015,6 +14187,12 @@ msgstr "Désolé, l’état n’a pas pu être défini. Veuillez réessayer ultÃ
msgid "SetStatusModal|What's your status?"
msgstr "Quel est votre état ?"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr "Afficher la commande"
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr "Afficher le journal brut complet"
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "Affichage de %d évènement"
msgstr[1] "Affichage de %d événements"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr "côte à côte"
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr "Se connecter avec une authentification unique"
@@ -12140,6 +14339,9 @@ msgstr "Se déconnecter"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr "Restrictions de connexion"
msgid "Sign-up restrictions"
msgstr "Restrictions d’inscription"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr "Taille"
@@ -12191,6 +14402,21 @@ msgstr "Application Slack"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr "L’intégration de Slack permet d’interagir avec GitLab via des commandes slash dans une fenêtre de messagerie instantanée."
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "Plus lent, mais permet de s’assurer que l’espace de travail du projet est vierge, comme il clone le dépôt à partir de zéro pour chaque tâche"
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr "Une erreur s’est produite lors du basculement du bouton"
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr "Une erreur s’est produite lors de la fermeture du / de la %{issua
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "Une erreur est survenue lors de la récupération de la liste de %{listType}"
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "Une erreur s’est produite lors de la « résolution » de la discussion. Veuillez réessayer."
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "Une erreur est survenue, impossible d’ajouter %{project} au tableau de bord"
@@ -12350,6 +14594,9 @@ msgstr "Échéance lointaine"
msgid "SortOptions|Due soon"
msgstr "Échéance proche"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "Priorité de l’étiquette"
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr "Date d’inscription croissante"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "Date de mise à jour croissante"
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr "Date d’inscription décroissante"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr "%{type} en étape"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "Mettez une étoile sur une étiquette pour en faire une étiquette prioritaire. Ordonnez les étiquettes prioritaires pour changer leurs priorités relatives en les faisant glisser."
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "Créer une %{new_merge_request} avec ces changements"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,29 +14822,38 @@ msgstr "Démarrer une revue de code"
msgid "Start and due date"
msgstr "Dates de début et d’échéance"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr "Date de début"
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
+msgstr "Démarrer l’exécuteur !"
+
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
-msgstr "Démarrer l’exécuteur !"
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
msgid "Start your trial"
msgstr "Commencez votre essai gratuit"
@@ -12605,12 +14879,18 @@ msgstr "Démarre à (UTC)"
msgid "State your message to activate"
msgstr "Énoncez votre message à activer"
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "État "
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr "Stockage :"
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "Sousâ€groupes"
@@ -12656,6 +14948,9 @@ msgstr "Soumettre comme indésirable"
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr "Envoyer la revue de code"
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr "Abonné"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Étiquettes"
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "La recherche globale avancée de Gitlab est un outil puissant qui vous fait gagner du temps. Au lieu de perdre du temps à recréer du code existant, vous pouvez maintenant faire des recherches dans le code d’autres équipes afin de vous aider sur votre projet."
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "Le surligneur de caractères vous aide à garder la longueur de l’objet à %{titleLength} caractères maximum et à faire des renvois à la ligne pour limiter les lignes du corps du message à %{bodyLength} caractères, afin de les rendre lisibles sous Git."
@@ -13126,6 +15442,12 @@ msgstr "Le déploiement de cette tâche sur %{environmentLink} a échoué."
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "L’importation expirera après %{timeout}. Pour les dépôts qui prennent plus de temps, utilisez une combinaison de clone et push."
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,8 +15598,8 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "Le dépôt doit être accessible via <code>http://</code>, <code>https://</code> ou <code>git://</code>."
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "Le dépôt doit être accessible via <code>http://</code>, <code>https://</code>, <code>ssh://</code> ou <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "L’étape d’évaluation montre le temps entre la création de la demande de fusion et la fusion effective de celleâ€ci. Ces données seront automatiquement ajoutées après que vous aurez fusionné votre première demande de fusion."
@@ -13306,8 +15625,8 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "L’étape de pré-production indique le temps entre l’acceptation d’une demande fusion et le déploiement du code dans l’environnent de production. Les données seront automatiquement ajoutées lorsque vous aurez fait votre première mise en production."
-msgid "The tabs below will be removed in a future version"
-msgstr "Les onglets ciâ€dessous seront supprimés dans une prochaine version"
+msgid "The target element is missing."
+msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "L’étape de test montre le temps que que met l’intégration continue de GitLab pour exécuter chaque pipeline pour une demande de fusion donnée. Les données seront automatiquement ajoutées après que votre premier pipeline s’achèvera."
@@ -13315,7 +15634,7 @@ msgstr "L’étape de test montre le temps que que met l’intégration continue
msgid "The time taken by each data entry gathered by that stage."
msgstr "Le temps pris par chaque entrée récoltée durant cette étape."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr "La carte des utilisateurs (<code>user map</code>) est un document JSON q
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "La carte des utilisateurs met en correspondance les utilisateurs de FogBugz qui ont participé à vos projets en précisant la manière dont leurs adresses de courriel et leurs noms d’utilisateur sont importés dans GitLab. Vous pouvez y apporter des modifications en remplissant le tableau ciâ€dessous."
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "Il n’y a aucun ticket à afficher"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr "Il n’y a pas encore d’étiquette"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr "Il n’y a aucune modification non indexée"
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
-msgstr "Une erreur est survenue lors de l’ajout d’une tâche à accomplir (todo)."
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
-msgstr "Une erreur est survenue lors de la suppression de la tâche à accomplir (todo)."
+msgid "There was an error deleting the To Do."
+msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr "Une erreur s’est produite lors de l’enregistrement de vos paramètre
msgid "There was an error subscribing to this label."
msgstr "Une erreur s’est produite lors de l’abonnement à cette étiquette."
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr "Une erreur s’est produite lors de la réinitialisation du jeton de courriel."
@@ -13501,10 +15835,10 @@ msgstr "La portée de ce tableau est réduite"
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "Cette branche a changé depuis que vous y avez apporté des modifications. Souhaitezâ€vous créer une nouvelle branche ?"
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr "Ce groupe"
msgid "This group does not provide any group Runners yet."
msgstr "Ce groupe ne fournit pas encore d’exécuteurs de groupe."
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "Ce ticket est confidentiel."
@@ -13588,15 +15931,15 @@ msgstr ""
msgid "This is your current session"
msgstr ""
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "Ce ticket est confidentiel"
msgid "This issue is locked."
msgstr "Ce ticket est verrouillé."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "Cette tâche dépend de l’utilisateur ou l’utilisatrice pour déclencher son processus. Elles sont souvent utilisées pour déployer du code dans des environnements de production"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "Cette tâche dépend des tâches en amont qui doivent réussir pour que celleâ€ci soit déclenchée"
@@ -13613,7 +15956,7 @@ msgid "This job has not been triggered yet"
msgstr "Cette tâche n’a pas encore été déclenchée"
msgid "This job has not started yet"
-msgstr "Cette tâche n’a pas encore commencée"
+msgstr "Cette tâche n’a pas encore commencé"
msgid "This job is an out-of-date deployment to %{environmentLink}."
msgstr "Cette tâche est un déploiement obsolète sur %{environmentLink}."
@@ -13651,9 +15994,15 @@ msgstr "Cette tâche est le déploiement le plus récent sur %{link}."
msgid "This job requires a manual action"
msgstr "Cette tâche nécessite une action manuelle"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Cela signifie que vous ne pouvez pas pousser du code tant que vous n’avez pas créé un dépôt vide ou que vous n’avez pas importé un dépôt existant."
@@ -13672,9 +16021,6 @@ msgstr "Cette page n’est pas disponible car vous n’êtes pas autorisé à li
msgid "This page will be removed in a future release."
msgstr "Cette page sera supprimée dans une version ultérieure."
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr "Cet exécuteur ne fonctionnera que sur les pipelines déclenchés sur de
msgid "This setting can be overridden in each project."
msgstr "Ce paramètre peut être outrepassé pour chacun des projets."
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr "Ce paramètre modifie le nom d’hôte qui est utilisé pour générer des courriels de commit privés. %{learn_more}"
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr "Cet utilisateur ou cette utilisatrice n’a aucune identité"
@@ -13735,6 +16087,9 @@ msgstr "Ces courriels deviennent automatiquement des tickets (dont les commentai
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr "Temps entre la création d’une demande de fusion et sa fusion/clôture
msgid "Time estimate"
msgstr "Estimation du temps"
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "Délai d’attente, en secondes, d’une réponse du service externe. Lorsque le service ne répond pas à temps, l’accès sera refusé."
@@ -13762,6 +16126,9 @@ msgstr "Temps restant"
msgid "Time spent"
msgstr "Temps passé"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "Suivi du temps"
@@ -13771,12 +16138,21 @@ msgstr "Temps jusqu’à la première demande de fusion"
msgid "TimeTrackingEstimated|Est"
msgstr "Est"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "Estimé :"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "Passé"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "il y a %s jours"
@@ -13900,6 +16276,9 @@ msgstr "à l’instant"
msgid "Timeago|right now"
msgstr "immédiatement"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "Délai d’attente"
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr "Vers GitLab"
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "Pour connecter des dépôts GitHub, vous pouvez utiliser un %{personal_access_token_link}. Lorsque vous créerez votre jeton d’accès, vous devrez sélectionner la portée <code>dépôt</code>, afin de permettre l’affichage d’une liste de vos dépôts publics et privés disponibles à la connexion."
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "Afin de connecter des dépôts GitHub, vous devez d’abord autoriser GitLab à accéder à la liste de vos dépôts GitHub :"
@@ -13973,12 +16358,6 @@ msgstr "Afin d’aider à améliorer GitLab et son expérience utilisateur, GitL
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "Afin d’aider à améliorer GitLab, nous aimerions recueillir périodiquement des informations sur son utilisation. Vous pourrez modifier ceci à tout moment dans les %{settings_link_start}paramètres%{link_end}. %{info_link_start}Plus d’informations…%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Pour importer les dépôts GitHub, vous pouvez utiliser un %{personal_access_token_link}. Lorsque vous créez votre jeton d’accès, vous devrez sélectionner le champ <code>repo</code>, afin que nous puissions afficher une liste de vos dépôts publics et privés qui sont disponibles pour être importés."
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "Pour importer des dépôts GitHub, vous devez d’abord autoriser GitLab à accéder à la liste de vos dépôts GitHub :"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "Pour importer un dépôt SVN, consultez %{svn_link}."
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "Pour configurer l’authentification SAML pour votre groupe via un fournisseur d’identité tel qu’Azure, Okta, Onelogin, Ping Identity ou votre fournisseur SAML 2.0 personnalisé :"
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,24 +16430,27 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr "Afin d’élargir votre recherche, modifiez ou supprimez des filtres."
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
msgid "Today"
msgstr "Aujourd’hui"
-msgid "Todo"
-msgstr "Tâche"
-
-msgid "Todo was successfully marked as done."
+msgid "Toggle Markdown preview"
msgstr ""
-msgid "Todos"
-msgstr "À faire"
-
msgid "Toggle Sidebar"
msgstr "Afficher/masquer la barre latérale"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr "Afficher ou masquer la description du commit"
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr "Basculer la discussion"
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,17 +16472,26 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "Afficher/masquer la barre latérale"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "État du commutateur : Inactif"
msgid "ToggleButton|Toggle Status: ON"
msgstr "État du commutateur : Actif"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
-msgstr "Jeton"
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
msgid "Tomorrow"
msgstr "Demain"
@@ -14105,6 +16511,9 @@ msgstr "Total des contributions"
msgid "Total Time"
msgstr "Temps total"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "Temps total de test pour tous les commits/fusions"
@@ -14123,6 +16532,12 @@ msgstr "Suivre les groupes de tickets qui partagent un thème, entre différents
msgid "Track time with quick actions"
msgstr "Suivre le temps estimé/passé avec les actions rapides"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr "Vue arborescente"
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr "Essayez tout ce que GitLab peut vous offrir pendant 30 jours."
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "Activer le service d’assistance"
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr "Impossible de charger le diff. %{button_try_again}"
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr "Annuler"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "Inconnu"
@@ -14324,12 +16763,24 @@ msgstr "Déverrouiller %{issuableDisplayName} ? <strong>Tout le monde</stron
msgid "Unlocked"
msgstr "Déverrouillé"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "Marquer la discussion comme non résolue"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr "Déprogrammer la tâche"
@@ -14366,6 +16817,15 @@ msgstr "Se désabonner au niveau du projet"
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "Non vérifié"
@@ -14375,15 +16835,27 @@ msgstr "À jour"
msgid "Upcoming"
msgstr "À venir"
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "Mettre à jour"
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr "Mettre à jour maintenant"
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "Mise à jour en cours"
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "Mettez à niveau votre forfait pour activer la recherche globale avancée."
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "Mettez à niveau votre forfait pour activer l’analyse des contributions."
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr "L’envoi des données d’utilisation est désactivé"
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "Statistiques d’utilisation"
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14772,7 +17259,7 @@ msgid "UserProfile|Already reported for abuse"
msgstr "Déjà signalé comme abus"
msgid "UserProfile|Contributed projects"
-msgstr "À contribué aux projets"
+msgstr "A contribué aux projets"
msgid "UserProfile|Edit profile"
msgstr "Modifier le profil"
@@ -14810,6 +17297,12 @@ msgstr "Fragments de code"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr "S’abonner"
@@ -14822,6 +17315,9 @@ msgstr "Cet utilisateur a un profil privé"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "Tout afficher"
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "Utilisateurs et utilisatrices"
@@ -14927,6 +17426,9 @@ msgstr "Vérifié"
msgid "Version"
msgstr "Version"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr "Voir l’application"
@@ -15005,6 +17507,9 @@ msgstr "Niveau de visibilité"
msgid "Visibility level:"
msgstr "Niveau de visibilité :"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr "Inconnu"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr "Gravité"
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "Vous voulez voir les données ? Merci de contacter un administrateur pour en obtenir l’accès."
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Lorsqu’un exécuteur est verrouillé, il ne peut pas être affecté à d’autres projets"
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "Qui peut voir ce groupe ?"
@@ -15196,6 +17725,9 @@ msgstr "Qui sera en mesure de voir ce groupe ?"
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr "documentation"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "Pour créer un lien vers une (nouvelle) page, il suffit de saisir %{link_example}"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "guide-d-installation"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "Astuce : vous pouvez saisir le chemin d’accès complet du nouveau fichier. Nous créerons automatiquement les répertoires manquants."
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "Nouvelle Page Wiki"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "Êtesâ€vous sûr(e) de vouloir supprimer cette page ?"
@@ -15292,20 +17818,17 @@ msgstr "Quelqu’un a modifié la page en même temps que vous. Veuillez consult
msgid "WikiPageConflictMessage|the page"
msgstr "la page"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "Créer %{page_title}"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "Mettre à jour %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
-msgstr "Slug de la page"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr "Écrivez du contenu ou faites glisser des fichiers ici…"
-msgid "Wiki|Create Page"
-msgstr "Créer une Page"
+msgid "Wiki|Create New Page"
+msgstr ""
msgid "Wiki|Create page"
msgstr "Créer la page"
@@ -15325,6 +17848,9 @@ msgstr "Nouvelle page"
msgid "Wiki|Page history"
msgstr "Historique de la page"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "Version de la page"
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr "Vous pouvez facilement y contribuer en demandant à rejoindre ces groupe
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Vous pouvez facilement installer un Exécuteur sur un cluster Kubernetes. %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr "Vous ne pouvez ajouter de fichier que dans une branche"
msgid "You can only edit files when you are on a branch"
msgstr "Vous ne pouvez modifier des fichiers que dans une branche"
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "Vous pouvez tester votre fichier « .gitlab-ci.yml » avec %{linkStart}CI Lint%{linkEnd}."
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr "Vous ne pouvez pas écrire sur cette instance GitLab en lecture seule."
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr "Vous n’avez souscrit à aucun abonnement pour le moment"
@@ -15541,6 +18079,18 @@ msgstr "Vous ne disposez d’aucune application autorisée"
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "Vous avez atteint votre limite de projet"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Vous devrez utiliser différents noms de branches pour obtenir une comparaison valide."
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr "Vos groupes"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,8 +18271,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "Vos tâches à faire"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr "Vos projets"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "un utilisateur supprimé"
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "auparavant "
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr "entre autres choses"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}En savoir plus à propos de l’analyse des conteneurs %{linkEndTag}"
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr "Classe"
@@ -15964,10 +18553,10 @@ msgstr "Analyse du conteneur"
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "L’analyse des conteneurs permet la détection de vulnérabilités connues dans vos images Docker."
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr "Analyse des dépendances"
msgid "ciReport|Description"
msgstr "Description"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,33 +18598,14 @@ msgstr "Identifiants"
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr "Instances"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "En savoir plus sur l’interaction avec les rapports de sécurité (alpha)."
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "Le gestionnaire de licences a détecté %d licence pour la seule branche source"
-msgstr[1] "Le gestionnaire de licences a détecté %d licences pour la seule branche source"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "Le gestionnaire de licences a détecté %d nouvelle licence"
-msgstr[1] "Le gestionnaire de licences a détecté %d nouvelles licences"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "Le gestionnaire de licences n’a détecté aucune licence pour la seule branche source"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "Le gestionnaire de licences n’a détecté aucune nouvelle licence"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr ""
msgid "ciReport|Links"
msgstr "Liens"
@@ -16061,6 +18631,9 @@ msgstr "Aucun changement dans les indicateurs de performance"
msgid "ciReport|Performance metrics"
msgstr "Indicateurs de performance"
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16120,6 +18693,9 @@ msgstr[1] "Utilisé par %{packagesString} et %{lastPackage}"
msgid "ciReport|View full report"
msgstr "Voir le rapport complet"
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr "connexion en cours"
msgid "could not read private key, is the passphrase correct?"
msgstr "impossible de lire la clef privée, la phrase secrète estâ€elle correcte ?"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr "personnaliser"
@@ -16176,8 +18755,11 @@ msgstr[1] "jours"
msgid "deleted"
msgstr ""
-msgid "deploy token"
-msgstr "jeton de déploiement"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
msgid "detached"
msgstr ""
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr "désactivé"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr "terminé"
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] "brouillon"
msgstr[1] "brouillons"
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "activé"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "ici"
@@ -16296,21 +18888,21 @@ msgstr "n’est pas valide, car il y a un verrou en aval"
msgid "is invalid because there is upstream lock"
msgstr "n’est pas valide, car il y a un verrou en amont"
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "n’est pas un certificat X.509 valide."
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr "tableaux des tickets"
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr "dernière version"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
-msgstr "gestion des licences"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "verrouillé par %{path_lock_user_name} %{created_at}"
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "demande de fusion"
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "Veuillez la restaurer ou utiliser une autre branche %{missingBranchName}"
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr "Fusionnée par"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "Demande de fusion de"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "Résoudre les conflits"
@@ -16571,8 +19187,8 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr "Il y a des conflits de fusion"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "Il y a des discussions non résolues. Veuillez résoudre ces discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr ""
@@ -16583,9 +19199,21 @@ msgstr "Cette demande de fusion n’a pas pu être fusionnée automatiquement"
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "Cette demande de fusion est en cours de fusion"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Ce projet est archivé, l’accès en écriture a été désactivé"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "Vous n’êtes pas autorisé à modifier directement ce projet. Veuillez créer un projet divergent afin d’effectuer des changements."
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "Vous pouvez fusionner cette demande de fusion manuellement à l’aide de la"
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "la branche n’existe pas."
@@ -16628,9 +19259,15 @@ msgstr "nouvelle demande de fusion"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "courriels de notification"
@@ -16643,8 +19280,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "ou"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16659,8 +19296,11 @@ msgstr[1] "parents"
msgid "password"
msgstr "mot de passe"
-msgid "personal access token"
-msgstr "jeton d’accès personnel"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] "projet"
msgstr[1] "projets"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "restant"
@@ -16699,6 +19345,9 @@ msgstr "supprimer la date d’échéance"
msgid "remove weight"
msgstr "supprimer le poids"
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr "ce document"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "pour aider vos contributeurs à communiquer efficacement !"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "nom d’utilisateur"
@@ -16803,6 +19475,9 @@ msgstr "utilise les grappes de serveurs Kubernetes pour déployer votre code !
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index f2cf9e2f036..74d52dad839 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -95,8 +95,8 @@ msgid_plural "%d exporters"
msgstr[0] ""
msgstr[1] ""
-msgid "%d failed test result"
-msgid_plural "%d failed test results"
+msgid "%d failed/error test result"
+msgid_plural "%d failed/error test results"
msgstr[0] ""
msgstr[1] ""
@@ -150,6 +150,11 @@ msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d request with warnings"
+msgid_plural "%d requests with warnings"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d second"
msgid_plural "%d seconds"
msgstr[0] ""
@@ -179,6 +184,9 @@ msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
+msgid "%{cores} cores"
+msgstr ""
+
msgid "%{count} LOC/commit"
msgstr ""
@@ -215,6 +223,9 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{count} related %{pluralized_subject}: %{links}"
+msgstr ""
+
msgid "%{duration}ms"
msgstr ""
@@ -239,6 +250,9 @@ msgstr ""
msgid "%{firstLabel} +%{labelCount} more"
msgstr ""
+msgid "%{from} to %{to}"
+msgstr ""
+
msgid "%{gitlab_ci_yml} not found in this commit"
msgstr ""
@@ -347,6 +361,9 @@ msgstr[1] ""
msgid "%{tabname} changed"
msgstr ""
+msgid "%{template_project_id} is unknown or invalid"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -361,6 +378,12 @@ msgstr ""
msgid "%{title} changes"
msgstr ""
+msgid "%{total} open issue weight"
+msgstr ""
+
+msgid "%{total} open issues"
+msgstr ""
+
msgid "%{unstaged} unstaged and %{staged} staged changes"
msgstr ""
@@ -633,6 +656,18 @@ msgstr ""
msgid "A member of the abuse team will review your report as soon as possible."
msgstr ""
+msgid "A merge request approval is required when a security report contains a new vulnerability of high, critical, or unknown severity."
+msgstr ""
+
+msgid "A merge request approval is required when the license compliance report contains a blacklisted license."
+msgstr ""
+
+msgid "A new Release %{tag} for %{name} was published. Visit the %{release_link_start}Releases page%{release_link_end} to read more about it."
+msgstr ""
+
+msgid "A new Release %{tag} for %{name} was published. Visit the Releases page to read more about it:"
+msgstr ""
+
msgid "A new branch will be created in your fork and a new merge request will be started."
msgstr ""
@@ -795,6 +830,9 @@ msgstr ""
msgid "Action to take when receiving an alert."
msgstr ""
+msgid "Activate"
+msgstr ""
+
msgid "Activate Service Desk"
msgstr ""
@@ -977,7 +1015,7 @@ msgstr ""
msgid "Added"
msgstr ""
-msgid "Added %{epic_ref} as child epic."
+msgid "Added %{epic_ref} as a child epic."
msgstr ""
msgid "Added %{label_references} %{label_text}."
@@ -1031,13 +1069,10 @@ msgstr ""
msgid "Admin Section"
msgstr ""
-msgid "Admin notes"
-msgstr ""
-
-msgid "AdminArea| You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide \"Ghost-user\". To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgid "Admin mode disabled"
msgstr ""
-msgid "AdminArea| You are about to permanently delete the user %{username}. This will delete all of the issues, merge requests, and groups linked to them. To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgid "Admin notes"
msgstr ""
msgid "AdminArea|Stop all jobs"
@@ -1145,15 +1180,39 @@ msgstr ""
msgid "AdminUsers|Admins"
msgstr ""
+msgid "AdminUsers|Block"
+msgstr ""
+
msgid "AdminUsers|Block user"
msgstr ""
+msgid "AdminUsers|Block user %{username}?"
+msgstr ""
+
msgid "AdminUsers|Blocked"
msgstr ""
+msgid "AdminUsers|Blocking user has the following effects:"
+msgstr ""
+
msgid "AdminUsers|Cannot unblock LDAP blocked users"
msgstr ""
+msgid "AdminUsers|Deactivate"
+msgstr ""
+
+msgid "AdminUsers|Deactivate User %{username}?"
+msgstr ""
+
+msgid "AdminUsers|Deactivate user"
+msgstr ""
+
+msgid "AdminUsers|Deactivated"
+msgstr ""
+
+msgid "AdminUsers|Deactivating a user has the following effects:"
+msgstr ""
+
msgid "AdminUsers|Delete User %{username} and contributions?"
msgstr ""
@@ -1178,6 +1237,21 @@ msgstr ""
msgid "AdminUsers|No users found"
msgstr ""
+msgid "AdminUsers|Owned groups will be left"
+msgstr ""
+
+msgid "AdminUsers|Personal projects will be left"
+msgstr ""
+
+msgid "AdminUsers|Personal projects, group and user history will be left intact"
+msgstr ""
+
+msgid "AdminUsers|Reactivating a user will:"
+msgstr ""
+
+msgid "AdminUsers|Restore user access to the account, including web, Git and API."
+msgstr ""
+
msgid "AdminUsers|Search by name, email or username"
msgstr ""
@@ -1190,18 +1264,45 @@ msgstr ""
msgid "AdminUsers|Sort by"
msgstr ""
+msgid "AdminUsers|The user will be logged out"
+msgstr ""
+
+msgid "AdminUsers|The user will not be able to access git repositories"
+msgstr ""
+
+msgid "AdminUsers|The user will not be able to access the API"
+msgstr ""
+
+msgid "AdminUsers|The user will not be able to use slash commands"
+msgstr ""
+
+msgid "AdminUsers|The user will not receive any notifications"
+msgstr ""
+
msgid "AdminUsers|To confirm, type %{projectName}"
msgstr ""
msgid "AdminUsers|To confirm, type %{username}"
msgstr ""
-msgid "AdminUsers|User will be blocked"
+msgid "AdminUsers|User will not be able to access git repositories"
+msgstr ""
+
+msgid "AdminUsers|User will not be able to login"
+msgstr ""
+
+msgid "AdminUsers|When the user logs back in, their account will reactivate as a fully active account"
msgstr ""
msgid "AdminUsers|Without projects"
msgstr ""
+msgid "AdminUsers|You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide \"Ghost-user\". To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "AdminUsers|You are about to permanently delete the user %{username}. This will delete all of the issues, merge requests, and groups linked to them. To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
msgid "Advanced"
msgstr ""
@@ -1234,6 +1335,12 @@ msgstr ""
msgid "Alerts"
msgstr ""
+msgid "Alerts endpoint"
+msgstr ""
+
+msgid "Algorithm"
+msgstr ""
+
msgid "All"
msgstr ""
@@ -1246,9 +1353,6 @@ msgstr ""
msgid "All changes are committed"
msgstr ""
-msgid "All cross-project dependencies have merged"
-msgstr ""
-
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1264,6 +1368,12 @@ msgstr ""
msgid "All merge conflicts were resolved. The merge request can now be merged."
msgstr ""
+msgid "All merge request dependencies have been merged"
+msgstr ""
+
+msgid "All paths are relative to the GitLab URL. Do not include %{relative_url_link_start}relative URL%{relative_url_link_end}."
+msgstr ""
+
msgid "All projects"
msgstr ""
@@ -1312,10 +1422,7 @@ msgstr ""
msgid "Allow users to register any application to use GitLab as an OAuth provider"
msgstr ""
-msgid "Allow users to request access"
-msgstr ""
-
-msgid "Allow users to request access if visibility is public or internal."
+msgid "Allow users to request access (if visibility is public or internal)"
msgstr ""
msgid "Allowed email domain restriction only permitted for top-level groups"
@@ -1327,6 +1434,9 @@ msgstr ""
msgid "Allows you to add and manage Kubernetes clusters."
msgstr ""
+msgid "Almost there"
+msgstr ""
+
msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
msgstr ""
@@ -1453,6 +1563,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1597,9 +1710,6 @@ msgstr ""
msgid "Analytics"
msgstr ""
-msgid "Analytics|Timeframe"
-msgstr ""
-
msgid "Ancestors"
msgstr ""
@@ -1669,12 +1779,24 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply"
+msgstr ""
+
msgid "Apply a label"
msgstr ""
+msgid "Apply a template"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
+msgid "Apply template"
+msgstr ""
+
+msgid "Applying a template will replace the existing issue description. Any changes you have made will be lost."
+msgstr ""
+
msgid "Applying command"
msgstr ""
@@ -1764,9 +1886,6 @@ msgstr ""
msgid "Archiving the project will make it entirely read-only. It is hidden from the dashboard and doesn't show up in searches. <strong>The repository cannot be committed to, and no issues, comments or other entities can be created.</strong>"
msgstr ""
-msgid "Are you sure"
-msgstr ""
-
msgid "Are you sure that you want to archive this project?"
msgstr ""
@@ -1779,6 +1898,9 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
msgid "Are you sure you want to delete this %{typeOfComment}?"
msgstr ""
@@ -1854,9 +1976,21 @@ msgstr ""
msgid "Are you sure? This will invalidate your registered applications and U2F devices."
msgstr ""
+msgid "Arrange charts"
+msgstr ""
+
+msgid "Artifact"
+msgstr ""
+
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1887,6 +2021,9 @@ msgstr ""
msgid "Assets"
msgstr ""
+msgid "Assets:"
+msgstr ""
+
msgid "Assign"
msgstr ""
@@ -2245,22 +2382,22 @@ msgstr ""
msgid "Below are examples of regex for existing tools:"
msgstr ""
-msgid "Below you will find all the groups that are public."
+msgid "Below are the fingerprints for the current instance SSH host keys."
msgstr ""
-msgid "Billing"
+msgid "Below you will find all the groups that are public."
msgstr ""
-msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgid "Billing"
msgstr ""
-msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_name} plan."
msgstr ""
-msgid "BillingPlans|Current plan"
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_name} plan."
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|Congratulations, your new trial is activated"
msgstr ""
msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
@@ -2287,15 +2424,15 @@ msgstr ""
msgid "BillingPlans|To manage the plan for this group, visit the billing section of %{parent_billing_page_link}."
msgstr ""
-msgid "BillingPlans|Upgrade"
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
+msgid "BillingPlans|billed annually at %{price_per_year}"
+msgstr ""
+
msgid "BillingPlans|features"
msgstr ""
@@ -2305,13 +2442,10 @@ msgstr ""
msgid "BillingPlans|monthly"
msgstr ""
-msgid "BillingPlans|paid annually at %{price_per_year}"
-msgstr ""
-
msgid "BillingPlans|per user"
msgstr ""
-msgid "BillingPlan|Upgrade plan"
+msgid "BillingPlan|Upgrade"
msgstr ""
msgid "Bitbucket Server Import"
@@ -2320,9 +2454,6 @@ msgstr ""
msgid "Bitbucket import"
msgstr ""
-msgid "Block"
-msgstr ""
-
msgid "Blocked"
msgstr ""
@@ -2368,6 +2499,9 @@ msgstr ""
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2386,6 +2520,9 @@ msgstr ""
msgid "Branch not loaded - %{branchId}"
msgstr ""
+msgid "Branch prefix"
+msgstr ""
+
msgid "BranchSwitcherPlaceholder|Search branches"
msgstr ""
@@ -2530,25 +2667,28 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
-msgid "Built-in"
+msgid "BuildArtifacts|An error occurred while fetching the artifacts"
msgstr ""
-msgid "BurndownChartLabel|Guideline"
+msgid "BuildArtifacts|Loading artifacts"
msgstr ""
-msgid "BurndownChartLabel|Open issue weight"
+msgid "Built-in"
msgstr ""
-msgid "BurndownChartLabel|Open issues"
+msgid "Burndown chart"
msgstr ""
-msgid "BurndownChartLabel|Progress"
+msgid "BurndownChartLabel|Open issue weight"
msgstr ""
-msgid "BurndownChartLabel|Remaining"
+msgid "BurndownChartLabel|Open issues"
msgstr ""
msgid "Business"
@@ -2656,9 +2796,15 @@ msgstr ""
msgid "CLOSED"
msgstr ""
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
+msgid "CPU"
+msgstr ""
+
msgid "Callback URL"
msgstr ""
@@ -2803,6 +2949,9 @@ msgstr ""
msgid "Changes won't take place until the index is %{link_start}recreated%{link_end}."
msgstr ""
+msgid "Changing group path can have unintended side effects."
+msgstr ""
+
msgid "Charts"
msgstr ""
@@ -2890,6 +3039,12 @@ msgstr ""
msgid "Cherry-pick this merge request"
msgstr ""
+msgid "Child epic does not exist."
+msgstr ""
+
+msgid "Child epic doesn't exist."
+msgstr ""
+
msgid "Choose <strong>Create archive</strong> and wait for archiving to complete."
msgstr ""
@@ -2917,6 +3072,9 @@ msgstr ""
msgid "Choose a type..."
msgstr ""
+msgid "Choose an existing tag, or create a new one"
+msgstr ""
+
msgid "Choose any color."
msgstr ""
@@ -3196,9 +3354,6 @@ msgstr ""
msgid "Closes this %{quick_action_target}."
msgstr ""
-msgid "Cluster %{cluster} was used."
-msgstr ""
-
msgid "Cluster Health"
msgstr ""
@@ -3259,6 +3414,9 @@ msgstr ""
msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster."
msgstr ""
+msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster. %{startLink}More information%{endLink}"
+msgstr ""
+
msgid "ClusterIntegration|Alternatively"
msgstr ""
@@ -3307,12 +3465,21 @@ msgstr ""
msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
msgstr ""
+msgid "ClusterIntegration|Choose the %{startLink}security groups%{endLink} to apply to the EKS-managed Elastic Network Interfaces that are created in your worker node subnets."
+msgstr ""
+
+msgid "ClusterIntegration|Choose the %{startLink}subnets%{endLink} in your VPC where your worker nodes will run."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -3328,13 +3495,13 @@ msgstr ""
msgid "ClusterIntegration|Copy CA Certificate"
msgstr ""
-msgid "ClusterIntegration|Copy Ingress Endpoint to clipboard"
+msgid "ClusterIntegration|Copy Ingress Endpoint"
msgstr ""
-msgid "ClusterIntegration|Copy Jupyter Hostname to clipboard"
+msgid "ClusterIntegration|Copy Jupyter Hostname"
msgstr ""
-msgid "ClusterIntegration|Copy Knative Endpoint to clipboard"
+msgid "ClusterIntegration|Copy Knative Endpoint"
msgstr ""
msgid "ClusterIntegration|Copy Kubernetes cluster name"
@@ -3343,21 +3510,54 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load IAM roles"
+msgstr ""
+
+msgid "ClusterIntegration|Could not load Key Pairs"
+msgstr ""
+
+msgid "ClusterIntegration|Could not load VPCs for the selected region"
+msgstr ""
+
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
+msgid "ClusterIntegration|Could not load security groups for the selected VPC"
+msgstr ""
+
+msgid "ClusterIntegration|Could not load subnets for the selected VPC"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
msgid "ClusterIntegration|Create cluster on"
msgstr ""
+msgid "ClusterIntegration|Create new Cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Create new Cluster on EKS"
+msgstr ""
+
+msgid "ClusterIntegration|Create new Cluster on GKE"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
msgid "ClusterIntegration|Enable this setting if using role-based access control (RBAC)."
msgstr ""
+msgid "ClusterIntegration|Enter the details for your Amazon EKS Kubernetes cluster"
+msgstr ""
+
msgid "ClusterIntegration|Enter the details for your Kubernetes cluster"
msgstr ""
@@ -3463,6 +3663,9 @@ msgstr ""
msgid "ClusterIntegration|JupyterHub, a multi-user Hub, spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server. JupyterHub can be used to serve notebooks to a class of students, a corporate data science group, or a scientific research group."
msgstr ""
+msgid "ClusterIntegration|Key pair name"
+msgstr ""
+
msgid "ClusterIntegration|Knative"
msgstr ""
@@ -3499,12 +3702,21 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project"
msgstr ""
+msgid "ClusterIntegration|Kubernetes version"
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes version not found"
+msgstr ""
+
msgid "ClusterIntegration|Learn more about %{help_link_start_machine_type}machine types%{help_link_end} and %{help_link_start_pricing}pricing%{help_link_end}."
msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3520,6 +3732,21 @@ msgstr ""
msgid "ClusterIntegration|Loading IAM Roles"
msgstr ""
+msgid "ClusterIntegration|Loading Key Pairs"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
+msgid "ClusterIntegration|Loading VPCs"
+msgstr ""
+
+msgid "ClusterIntegration|Loading security groups"
+msgstr ""
+
+msgid "ClusterIntegration|Loading subnets"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3532,6 +3759,12 @@ msgstr ""
msgid "ClusterIntegration|No IAM Roles found"
msgstr ""
+msgid "ClusterIntegration|No Key Pairs found"
+msgstr ""
+
+msgid "ClusterIntegration|No VPCs found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3541,6 +3774,15 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
+msgid "ClusterIntegration|No security group found"
+msgstr ""
+
+msgid "ClusterIntegration|No subnet found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3577,7 +3819,10 @@ msgstr ""
msgid "ClusterIntegration|RBAC-enabled cluster"
msgstr ""
-msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
+msgid "ClusterIntegration|Read our %{link_start}help page%{link_end} on Kubernetes cluster integration."
+msgstr ""
+
+msgid "ClusterIntegration|Region"
msgstr ""
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
@@ -3607,18 +3852,51 @@ msgstr ""
msgid "ClusterIntegration|Search IAM Roles"
msgstr ""
+msgid "ClusterIntegration|Search Key Pairs"
+msgstr ""
+
+msgid "ClusterIntegration|Search VPCs"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
+msgid "ClusterIntegration|Search security groups"
+msgstr ""
+
+msgid "ClusterIntegration|Search subnets"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
+msgid "ClusterIntegration|Security groups"
+msgstr ""
+
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Select a VPC to choose a security group"
+msgstr ""
+
+msgid "ClusterIntegration|Select a VPC to choose a subnet"
+msgstr ""
+
+msgid "ClusterIntegration|Select a VPC to use for your EKS Cluster resources. To use a new VPC, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
+msgid "ClusterIntegration|Select a region to choose a Key Pair"
+msgstr ""
+
+msgid "ClusterIntegration|Select a region to choose a VPC"
+msgstr ""
+
msgid "ClusterIntegration|Select machine type"
msgstr ""
@@ -3634,6 +3912,9 @@ msgstr ""
msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
msgstr ""
+msgid "ClusterIntegration|Select the key pair name that will be used to create EC2 nodes. To use a new key pair name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3667,6 +3948,9 @@ msgstr ""
msgid "ClusterIntegration|Specifying a domain will allow you to use Auto Review Apps and Auto Deploy stages for %{auto_devops_start}Auto DevOps%{auto_devops_end}. The domain should have a wildcard DNS configured matching the domain."
msgstr ""
+msgid "ClusterIntegration|Subnet"
+msgstr ""
+
msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster."
msgstr ""
@@ -3676,7 +3960,7 @@ msgstr ""
msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated Tiller pod will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
@@ -3712,6 +3996,12 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
+msgid "ClusterIntegration|VPC"
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3745,7 +4035,7 @@ msgstr ""
msgid "ClusterIntegration|documentation"
msgstr ""
-msgid "ClusterIntegration|help page"
+msgid "ClusterIntegration|installed via %{installed_via}"
msgstr ""
msgid "ClusterIntegration|meets the requirements"
@@ -3757,12 +4047,30 @@ msgstr ""
msgid "ClusterIntegration|sign up"
msgstr ""
+msgid "ClusterIntergation|Select a VPC"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select a security group"
+msgstr ""
+
+msgid "ClusterIntergation|Select a subnet"
+msgstr ""
+
+msgid "ClusterIntergation|Select key pair"
+msgstr ""
+
msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
msgstr ""
+msgid "Code Analytics"
+msgstr ""
+
msgid "Code Owners"
msgstr ""
@@ -3772,6 +4080,9 @@ msgstr ""
msgid "Code owners"
msgstr ""
+msgid "CodeAnalytics|Max files"
+msgstr ""
+
msgid "CodeOwner|Pattern"
msgstr ""
@@ -3906,6 +4217,9 @@ msgstr ""
msgid "Company"
msgstr ""
+msgid "Company name"
+msgstr ""
+
msgid "Compare"
msgstr ""
@@ -3978,6 +4292,12 @@ msgstr ""
msgid "Configure limits for web and API requests."
msgstr ""
+msgid "Configure limits on the number of inbound alerts able to be sent to a project."
+msgstr ""
+
+msgid "Configure paths to be protected by Rack Attack. A web server restart is required after changing these settings."
+msgstr ""
+
msgid "Configure push mirrors."
msgstr ""
@@ -4044,38 +4364,38 @@ msgstr ""
msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|Copy build command to clipboard"
+msgid "ContainerRegistry|Copy build command"
msgstr ""
-msgid "ContainerRegistry|Copy push command to clipboard"
+msgid "ContainerRegistry|Copy login command"
msgstr ""
-msgid "ContainerRegistry|Docker connection error"
+msgid "ContainerRegistry|Copy push command"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|No tags in Container Registry for this container image."
+msgid "ContainerRegistry|If you are not already logged in, you need to authenticate to the Container Registry by using your GitLab username and password. If you have %{twofaDocLinkStart}Two-Factor Authentication%{twofaDocLinkEnd} enabled, use a %{personalAccessTokensDocLinkStart}Personal Access Token%{personalAccessTokensDocLinkEnd} instead of a password."
msgstr ""
-msgid "ContainerRegistry|Quick Start"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
-msgid "ContainerRegistry|Remove image"
-msgid_plural "ContainerRegistry|Remove images"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ContainerRegistry|Remove image(s) and tags"
+msgid "ContainerRegistry|Quick Start"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove selected images"
+msgid "ContainerRegistry|Remove selected tags"
msgstr ""
+msgid "ContainerRegistry|Remove tag"
+msgid_plural "ContainerRegistry|Remove tags"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "ContainerRegistry|Size"
msgstr ""
@@ -4085,22 +4405,34 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
+msgid "ContainerRegistry|The last tag related to this image was recently removed. This empty image and any associated data will be automatically removed as part of the regular Garbage Collection process. If you have any questions, contact your administrator."
+msgstr ""
+
+msgid "ContainerRegistry|There are no container images available in this group"
+msgstr ""
+
msgid "ContainerRegistry|There are no container images stored for this project"
msgstr ""
+msgid "ContainerRegistry|This image has no active tags"
+msgstr ""
+
msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
msgstr ""
msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
msgstr ""
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. Push at least one Docker image in one of this group's projects in order to show up here. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
msgstr ""
-msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgid "ContainerRegistry|You are about to remove <b>%{count}</b> tags. Are you sure?"
msgstr ""
-msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgid "ContainerRegistry|You are about to remove <b>%{title}</b>. Are you sure?"
msgstr ""
msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
@@ -4178,16 +4510,19 @@ msgstr ""
msgid "Copied labels and milestone from %{source_issuable_reference}."
msgstr ""
+msgid "Copy"
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
-msgid "Copy %{proxy_url} to clipboard"
+msgid "Copy %{proxy_url}"
msgstr ""
-msgid "Copy ID to clipboard"
+msgid "Copy ID"
msgstr ""
msgid "Copy KRB5 clone URL"
@@ -4199,19 +4534,28 @@ msgstr ""
msgid "Copy SSH public key"
msgstr ""
-msgid "Copy URL to clipboard"
+msgid "Copy URL"
+msgstr ""
+
+msgid "Copy branch name"
+msgstr ""
+
+msgid "Copy command"
msgstr ""
-msgid "Copy branch name to clipboard"
+msgid "Copy commands"
msgstr ""
-msgid "Copy command to clipboard"
+msgid "Copy commit SHA"
msgstr ""
-msgid "Copy commit SHA to clipboard"
+msgid "Copy file contents"
msgstr ""
-msgid "Copy file path to clipboard"
+msgid "Copy file path"
+msgstr ""
+
+msgid "Copy impersonation token"
msgstr ""
msgid "Copy labels and milestone from %{source_issuable_reference}."
@@ -4223,22 +4567,19 @@ msgstr ""
msgid "Copy link"
msgstr ""
-msgid "Copy personal access token to clipboard"
-msgstr ""
-
-msgid "Copy reference to clipboard"
+msgid "Copy personal access token"
msgstr ""
-msgid "Copy secret to clipboard"
+msgid "Copy reference"
msgstr ""
-msgid "Copy source to clipboard"
+msgid "Copy secret"
msgstr ""
-msgid "Copy to clipboard"
+msgid "Copy token"
msgstr ""
-msgid "Copy token to clipboard"
+msgid "Copy trigger token"
msgstr ""
msgid "Could not add admins as members"
@@ -4286,6 +4627,9 @@ msgstr ""
msgid "Could not save prometheus manual configuration"
msgstr ""
+msgid "Country"
+msgstr ""
+
msgid "Coverage"
msgstr ""
@@ -4304,6 +4648,9 @@ msgstr ""
msgid "Create a GitLab account first, and then connect it to your %{label} account."
msgstr ""
+msgid "Create a Mattermost team for this group"
+msgstr ""
+
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
@@ -4463,16 +4810,19 @@ msgstr ""
msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
msgstr ""
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
-msgid "Cross-project dependencies"
+msgid "Current Branch"
msgstr ""
-msgid "Current Branch"
+msgid "Current Plan"
msgstr ""
msgid "Current Project"
@@ -4490,7 +4840,10 @@ msgstr ""
msgid "CurrentUser|Settings"
msgstr ""
-msgid "Custom CI config path"
+msgid "Custom CI configuration path"
+msgstr ""
+
+msgid "Custom Git clone URL for HTTP(S)"
msgstr ""
msgid "Custom hostname (for private commit emails)"
@@ -4508,9 +4861,48 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "Custom range"
+msgstr ""
+
msgid "CustomCycleAnalytics|Add a stage"
msgstr ""
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -4532,6 +4924,9 @@ msgstr ""
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
+msgid "Customize your pipeline configuration."
+msgstr ""
+
msgid "Cycle Analytics"
msgstr ""
@@ -4659,6 +5054,9 @@ msgstr ""
msgid "Days"
msgstr ""
+msgid "Days to merge"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4746,6 +5144,9 @@ msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
msgid "Delete board"
msgstr ""
@@ -4969,10 +5370,10 @@ msgstr ""
msgid "DeployTokens|Allows read-only access to the repository"
msgstr ""
-msgid "DeployTokens|Copy deploy token to clipboard"
+msgid "DeployTokens|Copy deploy token"
msgstr ""
-msgid "DeployTokens|Copy username to clipboard"
+msgid "DeployTokens|Copy username"
msgstr ""
msgid "DeployTokens|Create deploy token"
@@ -5044,6 +5445,27 @@ msgstr ""
msgid "Deploying to"
msgstr ""
+msgid "Deployment|API"
+msgstr ""
+
+msgid "Deployment|This deployment was created using the API"
+msgstr ""
+
+msgid "Deployment|canceled"
+msgstr ""
+
+msgid "Deployment|created"
+msgstr ""
+
+msgid "Deployment|failed"
+msgstr ""
+
+msgid "Deployment|running"
+msgstr ""
+
+msgid "Deployment|success"
+msgstr ""
+
msgid "Deprioritize label"
msgstr ""
@@ -5068,6 +5490,9 @@ msgstr ""
msgid "Deselect all"
msgstr ""
+msgid "Design Management files and data"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
@@ -5080,6 +5505,9 @@ msgstr ""
msgid "DesignManagement|An error occurred while loading designs. Please try again."
msgstr ""
+msgid "DesignManagement|Are you sure you want to delete the selected designs?"
+msgstr ""
+
msgid "DesignManagement|Could not add a new comment. Please try again"
msgstr ""
@@ -5089,6 +5517,18 @@ msgstr ""
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
+msgid "DesignManagement|Delete"
+msgstr ""
+
+msgid "DesignManagement|Delete designs confirmation"
+msgstr ""
+
+msgid "DesignManagement|Delete selected"
+msgstr ""
+
+msgid "DesignManagement|Deselect all"
+msgstr ""
+
msgid "DesignManagement|Error uploading a new design. Please try again"
msgstr ""
@@ -5107,6 +5547,9 @@ msgstr ""
msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
msgstr ""
+msgid "DesignManagement|Select all"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -5116,6 +5559,9 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
+msgid "DesignManagement|We could not delete design(s). Please try again."
+msgstr ""
+
msgid "Designs"
msgstr ""
@@ -5227,6 +5673,9 @@ msgstr ""
msgid "Discussion"
msgstr ""
+msgid "Disk Usage"
+msgstr ""
+
msgid "Dismiss"
msgstr ""
@@ -5275,6 +5724,9 @@ msgstr ""
msgid "Domain verification is an essential security measure for public GitLab sites. Users are required to demonstrate they control a domain before it is enabled"
msgstr ""
+msgid "Don't have an account yet?"
+msgstr ""
+
msgid "Don't paste the private part of the GPG key. Paste the public part which begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
msgstr ""
@@ -5290,6 +5742,12 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download %{format}"
+msgstr ""
+
+msgid "Download %{format}:"
+msgstr ""
+
msgid "Download CSV"
msgstr ""
@@ -5371,6 +5829,9 @@ msgstr ""
msgid "Edit Pipeline Schedule %{id}"
msgstr ""
+msgid "Edit Release"
+msgstr ""
+
msgid "Edit Snippet"
msgstr ""
@@ -5413,6 +5874,9 @@ msgstr ""
msgid "Edit stage"
msgstr ""
+msgid "Edit this release"
+msgstr ""
+
msgid "Edit wiki page"
msgstr ""
@@ -5530,6 +5994,9 @@ msgstr ""
msgid "Enable HTML emails"
msgstr ""
+msgid "Enable Incident Management inbound alert limit"
+msgstr ""
+
msgid "Enable Pseudonymizer data collection"
msgstr ""
@@ -5578,6 +6045,9 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
+msgid "Enable protected paths rate limit"
+msgstr ""
+
msgid "Enable proxy"
msgstr ""
@@ -5635,6 +6105,9 @@ msgstr ""
msgid "Enter a number"
msgstr ""
+msgid "Enter admin mode"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5719,6 +6192,15 @@ msgstr ""
msgid "Environments|An error occurred while fetching the environments."
msgstr ""
+msgid "Environments|An error occurred while fetching the logs"
+msgstr ""
+
+msgid "Environments|An error occurred while fetching the logs - Error: %{message}"
+msgstr ""
+
+msgid "Environments|An error occurred while fetching the logs for this environment or pod. Please try again"
+msgstr ""
+
msgid "Environments|An error occurred while making the request."
msgstr ""
@@ -5764,9 +6246,6 @@ msgstr ""
msgid "Environments|No deployments yet"
msgstr ""
-msgid "Environments|No pod name has been specified"
-msgstr ""
-
msgid "Environments|Note that this action will stop the environment, but it will %{emphasisStart}not%{emphasisEnd} have an effect on any existing deployment due to no “stop environment action†being defined in the %{ciConfigLinkStart}.gitlab-ci.yml%{ciConfigLinkEnd} file."
msgstr ""
@@ -5842,6 +6321,9 @@ msgstr ""
msgid "Epic"
msgstr ""
+msgid "Epic events"
+msgstr ""
+
msgid "Epics"
msgstr ""
@@ -5977,6 +6459,9 @@ msgstr ""
msgid "Error loading burndown chart data"
msgstr ""
+msgid "Error loading countries data."
+msgstr ""
+
msgid "Error loading file viewer."
msgstr ""
@@ -6016,6 +6501,12 @@ msgstr ""
msgid "Error occurred while updating the issue weight"
msgstr ""
+msgid "Error occurred. A blocked user cannot be deactivated"
+msgstr ""
+
+msgid "Error occurred. A blocked user must be unblocked to be activated"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -6106,6 +6597,9 @@ msgstr ""
msgid "EventFilterBy|Filter by comments"
msgstr ""
+msgid "EventFilterBy|Filter by epic events"
+msgstr ""
+
msgid "EventFilterBy|Filter by issue events"
msgstr ""
@@ -6160,6 +6654,9 @@ msgstr ""
msgid "Everything you need to create a GitLab Pages site using plain HTML."
msgstr ""
+msgid "Example: @sub\\.company\\.com$"
+msgstr ""
+
msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple queries combined into a formula."
msgstr ""
@@ -6457,6 +6954,9 @@ msgstr ""
msgid "Faster as it re-uses the project workspace (falling back to clone if it doesn't exist)"
msgstr ""
+msgid "Faster releases. Better code. Less pain."
+msgstr ""
+
msgid "Favicon was successfully removed."
msgstr ""
@@ -6687,6 +7187,9 @@ msgstr ""
msgid "Filter by two-factor authentication"
msgstr ""
+msgid "Filter projects"
+msgstr ""
+
msgid "Filter results by group"
msgstr ""
@@ -6738,6 +7241,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -6813,6 +7319,9 @@ msgstr ""
msgid "Fork project"
msgstr ""
+msgid "Fork project?"
+msgstr ""
+
msgid "ForkedFromProjectPath|Forked from"
msgstr ""
@@ -6831,6 +7340,9 @@ msgstr ""
msgid "Format"
msgstr ""
+msgid "Format: %{dateFormat}"
+msgstr ""
+
msgid "Forward external support email address to"
msgstr ""
@@ -7329,6 +7841,9 @@ msgstr ""
msgid "Get started with performance monitoring"
msgstr ""
+msgid "Get started!"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -7407,12 +7922,84 @@ msgstr ""
msgid "GitLab single sign on URL"
msgstr ""
+msgid "GitLab uses %{jaeger_link} to monitor distributed systems."
+msgstr ""
+
msgid "GitLab will run a background job that will produce pseudonymized CSVs of the GitLab database that will be uploaded to your configured object storage directory."
msgstr ""
msgid "GitLab.com import"
msgstr ""
+msgid "GitLabPages|%{domain} is not verified. To learn how to verify ownership, visit your %{link_start}domain details%{link_end}."
+msgstr ""
+
+msgid "GitLabPages|Access pages"
+msgstr ""
+
+msgid "GitLabPages|Are you sure?"
+msgstr ""
+
+msgid "GitLabPages|Certificate: %{subject}"
+msgstr ""
+
+msgid "GitLabPages|Configure pages"
+msgstr ""
+
+msgid "GitLabPages|Details"
+msgstr ""
+
+msgid "GitLabPages|Domains"
+msgstr ""
+
+msgid "GitLabPages|Expired"
+msgstr ""
+
+msgid "GitLabPages|Force HTTPS (requires valid certificates)"
+msgstr ""
+
+msgid "GitLabPages|It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
+msgid "GitLabPages|Learn how to upload your static site and have it served by GitLab by following the %{link_start}documentation on GitLab Pages%{link_end}."
+msgstr ""
+
+msgid "GitLabPages|New Domain"
+msgstr ""
+
+msgid "GitLabPages|Only project maintainers can remove pages"
+msgstr ""
+
+msgid "GitLabPages|Pages"
+msgstr ""
+
+msgid "GitLabPages|Remove"
+msgstr ""
+
+msgid "GitLabPages|Remove pages"
+msgstr ""
+
+msgid "GitLabPages|Removing pages will prevent them from being exposed to the outside world."
+msgstr ""
+
+msgid "GitLabPages|Save"
+msgstr ""
+
+msgid "GitLabPages|Support for domains and certificates is disabled. Ask your system's administrator to enable it."
+msgstr ""
+
+msgid "GitLabPages|Unverified"
+msgstr ""
+
+msgid "GitLabPages|Verified"
+msgstr ""
+
+msgid "GitLabPages|With GitLab Pages you can host your static websites on GitLab. Combined with the power of GitLab CI and the help of GitLab Runner you can deploy static pages for your individual projects, your user or your group."
+msgstr ""
+
+msgid "GitLabPages|Your pages are served under:"
+msgstr ""
+
msgid "Gitaly"
msgstr ""
@@ -7437,6 +8024,9 @@ msgstr ""
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Given epic is already related to this epic."
+msgstr ""
+
msgid "Global Shortcuts"
msgstr ""
@@ -7767,6 +8357,18 @@ msgstr ""
msgid "GroupSettings|Badges"
msgstr ""
+msgid "GroupSettings|Be careful. Changing a group's parent can have unintended %{side_effects_link_start}side effects%{side_effects_link_end}."
+msgstr ""
+
+msgid "GroupSettings|Cannot update the path because there are projects under this group that contain Docker images in their Container Registry. Please remove the images from your projects first and try again."
+msgstr ""
+
+msgid "GroupSettings|Change group path"
+msgstr ""
+
+msgid "GroupSettings|Changing group path can have unintended side effects."
+msgstr ""
+
msgid "GroupSettings|Custom project templates"
msgstr ""
@@ -7779,6 +8381,9 @@ msgstr ""
msgid "GroupSettings|Disable email notifications"
msgstr ""
+msgid "GroupSettings|If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility."
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -7788,6 +8393,12 @@ msgstr ""
msgid "GroupSettings|New runners registration token has been generated!"
msgstr ""
+msgid "GroupSettings|Pipeline settings was updated for the group"
+msgstr ""
+
+msgid "GroupSettings|Please choose a group path with no special characters."
+msgstr ""
+
msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
msgstr ""
@@ -7800,6 +8411,9 @@ msgstr ""
msgid "GroupSettings|There was a problem updating Auto DevOps pipeline: %{error_messages}."
msgstr ""
+msgid "GroupSettings|There was a problem updating the pipeline settings: %{error_messages}."
+msgstr ""
+
msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
msgstr ""
@@ -7815,6 +8429,15 @@ msgstr ""
msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
msgstr ""
+msgid "GroupSettings|Transfer group"
+msgstr ""
+
+msgid "GroupSettings|You can only transfer the group to a group you manage."
+msgstr ""
+
+msgid "GroupSettings|You will need to update your local repositories to point to the new location."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -7896,9 +8519,15 @@ msgstr ""
msgid "GroupsTree|Search by name"
msgstr ""
+msgid "Guideline"
+msgstr ""
+
msgid "HTTP Basic: Access denied\\nYou must use a personal access token with 'api' scope for Git over HTTP.\\nYou can generate one at %{profile_personal_access_tokens_url}"
msgstr ""
+msgid "Hashed repository storage paths"
+msgstr ""
+
msgid "Have your users email"
msgstr ""
@@ -7944,6 +8573,12 @@ msgstr ""
msgid "Helps prevent bots from creating accounts."
msgstr ""
+msgid "Helps reduce alert volume (e.g. if creating too many issues)"
+msgstr ""
+
+msgid "Helps reduce request volume for protected paths"
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -7997,9 +8632,6 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
-msgid "Hours"
-msgstr ""
-
msgid "Housekeeping"
msgstr ""
@@ -8018,9 +8650,15 @@ msgstr ""
msgid "How many shards to split the Elasticsearch index over."
msgstr ""
+msgid "How many users will be evaluating the trial?"
+msgstr ""
+
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -8030,7 +8668,10 @@ msgstr ""
msgid "I forgot my password"
msgstr ""
-msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
+msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end} (PDF)"
+msgstr ""
+
+msgid "I'd like to receive updates via email about GitLab"
msgstr ""
msgid "ID"
@@ -8090,6 +8731,12 @@ msgstr ""
msgid "Identifier"
msgstr ""
+msgid "Identify areas of the codebase associated with a lot of churn, which can indicate potential code hotspots."
+msgstr ""
+
+msgid "Identify the most frequently changed files in your repository"
+msgstr ""
+
msgid "Identities"
msgstr ""
@@ -8252,7 +8899,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -8276,9 +8923,15 @@ msgstr ""
msgid "In order to gather accurate feature usage data, it can take 1 to 2 weeks to see your index."
msgstr ""
+msgid "In order to tailor your experience with GitLab<br>we would like to know a bit more about you."
+msgstr ""
+
msgid "In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Incident Management Limits"
+msgstr ""
+
msgid "Incidents"
msgstr ""
@@ -8419,6 +9072,9 @@ msgstr ""
msgid "Introducing Your Conversational Development Index"
msgstr ""
+msgid "Invalid Git ref"
+msgstr ""
+
msgid "Invalid Insights config file detected"
msgstr ""
@@ -8515,6 +9171,9 @@ msgstr ""
msgid "Issue was closed by %{name} %{reason}"
msgstr ""
+msgid "Issue weight"
+msgstr ""
+
msgid "IssueBoards|Board"
msgstr ""
@@ -8596,9 +9255,6 @@ msgstr ""
msgid "IssuesAnalytics|Total:"
msgstr ""
-msgid "It may take up to 30 minutes before the site is available after the first deployment."
-msgstr ""
-
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -8782,6 +9438,9 @@ msgstr ""
msgid "Kubernetes"
msgstr ""
+msgid "Kubernetes API returned status code: %{error_code}"
+msgstr ""
+
msgid "Kubernetes Cluster"
msgstr ""
@@ -8919,6 +9578,9 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
@@ -8943,6 +9605,9 @@ msgstr ""
msgid "Last used on:"
msgstr ""
+msgid "LastCommit|authored"
+msgstr ""
+
msgid "LastPushEvent|You pushed to"
msgstr ""
@@ -8976,6 +9641,12 @@ msgstr ""
msgid "Learn more about Kubernetes"
msgstr ""
+msgid "Learn more about License-Check"
+msgstr ""
+
+msgid "Learn more about Vulnerability-Check"
+msgstr ""
+
msgid "Learn more about Web Terminal"
msgstr ""
@@ -9000,9 +9671,6 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
-msgid "Learn more about vulnerability check"
-msgstr ""
-
msgid "Learn more in the"
msgstr ""
@@ -9012,6 +9680,9 @@ msgstr ""
msgid "Leave"
msgstr ""
+msgid "Leave admin mode"
+msgstr ""
+
msgid "Leave edit mode? All unsaved changes will be lost."
msgstr ""
@@ -9036,6 +9707,9 @@ msgstr ""
msgid "License Compliance"
msgstr ""
+msgid "License-Check"
+msgstr ""
+
msgid "LicenseCompliance|Add a license"
msgstr ""
@@ -9147,7 +9821,7 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
-msgid "Link copied to clipboard"
+msgid "Link copied"
msgstr ""
msgid "Linked emails (%{email_count})"
@@ -9255,6 +9929,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MD5"
+msgstr ""
+
msgid "MERGED"
msgstr ""
@@ -9471,6 +10148,9 @@ msgstr ""
msgid "Maximum job timeout has a value which could not be accepted"
msgstr ""
+msgid "Maximum number of comments exceeded"
+msgstr ""
+
msgid "Maximum number of mirrors that can be synchronizing at the same time."
msgstr ""
@@ -9507,6 +10187,9 @@ msgstr ""
msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
msgstr ""
+msgid "Memory Usage"
+msgstr ""
+
msgid "Merge"
msgstr ""
@@ -9549,6 +10232,9 @@ msgstr ""
msgid "Merge request approvals allow you to set the number of necessary approvals and predefine a list of approvers that will need to approve every merge request in a project."
msgstr ""
+msgid "Merge request dependencies"
+msgstr ""
+
msgid "Merge requests"
msgstr ""
@@ -9684,6 +10370,12 @@ msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
@@ -9708,6 +10400,9 @@ msgstr ""
msgid "Metrics|Add metric"
msgstr ""
+msgid "Metrics|Avg"
+msgstr ""
+
msgid "Metrics|Check out the CI/CD documentation on deploying to an environment"
msgstr ""
@@ -9738,6 +10433,12 @@ msgstr ""
msgid "Metrics|Legend label (optional)"
msgstr ""
+msgid "Metrics|Link contains an invalid time window."
+msgstr ""
+
+msgid "Metrics|Max"
+msgstr ""
+
msgid "Metrics|Must be a valid PromQL query."
msgstr ""
@@ -9814,7 +10515,9 @@ msgid "Migration successful."
msgstr ""
msgid "Milestone"
-msgstr ""
+msgid_plural "Milestones"
+msgstr[0] ""
+msgstr[1] ""
msgid "Milestone lists not available with your current license"
msgstr ""
@@ -9876,6 +10579,9 @@ msgstr ""
msgid "Mirror user"
msgstr ""
+msgid "Mirrored branches will have this prefix. If you enabled 'Only mirror protected branches' you need to include this prefix on protected branches in this project or nothing will be mirrored."
+msgstr ""
+
msgid "Mirrored repositories"
msgstr ""
@@ -10011,6 +10717,9 @@ msgstr ""
msgid "Name has already been taken"
msgstr ""
+msgid "Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "Name new label"
msgstr ""
@@ -10062,6 +10771,9 @@ msgstr ""
msgid "New Group"
msgstr ""
+msgid "New Group Name"
+msgstr ""
+
msgid "New Identity"
msgstr ""
@@ -10154,9 +10866,6 @@ msgstr ""
msgid "New snippet"
msgstr ""
-msgid "New stage"
-msgstr ""
-
msgid "New subgroup"
msgstr ""
@@ -10193,7 +10902,7 @@ msgstr ""
msgid "No %{header} for this request."
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{providerTitle} repositories found"
msgstr ""
msgid "No Epic"
@@ -10217,6 +10926,9 @@ msgstr ""
msgid "No application_settings found"
msgstr ""
+msgid "No authentication methods configured."
+msgstr ""
+
msgid "No available namespaces to fork the project."
msgstr ""
@@ -10247,10 +10959,10 @@ msgstr ""
msgid "No data to display"
msgstr ""
-msgid "No deployments found"
+msgid "No deployment platform available"
msgstr ""
-msgid "No details available"
+msgid "No deployments found"
msgstr ""
msgid "No due date"
@@ -10283,6 +10995,9 @@ msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -10313,6 +11028,9 @@ msgstr ""
msgid "No parent group"
msgstr ""
+msgid "No pods available"
+msgstr ""
+
msgid "No preview for this file type"
msgstr ""
@@ -10484,6 +11202,9 @@ msgstr ""
msgid "NotificationEvent|New note"
msgstr ""
+msgid "NotificationEvent|New release"
+msgstr ""
+
msgid "NotificationEvent|Reassign issue"
msgstr ""
@@ -10544,9 +11265,18 @@ msgstr ""
msgid "Number of LOCs per commit"
msgstr ""
+msgid "Number of changes (branches or tags) in a single push to determine whether individual push events or bulk push event will be created. Bulk push event will be created if it surpasses that value."
+msgstr ""
+
+msgid "Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value."
+msgstr ""
+
msgid "Number of commits per MR"
msgstr ""
+msgid "Number of employees?"
+msgstr ""
+
msgid "Number of files touched"
msgstr ""
@@ -10574,6 +11304,9 @@ msgstr ""
msgid "OmniAuth"
msgstr ""
+msgid "Omnibus Protected Paths throttle is active. From 12.4, Omnibus throttle is deprecated and will be removed in a future release. Please read the %{relative_url_link_start}Migrating Protected Paths documentation%{relative_url_link_end}."
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -10603,6 +11336,9 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
msgid "Only Project Members"
msgstr ""
@@ -10747,6 +11483,9 @@ msgstr ""
msgid "Other visibility settings have been disabled by the administrator."
msgstr ""
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -10831,6 +11570,12 @@ msgstr ""
msgid "Parameter"
msgstr ""
+msgid "Parent epic doesn't exist."
+msgstr ""
+
+msgid "Parent epic is not present."
+msgstr ""
+
msgid "Part of merge request changes"
msgstr ""
@@ -11050,7 +11795,7 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
-msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more in the documentation for Pipelines for Merged Results."
msgstr ""
msgid "Pipelines settings for '%{project_name}' were successfully updated."
@@ -11290,9 +12035,18 @@ msgstr ""
msgid "Please provide a valid email address."
msgstr ""
+msgid "Please refer to <a href=\"%{docs_url}\">%{docs_url}</a>"
+msgstr ""
+
msgid "Please retype the email address."
msgstr ""
+msgid "Please select"
+msgstr ""
+
+msgid "Please select a country"
+msgstr ""
+
msgid "Please select a file"
msgstr ""
@@ -11314,6 +12068,9 @@ msgstr ""
msgid "Please try again"
msgstr ""
+msgid "Please type %{phrase_code} to proceed or close this modal to cancel."
+msgstr ""
+
msgid "Please upgrade PostgreSQL to version 9.6 or greater. The status of the replication cannot be determined reliably with the current version."
msgstr ""
@@ -11329,6 +12086,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pod not found"
+msgstr ""
+
msgid "Pods in use"
msgstr ""
@@ -11476,15 +12236,42 @@ msgstr ""
msgid "Productivity analytics can help identify the problems that are delaying your team"
msgstr ""
+msgid "ProductivityAanalytics|Merge requests"
+msgstr ""
+
msgid "ProductivityAnalytics|Ascending"
msgstr ""
+msgid "ProductivityAnalytics|Days"
+msgstr ""
+
msgid "ProductivityAnalytics|Days to merge"
msgstr ""
msgid "ProductivityAnalytics|Descending"
msgstr ""
+msgid "ProductivityAnalytics|Hours"
+msgstr ""
+
+msgid "ProductivityAnalytics|List"
+msgstr ""
+
+msgid "ProductivityAnalytics|Merge Requests"
+msgstr ""
+
+msgid "ProductivityAnalytics|Merge date"
+msgstr ""
+
+msgid "ProductivityAnalytics|Merge requests"
+msgstr ""
+
+msgid "ProductivityAnalytics|Time to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Trendline"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -12241,6 +13028,9 @@ msgstr ""
msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
msgstr ""
+msgid "PrometheusAlerts|%{count} alerts applied"
+msgstr ""
+
msgid "PrometheusAlerts|Add alert"
msgstr ""
@@ -12406,12 +13196,57 @@ msgstr ""
msgid "Protected Environments"
msgstr ""
+msgid "Protected Paths"
+msgstr ""
+
msgid "Protected Tag"
msgstr ""
msgid "Protected branches"
msgstr ""
+msgid "ProtectedBranch|%{wildcards_link_start}Wildcards%{wildcards_link_end} such as %{code_tag_start}*-stable%{code_tag_end} or %{code_tag_start}production/*%{code_tag_end} are supported"
+msgstr ""
+
+msgid "ProtectedBranch|Allowed to merge"
+msgstr ""
+
+msgid "ProtectedBranch|Allowed to merge:"
+msgstr ""
+
+msgid "ProtectedBranch|Allowed to push"
+msgstr ""
+
+msgid "ProtectedBranch|Allowed to push:"
+msgstr ""
+
+msgid "ProtectedBranch|Branch"
+msgstr ""
+
+msgid "ProtectedBranch|Code owner approval"
+msgstr ""
+
+msgid "ProtectedBranch|Protect"
+msgstr ""
+
+msgid "ProtectedBranch|Protect a branch"
+msgstr ""
+
+msgid "ProtectedBranch|Protected branch (%{protected_branches_count})"
+msgstr ""
+
+msgid "ProtectedBranch|Pushes that change filenames matched by the CODEOWNERS file will be rejected"
+msgstr ""
+
+msgid "ProtectedBranch|Require approval from code owners:"
+msgstr ""
+
+msgid "ProtectedBranch|There are currently no protected branches, protect a branch with the form above."
+msgstr ""
+
+msgid "ProtectedBranch|Toggle code owner approval"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -12577,6 +13412,9 @@ msgstr ""
msgid "Quick actions can be used in the issues description and comment boxes."
msgstr ""
+msgid "Quick range"
+msgstr ""
+
msgid "README"
msgstr ""
@@ -12586,6 +13424,9 @@ msgstr ""
msgid "Raw blob request rate limit per minute"
msgstr ""
+msgid "Re-authentication required"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -12610,6 +13451,9 @@ msgstr ""
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
+msgid "Receive alerts on GitLab from any source"
+msgstr ""
+
msgid "Receive notifications about your own activity"
msgstr ""
@@ -12681,6 +13525,12 @@ msgstr ""
msgid "Register and see your runners for this project."
msgstr ""
+msgid "Register for GitLab"
+msgstr ""
+
+msgid "Register now"
+msgstr ""
+
msgid "Register with two-factor app"
msgstr ""
@@ -12708,12 +13558,36 @@ msgstr ""
msgid "Related merge requests"
msgstr ""
+msgid "Release"
+msgstr ""
+
+msgid "Release notes"
+msgstr ""
+
+msgid "Release notes:"
+msgstr ""
+
+msgid "Release title"
+msgstr ""
+
msgid "Releases"
msgstr ""
+msgid "Releases are based on Git tags. We recommend naming tags that fit within semantic versioning, for example %{codeStart}v1.0%{codeEnd}, %{codeStart}v2.0-pre%{codeEnd}."
+msgstr ""
+
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Release|Something went wrong while getting the release details"
+msgstr ""
+
+msgid "Release|Something went wrong while saving the release details"
+msgstr ""
+
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -12912,6 +13786,9 @@ msgstr ""
msgid "Replaced all labels with %{label_references} %{label_text}."
msgstr ""
+msgid "Replaces the clone URL root."
+msgstr ""
+
msgid "Reply by email"
msgstr ""
@@ -13050,9 +13927,6 @@ msgstr ""
msgid "Require all users to accept Terms of Service and Privacy Policy when they access GitLab."
msgstr ""
-msgid "Require approval from code owners"
-msgstr ""
-
msgid "Require user password to approve"
msgstr ""
@@ -13230,6 +14104,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Role"
+msgstr ""
+
msgid "Rollback"
msgstr ""
@@ -13314,6 +14191,9 @@ msgstr ""
msgid "SAML for %{group_name}"
msgstr ""
+msgid "SHA256"
+msgstr ""
+
msgid "SSH Key"
msgstr ""
@@ -13323,9 +14203,15 @@ msgstr ""
msgid "SSH Keys Help"
msgstr ""
+msgid "SSH host key fingerprints"
+msgstr ""
+
msgid "SSH host keys"
msgstr ""
+msgid "SSH host keys are not available on this system. Please use <code>ssh-keyscan</code> command or contact your GitLab administrator for more information."
+msgstr ""
+
msgid "SSH keys allow you to establish a secure connection between your computer and GitLab."
msgstr ""
@@ -13431,6 +14317,9 @@ msgstr ""
msgid "Search"
msgstr ""
+msgid "Search Button"
+msgstr ""
+
msgid "Search an environment spec"
msgstr ""
@@ -13524,9 +14413,23 @@ msgstr ""
msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\" in your personal and project snippets"
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\" in your personal and project snippets"
+msgstr ""
+
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "SearchResults|comment"
msgid_plural "SearchResults|comments"
msgstr[0] ""
@@ -13557,13 +14460,13 @@ msgid_plural "SearchResults|projects"
msgstr[0] ""
msgstr[1] ""
-msgid "SearchResults|result"
-msgid_plural "SearchResults|results"
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
msgstr[0] ""
msgstr[1] ""
-msgid "SearchResults|snippet"
-msgid_plural "SearchResults|snippets"
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
msgstr[0] ""
msgstr[1] ""
@@ -13572,6 +14475,11 @@ msgid_plural "SearchResults|users"
msgstr[0] ""
msgstr[1] ""
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -13620,6 +14528,9 @@ msgstr ""
msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'. Turn off the hide dismissed toggle to view."
+msgstr ""
+
msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
msgstr ""
@@ -13668,27 +14579,69 @@ msgstr ""
msgid "SecurityDashboard| The security dashboard displays the latest security report. Use it to find and fix vulnerabilities."
msgstr ""
+msgid "SecurityDashboard|%{firstProject} and %{secondProject}"
+msgstr ""
+
+msgid "SecurityDashboard|%{firstProject}, %{secondProject}, and %{rest}"
+msgstr ""
+
+msgid "SecurityDashboard|Add a project to your dashboard"
+msgstr ""
+
+msgid "SecurityDashboard|Add or remove projects from your dashboard"
+msgstr ""
+
+msgid "SecurityDashboard|Add projects"
+msgstr ""
+
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Edit dashboard"
+msgstr ""
+
msgid "SecurityDashboard|Hide dismissed"
msgstr ""
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
+msgid "SecurityDashboard|More information"
+msgstr ""
+
msgid "SecurityDashboard|Pipeline %{pipelineLink} triggered"
msgstr ""
msgid "SecurityDashboard|Project"
msgstr ""
+msgid "SecurityDashboard|Projects added"
+msgstr ""
+
+msgid "SecurityDashboard|Remove project from dashboard"
+msgstr ""
+
msgid "SecurityDashboard|Report type"
msgstr ""
+msgid "SecurityDashboard|Return to dashboard"
+msgstr ""
+
+msgid "SecurityDashboard|Security Dashboard"
+msgstr ""
+
+msgid "SecurityDashboard|Select a project to add by using the project search field above."
+msgstr ""
+
msgid "SecurityDashboard|Severity"
msgstr ""
+msgid "SecurityDashboard|The security dashboard displays the latest security findings for projects you wish to monitor. Select \"Edit dashboard\" to add and remove projects."
+msgstr ""
+
+msgid "SecurityDashboard|Unable to add %{invalidProjects}"
+msgstr ""
+
msgid "See metrics"
msgstr ""
@@ -13734,6 +14687,9 @@ msgstr ""
msgid "Select a template repository"
msgstr ""
+msgid "Select a template type"
+msgstr ""
+
msgid "Select a timezone"
msgstr ""
@@ -13785,6 +14741,9 @@ msgstr ""
msgid "Select the branch you want to set as the default for this project. All merge requests and commits will automatically be made against this branch unless you specify a different one."
msgstr ""
+msgid "Select the configured storaged available for new projects to be placed on."
+msgstr ""
+
msgid "Select the custom project template source group."
msgstr ""
@@ -13872,7 +14831,7 @@ msgstr ""
msgid "ServerlessDetails|pods in use"
msgstr ""
-msgid "ServerlessURL|Copy URL to clipboard"
+msgid "ServerlessURL|Copy URL"
msgstr ""
msgid "Serverless| In order to start using functions as a service, you must first install Knative on your Kubernetes cluster."
@@ -13926,7 +14885,7 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
-msgid "Set %{epic_ref} as parent epic."
+msgid "Set %{epic_ref} as the parent epic."
msgstr ""
msgid "Set a default template for issue descriptions."
@@ -14001,10 +14960,10 @@ msgstr ""
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -14147,6 +15106,9 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing %{pageSize} of %{total} issues"
+msgstr ""
+
msgid "Showing Latest Version"
msgstr ""
@@ -14216,6 +15178,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -14252,6 +15220,9 @@ msgstr ""
msgid "Size limit per repository (MB)"
msgstr ""
+msgid "Skip Trial (Continue with Free Account)"
+msgstr ""
+
msgid "Skip this for now"
msgstr ""
@@ -14393,6 +15364,12 @@ msgstr ""
msgid "Something went wrong while merging this merge request. Please try again."
msgstr ""
+msgid "Something went wrong while moving issues."
+msgstr ""
+
+msgid "Something went wrong while performing the action."
+msgstr ""
+
msgid "Something went wrong while reopening the %{issuable}. Please try again later"
msgstr ""
@@ -14405,6 +15382,9 @@ msgstr ""
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
+msgid "Something went wrong, unable to add projects to dashboard"
+msgstr ""
+
msgid "Something went wrong, unable to get projects"
msgstr ""
@@ -14453,6 +15433,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -14534,6 +15517,9 @@ msgstr ""
msgid "SortOptions|Priority"
msgstr ""
+msgid "SortOptions|Project"
+msgstr ""
+
msgid "SortOptions|Recent last activity"
msgstr ""
@@ -14543,6 +15529,9 @@ msgstr ""
msgid "SortOptions|Recently starred"
msgstr ""
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -14558,6 +15547,12 @@ msgstr ""
msgid "SortOptions|Start soon"
msgstr ""
+msgid "SortOptions|Type"
+msgstr ""
+
+msgid "SortOptions|Version"
+msgstr ""
+
msgid "SortOptions|Weight"
msgstr ""
@@ -14660,6 +15655,9 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
msgid "Start a new discussion..."
msgstr ""
@@ -14675,7 +15673,7 @@ msgstr ""
msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
msgstr ""
-msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones, authors and assignees."
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
msgstr ""
msgid "Start cleanup"
@@ -14705,6 +15703,9 @@ msgstr ""
msgid "Start thread & reopen %{noteable_name}"
msgstr ""
+msgid "Start your free trial"
+msgstr ""
+
msgid "Start your trial"
msgstr ""
@@ -14765,6 +15766,9 @@ msgstr ""
msgid "Storage"
msgstr ""
+msgid "Storage nodes for new projects"
+msgstr ""
+
msgid "Storage:"
msgstr ""
@@ -14909,12 +15913,18 @@ msgstr ""
msgid "Subtracts"
msgstr ""
+msgid "Successfully activated"
+msgstr ""
+
msgid "Successfully blocked"
msgstr ""
msgid "Successfully confirmed"
msgstr ""
+msgid "Successfully deactivated"
+msgstr ""
+
msgid "Successfully deleted U2F device."
msgstr ""
@@ -15020,7 +16030,7 @@ msgstr ""
msgid "Switch to GitLab Next"
msgstr ""
-msgid "Switch to the source to copy it to the clipboard"
+msgid "Switch to the source to copy the file contents"
msgstr ""
msgid "Sync information"
@@ -15062,6 +16072,9 @@ msgstr ""
msgid "Tag list:"
msgstr ""
+msgid "Tag name"
+msgstr ""
+
msgid "Tag this commit."
msgstr ""
@@ -15122,7 +16135,7 @@ msgstr ""
msgid "TagsPage|New tag"
msgstr ""
-msgid "TagsPage|Optionally, add a message to the tag."
+msgid "TagsPage|Optionally, add a message to the tag. Leaving this blank creates a %{link_start}lightweight tag.%{link_end}"
msgstr ""
msgid "TagsPage|Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page."
@@ -15167,6 +16180,9 @@ msgstr ""
msgid "Team domain"
msgstr ""
+msgid "Telephone number"
+msgstr ""
+
msgid "Template"
msgstr ""
@@ -15236,6 +16252,9 @@ msgstr ""
msgid "The \"%{group_path}\" group allows you to sign in with your Single Sign-On Account"
msgstr ""
+msgid "The \"Require approval from CODEOWNERS\" setting was moved to %{banner_link_start}Protected Branches%{banner_link_end}"
+msgstr ""
+
msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
@@ -15370,6 +16389,9 @@ msgstr ""
msgid "The merge conflicts for this merge request have already been resolved. Please return to the merge request."
msgstr ""
+msgid "The merge request can now be merged."
+msgstr ""
+
msgid "The name %{entryName} is already taken in this directory."
msgstr ""
@@ -15382,7 +16404,7 @@ msgstr ""
msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
msgstr ""
-msgid "The path to CI config file. Defaults to <code>.gitlab-ci.yml</code>"
+msgid "The path to the CI configuration file. Defaults to <code>.gitlab-ci.yml</code>"
msgstr ""
msgid "The phase of the development lifecycle."
@@ -15469,6 +16491,9 @@ msgstr ""
msgid "The snippet is visible to any logged in user."
msgstr ""
+msgid "The specified tab is invalid, please select another"
+msgstr ""
+
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
@@ -15502,6 +16527,9 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
+msgid "The user you are trying to deactivate has been active in the past %{minimum_inactive_days} days and cannot be deactivated"
+msgstr ""
+
msgid "The user-facing URL of the Geo node"
msgstr ""
@@ -15544,6 +16572,9 @@ msgstr ""
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -15568,9 +16599,6 @@ msgstr ""
msgid "There is no data available. Please change your selection."
msgstr ""
-msgid "There is no data for the selected metric. Please change your selection."
-msgstr ""
-
msgid "There was a problem communicating with your device."
msgstr ""
@@ -15592,6 +16620,9 @@ msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching data for the form"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -15727,7 +16758,7 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
-msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgid "This epic does not exist or you don't have sufficient permission."
msgstr ""
msgid "This feature requires local storage to be enabled"
@@ -15781,6 +16812,9 @@ msgstr ""
msgid "This issue is locked."
msgstr ""
+msgid "This job depends on other jobs with expired/erased artifacts: %{invalid_dependencies}"
+msgstr ""
+
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr ""
@@ -15799,21 +16833,36 @@ msgstr ""
msgid "This job has not started yet"
msgstr ""
+msgid "This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink}."
+msgstr ""
+
+msgid "This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink}. View the %{deploymentLink}."
+msgstr ""
+
msgid "This job is an out-of-date deployment to %{environmentLink}."
msgstr ""
-msgid "This job is an out-of-date deployment to %{environmentLink}. View the most recent deployment %{deploymentLink}."
+msgid "This job is an out-of-date deployment to %{environmentLink}. View the %{deploymentLink}."
msgstr ""
msgid "This job is archived. Only the complete pipeline can be retried."
msgstr ""
-msgid "This job is creating a deployment to %{environmentLink} and will overwrite the %{deploymentLink}."
+msgid "This job is creating a deployment to %{environmentLink} using cluster %{clusterNameOrLink}. This will overwrite the %{deploymentLink}."
msgstr ""
msgid "This job is creating a deployment to %{environmentLink}."
msgstr ""
+msgid "This job is creating a deployment to %{environmentLink}. This will overwrite the %{deploymentLink}."
+msgstr ""
+
+msgid "This job is deployed to %{environmentLink} using cluster %{clusterNameOrLink}."
+msgstr ""
+
+msgid "This job is deployed to %{environmentLink}."
+msgstr ""
+
msgid "This job is in pending state and is waiting to be picked by a runner"
msgstr ""
@@ -15829,9 +16878,6 @@ msgstr ""
msgid "This job is stuck because you don't have any active runners that can run this job."
msgstr ""
-msgid "This job is the most recent deployment to %{link}."
-msgstr ""
-
msgid "This job requires a manual action"
msgstr ""
@@ -15898,6 +16944,9 @@ msgstr ""
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
+msgid "This subscription is for"
+msgstr ""
+
msgid "This timeout will take precedence when lower than project-defined timeout and accepts a human readable time input language like \"1 hour\". Values without specification represent seconds."
msgstr ""
@@ -16117,9 +17166,6 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
-msgid "Timeframe"
-msgstr ""
-
msgid "Timeout"
msgstr ""
@@ -16148,6 +17194,9 @@ msgstr ""
msgid "Titles and Filenames"
msgstr ""
+msgid "To"
+msgstr ""
+
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
@@ -16352,9 +17401,18 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
+msgid "Total issues"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
+msgid "Total weight"
+msgstr ""
+
msgid "Total: %{total}"
msgstr ""
@@ -16379,6 +17437,9 @@ msgstr ""
msgid "Transfer project"
msgstr ""
+msgid "TransferGroup|Cannot update the path because there are projects under this group that contain Docker images in their Container Registry. Please remove the images from your projects first and try again."
+msgstr ""
+
msgid "TransferGroup|Database is not supported."
msgstr ""
@@ -16463,6 +17524,9 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
@@ -16517,6 +17581,12 @@ msgstr ""
msgid "Unable to build Slack link."
msgstr ""
+msgid "Unable to collect CPU info"
+msgstr ""
+
+msgid "Unable to collect memory info"
+msgstr ""
+
msgid "Unable to connect to Prometheus server"
msgstr ""
@@ -16574,6 +17644,9 @@ msgstr ""
msgid "Unknown"
msgstr ""
+msgid "Unknown Error"
+msgstr ""
+
msgid "Unknown encryption strategy: %{encrypted_strategy}!"
msgstr ""
@@ -16793,6 +17866,9 @@ msgstr ""
msgid "Upstream"
msgstr ""
+msgid "Uptime"
+msgstr ""
+
msgid "Upvotes"
msgstr ""
@@ -16874,6 +17950,12 @@ msgstr ""
msgid "Use group milestones to manage issues from multiple projects in the same milestone."
msgstr ""
+msgid "Use hashed storage"
+msgstr ""
+
+msgid "Use hashed storage paths for newly created and renamed projects. Enable immutable, hash-based paths and repository names to store repositories on disk. This prevents repositories from having to be moved or renamed when the Project URL changes and may improve disk I/O performance."
+msgstr ""
+
msgid "Use one line per URI"
msgstr ""
@@ -16997,7 +18079,7 @@ msgstr ""
msgid "UserOnboardingTour|Here you can compare the changes of this branch to another one. Changes are divided by files so that it's easier to see what was changed where."
msgstr ""
-msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Choose a way to create a project and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
+msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Fill in your new project information and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
msgstr ""
msgid "UserOnboardingTour|Here you can see the breakdown of the pipelines: its stages and jobs in each of the stages and their status.%{lineBreak}%{lineBreak}Our CI/CD pipelines are quite complex, most of our users have fewer and simpler pipelines."
@@ -17009,13 +18091,13 @@ msgstr ""
msgid "UserOnboardingTour|Here you can see what changes were made with this commit, on what branch and if there's a related merge request. The status of the pipeline will also show up if CI/CD is set up.%{lineBreak}%{lineBreak}You can also comment on the lines of code that were changed and start a discussion with your colleagues!"
msgstr ""
-msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}%{projectName}%{emphasisEnd} project. They're split into Active and Stale.%{lineBreak}%{lineBreak}From here, you can create a new merge request, from a branch or compare the branch to any other branch in the project. By default, it will compare it to the master branch."
+msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}%{projectName}%{emphasisEnd} project. They're split into Active and Stale.%{lineBreak}%{lineBreak}From here, you can create a new merge request from a branch, or compare the branch to any other branch in the project. By default, it will compare it to the master branch."
msgstr ""
msgid "UserOnboardingTour|Invite colleagues"
msgstr ""
-msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progess in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks like when the list is filtered by a label."
+msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progress in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks when the list is filtered by a label."
msgstr ""
msgid "UserOnboardingTour|Learn GitLab"
@@ -17048,7 +18130,7 @@ msgstr ""
msgid "UserOnboardingTour|Skip this step"
msgstr ""
-msgid "UserOnboardingTour|Sweet! Your project was created is is ready to be used.%{lineBreak}%{lineBreak}You can start adding files to the repository or clone it. One last thing we want to show you is how to invite your colleagues to your new project."
+msgid "UserOnboardingTour|Sweet! Your project was created and is ready to be used.%{lineBreak}%{lineBreak}You can start adding files to the repository or clone it. One last thing we want to show you is how to invite your colleagues to your new project."
msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
@@ -17060,13 +18142,13 @@ msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|That's it for merge requests. Now for the finla part of this guided tour - the %{emphasisStart}CI/CD%{emphasisEnd}."
+msgid "UserOnboardingTour|That's it for merge requests. Now for the final part of this guided tour - the %{emphasisStart}CI/CD%{emphasisEnd}."
msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -17081,10 +18163,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaborate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -17285,6 +18367,11 @@ msgstr ""
msgid "View epics list"
msgstr ""
+msgid "View exposed artifact"
+msgid_plural "View %d exposed artifacts"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "View file @ "
msgstr ""
@@ -17378,10 +18465,10 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgid "VisualReviewApp|Copy merge request ID"
msgstr ""
-msgid "VisualReviewApp|Copy script to clipboard"
+msgid "VisualReviewApp|Copy script"
msgstr ""
msgid "VisualReviewApp|Enable Visual Reviews"
@@ -17405,7 +18492,7 @@ msgstr ""
msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgid "Vulnerability-Check"
msgstr ""
msgid "VulnerabilityChart|%{formattedStartDate} to today"
@@ -17447,7 +18534,7 @@ msgstr ""
msgid "Vulnerability|Severity"
msgstr ""
-msgid "Wait for the source to load to copy it to the clipboard"
+msgid "Wait for the file to load to copy its contents"
msgstr ""
msgid "Waiting for performance data"
@@ -17468,9 +18555,6 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
@@ -17480,9 +18564,15 @@ msgstr ""
msgid "We don't have enough data to show this stage."
msgstr ""
+msgid "We have found the following errors:"
+msgstr ""
+
msgid "We heard back from your U2F device. You have been authenticated."
msgstr ""
+msgid "We need some additional information to activate your free trial"
+msgstr ""
+
msgid "We sent you an email with reset password instructions"
msgstr ""
@@ -17519,6 +18609,12 @@ msgstr ""
msgid "Weight %{weight}"
msgstr ""
+msgid "Welcome back! Your account had been deactivated due to inactivity but is now reactivated."
+msgstr ""
+
+msgid "Welcome to GitLab"
+msgstr ""
+
msgid "Welcome to the Guided GitLab Tour"
msgstr ""
@@ -17728,6 +18824,9 @@ msgstr ""
msgid "Write milestone description..."
msgstr ""
+msgid "Write your release notes or drag your files here…"
+msgstr ""
+
msgid "Wrong extern UID provided. Make sure Auth0 is configured correctly."
msgstr ""
@@ -17806,6 +18905,9 @@ msgstr ""
msgid "You can also upload existing files from your computer using the instructions below."
msgstr ""
+msgid "You can apply your Trial to your Personal account or create a New Group."
+msgstr ""
+
msgid "You can create files directly in GitLab using one of the following options."
msgstr ""
@@ -17815,7 +18917,7 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
-msgid "You can filter by \"days to merge\" by clicking on the columns in the chart."
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
msgstr ""
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
@@ -17923,7 +19025,13 @@ msgstr ""
msgid "You don't have any recent searches"
msgstr ""
-msgid "You don’t have acces to Productivity Analaytics in this group"
+msgid "You don't have sufficient permission to perform this action."
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
msgstr ""
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
@@ -18040,6 +19148,9 @@ msgstr ""
msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile"
msgstr ""
+msgid "You won't get a free trial right now but you can always resume this process by clicking on your avatar and choosing 'Start a free trial'."
+msgstr ""
+
msgid "You'll be signed out from your current account automatically."
msgstr ""
@@ -18121,6 +19232,9 @@ msgstr ""
msgid "Your access request to the %{source_type} has been withdrawn."
msgstr ""
+msgid "Your account has been deactivated by your administrator. Please log back in to reactivate your account."
+msgstr ""
+
msgid "Your account uses dedicated credentials for the \"%{group_name}\" group and can only be updated through SSO."
msgstr ""
@@ -18178,7 +19292,7 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
-msgid "Your pages are served under:"
+msgid "Your password isn't required to view this page. If a password or any other personal details are requested, please contact your administrator to report abuse."
msgstr ""
msgid "Your password reset token has expired."
@@ -18244,9 +19358,6 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
-msgid "cannot be in the same project"
-msgstr ""
-
msgid "cannot be modified"
msgstr ""
@@ -18570,6 +19681,9 @@ msgstr ""
msgid "connecting"
msgstr ""
+msgid "container_name cannot be larger than %{max_length} chars"
+msgstr ""
+
msgid "could not read private key, is the passphrase correct?"
msgstr ""
@@ -18652,6 +19766,9 @@ msgstr ""
msgid "failed"
msgstr ""
+msgid "failed to dismiss associated finding(id=%{finding_id}): %{message}"
+msgstr ""
+
msgid "for %{link_to_merge_request} with %{link_to_merge_request_source_branch}"
msgstr ""
@@ -18732,6 +19849,9 @@ msgstr ""
msgid "is not an email you own"
msgstr ""
+msgid "is too long (maximum is 100 entries)"
+msgstr ""
+
msgid "is too long (maximum is 1000 entries)"
msgstr ""
@@ -18791,6 +19911,9 @@ msgstr ""
msgid "missing"
msgstr ""
+msgid "most recent deployment"
+msgstr ""
+
msgid "mrWidgetCommitsAdded|%{commitCount} and %{mergeCommitCount} will be added to %{targetBranch}."
msgstr ""
@@ -19137,6 +20260,9 @@ msgstr ""
msgid "pipeline"
msgstr ""
+msgid "pod_name cannot be larger than %{max_length} chars"
+msgstr ""
+
msgid "point"
msgid_plural "points"
msgstr[0] ""
diff --git a/locale/gl_ES/gitlab.po b/locale/gl_ES/gitlab.po
index 1bd39aed392..40738f1c576 100644
--- a/locale/gl_ES/gitlab.po
+++ b/locale/gl_ES/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: gl\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:46\n"
+"PO-Revision-Date: 2019-09-24 10:25\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr " e"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " rebaixado en %d puntos"
@@ -40,12 +49,18 @@ msgstr[1] " mellorado en %d punto"
msgid " or "
msgstr " ou "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " ou <#epic id>"
msgid " or <#issue id>"
msgstr " ou <identificación #issue>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d incidencia"
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/he_IL/gitlab.po b/locale/he_IL/gitlab.po
index fa4ec9bf9bb..bc16e8b528b 100644
--- a/locale/he_IL/gitlab.po
+++ b/locale/he_IL/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: he\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:41\n"
+"PO-Revision-Date: 2019-09-24 10:27\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -44,12 +53,18 @@ msgstr[3] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -71,6 +86,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d commits"
msgstr ""
@@ -102,6 +124,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -144,6 +173,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
@@ -151,6 +187,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -175,13 +218,13 @@ msgstr[3] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -194,6 +237,9 @@ msgstr[3] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -220,12 +266,24 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -241,6 +299,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -256,10 +317,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -268,6 +329,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -337,6 +401,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -359,9 +426,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -371,6 +450,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -384,18 +466,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -519,9 +613,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -570,6 +661,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -606,6 +700,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -642,6 +739,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -651,6 +751,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -705,6 +808,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -723,6 +886,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -732,12 +898,22 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -750,12 +926,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -774,23 +965,23 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
msgid "Add an SSH key"
-msgstr ""
+msgstr "הוספת מפתח SSH"
msgid "Add an issue"
+msgstr "הוספת סוגיה"
+
+msgid "Add approval rule"
msgstr ""
msgid "Add approvers"
-msgstr ""
+msgstr "הוספת מ×שרי×"
msgid "Add bold text"
-msgstr ""
+msgstr "הוספת טקסט מודגש"
msgid "Add child epic to an epic"
msgstr ""
@@ -807,6 +998,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr "הוספת סוגיות"
+
msgid "Add italic text"
msgstr ""
@@ -814,7 +1008,7 @@ msgid "Add label(s)"
msgstr ""
msgid "Add license"
-msgstr ""
+msgstr "הוספת רישיון"
msgid "Add list"
msgstr ""
@@ -825,12 +1019,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -843,7 +1046,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -858,9 +1061,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -876,7 +1097,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -912,6 +1142,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -960,6 +1193,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1057,6 +1314,12 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1066,9 +1329,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1087,9 +1356,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1123,6 +1389,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1135,6 +1407,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1147,13 +1422,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1168,7 +1437,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1228,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1270,6 +1542,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1315,10 +1590,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1339,6 +1614,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1387,6 +1668,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1405,6 +1689,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1429,6 +1716,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1471,6 +1761,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1520,7 +1813,7 @@ msgstr[3] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1529,12 +1822,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1571,6 +1879,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1613,6 +1930,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1640,6 +1960,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1676,6 +2002,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1694,6 +2023,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1704,7 +2036,11 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1715,6 +2051,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1737,12 +2076,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1800,6 +2148,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1821,6 +2172,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -2001,31 +2364,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -2040,13 +2403,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2064,6 +2424,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2076,35 +2439,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2267,6 +2646,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2378,7 +2760,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2387,6 +2772,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2414,9 +2805,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2426,6 +2823,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2453,12 +2853,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2495,6 +2904,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2516,6 +2931,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2558,6 +3024,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2594,9 +3063,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2687,6 +3153,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2696,6 +3165,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2741,15 +3213,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2771,6 +3252,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2807,6 +3291,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2816,12 +3303,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2870,6 +3372,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2879,6 +3384,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2918,12 +3426,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2954,12 +3468,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -3008,6 +3531,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3095,7 +3621,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3110,6 +3636,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3122,6 +3651,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3131,6 +3666,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3140,6 +3678,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3164,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3176,6 +3720,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3194,15 +3741,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3221,6 +3777,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3260,18 +3819,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3293,6 +3858,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3329,16 +3897,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3368,15 +3942,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3386,10 +3969,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3398,6 +3981,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3411,6 +3997,9 @@ msgstr[3] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3507,12 +4096,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3522,6 +4117,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3531,6 +4129,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3597,31 +4198,41 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3633,13 +4244,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3702,15 +4328,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3747,6 +4382,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3762,6 +4400,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3777,13 +4421,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3792,12 +4439,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3810,7 +4466,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3831,12 +4487,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3867,6 +4535,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3885,6 +4556,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3909,6 +4583,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3930,18 +4610,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3978,6 +4670,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3987,18 +4718,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -4020,6 +4784,35 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -4044,7 +4837,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4065,6 +4858,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4086,12 +4882,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4134,12 +4939,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4176,6 +4990,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4194,6 +5011,26 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4206,12 +5043,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4221,6 +5067,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4239,6 +5088,20 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4252,6 +5115,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4324,6 +5196,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4375,6 +5250,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4399,9 +5277,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4417,6 +5316,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4426,9 +5331,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4450,9 +5352,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4465,6 +5373,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4522,6 +5433,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4552,6 +5469,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4561,6 +5481,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4582,9 +5505,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4594,6 +5523,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4630,9 +5562,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4654,12 +5592,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4678,6 +5625,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4702,6 +5661,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4786,12 +5748,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4804,6 +5769,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4822,12 +5790,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4861,18 +5835,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4885,9 +5877,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5056,9 +6057,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5095,12 +6102,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5119,9 +6141,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5137,6 +6156,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5194,9 +6219,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5215,13 +6246,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5314,9 +6348,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5338,6 +6378,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5350,9 +6393,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5362,6 +6414,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5416,6 +6474,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5455,6 +6519,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5476,6 +6549,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5497,6 +6573,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5506,6 +6594,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5539,6 +6630,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5566,6 +6660,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5596,6 +6693,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5617,6 +6723,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5626,19 +6735,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5653,10 +6762,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5668,19 +6777,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5689,6 +6822,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5707,9 +6843,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5774,6 +6907,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5816,6 +6952,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5879,6 +7018,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5915,12 +7057,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5981,6 +7129,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5993,6 +7144,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6056,6 +7210,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6164,10 +7321,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6176,10 +7333,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
+msgstr ""
+
+msgid "Geo|All projects are being scheduled for re-verify"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6188,9 +7348,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6215,10 +7381,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6269,12 +7438,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6293,6 +7456,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6317,7 +7486,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6374,6 +7543,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6431,6 +7603,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6449,9 +7630,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6467,9 +7645,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6482,6 +7669,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6491,15 +7684,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6509,7 +7786,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6518,12 +7795,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6587,15 +7870,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6632,6 +7915,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6707,6 +7993,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6740,6 +8029,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6863,6 +8155,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6884,6 +8182,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6894,6 +8195,9 @@ msgstr[3] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6912,6 +8216,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6921,6 +8228,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6930,6 +8240,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6942,9 +8255,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6981,6 +8300,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -7044,6 +8366,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7149,7 +8477,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7203,13 +8531,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7254,6 +8585,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7273,6 +8607,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7315,6 +8652,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7363,16 +8703,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7417,9 +8763,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7435,7 +8799,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7453,6 +8820,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7630,6 +9003,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7654,10 +9030,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7745,6 +9124,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7766,15 +9148,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7793,7 +9184,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7811,9 +9202,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7832,6 +9220,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7841,6 +9232,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7871,76 +9265,102 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7952,6 +9372,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7962,12 +9385,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7980,13 +9409,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7998,6 +9427,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -8037,13 +9469,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8055,6 +9493,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8070,19 +9511,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8127,6 +9574,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8145,6 +9595,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8154,7 +9610,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8166,15 +9622,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8232,9 +9739,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8262,6 +9778,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8274,6 +9793,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8307,34 +9829,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8349,19 +9871,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8385,24 +9907,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8571,9 +10111,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8613,6 +10150,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8625,7 +10165,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8637,6 +10177,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8667,6 +10213,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8676,6 +10228,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8773,6 +10331,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8860,13 +10421,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8878,13 +10451,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8899,9 +10478,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8911,6 +10487,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8935,12 +10520,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8995,9 +10586,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -9007,6 +10604,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9019,6 +10619,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -9037,6 +10640,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -9046,6 +10652,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9061,6 +10670,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9157,6 +10769,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9175,9 +10790,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9193,6 +10820,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9224,6 +10854,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9248,6 +10884,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9257,6 +10899,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9266,6 +10911,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9347,6 +10998,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9371,6 +11028,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9407,13 +11076,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9485,9 +11154,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9515,12 +11202,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9587,7 +11283,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9611,12 +11307,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9665,15 +11370,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9704,6 +11424,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9716,18 +11439,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9758,6 +11475,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9776,6 +11496,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9863,6 +11586,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9872,7 +11598,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9899,6 +11625,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9956,6 +11685,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9992,6 +11727,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10106,6 +11856,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10148,6 +11901,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10178,6 +11934,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10283,6 +12042,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10328,6 +12093,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10337,6 +12105,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10388,9 +12159,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10433,6 +12201,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10451,13 +12225,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10466,6 +12270,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10637,10 +12447,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10658,9 +12516,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10694,6 +12549,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10724,6 +12582,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10748,6 +12609,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10766,6 +12633,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10796,6 +12666,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10871,6 +12744,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10964,6 +12840,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10973,9 +12852,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10985,6 +12873,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -11055,9 +12946,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11085,6 +12973,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11094,9 +12985,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11118,6 +13015,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11127,12 +13027,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11142,30 +13051,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11199,6 +13153,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11208,12 +13171,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11280,6 +13252,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11304,9 +13279,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11319,6 +13300,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11334,6 +13318,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11354,6 +13341,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11369,10 +13359,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11381,6 +13377,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11429,6 +13428,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11496,6 +13498,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11556,7 +13561,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11631,6 +13636,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11640,6 +13648,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11661,15 +13672,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11757,9 +13783,98 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11772,6 +13887,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11787,24 +13905,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11832,6 +13974,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11859,6 +14004,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11868,12 +14016,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11886,6 +14040,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11895,7 +14052,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11907,6 +14073,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11922,13 +14091,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11955,6 +14130,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11982,6 +14163,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -12012,9 +14196,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -12033,6 +14229,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12066,12 +14265,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12081,16 +14292,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12108,6 +14325,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12135,6 +14355,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12192,9 +14418,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12220,6 +14452,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12250,6 +14494,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12262,6 +14509,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12271,6 +14521,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12295,6 +14551,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12313,6 +14572,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12346,9 +14620,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12379,6 +14659,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12388,6 +14671,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12421,6 +14710,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12472,6 +14764,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12541,6 +14836,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12556,6 +14854,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12634,6 +14938,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12655,13 +14962,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12670,6 +14977,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12679,28 +14992,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12727,12 +15049,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12763,6 +15091,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12778,6 +15118,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12802,6 +15145,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12814,9 +15163,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12877,6 +15223,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12970,9 +15319,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -13030,6 +15385,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13183,6 +15544,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13199,6 +15563,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13223,9 +15590,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13250,6 +15614,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13286,9 +15656,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13403,7 +15770,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13430,7 +15797,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13439,7 +15806,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13463,7 +15830,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13499,9 +15866,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13523,6 +15896,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13532,18 +15908,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13568,6 +15947,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13625,10 +16007,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13676,6 +16058,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13685,12 +16073,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13712,13 +16103,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13775,9 +16166,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13796,9 +16193,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13829,6 +16223,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13838,6 +16235,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13859,6 +16259,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13877,6 +16280,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13886,6 +16298,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13895,12 +16310,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -14024,6 +16448,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -14059,6 +16486,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14074,6 +16504,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14101,12 +16534,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14131,12 +16558,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14161,16 +16606,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14179,6 +16624,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14188,9 +16636,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14203,16 +16648,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14233,6 +16687,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14251,6 +16708,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14287,9 +16750,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14317,9 +16777,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14344,12 +16801,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14383,6 +16849,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14395,6 +16873,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14425,6 +16906,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14452,12 +16939,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14494,6 +16993,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14503,15 +17011,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14542,6 +17062,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14554,6 +17077,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14617,6 +17143,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14785,6 +17314,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14797,6 +17329,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14860,7 +17395,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14872,7 +17407,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14887,10 +17422,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14938,6 +17473,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14950,6 +17491,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14977,6 +17521,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -15055,6 +17602,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15133,6 +17683,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15154,16 +17707,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15172,16 +17737,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15223,6 +17791,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15238,10 +17809,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15295,6 +17863,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15311,12 +17882,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15326,6 +17903,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15398,15 +17978,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15422,19 +17996,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15455,6 +18026,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15485,6 +18059,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15521,6 +18098,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15575,6 +18155,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15599,7 +18182,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15620,6 +18206,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15641,9 +18230,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15671,6 +18257,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15695,6 +18293,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15785,6 +18389,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15824,6 +18431,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15839,7 +18449,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15911,6 +18521,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15923,12 +18536,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15944,6 +18566,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15962,6 +18587,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15971,6 +18602,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16088,6 +18722,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16106,10 +18743,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16127,10 +18764,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16151,36 +18788,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16207,6 +18821,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16268,6 +18885,9 @@ msgstr[3] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16310,6 +18930,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16326,7 +18949,10 @@ msgstr[3] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16335,13 +18961,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "done"
msgstr ""
@@ -16352,16 +18971,28 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16406,6 +19037,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16452,21 +19086,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16491,15 +19125,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16522,6 +19165,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16645,6 +19297,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16678,6 +19333,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16729,7 +19387,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16741,9 +19399,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16753,6 +19423,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16786,9 +19459,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16801,7 +19480,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16821,7 +19500,10 @@ msgstr[3] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16847,12 +19529,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16865,6 +19553,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16953,15 +19644,40 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16971,6 +19687,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16986,12 +19705,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/hi_IN/gitlab.po b/locale/hi_IN/gitlab.po
index 1b541aede3e..0f51e91d180 100644
--- a/locale/hi_IN/gitlab.po
+++ b/locale/hi_IN/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: hi\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:37\n"
+"PO-Revision-Date: 2019-09-24 10:22\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/hr_HR/gitlab.po b/locale/hr_HR/gitlab.po
index 3be78e24bf7..42ec800d560 100644
--- a/locale/hr_HR/gitlab.po
+++ b/locale/hr_HR/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: hr\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:44\n"
+"PO-Revision-Date: 2019-09-24 10:20\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -42,12 +51,18 @@ msgstr[2] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -66,6 +81,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d commits"
msgstr ""
@@ -93,6 +114,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -129,12 +156,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -156,13 +195,13 @@ msgstr[2] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -174,6 +213,9 @@ msgstr[2] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -198,12 +240,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -219,6 +273,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -234,10 +291,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -246,6 +303,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -312,6 +372,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -333,9 +396,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -345,6 +420,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -357,18 +435,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -480,9 +570,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -531,6 +618,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -567,6 +657,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -603,6 +696,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -612,6 +708,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -666,6 +765,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -684,6 +843,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -693,12 +855,21 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -711,12 +882,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -735,9 +921,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -747,6 +930,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -768,6 +954,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -786,12 +975,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -804,7 +1002,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -819,9 +1017,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -837,7 +1053,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -873,6 +1098,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -921,6 +1149,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1017,6 +1269,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1026,9 +1284,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1047,9 +1311,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1083,6 +1344,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1095,6 +1362,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1107,13 +1377,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1128,7 +1392,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1188,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1230,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1275,10 +1545,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1299,6 +1569,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1347,6 +1623,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1365,6 +1644,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1389,6 +1671,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1431,6 +1716,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1476,7 +1764,7 @@ msgstr[2] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1485,12 +1773,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1527,6 +1830,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1569,6 +1881,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1596,6 +1911,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1632,6 +1953,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1650,6 +1974,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1660,7 +1987,10 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1671,6 +2001,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1692,12 +2025,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1755,6 +2097,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1776,6 +2121,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1956,31 +2313,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1995,13 +2352,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2019,6 +2373,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2031,33 +2388,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2220,6 +2595,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2331,7 +2709,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2340,6 +2721,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2367,9 +2754,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2379,6 +2772,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2406,12 +2802,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2448,6 +2853,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2469,6 +2880,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2511,6 +2973,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2547,9 +3012,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2640,6 +3102,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2649,6 +3114,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2694,15 +3162,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2724,6 +3201,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2760,6 +3240,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2769,12 +3252,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2823,6 +3321,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2832,6 +3333,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2871,12 +3375,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2907,12 +3417,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2961,6 +3480,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3048,7 +3570,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3063,6 +3585,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3075,6 +3600,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3084,6 +3615,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3093,6 +3627,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3117,6 +3654,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3129,6 +3669,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3147,15 +3690,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3174,6 +3726,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3213,18 +3768,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3246,6 +3807,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3282,16 +3846,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3321,15 +3891,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3339,10 +3918,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3351,6 +3930,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3363,6 +3945,9 @@ msgstr[2] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3459,12 +4044,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3474,6 +4065,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3483,6 +4077,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3549,31 +4146,40 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3585,13 +4191,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3654,15 +4275,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3699,6 +4329,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3714,6 +4347,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3729,13 +4368,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3744,12 +4386,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3762,7 +4413,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3783,12 +4434,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3819,6 +4482,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3837,6 +4503,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3861,6 +4530,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3882,18 +4557,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3930,6 +4617,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3939,18 +4665,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3972,6 +4731,33 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3996,7 +4782,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4017,6 +4803,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4038,12 +4827,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4086,12 +4884,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4128,6 +4935,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4146,6 +4956,24 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4158,12 +4986,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4173,6 +5010,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4191,6 +5031,18 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4203,6 +5055,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4275,6 +5136,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4326,6 +5190,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4350,9 +5217,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4368,6 +5256,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4377,9 +5271,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4401,9 +5292,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4416,6 +5313,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4473,6 +5373,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4503,6 +5409,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4512,6 +5421,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4533,9 +5445,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4545,6 +5463,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4581,9 +5502,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4605,12 +5532,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4629,6 +5565,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4653,6 +5601,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4737,12 +5688,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4755,6 +5709,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4773,12 +5730,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4812,18 +5775,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4836,9 +5817,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5007,9 +5997,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5046,12 +6042,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5070,9 +6081,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5088,6 +6096,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5145,9 +6159,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5166,13 +6186,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5265,9 +6288,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5289,6 +6318,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5301,9 +6333,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5313,6 +6354,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5367,6 +6414,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5406,6 +6459,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5427,6 +6489,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5448,6 +6513,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5457,6 +6534,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5490,6 +6570,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5517,6 +6600,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5547,6 +6633,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5568,6 +6663,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5577,19 +6675,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5604,10 +6702,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5619,19 +6717,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5640,6 +6762,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5658,9 +6783,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5724,6 +6846,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5766,6 +6891,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5829,6 +6957,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5865,12 +6996,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5931,6 +7068,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5943,6 +7083,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6006,6 +7149,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6114,10 +7260,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6126,10 +7272,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6138,9 +7287,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6165,10 +7320,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6219,12 +7377,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6243,6 +7395,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6267,7 +7425,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6324,6 +7482,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6381,6 +7542,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6399,9 +7569,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6417,9 +7584,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6432,6 +7608,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6441,15 +7623,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6459,7 +7725,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6468,12 +7734,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6537,15 +7809,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6582,6 +7854,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6657,6 +7932,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6690,6 +7968,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6813,6 +8094,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6834,6 +8121,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6843,6 +8133,9 @@ msgstr[2] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6861,6 +8154,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6870,6 +8166,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6879,6 +8178,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6891,9 +8193,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6930,6 +8238,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6993,6 +8304,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7098,7 +8415,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7152,13 +8469,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7203,6 +8523,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7221,6 +8544,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7263,6 +8589,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7311,16 +8640,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7365,9 +8700,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7383,7 +8736,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7401,6 +8757,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7578,6 +8940,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7602,10 +8967,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7692,6 +9060,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7713,15 +9084,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7740,7 +9120,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7758,9 +9138,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7779,6 +9156,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7788,6 +9168,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7818,76 +9201,100 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7899,6 +9306,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7908,12 +9318,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7926,13 +9342,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7944,6 +9360,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7983,13 +9402,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8001,6 +9426,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8016,19 +9444,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8073,6 +9507,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8091,6 +9528,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8100,7 +9543,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8112,15 +9555,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8178,9 +9672,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8208,6 +9711,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8220,6 +9726,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8253,34 +9762,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8295,19 +9804,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8331,24 +9840,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8517,9 +10044,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8559,6 +10083,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8571,7 +10098,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8583,6 +10110,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8613,6 +10146,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8622,6 +10161,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8718,6 +10263,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8805,13 +10353,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8823,13 +10383,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8844,9 +10410,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8856,6 +10419,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8880,12 +10452,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8940,9 +10518,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8952,6 +10536,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8964,6 +10551,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8982,6 +10572,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8991,6 +10584,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9006,6 +10602,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9102,6 +10701,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9120,9 +10722,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9138,6 +10752,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9168,6 +10785,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9192,6 +10815,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9201,6 +10830,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9210,6 +10842,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9291,6 +10929,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9315,6 +10959,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9351,13 +11007,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9429,9 +11085,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9459,12 +11133,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9531,7 +11214,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9555,12 +11238,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9609,15 +11301,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9648,6 +11355,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9660,18 +11370,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9702,6 +11406,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9720,6 +11427,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9807,6 +11517,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9816,7 +11529,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9843,6 +11556,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9900,6 +11616,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9936,6 +11658,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10050,6 +11787,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10092,6 +11832,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10122,6 +11865,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10227,6 +11973,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10272,6 +12024,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10281,6 +12036,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10332,9 +12090,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10377,6 +12132,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10395,13 +12156,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10410,6 +12201,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10581,10 +12378,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10602,9 +12447,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10638,6 +12480,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10668,6 +12513,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10692,6 +12540,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10710,6 +12564,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10740,6 +12597,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10815,6 +12675,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10908,6 +12771,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10917,9 +12783,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10929,6 +12804,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10998,9 +12876,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11028,6 +12903,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11037,9 +12915,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11061,6 +12945,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11070,12 +12957,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11085,30 +12981,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11142,6 +13083,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11151,12 +13101,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11223,6 +13182,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11247,9 +13209,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11262,6 +13230,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11277,6 +13248,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11295,6 +13269,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11310,10 +13287,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11322,6 +13305,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11370,6 +13356,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11436,6 +13425,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11496,7 +13488,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11571,6 +13563,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11580,6 +13575,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11601,15 +13599,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11697,9 +13710,87 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11712,6 +13803,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11727,24 +13821,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11772,6 +13890,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11799,6 +13920,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11808,12 +13932,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11826,6 +13956,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11835,7 +13968,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11847,6 +13989,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11862,13 +14007,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11895,6 +14046,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11922,6 +14079,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11952,9 +14112,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11973,6 +14145,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12006,12 +14181,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12021,16 +14208,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12048,6 +14241,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12075,6 +14271,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12132,9 +14334,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12159,6 +14367,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12189,6 +14409,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12201,6 +14424,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12210,6 +14436,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12234,6 +14466,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12252,6 +14487,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12285,9 +14535,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12318,6 +14574,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12327,6 +14586,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12360,6 +14625,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12411,6 +14679,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12480,6 +14751,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12495,6 +14769,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12573,6 +14853,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12594,13 +14877,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12609,6 +14892,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12618,28 +14907,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12666,12 +14964,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12702,6 +15006,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12717,6 +15033,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12741,6 +15060,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12753,9 +15078,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12816,6 +15138,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12909,9 +15234,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12969,6 +15300,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13122,6 +15459,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13137,6 +15477,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13161,9 +15504,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13188,6 +15528,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13224,9 +15570,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13341,7 +15684,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13368,7 +15711,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13377,7 +15720,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13401,7 +15744,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13437,9 +15780,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13461,6 +15810,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13470,18 +15822,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13506,6 +15861,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13563,10 +15921,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13614,6 +15972,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13623,12 +15987,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13650,13 +16017,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13713,9 +16080,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13734,9 +16107,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13767,6 +16137,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13776,6 +16149,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13797,6 +16173,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13815,6 +16194,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13824,6 +16212,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13833,12 +16224,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13962,6 +16362,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13995,6 +16398,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14010,6 +16416,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14037,12 +16446,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14067,12 +16470,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14097,16 +16518,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14115,6 +16536,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14124,9 +16548,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14139,16 +16560,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14169,6 +16599,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14187,6 +16620,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14223,9 +16662,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14253,9 +16689,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14280,12 +16713,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14319,6 +16761,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14331,6 +16785,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14361,6 +16818,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14388,12 +16851,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14430,6 +16905,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14439,15 +16923,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14478,6 +16974,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14490,6 +16989,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14553,6 +17055,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14721,6 +17226,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14733,6 +17241,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14796,7 +17307,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14808,7 +17319,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14823,10 +17334,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14874,6 +17385,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14886,6 +17403,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14913,6 +17433,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14991,6 +17514,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15069,6 +17595,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15090,16 +17619,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15108,16 +17649,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15159,6 +17703,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15174,10 +17721,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15231,6 +17775,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15246,12 +17793,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15261,6 +17814,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15333,15 +17889,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15357,19 +17907,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15390,6 +17937,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15420,6 +17970,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15456,6 +18009,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15510,6 +18066,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15534,7 +18093,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15555,6 +18117,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15576,9 +18141,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15606,6 +18168,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15630,6 +18204,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15720,6 +18300,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15759,6 +18342,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15774,7 +18360,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15846,6 +18432,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15858,12 +18447,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15879,6 +18477,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15897,6 +18498,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15906,6 +18513,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16017,6 +18627,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16035,10 +18648,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16056,10 +18669,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16080,34 +18693,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16134,6 +18726,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16194,6 +18789,9 @@ msgstr[2] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16236,6 +18834,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16251,7 +18852,10 @@ msgstr[2] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16260,12 +18864,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "done"
msgstr ""
@@ -16275,16 +18873,28 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16329,6 +18939,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16374,21 +18987,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16413,15 +19026,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16443,6 +19065,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16566,6 +19197,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16599,6 +19233,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16650,7 +19287,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16662,9 +19299,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16674,6 +19323,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16707,9 +19359,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16722,7 +19380,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16740,7 +19398,10 @@ msgstr[2] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16764,12 +19425,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16782,6 +19449,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16869,15 +19539,39 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16887,6 +19581,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16902,12 +19599,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/hu_HU/gitlab.po b/locale/hu_HU/gitlab.po
index ee21fbf590b..c58c10829c3 100644
--- a/locale/hu_HU/gitlab.po
+++ b/locale/hu_HU/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: hu\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:41\n"
+"PO-Revision-Date: 2019-09-24 10:17\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/id_ID/gitlab.po b/locale/id_ID/gitlab.po
index ff8c1eb3391..2df79fe4a42 100644
--- a/locale/id_ID/gitlab.po
+++ b/locale/id_ID/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: id\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:35\n"
+"PO-Revision-Date: 2019-09-24 10:12\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -38,12 +47,18 @@ msgstr[0] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -56,6 +71,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+
msgid "%d commits"
msgstr ""
@@ -75,6 +94,10 @@ msgid "%d fixed test result"
msgid_plural "%d fixed test results"
msgstr[0] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -99,10 +122,18 @@ msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -118,13 +149,13 @@ msgstr[0] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -134,6 +165,9 @@ msgstr[0] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -154,12 +188,24 @@ msgid "%{count} pending comment"
msgid_plural "%{count} pending comments"
msgstr[0] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -175,6 +221,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -190,10 +239,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -202,6 +251,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -262,6 +314,9 @@ msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -281,9 +336,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -293,6 +360,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -303,18 +373,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -402,9 +484,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -453,6 +532,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -489,6 +571,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -525,6 +610,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -534,6 +622,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -588,6 +679,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -606,6 +757,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -615,12 +769,19 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -633,12 +794,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -657,9 +833,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -669,6 +842,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -690,6 +866,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -708,12 +887,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -726,7 +914,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -741,9 +929,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -759,7 +965,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -795,6 +1010,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -843,6 +1061,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -937,6 +1179,12 @@ msgid "Alert"
msgid_plural "Alerts"
msgstr[0] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -946,9 +1194,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -967,9 +1221,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1003,6 +1254,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1015,6 +1272,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1027,13 +1287,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1048,7 +1302,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1108,6 +1362,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1150,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1195,10 +1455,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1219,6 +1479,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1267,6 +1533,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1285,6 +1554,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1309,6 +1581,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1351,6 +1626,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1388,7 +1666,7 @@ msgstr[0] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1397,12 +1675,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1439,6 +1732,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1481,6 +1783,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1508,6 +1813,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1544,6 +1855,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1562,6 +1876,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1572,7 +1889,8 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1583,6 +1901,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1602,12 +1923,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1665,6 +1995,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1686,6 +2019,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1866,31 +2211,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1905,13 +2250,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1929,6 +2271,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1941,29 +2286,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2126,6 +2493,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2237,7 +2607,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2246,6 +2619,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2273,9 +2652,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2285,6 +2670,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2312,12 +2700,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2354,6 +2751,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2375,6 +2778,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2417,6 +2871,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2453,9 +2910,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2546,6 +3000,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2555,6 +3012,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2600,15 +3060,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2630,6 +3099,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2666,6 +3138,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2675,12 +3150,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2729,6 +3219,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2738,6 +3231,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2777,12 +3273,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2813,12 +3315,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2867,6 +3378,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -2954,7 +3468,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -2969,6 +3483,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -2981,6 +3498,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -2990,6 +3513,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -2999,6 +3525,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3023,6 +3552,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3035,6 +3567,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3053,15 +3588,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3080,6 +3624,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3119,18 +3666,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3152,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3188,16 +3744,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3227,15 +3789,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3245,10 +3816,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3257,6 +3828,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3267,6 +3841,9 @@ msgstr[0] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3363,12 +3940,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3378,6 +3961,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3387,6 +3973,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3453,31 +4042,38 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3489,13 +4085,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3558,15 +4169,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3603,6 +4223,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3618,6 +4241,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3633,13 +4262,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3648,12 +4280,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3666,7 +4307,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3687,12 +4328,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3723,6 +4376,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3741,6 +4397,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3765,6 +4424,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3786,18 +4451,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3834,6 +4511,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3843,18 +4559,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3876,6 +4625,29 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3900,7 +4672,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3921,6 +4693,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3942,12 +4717,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -3990,12 +4774,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4032,6 +4825,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4050,6 +4846,20 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4062,12 +4872,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4077,6 +4896,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4095,6 +4917,14 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4105,6 +4935,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4177,6 +5016,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4228,6 +5070,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4252,9 +5097,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4270,6 +5136,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4279,9 +5151,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4303,9 +5172,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4318,6 +5193,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4375,6 +5253,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4405,6 +5289,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4414,6 +5301,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4435,9 +5325,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4447,6 +5343,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4483,9 +5382,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4507,12 +5412,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4531,6 +5445,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4555,6 +5481,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4639,12 +5568,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4657,6 +5589,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4675,12 +5610,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4714,18 +5655,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4738,9 +5697,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4909,9 +5877,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4948,12 +5922,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -4972,9 +5961,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -4990,6 +5976,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5047,9 +6039,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5068,13 +6066,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5167,9 +6168,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5191,6 +6198,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5203,9 +6213,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5215,6 +6234,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5269,6 +6294,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5308,6 +6339,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5329,6 +6369,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5350,6 +6393,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5359,6 +6414,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5392,6 +6450,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5419,6 +6480,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5449,6 +6513,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5470,6 +6543,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5479,19 +6555,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5506,10 +6582,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5521,19 +6597,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5542,6 +6642,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5560,9 +6663,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5624,6 +6724,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5666,6 +6769,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5729,6 +6835,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5765,12 +6874,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5831,6 +6946,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5843,6 +6961,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5906,6 +7027,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6014,10 +7138,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6026,10 +7150,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6038,9 +7165,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6065,10 +7198,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6119,12 +7255,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6143,6 +7273,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6167,7 +7303,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6224,6 +7360,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6281,6 +7420,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6299,9 +7447,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6317,9 +7462,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6332,6 +7486,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6341,15 +7501,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6359,7 +7603,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6368,12 +7612,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6437,15 +7687,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6482,6 +7732,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6557,6 +7810,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6590,6 +7846,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6713,6 +7972,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6734,6 +7999,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6741,6 +8009,9 @@ msgstr[0] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6759,6 +8030,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6768,6 +8042,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6777,6 +8054,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6789,9 +8069,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6828,6 +8114,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6891,6 +8180,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -6996,7 +8291,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7050,13 +8345,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7101,6 +8399,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7117,6 +8418,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7159,6 +8463,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7207,16 +8514,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7261,9 +8574,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7279,7 +8610,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7297,6 +8631,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7474,6 +8814,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7498,10 +8841,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7586,6 +8932,9 @@ msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7607,15 +8956,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7634,7 +8992,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7652,9 +9010,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7673,6 +9028,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7682,6 +9040,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7712,76 +9073,96 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7793,6 +9174,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7800,12 +9184,18 @@ msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7818,13 +9208,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7836,6 +9226,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7875,13 +9268,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7893,6 +9292,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7908,19 +9310,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -7965,6 +9373,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -7983,6 +9394,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -7992,7 +9409,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8004,15 +9421,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8070,9 +9538,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8100,6 +9577,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8112,6 +9592,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8145,34 +9628,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8187,19 +9670,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8223,24 +9706,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8409,9 +9910,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8451,6 +9949,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8463,7 +9964,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8475,6 +9976,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8505,6 +10012,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8514,6 +10027,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8608,6 +10127,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8695,13 +10217,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8713,13 +10247,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8734,9 +10274,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8746,6 +10283,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8770,12 +10316,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8830,9 +10382,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8842,6 +10400,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8854,6 +10415,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8872,6 +10436,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8881,6 +10448,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8896,6 +10466,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -8992,6 +10565,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9010,9 +10586,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9028,6 +10616,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9056,6 +10647,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9080,6 +10677,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9089,6 +10692,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9098,6 +10704,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9179,6 +10791,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9203,6 +10821,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9239,13 +10869,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9317,9 +10947,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9347,12 +10995,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9419,7 +11076,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9443,12 +11100,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9497,15 +11163,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9536,6 +11217,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9548,18 +11232,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9590,6 +11268,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9608,6 +11289,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9695,6 +11379,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9704,7 +11391,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9731,6 +11418,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9788,6 +11478,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9824,6 +11520,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9938,6 +11649,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -9980,6 +11694,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10010,6 +11727,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10115,6 +11835,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10160,6 +11886,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10169,6 +11898,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10220,9 +11952,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10265,6 +11994,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10283,13 +12018,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10298,6 +12063,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10469,10 +12240,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10490,9 +12309,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10526,6 +12342,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10556,6 +12375,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10580,6 +12402,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10598,6 +12426,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10628,6 +12459,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10703,6 +12537,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10796,6 +12633,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10805,9 +12645,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10817,6 +12666,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10884,9 +12736,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10914,6 +12763,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10923,9 +12775,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -10947,6 +12805,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -10956,12 +12817,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -10971,30 +12841,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11028,6 +12943,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11037,12 +12961,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11109,6 +13042,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11133,9 +13069,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11148,6 +13090,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11163,6 +13108,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11177,6 +13125,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11192,10 +13143,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11204,6 +13161,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11252,6 +13212,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11316,6 +13279,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11376,7 +13342,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11451,6 +13417,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11460,6 +13429,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11481,15 +13453,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11577,9 +13564,65 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11592,6 +13635,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11607,24 +13653,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11652,6 +13722,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11679,6 +13752,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11688,12 +13764,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11706,6 +13788,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11715,7 +13800,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11727,6 +13821,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11742,13 +13839,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11775,6 +13878,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11802,6 +13911,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11832,9 +13944,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11853,6 +13977,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11886,12 +14013,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11901,16 +14040,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11928,6 +14073,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -11955,6 +14103,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12012,9 +14166,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12037,6 +14197,18 @@ msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12067,6 +14239,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12079,6 +14254,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12088,6 +14266,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12112,6 +14296,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12130,6 +14317,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12163,9 +14365,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12196,6 +14404,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12205,6 +14416,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12238,6 +14455,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12289,6 +14509,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12358,6 +14581,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12373,6 +14599,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12451,6 +14683,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12472,13 +14707,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12487,6 +14722,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12496,28 +14737,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12544,12 +14794,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12580,6 +14836,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12595,6 +14863,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12619,6 +14890,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12631,9 +14908,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12694,6 +14968,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12787,9 +15064,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12847,6 +15130,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13000,6 +15289,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13013,6 +15305,9 @@ msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13037,9 +15332,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13064,6 +15356,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13100,9 +15398,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13217,7 +15512,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13244,7 +15539,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13253,7 +15548,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13277,7 +15572,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13313,9 +15608,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13337,6 +15638,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13346,18 +15650,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13382,6 +15689,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13439,10 +15749,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13490,6 +15800,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13499,12 +15815,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13526,13 +15845,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13589,9 +15908,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13610,9 +15935,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13643,6 +15965,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13652,6 +15977,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13673,6 +16001,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13691,6 +16022,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13700,6 +16040,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13709,12 +16052,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13838,6 +16190,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13867,6 +16222,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13882,6 +16240,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13909,12 +16270,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -13939,12 +16294,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -13969,16 +16342,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -13987,6 +16360,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -13996,9 +16372,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14011,16 +16384,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14041,6 +16423,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14059,6 +16444,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14095,9 +16486,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14125,9 +16513,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14152,12 +16537,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14191,6 +16585,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14203,6 +16609,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14233,6 +16642,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14260,12 +16675,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14302,6 +16729,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14311,15 +16747,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14350,6 +16798,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14362,6 +16813,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14425,6 +16879,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14593,6 +17050,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14605,6 +17065,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14668,7 +17131,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14680,7 +17143,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14695,10 +17158,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14746,6 +17209,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14758,6 +17227,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14785,6 +17257,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14863,6 +17338,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -14941,6 +17419,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -14962,16 +17443,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -14980,16 +17473,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15031,6 +17527,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15046,10 +17545,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15103,6 +17599,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15116,12 +17615,18 @@ msgid "When this merge request is accepted"
msgid_plural "When these merge requests are accepted"
msgstr[0] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15131,6 +17636,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15203,15 +17711,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15227,19 +17729,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15260,6 +17759,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15290,6 +17792,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15326,6 +17831,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15380,6 +17888,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15404,7 +17915,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15425,6 +17939,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15446,9 +17963,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15476,6 +17990,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15500,6 +18026,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15590,6 +18122,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15629,6 +18164,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15644,7 +18182,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15716,6 +18254,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15728,12 +18269,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15749,6 +18299,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15767,6 +18320,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15776,6 +18335,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15875,6 +18437,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15893,10 +18458,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15914,10 +18479,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -15938,30 +18503,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -15988,6 +18536,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16046,6 +18597,9 @@ msgstr[0] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16088,6 +18642,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16101,7 +18658,10 @@ msgstr[0] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16110,10 +18670,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-
msgid "done"
msgstr ""
@@ -16121,16 +18677,28 @@ msgid "draft"
msgid_plural "drafts"
msgstr[0] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16175,6 +18743,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16218,21 +18789,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16257,15 +18828,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16285,6 +18865,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16408,6 +18997,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16441,6 +19033,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16492,7 +19087,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16504,9 +19099,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16516,6 +19123,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16549,9 +19159,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16564,7 +19180,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16578,7 +19194,10 @@ msgstr[0] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16598,12 +19217,18 @@ msgid "project"
msgid_plural "projects"
msgstr[0] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16616,6 +19241,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16701,15 +19329,37 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16719,6 +19369,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16734,12 +19387,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/it/gitlab.po b/locale/it/gitlab.po
index 454eb1aaa6e..dcf71315806 100644
--- a/locale/it/gitlab.po
+++ b/locale/it/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: it\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:35\n"
+"PO-Revision-Date: 2019-09-24 10:16\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (da %{timeoutSource})"
msgid " Please sign in."
msgstr " Per favore effettua il login."
@@ -27,6 +30,12 @@ msgstr " Devi farlo prima di %{grace_period_deadline}."
msgid " and"
msgstr " e"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " degradato di %d punto"
@@ -40,12 +49,18 @@ msgstr[1] " migliorato di %d punti"
msgid " or "
msgstr " o "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " o <#epic id>"
msgid " or <#issue id>"
msgstr " o <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d commento"
@@ -61,13 +76,18 @@ msgid_plural "%d commits behind"
msgstr[0] "%d commit indietro"
msgstr[1] "%d commit indietro"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d commit,"
+msgstr[1] "%d commit,"
+
msgid "%d commits"
msgstr "%d commit"
msgid "%d contribution"
msgid_plural "%d contributions"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d contribution"
+msgstr[1] "%d contribution"
msgid "%d exporter"
msgid_plural "%d exporters"
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d risultato del test risolto"
msgstr[1] "%d risultati dei test risolti"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d issue"
@@ -106,16 +131,26 @@ msgstr[1] "%d richieste di merge"
msgid "%d merge request that you don't have access to."
msgid_plural "%d merge requests that you don't have access to."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d richiesta di merge a cui non hai accesso."
+msgstr[1] "%d richieste di merge a cui non hai accesso."
msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d metrica"
msgstr[1] "%d metriche"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
+msgstr[0] "%d altro commento"
+msgstr[1] "Altri %d commenti"
+
+msgid "%d second"
+msgid_plural "%d seconds"
msgstr[0] ""
msgstr[1] ""
@@ -137,23 +172,26 @@ msgstr[1] "%s commit aggiuntivi sono stati omessi per evitare degradi di prestaz
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "Discussione di %{authorsName}"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} fatto %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
msgid_plural "%{count} approvals required from %{name}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%{count} approvazione richiesta da %{name}"
+msgstr[1] "%{count} approvazioni richieste da %{name}"
msgid "%{count} approvals from %{name}"
msgstr "%{count} approvazioni da %{name}"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "%{count} altro"
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] "%{count} commento in attesa"
msgstr[1] "%{count} commenti in attesa"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} eliminato"
@@ -197,6 +247,9 @@ msgstr "I %{group_docs_link_start}Gruppi%{group_docs_link_end} consentono di ges
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} sarà rimosso! Sei sicuro?"
@@ -204,26 +257,29 @@ msgid "%{label_for_message} unavailable"
msgstr "%{label_for_message} non disponibile"
msgid "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free, automated, and open certificate authority (CA), that give digital certificates in order to enable HTTPS (SSL/TLS) for websites."
-msgstr ""
+msgstr "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} è un'autorità di certificazione (CA) libera, automatizzata e aperta, che rilascia certificati digitali per abilitare HTTPS (SSL / TLS) per i siti Web."
msgid "%{level_name} is not allowed in a %{group_level_name} group."
-msgstr ""
+msgstr "%{level_name} non è consentito in un gruppo %{group_level_name}."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "la visibilità %{level_name} è stata limitata dall'amministratore."
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}Leggi di più%{link_end} sulle autorizzazioni di ruolo"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Partito"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} è bloccato dall'utente GitLab %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText}, questo issue verrà chiuso automaticamente."
@@ -252,19 +308,19 @@ msgid "%{service_title} settings saved, but not activated."
msgstr "le impostazioni di %{service_title} sono state salvate, ma non attivate."
msgid "%{size} GiB"
-msgstr ""
+msgstr "%{size} GiB"
msgid "%{size} KiB"
-msgstr ""
+msgstr "%{size} KiB"
msgid "%{size} MiB"
-msgstr ""
+msgstr "%{size} MiB"
msgid "%{size} bytes"
-msgstr ""
+msgstr "%{size} bytes"
msgid "%{spammable_titlecase} was submitted to Akismet successfully."
-msgstr ""
+msgstr "%{spammable_titlecase} è stato inviato ad Akismet con successo."
msgid "%{state} epics"
msgstr "%{state} epici"
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} Tag"
msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Tag"
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text}%{files}"
@@ -307,16 +366,31 @@ msgstr "%{unstaged} cambiamenti unstaged e %{staged} staged"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}scopri di più%{usage_ping_link_end} riguardo a quale informazione è condivisa con GitLab Inc."
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr "Pagina profilo di %{user_name}"
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
msgid "'%{level}' is not a valid visibility level"
-msgstr ""
+msgstr "'%{level}' non è un livello di visibilità valido"
msgid "'%{source}' is not a import source"
+msgstr "'%{source}' non è una sorgente di importazione"
+
+msgid "'%{template_name}' is unknown or invalid"
msgstr ""
msgid "(%d closed)"
@@ -325,23 +399,35 @@ msgstr[0] ""
msgstr[1] ""
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} mergiati)"
msgid "(No changes)"
msgstr ""
-msgid "(check progress)"
+msgid "(Show all)"
msgstr ""
+msgid "(check progress)"
+msgstr "(verifica progresso)"
+
msgid "(external source)"
msgstr "(fonte esterna)"
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ %{count} ulteriori"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} più"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr "+%{extraOptionCount} ulteriori"
@@ -358,7 +444,7 @@ msgid "- show less"
msgstr "- riduci"
msgid "0 for unlimited"
-msgstr ""
+msgstr "0 = illimitato"
msgid "1 %{type} addition"
msgid_plural "%{count} %{type} additions"
@@ -372,18 +458,18 @@ msgstr[1] ""
msgid "1 Day"
msgid_plural "%d Days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 Giorno"
+msgstr[1] "%d Giorni"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 issue chiuso"
+msgstr[1] "%{issues} issue chiusi"
msgid "1 closed merge request"
msgid_plural "%{merge_requests} closed merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 richiesta di merge chiusa"
+msgstr[1] "%{merge_requests} richieste di merge chiuse"
msgid "1 day"
msgstr "1 giorno"
@@ -395,8 +481,8 @@ msgstr[1] "%d gruppi"
msgid "1 merged merge request"
msgid_plural "%{merge_requests} merged merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 richiesta di merge completata"
+msgstr[1] "%{merge_requests} richieste di merge completate"
msgid "1 open issue"
msgid_plural "%{issues} open issues"
@@ -427,25 +513,22 @@ msgid "1 week"
msgstr "1 settimana"
msgid "1-9 contributions"
-msgstr ""
+msgstr "1-9 contributi"
msgid "10-19 contributions"
-msgstr ""
+msgstr "10-19 contributi"
msgid "1st contribution!"
msgstr "Primo contributo!"
msgid "20-29 contributions"
-msgstr ""
+msgstr "20-29 contributi"
msgid "2FA"
msgstr "2FA"
-msgid "2FA enabled"
-msgstr "2FA abilitata"
-
msgid "2FADevice|Registered On"
-msgstr ""
+msgstr "Disp. Autent. a 2 fattori (2FA)|Registrato su"
msgid "3 days"
msgstr "3 giorni"
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "Account"
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr "Attivo"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr "Attività"
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr "Aggiungi intestazione e footer alle e-mail. Le impostazioni dei colori v
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr "Aggiungi una directory (cartella)"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr "Tutto"
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr "Si è verificato un errore. Riprova."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Aspetto"
@@ -1391,6 +1671,9 @@ msgstr "Applicazioni"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "Apr"
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr "Confermi di voler resettare il token di controllo di stato?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Artefatti"
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "Ago"
msgid "August"
msgstr "Agosto"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "Log di autenticazione"
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr "Approfondisci: %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr "Esplora File"
msgid "Browse Files"
msgstr "Esplora Files"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Guarda i files"
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Cancella"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr "Ripristina"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr "Grafici"
msgid "Chat"
msgstr "Chat"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "cancellato"
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Certificate Authority bundle (formato PEM)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Tipo di macchina"
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "Commenti"
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "Messaggio di commit"
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr "Tag"
msgid "ContainerRegistry|Tag ID"
msgstr "Tag ID"
-msgid "ContainerRegistry|Use different image names"
-msgstr "Utilizza nomi d'immagine differenti"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "Con il Docker Container Registry integrato in Gitlab, ogni progetto può avere il suo spazio d'archiviazione sulle immagini Docker."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "Crea una nuova cartella"
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr "Creare un token di accesso sul tuo account per eseguire pull o push tram
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "Crea cartella"
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "Crea un nuova branch"
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr "Crea nuovo..."
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Timezone del Cron"
msgid "Cron syntax"
msgstr "Sintassi Cron"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr "Statistiche Cicliche"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Codice"
@@ -3924,6 +4678,31 @@ msgstr "Pre-rilascio"
msgid "CycleAnalyticsStage|Test"
msgstr "Test"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr "Elimina"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "Rilascio"
@@ -4154,6 +4995,15 @@ msgstr "Chiavi di Deploy (rilascio)"
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr "Nome cartella"
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr "Scarica"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr "Modifica"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "Errore durante l'attivazione/disattivazione della sottoscrizione per l'iscrizione"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr "Ogni settimana (Di domenica alle 4 del mattino)"
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Impossibile cambiare owner"
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "Feb"
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,8 +7664,8 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "L'autenticazione Google non è %{link_to_documentation}. Richiedi al tuo amministratore Gitlab se desideri utilizzare il servizio."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr ""
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr "Questa impostazione è stata applicata a %{ancestor_group}. Puoi eseguir
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr "Housekeeping iniziato con successo"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
+msgstr ""
+
+msgid "Is using license seat:"
msgstr ""
-msgid "Invoke Time"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] "L'ultimo %d giorno"
msgstr[1] "Gli ultimi %d giorni"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "Ultima Pipeline"
@@ -7660,15 +9020,24 @@ msgstr "Ultima modifica %{date}"
msgid "Last edited by %{name}"
msgstr "Modificato da %{name}"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "Ultimo aggiornamento"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "Ultimo aggiornamento"
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "Leggi di più su"
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
+
+msgid "LicenseCompliance|License details"
+msgstr ""
+
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr "Bloccato"
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr "Mar"
msgid "March"
msgstr "Marzo"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr "Richiesta di merge"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "Messaggi"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "Nuova pianificazione Pipeline"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr "Nessuna pianificazione"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr "Nessuno"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "Non disponibile"
@@ -8927,6 +10504,9 @@ msgstr "Dati insufficienti "
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr "Notifiche"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr "Filtra"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,15 +10938,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr "Ultima »"
-msgid "Pagination|Next"
-msgstr "Successiva"
-
-msgid "Pagination|Prev"
-msgstr "Precedente"
+msgid "Pagination|Next ›"
+msgstr ""
msgid "Pagination|« First"
msgstr "« Prima"
+msgid "Pagination|‹ Prev"
+msgstr ""
+
msgid "Parameter"
msgstr ""
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "Pianificazione Pipeline"
@@ -9475,7 +11145,7 @@ msgstr "Variabili"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Personalizzato"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr "Pipeline per la settimana scorsa"
msgid "Pipelines for last year"
msgstr "Pipeline per l'ultimo anno"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr "tutto"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "successo"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "con stadio"
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "Preferenze"
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "Profilo"
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr "Il Progetto '%{project_name}' è stato aggiornato con successo."
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr "L'accesso al progetto dev'esser fornito esplicitamente ad ogni utente"
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr "Siamo spiacenti, non ci sono progetti che corrispondono alla tua ricerca
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr "Ulteriori informazioni"
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Vedi altro"
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr "Attività di Rilascio Correlate"
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "Ricordamelo più tardi"
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr "Rimuovi progetto"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr "Salva pianificazione pipeline"
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr "Pianifica una nuova Pipeline"
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr "Seleziona formato d'archivio"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr "Seleziona una timezone"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr "Seleziona il ramo che vuoi impostare come predefinito per questo progett
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr "Settembre"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "imposta una password"
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "Visualizza %d evento"
msgstr[1] "Visualizza %d eventi"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "inizia una %{new_merge_request} con queste modifiche"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "Lo stadio di pre-rilascio mostra il tempo che trascorre da una MR (Richiesta di Merge) completata al suo rilascio in ambiente di produzione. Questa informazione sarà disponibile dal tuo primo rilascio in produzione"
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr "Lo stadio di test mostra il tempo che ogni Pipeline impiega per essere e
msgid "The time taken by each data entry gathered by that stage."
msgstr "Il tempo aggregato relativo eventi/data entry raccolto in quello stadio."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Questo significa che non è possibile effettuare push di codice fino a che non crei una repository vuota o ne importi una esistente"
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr "Il tempo tra la creazione di una richiesta di merge ed il merge/close"
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr "Il tempo fino alla prima richiesta di merge"
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "%s giorni fa"
@@ -13900,6 +16276,9 @@ msgstr "poco fa"
msgid "Timeago|right now"
msgstr "adesso"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr "Tempo Totale"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "Tempo totale di test per tutti i commits/merges"
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr "Sconosciuto"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "Vuoi visualizzare i dati? Richiedi l'accesso ad un amministratore, grazie."
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr "Puoi aggiungere files solo quando sei in una branch"
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "Hai raggiunto il tuo limite di progetto"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "fa"
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] "giorni"
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr "Nuova richiesta di merge"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "Notifiche via email"
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/ja/gitlab.po b/locale/ja/gitlab.po
index e5b890b16de..9d4f49abbd4 100644
--- a/locale/ja/gitlab.po
+++ b/locale/ja/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: ja\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:35\n"
+"PO-Revision-Date: 2019-09-24 10:08\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (%{timeoutSource} ã‹ã‚‰)"
msgid " Please sign in."
msgstr " サインインã—ã¦ãã ã•ã„。"
@@ -27,6 +30,12 @@ msgstr " %{grace_period_deadline} ã®å‰ã«ã“れを行ã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã
msgid " and"
msgstr " ã¨"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " %dãƒã‚¤ãƒ³ãƒˆæ‚ªåŒ–"
@@ -38,12 +47,18 @@ msgstr[0] " %dãƒã‚¤ãƒ³ãƒˆã§æ”¹å–„"
msgid " or "
msgstr " ã¾ãŸã¯ "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " ã¾ãŸã¯ <#エピックID>"
msgid " or <#issue id>"
msgstr " ã¾ãŸã¯ <#課題 ID>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d 件ã®ã‚³ãƒ¡ãƒ³ãƒˆ"
@@ -56,6 +71,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] "%d個ã®ã‚³ãƒŸãƒƒãƒˆå¾…ã¡"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d個ã®ã‚³ãƒŸãƒƒãƒˆ,"
+
msgid "%d commits"
msgstr "%d個ã®ã‚³ãƒŸãƒƒãƒˆ"
@@ -75,6 +94,10 @@ msgid "%d fixed test result"
msgid_plural "%d fixed test results"
msgstr[0] "%d 件ã®ãƒ†ã‚¹ãƒˆã§ä¿®æ­£ã•ã‚Œã¾ã—ãŸ"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d個ã®èª²é¡Œ"
@@ -93,16 +116,24 @@ msgstr[0] "%d 個ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ"
msgid "%d merge request that you don't have access to."
msgid_plural "%d merge requests that you don't have access to."
-msgstr[0] ""
+msgstr[0] "アクセスã§ããªã„ %d 個ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ"
msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d メトリクス"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "%d 件以上ã®ã‚³ãƒ¡ãƒ³ãƒˆ"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d件ã®ã‚¹ãƒ†ãƒ¼ã‚¸æ¸ˆã¿å¤‰æ›´"
@@ -118,13 +149,13 @@ msgstr[0] "パフォーマンス低下をé¿ã‘ã‚‹ãŸã‚ %s 個ã®ã‚³ãƒŸãƒƒãƒˆã‚
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} 㨠%{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName} ã®ãƒ‡ã‚£ã‚¹ã‚«ãƒƒã‚·ãƒ§ãƒ³"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} ㌠%{commit_timeago} ã«ã‚³ãƒŸãƒƒãƒˆã—ã¾ã—ãŸ"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -134,6 +165,9 @@ msgstr[0] "%{name} ㌠%{count} 件ã®æ‰¿èªã‚’è¦æ±‚ã—ã¦ã„ã¾ã™"
msgid "%{count} approvals from %{name}"
msgstr "%{name} ㌠%{count} 件ã®æ‰¿èªã‚’了承ã—ã¾ã—ãŸ"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "%{count} 以上"
@@ -144,7 +178,7 @@ msgid "%{count} of %{required} approvals from %{name}"
msgstr "%{name} ã‹ã‚‰ã®æ‰¿èª %{required} 中 %{count}"
msgid "%{count} of %{total}"
-msgstr ""
+msgstr "%{count} / %{total}"
msgid "%{count} participant"
msgid_plural "%{count} participants"
@@ -154,12 +188,24 @@ msgid "%{count} pending comment"
msgid_plural "%{count} pending comments"
msgstr[0] "ä¿ç•™ä¸­ã®ã‚³ãƒ¡ãƒ³ãƒˆ%{count} 件"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} ã“ã®ã‚³ãƒŸãƒƒãƒˆã‚’ã‚‚ã†ä¸€åº¦ãƒã‚§ãƒªãƒ¼ãƒ”ックã—ã¦ãã ã•ã„。"
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} ã“ã®ã‚³ãƒŸãƒƒãƒˆã‚’ã‚‚ã†ä¸€åº¦revertã—ã¦ãã ã•ã„。"
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
@@ -173,6 +219,9 @@ msgid "%{group_docs_link_start}Groups%{group_docs_link_end} allow you to manage
msgstr "%{group_docs_link_start}グループ%{group_docs_link_end}を使用ã™ã‚‹ã¨ã€è¤‡æ•°ã®ãƒ—ロジェクトを管ç†ã—ã¦å…±åŒä½œæ¥­ã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚グループã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€æ‰€å±žã™ã‚‹ãƒ—ロジェクトã®ã™ã¹ã¦ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚"
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
+msgstr "%{group_name} ã¯ã‚°ãƒ«ãƒ¼ãƒ—管ç†ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’使用ã—ã¾ã™ã€‚ %{group_name} ã«ã‚ˆã£ã¦ç®¡ç†ã•ã‚Œã‚‹æ–°ã—ã„GitLabアカウントを作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
msgstr ""
msgid "%{issuableType} will be removed! Are you sure?"
@@ -190,18 +239,21 @@ msgstr "%{level_name} 㯠%{group_level_name} グループã«å«ã‚られã¾ã›ã
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr "%{level_name} ã¯è¨±å¯ã•ã‚Œã¾ã›ã‚“。フォークã—ãŸã‚½ãƒ¼ã‚¹ãƒ—ロジェクトã¯ã‚ˆã‚Šå¯è¦–性ãŒä½Žã„ã‹ã‚‰ã§ã™ã€‚"
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "%{level_name} ã®å¯è¦–性ã¯ç®¡ç†è€…ã«ã‚ˆã‚Šåˆ¶é™ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "ロールã®æ¨©é™ã«ã¤ã„ã¦%{link_start}ã‚‚ã£ã¨èª­ã‚€%{link_end}"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} 開始"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} ã¯GitLab ユーザー %{lock_user_id} ã«ã‚ˆã£ã¦ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText} ã€ã“ã®èª²é¡Œã¯è‡ªå‹•çš„ã«ã‚¯ãƒ­ãƒ¼ã‚ºã—ã¾ã™ã€‚"
@@ -262,6 +314,9 @@ msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} ã‚¿ã‚°"
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files} ファイル"
@@ -281,40 +336,67 @@ msgstr "%{unstaged} 件ã®æœªã‚¹ãƒ†ãƒ¼ã‚¸ã®å¤‰æ›´ã¨ã€ %{staged} 件ã®ã‚¹ãƒ†ã
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "GitLab Inc. ã¨ã©ã®ã‚ˆã†ãªæƒ…報を共有ã™ã‚‹ã‹ã«ã¤ã„ã¦ã¯ %{usage_ping_link_start} ã“ã¡ã‚‰%{usage_ping_link_end} ã‚’å‚ç…§ã—ã¦ãã ã•ã„。"
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr "%{user_name} プロフィールページ"
-msgid "%{verb} %{time_spent_value} spent time."
+msgid "%{username}'s avatar"
msgstr ""
+msgid "%{value} ms"
+msgstr ""
+
+msgid "%{verb} %{time_spent_value} spent time."
+msgstr "%{verb} ã—㦠%{time_spent_value} ãŒçµŒéŽã—ã¾ã—ãŸã€‚"
+
msgid "'%{level}' is not a valid visibility level"
msgstr "'%{level}' ã¯æœ‰åŠ¹ãªå¯è¦–レベルã§ã¯ã‚ã‚Šã¾ã›ã‚“"
msgid "'%{source}' is not a import source"
msgstr "'%{source}' ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚½ãƒ¼ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
+msgstr[0] "(%d 個ã®ã‚¯ãƒ­ãƒ¼ã‚º)"
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} 個ã®ãƒžãƒ¼ã‚¸æ¸ˆã¿)"
msgid "(No changes)"
msgstr "(変更ãªã—)"
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr "(進行状æ³ã‚’確èªã™ã‚‹)"
msgid "(external source)"
msgstr "(外部ソース)"
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "%{count} 以上"
msgid "+ %{moreCount} more"
msgstr "+ 他 %{moreCount} 件"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr "+%{extraOptionCount} 以上"
@@ -402,11 +484,8 @@ msgstr "貢献 20-29 件"
msgid "2FA"
msgstr "2FA"
-msgid "2FA enabled"
-msgstr "2段階èªè¨¼ãŒæœ‰åŠ¹"
-
msgid "2FADevice|Registered On"
-msgstr ""
+msgstr "登録済ã¿"
msgid "3 days"
msgstr "3 æ—¥"
@@ -451,7 +530,10 @@ msgid "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> will ad
msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> ã¯ã€johnsmith@example.com ãŒä½œæˆã—ãŸå…¨ã¦ã®èª²é¡Œã¨ã‚³ãƒ¡ãƒ³ãƒˆã« \"By <a href=\"#\">johnsmith@example.com</a>\" を追加ã—ã¾ã™ã€‚デフォルトã§ã€ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚„ユーザーåã‚’éš ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ライãƒã‚·ãƒ¼ã‚’ä¿è­·ã•ã‚Œã¾ã™ã€‚メールアドレスを全ã¦è¡¨ç¤ºã—ãŸã„å ´åˆã€ã“ã®æ–¹æ³•ã‚’指定ã—ã¦ãã ã•ã„。"
msgid "<no name set>"
-msgstr ""
+msgstr "<no name set>"
+
+msgid "<no scopes selected>"
+msgstr "<スコープãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“>"
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>ステージã•ã‚Œã¦ã„ãªã„変更 %{changedFilesLength} </strong> ã¨<strong>ステージã•ã‚ŒãŸå¤‰æ›´ %{stagedFilesLength} </strong>"
@@ -489,6 +571,9 @@ msgstr "GitLab ã®ä»£ã‚ã‚Šã« Netlify for CI/CD を使用ã—ã¦ã„ã‚‹ Hugo サã
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "GitLab ã®ä»£ã‚ã‚Šã« Netlify for CI/CD を使用ã—ã¦ã„ã‚‹ Jekyll サイトã§ã™ãŒã€GitLab ã«ã¯ãªã„優れãŸæ©Ÿèƒ½ã‚‚å‚™ãˆã¦ã„ã¾ã™ã€‚"
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr "Let's Encryptアカウントをã“ã®GitLabインストール用ã«æ§‹æˆã™ã‚‹ãŸã‚ã«ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’使用ã—ã¾ã™ã€‚証明書ã®æœŸé™ãŒåˆ‡ã‚ŒãŸéš›ã€è­¦å‘Šãƒ¡ãƒ¼ãƒ«ãŒå±Šãã¾ã™ã€‚"
@@ -502,7 +587,7 @@ msgid "A fork is a copy of a project.<br />Forking a repository allows you to ma
msgstr "フォークã¯ãƒ—ロジェクトã®ã‚³ãƒ”ーã§ã™ã€‚<br />リãƒã‚¸ãƒˆãƒªã‚’フォークã™ã‚‹ã¨ã€å…ƒã®ãƒ—ロジェクトã«å½±éŸ¿ã‚’与ãˆãšã«å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
msgid "A member of the abuse team will review your report as soon as possible."
-msgstr ""
+msgstr "ãŸã ã¡ã«ä¸æ­£åˆ©ç”¨å¯¾å¿œãƒãƒ¼ãƒ ãƒ¡ãƒ³ãƒãƒ¼ã§ã„ãŸã ã„ãŸãƒ¬ãƒãƒ¼ãƒˆã‚’æ‹èª­ã—å‚考ã«ã•ã›ã¦ã„ãŸã ãã¾ã™ã€‚"
msgid "A new branch will be created in your fork and a new merge request will be started."
msgstr "フォークã«æ–°ã—ã„ブランãƒãŒä½œæˆã•ã‚Œã€æ–°ã—ã„マージリクエストãŒé–‹å§‹ã—ã¾ã™ã€‚"
@@ -525,6 +610,9 @@ msgstr "iOS Swift アプリã§ã™ãã«ä½¿ãˆã‚‹ãƒ†ãƒ³ãƒ—レート。"
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "ジョブトレースã§ãƒ†ã‚¹ãƒˆã‚«ãƒãƒ¬ãƒƒã‚¸ã®çµæžœã‚’見ã¤ã‘ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹æ­£è¦è¡¨ç¾ã§ã™ã€‚無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "ã“ã®ã‚ªãƒ—ションをé¸æŠžã—ãŸã‚½ãƒ¼ã‚¹ãƒ–ランãƒã¸ã®æ›¸ãè¾¼ã¿ã‚’許å¯ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼"
@@ -534,6 +622,9 @@ msgstr "API ヘルプ"
msgid "API Token"
msgstr "API トークン"
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr "GitLab ã«ã¤ã„ã¦"
@@ -580,14 +671,74 @@ msgid "Access to '%{classification_label}' not allowed"
msgstr "'%{classification_label}'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
msgid "AccessDropdown|Groups"
-msgstr ""
+msgstr "グループ"
msgid "AccessDropdown|Roles"
-msgstr ""
+msgstr "役割"
msgid "AccessDropdown|Users"
+msgstr "ユーザー"
+
+msgid "AccessTokens|Access Tokens"
+msgstr "アクセストークン"
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿç¾åœ¨ä½¿ç”¨ã—ã¦ã„ã‚‹RSSã¾ãŸã¯ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®URLã¯æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚"
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr "本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿç¾åœ¨ä½¿ç”¨ã—ã¦ã„る課題メールアドレスã¯æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚"
+
+msgid "AccessTokens|Created"
+msgstr "作æˆæ¸ˆã¿"
+
+msgid "AccessTokens|Feed token"
+msgstr "フィードトークン"
+
+msgid "AccessTokens|Incoming email token"
+msgstr "å—信メールトークン"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "ä»–ã®ãƒ‡ãƒ¼ã‚¿ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "ã“ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’外部ã«æ¼ã‚‰ã•ãªã„ã§ãã ã•ã„。ã“れを知ã£ãŸäººã¯èª°ã§ã‚‚ã‚ãªãŸã«ãªã‚Šã™ã¾ã—ã¦èª²é¡Œã‚’作æˆã§ãã¾ã™ã€‚æ¼æ´©ã—ãŸå ´åˆã€%{link_reset_it} ã™ã¹ãã§ã™ã€‚"
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "ã“ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’外部ã«æ¼ã‚‰ã•ãªã„ã§ãã ã•ã„。ã“れを知ã£ãŸäººã¯èª°ã§ã‚‚ã‚ãªãŸã®ã‚ˆã†ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを読ã‚ã€ã‚ãªãŸã¨ã—ã¦RSSフィードやカレンダーã®ãƒ•ã‚£ãƒ¼ãƒ‰ã‚’発行ã§ãã¾ã™ã€‚æ¼æ´©ã—ãŸå ´åˆã€%{link_reset_it} ã™ã¹ãã§ã™ã€‚"
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr "パーソナルアクセストークン"
+
+msgid "AccessTokens|Static object token"
msgstr ""
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr "2è¦ç´ èªè¨¼(2FA) ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã“ã‚Œã¯å”¯ä¸€ã®æ‰¿èªæ¸ˆã¿ãƒ‘スワードã§ã™ã€‚"
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr "パーソナルアクセストークンを使用ã—ã¦Git over HTTPã«å¯¾ã—ã¦èªè¨¼ã§ãã¾ã™ã€‚"
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr "GitLab APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚るアプリケーションã”ã¨ã«ã€ãƒ‘ーソナルアクセストークンを生æˆã§ãã¾ã™ã€‚"
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr "RSSリーダーãŒå€‹äººç”¨RSSフィードを読ã¿è¾¼ã‚€ã¨ãã€ã¾ãŸã¯ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚¢ãƒ—リケーションãŒå€‹äººç”¨ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚’読ã¿è¾¼ã‚€ã¨ãã«ã€ãƒ•ã‚£ãƒ¼ãƒ‰ãƒˆãƒ¼ã‚¯ãƒ³ã‚’使用ã—ã¦ã‚ãªãŸã‚’èªè¨¼ã—ã¾ã™ã€‚"
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr "ã‚ãªãŸã®å—信メールトークンã¯ã‚ãªãŸãŒãƒ¡ãƒ¼ãƒ«ã§æ–°ã—ã„課題を作æˆã™ã‚‹ã¨ãã‚ãªãŸã‚’èªè¨¼ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚ã¾ãŸã€ã‚ãªãŸã®å€‹äººçš„ãªãƒ—ロジェクト特有ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr "リセット"
+
msgid "Account"
msgstr "アカウント"
@@ -595,7 +746,7 @@ msgid "Account and limit"
msgstr "アカウントã¨åˆ¶é™"
msgid "Account: %{account}"
-msgstr ""
+msgstr "アカウント: %{account}"
msgid "Action to take when receiving an alert."
msgstr "アラートをå—ä¿¡ã—ãŸéš›ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³"
@@ -606,6 +757,9 @@ msgstr "サービスデスクを有効ã«ã™ã‚‹"
msgid "Active"
msgstr "有効"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr "有効 %{type} トークン(%{token_length})"
+
msgid "Active Sessions"
msgstr "アクティブ セッション"
@@ -615,12 +769,19 @@ msgstr "アクティビティー"
msgid "Add"
msgstr "追加"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] "課題を%d 件ã€è¿½åŠ "
+
msgid "Add CHANGELOG"
msgstr "変更履歴を追加"
msgid "Add CONTRIBUTING"
msgstr "CONTRIBUTINGを追加"
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "グループ Webhooks 㨠GitLab ã®ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズ版を追加ã—ã¾ã™ã€‚"
@@ -633,12 +794,27 @@ msgstr "Kubernetes クラスターを追加"
msgid "Add README"
msgstr "README を追加"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr "%{type} ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’追加"
+
msgid "Add a GPG key"
msgstr "GPGキーを追加"
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr "箇æ¡æ›¸ãリストを追加"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "ã“ã® %{noteable_name} ã«ã¤ã„ã¦å¤§ã¾ã‹ãªã‚³ãƒ¡ãƒ³ãƒˆã‚’追加"
@@ -657,9 +833,6 @@ msgstr "テーブルを追加ã™ã‚‹"
msgid "Add a task list"
msgstr "タスクリストを追加"
-msgid "Add a todo"
-msgstr "Todo を追加"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "ã™ã¹ã¦ã®ãƒ¡ãƒ¼ãƒ«ã«è¡¨ç¤ºã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã—ã¾ã™ã€‚ ãŸã ã—ã€%{character_limit} 文字ã®åˆ¶é™ãŒã‚ã‚Šã¾ã™ã€‚"
@@ -667,6 +840,9 @@ msgid "Add an SSH key"
msgstr "SSH éµã‚’追加"
msgid "Add an issue"
+msgstr "課題追加"
+
+msgid "Add approval rule"
msgstr ""
msgid "Add approvers"
@@ -682,7 +858,7 @@ msgid "Add comment now"
msgstr "コメントã™ã‚‹"
msgid "Add email address"
-msgstr ""
+msgstr "メールアドレス追加"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
msgstr "メールã«ãƒ˜ãƒƒãƒ€ãƒ¼ã¨ãƒ•ãƒƒã‚¿ãƒ¼ã‚’追加ã—ã¾ã™ã€‚色設定ã¯ã‚¢ãƒ—リケーションインターフェース内ã§ã®ã¿é©ç”¨ã•ã‚Œã¾ã™ã€‚"
@@ -690,6 +866,9 @@ msgstr "メールã«ãƒ˜ãƒƒãƒ€ãƒ¼ã¨ãƒ•ãƒƒã‚¿ãƒ¼ã‚’追加ã—ã¾ã™ã€‚色設定ã¯
msgid "Add image comment"
msgstr "ç”»åƒã‚³ãƒ¡ãƒ³ãƒˆã‚’追加"
+msgid "Add issues"
+msgstr "課題を追加"
+
msgid "Add italic text"
msgstr "斜体ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’追加"
@@ -708,26 +887,35 @@ msgstr "æ–°ã—ã„アプリケーションを追加"
msgid "Add new directory"
msgstr "æ–°è¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’追加"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr "作業時間を追加ã¾ãŸã¯æ¸›ã‚‰ã™"
msgid "Add reaction"
msgstr "リアクションã®è¿½åŠ "
-msgid "Add to merge train"
+msgid "Add to Slack"
msgstr ""
-msgid "Add to merge train when pipeline succeeds"
+msgid "Add to epic"
msgstr ""
+msgid "Add to merge train"
+msgstr "マージトレインã«è¿½åŠ "
+
+msgid "Add to merge train when pipeline succeeds"
+msgstr "パイプラインãŒæˆåŠŸã—ãŸã¨ãã«ãƒžãƒ¼ã‚¸ãƒˆãƒ¬ã‚¤ãƒ³ã«è¿½åŠ "
+
msgid "Add to project"
msgstr "プロジェクトã«è¿½åŠ "
msgid "Add to review"
msgstr "レビュー追加"
-msgid "Add todo"
-msgstr "Todoを追加"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "グループã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追加:"
@@ -741,14 +929,32 @@ msgstr "ユーザーãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "ユーザーãŒå¤šã指定ã—ã™ãŽã¦ã„ã¾ã™ã€‚(上é™ã¯ %{user_limit})"
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
+msgstr "追加日時: "
+
+msgid "Added in this version"
msgstr ""
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "ã‚ãªãŸã® GitLab インスタンスã§æ–°ã—ã„アプリケーションを追加ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。権é™ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€GitLab 管ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。"
msgid "Additional minutes"
-msgstr ""
+msgstr "追加分数"
msgid "Additional text"
msgstr "追加テキスト"
@@ -757,10 +963,19 @@ msgid "Adds"
msgstr "追加"
msgid "Adds %{epic_ref} as child epic."
+msgstr "%{epic_ref} ã‚’å­ã‚¨ãƒ”ックã¨ã—ã¦è¿½åŠ "
+
+msgid "Adds %{labels} %{label_text}."
msgstr ""
-msgid "Adds a todo."
-msgstr "Todoを追加ã—ã¾ã™ã€‚"
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "管ç†è€…エリア"
@@ -772,7 +987,7 @@ msgid "Admin Section"
msgstr "管ç†ã‚»ã‚¯ã‚·ãƒ§ãƒ³"
msgid "Admin notes"
-msgstr ""
+msgstr "管ç†è€…メモ"
msgid "AdminArea| You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide \"Ghost-user\". To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
msgstr "%{username}を完全ã«å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç´ä»˜ã„ã¦ã„ã‚‹ã€èª²é¡Œã€ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã€ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã€ã‚·ã‚¹ãƒ†ãƒ å…¨ä½“ã®ã€ŒGhost-userã€ã«è»¢é€ã•ã‚Œã¾ã™ã€‚データã®æ¶ˆå¤±ã‚’é¿ã‘ã‚‹ã«ã¯ã€å‰Šé™¤ã§ã¯ãªã%{strong_start} ユーザーã®ãƒ–ロック機能%{strong_end}を使用ã—ã¦ãã ã•ã„。一度%{strong_start}ユーザーã®å‰Šé™¤ %{strong_end}を実行ã™ã‚‹ã¨å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
@@ -795,9 +1010,12 @@ msgstr "ジョブã®åœæ­¢ã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "å…¨ã¦ã®ã‚¸ãƒ§ãƒ–ã‚’åœæ­¢ã—ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šç¾åœ¨å®Ÿè¡Œä¸­ã®ã‚¸ãƒ§ãƒ–ã¯åœæ­¢ã•ã‚Œã¾ã™ã€‚"
-msgid "AdminNote|Note"
+msgid "AdminDashboard|Error loading the statistics. Please try again"
msgstr ""
+msgid "AdminNote|Note"
+msgstr "備考"
+
msgid "AdminProjects| You’re about to permanently delete the project %{projectName}, its repository, and all related resources including issues, merge requests, etc.. Once you confirm and press %{strong_start}Delete project%{strong_end}, it cannot be undone or recovered."
msgstr "プロジェクト %{projectName} ã¨ãã®ãƒªãƒã‚¸ãƒˆãƒªã€èª²é¡Œã€ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆãªã©ã®ã™ã¹ã¦ã®é–¢é€£ãƒªã‚½ãƒ¼ã‚¹ã‚’完全ã«å‰Šé™¤ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã„ã¾ä¸€åº¦ç¢ºèªã—〠%{strong_start}プロジェクトã®å‰Šé™¤%{strong_end}を押ã—ã¦ãã ã•ã„。削除ã—ãŸã‚ã¨ã€å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
@@ -820,29 +1038,53 @@ msgid "AdminSettings|Environment variables are protected by default"
msgstr "環境変数ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ä¿è­·ã•ã‚Œã¦ã„ã¾ã™"
msgid "AdminSettings|No required pipeline"
-msgstr ""
+msgstr "必須パイプラインãªã—"
msgid "AdminSettings|Required pipeline configuration"
-msgstr ""
+msgstr "管ç†è¨­å®š |必須パイプライン設定"
msgid "AdminSettings|Select a pipeline configuration file"
-msgstr ""
+msgstr "パイプライン構æˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž"
msgid "AdminSettings|Select a template"
-msgstr ""
+msgstr "管ç†è¨­å®š |テンプレートé¸æŠž"
msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
-msgstr ""
+msgstr "インスタンス全体ã«è‡ªå‹•èª­ã¿è¾¼ã¿ã•ã‚Œã‚‹ %{link_start}パイプライン設定%{link_end} を設定ã—ã¾ã™ã€‚ã“ã®ãƒ‘イプライン設定ã¯ãƒ—ロジェクト独自ã®è¨­å®šã®å¾Œã«å®Ÿè¡Œã•ã‚Œã¾ã™ã€‚"
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
msgstr "ã™ã¹ã¦ã®ãƒ—ロジェクトã®Auto Review AppsãŠã‚ˆã³Auto Deployステージã§ä½¿ç”¨ã™ã‚‹ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’指定ã—ã¾ã™ã€‚"
msgid "AdminSettings|The required pipeline configuration can be selected from the %{code_start}gitlab-ci%{code_end} directory inside of the configured %{link_start}instance template repository%{link_end} or from GitLab provided configurations."
-msgstr ""
+msgstr "必須パイプライン設定ã¯ã€è¨­å®šæ¸ˆã¿ã®%{link_start}インスタンステンプレートリãƒã‚¸ãƒˆãƒª%{link_end}内㮠%{code_start}gitlab-ci%{code_end} ディレクトリã€ã¾ãŸã¯ GitLab æä¾›ã®è¨­å®šã‹ã‚‰é¸æŠžã§ãã¾ã™ã€‚"
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "環境変数ã®æ–°è¦ä½œæˆæ™‚ã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ä¿è­·ã•ã‚Œã¾ã™"
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "2FA 無効"
@@ -931,12 +1173,18 @@ msgid "After a successful password update you will be redirected to login screen
msgstr "パスワードã®æ›´æ–°ã«æˆåŠŸã™ã‚‹ã¨ã€ãƒ­ã‚°ã‚¤ãƒ³ç”»é¢ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã¾ã™ã€‚"
msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
-msgstr ""
+msgstr "パスワードを正常ã«æ›´æ–°ã—ãŸå¾Œã€ãƒ­ã‚°ã‚¤ãƒ³ãƒšãƒ¼ã‚¸ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã‚‹ã®ã§ã€ãã“ã§æ–°ã—ã„パスワードã§ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã™ã€‚"
msgid "Alert"
msgid_plural "Alerts"
msgstr[0] "アラート"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "アラート"
@@ -946,17 +1194,23 @@ msgstr "ã™ã¹ã¦"
msgid "All Members"
msgstr "ã™ã¹ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "ã™ã¹ã¦ã®å¤‰æ›´ãŒã‚³ãƒŸãƒƒãƒˆã•ã‚Œã¦ã„ã¾ã™"
-msgid "All email addresses will be used to identify your commits."
+msgid "All cross-project dependencies have merged"
msgstr ""
+msgid "All email addresses will be used to identify your commits."
+msgstr "ã™ã¹ã¦ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã‚ãªãŸã®ã‚³ãƒŸãƒƒãƒˆã‚’識別ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
msgstr "空ã®ãƒ—ロジェクトã€ãƒ†ãƒ³ãƒ—レートã‹ã‚‰ã€ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆæ™‚ã«ã™ã¹ã¦ã®æ©Ÿèƒ½ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã™ãŒã€å¾Œã§ãƒ—ロジェクト設定ã§ç„¡åŠ¹ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
msgid "All groups and projects"
-msgstr ""
+msgstr "全グループã¨ãƒ—ロジェクト"
msgid "All issues for this milestone are closed. You may close this milestone now."
msgstr "ã“ã®ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³ã«é–¢ã™ã‚‹èª²é¡Œã¯ã™ã¹ã¦è§£æ±ºã•ã‚Œã¾ã—ãŸã€‚ã“ã®ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³ã‚’クローズã§ãã¾ã™ã€‚"
@@ -967,9 +1221,6 @@ msgstr "ã™ã¹ã¦ã®ç«¶åˆãŒè§£æ±ºã•ã‚Œã¾ã—ãŸã€‚マージリクエストを
msgid "All projects"
msgstr "ã™ã¹ã¦ã®ãƒ—ロジェクト"
-msgid "All todos were marked as done."
-msgstr "ã™ã¹ã¦ã®TodoãŒå®Œäº†ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•ã‚Œã¾ã—ãŸã€‚"
-
msgid "All users"
msgstr "ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼"
@@ -1003,6 +1254,12 @@ msgstr "Asciidocドキュメントã§ã®PlantUML図ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚’許å
msgid "Allow requests to the local network from hooks and services."
msgstr "フックãŠã‚ˆã³ã‚µãƒ¼ãƒ“スã‹ã‚‰ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’許å¯ã™ã‚‹ã€‚"
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr "ã“ã®ã‚­ãƒ¼ã‚‚リãƒã‚¸ãƒˆãƒªã«ãƒ—ッシュã§ãるよã†ã«ã—ã¾ã™ã‹ï¼Ÿ (デフォルトã¯ãƒ—ルアクセスã®ã¿ã‚’許å¯ã—ã¾ã™)"
@@ -1015,6 +1272,9 @@ msgstr "ユーザーãŒã‚¢ã‚¯ã‚»ã‚¹ã‚’è¦æ±‚ã§ãるよã†ã«ã™ã‚‹"
msgid "Allow users to request access if visibility is public or internal."
msgstr "å¯è¦–性ãŒå…¬é–‹ã¾ãŸã¯å†…部ã®å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ã‚¯ã‚»ã‚¹ã‚’è¦æ±‚ã§ãるよã†ã«ã—ã¾ã™ã€‚"
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "失敗を許容"
@@ -1027,14 +1287,8 @@ msgstr "\"Issuer\" ã¾ãŸã¯ \"Relying party trust identifier\" ã¨ã‚‚呼ã°ã‚Œã
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "\"Relying party service URL\" ã¾ãŸã¯ \"Reply URL\" ã¨ã‚‚呼ã°ã‚Œã¾ã™"
-msgid "Alternate support URL for help page"
-msgstr "ヘルプページã®åˆ¥ã®ã‚µãƒãƒ¼ãƒˆURL"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "ã‚ã‚‹ã„ã¯ã€ %{personal_access_token_link} を使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚パーソナルアクセストークンを作æˆã™ã‚‹éš›ã«ã€<code>repo</code> スコープをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€æŽ¥ç¶šå¯èƒ½ãªå…¬é–‹ãƒªãƒã‚¸ãƒˆãƒªã¨ãƒ—ライベートリãƒã‚¸ãƒˆãƒªã®ä¸€è¦§ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "ã‚ã‚‹ã„ã¯ã€ %{personal_access_token_link} を使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚パーソナルアクセストークンを作æˆã™ã‚‹éš›ã«ã€<code>repo</code>スコープをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãるパブリックリãƒã‚¸ãƒˆãƒªã¨ãƒ—ライベートリãƒã‚¸ãƒˆãƒªã®ä¸€è¦§ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "ユーザーãŒå¼·åˆ¶çš„ãª2è¦ç´ èªè¨¼ã‚’無視ã§ãる時間(時間å˜ä½)"
@@ -1048,8 +1302,8 @@ msgstr "GitLab ユーザフィールドãŒç©ºã®å ´åˆã€ã™ã¹ã¦ã®å•é¡Œã¨ã‚
msgid "An error has occurred"
msgstr "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "ディスカッションã«ä¸‹æ›¸ãを追加ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "æ–°ã—ã„ドラフトã®è¿½åŠ ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
@@ -1103,9 +1357,12 @@ msgid "An error occurred while enabling Service Desk."
msgstr "サービスデスクã®æœ‰åŠ¹åŒ–中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
msgid "An error occurred while fetching environments."
-msgstr ""
+msgstr "環境ã®çŠ¶æ…‹å–å¾—ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
msgid "An error occurred while fetching folder content."
+msgstr "フォルダã®ä¸­èº«ã®å–å¾—ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+msgid "An error occurred while fetching issues."
msgstr ""
msgid "An error occurred while fetching label colors."
@@ -1150,6 +1407,9 @@ msgstr "リリースã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦
msgid "An error occurred while fetching this tab."
msgstr "ã“ã®ã‚¿ãƒ–ã®ãƒ•ã‚§ãƒƒãƒä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "プロジェクトã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
@@ -1195,12 +1455,12 @@ msgstr "エピックã®å‰Šé™¤ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
msgid "An error occurred while removing issues."
msgstr "課題ã®å‰Šé™¤ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-msgid "An error occurred while rendering KaTeX"
-msgstr "KaTeXã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "プレビュー時ã®ãƒ–ロードキャストメッセージをレンダリングã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "カレンダーアクティビティーå–å¾—ã®éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
@@ -1219,6 +1479,12 @@ msgstr "承èªè¨­å®šã®ä¿å­˜ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
msgid "An error occurred while subscribing to notifications."
msgstr "通知ã®è³¼èª­ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "通知ã®è³¼èª­ã‚’解除中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
@@ -1241,7 +1507,7 @@ msgid "An error occurred whilst fetching the latest pipeline."
msgstr "最新ã®ãƒ‘イプラインã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
msgid "An error occurred whilst getting files for - %{branchId}"
-msgstr ""
+msgstr "%{branchId} ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
msgid "An error occurred whilst loading all the files."
msgstr "ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­è¾¼ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
@@ -1267,6 +1533,9 @@ msgstr "パイプラインジョブã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—
msgid "An error occurred. Please try again."
msgstr "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚å†åº¦ãŠè©¦ã—ãã ã•ã„。"
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr "課題ã¯ã€ãƒ—ロジェクトã§è­°è«–ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãƒã‚°ã€todoã€ã¾ãŸã¯æ©Ÿèƒ½ãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ãã®ä¸Šã€èª²é¡Œã¯æ¤œç´¢ã§ãã€ãƒ•ã‚£ãƒ«ã‚¿ã§ãã¾ã™ã€‚"
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "プロジェクト環境ã®ç¢ºèªä¸­ã«äºˆæœŸã—ãªã„エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
@@ -1285,6 +1554,9 @@ msgstr "Web ターミナルã®åœæ­¢ä¸­ã«äºˆæœŸã—ãªã„エラーãŒç™ºç”Ÿã—ã
msgid "Analytics"
msgstr "アクセス解æž"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr "祖先"
@@ -1301,7 +1573,7 @@ msgid "Any Label"
msgstr "ä»»æ„ã®ãƒ©ãƒ™ãƒ«"
msgid "Any Milestone"
-msgstr ""
+msgstr "ä»»æ„ã®ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³"
msgid "Any encrypted tokens"
msgstr "æš—å·åŒ–済ã¿ãƒˆãƒ¼ã‚¯ãƒ³"
@@ -1309,6 +1581,9 @@ msgstr "æš—å·åŒ–済ã¿ãƒˆãƒ¼ã‚¯ãƒ³"
msgid "Any namespace"
msgstr "ä»»æ„ã®ãƒãƒ¼ãƒ ã‚¹ãƒšãƒ¼ã‚¹"
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "外観"
@@ -1351,6 +1626,9 @@ msgstr "アプリケーション"
msgid "Applied"
msgstr "é©ç”¨æ¸ˆã¿"
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr "æ案をé©ç”¨"
@@ -1388,8 +1666,8 @@ msgstr[0] "%{membersCount} åã®ã†ã¡ %{count} åã‹ã‚‰ã®æ‰¿èªãŒå¿…è¦"
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr "開発者ã¾ãŸã¯ãれ以上ã®å½¹å‰²ã‚’ã‚‚ã¤å…¨ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼ãŠã‚ˆã³ã‚³ãƒ¼ãƒ‰æ‰€æœ‰è€…ã®ãƒ¡ãƒ³ãƒãƒ¼"
-msgid "ApprovalRule|Members"
-msgstr "メンãƒãƒ¼"
+msgid "ApprovalRule|Approvers"
+msgstr ""
msgid "ApprovalRule|Name"
msgstr "åå‰"
@@ -1397,12 +1675,27 @@ msgstr "åå‰"
msgid "ApprovalRule|No. approvals required"
msgstr "ã„ã„ãˆã€‚承èªãŒå¿…è¦ã§ã™ã€‚"
-msgid "ApprovalRule|e.g. QA, Security, etc."
+msgid "ApprovalRule|Rule name"
msgstr ""
+msgid "ApprovalRule|e.g. QA, Security, etc."
+msgstr "例:QAã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãªã©"
+
msgid "Approvals"
msgstr "承èª"
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "4月"
@@ -1422,7 +1715,7 @@ msgid "Archived projects"
msgstr "アーカイブã•ã‚ŒãŸãƒ—ロジェクト"
msgid "Archiving the project will make it entirely read-only. It is hidden from the dashboard and doesn't show up in searches. <strong>The repository cannot be committed to, and no issues, comments or other entities can be created.</strong>"
-msgstr ""
+msgstr "プロジェクトをアーカイブã«ã™ã‚‹ã¨ã€ãƒ—ロジェクトã¯å®Œå…¨ã«èª­ã¿å–り専用ã«ãªã‚Šã¾ã™ã€‚ ã¾ãŸã€ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ã«ã¯è¡¨ç¤ºã•ã‚Œãšã€æ¤œç´¢ã§ã‚‚表示ã•ã‚Œã¾ã›ã‚“。 <strong>ã“ã®ãƒªãƒã‚¸ãƒˆãƒªã«ã¯ã‚³ãƒŸãƒƒãƒˆã§ãã¾ã›ã‚“ã—ã€èª²é¡Œã‚„コメントã¾ãŸä»–ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ã‚’作æˆã§ãã¾ã›ã‚“。</strong>"
msgid "Are you sure"
msgstr "よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
@@ -1439,9 +1732,18 @@ msgstr "ã“ã®ã‚³ãƒ¡ãƒ³ãƒˆã®ä½œæˆã‚’キャンセルã—ã¦ã‚‚よã‚ã—ã„ã§ã™
msgid "Are you sure you want to cancel editing this comment?"
msgstr "ã“ã®ã‚³ãƒ¡ãƒ³ãƒˆã®ç·¨é›†ã‚’キャンセルã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
-msgid "Are you sure you want to delete this device? This action cannot be undone."
+msgid "Are you sure you want to delete these artifacts?"
msgstr ""
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
+msgid "Are you sure you want to delete this device? This action cannot be undone."
+msgstr "本当ã«ã€ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹? ã“ã®æ“作ã¯å…ƒã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
msgid "Are you sure you want to delete this list?"
msgstr "本当ã«ã“ã®ãƒªã‚¹ãƒˆã‚’消去ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?"
@@ -1481,8 +1783,11 @@ msgstr "本当ã«SCIMトークンをリセットã—ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿæ–
msgid "Are you sure you want to reset the health check token?"
msgstr "本当ã«ãƒ˜ãƒ«ã‚¹ãƒã‚§ãƒƒã‚¯ãƒˆãƒ¼ã‚¯ãƒ³ã‚’リセットã—ã¾ã™ã‹ï¼Ÿ"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr "本当ã«ã€ã“ã® %{type} トークンを無効ã«ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹? ã“ã®æ“作ã¯å…ƒã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
msgid "Are you sure you want to revoke this nickname?"
-msgstr ""
+msgstr "ã“ã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã‚’å–り消ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
msgid "Are you sure you want to stop this environment?"
msgstr "ã“ã®ç’°å¢ƒã‚’åœæ­¢ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
@@ -1497,25 +1802,31 @@ msgid "Are you sure?"
msgstr "本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
msgid "Are you sure? All commits that were signed with this GPG key will be unverified."
-msgstr ""
+msgstr "ã“ã®GPGキーã§ç½²åã•ã‚ŒãŸã™ã¹ã¦ã®ã‚³ãƒŸãƒƒãƒˆã¯æ¤œè¨¼ã•ã‚Œã¾ã›ã‚“。本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
msgid "Are you sure? Removing this GPG key does not affect already signed commits."
-msgstr ""
+msgstr "本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿã“ã®GPGキーを削除ã—ã¦ã‚‚ã€ã™ã§ã«ç½²åã•ã‚Œã¦ã„るコミットã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。"
msgid "Are you sure? This will invalidate your registered applications and U2F devices."
-msgstr ""
+msgstr "本当ã«å®Ÿè¡Œã—ã¾ã™ã‹? ã“ã‚Œã¯ç™»éŒ²ã•ã‚ŒãŸã‚¢ãƒ—リケーション㨠U2Fデãƒã‚¤ã‚¹ã‚’無効ã«ã—ã¾ã™ã€‚"
msgid "Artifact ID"
msgstr "アーティファクト ID"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "アーティファクト"
msgid "As U2F devices are only supported by a few browsers, we require that you set up a two-factor authentication app before a U2F device. That way you'll always be able to log in - even when you're using an unsupported browser."
-msgstr ""
+msgstr "U2Fデãƒã‚¤ã‚¹ã¯ã„ãã¤ã‹ã®ãƒ–ラウザã§ã—ã‹ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„ãŸã‚ã€U2Fデãƒã‚¤ã‚¹ã®å‰ã«2è¦ç´ èªè¨¼ã‚¢ãƒ—リを設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ ãã†ã™ã‚Œã°ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„ブラウザを使用ã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€å¸¸ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚"
msgid "AsanaService|%{user} pushed to branch %{branch} of %{project_name} ( %{commit_url} ):"
-msgstr ""
+msgstr "%{user} ㌠%{project_name} ã®ãƒ–ランム%{branch} ã«ãƒ—ッシュã—ã¾ã—ãŸï¼ˆ%{commit_url}):"
msgid "AsanaService|Asana - Teamwork without email"
msgstr "Asana - Eメールã®ãªã„ãƒãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯"
@@ -1544,6 +1855,9 @@ msgstr "割り当ã¦"
msgid "Assign custom color like #FF0000"
msgstr "#FF0000ã®ã‚ˆã†ãªã‚«ã‚¹ã‚¿ãƒ ã‚«ãƒ©ãƒ¼ã‚’割り当ã¦ã‚‹"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "ラベルを割り当ã¦ã‚‹"
@@ -1562,6 +1876,9 @@ msgstr "ã“れらã®èª²é¡Œã‚’自分ã«å‰²ã‚Šå½“ã¦ã¾ã™"
msgid "Assign yourself to this issue"
msgstr "ã“ã®èª²é¡Œã‚’自分ã«å‰²ã‚Šå½“ã¦ã¾ã™"
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "割り当ã¦ã‚‰ã‚ŒãŸèª²é¡Œ"
@@ -1572,7 +1889,8 @@ msgid "Assigned to me"
msgstr "自分ã«å‰²ã‚Šå½“ã¦ã‚‹"
msgid "Assignee"
-msgstr "担当者"
+msgid_plural "%d Assignees"
+msgstr[0] ""
msgid "Assignee lists not available with your current license"
msgstr "ç¾åœ¨ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã§ã¯æ‹…当者リストを利用ã§ãã¾ã›ã‚“"
@@ -1583,6 +1901,9 @@ msgstr "担当者一覧ã«ã¯ã€é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦
msgid "Assignee(s)"
msgstr "担当者"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr "ãã‚Œãžã‚Œã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’変更ã™ã‚‹ã«ã¯ã€CODEOWNERã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ã€å°‘ãªãã¨ã‚‚1åã®ã‚³ãƒ¼ãƒ‰æ‰€æœ‰è€…ã‹ã‚‰ã®æ‰¿èªãŒå¿…è¦ã§ã™ã€‚"
@@ -1594,7 +1915,7 @@ msgstr "ドラッグ&ドロップã¾ãŸã¯ %{upload_link} ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ·
msgid "Attaching a file"
msgid_plural "Attaching %d files"
-msgstr[0] ""
+msgstr[0] "%d 個ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’添付"
msgid "Attaching the file failed."
msgstr "ファイルã®æ·»ä»˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
@@ -1602,12 +1923,21 @@ msgstr "ファイルã®æ·»ä»˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
msgid "Audit Events"
msgstr "監査イベント"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "8月"
msgid "August"
msgstr "8月"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "èªè¨¼ãƒ­ã‚°"
@@ -1648,7 +1978,7 @@ msgid "Authorized %{new_chat_name}"
msgstr "%{new_chat_name} ãŒæ‰¿èªã•ã‚Œã¾ã—ãŸ"
msgid "Authorized At"
-msgstr ""
+msgstr "èªè¨¼æ—¥æ™‚"
msgid "Authorized applications (%{size})"
msgstr "承èªã•ã‚ŒãŸã‚¢ãƒ—リケーション(%{size})"
@@ -1665,6 +1995,9 @@ msgstr "Auto DevOps ãŒæœ‰åŠ¹ã§ã™"
msgid "Auto DevOps, runners and job artifacts"
msgstr "Auto DevOps, Runner,ãŠã‚ˆã³æˆæžœç‰©"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "冗長・ä¿ç•™ä¸­ã®ãƒ‘イプラインを自動キャンセル"
@@ -1686,11 +2019,23 @@ msgstr "詳ã—ãã¯ã€ %{link_to_documentation} を見ã¦ãã ã•ã„。"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Auto DevOpsã®ãƒ‘イプラインãŒæœ‰åŠ¹ã«ãªã£ã¦ãŠã‚Šã€ä»£æ›¿ã®CIã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã€‚ %{more_information_link}"
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
msgid "Automatic certificate management using Let's Encrypt"
-msgstr ""
+msgstr "Let's Encryptを用ã„ãŸè‡ªå‹•è¨¼æ˜Žæ›¸ç®¡ç†"
msgid "Automatically marked as default internal user"
msgstr "自動的ã«ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®å†…部ユーザーã¨ã—ã¦ãƒžãƒ¼ã‚¯ã—ã¾ã—ãŸã€‚"
@@ -1866,32 +2211,32 @@ msgstr "以下ã«å…¬é–‹ã•ã‚Œã¦ã„る全グループを表示ã—ã¾ã™ã€‚"
msgid "Billing"
msgstr "請求"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} ã®ç¾åœ¨ã®ãƒ—ランã¯%{plan_link} ã§ã™ã€‚"
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "ã„ãã¤ã‹ã®æ”¯æ‰•ã„プランã§ã¯ã€è‡ªå‹•ã‚¢ãƒƒãƒ—グレードã€ãƒ€ã‚¦ãƒ³ã‚°ãƒ¬ãƒ¼ãƒ‰ãŒç¾åœ¨åˆ©ç”¨ã§ãã¾ã›ã‚“。"
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "ç¾åœ¨ã®ãƒ—ラン"
-msgid "BillingPlans|Customer Support"
-msgstr "カスタマー サãƒãƒ¼ãƒˆ"
-
msgid "BillingPlans|Downgrade"
msgstr "ダウングレード"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "%{faq_link} を読んã§å„プランã®è©³ç´°ã‚’確èªã™ã‚‹ã‹ã€GitLab.com Gold ã®30日間無料試用版を開始ã—ã¦ãã ã•ã„。"
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "å„プランã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ %{faq_link} ã‚’ã”確èªãã ã•ã„。"
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "プランã®ç®¡ç†"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "%{customer_support_link} ã¾ã§ã”連絡ãã ã•ã„。"
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "%{plan_name} ã®ã™ã¹ã¦ã®æ©Ÿèƒ½ã‚’見る"
@@ -1905,14 +2250,11 @@ msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ—ランã®ç®¡ç†ã¯ã€%{parent_billing_page_link}
msgid "BillingPlans|Upgrade"
msgstr "アップグレード"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "ç¾åœ¨ã®ãƒ—ランã¯%{plan_link} ã§ã™ã€‚"
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "ã‚ãªãŸã® GitLab.com 試用版㯠%{expiration_date} ã«æœŸé™åˆ‡ã‚Œã«ãªã‚Šã¾ã—ãŸã€‚%{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "ã‚ãªãŸã® ゴールド試用版ã¯ã€<strong>%{expiration_date} ã®å¾Œã«æœŸé™ãŒåˆ‡ã‚Œã¾ã™</strong>。 GitLab.com Goldã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ %{features_link} ã‚’å‚ç…§ã—ã¦ãã ã•ã„。"
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "機能"
@@ -1929,6 +2271,9 @@ msgstr "å¹´é¡ %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "1ユーザーã«ã¤ã"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr "Bitbucket サーãƒãƒ¼ インãƒãƒ¼ãƒˆ"
@@ -1941,29 +2286,51 @@ msgstr "ブロック"
msgid "Blocked"
msgstr "ブロック中"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-
msgid "Blog"
msgstr "ブログ"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr "デフォルトリストを追加"
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "ボード"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "%{branchName} ブランãƒã¯ã“ã®ãƒ—ロジェクトã®ãƒªãƒã‚¸ãƒˆãƒªã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
@@ -2126,6 +2493,9 @@ msgstr "ファイルを表示"
msgid "Browse Files"
msgstr "ファイルを表示"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "ファイルを表示"
@@ -2133,16 +2503,16 @@ msgid "Built-in"
msgstr "ビルトイン"
msgid "BurndownChartLabel|Guideline"
-msgstr ""
+msgstr "ガイドライン"
msgid "BurndownChartLabel|Open issue weight"
msgstr ""
msgid "BurndownChartLabel|Open issues"
-msgstr ""
+msgstr "未解決ã®èª²é¡Œ"
msgid "BurndownChartLabel|Progress"
-msgstr ""
+msgstr "進æ—"
msgid "BurndownChartLabel|Remaining"
msgstr ""
@@ -2237,7 +2607,10 @@ msgstr "Auto DevOps ã®è©³ç´°"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "ãã®ä»–ã« CI 設定ファイルãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã€Auto DevOps パイプラインãŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€‚"
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2246,6 +2619,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr "インスタンスãŒæœ‰åŠ¹"
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr "CONTRIBUTING"
@@ -2273,9 +2652,15 @@ msgstr "カナリアデプロイã¯ã€ä¸€éƒ¨ã®ã‚¢ãƒ—リケーションãŒã‚ãª
msgid "Cancel"
msgstr "キャンセル"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "ã“ã®ã‚¸ãƒ§ãƒ–をキャンセルã™ã‚‹"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "自動的ã«ãƒžãƒ¼ã‚¸ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
@@ -2285,6 +2670,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "管ç†ä¸‹ã® Kubernetes クラスターを変更ã§ãã¾ã›ã‚“"
@@ -2312,12 +2700,21 @@ msgstr "証明書 (PEM)"
msgid "Change Weight"
msgstr "ウェイトを変更ã™ã‚‹"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr "担当者を変更"
msgid "Change assignee(s)."
msgstr "担当者を変更ã—ã¾ã™ã€‚"
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2334,7 +2731,7 @@ msgid "Change title"
msgstr "タイトル変更"
msgid "Change your password"
-msgstr ""
+msgstr "パスワードを変更ã—ã¦ãã ã•ã„"
msgid "Change your password or recover your current one"
msgstr ""
@@ -2354,6 +2751,12 @@ msgstr "リãƒãƒ¼ãƒˆ"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "コミット済ã®å¤‰æ›´ã‚’ revert ã™ã‚‹ãŸã‚ã«æ–°ã—ã„コミットを作æˆã—ã¾ã™"
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr "変更"
@@ -2375,6 +2778,57 @@ msgstr "ãƒãƒ£ãƒ¼ãƒˆ"
msgid "Chat"
msgstr "ãƒãƒ£ãƒƒãƒˆ"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr "å†ãƒã‚§ãƒƒã‚¯"
@@ -2417,6 +2871,9 @@ msgstr "変更内容を確èªã—ãŸã‚Šãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’作æˆã™ã‚‹ãŸ
msgid "Choose a file"
msgstr "ファイルをé¸æŠžã—ã¦ãã ã•ã„"
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2453,9 +2910,6 @@ msgstr "CI/CD パイプラインを実行ã—ãŸã„リãƒã‚¸ãƒˆãƒªã‚’é¸æŠžã—ã¦
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "セカンダリノードã¨åŒæœŸã•ã›ãŸã„シャードをé¸æŠžã—ã¦ãã ã•ã„。"
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "キャンセル"
@@ -2535,7 +2989,7 @@ msgid "CiVariables|Input variable value"
msgstr "値を入力"
msgid "CiVariables|Key"
-msgstr ""
+msgstr "キー"
msgid "CiVariables|Masked"
msgstr "マスク"
@@ -2544,15 +2998,21 @@ msgid "CiVariables|Remove variable row"
msgstr "環境変数を削除"
msgid "CiVariables|Scope"
+msgstr "スコープ"
+
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
msgstr ""
msgid "CiVariables|State"
msgstr "状態"
msgid "CiVariables|Type"
-msgstr ""
+msgstr "種類"
msgid "CiVariables|Value"
+msgstr "値"
+
+msgid "CiVariables|Variables"
msgstr ""
msgid "CiVariable|* (All environments)"
@@ -2568,7 +3028,7 @@ msgid "CiVariable|Error occurred while saving variables"
msgstr "変数ä¿å­˜ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
msgid "CiVariable|Masked"
-msgstr ""
+msgstr "マスク"
msgid "CiVariable|New environment"
msgstr "æ–°ã—ã„環境"
@@ -2580,7 +3040,7 @@ msgid "CiVariable|Search environments"
msgstr "環境を検索"
msgid "CiVariable|Toggle masked"
-msgstr ""
+msgstr "マスクã®åˆ‡ã‚Šæ›¿ãˆ"
msgid "CiVariable|Toggle protected"
msgstr "ä¿è­·ã®åˆ‡ã‚Šæ›¿ãˆ"
@@ -2589,7 +3049,7 @@ msgid "CiVariable|Validation failed"
msgstr "検証ã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "Classification Label (optional)"
-msgstr ""
+msgstr "分類ラベル (オプション)"
msgid "ClassificationLabelUnavailable|is unavailable: %{reason}"
msgstr "使用ã§ãã¾ã›ã‚“:%{reason}"
@@ -2600,15 +3060,24 @@ msgstr "クリア"
msgid "Clear input"
msgstr "入力をクリア"
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "検索をクリア"
msgid "Clear search input"
msgstr "検索欄ã®æ¶ˆåŽ»"
+msgid "Clear templates search input"
+msgstr "テンプレート検索入力をクリア"
+
msgid "Clear weight"
msgstr "ウェイトをクリア"
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr "ウェイトをクリアã—ã¾ã™ã€‚"
@@ -2616,7 +3085,7 @@ msgid "Click any <strong>project name</strong> in the project list below to navi
msgstr "プロジェクトリストã§<strong>プロジェクトå</strong>をクリックã™ã‚‹ã¨ã€ãƒ—ロジェクトã®ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³ã«ç§»å‹•ã—ã¾ã™ã€‚"
msgid "Click here"
-msgstr ""
+msgstr "ã“ã“をクリックã—ã¦ä¸‹ã•ã„"
msgid "Click the <strong>Download</strong> button and wait for downloading to complete."
msgstr "<strong>ダウンロード</strong> ボタンをクリックã—ã€ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®å®Œäº†ã‚’ãŠå¾…ã¡ãã ã•ã„。"
@@ -2630,6 +3099,9 @@ msgstr "å³ã®<strong>Select none</strong>ボタンをクリックã—ã¦ãã ã
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "下ã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨ã€Kubernetesã®ãƒšãƒ¼ã‚¸ã«é·ç§»ã—ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ—ロセスを開始ã—ã¾ã™"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "クリックã—ã¦å±•é–‹ã€‚"
@@ -2666,6 +3138,9 @@ msgstr "SSH ã§ã‚¯ãƒ­ãƒ¼ãƒ³"
msgid "Close"
msgstr "クローズã™ã‚‹"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "エピックを閉ã˜ã‚‹"
@@ -2675,12 +3150,27 @@ msgstr "マイルストーンを閉ã˜ã‚‹"
msgid "Close sidebar"
msgstr "サイドãƒãƒ¼ã‚’é–‰ã˜ã‚‹"
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "クローズ"
msgid "Closed issues"
msgstr "クローズã—ãŸèª²é¡Œ"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr "%{custom_domain_start} 詳細情報 %{custom_domain_end}"
@@ -2688,7 +3178,7 @@ msgid "ClusterIntegration| can be used instead of a custom domain."
msgstr "カスタムドメインã®ä»£ã‚ã‚Šã«ä½¿ç”¨ã§ãã¾ã™ã€‚"
msgid "ClusterIntegration| is the default environment scope for this cluster. This means that all jobs, regardless of their environment, will use this cluster. %{environment_scope_start}More information%{environment_scope_end}"
-msgstr ""
+msgstr "ã“ã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ç’°å¢ƒã®ç¯„囲ã§ã™ã€‚ã“ã‚Œã¯ã€ã‚¸ãƒ§ãƒ–ã®ç’°å¢ƒã«é–¢ä¿‚ãªãã€ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–ãŒã“ã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚’使用ã—ã¾ã™ã€‚ %{environment_scope_start} 詳細情報 %{environment_scope_end}"
msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster"
msgstr "%{appList} ã¯æ­£å¸¸ã« Kubernetes クラスターã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã—ãŸ"
@@ -2697,7 +3187,7 @@ msgid "ClusterIntegration|%{title} uninstalled successfully."
msgstr "%{title} ã¯æ­£å¸¸ã«ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã—ãŸã€‚"
msgid "ClusterIntegration|%{title} updated successfully."
-msgstr ""
+msgstr "%{title} ã¯æ­£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
msgid "ClusterIntegration|A service token scoped to %{code}kube-system%{end_code} with %{code}cluster-admin%{end_code} privileges."
msgstr "サービス・トークンã¯ã€ %{code}cluster-admin%{end_code} 特権をæŒã¤ %{code}kube-system%{end_code} スコープã§ã™ã€‚"
@@ -2706,7 +3196,7 @@ msgid "ClusterIntegration|API URL"
msgstr "API URL"
msgid "ClusterIntegration|API URL should be a valid http/https url."
-msgstr ""
+msgstr "APIã®URLã¯æœ‰åŠ¹ãªhttp ã¾ãŸã¯ https ã®URLã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
msgid "ClusterIntegration|Add Kubernetes cluster"
msgstr "Kubernetes クラスターを追加"
@@ -2718,31 +3208,37 @@ msgid "ClusterIntegration|Adding a Kubernetes cluster to your group will automat
msgstr "グループ㫠Kubernetes クラスターを追加ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ—ロジェクトã§ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ãŒè‡ªå‹•çš„ã«å…±æœ‰ã•ã‚Œã¾ã™ã€‚Review Apps を使用ã—ã€ã‚¢ãƒ—リケーションを導入ã—ã€åŒã˜ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚’使用ã™ã‚‹ã™ã¹ã¦ã®ãƒ—ロジェクトã®ãƒ‘イプラインを簡å˜ã«å®Ÿè¡Œã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Adding a Kubernetes cluster will automatically share the cluster across all projects. Use review apps, deploy your applications, and easily run your pipelines for all projects using the same cluster."
-msgstr ""
+msgstr "Kubernetesクラスタを追加ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ—ロジェクトã§ã‚¯ãƒ©ã‚¹ã‚¿ãŒè‡ªå‹•çš„ã«å…±æœ‰ã•ã‚Œã¾ã™ã€‚レビューアプリを使用ã—ã€ã‚¢ãƒ—リケーションを導入ã—ã€åŒã˜ã‚¯ãƒ©ã‚¹ã‚¿ã‚’使用ã™ã‚‹ã™ã¹ã¦ã®ãƒ—ロジェクトã®ãƒ‘イプラインを簡å˜ã«å®Ÿè¡Œã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Adding an integration to your group will share the cluster across all your projects."
msgstr "グループã«çµ±åˆã‚’追加ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ—ロジェクトã§ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ãŒå…±æœ‰ã•ã‚Œã¾ã™ã€‚"
msgid "ClusterIntegration|Adding an integration will share the cluster across all projects."
-msgstr ""
+msgstr "インテグレーションを追加ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ—ロジェクトã§ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ãŒå…±æœ‰ã•ã‚Œã¾ã™ã€‚"
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "ã“ã® Kubernetes クラスター統åˆã«é–¢ã™ã‚‹è©³ç´°ã‚ªãƒ—ション"
-msgid "ClusterIntegration|All data will be deleted and cannot be restored."
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|All data will be deleted and cannot be restored."
+msgstr "ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’削除ã—ã€å¾©å…ƒã§ãã¾ã›ã‚“。"
+
msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster."
-msgstr ""
+msgstr "ã“ã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã®åå‰ç©ºé–“ã¨ã‚µãƒ¼ãƒ“スアカウントã®ç®¡ç†ã‚’GitLabã«è¨±å¯ã™ã‚‹ã€‚"
msgid "ClusterIntegration|Alternatively"
+msgstr "ã‚ã‚‹ã„ã¯"
+
+msgid "ClusterIntegration|Amazon EKS"
msgstr ""
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Google Cloud API ã¸æŽ¥ç¶šã‚’試ã¿ãŸéš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。"
msgid "ClusterIntegration|An error occurred while trying to fetch project zones: %{error}"
-msgstr ""
+msgstr "プロジェクトゾーン %{error} ã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
msgid "ClusterIntegration|An error occurred while trying to fetch your projects: %{error}"
msgstr "プロジェクトã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ:%{error}"
@@ -2751,7 +3247,7 @@ msgid "ClusterIntegration|An error occurred while trying to fetch zone machine t
msgstr "ゾーンã®ãƒžã‚·ãƒ³ã‚¿ã‚¤ãƒ—ã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ:%{error}"
msgid "ClusterIntegration|Any running pipelines will be canceled."
-msgstr ""
+msgstr "実行中ã®ãƒ‘イプラインをã™ã¹ã¦ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Applications"
msgstr "アプリケーション"
@@ -2772,25 +3268,31 @@ msgid "ClusterIntegration|Cert-Manager"
msgstr "Cert-Manager"
msgid "ClusterIntegration|Cert-Manager is a native Kubernetes certificate management controller that helps with issuing certificates. Installing Cert-Manager on your cluster will issue a certificate by %{letsEncrypt} and ensure that certificates are valid and up-to-date."
-msgstr ""
+msgstr "Cert-Managerã¯ã€è¨¼æ˜Žæ›¸ã®ç™ºè¡Œã‚’支æ´ã™ã‚‹Kubernetes用ã®è¨¼æ˜Žæ›¸ç®¡ç†ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã§ã™ã€‚クラスタã«Cert-Managerをインストールã™ã‚‹ã¨ã€%{letsEncrypt} ã‹ã‚‰è¨¼æ˜Žæ›¸ãŒç™ºè¡Œã•ã‚Œã€è¨¼æ˜Žæ›¸ãŒæœ‰åŠ¹ã§æœ€æ–°ã®çŠ¶æ…‹ã‚’維æŒã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "èªè¨¼å±€ãƒãƒ³ãƒ‰ãƒ« (PEMå½¢å¼)"
-msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
msgstr ""
+msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
+msgstr "Kubernetes クラスタã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚¢ãƒ—リケーションをé¸æŠžã—ã¾ã™ã€‚ Helm Tiller ã¯ã€æ¬¡ã®ã‚¢ãƒ—リケーションã®ã„ãšã‚Œã‹ã‚’インストールã™ã‚‹ã®ã«å¿…è¦ã§ã™ã€‚"
+
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
+msgstr "ã“ã®ã‚¯ãƒ©ã‚¹ã‚¿ã‚’使用ã™ã‚‹ç’°å¢ƒã‚’é¸æŠžã—ã¦ãã ã•ã„。"
+
+msgid "ClusterIntegration|Cloud Run"
msgstr ""
msgid "ClusterIntegration|Cluster health"
-msgstr ""
+msgstr "クラスターã®å¥åº·çŠ¶æ…‹"
msgid "ClusterIntegration|Cluster name is required."
-msgstr ""
+msgstr "クラスターåãŒå¿…è¦ã§ã™ã€‚"
msgid "ClusterIntegration|Clusters are utilized by selecting the nearest ancestor with a matching environment scope. For example, project clusters will override group clusters."
-msgstr ""
+msgstr "クラスタã¯ã€ç’°å¢ƒã‚¹ã‚³ãƒ¼ãƒ—ãŒä¸€è‡´ã™ã‚‹æœ€ã‚‚è¿‘ã„先祖をé¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦åˆ©ç”¨ã•ã‚Œã¾ã™ã€‚ ãŸã¨ãˆã°ã€ãƒ—ロジェクトクラスタã¯ã‚°ãƒ«ãƒ¼ãƒ—クラスタを上書ãã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Copy API URL"
msgstr "API URLをコピー"
@@ -2813,17 +3315,26 @@ msgstr "Kubernetes クラスターåをコピー"
msgid "ClusterIntegration|Copy Service Token"
msgstr "サービストークンをコピー"
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Kubernetes クラスターを作æˆ"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "ã”存知ã§ã™ã‹ï¼Ÿ"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Kubernetes クラスターã¸ã® GitLab 接続を有効ã¾ãŸã¯ç„¡åŠ¹ã«ã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Enable this setting if using role-based access control (RBAC)."
-msgstr ""
+msgstr "役割ベースã®ã‚¢ã‚¯ã‚»ã‚¹åˆ¶å¾¡ (RBAC) を使ã†å ´åˆã€ã“ã®è¨­å®šã‚’有効ã«ã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Enter the details for your Kubernetes cluster"
msgstr "Kubernetes クラスターã®è©³ç´°ã‚’入力ã—ã¦ãã ã•ã„"
@@ -2835,13 +3346,13 @@ msgid "ClusterIntegration|Every new Google Cloud Platform (GCP) account receives
msgstr "Google Cloud Platform (GCP) ã®ã™ã¹ã¦ã®æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã¯ã€300ドル分ã®ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆãŒä»˜ä¸Žã•ã‚Œã¾ã™ %{sign_up_link} 。ã¾ãŸã€Google ã¨ã®ãƒ‘ートナーシップã«ã‚ˆã‚Šã€Google Kubernetes Engine 㨠GitLab ã®ã‚¤ãƒ³ãƒ†ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’開始ã™ã‚‹ãŸã‚ã«ã€æ–°è¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ»æ—¢å­˜ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’å•ã‚ãšã€GCP アカウントã«è¿½åŠ ã®200ドル分ã®ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’æä¾›ã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Failed to configure Google Kubernetes Engine Cluster: %{message}"
-msgstr ""
+msgstr "Google Kubernetes Engine ã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ %{message} ã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
msgid "ClusterIntegration|Failed to request to Google Cloud Platform: %{message}"
-msgstr ""
+msgstr "Google Cloud Platform ã¸ã®è¦æ±‚ %{message} ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
msgid "ClusterIntegration|Failed to run Kubeclient: %{message}"
-msgstr ""
+msgstr "Kubeclientã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸ: %{message}"
msgid "ClusterIntegration|Fetching machine types"
msgstr "マシンタイプをå–得中"
@@ -2859,14 +3370,17 @@ msgid "ClusterIntegration|GitLab Runner"
msgstr "GitLab Runner"
msgid "ClusterIntegration|GitLab Runner connects to the repository and executes CI/CD jobs, pushing results back and deploying applications to production."
-msgstr ""
+msgstr "GitLab Runner ã¯ã“ã®ãƒªãƒã‚¸ãƒˆãƒªã«æŽ¥ç¶šã—ã€CI / CD ジョブを実行ã—ã€çµæžœã‚’プッシュãƒãƒƒã‚¯ã—ã€ã‚¢ãƒ—リケーションを本番環境ã«ãƒ‡ãƒ—ロイã—ã¾ã™ã€‚"
msgid "ClusterIntegration|GitLab-managed cluster"
-msgstr ""
+msgstr "GitLabマãƒãƒ¼ã‚¸ãƒ‰ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼"
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Google Cloud Platform プロジェクト"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -2880,16 +3394,16 @@ msgid "ClusterIntegration|Helm Tiller"
msgstr "Helm Tiller"
msgid "ClusterIntegration|Helm streamlines installing and managing Kubernetes applications. Tiller runs inside of your Kubernetes Cluster, and manages releases of your charts."
-msgstr ""
+msgstr "Helm ã¯ã€Kubernetes アプリケーションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨ç®¡ç†ã‚’簡略化ã—ã¾ã™ã€‚Helm Tiller ã¯ã‚ãªãŸã®Kubernetes クラスタã®å†…部ã§å®Ÿè¡Œã—ã€ã‚ãªãŸã®ãƒãƒ£ãƒ¼ãƒˆã®ãƒªãƒªãƒ¼ã‚¹ã‚’管ç†ã—ã¾ã™ã€‚"
msgid "ClusterIntegration|Hide"
msgstr "éžè¡¨ç¤º"
msgid "ClusterIntegration|If you are setting up multiple clusters and are using Auto DevOps, %{help_link_start}read this first%{help_link_end}."
-msgstr ""
+msgstr "ã‚ãªãŸãŒè¤‡æ•°ã®ã‚¯ãƒ©ã‚¹ã‚¿ã‚’セットアップ㗠Auto DevOps を使用ã—ã¦ã„ã‚‹å ´åˆã€%{help_link_start}最åˆã«ã“ã¡ã‚‰ã‚’ãŠèª­ã¿ãã ã•ã„%{help_link_end} 。"
msgid "ClusterIntegration|In order to view the health of your cluster, you must first install Prometheus below."
-msgstr ""
+msgstr "ã‚ãªãŸã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã®å¥å…¨æ€§ã‚’確èªã™ã‚‹ãŸã‚ã«ã€å…ˆã«ä»¥ä¸‹ã® Prometheus をインストールã—ã¦ãã ã•ã„。"
msgid "ClusterIntegration|Ingress"
msgstr "Ingress"
@@ -2898,13 +3412,13 @@ msgid "ClusterIntegration|Ingress Endpoint"
msgstr "Ingress エンドãƒã‚¤ãƒ³ãƒˆ"
msgid "ClusterIntegration|Ingress gives you a way to route requests to services based on the request host or path, centralizing a number of services into a single entrypoint."
-msgstr ""
+msgstr "Ingressã«ã‚ˆã£ã¦ã€è¦æ±‚ホストã¾ãŸã¯ãƒ‘スã«åŸºã¥ã„ã¦è¦æ±‚をサービスã«ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã—ã€å¤šæ•°ã®ã‚µãƒ¼ãƒ“スをå˜ä¸€ã®ã‚¨ãƒ³ãƒˆãƒªãƒã‚¤ãƒ³ãƒˆã«é›†ä¸­ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
msgid "ClusterIntegration|Installing Ingress may incur additional costs. Learn more about %{pricingLink}."
msgstr "Ingress をインストールã™ã‚‹ã¨è¿½åŠ ã®ã‚³ã‚¹ãƒˆãŒã‹ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ 詳細ã«ã¤ã„ã¦ã¯ %{pricingLink} ã‚’å‚ç…§"
msgid "ClusterIntegration|Instance cluster"
-msgstr ""
+msgstr "インスタンスクラスター"
msgid "ClusterIntegration|Integrate Kubernetes cluster automation"
msgstr "Kubernetes クラスターを自動統åˆ"
@@ -2913,7 +3427,7 @@ msgid "ClusterIntegration|Integration status"
msgstr "çµ±åˆã®çŠ¶æ…‹"
msgid "ClusterIntegration|Issuer Email"
-msgstr ""
+msgstr "発行者メール"
msgid "ClusterIntegration|Issuers represent a certificate authority. You must provide an email address for your Issuer. "
msgstr ""
@@ -2954,8 +3468,8 @@ msgstr "Kubernetes クラスターを Google Kubernetes Engine 上ã«ä½œæˆã—ã
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Kubernetes クラスターå"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Kubernetes クラスター ã¯æ­£å¸¸ã« Google Kubernetes Engine ã«ä½œæˆã•ã‚Œã¾ã—ãŸã€‚クラスター ã®è©³ç´°ã‚’表示ã™ã‚‹ã«ã¯ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "Kubernetes クラスター㯠Review Apps ã®ä½¿ç”¨ã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ—ロイã€ãƒ‘イプラインã®å®Ÿè¡Œã‚„より簡å˜ãªå‡¦ç†ã‚’è¡Œã†è¨±å¯ã‚’求ã‚ã¦ã„ã¾ã™ã€‚"
@@ -2969,6 +3483,9 @@ msgstr "%{help_link_start_machine_type}マシンタイプ%{help_link_end}ã¨%{he
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "%{help_link_start}ゾーン%{help_link_end}ã®è©³ç´°ã€‚"
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "Kubernetes ã®è©³ç´°"
@@ -2981,6 +3498,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr "Let's Encrypt"
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "マシンタイプ"
@@ -2990,6 +3513,9 @@ msgstr "Kubernetes クラスター を作æˆã™ã‚‹ã«ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã® %{
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "%{link_gke} ã«ã‚¢ã‚¯ã‚»ã‚¹ã—㦠Kubernetes クラスターを管ç†"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "検索æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒžã‚·ãƒ³ã‚¿ã‚¤ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“"
@@ -2999,6 +3525,9 @@ msgstr "プロジェクトãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
msgid "ClusterIntegration|No projects matched your search"
msgstr "検索æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒ—ロジェクトã¯ã‚ã‚Šã¾ã›ã‚“"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "検索æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ã‚¾ãƒ¼ãƒ³ã¯ã‚ã‚Šã¾ã›ã‚“"
@@ -3023,6 +3552,9 @@ msgstr "プロジェクトクラスター"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "プロジェクトã®åå‰ç©ºé–“ (çœç•¥å¯èƒ½ã€ä¸€æ„)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3035,6 +3567,9 @@ msgstr "RBAC 有効クラスター"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "Kubernetes クラスターã®çµ±åˆã«ã¤ã„ã¦ã¯ã€%{link_to_help_page} ã‚’ãŠèª­ã¿ãã ã•ã„。"
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Kubernetes クラスターã®çµ±åˆã‚’削除"
@@ -3053,15 +3588,24 @@ msgstr "インストール開始ã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "変更をä¿å­˜"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "マシンタイプã®æ¤œç´¢"
msgid "ClusterIntegration|Search projects"
msgstr "プロジェクトã®æ¤œç´¢"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "ゾーンを検索"
@@ -3080,6 +3624,9 @@ msgstr "プロジェクトã¨ã‚¾ãƒ¼ãƒ³ã‚’é¸æŠžã—ã¦ãƒžã‚·ãƒ³ã‚¿ã‚¤ãƒ—ã‚’é¸æŠž
msgid "ClusterIntegration|Select project to choose zone"
msgstr "プロジェクトをé¸æŠžã—ã¦ã‚¾ãƒ¼ãƒ³ã‚’é¸æŠž"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "ゾーンをé¸æŠž"
@@ -3119,18 +3666,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3152,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "プロジェクトã®è«‹æ±‚ステータスを検証ã—ã¦ã„ã¾ã™"
@@ -3188,18 +3744,24 @@ msgstr "ドキュメント"
msgid "ClusterIntegration|help page"
msgstr "ヘルプ ページ"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "å¿…è¦æ¡ä»¶"
msgid "ClusterIntegration|pricing"
msgstr "価格"
-msgid "ClusterIntegration|properly configured"
-msgstr "æ­£ã—ã設定ã•ã‚Œã¦ã„ã‚‹"
-
msgid "ClusterIntegration|sign up"
msgstr "æ–°è¦ç™»éŒ²"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr "コード"
@@ -3227,15 +3789,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr "サイドãƒãƒ¼ã‚’éš ã™"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr "ComboSearch ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr "コマンドライン命令"
msgid "Commands applied"
msgstr "é©ç”¨æ¸ˆã¿ã‚³ãƒžãƒ³ãƒ‰"
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "コメント"
@@ -3245,11 +3816,11 @@ msgstr "コメントã—ã¦é–‰ã˜ã‚‹ %{noteable_name}"
msgid "Comment & reopen %{noteable_name}"
msgstr "コメントã—ã¦å†é–‹ %{noteable_name}"
-msgid "Comment & resolve discussion"
-msgstr "ã“ã®æ¤œè¨Žã«ã‚³ãƒ¡ãƒ³ãƒˆã—解決ã™ã‚‹"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "ã“ã®æ¤œè¨Žã«ã‚³ãƒ¡ãƒ³ãƒˆã—未解決ã«ã™ã‚‹"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "コメントフォームã®ä½ç½®"
@@ -3257,6 +3828,9 @@ msgstr "コメントフォームã®ä½ç½®"
msgid "Comment is being updated"
msgstr "コメントãŒæ›´æ–°ã•ã‚Œã¦ã„ã¾ã™"
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "コメント"
@@ -3267,6 +3841,9 @@ msgstr[0] "コミット"
msgid "Commit %{commit_id}"
msgstr "コミット %{commit_id}"
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "コミットメッセージ"
@@ -3363,12 +3940,18 @@ msgstr "比較先"
msgid "CompareBranches|There isn't anything to compare."
msgstr "比較ã™ã‚‹ã‚‚ã®ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "éžå…¬é–‹"
msgid "Confidentiality"
msgstr "機密性"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3378,6 +3961,9 @@ msgstr "Gitaly ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã—ã¾ã™ã€‚"
msgid "Configure Let's Encrypt"
msgstr "Let's Encryptを設定"
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr "トレースã®æ§‹æˆ"
@@ -3387,6 +3973,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "リãƒã‚¸ãƒˆãƒªã«å¯¾ã—ã¦è‡ªå‹•å®Ÿè¡Œã™ã‚‹ Git ãƒã‚§ãƒƒã‚¯ã¨ãƒã‚¦ã‚¹ã‚­ãƒ¼ãƒ”ングを設定ã—ã¾ã™ã€‚"
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr "ウェブãŠã‚ˆã³APIリクエストã®åˆ¶é™ã‚’設定ã™ã‚‹ã€‚"
@@ -3453,32 +4042,39 @@ msgstr "コンテナレジストリ"
msgid "Container registry images"
msgstr "コンテナレジストリã®ã‚¤ãƒ¡ãƒ¼ã‚¸"
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "ã¾ãšã€GitLab ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¬ã‚¸ã‚¹ãƒˆãƒªã« GitLab ユーザーåã¨ãƒ‘スワードを使ã£ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™ã€‚%{link_2fa} を利用ã—ã¦ã„ã‚Œã°ã€%{link_token} を使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™:"
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab ã§ã¯ã€æœ€å¤§ 3 ã¤ã®ãƒ¬ãƒ™ãƒ«ã®ã‚¤ãƒ¡ãƒ¼ã‚¸åをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚例ã¨ã—ã¦æ¬¡ã®ã‚ˆã†ãªã‚¤ãƒ¡ãƒ¼ã‚¸åãŒãƒ—ロジェクトã§æœ‰åŠ¹ã§ã™:"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "コンテナレジストリ使用方法"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "詳細ã«ã¤ã„ã¦"
+msgid "ContainerRegistry|Last Updated"
+msgstr "最終更新日"
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "ã“ã®ã‚³ãƒ³ãƒ†ãƒŠã‚¤ãƒ¡ãƒ¼ã‚¸ã¯ã‚³ãƒ³ãƒ†ãƒŠãƒ¬ã‚¸ã‚¹ãƒˆãƒªã«ã‚¿ã‚°ãŒã‚ã‚Šã¾ã›ã‚“。"
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "ログインã™ã‚‹ã¨è‡ªç”±ã« %{build} 㨠%{push} コマンドã§ã‚³ãƒ³ãƒ†ãƒŠã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’作æˆãƒ»ã‚¢ãƒƒãƒ—ロードã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "リãƒã‚¸ãƒˆãƒªã®å‰Šé™¤"
-msgid "ContainerRegistry|Remove tag"
-msgstr "ã‚¿ã‚°ã®å‰Šé™¤"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "サイズ"
@@ -3489,14 +4085,29 @@ msgstr "ã‚¿ã‚°"
msgid "ContainerRegistry|Tag ID"
msgstr "ã‚¿ã‚°ID"
-msgid "ContainerRegistry|Use different image names"
-msgstr "ä»–ã®ã‚¤ãƒ¡ãƒ¼ã‚¸åを付ã‘ã¦ãã ã•ã„"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "GitLabã¨çµ±åˆã•ã‚ŒãŸã‚³ãƒ³ãƒ†ãƒŠãƒ¬ã‚¸ã‚¹ãƒˆãƒªã§ã€å…¨ã¦ã®ãƒ—ロジェクトã«Dockerイメージを格ç´ã™ã‚‹å ´æ‰€ãŒã‚ã‚Šã¾ã™ã€‚"
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "レジストリイメージã¸ã®èª­ã¿å–り専用アクセスã®ãŸã‚ã« %{deploy_token} を使用ã§ãã¾ã™ã€‚"
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
msgstr ""
@@ -3558,15 +4169,24 @@ msgstr "ã“ã®ã‚»ã‚«ãƒ³ãƒ€ãƒªãƒŽãƒ¼ãƒ‰ã®ãƒªãƒã‚¸ãƒˆãƒªãƒãƒƒã‚¯ãƒ•ã‚£ãƒ«ã®æœ€
msgid "ConvDev Index"
msgstr "ConvDev インデックス"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr "%{http_label} クローン URL をコピー"
msgid "Copy %{protocol} clone URL"
msgstr "%{protocol} クローン URL をコピー"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr "クリップボード㫠ID をコピー"
@@ -3603,6 +4223,9 @@ msgstr ""
msgid "Copy link"
msgstr "リンクをコピー"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr "クリップボードã¸ã‚³ãƒ”ー"
@@ -3618,6 +4241,12 @@ msgstr "クリップボードã«ã‚³ãƒ”ー"
msgid "Copy token to clipboard"
msgstr "トークンをクリップボードã«ã‚³ãƒ”ーã—ã¾ã™"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr "ãƒãƒ£ãƒƒãƒˆã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã‚’承èªã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。"
@@ -3633,27 +4262,39 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr ""
+
msgid "Could not delete chat nickname %{chat_name}."
msgstr "ãƒãƒ£ãƒƒãƒˆã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ  %{chat_name} を削除ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
msgid "Could not remove the trigger."
msgstr "トリガーを除去ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "パイプラインステータスをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚トラブルシューティングã®æ‰‹é †ã«ã¤ã„ã¦ã¯ã€ %{linkStart} マニュアルをå‚ç…§ã—ã¦ãã ã•ã„。%{linkEnd}"
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr "ã‚«ãƒãƒ¬ãƒƒã‚¸"
msgid "Create"
msgstr "作æˆ"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "æ–°è¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆ"
@@ -3666,8 +4307,8 @@ msgstr "ã¯ã˜ã‚ã«GitLabアカウントを作æˆã—ã€ãã®å¾Œ %{label} ã®ã‚
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
-msgstr "マージリクエストを作æˆ."
+msgid "Create a merge request"
+msgstr ""
msgid "Create a new branch"
msgstr "æ–°ã—ã„ブランãƒã‚’作æˆ"
@@ -3687,12 +4328,24 @@ msgstr "%{protocol} ã§ãƒ—ッシュやプルã™ã‚‹ãŸã‚ã®ã‚ãªãŸå€‹äººç”¨ã‚¢
msgid "Create an issue. Issues are created for each alert triggered."
msgstr "課題を作æˆã™ã‚‹ã€‚課題ã¯ç™ºç”Ÿã—ãŸå„アラート毎ã«ä½œæˆã•ã‚Œã¾ã™ã€‚"
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "ブランãƒä½œæˆ"
msgid "Create commit"
msgstr "コミットã®ä½œæˆ"
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "ディレクトリを作æˆ"
@@ -3723,6 +4376,9 @@ msgstr "マージリクエストã¨ãƒ–ランãƒã‚’作æˆ"
msgid "Create milestone"
msgstr "マイルストーンを作æˆ"
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "æ–°ã—ã„ブランãƒã‚’作æˆ"
@@ -3741,6 +4397,9 @@ msgstr "ラベルã®æ–°è¦ä½œæˆ"
msgid "Create new..."
msgstr "æ–°è¦ä½œæˆ"
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "プロジェクトラベルを作æˆ"
@@ -3765,6 +4424,12 @@ msgstr "作æˆæ¸ˆã¿"
msgid "Created At"
msgstr "作æˆæ—¥"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "自分ãŒä½œæˆ"
@@ -3786,18 +4451,30 @@ msgstr "作æˆæ—¥æ™‚"
msgid "Created on:"
msgstr "作æˆæ—¥æ™‚:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
-msgstr "ã“ã®èª²é¡Œã‚’解決ã™ã‚‹ãŸã‚ã«'%{branch_name}'ブランãƒã¨ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
msgid "Creating epic"
msgstr "エピックを作æˆã—ã¦ã„ã¾ã™"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Cron ã®ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³"
msgid "Cron syntax"
msgstr "Cron ã®æ§‹æ–‡"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "ç¾åœ¨ã®ãƒ–ランãƒ"
@@ -3808,7 +4485,7 @@ msgid "Current node"
msgstr "ç¾åœ¨ã®ãƒŽãƒ¼ãƒ‰"
msgid "Current password"
-msgstr ""
+msgstr "ç¾åœ¨ã®ãƒ‘スワード"
msgid "CurrentUser|Profile"
msgstr "プロフィール"
@@ -3834,6 +4511,45 @@ msgstr "カスタムプロジェクトテンプレート"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr "カスタムプロジェクトテンプレートã¯ã€ã‚ãªãŸãŒãƒ¡ãƒ³ãƒãƒ¼ã«ãªã£ã¦ã„るグループã«ã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。ãれらã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®è¨­å®šãƒšãƒ¼ã‚¸ã‹ã‚‰æœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚グループã®ã‚ªãƒ¼ãƒŠãƒ¼ã¾ãŸã¯ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«é€£çµ¡ã—ã¦ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ—ロジェクトテンプレートを設定ã—ã¦ãã ã•ã„。"
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "カスタムカラー"
@@ -3841,20 +4557,53 @@ msgid "Customize how FogBugz email addresses and usernames are imported into Git
msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
+msgstr "Google Code ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ãƒ¦ãƒ¼ã‚¶åã‚’ GitLab ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã‚’カスタマイズã—ã¾ã™ã€‚次ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ロジェクトをé¸æŠžã—ã¾ã™ã€‚"
+
+msgid "Customize icon"
msgstr ""
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "Runner トークンã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã€ãƒ‘イプラインã®è¨­å®šã‚’カスタマイズã€ãã—ã¦ãƒ‘イプラインã®çŠ¶æ…‹ã¨ã‚«ãƒãƒ¬ãƒƒã‚¸ãƒ¬ãƒãƒ¼ãƒˆã‚’閲覧ã—ã¾ã™ã€‚"
msgid "Cycle Analytics"
msgstr "サイクル分æž"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "サイクル分æžã«ã‚ˆã‚Šã€ã‚ãªãŸã®ãƒ—ロジェクトãŒã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ã®æ®µéšŽã‹ã‚‰ãƒ—ロダクション環境ã«ãƒªãƒªãƒ¼ã‚¹ã•ã‚Œã‚‹ã¾ã§ã©ã‚Œãらã„時間ãŒã‹ã‹ã£ãŸã‹ä¿¯çž°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "コード"
@@ -3876,6 +4625,29 @@ msgstr "ステージング"
msgid "CycleAnalyticsStage|Test"
msgstr "テスト"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr "DNS"
@@ -3900,7 +4672,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3910,7 +4682,7 @@ msgid "Date picker"
msgstr "日付é¸æŠž"
msgid "DayTitle|F"
-msgstr ""
+msgstr "金"
msgid "DayTitle|M"
msgstr ""
@@ -3919,6 +4691,9 @@ msgid "DayTitle|S"
msgstr ""
msgid "DayTitle|W"
+msgstr "æ°´"
+
+msgid "Days"
msgstr ""
msgid "Debug"
@@ -3942,15 +4717,24 @@ msgstr "デフォルトブランãƒ"
msgid "Default artifacts expiration"
msgstr "デフォルトã®ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ã‚¡ã‚¯ãƒˆã®æœ‰åŠ¹æœŸé™"
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr "デフォルト分類ラベル"
msgid "Default description template for issues"
msgstr "課題ã®ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®èª¬æ˜Žãƒ†ãƒ³ãƒ—レート"
-msgid "Default first day of the week"
+msgid "Default description template for merge requests"
msgstr ""
+msgid "Default first day of the week"
+msgstr "週ã®å§‹ã¾ã‚Šã®æ›œæ—¥ (デフォルト)"
+
msgid "Default first day of the week in calendars and date pickers."
msgstr "カレンダーã¨æ—¥ä»˜ã®è¨­å®šã§ä½¿ç”¨ã™ã‚‹ã€é€±ã®æœ€åˆã®æ—¥(デフォルト)"
@@ -3990,12 +4774,21 @@ msgstr "予約済ã¿"
msgid "Delete"
msgstr "削除"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "パッケージを削除"
msgid "Delete Snippet"
msgstr "スニペットを削除"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "コメントを削除"
@@ -4032,6 +4825,9 @@ msgstr "削除完了"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr "ライセンスã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
@@ -4050,6 +4846,20 @@ msgstr "æ‹’å¦"
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4062,10 +4872,19 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
+msgstr "パッケージャー"
+
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
msgstr ""
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
@@ -4077,9 +4896,12 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
-msgid "Dependency List"
+msgid "Dependencies|Vulnerable components"
msgstr ""
+msgid "Dependency List"
+msgstr "ä¾å­˜é–¢ä¿‚リスト"
+
msgid "Dependency Proxy"
msgstr ""
@@ -4095,6 +4917,14 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "デプロイ"
@@ -4105,6 +4935,15 @@ msgstr "デプロイキー"
msgid "Deploy key was successfully updated."
msgstr "デプロイキーã¯æ­£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+ %{count} プロジェクト"
@@ -4177,6 +5016,9 @@ msgstr "デプロイトークンを作æˆ"
msgid "DeployTokens|Created"
msgstr "作æˆæ—¥"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "デプロイトークン"
@@ -4228,6 +5070,9 @@ msgstr "æ–°ã—ã„プロジェクトデプロイトークンãŒä½œæˆã•ã‚Œã¾ã—
msgid "Deployed"
msgstr "デプロイ済ã¿"
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr "デプロイ先"
@@ -4252,9 +5097,30 @@ msgstr "Description テンプレートを使用ã™ã‚‹ã¨ã€ãƒ—ロジェクトã®
msgid "Description:"
msgstr "説明:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4270,6 +5136,12 @@ msgstr "次ã®ãƒ‡ã‚¶ã‚¤ãƒ³ã¸"
msgid "DesignManagement|Go to previous design"
msgstr "å‰ã®ãƒ‡ã‚¶ã‚¤ãƒ³ã¸"
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4279,9 +5151,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr "デザインをアップロード"
-
msgid "Designs"
msgstr "デザイン"
@@ -4303,9 +5172,15 @@ msgstr "差分コンテンツã®åˆ¶é™"
msgid "Diff limits"
msgstr "Diff ã®åˆ¶é™"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr "使用å¯èƒ½ãªãƒ•ã‚¡ã‚¤ãƒ«åãŒã‚ã‚Šã¾ã›ã‚“"
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "diff 行をå–得中ã«ä½•ã‹å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
@@ -4318,6 +5193,9 @@ msgstr "ディレクトリå"
msgid "Disable"
msgstr "無効"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "ã“ã®ãƒ—ロジェクトã§ã¯ç„¡åŠ¹ã«ã™ã‚‹"
@@ -4375,6 +5253,12 @@ msgstr "具体的ãªæ案や質å•ã«ã¤ã„ã¦è­°è«–ã—ã¾ã™ã€‚"
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr "解決ãŒå¿…è¦ãªã€å…·ä½“çš„ãªæ案や質å•ã«ã¤ã„ã¦è­°è«–ã™ã‚‹ã€‚"
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr "検討"
@@ -4405,6 +5289,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "Google コードã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’ GitLab ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã‚’カスタマイズã—ã¾ã™ã‹ï¼Ÿ"
@@ -4414,6 +5301,9 @@ msgstr "Dockerfile"
msgid "Documentation for popular identity providers"
msgstr "一般的㪠ID プロãƒã‚¤ãƒ€ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ"
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr "ドメイン"
@@ -4435,9 +5325,15 @@ msgstr "完了"
msgid "Download"
msgstr "ダウンロード"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr "æˆæžœç‰©ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰"
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr "アセットをダウンロード"
@@ -4447,6 +5343,9 @@ msgstr ""
msgid "Download export"
msgstr "エクスãƒãƒ¼ãƒˆã‚’ダウンロード"
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr "ライセンスをダウンロード"
@@ -4483,9 +5382,15 @@ msgstr "å„ Runner ã¯æ¬¡ã®ã„ãšã‚Œã‹ã®çŠ¶æ…‹ã‚’ã¨ã‚Šã¾ã™:"
msgid "Edit"
msgstr "編集"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr "%{name} を編集"
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr "デプロイキーã®ç·¨é›†"
@@ -4507,12 +5412,21 @@ msgstr "スニペットを編集"
msgid "Edit application"
msgstr "アプリケーションã®ç·¨é›†"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr "コメントを編集"
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr "環境を編集"
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr "ファイルã®ç·¨é›†"
@@ -4531,6 +5445,18 @@ msgstr "課題を編集"
msgid "Edit public deploy key"
msgstr "公開デプロイキーã®ç·¨é›†"
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4555,6 +5481,9 @@ msgstr "メール"
msgid "Email address"
msgstr "メールアドレス"
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "パッãƒã‚’メールã™ã‚‹"
@@ -4639,12 +5568,15 @@ msgstr "匿å化データã®åŽé›†ã‚’有効ã«ã—ã¾ã™"
msgid "Enable SAML authentication for this group"
msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã® SAML èªè¨¼ã‚’有効ã«ã™ã‚‹"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "エラー報告ã¨ãƒ­ã‚°è¨˜éŒ²ã®ãŸã‚ã« Sentry を有効ã«ã™ã‚‹ã€‚"
+msgid "Enable access to Grafana"
+msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr "InfluxDB ã®ãƒ¡ãƒˆãƒªã‚¯ã‚¹ã‚’有効ã«ã—ã¦è¨­å®šã™ã‚‹ã€‚"
@@ -4657,6 +5589,9 @@ msgstr "外部サービスを使用ã—ã¦ã€åˆ†é¡žåˆ¶å¾¡ã‚’有効ã«ã™ã‚‹ã€‚"
msgid "Enable error tracking"
msgstr "エラートラッキングを有効ã«ã™ã‚‹"
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "ã“ã®ãƒ—ロジェクトã§ã¯æœ‰åŠ¹ã«ã™ã‚‹"
@@ -4675,12 +5610,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚§ãƒƒã‚¯ã¨ä½¿ç”¨çŠ¶æ³ã® ping を有効ã«ã™ã‚‹ã€‚"
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "reCAPTCHA ã¾ãŸã¯ Akismet ã®æœ‰åŠ¹ã€ãŠã‚ˆã³ IP 制é™ã‚’設定ã™ã‚‹ã€‚"
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr "共有 Runner を有効化"
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr "2è¦ç´ èªè¨¼ã‚’有効ã«ã™ã‚‹"
@@ -4714,18 +5655,36 @@ msgstr "終了時刻 (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr "å°‘ãªãã¨ã‚‚3文字以上ã§æ¤œç´¢ã—ã¦ãã ã•ã„"
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "ã‚ãªãŸã® Bitbucket Server ã® URL ã¨ä»¥ä¸‹ã®å€‹äººã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’入力ã—ã¦ãã ã•ã„"
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "課題ã®èª¬æ˜Žã‚’入力ã—ã¦ãã ã•ã„"
@@ -4738,9 +5697,18 @@ msgstr "マージリクエストã®èª¬æ˜Žã‚’入力ã—ã¦ãã ã•ã„"
msgid "Enter the merge request title"
msgstr "マージリクエストã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’入力ã—ã¦ãã ã•ã„"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4909,9 +5877,15 @@ msgstr "エピック"
msgid "Epics"
msgstr "エピック"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr "エピック ロードマップ"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "エピックを使用ã™ã‚‹ã¨ã€ãƒ—ロジェクトã®ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒªã‚ªã‚’より効率的ã‹ã¤å°‘ãªã„労力ã§ç®¡ç†ã§ãã¾ã™"
@@ -4948,12 +5922,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -4972,9 +5961,6 @@ msgstr "開始"
msgid "Error"
msgstr "エラー"
-msgid "Error Reporting and Logging"
-msgstr "エラー報告ã¨ãƒ­ã‚°"
-
msgid "Error Tracking"
msgstr "エラートラッキング"
@@ -4990,6 +5976,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr "貢献者データã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "ラベルã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
@@ -5047,9 +6039,15 @@ msgstr "ビューワーã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "Error occurred when fetching sidebar data"
msgstr "サイドãƒãƒ¼ãƒ‡ãƒ¼ã‚¿ã®å–得中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "通知購読ã®åˆ‡ã‚Šæ›¿ãˆã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5068,14 +6066,17 @@ msgstr "Markdownプレビューã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚¨ãƒ©ãƒ¼"
msgid "Error saving label update."
msgstr "ラベルã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "ã™ã¹ã¦ã® TODO ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’更新中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "TODO ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’更新中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5167,9 +6168,15 @@ msgstr "毎週 (日曜日ã®åˆå‰4:00)"
msgid "Everyone"
msgstr "全員"
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr "全員ãŒè²¢çŒ®ã§ãã¾ã™"
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr "GitBook を使ã£ã¦ GitLab Pages サイトを作æˆã™ã‚‹ãŸã‚ã«å¿…è¦ãªã“ã¨ã™ã¹ã¦ã€‚"
@@ -5191,6 +6198,9 @@ msgstr ""
msgid "Except policy:"
msgstr "除外ãƒãƒªã‚·ãƒ¼:"
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr "既存ã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã‚°ãƒ«ãƒ¼ãƒ—"
@@ -5203,9 +6213,18 @@ msgstr "ã™ã¹ã¦å±•é–‹"
msgid "Expand approvers"
msgstr "承èªè€…を展開"
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "サイドãƒãƒ¼ã‚’é–‹ã"
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr "有効期é™"
@@ -5215,6 +6234,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr "%{expiredOn} ã«æœŸé™åˆ‡ã‚Œ"
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr "%{expires_at} ã§æœŸé™åˆ‡ã‚Œ"
@@ -5269,6 +6294,12 @@ msgstr "ã“ã®ãƒ—ロジェクトã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã™ã‚‹å¤–部èªè¨¼"
msgid "External authorization request timeout"
msgstr "外部èªè¨¼å‡¦ç†ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "分類ラベル"
@@ -5308,6 +6339,15 @@ msgstr "失敗ã—ãŸã‚¸ãƒ§ãƒ–"
msgid "Failed create wiki"
msgstr "wiki を作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "オーナーを変更ã§ãã¾ã›ã‚“ã§ã—ãŸ"
@@ -5329,6 +6369,9 @@ msgstr "gitlab-shell 経由ã§ã®ãƒªãƒã‚¸ãƒˆãƒªä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "Failed to create resources"
msgstr "リソースã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ"
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5350,6 +6393,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr "内部エラーã®ãŸã‚ã€ãƒ©ãƒ™ãƒ«ã‚’昇格ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚管ç†è€…ã«å•ã„åˆã‚ã›ã¦ãã ã•ã„。"
@@ -5359,6 +6414,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "ボードã®èª²é¡Œã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。"
@@ -5392,6 +6450,9 @@ msgstr "設定をä¿å­˜ã§ãã¾ã›ã‚“ã§ã—㟠(%{error_message})。"
msgid "Failed to save preferences."
msgstr "設定をä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr "スマートカードèªè¨¼ã‚’使用ã—ã¦ã®ç½²åã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
@@ -5419,6 +6480,9 @@ msgstr "オブジェクトマップファイルをアップロードã§ãã¾ã›
msgid "Failure"
msgstr "失敗"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5449,6 +6513,15 @@ msgstr "API URL"
msgid "FeatureFlags|Active"
msgstr "アクティブ"
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5470,6 +6543,9 @@ msgstr "説明"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "機能フラグを編集"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5479,20 +6555,20 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr "機能フラグ"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr "機能フラグ"
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
-msgstr "機能フラグを有効ã«ã™ã‚‹ã¨ã€ç‰¹å®šã®æ©Ÿèƒ½ã¸ã®å‹•çš„切り替ãˆã«ã‚ˆã£ã¦ã‚³ãƒ¼ãƒ‰ã«ç•°ãªã‚‹ãƒ•ãƒ¬ãƒ¼ãƒãƒ¼ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-
msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr "機能フラグ%{name} ãŒã€å‰Šé™¤ã•ã‚Œã¾ã™ã€‚本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ"
-msgid "FeatureFlags|Get started with Feature Flags"
-msgstr "機能フラグを使ã„ã¯ã˜ã‚ã‚‹"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgstr ""
+
+msgid "FeatureFlags|Get started with feature flags"
+msgstr ""
msgid "FeatureFlags|Inactive"
msgstr "無効"
@@ -5506,11 +6582,11 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr "インスタンス ID"
-msgid "FeatureFlags|Loading Feature Flags"
-msgstr "機能フラグを読ã¿è¾¼ã‚“ã§ã„ã¾ã™"
+msgid "FeatureFlags|Loading feature flags"
+msgstr ""
-msgid "FeatureFlags|More Information"
-msgstr "詳細情報"
+msgid "FeatureFlags|More information"
+msgstr ""
msgid "FeatureFlags|Name"
msgstr "åå‰"
@@ -5521,20 +6597,44 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr "æ–°ã—ã„機能フラグ"
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "ステータス"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr "ターゲット環境"
-msgid "FeatureFlags|There are no active Feature Flags"
-msgstr "有効ãªæ©Ÿèƒ½ãƒ•ãƒ©ã‚°ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
-msgstr "無効ãªæ©Ÿèƒ½ãƒ•ãƒ©ã‚°ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgid "FeatureFlags|There are no inactive feature flags"
+msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
msgstr ""
@@ -5542,6 +6642,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "2月"
@@ -5560,9 +6663,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã¯ç·¨é›†ã§ããªã„設定ã§ã™ã€‚次㮠Kubernetes クラスターを設定ã§ãã¾ã™ã€‚"
-
msgid "File"
msgid_plural "Files"
msgstr[0] "ファイル"
@@ -5592,7 +6692,7 @@ msgid "Files"
msgstr "ファイル"
msgid "Files breadcrumb"
-msgstr ""
+msgstr "ファイルã®ãƒ‘ンããšãƒªã‚¹ãƒˆ"
msgid "Files, directories, and submodules in the path %{path} for commit reference %{ref}"
msgstr ""
@@ -5624,6 +6724,9 @@ msgstr "グループã§çµžã‚Šè¾¼ã¿"
msgid "Filter results by project"
msgstr "プロジェクトã§çµžã‚Šè¾¼ã¿"
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "フィルター..."
@@ -5666,6 +6769,9 @@ msgstr "完了"
msgid "First day of the week"
msgstr "一週間ã®é–‹å§‹æ›œæ—¥"
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5729,6 +6835,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr "フォーク"
@@ -5765,12 +6874,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ".gitlab-ci.yml ã«ã‚¨ãƒ©ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ:"
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "GitLab.com Gold プランã®ç„¡å„Ÿè©¦ç”¨"
msgid "Friday"
msgstr "金曜日"
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5831,6 +6946,9 @@ msgstr "åˆæœŸè¨­å®šãƒ©ãƒ™ãƒ«ã‚»ãƒƒãƒˆã‚’生æˆã™ã‚‹"
msgid "Generate key"
msgstr "éµã‚’生æˆ"
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5843,6 +6961,9 @@ msgstr "Geo ノード"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Geo ã¯ã€GitLab インスタンスを他ã®åœ°ç†çš„ãªå ´æ‰€ã«è¤‡è£½ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "ノードãŒæ•…éšœã—ã¦ã„ã‚‹ã‹å£Šã‚Œã¦ã„ã¾ã™ã€‚"
@@ -5906,9 +7027,12 @@ msgstr "ローカル㮠LFS オブジェクト"
msgid "GeoNodes|Local attachments"
msgstr "ローカルã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«"
-msgid "GeoNodes|Local job artifacts"
+msgid "GeoNodes|Local container repositories"
msgstr ""
+msgid "GeoNodes|Local job artifacts"
+msgstr "ローカルジョブã®ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ã‚¡ã‚¯ãƒˆ"
+
msgid "GeoNodes|New node"
msgstr "æ–°è¦ãƒŽãƒ¼ãƒ‰"
@@ -6014,33 +7138,42 @@ msgstr "安全ã§ãªã„ HTTP 接続を使用ã—㦠Geo ノードを設定ã—ã¾ã
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} ã¯å¼·åˆ¶çš„ã«å†ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã‚‹äºˆå®šã§ã™"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} ã¯å†ãƒã‚§ãƒƒã‚¯ãŒäºˆå®šã•ã‚Œã¦ã„ã¾ã™"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} ã¯å†åŒæœŸãŒäºˆå®šã•ã‚Œã¦ã„ã¾ã™"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
msgid "Geo|All"
msgstr "ã™ã¹ã¦"
msgid "Geo|All projects"
msgstr "ã™ã¹ã¦ã®ãƒ—ロジェクト"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "ã™ã¹ã¦ã®ãƒ—ロジェクトã®å†ãƒã‚§ãƒƒã‚¯ãŒäºˆå®šã•ã‚Œã¦ã„ã¾ã™"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "ã™ã¹ã¦ã®ãƒ—ロジェクトã®å†åŒæœŸãŒäºˆå®šã•ã‚Œã¦ã„ã¾ã™"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "ãƒãƒƒãƒå‡¦ç†"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6065,11 +7198,14 @@ msgstr "ジオステータス"
msgid "Geo|Groups to synchronize"
msgstr "åŒæœŸã‚°ãƒ«ãƒ¼ãƒ—"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "åŒæœŸ"
-msgid "Geo|Internal URL"
-msgstr "内部 URL"
+msgid "Geo|Internal URL (optional)"
+msgstr ""
msgid "Geo|Last repository check run"
msgstr ""
@@ -6119,12 +7255,6 @@ msgstr "特定ストレージシャード内ã®ãƒ—ロジェクト"
msgid "Geo|Re-verification interval"
msgstr "å†èªè¨¼ã®å®Ÿæ–½é–“éš”"
-msgid "Geo|Recheck"
-msgstr "å†ãƒã‚§ãƒƒã‚¯"
-
-msgid "Geo|Recheck all projects"
-msgstr "ã™ã¹ã¦ã®ãƒ—ロジェクトをå†ãƒã‚§ãƒƒã‚¯"
-
msgid "Geo|Redownload"
msgstr "å†ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰"
@@ -6143,6 +7273,12 @@ msgstr "ã™ã¹ã¦ã®ãƒ—ロジェクトをå†åŒæœŸ"
msgid "Geo|Retry count"
msgstr "リトライ回数"
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr "é¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—を複製ã™ã‚‹"
@@ -6167,7 +7303,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr "åŒæœŸã«å¤±æ•—ã—ã¾ã—㟠- %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6224,6 +7360,9 @@ msgstr "ç„¡æ–™ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒ¬ãƒ“ューã®å–å¾—"
msgid "Get started with error tracking"
msgstr "エラー追跡を開始"
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr "リリースã®é–‹å§‹"
@@ -6261,7 +7400,7 @@ msgid "GitLab CI Linter has been moved"
msgstr "GitLab CI Linter ãŒç§»å‹•ã—ã¾ã—ãŸ"
msgid "GitLab Enterprise Edition %{plan}"
-msgstr ""
+msgstr "GitLab エンタープライズエディション %{plan}"
msgid "GitLab Geo"
msgstr "GitLab Geo"
@@ -6281,6 +7420,15 @@ msgstr "GitLab ユーザー"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr "GitLab メタデータ URL"
@@ -6299,9 +7447,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr "GitLab.com インãƒãƒ¼ãƒˆ"
-msgid "GitLab’s issue tracker"
-msgstr "GitLab ã®èª²é¡Œãƒˆãƒ©ãƒƒã‚«ãƒ¼"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6317,9 +7462,18 @@ msgstr "Gitea ホスト㮠URL"
msgid "Gitea Import"
msgstr "Gitea インãƒãƒ¼ãƒˆ"
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr "%{time_ago} ã«ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯"
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6332,6 +7486,12 @@ msgstr ""
msgid "Go back"
msgstr "å‰ã«æˆ»ã‚‹"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr "全画é¢è¡¨ç¤º"
@@ -6341,15 +7501,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr "プロジェクトã«ç§»å‹•"
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr "自分ã®ãƒ•ã‚©ãƒ¼ã‚¯ã¸ç§»å‹•"
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6359,8 +7603,8 @@ msgstr "Google コードã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"
msgid "Google Takeout"
msgstr "Google テイクアウト"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "Google èªè¨¼ã¯ %{link_to_documentation} ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚µãƒ¼ãƒ“スã«ã¤ã„ã¦ã¯ GitLab 管ç†è€…ã«å•ã„åˆã‚ã›ã¦ãã ã•ã„。"
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr ""
@@ -6368,12 +7612,18 @@ msgstr ""
msgid "Got it!"
msgstr "入手ã—ã¾ã—ょã†ï¼"
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr "アクセス許å¯"
msgid "Graph"
msgstr "グラフ"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr "Gravatar を有効化"
@@ -6437,15 +7687,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr "グループ:"
-
msgid "Group: %{group_name}"
msgstr "グループ:%{group_name}"
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "%{dateWord} ã‹ã‚‰"
@@ -6482,6 +7732,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6557,6 +7810,9 @@ msgstr "グループãƒãƒƒã‚¸ã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º"
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "ãƒãƒƒã‚¸ã®è©³ç´°ã€‚"
@@ -6590,6 +7846,9 @@ msgstr "ã“ã®è¨­å®šã¯ %{ancestor_group} ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚設定を上æ›
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "ã“ã®è¨­å®šã¯ã‚°ãƒ«ãƒ¼ãƒ—オーナーã«ã‚ˆã£ã¦ä¸Šæ›¸ãã•ã‚Œãªã„é™ã‚Šã€ã™ã¹ã¦ã®ã‚µãƒ–グループã«é©ç”¨ã•ã‚Œã¾ã™ã€‚プロジェクトã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒæ—¢ã«ã‚るグループã¯ã€æ‰‹å‹•ã§å‰Šé™¤ã—ãªã„é™ã‚Šå¼•ã続ãアクセスã§ãã¾ã™ã€‚"
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "親グループã®ã€Œã‚°ãƒ«ãƒ¼ãƒ—ã¨ã®ãƒ­ãƒƒã‚¯ã‚’共有ã€ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€è¦ªã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ¼ãƒŠãƒ¼ä»¥å¤–ã¯ç„¡åŠ¹ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
@@ -6713,6 +7972,12 @@ msgstr "ヘルプページ"
msgid "Help page text and support page url."
msgstr "ヘルプページテキストã¨ã‚µãƒãƒ¼ãƒˆãƒšãƒ¼ã‚¸URL。"
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr "アーカイブã—ãŸãƒ—ロジェクトをéžè¡¨ç¤ºã«"
@@ -6734,6 +7999,9 @@ msgstr "ペイロードを隠ã™"
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "éžè¡¨ç¤º"
@@ -6741,6 +8009,9 @@ msgstr[0] "éžè¡¨ç¤º"
msgid "Hide values"
msgstr "éžè¡¨ç¤º"
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6759,6 +8030,9 @@ msgstr "フックã¯æ­£å¸¸ã«ä½œæˆã•ã‚Œã¾ã—ãŸã€‚"
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr "ãƒã‚¦ã‚¹ã‚­ãƒ¼ãƒ”ング"
@@ -6768,6 +8042,9 @@ msgstr "ãƒã‚¦ã‚¹ã‚­ãƒ¼ãƒ”ングã¯æ­£å¸¸ã«èµ·å‹•ã—ã¾ã—ãŸã€‚"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr "ãƒã‚¦ã‚¹ã‚­ãƒ¼ãƒ”ングã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã€ãƒ‘スã€è»¢é€ã€å‰Šé™¤ã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–。"
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6777,6 +8054,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr "ã—ã‹ã—ã€ã‚ãªãŸã¯ã™ã§ã«ã“ã® %{member_source} ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚招待をå—ã‘入れるã«ã¯ã€åˆ¥ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’使用ã—ã¦ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ãã ã•ã„。"
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "%{terms_link} ã«åŒæ„ã™ã‚‹"
@@ -6789,9 +8069,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "CodeSandbox クライアントサイド評価を使用ã—ã¦ã€Web IDE 㧠JavaScript プロジェクトã®ãƒ©ã‚¤ãƒ–プレビューを許å¯ã—ã¾ã™ã€‚"
@@ -6828,6 +8114,9 @@ msgstr "プレビューã®æ›´æ–°"
msgid "IDE|Review"
msgstr "レビュー"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "IP アドレス"
@@ -6891,6 +8180,12 @@ msgstr "オニオンスキン"
msgid "ImageDiffViewer|Swipe"
msgstr "スワイプ"
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -6996,8 +8291,8 @@ msgstr "リモートデータをインãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
msgid "ImportProjects|The repository could not be created."
msgstr "リãƒã‚¸ãƒˆãƒªã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-msgid "ImportProjects|Updating the imported projects failed"
-msgstr "インãƒãƒ¼ãƒˆã—ãŸãƒ—ロジェクトã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸ"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr ""
msgid "Improve Issue boards"
msgstr ""
@@ -7050,13 +8345,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr "互æ›æ€§ã®ãªã„プロジェクト"
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7101,6 +8399,9 @@ msgstr "Kubernetes 㫠Runner をインストール"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7117,6 +8418,9 @@ msgstr "インスタンス統計"
msgid "Instance Statistics visibility"
msgstr "インスタンス統計ã®å¯è¦–性"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "インスタンスã¯ãƒžãƒ«ãƒ Kubernetes クラスターをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“"
@@ -7159,6 +8463,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7166,7 +8473,7 @@ msgid "Invalid feature"
msgstr ""
msgid "Invalid field"
-msgstr ""
+msgstr "無効ãªé …ç›®"
msgid "Invalid file."
msgstr "無効ãªãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ã€‚"
@@ -7207,16 +8514,22 @@ msgstr "グループã«æ‹›å¾…ã™ã‚‹"
msgid "Invite member"
msgstr "メンãƒãƒ¼ã‚’招待ã™ã‚‹"
-msgid "Invoke Count"
-msgstr "呼ã³å‡ºã—回数"
-
-msgid "Invoke Time"
-msgstr "呼ã³å‡ºã—時間"
+msgid "Invocations"
+msgstr ""
msgid "Is using license seat:"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7261,9 +8574,27 @@ msgstr "ã„ãã¤ã‹ã®ãƒœãƒ¼ãƒ‰ã¯éžè¡¨ç¤ºã«ãªã£ã¦ã„ã¾ã™ã€‚å†åº¦è¡¨ç¤º
msgid "IssueBoards|Switch board"
msgstr "ボードを切り替ãˆã‚‹"
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "課題"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "課題ã¨ã¯ãƒã‚°ã€ã‚¿ã‚¹ã‚¯ã€ã¾ãŸã¯è­°è«–ã®å¿…è¦ãªã‚¢ã‚¤ãƒ‡ã‚¢ã§ã™ã€‚ã¾ãŸã€èª²é¡Œã¯æ¤œç´¢ã‚„フィルター処ç†ãŒå¯èƒ½ã§ã™ã€‚"
@@ -7279,8 +8610,11 @@ msgstr "課題ã€ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã€ãƒ—ッシュã€ã‚³ãƒ¡ãƒ³ãƒˆ"
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr "プロジェクトã®èª²é¡Œã®ä½œæˆã‚’開始ã—ãŸã‚‰ã€ãƒ—ロジェクトã®ãƒ¡ãƒˆãƒªã‚¯ã‚¹ã‚’追跡ã—ã¦è¡¨ç¤ºã§ãã¾ã™ã€‚"
-msgid "IssuesAnalytics|Issues Created"
-msgstr "課題ãŒä½œæˆã•ã‚Œã¾ã—ãŸ"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
msgid "IssuesAnalytics|Issues created per month"
msgstr "課題ã®ä½œæˆï¼æœˆ"
@@ -7297,6 +8631,12 @@ msgstr "ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ—ロジェクトã«ã¯ã€èª²é¡ŒãŒã‚ã‚Šã¾
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "検索を拡大ã™ã‚‹ã«ã¯ã€ä¸Šè¨˜ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒãƒ¼ã§ãƒ•ã‚£ãƒ«ã‚¿ã‚’変更ã¾ãŸã¯å‰Šé™¤ã—ã¾ã™"
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr "ヘッダー行ã¨å°‘ãªãã¨ã‚‚2ã¤ã®åˆ—ãŒå¿…è¦ã§ã™ã€‚最åˆã®åˆ—ã¯èª²é¡Œã®ã‚¿ã‚¤ãƒˆãƒ«ã€2番目ã®åˆ—ã¯èª²é¡Œã®èª¬æ˜Žã§ã™ã€‚区切り文字ã¯è‡ªå‹•çš„ã«æ¤œå‡ºã•ã‚Œã¾ã™ã€‚"
@@ -7322,10 +8662,10 @@ msgid "JiraService|If different from Web URL"
msgstr ""
msgid "JiraService|Jira API URL"
-msgstr "JIRA APIã®URL"
+msgstr ""
msgid "JiraService|Jira comments will be created when an issue gets referenced in a commit."
-msgstr "課題ãŒã‚³ãƒŸãƒƒãƒˆã§å‚ç…§ã•ã‚Œã‚‹ã¨ JiraコメントãŒä½œæˆã•ã‚Œã¾ã™ã€‚"
+msgstr ""
msgid "JiraService|Jira comments will be created when an issue gets referenced in a merge request."
msgstr ""
@@ -7474,6 +8814,9 @@ msgstr "キー (PEM)"
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7498,11 +8841,14 @@ msgstr "Kubernetes クラスターã¯æ­£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
msgid "Kubernetes configured"
msgstr "Kubernetes 構æˆæ¸ˆã¿"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "Kubernetes サービスã®çµ±åˆã¯å»ƒæ­¢ã•ã‚Œã¾ã—ãŸã€‚%{deprecated_message_content} æ–°ã—ã„<a href=\"%{url}\"/>Kubernetes クラスター</a> ã®ãƒšãƒ¼ã‚¸ã‚’使用ã—ã¦ãã ã•ã„"
+msgid "LDAP"
+msgstr ""
msgid "LDAP settings"
msgstr "LDAP 設定"
@@ -7586,6 +8932,9 @@ msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "éŽåŽ»%d日間"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "最新パイプライン"
@@ -7607,15 +8956,24 @@ msgstr "最終編集日 %{date}"
msgid "Last edited by %{name}"
msgstr "最終編集者 %{name}"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr "最終閲覧"
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "最終更新"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "最終更新"
@@ -7634,8 +8992,8 @@ msgstr "ã“ã®æ™‚刻ã«"
msgid "Latest changes"
msgstr "最新ã®å¤‰æ›´"
-msgid "Latest pipeline for this branch"
-msgstr "ã“ã®ãƒ–ランãƒã®æœ€æ–°ã®ãƒ‘イプライン"
+msgid "Latest pipeline for the most recent commit on this branch"
+msgstr ""
msgid "Lead"
msgstr "リード"
@@ -7652,9 +9010,6 @@ msgstr ""
msgid "Learn more"
msgstr "詳細"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "ラベルã€æ‹…当者ã€ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³ã‚’使用ã—ã€è¤‡æ•°ãƒªã‚¹ãƒˆã®èª²é¡Œã‚’追跡ã™ã‚‹ã«ã¯ %{issue_boards_url} ã‹ã‚‰ç¢ºèªã§ãã¾ã™ã€‚課題ボードã«è¶³ã‚Šãªã„ã‚‚ã®ãŒã‚ã‚‹å ´åˆã€ %{gitlab_issues_url} ã‹ã‚‰èª²é¡Œã‚’作æˆã—ã¦ãã ã•ã„。"
-
msgid "Learn more about Auto DevOps"
msgstr "Auto DevOps ã®è©³ç´°"
@@ -7673,6 +9028,9 @@ msgstr "承èªã®è©³ç´°"
msgid "Learn more about custom project templates"
msgstr "カスタムプロジェクトテンプレートã®è©³ç´°"
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr "グループレベルプロジェクトテンプレートã®è©³ç´°"
@@ -7682,6 +9040,9 @@ msgstr "コミットã¸ã®ç½²åã®è©³ç´°"
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "詳ã—ã見る:"
@@ -7712,77 +9073,97 @@ msgstr ""
msgid "License"
msgstr "ライセンス"
-msgid "LicenseManagement|Add a license"
-msgstr "ライセンスを追加"
+msgid "License Compliance"
+msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "ライセンスを手動ã§è¿½åŠ ã—ã¦æ‰¿èªã¾ãŸã¯ãƒ–ラックリストã«ç™»éŒ²ã™ã‚‹"
+msgid "LicenseCompliance|Add a license"
+msgstr ""
-msgid "LicenseManagement|Approve"
-msgstr "承èª"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "ライセンスã®æ‰¿èª"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "ライセンスを承èªã—ã¾ã™ã‹ï¼Ÿ"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "承èªæ¸ˆã¿"
+msgid "LicenseCompliance|Approved"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
-msgstr "ブラックリスト"
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
-msgid "LicenseManagement|Blacklist license"
-msgstr "ブラックリストライセンス"
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "キャンセル"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
-msgid "LicenseManagement|License"
-msgstr "ライセンス"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
-msgid "LicenseManagement|License Management"
-msgstr "ライセンス管ç†"
+msgid "LicenseCompliance|License"
+msgstr ""
-msgid "LicenseManagement|License details"
-msgstr "ライセンスã®è©³ç´°"
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
-msgid "LicenseManagement|License name"
-msgstr "ライセンスå"
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "ã“ã®ãƒ—ロジェクトã®æ‰¿èªæ¸ˆã¿ãŠã‚ˆã³ãƒ–ラックリストã«ç™»éŒ²ã•ã‚ŒãŸãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’管ç†ã—ã¾ã™ã€‚"
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
-msgid "LicenseManagement|Packages"
-msgstr "パッケージ"
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
-msgid "LicenseManagement|Remove license"
-msgstr "ライセンスを削除"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
-msgid "LicenseManagement|Remove license?"
-msgstr "ライセンスを削除ã—ã¾ã™ã‹ï¼Ÿ"
+msgid "LicenseCompliance|License details"
+msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "é€ä¿¡"
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã¯ã™ã§ã«ã“ã®ãƒ—ロジェクトã«å­˜åœ¨ã—ã¾ã™ã€‚"
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|URL"
-msgstr "URL"
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
+
+msgid "LicenseCompliance|Submit"
+msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "ã“ã®ãƒ—ロジェクトã‹ã‚‰ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ %{name} を削除ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
msgid "Licensed Features"
msgstr ""
@@ -7793,6 +9174,9 @@ msgstr ""
msgid "Licenses"
msgstr "ライセンス"
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7800,12 +9184,18 @@ msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "リスト"
@@ -7818,15 +9208,15 @@ msgstr "利用å¯èƒ½ãªãƒªãƒã‚¸ãƒˆãƒªã®ä¸€è¦§"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "一覧表示"
msgid "List your Bitbucket Server repositories"
msgstr "ã‚ãªãŸã®ã€Bitbucket Server ã®ãƒªãƒã‚¸ãƒˆãƒªã‚’一覧表示ã™ã‚‹"
-msgid "List your GitHub repositories"
-msgstr "GitHub リãƒã‚¸ãƒˆãƒªã‚’一覧表示"
-
msgid "Live preview"
msgstr "ライブプレビュー"
@@ -7836,6 +9226,9 @@ msgstr "グループメンãƒãƒ¼ã®è²¢çŒ®åº¦æƒ…報を読ã¿è¾¼ã¿ä¸­"
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr "GitLab IDE ã®èª­ã¿è¾¼ã¿ä¸­..."
@@ -7875,13 +9268,19 @@ msgstr "ロック中"
msgid "Locked Files"
msgstr "ロックã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "ç¾åœ¨ã®ãƒ—ロジェクトã¯ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™"
msgid "Locks give the ability to lock specific file or folder."
msgstr "ロックã¯ã€ç‰¹å®šã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚„フォルダをロックã™ã‚‹æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚"
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7893,9 +9292,12 @@ msgstr ""
msgid "Logs"
msgstr "ログ"
-msgid "MRApprovals|Approved by"
+msgid "MERGED"
msgstr ""
+msgid "MRApprovals|Approved by"
+msgstr "承èªè€…"
+
msgid "MRApprovals|Approvers"
msgstr "承èªè€…"
@@ -7908,23 +9310,29 @@ msgstr "変更ã®ã¿è¡¨ç¤º"
msgid "MRDiff|Show full file"
msgstr "ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示"
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "ãƒãƒ¼ãƒ å…¨å“¡ãŒå ´æ‰€ã«é–¢ä¿‚ãªãより生産的ã«æ´»å‹•ã§ãã¾ã™ã€‚GitLab Geo ã¯ã€å¤§ããªã‚µã‚¤ã‚ºã®ãƒªãƒã‚¸ãƒˆãƒªã®å–得やクローンã«ã‹ã‹ã‚‹æ™‚間を削減ã™ã‚‹ãŸã‚ã«ã€èª­ã¿è¾¼ã¿å°‚用ã®ãƒŸãƒ©ãƒ¼ã‚’ GitLab インスタンス上ã«ä½œæˆã—ã¾ã™ã€‚"
-msgid "Make issue confidential."
-msgstr "課題をéžå…¬é–‹è¨­å®šã«ã™ã‚‹"
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
+msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ロジェクトを所有ã™ã‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。"
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
-msgstr ""
+msgstr "管ç†"
msgid "Manage Git repositories with fine-grained access controls that keep your code secure. Perform code reviews and enhance collaboration with merge requests. Each project can also have an issue tracker and a wiki."
msgstr "ã‚ãªãŸã®ã‚³ãƒ¼ãƒ‰ã‚’安全ã«ä¿ã¤ãŸã‚ã«ã€ã‚¢ã‚¯ã‚»ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã§ Git リãƒã‚¸ãƒˆãƒªã‚’管ç†ã—ã¾ã™ã€‚コードレビューを実行ã—ã€ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¨ã®ã‚³ãƒ©ãƒœãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’強化ã—ã¾ã™ã€‚å„プロジェクトã«ã¯ã€èª²é¡Œãƒˆãƒ©ãƒƒã‚«ãƒ¼ã¨ã‚¦ã‚£ã‚­ã‚‚ã‚ã‚Šã¾ã™ã€‚"
@@ -7965,6 +9373,9 @@ msgstr "マニフェストファイルã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "FogBugz アカウントIDã‚’ GitLab ユーザーã«ãƒžãƒƒãƒ—ã™ã‚‹"
@@ -7983,17 +9394,23 @@ msgstr "3月"
msgid "March"
msgstr "3月"
-msgid "Mark as resolved"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
msgstr ""
+msgid "Mark as resolved"
+msgstr "解決済ã«ã™ã‚‹"
+
msgid "Mark comment as resolved"
msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr "ã“ã®èª²é¡Œã‚’別ã®èª²é¡Œã¨é‡è¤‡ã—ã¦ã„ã‚‹ã¨ãƒžãƒ¼ã‚¯ã™ã‚‹"
-msgid "Mark todo as done"
-msgstr "Todo を完了ã«ã™ã‚‹"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr "Markdown"
@@ -8004,15 +9421,66 @@ msgstr "Markdown ヘルプ"
msgid "Markdown enabled"
msgstr "マークダウンを使用ã§ãã¾ã™"
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Maven メタデータ"
@@ -8070,9 +9538,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr "<strong>%{project_name}</strong>ã®ãƒ¡ãƒ³ãƒãƒ¼"
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "マージリクエスト"
@@ -8100,6 +9577,9 @@ msgstr "進行中ã®ãƒžãƒ¼ã‚¸"
msgid "Merge request"
msgstr "マージリクエスト"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "マージリクエスト承èª"
@@ -8112,6 +9592,9 @@ msgstr "マージリクエスト"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "マージリクエストã¨ã¯ã€ãƒ—ロジェクトã«åŠ ãˆãŸå¤‰æ›´ã‚’æ示ã—ã€ãã®å¤‰æ›´ã«ã¤ã„ã¦ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ã¨è©±ã—åˆã†ãŸã‚ã®å ´æ‰€ã§ã™"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr "パイプラインãŒæˆåŠŸã—ãŸã¨ãã«ãƒžãƒ¼ã‚¸"
@@ -8125,10 +9608,10 @@ msgid "MergeConflict|HEAD//our changes"
msgstr ""
msgid "MergeConflict|Use ours"
-msgstr ""
+msgstr "自分ã®å¤‰æ›´ã‚’使用"
msgid "MergeConflict|Use theirs"
-msgstr ""
+msgstr "相手ã®å¤‰æ›´ã‚’使用"
msgid "MergeConflict|conflict"
msgstr "競åˆ"
@@ -8145,18 +9628,6 @@ msgstr "返信を追加"
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "下書ãコメントã®ä¿å­˜ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-msgid "MergeRequests|Discussion stays resolved"
-msgstr "ディスカッションã¯è§£æ±ºã•ã‚ŒãŸã¾ã¾ã§ã™ã€‚"
-
-msgid "MergeRequests|Discussion stays unresolved"
-msgstr "ディスカッションã¯æœªè§£æ±ºã®ã¾ã¾ã§ã™ã€‚"
-
-msgid "MergeRequests|Discussion will be resolved"
-msgstr "ディスカッションã¯è§£æ±ºã•ã‚Œã¾ã™ã€‚"
-
-msgid "MergeRequests|Discussion will be unresolved"
-msgstr "ディスカッションã¯è§£æ±ºã•ã‚Œã¾ã›ã‚“。"
-
msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
@@ -8166,8 +9637,8 @@ msgstr "次ã®æœªè§£æ±ºã®è­°è«–ã«ã‚¸ãƒ£ãƒ³ãƒ—ã™ã‚‹"
msgid "MergeRequests|Reply..."
msgstr "返信..."
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "æ–°ã—ã„課題ã§ã“ã®æ¤œè¨Žã‚’解決ã™ã‚‹"
+msgid "MergeRequests|Resolve this thread in a new issue"
+msgstr ""
msgid "MergeRequests|Saving the comment failed"
msgstr "コメントã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ"
@@ -8175,6 +9646,18 @@ msgstr "コメントã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
+msgid "MergeRequests|Thread stays resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr ""
+
msgid "MergeRequests|Toggle comments for this file"
msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’切り替ãˆã¾ã™"
@@ -8187,19 +9670,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8223,24 +9706,42 @@ msgstr "マージ済ã¿"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "メッセージ"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr "メトリクスã¯æ­£å¸¸ã«è¿½åŠ ã•ã‚Œã¾ã—ãŸã€‚"
msgid "Metric was successfully updated."
msgstr "メトリクスã¯æ­£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "メトリクス"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "メトリクス - Influx"
msgid "Metrics - Prometheus"
msgstr "メトリクス - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr "メトリクスã¨ãƒ—ロファイリング"
@@ -8335,7 +9836,7 @@ msgid "Metrics|You're about to permanently delete this metric. This cannot be un
msgstr ""
msgid "Metrics|e.g. HTTP requests"
-msgstr ""
+msgstr "例: HTTP リクエスト"
msgid "Metrics|e.g. Requests/second"
msgstr ""
@@ -8409,9 +9910,6 @@ msgstr ""
msgid "Minutes"
msgstr "分"
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8451,6 +9949,9 @@ msgstr "キャンセル"
msgid "Modal|Close"
msgstr "é–‰ã˜ã‚‹"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr "コミットメッセージã®ä¿®æ•´"
@@ -8463,7 +9964,7 @@ msgstr "マージコミットを変更"
msgid "Monday"
msgstr "月曜日"
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8475,6 +9976,12 @@ msgstr "月"
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr "ãã®ä»–ã®æ“作"
@@ -8505,6 +10012,12 @@ msgstr "課題を移動"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8514,6 +10027,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8608,6 +10127,9 @@ msgstr "æ–°ã—ã„パスワード"
msgid "New Pipeline Schedule"
msgstr "æ–°è¦ãƒ‘イプラインスケジュール"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "æ–°è¦ã‚¹ãƒ‹ãƒšãƒƒãƒˆ"
@@ -8657,7 +10179,7 @@ msgid "New milestone"
msgstr "æ–°ã—ã„マイルストーン"
msgid "New password"
-msgstr ""
+msgstr "æ–°ã—ã„パスワード"
msgid "New pipelines will cancel older, pending pipelines on the same branch"
msgstr ""
@@ -8693,15 +10215,27 @@ msgid "Newly registered users will by default be external"
msgstr ""
msgid "Next"
+msgstr "次ã¸"
+
+msgid "Next file in diff (MRs only)"
msgstr ""
-msgid "Nickname"
+msgid "Next unresolved discussion (MRs only)"
msgstr ""
+msgid "Nickname"
+msgstr "ニックãƒãƒ¼ãƒ "
+
msgid "No"
msgstr "ã„ã„ãˆ"
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8713,13 +10247,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr "アクティビティã¯ã‚ã‚Šã¾ã›ã‚“"
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8734,9 +10274,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "Gitaly サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ログを確èªã—ã¦ãã ã•ã„ï¼"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr "貢献ãªã—"
@@ -8746,6 +10283,15 @@ msgstr "貢献ãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“。"
msgid "No credit card required."
msgstr "クレジット カードã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“"
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr "詳細ãŒã‚ã‚Šã¾ã›ã‚“"
@@ -8770,12 +10316,18 @@ msgstr ""
msgid "No files found."
msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "ãã®åå‰ã¾ãŸã¯èª¬æ˜Žã®ãƒ©ãƒ™ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
@@ -8804,7 +10356,7 @@ msgid "No other labels with such name or description"
msgstr "ãã®ä»–ã«ã€ãã®åå‰ã¾ãŸã¯èª¬æ˜Žã®ãƒ©ãƒ™ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
msgid "No parent group"
-msgstr ""
+msgstr "親グループã¯ã‚ã‚Šã¾ã›ã‚“"
msgid "No preview for this file type"
msgstr ""
@@ -8830,9 +10382,15 @@ msgstr "Runner ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
msgid "No schedules"
msgstr "スケジュールãªã—"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr "開始日ãªã—"
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8842,6 +10400,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8854,6 +10415,9 @@ msgstr "ノード"
msgid "None"
msgstr "ãªã—"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "利用ã§ãã¾ã›ã‚“"
@@ -8870,6 +10434,9 @@ msgid "Not enough data"
msgstr "データä¸è¶³"
msgid "Not found."
+msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“。"
+
+msgid "Not helpful"
msgstr ""
msgid "Not now"
@@ -8881,6 +10448,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8896,6 +10466,9 @@ msgstr "注: GitLab ã®ç®¡ç†è€…ã«%{github_integration_link} を設定ã—ã¦ã€
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "注: GitLab ã®ç®¡ç†è€…ã«%{github_integration_link} を設定ã—ã¦ã€GitHub 経由ã®ãƒ­ã‚°ã‚¤ãƒ³ãŒè¨±å¯ã—ã€å€‹äººç”¨ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã›ãšã«ãƒªãƒã‚¸ãƒˆãƒªã‚’インãƒãƒ¼ãƒˆã§ããªã„ã‹å•ã„åˆã‚ã›ãã ã•ã„。"
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -8992,6 +10565,9 @@ msgstr ""
msgid "Notifications"
msgstr "通知"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "通知オフ"
@@ -9010,9 +10586,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "OK"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9028,6 +10616,9 @@ msgstr "フィルター"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9056,6 +10647,12 @@ msgstr "1ã¤ä»¥ä¸Šã® Google コードプロジェクトを GitLab ã«ç›´æŽ¥ã‚¤ã
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr "管ç†è€…ã®ã¿"
@@ -9080,6 +10677,12 @@ msgstr "プロジェクトメンãƒãƒ¼ã®ã¿ãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚ã‚°
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9089,6 +10692,9 @@ msgstr "é–‹ã"
msgid "Open Documentation"
msgstr "ドキュメントを開ã"
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr "コメントタイプドロップダウンを開ã"
@@ -9098,6 +10704,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr "Xcode ã§é–‹ã"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr "プロジェクトを開ã"
@@ -9179,6 +10791,12 @@ msgstr "ãã®ä»–ã®æƒ…å ±"
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9203,6 +10821,18 @@ msgstr "パッケージ情報"
msgid "Package was removed"
msgstr "パッケージãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "パッケージ"
@@ -9239,15 +10869,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr "最後 »"
-msgid "Pagination|Next"
-msgstr "次ページ"
-
-msgid "Pagination|Prev"
-msgstr "å‰ãƒšãƒ¼ã‚¸"
+msgid "Pagination|Next ›"
+msgstr ""
msgid "Pagination|« First"
msgstr "« 最åˆ"
+msgid "Pagination|‹ Prev"
+msgstr ""
+
msgid "Parameter"
msgstr "パラメーター"
@@ -9317,9 +10947,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "パスã®å¤‰æ›´ã€è»¢é€ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®å‰Šé™¤ãªã©ã®é«˜åº¦ãªã‚ªãƒ—ションを実行ã—ã¾ã™ã€‚"
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr "パフォーマンスã®æœ€é©åŒ–"
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr "権é™"
@@ -9347,12 +10995,21 @@ msgstr ""
msgid "Pick a name"
msgstr "åå‰ã‚’é¸æŠž"
-msgid "Pin code"
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
msgstr ""
+msgid "Pin code"
+msgstr "PINコード"
+
msgid "Pipeline"
msgstr "パイプライン"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "パイプラインスケジュール"
@@ -9419,8 +11076,8 @@ msgstr "変数"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "カスタム"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
-msgstr "コミット:%{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
+msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
msgstr "パイプライン:%{ci_status}"
@@ -9443,12 +11100,21 @@ msgstr "先週ã®ãƒ‘イプライン"
msgid "Pipelines for last year"
msgstr "昨年ã®ãƒ‘イプライン"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr "API"
@@ -9497,15 +11163,30 @@ msgstr "ã“ã®ãƒ—ロジェクトã¯ç¾åœ¨ãƒ‘イプラインを実行ã™ã‚‹ã‚ˆã†
msgid "Pipeline|Commit"
msgstr "コミット"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr "ã‚«ãƒãƒ¬ãƒƒã‚¸"
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr "期間"
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "パイプライン"
@@ -9536,6 +11217,9 @@ msgstr "#%{pipelineId} パイプラインをåœæ­¢ã—ã¾ã™ã‹ï¼Ÿ"
msgid "Pipeline|Triggerer"
msgstr "トリガー"
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr "変数"
@@ -9548,18 +11232,12 @@ msgstr "全件"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "æˆåŠŸ"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "ステージã‚ã‚Š"
@@ -9590,6 +11268,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr "コメントã™ã‚‹ã«ã¯ %{link_to_register} ã¾ãŸã¯ %{link_to_sign_in} ã‚’ã—ã¦ãã ã•ã„"
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "続ã‘ã‚‹å‰ã«ã€åˆ©ç”¨è¦ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
@@ -9608,6 +11289,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9695,6 +11379,9 @@ msgstr "リãƒã‚¸ãƒˆãƒªã«æŽ¥ç¶šã§ãã‚‹ã¾ã§ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "リãƒã‚¸ãƒˆãƒªã‚’インãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã®ã§ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。完了ã™ã‚‹ã¨ã€ç”»é¢ãŒè‡ªå‹•çš„ã«æ›´æ–°ã•ã‚Œã¾ã™ã€‚"
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "基本設定"
@@ -9704,7 +11391,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9731,6 +11418,9 @@ msgstr "ナビゲーションテーマ"
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9788,6 +11478,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "プライマリ"
@@ -9824,6 +11520,21 @@ msgstr "ã‚ãªãŸå€‹äººã®åå‰ç©ºé–“ã«ãƒ—ライベートプロジェクトを
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "プロフィール"
@@ -9938,6 +11649,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr "フルãƒãƒ¼ãƒ "
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -9966,10 +11680,10 @@ msgid "Profiles|Made a private contribution"
msgstr ""
msgid "Profiles|Main settings"
-msgstr ""
+msgstr "メインã®è¨­å®š"
msgid "Profiles|No file chosen"
-msgstr ""
+msgstr "ファイルãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“"
msgid "Profiles|Notification email"
msgstr ""
@@ -9980,6 +11694,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr "パス"
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10010,6 +11727,9 @@ msgstr "ソーシャルサインイン"
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr "250文字未満ã§è‡ªå·±ç´¹ä»‹ã—ã¦ãã ã•ã„"
@@ -10026,7 +11746,7 @@ msgid "Profiles|This email will be used for web based operations, such as edits
msgstr ""
msgid "Profiles|This emoji and message will appear on your profile and throughout the interface."
-msgstr ""
+msgstr "ã“ã®çµµæ–‡å­—ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ã‚ãªãŸã®ãƒ—ロフィールã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹å…¨ä½“ã«è¡¨ç¤ºã—ã¾ã™ã€‚"
msgid "Profiles|This information will appear on your profile"
msgstr "ã“ã®æƒ…報をプロフィールã«è¡¨ç¤ºã—ã¾ã™"
@@ -10115,6 +11835,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr "例:MacBook ã®ã‚­ãƒ¼"
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr "ユーザーå"
@@ -10160,6 +11886,9 @@ msgstr "'%{project_name}' プロジェクトã¯æ­£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚
msgid "Project Badges"
msgstr "プロジェクトãƒãƒƒã‚¸"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10169,6 +11898,9 @@ msgstr "プロジェクト㮠URL"
msgid "Project access must be granted explicitly to each user."
msgstr "ユーザーã”ã¨ã«ãƒ—ロジェクトアクセスã®æ¨©é™ã‚’指定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10220,9 +11952,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr "プロジェクト:"
-
msgid "Project: %{name}"
msgstr ""
@@ -10265,6 +11994,12 @@ msgstr "ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã¸ç§»å‹•"
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10283,13 +12018,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10298,6 +12063,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr "ãƒãƒƒã‚¸"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "ã“ã®è¨­å®šã‚’変更ã™ã‚‹ã«ã¯ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。"
@@ -10469,10 +12240,58 @@ msgstr "検索æ¡ä»¶ã«ä¸€è‡´ã—ãŸãƒ—ロジェクトã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "ã“ã®æ©Ÿèƒ½ã«ã¯ãƒ–ラウザー㫠localStorage サãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™"
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10490,9 +12309,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10526,6 +12342,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr "カスタムメトリクス"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10556,6 +12375,9 @@ msgstr "詳細情報"
msgid "PrometheusService|New metric"
msgstr "æ–°è¦ãƒ¡ãƒˆãƒªã‚¯ã‚¹"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Prometheus API ã®ãƒ™ãƒ¼ã‚¹ URLã€ä¾‹:http://prometheus.example.com/"
@@ -10580,6 +12402,12 @@ msgstr ""
msgid "Promote"
msgstr "昇格"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "ã“れらã®ãƒ—ロジェクトマイルストーンをグループマイルストーンã«æ˜‡æ ¼ã™ã‚‹"
@@ -10598,6 +12426,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr "次回ã‹ã‚‰ã¯ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ãªã„"
@@ -10628,6 +12459,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10703,6 +12537,9 @@ msgstr "公開パイプライン"
msgid "Pull"
msgstr "プル"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "プッシュ"
@@ -10796,6 +12633,9 @@ msgstr "README"
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "続ãを読む"
@@ -10805,9 +12645,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "プロジェクトã®æ¨©é™ã«ã¤ã„ã¦ã¯ <strong>%{link_to_help}</strong> ã‚’å‚ç…§"
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "リアルタイム機能"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10817,6 +12666,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10884,9 +12736,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "レジストリ"
-
msgid "Related Deployed Jobs"
msgstr "関連ã™ã‚‹ãƒ‡ãƒ—ロイ済ジョブ"
@@ -10914,6 +12763,9 @@ msgstr "リリース"
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "後ã§é€šçŸ¥"
@@ -10923,9 +12775,15 @@ msgstr ""
msgid "Remove"
msgstr "削除"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr "Runner を削除"
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr "æ–°ã—ã„コミットãŒã‚½ãƒ¼ã‚¹ãƒ–ランãƒã«ãƒ—ッシュã•ã‚ŒãŸã¨ãã«ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ã™ã¹ã¦ã®æ‰¿èªã‚’削除ã™ã‚‹"
@@ -10947,6 +12805,9 @@ msgstr ""
msgid "Remove avatar"
msgstr "ã‚¢ãƒã‚¿ãƒ¼ã‚’削除"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -10956,12 +12817,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "優先度を削除"
@@ -10971,30 +12841,75 @@ msgstr "プロジェクトを削除"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11028,6 +12943,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr "マイルストーンをå†é–‹"
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr "èªè¨¼ã®ä¿®å¾©"
@@ -11037,12 +12961,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr "コメントã«è¿”ä¿¡"
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr "リãƒã‚¸ãƒˆãƒª URL"
@@ -11109,6 +13042,9 @@ msgstr ""
msgid "Repository"
msgstr "リãƒã‚¸ãƒˆãƒª"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11133,9 +13069,15 @@ msgstr "リãƒã‚¸ãƒˆãƒªã®ä¿å®ˆ"
msgid "Repository mirror"
msgstr "リãƒã‚¸ãƒˆãƒªãƒŸãƒ©ãƒ¼"
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr "リãƒã‚¸ãƒˆãƒªã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "é¸æŠž"
@@ -11148,6 +13090,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11163,6 +13108,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11177,6 +13125,9 @@ msgstr ""
msgid "Resend invite"
msgstr "招待をå†é€ä¿¡"
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr "èªè¨¼ã‚­ãƒ¼ã‚’リセット"
@@ -11192,10 +13143,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr "Runner 登録トークンをリセット"
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11204,6 +13161,9 @@ msgstr "ソースブランãƒã§ã®ç«¶åˆã‚’解決ã™ã‚‹"
msgid "Resolve discussion"
msgstr "検討を解決"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr "解決済ã¿"
@@ -11252,6 +13212,9 @@ msgstr "ターミナルをå†èµ·å‹•"
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr "å†é–‹"
@@ -11316,6 +13279,9 @@ msgstr ""
msgid "Roadmap"
msgstr "ロードマップ"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "外部リãƒã‚¸ãƒˆãƒªç”¨ CI/CD パイプラインを実行"
@@ -11376,7 +13342,7 @@ msgstr "Runner ã®ãƒšãƒ¼ã‚¸"
msgid "Runners page."
msgstr "Runner ã®ãƒšãƒ¼ã‚¸ã€‚"
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11451,6 +13417,9 @@ msgstr "パイプラインスケジュールをä¿å­˜"
msgid "Save variables"
msgstr "変数をä¿å­˜ã™ã‚‹"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11460,6 +13429,9 @@ msgstr "æ–°ã—ã„パイプラインã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆ"
msgid "Scheduled"
msgstr "スケジュール済"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "スケジュール"
@@ -11481,15 +13453,30 @@ msgstr "スコープ付課題ボード"
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr "最下部ã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«"
msgid "Scroll to top"
msgstr "最上部ã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«"
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "検索"
@@ -11506,10 +13493,10 @@ msgid "Search files"
msgstr "ファイルã®æ¤œç´¢"
msgid "Search for a LDAP group"
-msgstr ""
+msgstr "LDAP グループを検索"
msgid "Search for a group"
-msgstr ""
+msgstr "グループを検索"
msgid "Search for a user"
msgstr "ユーザーを検索"
@@ -11577,9 +13564,65 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11592,6 +13635,9 @@ msgstr ""
msgid "Security"
msgstr "セキュリティ"
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr "セキュリティダッシュボード"
@@ -11607,24 +13653,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr "脆弱性を無視ã™ã‚‹"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr "マージリクエストã®ä½œæˆä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11652,6 +13722,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11679,6 +13752,9 @@ msgstr "é¸æŠž"
msgid "Select Archive Format"
msgstr "アーカイブã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’é¸æŠž"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11688,12 +13764,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr "プロジェクトをフォークã™ã‚‹åå‰ç©ºé–“ã‚’é¸æŠžã—ã¦ãã ã•ã„"
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11706,6 +13788,9 @@ msgstr "テンプレートリãƒã‚¸ãƒˆãƒªã‚’é¸æŠž"
msgid "Select a timezone"
msgstr "タイムゾーンをé¸æŠž"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "既存㮠Kubernetes クラスターをé¸æŠžã™ã‚‹ã‹ã€æ–°ã—ã„ã‚‚ã®ã‚’作æˆ"
@@ -11715,8 +13800,17 @@ msgstr "ブランãƒãƒ»ã‚¿ã‚°é¸æŠž"
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
-msgstr "招待ã™ã‚‹ãƒ¡ãƒ³ãƒãƒ¼ã‚’é¸æŠž"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
+msgstr ""
msgid "Select project"
msgstr "プロジェクトã®é¸æŠž"
@@ -11727,9 +13821,12 @@ msgstr "マシンタイプをé¸æŠžã™ã‚‹ãŸã‚ã«ã€ãƒ—ロジェクトã¨ã‚¾ãƒ¼
msgid "Select project to choose zone"
msgstr ""
-msgid "Select projects you want to import."
+msgid "Select projects"
msgstr ""
+msgid "Select projects you want to import."
+msgstr "インãƒãƒ¼ãƒˆå¯¾è±¡ã®ãƒ—ロジェクトをé¸æŠžã—ã¾ã™ã€‚"
+
msgid "Select source branch"
msgstr "ソースブランãƒã‚’é¸æŠž"
@@ -11742,14 +13839,20 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "GitLab ユーザーをé¸æŠžã™ã‚‹ã¨ã€GitLab ユーザーã¸ã®ãƒªãƒ³ã‚¯ãŒèª²é¡Œã‚„コメントã®èª¬æ˜Žã«è¿½åŠ ã•ã‚Œã¾ã™ (例:\"By <a href=\"#\">@johnsmith</a>\")。ã¾ãŸã€ã“れらã®èª²é¡Œã‚„コメントをé¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢é€£ä»˜ã‘や割り当ã¦ãŒã§ãã¾ã™ã€‚"
-msgid "Send an email notification to Developers."
-msgstr "開発者ã«ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚’é€ä¿¡ã™ã‚‹"
+msgid "Send a separate email notification to Developers."
+msgstr ""
msgid "Send confirmation email"
msgstr ""
@@ -11775,6 +13878,12 @@ msgstr ""
msgid "September"
msgstr "9月"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11802,6 +13911,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11832,9 +13944,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr "利用å¯èƒ½ãªæ©Ÿèƒ½ã¯ã‚ã‚Šã¾ã›ã‚“"
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr "ç¾åœ¨ Knative ã‹ã‚‰å…¥æ‰‹å¯èƒ½ãªæ©Ÿèƒ½ãƒ‡ãƒ¼ã‚¿ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã„ãã¤ã‹ç†ç”±ãŒè€ƒãˆã‚‰ã‚Œã¾ã™:"
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11853,6 +13977,9 @@ msgstr "セッション期間 (分)"
msgid "Session expiration, projects limit and attachment size."
msgstr "セッションã®æœ‰åŠ¹æœŸé™ã€ãƒ—ロジェクトã®ä¸Šé™ã€æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚µã‚¤ã‚º"
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11886,12 +14013,24 @@ msgstr "æ–°ã—ã„パスワードを設定"
msgid "Set notification email for abuse reports."
msgstr "迷惑行為レãƒãƒ¼ãƒˆã®é€šçŸ¥ãƒ¡ãƒ¼ãƒ«ã‚’設定ã™ã‚‹ã€‚"
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "ユーザーãŒã‚µã‚¤ãƒ³ã‚¤ãƒ³ã™ã‚‹ãŸã‚ã®è¦ä»¶ã‚’設定ã—ã¾ã™ã€‚å¿…é ˆã®äºŒè¦ç´ èªè¨¼ã‚’有効ã«ã—ã¾ã™ã€‚"
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11901,16 +14040,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "CI/CD を設定"
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11928,11 +14073,14 @@ msgstr ""
msgid "Set weight"
msgstr "ウェイトを設定"
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "パスワードを設定"
msgid "SetStatusModal|Add status emoji"
-msgstr ""
+msgstr "ステータス絵文字ã®è¿½åŠ "
msgid "SetStatusModal|Clear status"
msgstr "ステータスをåˆæœŸåŒ–"
@@ -11955,6 +14103,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12012,9 +14166,15 @@ msgstr "アーカイブã—ãŸãƒ—ロジェクトã®ã¿ã‚’表示"
msgid "Show command"
msgstr "コマンドを表示"
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr "コメントã®ã¿è¡¨ç¤º"
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr "完全ãªç”Ÿãƒ­ã‚°ã‚’表示ã™ã‚‹"
@@ -12037,6 +14197,18 @@ msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "%d ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’表示中"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr "並列"
@@ -12067,6 +14239,9 @@ msgstr "スマートカードを使ã£ã¦ã‚µã‚¤ãƒ³ã‚¤ãƒ³"
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr "シングルサインオンã§ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã™ã‚‹"
@@ -12079,6 +14254,9 @@ msgstr "サインアウト"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12088,6 +14266,12 @@ msgstr "サインインã®åˆ¶é™"
msgid "Sign-up restrictions"
msgstr "サインアップã®åˆ¶é™"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12112,6 +14296,9 @@ msgstr "é¡žä¼¼ã®èª²é¡Œ"
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr "サイズ"
@@ -12130,6 +14317,21 @@ msgstr "Slack アプリケーション"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12163,9 +14365,15 @@ msgstr "表示ã™ã‚‹ã‚¹ãƒ‹ãƒšãƒƒãƒˆã¯ã‚ã‚Šã¾ã›ã‚“。"
msgid "SnippetsEmptyState|They can be either public or private."
msgstr "公開ã¾ãŸã¯éžå…¬é–‹ã«è¨­å®šã§ãã¾ã™ã€‚"
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr "一部ã®ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒãƒ¼ã¯ã€ãƒ¡ãƒ¼ãƒ«é€ä¿¡è€…åã®ä¸Šæ›¸ãをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ä»£ã‚ã‚Šã«ãƒ¡ãƒ¼ãƒ«æœ¬æ–‡ã«èª²é¡Œã€ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã€ã¾ãŸã¯ã‚³ãƒ¡ãƒ³ãƒˆã®ä½œæˆè€…ã®åå‰ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr "ã‚ãªãŸã®ç·¨é›†ã¨åŒæ™‚ã«èª°ã‹ãŒã“ã® %{issueType} を編集ã—ãŸãŸã‚ã€èª¬æ˜ŽãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ç·¨é›†ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
@@ -12196,6 +14404,9 @@ msgstr "ボタンã®åˆ‡ã‚Šæ›¿ãˆä¸­ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸ"
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12205,6 +14416,12 @@ msgstr "%{issuable} を解決中ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã‚ã¨ã§ã‚‚ã†
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "%{listType} ã®ãƒªã‚¹ãƒˆå–得中ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸ"
@@ -12238,6 +14455,9 @@ msgstr "%{issuable} ã®å†é–‹å‡¦ç†ä¸­ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã‚ã¨ã§
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "ã“ã®æ¤œè¨Žã‚’解決ã—ã¦ã„ã‚‹ã¨ãã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。"
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12289,6 +14509,9 @@ msgstr "期é™ã®é…ã„é †"
msgid "SortOptions|Due soon"
msgstr "期é™ã®è¿‘ã„é †"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "ラベルã®å„ªå…ˆåº¦é †"
@@ -12358,6 +14581,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr "サインイン順"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "å¤ã„æ›´æ–°é †"
@@ -12373,6 +14599,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr "最近ã®ã‚µã‚¤ãƒ³ã‚¤ãƒ³é †"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12451,6 +14683,9 @@ msgstr "ステージ済㿠%{type}"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "優先ラベルã«ã™ã‚‹ã«ã¯ã€ãƒ©ãƒ™ãƒ«ã«ã‚¹ã‚¿ãƒ¼ã‚’付ã‘ã¾ã™ã€‚ドラッグã—ã¦ã€å„ªå…ˆé †ä½ã‚’並ã¹æ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12472,21 +14707,27 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
+msgid "Starrers"
+msgstr ""
+
msgid "Stars"
msgstr "スター"
msgid "Start GitLab Ultimate trial"
msgstr ""
-msgid "Start Indexing"
-msgstr ""
-
msgid "Start Web Terminal"
msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "ã“ã®å¤‰æ›´ã§ %{new_merge_request} を作æˆã™ã‚‹"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12496,29 +14737,38 @@ msgstr ""
msgid "Start and due date"
msgstr "開始日ã¨çµ‚了日"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr "開始日"
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
+msgstr "Runner ã‚’èµ·å‹•!"
+
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
-msgstr "Runner ã‚’èµ·å‹•!"
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
msgid "Start your trial"
msgstr ""
@@ -12544,12 +14794,18 @@ msgstr "開始時刻 (UTC)"
msgid "State your message to activate"
msgstr "メッセージを有効ã«ã™ã‚‹"
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "状態"
msgid "Status:"
msgstr "ステータス:"
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr "ターミナルをåœæ­¢"
@@ -12580,6 +14836,18 @@ msgstr "ストレージ:"
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "サブグループ"
@@ -12595,6 +14863,9 @@ msgstr "スパムã¨ã—ã¦å ±å‘Š"
msgid "Submit feedback"
msgstr "フィードãƒãƒƒã‚¯ã‚’é€ä¿¡"
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12619,6 +14890,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12631,9 +14908,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr "GitLab.com %{planName} %{suffix}"
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12694,6 +14968,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12787,9 +15064,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr "日曜日"
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12847,6 +15130,12 @@ msgstr "タグ一覧:"
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "ã‚¿ã‚°"
@@ -12941,7 +15230,7 @@ msgid "Team"
msgstr "ãƒãƒ¼ãƒ "
msgid "Team domain"
-msgstr ""
+msgstr "ãƒãƒ¼ãƒ ãƒ‰ãƒ¡ã‚¤ãƒ³"
msgid "Template"
msgstr "テンプレート"
@@ -13000,6 +15289,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13013,6 +15305,9 @@ msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "GitLab ã®é«˜åº¦ãªã‚°ãƒ­ãƒ¼ãƒãƒ«æ¤œç´¢ã¯ã€æ™‚間を節約ã§ãる強力ãªæ¤œç´¢ã‚µãƒ¼ãƒ“スã§ã™ã€‚é‡è¤‡ã—ãŸã‚³ãƒ¼ãƒ‰ã®ä½œæˆã‚’ã—ã¦æ™‚間を無駄ã«ã™ã‚‹ã“ã¨ãªãã€è‡ªèº«ã®ãƒ—ロジェクトã®åŠ©ã‘ã¨ãªã‚‹å¤–ã®ãƒãƒ¼ãƒ ã®ã‚³ãƒ¼ãƒ‰ã‚’検索ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚"
@@ -13037,9 +15332,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13064,6 +15356,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13100,9 +15398,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "インãƒãƒ¼ãƒˆã¯ %{timeout} ã§ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã™ã€‚タイムアウトã™ã‚‹ãƒªãƒã‚¸ãƒˆãƒªã§ã¯ã€clone/push を組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã—ã¦ãã ã•ã„。"
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13217,8 +15512,8 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "リãƒã‚¸ãƒˆãƒªã«ã¯ã€<code>http://</code>〠<code>https://</code> ã¾ãŸã¯ <code>git://</code>ã§æŽ¥ç¶šã§ããªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "リãƒã‚¸ãƒˆãƒªã¯ <code>http://</code> プロトコルã«ã‚‚ã€<code>https://</code> プロトコルã«ã‚‚ã€<code>ssh://</code> プロトコルã«ã‚‚ã€<code>git://</code> プロトコルã«ã‚‚接続ã•ã‚Œã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚"
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "レビューステージã¨ã¯ã€ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’作æˆã—ã¦ã‹ã‚‰ãƒžãƒ¼ã‚¸ã™ã‚‹ã¾ã§ã®æ™‚é–“ã§ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã¯æœ€åˆã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒãƒžãƒ¼ã‚¸ã•ã‚ŒãŸã¨ãã«è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚"
@@ -13244,7 +15539,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "ステージングステージã§ã¯ã€ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒãƒžãƒ¼ã‚¸ã•ã‚Œã¦ã‹ã‚‰ã‚³ãƒ¼ãƒ‰ãŒãƒ—ロダクション環境ã«ãƒ‡ãƒ—ロイã•ã‚Œã‚‹ã¾ã§ã®æ™‚é–“ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã¯æœ€åˆã«ãƒ—ロダクションã«ãƒ‡ãƒ—ロイã—ãŸã¨ãã«è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚"
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13253,7 +15548,7 @@ msgstr "テスティングステージã§ã¯ã€GitLab CI ãŒé–¢é€£ã™ã‚‹ãƒžãƒ¼ã‚
msgid "The time taken by each data entry gathered by that stage."
msgstr "ã“ã®ã‚¹ãƒ†ãƒ¼ã‚¸ã«åŽé›†ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿æ¯Žã®æ™‚é–“"
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13277,7 +15572,7 @@ msgstr "ユーザーマップã¯ã€ã‚ãªãŸã®ãƒ—ロジェクトã«å‚加ã—ãŸ
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "ユーザーマップã¯ã€ã‚ãªãŸã®ãƒ—ロジェクトã«å‚加ã—㟠FogBugz ユーザーã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’ GitLab ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹æ™‚ã«ãƒžãƒƒãƒ”ングã—ã¾ã™ã€‚ã“れを変更ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®è¡¨ã«å…¥åŠ›ã—ã¾ã™ã€‚"
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13313,9 +15608,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "表示ã™ã‚‹èª²é¡ŒãŒã‚ã‚Šã¾ã›ã‚“"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr "ã¾ã ãƒ©ãƒ™ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr "オープン中ã®èª²é¡Œã¯ã‚ã‚Šã¾ã›ã‚“"
@@ -13337,6 +15638,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13346,18 +15650,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13382,6 +15689,9 @@ msgstr "通知設定をä¿å­˜ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
msgid "There was an error subscribing to this label."
msgstr "ラベルã®è³¼èª­ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr "メールトークンã®ãƒªã‚»ãƒƒãƒˆä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
@@ -13439,10 +15749,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "編集を開始ã—ã¦ã‹ã‚‰ãƒ–ランãƒãŒæ›´æ–°ã•ã‚Œã¦ã„ã¾ã™ã€‚æ–°ã—ã„ブランãƒã‚’作æˆã—ã¾ã™ã‹ï¼Ÿ"
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13490,6 +15800,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13499,12 +15815,15 @@ msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—"
msgid "This group does not provide any group Runners yet."
msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã¾ã ã‚°ãƒ«ãƒ¼ãƒ— Runner ã‚’æä¾›ã—ã¦ã„ã¾ã›ã‚“。"
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "ã“ã‚Œã¯éžå…¬é–‹ã®èª²é¡Œã§ã™ã€‚"
@@ -13524,6 +15843,9 @@ msgid "This is the maximum number of users that have existed at the same time si
msgstr ""
msgid "This is your current session"
+msgstr "ã“ã‚Œã¯ã‚ãªãŸã®ç¾åœ¨ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã™"
+
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
msgid "This issue is confidential"
@@ -13532,9 +15854,6 @@ msgstr "ã“ã®èª²é¡Œã¯éžå…¬é–‹è¨­å®šã§ã™"
msgid "This issue is locked."
msgstr "ã“ã®èª²é¡Œã¯ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "ã“ã®ã‚¸ãƒ§ãƒ–ã¯ãƒ—ロセスをトリガーã«ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ä¾å­˜ã—ã¾ã™ã€‚多ãã®å ´åˆã€æœ¬ç•ªç’°å¢ƒã¸ã‚³ãƒ¼ãƒ‰ã‚’デプロイã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "ã“ã®ã‚¸ãƒ§ãƒ–ã¯ã€å‰å·¥ç¨‹ã®ã‚¸ãƒ§ãƒ–ãŒæ­£å¸¸çµ‚了ã™ã‚‹ã“ã¨ã§å®Ÿè¡Œã•ã‚Œã¾ã™"
@@ -13589,9 +15908,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr "ã“ã®ã‚¸ãƒ§ãƒ–ã¯æ‰‹å‹•ã«ã‚ˆã‚‹å®Ÿè¡Œã‚’求ã‚ã¦ã„ã¾ã™"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr "ã“ã®ã‚¸ãƒ§ãƒ–ã¯ã‚¿ã‚¤ãƒžãƒ¼çµ‚了後ã«è‡ªå‹•çš„ã«å®Ÿè¡Œã•ã‚Œã¾ã™ã€‚多ãã®å ´åˆæœ¬ç•ªç’°å¢ƒã¸ã®æ®µéšŽçš„ãªãƒ­ãƒ¼ãƒ«ã‚¢ã‚¦ãƒˆãƒ‡ãƒ—ロイã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚スケジュールã•ã‚Œã¦ã„ãªã„ã¨ãã¯æ‰‹å‹•ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«å¤‰æ›ã•ã‚Œã¾ã™ã€‚"
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "空リãƒã‚¸ãƒˆãƒªã‚’作æˆã¾ãŸã¯æ—¢å­˜ãƒªãƒã‚¸ãƒˆãƒªã‚’インãƒãƒ¼ãƒˆã‚’ã—ãªã‘ã‚Œã°ã€ã‚³ãƒ¼ãƒ‰ã®ãƒ—ッシュã¯ã§ãã¾ã›ã‚“。"
@@ -13610,9 +15935,6 @@ msgstr "複数ã®ãƒ—ロジェクト間ã§èª­ã¿è¾¼ã¿ãŒè¨±å¯ã•ã‚Œã¦ã„ãªã„
msgid "This page will be removed in a future release."
msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•ã‚Œã‚‹äºˆå®šã§ã™ã€‚"
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13643,6 +15965,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr "ã“ã®è¨­å®šã¯ã€å„プロジェクトã§ä¸Šæ›¸ãã§ãã¾ã™ã€‚"
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13652,6 +15977,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ ID ãŒã‚ã‚Šã¾ã›ã‚“"
@@ -13673,6 +16001,9 @@ msgstr "ã“ã“ã«ãƒªã‚¹ãƒˆã‚¢ãƒƒãƒ—ã•ã‚Œã¦ã„ã‚‹ã“れらã®ãƒ¡ãƒ¼ãƒ«ã¯è‡ªå‹•
msgid "Thursday"
msgstr "木曜日"
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13691,6 +16022,15 @@ msgstr "マージリクエストãŒä½œæˆã•ã‚Œã¦ã‹ã‚‰ãƒžãƒ¼ã‚¸ã¾ãŸã¯ã‚¯ãƒ­
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "外部サービスã‹ã‚‰ã®å¿œç­”時間(秒å˜ä½ï¼‰ã‚’設定ã—ã¾ã™ã€‚設定時間内ã«å¿œç­”ãŒç„¡ã„å ´åˆã€ã‚¢ã‚¯ã‚»ã‚¹ãŒæ‹’å¦ã•ã‚Œã¾ã™ã€‚"
@@ -13700,6 +16040,9 @@ msgstr "残り時間"
msgid "Time spent"
msgstr "経éŽæ™‚é–“"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "タイムトラッキング"
@@ -13709,12 +16052,21 @@ msgstr "最åˆã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¾ã§ã®æ™‚é–“"
msgid "TimeTrackingEstimated|Est"
msgstr "Est"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "%sæ—¥å‰"
@@ -13838,6 +16190,9 @@ msgstr "ãŸã£ãŸä»Š"
msgid "Timeago|right now"
msgstr "今"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "タイムアウト"
@@ -13867,6 +16222,9 @@ msgstr "タイトルã¨ãƒ•ã‚¡ã‚¤ãƒ«å"
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr "GitLab ã¸"
@@ -13882,6 +16240,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "GitHub リãƒã‚¸ãƒˆãƒªã«æŽ¥ç¶šã™ã‚‹ãŸã‚ã« %{personal_access_token_link} を使用ã§ãã¾ã™ã€‚個人用アクセストークンを作æˆã™ã‚‹ã«ã¯<code>リãƒã‚¸ãƒˆãƒª</code> スコープをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚ŠæŽ¥ç¶šã§ãる公開・éžå…¬é–‹ãƒªãƒã‚¸ãƒˆãƒªã®ä¸€è¦§ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "GitHub リãƒã‚¸ãƒˆãƒªã«æŽ¥ç¶šã™ã‚‹ã«ã¯ã€GitLab ãŒã‚ãªãŸã® GitHub リãƒã‚¸ãƒˆãƒªä¸€è¦§ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™:"
@@ -13909,12 +16270,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "GitHub リãƒã‚¸ãƒˆãƒªã‚’インãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã« %{personal_access_token_link} を使用ã§ãã¾ã™ã€‚個人用アクセストークンを作æˆã™ã‚‹éš›ã¯ã€ <code>repo</code> スコープをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãる公開・éžå…¬é–‹ãƒªãƒã‚¸ãƒˆãƒªã®ä¸€è¦§ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "GitHub リãƒã‚¸ãƒˆãƒªã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€GitLab ãŒã‚ãªãŸã® GitHub リãƒã‚¸ãƒˆãƒªä¸€è¦§ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "SVN リãƒã‚¸ãƒˆãƒªã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€%{svn_link} ã‚’ã”確èªãã ã•ã„。"
@@ -13939,12 +16294,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "Azureã€Oktaã€Oneloginã€Ping Identyã€ã¾ãŸã¯ã‚«ã‚¹ã‚¿ãƒ  SAML 2.0 プロãƒã‚¤ãƒ€ãƒ¼ãªã©ã® ID プロãƒã‚¤ãƒ€ãƒ¼ã‚’利用ã—ã¦ã€ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã® SAML èªè¨¼ã‚’設定ã™ã‚‹ã«ã¯:"
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -13969,24 +16342,27 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr "検索範囲を広ã’ã‚‹ã«ã¯ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’変更ã¾ãŸã¯å‰Šé™¤ã—ã¾ã™ã€‚"
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
msgid "Today"
msgstr "今日"
-msgid "Todo"
-msgstr "Todo"
-
-msgid "Todo was successfully marked as done."
+msgid "Toggle Markdown preview"
msgstr ""
-msgid "Todos"
-msgstr "Todo"
-
msgid "Toggle Sidebar"
msgstr "サイドãƒãƒ¼ã‚’切り替ãˆ"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -13996,11 +16372,8 @@ msgstr ""
msgid "Toggle commit list"
msgstr "コミットリストを切り替ãˆ"
-msgid "Toggle discussion"
-msgstr "検討ã®è¡¨ç¤ºãƒ»éžè¡¨ç¤ºã‚’切り替ãˆã‚‹"
-
msgid "Toggle emoji award"
-msgstr ""
+msgstr "絵文字賞をå—賞"
msgid "Toggle navigation"
msgstr ""
@@ -14011,17 +16384,26 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "サイドãƒãƒ¼ã‚’切り替ãˆ"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "切り替ãˆçŠ¶æ…‹:オフ"
msgid "ToggleButton|Toggle Status: ON"
msgstr "切り替ãˆçŠ¶æ…‹:オン"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
-msgstr "トークン"
+msgid "Toggles :%{name}: emoji award."
+msgstr "切り替ãˆï¼š%{name}:絵文字賞。"
msgid "Tomorrow"
msgstr "明日"
@@ -14041,6 +16423,9 @@ msgstr "ç·è²¢çŒ®åº¦"
msgid "Total Time"
msgstr "åˆè¨ˆæ™‚é–“"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "ã™ã¹ã¦ã®ã‚³ãƒŸãƒƒãƒˆ/マージã®åˆè¨ˆãƒ†ã‚¹ãƒˆæ™‚é–“"
@@ -14059,6 +16444,12 @@ msgstr "プロジェクトãŠã‚ˆã³ãƒžã‚¤ãƒ«ã‚¹ãƒˆãƒ¼ãƒ³å…¨ä½“ã§ã€ãƒ†ãƒ¼ãƒžã‚’
msgid "Track time with quick actions"
msgstr "クイックアクションã§ä½œæ¥­æ™‚間を記録"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14095,9 +16486,6 @@ msgstr "移動先ã®åå‰ç©ºé–“ã«ã€åŒã˜åå‰ã¾ãŸã¯åŒã˜ãƒ‘スをæŒã¤
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14125,9 +16513,6 @@ msgstr "トリガー変数:"
msgid "Trigger was created successfully."
msgstr "トリガーã¯æ­£å¸¸ã«ä½œæˆã•ã‚Œã¾ã—ãŸã€‚"
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr "トリガーã¯æ­£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
@@ -14152,12 +16537,21 @@ msgstr "30日間ã§GitLabãŒæä¾›ã™ã‚‹ã™ã¹ã¦ã®æ©Ÿèƒ½ã‚’試ã—ã¦ã¿ã¦ãã
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr "ç«æ›œæ—¥"
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "サービスデスクを有効ã«ã™ã‚‹"
@@ -14191,6 +16585,18 @@ msgstr ""
msgid "URL"
msgstr "URL"
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14203,6 +16609,9 @@ msgstr "差分を読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。%{button_try_again}"
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14233,6 +16642,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "ä¸æ˜Ž"
@@ -14260,12 +16675,24 @@ msgstr "%{issuableDisplayName} ã®ãƒ­ãƒƒã‚¯ã‚’解除ã—ã¾ã™ã‹ï¼Ÿ <strong>å…¨å
msgid "Unlocked"
msgstr "アンロック済ã¿"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "検討を未解決ã«ã™ã‚‹"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr "ジョブã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’解除"
@@ -14302,6 +16729,15 @@ msgstr "プロジェクトレベルã§è³¼èª­ã‚’解除"
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "未検証"
@@ -14311,15 +16747,27 @@ msgstr "最新"
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "アップデート"
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr "更新失敗"
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr "今ã™ãæ›´æ–°"
@@ -14350,6 +16798,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "更新中"
@@ -14362,6 +16813,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "高度ãªã‚°ãƒ­ãƒ¼ãƒãƒ«æ¤œç´¢ã‚’有効ã«ã™ã‚‹ãŸã‚ã«ãƒ—ランをアップグレードã—ã¾ã™ã€‚"
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "貢献分æžã‚’有効ã«ã™ã‚‹ãŸã‚ã«ã€ãƒ—ランをアップグレードã—ã¾ã™ã€‚"
@@ -14425,6 +16879,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "使用状æ³ã®çµ±è¨ˆ"
@@ -14593,6 +17050,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14605,6 +17065,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14668,7 +17131,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14680,7 +17143,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14695,10 +17158,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14746,6 +17209,12 @@ msgstr "スニペット"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14758,6 +17227,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "ã™ã¹ã¦è¡¨ç¤º"
@@ -14777,7 +17249,7 @@ msgid "UserProfile|Your projects can be available publicly, internally, or priva
msgstr ""
msgid "Username (optional)"
-msgstr ""
+msgstr "ユーザå (オプション)"
msgid "Username is already taken."
msgstr ""
@@ -14785,6 +17257,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "ユーザー"
@@ -14863,6 +17338,9 @@ msgstr "検証済ã¿"
msgid "Version"
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -14941,6 +17419,9 @@ msgstr "å¯è¦–性レベル"
msgid "Visibility level:"
msgstr "å¯è¦–性レベル:"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -14962,34 +17443,49 @@ msgstr "ä¸æ˜Ž"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
msgstr ""
msgid "VisualReviewApp|Review"
-msgstr ""
+msgstr "レビュー"
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
-msgstr "脆弱性ãƒãƒ£ãƒ¼ãƒˆ"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15031,6 +17527,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’å‚ç…§ã—ãŸã„ã§ã™ã‹ï¼Ÿã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ç®¡ç†è€…ã«å•ã„åˆã‚ã›ã¦ãã ã•ã„。"
@@ -15046,10 +17545,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15103,6 +17599,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Runner ãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã‚‹å ´åˆã€ä»–ã®ãƒ—ロジェクトã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
@@ -15116,12 +17615,18 @@ msgid "When this merge request is accepted"
msgid_plural "When these merge requests are accepted"
msgstr[0] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "誰ãŒã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を見れã¾ã™ã‹ï¼Ÿ"
@@ -15131,6 +17636,9 @@ msgstr ""
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15203,15 +17711,9 @@ msgstr "ドキュメント"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "ページ(ã¾ãŸã¯æ–°è¦ãƒšãƒ¼ã‚¸) ã«ãƒªãƒ³ã‚¯ã™ã‚‹ã«ã¯ã€%{link_example} ã¨å…¥åŠ›ã™ã‚‹ã ã‘ã§ã™"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "セットアップ方法"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "ヒント:æ–°ã—ã„ファイルをフルパスã§æŒ‡å®šã—ã¾ã™ã€‚途中ã®å­˜åœ¨ã—ãªã„ディレクトリã¯è‡ªå‹•çš„ã«ä½œæˆã•ã‚Œã¾ã™ã€‚"
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "æ–°ã—ã„ Wiki ページ"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã‚’削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
@@ -15227,20 +17729,17 @@ msgstr "誰ã‹ãŒåŒã˜ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§ãƒšãƒ¼ã‚¸ã‚’編集ã—ã¾ã—ãŸã€‚%{page
msgid "WikiPageConflictMessage|the page"
msgstr "ページ"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "%{page_title} を作æˆ"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "%{page_title} ã‚’æ›´æ–°"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
-msgstr "æžè‘‰ãƒšãƒ¼ã‚¸"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr "ã“ã“ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’記入ã™ã‚‹ã‹ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ドラッグã—ã¦ãã ã•ã„。"
-msgid "Wiki|Create Page"
-msgstr "ページを作æˆ"
+msgid "Wiki|Create New Page"
+msgstr ""
msgid "Wiki|Create page"
msgstr "ページを作æˆ"
@@ -15260,6 +17759,9 @@ msgstr "æ–°ã—ã„ページ"
msgid "Wiki|Page history"
msgstr "ページã®å±¥æ­´"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "ページã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
@@ -15290,6 +17792,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr "コメントを書ãã‹ã€ã“ã“ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ドラッグ…"
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15326,6 +17831,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15380,6 +17888,9 @@ msgstr "ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®å‚加をリクエストã™ã‚‹ã“ã¨ã§ã€
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Kubernetes クラスター㫠Runner ã‚’ç°¡å˜ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚%{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15404,7 +17915,10 @@ msgstr "ファイルを追加ã™ã‚‹ã«ã¯ã€ã©ã“ã‹ã®ãƒ–ランãƒã«ã„ãªã‘
msgid "You can only edit files when you are on a branch"
msgstr "ファイルを編集ã™ã‚‹ã«ã¯ã€ã©ã“ã‹ã®ãƒ–ランãƒã«ã„ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15425,6 +17939,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "%{linkStart} CI Lint %{linkEnd} ã§.gitlab-ci.ymlをテストã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15446,9 +17963,6 @@ msgstr "ã“ã®èª­ã¿å–り専用 GitLab インスタンスã«ã¯æ›¸ã込むã“ã
msgid "You could not create a new trigger."
msgstr "æ–°ã—ã„トリガーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr "ã‚ãªãŸã«ã¯ã‚µãƒ–スクリプションãŒã‚ã‚Šã¾ã›ã‚“"
@@ -15476,6 +17990,18 @@ msgstr "承èªã•ã‚ŒãŸã‚¢ãƒ—リケーションãŒã‚ã‚Šã¾ã›ã‚“"
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15500,6 +18026,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "プロジェクト数ã®ä¸Šé™ã«é”ã—ã¦ã„ã¾ã™"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15519,7 +18051,7 @@ msgid "You must provide a valid current password"
msgstr ""
msgid "You must provide your current password in order to change it."
-msgstr ""
+msgstr "パスワードを変更ã™ã‚‹ã«ã¯ã€ç¾åœ¨ã®ãƒ‘スワードを入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
msgid "You need a different license to enable FileLocks feature"
msgstr "ファイルロック機能を有効ã«ã™ã‚‹ã«ã¯åˆ¥ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ãŒå¿…è¦ã§ã™"
@@ -15585,11 +18117,14 @@ msgid "You won't be able to pull or push project code via SSH until you add an S
msgstr "SSH éµã‚’プロフィールã«è¿½åŠ ã—ãªã„é™ã‚Šã€SSH 経由ã§ãƒ—ロジェクトã®ã‚³ãƒ¼ãƒ‰ã‚’プルã—ãŸã‚Šãƒ—ッシュã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"
msgid "You'll be signed out from your current account automatically."
-msgstr ""
+msgstr "ç¾åœ¨ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰è‡ªå‹•çš„ã«ã‚µã‚¤ãƒ³ã‚¢ã‚¦ãƒˆã•ã‚Œã¾ã™ã€‚"
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "有効ãªæ¯”較を行ã†ãŸã‚ã«ã¯ã€ç•°ãªã‚‹ãƒ–ランãƒåを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15629,6 +18164,9 @@ msgstr ""
msgid "Your Groups"
msgstr "所属グループ"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15644,8 +18182,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "ã‚ãªãŸã®Todo"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15716,6 +18254,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15728,12 +18269,21 @@ msgstr "ã‚ãªãŸã®ãƒ—ロジェクト"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "削除ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼"
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "å‰"
@@ -15749,6 +18299,9 @@ msgstr ""
msgid "among other things"
msgstr "ãã®ä»–ã®ã‚‚ã®"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr "æ–°ã—ã„ファイルを添付"
@@ -15767,6 +18320,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15776,6 +18335,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}コンテナスキャンã®è©³ç´°%{linkEndTag}"
@@ -15875,6 +18437,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr "クラス"
@@ -15893,11 +18458,11 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "コンテナスキャンã¯ã€Docker イメージã«å­˜åœ¨ã™ã‚‹æ—¢çŸ¥ã®è„†å¼±æ€§ã‚’検出ã—ã¾ã™ã€‚"
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
-msgstr "マージリクエストを作æˆ"
+msgid "ciReport|Create issue"
+msgstr ""
msgid "ciReport|DAST"
msgstr "DAST"
@@ -15914,10 +18479,10 @@ msgstr "ä¾å­˜é–¢ä¿‚スキャン"
msgid "ciReport|Description"
msgstr "説明"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -15938,31 +18503,14 @@ msgstr "識別å­"
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr "インスタンス"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "セキュリティレãƒãƒ¼ãƒˆ (Alpha) ã¨ã®ç›¸äº’作用ã®è©³ç´°ã‚’ã”覧ãã ã•ã„。"
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "ライセンス管ç†ã¯ã€ã“ã®ã‚½ãƒ¼ã‚¹ãƒ–ランãƒã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’ %d 件検出ã—ã¾ã—ãŸã€‚"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "ライセンス管ç†ã¯ã€æ–°ãŸãªãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’ %d 件検出ã—ã¾ã—ãŸã€‚"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "ライセンス管ç†ã¯ã€ã“ã®ã‚½ãƒ¼ã‚¹ãƒ–ランãƒã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’検出ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "ライセンス管ç†ã«ã‚ˆã£ã¦ã€æ–°ãŸãªãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’検出ã—ã¾ã›ã‚“ã§ã—ãŸ"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr ""
msgid "ciReport|Links"
msgstr "リンク"
@@ -15988,6 +18536,9 @@ msgstr "パーフォーマンスメトリクスã«å¤‰æ›´ã¯ã‚ã‚Šã¾ã›ã‚“"
msgid "ciReport|Performance metrics"
msgstr "パフォーマンスメトリクス"
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16046,6 +18597,9 @@ msgstr[0] ""
msgid "ciReport|View full report"
msgstr "レãƒãƒ¼ãƒˆå…¨ä½“を見る"
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16088,6 +18642,9 @@ msgstr "接続中"
msgid "could not read private key, is the passphrase correct?"
msgstr "秘密éµã‚’読ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚パスフレーズã¯æ­£ã—ã„ã§ã™ã‹ï¼Ÿ"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr "カスタマイズ"
@@ -16101,8 +18658,11 @@ msgstr[0] "æ—¥"
msgid "deleted"
msgstr ""
-msgid "deploy token"
-msgstr "デプロイトークン"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
msgid "detached"
msgstr ""
@@ -16110,10 +18670,6 @@ msgstr ""
msgid "disabled"
msgstr "無効"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-
msgid "done"
msgstr "完了"
@@ -16121,17 +18677,29 @@ msgid "draft"
msgid_plural "drafts"
msgstr[0] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "有効"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
-msgstr "エピック"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
+msgstr ""
msgid "error"
msgstr "エラー"
@@ -16175,6 +18743,9 @@ msgstr "グループ"
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "ã“ã“"
@@ -16218,21 +18789,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "ã¯æœ‰åŠ¹ãª X509 証明書ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr "課題"
-msgid "issue boards"
-msgstr "課題ボード"
-
msgid "it is stored externally"
msgstr ""
@@ -16257,15 +18828,24 @@ msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
-msgstr "ライセンス管ç†"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "%{path_lock_user_name} ã«ã‚ˆã£ã¦ %{created_at} ã«ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr "マニュアル"
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "マージリクエスト"
@@ -16285,6 +18865,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "ブランãƒã‚’復元ã™ã‚‹ã‹ã€åˆ¥ã® %{missingBranchName} ブランãƒã‚’使用ã—ã¦ãã ã•ã„"
@@ -16319,7 +18908,7 @@ msgid "mrWidget|An error occurred while submitting your approval."
msgstr "承èªã‚’é€ä¿¡ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
msgid "mrWidget|Approval password is invalid."
-msgstr ""
+msgstr "承èªãƒ‘スワードãŒç„¡åŠ¹ã§ã™ã€‚"
msgid "mrWidget|Approve"
msgstr "承èª"
@@ -16408,6 +18997,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr "マージ作業者"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16441,6 +19033,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "マージをリクエスト"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "競åˆã‚’解決ã™ã‚‹"
@@ -16492,8 +19087,8 @@ msgstr "ã“ã®ã‚½ãƒ¼ã‚¹ãƒ–ランãƒã¯å‰Šé™¤ã•ã‚Œã¾ã›ã‚“"
msgid "mrWidget|There are merge conflicts"
msgstr "マージã®ç«¶åˆãŒã‚ã‚Šã¾ã™"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "未解決ã®æ¤œè¨ŽãŒã‚ã‚Šã¾ã™ã€‚ã“れらã®æ¤œè¨Žã‚’解決ã—ã¦ãã ã•ã„。"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr ""
@@ -16504,9 +19099,21 @@ msgstr "ã“ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯è‡ªå‹•çš„ã«ãƒžãƒ¼ã‚¸ã•ã‚Œã¾ã›ã‚“ã§
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "ã“ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ãƒžãƒ¼ã‚¸å®Ÿè¡Œä¸­ã§ã™"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "ã“ã®ãƒ—ロジェクトã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€æ›¸ãè¾¼ã¿ã¯ç„¡åŠ¹ã§ã™ã€‚"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "ã“ã®ãƒ—ロジェクトを直接編集ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。変更ã™ã‚‹ã«ã¯ãƒ•ã‚©ãƒ¼ã‚¯ã—ã¦ãã ã•ã„。"
@@ -16516,6 +19123,9 @@ msgstr "ソースブランãƒã‚’削除ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸ"
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "ã“ã®ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’手動ã§ãƒžãƒ¼ã‚¸ã§ãã¾ã™"
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "ブランãƒãŒå­˜åœ¨ã—ã¾ã›ã‚“。"
@@ -16549,9 +19159,15 @@ msgstr "æ–°è¦ãƒžãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆ"
msgid "no contributions"
msgstr "貢献ãªã—"
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr "ãªã—"
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "メール通知"
@@ -16564,8 +19180,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "ã¾ãŸã¯"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16578,8 +19194,11 @@ msgstr[0] "親"
msgid "password"
msgstr "パスワード"
-msgid "personal access token"
-msgstr "個人ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16598,12 +19217,18 @@ msgid "project"
msgid_plural "projects"
msgstr[0] "プロジェクト"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr "クイックアクション"
msgid "register"
msgstr "登録"
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "残り"
@@ -16616,6 +19241,9 @@ msgstr "期é™ã‚’削除"
msgid "remove weight"
msgstr "ウェイトを削除"
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr "差分を表示"
@@ -16701,15 +19329,37 @@ msgstr ""
msgid "this document"
msgstr "ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "コントリビュータã®ã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’効率化ã™ã‚‹ï¼"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "ユーザーå"
@@ -16719,6 +19369,9 @@ msgstr "コードをデプロイã™ã‚‹ãŸã‚ã« Kubernetes クラスターを使
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16734,12 +19387,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/ka_GE/gitlab.po b/locale/ka_GE/gitlab.po
index fd0c5e4f39d..4807ae7d883 100644
--- a/locale/ka_GE/gitlab.po
+++ b/locale/ka_GE/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: ka\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:47\n"
+"PO-Revision-Date: 2019-09-24 10:25\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/ko/gitlab.po b/locale/ko/gitlab.po
index c08fd6ac89a..f51f1290306 100644
--- a/locale/ko/gitlab.po
+++ b/locale/ko/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: ko\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:36\n"
+"PO-Revision-Date: 2019-09-24 10:58\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr " ë¡œê·¸ì¸ í•´ì£¼ì„¸ìš”."
@@ -27,6 +30,12 @@ msgstr " %{grace_period_deadline} ì´ì „ì— ì´ ìž‘ì—…ì„ ìˆ˜í–‰ 하셔야 í•©ë‹
msgid " and"
msgstr " 그리고"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " %d í¬ì¸íŠ¸ 저하"
@@ -38,12 +47,18 @@ msgstr[0] " %d í¬ì¸íŠ¸ í–¥ìƒ"
msgid " or "
msgstr " ë˜ëŠ” "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " ë˜ëŠ” <#epic id>"
msgid " or <#issue id>"
msgstr " ë˜ëŠ” <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%dê°œì˜ ëŒ“ê¸€"
@@ -56,6 +71,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] "%d 커밋 behind"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%dê°œì˜ ì»¤ë°‹,"
+
msgid "%d commits"
msgstr "%dê°œì˜ ì»¤ë°‹"
@@ -75,6 +94,10 @@ msgid "%d fixed test result"
msgid_plural "%d fixed test results"
msgstr[0] "%dê±´ì˜ í…ŒìŠ¤íŠ¸ 결과를 고쳤습니다."
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d ì´ìŠˆ"
@@ -93,16 +116,24 @@ msgstr[0] "머지 리퀘스트(MR) %d개"
msgid "%d merge request that you don't have access to."
msgid_plural "%d merge requests that you don't have access to."
-msgstr[0] ""
+msgstr[0] "%d 머지 ìš”ì²­ì„ í•  ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤."
msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d 측정치"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "%d 댓글 ë” ë³´ê¸°"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%dê°œì˜ ìŠ¤í…Œì´ì§•ëœ 변경사항"
@@ -118,13 +149,13 @@ msgstr[0] "%s 추가 ì»¤ë°‹ì€ ì„±ëŠ¥ ì´ìŠˆë¥¼ 방지하기 위해 ìƒëžµë˜ì—ˆ
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName}ì˜ í† ë¡ "
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_timeago} ì— %{commit_author_link} ë‹˜ì´ ì»¤ë°‹í•˜ì˜€ìŠµë‹ˆë‹¤."
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -134,6 +165,9 @@ msgstr[0] "%{name}ì—게서 %{count} ê±´ì— ëŒ€í•œ 승ì¸ì„ 요청받ìŒ"
msgid "%{count} approvals from %{name}"
msgstr "%{name}께서 %{count} ê±´ì˜ ìŠ¹ì¸"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "%{count} ê°œ ë”보기"
@@ -154,10 +188,22 @@ msgid "%{count} pending comment"
msgid_plural "%{count} pending comments"
msgstr[0] "%{count}ê°œì˜ ëŒ€ê¸°ì¤‘ì¸ ëŒ“ê¸€ "
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
+msgstr "%{edit_in_new_fork_notice} ì´ ì»¤ë°‹ì— ëŒ€í•´ cherry-pickì„ ë‹¤ì‹œ ì‹œë„하세요."
+
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
msgstr ""
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
+msgstr "%{edit_in_new_fork_notice} ì´ ì»¤ë°‹ì— ëŒ€í•´ ë˜ëŒë¦¬ê¸°ë¥¼ 다시 ì‹œë„하세요."
+
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
msgstr ""
msgid "%{filePath} deleted"
@@ -167,49 +213,55 @@ msgid "%{firstLabel} +%{labelCount} more"
msgstr "%{firstLabel} +%{labelCount} ë”보기"
msgid "%{gitlab_ci_yml} not found in this commit"
-msgstr ""
+msgstr "ì´ ì»¤ë°‹ì—ì„œ %{gitlab_ci_yml} 파ì¼ì„ 찾지 못했습니다"
msgid "%{group_docs_link_start}Groups%{group_docs_link_end} allow you to manage and collaborate across multiple projects. Members of a group have access to all of its projects."
msgstr "%{group_docs_link_start}그룹%{group_docs_link_end}ì„ ì‚¬ìš©í•˜ë©´ 여러 프로ì íŠ¸ë¥¼ 관리하고 ê³µë™ ìž‘ì—…ì„ ìˆ˜í–‰ í•  수 있습니다. 그룹 회ì›ì€ 모든 프로ì íŠ¸ì— 액세스 í•  수 있습니다."
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
+msgstr "%{group_name}ì€ ê·¸ë£¹ 관리 ê³„ì •ì„ ì‚¬ìš© 합니다. %{group_name}를 관리 í•  새 GitLab ê³„ì •ì„ ë§Œë“¤ì–´ì•¼ 합니다."
+
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
msgstr ""
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType}ì´ ì‚­ì œë©ë‹ˆë‹¤! 확실합니까?"
msgid "%{label_for_message} unavailable"
-msgstr ""
+msgstr "%{label_for_message} 사용할 수 ì—†ìŒ"
msgid "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free, automated, and open certificate authority (CA), that give digital certificates in order to enable HTTPS (SSL/TLS) for websites."
-msgstr ""
+msgstr "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}는 웹사ì´íŠ¸ì— HTTPS (SSL/TLS) ì—°ê²°ìš© 디지털 ì¸ì¦ì„œë¥¼ 제공하는 무료, ìžë™í™”, 개방형 ì¸ì¦ 기관(CA)입니다."
msgid "%{level_name} is not allowed in a %{group_level_name} group."
-msgstr ""
+msgstr "%{group_level_name} 그룹ì—는 %{level_name} ì´ í—ˆìš©ë˜ì§€ 않습니다."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
-msgstr ""
-
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr ""
+msgstr "Forkí•œ ì›ë³¸ 프로ì íŠ¸ê°€ ë” ë‚®ì€ ê³µê°œ 수준으로 설정ë˜ì–´ 있으므로 %{level_name} ìˆ˜ì¤€ì´ í—ˆìš©ë˜ì§€ 않습니다."
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}ì—­í•  ê¶Œí•œì— ëŒ€í•´ ìžì„¸ížˆ 알아보기%{link_end}"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} 시작ë¨"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} 경로는 GitLab User %{lock_user_id} ì— ì˜í•´ 잠겼습니다."
-msgid "%{mrText}, this issue will be closed automatically."
+msgid "%{mergeLength}/%{usersLength} can merge"
msgstr ""
+msgid "%{mrText}, this issue will be closed automatically."
+msgstr "%{mrText}, ì´ ì´ìŠˆëŠ” ìžë™ìœ¼ë¡œ í´ë¡œì¦ˆ ë©ë‹ˆë‹¤."
+
msgid "%{name} contained %{resultsString}"
-msgstr ""
+msgstr "%{name} í¬í•¨ë¨ %{resultsString}"
msgid "%{name} found %{resultsString}"
-msgstr ""
+msgstr "%{name} 찾았습니다 %{resultsString}"
msgid "%{name}'s avatar"
msgstr "%{name} ì˜ ì•„ë°”íƒ€"
@@ -224,25 +276,25 @@ msgid "%{percent}%% complete"
msgstr "%{percent}%% 완료"
msgid "%{service_title} activated."
-msgstr ""
+msgstr "%{service_title} 활성화 ë¨."
msgid "%{service_title} settings saved, but not activated."
-msgstr ""
+msgstr "%{service_title} ì„¤ì •ì´ ì €ìž¥ë˜ì—ˆì§€ë§Œ, 활성화ë˜ì§€ 않았습니다."
msgid "%{size} GiB"
-msgstr ""
+msgstr "%{size} GiB"
msgid "%{size} KiB"
-msgstr ""
+msgstr "%{size} KiB"
msgid "%{size} MiB"
-msgstr ""
+msgstr "%{size} MiB"
msgid "%{size} bytes"
-msgstr ""
+msgstr "%{size} bytes"
msgid "%{spammable_titlecase} was submitted to Akismet successfully."
-msgstr ""
+msgstr "%{spammable_titlecase} (ì´)ê°€ Akismetì— ì„±ê³µì ìœ¼ë¡œ 제출ë˜ì—ˆìŠµë‹ˆë‹¤."
msgid "%{state} epics"
msgstr "%{state} ì—픽"
@@ -262,6 +314,9 @@ msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} 태그"
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files} 파ì¼"
@@ -270,7 +325,7 @@ msgid "%{text} is available"
msgstr "%{text} 사용 가능"
msgid "%{title} %{operator} %{threshold}"
-msgstr ""
+msgstr "%{title} %{operator} %{threshold}"
msgid "%{title} changes"
msgstr "%{title} 변경"
@@ -281,43 +336,70 @@ msgstr "%{unstaged} ê±´ì´ ìŠ¤í…Œì´ì§•ë˜ì§€ 않았고, %{staged} ê±´ì´ ìŠ¤í…Œ
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "GitLab Inc와 공유ë˜ëŠ” ì •ë³´ì— ëŒ€í•´ %{usage_ping_link_start}ë” ì•Œì•„ë³´ê¸°%{usage_ping_link_end}"
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr "%{user_name} 프로필 페ì´ì§€"
-msgid "%{verb} %{time_spent_value} spent time."
+msgid "%{username}'s avatar"
msgstr ""
-msgid "'%{level}' is not a valid visibility level"
+msgid "%{value} ms"
msgstr ""
+msgid "%{verb} %{time_spent_value} spent time."
+msgstr "%{verb} %{time_spent_value} ì‹œê°„ì´ ì§€ë‚¬ìŠµë‹ˆë‹¤."
+
+msgid "'%{level}' is not a valid visibility level"
+msgstr "'%{level}' ìˆ˜ì¤€ì€ ì˜¬ë°”ë¥¸ 공개 ìˆ˜ì¤€ì´ ì•„ë‹™ë‹ˆë‹¤"
+
msgid "'%{source}' is not a import source"
+msgstr "'%{source}' 는 ìž„í¬íŠ¸ 소스가 아닙니다."
+
+msgid "'%{template_name}' is unknown or invalid"
msgstr ""
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
+msgstr[0] "(%d 마ê°)"
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} 병합)"
msgid "(No changes)"
+msgstr "(변경사항 ì—†ìŒ)"
+
+msgid "(Show all)"
msgstr ""
msgid "(check progress)"
-msgstr ""
+msgstr "(진행 ìƒí™© 확ì¸)"
msgid "(external source)"
msgstr "(외부 소스)"
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ %{count} ë”보기"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} ë”"
-msgid "+%{extraOptionCount} more"
+msgid "+ %{numberOfHiddenAssignees} more"
msgstr ""
+msgid "+%{extraOptionCount} more"
+msgstr "+%{extraOptionCount} ê°œ ë”보기"
+
msgid ", or "
msgstr ", ë˜ëŠ” "
@@ -331,7 +413,7 @@ msgid "- show less"
msgstr "-ëœ ë³´ê¸°"
msgid "0 for unlimited"
-msgstr ""
+msgstr "ë¬´ì œí•œì˜ ê²½ìš° 0"
msgid "1 %{type} addition"
msgid_plural "%{count} %{type} additions"
@@ -347,14 +429,14 @@ msgstr[0] "%dì¼"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
-msgstr[0] ""
+msgstr[0] "%{issues} ê°œì˜ ì´ìŠˆ closed"
msgid "1 closed merge request"
msgid_plural "%{merge_requests} closed merge requests"
-msgstr[0] ""
+msgstr[0] "%{merge_requests} ê±´ì˜ ë¨¸ì§€ë¦¬í€˜ìŠ¤íŠ¸ 닫힘"
msgid "1 day"
-msgstr ""
+msgstr "1 ì¼"
msgid "1 group"
msgid_plural "%d groups"
@@ -362,15 +444,15 @@ msgstr[0] "%d 그룹"
msgid "1 merged merge request"
msgid_plural "%{merge_requests} merged merge requests"
-msgstr[0] ""
+msgstr[0] "%{merge_requests} ê±´ì˜ ë¨¸ì§€ë¦¬í€˜ìŠ¤íŠ¸ 머지ë¨"
msgid "1 open issue"
msgid_plural "%{issues} open issues"
-msgstr[0] ""
+msgstr[0] "%{issues} ê°œì˜ ì˜¤í”ˆëœ ì´ìŠˆ"
msgid "1 open merge request"
msgid_plural "%{merge_requests} open merge requests"
-msgstr[0] ""
+msgstr[0] "%{merge_requests} ê°œì˜ ì˜¤í”ˆëœ ë¨¸ì§€ 리퀘스트(MR)"
msgid "1 pipeline"
msgid_plural "%d pipelines"
@@ -385,7 +467,7 @@ msgid_plural "%d users"
msgstr[0] "%dëª…ì˜ ì‚¬ìš©ìž"
msgid "1 week"
-msgstr ""
+msgstr "1 주"
msgid "1-9 contributions"
msgstr ""
@@ -397,28 +479,25 @@ msgid "1st contribution!"
msgstr "첫번째 기여!"
msgid "20-29 contributions"
-msgstr ""
+msgstr "20-29 회 참여"
msgid "2FA"
msgstr "2단계 ì¸ì¦(2FA)"
-msgid "2FA enabled"
-msgstr "2FA 사용"
-
msgid "2FADevice|Registered On"
msgstr ""
msgid "3 days"
-msgstr ""
+msgstr "3 ì¼"
msgid "3 hours"
-msgstr ""
+msgstr "3 시간"
msgid "30 minutes"
-msgstr ""
+msgstr "30 분"
msgid "30+ contributions"
-msgstr ""
+msgstr "30 ê°œ ì´ìƒ 참여"
msgid "403|Please contact your GitLab administrator to get permission."
msgstr "403|ê¶Œí•œì„ ì–»ìœ¼ë ¤ë©´ GitLab 관리ìžì—게 문ì˜í•˜ì‹­ì‹œì˜¤."
@@ -436,7 +515,7 @@ msgid "404|Please contact your GitLab administrator if you think this is a mista
msgstr "ì´ê²ƒì´ ì‹¤ìˆ˜ì— ì˜í•œ 것ì´ë¼ê³  ìƒê°í•œë‹¤ë©´ GitLab 관리ìžì—게 문ì˜í•˜ì„¸ìš”."
msgid "8 hours"
-msgstr ""
+msgstr "8 시간"
msgid "<code>\"johnsmith@example.com\": \"@johnsmith\"</code> will add \"By <a href=\"#\">@johnsmith</a>\" to all issues and comments originally created by johnsmith@example.com, and will set <a href=\"#\">@johnsmith</a> as the assignee on all issues originally assigned to johnsmith@example.com."
msgstr "<code>\"johnsmith@example.com\": \"@johnsmith\"</code> ì€ ì›ëž˜ johnsmith@example.comì´ ìƒì„±í•œ 모든 ì´ìŠˆì™€ ì˜ê²¬ì— \"By <a href=\"#\">@johnsmith</a>\"ì„ ì¶”ê°€í•˜ê³  ì›ëž˜ johnsmith@example.comì— í• ë‹¹ëœ ëª¨ë“  ì´ìŠˆì— 양수ì¸ìœ¼ë¡œ <a href=\"#\">@ johnsmith</a> ë¡œ 설정합니다."
@@ -453,6 +532,9 @@ msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> ì€ ì›
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength}개가 스테ì´ì§•ë˜ì§€ 않았고, %{stagedFilesLength}개가 스테ì´ì§•</strong>ëœ ë³€ê²½ì‚¬í•­"
@@ -475,7 +557,7 @@ msgid "A 'Runner' is a process which runs a job. You can set up as many Runners
msgstr "'러너(Runner)'는 ìž‘ì—…ì„ ì‹¤í–‰í•˜ëŠ” 프로세스입니다. 필요한 ë§Œí¼ ëŸ¬ë„ˆë¥¼ ì…‹ì—…í•  수 있습니다."
msgid "A .NET Core console application template, customizable for any .NET Core project"
-msgstr ""
+msgstr ".NET 코어 콘솔 ì‘ìš© 프로그램 템플릿, 모든 .NET 코어 프로ì íŠ¸ì— 맞게 ì‚¬ìš©ìž ì •ì˜ ê°€ëŠ¥"
msgid "A GitBook site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
@@ -489,6 +571,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -525,13 +610,19 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "ìž‘ì—… 트레ì´ìŠ¤ì˜ 테스트 커버리지 결과를 알아 보기 위해 사용ë˜ëŠ” 정규표현ì‹ìž…니다. ë¬´íš¨ì¼ ê²½ìš° 공백입니다."
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "소스 ë¸Œëžœì¹˜ì— ëŒ€í•œ 쓰기 ê¶Œí•œì´ ìžˆëŠ” 사용ìžê°€ ì´ ì˜µì…˜ì„ ì„ íƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "API Help"
-msgstr ""
+msgstr "API ë„움ë§"
msgid "API Token"
+msgstr "API 토í°"
+
+msgid "Abort"
msgstr ""
msgid "About GitLab"
@@ -565,7 +656,7 @@ msgid "Access Tokens"
msgstr "액세스 토í°"
msgid "Access denied for your LDAP account."
-msgstr ""
+msgstr "LDAP 계정 ì ‘ê·¼ì´ ê±°ë¶€ë˜ì—ˆìŠµë‹ˆë‹¤."
msgid "Access denied! Please verify you can add deploy keys to this repository."
msgstr "ì ‘ê·¼ì´ ê±°ë¶€ë˜ì—ˆìŠµë‹ˆë‹¤! ì´ ì €ìž¥ì†Œì— ë°°í¬ í‚¤ë¥¼ 추가 í•  수 있는지 확ì¸í•´ 주세요."
@@ -574,7 +665,7 @@ msgid "Access expiration date"
msgstr "액세스 만료ì¼"
msgid "Access forbidden. Check your access level."
-msgstr ""
+msgstr "액세스 금지. ì ‘ê·¼ ê¶Œí•œì„ í™•ì¸í•˜ì„¸ìš”."
msgid "Access to '%{classification_label}' not allowed"
msgstr "%{classification_label} ì— ëŒ€í•œ 액세스가 허용ë˜ì§€ 않습니다."
@@ -588,6 +679,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "계정"
@@ -601,11 +752,14 @@ msgid "Action to take when receiving an alert."
msgstr ""
msgid "Activate Service Desk"
-msgstr ""
+msgstr "서비스 ë°ìŠ¤í¬ 활성화"
msgid "Active"
msgstr "활성"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr "í™œì„±í™”ëœ ì„¸ì…˜"
@@ -615,10 +769,17 @@ msgstr "활ë™"
msgid "Add"
msgstr "추가"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+
msgid "Add CHANGELOG"
msgstr "ë³€ê²½ëœ ë¡œê·¸ 추가"
msgid "Add CONTRIBUTING"
+msgstr "컨트리뷰팅 추가"
+
+msgid "Add GitLab to Slack"
msgstr ""
msgid "Add Group Webhooks and GitLab Enterprise Edition."
@@ -633,12 +794,27 @@ msgstr "Kubernetes í´ëŸ¬ìŠ¤í„° 추가"
msgid "Add README"
msgstr "README 추가"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
+msgstr "GPG 키 추가"
+
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
msgstr ""
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "ì´ %{noteable_name} ì— ì¼ë°˜ì ì¸ 코멘트를 추가 합니다."
@@ -657,23 +833,23 @@ msgstr "í…Œì´ë¸” 추가"
msgid "Add a task list"
msgstr "ìž‘ì—… ëª©ë¡ ì¶”ê°€"
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "모든 ì´ë©”ì¼ì— í‘œì‹œë  í…스트를 추가합니다. %{character_limit} ìž ì œí•œì´ ìžˆìŠµë‹ˆë‹¤."
msgid "Add an SSH key"
-msgstr ""
+msgstr "SSH 키 추가"
msgid "Add an issue"
+msgstr "ì´ìŠˆ 추가"
+
+msgid "Add approval rule"
msgstr ""
msgid "Add approvers"
-msgstr ""
+msgstr "승ì¸ìž 추가"
msgid "Add bold text"
-msgstr ""
+msgstr "êµµì€ ë¬¸ìžì—´ 추가"
msgid "Add child epic to an epic"
msgstr ""
@@ -682,25 +858,28 @@ msgid "Add comment now"
msgstr "댓글 추가"
msgid "Add email address"
-msgstr ""
+msgstr "ì´ë©”ì¼ ì£¼ì†Œ 추가"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
-msgstr ""
+msgstr "ë©”ì¼ ë¨¸ë¦¬ë§ ë° ê¼¬ë¦¬ë§ì„ 추가하십시오. 단, ìƒ‰ìƒ ì„¤ì •ì€ ì• í”Œë¦¬ì¼€ì´ì…˜ ì¸í„°íŽ˜ì´ìŠ¤ 안ì—서만 ì ìš©ë˜ëŠ” ì ì„ 참고해 주십시오."
msgid "Add image comment"
msgstr "ì´ë¯¸ì§€ 댓글 추가"
+msgid "Add issues"
+msgstr "ì´ìŠˆ 추가"
+
msgid "Add italic text"
-msgstr ""
+msgstr "기울임 í…스트 추가"
msgid "Add label(s)"
-msgstr ""
+msgstr "ë ˆì´ë¸” 추가"
msgid "Add license"
msgstr "ë¼ì´ì„ ìŠ¤ 추가"
msgid "Add list"
-msgstr ""
+msgstr "ëª©ë¡ ì¶”ê°€"
msgid "Add new application"
msgstr "새 애플리케ì´ì…˜ 추가"
@@ -708,12 +887,21 @@ msgstr "새 애플리케ì´ì…˜ 추가"
msgid "Add new directory"
msgstr "새 디렉토리 추가"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr "ë°˜ì‘ ì¶”ê°€"
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -726,8 +914,8 @@ msgstr "프로ì íŠ¸ì— 추가"
msgid "Add to review"
msgstr "리뷰 추가"
-msgid "Add todo"
-msgstr "í•  ì¼ ì¶”ê°€"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "ê·¸ë£¹ì— ì‚¬ìš©ìž ì¶”ê°€:"
@@ -741,14 +929,32 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "GitLab ì¸ìŠ¤í„´ìŠ¤ì— 새 애플리케ì´ì…˜ì„ 추가 í•  수 없습니다. ê¶Œí•œì„ ì–»ìœ¼ë ¤ë©´ GitLab 관리ìžì—게 문ì˜í•˜ì‹­ì‹œì˜¤."
msgid "Additional minutes"
-msgstr ""
+msgstr "추가 시간(분)"
msgid "Additional text"
msgstr "추가 í…스트"
@@ -759,7 +965,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -769,7 +984,7 @@ msgid "Admin Overview"
msgstr "ê´€ë¦¬ìž ê°œìš”"
msgid "Admin Section"
-msgstr ""
+msgstr "ê´€ë¦¬ìž ì„¹ì…˜"
msgid "Admin notes"
msgstr ""
@@ -795,6 +1010,9 @@ msgstr "ìž‘ì—… ì¤‘ì§€ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "모든 ìž‘ì—…ì„ ì¤‘ì§€í•©ë‹ˆë‹¤. 현재 ì‹¤í–‰ì¤‘ì¸ ëª¨ë“  ìž‘ì—…ì´ ì¤‘ì§€ë©ë‹ˆë‹¤."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -843,6 +1061,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "새 환경 변수를 작성할 ë•Œ 기본ì ìœ¼ë¡œ 보호ë©ë‹ˆë‹¤."
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "2FA 사용 중지"
@@ -928,7 +1170,7 @@ msgid "Advanced settings"
msgstr "고급 설정"
msgid "After a successful password update you will be redirected to login screen."
-msgstr ""
+msgstr "비밀번호가 성공ì ìœ¼ë¡œ ë³€ê²½ëœ ë’¤ì— ë¡œê·¸ì¸ í™”ë©´ìœ¼ë¡œ ì´ë™ 합니다."
msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
msgstr ""
@@ -937,6 +1179,12 @@ msgid "Alert"
msgid_plural "Alerts"
msgstr[0] "알림"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "알림"
@@ -944,11 +1192,17 @@ msgid "All"
msgstr "ì „ì²´"
msgid "All Members"
+msgstr "모든 맵버"
+
+msgid "All branches"
msgstr ""
msgid "All changes are committed"
msgstr "모든 ë³€ê²½ì‚¬í•­ì´ ì»¤ë°‹ë˜ì—ˆìŠµë‹ˆë‹¤."
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -965,10 +1219,7 @@ msgid "All merge conflicts were resolved. The merge request can now be merged."
msgstr ""
msgid "All projects"
-msgstr ""
-
-msgid "All todos were marked as done."
-msgstr ""
+msgstr "모든 프로ì íŠ¸"
msgid "All users"
msgstr "모든 사용ìž"
@@ -1003,6 +1254,12 @@ msgstr "Asciidoc 문서ì—ì„œ PlantUML 다ì´ì–´ê·¸ëž¨ ë Œë”ë§ì„ 허용합니
msgid "Allow requests to the local network from hooks and services."
msgstr "후í¬ì™€ 서비스ì—ì„œ 로컬 네트워í¬ì— 대한 ìš”ì²­ì„ í—ˆìš©í•©ë‹ˆë‹¤."
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1015,9 +1272,12 @@ msgstr "사용ìžê°€ 액세스를 요청하ë„ë¡ í—ˆìš©"
msgid "Allow users to request access if visibility is public or internal."
msgstr "가시성 í¼ë¸”릭 ë˜ëŠ” ì¸í„°ë„ ì¼ ê²½ìš° 사용ìžê°€ 액세스를 요청 í•  수 있습니다."
-msgid "Allowed to fail"
+msgid "Allowed email domain restriction only permitted for top-level groups"
msgstr ""
+msgid "Allowed to fail"
+msgstr "실패 허용ë¨"
+
msgid "Allows you to add and manage Kubernetes clusters."
msgstr "Kubernetes í´ëŸ¬ìŠ¤í„°ë¥¼ 추가하고 관리 í•  수 ​​있습니다."
@@ -1027,15 +1287,9 @@ msgstr "\"issuer\" ë˜ëŠ” \"Relying party trust identifier\" ë¼ê³ ë„ 합니다
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "\"Relying party service URL\" ë˜ëŠ” \"Reply URL\"ì´ë¼ê³ ë„ 합니다."
-msgid "Alternate support URL for help page"
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "대신, %{personal_access_token_link} (ì„) 를 사용할 수 있습니다. ê°œì¸ ì•¡ì„¸ìŠ¤ 토í°ì„ ìƒì„±í•  ë•Œ, <code>저장소</code> 범위를 ì„ íƒí•˜ë©´ ì—°ê²°ì´ ê°€ëŠ¥í•œ 공개, 비공개 저장소를 표시할 수 있습니다."
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "대신, %{personal_access_token_link} (ì„) 를 사용할 수 있습니다. ê°œì¸ ì•¡ì„¸ìŠ¤ 토í°ì„ ìƒì„±í•  ë•Œ, <code>저장소</code> 범위를 ì„ íƒí•´ì•¼ 가져오기가 가능한 공개, 비공개 저장소를 표시할 수 있습니다."
-
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "사용ìžê°€ 다중 ì¸ì¦ì„ 강제로 구성해야 í•  ì‹œê°„ì„ ê±´ë„ˆ 뛸 수있는 기간 (시간)"
@@ -1048,20 +1302,20 @@ msgstr "비어 있는 GitLab User 필드는 FogBugzì˜ ì‚¬ìš©ìž ì „ì²´ ì´ë¦„ (
msgid "An error has occurred"
msgstr "ì—러가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-msgid "An error occurred adding a draft to the discussion."
-msgstr "í† ë¡ ì— ì´ˆì•ˆì„ ì¶”ê°€í•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "새 드래프트를 추가하는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred creating the new branch."
-msgstr ""
+msgstr "새 브랜치를 만드는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred fetching the approval rules."
-msgstr ""
+msgstr "ìŠ¹ì¸ ê·œì¹™ì„ ê°€ì ¸ì˜¤ëŠ” ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred fetching the approvers for the new rule."
-msgstr ""
+msgstr "새로운 ê·œì¹™ì— ëŒ€í•œ 승ì¸ìž 목ë¡ì„ 가져오는 ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred fetching the dropdown data."
msgstr ""
@@ -1106,6 +1360,9 @@ msgid "An error occurred while fetching environments."
msgstr ""
msgid "An error occurred while fetching folder content."
+msgstr "í´ë” ë‚´ìš©ì„ ê°€ì ¸ 오는 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
+msgid "An error occurred while fetching issues."
msgstr ""
msgid "An error occurred while fetching label colors."
@@ -1150,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "프로ì íŠ¸ë¥¼ 가져오는 ë™ì•ˆ 오류가 ë°œìƒ í–ˆìŠµë‹ˆë‹¤."
@@ -1178,7 +1438,7 @@ msgid "An error occurred while loading the file"
msgstr "íŒŒì¼ ë¡œë“œ 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred while loading the subscription details."
-msgstr ""
+msgstr "êµ¬ë… ì •ë³´ë¥¼ 불러오는 ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred while making the request."
msgstr "ìš”ì²­ì„ ìƒì„±í•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
@@ -1190,17 +1450,17 @@ msgid "An error occurred while parsing recent searches"
msgstr ""
msgid "An error occurred while removing epics."
-msgstr ""
+msgstr "ì—í”½ì„ ì‚­ì œí•˜ëŠ” ë„중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred while removing issues."
-msgstr ""
-
-msgid "An error occurred while rendering KaTeX"
-msgstr "KaTeX ë Œë”ë§ ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤"
+msgstr "ì´ìŠˆë¥¼ 삭제하는 ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred while rendering preview broadcast message"
msgstr "방송 메시지 미리보기를 ë Œë”ë§í•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "ìº˜ë¦°ë” í™œë™ì„ 가져오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
@@ -1219,6 +1479,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr "ì•Œë¦¼ì„ êµ¬ë…하는 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "알림 구ë…ì„ í•´ì œí•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
@@ -1232,44 +1498,47 @@ msgid "An error occurred while validating username"
msgstr "ì‚¬ìš©ìž ì´ë¦„ì„ í™•ì¸í•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤"
msgid "An error occurred whilst committing your changes."
-msgstr ""
+msgstr "ë‚´ ë³€ê²½ì‚¬í•­ì„ ì»¤ë°‹í•˜ë˜ ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred whilst fetching the job trace."
-msgstr ""
+msgstr "ìž‘ì—… 기ë¡ì„ 가져오는 ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred whilst fetching the latest pipeline."
-msgstr ""
+msgstr "가장 ìµœê·¼ì˜ íŒŒì´í”„ ë¼ì¸ì„ 가져오는 ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred whilst getting files for - %{branchId}"
msgstr ""
msgid "An error occurred whilst loading all the files."
-msgstr ""
+msgstr "모든 파ì¼ì„ 불러오는 ë„ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "An error occurred whilst loading the file content."
-msgstr ""
+msgstr "íŒŒì¼ ë‚´ìš©ì„ ë¶ˆëŸ¬ì˜¤ëŠ” ë„중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred whilst loading the file."
-msgstr ""
+msgstr "파ì¼ì„ 불러오는 ë„중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred whilst loading the merge request changes."
-msgstr ""
+msgstr "머지 ë¦¬í€˜ìŠ¤íŠ¸ì˜ ë³€ê²½ ì‚¬í•­ì„ ë¶ˆëŸ¬ì˜¤ëŠ” ë„중 오류가 ë°œìƒ í•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred whilst loading the merge request version data."
-msgstr ""
+msgstr "머지 ë¦¬í€˜ìŠ¤íŠ¸ì˜ ë²„ì „ ë°ì´í„°ë¥¼ 불러오는 ë„중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred whilst loading the merge request."
-msgstr ""
+msgstr "머지 리퀘스트를 불러오는 ë„중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred whilst loading the pipelines jobs."
-msgstr ""
+msgstr "파ì´í”„ ë¼ì¸ ìž‘ì—…ì„ ë¶ˆëŸ¬ì˜¤ëŠ” ë„중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "An error occurred. Please try again."
msgstr "오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. 다시 ì‹œë„í•´ 주세요."
-msgid "An unexpected error occurred while checking the project environment."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
msgstr ""
+msgid "An unexpected error occurred while checking the project environment."
+msgstr "프로ì íŠ¸ í™˜ê²½ì„ í™•ì¸í•˜ë˜ ë„중 예ìƒì¹˜ ì•Šì€ ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
msgid "An unexpected error occurred while checking the project runners."
msgstr ""
@@ -1285,6 +1554,9 @@ msgstr ""
msgid "Analytics"
msgstr "분ì„"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1309,6 +1581,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "외관"
@@ -1351,6 +1626,9 @@ msgstr "어플리케ì´ì…˜"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1388,7 +1666,7 @@ msgstr[0] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1397,12 +1675,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "4ì›”"
@@ -1439,6 +1732,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1481,6 +1783,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr "헬스 ì²´í¬ í† í°ì„ 초기화 하시겠습니까?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1508,6 +1813,12 @@ msgstr ""
msgid "Artifact ID"
msgstr "결과물 ID"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "결과물"
@@ -1544,6 +1855,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr "#FF0000ê³¼ ê°™ì´ ë§žì¶¤ ìƒ‰ìƒ ì§€ì •"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "ë¼ë²¨ 지정"
@@ -1562,6 +1876,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "í• ë‹¹ëœ ì´ìŠˆ"
@@ -1572,7 +1889,8 @@ msgid "Assigned to me"
msgstr "나ì—게 할당 ë¨"
msgid "Assignee"
-msgstr "담당ìž"
+msgid_plural "%d Assignees"
+msgstr[0] ""
msgid "Assignee lists not available with your current license"
msgstr "ë‹´ë‹¹ìž ëª©ë¡ì€ 현재 ë¼ì´ì„¼ìŠ¤ë¡œëŠ” 사용할 수 없습니다."
@@ -1583,6 +1901,9 @@ msgstr "ë‹´ë‹¹ìž ëª©ë¡ì€ ì„ íƒëœ 사용ìžì—게 할당 ëœ ëª¨ë“  ì´ìŠˆê°
msgid "Assignee(s)"
msgstr "담당ìž"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1602,12 +1923,21 @@ msgstr ""
msgid "Audit Events"
msgstr "ê°ì‚¬ ì´ë²¤íŠ¸"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "8ì›”"
msgid "August"
msgstr "8ì›”"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "ì¸ì¦ 로그"
@@ -1665,6 +1995,9 @@ msgstr "ìžë™ DevOps 활성화ë¨"
msgid "Auto DevOps, runners and job artifacts"
msgstr "ìžë™ DevOps, Runner ìž‘ì—… artifacts"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "사용ë˜ì§€ 않거나 ë³´ë¥˜ì¤‘ì¸ íŒŒì´í”„ ë¼ì¸ì˜ ìžë™ 취소"
@@ -1686,6 +2019,18 @@ msgstr "ë” ì•Œì•„ë³´ê¸° %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Auto DevOps 파ì´í”„ ë¼ì¸ì´ 활성화ë˜ì—ˆìœ¼ë©° 대체 CI 구성 파ì¼ì´ 없는 ê²½ìš°ì— ì‚¬ìš©ë©ë‹ˆë‹¤. %{more_information_link}"
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1866,32 +2211,32 @@ msgstr "공개 ëœ ëª¨ë“  ê·¸ë£¹ì„ ì•„ëž˜ì—ì„œ ì°¾ì„ ìˆ˜ 있습니다."
msgid "Billing"
msgstr "결제"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name}(ì€)는 %{plan_link} í”Œëžœì„ ì‚¬ìš©í•˜ê³  있습니다."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "ìžë™ 다운그레ì´ë“œ ë˜ëŠ” ì¼ë¶€ í”Œëžœì€ í˜„ìž¬ 사용할 수 없습니다."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "현재 요금제"
-msgid "BillingPlans|Customer Support"
-msgstr "ê³ ê° ì§€ì›"
-
msgid "BillingPlans|Downgrade"
msgstr "다운그레ì´ë“œ"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "%{faq_link}ì„ ì½ìŒìœ¼ë¡œì¨ í”Œëžœì— ëŒ€í•´ ë” ìžì„¸ížˆ 알아보거나 GitLab.com Gold 무료 30 ì¼ í‰ê°€íŒì„ 시작하세요."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "%{faq_link} ì„ ì½ì–´ í”Œëžœì— ëŒ€í•´ ìžì„¸ížˆ 알아보십시오."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "플랜 관리"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "%{customer_support_link}으로 ì—°ë½í•´ì£¼ì„¸ìš”."
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "%{plan_name}ì˜ ëª¨ë“  기능 보기"
@@ -1905,14 +2250,11 @@ msgstr "ì´ ê·¸ë£¹ì˜ í”Œëžœì„ ê´€ë¦¬í•˜ë ¤ë©´ %{parent_billing_page_link}ì˜ ê
msgid "BillingPlans|Upgrade"
msgstr "업그레ì´ë“œ"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "현재 %{plan_link} í”Œëžœì„ ì´ìš©ì¤‘입니다."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "GitLab.com í‰ê°€íŒì´ %{expiration_date}ì— ë§Œë£Œë˜ì—ˆìŠµë‹ˆë‹¤. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "골드 ì²´í—˜íŒì´ <strong>%{expiration_date} í›„ì— ë§Œë£Œë©ë‹ˆë‹¤.</strong>. GitLab.com Goldì— ëŒ€í•œ ìžì„¸í•œ 정보는 %{features_link}ì—ì„œ ì½ì–´ë³¼ 수 있습니다."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "기능"
@@ -1929,6 +2271,9 @@ msgstr "매 년마다 %{price_per_year}ì„ ì§€ë¶ˆí•©ë‹ˆë‹¤"
msgid "BillingPlans|per user"
msgstr "ì‚¬ìš©ìž ë‹¹"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr "Bitbucket 서버ì—ì„œ 가져 오기"
@@ -1941,29 +2286,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-
msgid "Blog"
msgstr "블로그"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "보드"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "%{branchName} 브랜치는 ì´ í”„ë¡œì íŠ¸ ì €ìž¥ì†Œì— ì—†ìŠµë‹ˆë‹¤."
@@ -2126,6 +2493,9 @@ msgstr "íŒŒì¼ ì°¾ì•„ë³´ê¸°"
msgid "Browse Files"
msgstr "íŒŒì¼ ì°¾ì•„ë³´ê¸°"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "íŒŒì¼ ì°¾ì•„ë³´ê¸°"
@@ -2148,16 +2518,16 @@ msgid "BurndownChartLabel|Remaining"
msgstr ""
msgid "Business"
-msgstr ""
+msgstr "비즈니스"
msgid "Business metrics (Custom)"
msgstr "비즈니스 지표 (ì‚¬ìš©ìž ì •ì˜)"
msgid "Buy EE"
-msgstr ""
+msgstr "EE 구입"
msgid "Buy GitLab Enterprise Edition"
-msgstr ""
+msgstr "GitLab Enterprise Edition 구입"
msgid "By %{user_name}"
msgstr ""
@@ -2237,7 +2607,10 @@ msgstr "Auto DevOpsì— ëŒ€í•´ ë” ì•Œì•„ë³´ê¸°"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "대체 CI 구성 파ì¼ì´ì—†ëŠ” 경우 Auto DevOps 파ì´í”„ë¼ì¸ì´ 실행ë©ë‹ˆë‹¤."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2246,9 +2619,15 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr "ì¸ìŠ¤í„´ìŠ¤ 사용"
-msgid "CONTRIBUTING"
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
msgstr ""
+msgid "CONTRIBUTING"
+msgstr "CONTRIBUTING"
+
msgid "Callback URL"
msgstr "콜백 URL"
@@ -2273,9 +2652,15 @@ msgstr ""
msgid "Cancel"
msgstr "취소"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "ì´ ìž‘ì—… 취소"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "ìžë™ìœ¼ë¡œ 머지할 수 없습니다."
@@ -2285,6 +2670,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "ì´ë¯¸ êµ¬ì„±ëœ Kubernetes í´ëŸ¬ìŠ¤í„°ëŠ” 수정할 수 없습니다"
@@ -2304,20 +2692,29 @@ msgid "Capacity threshold"
msgstr ""
msgid "Certificate"
-msgstr ""
+msgstr "ì¸ì¦ì„œ"
msgid "Certificate (PEM)"
-msgstr ""
+msgstr "ì¸ì¦ì„œ (PEM)"
msgid "Change Weight"
msgstr "ì¤‘ìš”ë„ ë³€ê²½"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2354,6 +2751,12 @@ msgstr "Revert"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "기존 변경 ì‚¬í•­ì„ ë˜ëŒë¦¬ê¸° 위해 새로운 ì»¤ë°‹ì„ ë§Œë“­ë‹ˆë‹¤."
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2375,6 +2778,57 @@ msgstr "차트"
msgid "Chat"
msgstr "채팅"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2417,11 +2871,14 @@ msgstr "브랜치/태그 (예. %{master})를 ì„ íƒí•˜ê±°ë‚˜ 커밋 (예. %{sha}
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
msgid "Choose a template"
-msgstr ""
+msgstr "템플릿 ì„ íƒ"
msgid "Choose a template..."
msgstr "템플릿 ì„ íƒ..."
@@ -2436,16 +2893,16 @@ msgid "Choose between <code>clone</code> or <code>fetch</code> to get the recent
msgstr "최근 ì‘ìš© 프로그램 코드를 얻으려면 <code>í´ë¡ </code> ë˜ëŠ” <code>fetch</code>를 ì„ íƒí•˜ì‹­ì‹œì˜¤."
msgid "Choose file…"
-msgstr ""
+msgstr "íŒŒì¼ ì„ íƒâ€¦"
msgid "Choose the top-level group for your repository imports."
msgstr "저장소 ê°€ì ¸ì˜¤ê¸°ì— ëŒ€í•œ 최ìƒìœ„ ê·¸ë£¹ì„ ì„ íƒí•˜ì„¸ìš”."
msgid "Choose visibility level, enable/disable project features (issues, repository, wiki, snippets) and set permissions."
-msgstr ""
+msgstr "공개 ìˆ˜ì¤€ì„ ì •í•˜ê³ , 프로ì íŠ¸ ê¸°ëŠ¥ì„ (ì´ìŠˆ, 저장소, 위키, 스니펫) 사용/중지하고, ê¶Œí•œì„ ì„¤ì •í•˜ì‹­ì‹œì˜¤."
msgid "Choose what content you want to see on a group’s overview page"
-msgstr ""
+msgstr "해당 ê·¸ë£¹ì˜ ê°œìš” 페ì´ì§€ì—ì„œ ë³´ê³  ì‹¶ì€ ë¶€ë¶„ì„ ê³ ë¥´ì„¸ìš”."
msgid "Choose which repositories you want to connect and run CI/CD pipelines."
msgstr "Ci/CD 파ì´í”„ë¼ì¸ì´ ì—°ê²°ë˜ê³  실행할 저장소를 ì„ íƒí•´ 주세요."
@@ -2453,9 +2910,6 @@ msgstr "Ci/CD 파ì´í”„ë¼ì¸ì´ ì—°ê²°ë˜ê³  실행할 저장소를 ì„ íƒí•´ ì
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "ì´ ì„¸ì»¨ë”리 ë…¸ë“œì— ì–´ë–¤ 샤드 (shards)를 ë™ê¸°í™” 할지 ì„ íƒí•˜ì„¸ìš”."
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "취소ë¨"
@@ -2546,6 +3000,9 @@ msgstr "변수 행 제거"
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2555,6 +3012,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "* (모든 환경)"
@@ -2565,7 +3025,7 @@ msgid "CiVariable|Create wildcard"
msgstr "와ì¼ë“œ ì¹´ë“œ 만들기"
msgid "CiVariable|Error occurred while saving variables"
-msgstr ""
+msgstr "변수를 저장하는 ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "CiVariable|Masked"
msgstr ""
@@ -2595,9 +3055,12 @@ msgid "ClassificationLabelUnavailable|is unavailable: %{reason}"
msgstr "사용할 수 없습니다: %{reason}"
msgid "Clear"
-msgstr ""
+msgstr "지우기"
msgid "Clear input"
+msgstr "입력 지우기"
+
+msgid "Clear recent searches"
msgstr ""
msgid "Clear search"
@@ -2606,9 +3069,15 @@ msgstr "검색 지우기"
msgid "Clear search input"
msgstr "검색 입력 지우기"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2630,6 +3099,9 @@ msgstr "ì˜¤ë¥¸ìª½ì˜ <strong>ì„ íƒ ì—†ìŒ</strong> ë²„íŠ¼ì„ í´ë¦­ 하십시ì˜
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "Kubernetes 페ì´ì§€ë¡œ ì´ë™í•˜ì—¬ 설치 프로세스를 시작하려면 아래 ë²„íŠ¼ì„ í´ë¦­í•˜ì‹­ì‹œì˜¤."
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "í´ë¦­í•˜ì—¬ 확장하십시오."
@@ -2649,44 +3121,62 @@ msgid "Clients"
msgstr "í´ë¼ì´ì–¸íŠ¸"
msgid "Clone"
-msgstr ""
+msgstr "Clone"
msgid "Clone repository"
msgstr "저장소 í´ë¡ "
msgid "Clone with %{http_label}"
-msgstr ""
+msgstr "%{http_label} clone"
msgid "Clone with KRB5"
-msgstr ""
+msgstr "KRB5로 clone"
msgid "Clone with SSH"
-msgstr ""
+msgstr "SSH로 clone"
msgid "Close"
msgstr "닫기"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "ì—픽 닫기"
msgid "Close milestone"
-msgstr ""
+msgstr "마ì¼ìŠ¤í†¤ 닫기"
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "닫힘"
msgid "Closed issues"
msgstr "닫힌 ì´ìŠˆ"
-msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
+msgid "Closed this %{quick_action_target}."
msgstr ""
-msgid "ClusterIntegration| can be used instead of a custom domain."
+msgid "Closes this %{quick_action_target}."
msgstr ""
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
+msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
+msgstr "%{custom_domain_start}추가 정보%{custom_domain_end}"
+
+msgid "ClusterIntegration| can be used instead of a custom domain."
+msgstr "ê°œì¸ ë„ë©”ì¸ ëŒ€ì‹  사용할 수 있습니다."
+
msgid "ClusterIntegration| is the default environment scope for this cluster. This means that all jobs, regardless of their environment, will use this cluster. %{environment_scope_start}More information%{environment_scope_end}"
msgstr ""
@@ -2729,6 +3219,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Kubernetes í´ëŸ¬ìŠ¤í„° í†µí•©ì— ëŒ€í•œ 고급 옵션"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2738,6 +3231,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Google Cloud APIì— ì—°ê²°ì„ ì‹œë„하는 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. ë‚˜ì¤‘ì— ë‹¤ì‹œ ì‹œë„하십시오."
@@ -2777,12 +3273,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "ì¸ì¦ 기관 번들 (PEM í¬ë§·)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2813,12 +3315,21 @@ msgstr "Kubernetes í´ëŸ¬ìŠ¤í„° ì´ë¦„ 복사"
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Kubernetes í´ëŸ¬ìŠ¤í„° ìƒì„±"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "알고 계셨나요?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2867,6 +3378,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Google Cloud Platform 프로ì íŠ¸"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes 엔진"
@@ -2954,8 +3468,8 @@ msgstr "Kubernetes í´ëŸ¬ìŠ¤í„°ê°€ Google Kubernetes Engineì—ì„œ ìƒì„± 중입ë
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Kubernetes í´ëŸ¬ìŠ¤í„° ì´ë¦„"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Kubernetes í´ëŸ¬ìŠ¤í„°ëŠ” Google Kubernetes Engineì—ì„œ 성공ì ìœ¼ë¡œ ìƒì„±ë˜ì—ˆìŠµë‹ˆë‹¤. Kubernetes í´ëŸ¬ìŠ¤í„°ì˜ 세부 정보를 보려면 페ì´ì§€ë¥¼ 새로 고침하십시오."
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr ""
@@ -2969,6 +3483,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "Kubernetesì— ëŒ€í•´ ìžì„¸ížˆ 알아보기."
@@ -2981,6 +3498,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr "Let's Encrypt"
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "머신 타입"
@@ -2990,6 +3513,9 @@ msgstr "Kubernetes í´ëŸ¬ìŠ¤í„°ë¥¼ 만들려면 %{link_to_requirements} ë§í¬ì—
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "%{link_gke}ì— ë°©ë¬¸í•˜ì—¬ Kubernetes í´ëŸ¬ìŠ¤í„°ë¥¼ 관리하세요."
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -2999,6 +3525,9 @@ msgstr "프로ì íŠ¸ ì—†ìŒ"
msgid "ClusterIntegration|No projects matched your search"
msgstr "검색과 ì¼ì¹˜í•˜ëŠ” 프로ì íŠ¸ê°€ 없습니다."
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "검색과 ì¼ì¹˜í•˜ëŠ” ì˜ì—­ì´ 없습니다."
@@ -3023,6 +3552,9 @@ msgstr "프로ì íŠ¸ í´ëŸ¬ìŠ¤í„°"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "프로ì íŠ¸ 네임 스페ì´ìŠ¤ (optional, unique)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3035,6 +3567,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "Kubernetes í´ëŸ¬ìŠ¤í„° 통합 알아보기 %{link_to_help_page}"
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Kubernetes í´ëŸ¬ìŠ¤í„° 제거"
@@ -3053,15 +3588,24 @@ msgstr "설치 시작 요청 실패"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "변경 ì‚¬í•­ì„ ì €ìž¥"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr "ClusterIntegration|프로ì íŠ¸ 검색"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "ClusterIntegration|ì˜ì—­ 검색"
@@ -3080,6 +3624,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "ClusterIntegration|지역 ì„ íƒ"
@@ -3119,18 +3666,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3152,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3188,21 +3744,27 @@ msgstr "문서"
msgid "ClusterIntegration|help page"
msgstr "ë„ì›€ë§ íŽ˜ì´ì§€"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "요구 ì‚¬í•­ì„ ì¶©ì¡±"
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
-msgstr "ì •ìƒì ìœ¼ë¡œ 구성ë˜ì—ˆìŒ"
-
msgid "ClusterIntegration|sign up"
msgstr "ClusterIntegration|가입"
-msgid "Code"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
+msgid "Code"
+msgstr "코드"
+
msgid "Code Owners"
msgstr ""
@@ -3227,15 +3789,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr "사ì´ë“œ ë°” 축소"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "코멘트"
@@ -3245,11 +3816,11 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
-msgstr "댓글 작성 ë° í† ë¡  í•´ê²°"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "댓글 작성 ë° í† ë¡ ì„ í•´ê²°í•˜ì§€ ì•ŠìŒ"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr ""
@@ -3257,6 +3828,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "코멘트"
@@ -3267,11 +3841,14 @@ msgstr[0] "커밋"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "커밋 메시지"
msgid "Commit deleted"
-msgstr ""
+msgstr "ì»¤ë°‹ì´ ì‚­ì œë¨"
msgid "Commit duration in minutes for last 30 commits"
msgstr "최근 30 ê±´ì˜ ì»¤ë°‹ 소요시간 (분)"
@@ -3328,7 +3905,7 @@ msgid "Commit…"
msgstr "커밋..."
msgid "Company"
-msgstr ""
+msgstr "회사"
msgid "Compare"
msgstr "비êµ"
@@ -3340,7 +3917,7 @@ msgid "Compare Revisions"
msgstr "리비전 비êµ"
msgid "Compare changes"
-msgstr ""
+msgstr "변경 사항 비êµ"
msgid "Compare changes with the last commit"
msgstr "마지막 커밋과 ë³€ê²½ì  ë¹„êµ"
@@ -3363,12 +3940,18 @@ msgstr "대ìƒ"
msgid "CompareBranches|There isn't anything to compare."
msgstr "비êµí•  ê²ƒì´ ì—†ìŠµë‹ˆë‹¤."
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "비밀"
msgid "Confidentiality"
msgstr "비밀"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3376,6 +3959,9 @@ msgid "Configure Gitaly timeouts."
msgstr "Gitaly 시간 제한 설정."
msgid "Configure Let's Encrypt"
+msgstr "Let's Encrypt 설정"
+
+msgid "Configure Prometheus"
msgstr ""
msgid "Configure Tracing"
@@ -3387,6 +3973,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "ìžë™ git 검사 ë° ì €ìž¥ì†Œ 하우스 í‚¤í•‘ì„ ì„¤ì •í•©ë‹ˆë‹¤."
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr "웹 ë° API ìš”ì²­ì— ëŒ€í•œ ì œí•œì„ ì„¤ì •í•©ë‹ˆë‹¤."
@@ -3445,7 +4034,7 @@ msgid "Contact sales to upgrade"
msgstr ""
msgid "Contact your Administrator to upgrade your license."
-msgstr ""
+msgstr "관리ìžì—게 문ì˜í•˜ì—¬ ë‚˜ì˜ ë¼ì´ì„¼ìŠ¤ë¥¼ 업그레ì´ë“œí•˜ì„¸ìš”."
msgid "Container Registry"
msgstr "컨테ì´ë„ˆ 레지스트리"
@@ -3453,32 +4042,39 @@ msgstr "컨테ì´ë„ˆ 레지스트리"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "GitLab ì‚¬ìš©ìž ì´ë¦„ ë° ì•”í˜¸ë¥¼ 사용 하여 GitLabì˜ ì»¨í…Œì´ë„ˆ ë ˆì§€ìŠ¤íŠ¸ë¦¬ì— ì²˜ìŒ ë¡œê·¸ì¸ í•©ë‹ˆë‹¤. %{link_2fa} 를 사용한다면 %{link_token} 를 사용해야 합니다."
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLabì€ ì´ë¯¸ì§€ ì´ë¦„ì— ìµœëŒ€ 3 ë ˆë²¨ì„ ì§€ì›í•©ë‹ˆë‹¤. 다ìŒì˜ 예제 ì´ë¯¸ì§€ë“¤ì´ ë‹¹ì‹ ì˜ í”„ë¡œì íŠ¸ì—ì„œ 유효합니다"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "컨테ì´ë„ˆ 레지스트리를 사용 하는 방법"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "ë” ì•Œì•„ë³´ê¸°"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "컨테ì´ë„ˆ ë ˆì§€ìŠ¤íŠ¸ë¦¬ì— ì´ ì»¨í…Œì´ë„ˆ ì´ë¯¸ì§€ì— 대한 태그가 존재하지 않습니다."
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "로그ì¸í•˜ë©´, ì¼ë°˜ì ì¸ %{build} ë° %{push} ëª…ë ¹ì„ ì‚¬ìš©í•˜ì—¬ 컨테ì´ë„ˆ ì´ë¯¸ì§€ë¥¼ ìžìœ ë¡­ê²Œ ìƒì„±í•˜ê³  업로드할 수 있습니다."
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "저장소 제거"
-msgid "ContainerRegistry|Remove tag"
-msgstr "태그 제거"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "í¬ê¸°"
@@ -3489,13 +4085,28 @@ msgstr "태그"
msgid "ContainerRegistry|Tag ID"
msgstr "태그 ID"
-msgid "ContainerRegistry|Use different image names"
-msgstr "다른 ì´ë¯¸ì§€ ì´ë¦„ 사용"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "GitLabì— í†µí•© Docker 컨테ì´ë„ˆ 레지스트리를 ì´ìš©í•˜ë©´, 모든 프로ì íŠ¸ëŠ” ìžì‹ ì˜ Docker ì´ë¯¸ì§€ë¥¼ 저장할 수 있는 ê³µê°„ì„ ê°€ì§ˆ 수 있습니다."
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3558,7 +4169,13 @@ msgstr ""
msgid "ConvDev Index"
msgstr "ConvDev ì¸ë±ìŠ¤"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
+msgstr "복사ë¨"
+
+msgid "Copied labels and milestone from %{source_issuable_reference}."
msgstr ""
msgid "Copy %{http_label} clone URL"
@@ -3567,6 +4184,9 @@ msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr "%{protocol} í´ë¡  URL 복사"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr "í´ë¦½ ë³´ë“œì— ID 복사"
@@ -3603,6 +4223,9 @@ msgstr ""
msgid "Copy link"
msgstr "ë§í¬ 복사"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr "ë ˆí¼ëŸ°ìŠ¤ë¥¼ í´ë¦½ë³´ë“œë¡œ 복사"
@@ -3618,6 +4241,12 @@ msgstr "í´ë¦½ë³´ë“œì— 복사"
msgid "Copy token to clipboard"
msgstr "í´ë¦½ë³´ë“œì— í† í° ë³µì‚¬"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3633,13 +4262,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3648,12 +4280,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr "만들기"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "새 디렉토리 만들기"
@@ -3666,7 +4307,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3687,12 +4328,24 @@ msgstr "%{protocol}ì„ (를) 통해 Pull 하거나 Push í•  ê°œì¸ ì•¡ì„¸ìŠ¤ 토
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "브랜치 ìƒì„±"
msgid "Create commit"
msgstr "커밋 ìƒì„±"
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "디렉토리 만들기"
@@ -3723,6 +4376,9 @@ msgstr "머지 리퀘스트(MR) ë° ë¸Œëžœì¹˜ ìƒì„±"
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "새 브랜치 ìƒì„±"
@@ -3741,6 +4397,9 @@ msgstr "새 ë¼ë²¨ 만들기"
msgid "Create new..."
msgstr "새로 만들기 ..."
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "새로운 프로ì íŠ¸ ë¼ë²¨"
@@ -3765,6 +4424,12 @@ msgstr "ìƒì„±ë¨"
msgid "Created At"
msgstr "ìƒì„± 위치"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "ë‚˜ì— ì˜í•´ ìƒì„±ë¨"
@@ -3786,23 +4451,35 @@ msgstr "ìƒì„±ì¼"
msgid "Created on:"
msgstr "ìƒì„±ì¼:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr "ì—픽 ìƒì„± 중"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Cron 시간대"
msgid "Cron syntax"
msgstr "í¬ë¡  구문"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "현재 브랜치"
msgid "Current Project"
-msgstr ""
+msgstr "현재 프로잭트"
msgid "Current node"
msgstr "현재 노드"
@@ -3834,6 +4511,45 @@ msgstr "ì‚¬ìš©ìž ì§€ì • 프로ì íŠ¸ 템플릿"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "ìƒ‰ìƒ ë§žì¶¤í™”"
@@ -3843,18 +4559,51 @@ msgstr "FogBugz ì´ë©”ì¼ ì£¼ì†Œì™€ 사용ìžëª…ì„ GitLab으로 가져오는 ë°
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "Google Code ì´ë©”ì¼ê³¼ 사용ìžëª…ì„ GitLab으로 가져오는 ë°©ë²•ì„ ì‚¬ìš©ìž ì •ì˜í•˜ì„¸ìš”. ë‹¤ìŒ ë‹¨ê³„ì—서는 가져올 프로ì íŠ¸ë¥¼ ì„ íƒí•  수 있습니다."
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "파ì´í”„ë¼ì¸ ì„¤ì •ì„ ë³€ê²½í•˜ê³ , ë‚˜ì˜ íŒŒì´í”„ë¼ì¸ìƒíƒœì™€ ì ìš© 범위 보고서를 보세요."
msgid "Cycle Analytics"
msgstr "사ì´í´ 분ì„"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "Cycle Analytics는 ë‹¹ì‹ ì˜ í”„ë¡œì íŠ¸ì—ì„œ ì•„ì´ë””ì–´ê°€ 제품화 ë˜ê¸°ê¹Œì§€ 걸리는 ì‹œê°„ì„ ëŒ€ëžµì ìœ¼ë¡œ ë³´ì—¬ì¤ë‹ˆë‹¤."
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "코드"
@@ -3876,9 +4625,32 @@ msgstr "스테ì´ì§•"
msgid "CycleAnalyticsStage|Test"
msgstr "테스트"
-msgid "DNS"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
msgstr ""
+msgid "DNS"
+msgstr "DNS"
+
msgid "Dashboard"
msgstr "대시보드"
@@ -3889,10 +4661,10 @@ msgid "DashboardProjects|Personal"
msgstr "ê°œì¸"
msgid "DashboardProjects|Trending"
-msgstr ""
+msgstr "ì¸ê¸°"
msgid "Dashboards"
-msgstr ""
+msgstr "대시보드"
msgid "Dashboard|%{firstProject} and %{secondProject}"
msgstr ""
@@ -3900,7 +4672,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3921,6 +4693,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr "디버그"
@@ -3942,12 +4717,21 @@ msgstr "기본 브랜치"
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr "기본 분류 ë¼ë²¨"
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -3990,12 +4774,21 @@ msgstr "지연ë¨"
msgid "Delete"
msgstr "삭제 "
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "패키지 삭제"
msgid "Delete Snippet"
msgstr "스니펫 삭제"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "댓글 삭제"
@@ -4032,6 +4825,9 @@ msgstr "ì‚­ì œë¨"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4050,6 +4846,20 @@ msgstr "거부"
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4062,12 +4872,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4077,6 +4896,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4095,6 +4917,14 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "ë°°í¬"
@@ -4105,6 +4935,15 @@ msgstr "ë°°í¬ í‚¤"
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} 기타"
@@ -4177,6 +5016,9 @@ msgstr "ë°°í¬ í† í° ë§Œë“¤ê¸°"
msgid "DeployTokens|Created"
msgstr "만들어ì§"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "ë°°í¬ í† í°"
@@ -4228,6 +5070,9 @@ msgstr "프로ì íŠ¸ ë°°í¬ í† í°ì„ 새로 만들었습니다."
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr "ë°°í¬ë¨"
@@ -4252,9 +5097,30 @@ msgstr ""
msgid "Description:"
msgstr "설명:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4270,6 +5136,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4279,9 +5151,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4303,9 +5172,15 @@ msgstr "diff 컨í…츠 제한"
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr "사용가능한 íŒŒì¼ ì´ë¦„ì´ ì—†ìŠµë‹ˆë‹¤."
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "Diffs | ë³µìˆ˜ì˜ ì—´ì„ íŒ¨ì¹˜í•˜ëŠ” 중 문제가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
@@ -4318,6 +5193,9 @@ msgstr "디렉토리 ì´ë¦„"
msgid "Disable"
msgstr "사용 안 함"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "ì´ í”„ë¡œì íŠ¸ì— 대해 사용 중지"
@@ -4375,6 +5253,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4405,6 +5289,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "Google Code ì´ë©”ì¼ ì£¼ì†Œì™€ 사용ìžëª…ì„ GitLab으로 가져오는 ë°©ë²•ì„ ì‚¬ìš©ìž ì •ì˜í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
@@ -4414,6 +5301,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr "ì¸ê¸°ìžˆëŠ” ID 제공 ì—…ì²´ì— ëŒ€í•œ 문서"
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr "ë„ë©”ì¸"
@@ -4435,9 +5325,15 @@ msgstr "완료"
msgid "Download"
msgstr "다운로드"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4447,6 +5343,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4483,9 +5382,15 @@ msgstr "ê° Runner는 ë‹¤ìŒ ìƒíƒœ 중 í•˜ë‚˜ì¼ ìˆ˜ 있습니다."
msgid "Edit"
msgstr "편집"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4507,12 +5412,21 @@ msgstr "스니펫 편집"
msgid "Edit application"
msgstr "애플리케ì´ì…˜ 수정"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4531,6 +5445,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4555,6 +5481,9 @@ msgstr "ì´ë©”ì¼"
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "패치를 ì´ë©”ì¼ë¡œ 보냄"
@@ -4639,12 +5568,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr "ì´ ê·¸ë£¹ì— SAML ì¸ì¦ 사용"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "Sentry를 사용해 오류 보고와 ë¡œê¹…ì„ í™œì„±í™”í•©ë‹ˆë””."
+msgid "Enable access to Grafana"
+msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr "InfluxDB 매트릭스를 활성화하고 구성합니다."
@@ -4657,6 +5589,9 @@ msgstr "외부 서비스로 분류 제어 사용"
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "ì´ í”„ë¡œì íŠ¸ì— 대해 사용"
@@ -4675,12 +5610,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr "버전 í™•ì¸ ë° ì‚¬ìš© í•‘ì„ ì‚¬ìš©í•˜ê±°ë‚˜ 사용하지 ì•Šë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤."
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "reCAPTCHA ë˜ëŠ” Akismetì„ í™œì„±í™”í•˜ê³  IP ì œí•œì„ ì„¤ì •í•©ë‹ˆë‹¤."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4714,18 +5655,36 @@ msgstr "(UTC)ì— ì¢…ë£Œë©ë‹ˆë‹¤"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "아래 Bitbucket Server URL ë° ê°œì¸ ì•¡ì„¸ìŠ¤ 토í°ì„ 입력하십시오."
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "ì´ìŠˆ 설명 ìž…ë ¥"
@@ -4738,9 +5697,18 @@ msgstr "머지 리퀘스트(MR) ì„¤ëª…ì„ ìž…ë ¥ 해주세요"
msgid "Enter the merge request title"
msgstr "머지 리퀘스트(MR) ì œëª©ì„ ìž…ë ¥ 해주세요"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4772,7 +5740,7 @@ msgid "EnvironmentsDashboard|Job: %{job}"
msgstr ""
msgid "EnvironmentsDashboard|More actions"
-msgstr ""
+msgstr "추가 작업"
msgid "EnvironmentsDashboard|Remove"
msgstr ""
@@ -4909,9 +5877,15 @@ msgstr "ì—픽"
msgid "Epics"
msgstr "ì—픽"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr "ì—픽 로드맵"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4948,12 +5922,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -4972,9 +5961,6 @@ msgstr "시작"
msgid "Error"
msgstr "ì—러"
-msgid "Error Reporting and Logging"
-msgstr "오류 ë³´ê³  ë° ë¡œê¹…"
-
msgid "Error Tracking"
msgstr ""
@@ -4990,6 +5976,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr "ê¸°ì—¬ìž ë°ì´í„°ë¥¼ 가져오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "ë¼ë²¨ì„ 가져 오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
@@ -5047,9 +6039,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "êµ¬ë… ì•Œë¦¼ì„ ì „í™˜í•  ë•Œ 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5068,14 +6066,17 @@ msgstr ""
msgid "Error saving label update."
msgstr "ë ˆì´ë¸” 갱신 중 오류 ë°œìƒ"
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "모든 해야할 ì¼ì˜ ìƒíƒœë¥¼ ë³€ê²½í•˜ë˜ ì¤‘ 오류"
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "해야할 ì¼ ìƒíƒœ 갱신 중 오류 ë°œìƒ"
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5096,7 +6097,7 @@ msgid "Error with Akismet. Please check the logs for more info."
msgstr ""
msgid "Error:"
-msgstr ""
+msgstr "오류: "
msgid "ErrorTracking|Active"
msgstr ""
@@ -5165,11 +6166,17 @@ msgid "Every week (Sundays at 4:00am)"
msgstr "매주 (ì¼ìš”ì¼ ì˜¤ì „ 4ì‹œì—)"
msgid "Everyone"
+msgstr "모ë‘"
+
+msgid "Everyone With Access"
msgstr ""
msgid "Everyone can contribute"
msgstr "모ë‘ê°€ 기여할 수 있ìŒ."
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5191,6 +6198,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5203,18 +6213,33 @@ msgstr "ëª¨ë‘ í™•ìž¥"
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "사ì´ë“œë°” 확장"
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr "만료ì¼"
msgid "Expired"
-msgstr ""
+msgstr "만료ë¨"
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5240,7 +6265,7 @@ msgid "Explore public groups"
msgstr "공개 그룹 íƒìƒ‰"
msgid "Export as CSV"
-msgstr ""
+msgstr "CSV로 내보내기"
msgid "Export issues"
msgstr ""
@@ -5269,6 +6294,12 @@ msgstr "외부 ì¸ì¦ì´ ì´ í”„ë¡œì íŠ¸ì— 대한 액세스를 거부했습니
msgid "External authorization request timeout"
msgstr "외부 ì¸ì¦ 요청 시간 초과"
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5308,6 +6339,15 @@ msgstr "작업 실패"
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "소유ìžë¥¼ 변경하지 못했습니다"
@@ -5329,6 +6369,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5350,6 +6393,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5359,6 +6414,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "게시íŒì—ì„œ ì´ìŠˆë¥¼ ì œê±°í•˜ëŠ”ë° ì‹¤íŒ¨í•˜ì˜€ìŠµë‹ˆë‹¤, 다시 ì‹œë„í•´ 주십시오."
@@ -5392,6 +6450,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5419,6 +6480,9 @@ msgstr ""
msgid "Failure"
msgstr "실패"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5449,6 +6513,15 @@ msgstr "API URL"
msgid "FeatureFlags|Active"
msgstr "활성화"
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr "구성"
@@ -5470,6 +6543,9 @@ msgstr "설명"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "Feature 플래그 수정"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5479,19 +6555,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr "Feature 플래그"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5506,10 +6582,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr "ì¸ìŠ¤í„´ìŠ¤ ID"
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5521,19 +6597,43 @@ msgstr "새로운"
msgid "FeatureFlags|New Feature Flag"
msgstr "새로운 Feature 플래그"
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "ìƒíƒœ"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5542,6 +6642,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "2ì›”"
@@ -5560,12 +6663,9 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "ì´ íŽ˜ì´ì§€ì˜ ìž…ë ¥ëž€ì€ ì´ì œ 변경할 수 없습니다, 설정할 수 있습니다."
-
msgid "File"
msgid_plural "Files"
-msgstr[0] ""
+msgstr[0] "파ì¼"
msgid "File added"
msgstr ""
@@ -5624,6 +6724,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "í•„í„°..."
@@ -5666,6 +6769,9 @@ msgstr "완료"
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr "수정 날짜"
@@ -5729,6 +6835,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5765,12 +6874,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ".gitlab-ci.ymlì—ì„œ 오류를 발견했습니다:"
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "GitLab.com Gold 무료 ì²´í—˜íŒ"
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5831,6 +6946,9 @@ msgstr " 초기설정 ë ˆì´ë¸” 세트 ìƒì„±"
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5843,6 +6961,9 @@ msgstr "Geo 노드"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "노드가 실패하거나 깨졌습니다."
@@ -5906,6 +7027,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6014,10 +7138,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6026,10 +7150,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr "모든 프로ì íŠ¸"
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6038,9 +7165,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6065,10 +7198,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6119,12 +7255,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr "재확ì¸"
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr "다시 다운로드"
@@ -6143,6 +7273,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr "ìž¬ì‹œë„ íšŸìˆ˜"
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6167,7 +7303,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr "Geo|ë™ê¸°í™” 실패 - %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6224,6 +7360,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6281,6 +7420,15 @@ msgstr "GitLab 사용ìž"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6299,9 +7447,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr "GitLab.com 가져오기"
-msgid "GitLab’s issue tracker"
-msgstr "GitLabì˜ ì´ìŠˆ 트래커"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6317,9 +7462,18 @@ msgstr "Gitea 호스트 URL"
msgid "Gitea Import"
msgstr "Gitea 가져오기"
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6332,6 +7486,12 @@ msgstr ""
msgid "Go back"
msgstr "뒤로 가기"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6341,15 +7501,99 @@ msgstr "ì´ë™"
msgid "Go to %{link_to_google_takeout}."
msgstr "%{link_to_google_takeout}ë¡œ ì´ë™í•˜ì‹­ì‹œì˜¤."
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6359,8 +7603,8 @@ msgstr "Google Code 가져오기"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "Google ì¸ì¦ì„ 사용할 수 없습니다. %{link_to_documentation} GitLab 관리ìžì—게 문ì˜í•˜ì„¸ìš”."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr ""
@@ -6368,12 +7612,18 @@ msgstr ""
msgid "Got it!"
msgstr "확ì¸!"
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr "그래프"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6437,15 +7687,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr "그룹: %{group_name}"
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6482,6 +7732,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6557,6 +7810,9 @@ msgstr "그룹 배지를 ì‚¬ìš©ìž ì •ì˜í•©ë‹ˆë‹¤."
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "ë°°ì§€ì— ëŒ€í•´ ìžì„¸ížˆ 알아보세요."
@@ -6590,6 +7846,9 @@ msgstr "ì´ ì„¤ì •ì€ %{ancestor_group} ì— ì ìš©ë©ë‹ˆë‹¤. ì„¤ì •ì„ ìž¬ì •ì˜
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "ì´ ì„¤ì •ì€ ê·¸ë£¹ 소유ìžì— ì˜í•´ 재정ì˜ë˜ì§€ ì•Šì€ ëª¨ë“  하위 ê·¸ë£¹ì— ì ìš©ë©ë‹ˆë‹¤. ì´ë¯¸ 프로ì íŠ¸ì— 대한 ì ‘ê·¼ ê¶Œí•œì„ ê°€ì§„ ê·¸ë£¹ë“¤ì€ ê¶Œí•œì´ ì§ì ‘ 제거ë˜ì§€ 않는 í•œ 접근할 수 있습니다."
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "부모 ê·¸ë£¹ì˜ \"그룹 lock 공유\" ê°€ 사용 가능하ë„ë¡ ì„¤ì •ë˜ì–´ìžˆìœ¼ë©´, 부모 ê·¸ë£¹ì˜ ì†Œìœ ìžë¥¼ ì œì™¸í•˜ê³ ëˆ„êµ¬ë„ ì‚¬ìš©í•˜ì§€ ì•Šë„ë¡ ì„¤ì •í•  수 없습니다."
@@ -6713,6 +7972,12 @@ msgstr "ë„ì›€ë§ íŽ˜ì´ì§€"
msgid "Help page text and support page url."
msgstr "ë„ì›€ë§ íŽ˜ì´ì§€ í…스트 ë° ì§€ì› íŽ˜ì´ì§€ url."
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6734,6 +7999,9 @@ msgstr "페ì´ë¡œë“œ 숨기기"
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "값 숨기기"
@@ -6741,6 +8009,9 @@ msgstr[0] "값 숨기기"
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6759,6 +8030,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6768,6 +8042,9 @@ msgstr "Housekeepingì´ ì„±ê³µì ìœ¼ë¡œ 시작ë˜ì—ˆìŠµë‹ˆë‹¤"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6777,6 +8054,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "%{terms_link}ì— ë™ì˜í•©ë‹ˆë‹¤."
@@ -6789,9 +8069,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "CodeSandbox client side evaluation를 사용하여 Web IDEì—ì„œ JavaScript 프로ì íŠ¸ì˜ 실시간 미리보기를 허용합니다."
@@ -6828,6 +8114,9 @@ msgstr "미리보기 새로 고침"
msgid "IDE|Review"
msgstr "리뷰"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "IP 주소"
@@ -6891,6 +8180,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -6996,7 +8291,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7050,13 +8345,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr "호환ë˜ì§€ 않는 프로ì íŠ¸"
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7101,6 +8399,9 @@ msgstr "Kubernetesì— Runner 설치"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7117,6 +8418,9 @@ msgstr "ì¸ìŠ¤í„´ìŠ¤ 통계"
msgid "Instance Statistics visibility"
msgstr "ì¸ìŠ¤í„´ìŠ¤ 통계 가시성"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "ì¸ìŠ¤í„´ìŠ¤ê°€ 여러 Kubernetes í´ëŸ¬ìŠ¤í„°ë¥¼ 지ì›í•˜ì§€ 않습니다."
@@ -7159,6 +8463,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7207,16 +8514,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7261,9 +8574,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "ì´ìŠˆ"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "ì´ìŠˆëŠ” 버그, ìž‘ì—… í˜¹ì€ ë…¼ì˜í•  ì•„ì´ë””ì–´ì¼ ìˆ˜ 있습니다. 그리고, ì´ìŠˆëŠ” 검색 ë° í•„í„°ë§ ê°€ëŠ¥í•©ë‹ˆë‹¤."
@@ -7279,7 +8610,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7297,6 +8631,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7469,11 +8809,14 @@ msgid "June"
msgstr "6ì›”"
msgid "Key (PEM)"
-msgstr ""
+msgstr "키 (PEM)"
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7498,11 +8841,14 @@ msgstr "Kubernetes í´ëŸ¬ìŠ¤í„°ê°€ 성공ì ìœ¼ë¡œ ì—…ë°ì´íŠ¸ë˜ì—ˆìŠµë‹ˆë‹¤."
msgid "Kubernetes configured"
msgstr "Kubernetes 설정ë¨"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "Kubernetes 서비스 í†µí•©ì€ ë” ì´ìƒ 사용ë˜ì§€ 않습니다. %{deprecated_message_content} 새로운 <a href=\"%{url}\"/>Kubernetes í´ëŸ¬ìŠ¤í„°</a> 페ì´ì§€"
+msgid "LDAP"
+msgstr ""
msgid "LDAP settings"
msgstr ""
@@ -7586,6 +8932,9 @@ msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "최근 %d ì¼"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "최근 파ì´í”„ë¼ì¸"
@@ -7607,15 +8956,24 @@ msgstr "%{date}ì— ë§ˆì§€ë§‰ 편집ë¨"
msgid "Last edited by %{name}"
msgstr "%{name}가 마지막으로 편집함"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "최근 ì—…ë°ì´íŠ¸"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "최근 ì—…ë°ì´íŠ¸ë¨"
@@ -7634,7 +8992,7 @@ msgstr "at"
msgid "Latest changes"
msgstr "최근 변경사항"
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7652,9 +9010,6 @@ msgstr ""
msgid "Learn more"
msgstr "ë” ì•Œì•„ë³´ê¸°"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7673,6 +9028,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7682,6 +9040,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "ë” ìžì„¸ížˆ 알아보기"
@@ -7712,77 +9073,97 @@ msgstr ""
msgid "License"
msgstr "ë¼ì´ì„¼ìŠ¤"
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "ë¼ì´ì„¼ìŠ¤ 승ì¸"
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "ë¼ì´ì„¼ìŠ¤ë¥¼ 승ì¸í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "승ì¸ë¨"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
-msgstr "블랙리스트 ë¼ì´ì„¼ìŠ¤"
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
-msgid "LicenseManagement|Blacklist license?"
-msgstr "블랙리스트 ë¼ì´ì„¼ìŠ¤ë¡œ 등ë¡í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
-msgid "LicenseManagement|Blacklisted"
-msgstr "블랙리스트로 등ë¡ë¨"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
-msgstr "ë¼ì´ì„¼ìŠ¤"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
-msgid "LicenseManagement|License Management"
-msgstr "ë¼ì´ì„¼ìŠ¤ 관리"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
-msgid "LicenseManagement|License details"
-msgstr "ë¼ì´ì„ ìŠ¤ ì •ë³´"
+msgid "LicenseCompliance|License"
+msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "ì´ í”„ë¡œì íŠ¸ì˜ ìŠ¹ì¸ ë° ë¸”ëž™ë¦¬ìŠ¤íŠ¸ ë¼ì´ì„¼ìŠ¤ë¥¼ 관리합니다."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
-msgid "LicenseManagement|Packages"
-msgstr "패키지"
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
-msgid "LicenseManagement|Remove license"
-msgstr "ë¼ì´ì„¼ìŠ¤ 제거"
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
-msgid "LicenseManagement|Remove license?"
-msgstr "ë¼ì´ì„¼ìŠ¤ë¥¼ 제거하시겠습니까?"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "ì´ í”„ë¡œì íŠ¸ì—는 ìŠ¹ì¸ ë˜ëŠ” ë¸”ëž™ë¦¬ìŠ¤íŠ¸ëœ ë¼ì´ì„¼ìŠ¤ê°€ 없습니다."
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|URL"
-msgstr "URL"
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "ì´ í”„ë¡œì íŠ¸ì—ì„œ ë¼ì´ì„¼ìŠ¤ %{name}(ì„)를 제거하려고합니다."
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
+
+msgid "LicenseCompliance|Submit"
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
msgid "Licensed Features"
msgstr ""
@@ -7793,6 +9174,9 @@ msgstr ""
msgid "Licenses"
msgstr "ë¼ì´ì„¼ìŠ¤"
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7800,12 +9184,18 @@ msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
msgstr[0] "최대 %d ì´ë²¤íŠ¸ 만 표시하는 것으로 제한ë©ë‹ˆë‹¤."
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "목ë¡"
@@ -7818,15 +9208,15 @@ msgstr "사용 가능한 저장소 목ë¡"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr ""
msgid "List your Bitbucket Server repositories"
msgstr "Bitbucket Server 저장소 목ë¡"
-msgid "List your GitHub repositories"
-msgstr "GitHub 저장소 목ë¡"
-
msgid "Live preview"
msgstr "실시간 미리보기"
@@ -7836,6 +9226,9 @@ msgstr "그룹 구성ì›ë“¤ì˜ ê¸°ì—¬ë„ í†µê³„ì¹˜ 로드 중"
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr "GitLab IDE 로드 중..."
@@ -7875,13 +9268,19 @@ msgstr "ìž ê¹€"
msgid "Locked Files"
msgstr "잠긴 파ì¼"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "현재 프로ì íŠ¸ì— ìž ê¹€"
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7893,6 +9292,9 @@ msgstr ""
msgid "Logs"
msgstr "로그"
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7908,19 +9310,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -7965,6 +9373,9 @@ msgstr "Manifest íŒŒì¼ ê°€ì ¸ì˜¤ê¸°"
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -7983,6 +9394,12 @@ msgstr "3ì›”"
msgid "March"
msgstr "3ì›”"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -7992,8 +9409,8 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
-msgstr "í•  ì¼ì„ 완료로 표시"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr ""
@@ -8004,15 +9421,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr "마í¬ë‹¤ìš´ 활성화ë¨"
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Maven 메타 ë°ì´í„°"
@@ -8070,9 +9538,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "머지 리퀘스트(MR)"
@@ -8100,6 +9577,9 @@ msgstr ""
msgid "Merge request"
msgstr "머지 리퀘스트(MR)"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "머지 리퀘스트(MR) 승ì¸"
@@ -8112,6 +9592,9 @@ msgstr "머지 리퀘스트(MR)"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "머지 리퀘스트(MR)는 프로ì íŠ¸ì˜ 변경 ì‚¬í•­ì„ ì œì•ˆí•˜ê³  변경 ì‚¬í•­ì„ ë‹¤ë¥¸ 사람들과 ë…¼ì˜ í•˜ëŠ” 곳입니다."
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8145,34 +9628,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
-msgstr ""
+msgid "MergeRequests|Saving the comment failed"
+msgstr "코멘트 저장 실패"
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "새로운 ì´ìŠˆì—ì„œ ì´ í† ë¡ ì„ í•´ê²°í•˜ì„¸ìš”."
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
-msgid "MergeRequests|Saving the comment failed"
-msgstr "코멘트 저장 실패"
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8187,23 +9670,23 @@ msgstr "êµì²´ëœ íŒŒì¼ ë³´ê¸° @ %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
-msgstr ""
+msgstr "%{paragraphStart} ì„¤ëª…ì„ %{descriptionChangedTimes} 번 변경했습니다. %{timeDifferenceMinutes}%{paragraphEnd}"
msgid "MergeRequest|Error dismissing suggestion popover. Please try again."
msgstr ""
@@ -8223,24 +9706,42 @@ msgstr "머지ë¨"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "메시지"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "측정 - Influx"
msgid "Metrics - Prometheus"
msgstr "측정 - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8409,9 +9910,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr "저장소 미러하기"
-
msgid "Mirror direction"
msgstr "미러 방향"
@@ -8451,6 +9949,9 @@ msgstr "취소"
msgid "Modal|Close"
msgstr "닫기"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8461,9 +9962,9 @@ msgid "Modify merge commit"
msgstr ""
msgid "Monday"
-msgstr ""
+msgstr "월요ì¼"
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8475,6 +9976,12 @@ msgstr "달"
msgid "More"
msgstr "ë” ë³´ê¸°"
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr "추가 작업"
@@ -8505,6 +10012,12 @@ msgstr "ì´ìŠˆ ì´ë™"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8514,6 +10027,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8566,7 +10085,7 @@ msgid "Nav|Sign out and sign in with a different account"
msgstr "로그아웃하고 다른 계정으로 로그ì¸"
msgid "Need help?"
-msgstr ""
+msgstr "ë„ì›€ì´ í•„ìš”í•˜ì‹ ê°€ìš”?"
msgid "Network"
msgstr "네트워í¬"
@@ -8608,6 +10127,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "새로운 파ì´í”„ë¼ì¸ ì¼ì •"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "새 스니펫"
@@ -8695,13 +10217,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr "아니오"
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8713,13 +10247,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8734,9 +10274,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "Gitaly Serverì— ì—°ê²°í•  수 없습니다. 로그를 확ì¸í•˜ì‹­ì‹œì˜¤!"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8746,6 +10283,15 @@ msgstr "기여를 ì°¾ì„ ìˆ˜ 없습니다."
msgid "No credit card required."
msgstr "신용 카드가 필요하지 않습니다."
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8770,12 +10316,18 @@ msgstr ""
msgid "No files found."
msgstr "파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다."
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr "ì„ íƒí•œ 기간 ë™ì•ˆ ì´ìŠˆê°€ 없습니다."
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "그런 ì´ë¦„ ë˜ëŠ” 설명ì´ìžˆëŠ” ë ˆì´ë¸”ì´ ì—†ìŠµë‹ˆë‹¤."
@@ -8830,9 +10382,15 @@ msgstr "Runners ì—†ìŒ"
msgid "No schedules"
msgstr "ì¼ì • ì—†ìŒ"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8842,6 +10400,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8854,6 +10415,9 @@ msgstr "노드"
msgid "None"
msgstr "ì—†ìŒ"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "사용할 수 ì—†ìŒ"
@@ -8872,6 +10436,9 @@ msgstr "ë°ì´í„°ê°€ 충분하지 않습니다."
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr "나중ì—"
@@ -8881,6 +10448,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8896,6 +10466,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "참고: 관리ìžì—게 %{github_integration_link} (ì„) 를 설정하여, GitHub를 통한 로그ì¸ì„ 허용하고 ê°œì¸ ì•¡ì„¸ìŠ¤ 토í°ì„ ìƒì„±í•˜ì§€ ì•Šê³  저장소를 가져올 수 있ë„ë¡ í—ˆìš©í•  수 있는지 문ì˜í•˜ì‹­ì‹œì˜¤."
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -8906,7 +10479,7 @@ msgid "Notes|Collapse replies"
msgstr ""
msgid "Notes|Show all activity"
-msgstr ""
+msgstr "모든 í™œë™ ë³´ê¸°"
msgid "Notes|Show comments only"
msgstr ""
@@ -8924,10 +10497,10 @@ msgid "Notification events"
msgstr "알림 ì´ë²¤íŠ¸"
msgid "Notification setting"
-msgstr ""
+msgstr "알림 설정"
msgid "Notification setting - %{notification_title}"
-msgstr ""
+msgstr "알림 설정 - %{notification_title}"
msgid "Notification settings saved"
msgstr ""
@@ -8992,6 +10565,9 @@ msgstr ""
msgid "Notifications"
msgstr "알림"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "알림 ë„기"
@@ -9010,9 +10586,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "확ì¸"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9028,6 +10616,9 @@ msgstr "í•„í„°"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9056,6 +10647,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr "관리ìžë§Œ 가능"
@@ -9080,6 +10677,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr "ì´ëŸ°, 확실합니까?"
@@ -9089,6 +10692,9 @@ msgstr "열기"
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9098,6 +10704,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr "Xcodeì—ì„œ 열기"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9135,7 +10747,7 @@ msgid "Operations"
msgstr "ìš´ì˜ìž"
msgid "Operations Dashboard"
-msgstr ""
+msgstr "작업 대시보드"
msgid "Operations Settings"
msgstr ""
@@ -9179,6 +10791,12 @@ msgstr "다른 정보"
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr "외부로 가는 요청"
@@ -9203,6 +10821,18 @@ msgstr "패키지 정보"
msgid "Package was removed"
msgstr "패키지가 제거ë˜ì—ˆìŠµë‹ˆë‹¤."
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "패키지"
@@ -9239,15 +10869,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr "마지막 »"
-msgid "Pagination|Next"
-msgstr "다ìŒ"
-
-msgid "Pagination|Prev"
-msgstr "ì´ì „"
+msgid "Pagination|Next ›"
+msgstr ""
msgid "Pagination|« First"
msgstr "« 처ìŒ"
+msgid "Pagination|‹ Prev"
+msgstr ""
+
msgid "Parameter"
msgstr ""
@@ -9317,9 +10947,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "경로 변경, 그룹 전송 ë˜ëŠ” 제거와 ê°™ì€ ê³ ê¸‰ ì˜µì…˜ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤."
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr "성능 최ì í™”"
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr "권한"
@@ -9347,12 +10995,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "파ì´í”„ë¼ì¸"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "파ì´í”„ë¼ì¸ 스케쥴"
@@ -9419,7 +11076,7 @@ msgstr "변수"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "ì‚¬ìš©ìž ì •ì˜"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9443,12 +11100,21 @@ msgstr "ì§€ë‚œì£¼ì˜ íŒŒì´í”„ë¼ì¸"
msgid "Pipelines for last year"
msgstr "ì§€ë‚œí•´ì˜ íŒŒì´í”„ë¼ì¸"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9497,15 +11163,30 @@ msgstr "ì´ í”„ë¡œì íŠ¸ëŠ” 현재 파ì´í”„ë¼ì¸ì„ 실행하ë„ë¡ ì„¤ì •ë˜ì
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9536,6 +11217,9 @@ msgstr "#%{pipelineId} 파ì´í”„ë¼ì¸ì„ 중지하시겠습니까?"
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr "변수"
@@ -9548,18 +11232,12 @@ msgstr "모ë‘"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "성공"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "스테ì´ì§•"
@@ -9590,6 +11268,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "계ì†í•˜ê¸° ì „ì— ì„œë¹„ìŠ¤ ì•½ê´€ì— ë™ì˜í•˜ì‹­ì‹œì˜¤."
@@ -9608,6 +11289,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9695,6 +11379,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "저장소를 가져오는 ë™ì•ˆ 기다려주십시오. 완료ë˜ë©´ ìžë™ìœ¼ë¡œ 페ì´ì§€ë¥¼ 새로고침 합니다."
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "환경 설정"
@@ -9704,7 +11391,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9731,6 +11418,9 @@ msgstr "테마 íƒìƒ‰"
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9788,6 +11478,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "주"
@@ -9824,6 +11520,21 @@ msgstr "비공개 프로ì íŠ¸ëŠ” ê°œì¸ ë„¤ìž„ìŠ¤íŽ˜ì´ìŠ¤ì—ì„œ 만들어집ë‹
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "프로필"
@@ -9938,6 +11649,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -9980,6 +11694,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr "경로"
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr "새 아바타 위치 ë° í¬ê¸° ì¡°ì ˆ"
@@ -10010,6 +11727,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "ì¼ë¶€ ì˜µì…˜ì€ LDAP 계정ì—ì„œ 사용할 수 없습니다."
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10115,6 +11835,12 @@ msgstr "ë‚˜ì˜ ìƒíƒœ"
msgid "Profiles|e.g. My MacBook key"
msgstr "예: 내 MacBook 키"
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10160,6 +11886,9 @@ msgstr "'%{project_name}'프로ì íŠ¸ê°€ 성공ì ìœ¼ë¡œ ì—…ë°ì´íŠ¸ë˜ì—ˆìŠµë‹
msgid "Project Badges"
msgstr "프로ì íŠ¸ 배지"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10169,6 +11898,9 @@ msgstr "프로ì íŠ¸ URL"
msgid "Project access must be granted explicitly to each user."
msgstr "프로ì íŠ¸ 액세스는 ê° ì‚¬ìš©ìžì—게 명시ì ìœ¼ë¡œ 부여ë˜ì–´ì•¼í•©ë‹ˆë‹¤."
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10220,9 +11952,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10265,6 +11994,12 @@ msgstr "ë‚´ forkë¡œ ì´ë™"
msgid "ProjectOverview|Star"
msgstr "별표"
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr "별표 해제"
@@ -10283,13 +12018,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10298,6 +12063,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr "뱃지"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "ì´ ì„¤ì •ì„ ë³€ê²½í•˜ë ¤ë©´ 관리ìžì—게 문ì˜í•˜ì„¸ìš”."
@@ -10469,12 +12240,60 @@ msgstr "죄송합니다, 검색과 ì¼ì¹˜í•˜ëŠ” 프로ì íŠ¸ëŠ” 없습니다."
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
msgid "PrometheusAlerts|Add alert"
msgstr "알림 추가"
-msgid "PrometheusAlerts|Alert set"
-msgstr "알림 설정"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "알림 수정"
@@ -10490,9 +12309,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10526,6 +12342,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10556,6 +12375,9 @@ msgstr "추가 정보"
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Prometheus API 기반 URL, 예를 들면 http://prometheus.example.com/"
@@ -10580,6 +12402,12 @@ msgstr "공통 매트릭스를 찾기 위하여 첫 환경 ë°°í¬ë¥¼ 기다리ëŠ
msgid "Promote"
msgstr "승격"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "프로ì íŠ¸ 마ì¼ìŠ¤í†¤ì„ 그룹 마ì¼ìŠ¤í†¤ìœ¼ë¡œ 승격합니다."
@@ -10598,6 +12426,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr "다시 표시하지 않습니다."
@@ -10628,6 +12459,9 @@ msgstr "ë³´í˜¸ëœ í™˜ê²½"
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10703,6 +12537,9 @@ msgstr "공용 파ì´í”„ ë¼ì¸"
msgid "Pull"
msgstr "Pull"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "Push"
@@ -10796,6 +12633,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "ë” ì½ê¸°"
@@ -10805,9 +12645,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "실시간 기능"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10817,6 +12666,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10884,9 +12736,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "레지스트리"
-
msgid "Related Deployed Jobs"
msgstr "관련 ë°°í¬ ëœ ìž‘ì—…"
@@ -10914,6 +12763,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "ë‚˜ì¤‘ì— ë‹¤ì‹œ 알림"
@@ -10923,9 +12775,15 @@ msgstr ""
msgid "Remove"
msgstr "삭제"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr "Runner 제거"
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -10947,6 +12805,9 @@ msgstr ""
msgid "Remove avatar"
msgstr "아바타 제거"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -10956,12 +12817,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "우선 순위 삭제"
@@ -10971,30 +12841,75 @@ msgstr "프로ì íŠ¸ ì‚­ì œ"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11028,6 +12943,15 @@ msgstr "ì—픽 다시 열기"
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr "ì¸ì¦ 복구"
@@ -11037,12 +12961,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr "저장소 URL"
@@ -11109,6 +13042,9 @@ msgstr "ë³€ê²½ëœ í…ŒìŠ¤íŠ¸ ê²°ê³¼ ì—†ìŒ"
msgid "Repository"
msgstr "저장소"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "저장소 설정"
@@ -11133,9 +13069,15 @@ msgstr "저장소 유지 보수"
msgid "Repository mirror"
msgstr "저장소 미러"
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr "ì €ìž¥ì†Œì˜ ì €ìž¥ê³µê°„"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11148,6 +13090,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr "요청 프로필"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11163,6 +13108,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11177,6 +13125,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11192,11 +13143,17 @@ msgstr ""
msgid "Reset runners registration token"
msgstr "runner ë“±ë¡ í† í° ì´ˆê¸°í™”"
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
-msgstr "새로운 ì´ìŠˆì˜ 모든 í† ë¡ ì„ í•´ê²°í•˜ì‹­ì‹œì˜¤."
+msgid "Resolve all threads in new issue"
+msgstr ""
msgid "Resolve conflicts on source branch"
msgstr ""
@@ -11204,6 +13161,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr "토론 해결"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11252,6 +13212,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr "재개"
@@ -11316,6 +13279,9 @@ msgstr ""
msgid "Roadmap"
msgstr "로드맵"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11376,8 +13342,8 @@ msgstr "Runners 페ì´ì§€"
msgid "Runners page."
msgstr "Runners 페ì´ì§€."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "모든 공유 Runners 파ì´í”„ë¼ì¸ ì‹œê°„ì„ ì‚¬ìš©í–ˆìŠµë‹ˆë‹¤."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "실행중"
@@ -11451,6 +13417,9 @@ msgstr "파ì´í”„ë¼ì¸ 스케줄 저장"
msgid "Save variables"
msgstr "변수 저장"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11460,6 +13429,9 @@ msgstr "새로운 파ì´í”„ë¼ì¸ 스케줄 잡기"
msgid "Scheduled"
msgstr "예정ë¨"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "ì¼ì •"
@@ -11481,15 +13453,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr "맨 아래로 스í¬ë¡¤"
msgid "Scroll to top"
msgstr "맨 위로 스í¬ë¡¤"
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "검색"
@@ -11577,9 +13564,65 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11592,6 +13635,9 @@ msgstr "비밀"
msgid "Security"
msgstr "보안"
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr "보안 대시보드"
@@ -11607,24 +13653,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr "ì´ìŠˆ ìƒì„±"
msgid "Security Reports|Dismiss vulnerability"
msgstr "ì·¨ì•½ì  ë¬´ì‹œ"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr "ë” ë§Žì€ ì •ë³´"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr "ì´ìŠˆë¥¼ ìƒì„± í•˜ë˜ ì¤‘ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11652,6 +13722,9 @@ msgstr "보안 대시보드ì—는 최신 보안 보고서가 표시ë©ë‹ˆë‹¤. ì·
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr "코드 ì·¨ì•½ì  ëª¨ë‹ˆí„°ë§"
@@ -11679,6 +13752,9 @@ msgstr "ì„ íƒ"
msgid "Select Archive Format"
msgstr "ì•„ì¹´ì´ë¸Œ í¬ë§· ì„ íƒ"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11688,12 +13764,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr "초대 í•  그룹 ì„ íƒ"
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr "프로ì íŠ¸ë¥¼ í¬í¬ë¥¼ 위한 ì´ë¦„ ì„ íƒ"
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11706,6 +13788,9 @@ msgstr "저장소 템플릿 ì„ íƒ"
msgid "Select a timezone"
msgstr "시간대 ì„ íƒ"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "기존 Kubernetes í´ëŸ¬ìŠ¤í„°ë¥¼ ì„ íƒí•˜ê±°ë‚˜ 새로 만듭니다."
@@ -11715,7 +13800,16 @@ msgstr "브랜치/태그 ì„ íƒ"
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11727,6 +13821,9 @@ msgstr "머신 타입 ì„¤ì •ì„ ìœ„í•´ 프로ì íŠ¸ì™€ ì¡´ì„ ì„ íƒí•˜ì„¸ìš”."
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr "가져오고 ì‹¶ì€ í”„ë¡œì íŠ¸ë¥¼ ì„ íƒí•˜ì„¸ìš”."
@@ -11742,13 +13839,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11775,6 +13878,12 @@ msgstr ""
msgid "September"
msgstr "9ì›”"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11802,6 +13911,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11832,9 +13944,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11853,6 +13977,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr "세션 만료, 프로ì íŠ¸ 제한 ë° ì²¨ë¶€ íŒŒì¼ í¬ê¸°."
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11886,12 +14013,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr "남용 ë³´ê³ ì„œì— ëŒ€í•œ 알림 ì´ë©”ì¼ì„ 설정합니다."
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "사용ìžì˜ ë¡œê·¸ì¸ ìš”êµ¬ ì‚¬í•­ì„ ì„¤ì •í•©ë‹ˆë‹¤. 반드시 ì´ì¤‘ ì¸ì¦ 하ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤."
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11901,17 +14040,23 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "CI/CD 설정"
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
-msgstr "특정 Runner ìžë™ 설정"
+msgid "Set up a %{type} Runner manually"
+msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr ""
@@ -11928,6 +14073,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "패스워드 설정"
@@ -11955,6 +14103,12 @@ msgstr "죄송합니다, ë‹¹ì‹ ì˜ ìƒíƒœë¥¼ 설정할 수 없습니다. ìž ì‹œí
msgid "SetStatusModal|What's your status?"
msgstr "ìƒíƒœê°€ 어떤가요?"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12012,9 +14166,15 @@ msgstr ""
msgid "Show command"
msgstr "명령 보기"
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr "완료 로그 표시"
@@ -12037,6 +14197,18 @@ msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "%d ê°œì˜ ì´ë²¤íŠ¸ 표시 중"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr "나란히"
@@ -12067,6 +14239,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr "Single Sign-On으로 로그ì¸"
@@ -12079,6 +14254,9 @@ msgstr "로그아웃"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12088,6 +14266,12 @@ msgstr "ë¡œê·¸ì¸ ì œí•œ"
msgid "Sign-up restrictions"
msgstr "가입 제한"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12112,6 +14296,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr "í¬ê¸°"
@@ -12130,6 +14317,21 @@ msgstr "Slack 어플리케ì´ì…˜"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12163,9 +14365,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12196,6 +14404,9 @@ msgstr "ë²„íŠ¼ì„ í† ê¸€í•˜ë˜ ì¤‘ 문제가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12205,6 +14416,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12238,6 +14455,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12289,6 +14509,9 @@ msgstr "마ê°ì¼ì´ 먼"
msgid "SortOptions|Due soon"
msgstr "마ê°ì¼ì´ 가까운"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "ë¼ë²¨ 중요ë„"
@@ -12358,6 +14581,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr "ë¡œê·¸ì¸ ìˆœ"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "ì—…ë°ì´íŠ¸ëœì§€ 오래ëœ"
@@ -12373,6 +14599,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr "최근 로그ì¸"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12451,6 +14683,9 @@ msgstr "%{type} 스테ì´ì§€ë¨"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12472,13 +14707,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12487,6 +14722,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "ì´ ë³€ê²½ 사항으로 %{new_merge_request} ì„ ì‹œìž‘í•˜ì‹­ì‹œì˜¤."
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12496,29 +14737,38 @@ msgstr ""
msgid "Start and due date"
msgstr "시작ì¼ê³¼ 마ê°ì¼"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr "시작 날짜"
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
+msgstr "Runner 시작!"
+
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
-msgstr "Runner 시작!"
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
msgid "Start your trial"
msgstr ""
@@ -12544,12 +14794,18 @@ msgstr "(UTC)ì— ì‹œìž‘"
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "ìƒíƒœ"
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12580,6 +14836,18 @@ msgstr "저장소:"
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "하위 그룹"
@@ -12595,6 +14863,9 @@ msgstr "스팸으로 제출"
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12619,6 +14890,12 @@ msgstr ""
msgid "Subscribed"
msgstr "구ë…ë¨"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12631,9 +14908,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12694,6 +14968,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12787,9 +15064,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12847,6 +15130,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "태그 "
@@ -13000,6 +15289,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13013,6 +15305,9 @@ msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13037,9 +15332,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13064,6 +15356,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13100,9 +15398,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "%{timeout} ì´í›„ 가져오기 ì‹œê°„ì´ ì´ˆê³¼ë˜ì—ˆìŠµë‹ˆë‹¤. 저장소가 ëŠë¦° 경우 복제/푸시 ì¡°í•©ì„ ì‚¬ìš©í•©ì‹œì˜¤."
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13217,7 +15512,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "저장소를 <code>http://</code>, <code>https://</code> ë˜ëŠ” <code>git://</code> 통해 액세스할 수 있어야 합니다."
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13244,8 +15539,8 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "Staging 단계ì—서는 MR 머지과 프로ë•ì…˜ í™˜ê²½ì— ì½”ë“œ ë°°í¬ ì‚¬ì´ì˜ ì‹œê°„ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. ë°ì´í„°ë¥¼ Production í™˜ê²½ì— ì²˜ìŒ ë°°í¬í•˜ë©´ ë°ì´í„°ê°€ ìžë™ìœ¼ë¡œ 추가ë©ë‹ˆë‹¤."
-msgid "The tabs below will be removed in a future version"
-msgstr "아래 íƒ­ì€ í–¥í›„ 버전ì—ì„œ 제거 ë  ì˜ˆì •ìž…ë‹ˆë‹¤."
+msgid "The target element is missing."
+msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "테스트 단계ì—서는 GitLab CIê°€ 관련 머지 리퀘스트(MR)ì„ ìœ„í•´ 모든 파ì´í”„ë¼ì¸ì„ 실행하는 ë° ê±¸ë¦¬ëŠ” ì‹œê°„ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. 첫 번째 파ì´í”„ë¼ì¸ ì‹¤í–‰ì´ ì™„ë£Œë˜ë©´ ë°ì´í„°ê°€ ìžë™ìœ¼ë¡œ 추가ë©ë‹ˆë‹¤."
@@ -13253,7 +15548,7 @@ msgstr "테스트 단계ì—서는 GitLab CIê°€ 관련 머지 리퀘스트(MR)ì„
msgid "The time taken by each data entry gathered by that stage."
msgstr "해당 단계ì—ì„œ 수집 í•œ ê° ë°ì´í„° ìž…ë ¥ì— ì†Œìš” ëœ ì‹œê°„"
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13277,7 +15572,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13313,9 +15608,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "표시할 ì´ìŠˆê°€ 없습니다"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr "ì•„ì§ ë¼ë²¨ì´ 없습니다."
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13337,6 +15638,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13346,18 +15650,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
-msgstr "í•  ì¼ì„ 추가하는 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
-msgstr "í•  ì¼ì„ 삭제하는 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+msgid "There was an error deleting the To Do."
+msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13382,6 +15689,9 @@ msgstr "알림 ì„¤ì •ì„ ì €ìž¥í•˜ë˜ ì¤‘ 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
msgid "There was an error subscribing to this label."
msgstr "ì´ ë¼ë²¨ì„ 구ë…í•˜ë˜ ì¤‘ 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr "ì´ë©”ì¼ í† í°ì„ ìž¬ì„¤ì •í•˜ë˜ ì¤‘ 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
@@ -13439,10 +15749,10 @@ msgstr "ì´ ë³´ë“œì˜ ë²”ìœ„ê°€ 축소ë˜ì—ˆìŠµë‹ˆë‹¤."
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13490,6 +15800,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13499,12 +15815,15 @@ msgstr "ì´ ê·¸ë£¹"
msgid "This group does not provide any group Runners yet."
msgstr "ì´ ê·¸ë£¹ì€ ì•„ì§ ê·¸ë£¹ Runners를 제공하지 않습니다."
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "비밀 ì´ìŠˆìž…니다."
@@ -13526,15 +15845,15 @@ msgstr ""
msgid "This is your current session"
msgstr ""
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "ì´ ì´ìŠˆëŠ” 비밀입니다."
msgid "This issue is locked."
msgstr "ì´ ì´ìŠˆëŠ” lock ë˜ì—ˆìŠµë‹ˆë‹¤."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "ì´ ìž‘ì—…ì€ ì‚¬ìš©ìžì˜ 트리거 í”„ë¡œì„¸ìŠ¤ì— ì˜ì¡´í•©ë‹ˆë‹¤. 종종 ìš´ì˜í™˜ê²½ì— 코드를 ë°°í¬í•˜ëŠ”ë° ì“°ì´ê¸°ë„ 합니다."
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "ì´ ìž‘ì—…ì„ ì‹œìž‘í•˜ë ¤ë©´ ì—… 스트림 ìž‘ì—…ì˜ ì„±ê³µì„ í•„ìš”ë¡œ 합니다."
@@ -13589,9 +15908,15 @@ msgstr "ì´ ìž‘ì—…ì€ %{link}ì— ëŒ€í•œ 가장 ìµœê·¼ì˜ ë°°í¬ìž…니다."
msgid "This job requires a manual action"
msgstr "ì´ ìž‘ì—…ì—는 ìˆ˜ë™ ìž‘ì—…ì´ í•„ìš”í•©ë‹ˆë‹¤."
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "즉, 빈 저장소를 만들거나 기존 저장소를 가져올 때까지 코드를 Push 할 수 없습니다."
@@ -13610,9 +15935,6 @@ msgstr "여러 프로ì íŠ¸ì—ì„œ 정보를 ì½ì„ 수 없으므로 ì´ íŽ˜ì´ì§
msgid "This page will be removed in a future release."
msgstr "ì´ íŽ˜ì´ì§€ëŠ” 앞으로 릴리스ì—ì„œ ì œê±°ë  ì˜ˆì •ìž…ë‹ˆë‹¤."
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13643,6 +15965,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13652,6 +15977,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr "ì´ ì‚¬ìš©ìžëŠ” ì‹ ì›ì´ 없습니다."
@@ -13673,6 +16001,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13691,6 +16022,15 @@ msgstr "머지 리퀘스트(MR) ìƒì„±ê³¼ 머지 / 닫기 사ì´ì˜ 시간"
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13700,6 +16040,9 @@ msgstr "ë‚¨ì€ ì‹œê°„"
msgid "Time spent"
msgstr "소요 시간"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "시간 추ì "
@@ -13709,12 +16052,21 @@ msgstr "첫 번째 머지 리퀘스트(MR)ê¹Œì§€ì˜ ì‹œê°„"
msgid "TimeTrackingEstimated|Est"
msgstr "Est"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "ì˜ˆìƒ ì‹œê°„:"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "소비ë¨"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "%s ì¼ ì „"
@@ -13838,6 +16190,9 @@ msgstr "방금 전"
msgid "Timeago|right now"
msgstr "지금"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "시간 초과"
@@ -13867,6 +16222,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr "GitLab으로"
@@ -13882,6 +16240,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "GitHub 저장소 ì—°ê²°í• ë•Œ, %{personal_access_token_link}ì„ ì‚¬ìš©í•  수 있습니다. ê°œì¸ ì—‘ì„¸ìŠ¤ 토í°ì„ ìƒì„±í• ë•Œ <code>repo</code> scope를 ì„ íƒí•´ì•¼ ì—°ê²°ì— ì‚¬ìš©í•  수 있는 공개, 비공개 저장소가 표시ë˜ì–´ ì—°ê²°í•  수 있게 ë©ë‹ˆë‹¤."
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "GitHub ì €ìž¥ì†Œì— ì—°ê²°í•˜ë ¤ë©´, 먼저 GitHub 저장소 목ë¡ì„ 액세스 í•  수 있ë„ë¡ GitLabì— ì—‘ì„¸ìŠ¤ ê¶Œí•œì„ ë¶€ì—¬í•´ì•¼í•©ë‹ˆë‹¤:"
@@ -13909,12 +16270,6 @@ msgstr "GitLabê³¼ ì‚¬ìš©ìž ê²½í—˜ì„ í–¥ìƒì‹œí‚¤ê¸° 위해 GitLabì€ ì£¼ê¸°ì 
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "GitLabì„ ê°œì„ í•˜ëŠ”ë° ë„ì›€ì´ ë˜ë„ë¡ ì£¼ê¸°ì ìœ¼ë¡œ 사용 정보를 수집합니다. ì´ ì„¤ì •ì€ ì–¸ì œë“ ì§€ %{settings_link_start}설정%{link_end}ì—ì„œ 변경할 수 있습니다. %{info_link_start}ë” ë§Žì€ ì •ë³´%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "GitHub저장소ì—ì„œ 가져오려면, %{personal_access_token_link} (ì„) 를 사용할 수 있습니다. ê°œì¸ ì•¡ì„¸ìŠ¤ 토í°ì„ ìƒì„±í•  ë•Œ, <code>저장소</code> 범위를 ì„ íƒí•´ì•¼ 가져오기가 가능한 공개, 비공개 저장소를 표시할 수 있습니다."
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "GitHub 저장소를 가져오려면, 먼저 GitHub 저장소 목ë¡ì„ 액세스 í•  수 있ë„ë¡ GitLabì— ì—‘ì„¸ìŠ¤ ê¶Œí•œì„ ë¶€ì—¬í•´ì•¼í•©ë‹ˆë‹¤:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "SVN 저장소ì—ì„œ 가져오려면, %{svn_link}(ì„)를 확ì¸í•˜ì„¸ìš”."
@@ -13939,12 +16294,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -13969,24 +16342,27 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
msgid "Today"
msgstr "오늘"
-msgid "Todo"
-msgstr "Todo"
-
-msgid "Todo was successfully marked as done."
+msgid "Toggle Markdown preview"
msgstr ""
-msgid "Todos"
-msgstr "í• ì¼ë“¤"
-
msgid "Toggle Sidebar"
msgstr "사ì´ë“œë°” 전환"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -13996,9 +16372,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr "토글 토론"
-
msgid "Toggle emoji award"
msgstr ""
@@ -14011,17 +16384,26 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "사ì´ë“œë°” 토글"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "토글 ìƒíƒœ: OFF"
msgid "ToggleButton|Toggle Status: ON"
msgstr "토글 ìƒíƒœ: ON"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
-msgstr "토í°"
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
msgid "Tomorrow"
msgstr ""
@@ -14041,6 +16423,9 @@ msgstr "ì´ ê¸°ì—¬ë„"
msgid "Total Time"
msgstr "시간 합계:"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "모든 커밋 / ë¨¸ì§€ì˜ ì´ í…ŒìŠ¤íŠ¸ 시간"
@@ -14059,6 +16444,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr "퀵 ì•¡ì…˜ 시간 추ì "
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14095,9 +16486,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14125,9 +16513,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14152,12 +16537,21 @@ msgstr "GitLabì´ ì œê³µí•˜ëŠ” 모든 ê¸°ëŠ¥ì„ 30ë™ì•ˆ 사용해 보세요."
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "서비스 ë°ìŠ¤í¬ 켜기"
@@ -14191,6 +16585,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14203,6 +16609,9 @@ msgstr "ì°¨ì´ì ì„ ì½ì–´ë“¤ì¼ 수 없습니다. %{button_try_again}"
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14233,6 +16642,12 @@ msgstr "실행 취소"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "ì•Œ 수 ì—†ìŒ"
@@ -14260,12 +16675,24 @@ msgstr "%{issuableDisplayName}(ì„)를 잠금해제 하시겠습니까? <strong>
msgid "Unlocked"
msgstr "잠금 í•´ì œë¨"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "í•´ê²°ë˜ì§€ ì•Šì€ í† ë¡ "
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14302,6 +16729,15 @@ msgstr "프로ì íŠ¸ 수준ì—ì„œ êµ¬ë… í•´ì œ"
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "ê²€ì¦ë˜ì§€ ì•ŠìŒ"
@@ -14311,15 +16747,27 @@ msgstr "최신 ìƒíƒœìž…니다"
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "ì—…ë°ì´íŠ¸"
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr "지금 ì—…ë°ì´íŠ¸"
@@ -14350,6 +16798,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "ì—…ë°ì´íŠ¸ì¤‘..."
@@ -14362,6 +16813,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "고급 글로벌 ê²€ìƒ‰ì„ í™œì„±í™”í•˜ê¸° 위해 í”Œëžœì„ ì—…ê·¸ë ˆì´ë“œí•˜ì„¸ìš”."
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "ì°¸ì—¬ë„ ë¶„ì„ì„ í™œì„±í™”í•˜ê¸° 위해 í”Œëžœì„ ì—…ê·¸ë ˆì´ë“œí•˜ì„¸ìš”."
@@ -14425,6 +16879,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr "ping ì‚¬ìš©ì´ í™œì„±í™” ë˜ì§€ 않았습니다."
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "사용 통계"
@@ -14593,6 +17050,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14605,6 +17065,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14668,7 +17131,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14680,7 +17143,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14695,10 +17158,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14746,6 +17209,12 @@ msgstr "스니펫"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr "구ë…"
@@ -14758,6 +17227,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "ëª¨ë‘ ë³´ê¸°"
@@ -14785,6 +17257,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "사용ìžë“¤"
@@ -14863,6 +17338,9 @@ msgstr "ê²€ì¦ë¨"
msgid "Version"
msgstr "버전"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr "앱 보기"
@@ -14941,6 +17419,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -14962,16 +17443,28 @@ msgstr "ì•Œ 수 ì—†ìŒ"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -14980,16 +17473,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -14999,7 +17495,7 @@ msgid "Vulnerability|Confidence"
msgstr ""
msgid "Vulnerability|Description"
-msgstr ""
+msgstr "설명"
msgid "Vulnerability|File"
msgstr ""
@@ -15031,6 +17527,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "ì´ ë°ì´í„°ë¥¼ ë³´ê³  싶ì€ê°€ìš”? 관리ìžì—게 액세스 ê¶Œí•œì„ ìš”ì²­í•˜ì„¸ìš”."
@@ -15046,10 +17545,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15103,6 +17599,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Runnerê°€ 잠겨 있으면 다른 프로ì íŠ¸ì— 할당 í•  수 없습니다"
@@ -15116,12 +17615,18 @@ msgid "When this merge request is accepted"
msgid_plural "When these merge requests are accepted"
msgstr[0] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "누가 ì´ ê·¸ë£¹ì„ ë³¼ 수 있나요?"
@@ -15131,6 +17636,9 @@ msgstr "누가 ì´ ê·¸ë£¹ì„ ë³¼ 수 있게 ë˜ë‚˜ìš”?"
msgid "Wiki"
msgstr "위키"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15203,15 +17711,9 @@ msgstr "문서"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "(새로운) 페ì´ì§€ì— ì—°ê²° 하려면, %{link_example}를 입력하세요"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "설정 방법"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "íŒ: 새로운 파ì¼ì— 대한 full path를 지정할 수 있습니다. 존재하지 않는 ë””ë ‰í† ë¦¬ë“¤ì€ ìžë™ì ìœ¼ë¡œ ìƒì„±ë©ë‹ˆë‹¤."
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "새 위키 페ì´ì§€"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "ì´ íŽ˜ì´ì§€ë¥¼ 삭제하시겠습니까?"
@@ -15227,20 +17729,17 @@ msgstr "ë™ì‹œì— 누군가가 ì´ íŽ˜ì´ì§€ë¥¼ 수정했습니다. %{page_link}
msgid "WikiPageConflictMessage|the page"
msgstr "페ì´ì§€"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "%{page_title} 작성"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "%{page_title} ì—…ë°ì´íŠ¸"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
-msgstr "페ì´ì§€ slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
-msgstr "페ì´ì§€ 만들기"
+msgid "Wiki|Create New Page"
+msgstr ""
msgid "Wiki|Create page"
msgstr "페ì´ì§€ 만들기"
@@ -15260,6 +17759,9 @@ msgstr "새 페ì´ì§€"
msgid "Wiki|Page history"
msgstr "페ì´ì§€ ì´ë ¥"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "페ì´ì§€ 버전"
@@ -15290,6 +17792,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15326,6 +17831,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15380,6 +17888,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Kubernetes í´ëŸ¬ìŠ¤í„°ì— Runner를 쉽게 설치할 수 있습니다. %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15404,7 +17915,10 @@ msgstr "ë¸Œëžœì¹˜ì— ìžˆì„ ë•Œì—만 파ì¼ì„ 추가 í•  수 있습니다."
msgid "You can only edit files when you are on a branch"
msgstr "ë¸Œëžœì¹˜ì— ìžˆì„ ë•Œë§Œ 파ì¼ì„ 편집할 수 있습니다."
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15425,6 +17939,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15446,9 +17963,6 @@ msgstr "ì½ê¸° ì „ìš© GitLab ì¸ìŠ¤í„´ìŠ¤ì—는 쓰기가 불가능합니다."
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15476,6 +17990,18 @@ msgstr "ìŠ¹ì¸ ëœ ì• í”Œë¦¬ì¼€ì´ì…˜ì´ 없습니다."
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15500,6 +18026,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "프로ì íŠ¸ ìˆ«ìž í•œë„ì— ë„달했습니다."
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15590,6 +18122,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "올바른 ë³€ê²½ì‚¬í•­ì„ ê°€ì ¸ì˜¤ë ¤ë©´ 다른 ì´ë¦„ì˜ ë¸Œëžœì¹˜ë¥¼ 사용해야합니다."
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15629,6 +18164,9 @@ msgstr ""
msgid "Your Groups"
msgstr "ë‚˜ì˜ ê·¸ë£¹ë“¤"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15644,8 +18182,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "ë‹¹ì‹ ì˜ í• ì¼"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15716,6 +18254,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15728,12 +18269,21 @@ msgstr "ë‚´ 프로ì íŠ¸"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "ì‚­ì œëœ ì‚¬ìš©ìž"
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "ì „"
@@ -15749,6 +18299,9 @@ msgstr ""
msgid "among other things"
msgstr "다른 것들 중"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15767,6 +18320,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15776,6 +18335,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15875,6 +18437,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15893,10 +18458,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15914,10 +18479,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr "설명"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -15938,30 +18503,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -15988,6 +18536,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16046,6 +18597,9 @@ msgstr[0] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16088,6 +18642,9 @@ msgstr "연결중"
msgid "could not read private key, is the passphrase correct?"
msgstr "ê°œì¸ í‚¤ë¥¼ ì½ì„ 수 없습니다. 암호가 맞습니까?"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16101,8 +18658,11 @@ msgstr[0] "ì¼"
msgid "deleted"
msgstr ""
-msgid "deploy token"
-msgstr "ë°°í¬ í† í°"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
msgid "detached"
msgstr ""
@@ -16110,10 +18670,6 @@ msgstr ""
msgid "disabled"
msgstr "사용 안 함"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-
msgid "done"
msgstr "완료"
@@ -16121,16 +18677,28 @@ msgid "draft"
msgid_plural "drafts"
msgstr[0] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "사용"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16175,6 +18743,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "여기"
@@ -16218,21 +18789,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "올바른 X509 ì¸ì¦ì„œê°€ 아닙니다."
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr "ì´ìŠˆ ë³´ë“œ"
-
msgid "it is stored externally"
msgstr ""
@@ -16257,15 +18828,24 @@ msgstr "최신 버전"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
-msgstr "ë¼ì´ì„ ìŠ¤ 관리"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "머지 리퀘스트(MR)"
@@ -16285,6 +18865,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "브랜치를 ë³µì›í•˜ê±°ë‚˜ 다른 %{missingBranchName} 브랜치를 사용해주세요."
@@ -16408,6 +18997,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr "머지:"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16441,6 +19033,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "머지 리퀘스트(MR)"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "ì¶©ëŒ í•´ê²°"
@@ -16492,8 +19087,8 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr "머지 충ëŒì´ 있습니다."
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "í•´ê²°ë˜ì§€ ì•Šì€ í† ë¡ ì´ ìžˆìŠµë‹ˆë‹¤. ì´ í† ë¡ ì„ í•´ê²°í•˜ì‹­ì‹œì˜¤"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr ""
@@ -16504,9 +19099,21 @@ msgstr "ì´ ë¨¸ì§€ 리퀘스트(MR)를 ìžë™ìœ¼ë¡œ ë¨¸ì§€í•˜ëŠ”ë° ì‹¤íŒ¨í•˜ì˜€
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "ì´ ë¨¸ì§€ 리퀘스트(MR)를 머지중입니다."
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "ì´ í”„ë¡œì íŠ¸ëŠ” ë³´ê´€ë˜ì—ˆê³ , 쓰기 ì ‘ê·¼ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤."
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16516,6 +19123,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "ì´ ë¨¸ì§€ 리퀘스트(MR)를 수ë™ìœ¼ë¡œ 머지할 수 있습니다."
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "브랜치가 존재하지 않습니다."
@@ -16549,9 +19159,15 @@ msgstr "새 머지 리퀘스트(MR)"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "알림 ì´ë©”ì¼"
@@ -16564,8 +19180,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "ë˜ëŠ”"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16578,8 +19194,11 @@ msgstr[0] "부모"
msgid "password"
msgstr "패스워드"
-msgid "personal access token"
-msgstr "ê°œì¸ ì—‘ì„¸ìŠ¤ 토í°"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16598,12 +19217,18 @@ msgid "project"
msgid_plural "projects"
msgstr[0] "프로ì íŠ¸"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "남ì€"
@@ -16616,6 +19241,9 @@ msgstr "마ê°ê¸°í•œ ì‚­ì œ"
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16701,15 +19329,37 @@ msgstr ""
msgid "this document"
msgstr "ì´ ë¬¸ì„œ"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "사용ìžëª…"
@@ -16719,6 +19369,9 @@ msgstr "kubernetes í´ëŸ¬ìŠ¤í„°ë¥¼ 사용하여 코드를 ë°°í¬í•©ë‹ˆë‹¤!"
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16734,12 +19387,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/mn_MN/gitlab.po b/locale/mn_MN/gitlab.po
index ddb493387b9..a29ea775eab 100644
--- a/locale/mn_MN/gitlab.po
+++ b/locale/mn_MN/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: mn\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:36\n"
+"PO-Revision-Date: 2019-09-24 10:09\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/nb_NO/gitlab.po b/locale/nb_NO/gitlab.po
index 67198f50aed..d7ea32e6542 100644
--- a/locale/nb_NO/gitlab.po
+++ b/locale/nb_NO/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:36\n"
+"PO-Revision-Date: 2019-09-24 10:09\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/nl_NL/gitlab.po b/locale/nl_NL/gitlab.po
index 705a1a74fcc..03a0b331986 100644
--- a/locale/nl_NL/gitlab.po
+++ b/locale/nl_NL/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: nl\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:45\n"
+"PO-Revision-Date: 2019-09-24 10:22\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr " en"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " gedegradeerd op %d punt"
@@ -40,12 +49,18 @@ msgstr[1] " verbeterd op %d punten"
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] "%d commit achterlopend"
msgstr[1] "%d commits achterlopend"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d opgelost testresultaat"
msgstr[1] "%d opgeloste testresultaten"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d probleem"
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] "%d metriek"
msgstr[1] "%d statistieken"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d bepaalde wijziging"
@@ -137,13 +172,13 @@ msgstr[1] "%s andere commits zijn weggelaten om prestatieproblemen te voorkomen.
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName}'s discussie"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} schreef %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] "%{count} openstaande reactie"
msgstr[1] "%{count} openstaande reacties"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} verwijderd"
@@ -197,6 +247,9 @@ msgstr "%{group_docs_link_start}Groepen%{group_docs_link_end} stellen u in staat
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} wordt verwijderd! Weet je het zeker?"
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr "%{loadingIcon} Gestart"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} is vergrendeld door GitLab Gebruiker %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text}%{files}"
@@ -307,9 +366,21 @@ msgstr "%{unstaged} unstaged en %{staged} staged wijzigingen"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}Lees meer%{usage_ping_link_end} over welke informatie gedeeld wordt met GitLab Inc."
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ %{count} meer"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} meer"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr "2FA ingeschakeld"
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr "Over GitLab"
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "Account"
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr "Actief"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr "Activiteit"
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr "Nieuwe map toevoegen"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr "Alles"
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Uiterlijk"
@@ -1391,6 +1671,9 @@ msgstr "Applicaties"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr "Bekijk bestand"
msgid "Browse Files"
msgstr "Door bestanden bladeren"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Door bestanden bladeren"
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Annuleren"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr "Grafieken"
msgid "Chat"
msgstr "Chat"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "geannuleerd"
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "Opmerkingen"
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "Maak map aan"
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Code"
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/pa_IN/gitlab.po b/locale/pa_IN/gitlab.po
index 5d8b144bbb7..6fb77c5e652 100644
--- a/locale/pa_IN/gitlab.po
+++ b/locale/pa_IN/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: pa-IN\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:34\n"
+"PO-Revision-Date: 2019-09-24 10:11\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/pl_PL/gitlab.po b/locale/pl_PL/gitlab.po
index 8345eb5ee58..bda1ec45c8b 100644
--- a/locale/pl_PL/gitlab.po
+++ b/locale/pl_PL/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: pl\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:37\n"
+"PO-Revision-Date: 2019-09-24 10:10\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -44,12 +53,18 @@ msgstr[3] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -71,6 +86,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d commits"
msgstr ""
@@ -102,6 +124,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -144,6 +173,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
@@ -151,6 +187,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -175,13 +218,13 @@ msgstr[3] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -194,6 +237,9 @@ msgstr[3] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -220,12 +266,24 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -241,6 +299,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -256,10 +317,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -268,6 +329,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -337,6 +401,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -359,9 +426,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -371,6 +450,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -384,18 +466,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -519,9 +613,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -570,6 +661,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} niezarejestrowane</strong> i <strong>%{stagedFilesLength} zarejestrowane</strong> zmiany"
@@ -606,6 +700,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -642,6 +739,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -651,6 +751,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -705,6 +808,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -723,6 +886,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -732,12 +898,22 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -750,12 +926,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -774,9 +965,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -786,6 +974,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -807,6 +998,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -825,12 +1019,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -843,7 +1046,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -858,9 +1061,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -876,7 +1097,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -912,6 +1142,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -960,6 +1193,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1057,6 +1314,12 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1066,9 +1329,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1087,9 +1356,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1123,6 +1389,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1135,6 +1407,9 @@ msgstr "Zezwalaj użytkownikom na żądanie dostępu"
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1147,13 +1422,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1168,8 +1437,8 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Wystąpił błąd podczas dodawania wersji roboczej do dyskusji."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "Wystąpił błąd podczas dodawania nowej wersji roboczej."
@@ -1228,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1270,6 +1542,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1315,10 +1590,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1339,6 +1614,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1387,6 +1668,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1405,6 +1689,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1429,6 +1716,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1471,6 +1761,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1520,7 +1813,7 @@ msgstr[3] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1529,12 +1822,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1571,6 +1879,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1613,6 +1930,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1640,6 +1960,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1676,6 +2002,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1694,6 +2023,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1704,7 +2036,11 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1715,6 +2051,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1737,12 +2076,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1800,6 +2148,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1821,6 +2172,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Proces Automatyczny DevOps został włączony i będzie używany, jeśli nie zostanie znaleziony alternatywny plik konfiguracyjny CI. %{more_information_link}"
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -2001,31 +2364,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -2040,13 +2403,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2064,6 +2424,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2076,35 +2439,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2267,6 +2646,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2378,7 +2760,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "Proces Automatyczny DevOps zostanie uruchomiony, jeśli nie zostanie znaleziony alternatywny plik konfiguracji CI."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2387,6 +2772,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2414,9 +2805,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2426,6 +2823,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2453,12 +2853,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2495,6 +2904,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2516,6 +2931,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2558,6 +3024,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2594,9 +3063,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2687,6 +3153,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2696,6 +3165,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2741,15 +3213,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2771,6 +3252,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2807,6 +3291,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2816,12 +3303,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2870,6 +3372,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2879,6 +3384,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Wystąpił błąd podczas próby skontaktowania się z Google Cloud API. Spróbuj ponownie później."
@@ -2918,12 +3426,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "Wybierz aplikacje do zainstalowania w Twoim klastrze Kubernetes. Do zainstalowania dowolnej z poniższych aplikacji wymagany jest Helm Tiller."
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Wybierz, które z Twoich środowisk będą używać tego klastra."
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2954,12 +3468,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Włącz lub wyłącz połączenie GitLab z klastrem Kubernetes."
@@ -3008,6 +3531,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Projekt Platformy Google Cloud"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3095,7 +3621,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3110,6 +3636,9 @@ msgstr "Dowiedz się więcej o %{help_link_start_machine_type}rodzajach maszyn%{
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3122,6 +3651,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3131,6 +3666,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3140,6 +3678,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3164,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3176,6 +3720,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3194,15 +3741,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3221,6 +3777,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3260,18 +3819,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3293,6 +3858,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3329,16 +3897,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3368,15 +3942,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3386,10 +3969,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3398,6 +3981,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3411,6 +3997,9 @@ msgstr[3] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3507,12 +4096,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3522,6 +4117,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3531,6 +4129,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3597,31 +4198,41 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3633,13 +4244,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3702,15 +4328,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3747,6 +4382,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3762,6 +4400,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3777,13 +4421,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3792,12 +4439,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3810,7 +4466,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3831,12 +4487,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3867,6 +4535,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3885,6 +4556,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3909,6 +4583,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3930,18 +4610,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3978,6 +4670,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3987,18 +4718,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -4020,6 +4784,35 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -4044,7 +4837,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4065,6 +4858,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4086,12 +4882,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4134,12 +4939,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4176,6 +4990,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4194,6 +5011,26 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4206,12 +5043,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4221,6 +5067,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4239,6 +5088,20 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4252,6 +5115,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4324,6 +5196,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4375,6 +5250,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4399,9 +5277,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4417,6 +5316,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4426,9 +5331,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4450,9 +5352,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4465,6 +5373,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4522,6 +5433,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4552,6 +5469,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4561,6 +5481,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4582,9 +5505,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4594,6 +5523,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4630,9 +5562,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4654,12 +5592,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4678,6 +5625,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4702,6 +5661,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4786,12 +5748,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4804,6 +5769,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4822,12 +5790,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4861,18 +5835,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4885,9 +5877,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5056,9 +6057,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5095,12 +6102,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5119,9 +6141,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5137,6 +6156,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5194,9 +6219,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5215,13 +6246,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5314,9 +6348,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5338,6 +6378,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5350,9 +6393,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5362,6 +6414,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5416,6 +6474,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5455,6 +6519,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5476,6 +6549,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5497,6 +6573,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5506,6 +6594,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5539,6 +6630,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5566,6 +6660,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5596,6 +6693,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5617,6 +6723,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5626,19 +6735,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5653,10 +6762,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5668,19 +6777,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5689,6 +6822,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5707,9 +6843,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5774,6 +6907,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5816,6 +6952,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5879,6 +7018,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5915,12 +7057,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5981,6 +7129,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5993,6 +7144,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6056,6 +7210,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6164,10 +7321,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6176,10 +7333,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6188,9 +7348,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6215,10 +7381,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6269,12 +7438,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6293,6 +7456,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6317,7 +7486,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6374,6 +7543,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6431,6 +7603,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6449,9 +7630,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6467,9 +7645,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6482,6 +7669,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6491,15 +7684,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6509,7 +7786,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6518,12 +7795,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6587,15 +7870,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6632,6 +7915,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6707,6 +7993,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6740,6 +8029,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6863,6 +8155,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6884,6 +8182,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6894,6 +8195,9 @@ msgstr[3] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6912,6 +8216,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6921,6 +8228,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6930,6 +8240,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6942,9 +8255,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6981,6 +8300,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -7044,6 +8366,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7149,7 +8477,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7203,13 +8531,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7254,6 +8585,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7273,6 +8607,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7315,6 +8652,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7363,16 +8703,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7417,9 +8763,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7435,7 +8799,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7453,6 +8820,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7630,6 +9003,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7654,10 +9030,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7745,6 +9124,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7766,15 +9148,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7793,7 +9184,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7811,9 +9202,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7832,6 +9220,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7841,6 +9232,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7871,76 +9265,102 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
+
+msgid "LicenseCompliance|License details"
+msgstr ""
+
+msgid "LicenseCompliance|License name"
+msgstr ""
+
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7952,6 +9372,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7962,12 +9385,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7980,13 +9409,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7998,6 +9427,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -8037,13 +9469,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8055,6 +9493,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8070,19 +9511,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8127,6 +9574,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8145,6 +9595,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8154,7 +9610,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8166,15 +9622,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8232,9 +9739,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8262,6 +9778,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8274,6 +9793,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8307,34 +9829,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8349,19 +9871,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8385,24 +9907,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8571,9 +10111,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8613,6 +10150,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8625,7 +10165,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8637,6 +10177,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8667,6 +10213,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8676,6 +10228,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8773,6 +10331,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8860,13 +10421,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8878,13 +10451,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8899,9 +10478,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8911,6 +10487,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8935,12 +10520,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8995,9 +10586,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -9007,6 +10604,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9019,6 +10619,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -9037,6 +10640,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -9046,6 +10652,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9061,6 +10670,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9157,6 +10769,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9175,9 +10790,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9193,6 +10820,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9224,6 +10854,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9248,6 +10884,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9257,6 +10899,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9266,6 +10911,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9347,6 +10998,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9371,6 +11028,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9407,13 +11076,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9485,9 +11154,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9515,12 +11202,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9587,7 +11283,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9611,12 +11307,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9665,15 +11370,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9704,6 +11424,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9716,18 +11439,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9758,6 +11475,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9776,6 +11496,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9863,6 +11586,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9872,7 +11598,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9899,6 +11625,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9956,6 +11685,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9992,6 +11727,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10106,6 +11856,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10148,6 +11901,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10178,6 +11934,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10283,6 +12042,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10328,6 +12093,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10337,6 +12105,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10388,9 +12159,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10433,6 +12201,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10451,13 +12225,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10466,6 +12270,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10637,10 +12447,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10658,9 +12516,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10694,6 +12549,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10724,6 +12582,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10748,6 +12609,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10766,6 +12633,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10796,6 +12666,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10871,6 +12744,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10964,6 +12840,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10973,9 +12852,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10985,6 +12873,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -11055,9 +12946,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11085,6 +12973,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11094,9 +12985,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11118,6 +13015,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11127,12 +13027,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11142,30 +13051,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11199,6 +13153,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11208,12 +13171,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11280,6 +13252,9 @@ msgstr "brak zmienionych wyników testów"
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11304,9 +13279,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "Wybierz"
@@ -11319,6 +13300,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr "Profile Żądań"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "Wymagaj od wszystkich użytkowników w tej grupie do ustawienia uwierzytelniania Dwuczynnikowego"
@@ -11334,6 +13318,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11354,6 +13341,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11369,11 +13359,17 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
-msgstr "Rozwiąż wszystkie dyskusje w nowym zgłoszeniu"
+msgid "Resolve all threads in new issue"
+msgstr ""
msgid "Resolve conflicts on source branch"
msgstr "Rozwiąż konflikty w gałęzi źródłowej"
@@ -11381,6 +13377,9 @@ msgstr "Rozwiąż konflikty w gałęzi źródłowej"
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11429,6 +13428,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11496,6 +13498,9 @@ msgstr ""
msgid "Roadmap"
msgstr "Harmonogram"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "Uruchom procesy CI/CD dla zewnętrznych repozytoriów"
@@ -11556,7 +13561,7 @@ msgstr "Strona Robotników"
msgid "Runners page."
msgstr "Strona Robotników."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11631,6 +13636,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11640,6 +13648,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11661,15 +13672,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11757,9 +13783,98 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11772,6 +13887,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11787,24 +13905,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11832,6 +13974,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11859,6 +14004,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11868,12 +14016,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11886,6 +14040,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11895,7 +14052,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11907,6 +14073,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11922,13 +14091,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11955,6 +14130,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11982,6 +14163,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -12012,9 +14196,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -12033,6 +14229,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12066,12 +14265,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12081,16 +14292,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12108,6 +14325,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12135,6 +14355,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12192,9 +14418,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12220,6 +14452,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12250,6 +14494,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12262,6 +14509,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12271,6 +14521,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12295,6 +14551,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12313,6 +14572,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "Wolniej, ale zapewnia, że ​​przestrzeń robocza projektu jest nieskazitelna, ponieważ klonuje repozytorium dla każdego zadania kompletnie od zera"
@@ -12346,9 +14620,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12379,6 +14659,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12388,6 +14671,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12421,6 +14710,9 @@ msgstr "Coś poszło nie tak podczas ponownego otwierania %{issuable}. Spróbuj
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "Coś poszło nie tak podczas rozwiązywania tej dyskusji. Spróbuj ponownie."
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "Coś poszło nie tak, nie można dodać %{project} do pulpitu nawigacyjnego"
@@ -12472,6 +14764,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12541,6 +14836,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12556,6 +14854,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12634,6 +14938,9 @@ msgstr "Zaplanowane %{type}"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "Oznacz etykietę gwiazdką, by nadać jej status priorytetowy. Zorganizuj etykiety priorytetowe celem zmiany ich względnej ważności, poprzez przeciągnięcie."
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12655,13 +14962,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12670,6 +14977,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12679,28 +14992,37 @@ msgstr "Rozpocznij recenzjÄ™"
msgid "Start and due date"
msgstr "Data początkowa i końcowa"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12727,12 +15049,18 @@ msgstr "Rozpoczyna siÄ™ o (UTC)"
msgid "State your message to activate"
msgstr "Określ swoją wiadomość, aby aktywować"
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12763,6 +15091,18 @@ msgstr "Przechowywanie:"
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12778,6 +15118,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12802,6 +15145,12 @@ msgstr ""
msgid "Subscribed"
msgstr "Subskrybowany"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12814,9 +15163,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12877,6 +15223,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12970,9 +15319,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -13030,6 +15385,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13183,6 +15544,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13199,6 +15563,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13223,9 +15590,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "Zakreślacz znaków pomaga ci utrzymać linię tematyczną do %{titleLength} znaków i zawinąć body do %{bodyLength}, aby można je było odczytać w git."
@@ -13250,6 +15614,12 @@ msgstr "Wdrożenie tego zadania do %{environmentLink} nie powiodło się."
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13286,9 +15656,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13403,8 +15770,8 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "Repozytorium musi być dostępne za pośrednictwem <code>http://</code>, <code>https://</code>, <code>ssh://</code> i <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr ""
@@ -13430,8 +15797,8 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
-msgstr "Poniższe zakładki zostaną usunięte w przyszłej wersji"
+msgid "The target element is missing."
+msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr ""
@@ -13439,7 +15806,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13463,7 +15830,7 @@ msgstr "Mapa użytkownika to dokument JSON mapujący użytkowników Google Code,
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "Mapa użytkownika to mapowanie użytkowników FogBugz, którzy uczestniczyli w Twoich projektach, w celu zaimportowania ich adresów e-mail i nazw użytkowników do GitLab. Możesz to zmienić, wypełniając poniższą tabelę."
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13499,9 +15866,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13523,6 +15896,9 @@ msgstr "Brak niezaplanowanych zmian"
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13532,18 +15908,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
-msgstr "Wystąpił błąd podczas ładowania zadań do wykonania."
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13568,6 +15947,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13625,10 +16007,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13676,6 +16058,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13685,12 +16073,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13712,13 +16103,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13775,9 +16166,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13796,9 +16193,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13829,6 +16223,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13838,6 +16235,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13859,6 +16259,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13877,6 +16280,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13886,6 +16298,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13895,12 +16310,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -14024,6 +16448,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -14059,6 +16486,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14074,6 +16504,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14101,12 +16534,6 @@ msgstr "Aby usprawnić GitLab i doświadczenie jego użytkowników, GitLab będz
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14131,12 +16558,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14161,16 +16606,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14179,6 +16624,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14188,9 +16636,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14203,16 +16648,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14233,6 +16687,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14251,6 +16708,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14287,9 +16750,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14317,9 +16777,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14344,12 +16801,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14383,6 +16849,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14395,6 +16873,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14425,6 +16906,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14452,12 +16939,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14494,6 +16993,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14503,15 +17011,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14542,6 +17062,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14554,6 +17077,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14617,6 +17143,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14785,6 +17314,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14797,6 +17329,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14860,7 +17395,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14872,7 +17407,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14887,10 +17422,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14938,6 +17473,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14950,6 +17491,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14977,6 +17521,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -15055,6 +17602,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15133,6 +17683,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15154,16 +17707,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15172,16 +17737,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15223,6 +17791,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15238,10 +17809,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15295,6 +17863,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15311,12 +17882,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15326,6 +17903,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15398,15 +17978,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15422,19 +17996,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15455,6 +18026,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15485,6 +18059,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15521,6 +18098,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15575,6 +18155,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15599,7 +18182,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15620,6 +18206,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15641,9 +18230,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15671,6 +18257,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15695,6 +18293,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15785,6 +18389,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15824,6 +18431,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15839,7 +18449,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15911,6 +18521,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15923,12 +18536,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15944,6 +18566,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15962,6 +18587,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15971,6 +18602,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16088,6 +18722,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16106,10 +18743,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16127,10 +18764,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16151,36 +18788,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16207,6 +18821,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16268,6 +18885,9 @@ msgstr[3] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16310,6 +18930,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16326,7 +18949,10 @@ msgstr[3] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16335,13 +18961,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "done"
msgstr ""
@@ -16352,16 +18971,28 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16406,6 +19037,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16452,21 +19086,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16491,15 +19125,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16522,6 +19165,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16645,6 +19297,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16678,6 +19333,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16729,7 +19387,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16741,9 +19399,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16753,6 +19423,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16786,9 +19459,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16801,7 +19480,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16821,7 +19500,10 @@ msgstr[3] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16847,12 +19529,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16865,6 +19553,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16953,15 +19644,40 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16971,6 +19687,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16986,12 +19705,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/pt_BR/gitlab.po b/locale/pt_BR/gitlab.po
index 3be12b6797a..93912e40b6d 100644
--- a/locale/pt_BR/gitlab.po
+++ b/locale/pt_BR/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: pt-BR\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:37\n"
+"PO-Revision-Date: 2019-09-24 10:11\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (de %{timeoutSource})"
msgid " Please sign in."
msgstr " Por favor, entre usando sua conta."
@@ -27,6 +30,12 @@ msgstr " Você precisa fazer isso antes de %{grace_period_deadline}."
msgid " and"
msgstr " e"
+msgid " and "
+msgstr " e "
+
+msgid " and %{sliced}"
+msgstr " e %{sliced}"
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " piorado em %d ponto"
@@ -40,12 +49,18 @@ msgstr[1] " melhorado em %d pontos"
msgid " or "
msgstr " ou "
+msgid " or <!merge request id>"
+msgstr " ou <!merge request id>"
+
msgid " or <#epic id>"
msgstr " ou <#epic id>"
msgid " or <#issue id>"
msgstr " ou <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr " ou referências (ex. caminho/para/projeto!merge_request_id)"
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d comentário"
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] "%d commit atrás"
msgstr[1] "%d commits atrás"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d commit,"
+msgstr[1] "%d commits,"
+
msgid "%d commits"
msgstr "%d commits"
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d resultado do teste corrigido"
msgstr[1] "%d resultados do teste corrigidos"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] "%d merge request inacessível"
+msgstr[1] "%d merge requests inacessíveis"
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d issue"
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] "%d métrica"
msgstr[1] "%d métricas"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] "%d minuto"
+msgstr[1] "%d minutos"
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "mais %d comentário"
msgstr[1] "mais %d comentários"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] "%d segundo"
+msgstr[1] "%d segundos"
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d mudança na lista de commit"
@@ -137,13 +172,13 @@ msgstr[1] "%s commits adicionais foram omitidos para prevenir problemas de perfo
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "Discussão de %{authorsName}"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} fez commit %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] "%{count} aprovações necessárias de %{name}"
msgid "%{count} approvals from %{name}"
msgstr "%{count} aprovações de %{name}"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "mais %{count}"
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] "%{count} comentário pendente"
msgstr[1] "%{count} comentários pendentes"
+msgid "%{duration}ms"
+msgstr "%{duration}ms"
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} Tente fazer cherry-pick desse commit novamente."
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr "%{edit_in_new_fork_notice} Tente criar um novo diretório novamente."
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} Tente reverter este commit novamente."
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr "%{edit_in_new_fork_notice} Tente carregar um arquivo novamente."
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} excluído"
@@ -197,6 +247,9 @@ msgstr "%{group_docs_link_start}Grupos%{group_docs_link_end} permitem que você
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr "%{group_name} usa contas gerenciadas por grupo. Você precisa criar uma nova conta do GitLab que será gerenciada por %{group_name}."
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr "%{icon}Você está prestes a adicionar %{usersTag} pessoas à discussão. Prossiga com cuidado."
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} será removido! Você tem certeza?"
@@ -212,18 +265,21 @@ msgstr "%{level_name} não é permitido em um grupo %{group_level_name}."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr "%{level_name} não é permitido, pois o projeto de origem do fork possui menor visibilidade."
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "A visibilidade de %{level_name} foi restringida pelo administrador."
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}Saiba mais%{link_end} sobre permissões"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Iniciado"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} está bloqueado pelo usuário do GitLab %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText}, essa issue foi fechada automaticamente."
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} Tag"
msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Tags"
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files}"
@@ -307,9 +366,21 @@ msgstr "%{unstaged} mudanças fora e %{staged} mudanças dentro da lista de comm
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}Saiba mais%{usage_ping_link_end} sobre quais informações são compartilhadas com o GitLab Inc."
+msgid "%{userName} (cannot merge)"
+msgstr "%{userName} (não pode fazer o merge)"
+
+msgid "%{userName}'s avatar"
+msgstr "Avatar de %{userName}"
+
msgid "%{user_name} profile page"
msgstr "Página de perfil de %{user_name}"
+msgid "%{username}'s avatar"
+msgstr "Avatar de %{username}"
+
+msgid "%{value} ms"
+msgstr "%{value} ms"
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr "%{verb} %{time_spent_value} spent time."
@@ -319,29 +390,44 @@ msgstr "'%{level}' não é um nível de visibilidade válido"
msgid "'%{source}' is not a import source"
msgstr "'%{source}' não é uma fonte de importação"
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
msgstr[1] ""
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} merges realizados)"
msgid "(No changes)"
msgstr "(Nenhuma mudança)"
+msgid "(Show all)"
+msgstr "(Mostrar tudo)"
+
msgid "(check progress)"
msgstr "(verificar progresso)"
msgid "(external source)"
msgstr "(fonte externa)"
+msgid "(removed)"
+msgstr "(removido)"
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ %{count} mais"
msgid "+ %{moreCount} more"
msgstr "%{moreCount} mais"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr "+%{extraOptionCount} mais"
@@ -377,13 +463,13 @@ msgstr[1] "%d dias"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 issue fechada"
+msgstr[1] "%{issues} issues fechadas"
msgid "1 closed merge request"
msgid_plural "%{merge_requests} closed merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 merge request fechado"
+msgstr[1] "%{merge_requests} merge requests fechados"
msgid "1 day"
msgstr "1 dia"
@@ -395,18 +481,18 @@ msgstr[1] "%d grupos"
msgid "1 merged merge request"
msgid_plural "%{merge_requests} merged merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 merge request com merge"
+msgstr[1] "%{merge_requests} merge requests com merge"
msgid "1 open issue"
msgid_plural "%{issues} open issues"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 issue aberta"
+msgstr[1] "%{issues} issues abertas"
msgid "1 open merge request"
msgid_plural "%{merge_requests} open merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 merge request aberto"
+msgstr[1] "%{merge_requests} merge request aberto"
msgid "1 pipeline"
msgid_plural "%d pipelines"
@@ -441,9 +527,6 @@ msgstr "20-29 contribuições"
msgid "2FA"
msgstr "A2F"
-msgid "2FA enabled"
-msgstr "Autenticação de 2 passos ativada"
-
msgid "2FADevice|Registered On"
msgstr "Registrado em"
@@ -490,7 +573,10 @@ msgid "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> will ad
msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> adicionará \"Por <a href=\"#\">johnsmith@example.com</a>\" a todas as issues e comentários originalmente criados por johnsmith@example.com. Por padrão, o endereço de e-mail ou nome de usuário é mascarado para garantir a privacidade do usuário. Use esta opção se você quiser mostrar o endereço de e-mail completo."
msgid "<no name set>"
-msgstr ""
+msgstr "<nenhum nome definido>"
+
+msgid "<no scopes selected>"
+msgstr "<nenhum escopo selecionado>"
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} fora da lista de commit</strong> e <strong>%{stagedFilesLength} na lista de commit</strong>"
@@ -528,6 +614,9 @@ msgstr "Um site Hugo que usa Netlify para CI/CD em vez do Gitlab, mas ainda com
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "Um site Jekyll que usa Netlify para CI/CD em vez do Gitlab, mas ainda com todas as outras ótimas funcionalidades do Gitlab."
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr "Um certificado SSL Let's Encrypt não pode ser obtido até que seu domínio seja verificado."
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr "Uma conta Let's Encrypt será configurada para esta instalação do GitLab usando seu endereço de e-mail. Você receberá e-mails para avisar sobre certificados expirados."
@@ -541,7 +630,7 @@ msgid "A fork is a copy of a project.<br />Forking a repository allows you to ma
msgstr "Um fork é uma cópia de um projeto.<br />Fork de um repositório permite que você faça alterações sem afetar o projeto original."
msgid "A member of the abuse team will review your report as soon as possible."
-msgstr ""
+msgstr "Um membro da equipe de abusos irá rever a sua avaliação assim que possível."
msgid "A new branch will be created in your fork and a new merge request will be started."
msgstr "Um novo \"branch\" será criado no seu \"fork\" e um novo merge request será iniciado."
@@ -564,6 +653,9 @@ msgstr "Um modelo pronto para uso com aplicativos iOS Swift."
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "Uma expressão regular que será usada para encontrar a saída do test coverage no rastreador de tarefa. Deixe em branco para desativar"
+msgid "A secure token that identifies an external storage request."
+msgstr "Um token seguro que identifica uma requisição de armazenamento externo."
+
msgid "A user with write access to the source branch selected this option"
msgstr "Um usuário com permissão de escrita no branch de origem selecionou esta opção"
@@ -571,7 +663,10 @@ msgid "API Help"
msgstr "Ajuda da API"
msgid "API Token"
-msgstr ""
+msgstr "Token da API"
+
+msgid "Abort"
+msgstr "Abortar"
msgid "About GitLab"
msgstr "Sobre o GitLab"
@@ -627,6 +722,66 @@ msgstr "Cargos"
msgid "AccessDropdown|Users"
msgstr "Usuários"
+msgid "AccessTokens|Access Tokens"
+msgstr "Token de acesso"
+
+msgid "AccessTokens|Are you sure?"
+msgstr "Você tem certeza?"
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "Tem certeza? Todos os URLs de RSS ou de calendário atualmente em uso deixarão de funcionar."
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr "Tem certeza? Todos os endereços de e-mail de issue atualmente em uso deixarão de funcionar."
+
+msgid "AccessTokens|Created"
+msgstr "Criado"
+
+msgid "AccessTokens|Feed token"
+msgstr "Token de feed"
+
+msgid "AccessTokens|Incoming email token"
+msgstr "Token de e-mail de recebido"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "Ele não pode ser usado para acessar outros dados."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Mantenha este token em segurança. Qualquer um que conseguir isso pode criar issues como se fosse você. Você deveria %{link_reset_it} se isso acontecer."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Mantenha este token em segurança. Qualquer um que conseguir isso pode ler feeds de RSS de atividades e issues, e seu feed de calendário como como se fosse você. Você deveria %{link_reset_it} se isso acontecer."
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr "Token de acesso pessoal"
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr "Eles são a única senha aceita quando você tem a autenticação de dois fatores (2FA) ativada."
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr "Você também pode usar tokens de acesso pessoal para autenticar no Git por HTTP."
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr "Você pode gerar um token de acesso pessoal para cada aplicativo usado que precisa de acesso à API do GitLab."
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr "O seu token de feed é usado para autenticá-lo quando seu leitor de RSS carrega um feed RSS personalizado ou quando seu aplicativo de calendário carrega um calendário personalizado e é incluído nesses URLs de feed."
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr "Seu token de e-mail de entrada é usado para autenticá-lo quando você cria um novo issue por e-mail, e é incluído em seus endereços de e-mail pessoais específicos do projeto."
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr "redefini-lo"
+
msgid "Account"
msgstr "Conta"
@@ -645,6 +800,9 @@ msgstr "Ativar Central de Serviços"
msgid "Active"
msgstr "Ativo"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr "Tokens %{type} ativo (%{token_length})"
+
msgid "Active Sessions"
msgstr "Sessões ativas"
@@ -654,12 +812,20 @@ msgstr "Atividade"
msgid "Add"
msgstr "Adicionar"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] "Adicionar %d issue"
+msgstr[1] "Adicionar %d issues"
+
msgid "Add CHANGELOG"
msgstr "Adicionar CHANGELOG"
msgid "Add CONTRIBUTING"
msgstr "Adicionar CONTRIBUTING"
+msgid "Add GitLab to Slack"
+msgstr "Adicionar GitLab ao Slack"
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Adicione Webhooks de grupo e GitLab Enterprise Edition."
@@ -672,12 +838,27 @@ msgstr "Adicionar cluster Kubernetes"
msgid "Add README"
msgstr "Adicionar README"
-msgid "Add a GPG key"
+msgid "Add Zoom meeting"
msgstr ""
+msgid "Add a %{type} token"
+msgstr "Adicione um token %{type}"
+
+msgid "Add a GPG key"
+msgstr "Adicionar chave GPG"
+
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr "Adicione um botão Grafana na barra lateral do administrador, monitorando a seção, para acessar uma variedade de estatísticas sobre a saúde e desempenho do GitLab."
+
+msgid "Add a To Do"
+msgstr "Adicionar um afazer"
+
msgid "Add a bullet list"
msgstr "Adicionar uma lista de marcadores"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr "Adicionar um comentário geral para este %{noteableDisplayName}."
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Adicionar um comentário geral para este %{noteable_name}."
@@ -696,18 +877,18 @@ msgstr "Adicionar uma tabela"
msgid "Add a task list"
msgstr "Adicionar uma lista de tarefas"
-msgid "Add a todo"
-msgstr "Adicionar tarefa"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Coloque um texto adicional para aparecer em todas as comunicações por email. Limite de %{character_limit} caracteres"
msgid "Add an SSH key"
-msgstr ""
+msgstr "Adicionar chave SSH"
msgid "Add an issue"
msgstr "Adicionar uma issue"
+msgid "Add approval rule"
+msgstr "Adicionar regra de aprovação"
+
msgid "Add approvers"
msgstr "Adicionar aprovadores"
@@ -729,6 +910,9 @@ msgstr "Adicione cabeçalho e rodapé aos emails. Por favor, note que as configu
msgid "Add image comment"
msgstr "Adicionar comentário de imagem"
+msgid "Add issues"
+msgstr "Adicionar issues"
+
msgid "Add italic text"
msgstr "Adicionar texto em itálico"
@@ -747,17 +931,26 @@ msgstr "Adicionar novo aplicativo"
msgid "Add new directory"
msgstr "Adicionar novo diretório"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr "Adicionar novo membro a %{strong_start}%{group_name}%{strong_end}"
+
msgid "Add or subtract spent time"
msgstr "Adicionar ou subtrair tempo gasto"
msgid "Add reaction"
msgstr "Adicionar reação"
+msgid "Add to Slack"
+msgstr "Adicionar ao Slack"
+
+msgid "Add to epic"
+msgstr "Adicionar ao épico"
+
msgid "Add to merge train"
-msgstr ""
+msgstr "Adicionar ao merge train"
msgid "Add to merge train when pipeline succeeds"
-msgstr ""
+msgstr "Adiciona merge train quando o pipeline for bem-sucedido"
msgid "Add to project"
msgstr "Adicionar ao projeto"
@@ -765,8 +958,8 @@ msgstr "Adicionar ao projeto"
msgid "Add to review"
msgstr "Adicionar à revisão"
-msgid "Add todo"
-msgstr "Adicionar tarefa"
+msgid "Add to tree"
+msgstr "Adicionar à árvore"
msgid "Add user(s) to the group:"
msgstr "Adicionar usuário(s) ao grupo:"
@@ -780,9 +973,27 @@ msgstr "Não há usuários especificados."
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "Muitos usuários especificados (o limite é %{user_limit})"
+msgid "Added"
+msgstr "Adicionado"
+
+msgid "Added %{epic_ref} as child epic."
+msgstr "Adicionado %{epic_ref} como épico filho."
+
+msgid "Added %{label_references} %{label_text}."
+msgstr "Adicionado %{label_references} %{label_text}."
+
+msgid "Added a To Do."
+msgstr "Adicionado um afazer."
+
+msgid "Added an issue to an epic."
+msgstr "Adicionado um issue a um épico."
+
msgid "Added at"
msgstr "Adicionado em"
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "A adição de novos aplicativos está desativada na sua instância do GitLab. Entre em contato com seu administrador do GitLab para obter a permissão"
@@ -798,8 +1009,17 @@ msgstr "Adiciona"
msgid "Adds %{epic_ref} as child epic."
msgstr "Adiciona %{epic_ref} como épico filho."
-msgid "Adds a todo."
-msgstr "Adiciona uma tarefa."
+msgid "Adds %{labels} %{label_text}."
+msgstr "Adiciona %{labels} %{label_text}."
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "Ãrea do Administrador"
@@ -834,6 +1054,9 @@ msgstr "Erro ao parar tarefas"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Você parará todas as tarefas. Os processos em execução serão abruptamente interrompidos."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr "Nota"
@@ -859,29 +1082,53 @@ msgid "AdminSettings|Environment variables are protected by default"
msgstr "Variáveis de ambiente são protegidas por padrão"
msgid "AdminSettings|No required pipeline"
-msgstr ""
+msgstr "Nenhum pipeline necessário"
msgid "AdminSettings|Required pipeline configuration"
-msgstr ""
+msgstr "Configuração de pipeline necessária"
msgid "AdminSettings|Select a pipeline configuration file"
-msgstr ""
+msgstr "Selecione um arquivo de configuração de pipeline"
msgid "AdminSettings|Select a template"
-msgstr ""
+msgstr "Selecione um modelo"
msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
-msgstr ""
+msgstr "Defina uma %{link_start}configuração de pipeline%{link_end} incluída automaticamente em toda a instância. Esta configuração de pipeline será executada após a configuração do próprio projeto."
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
msgstr "Especifique um domínio a ser usado por padrão para os estágios de Auto Review Application e Auto Deploy de cada projeto."
msgid "AdminSettings|The required pipeline configuration can be selected from the %{code_start}gitlab-ci%{code_end} directory inside of the configured %{link_start}instance template repository%{link_end} or from GitLab provided configurations."
-msgstr ""
+msgstr "A configuração de pipeline necessária pode ser selecionada a partir do diretório %{code_start}gitlab-ci%{code_end} dentro do %{link_start}repositório modelo de instância%{link_end} configurado ou das configurações fornecidas pelo GitLab."
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "Ao criar uma nova variável de ambiente, ela será protegida por padrão."
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "A2F desativada"
@@ -970,13 +1217,19 @@ msgid "After a successful password update you will be redirected to login screen
msgstr "Após uma atualização de senha bem-sucedida, você será redirecionado para a tela de login."
msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
-msgstr ""
+msgstr "Após uma atualização de senha bem sucedida, você será redirecionado para a página de login onde você pode entrar com sua nova senha."
msgid "Alert"
msgid_plural "Alerts"
msgstr[0] "Alerta"
msgstr[1] "Alertas"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "Alertas"
@@ -986,12 +1239,18 @@ msgstr "Todos"
msgid "All Members"
msgstr "Todos os membros"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "Houve commit com todas as mudanças"
-msgid "All email addresses will be used to identify your commits."
+msgid "All cross-project dependencies have merged"
msgstr ""
+msgid "All email addresses will be used to identify your commits."
+msgstr "Todos os endereços de e-mail serão usados para identificar seus commits."
+
msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
msgstr "Todos os recursos estão habilitados para projetos em branco, a partir de modelos ou ao importar, mas você pode desativá-los posteriormente nas configurações do projeto."
@@ -1007,9 +1266,6 @@ msgstr "Todos os conflitos de merge foram resolvidos. A merge request pode agora
msgid "All projects"
msgstr "Todos os projetos"
-msgid "All todos were marked as done."
-msgstr "Todos os afazeres foram marcados como concluídos."
-
msgid "All users"
msgstr "Todos os usuários"
@@ -1043,6 +1299,12 @@ msgstr "Permitir renderização de diagramas PlantUML em documentos Asciidoc."
msgid "Allow requests to the local network from hooks and services."
msgstr "Permitir requisições de hooks e serviços para a rede local."
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr "Permitir que esta chave também possa fazer push para o repositório? (Padrão permite apenas acesso para pull.)"
@@ -1055,6 +1317,9 @@ msgstr "Permitir que os usuários solicitem acesso"
msgid "Allow users to request access if visibility is public or internal."
msgstr "Permitir que os usuários solicitem acesso se a visibilidade for pública ou interna."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "Permitido falhar"
@@ -1067,14 +1332,8 @@ msgstr "Também chamado de \"Emissor\" ou \"Identificador de confiança em terce
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "Também chamado de \"URL de serviços terceiros\" ou \"URL de resposta\""
-msgid "Alternate support URL for help page"
-msgstr "Suporte alternativo URL para a página de ajuda"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "Alternativamente, você pode usar um %{personal_access_token_link}. Quando você cria seu Token de Acesso Pessoal, você precisará selecionar o escopo do <code>repositório</code>, para que possamos exibir uma lista de seus repositórios públicos e privados que estão disponíveis para se conectar."
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Alternativamente, você pode usar um %{personal_access_token_link}. Quando você cria seu Token de Acesso Pessoal, você precisará selecionar o escopo do <code>repositório</code>, para que possamos exibir uma lista de seus repositórios públicos e privados que estão disponíveis para se importar."
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "Quantidade de tempo (em horas) que os usuários podem ignorar a configuração forçada da autenticação de dois fatores"
@@ -1088,8 +1347,8 @@ msgstr "Um campo vazio do usuário do GitLab adicionará o nome completo do usuÃ
msgid "An error has occurred"
msgstr "Ocorreu um erro"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Ocorreu um erro ao adicionar um rascunho à discussão."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "Ocorreu um erro ao adicionar um novo rascunho."
@@ -1143,9 +1402,12 @@ msgid "An error occurred while enabling Service Desk."
msgstr "Um erro ocorreu ao habilitar a Central de Serviços."
msgid "An error occurred while fetching environments."
-msgstr ""
+msgstr "Um erro ocorreu enquanto buscava os ambientes."
msgid "An error occurred while fetching folder content."
+msgstr "Um erro ocorreu enquanto buscava o conteúdo do diretório."
+
+msgid "An error occurred while fetching issues."
msgstr ""
msgid "An error occurred while fetching label colors."
@@ -1188,6 +1450,9 @@ msgid "An error occurred while fetching the releases. Please try again."
msgstr "Ocorreu um erro ao buscar as releases. Por favor, tente novamente."
msgid "An error occurred while fetching this tab."
+msgstr "Ocorreu um erro enquanto busca nesta aba."
+
+msgid "An error occurred while generating a username. Please try again."
msgstr ""
msgid "An error occurred while getting projects"
@@ -1235,12 +1500,12 @@ msgstr "Ocorreu um erro ao remover épicos."
msgid "An error occurred while removing issues."
msgstr "Um erro ocorreu ao remover issues."
-msgid "An error occurred while rendering KaTeX"
-msgstr "Erro ao renderizar o KaTeX"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "Erro ao renderizar pré-visualização da mensagem de transmissão"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "Erro ao recuperar calendário de atividades"
@@ -1259,6 +1524,12 @@ msgstr "Ocorreu um erro ao salvar as configurações de aprovação"
msgid "An error occurred while subscribing to notifications."
msgstr "Ocorreu um erro ao inscrever às notificações."
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "Ocorreu um erro ao desinscrever às notificações."
@@ -1281,7 +1552,7 @@ msgid "An error occurred whilst fetching the latest pipeline."
msgstr "Ocorreu um erro ao recuperar o último pipeline."
msgid "An error occurred whilst getting files for - %{branchId}"
-msgstr ""
+msgstr "Ocorreu um erro ao obter arquivos para - %{branchId}"
msgid "An error occurred whilst loading all the files."
msgstr "Erro ao carregar todos os arquivos."
@@ -1307,6 +1578,9 @@ msgstr "Ocorreu um erro ao carregar os trabalhos de pipelines."
msgid "An error occurred. Please try again."
msgstr "Ocorreu um erro. Tente novamente."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr "Um issue pode ser um bug, um afazer ou uma solicitação de recurso que precisa ser discutida em um projeto. Além disso, os issues são pesquisáveis e filtráveis."
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "Um erro inesperado ocorreu enquanto verificava o ambiente de projeto."
@@ -1325,6 +1599,9 @@ msgstr "Ocorreu um erro inesperado ao parar o terminal da web."
msgid "Analytics"
msgstr "Telemetria"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr "Ancestrais"
@@ -1349,6 +1626,9 @@ msgstr "Qualquer tokens criptografados"
msgid "Any namespace"
msgstr "Qualquer namespace"
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Aparência"
@@ -1391,6 +1671,9 @@ msgstr "Aplicações"
msgid "Applied"
msgstr "Aplicado"
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr "Aplicar sugestão"
@@ -1432,8 +1715,8 @@ msgstr[1] "%{count} aprovações obrigatórias de %{membersCount}"
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr "Todos os membros com a função de Desenvolvedor ou superior e proprietários código (qualquer um dos)"
-msgid "ApprovalRule|Members"
-msgstr "Membros"
+msgid "ApprovalRule|Approvers"
+msgstr ""
msgid "ApprovalRule|Name"
msgstr "Nome"
@@ -1441,12 +1724,27 @@ msgstr "Nome"
msgid "ApprovalRule|No. approvals required"
msgstr "No. de aprovações requeridas"
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr "por exemplo, QA, segurança, etc."
msgid "Approvals"
msgstr "Aprovações"
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "Abr"
@@ -1483,6 +1781,15 @@ msgstr "Tem certeza de que deseja cancelar a criação deste comentário?"
msgid "Are you sure you want to cancel editing this comment?"
msgstr "Tem certeza de que deseja cancelar a edição deste comentário?"
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr "Tem certeza de que deseja redefinir o token SCIM? O provisionamento SCIM
msgid "Are you sure you want to reset the health check token?"
msgstr "Você tem certeza que quer reiniciar o token de status de saúde?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1547,11 +1857,17 @@ msgid "Are you sure? Removing this GPG key does not affect already signed commit
msgstr ""
msgid "Are you sure? This will invalidate your registered applications and U2F devices."
-msgstr ""
+msgstr "Você tem certeza? Isso invalidará seus aplicativos registrados e dispositivos U2F."
msgid "Artifact ID"
msgstr "ID do artefato"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Artefatos"
@@ -1588,6 +1904,9 @@ msgstr "Atribuir"
msgid "Assign custom color like #FF0000"
msgstr "Coloque uma cor personalizada, como #FF0000"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "Atribuir etiquetas"
@@ -1606,6 +1925,9 @@ msgstr "Atribuir-se a essas issues"
msgid "Assign yourself to this issue"
msgstr "Atribuir-se a essa issue"
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "Problemas Atribuídos"
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr "Atribuído a mim"
msgid "Assignee"
-msgstr "Responsável"
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr "Quadro de responsáveis não disponível com sua licença atual"
@@ -1627,6 +1951,9 @@ msgstr "Listas de responsáveis mostram todas as issues atribuídas ao usuário
msgid "Assignee(s)"
msgstr "Responsável(is)"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr "Pelo menos uma aprovação de um proprietário do código é necessária para alterar arquivos que coincidem com as respectivas regras CODEOWNER."
@@ -1647,12 +1974,21 @@ msgstr "Falha ao anexar o arquivo."
msgid "Audit Events"
msgstr "Eventos de Auditoria"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "Ago"
msgid "August"
msgstr "Agosto"
+msgid "Authenticate"
+msgstr "Autenticar"
+
+msgid "Authenticate with GitHub"
+msgstr "Autenticar com GitHub"
+
msgid "Authentication Log"
msgstr "Log de autenticação"
@@ -1710,6 +2046,9 @@ msgstr "Auto DevOps ativo"
msgid "Auto DevOps, runners and job artifacts"
msgstr "Auto DevOps, runners e artefatos de tarefas"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "Cancelar automaticamente os pipelines redundantes pendentes"
@@ -1731,6 +2070,18 @@ msgstr "Saiba mais em %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "A pipeline de Auto DevOps foi ativada e será usada se não for encontrada configuração CI alternativa nos arquivos. %{more_information_link}"
+msgid "Autocomplete"
+msgstr "Autocompletar"
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,32 +2262,32 @@ msgstr "Abaixo você encontrará todos os grupos que são públicos."
msgid "Billing"
msgstr "Cobrança"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr "%{group_name} está atualmente no plano %{plan_link}."
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "Downgrade e upgrade automático para alguns planos ainda não está disponível."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr "@%{user_name} você está atualmente usando o plano %{plan_link}."
msgid "BillingPlans|Current plan"
msgstr "Plano atual"
-msgid "BillingPlans|Customer Support"
-msgstr "Suporte ao Cliente"
-
msgid "BillingPlans|Downgrade"
msgstr "Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr "Se você gostaria de diminuir o seu plano, por favor entre em contato com o %{support_link_start}Suporte ao Cliente%{support_link_end}."
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "Saiba mais sobre cada plano lendo nossas %{faq_link}, ou inicie uma avaliação gratuita de 30 dias do GitLab.com Gold."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "Saiba mais sobre cada plano lendo nossas %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr "Saiba mais sobre cada plano visitando nossa %{pricing_page_link}."
msgid "BillingPlans|Manage plan"
msgstr "Gerenciar plano"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "Por favor, entre em contato com %{customer_support_link} para resolver seu caso."
+msgid "BillingPlans|Pricing page"
+msgstr "Página de preços"
msgid "BillingPlans|See all %{plan_name} features"
msgstr "Veja todas as funcionalidades do %{plan_name}"
@@ -1950,14 +2301,11 @@ msgstr "Para gerenciar o plano para esse grupo, visite a seção de cobrança de
msgid "BillingPlans|Upgrade"
msgstr "Upgrade"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "Você está atualmente no plano %{plan_link}."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "Sua avaliação do GitLab.com expirou em %{expiration_date}. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "A sua avaliação Gold irá <strong>expirar após %{expiration_date}</strong>. Você pode saber mais sobre o GitLab.com Gold lendo sobre nossos %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr "Seu período de avaliação do GitLab.com irá <strong>expirar após %{expiration_date}</strong>. Você pode saber mais sobre o GitLab.com Gold lendo sobre nossas %{features_link}."
msgid "BillingPlans|features"
msgstr "recursos"
@@ -1974,6 +2322,9 @@ msgstr "%{price_per_year} pago anualmente"
msgid "BillingPlans|per user"
msgstr "por usuário"
+msgid "BillingPlan|Upgrade plan"
+msgstr "Atualizar plano"
+
msgid "Bitbucket Server Import"
msgstr "Importação de Servidores Bitbucket"
@@ -1986,31 +2337,51 @@ msgstr "Bloquear"
msgid "Blocked"
msgstr "Bloqueado"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr "Blog"
msgid "Blue helpers indicate an action to be taken."
msgstr "Auxiliares azuis indicam uma ação a ser tomada."
+msgid "Board name"
+msgstr "Nome do painel"
+
+msgid "Board scope"
+msgstr "Escopo do painel"
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr "O escopo do painel afeta quais issues são exibidas para qualquer um que visite este painel"
+
+msgid "BoardBlankState|Add default lists"
+msgstr "Adicionar listas padrão"
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr "Deixa pra lá, eu vou usar o meu próprio"
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "Painéis"
+msgid "Boards|Collapse"
+msgstr "Recolher"
+
msgid "Boards|Edit board"
msgstr "Editar painel"
+msgid "Boards|Expand"
+msgstr "Expandir"
+
msgid "Boards|View scope"
msgstr "Ver escopo"
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "O branch %{branchName} não foi encontrado no repositório deste projeto."
@@ -2173,6 +2544,9 @@ msgstr "Acessar arquivo"
msgid "Browse Files"
msgstr "Acessar arquivos"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Navegar pelos arquivos"
@@ -2180,7 +2554,7 @@ msgid "Built-in"
msgstr "Embutido"
msgid "BurndownChartLabel|Guideline"
-msgstr ""
+msgstr "Diretrizes"
msgid "BurndownChartLabel|Open issue weight"
msgstr ""
@@ -2189,10 +2563,10 @@ msgid "BurndownChartLabel|Open issues"
msgstr ""
msgid "BurndownChartLabel|Progress"
-msgstr ""
+msgstr "Progresso"
msgid "BurndownChartLabel|Remaining"
-msgstr ""
+msgstr "Restante"
msgid "Business"
msgstr "Negócios"
@@ -2284,8 +2658,11 @@ msgstr "Aprender mais sobre Auto DevOps"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "O pipeline de Auto DevOps será executado se nenhum arquivo de configuração de IC alternativo for encontrado."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
-msgstr "Você precisa adicionar uma %{kubernetes_cluster_start}integração de cluster Kubernetes%{kubernetes_cluster_end} a este projeto com um domínio para que sua estratégia de deploy funcione corretamente."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
msgid "CICD|group enabled"
msgstr "grupo habilitado"
@@ -2293,6 +2670,12 @@ msgstr "grupo habilitado"
msgid "CICD|instance enabled"
msgstr "Instância habilitada"
+msgid "CLOSED"
+msgstr "FECHADO"
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr "CONTRIBUINDO"
@@ -2320,9 +2703,15 @@ msgstr "Canary Deployments é uma estratégia popular em CI onde uma pequena por
msgid "Cancel"
msgstr "Cancelar"
+msgid "Cancel running"
+msgstr "Cancelar execução"
+
msgid "Cancel this job"
msgstr "Cancelar essa tarefa"
+msgid "Cancelling Preview"
+msgstr "Cancelando pré-visualização"
+
msgid "Cannot be merged automatically"
msgstr "Não pode ser feito o merge automaticamente"
@@ -2332,6 +2721,9 @@ msgstr "Não é possível criar o relatório de abuso. O usuário foi excluído.
msgid "Cannot create the abuse report. This user has been blocked."
msgstr "Não é possível criar o relatório de abuso. Este usuário foi bloqueado."
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "Não se pode modificar um cluster Kubernetes gerenciado"
@@ -2359,12 +2751,21 @@ msgstr "Certificado (PEM)"
msgid "Change Weight"
msgstr "Alterar Peso"
+msgid "Change assignee"
+msgstr "Alterar responsável"
+
msgid "Change assignee(s)"
msgstr "Alterar responsável(eis)"
msgid "Change assignee(s)."
msgstr "Alterar responsável(eis)."
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr "Alterar marco"
+
msgid "Change path"
msgstr "Alterar caminho"
@@ -2401,6 +2802,12 @@ msgstr "Reverter"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "Isso criará um novo commit para reverter as mudanças existentes."
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr "Alterou o título para \"%{title_param}\"."
+
msgid "Changes"
msgstr "Alterações"
@@ -2422,6 +2829,57 @@ msgstr "Gráficos"
msgid "Chat"
msgstr "Bate-papo"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr "Verifique Novamente"
@@ -2464,6 +2922,9 @@ msgstr "Escolha a branch/tag (ex: %{master}) ou número do commit (ex: %{sha}) p
msgid "Choose a file"
msgstr "Escolha um arquivo"
+msgid "Choose a group"
+msgstr "Escolha um grupo"
+
msgid "Choose a role permission"
msgstr "Escolha uma permissão de cargo"
@@ -2500,9 +2961,6 @@ msgstr "Escolha quais repositórios você deseja se conectar e executar pipeline
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "Escolha quais shards você deseja sincronizar nesse nó secundário."
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "cancelado"
@@ -2593,6 +3051,9 @@ msgstr "Remover a variável"
msgid "CiVariables|Scope"
msgstr "Escopo"
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr "Estado"
@@ -2602,6 +3063,9 @@ msgstr "Tipo"
msgid "CiVariables|Value"
msgstr "Valor"
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "* (Todos os ambientes)"
@@ -2612,7 +3076,7 @@ msgid "CiVariable|Create wildcard"
msgstr "Criar curinga"
msgid "CiVariable|Error occurred while saving variables"
-msgstr "CiVariable|Ocorreu um erro ao salvar variáveis"
+msgstr "Ocorreu um erro ao salvar variáveis"
msgid "CiVariable|Masked"
msgstr "Mascarada"
@@ -2647,15 +3111,24 @@ msgstr "Limpar"
msgid "Clear input"
msgstr "Limpar entrada"
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "Limpar Pesquisa"
msgid "Clear search input"
msgstr "Limpar campo de pesquisa"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr "Limpar peso"
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr "Limpa o peso."
@@ -2677,6 +3150,9 @@ msgstr "Clique no botão à direita <strong>Selecionar nenhum</strong>, uma vez
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "Clique no botão abaixo para iniciar o processo de instalação navegando para a página do Kubernetes"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "Clique para expandir."
@@ -2713,6 +3189,9 @@ msgstr "Clonar com SSH"
msgid "Close"
msgstr "Fechar"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "Fechar épico"
@@ -2722,12 +3201,27 @@ msgstr "Fechar marco"
msgid "Close sidebar"
msgstr "Fechar barra lateral"
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "Fechado"
msgid "Closed issues"
msgstr "Issues Fechadas"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr "Fecha este %{quick_action_target}."
+
+msgid "Cluster %{cluster} was used."
+msgstr "O cluster %{cluster} foi usado."
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr " %{custom_domain_start}Mais informações%{custom_domain_end}."
@@ -2776,6 +3270,9 @@ msgstr "A adição de uma integração irá compartilhar o cluster entre todos o
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Opções avançadas na integração deste cluster Kubernetes"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr "Todos os dados serão excluídos e não poderão ser restaurados."
@@ -2785,6 +3282,9 @@ msgstr "Permite que o GitLab gerencie contas serviços e namespaces para esse cl
msgid "ClusterIntegration|Alternatively"
msgstr "Alternativamente"
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Ocorreu um erro ao entrar em contato com a Google Cloud API. Por favor, tente novamente mais tarde."
@@ -2824,12 +3324,18 @@ msgstr "Cert-Manager é um controlador de gerenciamento de certificados nativo d
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Pacote de autoridade certificadora (Formato PEM)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "Escolha quais aplicativos instalar em seu cluster Kubernetes. O Helm Tiller é necessário para instalar qualquer um dos seguintes aplicativos."
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Escolha quais dos seus ambientes usarão esse cluster."
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr "Saúde do cluster"
@@ -2860,12 +3366,21 @@ msgstr "Copiar nome do cluster Kubernetes"
msgid "ClusterIntegration|Copy Service Token"
msgstr "Copiar Token de Serviço"
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
-msgstr "Integração de Clusters | Criar cluster Kubernetes"
+msgstr "Criar cluster Kubernetes"
+
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
msgid "ClusterIntegration|Did you know?"
msgstr "Você sabia?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Ative ou desative conexão do GitLab com seu cluster Kubernetes."
@@ -2914,6 +3429,9 @@ msgstr "Cluster gerenciado pelo GitLab"
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Google Cloud Platform projeto"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -3001,8 +3519,8 @@ msgstr "O cluster Kubernetes está sendo criado no Google Kubernetes Engine..."
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Nome do cluster Kubernetes"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Cluster Kubernetes foi criado com sucesso no Google Kubernetes Engine. Atualize a página para ver os detalhes do cluster"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "Clusters Kubernetes permitem que você use apps de revisão, faça deploy de suas aplicações, execute suas pipelines e muito mais de um jeito mais simples."
@@ -3016,6 +3534,9 @@ msgstr "Saiba mais sobre os %{help_link_start_machine_type}tipos de máquinas%{h
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "Saiba mais sobre as %{help_link_start}zonas%{help_link_end}."
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "Saiba mais sobre os Kubernetes"
@@ -3028,6 +3549,12 @@ msgstr "Saiba mais sobre instância de cluster Kubernetes"
msgid "ClusterIntegration|Let's Encrypt"
msgstr "Let's Encrypt"
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Tipo de máquina"
@@ -3037,6 +3564,9 @@ msgstr "Tenha certeza de que sua conta %{link_to_requirements} para criar cluste
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "Gerenciar seu cluster Kubernetes visitando %{link_gke}"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "Nenhum tipo de máquina corresponde à sua pesquisa"
@@ -3046,6 +3576,9 @@ msgstr "Nenhum projeto encontrado"
msgid "ClusterIntegration|No projects matched your search"
msgstr "Nenhum projeto corresponde à sua pesquisa"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "Nenhuma zona corresponde à sua pesquisa"
@@ -3070,6 +3603,9 @@ msgstr "Cluster do Projeto"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "Namespace do projeto (opcional, único)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3082,6 +3618,9 @@ msgstr "Cluster habilitado para RBAC"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "Leia nosso %{link_to_help_page} em integração de cluter Kubernetes."
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Remover integração com o cluster Kubernetes"
@@ -3100,15 +3639,24 @@ msgstr "Solicitação para início de instalação falhou"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr "Solicitação para início de desinstalação falhou"
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "Salvar alterações"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "Pesquisar tipos de máquina"
msgid "ClusterIntegration|Search projects"
msgstr "Pesquisar projetos"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "Pesquisar zonas"
@@ -3127,6 +3675,9 @@ msgstr "Selecione projeto e zona para escolher o tipo de máquina"
msgid "ClusterIntegration|Select project to choose zone"
msgstr "Selecione o projeto para escolher a zona"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "Selecione a zona"
@@ -3166,18 +3717,24 @@ msgstr "O certificado do Kubernetes usado para autenticar no cluster."
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr "A URL usada para acessar a API do Kubernetes."
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
-msgstr "O IP associado será excluído e não poderá ser restaurado."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
+msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
-msgstr "O certificado associado será excluído e não poderá ser restaurado."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
+msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr "O balanceador de carga e o IP associados serão excluídos e não poderão ser restaurados."
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr "O endpoint está em processo de atribuição. Verifique o seu cluster Kubernetes ou Quotas no Google Kubernetes Engine se demorar muito."
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr "Desinstalar %{appTitle}"
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "Validando status de faturamento do projeto"
@@ -3235,18 +3795,24 @@ msgstr "documentação"
msgid "ClusterIntegration|help page"
msgstr "ajuda"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "atende aos requisitos"
msgid "ClusterIntegration|pricing"
msgstr "preços"
-msgid "ClusterIntegration|properly configured"
-msgstr "configurado corretamente"
-
msgid "ClusterIntegration|sign up"
msgstr "cadastrar"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr "Código"
@@ -3274,15 +3840,24 @@ msgstr "Recolher aprovadores"
msgid "Collapse sidebar"
msgstr "Minimizar barra lateral"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr "ComboSearch não está definido"
+msgid "Command"
+msgstr "Comando"
+
msgid "Command line instructions"
msgstr "Instruções de linha de comando"
msgid "Commands applied"
msgstr "Comandos aplicados"
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "Comentário"
@@ -3292,11 +3867,11 @@ msgstr "Comentar e fechar %{noteable_name}"
msgid "Comment & reopen %{noteable_name}"
msgstr "Comentar e reabrir %{noteable_name}"
-msgid "Comment & resolve discussion"
-msgstr "Comentar e marcar a discussão como resolvida"
+msgid "Comment & resolve thread"
+msgstr "Comentar e resolver discussão"
-msgid "Comment & unresolve discussion"
-msgstr "Comentar e marcar a discussão como não resolvida"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "Posição do formulário de comentários"
@@ -3304,6 +3879,9 @@ msgstr "Posição do formulário de comentários"
msgid "Comment is being updated"
msgstr "O comentário está sendo atualizado"
+msgid "Comment/Reply (quoting selected text)"
+msgstr "Comentar/Responder (citando o texto selecionado)"
+
msgid "Comments"
msgstr "Comentários"
@@ -3315,6 +3893,9 @@ msgstr[1] "Commits"
msgid "Commit %{commit_id}"
msgstr "Commit %{commit_id}"
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "Mensagem de Commit"
@@ -3411,12 +3992,18 @@ msgstr "Alvo"
msgid "CompareBranches|There isn't anything to compare."
msgstr "Não há nada para comparar."
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "Confidencial"
msgid "Confidentiality"
msgstr "Confidencialidade"
+msgid "Configuration"
+msgstr "Configuração"
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr "Configure os runners do GitLab para começar a usar o Terminal da Web. %{helpStart}Saiba mais.%{helpEnd}"
@@ -3426,6 +4013,9 @@ msgstr "Configurar timeouts do Gitaly."
msgid "Configure Let's Encrypt"
msgstr "Configurar Let's Encrypt"
+msgid "Configure Prometheus"
+msgstr "Configurar Prometheus"
+
msgid "Configure Tracing"
msgstr "Configurar rastreamento"
@@ -3435,6 +4025,9 @@ msgstr "Configure um arquivo <code>.gitlab-webide.yml</code> no diretório <code
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "Configurar housekeeping e checagens do git nos repositórios."
+msgid "Configure existing installation"
+msgstr "Configurar instalação existente"
+
msgid "Configure limits for web and API requests."
msgstr "Configurar limites para web e requisições para API."
@@ -3454,7 +4047,7 @@ msgid "Confirm"
msgstr "Confirmar"
msgid "Confirmation email sent to %{email}"
-msgstr ""
+msgstr "O e-mail de confirmação foi enviado para %{email}"
msgid "Confirmation required"
msgstr "Confirmação necessária"
@@ -3475,7 +4068,7 @@ msgid "Connect your external repositories, and CI/CD pipelines will run for new
msgstr "Conecte seus repositórios externos e pipelines CI/CD vão ser executados para novos commits. Um projeto GitLab será criado com apenas recursos de CI/CD ativados."
msgid "Connecting to terminal sync service"
-msgstr ""
+msgstr "Conectando ao serviço de sincronização de terminal"
msgid "Connecting..."
msgstr "Conectando..."
@@ -3484,49 +4077,57 @@ msgid "Connection failure"
msgstr "Falha na conexão"
msgid "Contact an owner of group %{namespace_name} to upgrade the plan."
-msgstr ""
+msgstr "Entre em contato com um proprietário do grupo %{namespace_name} para atualizar o plano."
msgid "Contact owner %{link_start}%{owner_name}%{link_end} to upgrade the plan."
-msgstr ""
+msgstr "Entre em contato com o proprietário %{link_start}%{owner_name}%{link_end} para atualizar o plano."
msgid "Contact sales to upgrade"
msgstr "Entre em contato com o departamento de vendas para atualizar"
msgid "Contact your Administrator to upgrade your license."
-msgstr ""
+msgstr "Entre em contato com seu administrador para atualizar sua licença."
msgid "Container Registry"
msgstr "Container Registry"
msgid "Container registry images"
-msgstr ""
+msgstr "Imagens do container registry"
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "Primeiro faça login no Container Registry do Gitlab usando seu nome de usuário e senha. Se você tiver %{link_2fa}, será necessário usar um %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "Gitlab suporta até três níveis de nomes de imagens. Os exemplos a seguir são de imagens válidas para seu projeto:"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr "Copiar o comando de build para a área de transferência"
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "Como usar o Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr "Copiar o comando de push para a área de transferência"
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "Leia mais sobre"
+msgid "ContainerRegistry|Last Updated"
+msgstr "Última atualização"
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "Sem tags no Container Registry para essa imagem."
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "Uma vez que você autenticar, será possível criar e fazer upload de uma imagem usando os comandos comuns de %{build} e %{push}"
+msgid "ContainerRegistry|Quick Start"
+msgstr "Início rápido"
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr "Remover imagem(ns) e tags"
msgid "ContainerRegistry|Remove repository"
msgstr "Apagar repositório"
-msgid "ContainerRegistry|Remove tag"
-msgstr "Apagar tag"
+msgid "ContainerRegistry|Remove selected images"
+msgstr "Remover imagens selecionadas"
msgid "ContainerRegistry|Size"
msgstr "Tamanho"
@@ -3537,14 +4138,29 @@ msgstr "Tag"
msgid "ContainerRegistry|Tag ID"
msgstr "ID da Tag"
-msgid "ContainerRegistry|Use different image names"
-msgstr "Use nomes de imagem diferentes"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr "Você está prestes a excluir a imagem <b>%{title}</b>. Isso excluirá a imagem e todas as tags apontando para essa imagem."
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "Com o Container Registry do Docker integrado ao Gitlab, todo projeto pode ter seu próprio espaço para guardar suas imagens."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr "Você está prestes a remover o repositório <b>%{title}</b>. Depois de confirmar, este repositório será permanentemente excluído."
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "Você pode usar também um %{deploy_token} para acesso somente-leitura às imagens do registry."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
msgstr ""
@@ -3595,7 +4211,7 @@ msgid "ContributorsPage|Please wait a moment, this page will automatically refre
msgstr "Por favor, espere um momento, essa página será atualizada automaticamente."
msgid "Control emails linked to your account"
-msgstr ""
+msgstr "Controle e-mails vinculados à sua conta"
msgid "Control the display of third party offers."
msgstr "Controle a exibição de ofertas de terceiros."
@@ -3606,15 +4222,24 @@ msgstr "Controlar a concorrência máxima do enchimento do repositório para ess
msgid "ConvDev Index"
msgstr "Ãndice ConvDev"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr "Copiar URL de clone do %{http_label}"
msgid "Copy %{protocol} clone URL"
msgstr "Copiar URL de Clone do %{protocol}"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr "Copiar ID para área de transferência"
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr "Copiar link"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr "Copiar referência para área de transferência"
@@ -3666,6 +4294,12 @@ msgstr "Copiar para área de transferência"
msgid "Copy token to clipboard"
msgstr "Copiar token para a área de transferência"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,27 +4315,39 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr "Não foi possível criar o repositório Wiki no momento. Por favor, tente novamente mais tarde."
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr "Não foi possível criar o projeto"
+
msgid "Could not delete chat nickname %{chat_name}."
msgstr "Não foi possível excluir o apelido de bate-papo %{chat_name}."
msgid "Could not remove the trigger."
msgstr "Não foi possível remover o gatilho."
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "Não foi possível recuperar o status do pipeline. Para solução de problemas, leia a %{linkStart}documentação.%{linkEnd}"
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr "Não foi possível salvar o ID do projeto"
+
+msgid "Could not save prometheus manual configuration"
+msgstr "Não foi possível salvar a configuração manual do prometheus"
+
msgid "Coverage"
msgstr "Cobertura"
msgid "Create"
msgstr "Criar"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "Criar Novo Diretório"
@@ -3709,12 +4355,12 @@ msgid "Create New Domain"
msgstr "Criar novo domínio"
msgid "Create a GitLab account first, and then connect it to your %{label} account."
-msgstr ""
+msgstr "Crie uma conta do GitLab primeiro e em seguida conecte-a à sua conta %{label}."
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr "Crie um token de acesso pessoal na sua conta para dar pull ou push via %
msgid "Create an issue. Issues are created for each alert triggered."
msgstr "Crie um issue. Os Issues são criados para cada alerta acionado."
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "Criar a branch"
msgid "Create commit"
msgstr "Criar commit"
+msgid "Create confidential merge request"
+msgstr "Criar merge request confidencial"
+
+msgid "Create confidential merge request and branch"
+msgstr "Criar merge request e branch confidencial"
+
msgid "Create directory"
msgstr "Criar diretório"
@@ -3771,6 +4429,9 @@ msgstr "Abrir merge request e criar branch"
msgid "Create milestone"
msgstr "Criar marco"
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "Criar novo branch"
@@ -3789,6 +4450,9 @@ msgstr "Criar nova etiqueta"
msgid "Create new..."
msgstr "Criar novo..."
+msgid "Create project"
+msgstr "Criar projeto"
+
msgid "Create project label"
msgstr "Criar etiqueta de projeto"
@@ -3796,10 +4460,10 @@ msgid "Create your first page"
msgstr "Crie sua primeira página"
msgid "CreateGroup|You don’t have permission to create a subgroup in this group."
-msgstr ""
+msgstr "Você não tem permissão para criar um subgrupo neste grupo."
msgid "CreateGroup|You don’t have permission to create groups."
-msgstr ""
+msgstr "Você não tem permissão para criar grupos."
msgid "CreateTag|Tag"
msgstr "Tag"
@@ -3813,6 +4477,12 @@ msgstr "Feito"
msgid "Created At"
msgstr "Criado em"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "Criado por mim"
@@ -3834,18 +4504,30 @@ msgstr "Criado em"
msgid "Created on:"
msgstr "Criado em:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr "Criando epic"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr "A criação de gráficos usa os dados do servidor Prometheus. Se isso levar muito tempo, verifique se os dados estão disponíveis."
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Fuso horário do cron"
msgid "Cron syntax"
msgstr "Sintaxe do cron"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "Branch atual"
@@ -3882,6 +4564,45 @@ msgstr "Modelos de projetos personalizados"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr "Modelos de projeto personalizados não foram configurados para grupos dos quais você é membro. Eles são ativados na página de configurações de um grupo. Entre em contato com o proprietário ou mantenedor do seu grupo para configurar modelos de projeto personalizados."
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr "Adicionar um estágio"
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "Personalizar cores"
@@ -3891,18 +4612,51 @@ msgstr "Personalize como os endereços de e-mail e nomes de usuário do FogBugz
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "Personalize como os endereços de e-mail e nomes de usuário do Google Code são importados para o GitLab. Na próxima etapa, você poderá selecionar os projetos que deseja importar."
+msgid "Customize icon"
+msgstr "Customizar ícone"
+
msgid "Customize language and region related settings."
msgstr "Personalize as configurações relacionadas a idioma e região."
+msgid "Customize name"
+msgstr "Customizar nome"
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "Personalize a sua configuração, visualize o status da pipeline e relatório de cobertura."
msgid "Cycle Analytics"
msgstr "Análise de Ciclo"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "A Análise de Ciclo fornece uma visão geral de quanto tempo uma ideia demora para ir para produção em seu projeto."
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr "Issue criada"
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Código"
@@ -3924,6 +4678,31 @@ msgstr "Homologação"
msgid "CycleAnalyticsStage|Test"
msgstr "Teste"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr "DNS"
@@ -3948,8 +4727,8 @@ msgstr "%{firstProject} e %{secondProject}"
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr "%{firstProject}, %{rest} e %{secondProject}"
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
-msgstr "Não foi possível adicionar %{invalidProjects}. Esse dashboard está disponível para projetos públicos, e projetos privados em grupos com um plano Gold."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
+msgstr ""
msgid "Data is still calculating..."
msgstr "Os dados ainda estão a ser calculados..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr "Dias"
+
msgid "Debug"
msgstr "Depurar"
@@ -3990,12 +4772,21 @@ msgstr "Branch padrão"
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr "Etiqueta de classificação padrão"
msgid "Default description template for issues"
msgstr "Modelo de descrição padrão para issues"
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr "Primeiro dia da semana padrão"
@@ -4038,12 +4829,21 @@ msgstr "atrasado"
msgid "Delete"
msgstr "Excluir"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "Excluir pacote"
msgid "Delete Snippet"
msgstr "Excluir Snippet"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "Excluir comentário"
@@ -4080,6 +4880,9 @@ msgstr "Excluído"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr "Apelido de bate-papo excluído: %{chat_name}!"
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr "A exclusão da licença falhou."
@@ -4096,37 +4899,65 @@ msgid "Deny"
msgstr "Recusar"
msgid "Dependencies"
+msgstr "Dependências"
+
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
msgstr ""
+msgid "Dependencies|All"
+msgstr "Todas"
+
msgid "Dependencies|Component"
-msgstr ""
+msgstr "Componente"
msgid "Dependencies|Component name"
-msgstr ""
+msgstr "Nome do componente"
msgid "Dependencies|Export as JSON"
-msgstr ""
+msgstr "Exportar como JSON"
msgid "Dependencies|Job failed to generate the dependency list"
-msgstr ""
+msgstr "A tarefa falhou em gerar a lista de dependências"
+
+msgid "Dependencies|License"
+msgstr "Licença"
msgid "Dependencies|Location"
-msgstr ""
+msgstr "Localização"
msgid "Dependencies|Packager"
-msgstr ""
+msgstr "Empacotador"
+
+msgid "Dependencies|Safe"
+msgstr "Segura"
+
+msgid "Dependencies|Status"
+msgstr "Status"
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
-msgstr ""
+msgstr "A tarefa %{codeStartTag}dependency_scanning%{codeEndTag} falhou e não pode gerar a lista. Certifique-se de que a tarefa esteja funcionando corretamente e execute o pipeline novamente."
msgid "Dependencies|Unsupported file(s) detected"
-msgstr ""
+msgstr "Arquivo(s) não suportado(s) detectado(s)"
msgid "Dependencies|Version"
-msgstr ""
+msgstr "Versão"
+
+msgid "Dependencies|Vulnerable components"
+msgstr "Componentes vulneráveis"
msgid "Dependency List"
-msgstr ""
+msgstr "Lista de dependências"
msgid "Dependency Proxy"
msgstr "Proxy de Dependências"
@@ -4138,10 +4969,20 @@ msgid "Dependency proxy URL"
msgstr "URL de proxy de dependências"
msgid "Dependency proxy feature is limited to public groups for now."
-msgstr ""
+msgstr "A funcionalidade de proxy de dependências está limitada a grupos públicos por hora."
msgid "DependencyProxy|Toggle Dependency Proxy"
-msgstr ""
+msgstr "Alternar proxy de dependências"
+
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
msgid "Deploy"
msgid_plural "Deploys"
@@ -4154,6 +4995,15 @@ msgstr "Chaves para deploy"
msgid "Deploy key was successfully updated."
msgstr "A chave de deploy foi atualizada com sucesso."
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} outros"
@@ -4226,6 +5076,9 @@ msgstr "Criar token de deploy"
msgid "DeployTokens|Created"
msgstr "Criado"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "Tokens de deploy"
@@ -4260,7 +5113,7 @@ msgid "DeployTokens|Use this token as a password. Make sure you save it - you wo
msgstr "Use este token como uma senha. Certifique-se de salvá-lo, pois, não será possível acessá-lo novamente."
msgid "DeployTokens|Use this username as a login."
-msgstr "Utilize este nome de usuário como um login."
+msgstr "Use este nome de usuário como um login."
msgid "DeployTokens|Username"
msgstr "Nome de Usuário"
@@ -4277,6 +5130,9 @@ msgstr "Seu novo token de deploy de projeto foi criado."
msgid "Deployed"
msgstr "Feito Deploy"
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr "Deploy para"
@@ -4301,9 +5157,30 @@ msgstr "Os modelos de descrição permitem que você defina modelos específicos
msgid "Description:"
msgstr "Descrição:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr "Desmarcar todos"
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr "%{current_design} de %{designs_count}"
+msgid "DesignManagement|Add designs"
+msgstr "Adicionar designs"
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr "Adicionar um design com o mesmo nome de arquivo substitui o arquivo por uma nova versão."
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr "Ocorreu um erro ao carregar os designs. Por favor, tente novamente."
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr "Não foi possível adicionar um novo comentário. Por favor, tente novamente"
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr "Não foi possível criar uma nova discussão. Por favor, tente novamente."
+
msgid "DesignManagement|Could not find design, please try again."
msgstr "Não foi possível encontrar o design. Por favor, tente novamente."
@@ -4319,6 +5196,12 @@ msgstr "Ir para o próximo design"
msgid "DesignManagement|Go to previous design"
msgstr "Ir para o design anterior"
+msgid "DesignManagement|Requested design version does not exist"
+msgstr "A versão de design solicitada não existe"
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr "A versão de design solicitada não existe. Mostrando a versão mais recente como alternativa"
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr "Envie e veja os designs mais recentes para este issue. Consistente e fácil de encontrar, de forma que todos estejam atualizados."
-msgid "DesignManagement|Upload designs"
-msgstr "Enviar designs"
-
msgid "Designs"
msgstr "Designs"
@@ -4352,9 +5232,15 @@ msgstr "Diferenciar limite de conteúdo"
msgid "Diff limits"
msgstr "Diferenciar limites"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr "(base)"
+
msgid "Diffs|No file name available"
msgstr "Nenhum nome de arquivo disponível"
+msgid "Diffs|Show all lines"
+msgstr "Mostrar todas as linhas"
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "Algo errado aconteceu ao buscar linhas de comparação."
@@ -4367,6 +5253,9 @@ msgstr "Nome do diretório"
msgid "Disable"
msgstr "Desabilitar"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "Desativar para este projeto"
@@ -4424,6 +5313,12 @@ msgstr "Discuta uma sugestão ou pergunta específica"
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr "Discuta uma sugestão ou pergunta específica que precisa ser resolvida"
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr "Discussão"
@@ -4443,16 +5338,19 @@ msgid "Dismiss trial promotion"
msgstr "Ignorar promoção de avaliação"
msgid "Dismissed"
-msgstr ""
+msgstr "Descartado"
msgid "Dismissed at %{projectLink}"
-msgstr ""
+msgstr "Descartado em %{projectLink}"
msgid "Dismissed on pipeline %{pipelineLink}"
-msgstr ""
+msgstr "Descartado no pipeline %{pipelineLink}"
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
-msgstr ""
+msgstr "Descartado no pipeline %{pipelineLink} em %{projectLink}"
+
+msgid "Display name"
+msgstr "Nome de exibição"
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "Deseja personalizar como os endereços de e-mail e nomes de usuário do Google Code são importados para o GitLab?"
@@ -4463,14 +5361,17 @@ msgstr "Dockerfile"
msgid "Documentation for popular identity providers"
msgstr "Documentação para provedores de identidade populares"
+msgid "Doing"
+msgstr "Fazendo"
+
msgid "Domain"
msgstr "Domínio"
msgid "Domain verification is an essential security measure for public GitLab sites. Users are required to demonstrate they control a domain before it is enabled"
-msgstr ""
+msgstr "A verificação de domínio é uma medida de segurança essencial para sites públicos do GitLab. Os usuários precisam demonstrar que controlam um domínio antes de ser ativado"
msgid "Don't paste the private part of the GPG key. Paste the public part which begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
-msgstr ""
+msgstr "Não cole a parte privada da chave GPG. Cole a parte pública que começa com '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
msgid "Don't show again"
msgstr "Não exibir novamente"
@@ -4484,9 +5385,15 @@ msgstr "Pronto"
msgid "Download"
msgstr "Baixar"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr "Baixar artefatos"
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr "Baixar recurso"
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr "Baixar exportação"
+msgid "Download image"
+msgstr "Baixar imagem"
+
msgid "Download license"
msgstr "Baixar licença"
@@ -4532,9 +5442,15 @@ msgstr "Cada runner pode estar em um dos seguintes estados:"
msgid "Edit"
msgstr "Alterar"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr "Editar %{name}"
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr "Editar chave de deploy"
@@ -4556,12 +5472,21 @@ msgstr "Editar Snippet"
msgid "Edit application"
msgstr "Editar aplicativo"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr "Editar comentário"
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr "Editar ambiente"
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr "Editar arquivo"
@@ -4580,6 +5505,18 @@ msgstr "Editar issues"
msgid "Edit public deploy key"
msgstr "Editar chave de deploy pública"
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4604,6 +5541,9 @@ msgstr "E-mail"
msgid "Email address"
msgstr "Endereço de e-mail"
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr "O domínio de e-mail não é editável em subgrupos. O valor é herdado do grupo pai de nível superior."
+
msgid "Email patch"
msgstr "Patch de email"
@@ -4665,7 +5605,7 @@ msgid "EmailsOnPushService|Send from committer"
msgstr ""
msgid "EmailsOnPushService|Send notifications from the committer's email address if the domain is part of the domain GitLab is running on (e.g. %{domains})."
-msgstr ""
+msgstr "Envia notificações do endereço de email do committer se o domínio fizer parte do domínio em que o GitLab está sendo executado (por exemplo, %{domains})."
msgid "Embed"
msgstr "Embutido"
@@ -4688,10 +5628,13 @@ msgstr "Ativar coleção de dados Pseudonymizer"
msgid "Enable SAML authentication for this group"
msgstr "Ativar autenticação SAML para esse grupo"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "Ativar Sentry para report de erro e log."
+msgid "Enable access to Grafana"
+msgstr "Habilitar acesso ao Grafana"
msgid "Enable access to the Performance Bar for a given group."
+msgstr "Ativa o acesso à barra de desempenho para um determinado grupo."
+
+msgid "Enable and configure Grafana."
msgstr ""
msgid "Enable and configure InfluxDB metrics."
@@ -4706,6 +5649,9 @@ msgstr "Ativar controle de classificação usando um serviço externo"
msgid "Enable error tracking"
msgstr "Ativar rastreamento de erros"
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "Ativar para este projeto"
@@ -4724,12 +5670,18 @@ msgstr "Ative ou desative a coleção de dados Pseudonymizer"
msgid "Enable or disable version check and usage ping."
msgstr "Ativar ou desativar checagem de versão e uso de ping."
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "Ativar reCAPTCHA ou Akismet e definir seus limites de IP."
+msgid "Enable proxy"
+msgstr "Habilitar proxy"
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr "Ativar Runners partilhados"
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr "Ativar autenticação de dois fatores"
@@ -4763,18 +5715,36 @@ msgstr "Termina em (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
-msgid "Enter IP address range"
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
msgstr ""
+msgid "Enter IP address range"
+msgstr "Insira o intervalo de endereços IP"
+
+msgid "Enter a number"
+msgstr "Digite um número"
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr "Insira o domínio"
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "Digite o seu URL do servidor do Bitbucket e o token de acesso pessoal abaixo"
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "Digite a descrição da issue"
@@ -4787,11 +5757,20 @@ msgstr "Digite a descrição do merge request"
msgid "Enter the merge request title"
msgstr "Digite o título do merge request"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr "Ambiente"
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
-msgstr ""
+msgstr "As variáveis de ambiente são aplicadas aos ambientes por meio do runner. Elas podem ser protegidas apenas expondo-as a branches ou tags protegidas. Além disso, elas podem ser mascaradas de forma a estarem ocultas nos registros de tarefas, embora precisem corresponder a certos requisitos de expressão regular para fazer isso. Você pode usar variáveis de ambiente para senhas, chaves secretas ou o que você quiser."
msgid "Environment variables are configured by your administrator to be %{link_start}protected%{link_end} by default"
msgstr "As variáveis de ambiente são configuradas pelo seu administrador para serem %{link_start}protegidas%{link_end} por padrão"
@@ -4958,32 +5937,38 @@ msgstr "Epic"
msgid "Epics"
msgstr "Epics"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr "Épicos (apenas licenças Ultimate / Gold)"
+
msgid "Epics Roadmap"
msgstr "Roadmap de epics"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Epics permitem gerenciar seu portfólio de projetos de forma mais eficiente e com menos esforço"
msgid "Epics|%{epicsCount} epics and %{issuesCount} issues"
-msgstr ""
+msgstr "%{epicsCount} épicos e %{issuesCount} issues"
msgid "Epics|Add an epic"
-msgstr ""
+msgstr "Adicionar um épico"
msgid "Epics|Add an existing epic as a child epic."
-msgstr ""
+msgstr "Adicionar um épico existente como um épico filho."
msgid "Epics|An error occurred while saving the %{epicDateType} date"
-msgstr ""
+msgstr "Ocorreu um erro ao salvar a data de %{epicDateType}"
msgid "Epics|Are you sure you want to remove %{bStart}%{targetIssueTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}?"
-msgstr ""
+msgstr "Você tem certeza de que quer remover %{bStart}%{targetIssueTitle}%{bEnd} de %{bStart}%{parentEpicTitle}%{bEnd}?"
msgid "Epics|Create an epic within this group and add it as a child epic."
-msgstr ""
+msgstr "Crie um épico dentro deste grupo e adicione-o como um épico filho."
msgid "Epics|Create new epic"
-msgstr ""
+msgstr "Criar novo épico"
msgid "Epics|How can I solve this?"
msgstr "Como posso resolver isso?"
@@ -4992,15 +5977,30 @@ msgid "Epics|More information"
msgstr "Mais informações"
msgid "Epics|Remove epic"
-msgstr ""
+msgstr "Remover épico"
msgid "Epics|Remove issue"
+msgstr "Remover issue"
+
+msgid "Epics|Show more"
+msgstr "Mostrar mais"
+
+msgid "Epics|Something went wrong while assigning issue to epic."
msgstr ""
msgid "Epics|Something went wrong while creating child epics."
-msgstr ""
+msgstr "Algo deu errado ao criar épicos filhos."
msgid "Epics|Something went wrong while fetching child epics."
+msgstr "Algo deu errado ao buscar épicos filhos."
+
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
msgstr ""
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
@@ -5021,9 +6021,6 @@ msgstr "Iniciar"
msgid "Error"
msgstr "Erro"
-msgid "Error Reporting and Logging"
-msgstr "Relatório e registro de erros"
-
msgid "Error Tracking"
msgstr "Rastreamento de erros"
@@ -5039,6 +6036,12 @@ msgstr "Erro ao excluir %{issuableType}"
msgid "Error fetching contributors data."
msgstr "Erro ao recuperar informações de contribuintes."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "Erro ao carregar etiquetas."
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "Erro ao alterar configuração de notificação de assinatura"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr "Ocorreu um erro. O usuário não foi bloqueado"
@@ -5117,14 +6126,17 @@ msgstr "Erro ao renderizar a pré-visualização do markdown"
msgid "Error saving label update."
msgstr "Erro ao salvar alteração de etiqueta."
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr "Erro ao atualizar %{issuableType}"
-msgid "Error updating status for all todos."
-msgstr "Erro ao atualizar status para todas as tarefas."
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "Erro ao atualizar status das tarefas."
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr "Erro ao enviar o arquivo"
@@ -5181,22 +6193,22 @@ msgid "Estimated"
msgstr "Estimativa"
msgid "EventFilterBy|Filter by all"
-msgstr "EventFilterBy|Filtrar por tudo"
+msgstr "Filtrar por tudo"
msgid "EventFilterBy|Filter by comments"
-msgstr "EventFilterBy|Filtrar por comentários"
+msgstr "Filtrar por comentários"
msgid "EventFilterBy|Filter by issue events"
-msgstr "EventFilterBy|Filtrar por eventos de issue"
+msgstr "Filtrar por eventos de issue"
msgid "EventFilterBy|Filter by merge events"
-msgstr "EventFilterBy|Filtrar por eventos de merge"
+msgstr "Filtrar por eventos de merge"
msgid "EventFilterBy|Filter by push events"
-msgstr "EventFilterBy|Filtrar por eventos de push"
+msgstr "Filtrar por eventos de push"
msgid "EventFilterBy|Filter by team"
-msgstr "EventFilterBy|Filtrar por equipe"
+msgstr "Filtrar por equipe"
msgid "Events"
msgstr "Eventos"
@@ -5216,9 +6228,15 @@ msgstr "Toda semana (domingos às 4:00)"
msgid "Everyone"
msgstr "Todos"
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr "Todos podem contribuir"
+msgid "Everything on your to-do list is marked as done."
+msgstr "Tudo na sua lista de afazeres está marcado como concluído."
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr "Tudo o que você precisa para criar um site do GitLab Pages usando o GitBook."
@@ -5235,11 +6253,14 @@ msgid "Everything you need to create a GitLab Pages site using plain HTML."
msgstr "Tudo o que você precisa para criar um site do GitLab Pages usando HTML simples."
msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple queries combined into a formula."
-msgstr ""
+msgstr "Exemplo: Uso = consulta única. (Solicitada) / (Capacidade) = múltiplas consultas combinadas em uma fórmula."
msgid "Except policy:"
msgstr "Exceto da política:"
+msgid "Existing"
+msgstr "Existente"
+
msgid "Existing members and groups"
msgstr "Membros e grupos existentes"
@@ -5252,9 +6273,18 @@ msgstr "Expandir tudo"
msgid "Expand approvers"
msgstr "Expandir aprovadores"
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "Expandir barra lateral"
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr "Data de validade"
@@ -5264,6 +6294,12 @@ msgstr "Expirado"
msgid "Expired %{expiredOn}"
msgstr "Expirou %{expiredOn}"
+msgid "Expires"
+msgstr "Expira"
+
+msgid "Expires at"
+msgstr "Expira em"
+
msgid "Expires in %{expires_at}"
msgstr "Expira em %{expires_at}"
@@ -5318,6 +6354,12 @@ msgstr "Autorização externa negou acesso a este projeto"
msgid "External authorization request timeout"
msgstr "A requisição de autorização externa esgotou o tempo limite"
+msgid "External storage URL"
+msgstr "URL do armazenamento externo"
+
+msgid "External storage authentication token"
+msgstr "Token de autenticação do armazenamento externo"
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "Etiqueta de classificação"
@@ -5343,7 +6385,7 @@ msgid "ExternalWikiService|Replaces the link to the internal wiki with a link to
msgstr "Substitui o link para o wiki interno por um link para um wiki externo."
msgid "ExternalWikiService|The URL of the external Wiki"
-msgstr ""
+msgstr "O URL do Wiki externo"
msgid "Facebook"
msgstr "Facebook"
@@ -5357,6 +6399,15 @@ msgstr "Tarefas com falha"
msgid "Failed create wiki"
msgstr "Falha ao criar wiki"
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr "Falha ao aplicar comandos."
+
+msgid "Failed to assign a user because no user was found."
+msgstr "Falha ao associar um usuário porque nenhum usuário foi encontrado."
+
msgid "Failed to change the owner"
msgstr "Erro ao alterar o proprietário"
@@ -5378,6 +6429,9 @@ msgstr "Falha ao criar repositório via gitlab-shell"
msgid "Failed to create resources"
msgstr "Falha ao criar recursos"
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr "Falha ao fazer deploy para"
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr "Falha ao carregar branches relacionados"
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr "Falha ao promover etiqueta devido a erro interno. Por favor, contate os administradores."
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "Falha ao remover issue do painel, por favor, tente novamente."
@@ -5441,6 +6510,9 @@ msgstr "Falha ao salvar preferências (%{error_message})."
msgid "Failed to save preferences."
msgstr "Falha ao salvar preferências."
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr "Falha ao entrar usando a autenticação de cartão inteligente"
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr "Falha"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr "URL da API"
msgid "FeatureFlags|Active"
msgstr "Ativo"
+msgid "FeatureFlags|Add"
+msgstr "Adicionar"
+
+msgid "FeatureFlags|All users"
+msgstr "Todos os usuários"
+
+msgid "FeatureFlags|Clear all"
+msgstr "Limpar tudo"
+
msgid "FeatureFlags|Configure"
msgstr "Configurar"
@@ -5519,6 +6603,9 @@ msgstr "Descrição"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "Editar feature flag"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr "Especificação do Ambiente"
@@ -5528,20 +6615,20 @@ msgstr "Especificações do Ambiente"
msgid "FeatureFlags|Feature Flag"
msgstr "Feature flag"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
-msgstr ""
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgstr "O comportamento de Feature flag é feito ao criar uma série de regras para definir o status de ambientes alvo. Um regra padrão de curinga %{codeStart}*%{codeEnd} para %{boldStart}Todos os Ambientes%{boldEnd} e você poderá adicionar quantas regras você precisar, escolhendo as especificações de ambiente abaixo. Você pode alternar o comportamento para cada uma de suas regras para configurá-los como %{boldStart}Ativo%{boldEnd} ou %{boldStart}Inativo%{boldEnd}."
msgid "FeatureFlags|Feature Flags"
msgstr "Feature flags"
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
-msgstr "Feature flags permitem que você configure o seu código em diferentes versões alterando dinamicamente determinadas funcionalidades."
-
msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr "A feature flag %{name} será removido. Você tem certeza?"
-msgid "FeatureFlags|Get started with Feature Flags"
-msgstr "Comece a usar as feature flags"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgstr "Feature flags permitem que você configure o seu código em diferentes versões alterando dinamicamente determinada funcionalidade."
+
+msgid "FeatureFlags|Get started with feature flags"
+msgstr "Começar a usar feature flags"
msgid "FeatureFlags|Inactive"
msgstr "Inativo"
@@ -5550,15 +6637,15 @@ msgid "FeatureFlags|Inactive flag for %{scope}"
msgstr "Sinalizador inativo para %{scope}"
msgid "FeatureFlags|Install a %{docs_link_anchored_start}compatible client library%{docs_link_anchored_end} and specify the API URL, application name, and instance ID during the configuration setup. %{docs_link_start}More Information%{docs_link_end}"
-msgstr ""
+msgstr "Instale uma %{docs_link_anchored_start}biblioteca de cliente compatível%{docs_link_anchored_end} e especifique o URL da API, o nome do aplicativo e o ID da instância durante a configuração. %{docs_link_start}Mais informações%{docs_link_end}"
msgid "FeatureFlags|Instance ID"
msgstr "ID da instância"
-msgid "FeatureFlags|Loading Feature Flags"
-msgstr "Carregando feature flag"
+msgid "FeatureFlags|Loading feature flags"
+msgstr "Carregando feature flags"
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr "Mais informações"
msgid "FeatureFlags|Name"
@@ -5570,20 +6657,44 @@ msgstr "Novo"
msgid "FeatureFlags|New Feature Flag"
msgstr "Nova feature flag"
+msgid "FeatureFlags|New feature flag"
+msgstr "Nova feature flag"
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr "Porcentagem de rollout (usuários logados)"
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr "A porcentagem de rollout deve ser um número inteiro entre 0 e 100"
+
msgid "FeatureFlags|Protected"
msgstr "Protegido"
+msgid "FeatureFlags|Remove"
+msgstr "Remover"
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr "Porcentagem de rollout"
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr "Estratégia de Rollout"
+
msgid "FeatureFlags|Status"
msgstr "Status"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr "Ambientes alvo"
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr "Não há feature flags ativas"
-msgid "FeatureFlags|There are no inactive Feature Flags"
-msgstr "Não há feature flag inativas"
+msgid "FeatureFlags|There are no inactive feature flags"
+msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
msgstr "Ocorreu um erro ao buscar as feature flag."
@@ -5591,6 +6702,9 @@ msgstr "Ocorreu um erro ao buscar as feature flag."
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr "Tente novamente daqui a pouco ou entre em contato com a sua equipe de suporte."
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "Fev"
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "Campos nessa página não são mais editáveis, você pode configurar"
-
msgid "File"
msgid_plural "Files"
msgstr[0] "Arquivo"
@@ -5674,6 +6785,9 @@ msgstr "Filtrar resultados por grupo"
msgid "Filter results by project"
msgstr "Filtrar resultados por projeto"
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "Filtro..."
@@ -5716,6 +6830,9 @@ msgstr "Finalizado"
msgid "First day of the week"
msgstr "Primeiro dia da semana"
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr "Data fixa"
@@ -5779,6 +6896,9 @@ msgstr "Para projetos privados, qualquer membro (guest ou superior) pode visuali
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr "Para projetos públicos, qualquer pessoa pode visualizar pipelines e acessar detalhes das tarefas (logs de saída e artefatos)"
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr "Fork"
@@ -5815,12 +6935,18 @@ msgstr "Erros encontrados em seu %{gitlab_ci_yml}:"
msgid "Found errors in your .gitlab-ci.yml:"
msgstr "Erros encontrados em seu .gitlab-ci.yml:"
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "Avaliação gratuita do GitLab.com Gold"
msgid "Friday"
msgstr "Sexta-feira"
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr "Do %{providerTitle}"
@@ -5881,6 +7007,9 @@ msgstr "Gerar etiquetas padrão"
msgid "Generate key"
msgstr "Gerar chave"
+msgid "Generate link to chart"
+msgstr "Gerar link para o gráfico"
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr "Nós do Geo"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Geo permite que você replique sua instância do GitLab para outras localizações geográficas."
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "Nó está falho ou quebrado."
@@ -5956,6 +7088,9 @@ msgstr "Objetos LFS locais"
msgid "GeoNodes|Local attachments"
msgstr "Anexos locais"
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr "Artefatos de tarefa locais"
@@ -6064,33 +7199,42 @@ msgstr "Você tem nós Geo configurados usando uma conexão HTTP insegura. Recom
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} está agendado para forçar download novamente"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} está agendado para verificar novamente"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} está agendado para re-sincronização"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
msgid "Geo|All"
msgstr "Todos"
msgid "Geo|All projects"
msgstr "Todos os projetos"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "Todos os projetos estão sendo agendados para nova verificação"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "Todos os projetos estão sendo agendados para re-sincronização"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "Operações em lote"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr "Escolha quais grupos você deseja sincronizar nesse nó secundário."
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr "Controle a concorrência máxima de preenchimento de anexo/LFS para esse nó secundário"
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6101,7 +7245,7 @@ msgid "Geo|Could not remove tracking entry for an existing project."
msgstr "Não foi possível remover o registro de rastreamento de um projeto existente."
msgid "Geo|Could not remove tracking entry for an existing upload."
-msgstr ""
+msgstr "Não foi possível remover a entrada de rastreamento para um envio existente."
msgid "Geo|Failed"
msgstr "Falha"
@@ -6115,14 +7259,17 @@ msgstr "Geo Status"
msgid "Geo|Groups to synchronize"
msgstr "Grupos para sincronizar"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "Em sincronia"
-msgid "Geo|Internal URL"
-msgstr "URL interna"
+msgid "Geo|Internal URL (optional)"
+msgstr "URL interna (opcional)"
msgid "Geo|Last repository check run"
-msgstr ""
+msgstr "Última verificação de repositório executada"
msgid "Geo|Last successful sync"
msgstr "Última sincronização com êxito"
@@ -6169,12 +7316,6 @@ msgstr "Projetos em certos pedaços de armazenamento"
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr "Verificar novamente"
-
-msgid "Geo|Recheck all projects"
-msgstr "Verificar novamente todos os projetos"
-
msgid "Geo|Redownload"
msgstr "Baixar novamente"
@@ -6193,6 +7334,12 @@ msgstr "Sincronizar novamente todos os projetos"
msgid "Geo|Retry count"
msgstr "Contagem de retentativas"
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr "Selecione grupos para replicar."
@@ -6217,7 +7364,7 @@ msgstr "Sincronizado em"
msgid "Geo|Synchronization failed - %{error}"
msgstr "Falha na sincronização - %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr "Obter gratuitamente uma instância de revisão"
msgid "Get started with error tracking"
msgstr "Comece com o rastreamento de erros"
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr "Introdução às versões"
@@ -6311,7 +7461,7 @@ msgid "GitLab CI Linter has been moved"
msgstr "Linter do GitLab CI foi movido"
msgid "GitLab Enterprise Edition %{plan}"
-msgstr ""
+msgstr "GitLab Enterprise Edition %{plan}"
msgid "GitLab Geo"
msgstr "GitLab Geo"
@@ -6323,13 +7473,22 @@ msgid "GitLab Import"
msgstr "Importação do GitLab"
msgid "GitLab Shared Runners execute code of different projects on the same Runner unless you configure GitLab Runner Autoscale with MaxBuilds 1 (which it is on GitLab.com)."
-msgstr ""
+msgstr "GitLab Shared Runners executam códigos de projetos diferentes no mesmo Runner, a menos que você configure o GitLab Runner Autoscale com o MaxBuilds 1 (que está no GitLab.com)."
msgid "GitLab User"
msgstr "Usuário GitLab"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
-msgstr ""
+msgstr "GitLab permite que você continue usando a sua licença mesmo se exceder o número de lugares que você comprou. Você será obrigado a pagar por esses lugares no momento da renovação de sua licença."
+
+msgid "GitLab for Slack"
+msgstr "GitLab para Slack"
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr "O GitLab está obtendo um certificado SSL Let's Encrypt para este domínio. Este processo pode levar algum tempo. Por favor, tente novamente mais tarde."
+
+msgid "GitLab member or Email address"
+msgstr "Membro do GitLab ou endereço de e-mail"
msgid "GitLab metadata URL"
msgstr "URL de metadados do GitLab"
@@ -6349,9 +7508,6 @@ msgstr "O GitLab executará um trabalho em segundo plano que produzirá CSVs com
msgid "GitLab.com import"
msgstr "Importação do GitLab.com"
-msgid "GitLab’s issue tracker"
-msgstr "Rastreador de issues do GitLab"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6367,11 +7523,20 @@ msgstr "URL do host do Gitea"
msgid "Gitea Import"
msgstr "Importação do Gitea"
+msgid "Gitlab CI/CD"
+msgstr "GitLab CI/CD"
+
+msgid "Gitlab Pages"
+msgstr "GitLab Pages"
+
msgid "Given access %{time_ago}"
msgstr "Acesso concedido %{time_ago}"
+msgid "Global Shortcuts"
+msgstr "Atalhos Globais"
+
msgid "Global notification settings"
-msgstr ""
+msgstr "Configurações de notificação global"
msgid "Go Back"
msgstr "Voltar"
@@ -6382,6 +7547,12 @@ msgstr "Go Micro é um framework para desenvolvimento de microsserviços."
msgid "Go back"
msgstr "Voltar"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr "Volte para %{startTag}Issues abertos%{endTag} e selecione alguns issues para adicionar ao seu painel."
+
msgid "Go full screen"
msgstr "Tela cheia"
@@ -6391,17 +7562,101 @@ msgstr "Ir para"
msgid "Go to %{link_to_google_takeout}."
msgstr "Ir para %{link_to_google_takeout}."
+msgid "Go to commits"
+msgstr "Ir para commits"
+
+msgid "Go to environments"
+msgstr "Ir para ambientes"
+
+msgid "Go to file"
+msgstr "Ir para arquivo"
+
+msgid "Go to file (MRs only)"
+msgstr "Ir para arquivo (apenas MRs)"
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr "Ir para arquivos"
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr "Ir para issues"
+
+msgid "Go to jobs"
+msgstr "Ir para tarefas"
+
+msgid "Go to kubernetes"
+msgstr "Ir para kubernetes"
+
+msgid "Go to merge requests"
+msgstr "Ir para merge requests"
+
+msgid "Go to metrics"
+msgstr "Ir para métricas"
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr "Ir para o projeto"
+msgid "Go to releases"
+msgstr "Ir para versões"
+
+msgid "Go to repository charts"
+msgstr "Ir para os gráficos do repositório"
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr "Ir para snippets"
+
+msgid "Go to the activity feed"
+msgstr "Ir para o feed de atividades"
+
+msgid "Go to the milestone list"
+msgstr "Ir para lista de marcos"
+
+msgid "Go to the project's activity feed"
+msgstr "Ir para o feed de atividades do projeto"
+
+msgid "Go to the project's overview page"
+msgstr "Ir para a página de visão geral do projeto"
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr "Ir para seu fork"
+msgid "Go to your groups"
+msgstr "Ir para seus grupos"
+
+msgid "Go to your issues"
+msgstr "Ir para seus issues"
+
+msgid "Go to your merge requests"
+msgstr "Ir para seus merge requests"
+
+msgid "Go to your projects"
+msgstr "Ir para seus projetos"
+
+msgid "Go to your snippets"
+msgstr "Ir para seus snippets"
+
msgid "Golden Tanuki"
-msgstr ""
+msgstr "Tanuki Dourado"
msgid "Google Code import"
msgstr "Importação do Google Code"
@@ -6409,8 +7664,8 @@ msgstr "Importação do Google Code"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "Autenticação do Google não está %{link_to_documentation}. Peça ao administrador do Gitlab se você deseja usar esse serviço."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr "Entendi"
@@ -6418,12 +7673,18 @@ msgstr "Entendi"
msgid "Got it!"
msgstr "Entendi!"
+msgid "Grafana URL"
+msgstr "URL do Grafana"
+
msgid "Grant access"
msgstr "Conceder acesso"
msgid "Graph"
msgstr "Gráfico"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr "Gravatar habilitado"
@@ -6487,15 +7748,15 @@ msgstr "Os minutos do pipeline do grupo foram redefinidos com sucesso."
msgid "Group was successfully updated."
msgstr "O grupo foi atualizado com sucesso."
-msgid "Group:"
-msgstr "Grupo:"
-
msgid "Group: %{group_name}"
msgstr "Grupo: %{group_name}"
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "A partir de %{dateWord}"
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr "Personalize os selos do seu grupo."
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "Saiba mais sobre os selos."
@@ -6640,6 +7907,9 @@ msgstr "Essa configuração foi aplicada no grupo %{ancestor_group}. Você pode
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "Essa configuração será aplicada à todos os subgrupos a menos que sejam sobrescritas pelo dono do grupo. Grupos que já tem acesso ao projeto continuarão a acessá-los até que sejam removidos manualmente."
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "não pode ser desativado quando a configuração \"Travar compartilhamento de grupo\" está ativada, a não ser pelo dono do grupo pai"
@@ -6763,6 +8033,12 @@ msgstr "Página de ajuda"
msgid "Help page text and support page url."
msgstr "Texto da página de ajuda e Url da página de suporte."
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr "Ocultar projetos arquivados"
@@ -6784,6 +8060,9 @@ msgstr "Ocultar carga"
msgid "Hide shared projects"
msgstr "Ocultar projetos compartilhados"
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Ocultar valor"
@@ -6792,6 +8071,9 @@ msgstr[1] "Ocultar valores"
msgid "Hide values"
msgstr "Ocultar valores"
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr "O Hook foi criado com sucesso."
msgid "Hook was successfully updated."
msgstr "O Hook foi atualizado com sucesso."
+msgid "Hours"
+msgstr "Horas"
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr "Manutenção iniciada com sucesso"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr "Como funciona"
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr "No entanto, você já é um membro deste %{member_source}. Faça login usando uma conta diferente para aceitar o convite."
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "Eu aceito o %{terms_link}"
@@ -6840,9 +8131,15 @@ msgstr "Esqueci minha senha"
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr "Eu li e concordo com os %{link_start}Termos de Serviço%{link_end} do Let's Encrypt"
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr "ID:"
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "Permitir visualizações ao vivo de projetos JavaScript no Web IDE usando a avaliação do lado do cliente CodeSandbox."
@@ -6879,6 +8176,9 @@ msgstr "Atualizar visualização"
msgid "IDE|Review"
msgstr "Revisar"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "Endereço IP"
@@ -6942,6 +8242,12 @@ msgstr "Onion skin"
msgid "ImageDiffViewer|Swipe"
msgstr "Deslizar"
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,8 +8353,8 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
-msgstr "Falha ao atualizar os projetos importados"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr ""
msgid "Improve Issue boards"
msgstr ""
@@ -7093,31 +8399,34 @@ msgid "Includes LFS objects. It can be overridden per group, or per project. 0 f
msgstr "Inclui objetos LFS. Pode ser substituído individualmente por grupo ou por projeto. 0 para ilimitado."
msgid "Includes an MVC structure to help you get started."
-msgstr ""
+msgstr "Inclui uma estrutura MVC para ajudar você a começar."
msgid "Includes an MVC structure, Gemfile, Rakefile, along with many others, to help you get started."
-msgstr ""
+msgstr "Inclui uma estrutura MVC, um Gemfile, um Rakefile e muito mais para ajudar você a começar."
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
+msgstr "Inclui uma estrutura MVC, mvnw e um pom.xml para ajudar você a começar."
+
+msgid "Incoming email"
msgstr ""
msgid "Incompatible Project"
msgstr "Projeto Incompatível"
msgid "Incompatible options set!"
-msgstr ""
+msgstr "Opções incompatíveis definidas!"
-msgid "Indexing"
-msgstr "Indexando"
+msgid "Index all projects"
+msgstr "Indexar todos os projetos"
msgid "Indicates whether this runner can pick jobs without tags"
msgstr "Indica se este runner pode escolher tarefas sem tags"
msgid "Inform users without uploaded SSH keys that they can't push over SSH until one is added"
-msgstr ""
+msgstr "Informar aos usuários sem chaves SSH configuradas que eles não podem realizar pushes por SSH até que uma seja adicionada"
msgid "Information about additional Pages templates and how to install them can be found in our %{pages_getting_started_guide}."
-msgstr ""
+msgstr "Informações sobre modelos adicionais de Páginas e como instalá-los podem ser encontradas em nosso %{pages_getting_started_guide}."
msgid "Inline"
msgstr "Em linha"
@@ -7141,7 +8450,7 @@ msgid "Insights"
msgstr "Insights"
msgid "Install"
-msgstr ""
+msgstr "Instalar"
msgid "Install GitLab Runner"
msgstr "Instalar o GitLab Runner"
@@ -7150,13 +8459,16 @@ msgid "Install Runner on Kubernetes"
msgstr "Instalar Runner no Kubernates"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
-msgstr ""
+msgstr "Instale um autenticador por token de software como %{free_otp_link} ou o Google Authenticator do seu repositório de aplicativos e escaneie este código QR. Mais informações estão disponíveis na %{help_link_start}documentação%{help_link_end}."
+
+msgid "Install on clusters"
+msgstr "Instalar em clusters"
msgid "Installed"
-msgstr ""
+msgstr "Instalado"
msgid "Installing"
-msgstr ""
+msgstr "Instalando"
msgid "Instance"
msgid_plural "Instances"
@@ -7169,11 +8481,14 @@ msgstr "Estatísticas de Instância"
msgid "Instance Statistics visibility"
msgstr "Visibilidade de Estatísticas de Instância"
+msgid "Instance administrators group already exists"
+msgstr "O grupo de administradores da instância já existe"
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "A instância não suporta múltiplos clusters Kubernetes"
msgid "Instance license"
-msgstr ""
+msgstr "Licença da instância"
msgid "Integrations"
msgstr "Integrações"
@@ -7211,11 +8526,14 @@ msgstr "Arquivo de configuração de Insights inválido detectado"
msgid "Invalid Login or password"
msgstr "Login ou senha inválidos"
+msgid "Invalid URL"
+msgstr "URL inválida"
+
msgid "Invalid date"
-msgstr ""
+msgstr "Data inválida"
msgid "Invalid feature"
-msgstr ""
+msgstr "Funcionalidade inválida"
msgid "Invalid field"
msgstr "Campo inválido"
@@ -7259,17 +8577,23 @@ msgstr "Convidar grupo"
msgid "Invite member"
msgstr "Convidar membro"
-msgid "Invoke Count"
+msgid "Invocations"
+msgstr ""
+
+msgid "Is using license seat:"
msgstr ""
-msgid "Invoke Time"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
-msgstr "Fechado (%{moved_link_start}movido%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
+msgstr ""
msgid "Issue"
msgstr "Issue"
@@ -7313,9 +8637,27 @@ msgstr "Alguns de seus painéis estão ocultos, ative uma licença para vê-los
msgid "IssueBoards|Switch board"
msgstr "Alternar painel"
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "Issues"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "Issues podem ser bugs, tarefas ou ideias a serem discutidas. Além disso, issues são pesquisáveis e filtráveis."
@@ -7331,8 +8673,11 @@ msgstr "Issues, merge requests, pushes e comentários."
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr "Depois que você começa a criar issues para seus projetos, podemos começar a acompanhar e exibir métricas para elas"
-msgid "IssuesAnalytics|Issues Created"
-msgstr "Issues criadas"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
msgid "IssuesAnalytics|Issues created per month"
msgstr "Issues criadas por mês"
@@ -7349,6 +8694,12 @@ msgstr "Não há issues para os projetos no seu grupo"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "Para ampliar sua pesquisa, altere ou remova filtros na barra de filtros acima"
+msgid "IssuesAnalytics|Total:"
+msgstr "Total:"
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr "Pode levar até 30 minutos para que o site esteja disponível após o primeiro deploy."
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr "Deve ter uma linha de cabeçalho e pelo menos duas colunas: a primeira coluna é o título da issue e a segunda coluna é a descrição da issue. O separador é detectado automaticamente."
@@ -7374,7 +8725,7 @@ msgid "JiraService|If different from Web URL"
msgstr "Se diferente do URL da Web"
msgid "JiraService|Jira API URL"
-msgstr "URL da API do JIRA"
+msgstr ""
msgid "JiraService|Jira comments will be created when an issue gets referenced in a commit."
msgstr ""
@@ -7413,22 +8764,22 @@ msgid "Job"
msgstr "Trabalho"
msgid "Job Failed #%{build_id}"
-msgstr ""
+msgstr "Tarefa falhou nº %{build_id}"
msgid "Job ID"
-msgstr ""
+msgstr "ID da Tarefa"
msgid "Job has been erased"
msgstr "A tarefa foi apagada"
msgid "Job has been successfully erased!"
-msgstr ""
+msgstr "A tarefa foi apagada com sucesso!"
msgid "Job has wrong arguments format."
-msgstr ""
+msgstr "A tarefa possui formato de argumentos errado."
msgid "Job is missing the `model_type` argument."
-msgstr ""
+msgstr "A tarefa não possui o argumento `model_type`."
msgid "Job is stuck. Check runners."
msgstr "A tarefa travou. Verifique os runners."
@@ -7467,7 +8818,7 @@ msgid "Job|Keep"
msgstr "Manter"
msgid "Job|Pipeline"
-msgstr ""
+msgstr "Pipeline"
msgid "Job|Scroll to bottom"
msgstr "Rolar para baixo"
@@ -7482,25 +8833,25 @@ msgid "Job|The artifacts were removed"
msgstr "Os artefatos foram removidos"
msgid "Job|The artifacts will be removed"
-msgstr ""
+msgstr "Os artefatos foram removidos"
msgid "Job|This job failed because the necessary resources were not successfully created."
-msgstr ""
+msgstr "Esta tarefa falhou porque os recursos necessários não foram criados com sucesso."
msgid "Job|This job is stuck because the project doesn't have any runners online assigned to it."
-msgstr ""
+msgstr "Essa tarefa travou porque o projeto não tem qualquer runner online atribuído a ela."
msgid "Job|for"
-msgstr ""
+msgstr "para"
msgid "Job|into"
-msgstr ""
+msgstr "para"
msgid "Job|with"
-msgstr ""
+msgstr "com"
msgid "Join Zoom meeting"
-msgstr ""
+msgstr "Participe da reunião com Zoom"
msgid "Jul"
msgstr "Jul"
@@ -7509,10 +8860,10 @@ msgid "July"
msgstr "Julho"
msgid "Jump to first unresolved discussion"
-msgstr ""
+msgstr "Ir para a primeira discussão não resolvida"
msgid "Jump to next unresolved discussion"
-msgstr ""
+msgstr "Ir para a próxima discussão não resolvida"
msgid "Jun"
msgstr "Jun"
@@ -7524,7 +8875,10 @@ msgid "Key (PEM)"
msgstr "Chave (PEM)"
msgid "Key: %{key}"
-msgstr ""
+msgstr "Chave: %{key}"
+
+msgid "Keyboard Shortcuts"
+msgstr "Atalhos de Teclado"
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7533,7 +8887,7 @@ msgid "Kubernetes Cluster"
msgstr "Cluster Kubernetes"
msgid "Kubernetes Clusters"
-msgstr ""
+msgstr "Clusters de Kubernetes"
msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}"
msgstr "O tempo de criação do cluster de Kubernetes excedeu o tempo limite; %{timeout}"
@@ -7550,11 +8904,14 @@ msgstr "O cluster do Kubernetes foi atualizado com sucesso."
msgid "Kubernetes configured"
msgstr "Kubernetes configurado"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "Integração de serviço Kubernetes foi depreciada. %{deprecated_message_content} seus clusters Kubernetes usando a nova página <a href=\"%{url}\"/>Clusters Kubernetes</a>"
+msgid "LDAP"
+msgstr ""
msgid "LDAP settings"
msgstr "Configurações LDAP"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] "Último %d dia"
msgstr[1] "Últimos %d dias"
+msgid "Last %{days} days"
+msgstr "Últimos %{days} dias"
+
msgid "Last Pipeline"
msgstr "Último Pipeline"
@@ -7660,23 +9020,32 @@ msgstr "Última edição em %{date}"
msgid "Last edited by %{name}"
msgstr "Última edição por %{name}"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr "Última resposta de"
msgid "Last seen"
msgstr "Visto pela última vez"
+msgid "Last successful update"
+msgstr "Última atualização bem-sucedida"
+
msgid "Last update"
msgstr "Última atualização"
+msgid "Last update attempt"
+msgstr "Última tentativa de atualização"
+
msgid "Last updated"
msgstr "Último atualizado"
msgid "Last used"
-msgstr ""
+msgstr "Usado pela última vez"
msgid "Last used on:"
-msgstr ""
+msgstr "Última utilização em:"
msgid "LastPushEvent|You pushed to"
msgstr "Você fez o push para"
@@ -7687,7 +9056,7 @@ msgstr "em"
msgid "Latest changes"
msgstr "Últimas modificações"
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr "Saiba como %{no_packages_link_start}publicar e compartilhar seus pacotes
msgid "Learn more"
msgstr "Saiba mais"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "Saiba mais sobre %{issue_boards_url}, para acompanhar issues em diversas listas, usando etiquetas, atribuições e marcos. Se você notar algo faltando nos painéis, por favor, crie uma issue em %{gitlab_issues_url}."
-
msgid "Learn more about Auto DevOps"
msgstr "Saiba mais sobre o Auto DevOps"
@@ -7726,6 +9092,9 @@ msgstr "Saiba mas sobre aprovações."
msgid "Learn more about custom project templates"
msgstr "Saiba mais sobre os modelos de projetos personalizados"
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr "Saiba mais sobre os modelos de projeto de nível de grupo"
@@ -7735,6 +9104,9 @@ msgstr "Saiba mais sobre assinar commits"
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "Saiba mais em"
@@ -7760,85 +9132,107 @@ msgid "Let's Encrypt does not accept emails on example.com"
msgstr "O Let's Encrypt não aceita e-mails de example.com"
msgid "Let's Encrypt is a free, automated, and open certificate authority (CA) that gives digital certificates in order to enable HTTPS (SSL/TLS) for websites. Learn more about Let's Encrypt configuration by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
-msgstr ""
+msgstr "Let's Encrypt é uma autoridade certificadora (CA) gratuita, automatizada e aberta, que fornece certificados digitais, afim de habilitar o HTTPS (SSL/TLS) para sites. Saiba mais sobre a configuração do Let's Encrypt seguindo a %{docs_link_start}documentação nas Páginas GitLab %{docs_link_end}."
msgid "License"
msgstr "Licença"
-msgid "LicenseManagement|Add a license"
-msgstr "Adicionar uma licença"
+msgid "License Compliance"
+msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "Adicionar licenças manualmente para autorizar ou incluir em lista negra"
+msgid "LicenseCompliance|Add a license"
+msgstr ""
-msgid "LicenseManagement|Approve"
-msgstr "Aprovar"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "Aprovar licença"
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "Aprovar licença?"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "Aprovada"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
-msgstr "Lista Negra"
+msgid "LicenseCompliance|Approved"
+msgstr ""
-msgid "LicenseManagement|Blacklist license"
-msgstr "Licença de lista negra"
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
-msgid "LicenseManagement|Blacklist license?"
-msgstr "Adicionar licença à lista negra?"
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
-msgid "LicenseManagement|Blacklisted"
-msgstr "Na lista negra"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "Cancelar"
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
-msgid "LicenseManagement|License"
-msgstr "Licença"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
-msgid "LicenseManagement|License Management"
-msgstr "Gerenciamento de Licenças"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
-msgid "LicenseManagement|License details"
-msgstr "Detalhes da licença"
+msgid "LicenseCompliance|License"
+msgstr ""
-msgid "LicenseManagement|License name"
-msgstr "Nome da licença"
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "Gerencie licenças aprovadas e na lista negra para este projeto."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
-msgid "LicenseManagement|Packages"
-msgstr "Pacotes"
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
-msgid "LicenseManagement|Remove license"
-msgstr "Remover licença"
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
-msgid "LicenseManagement|Remove license?"
-msgstr "Remover licença?"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "Enviar"
+msgid "LicenseCompliance|License details"
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "No momento não há licenças aprovadas ou na lista negra neste projeto."
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "Esta licença já existe neste projeto."
+msgid "LicenseCompliance|Packages"
+msgstr ""
+
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
+
+msgid "LicenseCompliance|Submit"
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
msgstr "URL"
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "Você está prestes a remover a licença %{name} deste projeto."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
msgid "Licensed Features"
-msgstr ""
+msgstr "Funcionalidades licenciadas"
msgid "Licensed to"
msgstr "Licenciado para"
@@ -7846,6 +9240,9 @@ msgstr "Licenciado para"
msgid "Licenses"
msgstr "Licenças"
+msgid "Limit display of time tracking units to hours."
+msgstr "Limita a exibição de unidades de acompanhamento de tempo a horas."
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] "Limitado a mostrar %d evento, no máximo"
msgstr[1] "Limitado a mostrar %d eventos, no máximo"
+msgid "Link copied to clipboard"
+msgstr "Link copiado para a área de transferência"
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "Lista"
@@ -7872,15 +9275,15 @@ msgstr "Listar repositórios disponíveis"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "Exibir em lista"
msgid "List your Bitbucket Server repositories"
msgstr "Liste seus repositórios do servidor Bitbucket"
-msgid "List your GitHub repositories"
-msgstr "Listar os seus repositórios no GitHub"
-
msgid "Live preview"
msgstr "Pré-visualização ao vivo"
@@ -7890,6 +9293,9 @@ msgstr "Carregando estados de contribuição para membros de grupo"
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr "Carregando IDE do GitLab..."
@@ -7929,13 +9335,19 @@ msgstr "Bloqueado"
msgid "Locked Files"
msgstr "Arquivos travados"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "Travado para projetos existentes"
msgid "Locks give the ability to lock specific file or folder."
msgstr "Travas possibilitam travar um arquivo ou uma pasta específica."
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr "Logs"
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr "Aprovado por"
@@ -7962,19 +9377,25 @@ msgstr "Mostrar apenas alterações"
msgid "MRDiff|Show full file"
msgstr "Mostrar arquivo completo"
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "Faça com que todos em sua equipe sejam mais produtivos, independentemente da localização deles. O GitLab Geo cria espelhos somente leitura de sua instância do GitLab para que você possa reduzir o tempo necessário para clonar e buscar grandes repositórios."
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "Certifique-se de que você está conectado à conta que possui os projetos que você deseja importar."
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr "Importação de arquivo de manifesto"
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "Associar um ID de conta do FogBugz para um usuário do GitLab"
@@ -8037,6 +9461,12 @@ msgstr "Mar"
msgid "March"
msgstr "Março"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,8 +9476,8 @@ msgstr "Marcar comentário como resolvido"
msgid "Mark this issue as a duplicate of another issue"
msgstr "Marcar esta issue como uma duplicata de outra issue"
-msgid "Mark todo as done"
-msgstr "Marcar como concluído"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr "Markdown"
@@ -8058,15 +9488,66 @@ msgstr "Ajuda do Markdown"
msgid "Markdown enabled"
msgstr "Markdown habilitado"
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Metadado do Maven"
@@ -8124,9 +9605,18 @@ msgstr "Os membros podem ser adicionados pelos <i>mantenedores</i> ou <i>proprie
msgid "Members of <strong>%{project_name}</strong>"
msgstr "Membros de <strong>%{project_name}</strong>"
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "Merge Request"
@@ -8154,6 +9644,9 @@ msgstr "Merge em andamento"
msgid "Merge request"
msgstr "Merge requests"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "Aprovações de merge request"
@@ -8166,6 +9659,9 @@ msgstr "Merge requests"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "A tela de Merge request é um lugar para propor mudanças em um projeto e discutir essas mudanças com outros"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,18 +9695,6 @@ msgstr "Adicionar uma resposta"
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "Ocorreu um erro ao salvar o rascunho do comentário."
-msgid "MergeRequests|Discussion stays resolved"
-msgstr "Discussão permanece resolvida"
-
-msgid "MergeRequests|Discussion stays unresolved"
-msgstr "Discussão permanece não resolvida"
-
-msgid "MergeRequests|Discussion will be resolved"
-msgstr "Discussão será resolvida"
-
-msgid "MergeRequests|Discussion will be unresolved"
-msgstr "Discussão não será resolvida"
-
msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
@@ -8220,8 +9704,8 @@ msgstr "Ir para a próxima discussão não resolvida"
msgid "MergeRequests|Reply..."
msgstr "Responder..."
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "Resolver essa discussão em um novo issue"
+msgid "MergeRequests|Resolve this thread in a new issue"
+msgstr ""
msgid "MergeRequests|Saving the comment failed"
msgstr "Falha ao salvar comentário"
@@ -8229,6 +9713,18 @@ msgstr "Falha ao salvar comentário"
msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
+msgid "MergeRequests|Thread stays resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr ""
+
msgid "MergeRequests|Toggle comments for this file"
msgstr "Ativar/desativar comentários para este arquivo"
@@ -8241,20 +9737,20 @@ msgstr "Ver arquivo substituído @ %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr "comentou no commit %{commitLink}"
-msgid "MergeRequests|started a discussion"
-msgstr "iniciou uma discussão"
+msgid "MergeRequests|started a thread"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
-msgstr "iniciou uma discussão sobre %{linkStart}uma versão antiga do diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
-msgstr "iniciou uma discussão sobre %{linkStart}o diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "iniciou uma discussão sobre uma alteração desatualizada no commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "iniciou uma discussão no commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
msgstr "%{paragraphStart}alterou a descrição %{descriptionChangedTimes} vezes %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr "Merge realizado"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr "Branches com merge realizado estão sendo excluídas. Isso pode levar algum tempo dependendo do número de branches. Por favor, atualize a página para ver as alterações."
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "Mensagens"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr "A métrica foi adicionada com sucesso."
msgid "Metric was successfully updated."
msgstr "A métrica foi atualizada com sucesso."
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "Métricas"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "Métricas - Influx"
msgid "Metrics - Prometheus"
msgstr "Métricas - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr "Métricas e perfis"
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr "Minutos"
-msgid "Mirror a repository"
-msgstr "Espelhar um repositório"
-
msgid "Mirror direction"
msgstr "Direção do espelho"
@@ -8505,6 +10016,9 @@ msgstr "Cancelar"
msgid "Modal|Close"
msgstr "Fechar"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr "Modificar mensagem de commit"
@@ -8517,8 +10031,8 @@ msgstr ""
msgid "Monday"
msgstr "Segunda-feira"
-msgid "Monitor your errors by integrating with Sentry"
-msgstr "Monitore seus erros através da integração com o Sentry"
+msgid "Monitor your errors by integrating with Sentry."
+msgstr ""
msgid "Monitoring"
msgstr "Monitoramento"
@@ -8529,6 +10043,12 @@ msgstr "Meses"
msgid "More"
msgstr "Mais"
+msgid "More Information"
+msgstr "Mais informações"
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr "Mais ações"
@@ -8559,6 +10079,12 @@ msgstr "Mover issue"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr "Nova senha"
msgid "New Pipeline Schedule"
msgstr "Novo Agendamento de Pipeline"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "Novo Snippet"
@@ -8748,7 +10283,13 @@ msgid "Newly registered users will by default be external"
msgstr ""
msgid "Next"
-msgstr "Próximo"
+msgstr "Next"
+
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
msgid "Nickname"
msgstr ""
@@ -8756,8 +10297,14 @@ msgstr ""
msgid "No"
msgstr "Não"
-msgid "No %{providerTitle} repositories available to import"
-msgstr "Não há repositórios do %{providerTitle} disponíveis para importação"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
+msgstr ""
msgid "No Label"
msgstr "Sem etiqueta"
@@ -8768,15 +10315,21 @@ msgstr "Nenhum marco"
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr "Nenhuma atividade encontrada"
-msgid "No available namespaces to fork the project."
-msgstr "Nenhum namespace disponível para fazer fork do projeto."
+msgid "No application_settings found"
+msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
msgstr ""
+msgid "No available namespaces to fork the project."
+msgstr "Nenhum namespace disponível para fazer fork do projeto."
+
msgid "No branches found"
msgstr "Nenhuma branch encontrada"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "Nenhuma conexão pode ser feita para um servidor Gitaly, por favor check os logs!"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr "Não há nenhuma imagem gravada neste projeto. Adicione uma seguindo as instruções acima."
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr "Nenhuma contribuição foi encontrada"
msgid "No credit card required."
msgstr "Não é necessário cartão de crédito."
+msgid "No data found"
+msgstr "Nenhum dado encontrado"
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr "Sem detalhes disponíveis"
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr "Nenhum arquivo encontrado."
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr "Sem issues para o período de tempo selecionado."
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "Sem etiquetas com esse nome ou descrição"
@@ -8885,9 +10450,15 @@ msgstr "Nenhum runner encontrado"
msgid "No schedules"
msgstr "Nenhum agendamento"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr "Nenhum modelo"
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr "Não, importe diretamente os endereços de e-mail e nomes de usuários e
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr "Nós"
msgid "None"
msgstr "Nenhum"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "Não disponível"
@@ -8927,6 +10504,9 @@ msgstr "Dados insuficientes"
msgid "Not found."
msgstr "Não encontrado."
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr "Agora não"
@@ -8936,6 +10516,9 @@ msgstr "Ainda não está pronto. Tente mais tarde."
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr "Nota: Considere pedir ao seu administrador do GitLab para configurar %{g
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "Nota: Considere pedir ao seu administrador do GitLab para configurar %{github_integration_link}, o que permitirá o login via GitHub e permitir a importação de repositórios sem gerar um Token de Acesso Pessoal."
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr "Nota"
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr "Notificações"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "Notificações deligadas"
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "OK"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr "Filtrar"
msgid "Ok let's go"
msgstr "Ok, vamos lá"
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr "Começando"
@@ -9112,6 +10716,12 @@ msgstr "Um ou mais dos seus projetos do Google Code não podem ser importados di
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr "Apenas administradores"
@@ -9136,6 +10746,12 @@ msgstr "Apenas membros do projeto serão importados. Membros do grupo serão ign
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr "Somente usuários com um endereço de e-mail neste domínio podem ser adicionados ao grupo.<br>Exemplo:<code>gitlab.com</code>. Alguns domínios comuns não são permitidos. %{read_more_link}."
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr "Oops, você tem certeza?"
@@ -9145,6 +10761,9 @@ msgstr "Abrir"
msgid "Open Documentation"
msgstr "Abrir documentação"
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr "Abrir erros"
msgid "Open in Xcode"
msgstr "Abrir no Xcode"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr "Abrir projetos"
@@ -9235,6 +10860,12 @@ msgstr "Outra informação"
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr "Pedidos de saída"
@@ -9259,6 +10890,18 @@ msgstr "Informações do pacote"
msgid "Package was removed"
msgstr "O pacote foi removido"
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "Pacotes"
@@ -9295,15 +10938,15 @@ msgstr "Ir para a página anterior"
msgid "Pagination|Last »"
msgstr "Último >>"
-msgid "Pagination|Next"
-msgstr "Próximo"
-
-msgid "Pagination|Prev"
-msgstr "Anterior"
+msgid "Pagination|Next ›"
+msgstr "Próxima ›"
msgid "Pagination|« First"
msgstr "<< Primeiro"
+msgid "Pagination|‹ Prev"
+msgstr "‹ Anterior"
+
msgid "Parameter"
msgstr "Parâmetro"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "Execute opções avançadas, como alterar o caminho, transferir ou remover o grupo."
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr "Otimização de performance"
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr "Permissões"
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr "Escolha um nome"
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "Agendamento da Pipeline"
@@ -9475,7 +11145,7 @@ msgstr "Variáveis"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Personalizado"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr "Pipelines para a última semana"
msgid "Pipelines for last year"
msgstr "Pipelines para o último ano"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr "API"
@@ -9553,15 +11232,30 @@ msgstr "Este projeto não está atualmente configurado para executar pipelines."
msgid "Pipeline|Commit"
msgstr "Commit"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr "Duração"
msgid "Pipeline|Existing branch name or tag"
msgstr "Nome de branch ou tag existente"
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "Pipeline"
@@ -9592,6 +11286,9 @@ msgstr "Parar pipeline #%{pipelineId}?"
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr "Variáveis"
@@ -9604,18 +11301,12 @@ msgstr "todos"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "sucesso"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "com etapa"
@@ -9646,6 +11337,9 @@ msgstr "Iniciar todas manualmente"
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr "Por favor, %{link_to_register} ou %{link_to_sign_in} para comentar"
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "Por favor, aceite os Termos de Serviço antes de continuar."
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr "Por favor, dê uma olhada no seu e-mail (%{email}) para verificar se você possui este endereço. Não recebeu um e-mail? %{resend_link}. Endereço de e-mail errado? %{update_link}."
+
msgid "Please choose a group URL with no special characters."
msgstr "Por favor, escolha um URL de grupo sem caracteres especiais."
@@ -9751,6 +11448,9 @@ msgstr "Por favor, aguarde enquanto conectamos ao seu repositório. Atualize à
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "Por favor, aguarde enquanto importamos o repositório para você. Atualize à vontade."
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "Preferências"
@@ -9760,7 +11460,7 @@ msgstr "Preferências salvas."
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr "Tema de navegação"
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr "Pré-visualização de carga"
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "Primário"
@@ -9880,6 +11589,21 @@ msgstr "Projetos privados podem ser criados em seu namespace pessoal com:"
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "Perfil"
@@ -9994,6 +11718,9 @@ msgstr "O token de feed foi redefinido com sucesso"
msgid "Profiles|Full name"
msgstr "Nome completo"
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr "Incluir contribuições privadas no meu perfil"
@@ -10010,7 +11737,7 @@ msgid "Profiles|Invalid username"
msgstr "Nome de usuário inválido"
msgid "Profiles|Key"
-msgstr ""
+msgstr "Chave"
msgid "Profiles|Learn more"
msgstr "Saiba mais"
@@ -10028,7 +11755,7 @@ msgid "Profiles|No file chosen"
msgstr "Nenhum arquivo escolhido"
msgid "Profiles|Notification email"
-msgstr ""
+msgstr "E-mail de notificação"
msgid "Profiles|Organization"
msgstr "Organização"
@@ -10036,11 +11763,14 @@ msgstr "Organização"
msgid "Profiles|Path"
msgstr "Caminho"
+msgid "Profiles|Personal Access"
+msgstr "Acesso pessoal"
+
msgid "Profiles|Position and size your new avatar"
msgstr "Posicione e dimensione seu novo avatar"
msgid "Profiles|Primary email"
-msgstr ""
+msgstr "E-mail primário"
msgid "Profiles|Private contributions"
msgstr "Contribuições privadas"
@@ -10052,7 +11782,7 @@ msgid "Profiles|Public Avatar"
msgstr "Avatar público"
msgid "Profiles|Public email"
-msgstr ""
+msgstr "E-mail público"
msgid "Profiles|Remove avatar"
msgstr "Remover avatar"
@@ -10066,6 +11796,9 @@ msgstr "Login social"
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "Algumas opções estão indisponíveis para contas LDAP"
+msgid "Profiles|Static object token was successfully reset"
+msgstr "O token de objeto estático foi redefinido com sucesso"
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr "Conte-nos sobre você em menos de 250 caracteres"
@@ -10097,7 +11830,7 @@ msgid "Profiles|Type your %{confirmationValue} to confirm:"
msgstr "Escreva sua %{confirmationValue} para confirmar:"
msgid "Profiles|Typically starts with \"ssh-ed25519 …\" or \"ssh-rsa …\""
-msgstr ""
+msgstr "Normalmente incia com \"ssh-ed25519 …\" ou \"ssh-rsa …\""
msgid "Profiles|Update profile settings"
msgstr "Atualizar configurações do perfil"
@@ -10171,6 +11904,12 @@ msgstr "Seu status"
msgid "Profiles|e.g. My MacBook key"
msgstr "por exemplo, Chave do meu MacBook"
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr "acesso pessoal"
+
msgid "Profiles|username"
msgstr "nome de usuário"
@@ -10216,6 +11955,9 @@ msgstr "Projeto '%{project_name}' atualizado com sucesso."
msgid "Project Badges"
msgstr "Selos de projeto"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr "ID do projeto"
@@ -10225,6 +11967,9 @@ msgstr "URL do projeto"
msgid "Project access must be granted explicitly to each user."
msgstr "Acesso ao projeto deve ser concedido explicitamente para cada usuário."
+msgid "Project already created"
+msgstr "Projeto já criado"
+
msgid "Project and wiki repositories"
msgstr "Repositórios do projeto e wiki"
@@ -10276,11 +12021,8 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr "O nível de visibilidade do projeto será alterado para coincidir com as regras do namespace ao transferir para um grupo."
-msgid "Project:"
-msgstr "Projeto:"
-
msgid "Project: %{name}"
-msgstr ""
+msgstr "Projeto: %{name}"
msgid "ProjectActivityRSS|Subscribe"
msgstr "Inscreva-se"
@@ -10321,6 +12063,12 @@ msgstr "Ir para seu fork"
msgid "ProjectOverview|Star"
msgstr "Marcar como favorito"
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr "Desmarcar como favorito"
@@ -10339,21 +12087,57 @@ msgstr " ou grupo"
msgid "ProjectSelect|Search for project"
msgstr "Pesquisar por projeto"
+msgid "ProjectService|%{service_title}: status off"
+msgstr "%{service_title}: status desligado"
+
+msgid "ProjectService|%{service_title}: status on"
+msgstr "%{service_title}: status ligado"
+
+msgid "ProjectService|Integrations"
+msgstr "Integrações"
+
+msgid "ProjectService|Last edit"
+msgstr "Última edição"
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr "Execute operações comuns no projeto GitLab: %{project_name}"
+
+msgid "ProjectService|Project services"
+msgstr "Serviços de projetos"
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr "Serviços de projetos permitem que você integre o GitLab com outras aplicações"
+
+msgid "ProjectService|Service"
+msgstr "Serviço"
+
+msgid "ProjectService|Services"
+msgstr "Serviços"
+
+msgid "ProjectService|Settings"
+msgstr "Configurações"
+
+msgid "ProjectService|To set up this service:"
+msgstr "Para configurar este serviço:"
+
msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
-msgstr ""
+msgstr "Recursos adicionais de merge request que influenciam como e quando as merges serão executadas"
msgid "ProjectSettings|All discussions must be resolved"
-msgstr ""
-
-msgid "ProjectSettings|Allow merge trains"
-msgstr ""
+msgstr "Todas as discussões devem ser resolvidas"
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
-msgstr ""
+msgstr "Resolver automaticamente discussões de diff do merge request quando elas se tornam desatualizadas"
msgid "ProjectSettings|Badges"
msgstr "Selos"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr "Escolha seu método de merge, opções de merge e verificações de merge."
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr "Escolha seu método de merge, opções de merge, verificações de merge e configure um modelo de descrição padrão para merge requests."
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "Contate um administrador para alterar essa configuração."
@@ -10361,7 +12145,7 @@ msgid "ProjectSettings|Customize your project badges."
msgstr "Personalize os selos do seu projeto."
msgid "ProjectSettings|Every merge creates a merge commit"
-msgstr ""
+msgstr "Cada merge cria um commit de merge"
msgid "ProjectSettings|Failed to protect the tag"
msgstr "Falha ao proteger a tag"
@@ -10370,46 +12154,46 @@ msgid "ProjectSettings|Failed to update tag!"
msgstr "Falha ao atualizar a tag!"
msgid "ProjectSettings|Fast-forward merge"
-msgstr ""
+msgstr "Executar merge com fast-forward"
msgid "ProjectSettings|Fast-forward merges only"
-msgstr ""
+msgstr "Merges com fast-forward apenas"
msgid "ProjectSettings|Learn more about badges."
msgstr "Saiba mais sobre os selos."
msgid "ProjectSettings|Merge checks"
-msgstr ""
+msgstr "Verificações de merge"
msgid "ProjectSettings|Merge commit"
-msgstr ""
+msgstr "Commit de merge"
msgid "ProjectSettings|Merge commit with semi-linear history"
-msgstr ""
+msgstr "Commit de merge com uma história semilinear"
msgid "ProjectSettings|Merge method"
-msgstr ""
+msgstr "Método de merge"
msgid "ProjectSettings|Merge options"
-msgstr ""
+msgstr "Opções de merge"
msgid "ProjectSettings|Merge pipelines will try to validate the post-merge result prior to merging"
-msgstr ""
+msgstr "Pipelines de merge vão tentar validar o resultado pós-merge antes de realizar o merge"
msgid "ProjectSettings|No merge commits are created"
-msgstr ""
+msgstr "Nenhum commit de merge foi criado"
msgid "ProjectSettings|Only signed commits can be pushed to this repository."
msgstr "Apenas para commits assinados pode-se fazer push para este repositório."
msgid "ProjectSettings|Pipelines must succeed"
-msgstr ""
+msgstr "Pipelines devem ter êxito"
msgid "ProjectSettings|Pipelines need to be configured to enable this feature."
-msgstr ""
+msgstr "Pipelines precisam ser configurados para habilitar essa funcionalidade."
msgid "ProjectSettings|Show link to create/view merge request when pushing from the command line"
-msgstr ""
+msgstr "Mostrar link para criar/ver merge request ao fazer push da linha de comando"
msgid "ProjectSettings|These checks must pass before merge requests can be merged"
msgstr ""
@@ -10424,13 +12208,13 @@ msgid "ProjectSettings|This setting will be applied to all projects unless overr
msgstr "Essa configuração será aplicada a todos os projetos a menos que seja sobrescrita por um administrador."
msgid "ProjectSettings|This will dictate the commit history when you merge a merge request"
-msgstr ""
+msgstr "Isso determinará o histórico de commit quando você faz merge de uma merge request"
msgid "ProjectSettings|Users can only push commits to this repository that were committed with one of their own verified emails."
msgstr "Usuários só podem fazer push para este repositório com commits que contenham um de seus e-mails verificados."
msgid "ProjectSettings|When conflicts arise the user is given the option to rebase"
-msgstr ""
+msgstr "Quando conflitos surgem, o usuários tem a opção de fazer rebase"
msgid "ProjectTemplates|.NET Core"
msgstr ".NET Core"
@@ -10481,16 +12265,16 @@ msgid "ProjectTemplates|Spring"
msgstr "Spring"
msgid "ProjectTemplates|iOS (Swift)"
-msgstr ""
+msgstr "iOS (Swift)"
msgid "Projects"
msgstr "Projetos"
msgid "Projects (%{count})"
-msgstr ""
+msgstr "Projetos (%{count})"
msgid "Projects Successfully Retrieved"
-msgstr ""
+msgstr "Projetos obtidos com sucesso"
msgid "Projects shared with %{group_name}"
msgstr "Projetos compartilhados com %{group_name}"
@@ -10499,7 +12283,7 @@ msgid "Projects that belong to a group are prefixed with the group namespace. Ex
msgstr "Projetos que pertencem a um grupo são prefixados com o namespace do grupo. Projetos existentes podem ser movidos para um grupo."
msgid "Projects to index"
-msgstr ""
+msgstr "Projetos para indexar"
msgid "Projects with write access"
msgstr "Projetos com acesso de gravação"
@@ -10525,12 +12309,60 @@ msgstr "Desculpe, nenhum projeto corresponde a sua pesquisa"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Esta funcionalidade necessita de suporte à localStorage do navegador"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr "Permite que você clone imediatamente o repositório deste projeto. Pule esta etapa se você planeja fazer o push de um repositório existente."
+
+msgid "ProjectsNew|Blank"
+msgstr "Em branco"
+
+msgid "ProjectsNew|Blank project"
+msgstr "Projeto em branco"
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr "Contate um administrador para habilitar opções para importar seu projeto."
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
msgid "PrometheusAlerts|Add alert"
msgstr "Adicionar alerta"
-msgid "PrometheusAlerts|Alert set"
-msgstr "PrometheusAlerts|Definir Alerta"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "Editar alerta"
@@ -10546,9 +12378,6 @@ msgstr "Erro ao buscar alerta"
msgid "PrometheusAlerts|Error saving alert"
msgstr "Erro ao salvar alerta"
-msgid "PrometheusAlerts|No alert set"
-msgstr "Nenhum alerta definido"
-
msgid "PrometheusAlerts|Operator"
msgstr "Operador"
@@ -10582,6 +12411,9 @@ msgstr "Métricas comuns são monitoradas automaticamente com base em uma biblio
msgid "PrometheusService|Custom metrics"
msgstr "Métricas personalizadas"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr "Mais informações"
msgid "PrometheusService|New metric"
msgstr "Nova métrica"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "URL da API base do Prometheus. como http://prometheus.example.com/"
@@ -10631,11 +12466,17 @@ msgid "PrometheusService|To enable the installation of Prometheus on your cluste
msgstr "Para ativar a instalação do Prometheus nos seus clusters, desative a configuração manual abaixo"
msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
-msgstr "PrometheusService| Aguardando sua primeira implantação em um ambiente para encontrar métricas comuns"
+msgstr "Aguardando sua primeira implantação em um ambiente para encontrar métricas comuns"
msgid "Promote"
msgstr "Promover"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "Promova esses marcos de projeto em um marco de grupo."
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr "Não me mostre isso novamente"
@@ -10684,6 +12528,9 @@ msgstr "Ambientes Protegidos"
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} poderá ser editado por desenvolvedores. Tem certeza disso?"
@@ -10759,6 +12606,9 @@ msgstr "Pipelines públicos"
msgid "Pull"
msgstr "Pull"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "Push"
@@ -10817,22 +12667,22 @@ msgid "PushoverService|Lowest Priority"
msgstr ""
msgid "PushoverService|Normal Priority"
-msgstr ""
+msgstr "Prioridade normal"
msgid "PushoverService|Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop."
-msgstr ""
+msgstr "Pushover facilita a obtenção de notificações em tempo real no seu dispositivo Android, iPhone, iPad e desktop."
msgid "PushoverService|See project %{project_full_name}"
msgstr "Ver projeto %{project_full_name}"
msgid "PushoverService|Total commits count: %{total_commits_count}"
-msgstr ""
+msgstr "Contagem total de commits: %{total_commits_count}"
msgid "PushoverService|Your application key"
-msgstr ""
+msgstr "Sua chave de aplicativo"
msgid "PushoverService|Your user key"
-msgstr ""
+msgstr "Sua chave de usuário"
msgid "Quarters"
msgstr "Trimestres"
@@ -10841,7 +12691,7 @@ msgid "Query"
msgstr "Consulta"
msgid "Query is valid"
-msgstr ""
+msgstr "A consulta é válida"
msgid "Quick actions can be used in the issues description and comment boxes."
msgstr "Ações rápidas podem ser usadas nas descrições das issues e nas caixas de comentário."
@@ -10852,6 +12702,9 @@ msgstr "README"
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Leia mais"
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "Saiba mais sobre as permissões do projeto <strong>%{link_to_help}</strong>"
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "Recursos em tempo real"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr "Recente"
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr "Atividade recente do projeto"
@@ -10915,19 +12780,19 @@ msgid "Regex pattern"
msgstr "Padrão Regex"
msgid "Register"
-msgstr ""
+msgstr "Registrar"
msgid "Register / Sign In"
msgstr "Registrar/Login"
msgid "Register Two-Factor Authenticator"
-msgstr ""
+msgstr "Registrar autenticador de dois fatores"
msgid "Register U2F device"
msgstr "Registrar dispositivo U2F"
msgid "Register Universal Two-Factor (U2F) Device"
-msgstr ""
+msgstr "Registrar dispositivo de Dois Fatores Universal (U2F)"
msgid "Register and see your runners for this group."
msgstr "Registre-se e veja seus runners para este grupo."
@@ -10936,14 +12801,11 @@ msgid "Register and see your runners for this project."
msgstr "Registre-se e veja seus runners para este projeto."
msgid "Register with two-factor app"
-msgstr ""
+msgstr "Registre-se com aplicativo de dois fatores"
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "Container Registry"
-
msgid "Related Deployed Jobs"
msgstr "Tarefas Implantadas Relacionadas"
@@ -10971,6 +12833,9 @@ msgstr "Versões"
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr "As versões marcam pontos específicos no histórico de desenvolvimento de um projeto, comunicam informações sobre o tipo de mudança e fornecem versões preparadas, muitas vezes compiladas do software para serem reutilizadas em outro lugar. Atualmente, as versões só podem ser criadas por meio da API."
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "Lembrar mais tarde"
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr "Remover"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr "Remover Runner"
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr "Remover imagem"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr "Remover relacionamento de fork"
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr "Remover grupo"
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "Remover prioridade"
@@ -11028,30 +12911,75 @@ msgstr "Remover projeto"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr "Removido"
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr "Removido %{type} com id %{id}"
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr "O grupo removido não pode ser restaurado!"
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr "Remove %{epic_ref} de épicos filhos."
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr "Reabrir epic"
msgid "Reopen milestone"
msgstr "Reabrir marco"
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr "Corrigir autenticação"
@@ -11094,12 +13031,21 @@ msgstr "Substituir"
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr "Responder ao comentário"
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr "Responda a este e-mail diretamente ou %{view_it_on_gitlab}."
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr "Repositório por URL"
@@ -11166,6 +13112,9 @@ msgstr "sem resultados de teste alterados"
msgid "Repository"
msgstr "Repositório"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "Configurações do Repositório"
@@ -11190,9 +13139,15 @@ msgstr "Manutenção do repositório"
msgid "Repository mirror"
msgstr "Espelhamento do repositório"
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr "Armazenamento do Repositório"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "Selecionar"
@@ -11205,6 +13160,9 @@ msgstr "Solicitado %{time_ago}"
msgid "Requests Profiles"
msgstr "Solicita Perfis"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "Exigir que todos os usuários deste grupo configurem a autenticação de dois fatores"
@@ -11220,6 +13178,9 @@ msgstr "Exigir senha do usuário para aprovar"
msgid "Require users to prove ownership of custom domains"
msgstr "Exigir que os usuários comprovem a propriedade de domínios personalizados"
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr "Reenviar convite"
+msgid "Resend it"
+msgstr "Reenviar"
+
msgid "Reset authorization key"
msgstr "Redefinir chave de autorização"
@@ -11251,11 +13215,17 @@ msgstr "Redefinir chave"
msgid "Reset runners registration token"
msgstr "Recriar o token de registro de runners"
+msgid "Reset template"
+msgstr "Redefinir modelo"
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr "Redefinir a chave de autorização invalidará a chave anterior. As configurações de alerta existentes terão de ser atualizadas com a nova chave."
-msgid "Resolve all discussions in new issue"
-msgstr "Resolver todas discussões em novo issue"
+msgid "Resolve all threads in new issue"
+msgstr ""
msgid "Resolve conflicts on source branch"
msgstr "Resolver conflitos na branch de origem"
@@ -11263,6 +13233,9 @@ msgstr "Resolver conflitos na branch de origem"
msgid "Resolve discussion"
msgstr "Resolver discussão"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr "Resolvido"
@@ -11311,6 +13284,9 @@ msgstr "Reiniciar terminal"
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr "Continuar"
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr "Roadmap"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "Executar pipelines CI/CD para repositórios externos"
@@ -11436,8 +13415,8 @@ msgstr "Página de runners"
msgid "Runners page."
msgstr "Página de runners."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "Você usou todos os seus minutos compartilhados para executores."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "Executando"
@@ -11511,6 +13490,9 @@ msgstr "Salvar agendamento da pipeline"
msgid "Save variables"
msgstr "Salvar variáveis"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr "Salvando projeto."
@@ -11520,6 +13502,9 @@ msgstr "Agendar nova pipeline"
msgid "Scheduled"
msgstr "Agendado"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "Agendamentos"
@@ -11541,15 +13526,30 @@ msgstr "Painéis de escopo"
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr "Role para baixo até <strong>Google Code Project Hosting</strong> e ative a opção à direita."
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr "Rolar até o final"
msgid "Scroll to top"
msgstr "Voltar ao topo"
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "Pesquisar"
@@ -11637,9 +13637,76 @@ msgstr "neste grupo"
msgid "SearchAutocomplete|in this project"
msgstr "neste projeto"
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr "Mostrando %{from} - %{to} de %{count} %{scope} para \"%{term}\""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr "Secreto"
msgid "Security"
msgstr "Segurança"
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr "Painel de segurança"
@@ -11667,24 +13737,48 @@ msgstr "Erro ao recuperar lista de vulnerabilidades. Por favor, verifique sua co
msgid "Security Dashboard|Issue Created"
msgstr "Issue criado"
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr "Criar issue"
msgid "Security Reports|Dismiss vulnerability"
msgstr "Ignorar vulnerabilidade"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr "Mais informações"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr "Ocorreu um erro ao criar a issue."
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr "Ocorreu um erro ao ignorar a vulnerabilidade."
@@ -11712,6 +13806,9 @@ msgstr "O painel de segurança exibe o último relatório de segurança. Use-o p
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr "Monitorar vulnerabilidades no seu código"
@@ -11739,23 +13836,32 @@ msgstr "Selecionar"
msgid "Select Archive Format"
msgstr "Selecionar Formato do Arquivo"
+msgid "Select GitLab project to link with your Slack team"
+msgstr "Selecione o projeto GitLab para vincular com sua equipe Slack"
+
msgid "Select Page"
-msgstr ""
+msgstr "Selecionar Página"
msgid "Select a file from the left sidebar to begin editing. Afterwards, you'll be able to commit your changes."
-msgstr ""
+msgstr "Selecione um arquivo da barra lateral na esquerda para começar a editar. Depois, você poderá fazer commit das suas alterações."
msgid "Select a group to invite"
msgstr "Selecione um grupo para convidar"
+msgid "Select a label"
+msgstr "Selecione uma etiqueta"
+
msgid "Select a namespace to fork the project"
msgstr "Selecione um namespace para realizar o fork do projeto"
msgid "Select a new namespace"
msgstr "Selecione um novo namespace"
+msgid "Select a project"
+msgstr "Selecione um projeto"
+
msgid "Select a project to read Insights configuration file"
-msgstr ""
+msgstr "Selecione um projeto para ler o arquivo de configuração de Insight"
msgid "Select a repository"
msgstr "Selecione um repositório"
@@ -11766,6 +13872,9 @@ msgstr "Selecione um repositório de modelos"
msgid "Select a timezone"
msgstr "Selecionar fuso horário"
+msgid "Select all"
+msgstr "Selecionar todos"
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "Selecione um cluster existente do Kubernetes ou crie um novo"
@@ -11773,10 +13882,19 @@ msgid "Select branch/tag"
msgstr "Selecionar o branch/tag"
msgid "Select group or project"
-msgstr ""
+msgstr "Selecionar grupo ou projeto"
-msgid "Select members to invite"
-msgstr "Selecione membros para convidar"
+msgid "Select labels"
+msgstr "Selecionar etiquetas"
+
+msgid "Select merge moment"
+msgstr "Selecionar momento do merge"
+
+msgid "Select milestone"
+msgstr "Selecionar marco"
+
+msgid "Select private project"
+msgstr ""
msgid "Select project"
msgstr "Selecionar projeto"
@@ -11787,6 +13905,9 @@ msgstr "Selecione projeto e zona para escolher o tipo de máquina"
msgid "Select project to choose zone"
msgstr "Selecione o projeto para escolher a zona"
+msgid "Select projects"
+msgstr "Selecionar projetos"
+
msgid "Select projects you want to import."
msgstr "Selecione os projetos que você deseja importar."
@@ -11802,17 +13923,23 @@ msgstr "Selecione o branch que você deseja definir como o padrão para este pro
msgid "Select the custom project template source group."
msgstr "Selecione o grupo de origem dos modelos customizados de projeto."
+msgid "Select timeframe"
+msgstr "Selecionar período"
+
+msgid "Select user"
+msgstr "Selecionar usuário"
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
-msgstr ""
+msgstr "Os níveis selecionados não podem ser usados por usuários não administradores para grupos, projetos ou snippets. Se o nível público for restrito, os perfis de usuário só serão visíveis para usuários conectados."
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "A seleção de um usuário do GitLab adicionará um link para o usuário do GitLab nas descrições de issues e comentários (por exemplo, \"Por <a href=\"#\">@johnsmith</a>\"). Isto também associará e/ou atribuirá esses issues e comentários ao usuário selecionado."
-msgid "Send an email notification to Developers."
-msgstr "Enviar um e-mail de notificação para os desenvolvedores."
+msgid "Send a separate email notification to Developers."
+msgstr "Enviar uma notificação de e-mail separada para os desenvolvedores."
msgid "Send confirmation email"
-msgstr ""
+msgstr "Enviar e-mail de confirmação"
msgid "Send email"
msgstr "Enviar e-mail"
@@ -11835,6 +13962,12 @@ msgstr "Separe os tópicos com vírgulas."
msgid "September"
msgstr "Setembro"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr "Duração da sessão (minutos)"
msgid "Session expiration, projects limit and attachment size."
msgstr "Expiração de sessão, limite de projetos e tamanho de anexo."
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr "Defina um modelo padrão para descrições de issues."
@@ -11946,12 +14097,24 @@ msgstr "Definir nova senha"
msgid "Set notification email for abuse reports."
msgstr "Definir notificação por e-mail para relatórios de abuso."
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "Definir requisitos para um usuário entrar. Ative a autenticação obrigatória de dois fatores."
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,18 +14124,24 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "Configurar CI/CD"
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
msgid "Set up a %{type} Runner manually"
msgstr "Configure o Runner %{type} manualmente"
-msgid "Set up a specific Runner automatically"
-msgstr "Configurar um Runner específico automaticamente"
-
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr "Configurar asserções/atributos/alegações (email, first_name, last_name) e NameID de acordo com %{docsLinkStart}a documentação %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr "Configure seu projeto para fazer push e/ou pull de um repositório para
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "defina uma senha"
@@ -12015,6 +14187,12 @@ msgstr "Desculpe, nós não fomos capazes de definir o seu status. Por favor, te
msgid "SetStatusModal|What's your status?"
msgstr "Qual é o seu status?"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr "Mostrar somente projetos arquivados"
msgid "Show command"
msgstr "Exibir comando"
+msgid "Show comments"
+msgstr "Mostrar comentários"
+
msgid "Show comments only"
msgstr "Mostrar apenas comentários"
+msgid "Show commit description"
+msgstr "Mostrar descrição do commit"
+
msgid "Show complete raw log"
msgstr "Visualizar raw log completo"
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "Mostrando %d evento"
msgstr[1] "Mostrando %d eventos"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr "Mostrando os últimos %{size} de log -"
+
msgid "Side-by-side"
msgstr "Lado a lado"
@@ -12128,6 +14324,9 @@ msgstr "Entrar usando o cartão inteligente"
msgid "Sign in via 2FA code"
msgstr "Entrar via código da A2F"
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr "Entre com logon único"
@@ -12140,6 +14339,9 @@ msgstr "Sair"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr "Restrições de login"
msgid "Sign-up restrictions"
msgstr "Restrições de cadastro"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr "Issues semelhantes"
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr "Tamanho"
@@ -12191,6 +14402,21 @@ msgstr "Aplicativo Slack"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr "A integração com o Slack permite que você interaja com o GitLab por meio de comandos de barra em uma janela de bate-papo."
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "Mais lento, mas certifica-se que o espaço de trabalho do projeto está íntegro enquanto clona o repositório do zero para cada tarefa"
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr "Algo deu errado ao alternar o botão"
msgid "Something went wrong while adding your award. Please try again."
msgstr "Algo deu errado ao adicionar seu prêmio. Por favor, tente novamente."
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr "Algo deu errado ao fechar o %{issuable}. Por favor, tente novamente depo
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "Algo deu errado ao recuperar a lista de %{listType}"
@@ -12299,6 +14540,9 @@ msgstr "Alguma coisa deu errado ao reabrir o %{issuable}. Por favor, tente novam
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "Algo deu errado ao resolver essa discussão. Por favor, tente novamente."
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "Algo deu errado, incapaz de adicionar %{project} ao dashboard"
@@ -12350,6 +14594,9 @@ msgstr "Data de vencimento mais longe"
msgid "SortOptions|Due soon"
msgstr "Data de vencimento mais próxima"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "Prioridade de etiqueta"
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr "Assinados mais antigos"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "Atualização mais antiga"
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr "Assinados mais novos"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr "%{type} na lista para commit"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "Coloque uma estrela em uma etiqueta para dar prioridade. Altere a ordem das etiquetas priorizadas arrastando-as para alterar sua prioridade."
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,54 +14792,69 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr "Você ainda não tem projetos favoritos."
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
-msgstr ""
+msgid "Stars"
+msgstr "Favoritos"
-msgid "Start Indexing"
-msgstr "Iniciar indexação"
+msgid "Start GitLab Ultimate trial"
+msgstr "Iniciar avaliação do GitLab Ultimate"
msgid "Start Web Terminal"
-msgstr ""
+msgstr "Iniciar Terminal Web"
msgid "Start a %{new_merge_request} with these changes"
msgstr "Iniciar um %{new_merge_request} a partir dessas alterações"
-msgid "Start a new merge request"
+msgid "Start a Free Trial"
msgstr ""
+msgid "Start a new discussion..."
+msgstr "Iniciar uma nova discussão..."
+
+msgid "Start a new merge request"
+msgstr "Iniciar um novo merge request"
+
msgid "Start a review"
msgstr "Iniciar uma revisão"
msgid "Start and due date"
msgstr "Data de início e término"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr "Comece escolhendo um grupo para ver como seu time esta gastando o tempo. Você pode então detalhar até o nível do projeto."
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr "Data de início"
-msgid "Start discussion"
-msgstr "Iniciar discussão"
-
-msgid "Start discussion & close %{noteable_name}"
-msgstr "Iniciar discussão e fechar %{noteable_name}"
-
-msgid "Start discussion & reopen %{noteable_name}"
-msgstr "Iniciar discussão e reabrir %{noteable_name}"
-
msgid "Start merge train"
msgstr ""
msgid "Start merge train when pipeline succeeds"
msgstr ""
+msgid "Start search"
+msgstr ""
+
msgid "Start the Runner!"
msgstr "Inicie o Runner!"
+msgid "Start thread"
+msgstr ""
+
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
+
msgid "Start your trial"
msgstr "Iniciar sua avaliação"
@@ -12605,12 +14879,18 @@ msgstr "Começa em (UTC)"
msgid "State your message to activate"
msgstr "Regitre sua mensagem para ativar"
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "Status"
msgid "Status:"
msgstr "Status:"
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr "Parar terminal"
@@ -12641,6 +14921,18 @@ msgstr "Armazenamento:"
msgid "StorageSize|Unknown"
msgstr "Desconhecido"
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr "Permitido criar subgrupos"
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr "Permitido criar subgrupos"
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr "Mantenedores"
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr "Proprietários"
+
msgid "Subgroups"
msgstr "Subgrupos"
@@ -12648,7 +14940,7 @@ msgid "Subgroups and projects"
msgstr "Subgrupos e projetos"
msgid "Subkeys"
-msgstr ""
+msgstr "Subchaves"
msgid "Submit as spam"
msgstr "Enviar como spam"
@@ -12656,6 +14948,9 @@ msgstr "Enviar como spam"
msgid "Submit feedback"
msgstr "Enviar feedback"
+msgid "Submit issue"
+msgstr "Enviar issue"
+
msgid "Submit review"
msgstr "Enviar análise"
@@ -12675,11 +14970,17 @@ msgid "Subscribe to RSS feed"
msgstr "Inscrever-se no feed RSS"
msgid "Subscribe to calendar"
-msgstr ""
+msgstr "Assinar calendário"
msgid "Subscribed"
msgstr "Inscrito"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr "Grátis"
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr "GitLab.com %{planName} %{suffix}"
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12744,7 +15042,7 @@ msgid "SubscriptionTable|Trial end date"
msgstr ""
msgid "SubscriptionTable|Trial start date"
-msgstr ""
+msgstr "Data de início da avaliação"
msgid "SubscriptionTable|Upgrade"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12786,34 +15087,34 @@ msgid "Suggested change"
msgstr ""
msgid "SuggestedColors|Bright green"
-msgstr ""
+msgstr "Verde claro"
msgid "SuggestedColors|Dark grayish cyan"
-msgstr ""
+msgstr "Ciano cinzento escuro"
msgid "SuggestedColors|Dark moderate blue"
-msgstr ""
+msgstr "Azul escuro moderado"
msgid "SuggestedColors|Dark moderate orange"
-msgstr ""
+msgstr "Laranja escuro moderado"
msgid "SuggestedColors|Dark moderate pink"
-msgstr ""
+msgstr "Rosa escuro moderado"
msgid "SuggestedColors|Dark moderate violet"
-msgstr ""
+msgstr "Violeta escuro moderado"
msgid "SuggestedColors|Feijoa"
-msgstr ""
+msgstr "Feijoa"
msgid "SuggestedColors|Lime green"
-msgstr ""
+msgstr "Verde limão"
msgid "SuggestedColors|Moderate blue"
-msgstr ""
+msgstr "Azul moderado"
msgid "SuggestedColors|Pure red"
-msgstr ""
+msgstr "Vermelho puro"
msgid "SuggestedColors|Slightly desaturated blue"
msgstr ""
@@ -12822,35 +15123,41 @@ msgid "SuggestedColors|Slightly desaturated green"
msgstr ""
msgid "SuggestedColors|Soft orange"
-msgstr ""
+msgstr "Laranja suave"
msgid "SuggestedColors|Soft red"
-msgstr ""
+msgstr "Vermelho suave"
msgid "SuggestedColors|Strong pink"
-msgstr ""
+msgstr "Rosa forte"
msgid "SuggestedColors|Strong red"
-msgstr ""
+msgstr "Vermelho forte"
msgid "SuggestedColors|Strong yellow"
-msgstr ""
+msgstr "Amarelo forte"
msgid "SuggestedColors|UA blue"
-msgstr ""
+msgstr "Azul UA"
msgid "SuggestedColors|Very dark desaturated blue"
msgstr ""
msgid "SuggestedColors|Very dark lime green"
-msgstr ""
+msgstr "Verde limão muito escuro"
msgid "SuggestedColors|Very pale orange"
-msgstr ""
+msgstr "Laranja muito pálido"
+
+msgid "Suggestions:"
+msgstr "Sugestões:"
msgid "Sunday"
msgstr "Domingo"
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12897,17 +15204,23 @@ msgid "System metrics (Kubernetes)"
msgstr "Métricas do sistema (Kubernetes)"
msgid "Table of Contents"
-msgstr ""
+msgstr "Tabela de conteúdos"
msgid "Tag"
msgstr "Tag"
msgid "Tag list:"
-msgstr ""
+msgstr "Lista de tags:"
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Tags"
@@ -13002,7 +15315,7 @@ msgid "Team"
msgstr "Equipe"
msgid "Team domain"
-msgstr ""
+msgstr "Domínio da equipe"
msgid "Template"
msgstr "Modelo"
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "O Advanced Global Search no GitLab é um poderoso serviço de pesquisa que economiza seu tempo. Em vez de criar código duplicado e perder tempo, você pode agora procurar código dentro de outras equipes que podem ajudar seu próprio projeto."
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "O realçador de caracteres ajuda a manter a linha de assunto com %{titleLength} caracteres e quebra a linha do corpo em %{bodyLength} para que sejam legíveis no git."
@@ -13126,6 +15442,12 @@ msgstr "O deploy desta tarefa para o ambiente %{environmentLink} foi mal sucedid
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr "O domínio que você digitou está mal formatado."
+
+msgid "The domain you entered is not allowed."
+msgstr "O domínio que você digitou não é permitido."
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "A importação expirará após %{timeout}. Para repositórios que demoram mais tempo, use a combinação clone/push."
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr "O convite não pôde ser aceito."
@@ -13279,8 +15598,8 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "O repositório deve ser acessível por <code>http://</code>, <code>https://</code> ou <code>git://</code>."
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "O repositório deve ser acessível por <code>http://</code>, <code>https://</code>, <code>ssh://</code> e <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "A etapa de revisão mostra o tempo de criação de uma solicitação de incorporação até sua aceitação. Os dados serão automaticamente adicionados depois que sua primeira solicitação de incorporação for aceita."
@@ -13306,8 +15625,8 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "A etapa de homologação mostra o tempo entre o aceite da solicitação de incorporação e a implantação do código no ambiente de produção. Os dados serão automaticamente adicionados depois que você implantar em produção pela primeira vez."
-msgid "The tabs below will be removed in a future version"
-msgstr "As guias abaixo serão removidas em uma versão futura"
+msgid "The target element is missing."
+msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "A etapa de testes mostra o tempo que o GitLab CI leva para executar cada pipeline para a solicitação de incorporação associada. Os dados serão automaticamente adicionados após a conclusão do primeiro pipeline."
@@ -13315,7 +15634,7 @@ msgstr "A etapa de testes mostra o tempo que o GitLab CI leva para executar cada
msgid "The time taken by each data entry gathered by that stage."
msgstr "O tempo necessário por cada entrada de dados reunida por essa etapa."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr "O mapa do usuário é um documento JSON que mapeia os usuários do Googl
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "O mapa do usuário é um mapeamento dos usuários do FogBugz que participaram de seus projetos para a maneira como seus endereços de e-mail e nomes de usuários serão importados para o GitLab. Você pode alterar isso preenchendo a tabela abaixo."
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "Não há issues para mostrar"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr "Ainda não há etiquetas"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr "Não há mudanças fora da lista para commit"
msgid "There is already a repository with that name on disk"
msgstr "Já existe um repositório com esse nome no disco"
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr "Houve um problema de comunicação com o seu dispositivo."
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
-msgstr "Houve um erro ao adicionar uma tarefa."
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
-msgstr "Houve um erro ao excluir a tarefa."
+msgid "There was an error deleting the To Do."
+msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr "Erro ao salvar suas configurações de notificação."
msgid "There was an error subscribing to this label."
msgstr "Erro ao se inscrever nessa etiqueta."
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr "Erro ao redefinir token do email."
@@ -13501,10 +15835,10 @@ msgstr "O escopo deste painel está reduzido"
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "Esse branch mudou desde quando você começou sua edição. Você quer criar um novo branch?"
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr "Este campo é obrigatório."
@@ -13561,12 +15901,15 @@ msgstr "Esse grupo"
msgid "This group does not provide any group Runners yet."
msgstr "Este grupo não fornece nenhum grupo de Runners ainda."
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "Essa issue é confidencial."
@@ -13588,15 +15931,15 @@ msgstr ""
msgid "This is your current session"
msgstr "Esta é a sua sessão atual"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "Essa issue é confidencial"
msgid "This issue is locked."
msgstr "Essa issue está bloqueada."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "Esta tarefa depende de um usuário para acionar seu processo. Geralmente eles são usados ​​para implantar código em ambientes de produção"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "Esta tarefa depende das tarefas do upstream que precisam ser bem-sucedidos para que essa tarefa seja acionada"
@@ -13651,9 +15994,15 @@ msgstr "Essa tarefa é o deploy mais recente para %{link}."
msgid "This job requires a manual action"
msgstr "Essa tarefa exige uma ação manual"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Isto significa que você não pode entregar código até que crie um repositório vazio ou importe um existente."
@@ -13672,9 +16021,6 @@ msgstr "Esta página não está disponível porque você não tem permissão par
msgid "This page will be removed in a future release."
msgstr "Esta página será removida em uma versão futura."
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13682,7 +16028,7 @@ msgid "This pipeline makes use of a predefined CI/CD configuration enabled by <b
msgstr ""
msgid "This project"
-msgstr "Esse projeto"
+msgstr "Este projeto"
msgid "This project does not belong to a group and can therefore not make use of group Runners."
msgstr "Este projeto não pertence a um grupo e, portanto, não pode usar os Runners do grupo."
@@ -13694,7 +16040,7 @@ msgid "This project does not have billing enabled. To create a cluster, <a href=
msgstr "Este projeto não possui faturamento ativado. Para criar um cluster, <a href=%{linkToBilling} target=\"_blank\" rel=\"noopener noreferrer\">ative o faturamento <i class=\"fa fa-external-link\" aria-hidden=\"true\"></i></a> e tente novamente."
msgid "This repository"
-msgstr "Esse repositório"
+msgstr "Este repositório"
msgid "This repository is currently empty. A new Auto DevOps pipeline will be created after a new file has been pushed to a branch."
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr "Este Runner somente será executado em Pipelines acionados em branches p
msgid "This setting can be overridden in each project."
msgstr "Essa configuração pode ser substituída em cada projeto."
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr "Essa configuração atualizará o hostname usado para gerar e-mails de commit privados. %{learn_more}"
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr "Esse usuário não tem identidades"
@@ -13735,6 +16087,9 @@ msgstr "Esses e-mails se tornam automaticamente issues (com os comentários se t
msgid "Thursday"
msgstr "Quinta-feira"
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr "Tempo entre a criação da solicitação de incorporação e a aceitaçÃ
msgid "Time estimate"
msgstr "Estimativa de tempo"
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "Tempo em segundos o GitLab aguardará uma resposta do serviço externo. Quando o serviço não responder a tempo, o acesso será negado."
@@ -13762,6 +16126,9 @@ msgstr "Tempo restante"
msgid "Time spent"
msgstr "Tempo gasto"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "Acompanhamento de tempo"
@@ -13771,12 +16138,21 @@ msgstr "Tempo até a primeira solicitação de incorporação"
msgid "TimeTrackingEstimated|Est"
msgstr "Est"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "Estimado:"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "Gasto"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "%s dias atrás"
@@ -13900,6 +16276,9 @@ msgstr "agora"
msgid "Timeago|right now"
msgstr "agora mesmo"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "Tempo limite"
@@ -13923,7 +16302,7 @@ msgid "Title"
msgstr "Título"
msgid "Title:"
-msgstr ""
+msgstr "Título:"
msgid "Titles and Filenames"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr "Para o GitLab"
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "Para conectar repositórios do GitHub, você pode usar um %{personal_access_token_link}. Ao criar seu Token de Acesso Pessoal, você precisará selecionar o escopo do <code>repositório</code>, então podemos exibir uma lista de seus repositórios públicos e privados que estão disponíveis para conexão."
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "Para conectar repositórios do GitHub, primeiro você precisa autorizar o GitLab a acessar a lista de seus repositórios do GitHub:"
@@ -13973,12 +16358,6 @@ msgstr "Para ajudar a melhorar o GitLab e sua experiência de usuário, o GitLab
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "Para ajudar a melhorar o GitLab, gostaríamos de coletar periodicamente informações de uso. Isso pode ser alterado a qualquer momento em %{settings_link_start}Configurações%{link_end}. %{info_link_start}Mais informações%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Para importar repositórios do GitHub, você pode usar um %{personal_access_token_link}. Ao criar seu Token de Acesso Pessoal, você precisará selecionar o escopo <code>repo</code>, para que possamos exibir uma lista de seus repositórios públicos e privados que estão disponíveis para importação."
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "Para importar repositórios do GitHub, primeiro você precisa autorizar o GitLab a acessar a lista de seus repositórios do GitHub:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "Para importar um repositório SVN, confira %{svn_link}."
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "Para configurar a autenticação SAML para o seu grupo por meio de um provedor de identidade, como Azure, Okta, Onelogin, Ping Identity ou seu provedor SAML 2.0 personalizado:"
+msgid "To set up this service:"
+msgstr "Para configurar este serviço:"
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,24 +16430,27 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr "Para ampliar sua pesquisa, alterar ou remover filtros."
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
msgid "Today"
msgstr "Hoje"
-msgid "Todo"
-msgstr "Pendente"
-
-msgid "Todo was successfully marked as done."
+msgid "Toggle Markdown preview"
msgstr ""
-msgid "Todos"
-msgstr "Afazeres"
-
msgid "Toggle Sidebar"
msgstr "Alternar barra lateral"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr "Alternar descrição de commit"
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr "Alternar discussão"
-
msgid "Toggle emoji award"
msgstr "Alternar prêmio de emoji"
@@ -14075,18 +16472,27 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "Ativar/Desativar barra lateral"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "Mudar Status: Desligado"
msgid "ToggleButton|Toggle Status: ON"
msgstr "Mudar Status: Ligado"
+msgid "Toggled :%{name}: emoji award."
+msgstr ""
+
msgid "Toggles :%{name}: emoji award."
msgstr "Alternar :%{name}: prêmio de emoji."
-msgid "Token"
-msgstr "Token"
-
msgid "Tomorrow"
msgstr "Amanhã"
@@ -14105,6 +16511,9 @@ msgstr "Contribuições totais"
msgid "Total Time"
msgstr "Tempo Total"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "Tempo de teste total para todos os commits/merges"
@@ -14123,6 +16532,12 @@ msgstr "Acompanhe grupos de issues que compartilhem um tema, em projetos e marco
msgid "Track time with quick actions"
msgstr "Acompanhe o tempo com ações rápidas"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr "Transferir projeto"
@@ -14159,9 +16574,6 @@ msgstr "Um projeto com o mesmo nome ou caminho no namespace de destino já exist
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr "A transferência falhou, por favor contate um administrador."
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr "Visão em árvore"
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr "Use tudo que o GitLab tem para oferecer por 30 dias."
msgid "Try to fork again"
msgstr "Tente realizar o fork novamente"
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr "Terça-feira"
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "Ativar o Balcão de Atendimento"
@@ -14229,13 +16647,13 @@ msgid "Twitter"
msgstr "Twitter"
msgid "Two-Factor Authentication"
-msgstr ""
+msgstr "Autenticação de dois fatores"
msgid "Two-factor Authentication"
-msgstr ""
+msgstr "Autenticação de dois fatores"
msgid "Two-factor Authentication Recovery codes"
-msgstr ""
+msgstr "Códigos de recuperação de autenticação de dois fatores"
msgid "Two-factor Authentication has been disabled for this user"
msgstr ""
@@ -14247,7 +16665,7 @@ msgid "Type"
msgstr "Tipo"
msgid "U2F Devices (%{length})"
-msgstr ""
+msgstr "Dispositivos U2F (%{length})"
msgid "U2F only works with HTTPS-enabled websites. Contact your administrator for more details."
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr "URL"
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr "Não foi possível conectar ao servidor Prometheus"
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr "Não é possível carregar o diff. %{button_try_again}"
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr "Desfazer"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "Desconhecido"
@@ -14324,12 +16763,24 @@ msgstr "Desbloquear este %{issuableDisplayName}? <strong>Todos</strong> poderão
msgid "Unlocked"
msgstr "Desbloqueado"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "Reabrir discussão"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr "Desprogramar tarefa"
@@ -14366,6 +16817,15 @@ msgstr "Cancelar inscrição no nível do projeto"
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "Não verificado"
@@ -14375,15 +16835,27 @@ msgstr "Atualizado"
msgid "Upcoming"
msgstr "Em breve"
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "Atualizar"
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr "Atualizar"
+
msgid "Update now"
msgstr "Atualizar agora"
@@ -14414,6 +16886,9 @@ msgstr "Atualizado"
msgid "Updated %{updated_at} by %{updated_by}"
msgstr "Atualizado em %{updated_at} por %{updated_by}"
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "Atualizando"
@@ -14426,6 +16901,9 @@ msgstr "Aprimore seu plano"
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "Aprimore seu plano para ativar a Pesquisa Global Avançada."
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "Aprimore seu plano para ativar a Análise de Contribuição."
@@ -14489,6 +16967,9 @@ msgstr "Uso"
msgid "Usage ping is not enabled"
msgstr "Dados de uso não está habilitado"
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "Estatísticas de uso"
@@ -14631,22 +17112,22 @@ msgid "User was successfully updated."
msgstr ""
msgid "UserOnboardingTour|%{activeTour}/%{totalTours}"
-msgstr ""
+msgstr "%{activeTour}/%{totalTours}"
msgid "UserOnboardingTour|%{completed}/%{total} steps completed"
-msgstr ""
+msgstr "%{completed}/%{total} passos concluídos"
msgid "UserOnboardingTour|%{emphasisStart}Well done!%{emphasisEnd}%{lineBreak}%{lineBreak}That's it for our guided tour, congratulations for making it all the way to the end!%{lineBreak}%{lineBreak}We hope this gave you a good overview of GitLab and how it can help you. We'll now show you how to create your own project and invite your colleagues."
-msgstr ""
+msgstr "%{emphasisStart}Muito bem!%{emphasisEnd}%{lineBreak}%{lineBreak}Isso é tudo para a nossa visita guiada, parabéns por chegar até o fim!%{lineBreak}%{lineBreak}Esperamos que isso tenha lhe dado uma boa visão geral do GitLab e como ele pode ajudá-lo. Agora mostraremos como criar seu próprio projeto e convidar seus colegas."
msgid "UserOnboardingTour|Adding other members to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
-msgstr ""
+msgstr "A adição de outros membros a um projeto é feita através das Configurações do Projeto. Clique em %{emphasisStart}Configurações%{emphasisEnd}."
msgid "UserOnboardingTour|Alright, that's it for Commits. Let's take a look at the %{emphasisStart}Branches%{emphasisEnd}."
-msgstr ""
+msgstr "Certo, finalizamos os Commits. Vamos dar uma olhada nos %{emphasisStart}Branches%{emphasisEnd}."
msgid "UserOnboardingTour|Awesome! Now click on %{emphasisStart}Members%{emphasisEnd}."
-msgstr ""
+msgstr "Incrível! Agora clique em %{emphasisStart}Membros%{emphasisEnd}."
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}Compare%{emphasisEnd} buttons to compare a branch to master."
msgstr ""
@@ -14657,20 +17138,26 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr "Fechar 'Aprender GitLab'"
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
msgid "UserOnboardingTour|Create a project"
-msgstr ""
+msgstr "Crie um projeto"
msgid "UserOnboardingTour|Exit 'Learn GitLab'"
msgstr ""
msgid "UserOnboardingTour|Got it"
-msgstr ""
+msgstr "Entendi"
+
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr "Ótimo trabalho! %{clapHands} Esperamos que o tour tenha sido útil e que você tenha aprendido a usar o GitLab.%{lineBreak}%{lineBreak}Adoraríamos ter sua opinião sobre este tour.%{lineBreak}%{lineBreak}%{emphasisStart}Quão útil você diria que este tour foi?%{emphasisEnd}%{lineBreak}%{lineBreak}"
msgid "UserOnboardingTour|Guided GitLab Tour"
-msgstr ""
+msgstr "Tour guiado do GitLab"
msgid "UserOnboardingTour|Here you can compare the changes of this branch to another one. Changes are divided by files so that it's easier to see what was changed where."
msgstr ""
@@ -14691,7 +17178,7 @@ msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}
msgstr ""
msgid "UserOnboardingTour|Invite colleagues"
-msgstr ""
+msgstr "Convide colegas"
msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progess in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks like when the list is filtered by a label."
msgstr ""
@@ -14709,19 +17196,19 @@ msgid "UserOnboardingTour|Let's take a closer look at the repository of this pro
msgstr ""
msgid "UserOnboardingTour|No thanks"
-msgstr ""
+msgstr "Não obrigado"
msgid "UserOnboardingTour|Ok, let's go"
-msgstr ""
+msgstr "Ok, vamos lá"
msgid "UserOnboardingTour|Ok, show me"
-msgstr ""
+msgstr "Ok, mostre-me"
msgid "UserOnboardingTour|Open one of the issues by clicking on its title."
msgstr ""
msgid "UserOnboardingTour|Restart this step"
-msgstr ""
+msgstr "Reiniciar esta etapa"
msgid "UserOnboardingTour|Skip this step"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr "Snippets"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr "Snippets no GitLab podem ser privados, internos ou públicos."
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr "Inscrever-se"
@@ -14822,6 +17315,9 @@ msgstr "Este usuário tem um perfil privado"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr "Este usuário não contribuiu para nenhum projeto"
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "Ver tudo"
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "Usuários"
@@ -14886,7 +17385,7 @@ msgid "Using required encryption strategy when encrypted field is missing!"
msgstr ""
msgid "Validate"
-msgstr ""
+msgstr "Validar"
msgid "Validate your GitLab CI configuration file"
msgstr ""
@@ -14895,13 +17394,13 @@ msgid "Validations failed."
msgstr ""
msgid "Validity"
-msgstr ""
+msgstr "Validade"
msgid "Value"
-msgstr ""
+msgstr "Valor"
msgid "Variables"
-msgstr ""
+msgstr "Variáveis"
msgid "Various container registry settings."
msgstr "Várias configurações de registry container."
@@ -14927,14 +17426,17 @@ msgstr "Verificado"
msgid "Version"
msgstr "Versão"
+msgid "Very helpful"
+msgstr "Muito útil"
+
msgid "View app"
msgstr "Exibir aplicativo"
msgid "View dependency details for your project"
-msgstr ""
+msgstr "Ver detalhes de dependências para seu projeto"
msgid "View deployment"
-msgstr ""
+msgstr "Ver deploy"
msgid "View details: %{details_url}"
msgstr "Ver detalhes: %{details_url}"
@@ -14958,13 +17460,13 @@ msgid "View group labels"
msgstr "Visualizar etiquetas de grupo"
msgid "View in Sentry"
-msgstr ""
+msgstr "Visualizar no Sentry"
msgid "View it on GitLab"
msgstr "Ver no GitLab"
msgid "View job"
-msgstr ""
+msgstr "Ver tarefa"
msgid "View job trace"
msgstr ""
@@ -14991,10 +17493,10 @@ msgid "View the documentation"
msgstr "Ver a documentação"
msgid "Viewing commit"
-msgstr ""
+msgstr "Vendo commit"
msgid "Visibility"
-msgstr ""
+msgstr "Visibilidade"
msgid "Visibility and access controls"
msgstr "Visibilidade e controles de acesso"
@@ -15005,6 +17507,9 @@ msgstr "Nível de visibilidade"
msgid "Visibility level:"
msgstr "Nível de visibilidade:"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr "As configurações de visibilidade foram desativadas pelo administrador."
+
msgid "Visibility, project features, permissions"
msgstr "Visibilidade, recursos de projeto, permissões"
@@ -15026,16 +17531,28 @@ msgstr "Desconhecido"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr "%{stepStart}Etapa 1%{stepEnd}. Copie o seguinte script:"
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr "Abrir app de revisão"
msgid "VisualReviewApp|Review"
msgstr "Revisar"
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
-msgstr "Revise e comente diretamente no app de revisão"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
+msgstr ""
msgid "Vulnerabilities"
-msgstr ""
+msgstr "Vulnerabilidades"
+
+msgid "Vulnerabilities over time"
+msgstr "Vulnerabilidades ao longo do tempo"
-msgid "Vulnerability Chart"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr "Gravidade"
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "Precisa visualizar os dados? Solicite acesso ao administrador."
@@ -15110,12 +17633,9 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
-msgstr "Criamos uma pequena visita guiada que o ajudará a aprender os fundamentos do GitLab e como ele o ajudará a ser melhor no seu trabalho. Deve demorar apenas alguns minutos. Você será guiado por dois tipos de auxiliares, melhor reconhecidos pela sua cor."
-
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
msgstr "Detectamos spam potencial no %{humanized_resource_name}. Por favor, resolva o reCAPTCHA para continuar."
@@ -15167,6 +17687,9 @@ msgstr "Bem-vindo ao Visita Guiada ao GitLab"
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Quando um runner está bloqueado, não pode ser atribuído a outros projetos"
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr "Quando:"
msgid "White helpers give contextual information."
msgstr "Auxiliares brancos fornecem informações contextuais."
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "Quem pode ver esse grupo?"
@@ -15196,6 +17725,9 @@ msgstr "Quem poderá ver esse grupo?"
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr "Wiki foi atualizado com sucesso."
@@ -15268,15 +17800,9 @@ msgstr "documentação"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "Para criar um link para uma (nova) página, é so digitar %{link_example}"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "como instalar"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "Dica: Você pode especificar o caminho completo para o novo arquivo. Nós vamos criar automaticamente quaisquer diretórios ainda não existentes."
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "Nova página Wiki"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "Quer mesmo apagar essa página?"
@@ -15292,20 +17818,17 @@ msgstr "Alguém editou essa página ao mesmo tempo que você. Por favor olhe %{p
msgid "WikiPageConflictMessage|the page"
msgstr "a página"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "Criar %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr "Criar %{pageTitle}"
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "Atualizar %{page_title}"
-
-msgid "WikiPage|Page slug"
-msgstr "Nome amigável da página"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr "Atualizar %{pageTitle}"
msgid "WikiPage|Write your content or drag files here…"
msgstr "Escreva seu conteúdo ou arraste arquivos aqui…"
-msgid "Wiki|Create Page"
-msgstr "Criar página"
+msgid "Wiki|Create New Page"
+msgstr "Criar nova página"
msgid "Wiki|Create page"
msgstr "Criar página"
@@ -15325,6 +17848,9 @@ msgstr "Nova página"
msgid "Wiki|Page history"
msgstr "Histórico da página"
+msgid "Wiki|Page title"
+msgstr "Título da página"
+
msgid "Wiki|Page version"
msgstr "Versão da página"
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15368,7 +17897,7 @@ msgid "Yes"
msgstr "Sim"
msgid "Yes or No"
-msgstr ""
+msgstr "Sim ou não"
msgid "Yes, add it"
msgstr "Sim, adicionar"
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr "Você está conectado ao servidor Prometheus, mas atualmente não há dados para exibir."
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr "Você pode facilmente contribuir para eles pedindo para se juntar nesses
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Você pode instalar facilmente um Runner em um cluster Kubernetes. %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,8 +18004,11 @@ msgstr "Você somente pode adicionar arquivos quando estiver em um branch"
msgid "You can only edit files when you are on a branch"
msgstr "Você só pode editar arquivos quando estiver em um branch"
-msgid "You can only merge once the items above are resolved"
-msgstr "Você só pode fazer o merge quando os itens acima forem resolvidos"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
+msgstr ""
msgid "You can only transfer the project to namespaces you manage."
msgstr "Você só pode transferir o projeto para namespaces que você gerencia."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "Você pode testar o seu .gitlab-ci.yml no %{linkStart}CI Lint%{linkEnd}."
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr "Você não pode se passar por um usuário bloqueado"
@@ -15511,9 +18052,6 @@ msgstr "Você não pode escrever nesta instância somente-leitura do GitLab."
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr "Você ainda não tem nenhuma inscrição"
@@ -15541,6 +18079,18 @@ msgstr "Você não tem nenhum aplicativo autorizado"
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr "Você recebeu acesso %{access_level} ao %{source_link} %{source_type}."
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "Você atingiu o limite de seu projeto"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Você precisará usar nomes de branch diferentes para obter uma comparação válida."
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr "Seus Grupos"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,8 +18271,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "Seus lembretes"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr "Seu token de redefinição de senha expirou."
@@ -15793,12 +18358,21 @@ msgstr "Seus projetos"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "um usuário excluído"
msgid "added %{created_at_timeago}"
msgstr "adicionado %{created_at_timeago}"
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "atrás"
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr "entre outras coisas"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr "não foi possível bloquear outros"
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr "não é possível bloquear a si próprio"
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}Saiba mais sobre Verificação de Container %{linkEndTag}"
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr "Classe"
@@ -15964,12 +18553,12 @@ msgstr "Fazer scan no container"
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "A varredura de contêiner detectou vulnerabilidades conhecidas em suas imagens docker."
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
+msgstr ""
+
msgid "ciReport|Create issue"
msgstr "Criar issue"
-msgid "ciReport|Create merge request"
-msgstr "Criar merge request"
-
msgid "ciReport|DAST"
msgstr "DAST"
@@ -15985,10 +18574,10 @@ msgstr "Verificação de dependência"
msgid "ciReport|Description"
msgstr "Descrição"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,33 +18598,14 @@ msgstr "Identificadores"
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr "Instâncias"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "Saiba mais sobre como interagir com relatórios de segurança (Alpha)."
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "O gerenciamento de licenças detectou apenas %d licença para o branch de origem"
-msgstr[1] "O gerenciamento de licenças detectou apenas %d licenças para o branch de origem"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "O gerenciamento de licenças detectou %d nova licença"
-msgstr[1] "O gerenciamento de licenças detectou %d novas licenças"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "O gerenciamento de licenças não detectou licenças para somente o branch de origem"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "Gerenciamento de licenças não detectou novas licenças"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr ""
msgid "ciReport|Links"
msgstr "Links"
@@ -16061,6 +18631,9 @@ msgstr "Sem mudanças nas métricas de desempenho"
msgid "ciReport|Performance metrics"
msgstr "Métricas de desempenho"
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16120,6 +18693,9 @@ msgstr[1] "Usado por %{packagesString} e %{lastPackage}"
msgid "ciReport|View full report"
msgstr "Visualizar relatório completo"
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr "conectando"
msgid "could not read private key, is the passphrase correct?"
msgstr "não foi possível ler a chave privada, a senha está correta?"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr "personalizar"
@@ -16176,8 +18755,11 @@ msgstr[1] "dias"
msgid "deleted"
msgstr ""
-msgid "deploy token"
-msgstr "token de deploy"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
msgid "detached"
msgstr ""
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr "desabilitado"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr "concluído"
@@ -16198,17 +18775,29 @@ msgid_plural "drafts"
msgstr[0] "rascunho"
msgstr[1] "rascunhos"
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "habilitado"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
-msgstr "épico"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
+msgstr ""
msgid "error"
msgstr ""
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "aqui"
@@ -16296,21 +18888,21 @@ msgstr "é inválido porque há bloqueio no recebimento de dados"
msgid "is invalid because there is upstream lock"
msgstr "é inválido porque há bloqueio no envio de dados"
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "não é um certificado X509 válido."
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr "issue"
-msgid "issue boards"
-msgstr "painéis"
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr "versão mais recente"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
-msgstr "gerenciamento de licenças"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "bloqueador por %{path_lock_user_name} %{created_at}"
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "merge request"
@@ -16364,6 +18965,15 @@ msgstr "%{commitCount} será adicionado à %{targetBranch}."
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "Por favor, restaurar ou usar um branch %{missingBranchName} diferente"
@@ -16443,7 +19053,7 @@ msgid "mrWidget|Deployment statistics are not available currently"
msgstr "Estatísticas de deploy não estão disponíveis atualmente"
msgid "mrWidget|Did not close"
-msgstr "mrWidget|Não foi possível fechar"
+msgstr "Não foi possível fechar"
msgid "mrWidget|Email patches"
msgstr "Email patches"
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr "Merge realizado por"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr "Nenhuma aprovação necessária"
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "Merge de"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "Resolver conflitos"
@@ -16571,8 +19187,8 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr "Existem conflitos de merge"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "Há discussões não resolvidas. Por favor, resolva estas discussões"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr ""
@@ -16583,9 +19199,21 @@ msgstr "Falha ao realizar merge automaticamente"
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "Esse merge request está em processamento"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Este projeto está arquivado, a escrita foi desativada"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "Você não tem permissão para editar este projeto diretamente. Por favor, faça fork no projeto para fazer alterações."
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "Você pode fazer merge manualmente usando o"
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "branch não existe."
@@ -16628,9 +19259,15 @@ msgstr "novo merge request"
msgid "no contributions"
msgstr "nenhuma contribuição"
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr "nenhum"
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "e-mails de notificação"
@@ -16643,8 +19280,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "ou"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16659,8 +19296,11 @@ msgstr[1] "pais"
msgid "password"
msgstr "senha"
-msgid "personal access token"
-msgstr "token de acesso pessoal"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] "projeto"
msgstr[1] "projetos"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr "ações rápidas"
msgid "register"
msgstr "registrar"
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "restante"
@@ -16699,6 +19345,9 @@ msgstr "remover a data de vencimento"
msgid "remove weight"
msgstr "remover peso"
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr "este documento"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "para ajudar seus contribuintes à se comunicar de maneira eficaz!"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr "atualizado"
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "nome do usuário"
@@ -16803,6 +19475,9 @@ msgstr "use clusters Kubernetes para deploy do seu código!"
msgid "verify ownership"
msgstr "verificar propriedade"
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/pt_PT/gitlab.po b/locale/pt_PT/gitlab.po
index 9a2ec349594..6e13301ff56 100644
--- a/locale/pt_PT/gitlab.po
+++ b/locale/pt_PT/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: pt-PT\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:24\n"
+"PO-Revision-Date: 2019-09-24 10:11\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (de %{timeoutSource})"
msgid " Please sign in."
msgstr " Por favor, inicia a sessão."
@@ -27,6 +30,12 @@ msgstr " Tens de fazer isto antes de %{grace_period_deadline}."
msgid " and"
msgstr " e"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] " melhorado em %d pontos"
msgid " or "
msgstr " ou "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " ou <#epic id>"
msgid " or <#issue id>"
msgstr " ou <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d comentário"
@@ -53,14 +68,19 @@ msgstr[1] "%d comentários"
msgid "%d commit"
msgid_plural "%d commits"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d envio"
+msgstr[1] "%d envios"
msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] "%d envio atrás"
msgstr[1] "%d envios atrás"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d envio"
+msgstr[1] "%d envios"
+
msgid "%d commits"
msgstr "%d envios"
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d resultado do teste fixo"
msgstr[1] "%d resultados do teste fixos"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d problema"
@@ -106,19 +131,29 @@ msgstr[1] "%d pedidos de mesclagem"
msgid "%d merge request that you don't have access to."
msgid_plural "%d merge requests that you don't have access to."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d pedido de mesclagem ao qual não tens acesso."
+msgstr[1] "%d pedidos de mesclagem ao qual não tens acesso."
msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d métrica"
msgstr[1] "%d métricas"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "mais %d comentário"
msgstr[1] "mais %d comentários"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d fase alterada"
@@ -137,13 +172,13 @@ msgstr[1] "%s envios adicionais foram omitidos para prevenir problemas de desemp
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "Tópico de %{authorsName}"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} autorizou %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] "%{count} aprovações obrigatórias de %{name}"
msgid "%{count} approvals from %{name}"
msgstr "%{count} aprovações de %{name}"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "mais %{count}"
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] "%{count} comentário pendente"
msgstr[1] "%{count} comentários pendentes"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} Tenta fazer cherry-pick neste envio novamente."
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} Tenta reverter este envio novamente."
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} apagado"
@@ -192,9 +242,12 @@ msgid "%{gitlab_ci_yml} not found in this commit"
msgstr "%{gitlab_ci_yml} não foi encontrado neste envio"
msgid "%{group_docs_link_start}Groups%{group_docs_link_end} allow you to manage and collaborate across multiple projects. Members of a group have access to all of its projects."
-msgstr "%{group_docs_link_start}Grupos%{group_docs_link_end} permitem-te gerires e colaborares em vários projetos. Os membros de um grupo têm acesso a todos os teus projetos."
+msgstr "%{group_docs_link_start}Grupos%{group_docs_link_end} permitem-te gerir e colaborar em vários projetos. Os membros de um grupo têm acesso a todos os teus projetos."
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
+msgstr "%{group_name} usa contas de gestão de grupo. Precisas de criar uma nova conta no GitLab que será gerida por %{group_name}."
+
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
msgstr ""
msgid "%{issuableType} will be removed! Are you sure?"
@@ -204,26 +257,29 @@ msgid "%{label_for_message} unavailable"
msgstr "%{label_for_message} indisponível"
msgid "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free, automated, and open certificate authority (CA), that give digital certificates in order to enable HTTPS (SSL/TLS) for websites."
-msgstr "%{lets_encrypt_link_start}Vamos Criptografar%{lets_encrypt_link_end} é uma autoridade de certificação (CA) grátis, automatizada e aberta, que fornece certificados digitais para habilitar HTTPS (SSL/TLS) a sites."
+msgstr "%{lets_encrypt_link_start}Vamos Criptografar%{lets_encrypt_link_end} é uma autoridade de certificação (CA) grátis, automatizada e aberta, que fornece certificados digitais para ativar HTTPS (SSL/TLS) a sites."
msgid "%{level_name} is not allowed in a %{group_level_name} group."
msgstr "%{level_name} não é permitido num grupo %{group_level_name}."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
-msgstr ""
-
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "a visibilidade de %{level_name} foi restringida pelo administrador."
+msgstr "%{level_name} não é permitido uma vez que o projeto de origem do fork tem uma visibilidade mais baixa."
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}Lê mais%{link_end} sobre as permissões de função"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Iniciado"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} está bloqueado pelo Utilizador do GitLab %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText}, este problema será encerrado automaticamente."
@@ -252,16 +308,16 @@ msgid "%{service_title} settings saved, but not activated."
msgstr "%{service_title} definições guardadas, mas não ativadas."
msgid "%{size} GiB"
-msgstr ""
+msgstr "%{size} GiB"
msgid "%{size} KiB"
-msgstr ""
+msgstr "%{size} KiB"
msgid "%{size} MiB"
-msgstr ""
+msgstr "%{size} MiB"
msgid "%{size} bytes"
-msgstr ""
+msgstr "%{size} bytes"
msgid "%{spammable_titlecase} was submitted to Akismet successfully."
msgstr "%{spammable_titlecase} foi enviado ao Akismet com sucesso."
@@ -284,8 +340,11 @@ msgstr "%{strong_start}%{human_size}%{strong_end} Ficheiros"
msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%{strong_start}%{tag_count}%{strong_end} Tag"
+msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Tags"
+
+msgid "%{tabname} changed"
+msgstr ""
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
@@ -302,13 +361,25 @@ msgid "%{title} changes"
msgstr "Alterações de %{title}"
msgid "%{unstaged} unstaged and %{staged} staged changes"
-msgstr "%{unstaged} fases não alterada e %{staged} fases alteradas"
+msgstr "%{unstaged} fases não alteradas e %{staged} fases alteradas"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}Aprende mais%{usage_ping_link_end} sobre quais informações são compartilhadas com o GitLab Inc."
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
-msgstr "página de perfil de %{user_name}"
+msgstr "Página de perfil de %{user_name}"
+
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
msgid "%{verb} %{time_spent_value} spent time."
msgstr "%{verb} %{time_spent_value} tempo passado."
@@ -319,29 +390,44 @@ msgstr "'%{level}' não é um nível de visibilidade válido"
msgid "'%{source}' is not a import source"
msgstr "'%{source}' não é uma fonte de importação"
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "(%d fechado)"
+msgstr[1] "(%d fechados)"
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} mesclado)"
msgid "(No changes)"
msgstr "(Sem alterações)"
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr "(verificar progresso)"
msgid "(external source)"
msgstr "(fonte externa)"
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ mais %{count}"
msgid "+ %{moreCount} more"
msgstr "+ mais %{moreCount}"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr "+ mais %{extraOptionCount}"
@@ -349,10 +435,10 @@ msgid ", or "
msgstr ", ou "
msgid "- Runner is active and can process any new jobs"
-msgstr "- O runner está ativo e pode processar novos trabalhos"
+msgstr "- O executador está ativo e pode processar novos trabalhos"
msgid "- Runner is paused and will not receive any new jobs"
-msgstr "- O runner está em pausa e não receberá nenhum trabalho novo"
+msgstr "- O executador está em pausa e não receberá nenhum trabalho novo"
msgid "- show less"
msgstr "- mostrar menos"
@@ -373,7 +459,7 @@ msgstr[1] "%{count} alterações de %{type}"
msgid "1 Day"
msgid_plural "%d Days"
msgstr[0] "1 Dia"
-msgstr[1] "%d dias"
+msgstr[1] "%d Dias"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
@@ -410,8 +496,8 @@ msgstr[1] "%{merge_requests} pedidos de mesclagem abertos"
msgid "1 pipeline"
msgid_plural "%d pipelines"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 pipeline"
+msgstr[1] "%d pipelines"
msgid "1 role"
msgid_plural "%d roles"
@@ -441,11 +527,8 @@ msgstr "20-29 contribuições"
msgid "2FA"
msgstr "A2F"
-msgid "2FA enabled"
-msgstr "A2F ativado"
-
msgid "2FADevice|Registered On"
-msgstr ""
+msgstr "Registado Em"
msgid "3 days"
msgstr "3 dias"
@@ -472,7 +555,7 @@ msgid "404|Page Not Found"
msgstr "Página Não Encontrada"
msgid "404|Please contact your GitLab administrator if you think this is a mistake."
-msgstr "Por favor, contacta o teu administrador do GitLab se achas que isto é um erro."
+msgstr "Por favor, contacta o teu administrador do GitLab se pensas que isto é um erro."
msgid "8 hours"
msgstr "8 horas"
@@ -490,7 +573,10 @@ msgid "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> will ad
msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> adicionará \"Por <a href=\"#\">johnsmith@example.com</a>\" a todos os problemas e comentários, originalmente, criados por johnsmith@example.com. Por padrão, o endereço de email ou nome de utilizador é ocultado para garantir a privacidade do utilizador. Use esta opção se quiser mostrar o endereço de email completo."
msgid "<no name set>"
-msgstr ""
+msgstr "<nenhum nome definido>"
+
+msgid "<no scopes selected>"
+msgstr "<nenhum escopo selecionado>"
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} alterações não organizadas</strong> e <strong>%{stagedFilesLength} alterações organizadas</strong>"
@@ -505,13 +591,13 @@ msgid "<strong>%{group_name}</strong> group members"
msgstr "Membros do grupo <strong>%{group_name}</strong>"
msgid "<strong>%{pushes}</strong> pushes, more than <strong>%{commits}</strong> commits by <strong>%{people}</strong> contributors."
-msgstr ""
+msgstr "<strong>%{pushes}</strong> empurramentos, mais do que <strong>%{commits}</strong> envios por <strong>%{people}</strong> contribuidores."
msgid "<strong>Deletes</strong> source branch"
msgstr "<strong>Apagar</strong> o ramo de origem"
msgid "A 'Runner' is a process which runs a job. You can set up as many Runners as you need."
-msgstr "Um 'Runner' é um processo que executa um trabalho. Podes configurar tantos 'Runners' quantos precisares."
+msgstr "Um 'Executador' é um processo que executa um trabalho. Podes configurar tantos 'Executadores' quantos precisares."
msgid "A .NET Core console application template, customizable for any .NET Core project"
msgstr "Um .NET Core de um modelo da aplicação de consola, personalizável para qualquer projeto .NET Core"
@@ -528,6 +614,9 @@ msgstr "Um site Hugo que usa o Netlify para CI/CD, em vez do GitLab, mas ainda c
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "Um site Jekyll que usa o Netlify para CI/CD, em vez do GitLab, mas ainda com todos os outros ótimos recursos do GitLab."
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr "Uma conta Vamos Criptografar será configurada para esta instalação no GitLab ao usar o teu endereço de email. Irás receber emails de aviso de expiração de certificados."
@@ -541,7 +630,7 @@ msgid "A fork is a copy of a project.<br />Forking a repository allows you to ma
msgstr "Um fork é uma cópia de um projeto.<br />Bifurcação de um repositório permite que faças alterações sem afetar o projeto original."
msgid "A member of the abuse team will review your report as soon as possible."
-msgstr ""
+msgstr "Um membro da equipa de abuso irá, rever a tua denúncia assim que possível."
msgid "A new branch will be created in your fork and a new merge request will be started."
msgstr "Um novo ramo será criado na tua bifurcação e um novo pedido de mesclagem será iniciado."
@@ -564,6 +653,9 @@ msgstr "Um modelo pronto para uso para usar em aplicações iOS Swift."
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "Uma expressão regular que será usada para encontrar a saída de cobertura de teste na localização de trabalho. Deixa em branco para desativar"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "Um utilizador com permissão de escrita ao ramo de origem selecionado para esta opção"
@@ -571,6 +663,9 @@ msgid "API Help"
msgstr "Ajuda da API"
msgid "API Token"
+msgstr "Token API"
+
+msgid "Abort"
msgstr ""
msgid "About GitLab"
@@ -619,14 +714,74 @@ msgid "Access to '%{classification_label}' not allowed"
msgstr "Acesso a(ao) '%{classification_label}' não permitido"
msgid "AccessDropdown|Groups"
-msgstr ""
+msgstr "Grupos"
msgid "AccessDropdown|Roles"
-msgstr ""
+msgstr "Funções"
msgid "AccessDropdown|Users"
+msgstr "Utilizadores"
+
+msgid "AccessTokens|Access Tokens"
+msgstr "Tokens de Acesso"
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "Tens a certeza? Qualquer RSS ou URL do calendário atualmente em uso irá parar de funcionar."
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr "Tens a certeza? Qualquer problema de endereços de email em uso, irá parar de funcionar."
+
+msgid "AccessTokens|Created"
+msgstr "Criado"
+
+msgid "AccessTokens|Feed token"
+msgstr "Token de feed"
+
+msgid "AccessTokens|Incoming email token"
+msgstr "Token de email recebido"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "Não pode ser usado para acessar nenhum outro dado."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Mantém este token secreto. Qualquer um que conseguir isso, pode criar problemas como se fossem tu. Deverias %{link_reset_it}, caso isso acontecer."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Mantém este token secreto. Qualquer pessoa que tenha contacto com ele pode ler atividades e enviar feeds RSS ou o feed da tua agenda como se fossem tu. Deverias %{link_reset_it}, caso isso acontecer."
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr "Tokens de Acesso Pessoal"
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr "Elas são as únicas palavras-passe aceites quando tens a autenticação de dois fatores (2FA) ativada."
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr "Também podes usar tokens de acesso pessoal para autenticar contra Git através de HTTP."
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr "Podes gerar um token de acesso pessoal para cada aplicação que usas, que precisa de acesso à API do GitLab."
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
msgstr ""
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr "redefini-lo"
+
msgid "Account"
msgstr "Conta"
@@ -634,7 +789,7 @@ msgid "Account and limit"
msgstr "Conta e limite"
msgid "Account: %{account}"
-msgstr ""
+msgstr "Conta: %{account}"
msgid "Action to take when receiving an alert."
msgstr "Ação a tomar ao receber um alerta."
@@ -645,6 +800,9 @@ msgstr "Ativar Central de Serviços"
msgid "Active"
msgstr "Ativo"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr "Ativar %{type} Tokens (%{token_length})"
+
msgid "Active Sessions"
msgstr "Sessões Ativas"
@@ -654,10 +812,18 @@ msgstr "Atividade"
msgid "Add"
msgstr "Adicionar"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] "Adicionar %d problema"
+msgstr[1] "Adicionar %d problemas"
+
msgid "Add CHANGELOG"
-msgstr "Adicionar Registo de alterações"
+msgstr "Adicionar CHANGELOG"
msgid "Add CONTRIBUTING"
+msgstr "Adicionar CONTRIBUTING"
+
+msgid "Add GitLab to Slack"
msgstr ""
msgid "Add Group Webhooks and GitLab Enterprise Edition."
@@ -672,17 +838,32 @@ msgstr "Adicionar cluster Kubernetes"
msgid "Add README"
msgstr "Adicionar README"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr "Adicionar um token %{type}"
+
msgid "Add a GPG key"
+msgstr "Adicionar uma chave GPG"
+
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
msgstr ""
msgid "Add a bullet list"
msgstr "Adicionar uma lista de marcadores"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Adicionar um comentário geral para este %{noteable_name}."
msgid "Add a homepage to your wiki that contains information about your project and GitLab will display it here instead of this message."
-msgstr "Adiciona uma página inicial à tua wiki que contenha informações sobre o teu projeto e o GitLab irá exibi-lo aqui, ao invés desta mensagem."
+msgstr "Adiciona uma página inicial à tua wiki que confoi informações sobre o teu projeto e o GitLab irá exibi-lo aqui, ao invés desta mensagem."
msgid "Add a link"
msgstr "Adicionar um link"
@@ -696,16 +877,16 @@ msgstr "Adicionar uma tabela"
msgid "Add a task list"
msgstr "Adicionar uma lista de tarefas"
-msgid "Add a todo"
-msgstr "Adicionar um \"a fazer\""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Adiciona um texto adicional para aparecer em todas as comunicações por email. Limite de %{character_limit} caracteres"
msgid "Add an SSH key"
-msgstr ""
+msgstr "Adicionar uma chave SSH"
msgid "Add an issue"
+msgstr "Adicionar um problema"
+
+msgid "Add approval rule"
msgstr ""
msgid "Add approvers"
@@ -715,20 +896,23 @@ msgid "Add bold text"
msgstr "Adicionar texto em negrito"
msgid "Add child epic to an epic"
-msgstr ""
+msgstr "Adicionar épico filho a um épico"
msgid "Add comment now"
msgstr "Adicionar comentário agora"
msgid "Add email address"
-msgstr ""
+msgstr "Adicionar endereço de email"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
-msgstr "Adicionar cabeçalho e rodapé aos emails. Por favor, nota que as definições de cor só serão aplicadas dentro da interface da aplicação"
+msgstr "Adicionaa cabeçalho e rodapé aos emails. Por favor, nota que as definições de cor só serão aplicadas dentro da interface da aplicação"
msgid "Add image comment"
msgstr "Adicionar comentário de imagem"
+msgid "Add issues"
+msgstr "Adicionar problemas"
+
msgid "Add italic text"
msgstr "Adicionar texto em itálico"
@@ -747,26 +931,35 @@ msgstr "Adicionar nova aplicação"
msgid "Add new directory"
msgstr "Adicionar novo diretório"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr "Adicionar ou subtrair o tempo gasto"
msgid "Add reaction"
msgstr "Adicionar reação"
-msgid "Add to merge train"
+msgid "Add to Slack"
msgstr ""
-msgid "Add to merge train when pipeline succeeds"
+msgid "Add to epic"
msgstr ""
+msgid "Add to merge train"
+msgstr "Adicionar para a mesclagem de comboio"
+
+msgid "Add to merge train when pipeline succeeds"
+msgstr "Adicionar para a mesclagem de comboio quando o pipeline for bem-sucedido"
+
msgid "Add to project"
msgstr "Adicionar ao projeto"
msgid "Add to review"
msgstr "Adicionar à revisão"
-msgid "Add todo"
-msgstr "Adicionar \"a fazer\""
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "Adicionar utilizador(es) ao grupo:"
@@ -780,9 +973,27 @@ msgstr "Nenhum utilizador especificado."
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "Muitos utilizadores especificados (o limite é %{user_limit})"
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr "Adicionado em"
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "A adição de novas aplicações está desativada na tua instância do GitLab. Entra em contacto com o teu administrador do GitLab para obter a permissão"
@@ -796,10 +1007,19 @@ msgid "Adds"
msgstr "Adiciona"
msgid "Adds %{epic_ref} as child epic."
+msgstr "Adiciona %{epic_ref} como filho épico."
+
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
msgstr ""
-msgid "Adds a todo."
-msgstr "Adicionar um \"a fazer\"."
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "Ãrea de Administração"
@@ -811,7 +1031,7 @@ msgid "Admin Section"
msgstr "Secção de Administração"
msgid "Admin notes"
-msgstr ""
+msgstr "Notas de administração"
msgid "AdminArea| You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide \"Ghost-user\". To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
msgstr "Estás prestes a apagar, permanentemente, o utilizador %{username}. Problemas, pedidos de mesclagem, e grupos vinculados a ele, serão transferidos a um \"utilizador fantasma\" em todo o sistema. Para evitar a perda de dados, considera usar o recurso %{strong_start}bloquear utilizador%{strong_end}. Assim, que %{strong_start}apagares o utilizador%{strong_end}, não será possível desfazer ou recuperá-lo."
@@ -834,6 +1054,9 @@ msgstr "Erro ao parar trabalhos"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Estás prestes a parar todos os trabalhos. Isto irá interromper todos os trabalhos em execução."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr "Nota"
@@ -853,35 +1076,59 @@ msgid "AdminSettings|Auto DevOps domain"
msgstr "Domínio Auto DevOps"
msgid "AdminSettings|Enable shared runners for new projects"
-msgstr "Ativar runners compartilhados aos novos projetos"
+msgstr "Ativar executadores compartilhados aos novos projetos"
msgid "AdminSettings|Environment variables are protected by default"
msgstr "Variáveis de ambiente são protegidas por padrão"
msgid "AdminSettings|No required pipeline"
-msgstr ""
+msgstr "Nenhum pipeline necessário"
msgid "AdminSettings|Required pipeline configuration"
-msgstr ""
+msgstr "Configuração de pipeline necessária"
msgid "AdminSettings|Select a pipeline configuration file"
-msgstr ""
+msgstr "Seleciona um ficheiro de configuração de pipeline"
msgid "AdminSettings|Select a template"
-msgstr ""
+msgstr "Seleciona um modelo"
msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
-msgstr ""
+msgstr "Define uma %{link_start}configuração de pipeline%{link_end} automática incluída em toda a instância. Esta configuração de pipeline será executada após a Configurações do próprio projeto."
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
msgstr "Especifica um domínio para utilizar por padrão para cada projeto, Revisão Automática de Aplicações e Implementação Automática de fases."
msgid "AdminSettings|The required pipeline configuration can be selected from the %{code_start}gitlab-ci%{code_end} directory inside of the configured %{link_start}instance template repository%{link_end} or from GitLab provided configurations."
-msgstr ""
+msgstr "A configuração de pipeline necessária pode ser selecionada no diretório %{code_start}gitlab-ci%{code_end} dentro do %{link_start}repositório modelo de instância%{link_end} configurado ou das configurações fornecidas pelo GitLab."
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "Ao criar uma nova variável de ambiente, ela será protegida por padrão."
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "A2F Desativada"
@@ -970,13 +1217,19 @@ msgid "After a successful password update you will be redirected to login screen
msgstr "Após uma atualização de palavra-passe bem-sucedida, serás redirecionado à tela de início de sessão."
msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
-msgstr ""
+msgstr "Após uma atualização bem-sucedida da palavra-passe, serás redirecionado para a página de início de sessão, onde poderás iniciar a sessão com a nova palavra-passe."
msgid "Alert"
msgid_plural "Alerts"
msgstr[0] "Alerta"
msgstr[1] "Alertas"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "Alertas"
@@ -986,17 +1239,23 @@ msgstr "Todos"
msgid "All Members"
msgstr "Todos os Membros"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "Todas as alterações foram enviadas"
-msgid "All email addresses will be used to identify your commits."
+msgid "All cross-project dependencies have merged"
msgstr ""
+msgid "All email addresses will be used to identify your commits."
+msgstr "Todos os endereços de email serão usados para identificar os teus envios."
+
msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
msgstr "Todos os recursos estão ativos para os projetos vazios, a partir de modelos ou ao importar, mas poderás desativá-las, posteriormente, nas definições do projeto."
msgid "All groups and projects"
-msgstr ""
+msgstr "Todos os grupos e projetos"
msgid "All issues for this milestone are closed. You may close this milestone now."
msgstr "Todos os problemas para estes objetivos estão encerrados. Podes agora, fechar este objetivo."
@@ -1007,9 +1266,6 @@ msgstr "Todos os conflitos de mesclagem foram resolvidos. O pedido de mesclagem
msgid "All projects"
msgstr "Todos os projetos"
-msgid "All todos were marked as done."
-msgstr "Todos os \"a fazer\" foram marcados como concluídos."
-
msgid "All users"
msgstr "Todos os utilizadores"
@@ -1043,6 +1299,12 @@ msgstr "Permitir renderização de diagramas PlantUML em documentos Asciidoc."
msgid "Allow requests to the local network from hooks and services."
msgstr "Permitir pedidos à rede local dos hooks e serviços."
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr "Permitir que esta chave seja também, enviada ao repositório? (O padrão só permite o acesso pull)"
@@ -1055,6 +1317,9 @@ msgstr "Permitir que os utilizadores peçam acesso"
msgid "Allow users to request access if visibility is public or internal."
msgstr "Permitir que os utilizadores peçam acesso, caso a visibilidade for pública ou interna."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "Permissão para falhar"
@@ -1062,19 +1327,13 @@ msgid "Allows you to add and manage Kubernetes clusters."
msgstr "Permite -te adicionar e gerir clusters do Kubernetes."
msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
-msgstr "Também chamado de \"Emissor\" ou \"identificador de confiança de terceiros\""
+msgstr "Também chamado de \"Emissor\" ou \"Identificador de confiança de terceiros\""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
-msgstr "Também chamado de \"URL do serviço de terceiros\" ou \"URL de resposta\""
-
-msgid "Alternate support URL for help page"
-msgstr "Suporte alternativo URL para a página de ajuda"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "Alternativamente, podes usar um %{personal_access_token_link}. Quando crias o teu Token de Acesso Pessoal, vais precisar de selecionar o escopo do <code>repositório</code>, para que possamos exibir uma lista dos teus repositórios públicos e privados que estão disponíveis para serem conectados."
+msgstr "Também chamado de \"URL do serviço de terceiros\" ou \"URL de Resposta\""
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Alternativamente, podes usar um %{personal_access_token_link}. Quando crias o teu Token de Acesso Pessoal, vais precisar de selecionar o escopo do <code>repositório</code>, para que possamos mostrar a lista dos teus repositórios públicos e privados que estão disponíveis para importar."
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "Quantidade de tempo (em horas) que os utilizadores podem ignorar a configuração forçada da autenticação de dois fatores"
@@ -1088,8 +1347,8 @@ msgstr "Um campo vazio do Utilizador do GitLab adicionará o nome completo do ut
msgid "An error has occurred"
msgstr "Ocorreu um erro"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Ocorreu um erro ao adicionar um rascunho ao tópico."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "Ocorreu um erro ao adicionar um novo rascunho."
@@ -1116,7 +1375,7 @@ msgid "An error occurred when trying to resolve a comment. Please try again."
msgstr "Ocorreu um erro ao tentar resolver um comentário. Por favor, tenta novamente."
msgid "An error occurred when trying to resolve a discussion. Please try again."
-msgstr "Ocorreu um erro ao tentar resolver um tópico. Por favor, tenta novamente."
+msgstr "Ocorreu um erro ao tentar resolver uma discussão. Por favor, tenta novamente."
msgid "An error occurred when updating the issue weight"
msgstr "Ocorreu um erro ao atualizar o peso do problema"
@@ -1128,7 +1387,7 @@ msgid "An error occurred while deleting the comment"
msgstr "Ocorreu um erro ao apagar o comentário"
msgid "An error occurred while detecting host keys"
-msgstr "Ocorreu um erro ao detetar as chaves do host"
+msgstr "Ocorreu um erro ao detetar as chaves do administrador"
msgid "An error occurred while disabling Service Desk."
msgstr "Ocorreu um erro ao desativar a Central de Serviços."
@@ -1143,13 +1402,16 @@ msgid "An error occurred while enabling Service Desk."
msgstr "Ocorreu um erro ao ativar a Central de Serviços."
msgid "An error occurred while fetching environments."
-msgstr ""
+msgstr "Ocorreu um erro ao buscar os ambientes."
msgid "An error occurred while fetching folder content."
+msgstr "Ocorreu um erro ao buscar o conteúdo da pasta."
+
+msgid "An error occurred while fetching issues."
msgstr ""
msgid "An error occurred while fetching label colors."
-msgstr "Ocorreu um erro ao buscar as cores dos etiquetas."
+msgstr "Ocorreu um erro ao buscar as cores das etiquetas."
msgid "An error occurred while fetching markdown preview"
msgstr "Ocorreu um erro ao buscar a pré-visualização do markdown"
@@ -1190,6 +1452,9 @@ msgstr "Ocorreu um erro ao buscar os lançamentos. Por favor, tenta novamente."
msgid "An error occurred while fetching this tab."
msgstr "Ocorreu um erro ao buscar esta aba."
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "Ocorreu um erro ao receber os projetos"
@@ -1197,7 +1462,7 @@ msgid "An error occurred while importing project: %{details}"
msgstr "Ocorreu um erro durante a importação do projeto: %{details}"
msgid "An error occurred while initializing path locks"
-msgstr "Ocorreu um erro ao começar bloqueios de caminho"
+msgstr "Ocorreu um erro ao começar os bloqueios de caminho"
msgid "An error occurred while loading chart data"
msgstr "Ocorreu um erro ao carregar os dados do gráfico"
@@ -1235,12 +1500,12 @@ msgstr "Ocorreu um erro ao remover épicos."
msgid "An error occurred while removing issues."
msgstr "Ocorreu um erro ao remover problemas."
-msgid "An error occurred while rendering KaTeX"
-msgstr "Ocorreu um erro ao renderizar o KaTeX"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "Ocorreu um erro ao renderizar a mensagem de pré-visualização da transmissão"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "Ocorreu um erro ao recuperar as atividades do calendário"
@@ -1259,6 +1524,12 @@ msgstr "Ocorreu um erro ao guardar as definições de aprovação"
msgid "An error occurred while subscribing to notifications."
msgstr "Ocorreu um erro ao assinar as notificações."
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "Ocorreu um erro ao cancelar a assinatura das notificações."
@@ -1275,13 +1546,13 @@ msgid "An error occurred whilst committing your changes."
msgstr "Ocorreu um erro ao enviar as tuas alterações."
msgid "An error occurred whilst fetching the job trace."
-msgstr ""
+msgstr "Ocorreu um erro ao buscar a localização do trabalho."
msgid "An error occurred whilst fetching the latest pipeline."
msgstr "Ocorreu um erro ao buscar o pipeline mais recente."
msgid "An error occurred whilst getting files for - %{branchId}"
-msgstr ""
+msgstr "Ocorreu um erro ao obter ficheiros para - %{branchId}"
msgid "An error occurred whilst loading all the files."
msgstr "Ocorreu um erro durante o carregamento de todos os ficheiros."
@@ -1302,37 +1573,43 @@ msgid "An error occurred whilst loading the merge request."
msgstr "Ocorreu um erro ao carregar o pedido de mesclagem."
msgid "An error occurred whilst loading the pipelines jobs."
-msgstr ""
+msgstr "Ocorreu um erro ao carregar os trabalhos das pipelines."
msgid "An error occurred. Please try again."
msgstr "Ocorreu um erro. Por favor, tenta novamente."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr "Um problema pode ser uma falha (bug), um \"todo\" ou um pedido de recurso que precisa de ser discutido num projeto. Além disso, os problemas são pesquisáveis e filtráveis."
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "Ocorreu um erro inesperado ao verificar o ambiente do projeto."
msgid "An unexpected error occurred while checking the project runners."
-msgstr "Ocorreu um erro inesperado ao verificar os runners do projeto."
+msgstr "Ocorreu um erro inesperado ao verificar os executadores do projeto."
msgid "An unexpected error occurred while communicating with the Web Terminal."
-msgstr ""
+msgstr "Ocorreu um erro inesperado enquanto comunicava com o Terminal Web."
msgid "An unexpected error occurred while starting the Web Terminal."
-msgstr ""
+msgstr "Ocorreu um erro inesperado ao iniciar o Terminal Web."
msgid "An unexpected error occurred while stopping the Web Terminal."
-msgstr ""
+msgstr "Ocorreu um erro inesperado ao parar o Terminal Web."
msgid "Analytics"
+msgstr "Estatísticas"
+
+msgid "Analytics|Timeframe"
msgstr ""
msgid "Ancestors"
-msgstr ""
+msgstr "Ancestrais"
msgid "Anonymous"
msgstr "Anónimo"
msgid "Anti-spam verification"
-msgstr "Verificação anti-spam"
+msgstr "Verificação de anti-spam"
msgid "Any"
msgstr "Qualquer"
@@ -1347,7 +1624,10 @@ msgid "Any encrypted tokens"
msgstr "Quaisquer tokens encriptados"
msgid "Any namespace"
-msgstr "Qualquer namespace"
+msgstr "Qualquer espaço de nome"
+
+msgid "Any user"
+msgstr ""
msgid "Appearance"
msgstr "Aparência"
@@ -1391,6 +1671,9 @@ msgstr "Aplicações"
msgid "Applied"
msgstr "Aplicado"
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr "Aplicar sugestão"
@@ -1432,8 +1715,8 @@ msgstr[1] "%{count} aprovações obrigatórias de %{membersCount}"
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr "Todos os membros com a função de Desenvolvedor ou superior e proprietários de código (se houver)"
-msgid "ApprovalRule|Members"
-msgstr "Membros"
+msgid "ApprovalRule|Approvers"
+msgstr ""
msgid "ApprovalRule|Name"
msgstr "Nome"
@@ -1441,12 +1724,27 @@ msgstr "Nome"
msgid "ApprovalRule|No. approvals required"
msgstr "Nº de aprovações obrigatórias"
-msgid "ApprovalRule|e.g. QA, Security, etc."
+msgid "ApprovalRule|Rule name"
msgstr ""
+msgid "ApprovalRule|e.g. QA, Security, etc."
+msgstr "por exemplo, Controlo de Qualidade, Segurança, etc."
+
msgid "Approvals"
msgstr "Aprovações"
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "abr"
@@ -1454,7 +1752,7 @@ msgid "April"
msgstr "abril"
msgid "Archive jobs"
-msgstr ""
+msgstr "Arquivar trabalhos"
msgid "Archive project"
msgstr "Arquivar projeto"
@@ -1466,7 +1764,7 @@ msgid "Archived projects"
msgstr "Projetos arquivados"
msgid "Archiving the project will make it entirely read-only. It is hidden from the dashboard and doesn't show up in searches. <strong>The repository cannot be committed to, and no issues, comments or other entities can be created.</strong>"
-msgstr "Arquivar o projeto fará com que ele seja, completamente, somente de leitura. Ele está escondido do painel de controlo e não aparece em pesquisas. <strong>O repositório não pode ser comprometido, e nenhum problema, comentários ou outras entidades podem ser criadas.</strong>"
+msgstr "Arquivar o projeto fará com que ele seja, somente de leitura. Ele está escondido do painel de controlo e não aparece nas pesquisas. <strong>O repositório não pode ser comprometido, e nenhum problema, comentários ou outras entidades podem ser criados.</strong>"
msgid "Are you sure"
msgstr "Tens a certeza"
@@ -1483,9 +1781,18 @@ msgstr "Tens a certeza de que desejas cancelar a criação deste comentário?"
msgid "Are you sure you want to cancel editing this comment?"
msgstr "Tens a certeza de que desejas cancelar a edição deste comentário?"
-msgid "Are you sure you want to delete this device? This action cannot be undone."
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
msgstr ""
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
+msgid "Are you sure you want to delete this device? This action cannot be undone."
+msgstr "Tens a certeza de que desejas apagar este dispositivo? Esta ação não pode ser desfeita."
+
msgid "Are you sure you want to delete this list?"
msgstr "Tens a certeza de que desejas apagar esta lista?"
@@ -1520,13 +1827,16 @@ msgid "Are you sure you want to reset registration token?"
msgstr "Tens a certeza de que queres recriar o token de registo?"
msgid "Are you sure you want to reset the SCIM token? SCIM provisioning will stop working until the new token is updated."
-msgstr "Tens a certeza de que desejas repor o token SCIM? O provisionamento de SCIM irá parar de funcionar até que o novo token seja atualizado."
+msgstr "Tens a certeza de que desejas repor o token SCIM? O aprovisionamento de SCIM irá parar de funcionar até que o novo token seja atualizado."
msgid "Are you sure you want to reset the health check token?"
-msgstr "Tens a certeza de que queres reiniciar o token de estado de saúde?"
+msgstr "Tens a certeza de que queres reiniciar o token de verificação de saúde?"
+
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr "Tens a certeza de que desejas revogar este Token %{type}? Esta ação não pode ser desfeita."
msgid "Are you sure you want to revoke this nickname?"
-msgstr ""
+msgstr "Tens a certeza de que desejas revogar este apelido?"
msgid "Are you sure you want to stop this environment?"
msgstr "Tens a certeza de que desejas parar este ambiente?"
@@ -1535,31 +1845,37 @@ msgid "Are you sure you want to unlock %{path_lock_path}?"
msgstr "Tens a certeza de que queres desbloquear %{path_lock_path}?"
msgid "Are you sure you want to unsubscribe from the %{type}: %{link_to_noteable_text}?"
-msgstr "Tens a certeza de que desejas cancelar o recebimento do %{type}: %{link_to_noteable_text}?"
+msgstr "Tens a certeza de que desejas cancelar a assinatura do %{type}: %{link_to_noteable_text}?"
msgid "Are you sure?"
msgstr "Tens a certeza?"
msgid "Are you sure? All commits that were signed with this GPG key will be unverified."
-msgstr ""
+msgstr "Tens a certeza? Todos os enviso que foram assinados com esta chave GPG não serão verificados."
msgid "Are you sure? Removing this GPG key does not affect already signed commits."
-msgstr ""
+msgstr "Tens a certeza? Remover esta chave GPG não afeta as confirmações já enviadas."
msgid "Are you sure? This will invalidate your registered applications and U2F devices."
-msgstr ""
+msgstr "Tens a certeza? Isto invalidará as tuas aplicações registadas e dispositivos U2F."
msgid "Artifact ID"
msgstr "ID do Artefacto"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Artefactos"
msgid "As U2F devices are only supported by a few browsers, we require that you set up a two-factor authentication app before a U2F device. That way you'll always be able to log in - even when you're using an unsupported browser."
-msgstr ""
+msgstr "Como os dispositivos U2F são somente suportados por alguns navegadores, exigimos que configures uma aplicação de autenticação de dois fatores antes de um dispositivo U2F. Dessa forma, poderás sempre iniciar sessão, mesmo quando estiveres a usar um navegador não suportado."
msgid "AsanaService|%{user} pushed to branch %{branch} of %{project_name} ( %{commit_url} ):"
-msgstr ""
+msgstr "%{user} empurrou para o ramo %{branch} de %{project_name} ( %{commit_url} ):"
msgid "AsanaService|Asana - Teamwork without email"
msgstr "Asana - Trabalho em equipa sem email"
@@ -1574,13 +1890,13 @@ msgid "Ascending"
msgstr "Ascendente"
msgid "Ask your group maintainer to set up a group Runner."
-msgstr "Pede ao responsável do grupo para configurar um grupo Runner."
+msgstr "Pede ao responsável do grupo para configurar um grupo Executador."
msgid "Assertion consumer service URL"
-msgstr ""
+msgstr "URL de serviço ao consumidor de asserção"
msgid "Assets"
-msgstr ""
+msgstr "Ativos"
msgid "Assign"
msgstr "Atribuir"
@@ -1588,9 +1904,12 @@ msgstr "Atribuir"
msgid "Assign custom color like #FF0000"
msgstr "Atribui uma cor personalizada, como #FF0000"
-msgid "Assign labels"
+msgid "Assign epic"
msgstr ""
+msgid "Assign labels"
+msgstr "Atribuir etiquetas"
+
msgid "Assign milestone"
msgstr "Atribuir objetivo"
@@ -1598,192 +1917,224 @@ msgid "Assign some issues to this milestone."
msgstr "Atribuir alguns problemas para este objetivo."
msgid "Assign to"
-msgstr ""
+msgstr "Atribuir a"
msgid "Assign yourself to these issues"
-msgstr ""
+msgstr "Atribuir-te a estes problemas"
msgid "Assign yourself to this issue"
+msgstr "Atribuir-te esta tarefa"
+
+msgid "Assigned %{assignee_users_sentence}."
msgstr ""
msgid "Assigned Issues"
-msgstr ""
+msgstr "Problemas Atribuídos"
msgid "Assigned Merge Requests"
-msgstr ""
+msgstr "Pedidos de Mesclagem Atribuídos"
msgid "Assigned to me"
-msgstr ""
+msgstr "Atribuído a mim"
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
-msgstr ""
+msgstr "Listas de responsáveis não disponíveis com a tua licença atual"
msgid "Assignee lists show all issues assigned to the selected user."
-msgstr ""
+msgstr "As listas de responsáveis mostram todos os problemas atribuídos ao utilizador selecionado."
msgid "Assignee(s)"
+msgstr "Responsável(eis)"
+
+msgid "Assigns %{assignee_users_sentence}."
msgstr ""
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
-msgstr ""
+msgstr "Pelo menos uma aprovação de um código proprietário é necessário para alterar ficheiros que coincidem com as respetivas regras de CODEOWNER."
msgid "Attach a file"
-msgstr ""
+msgstr "Anexar um ficheiro"
msgid "Attach a file by drag &amp; drop or %{upload_link}"
msgstr "Anexar um ficheiro ao arrastar &amp; soltar ou %{upload_link}"
msgid "Attaching a file"
msgid_plural "Attaching %d files"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Anexar um ficheiro"
+msgstr[1] "Anexar %d ficheiros"
msgid "Attaching the file failed."
-msgstr ""
+msgstr "Falha ao anexar o ficheiro."
msgid "Audit Events"
+msgstr "Eventos de Auditoria"
+
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
msgstr ""
msgid "Aug"
-msgstr ""
+msgstr "ago"
msgid "August"
+msgstr "agosto"
+
+msgid "Authenticate"
msgstr ""
-msgid "Authentication Log"
+msgid "Authenticate with GitHub"
msgstr ""
+msgid "Authentication Log"
+msgstr "Registo de Autenticação"
+
msgid "Authentication failed: %{error_message}"
-msgstr ""
+msgstr "Falha na autenticação: %{error_message}"
msgid "Authentication log"
-msgstr ""
+msgstr "Registo de autenticação"
msgid "Authentication method"
-msgstr ""
+msgstr "Método de autenticação"
msgid "Authentication method updated"
-msgstr ""
+msgstr "Método de autenticação atualizado"
msgid "Authentication via U2F device failed."
-msgstr ""
+msgstr "Falha na autenticação via dispositivo U2F."
msgid "Author"
-msgstr ""
+msgstr "Autor"
msgid "Authorization code:"
-msgstr ""
+msgstr "Código de autorização:"
msgid "Authorization key"
-msgstr ""
+msgstr "Chave de autorização"
msgid "Authorization was granted by entering your username and password in the application."
-msgstr ""
+msgstr "A autorização foi concedida ao introduzir o teu nome de utilizador e palavra-passe na aplicação."
msgid "Authorize"
-msgstr ""
+msgstr "Autorizar"
msgid "Authorize %{link_to_client} to use your account?"
-msgstr ""
+msgstr "Autorizar %{link_to_client} a usar a tua conta?"
msgid "Authorized %{new_chat_name}"
-msgstr ""
+msgstr "Autorizado %{new_chat_name}"
msgid "Authorized At"
-msgstr ""
+msgstr "Autorizado em"
msgid "Authorized applications (%{size})"
-msgstr ""
+msgstr "Aplicações autorizadas (%{size})"
msgid "Authors: %{authors}"
-msgstr ""
+msgstr "Autores: %{authors}"
msgid "Auto DevOps"
-msgstr ""
+msgstr "Auto DevOps"
msgid "Auto DevOps enabled"
-msgstr ""
+msgstr "Auto DevOps ativado"
msgid "Auto DevOps, runners and job artifacts"
+msgstr "Auto DevOps, artefacto de executadores e trabalho"
+
+msgid "Auto License Compliance"
msgstr ""
msgid "Auto-cancel redundant, pending pipelines"
-msgstr ""
+msgstr "Cancelar, automaticamente, os pipelines redundantes pendentes"
msgid "AutoDevOps|Auto DevOps"
-msgstr ""
+msgstr "Auto DevOps"
msgid "AutoDevOps|Auto DevOps documentation"
-msgstr ""
+msgstr "Documentação do Auto DevOps"
msgid "AutoDevOps|Enable in settings"
-msgstr ""
+msgstr "Ativar nas definições"
msgid "AutoDevOps|It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
-msgstr ""
+msgstr "Ele irá construir, testar e implantar, automaticamente, a tua aplicação com base numa configuração predefinida de CI/CD."
msgid "AutoDevOps|Learn more in the %{link_to_documentation}"
-msgstr ""
+msgstr "Saber mais no %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
-msgstr "A pipeline Auto DevOps foi ativada e será usada se nenhum ficheiro de configuração de IC alternativo for encontrado. %{more_information_link}"
+msgstr "A pipeline Auto DevOps foi ativada e será usada caso nenhum ficheiro de configuração de IC alternativo, for encontrado. %{more_information_link}"
-msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
+msgid "Autocomplete"
msgstr ""
-msgid "Automatic certificate management using Let's Encrypt"
+msgid "Autocomplete description"
msgstr ""
-msgid "Automatically marked as default internal user"
+msgid "Autocomplete hint"
msgstr ""
-msgid "Automatically resolved"
+msgid "Autocomplete usage hint"
msgstr ""
+msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
+msgstr "Gestão automática de certificados ao usar %{lets_encrypt_link_start}Vamos Criptografar%{lets_encrypt_link_end}"
+
+msgid "Automatic certificate management using Let's Encrypt"
+msgstr "Gestão automática de certificados ao usar Vamos Criptografar"
+
+msgid "Automatically marked as default internal user"
+msgstr "Marcado, automaticamente, como utilizador interno padrão"
+
+msgid "Automatically resolved"
+msgstr "Resolvido automaticamente"
+
msgid "Automatically update this project's branches and tags from the upstream repository every hour."
-msgstr ""
+msgstr "Atualizar, automaticamente, os ramos e tags deste projeto do repositório upstream a cada hora."
msgid "Autosave|Note"
msgstr "Nota"
msgid "Available"
-msgstr ""
+msgstr "Disponível"
msgid "Available group Runners: %{runners}"
-msgstr ""
+msgstr "Executadores de grupo, disponíveis: %{runners}}"
msgid "Available shared Runners:"
-msgstr ""
+msgstr "Executadores compartilhados disponíveis:"
msgid "Available specific runners"
-msgstr ""
+msgstr "Executadores específicos disponíveis"
msgid "Avatar for %{assigneeName}"
-msgstr ""
+msgstr "Avatar para %{assigneeName}"
msgid "Avatar for %{name}"
-msgstr ""
+msgstr "Avatar para %{name}"
msgid "Avatar will be removed. Are you sure?"
-msgstr ""
+msgstr "O avatar será removido. Tens a certeza?"
msgid "Average per day: %{average}"
-msgstr ""
+msgstr "Média diária: %{average}"
msgid "Background Color"
-msgstr ""
+msgstr "Cor de Fundo"
msgid "Background Jobs"
-msgstr ""
+msgstr "Trabalhos em Segundo Plano"
msgid "Background color"
-msgstr ""
+msgstr "Cor de fundo"
msgid "Badges"
-msgstr ""
+msgstr "Emblemas"
msgid "Badges|A new badge was added."
msgstr "Foi adicionado um novo emblema."
@@ -1864,7 +2215,7 @@ msgid "Badge|New"
msgstr "Novo"
msgid "Balsamiq file could not be loaded."
-msgstr ""
+msgstr "O ficheiro Balsamiq não pôde ser carregado."
msgid "BambooService|A continuous integration and build server"
msgstr "Uma integração contínua e servidor de construção"
@@ -1882,7 +2233,7 @@ msgid "BambooService|Bamboo root URL like https://bamboo.example.com"
msgstr "URL raiz do Bamboo como https://bamboo.example.com"
msgid "BambooService|You must set up automatic revision labeling and a repository trigger in Bamboo."
-msgstr "Deves configurar um etiqueta de revisão automático e um disparador de repositório no Bamboo."
+msgstr "Deves configurar uma etiqueta de revisão automático e um disparador de repositório no Bamboo."
msgid "BatchComments|Delete all pending comments"
msgstr "Apagar todos os comentários pendentes"
@@ -1894,49 +2245,49 @@ msgid "BatchComments|You're about to discard your review which will delete all o
msgstr "Estás prestes a rejeitar a tua revisão, o que apagará todos os teus comentários pendentes. Os comentários apagados %{strong_start}não podem%{strong_end} ser restaurados."
msgid "Be careful. Changing the project's namespace can have unintended side effects."
-msgstr ""
+msgstr "Tem cuidado. Alterar o espaço de nomes do projeto pode ter efeitos secundários não intencionais."
msgid "Be careful. Renaming a project's repository can have unintended side effects."
-msgstr ""
+msgstr "Tem cuidado. Renomear o repositório de um projeto pode ter efeitos secundários indesejados."
msgid "Begin with the selected commit"
-msgstr ""
+msgstr "Começar com o envio selecionado"
msgid "Below are examples of regex for existing tools:"
-msgstr ""
+msgstr "Abaixo estão exemplos de regex para ferramentas existentes:"
msgid "Below you will find all the groups that are public."
-msgstr ""
+msgstr "Abaixo vais encontrar todos os grupos que são públicos."
msgid "Billing"
-msgstr ""
+msgstr "Faturação"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} está atualmente no plano %{plan_link}."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "Downgrade e atualização automática para alguns planos, está, atualmente, não disponível."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "Plano atual"
-msgid "BillingPlans|Customer Support"
-msgstr "Suporte ao Cliente"
-
msgid "BillingPlans|Downgrade"
-msgstr "Downgrade"
+msgstr "Despromoção"
+
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "Aprende mais sobre cada plano ao ler o nosso %{faq_link} ou inicia uma avaliação gratuita de 30 dias do GitLab.com Gold."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "Aprende mais sobre cada plano ao ler as nossas %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
-msgstr "Gerenciar plano"
+msgstr "Gerir plano"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "Por favor, entra em contacto com %{customer_support_link} para resolver o teu caso."
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "Vê todos os recursos do %{plan_name}"
@@ -1945,19 +2296,16 @@ msgid "BillingPlans|This group uses the plan associated with its parent group."
msgstr "Este grupo utiliza o plano de associados com o teu grupo pai."
msgid "BillingPlans|To manage the plan for this group, visit the billing section of %{parent_billing_page_link}."
-msgstr "Para gerir o plano para este grupo, visita a secção de facturação de %{parent_billing_page_link}."
+msgstr "Para gerir o plano para este grupo, visita a secção de faturação de %{parent_billing_page_link}."
msgid "BillingPlans|Upgrade"
msgstr "Atualizar"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "Estás atualmente no plano %{plan_link}."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
-msgstr "O teu GitLab.com avaliação expirou em %{expiration_date}. %{learn_more_text}"
+msgstr "A tua demonstração do GitLab.com expirou em %{expiration_date}. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "A tua demonstração de Ouro irá <strong>expirar após %{expiration_date}</strong>. Podes aprender mais sobre o GitLab.com Gold ao ler sobre os nossos %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "recursos"
@@ -1974,66 +2322,89 @@ msgstr "pago anualmente em %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "por utilizador"
-msgid "Bitbucket Server Import"
+msgid "BillingPlan|Upgrade plan"
msgstr ""
+msgid "Bitbucket Server Import"
+msgstr "Importação de Servidores Bitbucket"
+
msgid "Bitbucket import"
-msgstr ""
+msgstr "Importar do Bitbucket"
msgid "Block"
-msgstr ""
+msgstr "Bloquear"
msgid "Blocked"
-msgstr ""
+msgstr "Bloqueado"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Blog"
+msgstr "Blogue"
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
+msgid "Blue helpers indicate an action to be taken."
+msgstr "Os auxiliares azuis indicam que é necessário tomar medidas."
-msgid "Blog"
+msgid "Board name"
msgstr ""
-msgid "Blue helpers indicate an action to be taken."
+msgid "Board scope"
msgstr ""
-msgid "Boards"
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
msgstr ""
+msgid "BoardBlankState|Add default lists"
+msgstr "Adicionar listas padrão"
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr "Adicionar as seguintes listas padrão para o teu Painel de Problema com um clique:"
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr "Deixa para lá, usarei por mim mesmo"
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr "Ao começar com o conjunto de listas padrão, estarás no caminho certo para aproveitar ao máximo o teu painel."
+
+msgid "Boards"
+msgstr "Painéis"
+
+msgid "Boards|Collapse"
+msgstr "Colapsar"
+
msgid "Boards|Edit board"
-msgstr ""
+msgstr "Editar painel"
+
+msgid "Boards|Expand"
+msgstr "Expandir"
msgid "Boards|View scope"
+msgstr "Ver escopo"
+
+msgid "Branch"
msgstr ""
msgid "Branch %{branchName} was not found in this project's repository."
-msgstr ""
+msgstr "O ramo %{branchName} não foi encontrado no repositório deste projeto."
msgid "Branch <strong>%{branch_name}</strong> was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}"
-msgstr ""
+msgstr "O ramo <strong>%{branch_name}</strong> foi criado. Para configurar a implantação automática, seleciona um modelo de Yaml do GitLab CI e envia as tuas alterações. %{link_to_autodeploy_doc}"
msgid "Branch has changed"
-msgstr ""
+msgstr "Ramo foi alterado"
msgid "Branch is already taken"
msgstr "Ramo já está a ser usado"
msgid "Branch name"
-msgstr ""
+msgstr "Nome do ramo"
msgid "Branch not loaded - %{branchId}"
-msgstr ""
+msgstr "Ramo não carregado - %{branchId}"
msgid "BranchSwitcherPlaceholder|Search branches"
msgstr "Procurar por ramos"
msgid "BranchSwitcherTitle|Switch branch"
-msgstr "Mudar de ramo"
+msgstr "Alterar de ramo"
msgid "Branches"
msgstr "Ramos"
@@ -2072,7 +2443,7 @@ msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you s
msgstr "Apagar o ramo '%{branch_name}' não pode ser desfeito. Tens a certeza?"
msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
-msgstr "Ao apagar os ramos mesclados não pode ser desfeito. Tens a certeza?"
+msgstr "Apagar ramos mesclados não pode ser desfeito. Tens a certeza?"
msgid "Branches|Filter by branch name"
msgstr "Filtrar por nome de ramo"
@@ -2087,10 +2458,10 @@ msgid "Branches|No branches to show"
msgstr "Nenhum ramo para mostrar"
msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
-msgstr "Uma vez que confirmares e pressionares %{delete_protected_branch}, não pode ser desfeito ou recuperado."
+msgstr "Depois de confirmares e pressionares %{delete_protected_branch}, ele não poderá ser desfeito ou recuperado."
msgid "Branches|Only a project maintainer or owner can delete a protected branch"
-msgstr "Somente um responsável ou dono do projeto poderá apagar ramos protegidas"
+msgstr "Somente um responsável ou dono do projeto poderá apagar ramos protegidos"
msgid "Branches|Overview"
msgstr "Visão Geral"
@@ -2135,7 +2506,7 @@ msgid "Branches|This branch hasn’t been merged into %{default_branch}."
msgstr "Este ramo não foi mesclado para '%{default_branch}'."
msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
-msgstr "Para evitar a perda de dados, considera mesclar este ramo antes de eliminá-lo."
+msgstr "Para evitar a perda de dados, considera mesclar este ramo antes de apagá-lo."
msgid "Branches|To confirm, type %{branch_name_confirmation}:"
msgstr "Para confirmar, digita %{branch_name_confirmation}:"
@@ -2159,58 +2530,61 @@ msgid "Branches|protected"
msgstr "protegido"
msgid "Broadcast Message was successfully created."
-msgstr ""
+msgstr "Mensagem de transmissão criada com sucesso."
msgid "Broadcast Message was successfully updated."
-msgstr ""
+msgstr "Mensagem de transmissão atualizada com sucesso."
msgid "Browse Directory"
-msgstr ""
+msgstr "Procurar Diretório"
msgid "Browse File"
-msgstr ""
+msgstr "Procurar Ficheiro"
msgid "Browse Files"
+msgstr "Procurar Ficheiros"
+
+msgid "Browse artifacts"
msgstr ""
msgid "Browse files"
-msgstr ""
+msgstr "Procurar ficheiros"
msgid "Built-in"
-msgstr ""
+msgstr "Incorporado"
msgid "BurndownChartLabel|Guideline"
-msgstr ""
+msgstr "Diretriz"
msgid "BurndownChartLabel|Open issue weight"
-msgstr ""
+msgstr "Abrir peso do problema"
msgid "BurndownChartLabel|Open issues"
-msgstr ""
+msgstr "Abrir problemas"
msgid "BurndownChartLabel|Progress"
-msgstr ""
+msgstr "Progresso"
msgid "BurndownChartLabel|Remaining"
-msgstr ""
+msgstr "Restante"
msgid "Business"
-msgstr ""
+msgstr "Negócios"
msgid "Business metrics (Custom)"
-msgstr ""
+msgstr "Métricas de negócio (Personalizado)"
msgid "Buy EE"
-msgstr ""
+msgstr "Comprar EE"
msgid "Buy GitLab Enterprise Edition"
-msgstr ""
+msgstr "Comprar o GitLab Enterprise Edition"
msgid "By %{user_name}"
-msgstr ""
+msgstr "Por %{user_name}"
msgid "By default GitLab sends emails in HTML and plain text formats so mail clients can choose what format to use. Disable this option if you only want to send emails in plain text format."
-msgstr ""
+msgstr "Por padrão, o GitLab envia emails em formatos HTML e texto simples para que os clientes de email possam escolher o formato a ser usado. Desativa esta opção se quiseres apenas enviar emails em formato de texto simples."
msgid "By default, all projects and groups will use the global notifications setting."
msgstr "Por padrão, todos os projetos e grupos usarão as definições globais de notificações."
@@ -2219,37 +2593,37 @@ msgid "ByAuthor|by"
msgstr "por"
msgid "CHANGELOG"
-msgstr ""
+msgstr "CHANGELOG"
msgid "CI / CD"
-msgstr ""
+msgstr "CI / CD"
msgid "CI / CD Charts"
-msgstr ""
+msgstr "Gráficos de CI / CD"
msgid "CI / CD Settings"
-msgstr ""
+msgstr "Definições de CI / CD"
msgid "CI Lint"
-msgstr ""
+msgstr "CI Lint"
msgid "CI variables"
-msgstr ""
+msgstr "Variáveis de CI"
msgid "CI will run using the credentials assigned above."
-msgstr ""
+msgstr "O CI será executado ao usar as credenciais atribuídas acima."
msgid "CI/CD"
-msgstr ""
+msgstr "CI/CD"
msgid "CI/CD configuration"
-msgstr ""
+msgstr "Configuração de CI/CD"
msgid "CI/CD for external repo"
-msgstr ""
+msgstr "CI/CD para um repositório externo"
msgid "CI/CD settings"
-msgstr ""
+msgstr "Definições de CI/CD"
msgid "CICD|Auto DevOps"
msgstr "Auto DevOps"
@@ -2270,7 +2644,7 @@ msgid "CICD|Default to Auto DevOps pipeline"
msgstr "Padrão para o pipeline de Auto DevOps"
msgid "CICD|Default to Auto DevOps pipeline for all projects"
-msgstr "Padrão para o pipeline deAuto DevOps para todos os projetos"
+msgstr "Padrão para o pipeline de Auto DevOps para todos os projetos"
msgid "CICD|Deployment strategy"
msgstr "Estratégia de implantação"
@@ -2284,107 +2658,134 @@ msgstr "Aprender mais sobre Auto DevOps"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "A pipeline de Auto DevOps será executada, se nenhum ficheiro de configuração de IC alternativo, for encontrado."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
-msgstr "Deves adicionar uma %{kubernetes_cluster_start}integração de cluster de Kubernetes%{kubernetes_cluster_end} a este projeto com um domínio para que a tua estratégia de implantação funcione corretamente."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
msgid "CICD|group enabled"
-msgstr "group ativado"
+msgstr "grupo ativado"
msgid "CICD|instance enabled"
msgstr "instância ativada"
-msgid "CONTRIBUTING"
+msgid "CLOSED"
msgstr ""
-msgid "Callback URL"
+msgid "CLOSED (MOVED)"
msgstr ""
+msgid "CONTRIBUTING"
+msgstr "CONTRIBUTING"
+
+msgid "Callback URL"
+msgstr "URL de Resposta"
+
msgid "Can override approvers and approvals required per merge request"
-msgstr ""
+msgstr "Pode substituir aprovadores e aprovações requeridas por pedido de mesclagem"
msgid "Can't find HEAD commit for this branch"
-msgstr ""
+msgstr "Não é possível encontrar o envio HEAD para este ramo"
msgid "Can't find variable: ZiteReader"
-msgstr ""
+msgstr "Não foi possível encontrar a variável: ZiteReader"
msgid "Can't remove group members without group managed account"
-msgstr ""
+msgstr "Não é possível remover membros do grupo sem conta gerenciada do grupo"
msgid "Can't scan the code?"
-msgstr ""
+msgstr "Não consegues digitalizar o código?"
msgid "Canary Deployments is a popular CI strategy, where a small portion of the fleet is updated to the new version of your application."
-msgstr ""
+msgstr "Canary Deploymentss é uma estratégia CI popular, onde uma pequena porção da frota é atualizada para a nova versão da tua aplicação."
msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Cancel running"
msgstr ""
msgid "Cancel this job"
+msgstr "Cancelar este trabalho"
+
+msgid "Cancelling Preview"
msgstr ""
msgid "Cannot be merged automatically"
-msgstr ""
+msgstr "Não pode ser mesclado automaticamente"
msgid "Cannot create the abuse report. The user has been deleted."
-msgstr ""
+msgstr "Não foi possível criar o relatório de abuso. O utilizador foi apagado."
msgid "Cannot create the abuse report. This user has been blocked."
+msgstr "Não foi possível criar o relatório de abuso. Este utilizador foi bloqueado."
+
+msgid "Cannot merge"
msgstr ""
msgid "Cannot modify managed Kubernetes cluster"
-msgstr ""
+msgstr "Não é possível modificar o cluster gerido do Kubernetes"
msgid "Cannot refer to a group milestone by an internal id!"
msgstr "Não é possível referir um objetivo de grupo por um id interno!"
msgid "Cannot render the image. Maximum character count (%{charLimit}) has been exceeded."
-msgstr ""
+msgstr "Não é possível processar a imagem. A contagem máxima de caracteres (%{charLimit}) foi excedido."
msgid "Cannot show preview. For previews on sketch files, they must have the file format introduced by Sketch version 43 and above."
-msgstr ""
+msgstr "Não é possível mostrar a visualização. Para pré-visualizações em ficheiros sketch, eles devem ter o formato do ficheiro introduzido pela versão 43 do Sketch e acima."
msgid "Cannot skip two factor authentication setup"
-msgstr ""
+msgstr "Não é possível ignorar a configuração de autenticação de dois fatores"
msgid "Capacity threshold"
-msgstr ""
+msgstr "Limite de capacidade"
msgid "Certificate"
-msgstr ""
+msgstr "Certificado"
msgid "Certificate (PEM)"
-msgstr ""
+msgstr "Certificado (PEM)"
msgid "Change Weight"
+msgstr "Alterar Peso"
+
+msgid "Change assignee"
msgstr ""
msgid "Change assignee(s)"
-msgstr ""
+msgstr "Alterar responsável(eis)"
msgid "Change assignee(s)."
+msgstr "Alterar responsável(eis)."
+
+msgid "Change label"
msgstr ""
-msgid "Change path"
+msgid "Change milestone"
msgstr ""
+msgid "Change path"
+msgstr "Alterar caminho"
+
msgid "Change permissions"
-msgstr ""
+msgstr "Alterar permissões"
msgid "Change template"
-msgstr ""
+msgstr "Alterar modelo"
msgid "Change this value to influence how frequently the GitLab UI polls for updates."
-msgstr ""
+msgstr "Altera este valor para influenciar com que frequência a interface do utilizador do GitLab pesquisa atualizações."
msgid "Change title"
-msgstr ""
+msgstr "Alterar título"
msgid "Change your password"
-msgstr ""
+msgstr "Alterar a tua palavra-passe"
msgid "Change your password or recover your current one"
-msgstr ""
+msgstr "Altera a tua palavra-passe ou recupera a tua atual"
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Escolher no ramo"
@@ -2401,107 +2802,164 @@ msgstr "Reverter"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "Isto irá criar um envio para reverter as alterações existentes."
-msgid "Changes"
+msgid "Changed assignee(s)."
msgstr ""
-msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision."
+msgid "Changed the title to \"%{title_param}\"."
msgstr ""
+msgid "Changes"
+msgstr "Alterações"
+
+msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision."
+msgstr "As alterações são mostradas como se a revisão de <b>origem</b> estivesse a ser mesclada na revisão de <b>destino</b>."
+
msgid "Changes suppressed. Click to show."
-msgstr ""
+msgstr "Alterações suprimidas Clica para mostrar."
msgid "Changes the title to \"%{title_param}\"."
-msgstr ""
+msgstr "Altera o título para \"%{title_param}\"."
msgid "Changes won't take place until the index is %{link_start}recreated%{link_end}."
-msgstr ""
+msgstr "As alterações não terão lugar até que o índice seja %{link_start}recriado%{link_end}."
msgid "Charts"
-msgstr ""
+msgstr "Gráficos"
msgid "Chat"
+msgstr "Chat"
+
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
msgstr ""
-msgid "Check again"
+msgid "ChatMessage|Branch"
msgstr ""
-msgid "Check feature availability on namespace plan"
+msgid "ChatMessage|Commit"
msgstr ""
-msgid "Check the %{docs_link_start}documentation%{docs_link_end}."
+msgid "ChatMessage|Failed job"
msgstr ""
-msgid "Check your .gitlab-ci.yml"
+msgid "ChatMessage|Failed stage"
msgstr ""
-msgid "Checking %{text} availability…"
+msgid "ChatMessage|Invalid CI config YAML file"
msgstr ""
-msgid "Checking approval status"
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
msgstr ""
-msgid "Checking branch availability..."
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
msgstr ""
-msgid "Checking username availability..."
+msgid "ChatMessage|Tag"
msgstr ""
-msgid "Cherry-pick this commit"
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
msgstr ""
-msgid "Cherry-pick this merge request"
+msgid "ChatMessage|failed"
msgstr ""
-msgid "Choose <strong>Create archive</strong> and wait for archiving to complete."
+msgid "ChatMessage|has failed"
msgstr ""
-msgid "Choose <strong>Next</strong> at the bottom of the page."
+msgid "ChatMessage|has passed"
msgstr ""
-msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
msgstr ""
+msgid "Check again"
+msgstr "Verifica Novamente"
+
+msgid "Check feature availability on namespace plan"
+msgstr "Verificar disponibilidade de recursos no plano do espaço de nomes"
+
+msgid "Check the %{docs_link_start}documentation%{docs_link_end}."
+msgstr "Verifica a %{docs_link_start}documentação%{docs_link_end}."
+
+msgid "Check your .gitlab-ci.yml"
+msgstr "Verifica o teu .gitlab-ci.yml"
+
+msgid "Checking %{text} availability…"
+msgstr "A verificar a disponibilidade de %{text}…"
+
+msgid "Checking approval status"
+msgstr "A verificar o estado de aprovação"
+
+msgid "Checking branch availability..."
+msgstr "A verificar a disponibilidade do ramo..."
+
+msgid "Checking username availability..."
+msgstr "A verificar a disponibilidade do nome de utilizador..."
+
+msgid "Cherry-pick this commit"
+msgstr "Cherry-pick este envio"
+
+msgid "Cherry-pick this merge request"
+msgstr "Cherry-pick este pedido de mesclagem"
+
+msgid "Choose <strong>Create archive</strong> and wait for archiving to complete."
+msgstr "Escolhe <strong>Criar arquivo</strong> e aguarda até que o arquivamento seja concluído."
+
+msgid "Choose <strong>Next</strong> at the bottom of the page."
+msgstr "Escolhe <strong>Próximo</strong> na parte inferior da página."
+
+msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
+msgstr "Escolhe um ramo/tag (por exemplo, %{master}) ou insere um envio (por exemplo, %{sha}) para ver o que foi alterado ou para criar um pedido de mesclagem."
+
msgid "Choose a file"
+msgstr "Escolhe um ficheiro"
+
+msgid "Choose a group"
msgstr ""
msgid "Choose a role permission"
-msgstr ""
+msgstr "Escolhe uma permissão de função"
msgid "Choose a template"
-msgstr ""
+msgstr "Escolhe um modelo"
msgid "Choose a template..."
-msgstr ""
+msgstr "Escolhe um modelo..."
msgid "Choose a type..."
-msgstr ""
+msgstr "Escolhe um tipo..."
msgid "Choose any color."
-msgstr ""
+msgstr "Escolhe qualquer cor."
msgid "Choose between <code>clone</code> or <code>fetch</code> to get the recent application code"
-msgstr ""
+msgstr "Escolhe entre <code>clone</code> ou <code>fetch</code> para obter o código da aplicação recente"
msgid "Choose file…"
-msgstr ""
+msgstr "Escolher um ficheiro…"
msgid "Choose the top-level group for your repository imports."
-msgstr ""
+msgstr "Escolhe o grupo de nível superior para as tuas importações de repositório."
msgid "Choose visibility level, enable/disable project features (issues, repository, wiki, snippets) and set permissions."
-msgstr ""
+msgstr "Escolhe o nível de visibilidade, ativa/desativa os recursos do projeto (problemas, repositório, wiki, snippets) e define as permissões."
msgid "Choose what content you want to see on a group’s overview page"
-msgstr ""
+msgstr "Escolhe o conteúdo que desejas ver na página de visão geral de um grupo"
msgid "Choose which repositories you want to connect and run CI/CD pipelines."
-msgstr ""
+msgstr "Escolhe quais repositórios desejas conectar e executar pipelines de CI/CD."
msgid "Choose which shards you wish to synchronize to this secondary node."
-msgstr ""
-
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
+msgstr "Escolhe quais fragmentos desejas sincronizar neste nó secundário."
msgid "CiStatusLabel|canceled"
msgstr "cancelado"
@@ -2591,7 +3049,10 @@ msgid "CiVariables|Remove variable row"
msgstr "Remover linha da variável"
msgid "CiVariables|Scope"
-msgstr "Alcance"
+msgstr "Escopo"
+
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
msgid "CiVariables|State"
msgstr "Estado"
@@ -2602,6 +3063,9 @@ msgstr "Tipo"
msgid "CiVariables|Value"
msgstr "Valor"
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "* (Todos os ambientes)"
@@ -2636,96 +3100,126 @@ msgid "CiVariable|Validation failed"
msgstr "Falha na validação"
msgid "Classification Label (optional)"
-msgstr ""
+msgstr "Etiqueta de classificação (opcional)"
msgid "ClassificationLabelUnavailable|is unavailable: %{reason}"
msgstr "está indisponível: %{reason}"
msgid "Clear"
-msgstr ""
+msgstr "Limpar"
msgid "Clear input"
+msgstr "Limpar entrada"
+
+msgid "Clear recent searches"
msgstr ""
msgid "Clear search"
-msgstr ""
+msgstr "Limpar Pesquisa"
msgid "Clear search input"
-msgstr ""
+msgstr "Limpar entradas de pesquisa"
+
+msgid "Clear templates search input"
+msgstr "Limpar entrada de pesquisa de modelos"
msgid "Clear weight"
+msgstr "Limpar peso"
+
+msgid "Cleared weight."
msgstr ""
msgid "Clears weight."
-msgstr ""
+msgstr "Limpa peso."
msgid "Click any <strong>project name</strong> in the project list below to navigate to the project milestone."
msgstr "Clica em qualquer <strong>nome de projeto</strong> na lista a seguir para navegar para o objetivo do projeto."
msgid "Click here"
-msgstr ""
+msgstr "Clica aqui"
msgid "Click the <strong>Download</strong> button and wait for downloading to complete."
-msgstr ""
+msgstr "Clica no botão <strong>Transferir</strong> e aguarda a finalização do mesmo."
msgid "Click the <strong>Promote</strong> button in the top right corner to promote it to a group milestone."
msgstr "Clica no botão <strong>Promover</strong> no canto superior direito para promovê-lo para um objetivo de grupo."
msgid "Click the <strong>Select none</strong> button on the right, since we only need \"Google Code Project Hosting\"."
-msgstr ""
+msgstr "Clica no botão <strong>Selecionar nenhum</strong> à direita, pois, só precisamos de \"Google Code Project Hosting\"."
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
+msgstr "Clica no botão abaixo para começar o processo de instalação ao navegar para a página do Kubernetes"
+
+msgid "Click the image where you'd like to start a new discussion"
msgstr ""
msgid "Click to expand it."
-msgstr ""
+msgstr "Clica para expandir."
msgid "Click to expand text"
-msgstr ""
+msgstr "Clicai para expandir o texto"
msgid "Client authentication certificate"
-msgstr ""
+msgstr "Certificado de autenticação do cliente"
msgid "Client authentication key"
-msgstr ""
+msgstr "Chave de autenticação do cliente"
msgid "Client authentication key password"
-msgstr ""
+msgstr "Palavra-chave de autenticação do cliente"
msgid "Clients"
-msgstr ""
+msgstr "Clientes"
msgid "Clone"
-msgstr ""
+msgstr "Clone"
msgid "Clone repository"
-msgstr ""
+msgstr "Clonar repositório"
msgid "Clone with %{http_label}"
-msgstr ""
+msgstr "Clonar com %{http_label}"
msgid "Clone with KRB5"
-msgstr ""
+msgstr "Clonar com KRB5"
msgid "Clone with SSH"
-msgstr ""
+msgstr "Clonar com SSH"
msgid "Close"
+msgstr "Fechar"
+
+msgid "Close %{tabname}"
msgstr ""
msgid "Close epic"
-msgstr ""
+msgstr "Fechar épico"
msgid "Close milestone"
msgstr "Fechar objetivo"
msgid "Close sidebar"
+msgstr "Fechar barra lateral"
+
+msgid "Close this %{quick_action_target}"
msgstr ""
msgid "Closed"
-msgstr ""
+msgstr "Fechado"
msgid "Closed issues"
+msgstr "Problemas Fechados"
+
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
msgstr ""
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
@@ -2744,16 +3238,16 @@ msgid "ClusterIntegration|%{title} uninstalled successfully."
msgstr "%{title} desinstalado com sucesso."
msgid "ClusterIntegration|%{title} updated successfully."
-msgstr ""
+msgstr "%{title} atualizado com sucesso."
msgid "ClusterIntegration|A service token scoped to %{code}kube-system%{end_code} with %{code}cluster-admin%{end_code} privileges."
msgstr "Um token de serviço com o alcance de %{code}kube-sistem%{end_code} com privilégios de %{code}cluster-admin%{end_code}."
msgid "ClusterIntegration|API URL"
-msgstr "API URL"
+msgstr "URL de API"
msgid "ClusterIntegration|API URL should be a valid http/https url."
-msgstr "API URL deve ser válido, http/https url."
+msgstr "A URL da API deve ser válida http/https url."
msgid "ClusterIntegration|Add Kubernetes cluster"
msgstr "Adicionar cluster Kubernetes"
@@ -2776,6 +3270,9 @@ msgstr "Adicionar uma integração compartilhará o cluster em todos os projetos
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Opções avançadas na integração deste cluster de Kubernetes"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr "Todos os dados serão apagados e não podem ser restaurados."
@@ -2785,6 +3282,9 @@ msgstr "Permitir que o GitLab gerêncie contas de espaço de nome e de serviço
msgid "ClusterIntegration|Alternatively"
msgstr "Alternativamente"
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Ocorreu um erro ao tentar contactar o Google Cloud API. Por favor, tenta novamente, mais tarde."
@@ -2792,7 +3292,7 @@ msgid "ClusterIntegration|An error occurred while trying to fetch project zones:
msgstr "Ocorreu um erro ao tentar buscar as zonas do projeto: %{error}"
msgid "ClusterIntegration|An error occurred while trying to fetch your projects: %{error}"
-msgstr "Ocorreu um erro ao tentar buscar teus projetos: %{error}"
+msgstr "Ocorreu um erro ao tentar buscar os teus projetos: %{error}"
msgid "ClusterIntegration|An error occurred while trying to fetch zone machine types: %{error}"
msgstr "Ocorreu um erro ao tentar buscar as máquinas da zona: %{error}"
@@ -2824,12 +3324,18 @@ msgstr "O Gestor de Certificados é um controlador de gestão de certificados na
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Pacote de Autoridade de Certificados (formato PEM)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "Escolhe quais aplicações instalar no teu cluster de Kubernetes. O Heml Tiller é necessário para instalar qualquer uma das seguintes aplicações."
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Escolhe qual dos teus ambientes usarás este cluster."
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr " Integridade de cluster"
@@ -2860,12 +3366,21 @@ msgstr "Copiar o nome do cluster de Kubernetes"
msgid "ClusterIntegration|Copy Service Token"
msgstr "Copiar Token de Serviço"
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Criar cluster de Kubernetes"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "Sabias que?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Ativar ou desativar a conexão do GitLab com o teu cluster de Kubernetes."
@@ -2903,17 +3418,20 @@ msgid "ClusterIntegration|GitLab Integration"
msgstr "Integração GitLab"
msgid "ClusterIntegration|GitLab Runner"
-msgstr "Gitlab Runner"
+msgstr "Executador do GitLab"
msgid "ClusterIntegration|GitLab Runner connects to the repository and executes CI/CD jobs, pushing results back and deploying applications to production."
-msgstr "O GitLab Runner conecta-se ao repositório e executa os trabalhos CI/CD, ao empurrar os resultados para trás e implementar aplicações para produção."
+msgstr "O Executador do GitLab conecta-se ao repositório e executa os trabalhos CI/CD, ao empurrar os resultados para trás e implementar aplicações para produção."
msgid "ClusterIntegration|GitLab-managed cluster"
-msgstr "Cluster do GitLab-managed"
+msgstr "Cluster gerido por GitLab"
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Projeto Google Cloud Platform"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr " Google Kubernetes Engine"
@@ -2933,277 +3451,319 @@ msgid "ClusterIntegration|Hide"
msgstr "Ocultar"
msgid "ClusterIntegration|If you are setting up multiple clusters and are using Auto DevOps, %{help_link_start}read this first%{help_link_end}."
-msgstr "Se estás a configurar múltiplos clusters e está a usar Auto DevOps, %{help_link_start}lê isto primeiro%{help_link_end}."
+msgstr "Se estás a configurar múltiplos clusters e estás a usar o Auto DevOps, %{help_link_start}lê isto primeiro%{help_link_end}."
msgid "ClusterIntegration|In order to view the health of your cluster, you must first install Prometheus below."
msgstr "Para visualizar a saúde do cluster, deves primeiro instalar o Prometheus abaixo."
msgid "ClusterIntegration|Ingress"
-msgstr ""
+msgstr "Ingress"
msgid "ClusterIntegration|Ingress Endpoint"
-msgstr ""
+msgstr "Ponto Final do Ingress"
msgid "ClusterIntegration|Ingress gives you a way to route requests to services based on the request host or path, centralizing a number of services into a single entrypoint."
-msgstr ""
+msgstr "Ingress dá-te uma maneira de encaminhar pedidos de serviços com base no pedido do administrador ou o caminho, a centralização de diversos serviços num único ponto de entrada."
msgid "ClusterIntegration|Installing Ingress may incur additional costs. Learn more about %{pricingLink}."
-msgstr ""
+msgstr "Instalação do Ingress poderão incorrer em custos adicionais. Aprende mais sobre %{pricingLink}."
msgid "ClusterIntegration|Instance cluster"
-msgstr ""
+msgstr "Cluster de instância"
msgid "ClusterIntegration|Integrate Kubernetes cluster automation"
-msgstr ""
+msgstr "Integrar automação de cluster Kubernetes"
msgid "ClusterIntegration|Integration status"
-msgstr ""
+msgstr "Estado de integração"
msgid "ClusterIntegration|Issuer Email"
-msgstr ""
+msgstr "Email do emissor"
msgid "ClusterIntegration|Issuers represent a certificate authority. You must provide an email address for your Issuer. "
-msgstr ""
+msgstr "Emissores representam uma Autoridade Certificadora. Deves fornecer um endereço de email para o teu Emissor. "
msgid "ClusterIntegration|Jupyter Hostname"
-msgstr ""
+msgstr "Nome de administrador do Jupyter"
msgid "ClusterIntegration|JupyterHub"
-msgstr ""
+msgstr "JupyterHub"
msgid "ClusterIntegration|JupyterHub, a multi-user Hub, spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server. JupyterHub can be used to serve notebooks to a class of students, a corporate data science group, or a scientific research group."
-msgstr ""
+msgstr "O JupyterHub, um hub multi-utilizador, gera, gerência e faz proxy de várias instâncias do servidor de notebook Jupyter de utilizador único. O JupyterHub pode ser usado para servir notebooks para uma classe de alunos, um grupo de ciência de dados corporativos ou um grupo de pesquisa científica."
msgid "ClusterIntegration|Knative"
-msgstr ""
+msgstr "Knative"
msgid "ClusterIntegration|Knative Domain Name:"
-msgstr ""
+msgstr "Nome de Domínio Knative:"
msgid "ClusterIntegration|Knative Endpoint:"
-msgstr ""
+msgstr "Ponto Final do Knative:"
msgid "ClusterIntegration|Knative domain name was updated successfully."
-msgstr ""
+msgstr "O nome de domínio do Knative foi atualizado com sucesso."
msgid "ClusterIntegration|Knative extends Kubernetes to provide a set of middleware components that are essential to build modern, source-centric, and container-based applications that can run anywhere: on premises, in the cloud, or even in a third-party data center."
-msgstr ""
+msgstr "Knative estende o Kubernetes para fornecer um conjunto de componentes de middleware que são essenciais para construir modernas, centrado na origem, aplicações baseadas em contentor que podem ser executados em qualquer lugar: no local, na nuvem, ou até mesmo num terceiro centro de dados."
msgid "ClusterIntegration|Kubernetes cluster"
-msgstr ""
+msgstr "Cluster do Kubernetes"
msgid "ClusterIntegration|Kubernetes cluster details"
-msgstr ""
+msgstr "Detalhes do cluster Kubernetes"
msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..."
-msgstr ""
+msgstr "O cluster Kubernetes está a ser criado no Google Kubernetes Engine..."
msgid "ClusterIntegration|Kubernetes cluster name"
-msgstr ""
+msgstr "Nome do cluster Kubernetes"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
-msgstr ""
+msgstr "Com um cluster Kubernetes associado a este projeto, podes utilizar apps de revisão, publicar as tuas aplicações, executar as tuas pipelines e muito mais de uma maneira simples."
msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project"
-msgstr ""
+msgstr "Os clusters Kubernetes podem ser usados para implementar aplicações e fornecer Revisão de Aplicações para este projeto"
msgid "ClusterIntegration|Learn more about %{help_link_start_machine_type}machine types%{help_link_end} and %{help_link_start_pricing}pricing%{help_link_end}."
-msgstr ""
+msgstr "Aprende mais sobre %{help_link_start_machine_type}tipos de máquina%{help_link_end} e %{help_link_start_pricing}preços%{help_link_end}."
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
+msgstr "Aprende mais sobre %{help_link_start}zonas%{help_link_end}."
+
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
msgstr ""
msgid "ClusterIntegration|Learn more about Kubernetes"
-msgstr ""
+msgstr "Aprende mais sobre os Kubernetes"
msgid "ClusterIntegration|Learn more about group Kubernetes clusters"
-msgstr ""
+msgstr "Aprende mais sobre os clusters do Kubernetes de grupo"
msgid "ClusterIntegration|Learn more about instance Kubernetes clusters"
-msgstr ""
+msgstr "Aprende mais sobre a instância de clusters do Kubernetes"
msgid "ClusterIntegration|Let's Encrypt"
+msgstr "Vamos Criptografar"
+
+msgid "ClusterIntegration|Loading IAM Roles"
msgstr ""
-msgid "ClusterIntegration|Machine type"
+msgid "ClusterIntegration|Loading Regions"
msgstr ""
+msgid "ClusterIntegration|Machine type"
+msgstr "Tipo de máquina"
+
msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters"
-msgstr ""
+msgstr "Certifica-te de que tua conta %{link_to_requirements} para criar clusters Kubernetes"
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
+msgstr "Gerência o teu cluster Kubernetes ao visitar %{link_gke}"
+
+msgid "ClusterIntegration|No IAM Roles found"
msgstr ""
msgid "ClusterIntegration|No machine types matched your search"
-msgstr ""
+msgstr "Nenhuma zona correspondeu à tua pesquisa"
msgid "ClusterIntegration|No projects found"
-msgstr ""
+msgstr "Nenhum projeto encontrado"
msgid "ClusterIntegration|No projects matched your search"
+msgstr "Nenhum projeto correspondeu à tua pesquisa"
+
+msgid "ClusterIntegration|No region found"
msgstr ""
msgid "ClusterIntegration|No zones matched your search"
-msgstr ""
+msgstr "Nenhuma zona correspondeu à tua pesquisa"
msgid "ClusterIntegration|Number of nodes"
-msgstr ""
+msgstr "Número de nós"
msgid "ClusterIntegration|Number of nodes must be a numerical value."
-msgstr ""
+msgstr "O número de nós, deve ser um valor numérico."
msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes"
-msgstr ""
+msgstr "Por favor, digita as informações de acesso do teu cluster do Kubernetes. Se precisares de ajuda, podes ler o nosso %{link_to_help_page} no Kubernetes"
msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:"
-msgstr ""
+msgstr "Por favor, certifica-te de que a tua conta Google cumpre com os seguintes requisitos:"
msgid "ClusterIntegration|Point a wildcard DNS to this generated endpoint in order to access your application after it has been deployed."
-msgstr ""
+msgstr "Aponta um DNS curinga para este nó de extremidade gerado para acessares a tua aplicação após ele ter sido implementado."
msgid "ClusterIntegration|Project cluster"
-msgstr ""
+msgstr "Cluster do projeto"
msgid "ClusterIntegration|Project namespace (optional, unique)"
+msgstr "Espaço de nomes do projeto (opcional, único)"
+
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
msgstr ""
msgid "ClusterIntegration|Prometheus"
-msgstr ""
+msgstr "Prometheus"
msgid "ClusterIntegration|Prometheus is an open-source monitoring system with %{gitlabIntegrationLink} to monitor deployed applications."
-msgstr ""
+msgstr "Prometheus é um sistema de monitoramento de código aberto com %{gitlabIntegrationLink} para monitorar aplicações implantadas."
msgid "ClusterIntegration|RBAC-enabled cluster"
-msgstr ""
+msgstr "Cluster ativado pelo RBAC"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
+msgstr "Lê o nosso %{link_to_help_page} na integração de cluster Kubernetes."
+
+msgid "ClusterIntegration|Region"
msgstr ""
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
-msgstr ""
+msgstr "Remove a integração do cluster do Kubernetes"
msgid "ClusterIntegration|Remove integration"
-msgstr ""
+msgstr "Remover integração"
msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster."
-msgstr ""
+msgstr "Remover este cluster do Kubernetes de configuração a partir deste projeto. Isto não apagará o teu cluster real do Kubernetes."
msgid "ClusterIntegration|Replace this with your own hostname if you want. If you do so, point hostname to Ingress IP Address from above."
-msgstr "Substituiristo com o teu próprio nome de host, se o quiseres. Se o fizeres, aponta o nome de host ao Endereço IP de Entrada a partir de cima."
+msgstr "Substituir isto com o teu próprio nome de anfitrião, se o quiseres. Se o fizeres, aponta o nome de anfitrião ao Endereço IP do Ingress a partir de cima."
msgid "ClusterIntegration|Request to begin installing failed"
-msgstr ""
+msgstr "Falha no pedido para iniciar a instalação"
msgid "ClusterIntegration|Request to begin uninstalling failed"
+msgstr "Falha no pedido para iniciar a desinstalação"
+
+msgid "ClusterIntegration|Role name"
msgstr ""
msgid "ClusterIntegration|Save changes"
+msgstr "Guardar alterações"
+
+msgid "ClusterIntegration|Search IAM Roles"
msgstr ""
msgid "ClusterIntegration|Search machine types"
-msgstr ""
+msgstr "Pesquisar tipos de máquina"
msgid "ClusterIntegration|Search projects"
+msgstr "Pesquisar projetos"
+
+msgid "ClusterIntegration|Search regions"
msgstr ""
msgid "ClusterIntegration|Search zones"
-msgstr ""
+msgstr "Pesquisar zonas"
msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
-msgstr ""
+msgstr "Vê e edita os detalhes do teu cluster Kubernetes"
msgid "ClusterIntegration|Select machine type"
-msgstr ""
+msgstr "Selecionar tipo de máquina"
msgid "ClusterIntegration|Select project"
-msgstr ""
+msgstr "Selecionar projeto"
msgid "ClusterIntegration|Select project and zone to choose machine type"
-msgstr ""
+msgstr "Selecionar projeto e zona para escolher o tipo de máquina"
msgid "ClusterIntegration|Select project to choose zone"
+msgstr "Selecionar projeto para escolher a zona"
+
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
msgstr ""
msgid "ClusterIntegration|Select zone"
-msgstr ""
+msgstr "Selecionar zona"
msgid "ClusterIntegration|Select zone to choose machine type"
-msgstr ""
+msgstr "Seleciona a zona para escolher o tipo de máquina"
msgid "ClusterIntegration|Service Token"
-msgstr ""
+msgstr "Token de Serviço"
msgid "ClusterIntegration|Service token is required."
-msgstr ""
+msgstr "O Token de serviço é obrigatório."
msgid "ClusterIntegration|Show"
-msgstr ""
+msgstr "Mostrar"
msgid "ClusterIntegration|Something went wrong on our end."
-msgstr ""
+msgstr "Ocorreu um erro do nosso lado."
msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine"
-msgstr ""
+msgstr "Ocorreu um erro ao criar o teu cluster Kubernetes no Google Kubernetes Engine"
msgid "ClusterIntegration|Something went wrong while installing %{title}"
-msgstr ""
+msgstr "Ocorreu um erro ao instalar %{title}"
msgid "ClusterIntegration|Something went wrong while uninstalling %{title}"
-msgstr ""
+msgstr "Ocorreu um erro ao desinstalar %{title}"
msgid "ClusterIntegration|Something went wrong while updating Knative domain name."
-msgstr "Algo deu errado ao atualizar o nome do domínio Knative."
+msgstr "Ocorreu um erro ao atualizar o nome do domínio Knative."
msgid "ClusterIntegration|Specifying a domain will allow you to use Auto Review Apps and Auto Deploy stages for %{auto_devops_start}Auto DevOps%{auto_devops_end}. The domain should have a wildcard DNS configured matching the domain."
-msgstr ""
+msgstr "A especificação de um domínio permitirá que uses os estágios do Auto Review Apps e do Auto Deploy para %{auto_devops_start}Auto DevOps%{auto_devops_end}. O domínio deve ter um DNS caractere especial configurado correspondente ao domínio."
msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster."
-msgstr ""
+msgstr "O certificado Kubernetes usado para autenticar no cluster."
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
-msgstr ""
+msgstr "A URL usada para acessar a API Kubernetes."
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
+msgstr "O balanceador de carga associado e o IP serão apagados e não podem ser restaurados."
+
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
+msgstr "O endereço IP está em processo de atribuição. Verifica o teu cluster ou cotas do Kubernetes no Google Kubernetes Engine se demorar muito."
+
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
msgstr ""
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
-msgstr ""
+msgstr "Houve um problema ao autenticar com o teu cluster. Por favor, certifica-te de que o teu Certificado e Token da CA são válidos."
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
-msgstr ""
+msgstr "Esta conta precisa de permissões para criar um cluster Kubernetes no %{link_to_container_project} especificado"
msgid "ClusterIntegration|This option will allow you to install applications on RBAC clusters."
-msgstr ""
+msgstr "Esta opção permite-te instalar aplicações no RBAC clusters."
msgid "ClusterIntegration|To access your application after deployment, point a wildcard DNS to the Knative Endpoint."
-msgstr ""
+msgstr "Para acessar a aplicação após a implantação, a ponto de um caractere especial de DNS para o Ponto Final do Knative."
msgid "ClusterIntegration|Toggle Kubernetes cluster"
-msgstr ""
+msgstr "Alternar cluster do Kubernetes"
msgid "ClusterIntegration|Uninstall %{appTitle}"
-msgstr ""
+msgstr "Desinstalar %{appTitle}"
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
+msgstr "Atualização falhou. Por favor, verifica os registos e tenta novamente."
+
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
msgstr ""
msgid "ClusterIntegration|Validating project billing status"
-msgstr ""
+msgstr "A validar o estado de faturamento do projeto"
msgid "ClusterIntegration|We could not verify that one of your projects on GCP has billing enabled. Please try again."
-msgstr ""
+msgstr "Não foi possível verificar se um dos teus projetos no GCP possui o faturamento ativado. Por favor, tenta novamente."
msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr ""
@@ -3227,7 +3787,7 @@ msgid "ClusterIntegration|Zone"
msgstr ""
msgid "ClusterIntegration|access to Google Kubernetes Engine"
-msgstr ""
+msgstr "acesso ao Google Kubernetes Engine"
msgid "ClusterIntegration|documentation"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr "Configurar Prometheus"
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr "Configurar instalação existente"
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "Após autenticares-te, podes criar e enviar uma imagem de recipiente ao usar os comandos comuns de %{build} e %{push}"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr "Criar objetivo"
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "Criar etiqueta do projeto"
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr "Modelos de projeto personalizados não foram configurados para grupos dos quais é membro. Eles são ativados na página de definições de um grupo. Entra em contacto com o proprietário ou responsável do teu grupo para configurar modelos de projetos personalizados."
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr "Preparação"
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr "Ocorreu um erro ao apagar a licença."
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr "Endereço de email"
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "Estas datas afetam a forma como os teus épicos aparecem no roteamento. As datas de objetivos vêm de objetivos atribuídos aos problemas nos épicos. Também podes definir datas fixas ou removê-las totalmente."
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,14 +6126,17 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr "Erro ao atualizar %{issuableType}"
-msgid "Error updating status for all todos."
-msgstr "Erro ao atualizar estado para todas as tarefas."
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "Erro ao atualizar o estado do \"a fazer\"."
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr "Falha ao enviar o ficheiro de mapeamento de objeto"
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr "Erros encontrados no teu %{gitlab_ci_yml}:"
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr "Estado Geo"
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6338,7 +7497,7 @@ msgid "GitLab project export"
msgstr ""
msgid "GitLab restart is required to apply changes"
-msgstr ""
+msgstr "Para aplicar as alterações, é necessário reiniciar o GitLab"
msgid "GitLab single sign on URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr "O GitLab executará um trabalho em segundo plano que produzirá CSVs com
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr "Gitlab CI/CD"
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr "Definições globais de notificação"
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6473,7 +7734,7 @@ msgid "Group info:"
msgstr ""
msgid "Group maintainers can register group runners in the %{link}"
-msgstr "Os responsáveis do grupo podem registar runners de grupo no %{link}"
+msgstr "Os responsáveis do grupo podem registar executadores de grupo no %{link}"
msgid "Group name"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,8 +8353,8 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
-msgstr "Falhou a atualização dos projetos importados"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr ""
msgid "Improve Issue boards"
msgstr ""
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7584,7 +8941,7 @@ msgid "Label actions dropdown"
msgstr ""
msgid "Label lists show all issues with the selected label."
-msgstr "Listas de etiquetas que mostram todos os problemas com o etiqueta selecionado."
+msgstr "Listas de etiquetas que mostram todos os problemas com a etiqueta selecionada."
msgid "Label was created"
msgstr ""
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "Aprende mais sobre %{issue_boards_url} para acompanhar os problemas em várias listas, usando etiquetas, responsáveis e objetivos. Se te está a faltar algo dos painéis de problemas, por favor, cria um problema em %{gitlab_issues_url}."
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
+msgstr ""
+
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Approve"
+msgstr ""
+
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr "Aprovado por"
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr "Não foi possível guardar a ordem dos problemas"
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr "Correspondência não encontrada;; tenta refinar a tua consulta de pesquisa."
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr "Os membros podem ser adicionados ao projeto <i>Responsáveis</i> ou <i>P
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,18 +9695,6 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
-msgstr ""
-
-msgid "MergeRequests|Discussion stays unresolved"
-msgstr ""
-
-msgid "MergeRequests|Discussion will be resolved"
-msgstr ""
-
-msgid "MergeRequests|Discussion will be unresolved"
-msgstr ""
-
msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
@@ -8220,7 +9704,7 @@ msgstr "Ir para a próxima discussão não resolvida"
msgid "MergeRequests|Reply..."
msgstr "Responder..."
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
msgid "MergeRequests|Saving the comment failed"
@@ -8229,6 +9713,18 @@ msgstr ""
msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
+msgid "MergeRequests|Thread stays resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr ""
+
msgid "MergeRequests|Toggle comments for this file"
msgstr ""
@@ -8241,20 +9737,20 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr "comentou no envio %{commitLink}"
-msgid "MergeRequests|started a discussion"
-msgstr "iniciou uma discussão"
+msgid "MergeRequests|started a thread"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
-msgstr "iniciou uma discussão sobre %{linkStart}uma versão antiga do diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
-msgstr " iniciou uma discussão sobre %{linkStart}o diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "iniciou uma discussão sobre uma alteração desatualizada no commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "iniciou uma discussão sobre uma alteração desatualizada no commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
msgstr "%{paragraphStart}alterou a descrição %{descriptionChangedTimes} vezes %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr "Nenhum dado encontrado"
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8856,7 +10421,7 @@ msgid "No milestones to show"
msgstr "Nenhum objetivo para mostrar"
msgid "No other labels with such name or description"
-msgstr "Nenhuns outros etiquetas com tal nome ou descrição"
+msgstr "Nenhumas outras etiquetas com tal nome ou descrição"
msgid "No parent group"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr "Nenhum modelo"
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr "Personalizado"
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,15 +10938,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
-msgstr ""
-
-msgid "Pagination|Prev"
-msgstr ""
+msgid "Pagination|Next ›"
+msgstr "Próximo >"
msgid "Pagination|« First"
msgstr ""
+msgid "Pagination|‹ Prev"
+msgstr "< Anterior"
+
msgid "Parameter"
msgstr ""
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "Promove estes objetivos de projeto num objetivo de grupo."
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr "Receber notificações sobre a tua própria atividade"
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr "Reabrir objetivo"
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr "Redefinir modelo"
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,14 +13923,20 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
-msgstr ""
+msgid "Send a separate email notification to Developers."
+msgstr "Enviar uma notificação por email, separada aos Desenvolvedores."
msgid "Send confirmation email"
msgstr ""
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12037,7 +14215,7 @@ msgid "Share the <strong>%{sso_label}</strong> with members so they can sign in
msgstr ""
msgid "Shared Runners"
-msgstr "Runners Compartilhados"
+msgstr "Executadores Compartilhados"
msgid "Shared projects"
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr "Mostrar comentários"
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr "Mostrar descrição do envio"
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr "Mostrar último %{size} do registo -"
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "Iniciar um %{new_merge_request} a partir destas alterações"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,30 +14822,39 @@ msgstr ""
msgid "Start and due date"
msgstr ""
-msgid "Start cleanup"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
msgstr ""
-msgid "Start date"
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
msgstr ""
-msgid "Start discussion"
+msgid "Start cleanup"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start date"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
-msgstr "Iniciar a discussão e reabrir %{noteable_name}"
-
msgid "Start merge train"
msgstr ""
msgid "Start merge train when pipeline succeeds"
msgstr ""
+msgid "Start search"
+msgstr ""
+
msgid "Start the Runner!"
msgstr ""
+msgid "Start thread"
+msgstr ""
+
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
+
msgid "Start your trial"
msgstr ""
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr "Assinatura"
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "A fase de preparação mostra o tempo entre a mesclagem do PM e a implementação do código no ambiente de produção. Os dados serão adicionados, automaticamente, quando implantares na produção pela primeira vez."
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,8 +15694,14 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
-msgstr "Não há ainda etiquetas"
+msgstr "Ainda não há etiquetas"
+
+msgid "There are no matching files"
+msgstr ""
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr "Hora"
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "Alternar Estado: DESLIGADO"
msgid "ToggleButton|Toggle Status: ON"
msgstr "Alternar Estado: LIGADO"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr "Acompanhar grupos de problemas que compartilham um tema, através de pro
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "A atualizar"
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14835,7 +17331,7 @@ msgid "UserProfile|You haven't created any personal projects."
msgstr ""
msgid "UserProfile|You haven't created any snippets."
-msgstr "UserProfileNão criaste nenhuns fragmentos."
+msgstr "Não criaste nenhum fragmento."
msgid "UserProfile|Your projects can be available publicly, internally, or privately, at your choice."
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr "Podes convidar um novo para <strong>%{project_name}</strong> ou convidar outro grupo."
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr "Não tens nenhumas implantações por enquanto."
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15632,7 +18188,7 @@ msgid "You will only receive notifications for the events you choose"
msgstr "Irás apenas receber notificações para eventos que escolheres"
msgid "You will only receive notifications for threads you have participated in"
-msgstr "Irás apenas receber notificações para tópicos que participaste"
+msgstr "Somente receberás notificações para tópicos que participaste"
msgid "You will receive notifications for any activity"
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "um utilizador apagado"
msgid "added %{created_at_timeago}"
msgstr "adicionado %{created_at_timeago}"
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "atrás"
@@ -15814,6 +18388,9 @@ msgstr "já foi compartilhado com este grupo"
msgid "among other things"
msgstr "entre outras coisas"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr "versão %{versionIndex}"
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr "Adiciona um comentário ou razão para dispensar"
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr "Adicionar comentário e dispensa"
msgid "vulnerability|Dismiss vulnerability"
msgstr "Dispensar vulnerabilidade"
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr "Desfazer dispensa"
diff --git a/locale/ro_RO/gitlab.po b/locale/ro_RO/gitlab.po
index 7974362f44c..6b40862685d 100644
--- a/locale/ro_RO/gitlab.po
+++ b/locale/ro_RO/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: ro\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:37\n"
+"PO-Revision-Date: 2019-09-24 10:07\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -42,12 +51,18 @@ msgstr[2] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -66,6 +81,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d commits"
msgstr ""
@@ -93,6 +114,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -129,12 +156,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -156,13 +195,13 @@ msgstr[2] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -174,6 +213,9 @@ msgstr[2] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -198,12 +240,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -219,6 +273,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -234,10 +291,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -246,6 +303,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -312,6 +372,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -333,9 +396,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -345,6 +420,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -357,18 +435,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -480,9 +570,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -531,6 +618,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -567,6 +657,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -603,6 +696,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -612,6 +708,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -666,6 +765,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -684,6 +843,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -693,12 +855,21 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -711,12 +882,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -735,9 +921,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -747,6 +930,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -768,6 +954,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -786,12 +975,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -804,7 +1002,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -819,9 +1017,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -837,7 +1053,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -873,6 +1098,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -921,6 +1149,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1017,6 +1269,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1026,9 +1284,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1047,9 +1311,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1083,6 +1344,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1095,6 +1362,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1107,13 +1377,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1128,7 +1392,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1188,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1230,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1275,10 +1545,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1299,6 +1569,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1347,6 +1623,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1365,6 +1644,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1389,6 +1671,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1431,6 +1716,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1476,7 +1764,7 @@ msgstr[2] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1485,12 +1773,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1527,6 +1830,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1569,6 +1881,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1596,6 +1911,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1632,6 +1953,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1650,6 +1974,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1660,7 +1987,10 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1671,6 +2001,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1692,12 +2025,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1755,6 +2097,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1776,6 +2121,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1956,31 +2313,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1995,13 +2352,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2019,6 +2373,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2031,33 +2388,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2220,6 +2595,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2331,7 +2709,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2340,6 +2721,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2367,9 +2754,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2379,6 +2772,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2406,12 +2802,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2448,6 +2853,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2469,6 +2880,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2511,6 +2973,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2547,9 +3012,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2640,6 +3102,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2649,6 +3114,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2694,15 +3162,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2724,6 +3201,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2760,6 +3240,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2769,12 +3252,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2823,6 +3321,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2832,6 +3333,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2871,12 +3375,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2907,12 +3417,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2961,6 +3480,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3048,7 +3570,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3063,6 +3585,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3075,6 +3600,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3084,6 +3615,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3093,6 +3627,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3117,6 +3654,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3129,6 +3669,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3147,15 +3690,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3174,6 +3726,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3213,18 +3768,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3246,6 +3807,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3282,16 +3846,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3321,15 +3891,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3339,10 +3918,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3351,6 +3930,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3363,6 +3945,9 @@ msgstr[2] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3459,12 +4044,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3474,6 +4065,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3483,6 +4077,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3549,31 +4146,40 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3585,13 +4191,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3654,15 +4275,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3699,6 +4329,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3714,6 +4347,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3729,13 +4368,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3744,12 +4386,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3762,7 +4413,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3783,12 +4434,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3819,6 +4482,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3837,6 +4503,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3861,6 +4530,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3882,18 +4557,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3930,6 +4617,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3939,18 +4665,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3972,6 +4731,33 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3996,7 +4782,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4017,6 +4803,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4038,12 +4827,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4086,12 +4884,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4128,6 +4935,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4146,6 +4956,24 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4158,12 +4986,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4173,6 +5010,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4191,6 +5031,18 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4203,6 +5055,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4275,6 +5136,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4326,6 +5190,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4350,9 +5217,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4368,6 +5256,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4377,9 +5271,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4401,9 +5292,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4416,6 +5313,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4473,6 +5373,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4503,6 +5409,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4512,6 +5421,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4533,9 +5445,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4545,6 +5463,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4581,9 +5502,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4605,12 +5532,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4629,6 +5565,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4653,6 +5601,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4737,12 +5688,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4755,6 +5709,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4773,12 +5730,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4812,18 +5775,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4836,9 +5817,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5007,9 +5997,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5046,12 +6042,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5070,9 +6081,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5088,6 +6096,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5145,9 +6159,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5166,13 +6186,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5265,9 +6288,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5289,6 +6318,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5301,9 +6333,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5313,6 +6354,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5367,6 +6414,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5406,6 +6459,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5427,6 +6489,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5448,6 +6513,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5457,6 +6534,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5490,6 +6570,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5517,6 +6600,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5547,6 +6633,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5568,6 +6663,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5577,19 +6675,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5604,10 +6702,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5619,19 +6717,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5640,6 +6762,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5658,9 +6783,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5724,6 +6846,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5766,6 +6891,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5829,6 +6957,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5865,12 +6996,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5931,6 +7068,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5943,6 +7083,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6006,6 +7149,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6114,10 +7260,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6126,10 +7272,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6138,9 +7287,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6165,10 +7320,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6219,12 +7377,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6243,6 +7395,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6267,7 +7425,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6324,6 +7482,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6381,6 +7542,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6399,9 +7569,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6417,9 +7584,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6432,6 +7608,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6441,15 +7623,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6459,7 +7725,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6468,12 +7734,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6537,15 +7809,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6582,6 +7854,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6657,6 +7932,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6690,6 +7968,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6813,6 +8094,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6834,6 +8121,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6843,6 +8133,9 @@ msgstr[2] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6861,6 +8154,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6870,6 +8166,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6879,6 +8178,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6891,9 +8193,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6930,6 +8238,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6993,6 +8304,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7098,7 +8415,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7152,13 +8469,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7203,6 +8523,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7221,6 +8544,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7263,6 +8589,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7311,16 +8640,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7365,9 +8700,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7383,7 +8736,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7401,6 +8757,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7578,6 +8940,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7602,10 +8967,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7692,6 +9060,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7713,15 +9084,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7740,7 +9120,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7758,9 +9138,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7779,6 +9156,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7788,6 +9168,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7818,76 +9201,100 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7899,6 +9306,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7908,12 +9318,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7926,13 +9342,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7944,6 +9360,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7983,13 +9402,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8001,6 +9426,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8016,19 +9444,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8073,6 +9507,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8091,6 +9528,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8100,7 +9543,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8112,15 +9555,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8178,9 +9672,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8208,6 +9711,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8220,6 +9726,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8253,34 +9762,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8295,19 +9804,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8331,24 +9840,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8517,9 +10044,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8559,6 +10083,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8571,7 +10098,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8583,6 +10110,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8613,6 +10146,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8622,6 +10161,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8718,6 +10263,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8805,13 +10353,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8823,13 +10383,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8844,9 +10410,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8856,6 +10419,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8880,12 +10452,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8940,9 +10518,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8952,6 +10536,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8964,6 +10551,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8982,6 +10572,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8991,6 +10584,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9006,6 +10602,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9102,6 +10701,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9120,9 +10722,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9138,6 +10752,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9168,6 +10785,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9192,6 +10815,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9201,6 +10830,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9210,6 +10842,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9291,6 +10929,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9315,6 +10959,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9351,13 +11007,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9429,9 +11085,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9459,12 +11133,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9531,7 +11214,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9555,12 +11238,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9609,15 +11301,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9648,6 +11355,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9660,18 +11370,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9702,6 +11406,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9720,6 +11427,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9807,6 +11517,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9816,7 +11529,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9843,6 +11556,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9900,6 +11616,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9936,6 +11658,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10050,6 +11787,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10092,6 +11832,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10122,6 +11865,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10227,6 +11973,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10272,6 +12024,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10281,6 +12036,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10332,9 +12090,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10377,6 +12132,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10395,13 +12156,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10410,6 +12201,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10581,10 +12378,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10602,9 +12447,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10638,6 +12480,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10668,6 +12513,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10692,6 +12540,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10710,6 +12564,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10740,6 +12597,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10815,6 +12675,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10908,6 +12771,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10917,9 +12783,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10929,6 +12804,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10998,9 +12876,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11028,6 +12903,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11037,9 +12915,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11061,6 +12945,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11070,12 +12957,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11085,30 +12981,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11142,6 +13083,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11151,12 +13101,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11223,6 +13182,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11247,9 +13209,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11262,6 +13230,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11277,6 +13248,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11295,6 +13269,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11310,10 +13287,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11322,6 +13305,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11370,6 +13356,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11436,6 +13425,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11496,7 +13488,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11571,6 +13563,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11580,6 +13575,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11601,15 +13599,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11697,9 +13710,87 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11712,6 +13803,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11727,24 +13821,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11772,6 +13890,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11799,6 +13920,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11808,12 +13932,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11826,6 +13956,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11835,7 +13968,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11847,6 +13989,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11862,13 +14007,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11895,6 +14046,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11922,6 +14079,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11952,9 +14112,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11973,6 +14145,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12006,12 +14181,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12021,16 +14208,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12048,6 +14241,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12075,6 +14271,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12132,9 +14334,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12159,6 +14367,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12189,6 +14409,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12201,6 +14424,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12210,6 +14436,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12234,6 +14466,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12252,6 +14487,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12285,9 +14535,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12318,6 +14574,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12327,6 +14586,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12360,6 +14625,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12411,6 +14679,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12480,6 +14751,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12495,6 +14769,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12573,6 +14853,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12594,13 +14877,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12609,6 +14892,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12618,28 +14907,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12666,12 +14964,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12702,6 +15006,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12717,6 +15033,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12741,6 +15060,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12753,9 +15078,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12816,6 +15138,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12909,9 +15234,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12969,6 +15300,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13122,6 +15459,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13137,6 +15477,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13161,9 +15504,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13188,6 +15528,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13224,9 +15570,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13341,7 +15684,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13368,7 +15711,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13377,7 +15720,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13401,7 +15744,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13437,9 +15780,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13461,6 +15810,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13470,18 +15822,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13506,6 +15861,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13563,10 +15921,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13614,6 +15972,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13623,12 +15987,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13650,13 +16017,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13713,9 +16080,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13734,9 +16107,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13767,6 +16137,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13776,6 +16149,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13797,6 +16173,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13815,6 +16194,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13824,6 +16212,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13833,12 +16224,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13962,6 +16362,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13995,6 +16398,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14010,6 +16416,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14037,12 +16446,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14067,12 +16470,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14097,16 +16518,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14115,6 +16536,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14124,9 +16548,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14139,16 +16560,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14169,6 +16599,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14187,6 +16620,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14223,9 +16662,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14253,9 +16689,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14280,12 +16713,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14319,6 +16761,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14331,6 +16785,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14361,6 +16818,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14388,12 +16851,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14430,6 +16905,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14439,15 +16923,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14478,6 +16974,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14490,6 +16989,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14553,6 +17055,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14721,6 +17226,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14733,6 +17241,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14796,7 +17307,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14808,7 +17319,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14823,10 +17334,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14874,6 +17385,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14886,6 +17403,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14913,6 +17433,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14991,6 +17514,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15069,6 +17595,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15090,16 +17619,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15108,16 +17649,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15159,6 +17703,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15174,10 +17721,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15231,6 +17775,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15246,12 +17793,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15261,6 +17814,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15333,15 +17889,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15357,19 +17907,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15390,6 +17937,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15420,6 +17970,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15456,6 +18009,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15510,6 +18066,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15534,7 +18093,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15555,6 +18117,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15576,9 +18141,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15606,6 +18168,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15630,6 +18204,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15720,6 +18300,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15759,6 +18342,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15774,7 +18360,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15846,6 +18432,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15858,12 +18447,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15879,6 +18477,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15897,6 +18498,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15906,6 +18513,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16017,6 +18627,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16035,10 +18648,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16056,10 +18669,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16080,34 +18693,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16134,6 +18726,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16194,6 +18789,9 @@ msgstr[2] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16236,6 +18834,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16251,7 +18852,10 @@ msgstr[2] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16260,12 +18864,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "done"
msgstr ""
@@ -16275,16 +18873,28 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16329,6 +18939,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16374,21 +18987,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16413,15 +19026,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16443,6 +19065,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16566,6 +19197,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16599,6 +19233,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16650,7 +19287,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16662,9 +19299,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16674,6 +19323,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16707,9 +19359,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16722,7 +19380,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16740,7 +19398,10 @@ msgstr[2] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16764,12 +19425,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16782,6 +19449,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16869,15 +19539,39 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16887,6 +19581,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16902,12 +19599,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/ru/gitlab.po b/locale/ru/gitlab.po
index 517bb388e1e..f0d5c6afc5f 100644
--- a/locale/ru/gitlab.po
+++ b/locale/ru/gitlab.po
@@ -13,20 +13,29 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: ru\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:38\n"
+"PO-Revision-Date: 2019-09-24 10:12\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (из %{timeoutSource})"
msgid " Please sign in."
-msgstr ""
+msgstr "ПожалуйÑта, войдите."
msgid " Try to %{action} this file again."
-msgstr ""
+msgstr " Попробуйте %{action} Ñтот файл еще раз."
msgid " You need to do this before %{grace_period_deadline}."
-msgstr ""
+msgstr " Вам нужно Ñделать Ñто до %{grace_period_deadline}."
msgid " and"
msgstr " и"
+msgid " and "
+msgstr " и "
+
+msgid " and %{sliced}"
+msgstr " и %{sliced}"
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " ухудшилоÑÑŒ на %d пункт"
@@ -44,12 +53,18 @@ msgstr[3] " улучшилоÑÑŒ на %d пунктов"
msgid " or "
msgstr " или "
+msgid " or <!merge request id>"
+msgstr " или <!merge request id>"
+
msgid " or <#epic id>"
msgstr " или <#epic id>"
msgid " or <#issue id>"
msgstr " или <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr " или ÑÑылки (например: path/to/project!merge_request_id)"
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d комментарий"
@@ -71,15 +86,22 @@ msgstr[1] "на %d коммита позади"
msgstr[2] "на %d коммитов позади"
msgstr[3] "на %d коммитов позади"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d коммит,"
+msgstr[1] "%d коммита,"
+msgstr[2] "%d коммитов,"
+msgstr[3] "%d коммитов,"
+
msgid "%d commits"
msgstr "%d коммитов"
msgid "%d contribution"
msgid_plural "%d contributions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "%d вклад"
+msgstr[1] "%d вклада"
+msgstr[2] "%d вкладов"
+msgstr[3] "%d вкладов"
msgid "%d exporter"
msgid_plural "%d exporters"
@@ -102,6 +124,13 @@ msgstr[1] "%d иÑправленных результатов теÑта"
msgstr[2] "%d иÑправленных результатов теÑта"
msgstr[3] "%d иÑправленные результаты теÑта"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d обÑуждение"
@@ -144,8 +173,22 @@ msgstr[1] "%d метрики"
msgstr[2] "%d метрик"
msgstr[3] "%d метрик"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
+msgstr[0] "еще %d комментарий"
+msgstr[1] "еще %d комментариÑ"
+msgstr[2] "еще %d комментариев"
+msgstr[3] "еще %d комментариев"
+
+msgid "%d second"
+msgid_plural "%d seconds"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -175,14 +218,14 @@ msgstr[3] "%s дополнительных коммитов было пропуÑ
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} & %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "ОбÑуждение %{authorsName}"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} Ñоздан %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
-msgstr ""
+msgid "%{count} LOC/commit"
+msgstr "%{count} Ñтрок кода / коммит"
msgid "%{count} approval required from %{name}"
msgid_plural "%{count} approvals required from %{name}"
@@ -192,7 +235,10 @@ msgstr[2] ""
msgstr[3] ""
msgid "%{count} approvals from %{name}"
-msgstr "%{count} одобрений от %{name}"
+msgstr "%{count} ÑоглаÑований от %{name}"
+
+msgid "%{count} files touched"
+msgstr ""
msgid "%{count} more"
msgstr "ещё %{count}"
@@ -201,7 +247,7 @@ msgid "%{count} more assignees"
msgstr "Ещё %{count} иÑполнителей"
msgid "%{count} of %{required} approvals from %{name}"
-msgstr "%{count} из %{required} одобрений от %{name}"
+msgstr "%{count} из %{required} ÑоглаÑований от %{name}"
msgid "%{count} of %{total}"
msgstr "%{count} из %{total}"
@@ -220,12 +266,24 @@ msgstr[1] "%{count} комментариев в ожидании"
msgstr[2] "%{count} комментариев в ожидании"
msgstr[3] "%{count} комментарии в ожидании"
+msgid "%{duration}ms"
+msgstr "%{duration}мÑ"
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
+msgstr "%{edit_in_new_fork_notice} Попробуйте ещё раз выбрать Ñтот коммит."
+
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
msgstr ""
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} удален"
@@ -241,6 +299,9 @@ msgstr "%{group_docs_link_start}Группы%{group_docs_link_end} позволÑ
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} будет удален! Вы уверены?"
@@ -251,23 +312,26 @@ msgid "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free
msgstr ""
msgid "%{level_name} is not allowed in a %{group_level_name} group."
-msgstr ""
+msgstr "%{level_name} не допуÑкаетÑÑ Ð² %{group_level_name} группе."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr ""
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}Подробнее%{link_end} о ролевом доÑтупе"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Запущена"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} заблокирован пользователем GitLab %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -296,39 +360,39 @@ msgid "%{service_title} settings saved, but not activated."
msgstr ""
msgid "%{size} GiB"
-msgstr ""
+msgstr "%{size} Гб"
msgid "%{size} KiB"
-msgstr ""
+msgstr "%{size} Кб"
msgid "%{size} MiB"
-msgstr ""
+msgstr "%{size} Мб"
msgid "%{size} bytes"
-msgstr ""
+msgstr "%{size} байт"
msgid "%{spammable_titlecase} was submitted to Akismet successfully."
msgstr ""
msgid "%{state} epics"
-msgstr ""
+msgstr "%{state} цели"
msgid "%{strong_start}%{branch_count}%{strong_end} Branch"
msgid_plural "%{strong_start}%{branch_count}%{strong_end} Branches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "%{strong_start}%{branch_count}%{strong_end} Ветка"
+msgstr[1] "%{strong_start}%{branch_count}%{strong_end} Ветки"
+msgstr[2] "%{strong_start}%{branch_count}%{strong_end} Веток"
+msgstr[3] "%{strong_start}%{branch_count}%{strong_end} Веток"
msgid "%{strong_start}%{commit_count}%{strong_end} Commit"
msgid_plural "%{strong_start}%{commit_count}%{strong_end} Commits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "%{strong_start}%{commit_count}%{strong_end} Коммит"
+msgstr[1] "%{strong_start}%{commit_count}%{strong_end} Коммита"
+msgstr[2] "%{strong_start}%{commit_count}%{strong_end} Коммитов"
+msgstr[3] "%{strong_start}%{commit_count}%{strong_end} Коммитов"
msgid "%{strong_start}%{human_size}%{strong_end} Files"
-msgstr ""
+msgstr "%{strong_start}%{human_size}%{strong_end} файлов"
msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
@@ -337,6 +401,9 @@ msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Тега"
msgstr[2] "%{strong_start}%{tag_count}%{strong_end} Тегов"
msgstr[3] "%{strong_start}%{tag_count}%{strong_end} Тегов"
+msgid "%{tabname} changed"
+msgstr "%{tabname} изменено"
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files}"
@@ -348,7 +415,7 @@ msgid "%{text} is available"
msgstr "%{text} доÑтупен"
msgid "%{title} %{operator} %{threshold}"
-msgstr ""
+msgstr "%{title} %{operator} %{threshold}"
msgid "%{title} changes"
msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² %{title}"
@@ -359,9 +426,21 @@ msgstr "%{unstaged} не зафикÑированных и %{staged} зафикÑ
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr "Ðватар %{userName}"
+
msgid "%{user_name} profile page"
msgstr "Ñтраница Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ %{user_name}"
+msgid "%{username}'s avatar"
+msgstr "аватар %{username}"
+
+msgid "%{value} ms"
+msgstr "%{value} мÑ"
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -371,18 +450,24 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "(%d закрыт)"
+msgstr[1] "(%d закрыто)"
+msgstr[2] "(%d закрыто)"
+msgstr[3] "(%d закрыто)"
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} объединено)"
msgid "(No changes)"
-msgstr ""
+msgstr "(Без изменений)"
+
+msgid "(Show all)"
+msgstr "(Показать вÑе)"
msgid "(check progress)"
msgstr ""
@@ -390,12 +475,21 @@ msgstr ""
msgid "(external source)"
msgstr "(внешний иÑточник)"
+msgid "(removed)"
+msgstr "(удалено)"
+
+msgid "+ %{amount} more"
+msgstr "+%{amount} ещё"
+
msgid "+ %{count} more"
msgstr "+ ещё %{count}"
msgid "+ %{moreCount} more"
msgstr "+ ещё %{moreCount}"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr "+ещё %{extraOptionCount}"
@@ -412,7 +506,7 @@ msgid "- show less"
msgstr "- Ñвернуть"
msgid "0 for unlimited"
-msgstr ""
+msgstr "0 — без ограничений"
msgid "1 %{type} addition"
msgid_plural "%{count} %{type} additions"
@@ -430,10 +524,10 @@ msgstr[3] "%{count} модификаций типа %{type}"
msgid "1 Day"
msgid_plural "%d Days"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "1 день"
+msgstr[1] "%d днÑ"
+msgstr[2] "%d дней"
+msgstr[3] "%d дней"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
@@ -450,7 +544,7 @@ msgstr[2] ""
msgstr[3] ""
msgid "1 day"
-msgstr ""
+msgstr "1 день"
msgid "1 group"
msgid_plural "%d groups"
@@ -502,7 +596,7 @@ msgstr[2] "%d пользователей"
msgstr[3] "%d пользователей"
msgid "1 week"
-msgstr ""
+msgstr "1 неделÑ"
msgid "1-9 contributions"
msgstr ""
@@ -519,20 +613,17 @@ msgstr ""
msgid "2FA"
msgstr "Ð”Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ"
-msgid "2FA enabled"
-msgstr "Ð”Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°"
-
msgid "2FADevice|Registered On"
-msgstr ""
+msgstr "ЗарегиÑтрированы"
msgid "3 days"
-msgstr ""
+msgstr "3 днÑ"
msgid "3 hours"
-msgstr ""
+msgstr "3 чаÑа"
msgid "30 minutes"
-msgstr ""
+msgstr "30 минут"
msgid "30+ contributions"
msgstr ""
@@ -553,7 +644,7 @@ msgid "404|Please contact your GitLab administrator if you think this is a mista
msgstr "ПожалуйÑта ÑвÑжитеÑÑŒ Ñ Ð²Ð°ÑˆÐ¸Ð¼ админиÑтратором GitLab Ñервера, еÑли вы Ñчитаете данное поведение ошибкой."
msgid "8 hours"
-msgstr ""
+msgstr "8 чаÑов"
msgid "<code>\"johnsmith@example.com\": \"@johnsmith\"</code> will add \"By <a href=\"#\">@johnsmith</a>\" to all issues and comments originally created by johnsmith@example.com, and will set <a href=\"#\">@johnsmith</a> as the assignee on all issues originally assigned to johnsmith@example.com."
msgstr ""
@@ -570,6 +661,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr "<no scopes selected>"
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -589,25 +683,28 @@ msgid "<strong>Deletes</strong> source branch"
msgstr "<strong>УдалÑет</strong> иÑходную ветку"
msgid "A 'Runner' is a process which runs a job. You can set up as many Runners as you need."
-msgstr ""
+msgstr "«Runner» - Ñто процеÑÑ, который выполнÑет Ñозданное вами задание. Ð’Ñ‹ можете наÑтроить Ñтолько таких процеÑÑов, Ñколько вам нужно."
msgid "A .NET Core console application template, customizable for any .NET Core project"
msgstr "Шаблон конÑольного Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ .NET Core, наÑтраиваемый Ð´Ð»Ñ Ð»ÑŽÐ±Ð¾Ð³Ð¾ проекта .NET Core"
msgid "A GitBook site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
-msgstr ""
+msgstr "Сайт GitBook, который иÑпользует Netlify Ð´Ð»Ñ CI/CD вмеÑто GitLab, но вÑÑ‘ ещё Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ замечательными возможноÑÑ‚Ñми GitLab."
msgid "A Hexo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
-msgstr ""
+msgstr "Сайт Hexo, который иÑпользует Netlify Ð´Ð»Ñ CI/CD вмеÑто GitLab, но вÑÑ‘ ещё Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ замечательными возможноÑÑ‚Ñми GitLab."
msgid "A Hugo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
-msgstr ""
+msgstr "Сайт Hugo, который иÑпользует Netlify Ð´Ð»Ñ CI/CD вмеÑто GitLab, но вÑÑ‘ ещё Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ замечательными возможноÑÑ‚Ñми GitLab."
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
-msgstr ""
+msgstr "Сайт Jekyll, который иÑпользует Netlify Ð´Ð»Ñ CI/CD вмеÑто GitLab, но вÑÑ‘ ещё Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ замечательными возможноÑÑ‚Ñми GitLab."
+
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr "SSL Ñертификат Let's Encrypt не может быть получен, пока ваш домен не будет проверен."
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
-msgstr ""
+msgstr "Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ Let's Encrypt будет наÑтроена Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ уÑтановки GitLab Ñ Ð¸Ñпользованием адреÑа вашей Ñлектронной почты. Ð’Ñ‹ получите Ñлектронное пиÑьмо Ñ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸ÐµÐ¼ об иÑтечении Ñрока дейÑÑ‚Ð²Ð¸Ñ Ñертификатов."
msgid "A default branch cannot be chosen for an empty project."
msgstr "Ð”Ð»Ñ Ð¿ÑƒÑтого проекта Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð±Ñ€Ð°Ñ‚ÑŒ ветку по умолчанию."
@@ -628,28 +725,34 @@ msgid "A new impersonation token has been created."
msgstr ""
msgid "A plain HTML site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
-msgstr ""
+msgstr "ПроÑтой HTML-Ñайт, который иÑпользует Netlify Ð´Ð»Ñ CI/CD вмеÑто GitLab, но вÑÑ‘ ещё Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ замечательными возможноÑÑ‚Ñми GitLab."
msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
msgstr "Ð’ проекте вы размещаете Ñвои файлы (репозиторий), планируете Ñвою работу (обÑуждениÑ), и публикуете документацию (wiki), %{among_other_things_link}."
msgid "A ready-to-go template for use with Android apps."
-msgstr ""
+msgstr "Готовый шаблон Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми Android."
msgid "A ready-to-go template for use with iOS Swift apps."
-msgstr ""
+msgstr "Готовый шаблон Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми iOS Swift."
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "РегулÑрное выражение, которое будет иÑпользоватьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка результатов Ð¿Ð¾ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ‚ÐµÑтами в задании. ОÑтавьте пуÑтым Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "Пользователь Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸ÐµÐ¼ на запиÑÑŒ в ветку иÑточника выбрал Ñтот вариант"
msgid "API Help"
-msgstr ""
+msgstr "Справка по API"
msgid "API Token"
-msgstr ""
+msgstr "API токен"
+
+msgid "Abort"
+msgstr "Отменить"
msgid "About GitLab"
msgstr "О GitLab"
@@ -682,7 +785,7 @@ msgid "Access Tokens"
msgstr "Токены ДоÑтупа"
msgid "Access denied for your LDAP account."
-msgstr ""
+msgstr "ДоÑтуп запрещен Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ учетной запиÑи LDAP."
msgid "Access denied! Please verify you can add deploy keys to this repository."
msgstr "ДоÑтуп запрещен! ПожалуйÑта, убедитеÑÑŒ, что вы можете добавить ключи Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð² Ñтот репозиторий."
@@ -691,18 +794,78 @@ msgid "Access expiration date"
msgstr "Дата Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупа"
msgid "Access forbidden. Check your access level."
-msgstr ""
+msgstr "ДоÑтуп запрещен. Проверьте Ñвой уровень доÑтупа."
msgid "Access to '%{classification_label}' not allowed"
msgstr "ДоÑтуп к '%{classification_label}' не разрешён"
msgid "AccessDropdown|Groups"
-msgstr ""
+msgstr "Группы"
msgid "AccessDropdown|Roles"
-msgstr ""
+msgstr "Роли"
msgid "AccessDropdown|Users"
+msgstr "Пользователи"
+
+msgid "AccessTokens|Access Tokens"
+msgstr "Токены доÑтупа"
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "Ð’Ñ‹ уверены? Любые RSS или URL-адреÑа календарÑ, иÑпользуемые в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÑтанут работать."
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr "Создано"
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr "Токен входÑщей Ñлектронной почты"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "Его Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ð´Ð»Ñ Ð´Ð¾Ñтупа к любым другим данным."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Держите Ñтот токен в Ñекрете. Любой, кто получит его, может Ñоздать обÑуждениÑ, как будто бы Ñто были вы. ЕÑли Ñто когда-либо произойдет, то вам Ñледует %{link_reset_it}."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Держите Ñтот токен в Ñекрете. Любой кто завладеет им Ñможет читать RSS - ленты активноÑти и задач или ваш календарь, так же как вы. ЕÑли Ñто когда-нибудь произойдет, то вы должны %{link_reset_it}."
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr "Личные токены доÑтупа"
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr "Тогда они будут ÑвлÑÑ‚ÑŒÑÑ ÐµÐ´Ð¸Ð½Ñтвенным возможным паролем, еÑли у Ð²Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° Ð´Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ (2FA)."
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr "Ð’Ñ‹ также можете иÑпользовать перÑональные токены Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ в Git по HTTP."
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr "Ð’Ñ‹ можете Ñгенерировать личный токен доÑтупа Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ иÑпользуемого вами приложениÑ, которому необходим доÑтуп к GitLab API."
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
msgstr ""
msgid "Account"
@@ -712,17 +875,20 @@ msgid "Account and limit"
msgstr "Ðккаунт и ограничениÑ"
msgid "Account: %{account}"
-msgstr ""
+msgstr "Ðккаунт: %{account}"
msgid "Action to take when receiving an alert."
msgstr "ДейÑтвиÑ, предпринимаемые при получении предупреждениÑ."
msgid "Activate Service Desk"
-msgstr ""
+msgstr "Ðктивировать Ñлужбу поддержки"
msgid "Active"
msgstr "Ðктивный"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr "Ðктивные ÑеÑÑии"
@@ -732,12 +898,22 @@ msgstr "ÐктивноÑÑ‚ÑŒ"
msgid "Add"
msgstr "Добавить"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Add CHANGELOG"
msgstr "Добавить CHANGELOG"
msgid "Add CONTRIBUTING"
msgstr "Добавить CONTRIBUTING"
+msgid "Add GitLab to Slack"
+msgstr "Добавить GitLab в Slack"
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Добавить групповые веб-обработчики и GitLab Enterprise Edition."
@@ -750,12 +926,27 @@ msgstr "Добавить Kubernetes клаÑтер"
msgid "Add README"
msgstr "Добавить README"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
+msgstr "Добавить GPG ключ"
+
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
msgstr ""
+msgid "Add a To Do"
+msgstr "Добавить в ÑпиÑок задач"
+
msgid "Add a bullet list"
msgstr "Добавить маркированный ÑпиÑок"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Добавить общий комментарий к Ñтому %{noteable_name}."
@@ -774,16 +965,16 @@ msgstr "Добавить таблицу"
msgid "Add a task list"
msgstr "Добавить ÑпиÑок задач"
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Добавить дополнительный текÑÑ‚, который будет отображатьÑÑ Ð²Ð¾ вÑех ÑообщениÑÑ… Ñлектронной почты. МакÑимум %{character_limit} Ñимволов"
msgid "Add an SSH key"
-msgstr ""
+msgstr "Добавить SSH ключ"
msgid "Add an issue"
+msgstr "Добавить обÑуждение"
+
+msgid "Add approval rule"
msgstr ""
msgid "Add approvers"
@@ -799,7 +990,7 @@ msgid "Add comment now"
msgstr "Добавить комментарий"
msgid "Add email address"
-msgstr ""
+msgstr "Добавить Ð°Ð´Ñ€ÐµÑ Ñлектронной почты"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
msgstr ""
@@ -807,17 +998,20 @@ msgstr ""
msgid "Add image comment"
msgstr "Добавить комментарий к изображению"
+msgid "Add issues"
+msgstr "Добавить задачи"
+
msgid "Add italic text"
msgstr "Добавить курÑив"
msgid "Add label(s)"
-msgstr ""
+msgstr "Добавить метку(и)"
msgid "Add license"
msgstr "Добавить лицензию"
msgid "Add list"
-msgstr ""
+msgstr "Добавить ÑпиÑок"
msgid "Add new application"
msgstr "Добавить новое приложение"
@@ -825,12 +1019,21 @@ msgstr "Добавить новое приложение"
msgid "Add new directory"
msgstr "Добавить новый каталог"
-msgid "Add or subtract spent time"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
msgstr ""
+msgid "Add or subtract spent time"
+msgstr "Добавить или вычеÑÑ‚ÑŒ потраченное времÑ"
+
msgid "Add reaction"
msgstr "Добавить реакцию"
+msgid "Add to Slack"
+msgstr "Добавить в Slack"
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -843,8 +1046,8 @@ msgstr "Добавить в проект"
msgid "Add to review"
msgstr "Добавить к рецензированию"
-msgid "Add todo"
-msgstr "Добавить в дела"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "Добавить пользовател(Ñ/ей) в группу:"
@@ -858,14 +1061,32 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr "Добавлено"
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr "Добавлено в ÑпиÑок задач."
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "Добавление новых приложений отключено в вашем ÑкземплÑре GitLab. ОбратитеÑÑŒ к админиÑтратору GitLab, чтобы получить разрешение"
msgid "Additional minutes"
-msgstr ""
+msgstr "Дополнительные минуты"
msgid "Additional text"
msgstr "Дополнительный текÑÑ‚"
@@ -876,11 +1097,20 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
-msgstr "Панель админиÑтрированиÑ"
+msgstr "Ðдмин панель"
msgid "Admin Overview"
msgstr "Обзор ÐдминиÑтратора"
@@ -889,7 +1119,7 @@ msgid "Admin Section"
msgstr ""
msgid "Admin notes"
-msgstr ""
+msgstr "Заметки админиÑтратора"
msgid "AdminArea| You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide \"Ghost-user\". To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ окончательно удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %{username}. ОбÑуждениÑ, запроÑÑ‹ ÑлиÑÐ½Ð¸Ñ Ð¸ ÑвÑзанные Ñ Ð½Ð¸Ð¼Ð¸ группы будут переданы общеÑиÑтемному «Призрачному пользователю». Чтобы избежать потери данных, раÑÑмотрите возможноÑÑ‚ÑŒ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ %{strong_start}блокировки пользователÑ%{strong_end}. ПоÑле %{strong_start}ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ%{strong_end} его будет невозможно воÑÑтановить или отменить удаление."
@@ -912,9 +1142,12 @@ msgstr "ОÑтановка заданий не удалаÑÑŒ"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ оÑтановить вÑе заданиÑ. Это дейÑтвие оÑтановит вÑе текущие заданиÑ, находÑщиеÑÑ Ð² процеÑÑе выполнениÑ."
-msgid "AdminNote|Note"
+msgid "AdminDashboard|Error loading the statistics. Please try again"
msgstr ""
+msgid "AdminNote|Note"
+msgstr "ПримечаниÑ"
+
msgid "AdminProjects| You’re about to permanently delete the project %{projectName}, its repository, and all related resources including issues, merge requests, etc.. Once you confirm and press %{strong_start}Delete project%{strong_end}, it cannot be undone or recovered."
msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ окончательно удалить проект %{projectName}, его репозиторий и вÑе ÑвÑзанные реÑурÑÑ‹, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¾Ð±ÑуждениÑ, запроÑÑ‹ ÑлиÑÐ½Ð¸Ñ Ð¸ Ñ‚.д. ПоÑле Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ %{strong_start}ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°%{strong_end} его будет невозможно воÑÑтановить или отменить удаление."
@@ -931,7 +1164,7 @@ msgid "AdminSettings|Auto DevOps domain"
msgstr "Домен Auto DevOps"
msgid "AdminSettings|Enable shared runners for new projects"
-msgstr ""
+msgstr "Сделать runner'Ñ‹ Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… проектов общими"
msgid "AdminSettings|Environment variables are protected by default"
msgstr "Переменные Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð·Ð°Ñ‰Ð¸Ñ‰ÐµÐ½Ñ‹ по умолчанию"
@@ -946,7 +1179,7 @@ msgid "AdminSettings|Select a pipeline configuration file"
msgstr ""
msgid "AdminSettings|Select a template"
-msgstr ""
+msgstr "Выберите шаблон"
msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
msgstr ""
@@ -960,6 +1193,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "При Ñоздании новой переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¾Ð½Ð° будет защищена по умолчанию."
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "2FA отключена"
@@ -1033,22 +1290,22 @@ msgid "AdminUsers|Without projects"
msgstr "Без проектов"
msgid "Advanced"
-msgstr ""
+msgstr "РаÑширенные"
msgid "Advanced permissions, Large File Storage and Two-Factor authentication settings."
-msgstr ""
+msgstr "Дополнительные разрешениÑ, хранилище больших файлов и наÑтройки двухфакторной аутентификации."
msgid "Advanced search functionality"
-msgstr ""
+msgstr "РаÑширенные возможноÑти поиÑка"
msgid "Advanced settings"
msgstr "РаÑширенные наÑтройки"
msgid "After a successful password update you will be redirected to login screen."
-msgstr ""
+msgstr "ПоÑле уÑпешного Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð²Ñ‹ будете перенаправлены на Ñкран входа в ÑиÑтему."
msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
-msgstr ""
+msgstr "ПоÑле уÑпешного Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð²Ñ‹ будете перенаправлены на Ñтраницу входа, где вы можете войти Ñ Ð½Ð¾Ð²Ñ‹Ð¼ паролем."
msgid "Alert"
msgid_plural "Alerts"
@@ -1057,6 +1314,12 @@ msgstr[1] "Предупреждений"
msgstr[2] "Предупреждений"
msgstr[3] "Предупреждений"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "ОповещениÑ"
@@ -1066,9 +1329,15 @@ msgstr "Ð’Ñе"
msgid "All Members"
msgstr "Ð’Ñе УчаÑтники"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "Ð’Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ñ„Ð¸ÐºÑированы"
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1085,16 +1354,13 @@ msgid "All merge conflicts were resolved. The merge request can now be merged."
msgstr ""
msgid "All projects"
-msgstr ""
-
-msgid "All todos were marked as done."
-msgstr ""
+msgstr "Ð’Ñе проекты"
msgid "All users"
msgstr "Ð’Ñе пользователи"
msgid "All users must have a name."
-msgstr ""
+msgstr "У вÑех пользователей должно быть имÑ."
msgid "Allow \"%{group_name}\" to sign you in"
msgstr ""
@@ -1123,11 +1389,17 @@ msgstr "Разрешить рендеринг диаграмм PlantUML в доÐ
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
msgid "Allow users to register any application to use GitLab as an OAuth provider"
-msgstr ""
+msgstr "Разрешить пользователÑм региÑтрировать любое приложение Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ GitLab как провайдера OAuth"
msgid "Allow users to request access"
msgstr "Разрешить пользователÑм запрашивать доÑтуп"
@@ -1135,6 +1407,9 @@ msgstr "Разрешить пользователÑм запрашивать дÐ
msgid "Allow users to request access if visibility is public or internal."
msgstr "Разрешить пользователÑм запрашивать доÑтуп, еÑли видимоÑÑ‚ÑŒ ÑвлÑетÑÑ Ð¾Ð±Ñ‰ÐµÐ´Ð¾Ñтупной или внутренней."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1147,13 +1422,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1168,17 +1437,17 @@ msgstr ""
msgid "An error has occurred"
msgstr "Произошла ошибка"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Произошла ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€Ð½Ð¾Ð²Ð¸ÐºÐ° ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ Ðº диÑкуÑÑии."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "Произошла ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ черновика."
msgid "An error occurred creating the new branch."
-msgstr ""
+msgstr "Произошла ошибка при Ñоздании новой ветки."
msgid "An error occurred fetching the approval rules."
-msgstr ""
+msgstr "Произошла ошибка при выборке правил утверждениÑ."
msgid "An error occurred fetching the approvers for the new rule."
msgstr ""
@@ -1202,7 +1471,7 @@ msgid "An error occurred when updating the issue weight"
msgstr "Произошла ошибка при обновлении веÑа обÑуждениÑ"
msgid "An error occurred while deleting the approvers group"
-msgstr ""
+msgstr "Произошла ошибка при удалении группы подтверждений"
msgid "An error occurred while deleting the comment"
msgstr "Во Ð²Ñ€ÐµÐ¼Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð¾ÑˆÐ»Ð° ошибка"
@@ -1211,7 +1480,7 @@ msgid "An error occurred while detecting host keys"
msgstr "Произошла ошибка при обнаружении ключей хоÑта"
msgid "An error occurred while disabling Service Desk."
-msgstr ""
+msgstr "Произошла ошибка при отключении Ñлужбы поддержки."
msgid "An error occurred while dismissing the alert. Refresh the page and try again."
msgstr "При отключении Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð¾ÑˆÐ»Ð° ошибка. Обновите Ñтраницу и повторите попытку."
@@ -1220,12 +1489,15 @@ msgid "An error occurred while dismissing the feature highlight. Refresh the pag
msgstr "Произошла ошибка при отключении ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ функции. Обновите Ñтраницу и повторите попытку."
msgid "An error occurred while enabling Service Desk."
-msgstr ""
+msgstr "Произошла ошибка при включении Ñлужбы поддержки."
msgid "An error occurred while fetching environments."
msgstr ""
msgid "An error occurred while fetching folder content."
+msgstr "Произошла ошибка при получении Ñодержимого папки."
+
+msgid "An error occurred while fetching issues."
msgstr ""
msgid "An error occurred while fetching label colors."
@@ -1270,6 +1542,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "Произошла ошибка при получении ÑпиÑка проектов"
@@ -1315,12 +1590,12 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
-msgstr "Произошла ошибка при рендеринге KaTeX"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "Произошла ошибка при визуализации проÑмотра широковещательного ÑообщениÑ"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "Произошла ошибка при получении ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñти"
@@ -1339,6 +1614,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1387,11 +1668,14 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr "Произошла ошибка. ПожалуйÑта, попробуйте Ñнова."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
msgid "An unexpected error occurred while checking the project runners."
-msgstr ""
+msgstr "Произошла Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при проверке runner'ов проекта."
msgid "An unexpected error occurred while communicating with the Web Terminal."
msgstr ""
@@ -1405,6 +1689,9 @@ msgstr ""
msgid "Analytics"
msgstr "Ðналитика"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1412,7 +1699,7 @@ msgid "Anonymous"
msgstr "Ðноним"
msgid "Anti-spam verification"
-msgstr ""
+msgstr "Ðнти-Ñпам проверка"
msgid "Any"
msgstr "Любой"
@@ -1427,7 +1714,10 @@ msgid "Any encrypted tokens"
msgstr ""
msgid "Any namespace"
-msgstr ""
+msgstr "Любое проÑтранÑтво имен"
+
+msgid "Any user"
+msgstr "Любой пользователь"
msgid "Appearance"
msgstr "Оформление"
@@ -1436,7 +1726,7 @@ msgid "Appearance was successfully created."
msgstr ""
msgid "Appearance was successfully updated."
-msgstr ""
+msgstr "Внешний вид уÑпешно изменен."
msgid "Append the comment with %{TABLEFLIP}"
msgstr ""
@@ -1460,7 +1750,7 @@ msgid "Application was successfully destroyed."
msgstr ""
msgid "Application was successfully updated."
-msgstr ""
+msgstr "Приложение было уÑпешно обновлено."
msgid "Application: %{name}"
msgstr "Приложение: %{name}"
@@ -1469,13 +1759,16 @@ msgid "Applications"
msgstr "ПриложениÑ"
msgid "Applied"
-msgstr ""
+msgstr "Применён"
+
+msgid "Apply a label"
+msgstr "Применить метку"
msgid "Apply suggestion"
msgstr "Применить предложение"
msgid "Applying command"
-msgstr ""
+msgstr "Применение команды"
msgid "Applying command to %{commandDescription}"
msgstr ""
@@ -1520,20 +1813,35 @@ msgstr[3] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
-msgstr ""
+msgstr "ИмÑ"
msgid "ApprovalRule|No. approvals required"
+msgstr "КоличеÑтво ÑоглаÑований"
+
+msgid "ApprovalRule|Rule name"
msgstr ""
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
-msgstr "УтверждениÑ"
+msgstr "СоглаÑованиÑ"
+
+msgid "Approve"
+msgstr "Одобрить"
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
msgid "Apr"
msgstr "Ðпр."
@@ -1545,7 +1853,7 @@ msgid "Archive jobs"
msgstr ""
msgid "Archive project"
-msgstr ""
+msgstr "Ðрхивировать проект"
msgid "Archived project! Repository and other project resources are read-only"
msgstr "Ðрхивный проект! Репозиторий и другие реÑурÑÑ‹ проекта доÑтупны только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ"
@@ -1560,10 +1868,10 @@ msgid "Are you sure"
msgstr "Вы уверены"
msgid "Are you sure that you want to archive this project?"
-msgstr ""
+msgstr "Ð’Ñ‹ уверены, что хотите архивировать Ñтот проект?"
msgid "Are you sure that you want to unarchive this project?"
-msgstr ""
+msgstr "Ð’Ñ‹ уверены, что хотите воÑÑтановить Ñтот проект?"
msgid "Are you sure you want to cancel creating this comment?"
msgstr ""
@@ -1571,11 +1879,20 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
msgid "Are you sure you want to delete this list?"
-msgstr ""
+msgstr "Ð’Ñ‹ уверены, что вы хотите удалить Ñтот ÑпиÑок?"
msgid "Are you sure you want to delete this pipeline schedule?"
msgstr "Ð’Ñ‹ уверены, что вы хотите удалить Ñто раÑпиÑание Ñборочной линии?"
@@ -1608,11 +1925,14 @@ msgid "Are you sure you want to reset registration token?"
msgstr "Ð’Ñ‹ уверены, что вы хотите ÑброÑить Ñтот региÑтрационный токен?"
msgid "Are you sure you want to reset the SCIM token? SCIM provisioning will stop working until the new token is updated."
-msgstr ""
+msgstr "Ð’Ñ‹ уверены, что хотите ÑброÑить токен SCIM? Выполнение SCIM переÑтанет работать до тех пор, пока новый токен не будет обновлен."
msgid "Are you sure you want to reset the health check token?"
msgstr "Ð’Ñ‹ уверены, что хотите ÑброÑить Ñтот токен проверки работоÑпоÑобноÑти?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1629,22 +1949,28 @@ msgid "Are you sure?"
msgstr "Вы уверены?"
msgid "Are you sure? All commits that were signed with this GPG key will be unverified."
-msgstr ""
+msgstr "Ð’Ñ‹ уверены? Ð’Ñе коммиты, которые были подпиÑаны Ñ Ñтим GPG ключом, будут не подтверждены."
msgid "Are you sure? Removing this GPG key does not affect already signed commits."
-msgstr ""
+msgstr "Ð’Ñ‹ уверены? Удаление Ñтого GPG ключа не повлиÑет на уже подпиÑанные коммиты."
msgid "Are you sure? This will invalidate your registered applications and U2F devices."
-msgstr ""
+msgstr "Ð’Ñ‹ уверены? Это аннулирует ваши зарегиÑтрированные Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ U2F уÑтройÑтва."
msgid "Artifact ID"
msgstr "ID артефакта"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Ðртефакты"
msgid "As U2F devices are only supported by a few browsers, we require that you set up a two-factor authentication app before a U2F device. That way you'll always be able to log in - even when you're using an unsupported browser."
-msgstr ""
+msgstr "ПоÑкольку уÑтройÑтва U2F поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ неÑколькими браузерами, мы требуем, чтобы вы наÑтроили двухфакторную аутентификацию перед U2F уÑтройÑтвом. Таким образом, вы вÑегда Ñможете войти в ÑиÑтему, даже еÑли вы иÑпользуете неподдерживаемый браузер."
msgid "AsanaService|%{user} pushed to branch %{branch} of %{project_name} ( %{commit_url} ):"
msgstr ""
@@ -1676,6 +2002,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr "Ðазначьте пользовательÑкий цвет, например #FF0000"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "Ðазначить метки"
@@ -1694,6 +2023,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "Ðазначенные обÑуждениÑ"
@@ -1704,7 +2036,11 @@ msgid "Assigned to me"
msgstr "Ðазначить мне"
msgid "Assignee"
-msgstr "ОтветÑтвенный"
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1715,6 +2051,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr "ОтветÑтвенный(ные)"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1726,10 +2065,10 @@ msgstr "Приложить файл через drag &amp; drop или %{upload_l
msgid "Attaching a file"
msgid_plural "Attaching %d files"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Прикрепить файл"
+msgstr[1] "Прикрепить %d файла"
+msgstr[2] "Прикрепить %d файлов"
+msgstr[3] "Прикрепить %d файлов"
msgid "Attaching the file failed."
msgstr ""
@@ -1737,12 +2076,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "Ðвг."
msgid "August"
msgstr "ÐвгуÑÑ‚"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "Журнал аутентификации"
@@ -1800,6 +2148,9 @@ msgstr "Auto DevOps включен"
msgid "Auto DevOps, runners and job artifacts"
msgstr "ÐвтоматичеÑкий DevOps, обработчики и артефакты заданий"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1821,6 +2172,18 @@ msgstr "Подробнее по ÑÑылке %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Ð¡Ð±Ð¾Ñ€Ð¾Ñ‡Ð½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Auto DevOps была включена и будет иÑпользоватьÑÑ, еÑли не найден альтернативный файл конфигурации CI. %{more_information_link}"
+msgid "Autocomplete"
+msgstr "Ðвтозаполнение"
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1843,13 +2206,13 @@ msgid "Available"
msgstr "ДоÑтупен"
msgid "Available group Runners: %{runners}"
-msgstr ""
+msgstr "ДоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° runner'ов: %{runners}"
msgid "Available shared Runners:"
msgstr ""
msgid "Available specific runners"
-msgstr ""
+msgstr "ДоÑтупные ÑпецифичеÑкие runner'Ñ‹"
msgid "Avatar for %{assigneeName}"
msgstr ""
@@ -1912,7 +2275,7 @@ msgid "Badges|No image to preview"
msgstr "Ðет Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ проÑмотра"
msgid "Badges|Please fill in a valid URL"
-msgstr ""
+msgstr "ПожалуйÑта, введите дейÑтвительный URL"
msgid "Badges|Project Badge"
msgstr "Значок Проекта"
@@ -1942,16 +2305,16 @@ msgid "Badges|This project has no badges"
msgstr "Этот проект не имеет значков"
msgid "Badges|You are going to delete this badge. Deleted badges <strong>cannot</strong> be restored."
-msgstr ""
+msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ удалить Ñтот значок. Удаленные значки <strong>не могут</strong> быть воÑÑтановлены."
msgid "Badges|Your badges"
msgstr "Ваши значки"
msgid "Badges|e.g. %{exampleUrl}"
-msgstr ""
+msgstr "например %{exampleUrl}"
msgid "Badge|New"
-msgstr ""
+msgstr "Ðовый"
msgid "Balsamiq file could not be loaded."
msgstr ""
@@ -1984,10 +2347,10 @@ msgid "BatchComments|You're about to discard your review which will delete all o
msgstr ""
msgid "Be careful. Changing the project's namespace can have unintended side effects."
-msgstr ""
+msgstr "Будьте оÑторожны. Изменение пути проекта может вызвать нежелательные побочные Ñффекты."
msgid "Be careful. Renaming a project's repository can have unintended side effects."
-msgstr ""
+msgstr "Будьте оÑторожны. Переименование Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° может вызвать нежелательные побочные Ñффекты."
msgid "Begin with the selected commit"
msgstr "Ðачать Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ коммита"
@@ -1996,37 +2359,37 @@ msgid "Below are examples of regex for existing tools:"
msgstr "Ðиже приведены примеры регулÑрных выражений Ð´Ð»Ñ ÑущеÑтвующих инÑтрументов:"
msgid "Below you will find all the groups that are public."
-msgstr ""
+msgstr "Ðиже вы найдете вÑе группы, которые ÑвлÑÑŽÑ‚ÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼Ð¸."
msgid "Billing"
msgstr "Тарифы"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} иÑпользует тарифный план %{plan_link} на текущий момент."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr "Текущий тарифный план"
-msgid "BillingPlans|Customer Support"
-msgstr "Поддержка клиентов"
-
msgid "BillingPlans|Downgrade"
msgstr "Перейти на более Ñкономный"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "Управление тарифным планом"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "ПожалуйÑта, в Ñтом Ñлучае обратитеÑÑŒ в %{customer_support_link}."
+msgid "BillingPlans|Pricing page"
+msgstr "Страница Ñ Ñ†ÐµÐ½Ð°Ð¼Ð¸"
msgid "BillingPlans|See all %{plan_name} features"
msgstr ""
@@ -2040,13 +2403,10 @@ msgstr "Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°Ñ€Ð¸Ñ„Ð½Ñ‹Ð¼ планом Ñтой грÑ
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2064,11 +2424,14 @@ msgstr "Ð•Ð¶ÐµÐ³Ð¾Ð´Ð½Ð°Ñ Ð¿Ð»Ð°Ñ‚Ð° ÑоÑтавит %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "на одного пользователÑ"
-msgid "Bitbucket Server Import"
+msgid "BillingPlan|Upgrade plan"
msgstr ""
+msgid "Bitbucket Server Import"
+msgstr "Импорт из Bitbucket Server"
+
msgid "Bitbucket import"
-msgstr ""
+msgstr "Импорт из BitBucket"
msgid "Block"
msgstr "Заблокировать"
@@ -2076,35 +2439,51 @@ msgstr "Заблокировать"
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "Blog"
msgstr "Блог"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "ДоÑки"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "Ветка %{branchName} не найдена в репозитории проекта."
@@ -2267,6 +2646,9 @@ msgstr "ПроÑмотр файла"
msgid "Browse Files"
msgstr "ПроÑмотр файлов"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "ПроÑмотр файлов"
@@ -2295,10 +2677,10 @@ msgid "Business metrics (Custom)"
msgstr ""
msgid "Buy EE"
-msgstr ""
+msgstr "Купить EE"
msgid "Buy GitLab Enterprise Edition"
-msgstr ""
+msgstr "Купить верÑию GitLab Enterprise"
msgid "By %{user_name}"
msgstr ""
@@ -2307,7 +2689,7 @@ msgid "By default GitLab sends emails in HTML and plain text formats so mail cli
msgstr ""
msgid "By default, all projects and groups will use the global notifications setting."
-msgstr ""
+msgstr "По умолчанию вÑе проекты и группы будут иÑпользовать глобальные наÑтройки уведомлений."
msgid "ByAuthor|by"
msgstr "по автору"
@@ -2328,7 +2710,7 @@ msgid "CI Lint"
msgstr ""
msgid "CI variables"
-msgstr ""
+msgstr "Переменные CI"
msgid "CI will run using the credentials assigned above."
msgstr ""
@@ -2352,7 +2734,7 @@ msgid "CICD|Auto DevOps will automatically build, test, and deploy your applicat
msgstr "\"Auto DevOps\" будет автоматичеÑки Ñоздавать, теÑтировать и разворачивать Ваше приложение на оÑнове предопределенных наÑтроек CI/CD."
msgid "CICD|Automatic deployment to staging, manual deployment to production"
-msgstr ""
+msgstr "ÐвтоматичеÑкое развёртывание в теÑтовую Ñреду, ручное - в продакшн"
msgid "CICD|Continuous deployment to production"
msgstr "Ðепрерывное развёртывание в рабочий контур"
@@ -2378,7 +2760,10 @@ msgstr "Узнайте больше об \"Auto DevOps\""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "Сборка Auto DevOps будет запущена, еÑли не будет найден иной файл конфигурации CI."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2387,6 +2772,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr "ЭкземплÑÑ€ включен"
+msgid "CLOSED"
+msgstr "ЗÐКРЫТО"
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr "CONTRIBUTING"
@@ -2406,7 +2797,7 @@ msgid "Can't remove group members without group managed account"
msgstr ""
msgid "Can't scan the code?"
-msgstr ""
+msgstr "Ðе удаетÑÑ Ð¾Ñ‚Ñканировать QR-код?"
msgid "Canary Deployments is a popular CI strategy, where a small portion of the fleet is updated to the new version of your application."
msgstr ""
@@ -2414,9 +2805,15 @@ msgstr ""
msgid "Cancel"
msgstr "Отмена"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "Отменить Ñто задание"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "Ðет возможноÑти объединить автоматичеÑки"
@@ -2426,6 +2823,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr "Ðе удаетÑÑ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ"
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "Ðевозможно изменить управлÑемый клаÑтер Kubernetes"
@@ -2453,12 +2853,21 @@ msgstr "Сертификат (PEM)"
msgid "Change Weight"
msgstr "Изменить ВеÑ"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2475,10 +2884,10 @@ msgid "Change title"
msgstr "Изменить заголовок"
msgid "Change your password"
-msgstr ""
+msgstr "Изменить пароль"
msgid "Change your password or recover your current one"
-msgstr ""
+msgstr "Измените пароль или воÑÑтановите текущий"
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Выбрать в ветке"
@@ -2495,14 +2904,20 @@ msgstr "Отменить"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "Это ÑоздаÑÑ‚ новый коммит Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы откатить ÑущеÑтвующие изменениÑ."
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr "ИзменениÑ"
msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision."
-msgstr ""
+msgstr "Показаны Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ°Ðº будто произошло ÑлиÑние ревизии кода <b>иÑточника</b> Ñ <b>целевой</b> ревизией кода."
msgid "Changes suppressed. Click to show."
-msgstr ""
+msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñкрыты. Ðажмите, чтобы показать."
msgid "Changes the title to \"%{title_param}\"."
msgstr ""
@@ -2516,9 +2931,60 @@ msgstr "Диаграммы"
msgid "Chat"
msgstr "Чат"
-msgid "Check again"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr "Ветка"
+
+msgid "ChatMessage|Commit"
+msgstr "Коммит"
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr "Ðеверный YAML файл конфигурации CI"
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr "Тег"
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
msgstr ""
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr "в %{duration}"
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
+msgid "Check again"
+msgstr "Проверить Ñнова"
+
msgid "Check feature availability on namespace plan"
msgstr ""
@@ -2526,7 +2992,7 @@ msgid "Check the %{docs_link_start}documentation%{docs_link_end}."
msgstr ""
msgid "Check your .gitlab-ci.yml"
-msgstr ""
+msgstr "Проверьте ваш .gitlab-ci.yml"
msgid "Checking %{text} availability…"
msgstr "Проверка доÑтупноÑти %{text} ..."
@@ -2556,13 +3022,16 @@ msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to s
msgstr "Выберите ветку/тег (например, %{master}) или введите коммит (например, %{sha}), чтобы увидеть, что изменилоÑÑŒ или Ñоздать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние."
msgid "Choose a file"
-msgstr ""
+msgstr "Выберите файл"
+
+msgid "Choose a group"
+msgstr "Выберите группу"
msgid "Choose a role permission"
msgstr "Выберите разрешение роли"
msgid "Choose a template"
-msgstr ""
+msgstr "Выберите шаблон"
msgid "Choose a template..."
msgstr "Выберите шаблон..."
@@ -2583,7 +3052,7 @@ msgid "Choose the top-level group for your repository imports."
msgstr ""
msgid "Choose visibility level, enable/disable project features (issues, repository, wiki, snippets) and set permissions."
-msgstr "Выберите уровень доÑтупа, включите / отключите функции проекта (обÑуждениÑ, репозиторий, вики, примеры кода) и наÑтройте Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° проекте."
+msgstr "Выберите уровень доÑтупа, включите / отключите функции проекта (обÑуждениÑ, репозиторий, вики, Ñниппеты) и наÑтройте Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ð° проекте."
msgid "Choose what content you want to see on a group’s overview page"
msgstr ""
@@ -2594,9 +3063,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "отменено"
@@ -2687,6 +3153,9 @@ msgstr "Удалить Ñтроку переменных"
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2696,6 +3165,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr " * (Ð’Ñе Ñреды)"
@@ -2741,15 +3213,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "ОчиÑтить поиÑк"
msgid "Clear search input"
msgstr "ОчиÑтить Ñтроку поиÑка"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2757,7 +3238,7 @@ msgid "Click any <strong>project name</strong> in the project list below to navi
msgstr "Выберите из ÑпиÑка любой <strong>проект</strong>, чтобы перейти к Ñтапу проекта."
msgid "Click here"
-msgstr ""
+msgstr "Ðажмите здеÑÑŒ"
msgid "Click the <strong>Download</strong> button and wait for downloading to complete."
msgstr ""
@@ -2771,6 +3252,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "Ðажмите кнопку ниже, чтобы начать процеÑÑ ÑƒÑтановки, Ð¿ÐµÑ€ÐµÐ¹Ð´Ñ Ð½Ð° Ñтраницу Kubernetes"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "Ðажмите, чтобы развернуть."
@@ -2790,7 +3274,7 @@ msgid "Clients"
msgstr "Клиенты"
msgid "Clone"
-msgstr ""
+msgstr "Клонировать"
msgid "Clone repository"
msgstr "Клонировать репозиторий"
@@ -2802,11 +3286,14 @@ msgid "Clone with KRB5"
msgstr ""
msgid "Clone with SSH"
-msgstr ""
+msgstr "Клонировать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SSH"
msgid "Close"
msgstr "Закрыть"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "Завершить цель"
@@ -2816,12 +3303,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "Закрыто"
msgid "Closed issues"
msgstr "Закрытые обÑуждениÑ"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2870,6 +3372,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Дополнительные опции Ð´Ð»Ñ Ñтой интеграции Ñ ÐºÐ»Ð°Ñтером Kubernetes"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2879,6 +3384,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2918,12 +3426,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Комплект Ñертификатов удоÑтоверÑющего центра (формат PEM)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2954,12 +3468,21 @@ msgstr "Скопировать Ð¸Ð¼Ñ ÐºÐ»Ð°Ñтера Kubernetes"
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Создать клаÑтер Kubernetes"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -3000,7 +3523,7 @@ msgid "ClusterIntegration|GitLab Runner"
msgstr "GitLab Runner"
msgid "ClusterIntegration|GitLab Runner connects to the repository and executes CI/CD jobs, pushing results back and deploying applications to production."
-msgstr ""
+msgstr "GitLab Runner подключаетÑÑ Ðº репозиторию и выполнÑет Ð·Ð°Ð´Ð°Ð½Ð¸Ñ CI/CD, отправлÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ‹ назад и Ñ€Ð°Ð·Ð²Ð¾Ñ€Ð°Ñ‡Ð¸Ð²Ð°Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² продакшн."
msgid "ClusterIntegration|GitLab-managed cluster"
msgstr ""
@@ -3008,6 +3531,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -3095,8 +3621,8 @@ msgstr "КлаÑтер Kubernetes ÑоздаётÑÑ Ð² Google Kubernetes Engine
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Ð˜Ð¼Ñ ÐºÐ»Ð°Ñтера Kubernetes"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "КлаÑтер Kubernetes был уÑпешно Ñоздан в Google Kubernetes Engine. Обновите Ñтраницу, чтобы увидеть ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ клаÑтере Kubernetes"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr ""
@@ -3110,6 +3636,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3122,6 +3651,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr "Let's Encrypt"
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Тип машины"
@@ -3131,6 +3666,9 @@ msgstr "УбедитеÑÑŒ, что ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ %{link_t
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "УправлÑйте вашему клаÑтером Kubernetes, Ð¿ÐµÑ€ÐµÐ¹Ð´Ñ Ð¿Ð¾ ÑÑылке %{link_gke}"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "Ðет типов машин, ÑоответÑтвующих вашему поиÑковому запроÑу"
@@ -3140,6 +3678,9 @@ msgstr "Проекты не найдены"
msgid "ClusterIntegration|No projects matched your search"
msgstr "Ðет проектов, ÑоответÑтвующих вашему поиÑковому запроÑу"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "Ðет зон, ÑоответÑтвующих вашему поиÑковому запроÑу"
@@ -3164,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "ПроÑтранÑтво имен проекта (необÑзательное, уникальное)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3176,6 +3720,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "Прочтите нашу документацию %{link_to_help_page} по интеграции клаÑтера Kubernetes."
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Удалить интеграцию клаÑтера Kubernetes"
@@ -3194,15 +3741,24 @@ msgstr "Ðе удалоÑÑŒ выполнить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° запуÑк п
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "Сохранить изменениÑ"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "ПоиÑк типов машин клаÑтера"
msgid "ClusterIntegration|Search projects"
msgstr "ПоиÑк проектов"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "ПоиÑк зон"
@@ -3221,6 +3777,9 @@ msgstr "Выберите проект и зону, чтобы выбрать Ñ‚Ð
msgid "ClusterIntegration|Select project to choose zone"
msgstr "Выберите проект, чтобы выбрать зону"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "Выберете зону"
@@ -3260,18 +3819,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3293,6 +3858,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "Проверка ÑтатуÑа тарификации проекта"
@@ -3329,21 +3897,27 @@ msgstr "документациÑ"
msgid "ClusterIntegration|help page"
msgstr "Ñтраница Ñправки"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "отвечает требованиÑм"
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
-msgstr "правильно наÑтроен"
-
msgid "ClusterIntegration|sign up"
msgstr "зарегиÑтрироватьÑÑ"
-msgid "Code"
+msgid "ClusterIntergation|Select a region"
msgstr ""
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
+msgid "Code"
+msgstr "Код"
+
msgid "Code Owners"
msgstr ""
@@ -3368,15 +3942,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr "Свернуть боковую панель"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
-msgid "Command line instructions"
+msgid "Command"
msgstr ""
+msgid "Command line instructions"
+msgstr "ИнÑтрукции командной Ñтроки"
+
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "Комментарий"
@@ -3386,11 +3969,11 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
-msgstr "Прокомментировать и закрыть диÑкуÑÑию"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "Прокомментировать и переоткрыть диÑкуÑÑию"
+msgid "Comment & unresolve thread"
+msgstr "Комментировать & открыть тему"
msgid "Comment form position"
msgstr ""
@@ -3398,6 +3981,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "Комментарии"
@@ -3411,6 +3997,9 @@ msgstr[3] "Коммитов"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "ОпиÑание Коммита"
@@ -3507,12 +4096,18 @@ msgstr "Цель"
msgid "CompareBranches|There isn't anything to compare."
msgstr "Ðечего Ñравнивать."
+msgid "Complete"
+msgstr "Завершено"
+
msgid "Confidential"
msgstr "Конфиденциально"
msgid "Confidentiality"
msgstr "КонфиденциальноÑÑ‚ÑŒ"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3522,6 +4117,9 @@ msgstr "ÐаÑтройка таймаутов Gitaly."
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3529,6 +4127,9 @@ msgid "Configure a <code>.gitlab-webide.yml</code> file in the <code>.gitlab</co
msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr "ÐаÑтройка автоматичеÑких проверок git и очиÑтки репозиториев."
+
+msgid "Configure existing installation"
msgstr ""
msgid "Configure limits for web and API requests."
@@ -3556,13 +4157,13 @@ msgid "Confirmation required"
msgstr "ТребуетÑÑ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ðµ"
msgid "Congratulations! You have enabled Two-factor Authentication!"
-msgstr ""
+msgstr "ПоздравлÑем! Ð’Ñ‹ включили двухфакторную аутентификацию!"
msgid "Connect"
msgstr "Подключить"
msgid "Connect all repositories"
-msgstr ""
+msgstr "Подключить вÑе репозитории"
msgid "Connect repositories from GitHub"
msgstr "Подключить репозитории Ñ GitHub"
@@ -3577,7 +4178,7 @@ msgid "Connecting..."
msgstr "Подключение..."
msgid "Connection failure"
-msgstr ""
+msgstr "Ошибка подключениÑ"
msgid "Contact an owner of group %{namespace_name} to upgrade the plan."
msgstr ""
@@ -3595,34 +4196,44 @@ msgid "Container Registry"
msgstr "РееÑÑ‚Ñ€ Контейнеров"
msgid "Container registry images"
-msgstr ""
+msgstr "Образы Docker Registry"
+
+msgid "ContainerRegistry|Container Registry"
+msgstr "РееÑÑ‚Ñ€ Контейнеров"
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "Сначала авторизуйтеÑÑŒ в рееÑтре контейнеров GitLab, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñвои Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ пароль. ЕÑли у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ %{link_2fa}, вам необходимо иÑпользовать %{link_token}:"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr "Скопировать команду Ñборки в буфер обмена"
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab поддерживает до трех уровней имён образов. Следующие примеры имён образов подходÑÑ‚ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ проекта:"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr "Скопировать push команду в буфер обмена"
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "Как иÑпользовать РееÑÑ‚Ñ€ Контейнеров"
+msgid "ContainerRegistry|Docker connection error"
+msgstr "Ошибка Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Docker"
msgid "ContainerRegistry|Last Updated"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "Узнайте больше"
-
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "Ð’ рееÑтре контейнеров нет тегов Ð´Ð»Ñ Ñтого образа."
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "ПоÑле того, как вы вошли в ÑиÑтему, вы можете Ñоздать или загрузить образ контейнера, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¾Ð±Ñ‰Ð¸Ðµ команды %{build} и %{push}"
+msgid "ContainerRegistry|Quick Start"
+msgstr "БыÑтрый Ñтарт"
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "Удалить репозиторий"
-msgid "ContainerRegistry|Remove tag"
-msgstr "Удалить тег"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "Размер"
@@ -3633,20 +4244,35 @@ msgstr "Тег"
msgid "ContainerRegistry|Tag ID"
msgstr "Идентификатор Тега"
-msgid "ContainerRegistry|Use different image names"
-msgstr "ИÑпользовать различные имена образов"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr "Ð’ Ñтом проекте нет Docker образов"
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "Когда рееÑÑ‚Ñ€ контейнеров Docker интегрирован Ñ GitLab, каждый проект может иметь Ñвое ÑобÑтвенное проÑтранÑтво Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ Docker образов."
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "Мы не можем подключитьÑÑ Ðº Docker, что может быть вызвано проблемой Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ или путём вашего проекта. %{docLinkStart}ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ%{docLinkEnd}"
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "Ð’Ñ‹ также можете иÑпользовать %{deploy_token} Ð´Ð»Ñ Ð´Ð¾Ñтупа в режиме только чтение к рееÑтру образов."
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "С рееÑтром контейнеров каждый проект может иметь Ñвое меÑто Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñвоих Docker образов. %{docLinkStart}ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ%{docLinkEnd}"
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "С помощью РееÑтра Docker Контейнеров, интегрированного в GitLab, каждый проект может иметь Ñвое ÑобÑтвенное проÑтранÑтво Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñвоих Docker образов. %{docLinkStart}ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ%{docLinkEnd}"
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr "Ð’Ñ‹ можете добавить образ в Ñтот рееÑÑ‚Ñ€ контвейнеров при помощи данных команд:"
msgid "Contains %{count} blobs of images (%{size})"
msgstr ""
msgid "Contents of .gitlab-ci.yml"
-msgstr ""
+msgstr "Содержимое .gitlab-ci.yml"
msgid "Continue"
msgstr "Продолжить"
@@ -3667,7 +4293,7 @@ msgid "Contribution Analytics"
msgstr "Ðналитика вкладов"
msgid "Contribution Charts"
-msgstr ""
+msgstr "График активноÑти"
msgid "Contributions for <strong>%{calendar_date}</strong>"
msgstr ""
@@ -3702,18 +4328,27 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
-msgid "Copy ID to clipboard"
+msgid "Copy %{proxy_url} to clipboard"
msgstr ""
+msgid "Copy ID to clipboard"
+msgstr "Скопировать ID в буфер обмена"
+
msgid "Copy KRB5 clone URL"
msgstr ""
@@ -3721,7 +4356,7 @@ msgid "Copy SSH clone URL"
msgstr ""
msgid "Copy SSH public key"
-msgstr ""
+msgstr "Копировать открытый ключ SSH"
msgid "Copy URL to clipboard"
msgstr "Копировать URL в буфер обмена"
@@ -3736,7 +4371,7 @@ msgid "Copy commit SHA to clipboard"
msgstr "Копировать SHA коммита в буфер обмена"
msgid "Copy file path to clipboard"
-msgstr ""
+msgstr "Скопировать путь к файлу в буфер обмена"
msgid "Copy labels and milestone from %{source_issuable_reference}."
msgstr ""
@@ -3747,6 +4382,9 @@ msgstr ""
msgid "Copy link"
msgstr "Копировать ÑÑылку"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr "Скопировать ÑÑылку в буфер обмена"
@@ -3760,6 +4398,12 @@ msgid "Copy to clipboard"
msgstr "Скопировать в буфер обмена"
msgid "Copy token to clipboard"
+msgstr "Cкопировать токен в буфер обмена"
+
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
msgstr ""
msgid "Could not authorize chat nickname. Try again!"
@@ -3777,13 +4421,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr "Ðе удалоÑÑŒ Ñоздать репозиторий"
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3792,17 +4439,26 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr "Покрытие"
msgid "Create"
msgstr "Создать"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "Создать Ðовый каталог"
msgid "Create New Domain"
-msgstr ""
+msgstr "Создать новый домен"
msgid "Create a GitLab account first, and then connect it to your %{label} account."
msgstr ""
@@ -3810,7 +4466,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3823,7 +4479,7 @@ msgid "Create a new issue"
msgstr "Создать новое обÑуждение"
msgid "Create a new repository"
-msgstr ""
+msgstr "Создать новый репозиторий"
msgid "Create a personal access token on your account to pull or push via %{protocol}."
msgstr "Создать личный токен на аккаунте Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ отправки через %{protocol}."
@@ -3831,12 +4487,24 @@ msgstr "Создать личный токен на аккаунте Ð´Ð»Ñ Ð¿Ð¾
msgid "Create an issue. Issues are created for each alert triggered."
msgstr "Создать обÑуждение. ОбÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ ÑоздаютÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñработавшего предупреждениÑ."
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr "Создать доÑку"
+
msgid "Create branch"
msgstr "Создать ветку"
msgid "Create commit"
msgstr "Создать коммит"
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "Создать каталог"
@@ -3867,6 +4535,9 @@ msgstr "Создать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние и ветку"
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr "Создать новую доÑку"
+
msgid "Create new branch"
msgstr "Создать новую ветку"
@@ -3885,6 +4556,9 @@ msgstr "Создать новую метку"
msgid "Create new..."
msgstr "Создать новый..."
+msgid "Create project"
+msgstr "Создать проект"
+
msgid "Create project label"
msgstr "Создать метку проекта"
@@ -3909,6 +4583,12 @@ msgstr "Создан"
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "Создано мной"
@@ -3925,34 +4605,46 @@ msgid "Created merge request %{mergeRequestLink} at %{projectLink}"
msgstr ""
msgid "Created on"
-msgstr ""
+msgstr "Дата ÑозданиÑ"
msgid "Created on:"
+msgstr "Дата ÑозданиÑ:"
+
+msgid "Creates a branch and a merge request to resolve this issue."
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Ð’Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð·Ð¾Ð½Ð° Cron"
msgid "Cron syntax"
msgstr "СинтакÑÐ¸Ñ Cron"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð’ÐµÑ‚ÐºÐ°"
msgid "Current Project"
-msgstr ""
+msgstr "Текущий проект"
msgid "Current node"
msgstr "Текущий узел"
msgid "Current password"
-msgstr ""
+msgstr "Текущий пароль"
msgid "CurrentUser|Profile"
msgstr "Профиль"
@@ -3978,6 +4670,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "ÐаÑтроить цвета"
@@ -3987,7 +4718,13 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
+msgstr "ÐаÑтройте параметры Ñзыка и региона."
+
+msgid "Customize name"
msgstr ""
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
@@ -3996,9 +4733,36 @@ msgstr ""
msgid "Cycle Analytics"
msgstr "Ðналитика Цикла"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "ÐапиÑание кода"
@@ -4020,9 +4784,38 @@ msgstr "Приёмка"
msgid "CycleAnalyticsStage|Test"
msgstr "ТеÑтирование"
-msgid "DNS"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
msgstr ""
+msgid "DNS"
+msgstr "DNS"
+
msgid "Dashboard"
msgstr "Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
@@ -4033,10 +4826,10 @@ msgid "DashboardProjects|Personal"
msgstr "Личные"
msgid "DashboardProjects|Trending"
-msgstr ""
+msgstr "ПопулÑрные"
msgid "Dashboards"
-msgstr ""
+msgstr "Панели инÑтрументов"
msgid "Dashboard|%{firstProject} and %{secondProject}"
msgstr ""
@@ -4044,11 +4837,11 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
-msgstr ""
+msgstr "Данные вÑе еще вычиÑлÑÑŽÑ‚ÑÑ..."
msgid "Date picker"
msgstr ""
@@ -4065,6 +4858,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr "Отладка"
@@ -4086,15 +4882,24 @@ msgstr "Ветка по умолчанию"
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
-msgid "Default first day of the week"
+msgid "Default description template for merge requests"
msgstr ""
+msgid "Default first day of the week"
+msgstr "Первый день недели по умолчанию"
+
msgid "Default first day of the week in calendars and date pickers."
msgstr ""
@@ -4134,11 +4939,20 @@ msgstr ""
msgid "Delete"
msgstr "Удалить"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "Удалить пакет"
msgid "Delete Snippet"
-msgstr "Удалить пример кода"
+msgstr "Удалить Ñниппет"
+
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr "Удалить доÑку"
msgid "Delete comment"
msgstr "Удалить комментарий"
@@ -4176,6 +4990,9 @@ msgstr "Удалено"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4194,6 +5011,26 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4206,12 +5043,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4221,6 +5067,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4239,6 +5088,20 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "Развертывание"
@@ -4252,6 +5115,15 @@ msgstr "Ключи РазвертываниÑ"
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr "Развернуть в..."
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} других"
@@ -4324,6 +5196,9 @@ msgstr "Создать токен развертываниÑ"
msgid "DeployTokens|Created"
msgstr "Создан"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "Токены развертываниÑ"
@@ -4375,6 +5250,9 @@ msgstr "Создан новый токен Ð´Ð»Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4399,9 +5277,30 @@ msgstr ""
msgid "Description:"
msgstr "ОпиÑание:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4417,6 +5316,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4426,9 +5331,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4436,7 +5338,7 @@ msgid "Destroy"
msgstr ""
msgid "Details"
-msgstr "ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
+msgstr "ИнформациÑ"
msgid "Details (default)"
msgstr ""
@@ -4450,9 +5352,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° недоÑтупно"
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4465,6 +5373,9 @@ msgstr "Ð˜Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°"
msgid "Disable"
msgstr "Отключить"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "Отключить Ð´Ð»Ñ Ñтого проекта"
@@ -4475,10 +5386,10 @@ msgid "Disable shared Runners"
msgstr ""
msgid "Disable two-factor authentication"
-msgstr ""
+msgstr "Отключить двухфакторную аутентификацию"
msgid "Disabled"
-msgstr ""
+msgstr "Отключено"
msgid "Disabled mirrors can only be enabled by instance owners. It is recommended that you delete them."
msgstr ""
@@ -4514,7 +5425,7 @@ msgid "Discover GitLab Geo"
msgstr ""
msgid "Discover projects, groups and snippets. Share your projects with others"
-msgstr "ИÑÑледуйте проекты, группы и примеры кода. ПоделитеÑÑŒ вашими проектами Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми"
+msgstr "ИÑÑледуйте проекты, группы и Ñниппеты. ПоделитеÑÑŒ вашими проектами Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми"
msgid "Discuss a specific suggestion or question"
msgstr ""
@@ -4522,6 +5433,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4552,6 +5469,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4561,6 +5481,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr "Домен"
@@ -4568,7 +5491,7 @@ msgid "Domain verification is an essential security measure for public GitLab si
msgstr ""
msgid "Don't paste the private part of the GPG key. Paste the public part which begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
-msgstr ""
+msgstr "Ðе вÑтавлÑйте закрытую чаÑÑ‚ÑŒ GPG ключа. Ð’Ñтавьте открытую чаÑÑ‚ÑŒ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚ÑÑ Ñ Â«----- BEGIN PGP PUBLIC KEY BLOCK -----»."
msgid "Don't show again"
msgstr "Ðе показывать Ñнова"
@@ -4582,18 +5505,27 @@ msgstr "Выполнено"
msgid "Download"
msgstr "Скачать"
+msgid "Download CSV"
+msgstr "Скачать CSV"
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr "Скачать как"
+
msgid "Download asset"
msgstr ""
msgid "Download codes"
-msgstr ""
+msgstr "Скачать коды"
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr "Скачать лицензию"
@@ -4630,9 +5562,15 @@ msgstr ""
msgid "Edit"
msgstr "Редактировать"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4643,23 +5581,32 @@ msgid "Edit Milestone"
msgstr ""
msgid "Edit Password"
-msgstr ""
+msgstr "Изменить пароль"
msgid "Edit Pipeline Schedule %{id}"
msgstr "Изменить раÑпиÑание Ñборочной линии %{id}"
msgid "Edit Snippet"
-msgstr "Редактировать пример кода"
+msgstr "Редактировать Ñниппет"
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr "Редактировать доÑку"
+
msgid "Edit comment"
+msgstr "Редактировать комментарий"
+
+msgid "Edit description"
msgstr ""
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr "Изменить файл"
@@ -4670,7 +5617,7 @@ msgid "Edit group: %{group_name}"
msgstr ""
msgid "Edit identity for %{user_name}"
-msgstr ""
+msgstr "Изменить идентификацию Ð´Ð»Ñ %{user_name}"
msgid "Edit issues"
msgstr ""
@@ -4678,6 +5625,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr "Изменить wiki Ñтраницу"
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4702,6 +5661,9 @@ msgstr "Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°"
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4786,12 +5748,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
-msgstr "Включить Sentry Ð´Ð»Ñ Ð¾Ñ‚Ñ‡ÐµÑ‚Ð¾Ð² об ошибках и журналированиÑ."
+msgid "Enable access to Grafana"
+msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr "Включить и наÑтроить метрики InfluxDB."
@@ -4804,6 +5769,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "Включить Ð´Ð»Ñ Ñтого проекта"
@@ -4822,12 +5790,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr "Включить прокÑи"
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr "Включить двухфакторную аутентификацию"
@@ -4861,18 +5835,36 @@ msgstr "ЗаканчиваетÑÑ Ð² (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
+msgstr "Введите диапазон IP-адреÑов"
+
+msgid "Enter a number"
msgstr ""
msgid "Enter at least three characters to search"
msgstr ""
-msgid "Enter in your Bitbucket Server URL and personal access token below"
+msgid "Enter board name"
msgstr ""
+msgid "Enter domain"
+msgstr "Введите домен"
+
+msgid "Enter in your Bitbucket Server URL and personal access token below"
+msgstr "Введите URL-Ð°Ð´Ñ€ÐµÑ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñервера Bitbucket и ключ доÑтупа"
+
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "Введите опиÑание обÑуждениÑ"
@@ -4885,9 +5877,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr "Введите заголовок запроÑа на ÑлиÑние"
+msgid "Enter your password to approve"
+msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð²Ð²ÐµÐ´Ð¸Ñ‚Ðµ Ñвой пароль"
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4895,7 +5896,7 @@ msgid "Environment variables are configured by your administrator to be %{link_s
msgstr ""
msgid "Environment:"
-msgstr ""
+msgstr "Окружение:"
msgid "Environments"
msgstr "Среды"
@@ -4961,7 +5962,7 @@ msgid "Environments|Environments"
msgstr "ОкружениÑ"
msgid "Environments|Environments are places where code gets deployed, such as staging or production."
-msgstr ""
+msgstr "ÐžÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ - Ñто меÑта где код развёртываетÑÑ, например теÑтовое окружение или продакшн."
msgid "Environments|Job"
msgstr "Задание"
@@ -5056,9 +6057,15 @@ msgstr "Цель"
msgid "Epics"
msgstr "Цели"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Цели позволÑÑ‚ вам управлÑÑ‚ÑŒ портфелем проектов более Ñффективно и Ñ Ð¼ÐµÐ½ÑŒÑˆÐ¸Ð¼Ð¸ уÑилиÑми"
@@ -5087,7 +6094,7 @@ msgid "Epics|How can I solve this?"
msgstr ""
msgid "Epics|More information"
-msgstr ""
+msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
msgid "Epics|Remove epic"
msgstr ""
@@ -5095,12 +6102,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5119,9 +6141,6 @@ msgstr ""
msgid "Error"
msgstr "Ошибка"
-msgid "Error Reporting and Logging"
-msgstr "Отчеты об ошибках и журналирование"
-
msgid "Error Tracking"
msgstr ""
@@ -5137,6 +6156,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr "Ошибка Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… учаÑтников."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "Ошибка Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ðº."
@@ -5159,7 +6184,7 @@ msgid "Error loading branch data. Please try again."
msgstr "Ошибка загрузки данных ветки. ПожалуйÑта, попробуйте еще раз."
msgid "Error loading branches."
-msgstr ""
+msgstr "Ошибка при загрузке веток."
msgid "Error loading burndown chart data"
msgstr ""
@@ -5171,7 +6196,7 @@ msgid "Error loading last commit."
msgstr "Ошибка загрузки поÑледнего коммита."
msgid "Error loading markdown preview"
-msgstr ""
+msgstr "Ошибка загрузки предварительного проÑмотра markdown"
msgid "Error loading merge requests."
msgstr "Ошибка загрузки запроÑов на ÑлиÑние."
@@ -5186,7 +6211,7 @@ msgid "Error loading template types."
msgstr ""
msgid "Error loading template."
-msgstr ""
+msgstr "Ошибка загрузки шаблона."
msgid "Error loading viewer"
msgstr ""
@@ -5194,9 +6219,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "Произошла ошибка при переключении подпиÑки на оповещение"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5215,14 +6246,17 @@ msgstr ""
msgid "Error saving label update."
msgstr "Ошибка при обновлении метки."
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "Ошибка при обновлении ÑтатуÑа Ð´Ð»Ñ Ð²Ñех дел."
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "Ошибка при обновлении ÑтатуÑа дела."
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5243,7 +6277,7 @@ msgid "Error with Akismet. Please check the logs for more info."
msgstr ""
msgid "Error:"
-msgstr ""
+msgstr "Ошибка:"
msgid "ErrorTracking|Active"
msgstr ""
@@ -5273,7 +6307,7 @@ msgid "ErrorTracking|To enable project selection, enter a valid Auth Token"
msgstr ""
msgid "Errors"
-msgstr ""
+msgstr "Ошибки"
msgid "Estimated"
msgstr ""
@@ -5297,7 +6331,7 @@ msgid "EventFilterBy|Filter by team"
msgstr "Фильтр по команде"
msgid "Events"
-msgstr ""
+msgstr "СобытиÑ"
msgid "Every %{action} attempt has failed: %{job_error_message}. Please try again."
msgstr ""
@@ -5312,25 +6346,31 @@ msgid "Every week (Sundays at 4:00am)"
msgstr "Еженедельно (по воÑкреÑениÑм в 4:00)"
msgid "Everyone"
+msgstr "Ð’Ñе"
+
+msgid "Everyone With Access"
msgstr ""
msgid "Everyone can contribute"
msgstr ""
-msgid "Everything you need to create a GitLab Pages site using GitBook."
+msgid "Everything on your to-do list is marked as done."
msgstr ""
+msgid "Everything you need to create a GitLab Pages site using GitBook."
+msgstr "Ð’Ñе необходимое Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайта GitLab Pages Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ GitBook."
+
msgid "Everything you need to create a GitLab Pages site using Hexo."
-msgstr ""
+msgstr "Ð’Ñе необходимое Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайта GitLab Pages Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Hexo."
msgid "Everything you need to create a GitLab Pages site using Hugo."
-msgstr ""
+msgstr "Ð’Ñе необходимое Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайта GitLab Pages Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Hugo."
msgid "Everything you need to create a GitLab Pages site using Jekyll."
-msgstr ""
+msgstr "Ð’Ñе необходимое Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайта GitLab Pages Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Jekyll."
msgid "Everything you need to create a GitLab Pages site using plain HTML."
-msgstr ""
+msgstr "Ð’Ñе необходимое Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайта GitLab Pages Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ HTML."
msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple queries combined into a formula."
msgstr ""
@@ -5338,6 +6378,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5350,18 +6393,33 @@ msgstr "Развернуть вÑе"
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "Развернуть боковую панель"
-msgid "Expiration date"
+msgid "Expand up"
msgstr ""
+msgid "Expiration date"
+msgstr "Срок дейÑтвиÑ"
+
msgid "Expired"
msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr "ИÑтекает"
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5387,22 +6445,22 @@ msgid "Explore public groups"
msgstr "Обзор публичных групп"
msgid "Export as CSV"
-msgstr ""
+msgstr "ЭкÑпортировать в CSV"
msgid "Export issues"
msgstr ""
msgid "Export project"
-msgstr ""
+msgstr "ЭкÑпорт проекта"
msgid "Export this project with all its related data in order to move your project to a new GitLab instance. Once the export is finished, you can import the file from the \"New Project\" page."
-msgstr ""
+msgstr "ЭкÑпортировать данный проект Ñо вÑеми ÑоответÑтвующими к нему данными, Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы перенеÑти проект на новую копию GitLab. Как только ÑкÑпорт будет завершён, вы Ñможете импортировать файл через Ñтраницу нового проекта."
msgid "External Classification Policy Authorization"
msgstr ""
msgid "External URL"
-msgstr ""
+msgstr "Внешний URL"
msgid "External Wiki"
msgstr ""
@@ -5416,6 +6474,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5455,6 +6519,15 @@ msgstr "Ðевыполненные ЗаданиÑ"
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Ðе удалоÑÑŒ изменить владельца"
@@ -5476,6 +6549,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5497,6 +6573,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5506,6 +6594,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "Ошибка при удалении обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ñ Ð´Ð¾Ñки, повторите попытку."
@@ -5539,6 +6630,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5566,6 +6660,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5596,6 +6693,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr "Добавить"
+
+msgid "FeatureFlags|All users"
+msgstr "Ð’Ñе пользователи"
+
+msgid "FeatureFlags|Clear all"
+msgstr "ОчиÑтить вÑе"
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5617,6 +6723,9 @@ msgstr "ОпиÑание"
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5626,19 +6735,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5653,10 +6762,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5668,19 +6777,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr "Удалить"
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "СтатуÑ"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5689,6 +6822,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "Фев."
@@ -5707,9 +6843,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "ÐŸÐ¾Ð»Ñ Ð½Ð° Ñтой Ñтранице ÑÐµÐ¹Ñ‡Ð°Ñ Ð½ÐµÐ´Ð¾Ñтупны Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, вы можете наÑтроить"
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5718,13 +6851,13 @@ msgstr[2] ""
msgstr[3] ""
msgid "File added"
-msgstr ""
+msgstr "Файл добавлен"
msgid "File browser"
-msgstr ""
+msgstr "Файловый менеджер"
msgid "File deleted"
-msgstr ""
+msgstr "Файл удалён"
msgid "File mode changed from %{a_mode} to %{b_mode}"
msgstr ""
@@ -5733,10 +6866,10 @@ msgid "File moved"
msgstr "Файл перемещен"
msgid "File templates"
-msgstr ""
+msgstr "Шаблоны файлов"
msgid "File upload error."
-msgstr ""
+msgstr "Ошибка загрузки файла."
msgid "Files"
msgstr "Файлы"
@@ -5766,7 +6899,7 @@ msgid "Filter by milestone name"
msgstr ""
msgid "Filter by two-factor authentication"
-msgstr ""
+msgstr "Фильтр по двухфакторной аутентификации"
msgid "Filter results by group"
msgstr "Фильтровать результаты по группе"
@@ -5774,6 +6907,9 @@ msgstr "Фильтровать результаты по группе"
msgid "Filter results by project"
msgstr "Фильтровать результаты по проекту"
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "Фильтр..."
@@ -5796,7 +6932,7 @@ msgid "Fingerprint"
msgstr "Отпечаток"
msgid "Fingerprint:"
-msgstr ""
+msgstr "Отпечаток:"
msgid "Fingerprints"
msgstr ""
@@ -5816,6 +6952,9 @@ msgstr "Завершено"
msgid "First day of the week"
msgstr "Первый день недели"
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5850,7 +6989,7 @@ msgid "FogBugz import"
msgstr ""
msgid "Follow the steps below to export your Google Code project data."
-msgstr ""
+msgstr "Выполните Ñледующие дейÑтвиÑ, чтобы ÑкÑпортировать данные проекта Google Code."
msgid "Font Color"
msgstr "Цвет Шрифта"
@@ -5879,6 +7018,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr "Забыли пароль?"
+
msgid "Fork"
msgstr ""
@@ -5915,20 +7057,26 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr "БеÑплатный пробный период"
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
-msgstr ""
+msgstr "ПÑтница"
+
+msgid "From"
+msgstr "От"
msgid "From %{providerTitle}"
msgstr ""
msgid "From Bitbucket"
-msgstr ""
+msgstr "Из Bitbucket"
msgid "From Bitbucket Server"
-msgstr ""
+msgstr "Из Bitbucket Server"
msgid "From FogBugz"
msgstr ""
@@ -5952,16 +7100,16 @@ msgid "From the Kubernetes cluster details view, install Runner from the applica
msgstr ""
msgid "Full name"
-msgstr ""
+msgstr "Полное имÑ"
msgid "GPG Key ID:"
-msgstr ""
+msgstr "ID GPG ключа:"
msgid "GPG Keys"
msgstr "GPG Ключи"
msgid "GPG keys allow you to verify signed commits."
-msgstr ""
+msgstr "GPG ключи позволÑÑŽÑ‚ вам проверить подпиÑанные коммиты."
msgid "GPG signature (loading...)"
msgstr "GPG подпиÑÑŒ (загрузка...)"
@@ -5979,6 +7127,9 @@ msgid "Generate a default set of labels"
msgstr "Создать Ñтандартный набор меток"
msgid "Generate key"
+msgstr "Сгенерировать ключ"
+
+msgid "Generate link to chart"
msgstr ""
msgid "Generate new export"
@@ -5993,6 +7144,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6056,6 +7210,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6164,10 +7321,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6176,10 +7333,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr "Ð’Ñе проекты"
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6188,9 +7348,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6215,10 +7381,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6269,17 +7438,11 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
msgid "Geo|Remove"
-msgstr ""
+msgstr "Удалить"
msgid "Geo|Repository sync capacity"
msgstr ""
@@ -6293,6 +7456,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6303,13 +7472,13 @@ msgid "Geo|Shards to synchronize"
msgstr ""
msgid "Geo|Status"
-msgstr ""
+msgstr "СтатуÑ"
msgid "Geo|Sync"
-msgstr ""
+msgstr "СинхронизациÑ"
msgid "Geo|Synced"
-msgstr ""
+msgstr "Синхронизировано"
msgid "Geo|Synced at"
msgstr ""
@@ -6317,7 +7486,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6339,7 +7508,7 @@ msgid "Geo|Tracking entry will be removed. Are you sure?"
msgstr ""
msgid "Geo|URL"
-msgstr ""
+msgstr "URL"
msgid "Geo|Unknown state"
msgstr ""
@@ -6374,9 +7543,12 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
-msgid "Getting started with releases"
+msgid "Get started with performance monitoring"
msgstr ""
+msgid "Getting started with releases"
+msgstr "Ðачните работу Ñ Ñ€ÐµÐ»Ð¸Ð·Ð°Ð¼Ð¸"
+
msgid "Git"
msgstr "Git"
@@ -6426,16 +7598,25 @@ msgid "GitLab Shared Runners execute code of different projects on the same Runn
msgstr ""
msgid "GitLab User"
-msgstr ""
+msgstr "Пользователь GitLab"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr "GitLab Ð´Ð»Ñ Slack"
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
msgid "GitLab project export"
-msgstr ""
+msgstr "ЭкÑпорт проекта GitLab"
msgid "GitLab restart is required to apply changes"
msgstr ""
@@ -6449,9 +7630,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6467,9 +7645,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr "Gitlab Pages"
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6477,29 +7664,119 @@ msgid "Go Back"
msgstr "ВернутьÑÑ Ð½Ð°Ð·Ð°Ð´"
msgid "Go Micro is a framework for micro service development."
-msgstr ""
+msgstr "Go Micro — Ñто фреймворк Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ микроÑервиÑов."
msgid "Go back"
msgstr "ВернутьÑÑ"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr "Ðа веÑÑŒ Ñкран"
msgid "Go to"
-msgstr ""
+msgstr "Перейти к"
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr "Перейти в окружениÑ"
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr "Перейти к файлам"
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr "Перейти к заданиÑм"
+
+msgid "Go to kubernetes"
+msgstr "Перейти к kubernetes"
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
+msgstr "Перейти к проекту"
+
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr "Перейти к Ñниппетам"
+
+msgid "Go to the activity feed"
+msgstr "Перейти к ленте активноÑти"
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr "Перейти к wiki"
+
+msgid "Go to your To-Do list"
msgstr ""
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6509,8 +7786,8 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Google не %{link_to_documentation}. ПопроÑите Ñвоего админиÑтратора GitLab, еÑли вы хотите воÑпользоватьÑÑ Ñтим ÑервиÑом."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr ""
@@ -6518,11 +7795,17 @@ msgstr ""
msgid "Got it!"
msgstr "ПонÑтно!"
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
-msgstr ""
+msgstr "Диаграмма"
+
+msgid "Gravatar"
+msgstr "Gravatar"
msgid "Gravatar enabled"
msgstr ""
@@ -6534,7 +7817,7 @@ msgid "Group %{group_name} was scheduled for deletion."
msgstr ""
msgid "Group %{group_name} was successfully created."
-msgstr ""
+msgstr "Группа %{group_name} уÑпешно Ñоздана."
msgid "Group CI/CD settings"
msgstr ""
@@ -6555,7 +7838,7 @@ msgid "Group SAML must be enabled to test"
msgstr ""
msgid "Group URL"
-msgstr ""
+msgstr "URL группы"
msgid "Group avatar"
msgstr "Ðватар группы"
@@ -6567,10 +7850,10 @@ msgid "Group description (optional)"
msgstr "ОпиÑание группы (необÑзательно)"
msgid "Group details"
-msgstr ""
+msgstr "Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ группе"
msgid "Group info:"
-msgstr ""
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ группе:"
msgid "Group maintainers can register group runners in the %{link}"
msgstr ""
@@ -6587,13 +7870,13 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
-msgstr ""
+msgstr "Группа: %{group_name}"
msgid "Group: %{name}"
+msgstr "Группа: %{name}"
+
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
msgstr ""
msgid "GroupRoadmap|From %{dateWord}"
@@ -6632,6 +7915,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6639,7 +7925,7 @@ msgid "GroupSAML|Enforced SSO"
msgstr ""
msgid "GroupSAML|Generate a SCIM token"
-msgstr ""
+msgstr "Создать токен SCIM"
msgid "GroupSAML|Generate a SCIM token to set up your System for Cross-Domain Identity Management."
msgstr ""
@@ -6696,20 +7982,23 @@ msgid "GroupSettings|Auto DevOps will automatically build, test and deploy your
msgstr ""
msgid "GroupSettings|Badges"
-msgstr ""
+msgstr "Значки"
msgid "GroupSettings|Custom project templates"
msgstr ""
msgid "GroupSettings|Customize your group badges."
-msgstr ""
+msgstr "Изменить значки группы."
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
-msgid "GroupSettings|Learn more about badges."
+msgid "GroupSettings|Disable email notifications"
msgstr ""
+msgid "GroupSettings|Learn more about badges."
+msgstr "Узнать больше о значках."
+
msgid "GroupSettings|Learn more about group-level project templates."
msgstr ""
@@ -6740,6 +8029,9 @@ msgstr "Эта наÑтройка применена в %{ancestor_group}. Ð’Ñ‹
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "Эта наÑтройка будет применена Ð´Ð»Ñ Ð²Ñех подгрупп еÑли не будет переопределена владельцем группы. Группы которые уже имеют доÑтуп к проекту, будут иметь его и дальше пока не будут удалены вручную."
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "не может быть отменена до тех пор пока группа \"ПоделитьÑÑ Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ блокировкой\" включена, за иÑключением владельца группы родителÑ"
@@ -6822,7 +8114,7 @@ msgid "GroupsTree|Search by name"
msgstr ""
msgid "HTTP Basic: Access denied\\nYou must use a personal access token with 'api' scope for Git over HTTP.\\nYou can generate one at %{profile_personal_access_tokens_url}"
-msgstr ""
+msgstr "HTTP Basic: доÑтуп запрещен\\nÐ’Ñ‹ должны иÑпользовать личный токен Ñ Ð´Ð¾Ñтупом к «api» Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Git через HTTP.\\nÐ’Ñ‹ можете Ñоздать его на %{profile_personal_access_tokens_url}"
msgid "Have your users email"
msgstr ""
@@ -6863,12 +8155,18 @@ msgstr "Страница Ñправки"
msgid "Help page text and support page url."
msgstr "ТекÑÑ‚ Ñтраницы Ñправки и Url-Ð°Ð´Ñ€ÐµÑ Ñтраницы поддержки."
-msgid "Hide archived projects"
+msgid "Helps prevent bots from brute-force attacks."
msgstr ""
-msgid "Hide file browser"
+msgid "Helps prevent bots from creating accounts."
msgstr ""
+msgid "Hide archived projects"
+msgstr "Скрыть архивные проекты"
+
+msgid "Hide file browser"
+msgstr "Скрыть файлы"
+
msgid "Hide group projects"
msgstr ""
@@ -6884,6 +8182,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Скрыть значение"
@@ -6892,6 +8193,9 @@ msgstr[2] "Скрыть значениÑ"
msgstr[3] "Скрыть значениÑ"
msgid "Hide values"
+msgstr "Скрыть значениÑ"
+
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
msgstr ""
msgid "Highest role:"
@@ -6912,14 +8216,20 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
-msgid "Housekeeping"
+msgid "Hours"
msgstr ""
+msgid "Housekeeping"
+msgstr "ОчиÑтка"
+
msgid "Housekeeping successfully started"
msgstr "ОчиÑтка уÑпешно запущена"
msgid "Housekeeping, export, path, transfer, remove, archive."
-msgstr ""
+msgstr "ОчиÑтка, ÑкÑпорт, путь, перемещение, удаление, архивирование."
+
+msgid "How it works"
+msgstr "Как Ñто работает"
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6930,6 +8240,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6942,9 +8255,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr "ID:"
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6981,6 +8300,9 @@ msgstr ""
msgid "IDE|Review"
msgstr "РецензиÑ"
+msgid "IDE|Successful commit"
+msgstr "УÑпешный коммит"
+
msgid "IP Address"
msgstr ""
@@ -7030,7 +8352,7 @@ msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commit
msgstr ""
msgid "If you lose your recovery codes you can generate new ones, invalidating all previous codes."
-msgstr ""
+msgstr "ЕÑли вы потерÑете Ñвои коды воÑÑтановлениÑ, вы можете Ñоздать новые, Ð°Ð½Ð½ÑƒÐ»Ð¸Ñ€ÑƒÑ Ð²Ñе предыдущие коды."
msgid "If your HTTP repository is not publicly accessible, add your credentials."
msgstr ""
@@ -7044,6 +8366,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7054,7 +8382,7 @@ msgid "Import CSV"
msgstr ""
msgid "Import Projects from Gitea"
-msgstr ""
+msgstr "Импорт проектов из Gitea"
msgid "Import all compatible projects"
msgstr ""
@@ -7066,19 +8394,19 @@ msgid "Import all repositories"
msgstr "Импортировать вÑе репозитории"
msgid "Import an exported GitLab project"
-msgstr ""
+msgstr "Импортировать ÑкÑпортированный проект GitLab"
msgid "Import in progress"
msgstr "ВыполнÑетÑÑ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚"
msgid "Import issues"
-msgstr ""
+msgstr "Импорт обÑуждений"
msgid "Import members"
-msgstr ""
+msgstr "Импорт учаÑтников"
msgid "Import members from another project"
-msgstr ""
+msgstr "Импорт учаÑтников из другого проекта"
msgid "Import multiple repositories by uploading a manifest file."
msgstr ""
@@ -7087,25 +8415,25 @@ msgid "Import project"
msgstr ""
msgid "Import project members"
-msgstr ""
+msgstr "Импорт учаÑтников проекта"
msgid "Import projects from Bitbucket"
-msgstr ""
+msgstr "Импорт проектов из Bitbucket"
msgid "Import projects from Bitbucket Server"
-msgstr ""
+msgstr "Импорт проектов Ñ Bitbucket Server"
msgid "Import projects from FogBugz"
-msgstr ""
+msgstr "Импорт проектов из FogBugz"
msgid "Import projects from GitLab.com"
-msgstr ""
+msgstr "Импорт проектов из GitLab.com"
msgid "Import projects from Google Code"
-msgstr ""
+msgstr "Импорт проектов из Google Code"
msgid "Import repositories from Bitbucket Server"
-msgstr ""
+msgstr "Импорт репозиториев из Bitbucket Server"
msgid "Import repositories from GitHub"
msgstr "Импорт репозиториев из GitHub"
@@ -7147,9 +8475,9 @@ msgid "ImportProjects|The remote data could not be imported."
msgstr ""
msgid "ImportProjects|The repository could not be created."
-msgstr ""
+msgstr "Ðе удалоÑÑŒ Ñоздать репозиторий."
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7165,7 +8493,7 @@ msgid "Improve issues management with Issue weight and GitLab Enterprise Edition
msgstr ""
msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition."
-msgstr ""
+msgstr "Улучшить поиÑк при помощи РаÑширенного Глобального ПоиÑка в верÑии GitLab Enterprise Edition."
msgid "In order to enable instance-level analytics, please ask an admin to enable %{usage_ping_link_start}usage ping%{usage_ping_link_end}."
msgstr ""
@@ -7195,12 +8523,15 @@ msgid "Includes LFS objects. It can be overridden per group, or per project. 0 f
msgstr ""
msgid "Includes an MVC structure to help you get started."
-msgstr ""
+msgstr "Включает в ÑÐµÐ±Ñ Ñтруктуру в MVC, чтобы помочь вам начать работу."
msgid "Includes an MVC structure, Gemfile, Rakefile, along with many others, to help you get started."
-msgstr ""
+msgstr "Включает в ÑÐµÐ±Ñ Ñтруктуру MVC, Gem файлы, Rake файлы и многие другие, которые помогут вам начать работу."
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
+msgstr "Включает в ÑÐµÐ±Ñ Ñтруктуру MVC, mvnw и pom.xml, которые помогут вам начать работу."
+
+msgid "Incoming email"
msgstr ""
msgid "Incompatible Project"
@@ -7209,17 +8540,17 @@ msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
msgstr ""
msgid "Inform users without uploaded SSH keys that they can't push over SSH until one is added"
-msgstr ""
+msgstr "Сообщать пользователÑм без загруженных SSH ключей, что они не могут отправлÑÑ‚ÑŒ через SSH до тех пор, пока Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один не будет добавлен"
msgid "Information about additional Pages templates and how to install them can be found in our %{pages_getting_started_guide}."
-msgstr ""
+msgstr "Информацию о дополнительных шаблонах Ñтраниц и о том, как их уÑтановить, можно найти в нашем %{pages_getting_started_guide}."
msgid "Inline"
msgstr ""
@@ -7231,7 +8562,7 @@ msgid "Input your repository URL"
msgstr ""
msgid "Insert a quote"
-msgstr ""
+msgstr "Ð’Ñтавить цитату"
msgid "Insert code"
msgstr ""
@@ -7243,22 +8574,25 @@ msgid "Insights"
msgstr ""
msgid "Install"
-msgstr ""
+msgstr "УÑтановить"
msgid "Install GitLab Runner"
-msgstr ""
+msgstr "УÑтановите GitLab Runner"
msgid "Install Runner on Kubernetes"
msgstr "УÑтановить Runner на Kubernetes"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
-msgstr ""
+msgstr "УÑтановите приложение Ð´Ð»Ñ Ð´Ð²ÑƒÑ…Ñтапной аутентификации, например %{free_otp_link} или Google Authenticator и отÑканируйте Ñтот QR-код. Более Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð¾Ñтупна в %{help_link_start}документации%{help_link_end}."
+
+msgid "Install on clusters"
+msgstr "УÑтановить на клаÑтеры"
msgid "Installed"
-msgstr ""
+msgstr "УÑтановлено"
msgid "Installing"
-msgstr ""
+msgstr "УÑтановка"
msgid "Instance"
msgid_plural "Instances"
@@ -7273,6 +8607,9 @@ msgstr "СтатиÑтика ЭкземплÑра"
msgid "Instance Statistics visibility"
msgstr "ВидимоÑÑ‚ÑŒ СтатиÑтики ЭкземплÑра"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "ЭкземплÑÑ€ не поддерживает неÑколько клаÑтеров Kubernetes"
@@ -7315,6 +8652,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑÑылка"
+
msgid "Invalid date"
msgstr ""
@@ -7334,7 +8674,7 @@ msgid "Invalid input, please avoid emojis"
msgstr ""
msgid "Invalid pin code"
-msgstr ""
+msgstr "Ðеверный пин-код"
msgid "Invalid query"
msgstr ""
@@ -7358,21 +8698,27 @@ msgid "Invite \"%{trimmed}\" by email"
msgstr ""
msgid "Invite group"
-msgstr ""
+msgstr "ПриглаÑить группу"
msgid "Invite member"
+msgstr "ПриглаÑить учаÑтников"
+
+msgid "Invocations"
msgstr ""
-msgid "Invoke Count"
+msgid "Is using license seat:"
msgstr ""
-msgid "Invoke Time"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7417,9 +8763,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "ОбÑуждениÑ"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "ОбÑуждениÑми могут быть ошибки, задачи или идеи. Также, по обÑуждениÑм можно выполнÑÑ‚ÑŒ поиÑк и отбор."
@@ -7427,7 +8791,7 @@ msgid "Issues closed"
msgstr "ОбÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹"
msgid "Issues with comments, merge requests with diffs and comments, labels, milestones, snippets, and other project entities"
-msgstr ""
+msgstr "ОбÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñми, запроÑÑ‹ на ÑлиÑние Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñми и комментариÑми, метками, Ñтапами, Ñниппетами и другими объектами проекта"
msgid "Issues, merge requests, pushes, and comments."
msgstr ""
@@ -7435,7 +8799,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7453,6 +8820,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7628,7 +9001,10 @@ msgid "Key (PEM)"
msgstr ""
msgid "Key: %{key}"
-msgstr ""
+msgstr "Ключ: %{key}"
+
+msgid "Keyboard Shortcuts"
+msgstr "«ГорÑчие» клавиши"
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7654,12 +9030,15 @@ msgstr "КлаÑтер Kubernetes был уÑпешно обновлён."
msgid "Kubernetes configured"
msgstr "Kubernetes наÑтроен"
-msgid "Kubernetes error: %{error_code}"
+msgid "Kubernetes deployment not found"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "Kubernetes error: %{error_code}"
msgstr ""
+msgid "LDAP"
+msgstr "LDAP"
+
msgid "LDAP settings"
msgstr ""
@@ -7688,7 +9067,7 @@ msgid "Label actions dropdown"
msgstr ""
msgid "Label lists show all issues with the selected label."
-msgstr ""
+msgstr "СпиÑки меток отображают вÑе обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ меткой."
msgid "Label was created"
msgstr ""
@@ -7733,7 +9112,7 @@ msgid "Labels|and %{count} more"
msgstr ""
msgid "Language"
-msgstr ""
+msgstr "Язык"
msgid "Large File Storage"
msgstr ""
@@ -7745,14 +9124,17 @@ msgstr[1] "ПоÑледние %d днÑ"
msgstr[2] "ПоÑледние %d дней"
msgstr[3] "ПоÑледние %d дни"
+msgid "Last %{days} days"
+msgstr "ПоÑледние %{days} днÑ(ей)"
+
msgid "Last Pipeline"
msgstr "ПоÑледнÑÑ Ð¡Ð±Ð¾Ñ€Ð¾Ñ‡Ð½Ð°Ñ Ð›Ð¸Ð½Ð¸Ñ"
msgid "Last accessed on"
-msgstr ""
+msgstr "ПоÑледний доÑтуп"
msgid "Last activity"
-msgstr ""
+msgstr "ПоÑледнÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚ÑŒ"
msgid "Last commit"
msgstr "ПоÑледний коммит"
@@ -7766,15 +9148,24 @@ msgstr "Дата поÑледнего изменениÑ: %{date}"
msgid "Last edited by %{name}"
msgstr "Ðвтор поÑледнего изменениÑ: %{name}"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
-msgstr ""
+msgstr "ПоÑледнее поÑещение"
+
+msgid "Last successful update"
+msgstr "ПоÑледнее уÑпешное обновление"
msgid "Last update"
msgstr "ПоÑледнее обновление"
+msgid "Last update attempt"
+msgstr "ПоÑледнÑÑ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° обновлениÑ"
+
msgid "Last updated"
msgstr "ПоÑледний раз обновлено"
@@ -7793,7 +9184,7 @@ msgstr "в"
msgid "Latest changes"
msgstr "ПоÑледние изменениÑ"
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7803,17 +9194,14 @@ msgid "Learn GitLab"
msgstr ""
msgid "Learn how to %{link_start}contribute to the built-in templates%{link_end}"
-msgstr ""
+msgstr "Узнайте, как %{link_start}внеÑти Ñвой вклад во вÑтроенные шаблоны%{link_end}"
msgid "Learn how to %{no_packages_link_start}publish and share your packages%{no_packages_link_end} with GitLab."
-msgstr ""
+msgstr "Узнайте, как %{no_packages_link_start}опубликовать и делитьÑÑ Ñвоими пакетами%{no_packages_link_end} Ñ GitLab."
msgid "Learn more"
msgstr "Подробнее"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7827,11 +9215,14 @@ msgid "Learn more about adding certificates to your project by following the %{d
msgstr ""
msgid "Learn more about approvals."
-msgstr ""
+msgstr "Подробнее об ÑоглаÑовании."
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7841,6 +9232,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "Узнайте больше в"
@@ -7871,76 +9265,102 @@ msgstr ""
msgid "License"
msgstr "ЛицензиÑ"
-msgid "LicenseManagement|Add a license"
-msgstr "Добавить лицензию"
+msgid "License Compliance"
+msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "Вручную добавить лицензии в одобренные или внеÑённые в черный ÑпиÑок"
+msgid "LicenseCompliance|Add a license"
+msgstr ""
-msgid "LicenseManagement|Approve"
-msgstr "Одобрить"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "Одобрить лицензию"
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "Одобрить лицензию?"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "Одобрено"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
-msgstr "Черный ÑпиÑок"
+msgid "LicenseCompliance|Approved"
+msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "Отмена"
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
-msgid "LicenseManagement|License"
-msgstr "ЛицензиÑ"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
-msgstr "Ðаименование лицензии"
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "Управление одобренными и внеÑенными в черный ÑпиÑок лицензиÑм Ð´Ð»Ñ Ñтого проекта."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "Подтвердить"
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÑ‚ одобренных или внеÑенных в черный ÑпиÑок лицензий в Ñтом проекте."
+msgid "LicenseCompliance|Packages"
+msgstr ""
+
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7952,6 +9372,9 @@ msgstr ""
msgid "Licenses"
msgstr "Лицензии"
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7962,12 +9385,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "СпиÑок"
@@ -7980,14 +9409,14 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
-msgstr "СпиÑок ваших репозиториев на GitHub"
+msgid "List your Bitbucket Server repositories"
+msgstr "СпиÑок репозиториев из Bitbucket Server"
msgid "Live preview"
msgstr "Предварительный проÑмотр в реальном времени"
@@ -7998,6 +9427,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr "Загрузка GitLab IDE..."
@@ -8008,7 +9440,7 @@ msgid "Loading…"
msgstr ""
msgid "Localization"
-msgstr ""
+msgstr "ЛокализациÑ"
msgid "Lock"
msgstr "Блокировка"
@@ -8037,13 +9469,19 @@ msgstr "Заблокировано"
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8055,14 +9493,17 @@ msgstr ""
msgid "Logs"
msgstr "Журналы"
-msgid "MRApprovals|Approved by"
+msgid "MERGED"
msgstr ""
+msgid "MRApprovals|Approved by"
+msgstr "СоглаÑовано"
+
msgid "MRApprovals|Approvers"
msgstr ""
msgid "MRApprovals|Pending approvals"
-msgstr ""
+msgstr "Ожидающие ÑоглаÑованиÑ"
msgid "MRDiff|Show changes only"
msgstr ""
@@ -8070,26 +9511,32 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
msgstr ""
msgid "Manage Git repositories with fine-grained access controls that keep your code secure. Perform code reviews and enhance collaboration with merge requests. Each project can also have an issue tracker and a wiki."
-msgstr ""
+msgstr "УправлÑйте Git репозиториÑми иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´ÐµÑ‚Ð°Ð»ÑŒÐ½Ñ‹Ðµ наÑтройки доÑтупа, которые защитÑÑ‚ ваш код. ВыполнÑйте проверку кода и улучшите взаимодейÑтвие вашей команды запроÑами на ÑлиÑние. Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ проекта также доÑтупны ÑиÑтема обÑуждений и вики."
msgid "Manage Web IDE features"
msgstr ""
@@ -8116,7 +9563,7 @@ msgid "Manage project labels"
msgstr "Управление метками проекта"
msgid "Manage two-factor authentication"
-msgstr ""
+msgstr "Управление двухфакторной аутентификацией"
msgid "Manifest"
msgstr "МанифеÑÑ‚"
@@ -8127,6 +9574,9 @@ msgstr "Импорт файла манифеÑта"
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8145,6 +9595,12 @@ msgstr "Мар."
msgid "March"
msgstr "Март"
+msgid "Mark To Do as done"
+msgstr "Отметить как выполненное"
+
+msgid "Mark as done"
+msgstr "Отметить как выполнено"
+
msgid "Mark as resolved"
msgstr ""
@@ -8154,27 +9610,78 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
-msgstr "Отметить как Ñделанное"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
-msgstr ""
+msgstr "Markdown"
msgid "Markdown Help"
-msgstr ""
+msgstr "Справка по Markdown"
msgid "Markdown enabled"
msgstr "Включен режим Markdown"
+msgid "Markdown is supported"
+msgstr "Markdown поддерживаетÑÑ"
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8230,11 +9737,20 @@ msgid "Members can be added by project <i>Maintainers</i> or <i>Owners</i>"
msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
+msgstr "УчаÑтники <strong>%{project_name}</strong>"
+
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
msgstr ""
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние"
@@ -8262,6 +9778,9 @@ msgstr ""
msgid "Merge request"
msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8274,6 +9793,9 @@ msgstr "ЗапроÑÑ‹ на ÑлиÑние"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "ЗапроÑÑ‹ на ÑлиÑние- Ñто меÑто, где можно предлагать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð½Ð¾Ñимые в проект, и обÑуждать Ñти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8307,34 +9829,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8349,19 +9871,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8385,24 +9907,42 @@ msgstr "Слито"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "СообщениÑ"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "Метрики"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "Метрики - Influx"
msgid "Metrics - Prometheus"
msgstr "Метрики - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr "Метрики и профилирование"
@@ -8563,17 +10103,14 @@ msgid "Minimum capacity to be available before we schedule more mirrors preempti
msgstr ""
msgid "Minimum length is %{minimum_password_length} characters"
-msgstr ""
+msgstr "ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° - %{minimum_password_length} Ñимволов"
msgid "Minimum length is %{minimum_password_length} characters."
-msgstr ""
+msgstr "ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° - %{minimum_password_length} Ñимволов."
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8613,19 +10150,22 @@ msgstr "Отмена"
msgid "Modal|Close"
msgstr "Закрыть"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
msgid "Modify commit messages"
-msgstr ""
+msgstr "Изменить опиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼Ð¸Ñ‚Ð°"
msgid "Modify merge commit"
msgstr ""
msgid "Monday"
-msgstr ""
+msgstr "Понедельник"
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8637,9 +10177,15 @@ msgstr "МеÑÑцы"
msgid "More"
msgstr ""
-msgid "More actions"
+msgid "More Information"
msgstr ""
+msgid "More Slack commands"
+msgstr "Больше Slack команд"
+
+msgid "More actions"
+msgstr "Больше дейÑтвий"
+
msgid "More info"
msgstr ""
@@ -8653,7 +10199,7 @@ msgid "More than %{number_commits_distance} commits different with %{default_bra
msgstr ""
msgid "Most stars"
-msgstr ""
+msgstr "По рейтингу"
msgid "Mount point %{mounted_as} not found in %{model_class}."
msgstr ""
@@ -8667,6 +10213,12 @@ msgstr "ПеремеÑтить обÑуждение"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8676,6 +10228,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8701,7 +10259,7 @@ msgid "Name new label"
msgstr "Ðазвать новую метку"
msgid "Name your individual key via a title"
-msgstr ""
+msgstr "Придумайте Ð¸Ð¼Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ ключа, чтобы раÑпознать его в ÑпиÑке"
msgid "Name:"
msgstr "Ðаименование:"
@@ -8710,7 +10268,7 @@ msgid "Namespaces to index"
msgstr ""
msgid "Naming, topics, avatar"
-msgstr ""
+msgstr "ИмÑ, теги, логотип"
msgid "Naming, visibility"
msgstr ""
@@ -8728,7 +10286,7 @@ msgid "Nav|Sign out and sign in with a different account"
msgstr ""
msgid "Need help?"
-msgstr ""
+msgstr "Ðужна помощь?"
msgid "Network"
msgstr ""
@@ -8743,7 +10301,7 @@ msgid "New Application"
msgstr "Ðовое Приложение"
msgid "New Environment"
-msgstr ""
+msgstr "Ðовое окружение"
msgid "New Group"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð“Ñ€ÑƒÐ¿Ð¿Ð°"
@@ -8762,10 +10320,10 @@ msgid "New Label"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð¼ÐµÑ‚ÐºÐ°"
msgid "New Milestone"
-msgstr ""
+msgstr "Ðовый Этап"
msgid "New Pages Domain"
-msgstr ""
+msgstr "Ðовый домен Ð´Ð»Ñ Gitlab Pages"
msgid "New Password"
msgstr ""
@@ -8773,8 +10331,11 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "Ðовое РаÑпиÑание Сборочной Линии"
+msgid "New Project"
+msgstr "Ðовый проект"
+
msgid "New Snippet"
-msgstr "Ðовый пример кода"
+msgstr "Ðовый Ñниппет"
msgid "New branch"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ‚ÐºÐ°"
@@ -8789,7 +10350,7 @@ msgid "New directory"
msgstr "Ðовый каталог"
msgid "New environment"
-msgstr ""
+msgstr "Ðовое окружение"
msgid "New epic"
msgstr "ÐÐ¾Ð²Ð°Ñ Ñ†ÐµÐ»ÑŒ"
@@ -8819,10 +10380,10 @@ msgid "New merge request"
msgstr "Ðовый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние"
msgid "New milestone"
-msgstr ""
+msgstr "ÐÐ¾Ð²Ð°Ñ Ñтап"
msgid "New password"
-msgstr ""
+msgstr "Ðовый пароль"
msgid "New pipelines will cancel older, pending pipelines on the same branch"
msgstr ""
@@ -8837,7 +10398,7 @@ msgid "New schedule"
msgstr "Ðовое раÑпиÑание"
msgid "New snippet"
-msgstr "Ðовый пример кода"
+msgstr "Ðовый Ñниппет"
msgid "New subgroup"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð¾Ð´Ð³Ñ€ÑƒÐ¿Ð¿Ð°"
@@ -8860,13 +10421,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr "Ðет"
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8878,13 +10451,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
+msgstr "ДейÑтвий не найдено"
+
+msgid "No application_settings found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8899,9 +10478,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8911,6 +10487,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8935,12 +10520,18 @@ msgstr ""
msgid "No files found."
msgstr "Файлы не найдены."
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "Ðет меток Ñ Ñ‚Ð°ÐºÐ¸Ð¼ наименованием или опиÑанием"
@@ -8951,7 +10542,7 @@ msgid "No licenses found."
msgstr ""
msgid "No matching results"
-msgstr ""
+msgstr "Ðет результатов"
msgid "No merge requests for the selected time period."
msgstr ""
@@ -8995,9 +10586,15 @@ msgstr ""
msgid "No schedules"
msgstr "Ðет раÑпиÑаний"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -9007,6 +10604,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9019,6 +10619,9 @@ msgstr ""
msgid "None"
msgstr "ПуÑто"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "ÐедоÑтупно"
@@ -9037,6 +10640,9 @@ msgstr "ÐедоÑтаточно данных"
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -9046,6 +10652,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr "Заметка"
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9061,6 +10670,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr "Примечание: рееÑÑ‚Ñ€ контейнеров вÑегда виден, когда проект публичный"
+
msgid "NoteForm|Note"
msgstr ""
@@ -9089,7 +10701,7 @@ msgid "Notification events"
msgstr "Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ ÑобытиÑÑ…"
msgid "Notification setting"
-msgstr ""
+msgstr "ÐаÑтройка уведомлениÑ"
msgid "Notification setting - %{notification_title}"
msgstr ""
@@ -9157,6 +10769,9 @@ msgstr ""
msgid "Notifications"
msgstr "УведомлениÑ"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹"
@@ -9175,9 +10790,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "ОК"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9193,6 +10820,9 @@ msgstr "Фильтр"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr "OmniAuth"
+
msgid "Onboarding"
msgstr ""
@@ -9203,7 +10833,7 @@ msgid "Once removed, the fork relationship cannot be restored and you will no lo
msgstr ""
msgid "Once the exported file is ready, you will receive a notification email with a download link, or you can download it from this page."
-msgstr ""
+msgstr "ПоÑле того, как ÑкÑпортируемый файл будет готов, вы получите уведомление по Ñлектронной почте Ñ ÑÑылкой Ð´Ð»Ñ ÑкачиваниÑ, или вы Ñможете Ñкачать его Ñ Ñтой Ñтраницы."
msgid "One more item"
msgid_plural "%d more items"
@@ -9224,6 +10854,12 @@ msgstr "Один или неÑколько проектов Google Code не мÐ
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr "Только учаÑтники проекта"
+
msgid "Only admins"
msgstr "Только админиÑтраторы"
@@ -9248,6 +10884,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9255,6 +10897,9 @@ msgid "Open"
msgstr "Открыть"
msgid "Open Documentation"
+msgstr "Открыть документацию"
+
+msgid "Open Selection"
msgstr ""
msgid "Open comment type dropdown"
@@ -9266,6 +10911,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr "Открыть в Xcode"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9276,7 +10927,7 @@ msgid "Open sidebar"
msgstr ""
msgid "Open source software to collaborate on code"
-msgstr ""
+msgstr "Открытое ПО Ð´Ð»Ñ ÑовмеÑтной работы над кодом"
msgid "Opened"
msgstr ""
@@ -9339,7 +10990,7 @@ msgid "Or you can choose one of the suggested colors below"
msgstr ""
msgid "Other Labels"
-msgstr ""
+msgstr "Другие Метки"
msgid "Other information"
msgstr ""
@@ -9347,6 +10998,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr "ИÑходÑщие запроÑÑ‹"
@@ -9371,6 +11028,18 @@ msgstr ""
msgid "Package was removed"
msgstr "Пакет был удален"
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "Пакеты"
@@ -9390,16 +11059,16 @@ msgid "Pages Domains"
msgstr ""
msgid "Pages getting started guide"
-msgstr ""
+msgstr "РуководÑтво по работе Ñ Ñтраницами"
msgid "Pagination|Go to first page"
msgstr ""
msgid "Pagination|Go to last page"
-msgstr ""
+msgstr "Перейти на поÑледнюю Ñтраницу"
msgid "Pagination|Go to next page"
-msgstr ""
+msgstr "Перейти на Ñледующую Ñтраницу"
msgid "Pagination|Go to previous page"
msgstr ""
@@ -9407,15 +11076,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr "ПоÑледнÑÑ Â»"
-msgid "Pagination|Next"
-msgstr "СледующаÑ"
-
-msgid "Pagination|Prev"
-msgstr "ПредыдущаÑ"
+msgid "Pagination|Next ›"
+msgstr ""
msgid "Pagination|« First"
msgstr "« ПерваÑ"
+msgid "Pagination|‹ Prev"
+msgstr ""
+
msgid "Parameter"
msgstr ""
@@ -9426,7 +11095,7 @@ msgid "Password"
msgstr "Пароль"
msgid "Password (optional)"
-msgstr ""
+msgstr "Пароль (необÑзательно)"
msgid "Password authentication is unavailable."
msgstr ""
@@ -9453,7 +11122,7 @@ msgid "Paste issue link"
msgstr ""
msgid "Paste your public SSH key, which is usually contained in the file '~/.ssh/id_ed25519.pub' or '~/.ssh/id_rsa.pub' and begins with 'ssh-ed25519' or 'ssh-rsa'. Don't use your private SSH key."
-msgstr ""
+msgstr "Ð’Ñтавьте ваш публичный SSH ключ, который обычно ÑодержитÑÑ Ð² файле '~/.ssh/id_ed25519.pub' или '~/.ssh/id_rsa.pub' и начинаетÑÑ Ñ 'ssh-ed25519' или 'ssh-rsa'. Ðе иÑпользуйте ваш закрытый SSH ключ."
msgid "Path"
msgstr ""
@@ -9483,11 +11152,29 @@ msgid "People without permission will never get a notification."
msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
+msgstr "Выполнение раÑширенных операций, таких как изменение пути, перемещение или удаление группы."
+
+msgid "Perform common operations on GitLab project"
msgstr ""
msgid "Performance optimization"
msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти"
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr "Права доÑтупа"
@@ -9515,12 +11202,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr "Выберите Ð¸Ð¼Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, и мы предоÑтавим вам уникальный %{type} токен."
+
msgid "Pin code"
-msgstr ""
+msgstr "Пин-код"
msgid "Pipeline"
msgstr "Ð¡Ð±Ð¾Ñ€Ð¾Ñ‡Ð½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "РаÑпиÑание Сборочной Линии"
@@ -9587,7 +11283,7 @@ msgstr "Переменные"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "ÐаÑтраиваемый"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9611,12 +11307,21 @@ msgstr "Сборочные линии за поÑледнюю неделю"
msgid "Pipelines for last year"
msgstr "Сборочные линии за поÑледний год"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9627,7 +11332,7 @@ msgid "Pipelines|CI Lint"
msgstr ""
msgid "Pipelines|Clear Runner Caches"
-msgstr ""
+msgstr "ОчиÑтить Runner кÑши "
msgid "Pipelines|Continuous Integration can help catch bugs by running your tests automatically, while Continuous Deployment can help you deliver code to your product environment."
msgstr ""
@@ -9665,15 +11370,30 @@ msgstr "Этот проект в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½Ðµ наÑтро
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9704,6 +11424,9 @@ msgstr "ОÑтановить Ñборочную линию #%{pipelineId}?"
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9716,18 +11439,12 @@ msgstr "вÑе"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "уÑпех"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "Ñо Ñтадией"
@@ -9758,6 +11475,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9776,6 +11496,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9804,10 +11527,10 @@ msgid "Please enter a number greater than %{number} (from the project settings)"
msgstr ""
msgid "Please enter a valid number"
-msgstr ""
+msgstr "ПожалуйÑта введите правильное чиÑло"
msgid "Please enter or upload a license."
-msgstr ""
+msgstr "ПожалуйÑта, введите или загрузите лицензию."
msgid "Please fill in a descriptive name for your group."
msgstr ""
@@ -9819,7 +11542,7 @@ msgid "Please note that this application is not provided by GitLab and you shoul
msgstr ""
msgid "Please provide a name"
-msgstr ""
+msgstr "ПожалуйÑта, укажите имÑ"
msgid "Please provide a valid email address."
msgstr ""
@@ -9828,13 +11551,13 @@ msgid "Please retype the email address."
msgstr ""
msgid "Please select a file"
-msgstr ""
+msgstr "ПожалуйÑта, выберите файл"
msgid "Please select a group."
-msgstr ""
+msgstr "ПожалуйÑта, выберите группу."
msgid "Please select and add a member"
-msgstr ""
+msgstr "ПожалуйÑта, выберите и добавьте учаÑтника"
msgid "Please select at least one filter to see results"
msgstr "ПожалуйÑта, выберите по крайней мере один фильтр, чтобы увидеть результаты"
@@ -9849,7 +11572,7 @@ msgid "Please try again"
msgstr "ПожалуйÑта, попробуйте ещё раз"
msgid "Please upgrade PostgreSQL to version 9.6 or greater. The status of the replication cannot be determined reliably with the current version."
-msgstr ""
+msgstr "ПожалуйÑта, обновите PostgreSQL до верÑии 9.6 или выше. Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸ не может быть определен надежно Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ верÑией."
msgid "Please use this form to report to the admin users who create spam issues, comments or behave inappropriately."
msgstr ""
@@ -9863,26 +11586,29 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "ПожалуйÑта, подождите пока мы импортируем к ваш репозиторий. ОбновлÑйте Ñтраницу по желанию."
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "ПредпочтениÑ"
msgid "Preferences saved."
-msgstr ""
+msgstr "ÐаÑтройки Ñохранены."
msgid "Preferences|Behavior"
-msgstr ""
+msgstr "Поведение"
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
-msgstr ""
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
+msgstr "Выберете между фикÑированным (макÑ. 1280px) и гибким (%{percentage}) макетом."
msgid "Preferences|Choose what content you want to see on a project’s overview page."
-msgstr ""
+msgstr "Выберите, какое Ñодержимое вы хотите видеть на Ñтранице обзора проекта."
msgid "Preferences|Customize the appearance of the application header and navigation sidebar."
-msgstr ""
+msgstr "ÐаÑтройте внешний вид верхней и боковой панели навигации."
msgid "Preferences|Default dashboard"
-msgstr ""
+msgstr "Страница по умолчанию"
msgid "Preferences|Display time in 24-hour format"
msgstr ""
@@ -9894,25 +11620,28 @@ msgid "Preferences|Layout width"
msgstr ""
msgid "Preferences|Navigation theme"
-msgstr ""
+msgstr "Дизайн верхней панели"
msgid "Preferences|Project overview content"
+msgstr "Обзор Ñодержимого проекта"
+
+msgid "Preferences|Show whitespace in diffs"
msgstr ""
msgid "Preferences|Syntax highlighting theme"
-msgstr ""
+msgstr "Тема подÑветки ÑинтакÑиÑа"
msgid "Preferences|These settings will update how dates and times are displayed for you."
msgstr ""
msgid "Preferences|This feature is experimental and translations are not complete yet"
-msgstr ""
+msgstr "Эта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑвлÑетÑÑ ÑкÑпериментальной и перевод еще не полный"
msgid "Preferences|This setting allows you to customize the appearance of the syntax."
-msgstr ""
+msgstr "Эта наÑтройка позволÑет изменить внешний вид ÑинтакÑиÑа."
msgid "Preferences|This setting allows you to customize the behavior of the system layout and default views."
-msgstr ""
+msgstr "Этот параметр позволÑет наÑтроить ширину макета Ñтраницы, а так же главную Ñтраницу при открытии Ñайта."
msgid "Preferences|Time display"
msgstr ""
@@ -9933,7 +11662,7 @@ msgid "Press Enter or click to search"
msgstr ""
msgid "Prevent adding new members to project membership within this group"
-msgstr ""
+msgstr "Запретить добавление новых учаÑтников в проектах Ñтой группы"
msgid "Prevent approval of merge requests by merge request author"
msgstr ""
@@ -9945,7 +11674,7 @@ msgid "Preview"
msgstr "Предварительный проÑмотр"
msgid "Preview Markdown"
-msgstr ""
+msgstr "ПредпроÑмотр Markdown"
msgid "Preview changes"
msgstr ""
@@ -9956,9 +11685,15 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
-msgid "Primary"
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
msgstr ""
+msgid "Primary"
+msgstr "ОÑновной"
+
msgid "Prioritize"
msgstr ""
@@ -9984,12 +11719,27 @@ msgid "Private group(s)"
msgstr ""
msgid "Private profile"
-msgstr ""
+msgstr "Приватный профиль"
msgid "Private projects can be created in your personal namespace with:"
msgstr "Личные проекты могут быть Ñозданы в вашем перÑональном проÑтранÑтве Ñ:"
msgid "Proceed"
+msgstr "Продолжить"
+
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
msgstr ""
msgid "Profile"
@@ -10020,7 +11770,7 @@ msgid "Profiles|Active"
msgstr ""
msgid "Profiles|Add key"
-msgstr ""
+msgstr "Добавить ключ"
msgid "Profiles|Add status emoji"
msgstr ""
@@ -10032,31 +11782,31 @@ msgid "Profiles|Avatar will be removed. Are you sure?"
msgstr ""
msgid "Profiles|Bio"
-msgstr ""
+msgstr "О Ñебе"
msgid "Profiles|Change username"
msgstr "Изменить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
msgid "Profiles|Changing your username can have unintended side effects."
-msgstr ""
+msgstr "Изменение вашего имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ‚ иметь непредвиденные побочные Ñффекты."
msgid "Profiles|Choose file..."
msgstr ""
msgid "Profiles|Choose to show contributions of private projects on your public profile without any project, repository or organization information"
-msgstr ""
+msgstr "Выберите, чтобы показывать вклад от закрытых проектов в ваш публичный профиль без какой-либо информации о проекте, репозитории или организации"
msgid "Profiles|City, country"
-msgstr ""
+msgstr "Profiles|Город, Ñтрана"
msgid "Profiles|Clear status"
-msgstr ""
+msgstr "ОчиÑтить ÑтатуÑ"
msgid "Profiles|Click on icon to activate signin with one of the following services"
msgstr ""
msgid "Profiles|Commit email"
-msgstr ""
+msgstr "Email коммита"
msgid "Profiles|Connect"
msgstr ""
@@ -10068,7 +11818,7 @@ msgid "Profiles|Current path: %{path}"
msgstr "Текущий путь: %{path}"
msgid "Profiles|Current status"
-msgstr ""
+msgstr "Текущий ÑтатуÑ"
msgid "Profiles|Default notification email"
msgstr ""
@@ -10092,28 +11842,31 @@ msgid "Profiles|Do not show on profile"
msgstr ""
msgid "Profiles|Don't display activity-related personal information on your profiles"
-msgstr ""
+msgstr "Ðе отображать информацию о перÑональной активноÑти, в вашем профиле"
msgid "Profiles|Edit Profile"
-msgstr ""
+msgstr "Изменить профиль"
msgid "Profiles|Enter your name, so people you know can recognize you"
-msgstr ""
+msgstr "Введите ваше имÑ, чтобы люди, которых вы знаете, могли раÑпознать ваÑ"
msgid "Profiles|Feed token was successfully reset"
msgstr ""
msgid "Profiles|Full name"
+msgstr "Профили | Полное имÑ"
+
+msgid "Profiles|Impersonation"
msgstr ""
msgid "Profiles|Include private contributions on my profile"
-msgstr ""
+msgstr "Включить приватный вклад в мой профиль"
msgid "Profiles|Incoming email token was successfully reset"
msgstr ""
msgid "Profiles|Increase your account's security by enabling Two-Factor Authentication (2FA)"
-msgstr ""
+msgstr "ПовыÑьте безопаÑноÑÑ‚ÑŒ учётной запиÑи, включив двухфакторную аутентификацию (2FA)"
msgid "Profiles|Invalid password"
msgstr "Ðеверный пароль"
@@ -10122,52 +11875,55 @@ msgid "Profiles|Invalid username"
msgstr "Ðеверное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
msgid "Profiles|Key"
-msgstr ""
+msgstr "Ключ"
msgid "Profiles|Learn more"
-msgstr ""
+msgstr "Узнать больше"
msgid "Profiles|Location"
-msgstr ""
+msgstr "МеÑтораÑположение"
msgid "Profiles|Made a private contribution"
msgstr ""
msgid "Profiles|Main settings"
-msgstr ""
+msgstr "ОÑновные наÑтройки"
msgid "Profiles|No file chosen"
-msgstr ""
+msgstr "Файл не выбран"
msgid "Profiles|Notification email"
msgstr ""
msgid "Profiles|Organization"
-msgstr ""
+msgstr "ОрганизациÑ"
msgid "Profiles|Path"
msgstr "Путь"
+msgid "Profiles|Personal Access"
+msgstr "Личный доÑтуп"
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
msgid "Profiles|Primary email"
-msgstr ""
+msgstr "ОÑновной email"
msgid "Profiles|Private contributions"
-msgstr ""
+msgstr "Приватный вклад"
msgid "Profiles|Profile was successfully updated"
-msgstr ""
+msgstr "Профиль уÑпешно обновлен"
msgid "Profiles|Public Avatar"
-msgstr ""
+msgstr "Публичный Ðватар"
msgid "Profiles|Public email"
-msgstr ""
+msgstr "Публичный email"
msgid "Profiles|Remove avatar"
-msgstr ""
+msgstr "Удалить аватар"
msgid "Profiles|Set new profile picture"
msgstr ""
@@ -10178,32 +11934,35 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
-msgid "Profiles|Tell us about yourself in fewer than 250 characters"
+msgid "Profiles|Static object token was successfully reset"
msgstr ""
+msgid "Profiles|Tell us about yourself in fewer than 250 characters"
+msgstr "РаÑÑкажите о Ñебе иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼ÐµÐ½ÐµÐµ 250 Ñимволов"
+
msgid "Profiles|The maximum file size allowed is 200KB."
-msgstr ""
+msgstr "МакÑимально допуÑтимый размер файла ÑоÑтавлÑет 200 Кб."
msgid "Profiles|This doesn't look like a public SSH key, are you sure you want to add it?"
msgstr "Это не выглÑдит как публичный SSH-ключ, вы уверены, что вы хотите добавить его?"
msgid "Profiles|This email will be displayed on your public profile"
-msgstr ""
+msgstr "Этот Ð°Ð´Ñ€ÐµÑ Ð±ÑƒÐ´ÐµÑ‚ отображатьÑÑ Ð² вашем публичном профиле"
msgid "Profiles|This email will be used for web based operations, such as edits and merges. %{commit_email_link_start}Learn more%{commit_email_link_end}"
-msgstr ""
+msgstr "Этот Ð°Ð´Ñ€ÐµÑ Ð±ÑƒÐ´ÐµÑ‚ иÑпользоватьÑÑ Ð´Ð»Ñ Ð²ÐµÐ±-операций, таких как редактирование и ÑлиÑние. %{commit_email_link_start}Узнайте больше%{commit_email_link_end}"
msgid "Profiles|This emoji and message will appear on your profile and throughout the interface."
-msgstr ""
+msgstr "Этот Ñмайл и Ñообщение поÑвÑÑ‚ÑÑ Ð² вашем профиле и во вÑем интерфейÑе."
msgid "Profiles|This information will appear on your profile"
-msgstr ""
+msgstr "Эта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ отображатьÑÑ Ð² вашем профиле"
msgid "Profiles|Time settings"
msgstr ""
msgid "Profiles|Two-Factor Authentication"
-msgstr ""
+msgstr "Ð”Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ"
msgid "Profiles|Type your %{confirmationValue} to confirm:"
msgstr "Введите значение %{confirmationValue} Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ:"
@@ -10212,19 +11971,19 @@ msgid "Profiles|Typically starts with \"ssh-ed25519 …\" or \"ssh-rsa …\""
msgstr ""
msgid "Profiles|Update profile settings"
-msgstr ""
+msgstr "Обновить наÑтройки профилÑ"
msgid "Profiles|Update username"
msgstr "Обновить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
msgid "Profiles|Upload new avatar"
-msgstr ""
+msgstr "Загрузить новый аватар"
msgid "Profiles|Use a private email - %{email}"
msgstr ""
msgid "Profiles|User ID"
-msgstr ""
+msgstr "ID пользователÑ"
msgid "Profiles|Username change failed - %{message}"
msgstr "Ошибка Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ - %{message}"
@@ -10233,19 +11992,19 @@ msgid "Profiles|Username successfully changed"
msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÑпешно изменено"
msgid "Profiles|Using emojis in names seems fun, but please try to set a status message instead"
-msgstr ""
+msgstr "ИÑпользовать Ñмайлы в имени - веÑьма ÐºÑ€ÐµÐ°Ñ‚Ð¸Ð²Ð½Ð°Ñ Ð¼Ñ‹Ñль, но лучше попробуйте изменить ÑÑ‚Ð°Ñ‚ÑƒÑ Ð² профиле"
msgid "Profiles|What's your status?"
-msgstr ""
+msgstr "Как у Ð²Ð°Ñ Ð´ÐµÐ»Ð°?"
msgid "Profiles|Who you represent or work for"
-msgstr ""
+msgstr "Кого вы предÑтавлÑете или на кого работаете"
msgid "Profiles|You can change your avatar here"
-msgstr ""
+msgstr "Ð’Ñ‹ можете изменить Ñвой аватар здеÑÑŒ"
msgid "Profiles|You can change your avatar here or remove the current avatar to revert to %{gravatar_link}"
-msgstr ""
+msgstr "Ð’Ñ‹ можете изменить Ñвой аватар здеÑÑŒ или удалить текущий аватар, чтобы вернутьÑÑ Ðº %{gravatar_link}"
msgid "Profiles|You can set your current timezone here"
msgstr ""
@@ -10254,7 +12013,7 @@ msgid "Profiles|You can upload your avatar here"
msgstr ""
msgid "Profiles|You can upload your avatar here or change it at %{gravatar_link}"
-msgstr ""
+msgstr "Ð’Ñ‹ можете загрузить Ñвой аватар здеÑÑŒ или изменить его на %{gravatar_link}"
msgid "Profiles|You don't have access to delete this user."
msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав на удаление Ñтого пользователÑ."
@@ -10278,16 +12037,22 @@ msgid "Profiles|Your name was automatically set based on your %{provider_label}
msgstr ""
msgid "Profiles|Your status"
-msgstr ""
+msgstr "Ваш ÑтатуÑ"
msgid "Profiles|e.g. My MacBook key"
msgstr ""
-msgid "Profiles|username"
+msgid "Profiles|impersonation"
msgstr ""
+msgid "Profiles|personal access"
+msgstr "перÑональный"
+
+msgid "Profiles|username"
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
+
msgid "Profiles|website.com"
-msgstr ""
+msgstr "website.com"
msgid "Profiles|your account"
msgstr "ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
@@ -10305,7 +12070,7 @@ msgid "Project"
msgstr "Проект"
msgid "Project \"%{name}\" is no longer available. Select another project to continue."
-msgstr ""
+msgstr "Проект \"%{name}\" больше недоÑтупен. Чтобы продолжить, выберите другой проект."
msgid "Project %{project_repo} could not be found"
msgstr ""
@@ -10328,6 +12093,9 @@ msgstr "Проект '%{project_name}' уÑпешно обновлен."
msgid "Project Badges"
msgstr "Значки Проекта"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10337,6 +12105,9 @@ msgstr "ÐÐ´Ñ€ÐµÑ ÐŸÑ€Ð¾ÐµÐºÑ‚Ð°"
msgid "Project access must be granted explicitly to each user."
msgstr "ДоÑтуп к проекту должен предоÑтавлÑÑ‚ÑŒÑÑ Ñвно каждому пользователю."
+msgid "Project already created"
+msgstr "Проект уже Ñоздан"
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10350,7 +12121,7 @@ msgid "Project configuration, including services"
msgstr ""
msgid "Project description (optional)"
-msgstr ""
+msgstr "ОпиÑание проекта (необÑзательно)"
msgid "Project details"
msgstr "Детали проекта"
@@ -10359,7 +12130,7 @@ msgid "Project export could not be deleted."
msgstr "Ðевозможно удалить ÑкÑпорт проекта."
msgid "Project export enabled"
-msgstr ""
+msgstr "ЭкÑпорт проекта включен"
msgid "Project export has been deleted."
msgstr "ЭкÑпорт проекта удален."
@@ -10374,25 +12145,22 @@ msgid "Project has too many %{label_for_message} to search"
msgstr ""
msgid "Project members"
-msgstr ""
+msgstr "УчаÑтники проекта"
msgid "Project name"
-msgstr ""
+msgstr "Ð˜Ð¼Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°"
msgid "Project slug"
-msgstr ""
+msgstr "URL проекта"
msgid "Project uploads"
msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
-msgstr ""
-
-msgid "Project:"
-msgstr ""
+msgstr "При перемещении в группу уровень доÑтупа проекта будет изменен в ÑоответÑтвии Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð°Ð¼Ð¸ Ñтой группы."
msgid "Project: %{name}"
-msgstr ""
+msgstr "Проект: %{name}"
msgid "ProjectActivityRSS|Subscribe"
msgstr "ПодпиÑатьÑÑ"
@@ -10433,6 +12201,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10451,26 +12225,62 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
msgstr ""
msgid "ProjectSettings|Badges"
+msgstr "Значки"
+
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
msgstr ""
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
msgid "ProjectSettings|Customize your project badges."
-msgstr ""
+msgstr "ÐаÑтройте значки вашего проекта."
msgid "ProjectSettings|Every merge creates a merge commit"
msgstr ""
@@ -10488,7 +12298,7 @@ msgid "ProjectSettings|Fast-forward merges only"
msgstr ""
msgid "ProjectSettings|Learn more about badges."
-msgstr ""
+msgstr "Узнать больше о значках."
msgid "ProjectSettings|Merge checks"
msgstr ""
@@ -10637,10 +12447,58 @@ msgstr "К Ñожалению, по вашему запроÑу проекты Ð
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Эта функциональноÑÑ‚ÑŒ требует поддержки localStorage в вашем браузере"
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr "ПозволÑет вам Ñразу клонировать репозиторий. ПропуÑтите Ñтот пункт, еÑли вы планируете загрузить ÑущеÑтвующий репозиторий."
+
+msgid "ProjectsNew|Blank"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Blank project"
+msgstr "Ðовый проект"
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr "СвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором, чтобы включить параметры импорта вашего проекта."
+
+msgid "ProjectsNew|Create from template"
+msgstr "Создать из шаблона"
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr "Создание проекта и репозиториÑ."
+
+msgid "ProjectsNew|Description format"
+msgstr "Ðапишите неÑколько Ñлов про проект"
+
+msgid "ProjectsNew|Import"
+msgstr "Импорт"
+
+msgid "ProjectsNew|Import project"
+msgstr "Импортировать проект"
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr "Добавить README файл"
+
+msgid "ProjectsNew|No import options available"
+msgstr "Ðет доÑтупных опций импорта"
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr "ПожалуйÑта подождите, Ñта Ñтраница автоматичеÑки обновитÑÑ ÐºÐ¾Ð³Ð´Ð° будет готова."
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr "ОпиÑание проекта %{tag_start}(необÑзательно)%{tag_end}"
+
+msgid "ProjectsNew|Template"
+msgstr "Шаблон"
+
+msgid "ProjectsNew|Visibility Level"
+msgstr "Уровень доÑтупа"
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr "Хотите размеÑтить неÑколько взаимоÑвÑзанных проектов в одном отдельном меÑте? %{link_start}Создать группу.%{link_end}"
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10658,9 +12516,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10694,6 +12549,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr "ПользовательÑкие метрики требуют, чтобы Prometheus был уÑтановлен в клаÑтер Ñ Ð¾Ð±Ð»Ð°Ñтью дейÑÑ‚Ð²Ð¸Ñ Ñреды \"*\" ИЛИ наÑтроенной вручную, чтобы Prometheus был доÑтупен."
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10704,7 +12562,7 @@ msgid "PrometheusService|Finding custom metrics..."
msgstr ""
msgid "PrometheusService|Install Prometheus on clusters"
-msgstr ""
+msgstr "УÑтановить Prometheus на клаÑтеры"
msgid "PrometheusService|Manage clusters"
msgstr ""
@@ -10724,6 +12582,9 @@ msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Базовый Ð°Ð´Ñ€ÐµÑ Prometheus API, например http://prometheus.example.com/"
@@ -10748,6 +12609,12 @@ msgstr ""
msgid "Promote"
msgstr "ПовыÑить"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10766,6 +12633,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10796,6 +12666,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10871,6 +12744,9 @@ msgstr ""
msgid "Pull"
msgstr "Получить"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "Отправить"
@@ -10896,7 +12772,7 @@ msgid "Push project from command line"
msgstr ""
msgid "Push to create a project"
-msgstr ""
+msgstr "ИÑпользуйте push, чтобы Ñоздать проект"
msgid "PushRule|Committer restriction"
msgstr ""
@@ -10935,7 +12811,7 @@ msgid "PushoverService|Pushover makes it easy to get real-time notifications on
msgstr ""
msgid "PushoverService|See project %{project_full_name}"
-msgstr ""
+msgstr "ПоÑмотреть проект %{project_full_name}"
msgid "PushoverService|Total commits count: %{total_commits_count}"
msgstr ""
@@ -10950,7 +12826,7 @@ msgid "Quarters"
msgstr ""
msgid "Query"
-msgstr ""
+msgstr "ЗапроÑ"
msgid "Query is valid"
msgstr ""
@@ -10964,6 +12840,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "Подробнее"
@@ -10973,9 +12852,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10983,6 +12871,9 @@ msgid "Receive notifications about your own activity"
msgstr ""
msgid "Recent"
+msgstr "ПоÑледние"
+
+msgid "Recent Activity"
msgstr ""
msgid "Recent Project Activity"
@@ -11020,7 +12911,7 @@ msgid "Regenerate key"
msgstr ""
msgid "Regenerate recovery codes"
-msgstr ""
+msgstr "Обновить коды воÑÑтановлениÑ"
msgid "Regenerating the instance ID can break integration depending on the client you are using."
msgstr ""
@@ -11035,13 +12926,13 @@ msgid "Register / Sign In"
msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ / Вход"
msgid "Register Two-Factor Authenticator"
-msgstr ""
+msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð´Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ð¹ аутентификации"
msgid "Register U2F device"
msgstr ""
msgid "Register Universal Two-Factor (U2F) Device"
-msgstr ""
+msgstr "ЗарегиÑтрируйте универÑальное двухфакторное (U2F) уÑтройÑтво"
msgid "Register and see your runners for this group."
msgstr "ЗарегиÑтрируйте и проÑмотрите ваши обработчики заданий Ð´Ð»Ñ Ñтой группы."
@@ -11050,14 +12941,11 @@ msgid "Register and see your runners for this project."
msgstr ""
msgid "Register with two-factor app"
-msgstr ""
+msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¸ помощи приложениÑ"
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "РееÑÑ‚Ñ€"
-
msgid "Related Deployed Jobs"
msgstr "СвÑзанные Ð—Ð°Ð´Ð°Ð½Ð¸Ñ Ð Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ"
@@ -11080,9 +12968,12 @@ msgid "Related merge requests"
msgstr ""
msgid "Releases"
-msgstr ""
+msgstr "Релизы"
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
+msgstr "Релизы отмечают определенные точки в иÑтории разработки проекта, передают информацию о типе изменений и поÑтавлÑÑŽÑ‚ подготовленные, обычно Ñкомпилированные, верÑии программного обеÑпечениÑ, которые можно иÑпользовать где-то еще. Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñ€ÐµÐ»Ð¸Ð·Ñ‹ можно Ñоздать только через API."
+
+msgid "Remember me"
msgstr ""
msgid "Remind later"
@@ -11094,7 +12985,13 @@ msgstr ""
msgid "Remove"
msgstr "Удалить"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
+msgstr "Удалить Runner"
+
+msgid "Remove Zoom meeting"
msgstr ""
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
@@ -11118,6 +13015,9 @@ msgstr ""
msgid "Remove avatar"
msgstr "Удалить аватар"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11127,12 +13027,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11142,30 +13051,75 @@ msgstr "Удалить проект"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr "Ð’Ñе метки удалены."
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
+msgstr "Удаленные проекты не могут быть воÑÑтановлены!"
+
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
msgstr ""
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11182,7 +13136,7 @@ msgid "Removing license…"
msgstr ""
msgid "Removing the project will delete its repository and all related resources including issues, merge requests etc."
-msgstr ""
+msgstr "Удаление проекта удалит его репозиторий и вÑе ÑвÑзанные реÑурÑÑ‹, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¾Ð±ÑуждениÑ, запроÑÑ‹ на ÑлиÑние и Ñ‚. д."
msgid "Rename"
msgstr ""
@@ -11199,6 +13153,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11208,15 +13171,24 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
-msgid "Repo by URL"
+msgid "Reply..."
msgstr ""
+msgid "Repo by URL"
+msgstr "Репозиторий по URL"
+
msgid "Report abuse to admin"
msgstr ""
@@ -11280,6 +13252,9 @@ msgstr ""
msgid "Repository"
msgstr "Репозиторий"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11304,9 +13279,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11319,9 +13300,12 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
-msgid "Require all users in this group to setup Two-factor authentication"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
msgstr ""
+msgid "Require all users in this group to setup Two-factor authentication"
+msgstr "Требовать от вÑех пользователей в группе наÑтроить двух-факторную аутентификацию"
+
msgid "Require all users to accept Terms of Service and Privacy Policy when they access GitLab."
msgstr ""
@@ -11334,24 +13318,30 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Ðеобходимо подтверждений от %{names}."
+msgstr[1] "Ðеобходимо %{count} подтверждений от %{names}."
+msgstr[2] "Ðеобходимо %{count} подтверждений от %{names}."
+msgstr[3] "Ðеобходимо %{count} подтверждений от %{names}."
msgid "Requires approval."
msgid_plural "Requires %d more approvals."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Требует подтверждениÑ."
+msgstr[1] "Ðеобходимо %d подтверждений."
+msgstr[2] "Ðеобходимо %d подтверждений."
+msgstr[3] "Ðеобходимо %d подтверждений."
msgid "Resend confirmation email"
msgstr ""
msgid "Resend invite"
+msgstr "Отправить повторно"
+
+msgid "Resend it"
msgstr ""
msgid "Reset authorization key"
@@ -11369,10 +13359,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr "СброÑить ключ региÑтрации обработчиков заданий"
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11381,9 +13377,12 @@ msgstr ""
msgid "Resolve discussion"
msgstr "Закрыть диÑкуÑÑию"
-msgid "Resolved"
+msgid "Resolve thread"
msgstr ""
+msgid "Resolved"
+msgstr "Решено"
+
msgid "Resolved 1 discussion."
msgstr ""
@@ -11429,6 +13428,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr "Продолжить"
@@ -11496,11 +13498,14 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
msgid "Run housekeeping"
-msgstr ""
+msgstr "ЗапуÑтить очиÑтку"
msgid "Run tests against your code live using the Web Terminal"
msgstr ""
@@ -11521,7 +13526,7 @@ msgid "Runner runs jobs from assigned projects"
msgstr ""
msgid "Runner token"
-msgstr ""
+msgstr "Runner токен"
msgid "Runner was not updated."
msgstr ""
@@ -11556,7 +13561,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11566,7 +13571,7 @@ msgid "Running…"
msgstr ""
msgid "Runs a number of housekeeping tasks within the current repository, such as compressing file revisions and removing unreachable objects."
-msgstr ""
+msgstr "ЗапуÑкает Ñ€Ñд Ñлужебных задач в текущем репозитории, таких как Ñжатие верÑий файлов и удаление недоÑтупных объектов."
msgid "SAML SSO"
msgstr ""
@@ -11578,28 +13583,28 @@ msgid "SAML for %{group_name}"
msgstr ""
msgid "SSH Key"
-msgstr ""
+msgstr "SSH ключ"
msgid "SSH Keys"
msgstr "SSH-ключи"
msgid "SSH Keys Help"
-msgstr ""
+msgstr "Справка по ключам SSH"
msgid "SSH host keys"
msgstr ""
msgid "SSH keys allow you to establish a secure connection between your computer and GitLab."
-msgstr ""
+msgstr "SSH ключи позволÑÑŽÑ‚ уÑтановить безопаÑное Ñоединение между вашим компьютером и GitLab."
msgid "SSH public key"
-msgstr ""
+msgstr "Открытый ключ SSH"
msgid "SSL Verification"
msgstr ""
msgid "Saturday"
-msgstr ""
+msgstr "Суббота"
msgid "Save"
msgstr "Сохранить"
@@ -11631,6 +13636,9 @@ msgstr "Сохранить раÑпиÑание Ñборочной лини"
msgid "Save variables"
msgstr "Сохранить переменные"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11640,6 +13648,9 @@ msgstr "РаÑпиÑание новой Ñборочной линии"
msgid "Scheduled"
msgstr "Запланировано"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "РаÑпиÑаниÑ"
@@ -11661,15 +13672,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr "ДоÑтуп"
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "ПоиÑк"
@@ -11686,7 +13712,7 @@ msgid "Search files"
msgstr ""
msgid "Search for a LDAP group"
-msgstr ""
+msgstr "ПоиÑк LDAP группы"
msgid "Search for a group"
msgstr ""
@@ -11701,7 +13727,7 @@ msgid "Search forks"
msgstr ""
msgid "Search groups"
-msgstr ""
+msgstr "ПоиÑк групп"
msgid "Search merge requests"
msgstr ""
@@ -11757,9 +13783,98 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11772,6 +13887,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11787,24 +13905,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11832,6 +13974,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11859,6 +14004,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr "Выбрать формат архива"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11866,6 +14014,9 @@ msgid "Select a file from the left sidebar to begin editing. Afterwards, you'll
msgstr ""
msgid "Select a group to invite"
+msgstr "Выберите группу"
+
+msgid "Select a label"
msgstr ""
msgid "Select a namespace to fork the project"
@@ -11874,6 +14025,9 @@ msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11886,6 +14040,9 @@ msgstr ""
msgid "Select a timezone"
msgstr "Выбор временной зоны"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "Выбрать ÑущеÑтвующий клаÑтер Kubernetes или Ñоздать новый"
@@ -11893,9 +14050,18 @@ msgid "Select branch/tag"
msgstr "Выбрать ветку/тег"
msgid "Select group or project"
+msgstr "Выберите группу или проект"
+
+msgid "Select labels"
+msgstr "Выбрать метки"
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
msgstr ""
-msgid "Select members to invite"
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11907,6 +14073,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11922,14 +14091,20 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
-msgstr "Отправить email уведомление Разработчикам."
+msgid "Send a separate email notification to Developers."
+msgstr ""
msgid "Send confirmation email"
msgstr ""
@@ -11950,11 +14125,17 @@ msgid "Sep"
msgstr "Сент."
msgid "Separate topics with commas."
-msgstr ""
+msgstr "РазделÑйте теги запÑтыми."
msgid "September"
msgstr "СентÑбрь"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11982,6 +14163,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -12012,9 +14196,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -12033,11 +14229,14 @@ msgstr "ПродолжительноÑÑ‚ÑŒ ÑеÑÑии (в минутах)"
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
msgid "Set a number of approvals required, the approvers and other approval settings."
-msgstr ""
+msgstr "Задайте количеÑтво необходимых ÑоглаÑований, ÑоглаÑующих и другие параметры."
msgid "Set a password on your account to pull or push via %{protocol}."
msgstr "УÑтановите пароль в Ñвоем аккаунте, чтобы отправлÑÑ‚ÑŒ или получать код через %{protocol}."
@@ -12066,12 +14265,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr "ÐаÑтроить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñлектронной почте Ð´Ð»Ñ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾ злоупотреблениÑÑ…."
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr "Задайте Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в ÑиÑтему. Включите обÑзательную двухфакторную аутентификацию."
+
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
msgstr ""
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12081,16 +14292,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "ÐаÑтройка CI/CD"
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12103,11 +14320,14 @@ msgid "Set up new password"
msgstr ""
msgid "Set up your project to automatically push and/or pull changes to/from another repository. Branches, tags, and commits will be synced automatically."
-msgstr ""
+msgstr "ÐаÑтройте Ñвой проект, чтобы автоматичеÑки загружать и/или Ñкачивать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²/из другого репозиториÑ. Ветки, теги и коммиты будут ÑинхронизироватьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки."
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "уÑтановите пароль"
@@ -12121,18 +14341,24 @@ msgid "SetStatusModal|Edit status"
msgstr "Изменить ÑтатуÑ"
msgid "SetStatusModal|Remove status"
-msgstr ""
+msgstr "Удалить ÑтатуÑ"
msgid "SetStatusModal|Set a status"
-msgstr ""
+msgstr "Изменить ÑтатуÑ"
msgid "SetStatusModal|Set status"
-msgstr ""
+msgstr "Изменить ÑтатуÑ"
msgid "SetStatusModal|Sorry, we weren't able to set your status. Please try again later."
-msgstr ""
+msgstr "Извините, мы не Ñмогли изменить ваш ÑтатуÑ. ПожалуйÑта, попробуйте позже."
msgid "SetStatusModal|What's your status?"
+msgstr "Как у Ð²Ð°Ñ Ð´ÐµÐ»Ð°?"
+
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
msgstr ""
msgid "Sets the due date to %{due_date}."
@@ -12178,21 +14404,27 @@ msgid "Sherlock Transactions"
msgstr ""
msgid "Should you ever lose your phone or access to your one time password secret, each of these recovery codes can be used one time each to regain access to your account. Please save them in a safe place, or you %{b_start}will%{b_end} lose access to your account."
-msgstr ""
+msgstr "ЕÑли вы когда-нибудь потерÑете Ñвой телефон или доÑтуп к вашему одноразовому паролю, каждый из Ñтих кодов воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть иÑпользован один раз, чтобы воÑÑтановить доÑтуп к вашей учетной запиÑи. ПожалуйÑта, храните их в надежном меÑте, или вы %{b_start}можете%{b_end} потерÑÑ‚ÑŒ доÑтуп к вашему аккаунту."
msgid "Show all activity"
msgstr ""
msgid "Show archived projects"
-msgstr ""
+msgstr "Показать архивные проекты"
msgid "Show archived projects only"
-msgstr ""
+msgstr "Показать только архивные проекты"
msgid "Show command"
msgstr "Показать команду"
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
+msgstr "Показать только комментарии"
+
+msgid "Show commit description"
msgstr ""
msgid "Show complete raw log"
@@ -12202,7 +14434,7 @@ msgid "Show file browser"
msgstr ""
msgid "Show latest version"
-msgstr ""
+msgstr "Показать поÑледнюю верÑию"
msgid "Show parent pages"
msgstr "Показать родительÑкие Ñтраницы"
@@ -12220,6 +14452,18 @@ msgstr[1] "Показано %d ÑобытиÑ"
msgstr[2] "Показано %d Ñобытий"
msgstr[3] "Показано %d Ñобытий"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12248,6 +14492,9 @@ msgid "Sign in using smart card"
msgstr ""
msgid "Sign in via 2FA code"
+msgstr "Войти Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ 2FA"
+
+msgid "Sign in with Google"
msgstr ""
msgid "Sign in with Single Sign-On"
@@ -12262,6 +14509,9 @@ msgstr "Выйти"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12271,6 +14521,12 @@ msgstr "ÐžÐ³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð°"
msgid "Sign-up restrictions"
msgstr "ÐžÐ³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтрации"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12281,7 +14537,7 @@ msgid "Signed in"
msgstr ""
msgid "Signed in with %{authentication} authentication"
-msgstr ""
+msgstr "Вход Ñ %{authentication} аутентификацией"
msgid "Signing in using %{label} has been disabled"
msgstr ""
@@ -12295,6 +14551,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12313,6 +14572,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12323,32 +14597,38 @@ msgid "Smartcard authentication failed: client certificate header is missing."
msgstr ""
msgid "Snippet Contents"
-msgstr ""
+msgstr "Содержание Ñниппета"
msgid "Snippets"
-msgstr "Примеры кода"
+msgstr "Сниппеты"
msgid "SnippetsEmptyState|Explore public snippets"
-msgstr ""
+msgstr "ПроÑмотреть публичные Ñниппеты"
msgid "SnippetsEmptyState|New snippet"
-msgstr ""
+msgstr "Ðовый Ñниппет"
msgid "SnippetsEmptyState|No snippets found"
-msgstr ""
+msgstr "Сниппеты не найдены"
msgid "SnippetsEmptyState|Snippets are small pieces of code or notes that you want to keep."
-msgstr ""
+msgstr "Сниппеты - Ñто небольшие фрагменты кода или заметки, которые вы хотите Ñохранить."
msgid "SnippetsEmptyState|There are no snippets to show."
-msgstr ""
+msgstr "Ðет Ñниппетов Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ."
msgid "SnippetsEmptyState|They can be either public or private."
+msgstr "Они могут быть либо публичными, либо приватными."
+
+msgid "Snowplow"
msgstr ""
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12379,6 +14659,9 @@ msgstr "Что-то пошло не так при переключении кнÐ
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12388,6 +14671,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12421,6 +14710,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12472,6 +14764,9 @@ msgstr "Срок позже"
msgid "SortOptions|Due soon"
msgstr "Срок раньше"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "Приоритет метки"
@@ -12518,7 +14813,7 @@ msgid "SortOptions|Most popular"
msgstr "Ðаиболее популÑрный"
msgid "SortOptions|Most stars"
-msgstr ""
+msgstr "По рейтингу"
msgid "SortOptions|Name"
msgstr "ИмÑ"
@@ -12530,7 +14825,7 @@ msgid "SortOptions|Name, descending"
msgstr "ИмÑ, по убыванию"
msgid "SortOptions|Oldest created"
-msgstr "Старейшие из Ñозданных"
+msgstr "Давно Ñозданные"
msgid "SortOptions|Oldest joined"
msgstr "Старейшие из приÑоединившихÑÑ"
@@ -12541,8 +14836,11 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr "Старейшие из заходивших"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
-msgstr "Старейших из обновленных"
+msgstr "Давно обновленные"
msgid "SortOptions|Popularity"
msgstr "ПопулÑронÑÑ‚ÑŒ"
@@ -12556,6 +14854,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr "Ðедавно заходившие"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12608,10 +14912,10 @@ msgid "Specify the following URL during the Runner setup:"
msgstr "Укажите Ñледующий URL во Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñтройки Gitlab Runner:"
msgid "Squash commit message"
-msgstr ""
+msgstr "ОпиÑание Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ (squash) коммита"
msgid "Squash commits"
-msgstr ""
+msgstr "Объединить иÑторию коммитов"
msgid "Stage"
msgstr ""
@@ -12634,6 +14938,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12650,9 +14957,12 @@ msgid "Starred projects"
msgstr "Избранные проекты"
msgid "StarredProjectsEmptyState|Visit a project page and press on a star icon. Then, you can find the project on this page."
-msgstr ""
+msgstr "Откройте Ñтраницу проекта и нажмите на значок звезды. Затем вы Ñможете найти проект на Ñтой Ñтранице."
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
+msgstr "У Ð²Ð°Ñ ÐµÑ‰Ðµ нет проектов добавленных в избранное."
+
+msgid "Starrers"
msgstr ""
msgid "Stars"
@@ -12661,15 +14971,18 @@ msgstr ""
msgid "Start GitLab Ultimate trial"
msgstr ""
-msgid "Start Indexing"
-msgstr ""
-
msgid "Start Web Terminal"
msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "Ðачать %{new_merge_request} Ñ Ñтих изменений"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12679,29 +14992,38 @@ msgstr "Ðачать рецензию"
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr "Дата начала"
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
+msgstr "ЗапуÑтить GitLab Runner!"
+
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
-msgstr "ЗапуÑтить GitLab Runner!"
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
msgid "Start your trial"
msgstr ""
@@ -12727,12 +15049,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "СтатуÑ"
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12763,6 +15091,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "Подгруппы"
@@ -12778,6 +15118,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12802,6 +15145,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12814,9 +15163,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12877,6 +15223,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12970,11 +15319,17 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
-msgid "Sunday"
+msgid "Suggestions:"
msgstr ""
+msgid "Sunday"
+msgstr "ВоÑкреÑенье"
+
+msgid "Support"
+msgstr "Поддержка"
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
-msgstr ""
+msgstr "Поддержка пользовательÑких Ñертификатов отключена. ПопроÑите админиÑтратора вашей ÑиÑтемы включить его."
msgid "Support page URL"
msgstr ""
@@ -12992,7 +15347,7 @@ msgid "Sync information"
msgstr ""
msgid "System"
-msgstr ""
+msgstr "СиÑтема"
msgid "System Hooks"
msgstr "СиÑтемные Обработчики"
@@ -13004,7 +15359,7 @@ msgid "System Info"
msgstr "Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑиÑтеме"
msgid "System default (%{default})"
-msgstr ""
+msgstr "СиÑтемное (%{default})"
msgid "System header and footer"
msgstr ""
@@ -13022,14 +15377,20 @@ msgid "Table of Contents"
msgstr ""
msgid "Tag"
-msgstr ""
+msgstr "Тег"
msgid "Tag list:"
-msgstr ""
+msgstr "СпиÑок тегов:"
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Теги"
@@ -13183,6 +15544,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13199,9 +15563,12 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
-msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
+msgid "The API path was not specified."
msgstr ""
+msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
+msgstr "РаÑширенный глобальный поиÑк в GitLab - Ñто Ñерьезный инÑтрумент который ÑохранÑет ваше времÑ. ВмеÑто ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰ÐµÐ³Ð¾ кода и траты времени, вы можете иÑкать код внутри других команд, который поможет вам в вашем проекте."
+
msgid "The CSV export will be created in the background. Once finished, it will be sent to <strong>%{email}</strong> in an attachment."
msgstr ""
@@ -13223,9 +15590,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13250,6 +15614,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13269,7 +15639,7 @@ msgid "The fork relationship has been removed."
msgstr "СвÑзь Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ удалена."
msgid "The global settings require you to enable Two-Factor Authentication for your account."
-msgstr ""
+msgstr "Глобальные наÑтройки требуют, чтобы вы включили двухфакторную аутентификацию Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ учетной запиÑи."
msgid "The group and any internal projects can be viewed by any logged in user."
msgstr ""
@@ -13281,14 +15651,11 @@ msgid "The group and its projects can only be viewed by members."
msgstr ""
msgid "The group settings for %{group_links} require you to enable Two-Factor Authentication for your account. You can %{leave_group_links}."
-msgstr ""
+msgstr "ÐаÑтройки группы %{group_links} требуют, чтобы вы включили двухфакторную аутентификацию Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ учетной запиÑи. Ð’Ñ‹ можете %{leave_group_links}."
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "Импорт будет отключен поÑле %{timeout}. Ð”Ð»Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸ÐµÐ², которые импортируютÑÑ Ð·Ð° большее времÑ, иÑпользуйте комбинацию команд clone/push."
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13314,7 +15681,7 @@ msgid "The license was successfully uploaded and is now active. You can see the
msgstr ""
msgid "The maximum file size allowed is %{size}."
-msgstr ""
+msgstr "МакÑимальный размер файла - %{size}."
msgid "The maximum file size allowed is 200KB."
msgstr "МакÑимально допуÑтимый размер файла ÑоÑтавлÑет 200 Кб."
@@ -13403,8 +15770,8 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "Репозиторий должен быть доÑтупен через протоколы <code>http: //</code>, <code>https: //</code> или <code>git: //</code>."
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr ""
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr "Репозиторий должен быть доÑтупен через <code>http://</code>, <code>https://</code>, <code>ssh://</code> или <code>git://</code>."
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "Этап обзора показывает Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа ÑлиÑÐ½Ð¸Ñ Ð´Ð¾ его выполнениÑ. Данные будут автоматичеÑки добавлены поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾ запроÑа на ÑлиÑние."
@@ -13416,21 +15783,21 @@ msgid "The schedule time must be in the future!"
msgstr ""
msgid "The snippet can be accessed without any authentication."
-msgstr ""
+msgstr "ДоÑтуп к Ñниппету можно получить без какой-либо аутентификации."
msgid "The snippet is visible only to me."
-msgstr ""
+msgstr "Сниппет виден только мне."
msgid "The snippet is visible only to project members."
-msgstr ""
+msgstr "Сниппет виден только учаÑтникам проекта."
msgid "The snippet is visible to any logged in user."
-msgstr ""
+msgstr "Сниппет виден любому пользователю, вошедшему в ÑиÑтему."
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "Этап поÑтановки показывает Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ ÑлиÑнием \"MR\" и развертыванием кода в производÑтвенной Ñреде. Данные будут автоматичеÑки добавлены поÑле Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð² производÑтве первый раз."
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13439,7 +15806,7 @@ msgstr "Этап теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ времÑ, коÑ
msgid "The time taken by each data entry gathered by that stage."
msgstr "ВремÑ, затраченное каждым Ñлементом, Ñобранным на Ñтом Ñтапе."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13463,26 +15830,26 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr "Среднее значение в Ñ€Ñду. Пример: между 3, 5, 9, Ñреднее 5, между 3, 5, 7, 8, Ñреднее (5+7)/2 = 6."
msgid "There are no GPG keys associated with this account."
-msgstr ""
+msgstr "Ðет GPG ключей, ÑвÑзанных Ñ Ñтой учетной запиÑью."
msgid "There are no GPG keys with access to your account."
-msgstr ""
+msgstr "Ðет GPG ключей Ñ Ð´Ð¾Ñтупом к вашей учетной запиÑи."
msgid "There are no SSH keys associated with this account."
-msgstr ""
+msgstr "Ðет SSH ключей, ÑвÑзанных Ñ Ñтой учетной запиÑью."
msgid "There are no SSH keys with access to your account."
-msgstr ""
+msgstr "Ðет SSH ключей Ñ Ð´Ð¾Ñтупом к вашей учетной запиÑи."
msgid "There are no archived projects yet"
-msgstr ""
+msgstr "Ðрхивных проектов пока нет"
msgid "There are no charts configured for this page"
msgstr ""
@@ -13499,9 +15866,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "Ðет обÑуждений, которые можно показать"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13523,6 +15896,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13532,18 +15908,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13568,6 +15947,9 @@ msgstr "Произошла ошибка при Ñохранении наÑтро
msgid "There was an error subscribing to this label."
msgstr "Произошла ошибка подпиÑки на Ñту метку."
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13605,7 +15987,7 @@ msgid "This GitLab instance does not provide any shared Runners yet. Instance ad
msgstr "Этот ÑкземплÑÑ€ GitLab пока не предоÑтавлÑет никаких общих обработчиков заданий. ÐдминиÑтраторы ÑкземплÑров могут региÑтрировать общие обработчики заданий в Ñекции админиÑтрированиÑ."
msgid "This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention."
-msgstr ""
+msgstr "Это дейÑтвие может привеÑти к потере данных. Чтобы предотвратить Ñлучайные дейÑтвиÑ, мы проÑим Ð’Ð°Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚ÑŒ Ваше намерение."
msgid "This also resolves the discussion"
msgstr ""
@@ -13625,10 +16007,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13671,11 +16053,17 @@ msgid "This directory"
msgstr "Этот каталог"
msgid "This domain is not verified. You will need to verify ownership before access is enabled."
-msgstr ""
+msgstr "Этот домен не подтвержден. Вам нужно будет проверить владение, прежде чем доÑтуп будет включен."
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr "Эта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ð² разработке. ПожалуйÑта отключите флаг функции \"job_log_json\""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13685,12 +16073,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr "Эта группа пока не Ñодержит групповых обработчики заданий."
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "Это конфиденциальное обÑуждение."
@@ -13698,10 +16089,10 @@ msgid "This is a delayed job to run in %{remainingTime}"
msgstr ""
msgid "This is a list of devices that have logged into your account. Revoke any sessions that you do not recognize."
-msgstr ""
+msgstr "Это ÑпиÑок уÑтройÑтв, c которых вошли в вашу учетную запиÑÑŒ. Отмените вÑе ÑеанÑÑ‹, которые вы не раÑпознаете."
msgid "This is a security log of important events involving your account."
-msgstr ""
+msgstr "Это журнал безопаÑноÑти важных Ñобытий, ÑвÑзанных Ñ Ð²Ð°ÑˆÐµÐ¹ учетной запиÑью."
msgid "This is the author's first Merge Request to this project."
msgstr "Это первый Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние от автора в Ñтот проект."
@@ -13712,15 +16103,15 @@ msgstr ""
msgid "This is your current session"
msgstr ""
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "Это обÑуждение ÑвлÑетÑÑ ÐºÐ¾Ð½Ñ„Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¼"
msgid "This issue is locked."
msgstr "ОбÑуждение заблокировано."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "Это задание завиÑит от того как пользователь инициирует Ñвой процеÑÑ Ñборки. Чаще вÑего оно иÑпользуетÑÑ Ð´Ð»Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° на продуктивных Ñредах"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "Это задание завиÑит от рабочих заданий на верхнем уровне, которые должны завершитьÑÑ ÑƒÑпешно, чтобы Ñто задание было запущено"
@@ -13775,9 +16166,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr "Это фоновое задание требует ручных дейÑтвий"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Это означает, что вы не можете отправить код, пока не Ñоздадите пуÑтой репозиторий или не импортируете ÑущеÑтвующий."
@@ -13796,9 +16193,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13829,6 +16223,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13838,6 +16235,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13857,10 +16257,13 @@ msgid "Those emails automatically become issues (with the comments becoming the
msgstr ""
msgid "Thursday"
+msgstr "Четверг"
+
+msgid "Time"
msgstr ""
msgid "Time based: Yes"
-msgstr ""
+msgstr "Time based: Да"
msgid "Time before an issue gets scheduled"
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾ начала Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð² планировщик"
@@ -13877,6 +16280,15 @@ msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ñозданием запроÑа ÑлиÑÐ½Ð¸Ñ Ð
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13886,6 +16298,9 @@ msgstr ""
msgid "Time spent"
msgstr "Времени затрачено"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13895,14 +16310,23 @@ msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾ первого запроÑа на ÑлиÑние"
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
-msgstr "%s дней назад"
+msgstr "%s днÑ(ей) назад"
msgid "Timeago|%s days remaining"
msgstr "ОÑталоÑÑŒ %s дней"
@@ -14024,6 +16448,9 @@ msgstr "Только что"
msgid "Timeago|right now"
msgstr "ПрÑмо ÑейчаÑ"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -14051,14 +16478,17 @@ msgid "Title"
msgstr "Заголовок"
msgid "Title:"
-msgstr ""
+msgstr "Заголовок:"
msgid "Titles and Filenames"
-msgstr ""
+msgstr "Заголовки и имена файлов"
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr "Ð’ GitLab"
@@ -14069,11 +16499,14 @@ msgid "To add an SSH key you need to %{generate_link_start}generate one%{link_en
msgstr "Чтобы добавить SSH-ключ вам нужно %{generate_link_start}Ñгенерировать его%{link_end} или иÑпользовать %{existing_link_start}ÑущеÑтвующий ключ%{link_end}."
msgid "To add the entry manually, provide the following details to the application on your phone."
-msgstr ""
+msgstr "Чтобы добавить запиÑÑŒ вручную, предоÑтавьте Ñледующую информацию в приложении на Ñвоем телефоне."
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14101,12 +16534,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14120,7 +16547,7 @@ msgid "To link Sentry to GitLab, enter your Sentry URL and Auth Token."
msgstr ""
msgid "To move or copy an entire GitLab project from another GitLab installation to this one, navigate to the original project's settings page, generate an export file, and upload it here."
-msgstr ""
+msgstr "Чтобы перемеÑтить или Ñкопировать проект целиком из одного GitLab в другой, перейдите на Ñтраницу наÑтроек иÑходного проекта, Ñоздайте файл ÑкÑпорта и загрузите его здеÑÑŒ."
msgid "To only use CI/CD features for an external repository, choose <strong>CI/CD for external repo</strong>."
msgstr ""
@@ -14131,12 +16558,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14161,17 +16606,17 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
-msgstr "СегоднÑ"
+msgid "To-Do List"
+msgstr "СпиÑок задач"
-msgid "Todo"
-msgstr "Дела"
+msgid "To-do item successfully marked as done."
+msgstr "Задача отмечена как выполненнаÑ."
-msgid "Todo was successfully marked as done."
-msgstr ""
+msgid "Today"
+msgstr "СегоднÑ"
-msgid "Todos"
-msgstr ""
+msgid "Toggle Markdown preview"
+msgstr "Переключить предварительный проÑмотр Markdown"
msgid "Toggle Sidebar"
msgstr ""
@@ -14179,6 +16624,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14188,9 +16636,6 @@ msgstr "Переключить опиÑание коммита"
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14203,16 +16648,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "Переключить боковую панель"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14222,7 +16676,7 @@ msgid "Too many changes to show."
msgstr "Слишком много изменений Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ."
msgid "Topics"
-msgstr ""
+msgstr "Теги"
msgid "Total"
msgstr ""
@@ -14233,6 +16687,9 @@ msgstr "Общий вклад"
msgid "Total Time"
msgstr "Общее времÑ"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "Общее Ð²Ñ€ÐµÐ¼Ñ Ñ‚ÐµÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð¸ÐºÑаций/ÑлиÑний"
@@ -14251,6 +16708,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14287,14 +16750,11 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
msgid "Trending"
-msgstr ""
+msgstr "ПопулÑрные"
msgid "Trigger pipelines for mirror updates"
msgstr ""
@@ -14317,9 +16777,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14344,10 +16801,19 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
+msgstr "Вторник"
+
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
msgstr ""
msgid "Turn on Service Desk"
@@ -14357,25 +16823,25 @@ msgid "Twitter"
msgstr ""
msgid "Two-Factor Authentication"
-msgstr ""
+msgstr "Ð”Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ"
msgid "Two-factor Authentication"
-msgstr ""
+msgstr "Ð”Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ"
msgid "Two-factor Authentication Recovery codes"
-msgstr ""
+msgstr "Коды воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ð¹ аутентификации"
msgid "Two-factor Authentication has been disabled for this user"
-msgstr ""
+msgstr "Ð”Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð±Ñ‹Ð»Ð° отключена Ð´Ð»Ñ Ñтого пользователÑ"
msgid "Two-factor authentication"
-msgstr ""
+msgstr "Ð”Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ"
msgid "Type"
msgstr ""
msgid "U2F Devices (%{length})"
-msgstr ""
+msgstr "УÑтройÑтва U2F (%{length})"
msgid "U2F only works with HTTPS-enabled websites. Contact your administrator for more details."
msgstr ""
@@ -14383,6 +16849,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14395,6 +16873,9 @@ msgstr "Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ отличиÑ. %{button_try_agai
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14411,7 +16892,7 @@ msgid "Unable to update this issue at this time."
msgstr ""
msgid "Unarchive project"
-msgstr ""
+msgstr "ВоÑÑтановить проект"
msgid "Unarchiving the project will restore people's ability to make changes to it. The repository can be committed to, and issues, comments and other entities can be created. <strong>Once active this project shows up in the search and on the dashboard.</strong>"
msgstr ""
@@ -14425,6 +16906,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr "Удалить"
+
+msgid "Uninstalling"
+msgstr "Удаление"
+
msgid "Unknown"
msgstr ""
@@ -14444,7 +16931,7 @@ msgid "Unlock"
msgstr "Разблокировать"
msgid "Unlock the discussion"
-msgstr ""
+msgstr "Разблокировать обÑуждение"
msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment."
msgstr ""
@@ -14452,12 +16939,24 @@ msgstr ""
msgid "Unlocked"
msgstr "Разблокировано"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "Переоткрыть диÑкуÑÑию"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14494,6 +16993,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "Ðеподтверждено"
@@ -14503,15 +17011,27 @@ msgstr "Ðктуальный"
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "Обновить"
-msgid "Update approvers"
+msgid "Update all"
+msgstr "Обновить вÑе"
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14522,7 +17042,7 @@ msgid "Update your group name, description, avatar, and visibility."
msgstr "Обновить наименование вашей группы, её опиÑание, аватар и видимоÑÑ‚ÑŒ."
msgid "Update your project name, topics, description and avatar."
-msgstr ""
+msgstr "Обновите название Ñвоего проекта, теги, опиÑание и логотип."
msgid "UpdateProject|Cannot rename project because it contains container registry tags!"
msgstr ""
@@ -14540,6 +17060,9 @@ msgid "Updated"
msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
+msgstr "Обновлено %{updated_at} %{updated_by}"
+
+msgid "Updated to"
msgstr ""
msgid "Updating"
@@ -14552,6 +17075,9 @@ msgid "Upgrade your plan"
msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
+msgstr "Обновите Вашу подпиÑку, чтобы активировать раÑширенный глобальный поиÑк."
+
+msgid "Upgrade your plan to activate Audit Events."
msgstr ""
msgid "Upgrade your plan to activate Contribution Analytics."
@@ -14603,7 +17129,7 @@ msgid "Uploading changes to terminal"
msgstr ""
msgid "Uploads"
-msgstr ""
+msgstr "Загрузки"
msgid "Upstream"
msgstr ""
@@ -14617,6 +17143,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "СтатиÑтика иÑпользованиÑ"
@@ -14678,10 +17207,10 @@ msgid "Use Service Desk to connect with your users (e.g. to offer customer suppo
msgstr ""
msgid "Use a hardware device to add the second factor of authentication."
-msgstr ""
+msgstr "ИÑпользуйте аппаратное уÑтройÑтво, чтобы добавить второй фактор аутентификации."
msgid "Use an one time password authenticator on your mobile device or computer to enable two-factor authentication (2FA)."
-msgstr ""
+msgstr "ИÑпользуйте одноразовый аутентификатор Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ð° вашем мобильном уÑтройÑтве или компьютере, чтобы включить двухфакторную аутентификацию (2FA)."
msgid "Use group milestones to manage issues from multiple projects in the same milestone."
msgstr ""
@@ -14690,7 +17219,7 @@ msgid "Use one line per URI"
msgstr ""
msgid "Use template"
-msgstr ""
+msgstr "ИÑпользовать шаблон"
msgid "Use the following registration token during setup:"
msgstr "ИÑпользуйте Ñледующий токен региÑтрации в процеÑÑе уÑтановки:"
@@ -14720,7 +17249,7 @@ msgid "User OAuth applications"
msgstr ""
msgid "User Settings"
-msgstr ""
+msgstr "ÐаÑтройки пользователÑ"
msgid "User and IP Rate Limits"
msgstr ""
@@ -14774,7 +17303,7 @@ msgid "UserOnboardingTour|Alright, that's it for Commits. Let's take a look at t
msgstr ""
msgid "UserOnboardingTour|Awesome! Now click on %{emphasisStart}Members%{emphasisEnd}."
-msgstr ""
+msgstr "ПотрÑÑающе! Теперь нажмите на %{emphasisStart}учаÑтников%{emphasisEnd}."
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}Compare%{emphasisEnd} buttons to compare a branch to master."
msgstr ""
@@ -14785,6 +17314,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14797,6 +17329,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14804,7 +17339,7 @@ msgid "UserOnboardingTour|Here you can compare the changes of this branch to ano
msgstr ""
msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Choose a way to create a project and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
-msgstr ""
+msgstr "ЗдеÑÑŒ вы можете Ñоздать проект Ñ Ð½ÑƒÐ»Ñ, начать Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° или импортировать репозиторий Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… платформ. Что бы вы ни выбрали, мы покажем вам веÑÑŒ процеÑÑ.%{lineBreak}%{lineBreak}Выберите ÑпоÑоб ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° и нажмите %{emphasisStart}Создать проект%{emphasisEnd} чтобы перейти к Ñледующему шагу."
msgid "UserOnboardingTour|Here you can see the breakdown of the pipelines: its stages and jobs in each of the stages and their status.%{lineBreak}%{lineBreak}Our CI/CD pipelines are quite complex, most of our users have fewer and simpler pipelines."
msgstr ""
@@ -14813,7 +17348,7 @@ msgid "UserOnboardingTour|Here you can see the current members of the project (j
msgstr ""
msgid "UserOnboardingTour|Here you can see what changes were made with this commit, on what branch and if there's a related merge request. The status of the pipeline will also show up if CI/CD is set up.%{lineBreak}%{lineBreak}You can also comment on the lines of code that were changed and start a discussion with your colleagues!"
-msgstr ""
+msgstr "ЗдеÑÑŒ вы можете увидеть какие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñодержит Ñтот коммит, в какой ветки и еÑÑ‚ÑŒ ли ÑвÑзанные Ñ Ð½Ð¸Ð¼ запроÑÑ‹ на ÑлиÑние. Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñборки также будет отображатьÑÑ, еÑли уÑтановлены CI / CD. %{lineBreak}%{lineBreak} Ð’Ñ‹ также можете прокомментировать Ñтроки кода, которые были изменены, и начать обÑуждение Ñо Ñвоими коллегами!"
msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}%{projectName}%{emphasisEnd} project. They're split into Active and Stale.%{lineBreak}%{lineBreak}From here, you can create a new merge request, from a branch or compare the branch to any other branch in the project. By default, it will compare it to the master branch."
msgstr ""
@@ -14858,9 +17393,9 @@ msgid "UserOnboardingTour|Sweet! Your project was created is is ready to be used
msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
-msgstr ""
+msgstr "ВзглÑните. Вот отличное меню Ð´Ð»Ñ Ð±Ñ‹Ñтрого ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡, запроÑов на ÑлиÑние, Ñниппетов, проектов и групп. Ðажмите на него и выберите «Ðовый проект» в разделе «GitLab», чтобы начать."
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14872,7 +17407,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14887,10 +17422,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14912,16 +17447,16 @@ msgid "UserProfile|Groups"
msgstr "Группы"
msgid "UserProfile|Groups are the best way to manage projects and members."
-msgstr ""
+msgstr "Группы - лучший ÑпоÑоб управлÑÑ‚ÑŒ проектами и учаÑтниками."
msgid "UserProfile|Join or create a group to start contributing by commenting on issues or submitting merge requests!"
-msgstr ""
+msgstr "ПриÑоединÑйтеÑÑŒ или Ñоздайте группу, чтобы начать вноÑить вклад, ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð¸Ñ€ÑƒÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹ или отправлÑÑ Ð·Ð°Ð¿Ñ€Ð¾ÑÑ‹ на ÑлиÑние!"
msgid "UserProfile|Most Recent Activity"
msgstr "ÐедавнÑÑ ÐктивноÑÑ‚ÑŒ"
msgid "UserProfile|No snippets found."
-msgstr ""
+msgstr "Сниппеты не найдены."
msgid "UserProfile|Overview"
msgstr "Обзор"
@@ -14933,16 +17468,22 @@ msgid "UserProfile|Report abuse"
msgstr "Сообщить о нарушении"
msgid "UserProfile|Snippets"
-msgstr "Примеры кода"
+msgstr "Сниппеты"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
+msgstr "Сниппеты в GitLab могут быть чаÑтными, внутренними или общедоÑтупными."
+
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
msgstr ""
msgid "UserProfile|Subscribe"
msgstr "ПодпиÑатьÑÑ"
msgid "UserProfile|This user doesn't have any personal projects"
-msgstr ""
+msgstr "У Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ личных проектов"
msgid "UserProfile|This user has a private profile"
msgstr "У Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ñ‹Ð¹ профиль"
@@ -14950,6 +17491,9 @@ msgstr "У Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ñ‹Ð¹ профиль
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "Показать вÑе"
@@ -14960,16 +17504,16 @@ msgid "UserProfile|You can create a group for several dependent projects."
msgstr ""
msgid "UserProfile|You haven't created any personal projects."
-msgstr ""
+msgstr "Ð’Ñ‹ не Ñоздали ни одного личного проекта."
msgid "UserProfile|You haven't created any snippets."
-msgstr ""
+msgstr "Ð’Ñ‹ не Ñоздали ни одного Ñниппета."
msgid "UserProfile|Your projects can be available publicly, internally, or privately, at your choice."
msgstr ""
msgid "Username (optional)"
-msgstr ""
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (необÑзательно)"
msgid "Username is already taken."
msgstr ""
@@ -14977,6 +17521,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ email"
+
msgid "Users"
msgstr "Пользователи"
@@ -15055,6 +17602,9 @@ msgstr "Проверено"
msgid "Version"
msgstr "ВерÑиÑ"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15122,22 +17672,25 @@ msgid "Viewing commit"
msgstr ""
msgid "Visibility"
-msgstr ""
+msgstr "ВидимоÑÑ‚ÑŒ"
msgid "Visibility and access controls"
msgstr ""
msgid "Visibility level"
-msgstr ""
+msgstr "Уровень доÑтупа"
msgid "Visibility level:"
+msgstr "Уровень доÑтупа:"
+
+msgid "Visibility settings have been disabled by the administrator."
msgstr ""
msgid "Visibility, project features, permissions"
-msgstr ""
+msgstr "Уровень доÑтупа, доп. функции проекта, разрешениÑ"
msgid "Visibility:"
-msgstr ""
+msgstr "ДоÑтуп:"
msgid "VisibilityLevel|Internal"
msgstr "Ограниченный"
@@ -15154,16 +17707,28 @@ msgstr "Ðе определен"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15172,16 +17737,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15223,6 +17791,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "Хотите увидеть данные? ОбратитеÑÑŒ к админиÑтратору за доÑтупом."
@@ -15238,11 +17809,8 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
-msgstr ""
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
+msgstr "Мы Ñоздали короткое руководÑтво, которое поможет вам изучить оÑновы GitLab и узнать как он поможет вам лучше работать. Это займет вÑего пару минут. Ð’Ñ‹ будете руководÑтвоватьÑÑ Ð´Ð²ÑƒÐ¼Ñ Ñ‚Ð¸Ð¿Ð°Ð¼Ð¸ подÑказок, лучше вÑего узнаваемых по Ñвоему цвету."
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
msgstr ""
@@ -15278,7 +17846,7 @@ msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed o
msgstr "Веб-обработчики позволÑÑŽÑ‚ вам вызывать Ð°Ð´Ñ€ÐµÑ URL еÑли, например, отправлен новый код или Ñоздано новое обÑуждение. Ð’Ñ‹ можете наÑтроить веб-обработчики так, чтобы они реагировали на определённые ÑобытиÑ, такие как отправки кода, обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запроÑÑ‹ на ÑлиÑние. Групповые веб-обработчики применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑем проектам в группе и позволÑÑŽÑ‚ вам Ñтандартизовать функциональноÑÑ‚ÑŒ веб-обработчиков Ð´Ð»Ñ Ð²Ñей вашей группы."
msgid "Wednesday"
-msgstr ""
+msgstr "Среда"
msgid "Weeks"
msgstr ""
@@ -15295,6 +17863,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Когда процеÑÑ Runner заблокирован, он не может быть назначен другим проектам"
@@ -15311,12 +17882,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15326,6 +17903,9 @@ msgstr ""
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr "Wiki Ñтраницы"
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15398,15 +17978,9 @@ msgstr "документациÑ"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑылки на Ñтраницу (в том чиÑле на новую), проÑто введите %{link_example}"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "как наÑтроить"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "Совет: Ð’Ñ‹ можете указать полный путь Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ файла. Будут автоматичеÑки Ñозданы любые отÑутÑтвующие каталоги."
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð’Ð¸ÐºÐ¸ Страница"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "Ð’Ñ‹ уверены, что вы хотите удалить Ñту Ñтраницу?"
@@ -15422,20 +17996,17 @@ msgstr "Кто-то редактирует Ñтраницу одновремен
msgid "WikiPageConflictMessage|the page"
msgstr "Ñтраница"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "Создать %{page_title}"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "Обновить %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
-msgstr "URL Ð´Ð»Ñ Ñтраницы"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
-msgstr "Создать Страницу"
+msgid "Wiki|Create New Page"
+msgstr "Создать новую Ñтраницу"
msgid "Wiki|Create page"
msgstr "Создать Ñтраницу"
@@ -15455,6 +18026,9 @@ msgstr "ÐÐ¾Ð²Ð°Ñ Ñтраница"
msgid "Wiki|Page history"
msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñтраницы"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "ВерÑÐ¸Ñ Ñтраницы"
@@ -15485,6 +18059,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15521,9 +18098,12 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
-msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
msgstr ""
+msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ удалить %{group_name}, при Ñтом также удалитÑÑ Ð²Ñе подгруппы и проекты. Удаленные группы ÐЕ МОГУТ быть воÑÑтановлены! Ð’Ñ‹ ÐБСОЛЮТÐО уверены?"
+
msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Ð’Ñ‹ хотите удалить %{project_full_name}. Удаленный проект ÐЕ МОЖЕТ быть воÑÑтановлен! Ð’Ñ‹ ÐБСОЛЮТÐО уверены?"
@@ -15573,6 +18153,9 @@ msgid "You can easily contribute to them by requesting to join these groups."
msgstr "Ð’Ñ‹ можете легко внеÑти Ñвой вклад в них, попроÑив приÑоединить Ð²Ð°Ñ Ðº Ñтим группам."
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
+msgstr "Ð’Ñ‹ можете легко уÑтановить Runner в клаÑтер Kubernetes. %{link_to_help_page}"
+
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
msgstr ""
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
@@ -15599,7 +18182,10 @@ msgstr "Ð’Ñ‹ можете добавлÑÑ‚ÑŒ только файлы, когда
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15615,11 +18201,14 @@ msgid "You can set up jobs to only use Runners with specific tags. Separate tags
msgstr ""
msgid "You can specify notification level per group or per project."
-msgstr ""
+msgstr "Вы можете указать уровень уведомлений в каждой группе или в проекте."
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15641,9 +18230,6 @@ msgstr "Ð’Ñ‹ не можете запиÑывать на Ñтот Ñкземпл
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15657,7 +18243,7 @@ msgid "You do not have the correct permissions to override the settings from the
msgstr ""
msgid "You don't have any U2F devices registered yet."
-msgstr ""
+msgstr "У Ð²Ð°Ñ ÐµÑ‰Ðµ нет зарегиÑтрированных U2F уÑтройÑтв."
msgid "You don't have any active chat names."
msgstr ""
@@ -15671,6 +18257,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15695,6 +18293,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "Ð’Ñ‹ доÑтигли Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² вашем проекте"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15732,13 +18336,13 @@ msgid "You need to be logged in."
msgstr ""
msgid "You need to register a two-factor authentication app before you can set up a U2F device."
-msgstr ""
+msgstr "Вам необходимо зарегиÑтрировать приложение Ð´Ð»Ñ Ð´Ð²ÑƒÑ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ð¹ аутентификации, прежде чем вы Ñможете наÑтроить уÑтройÑтво U2F."
msgid "You need to specify both an Access Token and a Host URL."
msgstr ""
msgid "You need to upload a GitLab project export archive (ending in .gz)."
-msgstr ""
+msgstr "Вам необходимо загрузить ÑкÑпортированный архив проекта GitLab (заканчивающийÑÑ Ð½Ð° .gz)."
msgid "You need to upload a Google Takeout archive."
msgstr ""
@@ -15774,7 +18378,7 @@ msgid "You won't be able to pull or push project code via %{protocol} until you
msgstr "Ð’Ñ‹ не Ñможете получать и отправлÑÑ‚ÑŒ код в данный проект через %{protocol} пока не %{set_password_link} в вашей учетной запиÑи"
msgid "You won't be able to pull or push project code via SSH until you %{add_ssh_key_link} to your profile"
-msgstr "Ð’Ñ‹ не Ñможете получать и отправлÑÑ‚ÑŒ код проекта через SSH пока %{add_ssh_key_link} в ваш профиль."
+msgstr "Чтобы получать и отправлÑÑ‚ÑŒ код проекта через SSH вам нужно %{add_ssh_key_link} в ваш профиль"
msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile"
msgstr "Ð’Ñ‹ не Ñможете работать Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¾Ð¼ через SSH, пока не добавите в Ñвой профиль SSH ключ"
@@ -15785,6 +18389,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð²Ð°Ð¼ нужно иÑпользовать разные имена веток."
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15804,7 +18411,7 @@ msgid "You're receiving this email because of your account on %{host}. %{manage_
msgstr "Ð’Ñ‹ получили Ñто Ñлектронное пиÑьмо из Ñвоей учетной запиÑи %{host}. %{manage_notifications_link} &middot; %{help_link}"
msgid "You've already enabled two-factor authentication using one time password authenticators. In order to register a different device, you must first disable two-factor authentication."
-msgstr ""
+msgstr "Ð’Ñ‹ уже включили двухфакторную аутентификацию Ñ Ð¸Ñпользованием аутентификаторов Ñ Ð¾Ð´Ð½Ð¾Ñ€Ð°Ð·Ð¾Ð²Ñ‹Ð¼ паролем. Чтобы зарегиÑтрировать другое уÑтройÑтво, Ñначала необходимо отключить двухфакторную аутентификацию."
msgid "YouTube"
msgstr "YouTube"
@@ -15819,11 +18426,14 @@ msgid "Your Default Notification Email will be used for account notifications if
msgstr ""
msgid "Your GPG keys (%{count})"
-msgstr ""
+msgstr "Ваши GPG ключи (%{count})"
msgid "Your Groups"
msgstr "Ваши Группы"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15837,10 +18447,10 @@ msgid "Your Public Email will be displayed on your public profile."
msgstr ""
msgid "Your SSH keys (%{count})"
-msgstr ""
+msgstr "Ваши SSH ключи (%{count})"
-msgid "Your Todos"
-msgstr "Ваши дела"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15855,7 +18465,7 @@ msgid "Your access request to the %{source_type} has been withdrawn."
msgstr ""
msgid "Your account uses dedicated credentials for the \"%{group_name}\" group and can only be updated through SSO."
-msgstr ""
+msgstr "Ваш аккаунт иÑпользует Ñпециальные учетные данные Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ \"%{group_name}\" и может быть обновлен только через SSO."
msgid "Your applications (%{size})"
msgstr ""
@@ -15888,7 +18498,7 @@ msgid "Your deployment services will be broken, you will need to manually fix th
msgstr ""
msgid "Your device was successfully set up! Give it a name and register it with the GitLab server."
-msgstr ""
+msgstr "Ваше уÑтройÑтво было уÑпешно наÑтроено! Дайте ему Ð¸Ð¼Ñ Ð¸ зарегиÑтрируйте его на Ñервере GitLab."
msgid "Your groups"
msgstr "Ваши группы"
@@ -15911,6 +18521,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15923,12 +18536,21 @@ msgstr "Ваши проекты"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15942,6 +18564,9 @@ msgid "already shared with this group"
msgstr ""
msgid "among other things"
+msgstr "читать документацию"
+
+msgid "assign yourself"
msgstr ""
msgid "attach a new file"
@@ -15962,6 +18587,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15971,6 +18602,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16088,6 +18722,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16106,10 +18743,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16127,10 +18764,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr "ОпиÑание"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16151,36 +18788,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16207,6 +18821,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16268,6 +18885,9 @@ msgstr[3] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr "комментарий"
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16310,6 +18930,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr "Ñоздан"
+
msgid "customize"
msgstr ""
@@ -16326,22 +18949,18 @@ msgstr[3] "дней"
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
msgstr ""
+msgid "design"
+msgstr "дизайн"
+
msgid "detached"
msgstr ""
msgid "disabled"
msgstr "отключено"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "done"
msgstr ""
@@ -16352,16 +18971,28 @@ msgstr[1] "черновиков"
msgstr[2] "черновиков"
msgstr[3] "черновики"
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "включено"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16377,7 +19008,7 @@ msgid "expired on %{milestone_due_date}"
msgstr ""
msgid "expires on %{milestone_due_date}"
-msgstr ""
+msgstr "иÑтекает %{milestone_due_date}"
msgid "failed"
msgstr ""
@@ -16406,14 +19037,17 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr "помощь"
+
msgid "here"
msgstr ""
msgid "https://your-bitbucket-server"
-msgstr ""
+msgstr "https://ваш-bitbucket-server"
msgid "image diff"
-msgstr ""
+msgstr "Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð·Ð°"
msgid "import flow"
msgstr ""
@@ -16452,23 +19086,23 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
-msgstr ""
+msgstr "хранитÑÑ Ð½Ð° внешнем Ñервере"
msgid "it is stored in LFS"
msgstr ""
@@ -16491,15 +19125,24 @@ msgstr "поÑледнÑÑ Ð²ÐµÑ€ÑиÑ"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние"
@@ -16514,14 +19157,23 @@ msgid "missing"
msgstr ""
msgid "mrWidgetCommitsAdded|%{commitCount} and %{mergeCommitCount} will be added to %{targetBranch}."
-msgstr ""
+msgstr "%{commitCount} и %{mergeCommitCount} будут добавлены в %{targetBranch}."
msgid "mrWidgetCommitsAdded|%{commitCount} will be added to %{targetBranch}."
-msgstr ""
+msgstr "%{commitCount} будет(ут) добавлен(ы) в %{targetBranch}."
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16645,6 +19297,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16678,6 +19333,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "Разрешить конфликты"
@@ -16729,7 +19387,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16741,7 +19399,19 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
+msgstr "Этот проект архивирован, доÑтуп на запиÑÑŒ отключен"
+
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr "Чтобы ÑоглаÑовать Ñтот запроÑ, пожалуйÑта, введите ваш пароль. Этот проект требует Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»ÐµÐ¼."
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
msgstr ""
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
@@ -16753,11 +19423,14 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr "Ваш пароль"
+
msgid "mrWidget|branch does not exist."
msgstr ""
msgid "mrWidget|command line"
-msgstr "ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока"
+msgstr "командную Ñтроку"
msgid "mrWidget|into"
msgstr ""
@@ -16786,9 +19459,15 @@ msgstr "новый Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑлиÑние"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr "не найдено"
+
msgid "notification emails"
msgstr "email Ð´Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹"
@@ -16801,8 +19480,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "или"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16821,8 +19500,11 @@ msgstr[3] "владельцы"
msgid "password"
msgstr "пароль"
-msgid "personal access token"
-msgstr "токен Ð´Ð»Ñ Ð¿ÐµÑ€Ñонального доÑтупа"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16847,12 +19529,18 @@ msgstr[1] "проектов"
msgstr[2] "проектов"
msgstr[3] "проектов"
+msgid "project avatar"
+msgstr "логотип проекта"
+
msgid "quick actions"
-msgstr ""
+msgstr "быÑтрые дейÑтвиÑ"
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "оÑталоÑÑŒ"
@@ -16865,6 +19553,9 @@ msgstr "убрать плановый Ñрок"
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16876,22 +19567,22 @@ msgstr[2] ""
msgstr[3] ""
msgid "reset it."
-msgstr ""
+msgstr "ÑброÑить."
msgid "score"
-msgstr ""
+msgstr "Ñчёт"
msgid "security Reports|There was an error creating the merge request"
msgstr ""
msgid "severity|Critical"
-msgstr ""
+msgstr "КритичеÑкий"
msgid "severity|High"
msgstr ""
msgid "severity|Info"
-msgstr ""
+msgstr "ИнформациÑ"
msgid "severity|Low"
msgstr ""
@@ -16953,15 +19644,40 @@ msgstr ""
msgid "this document"
msgstr "Ñтот документ"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "чтобы помочь вашим учаÑтникам взаимодейÑтвовать Ñффективнее!"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
-msgid "updated"
+msgid "unicode domains should use IDNA encoding"
msgstr ""
+msgid "updated"
+msgstr "обновлено"
+
+msgid "updated %{time_ago}"
+msgstr "обновлено %{time_ago}"
+
+msgid "user avatar"
+msgstr "аватар пользователÑ"
+
msgid "username"
msgstr "Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
@@ -16971,6 +19687,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16986,12 +19705,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr "Добавить комментарий"
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/sk_SK/gitlab.po b/locale/sk_SK/gitlab.po
index dc6c5a07e96..ac90c490f1a 100644
--- a/locale/sk_SK/gitlab.po
+++ b/locale/sk_SK/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: sk\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:39\n"
+"PO-Revision-Date: 2019-09-24 10:14\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -44,12 +53,18 @@ msgstr[3] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -71,6 +86,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d commits"
msgstr ""
@@ -102,6 +124,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -144,6 +173,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
@@ -151,6 +187,13 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -175,13 +218,13 @@ msgstr[3] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -194,6 +237,9 @@ msgstr[3] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -220,12 +266,24 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -241,6 +299,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -256,10 +317,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -268,6 +329,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -337,6 +401,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -359,9 +426,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -371,6 +450,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -384,18 +466,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -519,9 +613,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -570,6 +661,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -606,6 +700,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -642,6 +739,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -651,6 +751,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -705,6 +808,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -723,6 +886,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -732,12 +898,22 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -750,12 +926,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -774,9 +965,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -786,6 +974,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -807,6 +998,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -825,12 +1019,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -843,7 +1046,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -858,9 +1061,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -876,7 +1097,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -912,6 +1142,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -960,6 +1193,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1057,6 +1314,12 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1066,9 +1329,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1087,9 +1356,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1123,6 +1389,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1135,6 +1407,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1147,13 +1422,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1168,7 +1437,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1228,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1270,6 +1542,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1315,10 +1590,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1339,6 +1614,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1387,6 +1668,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1405,6 +1689,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1429,6 +1716,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1471,6 +1761,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1520,7 +1813,7 @@ msgstr[3] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1529,12 +1822,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1571,6 +1879,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1613,6 +1930,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1640,6 +1960,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1676,6 +2002,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1694,6 +2023,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1704,7 +2036,11 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1715,6 +2051,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1737,12 +2076,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1800,6 +2148,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1821,6 +2172,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -2001,31 +2364,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -2040,13 +2403,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2064,6 +2424,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2076,35 +2439,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2267,6 +2646,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2378,7 +2760,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2387,6 +2772,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2414,9 +2805,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2426,6 +2823,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2453,12 +2853,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2495,6 +2904,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2516,6 +2931,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2558,6 +3024,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2594,9 +3063,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2687,6 +3153,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2696,6 +3165,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2741,15 +3213,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2771,6 +3252,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2807,6 +3291,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2816,12 +3303,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2870,6 +3372,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2879,6 +3384,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2918,12 +3426,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2954,12 +3468,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -3008,6 +3531,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3095,7 +3621,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3110,6 +3636,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3122,6 +3651,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3131,6 +3666,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3140,6 +3678,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3164,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3176,6 +3720,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3194,15 +3741,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3221,6 +3777,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3260,18 +3819,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3293,6 +3858,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3329,16 +3897,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3368,15 +3942,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3386,10 +3969,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3398,6 +3981,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3411,6 +3997,9 @@ msgstr[3] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3507,12 +4096,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3522,6 +4117,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3531,6 +4129,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3597,31 +4198,41 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3633,13 +4244,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3702,15 +4328,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3747,6 +4382,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3762,6 +4400,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3777,13 +4421,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3792,12 +4439,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3810,7 +4466,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3831,12 +4487,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3867,6 +4535,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3885,6 +4556,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3909,6 +4583,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3930,18 +4610,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3978,6 +4670,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3987,18 +4718,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -4020,6 +4784,35 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -4044,7 +4837,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4065,6 +4858,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4086,12 +4882,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4134,12 +4939,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4176,6 +4990,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4194,6 +5011,26 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4206,12 +5043,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4221,6 +5067,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4239,6 +5088,20 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4252,6 +5115,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4324,6 +5196,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4375,6 +5250,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4399,9 +5277,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4417,6 +5316,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4426,9 +5331,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4450,9 +5352,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4465,6 +5373,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4522,6 +5433,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4552,6 +5469,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4561,6 +5481,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4582,9 +5505,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4594,6 +5523,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4630,9 +5562,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4654,12 +5592,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4678,6 +5625,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4702,6 +5661,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4786,12 +5748,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4804,6 +5769,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4822,12 +5790,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4861,18 +5835,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4885,9 +5877,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5056,9 +6057,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5095,12 +6102,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5119,9 +6141,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5137,6 +6156,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5194,9 +6219,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5215,13 +6246,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5314,9 +6348,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5338,6 +6378,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5350,9 +6393,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5362,6 +6414,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5416,6 +6474,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5455,6 +6519,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5476,6 +6549,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5497,6 +6573,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5506,6 +6594,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5539,6 +6630,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5566,6 +6660,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5596,6 +6693,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5617,6 +6723,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5626,19 +6735,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5653,10 +6762,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5668,19 +6777,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5689,6 +6822,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5707,9 +6843,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5774,6 +6907,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5816,6 +6952,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5879,6 +7018,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5915,12 +7057,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5981,6 +7129,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5993,6 +7144,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6056,6 +7210,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6164,10 +7321,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6176,10 +7333,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6188,9 +7348,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6215,10 +7381,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6269,12 +7438,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6293,6 +7456,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6317,7 +7486,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6374,6 +7543,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6431,6 +7603,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6449,9 +7630,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6467,9 +7645,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6482,6 +7669,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6491,15 +7684,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6509,7 +7786,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6518,12 +7795,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6587,15 +7870,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6632,6 +7915,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6707,6 +7993,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6740,6 +8029,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6863,6 +8155,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6884,6 +8182,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6894,6 +8195,9 @@ msgstr[3] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6912,6 +8216,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6921,6 +8228,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6930,6 +8240,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6942,9 +8255,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6981,6 +8300,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -7044,6 +8366,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7149,7 +8477,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7203,13 +8531,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7254,6 +8585,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7273,6 +8607,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7315,6 +8652,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7363,16 +8703,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7417,9 +8763,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7435,7 +8799,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7453,6 +8820,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7630,6 +9003,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7654,10 +9030,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7745,6 +9124,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7766,15 +9148,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7793,7 +9184,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7811,9 +9202,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7832,6 +9220,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7841,6 +9232,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7871,76 +9265,102 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
+msgstr ""
+
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Approve"
+msgstr ""
+
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7952,6 +9372,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7962,12 +9385,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7980,13 +9409,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7998,6 +9427,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -8037,13 +9469,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8055,6 +9493,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8070,19 +9511,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8127,6 +9574,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8145,6 +9595,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8154,7 +9610,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8166,15 +9622,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8232,9 +9739,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8262,6 +9778,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8274,6 +9793,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8307,34 +9829,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8349,19 +9871,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8385,24 +9907,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8571,9 +10111,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8613,6 +10150,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8625,7 +10165,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8637,6 +10177,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8667,6 +10213,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8676,6 +10228,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8773,6 +10331,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8860,13 +10421,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8878,13 +10451,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8899,9 +10478,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8911,6 +10487,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8935,12 +10520,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8995,9 +10586,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -9007,6 +10604,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9019,6 +10619,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -9037,6 +10640,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -9046,6 +10652,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9061,6 +10670,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9157,6 +10769,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9175,9 +10790,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9193,6 +10820,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9224,6 +10854,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9248,6 +10884,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9257,6 +10899,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9266,6 +10911,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9347,6 +10998,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9371,6 +11028,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9407,13 +11076,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9485,9 +11154,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9515,12 +11202,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9587,7 +11283,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9611,12 +11307,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9665,15 +11370,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9704,6 +11424,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9716,18 +11439,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9758,6 +11475,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9776,6 +11496,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9863,6 +11586,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9872,7 +11598,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9899,6 +11625,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9956,6 +11685,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9992,6 +11727,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10106,6 +11856,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10148,6 +11901,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10178,6 +11934,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10283,6 +12042,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10328,6 +12093,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10337,6 +12105,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10388,9 +12159,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10433,6 +12201,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10451,13 +12225,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10466,6 +12270,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10637,10 +12447,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10658,9 +12516,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10694,6 +12549,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10724,6 +12582,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10748,6 +12609,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10766,6 +12633,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10796,6 +12666,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10871,6 +12744,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10964,6 +12840,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10973,9 +12852,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10985,6 +12873,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -11055,9 +12946,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11085,6 +12973,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11094,9 +12985,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11118,6 +13015,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11127,12 +13027,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11142,30 +13051,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11199,6 +13153,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11208,12 +13171,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11280,6 +13252,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11304,9 +13279,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11319,6 +13300,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11334,6 +13318,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11354,6 +13341,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11369,10 +13359,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11381,6 +13377,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11429,6 +13428,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11496,6 +13498,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11556,7 +13561,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11631,6 +13636,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11640,6 +13648,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11661,15 +13672,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11757,9 +13783,98 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11772,6 +13887,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11787,24 +13905,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11832,6 +13974,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11859,6 +14004,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11868,12 +14016,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11886,6 +14040,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11895,7 +14052,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11907,6 +14073,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11922,13 +14091,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11955,6 +14130,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11982,6 +14163,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -12012,9 +14196,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -12033,6 +14229,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12066,12 +14265,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12081,16 +14292,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12108,6 +14325,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12135,6 +14355,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12192,9 +14418,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12220,6 +14452,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12250,6 +14494,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12262,6 +14509,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12271,6 +14521,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12295,6 +14551,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12313,6 +14572,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12346,9 +14620,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12379,6 +14659,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12388,6 +14671,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12421,6 +14710,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12472,6 +14764,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12541,6 +14836,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12556,6 +14854,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12634,6 +14938,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12655,13 +14962,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12670,6 +14977,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12679,28 +14992,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12727,12 +15049,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12763,6 +15091,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12778,6 +15118,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12802,6 +15145,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12814,9 +15163,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12877,6 +15223,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12970,9 +15319,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -13030,6 +15385,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13183,6 +15544,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13199,6 +15563,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13223,9 +15590,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13250,6 +15614,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13286,9 +15656,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13403,7 +15770,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13430,7 +15797,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13439,7 +15806,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13463,7 +15830,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13499,9 +15866,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13523,6 +15896,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13532,18 +15908,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13568,6 +15947,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13625,10 +16007,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13676,6 +16058,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13685,12 +16073,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13712,13 +16103,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13775,9 +16166,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13796,9 +16193,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13829,6 +16223,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13838,6 +16235,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13859,6 +16259,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13877,6 +16280,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13886,6 +16298,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13895,12 +16310,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -14024,6 +16448,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -14059,6 +16486,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14074,6 +16504,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14101,12 +16534,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14131,12 +16558,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14161,16 +16606,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14179,6 +16624,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14188,9 +16636,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14203,16 +16648,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14233,6 +16687,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14251,6 +16708,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14287,9 +16750,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14317,9 +16777,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14344,12 +16801,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14383,6 +16849,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14395,6 +16873,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14425,6 +16906,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14452,12 +16939,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14494,6 +16993,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14503,15 +17011,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14542,6 +17062,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14554,6 +17077,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14617,6 +17143,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14785,6 +17314,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14797,6 +17329,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14860,7 +17395,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14872,7 +17407,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14887,10 +17422,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14938,6 +17473,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14950,6 +17491,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14977,6 +17521,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -15055,6 +17602,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15133,6 +17683,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15154,16 +17707,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15172,16 +17737,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15223,6 +17791,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15238,10 +17809,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15295,6 +17863,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15311,12 +17882,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15326,6 +17903,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15398,15 +17978,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15422,19 +17996,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15455,6 +18026,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15485,6 +18059,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15521,6 +18098,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15575,6 +18155,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15599,7 +18182,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15620,6 +18206,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15641,9 +18230,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15671,6 +18257,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15695,6 +18293,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15785,6 +18389,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15824,6 +18431,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15839,7 +18449,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15911,6 +18521,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15923,12 +18536,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15944,6 +18566,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15962,6 +18587,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15971,6 +18602,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16088,6 +18722,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16106,10 +18743,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16127,10 +18764,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16151,36 +18788,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16207,6 +18821,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16268,6 +18885,9 @@ msgstr[3] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16310,6 +18930,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16326,7 +18949,10 @@ msgstr[3] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16335,13 +18961,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "done"
msgstr ""
@@ -16352,16 +18971,28 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16406,6 +19037,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16452,21 +19086,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16491,15 +19125,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16522,6 +19165,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16645,6 +19297,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16678,6 +19333,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16729,7 +19387,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16741,9 +19399,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16753,6 +19423,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16786,9 +19459,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16801,7 +19480,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16821,7 +19500,10 @@ msgstr[3] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16847,12 +19529,18 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16865,6 +19553,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16953,15 +19644,40 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16971,6 +19687,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16986,12 +19705,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/sq_AL/gitlab.po b/locale/sq_AL/gitlab.po
index a626a9512e1..30ac40fcfd5 100644
--- a/locale/sq_AL/gitlab.po
+++ b/locale/sq_AL/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: sq\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:42\n"
+"PO-Revision-Date: 2019-09-24 10:07\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/sr_CS/gitlab.po b/locale/sr_CS/gitlab.po
index 6494d71524e..14a837f6957 100644
--- a/locale/sr_CS/gitlab.po
+++ b/locale/sr_CS/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: sr-CS\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:38\n"
+"PO-Revision-Date: 2019-09-24 10:13\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -42,12 +51,18 @@ msgstr[2] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -66,6 +81,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d commits"
msgstr ""
@@ -93,6 +114,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -129,12 +156,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -156,13 +195,13 @@ msgstr[2] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -174,6 +213,9 @@ msgstr[2] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -198,12 +240,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -219,6 +273,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -234,10 +291,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -246,6 +303,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -312,6 +372,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -333,9 +396,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -345,6 +420,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -357,18 +435,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -480,9 +570,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -531,6 +618,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -567,6 +657,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -603,6 +696,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -612,6 +708,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -666,6 +765,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -684,6 +843,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -693,12 +855,21 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -711,12 +882,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -735,9 +921,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -747,6 +930,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -768,6 +954,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -786,12 +975,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -804,7 +1002,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -819,9 +1017,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -837,7 +1053,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -873,6 +1098,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -921,6 +1149,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1017,6 +1269,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1026,9 +1284,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1047,9 +1311,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1083,6 +1344,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1095,6 +1362,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1107,13 +1377,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1128,7 +1392,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1188,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1230,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1275,10 +1545,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1299,6 +1569,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1347,6 +1623,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1365,6 +1644,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1389,6 +1671,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1431,6 +1716,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1476,7 +1764,7 @@ msgstr[2] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1485,12 +1773,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1527,6 +1830,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1569,6 +1881,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1596,6 +1911,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1632,6 +1953,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1650,6 +1974,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1660,7 +1987,10 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1671,6 +2001,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1692,12 +2025,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1755,6 +2097,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1776,6 +2121,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1956,31 +2313,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1995,13 +2352,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2019,6 +2373,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2031,33 +2388,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2220,6 +2595,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2331,7 +2709,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2340,6 +2721,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2367,9 +2754,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2379,6 +2772,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2406,12 +2802,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2448,6 +2853,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2469,6 +2880,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2511,6 +2973,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2547,9 +3012,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2640,6 +3102,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2649,6 +3114,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2694,15 +3162,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2724,6 +3201,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2760,6 +3240,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2769,12 +3252,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2823,6 +3321,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2832,6 +3333,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2871,12 +3375,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2907,12 +3417,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2961,6 +3480,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3048,7 +3570,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3063,6 +3585,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3075,6 +3600,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3084,6 +3615,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3093,6 +3627,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3117,6 +3654,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3129,6 +3669,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3147,15 +3690,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3174,6 +3726,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3213,18 +3768,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3246,6 +3807,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3282,16 +3846,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3321,15 +3891,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3339,10 +3918,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3351,6 +3930,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3363,6 +3945,9 @@ msgstr[2] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3459,12 +4044,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3474,6 +4065,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3483,6 +4077,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3549,31 +4146,40 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3585,13 +4191,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3654,15 +4275,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3699,6 +4329,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3714,6 +4347,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3729,13 +4368,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3744,12 +4386,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3762,7 +4413,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3783,12 +4434,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3819,6 +4482,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3837,6 +4503,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3861,6 +4530,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3882,18 +4557,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3930,6 +4617,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3939,18 +4665,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3972,6 +4731,33 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3996,7 +4782,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4017,6 +4803,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4038,12 +4827,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4086,12 +4884,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4128,6 +4935,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4146,6 +4956,24 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4158,12 +4986,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4173,6 +5010,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4191,6 +5031,18 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4203,6 +5055,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4275,6 +5136,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4326,6 +5190,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4350,9 +5217,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4368,6 +5256,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4377,9 +5271,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4401,9 +5292,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4416,6 +5313,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4473,6 +5373,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4503,6 +5409,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4512,6 +5421,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4533,9 +5445,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4545,6 +5463,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4581,9 +5502,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4605,12 +5532,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4629,6 +5565,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4653,6 +5601,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4737,12 +5688,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4755,6 +5709,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4773,12 +5730,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4812,18 +5775,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4836,9 +5817,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5007,9 +5997,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5046,12 +6042,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5070,9 +6081,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5088,6 +6096,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5145,9 +6159,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5166,13 +6186,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5265,9 +6288,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5289,6 +6318,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5301,9 +6333,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5313,6 +6354,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5367,6 +6414,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5406,6 +6459,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5427,6 +6489,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5448,6 +6513,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5457,6 +6534,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5490,6 +6570,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5517,6 +6600,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5547,6 +6633,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5568,6 +6663,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5577,19 +6675,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5604,10 +6702,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5619,19 +6717,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5640,6 +6762,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5658,9 +6783,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5724,6 +6846,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5766,6 +6891,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5829,6 +6957,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5865,12 +6996,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5931,6 +7068,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5943,6 +7083,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6006,6 +7149,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6114,10 +7260,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6126,10 +7272,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6138,9 +7287,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6165,10 +7320,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6219,12 +7377,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6243,6 +7395,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6267,7 +7425,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6324,6 +7482,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6381,6 +7542,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6399,9 +7569,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6417,9 +7584,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6432,6 +7608,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6441,15 +7623,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6459,7 +7725,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6468,12 +7734,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6537,15 +7809,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6582,6 +7854,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6657,6 +7932,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6690,6 +7968,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6813,6 +8094,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6834,6 +8121,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6843,6 +8133,9 @@ msgstr[2] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6861,6 +8154,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6870,6 +8166,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6879,6 +8178,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6891,9 +8193,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6930,6 +8238,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6993,6 +8304,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7098,7 +8415,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7152,13 +8469,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7203,6 +8523,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7221,6 +8544,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7263,6 +8589,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7311,16 +8640,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7365,9 +8700,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7383,7 +8736,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7401,6 +8757,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7578,6 +8940,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7602,10 +8967,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7692,6 +9060,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7713,15 +9084,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7740,7 +9120,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7758,9 +9138,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7779,6 +9156,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7788,6 +9168,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7818,76 +9201,100 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7899,6 +9306,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7908,12 +9318,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7926,13 +9342,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7944,6 +9360,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7983,13 +9402,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8001,6 +9426,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8016,19 +9444,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8073,6 +9507,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8091,6 +9528,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8100,7 +9543,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8112,15 +9555,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8178,9 +9672,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8208,6 +9711,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8220,6 +9726,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8253,34 +9762,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8295,19 +9804,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8331,24 +9840,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8517,9 +10044,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8559,6 +10083,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8571,7 +10098,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8583,6 +10110,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8613,6 +10146,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8622,6 +10161,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8718,6 +10263,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8805,13 +10353,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8823,13 +10383,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8844,9 +10410,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8856,6 +10419,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8880,12 +10452,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8940,9 +10518,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8952,6 +10536,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8964,6 +10551,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8982,6 +10572,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8991,6 +10584,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9006,6 +10602,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9102,6 +10701,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9120,9 +10722,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9138,6 +10752,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9168,6 +10785,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9192,6 +10815,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9201,6 +10830,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9210,6 +10842,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9291,6 +10929,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9315,6 +10959,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9351,13 +11007,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9429,9 +11085,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9459,12 +11133,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9531,7 +11214,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9555,12 +11238,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9609,15 +11301,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9648,6 +11355,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9660,18 +11370,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9702,6 +11406,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9720,6 +11427,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9807,6 +11517,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9816,7 +11529,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9843,6 +11556,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9900,6 +11616,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9936,6 +11658,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10050,6 +11787,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10092,6 +11832,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10122,6 +11865,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10227,6 +11973,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10272,6 +12024,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10281,6 +12036,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10332,9 +12090,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10377,6 +12132,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10395,13 +12156,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10410,6 +12201,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10581,10 +12378,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10602,9 +12447,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10638,6 +12480,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10668,6 +12513,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10692,6 +12540,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10710,6 +12564,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10740,6 +12597,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10815,6 +12675,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10908,6 +12771,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10917,9 +12783,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10929,6 +12804,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10998,9 +12876,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11028,6 +12903,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11037,9 +12915,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11061,6 +12945,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11070,12 +12957,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11085,30 +12981,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11142,6 +13083,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11151,12 +13101,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11223,6 +13182,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11247,9 +13209,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11262,6 +13230,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11277,6 +13248,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11295,6 +13269,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11310,10 +13287,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11322,6 +13305,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11370,6 +13356,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11436,6 +13425,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11496,7 +13488,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11571,6 +13563,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11580,6 +13575,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11601,15 +13599,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11697,9 +13710,87 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11712,6 +13803,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11727,24 +13821,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11772,6 +13890,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11799,6 +13920,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11808,12 +13932,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11826,6 +13956,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11835,7 +13968,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11847,6 +13989,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11862,13 +14007,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11895,6 +14046,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11922,6 +14079,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11952,9 +14112,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11973,6 +14145,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12006,12 +14181,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12021,16 +14208,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12048,6 +14241,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12075,6 +14271,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12132,9 +14334,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12159,6 +14367,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12189,6 +14409,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12201,6 +14424,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12210,6 +14436,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12234,6 +14466,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12252,6 +14487,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12285,9 +14535,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12318,6 +14574,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12327,6 +14586,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12360,6 +14625,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12411,6 +14679,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12480,6 +14751,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12495,6 +14769,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12573,6 +14853,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12594,13 +14877,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12609,6 +14892,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12618,28 +14907,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12666,12 +14964,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12702,6 +15006,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12717,6 +15033,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12741,6 +15060,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12753,9 +15078,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12816,6 +15138,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12909,9 +15234,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12969,6 +15300,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13122,6 +15459,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13137,6 +15477,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13161,9 +15504,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13188,6 +15528,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13224,9 +15570,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13341,7 +15684,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13368,7 +15711,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13377,7 +15720,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13401,7 +15744,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13437,9 +15780,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13461,6 +15810,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13470,18 +15822,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13506,6 +15861,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13563,10 +15921,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13614,6 +15972,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13623,12 +15987,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13650,13 +16017,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13713,9 +16080,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13734,9 +16107,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13767,6 +16137,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13776,6 +16149,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13797,6 +16173,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13815,6 +16194,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13824,6 +16212,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13833,12 +16224,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13962,6 +16362,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13995,6 +16398,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14010,6 +16416,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14037,12 +16446,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14067,12 +16470,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14097,16 +16518,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14115,6 +16536,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14124,9 +16548,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14139,16 +16560,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14169,6 +16599,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14187,6 +16620,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14223,9 +16662,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14253,9 +16689,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14280,12 +16713,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14319,6 +16761,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14331,6 +16785,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14361,6 +16818,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14388,12 +16851,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14430,6 +16905,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14439,15 +16923,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14478,6 +16974,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14490,6 +16989,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14553,6 +17055,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14721,6 +17226,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14733,6 +17241,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14796,7 +17307,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14808,7 +17319,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14823,10 +17334,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14874,6 +17385,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14886,6 +17403,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14913,6 +17433,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14991,6 +17514,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15069,6 +17595,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15090,16 +17619,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15108,16 +17649,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15159,6 +17703,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15174,10 +17721,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15231,6 +17775,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15246,12 +17793,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15261,6 +17814,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15333,15 +17889,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15357,19 +17907,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15390,6 +17937,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15420,6 +17970,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15456,6 +18009,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15510,6 +18066,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15534,7 +18093,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15555,6 +18117,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15576,9 +18141,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15606,6 +18168,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15630,6 +18204,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15720,6 +18300,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15759,6 +18342,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15774,7 +18360,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15846,6 +18432,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15858,12 +18447,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15879,6 +18477,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15897,6 +18498,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15906,6 +18513,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16017,6 +18627,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16035,10 +18648,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16056,10 +18669,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16080,34 +18693,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16134,6 +18726,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16194,6 +18789,9 @@ msgstr[2] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16236,6 +18834,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16251,7 +18852,10 @@ msgstr[2] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16260,12 +18864,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "done"
msgstr ""
@@ -16275,16 +18873,28 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16329,6 +18939,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16374,21 +18987,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16413,15 +19026,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16443,6 +19065,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16566,6 +19197,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16599,6 +19233,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16650,7 +19287,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16662,9 +19299,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16674,6 +19323,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16707,9 +19359,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16722,7 +19380,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16740,7 +19398,10 @@ msgstr[2] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16764,12 +19425,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16782,6 +19449,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16869,15 +19539,39 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16887,6 +19581,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16902,12 +19599,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/sr_SP/gitlab.po b/locale/sr_SP/gitlab.po
index 4bec374e321..ba836cc6b0b 100644
--- a/locale/sr_SP/gitlab.po
+++ b/locale/sr_SP/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: sr\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:38\n"
+"PO-Revision-Date: 2019-09-24 10:13\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -42,12 +51,18 @@ msgstr[2] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -66,6 +81,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d commits"
msgstr ""
@@ -93,6 +114,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -129,12 +156,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -156,13 +195,13 @@ msgstr[2] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -174,6 +213,9 @@ msgstr[2] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -198,12 +240,24 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -219,6 +273,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -234,10 +291,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -246,6 +303,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -312,6 +372,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -333,9 +396,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -345,6 +420,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -357,18 +435,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -480,9 +570,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -531,6 +618,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -567,6 +657,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -603,6 +696,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -612,6 +708,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -666,6 +765,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -684,6 +843,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -693,12 +855,21 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -711,12 +882,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -735,9 +921,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -747,6 +930,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -768,6 +954,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -786,12 +975,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -804,7 +1002,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -819,9 +1017,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -837,7 +1053,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -873,6 +1098,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -921,6 +1149,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -1017,6 +1269,12 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -1026,9 +1284,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1047,9 +1311,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1083,6 +1344,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1095,6 +1362,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1107,13 +1377,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1128,7 +1392,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1188,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1230,6 +1497,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1275,10 +1545,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1299,6 +1569,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1347,6 +1623,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1365,6 +1644,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1389,6 +1671,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1431,6 +1716,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1476,7 +1764,7 @@ msgstr[2] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1485,12 +1773,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1527,6 +1830,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1569,6 +1881,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1596,6 +1911,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1632,6 +1953,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1650,6 +1974,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1660,7 +1987,10 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1671,6 +2001,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1692,12 +2025,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1755,6 +2097,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1776,6 +2121,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1956,31 +2313,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1995,13 +2352,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -2019,6 +2373,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -2031,33 +2388,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2220,6 +2595,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2331,7 +2709,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2340,6 +2721,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2367,9 +2754,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2379,6 +2772,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2406,12 +2802,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2448,6 +2853,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2469,6 +2880,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2511,6 +2973,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2547,9 +3012,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2640,6 +3102,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2649,6 +3114,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2694,15 +3162,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2724,6 +3201,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2760,6 +3240,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2769,12 +3252,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2823,6 +3321,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2832,6 +3333,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2871,12 +3375,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2907,12 +3417,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2961,6 +3480,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3048,7 +3570,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3063,6 +3585,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3075,6 +3600,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3084,6 +3615,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3093,6 +3627,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3117,6 +3654,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3129,6 +3669,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3147,15 +3690,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3174,6 +3726,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3213,18 +3768,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3246,6 +3807,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3282,16 +3846,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3321,15 +3891,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3339,10 +3918,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3351,6 +3930,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3363,6 +3945,9 @@ msgstr[2] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3459,12 +4044,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3474,6 +4065,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3483,6 +4077,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3549,31 +4146,40 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3585,13 +4191,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3654,15 +4275,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3699,6 +4329,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3714,6 +4347,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3729,13 +4368,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3744,12 +4386,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3762,7 +4413,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3783,12 +4434,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3819,6 +4482,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3837,6 +4503,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3861,6 +4530,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3882,18 +4557,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3930,6 +4617,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3939,18 +4665,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3972,6 +4731,33 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3996,7 +4782,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -4017,6 +4803,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -4038,12 +4827,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4086,12 +4884,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4128,6 +4935,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4146,6 +4956,24 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4158,12 +4986,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4173,6 +5010,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4191,6 +5031,18 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4203,6 +5055,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4275,6 +5136,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4326,6 +5190,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4350,9 +5217,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4368,6 +5256,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4377,9 +5271,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4401,9 +5292,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4416,6 +5313,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4473,6 +5373,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4503,6 +5409,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4512,6 +5421,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4533,9 +5445,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4545,6 +5463,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4581,9 +5502,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4605,12 +5532,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4629,6 +5565,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4653,6 +5601,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4737,12 +5688,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4755,6 +5709,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4773,12 +5730,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4812,18 +5775,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4836,9 +5817,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -5007,9 +5997,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -5046,12 +6042,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5070,9 +6081,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5088,6 +6096,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5145,9 +6159,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5166,13 +6186,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5265,9 +6288,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5289,6 +6318,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5301,9 +6333,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5313,6 +6354,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5367,6 +6414,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5406,6 +6459,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5427,6 +6489,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5448,6 +6513,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5457,6 +6534,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5490,6 +6570,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5517,6 +6600,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5547,6 +6633,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5568,6 +6663,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5577,19 +6675,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5604,10 +6702,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5619,19 +6717,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5640,6 +6762,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5658,9 +6783,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5724,6 +6846,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5766,6 +6891,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5829,6 +6957,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5865,12 +6996,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5931,6 +7068,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5943,6 +7083,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -6006,6 +7149,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6114,10 +7260,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6126,10 +7272,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6138,9 +7287,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6165,10 +7320,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6219,12 +7377,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6243,6 +7395,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6267,7 +7425,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6324,6 +7482,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6381,6 +7542,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6399,9 +7569,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6417,9 +7584,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6432,6 +7608,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6441,15 +7623,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6459,7 +7725,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6468,12 +7734,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6537,15 +7809,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6582,6 +7854,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6657,6 +7932,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6690,6 +7968,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6813,6 +8094,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6834,6 +8121,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6843,6 +8133,9 @@ msgstr[2] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6861,6 +8154,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6870,6 +8166,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6879,6 +8178,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6891,9 +8193,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6930,6 +8238,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6993,6 +8304,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7098,7 +8415,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7152,13 +8469,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7203,6 +8523,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7221,6 +8544,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7263,6 +8589,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7311,16 +8640,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7365,9 +8700,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7383,7 +8736,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7401,6 +8757,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7578,6 +8940,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7602,10 +8967,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7692,6 +9060,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7713,15 +9084,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7740,7 +9120,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7758,9 +9138,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7779,6 +9156,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7788,6 +9168,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7818,76 +9201,100 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|URL"
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7899,6 +9306,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7908,12 +9318,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7926,13 +9342,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7944,6 +9360,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7983,13 +9402,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -8001,6 +9426,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -8016,19 +9444,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8073,6 +9507,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8091,6 +9528,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8100,7 +9543,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8112,15 +9555,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8178,9 +9672,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8208,6 +9711,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8220,6 +9726,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8253,34 +9762,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8295,19 +9804,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8331,24 +9840,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8517,9 +10044,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8559,6 +10083,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8571,7 +10098,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8583,6 +10110,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8613,6 +10146,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8622,6 +10161,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8718,6 +10263,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8805,13 +10353,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8823,13 +10383,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8844,9 +10410,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8856,6 +10419,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8880,12 +10452,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8940,9 +10518,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8952,6 +10536,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8964,6 +10551,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8982,6 +10572,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8991,6 +10584,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -9006,6 +10602,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9102,6 +10701,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9120,9 +10722,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9138,6 +10752,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9168,6 +10785,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9192,6 +10815,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9201,6 +10830,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9210,6 +10842,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9291,6 +10929,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9315,6 +10959,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9351,13 +11007,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9429,9 +11085,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9459,12 +11133,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9531,7 +11214,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9555,12 +11238,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9609,15 +11301,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9648,6 +11355,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9660,18 +11370,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9702,6 +11406,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9720,6 +11427,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9807,6 +11517,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9816,7 +11529,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9843,6 +11556,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9900,6 +11616,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9936,6 +11658,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -10050,6 +11787,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10092,6 +11832,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10122,6 +11865,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10227,6 +11973,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10272,6 +12024,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10281,6 +12036,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10332,9 +12090,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10377,6 +12132,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10395,13 +12156,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10410,6 +12201,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10581,10 +12378,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10602,9 +12447,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10638,6 +12480,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10668,6 +12513,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10692,6 +12540,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10710,6 +12564,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10740,6 +12597,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10815,6 +12675,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10908,6 +12771,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10917,9 +12783,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10929,6 +12804,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10998,9 +12876,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11028,6 +12903,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -11037,9 +12915,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11061,6 +12945,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11070,12 +12957,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11085,30 +12981,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11142,6 +13083,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11151,12 +13101,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11223,6 +13182,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11247,9 +13209,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11262,6 +13230,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11277,6 +13248,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11295,6 +13269,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11310,10 +13287,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11322,6 +13305,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11370,6 +13356,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11436,6 +13425,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11496,7 +13488,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11571,6 +13563,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11580,6 +13575,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11601,15 +13599,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11697,9 +13710,87 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11712,6 +13803,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11727,24 +13821,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11772,6 +13890,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11799,6 +13920,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11808,12 +13932,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11826,6 +13956,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11835,7 +13968,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11847,6 +13989,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11862,13 +14007,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11895,6 +14046,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11922,6 +14079,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11952,9 +14112,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11973,6 +14145,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -12006,12 +14181,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12021,16 +14208,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -12048,6 +14241,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12075,6 +14271,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12132,9 +14334,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12159,6 +14367,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12189,6 +14409,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12201,6 +14424,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12210,6 +14436,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12234,6 +14466,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12252,6 +14487,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12285,9 +14535,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12318,6 +14574,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12327,6 +14586,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12360,6 +14625,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12411,6 +14679,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12480,6 +14751,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12495,6 +14769,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12573,6 +14853,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12594,13 +14877,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12609,6 +14892,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12618,28 +14907,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12666,12 +14964,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12702,6 +15006,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12717,6 +15033,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12741,6 +15060,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12753,9 +15078,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12816,6 +15138,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12909,9 +15234,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12969,6 +15300,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13122,6 +15459,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13137,6 +15477,9 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13161,9 +15504,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13188,6 +15528,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13224,9 +15570,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13341,7 +15684,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13368,7 +15711,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13377,7 +15720,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13401,7 +15744,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13437,9 +15780,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13461,6 +15810,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13470,18 +15822,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13506,6 +15861,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13563,10 +15921,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13614,6 +15972,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13623,12 +15987,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13650,13 +16017,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13713,9 +16080,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13734,9 +16107,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13767,6 +16137,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13776,6 +16149,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13797,6 +16173,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13815,6 +16194,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13824,6 +16212,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13833,12 +16224,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13962,6 +16362,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13995,6 +16398,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -14010,6 +16416,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -14037,12 +16446,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14067,12 +16470,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14097,16 +16518,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14115,6 +16536,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14124,9 +16548,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14139,16 +16560,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14169,6 +16599,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14187,6 +16620,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14223,9 +16662,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14253,9 +16689,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14280,12 +16713,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14319,6 +16761,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14331,6 +16785,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14361,6 +16818,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14388,12 +16851,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14430,6 +16905,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14439,15 +16923,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14478,6 +16974,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14490,6 +16989,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14553,6 +17055,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14721,6 +17226,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14733,6 +17241,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14796,7 +17307,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14808,7 +17319,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14823,10 +17334,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14874,6 +17385,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14886,6 +17403,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14913,6 +17433,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14991,6 +17514,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15069,6 +17595,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15090,16 +17619,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15108,16 +17649,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15159,6 +17703,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15174,10 +17721,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15231,6 +17775,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15246,12 +17793,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15261,6 +17814,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15333,15 +17889,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15357,19 +17907,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15390,6 +17937,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15420,6 +17970,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15456,6 +18009,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15510,6 +18066,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15534,7 +18093,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15555,6 +18117,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15576,9 +18141,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15606,6 +18168,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15630,6 +18204,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15720,6 +18300,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15759,6 +18342,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15774,7 +18360,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15846,6 +18432,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15858,12 +18447,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15879,6 +18477,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15897,6 +18498,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15906,6 +18513,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -16017,6 +18627,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -16035,10 +18648,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -16056,10 +18669,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16080,34 +18693,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16134,6 +18726,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16194,6 +18789,9 @@ msgstr[2] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16236,6 +18834,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16251,7 +18852,10 @@ msgstr[2] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16260,12 +18864,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
msgid "done"
msgstr ""
@@ -16275,16 +18873,28 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16329,6 +18939,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16374,21 +18987,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16413,15 +19026,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16443,6 +19065,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16566,6 +19197,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16599,6 +19233,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16650,7 +19287,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16662,9 +19299,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16674,6 +19323,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16707,9 +19359,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16722,7 +19380,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16740,7 +19398,10 @@ msgstr[2] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16764,12 +19425,18 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16782,6 +19449,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16869,15 +19539,39 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16887,6 +19581,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16902,12 +19599,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/sv_SE/gitlab.po b/locale/sv_SE/gitlab.po
index 46cd8870db7..1f7ad2d35fb 100644
--- a/locale/sv_SE/gitlab.po
+++ b/locale/sv_SE/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: sv-SE\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:40\n"
+"PO-Revision-Date: 2019-09-24 10:15\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/sw_KE/gitlab.po b/locale/sw_KE/gitlab.po
index b647040f6da..9ba58b06425 100644
--- a/locale/sw_KE/gitlab.po
+++ b/locale/sw_KE/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: sw\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:39\n"
+"PO-Revision-Date: 2019-09-24 10:14\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,6 +30,12 @@ msgstr ""
msgid " and"
msgstr ""
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] ""
@@ -40,12 +49,18 @@ msgstr[1] ""
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr ""
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] ""
msgstr[1] ""
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr ""
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] ""
msgstr[1] ""
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] ""
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] ""
msgstr[1] ""
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] ""
@@ -137,13 +172,13 @@ msgstr[1] ""
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr ""
-msgid "%{authorsName}'s discussion"
+msgid "%{authorsName}'s thread"
msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr ""
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] ""
msgid "%{count} approvals from %{name}"
msgstr ""
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr ""
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr ""
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr ""
@@ -212,10 +265,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -224,6 +277,9 @@ msgstr ""
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr ""
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
msgstr[1] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] ""
@@ -307,9 +366,21 @@ msgstr ""
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr ""
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr ""
msgid "+ %{moreCount} more"
msgstr ""
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr ""
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr ""
@@ -573,6 +665,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr ""
@@ -645,6 +800,9 @@ msgstr ""
msgid "Active"
msgstr ""
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -654,12 +812,20 @@ msgstr ""
msgid "Add"
msgstr ""
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -672,12 +838,27 @@ msgstr ""
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -696,9 +877,6 @@ msgstr ""
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr ""
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -729,6 +910,9 @@ msgstr ""
msgid "Add image comment"
msgstr ""
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -747,12 +931,21 @@ msgstr ""
msgid "Add new directory"
msgstr ""
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,7 +958,7 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
+msgid "Add to tree"
msgstr ""
msgid "Add user(s) to the group:"
@@ -780,9 +973,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -798,7 +1009,16 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
msgstr ""
msgid "Admin Area"
@@ -834,6 +1054,9 @@ msgstr ""
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr ""
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] ""
msgstr[1] ""
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -986,9 +1239,15 @@ msgstr ""
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr ""
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr ""
-
msgid "All users"
msgstr ""
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr ""
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1055,6 +1317,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,7 +1347,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr ""
@@ -1235,10 +1500,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1259,6 +1524,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr ""
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr ""
@@ -1307,6 +1578,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1325,6 +1599,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr ""
@@ -1391,6 +1671,9 @@ msgstr ""
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1432,7 +1715,7 @@ msgstr[1] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1441,12 +1724,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr ""
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr ""
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr ""
@@ -1606,6 +1925,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr ""
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr ""
@@ -1627,6 +1951,9 @@ msgstr ""
msgid "Assignee(s)"
msgstr ""
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr ""
msgid "August"
msgstr ""
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1710,6 +2046,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1731,6 +2070,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,31 +2262,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1950,13 +2301,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1974,6 +2322,9 @@ msgstr ""
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr ""
msgid "Browse Files"
msgstr ""
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr ""
@@ -2284,7 +2658,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2293,6 +2670,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr ""
msgid "Change Weight"
msgstr ""
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2401,6 +2802,12 @@ msgstr ""
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2422,6 +2829,57 @@ msgstr ""
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr ""
@@ -2593,6 +3051,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2647,15 +3111,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2713,6 +3189,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr ""
msgid "Closed issues"
msgstr ""
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2860,12 +3366,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -3001,7 +3519,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -3046,6 +3576,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3127,6 +3675,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3235,16 +3795,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3274,15 +3840,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr ""
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr ""
@@ -3292,10 +3867,10 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
+msgid "Comment & resolve thread"
msgstr ""
-msgid "Comment & unresolve discussion"
+msgid "Comment & unresolve thread"
msgstr ""
msgid "Comment form position"
@@ -3304,6 +3879,9 @@ msgstr ""
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr ""
@@ -3315,6 +3893,9 @@ msgstr[1] ""
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,31 +4094,39 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3537,13 +4138,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr ""
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr ""
msgid "Create milestone"
msgstr ""
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3789,6 +4450,9 @@ msgstr ""
msgid "Create new..."
msgstr ""
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr ""
@@ -3813,6 +4477,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr ""
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr ""
@@ -3924,6 +4678,31 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr ""
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4226,6 +5076,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr ""
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4580,6 +5505,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4604,6 +5541,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr ""
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,13 +6126,16 @@ msgstr ""
msgid "Error saving label update."
msgstr ""
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
+msgid "Error updating status for all to-do items."
msgstr ""
-msgid "Error updating todo status."
+msgid "Error updating status of to-do item."
msgstr ""
msgid "Error uploading file"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr ""
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr ""
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5674,6 +6785,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr ""
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr ""
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,16 +8577,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7313,9 +8637,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr ""
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,7 +8673,10 @@ msgstr ""
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7349,6 +8694,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr ""
@@ -7687,7 +9056,7 @@ msgstr ""
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr ""
msgid "March"
msgstr ""
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,7 +9476,7 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
+msgid "Mark this issue as related to another issue"
msgstr ""
msgid "Markdown"
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr ""
@@ -8154,6 +9644,9 @@ msgstr ""
msgid "Merge request"
msgstr ""
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8166,6 +9659,9 @@ msgstr ""
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8199,34 +9695,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8241,19 +9737,19 @@ msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr ""
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr ""
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr ""
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr ""
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr ""
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr ""
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr ""
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9154,6 +10773,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,13 +10938,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,7 +11145,7 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr ""
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr ""
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr ""
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10066,6 +11796,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10171,6 +11904,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10216,6 +11955,9 @@ msgstr ""
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr ""
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr ""
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr ""
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,7 +13415,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11637,9 +13637,76 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,13 +13923,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr ""
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr ""
@@ -12015,6 +14187,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr ""
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12419,6 +14666,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12434,6 +14684,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr ""
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr ""
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr ""
-msgid "Start discussion"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12656,6 +14948,9 @@ msgstr ""
msgid "Submit feedback"
msgstr ""
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12680,6 +14975,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr ""
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13099,9 +15418,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr ""
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr ""
@@ -13588,13 +15931,13 @@ msgstr ""
msgid "This is your current session"
msgstr ""
-msgid "This issue is confidential"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
msgstr ""
-msgid "This issue is locked."
+msgid "This issue is confidential"
msgstr ""
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+msgid "This issue is locked."
msgstr ""
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr ""
@@ -13771,12 +16138,21 @@ msgstr ""
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr ""
@@ -13900,6 +16276,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13931,6 +16310,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,16 +16430,16 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
+msgid "To-Do List"
msgstr ""
-msgid "Todo"
+msgid "To-do item successfully marked as done."
msgstr ""
-msgid "Todo was successfully marked as done."
+msgid "Today"
msgstr ""
-msgid "Todos"
+msgid "Toggle Markdown preview"
msgstr ""
msgid "Toggle Sidebar"
@@ -14051,6 +16448,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,16 +16472,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14105,6 +16511,9 @@ msgstr ""
msgid "Total Time"
msgstr ""
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14216,12 +16625,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr ""
@@ -14375,15 +16835,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr ""
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14822,6 +17315,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14927,6 +17426,9 @@ msgstr ""
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -15026,16 +17531,28 @@ msgstr ""
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|Copy script to clipboard"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|Enable Visual Reviews"
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15268,15 +17800,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,19 +17818,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15325,6 +17848,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15355,6 +17881,9 @@ msgstr ""
msgid "Write a comment or drag your files here…"
msgstr ""
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr ""
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,7 +18271,7 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
+msgid "Your To-Do List"
msgstr ""
msgid "Your U2F device did not send a valid JSON response."
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16162,6 +18738,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16176,7 +18755,10 @@ msgstr[1] ""
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr ""
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr ""
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16628,9 +19259,15 @@ msgstr ""
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr ""
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr ""
@@ -16643,7 +19280,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16659,7 +19296,10 @@ msgstr[1] ""
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] ""
msgstr[1] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/tr_TR/gitlab.po b/locale/tr_TR/gitlab.po
index 4022fd33d1d..e2434b056a6 100644
--- a/locale/tr_TR/gitlab.po
+++ b/locale/tr_TR/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: tr\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:40\n"
+"PO-Revision-Date: 2019-09-24 10:15\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr " Lütfen oturum açın."
@@ -27,6 +30,12 @@ msgstr " Bunu %{grace_period_deadline} önce yapmanız gerekiyor."
msgid " and"
msgstr " ve"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " %d noktasında bozuldu"
@@ -40,12 +49,18 @@ msgstr[1] " %d noktalasında geliştirildi"
msgid " or "
msgstr " veya "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " veya <#epic id>"
msgid " or <#issue id>"
msgstr " veya <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d yorum"
@@ -61,6 +76,11 @@ msgid_plural "%d commits behind"
msgstr[0] "%d 'e bağlı işlem"
msgstr[1] "%d 'e bağlı işlem"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d commits"
msgstr "%d iÅŸlem"
@@ -84,6 +104,11 @@ msgid_plural "%d fixed test results"
msgstr[0] "%d sabit test sonucu"
msgstr[1] "%d sabit test sonucu"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d sorun"
@@ -114,11 +139,21 @@ msgid_plural "%d metrics"
msgstr[0] "%d metrik"
msgstr[1] "%d metrik"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d aşamalı değişiklik"
@@ -137,13 +172,13 @@ msgstr[1] "%s performans sorunlarını önlemek için ek işlem konulmuştur."
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} ve %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName} kişisinin tartışması"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} %{commit_timeago} yazdı"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -154,6 +189,9 @@ msgstr[1] "%{name} kiÅŸisinden %{count} onay gerekli"
msgid "%{count} approvals from %{name}"
msgstr "%{name} kiÅŸisinden %{count} onay"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "%{count} daha"
@@ -176,12 +214,24 @@ msgid_plural "%{count} pending comments"
msgstr[0] ""
msgstr[1] ""
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} Bu işlemi tekrar özenle seçmeyi deneyin."
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} Bu işlemi tekrar geri almaya çalışın."
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} silindi"
@@ -197,6 +247,9 @@ msgstr ""
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} kaldırılacak! Emin misiniz?"
@@ -212,18 +265,21 @@ msgstr "Bir %{group_level_name} grubunda %{level_name} izin verilmez."
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr ""
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "Rol izinleri hakkında %{link_start}daha fazla bilgi edinin%{link_end}"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Başladı"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} dizini %{lock_user_id} GitLab kullanıcısı tarafından kilitlendi"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -287,6 +343,9 @@ msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} Etiket"
msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Etiket"
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files}"
@@ -307,9 +366,21 @@ msgstr "%{unstaged} aşamasız ve %{staged} aşamalı değişiklik"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "Hangi bilgilerin GitLab Inc. ile paylaşıldığı hakkında %{usage_ping_link_start}daha fazla bilgi edinin%{usage_ping_link_end}."
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr "%{user_name} profil sayfası"
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -319,6 +390,9 @@ msgstr "'%{level}' geçerli bir görünürlük seviyesi değil"
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -330,18 +404,30 @@ msgstr ""
msgid "(No changes)"
msgstr "(DeÄŸiÅŸiklik yok)"
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr "(dış kaynak)"
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ %{count} daha"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} daha fazla"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr "+%{extraOptionCount} daha fazla"
@@ -441,9 +527,6 @@ msgstr ""
msgid "2FA"
msgstr "2FA"
-msgid "2FA enabled"
-msgstr "2FA etkin"
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -492,6 +575,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -528,6 +614,9 @@ msgstr "GitLab yerine CI/CD için Netlify kullanan, ancak diğer tüm GitLab öz
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "GitLab yerine CI/CD için Netlify kullanan, ancak diğer tüm GitLab özelliklerine sahip bir Jekyll sitesi."
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -564,6 +653,9 @@ msgstr "iOS Swift uygulamalarıyla kullanım için kullanıma-hazır bir şablon
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "İş izlemede test kapsamı çıktısını bulmak için kullanılacak düzenli bir ifade. Devre dışı bırakmak için boş bırakın"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "Bu dala yazma yetkisi olan kullanıcı bu seçeneği seçti"
@@ -573,6 +665,9 @@ msgstr "API Yardımı"
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr "GitLab Hakkında"
@@ -627,6 +722,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "Hesap"
@@ -645,6 +800,9 @@ msgstr "Servis Masasını Etkinleştir"
msgid "Active"
msgstr "Etkin"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr "Etkin Oturumlar"
@@ -654,12 +812,20 @@ msgstr "Etkinlik"
msgid "Add"
msgstr "Ekle"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Add CHANGELOG"
msgstr "CHANGELOG ekle"
msgid "Add CONTRIBUTING"
msgstr "CONTRIBUTING ekle"
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Grup web kancalarını ve GitLab Kurumsal Sürüm'ü ekleyin."
@@ -672,12 +838,27 @@ msgstr "Kubernetes kümesi ekle"
msgid "Add README"
msgstr "BENÄ°OKU ekle"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr "Madde iÅŸareti listesi ekle"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Buna %{noteable_name} genel bir yorum ekle."
@@ -696,9 +877,6 @@ msgstr "Tablo ekle"
msgid "Add a task list"
msgstr "Görev listesi ekle"
-msgid "Add a todo"
-msgstr "Bir yapılacak ekleyin"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Tüm e-posta iletişiminde görünecek ek metin ekleyin. %{character_limit} karakter sınırı"
@@ -708,6 +886,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr "Onaylayanları ekle"
@@ -729,6 +910,9 @@ msgstr "E-postalar için üstbilgi ve altbilgi ekleyin. Renk ayarları sadece uy
msgid "Add image comment"
msgstr "Resim yorumu ekle"
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr "EÄŸik metin ekle"
@@ -747,12 +931,21 @@ msgstr "Yeni uygulama ekle"
msgid "Add new directory"
msgstr "Yeni dizin ekle"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr "Harcanan zamanı ekleyin veya çıkarın"
msgid "Add reaction"
msgstr "Tepki ekle"
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -765,8 +958,8 @@ msgstr "Projeye ekle"
msgid "Add to review"
msgstr "Ä°ncelemeye ekle"
-msgid "Add todo"
-msgstr "Yapılacaklara Ekle"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "Gruba kullanıcı(lar) ekleyin:"
@@ -780,9 +973,27 @@ msgstr "Kullanıcı belirtilmedi."
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "Çok fazla kullanıcı belirtildi (sınır %{user_limit})"
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr "Tarihinde eklendi"
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "GitLab örneğinizde yeni uygulamalar eklemek devre dışı bırakıldı. İzin almak için lütfen GitLab yöneticinize başvurun"
@@ -798,8 +1009,17 @@ msgstr "Ekler"
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
-msgstr "Bir yapılacak ekler."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "Yönetici alanı"
@@ -834,6 +1054,9 @@ msgstr "İşleri durdurma başarısız oldu"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Bütün işleri durdurmak üzeresiniz. Bu işlem, çalışan tüm mevcut işleri durduracaktır."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -882,6 +1105,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "Yeni bir ortam değişkeni oluştururken, öntanımlı olarak korunacaktır."
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "2FA Devre dışı"
@@ -977,6 +1224,12 @@ msgid_plural "Alerts"
msgstr[0] "Uyarı"
msgstr[1] "Uyarı"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "Uyarılar"
@@ -986,9 +1239,15 @@ msgstr "Tümü"
msgid "All Members"
msgstr "Tüm Kullanıcılar"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "Tüm değişiklikler işlendi"
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -1007,9 +1266,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr "Tüm yapılacaklar yapıldı olarak işaretlendi."
-
msgid "All users"
msgstr "Tüm kullanıcılar"
@@ -1043,6 +1299,12 @@ msgstr ""
msgid "Allow requests to the local network from hooks and services."
msgstr "Yerel aÄŸa kanca ve servislerden gelen isteklere izin ver."
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr "Bu anahtarın depoya yollanmasına izin verilsin mi? (Varsayılan yalnızca alma erişimine izin verir.)"
@@ -1055,6 +1317,9 @@ msgstr "Kullanıcıların erişim isteğinde bulunmasına izin ver"
msgid "Allow users to request access if visibility is public or internal."
msgstr "Görünürlük herkese açık veya dahili ise kullanıcıların erişim isteğine izin ver."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "Ä°zin verilmedi"
@@ -1067,13 +1332,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr "Yardım sayfası için alternatif destek bağlantısı"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1088,8 +1347,8 @@ msgstr ""
msgid "An error has occurred"
msgstr "Bir hata oluÅŸtu"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Tartışmaya bir taslak eklenirken bir hata oluştu."
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "Yeni taslak eklenirken bir hata oluÅŸtu."
@@ -1148,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1190,6 +1452,9 @@ msgstr "Sürümler alınırken bir hata oluştu. Lütfen tekrar deneyin."
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "Projeler yüklenirken bir hata oluştu"
@@ -1235,12 +1500,12 @@ msgstr "Epikler kaldırılırken bir hata oluştu."
msgid "An error occurred while removing issues."
msgstr "Sorunlar kaldırılırken bir hata oluştu."
-msgid "An error occurred while rendering KaTeX"
-msgstr "KaTeX'i iÅŸlerken bir hata oluÅŸtu"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "Önizleme yayını iletisi oluşturulurken bir hata oluştu"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "Takvim etkinlikleri getirilirken bir hata meydana geldi"
@@ -1259,6 +1524,12 @@ msgstr "Onay ayarları kaydedilirken bir hata oluştu"
msgid "An error occurred while subscribing to notifications."
msgstr "Bildirimlere abone olunurken bir hata oluÅŸtu."
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "Bildirim aboneliÄŸi iptal edilirken bir hata oluÅŸtu."
@@ -1307,6 +1578,9 @@ msgstr "İş hattı işleri yüklenirken bir hata oluştu."
msgid "An error occurred. Please try again."
msgstr "Bir hata oluştu. Lütfen tekrar deneyin."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "Proje ortamı kontrol edilirken beklenmeyen bir hata oluştu."
@@ -1325,6 +1599,9 @@ msgstr "Web Terminali durdurulurken beklenmeyen bir hata oluÅŸtu."
msgid "Analytics"
msgstr "Analizler"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1349,6 +1626,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "Görünüm"
@@ -1391,6 +1671,9 @@ msgstr "Uygulamalar"
msgid "Applied"
msgstr "Uygulandı"
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr "Öneriyi uygula"
@@ -1432,8 +1715,8 @@ msgstr[1] "%{membersCount} tarafından %{count} onay gerekli"
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr "Geliştirici rolüne sahip veya daha yüksek olan tüm üyeler ve kod sahipleri (eğer varsa)"
-msgid "ApprovalRule|Members"
-msgstr "Kullanıcılar"
+msgid "ApprovalRule|Approvers"
+msgstr ""
msgid "ApprovalRule|Name"
msgstr "Ä°sim"
@@ -1441,12 +1724,27 @@ msgstr "Ä°sim"
msgid "ApprovalRule|No. approvals required"
msgstr "Onay gerekli deÄŸil"
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr "örneğin. QA, Güvenlik vb."
msgid "Approvals"
msgstr "Onaylar"
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "Nis"
@@ -1483,6 +1781,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1525,6 +1832,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr "Sağlık kontrolü erişim anahtarını sıfırlamak istediğinizden emin misiniz?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1552,6 +1862,12 @@ msgstr ""
msgid "Artifact ID"
msgstr "Yapı Kimliği"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "Yapılar"
@@ -1588,6 +1904,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr "#FF0000 gibi özel renk ata"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "Etiket tanımla"
@@ -1606,6 +1925,9 @@ msgstr "Kendinizi bu soruna atayın"
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "Atanan sorunlar"
@@ -1616,7 +1938,9 @@ msgid "Assigned to me"
msgstr "Bana atanan"
msgid "Assignee"
-msgstr "Atanan"
+msgid_plural "%d Assignees"
+msgstr[0] ""
+msgstr[1] ""
msgid "Assignee lists not available with your current license"
msgstr "Atanan listeleri mevcut lisansınızla birlikte kullanılamıyor"
@@ -1627,6 +1951,9 @@ msgstr "Atanan listeleri, seçilen kullanıcıya atanan tüm sorunları gösteri
msgid "Assignee(s)"
msgstr "Atanan(lar)"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1647,12 +1974,21 @@ msgstr ""
msgid "Audit Events"
msgstr "Denetim Etkinlikleri"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "AÄŸustos"
msgid "August"
msgstr "AÄŸustos"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "Kimlik Doğrulama Günlüğü"
@@ -1710,6 +2046,9 @@ msgstr "Auto DevOps etkinleÅŸtirildi"
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "Yedekli, bekleyen iş hatlarını otomatik olarak iptal et"
@@ -1731,6 +2070,18 @@ msgstr "%{link_to_documentation} adresinden daha fazla bilgi edinin"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Otomatik DevOps iş hattı etkinleştirildi ve alternatif bir CI yapılandırma dosyası bulunmazsa kullanılacak. %{more_information_link}"
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1911,32 +2262,32 @@ msgstr ""
msgid "Billing"
msgstr "Fatura"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} şu an %{plan_link} planında."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "Bazı planlar için şu anda otomatik olarak düşürme ve yükseltme yapılamaz."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "Mevcut plan"
-msgid "BillingPlans|Customer Support"
-msgstr "Müşteri desteği"
-
msgid "BillingPlans|Downgrade"
msgstr "Mevcut planı düşür"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "%{faq_link} bölümünü okuyarak her plan hakkında daha fazla bilgi edinin veya GitLab.com Altın paketinin ücretsiz 30 günlük deneme sürümünü başlatın."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "%{faq_link} bölümünü okuyarak her bir ödeme planı hakkında daha fazla bilgi edinin."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "Planı yönet"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "%{customer_support_link} bu durumda lütfen irtibat kurun."
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "%{plan_name} planı için bütün özellikleri görüntüle"
@@ -1950,14 +2301,11 @@ msgstr "Bu grubun planını yönetmek için, %{parent_billing_page_link} fatural
msgid "BillingPlans|Upgrade"
msgstr "Yükselt"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "Şu an %{plan_link} planını kullanıyorsunuz."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "GitLab.com deneme sürümünüzün süresi %{expiration_date} tarihinde doldu. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "Altın paket deneme planınız <strong>%{expiration_date} tarihinden sonra sona erecek</strong>. %{features_link}'i okuyarak GitLab.com Altın paket hakkında daha fazla bilgi edinebilirsiniz."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "özellikler"
@@ -1974,6 +2322,9 @@ msgstr "yıllık ücret %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "kullanıcı başına"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1986,31 +2337,51 @@ msgstr "Engelle"
msgid "Blocked"
msgstr "EngellenmiÅŸ"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Blog"
msgstr "Blog"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "Panolar"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2173,6 +2544,9 @@ msgstr "Dosyaya Gözat"
msgid "Browse Files"
msgstr "Dosyalara Gözat"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "Dosyalara gözat"
@@ -2284,8 +2658,11 @@ msgstr "Otomatik DevOps hakkında daha fazla bilgi edinin"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "Alternatif CI yapılandırma dosyası bulunmazsa, Otomatik DevOps iş hattı çalışır."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
-msgstr "Dağıtım stratejinizin doğru çalışabilmesi için bu projeye bir %{kubernetes_cluster_start}Kubernetes küme entegrasyonunu%{kubernetes_cluster_end} bir etki alanıyla birlikte eklemeniz gerekir."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
msgid "CICD|group enabled"
msgstr "grup etkinleÅŸtirildi"
@@ -2293,6 +2670,12 @@ msgstr "grup etkinleÅŸtirildi"
msgid "CICD|instance enabled"
msgstr "örnek etkinleştirildi"
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2320,9 +2703,15 @@ msgstr ""
msgid "Cancel"
msgstr "Ä°ptal"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "Bu iÅŸi iptal et"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "Otomatik olarak birleÅŸtirilemez"
@@ -2332,6 +2721,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2359,12 +2751,21 @@ msgstr "Sertifika (PEM)"
msgid "Change Weight"
msgstr "Ağırlığı değiştir"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr ""
msgid "Change assignee(s)."
msgstr ""
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr "Yolu deÄŸiÅŸtir"
@@ -2401,6 +2802,12 @@ msgstr "Geri al"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr "DeÄŸiÅŸiklikler"
@@ -2422,6 +2829,57 @@ msgstr "Grafikler"
msgid "Chat"
msgstr "Sohbet"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr "Tekrar kontrol et"
@@ -2464,6 +2922,9 @@ msgstr ""
msgid "Choose a file"
msgstr "Bir dosya seç"
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr "İzin için bir rol seç"
@@ -2500,9 +2961,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr "Birleştirme yönteminizi, seçeneklerinizi, kontrollerinizi seçin ve bir varsayılan birleştirme isteği açıklama şablonu ayarlayın."
-
msgid "CiStatusLabel|canceled"
msgstr "iptal edildi"
@@ -2593,6 +3051,9 @@ msgstr "Değişken satırı kaldırın"
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2602,6 +3063,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "* (Tüm ortamlar)"
@@ -2647,15 +3111,24 @@ msgstr "Temizle"
msgid "Clear input"
msgstr "GiriÅŸi temizle"
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "Aramayı temizle"
msgid "Clear search input"
msgstr "Arama giriÅŸini temizle"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2677,6 +3150,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "Genişletmek için tıklayın."
@@ -2713,6 +3189,9 @@ msgstr "SSH ile klonla"
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2722,12 +3201,27 @@ msgstr ""
msgid "Close sidebar"
msgstr "Kenar çubuğunu kapat"
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "Kapalı"
msgid "Closed issues"
msgstr "Kapalı sorunlar"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr "%{custom_domain_start}Daha fazla bilgi%{custom_domain_end}."
@@ -2776,6 +3270,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Bu Kubernetes kümesinin entegrasyonu hakkında gelişmiş seçenekler"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2785,6 +3282,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr "Alternatifler"
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Google Cloud API ile iletişim kurulurken bir hata oluştu. Lütfen daha sonra tekrar deneyin."
@@ -2824,12 +3324,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Ortamlarınızdan hangisinin bu kümeyi kullanacağını seçin."
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr "Küme sağlığı"
@@ -2860,12 +3366,21 @@ msgstr "Kubernetes küme adını kopyala"
msgid "ClusterIntegration|Copy Service Token"
msgstr "Hizmet erişim anahtarını kopyala"
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Kubernetes kümesi oluştur"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "Biliyor muydunuz?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "GitLab'ın Kubernetes kümeniz ile olan bağlantısını etkinleştirin veya devre dışı bırakın."
@@ -2914,6 +3429,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Google Cloud Platform projesi"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Motoru"
@@ -3001,8 +3519,8 @@ msgstr "Kubernetes kümesi, Google Kubernetes Motoru içinde oluşturuluyor..."
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Kubernetes kümesi adı"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Kubernetes kümesi, Google Kubernetes Motoru içinde başarıyla oluşturuldu. Kubernetes kümesinin ayrıntılarını görmek için sayfayı yenileyin"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "Kubernetes kümeleri; uygulamaları gözden geçirme özelliğini kullanmanıza, uygulamalarınızı yayınlamanıza, iş hattınızı çalıştırmanıza ve çok daha fazlasına kolay bir şekilde izin verir."
@@ -3016,6 +3534,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -3028,6 +3549,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Makine türü"
@@ -3037,6 +3564,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "Aramanız hiçbir makine türü ile eşleşmiyor"
@@ -3046,6 +3576,9 @@ msgstr "Proje bulunamadı"
msgid "ClusterIntegration|No projects matched your search"
msgstr "Aramanız ile eşleşen bir proje yok"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "Aramanızla hiçbir alan eşleşmedi"
@@ -3070,6 +3603,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3082,6 +3618,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3100,15 +3639,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "Makine türlerini ara"
msgid "ClusterIntegration|Search projects"
msgstr "Projeleri ara"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "Bölgeleri ara"
@@ -3127,6 +3675,9 @@ msgstr "Makine türü seçimine göre alan ve proje seç"
msgid "ClusterIntegration|Select project to choose zone"
msgstr "Seçili alan için proje seç"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "Alan seç"
@@ -3166,18 +3717,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3199,6 +3756,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "Proje fiyatlandırma durumunu doğrula"
@@ -3235,18 +3795,24 @@ msgstr "belgeleme"
msgid "ClusterIntegration|help page"
msgstr "yardım sayfası"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr "fiyatlandırma"
-msgid "ClusterIntegration|properly configured"
-msgstr "düzgün yapılandırılmış"
-
msgid "ClusterIntegration|sign up"
msgstr "kaydol"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr ""
@@ -3274,15 +3840,24 @@ msgstr "Onaylananları daralt"
msgid "Collapse sidebar"
msgstr "Kenar çubuğunu daralt"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr "Komut satırı talimatları"
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "Yorum"
@@ -3292,11 +3867,11 @@ msgstr ""
msgid "Comment & reopen %{noteable_name}"
msgstr ""
-msgid "Comment & resolve discussion"
-msgstr "Yorumla ve tartışmayı çöz"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "Yorumla ve tartışmayı devam ettir"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "Yorum formu konumu"
@@ -3304,6 +3879,9 @@ msgstr "Yorum formu konumu"
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "Yorumlar"
@@ -3315,6 +3893,9 @@ msgstr[1] "Ä°ÅŸlem"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3411,12 +3992,18 @@ msgstr "Hedef"
msgid "CompareBranches|There isn't anything to compare."
msgstr "Karşılaştırılacak bir şey bulunamadı."
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr ""
msgid "Confidentiality"
msgstr ""
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3426,6 +4013,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3435,6 +4025,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3501,32 +4094,40 @@ msgstr "Kapsayıcı Kaydı"
msgid "Container registry images"
msgstr "Kapsayıcı kaydı resimleri"
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab, 3 seviyeye kadar görüntü isimlerini destekler. Aşağıdaki görsel örnekleri projeniz için geçerlidir:"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "Kapsayıcı Kaydı nasıl kullanılır?"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "Hakkında daha fazlasını öğren"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "Giriş yaptıktan sonra, genel %{build} ve %{push} komutlarını kullanarak bir kapsayıcı resim oluşturmakta ve yüklemekte özgürsünüz"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "Depoyu kaldır"
-msgid "ContainerRegistry|Remove tag"
-msgstr "Etiketi kaldır"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "Boyut"
@@ -3537,14 +4138,29 @@ msgstr "Etiket"
msgid "ContainerRegistry|Tag ID"
msgstr "Etiket KimliÄŸi"
-msgid "ContainerRegistry|Use different image names"
-msgstr "Farklı resim adları kullan"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "GitLab'a entegre Docker Kapsayıcı Kaydı ile, her projenin Docker resimlerini depolamak için kendi alanı olabilir."
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "Kayıt defteri resimlerine salt okunur erişim için bir %{deploy_token} de kullanabilirsiniz."
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
msgstr ""
@@ -3606,15 +4222,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3651,6 +4276,9 @@ msgstr ""
msgid "Copy link"
msgstr "Bağlantıyı kopyala"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3666,6 +4294,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr "Erişim anahtarını panoya kopyala"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3681,13 +4315,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3696,12 +4333,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr "Kapsam"
msgid "Create"
msgstr "OluÅŸtur"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr ""
@@ -3714,7 +4360,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3735,12 +4381,24 @@ msgstr ""
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "Dal oluÅŸtur"
msgid "Create commit"
msgstr "Ä°ÅŸlem oluÅŸtur"
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr ""
@@ -3771,6 +4429,9 @@ msgstr "BirleÅŸtirme isteÄŸi ve dal oluÅŸtur"
msgid "Create milestone"
msgstr "Dönüm noktası oluştur"
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "Yeni dal oluÅŸtur"
@@ -3789,6 +4450,9 @@ msgstr "Yeni etiket oluÅŸtur"
msgid "Create new..."
msgstr "Yeni oluÅŸtur..."
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "Proje etiketi oluÅŸtur"
@@ -3813,6 +4477,12 @@ msgstr "OluÅŸturdu"
msgid "Created At"
msgstr "OluÅŸturma tarihi"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3834,18 +4504,30 @@ msgstr "OluÅŸturulma tarihi"
msgid "Created on:"
msgstr "OluÅŸturulma tarihi:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr ""
msgid "Cron syntax"
msgstr ""
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3882,6 +4564,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "Özel renkler"
@@ -3891,18 +4612,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr "Dil ve bölgeyle ilgili ayarları özelleştirin."
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr "AÅŸama Analizi"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "Kod"
@@ -3924,6 +4678,31 @@ msgstr "Hazırlama"
msgid "CycleAnalyticsStage|Test"
msgstr "Test"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr "DNS"
@@ -3948,7 +4727,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3969,6 +4748,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3990,12 +4772,21 @@ msgstr "Öntanımlı Dal"
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -4038,12 +4829,21 @@ msgstr ""
msgid "Delete"
msgstr ""
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr "Parçacığı Sil"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "Yorumu sil"
@@ -4080,6 +4880,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4098,6 +4901,22 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4110,12 +4929,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4125,6 +4953,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4143,6 +4974,16 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] ""
@@ -4154,6 +4995,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr "Dağıtım anahtarı başarıyla güncellendi."
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} diÄŸer"
@@ -4226,6 +5076,9 @@ msgstr "Dağıtıcı belirteci oluştur"
msgid "DeployTokens|Created"
msgstr "OluÅŸturuldu"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "Dağıtıcı Belirteci"
@@ -4277,6 +5130,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4301,9 +5157,30 @@ msgstr ""
msgid "Description:"
msgstr "Açıklama:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4319,6 +5196,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4328,9 +5211,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr "Tasarımlar"
@@ -4352,9 +5232,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr "Kullanılabilir dosya adı yok"
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "Değişiklik çizgileri alırken bir şeyler ters gitti."
@@ -4367,6 +5253,9 @@ msgstr ""
msgid "Disable"
msgstr "EtkisizleÅŸtir"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4424,6 +5313,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr ""
@@ -4454,6 +5349,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4463,6 +5361,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4484,9 +5385,15 @@ msgstr "Tamamlandı"
msgid "Download"
msgstr ""
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4496,6 +5403,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4532,9 +5442,15 @@ msgstr ""
msgid "Edit"
msgstr ""
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr "%{name} düzenle"
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4556,12 +5472,21 @@ msgstr "Parçacığı Düzenle"
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr ""
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr "Ortamı düzenle"
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr "Dosyayı düzenle"
@@ -4580,6 +5505,18 @@ msgstr "Sorunları düzenle"
msgid "Edit public deploy key"
msgstr "Genel dağıtım anahtarını düzenle"
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Esnek arama"
@@ -4604,6 +5541,9 @@ msgstr "E-posta"
msgid "Email address"
msgstr "E-posta adresi"
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "E-posta yaması"
@@ -4688,12 +5628,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4706,6 +5649,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr "Hata izlemeyi etkinleÅŸtir"
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4724,12 +5670,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr "İki aşamalı doğrulamayı etkinleştir"
@@ -4763,18 +5715,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr "Aramak için en az üç karakter girin"
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr ""
@@ -4787,9 +5757,18 @@ msgstr "Birleştirme isteği açıklamasını girin"
msgid "Enter the merge request title"
msgstr "Birleştirme isteğinin başlığını girin"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4958,9 +5937,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4997,12 +5982,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr ""
@@ -5021,9 +6021,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -5039,6 +6036,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr "Katkıda bulunanlar verileri alınırken hata oluştu."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "Etiketler getirilirken hata oluÅŸtu."
@@ -5096,9 +6099,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "Bildirim aboneliÄŸini deÄŸiÅŸtirirken bir sorun meydana geldi"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5117,14 +6126,17 @@ msgstr "Marka oluşturma önizlemesi yapılırken hata oluştu"
msgid "Error saving label update."
msgstr "Etiket güncellenirken sorun oluştu."
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "Bütün yapılacaklar için durum güncellenirken hata oluştu."
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "Yapılacak durumu güncellenirken hata oluştu."
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5187,7 +6199,7 @@ msgid "EventFilterBy|Filter by comments"
msgstr "Yorumlara göre süz"
msgid "EventFilterBy|Filter by issue events"
-msgstr "Sorun olaylarına göre süz"
+msgstr ""
msgid "EventFilterBy|Filter by merge events"
msgstr "Birleştirme olaylarına göre süz"
@@ -5216,9 +6228,15 @@ msgstr ""
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5240,6 +6258,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5252,9 +6273,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5264,6 +6294,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5318,6 +6354,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "Sınıflandırma etiketi"
@@ -5357,6 +6399,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "Sahibi değiştirme başarısız"
@@ -5378,6 +6429,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5399,6 +6453,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5408,6 +6474,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr ""
@@ -5441,6 +6510,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5468,6 +6540,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5498,6 +6573,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5519,6 +6603,9 @@ msgstr "Açıklama"
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5528,19 +6615,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5555,10 +6642,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5570,19 +6657,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "Durum"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5591,6 +6702,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "Åžub"
@@ -5609,9 +6723,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] "Dosya"
@@ -5674,6 +6785,9 @@ msgstr "Gruba göre sonuçları süz"
msgid "Filter results by project"
msgstr "Projeye göre sonuçları süz"
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "Süzgeç..."
@@ -5716,6 +6830,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr "Düzeltilme zamanı"
@@ -5779,6 +6896,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5815,12 +6935,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "GitLab.com Gold Ãœcretsiz Deneme"
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5881,6 +7007,9 @@ msgstr "Varsayılan etiket kümesi oluştur"
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5893,6 +7022,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "Düğüm başarısız veya bozuk."
@@ -5956,6 +7088,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6064,10 +7199,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6076,10 +7211,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr "Geo|Tüm projeler"
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6088,9 +7226,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6115,10 +7259,13 @@ msgstr "CoÄŸrafi Durum"
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6169,12 +7316,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr "Tekrar indir"
@@ -6193,6 +7334,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr "Çoğaltılacak grupları seçin."
@@ -6217,7 +7364,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6274,6 +7421,9 @@ msgstr "Ücretsiz bir örnek incelemesi alın"
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6331,6 +7481,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6349,9 +7508,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6367,9 +7523,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr "%{time_ago} eriÅŸim verildi"
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6382,6 +7547,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6391,15 +7562,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6409,7 +7664,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6418,12 +7673,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr "Çizelge"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6487,15 +7748,15 @@ msgstr "Grup iş hattı kayıtları başarıyla sıfırlandı."
msgid "Group was successfully updated."
msgstr "Grup başarıyla güncellendi."
-msgid "Group:"
-msgstr "Grup:"
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6532,6 +7793,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6607,6 +7871,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "Rozetler hakkında daha fazla bilgi edin."
@@ -6640,6 +7907,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6763,6 +8033,12 @@ msgstr "Yardım sayfası"
msgid "Help page text and support page url."
msgstr "Yardım sayfası metni ve destek sayfası bağlantısı."
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6784,6 +8060,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6792,6 +8071,9 @@ msgstr[1] ""
msgid "Hide values"
msgstr "DeÄŸerleri gizle"
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6810,6 +8092,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr "Kanca başarıyla güncellendi."
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6819,6 +8104,9 @@ msgstr ""
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6828,6 +8116,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6840,9 +8131,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6879,6 +8176,9 @@ msgstr "Önizlemeyi yenile"
msgid "IDE|Review"
msgstr "Ä°ncele"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6942,6 +8242,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -7047,7 +8353,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7101,13 +8407,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7152,6 +8461,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7169,6 +8481,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7211,6 +8526,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7259,17 +8577,23 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
-msgstr "Kapatıldı (%{moved_link_start}taşındı%{moved_link_end})"
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
+msgstr ""
msgid "Issue"
msgstr ""
@@ -7281,7 +8605,7 @@ msgid "Issue board focus mode"
msgstr ""
msgid "Issue events"
-msgstr "Sorun etkinlikleri"
+msgstr ""
msgid "Issue template (optional)"
msgstr ""
@@ -7313,9 +8637,27 @@ msgstr "Bazı panolarınız gizlendi, tekrar görmek için bir lisans etkinleşt
msgid "IssueBoards|Switch board"
msgstr "Panoyu deÄŸiÅŸtir"
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "Sorunlar"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7331,8 +8673,11 @@ msgstr "Sorunlar, birleÅŸtirme istekleri, itmeler ve yorumlar."
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
-msgstr "Sorunlar OluÅŸturuldu"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
msgid "IssuesAnalytics|Issues created per month"
msgstr "Aylık oluşturulan sorunlar"
@@ -7349,6 +8694,12 @@ msgstr "Grubunuzdaki projeler için hiç sorun yok"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "Aramanızı genişletmek için yukarıdaki süzgeç çubuğundaki süzgeçleri değiştirin veya kaldırın"
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7526,6 +8877,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7550,10 +8904,13 @@ msgstr "Kubernetes kümesi başarıyla güncellendi."
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7639,6 +8996,9 @@ msgid_plural "Last %d days"
msgstr[0] ""
msgstr[1] ""
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr ""
@@ -7660,15 +9020,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr ""
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "Son güncelleme"
@@ -7687,7 +9056,7 @@ msgstr " "
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7705,9 +9074,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr ""
-
msgid "Learn more about Auto DevOps"
msgstr "Otomatik DevOps hakkında daha fazla bilgi edinin"
@@ -7726,6 +9092,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7735,6 +9104,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr ""
@@ -7765,76 +9137,98 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "Ä°ptal"
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
+
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License details"
msgstr ""
-msgid "LicenseManagement|Packages"
-msgstr "Paketler"
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "Gönder"
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7846,6 +9240,9 @@ msgstr ""
msgid "Licenses"
msgstr "Lisanslar"
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7854,12 +9251,18 @@ msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
msgstr[1] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "Liste"
@@ -7872,13 +9275,13 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
-msgid "List view"
+msgid "List the merge requests that must be merged before this one."
msgstr ""
-msgid "List your Bitbucket Server repositories"
+msgid "List view"
msgstr ""
-msgid "List your GitHub repositories"
+msgid "List your Bitbucket Server repositories"
msgstr ""
msgid "Live preview"
@@ -7890,6 +9293,9 @@ msgstr "Grup üyeleri için katkı istatistikleri yükleniyor"
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7929,13 +9335,19 @@ msgstr ""
msgid "Locked Files"
msgstr "Kilitli Dosyalar"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr "Kilitler, belirli bir dosyayı veya klasörü kilitleme yeteneği sağlar."
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7947,6 +9359,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7962,19 +9377,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -8019,6 +9440,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -8037,6 +9461,12 @@ msgstr "Mar"
msgid "March"
msgstr "Mart"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -8046,8 +9476,8 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
-msgstr "Yapılacağı tamamlandı olarak işaretle"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr ""
@@ -8058,15 +9488,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
+msgid "Marks this issue as related to %{issue_ref}."
msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8124,9 +9605,18 @@ msgstr "Üyeler, <i>Sorumlu</i> veya <i>Sahipleri</i> tarafından eklenebilir"
msgid "Members of <strong>%{project_name}</strong>"
msgstr "<strong>%{project_name}</strong> projesinin üyeleri"
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "BirleÅŸtirme Ä°steÄŸi"
@@ -8154,6 +9644,9 @@ msgstr "BirleÅŸtirme devam ediyor"
msgid "Merge request"
msgstr "BirleÅŸtirme isteÄŸi"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "Birleştirme isteği onayları"
@@ -8166,6 +9659,9 @@ msgstr "BirleÅŸtirme istekleri"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr "İş hattı başarılı olduğunda birleştir"
@@ -8199,18 +9695,6 @@ msgstr "Bir yanıt ekle"
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "Taslak yorum kaydedilirken bir hata oluÅŸtu."
-msgid "MergeRequests|Discussion stays resolved"
-msgstr "Tartışma çözüldü"
-
-msgid "MergeRequests|Discussion stays unresolved"
-msgstr "Tartışma çözülmedi"
-
-msgid "MergeRequests|Discussion will be resolved"
-msgstr "Tartışma çözülecek"
-
-msgid "MergeRequests|Discussion will be unresolved"
-msgstr "Tartışma çözülmedi"
-
msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
@@ -8220,8 +9704,8 @@ msgstr ""
msgid "MergeRequests|Reply..."
msgstr "Yanıt..."
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "Bu tartışmayı yeni bir konuyla çöz"
+msgid "MergeRequests|Resolve this thread in a new issue"
+msgstr ""
msgid "MergeRequests|Saving the comment failed"
msgstr "Yorum kaydedilemedi"
@@ -8229,6 +9713,18 @@ msgstr "Yorum kaydedilemedi"
msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
+msgid "MergeRequests|Thread stays resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr ""
+
msgid "MergeRequests|Toggle comments for this file"
msgstr "Bu dosya için yorumları değiştir"
@@ -8241,20 +9737,20 @@ msgstr "Değiştirilen @ %{commitId} dosyasını görüntüle"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr "%{commitLink} işlemine yorum yapıldı"
-msgid "MergeRequests|started a discussion"
-msgstr "bir tartışma başlattı"
+msgid "MergeRequests|started a thread"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
-msgstr "%{linkStart}bir eski sürüm değişikliği%{linkEnd} ile ilgili bir tartışma başlattı"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
-msgstr "%{linkStart}değişiklik%{linkEnd} ile ilgili bir tartışma başlattı"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "%{linkStart}%{commitId}%{linkEnd} işlemi ile ilgili bir tartışma başlattı"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
msgstr "%{paragraphStart}açıklama %{descriptionChangedTimes}sürelerini%{timeDifferenceMinutes} değiştirdi%{paragraphEnd}"
@@ -8277,24 +9773,42 @@ msgstr "BirleÅŸtirildi"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "Mesajlar"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr "Ölçüt başarıyla güncellendi."
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8463,9 +9977,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8505,6 +10016,9 @@ msgstr "Ä°ptal"
msgid "Modal|Close"
msgstr "Kapat"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8517,7 +10031,7 @@ msgstr ""
msgid "Monday"
msgstr "Pazartesi"
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8529,6 +10043,12 @@ msgstr ""
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8559,6 +10079,12 @@ msgstr "Konuyu taşı"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8568,6 +10094,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8663,6 +10195,9 @@ msgstr "Yeni Åžifre"
msgid "New Pipeline Schedule"
msgstr ""
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "Yeni Parçacık"
@@ -8750,13 +10285,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8768,13 +10315,19 @@ msgstr ""
msgid "No Tag"
msgstr "Etiket Yok"
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr "Etkinlik bulunamadı"
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8789,9 +10342,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8801,6 +10351,15 @@ msgstr "Hiçbir katkı bulunamadı"
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr "Ayrıntı yok"
@@ -8825,12 +10384,18 @@ msgstr ""
msgid "No files found."
msgstr "Dosya bulunamadı."
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8885,9 +10450,15 @@ msgstr ""
msgid "No schedules"
msgstr ""
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8897,6 +10468,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8909,6 +10483,9 @@ msgstr ""
msgid "None"
msgstr "Yok"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr ""
@@ -8927,6 +10504,9 @@ msgstr ""
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8936,6 +10516,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8951,6 +10534,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -9047,6 +10633,9 @@ msgstr ""
msgid "Notifications"
msgstr "Bildirimler"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "Bildirimler kapalı"
@@ -9065,9 +10654,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9083,6 +10684,9 @@ msgstr "Süzgeç"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9112,6 +10716,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9136,6 +10746,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9145,6 +10761,9 @@ msgstr "Açık"
msgid "Open Documentation"
msgstr "Belgeleri Aç"
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr "Yorum türü açılır penceresini aç"
@@ -9154,6 +10773,12 @@ msgstr "Açık hatalar"
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr "Projeleri aç"
@@ -9235,6 +10860,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9259,6 +10890,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9295,15 +10938,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr "Son »"
-msgid "Pagination|Next"
-msgstr "Sonraki"
-
-msgid "Pagination|Prev"
-msgstr "Önceki"
+msgid "Pagination|Next ›"
+msgstr ""
msgid "Pagination|« First"
msgstr "« İlk"
+msgid "Pagination|‹ Prev"
+msgstr ""
+
msgid "Parameter"
msgstr ""
@@ -9373,9 +11016,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "Yolu değiştirme, grubu aktarma veya kaldırma gibi gelişmiş seçenekleri uygulayın."
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9403,12 +11064,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr ""
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr ""
@@ -9475,8 +11145,8 @@ msgstr ""
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr ""
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
-msgstr "Ä°ÅŸlem: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
+msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
msgstr "İş hattı: %{ci_status}"
@@ -9499,12 +11169,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr ""
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr "'%{project_name}' için iş hattı ayarları başarıyla güncellendi."
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9553,15 +11232,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9592,6 +11286,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9604,18 +11301,12 @@ msgstr "tümü"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "başarılı"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr ""
@@ -9646,6 +11337,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9664,6 +11358,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9751,6 +11448,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "Tercihler"
@@ -9760,7 +11460,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9787,6 +11487,9 @@ msgstr "Gezinme teması"
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9844,6 +11547,12 @@ msgstr "Önizleme yükü"
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9880,6 +11589,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "Profil"
@@ -9994,6 +11718,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -10036,6 +11763,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr "Yol"
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr "Yeni profil resminizi konumlandırın ve boyutlandırın"
@@ -10066,6 +11796,9 @@ msgstr "Sosyal oturum açma"
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "LDAP hesapları için bazı seçenekler kullanılamıyor"
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr "Bize 250 karakterden daha azı ile kendinizden bahsedin"
@@ -10171,6 +11904,12 @@ msgstr "Durumunuz"
msgid "Profiles|e.g. My MacBook key"
msgstr "Örneğin. MacBook anahtarım"
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr "kullanıcıadı"
@@ -10216,6 +11955,9 @@ msgstr "'%{project_name}' projesi başarıyla güncellendi."
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10225,6 +11967,9 @@ msgstr "Proje URL'si"
msgid "Project access must be granted explicitly to each user."
msgstr "Proje erişimi her kullanıcıya açıkça verilmelidir."
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr "Proje ve wiki depoları"
@@ -10276,9 +12021,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr "Proje:"
-
msgid "Project: %{name}"
msgstr ""
@@ -10321,6 +12063,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr "Yıldızı kaldır"
@@ -10339,13 +12087,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10354,6 +12132,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10525,10 +12309,58 @@ msgstr "Üzgünüz, aramanızla eşleşen hiçbir proje yok"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10546,9 +12378,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10582,6 +12411,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10612,6 +12444,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10636,6 +12471,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr ""
@@ -10654,6 +12495,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10684,6 +12528,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} geliştiriciler için yazılabilir olacak. Emin misiniz?"
@@ -10759,6 +12606,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10852,6 +12702,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -10861,9 +12714,18 @@ msgstr "Ortamlar hakkında daha fazla bilgi edinin"
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10873,6 +12735,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10941,9 +12806,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "Kayıt Defteri"
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -10971,6 +12833,9 @@ msgstr "Sürümler"
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr ""
@@ -10980,9 +12845,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -11004,6 +12875,9 @@ msgstr ""
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -11013,12 +12887,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -11028,30 +12911,75 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11085,6 +13013,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11094,12 +13031,21 @@ msgstr "DeÄŸiÅŸtirme:"
msgid "Replace all label(s)"
msgstr "Tüm etiketleri değiştir"
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11166,6 +13112,9 @@ msgstr ""
msgid "Repository"
msgstr "Depo"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "Depo Ayarları"
@@ -11190,9 +13139,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11205,6 +13160,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr "Profil Ä°stekleri"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11220,6 +13178,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] ""
@@ -11236,6 +13197,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11251,10 +13215,16 @@ msgstr "Anahtarı sıfırla"
msgid "Reset runners registration token"
msgstr ""
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11263,6 +13233,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11311,6 +13284,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11376,6 +13352,9 @@ msgstr ""
msgid "Roadmap"
msgstr "Yol haritası"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11436,8 +13415,8 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "Tüm paylaşılan Çalıştırıcı iş hattı dakikalarınızı kullandınız."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "Çalışıyor"
@@ -11511,6 +13490,9 @@ msgstr ""
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11520,6 +13502,9 @@ msgstr ""
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11541,15 +13526,30 @@ msgstr "Kapsamlı sorun panoları"
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "Ara"
@@ -11637,9 +13637,76 @@ msgstr "Bu grupta"
msgid "SearchAutocomplete|in this project"
msgstr "Bu projede"
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr "\"%{term}\" için %{from} - %{to} / %{count} %{scope}"
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11652,6 +13719,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11667,24 +13737,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr "Sorun oluÅŸtur"
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr "Gösterge panonuzu ayarlama hakkında daha fazla bilgi edinin"
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11712,6 +13806,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11739,6 +13836,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr ""
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11748,12 +13848,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11766,6 +13872,9 @@ msgstr ""
msgid "Select a timezone"
msgstr ""
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11775,7 +13884,16 @@ msgstr ""
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11787,6 +13905,9 @@ msgstr "Makine tipini seçmek için proje ve bölge seçin"
msgid "Select project to choose zone"
msgstr "Bölge seçmek için proje seçin"
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11802,14 +13923,20 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr "Özel proje şablonu kaynak grubunu seçin."
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
-msgstr "Geliştiricilere bir e-posta bildirimi gönderin."
+msgid "Send a separate email notification to Developers."
+msgstr ""
msgid "Send confirmation email"
msgstr ""
@@ -11835,6 +13962,12 @@ msgstr ""
msgid "September"
msgstr "Eylül"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11862,6 +13995,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11892,9 +14028,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11913,6 +14061,9 @@ msgstr "Oturum süresi (dakika)"
msgid "Session expiration, projects limit and attachment size."
msgstr "Oturum zaman aşımı, proje sınırı ve ek boyutu."
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11946,12 +14097,24 @@ msgstr "Yeni parola ayarla"
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11961,16 +14124,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11988,6 +14157,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "ÅŸifre ayarla"
@@ -12015,6 +14187,12 @@ msgstr "Üzgünüz, durumunuzu belirleyemedik. Lütfen daha sonra tekrar deneyin
msgid "SetStatusModal|What's your status?"
msgstr "Durumunuz nedir?"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12072,9 +14250,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12098,6 +14282,18 @@ msgid_plural "Showing %d events"
msgstr[0] "%d etkinliği gösteriliyor"
msgstr[1] "%d etkinlikleri gösteriliyor"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12128,6 +14324,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12140,6 +14339,9 @@ msgstr "Oturumu kapat"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12149,6 +14351,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12173,6 +14381,9 @@ msgstr "Benzer sorunlar"
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12191,6 +14402,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12224,9 +14450,15 @@ msgstr "Gösterilecek parçacık yok."
msgid "SnippetsEmptyState|They can be either public or private."
msgstr "Genel veya özel olabilirler."
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12257,6 +14489,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12266,6 +14501,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12299,6 +14540,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12350,6 +14594,9 @@ msgstr "Daha sonra"
msgid "SortOptions|Due soon"
msgstr "Yakında"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "Etiket önceliği"
@@ -12419,6 +14666,9 @@ msgstr "En son etkinlik"
msgid "SortOptions|Oldest sign in"
msgstr "En eski oturum açma"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "En eski güncelleme"
@@ -12434,6 +14684,12 @@ msgstr "Son etkinlik"
msgid "SortOptions|Recent sign in"
msgstr "Son giriÅŸ"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12512,6 +14768,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12533,13 +14792,13 @@ msgstr "Bir proje sayfasını ziyaret edin ve bir yıldız simgesine tıklayın.
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr "Henüz yıldızlı bir projeniz yok."
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12548,6 +14807,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "Bu değişiklikler ile bir %{new_merge_request} başlatın"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr ""
@@ -12557,28 +14822,37 @@ msgstr "Ä°nceleme baÅŸlat"
msgid "Start and due date"
msgstr ""
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr "Temizlemeye baÅŸla"
msgid "Start date"
msgstr "BaÅŸlama tarihi"
-msgid "Start discussion"
-msgstr "Tartışmaya başla"
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
+msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start the Runner!"
msgstr ""
-msgid "Start merge train"
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
+msgid "Start thread & reopen %{noteable_name}"
msgstr ""
msgid "Start your trial"
@@ -12605,12 +14879,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "Durum"
msgid "Status:"
msgstr "Durum:"
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12641,6 +14921,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "Alt gruplar"
@@ -12656,6 +14948,9 @@ msgstr "Spam olarak gönder"
msgid "Submit feedback"
msgstr "Geri bildirim gönder"
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr "İnceleme gönder"
@@ -12680,6 +14975,12 @@ msgstr "Takvime abone ol"
msgid "Subscribed"
msgstr "Abone"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12692,9 +14993,6 @@ msgstr "Ãœcretsiz"
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12755,6 +15053,9 @@ msgstr "Kullanım"
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr "Kullanım sayımı günde bir kez 12:00 ÖS yapılır."
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12848,9 +15149,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr ""
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12908,6 +15215,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "Etiketler"
@@ -13061,6 +15374,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13075,6 +15391,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "GitLab'daki Gelişmiş Genel arama, size zaman kazandıran güçlü bir arama hizmetidir. Yinelenen kod oluşturmak ve zaman kaybetmek yerine, artık kendi projenize yardımcı olabilecek diğer ekiplerin içinde kod arayabilirsiniz."
@@ -13099,9 +15418,6 @@ msgstr "İkincil düğüm durumu alma isteğinin zaman aşımına uğrayacağı
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13126,6 +15442,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13162,9 +15484,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13279,7 +15598,7 @@ msgstr "Depo güncelleniyor..."
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13306,7 +15625,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13315,7 +15634,7 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13339,7 +15658,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13375,9 +15694,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "Gösterilecek bir sorun yok"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr "Henüz etiket yok"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13399,6 +15724,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13408,18 +15736,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
+msgid "There was an error deleting the To Do."
msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13444,6 +15775,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr "Bu etikete abone olurken bir hata oluÅŸtu."
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13501,10 +15835,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13552,6 +15886,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13561,12 +15901,15 @@ msgstr "Bu grup"
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "Bu gizli bir sorundur."
@@ -13588,15 +15931,15 @@ msgstr ""
msgid "This is your current session"
msgstr ""
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "Bu sorun gizlidir"
msgid "This issue is locked."
msgstr "Bu sorun kilitlendi."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr ""
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr ""
@@ -13651,9 +15994,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr ""
@@ -13672,9 +16021,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13705,6 +16051,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13714,6 +16063,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr "Bu kullanıcının kimliği yok"
@@ -13735,6 +16087,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13753,6 +16108,15 @@ msgstr ""
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13762,6 +16126,9 @@ msgstr "Kalan süre"
msgid "Time spent"
msgstr "Harcanan zaman"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "Zaman takibi"
@@ -13771,12 +16138,21 @@ msgstr "İlk birleştirme isteğine kadar geçen süre"
msgid "TimeTrackingEstimated|Est"
msgstr ""
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr ""
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr ""
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr "%s gün önce"
@@ -13900,6 +16276,9 @@ msgstr "ÅŸimdi"
msgid "Timeago|right now"
msgstr "hemen ÅŸimdi"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "Zaman aşımı"
@@ -13931,6 +16310,9 @@ msgstr "Başlıklar ve dosya adları"
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13946,6 +16328,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13973,12 +16358,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -14003,12 +16382,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14033,24 +16430,27 @@ msgstr "Aramanızı genişletmek için yukarıdaki filtreleri değiştirin veya
msgid "To widen your search, change or remove filters."
msgstr "Aramanızı genişletmek için süzgeçlerinizi değiştirin veya kaldırın."
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
msgid "Today"
msgstr "Bugün"
-msgid "Todo"
-msgstr "Yapılacaklar"
-
-msgid "Todo was successfully marked as done."
+msgid "Toggle Markdown preview"
msgstr ""
-msgid "Todos"
-msgstr "Yapılacaklar"
-
msgid "Toggle Sidebar"
msgstr "Kenar çubuğunu değiştir"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -14060,9 +16460,6 @@ msgstr "İşlem açıklamasını göster"
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr "Tartışmayı değiştir"
-
msgid "Toggle emoji award"
msgstr ""
@@ -14075,17 +16472,26 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "Kenar çubuğunu göster/gizle"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "DeÄŸiÅŸtirme Durumu: KAPALI"
msgid "ToggleButton|Toggle Status: ON"
msgstr "Değiştirme Durumu: AÇIK"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
-msgstr "Erişim anahtarı"
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
msgid "Tomorrow"
msgstr "Yarın"
@@ -14105,6 +16511,9 @@ msgstr "Toplam Katkı"
msgid "Total Time"
msgstr "Toplam Zaman"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr ""
@@ -14123,6 +16532,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14159,9 +16574,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr ""
@@ -14189,9 +16601,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr "Tetikleyici başarıyla güncellendi."
@@ -14216,12 +16625,21 @@ msgstr "GitLab’ın sunduğu her şeyi 30 gün boyunca deneyin."
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "Servis Masasını Aç"
@@ -14255,6 +16673,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14267,6 +16697,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14297,6 +16730,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "Bilinmeyen"
@@ -14324,12 +16763,24 @@ msgstr ""
msgid "Unlocked"
msgstr "Kilitli"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "Çözülmeyen tartışma"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14366,6 +16817,15 @@ msgstr "Proje düzeyinde abonelikten çık"
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "Doğrulanmamış"
@@ -14375,15 +16835,27 @@ msgstr "Güncel"
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14414,6 +16886,9 @@ msgstr "Güncellendi:"
msgid "Updated %{updated_at} by %{updated_by}"
msgstr "%{updated_by} tarafından %{updated_at} zamanında güncellendi"
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "Güncelleniyor"
@@ -14426,6 +16901,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "Gelişmiş Genel aramayı etkinleştirmek için planınızı yükseltin."
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14489,6 +16967,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "Kullanım istatistikleri"
@@ -14657,6 +17138,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14669,6 +17153,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14732,7 +17219,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14744,7 +17231,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14759,10 +17246,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14810,6 +17297,12 @@ msgstr "Parçacıklar"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr "GitLab'daki parçacıklar özel, dahili veya genel olabilir."
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr "Abone"
@@ -14822,6 +17315,9 @@ msgstr "Bu kullanıcı özel bir profile sahip"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr "Bu kullanıcı hiçbir projeye katkıda bulunmadı"
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "Tümünü görüntüle"
@@ -14849,6 +17345,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "Kullanıcılar"
@@ -14927,6 +17426,9 @@ msgstr "Doğrulanmış"
msgid "Version"
msgstr "Sürüm"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -15005,6 +17507,9 @@ msgstr "Görünürlük seviyesi"
msgid "Visibility level:"
msgstr "Görünürlük seviyesi:"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr "Görünürlük, proje özellikleri, izinler"
@@ -15026,16 +17531,28 @@ msgstr "Bilinmeyen"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -15044,16 +17561,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15095,6 +17615,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr ""
@@ -15110,10 +17633,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15167,6 +17687,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15181,12 +17704,18 @@ msgid_plural "When these merge requests are accepted"
msgstr[0] ""
msgstr[1] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15196,6 +17725,9 @@ msgstr ""
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr "Wiki başarıyla güncellendi."
@@ -15268,15 +17800,9 @@ msgstr "belgeleme"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "Yeni Viki Sayfası"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15292,20 +17818,17 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "%{page_title} oluÅŸtur"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "%{page_title} güncelle"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
-msgstr "Sayfa oluÅŸtur"
+msgid "Wiki|Create New Page"
+msgstr ""
msgid "Wiki|Create page"
msgstr "Sayfa oluÅŸtur"
@@ -15325,6 +17848,9 @@ msgstr "Yeni sayfa"
msgid "Wiki|Page history"
msgstr "Sayfa geçmişi"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "Sayfa sürümü"
@@ -15355,6 +17881,9 @@ msgstr "Yaz"
msgid "Write a comment or drag your files here…"
msgstr "Bir yorum yazın veya dosyalarınızı buraya sürükleyin…"
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr "Yazma eriÅŸimine izin verildi"
@@ -15391,6 +17920,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15445,6 +17977,9 @@ msgstr "Bu gruplara katılmayı talep ederek onlara kolayca katkıda bulunabilir
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15469,7 +18004,10 @@ msgstr ""
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15490,6 +18028,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15511,9 +18052,6 @@ msgstr "Bu salt okunur GitLab örneğine yazamazsınız."
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15541,6 +18079,18 @@ msgstr "Herhangi bir yetkili uygulamanız yok"
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15565,6 +18115,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "Proje sınırınıza ulaştınız"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15655,6 +18211,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15694,6 +18253,9 @@ msgstr ""
msgid "Your Groups"
msgstr "Gruplarınız"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15709,8 +18271,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "Yapacaklarınız"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15781,6 +18343,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15793,12 +18358,21 @@ msgstr "Projeleriniz"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "silinmiş bir kullanıcı"
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "önce"
@@ -15814,6 +18388,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15832,6 +18409,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15841,6 +18424,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15946,6 +18532,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr "Sınıf"
@@ -15964,10 +18553,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15985,10 +18574,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr "Açıklama"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -16009,32 +18598,13 @@ msgstr "Tanımlayıcılar"
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr "Örnekler"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -16061,6 +18631,9 @@ msgstr "Performans ölçütlerinde değişiklik yok"
msgid "ciReport|Performance metrics"
msgstr "Performans ölçütleri"
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16120,6 +18693,9 @@ msgstr[1] ""
msgid "ciReport|View full report"
msgstr "Raporun tamamını görüntüle"
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr "Yorumladı: %{link_to_project}"
@@ -16162,6 +18738,9 @@ msgstr "bağlanılıyor"
msgid "could not read private key, is the passphrase correct?"
msgstr "özel anahtar okunamadı, şifre doğru mu?"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr "özelleştir"
@@ -16176,7 +18755,10 @@ msgstr[1] "gün"
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16185,11 +18767,6 @@ msgstr ""
msgid "disabled"
msgstr "devre dışı"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "done"
msgstr "tamamlandı"
@@ -16198,16 +18775,28 @@ msgid_plural "drafts"
msgstr[0] ""
msgstr[1] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "etkin"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16252,6 +18841,9 @@ msgstr "grup"
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "burada"
@@ -16296,21 +18888,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr "sorun panoları"
-
msgid "it is stored externally"
msgstr ""
@@ -16335,15 +18927,24 @@ msgstr "son sürüm"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
-msgstr "lisans yönetimi"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "birleÅŸtirme isteÄŸi"
@@ -16364,6 +18965,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16487,6 +19097,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr "BirleÅŸtiren"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16520,6 +19133,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "BirleÅŸtirme isteÄŸi"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16571,7 +19187,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16583,9 +19199,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Bu proje arşivlendi, yazma erişimi devre dışı bırakıldı"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16595,6 +19223,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "dal mevcut deÄŸil."
@@ -16620,7 +19251,7 @@ msgid "n/a"
msgstr ""
msgid "needs to be between 10 minutes and 1 month"
-msgstr "10 dakika ile 1 ay arasında olması gerekiyor"
+msgstr ""
msgid "new merge request"
msgstr "yeni birleÅŸtirme isteÄŸi"
@@ -16628,9 +19259,15 @@ msgstr "yeni birleÅŸtirme isteÄŸi"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr "yok"
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "bildirim e-postaları"
@@ -16643,8 +19280,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "veya"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16659,8 +19296,11 @@ msgstr[1] "ebeveyn"
msgid "password"
msgstr "ÅŸifre"
-msgid "personal access token"
-msgstr "kişisel erişim anahtarı"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16681,12 +19321,18 @@ msgid_plural "projects"
msgstr[0] "proje"
msgstr[1] "proje"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr ""
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16699,6 +19345,9 @@ msgstr ""
msgid "remove weight"
msgstr ""
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16785,15 +19434,38 @@ msgstr ""
msgid "this document"
msgstr "bu belge"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "katkıda bulunanlara yardım etmek için etkili şekilde iletişim kurun!"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr "güncellendi"
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "kullanıcı adı"
@@ -16803,6 +19475,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16818,12 +19493,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/uk/gitlab.po b/locale/uk/gitlab.po
index 77337c4ea86..8511ce52d39 100644
--- a/locale/uk/gitlab.po
+++ b/locale/uk/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: uk\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 12:05\n"
+"PO-Revision-Date: 2019-09-24 10:16\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (з %{timeoutSource})"
msgid " Please sign in."
msgstr " Будь лаÑка, увійдіть."
@@ -27,6 +30,12 @@ msgstr " Ви повинні зробити це до %{grace_period_deadline}."
msgid " and"
msgstr " Ñ–"
+msgid " and "
+msgstr " Ñ– "
+
+msgid " and %{sliced}"
+msgstr " Ñ– %{sliced}"
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " погіршилоÑÑ Ð½Ð° %d одиницю"
@@ -44,12 +53,18 @@ msgstr[3] " покращилоÑÑ Ð½Ð° %d одиниць"
msgid " or "
msgstr " або "
+msgid " or <!merge request id>"
+msgstr " або <!merge request id>"
+
msgid " or <#epic id>"
msgstr " або <#epic id>"
msgid " or <#issue id>"
msgstr " або <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr " або поÑÐ¸Ð»Ð°Ð½Ð½Ñ (напр. шлÑÑ…/до/проекту!id_запиту_на_злиттÑ)"
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d коментар"
@@ -71,6 +86,13 @@ msgstr[1] "%d коміта позаду"
msgstr[2] "%d комітів позаду"
msgstr[3] "%d комітів позаду"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d коміт,"
+msgstr[1] "%d коміта,"
+msgstr[2] "%d комітів,"
+msgstr[3] "%d комітів,"
+
msgid "%d commits"
msgstr "%d комітів"
@@ -102,6 +124,13 @@ msgstr[1] "%d виправлені результати теÑту"
msgstr[2] "%d виправлених результатів теÑту"
msgstr[3] "%d виправлених результатів теÑту"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] "%d недоÑтупний запит на злиттÑ"
+msgstr[1] "%d недоÑтупних запитів на злиттÑ"
+msgstr[2] "%d недоÑтупних запитів на злиттÑ"
+msgstr[3] "%d недоÑтупних запитів на злиттÑ"
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d задача"
@@ -144,6 +173,13 @@ msgstr[1] "%d метрики"
msgstr[2] "%d метрик"
msgstr[3] "%d метрик"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] "%d хвилина"
+msgstr[1] "%d хвилини"
+msgstr[2] "%d хвилин"
+msgstr[3] "%d хвилин"
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "ще %d коментар"
@@ -151,6 +187,13 @@ msgstr[1] "ще %d коментарі"
msgstr[2] "ще %d коментарів"
msgstr[3] "ще %d коментарів"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] "%d Ñекунда"
+msgstr[1] "%d Ñекунди"
+msgstr[2] "%d Ñекунд"
+msgstr[3] "%d Ñекунд"
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d проіндекÑована зміна"
@@ -175,14 +218,14 @@ msgstr[3] "%s доданих комітів були виключені Ð´Ð»Ñ Ð
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} Ñ– %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %{authorsName}"
+msgid "%{authorsName}'s thread"
+msgstr "Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %{authorsName}"
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} закомітив %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
-msgstr "%{counter_repositories} репозиторіїв, %{counter_wikis} вікі, %{counter_build_artifacts} артефактів збірки, %{counter_lfs_objects} об’єктів LFS"
+msgid "%{count} LOC/commit"
+msgstr "%{count} Ñ€Ñдків коду/коміт"
msgid "%{count} approval required from %{name}"
msgid_plural "%{count} approvals required from %{name}"
@@ -194,6 +237,9 @@ msgstr[3] "Ðеобхідно %{count} затверджень від %{name}"
msgid "%{count} approvals from %{name}"
msgstr "%{count} Ñхвалень від %{name}"
+msgid "%{count} files touched"
+msgstr "%{count} файлів змінено"
+
msgid "%{count} more"
msgstr "%{count} більше"
@@ -220,12 +266,24 @@ msgstr[1] "%{count} коментарі в очікуванні"
msgstr[2] "%{count} коментарів в очікуванні"
msgstr[3] "%{count} коментарів в очікуванні"
+msgid "%{duration}ms"
+msgstr "%{duration}мÑ"
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} Спробуйте вибрати (cherry-pick) цей коміт знову."
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr "%{edit_in_new_fork_notice} Спробуйте Ñтворити нову директорію ще раз."
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} Спробуйте анулювати цей коміт знову."
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr "%{edit_in_new_fork_notice} Спробуйте завантажити файл ще раз."
+
+msgid "%{extra} more downstream pipelines"
+msgstr "Ще %{extra} наÑтупних конвеєрів"
+
msgid "%{filePath} deleted"
msgstr "%{filePath} видалено"
@@ -241,6 +299,9 @@ msgstr "%{group_docs_link_start}Групи%{group_docs_link_end} дозволÑÑ
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr "%{group_name} викориÑтовує облікові запиÑи керовані групою. Вам необхідно Ñтворити новий обліковий Ð·Ð°Ð¿Ð¸Ñ GitLab, Ñкий буде керуватиÑÑ %{group_name}."
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr "%{icon}Ви збираєтеÑÑŒ додати %{usersTag} людей до обговореннÑ. Будьте обережні."
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} буде видалено! Ви впевнені?"
@@ -256,18 +317,21 @@ msgstr "%{level_name} не дозволено в %{group_level_name} групі.
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr "%{level_name} не допуÑкаєтьÑÑ, оÑкільки проект-джерело цього форку має нижчу видиміÑÑ‚ÑŒ."
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "%{level_name} видиміÑÑ‚ÑŒ обмежена адмініÑтратором."
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}Читати більше%{link_end} про дозволи ролей"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr "%{listToShow} та ще %{awardsListLength}."
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} Початок"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} заблоковано кориÑтувачем GitLab %{lock_user_id}"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr "%{mergeLength}/%{usersLength} можуть виконувати злиттÑ"
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText}, Ñ†Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° буде закрита автоматично."
@@ -337,6 +401,9 @@ msgstr[1] "%{strong_start}%{tag_count}%{strong_end} Теги"
msgstr[2] "%{strong_start}%{tag_count}%{strong_end} Тегів"
msgstr[3] "%{strong_start}%{tag_count}%{strong_end} Тегів"
+msgid "%{tabname} changed"
+msgstr "%{tabname} змінено"
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files}"
@@ -359,9 +426,21 @@ msgstr "%{unstaged} неіндекÑованих та %{staged} проіндек
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}ДовідатиÑÑŒ більше%{usage_ping_link_end} про те, Ñкою інформацією Ви ділитеÑÑŒ із GitLab Inc."
+msgid "%{userName} (cannot merge)"
+msgstr "%{userName} (не може виконувати злиттÑ)"
+
+msgid "%{userName}'s avatar"
+msgstr "%{userName} аватар"
+
msgid "%{user_name} profile page"
msgstr "%{user_name} Ñторінка профілю"
+msgid "%{username}'s avatar"
+msgstr "%{username} аватар"
+
+msgid "%{value} ms"
+msgstr "%{value} мÑ"
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr "%{verb} %{time_spent_value} витрачено чаÑу."
@@ -371,12 +450,15 @@ msgstr "\"%{level}\" не Ñ” допуÑтимим рівнем видимоÑÑ‚Ñ
msgid "'%{source}' is not a import source"
msgstr "\"%{source}\" не є джерелом імпорту"
+msgid "'%{template_name}' is unknown or invalid"
+msgstr "\"%{template_name}\" невідомий або неправильний"
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "(%d закрита)"
+msgstr[1] "(%d закриті)"
+msgstr[2] "(%d закритих)"
+msgstr[3] "(%d закритих)"
msgid "(%{mrCount} merged)"
msgstr "(%{mrCount} злито)"
@@ -384,18 +466,30 @@ msgstr "(%{mrCount} злито)"
msgid "(No changes)"
msgstr "(Ðемає змін)"
+msgid "(Show all)"
+msgstr "(Показати вÑе)"
+
msgid "(check progress)"
msgstr "(перевірити прогреÑ)"
msgid "(external source)"
msgstr "(зовнішнє джерело)"
+msgid "(removed)"
+msgstr "(видалено)"
+
+msgid "+ %{amount} more"
+msgstr "+ %{amount} більше"
+
msgid "+ %{count} more"
msgstr "+ ще %{count}"
msgid "+ %{moreCount} more"
msgstr "+ ще %{moreCount}"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr "+ %{numberOfHiddenAssignees} більше"
+
msgid "+%{extraOptionCount} more"
msgstr "+%{extraOptionCount} більше"
@@ -519,9 +613,6 @@ msgstr "20-29 внеÑків"
msgid "2FA"
msgstr "двофакторна автентифікаціÑ"
-msgid "2FA enabled"
-msgstr "Двофакторна Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð°"
-
msgid "2FADevice|Registered On"
msgstr "ЗареєÑтровано"
@@ -570,6 +661,9 @@ msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> дод
msgid "<no name set>"
msgstr "<Ñ–Ð¼â€™Ñ Ð½Ðµ задане>"
+msgid "<no scopes selected>"
+msgstr "<облаÑÑ‚ÑŒ дії не вибрано>"
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} неіндекÑованих</strong> та <strong>%{stagedFilesLength} індекÑованих</strong> змін"
@@ -606,6 +700,9 @@ msgstr "Сайт Hugo, Ñкий викориÑтовує Netlify Ð´Ð»Ñ CI/CD з
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "Сайт Jekyll, Ñкий викориÑтовує Netlify Ð´Ð»Ñ CI/CD заміÑÑ‚ÑŒ GitLab, але вÑе ще з уÑіма іншими чудовими функціÑми GitLab."
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr "Ðе можливо отримати SSL Ñертифікат Let's Encrypt до того Ñк ваш домен буде перевірено."
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr "Обліковий Ð·Ð°Ð¿Ð¸Ñ Let's Encrypt буде налаштовано Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції GitLab за допомогою вашої адреÑи електронної пошти. Ви будете отримувати лиÑти Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ñƒ дії Ñертифікатів."
@@ -642,6 +739,9 @@ msgstr "Готовий шаблон Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð· iOS Swift
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "РегулÑрний вираз, Ñкий буде викориÑтовуватиÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ результатів Ð¿Ð¾ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚ÐµÑтами в завданні. Залиште пуÑтим Ð´Ð»Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ"
+msgid "A secure token that identifies an external storage request."
+msgstr "Секретний токен Ñкий ідентфікує запити до зовнішнього Ñховища."
+
msgid "A user with write access to the source branch selected this option"
msgstr "КориÑтувач із правом запиÑу в гілку-джерело вибрав цей варіант"
@@ -651,6 +751,9 @@ msgstr "Довідка API"
msgid "API Token"
msgstr "API-токен"
+msgid "Abort"
+msgstr "Зупинити"
+
msgid "About GitLab"
msgstr "Про GitLab"
@@ -705,6 +808,66 @@ msgstr "Ролі"
msgid "AccessDropdown|Users"
msgstr "КориÑтувачі"
+msgid "AccessTokens|Access Tokens"
+msgstr "Токени доÑтупу"
+
+msgid "AccessTokens|Are you sure?"
+msgstr "Ви впевнені?"
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "Ви впевнені? Будь-Ñкі поточні RSS або URL-адреÑи календарів переÑтануть працювати."
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr "Ви впевнені? Будь-Ñкі поточні адреÑи електронної пошти Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ‡ переÑтануть працювати."
+
+msgid "AccessTokens|Created"
+msgstr "Створено"
+
+msgid "AccessTokens|Feed token"
+msgstr "Токен доÑтупу до каналів"
+
+msgid "AccessTokens|Incoming email token"
+msgstr "Токен Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… повідомлень електронної пошти"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "Ðе може бути викориÑтоно Ð´Ð»Ñ Ð´Ð¾Ñтупу до будь-Ñких інших даних."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr "Зберігайте цей токен в Ñекреті. Будь-хто, хто отримає до нього доÑтуп зможе отримувати доÑтуп до Ñтатичних об’єктів репозиторію від вашого імені. Ви повинні %{reset_link_start}перегенерувати його%{reset_link_end} Ñкщо це ÑтанетьÑÑ."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Зберігайте цей токен в Ñекреті. Будь-хто, хто отримає до нього доÑтуп зможе Ñтворювати задачі від вашого імені. Ви повинні %{link_reset_it} Ñкщо це ÑтанетьÑÑ."
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "Зберігайте цей токен в Ñекреті. Будь-хто, хто отримає до нього доÑтуп зможе читати RSS-канал активноÑÑ‚Ñ– та задач, а також канал вашого ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð²Ñ–Ð´ вашого імені. Ви повинні %{link_reset_it} Ñкщо це трапитьÑÑ."
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr "ОÑобиÑÑ‚Ñ– токени доÑтупу"
+
+msgid "AccessTokens|Static object token"
+msgstr "Токен Ñтатичних об’єктів"
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr "Вони Ñ” єдиними актуальними паролÑми, коли увімкнено двофакторну автентифікцію (2FA)."
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr "Ви також можете викориÑтовувати перÑональні токени доÑтупу Ð´Ð»Ñ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— в Git через HTTP."
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr "Ви можете згенерувати перÑональний токен доÑтупу Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ заÑтоÑунку, Ñкий ви викориÑтовуєти Ñ– Ñкий потребує доÑтупу до GitLab API."
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr "Ваш токен доÑтупу до каналів викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—, коли ваш переглÑдач RSS завантажує перÑоналізований канал RSS або коли ваша програма-календар завантажує перÑоналізований календар. Цей токен додаєтьÑÑ Ð´Ð¾ URL-Ð°Ð´Ñ€ÐµÑ ÐºÐ°Ð½Ð°Ð»Ñ–Ð²."
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr "Ваш токен Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… повідомлень електронної пошти викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—, коли ви Ñтворюєте нові задачі через електронну пошту Ñ– він Ñ” включений в ваші перÑональні адреÑи електронної пошти, Ñпеціфічні Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ."
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr "Ваш токен Ñтатичних об’єктів викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— коли Ñтатичні об’єкти репозиторію (напр. архіви, бінарні дані Ñ– Ñ‚. д.) зберігаютьÑÑ Ñƒ зовнішньому Ñховищі."
+
+msgid "AccessTokens|reset it"
+msgstr "перегенерувати його"
+
msgid "Account"
msgstr "Обліковий запиÑ"
@@ -723,6 +886,9 @@ msgstr "Ðктивувати Службу підтримки"
msgid "Active"
msgstr "Ðктивний"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr "Ðктивні %{type} токени (%{token_length})"
+
msgid "Active Sessions"
msgstr "Ðктивні ÑеÑÑ–Ñ—"
@@ -732,12 +898,22 @@ msgstr "ÐктивніÑÑ‚ÑŒ"
msgid "Add"
msgstr "Додати"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] "Додати %d задачу"
+msgstr[1] "Додати %d задачі"
+msgstr[2] "Додати %d задач"
+msgstr[3] "Додати %d задач"
+
msgid "Add CHANGELOG"
msgstr "Додати ÑпиÑок змін (CHANGELOG)"
msgid "Add CONTRIBUTING"
msgstr "Додати CONTRIBUTING"
+msgid "Add GitLab to Slack"
+msgstr "Додати GitLab до Slack"
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "Додайте групові веб-хуки та GitLab Enterprise Edition."
@@ -750,12 +926,27 @@ msgstr "Додати Kubernetes-клаÑтер"
msgid "Add README"
msgstr "Додати інÑтрукцію (README)"
+msgid "Add Zoom meeting"
+msgstr "Додати Zoom-зуÑтріч"
+
+msgid "Add a %{type} token"
+msgstr "Додати %{type} токен"
+
msgid "Add a GPG key"
msgstr "Додати GPG ключ"
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr "Додати кнопку Ð´Ð»Ñ Grafana в Ñекції моніторингу на бічній панелі адмініÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð´Ð¾Ñтупу до різноманітної ÑтатиÑтики Ñтану та продуктивноÑÑ‚Ñ– GitLab."
+
+msgid "Add a To Do"
+msgstr "Додати нагадуваннÑ"
+
msgid "Add a bullet list"
msgstr "Додати ненумерований ÑпиÑок"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr "Додайте загальний коментар до цього %{noteableDisplayName}."
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "Додайте загальний коментар до цього %{noteable_name}."
@@ -774,9 +965,6 @@ msgstr "Додати таблицю"
msgid "Add a task list"
msgstr "Додати ÑпиÑок завдань"
-msgid "Add a todo"
-msgstr "Додати нагадуваннÑ"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "Створіть додатковий текÑÑ‚, Ñкий буде приÑутній у вÑÑ–Ñ… повідомленнÑÑ… електронної пошти. МакÑимальна кількіÑÑ‚ÑŒ Ñимволів — %{character_limit}"
@@ -786,6 +974,9 @@ msgstr "Додати SSH ключ"
msgid "Add an issue"
msgstr "Додати задачу"
+msgid "Add approval rule"
+msgstr "Додати правило затвердженнÑ"
+
msgid "Add approvers"
msgstr "Додати затверджуючих оÑіб"
@@ -793,13 +984,13 @@ msgid "Add bold text"
msgstr "Додати жирний текÑÑ‚"
msgid "Add child epic to an epic"
-msgstr ""
+msgstr "Додати дочірній епік до епіка"
msgid "Add comment now"
msgstr "Додати коментар"
msgid "Add email address"
-msgstr "Додати email адреÑу"
+msgstr "Додати адреÑу електронної пошти"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
msgstr "Додати заголовок Ñ– футер в електронні лиÑти. Будь лаÑка, зверніть увагу, що Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñƒ будуть викориÑтовуватиÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ в інтерфейÑÑ– заÑтоÑунку"
@@ -807,6 +998,9 @@ msgstr "Додати заголовок і футер в електронні л
msgid "Add image comment"
msgstr "Додати коментар до зображеннÑ"
+msgid "Add issues"
+msgstr "Додати задачі"
+
msgid "Add italic text"
msgstr "Додати курÑивний текÑÑ‚"
@@ -825,17 +1019,26 @@ msgstr "Додати новий додаток"
msgid "Add new directory"
msgstr "Додати новий каталог"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr "Додати нового учаÑника до %{strong_start}%{group_name}%{strong_end}"
+
msgid "Add or subtract spent time"
msgstr "Додати або віднÑти витрачений чаÑ"
msgid "Add reaction"
msgstr "Додати реакцію"
+msgid "Add to Slack"
+msgstr "Додати в Slack"
+
+msgid "Add to epic"
+msgstr "Додати до епіку"
+
msgid "Add to merge train"
-msgstr ""
+msgstr "Додати до ланцюжка змін"
msgid "Add to merge train when pipeline succeeds"
-msgstr ""
+msgstr "Додати до ланцюжка змін піÑÐ»Ñ ÑƒÑпішного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð°"
msgid "Add to project"
msgstr "Додати до проекту"
@@ -843,8 +1046,8 @@ msgstr "Додати до проекту"
msgid "Add to review"
msgstr "Додати до перевірки"
-msgid "Add todo"
-msgstr "Додати нагадуваннÑ"
+msgid "Add to tree"
+msgstr "Додати до дерева"
msgid "Add user(s) to the group:"
msgstr "Додати кориÑтувачів до групу:"
@@ -858,9 +1061,27 @@ msgstr "Жодного кориÑтувача не вказано."
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "Вказано занадто багато кориÑтувачів (ліміт — %{user_limit})"
+msgid "Added"
+msgstr "Додано"
+
+msgid "Added %{epic_ref} as child epic."
+msgstr "Додано %{epic_ref} Ñк підепік."
+
+msgid "Added %{label_references} %{label_text}."
+msgstr "Додано %{label_references} %{label_text}."
+
+msgid "Added a To Do."
+msgstr "Додано нагадуваннÑ."
+
+msgid "Added an issue to an epic."
+msgstr "Додано задачу до епіку."
+
msgid "Added at"
msgstr "Додано"
+msgid "Added in this version"
+msgstr "Додано в цій верÑÑ–Ñ—"
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… проектів Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ інÑтанÑу GitLab заборонено. ЗвернітьÑÑ Ð´Ð¾ Ñвого адмініÑтратора GitLab, щоб отримати дозвіл"
@@ -874,11 +1095,20 @@ msgid "Adds"
msgstr "Додає"
msgid "Adds %{epic_ref} as child epic."
-msgstr ""
+msgstr "Додає %{epic_ref} Ñк дочірній епік."
+
+msgid "Adds %{labels} %{label_text}."
+msgstr "Додає %{labels} %{label_text}."
-msgid "Adds a todo."
+msgid "Adds a To Do."
msgstr "Додає нагадуваннÑ."
+msgid "Adds a Zoom meeting"
+msgstr "Додає Zoom-зуÑтріч"
+
+msgid "Adds an issue to an epic."
+msgstr "Додає задачу до епіку."
+
msgid "Admin Area"
msgstr "ОблаÑÑ‚ÑŒ адмініÑтратора"
@@ -912,6 +1142,9 @@ msgstr "Зупинка завдань пройшла невдало"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "Зараз ви зупинете вÑÑ– завданнÑ. Це обірве уÑÑ– запущені завданнÑ."
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr "Помилка при завантаженні ÑтатиÑтики. Будь лаÑка, Ñпробуйте знову"
+
msgid "AdminNote|Note"
msgstr "Примітка"
@@ -937,29 +1170,53 @@ msgid "AdminSettings|Environment variables are protected by default"
msgstr "Змінні Ñередовища Ñ” захищеними за замовчуваннÑм"
msgid "AdminSettings|No required pipeline"
-msgstr ""
+msgstr "ВідÑутній обов’Ñзковий конвеєр"
msgid "AdminSettings|Required pipeline configuration"
-msgstr ""
+msgstr "Ðеобхідна ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñƒ"
msgid "AdminSettings|Select a pipeline configuration file"
-msgstr ""
+msgstr "Виберіть конфігураційний файл конвеєра"
msgid "AdminSettings|Select a template"
-msgstr ""
+msgstr "Виберіть шаблон"
msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
-msgstr ""
+msgstr "Задати автоматичну %{link_start}конфігурацію контейнера%{link_end} Ð´Ð»Ñ Ñ–Ð½ÑтанÑу. Ð¦Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ñƒ буде запуÑкатиÑÑ Ð¿Ñ–ÑÐ»Ñ Ð²Ð»Ð°Ñної конфігурації проекту."
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
msgstr "Вкажіть домен, Ñкий буде викориÑтовуватиÑÑ Ð² проекті за замовчуваннÑм Ð´Ð»Ñ Ñтадій Auto Review Apps Ñ– Auto Deploy."
msgid "AdminSettings|The required pipeline configuration can be selected from the %{code_start}gitlab-ci%{code_end} directory inside of the configured %{link_start}instance template repository%{link_end} or from GitLab provided configurations."
-msgstr ""
+msgstr "Ðеобхідна ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ñ–Ð² може бути вибрана із директорії %{code_start}gitlab-ci%{code_end} в Ñконфігурованому %{link_start}репозиторії шаблонів інÑтанÑу%{link_end} або із конфігурацій, що надані GitLab."
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "При Ñтворенні нової змінної Ñередовища вона буде захищена за замовчуваннÑм."
+msgid "AdminStatistics|Active Users"
+msgstr "Ðктивні кориÑтувачі"
+
+msgid "AdminStatistics|Forks"
+msgstr "Форки"
+
+msgid "AdminStatistics|Issues"
+msgstr "Задачі"
+
+msgid "AdminStatistics|Merge Requests"
+msgstr "Запити на злиттÑ"
+
+msgid "AdminStatistics|Milestones"
+msgstr "Етапи"
+
+msgid "AdminStatistics|Notes"
+msgstr "Ðотатки"
+
+msgid "AdminStatistics|SSH Keys"
+msgstr "Ключі SSH"
+
+msgid "AdminStatistics|Snippets"
+msgstr "Сніпети"
+
msgid "AdminUsers|2FA Disabled"
msgstr "2FA вимкнено"
@@ -1048,7 +1305,7 @@ msgid "After a successful password update you will be redirected to login screen
msgstr "ПіÑÐ»Ñ ÑƒÑпішного Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð²Ð¸ перейдете на екран входу."
msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
-msgstr ""
+msgstr "ПіÑÐ»Ñ ÑƒÑпішного Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ ви будете перенаправлені на Ñторінку входу, де ви зможете увійти з новим паролем."
msgid "Alert"
msgid_plural "Alerts"
@@ -1057,6 +1314,12 @@ msgstr[1] "ПопередженнÑ"
msgstr[2] "Попереджень"
msgstr[3] "Попереджень"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr "%{linkStart}ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ%{linkEnd} про Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— кінцевої точки Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½ÑŒ."
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr "Кожне джерело попереджень повинно бути авторизоване за допомогою наÑтупної URL-адреÑи та ключа авторизації."
+
msgid "Alerts"
msgstr "ПопередженнÑ"
@@ -1066,11 +1329,17 @@ msgstr "Ð’ÑÑ–"
msgid "All Members"
msgstr "Ð’ÑÑ– учаÑники"
+msgid "All branches"
+msgstr "Ð’ÑÑ– гілки"
+
msgid "All changes are committed"
msgstr "Ð’ÑÑ– зміни закомічені"
+msgid "All cross-project dependencies have merged"
+msgstr "УÑÑ– міжпроектні залежноÑÑ‚Ñ– злито"
+
msgid "All email addresses will be used to identify your commits."
-msgstr ""
+msgstr "Ð’ÑÑ– адреÑи електронної пошти будуть викориÑтовуватиÑÑ Ð´Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— ваших комітів."
msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
msgstr "Ð’ÑÑ– функції Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… проектів берутьÑÑ Ñ–Ð· шаблонів або під Ñ‡Ð°Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ, але ви можете вимикати Ñ—Ñ… пізніше в налаштуваннÑÑ… проекту."
@@ -1087,9 +1356,6 @@ msgstr "УÑÑ– конфлікти Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð¾. Тепер за
msgid "All projects"
msgstr "Ð’ÑÑ– проекти"
-msgid "All todos were marked as done."
-msgstr "Ð’ÑÑ– Ð½Ð°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ– Ñк виконані."
-
msgid "All users"
msgstr "Ð’ÑÑ– кориÑтувачі"
@@ -1123,6 +1389,12 @@ msgstr "Дозволити Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ñ–Ð°Ð³Ñ€Ð°Ð¼ PlantUML в Ð
msgid "Allow requests to the local network from hooks and services."
msgstr "Дозволити запити до локальної мережі із хуків та ÑервіÑів."
+msgid "Allow requests to the local network from system hooks"
+msgstr "Дозволити запити до локальної мережі із ÑиÑтемних хуків"
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr "Дозволити запити до локальної мережі із вуб-хуків та ÑервіÑів"
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr "Дозволити цьому ключеві також відправлÑти зміни в репозиторій? (За замовчуваннÑм дозволÑєтьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ отримувати.)"
@@ -1135,6 +1407,9 @@ msgstr "Дозволити кориÑтувачам запитувати доÑÑ
msgid "Allow users to request access if visibility is public or internal."
msgstr "Дозволити кориÑтувачам запрошувати доÑтуп, Ñкщо видиміÑÑ‚ÑŒ загальнодоÑтупна або внутрішнÑ."
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "Ðевдача дозволена"
@@ -1147,14 +1422,8 @@ msgstr "Також відомий Ñк «Емітент» або «ІдентиÑ
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "Також називаєтьÑÑ \"URL-адреÑа Ñлужби перевірÑючої Ñторони\" або \"URL-адреÑа відповіді\""
-msgid "Alternate support URL for help page"
-msgstr "Ðльтернативна URL-адреÑа Ð´Ð»Ñ Ð´Ð¾Ð²Ñ–Ð´ÐºÐ¸"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "Крім того, ви можете викориÑтовувати %{personal_access_token_link}. Коли ви Ñтворюватимете Ñвій перÑональний токен доÑтупу, вам потрібно буде вибрати облаÑÑ‚ÑŒ дії <code>repo</code>, щоб ми могли відобразити ÑпиÑок ваших публічних та приватних репозиторіїв, доÑтупних Ð´Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ."
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Крім того, ви можете викориÑтовувати %{personal_access_token_link}. Коли ви Ñтворюватимете Ñвій перÑональний токен доÑтупу, вам потрібно буде вибрати облаÑÑ‚ÑŒ <code>repo</code>, щоб ми могли відобразити ÑпиÑок ваших публічних та приватних репозиторіїв, доÑтупних Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ."
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "Ð§Ð°Ñ (в годинах), впродовж Ñкого кориÑтувачам дозволено пропуÑкати примуÑове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð²Ð¾Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ñ— автентифікації"
@@ -1168,8 +1437,8 @@ msgstr "Порожнє поле Gitlab-кориÑтувача буде запоÐ
msgid "An error has occurred"
msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "Виникла помилка під Ñ‡Ð°Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ‡ÐµÑ€Ð½ÐµÑ‚ÐºÐ¸ до обговореннÑ."
+msgid "An error occurred adding a draft to the thread."
+msgstr "Помилка при додаванні чернетки до обговореннÑ."
msgid "An error occurred adding a new draft."
msgstr "Виникла помилка під Ñ‡Ð°Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— чернетки."
@@ -1228,6 +1497,9 @@ msgstr "Помилка при отриманні Ñередовищ."
msgid "An error occurred while fetching folder content."
msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при отриманні вміÑту папки."
+msgid "An error occurred while fetching issues."
+msgstr "Помилка при отриманні задач."
+
msgid "An error occurred while fetching label colors."
msgstr "Помилка при отриманні кольорів міток."
@@ -1270,6 +1542,9 @@ msgstr "Помилка при отриманні релізів. Будь лаÑ
msgid "An error occurred while fetching this tab."
msgstr "Помилка при отриманні цієї вкладки."
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при отриманні проектів"
@@ -1315,12 +1590,12 @@ msgstr "Помилка при видаленні епіків."
msgid "An error occurred while removing issues."
msgstr "Помилка при видаленні задач."
-msgid "An error occurred while rendering KaTeX"
-msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при рендерингу KaTeX"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "Помилка при попередньому переглÑді Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів"
+msgid "An error occurred while reordering issues."
+msgstr "Помилка при зміні порÑдку задач."
+
msgid "An error occurred while retrieving calendar activity"
msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при отриманні ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚Ñ–"
@@ -1339,6 +1614,12 @@ msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ
msgid "An error occurred while subscribing to notifications."
msgstr "Помилка при підпиÑці на ÑповіщеннÑ."
+msgid "An error occurred while triggering the job."
+msgstr "Помилка при запуÑку завданнÑ."
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "Помилка при відпиÑці від Ñповіщень."
@@ -1387,6 +1668,9 @@ msgstr "Помилка при завантаженні завдань конве
msgid "An error occurred. Please try again."
msgstr "СталаÑÑŒ помилка. Спробуйте ще раз."
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr "Задача може опиÑувати помилку, бути нагадуваннÑм або опиÑом нової функціональноÑÑ‚Ñ– Ð´Ð»Ñ Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð² проекті. Крім того задачі можна шукати та фільтрувати."
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "Ðеочікувана помилка при перевірці Ñередовища проекту."
@@ -1405,8 +1689,11 @@ msgstr "Ðеочікувана помилка при зупинці Веб-теÑ
msgid "Analytics"
msgstr "Ðналітика"
+msgid "Analytics|Timeframe"
+msgstr "Проміжок чаÑу"
+
msgid "Ancestors"
-msgstr ""
+msgstr "Предки"
msgid "Anonymous"
msgstr "Ðнонімно"
@@ -1429,6 +1716,9 @@ msgstr "Будь-Ñкі зашифровані токени"
msgid "Any namespace"
msgstr "Будь-Ñкий проÑÑ‚Ñ–Ñ€ імен"
+msgid "Any user"
+msgstr "Будь-Ñкий кориÑтувач"
+
msgid "Appearance"
msgstr "Зовнішній виглÑд"
@@ -1471,6 +1761,9 @@ msgstr "ЗаÑтоÑунки"
msgid "Applied"
msgstr "ЗаÑтоÑовано"
+msgid "Apply a label"
+msgstr "ЗаÑтоÑувати мітку"
+
msgid "Apply suggestion"
msgstr "ЗаÑтоÑувати пропозицію"
@@ -1520,8 +1813,8 @@ msgstr[3] "Потрібно %{count} затверджень від %{membersCoun
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr "Ð’ÑÑ– учаÑники з роллю Розробник або вище та влаÑники коду (Ñкщо Ñ”)"
-msgid "ApprovalRule|Members"
-msgstr "УчаÑники"
+msgid "ApprovalRule|Approvers"
+msgstr "Затверджуючі оÑоби"
msgid "ApprovalRule|Name"
msgstr "Ім'Ñ"
@@ -1529,12 +1822,27 @@ msgstr "Ім'Ñ"
msgid "ApprovalRule|No. approvals required"
msgstr "Ðеобхідна кількіÑÑ‚ÑŒ затверджень"
+msgid "ApprovalRule|Rule name"
+msgstr "Ð†Ð¼â€™Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð°"
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr "наприклад QA, безпека і т. д."
msgid "Approvals"
msgstr "ЗатвердженнÑ"
+msgid "Approve"
+msgstr "Затвердити"
+
+msgid "Approve a merge request"
+msgstr "Затвердити запит на злиттÑ"
+
+msgid "Approve the current merge request."
+msgstr "Затвердити поточний запит на злиттÑ."
+
+msgid "Approved the current merge request."
+msgstr "Затверджено поточний запит на злиттÑ."
+
msgid "Apr"
msgstr "квіт."
@@ -1571,6 +1879,15 @@ msgstr "Ви впевнені, що хочете ÑкаÑувати цей коÐ
msgid "Are you sure you want to cancel editing this comment?"
msgstr "Ви впевнені, що хочете ÑкаÑувати Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ коментарÑ?"
+msgid "Are you sure you want to delete these artifacts?"
+msgstr "Ви впевнені, що бажаєте видалити ці артефакти?"
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr "Ви впевнені що хочете видалити цей %{typeOfComment}?"
+
+msgid "Are you sure you want to delete this board?"
+msgstr "Ви дійÑно бажаєте видалити цю дошку?"
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr "Ви впевнені, що хочете видалити цей приÑтрій? Цю дію неможливо ÑкаÑувати."
@@ -1613,6 +1930,9 @@ msgstr "Ви впевнені, що хочете Ñкинути токен SCIM?
msgid "Are you sure you want to reset the health check token?"
msgstr "Ви впевнені, що Ви хочете перегенерувати цей ключ перевірки працездатноÑÑ‚Ñ–?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr "Ви впевнені, що бажаєте видалити цей %{type} токен? Ð¦Ñ Ð´Ñ–Ñ Ð½Ðµ може бути ÑкаÑована."
+
msgid "Are you sure you want to revoke this nickname?"
msgstr "Ви впевнені, що хочете ÑкаÑувати цей пÑевдонім?"
@@ -1629,10 +1949,10 @@ msgid "Are you sure?"
msgstr "Ви впевнені?"
msgid "Are you sure? All commits that were signed with this GPG key will be unverified."
-msgstr ""
+msgstr "Ви впевнені? Ð’ÑÑ– коміти, що були підпиÑані за допомогою GPG ключа не будуть перевірені."
msgid "Are you sure? Removing this GPG key does not affect already signed commits."
-msgstr ""
+msgstr "Ви впевнені? Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ GPG ключа не впливає на коміти, що вже були підпиÑані."
msgid "Are you sure? This will invalidate your registered applications and U2F devices."
msgstr "Ви впевнені? Це призведе до Ð°Ð½ÑƒÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ñ€ÐµÑ”Ñтрованих заÑтоÑунків та U2F приÑтроїв."
@@ -1640,6 +1960,12 @@ msgstr "Ви впевнені? Це призведе до Ð°Ð½ÑƒÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ð
msgid "Artifact ID"
msgstr "ID артефакту"
+msgid "Artifact could not be deleted."
+msgstr "Ðртефакт не може бути видалено."
+
+msgid "Artifact was successfully deleted."
+msgstr "Ðртефакт було уÑпішно видалено."
+
msgid "Artifacts"
msgstr "Ðртефакти"
@@ -1676,6 +2002,9 @@ msgstr "Призначити"
msgid "Assign custom color like #FF0000"
msgstr "Призначити влаÑний колір типу #FF0000"
+msgid "Assign epic"
+msgstr "Призначити епік"
+
msgid "Assign labels"
msgstr "Призначити мітку"
@@ -1694,6 +2023,9 @@ msgstr "Призначити ці задачі Ñобі"
msgid "Assign yourself to this issue"
msgstr "Призначити цю задачу Ñобі"
+msgid "Assigned %{assignee_users_sentence}."
+msgstr "Призначено %{assignee_users_sentence}."
+
msgid "Assigned Issues"
msgstr "Призначені задачі"
@@ -1704,7 +2036,11 @@ msgid "Assigned to me"
msgstr "Призначено мені"
msgid "Assignee"
-msgstr "Виконавець"
+msgid_plural "%d Assignees"
+msgstr[0] "Виконавець"
+msgstr[1] "%d Виконавці"
+msgstr[2] "%d Виконавців"
+msgstr[3] "%d Виконавців"
msgid "Assignee lists not available with your current license"
msgstr "СпиÑки виконавців не доÑтупні з вашою поточною ліцензією"
@@ -1715,6 +2051,9 @@ msgstr "СпиÑки виконавців показують уÑÑ– задачі
msgid "Assignee(s)"
msgstr "Виконавець(ці)"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr "Призначає %{assignee_users_sentence}."
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr "Потрібне щонайменше одне Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ влаÑника коду Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸ файлів, що задовільнÑÑŽÑ‚ÑŒ відповідним правилам CODEOWNER."
@@ -1737,12 +2076,21 @@ msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¸ÐºÑ€Ñ–Ð¿Ð¸Ñ‚Ð¸ файл."
msgid "Audit Events"
msgstr "Події аудиту"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr "Події аудиту дозволÑÑŽÑ‚ÑŒ відÑтежувати важливі події, що відбуваютьÑÑ Ð² GitLab."
+
msgid "Aug"
msgstr "Ñерп."
msgid "August"
msgstr "Ñерпень"
+msgid "Authenticate"
+msgstr "Ðвтентифікувати"
+
+msgid "Authenticate with GitHub"
+msgstr "Ðвтентифікувати за допомогою GitHub"
+
msgid "Authentication Log"
msgstr "Журнал автентифікації"
@@ -1800,6 +2148,9 @@ msgstr "Auto DevOps увімкнено"
msgid "Auto DevOps, runners and job artifacts"
msgstr "Auto DevOps, runner'и і артефакти завдань"
+msgid "Auto License Compliance"
+msgstr "Ðвтоматична відповідніÑÑ‚ÑŒ ліцензіÑм"
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "Ðвтоматичне ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð´Ð»Ð¸ÑˆÐºÐ¾Ð²Ð¸Ñ…, очікуючих конвеєрів"
@@ -1821,11 +2172,23 @@ msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ в %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Конвеєр Auto DevOps увімкнено Ñ– буде викориÑтовуватиÑÑ, Ñкщо не знайдено жодного альтернативного файлу конфігурації CI. %{more_information_link}"
+msgid "Autocomplete"
+msgstr "ÐвтодоповненнÑ"
+
+msgid "Autocomplete description"
+msgstr "ÐÐ²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¾Ð¿Ð¸Ñу"
+
+msgid "Autocomplete hint"
+msgstr "Підказка про автодоповненнÑ"
+
+msgid "Autocomplete usage hint"
+msgstr "Підказка щодо автодоповненнÑ"
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
-msgstr ""
+msgstr "Ðвтоматичне ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñертифікатами за допомогою %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgid "Automatic certificate management using Let's Encrypt"
-msgstr ""
+msgstr "Ðвтоматичне ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñертифікатами за допомогою Let's Encrypt"
msgid "Automatically marked as default internal user"
msgstr "Ðвтоматично позначено Ñк внутрішній кориÑтувач за замовчуваннÑм"
@@ -1834,7 +2197,7 @@ msgid "Automatically resolved"
msgstr "Вирішено автоматично"
msgid "Automatically update this project's branches and tags from the upstream repository every hour."
-msgstr ""
+msgstr "Ðвтоматично оноÑлювати гілки та теги цього проекту із репозиторію upstream щогодини."
msgid "Autosave|Note"
msgstr "Примітка"
@@ -1960,19 +2323,19 @@ msgid "BambooService|A continuous integration and build server"
msgstr "Сервер безперервної інтеграції та збірки"
msgid "BambooService|A user with API access, if applicable"
-msgstr ""
+msgstr "КориÑтувач із доÑтупом до API, Ñкщо можливо"
msgid "BambooService|Atlassian Bamboo CI"
msgstr "Atlassian Bamboo CI"
msgid "BambooService|Bamboo build plan key like KEY"
-msgstr ""
+msgstr "Ключ плану збірки Bamboo, наприклад KEY"
msgid "BambooService|Bamboo root URL like https://bamboo.example.com"
-msgstr ""
+msgstr "Коренева URL-адреÑа Bamboo, наприклад https://bamboo.example.com"
msgid "BambooService|You must set up automatic revision labeling and a repository trigger in Bamboo."
-msgstr ""
+msgstr "Ви повинні налаштувати автоматичне вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–Ñ‚Ð¾Ðº на ревізії, а також тригер репозиторію в Bamboo."
msgid "BatchComments|Delete all pending comments"
msgstr "Видалити вÑÑ– коментарі в очікуванні"
@@ -1984,10 +2347,10 @@ msgid "BatchComments|You're about to discard your review which will delete all o
msgstr "Ви збираєтеÑÑ Ð²Ñ–Ð´Ñ…Ð¸Ð»Ð¸Ñ‚Ð¸ ваш відгук, що призведе до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… ваших коментарів в очікуванні. Видалені коментарі %{strong_start}не можливо%{strong_end} буде відновити."
msgid "Be careful. Changing the project's namespace can have unintended side effects."
-msgstr ""
+msgstr "Будьте обережні. Зміна проÑтору імен проекту може мати небажані побічні ефекти."
msgid "Be careful. Renaming a project's repository can have unintended side effects."
-msgstr ""
+msgstr "Будьте обережні. ÐŸÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–ÑŽ проекту може мати небажані побічні ефекти."
msgid "Begin with the selected commit"
msgstr "Почати із виділеного коміту"
@@ -2001,32 +2364,32 @@ msgstr "Ðижче ви знайдете вÑÑ– загальнодоÑтупні
msgid "Billing"
msgstr "Білінг"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} зараз має план %{plan_link}."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr "%{group_name} наразі викориÑтовує план %{plan_link}."
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "Ðвтоматичні Ð¿Ð¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° Ð¿Ñ–Ð´Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð´Ð¾ деÑких планів зараз не доÑтупні."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr "@%{user_name} наразі ви викориÑтовуєте план %{plan_link}."
msgid "BillingPlans|Current plan"
msgstr "Поточний план"
-msgid "BillingPlans|Customer Support"
-msgstr "Служба підтримки"
-
msgid "BillingPlans|Downgrade"
msgstr "Понизити"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr "Якщо ви хочете перейти на нижчий план, будь лаÑка, зв'ÑжітьÑÑ Ð· %{support_link_start}Службою підтримки%{support_link_end}."
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про кожен план, прочитавши наш %{faq_link}, або розпочніть безкоштовну 30-денну пробну верÑÑ–ÑŽ GitLab.com Gold."
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про кожен план, читаючи наш %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про кожен план перейшовши на %{pricing_page_link}."
msgid "BillingPlans|Manage plan"
msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð¿Ð»Ð°Ð½Ð¾Ð¼"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "Будь лаÑка, в цьому випадку зв'ÑжітьÑÑ Ð· %{customer_support_link}."
+msgid "BillingPlans|Pricing page"
+msgstr "Сторінка цін"
msgid "BillingPlans|See all %{plan_name} features"
msgstr "ПодивітьÑÑ Ð²ÑÑ– можливоÑÑ‚Ñ– %{plan_name}"
@@ -2040,14 +2403,11 @@ msgstr "Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð¿Ð»Ð°Ð½Ð¾Ð¼ цієї групи відвіÐ
msgid "BillingPlans|Upgrade"
msgstr "Підвищити"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "Зараз ви викориÑтовуєте план %{plan_link}."
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "Ваша пробна верÑÑ–Ñ GitLab.com закінчилаÑÑ %{expiration_date}. %{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "Ваша пробна Gold верÑÑ–Ñ <strong>закінчитьÑÑ Ð¿Ñ–ÑÐ»Ñ %{expiration_date}</strong>. Ви можете дізнатиÑÑŒ більше про GitLab.com Gold верÑÑ–ÑŽ, прочитавши наш %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "функції"
@@ -2064,6 +2424,9 @@ msgstr "ОплачуєтьÑÑ Ñ‰Ð¾Ñ€Ñ–Ñ‡Ð½Ð¾ %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "За кориÑтувача"
+msgid "BillingPlan|Upgrade plan"
+msgstr "Перейти на вищий тарифний план"
+
msgid "Bitbucket Server Import"
msgstr "Імпорт з Bitbucket Server"
@@ -2076,34 +2439,50 @@ msgstr "Заблокувати"
msgid "Blocked"
msgstr "Заблокований"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-
msgid "Blog"
msgstr "Блог"
msgid "Blue helpers indicate an action to be taken."
-msgstr ""
+msgstr "Сині вказівники вказують на дії, Ñкі необхідно виконати."
+
+msgid "Board name"
+msgstr "Ðазва дошки"
+
+msgid "Board scope"
+msgstr "ОблаÑÑ‚ÑŒ видимоÑÑ‚Ñ– дошки"
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr "ОблаÑÑ‚ÑŒ видимоÑÑ‚Ñ– дошки впливає на те, Ñкі задачі відображаютьÑÑ Ð´Ð»Ñ Ñ‚Ð¸Ñ…, хто Ñ—Ñ— переглÑдає"
+
+msgid "BoardBlankState|Add default lists"
+msgstr "Додати Ñтандартні ÑпиÑки"
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr "Додати наÑтупні Ñтандартні ÑпиÑки до вашої дошки задач за допомогою одного кліка:"
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr "Забудьте, Ñ Ð±ÑƒÐ´Ñƒ викориÑтовувати влаÑні"
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr "Початок роботи з типовим набором ÑпиÑків допоможе вам отримати макÑимальну кориÑÑ‚ÑŒ від вашої дошки."
msgid "Boards"
msgstr "Дошки"
+msgid "Boards|Collapse"
+msgstr "Згорнути"
+
msgid "Boards|Edit board"
-msgstr ""
+msgstr "Редагувати дошку"
+
+msgid "Boards|Expand"
+msgstr "Розгорнути"
msgid "Boards|View scope"
-msgstr ""
+msgstr "ПереглÑнути облаÑÑ‚ÑŒ видимоÑÑ‚Ñ–"
+
+msgid "Branch"
+msgstr "Гілка"
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "Гілка %{branchName} відÑÑƒÑ‚Ð½Ñ Ð² репозиторії цього проекту."
@@ -2267,6 +2646,9 @@ msgstr "ПереглÑнути файл"
msgid "Browse Files"
msgstr "ПереглÑд файлів"
+msgid "Browse artifacts"
+msgstr "ПереглÑнути артефакти"
+
msgid "Browse files"
msgstr "ПереглÑд файлів"
@@ -2277,7 +2659,7 @@ msgid "BurndownChartLabel|Guideline"
msgstr "Керівництво"
msgid "BurndownChartLabel|Open issue weight"
-msgstr ""
+msgstr "Відкрити вагу задачі"
msgid "BurndownChartLabel|Open issues"
msgstr "Відкриті задачі"
@@ -2378,8 +2760,11 @@ msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Auto DevOps"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "Конвеєр Auto DevOps буде запущено, Ñкщо не буде знайдено альтернативного файлу конфігуріції CI."
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
-msgstr "Ви повинні додати %{kubernetes_cluster_start}клаÑтерну інтеграцію Kubernetes%{kubernetes_cluster_end} до цього проекту з доменом Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ— роботи Ñтратегії розгортаннÑ."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr "Ви повинні додати %{kubernetes_cluster_link_start}клаÑтерну інтеграцію Kubernetes%{link_end} до цього проекту з доменом Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ— роботи Ñтратегії розгортаннÑ."
msgid "CICD|group enabled"
msgstr "група увімкнена"
@@ -2387,6 +2772,12 @@ msgstr "група увімкнена"
msgid "CICD|instance enabled"
msgstr "ІнÑÑ‚Ð°Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾"
+msgid "CLOSED"
+msgstr "ЗÐКРИТО"
+
+msgid "CLOSED (MOVED)"
+msgstr "ЗÐКРИТО (ПЕРЕМІЩЕÐО)"
+
msgid "CONTRIBUTING"
msgstr "CONTRIBUTING"
@@ -2406,7 +2797,7 @@ msgid "Can't remove group members without group managed account"
msgstr "Ðеможливо видалити учаÑників групи без облікових запиÑів, що керуютьÑÑ Ð³Ñ€ÑƒÐ¿Ð¾ÑŽ"
msgid "Can't scan the code?"
-msgstr ""
+msgstr "Ðеможливо Ñканувати код?"
msgid "Canary Deployments is a popular CI strategy, where a small portion of the fleet is updated to the new version of your application."
msgstr "Canary Deployments — це популÑрна ÑÑ‚Ñ€Ð°Ñ‚ÐµÐ³Ñ–Ñ Ð±ÐµÐ·Ð¿ÐµÑ€ÐµÑ€Ð²Ð½Ð¾Ñ— інтеграції, коли нова верÑÑ–Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ заÑтоÑунку вÑтановлюєтьÑÑ Ð½Ð° невелику кількіÑÑ‚ÑŒ машин."
@@ -2414,26 +2805,35 @@ msgstr "Canary Deployments — це популÑрна ÑÑ‚Ñ€Ð°Ñ‚ÐµÐ³Ñ–Ñ Ð±ÐµÐ·
msgid "Cancel"
msgstr "СкаÑувати"
+msgid "Cancel running"
+msgstr "СкаÑувати запуÑк"
+
msgid "Cancel this job"
msgstr "СкаÑувати це завданнÑ"
+msgid "Cancelling Preview"
+msgstr "СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду"
+
msgid "Cannot be merged automatically"
msgstr "Ðеможливо злити автоматично"
msgid "Cannot create the abuse report. The user has been deleted."
-msgstr ""
+msgstr "Ðеможливо Ñтворити звіт про зловживаннÑ. КориÑтувача було видалено."
msgid "Cannot create the abuse report. This user has been blocked."
-msgstr ""
+msgstr "Ðеможливо Ñтворити звіт про зловживаннÑ. КориÑтувача було заблоковано."
+
+msgid "Cannot merge"
+msgstr "Ðе може виконувати злиттÑ"
msgid "Cannot modify managed Kubernetes cluster"
msgstr "Ðеможливо змінити керований клаÑтер Kubernetes"
msgid "Cannot refer to a group milestone by an internal id!"
-msgstr ""
+msgstr "Ðеможливо поÑилатиÑÑ Ð½Ð° груповий етап через внутрішній ідентифікатор!"
msgid "Cannot render the image. Maximum character count (%{charLimit}) has been exceeded."
-msgstr ""
+msgstr "Ðеможливо показати зображеннÑ. Перевищено макÑимальну кількіÑÑ‚ÑŒ Ñимволів (%{charLimit})."
msgid "Cannot show preview. For previews on sketch files, they must have the file format introduced by Sketch version 43 and above."
msgstr "Ðеможливо показати попередній переглÑд. Ð”Ð»Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду файлів Sketch, вони повинні мати формат, введений верÑією 43 або вище."
@@ -2442,7 +2842,7 @@ msgid "Cannot skip two factor authentication setup"
msgstr "Ðеможливо пропуÑтити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð²Ð¾Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ñ— автентифікації"
msgid "Capacity threshold"
-msgstr ""
+msgstr "Поріг пропуÑкної здатноÑÑ‚Ñ–"
msgid "Certificate"
msgstr "Сертифікат"
@@ -2453,12 +2853,21 @@ msgstr "Сертифікат (PEM)"
msgid "Change Weight"
msgstr "Змінити вагу"
+msgid "Change assignee"
+msgstr "Змінити виконавцÑ"
+
msgid "Change assignee(s)"
msgstr "Змінити виконавцÑ(ців)"
msgid "Change assignee(s)."
msgstr "Змінити виконавцÑ(ців)."
+msgid "Change label"
+msgstr "Змінити мітку"
+
+msgid "Change milestone"
+msgstr "Змінити етап"
+
msgid "Change path"
msgstr "Змінити шлÑÑ…"
@@ -2478,7 +2887,7 @@ msgid "Change your password"
msgstr "Змінити пароль"
msgid "Change your password or recover your current one"
-msgstr ""
+msgstr "Змініть пароль або відновіть поточний"
msgid "ChangeTypeActionLabel|Pick into branch"
msgstr "Вибрати в гілці"
@@ -2495,6 +2904,12 @@ msgstr "Ðнулювати коміт"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "Це Ñтворить новий коміт, щоб анулювати Ñ–Ñнуючі зміни."
+msgid "Changed assignee(s)."
+msgstr "Змінено виконавцÑ(ців)."
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr "Змінено заголовок на \"%{title_param}\"."
+
msgid "Changes"
msgstr "Зміни"
@@ -2502,13 +2917,13 @@ msgid "Changes are shown as if the <b>source</b> revision was being merged into
msgstr "Зміни відображаютьÑÑ Ñ‚Ð°Ðº, ніби <b>редакціÑ-джерело</b> була злита в <b>цільову редакцію</b>."
msgid "Changes suppressed. Click to show."
-msgstr ""
+msgstr "Зміни приховано. ÐатиÑніть щоб показати."
msgid "Changes the title to \"%{title_param}\"."
msgstr "Змінює заголовок на \"%{title_param}\"."
msgid "Changes won't take place until the index is %{link_start}recreated%{link_end}."
-msgstr ""
+msgstr "Зміни не будуть заÑтоÑовані, поки Ñ–Ð½Ð´ÐµÐºÑ Ð½Ðµ буде %{link_start}перегенерований%{link_end}."
msgid "Charts"
msgstr "СтатиÑтика"
@@ -2516,11 +2931,62 @@ msgstr "СтатиÑтика"
msgid "Chat"
msgstr "Чат"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr "%{project_link}: Конвеєр %{pipeline_link} із %{ref_type} %{branch_link} запущено %{user_combined_name} %{humanized_status} через %{duration}"
+
+msgid "ChatMessage|Branch"
+msgstr "Гілка"
+
+msgid "ChatMessage|Commit"
+msgstr "Коміт"
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr "Конвеєр #%{pipeline_id} %{humanized_status} в %{duration}"
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr "Тег"
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr "і [%{count} більше](%{pipeline_failed_jobs_url})"
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr "Перевірити знову"
msgid "Check feature availability on namespace plan"
-msgstr ""
+msgstr "Перевірити наÑвніÑÑ‚ÑŒ функціональноÑÑ‚Ñ– в плані Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтору імен"
msgid "Check the %{docs_link_start}documentation%{docs_link_end}."
msgstr "ПереглÑньте %{docs_link_start}документацію%{docs_link_end}."
@@ -2558,6 +3024,9 @@ msgstr "Виберіть гілку чи тег (напр. %{master}) або вÐ
msgid "Choose a file"
msgstr "Виберіть файл"
+msgid "Choose a group"
+msgstr "Вибрати групу"
+
msgid "Choose a role permission"
msgstr "Вибрати роль"
@@ -2594,9 +3063,6 @@ msgstr "Виберіть, Ñкі репозиторії ви хочете під
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "Виберіть Ñегменти Ð´Ð»Ñ Ñинхронізації на цей вторинний вузол."
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "ÑкаÑовано"
@@ -2685,7 +3151,10 @@ msgid "CiVariables|Remove variable row"
msgstr "Видалити Ñ€Ñдок змінних"
msgid "CiVariables|Scope"
-msgstr "Межі"
+msgstr "ОблаÑÑ‚ÑŒ видимоÑÑ‚Ñ–"
+
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
msgid "CiVariables|State"
msgstr "Стан"
@@ -2696,6 +3165,9 @@ msgstr "Тип"
msgid "CiVariables|Value"
msgstr "ЗначеннÑ"
+msgid "CiVariables|Variables"
+msgstr "Змінні"
+
msgid "CiVariable|* (All environments)"
msgstr "* (Ð’ÑÑ– Ñередовища)"
@@ -2741,15 +3213,24 @@ msgstr "ОчиÑтити"
msgid "Clear input"
msgstr "ОчиÑтити ввід"
+msgid "Clear recent searches"
+msgstr "ОчиÑтити недавні пошуки"
+
msgid "Clear search"
msgstr "ОчиÑтити пошук"
msgid "Clear search input"
msgstr "ОчиÑтити поле вводу"
+msgid "Clear templates search input"
+msgstr "ОчиÑтити поле вводу Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ шаблонів"
+
msgid "Clear weight"
msgstr "ОчиÑтити вагу"
+msgid "Cleared weight."
+msgstr "Вагу очищено."
+
msgid "Clears weight."
msgstr "Очищає вагу."
@@ -2771,6 +3252,9 @@ msgstr "ÐатиÑніть кнопку <strong>Обрати нічого</stron
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "ÐатиÑніть кнопку нижче, щоб розпочати Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð²ÑтановленнÑ, перейшовши на Ñторінку Kubernetes"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "ÐатиÑніть, щоб розгорнути його."
@@ -2807,6 +3291,9 @@ msgstr "Клонувати з SSH"
msgid "Close"
msgstr "Закрити"
+msgid "Close %{tabname}"
+msgstr "Закрити %{tabname}"
+
msgid "Close epic"
msgstr "Закрити епік"
@@ -2816,12 +3303,27 @@ msgstr "Закрити етап"
msgid "Close sidebar"
msgstr "Закрити бічну панель"
+msgid "Close this %{quick_action_target}"
+msgstr "Закрити %{quick_action_target}"
+
msgid "Closed"
msgstr "Закрито"
msgid "Closed issues"
msgstr "Закриті задачі"
+msgid "Closed this %{quick_action_target}."
+msgstr "Закрито %{quick_action_target}."
+
+msgid "Closes this %{quick_action_target}."
+msgstr "Закриває %{quick_action_target}."
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr "Стан клаÑтера"
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr "%{custom_domain_start}Детальніше%{custom_domain_end}."
@@ -2847,7 +3349,7 @@ msgid "ClusterIntegration|API URL"
msgstr "API URL"
msgid "ClusterIntegration|API URL should be a valid http/https url."
-msgstr ""
+msgstr "API URL має бути дійÑною HTTP/HTTPS адреÑою."
msgid "ClusterIntegration|Add Kubernetes cluster"
msgstr "Додати Kubernetes клаÑтер"
@@ -2859,26 +3361,32 @@ msgid "ClusterIntegration|Adding a Kubernetes cluster to your group will automat
msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ñтера Kubernetes до вашої групи автоматично зробить його доÑтупним у вÑÑ–Ñ… ваших проектах. ВикориÑтовуйте Review Apps, розгортайте заÑтоÑунки Ñ– легко запуÑкайте Ñвої конвеєри Ð´Ð»Ñ Ð²ÑÑ–Ñ… проектів з викориÑтаннÑм цього клаÑтера."
msgid "ClusterIntegration|Adding a Kubernetes cluster will automatically share the cluster across all projects. Use review apps, deploy your applications, and easily run your pipelines for all projects using the same cluster."
-msgstr ""
+msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ñтера Kubernetes автоматично зробить його доÑтупним у вÑÑ–Ñ… ваших проектах. ВикориÑтовуйте Review Apps, розгортайте заÑтоÑунки Ñ– легко запуÑкайте Ñвої конвеєри Ð´Ð»Ñ Ð²ÑÑ–Ñ… проектів з викориÑтаннÑм цього клаÑтера."
msgid "ClusterIntegration|Adding an integration to your group will share the cluster across all your projects."
msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— до вашої групи надаÑÑ‚ÑŒ доÑтуп до клаÑтера у вÑÑ–Ñ… ваших проектах."
msgid "ClusterIntegration|Adding an integration will share the cluster across all projects."
-msgstr ""
+msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— надаÑÑ‚ÑŒ доÑтуп до клаÑтера у вÑÑ–Ñ… ваших проектах."
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Детальні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— із цим Kubernetes-клаÑтером"
-msgid "ClusterIntegration|All data will be deleted and cannot be restored."
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|All data will be deleted and cannot be restored."
+msgstr "Ð’ÑÑ– дані буде видалено Ñ– вони не зможуть бути відновлені."
+
msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster."
-msgstr ""
+msgstr "Дозволити GitLab керувати проÑторами імен (namespace) та Ñлужбовими обліковими запиÑами (service account) в цьому клаÑтері."
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr "Amazon EKS"
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "Помилка під Ñ‡Ð°Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· Google Cloud API. Будь лаÑка, Ñпробуйте знову пізніше."
@@ -2892,7 +3400,7 @@ msgid "ClusterIntegration|An error occurred while trying to fetch zone machine t
msgstr "Помилка при отриманні типів машин зони: %{error}"
msgid "ClusterIntegration|Any running pipelines will be canceled."
-msgstr ""
+msgstr "УÑÑ– запущені конвеєри буде зупинено."
msgid "ClusterIntegration|Applications"
msgstr "ЗаÑтоÑунки"
@@ -2918,17 +3426,23 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "Ðабір Ñертифікатів (формат PEM)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "Виберіть, Ñкі заÑтоÑунки необхідно вÑтановити на ваш клаÑтер Kubernetes. Ð”Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´ÑŒ-Ñкого з наÑтупних заÑтоÑунків потрібен Helm Tiller."
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "Виберіть, Ñке із ваших Ñередовищ буде викориÑтовувати цей клаÑтер."
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr "Стан клаÑтера"
msgid "ClusterIntegration|Cluster name is required."
-msgstr ""
+msgstr "Ім'Ñ ÐºÐ»Ð°Ñтера Ñ” обов'Ñзковим."
msgid "ClusterIntegration|Clusters are utilized by selecting the nearest ancestor with a matching environment scope. For example, project clusters will override group clusters."
msgstr ""
@@ -2940,13 +3454,13 @@ msgid "ClusterIntegration|Copy CA Certificate"
msgstr "Скопіювати Ñертифікат центру Ñертифікації"
msgid "ClusterIntegration|Copy Ingress Endpoint to clipboard"
-msgstr ""
+msgstr "Копіювати кінцеву точку Ingress в буфер обміну"
msgid "ClusterIntegration|Copy Jupyter Hostname to clipboard"
msgstr "Скопіювати Ñ–Ð¼â€™Ñ Ñ…Ð¾Ñта Jupyter в буфер обміну"
msgid "ClusterIntegration|Copy Knative Endpoint to clipboard"
-msgstr ""
+msgstr "Копіювати кінцеву точку Knative в буфер обміну"
msgid "ClusterIntegration|Copy Kubernetes cluster name"
msgstr "Скопіювати Ñ–Ð¼â€™Ñ Kubernetes-клаÑтера"
@@ -2954,12 +3468,21 @@ msgstr "Скопіювати Ñ–Ð¼â€™Ñ Kubernetes-клаÑтера"
msgid "ClusterIntegration|Copy Service Token"
msgstr "Скопіювати токен ÑервіÑа"
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "Створити Kubernetes-клаÑтер"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "Чи знаєте ви?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "Увімкніть або вимкніть Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ GitLab до клаÑтера Kubernetes."
@@ -2976,13 +3499,13 @@ msgid "ClusterIntegration|Every new Google Cloud Platform (GCP) account receives
msgstr "Кожен новий обліковий Ð·Ð°Ð¿Ð¸Ñ Ð² Google Cloud Platform (GCP) отримує $300 на Ñвій рахунок при %{sign_up_link}. GitLab (у партнерÑтві із Google) пропонує додаткові $200 Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… облікових запиÑів GCP, Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸ÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ”ÑŽ GitLab з Google Kubernetes Engine."
msgid "ClusterIntegration|Failed to configure Google Kubernetes Engine Cluster: %{message}"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ клаÑтер Google Kubernetes Engine: %{message}"
msgid "ClusterIntegration|Failed to request to Google Cloud Platform: %{message}"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð½Ð°Ð´Ñ–Ñлати запит до Google Cloud Platform: %{message}"
msgid "ClusterIntegration|Failed to run Kubeclient: %{message}"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Kubeclient: %{message}"
msgid "ClusterIntegration|Fetching machine types"
msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ñ–Ð² машин"
@@ -3000,14 +3523,17 @@ msgid "ClusterIntegration|GitLab Runner"
msgstr "GitLab Runner"
msgid "ClusterIntegration|GitLab Runner connects to the repository and executes CI/CD jobs, pushing results back and deploying applications to production."
-msgstr ""
+msgstr "Runner Gitlab з’єднуєтьÑÑ Ñ–Ð· репозиторієм та запуÑкає Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ CI/CD, повертаючи результати та розгортаючи заÑтоÑунки в production."
msgid "ClusterIntegration|GitLab-managed cluster"
-msgstr ""
+msgstr "КлаÑтер, що керуєтьÑÑ GitLab"
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Проект Google Cloud Platform"
+msgid "ClusterIntegration|Google GKE"
+msgstr "Google GKE"
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -3030,22 +3556,22 @@ msgid "ClusterIntegration|If you are setting up multiple clusters and are using
msgstr "Якщо ви налаштовуєте декілька клаÑтерів Ñ– викориÑтовуєте Auto DevOps, %{help_link_start}прочитайте Ð´Ð»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ це%{help_link_end}."
msgid "ClusterIntegration|In order to view the health of your cluster, you must first install Prometheus below."
-msgstr ""
+msgstr "Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду Ñтану вашого клаÑтера, вам необхідно Ñпочатку вÑтановити Prometheus нижче."
msgid "ClusterIntegration|Ingress"
msgstr "Ingress"
msgid "ClusterIntegration|Ingress Endpoint"
-msgstr ""
+msgstr "Кінцева точка Ingress"
msgid "ClusterIntegration|Ingress gives you a way to route requests to services based on the request host or path, centralizing a number of services into a single entrypoint."
msgstr "Ingress дозволÑÑ” вам маршрутизувати запити до Ñлужб на оÑнові запитаного хоÑта або шлÑху, об'єднуючи Ñ€Ñд ÑервіÑів в одну точку входу."
msgid "ClusterIntegration|Installing Ingress may incur additional costs. Learn more about %{pricingLink}."
-msgstr ""
+msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ingress може викликати додаткові витрати. ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про%{pricingLink}."
msgid "ClusterIntegration|Instance cluster"
-msgstr ""
+msgstr "КлаÑтер інÑтанÑу"
msgid "ClusterIntegration|Integrate Kubernetes cluster automation"
msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ ÐºÐ»Ð°Ñтерної автоматизації Kubernetes"
@@ -3057,7 +3583,7 @@ msgid "ClusterIntegration|Issuer Email"
msgstr "Електронна пошта емітента"
msgid "ClusterIntegration|Issuers represent a certificate authority. You must provide an email address for your Issuer. "
-msgstr ""
+msgstr "Емітенти предÑтавлÑÑŽÑ‚ÑŒ центр Ñертифікації. Ви повинні надати адреÑу електронної пошти вашого емітента. "
msgid "ClusterIntegration|Jupyter Hostname"
msgstr "Ð†Ð¼â€™Ñ Ñ…Ð¾Ñта Jupyter"
@@ -3075,10 +3601,10 @@ msgid "ClusterIntegration|Knative Domain Name:"
msgstr "Доменне ім'Ñ Knative:"
msgid "ClusterIntegration|Knative Endpoint:"
-msgstr ""
+msgstr "Кінцева точка Knative:"
msgid "ClusterIntegration|Knative domain name was updated successfully."
-msgstr ""
+msgstr "Доменне Ñ–Ð¼â€™Ñ Knative уÑпішно оновлено."
msgid "ClusterIntegration|Knative extends Kubernetes to provide a set of middleware components that are essential to build modern, source-centric, and container-based applications that can run anywhere: on premises, in the cloud, or even in a third-party data center."
msgstr ""
@@ -3095,8 +3621,8 @@ msgstr "Kubernetes-клаÑтер ÑтворюєтьÑÑ Ð½Ð° Google Kubernetes
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Ð†Ð¼â€™Ñ Kubernetes-клаÑтера"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Kubernetes-клаÑтер був уÑпішно Ñтворений на Google Kubernetes Engine. Оновіть Ñторінку, щоб побачити параметри клаÑтера"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr "Kubernetes-клаÑтер уÑпішно Ñтворено на Google Kubernetes Engine."
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "Kubernetes-клаÑтери дозволÑÑŽÑ‚ÑŒ вам викориÑтовувати Review Apps, розгортати ваші заÑтоÑунки, запуÑкати конвеєри Ñ– багато іншого проÑтим ÑпоÑобом."
@@ -3110,6 +3636,9 @@ msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про %{help_link_start_machine_type}
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про %{help_link_start}зони%{help_link_end}."
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Kubernetes"
@@ -3117,11 +3646,17 @@ msgid "ClusterIntegration|Learn more about group Kubernetes clusters"
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про групові клаÑтери Kubernetes"
msgid "ClusterIntegration|Learn more about instance Kubernetes clusters"
-msgstr ""
+msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про клаÑтери Kubernetes інÑтанÑу"
msgid "ClusterIntegration|Let's Encrypt"
msgstr "Let's Encrypt"
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "Тип машини"
@@ -3131,6 +3666,9 @@ msgstr "ВпевнітьÑÑ, що ваш обліковий Ð·Ð°Ð¿Ð¸Ñ %{link_t
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "Керуйте вашим Kubernetes-клаÑтером за допомогою %{link_gke}"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "Жоден тип машин не відповідає вашому пошуку"
@@ -3140,6 +3678,9 @@ msgstr "Проектів не знайдено"
msgid "ClusterIntegration|No projects matched your search"
msgstr "Жоден проект не відповідає вашому пошуку"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "Жодна зона не відповідає вашому пошуку"
@@ -3147,7 +3688,7 @@ msgid "ClusterIntegration|Number of nodes"
msgstr "КількіÑÑ‚ÑŒ вузлів"
msgid "ClusterIntegration|Number of nodes must be a numerical value."
-msgstr ""
+msgstr "КількіÑÑ‚ÑŒ вузлів має бути чиÑлом."
msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes"
msgstr "Введіть інформацію про доÑтуп до Ñвого Kubernetes-клаÑтера. Якщо вам потрібна допомога, ви можете прочитати наші %{link_to_help_page} про Kubernetes"
@@ -3156,7 +3697,7 @@ msgid "ClusterIntegration|Please make sure that your Google account meets the fo
msgstr "Будь-лаÑка впевнітьÑÑ, що ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Google задовольнÑÑ” наÑтупним вимогам:"
msgid "ClusterIntegration|Point a wildcard DNS to this generated endpoint in order to access your application after it has been deployed."
-msgstr ""
+msgstr "Ðаправте ваш DNS на цю згенеровану кінцеву точку, щоб отримати доÑтуп до вашого заÑтоÑунку, піÑÐ»Ñ Ð¹Ð¾Ð³Ð¾ розгортаннÑ."
msgid "ClusterIntegration|Project cluster"
msgstr "КлаÑтер проекту"
@@ -3164,6 +3705,9 @@ msgstr "КлаÑтер проекту"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "ПроÑÑ‚Ñ–Ñ€ імен проекту (не обов’Ñзковий, унікальний)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3176,6 +3720,9 @@ msgstr "КлаÑтер з підтримкою RBAC"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "ПереглÑньте нашу %{link_to_help_page} про інтеграцію із Kubernetes."
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "Відалити інтеграцію із Kubernetes-клаÑтером"
@@ -3192,17 +3739,26 @@ msgid "ClusterIntegration|Request to begin installing failed"
msgstr "Запит про початок вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ виконано"
msgid "ClusterIntegration|Request to begin uninstalling failed"
+msgstr "Запит про початок Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½Ðµ виконано"
+
+msgid "ClusterIntegration|Role name"
msgstr ""
msgid "ClusterIntegration|Save changes"
msgstr "Зберегти зміни"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "Пошук по типам машин"
msgid "ClusterIntegration|Search projects"
msgstr "Пошук проектів"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "Пошук зон"
@@ -3221,6 +3777,9 @@ msgstr "Виберіть проект та зону Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, що виб
msgid "ClusterIntegration|Select project to choose zone"
msgstr "Виберіть проект, щоб вибрати зону"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "Вибрати зону"
@@ -3249,7 +3808,7 @@ msgid "ClusterIntegration|Something went wrong while uninstalling %{title}"
msgstr "Під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ %{title} ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
msgid "ClusterIntegration|Something went wrong while updating Knative domain name."
-msgstr ""
+msgstr "Помилка під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð¾Ð¼ÐµÐ½Ð½Ð¾Ð³Ð¾ імені Knative."
msgid "ClusterIntegration|Specifying a domain will allow you to use Auto Review Apps and Auto Deploy stages for %{auto_devops_start}Auto DevOps%{auto_devops_end}. The domain should have a wildcard DNS configured matching the domain."
msgstr "Ð—Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð¼ÐµÐ½Ñƒ дозволить вам викориÑтовувати фази Auto Review Apps та Auto Deploy Ð´Ð»Ñ %{auto_devops_start}Auto DevOps%{auto_devops_end}. Домен повинен мати шаблон DNS, що задовільнÑÑ” цей домен."
@@ -3258,22 +3817,28 @@ msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the
msgstr "Сертифікат Kubernetes, що викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— в клаÑтері."
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
-msgstr ""
+msgstr "URL-адреÑа, що викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ð¾Ñтупу до Kubernetes API."
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
+msgstr "Пов’Ñзані баланÑувальник Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° IP-адреÑа будуть видалені Ñ– не зможуть бути відновлені."
+
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
+msgstr "ВідбуваєтьÑÑ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÑ–Ð½Ñ†ÐµÐ²Ð¾Ñ— точки. Будь лаÑка, перевірте квоти вашого Kubernetes клаÑтера на Google Kubernetes Engine, Ñкщо це займає багато чаÑу."
+
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
msgstr ""
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
-msgstr ""
+msgstr "Проблема автентифікації у вашому клаÑтері. Будь лаÑка, переконайтеÑÑ, що Ñертифікат CA та токен Ñ” правильними."
msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
msgstr "Цей обліковий Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ мати наÑтупні права Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Kubernetes-клаÑтера в %{link_to_container_project}"
@@ -3282,7 +3847,7 @@ msgid "ClusterIntegration|This option will allow you to install applications on
msgstr "Цей параметр дозволить вам вÑтановлювати заÑтоÑунки на клаÑтери RBAC."
msgid "ClusterIntegration|To access your application after deployment, point a wildcard DNS to the Knative Endpoint."
-msgstr ""
+msgstr "Щоб отримати доÑтуп до вашого заÑтоÑунку, піÑÐ»Ñ Ð¹Ð¾Ð³Ð¾ розгортаннÑ, направте ваш DNS на кінцеву точку Knative."
msgid "ClusterIntegration|Toggle Kubernetes cluster"
msgstr "Увімкнути/вимкнути Kubernetes-клаÑтер"
@@ -3293,6 +3858,9 @@ msgstr "Видалити %{appTitle}"
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸. Перевірте журнал та Ñпробуйте ще раз."
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "Перевірка Ñтану білінгу проекта"
@@ -3303,19 +3871,19 @@ msgid "ClusterIntegration|With a Kubernetes cluster associated to this project,
msgstr "За допомогою підключеного до цього проекту Kubernetes-клаÑтера, ви можете викориÑтовувати Review Apps, розгортати ваші проекти, запуÑкати конвеєри збірки тощо."
msgid "ClusterIntegration|You are about to uninstall %{appTitle} from your cluster."
-msgstr ""
+msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %{appTitle} зі Ñвого клаÑтера."
msgid "ClusterIntegration|You must first install Helm Tiller before installing the applications below"
msgstr "Перед вÑтановленнÑм заÑтоÑунків нижче, необхідно вÑтановити Helm Tiller"
msgid "ClusterIntegration|You must have an RBAC-enabled cluster to install Knative."
-msgstr ""
+msgstr "Ви повинні мати клаÑтер з підтримкою RBAC, щоб вÑтановити Knative."
msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}"
msgstr "Ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ мати %{link_to_kubernetes_engine}"
msgid "ClusterIntegration|Your cluster API is unreachable. Please ensure your API URL is correct."
-msgstr ""
+msgstr "API вашого клаÑтера недоÑтупний. ПереконайтеÑÑ, що ваш API URL правильний."
msgid "ClusterIntegration|Zone"
msgstr "Зона"
@@ -3329,18 +3897,24 @@ msgstr "документації"
msgid "ClusterIntegration|help page"
msgstr "Ñторінка допомоги"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "задовольнÑÑ” вимогам"
msgid "ClusterIntegration|pricing"
msgstr "вартіÑÑ‚ÑŒ"
-msgid "ClusterIntegration|properly configured"
-msgstr "правильно налаштований"
-
msgid "ClusterIntegration|sign up"
msgstr "реєÑтрації"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr "Код"
@@ -3368,14 +3942,23 @@ msgstr "Згорнути ÑпиÑок затверджуючих оÑіб"
msgid "Collapse sidebar"
msgstr "Згорнути панель"
+msgid "Collector hostname"
+msgstr "Ім'Ñ Ñ…Ð¾Ñта колектора"
+
msgid "ComboSearch is not defined"
-msgstr ""
+msgstr "ComboSearch не визначено"
+
+msgid "Command"
+msgstr "Команда"
msgid "Command line instructions"
msgstr "ІнÑтрукції Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ñдка"
msgid "Commands applied"
-msgstr ""
+msgstr "ЗаÑтоÑовані команди"
+
+msgid "Commands did not apply"
+msgstr "Команди не заÑтоÑовано"
msgid "Comment"
msgstr "Коментар"
@@ -3386,16 +3969,19 @@ msgstr "Коментувати та закрити %{noteable_name}"
msgid "Comment & reopen %{noteable_name}"
msgstr "Коментувати та повторно відкрити %{noteable_name}"
-msgid "Comment & resolve discussion"
-msgstr "Залишити коментар Ñ– завершити обговореннÑ"
+msgid "Comment & resolve thread"
+msgstr "Коментувати та закрити обговореннÑ"
-msgid "Comment & unresolve discussion"
-msgstr "Залишити коментар Ñ– повторно відкрити обговореннÑ"
+msgid "Comment & unresolve thread"
+msgstr "Коментувати та повторно відкрити обговореннÑ"
msgid "Comment form position"
msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð¸ коментарÑ"
msgid "Comment is being updated"
+msgstr "Коментар в процеÑÑ– оновленнÑ"
+
+msgid "Comment/Reply (quoting selected text)"
msgstr ""
msgid "Comments"
@@ -3411,6 +3997,9 @@ msgstr[3] "Комітів"
msgid "Commit %{commit_id}"
msgstr "Коміт %{commit_id}"
+msgid "Commit (when editing commit message)"
+msgstr "Коміт (при редагуванні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ)"
+
msgid "Commit Message"
msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ"
@@ -3507,12 +4096,18 @@ msgstr "Ціль"
msgid "CompareBranches|There isn't anything to compare."
msgstr "Ðема чого порівнювати."
+msgid "Complete"
+msgstr "Завершено"
+
msgid "Confidential"
msgstr "Конфіденційний"
msgid "Confidentiality"
msgstr "КонфіденційніÑÑ‚ÑŒ"
+msgid "Configuration"
+msgstr "КонфігураціÑ"
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr "Ðалаштувати runner'ів GitLab Ð´Ð»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ викориÑÑ‚Ð°Ð½Ð½Ñ Ð’ÐµÐ±-терміналу. %{helpStart}Докладніше.%{helpEnd}"
@@ -3520,7 +4115,10 @@ msgid "Configure Gitaly timeouts."
msgstr "Ðалаштувати таймаути Gitaly."
msgid "Configure Let's Encrypt"
-msgstr ""
+msgstr "Ðалаштувати Let's Encrypt"
+
+msgid "Configure Prometheus"
+msgstr "Ðалаштувати Prometheus"
msgid "Configure Tracing"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð’Ñ–Ð´ÑтеженнÑ"
@@ -3531,6 +4129,9 @@ msgstr "Ðалаштуйте файл <code>.gitlab-webide.yml</code> у дирÐ
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "Ðалаштувати автоматичні перевірки git Ñ– Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð² репозиторіÑÑ…."
+msgid "Configure existing installation"
+msgstr "Ðалаштувати Ñ–Ñнуючу інÑталÑцію"
+
msgid "Configure limits for web and API requests."
msgstr "Ðалаштуйте Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÐµÐ± та API запитів."
@@ -3550,7 +4151,7 @@ msgid "Confirm"
msgstr "Підтвердити"
msgid "Confirmation email sent to %{email}"
-msgstr ""
+msgstr "ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ–Ñлано на %{email}"
msgid "Confirmation required"
msgstr "Ðеобхідне підтвердженнÑ"
@@ -3571,58 +4172,68 @@ msgid "Connect your external repositories, and CI/CD pipelines will run for new
msgstr "Підключіть ваші зовнішні репозиторії, Ñ– CI/CD конвеєри будуть запуÑкатиÑÑ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… комітів. Створений GitLab-проект буде мати лише CI/CD фунції."
msgid "Connecting to terminal sync service"
-msgstr ""
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· ÑервіÑом Ñинхронізації терміналу"
msgid "Connecting..."
msgstr "З'єднаннÑ..."
msgid "Connection failure"
-msgstr ""
+msgstr "Помилка з’єднаннÑ"
msgid "Contact an owner of group %{namespace_name} to upgrade the plan."
-msgstr ""
+msgstr "ЗвернітьÑÑ Ð´Ð¾ влаÑника групи %{namespace_name} Ð´Ð»Ñ Ð¿Ñ–Ð´Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð»Ð°Ð½Ñƒ."
msgid "Contact owner %{link_start}%{owner_name}%{link_end} to upgrade the plan."
-msgstr ""
+msgstr "ЗвернітьÑÑ Ð´Ð¾ влаÑника %{link_start}%{owner_name}%{link_end} Ð´Ð»Ñ Ð¿Ñ–Ð´Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð»Ð°Ð½Ñƒ."
msgid "Contact sales to upgrade"
msgstr "ЗвернітьÑÑ Ð´Ð¾ відділу продажів Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ на вищий тарифний план"
msgid "Contact your Administrator to upgrade your license."
-msgstr ""
+msgstr "ЗвернітьÑÑ Ð´Ð¾ вашого адмініÑтратора Ð´Ð»Ñ Ð¿Ñ–Ð´Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ—."
msgid "Container Registry"
msgstr "РеєÑÑ‚Ñ€ Контейнерів"
msgid "Container registry images"
-msgstr ""
+msgstr "Образи в реєÑтрі контейнерів"
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "Спочатку увійдіть до реєÑтру контейнерів GitLab, викориÑтовуючи логін та пароль. Якщо у Ð²Ð°Ñ %{link_2fa}, треба викориÑтовувати %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
+msgstr "РеєÑÑ‚Ñ€ контейнерів"
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab підтримує до 3 рівнів імен образів. ÐаÑтупні приклади образів Ñ” правильними Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ проекту:"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr "Скопіювати команду збірки в буфер обміну"
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "Як викориÑтовувати РеєÑÑ‚Ñ€ Контейнерів"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr "Скопіювати команду Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð² буфер обміну"
-msgid "ContainerRegistry|Last Updated"
-msgstr ""
+msgid "ContainerRegistry|Docker connection error"
+msgstr "Помилка Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Docker"
-msgid "ContainerRegistry|Learn more about"
-msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про"
+msgid "ContainerRegistry|Last Updated"
+msgstr "ВоÑтаннє оновлено"
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "Ð’ РеєÑтрі Контейнерів немає тегів Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ образу."
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "ПіÑÐ»Ñ Ð²Ñ…Ð¾Ð´Ñƒ ви можете Ñтворювати та надÑилати образи контейнерів, викориÑтовуючи звичайні %{build} та %{push} команди"
+msgid "ContainerRegistry|Quick Start"
+msgstr "Швидкий Ñтарт"
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] "Видалити образ"
+msgstr[1] "Видалити образи"
+msgstr[2] "Видалити образів"
+msgstr[3] "Видалити образів"
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr "Видалити образ(-и) та теги"
msgid "ContainerRegistry|Remove repository"
msgstr "Видалити репозиторій"
-msgid "ContainerRegistry|Remove tag"
-msgstr "Видалити тег"
+msgid "ContainerRegistry|Remove selected images"
+msgstr "Видалити вибрані образи"
msgid "ContainerRegistry|Size"
msgstr "Розмір"
@@ -3633,17 +4244,32 @@ msgstr "Тег"
msgid "ContainerRegistry|Tag ID"
msgstr "Ідентифікатор тегу"
-msgid "ContainerRegistry|Use different image names"
-msgstr "ВикориÑтовуйте різні імена образів"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту не збережено жодного образу контейнерів"
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "У Ð½Ð°Ñ Ð²Ð¸Ð½Ð¸ÐºÐ»Ð¸ проблеми при з’єднанні з Docker, що може бути Ñпричинено помилкою пов’Ñзаною із іменем проекту або шлÑхом. %{docLinkStart}ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ%{docLinkEnd}"
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "За допомогою РеєÑтру контейнерів, кожен проект може мати влаÑний проÑÑ‚Ñ–Ñ€ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð·Ñ–Ð² Docker. %{docLinkStart}ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ%{docLinkEnd}"
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "За допомогою вбудованого в GitLab реєÑтру Docker контейнерів кожен проект може мати влаÑне міÑце Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Docker образів."
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr "За допомогою РеєÑтру контейнерів інтегрованому у Gitlab, кожен проект може мати влаÑний проÑÑ‚Ñ–Ñ€ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð·Ñ–Ð² Docker. %{docLinkStart}ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ%{docLinkEnd}"
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "Ви також можете викориÑтовувати %{deploy_token} Ð´Ð»Ñ Ð´Ð¾Ñтупу тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð¾ образів у реєÑтрі."
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ <b>%{count}</b> образів. Це видалить Ñ—Ñ… разом з тегами, що на них вказують."
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð»Ð°Ð´Ð¸Ñ‚Ð¸ образ <b>%{title}</b>. Таким чином буде видалено цей образ та вÑÑ– теги, що на нього вказують."
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ репозиторій <b>%{title}</b>. ПіÑÐ»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñ†ÐµÐ¹ репозиторій буде оÑтаточно видалено."
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr "Ви можете додати образ до цього реєÑтру за допомогою наÑтупних команд:"
msgid "Contains %{count} blobs of images (%{size})"
-msgstr ""
+msgstr "МіÑтить %{count} бінарних даних зображень (%{size})"
msgid "Contents of .gitlab-ci.yml"
msgstr "ВміÑÑ‚ .gitlab-ci.yml"
@@ -3691,7 +4317,7 @@ msgid "ContributorsPage|Please wait a moment, this page will automatically refre
msgstr "Будь лаÑка, зачекайте, Ñ†Ñ Ñторінка автоматично оновитьÑÑ, коли буде готова."
msgid "Control emails linked to your account"
-msgstr ""
+msgstr "Керувати адреÑами електронної пошти, пов’Ñзаними з вашим обліковим запиÑом"
msgid "Control the display of third party offers."
msgstr "Керувати відображеннÑм Ñторонніх пропозицій."
@@ -3702,15 +4328,24 @@ msgstr "Задати макÑимальну кількіÑÑ‚ÑŒ потоків д
msgid "ConvDev Index"
msgstr "Ð†Ð½Ð´ÐµÐºÑ ConvDev"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr "Скопійовано"
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr "Скопійовано мітки та етап із %{source_issuable_reference}."
+
msgid "Copy %{http_label} clone URL"
msgstr "Скопіювати URL Ð´Ð»Ñ ÐºÐ»Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· %{http_label}"
msgid "Copy %{protocol} clone URL"
msgstr "Скопіювати URL Ð´Ð»Ñ ÐºÐ»Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· %{protocol}"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr "Скопіювати %{proxy_url} в буфер обміну"
+
msgid "Copy ID to clipboard"
msgstr "Скопіювати ID в буфер обміну"
@@ -3747,6 +4382,9 @@ msgstr "Скопіювати мітки та етап з іншої задачі
msgid "Copy link"
msgstr "Скопіювати поÑиланнÑ"
+msgid "Copy personal access token to clipboard"
+msgstr "Скопіювати перÑональний токен доÑтупу в буфер обміну"
+
msgid "Copy reference to clipboard"
msgstr "Скопіювати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð² буфер обміну"
@@ -3762,20 +4400,32 @@ msgstr "Копіювати в буфер обміну"
msgid "Copy token to clipboard"
msgstr "Скопіювати токен в буфер обміну"
+msgid "Could not add admins as members"
+msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ адмініÑтраторів Ñк учаÑників"
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ URL-адреÑу prometheus до білого ÑпиÑку"
+
msgid "Could not authorize chat nickname. Try again!"
msgstr "Ðе вдалоÑÑ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·ÑƒÐ²Ð°Ñ‚Ð¸ пÑевдонім Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ñƒ. Спробуйте ще раз!"
msgid "Could not change HEAD: branch '%{branch}' does not exist"
-msgstr ""
+msgstr "Ðе можливо змінити HEAD: гілка \"%{branch}\" не Ñ–Ñнує"
msgid "Could not connect to FogBugz, check your URL"
-msgstr ""
+msgstr "Ðе можливо зв’ÑзатиÑÑ Ñ–Ð· FogBugz, перевірте URL-адреÑу"
msgid "Could not connect to Web IDE file mirror service."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ÑÑ Ñ–Ð· ÑервіÑом Ð²Ñ–Ð´Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² Веб-IDE."
msgid "Could not create Wiki Repository at this time. Please try again later."
-msgstr ""
+msgstr "Ðаразі не вдалоÑÑ Ñтворити репозиторій вікі. Спробуйте, будь лаÑка, знову пізніше."
+
+msgid "Could not create group"
+msgstr "Ðе вдалоÑÑ Ñтворити групу"
+
+msgid "Could not create project"
+msgstr "Ðе вдалоÑÑ Ñтворити проект"
msgid "Could not delete chat nickname %{chat_name}."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ пÑевдонім Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ñƒ %{chat_name}."
@@ -3783,13 +4433,16 @@ msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ пÑевдонім Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ñƒ
msgid "Could not remove the trigger."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ тригер."
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑÑ‚Ð°Ñ‚ÑƒÑ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð°. Ð”Ð»Ñ ÑƒÑÑƒÐ½ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ð¾Ð»Ð°Ð´Ð¾Ðº, прочитайте %{linkStart}документацію%{linkEnd}"
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr "Ðеможливо відкликати токен Ñ–Ð¼Ñ–Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %{token_name}."
msgid "Could not revoke personal access token %{personal_access_token_name}."
+msgstr "Ðеможливо відкликати перÑональний токен доÑтупу %{personal_access_token_name}."
+
+msgid "Could not save project ID"
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ ідентифікатор проекту"
+
+msgid "Could not save prometheus manual configuration"
msgstr ""
msgid "Coverage"
@@ -3798,6 +4451,9 @@ msgstr "ПокриттÑ"
msgid "Create"
msgstr "Створити"
+msgid "Create %{type} token"
+msgstr "Створити %{type} токен"
+
msgid "Create New Directory"
msgstr "Створити новий каталог"
@@ -3808,16 +4464,16 @@ msgid "Create a GitLab account first, and then connect it to your %{label} accou
msgstr "Спочатку Ñтворіть обліковий Ð·Ð°Ð¿Ð¸Ñ GitLab, а потім приєднайте його до облікового запиÑу %{label}."
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
-msgstr ""
+msgstr "Створити локальний прокÑÑ– залежноÑтей Ð´Ð»Ñ Ñ‡Ð°Ñто викориÑтовуваних образів. %{link_start}ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ%{link_end} про прокÑÑ– залежноÑтей."
-msgid "Create a merge request."
-msgstr "Створити запит на злиттÑ."
+msgid "Create a merge request"
+msgstr "Створити запит на злиттÑ"
msgid "Create a new branch"
msgstr "Створити нову гілку"
msgid "Create a new file as there are no files yet. Afterwards, you'll be able to commit your changes."
-msgstr ""
+msgstr "Створіть новий файл, тому що наразі немає жодного файлу. Пізніше ви зможете закомітити ваші зміни."
msgid "Create a new issue"
msgstr "Створити нову задачу"
@@ -3831,12 +4487,24 @@ msgstr "Створіть токен доÑтупу Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ аккаÑ
msgid "Create an issue. Issues are created for each alert triggered."
msgstr "Створити задачу. Задачі будуть Ñтворені Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ попередженнÑ."
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr "Створіть або вкажіть ваш %{link_start}ПерÑональний токен доÑтупу%{link_end} GitHub. Вам необхідно буде вибрати облаÑÑ‚ÑŒ дії <code>repo</code> Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб ми змогли відобразити ÑпиÑок ваших публічних та приватних репозиторіїв, доÑтупних Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ."
+
+msgid "Create board"
+msgstr "Створити дошку"
+
msgid "Create branch"
msgstr "Створити гілку"
msgid "Create commit"
msgstr "Створити коміт"
+msgid "Create confidential merge request"
+msgstr "Створити конфіденційний запит на злиттÑ"
+
+msgid "Create confidential merge request and branch"
+msgstr "Створити конфіденційний запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° гілку"
+
msgid "Create directory"
msgstr "Створити каталог"
@@ -3867,6 +4535,9 @@ msgstr "Створити запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° гілку"
msgid "Create milestone"
msgstr "Створити етап"
+msgid "Create new board"
+msgstr "Створіть нову дошку"
+
msgid "Create new branch"
msgstr "Створити нову гілку"
@@ -3885,6 +4556,9 @@ msgstr "Створити нову мітку"
msgid "Create new..."
msgstr "Створити..."
+msgid "Create project"
+msgstr "Створити проект"
+
msgid "Create project label"
msgstr "Створити мітку проекту"
@@ -3892,10 +4566,10 @@ msgid "Create your first page"
msgstr "Створити вашу першу Ñторінку"
msgid "CreateGroup|You don’t have permission to create a subgroup in this group."
-msgstr ""
+msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволу Ñтворювати підгрупу в цій групі."
msgid "CreateGroup|You don’t have permission to create groups."
-msgstr ""
+msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволу Ñтворювати групи."
msgid "CreateTag|Tag"
msgstr "Тег"
@@ -3909,6 +4583,12 @@ msgstr "Створено"
msgid "Created At"
msgstr "Створено в"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr "Створено гілку та запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— задачі."
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr "Створено гілку \"%{branch_name}\" та запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— задачі."
+
msgid "Created by me"
msgstr "Створено мною"
@@ -3919,10 +4599,10 @@ msgid "Created issue %{issueLink} at %{projectLink}"
msgstr "Створено задачу %{issueLink} в %{projectLink}"
msgid "Created merge request %{mergeRequestLink}"
-msgstr ""
+msgstr "Створено запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ %{mergeRequestLink}"
msgid "Created merge request %{mergeRequestLink} at %{projectLink}"
-msgstr ""
+msgstr "Створено запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ %{mergeRequestLink} у %{projectLink}"
msgid "Created on"
msgstr "Створений"
@@ -3930,18 +4610,30 @@ msgstr "Створений"
msgid "Created on:"
msgstr "Створено:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
-msgstr ""
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr "Створює гілку та запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— задачі."
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr "Створює гілку \"%{branch_name}\" та запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— проблеми."
msgid "Creating epic"
msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐµÐ¿Ñ–ÐºÑƒ"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð³Ñ€Ð°Ñ„Ñ–ÐºÑ–Ð² викориÑтовує дані з Ñервера Prometheus. Якщо це займає багато чаÑу, переконайтеÑÑ, що дані доÑтупні."
+
+msgid "Creation date"
+msgstr "Дата ÑтвореннÑ"
+
msgid "Cron Timezone"
msgstr "ЧаÑовий поÑÑ Cron"
msgid "Cron syntax"
msgstr "СинтакÑÐ¸Ñ Cron"
+msgid "Cross-project dependencies"
+msgstr "Міжпроектні залежноÑÑ‚Ñ–"
+
msgid "Current Branch"
msgstr "Поточна гілка"
@@ -3978,6 +4670,45 @@ msgstr "ВлаÑні шаблони проектів"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr "ВлаÑні шаблони проектів не налаштовані Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿, до Ñких ви входите. Вони активуютьÑÑ Ð½Ð° Ñторінці налаштувань групи. ЗвернітьÑÑ Ð´Ð¾ влаÑника або керівника вашої групи Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð»Ð°Ñних шаблонів проектів."
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñ–Ð²"
@@ -3987,18 +4718,51 @@ msgstr "Ðалаштуйте, Ñк адреÑи електронної поштÐ
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "Ðалаштуйте, Ñк адреÑи електронної пошти та імена кориÑтувачів Google Code імпортуютьÑÑ Ð² GitLab. Ðа наÑтупному кроці ви зможете вибрати проекти, Ñкі потрібно імпортувати."
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð²Ð¸ Ñ– параметрів, пов'Ñзаних із регіоном."
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "Ðалаштуйте конфігурацію конвеєра, переглÑньте Ñтан Ñвого конвеєра Ñ– звіт про покриттÑ."
msgid "Cycle Analytics"
msgstr "Ðналіз циклу"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "Ðналітика циклу дає інформацію про те, Ñкільки чаÑу потрібно, щоб пройти шлÑÑ… від ідеї до production у вашому проекті."
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr "Задачу Ñторено"
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr "Запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñтворино"
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "ÐапиÑÐ°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ"
@@ -4020,6 +4784,35 @@ msgstr "Staging"
msgid "CycleAnalyticsStage|Test"
msgstr "ТеÑтуваннÑ"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr "Ð’ÑÑ– Ñтадії"
+
+msgid "CycleAnalytics|Stages"
+msgstr "Стадії"
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr "DNS"
@@ -4044,8 +4837,8 @@ msgstr "%{firstProject} Ñ– %{secondProject}"
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr "%{firstProject}, %{rest}, Ñ– %{secondProject}"
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
-msgstr ""
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
+msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ %{invalidProjects}. Ð¦Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупна Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð¸Ñ… проектів та приватних проектів в групах із планом Silver."
msgid "Data is still calculating..."
msgstr "Дані вÑе ще обчиÑлюютьÑÑ..."
@@ -4065,6 +4858,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr "Ср"
+msgid "Days"
+msgstr "Днів"
+
msgid "Debug"
msgstr "Відладка"
@@ -4084,13 +4880,22 @@ msgid "Default Branch"
msgstr "Гілка за замовчуваннÑм"
msgid "Default artifacts expiration"
+msgstr "Термін дії артефактів за замовчуваннÑм"
+
+msgid "Default branch"
+msgstr "Гілка за замовчуваннÑм"
+
+msgid "Default branch and protected branches"
msgstr ""
msgid "Default classification label"
msgstr "Мітка клаÑифікації за замовчуваннÑм"
msgid "Default description template for issues"
-msgstr ""
+msgstr "Шаблон опиÑу задач за замовчуваннÑм"
+
+msgid "Default description template for merge requests"
+msgstr "Шаблон опиÑу Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð·Ð° замовчуваннÑм"
msgid "Default first day of the week"
msgstr "Перший день Ñ‚Ð¸Ð¶Ð½Ñ Ð·Ð° замовчуваннÑм"
@@ -4102,7 +4907,7 @@ msgid "Default issue template"
msgstr "Шаблон задач за замовчуваннÑм"
msgid "Default project deletion protection"
-msgstr ""
+msgstr "ЗахиÑÑ‚ від Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ за замовчуваннÑм"
msgid "Default: Directly import the Google Code email address or username"
msgstr "За замовчуваннÑм: безпоÑередньо імпортувати адреÑу електронної пошти або ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Google Code"
@@ -4134,12 +4939,21 @@ msgstr "відкладено"
msgid "Delete"
msgstr "Видалити"
+msgid "Delete Comment"
+msgstr "Видалити коментар"
+
msgid "Delete Package"
msgstr "Видалити пакет"
msgid "Delete Snippet"
msgstr "Видалити Ñніпет"
+msgid "Delete artifacts"
+msgstr "Видалити артефакти"
+
+msgid "Delete board"
+msgstr "Видалити дошку"
+
msgid "Delete comment"
msgstr "Видалити коментар"
@@ -4176,14 +4990,17 @@ msgstr "Видалено"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr "Видалено пÑевдонім Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ñƒ: %{chat_name}!"
+msgid "Deleted in this version"
+msgstr "Видалено в цій верÑÑ–Ñ—"
+
msgid "Deleting the license failed."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ ліцензію."
msgid "Deleting the license failed. The license was not found."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ ліцензію. Ліцензію не знайдено."
msgid "Deleting the license failed. You are not permitted to perform this action."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ ліцензію. У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволів виконувати цю дію."
msgid "Denied authorization of chat nickname %{user_name}."
msgstr "Відмовлено в авторизації пÑевдоніму Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ñƒ %{user_name}."
@@ -4194,6 +5011,26 @@ msgstr "Заборонити"
msgid "Dependencies"
msgstr "ЗалежноÑÑ‚Ñ–"
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] "%d додаткова вразливіÑÑ‚ÑŒ не відображаєтьÑÑ"
+msgstr[1] "%d додаткові вразливоÑÑ‚Ñ– не відображаютьÑÑ"
+msgstr[2] "%d додаткових вразливоÑтей не відображаютьÑÑ"
+msgstr[3] "%d додаткових вразливоÑтей не відображаютьÑÑ"
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] "%d вразливіÑÑ‚ÑŒ"
+msgstr[1] "%d вразливоÑÑ‚Ñ–"
+msgstr[2] "%d вразливоÑтей"
+msgstr[3] "%d вразливоÑтей"
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr "Ð’ÑÑ–"
+
msgid "Dependencies|Component"
msgstr "Компонент"
@@ -4201,43 +5038,69 @@ msgid "Dependencies|Component name"
msgstr "Ім'Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°"
msgid "Dependencies|Export as JSON"
-msgstr ""
+msgstr "ЕкÑпортувати Ñк JSON"
msgid "Dependencies|Job failed to generate the dependency list"
-msgstr ""
+msgstr "Завданню не вдалоÑÑ Ñтворити ÑпиÑок залежноÑтей"
+
+msgid "Dependencies|License"
+msgstr "ЛіцензіÑ"
msgid "Dependencies|Location"
msgstr "РозташуваннÑ"
msgid "Dependencies|Packager"
+msgstr "Пакувальник"
+
+msgid "Dependencies|Safe"
msgstr ""
+msgid "Dependencies|Status"
+msgstr "СтатуÑ"
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ %{codeStartTag}dependency_scanning%{codeEndTag} закінчилоÑÑ Ð½ÐµÑƒÑпішно Ñ– неможе згенерувати ÑпиÑок. Будь лаÑка, переконайтеÑÑ, що Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€ÑƒÑ”Ñ‚ÑŒÑÑ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¼ чином Ñ– перезапуÑÑ‚Ñ–Ñ‚ÑŒ конвеєр."
msgid "Dependencies|Unsupported file(s) detected"
-msgstr ""
+msgstr "ВиÑвлено непідтимувані файли"
msgid "Dependencies|Version"
msgstr "ВерÑÑ–Ñ"
+msgid "Dependencies|Vulnerable components"
+msgstr "Вразливі компоненти"
+
msgid "Dependency List"
msgstr "СпиÑок залежноÑтей"
msgid "Dependency Proxy"
-msgstr ""
+msgstr "ПрокÑÑ– залежноÑтей"
msgid "Dependency proxy"
-msgstr ""
+msgstr "ПрокÑÑ– залежноÑтей"
msgid "Dependency proxy URL"
-msgstr ""
+msgstr "URL-адреÑа прокÑÑ– залежноÑтей"
msgid "Dependency proxy feature is limited to public groups for now."
-msgstr ""
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¿Ñ€Ð¾ÐºÑÑ– залежноÑтей наразі доÑтупна тільки Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð¸Ñ… груп."
msgid "DependencyProxy|Toggle Dependency Proxy"
-msgstr ""
+msgstr "Увімкнути/вимкнути прокÑÑ– залежноÑтей"
+
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
msgid "Deploy"
msgid_plural "Deploys"
@@ -4250,6 +5113,15 @@ msgid "Deploy Keys"
msgstr "Ключі Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ"
msgid "Deploy key was successfully updated."
+msgstr "Ключ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ ÑƒÑпішно оновлено."
+
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr "Розгорнути на..."
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
msgstr ""
msgid "DeployKeys|+%{count} others"
@@ -4289,7 +5161,7 @@ msgid "DeployKeys|Project usage"
msgstr "ВикориÑтовуєтьÑÑ Ñƒ проектах"
msgid "DeployKeys|Publicly accessible deploy keys"
-msgstr "Публічні колючі розгортаннÑ"
+msgstr "Публічні ключі розгортаннÑ"
msgid "DeployKeys|Read access only"
msgstr "ДоÑтуп тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"
@@ -4324,6 +5196,9 @@ msgstr "Створити токен розгортаннÑ"
msgid "DeployTokens|Created"
msgstr "Створено"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "Токени РозгортаннÑ"
@@ -4346,7 +5221,7 @@ msgid "DeployTokens|Revoke %{name}"
msgstr "Відкликати %{name}"
msgid "DeployTokens|Scopes"
-msgstr "Межі"
+msgstr "ОблаÑÑ‚ÑŒ дії"
msgid "DeployTokens|This action cannot be undone."
msgstr "Ð¦Ñ Ð´Ñ–Ñ Ð½Ðµ може бути ÑкаÑована."
@@ -4375,6 +5250,9 @@ msgstr "Створено ваш новий токен Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð´Ð
msgid "Deployed"
msgstr "Розгорнуто"
+msgid "Deployed %{deployedSince}"
+msgstr "Розгорнуто %{deployedSince}"
+
msgid "Deployed to"
msgstr "Розгорнуто на"
@@ -4391,7 +5269,7 @@ msgid "Description"
msgstr "ОпиÑ"
msgid "Description parsed with %{link_start}GitLab Flavored Markdown%{link_end}"
-msgstr ""
+msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾ за допомогою %{link_start}GitLab Flavored Markdown%{link_end}"
msgid "Description templates allow you to define context-specific templates for issue and merge request description fields for your project."
msgstr "Шаблони опиÑу дозволÑÑŽÑ‚ÑŒ визначити конкретні шаблони задач та запитів на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ проекту."
@@ -4399,9 +5277,30 @@ msgstr "Шаблони опиÑу дозволÑÑŽÑ‚ÑŒ визначити кон
msgid "Description:"
msgstr "ОпиÑ:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr "ЗнÑти вÑÑ– виділеннÑ"
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr "%{current_design} з %{designs_count}"
+msgid "DesignManagement|Add designs"
+msgstr "Додати дизайни"
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при завантаженні дизайнів. Будь лаÑка, Ñпробуйте знову."
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ новий коментар. Будь-лаÑка, Ñпробуйте знову"
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr "Ðе вдалоÑÑ Ñтворити нове обговореннÑ, будь-лаÑка, Ñпробуйте знову."
+
msgid "DesignManagement|Could not find design, please try again."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ дизайн, будь лаÑка, Ñпробуйте знову."
@@ -4417,6 +5316,12 @@ msgstr "Перейти до наÑтупного дизайну"
msgid "DesignManagement|Go to previous design"
msgstr "Перейти до попереднього дизайну"
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr "МакÑимальна кількіÑÑ‚ÑŒ дизайнів, Ñкі можна завантажити — %{upload_limit}. Будь лаÑка, Ñпробуйте знову."
@@ -4426,9 +5331,6 @@ msgstr "Єдине міÑце Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… дизайнів"
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr "Завантажити та переглÑнути оÑтанні дизайни Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— задачі. ПоÑлідовно та легко Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ, щоб вÑÑ– бачили актуальну інформацію."
-msgid "DesignManagement|Upload designs"
-msgstr "Завантажити дизайни"
-
msgid "Designs"
msgstr "Дизайни"
@@ -4450,9 +5352,15 @@ msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑÐ½Ð½Ñ Ð·Ð¼Ñ–Ñту"
msgid "Diff limits"
msgstr "Diff обмеженнÑ"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr "(базова)"
+
msgid "Diffs|No file name available"
msgstr "Ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ не доÑтупне"
+msgid "Diffs|Show all lines"
+msgstr "Показати вÑÑ– Ñ€Ñдки"
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "Проблема при отриманні Ñ€Ñдків відмінноÑтей."
@@ -4465,6 +5373,9 @@ msgstr "Ім'Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ"
msgid "Disable"
msgstr "Вимкнути"
+msgid "Disable email notifications"
+msgstr "Вимкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾ електронній пошті"
+
msgid "Disable for this project"
msgstr "Вимкнути Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту"
@@ -4481,7 +5392,7 @@ msgid "Disabled"
msgstr "Вимкнено"
msgid "Disabled mirrors can only be enabled by instance owners. It is recommended that you delete them."
-msgstr ""
+msgstr "Вимкнені дзеркала можуть бути увімкнені тільки влаÑниками інÑтанÑу. Рекомендовано Ñ—Ñ… видалити."
msgid "Discard"
msgstr "Відхилити"
@@ -4505,10 +5416,10 @@ msgid "Discard review"
msgstr "Відхилити перевірку"
msgid "DiscordService|Discord Notifications"
-msgstr ""
+msgstr "Discord СповіщеннÑ"
msgid "DiscordService|Receive event notifications in Discord"
-msgstr ""
+msgstr "Отримувати ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ події в Discord"
msgid "Discover GitLab Geo"
msgstr "Відкрийте GitLab Geo"
@@ -4522,6 +5433,12 @@ msgstr "Обговорити конкретну пропозицію чи пит
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr "Обговорити конкретну пропозицію або питаннÑ, що необхідно вирішити"
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr "Обговорити конкретну пропозицію або питаннÑ, що необхідно вирішити."
+
+msgid "Discuss a specific suggestion or question."
+msgstr "Обговорити конкретну пропозицію чи питаннÑ."
+
msgid "Discussion"
msgstr "ОбговореннÑ"
@@ -4544,12 +5461,15 @@ msgid "Dismissed"
msgstr "Відхилено"
msgid "Dismissed at %{projectLink}"
-msgstr ""
+msgstr "Відхилено в %{projectLink}"
msgid "Dismissed on pipeline %{pipelineLink}"
-msgstr ""
+msgstr "Відхилено в конвеєрі %{pipelineLink}"
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
+msgstr "Відхилено в конвеєрі %{pipelineLink} в %{projectLink}"
+
+msgid "Display name"
msgstr ""
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
@@ -4561,20 +5481,23 @@ msgstr "Dockerfile"
msgid "Documentation for popular identity providers"
msgstr "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ… провайдерів ідентифікації"
+msgid "Doing"
+msgstr "В роботі"
+
msgid "Domain"
msgstr "Домен"
msgid "Domain verification is an essential security measure for public GitLab sites. Users are required to demonstrate they control a domain before it is enabled"
-msgstr ""
+msgstr "ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾Ð¼ÐµÐ½Ñƒ Ñ” важливою мірою безпеки Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð¸Ñ… Ñайтів GitLab. КориÑтувачі повинні показати, що вони керують доменом, перш ніж його буде увімкнено"
msgid "Don't paste the private part of the GPG key. Paste the public part which begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
-msgstr ""
+msgstr "Ðе вÑтавлÑйте приватну чаÑтину GPG ключа. Ð’Ñтавте публічну чаÑтину, Ñка починаєтьÑÑ Ñ–Ð· \"-----BEGIN PGP PUBLIC KEY BLOCK-----\"."
msgid "Don't show again"
msgstr "Ðе показувати знову"
msgid "Don't worry, you can access this tour by clicking on the help icon in the top right corner and choose <strong>Learn GitLab</strong>."
-msgstr ""
+msgstr "Ðе хвилюйтеÑÑ, ви завжди зможете отримати доÑтуп до цієї екÑкурÑÑ–Ñ—, натиÑнувши кнопку довідки у верхньому правому куті Ñ– вибравши <strong>ДізнатиÑÑ Ð¿Ñ€Ð¾ GitLab</strong>."
msgid "Done"
msgstr "Готово"
@@ -4582,23 +5505,32 @@ msgstr "Готово"
msgid "Download"
msgstr "Завантажити"
+msgid "Download CSV"
+msgstr "Завантажити CSV"
+
msgid "Download artifacts"
msgstr "Завантажити артефакти"
+msgid "Download as"
+msgstr "Завантажити Ñк"
+
msgid "Download asset"
msgstr "Завантажити реÑурÑ"
msgid "Download codes"
-msgstr ""
+msgstr "Завантажити коди"
msgid "Download export"
+msgstr "Завантажити екÑпор"
+
+msgid "Download image"
msgstr ""
msgid "Download license"
msgstr "Завантажити ліцензію"
msgid "Download source code"
-msgstr ""
+msgstr "Завантажити вихідний код"
msgid "Download this directory"
msgstr "Завантажити цей каталог"
@@ -4630,9 +5562,15 @@ msgstr "Кожен Runner може бути в одному із таких ÑÑ‚
msgid "Edit"
msgstr "Редагувати"
+msgid "Edit %{issuable}"
+msgstr "Редагувати %{issuable}"
+
msgid "Edit %{name}"
msgstr "Редагувати %{name}"
+msgid "Edit Comment"
+msgstr "Редагувати коментар"
+
msgid "Edit Deploy Key"
msgstr "Редагувати ключ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ"
@@ -4654,12 +5592,21 @@ msgstr "Редагувати Ñніпет"
msgid "Edit application"
msgstr "Редагувати заÑтоÑунок"
+msgid "Edit board"
+msgstr "Редагувати дошку"
+
msgid "Edit comment"
msgstr "Редагувати коментар"
+msgid "Edit description"
+msgstr "Редагувати опиÑ"
+
msgid "Edit environment"
msgstr "Редагувати Ñередовище"
+msgid "Edit epic description"
+msgstr "Редагувати Ð¾Ð¿Ð¸Ñ ÐµÐ¿Ñ–ÐºÑƒ"
+
msgid "Edit file"
msgstr "Редагувати файл"
@@ -4678,11 +5625,23 @@ msgstr "Редагувати задачі"
msgid "Edit public deploy key"
msgstr "Редагувати публічний ключ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ"
+msgid "Edit stage"
+msgstr "Редагувати Ñтадію"
+
+msgid "Edit wiki page"
+msgstr "Редагувати wiki-Ñторінку"
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr "РедагуваннÑ"
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
msgid "Elasticsearch indexing restrictions"
-msgstr ""
+msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ–Ð½Ð´ÐµÐºÑÑƒÐ²Ð°Ð½Ð½Ñ Elasticsearch"
msgid "Elasticsearch indexing started"
msgstr "Розпочато індекÑацію Elasticsearch"
@@ -4691,10 +5650,10 @@ msgid "Elasticsearch integration. Elasticsearch AWS IAM."
msgstr "Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ð· Elasticsearch. Elasticsearch AWS IAM."
msgid "Elastic|None. Select namespaces to index."
-msgstr ""
+msgstr "Ðемає. Виберіть проÑтори імен Ð´Ð»Ñ Ñ–Ð½Ð´ÐµÐºÑуваннÑ."
msgid "Elastic|None. Select projects to index."
-msgstr ""
+msgstr "Ðемає. Виберіть проекти Ð´Ð»Ñ Ñ–Ð½Ð´ÐµÐºÑуваннÑ."
msgid "Email"
msgstr "Електронна пошта"
@@ -4702,68 +5661,71 @@ msgstr "Електронна пошта"
msgid "Email address"
msgstr "ÐдреÑа електронної пошти"
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "Email-патч"
msgid "Email the pipelines status to a list of recipients."
-msgstr ""
+msgstr "ÐадіÑлати ÑÑ‚Ð°Ñ‚ÑƒÑ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð° по електронній пошті ÑпиÑку отримувачів."
msgid "EmailError|It appears that the email is blank. Make sure your reply is at the top of the email, we can't process inline replies."
-msgstr ""
+msgstr "Схоже, що Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ”. ПереконайтеÑÑ, що ваша відповідь знаходитьÑÑ Ð½Ð° початку повідомленнÑ, ми не можемо оброблÑти відповіді, що знаходÑÑ‚ÑŒÑÑ Ð² Ñередині та в кінці."
msgid "EmailError|The thread you are replying to no longer exists, perhaps it was deleted? If you believe this is in error, contact a staff member."
-msgstr ""
+msgstr "Теми, до Ñкої відноÑитьÑÑ Ð²Ð°ÑˆÐ° відповідь більше не Ñ–Ñнує. Можливо воно було видалене? Якщо ви вважаєте, що це помилка, то звернітьÑÑ Ð´Ð¾ Ñпівробітника."
msgid "EmailError|We couldn't figure out what the email is for. Please create your issue or comment through the web interface."
-msgstr ""
+msgstr "Ми не змогли визначити до чого відноÑитьÑÑ Ñ†Ðµ повідомленнÑ. Будь лаÑка, Ñтворіть задачу або коментар через веб-інтерфейÑ."
msgid "EmailError|We couldn't figure out what the email is in reply to. Please create your comment through the web interface."
-msgstr ""
+msgstr "Ми не змогли визначити до чого відноÑитьÑÑ Ñ†Ðµ повідомленнÑ. Будь лаÑка, Ñтворіть коментар через веб-інтерфейÑ."
msgid "EmailError|We couldn't figure out what user corresponds to the email. Please create your comment through the web interface."
-msgstr ""
+msgstr "Ми не змогли визначити від імені Ñкого кориÑтувача надіÑлано це повідомленнÑ. Будь лаÑка, Ñтворіть ваш коментар через веб-інтерфейÑ."
msgid "EmailError|We couldn't find the project. Please check if there's any typo."
-msgstr ""
+msgstr "Ми не змогли знайти проект. Будь лаÑка, перевірте, чи немає помилок."
msgid "EmailError|You are not allowed to perform this action. If you believe this is in error, contact a staff member."
-msgstr ""
+msgstr "Вам не дозволено виконувати цю дію. Якщо ви вважаєте, що це неправильно, звернітьÑÑ Ð´Ð¾ Ñпівробітника."
msgid "EmailError|Your account has been blocked. If you believe this is in error, contact a staff member."
-msgstr ""
+msgstr "Ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾. Якщо ви вважаєте, що це неправильно, звернітьÑÑ Ð´Ð¾ Ñпівробітника."
msgid "EmailToken|reset it"
-msgstr ""
+msgstr "Ñкинути його"
msgid "EmailToken|resetting..."
-msgstr ""
+msgstr "ÑкиданнÑ..."
msgid "Emails"
msgstr "ÐдреÑи електронної пошти"
msgid "Emails separated by comma"
-msgstr ""
+msgstr "ÐдреÑи електронної пошти, розділені комами"
msgid "EmailsOnPushService|Disable code diffs"
-msgstr ""
+msgstr "Вимкнути різницю коду (diff)"
msgid "EmailsOnPushService|Don't include possibly sensitive code diffs in notification body."
-msgstr ""
+msgstr "Ðе включати потенційно Ñекретні чаÑтини відмінноÑтей в коді (diff) в тіло повідомленнÑ."
msgid "EmailsOnPushService|Email the commits and diff of each push to a list of recipients."
-msgstr ""
+msgstr "ВідправлÑти по електронній пошті на ÑпиÑок одежувачів коміти та відмінноÑÑ‚Ñ– (diff) Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ відправленнÑ."
msgid "EmailsOnPushService|Emails on push"
-msgstr ""
+msgstr "Електронні лиÑти Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ"
msgid "EmailsOnPushService|Emails separated by whitespace"
-msgstr ""
+msgstr "ÐдреÑи електронної пошти розділені пробілами"
msgid "EmailsOnPushService|Send from committer"
-msgstr ""
+msgstr "ÐадіÑлати від комітера"
msgid "EmailsOnPushService|Send notifications from the committer's email address if the domain is part of the domain GitLab is running on (e.g. %{domains})."
-msgstr ""
+msgstr "ÐадÑилати ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ–Ð· електронної адреÑи комітера Ñкщо Ñ—Ñ— домен Ñ” чаÑтиною домену на Ñкому працює GitLab (напр. %{domains})."
msgid "Embed"
msgstr "Вбудувати"
@@ -4786,11 +5748,14 @@ msgstr "Увімкнути збір даних Ð´Ð»Ñ Pseudonymizer"
msgid "Enable SAML authentication for this group"
msgstr "Увімкнути автентифікацію SAML Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— групи"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "Увімкнути Sentry Ð´Ð»Ñ Ð·Ð²Ñ–Ñ‚Ñ–Ð² про помилки та логуваннÑ."
+msgid "Enable access to Grafana"
+msgstr "Увімкнути доÑтуп до Grafana"
msgid "Enable access to the Performance Bar for a given group."
-msgstr ""
+msgstr "Увімкнути доÑтуп до панелі продуктивноÑÑ‚Ñ– Ð´Ð»Ñ Ð´Ð°Ð½Ð¾Ñ— групи."
+
+msgid "Enable and configure Grafana."
+msgstr "Включити і налаштувати Grafana."
msgid "Enable and configure InfluxDB metrics."
msgstr "Включити і налаштувати метрики InfluxDB."
@@ -4804,6 +5769,9 @@ msgstr "Увімкнути контроль за клаÑифікацією за
msgid "Enable error tracking"
msgstr "Увімкнути відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº"
+msgid "Enable feature to choose access level"
+msgstr "Увімкнути функцію Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ Ñ€Ñ–Ð²Ð½Ñ Ð´Ð¾Ñтупу"
+
msgid "Enable for this project"
msgstr "Увімкнути Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту"
@@ -4822,12 +5790,18 @@ msgstr "Увімкнути чи вимкнути збір даних Ð´Ð»Ñ Pseu
msgid "Enable or disable version check and usage ping."
msgstr "Увімкнути чи вимкнути перевірку верÑÑ–Ñ— та надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… про викориÑтаннÑ."
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "Увімкнути reCAPTCHA або Akismet та вÑтановити Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾ IP."
+msgid "Enable proxy"
+msgstr "ЗадіÑти прокÑÑ–-Ñервер"
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr "Увімкнути загальні Runner'и"
+msgid "Enable snowplow tracking"
+msgstr "Увімкнути відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· snowplow"
+
msgid "Enable two-factor authentication"
msgstr "Увімкнути двофакторну автентифікацію"
@@ -4838,7 +5812,7 @@ msgid "Enable usage ping to get an overview of how you are using GitLab from a f
msgstr "Увімкніть збір даних про викориÑтаннÑ, щоб отримати загальне уÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ те, Ñк ви викориÑтовуєте GitLab з точки зору функціоналу."
msgid "Enable/disable your service desk. %{link_start}Learn more about service desk%{link_end}."
-msgstr ""
+msgstr "Увімкнути/вимкнути Service Desk. %{link_start}ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Service Desk%{link_end}."
msgid "Enabled"
msgstr "Увімкнено"
@@ -4847,7 +5821,7 @@ msgid "Enabled Git access protocols"
msgstr "Увімкнути протоколи доÑтупу до Git"
msgid "Enabled sources for code import during project creation. OmniAuth must be configured for GitHub"
-msgstr ""
+msgstr "Ðктивовані джерела Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ коду під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ. OmniAuth має бути Ñконфігурована Ð´Ð»Ñ GitHub"
msgid "Enabling this will only make licensed EE features available to projects if the project namespace's plan includes the feature or if the project is public."
msgstr ""
@@ -4859,13 +5833,28 @@ msgid "Ends at (UTC)"
msgstr "ЗавершуєтьÑÑ Ð¾ (за Грінвічем)"
msgid "Enforce DNS rebinding attack protection"
+msgstr "ПримуÑово активувати захиÑÑ‚ від DNS rebinding"
+
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
msgstr ""
-msgid "Enter IP address range"
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
msgstr ""
+msgid "Enter IP address range"
+msgstr "Введіть діапазон IP-адреÑ"
+
+msgid "Enter a number"
+msgstr "Введіть номер"
+
msgid "Enter at least three characters to search"
-msgstr ""
+msgstr "Введіть щонайменше 3 Ñимволи Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ"
+
+msgid "Enter board name"
+msgstr "Введіть назву дошки"
+
+msgid "Enter domain"
+msgstr "Введіть домен"
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "Введіть URL-адреÑу вашого Bitbucket Server Ñ– ключ доÑтупу"
@@ -4873,6 +5862,9 @@ msgstr "Введіть URL-адреÑу вашого Bitbucket Server Ñ– клюÑ
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr "Введіть URL-адреÑу вашого Ñервера Phabricator Ñ– перÑональний ключ доÑтупу"
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "Введіть Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–"
@@ -4885,11 +5877,20 @@ msgstr "Введіть Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на злиттÑ"
msgid "Enter the merge request title"
msgstr "Введіть назву запиту на злиттÑ"
-msgid "EnviornmentDashboard|You are looking at the last updated environment"
+msgid "Enter your password to approve"
+msgstr "Введіть пароль Ð´Ð»Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ"
+
+msgid "Enter zen mode"
msgstr ""
+msgid "EnviornmentDashboard|You are looking at the last updated environment"
+msgstr "Зараз ви бачите оÑтаннє оновлене Ñередовище"
+
+msgid "Environment"
+msgstr "Середовище"
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
-msgstr ""
+msgstr "Змінні Ñередовища передаютьÑÑ Ð´Ð¾ Ñередовища через runner. Вони можуть бути захищеними, тобто бути видимими лише Ð´Ð»Ñ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ñ… гілок та тегів. Додатково, вони можуть бути замаÑковані, щоб не відображатиÑÑ Ñƒ журналі завдань, але в цьому випадку вони мають задовільнÑти певним регулÑними виразам. Ви можете викориÑтовувати змінні Ñередовища Ð´Ð»Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ–Ð², Ñекретних ключів тощо."
msgid "Environment variables are configured by your administrator to be %{link_start}protected%{link_end} by default"
msgstr "Змінні Ñередовища налаштовані адмініÑтратором бути %{link_start}захищеними%{link_end} за замовчуваннÑм"
@@ -4913,7 +5914,7 @@ msgid "EnvironmentsDashboard|Add projects"
msgstr "Додати проекти"
msgid "EnvironmentsDashboard|Environments Dashboard"
-msgstr ""
+msgstr "Панель ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñередовищами"
msgid "EnvironmentsDashboard|Job: %{job}"
msgstr "ЗавданнÑ: %{job}"
@@ -4925,7 +5926,7 @@ msgid "EnvironmentsDashboard|Remove"
msgstr "Видалити"
msgid "EnvironmentsDashboard|The environments dashboard provides a summary of each project's environments' status, including pipeline and alert statuses."
-msgstr ""
+msgstr "Панель ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñередовищами міÑтить інформацію про Ñтан кожного із проектних Ñередовищ включно зі Ñтаном конвеєрів та попереджень."
msgid "Environments|An error occurred while fetching the environments."
msgstr "Виникла помилка при завантаженні Ñередовищ."
@@ -4937,7 +5938,7 @@ msgid "Environments|An error occurred while re-deploying the environment, please
msgstr "Виникла помилка під Ñ‡Ð°Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð¼Ñƒ розгортанні Ñередовища, будь лаÑка, Ñпробуйте ще раз"
msgid "Environments|An error occurred while rolling back the environment, please try again"
-msgstr ""
+msgstr "Помилка при відкочуванні Ñередовища, будь лаÑка, Ñпробуйте знову"
msgid "Environments|An error occurred while stopping the environment, please try again"
msgstr "Виникла помилка під Ñ‡Ð°Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐºÐ¸ Ñередовища, будь лаÑка, Ñпробуйте ще раз"
@@ -4994,7 +5995,7 @@ msgid "Environments|Re-deploy"
msgstr "Повторно розгорнути"
msgid "Environments|Re-deploy environment %{environment_name}?"
-msgstr ""
+msgstr "Повторно розгорнути в Ñередовищі %{environment_name}?"
msgid "Environments|Re-deploy environment %{name}?"
msgstr "Повторно розгорнути в Ñередовищі %{name}?"
@@ -5030,13 +6031,13 @@ msgid "Environments|Stopping"
msgstr "Зупинка"
msgid "Environments|This action will relaunch the job for commit %{commit_id}, putting the environment in a previous version. Are you sure you want to continue?"
-msgstr ""
+msgstr "Ð¦Ñ Ð´Ñ–Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ запуÑтить Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ %{commit_id}, повертаючи Ñередовище до попередньої верÑÑ–Ñ—. Ви впевнені, що хочете продовжити?"
msgid "Environments|This action will relaunch the job for commit %{linkStart}%{commitId}%{linkEnd}, putting the environment in a previous version. Are you sure you want to continue?"
-msgstr ""
+msgstr "Ð¦Ñ Ð´Ñ–Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ запуÑтить Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ %{linkStart}%{commitId}%{linkEnd}, повертаючи Ñередовище до попередньої верÑÑ–Ñ—. Ви впевнені, що хочете продовжити?"
msgid "Environments|This action will run the job defined by %{name} for commit %{linkStart}%{commitId}%{linkEnd} putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?"
-msgstr ""
+msgstr "Ð¦Ñ Ð´Ñ–Ñ Ð·Ð°Ð¿ÑƒÑтить Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ñ–Ð· іменем %{name} Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ %{linkStart}%{commitId}%{linkEnd} повертаючи Ñередовище до попередньої верÑÑ–Ñ—. Ви зможете повернути його шлÑхом повторного Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð¾Ñтанньої верÑÑ–Ñ— вашого заÑтоÑунку. Ви впевнені, що хочете продовжити?"
msgid "Environments|This action will run the job defined by staging for commit %{commit_id}, putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?"
msgstr ""
@@ -5056,32 +6057,38 @@ msgstr "Епік"
msgid "Epics"
msgstr "Епіки"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr "План-графік епіків"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Епіки дозволÑÑŽÑ‚ÑŒ керувати вашим портфелем проектів ефективніше та з меншими зуÑиллÑми"
msgid "Epics|%{epicsCount} epics and %{issuesCount} issues"
-msgstr ""
+msgstr "%{epicsCount} епіків та %{issuesCount} задач"
msgid "Epics|Add an epic"
msgstr "Додати епік"
msgid "Epics|Add an existing epic as a child epic."
-msgstr ""
+msgstr "Додати Ñ–Ñнуючий епік Ñк дочірній."
msgid "Epics|An error occurred while saving the %{epicDateType} date"
msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при збереженні дати %{epicDateType}"
msgid "Epics|Are you sure you want to remove %{bStart}%{targetIssueTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}?"
-msgstr ""
+msgstr "Ви впевнені, що хочете видалити %{bStart}%{targetIssueTitle}%{bEnd} із %{bStart}%{parentEpicTitle}%{bEnd}?"
msgid "Epics|Create an epic within this group and add it as a child epic."
-msgstr ""
+msgstr "Створити епік в цій групі Ñ– додати його Ñк дочірній."
msgid "Epics|Create new epic"
-msgstr ""
+msgstr "Створити новий епік"
msgid "Epics|How can I solve this?"
msgstr "Як Ñ Ð¼Ð¾Ð¶Ñƒ це вирішити?"
@@ -5095,17 +6102,32 @@ msgstr "Видалити епік"
msgid "Epics|Remove issue"
msgstr "Видалити задачу"
-msgid "Epics|Something went wrong while creating child epics."
+msgid "Epics|Show more"
+msgstr "Показати більше"
+
+msgid "Epics|Something went wrong while assigning issue to epic."
msgstr ""
+msgid "Epics|Something went wrong while creating child epics."
+msgstr "ЩоÑÑŒ пішло не так при Ñтворенні дочірніх епіків."
+
msgid "Epics|Something went wrong while fetching child epics."
+msgstr "ЩоÑÑŒ пішло не так при отриманні дочірніх епіків."
+
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
msgstr ""
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "Ці дати впливають на те, Ñк ваші епіки відображатимутьÑÑ Ð½Ð° плані-графіку. Дати з етапів берутьÑÑ Ð· етапів, призначених до задач у цьому епіку. Ви також можете задавати фікÑовані дати, або видалÑти Ñ—Ñ…."
msgid "Epics|This will also remove any descendents of %{bStart}%{targetEpicTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}. Are you sure?"
-msgstr ""
+msgstr "Це також видалить уÑÑ– підлеглі елементи %{bStart}%{targetEpicTitle}%{bEnd} з %{bStart}%{parentEpicTitle}%{bEnd}. Ви впевнені?"
msgid "Epics|To schedule your epic's %{epicDateType} date based on milestones, assign a milestone with a %{epicDateType} date to any issue in the epic."
msgstr "Щоб запланувати %{epicDateType} дату вашого епіку на оÑнові етапів, призначте етап з %{epicDateType} датою Ð´Ð»Ñ Ð±ÑƒÐ´ÑŒ-Ñкої задачі в цьому епіку."
@@ -5119,9 +6141,6 @@ msgstr "початок"
msgid "Error"
msgstr "Помилка"
-msgid "Error Reporting and Logging"
-msgstr "Звіти про помилки та логуваннÑ"
-
msgid "Error Tracking"
msgstr "ВідÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº"
@@ -5137,6 +6156,12 @@ msgstr "Помилка при видаленні %{issuableType}"
msgid "Error fetching contributors data."
msgstr "Помилка Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… учаÑників."
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ñ–Ñ‚Ð¾Ðº."
@@ -5150,7 +6175,7 @@ msgid "Error fetching refs"
msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ refs"
msgid "Error fetching the dependency list. Please check your network connection and try again."
-msgstr ""
+msgstr "Помилка при отриманні ÑпиÑку залежноÑтей. Будь лаÑка, перевірте ваше Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· мережею."
msgid "Error fetching usage ping data."
msgstr "Помилка при отриманні данних про викориÑтаннÑ."
@@ -5165,7 +6190,7 @@ msgid "Error loading burndown chart data"
msgstr ""
msgid "Error loading file viewer."
-msgstr ""
+msgstr "Помилка при Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñдача файлів."
msgid "Error loading last commit."
msgstr "Помилка при завантаженні оÑтаннього коміту."
@@ -5177,7 +6202,7 @@ msgid "Error loading merge requests."
msgstr "Помилка при завантаженні запитів на злиттÑ."
msgid "Error loading milestone tab"
-msgstr ""
+msgstr "Помилка при завантаженні вкладки етапів"
msgid "Error loading project data. Please try again."
msgstr "Помилка при завантаженні даних проекту. Будь лаÑка, Ñпробуйте знову."
@@ -5189,25 +6214,31 @@ msgid "Error loading template."
msgstr "Помилка при завантаженні шаблону."
msgid "Error loading viewer"
-msgstr ""
+msgstr "Помилка при завантаженні переглÑдача"
msgid "Error occurred when fetching sidebar data"
-msgstr ""
+msgstr "Помилка при отриманні даних Ð´Ð»Ñ Ð±Ñ–Ñ‡Ð½Ð¾Ñ— панелі"
+
+msgid "Error occurred when saving assignees"
+msgstr "Помилка при збереженні виконавців"
msgid "Error occurred when toggling the notification subscription"
msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñки на ÑповіщеннÑ"
+msgid "Error occurred while updating the issue weight"
+msgstr "Помилка при оновленні ваги задачі"
+
msgid "Error occurred. User was not blocked"
msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. КориÑтувач не був заблокований"
msgid "Error occurred. User was not confirmed"
-msgstr ""
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. КориÑтувача не був підтверджений"
msgid "Error occurred. User was not unblocked"
msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. КориÑтувач не був розблокований"
msgid "Error occurred. User was not unlocked"
-msgstr ""
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. КориÑтувач не був розблокований"
msgid "Error rendering markdown preview"
msgstr "Помилка при попередньому переглÑді markdown"
@@ -5215,29 +6246,32 @@ msgstr "Помилка при попередньому переглÑді markdo
msgid "Error saving label update."
msgstr "Помилка при збереженні мітки."
+msgid "Error setting up editor. Please try again."
+msgstr "Проблема при налаштуванні редактора. Будь лаÑка, Ñпробуйте знову."
+
msgid "Error updating %{issuableType}"
msgstr "Помилка при оновленні %{issuableType}"
-msgid "Error updating status for all todos."
-msgstr "Помилка Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑтатуÑу Ð´Ð»Ñ Ð²ÑÑ–Ñ… нагадувань."
+msgid "Error updating status for all to-do items."
+msgstr "Помилка при оновленні ÑтатуÑа Ð´Ð»Ñ Ð²ÑÑ–Ñ… нагадувань."
-msgid "Error updating todo status."
-msgstr "Помилка при оновленні ÑтатуÑу нагадуваннÑ."
+msgid "Error updating status of to-do item."
+msgstr "Помилка при оновленні ÑтатуÑа нагадуваннÑ."
msgid "Error uploading file"
msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
msgid "Error uploading file: %{stripped}"
-msgstr ""
+msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ: %{stripped}"
msgid "Error while loading the merge request. Please try again."
msgstr "Помилка при завантаженні запита на злиттÑ. Будь лаÑка, Ñпробуйте знову."
msgid "Error while loading the project data. Please try again."
-msgstr ""
+msgstr "Помилка при завантаженні даних проекту. Будь лаÑка, Ñпробуйте знову."
msgid "Error while migrating %{upload_id}: %{error_message}"
-msgstr ""
+msgstr "Помилка при міграції %{upload_id}: %{error_message}"
msgid "Error with Akismet. Please check the logs for more info."
msgstr "Помилка з Akismet. Будь лаÑка, перевірте журнали Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації."
@@ -5249,28 +6283,28 @@ msgid "ErrorTracking|Active"
msgstr "Ðктивовано"
msgid "ErrorTracking|After adding your Auth Token, use the 'Connect' button to load projects"
-msgstr ""
+msgstr "ПіÑÐ»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ токена автентифікації викориÑтовуйте кнопку \"З’єднаннÑ\" Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñ–Ð²"
msgid "ErrorTracking|Auth Token"
msgstr "Токен автентифікації"
msgid "ErrorTracking|Click 'Connect' to re-establish the connection to Sentry and activate the dropdown."
-msgstr ""
+msgstr "ÐатиÑніть \"З’єднаннÑ\", щоб відновити Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Sentry Ñ– активувати випадаюче меню."
msgid "ErrorTracking|Connection has failed. Re-check Auth Token and try again."
-msgstr ""
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ðµ. Перевірте токер автентифікації та Ñпробуйте знову."
msgid "ErrorTracking|Find your hostname in your Sentry account settings page"
-msgstr ""
+msgstr "Знайдіть Ñ–Ð¼â€™Ñ Ñ…Ð¾Ñта на Ñторінці налаштувань облікового запиÑу Sentry"
msgid "ErrorTracking|No projects available"
-msgstr ""
+msgstr "Ðемає доÑтупних проектів"
msgid "ErrorTracking|Select project"
msgstr "Виберіть проект"
msgid "ErrorTracking|To enable project selection, enter a valid Auth Token"
-msgstr ""
+msgstr "Ð”Ð»Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñ– вибору проектів введіть дійÑний токен автентифікації"
msgid "Errors"
msgstr "Помилки"
@@ -5314,9 +6348,15 @@ msgstr "Ð©Ð¾Ñ‚Ð¸Ð¶Ð½Ñ (в неділю о 4:00 ранку)"
msgid "Everyone"
msgstr "Будь-хто"
+msgid "Everyone With Access"
+msgstr "Кожен, хто має доÑтуп"
+
msgid "Everyone can contribute"
msgstr "Кожен може зробити Ñвій внеÑок"
+msgid "Everything on your to-do list is marked as done."
+msgstr "Ð’Ñе у вашому ÑпиÑку нагадувань відмічено виконаним."
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr "Ð’Ñе, що потрібно Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñайту на GitLab Pages за допомогою GitBook."
@@ -5336,7 +6376,10 @@ msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple querie
msgstr ""
msgid "Except policy:"
-msgstr ""
+msgstr "Політика виключеннÑ:"
+
+msgid "Existing"
+msgstr "ІÑнуючий"
msgid "Existing members and groups"
msgstr "ІÑнуючі учаÑники та групи"
@@ -5350,9 +6393,18 @@ msgstr "Розгорнути вÑе"
msgid "Expand approvers"
msgstr "Розгорнути ÑпиÑок затверджуючих оÑіб"
+msgid "Expand down"
+msgstr "Розгорнути вниз"
+
+msgid "Expand dropdown"
+msgstr "Розгорнути випадаючий ÑпиÑок"
+
msgid "Expand sidebar"
msgstr "Розгорніть бічну панель"
+msgid "Expand up"
+msgstr "Розгорнути вгору"
+
msgid "Expiration date"
msgstr "Термін дії"
@@ -5362,8 +6414,14 @@ msgstr "Термін дії закінчивÑÑ"
msgid "Expired %{expiredOn}"
msgstr "Минув(-ло) %{expiredOn}"
+msgid "Expires"
+msgstr "ЗакінчуєтьÑÑ"
+
+msgid "Expires at"
+msgstr "ДійÑний до"
+
msgid "Expires in %{expires_at}"
-msgstr ""
+msgstr "ЗакінчуєтьÑÑ %{expires_at}"
msgid "Explain the problem. If appropriate, provide a link to the relevant issue or comment."
msgstr "ПоÑÑніть проблему. У разі необхідноÑÑ‚Ñ– надайте поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° відповідну задачу або коментар."
@@ -5396,7 +6454,7 @@ msgid "Export project"
msgstr "ЕкÑпорт проекту"
msgid "Export this project with all its related data in order to move your project to a new GitLab instance. Once the export is finished, you can import the file from the \"New Project\" page."
-msgstr ""
+msgstr "ЕкÑпортувати цей проект з уÑіма пов'Ñзаними даними Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб переміÑтити його на новий інÑÑ‚Ð°Ð½Ñ GitLab. ПіÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ ÐµÐºÑпорту ви зможете імпортувати файл на Ñторінці \"Ðовий проект\"."
msgid "External Classification Policy Authorization"
msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ ÐšÐ»Ð°ÑÐ¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÐŸÐ¾Ð»Ñ–Ñ‚Ð¸ÐºÐ¸ Ðвторизації"
@@ -5416,6 +6474,12 @@ msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ñ–Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½Ð¸Ð»Ð° доÑтуÐ
msgid "External authorization request timeout"
msgstr "Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на зовнішню авторизацію"
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "Мітка клаÑифікації"
@@ -5423,10 +6487,10 @@ msgid "ExternalAuthorizationService|When no classification label is set the defa
msgstr "Якщо клаÑифікаційну мітку не вÑтановлено, викориÑтовуватиметьÑÑ Ñтандартна мітка `%{default_label}`."
msgid "ExternalMetrics|Add a button to the metrics dashboard linking directly to your existing external dashboards."
-msgstr ""
+msgstr "Додати кнопку до панелі метрик, що вказує безпоÑередньо на вашу Ñ–Ñнуючу зовнішню панель."
msgid "ExternalMetrics|Enter the URL of the dashboard you want to link to"
-msgstr ""
+msgstr "Введіть URL-адреÑу панелі на Ñку ви хочете поÑлатиÑÑ"
msgid "ExternalMetrics|External Dashboard"
msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ керуваннÑ"
@@ -5438,10 +6502,10 @@ msgid "ExternalWikiService|External Wiki"
msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ Ð²Ñ–ÐºÑ–"
msgid "ExternalWikiService|Replaces the link to the internal wiki with a link to an external wiki."
-msgstr ""
+msgstr "Замінює поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° внутрішню вікі поÑиланнÑм на зовнішню вікі."
msgid "ExternalWikiService|The URL of the external Wiki"
-msgstr ""
+msgstr "URL-адреÑа зовнішньої вікі"
msgid "Facebook"
msgstr "Facebook"
@@ -5455,6 +6519,15 @@ msgstr "Провалені завданнÑ"
msgid "Failed create wiki"
msgstr "Ðе вдалоÑÑ Ñтворити вікі"
+msgid "Failed to add a Zoom meeting"
+msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Zoom-зуÑтріч"
+
+msgid "Failed to apply commands."
+msgstr "Ðе вдалоÑÑ Ð·Ð°ÑтоÑувати команди."
+
+msgid "Failed to assign a user because no user was found."
+msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ кориÑтувача, тому що жодного кориÑтувача не було знайдено."
+
msgid "Failed to change the owner"
msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ влаÑника"
@@ -5462,25 +6535,28 @@ msgid "Failed to check related branches."
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ пов’Ñзані гілки."
msgid "Failed to connect to the prometheus server"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ÑÑ Ñ–Ð· Ñервером Prometheus"
msgid "Failed to create Merge Request. Please try again."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ñтворити запит на злиттÑ. Будь лаÑка, Ñпробуйте знову."
msgid "Failed to create a branch for this issue. Please try again."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ñтворити гілку Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— задачі. Будь лаÑка, Ñпробуйте знову."
msgid "Failed to create repository via gitlab-shell"
-msgstr ""
+msgstr "Ðе вдалÑÑ Ñтворити репозиторій через gitlab-shell"
msgid "Failed to create resources"
msgstr "Ðе вдалоÑÑ Ñтворити реÑурÑ"
+msgid "Failed to delete board. Please try again."
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ дошку. Будь лаÑка, Ñпробуйте знову."
+
msgid "Failed to deploy to"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ð¸ до"
msgid "Failed to get ref."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ref."
msgid "Failed to install."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити."
@@ -5489,22 +6565,37 @@ msgid "Failed to load emoji list."
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ ÑпиÑок Ñмайликів."
msgid "Failed to load errors from Sentry. Error message: %{errorMessage}"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ помилки із Sentry. Ð Ñаме: %{errorMessage}"
msgid "Failed to load groups & users."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ групи та кориÑтувачів."
msgid "Failed to load related branches"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ пов’Ñзані гілки"
+
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
msgstr ""
+msgid "Failed to move this issue because label was not found."
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити цю задачу тому що мітку не знайдено."
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити цю задачу, тому що можна вказувати тільки одну мітку."
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити цю задачу, тому що цільовий проект не Ñ–Ñнує."
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти мітку через внутрішню проблему. Будь лаÑка, звернітьÑÑ Ð´Ð¾ адмініÑтраторів."
msgid "Failed to protect the branch"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ гілку захищеною"
msgid "Failed to protect the environment"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñередовище захищеним"
+
+msgid "Failed to remove a Zoom meeting"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ Zoom-зуÑтріч"
msgid "Failed to remove issue from board, please try again."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ задачу з дошки, будь лаÑка, Ñпробуйте ще раз."
@@ -5522,23 +6613,26 @@ msgid "Failed to remove user key."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ ключ кориÑтувача."
msgid "Failed to reset key. Please try again."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ñкинути ключ. Будь лаÑка, Ñпробуйте знову."
msgid "Failed to save comment!"
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ коментар!"
msgid "Failed to save merge conflicts resolutions. Please try again!"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚Ñ–Ð² злиттÑ. Будь лаÑка, Ñпробуйте знову!"
msgid "Failed to save new settings"
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ нові параметри"
msgid "Failed to save preferences (%{error_message})."
-msgstr ""
+msgstr "Ðе вдалÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð½Ð°Ð»Ð°ÑˆÐ½ÑƒÐ²Ð°Ð½Ð½Ñ (%{error_message})."
msgid "Failed to save preferences."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ налаштуваннÑ."
+msgid "Failed to set due date because the date format is invalid."
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити заплановану дату Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ‚Ð¾Ð¼Ñƒ що формат дати Ñ” неправильним."
+
msgid "Failed to signing using smartcard authentication"
msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´Ð¿Ð¸Ñати з викориÑтаннÑм перевірки автентичноÑÑ‚Ñ– Ñмарт-карти"
@@ -5546,7 +6640,7 @@ msgid "Failed to update branch!"
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ гілку!"
msgid "Failed to update environment!"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ñередовище!"
msgid "Failed to update issues, please try again."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ задачі. Будь лаÑка, Ñпробуйте ще раз."
@@ -5561,11 +6655,14 @@ msgid "Failed to upgrade."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸."
msgid "Failed to upload object map file"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл відповідноÑÑ‚Ñ– об’єктів"
msgid "Failure"
msgstr "Помилка"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5579,10 +6676,10 @@ msgid "Feature Flags"
msgstr "Перемикачі функцій"
msgid "Feature flag was not removed."
-msgstr ""
+msgstr "Перемикач функцій не був видалений."
msgid "Feature flag was successfully removed."
-msgstr ""
+msgstr "Перемикач функції уÑпішно видалено."
msgid "FeatureFlags|* (All Environments)"
msgstr "* (УÑÑ– Ñередовища)"
@@ -5596,6 +6693,15 @@ msgstr "URL-адреÑа API"
msgid "FeatureFlags|Active"
msgstr "Ðктивний"
+msgid "FeatureFlags|Add"
+msgstr "Додати"
+
+msgid "FeatureFlags|All users"
+msgstr "Ð’ÑÑ– кориÑтувачі"
+
+msgid "FeatureFlags|Clear all"
+msgstr "ОчиÑтити вÑе"
+
msgid "FeatureFlags|Configure"
msgstr "ÐалаштуваннÑ"
@@ -5617,6 +6723,9 @@ msgstr "ОпиÑ"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "Редагувати перемикач функції"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr "Введіть ÑпиÑок ідентифікаторів кориÑтувачів розділений комами"
+
msgid "FeatureFlags|Environment Spec"
msgstr "Ð¡Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñередовища"
@@ -5626,19 +6735,19 @@ msgstr "Специфікації Ñередовищ"
msgid "FeatureFlags|Feature Flag"
msgstr "Перемикач функції"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
-msgstr "Поведінка перемикачів функцій ÑтворюєтьÑÑ ÑˆÐ»Ñхом ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ правил Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтану цільових Ñередовищ. Правило за замовчуваннÑм %{codeStart}*%{codeEnd} Ð´Ð»Ñ %{boldStart}Ð’ÑÑ–Ñ… Ñередовищ%{boldEnd} вже налаштовано, Ñ– ви можете додати Ñтільки правил, Ñкільки вам потрібно, шлÑхом Ð·Ð°Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñпецифікацій Ñередовищ нижче. Ви можете перемикати Ñтан Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ з ваших правил, щоб зробити Ñ—Ñ… %{boldStart}Ðктивними%{boldEnd} або %{boldStart}Ðеактивними%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgstr "Поведінка перемикачів функцій будуєтьÑÑ ÑˆÐ»Ñхом ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ правил Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтану цільових Ñередовищ. Ð”Ð»Ñ %{boldStart}вÑÑ–Ñ… Ñередовищ%{boldEnd} вÑтановлено правило за замовчуваннÑм %{codeStart}*%{codeEnd}, але ви можете додавати необхідні правила шлÑхом вибору нижче Ñпецифікацій Ñередовищ. Ви можете умімкнути або вимкнути певну поведінку Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ із ваших правил зробивши його %{boldStart}Ðктивним%{boldEnd} або %{boldStart}Ðеактивним%{boldEnd}."
msgid "FeatureFlags|Feature Flags"
msgstr "Перемикачі функцій"
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
-msgstr "Перемикачі функцій дозволÑÑŽÑ‚ÑŒ налаштовувати ваш код по-різному за допомогою динамічного ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñ‡Ð¸ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¿ÐµÐ²Ð½Ð¾Ñ— функціональноÑÑ‚Ñ–."
-
msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr "Перемикач функції %{name} буде видалено. Ви впевнені?"
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgstr "Перемикачі функцій дозволÑÑŽÑ‚ÑŒ налаштовувати ваш код по-різному за допомогою динамічного ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñ‡Ð¸ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¿ÐµÐ²Ð½Ð¾Ñ— функціональноÑÑ‚Ñ–."
+
+msgid "FeatureFlags|Get started with feature flags"
msgstr "Розпочати роботу з перемикачами функцій"
msgid "FeatureFlags|Inactive"
@@ -5648,15 +6757,15 @@ msgid "FeatureFlags|Inactive flag for %{scope}"
msgstr "Ðеактивний перемикач функції Ð´Ð»Ñ %{scope}"
msgid "FeatureFlags|Install a %{docs_link_anchored_start}compatible client library%{docs_link_anchored_end} and specify the API URL, application name, and instance ID during the configuration setup. %{docs_link_start}More Information%{docs_link_end}"
-msgstr ""
+msgstr "Ð’Ñтановіть %{docs_link_anchored_start}ÑуміÑну клієнтÑьку бібліотеку%{docs_link_anchored_end} Ñ– вкажіть URL адреÑу API, назву заÑтоÑунку та ідентифікатор інÑтанÑа під Ñ‡Ð°Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ. %{docs_link_start}Більше інформації%{docs_link_end}"
msgid "FeatureFlags|Instance ID"
msgstr "Ідентифікатор ІнÑтанÑу"
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ñ–Ð² функцій"
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr "Більше інформації"
msgid "FeatureFlags|Name"
@@ -5668,19 +6777,43 @@ msgstr "Ðовий"
msgid "FeatureFlags|New Feature Flag"
msgstr "Ðовий перемикач функції"
+msgid "FeatureFlags|New feature flag"
+msgstr "Ðовий перемикач функції"
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr "Процент Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ (за кориÑтувачами, що здійÑнили вхід)"
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr "Процент Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути цілим чиÑлом між 0 та 100"
+
msgid "FeatureFlags|Protected"
msgstr "Захищено"
+msgid "FeatureFlags|Remove"
+msgstr "Видалити"
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr "Процент розгортаннÑ"
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr "Ð¡Ñ‚Ñ€Ð°Ñ‚ÐµÐ³Ñ–Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ"
+
msgid "FeatureFlags|Status"
msgstr "СтатуÑ"
+msgid "FeatureFlags|Target Users"
+msgstr "Цільові кориÑтувачі"
+
msgid "FeatureFlags|Target environments"
msgstr "Цільові Ñередовища"
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr "Поведінка базована на цільових кориÑтувачах будуєтьÑÑ ÑˆÐ»Ñхом ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÑпиÑку ідентифікаторів кориÑтувачів. Ці ідентифікатори мають належати кориÑтувачам в ÑиÑтемі, Ñкій вÑтановлюєтьÑÑ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡ функцій, а не в GitLab. Цей ÑпиÑок заÑтоÑовуєтьÑÑ Ð´Ð¾ %{strong_start}вÑÑ–Ñ… Ñередовищ%{strong_end} Ñ– на нього не впливають правила цільвих Ñередовищ."
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr "Ðемає активних перемикачів функцій"
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr "Ðемає неактивних перемикачів функцій"
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5689,6 +6822,9 @@ msgstr "Помилка при отриманні перемикачів функ
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr "Повторіть Ñпробу через деÑкий Ñ‡Ð°Ñ Ð°Ð±Ð¾ звернітьÑÑ Ð´Ð¾ вашої Ñлужби підтримки."
+msgid "FeatureFlags|User IDs"
+msgstr "Ідентифікатори кориÑтувачів"
+
msgid "Feb"
msgstr "лют."
@@ -5696,19 +6832,16 @@ msgid "February"
msgstr "лютий"
msgid "Fetching incoming email"
-msgstr ""
+msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… повідомлень електронної пошти"
msgid "Fetching licenses failed."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ліцензії."
msgid "Fetching licenses failed. The request endpoint was not found."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ліцензії. Кінцева точка Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ не знайдена."
msgid "Fetching licenses failed. You are not permitted to perform this action."
-msgstr ""
-
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "ÐŸÐ¾Ð»Ñ Ð½Ð° цій Ñторінці зараз недоÑтупні Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ, ви можете налаштувати"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ліцензії. У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозовлів виконувати цю дію."
msgid "File"
msgid_plural "Files"
@@ -5742,7 +6875,7 @@ msgid "Files"
msgstr "Файли"
msgid "Files breadcrumb"
-msgstr ""
+msgstr "ÐÐ°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ Ð¿Ð¾ файлам"
msgid "Files, directories, and submodules in the path %{path} for commit reference %{ref}"
msgstr ""
@@ -5774,6 +6907,9 @@ msgstr "Фільтрувати результати за групою"
msgid "Filter results by project"
msgstr "Фільтрувати результати за проектом"
+msgid "Filter your projects by name"
+msgstr "Відфільтрувати ваші проекти за іменами"
+
msgid "Filter..."
msgstr "Фільтр..."
@@ -5808,7 +6944,7 @@ msgid "Finish review"
msgstr "Завершити перевірку"
msgid "Finish setting up your dedicated account for <strong>%{group_name}</strong>."
-msgstr ""
+msgstr "Завершіть Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ виділеного облікового запиÑу Ð´Ð»Ñ <strong>%{group_name}</strong>."
msgid "Finished"
msgstr "Завершено"
@@ -5816,6 +6952,9 @@ msgstr "Завершено"
msgid "First day of the week"
msgstr "Перший день тижнÑ"
+msgid "First name"
+msgstr "Ім'Ñ"
+
msgid "Fixed date"
msgstr "Дата виправленнÑ"
@@ -5879,6 +7018,9 @@ msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ð¸Ñ… проектів будь-Ñкий кориÑÑ
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr "Ð”Ð»Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð¸Ñ… проектів будь-Ñкий зареєÑтрований кориÑтувач може переглÑдати конвеєри та отримати доÑтуп до інформації про роботу (логи та артефакти)"
+msgid "Forgot your password?"
+msgstr "Забули ваш пароль?"
+
msgid "Fork"
msgstr "Форк"
@@ -5898,7 +7040,7 @@ msgid "Forking in progress"
msgstr "ВідбуваєтьÑÑ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð¾Ñ€ÐºÑƒ"
msgid "Forking repository"
-msgstr ""
+msgstr "Ð’Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ (форк) репозиторію"
msgid "Forks"
msgstr "Форки"
@@ -5907,7 +7049,7 @@ msgid "Format"
msgstr "Формат"
msgid "Forward external support email address to"
-msgstr ""
+msgstr "ПеренаправлÑти зовнішну адреÑу Ñлужби підтримки на"
msgid "Found errors in your %{gitlab_ci_yml}:"
msgstr "Знайдено помилки у вашому %{gitlab_ci_yml}:"
@@ -5915,12 +7057,18 @@ msgstr "Знайдено помилки у вашому %{gitlab_ci_yml}:"
msgid "Found errors in your .gitlab-ci.yml:"
msgstr "Знайдено помилки у вашому .gitlab-ci.yml:"
+msgid "Free Trial"
+msgstr "Безкоштовний випробувальний період"
+
msgid "Free Trial of GitLab.com Gold"
msgstr "Безкоштовна пробна верÑÑ–Ñ GitLab.com Gold"
msgid "Friday"
msgstr "П'ÑтницÑ"
+msgid "From"
+msgstr "Від"
+
msgid "From %{providerTitle}"
msgstr "З %{providerTitle}"
@@ -5961,7 +7109,7 @@ msgid "GPG Keys"
msgstr "GPG ключі"
msgid "GPG keys allow you to verify signed commits."
-msgstr ""
+msgstr "GPG ключі дозволÑÑŽÑ‚ÑŒ вам перевірÑти підпиÑані коміти."
msgid "GPG signature (loading...)"
msgstr "ÐŸÑ–Ð´Ð¿Ð¸Ñ GPG (завантаженнÑ...)"
@@ -5981,8 +7129,11 @@ msgstr "Створити Ñтандартний набір міток"
msgid "Generate key"
msgstr "Згенерувати ключ"
+msgid "Generate link to chart"
+msgstr "Створити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° графік"
+
msgid "Generate new export"
-msgstr ""
+msgstr "Створити новий екÑпорт"
msgid "Geo"
msgstr "Geo"
@@ -5993,6 +7144,9 @@ msgstr "Гео-Вузли"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Geo дозволÑÑ” вам реплікувати ваш інÑÑ‚Ð°Ð½Ñ GitLab у інших географічних локаціÑÑ…."
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "Вузол не працює або зламаний."
@@ -6056,6 +7210,9 @@ msgstr "Локальні LFS-об’єкти"
msgid "GeoNodes|Local attachments"
msgstr "Локальні додатки"
+msgid "GeoNodes|Local container repositories"
+msgstr "Локальні репозиторії контейнерів"
+
msgid "GeoNodes|Local job artifacts"
msgstr "Ðртефакти локальних завдань"
@@ -6164,33 +7321,42 @@ msgstr "Ви налаштували Geo-вузли через незахищен
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} заплановано Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÑƒÑового повторного завантаженнÑ"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} заплановано Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ñ— перевірки"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} заплановано Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ñ— Ñинхронізації"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr "%{name} заплановано Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ñ— перевірки"
+
msgid "Geo|All"
msgstr "Ð’ÑÑ–"
msgid "Geo|All projects"
msgstr "Ð’ÑÑ– проекти"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "Ð’ÑÑ– проекти плануютьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ñ— перевірки"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "Ð’ÑÑ– проекти плануютьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ñ— Ñинхронізації"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr "Ð’ÑÑ– проекти заплановано Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ñ— перевірки"
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "Групові операції"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr "Виберіть групи, Ñкі ви хотіли б Ñинхронізувати на цей вторинний вузол."
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr "Задати макÑимальну кількіÑÑ‚ÑŒ потоків Ð´Ð»Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ LFS/вкладень Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ вторинного вузла"
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr "Ð’Ñтановіть макÑимальну кількіÑÑ‚ÑŒ паралельних операцій перевірки Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Geo-вузла"
@@ -6215,11 +7381,14 @@ msgstr "Geo ÑтатуÑ"
msgid "Geo|Groups to synchronize"
msgstr "Групи Ð´Ð»Ñ Ñинхронізації"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "Синхронізовано"
-msgid "Geo|Internal URL"
-msgstr "Внутрішній URL"
+msgid "Geo|Internal URL (optional)"
+msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ URL-адреÑа (не обов’Ñзково)"
msgid "Geo|Last repository check run"
msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð¿ÑƒÑк перевірки репозиторію"
@@ -6269,12 +7438,6 @@ msgstr "Проекти в певних Ñегментах Ñховищ"
msgid "Geo|Re-verification interval"
msgstr "Інтервал повторної перевірки"
-msgid "Geo|Recheck"
-msgstr "Повторна перевірка"
-
-msgid "Geo|Recheck all projects"
-msgstr "Перевірити ще раз вÑÑ– проекти"
-
msgid "Geo|Redownload"
msgstr "Повторне завантаженнÑ"
@@ -6293,6 +7456,12 @@ msgstr "Повторна ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð²ÑÑ–Ñ… проектів"
msgid "Geo|Retry count"
msgstr "КількіÑÑ‚ÑŒ Ñпроб"
+msgid "Geo|Reverify"
+msgstr "Повторно перевірити"
+
+msgid "Geo|Reverify all projects"
+msgstr "Повторно перевірити уÑÑ– проекти"
+
msgid "Geo|Select groups to replicate."
msgstr "Виберіть групи Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ—."
@@ -6317,8 +7486,8 @@ msgstr "Синхронізовано"
msgid "Geo|Synchronization failed - %{error}"
msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ð°: %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
-msgstr "URL-адреÑа, визначена на оÑновному вузлі, Ñку викориÑтовують вторинні вузли, щоб зв'ÑзатиÑÑ Ð· ним. Повертає \"url\", Ñкщо не вÑтановлено"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
+msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
msgstr "База даних зараз %{db_lag} позаду оÑновного вузла."
@@ -6374,6 +7543,9 @@ msgstr "Отримайте безкоштовну оцінку інÑтанÑа"
msgid "Get started with error tracking"
msgstr "Розпочати роботу з відÑтеженнÑм помилок"
+msgid "Get started with performance monitoring"
+msgstr "Розпочати роботу із відÑлідковуваннÑм продуктивноÑÑ‚Ñ–"
+
msgid "Getting started with releases"
msgstr "Розпочати роботу з релізами"
@@ -6381,7 +7553,7 @@ msgid "Git"
msgstr "Git"
msgid "Git LFS is not enabled on this GitLab server, contact your admin."
-msgstr ""
+msgstr "Git LFS не увімкнено на цьому Ñервері GitLab, звернітьÑÑ Ð´Ð¾ адмініÑтратора."
msgid "Git LFS objects will be synced in pull mirrors if LFS is %{docs_link_start}enabled for the project%{docs_link_end}. They will <strong>not</strong> be synced in push mirrors."
msgstr ""
@@ -6431,9 +7603,18 @@ msgstr "GitLab КориÑтувач"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr "GitLab дозволÑÑ” вам викориÑтовувати вашу підпиÑку, навіть Ñкщо ви перевищили кількіÑÑ‚ÑŒ придбаних міÑць. Вам треба буде заплатити за ці міÑÑ†Ñ Ð¿Ñ€Ð¸ Ñ—Ñ— поновленні."
-msgid "GitLab metadata URL"
+msgid "GitLab for Slack"
+msgstr "GitLab Ð´Ð»Ñ Slack"
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
msgstr ""
+msgid "GitLab metadata URL"
+msgstr "URL-адреÑа метаданних GitLab"
+
msgid "GitLab project export"
msgstr "ЕкÑпорт проекту GitLab"
@@ -6449,9 +7630,6 @@ msgstr "GitLab запуÑтить фонове завданнÑ, Ñке буде
msgid "GitLab.com import"
msgstr "Імпорт з GitLab.com"
-msgid "GitLab’s issue tracker"
-msgstr "Трекер задач GitLab"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6467,12 +7645,21 @@ msgstr "URL-адреÑа хоÑту Gitea"
msgid "Gitea Import"
msgstr "Імпорт з Gitea"
+msgid "Gitlab CI/CD"
+msgstr "Gitlab CI/CD"
+
+msgid "Gitlab Pages"
+msgstr "Gitlab Pages"
+
msgid "Given access %{time_ago}"
msgstr "Ðадано доÑтуп %{time_ago}"
-msgid "Global notification settings"
+msgid "Global Shortcuts"
msgstr ""
+msgid "Global notification settings"
+msgstr "Загальні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñповіщень"
+
msgid "Go Back"
msgstr "ПовернутиÑÑ"
@@ -6482,6 +7669,12 @@ msgstr "Go Micro — це фреймворк Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±ÐºÐ¸ мікроÑ
msgid "Go back"
msgstr "ПовернутиÑÑ"
+msgid "Go back (while searching for files"
+msgstr "Перейти назад (при пошуку файлів"
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr "ПовернутиÑÑ Ð´Ð¾ %{startTag}Відкритих задач%{endTag} та вибрати деÑкі з них Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð° вашу дошку."
+
msgid "Go full screen"
msgstr "Ðа повний екран"
@@ -6491,15 +7684,99 @@ msgstr "Перейти до"
msgid "Go to %{link_to_google_takeout}."
msgstr "Перейти до %{link_to_google_takeout}."
+msgid "Go to commits"
+msgstr "Перейти до комітів"
+
+msgid "Go to environments"
+msgstr "Перейти до Ñередовищ"
+
+msgid "Go to file"
+msgstr "Перейти до файлу"
+
+msgid "Go to file (MRs only)"
+msgstr "Перейти до файлу (лише запити на злиттÑ)"
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr "Перейти до поÑтійного поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° файл (при переглÑді)"
+
+msgid "Go to files"
+msgstr "Перейти до файлів"
+
+msgid "Go to find file"
+msgstr "Перейти до пошуку файлів"
+
+msgid "Go to issue boards"
+msgstr "Перейти до дошок задач"
+
+msgid "Go to issues"
+msgstr "Перейти до задач"
+
+msgid "Go to jobs"
+msgstr "Перейти до завдань"
+
+msgid "Go to kubernetes"
+msgstr "Перейти до Kubernetes"
+
+msgid "Go to merge requests"
+msgstr "Перейти до запитів на злиттÑ"
+
+msgid "Go to metrics"
+msgstr "Перейти до метрик"
+
msgid "Go to parent"
-msgstr ""
+msgstr "Перейти на рівень вище"
msgid "Go to project"
msgstr "Перейти до проекту"
+msgid "Go to releases"
+msgstr "Перейти до релізів"
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr "Перейти до Ñніпетів"
+
+msgid "Go to the activity feed"
+msgstr "Перейти до каналу активноÑÑ‚Ñ–"
+
+msgid "Go to the milestone list"
+msgstr "Перейти до ÑпиÑку етапів"
+
+msgid "Go to the project's activity feed"
+msgstr "Перейти до каналу активноÑÑ‚Ñ– проекту"
+
+msgid "Go to the project's overview page"
+msgstr "Перейти до Ñторінки оглÑду проекту"
+
+msgid "Go to wiki"
+msgstr "Перейти до wiki"
+
+msgid "Go to your To-Do list"
+msgstr "Перейти до вашого ÑпиÑку нагадувань"
+
msgid "Go to your fork"
msgstr "Перейти до вашого форку"
+msgid "Go to your groups"
+msgstr "Перейти до ваших груп"
+
+msgid "Go to your issues"
+msgstr "Перейти до ваших задач"
+
+msgid "Go to your merge requests"
+msgstr "Перейти до ваших запитів на злиттÑ"
+
+msgid "Go to your projects"
+msgstr "Перейти до ваших проектів"
+
+msgid "Go to your snippets"
+msgstr "Перейти до ваших Ñніпетів"
+
msgid "Golden Tanuki"
msgstr ""
@@ -6509,8 +7786,8 @@ msgstr "Імпорт з Google Code"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "ÐÐ²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Google не %{link_to_documentation}. ПопроÑÑ–Ñ‚ÑŒ Ñвого адмініÑтратора GitLab, Ñкщо ви хочете ÑкориÑтатиÑÑ Ñ†Ð¸Ð¼ ÑервіÑом."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr "Google-автентифікацію не %{link_start}налаштовано коректно%{link_end}. ЗвернітьÑÑ Ð´Ð¾ вашого адмініÑтратора GitLab, Ñкщо хочете викориÑтовувати цю можливіÑÑ‚ÑŒ."
msgid "Got it"
msgstr "Зрозуміло"
@@ -6518,12 +7795,18 @@ msgstr "Зрозуміло"
msgid "Got it!"
msgstr "Зрозуміло!"
+msgid "Grafana URL"
+msgstr "URL-адреÑа Grafana"
+
msgid "Grant access"
msgstr "Ðадати доÑтуп"
msgid "Graph"
msgstr "Графік"
+msgid "Gravatar"
+msgstr "Gravatar"
+
msgid "Gravatar enabled"
msgstr "Gravatar увімкнено"
@@ -6531,10 +7814,10 @@ msgid "Group"
msgstr "Група"
msgid "Group %{group_name} was scheduled for deletion."
-msgstr ""
+msgstr "Групу %{group_name} було призначено Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ."
msgid "Group %{group_name} was successfully created."
-msgstr ""
+msgstr "Групу %{group_name} уÑпішно Ñтворено."
msgid "Group CI/CD settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ CI/CD групи"
@@ -6582,20 +7865,20 @@ msgid "Group overview content"
msgstr "ВміÑÑ‚ оглÑдової Ñторінки групи"
msgid "Group pipeline minutes were successfully reset."
-msgstr ""
+msgstr "Групові хвилини Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð² уÑпішно обнулено."
msgid "Group was successfully updated."
msgstr "Групу уÑпішно оновлено."
-msgid "Group:"
-msgstr "Група:"
-
msgid "Group: %{group_name}"
msgstr "Група: %{group_name}"
msgid "Group: %{name}"
msgstr "Група: %{name}"
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "Від %{dateWord}"
@@ -6632,6 +7915,9 @@ msgstr "Увімкнути автентифікацію через SAML Ð´Ð»Ñ Ñ
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr "Зробити обов'Ñзковою SSO автентифікацію Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— групи."
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr "Зобов'Ñзати кориÑтувачів Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— групи мати окремі облікові запиÑи керовані нею."
@@ -6663,7 +7949,7 @@ msgid "GroupSAML|SAML Single Sign On Settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ”Ð´Ð¸Ð½Ð¾Ð³Ð¾ входу через SAML"
msgid "GroupSAML|SCIM API endpoint URL"
-msgstr ""
+msgstr "URL кінцевої точки SCIM API"
msgid "GroupSAML|SCIM Token"
msgstr "Токен SCIM"
@@ -6707,6 +7993,9 @@ msgstr "Ðалаштувати значки групи."
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про значки."
@@ -6740,6 +8029,9 @@ msgstr "Цей параметр заÑтоÑовано до %{ancestor_group}. Ð
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "Цей параметр буде заÑтоÑовано до вÑÑ–Ñ… підгруп, Ñкщо тільки не буде перевизначено влаÑником групи. Групи, Ñкі вже мають доÑтуп до проекту, будуть мати доÑтуп, Ñкщо вони не будуть вилучені вручну."
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "не може бути ÑкаÑовано поки \"Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñпільного доÑтупу з іншими групами\" активне на батьківÑькій групі, за винÑтком влаÑника батьківÑької групи"
@@ -6822,7 +8114,7 @@ msgid "GroupsTree|Search by name"
msgstr "Пошук за іменем"
msgid "HTTP Basic: Access denied\\nYou must use a personal access token with 'api' scope for Git over HTTP.\\nYou can generate one at %{profile_personal_access_tokens_url}"
-msgstr ""
+msgstr "Базовий HTTP: відмовлено у доÑтупі\\nВи повинні викориÑтовувати перÑональний токен доÑтупу із облаÑÑ‚ÑŽ дії 'api' Ð´Ð»Ñ Git через HTTP.\\nВи можете згенерувати його в %{profile_personal_access_tokens_url}"
msgid "Have your users email"
msgstr "Електронна пошта Ð´Ð»Ñ Ð·Ð²ÐµÑ€Ñ‚Ð°Ð½ÑŒ кориÑтувачів"
@@ -6837,7 +8129,7 @@ msgid "Health Check"
msgstr "Перевірка ПрацездатноÑÑ‚Ñ–"
msgid "Health information can be retrieved from the following endpoints. More information is available"
-msgstr "Інформацію про працездатніÑÑ‚ÑŒ можна отримати з наÑтупних ендпойнтів. Більше інформації доÑтупно"
+msgstr "Інформацію про працездатніÑÑ‚ÑŒ можна отримати з наÑтупних кінцевих точок. Більше інформації доÑтупно"
msgid "HealthCheck|Access token is"
msgstr "Токен доÑтупу"
@@ -6863,6 +8155,12 @@ msgstr "Сторінка довідки"
msgid "Help page text and support page url."
msgstr "ТекÑÑ‚ Ñторінки довідки та url-адреÑа Ñторінки підтримки."
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr "Сховати архівовані проекти"
@@ -6884,6 +8182,9 @@ msgstr "Приховати кориÑне навантаженнÑ"
msgid "Hide shared projects"
msgstr "Сховати Ñпільні проекти"
+msgid "Hide stage"
+msgstr "Сховати етап"
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "Сховати значеннÑ"
@@ -6894,6 +8195,9 @@ msgstr[3] "Сховати значень"
msgid "Hide values"
msgstr "Сховати значеннÑ"
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr "Ðайвища роль:"
@@ -6912,6 +8216,9 @@ msgstr "Хук уÑпішно Ñтворено."
msgid "Hook was successfully updated."
msgstr "Хук уÑпішно оновлено."
+msgid "Hours"
+msgstr "Годин"
+
msgid "Housekeeping"
msgstr "ОчищеннÑ"
@@ -6921,6 +8228,9 @@ msgstr "ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ ÑƒÑпішно розпочато"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr "ОчищеннÑ, екÑпорт, шлÑÑ…, перенеÑеннÑ, видаленнÑ, архівуваннÑ."
+msgid "How it works"
+msgstr "Як це працює"
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6930,6 +8240,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr "Проте ви вже Ñ” учаÑником цього %{member_source}. Увійдіть, викориÑтовуючи інший обліковий запиÑ, щоб прийнÑти запрошеннÑ."
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "Я приймаю %{terms_link}"
@@ -6940,11 +8253,17 @@ msgid "I forgot my password"
msgstr "Я забув пароль"
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
+msgstr "Я прочитав Ñ– згодені із %{link_start}умовами викориÑтаннÑ%{link_end} Let's Encrypt"
+
+msgid "I'd like to receive updates via email about GitLab"
msgstr ""
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr "ID:"
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "Дозволити попередній переглÑд JavaScript-проектів у веб-IDE за допомогою Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð½Ð° клієнті CodeSandbox."
@@ -6981,6 +8300,9 @@ msgstr "Оновити попередній переглÑд"
msgid "IDE|Review"
msgstr "ОглÑд"
+msgid "IDE|Successful commit"
+msgstr "УÑпішний коміт"
+
msgid "IP Address"
msgstr "IP-адреÑа"
@@ -7003,7 +8325,7 @@ msgid "If checked, group owners can manage LDAP group links and LDAP member over
msgstr "Якщо увімкнено, тоді влаÑники груп зможуть керувати зв'Ñзками груп LDAP та перевизначеннÑм членів LDAP"
msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization"
-msgstr ""
+msgstr "Якщо буде увімкнено цей пункт, нові членÑтва в групах та дозволи будуть додані лише за допомогою Ñинхронізації LDAP"
msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored."
msgstr "Якщо вимкнено, локальна гілка зі змінами не буде автоматично підтÑгувати коміти з віддаленої гілки, щоб уникнути втрати локальних даних. Якщо гілка за замовчуваннÑм (%{default_branch}) міÑтить зміни Ñ– не може бути оновлена, тоді Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ неможливим. Інші гілки зі змінами автоматично ігноруютьÑÑ."
@@ -7044,6 +8366,12 @@ msgstr "Ðакладені (прозоріÑÑ‚ÑŒ)"
msgid "ImageDiffViewer|Swipe"
msgstr "Ðакладені (проведеннÑ)"
+msgid "ImageViewerDimensions|H"
+msgstr "Ð’"
+
+msgid "ImageViewerDimensions|W"
+msgstr "Ш"
+
msgid "Impersonation has been disabled"
msgstr "Ð†Ð¼Ñ–Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вимкнено"
@@ -7114,7 +8442,7 @@ msgid "Import repository"
msgstr "Імпорт репозиторію"
msgid "Import tasks"
-msgstr ""
+msgstr "Імпорт завдань"
msgid "Import tasks from Phabricator into issues"
msgstr "Імпортувати задачі (tasks) із Phabricator Ñк задачі"
@@ -7149,17 +8477,17 @@ msgstr "Віддалені дані не можуть бути імпортовÐ
msgid "ImportProjects|The repository could not be created."
msgstr "Репозиторій не може бути Ñтворено."
-msgid "ImportProjects|Updating the imported projects failed"
-msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… проектів пройшло невдало"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr ""
msgid "Improve Issue boards"
-msgstr ""
+msgstr "Покращити дошки задач"
msgid "Improve Issue boards with GitLab Enterprise Edition."
msgstr "Покращити дошки обговорень за допомогою верÑÑ–Ñ— GitLab Enterprise Edition."
msgid "Improve Merge Requests and customer support with GitLab Enterprise Edition."
-msgstr ""
+msgstr "Покращити запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° підтримку кориÑтувачів за допомогою GitLab Enterprise Edition."
msgid "Improve issues management with Issue weight and GitLab Enterprise Edition."
msgstr "Покращити ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°Ð¼Ð¸ з можливіÑÑ‚ÑŽ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð°Ð³Ð¸ задач за допомогою GitLab Enterprise Edition."
@@ -7192,7 +8520,7 @@ msgid "Include the username in the URL if required: <code>https://username@gitla
msgstr "Якщо необхідно додайте ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача в URL: <code>https: //username@gitlab.company.com/group/project.git</code>."
msgid "Includes LFS objects. It can be overridden per group, or per project. 0 for unlimited."
-msgstr ""
+msgstr "Включає об'єкти LFS. Може бути перевизначено в групі або проекті. 0 — необмежено."
msgid "Includes an MVC structure to help you get started."
msgstr "Включає Ñтруктуру MVC, щоб допомогти вам розпочати роботу."
@@ -7203,14 +8531,17 @@ msgstr "Включає Ñтруктуру MVC, Gemfile, Rakefile, а також
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr "Включає Ñтруктуру MVC, mvnw Ñ– pom.xml, щоб допомогти вам розпочати роботу."
+msgid "Incoming email"
+msgstr "Вхідна пошта"
+
msgid "Incompatible Project"
msgstr "ÐеÑуміÑний проект"
msgid "Incompatible options set!"
msgstr "Ð’Ñтановлено неÑуміÑні параметри!"
-msgid "Indexing"
-msgstr "ІндекÑаціÑ"
+msgid "Index all projects"
+msgstr "ІндекÑувати вÑÑ– проекти"
msgid "Indicates whether this runner can pick jobs without tags"
msgstr "Вказує на те, чи може даний runner виконувати Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð±ÐµÐ· тегів"
@@ -7219,7 +8550,7 @@ msgid "Inform users without uploaded SSH keys that they can't push over SSH unti
msgstr ""
msgid "Information about additional Pages templates and how to install them can be found in our %{pages_getting_started_guide}."
-msgstr ""
+msgstr "Ви можете знайти інформацію про додаткові шаблони Pages та те, Ñк Ñ—Ñ… вÑтановити в нашій %{pages_getting_started_guide}."
msgid "Inline"
msgstr "Вбудований"
@@ -7254,6 +8585,9 @@ msgstr "Ð’Ñтановити Runner на Kubernetes"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr "Ð’Ñтановити на клаÑтери"
+
msgid "Installed"
msgstr "Ð’Ñтановлено"
@@ -7273,11 +8607,14 @@ msgstr "СтатиÑтика інÑтанÑа"
msgid "Instance Statistics visibility"
msgstr "СтатиÑтика видимоÑÑ‚Ñ– інÑтанÑа"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "Цей інÑÑ‚Ð°Ð½Ñ Ð½Ðµ підтримує декілька Kubernetes-клаÑтерів"
msgid "Instance license"
-msgstr ""
+msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ñ–Ð½ÑтанÑу"
msgid "Integrations"
msgstr "Інтеграції"
@@ -7313,40 +8650,43 @@ msgid "Invalid Insights config file detected"
msgstr ""
msgid "Invalid Login or password"
-msgstr ""
+msgstr "Ðеправильний логін або пароль"
+
+msgid "Invalid URL"
+msgstr "ÐедійÑна URL адреÑа"
msgid "Invalid date"
msgstr "Ðеправильна дата"
msgid "Invalid feature"
-msgstr ""
+msgstr "ÐедійÑна функціÑ"
msgid "Invalid field"
-msgstr ""
+msgstr "Ðеправильно заповнене поле"
msgid "Invalid file."
-msgstr ""
+msgstr "Ðеправильний файл."
msgid "Invalid import params"
-msgstr ""
+msgstr "Ðеправильні параметри імпорту"
msgid "Invalid input, please avoid emojis"
msgstr "Ðекорректний ввід, будь лаÑка, уникайте Ñмайликів"
msgid "Invalid pin code"
-msgstr ""
+msgstr "Ðеправильний PIN-код"
msgid "Invalid query"
-msgstr ""
+msgstr "Ðеправильний запит"
msgid "Invalid repository path"
-msgstr ""
+msgstr "Ðеправильний шлÑÑ… до репозиторію"
msgid "Invalid server response"
-msgstr ""
+msgstr "Ðеправильна відповідь від Ñервера"
msgid "Invalid two-factor code."
-msgstr ""
+msgstr "ÐедійÑний двофакторний код підтвердженнÑ."
msgid "Invitation"
msgstr "ЗапрошеннÑ"
@@ -7363,16 +8703,22 @@ msgstr "ЗапроÑити групу"
msgid "Invite member"
msgstr "ЗапроÑити учаÑника"
-msgid "Invoke Count"
-msgstr ""
-
-msgid "Invoke Time"
-msgstr ""
+msgid "Invocations"
+msgstr "Виклики"
msgid "Is using license seat:"
+msgstr "ВикориÑтовує міÑце в ліцензії:"
+
+msgid "IssuableStatus|Closed"
+msgstr "Закрито"
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr "Закрито (%{link})"
+
+msgid "IssuableStatus|duplicated"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7391,10 +8737,10 @@ msgid "Issue template (optional)"
msgstr "Шаблон задачі (необов’Ñзково)"
msgid "Issue update failed"
-msgstr ""
+msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ– неуÑпішне"
msgid "Issue was closed by %{name} %{reason}"
-msgstr ""
+msgstr "Задачу було закрито %{name} %{reason}"
msgid "IssueBoards|Board"
msgstr "Дошка"
@@ -7417,9 +8763,27 @@ msgstr "ДеÑкі з ваших дошок Ñ” прихованими, актиÐ
msgid "IssueBoards|Switch board"
msgstr "Перемкнути дошку"
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr "РеєÑÑ‚Ñ€ задач Bugzilla"
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr "ВлаÑний реєÑÑ‚Ñ€ задач"
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr "РеєÑÑ‚Ñ€ задач GitLab"
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr "РеєÑÑ‚Ñ€ задач Redmine"
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr "РеєÑÑ‚Ñ€ задач YouTrack"
+
msgid "Issues"
msgstr "Задачі"
+msgid "Issues / Merge Requests"
+msgstr "Задачі / запити на злиттÑ"
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "Задачі можуть бути помилками, нагадуваннÑми чи ідеÑми Ð´Ð»Ñ Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ. Крім того, задачі доÑтупні Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ та фільтруваннÑ."
@@ -7435,8 +8799,11 @@ msgstr "Задачі, запити на злиттÑ, Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr "ПіÑÐ»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡ Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… проектів, ми зможемо почати відÑтежувати Ñ– відображати метрики Ð´Ð»Ñ Ð½Ð¸Ñ…"
-msgid "IssuesAnalytics|Issues Created"
-msgstr "Створені Задачі"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr "Створені задачі"
msgid "IssuesAnalytics|Issues created per month"
msgstr "Створені задачі за міÑÑць"
@@ -7453,9 +8820,15 @@ msgstr "Ðемає задач Ð´Ð»Ñ Ð²ÑÑ–Ñ… проектів у групі"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "Щоб розширити пошук, будь лаÑка, змініть або видаліть фільтр вище"
-msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
+msgid "IssuesAnalytics|Total:"
+msgstr "Ð’Ñього:"
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
msgstr ""
+msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
+msgstr "Має ÑкладатиÑÑ Ñ–Ð· Ñ€Ñдка заголовка Ñ– мінімум двох колонок: перша — заголовок задачі, а друга — Ñ—Ñ— опиÑ. Розділювач визначаєтьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾."
+
msgid "It's you"
msgstr "Це ви"
@@ -7472,13 +8845,13 @@ msgid "January"
msgstr "Ñічень"
msgid "JiraService|Events for %{noteable_model_name} are disabled."
-msgstr ""
+msgstr "Події Ð´Ð»Ñ %{noteable_model_name} вимкнені."
msgid "JiraService|If different from Web URL"
-msgstr ""
+msgstr "Якщо відрізнÑєтьÑÑ Ð²Ñ–Ð´ Веб URL"
msgid "JiraService|Jira API URL"
-msgstr ""
+msgstr "URL-адреÑа Jira API"
msgid "JiraService|Jira comments will be created when an issue gets referenced in a commit."
msgstr ""
@@ -7487,7 +8860,7 @@ msgid "JiraService|Jira comments will be created when an issue gets referenced i
msgstr ""
msgid "JiraService|Jira issue tracker"
-msgstr ""
+msgstr "РеєÑÑ‚Ñ€ задач Jira"
msgid "JiraService|Password or API token"
msgstr "Пароль або API токен"
@@ -7505,10 +8878,10 @@ msgid "JiraService|Use a username for server version and an email for cloud vers
msgstr ""
msgid "JiraService|Username or Email"
-msgstr ""
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача або адреÑа електронної пошти"
msgid "JiraService|Web URL"
-msgstr ""
+msgstr "Веб URL"
msgid "JiraService|transition ids can have only numbers which can be split with , or ;"
msgstr ""
@@ -7517,7 +8890,7 @@ msgid "Job"
msgstr "ЗавданнÑ"
msgid "Job Failed #%{build_id}"
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ðµ #%{build_id}"
msgid "Job ID"
msgstr "Ідентифікатор завданнÑ"
@@ -7526,13 +8899,13 @@ msgid "Job has been erased"
msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ Ñтерте"
msgid "Job has been successfully erased!"
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ ÑƒÑпішно видалено!"
msgid "Job has wrong arguments format."
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” неправильний формат аргументів."
msgid "Job is missing the `model_type` argument."
-msgstr ""
+msgstr "У завданні відÑутній аргумент \"model_type\"."
msgid "Job is stuck. Check runners."
msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ðµ. Перевірте runner'и."
@@ -7589,19 +8962,19 @@ msgid "Job|The artifacts will be removed"
msgstr "Ðртефакти будуть видалені"
msgid "Job|This job failed because the necessary resources were not successfully created."
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð¾ÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾ тому що необхідні реÑурÑи не було уÑпішно Ñтворені."
msgid "Job|This job is stuck because the project doesn't have any runners online assigned to it."
msgstr "Це Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ðµ, тому що цей проект не має жодних runner'ів призначених Ð´Ð»Ñ Ð½ÑŒÐ¾Ð³Ð¾."
msgid "Job|for"
-msgstr ""
+msgstr "длÑ"
msgid "Job|into"
-msgstr ""
+msgstr "в"
msgid "Job|with"
-msgstr ""
+msgstr "з"
msgid "Join Zoom meeting"
msgstr "ПриєднатиÑÑ Ð´Ð¾ зуÑтрічі в Zoom"
@@ -7613,10 +8986,10 @@ msgid "July"
msgstr "липень"
msgid "Jump to first unresolved discussion"
-msgstr ""
+msgstr "Перейти до першого невирішеного обговореннÑ"
msgid "Jump to next unresolved discussion"
-msgstr ""
+msgstr "Перейти до наÑтупного невирішеного обговореннÑ"
msgid "Jun"
msgstr "чер."
@@ -7630,6 +9003,9 @@ msgstr "Ключ (PEM)"
msgid "Key: %{key}"
msgstr "Ключ: %{key}"
+msgid "Keyboard Shortcuts"
+msgstr "Комбінації клавіш"
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7654,11 +9030,14 @@ msgstr "Kubernetes-клаÑтер уÑпішно оновлено."
msgid "Kubernetes configured"
msgstr "Kubernetes налаштовано"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr "Помилка Kubernetes: %{error_code}"
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "СпоÑіб Інтеграції Kubernetes Ñк ÑервіÑа заÑтарів. %{deprecated_message_content} ваші Kubernetes-клаÑтери за допомогою нової Ñторінки <a href=\"%{url}\"/>КлаÑтери Kubernetes</a>"
+msgid "LDAP"
+msgstr "LDAP"
msgid "LDAP settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ LDAP"
@@ -7679,7 +9058,7 @@ msgid "LFSStatus|Enabled"
msgstr "Увімкнено"
msgid "LICENSE"
-msgstr ""
+msgstr "Файл ліцензії (LICENSE)"
msgid "Label"
msgstr "Мітка"
@@ -7745,11 +9124,14 @@ msgstr[1] "ОÑтанніх %d дні"
msgstr[2] "ОÑтанніх %d днів"
msgstr[3] "ОÑтанніх %d днів"
+msgid "Last %{days} days"
+msgstr "ОÑтанніх %{days} днів"
+
msgid "Last Pipeline"
msgstr "ОÑтанній Конвеєр"
msgid "Last accessed on"
-msgstr ""
+msgstr "ОÑтанній доÑтуп"
msgid "Last activity"
msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ–ÑÑ‚ÑŒ"
@@ -7766,20 +9148,29 @@ msgstr "ОÑтанні зміни %{date}"
msgid "Last edited by %{name}"
msgstr "ОÑтанні зміни від %{name}"
+msgid "Last name"
+msgstr "Прізвище"
+
msgid "Last reply by"
msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´ÑŒ від"
msgid "Last seen"
-msgstr ""
+msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ–ÑÑ‚ÑŒ"
+
+msgid "Last successful update"
+msgstr "ОÑтаннє уÑпішне оновленнÑ"
msgid "Last update"
msgstr "ОÑтаннє оновленнÑ"
+msgid "Last update attempt"
+msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ñпроба оновленнÑ"
+
msgid "Last updated"
msgstr "ВоÑтаннє оновленно"
msgid "Last used"
-msgstr ""
+msgstr "ВоÑтаннє викориÑтано"
msgid "Last used on:"
msgstr ""
@@ -7793,27 +9184,24 @@ msgstr "в"
msgid "Latest changes"
msgstr "ОÑтанні зміни"
-msgid "Latest pipeline for this branch"
-msgstr "ОÑтанній конвеєр Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— гілки"
+msgid "Latest pipeline for the most recent commit on this branch"
+msgstr ""
msgid "Lead"
msgstr ""
msgid "Learn GitLab"
-msgstr ""
+msgstr "ДізнатиÑÑ Ð¿Ñ€Ð¾ GitLab"
msgid "Learn how to %{link_start}contribute to the built-in templates%{link_end}"
msgstr "ДізнайтеÑÑ Ñк%{link_start}зробити внеÑок до вбудованих шаблонів%{link_end}"
msgid "Learn how to %{no_packages_link_start}publish and share your packages%{no_packages_link_end} with GitLab."
-msgstr ""
+msgstr "ДізнайтеÑÑ Ñк %{no_packages_link_start}публікувати та ділитиÑÑ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ пакетами%{no_packages_link_end} через GitLab."
msgid "Learn more"
msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про %{issue_boards_url}, щоб Ñтежити за задачами в кількох ÑпиÑках, викориÑтовуючи мітки, виконавців та етапи. Якщо вам чогоÑÑŒ не виÑтачає в дошках обговорень задач, Ñтворіть задачу на %{gitlab_issues_url}."
-
msgid "Learn more about Auto DevOps"
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Auto DevOps"
@@ -7824,7 +9212,7 @@ msgid "Learn more about Web Terminal"
msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Веб-термінал"
msgid "Learn more about adding certificates to your project by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
-msgstr ""
+msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñертифікатів до проекту перейшовши до %{docs_link_start}документації по GitLab Pages%{docs_link_end}."
msgid "Learn more about approvals."
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про затвердженнÑ."
@@ -7832,6 +9220,9 @@ msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про затвердженнÑ."
msgid "Learn more about custom project templates"
msgstr "Докладніше про влаÑні шаблони проектів"
+msgid "Learn more about deploying to a cluster"
+msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð² клаÑтер"
+
msgid "Learn more about group-level project templates"
msgstr "Докладніше про шаблони проектів на рівні групи"
@@ -7839,7 +9230,10 @@ msgid "Learn more about signing commits"
msgstr "Докладніше про підпиÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ–Ð²"
msgid "Learn more about the dependency list"
-msgstr ""
+msgstr "Докладніше про ÑпиÑок залежноÑтей"
+
+msgid "Learn more about vulnerability check"
+msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про перевірку вразливоÑтей"
msgid "Learn more in the"
msgstr "ДізнайтеÑÑŒ більше"
@@ -7851,7 +9245,7 @@ msgid "Leave"
msgstr "Вийти"
msgid "Leave edit mode? All unsaved changes will be lost."
-msgstr ""
+msgstr "Вийти з режиму редагуваннÑ? УÑÑ– незбережені зміни буде втрачено."
msgid "Leave group"
msgstr "Залишити групу"
@@ -7863,88 +9257,114 @@ msgid "Leave the \"File type\" and \"Delivery method\" options on their default
msgstr "Залиште параметри \"Тип файлу\" та \"Метод доÑтавки\" із значеннÑми по замовчуванню."
msgid "Let's Encrypt does not accept emails on example.com"
-msgstr ""
+msgstr "Let's Encrypt не приймає Ð°Ð´Ñ€ÐµÑ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти з example.com"
msgid "Let's Encrypt is a free, automated, and open certificate authority (CA) that gives digital certificates in order to enable HTTPS (SSL/TLS) for websites. Learn more about Let's Encrypt configuration by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
-msgstr ""
+msgstr "Let's Encrypt Ñ” безкоштовним, автоматизованим та відкритим центром Ñертифікації (CA), Ñкий видає цифрові Ñертифікати Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— HTTPS (SSL/TLS) на вебÑайтах. ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Let's Encrypt перейшовши до %{docs_link_start}документації по GitLab Pages%{docs_link_end}."
msgid "License"
msgstr "ЛіцензіÑ"
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
+msgstr "ВідповідніÑÑ‚ÑŒ ліцензіÑм"
+
+msgid "LicenseCompliance|Add a license"
msgstr "Додати ліцензію"
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "Вручну додайте ліцензії Ð´Ð»Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ внеÑÑ–Ñ‚ÑŒ в чорний ÑпиÑок"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr "Додавайте ліцензії вручну Ð´Ð»Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ внеÑÐµÐ½Ð½Ñ Ð´Ð¾ чорного ÑпиÑку"
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Approve"
msgstr "Затвердити"
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve license"
msgstr "Затвердити ліцензію"
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license?"
msgstr "Затвердити ліцензію?"
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approved"
msgstr "Затверджено"
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Blacklist"
msgstr "Чорний ÑпиÑок"
-msgid "LicenseManagement|Blacklist license"
-msgstr "ЗанеÑти ліцензію в чорний ÑпиÑок"
+msgid "LicenseCompliance|Blacklist license"
+msgstr "ВнеÑти ліцензію до чорного ÑпиÑку"
-msgid "LicenseManagement|Blacklist license?"
-msgstr "ЗанеÑти ліцензію в чорний ÑпиÑок?"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr "ВнеÑти ліцензію до чорного ÑпиÑку?"
-msgid "LicenseManagement|Blacklisted"
-msgstr "Ð’ чорному ÑпиÑку"
+msgid "LicenseCompliance|Blacklisted"
+msgstr "ВнеÑено в чорний ÑпиÑок"
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Cancel"
msgstr "СкаÑувати"
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr "Тут ви можете затверджувати ліцензії або вноÑити Ñ—Ñ… до чорного ÑпиÑку Ð´Ð»Ñ Ð´Ð°Ð½Ð¾Ð³Ð¾ проекту. За допомогою %{ci} та %{license} ви можете виÑвлÑти невідомі ліцензії Ñ– затверджувати або заноÑити Ñ—Ñ… до чорного ÑпиÑку в запиті на злиттÑ."
+
+msgid "LicenseCompliance|License"
msgstr "ЛіцензіÑ"
-msgid "LicenseManagement|License Management"
-msgstr "Керувати ЛіцензіÑми"
+msgid "LicenseCompliance|License Compliance"
+msgstr "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм"
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d ліцензію лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ джерела"
+msgstr[1] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d ліцензії лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ джерела"
+msgstr[2] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d ліцензій лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ джерела"
+msgstr[3] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d ліцензій лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ джерела"
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d нову ліцензію"
+msgstr[1] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d нові ліцензії"
+msgstr[2] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d нових ліцензій"
+msgstr[3] "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм виÑвила %d нових ліцензій"
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм не виÑвила ліцензій лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸ джерела"
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr "ВідповідніÑÑ‚ÑŒ ЛіцензіÑм не виÑвила нових ліцензій"
+
+msgid "LicenseCompliance|License details"
msgstr "Деталі ліцензії"
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License name"
msgstr "Ðазва ліцензії"
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð¸Ð¼Ð¸ ліцензіÑми та чорним ÑпиÑком ліцензій Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту."
-
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Packages"
msgstr "Пакети"
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license"
msgstr "Видалити ліцензію"
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Remove license?"
msgstr "Видалити ліцензію?"
-msgid "LicenseManagement|Submit"
-msgstr "ÐадіÑлати"
+msgid "LicenseCompliance|Submit"
+msgstr "Відправити"
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "Ðаразі немає затверджених ліцензій чи ліцензій в чорному ÑпиÑку Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr "Ðаразі в цьому проекті немає затверджених або внеÑених в чорний ÑпиÑок ліцензій."
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "Ð¦Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð²Ð¶Ðµ Ñ” в цьому проекті."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr "Ðаразі в цьому проекті немає відповідних затверджених або внеÑених в чорний ÑпиÑок ліцензій."
-msgid "LicenseManagement|URL"
-msgstr "URL"
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr "Така Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð²Ð¶Ðµ Ñ–Ñнує в цьому проекті."
+
+msgid "LicenseCompliance|URL"
+msgstr "URL-адреÑа"
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ ліцензію %{name} із цього проекту."
msgid "Licensed Features"
-msgstr ""
+msgstr "ФункціональніÑÑ‚ÑŒ, доÑтупна в ліцензії"
msgid "Licensed to"
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ"
@@ -7952,8 +9372,11 @@ msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ"
msgid "Licenses"
msgstr "Ліцензії"
+msgid "Limit display of time tracking units to hours."
+msgstr "Обмежити Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¾Ð´Ð¸Ð½Ð¸Ñ†ÑŒ відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу до годин."
+
msgid "Limit namespaces and projects that can be indexed"
-msgstr ""
+msgstr "Обмежити проÑтори імен та проекти Ñкі можуть бути проіндекÑовані"
msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
@@ -7962,12 +9385,18 @@ msgstr[1] "Показ обмежено тільки %d подіÑми"
msgstr[2] "Показ обмежено тільки %d подіÑми"
msgstr[3] "Показ обмежено тільки %d подіÑми"
+msgid "Link copied to clipboard"
+msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñкопійовано в буфер обміну"
+
msgid "Linked emails (%{email_count})"
-msgstr ""
+msgstr "Пов’Ñзані адреÑи електронної пошти (%{email_count})"
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr "Ще %{counterLabel} наÑтупних конвеєрів"
+
msgid "List"
msgstr "СпиÑок"
@@ -7980,15 +9409,15 @@ msgstr "СпиÑок доÑтупних репозиторіїв"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "Режим ÑпиÑку"
msgid "List your Bitbucket Server repositories"
msgstr "СпиÑко репозиторіїв вашого Bitbucket Server"
-msgid "List your GitHub repositories"
-msgstr "СпиÑок ваших репозиторіїв GitHub"
-
msgid "Live preview"
msgstr "Попередній переглÑд"
@@ -7998,6 +9427,9 @@ msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÑтатиÑтики учаÑників груÐ
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡"
+
msgid "Loading the GitLab IDE..."
msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ IDE GitLab..."
@@ -8017,7 +9449,7 @@ msgid "Lock %{issuableDisplayName}"
msgstr "Заблокувати %{issuableDisplayName}"
msgid "Lock memberships to LDAP synchronization"
-msgstr ""
+msgstr "ЗафікÑувати належноÑÑ‚Ñ– (до груп) через LDAP Ñинхронізацію"
msgid "Lock not found"
msgstr "Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ знайдено"
@@ -8037,14 +9469,20 @@ msgstr "Заблоковано"
msgid "Locked Files"
msgstr "Заблоковані файли"
+msgid "Locked by %{fileLockUserName}"
+msgstr "Заблоковано %{fileLockUserName}"
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "Закріплено за поточними проектами"
msgid "Locks give the ability to lock specific file or folder."
msgstr "Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути заÑтоÑоване до конкретного файлу або директорії."
-msgid "Locks the discussion"
-msgstr "Блокує обговореннÑ"
+msgid "Locks the discussion."
+msgstr "Блокує обговореннÑ."
msgid "Login with smartcard"
msgstr "Вхід за допомогою Ñмарт-картки"
@@ -8055,6 +9493,9 @@ msgstr "Логотип було уÑпішно видалено."
msgid "Logs"
msgstr "Логи"
+msgid "MERGED"
+msgstr "ЗЛИТО"
+
msgid "MRApprovals|Approved by"
msgstr "Затверджено"
@@ -8070,20 +9511,26 @@ msgstr "Показувати лише зміни"
msgid "MRDiff|Show full file"
msgstr "Показувати файл повніÑÑ‚ÑŽ"
+msgid "Made this issue confidential."
+msgstr "Цю задачу зроблено конфіденційною."
+
msgid "Make and review changes in the browser with the Web IDE"
-msgstr ""
+msgstr "ЗдійÑнити та переглÑнути зміни в браузері за допомогою веб-IDE"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "Зробіть кожного учаÑника команди більш продуктивним незалежно від його міÑцезнаходженнÑ. GitLab Geo Ñтворює копії \"тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\" вашого GitLab Ñервера, щоб Ñкоротити Ñ‡Ð°Ñ Ð´Ð»Ñ ÐºÐ»Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ з великих репозиторіїв."
-msgid "Make issue confidential."
-msgstr ""
+msgid "Make issue confidential"
+msgstr "Зробити задачу конфіденційною"
+
+msgid "Make sure you save it - you won't be able to access it again."
+msgstr "ПереконайтеÑÑ, що ви його зберегли, бо ви не зможете отримати доÑтуп до нього знову."
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "ПереконайтеÑÑ, що ви ввійшли за допомогою облікового запиÑу, Ñкому належать проекти, що потрібно імпортувати."
-msgid "Makes this issue confidential"
-msgstr ""
+msgid "Makes this issue confidential."
+msgstr "Робить цю задачу конфіденційною."
msgid "Manage"
msgstr "Керувати"
@@ -8127,6 +9574,9 @@ msgstr "Імпортувати файл маніфеÑту"
msgid "Manual job"
msgstr "Ручне завданнÑ"
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ порÑдок задач"
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "Зв’Ñзати обліковий Ð·Ð°Ð¿Ð¸Ñ FogBugz з кориÑтувачем GitLab"
@@ -8145,17 +9595,23 @@ msgstr "бер."
msgid "March"
msgstr "березень"
+msgid "Mark To Do as done"
+msgstr "Відмітити Ð½Ð°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¸Ð¼"
+
+msgid "Mark as done"
+msgstr "Відмітити Ñк виконано"
+
msgid "Mark as resolved"
msgstr "Позначити Ñк вирішене"
msgid "Mark comment as resolved"
-msgstr ""
+msgstr "Позначити коментар Ñк вирішений"
msgid "Mark this issue as a duplicate of another issue"
-msgstr ""
+msgstr "Позначити задачу Ñк дублікат іншої"
-msgid "Mark todo as done"
-msgstr "Відмітити Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¸Ð¼"
+msgid "Mark this issue as related to another issue"
+msgstr "Позначити задачу Ñк пов’Ñзану з іншою"
msgid "Markdown"
msgstr "Markdown"
@@ -8166,14 +9622,65 @@ msgstr "Довідка по Markdown"
msgid "Markdown enabled"
msgstr "Markdown увімкнено"
+msgid "Markdown is supported"
+msgstr "Markdown підтримуєтьÑÑ"
+
+msgid "Marked To Do as done."
+msgstr "ÐÐ°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ виконаним."
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr "Позначено цей %{noun} Ñк \"Ð’ процеÑÑ–\"."
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr "Цю задачу позначено дублікатом %{duplicate_param}."
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr "Цю задачу позначено пов’Ñзаною з %{issue_ref}."
+
+msgid "Marks To Do as done."
+msgstr "Позначити Ð½Ð°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¸Ð¼."
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr "Позначає цей %{noun} Ñк \"Ð’ процеÑÑ–\"."
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
-msgstr ""
+msgstr "Позначає задачу Ñк дублікат %{duplicate_reference}."
-msgid "Marks todo as done."
-msgstr "Позначає Ð½Ð°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¸Ð¼."
+msgid "Marks this issue as related to %{issue_ref}."
+msgstr "Позначає задачу Ñк пов’Ñзану з %{issue_ref}."
msgid "Match not found; try refining your search query."
-msgstr ""
+msgstr "Збігів не знайдено, Ñпробуйте уточнити ваш пошуковий запит."
+
+msgid "MattermostService|Add to Mattermost"
+msgstr "Додати в Mattermost"
+
+msgid "MattermostService|Command trigger word"
+msgstr "Слово Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку команди"
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr "Вкажіть Ñлово, Ñке найбільше підходить Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— команди."
+
+msgid "MattermostService|Request URL"
+msgstr "URL-адреÑа Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ"
+
+msgid "MattermostService|Request method"
+msgstr "Метод запиту"
+
+msgid "MattermostService|Response icon"
+msgstr "Іконка Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ñ–"
+
+msgid "MattermostService|Response username"
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ñ–"
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr "ПереглÑньте ÑпиÑок уÑÑ–Ñ… доÑтупних команд у Mattermost піÑÐ»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ÑервіÑу шлÑхом вводу"
+
+msgid "MattermostService|Suggestions:"
+msgstr "Пропозиції:"
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr "Цей ÑÐµÑ€Ð²Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ” кориÑтувачам виконувати загальні операції в цьому проекті шлÑхом вводу команд із коÑою риÑкою (/) в Mattermost."
msgid "Maven Metadata"
msgstr "Maven-метадані"
@@ -8191,7 +9698,7 @@ msgid "Maximum attachment size (MB)"
msgstr "МакÑимальний розмір Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ (МБ)"
msgid "Maximum capacity"
-msgstr ""
+msgstr "МакÑимальна пропуÑкна здатніÑÑ‚ÑŒ"
msgid "Maximum delay (Minutes)"
msgstr "МакÑимальна затримка (хвилини)"
@@ -8232,14 +9739,23 @@ msgstr "УчаÑники можуть будуть додані <i>КерівнÐ
msgid "Members of <strong>%{project_name}</strong>"
msgstr "УчаÑники <strong>%{project_name}</strong>"
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr "ЗлиттÑ"
+msgid "Merge (when the pipeline succeeds)"
+msgstr "Злити (коли конвеєр уÑпішно завершитьÑÑ)"
+
msgid "Merge Request"
msgstr "Запит на злиттÑ"
msgid "Merge Request Approvals"
-msgstr ""
+msgstr "Ð—Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на злиттÑ"
msgid "Merge Requests"
msgstr "Запити на злиттÑ"
@@ -8262,11 +9778,14 @@ msgstr "Ð—Ð»Ð¸Ñ‚Ñ‚Ñ Ð² процеÑÑ–"
msgid "Merge request"
msgstr "Запит на злиттÑ"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "Ð—Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на злиттÑ"
msgid "Merge request approvals allow you to set the number of necessary approvals and predefine a list of approvers that will need to approve every merge request in a project."
-msgstr ""
+msgstr "Ð—Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑŽÑ‚ÑŒ вÑтановити кількіÑÑ‚ÑŒ необхідних затверджень та попередньо визначити ÑпиÑок затверджуючих оÑіб, Ñкі повинні будуть затверджувати кожен запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñƒ проекті."
msgid "Merge requests"
msgstr "Запити на злиттÑ"
@@ -8274,6 +9793,9 @@ msgstr "Запити на злиттÑ"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "Запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ â€” це ÑпоÑіб запропонувати Ñвої зміни до проекту Ñ– обговорити Ñ—Ñ… із іншими"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr "Злити, коли конвеєр уÑпішно завершитьÑÑ"
@@ -8287,10 +9809,10 @@ msgid "MergeConflict|HEAD//our changes"
msgstr "HEAD//ваші зміни"
msgid "MergeConflict|Use ours"
-msgstr ""
+msgstr "ВикориÑтовувати наш"
msgid "MergeConflict|Use theirs"
-msgstr ""
+msgstr "ВикориÑтовувати їхній"
msgid "MergeConflict|conflict"
msgstr "конфлікт"
@@ -8299,7 +9821,7 @@ msgid "MergeConflict|conflicts"
msgstr "конфлікти"
msgid "MergeConflict|origin//their changes"
-msgstr ""
+msgstr "Зміни між origin та їхнім"
msgid "MergeRequests|Add a reply"
msgstr "Додати відповідь"
@@ -8307,18 +9829,6 @@ msgstr "Додати відповідь"
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "Виникла помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€Ð½ÐµÑ‚ÐºÐ¸ коментарÑ."
-msgid "MergeRequests|Discussion stays resolved"
-msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð»Ð¸ÑˆÐ°Ñ”Ñ‚ÑŒÑÑ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð¸Ð¼"
-
-msgid "MergeRequests|Discussion stays unresolved"
-msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð»Ð¸ÑˆÐ°Ñ”Ñ‚ÑŒÑÑ Ð½ÐµÐ²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð¸Ð¼"
-
-msgid "MergeRequests|Discussion will be resolved"
-msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ вирішеним"
-
-msgid "MergeRequests|Discussion will be unresolved"
-msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ невирішеним"
-
msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr "ÐевдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ коміти. Це повинно бути виконано вручну."
@@ -8328,7 +9838,7 @@ msgstr "Перейти до наÑтупного невирішеного обг
msgid "MergeRequests|Reply..."
msgstr "ВідповіÑти..."
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr "Вирішити це Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð² новій задачі"
msgid "MergeRequests|Saving the comment failed"
@@ -8337,6 +9847,18 @@ msgstr "Помилка при збереженні коментарÑ"
msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr "ÐžÐ±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ–Ð² відхилено: інше Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ відбуваєтьÑÑ."
+msgid "MergeRequests|Thread stays resolved"
+msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð»Ð¸ÑˆÐ°Ñ”Ñ‚ÑŒÑÑ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸Ð¼"
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð»Ð¸ÑˆÐ°Ñ”Ñ‚ÑŒÑÑ Ð½ÐµÐ·Ð°ÐºÑ€Ð¸Ñ‚Ð¸Ð¼"
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ закрито"
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ повторно відкрито"
+
msgid "MergeRequests|Toggle comments for this file"
msgstr "Увімкнути або вимкнути коментарі Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу"
@@ -8349,26 +9871,26 @@ msgstr "ПереглÑнути замінений файл Ñтаном на %{c
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr "прокоментував (-ла) коміт %{commitLink}"
-msgid "MergeRequests|started a discussion"
-msgstr "розпочав (-ла) обговореннÑ"
+msgid "MergeRequests|started a thread"
+msgstr "розпочато обговореннÑ"
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
-msgstr "розпочав (-ла) Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %{linkStart}Ñтарої верÑÑ–Ñ— порівнÑÐ½Ð½Ñ (diff)%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr "розпочато Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð² %{linkStart}Ñтарій верÑÑ–Ñ— відмінноÑтей%{linkEnd}"
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
-msgstr "розпочав (-ла) Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %{linkStart}порівнÑÐ½Ð½Ñ (diff)%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr "розпочато Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %{linkStart}відмінноÑтей%{linkEnd}"
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "розпочав (-ла) Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ñтарілих змін в коміті %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr "розпочато Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ñтарілої зміни в коміті %{linkStart}%{commitId}%{linkEnd}"
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "розпочав (-ла) коміту %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr "розпочато Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ %{linkStart}%{commitId}%{linkEnd}"
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
msgstr "%{paragraphStart} Ð¾Ð¿Ð¸Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ %{descriptionChangedTimes} раз(а,ів) %{timeDifferenceMinutes}%{paragraphEnd}"
msgid "MergeRequest|Error dismissing suggestion popover. Please try again."
-msgstr ""
+msgstr "Помилка при відхиленні вікна підказок. Будь лаÑка, Ñпробуйте знову."
msgid "MergeRequest|Error loading full diff. Please try again."
msgstr "Помилка при заванаженні повного порівнÑннÑ. Будь лаÑка, Ñпробуйте знову."
@@ -8385,24 +9907,42 @@ msgstr "Злито"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr "Злиті гілки в процеÑÑ– видаленнÑ. Це може зайнÑти деÑкий Ñ‡Ð°Ñ Ð² залежноÑÑ‚Ñ– від Ñ—Ñ… кількоÑÑ‚Ñ–. Будь лаÑка, оновіть Ñторінку, щоб побачити зміни."
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "ПовідомленнÑ"
+msgid "Method"
+msgstr "Метод"
+
msgid "Metric was successfully added."
msgstr "Метрику уÑпішно додано."
msgid "Metric was successfully updated."
msgstr "Метрику уÑпішно оновлено."
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "Метрики"
+msgid "Metrics - Grafana"
+msgstr "Метрики - Grafana"
+
msgid "Metrics - Influx"
msgstr "Метрики - Influx"
msgid "Metrics - Prometheus"
msgstr "Метрики - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr "Метрики та профілюваннÑ"
@@ -8476,10 +10016,10 @@ msgid "Metrics|There was an error while retrieving metrics"
msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¼ÐµÑ‚Ñ€Ð¸Ðº"
msgid "Metrics|Unexpected deployment data response from prometheus endpoint"
-msgstr "Ðеочікувана відповідь про Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ ендпойнта Prometheus"
+msgstr "Ðеочікувана відповідь про Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ кінцевої точки Prometheus"
msgid "Metrics|Unexpected metrics data response from prometheus endpoint"
-msgstr "Ðеочікувана відповідь про дані метрики від ендпойнта Prometheus"
+msgstr "Ðеочікувана відповідь про дані метрики від кінцевої точки Prometheus"
msgid "Metrics|Unit label"
msgstr "Одиниці вимірюваннÑ"
@@ -8563,17 +10103,14 @@ msgid "Minimum capacity to be available before we schedule more mirrors preempti
msgstr ""
msgid "Minimum length is %{minimum_password_length} characters"
-msgstr ""
+msgstr "Мінімально довжина Ñкладає %{minimum_password_length} Ñимволів"
msgid "Minimum length is %{minimum_password_length} characters."
-msgstr ""
+msgstr "Мінімально довжина Ñкладає %{minimum_password_length} Ñимволів."
msgid "Minutes"
msgstr "Хвилин"
-msgid "Mirror a repository"
-msgstr "Віддзеркалити репозиторій"
-
msgid "Mirror direction"
msgstr "ÐапрÑмок віддзеркаленнÑ"
@@ -8602,7 +10139,7 @@ msgid "Mirroring will only be available if the feature is included in the plan o
msgstr "Ð’Ñ–Ð´Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÐµÐ½Ð½Ñ Ð´Ð¾Ñтупне тільки Ñкщо Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½Ð°Ð»ÑŒÐ½Ñ–ÑÑ‚ÑŒ включена в план Ð´Ð»Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ кориÑтувача або групи."
msgid "Missing commit signatures endpoint!"
-msgstr ""
+msgstr "ВідÑÑƒÑ‚Ð½Ñ ÐºÑ–Ð½Ñ†ÐµÐ²Ð° точка Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñів комітів!"
msgid "MissingSSHKeyWarningLink|add an SSH key"
msgstr "не додаÑте SSH ключ"
@@ -8613,6 +10150,9 @@ msgstr "СкаÑувати"
msgid "Modal|Close"
msgstr "Закрити"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr "Змінити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ"
@@ -8625,8 +10165,8 @@ msgstr "Змінити коміт-злиттÑ"
msgid "Monday"
msgstr "Понеділок"
-msgid "Monitor your errors by integrating with Sentry"
-msgstr "Моніторинг ваших помилок шлÑхом інтеграції із Sentry"
+msgid "Monitor your errors by integrating with Sentry."
+msgstr ""
msgid "Monitoring"
msgstr "Моніторинг"
@@ -8637,6 +10177,12 @@ msgstr "МіÑÑці"
msgid "More"
msgstr "Більше"
+msgid "More Information"
+msgstr "Більше інформації"
+
+msgid "More Slack commands"
+msgstr "Більше команд Slack"
+
msgid "More actions"
msgstr "Додаткові дії"
@@ -8650,13 +10196,13 @@ msgid "More information is available|here"
msgstr "тут"
msgid "More than %{number_commits_distance} commits different with %{default_branch}"
-msgstr ""
+msgstr "Ð Ñ–Ð·Ð½Ð¸Ñ†Ñ Ñ–Ð· %{default_branch} Ñкладає більше %{number_commits_distance} комітів"
msgid "Most stars"
msgstr "Ðайбільше в обраних"
msgid "Mount point %{mounted_as} not found in %{model_class}."
-msgstr ""
+msgstr "Точку Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %{mounted_as} не знайдено в %{model_class}."
msgid "Move"
msgstr "ПереміÑтити"
@@ -8667,6 +10213,12 @@ msgstr "ПереміÑтити задачу"
msgid "Move issue from one column of the board to another"
msgstr "ПереміÑтити задачу із однієї колонки дошки до іншої"
+msgid "Move selection down"
+msgstr "ПереміÑтити Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð²Ð½Ð¸Ð·"
+
+msgid "Move selection up"
+msgstr "ПереміÑтити Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð²Ð³Ð¾Ñ€Ñƒ"
+
msgid "Move this issue to another project."
msgstr "ПереміÑтити цю задачу до іншого проекту."
@@ -8676,6 +10228,12 @@ msgstr "Ðеможливо переміÑтити задачу через нед
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr "Ðеможливо перенеÑти задачу до проекту, в Ñкому вона знаходитьÑÑ!"
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr "ПереміÑтити задачу в колонку %{label} на дошці."
@@ -8695,7 +10253,7 @@ msgid "Name"
msgstr "Ім’Ñ"
msgid "Name has already been taken"
-msgstr ""
+msgstr "Ð†Ð¼â€™Ñ Ð²Ð¶Ðµ викориÑтовуєтьÑÑ"
msgid "Name new label"
msgstr "Ðазвіть нову мітку"
@@ -8707,7 +10265,7 @@ msgid "Name:"
msgstr "Ім’Ñ:"
msgid "Namespaces to index"
-msgstr ""
+msgstr "ПроÑтори імен Ð´Ð»Ñ Ñ–Ð½Ð´ÐµÐºÑуваннÑ"
msgid "Naming, topics, avatar"
msgstr "ІменуваннÑ, теми, аватар"
@@ -8773,6 +10331,9 @@ msgstr "Ðовий Пароль"
msgid "New Pipeline Schedule"
msgstr "Ðовий розклад Конвеєра"
+msgid "New Project"
+msgstr "Ðовий Проект"
+
msgid "New Snippet"
msgstr "Ðовий Ñніпет"
@@ -8795,7 +10356,7 @@ msgid "New epic"
msgstr "Ðовий епік"
msgid "New epic title"
-msgstr ""
+msgstr "Заголовок нового епіка"
msgid "New file"
msgstr "Ðовий файл"
@@ -8849,7 +10410,7 @@ msgid "New users set to external"
msgstr ""
msgid "New! Suggest changes directly"
-msgstr ""
+msgstr "Ðовинка! Пропонуйте зміни безпоÑередньо"
msgid "New..."
msgstr "Ðовий..."
@@ -8860,14 +10421,26 @@ msgstr ""
msgid "Next"
msgstr "Далі"
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr "ПÑевдонім"
msgid "No"
msgstr "ÐÑ–"
-msgid "No %{providerTitle} repositories available to import"
-msgstr "Ðемає репозиторіїв %{providerTitle} Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ"
+msgid "No %{header} for this request."
+msgstr "ВідÑутній %{header} у цьому запиті."
+
+msgid "No %{providerTitle} repositories found"
+msgstr "Ðе знайдено репозиторіїв %{providerTitle}"
+
+msgid "No Epic"
+msgstr "Ðемає епіка"
msgid "No Label"
msgstr "Без Мітки"
@@ -8878,14 +10451,20 @@ msgstr "Етап відÑутній"
msgid "No Tag"
msgstr "Ðемає тегів"
+msgid "No active admin user found"
+msgstr "Ðе знайдено активного адмініÑтратора"
+
msgid "No activities found"
msgstr "Ðе знайднено активноÑтей"
-msgid "No available namespaces to fork the project."
-msgstr ""
+msgid "No application_settings found"
+msgstr "Ðе знайдено application_settings"
-msgid "No blocking merge requests "
-msgstr ""
+msgid "No authentication methods configured."
+msgstr "Методи автентифікації не налаштовано."
+
+msgid "No available namespaces to fork the project."
+msgstr "Ðемає доÑтупних проÑторів імен Ð´Ð»Ñ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту."
msgid "No branches found"
msgstr "Гілок не знайдено"
@@ -8899,11 +10478,8 @@ msgstr "Ðемає змін між %{ref_start}%{source_branch}%{ref_end} та %
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "Ðеможливо з'єднатиÑÑŒ із Ñервером Gitaly, будь лаÑка, перевірте логи!"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr "Ð’ цьому проекті немає жодного образа контейнера. Додайте його за інÑтрукціÑми вище."
-
msgid "No contributions"
-msgstr ""
+msgstr "Ðемає внеÑків"
msgid "No contributions were found"
msgstr "ВнеÑки не знайдено"
@@ -8911,6 +10487,15 @@ msgstr "ВнеÑки не знайдено"
msgid "No credit card required."
msgstr "Ðе потрібна кредитна картка."
+msgid "No data found"
+msgstr "Даних не знайдено"
+
+msgid "No data to display"
+msgstr "Ðемає даних Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ"
+
+msgid "No deployments found"
+msgstr "Ðе знайдено розгортань"
+
msgid "No details available"
msgstr "Ðемає деталей Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ"
@@ -8935,12 +10520,18 @@ msgstr "Ðемає файлів"
msgid "No files found."
msgstr "Ðе знайдено жодного файлу."
+msgid "No forks available to you."
+msgstr "Вам не доÑтупний жоден форк."
+
msgid "No issues for the selected time period."
msgstr "Ðемає задач за вибраний період чаÑу."
msgid "No job trace"
msgstr "Ðемає логу завданнÑ"
+msgid "No jobs to show"
+msgstr "Ðемає завдань Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ"
+
msgid "No labels with such name or description"
msgstr "Ðемає міток з таким іменем або опиÑом"
@@ -8948,7 +10539,7 @@ msgid "No license. All rights reserved"
msgstr "Ðемає ліцензії. Ð’ÑÑ– права захищені"
msgid "No licenses found."
-msgstr ""
+msgstr "Ðе знайдено ліцензій."
msgid "No matching results"
msgstr "Ðемає відповідних результатів"
@@ -8969,7 +10560,7 @@ msgid "No other labels with such name or description"
msgstr "Ðемає інших міток з таким іменем або опиÑом"
msgid "No parent group"
-msgstr ""
+msgstr "Ðемає батьківÑької групи"
msgid "No preview for this file type"
msgstr "Попереднього переглÑду Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу файлів немає"
@@ -8987,7 +10578,7 @@ msgid "No repository"
msgstr "Ðемає репозиторію"
msgid "No required pipeline"
-msgstr ""
+msgstr "Ðемає необхідного конвеєру"
msgid "No runners found"
msgstr "Runner'ів не знайдено"
@@ -8995,23 +10586,32 @@ msgstr "Runner'ів не знайдено"
msgid "No schedules"
msgstr "Ðемає розкладів"
+msgid "No starrers matched your search"
+msgstr "Ðіхто з тих, хто додав в обране не задовільнÑÑ” вашому пошуку"
+
msgid "No start date"
msgstr "Ðемає дати початку"
+msgid "No template"
+msgstr "Шаблон відÑутній"
+
msgid "No value set by top-level parent group."
-msgstr ""
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ вÑтановлено на рівні найвищої батьківÑької групи."
msgid "No, directly import the existing email addresses and usernames."
msgstr "ÐÑ–, безпоÑередньо імпортувати Ñ–Ñнуючі адреÑи електронної пошти та імена кориÑтувачів."
msgid "No, not interested right now"
-msgstr ""
+msgstr "ÐÑ–, зараз не цікаво"
+
+msgid "Nobody has starred this repository yet"
+msgstr "Ðіхто ще не додав цей репозиторій в обране"
msgid "Node was successfully created."
-msgstr ""
+msgstr "Вузол уÑпішно Ñтворено."
msgid "Node was successfully updated."
-msgstr ""
+msgstr "Вузол уÑпішно оновлено."
msgid "Nodes"
msgstr "Вузли"
@@ -9019,6 +10619,9 @@ msgstr "Вузли"
msgid "None"
msgstr "Ðемає"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "ÐедоÑтупний"
@@ -9037,14 +10640,20 @@ msgstr "ÐедоÑтатньо даних"
msgid "Not found."
msgstr "Ðе знайдено."
+msgid "Not helpful"
+msgstr "Ðе кориÑна"
+
msgid "Not now"
msgstr "Пізніше"
msgid "Not ready yet. Try again later."
-msgstr ""
+msgstr "Ще не готово. Спробуйте знову пізніше."
msgid "Not started"
-msgstr ""
+msgstr "Ðе розпочато"
+
+msgid "Note"
+msgstr "Примітка"
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr "Зауважте, що це Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¾ надіÑлано на %{mail_to_invite_email}, але ви увійшли Ñк %{link_to_current_user} з електронною поштою %{mail_to_current_user}."
@@ -9061,6 +10670,9 @@ msgstr "Примітка: звернітьÑÑ Ð´Ð¾ вашого адмініÑÑ
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "Примітка: звернітьÑÑ Ð´Ð¾ вашого адмініÑтратора GitLab, щоб налаштувати %{github_integration_link}, Ñкий дозволить входити за допомогою GitHub та імпортувати репозиторії без генерації перÑонального токена доÑтупу."
+msgid "Note: the container registry is always visible when a project is public"
+msgstr "Примітка: Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð¸Ñ… проектів реєÑÑ‚Ñ€ контейнерів завжди Ñ” видимим"
+
msgid "NoteForm|Note"
msgstr "Примітка"
@@ -9080,10 +10692,10 @@ msgid "Notes|Show history only"
msgstr "Показати лише Ñ–Ñторію"
msgid "Notes|This comment has changed since you started editing, please review the %{open_link}updated comment%{close_link} to ensure information is not lost"
-msgstr ""
+msgstr "Цей коментар було змінено піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾, Ñк ви його почали редагувати. Будь лаÑка, переглÑньте %{open_link}оновлений коментар%{close_link}, щоб переконатиÑÑ Ð² тому, що інформацію не було втрачено"
msgid "Nothing to preview."
-msgstr ""
+msgstr "Дані Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду відÑутні."
msgid "Notification events"
msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ події"
@@ -9095,7 +10707,7 @@ msgid "Notification setting - %{notification_title}"
msgstr "Параметр ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ - %{notification_title}"
msgid "Notification settings saved"
-msgstr ""
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñповіщень збережено"
msgid "NotificationEvent|Close issue"
msgstr "Задача закрита"
@@ -9157,6 +10769,9 @@ msgstr "ВлаÑний"
msgid "Notifications"
msgstr "СповіщеннÑ"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾"
@@ -9173,14 +10788,26 @@ msgid "Number of Elasticsearch replicas"
msgstr ""
msgid "Number of Elasticsearch shards"
+msgstr "КількіÑÑ‚ÑŒ Ñегментів Elasticsearch"
+
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
msgstr ""
msgid "OK"
msgstr "OK"
-msgid "Object does not exist on the server or you don't have permissions to access it"
+msgid "Object Storage replication"
msgstr ""
+msgid "Object does not exist on the server or you don't have permissions to access it"
+msgstr "Об’єкт не Ñ–Ñнує на Ñервері або у Ð²Ð°Ñ Ð½Ðµ має до нього доÑтупу"
+
msgid "Oct"
msgstr "жовт."
@@ -9191,16 +10818,19 @@ msgid "OfSearchInADropdown|Filter"
msgstr "Фільтр"
msgid "Ok let's go"
-msgstr ""
+msgstr "Гаразд, уперед"
+
+msgid "OmniAuth"
+msgstr "OmniAuth"
msgid "Onboarding"
-msgstr ""
+msgstr "ОзнайомленнÑ"
msgid "Once imported, repositories can be mirrored over SSH. Read more %{link_start}here%{link_end}."
-msgstr ""
+msgstr "ПіÑÐ»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ, репозиторії можуть бути віддзеркалені через SSH. ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ %{link_start}тут%{link_end}."
msgid "Once removed, the fork relationship cannot be restored and you will no longer be able to send merge requests to the source."
-msgstr ""
+msgstr "ПіÑÐ»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð²â€™Ñзок форку не може бути відновлений Ñ– ви більше не зможете відправлÑти запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñƒ вихідний проект."
msgid "Once the exported file is ready, you will receive a notification email with a download link, or you can download it from this page."
msgstr ""
@@ -9213,7 +10843,7 @@ msgstr[2] "Ще %d елементів"
msgstr[3] "Ще %d елементів"
msgid "One or more groups that you don't have access to."
-msgstr ""
+msgstr "Одна або декілька груп, до Ñких ви не маєте доÑтупу."
msgid "One or more of your Bitbucket projects cannot be imported into GitLab directly because they use Subversion or Mercurial for version control, rather than Git."
msgstr "Один або декілька ваших проектів Bitbucket не можна імпортувати безпоÑередньо в GitLab, оÑкільки вони викориÑтовують Subversion або Mercurial Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ верÑій заміÑÑ‚ÑŒ Git."
@@ -9222,6 +10852,12 @@ msgid "One or more of your Google Code projects cannot be imported into GitLab d
msgstr "Один або декілька ваших проектів Google Code не можна імпортувати безпоÑередньо в GitLab, оÑкільки вони викориÑтовують Subversion або Mercurial Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ верÑій заміÑÑ‚ÑŒ Git."
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
+msgstr "Один або кілька з ваших файлів залежноÑтей не підтримуютьÑÑ, тому ÑпиÑок залежноÑтей може бути неповним. Ðижче наведено ÑпиÑок підтримуваних типів файлі."
+
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
msgstr ""
msgid "Only admins"
@@ -9234,7 +10870,7 @@ msgid "Only mirror protected branches"
msgstr "Віддзеркалювати лише захищені гілки"
msgid "Only policy:"
-msgstr ""
+msgstr "Политика включеннÑ:"
msgid "Only proceed if you trust %{idp_url} to control your GitLab account sign in."
msgstr "Продовжуйте тільки Ñкщо ви довірÑєте %{idp_url} контроль над входом до вашого облікового запиÑу GitLab."
@@ -9246,6 +10882,12 @@ msgid "Only project members will be imported. Group members will be skipped."
msgstr "Лише учаÑника проекту будуть імпортовані. УчаÑники групи будуть пропущені."
msgid "Only these extensions are supported: %{extension_list}"
+msgstr "ПідтримуютьÑÑ Ð»Ð¸ÑˆÐµ ці розширеннÑ: %{extension_list}"
+
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
msgstr ""
msgid "Oops, are you sure?"
@@ -9257,6 +10899,9 @@ msgstr "Відкриті"
msgid "Open Documentation"
msgstr "Відкрити документацію"
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr "Випадаючий ÑпиÑок типу коментарів"
@@ -9266,11 +10911,17 @@ msgstr "Відкрити помилки"
msgid "Open in Xcode"
msgstr "Відкрити в Xcode"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr "Відкриті задачі"
+
msgid "Open projects"
msgstr "Відкриті проекти"
msgid "Open raw"
-msgstr ""
+msgstr "Відкрити в неформатованому виглÑді"
msgid "Open sidebar"
msgstr "Розгорніть бічну панель"
@@ -9345,6 +10996,12 @@ msgid "Other information"
msgstr "Інша інформаціÑ"
msgid "Other merge requests block this MR"
+msgstr "Інші запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð±Ð»Ð¾ÐºÑƒÑŽÑ‚ÑŒ цей"
+
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
msgstr ""
msgid "Outbound requests"
@@ -9357,7 +11014,7 @@ msgid "Overwrite diverged branches"
msgstr "ПерезапиÑати розбіжні гілки"
msgid "Owned by anyone"
-msgstr ""
+msgstr "Ðалежить уÑім"
msgid "Owned by me"
msgstr "Ті, що належать мені"
@@ -9371,6 +11028,18 @@ msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ пакет"
msgid "Package was removed"
msgstr "Пакет був видалений"
+msgid "PackageRegistry|Delete Package Version"
+msgstr "Видалити верÑÑ–ÑŽ пакету"
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr "Виникла проблема при отриманні інформації про цей пакет."
+
+msgid "PackageRegistry|Unable to load package"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ пакет"
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ верÑÑ–ÑŽ %{boldStart}%{version}%{boldEnd} %{boldStart}%{name}%{boldEnd}. Ви впевнені?"
+
msgid "Packages"
msgstr "Пакети"
@@ -9390,7 +11059,7 @@ msgid "Pages Domains"
msgstr "Домени Pages"
msgid "Pages getting started guide"
-msgstr ""
+msgstr "Довідка по Pages"
msgid "Pagination|Go to first page"
msgstr "Перейти до першої Ñторінки"
@@ -9407,15 +11076,15 @@ msgstr "Перейти до попередньої Ñторінки"
msgid "Pagination|Last »"
msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Â»"
-msgid "Pagination|Next"
-msgstr "ÐаÑтупна"
-
-msgid "Pagination|Prev"
-msgstr "ПопереднÑ"
+msgid "Pagination|Next ›"
+msgstr "ÐаÑтупна ›"
msgid "Pagination|« First"
msgstr "« Перша"
+msgid "Pagination|‹ Prev"
+msgstr "‹ ПопереднÑ"
+
msgid "Parameter"
msgstr "Параметр"
@@ -9438,13 +11107,13 @@ msgid "Password successfully changed"
msgstr "Пароль змінено уÑпішно"
msgid "Password was successfully updated. Please login with it"
-msgstr ""
+msgstr "Пароль уÑпішно оновлено. Будь лаÑка, увійдіть за допомогою нього"
msgid "Past due"
msgstr "ПроÑтрочені"
msgid "Paste a machine public key here. Read more about how to generate it %{link_start}here%{link_end}"
-msgstr ""
+msgstr "Ð’Ñтавте Ñюди відкритий ключ машини. ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про те, Ñк його згенерувати %{link_start}тут%{link_end}"
msgid "Paste epic link"
msgstr "Ð’Ñтавити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° епік"
@@ -9453,7 +11122,7 @@ msgid "Paste issue link"
msgstr "Ð’Ñтавити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° задачу"
msgid "Paste your public SSH key, which is usually contained in the file '~/.ssh/id_ed25519.pub' or '~/.ssh/id_rsa.pub' and begins with 'ssh-ed25519' or 'ssh-rsa'. Don't use your private SSH key."
-msgstr ""
+msgstr "Ð’Ñтавте Ñвій публічний ключ SSH, Ñкий зазвичай знаходитьÑÑ Ñƒ файлі \"~/.ssh/id_ed25519.pub\" або \"~/.ssh/id_rsa.pub\" Ñ– починаєтьÑÑ Ñ–Ð· \"ssh-ed25519\" або \"ssh-rsa\". Ðе викориÑтовуйте Ñвій приватний ключ."
msgid "Path"
msgstr "ШлÑÑ…"
@@ -9468,7 +11137,7 @@ msgid "Pause"
msgstr "Призупинити"
msgid "Pause replication"
-msgstr ""
+msgstr "Призупинити реплікацію"
msgid "Paused Runners don't accept new jobs"
msgstr "Призупинені Runner'и не приймають нові завданнÑ"
@@ -9480,19 +11149,37 @@ msgid "People without permission will never get a notification and won't be able
msgstr "Люди без дозволу ніколи не отримуватимуть Ñповіщень Ñ– не зможуть коментувати."
msgid "People without permission will never get a notification."
-msgstr ""
+msgstr "Люди без дозволу ніколи не отримуватимуть Ñповіщень."
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "Виконуйте такі розширені операції, Ñк зміна шлÑху, перенеÑÐµÐ½Ð½Ñ Ñ‡Ð¸ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸."
+msgid "Perform common operations on GitLab project"
+msgstr "Виконати звичайні операції на проекті GitLab"
+
msgid "Performance optimization"
msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚Ñ–"
+msgid "PerformanceBar|Gitaly calls"
+msgstr "Виклики Gitaly"
+
+msgid "PerformanceBar|Redis calls"
+msgstr "Виклики Redis"
+
+msgid "PerformanceBar|Rugged calls"
+msgstr "Виклики Rugged"
+
+msgid "PerformanceBar|SQL queries"
+msgstr "Запити SQL"
+
+msgid "PerformanceBar|trace"
+msgstr "лог"
+
msgid "Permissions"
msgstr "Права доÑтупу"
msgid "Permissions Help"
-msgstr ""
+msgstr "Довідка по дозволам"
msgid "Permissions, LFS, 2FA"
msgstr "Дозволи, LFS, 2FA"
@@ -9515,12 +11202,21 @@ msgstr "Задачі Phabricator"
msgid "Pick a name"
msgstr "Виберіть ім'Ñ"
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr "Виберіть назву заÑтоÑунку Ñ– ми надамо вам унікальний %{type} токен."
+
msgid "Pin code"
msgstr "PIN-код"
msgid "Pipeline"
msgstr "Конвеєр"
+msgid "Pipeline %{label}"
+msgstr "Конвеєр %{label}"
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr "Конвеєр %{label} Ð´Ð»Ñ \"%{dataTitle}\""
+
msgid "Pipeline Schedule"
msgstr "Розклад Конвеєра"
@@ -9587,8 +11283,8 @@ msgstr "Змінні"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "Спеціальні"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
-msgstr "Коміт: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
+msgstr "Конвеєр: %{ciStatus}"
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
msgstr "Конвеєр: %{ci_status}"
@@ -9611,11 +11307,20 @@ msgstr "Конвеєри за оÑтанній тиждень"
msgid "Pipelines for last year"
msgstr "Конвеєри за оÑтанній рік"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr "Конвеєри Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾. Відділений конвеєр виконуєтьÑÑ Ð² контекÑÑ‚Ñ– запиту на злиттÑ, а не в контекÑÑ‚Ñ– результату злиттÑ. ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ в документації про конвеєери Ð´Ð»Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð² злиттÑ."
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
-msgstr ""
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð² Ð´Ð»Ñ \"%{project_name}\" уÑпішно оновлено."
msgid "Pipelines| to purchase more minutes."
-msgstr ""
+msgstr " Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð´Ð±Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… хвилин."
+
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr "%{namespace_name} перевищив Ñвою квоту хвилин Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð²."
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr "%{namespace_name} має менш ніж %{notification_level}%% доÑтупних хвилин Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð²."
msgid "Pipelines|API"
msgstr "API"
@@ -9639,7 +11344,7 @@ msgid "Pipelines|Loading Pipelines"
msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð²"
msgid "Pipelines|Pipelines will not run anymore on shared Runners."
-msgstr ""
+msgstr "Конвеєри більше не будуть запуÑкатиÑÑ Ð½Ð° загальних runner'ах."
msgid "Pipelines|Project cache successfully reset."
msgstr "Кеш проекту уÑпішно очищено."
@@ -9665,15 +11370,30 @@ msgstr "Цей проект в даний Ñ‡Ð°Ñ Ð½Ðµ налаштований Ð
msgid "Pipeline|Commit"
msgstr "Коміт"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑÑ‚Ð°Ñ‚ÑƒÑ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð°. Ð”Ð»Ñ ÑƒÑÑƒÐ½ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ð¾Ð»Ð°Ð´Ð¾Ðº, прочитайте %{linkStart}документацію%{linkEnd}"
+
msgid "Pipeline|Coverage"
msgstr "ПокриттÑ"
+msgid "Pipeline|Detached merge request pipeline"
+msgstr "Відділений конвеєр запиту на злиттÑ"
+
msgid "Pipeline|Duration"
msgstr "ТриваліÑÑ‚ÑŒ"
msgid "Pipeline|Existing branch name or tag"
msgstr "ІÑнуюче Ñ–Ð¼â€™Ñ Ð³Ñ–Ð»ÐºÐ¸ або тег"
+msgid "Pipeline|Key"
+msgstr "Ключ"
+
+msgid "Pipeline|Merge train pipeline"
+msgstr "Конвеєр ланцюжка змін"
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "Конвеєр"
@@ -9702,7 +11422,10 @@ msgid "Pipeline|Stop pipeline #%{pipelineId}?"
msgstr "Зупинити конвеєр #%{pipelineId}?"
msgid "Pipeline|Triggerer"
-msgstr ""
+msgstr "Запущено"
+
+msgid "Pipeline|Value"
+msgstr "ЗначеннÑ"
msgid "Pipeline|Variables"
msgstr "Змінні"
@@ -9714,10 +11437,7 @@ msgid "Pipeline|all"
msgstr "вÑÑ–"
msgid "Pipeline|for"
-msgstr ""
-
-msgid "Pipeline|into"
-msgstr ""
+msgstr "ДлÑ"
msgid "Pipeline|on"
msgstr ""
@@ -9725,9 +11445,6 @@ msgstr ""
msgid "Pipeline|success"
msgstr "уÑпіх"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "зі Ñтадією"
@@ -9735,13 +11452,13 @@ msgid "Pipeline|with stages"
msgstr "зі ÑтадіÑми"
msgid "PivotalTrackerService|Comma-separated list of branches which will be automatically inspected. Leave blank to include all branches."
-msgstr ""
+msgstr "Розділений комами ÑпиÑок гілок, Ñкі будуть автоматично перевірÑтиÑÑ. Залиште порожнім, щоб включити уÑÑ– гілки."
msgid "PivotalTrackerService|Pivotal Tracker API token."
msgstr "API токен Pivotal Tracker."
msgid "PivotalTrackerService|Project Management Software (Source Commits Endpoint)"
-msgstr ""
+msgstr "Програмне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°Ð¼Ð¸ (кінцева точка Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ–Ð²)"
msgid "Plain diff"
msgstr "ПроÑте порівнÑннÑ"
@@ -9758,29 +11475,35 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr "Будь лаÑка, %{link_to_register} або %{link_to_sign_in} щоб прокоментувати"
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr "Буль лаÑка, %{startTagRegister}зареєÑтруйтеÑÑ%{endRegisterTag} або %{startTagSignIn}увійдіть%{endSignInTag}, щоб відповіÑти"
+
msgid "Please accept the Terms of Service before continuing."
msgstr "Будь лаÑка, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ð¹Ð¼Ñ–Ñ‚ÑŒ умови Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ñлуг."
msgid "Please add a comment in the text area above"
-msgstr ""
+msgstr "Будь лаÑка, додайте коментар в текÑтовій облаÑÑ‚Ñ– нижче"
msgid "Please add a list to your board first"
-msgstr ""
+msgstr "Будь лаÑка, Ñпочатку додайте ÑпиÑок до вашої дошки"
msgid "Please check the configuration file for this chart"
-msgstr ""
+msgstr "Будь лаÑка, перевірте конфігураційний файл Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— діаграми"
msgid "Please check the configuration file to ensure that a collection of charts has been declared."
-msgstr ""
+msgstr "Будь лаÑка, перевірте конфігураційний файл, щоб впевнитиÑÑ Ð² тому, що набір діаграм було оголошено."
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
+msgstr "Будь лаÑка, переконайтеÑÑ, що файл конфігурації доÑтупний Ñ– що він Ñ” коректним файлом YAML"
+
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
msgstr ""
msgid "Please choose a group URL with no special characters."
msgstr "Будь лаÑка задайте URL групи без Ñпеціальних Ñимволів."
msgid "Please complete your profile with email address"
-msgstr ""
+msgstr "Будь лаÑка, доповніть Ñвій профіль адреÑою електронної пошти"
msgid "Please convert them to %{link_to_git}, and go through the %{link_to_import_flow} again."
msgstr "Будь лаÑка Ñконвертуйте Ñ—Ñ… в %{link_to_git} Ñ– виконайте знову %{link_to_import_flow}."
@@ -9789,7 +11512,7 @@ msgid "Please convert them to Git on Google Code, and go through the %{link_to_i
msgstr "Будь лаÑка Ñконвертуйте Ñ—Ñ… в Git на Google Code, Ñ– виконайте знову %{link_to_import_flow}."
msgid "Please create a password for your new account."
-msgstr ""
+msgstr "Будь лаÑка, Ñтворіть пароль Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ нового облікового запиÑу."
msgid "Please create a username with only alphanumeric characters."
msgstr "Будь лаÑка, Ñтворіть ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача лише із буквено-цифрових Ñимволів."
@@ -9807,7 +11530,7 @@ msgid "Please enter a valid number"
msgstr "Будь лаÑка, введіть дійÑний номер"
msgid "Please enter or upload a license."
-msgstr ""
+msgstr "Будь лаÑка, введіть або завантажте ліцензію."
msgid "Please fill in a descriptive name for your group."
msgstr "Введіть опиÑове ім'Ñ Ð³Ñ€ÑƒÐ¿Ð¸."
@@ -9825,7 +11548,7 @@ msgid "Please provide a valid email address."
msgstr "Будь лаÑка, вкажіть дійÑну e-mail адреÑу."
msgid "Please retype the email address."
-msgstr ""
+msgstr "Будь лаÑка, повторно введіть адреÑу електронної пошти."
msgid "Please select a file"
msgstr "Будь лаÑка, виберіть файл"
@@ -9852,7 +11575,7 @@ msgid "Please upgrade PostgreSQL to version 9.6 or greater. The status of the re
msgstr "Будь лаÑка, оновіть PostgreSQL до верÑÑ–Ñ— 9.6 або вище. Стан реплікації не може бути доÑтовірно визначений у поточній верÑÑ–Ñ—."
msgid "Please use this form to report to the admin users who create spam issues, comments or behave inappropriately."
-msgstr ""
+msgstr "Будь лаÑка, викориÑтовуйте цю форму щоб повідомити адміну Ñкі кориÑтувачі Ñтворюють Ñпам (задачі або коментарі) або поводÑÑ‚ÑŒÑÑ Ð½ÐµÐ½Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¼ чином."
msgid "Please wait a moment, this page will automatically refresh when ready."
msgstr "Будь лаÑка, зачекайте, Ñ†Ñ Ñторінка автоматично оновитьÑÑ, коли буде готова."
@@ -9863,6 +11586,9 @@ msgstr "Будь лаÑка, почекайте поки ми з’єднуємÐ
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "Будь лаÑка, почекайте поки ми імпортуємо ваш репозиторій. Оновлюйте Ñторінку за бажаннÑм."
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "ÐалаштуваннÑ"
@@ -9870,19 +11596,19 @@ msgid "Preferences saved."
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾."
msgid "Preferences|Behavior"
-msgstr ""
+msgstr "Поведінка"
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
-msgstr ""
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
+msgstr "Оберіть між фікÑованим (макÑ. 1280 пікÑ.) та адаптивним (%{percentage}) макетом."
msgid "Preferences|Choose what content you want to see on a project’s overview page."
-msgstr ""
+msgstr "Вибрати вміÑÑ‚ оглÑдової Ñторінки проекту."
msgid "Preferences|Customize the appearance of the application header and navigation sidebar."
-msgstr ""
+msgstr "Ðалаштувати зовнішній виглÑд заголовку заÑтоÑунку та навігаційної бічної панелі."
msgid "Preferences|Default dashboard"
-msgstr ""
+msgstr "Панель ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° замовчуваннÑм"
msgid "Preferences|Display time in 24-hour format"
msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу у 24-годинному форматі"
@@ -9891,16 +11617,19 @@ msgid "Preferences|For example: 30 mins ago."
msgstr "Ðаприклад: 30 хвилин тому."
msgid "Preferences|Layout width"
-msgstr ""
+msgstr "Ширина макета"
msgid "Preferences|Navigation theme"
msgstr "Тема навігації"
msgid "Preferences|Project overview content"
-msgstr ""
+msgstr "ВміÑÑ‚ оглÑдової Ñторінки проекту"
+
+msgid "Preferences|Show whitespace in diffs"
+msgstr "Показувати пропуÑки в різниці"
msgid "Preferences|Syntax highlighting theme"
-msgstr ""
+msgstr "Тема Ð´Ð»Ñ Ð¿Ñ–Ð´Ñвітки ÑинтакÑиÑу"
msgid "Preferences|These settings will update how dates and times are displayed for you."
msgstr "Ці Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³ÑƒÐ»ÑŽÑŽÑ‚ÑŒ Ñк Ð´Ð»Ñ Ð²Ð°Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶Ð°Ñ‚Ð¸Ð¼ÐµÑ‚ÑŒÑÑ Ð´Ð°Ñ‚Ð° Ñ– чаÑ."
@@ -9909,10 +11638,10 @@ msgid "Preferences|This feature is experimental and translations are not complet
msgstr "Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ñ” екÑпериментальною Ñ– переклади ще не завершені"
msgid "Preferences|This setting allows you to customize the appearance of the syntax."
-msgstr ""
+msgstr "Цей параметр дозволÑÑ” налаштувати зовнішній виглÑд ÑинтакÑиÑу."
msgid "Preferences|This setting allows you to customize the behavior of the system layout and default views."
-msgstr ""
+msgstr "Цей параметр дозволÑÑ” вам налаштувати поведінку ÑиÑтемного макету на Ñтандартних компонентів."
msgid "Preferences|Time display"
msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу"
@@ -9936,10 +11665,10 @@ msgid "Prevent adding new members to project membership within this group"
msgstr "Заборонити Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… учаÑників до членÑтва в цій групі"
msgid "Prevent approval of merge requests by merge request author"
-msgstr ""
+msgstr "Ðе допуÑкати Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ—Ñ… авторами"
msgid "Prevent approval of merge requests by merge request committers"
-msgstr ""
+msgstr "Ðе допуÑкати Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на Ñ—Ñ… комітерами"
msgid "Preview"
msgstr "Попередній переглÑд"
@@ -9956,6 +11685,12 @@ msgstr "Попередній переглÑд кориÑного навантаÐ
msgid "Previous Artifacts"
msgstr "Попередні артефакти"
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "Головний"
@@ -9992,6 +11727,21 @@ msgstr "Приватні проекти можуть бути Ñтворені Ñ
msgid "Proceed"
msgstr "Продовжити"
+msgid "Productivity Analytics"
+msgstr "Ðналітика ПродуктивноÑÑ‚Ñ–"
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr "Ðналітика продуктивноÑÑ‚Ñ– дозволÑÑ” виÑвити проблеми, Ñкі Ñповільнюють вашу команду"
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr "Ð’ зроÑтаючому порÑдку"
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr "Днів до злиттÑ"
+
+msgid "ProductivityAnalytics|Descending"
+msgstr "Ð’ Ñпадному порÑдку"
+
msgid "Profile"
msgstr "Профіль"
@@ -9999,7 +11749,7 @@ msgid "Profile Settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ"
msgid "ProfileSession|on"
-msgstr ""
+msgstr "о"
msgid "Profiles| You are about to permanently delete %{yourAccount}, and all of the issues, merge requests, and groups linked to your account. Once you confirm %{deleteAccount}, it cannot be undone or recovered."
msgstr "Ви збираєтеÑÑ Ð¾Ñтаточно видалити %{yourAccount}, а також вÑÑ– задачі, запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° групи, пов'Ñзані з вашим обліковим запиÑом. ПіÑÐ»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ %{deleteAccount}, його неможливо буде відновити."
@@ -10056,7 +11806,7 @@ msgid "Profiles|Click on icon to activate signin with one of the following servi
msgstr "Клікніть на іконку, щоб активувати вхід за допомогою одного із наÑтупних ÑервіÑів"
msgid "Profiles|Commit email"
-msgstr ""
+msgstr "ÐдреÑа електронної пошти Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ–Ð²"
msgid "Profiles|Connect"
msgstr "Приєднати"
@@ -10071,7 +11821,7 @@ msgid "Profiles|Current status"
msgstr "Поточний Ñтан"
msgid "Profiles|Default notification email"
-msgstr ""
+msgstr "ÐдреÑа електронної пошти Ð´Ð»Ñ Ñповіщень за замовчуваннÑм"
msgid "Profiles|Delete Account"
msgstr "Видалити обліковий запиÑ"
@@ -10101,16 +11851,19 @@ msgid "Profiles|Enter your name, so people you know can recognize you"
msgstr "Введіть ваше ім'Ñ, щоб люди, Ñких ви знаєте, могли Ð²Ð°Ñ ÑƒÐ¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸"
msgid "Profiles|Feed token was successfully reset"
-msgstr ""
+msgstr "Токен доÑтупу до каналів уÑпішно перегенеровано"
msgid "Profiles|Full name"
msgstr "Повне ім'Ñ"
+msgid "Profiles|Impersonation"
+msgstr "ІмітуваннÑ"
+
msgid "Profiles|Include private contributions on my profile"
-msgstr ""
+msgstr "Включити приватні внеÑки до мого профілю"
msgid "Profiles|Incoming email token was successfully reset"
-msgstr ""
+msgstr "Токен Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… повідомлень електронної пошти було уÑпішно перегенеровано"
msgid "Profiles|Increase your account's security by enabling Two-Factor Authentication (2FA)"
msgstr "Підвищити рівень безпеки вашого облікового запиÑу за допомогою ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð´Ð²Ð¾Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ñ— автентифікації (2FA)"
@@ -10140,7 +11893,7 @@ msgid "Profiles|No file chosen"
msgstr "Файл не вибрано"
msgid "Profiles|Notification email"
-msgstr ""
+msgstr "ÐдреÑа електронної пошти Ð´Ð»Ñ Ñповіщень"
msgid "Profiles|Organization"
msgstr "ОрганізаціÑ"
@@ -10148,11 +11901,14 @@ msgstr "ОрганізаціÑ"
msgid "Profiles|Path"
msgstr "ШлÑÑ…"
+msgid "Profiles|Personal Access"
+msgstr "ПерÑональний доÑтуп"
+
msgid "Profiles|Position and size your new avatar"
msgstr "Спозиціонуйте ваш аватар та задайте його розмір"
msgid "Profiles|Primary email"
-msgstr ""
+msgstr "ОÑновна адреÑа електронної пошти"
msgid "Profiles|Private contributions"
msgstr "Приватні внеÑки"
@@ -10164,7 +11920,7 @@ msgid "Profiles|Public Avatar"
msgstr "Публічний аватар"
msgid "Profiles|Public email"
-msgstr ""
+msgstr "Публічна адреÑа електронної пошти"
msgid "Profiles|Remove avatar"
msgstr "Видалити аватар"
@@ -10178,6 +11934,9 @@ msgstr "Вхід через Ñоціальні мережі"
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "ДеÑкі параметри недоÑтупні Ð´Ð»Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¸Ñ… запиÑів LDAP"
+msgid "Profiles|Static object token was successfully reset"
+msgstr "Токен Ñтатичних об’єктів було уÑпішно перегенеровано"
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr "Розкажіть про Ñебе в межах 250 Ñимволів"
@@ -10191,7 +11950,7 @@ msgid "Profiles|This email will be displayed on your public profile"
msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð° адреÑа буде відображатиÑÑ Ñƒ вашому публічному профілі"
msgid "Profiles|This email will be used for web based operations, such as edits and merges. %{commit_email_link_start}Learn more%{commit_email_link_end}"
-msgstr ""
+msgstr "Ð¦Ñ Ð°Ð´Ñ€ÐµÑа електронної пошти буде викориÑтовуватиÑÑ Ð´Ð»Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð½Ð¸Ñ… операцій, таких Ñк Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° злиттÑ. %{commit_email_link_start}ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ%{commit_email_link_end}"
msgid "Profiles|This emoji and message will appear on your profile and throughout the interface."
msgstr "Цей Ñмайлик та Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´ÑƒÑ‚ÑŒ показані у вашому профілі та в інтерфейÑÑ–."
@@ -10209,7 +11968,7 @@ msgid "Profiles|Type your %{confirmationValue} to confirm:"
msgstr "Введіть ваш %{confirmationValue} Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ:"
msgid "Profiles|Typically starts with \"ssh-ed25519 …\" or \"ssh-rsa …\""
-msgstr ""
+msgstr "Як правило починаєтьÑÑ Ð· \"ssh-ed25519 …\" або \"ssh-rsa …\""
msgid "Profiles|Update profile settings"
msgstr "Оновити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ"
@@ -10248,7 +12007,7 @@ msgid "Profiles|You can change your avatar here or remove the current avatar to
msgstr "Тут ви можете змінити Ñвій аватар або видалити його та повернутиÑÑ Ð´Ð¾ %{gravatar_link}"
msgid "Profiles|You can set your current timezone here"
-msgstr ""
+msgstr "Тут ви можете вÑтановити поточний чаÑовий поÑÑ"
msgid "Profiles|You can upload your avatar here"
msgstr "Тут ви можете завантажити Ñвій аватар"
@@ -10283,6 +12042,12 @@ msgstr "Ваш ÑтатуÑ"
msgid "Profiles|e.g. My MacBook key"
msgstr "наприклад, мій ключ MacBook"
+msgid "Profiles|impersonation"
+msgstr "ІмітуваннÑ"
+
+msgid "Profiles|personal access"
+msgstr "перÑональний доÑтуп"
+
msgid "Profiles|username"
msgstr "ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
@@ -10328,6 +12093,9 @@ msgstr "Проект '%{project_name}' уÑпішно оновлено."
msgid "Project Badges"
msgstr "Значки проекту"
+msgid "Project Files"
+msgstr "Файли проекту"
+
msgid "Project ID"
msgstr "Ідентифікатор проекту"
@@ -10337,6 +12105,9 @@ msgstr "URL-адреÑа проекту"
msgid "Project access must be granted explicitly to each user."
msgstr "ДоÑтуп до проекту повинен надаватиÑÑ ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñƒ кориÑтувачеві."
+msgid "Project already created"
+msgstr "Проект вже Ñтворений"
+
msgid "Project and wiki repositories"
msgstr "Репозиторії проекту та вікі"
@@ -10344,10 +12115,10 @@ msgid "Project avatar"
msgstr "Ðватар проекту"
msgid "Project cannot be shared with the group it is in or one of its ancestors."
-msgstr ""
+msgstr "Проект не може бути Ñпільним із групою в Ñку він входить або з одним з Ñ—Ñ— предків."
msgid "Project configuration, including services"
-msgstr ""
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ включно із ÑервіÑами"
msgid "Project description (optional)"
msgstr "ÐžÐ¿Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ (необов'Ñзково)"
@@ -10383,14 +12154,11 @@ msgid "Project slug"
msgstr "ШлÑÑ… проекту"
msgid "Project uploads"
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ"
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr "Рівень видимоÑÑ‚Ñ– проекту буде змінено відповідно до правил проÑтору імен під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÐ½ÐµÑÐµÐ½Ð½Ñ Ð´Ð¾ групи."
-msgid "Project:"
-msgstr "Проект:"
-
msgid "Project: %{name}"
msgstr "Проект %{name}"
@@ -10433,6 +12201,12 @@ msgstr "Перейти до вашого форку"
msgid "ProjectOverview|Star"
msgstr "В обрані"
+msgid "ProjectOverview|Starrer"
+msgstr "Додав(-ла) в обране"
+
+msgid "ProjectOverview|Starrers"
+msgstr "Додали в обране"
+
msgid "ProjectOverview|Unstar"
msgstr "Видалити із обраних"
@@ -10451,21 +12225,57 @@ msgstr "або групу"
msgid "ProjectSelect|Search for project"
msgstr "Пошук проекту"
+msgid "ProjectService|%{service_title}: status off"
+msgstr "%{service_title}: ÑÑ‚Ð°Ñ‚ÑƒÑ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾"
+
+msgid "ProjectService|%{service_title}: status on"
+msgstr "%{service_title}: ÑÑ‚Ð°Ñ‚ÑƒÑ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾"
+
+msgid "ProjectService|Integrations"
+msgstr "Інтеграції"
+
+msgid "ProjectService|Last edit"
+msgstr "ОÑтанні зміни"
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr "Виконати звичайні операції на проекті GitLab: %{project_name}"
+
+msgid "ProjectService|Project services"
+msgstr "СервіÑи проекту"
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr "СервіÑи проекту дозволÑÑŽÑ‚ÑŒ вам інтегрувати GitLab з іншими заÑтоÑунками"
+
+msgid "ProjectService|Service"
+msgstr "СервіÑ"
+
+msgid "ProjectService|Services"
+msgstr "СервіÑи"
+
+msgid "ProjectService|Settings"
+msgstr "ÐалаштуваннÑ"
+
+msgid "ProjectService|To set up this service:"
+msgstr "Ðалаштувати цей ÑервіÑ:"
+
msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
-msgstr ""
+msgstr "Додаткові можливоÑÑ‚Ñ– запиту на злиттÑ, Ñкі впливають на те Ñк Ñ– коли відбуватиметьÑÑ Ð·Ð»Ð¸Ñ‚Ñ‚Ñ"
msgid "ProjectSettings|All discussions must be resolved"
-msgstr ""
-
-msgid "ProjectSettings|Allow merge trains"
-msgstr ""
+msgstr "Ð’ÑÑ– Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ– бути завершені"
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
-msgstr ""
+msgstr "Ðвтоматично завершувати Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð² запитах на злиттÑ, коли відмінноÑÑ‚Ñ– Ñтають неактуальними"
msgid "ProjectSettings|Badges"
msgstr "Значки"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr "Виберіть метод злиттÑ, Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° перевірки."
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr "Виберіть метод злиттÑ, Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° перевірки, а такожі задайте Ñтандартний шаблон опиÑу запитів на злиттÑ."
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "ЗвернітьÑÑ Ð´Ð¾ адмініÑтратора, щоб змінити це налаштуваннÑ."
@@ -10491,7 +12301,7 @@ msgid "ProjectSettings|Learn more about badges."
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про значки."
msgid "ProjectSettings|Merge checks"
-msgstr ""
+msgstr "Перевірки злиттÑ"
msgid "ProjectSettings|Merge commit"
msgstr ""
@@ -10500,10 +12310,10 @@ msgid "ProjectSettings|Merge commit with semi-linear history"
msgstr ""
msgid "ProjectSettings|Merge method"
-msgstr ""
+msgstr "Метод злиттÑ"
msgid "ProjectSettings|Merge options"
-msgstr ""
+msgstr "Параметри злиттÑ"
msgid "ProjectSettings|Merge pipelines will try to validate the post-merge result prior to merging"
msgstr ""
@@ -10515,16 +12325,16 @@ msgid "ProjectSettings|Only signed commits can be pushed to this repository."
msgstr "Тільки підпиÑані коміти можуть бути надіÑлані в цей репозиторій."
msgid "ProjectSettings|Pipelines must succeed"
-msgstr ""
+msgstr "Конвеєри мають бути уÑпішними"
msgid "ProjectSettings|Pipelines need to be configured to enable this feature."
-msgstr ""
+msgstr "Ðеобхідно налаштувати конвеєри, що викориÑтовувати цю функцію."
msgid "ProjectSettings|Show link to create/view merge request when pushing from the command line"
-msgstr ""
+msgstr "Показувати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‡Ð¸ переглÑду запиту на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸ відправці із командного Ñ€Ñдка"
msgid "ProjectSettings|These checks must pass before merge requests can be merged"
-msgstr ""
+msgstr "Ðеобхідно щоб ці перевірки уÑпішно виконалиÑÑ Ð¿ÐµÑ€ÐµÐ´ тим, Ñк запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð·Ð¼Ð¾Ð¶Ðµ бути злитий"
msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin."
msgstr "Цей параметр заÑтоÑовуєтьÑÑ Ð½Ð° рівні Ñервера та може бути перевизначений адмініÑтратором."
@@ -10637,12 +12447,60 @@ msgstr "Ðа жаль, по вашоу запиту проектів не зна
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” підтримки localStorage вашим браузером"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr "ДозволÑÑ” негайно зклонувати репозиторій цього проекту. ПропуÑÑ‚Ñ–Ñ‚ÑŒ, Ñкщо ви плануєте розміÑтити тут вже Ñ–Ñнуючий репозиторій."
+
+msgid "ProjectsNew|Blank"
+msgstr "ПуÑтий"
+
+msgid "ProjectsNew|Blank project"
+msgstr "ПуÑтий проект"
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr "ЗвернітьÑÑ Ð´Ð¾ адмініÑтратора Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— варіантів імпорту Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ проекту."
+
+msgid "ProjectsNew|Create from template"
+msgstr "Створити із шаблону"
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ та репозиторію."
+
+msgid "ProjectsNew|Description format"
+msgstr "Формат опиÑу"
+
+msgid "ProjectsNew|Import"
+msgstr "Імпорт"
+
+msgid "ProjectsNew|Import project"
+msgstr "Імпортувати проект"
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr "Ініціалізувати репозиторій файлом інÑтрукції (README)"
+
+msgid "ProjectsNew|No import options available"
+msgstr "Варіанти імпорту не доÑтупні"
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr "Будь лаÑка, почекайте, Ñторінку буде оновлено автоматично по завершенню."
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr "ÐžÐ¿Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ %{tag_start}(необов’Ñзково)%{tag_end}"
+
+msgid "ProjectsNew|Template"
+msgstr "Шаблон"
+
+msgid "ProjectsNew|Visibility Level"
+msgstr "Рівень видимоÑÑ‚Ñ–"
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr "Хочете розміÑтити декілька залежних проектів в одному проÑторі імен? %{link_start}Створіть групу.%{link_end}"
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr "Prometheus listen_address з config/gitlab.yml не Ñ” допуÑтимим URI"
+
msgid "PrometheusAlerts|Add alert"
msgstr "Додати попередженнÑ"
-msgid "PrometheusAlerts|Alert set"
-msgstr "Ðабір попереджень"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "Редагувати попередженнÑ"
@@ -10658,9 +12516,6 @@ msgstr "Помилка Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ"
msgid "PrometheusAlerts|Error saving alert"
msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ"
-msgid "PrometheusAlerts|No alert set"
-msgstr "Ðе вÑтановлено попередженнÑ"
-
msgid "PrometheusAlerts|Operator"
msgstr "Оператор"
@@ -10694,6 +12549,9 @@ msgstr "Загальні метрики автоматично збираютьÑ
msgid "PrometheusService|Custom metrics"
msgstr "ВлаÑні метрики"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr "Увімкнути Prometheus Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°Ñних метрик, викориÑтовуючи будь-Ñкий з варіантів вище"
@@ -10724,6 +12582,9 @@ msgstr "Додаткова інформаціÑ"
msgid "PrometheusService|New metric"
msgstr "Ðова метрика"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Базова адреÑа Prometheus API, наприклад http://prometheus.example.com/"
@@ -10748,6 +12609,12 @@ msgstr "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñƒ Ñерид
msgid "Promote"
msgstr "ПеренеÑти"
+msgid "Promote issue to an epic"
+msgstr "Перетворити задачу на епік"
+
+msgid "Promote issue to an epic."
+msgstr "Перетворити задачу на епік."
+
msgid "Promote these project milestones into a group milestone."
msgstr "ПеренеÑти ці проектні етапи на рівень групи."
@@ -10758,13 +12625,16 @@ msgid "Promote to group label"
msgstr "ПеренеÑти мітку на рівень групи"
msgid "PromoteMilestone|Only project milestones can be promoted."
-msgstr ""
+msgstr "Лише проектні етапи можуть бути перенеÑені."
msgid "PromoteMilestone|Project does not belong to a group."
msgstr "Проект не належить жодній групі."
msgid "PromoteMilestone|Promotion failed - %{message}"
-msgstr ""
+msgstr "ПеренеÑÐµÐ½Ð½Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ðµ: %{message}"
+
+msgid "Promoted issue to an epic."
+msgstr "Задачу перетворено на епік."
msgid "Promotions|Don't show me this again"
msgstr "Більше не показувати це"
@@ -10779,7 +12649,7 @@ msgid "Promotions|Upgrade plan"
msgstr "Перейти на вищий тарифний план"
msgid "Prompt users to upload SSH keys"
-msgstr ""
+msgstr "Пропонувати кориÑтувачам завантажувати Ñвої ключі SSH"
msgid "Protected"
msgstr "Захищено"
@@ -10796,6 +12666,9 @@ msgstr "Захищені Ñередовища"
msgid "Protected Tag"
msgstr "Захищений тег"
+msgid "Protected branches"
+msgstr "Захищені гілки"
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} буде доÑупне Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÑ–Ð². Ви впевнені?"
@@ -10860,10 +12733,10 @@ msgid "Public - The project can be accessed without any authentication."
msgstr "Публічний — проект может переглÑдатиÑÑ Ð±ÐµÐ· автентифікації."
msgid "Public Access Help"
-msgstr ""
+msgstr "Довідка по публічному доÑтупу"
msgid "Public deploy keys (%{deploy_keys_count})"
-msgstr ""
+msgstr "Публічні ключі Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ (%{deploy_keys_count})"
msgid "Public pipelines"
msgstr "Публічні конвеєри"
@@ -10871,17 +12744,20 @@ msgstr "Публічні конвеєри"
msgid "Pull"
msgstr "Отримати (pull)"
+msgid "Purchase more minutes"
+msgstr "Придбати більше хвилин"
+
msgid "Push"
msgstr "Відправити (push)"
msgid "Push Rule updated successfully."
-msgstr ""
+msgstr "Правило відправки оновлено уÑпішно."
msgid "Push Rules"
msgstr "Push-правила"
msgid "Push Rules updated successfully."
-msgstr ""
+msgstr "Правила відправки оновлені уÑпішно."
msgid "Push an existing Git repository"
msgstr "Відправити Ñ–Ñнуючий репозиторій Git"
@@ -10953,7 +12829,7 @@ msgid "Query"
msgstr "Запит"
msgid "Query is valid"
-msgstr ""
+msgstr "Запит є правильним"
msgid "Quick actions can be used in the issues description and comment boxes."
msgstr "Швидкі дії можна викориÑтовувати в опиÑах задач Ñ– коментарÑÑ…."
@@ -10962,6 +12838,9 @@ msgid "README"
msgstr "ІнÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ (README)"
msgid "Rake Tasks Help"
+msgstr "Довідка по завданнÑм Rake"
+
+msgid "Raw blob request rate limit per minute"
msgstr ""
msgid "Read more"
@@ -10973,23 +12852,35 @@ msgstr "Читати більше про Ñередовища"
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про права доÑтупу в проекті <strong>%{link_to_help}</strong>"
+msgid "Read more about related issues"
+msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про пов’Ñзані задачі"
+
msgid "Real-time features"
msgstr "Фунції реального чаÑу"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr "Отримувати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ налаштованого вручну Ñервера Prometheus."
msgid "Receive notifications about your own activity"
-msgstr ""
+msgstr "Отримувати ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ влаÑну активніÑÑ‚ÑŒ"
msgid "Recent"
msgstr "ОÑтанні"
+msgid "Recent Activity"
+msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ–ÑÑ‚ÑŒ"
+
msgid "Recent Project Activity"
msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð½Ð° активніÑÑ‚ÑŒ"
msgid "Recent Searches Service is unavailable"
-msgstr ""
+msgstr "Ð¡ÐµÑ€Ð²Ñ–Ñ Ð¾Ñтанніх пошуків недоÑтупний"
msgid "Recent searches"
msgstr "ОÑтанні пошукові запити"
@@ -11014,16 +12905,16 @@ msgstr[2] "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· %d Ñекунд Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶
msgstr[3] "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· %d Ñекунд Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°ÐºÑ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñтану..."
msgid "Regenerate instance ID"
-msgstr ""
+msgstr "Перегенерувати ідентифікатор інÑтанÑу"
msgid "Regenerate key"
msgstr "Створити ключ заново"
msgid "Regenerate recovery codes"
-msgstr ""
+msgstr "Перегенерувати коди відновленнÑ"
msgid "Regenerating the instance ID can break integration depending on the client you are using."
-msgstr ""
+msgstr "Повторна Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° інÑтанÑу може порушити інтеграцію в залежноÑÑ‚Ñ– від клієнта, Ñкого ви викориÑтовуєте."
msgid "Regex pattern"
msgstr "Шаблон у виглÑді регулÑрного виразу"
@@ -11055,9 +12946,6 @@ msgstr ""
msgid "Registration"
msgstr "РеєÑтраціÑ"
-msgid "Registry"
-msgstr "РеєÑÑ‚Ñ€"
-
msgid "Related Deployed Jobs"
msgstr "Пов’Ñзані розгорнуті Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ (Jobs)"
@@ -11083,7 +12971,10 @@ msgid "Releases"
msgstr "Релізи"
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
-msgstr ""
+msgstr "Релізи позначають певні моменти в Ñ–Ñторії розробки проекту, міÑÑ‚ÑÑ‚ÑŒ інформацію про тип змін та надають готові (чаÑто Ñкомпільовані) верÑÑ–Ñ— програмного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð³Ð¾ викориÑтаннÑ. Ðаразі релізи можуть бути Ñтворені тільки через API."
+
+msgid "Remember me"
+msgstr "Запам'Ñтати мене"
msgid "Remind later"
msgstr "Ðагадати пізніше"
@@ -11094,14 +12985,20 @@ msgstr ""
msgid "Remove"
msgstr "Видалити"
+msgid "Remove %{displayReference}"
+msgstr "Видалити %{displayReference}"
+
msgid "Remove Runner"
msgstr "Видалити Runner"
+msgid "Remove Zoom meeting"
+msgstr "Видалити Zoom-зуÑтріч"
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr "ВидалÑти вÑÑ– Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñƒ запитах на злиттÑ, коли у гілці-джерелі з'ÑвлÑÑŽÑ‚ÑŒÑÑ Ð½Ð¾Ð²Ñ– коміти"
msgid "Remove all or specific assignee(s)"
-msgstr ""
+msgstr "Видалити уÑÑ–Ñ… або певного(них) виконацÑ(ів)"
msgid "Remove all or specific label(s)"
msgstr "Видалити уÑÑ– або певні мітки(-ку)"
@@ -11118,14 +13015,23 @@ msgstr "Видалити виконавцÑ"
msgid "Remove avatar"
msgstr "Видалити аватар"
+msgid "Remove card"
+msgstr "Видалити картку"
+
msgid "Remove child epic from an epic"
-msgstr ""
+msgstr "Видалити дочірній епік із епіка"
msgid "Remove due date"
msgstr "Видалити заплановану дату завершеннÑ"
msgid "Remove fork relationship"
-msgstr ""
+msgstr "Видалити зв’Ñзок форку"
+
+msgid "Remove from board"
+msgstr "Видалити з дошки"
+
+msgid "Remove from epic"
+msgstr "Видалити із епіка"
msgid "Remove group"
msgstr "Видалити групу"
@@ -11133,6 +13039,9 @@ msgstr "Видалити групу"
msgid "Remove milestone"
msgstr "Видалити етап"
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "Видалити пріоритет"
@@ -11142,23 +13051,62 @@ msgstr "Видалити проект"
msgid "Remove spent time"
msgstr "Видалити витрачений чаÑ"
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr "Видалити запланований чаÑ"
msgid "Removed"
msgstr "Видалено"
-msgid "Removed %{type} with id %{id}"
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr "Видалено %{assignee_text} %{assignee_references}."
+
+msgid "Removed %{epic_ref} from child epics."
msgstr ""
+msgid "Removed %{label_references} %{label_text}."
+msgstr "Видалено %{label_references} %{label_text}."
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr "Видалено етап %{milestone_reference}."
+
+msgid "Removed %{type} with id %{id}"
+msgstr "Видалено %{type} з іденнтифікатором %{id}"
+
+msgid "Removed all labels."
+msgstr "Видалено вÑÑ– мітки."
+
+msgid "Removed an issue from an epic."
+msgstr "Видалено задачу із епіка."
+
msgid "Removed group can not be restored!"
msgstr "Видалену групу неможливо відновити!"
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr "Видалені проекти неможливо відновити!"
+msgid "Removed spent time."
+msgstr "Видалено витрачений чаÑ."
+
+msgid "Removed the due date."
+msgstr "Видалено заплановану дату завершеннÑ."
+
+msgid "Removed time estimate."
+msgstr "Видалено оцінку чаÑу."
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr "ВидалÑÑ” %{assignee_text} %{assignee_references}."
+
msgid "Removes %{epic_ref} from child epics."
-msgstr ""
+msgstr "ВидалÑÑ” %{epic_ref} з дочірних епіків."
+
+msgid "Removes %{label_references} %{label_text}."
+msgstr "ВидалÑÑ” %{label_references} %{label_text}."
msgid "Removes %{milestone_reference} milestone."
msgstr "ВидалÑÑ” етап %{milestone_reference}."
@@ -11166,6 +13114,12 @@ msgstr "ВидалÑÑ” етап %{milestone_reference}."
msgid "Removes all labels."
msgstr "ВидалÑÑ” вÑÑ– мітки."
+msgid "Removes an issue from an epic."
+msgstr "ВидалÑÑ” задачу із епіка."
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr "ВидалÑÑ” витрачений чаÑ."
@@ -11182,7 +13136,7 @@ msgid "Removing license…"
msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ—â€¦"
msgid "Removing the project will delete its repository and all related resources including issues, merge requests etc."
-msgstr ""
+msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ вдалить його репозиторій та вÑÑ– Ñпоріднені реÑурÑи включно із задачами, запитами на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ– Ñ‚. д."
msgid "Rename"
msgstr "Перейменувати"
@@ -11199,6 +13153,15 @@ msgstr "Повторне Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ ÐµÐ¿Ñ–ÐºÑƒ"
msgid "Reopen milestone"
msgstr "Повторне Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ ÐµÑ‚Ð°Ð¿Ñƒ"
+msgid "Reopen this %{quick_action_target}"
+msgstr "Повторно відкрити %{quick_action_target}"
+
+msgid "Reopened this %{quick_action_target}."
+msgstr "Повторно відкрито %{quick_action_target}."
+
+msgid "Reopens this %{quick_action_target}."
+msgstr "Повторно відкриває %{quick_action_target}."
+
msgid "Repair authentication"
msgstr "Відновити автентифікацію"
@@ -11208,12 +13171,21 @@ msgstr "Замінити"
msgid "Replace all label(s)"
msgstr "Замінити вÑÑ– мітки(-ку)"
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr "Замінено вÑÑ– мітки з %{label_references} %{label_text}."
+
+msgid "Reply by email"
+msgstr "ВідповіÑти по електнонній пошті"
+
msgid "Reply to comment"
msgstr "ВідповіÑти на коментар"
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr "ВідповіÑти на це електронне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÐµÐ·Ð¿Ð¾Ñередньо або %{view_it_on_gitlab}."
+msgid "Reply..."
+msgstr "ВідповіÑти..."
+
msgid "Repo by URL"
msgstr "Репозиторії по URL"
@@ -11233,7 +13205,7 @@ msgid "Reports|Class"
msgstr "КлаÑ"
msgid "Reports|Classname"
-msgstr ""
+msgstr "Ðазва клаÑу"
msgid "Reports|Confidence"
msgstr "ВпевненіÑÑ‚ÑŒ"
@@ -11245,16 +13217,16 @@ msgid "Reports|Failure"
msgstr "Помилка"
msgid "Reports|Metrics reports are loading"
-msgstr ""
+msgstr "Звіти по метрикам завантажуютьÑÑ"
msgid "Reports|Metrics reports changed on %{numberOfChanges} %{pointsString}"
-msgstr ""
+msgstr "Звіти по метрикам змінилиÑÑ Ð½Ð° %{numberOfChanges} %{pointsString}"
msgid "Reports|Metrics reports did not change"
-msgstr ""
+msgstr "Звіти по метрикам не змінилиÑÑ"
msgid "Reports|Metrics reports failed loading results"
-msgstr ""
+msgstr "Помилка при завантаженні результатів Ð´Ð»Ñ Ð·Ð²Ñ–Ñ‚Ñ–Ð² по метрикам"
msgid "Reports|Severity"
msgstr "Рівень"
@@ -11280,6 +13252,9 @@ msgstr "результати теÑтів не змінилиÑÑ"
msgid "Repository"
msgstr "Репозиторій"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–ÑŽ"
@@ -11304,9 +13279,15 @@ msgstr "ОбÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–ÑŽ"
msgid "Repository mirror"
msgstr "Дзеркало репозиторію"
+msgid "Repository static objects"
+msgstr "Статичні об’єкти репозиторію"
+
msgid "Repository storage"
msgstr "Сховище репозиторію"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr "Репозиторій: %{counter_repositories} / Wiki: %{counter_wikis} / Ðртифакти збірки: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "Вибрати"
@@ -11319,6 +13300,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr "ÐŸÑ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð²"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "Вимагати від вÑÑ–Ñ… кориÑтувачів цієї групи налаштувати двофакторну автентифікацію"
@@ -11329,9 +13313,12 @@ msgid "Require approval from code owners"
msgstr "Вимагати Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ влаÑників коду"
msgid "Require user password to approve"
-msgstr ""
+msgstr "Вимагати пароль кориÑтувача Ð´Ð»Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ"
msgid "Require users to prove ownership of custom domains"
+msgstr "Вимагати від кориÑтувачів Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð° влаÑноÑÑ‚Ñ– на влаÑні домени"
+
+msgid "Required argument 'targetElement' is missing"
msgstr ""
msgid "Requires approval from %{names}."
@@ -11349,11 +13336,14 @@ msgstr[2] "Ðеобхідно ще %d затверджень."
msgstr[3] "Ðеобхідно ще %d затверджень."
msgid "Resend confirmation email"
-msgstr ""
+msgstr "Повторно відіÑлати Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾ електронній пошті"
msgid "Resend invite"
msgstr "Повторно надіÑлати запрошеннÑ"
+msgid "Resend it"
+msgstr "Повторно це відіÑлати"
+
msgid "Reset authorization key"
msgstr "Скинути ключ авторизації"
@@ -11369,11 +13359,17 @@ msgstr "Скинути ключ"
msgid "Reset runners registration token"
msgstr "Перегенерувати реєÑтраційний токен runner-ів"
+msgid "Reset template"
+msgstr "Скинути шаблон"
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr "Ð¡ÐºÐ¸Ð´Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° авторизації Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту вимагатиме Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° авторизації в кожному із джерел попереджень, в Ñкому він увімкнений."
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
-msgstr ""
+msgstr "Ð¡ÐºÐ¸Ð´Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° авторизації призведе до ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ ключа. ІÑнуючі конфігурації попереджень потрібно буде оновити новим ключем."
-msgid "Resolve all discussions in new issue"
-msgstr "Вирішити вÑÑ– Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð² новій задачі"
+msgid "Resolve all threads in new issue"
+msgstr "Вирішити уÑÑ– Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð² новій задачі"
msgid "Resolve conflicts on source branch"
msgstr "Вирішити конфлікти у гілці-джерелі"
@@ -11381,20 +13377,23 @@ msgstr "Вирішити конфлікти у гілці-джерелі"
msgid "Resolve discussion"
msgstr "Завершити обговореннÑ"
+msgid "Resolve thread"
+msgstr "Закрити обговореннÑ"
+
msgid "Resolved"
msgstr "Вирішено"
msgid "Resolved 1 discussion."
-msgstr ""
+msgstr "Завершено 1 обговореннÑ."
msgid "Resolved all discussions."
-msgstr ""
+msgstr "Ð’ÑÑ– Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾."
msgid "Resolved by %{name}"
-msgstr ""
+msgstr "Вирішено %{name}"
msgid "Resolved by %{resolvedByName}"
-msgstr ""
+msgstr "Вирішено %{resolvedByName}"
msgid "Resolves IP addresses once and uses them to submit requests"
msgstr ""
@@ -11403,7 +13402,7 @@ msgid "Response"
msgstr "Відповідь"
msgid "Response didn't include `service_desk_address`"
-msgstr ""
+msgstr "Відповідь не міÑтила \"service_desk_address\""
msgid "Response metrics (AWS ELB)"
msgstr "Метрики відповідей (AWS ELB)"
@@ -11427,13 +13426,16 @@ msgid "Restart Terminal"
msgstr "ПерезапуÑтити термінал"
msgid "Restrict access by IP address"
-msgstr ""
+msgstr "Обмежити доÑтуп за IP адреÑою"
+
+msgid "Restrict membership by email"
+msgstr "Обмежити членÑтво за електронною поштою"
msgid "Resume"
msgstr "Продовжити"
msgid "Resume replication"
-msgstr ""
+msgstr "Відновити реплікацію"
msgid "Retry"
msgstr "Спробувати знову"
@@ -11442,10 +13444,10 @@ msgid "Retry this job"
msgstr "Повторити це завданнÑ"
msgid "Retry this job in order to create the necessary resources."
-msgstr ""
+msgstr "ПерезапуÑтити це Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб Ñтворити необхідні реÑурÑи."
msgid "Retry update"
-msgstr ""
+msgstr "Повторити Ñпробу оновленнÑ"
msgid "Retry verification"
msgstr "Повторити перевірку"
@@ -11485,7 +13487,7 @@ msgid "Revoked impersonation token %{token_name}!"
msgstr "Відкликано токен Ñ–Ð¼Ñ–Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %{token_name}!"
msgid "Revoked personal access token %{personal_access_token_name}!"
-msgstr ""
+msgstr "Відкликано перÑональний токен доÑтупу %{personal_access_token_name}!"
msgid "RightSidebar|adding a"
msgstr "додаваннÑ"
@@ -11496,6 +13498,9 @@ msgstr "видаленнÑ"
msgid "Roadmap"
msgstr "План-графік"
+msgid "Rollback"
+msgstr "Відкотити"
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "ЗапуÑтити CI/CD конвеєри Ð´Ð»Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ–Ñ… репозиторіїв"
@@ -11556,8 +13561,8 @@ msgstr "Сторінка Runner'ів"
msgid "Runners page."
msgstr "Сторінка Runner'ів."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "Ви викориÑтали уÑÑ– виділенні хвилини Ð´Ð»Ñ Ð²Ð°ÑˆÐ¸Ñ… Ñпільних runner'ів."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr "Ви викориÑтали %{quotaUsed} із ваших %{quotaLimit} хвилин Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð² загальних runner'ів."
msgid "Running"
msgstr "ВиконуєтьÑÑ"
@@ -11590,7 +13595,7 @@ msgid "SSH host keys"
msgstr "SSH-ключі хоÑта"
msgid "SSH keys allow you to establish a secure connection between your computer and GitLab."
-msgstr ""
+msgstr "Ключі SSH дозволÑÑŽÑ‚ÑŒ вÑтановити захищене Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ вашим комп’ютером та GitLab."
msgid "SSH public key"
msgstr "Відкритий SSH-ключ"
@@ -11631,6 +13636,9 @@ msgstr "Зберегти розклад конвеєра"
msgid "Save variables"
msgstr "Зберегти змінні"
+msgid "Saving"
+msgstr "ЗбереженнÑ"
+
msgid "Saving project."
msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ."
@@ -11640,6 +13648,9 @@ msgstr "Розклад нового конвеєра"
msgid "Scheduled"
msgstr "Заплановано"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "Розклади"
@@ -11650,26 +13661,41 @@ msgid "Scheduling Pipelines"
msgstr "ÐŸÐ»Ð°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð²"
msgid "Scope"
-msgstr "ОбÑÑг"
+msgstr "ОблаÑÑ‚ÑŒ дії"
msgid "Scope not supported with disabled 'users_search' feature!"
-msgstr ""
+msgstr "ОблаÑÑ‚ÑŒ пошуку не доÑтупна при вимкненій функціональноÑÑ‚Ñ– пошуку кориÑтувача!"
msgid "Scoped issue boards"
-msgstr "Тематичні дошки задач"
+msgstr "Дошки задач із обмеженою облаÑÑ‚ÑŽ видимоÑÑ‚Ñ–"
msgid "Scoped label"
-msgstr ""
+msgstr "Селективна мітка"
+
+msgid "Scopes"
+msgstr "ОблаÑÑ‚ÑŒ дії"
+
+msgid "Scroll down"
+msgstr "Прокрутити донизу"
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr "Прокрутіть вниз до <strong>Google Code Project Hosting</strong> і увімкніть перемикач праворуч."
+msgid "Scroll left"
+msgstr "Прокрутити ліворуч"
+
+msgid "Scroll right"
+msgstr "Прокрутити праворуч"
+
msgid "Scroll to bottom"
msgstr "Прокрутити вниз"
msgid "Scroll to top"
msgstr "Прокрутити вгору"
+msgid "Scroll up"
+msgstr "Прокрутити вгору"
+
msgid "Search"
msgstr "Пошук"
@@ -11686,7 +13712,7 @@ msgid "Search files"
msgstr "Пошук файлів"
msgid "Search for a LDAP group"
-msgstr ""
+msgstr "Пошук LDAP-групи"
msgid "Search for a group"
msgstr "Шукати групу"
@@ -11757,9 +13783,98 @@ msgstr "в цій групі"
msgid "SearchAutocomplete|in this project"
msgstr "в цьому проекті"
+msgid "SearchCodeResults|in"
+msgstr "в"
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr "із %{link_to_project}"
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr "Показано %{count} %{scope} Ð´Ð»Ñ \"%{term}\""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr "Показано %{from} - %{to} з %{count} %{scope} Ð´Ð»Ñ \"%{term}\""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] "коментар"
+msgstr[1] "коментарі"
+msgstr[2] "коментарів"
+msgstr[3] "коментарів"
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] "коміт"
+msgstr[1] "коміти"
+msgstr[2] "комітів"
+msgstr[3] "комітів"
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] "задача"
+msgstr[1] "задачі"
+msgstr[2] "задач"
+msgstr[3] "задач"
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] "запит на злиттÑ"
+msgstr[1] "запити на злиттÑ"
+msgstr[2] "запитів на злиттÑ"
+msgstr[3] "запитів на злиттÑ"
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] "етап"
+msgstr[1] "етапи"
+msgstr[2] "етапів"
+msgstr[3] "етапів"
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] "проект"
+msgstr[1] "проекти"
+msgstr[2] "проектів"
+msgstr[3] "проектів"
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] "Ñніпет"
+msgstr[1] "Ñніпети"
+msgstr[2] "Ñніпетів"
+msgstr[3] "Ñніпетів"
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] "кориÑтувач"
+msgstr[1] "кориÑтувачі"
+msgstr[2] "кориÑтувачів"
+msgstr[3] "кориÑтувачів"
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
msgid "Seats currently in use"
msgstr "МіÑцÑ, Ñкі зараз викориÑтовуютьÑÑ"
@@ -11772,6 +13887,9 @@ msgstr "Секрет"
msgid "Security"
msgstr "Безпека"
+msgid "Security & Compliance"
+msgstr "Безпека та відповідніÑÑ‚ÑŒ"
+
msgid "Security Dashboard"
msgstr "Панель безпеки"
@@ -11787,23 +13905,47 @@ msgstr "Помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑпиÑку вразлÐ
msgid "Security Dashboard|Issue Created"
msgstr "Створено задачу"
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr "Коментар додано до '%{vulnerabilityName}'"
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr "Коментар видалено в \"%{vulnerabilityName}\""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr "Коментар відредаговано в \"%{vulnerabilityName}\""
+
msgid "Security Reports|Create issue"
msgstr "Створити задачу"
msgid "Security Reports|Dismiss vulnerability"
msgstr "Відхилити вразливіÑÑ‚ÑŒ"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr "Відхилено '%{vulnerabilityName}'"
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð°ÑˆÐ¾Ñ— панелі"
msgid "Security Reports|More info"
msgstr "Детальніше"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr "Ой, щоÑÑŒ пішло не так."
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr "Помилка під Ñ‡Ð°Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ñ."
+
msgid "Security Reports|There was an error creating the issue."
msgstr "Помилка при Ñтворенні задачі."
msgid "Security Reports|There was an error creating the merge request."
-msgstr ""
+msgstr "Помилка при Ñтворенні запиту на злиттÑ."
+
+msgid "Security Reports|There was an error deleting the comment."
+msgstr "Під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ñ ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°."
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr "Помилка при відхиленні вразливоÑÑ‚Ñ–."
@@ -11832,6 +13974,9 @@ msgstr "Ðа панелі безпеки відображаєтьÑÑ Ð¾Ñтан
msgid "SecurityDashboard|Confidence"
msgstr "ВпевненіÑÑ‚ÑŒ"
+msgid "SecurityDashboard|Hide dismissed"
+msgstr "Приховати відхилені"
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr "Моніторинг вразливоÑтей у вашому коді"
@@ -11859,20 +14004,29 @@ msgstr "Вибрати"
msgid "Select Archive Format"
msgstr "Виберіть формат архіву"
+msgid "Select GitLab project to link with your Slack team"
+msgstr "Виберіть проект GitLab Ð´Ð»Ñ Ð·Ð²â€™ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð· вашою командою Slack"
+
msgid "Select Page"
msgstr "Вибрати Ñторінку"
msgid "Select a file from the left sidebar to begin editing. Afterwards, you'll be able to commit your changes."
-msgstr ""
+msgstr "Ð”Ð»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ виберіть його в лівій бічній панелі. Пізніше ви будете мати можливіÑÑ‚ÑŒ закомітити Ñвої зміни."
msgid "Select a group to invite"
msgstr "Виберіть групу Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ"
+msgid "Select a label"
+msgstr "Вибрати мітку"
+
msgid "Select a namespace to fork the project"
msgstr "Виберіть проÑÑ‚Ñ–Ñ€ імен Ð´Ð»Ñ Ñ„Ð¾Ñ€ÐºÑƒ проекту"
msgid "Select a new namespace"
-msgstr ""
+msgstr "Вибрати новий проÑÑ‚Ñ–Ñ€ імен"
+
+msgid "Select a project"
+msgstr "Вибрати проект"
msgid "Select a project to read Insights configuration file"
msgstr "Вибрати проект, щоб прочитати файл конфігурації ÑтатиÑтики (Insights)"
@@ -11886,6 +14040,9 @@ msgstr "Вибрати шаблон репозиторію"
msgid "Select a timezone"
msgstr "Вибрати чаÑовий поÑÑ"
+msgid "Select all"
+msgstr "Вибрати вÑе"
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "Виберіть Ñ–Ñнуючий клаÑтер Kubernetes або Ñтворіть новий"
@@ -11893,10 +14050,19 @@ msgid "Select branch/tag"
msgstr "Виберіть гілку або тег"
msgid "Select group or project"
-msgstr ""
+msgstr "Вибрати групу чи проект"
-msgid "Select members to invite"
-msgstr "Виберіть учаÑників Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ"
+msgid "Select labels"
+msgstr "Вибрати мітки"
+
+msgid "Select merge moment"
+msgstr "Вибрати момент злиттÑ"
+
+msgid "Select milestone"
+msgstr "Вибрати етап"
+
+msgid "Select private project"
+msgstr "Вибрати приватний проект"
msgid "Select project"
msgstr "Вибрати проект"
@@ -11907,6 +14073,9 @@ msgstr "Вибрати проект та зону Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ типу Ð
msgid "Select project to choose zone"
msgstr "Вибрати проект Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ зони"
+msgid "Select projects"
+msgstr "Вибрати проекти"
+
msgid "Select projects you want to import."
msgstr "Виберіть проекти, Ñкі ви хочете імпортувати."
@@ -11922,17 +14091,23 @@ msgstr "Виберіть гілку по замовчанню Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾
msgid "Select the custom project template source group."
msgstr "Вкажіть групу, де розміщені влаÑні шаблони проектів."
+msgid "Select timeframe"
+msgstr "Вибрати проміжок чаÑу"
+
+msgid "Select user"
+msgstr "Вибрати кориÑтувача"
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr "Вибрані рівні не можуть викориÑтовуватиÑÑ Ð½ÐµÐ°Ð´Ð¼Ñ–Ð½Ñ–Ñтраторами Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿, проектів або Ñніпетів. Якщо публічний рівень обмежений, профілі кориÑтувачів відображаютьÑÑ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÑ”Ñтрованих кориÑтувачів."
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "При виборі кориÑтувача Gitlab поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° нього буде додане до опиÑу задачі та коментарів (напр. \"<a href=\"#\"> @johnsmith</a>\"). Також це призведе до аÑоціації та/або Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ð¸Ñ… задач та коментарів на вибраного кориÑтувача."
-msgid "Send an email notification to Developers."
-msgstr "Відправити ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ°Ð¼Ð¸ електронною поштою."
+msgid "Send a separate email notification to Developers."
+msgstr "ВідіÑлати окреме ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾ електронній пошті Розробникам."
msgid "Send confirmation email"
-msgstr ""
+msgstr "ВідіÑлати Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾ÑŽ поштою"
msgid "Send email"
msgstr "ÐадіÑлати лиÑта"
@@ -11955,8 +14130,14 @@ msgstr "ВідділÑйте теми комами."
msgid "September"
msgstr "вереÑень"
+msgid "SeriesFinalConjunction|and"
+msgstr "Ñ–"
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr "Зберігати Ñтатичні об’єкти репозиторіїв (напр. архіви, бінарні дані Ñ– Ñ‚. д.) у зовнішному Ñховищі (напр. CDN)."
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
-msgstr ""
+msgstr "Сервер підтримує лише груповий API. Будь лаÑка, оновіть ваш клієнт Git LFS до верÑÑ–Ñ— 1.0.1 або вище."
msgid "Server version"
msgstr "ВерÑÑ–Ñ Ñервера"
@@ -11982,6 +14163,9 @@ msgstr "Pod'и Kubernetes"
msgid "ServerlessDetails|More information"
msgstr "Детальніше"
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr "Ðаразі жоден pod не завантажений."
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr "КількіÑÑ‚ÑŒ pod'ів Kubernetes у викориÑтанні на оÑнові необхідноÑÑ‚Ñ– протÑгом періоду чаÑу."
@@ -12012,9 +14196,21 @@ msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про Serverless"
msgid "Serverless|No functions available"
msgstr "Ðемає доÑтупних функцій"
+msgid "Serverless|The deploy job has not finished."
+msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾ розгортанню не завершилоÑÑ."
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr "Функції, Ñкі вказані у файлі %{startTag}serverless.yml%{endTag} не відповідають проÑтору імен вашого клаÑтеру."
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr "Ðаразі немає даних про функції від Knative. Це може бути викликано різними причинами, зокрема:"
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr "Ваш файл %{startTag}.gitlab-ci.yml%{endTag} не Ñконфігурований правильно."
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr "Ваш репозиторій не міÑтить відповідного файлу %{startTag}serverless.yml%{endTag}."
+
msgid "Service"
msgstr "СервіÑ"
@@ -12033,6 +14229,9 @@ msgstr "ТриваліÑÑ‚ÑŒ ÑеÑÑ–Ñ— (у хвилинах)"
msgid "Session expiration, projects limit and attachment size."
msgstr "Термін дії ÑеÑÑ–Ñ—, проектні ліміти та розміри вкладень."
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr "Ð’Ñтановити шаблон за замовчуваннÑм Ð´Ð»Ñ Ð¾Ð¿Ð¸Ñу задач."
@@ -12066,11 +14265,23 @@ msgstr "Ð’Ñтановити новий пароль"
msgid "Set notification email for abuse reports."
msgstr "Ðалаштувати ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾ електронній пошті Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ про зловживаннÑ."
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "Ð’Ñтановіть вимоги Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ кориÑтувачів. Увімкніть обов’Ñзкову двофакторну автентифікацію."
+msgid "Set target branch"
+msgstr "Ð’Ñтановити цільову гілку"
+
+msgid "Set target branch to %{branch_name}."
+msgstr "Ð’Ñтановити цільову гілку %{branch_name}."
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
-msgstr ""
+msgstr "Задайте Ñтандартний Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð°Ñ€Ñ‚ÐµÑ„Ð°ÐºÑ‚Ñ–Ð² кожного із завдань. 0 означає необмежений. Стандартною одиницею Ð²Ð¸Ð¼Ñ–Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ Ñ” Ñекунда (sec), але ви можете вибрати й іншу. Ðаприклад: <code>4 mins 2 sec</code>, <code>2h42min</code>."
+
+msgid "Set the due date to %{due_date}."
+msgstr "Ð’Ñтановити заплановану дату Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %{due_date}."
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -12079,20 +14290,26 @@ msgid "Set the maximum file size for each job's artifacts"
msgstr "Ð’Ñтановити макÑимальний розмір файлу Ð´Ð»Ñ Ð°Ñ€Ñ‚ÐµÑ„Ð°ÐºÑ‚Ñ–Ð² кожного завданнÑ"
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
+msgstr "Ð’Ñтановити макÑимальну кількіÑÑ‚ÑŒ хвилин конвеєрів, Ñку можуть викориÑтовувати загальні runner'и ÑкоїÑÑŒ групи за міÑÑць. 0 означає без обмежень."
+
+msgid "Set the milestone to %{milestone_reference}."
msgstr ""
msgid "Set time estimate"
msgstr "Ð’Ñтановити запланований чаÑ"
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ CI/CD"
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
msgid "Set up a %{type} Runner manually"
msgstr "Ðалаштуйте %{type} runner вручну"
-msgid "Set up a specific Runner automatically"
-msgstr "Ðвтоматично налаштувати Ñпецифічний runner"
-
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr "Ðалаштуйте твердженнÑ/атрибути (email, ім'Ñ, прізвище) Ñ– NameID відповідно до %{docsLinkStart} документації %{icon}%{docsLinkEnd}"
@@ -12108,6 +14325,9 @@ msgstr "Ðалаштуйте Ñвій проект, щоб автоматичнÐ
msgid "Set weight"
msgstr "Ð’Ñтановити вагу"
+msgid "Set weight to %{weight}."
+msgstr "Ð’Ñтановити вагу %{weight}."
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "вÑтановити пароль"
@@ -12135,17 +14355,23 @@ msgstr "Вибачте, нам не вдалоÑÑ Ð²Ñтановити ваш Ñ
msgid "SetStatusModal|What's your status?"
msgstr "Який ваш ÑтатуÑ?"
-msgid "Sets the due date to %{due_date}."
+msgid "Sets %{epic_ref} as parent epic."
msgstr ""
+msgid "Sets target branch to %{branch_name}."
+msgstr "Ð’Ñтановлює цільову гілку %{branch_name}."
+
+msgid "Sets the due date to %{due_date}."
+msgstr "Ð’Ñтановлює заплановану дату Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %{due_date}."
+
msgid "Sets the milestone to %{milestone_reference}."
-msgstr ""
+msgstr "Ð’Ñтановлює етап %{milestone_reference}."
msgid "Sets time estimate to %{time_estimate}."
-msgstr ""
+msgstr "Ð’Ñтановлює запланований Ñ‡Ð°Ñ %{time_estimate}."
msgid "Sets weight to %{weight}."
-msgstr ""
+msgstr "Ð’Ñтановлювє вагу рівну %{weight}."
msgid "Settings"
msgstr "ÐалаштуваннÑ"
@@ -12163,7 +14389,7 @@ msgid "Shared projects"
msgstr "Спільні проекти"
msgid "Shared runners help link"
-msgstr ""
+msgstr "Допомога по загальним runner'ам"
msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
msgstr "При обнуленні хвилин конвеєрів Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проÑтору імен, кількіÑÑ‚ÑŒ вже викориÑтаних хвилин буде дорівнювати 0."
@@ -12187,14 +14413,20 @@ msgid "Show archived projects"
msgstr "Показати архівовані проекти"
msgid "Show archived projects only"
-msgstr ""
+msgstr "Показувати лише архівовані проекти"
msgid "Show command"
msgstr "Показати команду"
+msgid "Show comments"
+msgstr "Показати коментарі"
+
msgid "Show comments only"
msgstr "Показати тільки коментарі"
+msgid "Show commit description"
+msgstr "Показати Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñƒ"
+
msgid "Show complete raw log"
msgstr "Показати повний неформатований журнал"
@@ -12220,6 +14452,18 @@ msgstr[1] "Показано %d події"
msgstr[2] "Показано %d подій"
msgstr[3] "Показано %d подій"
+msgid "Showing Latest Version"
+msgstr "ПоказуєтьÑÑ Ð¾ÑÑ‚Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ"
+
+msgid "Showing Version #%{versionNumber}"
+msgstr "ПоказуєтьÑÑ Ð²ÐµÑ€ÑÑ–Ñ #%{versionNumber}"
+
+msgid "Showing all issues"
+msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… задач"
+
+msgid "Showing last %{size} of log -"
+msgstr "ПоказуютьÑÑ Ð¾Ñтанні %{size} журналу -"
+
msgid "Side-by-side"
msgstr "Поруч"
@@ -12250,6 +14494,9 @@ msgstr "Увійти за допомогою Ñмарт-карти"
msgid "Sign in via 2FA code"
msgstr "Увійти за допомогою коду двофакторної автентифікції"
+msgid "Sign in with Google"
+msgstr "Увійти за допомогою Google"
+
msgid "Sign in with Single Sign-On"
msgstr "Увійти за допомогою єдиного входу"
@@ -12262,6 +14509,9 @@ msgstr "Вийти"
msgid "Sign out & Register"
msgstr "Вийти Ñ– зареєÑтруватиÑÑ"
+msgid "Sign up"
+msgstr "ЗареєеÑтруватиÑÑ"
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ð¹ÑˆÐ»Ð° уÑпішно! Будь лаÑка, підтвердіть Ñвою адреÑу електронної пошти Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ."
@@ -12271,14 +14521,20 @@ msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ"
msgid "Sign-up restrictions"
msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ€ÐµÑ”Ñтрації"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr "Ð†Ð¼â€™Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ довге (макÑимум Ñкладає %{max_length} Ñимволів)."
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr "Прізвище занадто довге (макÑимум Ñкладає %{max_length} Ñимволів)."
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
-msgstr ""
+msgstr "Ð†Ð¼â€™Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ довге (макÑимум Ñкладає %{max_length} Ñимволів)."
msgid "SignUp|Username is too long (maximum is %{max_length} characters)."
-msgstr ""
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача занадто довге (макÑимум Ñкладає %{max_length} Ñимволів)."
msgid "Signed in"
-msgstr ""
+msgstr "Вхід виконано"
msgid "Signed in with %{authentication} authentication"
msgstr "Вхід відбувÑÑ Ð·Ð° допомогою %{authentication}"
@@ -12293,7 +14549,10 @@ msgid "Similar issues"
msgstr "Подібні задачі"
msgid "Single or combined queries"
-msgstr ""
+msgstr "Одиночні або комбіновані запити"
+
+msgid "Site ID"
+msgstr "ID Ñайту"
msgid "Size"
msgstr "Розмір"
@@ -12313,6 +14572,21 @@ msgstr "заÑтоÑунок Slack"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr "Slack Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ‚ÑŒ вам взаємодіÑти з GitLab через чат за домогою команд зі Ñлешем ( / )"
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr "2. Ð’Ñтавте <strong>Токен</strong> у поле нижче"
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr "3. Ð’Ñтановіть прапорець в пункті <strong>Ðктивний</strong>, натиÑніть <strong>Зберегти зміни</strong> та починайте викориÑтовувати GitLab в Slack!"
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr "Вкажіть Ñлово, Ñке найбільше підходить Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— команди."
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr "ПереглÑньте ÑпиÑок уÑÑ–Ñ… доÑтупних команд у Slack піÑÐ»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ÑервіÑу шлÑхом вводу"
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr "Цей ÑÐµÑ€Ð²Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ” кориÑтувачам виконувати загальні операції в цьому проекті шлÑхом вводу команд із коÑою риÑкою (/) в Slack."
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "Повільніше, але гарантує, що робоча облаÑÑ‚ÑŒ проекту чиÑтою, оÑкільки воно клонує Ñховище з Ð½ÑƒÐ»Ñ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ завданнÑ"
@@ -12346,9 +14620,15 @@ msgstr "Ðемає Ñніпетів Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ."
msgid "SnippetsEmptyState|They can be either public or private."
msgstr "Вони можуть бути публічними або приватними."
+msgid "Snowplow"
+msgstr "Snowplow"
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr "ХтоÑÑŒ відредагував цю %{issueType} одночаÑно з вами. ÐžÐ¿Ð¸Ñ Ð±ÑƒÐ»Ð¾ оновлено, тому вам знову треба внеÑти Ñвої зміни."
@@ -12377,7 +14657,10 @@ msgid "Something went wrong when toggling the button"
msgstr "Помилка при перемиканні кнопки"
msgid "Something went wrong while adding your award. Please try again."
-msgstr ""
+msgstr "Проблема при додаванні вашої нагороди. Будь лаÑка, Ñпробуйте знову."
+
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr "Проблема при додаванні вашого коментарÑ. Будь лаÑка, Ñпробуйте знову."
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr "Помилка при заÑтоÑуванні пропозиції. Будь лаÑка, Ñпробуйте знову."
@@ -12388,6 +14671,12 @@ msgstr "Помилка при закритті %{issuable}. Будь лаÑка,
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr "Помилка при видаленні гілки-джерела. Будь лаÑка, Ñпробуйте знову."
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr "Проблема при видаленні вашої нотатки. Будь лаÑка, Ñпробуйте знову."
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr "Проблема при редагуванні вашого коментарÑ. Будь лаÑка, Ñпробуйте знову."
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "Помилка при отриманні ÑпиÑку %{listType}"
@@ -12398,10 +14687,10 @@ msgid "Something went wrong while fetching group member contributions"
msgstr "Помилка при завантаженні внеÑків учаÑників групи"
msgid "Something went wrong while fetching latest comments."
-msgstr ""
+msgstr "Помилка при отриманні оÑтанніх коментарів."
msgid "Something went wrong while fetching related merge requests."
-msgstr ""
+msgstr "Помилка при отриманні пов’Ñзаних запитів на злиттÑ."
msgid "Something went wrong while fetching the environments for this merge request. Please try again."
msgstr "Проблема при отриманні Ñередовищ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ запиту на злиттÑ. Будь лаÑка, Ñпробуйте знову."
@@ -12421,17 +14710,20 @@ msgstr "Помилка при повторному відкритті %{issuable
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "Помилка при завершенні обговореннÑ. Будь лаÑка, Ñпробуйте пізніше."
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr "Проблема при зупинці Ñередовища. Будь лаÑка, Ñпробуйте знову."
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "Проблема, не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ %{project} до панелі керуваннÑ"
msgid "Something went wrong, unable to get projects"
-msgstr ""
+msgstr "Помилка, не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ проекти"
msgid "Something went wrong, unable to remove project"
msgstr "Проблема, не вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ проект"
msgid "Something went wrong, unable to search projects"
-msgstr ""
+msgstr "Помилка, не вдалоÑÑ Ð·Ð´Ñ–Ð¹Ð½Ñтити пошук проектів"
msgid "Something went wrong. Please try again."
msgstr "ЩоÑÑŒ пішло не так. Будь лаÑка Ñпробуйте ще раз."
@@ -12472,6 +14764,9 @@ msgstr "Заплановано пізніше"
msgid "SortOptions|Due soon"
msgstr "Заплановано незабаром"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "Пріоритет мітки"
@@ -12541,6 +14836,9 @@ msgstr "ÐайÑтаріша оÑÑ‚Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ–ÑÑ‚ÑŒ"
msgid "SortOptions|Oldest sign in"
msgstr "Залогінений найраніше"
+msgid "SortOptions|Oldest starred"
+msgstr "Ðайдавніше в обраних"
+
msgid "SortOptions|Oldest updated"
msgstr "Оновлений найраніше"
@@ -12556,6 +14854,12 @@ msgstr "Ðайновіша оÑÑ‚Ð°Ð½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ–ÑÑ‚ÑŒ"
msgid "SortOptions|Recent sign in"
msgstr "Ðещодавно зареєÑтровані"
+msgid "SortOptions|Recently starred"
+msgstr "Ðещодавно в обраних"
+
+msgid "SortOptions|Size"
+msgstr "Розмір"
+
msgid "SortOptions|Sort direction"
msgstr "ÐапрÑмок ÑортуваннÑ"
@@ -12634,9 +14938,12 @@ msgstr "ПроіндекÑовано %{type}"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "Позначте мітку, щоб зробити Ñ—Ñ— пріоритетною. ПеретÑгуйте пріоритетні мітки Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸ Ñ—Ñ… відноÑного пріоритету."
-msgid "Star toggle failed. Try again later."
+msgid "Star labels to start sorting by priority"
msgstr ""
+msgid "Star toggle failed. Try again later."
+msgstr "ДодаваннÑ/Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñƒ обрані неуÑпішне. Спробуйте знову пізніше."
+
msgid "StarProject|Star"
msgstr "В обрані"
@@ -12650,19 +14957,19 @@ msgid "Starred projects"
msgstr "Обрані проекти"
msgid "StarredProjectsEmptyState|Visit a project page and press on a star icon. Then, you can find the project on this page."
-msgstr ""
+msgstr "Перейдіть до Ñторінки проекту та натиÑніть іконку із зірочкою. Тоді цей проект з’ÑвитьÑÑ Ð½Ð° цій Ñторінці."
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
-msgstr ""
+msgstr "Ви не маєте проектів доданих у обране."
+
+msgid "Starrers"
+msgstr "Додали в обране"
msgid "Stars"
msgstr "У обраному"
msgid "Start GitLab Ultimate trial"
-msgstr ""
-
-msgid "Start Indexing"
-msgstr "Почати індекÑуваннÑ"
+msgstr "Перейти на пробну верÑÑ–ÑŽ GitLab Ultimate"
msgid "Start Web Terminal"
msgstr "ЗапуÑтити Веб-Термінал"
@@ -12670,8 +14977,14 @@ msgstr "ЗапуÑтити Веб-Термінал"
msgid "Start a %{new_merge_request} with these changes"
msgstr "Почати %{new_merge_request} з цими змінами"
+msgid "Start a Free Trial"
+msgstr "Розпочати пробну верÑÑ–ÑŽ"
+
+msgid "Start a new discussion..."
+msgstr "Розпочати нове обговореннÑ..."
+
msgid "Start a new merge request"
-msgstr ""
+msgstr "Відкрити новий запит на злиттÑ"
msgid "Start a review"
msgstr "Розпочати перевірку"
@@ -12679,30 +14992,39 @@ msgstr "Розпочати перевірку"
msgid "Start and due date"
msgstr "Дата початку та завершеннÑ"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr "Розпочніть із вибору групи Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб побачити на що ваша команда витрачає чаÑ. Далі ви зможете переходити на рівень проектів."
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr "Розпочніть із вибору групи Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ що переглÑдати Ñ—Ñ— запити на злиттÑ. Далі ви зможете накладати фільтри за проектами, мітками, етапами та авторами."
+
msgid "Start cleanup"
msgstr "Почати очищеннÑ"
msgid "Start date"
msgstr "Дата початку"
-msgid "Start discussion"
-msgstr "Розпочати диÑкуÑÑ–ÑŽ"
-
-msgid "Start discussion & close %{noteable_name}"
-msgstr "Розпочати Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð° закрити %{noteable_name}"
-
-msgid "Start discussion & reopen %{noteable_name}"
-msgstr "Розпочати Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ– повторно відкрити %{noteable_name}"
-
msgid "Start merge train"
-msgstr ""
+msgstr "Створити ланцюжок змін"
msgid "Start merge train when pipeline succeeds"
-msgstr ""
+msgstr "Створити ланцюжок змін піÑÐ»Ñ ÑƒÑпішного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð°"
+
+msgid "Start search"
+msgstr "Розпочати пошук"
msgid "Start the Runner!"
msgstr "ЗапуÑÑ‚Ñ–Ñ‚ÑŒ Runner!"
+msgid "Start thread"
+msgstr "Розпочати обговореннÑ"
+
+msgid "Start thread & close %{noteable_name}"
+msgstr "Розпочати Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð° закрити %{noteable_name}"
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr "Розпочати Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð° повторно відкрити %{noteable_name}"
+
msgid "Start your trial"
msgstr "Розпочати пробний період"
@@ -12713,7 +15035,7 @@ msgid "Started %{startsIn}"
msgstr "Запущено %{startsIn}"
msgid "Started asynchronous removal of all repository check states."
-msgstr ""
+msgstr "ÐÑинхронне Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… Ñтанів перевірок репозиторіїв запущено."
msgid "Starting..."
msgstr "ЗапуÑк..."
@@ -12727,12 +15049,18 @@ msgstr "ПочинаєтьÑÑ Ð¾ (за Грінвічем)"
msgid "State your message to activate"
msgstr "Залиште Ñвоє Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ—"
+msgid "Statistics"
+msgstr "СтатиÑтика"
+
msgid "Status"
msgstr "СтатуÑ"
msgid "Status:"
msgstr "СтатуÑ:"
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr "Будьте в курÑÑ– продуктивноÑÑ‚Ñ– та Ñтану вашого Ñередовища шлÑхом Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Prometheus Ð´Ð»Ñ Ð¼Ð¾Ð½Ñ–Ñ‚Ð¾Ñ€Ð¸Ð½Ð³Ñƒ ваших розгортань."
+
msgid "Stop Terminal"
msgstr "Зупинити термінал"
@@ -12740,7 +15068,7 @@ msgid "Stop environment"
msgstr "Зупинити Ñередовище"
msgid "Stop impersonation"
-msgstr "Зупинити уоÑобленнÑ"
+msgstr "Зупинити імітуваннÑ"
msgid "Stop this environment"
msgstr "Зупинити це Ñередовище"
@@ -12763,6 +15091,18 @@ msgstr "Сховище:"
msgid "StorageSize|Unknown"
msgstr "Ðевідомо"
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr "Дозволено Ñтворювати підгрупи"
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr "Дозволено Ñтворювати підгрупи"
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr "Керівники"
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr "ВлаÑники"
+
msgid "Subgroups"
msgstr "Підгрупи"
@@ -12770,7 +15110,7 @@ msgid "Subgroups and projects"
msgstr "Підгрупи та проекти"
msgid "Subkeys"
-msgstr ""
+msgstr "Підключі"
msgid "Submit as spam"
msgstr "Позначити Ñк Ñпам"
@@ -12778,6 +15118,9 @@ msgstr "Позначити Ñк Ñпам"
msgid "Submit feedback"
msgstr "ÐадіÑлати відгук"
+msgid "Submit issue"
+msgstr "Відправити задачу"
+
msgid "Submit review"
msgstr "ÐадіÑлати перевірку"
@@ -12802,6 +15145,12 @@ msgstr "ПідпиÑатиÑÑ Ð½Ð° календар"
msgid "Subscribed"
msgstr "Ви підпиÑані"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr "ПідпиÑано на %{quick_action_target}."
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr "ПідпиÑує на %{quick_action_target}."
+
msgid "Subscription"
msgstr "ПідпиÑка"
@@ -12814,9 +15163,6 @@ msgstr "Безкоштовно"
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr "GitLab дозволÑÑ” вам викориÑтовувати вашу підпиÑку, навіть Ñкщо ви перевищили кількіÑÑ‚ÑŒ придбаних міÑць. Вам треба буде заплатити за ці міÑÑ†Ñ Ð¿Ñ€Ð¸ Ñ—Ñ— поновленні."
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr "GitLab.com %{planName} %{suffix}"
-
msgid "SubscriptionTable|Last invoice"
msgstr "ОÑтанній рахунок-фактура"
@@ -12877,8 +15223,11 @@ msgstr "ВикориÑтаннÑ"
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr "Облік викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑÑ Ð¾Ð´Ð¸Ð½ раз на день о 12:00."
+msgid "Subtracted"
+msgstr "ВіднÑто"
+
msgid "Subtracts"
-msgstr ""
+msgstr "ВидалÑÑ”"
msgid "Successfully blocked"
msgstr "УÑпішно заблоковано"
@@ -12902,7 +15251,7 @@ msgid "Successfully unlocked"
msgstr "УÑпішно розблоковано"
msgid "Suggest code changes which are immediately applied. Try it out!"
-msgstr ""
+msgstr "Запропонуйте зміни в коді, Ñкі будуть негайно заÑтоÑовані. Спробуте!"
msgid "Suggested change"
msgstr "Пропонована зміна"
@@ -12914,16 +15263,16 @@ msgid "SuggestedColors|Dark grayish cyan"
msgstr "Темно-Ñірувато-блакитний"
msgid "SuggestedColors|Dark moderate blue"
-msgstr ""
+msgstr "Темно-ÑинÑ"
msgid "SuggestedColors|Dark moderate orange"
-msgstr ""
+msgstr "Темний помірно-оранжевий"
msgid "SuggestedColors|Dark moderate pink"
-msgstr ""
+msgstr "Темний помірно-рожевий"
msgid "SuggestedColors|Dark moderate violet"
-msgstr ""
+msgstr "Темний помірно-фіолетовий"
msgid "SuggestedColors|Feijoa"
msgstr "Фейхоа"
@@ -12932,16 +15281,16 @@ msgid "SuggestedColors|Lime green"
msgstr "Зелений лайм"
msgid "SuggestedColors|Moderate blue"
-msgstr ""
+msgstr "Помірно-Ñиній"
msgid "SuggestedColors|Pure red"
msgstr "ЧиÑтий червоний"
msgid "SuggestedColors|Slightly desaturated blue"
-msgstr ""
+msgstr "Злегка ненаÑичений Ñиній"
msgid "SuggestedColors|Slightly desaturated green"
-msgstr ""
+msgstr "Злегка ненаÑичений зелений"
msgid "SuggestedColors|Soft orange"
msgstr "Ðœ'Ñкий помаранчевий"
@@ -12950,34 +15299,40 @@ msgid "SuggestedColors|Soft red"
msgstr "Ðœ'Ñкий червоний"
msgid "SuggestedColors|Strong pink"
-msgstr ""
+msgstr "ÐаÑичений рожевий"
msgid "SuggestedColors|Strong red"
-msgstr ""
+msgstr "ÐаÑичений червоний"
msgid "SuggestedColors|Strong yellow"
-msgstr ""
+msgstr "ÐаÑичений жовтий"
msgid "SuggestedColors|UA blue"
-msgstr ""
+msgstr "Синій UA"
msgid "SuggestedColors|Very dark desaturated blue"
-msgstr ""
+msgstr "Дуже темний ненаÑичений Ñиній"
msgid "SuggestedColors|Very dark lime green"
-msgstr ""
+msgstr "Дуже темний лаймово-Ñиній"
msgid "SuggestedColors|Very pale orange"
-msgstr ""
+msgstr "Дуже блідий оранжевий"
+
+msgid "Suggestions:"
+msgstr "Пропозиції:"
msgid "Sunday"
msgstr "ÐеділÑ"
+msgid "Support"
+msgstr "Підтримка"
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
-msgstr ""
+msgstr "Підтримку кориÑтувацьких Ñертифікатів вимкнено. ЗвернітьÑÑ Ð´Ð¾ адмініÑтратора Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб Ñ—Ñ… увімкнути."
msgid "Support page URL"
-msgstr ""
+msgstr "URL-адреÑа Ñторінки підтримки"
msgid "Switch branch/tag"
msgstr "Перейти в гілку/тег"
@@ -12986,7 +15341,7 @@ msgid "Switch to GitLab Next"
msgstr ""
msgid "Switch to the source to copy it to the clipboard"
-msgstr ""
+msgstr "Перейти до джерела Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб Ñкопіювати його в буфер обміну"
msgid "Sync information"
msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ Ñинхронізацію"
@@ -13004,7 +15359,7 @@ msgid "System Info"
msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ ÑиÑтему"
msgid "System default (%{default})"
-msgstr ""
+msgstr "СиÑтемне Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° замовчуваннÑм (%{default})"
msgid "System header and footer"
msgstr "Заголовок Ñ– футер ÑиÑтеми"
@@ -13019,7 +15374,7 @@ msgid "System metrics (Kubernetes)"
msgstr "СиÑтемні метрики (Kubernetes)"
msgid "Table of Contents"
-msgstr ""
+msgstr "ЗміÑÑ‚"
msgid "Tag"
msgstr "Тег"
@@ -13028,7 +15383,13 @@ msgid "Tag list:"
msgstr "СпиÑок тегів:"
msgid "Tag this commit."
-msgstr ""
+msgstr "Додати тег до цього коміту."
+
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr "До цього коміту додано тег %{tag_name} з \"%{message}\"."
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr "До цього коміту додано тег %{tag_name}."
msgid "Tags"
msgstr "Теги"
@@ -13037,10 +15398,10 @@ msgid "Tags feed"
msgstr "Канал тегів"
msgid "Tags this commit to %{tag_name} with \"%{message}\"."
-msgstr ""
+msgstr "Додає тег %{tag_name} до цього коміту з повідомленнÑм \"%{message}\"."
msgid "Tags this commit to %{tag_name}."
-msgstr ""
+msgstr "Додає тег %{tag_name} до цього коміту."
msgid "Tags:"
msgstr "Теги:"
@@ -13139,7 +15500,7 @@ msgid "Terminal for environment"
msgstr "Термінал Ð´Ð»Ñ Ñередовища"
msgid "Terminal sync service is running"
-msgstr ""
+msgstr "Ð¡ÐµÑ€Ð²Ñ–Ñ Ñинхронізації терміналу запущено"
msgid "Terms of Service Agreement and Privacy Policy"
msgstr "Угода про Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ñлуг Ñ– політика конфіденційноÑÑ‚Ñ–"
@@ -13157,7 +15518,7 @@ msgid "Test failed."
msgstr "ТеÑÑ‚ не пройдено."
msgid "Test settings and save changes"
-msgstr ""
+msgstr "ПротеÑтувати налаштуванні та зберегти зміни"
msgid "TestHooks|Ensure one of your projects has merge requests."
msgstr "ПереконайтеÑÑ, що один із ваших проектів має запити на злиттÑ."
@@ -13183,14 +15544,17 @@ msgstr "ПереконайтеÑÑ, що проект має нотатки."
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr "ПереконайтеÑÑ, що вікі увімкнено Ñ– вона має Ñторінки."
-msgid "Thank you for your report. A GitLab administrator will look into it shortly."
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
msgstr ""
+msgid "Thank you for your report. A GitLab administrator will look into it shortly."
+msgstr "ДÑкуємо за ваш звіт. ÐдмініÑтратор GitLab розглÑне це Ð¿Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ð°Ð¹Ð±Ð»Ð¸Ð¶Ñ‡Ð¸Ð¼ чаÑом."
+
msgid "Thanks! Don't show me this again"
msgstr "ДÑкую! Більше не показувати це повідомленнÑ"
msgid "The \"%{group_path}\" group allows you to sign in with your Single Sign-On Account"
-msgstr ""
+msgstr "Група \"%{group_path}\" дозволÑÑ” увійти за допомогою облікового запиÑу єдиного входу"
msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
@@ -13199,6 +15563,9 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
+msgid "The API path was not specified."
+msgstr "ШлÑÑ… API не вказано."
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "Розширений глобальний пошук в GitLab — це потужний інÑтрумент Ñкий заощаджує ваш чаÑ. ЗаміÑÑ‚ÑŒ Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ Ñ– витрати чаÑу, ви можете шукати код інших команд, Ñкий може допомогти у вашому проекті."
@@ -13221,10 +15588,7 @@ msgid "The amount of seconds after which a request to get a secondary node statu
msgstr ""
msgid "The branch for this project has no active pipeline configuration."
-msgstr ""
-
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
+msgstr "Ð¦Ñ Ð³Ñ–Ð»ÐºÐ° Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту не має активної конфігурації конвеєра."
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "ПідÑвітка Ñимволів дозволÑÑ” обмежувати заголовок до %{titleLength} Ñимволів Ñ– обмежувати довжину Ñ€Ñдків тіла %{bodyLength} Ñимволами Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб вони залишаютьÑÑ Ñ‡Ð¸Ñ‚Ð°Ð±ÐµÐ»ÑŒÐ½Ð¸Ð¼Ð¸ в git."
@@ -13239,19 +15603,25 @@ msgid "The connection will time out after %{timeout}. For repositories that take
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ припинено піÑÐ»Ñ %{timeout}. Ð”Ð»Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ—Ð², Ñким потрібно більше чаÑу, викориÑтовуйте комбінацію clone/push."
msgid "The content of this page is not encoded in UTF-8. Edits can only be made via the Git repository."
-msgstr ""
+msgstr "ВміÑÑ‚ цієї Ñторінки не закодований в UTF-8. Зміни можна вноÑити лише через репозиторій Git."
msgid "The dependency list details information about the components used within your project."
-msgstr ""
+msgstr "СпиÑок залежноÑтей міÑтить детальну інформацію про компоненти, що викориÑтовуютьÑÑ Ñƒ вашому проекті."
msgid "The deployment of this job to %{environmentLink} did not succeed."
msgstr "Ð Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð½Ð° %{environmentLink} не уÑпішне."
msgid "The directory has been successfully created."
-msgstr ""
+msgstr "Каталог уÑпішно Ñтворено."
+
+msgid "The domain you entered is misformatted."
+msgstr "Введений вами домен неправильно відформатований."
+
+msgid "The domain you entered is not allowed."
+msgstr "Введений вами домен Ñ” недопуÑтимим."
msgid "The entered user map is not a valid JSON user map."
-msgstr ""
+msgstr "Введена мапа кориÑтувачів не Ñ” корректною мапою кориÑтувачів JSON."
msgid "The file has been successfully created."
msgstr "Файл уÑпішно Ñтворено."
@@ -13272,13 +15642,13 @@ msgid "The global settings require you to enable Two-Factor Authentication for y
msgstr "Глобальні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°ÑŽÑ‚ÑŒ, щоб ви увімкнули двофакторну автентифікацію Ð´Ð»Ñ Ñвого облікового запиÑу."
msgid "The group and any internal projects can be viewed by any logged in user."
-msgstr ""
+msgstr "Ð¦Ñ Ð³Ñ€ÑƒÐ¿Ð° та вÑÑ– Ñ—Ñ— внутрішні проекти можуть бути переглÑнуті будь Ñким кориÑтувачем, що здійÑнив вхід у ÑиÑтему."
msgid "The group and any public projects can be viewed without any authentication."
msgstr "Ð¦Ñ Ð³Ñ€ÑƒÐ¿Ð° та будь-Ñкі проекти можуть переглÑдатиÑÑ Ð±ÐµÐ· жодної автентифікації."
msgid "The group and its projects can only be viewed by members."
-msgstr ""
+msgstr "Ð¦Ñ Ð³Ñ€ÑƒÐ¿Ð° та Ñ—Ñ— проекти видимі тільки Ð´Ð»Ñ ÑƒÑ‡Ð°Ñників."
msgid "The group settings for %{group_links} require you to enable Two-Factor Authentication for your account. You can %{leave_group_links}."
msgstr "Групові Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %{group_links} вимагають, щоб ви увімкнули двофакторну автентифікацію Ð´Ð»Ñ Ñвого облікового запиÑу. Ви можете %{leave_group_links}."
@@ -13286,32 +15656,29 @@ msgstr "Групові Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %{group_links} вимаг
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "Імпорт буде припинено піÑÐ»Ñ %{timeout}. Ð”Ð»Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ—Ð², Ñким потрібно більше чаÑу, викориÑтовуйте комбінацію clone/push."
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
-msgstr ""
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð½Ðµ може буте прийнÑте."
msgid "The invitation could not be declined."
-msgstr ""
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð½Ðµ може бути відхилене."
msgid "The invitation has already been accepted."
-msgstr ""
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ ÑƒÐ¶Ðµ було прийнÑто."
msgid "The invitation was successfully resent."
-msgstr ""
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ ÑƒÑпішно виÑлано повторно."
msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ Ð—Ð°Ð´Ð°Ñ‡Ð° показує, Ñкільки чаÑу потрібно від ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ– до Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ—Ñ— до ÑкогоÑÑŒ етапу, або Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ– на дошку. Почніть Ñтворювати задачі, щоб переглÑдати дані Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— Ñтадії."
msgid "The license was removed. GitLab has fallen back on the previous license."
-msgstr ""
+msgstr "Ліцензію було видалено. GitLab викориÑтовує попередню ліцензію."
msgid "The license was removed. GitLab now no longer has a valid license."
-msgstr ""
+msgstr "Ліцензію видалено. Ðаразі GitLab не моє жодною актуальної ліцензії."
msgid "The license was successfully uploaded and is now active. You can see the details below."
-msgstr ""
+msgstr "Ліцензію уÑпішно завантажено Ñ– вона активна. Подробиці можна переглÑнути нижче."
msgid "The maximum file size allowed is %{size}."
msgstr "МакÑимальний розмір файлу — %{size}."
@@ -13320,16 +15687,16 @@ msgid "The maximum file size allowed is 200KB."
msgstr "МакÑимальний розмір файлу — 200 Кб."
msgid "The merge conflicts for this merge request cannot be resolved through GitLab. Please try to resolve them locally."
-msgstr ""
+msgstr "Конфлікти у цьому запитті на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½Ðµ можуть бути вирішені через GitLab. Будь лаÑка, Ñпробуйте зробити це локально."
msgid "The merge conflicts for this merge request have already been resolved."
-msgstr ""
+msgstr "Конфлікти у цьому запиті на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ ÑƒÐ¶Ðµ вирішено."
msgid "The merge conflicts for this merge request have already been resolved. Please return to the merge request."
-msgstr ""
+msgstr "Конфлікти у цьому запиті на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ ÑƒÐ¶Ðµ вирішено. Будь лаÑка, повертайтеÑÑ Ð´Ð¾ запиту на злиттÑ."
msgid "The name %{entryName} is already taken in this directory."
-msgstr ""
+msgstr "Ð†Ð¼â€™Ñ %{entryName} уже зайнÑто в цьому каталозі."
msgid "The number of changes to be fetched from GitLab when cloning a repository. This can speed up Pipelines execution. Keep empty or set to 0 to disable shallow clone by default and make GitLab CI fetch all branches and tags each time."
msgstr ""
@@ -13362,7 +15729,7 @@ msgid "The project can be accessed by any logged in user."
msgstr "ДоÑтуп до проекту можливий будь-Ñким зареєÑтрованим кориÑтувачем."
msgid "The project can be accessed by any user who is logged in."
-msgstr ""
+msgstr "ДоÑтуп до цього проекту Ñ” в будь-Ñкого кориÑтувача, Ñкий увійшов у ÑиÑтему."
msgid "The project can be accessed by anyone, regardless of authentication."
msgstr "ДоÑтуп до проекту Ñ” в будь-кого, незалежно від автентифікації."
@@ -13371,7 +15738,7 @@ msgid "The project can be accessed without any authentication."
msgstr "ДоÑтуп до проекту можливий без будь-Ñкої перевірки автентичноÑÑ‚Ñ–."
msgid "The project is accessible only by members of the project. Access must be granted explicitly to each user."
-msgstr ""
+msgstr "Цей проект доÑтупний тільки Ð´Ð»Ñ Ð¹Ð¾Ð³Ð¾ учаÑників. ДоÑтуп може бути надано тільки безпоÑередньо кожному кориÑтувачу."
msgid "The project is still being deleted. Please try again later."
msgstr "Проект вÑе ще видалÑєтьÑÑ. Будь лаÑка, Ñпробуйте знову."
@@ -13389,7 +15756,7 @@ msgid "The remote mirror took to long to complete."
msgstr ""
msgid "The remote repository is being updated..."
-msgstr ""
+msgstr "Віддалений репозиторій в процеÑÑ– оновленнÑ..."
msgid "The repository for this project does not exist."
msgstr "Репозиторій Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту не Ñ–Ñнує."
@@ -13403,8 +15770,8 @@ msgstr "Репозиторій оновлюєтьÑÑ..."
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "Репозиторій має бути доÑтупним через <code>http://</code>, <code>https://</code> або <code>git://</code>."
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "Репозиторій має бути доÑтупним через <code>http://</code>, <code>https: //</code>, <code>ssh: //</code> Ñ– <code>git: //</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ ÐŸÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° показує Ñ‡Ð°Ñ Ð²Ñ–Ð´ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ про об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ його виконаннÑ. Дані будуть автоматично додані піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ запиту на злиттÑ."
@@ -13413,7 +15780,7 @@ msgid "The roadmap shows the progress of your epics along a timeline"
msgstr "План-графік показує Ñтан ваших епіків у чаÑÑ–"
msgid "The schedule time must be in the future!"
-msgstr ""
+msgstr "Запланований Ñ‡Ð°Ñ Ð¼Ð°Ñ” бути в майбутньому!"
msgid "The snippet can be accessed without any authentication."
msgstr "ДоÑтуп до Ñніпета можливий без будь-Ñкої автентифікації."
@@ -13430,8 +15797,8 @@ msgstr "Цей Ñніпет видимий Ð´Ð»Ñ Ð±ÑƒÐ´ÑŒ-Ñкого зареє
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ Staging показує Ñ‡Ð°Ñ Ð¼Ñ–Ð¶ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° розгортаннÑм коду у production. Дані автоматично додаютьÑÑ Ð¿Ñ–ÑÐ»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñƒ production вперше."
-msgid "The tabs below will be removed in a future version"
-msgstr "Вкладки нижче будуть видалені в майбутній верÑÑ–Ñ—"
+msgid "The target element is missing."
+msgstr "Цільовий елемент відÑутній."
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ Ð¢ÐµÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ” чаÑ, Ñкий GitLab CI витрачає Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ конвеєра Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ запиту злиттÑ. Дані будуть автоматично додані піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ конвеєра."
@@ -13439,8 +15806,8 @@ msgstr "Ð¡Ñ‚Ð°Ð´Ñ–Ñ Ð¢ÐµÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ” чаÑ, Ñкий GitLab
msgid "The time taken by each data entry gathered by that stage."
msgstr "ЧаÑ, витрачений на кожен елемент, зібраний на цій Ñтадії."
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
-msgstr "Унікальний ідентифікатор Ð´Ð»Ñ Geo вузла. Має задовольнÑти \"geo_node_name\", Ñкщо воно вÑтановлено в gitlab.rb, інакше має задовольнÑти \"external_url\""
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
+msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
msgstr "Ð§Ð°Ñ Ð´Ñ–Ñ— Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñплине через %{number_of_minutes} хвилин. Ð”Ð»Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ… репозиторіїв викориÑтовуйте комбінацію clone/push."
@@ -13455,7 +15822,7 @@ msgid "The user is being deleted."
msgstr "КориÑтувач видалÑєтьÑÑ."
msgid "The user map has been saved. Continue by selecting the projects you want to import."
-msgstr ""
+msgstr "Мапу кориÑтувачів збережено. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð±ÐµÑ€Ñ–Ñ‚ÑŒ проекти Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ."
msgid "The user map is a JSON document mapping the Google Code users that participated on your projects to the way their email addresses and usernames will be imported into GitLab. You can change this by changing the value on the right hand side of <code>:</code>. Be sure to preserve the surrounding double quotes, other punctuation and the email address or username on the left hand side."
msgstr "Мапа кориÑтувачів — це JSON-документ, Ñкий задає Ñк адреÑи електронної пошти та імена кориÑтувачів Google Code, що приймали учаÑÑ‚ÑŒ у ваших проектах будуть імпортовані у GitLab. Ви можете змінити його шлÑхом зміни значень, що ÑтоÑÑ‚ÑŒ Ñправа від <code>:</code>. Ðе видалÑйте лапки та інші знаки пунктуації, а також не змінюйте адреÑи електронної пошти чи імена кориÑтувачів зліва."
@@ -13463,23 +15830,23 @@ msgstr "Мапа кориÑтувачів — це JSON-документ, Ñки
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "Мапа кориÑтувачів — це правила Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів FogBugz, Ñкі приймали учаÑÑ‚ÑŒ у ваших проектах до Gitlab (зокрема Ñ—Ñ… імен та Ð°Ð´Ñ€ÐµÑ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти). Ви можете вноÑити зміни шлÑхом Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– нижче."
-msgid "The user-facing URL of the Geo node."
-msgstr "URL-адреÑа вузла Geo, видима Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача."
+msgid "The user-facing URL of the Geo node"
+msgstr "URL-адреÑа вузла Geo, видима Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr "Середнє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð² Ñ€Ñдку. Приклад: між 3, 5, 9, Ñередніми 5, між 3, 5, 7, 8, Ñередніми (5 + 7) / 2 = 6."
msgid "There are no GPG keys associated with this account."
-msgstr ""
+msgstr "Ðемає GPG ключів, пов’Ñзаних із цим обліковим запиÑом."
msgid "There are no GPG keys with access to your account."
-msgstr ""
+msgstr "Ðемає GPG ключів, що мають доÑтуп до вашого облікового запиÑу."
msgid "There are no SSH keys associated with this account."
-msgstr ""
+msgstr "Ðемає SSH ключів, пов’Ñзаних із цим обліковим запиÑом."
msgid "There are no SSH keys with access to your account."
-msgstr ""
+msgstr "Ðемає SSH ключів, що мають доÑтуп до вашого облікового запиÑу."
msgid "There are no archived projects yet"
msgstr "Ðаразі немає жодного архівованого проекту"
@@ -13499,9 +15866,15 @@ msgstr "ВлаÑні шаблони проектів не налаштовані
msgid "There are no issues to show"
msgstr "Ðемає задач Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ"
+msgid "There are no issues to show."
+msgstr "Ðемає задач Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ."
+
msgid "There are no labels yet"
msgstr "Тут ще немає міток"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr "Відкритих задач немає"
@@ -13509,7 +15882,7 @@ msgid "There are no open merge requests"
msgstr "Відкритих запитів на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½ÐµÐ¼Ð°Ñ”"
msgid "There are no packages yet"
-msgstr ""
+msgstr "Ðаразі пакети відÑутні"
msgid "There are no projects shared with this group yet"
msgstr "Ще немає Ñпільних проектів з цією групою"
@@ -13523,29 +15896,35 @@ msgstr "Ðемає неіндекÑованих змін"
msgid "There is already a repository with that name on disk"
msgstr "Ðа диÑку вже Ñ–Ñнує репозиторій за таким ім’Ñм"
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr "Проблема Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ вашого приÑтрою."
msgid "There was a problem sending the confirmation email"
-msgstr ""
+msgstr "Помилка при відÑиланні Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾ електронній пошті"
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
+msgid "There was an error adding a To Do."
msgstr "Помилка при додаванні нагадуваннÑ."
msgid "There was an error creating the issue"
-msgstr ""
+msgstr "Помилка при Ñтворенні задачі"
-msgid "There was an error deleting the todo."
-msgstr "Помилка при видаленні задачі."
+msgid "There was an error deleting the To Do."
+msgstr "Помилка при видаленні нагадуваннÑ."
msgid "There was an error fetching configuration for charts"
+msgstr "Помилка при отриманні налаштувань діаграм"
+
+msgid "There was an error fetching the form data"
msgstr ""
msgid "There was an error gathering the chart data"
-msgstr ""
+msgstr "Помилка при отриманні даних Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ñ€Ð°Ð¼Ð¸"
msgid "There was an error loading users activity calendar."
msgstr "Помилка при завантаженні ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚Ñ– кориÑтувачів."
@@ -13554,13 +15933,13 @@ msgid "There was an error removing the e-mail."
msgstr "Помилка при видаленні адреÑи електронної пошти."
msgid "There was an error resetting group pipeline minutes."
-msgstr ""
+msgstr "Помилка при Ñкиданні групових хвилин Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð²."
msgid "There was an error resetting user pipeline minutes."
-msgstr ""
+msgstr "Помилка при Ñкиданні хвилин Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð² кориÑтувача."
msgid "There was an error saving your changes."
-msgstr ""
+msgstr "Помилка при збереженні ваших змін."
msgid "There was an error saving your notification settings."
msgstr "Помилка при збереженні ваших налаштувань Ñповіщень."
@@ -13568,6 +15947,9 @@ msgstr "Помилка при збереженні ваших налаштува
msgid "There was an error subscribing to this label."
msgstr "Помилка при підпиÑці на цю мітку."
+msgid "There was an error trying to validate your query"
+msgstr "Помилка при перевірці вашого запиту"
+
msgid "There was an error when reseting email token."
msgstr "Помилка при Ñкиданні токена електронної пошти."
@@ -13578,10 +15960,10 @@ msgid "There was an error when unsubscribing from this label."
msgstr "Помилка при відпиÑці від цієї мітки."
msgid "There was an error while fetching cycle analytics data."
-msgstr ""
+msgstr "Помилка при отриманні даних аналізу циклу."
msgid "There was an error with the reCAPTCHA. Please solve the reCAPTCHA again."
-msgstr ""
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° з reCAPTCHA. Будь лаÑка, пройдіть reCAPTCHA знову."
msgid "These existing issues have a similar title. It might be better to comment there instead of creating another similar issue."
msgstr "Ці Ñ–Ñнуючі проблеми мають подібні заголовки. Можливо, краще додати коментар до однієї з них заміÑÑ‚ÑŒ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ—."
@@ -13605,10 +15987,10 @@ msgid "This GitLab instance does not provide any shared Runners yet. Instance ad
msgstr "Цей інÑÑ‚Ð°Ð½Ñ GitLab ще немає загальних Runner'ів. ÐдмініÑтратори можуть Ñ—Ñ… зареєÑтрувати у Ñпеціальному розділі конфігурації."
msgid "This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention."
-msgstr ""
+msgstr "Ð¦Ñ Ð´Ñ–Ñ Ð¼Ð¾Ð¶Ðµ призвеÑти до втрати даних. Щоб уникнути випадкових дій, проÑимо Ð²Ð°Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚Ð¸ Ñвій намір."
msgid "This also resolves the discussion"
-msgstr ""
+msgstr "Також ще завершує обговореннÑ"
msgid "This application was created by %{link_to_owner}."
msgstr "Цей заÑтоÑунок було Ñтворено %{link_to_owner}."
@@ -13617,7 +15999,7 @@ msgid "This application will be able to:"
msgstr "Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° зможе:"
msgid "This block is self-referential"
-msgstr ""
+msgstr "Цей блок поÑилаєтьÑÑ Ñам на Ñебе"
msgid "This board's scope is reduced"
msgstr "ВидиміÑÑ‚ÑŒ цієї дошки обмежена"
@@ -13625,14 +16007,14 @@ msgstr "ВидиміÑÑ‚ÑŒ цієї дошки обмежена"
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "Ð¦Ñ Ð³Ñ–Ð»ÐºÐ° була змінена піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾ моменту, коли ви почали Ñ—Ñ— редагувати. Ви хотіли б Ñтворити нову?"
-msgid "This certificate is automatically managed by Let's Encrypt"
-msgstr ""
-
msgid "This chart could not be displayed"
-msgstr ""
+msgstr "Ð¦Ñ Ð´Ñ–Ð°Ð³Ñ€Ð°Ð¼Ð° не може бути відображена"
+
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
+msgstr "Цей коментар було змінено піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾, Ñк ви його почали редагувати. Будь лаÑка, переглÑньте %{startTag}оновлений коментар%{endTag}, щоб переконатиÑÑ Ð² тому, що інформацію не було втрачено."
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
-msgstr ""
+msgstr "Цей коміт Ñ” чаÑтиною запиту на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ %{link_to_merge_request}. Створені тут коментарі будуть в контекÑÑ‚Ñ– цього запитну на злиттÑ."
msgid "This commit was signed with a <strong>verified</strong> signature and the committer email is verified to belong to the same user."
msgstr "Цей коміт підпиÑано <strong>перевіреним</strong> підпиÑом Ñ– адреÑа електронної пошти комітера гарантовано належить тому Ñамому кориÑтувачу."
@@ -13656,16 +16038,16 @@ msgid "This date is before the start date, so this epic won't appear in the road
msgstr "Ð¦Ñ Ð´Ð°Ñ‚Ð° Ñ” більш ранньою, ніж дата початку, тому цей епік не відображатиметьÑÑ Ð² плані-графіку."
msgid "This device has already been registered with us."
-msgstr ""
+msgstr "Цей приÑтрій уже зареєÑтровано на нашій Ñтороні."
msgid "This device has not been registered with us."
-msgstr ""
+msgstr "Цей приÑтрій ще не було зареєÑтровано на нашій Ñтороні."
msgid "This diff is collapsed."
msgstr "Це порівнÑÐ½Ð½Ñ Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ð¾."
msgid "This diff was suppressed by a .gitattributes entry."
-msgstr ""
+msgstr "Ð¦Ñ Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ð±ÑƒÐ»Ð° прихована через Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð² .gitattributes."
msgid "This directory"
msgstr "Цей каталог"
@@ -13674,6 +16056,12 @@ msgid "This domain is not verified. You will need to verify ownership before acc
msgstr "Цей домен не підтверджено. Щоб увімкнути доÑтуп, потрібно підтвердити право влаÑноÑÑ‚Ñ–."
msgid "This environment has no deployments yet."
+msgstr "Це Ñередовище ще не має розгортань."
+
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr "Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð·Ð°Ñ€Ð°Ð· в розробці. Будь лаÑка, вимкіть перемикач функції \"job_log_json\""
+
+msgid "This feature requires local storage to be enabled"
msgstr ""
msgid "This field is required."
@@ -13685,11 +16073,14 @@ msgstr "Ð¦Ñ Ð³Ñ€ÑƒÐ¿Ð°"
msgid "This group does not provide any group Runners yet."
msgstr "Ð¦Ñ Ð³Ñ€ÑƒÐ¿Ð° ще не має жодного групового Runner’а."
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
-msgstr ""
+msgstr "Це — кориÑтувач \"Ghost User\", Ñкий було Ñтворено Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб він зібрав уÑÑ– задачі Ñтворені кориÑтувачами, що були видалені. Його неможливо видалити."
+
+msgid "This is a Work in Progress"
+msgstr "Це Ñ” \"Ð’ процеÑÑ–\""
msgid "This is a confidential issue."
msgstr "Це конфіденційна задача."
@@ -13701,7 +16092,7 @@ msgid "This is a list of devices that have logged into your account. Revoke any
msgstr "Це ÑпиÑок приÑтроїв, з котрих заходили в Ваш аккаунт. Завершіть будь-Ñкі підозрілі ÑеанÑи."
msgid "This is a security log of important events involving your account."
-msgstr ""
+msgstr "Це журнал безпеки, Ñкий міÑтить уÑÑ– важливі події пов’Ñзані із вашим обліковим запиÑом."
msgid "This is the author's first Merge Request to this project."
msgstr "Це перший запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð²Ñ–Ð´ цього автора Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ проекту."
@@ -13712,15 +16103,15 @@ msgstr "Це макÑимальна кількіÑÑ‚ÑŒ кориÑтувачів,
msgid "This is your current session"
msgstr "Це ваш поточний ÑеанÑ"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr "Ð¦Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Ñ” %{confidentialLinkStart}конфіденційною%{linkEnd} та %{lockedLinkStart}заблокованою%{linkEnd}."
+
msgid "This issue is confidential"
msgstr "Ð¦Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° Ñ” конфіденційною"
msgid "This issue is locked."
msgstr "Ð¦Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° заблокована."
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "Це Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ð°Ð¿ÑƒÑкаєтьÑÑ ÐºÐ¾Ñ€Ð¸Ñтувачем. ЧаÑто вони викориÑтовуютьÑÑ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñƒ на production"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "Це Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ від попередніх, Ñкі повинні завершитиÑÑ ÑƒÑпішно Ð´Ð»Ñ Ð¹Ð¾Ð³Ð¾ запуÑку"
@@ -13761,7 +16152,7 @@ msgid "This job is performing tasks that must complete before it can start"
msgstr ""
msgid "This job is preparing to start"
-msgstr ""
+msgstr "Це Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð³Ð¾Ñ‚ÑƒÑ”Ñ‚ÑŒÑÑ Ð´Ð¾ запуÑку"
msgid "This job is stuck because you don't have any active runners online with any of these tags assigned to them:"
msgstr "Це Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ðµ, тому що немає жодних runner'ів з будь Ñким із цих тегів:"
@@ -13775,9 +16166,15 @@ msgstr "Це Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ñ” оÑтаннім розгортаннÑм на
msgid "This job requires a manual action"
msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” ручних дій"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ запущено автоматично піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ‚Ð°Ð¹Ð¼ÐµÑ€Ð°. Зазвичай вони викориÑтовуютьÑÑ Ð´Ð»Ñ Ñ–Ð½ÐºÑ€ÐµÐ¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð² production Ñередовище. У разі ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð²Ð¾Ð½Ð¾ перетворитьÑÑ Ð½Ð° ручну операцію."
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "Це означає, що ви не можете відправлÑти код, поки не Ñтворите порожній репозиторій або не імпортуєте Ñ–Ñнуючий."
@@ -13785,7 +16182,7 @@ msgid "This merge request is locked."
msgstr "Цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾."
msgid "This namespace has already been taken! Please choose another one."
-msgstr ""
+msgstr "Такий проÑÑ‚Ñ–Ñ€ імен вже викориÑтовуєтьÑÑ! Будь лаÑка, виберіть інший."
msgid "This option is disabled as you don't have write permissions for the current branch"
msgstr "Цей параметр вимкнено, тому що у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволу на Ð·Ð°Ð¿Ð¸Ñ Ñƒ поточну гілку"
@@ -13796,9 +16193,6 @@ msgstr "Ð¦Ñ Ñторінка недоÑтупна, тому що ви не мо
msgid "This page will be removed in a future release."
msgstr "Цю Ñторінку буде видалено у майбутній верÑÑ–Ñ—."
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr "Цей конвеєр викориÑтовує попередньо визначену конфігурацію CI / CD, увімкнену за допомогою %{strongStart}Auto DevOps.%{strongEnd}"
@@ -13821,7 +16215,7 @@ msgid "This repository"
msgstr "Цей репозиторій"
msgid "This repository is currently empty. A new Auto DevOps pipeline will be created after a new file has been pushed to a branch."
-msgstr ""
+msgstr "Ðаразі цей репозиторій Ñ” порожнім. Ðовий конвеєр Auto DevOps буде Ñтворено піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾, Ñк новий файл буде відправлено в ÑкуÑÑŒ гілку."
msgid "This runner will only run on pipelines triggered on protected branches"
msgstr "Цей runner буде виконуватиÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ на тих конвеєрах, Ñкі Ñпрацьовують на захищених гілках"
@@ -13829,6 +16223,9 @@ msgstr "Цей runner буде виконуватиÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ на тих
msgid "This setting can be overridden in each project."
msgstr "Цей параметр можна перевизначати Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ проекту."
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr "Цей параметр оновить назву хоÑта, Ñка викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— приватних email-Ð°Ð´Ñ€ÐµÑ Ð² підпиÑах комітів. %{learn_more}"
@@ -13838,6 +16235,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr "Цей кориÑтувач не може бути розблокований вручну в GitLab"
+msgid "This user has no active %{type} Tokens."
+msgstr "У кориÑтувача немає активних %{type} токенів."
+
msgid "This user has no identities"
msgstr "Цей кориÑтувач не має ідентифікацій"
@@ -13851,7 +16251,7 @@ msgid "This will redirect you to an external sign in page."
msgstr "Це перенаправить Ð²Ð°Ñ Ð½Ð° зовнішню Ñторінку входу."
msgid "This will remove the fork relationship to source project"
-msgstr ""
+msgstr "Це видалить зв’Ñзок форку із вихідним проектом"
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr "Ці Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти автоматично Ñтануть обговореннÑми задач, Ñкі відображатимутьÑÑ Ñ‚ÑƒÑ‚ (причому коментарі Ñтануть чаÑтиною перепиÑки)."
@@ -13859,6 +16259,9 @@ msgstr "Ці Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти авто
msgid "Thursday"
msgstr "Четвер"
+msgid "Time"
+msgstr "ЧаÑ"
+
msgid "Time based: Yes"
msgstr "Ðа оÑнові чаÑу: Так"
@@ -13877,6 +16280,15 @@ msgstr "Ð§Ð°Ñ Ð¼Ñ–Ð¶ ÑтвореннÑм запиту Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ– його
msgid "Time estimate"
msgstr "Запланований чаÑ"
+msgid "Time from first comment to last commit"
+msgstr "Ð§Ð°Ñ Ð¼Ñ–Ð¶ першим коментарем та оÑтаннім комітом"
+
+msgid "Time from first commit until first comment"
+msgstr "Ð§Ð°Ñ Ð²Ñ–Ð´ першого коміту до першого коментарÑ"
+
+msgid "Time from last commit to merge"
+msgstr "Ð§Ð°Ñ Ð²Ñ–Ð´ оÑтаннього коміту до злиттÑ"
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "Ð§Ð°Ñ Ð² Ñекундах, протÑгом Ñкого GitLab чекатиме відповіді від зовнішньої Ñлужби. Якщо вона не відповіÑÑ‚ÑŒ вчаÑно, доÑтуп буде заборонений."
@@ -13886,6 +16298,9 @@ msgstr "ЗалишилоÑÑ Ñ‡Ð°Ñу"
msgid "Time spent"
msgstr "Витрачено чаÑу"
+msgid "Time to merge"
+msgstr "Ð§Ð°Ñ Ð´Ð¾ злиттÑ"
+
msgid "Time tracking"
msgstr "ВідÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу"
@@ -13895,12 +16310,21 @@ msgstr "Ð§Ð°Ñ Ð´Ð¾ першого запиту на злиттÑ"
msgid "TimeTrackingEstimated|Est"
msgstr "Запланований чаÑ"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr "%{startTag}Витрачено: %{endTag}%{timeSpentHumanReadable}"
+
msgid "TimeTracking|Estimated:"
msgstr "Запланований чаÑ:"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr "ЗакінчитьÑÑ Ð´Ð¾ %{timeRemainingHumanReadable}"
+
msgid "TimeTracking|Spent"
msgstr "Витрачено"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr "ЗалишилоÑÑ Ñ‡Ð°Ñу: %{timeRemainingHumanReadable}"
+
msgid "Timeago|%s days ago"
msgstr "%s днів тому"
@@ -14024,6 +16448,9 @@ msgstr "щойно"
msgid "Timeago|right now"
msgstr "зараз"
+msgid "Timeframe"
+msgstr "Проміжок чаÑу"
+
msgid "Timeout"
msgstr "Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ"
@@ -14059,6 +16486,9 @@ msgstr "Заголовки та імена файлів"
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr "Виконати"
+
msgid "To GitLab"
msgstr "Ð’ GitLab"
@@ -14069,11 +16499,14 @@ msgid "To add an SSH key you need to %{generate_link_start}generate one%{link_en
msgstr "Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб додати ключ SSH вам необхідно %{generate_link_start}згенерувати його%{link_end} або викориÑтати %{existing_link_start}Ñ–Ñнуючий ключ%{link_end}."
msgid "To add the entry manually, provide the following details to the application on your phone."
-msgstr ""
+msgstr "Щоб додати Ð·Ð°Ð¿Ð¸Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ, надайте наÑтупні відомоÑÑ‚Ñ– заÑтоÑунку у вашому телефоні."
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "Ð”Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ—Ð² з GitHub, ви можете викориÑтовувати %{personal_access_token_link}. Коли ви Ñтворюватимете ваш перÑональний токен доÑтупу, вам потрібно буде вибрати облаÑÑ‚ÑŒ дії <code>repo</code>, щоб ми могли відобразити ÑпиÑок ваших публічних та приватних репозиторіїв, доÑтупних Ð´Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ."
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr "Ð”Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ—Ð² з GitHub, ви Ñпочатку повинні дозволити Gitlab доÑтуп до ÑпиÑку ваших репозиторіїв на GitHub."
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "Ð”Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ—Ð² з GitHub, ви Ñпочатку повинні дозволити Gitlab доÑтуп до ÑпиÑку ваших репозиторіїв на GitHub:"
@@ -14101,20 +16534,14 @@ msgstr "Щоб допомогти покращити GitLab та його зру
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "Щоб допомогти покращити GitLab, ми хотіли б періодично збирати інформацію про викориÑтаннÑ. Це можна змінити в будь-Ñкий Ñ‡Ð°Ñ Ð² %{settings_link_start}ÐалаштуваннÑÑ…%{link_end}. %{info_link_start}Додаткова інформаціÑ%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "Ð”Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ—Ð² з GitHub, ви можете викориÑтовувати %{personal_access_token_link}. Коли ви Ñтворюватимете ваш перÑональний токен доÑтупу, вам потрібно буде вибрати облаÑÑ‚ÑŒ дії <code>repo</code>, щоб ми могли відобразити ÑпиÑок ваших публічних та приватних репозиторіїв, доÑтупних Ð´Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ."
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "Ð”Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ репозиторіїв з GitHub, ви Ñпочатку повинні дозволити Gitlab доÑтуп до ÑпиÑку ваших репозиторіїв на GitHub:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "Ð”Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ SVN-репозиторію, переглÑньте %{svn_link}."
msgid "To keep this project going, create a new issue"
-msgstr ""
+msgstr "Ð”Ð»Ñ Ñ€Ð¾Ð·Ð²Ð¸Ñ‚ÐºÑƒ цього проекту Ñтворіть нову задачу"
msgid "To keep this project going, create a new merge request"
-msgstr ""
+msgstr "Ð”Ð»Ñ Ñ€Ð¾Ð·Ð²Ð¸Ñ‚ÐºÑƒ цього проекту Ñтворіть новий запит на злиттÑ"
msgid "To link Sentry to GitLab, enter your Sentry URL and Auth Token."
msgstr "Ð”Ð»Ñ Ñ–Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ— Sentry із Gitlab введіть URL-адреÑу Sentry та токен автентифікації."
@@ -14131,12 +16558,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr "Ð”Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð´Ñ–Ñ— відображаютьÑÑ Ð»Ð¸ÑˆÐµ <strong>%{display_size} із %{real_size}</strong> файлів."
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr "Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½ÑŒ від ÑервіÑів Prometheus, Ñкі Ñконфігуровані вручну, додайте наÑтупний URL та ключ авторизаціх до вашого конфігураційного файлу веб-хуків Prometheus. ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про %{linkStart}ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€ÑƒÐ²Ð°Ð½Ñ Prometheus%{linkEnd} Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб відправлÑти Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ–Ð· Gitlab."
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr "Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ щоб бачити уÑÑ– перÑональні токени доÑтупe кориÑтувача вам необхідно Ñпочатку розпочати його імітуваннÑ."
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "Щоб налаштувати автентифікацію SAML Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— групи через провайдера ідентифікації такої Ñк Azure, Okta, Onelogin, Ping Identity або вашого влаÑного поÑтачальника SAML 2.0:"
+msgid "To set up this service:"
+msgstr "Ðалаштувати цей ÑервіÑ:"
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -14161,17 +16606,17 @@ msgstr "Щоб розширити пошук, змініть або видалі
msgid "To widen your search, change or remove filters."
msgstr "Щоб розширити пошук, змініть або видаліть фільтри."
-msgid "Today"
-msgstr "Сьогодні"
-
-msgid "Todo"
-msgstr "ÐагдуваннÑ"
+msgid "To-Do List"
+msgstr "СпиÑок нагадувань"
-msgid "Todo was successfully marked as done."
+msgid "To-do item successfully marked as done."
msgstr "ÐÐ°Ð³Ð°Ð´ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑпішно позначене Ñк виконане."
-msgid "Todos"
-msgstr "ÐагадуваннÑ"
+msgid "Today"
+msgstr "Сьогодні"
+
+msgid "Toggle Markdown preview"
+msgstr "Увімкнути чи вимкнути попередній переглÑд Markdown"
msgid "Toggle Sidebar"
msgstr "Перемикач бічної панелі"
@@ -14179,6 +16624,9 @@ msgstr "Перемикач бічної панелі"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr "Згорнути/розгорнути"
+
msgid "Toggle comments for this file"
msgstr "Увімкнути або вимкнути коментарі Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу"
@@ -14188,9 +16636,6 @@ msgstr "Перемкнути Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ–Ð²"
msgid "Toggle commit list"
msgstr "Відкрити або закрити ÑпиÑок комітів"
-msgid "Toggle discussion"
-msgstr "Перемикач диÑкуÑÑ–Ñ—"
-
msgid "Toggle emoji award"
msgstr "Увімкнути/вимкнути Ñмайлики-нагороди"
@@ -14198,23 +16643,32 @@ msgid "Toggle navigation"
msgstr "Переключити навігацію"
msgid "Toggle project"
-msgstr ""
+msgstr "Увімкнути/вимкнути проект"
msgid "Toggle sidebar"
msgstr "Перемикач бічної панелі"
+msgid "Toggle the Performance Bar"
+msgstr "Увімкнути/вимкнути панель продуктивноÑÑ‚Ñ–"
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr "Закрити/відкрити обговореннÑ"
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ð°: ВИМКÐЕÐО"
msgid "ToggleButton|Toggle Status: ON"
msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ð°: УВІМКÐЕÐО"
+msgid "Toggled :%{name}: emoji award."
+msgstr "Увімкнено/вимкнено :%{name}: Ñмайлик-винагороду."
+
msgid "Toggles :%{name}: emoji award."
msgstr "Вмикає/вимикає %{name} Ñмайлик-нагороду."
-msgid "Token"
-msgstr "Токен"
-
msgid "Tomorrow"
msgstr "Завтра"
@@ -14233,6 +16687,9 @@ msgstr "Загальна кількіÑÑ‚ÑŒ внеÑків"
msgid "Total Time"
msgstr "Загальний чаÑ"
+msgid "Total artifacts size: %{total_size}"
+msgstr "Загальний розмір артефактів: %{total_size}"
+
msgid "Total test time for all commits/merges"
msgstr "Загальний чаÑ, щоб перевірити вÑÑ– коміти/злиттÑ"
@@ -14251,6 +16708,12 @@ msgstr "ВідÑтежуйте групи задач зі Ñпільною теÐ
msgid "Track time with quick actions"
msgstr "ВідÑтежуйте Ñ‡Ð°Ñ Ð·Ð° допомогою швидких дій"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr "ВідÑтежуйте Ñвої проекти GitLab за допомогою GitLab Ð´Ð»Ñ Slack."
+
+msgid "Track your project with Audit Events."
+msgstr "ВідÑтежуйте події аудиту в Ñвоєму проекті."
+
msgid "Transfer project"
msgstr "ПеренеÑти проект"
@@ -14287,9 +16750,6 @@ msgstr "Ð’ цільовому проÑторі імен вже Ñ–Ñнує про
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr "ПеренеÑÐµÐ½Ð½Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ðµ, будь лаÑка, зв'ÑжітьÑÑ Ñ–Ð· адмініÑтратором."
-msgid "Tree"
-msgstr "Дерево"
-
msgid "Tree view"
msgstr "У виглÑді дерева"
@@ -14317,9 +16777,6 @@ msgstr "Змінні тригера:"
msgid "Trigger was created successfully."
msgstr "Тригер Ñтворено уÑпішно."
-msgid "Trigger was re-assigned."
-msgstr "Тригер було перепризначено."
-
msgid "Trigger was successfully updated."
msgstr "Тригер уÑпішно оновлено."
@@ -14342,6 +16799,9 @@ msgid "Try all GitLab has to offer for 30 days."
msgstr "Спробуйте вÑÑ– функції GitLab протÑгом 30 днів."
msgid "Try to fork again"
+msgstr "Спробувати зробити форк знову"
+
+msgid "Try using a different search term to find the file you are looking for."
msgstr ""
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
@@ -14350,6 +16810,12 @@ msgstr "ВідбуваєтьÑÑ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· вашим приÑÑ‚Ñ€Ð
msgid "Tuesday"
msgstr "Вівторок"
+msgid "Turn Off"
+msgstr "Вимкнути"
+
+msgid "Turn On"
+msgstr "Увімкнути"
+
msgid "Turn on Service Desk"
msgstr "Ввімкнути Service Desk"
@@ -14383,17 +16849,32 @@ msgstr "U2F працює лише з веб-Ñайтами з підтримко
msgid "URL"
msgstr "URL"
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr "URL-адреÑа зовнішнього Ñховища, де зберігатимутьÑÑ Ñтатичні об’єкти репозиторію (напр. архіви, бінарні дані Ñ– Ñ‚. д.)."
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr "Ðеможливо заÑтоÑувати пропозиції до видаленого Ñ€Ñдка."
+
+msgid "Unable to build Slack link."
+msgstr "Ðе вдалоÑÑ Ñформувати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Slack."
+
+msgid "Unable to connect to Prometheus server"
+msgstr "Ðеможливо з’єднатиÑÑŒ з Prometheus Ñервером"
+
msgid "Unable to connect to server: %{error}"
msgstr "Ðе вдалоÑÑ Ð·Ð²â€™ÑзатиÑÑ Ñ–Ð· Ñервером: %{error}"
msgid "Unable to generate new instance ID"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ñтворити новий ідентифікатор інÑтанÑу"
msgid "Unable to load the diff. %{button_try_again}"
msgstr "Ðеможливо завантажити порівнÑÐ½Ð½Ñ (diff). %{button_try_again}"
msgid "Unable to resolve"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ñ€Ñ–ÑˆÐ¸Ñ‚Ð¸"
+
+msgid "Unable to save your changes. Please try again."
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ ваші зміни. Будь лаÑка, Ñпробуйте знову."
msgid "Unable to schedule a pipeline to run immediately"
msgstr "ÐевдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити конвеєр негайно"
@@ -14414,7 +16895,7 @@ msgid "Unarchive project"
msgstr "Розархівувати проект"
msgid "Unarchiving the project will restore people's ability to make changes to it. The repository can be committed to, and issues, comments and other entities can be created. <strong>Once active this project shows up in the search and on the dashboard.</strong>"
-msgstr ""
+msgstr "Ð Ð¾Ð·Ð°Ñ€Ñ…Ñ–Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ знову даÑÑ‚ÑŒ можливіÑÑ‚ÑŒ кориÑтувачам вноÑити зміни до нього. Ð’ репозиторій можна буде вноÑити коміти. Крім того можуть бути Ñтворені задачі, коментарі та інші об'єкти. <strong>ПіÑÐ»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— цей проект буде відображатиÑÑ Ð¿Ñ€Ð¸ пошуку та на панелі керуваннÑ.</strong>"
msgid "Unblock"
msgstr "Розблокувати"
@@ -14425,6 +16906,12 @@ msgstr "СкаÑувати"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr "Ðа жаль, ваше Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти до GitLab не може бути оброблено."
+msgid "Uninstall"
+msgstr "Видалити"
+
+msgid "Uninstalling"
+msgstr "ВидаленнÑ"
+
msgid "Unknown"
msgstr "Ðевідомо"
@@ -14452,12 +16939,24 @@ msgstr "Розблокувати %{issuableDisplayName}? <strong>Будь-хто
msgid "Unlocked"
msgstr "Розблоковано"
-msgid "Unlocks the discussion"
-msgstr "Розблоковує обговореннÑ"
+msgid "Unlocked the discussion."
+msgstr "ÐžÐ±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾."
+
+msgid "Unlocks the discussion."
+msgstr "Розблоковує обговореннÑ."
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr "ЗнÑто Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"Ð’ процеÑÑ–\" з цього %{noun}."
+
+msgid "Unmarks this %{noun} as Work In Progress."
+msgstr "Знімає Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"Ð’ процеÑÑ–\" з цього %{noun}."
msgid "Unresolve discussion"
msgstr "Повторно відкрити обговореннÑ"
+msgid "Unresolve thread"
+msgstr "Повторно відкрити обговореннÑ"
+
msgid "Unschedule job"
msgstr "СкаÑувати заплановане завданнÑ"
@@ -14494,6 +16993,15 @@ msgstr "ВідпиÑатиÑÑ Ð½Ð° рівні проекту"
msgid "Unsubscribe from %{type}"
msgstr "ВідпиÑатиÑÑ Ð²Ñ–Ð´ %{type}"
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr "ВідпиÑано від %{quick_action_target}."
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr "ВідпиÑує від %{quick_action_target}."
+
+msgid "Until"
+msgstr "До"
+
msgid "Unverified"
msgstr "Ðепідтверджено"
@@ -14503,20 +17011,32 @@ msgstr "Ðктуальний"
msgid "Upcoming"
msgstr "Ðезабаром"
+msgid "Upcoming Release"
+msgstr "Майбутній реліз"
+
msgid "Update"
msgstr "Оновити"
-msgid "Update approvers"
-msgstr "Оновити затверджуючих оÑіб"
+msgid "Update all"
+msgstr "Оновити вÑе"
+
+msgid "Update approval rule"
+msgstr "Оновити правило затвердженнÑ"
msgid "Update failed"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ"
+msgid "Update failed. Please try again."
+msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÑƒÑпішне. Будь лаÑка, Ñпробуйте знову."
+
+msgid "Update it"
+msgstr "Оновити це"
+
msgid "Update now"
msgstr "Оновити зараз"
msgid "Update your bookmarked URLs as filtered/sorted branches URL has been changed."
-msgstr ""
+msgstr "Оновіть Ñвої закладки, тому що URL-адреÑа відфільтрованих чи відÑортованих гілок змінилаÑÑ."
msgid "Update your group name, description, avatar, and visibility."
msgstr "Оновіть Ñ–Ð¼â€™Ñ Ð³Ñ€ÑƒÐ¿Ð¸, опиÑ, аватар та видиміÑÑ‚ÑŒ."
@@ -14542,6 +17062,9 @@ msgstr "Оновлено"
msgid "Updated %{updated_at} by %{updated_by}"
msgstr "Оновлено %{updated_at} %{updated_by}"
+msgid "Updated to"
+msgstr "Оновлено до"
+
msgid "Updating"
msgstr "ОновленнÑ"
@@ -14549,11 +17072,14 @@ msgid "Upgrade plan to unlock Canary Deployments feature"
msgstr "Перейдіть на вищий тарифний план, щоб отримати доÑтуп до функціональноÑÑ‚Ñ– Canary Deployments"
msgid "Upgrade your plan"
-msgstr ""
+msgstr "Перейти на вищий тарифний план"
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "Перейдіть на вищий тарифний план щоб активувати Покращений Глобальний Пошук."
+msgid "Upgrade your plan to activate Audit Events."
+msgstr "Оновіть Ñвій план Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— подій аудиту."
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "Перейдіть на вищий тарифний план Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— Ðналітики учаÑників."
@@ -14567,7 +17093,7 @@ msgid "Upgrade your plan to improve Issue boards."
msgstr "Перейдіть на вищий тарифний план щоб покращити дошки задач."
msgid "Upgrade your plan to improve Merge Requests."
-msgstr ""
+msgstr "Перейдіть на вищий тарифний план Ð´Ð»Ñ Ð¿Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на злиттÑ."
msgid "Upload <code>GoogleCodeProjectHosting.json</code> here:"
msgstr "ÐадіÑлати <code>GoogleCodeProjectHosting.json</code> тут:"
@@ -14588,10 +17114,10 @@ msgid "Upload file"
msgstr "ÐадіÑлати файл"
msgid "Upload file does not exist"
-msgstr ""
+msgstr "Файл Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ Ñ–Ñнує"
msgid "Upload object map"
-msgstr ""
+msgstr "Завантажити файл відповідноÑÑ‚Ñ– об’єктів"
msgid "UploadLink|click to upload"
msgstr "ÐатиÑніть, щоб надіÑлати"
@@ -14600,10 +17126,10 @@ msgid "Uploaded on"
msgstr "Завантажено на"
msgid "Uploading changes to terminal"
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½ до терміналу"
msgid "Uploads"
-msgstr ""
+msgstr "ЗавантаженнÑ"
msgid "Upstream"
msgstr "Попередній"
@@ -14617,11 +17143,14 @@ msgstr "ВикориÑтано"
msgid "Usage ping is not enabled"
msgstr "Збір даних про викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾"
+msgid "Usage quotas help link"
+msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° довідку по квотам на викориÑтаннÑ"
+
msgid "Usage statistics"
msgstr "СтатиÑтика викориÑтаннÑ"
msgid "UsageQuota|%{help_link_start}Shared runners%{help_link_end} are disabled, so there are no limits set on pipeline usage"
-msgstr ""
+msgstr "%{help_link_start}Загальні runner'и%{help_link_end} вимкнено, тому ліміти на викориÑÑ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð² відÑутні"
msgid "UsageQuota|Artifacts"
msgstr "Ðртефакти"
@@ -14633,10 +17162,10 @@ msgid "UsageQuota|Current period usage"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð° поточний період"
msgid "UsageQuota|LFS Storage"
-msgstr ""
+msgstr "Сховище LFS"
msgid "UsageQuota|Packages"
-msgstr ""
+msgstr "Пакети"
msgid "UsageQuota|Pipelines"
msgstr "Конвеєри"
@@ -14645,10 +17174,10 @@ msgid "UsageQuota|Repository"
msgstr "Репозиторій"
msgid "UsageQuota|Storage"
-msgstr ""
+msgstr "Сховище"
msgid "UsageQuota|This namespace has no projects which use shared runners"
-msgstr ""
+msgstr "Цей проÑÑ‚Ñ–Ñ€ імен не міÑтить проектів, що викориÑтовують загальні runner'и"
msgid "UsageQuota|Unlimited"
msgstr "Без обмежень"
@@ -14669,7 +17198,7 @@ msgid "UsageQuota|Wiki"
msgstr "Вікі"
msgid "Use %{code_start}::%{code_end} to create a %{link_start}scoped label set%{link_end} (eg. %{code_start}priority::1%{code_end})"
-msgstr ""
+msgstr "ВикориÑтовуйте %{code_start}::%{code_end} Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %{link_start}набору Ñелективних міток%{link_end} (напр. %{code_start}priority::1%{code_end})"
msgid "Use <code>%{native_redirect_uri}</code> for local tests"
msgstr "ВикориÑтовувати <code>%{native_redirect_uri}</code> Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… теÑтів"
@@ -14681,7 +17210,7 @@ msgid "Use a hardware device to add the second factor of authentication."
msgstr "ВикориÑтовуйте приÑтрій Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ фактору автентифікацї."
msgid "Use an one time password authenticator on your mobile device or computer to enable two-factor authentication (2FA)."
-msgstr ""
+msgstr "ВикориÑтовуйте одноразовий пароль на вашому мобільному приÑтрої або комп’ютері Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— двофакторної автентифікації (2FA)."
msgid "Use group milestones to manage issues from multiple projects in the same milestone."
msgstr "ВикориÑтовуйте групові етапи, щоб керувати у одному етапі задачі з різних проектів."
@@ -14711,7 +17240,7 @@ msgid "User %{current_user_username} has started impersonating %{username}"
msgstr "КориÑтувач %{current_user_username} розпочав Ñ–Ð¼Ñ–Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %{username}"
msgid "User %{username} was successfully removed."
-msgstr ""
+msgstr "КориÑтувача %{username} уÑпішно видалено."
msgid "User Cohorts are only shown when the %{usage_ping_link_start}usage ping%{usage_ping_link_end} is enabled."
msgstr "Когорти КориÑтувачів показуютьÑÑ Ð»Ð¸ÑˆÐµ тоді, коли увімкнено %{usage_ping_link_start}збір даних про викориÑтаннÑ%{usage_ping_link_end}."
@@ -14726,171 +17255,177 @@ msgid "User and IP Rate Limits"
msgstr "Ліміти чаÑтоти Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів та IP"
msgid "User identity was successfully created."
-msgstr ""
+msgstr "Ідентифікацію кориÑтувача уÑпішно Ñтворено."
msgid "User identity was successfully removed."
-msgstr ""
+msgstr "Ідентифікацію кориÑтувача уÑпішно видалено."
msgid "User identity was successfully updated."
-msgstr ""
+msgstr "Ідентифікацію кориÑтувача уÑпішно оновлено."
msgid "User key was successfully removed."
-msgstr ""
+msgstr "Ключ кориÑтувача уÑпішно видалено."
msgid "User map"
msgstr "Мапа кориÑтувачів"
msgid "User pipeline minutes were successfully reset."
-msgstr ""
+msgstr "КориÑтувацькі хвилини Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ñ–Ð² уÑпішно обнулено."
msgid "User settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
msgid "User was successfully created."
-msgstr ""
+msgstr "КориÑтувача було уÑпішно Ñтворено."
msgid "User was successfully removed from group and any subresources."
-msgstr ""
+msgstr "КориÑтувача було уÑпішно видалено із групи та підреÑурÑів."
msgid "User was successfully removed from project."
-msgstr ""
+msgstr "КориÑтувача уÑпішно видалено із проекту."
msgid "User was successfully updated."
-msgstr ""
+msgstr "КориÑтувача було уÑпішно оновлено."
msgid "UserOnboardingTour|%{activeTour}/%{totalTours}"
-msgstr ""
+msgstr "%{activeTour}/%{totalTours}"
msgid "UserOnboardingTour|%{completed}/%{total} steps completed"
-msgstr ""
+msgstr "%{completed}/%{total} кроків завершено"
msgid "UserOnboardingTour|%{emphasisStart}Well done!%{emphasisEnd}%{lineBreak}%{lineBreak}That's it for our guided tour, congratulations for making it all the way to the end!%{lineBreak}%{lineBreak}We hope this gave you a good overview of GitLab and how it can help you. We'll now show you how to create your own project and invite your colleagues."
-msgstr ""
+msgstr "%{emphasisStart}Чудово!%{emphasisEnd}%{lineBreak}%{lineBreak}Ðа цьому вашу екÑкурÑÑ–ÑŽ завершено, вітаємо із проходженнÑм Ñ—Ñ— до кінцÑ!%{lineBreak}%{lineBreak}СподіваємоÑÑ, що вона дала вам хороший оглÑд GitLab Ñ– те, Ñк він може вам допомогти. Зараз ми вам покажемо Ñк Ñтворити влаÑний проект та запроÑити ваших колег."
msgid "UserOnboardingTour|Adding other members to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
-msgstr ""
+msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÑƒÑ‡Ð°Ñників до проекту відбуваєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ. Перейдіть до %{emphasisStart}налаштувань%{emphasisEnd}."
msgid "UserOnboardingTour|Alright, that's it for Commits. Let's take a look at the %{emphasisStart}Branches%{emphasisEnd}."
-msgstr ""
+msgstr "Отже це вÑе про коміти. Тепер давайте розглÑнемо %{emphasisStart}гілки%{emphasisEnd}."
msgid "UserOnboardingTour|Awesome! Now click on %{emphasisStart}Members%{emphasisEnd}."
-msgstr ""
+msgstr "Чудово! Тепер натиÑніть %{emphasisStart}УчаÑники%{emphasisEnd}."
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}Compare%{emphasisEnd} buttons to compare a branch to master."
-msgstr ""
+msgstr "ÐатиÑніть на одну з кнопок %{emphasisStart}порівнÑннÑ%{emphasisEnd}, щоб порівнÑти ÑкуÑÑŒ гілку із master."
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}pipeline IDs%{emphasisEnd} to see the details of a pipeline."
-msgstr ""
+msgstr "ÐатиÑніть на %{emphasisStart}ідентифікатор конвеєру%{emphasisEnd} щоб переглÑнути його деталі."
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
-msgstr ""
+msgstr "ÐатиÑніть щоб відкрити оÑтанній коміт та переглÑнути його деталі."
+
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr "Закрити \"ДізнатиÑÑ Ð¿Ñ€Ð¾ GitLab\""
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
-msgstr ""
+msgstr "Коміти відображаютьÑÑ Ð² хронологічному порÑдку та можуть бути відфільтровані за повідомленнÑм коміту та за гілкою."
msgid "UserOnboardingTour|Create a project"
msgstr "Створити проект"
msgid "UserOnboardingTour|Exit 'Learn GitLab'"
-msgstr ""
+msgstr "Вийти з \"ДізнатиÑÑ Ð¿Ñ€Ð¾ GitLab\""
msgid "UserOnboardingTour|Got it"
msgstr "Зрозуміло"
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr "Чудово! %{clapHands} Ми ÑподіваємоÑÑ, що Ñ†Ñ ÐµÐºÑкурÑÑ–Ñ Ð±ÑƒÐ»Ð° кориÑною Ñ– ви дізналиÑÑ Ñк кориÑтуватиÑÑ GitLab.%{lineBreak}%{lineBreak}Ми хотіли б отримати від Ð²Ð°Ñ Ð²Ñ–Ð´Ð³ÑƒÐº про неї.%{lineBreak}%{lineBreak}%{emphasisStart}ÐаÑкільки кориÑною Ð±ÑƒÐ»Ñ Ñ†Ñ ÐµÐºÑкурÑÑ–Ñ?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+
msgid "UserOnboardingTour|Guided GitLab Tour"
-msgstr ""
+msgstr "ЕкÑкурÑÑ–Ñ Ð¿Ð¾ GitLab"
msgid "UserOnboardingTour|Here you can compare the changes of this branch to another one. Changes are divided by files so that it's easier to see what was changed where."
-msgstr ""
+msgstr "Тут ви можете порівнювати зміни цієї вітки із ÑкоюÑÑŒ іншою. Зміни поділені на файли Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб було наочніше що де змінилоÑÑ."
msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Choose a way to create a project and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
-msgstr ""
+msgstr "Тут ви можете Ñтворити порожній проект, викориÑтати шаблон або імпортувати репозиторій з інших платформ. Що б ви не вибрали, ми підказуватимемо вам.%{lineBreak}%{lineBreak}Виберіть ÑпоÑіб ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ та натиÑніть %{emphasisStart}Створити проект%{emphasisEnd} Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ на наÑтупний крок."
msgid "UserOnboardingTour|Here you can see the breakdown of the pipelines: its stages and jobs in each of the stages and their status.%{lineBreak}%{lineBreak}Our CI/CD pipelines are quite complex, most of our users have fewer and simpler pipelines."
-msgstr ""
+msgstr "Тут ви можете бачити детальну інформацію про конвеєри: їхні Ñтадії та Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð² кожній із цих Ñтадій, а також їхній ÑтатуÑ.%{lineBreak}%{lineBreak}Ðаші конвеєри CI/CD доÑить Ñкладні, більшіÑÑ‚ÑŒ кориÑтувачів має менше конвеєрів Ñ– вони Ñ” проÑтішими."
msgid "UserOnboardingTour|Here you can see the current members of the project (just you at the moment) and invite new members.%{lineBreak}%{lineBreak}You can invite multiple members at once (existing GitLab users or invite by email) and you can also set their roles and permissions.%{lineBreak}%{lineBreak}Add a few members and click on %{emphasisStart}Add to project%{emphasisEnd} to complete this step."
-msgstr ""
+msgstr "Тут ви можете бачити поточних учаÑників проекту (наразі лише ви) та запрошувати нових учаÑників.%{lineBreak}%{lineBreak}Ви можете запрошувати відразу по кілька кориÑтувачів за один раз (Ñ–Ñнуючих кориÑтувачів GitLab чи через адреÑу електронної пошти), а також вÑтановлювати Ñ—Ñ… ролі та дозволи.%{lineBreak}%{lineBreak}Додайте кілька учаÑників, натиÑнувши на %{emphasisStart}Додати до проекту%{emphasisEnd} Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кроку."
msgid "UserOnboardingTour|Here you can see what changes were made with this commit, on what branch and if there's a related merge request. The status of the pipeline will also show up if CI/CD is set up.%{lineBreak}%{lineBreak}You can also comment on the lines of code that were changed and start a discussion with your colleagues!"
-msgstr ""
+msgstr "Тут ви можете бачити Ñкі зміни були виконані в цьому коміті, у Ñкій гілці та чи Ñ–Ñнує пов'Ñзаний запит на злиттÑ. Також відображатиметьÑÑ Ñтан конвеєра, Ñкщо налаштовано CI/CD.%{lineBreak}%{lineBreak}Ви також можете залишати коментарі до змінених Ñ€Ñдків коду Ñ– розпочинати Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ–Ð· колегами!"
msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}%{projectName}%{emphasisEnd} project. They're split into Active and Stale.%{lineBreak}%{lineBreak}From here, you can create a new merge request, from a branch or compare the branch to any other branch in the project. By default, it will compare it to the master branch."
-msgstr ""
+msgstr "ОÑÑŒ оглÑд гілок в проекті %{emphasisStart}%{projectName}%{emphasisEnd}. Вони розбиті на \"Ðктивні\" та \"ЗаÑтарілі\".%{lineBreak}%{lineBreak}Тут ви можете Ñтворити новий запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ–Ð· ÑкоїÑÑŒ гілки або порівнÑти дві гілки з проекту між Ñобою. За замовчуваннÑм буде відбуватиÑÑ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑÐ½Ð½Ñ Ñ–Ð· гілкою master."
msgid "UserOnboardingTour|Invite colleagues"
-msgstr ""
+msgstr "ЗапроÑити колег"
msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progess in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks like when the list is filtered by a label."
-msgstr ""
+msgstr "Задачі добре підходÑÑ‚ÑŒ Ð´Ð»Ñ ÐºÐ¾Ð¼ÑƒÐ½Ñ–ÐºÐ°Ñ†Ñ–Ñ— та віÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑу в GitLab. ОÑÑŒ задачі, Ñкі відкриті в %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}Ви можете допомогти нам покращити GitLab шлÑхом внеÑків у задачі, що відмічені <span class=\"badge color-label accept-mr-label\">ПриймаютьÑÑ Ð·Ð°Ð¿Ð¸Ñ‚Ð¸ на злиттÑ</span>.%{lineBreak}%{lineBreak}Цей ÑпиÑок може бути відвільтрований за мітками, етапами, виконавцÑми, авторами... Ми продоемонÑтруємо Ñк виглÑдає ÑпиÑок, відфільтрований за міткою."
msgid "UserOnboardingTour|Learn GitLab"
-msgstr ""
+msgstr "ДізнатиÑÑ Ð¿Ñ€Ð¾ GitLab"
msgid "UserOnboardingTour|Let's take a closer look at a merge request. Click on the title of one."
-msgstr ""
+msgstr "Давайте розглÑнемо детальніше запити на злиттÑ. ÐатиÑніть на заголовко одного з них."
msgid "UserOnboardingTour|Let's take a closer look at all the commits. Click on %{emphasisStart}Commits%{emphasisEnd}."
-msgstr ""
+msgstr "Давайте розглÑнемо детальніше вÑÑ– коміти. ÐатиÑтніть на %{emphasisStart}Коміти%{emphasisEnd}."
msgid "UserOnboardingTour|Let's take a closer look at the repository of this project. Click on %{emphasisStart}Repository%{emphasisEnd}."
-msgstr ""
+msgstr "Давайте розглÑнемо детальніше репозиторій цього проекту. ÐатиÑніть на %{emphasisStart}Репозиторій%{emphasisEnd}."
msgid "UserOnboardingTour|No thanks"
msgstr "ÐÑ–, дÑкую"
msgid "UserOnboardingTour|Ok, let's go"
-msgstr ""
+msgstr "Гаразд, уперед"
msgid "UserOnboardingTour|Ok, show me"
-msgstr ""
+msgstr "Гаразд, показати"
msgid "UserOnboardingTour|Open one of the issues by clicking on its title."
-msgstr ""
+msgstr "Відкрийте одну із задач, натиÑнувши на Ñ—Ñ— заголовок."
msgid "UserOnboardingTour|Restart this step"
-msgstr ""
+msgstr "ПерезапуÑтити цей крок"
msgid "UserOnboardingTour|Skip this step"
-msgstr ""
+msgstr "ПропуÑтити цей крок"
msgid "UserOnboardingTour|Sweet! Your project was created is is ready to be used.%{lineBreak}%{lineBreak}You can start adding files to the repository or clone it. One last thing we want to show you is how to invite your colleagues to your new project."
-msgstr ""
+msgstr "Ваш проект Ñтворено Ñ– він готовий до викориÑтаннÑ.%{lineBreak}%{lineBreak}Ви можете почати додавати файли до репозиторію чи клонувати його. ОÑтаннє, що ми хочемо вам показати — Ñк запрошувати колег до вашого проекту."
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
-msgstr ""
+msgstr "ПоглÑньте. ОÑÑŒ зручне меню Ð´Ð»Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð³Ð¾ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡, запитів на злиттÑ, Ñніпетів, проектів та груп. Ð”Ð»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ натиÑніть на нього та виберіть \"Ðовий проект\" із розділу \"GitLab\"."
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
-msgstr ""
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
+msgstr "СпаÑибі за ваш відгук! %{thumbsUp}"
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
-msgstr ""
+msgstr "Отже це вÑе про задачі. Тепер давайте розглÑнемо %{emphasisStart}запити на злиттÑ%{emphasisEnd}."
msgid "UserOnboardingTour|That's it for merge requests. Now for the finla part of this guided tour - the %{emphasisStart}CI/CD%{emphasisEnd}."
-msgstr ""
+msgstr "Отже це вÑе про запити на злиттÑ. ОÑтанній розділ цієї екÑкурÑÑ–Ñ— — %{emphasisStart}CI/CD%{emphasisEnd}."
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
-msgstr ""
+msgstr "Отже, це вÑе про репозиторій. Тепер давайте розглÑнемо %{emphasisStart}задачі%{emphasisEnd}."
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
-msgstr ""
+msgstr "Тут багато інформації, але не хвилюйтеÑÑ, ми розберемоÑÑ.%{lineBreak}%{lineBreak}Угорі ви можете бачити Ñтан задачі, коли вона була Ñтворена Ñ– ким. Ðижче ви можете бачити Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–, а ще нижче — інші %{emphasisStart}пов'Ñзані задачі%{emphasisEnd} та %{emphasisStart}запити на злиттÑ%{emphasisEnd} (Ñкщо Ñ”). Далі розміщене %{emphasisStart}обговореннÑ%{emphasisEnd}, де Ð²Ñ–Ð´Ð±ÑƒÐ²Ð°Ñ”Ñ‚ÑŒÑ Ð¾Ñновне ÑпілкуваннÑ.%{lineBreak}%{lineBreak}Справа знаходитьÑÑ Ð±Ñ–Ñ‡Ð½Ð° панель, де ви можете переглÑнути чи змінити %{emphasisStart}виконавцÑ, етап, заплановану дату завершеннÑ, мітки, вагу%{emphasisEnd} Ñ– Ñ‚.д."
msgid "UserOnboardingTour|These are all the CI/CD pipelines we have for our %{emphasisStart}%{projectName}%{emphasisEnd} project.%{lineBreak}%{lineBreak}Here you can see the status of each pipeline, for what commit it's running for, its stages and the status for them."
-msgstr ""
+msgstr "ОÑÑŒ уÑÑ– конвеєри CI/CD, Ñкі Ñ” в проекті %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}Тут ви можете бачити Ñтан кожного конвеєра, Ð´Ð»Ñ Ñкого коміту його було запущено, Ñтадії та Ñтан кожної з них."
msgid "UserOnboardingTour|These are all the issues that are available for community contributions. Let's take a closer look at one of them."
-msgstr ""
+msgstr "ОÑÑŒ уÑÑ– задачі, де приймаютьÑÑ Ð²Ð½ÐµÑки від Ñпільноти. Давайте уважніше розглÑнемо одну з них."
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
-msgstr ""
+msgstr "Це оглÑд уÑÑ–Ñ… запитів на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð² цьому проекті. Ðналогічно до оглÑду задач, його можна фільтрувати за мітками, етапами, авторами, виконавцÑми Ñ– Ñ‚. д."
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14938,6 +17473,12 @@ msgstr "Сніпети"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr "Сніпети в GitLab можуть бути приватними, внутрішніми та публічними."
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr "Додавайте проекти в обране, щоб Ñлідкувати за ними та показати Ñвій інтереÑ."
+
+msgid "UserProfile|Starred projects"
+msgstr "Обрані проекти"
+
msgid "UserProfile|Subscribe"
msgstr "ПідпиÑатиÑÑ"
@@ -14950,6 +17491,9 @@ msgstr "Цей кориÑтувач має приватний профіль"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr "Цей кориÑтувач не робив внеÑків до жодного із проектів"
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr "Цей кориÑтувач не має жодного обраного проекту"
+
msgid "UserProfile|View all"
msgstr "ПереглÑнути вÑе"
@@ -14977,38 +17521,41 @@ msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача вже зайнÑто."
msgid "Username is available."
msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача доÑтупне."
+msgid "Username or email"
+msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача або електронна пошта"
+
msgid "Users"
msgstr "КориÑтувачі"
msgid "Users outside of license"
-msgstr ""
+msgstr "КориÑтувачі за межами ліцензії"
msgid "Users requesting access to"
msgstr "КориÑтувачі, Ñкі запитують доÑтуп до"
msgid "Users were successfully added."
-msgstr ""
+msgstr "КориÑтувачів уÑпішно додано."
msgid "Users with a Guest role or those who don't belong to any projects or groups don't count towards seats in use."
msgstr "КориÑтувачі із роллю ГіÑÑ‚ÑŒ або Ñ‚Ñ–, що не належать до жодного проекту або групи не враховуютьÑÑ Ð¿Ñ€Ð¸ підрахунку міÑць."
msgid "UsersSelect|%{name} + %{length} more"
-msgstr ""
+msgstr "%{name} + %{length} більше"
msgid "UsersSelect|Any User"
-msgstr ""
+msgstr "Будь-Ñкий кориÑтувач"
msgid "UsersSelect|Assignee"
msgstr "Виконавець"
msgid "UsersSelect|No assignee - %{openingTag} assign yourself %{closingTag}"
-msgstr ""
+msgstr "Ðемає Ð²Ð¸ÐºÐ¾Ð½Ð°Ð²Ñ†Ñ â€” %{openingTag} призначити на Ñебе %{closingTag}"
msgid "UsersSelect|Unassigned"
-msgstr ""
+msgstr "Ðепризначено"
msgid "Using %{code_start}::%{code_end} denotes a %{link_start}scoped label set%{link_end}"
-msgstr ""
+msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ %{code_start}::%{code_end} вказує на %{link_start}набір Ñелективних міток%{link_end}"
msgid "Using required encryption strategy when encrypted field is missing!"
msgstr ""
@@ -15020,7 +17567,7 @@ msgid "Validate your GitLab CI configuration file"
msgstr "Перевірити ваш файл конфігурації Gitlab CI"
msgid "Validations failed."
-msgstr ""
+msgstr "Перевірки не пройшли уÑпішно."
msgid "Validity"
msgstr "Термін дії"
@@ -15055,11 +17602,14 @@ msgstr "Підтверджено"
msgid "Version"
msgstr "ВерÑÑ–Ñ"
+msgid "Very helpful"
+msgstr "Дуже кориÑна"
+
msgid "View app"
msgstr "ПереглÑнути заÑтоÑунок"
msgid "View dependency details for your project"
-msgstr ""
+msgstr "ПереглÑнути інформацію про залежноÑÑ‚Ñ– Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ проекту"
msgid "View deployment"
msgstr "ПереглÑнути розгортаннÑ"
@@ -15080,7 +17630,7 @@ msgid "View file @ "
msgstr "ПереглÑд файла @ "
msgid "View full dashboard"
-msgstr ""
+msgstr "ПереглÑнути повну панель керуваннÑ"
msgid "View group labels"
msgstr "ПереглÑнути мітки групи"
@@ -15092,7 +17642,7 @@ msgid "View it on GitLab"
msgstr "ПереглÑнути це на GitLab"
msgid "View job"
-msgstr ""
+msgstr "ПереглÑнути завданнÑ"
msgid "View job trace"
msgstr "ПереглÑнути лог завданнÑ"
@@ -15133,6 +17683,9 @@ msgstr "Рівень видимоÑÑ‚Ñ–"
msgid "Visibility level:"
msgstr "Рівень видимоÑÑ‚Ñ–:"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr "ВидиміÑÑ‚ÑŒ, оÑобливоÑÑ‚Ñ– проекту, дозволи"
@@ -15154,17 +17707,29 @@ msgstr "Ðевідомий"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr "%{stepStart}Крок 1%{stepEnd}. Скопіюйте наÑтупний Ñкрипт:"
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
-msgstr "%{stepStart}Крок 2%{stepEnd}. Додайте його до %{headTags} Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— Ñторінки вашого заÑтоÑунку. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr "%{stepStart}Крок 2%{stepEnd}. Додайте його до тегів %{headTags} кожної Ñторінки вашого заÑтоÑунку, впевнившиÑÑŒ в тому, що ідентифікатор запиту на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð²Ñтановлено чи не вÑтановлено в залежноÑÑ‚Ñ– від Ñитуації. "
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr "%{stepStart}Крок 3%{stepEnd}. Відкрийте Review App та вÑтановіть %{linkStart}перÑональний токен доÑтупу%{linkEnd}."
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
-msgstr "%{stepStart}Крок 3%{stepEnd}. Відкрийте review app та введіть перÑональний токен доÑтупу викориÑтовуючи %{linkStart}перÑональний токен доÑтупу%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr "%{stepStart}Крок 4%{stepEnd}. Якщо це раніше не було %{linkStart}Ñконфігуровано%{linkEnd} розробником, введіть ідентифікатор запиту на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸ запиті. Ідентифікатор запиту на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ â€” %{stepStart}%{mrId}%{stepStart}."
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
-msgstr "%{stepStart}Крок 4%{stepEnd}. Тепер ви можете залишати відгуки прÑмо із review app."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr "%{stepStart}Крок 5%{stepEnd}. Залиште відгук в Review App."
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
-msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð°Ñтупного Ñкрипта до вашого коду дозволÑÑ” залишати відгуки прÑмо з review app. Ðадані відгуки разом з метаданними будуть автоматично включені в Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на злиттÑ."
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr "Скопіювати ідентифікатор запиту на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð² буфер обміну"
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr "Скопіювати Ñкрипт в буфер обміну"
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr "Увімкнути візуальні оглÑди"
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
+msgstr "Виконайте наведені нижче дії, щоб увімкнути візуальні переглÑди Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ заÑтоÑунку."
msgid "VisualReviewApp|Open review app"
msgstr "Відкрити review app"
@@ -15172,17 +17737,20 @@ msgstr "Відкрити review app"
msgid "VisualReviewApp|Review"
msgstr "ПереглÑд"
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
-msgstr "ПереглÑдайте Ñ– надавайте відгуки прÑмо із review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
+msgstr "Кроки 1 та 2 (а також інколи 3) виконуютьÑÑ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ¾Ð¼ один раз перед запитом відгуків. Кроки 3 (Ñкщо необхідно), 4 та 5 виконуютьÑÑ Ñ€ÐµÑ†ÐµÐ½Ð·ÐµÐ½Ñ‚Ð°Ð¼Ð¸ кожного разу при виконанні переглÑду."
msgid "Vulnerabilities"
msgstr "ВразливоÑÑ‚Ñ–"
-msgid "Vulnerability Chart"
-msgstr "СтатиÑтика вразливоÑтей"
+msgid "Vulnerabilities over time"
+msgstr "ВразливоÑÑ‚Ñ– в чаÑÑ–"
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr "Vulnerability-Check вимагає одне або більше затверджень Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð² на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð»Ð¸ÑˆÐµ Ñкщо виÑвлено виÑокі або критичні вразливоÑÑ‚Ñ– безпеки."
-msgid "Vulnerability List"
-msgstr "СпиÑок вразливоÑтей"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
+msgstr "%{formattedStartDate} до Ñьогодні"
msgid "Vulnerability|Class"
msgstr "КлаÑ"
@@ -15223,6 +17791,9 @@ msgstr "Рівень"
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… про продуктивніÑÑ‚ÑŒ"
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "Хочете побачити дані? Будь лаÑка, попроÑить у адмініÑтратора доÑтуп."
@@ -15238,10 +17809,7 @@ msgstr "Ми не змогли визначити шлÑÑ… до видаленн
msgid "We could not determine the path to remove the issue"
msgstr "Ми не змогли визначити шлÑÑ… до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ–"
-msgid "We couldn't find any results matching"
-msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідні результати"
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15254,7 +17822,7 @@ msgid "We heard back from your U2F device. You have been authenticated."
msgstr "Ми отримали відповідь від вашого приÑтрою U2F. Ви пройшли автентифікацію."
msgid "We sent you an email with reset password instructions"
-msgstr ""
+msgstr "Ми надіÑлали вам Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾ електронній пошті з інÑтрукціÑми по відновленню паролю"
msgid "We want to be sure it is you, please confirm you are not a robot."
msgstr "Ми хочемо бути впевнені, що це ви, будь лаÑка, підтвердіть, що ви не робот."
@@ -15290,10 +17858,13 @@ msgid "Weight %{weight}"
msgstr "Вага %{weight}"
msgid "Welcome to the Guided GitLab Tour"
-msgstr ""
+msgstr "ЛаÑкаво проÑимо на екÑкурÑÑ–ÑŽ по GitLab"
msgid "Welcome to your Issue Board!"
-msgstr ""
+msgstr "ЛаÑкаво проÑимо до дошки Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡!"
+
+msgid "What are you searching for?"
+msgstr "Що ви шукаєте?"
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "Коли runner закріплений (за проектами), його не можна викориÑтовувати в інших проектах"
@@ -15306,15 +17877,21 @@ msgstr "Якщо залишити URL порожнім, можна вÑтаноÐ
msgid "When this merge request is accepted"
msgid_plural "When these merge requests are accepted"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Коли цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸Ð¹Ð½Ñто"
+msgstr[1] "Коли ці запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸Ð¹Ð½Ñто"
+msgstr[2] "Коли ці запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸Ð¹Ð½Ñто"
+msgstr[3] "Коли ці запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸Ð¹Ð½Ñто"
+
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
msgid "When:"
msgstr "Коли:"
msgid "White helpers give contextual information."
+msgstr "Білі вказівники дають контекÑтну інформацію."
+
+msgid "Whitelist to allow requests to the local network from hooks and services"
msgstr ""
msgid "Who can see this group?"
@@ -15326,8 +17903,11 @@ msgstr "Хто зможе побачити цю групу?"
msgid "Wiki"
msgstr "Вікі"
+msgid "Wiki pages"
+msgstr "Сторінки Вікі"
+
msgid "Wiki was successfully updated."
-msgstr ""
+msgstr "Вікі уÑпішно оновлено."
msgid "WikiClone|Clone your wiki"
msgstr "Клонувати ваш вікі"
@@ -15398,15 +17978,9 @@ msgstr "документації"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "Ð”Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° (нову) Ñторінку, проÑто введіть %{link_example}"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "ІнÑтрукціÑ"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "Порада: можна вказати повний шлÑÑ… до нового файлу. Ми автоматично Ñтворимо вÑÑ– відÑутні каталоги."
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "Ðова вікі-Ñторінка"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "Ви дійÑно бажаєте видалити цю Ñторінку?"
@@ -15422,20 +17996,17 @@ msgstr "ХтоÑÑŒ редагував Ñторінку в той же чаÑ, щ
msgid "WikiPageConflictMessage|the page"
msgstr "Ñторінка"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "Створити %{page_title}"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "Оновити %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr "Створити %{pageTitle}"
-msgid "WikiPage|Page slug"
-msgstr "ШлÑÑ… Ñторінки"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr "Оновити %{pageTitle}"
msgid "WikiPage|Write your content or drag files here…"
msgstr "Ðапишіть текÑÑ‚ або перетÑгніть файли Ñюди…"
-msgid "Wiki|Create Page"
-msgstr "Створити Ñторінку"
+msgid "Wiki|Create New Page"
+msgstr "Створити нову Ñторінку"
msgid "Wiki|Create page"
msgstr "Створити Ñторінку"
@@ -15455,6 +18026,9 @@ msgstr "Ðова Ñторінка"
msgid "Wiki|Page history"
msgstr "ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ñторінки"
+msgid "Wiki|Page title"
+msgstr "Заголовок Ñторінки"
+
msgid "Wiki|Page version"
msgstr "ВерÑÑ–Ñ Ñторінки"
@@ -15485,6 +18059,9 @@ msgstr "ÐапиÑати"
msgid "Write a comment or drag your files here…"
msgstr "Ðапишіть коментар або перетÑгніть файли Ñюди…"
+msgid "Write a comment…"
+msgstr "ÐапиÑати коментар…"
+
msgid "Write access allowed"
msgstr "ДоÑтуп на Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾"
@@ -15516,13 +18093,16 @@ msgid "You are an admin, which means granting access to <strong>%{client_name}</
msgstr "Ви — адмініÑтратор, а це означає, що Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу Ð´Ð»Ñ <strong>%{client_name}</strong> дозволить їм взаємодіÑти з GitLab Ñк адмініÑтратору. Продовжуйте обережно."
msgid "You are attempting to delete a file that has been previously updated."
-msgstr ""
+msgstr "Ви намагаєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ файл, Ñкий раніше було оновлено."
msgid "You are attempting to update a file that has changed since you started editing it."
-msgstr ""
+msgstr "Ви намагаєтеÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ файл, Ñкий було змінено піÑÐ»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ редагуваннÑ."
+
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr "Ви підключені до Ñервера Prometheus, але в даний Ñ‡Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” даних Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ."
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
-msgstr ""
+msgstr "Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %{group_name}, це також видалить уÑÑ– Ñ—Ñ— підгрупи та проекти. Видалені групи ÐЕ МОЖУТЬ бути відновлені! Ви ÐБСОЛЮТÐО впевнені?"
msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "Ви хочете видалити %{project_full_name}. Видалений проект ÐЕ МОЖЕ бути відновлений! Ви ÐБСОЛЮТÐО впевнені?"
@@ -15534,7 +18114,7 @@ msgid "You are going to transfer %{project_full_name} to another owner. Are you
msgstr "Ви збираєтеÑÑ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‚Ð¸ проект %{project_full_name} іншому влаÑнику. Ви ÐБСОЛЮТÐО впевнені?"
msgid "You are not allowed to unlink your primary login account"
-msgstr ""
+msgstr "Вам не дозволÑєтьÑÑ Ð²Ñ–Ð´Ð²â€™Ñзувати Ñвій оÑновний обліковій Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ"
msgid "You are now impersonating %{username}"
msgstr "Зараз ви імітуєте %{username}"
@@ -15575,6 +18155,9 @@ msgstr "Ви можете легко робити внеÑки до них, за
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "Ви можете легко вÑтановити Runner на клаÑтері Kubernetes. %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr "Ви можете запроÑити нового учаÑника до <strong>%{project_name}</strong> або запроÑити іншу групу."
@@ -15588,10 +18171,10 @@ msgid "You can move around the graph by using the arrow keys."
msgstr "Ви можете переÑуватиÑÑ Ð¿Ð¾ графіку за допомогою клавіш зі Ñтрілками."
msgid "You can now submit a merge request to get this change into the original branch."
-msgstr ""
+msgstr "Ви можете тепер відправити запит на злиттÑ, щоб Ñ†Ñ Ð·Ð¼Ñ–Ð½Ð° попала у вихідну гілку."
msgid "You can now submit a merge request to get this change into the original project."
-msgstr ""
+msgstr "Ви можете тепер відправити запит на злиттÑ, щоб Ñ†Ñ Ð·Ð¼Ñ–Ð½Ð° потрапила у вихідний проект."
msgid "You can only add files when you are on a branch"
msgstr "Ви можете додавати файли тільки коли перебуваєте в гілці"
@@ -15599,8 +18182,11 @@ msgstr "Ви можете додавати файли тільки коли пе
msgid "You can only edit files when you are on a branch"
msgstr "Ви можете редагувати файли, лише перебуваючи у ÑкійÑÑŒ гілці"
-msgid "You can only merge once the items above are resolved"
-msgstr "Ви можете зливати лише коли вищезгадані пункти будуть вирішені"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
+msgstr "Ви можете злити цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð»Ð¸ÑˆÐµ коли його буде затверджено."
msgid "You can only transfer the project to namespaces you manage."
msgstr "Ви можете переміщувати проект тільки в проÑтори імен, Ñкими ви керуєте."
@@ -15609,17 +18195,20 @@ msgid "You can resolve the merge conflict using either the Interactive mode, by
msgstr "Ви можете розв’Ñзати цей конфлікт Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð·Ð° допомогою інтерактивного режиму (викориÑтовуючи кнопки %{use_ours} та %{use_theirs}), або безпоÑередньо редагуючи файли. Закомітити зміни у %{branch_name}"
msgid "You can see your chat accounts."
-msgstr ""
+msgstr "Ви можете переглÑдати Ñвої облікові запиÑи чатів."
msgid "You can set up jobs to only use Runners with specific tags. Separate tags with commas."
msgstr "Ви можете налаштувати Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð½Ð° викориÑÑ‚Ð°Ð½Ð½Ñ Runnir'ів з конкретними тегами. РозділÑйте теги комами."
msgid "You can specify notification level per group or per project."
-msgstr ""
+msgstr "Ви можете вказати рівень Ñповіщень на рівні групи або проекту."
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "Ви можете перевірити Ñвій .gitlab-ci.yml у %{linkStart}CI Lint%{linkEnd}."
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr "Ви не можете отримати доÑтуп до неформатованого файлу. Будь лаÑка, зачекайте хвилину."
+
msgid "You cannot impersonate a blocked user"
msgstr "Ви не можете імітувати заблокованого кориÑтувача"
@@ -15630,7 +18219,7 @@ msgid "You cannot impersonate an internal user"
msgstr "Ви не можете імітувати внутрішнього кориÑтувача"
msgid "You cannot play this scheduled pipeline at the moment. Please wait a minute."
-msgstr ""
+msgstr "Зараз ви не можете запуÑтити цей запланований конвеєр. Будь лаÑка, почекайте хвилину."
msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead."
msgstr "Ви не можете запиÑувати на вторинні інÑтанÑи \"тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\" GitLab Geo. Будь лаÑка викориÑтовуйте %{link_to_primary_node}."
@@ -15641,14 +18230,11 @@ msgstr "Ви не можете запиÑувати на цей \"тільки Ð
msgid "You could not create a new trigger."
msgstr "Ви не змогли Ñтворити новий тригер."
-msgid "You could not take ownership of trigger."
-msgstr "Ви не змогли Ñтати влаÑником тригеру."
-
msgid "You do not have any subscriptions yet"
msgstr "У Ð²Ð°Ñ Ñ‰Ðµ немає підпиÑок"
msgid "You do not have permission to leave this %{namespaceType}."
-msgstr ""
+msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” дозволу залишити це %{namespaceType}."
msgid "You do not have permission to run the Web Terminal. Please contact a project administrator."
msgstr "Ви не маєте дозволу запуÑкати Веб-термінал. Будь лаÑка, звернітьÑÑ Ð´Ð¾ адмініÑтратора проекту."
@@ -15671,17 +18257,29 @@ msgstr "Ви не маєте ніÑких авторизованих заÑтоÑ
msgid "You don't have any deployments right now."
msgstr "Ðаразі у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” ніÑких розгортань."
-msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
+msgid "You don't have any projects available."
+msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” жодних доÑтупних проектів."
+
+msgid "You don't have any recent searches"
+msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” недавніх пошуків"
+
+msgid "You don’t have access to Cycle Analytics for this group"
msgstr ""
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr "У Ð²Ð°Ñ Ð½Ðµ має доÑтупу до Ðналітики ПродуктивноÑÑ‚Ñ– в цій групі"
+
+msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
+msgstr "Вам надано %{access_level} доÑтуп до %{source_link} %{source_type}."
+
msgid "You have been granted %{access_level} access to the %{source_name} %{source_type}."
-msgstr ""
+msgstr "Вам надано %{access_level} доÑтуп до %{source_name} %{source_type}."
msgid "You have been granted %{member_human_access} access to %{label}."
msgstr "Вам надано %{member_human_access} доÑтуп до %{label}."
msgid "You have been unsubscribed from this thread."
-msgstr ""
+msgstr "Ви відпиÑані від цього обговореннÑ."
msgid "You have declined the invitation to join %{label}."
msgstr "Ви відхилили Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ñ‚Ð¸ÑÑ Ð´Ð¾ %{label}."
@@ -15695,8 +18293,14 @@ msgstr "Ви не додали жодної затверджуючої оÑобÐ
msgid "You have reached your project limit"
msgstr "Ви доÑÑгли Ñвого ліміту по кількоÑÑ‚Ñ– проектів"
+msgid "You haven't added any issues to your project yet"
+msgstr "Ви ще не додавали ніÑких задач до ваших проектів"
+
+msgid "You haven't selected any issues yet"
+msgstr "Ви ще не вибрали ніÑких задач"
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
-msgstr ""
+msgstr "Ви залишили \"%{membershipable_human_name}\" %{source_type}."
msgid "You may also add variables that are made available to the running application by prepending the variable key with <code>K8S_SECRET_</code>."
msgstr "Ви також можете додати змінні, що будуть доÑтупними Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð¾Ð³Ð¾ заÑтоÑунку шлÑхом Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑу <code>K8S_SECRET_</code> до Ñ—Ñ… імен."
@@ -15711,10 +18315,10 @@ msgid "You must have permission to create a project in a namespace before forkin
msgstr ""
msgid "You must provide a valid current password"
-msgstr ""
+msgstr "Вам потрібно вказати дійÑний поточний пароль"
msgid "You must provide your current password in order to change it."
-msgstr ""
+msgstr "Вам потрібно вказати поточний пароль Ð´Ð»Ñ Ð¹Ð¾Ð³Ð¾ зміни."
msgid "You need a different license to enable FileLocks feature"
msgstr "Ð”Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— функції Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¤Ð°Ð¹Ð»Ñ–Ð² вам потрібна інша ліцензіÑ"
@@ -15735,7 +18339,7 @@ msgid "You need to register a two-factor authentication app before you can set u
msgstr "Вам треба зареєÑтрувати програму Ð´Ð»Ñ Ð´Ð²Ð¾Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ñ— автентифікації перед налаштуваннÑм приÑтрою U2F."
msgid "You need to specify both an Access Token and a Host URL."
-msgstr ""
+msgstr "Вам необхідно вказати Ñк токен доÑтупу, так Ñ– URL хоÑта."
msgid "You need to upload a GitLab project export archive (ending in .gz)."
msgstr "Ви повинні завантажити екÑпортований архів проекту Gitlab (що закінчуєтьÑÑ Ð½Ð° .gz)."
@@ -15744,7 +18348,7 @@ msgid "You need to upload a Google Takeout archive."
msgstr "Вам потрібно завантажити архів Google Takeout."
msgid "You tried to fork %{link_to_the_project} but it failed for the following reason:"
-msgstr ""
+msgstr "Ви намагалиÑÑ Ñтворити Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ (форк) %{link_to_the_project}, але воно не вдалоÑÑ Ð· наÑтупної причини:"
msgid "You will lose all changes you've made to this file. This action cannot be undone."
msgstr "Ви втратите вÑÑ– зміни, внеÑені вами в цей файл. Цю дію не можна ÑкаÑувати."
@@ -15753,7 +18357,7 @@ msgid "You will lose all the unstaged changes you've made in this project. This
msgstr "Ви втратите вÑÑ– неіндекÑовані зміни, внеÑені вами в цей проект. Цю дію не можна ÑкаÑувати."
msgid "You will need to update your local repositories to point to the new location."
-msgstr ""
+msgstr "Вам необхідно обновити Ñвої локальні репозиторії з тим, щоб вони вказували на нове розміщеннÑ."
msgid "You will not get any notifications via email"
msgstr "Ви не отримаєте ніÑких повідомлень по електронній пошті"
@@ -15762,7 +18366,7 @@ msgid "You will only receive notifications for the events you choose"
msgstr "Ви будете отримувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ про обрані вами події"
msgid "You will only receive notifications for threads you have participated in"
-msgstr "Ви будете отримувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ про тих темах, в Ñких ви брали учаÑÑ‚ÑŒ"
+msgstr "Ви будете отримувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ Ð´Ð»Ñ Ñ‚Ð¸Ñ… обговорень, в Ñких ви брали учаÑÑ‚ÑŒ"
msgid "You will receive notifications for any activity"
msgstr "Ви будете отримувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ будь-Ñкі дії"
@@ -15780,19 +18384,22 @@ msgid "You won't be able to pull or push project code via SSH until you add an S
msgstr "Ви не зможете відправлÑти та отримувати код проекту через SSH, поки не додаÑте в Ñвій профіль SSH ключ"
msgid "You'll be signed out from your current account automatically."
-msgstr ""
+msgstr "Ви автоматично вийдете з поточного облікового запиÑу."
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "Вам необхідно викориÑтовувати різні імена гілок Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ порівнÑннÑ."
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
msgid "You're not allowed to make changes to this project directly. A fork of this project is being created that you can make changes in, so you can submit a merge request."
-msgstr ""
+msgstr "Вам не дозволÑєтьÑÑ Ð²Ð½Ð¾Ñити зміни до цього проекту напрÑму. СтворюєтьÑÑ Ñ„Ð¾Ñ€Ðº цього проекту в Ñкому ви можете робити зміни з тим, щоб Ñтворювати запити на злиттÑ."
msgid "You're only seeing %{startTag}other activity%{endTag} in the feed. To add a comment, switch to one of the following options."
-msgstr ""
+msgstr "Ви бачите лише %{startTag}іншу активніÑÑ‚ÑŒ%{endTag} в каналі. Ð”Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ñ, виберіть одну з наÑтупних опцій."
msgid "You're receiving this email because %{reason}."
msgstr "Ви отримали цей електронний лиÑÑ‚, оÑкільки %{reason}."
@@ -15810,7 +18417,7 @@ msgid "YouTube"
msgstr "YouTube"
msgid "Your Commit Email will be used for web based operations, such as edits and merges."
-msgstr ""
+msgstr "Ваша адреÑа електронної пошти Ð´Ð»Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ–Ð² буде викориÑтовуватиÑÑ Ð´Ð»Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð½Ð¸Ñ… операцій, таких Ñк Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° злиттÑ."
msgid "Your Conversational Development Index gives an overview of how you are using GitLab from a feature perspective. View how you compare with other organizations, discover features you are not using, and learn best practices through blog posts and white papers."
msgstr ""
@@ -15824,8 +18431,11 @@ msgstr "Ваші ключі GPG (%{count})"
msgid "Your Groups"
msgstr "Ваші групи"
+msgid "Your New Personal Access Token"
+msgstr "Ваш новий перÑональний токен доÑтупу"
+
msgid "Your Primary Email will be used for avatar detection."
-msgstr ""
+msgstr "Ваша оÑновна адреÑа електронної пошти буде викориÑтовуватиÑÑ Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð²Ð°Ñ‚Ð°Ñ€Ñƒ."
msgid "Your Projects (default)"
msgstr "Ваші проекти (за замовчуваннÑм)"
@@ -15834,13 +18444,13 @@ msgid "Your Projects' Activity"
msgstr "ÐктивніÑÑ‚ÑŒ ваших проектів"
msgid "Your Public Email will be displayed on your public profile."
-msgstr ""
+msgstr "Ваша публічна адреÑа електронної пошти буде відображатиÑÑ Ð² публічному профілі."
msgid "Your SSH keys (%{count})"
msgstr "Ваші ключі SSH (%{count})"
-msgid "Your Todos"
-msgstr "Ваші ÐагадуваннÑ"
+msgid "Your To-Do List"
+msgstr "Ваш ÑпиÑок нагадувань"
msgid "Your U2F device did not send a valid JSON response."
msgstr "Ваш приÑтрій U2F не надіÑлав коректну відповідь JSON."
@@ -15852,7 +18462,7 @@ msgid "Your U2F device was registered!"
msgstr "Ваш приÑтрій U2F уÑпішно зареєÑтровано!"
msgid "Your access request to the %{source_type} has been withdrawn."
-msgstr ""
+msgstr "Ваш запит на Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до %{source_type} відкликано."
msgid "Your account uses dedicated credentials for the \"%{group_name}\" group and can only be updated through SSO."
msgstr ""
@@ -15879,13 +18489,13 @@ msgid "Your changes have been successfully committed."
msgstr "Ваші зміни уÑпішно закомічено."
msgid "Your comment could not be submitted! Please check your network connection and try again."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð½Ð°Ð´Ñ–Ñлати ваш коментар! Перевірте Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі та повторіть Ñпробу."
msgid "Your comment could not be updated! Please check your network connection and try again."
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ ваш коментар! Перевірте Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі та повторіть Ñпробу."
msgid "Your deployment services will be broken, you will need to manually fix the services after renaming."
-msgstr ""
+msgstr "Ваші ÑервіÑи Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð±ÑƒÐ´ÑƒÑ‚ÑŒ порушені, вам необхідно буде вручну Ñ—Ñ… виправити піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ."
msgid "Your device was successfully set up! Give it a name and register it with the GitLab server."
msgstr "Ваш приÑтрій уÑпішно налаштовано! Дайте йому ім'Ñ Ñ‚Ð° зареєÑтруйте його на Ñервері GitLab."
@@ -15909,7 +18519,10 @@ msgid "Your new SCIM token"
msgstr "Ваш новий токен SCIM"
msgid "Your new personal access token has been created."
-msgstr ""
+msgstr "Ваш новий перÑональний токен доÑтупу Ñтворено."
+
+msgid "Your pages are served under:"
+msgstr "Ваші Ñторінки показуютьÑÑ Ð½Ð°:"
msgid "Your password reset token has expired."
msgstr "Ваш токен Ð´Ð»Ñ ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ заÑтарів."
@@ -15921,7 +18534,13 @@ msgid "Your projects"
msgstr "Ваші проекти"
msgid "Your request for access has been queued for review."
-msgstr ""
+msgstr "Ваш запит на Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу поÑтавлено в чергу Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸."
+
+msgid "Zoom meeting added"
+msgstr "Zoom-зуÑтріч додано"
+
+msgid "Zoom meeting removed"
+msgstr "Zoom-зуÑтріч видалено"
msgid "a deleted user"
msgstr "видалений кориÑтувач"
@@ -15929,6 +18548,9 @@ msgstr "видалений кориÑтувач"
msgid "added %{created_at_timeago}"
msgstr "додано %{created_at_timeago}"
+msgid "added a Zoom call to this issue"
+msgstr "додано дзвінок Zoom до цієї задачі"
+
msgid "ago"
msgstr "тому"
@@ -15936,19 +18558,22 @@ msgid "allowed to fail"
msgstr "невдача дозволена"
msgid "already being used for another group or project milestone."
-msgstr ""
+msgstr "вже викориÑтовуєтьÑÑ Ð´Ð»Ñ Ñ–Ð½ÑˆÐ¾Ð³Ð¾ проектного або групового етапу."
msgid "already shared with this group"
-msgstr ""
+msgstr "вже доÑтупний в цій групі"
msgid "among other things"
msgstr "тощо"
+msgid "assign yourself"
+msgstr "призначити Ñамому Ñобі"
+
msgid "attach a new file"
msgstr "прикріпити новий файл"
msgid "authored"
-msgstr ""
+msgstr "автор"
msgid "branch name"
msgstr "ім'Ñ Ð³Ñ–Ð»ÐºÐ¸"
@@ -15957,19 +18582,28 @@ msgid "by"
msgstr "від"
msgid "cannot be changed if a personal project has container registry tags."
-msgstr ""
+msgstr "не може бути змінено Ñкщо в реєÑтрі контейнерів оÑобиÑтого проекту Ñ” теги."
msgid "cannot be enabled unless all domains have TLS certificates"
-msgstr ""
+msgstr "не може бути активовано, Ñкщо не вÑÑ– домени мають Ñертифікати TLS"
+
+msgid "cannot be in the same project"
+msgstr "не може бути в тому Ñамому проекті"
+
+msgid "cannot be modified"
+msgstr "не може бути змінено"
msgid "cannot block others"
-msgstr ""
+msgstr "не може блокувати інших"
msgid "cannot include leading slash or directory traversal."
-msgstr ""
+msgstr "не може починатиÑÑ Ñ–Ð· \"/\" або міÑтити директорії."
msgid "cannot itself be blocked"
-msgstr ""
+msgstr "не може блокувати Ñам Ñебе"
+
+msgid "cannot merge"
+msgstr "не може виконувати злиттÑ"
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ñ–Ð² %{linkEndTag}"
@@ -16088,6 +18722,9 @@ msgstr "Ð’ÑÑ– типи звітів"
msgid "ciReport|All severities"
msgstr "Ð’ÑÑ– рівні"
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr "Ðвтоматично заÑтоÑувати патч у новій гілці"
+
msgid "ciReport|Class"
msgstr "КлаÑ"
@@ -16106,12 +18743,12 @@ msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð°"
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ñ–Ð² виÑвлÑÑ” відомі вразливоÑÑ‚Ñ– у ваших Docker образах."
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
+msgstr "Створити запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— цього Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ð°Ð±Ð¾ завантажити Ñ– заÑтоÑувати патч вручну."
+
msgid "ciReport|Create issue"
msgstr "Створити задачу"
-msgid "ciReport|Create merge request"
-msgstr "Створити запит на злиттÑ"
-
msgid "ciReport|DAST"
msgstr "DAST"
@@ -16127,11 +18764,11 @@ msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей"
msgid "ciReport|Description"
msgstr "ОпиÑ"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
-msgstr "Завантажити або заÑтоÑувати патч, щоб виправити цю вразливіÑÑ‚ÑŒ."
+msgid "ciReport|Download patch to resolve"
+msgstr "завантажити патч Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ"
-msgid "ciReport|Download patch"
-msgstr "Завантажити патч"
+msgid "ciReport|Download the patch to apply it manually"
+msgstr "Завантажити патч Ñ– заÑтоÑувати його вручну"
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
msgstr "Динамічне теÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ заÑтоÑунків (DAST) виÑвлÑÑ” відомі вразливоÑÑ‚Ñ– у вашому веб-заÑтоÑунку."
@@ -16151,37 +18788,14 @@ msgstr "Ідентифікатори"
msgid "ciReport|Image"
msgstr "Образ"
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr "Реалізувати це рішеннÑ, Ñтворивши запит на злиттÑ"
-
msgid "ciReport|Instances"
msgstr "ІнÑтанÑи"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr "ДоÑлідити цю вразливіÑÑ‚ÑŒ, Ñтворивши задачу"
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про взаємодію з звітами безпеки (Ðльфа)."
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d ліцензію лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸-джерела"
-msgstr[1] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d ліцензії лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸-джерела"
-msgstr[2] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d ліцензій лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸-джерела"
-msgstr[3] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d ліцензій лише Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸-джерела"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d нову ліцензію"
-msgstr[1] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d нові ліцензії"
-msgstr[2] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d нових ліцензій"
-msgstr[3] "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми виÑвило %d нових ліцензій"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми не виÑвило ліцензій Ð´Ð»Ñ Ð³Ñ–Ð»ÐºÐ¸-джерела"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñми не виÑвило нових ліцензій"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr "ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про взаємодію з звітами безпеки"
msgid "ciReport|Links"
msgstr "ПоÑиланнÑ"
@@ -16207,6 +18821,9 @@ msgstr "Ðемає змін у показниках продуктивноÑÑ‚Ñ–
msgid "ciReport|Performance metrics"
msgstr "Показники продуктивноÑÑ‚Ñ–"
+msgid "ciReport|Resolve with merge request"
+msgstr "Вирішити за допомогою запиту на злиттÑ"
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16268,6 +18885,9 @@ msgstr[3] "ВикориÑтовуєтьÑÑ %{packagesString} Ñ– %{lastPackage}"
msgid "ciReport|View full report"
msgstr "ПереглÑнути повний звіт"
+msgid "comment"
+msgstr "коментар"
+
msgid "commented on %{link_to_project}"
msgstr "прокоментовано в %{link_to_project}"
@@ -16310,11 +18930,14 @@ msgstr "з'єднаннÑ"
msgid "could not read private key, is the passphrase correct?"
msgstr "неможливо зчитати приватний ключ, чи є пароль правильним?"
+msgid "created"
+msgstr "Ñтворено"
+
msgid "customize"
msgstr "налаштувати"
msgid "date must not be after 9999-12-31"
-msgstr ""
+msgstr "дата не повинна бути пізніше 9999-12-31"
msgid "day"
msgid_plural "days"
@@ -16326,22 +18949,18 @@ msgstr[3] "днів"
msgid "deleted"
msgstr "видалено"
-msgid "deploy token"
-msgstr "токен Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ"
+msgid "deploy"
+msgstr "розгортаннÑ"
+
+msgid "design"
+msgstr "дизайн"
msgid "detached"
-msgstr ""
+msgstr "відділена"
msgid "disabled"
msgstr "вимкнено"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] "Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾"
-msgstr[1] "Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾"
-msgstr[2] "обговорень завершено"
-msgstr[3] "обговорень завершено"
-
msgid "done"
msgstr "готово"
@@ -16352,17 +18971,29 @@ msgstr[1] "чернетки"
msgstr[2] "чернеток"
msgstr[3] "чернеток"
+msgid "e.g. %{token}"
+msgstr "напр. %{token}"
+
msgid "element is not a hierarchy"
-msgstr ""
+msgstr "елемент відÑутній в ієрархії"
+
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr "адреÑа електронної пошти \"%{email}\" не відповідає дозволеному домену \"%{email_domain}\""
msgid "enabled"
msgstr "увімкнено"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
-msgstr ""
+msgstr "зашифровано: має бути :required, :optional або :migrating!"
+
+msgid "entries cannot be larger than 255 characters"
+msgstr "елементи не можуть бути довшими за 255 Ñимволів"
+
+msgid "entries cannot be nil"
+msgstr "елементи не можуть бути порожніми"
-msgid "epic"
-msgstr "епік"
+msgid "entries cannot contain HTML tags"
+msgstr "елементи не можуть міÑтити тегів HTML"
msgid "error"
msgstr "помилка"
@@ -16374,10 +19005,10 @@ msgid "estimateCommand|%{slash_command} will update the estimated time with the
msgstr "%{slash_command} перезапиÑує запланований Ñ‡Ð°Ñ Ð¾Ñтаннім значеннÑм."
msgid "expired on %{milestone_due_date}"
-msgstr ""
+msgstr "закінчено %{milestone_due_date}"
msgid "expires on %{milestone_due_date}"
-msgstr ""
+msgstr "закінчуєтьÑÑ %{milestone_due_date}"
msgid "failed"
msgstr "невдало"
@@ -16406,6 +19037,9 @@ msgstr "група"
msgid "has already been taken"
msgstr "уже викориÑтовуєтьÑÑ"
+msgid "help"
+msgstr "допомога"
+
msgid "here"
msgstr "тут"
@@ -16441,7 +19075,7 @@ msgid "invalid milestone state `%{state}`"
msgstr "некоректний Ñтан етапу '%{state}'"
msgid "is an invalid IP address range"
-msgstr ""
+msgstr "Ñ” недопуÑтимим діапазоном IP-адреÑ"
msgid "is enabled."
msgstr "увімкнено."
@@ -16452,32 +19086,32 @@ msgstr "неправильний через наÑвніÑÑ‚ÑŒ блокуванÑ
msgid "is invalid because there is upstream lock"
msgstr "неправильний через наÑвніÑÑ‚ÑŒ блокувань на вищих рівнÑÑ…"
+msgid "is not a descendant of the Group owning the template"
+msgstr "не Ñ” нащадком групи, Ñкій належить шаблон"
+
msgid "is not a valid X509 certificate."
msgstr "не відповідний Ñертифікат X509."
msgid "is not an email you own"
msgstr "не Ñ” адреÑою електронної пошти, Ñкою ви володієте"
-msgid "is out of the hierarchy of the Group owning the template"
-msgstr ""
+msgid "is too long (maximum is 1000 entries)"
+msgstr "Ñ” занадто довгим (макÑимум Ñкладає 1000 елементів)"
msgid "issue"
msgstr "задача"
-msgid "issue boards"
-msgstr "дошки Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡"
-
msgid "it is stored externally"
-msgstr ""
+msgstr "зберігаєтьÑÑ Ð·Ð¾Ð²Ð½Ñ–"
msgid "it is stored in LFS"
msgstr "зберігаєтьÑÑ Ð² LFS"
msgid "it is too large"
-msgstr ""
+msgstr "він є завеликим"
msgid "jigsaw is not defined"
-msgstr ""
+msgstr "jigsaw не визначено"
msgid "latest"
msgstr "оÑтанній"
@@ -16491,15 +19125,24 @@ msgstr "оÑÑ‚Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñ"
msgid "leave %{group_name}"
msgstr "залишити %{group_name}"
-msgid "license management"
-msgstr "керувати ліцензіÑми"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "заблоковано %{path_lock_user_name} %{created_at}"
+msgid "log in"
+msgstr "увійти"
+
msgid "manual"
msgstr "вручну"
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð°Ñ‚ÐµÐ¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñимволів в цьому блоці займає занадто багато чаÑу Ñ– він не може бути коректно показаний. Також з міркувань швидкодії математичні блоки обмежені %{maxChars} Ñимволами. ÐамагайтеÑÑ Ñ€Ð¾Ð·Ð±Ð¸Ð²Ð°Ñ‚Ð¸ великі формули Ñ– математичні блоки на кілька чаÑтин або викориÑтовувати зображеннÑ."
+
+msgid "math|There was an error rendering this math block"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð°Ñ‚ÐµÐ¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ блоку"
+
+msgid "may expose confidential information"
+msgstr "може розкрити конфіденційну інформацію"
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "запит на злиттÑ"
@@ -16522,6 +19165,15 @@ msgstr "%{commitCount} буде додано в %{targetBranch}."
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr "1 коміт-злиттÑ"
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr "Ðаразі немає жодних змін в гілці-джерелі цього запиту на злиттÑ. Будь лаÑка, відправте нові коміти або викориÑтовуйте іншу гілку."
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr "Зацікавлені Ñторони за бажаннÑм навіть можуть робити внеÑки шлÑхом Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚Ñ–Ð²."
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr "Запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑŽÑ‚ÑŒ запропонувати зміни Ñкі ви зробили в проекті та обговорити ці зміни з іншими."
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "Будь лаÑка відновіть Ñ—Ñ— або викориÑтовуйте іншу %{missingBranchName} гілку"
@@ -16538,10 +19190,10 @@ msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasis
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ %{metricsLinkStart} пам’ÑÑ‚Ñ– %{metricsLinkEnd} %{emphasisStart} не змінилоÑÑ %{emphasisEnd} %{memoryFrom}Мб"
msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
-msgstr ""
+msgstr "Додано до ланцюжка змін на міÑце %{mergeTrainPosition}"
msgid "mrWidget|Added to the merge train by"
-msgstr ""
+msgstr "Додано до ланцюжка змін"
msgid "mrWidget|Allows commits from members who can merge to the target branch"
msgstr "ДозволÑÑ” коміти від учаÑників, Ñкі можуть зливати до цільової гілки"
@@ -16556,7 +19208,7 @@ msgid "mrWidget|An error occurred while submitting your approval."
msgstr "Помилка при обробці вашого затвердженнÑ."
msgid "mrWidget|Approval password is invalid."
-msgstr ""
+msgstr "Пароль Ð´Ð»Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñ” недійÑним."
msgid "mrWidget|Approve"
msgstr "Затвердити"
@@ -16613,7 +19265,7 @@ msgid "mrWidget|Fast-forward merge is not possible. To merge this request, first
msgstr "Fast-forward Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ. Ð”Ð»Ñ Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñ†ÑŒÐ¾Ð³Ð¾ запиту, Ñпочатку виконайте локальний rebase."
msgid "mrWidget|Fork merge requests do not create merge request pipelines which validate a post merge result"
-msgstr ""
+msgstr "Запити на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñƒ форках не Ñтворюють конвеєри, Ñкі перевірÑÑŽÑ‚ÑŒ результат піÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð»Ð¸Ñ‚Ñ‚Ñ"
msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
msgstr "Якщо гілка %{branch} Ñ–Ñнує у вашому локальному репозиторії, то ви можете заÑтоÑувати цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ за допомогою"
@@ -16634,7 +19286,7 @@ msgid "mrWidget|Merge failed."
msgstr "Ð—Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¾Ð¹ÑˆÐ»Ð¾ невдало."
msgid "mrWidget|Merge failed: %{mergeError}. Please try again."
-msgstr ""
+msgstr "Ð—Ð»Ð¸Ñ‚Ñ‚Ñ Ð½ÐµÑƒÑпішне: %{mergeError}. Будь лаÑка, Ñпробуйте знову."
msgid "mrWidget|Merge locally"
msgstr "Злити локально"
@@ -16645,6 +19297,9 @@ msgstr "Запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð¾."
msgid "mrWidget|Merged by"
msgstr "Злито"
+msgid "mrWidget|More information"
+msgstr "Детальніше"
+
msgid "mrWidget|No approval required"
msgstr "Ð—Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ потрібне"
@@ -16673,11 +19328,14 @@ msgid "mrWidget|Refreshing now"
msgstr "ВідбуваєтьÑÑ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ"
msgid "mrWidget|Remove from merge train"
-msgstr ""
+msgstr "Видалити із ланцюжка змін"
msgid "mrWidget|Request to merge"
msgstr "Запит на злиттÑ"
+msgid "mrWidget|Resolve WIP status"
+msgstr "ЗнÑти ÑÑ‚Ð°Ñ‚ÑƒÑ WIP"
+
msgid "mrWidget|Resolve conflicts"
msgstr "Вирішити конфлікти"
@@ -16729,8 +19387,8 @@ msgstr "Гілку-джерело не буде видалено"
msgid "mrWidget|There are merge conflicts"
msgstr "Ñ–Ñнують конфлікти при злитті"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "ПриÑутні незавершені обговореннÑ. Будь лаÑка завершіть Ñ—Ñ…"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr "ІÑнують незакриті обговореннÑ. Будь лаÑка, закрийте Ñ—Ñ…"
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr "Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð·Ð»Ð¸Ð²Ð°Ñ” зміни з цільової гілки до гілки-джерела. Її не можна викориÑтовувати, оÑкільки гілка-джерело Ñ” захищеною."
@@ -16741,9 +19399,21 @@ msgstr "ВідбулаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при автоматичному зл
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "Запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð² процеÑÑ– виконаннÑ"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr "Цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð±ÑƒÐ´Ðµ додано до ланцюжка змін піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾, Ñк конвеєр %{linkStart}#%{pipelineId}%{linkEnd} уÑпішно завершитьÑÑ."
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr "Цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ñтворить ланцюжок змін піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾, Ñк конвеєр %{linkStart}#%{pipelineId}%{linkEnd} уÑпішно завершитьÑÑ."
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "Цей проект заархівований, доÑтуп до запиÑу було відключено"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr "Ð”Ð»Ñ Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ запиту на злиттÑ, введіть ваш пароль. Цей проект вимагає Ð¿Ñ€Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— Ð´Ð»Ñ Ð²ÑÑ–Ñ… затверджень."
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr "Коли цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð±ÑƒÐ´Ðµ готовий, видаліть Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ \"WIP:\" із заголовку, щоб можна було виконати злиттÑ"
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "Ви не можете безпоÑередньо редагувати цей проект. Будь лаÑка, зробіть форк, щоб внеÑти зміни."
@@ -16753,6 +19423,9 @@ msgstr "Тепер ви можете видалити гілку-джерело"
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "Ви можете прийнÑти цей запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ за допомогою"
+msgid "mrWidget|Your password"
+msgstr "Ваш пароль"
+
msgid "mrWidget|branch does not exist."
msgstr "гілка не Ñ–Ñнує."
@@ -16763,13 +19436,13 @@ msgid "mrWidget|into"
msgstr "в"
msgid "mrWidget|to be added to the merge train when the pipeline succeeds"
-msgstr ""
+msgstr "буде додано до ланцюжка змін піÑÐ»Ñ ÑƒÑпішного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð°"
msgid "mrWidget|to be merged automatically when the pipeline succeeds"
msgstr "буде злито автоматично, коли конвеєр завершитьÑÑ ÑƒÑпішно"
msgid "mrWidget|to start a merge train when the pipeline succeeds"
-msgstr ""
+msgstr "Ñтворити ланцюжок змін піÑÐ»Ñ ÑƒÑпішного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð°"
msgid "must be greater than start date"
msgstr "повинна бути пізніша за дату початку"
@@ -16784,11 +19457,17 @@ msgid "new merge request"
msgstr "Ðовий запит на злиттÑ"
msgid "no contributions"
-msgstr ""
+msgstr "немає внеÑків"
+
+msgid "no one can merge"
+msgstr "ніхто не може виконати злиттÑ"
msgid "none"
msgstr "немає"
+msgid "not found"
+msgstr "не знайдено"
+
msgid "notification emails"
msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾ÑŽ поштою"
@@ -16801,8 +19480,8 @@ msgstr "%{item}, %{nextItem}"
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr "%{item}, Ñ– %{lastItem}"
-msgid "or"
-msgstr "або"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr "або %{link_start}Ñтоврити новий обліковий Ð·Ð°Ð¿Ð¸Ñ Google%{link_end}"
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16821,8 +19500,11 @@ msgstr[3] "батьківÑький об’єктів"
msgid "password"
msgstr "пароль"
-msgid "personal access token"
-msgstr "оÑобиÑтий токен доÑтупу"
+msgid "pending comment"
+msgstr "коментар в очікуванні"
+
+msgid "pipeline"
+msgstr "конвеєр"
msgid "point"
msgid_plural "points"
@@ -16838,7 +19520,7 @@ msgid "private key does not match certificate."
msgstr "приватний ключ не відповідає Ñертифікату."
msgid "processing"
-msgstr ""
+msgstr "в процеÑÑ–"
msgid "project"
msgid_plural "projects"
@@ -16847,12 +19529,18 @@ msgstr[1] "проекти"
msgstr[2] "проектів"
msgstr[3] "проектів"
+msgid "project avatar"
+msgstr "аватар проекту"
+
msgid "quick actions"
msgstr "швидкі дії"
msgid "register"
msgstr "зареєÑтруватиÑÑ"
+msgid "released %{time}"
+msgstr "випущено %{time}"
+
msgid "remaining"
msgstr "залишилоÑÑŒ"
@@ -16865,8 +19553,11 @@ msgstr "видалити заплановану дату завершеннÑ"
msgid "remove weight"
msgstr "видалити вагу"
+msgid "removed a Zoom call from this issue"
+msgstr "видалено дзвінок Zoom із цієї задачі"
+
msgid "rendered diff"
-msgstr ""
+msgstr "відображена різницÑ"
msgid "reply"
msgid_plural "replies"
@@ -16876,7 +19567,7 @@ msgstr[2] "відповідей"
msgstr[3] "відповідей"
msgid "reset it."
-msgstr ""
+msgstr "Ñкинути його."
msgid "score"
msgstr "результат"
@@ -16906,7 +19597,7 @@ msgid "severity|Unknown"
msgstr "Ðевідомий"
msgid "should be greater than or equal to %{access} inherited membership from group %{group_name}"
-msgstr ""
+msgstr "має бути вищим або рівним %{access}, уÑпадкованому членÑтву з групи %{group_name}"
msgid "show less"
msgstr "показати менше"
@@ -16921,10 +19612,10 @@ msgid "source"
msgstr "джерело"
msgid "source diff"
-msgstr ""
+msgstr "Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ð² коді"
msgid "specified top is not part of the tree"
-msgstr ""
+msgstr "вказана вершина не Ñ” чаÑтиною дерева"
msgid "spendCommand|%{slash_command} will update the sum of the time spent."
msgstr "%{slash_command} оновлює Ñуму витраченого чаÑу."
@@ -16953,15 +19644,40 @@ msgstr "ÑинтакÑÐ¸Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ð¹"
msgid "this document"
msgstr "цей документ"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] "Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾"
+msgstr[1] "Ð¾Ð±Ð³Ð¾Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ–"
+msgstr[2] "обговорень закрито"
+msgstr[3] "обговорень закрито"
+
msgid "to help your contributors communicate effectively!"
msgstr "щоб допомогти вашим контриб’юторам ефективно ÑпілкуватиÑÑ!"
+msgid "to list"
+msgstr "в ÑпиÑок"
+
+msgid "toggle collapse"
+msgstr "згорнути/розгорнути"
+
+msgid "toggle dropdown"
+msgstr "розкрити чи закрити випадаючий ÑпиÑок"
+
msgid "triggered"
msgstr "запущено"
+msgid "unicode domains should use IDNA encoding"
+msgstr "домени в unicode повинні викориÑтовувати ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ IDNA"
+
msgid "updated"
msgstr "оновлено"
+msgid "updated %{time_ago}"
+msgstr "оновлено %{time_ago}"
+
+msgid "user avatar"
+msgstr "аватар кориÑтувача"
+
msgid "username"
msgstr "ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
@@ -16971,11 +19687,14 @@ msgstr "викориÑтовує клаÑтери Kubernetes Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€
msgid "verify ownership"
msgstr "перевірити право влаÑноÑÑ‚Ñ–"
+msgid "version %{versionIndex}"
+msgstr "верÑÑ–Ñ %{versionIndex}"
+
msgid "via %{closed_via}"
-msgstr ""
+msgstr "через %{closed_via}"
msgid "via merge request %{link}"
-msgstr ""
+msgstr "через запит на Ð·Ð»Ð¸Ñ‚Ñ‚Ñ %{link}"
msgid "view it on GitLab"
msgstr "переглÑнути це на GitLab"
@@ -16984,14 +19703,20 @@ msgid "view the blob"
msgstr "переглÑнути бінарні дані"
msgid "vulnerability|Add a comment or reason for dismissal"
-msgstr ""
+msgstr "Додати коментар або причину Ð´Ð»Ñ Ð²Ñ–Ð´Ñ…Ð¸Ð»ÐµÐ½Ð½Ñ"
+
+msgid "vulnerability|Add comment"
+msgstr "Додати коментар"
msgid "vulnerability|Add comment & dismiss"
-msgstr ""
+msgstr "Додати коментар та відхилити"
msgid "vulnerability|Dismiss vulnerability"
msgstr "Відхилити вразливіÑÑ‚ÑŒ"
+msgid "vulnerability|Save comment"
+msgstr "Зберегти коментар"
+
msgid "vulnerability|Undo dismiss"
msgstr "Відмінити відхиленнÑ"
diff --git a/locale/unfound_translations.rb b/locale/unfound_translations.rb
index 0826d64049b..1ae0958c43c 100644
--- a/locale/unfound_translations.rb
+++ b/locale/unfound_translations.rb
@@ -14,3 +14,4 @@ N_('NotificationEvent|Close merge request')
N_('NotificationEvent|Reassign merge request')
N_('NotificationEvent|Merge merge request')
N_('NotificationEvent|Failed pipeline')
+N_('NotificationEvent|New release')
diff --git a/locale/vi_VN/gitlab.po b/locale/vi_VN/gitlab.po
new file mode 100644
index 00000000000..a7249349838
--- /dev/null
+++ b/locale/vi_VN/gitlab.po
@@ -0,0 +1,19417 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: gitlab-ee\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: GitLab (gitlab)\n"
+"Language-Team: Vietnamese\n"
+"Language: vi_VN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: gitlab-ee\n"
+"X-Crowdin-Language: vi\n"
+"X-Crowdin-File: /master/locale/gitlab.pot\n"
+"PO-Revision-Date: 2019-09-24 10:16\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
+
+msgid " Please sign in."
+msgstr ""
+
+msgid " Try to %{action} this file again."
+msgstr ""
+
+msgid " You need to do this before %{grace_period_deadline}."
+msgstr ""
+
+msgid " and"
+msgstr ""
+
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
+msgid " degraded on %d point"
+msgid_plural " degraded on %d points"
+msgstr[0] ""
+
+msgid " improved on %d point"
+msgid_plural " improved on %d points"
+msgstr[0] ""
+
+msgid " or "
+msgstr ""
+
+msgid " or <!merge request id>"
+msgstr ""
+
+msgid " or <#epic id>"
+msgstr ""
+
+msgid " or <#issue id>"
+msgstr ""
+
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
+msgid "%d comment"
+msgid_plural "%d comments"
+msgstr[0] ""
+
+msgid "%d commit"
+msgid_plural "%d commits"
+msgstr[0] ""
+
+msgid "%d commit behind"
+msgid_plural "%d commits behind"
+msgstr[0] ""
+
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+
+msgid "%d commits"
+msgstr ""
+
+msgid "%d contribution"
+msgid_plural "%d contributions"
+msgstr[0] ""
+
+msgid "%d exporter"
+msgid_plural "%d exporters"
+msgstr[0] ""
+
+msgid "%d failed test result"
+msgid_plural "%d failed test results"
+msgstr[0] ""
+
+msgid "%d fixed test result"
+msgid_plural "%d fixed test results"
+msgstr[0] ""
+
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+
+msgid "%d issue"
+msgid_plural "%d issues"
+msgstr[0] ""
+
+msgid "%d issue selected"
+msgid_plural "%d issues selected"
+msgstr[0] ""
+
+msgid "%d layer"
+msgid_plural "%d layers"
+msgstr[0] ""
+
+msgid "%d merge request"
+msgid_plural "%d merge requests"
+msgstr[0] ""
+
+msgid "%d merge request that you don't have access to."
+msgid_plural "%d merge requests that you don't have access to."
+msgstr[0] ""
+
+msgid "%d metric"
+msgid_plural "%d metrics"
+msgstr[0] ""
+
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
+msgid "%d more comment"
+msgid_plural "%d more comments"
+msgstr[0] ""
+
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
+msgid "%d staged change"
+msgid_plural "%d staged changes"
+msgstr[0] ""
+
+msgid "%d unstaged change"
+msgid_plural "%d unstaged changes"
+msgstr[0] ""
+
+msgid "%s additional commit has been omitted to prevent performance issues."
+msgid_plural "%s additional commits have been omitted to prevent performance issues."
+msgstr[0] ""
+
+msgid "%{actionText} & %{openOrClose} %{noteable}"
+msgstr ""
+
+msgid "%{authorsName}'s thread"
+msgstr ""
+
+msgid "%{commit_author_link} authored %{commit_timeago}"
+msgstr ""
+
+msgid "%{count} LOC/commit"
+msgstr ""
+
+msgid "%{count} approval required from %{name}"
+msgid_plural "%{count} approvals required from %{name}"
+msgstr[0] ""
+
+msgid "%{count} approvals from %{name}"
+msgstr ""
+
+msgid "%{count} files touched"
+msgstr ""
+
+msgid "%{count} more"
+msgstr ""
+
+msgid "%{count} more assignees"
+msgstr ""
+
+msgid "%{count} of %{required} approvals from %{name}"
+msgstr ""
+
+msgid "%{count} of %{total}"
+msgstr ""
+
+msgid "%{count} participant"
+msgid_plural "%{count} participants"
+msgstr[0] ""
+
+msgid "%{count} pending comment"
+msgid_plural "%{count} pending comments"
+msgstr[0] ""
+
+msgid "%{duration}ms"
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
+msgstr ""
+
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
+msgid "%{filePath} deleted"
+msgstr ""
+
+msgid "%{firstLabel} +%{labelCount} more"
+msgstr ""
+
+msgid "%{gitlab_ci_yml} not found in this commit"
+msgstr ""
+
+msgid "%{group_docs_link_start}Groups%{group_docs_link_end} allow you to manage and collaborate across multiple projects. Members of a group have access to all of its projects."
+msgstr ""
+
+msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
+msgstr ""
+
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
+msgid "%{issuableType} will be removed! Are you sure?"
+msgstr ""
+
+msgid "%{label_for_message} unavailable"
+msgstr ""
+
+msgid "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free, automated, and open certificate authority (CA), that give digital certificates in order to enable HTTPS (SSL/TLS) for websites."
+msgstr ""
+
+msgid "%{level_name} is not allowed in a %{group_level_name} group."
+msgstr ""
+
+msgid "%{level_name} is not allowed since the fork source project has lower visibility."
+msgstr ""
+
+msgid "%{link_start}Read more%{link_end} about role permissions"
+msgstr ""
+
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
+msgid "%{loadingIcon} Started"
+msgstr ""
+
+msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
+msgstr ""
+
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
+msgid "%{mrText}, this issue will be closed automatically."
+msgstr ""
+
+msgid "%{name} contained %{resultsString}"
+msgstr ""
+
+msgid "%{name} found %{resultsString}"
+msgstr ""
+
+msgid "%{name}'s avatar"
+msgstr ""
+
+msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
+msgstr ""
+
+msgid "%{openOrClose} %{noteable}"
+msgstr ""
+
+msgid "%{percent}%% complete"
+msgstr ""
+
+msgid "%{service_title} activated."
+msgstr ""
+
+msgid "%{service_title} settings saved, but not activated."
+msgstr ""
+
+msgid "%{size} GiB"
+msgstr ""
+
+msgid "%{size} KiB"
+msgstr ""
+
+msgid "%{size} MiB"
+msgstr ""
+
+msgid "%{size} bytes"
+msgstr ""
+
+msgid "%{spammable_titlecase} was submitted to Akismet successfully."
+msgstr ""
+
+msgid "%{state} epics"
+msgstr ""
+
+msgid "%{strong_start}%{branch_count}%{strong_end} Branch"
+msgid_plural "%{strong_start}%{branch_count}%{strong_end} Branches"
+msgstr[0] ""
+
+msgid "%{strong_start}%{commit_count}%{strong_end} Commit"
+msgid_plural "%{strong_start}%{commit_count}%{strong_end} Commits"
+msgstr[0] ""
+
+msgid "%{strong_start}%{human_size}%{strong_end} Files"
+msgstr ""
+
+msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
+msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
+msgstr[0] ""
+
+msgid "%{tabname} changed"
+msgstr ""
+
+msgid "%{text} %{files}"
+msgid_plural "%{text} %{files} files"
+msgstr[0] ""
+
+msgid "%{text} is available"
+msgstr ""
+
+msgid "%{title} %{operator} %{threshold}"
+msgstr ""
+
+msgid "%{title} changes"
+msgstr ""
+
+msgid "%{unstaged} unstaged and %{staged} staged changes"
+msgstr ""
+
+msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
+msgstr ""
+
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
+msgid "%{user_name} profile page"
+msgstr ""
+
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
+msgid "%{verb} %{time_spent_value} spent time."
+msgstr ""
+
+msgid "'%{level}' is not a valid visibility level"
+msgstr ""
+
+msgid "'%{source}' is not a import source"
+msgstr ""
+
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
+msgid "(%d closed)"
+msgid_plural "(%d closed)"
+msgstr[0] ""
+
+msgid "(%{mrCount} merged)"
+msgstr ""
+
+msgid "(No changes)"
+msgstr ""
+
+msgid "(Show all)"
+msgstr ""
+
+msgid "(check progress)"
+msgstr ""
+
+msgid "(external source)"
+msgstr ""
+
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
+msgid "+ %{count} more"
+msgstr ""
+
+msgid "+ %{moreCount} more"
+msgstr ""
+
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
+msgid "+%{extraOptionCount} more"
+msgstr ""
+
+msgid ", or "
+msgstr ""
+
+msgid "- Runner is active and can process any new jobs"
+msgstr ""
+
+msgid "- Runner is paused and will not receive any new jobs"
+msgstr ""
+
+msgid "- show less"
+msgstr ""
+
+msgid "0 for unlimited"
+msgstr ""
+
+msgid "1 %{type} addition"
+msgid_plural "%{count} %{type} additions"
+msgstr[0] ""
+
+msgid "1 %{type} modification"
+msgid_plural "%{count} %{type} modifications"
+msgstr[0] ""
+
+msgid "1 Day"
+msgid_plural "%d Days"
+msgstr[0] ""
+
+msgid "1 closed issue"
+msgid_plural "%{issues} closed issues"
+msgstr[0] ""
+
+msgid "1 closed merge request"
+msgid_plural "%{merge_requests} closed merge requests"
+msgstr[0] ""
+
+msgid "1 day"
+msgstr ""
+
+msgid "1 group"
+msgid_plural "%d groups"
+msgstr[0] ""
+
+msgid "1 merged merge request"
+msgid_plural "%{merge_requests} merged merge requests"
+msgstr[0] ""
+
+msgid "1 open issue"
+msgid_plural "%{issues} open issues"
+msgstr[0] ""
+
+msgid "1 open merge request"
+msgid_plural "%{merge_requests} open merge requests"
+msgstr[0] ""
+
+msgid "1 pipeline"
+msgid_plural "%d pipelines"
+msgstr[0] ""
+
+msgid "1 role"
+msgid_plural "%d roles"
+msgstr[0] ""
+
+msgid "1 user"
+msgid_plural "%d users"
+msgstr[0] ""
+
+msgid "1 week"
+msgstr ""
+
+msgid "1-9 contributions"
+msgstr ""
+
+msgid "10-19 contributions"
+msgstr ""
+
+msgid "1st contribution!"
+msgstr ""
+
+msgid "20-29 contributions"
+msgstr ""
+
+msgid "2FA"
+msgstr ""
+
+msgid "2FADevice|Registered On"
+msgstr ""
+
+msgid "3 days"
+msgstr ""
+
+msgid "3 hours"
+msgstr ""
+
+msgid "30 minutes"
+msgstr ""
+
+msgid "30+ contributions"
+msgstr ""
+
+msgid "403|Please contact your GitLab administrator to get permission."
+msgstr ""
+
+msgid "403|You don't have the permission to access this page."
+msgstr ""
+
+msgid "404|Make sure the address is correct and the page hasn't moved."
+msgstr ""
+
+msgid "404|Page Not Found"
+msgstr ""
+
+msgid "404|Please contact your GitLab administrator if you think this is a mistake."
+msgstr ""
+
+msgid "8 hours"
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"@johnsmith\"</code> will add \"By <a href=\"#\">@johnsmith</a>\" to all issues and comments originally created by johnsmith@example.com, and will set <a href=\"#\">@johnsmith</a> as the assignee on all issues originally assigned to johnsmith@example.com."
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"John Smith\"</code> will add \"By John Smith\" to all issues and comments originally created by johnsmith@example.com."
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"johnsm...@example.com\"</code> will add \"By johnsm...@example.com\" to all issues and comments originally created by johnsmith@example.com. The email address or username is masked to ensure the user's privacy."
+msgstr ""
+
+msgid "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> will add \"By <a href=\"#\">johnsmith@example.com</a>\" to all issues and comments originally created by johnsmith@example.com. By default, the email address or username is masked to ensure the user's privacy. Use this option if you want to show the full email address."
+msgstr ""
+
+msgid "<no name set>"
+msgstr ""
+
+msgid "<no scopes selected>"
+msgstr ""
+
+msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
+msgstr ""
+
+msgid "<strong>%{created_count}</strong> created, <strong>%{accepted_count}</strong> accepted."
+msgstr ""
+
+msgid "<strong>%{created_count}</strong> created, <strong>%{closed_count}</strong> closed."
+msgstr ""
+
+msgid "<strong>%{group_name}</strong> group members"
+msgstr ""
+
+msgid "<strong>%{pushes}</strong> pushes, more than <strong>%{commits}</strong> commits by <strong>%{people}</strong> contributors."
+msgstr ""
+
+msgid "<strong>Deletes</strong> source branch"
+msgstr ""
+
+msgid "A 'Runner' is a process which runs a job. You can set up as many Runners as you need."
+msgstr ""
+
+msgid "A .NET Core console application template, customizable for any .NET Core project"
+msgstr ""
+
+msgid "A GitBook site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Hexo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Hugo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
+msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
+msgstr ""
+
+msgid "A default branch cannot be chosen for an empty project."
+msgstr ""
+
+msgid "A deleted user"
+msgstr ""
+
+msgid "A fork is a copy of a project.<br />Forking a repository allows you to make changes without affecting the original project."
+msgstr ""
+
+msgid "A member of the abuse team will review your report as soon as possible."
+msgstr ""
+
+msgid "A new branch will be created in your fork and a new merge request will be started."
+msgstr ""
+
+msgid "A new impersonation token has been created."
+msgstr ""
+
+msgid "A plain HTML site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
+msgstr ""
+
+msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}."
+msgstr ""
+
+msgid "A ready-to-go template for use with Android apps."
+msgstr ""
+
+msgid "A ready-to-go template for use with iOS Swift apps."
+msgstr ""
+
+msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
+msgstr ""
+
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
+msgid "A user with write access to the source branch selected this option"
+msgstr ""
+
+msgid "API Help"
+msgstr ""
+
+msgid "API Token"
+msgstr ""
+
+msgid "Abort"
+msgstr ""
+
+msgid "About GitLab"
+msgstr ""
+
+msgid "About GitLab CE"
+msgstr ""
+
+msgid "About auto deploy"
+msgstr ""
+
+msgid "About this feature"
+msgstr ""
+
+msgid "Abuse Reports"
+msgstr ""
+
+msgid "Abuse reports"
+msgstr ""
+
+msgid "Accept invitation"
+msgstr ""
+
+msgid "Accept terms"
+msgstr ""
+
+msgid "Accepted MR"
+msgstr ""
+
+msgid "Access Tokens"
+msgstr ""
+
+msgid "Access denied for your LDAP account."
+msgstr ""
+
+msgid "Access denied! Please verify you can add deploy keys to this repository."
+msgstr ""
+
+msgid "Access expiration date"
+msgstr ""
+
+msgid "Access forbidden. Check your access level."
+msgstr ""
+
+msgid "Access to '%{classification_label}' not allowed"
+msgstr ""
+
+msgid "AccessDropdown|Groups"
+msgstr ""
+
+msgid "AccessDropdown|Roles"
+msgstr ""
+
+msgid "AccessDropdown|Users"
+msgstr ""
+
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
+msgid "Account"
+msgstr ""
+
+msgid "Account and limit"
+msgstr ""
+
+msgid "Account: %{account}"
+msgstr ""
+
+msgid "Action to take when receiving an alert."
+msgstr ""
+
+msgid "Activate Service Desk"
+msgstr ""
+
+msgid "Active"
+msgstr ""
+
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
+msgid "Active Sessions"
+msgstr ""
+
+msgid "Activity"
+msgstr ""
+
+msgid "Add"
+msgstr ""
+
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+
+msgid "Add CHANGELOG"
+msgstr ""
+
+msgid "Add CONTRIBUTING"
+msgstr ""
+
+msgid "Add GitLab to Slack"
+msgstr ""
+
+msgid "Add Group Webhooks and GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Add Jaeger URL"
+msgstr ""
+
+msgid "Add Kubernetes cluster"
+msgstr ""
+
+msgid "Add README"
+msgstr ""
+
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
+msgid "Add a GPG key"
+msgstr ""
+
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
+msgid "Add a bullet list"
+msgstr ""
+
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
+msgid "Add a general comment to this %{noteable_name}."
+msgstr ""
+
+msgid "Add a homepage to your wiki that contains information about your project and GitLab will display it here instead of this message."
+msgstr ""
+
+msgid "Add a link"
+msgstr ""
+
+msgid "Add a numbered list"
+msgstr ""
+
+msgid "Add a table"
+msgstr ""
+
+msgid "Add a task list"
+msgstr ""
+
+msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
+msgstr ""
+
+msgid "Add an SSH key"
+msgstr ""
+
+msgid "Add an issue"
+msgstr ""
+
+msgid "Add approval rule"
+msgstr ""
+
+msgid "Add approvers"
+msgstr ""
+
+msgid "Add bold text"
+msgstr ""
+
+msgid "Add child epic to an epic"
+msgstr ""
+
+msgid "Add comment now"
+msgstr ""
+
+msgid "Add email address"
+msgstr ""
+
+msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
+msgstr ""
+
+msgid "Add image comment"
+msgstr ""
+
+msgid "Add issues"
+msgstr ""
+
+msgid "Add italic text"
+msgstr ""
+
+msgid "Add label(s)"
+msgstr ""
+
+msgid "Add license"
+msgstr ""
+
+msgid "Add list"
+msgstr ""
+
+msgid "Add new application"
+msgstr ""
+
+msgid "Add new directory"
+msgstr ""
+
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Add or subtract spent time"
+msgstr ""
+
+msgid "Add reaction"
+msgstr ""
+
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
+msgid "Add to merge train"
+msgstr ""
+
+msgid "Add to merge train when pipeline succeeds"
+msgstr ""
+
+msgid "Add to project"
+msgstr ""
+
+msgid "Add to review"
+msgstr ""
+
+msgid "Add to tree"
+msgstr ""
+
+msgid "Add user(s) to the group:"
+msgstr ""
+
+msgid "Add users to group"
+msgstr ""
+
+msgid "AddMember|No users specified."
+msgstr ""
+
+msgid "AddMember|Too many users specified (limit is %{user_limit})"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
+msgid "Added at"
+msgstr ""
+
+msgid "Added in this version"
+msgstr ""
+
+msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
+msgstr ""
+
+msgid "Additional minutes"
+msgstr ""
+
+msgid "Additional text"
+msgstr ""
+
+msgid "Adds"
+msgstr ""
+
+msgid "Adds %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
+
+msgid "Admin Area"
+msgstr ""
+
+msgid "Admin Overview"
+msgstr ""
+
+msgid "Admin Section"
+msgstr ""
+
+msgid "Admin notes"
+msgstr ""
+
+msgid "AdminArea| You are about to permanently delete the user %{username}. Issues, merge requests, and groups linked to them will be transferred to a system-wide \"Ghost-user\". To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "AdminArea| You are about to permanently delete the user %{username}. This will delete all of the issues, merge requests, and groups linked to them. To avoid data loss, consider using the %{strong_start}block user%{strong_end} feature instead. Once you %{strong_start}Delete user%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "AdminArea|Stop all jobs"
+msgstr ""
+
+msgid "AdminArea|Stop all jobs?"
+msgstr ""
+
+msgid "AdminArea|Stop jobs"
+msgstr ""
+
+msgid "AdminArea|Stopping jobs failed"
+msgstr ""
+
+msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
+msgstr ""
+
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
+msgid "AdminNote|Note"
+msgstr ""
+
+msgid "AdminProjects| You’re about to permanently delete the project %{projectName}, its repository, and all related resources including issues, merge requests, etc.. Once you confirm and press %{strong_start}Delete project%{strong_end}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "AdminProjects|Delete"
+msgstr ""
+
+msgid "AdminProjects|Delete Project %{projectName}?"
+msgstr ""
+
+msgid "AdminProjects|Delete project"
+msgstr ""
+
+msgid "AdminSettings|Auto DevOps domain"
+msgstr ""
+
+msgid "AdminSettings|Enable shared runners for new projects"
+msgstr ""
+
+msgid "AdminSettings|Environment variables are protected by default"
+msgstr ""
+
+msgid "AdminSettings|No required pipeline"
+msgstr ""
+
+msgid "AdminSettings|Required pipeline configuration"
+msgstr ""
+
+msgid "AdminSettings|Select a pipeline configuration file"
+msgstr ""
+
+msgid "AdminSettings|Select a template"
+msgstr ""
+
+msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
+msgstr ""
+
+msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
+msgstr ""
+
+msgid "AdminSettings|The required pipeline configuration can be selected from the %{code_start}gitlab-ci%{code_end} directory inside of the configured %{link_start}instance template repository%{link_end} or from GitLab provided configurations."
+msgstr ""
+
+msgid "AdminSettings|When creating a new environment variable it will be protected by default."
+msgstr ""
+
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
+msgid "AdminUsers|2FA Disabled"
+msgstr ""
+
+msgid "AdminUsers|2FA Enabled"
+msgstr ""
+
+msgid "AdminUsers|Active"
+msgstr ""
+
+msgid "AdminUsers|Admin"
+msgstr ""
+
+msgid "AdminUsers|Admins"
+msgstr ""
+
+msgid "AdminUsers|Block user"
+msgstr ""
+
+msgid "AdminUsers|Blocked"
+msgstr ""
+
+msgid "AdminUsers|Cannot unblock LDAP blocked users"
+msgstr ""
+
+msgid "AdminUsers|Delete User %{username} and contributions?"
+msgstr ""
+
+msgid "AdminUsers|Delete User %{username}?"
+msgstr ""
+
+msgid "AdminUsers|Delete user"
+msgstr ""
+
+msgid "AdminUsers|Delete user and contributions"
+msgstr ""
+
+msgid "AdminUsers|External"
+msgstr ""
+
+msgid "AdminUsers|It's you!"
+msgstr ""
+
+msgid "AdminUsers|New user"
+msgstr ""
+
+msgid "AdminUsers|No users found"
+msgstr ""
+
+msgid "AdminUsers|Search by name, email or username"
+msgstr ""
+
+msgid "AdminUsers|Search users"
+msgstr ""
+
+msgid "AdminUsers|Send email to users"
+msgstr ""
+
+msgid "AdminUsers|Sort by"
+msgstr ""
+
+msgid "AdminUsers|To confirm, type %{projectName}"
+msgstr ""
+
+msgid "AdminUsers|To confirm, type %{username}"
+msgstr ""
+
+msgid "AdminUsers|User will be blocked"
+msgstr ""
+
+msgid "AdminUsers|Without projects"
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Advanced permissions, Large File Storage and Two-Factor authentication settings."
+msgstr ""
+
+msgid "Advanced search functionality"
+msgstr ""
+
+msgid "Advanced settings"
+msgstr ""
+
+msgid "After a successful password update you will be redirected to login screen."
+msgstr ""
+
+msgid "After a successful password update, you will be redirected to the login page where you can log in with your new password."
+msgstr ""
+
+msgid "Alert"
+msgid_plural "Alerts"
+msgstr[0] ""
+
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
+msgid "Alerts"
+msgstr ""
+
+msgid "All"
+msgstr ""
+
+msgid "All Members"
+msgstr ""
+
+msgid "All branches"
+msgstr ""
+
+msgid "All changes are committed"
+msgstr ""
+
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
+msgid "All email addresses will be used to identify your commits."
+msgstr ""
+
+msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
+msgstr ""
+
+msgid "All groups and projects"
+msgstr ""
+
+msgid "All issues for this milestone are closed. You may close this milestone now."
+msgstr ""
+
+msgid "All merge conflicts were resolved. The merge request can now be merged."
+msgstr ""
+
+msgid "All projects"
+msgstr ""
+
+msgid "All users"
+msgstr ""
+
+msgid "All users must have a name."
+msgstr ""
+
+msgid "Allow \"%{group_name}\" to sign you in"
+msgstr ""
+
+msgid "Allow commits from members who can merge to the target branch."
+msgstr ""
+
+msgid "Allow group owners to manage LDAP-related settings"
+msgstr ""
+
+msgid "Allow mirrors to be set up for projects"
+msgstr ""
+
+msgid "Allow only the selected protocols to be used for Git access."
+msgstr ""
+
+msgid "Allow projects within this group to use Git LFS"
+msgstr ""
+
+msgid "Allow public access to pipelines and job details, including output logs and artifacts"
+msgstr ""
+
+msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
+msgstr ""
+
+msgid "Allow requests to the local network from hooks and services."
+msgstr ""
+
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
+msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
+msgstr ""
+
+msgid "Allow users to register any application to use GitLab as an OAuth provider"
+msgstr ""
+
+msgid "Allow users to request access"
+msgstr ""
+
+msgid "Allow users to request access if visibility is public or internal."
+msgstr ""
+
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
+msgid "Allowed to fail"
+msgstr ""
+
+msgid "Allows you to add and manage Kubernetes clusters."
+msgstr ""
+
+msgid "Also called \"Issuer\" or \"Relying party trust identifier\""
+msgstr ""
+
+msgid "Also called \"Relying party service URL\" or \"Reply URL\""
+msgstr ""
+
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
+
+msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
+msgstr ""
+
+msgid "An application called %{link_to_client} is requesting access to your GitLab account."
+msgstr ""
+
+msgid "An empty GitLab User field will add the FogBugz user's full name (e.g. \"By John Smith\") in the description of all issues and comments. It will also associate and/or assign these issues and comments with the project creator."
+msgstr ""
+
+msgid "An error has occurred"
+msgstr ""
+
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
+
+msgid "An error occurred adding a new draft."
+msgstr ""
+
+msgid "An error occurred creating the new branch."
+msgstr ""
+
+msgid "An error occurred fetching the approval rules."
+msgstr ""
+
+msgid "An error occurred fetching the approvers for the new rule."
+msgstr ""
+
+msgid "An error occurred fetching the dropdown data."
+msgstr ""
+
+msgid "An error occurred previewing the blob"
+msgstr ""
+
+msgid "An error occurred when toggling the notification subscription"
+msgstr ""
+
+msgid "An error occurred when trying to resolve a comment. Please try again."
+msgstr ""
+
+msgid "An error occurred when trying to resolve a discussion. Please try again."
+msgstr ""
+
+msgid "An error occurred when updating the issue weight"
+msgstr ""
+
+msgid "An error occurred while deleting the approvers group"
+msgstr ""
+
+msgid "An error occurred while deleting the comment"
+msgstr ""
+
+msgid "An error occurred while detecting host keys"
+msgstr ""
+
+msgid "An error occurred while disabling Service Desk."
+msgstr ""
+
+msgid "An error occurred while dismissing the alert. Refresh the page and try again."
+msgstr ""
+
+msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again."
+msgstr ""
+
+msgid "An error occurred while enabling Service Desk."
+msgstr ""
+
+msgid "An error occurred while fetching environments."
+msgstr ""
+
+msgid "An error occurred while fetching folder content."
+msgstr ""
+
+msgid "An error occurred while fetching issues."
+msgstr ""
+
+msgid "An error occurred while fetching label colors."
+msgstr ""
+
+msgid "An error occurred while fetching markdown preview"
+msgstr ""
+
+msgid "An error occurred while fetching pending comments"
+msgstr ""
+
+msgid "An error occurred while fetching projects autocomplete."
+msgstr ""
+
+msgid "An error occurred while fetching sidebar data"
+msgstr ""
+
+msgid "An error occurred while fetching the Service Desk address."
+msgstr ""
+
+msgid "An error occurred while fetching the board lists. Please try again."
+msgstr ""
+
+msgid "An error occurred while fetching the builds."
+msgstr ""
+
+msgid "An error occurred while fetching the job log."
+msgstr ""
+
+msgid "An error occurred while fetching the job."
+msgstr ""
+
+msgid "An error occurred while fetching the jobs."
+msgstr ""
+
+msgid "An error occurred while fetching the pipeline."
+msgstr ""
+
+msgid "An error occurred while fetching the releases. Please try again."
+msgstr ""
+
+msgid "An error occurred while fetching this tab."
+msgstr ""
+
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
+msgid "An error occurred while getting projects"
+msgstr ""
+
+msgid "An error occurred while importing project: %{details}"
+msgstr ""
+
+msgid "An error occurred while initializing path locks"
+msgstr ""
+
+msgid "An error occurred while loading chart data"
+msgstr ""
+
+msgid "An error occurred while loading commit signatures"
+msgstr ""
+
+msgid "An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "An error occurred while loading diff"
+msgstr ""
+
+msgid "An error occurred while loading filenames"
+msgstr ""
+
+msgid "An error occurred while loading the file"
+msgstr ""
+
+msgid "An error occurred while loading the subscription details."
+msgstr ""
+
+msgid "An error occurred while making the request."
+msgstr ""
+
+msgid "An error occurred while moving the issue."
+msgstr ""
+
+msgid "An error occurred while parsing recent searches"
+msgstr ""
+
+msgid "An error occurred while removing epics."
+msgstr ""
+
+msgid "An error occurred while removing issues."
+msgstr ""
+
+msgid "An error occurred while rendering preview broadcast message"
+msgstr ""
+
+msgid "An error occurred while reordering issues."
+msgstr ""
+
+msgid "An error occurred while retrieving calendar activity"
+msgstr ""
+
+msgid "An error occurred while retrieving diff"
+msgstr ""
+
+msgid "An error occurred while saving LDAP override status. Please try again."
+msgstr ""
+
+msgid "An error occurred while saving assignees"
+msgstr ""
+
+msgid "An error occurred while saving the approval settings"
+msgstr ""
+
+msgid "An error occurred while subscribing to notifications."
+msgstr ""
+
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
+msgid "An error occurred while unsubscribing to notifications."
+msgstr ""
+
+msgid "An error occurred while updating approvers"
+msgstr ""
+
+msgid "An error occurred while updating the comment"
+msgstr ""
+
+msgid "An error occurred while validating username"
+msgstr ""
+
+msgid "An error occurred whilst committing your changes."
+msgstr ""
+
+msgid "An error occurred whilst fetching the job trace."
+msgstr ""
+
+msgid "An error occurred whilst fetching the latest pipeline."
+msgstr ""
+
+msgid "An error occurred whilst getting files for - %{branchId}"
+msgstr ""
+
+msgid "An error occurred whilst loading all the files."
+msgstr ""
+
+msgid "An error occurred whilst loading the file content."
+msgstr ""
+
+msgid "An error occurred whilst loading the file."
+msgstr ""
+
+msgid "An error occurred whilst loading the merge request changes."
+msgstr ""
+
+msgid "An error occurred whilst loading the merge request version data."
+msgstr ""
+
+msgid "An error occurred whilst loading the merge request."
+msgstr ""
+
+msgid "An error occurred whilst loading the pipelines jobs."
+msgstr ""
+
+msgid "An error occurred. Please try again."
+msgstr ""
+
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
+msgid "An unexpected error occurred while checking the project environment."
+msgstr ""
+
+msgid "An unexpected error occurred while checking the project runners."
+msgstr ""
+
+msgid "An unexpected error occurred while communicating with the Web Terminal."
+msgstr ""
+
+msgid "An unexpected error occurred while starting the Web Terminal."
+msgstr ""
+
+msgid "An unexpected error occurred while stopping the Web Terminal."
+msgstr ""
+
+msgid "Analytics"
+msgstr ""
+
+msgid "Analytics|Timeframe"
+msgstr ""
+
+msgid "Ancestors"
+msgstr ""
+
+msgid "Anonymous"
+msgstr ""
+
+msgid "Anti-spam verification"
+msgstr ""
+
+msgid "Any"
+msgstr ""
+
+msgid "Any Label"
+msgstr ""
+
+msgid "Any Milestone"
+msgstr ""
+
+msgid "Any encrypted tokens"
+msgstr ""
+
+msgid "Any namespace"
+msgstr ""
+
+msgid "Any user"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Appearance was successfully created."
+msgstr ""
+
+msgid "Appearance was successfully updated."
+msgstr ""
+
+msgid "Append the comment with %{TABLEFLIP}"
+msgstr ""
+
+msgid "Append the comment with %{shrug}"
+msgstr ""
+
+msgid "Application"
+msgstr ""
+
+msgid "Application ID"
+msgstr ""
+
+msgid "Application settings saved successfully"
+msgstr ""
+
+msgid "Application uninstalled but failed to destroy: %{error_message}"
+msgstr ""
+
+msgid "Application was successfully destroyed."
+msgstr ""
+
+msgid "Application was successfully updated."
+msgstr ""
+
+msgid "Application: %{name}"
+msgstr ""
+
+msgid "Applications"
+msgstr ""
+
+msgid "Applied"
+msgstr ""
+
+msgid "Apply a label"
+msgstr ""
+
+msgid "Apply suggestion"
+msgstr ""
+
+msgid "Applying command"
+msgstr ""
+
+msgid "Applying command to %{commandDescription}"
+msgstr ""
+
+msgid "Applying multiple commands"
+msgstr ""
+
+msgid "Applying suggestion"
+msgstr ""
+
+msgid "ApprovalRuleRemove|%d member"
+msgid_plural "ApprovalRuleRemove|%d members"
+msgstr[0] ""
+
+msgid "ApprovalRuleRemove|Approvals from this member are not revoked."
+msgid_plural "ApprovalRuleRemove|Approvals from these members are not revoked."
+msgstr[0] ""
+
+msgid "ApprovalRuleRemove|You are about to remove the %{name} approver group which has %{nMembers}."
+msgstr ""
+
+msgid "ApprovalRuleSummary|%d member"
+msgid_plural "ApprovalRuleSummary|%d members"
+msgstr[0] ""
+
+msgid "ApprovalRuleSummary|%{count} approval required from %{membersCount}"
+msgid_plural "ApprovalRuleSummary|%{count} approvals required from %{membersCount}"
+msgstr[0] ""
+
+msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
+msgstr ""
+
+msgid "ApprovalRule|Approvers"
+msgstr ""
+
+msgid "ApprovalRule|Name"
+msgstr ""
+
+msgid "ApprovalRule|No. approvals required"
+msgstr ""
+
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
+msgid "ApprovalRule|e.g. QA, Security, etc."
+msgstr ""
+
+msgid "Approvals"
+msgstr ""
+
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
+msgid "Apr"
+msgstr ""
+
+msgid "April"
+msgstr ""
+
+msgid "Archive jobs"
+msgstr ""
+
+msgid "Archive project"
+msgstr ""
+
+msgid "Archived project! Repository and other project resources are read-only"
+msgstr ""
+
+msgid "Archived projects"
+msgstr ""
+
+msgid "Archiving the project will make it entirely read-only. It is hidden from the dashboard and doesn't show up in searches. <strong>The repository cannot be committed to, and no issues, comments or other entities can be created.</strong>"
+msgstr ""
+
+msgid "Are you sure"
+msgstr ""
+
+msgid "Are you sure that you want to archive this project?"
+msgstr ""
+
+msgid "Are you sure that you want to unarchive this project?"
+msgstr ""
+
+msgid "Are you sure you want to cancel creating this comment?"
+msgstr ""
+
+msgid "Are you sure you want to cancel editing this comment?"
+msgstr ""
+
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
+msgid "Are you sure you want to delete this device? This action cannot be undone."
+msgstr ""
+
+msgid "Are you sure you want to delete this list?"
+msgstr ""
+
+msgid "Are you sure you want to delete this pipeline schedule?"
+msgstr ""
+
+msgid "Are you sure you want to erase this build?"
+msgstr ""
+
+msgid "Are you sure you want to lose unsaved changes?"
+msgstr ""
+
+msgid "Are you sure you want to lose your issue information?"
+msgstr ""
+
+msgid "Are you sure you want to permanently delete this license?"
+msgstr ""
+
+msgid "Are you sure you want to regenerate the public key? You will have to update the public key on the remote server before mirroring will work again."
+msgstr ""
+
+msgid "Are you sure you want to remove %{group_name}?"
+msgstr ""
+
+msgid "Are you sure you want to remove the attachment?"
+msgstr ""
+
+msgid "Are you sure you want to remove this identity?"
+msgstr ""
+
+msgid "Are you sure you want to reset registration token?"
+msgstr ""
+
+msgid "Are you sure you want to reset the SCIM token? SCIM provisioning will stop working until the new token is updated."
+msgstr ""
+
+msgid "Are you sure you want to reset the health check token?"
+msgstr ""
+
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
+msgid "Are you sure you want to revoke this nickname?"
+msgstr ""
+
+msgid "Are you sure you want to stop this environment?"
+msgstr ""
+
+msgid "Are you sure you want to unlock %{path_lock_path}?"
+msgstr ""
+
+msgid "Are you sure you want to unsubscribe from the %{type}: %{link_to_noteable_text}?"
+msgstr ""
+
+msgid "Are you sure?"
+msgstr ""
+
+msgid "Are you sure? All commits that were signed with this GPG key will be unverified."
+msgstr ""
+
+msgid "Are you sure? Removing this GPG key does not affect already signed commits."
+msgstr ""
+
+msgid "Are you sure? This will invalidate your registered applications and U2F devices."
+msgstr ""
+
+msgid "Artifact ID"
+msgstr ""
+
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
+msgid "Artifacts"
+msgstr ""
+
+msgid "As U2F devices are only supported by a few browsers, we require that you set up a two-factor authentication app before a U2F device. That way you'll always be able to log in - even when you're using an unsupported browser."
+msgstr ""
+
+msgid "AsanaService|%{user} pushed to branch %{branch} of %{project_name} ( %{commit_url} ):"
+msgstr ""
+
+msgid "AsanaService|Asana - Teamwork without email"
+msgstr ""
+
+msgid "AsanaService|Comma-separated list of branches which will be automatically inspected. Leave blank to include all branches."
+msgstr ""
+
+msgid "AsanaService|User Personal Access Token. User must have access to task, all comments will be attributed to this user."
+msgstr ""
+
+msgid "Ascending"
+msgstr ""
+
+msgid "Ask your group maintainer to set up a group Runner."
+msgstr ""
+
+msgid "Assertion consumer service URL"
+msgstr ""
+
+msgid "Assets"
+msgstr ""
+
+msgid "Assign"
+msgstr ""
+
+msgid "Assign custom color like #FF0000"
+msgstr ""
+
+msgid "Assign epic"
+msgstr ""
+
+msgid "Assign labels"
+msgstr ""
+
+msgid "Assign milestone"
+msgstr ""
+
+msgid "Assign some issues to this milestone."
+msgstr ""
+
+msgid "Assign to"
+msgstr ""
+
+msgid "Assign yourself to these issues"
+msgstr ""
+
+msgid "Assign yourself to this issue"
+msgstr ""
+
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
+msgid "Assigned Issues"
+msgstr ""
+
+msgid "Assigned Merge Requests"
+msgstr ""
+
+msgid "Assigned to me"
+msgstr ""
+
+msgid "Assignee"
+msgid_plural "%d Assignees"
+msgstr[0] ""
+
+msgid "Assignee lists not available with your current license"
+msgstr ""
+
+msgid "Assignee lists show all issues assigned to the selected user."
+msgstr ""
+
+msgid "Assignee(s)"
+msgstr ""
+
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
+msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
+msgstr ""
+
+msgid "Attach a file"
+msgstr ""
+
+msgid "Attach a file by drag &amp; drop or %{upload_link}"
+msgstr ""
+
+msgid "Attaching a file"
+msgid_plural "Attaching %d files"
+msgstr[0] ""
+
+msgid "Attaching the file failed."
+msgstr ""
+
+msgid "Audit Events"
+msgstr ""
+
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
+msgid "Aug"
+msgstr ""
+
+msgid "August"
+msgstr ""
+
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
+msgid "Authentication Log"
+msgstr ""
+
+msgid "Authentication failed: %{error_message}"
+msgstr ""
+
+msgid "Authentication log"
+msgstr ""
+
+msgid "Authentication method"
+msgstr ""
+
+msgid "Authentication method updated"
+msgstr ""
+
+msgid "Authentication via U2F device failed."
+msgstr ""
+
+msgid "Author"
+msgstr ""
+
+msgid "Authorization code:"
+msgstr ""
+
+msgid "Authorization key"
+msgstr ""
+
+msgid "Authorization was granted by entering your username and password in the application."
+msgstr ""
+
+msgid "Authorize"
+msgstr ""
+
+msgid "Authorize %{link_to_client} to use your account?"
+msgstr ""
+
+msgid "Authorized %{new_chat_name}"
+msgstr ""
+
+msgid "Authorized At"
+msgstr ""
+
+msgid "Authorized applications (%{size})"
+msgstr ""
+
+msgid "Authors: %{authors}"
+msgstr ""
+
+msgid "Auto DevOps"
+msgstr ""
+
+msgid "Auto DevOps enabled"
+msgstr ""
+
+msgid "Auto DevOps, runners and job artifacts"
+msgstr ""
+
+msgid "Auto License Compliance"
+msgstr ""
+
+msgid "Auto-cancel redundant, pending pipelines"
+msgstr ""
+
+msgid "AutoDevOps|Auto DevOps"
+msgstr ""
+
+msgid "AutoDevOps|Auto DevOps documentation"
+msgstr ""
+
+msgid "AutoDevOps|Enable in settings"
+msgstr ""
+
+msgid "AutoDevOps|It will automatically build, test, and deploy your application based on a predefined CI/CD configuration."
+msgstr ""
+
+msgid "AutoDevOps|Learn more in the %{link_to_documentation}"
+msgstr ""
+
+msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
+msgstr ""
+
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
+msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
+msgstr ""
+
+msgid "Automatic certificate management using Let's Encrypt"
+msgstr ""
+
+msgid "Automatically marked as default internal user"
+msgstr ""
+
+msgid "Automatically resolved"
+msgstr ""
+
+msgid "Automatically update this project's branches and tags from the upstream repository every hour."
+msgstr ""
+
+msgid "Autosave|Note"
+msgstr ""
+
+msgid "Available"
+msgstr ""
+
+msgid "Available group Runners: %{runners}"
+msgstr ""
+
+msgid "Available shared Runners:"
+msgstr ""
+
+msgid "Available specific runners"
+msgstr ""
+
+msgid "Avatar for %{assigneeName}"
+msgstr ""
+
+msgid "Avatar for %{name}"
+msgstr ""
+
+msgid "Avatar will be removed. Are you sure?"
+msgstr ""
+
+msgid "Average per day: %{average}"
+msgstr ""
+
+msgid "Background Color"
+msgstr ""
+
+msgid "Background Jobs"
+msgstr ""
+
+msgid "Background color"
+msgstr ""
+
+msgid "Badges"
+msgstr ""
+
+msgid "Badges|A new badge was added."
+msgstr ""
+
+msgid "Badges|Add badge"
+msgstr ""
+
+msgid "Badges|Adding the badge failed, please check the entered URLs and try again."
+msgstr ""
+
+msgid "Badges|Badge image URL"
+msgstr ""
+
+msgid "Badges|Badge image preview"
+msgstr ""
+
+msgid "Badges|Delete badge"
+msgstr ""
+
+msgid "Badges|Delete badge?"
+msgstr ""
+
+msgid "Badges|Deleting the badge failed, please try again."
+msgstr ""
+
+msgid "Badges|Group Badge"
+msgstr ""
+
+msgid "Badges|Link"
+msgstr ""
+
+msgid "Badges|No badge image"
+msgstr ""
+
+msgid "Badges|No image to preview"
+msgstr ""
+
+msgid "Badges|Please fill in a valid URL"
+msgstr ""
+
+msgid "Badges|Project Badge"
+msgstr ""
+
+msgid "Badges|Reload badge image"
+msgstr ""
+
+msgid "Badges|Save changes"
+msgstr ""
+
+msgid "Badges|Saving the badge failed, please check the entered URLs and try again."
+msgstr ""
+
+msgid "Badges|The %{docsLinkStart}variables%{docsLinkEnd} GitLab supports: %{placeholders}"
+msgstr ""
+
+msgid "Badges|The badge was deleted."
+msgstr ""
+
+msgid "Badges|The badge was saved."
+msgstr ""
+
+msgid "Badges|This group has no badges"
+msgstr ""
+
+msgid "Badges|This project has no badges"
+msgstr ""
+
+msgid "Badges|You are going to delete this badge. Deleted badges <strong>cannot</strong> be restored."
+msgstr ""
+
+msgid "Badges|Your badges"
+msgstr ""
+
+msgid "Badges|e.g. %{exampleUrl}"
+msgstr ""
+
+msgid "Badge|New"
+msgstr ""
+
+msgid "Balsamiq file could not be loaded."
+msgstr ""
+
+msgid "BambooService|A continuous integration and build server"
+msgstr ""
+
+msgid "BambooService|A user with API access, if applicable"
+msgstr ""
+
+msgid "BambooService|Atlassian Bamboo CI"
+msgstr ""
+
+msgid "BambooService|Bamboo build plan key like KEY"
+msgstr ""
+
+msgid "BambooService|Bamboo root URL like https://bamboo.example.com"
+msgstr ""
+
+msgid "BambooService|You must set up automatic revision labeling and a repository trigger in Bamboo."
+msgstr ""
+
+msgid "BatchComments|Delete all pending comments"
+msgstr ""
+
+msgid "BatchComments|Discard review?"
+msgstr ""
+
+msgid "BatchComments|You're about to discard your review which will delete all of your pending comments. The deleted comments %{strong_start}cannot%{strong_end} be restored."
+msgstr ""
+
+msgid "Be careful. Changing the project's namespace can have unintended side effects."
+msgstr ""
+
+msgid "Be careful. Renaming a project's repository can have unintended side effects."
+msgstr ""
+
+msgid "Begin with the selected commit"
+msgstr ""
+
+msgid "Below are examples of regex for existing tools:"
+msgstr ""
+
+msgid "Below you will find all the groups that are public."
+msgstr ""
+
+msgid "Billing"
+msgstr ""
+
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
+
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
+
+msgid "BillingPlans|Current plan"
+msgstr ""
+
+msgid "BillingPlans|Downgrade"
+msgstr ""
+
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
+msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
+msgstr ""
+
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
+
+msgid "BillingPlans|Manage plan"
+msgstr ""
+
+msgid "BillingPlans|Pricing page"
+msgstr ""
+
+msgid "BillingPlans|See all %{plan_name} features"
+msgstr ""
+
+msgid "BillingPlans|This group uses the plan associated with its parent group."
+msgstr ""
+
+msgid "BillingPlans|To manage the plan for this group, visit the billing section of %{parent_billing_page_link}."
+msgstr ""
+
+msgid "BillingPlans|Upgrade"
+msgstr ""
+
+msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
+msgstr ""
+
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
+
+msgid "BillingPlans|features"
+msgstr ""
+
+msgid "BillingPlans|frequently asked questions"
+msgstr ""
+
+msgid "BillingPlans|monthly"
+msgstr ""
+
+msgid "BillingPlans|paid annually at %{price_per_year}"
+msgstr ""
+
+msgid "BillingPlans|per user"
+msgstr ""
+
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
+msgid "Bitbucket Server Import"
+msgstr ""
+
+msgid "Bitbucket import"
+msgstr ""
+
+msgid "Block"
+msgstr ""
+
+msgid "Blocked"
+msgstr ""
+
+msgid "Blog"
+msgstr ""
+
+msgid "Blue helpers indicate an action to be taken."
+msgstr ""
+
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
+msgid "Boards"
+msgstr ""
+
+msgid "Boards|Collapse"
+msgstr ""
+
+msgid "Boards|Edit board"
+msgstr ""
+
+msgid "Boards|Expand"
+msgstr ""
+
+msgid "Boards|View scope"
+msgstr ""
+
+msgid "Branch"
+msgstr ""
+
+msgid "Branch %{branchName} was not found in this project's repository."
+msgstr ""
+
+msgid "Branch <strong>%{branch_name}</strong> was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}"
+msgstr ""
+
+msgid "Branch has changed"
+msgstr ""
+
+msgid "Branch is already taken"
+msgstr ""
+
+msgid "Branch name"
+msgstr ""
+
+msgid "Branch not loaded - %{branchId}"
+msgstr ""
+
+msgid "BranchSwitcherPlaceholder|Search branches"
+msgstr ""
+
+msgid "BranchSwitcherTitle|Switch branch"
+msgstr ""
+
+msgid "Branches"
+msgstr ""
+
+msgid "Branches|Active"
+msgstr ""
+
+msgid "Branches|Active branches"
+msgstr ""
+
+msgid "Branches|All"
+msgstr ""
+
+msgid "Branches|Cant find HEAD commit for this branch"
+msgstr ""
+
+msgid "Branches|Compare"
+msgstr ""
+
+msgid "Branches|Delete all branches that are merged into '%{default_branch}'"
+msgstr ""
+
+msgid "Branches|Delete branch"
+msgstr ""
+
+msgid "Branches|Delete merged branches"
+msgstr ""
+
+msgid "Branches|Delete protected branch"
+msgstr ""
+
+msgid "Branches|Delete protected branch '%{branch_name}'?"
+msgstr ""
+
+msgid "Branches|Deleting the '%{branch_name}' branch cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Deleting the merged branches cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "Branches|Filter by branch name"
+msgstr ""
+
+msgid "Branches|Merged into %{default_branch}"
+msgstr ""
+
+msgid "Branches|New branch"
+msgstr ""
+
+msgid "Branches|No branches to show"
+msgstr ""
+
+msgid "Branches|Once you confirm and press %{delete_protected_branch}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Branches|Only a project maintainer or owner can delete a protected branch"
+msgstr ""
+
+msgid "Branches|Overview"
+msgstr ""
+
+msgid "Branches|Protected branches can be managed in %{project_settings_link}."
+msgstr ""
+
+msgid "Branches|Show active branches"
+msgstr ""
+
+msgid "Branches|Show all branches"
+msgstr ""
+
+msgid "Branches|Show more active branches"
+msgstr ""
+
+msgid "Branches|Show more stale branches"
+msgstr ""
+
+msgid "Branches|Show overview of the branches"
+msgstr ""
+
+msgid "Branches|Show stale branches"
+msgstr ""
+
+msgid "Branches|Sort by"
+msgstr ""
+
+msgid "Branches|Stale"
+msgstr ""
+
+msgid "Branches|Stale branches"
+msgstr ""
+
+msgid "Branches|The branch could not be updated automatically because it has diverged from its upstream counterpart."
+msgstr ""
+
+msgid "Branches|The default branch cannot be deleted"
+msgstr ""
+
+msgid "Branches|This branch hasn’t been merged into %{default_branch}."
+msgstr ""
+
+msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
+msgstr ""
+
+msgid "Branches|To confirm, type %{branch_name_confirmation}:"
+msgstr ""
+
+msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
+msgstr ""
+
+msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
+msgstr ""
+
+msgid "Branches|diverged from upstream"
+msgstr ""
+
+msgid "Branches|merged"
+msgstr ""
+
+msgid "Branches|project settings"
+msgstr ""
+
+msgid "Branches|protected"
+msgstr ""
+
+msgid "Broadcast Message was successfully created."
+msgstr ""
+
+msgid "Broadcast Message was successfully updated."
+msgstr ""
+
+msgid "Browse Directory"
+msgstr ""
+
+msgid "Browse File"
+msgstr ""
+
+msgid "Browse Files"
+msgstr ""
+
+msgid "Browse artifacts"
+msgstr ""
+
+msgid "Browse files"
+msgstr ""
+
+msgid "Built-in"
+msgstr ""
+
+msgid "BurndownChartLabel|Guideline"
+msgstr ""
+
+msgid "BurndownChartLabel|Open issue weight"
+msgstr ""
+
+msgid "BurndownChartLabel|Open issues"
+msgstr ""
+
+msgid "BurndownChartLabel|Progress"
+msgstr ""
+
+msgid "BurndownChartLabel|Remaining"
+msgstr ""
+
+msgid "Business"
+msgstr ""
+
+msgid "Business metrics (Custom)"
+msgstr ""
+
+msgid "Buy EE"
+msgstr ""
+
+msgid "Buy GitLab Enterprise Edition"
+msgstr ""
+
+msgid "By %{user_name}"
+msgstr ""
+
+msgid "By default GitLab sends emails in HTML and plain text formats so mail clients can choose what format to use. Disable this option if you only want to send emails in plain text format."
+msgstr ""
+
+msgid "By default, all projects and groups will use the global notifications setting."
+msgstr ""
+
+msgid "ByAuthor|by"
+msgstr ""
+
+msgid "CHANGELOG"
+msgstr ""
+
+msgid "CI / CD"
+msgstr ""
+
+msgid "CI / CD Charts"
+msgstr ""
+
+msgid "CI / CD Settings"
+msgstr ""
+
+msgid "CI Lint"
+msgstr ""
+
+msgid "CI variables"
+msgstr ""
+
+msgid "CI will run using the credentials assigned above."
+msgstr ""
+
+msgid "CI/CD"
+msgstr ""
+
+msgid "CI/CD configuration"
+msgstr ""
+
+msgid "CI/CD for external repo"
+msgstr ""
+
+msgid "CI/CD settings"
+msgstr ""
+
+msgid "CICD|Auto DevOps"
+msgstr ""
+
+msgid "CICD|Auto DevOps will automatically build, test, and deploy your application based on a predefined Continuous Integration and Delivery configuration."
+msgstr ""
+
+msgid "CICD|Automatic deployment to staging, manual deployment to production"
+msgstr ""
+
+msgid "CICD|Continuous deployment to production"
+msgstr ""
+
+msgid "CICD|Continuous deployment to production using timed incremental rollout"
+msgstr ""
+
+msgid "CICD|Default to Auto DevOps pipeline"
+msgstr ""
+
+msgid "CICD|Default to Auto DevOps pipeline for all projects"
+msgstr ""
+
+msgid "CICD|Deployment strategy"
+msgstr ""
+
+msgid "CICD|Jobs"
+msgstr ""
+
+msgid "CICD|Learn more about Auto DevOps"
+msgstr ""
+
+msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
+msgstr ""
+
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
+
+msgid "CICD|group enabled"
+msgstr ""
+
+msgid "CICD|instance enabled"
+msgstr ""
+
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
+msgid "CONTRIBUTING"
+msgstr ""
+
+msgid "Callback URL"
+msgstr ""
+
+msgid "Can override approvers and approvals required per merge request"
+msgstr ""
+
+msgid "Can't find HEAD commit for this branch"
+msgstr ""
+
+msgid "Can't find variable: ZiteReader"
+msgstr ""
+
+msgid "Can't remove group members without group managed account"
+msgstr ""
+
+msgid "Can't scan the code?"
+msgstr ""
+
+msgid "Canary Deployments is a popular CI strategy, where a small portion of the fleet is updated to the new version of your application."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Cancel running"
+msgstr ""
+
+msgid "Cancel this job"
+msgstr ""
+
+msgid "Cancelling Preview"
+msgstr ""
+
+msgid "Cannot be merged automatically"
+msgstr ""
+
+msgid "Cannot create the abuse report. The user has been deleted."
+msgstr ""
+
+msgid "Cannot create the abuse report. This user has been blocked."
+msgstr ""
+
+msgid "Cannot merge"
+msgstr ""
+
+msgid "Cannot modify managed Kubernetes cluster"
+msgstr ""
+
+msgid "Cannot refer to a group milestone by an internal id!"
+msgstr ""
+
+msgid "Cannot render the image. Maximum character count (%{charLimit}) has been exceeded."
+msgstr ""
+
+msgid "Cannot show preview. For previews on sketch files, they must have the file format introduced by Sketch version 43 and above."
+msgstr ""
+
+msgid "Cannot skip two factor authentication setup"
+msgstr ""
+
+msgid "Capacity threshold"
+msgstr ""
+
+msgid "Certificate"
+msgstr ""
+
+msgid "Certificate (PEM)"
+msgstr ""
+
+msgid "Change Weight"
+msgstr ""
+
+msgid "Change assignee"
+msgstr ""
+
+msgid "Change assignee(s)"
+msgstr ""
+
+msgid "Change assignee(s)."
+msgstr ""
+
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
+msgid "Change path"
+msgstr ""
+
+msgid "Change permissions"
+msgstr ""
+
+msgid "Change template"
+msgstr ""
+
+msgid "Change this value to influence how frequently the GitLab UI polls for updates."
+msgstr ""
+
+msgid "Change title"
+msgstr ""
+
+msgid "Change your password"
+msgstr ""
+
+msgid "Change your password or recover your current one"
+msgstr ""
+
+msgid "ChangeTypeActionLabel|Pick into branch"
+msgstr ""
+
+msgid "ChangeTypeActionLabel|Revert in branch"
+msgstr ""
+
+msgid "ChangeTypeAction|Cherry-pick"
+msgstr ""
+
+msgid "ChangeTypeAction|Revert"
+msgstr ""
+
+msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
+msgstr ""
+
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
+msgid "Changes"
+msgstr ""
+
+msgid "Changes are shown as if the <b>source</b> revision was being merged into the <b>target</b> revision."
+msgstr ""
+
+msgid "Changes suppressed. Click to show."
+msgstr ""
+
+msgid "Changes the title to \"%{title_param}\"."
+msgstr ""
+
+msgid "Changes won't take place until the index is %{link_start}recreated%{link_end}."
+msgstr ""
+
+msgid "Charts"
+msgstr ""
+
+msgid "Chat"
+msgstr ""
+
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
+msgid "Check again"
+msgstr ""
+
+msgid "Check feature availability on namespace plan"
+msgstr ""
+
+msgid "Check the %{docs_link_start}documentation%{docs_link_end}."
+msgstr ""
+
+msgid "Check your .gitlab-ci.yml"
+msgstr ""
+
+msgid "Checking %{text} availability…"
+msgstr ""
+
+msgid "Checking approval status"
+msgstr ""
+
+msgid "Checking branch availability..."
+msgstr ""
+
+msgid "Checking username availability..."
+msgstr ""
+
+msgid "Cherry-pick this commit"
+msgstr ""
+
+msgid "Cherry-pick this merge request"
+msgstr ""
+
+msgid "Choose <strong>Create archive</strong> and wait for archiving to complete."
+msgstr ""
+
+msgid "Choose <strong>Next</strong> at the bottom of the page."
+msgstr ""
+
+msgid "Choose a branch/tag (e.g. %{master}) or enter a commit (e.g. %{sha}) to see what's changed or to create a merge request."
+msgstr ""
+
+msgid "Choose a file"
+msgstr ""
+
+msgid "Choose a group"
+msgstr ""
+
+msgid "Choose a role permission"
+msgstr ""
+
+msgid "Choose a template"
+msgstr ""
+
+msgid "Choose a template..."
+msgstr ""
+
+msgid "Choose a type..."
+msgstr ""
+
+msgid "Choose any color."
+msgstr ""
+
+msgid "Choose between <code>clone</code> or <code>fetch</code> to get the recent application code"
+msgstr ""
+
+msgid "Choose file…"
+msgstr ""
+
+msgid "Choose the top-level group for your repository imports."
+msgstr ""
+
+msgid "Choose visibility level, enable/disable project features (issues, repository, wiki, snippets) and set permissions."
+msgstr ""
+
+msgid "Choose what content you want to see on a group’s overview page"
+msgstr ""
+
+msgid "Choose which repositories you want to connect and run CI/CD pipelines."
+msgstr ""
+
+msgid "Choose which shards you wish to synchronize to this secondary node."
+msgstr ""
+
+msgid "CiStatusLabel|canceled"
+msgstr ""
+
+msgid "CiStatusLabel|created"
+msgstr ""
+
+msgid "CiStatusLabel|delayed"
+msgstr ""
+
+msgid "CiStatusLabel|failed"
+msgstr ""
+
+msgid "CiStatusLabel|manual action"
+msgstr ""
+
+msgid "CiStatusLabel|passed"
+msgstr ""
+
+msgid "CiStatusLabel|passed with warnings"
+msgstr ""
+
+msgid "CiStatusLabel|pending"
+msgstr ""
+
+msgid "CiStatusLabel|preparing"
+msgstr ""
+
+msgid "CiStatusLabel|skipped"
+msgstr ""
+
+msgid "CiStatusLabel|waiting for delayed job"
+msgstr ""
+
+msgid "CiStatusLabel|waiting for manual action"
+msgstr ""
+
+msgid "CiStatusText|blocked"
+msgstr ""
+
+msgid "CiStatusText|canceled"
+msgstr ""
+
+msgid "CiStatusText|created"
+msgstr ""
+
+msgid "CiStatusText|delayed"
+msgstr ""
+
+msgid "CiStatusText|failed"
+msgstr ""
+
+msgid "CiStatusText|manual"
+msgstr ""
+
+msgid "CiStatusText|passed"
+msgstr ""
+
+msgid "CiStatusText|pending"
+msgstr ""
+
+msgid "CiStatusText|preparing"
+msgstr ""
+
+msgid "CiStatusText|skipped"
+msgstr ""
+
+msgid "CiStatus|running"
+msgstr ""
+
+msgid "CiVariables|Cannot use Masked Variable with current value"
+msgstr ""
+
+msgid "CiVariables|Input variable key"
+msgstr ""
+
+msgid "CiVariables|Input variable value"
+msgstr ""
+
+msgid "CiVariables|Key"
+msgstr ""
+
+msgid "CiVariables|Masked"
+msgstr ""
+
+msgid "CiVariables|Remove variable row"
+msgstr ""
+
+msgid "CiVariables|Scope"
+msgstr ""
+
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
+msgid "CiVariables|State"
+msgstr ""
+
+msgid "CiVariables|Type"
+msgstr ""
+
+msgid "CiVariables|Value"
+msgstr ""
+
+msgid "CiVariables|Variables"
+msgstr ""
+
+msgid "CiVariable|* (All environments)"
+msgstr ""
+
+msgid "CiVariable|All environments"
+msgstr ""
+
+msgid "CiVariable|Create wildcard"
+msgstr ""
+
+msgid "CiVariable|Error occurred while saving variables"
+msgstr ""
+
+msgid "CiVariable|Masked"
+msgstr ""
+
+msgid "CiVariable|New environment"
+msgstr ""
+
+msgid "CiVariable|Protected"
+msgstr ""
+
+msgid "CiVariable|Search environments"
+msgstr ""
+
+msgid "CiVariable|Toggle masked"
+msgstr ""
+
+msgid "CiVariable|Toggle protected"
+msgstr ""
+
+msgid "CiVariable|Validation failed"
+msgstr ""
+
+msgid "Classification Label (optional)"
+msgstr ""
+
+msgid "ClassificationLabelUnavailable|is unavailable: %{reason}"
+msgstr ""
+
+msgid "Clear"
+msgstr ""
+
+msgid "Clear input"
+msgstr ""
+
+msgid "Clear recent searches"
+msgstr ""
+
+msgid "Clear search"
+msgstr ""
+
+msgid "Clear search input"
+msgstr ""
+
+msgid "Clear templates search input"
+msgstr ""
+
+msgid "Clear weight"
+msgstr ""
+
+msgid "Cleared weight."
+msgstr ""
+
+msgid "Clears weight."
+msgstr ""
+
+msgid "Click any <strong>project name</strong> in the project list below to navigate to the project milestone."
+msgstr ""
+
+msgid "Click here"
+msgstr ""
+
+msgid "Click the <strong>Download</strong> button and wait for downloading to complete."
+msgstr ""
+
+msgid "Click the <strong>Promote</strong> button in the top right corner to promote it to a group milestone."
+msgstr ""
+
+msgid "Click the <strong>Select none</strong> button on the right, since we only need \"Google Code Project Hosting\"."
+msgstr ""
+
+msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
+msgstr ""
+
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
+msgid "Click to expand it."
+msgstr ""
+
+msgid "Click to expand text"
+msgstr ""
+
+msgid "Client authentication certificate"
+msgstr ""
+
+msgid "Client authentication key"
+msgstr ""
+
+msgid "Client authentication key password"
+msgstr ""
+
+msgid "Clients"
+msgstr ""
+
+msgid "Clone"
+msgstr ""
+
+msgid "Clone repository"
+msgstr ""
+
+msgid "Clone with %{http_label}"
+msgstr ""
+
+msgid "Clone with KRB5"
+msgstr ""
+
+msgid "Clone with SSH"
+msgstr ""
+
+msgid "Close"
+msgstr ""
+
+msgid "Close %{tabname}"
+msgstr ""
+
+msgid "Close epic"
+msgstr ""
+
+msgid "Close milestone"
+msgstr ""
+
+msgid "Close sidebar"
+msgstr ""
+
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
+msgid "Closed"
+msgstr ""
+
+msgid "Closed issues"
+msgstr ""
+
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
+msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
+msgstr ""
+
+msgid "ClusterIntegration| can be used instead of a custom domain."
+msgstr ""
+
+msgid "ClusterIntegration| is the default environment scope for this cluster. This means that all jobs, regardless of their environment, will use this cluster. %{environment_scope_start}More information%{environment_scope_end}"
+msgstr ""
+
+msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|%{title} uninstalled successfully."
+msgstr ""
+
+msgid "ClusterIntegration|%{title} updated successfully."
+msgstr ""
+
+msgid "ClusterIntegration|A service token scoped to %{code}kube-system%{end_code} with %{code}cluster-admin%{end_code} privileges."
+msgstr ""
+
+msgid "ClusterIntegration|API URL"
+msgstr ""
+
+msgid "ClusterIntegration|API URL should be a valid http/https url."
+msgstr ""
+
+msgid "ClusterIntegration|Add Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Add a Kubernetes cluster integration"
+msgstr ""
+
+msgid "ClusterIntegration|Adding a Kubernetes cluster to your group will automatically share the cluster across all your projects. Use review apps, deploy your applications, and easily run your pipelines for all projects using the same cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Adding a Kubernetes cluster will automatically share the cluster across all projects. Use review apps, deploy your applications, and easily run your pipelines for all projects using the same cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Adding an integration to your group will share the cluster across all your projects."
+msgstr ""
+
+msgid "ClusterIntegration|Adding an integration will share the cluster across all projects."
+msgstr ""
+
+msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
+msgstr ""
+
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|All data will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Alternatively"
+msgstr ""
+
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred while trying to fetch project zones: %{error}"
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred while trying to fetch your projects: %{error}"
+msgstr ""
+
+msgid "ClusterIntegration|An error occurred while trying to fetch zone machine types: %{error}"
+msgstr ""
+
+msgid "ClusterIntegration|Any running pipelines will be canceled."
+msgstr ""
+
+msgid "ClusterIntegration|Applications"
+msgstr ""
+
+msgid "ClusterIntegration|Apply for credit"
+msgstr ""
+
+msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Base domain"
+msgstr ""
+
+msgid "ClusterIntegration|CA Certificate"
+msgstr ""
+
+msgid "ClusterIntegration|Cert-Manager"
+msgstr ""
+
+msgid "ClusterIntegration|Cert-Manager is a native Kubernetes certificate management controller that helps with issuing certificates. Installing Cert-Manager on your cluster will issue a certificate by %{letsEncrypt} and ensure that certificates are valid and up-to-date."
+msgstr ""
+
+msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
+msgstr ""
+
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
+msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
+msgstr ""
+
+msgid "ClusterIntegration|Choose which of your environments will use this cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
+msgid "ClusterIntegration|Cluster health"
+msgstr ""
+
+msgid "ClusterIntegration|Cluster name is required."
+msgstr ""
+
+msgid "ClusterIntegration|Clusters are utilized by selecting the nearest ancestor with a matching environment scope. For example, project clusters will override group clusters."
+msgstr ""
+
+msgid "ClusterIntegration|Copy API URL"
+msgstr ""
+
+msgid "ClusterIntegration|Copy CA Certificate"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Ingress Endpoint to clipboard"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Jupyter Hostname to clipboard"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Knative Endpoint to clipboard"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Kubernetes cluster name"
+msgstr ""
+
+msgid "ClusterIntegration|Copy Service Token"
+msgstr ""
+
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
+msgid "ClusterIntegration|Create Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
+msgid "ClusterIntegration|Did you know?"
+msgstr ""
+
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
+msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Enable this setting if using role-based access control (RBAC)."
+msgstr ""
+
+msgid "ClusterIntegration|Enter the details for your Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Environment scope"
+msgstr ""
+
+msgid "ClusterIntegration|Every new Google Cloud Platform (GCP) account receives $300 in credit upon %{sign_up_link}. In partnership with Google, GitLab is able to offer an additional $200 for both new and existing GCP accounts to get started with GitLab's Google Kubernetes Engine Integration."
+msgstr ""
+
+msgid "ClusterIntegration|Failed to configure Google Kubernetes Engine Cluster: %{message}"
+msgstr ""
+
+msgid "ClusterIntegration|Failed to request to Google Cloud Platform: %{message}"
+msgstr ""
+
+msgid "ClusterIntegration|Failed to run Kubeclient: %{message}"
+msgstr ""
+
+msgid "ClusterIntegration|Fetching machine types"
+msgstr ""
+
+msgid "ClusterIntegration|Fetching projects"
+msgstr ""
+
+msgid "ClusterIntegration|Fetching zones"
+msgstr ""
+
+msgid "ClusterIntegration|GitLab Integration"
+msgstr ""
+
+msgid "ClusterIntegration|GitLab Runner"
+msgstr ""
+
+msgid "ClusterIntegration|GitLab Runner connects to the repository and executes CI/CD jobs, pushing results back and deploying applications to production."
+msgstr ""
+
+msgid "ClusterIntegration|GitLab-managed cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Google Cloud Platform project"
+msgstr ""
+
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
+msgid "ClusterIntegration|Google Kubernetes Engine"
+msgstr ""
+
+msgid "ClusterIntegration|Google Kubernetes Engine project"
+msgstr ""
+
+msgid "ClusterIntegration|Group cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Helm Tiller"
+msgstr ""
+
+msgid "ClusterIntegration|Helm streamlines installing and managing Kubernetes applications. Tiller runs inside of your Kubernetes Cluster, and manages releases of your charts."
+msgstr ""
+
+msgid "ClusterIntegration|Hide"
+msgstr ""
+
+msgid "ClusterIntegration|If you are setting up multiple clusters and are using Auto DevOps, %{help_link_start}read this first%{help_link_end}."
+msgstr ""
+
+msgid "ClusterIntegration|In order to view the health of your cluster, you must first install Prometheus below."
+msgstr ""
+
+msgid "ClusterIntegration|Ingress"
+msgstr ""
+
+msgid "ClusterIntegration|Ingress Endpoint"
+msgstr ""
+
+msgid "ClusterIntegration|Ingress gives you a way to route requests to services based on the request host or path, centralizing a number of services into a single entrypoint."
+msgstr ""
+
+msgid "ClusterIntegration|Installing Ingress may incur additional costs. Learn more about %{pricingLink}."
+msgstr ""
+
+msgid "ClusterIntegration|Instance cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Integrate Kubernetes cluster automation"
+msgstr ""
+
+msgid "ClusterIntegration|Integration status"
+msgstr ""
+
+msgid "ClusterIntegration|Issuer Email"
+msgstr ""
+
+msgid "ClusterIntegration|Issuers represent a certificate authority. You must provide an email address for your Issuer. "
+msgstr ""
+
+msgid "ClusterIntegration|Jupyter Hostname"
+msgstr ""
+
+msgid "ClusterIntegration|JupyterHub"
+msgstr ""
+
+msgid "ClusterIntegration|JupyterHub, a multi-user Hub, spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server. JupyterHub can be used to serve notebooks to a class of students, a corporate data science group, or a scientific research group."
+msgstr ""
+
+msgid "ClusterIntegration|Knative"
+msgstr ""
+
+msgid "ClusterIntegration|Knative Domain Name:"
+msgstr ""
+
+msgid "ClusterIntegration|Knative Endpoint:"
+msgstr ""
+
+msgid "ClusterIntegration|Knative domain name was updated successfully."
+msgstr ""
+
+msgid "ClusterIntegration|Knative extends Kubernetes to provide a set of middleware components that are essential to build modern, source-centric, and container-based applications that can run anywhere: on premises, in the cloud, or even in a third-party data center."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster details"
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster is being created on Google Kubernetes Engine..."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster name"
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
+msgstr ""
+
+msgid "ClusterIntegration|Kubernetes clusters can be used to deploy applications and to provide Review Apps for this project"
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about %{help_link_start_machine_type}machine types%{help_link_end} and %{help_link_start_pricing}pricing%{help_link_end}."
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about Kubernetes"
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about group Kubernetes clusters"
+msgstr ""
+
+msgid "ClusterIntegration|Learn more about instance Kubernetes clusters"
+msgstr ""
+
+msgid "ClusterIntegration|Let's Encrypt"
+msgstr ""
+
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
+msgid "ClusterIntegration|Machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Make sure your account %{link_to_requirements} to create Kubernetes clusters"
+msgstr ""
+
+msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
+msgstr ""
+
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
+msgid "ClusterIntegration|No machine types matched your search"
+msgstr ""
+
+msgid "ClusterIntegration|No projects found"
+msgstr ""
+
+msgid "ClusterIntegration|No projects matched your search"
+msgstr ""
+
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
+msgid "ClusterIntegration|No zones matched your search"
+msgstr ""
+
+msgid "ClusterIntegration|Number of nodes"
+msgstr ""
+
+msgid "ClusterIntegration|Number of nodes must be a numerical value."
+msgstr ""
+
+msgid "ClusterIntegration|Please enter access information for your Kubernetes cluster. If you need help, you can read our %{link_to_help_page} on Kubernetes"
+msgstr ""
+
+msgid "ClusterIntegration|Please make sure that your Google account meets the following requirements:"
+msgstr ""
+
+msgid "ClusterIntegration|Point a wildcard DNS to this generated endpoint in order to access your application after it has been deployed."
+msgstr ""
+
+msgid "ClusterIntegration|Project cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Project namespace (optional, unique)"
+msgstr ""
+
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
+msgid "ClusterIntegration|Prometheus"
+msgstr ""
+
+msgid "ClusterIntegration|Prometheus is an open-source monitoring system with %{gitlabIntegrationLink} to monitor deployed applications."
+msgstr ""
+
+msgid "ClusterIntegration|RBAC-enabled cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
+msgstr ""
+
+msgid "ClusterIntegration|Region"
+msgstr ""
+
+msgid "ClusterIntegration|Remove Kubernetes cluster integration"
+msgstr ""
+
+msgid "ClusterIntegration|Remove integration"
+msgstr ""
+
+msgid "ClusterIntegration|Remove this Kubernetes cluster's configuration from this project. This will not delete your actual Kubernetes cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Replace this with your own hostname if you want. If you do so, point hostname to Ingress IP Address from above."
+msgstr ""
+
+msgid "ClusterIntegration|Request to begin installing failed"
+msgstr ""
+
+msgid "ClusterIntegration|Request to begin uninstalling failed"
+msgstr ""
+
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
+msgid "ClusterIntegration|Save changes"
+msgstr ""
+
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Search machine types"
+msgstr ""
+
+msgid "ClusterIntegration|Search projects"
+msgstr ""
+
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
+msgid "ClusterIntegration|Search zones"
+msgstr ""
+
+msgid "ClusterIntegration|See and edit the details for your Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Select machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Select project"
+msgstr ""
+
+msgid "ClusterIntegration|Select project and zone to choose machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Select project to choose zone"
+msgstr ""
+
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
+msgid "ClusterIntegration|Select zone"
+msgstr ""
+
+msgid "ClusterIntegration|Select zone to choose machine type"
+msgstr ""
+
+msgid "ClusterIntegration|Service Token"
+msgstr ""
+
+msgid "ClusterIntegration|Service token is required."
+msgstr ""
+
+msgid "ClusterIntegration|Show"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong on our end."
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while creating your Kubernetes cluster on Google Kubernetes Engine"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while installing %{title}"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while uninstalling %{title}"
+msgstr ""
+
+msgid "ClusterIntegration|Something went wrong while updating Knative domain name."
+msgstr ""
+
+msgid "ClusterIntegration|Specifying a domain will allow you to use Auto Review Apps and Auto Deploy stages for %{auto_devops_start}Auto DevOps%{auto_devops_end}. The domain should have a wildcard DNS configured matching the domain."
+msgstr ""
+
+msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster."
+msgstr ""
+
+msgid "ClusterIntegration|The URL used to access the Kubernetes API."
+msgstr ""
+
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
+msgstr ""
+
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
+msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
+msgstr ""
+
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
+msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
+msgstr ""
+
+msgid "ClusterIntegration|This account must have permissions to create a Kubernetes cluster in the %{link_to_container_project} specified below"
+msgstr ""
+
+msgid "ClusterIntegration|This option will allow you to install applications on RBAC clusters."
+msgstr ""
+
+msgid "ClusterIntegration|To access your application after deployment, point a wildcard DNS to the Knative Endpoint."
+msgstr ""
+
+msgid "ClusterIntegration|Toggle Kubernetes cluster"
+msgstr ""
+
+msgid "ClusterIntegration|Uninstall %{appTitle}"
+msgstr ""
+
+msgid "ClusterIntegration|Update failed. Please check the logs and try again."
+msgstr ""
+
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
+msgid "ClusterIntegration|Validating project billing status"
+msgstr ""
+
+msgid "ClusterIntegration|We could not verify that one of your projects on GCP has billing enabled. Please try again."
+msgstr ""
+
+msgid "ClusterIntegration|With a Kubernetes cluster associated to this project, you can use review apps, deploy your applications, run your pipelines, and much more in an easy way."
+msgstr ""
+
+msgid "ClusterIntegration|You are about to uninstall %{appTitle} from your cluster."
+msgstr ""
+
+msgid "ClusterIntegration|You must first install Helm Tiller before installing the applications below"
+msgstr ""
+
+msgid "ClusterIntegration|You must have an RBAC-enabled cluster to install Knative."
+msgstr ""
+
+msgid "ClusterIntegration|Your account must have %{link_to_kubernetes_engine}"
+msgstr ""
+
+msgid "ClusterIntegration|Your cluster API is unreachable. Please ensure your API URL is correct."
+msgstr ""
+
+msgid "ClusterIntegration|Zone"
+msgstr ""
+
+msgid "ClusterIntegration|access to Google Kubernetes Engine"
+msgstr ""
+
+msgid "ClusterIntegration|documentation"
+msgstr ""
+
+msgid "ClusterIntegration|help page"
+msgstr ""
+
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
+msgid "ClusterIntegration|meets the requirements"
+msgstr ""
+
+msgid "ClusterIntegration|pricing"
+msgstr ""
+
+msgid "ClusterIntegration|sign up"
+msgstr ""
+
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
+msgid "Code"
+msgstr ""
+
+msgid "Code Owners"
+msgstr ""
+
+msgid "Code owner approval is required"
+msgstr ""
+
+msgid "Code owners"
+msgstr ""
+
+msgid "CodeOwner|Pattern"
+msgstr ""
+
+msgid "Cohorts"
+msgstr ""
+
+msgid "Collapse"
+msgstr ""
+
+msgid "Collapse approvers"
+msgstr ""
+
+msgid "Collapse sidebar"
+msgstr ""
+
+msgid "Collector hostname"
+msgstr ""
+
+msgid "ComboSearch is not defined"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Command line instructions"
+msgstr ""
+
+msgid "Commands applied"
+msgstr ""
+
+msgid "Commands did not apply"
+msgstr ""
+
+msgid "Comment"
+msgstr ""
+
+msgid "Comment & close %{noteable_name}"
+msgstr ""
+
+msgid "Comment & reopen %{noteable_name}"
+msgstr ""
+
+msgid "Comment & resolve thread"
+msgstr ""
+
+msgid "Comment & unresolve thread"
+msgstr ""
+
+msgid "Comment form position"
+msgstr ""
+
+msgid "Comment is being updated"
+msgstr ""
+
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
+msgid "Comments"
+msgstr ""
+
+msgid "Commit"
+msgid_plural "Commits"
+msgstr[0] ""
+
+msgid "Commit %{commit_id}"
+msgstr ""
+
+msgid "Commit (when editing commit message)"
+msgstr ""
+
+msgid "Commit Message"
+msgstr ""
+
+msgid "Commit deleted"
+msgstr ""
+
+msgid "Commit duration in minutes for last 30 commits"
+msgstr ""
+
+msgid "Commit message"
+msgstr ""
+
+msgid "Commit statistics for %{ref} %{start_time} - %{end_time}"
+msgstr ""
+
+msgid "Commit to %{branchName} branch"
+msgstr ""
+
+msgid "CommitBoxTitle|Commit"
+msgstr ""
+
+msgid "CommitMessage|Add %{file_name}"
+msgstr ""
+
+msgid "CommitWidget|authored"
+msgstr ""
+
+msgid "Commits"
+msgstr ""
+
+msgid "Commits feed"
+msgstr ""
+
+msgid "Commits per day hour (UTC)"
+msgstr ""
+
+msgid "Commits per day of month"
+msgstr ""
+
+msgid "Commits per weekday"
+msgstr ""
+
+msgid "Commits|An error occurred while fetching merge requests data."
+msgstr ""
+
+msgid "Commits|Commit: %{commitText}"
+msgstr ""
+
+msgid "Commits|History"
+msgstr ""
+
+msgid "Commits|No related merge requests found"
+msgstr ""
+
+msgid "Committed by"
+msgstr ""
+
+msgid "Commit…"
+msgstr ""
+
+msgid "Company"
+msgstr ""
+
+msgid "Compare"
+msgstr ""
+
+msgid "Compare Git revisions"
+msgstr ""
+
+msgid "Compare Revisions"
+msgstr ""
+
+msgid "Compare changes"
+msgstr ""
+
+msgid "Compare changes with the last commit"
+msgstr ""
+
+msgid "Compare changes with the merge request target branch"
+msgstr ""
+
+msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
+msgstr ""
+
+msgid "CompareBranches|Compare"
+msgstr ""
+
+msgid "CompareBranches|Source"
+msgstr ""
+
+msgid "CompareBranches|Target"
+msgstr ""
+
+msgid "CompareBranches|There isn't anything to compare."
+msgstr ""
+
+msgid "Complete"
+msgstr ""
+
+msgid "Confidential"
+msgstr ""
+
+msgid "Confidentiality"
+msgstr ""
+
+msgid "Configuration"
+msgstr ""
+
+msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
+msgstr ""
+
+msgid "Configure Gitaly timeouts."
+msgstr ""
+
+msgid "Configure Let's Encrypt"
+msgstr ""
+
+msgid "Configure Prometheus"
+msgstr ""
+
+msgid "Configure Tracing"
+msgstr ""
+
+msgid "Configure a <code>.gitlab-webide.yml</code> file in the <code>.gitlab</code> directory to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
+msgstr ""
+
+msgid "Configure automatic git checks and housekeeping on repositories."
+msgstr ""
+
+msgid "Configure existing installation"
+msgstr ""
+
+msgid "Configure limits for web and API requests."
+msgstr ""
+
+msgid "Configure push mirrors."
+msgstr ""
+
+msgid "Configure storage path settings."
+msgstr ""
+
+msgid "Configure the %{link} integration."
+msgstr ""
+
+msgid "Configure the way a user creates a new account."
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Confirmation email sent to %{email}"
+msgstr ""
+
+msgid "Confirmation required"
+msgstr ""
+
+msgid "Congratulations! You have enabled Two-factor Authentication!"
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Connect all repositories"
+msgstr ""
+
+msgid "Connect repositories from GitHub"
+msgstr ""
+
+msgid "Connect your external repositories, and CI/CD pipelines will run for new commits. A GitLab project will be created with only CI/CD features enabled."
+msgstr ""
+
+msgid "Connecting to terminal sync service"
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
+msgid "Connection failure"
+msgstr ""
+
+msgid "Contact an owner of group %{namespace_name} to upgrade the plan."
+msgstr ""
+
+msgid "Contact owner %{link_start}%{owner_name}%{link_end} to upgrade the plan."
+msgstr ""
+
+msgid "Contact sales to upgrade"
+msgstr ""
+
+msgid "Contact your Administrator to upgrade your license."
+msgstr ""
+
+msgid "Container Registry"
+msgstr ""
+
+msgid "Container registry images"
+msgstr ""
+
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
+
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
+
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
+
+msgid "ContainerRegistry|Docker connection error"
+msgstr ""
+
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
+msgid "ContainerRegistry|No tags in Container Registry for this container image."
+msgstr ""
+
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
+
+msgid "ContainerRegistry|Remove repository"
+msgstr ""
+
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
+
+msgid "ContainerRegistry|Size"
+msgstr ""
+
+msgid "ContainerRegistry|Tag"
+msgstr ""
+
+msgid "ContainerRegistry|Tag ID"
+msgstr ""
+
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
+
+msgid "Contains %{count} blobs of images (%{size})"
+msgstr ""
+
+msgid "Contents of .gitlab-ci.yml"
+msgstr ""
+
+msgid "Continue"
+msgstr ""
+
+msgid "Continue to the next step"
+msgstr ""
+
+msgid "Continuous Integration and Deployment"
+msgstr ""
+
+msgid "Contribute to GitLab"
+msgstr ""
+
+msgid "Contribution"
+msgstr ""
+
+msgid "Contribution Analytics"
+msgstr ""
+
+msgid "Contribution Charts"
+msgstr ""
+
+msgid "Contributions for <strong>%{calendar_date}</strong>"
+msgstr ""
+
+msgid "Contributions per group member"
+msgstr ""
+
+msgid "Contributors"
+msgstr ""
+
+msgid "ContributorsPage|%{startDate} – %{endDate}"
+msgstr ""
+
+msgid "ContributorsPage|Building repository graph."
+msgstr ""
+
+msgid "ContributorsPage|Commits to %{branch_name}, excluding merge commits. Limited to 6,000 commits."
+msgstr ""
+
+msgid "ContributorsPage|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "Control emails linked to your account"
+msgstr ""
+
+msgid "Control the display of third party offers."
+msgstr ""
+
+msgid "Control the maximum concurrency of repository backfill for this secondary node"
+msgstr ""
+
+msgid "ConvDev Index"
+msgstr ""
+
+msgid "Cookie domain"
+msgstr ""
+
+msgid "Copied"
+msgstr ""
+
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
+msgid "Copy %{http_label} clone URL"
+msgstr ""
+
+msgid "Copy %{protocol} clone URL"
+msgstr ""
+
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
+msgid "Copy ID to clipboard"
+msgstr ""
+
+msgid "Copy KRB5 clone URL"
+msgstr ""
+
+msgid "Copy SSH clone URL"
+msgstr ""
+
+msgid "Copy SSH public key"
+msgstr ""
+
+msgid "Copy URL to clipboard"
+msgstr ""
+
+msgid "Copy branch name to clipboard"
+msgstr ""
+
+msgid "Copy command to clipboard"
+msgstr ""
+
+msgid "Copy commit SHA to clipboard"
+msgstr ""
+
+msgid "Copy file path to clipboard"
+msgstr ""
+
+msgid "Copy labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
+msgid "Copy labels and milestone from other issue or merge request in this project"
+msgstr ""
+
+msgid "Copy link"
+msgstr ""
+
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
+msgid "Copy reference to clipboard"
+msgstr ""
+
+msgid "Copy secret to clipboard"
+msgstr ""
+
+msgid "Copy source to clipboard"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Copy token to clipboard"
+msgstr ""
+
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
+msgid "Could not authorize chat nickname. Try again!"
+msgstr ""
+
+msgid "Could not change HEAD: branch '%{branch}' does not exist"
+msgstr ""
+
+msgid "Could not connect to FogBugz, check your URL"
+msgstr ""
+
+msgid "Could not connect to Web IDE file mirror service."
+msgstr ""
+
+msgid "Could not create Wiki Repository at this time. Please try again later."
+msgstr ""
+
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr ""
+
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
+msgstr ""
+
+msgid "Could not revoke impersonation token %{token_name}."
+msgstr ""
+
+msgid "Could not revoke personal access token %{personal_access_token_name}."
+msgstr ""
+
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
+msgid "Coverage"
+msgstr ""
+
+msgid "Create"
+msgstr ""
+
+msgid "Create %{type} token"
+msgstr ""
+
+msgid "Create New Directory"
+msgstr ""
+
+msgid "Create New Domain"
+msgstr ""
+
+msgid "Create a GitLab account first, and then connect it to your %{label} account."
+msgstr ""
+
+msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
+msgstr ""
+
+msgid "Create a merge request"
+msgstr ""
+
+msgid "Create a new branch"
+msgstr ""
+
+msgid "Create a new file as there are no files yet. Afterwards, you'll be able to commit your changes."
+msgstr ""
+
+msgid "Create a new issue"
+msgstr ""
+
+msgid "Create a new repository"
+msgstr ""
+
+msgid "Create a personal access token on your account to pull or push via %{protocol}."
+msgstr ""
+
+msgid "Create an issue. Issues are created for each alert triggered."
+msgstr ""
+
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
+msgid "Create branch"
+msgstr ""
+
+msgid "Create commit"
+msgstr ""
+
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
+msgid "Create directory"
+msgstr ""
+
+msgid "Create empty repository"
+msgstr ""
+
+msgid "Create epic"
+msgstr ""
+
+msgid "Create file"
+msgstr ""
+
+msgid "Create group"
+msgstr ""
+
+msgid "Create group label"
+msgstr ""
+
+msgid "Create lists from labels. Issues with that label appear in that list."
+msgstr ""
+
+msgid "Create merge request"
+msgstr ""
+
+msgid "Create merge request and branch"
+msgstr ""
+
+msgid "Create milestone"
+msgstr ""
+
+msgid "Create new board"
+msgstr ""
+
+msgid "Create new branch"
+msgstr ""
+
+msgid "Create new directory"
+msgstr ""
+
+msgid "Create new file"
+msgstr ""
+
+msgid "Create new file or directory"
+msgstr ""
+
+msgid "Create new label"
+msgstr ""
+
+msgid "Create new..."
+msgstr ""
+
+msgid "Create project"
+msgstr ""
+
+msgid "Create project label"
+msgstr ""
+
+msgid "Create your first page"
+msgstr ""
+
+msgid "CreateGroup|You don’t have permission to create a subgroup in this group."
+msgstr ""
+
+msgid "CreateGroup|You don’t have permission to create groups."
+msgstr ""
+
+msgid "CreateTag|Tag"
+msgstr ""
+
+msgid "CreateTokenToCloneLink|create a personal access token"
+msgstr ""
+
+msgid "Created"
+msgstr ""
+
+msgid "Created At"
+msgstr ""
+
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created by me"
+msgstr ""
+
+msgid "Created issue %{issueLink}"
+msgstr ""
+
+msgid "Created issue %{issueLink} at %{projectLink}"
+msgstr ""
+
+msgid "Created merge request %{mergeRequestLink}"
+msgstr ""
+
+msgid "Created merge request %{mergeRequestLink} at %{projectLink}"
+msgstr ""
+
+msgid "Created on"
+msgstr ""
+
+msgid "Created on:"
+msgstr ""
+
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creating epic"
+msgstr ""
+
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
+msgid "Cron Timezone"
+msgstr ""
+
+msgid "Cron syntax"
+msgstr ""
+
+msgid "Cross-project dependencies"
+msgstr ""
+
+msgid "Current Branch"
+msgstr ""
+
+msgid "Current Project"
+msgstr ""
+
+msgid "Current node"
+msgstr ""
+
+msgid "Current password"
+msgstr ""
+
+msgid "CurrentUser|Profile"
+msgstr ""
+
+msgid "CurrentUser|Settings"
+msgstr ""
+
+msgid "Custom CI config path"
+msgstr ""
+
+msgid "Custom hostname (for private commit emails)"
+msgstr ""
+
+msgid "Custom notification events"
+msgstr ""
+
+msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}."
+msgstr ""
+
+msgid "Custom project templates"
+msgstr ""
+
+msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
+msgid "Customize colors"
+msgstr ""
+
+msgid "Customize how FogBugz email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
+msgstr ""
+
+msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
+msgstr ""
+
+msgid "Customize icon"
+msgstr ""
+
+msgid "Customize language and region related settings."
+msgstr ""
+
+msgid "Customize name"
+msgstr ""
+
+msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
+msgstr ""
+
+msgid "Cycle Analytics"
+msgstr ""
+
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
+msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Code"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Issue"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Plan"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Production"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Review"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Staging"
+msgstr ""
+
+msgid "CycleAnalyticsStage|Test"
+msgstr ""
+
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
+msgid "DNS"
+msgstr ""
+
+msgid "Dashboard"
+msgstr ""
+
+msgid "DashboardProjects|All"
+msgstr ""
+
+msgid "DashboardProjects|Personal"
+msgstr ""
+
+msgid "DashboardProjects|Trending"
+msgstr ""
+
+msgid "Dashboards"
+msgstr ""
+
+msgid "Dashboard|%{firstProject} and %{secondProject}"
+msgstr ""
+
+msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
+msgstr ""
+
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
+msgstr ""
+
+msgid "Data is still calculating..."
+msgstr ""
+
+msgid "Date picker"
+msgstr ""
+
+msgid "DayTitle|F"
+msgstr ""
+
+msgid "DayTitle|M"
+msgstr ""
+
+msgid "DayTitle|S"
+msgstr ""
+
+msgid "DayTitle|W"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Dec"
+msgstr ""
+
+msgid "December"
+msgstr ""
+
+msgid "Decline"
+msgstr ""
+
+msgid "Decline and sign out"
+msgstr ""
+
+msgid "Default Branch"
+msgstr ""
+
+msgid "Default artifacts expiration"
+msgstr ""
+
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
+msgid "Default classification label"
+msgstr ""
+
+msgid "Default description template for issues"
+msgstr ""
+
+msgid "Default description template for merge requests"
+msgstr ""
+
+msgid "Default first day of the week"
+msgstr ""
+
+msgid "Default first day of the week in calendars and date pickers."
+msgstr ""
+
+msgid "Default issue template"
+msgstr ""
+
+msgid "Default project deletion protection"
+msgstr ""
+
+msgid "Default: Directly import the Google Code email address or username"
+msgstr ""
+
+msgid "Default: Map a FogBugz account ID to a full name"
+msgstr ""
+
+msgid "Define a custom pattern with cron syntax"
+msgstr ""
+
+msgid "Define environments in the deploy stage(s) in <code>.gitlab-ci.yml</code> to track deployments here."
+msgstr ""
+
+msgid "DelayedJobs|Are you sure you want to run %{jobName} immediately? Otherwise this job will run automatically after it's timer finishes."
+msgstr ""
+
+msgid "DelayedJobs|Are you sure you want to run %{job_name} immediately? This job will run automatically after it's timer finishes."
+msgstr ""
+
+msgid "DelayedJobs|Start now"
+msgstr ""
+
+msgid "DelayedJobs|Unschedule"
+msgstr ""
+
+msgid "DelayedJobs|delayed"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Delete Comment"
+msgstr ""
+
+msgid "Delete Package"
+msgstr ""
+
+msgid "Delete Snippet"
+msgstr ""
+
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
+msgid "Delete comment"
+msgstr ""
+
+msgid "Delete license"
+msgstr ""
+
+msgid "Delete list"
+msgstr ""
+
+msgid "Delete source branch"
+msgstr ""
+
+msgid "Delete this attachment"
+msgstr ""
+
+msgid "DeleteProject|Failed to remove project repository. Please try again or contact administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to remove some tags in project container registry. Please try again or contact administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to remove wiki repository. Please try again or contact administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to restore project repository. Please contact the administrator."
+msgstr ""
+
+msgid "DeleteProject|Failed to restore wiki repository. Please contact the administrator."
+msgstr ""
+
+msgid "Deleted"
+msgstr ""
+
+msgid "Deleted chat nickname: %{chat_name}!"
+msgstr ""
+
+msgid "Deleted in this version"
+msgstr ""
+
+msgid "Deleting the license failed."
+msgstr ""
+
+msgid "Deleting the license failed. The license was not found."
+msgstr ""
+
+msgid "Deleting the license failed. You are not permitted to perform this action."
+msgstr ""
+
+msgid "Denied authorization of chat nickname %{user_name}."
+msgstr ""
+
+msgid "Deny"
+msgstr ""
+
+msgid "Dependencies"
+msgstr ""
+
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
+msgid "Dependencies|Component"
+msgstr ""
+
+msgid "Dependencies|Component name"
+msgstr ""
+
+msgid "Dependencies|Export as JSON"
+msgstr ""
+
+msgid "Dependencies|Job failed to generate the dependency list"
+msgstr ""
+
+msgid "Dependencies|License"
+msgstr ""
+
+msgid "Dependencies|Location"
+msgstr ""
+
+msgid "Dependencies|Packager"
+msgstr ""
+
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
+msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
+msgstr ""
+
+msgid "Dependencies|Unsupported file(s) detected"
+msgstr ""
+
+msgid "Dependencies|Version"
+msgstr ""
+
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
+msgid "Dependency List"
+msgstr ""
+
+msgid "Dependency Proxy"
+msgstr ""
+
+msgid "Dependency proxy"
+msgstr ""
+
+msgid "Dependency proxy URL"
+msgstr ""
+
+msgid "Dependency proxy feature is limited to public groups for now."
+msgstr ""
+
+msgid "DependencyProxy|Toggle Dependency Proxy"
+msgstr ""
+
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+
+msgid "Deploy"
+msgid_plural "Deploys"
+msgstr[0] ""
+
+msgid "Deploy Keys"
+msgstr ""
+
+msgid "Deploy key was successfully updated."
+msgstr ""
+
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
+msgid "DeployKeys|+%{count} others"
+msgstr ""
+
+msgid "DeployKeys|Current project"
+msgstr ""
+
+msgid "DeployKeys|Deploy key"
+msgstr ""
+
+msgid "DeployKeys|Enabled deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Error enabling deploy key"
+msgstr ""
+
+msgid "DeployKeys|Error getting deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Error removing deploy key"
+msgstr ""
+
+msgid "DeployKeys|Expand %{count} other projects"
+msgstr ""
+
+msgid "DeployKeys|Loading deploy keys"
+msgstr ""
+
+msgid "DeployKeys|No deploy keys found. Create one with the form above."
+msgstr ""
+
+msgid "DeployKeys|Privately accessible deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Project usage"
+msgstr ""
+
+msgid "DeployKeys|Publicly accessible deploy keys"
+msgstr ""
+
+msgid "DeployKeys|Read access only"
+msgstr ""
+
+msgid "DeployKeys|Write access allowed"
+msgstr ""
+
+msgid "DeployKeys|You are going to remove this deploy key. Are you sure?"
+msgstr ""
+
+msgid "DeployTokens|Active Deploy Tokens (%{active_tokens})"
+msgstr ""
+
+msgid "DeployTokens|Add a deploy token"
+msgstr ""
+
+msgid "DeployTokens|Allows read-only access to the registry images"
+msgstr ""
+
+msgid "DeployTokens|Allows read-only access to the repository"
+msgstr ""
+
+msgid "DeployTokens|Copy deploy token to clipboard"
+msgstr ""
+
+msgid "DeployTokens|Copy username to clipboard"
+msgstr ""
+
+msgid "DeployTokens|Create deploy token"
+msgstr ""
+
+msgid "DeployTokens|Created"
+msgstr ""
+
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
+msgid "DeployTokens|Deploy Tokens"
+msgstr ""
+
+msgid "DeployTokens|Deploy tokens allow read-only access to your repository and registry images."
+msgstr ""
+
+msgid "DeployTokens|Expires"
+msgstr ""
+
+msgid "DeployTokens|Name"
+msgstr ""
+
+msgid "DeployTokens|Pick a name for the application, and we'll give you a unique deploy token."
+msgstr ""
+
+msgid "DeployTokens|Revoke"
+msgstr ""
+
+msgid "DeployTokens|Revoke %{name}"
+msgstr ""
+
+msgid "DeployTokens|Scopes"
+msgstr ""
+
+msgid "DeployTokens|This action cannot be undone."
+msgstr ""
+
+msgid "DeployTokens|This project has no active Deploy Tokens."
+msgstr ""
+
+msgid "DeployTokens|Use this token as a password. Make sure you save it - you won't be able to access it again."
+msgstr ""
+
+msgid "DeployTokens|Use this username as a login."
+msgstr ""
+
+msgid "DeployTokens|Username"
+msgstr ""
+
+msgid "DeployTokens|You are about to revoke"
+msgstr ""
+
+msgid "DeployTokens|Your New Deploy Token"
+msgstr ""
+
+msgid "DeployTokens|Your new project deploy token has been created."
+msgstr ""
+
+msgid "Deployed"
+msgstr ""
+
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
+msgid "Deployed to"
+msgstr ""
+
+msgid "Deploying to"
+msgstr ""
+
+msgid "Deprioritize label"
+msgstr ""
+
+msgid "Descending"
+msgstr ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Description parsed with %{link_start}GitLab Flavored Markdown%{link_end}"
+msgstr ""
+
+msgid "Description templates allow you to define context-specific templates for issue and merge request description fields for your project."
+msgstr ""
+
+msgid "Description:"
+msgstr ""
+
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
+msgid "DesignManagement|%{current_design} of %{designs_count}"
+msgstr ""
+
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not find design, please try again."
+msgstr ""
+
+msgid "DesignManagement|Error uploading a new design. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Go back to designs"
+msgstr ""
+
+msgid "DesignManagement|Go to next design"
+msgstr ""
+
+msgid "DesignManagement|Go to previous design"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
+msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
+msgstr ""
+
+msgid "DesignManagement|The one place for your designs"
+msgstr ""
+
+msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
+msgstr ""
+
+msgid "Designs"
+msgstr ""
+
+msgid "Destroy"
+msgstr ""
+
+msgid "Details"
+msgstr ""
+
+msgid "Details (default)"
+msgstr ""
+
+msgid "Detect host keys"
+msgstr ""
+
+msgid "Diff content limits"
+msgstr ""
+
+msgid "Diff limits"
+msgstr ""
+
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
+msgid "Diffs|No file name available"
+msgstr ""
+
+msgid "Diffs|Show all lines"
+msgstr ""
+
+msgid "Diffs|Something went wrong while fetching diff lines."
+msgstr ""
+
+msgid "Direction"
+msgstr ""
+
+msgid "Directory name"
+msgstr ""
+
+msgid "Disable"
+msgstr ""
+
+msgid "Disable email notifications"
+msgstr ""
+
+msgid "Disable for this project"
+msgstr ""
+
+msgid "Disable group Runners"
+msgstr ""
+
+msgid "Disable shared Runners"
+msgstr ""
+
+msgid "Disable two-factor authentication"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Disabled mirrors can only be enabled by instance owners. It is recommended that you delete them."
+msgstr ""
+
+msgid "Discard"
+msgstr ""
+
+msgid "Discard all changes"
+msgstr ""
+
+msgid "Discard all unstaged changes?"
+msgstr ""
+
+msgid "Discard changes"
+msgstr ""
+
+msgid "Discard changes to %{path}?"
+msgstr ""
+
+msgid "Discard draft"
+msgstr ""
+
+msgid "Discard review"
+msgstr ""
+
+msgid "DiscordService|Discord Notifications"
+msgstr ""
+
+msgid "DiscordService|Receive event notifications in Discord"
+msgstr ""
+
+msgid "Discover GitLab Geo"
+msgstr ""
+
+msgid "Discover projects, groups and snippets. Share your projects with others"
+msgstr ""
+
+msgid "Discuss a specific suggestion or question"
+msgstr ""
+
+msgid "Discuss a specific suggestion or question that needs to be resolved"
+msgstr ""
+
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
+msgid "Discussion"
+msgstr ""
+
+msgid "Dismiss"
+msgstr ""
+
+msgid "Dismiss ConvDev introduction"
+msgstr ""
+
+msgid "Dismiss Cycle Analytics introduction box"
+msgstr ""
+
+msgid "Dismiss Merge Request promotion"
+msgstr ""
+
+msgid "Dismiss trial promotion"
+msgstr ""
+
+msgid "Dismissed"
+msgstr ""
+
+msgid "Dismissed at %{projectLink}"
+msgstr ""
+
+msgid "Dismissed on pipeline %{pipelineLink}"
+msgstr ""
+
+msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
+msgstr ""
+
+msgid "Display name"
+msgstr ""
+
+msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
+msgstr ""
+
+msgid "Dockerfile"
+msgstr ""
+
+msgid "Documentation for popular identity providers"
+msgstr ""
+
+msgid "Doing"
+msgstr ""
+
+msgid "Domain"
+msgstr ""
+
+msgid "Domain verification is an essential security measure for public GitLab sites. Users are required to demonstrate they control a domain before it is enabled"
+msgstr ""
+
+msgid "Don't paste the private part of the GPG key. Paste the public part which begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'."
+msgstr ""
+
+msgid "Don't show again"
+msgstr ""
+
+msgid "Don't worry, you can access this tour by clicking on the help icon in the top right corner and choose <strong>Learn GitLab</strong>."
+msgstr ""
+
+msgid "Done"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid "Download CSV"
+msgstr ""
+
+msgid "Download artifacts"
+msgstr ""
+
+msgid "Download as"
+msgstr ""
+
+msgid "Download asset"
+msgstr ""
+
+msgid "Download codes"
+msgstr ""
+
+msgid "Download export"
+msgstr ""
+
+msgid "Download image"
+msgstr ""
+
+msgid "Download license"
+msgstr ""
+
+msgid "Download source code"
+msgstr ""
+
+msgid "Download this directory"
+msgstr ""
+
+msgid "DownloadCommit|Email Patches"
+msgstr ""
+
+msgid "DownloadCommit|Plain Diff"
+msgstr ""
+
+msgid "DownloadSource|Download"
+msgstr ""
+
+msgid "Downstream"
+msgstr ""
+
+msgid "Downvotes"
+msgstr ""
+
+msgid "Due date"
+msgstr ""
+
+msgid "During this process, you’ll be asked for URLs from GitLab’s side. Use the URLs shown below."
+msgstr ""
+
+msgid "Each Runner can be in one of the following states:"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit %{issuable}"
+msgstr ""
+
+msgid "Edit %{name}"
+msgstr ""
+
+msgid "Edit Comment"
+msgstr ""
+
+msgid "Edit Deploy Key"
+msgstr ""
+
+msgid "Edit Label"
+msgstr ""
+
+msgid "Edit Milestone"
+msgstr ""
+
+msgid "Edit Password"
+msgstr ""
+
+msgid "Edit Pipeline Schedule %{id}"
+msgstr ""
+
+msgid "Edit Snippet"
+msgstr ""
+
+msgid "Edit application"
+msgstr ""
+
+msgid "Edit board"
+msgstr ""
+
+msgid "Edit comment"
+msgstr ""
+
+msgid "Edit description"
+msgstr ""
+
+msgid "Edit environment"
+msgstr ""
+
+msgid "Edit epic description"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Edit files in the editor and commit changes here"
+msgstr ""
+
+msgid "Edit group: %{group_name}"
+msgstr ""
+
+msgid "Edit identity for %{user_name}"
+msgstr ""
+
+msgid "Edit issues"
+msgstr ""
+
+msgid "Edit public deploy key"
+msgstr ""
+
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
+msgid "Elasticsearch"
+msgstr ""
+
+msgid "Elasticsearch indexing restrictions"
+msgstr ""
+
+msgid "Elasticsearch indexing started"
+msgstr ""
+
+msgid "Elasticsearch integration. Elasticsearch AWS IAM."
+msgstr ""
+
+msgid "Elastic|None. Select namespaces to index."
+msgstr ""
+
+msgid "Elastic|None. Select projects to index."
+msgstr ""
+
+msgid "Email"
+msgstr ""
+
+msgid "Email address"
+msgstr ""
+
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
+msgid "Email patch"
+msgstr ""
+
+msgid "Email the pipelines status to a list of recipients."
+msgstr ""
+
+msgid "EmailError|It appears that the email is blank. Make sure your reply is at the top of the email, we can't process inline replies."
+msgstr ""
+
+msgid "EmailError|The thread you are replying to no longer exists, perhaps it was deleted? If you believe this is in error, contact a staff member."
+msgstr ""
+
+msgid "EmailError|We couldn't figure out what the email is for. Please create your issue or comment through the web interface."
+msgstr ""
+
+msgid "EmailError|We couldn't figure out what the email is in reply to. Please create your comment through the web interface."
+msgstr ""
+
+msgid "EmailError|We couldn't figure out what user corresponds to the email. Please create your comment through the web interface."
+msgstr ""
+
+msgid "EmailError|We couldn't find the project. Please check if there's any typo."
+msgstr ""
+
+msgid "EmailError|You are not allowed to perform this action. If you believe this is in error, contact a staff member."
+msgstr ""
+
+msgid "EmailError|Your account has been blocked. If you believe this is in error, contact a staff member."
+msgstr ""
+
+msgid "EmailToken|reset it"
+msgstr ""
+
+msgid "EmailToken|resetting..."
+msgstr ""
+
+msgid "Emails"
+msgstr ""
+
+msgid "Emails separated by comma"
+msgstr ""
+
+msgid "EmailsOnPushService|Disable code diffs"
+msgstr ""
+
+msgid "EmailsOnPushService|Don't include possibly sensitive code diffs in notification body."
+msgstr ""
+
+msgid "EmailsOnPushService|Email the commits and diff of each push to a list of recipients."
+msgstr ""
+
+msgid "EmailsOnPushService|Emails on push"
+msgstr ""
+
+msgid "EmailsOnPushService|Emails separated by whitespace"
+msgstr ""
+
+msgid "EmailsOnPushService|Send from committer"
+msgstr ""
+
+msgid "EmailsOnPushService|Send notifications from the committer's email address if the domain is part of the domain GitLab is running on (e.g. %{domains})."
+msgstr ""
+
+msgid "Embed"
+msgstr ""
+
+msgid "Empty file"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Enable Auto DevOps"
+msgstr ""
+
+msgid "Enable HTML emails"
+msgstr ""
+
+msgid "Enable Pseudonymizer data collection"
+msgstr ""
+
+msgid "Enable SAML authentication for this group"
+msgstr ""
+
+msgid "Enable access to Grafana"
+msgstr ""
+
+msgid "Enable access to the Performance Bar for a given group."
+msgstr ""
+
+msgid "Enable and configure Grafana."
+msgstr ""
+
+msgid "Enable and configure InfluxDB metrics."
+msgstr ""
+
+msgid "Enable and configure Prometheus metrics."
+msgstr ""
+
+msgid "Enable classification control using an external service"
+msgstr ""
+
+msgid "Enable error tracking"
+msgstr ""
+
+msgid "Enable feature to choose access level"
+msgstr ""
+
+msgid "Enable for this project"
+msgstr ""
+
+msgid "Enable group Runners"
+msgstr ""
+
+msgid "Enable header and footer in emails"
+msgstr ""
+
+msgid "Enable mirror configuration"
+msgstr ""
+
+msgid "Enable or disable the Pseudonymizer data collection."
+msgstr ""
+
+msgid "Enable or disable version check and usage ping."
+msgstr ""
+
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
+
+msgid "Enable shared Runners"
+msgstr ""
+
+msgid "Enable snowplow tracking"
+msgstr ""
+
+msgid "Enable two-factor authentication"
+msgstr ""
+
+msgid "Enable usage ping"
+msgstr ""
+
+msgid "Enable usage ping to get an overview of how you are using GitLab from a feature perspective."
+msgstr ""
+
+msgid "Enable/disable your service desk. %{link_start}Learn more about service desk%{link_end}."
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "Enabled Git access protocols"
+msgstr ""
+
+msgid "Enabled sources for code import during project creation. OmniAuth must be configured for GitHub"
+msgstr ""
+
+msgid "Enabling this will only make licensed EE features available to projects if the project namespace's plan includes the feature or if the project is public."
+msgstr ""
+
+msgid "End date"
+msgstr ""
+
+msgid "Ends at (UTC)"
+msgstr ""
+
+msgid "Enforce DNS rebinding attack protection"
+msgstr ""
+
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
+msgid "Enter IP address range"
+msgstr ""
+
+msgid "Enter a number"
+msgstr ""
+
+msgid "Enter at least three characters to search"
+msgstr ""
+
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
+msgid "Enter in your Bitbucket Server URL and personal access token below"
+msgstr ""
+
+msgid "Enter in your Phabricator Server URL and personal access token below"
+msgstr ""
+
+msgid "Enter merge request URLs"
+msgstr ""
+
+msgid "Enter the issue description"
+msgstr ""
+
+msgid "Enter the issue title"
+msgstr ""
+
+msgid "Enter the merge request description"
+msgstr ""
+
+msgid "Enter the merge request title"
+msgstr ""
+
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
+msgid "EnviornmentDashboard|You are looking at the last updated environment"
+msgstr ""
+
+msgid "Environment"
+msgstr ""
+
+msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
+msgstr ""
+
+msgid "Environment variables are configured by your administrator to be %{link_start}protected%{link_end} by default"
+msgstr ""
+
+msgid "Environment:"
+msgstr ""
+
+msgid "Environments"
+msgstr ""
+
+msgid "Environments Dashboard"
+msgstr ""
+
+msgid "Environments allow you to track deployments of your application %{link_to_read_more}."
+msgstr ""
+
+msgid "EnvironmentsDashboard|Add a project to the dashboard"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Add projects"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Environments Dashboard"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Job: %{job}"
+msgstr ""
+
+msgid "EnvironmentsDashboard|More actions"
+msgstr ""
+
+msgid "EnvironmentsDashboard|Remove"
+msgstr ""
+
+msgid "EnvironmentsDashboard|The environments dashboard provides a summary of each project's environments' status, including pipeline and alert statuses."
+msgstr ""
+
+msgid "Environments|An error occurred while fetching the environments."
+msgstr ""
+
+msgid "Environments|An error occurred while making the request."
+msgstr ""
+
+msgid "Environments|An error occurred while re-deploying the environment, please try again"
+msgstr ""
+
+msgid "Environments|An error occurred while rolling back the environment, please try again"
+msgstr ""
+
+msgid "Environments|An error occurred while stopping the environment, please try again"
+msgstr ""
+
+msgid "Environments|Are you sure you want to stop this environment?"
+msgstr ""
+
+msgid "Environments|Commit"
+msgstr ""
+
+msgid "Environments|Deploy to..."
+msgstr ""
+
+msgid "Environments|Deployment"
+msgstr ""
+
+msgid "Environments|Environment"
+msgstr ""
+
+msgid "Environments|Environments"
+msgstr ""
+
+msgid "Environments|Environments are places where code gets deployed, such as staging or production."
+msgstr ""
+
+msgid "Environments|Job"
+msgstr ""
+
+msgid "Environments|Learn more about stopping environments"
+msgstr ""
+
+msgid "Environments|New environment"
+msgstr ""
+
+msgid "Environments|No deployments yet"
+msgstr ""
+
+msgid "Environments|No pod name has been specified"
+msgstr ""
+
+msgid "Environments|Note that this action will stop the environment, but it will %{emphasisStart}not%{emphasisEnd} have an effect on any existing deployment due to no “stop environment action†being defined in the %{ciConfigLinkStart}.gitlab-ci.yml%{ciConfigLinkEnd} file."
+msgstr ""
+
+msgid "Environments|Note that this action will stop the environment, but it will %{emphasis_start}not%{emphasis_end} have an effect on any existing deployment due to no “stop environment action†being defined in the %{ci_config_link_start}.gitlab-ci.yml%{ci_config_link_end} file."
+msgstr ""
+
+msgid "Environments|Open live environment"
+msgstr ""
+
+msgid "Environments|Pod logs from"
+msgstr ""
+
+msgid "Environments|Re-deploy"
+msgstr ""
+
+msgid "Environments|Re-deploy environment %{environment_name}?"
+msgstr ""
+
+msgid "Environments|Re-deploy environment %{name}?"
+msgstr ""
+
+msgid "Environments|Re-deploy to environment"
+msgstr ""
+
+msgid "Environments|Read more about environments"
+msgstr ""
+
+msgid "Environments|Rollback"
+msgstr ""
+
+msgid "Environments|Rollback environment"
+msgstr ""
+
+msgid "Environments|Rollback environment %{environment_name}?"
+msgstr ""
+
+msgid "Environments|Rollback environment %{name}?"
+msgstr ""
+
+msgid "Environments|Show all"
+msgstr ""
+
+msgid "Environments|Stop"
+msgstr ""
+
+msgid "Environments|Stop environment"
+msgstr ""
+
+msgid "Environments|Stopping"
+msgstr ""
+
+msgid "Environments|This action will relaunch the job for commit %{commit_id}, putting the environment in a previous version. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|This action will relaunch the job for commit %{linkStart}%{commitId}%{linkEnd}, putting the environment in a previous version. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|This action will run the job defined by %{name} for commit %{linkStart}%{commitId}%{linkEnd} putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|This action will run the job defined by staging for commit %{commit_id}, putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?"
+msgstr ""
+
+msgid "Environments|Updated"
+msgstr ""
+
+msgid "Environments|You don't have any environments right now"
+msgstr ""
+
+msgid "Environments|protected"
+msgstr ""
+
+msgid "Epic"
+msgstr ""
+
+msgid "Epics"
+msgstr ""
+
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
+msgid "Epics Roadmap"
+msgstr ""
+
+msgid "Epics and Issues"
+msgstr ""
+
+msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
+msgstr ""
+
+msgid "Epics|%{epicsCount} epics and %{issuesCount} issues"
+msgstr ""
+
+msgid "Epics|Add an epic"
+msgstr ""
+
+msgid "Epics|Add an existing epic as a child epic."
+msgstr ""
+
+msgid "Epics|An error occurred while saving the %{epicDateType} date"
+msgstr ""
+
+msgid "Epics|Are you sure you want to remove %{bStart}%{targetIssueTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}?"
+msgstr ""
+
+msgid "Epics|Create an epic within this group and add it as a child epic."
+msgstr ""
+
+msgid "Epics|Create new epic"
+msgstr ""
+
+msgid "Epics|How can I solve this?"
+msgstr ""
+
+msgid "Epics|More information"
+msgstr ""
+
+msgid "Epics|Remove epic"
+msgstr ""
+
+msgid "Epics|Remove issue"
+msgstr ""
+
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
+msgid "Epics|Something went wrong while creating child epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while fetching child epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
+msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
+msgstr ""
+
+msgid "Epics|This will also remove any descendents of %{bStart}%{targetEpicTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}. Are you sure?"
+msgstr ""
+
+msgid "Epics|To schedule your epic's %{epicDateType} date based on milestones, assign a milestone with a %{epicDateType} date to any issue in the epic."
+msgstr ""
+
+msgid "Epics|due"
+msgstr ""
+
+msgid "Epics|start"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+msgid "Error Tracking"
+msgstr ""
+
+msgid "Error creating a new path"
+msgstr ""
+
+msgid "Error creating epic"
+msgstr ""
+
+msgid "Error deleting %{issuableType}"
+msgstr ""
+
+msgid "Error fetching contributors data."
+msgstr ""
+
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
+msgid "Error fetching labels."
+msgstr ""
+
+msgid "Error fetching network graph."
+msgstr ""
+
+msgid "Error fetching projects"
+msgstr ""
+
+msgid "Error fetching refs"
+msgstr ""
+
+msgid "Error fetching the dependency list. Please check your network connection and try again."
+msgstr ""
+
+msgid "Error fetching usage ping data."
+msgstr ""
+
+msgid "Error loading branch data. Please try again."
+msgstr ""
+
+msgid "Error loading branches."
+msgstr ""
+
+msgid "Error loading burndown chart data"
+msgstr ""
+
+msgid "Error loading file viewer."
+msgstr ""
+
+msgid "Error loading last commit."
+msgstr ""
+
+msgid "Error loading markdown preview"
+msgstr ""
+
+msgid "Error loading merge requests."
+msgstr ""
+
+msgid "Error loading milestone tab"
+msgstr ""
+
+msgid "Error loading project data. Please try again."
+msgstr ""
+
+msgid "Error loading template types."
+msgstr ""
+
+msgid "Error loading template."
+msgstr ""
+
+msgid "Error loading viewer"
+msgstr ""
+
+msgid "Error occurred when fetching sidebar data"
+msgstr ""
+
+msgid "Error occurred when saving assignees"
+msgstr ""
+
+msgid "Error occurred when toggling the notification subscription"
+msgstr ""
+
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
+msgid "Error occurred. User was not blocked"
+msgstr ""
+
+msgid "Error occurred. User was not confirmed"
+msgstr ""
+
+msgid "Error occurred. User was not unblocked"
+msgstr ""
+
+msgid "Error occurred. User was not unlocked"
+msgstr ""
+
+msgid "Error rendering markdown preview"
+msgstr ""
+
+msgid "Error saving label update."
+msgstr ""
+
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
+msgid "Error updating %{issuableType}"
+msgstr ""
+
+msgid "Error updating status for all to-do items."
+msgstr ""
+
+msgid "Error updating status of to-do item."
+msgstr ""
+
+msgid "Error uploading file"
+msgstr ""
+
+msgid "Error uploading file: %{stripped}"
+msgstr ""
+
+msgid "Error while loading the merge request. Please try again."
+msgstr ""
+
+msgid "Error while loading the project data. Please try again."
+msgstr ""
+
+msgid "Error while migrating %{upload_id}: %{error_message}"
+msgstr ""
+
+msgid "Error with Akismet. Please check the logs for more info."
+msgstr ""
+
+msgid "Error:"
+msgstr ""
+
+msgid "ErrorTracking|Active"
+msgstr ""
+
+msgid "ErrorTracking|After adding your Auth Token, use the 'Connect' button to load projects"
+msgstr ""
+
+msgid "ErrorTracking|Auth Token"
+msgstr ""
+
+msgid "ErrorTracking|Click 'Connect' to re-establish the connection to Sentry and activate the dropdown."
+msgstr ""
+
+msgid "ErrorTracking|Connection has failed. Re-check Auth Token and try again."
+msgstr ""
+
+msgid "ErrorTracking|Find your hostname in your Sentry account settings page"
+msgstr ""
+
+msgid "ErrorTracking|No projects available"
+msgstr ""
+
+msgid "ErrorTracking|Select project"
+msgstr ""
+
+msgid "ErrorTracking|To enable project selection, enter a valid Auth Token"
+msgstr ""
+
+msgid "Errors"
+msgstr ""
+
+msgid "Estimated"
+msgstr ""
+
+msgid "EventFilterBy|Filter by all"
+msgstr ""
+
+msgid "EventFilterBy|Filter by comments"
+msgstr ""
+
+msgid "EventFilterBy|Filter by issue events"
+msgstr ""
+
+msgid "EventFilterBy|Filter by merge events"
+msgstr ""
+
+msgid "EventFilterBy|Filter by push events"
+msgstr ""
+
+msgid "EventFilterBy|Filter by team"
+msgstr ""
+
+msgid "Events"
+msgstr ""
+
+msgid "Every %{action} attempt has failed: %{job_error_message}. Please try again."
+msgstr ""
+
+msgid "Every day (at 4:00am)"
+msgstr ""
+
+msgid "Every month (on the 1st at 4:00am)"
+msgstr ""
+
+msgid "Every week (Sundays at 4:00am)"
+msgstr ""
+
+msgid "Everyone"
+msgstr ""
+
+msgid "Everyone With Access"
+msgstr ""
+
+msgid "Everyone can contribute"
+msgstr ""
+
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using GitBook."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using Hexo."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using Hugo."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using Jekyll."
+msgstr ""
+
+msgid "Everything you need to create a GitLab Pages site using plain HTML."
+msgstr ""
+
+msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple queries combined into a formula."
+msgstr ""
+
+msgid "Except policy:"
+msgstr ""
+
+msgid "Existing"
+msgstr ""
+
+msgid "Existing members and groups"
+msgstr ""
+
+msgid "Expand"
+msgstr ""
+
+msgid "Expand all"
+msgstr ""
+
+msgid "Expand approvers"
+msgstr ""
+
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
+msgid "Expand sidebar"
+msgstr ""
+
+msgid "Expand up"
+msgstr ""
+
+msgid "Expiration date"
+msgstr ""
+
+msgid "Expired"
+msgstr ""
+
+msgid "Expired %{expiredOn}"
+msgstr ""
+
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
+msgid "Expires in %{expires_at}"
+msgstr ""
+
+msgid "Explain the problem. If appropriate, provide a link to the relevant issue or comment."
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Explore GitLab"
+msgstr ""
+
+msgid "Explore Groups"
+msgstr ""
+
+msgid "Explore groups"
+msgstr ""
+
+msgid "Explore projects"
+msgstr ""
+
+msgid "Explore public groups"
+msgstr ""
+
+msgid "Export as CSV"
+msgstr ""
+
+msgid "Export issues"
+msgstr ""
+
+msgid "Export project"
+msgstr ""
+
+msgid "Export this project with all its related data in order to move your project to a new GitLab instance. Once the export is finished, you can import the file from the \"New Project\" page."
+msgstr ""
+
+msgid "External Classification Policy Authorization"
+msgstr ""
+
+msgid "External URL"
+msgstr ""
+
+msgid "External Wiki"
+msgstr ""
+
+msgid "External authentication"
+msgstr ""
+
+msgid "External authorization denied access to this project"
+msgstr ""
+
+msgid "External authorization request timeout"
+msgstr ""
+
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
+msgid "ExternalAuthorizationService|Classification label"
+msgstr ""
+
+msgid "ExternalAuthorizationService|When no classification label is set the default label `%{default_label}` will be used."
+msgstr ""
+
+msgid "ExternalMetrics|Add a button to the metrics dashboard linking directly to your existing external dashboards."
+msgstr ""
+
+msgid "ExternalMetrics|Enter the URL of the dashboard you want to link to"
+msgstr ""
+
+msgid "ExternalMetrics|External Dashboard"
+msgstr ""
+
+msgid "ExternalMetrics|Full dashboard URL"
+msgstr ""
+
+msgid "ExternalWikiService|External Wiki"
+msgstr ""
+
+msgid "ExternalWikiService|Replaces the link to the internal wiki with a link to an external wiki."
+msgstr ""
+
+msgid "ExternalWikiService|The URL of the external Wiki"
+msgstr ""
+
+msgid "Facebook"
+msgstr ""
+
+msgid "Failed"
+msgstr ""
+
+msgid "Failed Jobs"
+msgstr ""
+
+msgid "Failed create wiki"
+msgstr ""
+
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
+msgid "Failed to change the owner"
+msgstr ""
+
+msgid "Failed to check related branches."
+msgstr ""
+
+msgid "Failed to connect to the prometheus server"
+msgstr ""
+
+msgid "Failed to create Merge Request. Please try again."
+msgstr ""
+
+msgid "Failed to create a branch for this issue. Please try again."
+msgstr ""
+
+msgid "Failed to create repository via gitlab-shell"
+msgstr ""
+
+msgid "Failed to create resources"
+msgstr ""
+
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
+msgid "Failed to deploy to"
+msgstr ""
+
+msgid "Failed to get ref."
+msgstr ""
+
+msgid "Failed to install."
+msgstr ""
+
+msgid "Failed to load emoji list."
+msgstr ""
+
+msgid "Failed to load errors from Sentry. Error message: %{errorMessage}"
+msgstr ""
+
+msgid "Failed to load groups & users."
+msgstr ""
+
+msgid "Failed to load related branches"
+msgstr ""
+
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
+msgid "Failed to promote label due to internal error. Please contact administrators."
+msgstr ""
+
+msgid "Failed to protect the branch"
+msgstr ""
+
+msgid "Failed to protect the environment"
+msgstr ""
+
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
+msgid "Failed to remove issue from board, please try again."
+msgstr ""
+
+msgid "Failed to remove mirror."
+msgstr ""
+
+msgid "Failed to remove the pipeline schedule"
+msgstr ""
+
+msgid "Failed to remove user identity."
+msgstr ""
+
+msgid "Failed to remove user key."
+msgstr ""
+
+msgid "Failed to reset key. Please try again."
+msgstr ""
+
+msgid "Failed to save comment!"
+msgstr ""
+
+msgid "Failed to save merge conflicts resolutions. Please try again!"
+msgstr ""
+
+msgid "Failed to save new settings"
+msgstr ""
+
+msgid "Failed to save preferences (%{error_message})."
+msgstr ""
+
+msgid "Failed to save preferences."
+msgstr ""
+
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
+msgid "Failed to signing using smartcard authentication"
+msgstr ""
+
+msgid "Failed to update branch!"
+msgstr ""
+
+msgid "Failed to update environment!"
+msgstr ""
+
+msgid "Failed to update issues, please try again."
+msgstr ""
+
+msgid "Failed to update tag!"
+msgstr ""
+
+msgid "Failed to update."
+msgstr ""
+
+msgid "Failed to upgrade."
+msgstr ""
+
+msgid "Failed to upload object map file"
+msgstr ""
+
+msgid "Failure"
+msgstr ""
+
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
+msgid "Fast-forward merge without a merge commit"
+msgstr ""
+
+msgid "Faster as it re-uses the project workspace (falling back to clone if it doesn't exist)"
+msgstr ""
+
+msgid "Favicon was successfully removed."
+msgstr ""
+
+msgid "Feature Flags"
+msgstr ""
+
+msgid "Feature flag was not removed."
+msgstr ""
+
+msgid "Feature flag was successfully removed."
+msgstr ""
+
+msgid "FeatureFlags|* (All Environments)"
+msgstr ""
+
+msgid "FeatureFlags|* (All environments)"
+msgstr ""
+
+msgid "FeatureFlags|API URL"
+msgstr ""
+
+msgid "FeatureFlags|Active"
+msgstr ""
+
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
+msgid "FeatureFlags|Configure"
+msgstr ""
+
+msgid "FeatureFlags|Configure feature flags"
+msgstr ""
+
+msgid "FeatureFlags|Create feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Delete %{name}?"
+msgstr ""
+
+msgid "FeatureFlags|Delete feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Description"
+msgstr ""
+
+msgid "FeatureFlags|Edit Feature Flag"
+msgstr ""
+
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
+msgid "FeatureFlags|Environment Spec"
+msgstr ""
+
+msgid "FeatureFlags|Environment Specs"
+msgstr ""
+
+msgid "FeatureFlags|Feature Flag"
+msgstr ""
+
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgstr ""
+
+msgid "FeatureFlags|Feature Flags"
+msgstr ""
+
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgstr ""
+
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgstr ""
+
+msgid "FeatureFlags|Get started with feature flags"
+msgstr ""
+
+msgid "FeatureFlags|Inactive"
+msgstr ""
+
+msgid "FeatureFlags|Inactive flag for %{scope}"
+msgstr ""
+
+msgid "FeatureFlags|Install a %{docs_link_anchored_start}compatible client library%{docs_link_anchored_end} and specify the API URL, application name, and instance ID during the configuration setup. %{docs_link_start}More Information%{docs_link_end}"
+msgstr ""
+
+msgid "FeatureFlags|Instance ID"
+msgstr ""
+
+msgid "FeatureFlags|Loading feature flags"
+msgstr ""
+
+msgid "FeatureFlags|More information"
+msgstr ""
+
+msgid "FeatureFlags|Name"
+msgstr ""
+
+msgid "FeatureFlags|New"
+msgstr ""
+
+msgid "FeatureFlags|New Feature Flag"
+msgstr ""
+
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
+msgid "FeatureFlags|Protected"
+msgstr ""
+
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
+msgid "FeatureFlags|Status"
+msgstr ""
+
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
+msgid "FeatureFlags|Target environments"
+msgstr ""
+
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There are no inactive feature flags"
+msgstr ""
+
+msgid "FeatureFlags|There was an error fetching the feature flags."
+msgstr ""
+
+msgid "FeatureFlags|Try again in a few moments or contact your support team."
+msgstr ""
+
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
+msgid "Feb"
+msgstr ""
+
+msgid "February"
+msgstr ""
+
+msgid "Fetching incoming email"
+msgstr ""
+
+msgid "Fetching licenses failed."
+msgstr ""
+
+msgid "Fetching licenses failed. The request endpoint was not found."
+msgstr ""
+
+msgid "Fetching licenses failed. You are not permitted to perform this action."
+msgstr ""
+
+msgid "File"
+msgid_plural "Files"
+msgstr[0] ""
+
+msgid "File added"
+msgstr ""
+
+msgid "File browser"
+msgstr ""
+
+msgid "File deleted"
+msgstr ""
+
+msgid "File mode changed from %{a_mode} to %{b_mode}"
+msgstr ""
+
+msgid "File moved"
+msgstr ""
+
+msgid "File templates"
+msgstr ""
+
+msgid "File upload error."
+msgstr ""
+
+msgid "Files"
+msgstr ""
+
+msgid "Files breadcrumb"
+msgstr ""
+
+msgid "Files, directories, and submodules in the path %{path} for commit reference %{ref}"
+msgstr ""
+
+msgid "Fill in the fields below, turn on <strong>%{enable_label}</strong>, and press <strong>%{save_changes}</strong>"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Filter by %{issuable_type} that are currently closed."
+msgstr ""
+
+msgid "Filter by %{issuable_type} that are currently opened."
+msgstr ""
+
+msgid "Filter by commit message"
+msgstr ""
+
+msgid "Filter by milestone name"
+msgstr ""
+
+msgid "Filter by two-factor authentication"
+msgstr ""
+
+msgid "Filter results by group"
+msgstr ""
+
+msgid "Filter results by project"
+msgstr ""
+
+msgid "Filter your projects by name"
+msgstr ""
+
+msgid "Filter..."
+msgstr ""
+
+msgid "Find by path"
+msgstr ""
+
+msgid "Find existing members by name"
+msgstr ""
+
+msgid "Find file"
+msgstr ""
+
+msgid "Find the downloaded ZIP file and decompress it."
+msgstr ""
+
+msgid "Find the newly extracted <code>Takeout/Google Code Project Hosting/GoogleCodeProjectHosting.json</code> file."
+msgstr ""
+
+msgid "Fingerprint"
+msgstr ""
+
+msgid "Fingerprint:"
+msgstr ""
+
+msgid "Fingerprints"
+msgstr ""
+
+msgid "Finish editing this message first!"
+msgstr ""
+
+msgid "Finish review"
+msgstr ""
+
+msgid "Finish setting up your dedicated account for <strong>%{group_name}</strong>."
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+msgid "First day of the week"
+msgstr ""
+
+msgid "First name"
+msgstr ""
+
+msgid "Fixed date"
+msgstr ""
+
+msgid "Fixed due date"
+msgstr ""
+
+msgid "Fixed start date"
+msgstr ""
+
+msgid "Fixed:"
+msgstr ""
+
+msgid "FlowdockService|Flowdock Git source token"
+msgstr ""
+
+msgid "FlowdockService|Flowdock is a collaboration web app for technical teams."
+msgstr ""
+
+msgid "FogBugz Email"
+msgstr ""
+
+msgid "FogBugz Import"
+msgstr ""
+
+msgid "FogBugz Password"
+msgstr ""
+
+msgid "FogBugz URL"
+msgstr ""
+
+msgid "FogBugz import"
+msgstr ""
+
+msgid "Follow the steps below to export your Google Code project data."
+msgstr ""
+
+msgid "Font Color"
+msgstr ""
+
+msgid "Footer message"
+msgstr ""
+
+msgid "For internal projects, any logged in user can view pipelines and access job details (output logs and artifacts)"
+msgstr ""
+
+msgid "For more info, read the documentation."
+msgstr ""
+
+msgid "For more information, go to the "
+msgstr ""
+
+msgid "For more information, please review %{link_start_tag}Jaeger's configuration doc%{link_end_tag}"
+msgstr ""
+
+msgid "For more information, see the documentation on %{deactivating_usage_ping_link_start}deactivating the usage ping%{deactivating_usage_ping_link_end}."
+msgstr ""
+
+msgid "For private projects, any member (guest or higher) can view pipelines and access job details (output logs and artifacts)"
+msgstr ""
+
+msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
+msgstr ""
+
+msgid "Forgot your password?"
+msgstr ""
+
+msgid "Fork"
+msgstr ""
+
+msgid "Fork Error!"
+msgstr ""
+
+msgid "Fork project"
+msgstr ""
+
+msgid "ForkedFromProjectPath|Forked from"
+msgstr ""
+
+msgid "ForkedFromProjectPath|Forked from %{project_name} (deleted)"
+msgstr ""
+
+msgid "Forking in progress"
+msgstr ""
+
+msgid "Forking repository"
+msgstr ""
+
+msgid "Forks"
+msgstr ""
+
+msgid "Format"
+msgstr ""
+
+msgid "Forward external support email address to"
+msgstr ""
+
+msgid "Found errors in your %{gitlab_ci_yml}:"
+msgstr ""
+
+msgid "Found errors in your .gitlab-ci.yml:"
+msgstr ""
+
+msgid "Free Trial"
+msgstr ""
+
+msgid "Free Trial of GitLab.com Gold"
+msgstr ""
+
+msgid "Friday"
+msgstr ""
+
+msgid "From"
+msgstr ""
+
+msgid "From %{providerTitle}"
+msgstr ""
+
+msgid "From Bitbucket"
+msgstr ""
+
+msgid "From Bitbucket Server"
+msgstr ""
+
+msgid "From FogBugz"
+msgstr ""
+
+msgid "From GitLab.com"
+msgstr ""
+
+msgid "From Google Code"
+msgstr ""
+
+msgid "From issue creation until deploy to production"
+msgstr ""
+
+msgid "From merge request merge until deploy to production"
+msgstr ""
+
+msgid "From milestones:"
+msgstr ""
+
+msgid "From the Kubernetes cluster details view, install Runner from the applications list"
+msgstr ""
+
+msgid "Full name"
+msgstr ""
+
+msgid "GPG Key ID:"
+msgstr ""
+
+msgid "GPG Keys"
+msgstr ""
+
+msgid "GPG keys allow you to verify signed commits."
+msgstr ""
+
+msgid "GPG signature (loading...)"
+msgstr ""
+
+msgid "General"
+msgstr ""
+
+msgid "General Settings"
+msgstr ""
+
+msgid "General pipelines"
+msgstr ""
+
+msgid "Generate a default set of labels"
+msgstr ""
+
+msgid "Generate key"
+msgstr ""
+
+msgid "Generate link to chart"
+msgstr ""
+
+msgid "Generate new export"
+msgstr ""
+
+msgid "Geo"
+msgstr ""
+
+msgid "Geo Nodes"
+msgstr ""
+
+msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
+msgstr ""
+
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
+msgid "GeoNodeSyncStatus|Node is failing or broken."
+msgstr ""
+
+msgid "GeoNodeSyncStatus|Node is slow, overloaded, or it just recovered after an outage."
+msgstr ""
+
+msgid "GeoNodes|Checksummed"
+msgstr ""
+
+msgid "GeoNodes|Data is out of date from %{timeago}"
+msgstr ""
+
+msgid "GeoNodes|Data replication lag"
+msgstr ""
+
+msgid "GeoNodes|Does not match the primary storage configuration"
+msgstr ""
+
+msgid "GeoNodes|Failed"
+msgstr ""
+
+msgid "GeoNodes|Full"
+msgstr ""
+
+msgid "GeoNodes|GitLab version"
+msgstr ""
+
+msgid "GeoNodes|GitLab version does not match the primary node version"
+msgstr ""
+
+msgid "GeoNodes|Health status"
+msgstr ""
+
+msgid "GeoNodes|Internal URL"
+msgstr ""
+
+msgid "GeoNodes|Last event ID processed by cursor"
+msgstr ""
+
+msgid "GeoNodes|Last event ID seen from primary"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Repository checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Repository verification"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Wiki checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Learn more about Wiki verification"
+msgstr ""
+
+msgid "GeoNodes|Loading nodes"
+msgstr ""
+
+msgid "GeoNodes|Local LFS objects"
+msgstr ""
+
+msgid "GeoNodes|Local attachments"
+msgstr ""
+
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
+msgid "GeoNodes|Local job artifacts"
+msgstr ""
+
+msgid "GeoNodes|New node"
+msgstr ""
+
+msgid "GeoNodes|Node Authentication was successfully repaired."
+msgstr ""
+
+msgid "GeoNodes|Node was successfully removed."
+msgstr ""
+
+msgid "GeoNodes|Not checksummed"
+msgstr ""
+
+msgid "GeoNodes|Out of sync"
+msgstr ""
+
+msgid "GeoNodes|Pausing replication stops the sync process."
+msgstr ""
+
+msgid "GeoNodes|Removing a primary node stops the sync process for all nodes. Syncing cannot be resumed without losing some data on all secondaries. In this case we would recommend setting up all nodes from scratch. Are you sure?"
+msgstr ""
+
+msgid "GeoNodes|Removing a secondary node stops the sync process. It is not currently possible to add back the same node without losing some data. We only recommend setting up a new secondary node in this case. Are you sure?"
+msgstr ""
+
+msgid "GeoNodes|Replication slot WAL"
+msgstr ""
+
+msgid "GeoNodes|Replication slots"
+msgstr ""
+
+msgid "GeoNodes|Repositories"
+msgstr ""
+
+msgid "GeoNodes|Repositories checksummed for verification with their counterparts on Secondary nodes"
+msgstr ""
+
+msgid "GeoNodes|Repositories verified with their counterparts on the Primary node"
+msgstr ""
+
+msgid "GeoNodes|Repository checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Repository verification progress"
+msgstr ""
+
+msgid "GeoNodes|Selective"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while changing node status"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while fetching nodes"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while removing node"
+msgstr ""
+
+msgid "GeoNodes|Something went wrong while repairing node"
+msgstr ""
+
+msgid "GeoNodes|Storage config"
+msgstr ""
+
+msgid "GeoNodes|Sync settings"
+msgstr ""
+
+msgid "GeoNodes|Synced"
+msgstr ""
+
+msgid "GeoNodes|Unused slots"
+msgstr ""
+
+msgid "GeoNodes|Unverified"
+msgstr ""
+
+msgid "GeoNodes|Used slots"
+msgstr ""
+
+msgid "GeoNodes|Verified"
+msgstr ""
+
+msgid "GeoNodes|Wiki checksum progress"
+msgstr ""
+
+msgid "GeoNodes|Wiki verification progress"
+msgstr ""
+
+msgid "GeoNodes|Wikis"
+msgstr ""
+
+msgid "GeoNodes|Wikis checksummed for verification with their counterparts on Secondary nodes"
+msgstr ""
+
+msgid "GeoNodes|Wikis verified with their counterparts on the Primary node"
+msgstr ""
+
+msgid "GeoNodes|With %{geo} you can install a special read-only and replicated instance anywhere. Before you add nodes, follow the %{instructions} in the exact order they appear."
+msgstr ""
+
+msgid "GeoNodes|You have configured Geo nodes using an insecure HTTP connection. We recommend the use of HTTPS."
+msgstr ""
+
+msgid "Geo|%{name} is scheduled for forced re-download"
+msgstr ""
+
+msgid "Geo|%{name} is scheduled for re-sync"
+msgstr ""
+
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|All"
+msgstr ""
+
+msgid "Geo|All projects"
+msgstr ""
+
+msgid "Geo|All projects are being scheduled for re-sync"
+msgstr ""
+
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
+msgid "Geo|Batch operations"
+msgstr ""
+
+msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
+msgstr ""
+
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
+msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
+msgstr ""
+
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
+msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
+msgstr ""
+
+msgid "Geo|Control the minimum interval in days that a repository should be reverified for this primary node"
+msgstr ""
+
+msgid "Geo|Could not remove tracking entry for an existing project."
+msgstr ""
+
+msgid "Geo|Could not remove tracking entry for an existing upload."
+msgstr ""
+
+msgid "Geo|Failed"
+msgstr ""
+
+msgid "Geo|File sync capacity"
+msgstr ""
+
+msgid "Geo|Geo Status"
+msgstr ""
+
+msgid "Geo|Groups to synchronize"
+msgstr ""
+
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
+msgid "Geo|In sync"
+msgstr ""
+
+msgid "Geo|Internal URL (optional)"
+msgstr ""
+
+msgid "Geo|Last repository check run"
+msgstr ""
+
+msgid "Geo|Last successful sync"
+msgstr ""
+
+msgid "Geo|Last sync attempt"
+msgstr ""
+
+msgid "Geo|Last time verified"
+msgstr ""
+
+msgid "Geo|Never"
+msgstr ""
+
+msgid "Geo|Next sync scheduled at"
+msgstr ""
+
+msgid "Geo|Not synced yet"
+msgstr ""
+
+msgid "Geo|Pending"
+msgstr ""
+
+msgid "Geo|Pending synchronization"
+msgstr ""
+
+msgid "Geo|Pending verification"
+msgstr ""
+
+msgid "Geo|Please refer to Geo Troubleshooting."
+msgstr ""
+
+msgid "Geo|Project"
+msgstr ""
+
+msgid "Geo|Project (ID: %{project_id}) no longer exists on the primary. It is safe to remove this entry, as this will not remove any data on disk."
+msgstr ""
+
+msgid "Geo|Projects in certain groups"
+msgstr ""
+
+msgid "Geo|Projects in certain storage shards"
+msgstr ""
+
+msgid "Geo|Re-verification interval"
+msgstr ""
+
+msgid "Geo|Redownload"
+msgstr ""
+
+msgid "Geo|Remove"
+msgstr ""
+
+msgid "Geo|Repository sync capacity"
+msgstr ""
+
+msgid "Geo|Resync"
+msgstr ""
+
+msgid "Geo|Resync all projects"
+msgstr ""
+
+msgid "Geo|Retry count"
+msgstr ""
+
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
+msgid "Geo|Select groups to replicate."
+msgstr ""
+
+msgid "Geo|Selective synchronization"
+msgstr ""
+
+msgid "Geo|Shards to synchronize"
+msgstr ""
+
+msgid "Geo|Status"
+msgstr ""
+
+msgid "Geo|Sync"
+msgstr ""
+
+msgid "Geo|Synced"
+msgstr ""
+
+msgid "Geo|Synced at"
+msgstr ""
+
+msgid "Geo|Synchronization failed - %{error}"
+msgstr ""
+
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
+msgstr ""
+
+msgid "Geo|The database is currently %{db_lag} behind the primary node."
+msgstr ""
+
+msgid "Geo|The node is currently %{minutes_behind} behind the primary node."
+msgstr ""
+
+msgid "Geo|This is a primary node"
+msgstr ""
+
+msgid "Geo|Tracking entry for project (%{project_id}) was successfully removed."
+msgstr ""
+
+msgid "Geo|Tracking entry for upload (%{type}/%{id}) was successfully removed."
+msgstr ""
+
+msgid "Geo|Tracking entry will be removed. Are you sure?"
+msgstr ""
+
+msgid "Geo|URL"
+msgstr ""
+
+msgid "Geo|Unknown state"
+msgstr ""
+
+msgid "Geo|Verification capacity"
+msgstr ""
+
+msgid "Geo|Verification failed - %{error}"
+msgstr ""
+
+msgid "Geo|Waiting for scheduler"
+msgstr ""
+
+msgid "Geo|You are on a secondary, <b>read-only</b> Geo node. If you want to make changes, you must visit this page on the %{primary_node}."
+msgstr ""
+
+msgid "Geo|You are on a secondary, <b>read-only</b> Geo node. You may be able to make a limited amount of changes or perform a limited amount of actions on this page."
+msgstr ""
+
+msgid "Geo|misconfigured"
+msgstr ""
+
+msgid "Geo|primary"
+msgstr ""
+
+msgid "Geo|secondary"
+msgstr ""
+
+msgid "Get a free instance review"
+msgstr ""
+
+msgid "Get started with error tracking"
+msgstr ""
+
+msgid "Get started with performance monitoring"
+msgstr ""
+
+msgid "Getting started with releases"
+msgstr ""
+
+msgid "Git"
+msgstr ""
+
+msgid "Git LFS is not enabled on this GitLab server, contact your admin."
+msgstr ""
+
+msgid "Git LFS objects will be synced in pull mirrors if LFS is %{docs_link_start}enabled for the project%{docs_link_end}. They will <strong>not</strong> be synced in push mirrors."
+msgstr ""
+
+msgid "Git global setup"
+msgstr ""
+
+msgid "Git repository URL"
+msgstr ""
+
+msgid "Git revision"
+msgstr ""
+
+msgid "Git shallow clone"
+msgstr ""
+
+msgid "Git strategy for pipelines"
+msgstr ""
+
+msgid "Git version"
+msgstr ""
+
+msgid "GitHub import"
+msgstr ""
+
+msgid "GitLab CI Linter has been moved"
+msgstr ""
+
+msgid "GitLab Enterprise Edition %{plan}"
+msgstr ""
+
+msgid "GitLab Geo"
+msgstr ""
+
+msgid "GitLab Group Runners can execute code for all the projects in this group."
+msgstr ""
+
+msgid "GitLab Import"
+msgstr ""
+
+msgid "GitLab Shared Runners execute code of different projects on the same Runner unless you configure GitLab Runner Autoscale with MaxBuilds 1 (which it is on GitLab.com)."
+msgstr ""
+
+msgid "GitLab User"
+msgstr ""
+
+msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
+msgstr ""
+
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
+msgid "GitLab metadata URL"
+msgstr ""
+
+msgid "GitLab project export"
+msgstr ""
+
+msgid "GitLab restart is required to apply changes"
+msgstr ""
+
+msgid "GitLab single sign on URL"
+msgstr ""
+
+msgid "GitLab will run a background job that will produce pseudonymized CSVs of the GitLab database that will be uploaded to your configured object storage directory."
+msgstr ""
+
+msgid "GitLab.com import"
+msgstr ""
+
+msgid "Gitaly"
+msgstr ""
+
+msgid "Gitaly Servers"
+msgstr ""
+
+msgid "Gitaly|Address"
+msgstr ""
+
+msgid "Gitea Host URL"
+msgstr ""
+
+msgid "Gitea Import"
+msgstr ""
+
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
+msgid "Given access %{time_ago}"
+msgstr ""
+
+msgid "Global Shortcuts"
+msgstr ""
+
+msgid "Global notification settings"
+msgstr ""
+
+msgid "Go Back"
+msgstr ""
+
+msgid "Go Micro is a framework for micro service development."
+msgstr ""
+
+msgid "Go back"
+msgstr ""
+
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
+msgid "Go full screen"
+msgstr ""
+
+msgid "Go to"
+msgstr ""
+
+msgid "Go to %{link_to_google_takeout}."
+msgstr ""
+
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
+msgid "Go to parent"
+msgstr ""
+
+msgid "Go to project"
+msgstr ""
+
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
+msgid "Go to your fork"
+msgstr ""
+
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
+msgid "Golden Tanuki"
+msgstr ""
+
+msgid "Google Code import"
+msgstr ""
+
+msgid "Google Takeout"
+msgstr ""
+
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
+
+msgid "Got it"
+msgstr ""
+
+msgid "Got it!"
+msgstr ""
+
+msgid "Grafana URL"
+msgstr ""
+
+msgid "Grant access"
+msgstr ""
+
+msgid "Graph"
+msgstr ""
+
+msgid "Gravatar"
+msgstr ""
+
+msgid "Gravatar enabled"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "Group %{group_name} was scheduled for deletion."
+msgstr ""
+
+msgid "Group %{group_name} was successfully created."
+msgstr ""
+
+msgid "Group CI/CD settings"
+msgstr ""
+
+msgid "Group Git LFS status:"
+msgstr ""
+
+msgid "Group ID"
+msgstr ""
+
+msgid "Group ID: %{group_id}"
+msgstr ""
+
+msgid "Group Runners"
+msgstr ""
+
+msgid "Group SAML must be enabled to test"
+msgstr ""
+
+msgid "Group URL"
+msgstr ""
+
+msgid "Group avatar"
+msgstr ""
+
+msgid "Group description"
+msgstr ""
+
+msgid "Group description (optional)"
+msgstr ""
+
+msgid "Group details"
+msgstr ""
+
+msgid "Group info:"
+msgstr ""
+
+msgid "Group maintainers can register group runners in the %{link}"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Group overview content"
+msgstr ""
+
+msgid "Group pipeline minutes were successfully reset."
+msgstr ""
+
+msgid "Group was successfully updated."
+msgstr ""
+
+msgid "Group: %{group_name}"
+msgstr ""
+
+msgid "Group: %{name}"
+msgstr ""
+
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
+msgid "GroupRoadmap|From %{dateWord}"
+msgstr ""
+
+msgid "GroupRoadmap|Something went wrong while fetching epics"
+msgstr ""
+
+msgid "GroupRoadmap|Sorry, no epics matched your search"
+msgstr ""
+
+msgid "GroupRoadmap|The roadmap shows the progress of your epics along a timeline"
+msgstr ""
+
+msgid "GroupRoadmap|To view the roadmap, add a start or due date to one of the %{linkStart}child epics%{linkEnd}."
+msgstr ""
+
+msgid "GroupRoadmap|To view the roadmap, add a start or due date to one of your epics in this group or its subgroups; from %{startDate} to %{endDate}."
+msgstr ""
+
+msgid "GroupRoadmap|To widen your search, change or remove filters; from %{startDate} to %{endDate}."
+msgstr ""
+
+msgid "GroupRoadmap|Until %{dateWord}"
+msgstr ""
+
+msgid "GroupSAML|Certificate fingerprint"
+msgstr ""
+
+msgid "GroupSAML|Configuration"
+msgstr ""
+
+msgid "GroupSAML|Enable SAML authentication for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforce SSO-only authentication for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
+msgstr ""
+
+msgid "GroupSAML|Enforced SSO"
+msgstr ""
+
+msgid "GroupSAML|Generate a SCIM token"
+msgstr ""
+
+msgid "GroupSAML|Generate a SCIM token to set up your System for Cross-Domain Identity Management."
+msgstr ""
+
+msgid "GroupSAML|Identity provider single sign on URL"
+msgstr ""
+
+msgid "GroupSAML|Make sure you save this token — you won't be able to access it again."
+msgstr ""
+
+msgid "GroupSAML|Manage your group’s membership while adding another level of security with SAML."
+msgstr ""
+
+msgid "GroupSAML|Members will be forwarded here when signing in to your group. Get this from your identity provider, where it can also be called \"SSO Service Location\", \"SAML Token Issuance Endpoint\", or \"SAML 2.0/W-Federation URL\"."
+msgstr ""
+
+msgid "GroupSAML|SAML Single Sign On"
+msgstr ""
+
+msgid "GroupSAML|SAML Single Sign On Settings"
+msgstr ""
+
+msgid "GroupSAML|SCIM API endpoint URL"
+msgstr ""
+
+msgid "GroupSAML|SCIM Token"
+msgstr ""
+
+msgid "GroupSAML|SHA1 fingerprint of the SAML token signing certificate. Get this from your identity provider, where it can also be called \"Thumbprint\"."
+msgstr ""
+
+msgid "GroupSAML|The SCIM token is now hidden. To see the value of the token again, you need to "
+msgstr ""
+
+msgid "GroupSAML|To be able to enable enforced SSO, you first need to enable SAML authentication."
+msgstr ""
+
+msgid "GroupSAML|To be able to enable group managed accounts, you first need to enable enforced SSO."
+msgstr ""
+
+msgid "GroupSAML|Toggle SAML authentication"
+msgstr ""
+
+msgid "GroupSAML|With group managed accounts enabled, all the users without a group managed account will be excluded from the group."
+msgstr ""
+
+msgid "GroupSAML|Your SCIM token"
+msgstr ""
+
+msgid "GroupSettings|Auto DevOps pipeline was updated for the group"
+msgstr ""
+
+msgid "GroupSettings|Auto DevOps will automatically build, test and deploy your application based on a predefined Continuous Integration and Delivery configuration. %{auto_devops_start}Learn more about Auto DevOps%{auto_devops_end}"
+msgstr ""
+
+msgid "GroupSettings|Badges"
+msgstr ""
+
+msgid "GroupSettings|Custom project templates"
+msgstr ""
+
+msgid "GroupSettings|Customize your group badges."
+msgstr ""
+
+msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
+msgstr ""
+
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
+msgid "GroupSettings|Learn more about badges."
+msgstr ""
+
+msgid "GroupSettings|Learn more about group-level project templates."
+msgstr ""
+
+msgid "GroupSettings|New runners registration token has been generated!"
+msgstr ""
+
+msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
+msgstr ""
+
+msgid "GroupSettings|Select a sub-group as the custom project template source for this group."
+msgstr ""
+
+msgid "GroupSettings|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
+msgstr ""
+
+msgid "GroupSettings|There was a problem updating Auto DevOps pipeline: %{error_messages}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. To share projects in this group with another group, ask the owner to override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting is applied on %{ancestor_group}. You can override the setting or %{remove_ancestor_share_with_group_lock}."
+msgstr ""
+
+msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
+msgstr ""
+
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
+msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
+msgstr ""
+
+msgid "GroupSettings|remove the share with group lock from %{ancestor_group_name}"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
+msgid "Groups (%{count})"
+msgstr ""
+
+msgid "Groups can also be nested by creating %{subgroup_docs_link_start}subgroups%{subgroup_docs_link_end}."
+msgstr ""
+
+msgid "Groups with access to <strong>%{project_name}</strong>"
+msgstr ""
+
+msgid "GroupsDropdown|Frequently visited"
+msgstr ""
+
+msgid "GroupsDropdown|Groups you visit often will appear here"
+msgstr ""
+
+msgid "GroupsDropdown|Loading groups"
+msgstr ""
+
+msgid "GroupsDropdown|Search your groups"
+msgstr ""
+
+msgid "GroupsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "GroupsDropdown|Sorry, no groups matched your search"
+msgstr ""
+
+msgid "GroupsDropdown|This feature requires browser localStorage support"
+msgstr ""
+
+msgid "GroupsEmptyState|A group is a collection of several projects."
+msgstr ""
+
+msgid "GroupsEmptyState|If you organize your projects under a group, it works like a folder."
+msgstr ""
+
+msgid "GroupsEmptyState|No groups found"
+msgstr ""
+
+msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
+msgstr ""
+
+msgid "GroupsTree|Are you sure you want to leave the \"%{fullName}\" group?"
+msgstr ""
+
+msgid "GroupsTree|Create a project in this group."
+msgstr ""
+
+msgid "GroupsTree|Create a subgroup in this group."
+msgstr ""
+
+msgid "GroupsTree|Edit group"
+msgstr ""
+
+msgid "GroupsTree|Failed to leave the group. Please make sure you are not the only owner."
+msgstr ""
+
+msgid "GroupsTree|Leave this group"
+msgstr ""
+
+msgid "GroupsTree|Loading groups"
+msgstr ""
+
+msgid "GroupsTree|No groups matched your search"
+msgstr ""
+
+msgid "GroupsTree|No groups or projects matched your search"
+msgstr ""
+
+msgid "GroupsTree|Search by name"
+msgstr ""
+
+msgid "HTTP Basic: Access denied\\nYou must use a personal access token with 'api' scope for Git over HTTP.\\nYou can generate one at %{profile_personal_access_tokens_url}"
+msgstr ""
+
+msgid "Have your users email"
+msgstr ""
+
+msgid "Header logo was successfully removed."
+msgstr ""
+
+msgid "Header message"
+msgstr ""
+
+msgid "Health Check"
+msgstr ""
+
+msgid "Health information can be retrieved from the following endpoints. More information is available"
+msgstr ""
+
+msgid "HealthCheck|Access token is"
+msgstr ""
+
+msgid "HealthCheck|Healthy"
+msgstr ""
+
+msgid "HealthCheck|No Health Problems Detected"
+msgstr ""
+
+msgid "HealthCheck|Unhealthy"
+msgstr ""
+
+msgid "Hello there"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "Help page"
+msgstr ""
+
+msgid "Help page text and support page url."
+msgstr ""
+
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
+msgid "Hide archived projects"
+msgstr ""
+
+msgid "Hide file browser"
+msgstr ""
+
+msgid "Hide group projects"
+msgstr ""
+
+msgid "Hide host keys manual input"
+msgstr ""
+
+msgid "Hide marketing-related entries from help"
+msgstr ""
+
+msgid "Hide payload"
+msgstr ""
+
+msgid "Hide shared projects"
+msgstr ""
+
+msgid "Hide stage"
+msgstr ""
+
+msgid "Hide value"
+msgid_plural "Hide values"
+msgstr[0] ""
+
+msgid "Hide values"
+msgstr ""
+
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
+msgid "Highest role:"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+msgid "History of authentications"
+msgstr ""
+
+msgid "Hook execution failed. Ensure the group has a project with commits."
+msgstr ""
+
+msgid "Hook was successfully created."
+msgstr ""
+
+msgid "Hook was successfully updated."
+msgstr ""
+
+msgid "Hours"
+msgstr ""
+
+msgid "Housekeeping"
+msgstr ""
+
+msgid "Housekeeping successfully started"
+msgstr ""
+
+msgid "Housekeeping, export, path, transfer, remove, archive."
+msgstr ""
+
+msgid "How it works"
+msgstr ""
+
+msgid "How many replicas each Elasticsearch shard has."
+msgstr ""
+
+msgid "How many shards to split the Elasticsearch index over."
+msgstr ""
+
+msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
+msgstr ""
+
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
+msgid "I accept the %{terms_link}"
+msgstr ""
+
+msgid "I accept the|Terms of Service and Privacy Policy"
+msgstr ""
+
+msgid "I forgot my password"
+msgstr ""
+
+msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
+msgstr ""
+
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
+msgid "ID"
+msgstr ""
+
+msgid "ID:"
+msgstr ""
+
+msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
+msgstr ""
+
+msgid "IDE|Back"
+msgstr ""
+
+msgid "IDE|Client side evaluation"
+msgstr ""
+
+msgid "IDE|Commit"
+msgstr ""
+
+msgid "IDE|Edit"
+msgstr ""
+
+msgid "IDE|Get started with Live Preview"
+msgstr ""
+
+msgid "IDE|Go to project"
+msgstr ""
+
+msgid "IDE|Live Preview"
+msgstr ""
+
+msgid "IDE|Open in file view"
+msgstr ""
+
+msgid "IDE|Preview your web application using Web IDE client-side evaluation."
+msgstr ""
+
+msgid "IDE|Refresh preview"
+msgstr ""
+
+msgid "IDE|Review"
+msgstr ""
+
+msgid "IDE|Successful commit"
+msgstr ""
+
+msgid "IP Address"
+msgstr ""
+
+msgid "IP address restriction is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
+msgid "IP subnet restriction only allowed for top-level groups"
+msgstr ""
+
+msgid "Identifier"
+msgstr ""
+
+msgid "Identities"
+msgstr ""
+
+msgid "If any job surpasses this timeout threshold, it will be marked as failed. Human readable time input language is accepted like \"1 hour\". Values without specification represent seconds."
+msgstr ""
+
+msgid "If checked, group owners can manage LDAP group links and LDAP member overrides"
+msgstr ""
+
+msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization"
+msgstr ""
+
+msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored."
+msgstr ""
+
+msgid "If disabled, only admins will be able to set up mirrors in projects."
+msgstr ""
+
+msgid "If disabled, the access level will depend on the user's permissions in the project."
+msgstr ""
+
+msgid "If enabled"
+msgstr ""
+
+msgid "If enabled, access to projects will be validated on an external service using their classification label."
+msgstr ""
+
+msgid "If this was a mistake you can %{leave_link_start}leave the %{source_type}%{link_end}."
+msgstr ""
+
+msgid "If this was a mistake you can leave the %{source_type}."
+msgstr ""
+
+msgid "If using GitHub, you’ll see pipeline statuses on GitHub for your commits and pull requests. %{more_info_link}"
+msgstr ""
+
+msgid "If you lose your recovery codes you can generate new ones, invalidating all previous codes."
+msgstr ""
+
+msgid "If your HTTP repository is not publicly accessible, add your credentials."
+msgstr ""
+
+msgid "ImageDiffViewer|2-up"
+msgstr ""
+
+msgid "ImageDiffViewer|Onion skin"
+msgstr ""
+
+msgid "ImageDiffViewer|Swipe"
+msgstr ""
+
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
+msgid "Impersonation has been disabled"
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Import CSV"
+msgstr ""
+
+msgid "Import Projects from Gitea"
+msgstr ""
+
+msgid "Import all compatible projects"
+msgstr ""
+
+msgid "Import all projects"
+msgstr ""
+
+msgid "Import all repositories"
+msgstr ""
+
+msgid "Import an exported GitLab project"
+msgstr ""
+
+msgid "Import in progress"
+msgstr ""
+
+msgid "Import issues"
+msgstr ""
+
+msgid "Import members"
+msgstr ""
+
+msgid "Import members from another project"
+msgstr ""
+
+msgid "Import multiple repositories by uploading a manifest file."
+msgstr ""
+
+msgid "Import project"
+msgstr ""
+
+msgid "Import project members"
+msgstr ""
+
+msgid "Import projects from Bitbucket"
+msgstr ""
+
+msgid "Import projects from Bitbucket Server"
+msgstr ""
+
+msgid "Import projects from FogBugz"
+msgstr ""
+
+msgid "Import projects from GitLab.com"
+msgstr ""
+
+msgid "Import projects from Google Code"
+msgstr ""
+
+msgid "Import repositories from Bitbucket Server"
+msgstr ""
+
+msgid "Import repositories from GitHub"
+msgstr ""
+
+msgid "Import repository"
+msgstr ""
+
+msgid "Import tasks"
+msgstr ""
+
+msgid "Import tasks from Phabricator into issues"
+msgstr ""
+
+msgid "Import timed out. Import took longer than %{import_jobs_expiration} seconds"
+msgstr ""
+
+msgid "Import/Export illustration"
+msgstr ""
+
+msgid "ImportButtons|Connect repositories from"
+msgstr ""
+
+msgid "ImportProjects|Blocked import URL: %{message}"
+msgstr ""
+
+msgid "ImportProjects|Error importing repository %{project_safe_import_url} into %{project_full_path} - %{message}"
+msgstr ""
+
+msgid "ImportProjects|Importing the project failed"
+msgstr ""
+
+msgid "ImportProjects|Requesting your %{provider} repositories failed"
+msgstr ""
+
+msgid "ImportProjects|Select the projects you want to import"
+msgstr ""
+
+msgid "ImportProjects|The remote data could not be imported."
+msgstr ""
+
+msgid "ImportProjects|The repository could not be created."
+msgstr ""
+
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr ""
+
+msgid "Improve Issue boards"
+msgstr ""
+
+msgid "Improve Issue boards with GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Improve Merge Requests and customer support with GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Improve issues management with Issue weight and GitLab Enterprise Edition."
+msgstr ""
+
+msgid "Improve search with Advanced Global Search and GitLab Enterprise Edition."
+msgstr ""
+
+msgid "In order to enable instance-level analytics, please ask an admin to enable %{usage_ping_link_start}usage ping%{usage_ping_link_end}."
+msgstr ""
+
+msgid "In order to gather accurate feature usage data, it can take 1 to 2 weeks to see your index."
+msgstr ""
+
+msgid "In the next step, you'll be able to select the projects you want to import."
+msgstr ""
+
+msgid "Incidents"
+msgstr ""
+
+msgid "Include a Terms of Service agreement and Privacy Policy that all users must accept."
+msgstr ""
+
+msgid "Include author name in notification email body"
+msgstr ""
+
+msgid "Include merge request description"
+msgstr ""
+
+msgid "Include the username in the URL if required: <code>https://username@gitlab.company.com/group/project.git</code>."
+msgstr ""
+
+msgid "Includes LFS objects. It can be overridden per group, or per project. 0 for unlimited."
+msgstr ""
+
+msgid "Includes an MVC structure to help you get started."
+msgstr ""
+
+msgid "Includes an MVC structure, Gemfile, Rakefile, along with many others, to help you get started."
+msgstr ""
+
+msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
+msgstr ""
+
+msgid "Incoming email"
+msgstr ""
+
+msgid "Incompatible Project"
+msgstr ""
+
+msgid "Incompatible options set!"
+msgstr ""
+
+msgid "Index all projects"
+msgstr ""
+
+msgid "Indicates whether this runner can pick jobs without tags"
+msgstr ""
+
+msgid "Inform users without uploaded SSH keys that they can't push over SSH until one is added"
+msgstr ""
+
+msgid "Information about additional Pages templates and how to install them can be found in our %{pages_getting_started_guide}."
+msgstr ""
+
+msgid "Inline"
+msgstr ""
+
+msgid "Input host keys manually"
+msgstr ""
+
+msgid "Input your repository URL"
+msgstr ""
+
+msgid "Insert a quote"
+msgstr ""
+
+msgid "Insert code"
+msgstr ""
+
+msgid "Insert suggestion"
+msgstr ""
+
+msgid "Insights"
+msgstr ""
+
+msgid "Install"
+msgstr ""
+
+msgid "Install GitLab Runner"
+msgstr ""
+
+msgid "Install Runner on Kubernetes"
+msgstr ""
+
+msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
+msgstr ""
+
+msgid "Install on clusters"
+msgstr ""
+
+msgid "Installed"
+msgstr ""
+
+msgid "Installing"
+msgstr ""
+
+msgid "Instance"
+msgid_plural "Instances"
+msgstr[0] ""
+
+msgid "Instance Statistics"
+msgstr ""
+
+msgid "Instance Statistics visibility"
+msgstr ""
+
+msgid "Instance administrators group already exists"
+msgstr ""
+
+msgid "Instance does not support multiple Kubernetes clusters"
+msgstr ""
+
+msgid "Instance license"
+msgstr ""
+
+msgid "Integrations"
+msgstr ""
+
+msgid "Integrations Settings"
+msgstr ""
+
+msgid "Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "Internal"
+msgstr ""
+
+msgid "Internal - The group and any internal projects can be viewed by any logged in user."
+msgstr ""
+
+msgid "Internal - The project can be accessed by any logged in user."
+msgstr ""
+
+msgid "Internal users"
+msgstr ""
+
+msgid "Interval Pattern"
+msgstr ""
+
+msgid "Introducing Cycle Analytics"
+msgstr ""
+
+msgid "Introducing Your Conversational Development Index"
+msgstr ""
+
+msgid "Invalid Insights config file detected"
+msgstr ""
+
+msgid "Invalid Login or password"
+msgstr ""
+
+msgid "Invalid URL"
+msgstr ""
+
+msgid "Invalid date"
+msgstr ""
+
+msgid "Invalid feature"
+msgstr ""
+
+msgid "Invalid field"
+msgstr ""
+
+msgid "Invalid file."
+msgstr ""
+
+msgid "Invalid import params"
+msgstr ""
+
+msgid "Invalid input, please avoid emojis"
+msgstr ""
+
+msgid "Invalid pin code"
+msgstr ""
+
+msgid "Invalid query"
+msgstr ""
+
+msgid "Invalid repository path"
+msgstr ""
+
+msgid "Invalid server response"
+msgstr ""
+
+msgid "Invalid two-factor code."
+msgstr ""
+
+msgid "Invitation"
+msgstr ""
+
+msgid "Invite"
+msgstr ""
+
+msgid "Invite \"%{trimmed}\" by email"
+msgstr ""
+
+msgid "Invite group"
+msgstr ""
+
+msgid "Invite member"
+msgstr ""
+
+msgid "Invocations"
+msgstr ""
+
+msgid "Is using license seat:"
+msgstr ""
+
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
+msgstr ""
+
+msgid "Issue"
+msgstr ""
+
+msgid "Issue Boards"
+msgstr ""
+
+msgid "Issue board focus mode"
+msgstr ""
+
+msgid "Issue events"
+msgstr ""
+
+msgid "Issue template (optional)"
+msgstr ""
+
+msgid "Issue update failed"
+msgstr ""
+
+msgid "Issue was closed by %{name} %{reason}"
+msgstr ""
+
+msgid "IssueBoards|Board"
+msgstr ""
+
+msgid "IssueBoards|Boards"
+msgstr ""
+
+msgid "IssueBoards|Create new board"
+msgstr ""
+
+msgid "IssueBoards|Delete board"
+msgstr ""
+
+msgid "IssueBoards|No matching boards found"
+msgstr ""
+
+msgid "IssueBoards|Some of your boards are hidden, activate a license to see them again."
+msgstr ""
+
+msgid "IssueBoards|Switch board"
+msgstr ""
+
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
+msgid "Issues"
+msgstr ""
+
+msgid "Issues / Merge Requests"
+msgstr ""
+
+msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
+msgstr ""
+
+msgid "Issues closed"
+msgstr ""
+
+msgid "Issues with comments, merge requests with diffs and comments, labels, milestones, snippets, and other project entities"
+msgstr ""
+
+msgid "Issues, merge requests, pushes, and comments."
+msgstr ""
+
+msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
+msgstr ""
+
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created per month"
+msgstr ""
+
+msgid "IssuesAnalytics|Last 12 months"
+msgstr ""
+
+msgid "IssuesAnalytics|Sorry, your filter produced no results"
+msgstr ""
+
+msgid "IssuesAnalytics|There are no issues for the projects in your group"
+msgstr ""
+
+msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
+msgstr ""
+
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
+msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
+msgstr ""
+
+msgid "It's you"
+msgstr ""
+
+msgid "Jaeger URL"
+msgstr ""
+
+msgid "Jaeger tracing"
+msgstr ""
+
+msgid "Jan"
+msgstr ""
+
+msgid "January"
+msgstr ""
+
+msgid "JiraService|Events for %{noteable_model_name} are disabled."
+msgstr ""
+
+msgid "JiraService|If different from Web URL"
+msgstr ""
+
+msgid "JiraService|Jira API URL"
+msgstr ""
+
+msgid "JiraService|Jira comments will be created when an issue gets referenced in a commit."
+msgstr ""
+
+msgid "JiraService|Jira comments will be created when an issue gets referenced in a merge request."
+msgstr ""
+
+msgid "JiraService|Jira issue tracker"
+msgstr ""
+
+msgid "JiraService|Password or API token"
+msgstr ""
+
+msgid "JiraService|Transition ID(s)"
+msgstr ""
+
+msgid "JiraService|Use , or ; to separate multiple transition IDs"
+msgstr ""
+
+msgid "JiraService|Use a password for server version and an API token for cloud version"
+msgstr ""
+
+msgid "JiraService|Use a username for server version and an email for cloud version"
+msgstr ""
+
+msgid "JiraService|Username or Email"
+msgstr ""
+
+msgid "JiraService|Web URL"
+msgstr ""
+
+msgid "JiraService|transition ids can have only numbers which can be split with , or ;"
+msgstr ""
+
+msgid "Job"
+msgstr ""
+
+msgid "Job Failed #%{build_id}"
+msgstr ""
+
+msgid "Job ID"
+msgstr ""
+
+msgid "Job has been erased"
+msgstr ""
+
+msgid "Job has been successfully erased!"
+msgstr ""
+
+msgid "Job has wrong arguments format."
+msgstr ""
+
+msgid "Job is missing the `model_type` argument."
+msgstr ""
+
+msgid "Job is stuck. Check runners."
+msgstr ""
+
+msgid "Job traces and artifacts"
+msgstr ""
+
+msgid "Job was retried"
+msgstr ""
+
+msgid "Jobs"
+msgstr ""
+
+msgid "Job|Browse"
+msgstr ""
+
+msgid "Job|Complete Raw"
+msgstr ""
+
+msgid "Job|Download"
+msgstr ""
+
+msgid "Job|Erase job log"
+msgstr ""
+
+msgid "Job|Job artifacts"
+msgstr ""
+
+msgid "Job|Job has been erased"
+msgstr ""
+
+msgid "Job|Job has been erased by"
+msgstr ""
+
+msgid "Job|Keep"
+msgstr ""
+
+msgid "Job|Pipeline"
+msgstr ""
+
+msgid "Job|Scroll to bottom"
+msgstr ""
+
+msgid "Job|Scroll to top"
+msgstr ""
+
+msgid "Job|Show complete raw"
+msgstr ""
+
+msgid "Job|The artifacts were removed"
+msgstr ""
+
+msgid "Job|The artifacts will be removed"
+msgstr ""
+
+msgid "Job|This job failed because the necessary resources were not successfully created."
+msgstr ""
+
+msgid "Job|This job is stuck because the project doesn't have any runners online assigned to it."
+msgstr ""
+
+msgid "Job|for"
+msgstr ""
+
+msgid "Job|into"
+msgstr ""
+
+msgid "Job|with"
+msgstr ""
+
+msgid "Join Zoom meeting"
+msgstr ""
+
+msgid "Jul"
+msgstr ""
+
+msgid "July"
+msgstr ""
+
+msgid "Jump to first unresolved discussion"
+msgstr ""
+
+msgid "Jump to next unresolved discussion"
+msgstr ""
+
+msgid "Jun"
+msgstr ""
+
+msgid "June"
+msgstr ""
+
+msgid "Key (PEM)"
+msgstr ""
+
+msgid "Key: %{key}"
+msgstr ""
+
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+msgid "Kubernetes"
+msgstr ""
+
+msgid "Kubernetes Cluster"
+msgstr ""
+
+msgid "Kubernetes Clusters"
+msgstr ""
+
+msgid "Kubernetes cluster creation time exceeds timeout; %{timeout}"
+msgstr ""
+
+msgid "Kubernetes cluster integration was not removed."
+msgstr ""
+
+msgid "Kubernetes cluster integration was successfully removed."
+msgstr ""
+
+msgid "Kubernetes cluster was successfully updated."
+msgstr ""
+
+msgid "Kubernetes configured"
+msgstr ""
+
+msgid "Kubernetes deployment not found"
+msgstr ""
+
+msgid "Kubernetes error: %{error_code}"
+msgstr ""
+
+msgid "LDAP"
+msgstr ""
+
+msgid "LDAP settings"
+msgstr ""
+
+msgid "LDAP sync in progress. This could take a few minutes. Refresh the page to see the changes."
+msgstr ""
+
+msgid "LFS"
+msgstr ""
+
+msgid "LFS objects"
+msgstr ""
+
+msgid "LFSStatus|Disabled"
+msgstr ""
+
+msgid "LFSStatus|Enabled"
+msgstr ""
+
+msgid "LICENSE"
+msgstr ""
+
+msgid "Label"
+msgstr ""
+
+msgid "Label actions dropdown"
+msgstr ""
+
+msgid "Label lists show all issues with the selected label."
+msgstr ""
+
+msgid "Label was created"
+msgstr ""
+
+msgid "Label was removed"
+msgstr ""
+
+msgid "Label was successfully updated."
+msgstr ""
+
+msgid "LabelSelect|%{firstLabelName} +%{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|%{labelsString}, and %{remainingLabelCount} more"
+msgstr ""
+
+msgid "LabelSelect|Labels"
+msgstr ""
+
+msgid "Labels"
+msgstr ""
+
+msgid "Labels can be applied to %{features}. Group labels are available for any project within the group."
+msgstr ""
+
+msgid "Labels can be applied to issues and merge requests to categorize them."
+msgstr ""
+
+msgid "Labels can be applied to issues and merge requests."
+msgstr ""
+
+msgid "Labels|<span>Promote label</span> %{labelTitle} <span>to Group Label?</span>"
+msgstr ""
+
+msgid "Labels|Promote Label"
+msgstr ""
+
+msgid "Labels|Promoting %{labelTitle} will make it available for all projects inside %{groupName}. Existing project labels with the same title will be merged. This action cannot be reversed."
+msgstr ""
+
+msgid "Labels|and %{count} more"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Large File Storage"
+msgstr ""
+
+msgid "Last %d day"
+msgid_plural "Last %d days"
+msgstr[0] ""
+
+msgid "Last %{days} days"
+msgstr ""
+
+msgid "Last Pipeline"
+msgstr ""
+
+msgid "Last accessed on"
+msgstr ""
+
+msgid "Last activity"
+msgstr ""
+
+msgid "Last commit"
+msgstr ""
+
+msgid "Last contact"
+msgstr ""
+
+msgid "Last edited %{date}"
+msgstr ""
+
+msgid "Last edited by %{name}"
+msgstr ""
+
+msgid "Last name"
+msgstr ""
+
+msgid "Last reply by"
+msgstr ""
+
+msgid "Last seen"
+msgstr ""
+
+msgid "Last successful update"
+msgstr ""
+
+msgid "Last update"
+msgstr ""
+
+msgid "Last update attempt"
+msgstr ""
+
+msgid "Last updated"
+msgstr ""
+
+msgid "Last used"
+msgstr ""
+
+msgid "Last used on:"
+msgstr ""
+
+msgid "LastPushEvent|You pushed to"
+msgstr ""
+
+msgid "LastPushEvent|at"
+msgstr ""
+
+msgid "Latest changes"
+msgstr ""
+
+msgid "Latest pipeline for the most recent commit on this branch"
+msgstr ""
+
+msgid "Lead"
+msgstr ""
+
+msgid "Learn GitLab"
+msgstr ""
+
+msgid "Learn how to %{link_start}contribute to the built-in templates%{link_end}"
+msgstr ""
+
+msgid "Learn how to %{no_packages_link_start}publish and share your packages%{no_packages_link_end} with GitLab."
+msgstr ""
+
+msgid "Learn more"
+msgstr ""
+
+msgid "Learn more about Auto DevOps"
+msgstr ""
+
+msgid "Learn more about Kubernetes"
+msgstr ""
+
+msgid "Learn more about Web Terminal"
+msgstr ""
+
+msgid "Learn more about adding certificates to your project by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
+msgstr ""
+
+msgid "Learn more about approvals."
+msgstr ""
+
+msgid "Learn more about custom project templates"
+msgstr ""
+
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
+msgid "Learn more about group-level project templates"
+msgstr ""
+
+msgid "Learn more about signing commits"
+msgstr ""
+
+msgid "Learn more about the dependency list"
+msgstr ""
+
+msgid "Learn more about vulnerability check"
+msgstr ""
+
+msgid "Learn more in the"
+msgstr ""
+
+msgid "Learn more in the|pipeline schedules documentation"
+msgstr ""
+
+msgid "Leave"
+msgstr ""
+
+msgid "Leave edit mode? All unsaved changes will be lost."
+msgstr ""
+
+msgid "Leave group"
+msgstr ""
+
+msgid "Leave project"
+msgstr ""
+
+msgid "Leave the \"File type\" and \"Delivery method\" options on their default values."
+msgstr ""
+
+msgid "Let's Encrypt does not accept emails on example.com"
+msgstr ""
+
+msgid "Let's Encrypt is a free, automated, and open certificate authority (CA) that gives digital certificates in order to enable HTTPS (SSL/TLS) for websites. Learn more about Let's Encrypt configuration by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
+msgstr ""
+
+msgid "License"
+msgstr ""
+
+msgid "License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|Add a license"
+msgstr ""
+
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Approve"
+msgstr ""
+
+msgid "LicenseCompliance|Approve license"
+msgstr ""
+
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
+
+msgid "LicenseCompliance|Approved"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
+
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
+
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
+
+msgid "LicenseCompliance|License details"
+msgstr ""
+
+msgid "LicenseCompliance|License name"
+msgstr ""
+
+msgid "LicenseCompliance|Packages"
+msgstr ""
+
+msgid "LicenseCompliance|Remove license"
+msgstr ""
+
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
+
+msgid "LicenseCompliance|Submit"
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
+
+msgid "Licensed Features"
+msgstr ""
+
+msgid "Licensed to"
+msgstr ""
+
+msgid "Licenses"
+msgstr ""
+
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
+msgid "Limit namespaces and projects that can be indexed"
+msgstr ""
+
+msgid "Limited to showing %d event at most"
+msgid_plural "Limited to showing %d events at most"
+msgstr[0] ""
+
+msgid "Link copied to clipboard"
+msgstr ""
+
+msgid "Linked emails (%{email_count})"
+msgstr ""
+
+msgid "LinkedIn"
+msgstr ""
+
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
+msgid "List"
+msgstr ""
+
+msgid "List Your Gitea Repositories"
+msgstr ""
+
+msgid "List available repositories"
+msgstr ""
+
+msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
+msgstr ""
+
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
+msgid "List view"
+msgstr ""
+
+msgid "List your Bitbucket Server repositories"
+msgstr ""
+
+msgid "Live preview"
+msgstr ""
+
+msgid "Loading contribution stats for group members"
+msgstr ""
+
+msgid "Loading functions timed out. Please reload the page to try again."
+msgstr ""
+
+msgid "Loading issues"
+msgstr ""
+
+msgid "Loading the GitLab IDE..."
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "Loading…"
+msgstr ""
+
+msgid "Localization"
+msgstr ""
+
+msgid "Lock"
+msgstr ""
+
+msgid "Lock %{issuableDisplayName}"
+msgstr ""
+
+msgid "Lock memberships to LDAP synchronization"
+msgstr ""
+
+msgid "Lock not found"
+msgstr ""
+
+msgid "Lock the discussion"
+msgstr ""
+
+msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment."
+msgstr ""
+
+msgid "Lock to current projects"
+msgstr ""
+
+msgid "Locked"
+msgstr ""
+
+msgid "Locked Files"
+msgstr ""
+
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
+msgid "Locked to current projects"
+msgstr ""
+
+msgid "Locks give the ability to lock specific file or folder."
+msgstr ""
+
+msgid "Locks the discussion."
+msgstr ""
+
+msgid "Login with smartcard"
+msgstr ""
+
+msgid "Logo was successfully removed."
+msgstr ""
+
+msgid "Logs"
+msgstr ""
+
+msgid "MERGED"
+msgstr ""
+
+msgid "MRApprovals|Approved by"
+msgstr ""
+
+msgid "MRApprovals|Approvers"
+msgstr ""
+
+msgid "MRApprovals|Pending approvals"
+msgstr ""
+
+msgid "MRDiff|Show changes only"
+msgstr ""
+
+msgid "MRDiff|Show full file"
+msgstr ""
+
+msgid "Made this issue confidential."
+msgstr ""
+
+msgid "Make and review changes in the browser with the Web IDE"
+msgstr ""
+
+msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
+msgstr ""
+
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
+msgstr ""
+
+msgid "Make sure you're logged into the account that owns the projects you'd like to import."
+msgstr ""
+
+msgid "Makes this issue confidential."
+msgstr ""
+
+msgid "Manage"
+msgstr ""
+
+msgid "Manage Git repositories with fine-grained access controls that keep your code secure. Perform code reviews and enhance collaboration with merge requests. Each project can also have an issue tracker and a wiki."
+msgstr ""
+
+msgid "Manage Web IDE features"
+msgstr ""
+
+msgid "Manage access"
+msgstr ""
+
+msgid "Manage all notifications"
+msgstr ""
+
+msgid "Manage applications that can use GitLab as an OAuth provider, and applications that you've authorized to use your account."
+msgstr ""
+
+msgid "Manage applications that you've authorized to use your account."
+msgstr ""
+
+msgid "Manage group labels"
+msgstr ""
+
+msgid "Manage labels"
+msgstr ""
+
+msgid "Manage project labels"
+msgstr ""
+
+msgid "Manage two-factor authentication"
+msgstr ""
+
+msgid "Manifest"
+msgstr ""
+
+msgid "Manifest file import"
+msgstr ""
+
+msgid "Manual job"
+msgstr ""
+
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
+msgid "Map a FogBugz account ID to a GitLab user"
+msgstr ""
+
+msgid "Map a Google Code user to a GitLab user"
+msgstr ""
+
+msgid "Map a Google Code user to a full email address"
+msgstr ""
+
+msgid "Map a Google Code user to a full name"
+msgstr ""
+
+msgid "Mar"
+msgstr ""
+
+msgid "March"
+msgstr ""
+
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
+msgid "Mark as resolved"
+msgstr ""
+
+msgid "Mark comment as resolved"
+msgstr ""
+
+msgid "Mark this issue as a duplicate of another issue"
+msgstr ""
+
+msgid "Mark this issue as related to another issue"
+msgstr ""
+
+msgid "Markdown"
+msgstr ""
+
+msgid "Markdown Help"
+msgstr ""
+
+msgid "Markdown enabled"
+msgstr ""
+
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marks this issue as a duplicate of %{duplicate_reference}."
+msgstr ""
+
+msgid "Marks this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Match not found; try refining your search query."
+msgstr ""
+
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
+msgid "Maven Metadata"
+msgstr ""
+
+msgid "Max access level"
+msgstr ""
+
+msgid "Max seats used"
+msgstr ""
+
+msgid "Maximum artifacts size (MB)"
+msgstr ""
+
+msgid "Maximum attachment size (MB)"
+msgstr ""
+
+msgid "Maximum capacity"
+msgstr ""
+
+msgid "Maximum delay (Minutes)"
+msgstr ""
+
+msgid "Maximum job timeout"
+msgstr ""
+
+msgid "Maximum job timeout has a value which could not be accepted"
+msgstr ""
+
+msgid "Maximum number of mirrors that can be synchronizing at the same time."
+msgstr ""
+
+msgid "Maximum push size (MB)"
+msgstr ""
+
+msgid "Maximum time between updates that a mirror can have when scheduled to synchronize."
+msgstr ""
+
+msgid "May"
+msgstr ""
+
+msgid "Median"
+msgstr ""
+
+msgid "Member lock"
+msgstr ""
+
+msgid "Member since %{date}"
+msgstr ""
+
+msgid "Members"
+msgstr ""
+
+msgid "Members can be added by project <i>Maintainers</i> or <i>Owners</i>"
+msgstr ""
+
+msgid "Members of <strong>%{project_name}</strong>"
+msgstr ""
+
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Merge"
+msgstr ""
+
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
+msgid "Merge Request"
+msgstr ""
+
+msgid "Merge Request Approvals"
+msgstr ""
+
+msgid "Merge Requests"
+msgstr ""
+
+msgid "Merge Requests created"
+msgstr ""
+
+msgid "Merge commit message"
+msgstr ""
+
+msgid "Merge events"
+msgstr ""
+
+msgid "Merge immediately"
+msgstr ""
+
+msgid "Merge in progress"
+msgstr ""
+
+msgid "Merge request"
+msgstr ""
+
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
+msgid "Merge request approvals"
+msgstr ""
+
+msgid "Merge request approvals allow you to set the number of necessary approvals and predefine a list of approvers that will need to approve every merge request in a project."
+msgstr ""
+
+msgid "Merge requests"
+msgstr ""
+
+msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
+msgstr ""
+
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
+msgid "Merge when pipeline succeeds"
+msgstr ""
+
+msgid "MergeConflict|Commit to source branch"
+msgstr ""
+
+msgid "MergeConflict|Committing..."
+msgstr ""
+
+msgid "MergeConflict|HEAD//our changes"
+msgstr ""
+
+msgid "MergeConflict|Use ours"
+msgstr ""
+
+msgid "MergeConflict|Use theirs"
+msgstr ""
+
+msgid "MergeConflict|conflict"
+msgstr ""
+
+msgid "MergeConflict|conflicts"
+msgstr ""
+
+msgid "MergeConflict|origin//their changes"
+msgstr ""
+
+msgid "MergeRequests|Add a reply"
+msgstr ""
+
+msgid "MergeRequests|An error occurred while saving the draft comment."
+msgstr ""
+
+msgid "MergeRequests|Failed to squash. Should be done manually."
+msgstr ""
+
+msgid "MergeRequests|Jump to next unresolved discussion"
+msgstr ""
+
+msgid "MergeRequests|Reply..."
+msgstr ""
+
+msgid "MergeRequests|Resolve this thread in a new issue"
+msgstr ""
+
+msgid "MergeRequests|Saving the comment failed"
+msgstr ""
+
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgstr ""
+
+msgid "MergeRequests|Thread stays resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr ""
+
+msgid "MergeRequests|Toggle comments for this file"
+msgstr ""
+
+msgid "MergeRequests|View file @ %{commitId}"
+msgstr ""
+
+msgid "MergeRequests|View replaced file @ %{commitId}"
+msgstr ""
+
+msgid "MergeRequests|commented on commit %{commitLink}"
+msgstr ""
+
+msgid "MergeRequests|started a thread"
+msgstr ""
+
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
+
+msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
+msgstr ""
+
+msgid "MergeRequest|Error dismissing suggestion popover. Please try again."
+msgstr ""
+
+msgid "MergeRequest|Error loading full diff. Please try again."
+msgstr ""
+
+msgid "MergeRequest|Filter files or search with %{modifier_key}+p"
+msgstr ""
+
+msgid "MergeRequest|No files found"
+msgstr ""
+
+msgid "Merged"
+msgstr ""
+
+msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
+msgstr ""
+
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
+msgid "Messages"
+msgstr ""
+
+msgid "Method"
+msgstr ""
+
+msgid "Metric was successfully added."
+msgstr ""
+
+msgid "Metric was successfully updated."
+msgstr ""
+
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
+msgid "Metrics"
+msgstr ""
+
+msgid "Metrics - Grafana"
+msgstr ""
+
+msgid "Metrics - Influx"
+msgstr ""
+
+msgid "Metrics - Prometheus"
+msgstr ""
+
+msgid "Metrics Dashboard"
+msgstr ""
+
+msgid "Metrics and profiling"
+msgstr ""
+
+msgid "Metrics for environment"
+msgstr ""
+
+msgid "Metrics|Add metric"
+msgstr ""
+
+msgid "Metrics|Check out the CI/CD documentation on deploying to an environment"
+msgstr ""
+
+msgid "Metrics|Create metric"
+msgstr ""
+
+msgid "Metrics|Delete metric"
+msgstr ""
+
+msgid "Metrics|Delete metric?"
+msgstr ""
+
+msgid "Metrics|Edit metric"
+msgstr ""
+
+msgid "Metrics|Environment"
+msgstr ""
+
+msgid "Metrics|For grouping similar metrics"
+msgstr ""
+
+msgid "Metrics|Label of the y-axis (usually the unit). The x-axis always represents time."
+msgstr ""
+
+msgid "Metrics|Learn about environments"
+msgstr ""
+
+msgid "Metrics|Legend label (optional)"
+msgstr ""
+
+msgid "Metrics|Must be a valid PromQL query."
+msgstr ""
+
+msgid "Metrics|New metric"
+msgstr ""
+
+msgid "Metrics|No deployed environments"
+msgstr ""
+
+msgid "Metrics|PromQL query is valid"
+msgstr ""
+
+msgid "Metrics|Prometheus Query Documentation"
+msgstr ""
+
+msgid "Metrics|Show last"
+msgstr ""
+
+msgid "Metrics|There was an error fetching the environments data, please try again"
+msgstr ""
+
+msgid "Metrics|There was an error getting deployment information."
+msgstr ""
+
+msgid "Metrics|There was an error getting environments information."
+msgstr ""
+
+msgid "Metrics|There was an error trying to validate your query"
+msgstr ""
+
+msgid "Metrics|There was an error while retrieving metrics"
+msgstr ""
+
+msgid "Metrics|Unexpected deployment data response from prometheus endpoint"
+msgstr ""
+
+msgid "Metrics|Unexpected metrics data response from prometheus endpoint"
+msgstr ""
+
+msgid "Metrics|Unit label"
+msgstr ""
+
+msgid "Metrics|Used as a title for the chart"
+msgstr ""
+
+msgid "Metrics|Used if the query returns a single series. If it returns multiple series, their legend labels will be picked up from the response."
+msgstr ""
+
+msgid "Metrics|Y-axis label"
+msgstr ""
+
+msgid "Metrics|You're about to permanently delete this metric. This cannot be undone."
+msgstr ""
+
+msgid "Metrics|e.g. HTTP requests"
+msgstr ""
+
+msgid "Metrics|e.g. Requests/second"
+msgstr ""
+
+msgid "Metrics|e.g. Throughput"
+msgstr ""
+
+msgid "Metrics|e.g. rate(http_requests_total[5m])"
+msgstr ""
+
+msgid "Metrics|e.g. req/sec"
+msgstr ""
+
+msgid "Migrated %{success_count}/%{total_count} files."
+msgstr ""
+
+msgid "Migration successful."
+msgstr ""
+
+msgid "Milestone"
+msgstr ""
+
+msgid "Milestone lists not available with your current license"
+msgstr ""
+
+msgid "Milestone lists show all issues from the selected milestone."
+msgstr ""
+
+msgid "Milestones"
+msgstr ""
+
+msgid "Milestones| You’re about to permanently delete the milestone %{milestoneTitle} and remove it from %{issuesWithCount} and %{mergeRequestsWithCount}. Once deleted, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Milestones| You’re about to permanently delete the milestone %{milestoneTitle}. This milestone is not currently used in any issues or merge requests."
+msgstr ""
+
+msgid "Milestones|Delete milestone"
+msgstr ""
+
+msgid "Milestones|Delete milestone %{milestoneTitle}?"
+msgstr ""
+
+msgid "Milestones|Failed to delete milestone %{milestoneTitle}"
+msgstr ""
+
+msgid "Milestones|Milestone %{milestoneTitle} was not found"
+msgstr ""
+
+msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
+msgstr ""
+
+msgid "Milestones|Promote Milestone"
+msgstr ""
+
+msgid "Milestones|Promoting %{milestoneTitle} will make it available for all projects inside %{groupName}. Existing project milestones with the same title will be merged."
+msgstr ""
+
+msgid "Milestones|This action cannot be reversed."
+msgstr ""
+
+msgid "Minimum capacity to be available before we schedule more mirrors preemptively."
+msgstr ""
+
+msgid "Minimum length is %{minimum_password_length} characters"
+msgstr ""
+
+msgid "Minimum length is %{minimum_password_length} characters."
+msgstr ""
+
+msgid "Minutes"
+msgstr ""
+
+msgid "Mirror direction"
+msgstr ""
+
+msgid "Mirror repository"
+msgstr ""
+
+msgid "Mirror user"
+msgstr ""
+
+msgid "Mirrored repositories"
+msgstr ""
+
+msgid "Mirroring repositories"
+msgstr ""
+
+msgid "Mirroring settings were successfully updated."
+msgstr ""
+
+msgid "Mirroring settings were successfully updated. The project is being updated."
+msgstr ""
+
+msgid "Mirroring was successfully disabled."
+msgstr ""
+
+msgid "Mirroring will only be available if the feature is included in the plan of the selected group or user."
+msgstr ""
+
+msgid "Missing commit signatures endpoint!"
+msgstr ""
+
+msgid "MissingSSHKeyWarningLink|add an SSH key"
+msgstr ""
+
+msgid "Modal|Cancel"
+msgstr ""
+
+msgid "Modal|Close"
+msgstr ""
+
+msgid "Modified in this version"
+msgstr ""
+
+msgid "Modify commit message"
+msgstr ""
+
+msgid "Modify commit messages"
+msgstr ""
+
+msgid "Modify merge commit"
+msgstr ""
+
+msgid "Monday"
+msgstr ""
+
+msgid "Monitor your errors by integrating with Sentry."
+msgstr ""
+
+msgid "Monitoring"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "More"
+msgstr ""
+
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
+msgid "More actions"
+msgstr ""
+
+msgid "More info"
+msgstr ""
+
+msgid "More information"
+msgstr ""
+
+msgid "More information is available|here"
+msgstr ""
+
+msgid "More than %{number_commits_distance} commits different with %{default_branch}"
+msgstr ""
+
+msgid "Most stars"
+msgstr ""
+
+msgid "Mount point %{mounted_as} not found in %{model_class}."
+msgstr ""
+
+msgid "Move"
+msgstr ""
+
+msgid "Move issue"
+msgstr ""
+
+msgid "Move issue from one column of the board to another"
+msgstr ""
+
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
+msgid "Move this issue to another project."
+msgstr ""
+
+msgid "MoveIssue|Cannot move issue due to insufficient permissions!"
+msgstr ""
+
+msgid "MoveIssue|Cannot move issue to project it originates from!"
+msgstr ""
+
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
+msgid "Moves issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moves this issue to %{path_to_project}."
+msgstr ""
+
+msgid "Multiple issue boards"
+msgstr ""
+
+msgid "Multiple model types found: %{model_types}"
+msgstr ""
+
+msgid "Multiple uploaders found: %{uploader_types}"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Name has already been taken"
+msgstr ""
+
+msgid "Name new label"
+msgstr ""
+
+msgid "Name your individual key via a title"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Namespaces to index"
+msgstr ""
+
+msgid "Naming, topics, avatar"
+msgstr ""
+
+msgid "Naming, visibility"
+msgstr ""
+
+msgid "Nav|Help"
+msgstr ""
+
+msgid "Nav|Home"
+msgstr ""
+
+msgid "Nav|Sign In / Register"
+msgstr ""
+
+msgid "Nav|Sign out and sign in with a different account"
+msgstr ""
+
+msgid "Need help?"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Never"
+msgstr ""
+
+msgid "New"
+msgstr ""
+
+msgid "New Application"
+msgstr ""
+
+msgid "New Environment"
+msgstr ""
+
+msgid "New Group"
+msgstr ""
+
+msgid "New Identity"
+msgstr ""
+
+msgid "New Issue"
+msgid_plural "New Issues"
+msgstr[0] ""
+
+msgid "New Label"
+msgstr ""
+
+msgid "New Milestone"
+msgstr ""
+
+msgid "New Pages Domain"
+msgstr ""
+
+msgid "New Password"
+msgstr ""
+
+msgid "New Pipeline Schedule"
+msgstr ""
+
+msgid "New Project"
+msgstr ""
+
+msgid "New Snippet"
+msgstr ""
+
+msgid "New branch"
+msgstr ""
+
+msgid "New branch unavailable"
+msgstr ""
+
+msgid "New deploy key"
+msgstr ""
+
+msgid "New directory"
+msgstr ""
+
+msgid "New environment"
+msgstr ""
+
+msgid "New epic"
+msgstr ""
+
+msgid "New epic title"
+msgstr ""
+
+msgid "New file"
+msgstr ""
+
+msgid "New group"
+msgstr ""
+
+msgid "New health check access token has been generated!"
+msgstr ""
+
+msgid "New identity"
+msgstr ""
+
+msgid "New issue"
+msgstr ""
+
+msgid "New label"
+msgstr ""
+
+msgid "New merge request"
+msgstr ""
+
+msgid "New milestone"
+msgstr ""
+
+msgid "New password"
+msgstr ""
+
+msgid "New pipelines will cancel older, pending pipelines on the same branch"
+msgstr ""
+
+msgid "New project"
+msgstr ""
+
+msgid "New runners registration token has been generated!"
+msgstr ""
+
+msgid "New schedule"
+msgstr ""
+
+msgid "New snippet"
+msgstr ""
+
+msgid "New subgroup"
+msgstr ""
+
+msgid "New tag"
+msgstr ""
+
+msgid "New users set to external"
+msgstr ""
+
+msgid "New! Suggest changes directly"
+msgstr ""
+
+msgid "New..."
+msgstr ""
+
+msgid "Newly registered users will by default be external"
+msgstr ""
+
+msgid "Next"
+msgstr ""
+
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
+msgid "Nickname"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
+msgstr ""
+
+msgid "No Label"
+msgstr ""
+
+msgid "No Milestone"
+msgstr ""
+
+msgid "No Tag"
+msgstr ""
+
+msgid "No active admin user found"
+msgstr ""
+
+msgid "No activities found"
+msgstr ""
+
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
+msgstr ""
+
+msgid "No branches found"
+msgstr ""
+
+msgid "No changes"
+msgstr ""
+
+msgid "No changes between %{ref_start}%{source_branch}%{ref_end} and %{ref_start}%{target_branch}%{ref_end}"
+msgstr ""
+
+msgid "No connection could be made to a Gitaly Server, please check your logs!"
+msgstr ""
+
+msgid "No contributions"
+msgstr ""
+
+msgid "No contributions were found"
+msgstr ""
+
+msgid "No credit card required."
+msgstr ""
+
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
+msgid "No details available"
+msgstr ""
+
+msgid "No due date"
+msgstr ""
+
+msgid "No errors to display."
+msgstr ""
+
+msgid "No estimate or time spent"
+msgstr ""
+
+msgid "No file chosen"
+msgstr ""
+
+msgid "No file selected"
+msgstr ""
+
+msgid "No files"
+msgstr ""
+
+msgid "No files found."
+msgstr ""
+
+msgid "No forks available to you."
+msgstr ""
+
+msgid "No issues for the selected time period."
+msgstr ""
+
+msgid "No job trace"
+msgstr ""
+
+msgid "No jobs to show"
+msgstr ""
+
+msgid "No labels with such name or description"
+msgstr ""
+
+msgid "No license. All rights reserved"
+msgstr ""
+
+msgid "No licenses found."
+msgstr ""
+
+msgid "No matching results"
+msgstr ""
+
+msgid "No merge requests for the selected time period."
+msgstr ""
+
+msgid "No merge requests found"
+msgstr ""
+
+msgid "No messages were logged"
+msgstr ""
+
+msgid "No milestones to show"
+msgstr ""
+
+msgid "No other labels with such name or description"
+msgstr ""
+
+msgid "No parent group"
+msgstr ""
+
+msgid "No preview for this file type"
+msgstr ""
+
+msgid "No prioritised labels with such name or description"
+msgstr ""
+
+msgid "No public groups"
+msgstr ""
+
+msgid "No pushes for the selected time period."
+msgstr ""
+
+msgid "No repository"
+msgstr ""
+
+msgid "No required pipeline"
+msgstr ""
+
+msgid "No runners found"
+msgstr ""
+
+msgid "No schedules"
+msgstr ""
+
+msgid "No starrers matched your search"
+msgstr ""
+
+msgid "No start date"
+msgstr ""
+
+msgid "No template"
+msgstr ""
+
+msgid "No value set by top-level parent group."
+msgstr ""
+
+msgid "No, directly import the existing email addresses and usernames."
+msgstr ""
+
+msgid "No, not interested right now"
+msgstr ""
+
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
+msgid "Node was successfully created."
+msgstr ""
+
+msgid "Node was successfully updated."
+msgstr ""
+
+msgid "Nodes"
+msgstr ""
+
+msgid "None"
+msgstr ""
+
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
+msgid "Not available"
+msgstr ""
+
+msgid "Not available for private projects"
+msgstr ""
+
+msgid "Not available for protected branches"
+msgstr ""
+
+msgid "Not confidential"
+msgstr ""
+
+msgid "Not enough data"
+msgstr ""
+
+msgid "Not found."
+msgstr ""
+
+msgid "Not helpful"
+msgstr ""
+
+msgid "Not now"
+msgstr ""
+
+msgid "Not ready yet. Try again later."
+msgstr ""
+
+msgid "Not started"
+msgstr ""
+
+msgid "Note"
+msgstr ""
+
+msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: As an administrator you may like to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow connecting repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
+msgstr ""
+
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
+msgid "NoteForm|Note"
+msgstr ""
+
+msgid "Notes|Are you sure you want to cancel creating this comment?"
+msgstr ""
+
+msgid "Notes|Collapse replies"
+msgstr ""
+
+msgid "Notes|Show all activity"
+msgstr ""
+
+msgid "Notes|Show comments only"
+msgstr ""
+
+msgid "Notes|Show history only"
+msgstr ""
+
+msgid "Notes|This comment has changed since you started editing, please review the %{open_link}updated comment%{close_link} to ensure information is not lost"
+msgstr ""
+
+msgid "Nothing to preview."
+msgstr ""
+
+msgid "Notification events"
+msgstr ""
+
+msgid "Notification setting"
+msgstr ""
+
+msgid "Notification setting - %{notification_title}"
+msgstr ""
+
+msgid "Notification settings saved"
+msgstr ""
+
+msgid "NotificationEvent|Close issue"
+msgstr ""
+
+msgid "NotificationEvent|Close merge request"
+msgstr ""
+
+msgid "NotificationEvent|Failed pipeline"
+msgstr ""
+
+msgid "NotificationEvent|Merge merge request"
+msgstr ""
+
+msgid "NotificationEvent|New epic"
+msgstr ""
+
+msgid "NotificationEvent|New issue"
+msgstr ""
+
+msgid "NotificationEvent|New merge request"
+msgstr ""
+
+msgid "NotificationEvent|New note"
+msgstr ""
+
+msgid "NotificationEvent|Reassign issue"
+msgstr ""
+
+msgid "NotificationEvent|Reassign merge request"
+msgstr ""
+
+msgid "NotificationEvent|Reopen issue"
+msgstr ""
+
+msgid "NotificationEvent|Successful pipeline"
+msgstr ""
+
+msgid "NotificationLevel|Custom"
+msgstr ""
+
+msgid "NotificationLevel|Disabled"
+msgstr ""
+
+msgid "NotificationLevel|Global"
+msgstr ""
+
+msgid "NotificationLevel|On mention"
+msgstr ""
+
+msgid "NotificationLevel|Participate"
+msgstr ""
+
+msgid "NotificationLevel|Watch"
+msgstr ""
+
+msgid "NotificationSetting|Custom"
+msgstr ""
+
+msgid "Notifications"
+msgstr ""
+
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
+msgid "Notifications off"
+msgstr ""
+
+msgid "Notifications on"
+msgstr ""
+
+msgid "Nov"
+msgstr ""
+
+msgid "November"
+msgstr ""
+
+msgid "Number of Elasticsearch replicas"
+msgstr ""
+
+msgid "Number of Elasticsearch shards"
+msgstr ""
+
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
+msgid "OK"
+msgstr ""
+
+msgid "Object Storage replication"
+msgstr ""
+
+msgid "Object does not exist on the server or you don't have permissions to access it"
+msgstr ""
+
+msgid "Oct"
+msgstr ""
+
+msgid "October"
+msgstr ""
+
+msgid "OfSearchInADropdown|Filter"
+msgstr ""
+
+msgid "Ok let's go"
+msgstr ""
+
+msgid "OmniAuth"
+msgstr ""
+
+msgid "Onboarding"
+msgstr ""
+
+msgid "Once imported, repositories can be mirrored over SSH. Read more %{link_start}here%{link_end}."
+msgstr ""
+
+msgid "Once removed, the fork relationship cannot be restored and you will no longer be able to send merge requests to the source."
+msgstr ""
+
+msgid "Once the exported file is ready, you will receive a notification email with a download link, or you can download it from this page."
+msgstr ""
+
+msgid "One more item"
+msgid_plural "%d more items"
+msgstr[0] ""
+
+msgid "One or more groups that you don't have access to."
+msgstr ""
+
+msgid "One or more of your Bitbucket projects cannot be imported into GitLab directly because they use Subversion or Mercurial for version control, rather than Git."
+msgstr ""
+
+msgid "One or more of your Google Code projects cannot be imported into GitLab directly because they use Subversion or Mercurial for version control, rather than Git."
+msgstr ""
+
+msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
+msgstr ""
+
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
+msgid "Only admins"
+msgstr ""
+
+msgid "Only admins can delete project"
+msgstr ""
+
+msgid "Only mirror protected branches"
+msgstr ""
+
+msgid "Only policy:"
+msgstr ""
+
+msgid "Only proceed if you trust %{idp_url} to control your GitLab account sign in."
+msgstr ""
+
+msgid "Only project members can comment."
+msgstr ""
+
+msgid "Only project members will be imported. Group members will be skipped."
+msgstr ""
+
+msgid "Only these extensions are supported: %{extension_list}"
+msgstr ""
+
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
+msgid "Oops, are you sure?"
+msgstr ""
+
+msgid "Open"
+msgstr ""
+
+msgid "Open Documentation"
+msgstr ""
+
+msgid "Open Selection"
+msgstr ""
+
+msgid "Open comment type dropdown"
+msgstr ""
+
+msgid "Open errors"
+msgstr ""
+
+msgid "Open in Xcode"
+msgstr ""
+
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
+msgid "Open projects"
+msgstr ""
+
+msgid "Open raw"
+msgstr ""
+
+msgid "Open sidebar"
+msgstr ""
+
+msgid "Open source software to collaborate on code"
+msgstr ""
+
+msgid "Opened"
+msgstr ""
+
+msgid "Opened MR"
+msgstr ""
+
+msgid "Opened issues"
+msgstr ""
+
+msgid "OpenedNDaysAgo|Opened"
+msgstr ""
+
+msgid "Opens in a new window"
+msgstr ""
+
+msgid "Operation failed. Check pod logs for %{pod_name} for more details."
+msgstr ""
+
+msgid "Operation timed out. Check pod logs for %{pod_name} for more details."
+msgstr ""
+
+msgid "Operations"
+msgstr ""
+
+msgid "Operations Dashboard"
+msgstr ""
+
+msgid "Operations Settings"
+msgstr ""
+
+msgid "OperationsDashboard|Add a project to the dashboard"
+msgstr ""
+
+msgid "OperationsDashboard|Add projects"
+msgstr ""
+
+msgid "OperationsDashboard|More information"
+msgstr ""
+
+msgid "OperationsDashboard|Operations Dashboard"
+msgstr ""
+
+msgid "OperationsDashboard|The operations dashboard provides a summary of each project's operational health, including pipeline and alert statuses."
+msgstr ""
+
+msgid "Optional"
+msgstr ""
+
+msgid "Optionally, you can %{link_to_customize} how FogBugz email addresses and usernames are imported into GitLab."
+msgstr ""
+
+msgid "Optionally, you can %{link_to_customize} how Google Code email addresses and usernames are imported into GitLab."
+msgstr ""
+
+msgid "Options"
+msgstr ""
+
+msgid "Or you can choose one of the suggested colors below"
+msgstr ""
+
+msgid "Other Labels"
+msgstr ""
+
+msgid "Other information"
+msgstr ""
+
+msgid "Other merge requests block this MR"
+msgstr ""
+
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
+msgid "Outbound requests"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Overwrite diverged branches"
+msgstr ""
+
+msgid "Owned by anyone"
+msgstr ""
+
+msgid "Owned by me"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Package information"
+msgstr ""
+
+msgid "Package was removed"
+msgstr ""
+
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
+msgid "Packages"
+msgstr ""
+
+msgid "Page not found"
+msgstr ""
+
+msgid "Page was successfully deleted"
+msgstr ""
+
+msgid "Pages"
+msgstr ""
+
+msgid "Pages Domain"
+msgstr ""
+
+msgid "Pages Domains"
+msgstr ""
+
+msgid "Pages getting started guide"
+msgstr ""
+
+msgid "Pagination|Go to first page"
+msgstr ""
+
+msgid "Pagination|Go to last page"
+msgstr ""
+
+msgid "Pagination|Go to next page"
+msgstr ""
+
+msgid "Pagination|Go to previous page"
+msgstr ""
+
+msgid "Pagination|Last »"
+msgstr ""
+
+msgid "Pagination|Next ›"
+msgstr ""
+
+msgid "Pagination|« First"
+msgstr ""
+
+msgid "Pagination|‹ Prev"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+msgid "Part of merge request changes"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Password (optional)"
+msgstr ""
+
+msgid "Password authentication is unavailable."
+msgstr ""
+
+msgid "Password confirmation"
+msgstr ""
+
+msgid "Password successfully changed"
+msgstr ""
+
+msgid "Password was successfully updated. Please login with it"
+msgstr ""
+
+msgid "Past due"
+msgstr ""
+
+msgid "Paste a machine public key here. Read more about how to generate it %{link_start}here%{link_end}"
+msgstr ""
+
+msgid "Paste epic link"
+msgstr ""
+
+msgid "Paste issue link"
+msgstr ""
+
+msgid "Paste your public SSH key, which is usually contained in the file '~/.ssh/id_ed25519.pub' or '~/.ssh/id_rsa.pub' and begins with 'ssh-ed25519' or 'ssh-rsa'. Don't use your private SSH key."
+msgstr ""
+
+msgid "Path"
+msgstr ""
+
+msgid "Path, transfer, remove"
+msgstr ""
+
+msgid "Path:"
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pause replication"
+msgstr ""
+
+msgid "Paused Runners don't accept new jobs"
+msgstr ""
+
+msgid "Pending"
+msgstr ""
+
+msgid "People without permission will never get a notification and won't be able to comment."
+msgstr ""
+
+msgid "People without permission will never get a notification."
+msgstr ""
+
+msgid "Perform advanced options such as changing path, transferring, or removing the group."
+msgstr ""
+
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
+msgid "Performance optimization"
+msgstr ""
+
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
+msgid "Permissions"
+msgstr ""
+
+msgid "Permissions Help"
+msgstr ""
+
+msgid "Permissions, LFS, 2FA"
+msgstr ""
+
+msgid "Personal Access Token"
+msgstr ""
+
+msgid "Personal project creation is not allowed. Please contact your administrator with questions"
+msgstr ""
+
+msgid "Phabricator Server Import"
+msgstr ""
+
+msgid "Phabricator Server URL"
+msgstr ""
+
+msgid "Phabricator Tasks"
+msgstr ""
+
+msgid "Pick a name"
+msgstr ""
+
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
+msgid "Pin code"
+msgstr ""
+
+msgid "Pipeline"
+msgstr ""
+
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
+msgid "Pipeline Schedule"
+msgstr ""
+
+msgid "Pipeline Schedules"
+msgstr ""
+
+msgid "Pipeline minutes quota"
+msgstr ""
+
+msgid "Pipeline quota"
+msgstr ""
+
+msgid "Pipeline triggers"
+msgstr ""
+
+msgid "Pipeline: %{status}"
+msgstr ""
+
+msgid "PipelineCharts|Failed:"
+msgstr ""
+
+msgid "PipelineCharts|Overall statistics"
+msgstr ""
+
+msgid "PipelineCharts|Success ratio:"
+msgstr ""
+
+msgid "PipelineCharts|Successful:"
+msgstr ""
+
+msgid "PipelineCharts|Total:"
+msgstr ""
+
+msgid "PipelineSchedules|Activated"
+msgstr ""
+
+msgid "PipelineSchedules|Active"
+msgstr ""
+
+msgid "PipelineSchedules|All"
+msgstr ""
+
+msgid "PipelineSchedules|Inactive"
+msgstr ""
+
+msgid "PipelineSchedules|Next Run"
+msgstr ""
+
+msgid "PipelineSchedules|None"
+msgstr ""
+
+msgid "PipelineSchedules|Provide a short description for this pipeline"
+msgstr ""
+
+msgid "PipelineSchedules|Take ownership"
+msgstr ""
+
+msgid "PipelineSchedules|Target"
+msgstr ""
+
+msgid "PipelineSchedules|Variables"
+msgstr ""
+
+msgid "PipelineSheduleIntervalPattern|Custom"
+msgstr ""
+
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
+msgstr ""
+
+msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
+msgstr ""
+
+msgid "Pipelines"
+msgstr ""
+
+msgid "Pipelines charts"
+msgstr ""
+
+msgid "Pipelines emails"
+msgstr ""
+
+msgid "Pipelines for last month"
+msgstr ""
+
+msgid "Pipelines for last week"
+msgstr ""
+
+msgid "Pipelines for last year"
+msgstr ""
+
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
+msgid "Pipelines settings for '%{project_name}' were successfully updated."
+msgstr ""
+
+msgid "Pipelines| to purchase more minutes."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
+msgid "Pipelines|API"
+msgstr ""
+
+msgid "Pipelines|Build with confidence"
+msgstr ""
+
+msgid "Pipelines|CI Lint"
+msgstr ""
+
+msgid "Pipelines|Clear Runner Caches"
+msgstr ""
+
+msgid "Pipelines|Continuous Integration can help catch bugs by running your tests automatically, while Continuous Deployment can help you deliver code to your product environment."
+msgstr ""
+
+msgid "Pipelines|Get started with Pipelines"
+msgstr ""
+
+msgid "Pipelines|Loading Pipelines"
+msgstr ""
+
+msgid "Pipelines|Pipelines will not run anymore on shared Runners."
+msgstr ""
+
+msgid "Pipelines|Project cache successfully reset."
+msgstr ""
+
+msgid "Pipelines|Run Pipeline"
+msgstr ""
+
+msgid "Pipelines|Something went wrong while cleaning runners cache."
+msgstr ""
+
+msgid "Pipelines|There are currently no %{scope} pipelines."
+msgstr ""
+
+msgid "Pipelines|There are currently no pipelines."
+msgstr ""
+
+msgid "Pipelines|There was an error fetching the pipelines. Try again in a few moments or contact your support team."
+msgstr ""
+
+msgid "Pipelines|This project is not currently set up to run pipelines."
+msgstr ""
+
+msgid "Pipeline|Commit"
+msgstr ""
+
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
+msgid "Pipeline|Coverage"
+msgstr ""
+
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
+msgid "Pipeline|Duration"
+msgstr ""
+
+msgid "Pipeline|Existing branch name or tag"
+msgstr ""
+
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
+msgid "Pipeline|Pipeline"
+msgstr ""
+
+msgid "Pipeline|Run Pipeline"
+msgstr ""
+
+msgid "Pipeline|Run for"
+msgstr ""
+
+msgid "Pipeline|Search branches"
+msgstr ""
+
+msgid "Pipeline|Specify variable values to be used in this run. The values specified in %{settings_link} will be used by default."
+msgstr ""
+
+msgid "Pipeline|Stages"
+msgstr ""
+
+msgid "Pipeline|Status"
+msgstr ""
+
+msgid "Pipeline|Stop pipeline"
+msgstr ""
+
+msgid "Pipeline|Stop pipeline #%{pipelineId}?"
+msgstr ""
+
+msgid "Pipeline|Triggerer"
+msgstr ""
+
+msgid "Pipeline|Value"
+msgstr ""
+
+msgid "Pipeline|Variables"
+msgstr ""
+
+msgid "Pipeline|You’re about to stop pipeline %{pipelineId}."
+msgstr ""
+
+msgid "Pipeline|all"
+msgstr ""
+
+msgid "Pipeline|for"
+msgstr ""
+
+msgid "Pipeline|on"
+msgstr ""
+
+msgid "Pipeline|success"
+msgstr ""
+
+msgid "Pipeline|with stage"
+msgstr ""
+
+msgid "Pipeline|with stages"
+msgstr ""
+
+msgid "PivotalTrackerService|Comma-separated list of branches which will be automatically inspected. Leave blank to include all branches."
+msgstr ""
+
+msgid "PivotalTrackerService|Pivotal Tracker API token."
+msgstr ""
+
+msgid "PivotalTrackerService|Project Management Software (Source Commits Endpoint)"
+msgstr ""
+
+msgid "Plain diff"
+msgstr ""
+
+msgid "PlantUML"
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Play all manual"
+msgstr ""
+
+msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
+msgstr ""
+
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
+msgid "Please accept the Terms of Service before continuing."
+msgstr ""
+
+msgid "Please add a comment in the text area above"
+msgstr ""
+
+msgid "Please add a list to your board first"
+msgstr ""
+
+msgid "Please check the configuration file for this chart"
+msgstr ""
+
+msgid "Please check the configuration file to ensure that a collection of charts has been declared."
+msgstr ""
+
+msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
+msgstr ""
+
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
+msgid "Please choose a group URL with no special characters."
+msgstr ""
+
+msgid "Please complete your profile with email address"
+msgstr ""
+
+msgid "Please convert them to %{link_to_git}, and go through the %{link_to_import_flow} again."
+msgstr ""
+
+msgid "Please convert them to Git on Google Code, and go through the %{link_to_import_flow} again."
+msgstr ""
+
+msgid "Please create a password for your new account."
+msgstr ""
+
+msgid "Please create a username with only alphanumeric characters."
+msgstr ""
+
+msgid "Please enable and migrate to hashed storage to avoid security issues and ensure data integrity. %{migrate_link}"
+msgstr ""
+
+msgid "Please enter a non-negative number"
+msgstr ""
+
+msgid "Please enter a number greater than %{number} (from the project settings)"
+msgstr ""
+
+msgid "Please enter a valid number"
+msgstr ""
+
+msgid "Please enter or upload a license."
+msgstr ""
+
+msgid "Please fill in a descriptive name for your group."
+msgstr ""
+
+msgid "Please migrate all existing projects to hashed storage to avoid security issues and ensure data integrity. %{migrate_link}"
+msgstr ""
+
+msgid "Please note that this application is not provided by GitLab and you should verify its authenticity before allowing access."
+msgstr ""
+
+msgid "Please provide a name"
+msgstr ""
+
+msgid "Please provide a valid email address."
+msgstr ""
+
+msgid "Please retype the email address."
+msgstr ""
+
+msgid "Please select a file"
+msgstr ""
+
+msgid "Please select a group."
+msgstr ""
+
+msgid "Please select and add a member"
+msgstr ""
+
+msgid "Please select at least one filter to see results"
+msgstr ""
+
+msgid "Please set a new password before proceeding."
+msgstr ""
+
+msgid "Please solve the reCAPTCHA"
+msgstr ""
+
+msgid "Please try again"
+msgstr ""
+
+msgid "Please upgrade PostgreSQL to version 9.6 or greater. The status of the replication cannot be determined reliably with the current version."
+msgstr ""
+
+msgid "Please use this form to report to the admin users who create spam issues, comments or behave inappropriately."
+msgstr ""
+
+msgid "Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "Please wait while we connect to your repository. Refresh at will."
+msgstr ""
+
+msgid "Please wait while we import the repository for you. Refresh at will."
+msgstr ""
+
+msgid "Pods in use"
+msgstr ""
+
+msgid "Preferences"
+msgstr ""
+
+msgid "Preferences saved."
+msgstr ""
+
+msgid "Preferences|Behavior"
+msgstr ""
+
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
+msgstr ""
+
+msgid "Preferences|Choose what content you want to see on a project’s overview page."
+msgstr ""
+
+msgid "Preferences|Customize the appearance of the application header and navigation sidebar."
+msgstr ""
+
+msgid "Preferences|Default dashboard"
+msgstr ""
+
+msgid "Preferences|Display time in 24-hour format"
+msgstr ""
+
+msgid "Preferences|For example: 30 mins ago."
+msgstr ""
+
+msgid "Preferences|Layout width"
+msgstr ""
+
+msgid "Preferences|Navigation theme"
+msgstr ""
+
+msgid "Preferences|Project overview content"
+msgstr ""
+
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
+msgid "Preferences|Syntax highlighting theme"
+msgstr ""
+
+msgid "Preferences|These settings will update how dates and times are displayed for you."
+msgstr ""
+
+msgid "Preferences|This feature is experimental and translations are not complete yet"
+msgstr ""
+
+msgid "Preferences|This setting allows you to customize the appearance of the syntax."
+msgstr ""
+
+msgid "Preferences|This setting allows you to customize the behavior of the system layout and default views."
+msgstr ""
+
+msgid "Preferences|Time display"
+msgstr ""
+
+msgid "Preferences|Time format"
+msgstr ""
+
+msgid "Preferences|Time preferences"
+msgstr ""
+
+msgid "Preferences|Use relative times"
+msgstr ""
+
+msgid "Press %{key}-C to copy"
+msgstr ""
+
+msgid "Press Enter or click to search"
+msgstr ""
+
+msgid "Prevent adding new members to project membership within this group"
+msgstr ""
+
+msgid "Prevent approval of merge requests by merge request author"
+msgstr ""
+
+msgid "Prevent approval of merge requests by merge request committers"
+msgstr ""
+
+msgid "Preview"
+msgstr ""
+
+msgid "Preview Markdown"
+msgstr ""
+
+msgid "Preview changes"
+msgstr ""
+
+msgid "Preview payload"
+msgstr ""
+
+msgid "Previous Artifacts"
+msgstr ""
+
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
+msgid "Primary"
+msgstr ""
+
+msgid "Prioritize"
+msgstr ""
+
+msgid "Prioritize label"
+msgstr ""
+
+msgid "Prioritized Labels"
+msgstr ""
+
+msgid "Prioritized label"
+msgstr ""
+
+msgid "Private"
+msgstr ""
+
+msgid "Private - Project access must be granted explicitly to each user."
+msgstr ""
+
+msgid "Private - The group and its projects can only be viewed by members."
+msgstr ""
+
+msgid "Private group(s)"
+msgstr ""
+
+msgid "Private profile"
+msgstr ""
+
+msgid "Private projects can be created in your personal namespace with:"
+msgstr ""
+
+msgid "Proceed"
+msgstr ""
+
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
+msgid "Profile"
+msgstr ""
+
+msgid "Profile Settings"
+msgstr ""
+
+msgid "ProfileSession|on"
+msgstr ""
+
+msgid "Profiles| You are about to permanently delete %{yourAccount}, and all of the issues, merge requests, and groups linked to your account. Once you confirm %{deleteAccount}, it cannot be undone or recovered."
+msgstr ""
+
+msgid "Profiles| You are going to change the username %{currentUsernameBold} to %{newUsernameBold}. Profile and projects will be redirected to the %{newUsername} namespace but this redirect will expire once the %{currentUsername} namespace is registered by another user or group. Please update your Git repository remotes as soon as possible."
+msgstr ""
+
+msgid "Profiles|@username"
+msgstr ""
+
+msgid "Profiles|Account scheduled for removal."
+msgstr ""
+
+msgid "Profiles|Activate signin with one of the following services"
+msgstr ""
+
+msgid "Profiles|Active"
+msgstr ""
+
+msgid "Profiles|Add key"
+msgstr ""
+
+msgid "Profiles|Add status emoji"
+msgstr ""
+
+msgid "Profiles|Avatar cropper"
+msgstr ""
+
+msgid "Profiles|Avatar will be removed. Are you sure?"
+msgstr ""
+
+msgid "Profiles|Bio"
+msgstr ""
+
+msgid "Profiles|Change username"
+msgstr ""
+
+msgid "Profiles|Changing your username can have unintended side effects."
+msgstr ""
+
+msgid "Profiles|Choose file..."
+msgstr ""
+
+msgid "Profiles|Choose to show contributions of private projects on your public profile without any project, repository or organization information"
+msgstr ""
+
+msgid "Profiles|City, country"
+msgstr ""
+
+msgid "Profiles|Clear status"
+msgstr ""
+
+msgid "Profiles|Click on icon to activate signin with one of the following services"
+msgstr ""
+
+msgid "Profiles|Commit email"
+msgstr ""
+
+msgid "Profiles|Connect"
+msgstr ""
+
+msgid "Profiles|Connected Accounts"
+msgstr ""
+
+msgid "Profiles|Current path: %{path}"
+msgstr ""
+
+msgid "Profiles|Current status"
+msgstr ""
+
+msgid "Profiles|Default notification email"
+msgstr ""
+
+msgid "Profiles|Delete Account"
+msgstr ""
+
+msgid "Profiles|Delete account"
+msgstr ""
+
+msgid "Profiles|Delete your account?"
+msgstr ""
+
+msgid "Profiles|Deleting an account has the following effects:"
+msgstr ""
+
+msgid "Profiles|Disconnect"
+msgstr ""
+
+msgid "Profiles|Do not show on profile"
+msgstr ""
+
+msgid "Profiles|Don't display activity-related personal information on your profiles"
+msgstr ""
+
+msgid "Profiles|Edit Profile"
+msgstr ""
+
+msgid "Profiles|Enter your name, so people you know can recognize you"
+msgstr ""
+
+msgid "Profiles|Feed token was successfully reset"
+msgstr ""
+
+msgid "Profiles|Full name"
+msgstr ""
+
+msgid "Profiles|Impersonation"
+msgstr ""
+
+msgid "Profiles|Include private contributions on my profile"
+msgstr ""
+
+msgid "Profiles|Incoming email token was successfully reset"
+msgstr ""
+
+msgid "Profiles|Increase your account's security by enabling Two-Factor Authentication (2FA)"
+msgstr ""
+
+msgid "Profiles|Invalid password"
+msgstr ""
+
+msgid "Profiles|Invalid username"
+msgstr ""
+
+msgid "Profiles|Key"
+msgstr ""
+
+msgid "Profiles|Learn more"
+msgstr ""
+
+msgid "Profiles|Location"
+msgstr ""
+
+msgid "Profiles|Made a private contribution"
+msgstr ""
+
+msgid "Profiles|Main settings"
+msgstr ""
+
+msgid "Profiles|No file chosen"
+msgstr ""
+
+msgid "Profiles|Notification email"
+msgstr ""
+
+msgid "Profiles|Organization"
+msgstr ""
+
+msgid "Profiles|Path"
+msgstr ""
+
+msgid "Profiles|Personal Access"
+msgstr ""
+
+msgid "Profiles|Position and size your new avatar"
+msgstr ""
+
+msgid "Profiles|Primary email"
+msgstr ""
+
+msgid "Profiles|Private contributions"
+msgstr ""
+
+msgid "Profiles|Profile was successfully updated"
+msgstr ""
+
+msgid "Profiles|Public Avatar"
+msgstr ""
+
+msgid "Profiles|Public email"
+msgstr ""
+
+msgid "Profiles|Remove avatar"
+msgstr ""
+
+msgid "Profiles|Set new profile picture"
+msgstr ""
+
+msgid "Profiles|Social sign-in"
+msgstr ""
+
+msgid "Profiles|Some options are unavailable for LDAP accounts"
+msgstr ""
+
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
+msgid "Profiles|Tell us about yourself in fewer than 250 characters"
+msgstr ""
+
+msgid "Profiles|The maximum file size allowed is 200KB."
+msgstr ""
+
+msgid "Profiles|This doesn't look like a public SSH key, are you sure you want to add it?"
+msgstr ""
+
+msgid "Profiles|This email will be displayed on your public profile"
+msgstr ""
+
+msgid "Profiles|This email will be used for web based operations, such as edits and merges. %{commit_email_link_start}Learn more%{commit_email_link_end}"
+msgstr ""
+
+msgid "Profiles|This emoji and message will appear on your profile and throughout the interface."
+msgstr ""
+
+msgid "Profiles|This information will appear on your profile"
+msgstr ""
+
+msgid "Profiles|Time settings"
+msgstr ""
+
+msgid "Profiles|Two-Factor Authentication"
+msgstr ""
+
+msgid "Profiles|Type your %{confirmationValue} to confirm:"
+msgstr ""
+
+msgid "Profiles|Typically starts with \"ssh-ed25519 …\" or \"ssh-rsa …\""
+msgstr ""
+
+msgid "Profiles|Update profile settings"
+msgstr ""
+
+msgid "Profiles|Update username"
+msgstr ""
+
+msgid "Profiles|Upload new avatar"
+msgstr ""
+
+msgid "Profiles|Use a private email - %{email}"
+msgstr ""
+
+msgid "Profiles|User ID"
+msgstr ""
+
+msgid "Profiles|Username change failed - %{message}"
+msgstr ""
+
+msgid "Profiles|Username successfully changed"
+msgstr ""
+
+msgid "Profiles|Using emojis in names seems fun, but please try to set a status message instead"
+msgstr ""
+
+msgid "Profiles|What's your status?"
+msgstr ""
+
+msgid "Profiles|Who you represent or work for"
+msgstr ""
+
+msgid "Profiles|You can change your avatar here"
+msgstr ""
+
+msgid "Profiles|You can change your avatar here or remove the current avatar to revert to %{gravatar_link}"
+msgstr ""
+
+msgid "Profiles|You can set your current timezone here"
+msgstr ""
+
+msgid "Profiles|You can upload your avatar here"
+msgstr ""
+
+msgid "Profiles|You can upload your avatar here or change it at %{gravatar_link}"
+msgstr ""
+
+msgid "Profiles|You don't have access to delete this user."
+msgstr ""
+
+msgid "Profiles|You must transfer ownership or delete these groups before you can delete your account."
+msgstr ""
+
+msgid "Profiles|Your LinkedIn profile name from linkedin.com/in/profilename"
+msgstr ""
+
+msgid "Profiles|Your account is currently an owner in these groups:"
+msgstr ""
+
+msgid "Profiles|Your email address was automatically set based on your %{provider_label} account"
+msgstr ""
+
+msgid "Profiles|Your location was automatically set based on your %{provider_label} account"
+msgstr ""
+
+msgid "Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you"
+msgstr ""
+
+msgid "Profiles|Your status"
+msgstr ""
+
+msgid "Profiles|e.g. My MacBook key"
+msgstr ""
+
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
+msgid "Profiles|username"
+msgstr ""
+
+msgid "Profiles|website.com"
+msgstr ""
+
+msgid "Profiles|your account"
+msgstr ""
+
+msgid "Profiling - Performance bar"
+msgstr ""
+
+msgid "Programming languages used in this repository"
+msgstr ""
+
+msgid "Progress"
+msgstr ""
+
+msgid "Project"
+msgstr ""
+
+msgid "Project \"%{name}\" is no longer available. Select another project to continue."
+msgstr ""
+
+msgid "Project %{project_repo} could not be found"
+msgstr ""
+
+msgid "Project '%{project_name}' is being imported."
+msgstr ""
+
+msgid "Project '%{project_name}' is in the process of being deleted."
+msgstr ""
+
+msgid "Project '%{project_name}' queued for deletion."
+msgstr ""
+
+msgid "Project '%{project_name}' was successfully created."
+msgstr ""
+
+msgid "Project '%{project_name}' was successfully updated."
+msgstr ""
+
+msgid "Project Badges"
+msgstr ""
+
+msgid "Project Files"
+msgstr ""
+
+msgid "Project ID"
+msgstr ""
+
+msgid "Project URL"
+msgstr ""
+
+msgid "Project access must be granted explicitly to each user."
+msgstr ""
+
+msgid "Project already created"
+msgstr ""
+
+msgid "Project and wiki repositories"
+msgstr ""
+
+msgid "Project avatar"
+msgstr ""
+
+msgid "Project cannot be shared with the group it is in or one of its ancestors."
+msgstr ""
+
+msgid "Project configuration, including services"
+msgstr ""
+
+msgid "Project description (optional)"
+msgstr ""
+
+msgid "Project details"
+msgstr ""
+
+msgid "Project export could not be deleted."
+msgstr ""
+
+msgid "Project export enabled"
+msgstr ""
+
+msgid "Project export has been deleted."
+msgstr ""
+
+msgid "Project export link has expired. Please generate a new export from your project settings."
+msgstr ""
+
+msgid "Project export started. A download link will be sent by email."
+msgstr ""
+
+msgid "Project has too many %{label_for_message} to search"
+msgstr ""
+
+msgid "Project members"
+msgstr ""
+
+msgid "Project name"
+msgstr ""
+
+msgid "Project slug"
+msgstr ""
+
+msgid "Project uploads"
+msgstr ""
+
+msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
+msgstr ""
+
+msgid "Project: %{name}"
+msgstr ""
+
+msgid "ProjectActivityRSS|Subscribe"
+msgstr ""
+
+msgid "ProjectCreationLevel|Allowed to create projects"
+msgstr ""
+
+msgid "ProjectCreationLevel|Default project creation protection"
+msgstr ""
+
+msgid "ProjectCreationLevel|Developers + Maintainers"
+msgstr ""
+
+msgid "ProjectCreationLevel|Maintainers"
+msgstr ""
+
+msgid "ProjectCreationLevel|No one"
+msgstr ""
+
+msgid "ProjectFileTree|Name"
+msgstr ""
+
+msgid "ProjectLastActivity|Never"
+msgstr ""
+
+msgid "ProjectLifecycle|Stage"
+msgstr ""
+
+msgid "ProjectOverview|Fork"
+msgstr ""
+
+msgid "ProjectOverview|Forks"
+msgstr ""
+
+msgid "ProjectOverview|Go to your fork"
+msgstr ""
+
+msgid "ProjectOverview|Star"
+msgstr ""
+
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
+msgid "ProjectOverview|Unstar"
+msgstr ""
+
+msgid "ProjectOverview|You have reached your project limit"
+msgstr ""
+
+msgid "ProjectOverview|You must sign in to star a project"
+msgstr ""
+
+msgid "ProjectPage|Project ID: %{project_id}"
+msgstr ""
+
+msgid "ProjectSelect| or group"
+msgstr ""
+
+msgid "ProjectSelect|Search for project"
+msgstr ""
+
+msgid "ProjectService|%{service_title}: status off"
+msgstr ""
+
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
+msgstr ""
+
+msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
+msgstr ""
+
+msgid "ProjectSettings|Badges"
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
+msgid "ProjectSettings|Contact an admin to change this setting."
+msgstr ""
+
+msgid "ProjectSettings|Customize your project badges."
+msgstr ""
+
+msgid "ProjectSettings|Every merge creates a merge commit"
+msgstr ""
+
+msgid "ProjectSettings|Failed to protect the tag"
+msgstr ""
+
+msgid "ProjectSettings|Failed to update tag!"
+msgstr ""
+
+msgid "ProjectSettings|Fast-forward merge"
+msgstr ""
+
+msgid "ProjectSettings|Fast-forward merges only"
+msgstr ""
+
+msgid "ProjectSettings|Learn more about badges."
+msgstr ""
+
+msgid "ProjectSettings|Merge checks"
+msgstr ""
+
+msgid "ProjectSettings|Merge commit"
+msgstr ""
+
+msgid "ProjectSettings|Merge commit with semi-linear history"
+msgstr ""
+
+msgid "ProjectSettings|Merge method"
+msgstr ""
+
+msgid "ProjectSettings|Merge options"
+msgstr ""
+
+msgid "ProjectSettings|Merge pipelines will try to validate the post-merge result prior to merging"
+msgstr ""
+
+msgid "ProjectSettings|No merge commits are created"
+msgstr ""
+
+msgid "ProjectSettings|Only signed commits can be pushed to this repository."
+msgstr ""
+
+msgid "ProjectSettings|Pipelines must succeed"
+msgstr ""
+
+msgid "ProjectSettings|Pipelines need to be configured to enable this feature."
+msgstr ""
+
+msgid "ProjectSettings|Show link to create/view merge request when pushing from the command line"
+msgstr ""
+
+msgid "ProjectSettings|These checks must pass before merge requests can be merged"
+msgstr ""
+
+msgid "ProjectSettings|This setting is applied on the server level and can be overridden by an admin."
+msgstr ""
+
+msgid "ProjectSettings|This setting is applied on the server level but has been overridden for this project."
+msgstr ""
+
+msgid "ProjectSettings|This setting will be applied to all projects unless overridden by an admin."
+msgstr ""
+
+msgid "ProjectSettings|This will dictate the commit history when you merge a merge request"
+msgstr ""
+
+msgid "ProjectSettings|Users can only push commits to this repository that were committed with one of their own verified emails."
+msgstr ""
+
+msgid "ProjectSettings|When conflicts arise the user is given the option to rebase"
+msgstr ""
+
+msgid "ProjectTemplates|.NET Core"
+msgstr ""
+
+msgid "ProjectTemplates|Android"
+msgstr ""
+
+msgid "ProjectTemplates|Go Micro"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/GitBook"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Hexo"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Hugo"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Jekyll"
+msgstr ""
+
+msgid "ProjectTemplates|Netlify/Plain HTML"
+msgstr ""
+
+msgid "ProjectTemplates|NodeJS Express"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/GitBook"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Hexo"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Hugo"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Jekyll"
+msgstr ""
+
+msgid "ProjectTemplates|Pages/Plain HTML"
+msgstr ""
+
+msgid "ProjectTemplates|Ruby on Rails"
+msgstr ""
+
+msgid "ProjectTemplates|Spring"
+msgstr ""
+
+msgid "ProjectTemplates|iOS (Swift)"
+msgstr ""
+
+msgid "Projects"
+msgstr ""
+
+msgid "Projects (%{count})"
+msgstr ""
+
+msgid "Projects Successfully Retrieved"
+msgstr ""
+
+msgid "Projects shared with %{group_name}"
+msgstr ""
+
+msgid "Projects that belong to a group are prefixed with the group namespace. Existing projects may be moved into a group."
+msgstr ""
+
+msgid "Projects to index"
+msgstr ""
+
+msgid "Projects with write access"
+msgstr ""
+
+msgid "ProjectsDropdown|Frequently visited"
+msgstr ""
+
+msgid "ProjectsDropdown|Loading projects"
+msgstr ""
+
+msgid "ProjectsDropdown|Projects you visit often will appear here"
+msgstr ""
+
+msgid "ProjectsDropdown|Search your projects"
+msgstr ""
+
+msgid "ProjectsDropdown|Something went wrong on our end."
+msgstr ""
+
+msgid "ProjectsDropdown|Sorry, no projects matched your search"
+msgstr ""
+
+msgid "ProjectsDropdown|This feature requires browser localStorage support"
+msgstr ""
+
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Edit alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error creating alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error deleting alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error fetching alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Error saving alert"
+msgstr ""
+
+msgid "PrometheusAlerts|Operator"
+msgstr ""
+
+msgid "PrometheusAlerts|Select query"
+msgstr ""
+
+msgid "PrometheusAlerts|Threshold"
+msgstr ""
+
+msgid "PrometheusService|%{exporters} with %{metrics} were found"
+msgstr ""
+
+msgid "PrometheusService|<p class=\"text-tertiary\">No <a href=\"%{docsUrl}\">common metrics</a> were found</p>"
+msgstr ""
+
+msgid "PrometheusService|Active"
+msgstr ""
+
+msgid "PrometheusService|Auto configuration"
+msgstr ""
+
+msgid "PrometheusService|Automatically deploy and configure Prometheus on your clusters to monitor your project’s environments"
+msgstr ""
+
+msgid "PrometheusService|Common metrics"
+msgstr ""
+
+msgid "PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters."
+msgstr ""
+
+msgid "PrometheusService|Custom metrics"
+msgstr ""
+
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
+msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
+msgstr ""
+
+msgid "PrometheusService|Finding and configuring metrics..."
+msgstr ""
+
+msgid "PrometheusService|Finding custom metrics..."
+msgstr ""
+
+msgid "PrometheusService|Install Prometheus on clusters"
+msgstr ""
+
+msgid "PrometheusService|Manage clusters"
+msgstr ""
+
+msgid "PrometheusService|Manual configuration"
+msgstr ""
+
+msgid "PrometheusService|Metrics"
+msgstr ""
+
+msgid "PrometheusService|Missing environment variable"
+msgstr ""
+
+msgid "PrometheusService|More information"
+msgstr ""
+
+msgid "PrometheusService|New metric"
+msgstr ""
+
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
+msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
+msgstr ""
+
+msgid "PrometheusService|Prometheus is being automatically managed on your clusters"
+msgstr ""
+
+msgid "PrometheusService|These metrics will only be monitored after your first deployment to an environment"
+msgstr ""
+
+msgid "PrometheusService|Time-series monitoring service"
+msgstr ""
+
+msgid "PrometheusService|To enable manual configuration, uninstall Prometheus from your clusters"
+msgstr ""
+
+msgid "PrometheusService|To enable the installation of Prometheus on your clusters, deactivate the manual configuration below"
+msgstr ""
+
+msgid "PrometheusService|Waiting for your first deployment to an environment to find common metrics"
+msgstr ""
+
+msgid "Promote"
+msgstr ""
+
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
+msgid "Promote these project milestones into a group milestone."
+msgstr ""
+
+msgid "Promote to Group Milestone"
+msgstr ""
+
+msgid "Promote to group label"
+msgstr ""
+
+msgid "PromoteMilestone|Only project milestones can be promoted."
+msgstr ""
+
+msgid "PromoteMilestone|Project does not belong to a group."
+msgstr ""
+
+msgid "PromoteMilestone|Promotion failed - %{message}"
+msgstr ""
+
+msgid "Promoted issue to an epic."
+msgstr ""
+
+msgid "Promotions|Don't show me this again"
+msgstr ""
+
+msgid "Promotions|Epics let you manage your portfolio of projects more efficiently and with less effort by tracking groups of issues that share a theme, across projects and milestones."
+msgstr ""
+
+msgid "Promotions|This feature is locked."
+msgstr ""
+
+msgid "Promotions|Upgrade plan"
+msgstr ""
+
+msgid "Prompt users to upload SSH keys"
+msgstr ""
+
+msgid "Protected"
+msgstr ""
+
+msgid "Protected Branch"
+msgstr ""
+
+msgid "Protected Environment"
+msgstr ""
+
+msgid "Protected Environments"
+msgstr ""
+
+msgid "Protected Tag"
+msgstr ""
+
+msgid "Protected branches"
+msgstr ""
+
+msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
+msgstr ""
+
+msgid "ProtectedEnvironment|Allowed to deploy"
+msgstr ""
+
+msgid "ProtectedEnvironment|Environment"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protect"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protect an environment"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protected Environment (%{protected_environments_count})"
+msgstr ""
+
+msgid "ProtectedEnvironment|Protecting an environment restricts the users who can execute deployments."
+msgstr ""
+
+msgid "ProtectedEnvironment|Select an environment"
+msgstr ""
+
+msgid "ProtectedEnvironment|Select users"
+msgstr ""
+
+msgid "ProtectedEnvironment|Select users to deploy and manage Feature Flag settings"
+msgstr ""
+
+msgid "ProtectedEnvironment|There are currently no protected environments, protect an environment with the form above."
+msgstr ""
+
+msgid "ProtectedEnvironment|Unprotect"
+msgstr ""
+
+msgid "ProtectedEnvironment|Your environment can't be unprotected"
+msgstr ""
+
+msgid "ProtectedEnvironment|Your environment has been protected."
+msgstr ""
+
+msgid "ProtectedEnvironment|Your environment has been unprotected"
+msgstr ""
+
+msgid "Protip:"
+msgstr ""
+
+msgid "Provider"
+msgstr ""
+
+msgid "Pseudonymizer data collection"
+msgstr ""
+
+msgid "Public"
+msgstr ""
+
+msgid "Public - The group and any public projects can be viewed without any authentication."
+msgstr ""
+
+msgid "Public - The project can be accessed without any authentication."
+msgstr ""
+
+msgid "Public Access Help"
+msgstr ""
+
+msgid "Public deploy keys (%{deploy_keys_count})"
+msgstr ""
+
+msgid "Public pipelines"
+msgstr ""
+
+msgid "Pull"
+msgstr ""
+
+msgid "Purchase more minutes"
+msgstr ""
+
+msgid "Push"
+msgstr ""
+
+msgid "Push Rule updated successfully."
+msgstr ""
+
+msgid "Push Rules"
+msgstr ""
+
+msgid "Push Rules updated successfully."
+msgstr ""
+
+msgid "Push an existing Git repository"
+msgstr ""
+
+msgid "Push an existing folder"
+msgstr ""
+
+msgid "Push events"
+msgstr ""
+
+msgid "Push project from command line"
+msgstr ""
+
+msgid "Push to create a project"
+msgstr ""
+
+msgid "PushRule|Committer restriction"
+msgstr ""
+
+msgid "Pushed"
+msgstr ""
+
+msgid "Pushes"
+msgstr ""
+
+msgid "PushoverService|%{user_name} deleted branch \"%{ref}\"."
+msgstr ""
+
+msgid "PushoverService|%{user_name} push to branch \"%{ref}\"."
+msgstr ""
+
+msgid "PushoverService|%{user_name} pushed new branch \"%{ref}\"."
+msgstr ""
+
+msgid "PushoverService|High Priority"
+msgstr ""
+
+msgid "PushoverService|Leave blank for all active devices"
+msgstr ""
+
+msgid "PushoverService|Low Priority"
+msgstr ""
+
+msgid "PushoverService|Lowest Priority"
+msgstr ""
+
+msgid "PushoverService|Normal Priority"
+msgstr ""
+
+msgid "PushoverService|Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop."
+msgstr ""
+
+msgid "PushoverService|See project %{project_full_name}"
+msgstr ""
+
+msgid "PushoverService|Total commits count: %{total_commits_count}"
+msgstr ""
+
+msgid "PushoverService|Your application key"
+msgstr ""
+
+msgid "PushoverService|Your user key"
+msgstr ""
+
+msgid "Quarters"
+msgstr ""
+
+msgid "Query"
+msgstr ""
+
+msgid "Query is valid"
+msgstr ""
+
+msgid "Quick actions can be used in the issues description and comment boxes."
+msgstr ""
+
+msgid "README"
+msgstr ""
+
+msgid "Rake Tasks Help"
+msgstr ""
+
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
+msgid "Read more"
+msgstr ""
+
+msgid "Read more about environments"
+msgstr ""
+
+msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
+msgstr ""
+
+msgid "Read more about related issues"
+msgstr ""
+
+msgid "Real-time features"
+msgstr ""
+
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
+msgid "Receive alerts from manually configured Prometheus servers."
+msgstr ""
+
+msgid "Receive notifications about your own activity"
+msgstr ""
+
+msgid "Recent"
+msgstr ""
+
+msgid "Recent Activity"
+msgstr ""
+
+msgid "Recent Project Activity"
+msgstr ""
+
+msgid "Recent Searches Service is unavailable"
+msgstr ""
+
+msgid "Recent searches"
+msgstr ""
+
+msgid "Recovery Codes"
+msgstr ""
+
+msgid "Redirect to SAML provider to test configuration"
+msgstr ""
+
+msgid "Reference:"
+msgstr ""
+
+msgid "Refresh"
+msgstr ""
+
+msgid "Refreshing in a second to show the updated status..."
+msgid_plural "Refreshing in %d seconds to show the updated status..."
+msgstr[0] ""
+
+msgid "Regenerate instance ID"
+msgstr ""
+
+msgid "Regenerate key"
+msgstr ""
+
+msgid "Regenerate recovery codes"
+msgstr ""
+
+msgid "Regenerating the instance ID can break integration depending on the client you are using."
+msgstr ""
+
+msgid "Regex pattern"
+msgstr ""
+
+msgid "Register"
+msgstr ""
+
+msgid "Register / Sign In"
+msgstr ""
+
+msgid "Register Two-Factor Authenticator"
+msgstr ""
+
+msgid "Register U2F device"
+msgstr ""
+
+msgid "Register Universal Two-Factor (U2F) Device"
+msgstr ""
+
+msgid "Register and see your runners for this group."
+msgstr ""
+
+msgid "Register and see your runners for this project."
+msgstr ""
+
+msgid "Register with two-factor app"
+msgstr ""
+
+msgid "Registration"
+msgstr ""
+
+msgid "Related Deployed Jobs"
+msgstr ""
+
+msgid "Related Issues"
+msgstr ""
+
+msgid "Related Jobs"
+msgstr ""
+
+msgid "Related Merge Requests"
+msgstr ""
+
+msgid "Related Merged Requests"
+msgstr ""
+
+msgid "Related issues"
+msgstr ""
+
+msgid "Related merge requests"
+msgstr ""
+
+msgid "Releases"
+msgstr ""
+
+msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
+msgstr ""
+
+msgid "Remember me"
+msgstr ""
+
+msgid "Remind later"
+msgstr ""
+
+msgid "Remote object has no absolute path."
+msgstr ""
+
+msgid "Remove"
+msgstr ""
+
+msgid "Remove %{displayReference}"
+msgstr ""
+
+msgid "Remove Runner"
+msgstr ""
+
+msgid "Remove Zoom meeting"
+msgstr ""
+
+msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
+msgstr ""
+
+msgid "Remove all or specific assignee(s)"
+msgstr ""
+
+msgid "Remove all or specific label(s)"
+msgstr ""
+
+msgid "Remove approvers"
+msgstr ""
+
+msgid "Remove approvers?"
+msgstr ""
+
+msgid "Remove assignee"
+msgstr ""
+
+msgid "Remove avatar"
+msgstr ""
+
+msgid "Remove card"
+msgstr ""
+
+msgid "Remove child epic from an epic"
+msgstr ""
+
+msgid "Remove due date"
+msgstr ""
+
+msgid "Remove fork relationship"
+msgstr ""
+
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
+msgid "Remove group"
+msgstr ""
+
+msgid "Remove milestone"
+msgstr ""
+
+msgid "Remove parent epic from an epic"
+msgstr ""
+
+msgid "Remove priority"
+msgstr ""
+
+msgid "Remove project"
+msgstr ""
+
+msgid "Remove spent time"
+msgstr ""
+
+msgid "Remove stage"
+msgstr ""
+
+msgid "Remove time estimate"
+msgstr ""
+
+msgid "Removed"
+msgstr ""
+
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
+msgid "Removed %{type} with id %{id}"
+msgstr ""
+
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
+msgid "Removed group can not be restored!"
+msgstr ""
+
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
+msgid "Removed projects cannot be restored!"
+msgstr ""
+
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removes %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removes %{milestone_reference} milestone."
+msgstr ""
+
+msgid "Removes all labels."
+msgstr ""
+
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
+msgid "Removes spent time."
+msgstr ""
+
+msgid "Removes the due date."
+msgstr ""
+
+msgid "Removes time estimate."
+msgstr ""
+
+msgid "Removing group will cause all child projects and resources to be removed."
+msgstr ""
+
+msgid "Removing license…"
+msgstr ""
+
+msgid "Removing the project will delete its repository and all related resources including issues, merge requests etc."
+msgstr ""
+
+msgid "Rename"
+msgstr ""
+
+msgid "Rename file"
+msgstr ""
+
+msgid "Rename folder"
+msgstr ""
+
+msgid "Reopen epic"
+msgstr ""
+
+msgid "Reopen milestone"
+msgstr ""
+
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
+msgid "Repair authentication"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace all label(s)"
+msgstr ""
+
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
+msgid "Reply to comment"
+msgstr ""
+
+msgid "Reply to this email directly or %{view_it_on_gitlab}."
+msgstr ""
+
+msgid "Reply..."
+msgstr ""
+
+msgid "Repo by URL"
+msgstr ""
+
+msgid "Report abuse to admin"
+msgstr ""
+
+msgid "Reporting"
+msgstr ""
+
+msgid "Reports|%{failedString} and %{resolvedString}"
+msgstr ""
+
+msgid "Reports|Actions"
+msgstr ""
+
+msgid "Reports|Class"
+msgstr ""
+
+msgid "Reports|Classname"
+msgstr ""
+
+msgid "Reports|Confidence"
+msgstr ""
+
+msgid "Reports|Execution time"
+msgstr ""
+
+msgid "Reports|Failure"
+msgstr ""
+
+msgid "Reports|Metrics reports are loading"
+msgstr ""
+
+msgid "Reports|Metrics reports changed on %{numberOfChanges} %{pointsString}"
+msgstr ""
+
+msgid "Reports|Metrics reports did not change"
+msgstr ""
+
+msgid "Reports|Metrics reports failed loading results"
+msgstr ""
+
+msgid "Reports|Severity"
+msgstr ""
+
+msgid "Reports|System output"
+msgstr ""
+
+msgid "Reports|Test summary"
+msgstr ""
+
+msgid "Reports|Test summary failed loading results"
+msgstr ""
+
+msgid "Reports|Test summary results are being parsed"
+msgstr ""
+
+msgid "Reports|Vulnerability"
+msgstr ""
+
+msgid "Reports|no changed test results"
+msgstr ""
+
+msgid "Repository"
+msgstr ""
+
+msgid "Repository Graph"
+msgstr ""
+
+msgid "Repository Settings"
+msgstr ""
+
+msgid "Repository URL"
+msgstr ""
+
+msgid "Repository check was triggered."
+msgstr ""
+
+msgid "Repository cleanup"
+msgstr ""
+
+msgid "Repository cleanup has started. You will receive an email once the cleanup operation is complete."
+msgstr ""
+
+msgid "Repository has no locks."
+msgstr ""
+
+msgid "Repository maintenance"
+msgstr ""
+
+msgid "Repository mirror"
+msgstr ""
+
+msgid "Repository static objects"
+msgstr ""
+
+msgid "Repository storage"
+msgstr ""
+
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
+msgid "RepositorySettingsAccessLevel|Select"
+msgstr ""
+
+msgid "Request Access"
+msgstr ""
+
+msgid "Requested %{time_ago}"
+msgstr ""
+
+msgid "Requests Profiles"
+msgstr ""
+
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
+msgid "Require all users in this group to setup Two-factor authentication"
+msgstr ""
+
+msgid "Require all users to accept Terms of Service and Privacy Policy when they access GitLab."
+msgstr ""
+
+msgid "Require approval from code owners"
+msgstr ""
+
+msgid "Require user password to approve"
+msgstr ""
+
+msgid "Require users to prove ownership of custom domains"
+msgstr ""
+
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
+msgid "Requires approval from %{names}."
+msgid_plural "Requires %{count} more approvals from %{names}."
+msgstr[0] ""
+
+msgid "Requires approval."
+msgid_plural "Requires %d more approvals."
+msgstr[0] ""
+
+msgid "Resend confirmation email"
+msgstr ""
+
+msgid "Resend invite"
+msgstr ""
+
+msgid "Resend it"
+msgstr ""
+
+msgid "Reset authorization key"
+msgstr ""
+
+msgid "Reset authorization key?"
+msgstr ""
+
+msgid "Reset health check access token"
+msgstr ""
+
+msgid "Reset key"
+msgstr ""
+
+msgid "Reset runners registration token"
+msgstr ""
+
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
+msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
+msgstr ""
+
+msgid "Resolve all threads in new issue"
+msgstr ""
+
+msgid "Resolve conflicts on source branch"
+msgstr ""
+
+msgid "Resolve discussion"
+msgstr ""
+
+msgid "Resolve thread"
+msgstr ""
+
+msgid "Resolved"
+msgstr ""
+
+msgid "Resolved 1 discussion."
+msgstr ""
+
+msgid "Resolved all discussions."
+msgstr ""
+
+msgid "Resolved by %{name}"
+msgstr ""
+
+msgid "Resolved by %{resolvedByName}"
+msgstr ""
+
+msgid "Resolves IP addresses once and uses them to submit requests"
+msgstr ""
+
+msgid "Response"
+msgstr ""
+
+msgid "Response didn't include `service_desk_address`"
+msgstr ""
+
+msgid "Response metrics (AWS ELB)"
+msgstr ""
+
+msgid "Response metrics (Custom)"
+msgstr ""
+
+msgid "Response metrics (HA Proxy)"
+msgstr ""
+
+msgid "Response metrics (NGINX Ingress VTS)"
+msgstr ""
+
+msgid "Response metrics (NGINX Ingress)"
+msgstr ""
+
+msgid "Response metrics (NGINX)"
+msgstr ""
+
+msgid "Restart Terminal"
+msgstr ""
+
+msgid "Restrict access by IP address"
+msgstr ""
+
+msgid "Restrict membership by email"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Resume replication"
+msgstr ""
+
+msgid "Retry"
+msgstr ""
+
+msgid "Retry this job"
+msgstr ""
+
+msgid "Retry this job in order to create the necessary resources."
+msgstr ""
+
+msgid "Retry update"
+msgstr ""
+
+msgid "Retry verification"
+msgstr ""
+
+msgid "Reveal value"
+msgid_plural "Reveal values"
+msgstr[0] ""
+
+msgid "Reveal values"
+msgstr ""
+
+msgid "Revert this commit"
+msgstr ""
+
+msgid "Revert this merge request"
+msgstr ""
+
+msgid "Review"
+msgstr ""
+
+msgid "Review the process for configuring service providers in your identity provider — in this case, GitLab is the \"service provider\" or \"relying party\"."
+msgstr ""
+
+msgid "Reviewing"
+msgstr ""
+
+msgid "Reviewing (merge request !%{mergeRequestId})"
+msgstr ""
+
+msgid "Revoke"
+msgstr ""
+
+msgid "Revoked impersonation token %{token_name}!"
+msgstr ""
+
+msgid "Revoked personal access token %{personal_access_token_name}!"
+msgstr ""
+
+msgid "RightSidebar|adding a"
+msgstr ""
+
+msgid "RightSidebar|deleting the"
+msgstr ""
+
+msgid "Roadmap"
+msgstr ""
+
+msgid "Rollback"
+msgstr ""
+
+msgid "Run CI/CD pipelines for external repositories"
+msgstr ""
+
+msgid "Run housekeeping"
+msgstr ""
+
+msgid "Run tests against your code live using the Web Terminal"
+msgstr ""
+
+msgid "Run untagged jobs"
+msgstr ""
+
+msgid "Runner cannot be assigned to other projects"
+msgstr ""
+
+msgid "Runner runs jobs from all unassigned projects"
+msgstr ""
+
+msgid "Runner runs jobs from all unassigned projects in its group"
+msgstr ""
+
+msgid "Runner runs jobs from assigned projects"
+msgstr ""
+
+msgid "Runner token"
+msgstr ""
+
+msgid "Runner was not updated."
+msgstr ""
+
+msgid "Runner was successfully updated."
+msgstr ""
+
+msgid "Runner will not receive any new jobs"
+msgstr ""
+
+msgid "Runners"
+msgstr ""
+
+msgid "Runners API"
+msgstr ""
+
+msgid "Runners activated for this project"
+msgstr ""
+
+msgid "Runners can be placed on separate users, servers, and even on your local machine."
+msgstr ""
+
+msgid "Runners can be placed on separate users, servers, even on your local machine."
+msgstr ""
+
+msgid "Runners currently online: %{active_runners_count}"
+msgstr ""
+
+msgid "Runners page"
+msgstr ""
+
+msgid "Runners page."
+msgstr ""
+
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Running…"
+msgstr ""
+
+msgid "Runs a number of housekeeping tasks within the current repository, such as compressing file revisions and removing unreachable objects."
+msgstr ""
+
+msgid "SAML SSO"
+msgstr ""
+
+msgid "SAML SSO for %{group_name}"
+msgstr ""
+
+msgid "SAML for %{group_name}"
+msgstr ""
+
+msgid "SSH Key"
+msgstr ""
+
+msgid "SSH Keys"
+msgstr ""
+
+msgid "SSH Keys Help"
+msgstr ""
+
+msgid "SSH host keys"
+msgstr ""
+
+msgid "SSH keys allow you to establish a secure connection between your computer and GitLab."
+msgstr ""
+
+msgid "SSH public key"
+msgstr ""
+
+msgid "SSL Verification"
+msgstr ""
+
+msgid "Saturday"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Save Changes"
+msgstr ""
+
+msgid "Save anyway"
+msgstr ""
+
+msgid "Save application"
+msgstr ""
+
+msgid "Save changes"
+msgstr ""
+
+msgid "Save changes before testing"
+msgstr ""
+
+msgid "Save comment"
+msgstr ""
+
+msgid "Save password"
+msgstr ""
+
+msgid "Save pipeline schedule"
+msgstr ""
+
+msgid "Save variables"
+msgstr ""
+
+msgid "Saving"
+msgstr ""
+
+msgid "Saving project."
+msgstr ""
+
+msgid "Schedule a new pipeline"
+msgstr ""
+
+msgid "Scheduled"
+msgstr ""
+
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
+msgid "Schedules"
+msgstr ""
+
+msgid "Scheduling"
+msgstr ""
+
+msgid "Scheduling Pipelines"
+msgstr ""
+
+msgid "Scope"
+msgstr ""
+
+msgid "Scope not supported with disabled 'users_search' feature!"
+msgstr ""
+
+msgid "Scoped issue boards"
+msgstr ""
+
+msgid "Scoped label"
+msgstr ""
+
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
+msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
+msgstr ""
+
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
+msgid "Scroll to bottom"
+msgstr ""
+
+msgid "Scroll to top"
+msgstr ""
+
+msgid "Scroll up"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search an environment spec"
+msgstr ""
+
+msgid "Search branches"
+msgstr ""
+
+msgid "Search branches and tags"
+msgstr ""
+
+msgid "Search files"
+msgstr ""
+
+msgid "Search for a LDAP group"
+msgstr ""
+
+msgid "Search for a group"
+msgstr ""
+
+msgid "Search for a user"
+msgstr ""
+
+msgid "Search for projects, issues, etc."
+msgstr ""
+
+msgid "Search forks"
+msgstr ""
+
+msgid "Search groups"
+msgstr ""
+
+msgid "Search merge requests"
+msgstr ""
+
+msgid "Search milestones"
+msgstr ""
+
+msgid "Search or filter results..."
+msgstr ""
+
+msgid "Search or jump to…"
+msgstr ""
+
+msgid "Search project"
+msgstr ""
+
+msgid "Search projects"
+msgstr ""
+
+msgid "Search projects..."
+msgstr ""
+
+msgid "Search users"
+msgstr ""
+
+msgid "Search users or groups"
+msgstr ""
+
+msgid "Search your projects"
+msgstr ""
+
+msgid "SearchAutocomplete|All GitLab"
+msgstr ""
+
+msgid "SearchAutocomplete|Issues I've created"
+msgstr ""
+
+msgid "SearchAutocomplete|Issues assigned to me"
+msgstr ""
+
+msgid "SearchAutocomplete|Merge requests I've created"
+msgstr ""
+
+msgid "SearchAutocomplete|Merge requests assigned to me"
+msgstr ""
+
+msgid "SearchAutocomplete|in all GitLab"
+msgstr ""
+
+msgid "SearchAutocomplete|in this group"
+msgstr ""
+
+msgid "SearchAutocomplete|in this project"
+msgstr ""
+
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
+msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
+msgstr ""
+
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+
+msgid "Seats currently in use"
+msgstr ""
+
+msgid "Seats in license"
+msgstr ""
+
+msgid "Secret"
+msgstr ""
+
+msgid "Security"
+msgstr ""
+
+msgid "Security & Compliance"
+msgstr ""
+
+msgid "Security Dashboard"
+msgstr ""
+
+msgid "Security Dashboard|Error fetching the dashboard data. Please check your network connection and try again."
+msgstr ""
+
+msgid "Security Dashboard|Error fetching the vulnerability counts. Please check your network connection and try again."
+msgstr ""
+
+msgid "Security Dashboard|Error fetching the vulnerability list. Please check your network connection and try again."
+msgstr ""
+
+msgid "Security Dashboard|Issue Created"
+msgstr ""
+
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Create issue"
+msgstr ""
+
+msgid "Security Reports|Dismiss vulnerability"
+msgstr ""
+
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
+msgid "Security Reports|Learn more about setting up your dashboard"
+msgstr ""
+
+msgid "Security Reports|More info"
+msgstr ""
+
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
+msgid "Security Reports|There was an error creating the issue."
+msgstr ""
+
+msgid "Security Reports|There was an error creating the merge request."
+msgstr ""
+
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
+msgid "Security Reports|There was an error dismissing the vulnerability."
+msgstr ""
+
+msgid "Security Reports|There was an error reverting the dismissal."
+msgstr ""
+
+msgid "Security Reports|There was an error reverting this dismissal."
+msgstr ""
+
+msgid "Security Reports|Undo dismiss"
+msgstr ""
+
+msgid "Security Reports|We've found no vulnerabilities for your group"
+msgstr ""
+
+msgid "Security Reports|While it's rare to have no vulnerabilities for your group, it can happen. In any event, we ask that you please double check your settings to make sure you've set up your dashboard correctly."
+msgstr ""
+
+msgid "Security dashboard"
+msgstr ""
+
+msgid "SecurityDashboard| The security dashboard displays the latest security report. Use it to find and fix vulnerabilities."
+msgstr ""
+
+msgid "SecurityDashboard|Confidence"
+msgstr ""
+
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
+msgid "SecurityDashboard|Monitor vulnerabilities in your code"
+msgstr ""
+
+msgid "SecurityDashboard|Pipeline %{pipelineLink} triggered"
+msgstr ""
+
+msgid "SecurityDashboard|Project"
+msgstr ""
+
+msgid "SecurityDashboard|Report type"
+msgstr ""
+
+msgid "SecurityDashboard|Severity"
+msgstr ""
+
+msgid "See metrics"
+msgstr ""
+
+msgid "See the affected projects in the GitLab admin panel"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Select Archive Format"
+msgstr ""
+
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
+msgid "Select Page"
+msgstr ""
+
+msgid "Select a file from the left sidebar to begin editing. Afterwards, you'll be able to commit your changes."
+msgstr ""
+
+msgid "Select a group to invite"
+msgstr ""
+
+msgid "Select a label"
+msgstr ""
+
+msgid "Select a namespace to fork the project"
+msgstr ""
+
+msgid "Select a new namespace"
+msgstr ""
+
+msgid "Select a project"
+msgstr ""
+
+msgid "Select a project to read Insights configuration file"
+msgstr ""
+
+msgid "Select a repository"
+msgstr ""
+
+msgid "Select a template repository"
+msgstr ""
+
+msgid "Select a timezone"
+msgstr ""
+
+msgid "Select all"
+msgstr ""
+
+msgid "Select an existing Kubernetes cluster or create a new one"
+msgstr ""
+
+msgid "Select branch/tag"
+msgstr ""
+
+msgid "Select group or project"
+msgstr ""
+
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
+msgstr ""
+
+msgid "Select project"
+msgstr ""
+
+msgid "Select project and zone to choose machine type"
+msgstr ""
+
+msgid "Select project to choose zone"
+msgstr ""
+
+msgid "Select projects"
+msgstr ""
+
+msgid "Select projects you want to import."
+msgstr ""
+
+msgid "Select source branch"
+msgstr ""
+
+msgid "Select target branch"
+msgstr ""
+
+msgid "Select the branch you want to set as the default for this project. All merge requests and commits will automatically be made against this branch unless you specify a different one."
+msgstr ""
+
+msgid "Select the custom project template source group."
+msgstr ""
+
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
+msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
+msgstr ""
+
+msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
+msgstr ""
+
+msgid "Send a separate email notification to Developers."
+msgstr ""
+
+msgid "Send confirmation email"
+msgstr ""
+
+msgid "Send email"
+msgstr ""
+
+msgid "Send report"
+msgstr ""
+
+msgid "Send usage data"
+msgstr ""
+
+msgid "Sentry API URL"
+msgstr ""
+
+msgid "Sep"
+msgstr ""
+
+msgid "Separate topics with commas."
+msgstr ""
+
+msgid "September"
+msgstr ""
+
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
+msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
+msgstr ""
+
+msgid "Server version"
+msgstr ""
+
+msgid "Serverless"
+msgstr ""
+
+msgid "ServerlessDetails|Function invocation metrics require Prometheus to be installed first."
+msgstr ""
+
+msgid "ServerlessDetails|Install Prometheus"
+msgstr ""
+
+msgid "ServerlessDetails|Invocation metrics loading or not available at this time."
+msgstr ""
+
+msgid "ServerlessDetails|Invocations"
+msgstr ""
+
+msgid "ServerlessDetails|Kubernetes Pods"
+msgstr ""
+
+msgid "ServerlessDetails|More information"
+msgstr ""
+
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
+msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
+msgstr ""
+
+msgid "ServerlessDetails|pod in use"
+msgstr ""
+
+msgid "ServerlessDetails|pods in use"
+msgstr ""
+
+msgid "ServerlessURL|Copy URL to clipboard"
+msgstr ""
+
+msgid "Serverless| In order to start using functions as a service, you must first install Knative on your Kubernetes cluster."
+msgstr ""
+
+msgid "Serverless|Getting started with serverless"
+msgstr ""
+
+msgid "Serverless|If you believe none of these apply, please check back later as the function data may be in the process of becoming available."
+msgstr ""
+
+msgid "Serverless|Install Knative"
+msgstr ""
+
+msgid "Serverless|Learn more about Serverless"
+msgstr ""
+
+msgid "Serverless|No functions available"
+msgstr ""
+
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
+msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
+msgstr ""
+
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
+msgid "Service"
+msgstr ""
+
+msgid "Service Desk"
+msgstr ""
+
+msgid "Service Templates"
+msgstr ""
+
+msgid "Service URL"
+msgstr ""
+
+msgid "Session duration (minutes)"
+msgstr ""
+
+msgid "Session expiration, projects limit and attachment size."
+msgstr ""
+
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Set a default template for issue descriptions."
+msgstr ""
+
+msgid "Set a number of approvals required, the approvers and other approval settings."
+msgstr ""
+
+msgid "Set a password on your account to pull or push via %{protocol}."
+msgstr ""
+
+msgid "Set a template repository for projects in this group"
+msgstr ""
+
+msgid "Set default and restrict visibility levels. Configure import sources and git access protocol."
+msgstr ""
+
+msgid "Set due date"
+msgstr ""
+
+msgid "Set instance-wide template repository"
+msgstr ""
+
+msgid "Set max session time for web terminal."
+msgstr ""
+
+msgid "Set milestone"
+msgstr ""
+
+msgid "Set new password"
+msgstr ""
+
+msgid "Set notification email for abuse reports."
+msgstr ""
+
+msgid "Set parent epic to an epic"
+msgstr ""
+
+msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
+msgstr ""
+
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
+msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
+msgstr ""
+
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
+msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
+msgstr ""
+
+msgid "Set the maximum file size for each job's artifacts"
+msgstr ""
+
+msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
+msgstr ""
+
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
+msgid "Set time estimate"
+msgstr ""
+
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
+msgid "Set up CI/CD"
+msgstr ""
+
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
+msgid "Set up a %{type} Runner manually"
+msgstr ""
+
+msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
+msgstr ""
+
+msgid "Set up new U2F device"
+msgstr ""
+
+msgid "Set up new password"
+msgstr ""
+
+msgid "Set up your project to automatically push and/or pull changes to/from another repository. Branches, tags, and commits will be synced automatically."
+msgstr ""
+
+msgid "Set weight"
+msgstr ""
+
+msgid "Set weight to %{weight}."
+msgstr ""
+
+msgid "SetPasswordToCloneLink|set a password"
+msgstr ""
+
+msgid "SetStatusModal|Add status emoji"
+msgstr ""
+
+msgid "SetStatusModal|Clear status"
+msgstr ""
+
+msgid "SetStatusModal|Edit status"
+msgstr ""
+
+msgid "SetStatusModal|Remove status"
+msgstr ""
+
+msgid "SetStatusModal|Set a status"
+msgstr ""
+
+msgid "SetStatusModal|Set status"
+msgstr ""
+
+msgid "SetStatusModal|Sorry, we weren't able to set your status. Please try again later."
+msgstr ""
+
+msgid "SetStatusModal|What's your status?"
+msgstr ""
+
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
+msgid "Sets the due date to %{due_date}."
+msgstr ""
+
+msgid "Sets the milestone to %{milestone_reference}."
+msgstr ""
+
+msgid "Sets time estimate to %{time_estimate}."
+msgstr ""
+
+msgid "Sets weight to %{weight}."
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Share"
+msgstr ""
+
+msgid "Share the <strong>%{sso_label}</strong> with members so they can sign in to your group through your identity provider"
+msgstr ""
+
+msgid "Shared Runners"
+msgstr ""
+
+msgid "Shared projects"
+msgstr ""
+
+msgid "Shared runners help link"
+msgstr ""
+
+msgid "SharedRunnersMinutesSettings|By resetting the pipeline minutes for this namespace, the currently used minutes will be set to zero."
+msgstr ""
+
+msgid "SharedRunnersMinutesSettings|Reset pipeline minutes"
+msgstr ""
+
+msgid "SharedRunnersMinutesSettings|Reset used pipeline minutes"
+msgstr ""
+
+msgid "Sherlock Transactions"
+msgstr ""
+
+msgid "Should you ever lose your phone or access to your one time password secret, each of these recovery codes can be used one time each to regain access to your account. Please save them in a safe place, or you %{b_start}will%{b_end} lose access to your account."
+msgstr ""
+
+msgid "Show all activity"
+msgstr ""
+
+msgid "Show archived projects"
+msgstr ""
+
+msgid "Show archived projects only"
+msgstr ""
+
+msgid "Show command"
+msgstr ""
+
+msgid "Show comments"
+msgstr ""
+
+msgid "Show comments only"
+msgstr ""
+
+msgid "Show commit description"
+msgstr ""
+
+msgid "Show complete raw log"
+msgstr ""
+
+msgid "Show file browser"
+msgstr ""
+
+msgid "Show latest version"
+msgstr ""
+
+msgid "Show parent pages"
+msgstr ""
+
+msgid "Show parent subgroups"
+msgstr ""
+
+msgid "Show whitespace changes"
+msgstr ""
+
+msgid "Showing %d event"
+msgid_plural "Showing %d events"
+msgstr[0] ""
+
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
+msgid "Side-by-side"
+msgstr ""
+
+msgid "Sidebar|Change weight"
+msgstr ""
+
+msgid "Sidebar|None"
+msgstr ""
+
+msgid "Sidebar|Only numeral characters allowed"
+msgstr ""
+
+msgid "Sidebar|Weight"
+msgstr ""
+
+msgid "Sign in"
+msgstr ""
+
+msgid "Sign in / Register"
+msgstr ""
+
+msgid "Sign in to \"%{group_name}\""
+msgstr ""
+
+msgid "Sign in using smart card"
+msgstr ""
+
+msgid "Sign in via 2FA code"
+msgstr ""
+
+msgid "Sign in with Google"
+msgstr ""
+
+msgid "Sign in with Single Sign-On"
+msgstr ""
+
+msgid "Sign in with smart card"
+msgstr ""
+
+msgid "Sign out"
+msgstr ""
+
+msgid "Sign out & Register"
+msgstr ""
+
+msgid "Sign up"
+msgstr ""
+
+msgid "Sign up was successful! Please confirm your email to sign in."
+msgstr ""
+
+msgid "Sign-in restrictions"
+msgstr ""
+
+msgid "Sign-up restrictions"
+msgstr ""
+
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Username is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "Signed in"
+msgstr ""
+
+msgid "Signed in with %{authentication} authentication"
+msgstr ""
+
+msgid "Signing in using %{label} has been disabled"
+msgstr ""
+
+msgid "Signing in using your %{label} account without a pre-existing GitLab account is not allowed."
+msgstr ""
+
+msgid "Similar issues"
+msgstr ""
+
+msgid "Single or combined queries"
+msgstr ""
+
+msgid "Site ID"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Size and domain settings for static websites"
+msgstr ""
+
+msgid "Size limit per repository (MB)"
+msgstr ""
+
+msgid "Skip this for now"
+msgstr ""
+
+msgid "Slack application"
+msgstr ""
+
+msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
+msgstr ""
+
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
+msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
+msgstr ""
+
+msgid "Smartcard"
+msgstr ""
+
+msgid "Smartcard authentication failed: client certificate header is missing."
+msgstr ""
+
+msgid "Snippet Contents"
+msgstr ""
+
+msgid "Snippets"
+msgstr ""
+
+msgid "SnippetsEmptyState|Explore public snippets"
+msgstr ""
+
+msgid "SnippetsEmptyState|New snippet"
+msgstr ""
+
+msgid "SnippetsEmptyState|No snippets found"
+msgstr ""
+
+msgid "SnippetsEmptyState|Snippets are small pieces of code or notes that you want to keep."
+msgstr ""
+
+msgid "SnippetsEmptyState|There are no snippets to show."
+msgstr ""
+
+msgid "SnippetsEmptyState|They can be either public or private."
+msgstr ""
+
+msgid "Snowplow"
+msgstr ""
+
+msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
+msgstr ""
+
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
+msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
+msgstr ""
+
+msgid "Someone edited this merge request at the same time you did. Please refresh the page to see changes."
+msgstr ""
+
+msgid "Something went wrong on our end"
+msgstr ""
+
+msgid "Something went wrong on our end."
+msgstr ""
+
+msgid "Something went wrong on our end. Please try again!"
+msgstr ""
+
+msgid "Something went wrong on our end. Please try again."
+msgstr ""
+
+msgid "Something went wrong trying to change the confidentiality of this issue"
+msgstr ""
+
+msgid "Something went wrong trying to change the locked state of this %{issuableDisplayName}"
+msgstr ""
+
+msgid "Something went wrong when toggling the button"
+msgstr ""
+
+msgid "Something went wrong while adding your award. Please try again."
+msgstr ""
+
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
+msgid "Something went wrong while applying the suggestion. Please try again."
+msgstr ""
+
+msgid "Something went wrong while closing the %{issuable}. Please try again later"
+msgstr ""
+
+msgid "Something went wrong while deleting the source branch. Please try again."
+msgstr ""
+
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
+msgid "Something went wrong while fetching %{listType} list"
+msgstr ""
+
+msgid "Something went wrong while fetching comments. Please try again."
+msgstr ""
+
+msgid "Something went wrong while fetching group member contributions"
+msgstr ""
+
+msgid "Something went wrong while fetching latest comments."
+msgstr ""
+
+msgid "Something went wrong while fetching related merge requests."
+msgstr ""
+
+msgid "Something went wrong while fetching the environments for this merge request. Please try again."
+msgstr ""
+
+msgid "Something went wrong while fetching the projects."
+msgstr ""
+
+msgid "Something went wrong while fetching the registry list."
+msgstr ""
+
+msgid "Something went wrong while merging this merge request. Please try again."
+msgstr ""
+
+msgid "Something went wrong while reopening the %{issuable}. Please try again later"
+msgstr ""
+
+msgid "Something went wrong while resolving this discussion. Please try again."
+msgstr ""
+
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
+msgid "Something went wrong, unable to add %{project} to dashboard"
+msgstr ""
+
+msgid "Something went wrong, unable to get projects"
+msgstr ""
+
+msgid "Something went wrong, unable to remove project"
+msgstr ""
+
+msgid "Something went wrong, unable to search projects"
+msgstr ""
+
+msgid "Something went wrong. Please try again."
+msgstr ""
+
+msgid "Something went wrong. Try again later."
+msgstr ""
+
+msgid "Sorry, no epics matched your search"
+msgstr ""
+
+msgid "Sorry, no projects matched your search"
+msgstr ""
+
+msgid "Sorry, your filter produced no results"
+msgstr ""
+
+msgid "Sort by"
+msgstr ""
+
+msgid "Sort direction"
+msgstr ""
+
+msgid "SortOptions|Access level, ascending"
+msgstr ""
+
+msgid "SortOptions|Access level, descending"
+msgstr ""
+
+msgid "SortOptions|Created date"
+msgstr ""
+
+msgid "SortOptions|Due date"
+msgstr ""
+
+msgid "SortOptions|Due later"
+msgstr ""
+
+msgid "SortOptions|Due soon"
+msgstr ""
+
+msgid "SortOptions|Expired date"
+msgstr ""
+
+msgid "SortOptions|Label priority"
+msgstr ""
+
+msgid "SortOptions|Largest group"
+msgstr ""
+
+msgid "SortOptions|Largest repository"
+msgstr ""
+
+msgid "SortOptions|Last Contact"
+msgstr ""
+
+msgid "SortOptions|Last created"
+msgstr ""
+
+msgid "SortOptions|Last joined"
+msgstr ""
+
+msgid "SortOptions|Last updated"
+msgstr ""
+
+msgid "SortOptions|Least popular"
+msgstr ""
+
+msgid "SortOptions|Less weight"
+msgstr ""
+
+msgid "SortOptions|Manual"
+msgstr ""
+
+msgid "SortOptions|Milestone due date"
+msgstr ""
+
+msgid "SortOptions|Milestone due later"
+msgstr ""
+
+msgid "SortOptions|Milestone due soon"
+msgstr ""
+
+msgid "SortOptions|More weight"
+msgstr ""
+
+msgid "SortOptions|Most popular"
+msgstr ""
+
+msgid "SortOptions|Most stars"
+msgstr ""
+
+msgid "SortOptions|Name"
+msgstr ""
+
+msgid "SortOptions|Name, ascending"
+msgstr ""
+
+msgid "SortOptions|Name, descending"
+msgstr ""
+
+msgid "SortOptions|Oldest created"
+msgstr ""
+
+msgid "SortOptions|Oldest joined"
+msgstr ""
+
+msgid "SortOptions|Oldest last activity"
+msgstr ""
+
+msgid "SortOptions|Oldest sign in"
+msgstr ""
+
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
+msgid "SortOptions|Oldest updated"
+msgstr ""
+
+msgid "SortOptions|Popularity"
+msgstr ""
+
+msgid "SortOptions|Priority"
+msgstr ""
+
+msgid "SortOptions|Recent last activity"
+msgstr ""
+
+msgid "SortOptions|Recent sign in"
+msgstr ""
+
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
+msgid "SortOptions|Sort direction"
+msgstr ""
+
+msgid "SortOptions|Stars"
+msgstr ""
+
+msgid "SortOptions|Start date"
+msgstr ""
+
+msgid "SortOptions|Start later"
+msgstr ""
+
+msgid "SortOptions|Start soon"
+msgstr ""
+
+msgid "SortOptions|Weight"
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Source (branch or tag)"
+msgstr ""
+
+msgid "Source code"
+msgstr ""
+
+msgid "Source is not available"
+msgstr ""
+
+msgid "Source project cannot be found."
+msgstr ""
+
+msgid "Spam Logs"
+msgstr ""
+
+msgid "Spam and Anti-bot Protection"
+msgstr ""
+
+msgid "Spam log successfully submitted as ham."
+msgstr ""
+
+msgid "Specific Runners"
+msgstr ""
+
+msgid "Specify an e-mail address regex pattern to identify default internal users."
+msgstr ""
+
+msgid "Specify the following URL during the Runner setup:"
+msgstr ""
+
+msgid "Squash commit message"
+msgstr ""
+
+msgid "Squash commits"
+msgstr ""
+
+msgid "Stage"
+msgstr ""
+
+msgid "Stage & Commit"
+msgstr ""
+
+msgid "Stage all changes"
+msgstr ""
+
+msgid "Stage changes"
+msgstr ""
+
+msgid "Staged"
+msgstr ""
+
+msgid "Staged %{type}"
+msgstr ""
+
+msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
+msgstr ""
+
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
+msgid "Star toggle failed. Try again later."
+msgstr ""
+
+msgid "StarProject|Star"
+msgstr ""
+
+msgid "Starred Projects"
+msgstr ""
+
+msgid "Starred Projects' Activity"
+msgstr ""
+
+msgid "Starred projects"
+msgstr ""
+
+msgid "StarredProjectsEmptyState|Visit a project page and press on a star icon. Then, you can find the project on this page."
+msgstr ""
+
+msgid "StarredProjectsEmptyState|You don't have starred projects yet."
+msgstr ""
+
+msgid "Starrers"
+msgstr ""
+
+msgid "Stars"
+msgstr ""
+
+msgid "Start GitLab Ultimate trial"
+msgstr ""
+
+msgid "Start Web Terminal"
+msgstr ""
+
+msgid "Start a %{new_merge_request} with these changes"
+msgstr ""
+
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
+msgid "Start a new merge request"
+msgstr ""
+
+msgid "Start a review"
+msgstr ""
+
+msgid "Start and due date"
+msgstr ""
+
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
+msgid "Start cleanup"
+msgstr ""
+
+msgid "Start date"
+msgstr ""
+
+msgid "Start merge train"
+msgstr ""
+
+msgid "Start merge train when pipeline succeeds"
+msgstr ""
+
+msgid "Start search"
+msgstr ""
+
+msgid "Start the Runner!"
+msgstr ""
+
+msgid "Start thread"
+msgstr ""
+
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
+
+msgid "Start your trial"
+msgstr ""
+
+msgid "Started"
+msgstr ""
+
+msgid "Started %{startsIn}"
+msgstr ""
+
+msgid "Started asynchronous removal of all repository check states."
+msgstr ""
+
+msgid "Starting..."
+msgstr ""
+
+msgid "Starts %{startsIn}"
+msgstr ""
+
+msgid "Starts at (UTC)"
+msgstr ""
+
+msgid "State your message to activate"
+msgstr ""
+
+msgid "Statistics"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "Status:"
+msgstr ""
+
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
+msgid "Stop Terminal"
+msgstr ""
+
+msgid "Stop environment"
+msgstr ""
+
+msgid "Stop impersonation"
+msgstr ""
+
+msgid "Stop this environment"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "Stopping this environment is currently not possible as a deployment is in progress"
+msgstr ""
+
+msgid "Stopping..."
+msgstr ""
+
+msgid "Storage"
+msgstr ""
+
+msgid "Storage:"
+msgstr ""
+
+msgid "StorageSize|Unknown"
+msgstr ""
+
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
+msgid "Subgroups"
+msgstr ""
+
+msgid "Subgroups and projects"
+msgstr ""
+
+msgid "Subkeys"
+msgstr ""
+
+msgid "Submit as spam"
+msgstr ""
+
+msgid "Submit feedback"
+msgstr ""
+
+msgid "Submit issue"
+msgstr ""
+
+msgid "Submit review"
+msgstr ""
+
+msgid "Submit search"
+msgstr ""
+
+msgid "Subscribe"
+msgstr ""
+
+msgid "Subscribe at group level"
+msgstr ""
+
+msgid "Subscribe at project level"
+msgstr ""
+
+msgid "Subscribe to RSS feed"
+msgstr ""
+
+msgid "Subscribe to calendar"
+msgstr ""
+
+msgid "Subscribed"
+msgstr ""
+
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscription"
+msgstr ""
+
+msgid "SubscriptionTable|Billing"
+msgstr ""
+
+msgid "SubscriptionTable|Free"
+msgstr ""
+
+msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
+msgstr ""
+
+msgid "SubscriptionTable|Last invoice"
+msgstr ""
+
+msgid "SubscriptionTable|Loading subscriptions"
+msgstr ""
+
+msgid "SubscriptionTable|Manage"
+msgstr ""
+
+msgid "SubscriptionTable|Max seats used"
+msgstr ""
+
+msgid "SubscriptionTable|Next invoice"
+msgstr ""
+
+msgid "SubscriptionTable|Seats currently in use"
+msgstr ""
+
+msgid "SubscriptionTable|Seats in subscription"
+msgstr ""
+
+msgid "SubscriptionTable|Seats owed"
+msgstr ""
+
+msgid "SubscriptionTable|Subscription end date"
+msgstr ""
+
+msgid "SubscriptionTable|Subscription start date"
+msgstr ""
+
+msgid "SubscriptionTable|This is the last time the GitLab.com team was in contact with you to settle any outstanding balances."
+msgstr ""
+
+msgid "SubscriptionTable|This is the maximum number of users that have existed at the same time since this subscription started."
+msgstr ""
+
+msgid "SubscriptionTable|This is the next date when the GitLab.com team is scheduled to get in contact with you to settle any outstanding balances."
+msgstr ""
+
+msgid "SubscriptionTable|This is the number of seats you will be required to purchase if you update to a paid plan."
+msgstr ""
+
+msgid "SubscriptionTable|Trial"
+msgstr ""
+
+msgid "SubscriptionTable|Trial end date"
+msgstr ""
+
+msgid "SubscriptionTable|Trial start date"
+msgstr ""
+
+msgid "SubscriptionTable|Upgrade"
+msgstr ""
+
+msgid "SubscriptionTable|Usage"
+msgstr ""
+
+msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
+msgstr ""
+
+msgid "Subtracted"
+msgstr ""
+
+msgid "Subtracts"
+msgstr ""
+
+msgid "Successfully blocked"
+msgstr ""
+
+msgid "Successfully confirmed"
+msgstr ""
+
+msgid "Successfully deleted U2F device."
+msgstr ""
+
+msgid "Successfully removed email."
+msgstr ""
+
+msgid "Successfully scheduled a pipeline to run. Go to the %{pipelines_link_start}Pipelines page%{pipelines_link_end} for details."
+msgstr ""
+
+msgid "Successfully unblocked"
+msgstr ""
+
+msgid "Successfully unlocked"
+msgstr ""
+
+msgid "Suggest code changes which are immediately applied. Try it out!"
+msgstr ""
+
+msgid "Suggested change"
+msgstr ""
+
+msgid "SuggestedColors|Bright green"
+msgstr ""
+
+msgid "SuggestedColors|Dark grayish cyan"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate blue"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate orange"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate pink"
+msgstr ""
+
+msgid "SuggestedColors|Dark moderate violet"
+msgstr ""
+
+msgid "SuggestedColors|Feijoa"
+msgstr ""
+
+msgid "SuggestedColors|Lime green"
+msgstr ""
+
+msgid "SuggestedColors|Moderate blue"
+msgstr ""
+
+msgid "SuggestedColors|Pure red"
+msgstr ""
+
+msgid "SuggestedColors|Slightly desaturated blue"
+msgstr ""
+
+msgid "SuggestedColors|Slightly desaturated green"
+msgstr ""
+
+msgid "SuggestedColors|Soft orange"
+msgstr ""
+
+msgid "SuggestedColors|Soft red"
+msgstr ""
+
+msgid "SuggestedColors|Strong pink"
+msgstr ""
+
+msgid "SuggestedColors|Strong red"
+msgstr ""
+
+msgid "SuggestedColors|Strong yellow"
+msgstr ""
+
+msgid "SuggestedColors|UA blue"
+msgstr ""
+
+msgid "SuggestedColors|Very dark desaturated blue"
+msgstr ""
+
+msgid "SuggestedColors|Very dark lime green"
+msgstr ""
+
+msgid "SuggestedColors|Very pale orange"
+msgstr ""
+
+msgid "Suggestions:"
+msgstr ""
+
+msgid "Sunday"
+msgstr ""
+
+msgid "Support"
+msgstr ""
+
+msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
+msgstr ""
+
+msgid "Support page URL"
+msgstr ""
+
+msgid "Switch branch/tag"
+msgstr ""
+
+msgid "Switch to GitLab Next"
+msgstr ""
+
+msgid "Switch to the source to copy it to the clipboard"
+msgstr ""
+
+msgid "Sync information"
+msgstr ""
+
+msgid "System"
+msgstr ""
+
+msgid "System Hooks"
+msgstr ""
+
+msgid "System Hooks Help"
+msgstr ""
+
+msgid "System Info"
+msgstr ""
+
+msgid "System default (%{default})"
+msgstr ""
+
+msgid "System header and footer"
+msgstr ""
+
+msgid "System hook was successfully updated."
+msgstr ""
+
+msgid "System metrics (Custom)"
+msgstr ""
+
+msgid "System metrics (Kubernetes)"
+msgstr ""
+
+msgid "Table of Contents"
+msgstr ""
+
+msgid "Tag"
+msgstr ""
+
+msgid "Tag list:"
+msgstr ""
+
+msgid "Tag this commit."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
+msgid "Tags feed"
+msgstr ""
+
+msgid "Tags this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tags this commit to %{tag_name}."
+msgstr ""
+
+msgid "Tags:"
+msgstr ""
+
+msgid "TagsPage|Browse commits"
+msgstr ""
+
+msgid "TagsPage|Browse files"
+msgstr ""
+
+msgid "TagsPage|Can't find HEAD commit for this tag"
+msgstr ""
+
+msgid "TagsPage|Cancel"
+msgstr ""
+
+msgid "TagsPage|Create tag"
+msgstr ""
+
+msgid "TagsPage|Delete tag"
+msgstr ""
+
+msgid "TagsPage|Deleting the %{tag_name} tag cannot be undone. Are you sure?"
+msgstr ""
+
+msgid "TagsPage|Edit release notes"
+msgstr ""
+
+msgid "TagsPage|Existing branch name, tag, or commit SHA"
+msgstr ""
+
+msgid "TagsPage|Filter by tag name"
+msgstr ""
+
+msgid "TagsPage|New Tag"
+msgstr ""
+
+msgid "TagsPage|New tag"
+msgstr ""
+
+msgid "TagsPage|Optionally, add a message to the tag."
+msgstr ""
+
+msgid "TagsPage|Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page."
+msgstr ""
+
+msgid "TagsPage|Release notes"
+msgstr ""
+
+msgid "TagsPage|Repository has no tags yet."
+msgstr ""
+
+msgid "TagsPage|Sort by"
+msgstr ""
+
+msgid "TagsPage|Tags"
+msgstr ""
+
+msgid "TagsPage|Tags give the ability to mark specific points in history as being important"
+msgstr ""
+
+msgid "TagsPage|This tag has no release notes."
+msgstr ""
+
+msgid "TagsPage|Use git tag command to add a new one:"
+msgstr ""
+
+msgid "TagsPage|Write your release notes or drag files here…"
+msgstr ""
+
+msgid "TagsPage|protected"
+msgstr ""
+
+msgid "Target Branch"
+msgstr ""
+
+msgid "Target branch"
+msgstr ""
+
+msgid "Team"
+msgstr ""
+
+msgid "Team domain"
+msgstr ""
+
+msgid "Template"
+msgstr ""
+
+msgid "Templates"
+msgstr ""
+
+msgid "Terminal"
+msgstr ""
+
+msgid "Terminal for environment"
+msgstr ""
+
+msgid "Terminal sync service is running"
+msgstr ""
+
+msgid "Terms of Service Agreement and Privacy Policy"
+msgstr ""
+
+msgid "Terms of Service and Privacy Policy"
+msgstr ""
+
+msgid "Test SAML SSO"
+msgstr ""
+
+msgid "Test coverage parsing"
+msgstr ""
+
+msgid "Test failed."
+msgstr ""
+
+msgid "Test settings and save changes"
+msgstr ""
+
+msgid "TestHooks|Ensure one of your projects has merge requests."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has CI jobs."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has CI pipelines."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has at least one commit."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has issues."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has merge requests."
+msgstr ""
+
+msgid "TestHooks|Ensure the project has notes."
+msgstr ""
+
+msgid "TestHooks|Ensure the wiki is enabled and has pages."
+msgstr ""
+
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
+msgid "Thank you for your report. A GitLab administrator will look into it shortly."
+msgstr ""
+
+msgid "Thanks! Don't show me this again"
+msgstr ""
+
+msgid "The \"%{group_path}\" group allows you to sign in with your Single Sign-On Account"
+msgstr ""
+
+msgid "The %{type} contains the following error:"
+msgid_plural "The %{type} contains the following errors:"
+msgstr[0] ""
+
+msgid "The API path was not specified."
+msgstr ""
+
+msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
+msgstr ""
+
+msgid "The CSV export will be created in the background. Once finished, it will be sent to <strong>%{email}</strong> in an attachment."
+msgstr ""
+
+msgid "The Git LFS objects will <strong>not</strong> be synced."
+msgstr ""
+
+msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project"
+msgstr ""
+
+msgid "The Issue Tracker is the place to add things that need to be improved or solved in a project. You can register or sign in to create issues for this project."
+msgstr ""
+
+msgid "The X509 Certificate to use when mutual TLS is required to communicate with the external authorization service. If left blank, the server certificate is still validated when accessing over HTTPS."
+msgstr ""
+
+msgid "The amount of seconds after which a request to get a secondary node status will time out."
+msgstr ""
+
+msgid "The branch for this project has no active pipeline configuration."
+msgstr ""
+
+msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
+msgstr ""
+
+msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
+msgstr ""
+
+msgid "The collection of events added to the data gathered for that stage."
+msgstr ""
+
+msgid "The connection will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
+msgid "The content of this page is not encoded in UTF-8. Edits can only be made via the Git repository."
+msgstr ""
+
+msgid "The dependency list details information about the components used within your project."
+msgstr ""
+
+msgid "The deployment of this job to %{environmentLink} did not succeed."
+msgstr ""
+
+msgid "The directory has been successfully created."
+msgstr ""
+
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
+msgid "The entered user map is not a valid JSON user map."
+msgstr ""
+
+msgid "The file has been successfully created."
+msgstr ""
+
+msgid "The file has been successfully deleted."
+msgstr ""
+
+msgid "The following items will NOT be exported:"
+msgstr ""
+
+msgid "The following items will be exported:"
+msgstr ""
+
+msgid "The fork relationship has been removed."
+msgstr ""
+
+msgid "The global settings require you to enable Two-Factor Authentication for your account."
+msgstr ""
+
+msgid "The group and any internal projects can be viewed by any logged in user."
+msgstr ""
+
+msgid "The group and any public projects can be viewed without any authentication."
+msgstr ""
+
+msgid "The group and its projects can only be viewed by members."
+msgstr ""
+
+msgid "The group settings for %{group_links} require you to enable Two-Factor Authentication for your account. You can %{leave_group_links}."
+msgstr ""
+
+msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
+msgstr ""
+
+msgid "The invitation could not be accepted."
+msgstr ""
+
+msgid "The invitation could not be declined."
+msgstr ""
+
+msgid "The invitation has already been accepted."
+msgstr ""
+
+msgid "The invitation was successfully resent."
+msgstr ""
+
+msgid "The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage."
+msgstr ""
+
+msgid "The license was removed. GitLab has fallen back on the previous license."
+msgstr ""
+
+msgid "The license was removed. GitLab now no longer has a valid license."
+msgstr ""
+
+msgid "The license was successfully uploaded and is now active. You can see the details below."
+msgstr ""
+
+msgid "The maximum file size allowed is %{size}."
+msgstr ""
+
+msgid "The maximum file size allowed is 200KB."
+msgstr ""
+
+msgid "The merge conflicts for this merge request cannot be resolved through GitLab. Please try to resolve them locally."
+msgstr ""
+
+msgid "The merge conflicts for this merge request have already been resolved."
+msgstr ""
+
+msgid "The merge conflicts for this merge request have already been resolved. Please return to the merge request."
+msgstr ""
+
+msgid "The name %{entryName} is already taken in this directory."
+msgstr ""
+
+msgid "The number of changes to be fetched from GitLab when cloning a repository. This can speed up Pipelines execution. Keep empty or set to 0 to disable shallow clone by default and make GitLab CI fetch all branches and tags each time."
+msgstr ""
+
+msgid "The number of times an upload record could not find its file"
+msgstr ""
+
+msgid "The passphrase required to decrypt the private key. This is optional and the value is encrypted at rest."
+msgstr ""
+
+msgid "The path to CI config file. Defaults to <code>.gitlab-ci.yml</code>"
+msgstr ""
+
+msgid "The phase of the development lifecycle."
+msgstr ""
+
+msgid "The pipelines schedule runs pipelines in the future, repeatedly, for specific branches or tags. Those scheduled pipelines will inherit limited project access based on their associated user."
+msgstr ""
+
+msgid "The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit."
+msgstr ""
+
+msgid "The private key to use when a client certificate is provided. This value is encrypted at rest."
+msgstr ""
+
+msgid "The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
+msgstr ""
+
+msgid "The project can be accessed by any logged in user."
+msgstr ""
+
+msgid "The project can be accessed by any user who is logged in."
+msgstr ""
+
+msgid "The project can be accessed by anyone, regardless of authentication."
+msgstr ""
+
+msgid "The project can be accessed without any authentication."
+msgstr ""
+
+msgid "The project is accessible only by members of the project. Access must be granted explicitly to each user."
+msgstr ""
+
+msgid "The project is still being deleted. Please try again later."
+msgstr ""
+
+msgid "The project was successfully forked."
+msgstr ""
+
+msgid "The project was successfully imported."
+msgstr ""
+
+msgid "The pseudonymizer data collection is disabled. When enabled, GitLab will run a background job that will produce pseudonymized CSVs of the GitLab database that will be uploaded to your configured object storage directory."
+msgstr ""
+
+msgid "The remote mirror took to long to complete."
+msgstr ""
+
+msgid "The remote repository is being updated..."
+msgstr ""
+
+msgid "The repository for this project does not exist."
+msgstr ""
+
+msgid "The repository for this project is empty"
+msgstr ""
+
+msgid "The repository is being updated..."
+msgstr ""
+
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
+msgstr ""
+
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
+
+msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
+msgstr ""
+
+msgid "The roadmap shows the progress of your epics along a timeline"
+msgstr ""
+
+msgid "The schedule time must be in the future!"
+msgstr ""
+
+msgid "The snippet can be accessed without any authentication."
+msgstr ""
+
+msgid "The snippet is visible only to me."
+msgstr ""
+
+msgid "The snippet is visible only to project members."
+msgstr ""
+
+msgid "The snippet is visible to any logged in user."
+msgstr ""
+
+msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
+msgstr ""
+
+msgid "The target element is missing."
+msgstr ""
+
+msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
+msgstr ""
+
+msgid "The time taken by each data entry gathered by that stage."
+msgstr ""
+
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
+msgstr ""
+
+msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
+msgstr ""
+
+msgid "The uploaded file is not a valid Google Takeout archive."
+msgstr ""
+
+msgid "The usage ping is disabled, and cannot be configured through this form."
+msgstr ""
+
+msgid "The user is being deleted."
+msgstr ""
+
+msgid "The user map has been saved. Continue by selecting the projects you want to import."
+msgstr ""
+
+msgid "The user map is a JSON document mapping the Google Code users that participated on your projects to the way their email addresses and usernames will be imported into GitLab. You can change this by changing the value on the right hand side of <code>:</code>. Be sure to preserve the surrounding double quotes, other punctuation and the email address or username on the left hand side."
+msgstr ""
+
+msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
+msgstr ""
+
+msgid "The user-facing URL of the Geo node"
+msgstr ""
+
+msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
+msgstr ""
+
+msgid "There are no GPG keys associated with this account."
+msgstr ""
+
+msgid "There are no GPG keys with access to your account."
+msgstr ""
+
+msgid "There are no SSH keys associated with this account."
+msgstr ""
+
+msgid "There are no SSH keys with access to your account."
+msgstr ""
+
+msgid "There are no archived projects yet"
+msgstr ""
+
+msgid "There are no charts configured for this page"
+msgstr ""
+
+msgid "There are no closed issues"
+msgstr ""
+
+msgid "There are no closed merge requests"
+msgstr ""
+
+msgid "There are no custom project templates set up for this GitLab instance. They are enabled from GitLab's Admin Area. Contact your GitLab instance administrator to setup custom project templates."
+msgstr ""
+
+msgid "There are no issues to show"
+msgstr ""
+
+msgid "There are no issues to show."
+msgstr ""
+
+msgid "There are no labels yet"
+msgstr ""
+
+msgid "There are no matching files"
+msgstr ""
+
+msgid "There are no open issues"
+msgstr ""
+
+msgid "There are no open merge requests"
+msgstr ""
+
+msgid "There are no packages yet"
+msgstr ""
+
+msgid "There are no projects shared with this group yet"
+msgstr ""
+
+msgid "There are no staged changes"
+msgstr ""
+
+msgid "There are no unstaged changes"
+msgstr ""
+
+msgid "There is already a repository with that name on disk"
+msgstr ""
+
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
+msgid "There was a problem communicating with your device."
+msgstr ""
+
+msgid "There was a problem sending the confirmation email"
+msgstr ""
+
+msgid "There was an error %{message} todo."
+msgstr ""
+
+msgid "There was an error adding a To Do."
+msgstr ""
+
+msgid "There was an error creating the issue"
+msgstr ""
+
+msgid "There was an error deleting the To Do."
+msgstr ""
+
+msgid "There was an error fetching configuration for charts"
+msgstr ""
+
+msgid "There was an error fetching the form data"
+msgstr ""
+
+msgid "There was an error gathering the chart data"
+msgstr ""
+
+msgid "There was an error loading users activity calendar."
+msgstr ""
+
+msgid "There was an error removing the e-mail."
+msgstr ""
+
+msgid "There was an error resetting group pipeline minutes."
+msgstr ""
+
+msgid "There was an error resetting user pipeline minutes."
+msgstr ""
+
+msgid "There was an error saving your changes."
+msgstr ""
+
+msgid "There was an error saving your notification settings."
+msgstr ""
+
+msgid "There was an error subscribing to this label."
+msgstr ""
+
+msgid "There was an error trying to validate your query"
+msgstr ""
+
+msgid "There was an error when reseting email token."
+msgstr ""
+
+msgid "There was an error when subscribing to this label."
+msgstr ""
+
+msgid "There was an error when unsubscribing from this label."
+msgstr ""
+
+msgid "There was an error while fetching cycle analytics data."
+msgstr ""
+
+msgid "There was an error with the reCAPTCHA. Please solve the reCAPTCHA again."
+msgstr ""
+
+msgid "These existing issues have a similar title. It might be better to comment there instead of creating another similar issue."
+msgstr ""
+
+msgid "They can be managed using the %{link}."
+msgstr ""
+
+msgid "Third party offers"
+msgstr ""
+
+msgid "This %{issuableDisplayName} is locked. Only project members can comment."
+msgstr ""
+
+msgid "This %{issuable} is locked. Only <strong>project members</strong> can comment."
+msgstr ""
+
+msgid "This %{viewer} could not be displayed because %{reason}. You can %{options} instead."
+msgstr ""
+
+msgid "This GitLab instance does not provide any shared Runners yet. Instance administrators can register shared Runners in the admin area."
+msgstr ""
+
+msgid "This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention."
+msgstr ""
+
+msgid "This also resolves the discussion"
+msgstr ""
+
+msgid "This application was created by %{link_to_owner}."
+msgstr ""
+
+msgid "This application will be able to:"
+msgstr ""
+
+msgid "This block is self-referential"
+msgstr ""
+
+msgid "This board's scope is reduced"
+msgstr ""
+
+msgid "This branch has changed since you started editing. Would you like to create a new branch?"
+msgstr ""
+
+msgid "This chart could not be displayed"
+msgstr ""
+
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
+msgstr ""
+
+msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
+msgstr ""
+
+msgid "This commit was signed with a <strong>verified</strong> signature and the committer email is verified to belong to the same user."
+msgstr ""
+
+msgid "This commit was signed with a different user's verified signature."
+msgstr ""
+
+msgid "This commit was signed with a verified signature, but the committer email is <strong>not verified</strong> to belong to the same user."
+msgstr ""
+
+msgid "This commit was signed with an <strong>unverified</strong> signature."
+msgstr ""
+
+msgid "This container registry has been scheduled for deletion."
+msgstr ""
+
+msgid "This date is after the due date, so this epic won't appear in the roadmap."
+msgstr ""
+
+msgid "This date is before the start date, so this epic won't appear in the roadmap."
+msgstr ""
+
+msgid "This device has already been registered with us."
+msgstr ""
+
+msgid "This device has not been registered with us."
+msgstr ""
+
+msgid "This diff is collapsed."
+msgstr ""
+
+msgid "This diff was suppressed by a .gitattributes entry."
+msgstr ""
+
+msgid "This directory"
+msgstr ""
+
+msgid "This domain is not verified. You will need to verify ownership before access is enabled."
+msgstr ""
+
+msgid "This environment has no deployments yet."
+msgstr ""
+
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
+msgid "This field is required."
+msgstr ""
+
+msgid "This group"
+msgstr ""
+
+msgid "This group does not provide any group Runners yet."
+msgstr ""
+
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
+msgstr ""
+
+msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
+msgstr ""
+
+msgid "This is a Work in Progress"
+msgstr ""
+
+msgid "This is a confidential issue."
+msgstr ""
+
+msgid "This is a delayed job to run in %{remainingTime}"
+msgstr ""
+
+msgid "This is a list of devices that have logged into your account. Revoke any sessions that you do not recognize."
+msgstr ""
+
+msgid "This is a security log of important events involving your account."
+msgstr ""
+
+msgid "This is the author's first Merge Request to this project."
+msgstr ""
+
+msgid "This is the maximum number of users that have existed at the same time since the license started. This is the minimum number of seats you will need to buy when you renew your license."
+msgstr ""
+
+msgid "This is your current session"
+msgstr ""
+
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
+msgid "This issue is confidential"
+msgstr ""
+
+msgid "This issue is locked."
+msgstr ""
+
+msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
+msgstr ""
+
+msgid "This job does not have a trace."
+msgstr ""
+
+msgid "This job has been canceled"
+msgstr ""
+
+msgid "This job has been skipped"
+msgstr ""
+
+msgid "This job has not been triggered yet"
+msgstr ""
+
+msgid "This job has not started yet"
+msgstr ""
+
+msgid "This job is an out-of-date deployment to %{environmentLink}."
+msgstr ""
+
+msgid "This job is an out-of-date deployment to %{environmentLink}. View the most recent deployment %{deploymentLink}."
+msgstr ""
+
+msgid "This job is archived. Only the complete pipeline can be retried."
+msgstr ""
+
+msgid "This job is creating a deployment to %{environmentLink} and will overwrite the %{deploymentLink}."
+msgstr ""
+
+msgid "This job is creating a deployment to %{environmentLink}."
+msgstr ""
+
+msgid "This job is in pending state and is waiting to be picked by a runner"
+msgstr ""
+
+msgid "This job is performing tasks that must complete before it can start"
+msgstr ""
+
+msgid "This job is preparing to start"
+msgstr ""
+
+msgid "This job is stuck because you don't have any active runners online with any of these tags assigned to them:"
+msgstr ""
+
+msgid "This job is stuck because you don't have any active runners that can run this job."
+msgstr ""
+
+msgid "This job is the most recent deployment to %{link}."
+msgstr ""
+
+msgid "This job requires a manual action"
+msgstr ""
+
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
+msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
+msgstr ""
+
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
+msgid "This means you can not push code until you create an empty repository or import existing one."
+msgstr ""
+
+msgid "This merge request is locked."
+msgstr ""
+
+msgid "This namespace has already been taken! Please choose another one."
+msgstr ""
+
+msgid "This option is disabled as you don't have write permissions for the current branch"
+msgstr ""
+
+msgid "This page is unavailable because you are not allowed to read information across multiple projects."
+msgstr ""
+
+msgid "This page will be removed in a future release."
+msgstr ""
+
+msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
+msgstr ""
+
+msgid "This pipeline makes use of a predefined CI/CD configuration enabled by <b>Auto DevOps.</b>"
+msgstr ""
+
+msgid "This project"
+msgstr ""
+
+msgid "This project does not belong to a group and can therefore not make use of group Runners."
+msgstr ""
+
+msgid "This project does not have a wiki homepage yet"
+msgstr ""
+
+msgid "This project does not have billing enabled. To create a cluster, <a href=%{linkToBilling} target=\"_blank\" rel=\"noopener noreferrer\">enable billing <i class=\"fa fa-external-link\" aria-hidden=\"true\"></i></a> and try again."
+msgstr ""
+
+msgid "This repository"
+msgstr ""
+
+msgid "This repository is currently empty. A new Auto DevOps pipeline will be created after a new file has been pushed to a branch."
+msgstr ""
+
+msgid "This runner will only run on pipelines triggered on protected branches"
+msgstr ""
+
+msgid "This setting can be overridden in each project."
+msgstr ""
+
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
+msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
+msgstr ""
+
+msgid "This timeout will take precedence when lower than project-defined timeout and accepts a human readable time input language like \"1 hour\". Values without specification represent seconds."
+msgstr ""
+
+msgid "This user cannot be unlocked manually from GitLab"
+msgstr ""
+
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
+msgid "This user has no identities"
+msgstr ""
+
+msgid "This user will be the author of all events in the activity feed that are the result of an update, like new branches being created or new commits being pushed to existing branches."
+msgstr ""
+
+msgid "This user will be the author of all events in the activity feed that are the result of an update, like new branches being created or new commits being pushed to existing branches. Upon creation or when reassigning you can only assign yourself to be the mirror user."
+msgstr ""
+
+msgid "This will redirect you to an external sign in page."
+msgstr ""
+
+msgid "This will remove the fork relationship to source project"
+msgstr ""
+
+msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
+msgstr ""
+
+msgid "Thursday"
+msgstr ""
+
+msgid "Time"
+msgstr ""
+
+msgid "Time based: Yes"
+msgstr ""
+
+msgid "Time before an issue gets scheduled"
+msgstr ""
+
+msgid "Time before an issue starts implementation"
+msgstr ""
+
+msgid "Time before enforced"
+msgstr ""
+
+msgid "Time between merge request creation and merge/close"
+msgstr ""
+
+msgid "Time estimate"
+msgstr ""
+
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
+msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
+msgstr ""
+
+msgid "Time remaining"
+msgstr ""
+
+msgid "Time spent"
+msgstr ""
+
+msgid "Time to merge"
+msgstr ""
+
+msgid "Time tracking"
+msgstr ""
+
+msgid "Time until first merge request"
+msgstr ""
+
+msgid "TimeTrackingEstimated|Est"
+msgstr ""
+
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
+msgid "TimeTracking|Estimated:"
+msgstr ""
+
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
+msgid "TimeTracking|Spent"
+msgstr ""
+
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
+msgid "Timeago|%s days ago"
+msgstr ""
+
+msgid "Timeago|%s days remaining"
+msgstr ""
+
+msgid "Timeago|%s hours ago"
+msgstr ""
+
+msgid "Timeago|%s hours remaining"
+msgstr ""
+
+msgid "Timeago|%s minutes ago"
+msgstr ""
+
+msgid "Timeago|%s minutes remaining"
+msgstr ""
+
+msgid "Timeago|%s months ago"
+msgstr ""
+
+msgid "Timeago|%s months remaining"
+msgstr ""
+
+msgid "Timeago|%s seconds remaining"
+msgstr ""
+
+msgid "Timeago|%s weeks ago"
+msgstr ""
+
+msgid "Timeago|%s weeks remaining"
+msgstr ""
+
+msgid "Timeago|%s years ago"
+msgstr ""
+
+msgid "Timeago|%s years remaining"
+msgstr ""
+
+msgid "Timeago|1 day ago"
+msgstr ""
+
+msgid "Timeago|1 day remaining"
+msgstr ""
+
+msgid "Timeago|1 hour ago"
+msgstr ""
+
+msgid "Timeago|1 hour remaining"
+msgstr ""
+
+msgid "Timeago|1 minute ago"
+msgstr ""
+
+msgid "Timeago|1 minute remaining"
+msgstr ""
+
+msgid "Timeago|1 month ago"
+msgstr ""
+
+msgid "Timeago|1 month remaining"
+msgstr ""
+
+msgid "Timeago|1 week ago"
+msgstr ""
+
+msgid "Timeago|1 week remaining"
+msgstr ""
+
+msgid "Timeago|1 year ago"
+msgstr ""
+
+msgid "Timeago|1 year remaining"
+msgstr ""
+
+msgid "Timeago|Past due"
+msgstr ""
+
+msgid "Timeago|in %s days"
+msgstr ""
+
+msgid "Timeago|in %s hours"
+msgstr ""
+
+msgid "Timeago|in %s minutes"
+msgstr ""
+
+msgid "Timeago|in %s months"
+msgstr ""
+
+msgid "Timeago|in %s seconds"
+msgstr ""
+
+msgid "Timeago|in %s weeks"
+msgstr ""
+
+msgid "Timeago|in %s years"
+msgstr ""
+
+msgid "Timeago|in 1 day"
+msgstr ""
+
+msgid "Timeago|in 1 hour"
+msgstr ""
+
+msgid "Timeago|in 1 minute"
+msgstr ""
+
+msgid "Timeago|in 1 month"
+msgstr ""
+
+msgid "Timeago|in 1 week"
+msgstr ""
+
+msgid "Timeago|in 1 year"
+msgstr ""
+
+msgid "Timeago|just now"
+msgstr ""
+
+msgid "Timeago|right now"
+msgstr ""
+
+msgid "Timeframe"
+msgstr ""
+
+msgid "Timeout"
+msgstr ""
+
+msgid "Time|hr"
+msgid_plural "Time|hrs"
+msgstr[0] ""
+
+msgid "Time|min"
+msgid_plural "Time|mins"
+msgstr[0] ""
+
+msgid "Time|s"
+msgstr ""
+
+msgid "Tip:"
+msgstr ""
+
+msgid "Title"
+msgstr ""
+
+msgid "Title:"
+msgstr ""
+
+msgid "Titles and Filenames"
+msgstr ""
+
+msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
+msgstr ""
+
+msgid "To Do"
+msgstr ""
+
+msgid "To GitLab"
+msgstr ""
+
+msgid "To access this domain create a new DNS record"
+msgstr ""
+
+msgid "To add an SSH key you need to %{generate_link_start}generate one%{link_end} or use an %{existing_link_start}existing key%{link_end}."
+msgstr ""
+
+msgid "To add the entry manually, provide the following details to the application on your phone."
+msgstr ""
+
+msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
+msgstr ""
+
+msgid "To connect an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To define internal users, first enable new users set to external"
+msgstr ""
+
+msgid "To enable it and see User Cohorts, visit %{application_settings_link_start}application settings%{application_settings_link_end}."
+msgstr ""
+
+msgid "To get started you enter your FogBugz URL and login information below. In the next steps, you'll be able to map users and select the projects you want to import."
+msgstr ""
+
+msgid "To get started, link this page to your Jaeger server, or find out how to %{link_start_tag}install Jaeger%{link_end_tag}"
+msgstr ""
+
+msgid "To get started, please enter your Gitea Host URL and a %{link_to_personal_token}."
+msgstr ""
+
+msgid "To help improve GitLab and its user experience, GitLab will periodically collect usage information."
+msgstr ""
+
+msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
+msgstr ""
+
+msgid "To import an SVN repository, check out %{svn_link}."
+msgstr ""
+
+msgid "To keep this project going, create a new issue"
+msgstr ""
+
+msgid "To keep this project going, create a new merge request"
+msgstr ""
+
+msgid "To link Sentry to GitLab, enter your Sentry URL and Auth Token."
+msgstr ""
+
+msgid "To move or copy an entire GitLab project from another GitLab installation to this one, navigate to the original project's settings page, generate an export file, and upload it here."
+msgstr ""
+
+msgid "To only use CI/CD features for an external repository, choose <strong>CI/CD for external repo</strong>."
+msgstr ""
+
+msgid "To open Jaeger and easily view tracing from GitLab, link the %{link} page to your server"
+msgstr ""
+
+msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
+msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
+msgstr ""
+
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
+msgstr ""
+
+msgid "To set up this service:"
+msgstr ""
+
+msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
+msgstr ""
+
+msgid "To start serving your jobs you can add Runners to your group"
+msgstr ""
+
+msgid "To start serving your jobs you can either add specific Runners to your project or use shared Runners"
+msgstr ""
+
+msgid "To this GitLab instance"
+msgstr ""
+
+msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button."
+msgstr ""
+
+msgid "To view the roadmap, add a start or due date to one of your epics in this group or its subgroups. In the months view, only epics in the past month, current month, and next 5 months are shown."
+msgstr ""
+
+msgid "To widen your search, change or remove filters above"
+msgstr ""
+
+msgid "To widen your search, change or remove filters."
+msgstr ""
+
+msgid "To-Do List"
+msgstr ""
+
+msgid "To-do item successfully marked as done."
+msgstr ""
+
+msgid "Today"
+msgstr ""
+
+msgid "Toggle Markdown preview"
+msgstr ""
+
+msgid "Toggle Sidebar"
+msgstr ""
+
+msgid "Toggle backtrace"
+msgstr ""
+
+msgid "Toggle collapse"
+msgstr ""
+
+msgid "Toggle comments for this file"
+msgstr ""
+
+msgid "Toggle commit description"
+msgstr ""
+
+msgid "Toggle commit list"
+msgstr ""
+
+msgid "Toggle emoji award"
+msgstr ""
+
+msgid "Toggle navigation"
+msgstr ""
+
+msgid "Toggle project"
+msgstr ""
+
+msgid "Toggle sidebar"
+msgstr ""
+
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
+msgid "ToggleButton|Toggle Status: OFF"
+msgstr ""
+
+msgid "ToggleButton|Toggle Status: ON"
+msgstr ""
+
+msgid "Toggled :%{name}: emoji award."
+msgstr ""
+
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
+
+msgid "Tomorrow"
+msgstr ""
+
+msgid "Too many changes to show."
+msgstr ""
+
+msgid "Topics"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Total Contributions"
+msgstr ""
+
+msgid "Total Time"
+msgstr ""
+
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
+msgid "Total test time for all commits/merges"
+msgstr ""
+
+msgid "Total: %{total}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "Track activity with Contribution Analytics."
+msgstr ""
+
+msgid "Track groups of issues that share a theme, across projects and milestones"
+msgstr ""
+
+msgid "Track time with quick actions"
+msgstr ""
+
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
+msgid "Transfer project"
+msgstr ""
+
+msgid "TransferGroup|Database is not supported."
+msgstr ""
+
+msgid "TransferGroup|Group is already a root group."
+msgstr ""
+
+msgid "TransferGroup|Group is already associated to the parent group."
+msgstr ""
+
+msgid "TransferGroup|The parent group already has a subgroup with the same path."
+msgstr ""
+
+msgid "TransferGroup|Transfer failed: %{error_message}"
+msgstr ""
+
+msgid "TransferGroup|You don't have enough permissions."
+msgstr ""
+
+msgid "TransferProject|Cannot move project"
+msgstr ""
+
+msgid "TransferProject|Please select a new namespace for your project."
+msgstr ""
+
+msgid "TransferProject|Project cannot be transferred, because tags are present in its container registry"
+msgstr ""
+
+msgid "TransferProject|Project with same name or path in target namespace already exists"
+msgstr ""
+
+msgid "TransferProject|Transfer failed, please contact an admin."
+msgstr ""
+
+msgid "Tree view"
+msgstr ""
+
+msgid "Trending"
+msgstr ""
+
+msgid "Trigger pipelines for mirror updates"
+msgstr ""
+
+msgid "Trigger pipelines when branches or tags are updated from the upstream repository. Depending on the activity of the upstream repository, this may greatly increase the load on your CI runners. Only enable this if you know they can handle the load."
+msgstr ""
+
+msgid "Trigger removed."
+msgstr ""
+
+msgid "Trigger this manual action"
+msgstr ""
+
+msgid "Trigger token:"
+msgstr ""
+
+msgid "Trigger variables:"
+msgstr ""
+
+msgid "Trigger was created successfully."
+msgstr ""
+
+msgid "Trigger was successfully updated."
+msgstr ""
+
+msgid "Triggerer"
+msgstr ""
+
+msgid "Triggers can force a specific branch or tag to get rebuilt with an API call. These tokens will impersonate their associated user including their access to projects and their project permissions."
+msgstr ""
+
+msgid "Troubleshoot and monitor your application with tracing"
+msgstr ""
+
+msgid "Try again"
+msgstr ""
+
+msgid "Try again?"
+msgstr ""
+
+msgid "Try all GitLab has to offer for 30 days."
+msgstr ""
+
+msgid "Try to fork again"
+msgstr ""
+
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
+msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
+msgstr ""
+
+msgid "Tuesday"
+msgstr ""
+
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
+msgid "Turn on Service Desk"
+msgstr ""
+
+msgid "Twitter"
+msgstr ""
+
+msgid "Two-Factor Authentication"
+msgstr ""
+
+msgid "Two-factor Authentication"
+msgstr ""
+
+msgid "Two-factor Authentication Recovery codes"
+msgstr ""
+
+msgid "Two-factor Authentication has been disabled for this user"
+msgstr ""
+
+msgid "Two-factor authentication"
+msgstr ""
+
+msgid "Type"
+msgstr ""
+
+msgid "U2F Devices (%{length})"
+msgstr ""
+
+msgid "U2F only works with HTTPS-enabled websites. Contact your administrator for more details."
+msgstr ""
+
+msgid "URL"
+msgstr ""
+
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
+msgid "Unable to connect to server: %{error}"
+msgstr ""
+
+msgid "Unable to generate new instance ID"
+msgstr ""
+
+msgid "Unable to load the diff. %{button_try_again}"
+msgstr ""
+
+msgid "Unable to resolve"
+msgstr ""
+
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
+msgid "Unable to schedule a pipeline to run immediately"
+msgstr ""
+
+msgid "Unable to sign you in to the group with SAML due to \"%{reason}\""
+msgstr ""
+
+msgid "Unable to update label prioritization at this time"
+msgstr ""
+
+msgid "Unable to update this epic at this time."
+msgstr ""
+
+msgid "Unable to update this issue at this time."
+msgstr ""
+
+msgid "Unarchive project"
+msgstr ""
+
+msgid "Unarchiving the project will restore people's ability to make changes to it. The repository can be committed to, and issues, comments and other entities can be created. <strong>Once active this project shows up in the search and on the dashboard.</strong>"
+msgstr ""
+
+msgid "Unblock"
+msgstr ""
+
+msgid "Undo"
+msgstr ""
+
+msgid "Unfortunately, your email message to GitLab could not be processed."
+msgstr ""
+
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Unknown encryption strategy: %{encrypted_strategy}!"
+msgstr ""
+
+msgid "Unknown format"
+msgstr ""
+
+msgid "Unknown response text"
+msgstr ""
+
+msgid "Unlimited"
+msgstr ""
+
+msgid "Unlock"
+msgstr ""
+
+msgid "Unlock the discussion"
+msgstr ""
+
+msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment."
+msgstr ""
+
+msgid "Unlocked"
+msgstr ""
+
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unresolve discussion"
+msgstr ""
+
+msgid "Unresolve thread"
+msgstr ""
+
+msgid "Unschedule job"
+msgstr ""
+
+msgid "Unstage"
+msgstr ""
+
+msgid "Unstage all changes"
+msgstr ""
+
+msgid "Unstage changes"
+msgstr ""
+
+msgid "Unstaged"
+msgstr ""
+
+msgid "Unstaged %{type}"
+msgstr ""
+
+msgid "Unstaged and staged %{type}"
+msgstr ""
+
+msgid "Unstar"
+msgstr ""
+
+msgid "Unsubscribe"
+msgstr ""
+
+msgid "Unsubscribe at group level"
+msgstr ""
+
+msgid "Unsubscribe at project level"
+msgstr ""
+
+msgid "Unsubscribe from %{type}"
+msgstr ""
+
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
+msgid "Unverified"
+msgstr ""
+
+msgid "Up to date"
+msgstr ""
+
+msgid "Upcoming"
+msgstr ""
+
+msgid "Upcoming Release"
+msgstr ""
+
+msgid "Update"
+msgstr ""
+
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
+msgstr ""
+
+msgid "Update failed"
+msgstr ""
+
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
+msgid "Update now"
+msgstr ""
+
+msgid "Update your bookmarked URLs as filtered/sorted branches URL has been changed."
+msgstr ""
+
+msgid "Update your group name, description, avatar, and visibility."
+msgstr ""
+
+msgid "Update your project name, topics, description and avatar."
+msgstr ""
+
+msgid "UpdateProject|Cannot rename project because it contains container registry tags!"
+msgstr ""
+
+msgid "UpdateProject|Could not set the default branch"
+msgstr ""
+
+msgid "UpdateProject|New visibility level not allowed!"
+msgstr ""
+
+msgid "UpdateProject|Project could not be updated!"
+msgstr ""
+
+msgid "Updated"
+msgstr ""
+
+msgid "Updated %{updated_at} by %{updated_by}"
+msgstr ""
+
+msgid "Updated to"
+msgstr ""
+
+msgid "Updating"
+msgstr ""
+
+msgid "Upgrade plan to unlock Canary Deployments feature"
+msgstr ""
+
+msgid "Upgrade your plan"
+msgstr ""
+
+msgid "Upgrade your plan to activate Advanced Global Search."
+msgstr ""
+
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
+msgid "Upgrade your plan to activate Contribution Analytics."
+msgstr ""
+
+msgid "Upgrade your plan to activate Group Webhooks."
+msgstr ""
+
+msgid "Upgrade your plan to activate Issue weight."
+msgstr ""
+
+msgid "Upgrade your plan to improve Issue boards."
+msgstr ""
+
+msgid "Upgrade your plan to improve Merge Requests."
+msgstr ""
+
+msgid "Upload <code>GoogleCodeProjectHosting.json</code> here:"
+msgstr ""
+
+msgid "Upload CSV file"
+msgstr ""
+
+msgid "Upload New File"
+msgstr ""
+
+msgid "Upload a certificate for your domain with all intermediates"
+msgstr ""
+
+msgid "Upload a private key for your certificate"
+msgstr ""
+
+msgid "Upload file"
+msgstr ""
+
+msgid "Upload file does not exist"
+msgstr ""
+
+msgid "Upload object map"
+msgstr ""
+
+msgid "UploadLink|click to upload"
+msgstr ""
+
+msgid "Uploaded on"
+msgstr ""
+
+msgid "Uploading changes to terminal"
+msgstr ""
+
+msgid "Uploads"
+msgstr ""
+
+msgid "Upstream"
+msgstr ""
+
+msgid "Upvotes"
+msgstr ""
+
+msgid "Usage"
+msgstr ""
+
+msgid "Usage ping is not enabled"
+msgstr ""
+
+msgid "Usage quotas help link"
+msgstr ""
+
+msgid "Usage statistics"
+msgstr ""
+
+msgid "UsageQuota|%{help_link_start}Shared runners%{help_link_end} are disabled, so there are no limits set on pipeline usage"
+msgstr ""
+
+msgid "UsageQuota|Artifacts"
+msgstr ""
+
+msgid "UsageQuota|Buy additional minutes"
+msgstr ""
+
+msgid "UsageQuota|Current period usage"
+msgstr ""
+
+msgid "UsageQuota|LFS Storage"
+msgstr ""
+
+msgid "UsageQuota|Packages"
+msgstr ""
+
+msgid "UsageQuota|Pipelines"
+msgstr ""
+
+msgid "UsageQuota|Repository"
+msgstr ""
+
+msgid "UsageQuota|Storage"
+msgstr ""
+
+msgid "UsageQuota|This namespace has no projects which use shared runners"
+msgstr ""
+
+msgid "UsageQuota|Unlimited"
+msgstr ""
+
+msgid "UsageQuota|Usage"
+msgstr ""
+
+msgid "UsageQuota|Usage Quotas"
+msgstr ""
+
+msgid "UsageQuota|Usage of group resources across the projects in the %{strong_start}%{group_name}%{strong_end} group"
+msgstr ""
+
+msgid "UsageQuota|Usage since"
+msgstr ""
+
+msgid "UsageQuota|Wiki"
+msgstr ""
+
+msgid "Use %{code_start}::%{code_end} to create a %{link_start}scoped label set%{link_end} (eg. %{code_start}priority::1%{code_end})"
+msgstr ""
+
+msgid "Use <code>%{native_redirect_uri}</code> for local tests"
+msgstr ""
+
+msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
+msgstr ""
+
+msgid "Use a hardware device to add the second factor of authentication."
+msgstr ""
+
+msgid "Use an one time password authenticator on your mobile device or computer to enable two-factor authentication (2FA)."
+msgstr ""
+
+msgid "Use group milestones to manage issues from multiple projects in the same milestone."
+msgstr ""
+
+msgid "Use one line per URI"
+msgstr ""
+
+msgid "Use template"
+msgstr ""
+
+msgid "Use the following registration token during setup:"
+msgstr ""
+
+msgid "Use your global notification setting"
+msgstr ""
+
+msgid "Use your smart card to authenticate with the LDAP server."
+msgstr ""
+
+msgid "Used by members to sign in to your group in GitLab"
+msgstr ""
+
+msgid "Used to help configure your identity provider"
+msgstr ""
+
+msgid "User %{current_user_username} has started impersonating %{username}"
+msgstr ""
+
+msgid "User %{username} was successfully removed."
+msgstr ""
+
+msgid "User Cohorts are only shown when the %{usage_ping_link_start}usage ping%{usage_ping_link_end} is enabled."
+msgstr ""
+
+msgid "User OAuth applications"
+msgstr ""
+
+msgid "User Settings"
+msgstr ""
+
+msgid "User and IP Rate Limits"
+msgstr ""
+
+msgid "User identity was successfully created."
+msgstr ""
+
+msgid "User identity was successfully removed."
+msgstr ""
+
+msgid "User identity was successfully updated."
+msgstr ""
+
+msgid "User key was successfully removed."
+msgstr ""
+
+msgid "User map"
+msgstr ""
+
+msgid "User pipeline minutes were successfully reset."
+msgstr ""
+
+msgid "User settings"
+msgstr ""
+
+msgid "User was successfully created."
+msgstr ""
+
+msgid "User was successfully removed from group and any subresources."
+msgstr ""
+
+msgid "User was successfully removed from project."
+msgstr ""
+
+msgid "User was successfully updated."
+msgstr ""
+
+msgid "UserOnboardingTour|%{activeTour}/%{totalTours}"
+msgstr ""
+
+msgid "UserOnboardingTour|%{completed}/%{total} steps completed"
+msgstr ""
+
+msgid "UserOnboardingTour|%{emphasisStart}Well done!%{emphasisEnd}%{lineBreak}%{lineBreak}That's it for our guided tour, congratulations for making it all the way to the end!%{lineBreak}%{lineBreak}We hope this gave you a good overview of GitLab and how it can help you. We'll now show you how to create your own project and invite your colleagues."
+msgstr ""
+
+msgid "UserOnboardingTour|Adding other members to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Alright, that's it for Commits. Let's take a look at the %{emphasisStart}Branches%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Awesome! Now click on %{emphasisStart}Members%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Click on one of the %{emphasisStart}Compare%{emphasisEnd} buttons to compare a branch to master."
+msgstr ""
+
+msgid "UserOnboardingTour|Click on one of the %{emphasisStart}pipeline IDs%{emphasisEnd} to see the details of a pipeline."
+msgstr ""
+
+msgid "UserOnboardingTour|Click to open the latest commit to see its details."
+msgstr ""
+
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
+msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
+msgstr ""
+
+msgid "UserOnboardingTour|Create a project"
+msgstr ""
+
+msgid "UserOnboardingTour|Exit 'Learn GitLab'"
+msgstr ""
+
+msgid "UserOnboardingTour|Got it"
+msgstr ""
+
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
+msgid "UserOnboardingTour|Guided GitLab Tour"
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can compare the changes of this branch to another one. Changes are divided by files so that it's easier to see what was changed where."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Choose a way to create a project and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can see the breakdown of the pipelines: its stages and jobs in each of the stages and their status.%{lineBreak}%{lineBreak}Our CI/CD pipelines are quite complex, most of our users have fewer and simpler pipelines."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can see the current members of the project (just you at the moment) and invite new members.%{lineBreak}%{lineBreak}You can invite multiple members at once (existing GitLab users or invite by email) and you can also set their roles and permissions.%{lineBreak}%{lineBreak}Add a few members and click on %{emphasisStart}Add to project%{emphasisEnd} to complete this step."
+msgstr ""
+
+msgid "UserOnboardingTour|Here you can see what changes were made with this commit, on what branch and if there's a related merge request. The status of the pipeline will also show up if CI/CD is set up.%{lineBreak}%{lineBreak}You can also comment on the lines of code that were changed and start a discussion with your colleagues!"
+msgstr ""
+
+msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}%{projectName}%{emphasisEnd} project. They're split into Active and Stale.%{lineBreak}%{lineBreak}From here, you can create a new merge request, from a branch or compare the branch to any other branch in the project. By default, it will compare it to the master branch."
+msgstr ""
+
+msgid "UserOnboardingTour|Invite colleagues"
+msgstr ""
+
+msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progess in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks like when the list is filtered by a label."
+msgstr ""
+
+msgid "UserOnboardingTour|Learn GitLab"
+msgstr ""
+
+msgid "UserOnboardingTour|Let's take a closer look at a merge request. Click on the title of one."
+msgstr ""
+
+msgid "UserOnboardingTour|Let's take a closer look at all the commits. Click on %{emphasisStart}Commits%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|Let's take a closer look at the repository of this project. Click on %{emphasisStart}Repository%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|No thanks"
+msgstr ""
+
+msgid "UserOnboardingTour|Ok, let's go"
+msgstr ""
+
+msgid "UserOnboardingTour|Ok, show me"
+msgstr ""
+
+msgid "UserOnboardingTour|Open one of the issues by clicking on its title."
+msgstr ""
+
+msgid "UserOnboardingTour|Restart this step"
+msgstr ""
+
+msgid "UserOnboardingTour|Skip this step"
+msgstr ""
+
+msgid "UserOnboardingTour|Sweet! Your project was created is is ready to be used.%{lineBreak}%{lineBreak}You can start adding files to the repository or clone it. One last thing we want to show you is how to invite your colleagues to your new project."
+msgstr ""
+
+msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
+msgstr ""
+
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
+msgstr ""
+
+msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|That's it for merge requests. Now for the finla part of this guided tour - the %{emphasisStart}CI/CD%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
+msgstr ""
+
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgstr ""
+
+msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
+msgstr ""
+
+msgid "UserOnboardingTour|These are all the CI/CD pipelines we have for our %{emphasisStart}%{projectName}%{emphasisEnd} project.%{lineBreak}%{lineBreak}Here you can see the status of each pipeline, for what commit it's running for, its stages and the status for them."
+msgstr ""
+
+msgid "UserOnboardingTour|These are all the issues that are available for community contributions. Let's take a closer look at one of them."
+msgstr ""
+
+msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
+msgstr ""
+
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgstr ""
+
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgstr ""
+
+msgid "UserProfile|Activity"
+msgstr ""
+
+msgid "UserProfile|Already reported for abuse"
+msgstr ""
+
+msgid "UserProfile|Contributed projects"
+msgstr ""
+
+msgid "UserProfile|Edit profile"
+msgstr ""
+
+msgid "UserProfile|Explore public groups to find projects to contribute to."
+msgstr ""
+
+msgid "UserProfile|Groups"
+msgstr ""
+
+msgid "UserProfile|Groups are the best way to manage projects and members."
+msgstr ""
+
+msgid "UserProfile|Join or create a group to start contributing by commenting on issues or submitting merge requests!"
+msgstr ""
+
+msgid "UserProfile|Most Recent Activity"
+msgstr ""
+
+msgid "UserProfile|No snippets found."
+msgstr ""
+
+msgid "UserProfile|Overview"
+msgstr ""
+
+msgid "UserProfile|Personal projects"
+msgstr ""
+
+msgid "UserProfile|Report abuse"
+msgstr ""
+
+msgid "UserProfile|Snippets"
+msgstr ""
+
+msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
+msgstr ""
+
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
+msgid "UserProfile|Subscribe"
+msgstr ""
+
+msgid "UserProfile|This user doesn't have any personal projects"
+msgstr ""
+
+msgid "UserProfile|This user has a private profile"
+msgstr ""
+
+msgid "UserProfile|This user hasn't contributed to any projects"
+msgstr ""
+
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
+msgid "UserProfile|View all"
+msgstr ""
+
+msgid "UserProfile|View user in admin area"
+msgstr ""
+
+msgid "UserProfile|You can create a group for several dependent projects."
+msgstr ""
+
+msgid "UserProfile|You haven't created any personal projects."
+msgstr ""
+
+msgid "UserProfile|You haven't created any snippets."
+msgstr ""
+
+msgid "UserProfile|Your projects can be available publicly, internally, or privately, at your choice."
+msgstr ""
+
+msgid "Username (optional)"
+msgstr ""
+
+msgid "Username is already taken."
+msgstr ""
+
+msgid "Username is available."
+msgstr ""
+
+msgid "Username or email"
+msgstr ""
+
+msgid "Users"
+msgstr ""
+
+msgid "Users outside of license"
+msgstr ""
+
+msgid "Users requesting access to"
+msgstr ""
+
+msgid "Users were successfully added."
+msgstr ""
+
+msgid "Users with a Guest role or those who don't belong to any projects or groups don't count towards seats in use."
+msgstr ""
+
+msgid "UsersSelect|%{name} + %{length} more"
+msgstr ""
+
+msgid "UsersSelect|Any User"
+msgstr ""
+
+msgid "UsersSelect|Assignee"
+msgstr ""
+
+msgid "UsersSelect|No assignee - %{openingTag} assign yourself %{closingTag}"
+msgstr ""
+
+msgid "UsersSelect|Unassigned"
+msgstr ""
+
+msgid "Using %{code_start}::%{code_end} denotes a %{link_start}scoped label set%{link_end}"
+msgstr ""
+
+msgid "Using required encryption strategy when encrypted field is missing!"
+msgstr ""
+
+msgid "Validate"
+msgstr ""
+
+msgid "Validate your GitLab CI configuration file"
+msgstr ""
+
+msgid "Validations failed."
+msgstr ""
+
+msgid "Validity"
+msgstr ""
+
+msgid "Value"
+msgstr ""
+
+msgid "Variables"
+msgstr ""
+
+msgid "Various container registry settings."
+msgstr ""
+
+msgid "Various email settings."
+msgstr ""
+
+msgid "Various localization settings."
+msgstr ""
+
+msgid "Various settings that affect GitLab performance."
+msgstr ""
+
+msgid "Verification information"
+msgstr ""
+
+msgid "Verification status"
+msgstr ""
+
+msgid "Verified"
+msgstr ""
+
+msgid "Version"
+msgstr ""
+
+msgid "Very helpful"
+msgstr ""
+
+msgid "View app"
+msgstr ""
+
+msgid "View dependency details for your project"
+msgstr ""
+
+msgid "View deployment"
+msgstr ""
+
+msgid "View details: %{details_url}"
+msgstr ""
+
+msgid "View documentation"
+msgstr ""
+
+msgid "View eligible approvers"
+msgstr ""
+
+msgid "View epics list"
+msgstr ""
+
+msgid "View file @ "
+msgstr ""
+
+msgid "View full dashboard"
+msgstr ""
+
+msgid "View group labels"
+msgstr ""
+
+msgid "View in Sentry"
+msgstr ""
+
+msgid "View it on GitLab"
+msgstr ""
+
+msgid "View job"
+msgstr ""
+
+msgid "View job trace"
+msgstr ""
+
+msgid "View jobs"
+msgstr ""
+
+msgid "View labels"
+msgstr ""
+
+msgid "View log"
+msgstr ""
+
+msgid "View open merge request"
+msgstr ""
+
+msgid "View project labels"
+msgstr ""
+
+msgid "View replaced file @ "
+msgstr ""
+
+msgid "View the documentation"
+msgstr ""
+
+msgid "Viewing commit"
+msgstr ""
+
+msgid "Visibility"
+msgstr ""
+
+msgid "Visibility and access controls"
+msgstr ""
+
+msgid "Visibility level"
+msgstr ""
+
+msgid "Visibility level:"
+msgstr ""
+
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Visibility, project features, permissions"
+msgstr ""
+
+msgid "Visibility:"
+msgstr ""
+
+msgid "VisibilityLevel|Internal"
+msgstr ""
+
+msgid "VisibilityLevel|Private"
+msgstr ""
+
+msgid "VisibilityLevel|Public"
+msgstr ""
+
+msgid "VisibilityLevel|Unknown"
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
+
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
+msgstr ""
+
+msgid "VisualReviewApp|Open review app"
+msgstr ""
+
+msgid "VisualReviewApp|Review"
+msgstr ""
+
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
+msgstr ""
+
+msgid "Vulnerabilities"
+msgstr ""
+
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
+msgstr ""
+
+msgid "Vulnerability|Class"
+msgstr ""
+
+msgid "Vulnerability|Confidence"
+msgstr ""
+
+msgid "Vulnerability|Description"
+msgstr ""
+
+msgid "Vulnerability|File"
+msgstr ""
+
+msgid "Vulnerability|Identifiers"
+msgstr ""
+
+msgid "Vulnerability|Image"
+msgstr ""
+
+msgid "Vulnerability|Instances"
+msgstr ""
+
+msgid "Vulnerability|Links"
+msgstr ""
+
+msgid "Vulnerability|Namespace"
+msgstr ""
+
+msgid "Vulnerability|Project"
+msgstr ""
+
+msgid "Vulnerability|Report Type"
+msgstr ""
+
+msgid "Vulnerability|Severity"
+msgstr ""
+
+msgid "Wait for the source to load to copy it to the clipboard"
+msgstr ""
+
+msgid "Waiting for performance data"
+msgstr ""
+
+msgid "Want to see the data? Please ask an administrator for access."
+msgstr ""
+
+msgid "We can't find an epic that matches what you are looking for."
+msgstr ""
+
+msgid "We can't find an issue that matches what you are looking for."
+msgstr ""
+
+msgid "We could not determine the path to remove the epic"
+msgstr ""
+
+msgid "We could not determine the path to remove the issue"
+msgstr ""
+
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
+msgstr ""
+
+msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
+msgstr ""
+
+msgid "We don't have enough data to show this stage."
+msgstr ""
+
+msgid "We heard back from your U2F device. You have been authenticated."
+msgstr ""
+
+msgid "We sent you an email with reset password instructions"
+msgstr ""
+
+msgid "We want to be sure it is you, please confirm you are not a robot."
+msgstr ""
+
+msgid "Web IDE"
+msgstr ""
+
+msgid "Web Terminal"
+msgstr ""
+
+msgid "Web terminal"
+msgstr ""
+
+msgid "Webhooks"
+msgstr ""
+
+msgid "Webhooks Help"
+msgstr ""
+
+msgid "Webhooks allow you to trigger a URL if, for example, new code is pushed or a new issue is created. You can configure webhooks to listen for specific events like pushes, issues or merge requests. Group webhooks will apply to all projects in a group, allowing you to standardize webhook functionality across your entire group."
+msgstr ""
+
+msgid "Wednesday"
+msgstr ""
+
+msgid "Weeks"
+msgstr ""
+
+msgid "Weight"
+msgstr ""
+
+msgid "Weight %{weight}"
+msgstr ""
+
+msgid "Welcome to the Guided GitLab Tour"
+msgstr ""
+
+msgid "Welcome to your Issue Board!"
+msgstr ""
+
+msgid "What are you searching for?"
+msgstr ""
+
+msgid "When a runner is locked, it cannot be assigned to other projects"
+msgstr ""
+
+msgid "When enabled, users cannot use GitLab until the terms have been accepted."
+msgstr ""
+
+msgid "When leaving the URL blank, classification labels can still be specified without disabling cross project features or performing external authorization checks."
+msgstr ""
+
+msgid "When this merge request is accepted"
+msgid_plural "When these merge requests are accepted"
+msgstr[0] ""
+
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
+msgid "When:"
+msgstr ""
+
+msgid "White helpers give contextual information."
+msgstr ""
+
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
+msgid "Who can see this group?"
+msgstr ""
+
+msgid "Who will be able to see this group?"
+msgstr ""
+
+msgid "Wiki"
+msgstr ""
+
+msgid "Wiki pages"
+msgstr ""
+
+msgid "Wiki was successfully updated."
+msgstr ""
+
+msgid "WikiClone|Clone your wiki"
+msgstr ""
+
+msgid "WikiClone|Git Access"
+msgstr ""
+
+msgid "WikiClone|Install Gollum"
+msgstr ""
+
+msgid "WikiClone|It is recommended to install %{markdown} so that GFM features render locally:"
+msgstr ""
+
+msgid "WikiClone|Start Gollum and edit locally"
+msgstr ""
+
+msgid "WikiEditPageTip|Tip: You can move this page by adding the path to the beginning of the title."
+msgstr ""
+
+msgid "WikiEdit|There is already a page with the same title in that path."
+msgstr ""
+
+msgid "WikiEmptyIssueMessage|Suggest wiki improvement"
+msgstr ""
+
+msgid "WikiEmptyIssueMessage|You must be a project member in order to add wiki pages. If you have suggestions for how to improve the wiki for this project, consider opening an issue in the %{issues_link}."
+msgstr ""
+
+msgid "WikiEmptyIssueMessage|issue tracker"
+msgstr ""
+
+msgid "WikiEmpty|A wiki is where you can store all the details about your project. This can include why you've created it, its principles, how to use it, and so on."
+msgstr ""
+
+msgid "WikiEmpty|Create your first page"
+msgstr ""
+
+msgid "WikiEmpty|Suggest wiki improvement"
+msgstr ""
+
+msgid "WikiEmpty|The wiki lets you write documentation for your project"
+msgstr ""
+
+msgid "WikiEmpty|This project has no wiki pages"
+msgstr ""
+
+msgid "WikiEmpty|You must be a project member in order to add wiki pages."
+msgstr ""
+
+msgid "WikiHistoricalPage|This is an old version of this page."
+msgstr ""
+
+msgid "WikiHistoricalPage|You can view the %{most_recent_link} or browse the %{history_link}."
+msgstr ""
+
+msgid "WikiHistoricalPage|history"
+msgstr ""
+
+msgid "WikiHistoricalPage|most recent version"
+msgstr ""
+
+msgid "WikiMarkdownDocs|More examples are in the %{docs_link}"
+msgstr ""
+
+msgid "WikiMarkdownDocs|documentation"
+msgstr ""
+
+msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
+msgstr ""
+
+msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
+msgstr ""
+
+msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
+msgstr ""
+
+msgid "WikiPageConfirmDelete|Delete page"
+msgstr ""
+
+msgid "WikiPageConfirmDelete|Delete page %{pageTitle}?"
+msgstr ""
+
+msgid "WikiPageConflictMessage|Someone edited the page the same time you did. Please check out %{page_link} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
+msgid "WikiPageConflictMessage|the page"
+msgstr ""
+
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
+
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
+
+msgid "WikiPage|Write your content or drag files here…"
+msgstr ""
+
+msgid "Wiki|Create New Page"
+msgstr ""
+
+msgid "Wiki|Create page"
+msgstr ""
+
+msgid "Wiki|Created date"
+msgstr ""
+
+msgid "Wiki|Edit Page"
+msgstr ""
+
+msgid "Wiki|More Pages"
+msgstr ""
+
+msgid "Wiki|New page"
+msgstr ""
+
+msgid "Wiki|Page history"
+msgstr ""
+
+msgid "Wiki|Page title"
+msgstr ""
+
+msgid "Wiki|Page version"
+msgstr ""
+
+msgid "Wiki|Pages"
+msgstr ""
+
+msgid "Wiki|Title"
+msgstr ""
+
+msgid "Wiki|Wiki Pages"
+msgstr ""
+
+msgid "Will deploy to"
+msgstr ""
+
+msgid "With contribution analytics you can have an overview for the activity of issues, merge requests and push events of your organization and its members."
+msgstr ""
+
+msgid "Withdraw Access Request"
+msgstr ""
+
+msgid "Workflow Help"
+msgstr ""
+
+msgid "Write"
+msgstr ""
+
+msgid "Write a comment or drag your files here…"
+msgstr ""
+
+msgid "Write a comment…"
+msgstr ""
+
+msgid "Write access allowed"
+msgstr ""
+
+msgid "Write milestone description..."
+msgstr ""
+
+msgid "Wrong extern UID provided. Make sure Auth0 is configured correctly."
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "Yes or No"
+msgstr ""
+
+msgid "Yes, add it"
+msgstr ""
+
+msgid "Yes, let me map Google Code users to full names or GitLab users."
+msgstr ""
+
+msgid "Yesterday"
+msgstr ""
+
+msgid "You"
+msgstr ""
+
+msgid "You are an admin, which means granting access to <strong>%{client_name}</strong> will allow them to interact with GitLab as an admin as well. Proceed with caution."
+msgstr ""
+
+msgid "You are attempting to delete a file that has been previously updated."
+msgstr ""
+
+msgid "You are attempting to update a file that has changed since you started editing it."
+msgstr ""
+
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
+msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are going to remove %{project_full_name}. Removed project CANNOT be restored! Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
+msgstr ""
+
+msgid "You are not allowed to unlink your primary login account"
+msgstr ""
+
+msgid "You are now impersonating %{username}"
+msgstr ""
+
+msgid "You are on a read-only GitLab instance."
+msgstr ""
+
+msgid "You are receiving this message because you are a GitLab administrator for %{url}."
+msgstr ""
+
+msgid "You can %{linkStart}view the blob%{linkEnd} instead."
+msgstr ""
+
+msgid "You can also create a project from the command line."
+msgstr ""
+
+msgid "You can also press &#8984;-Enter"
+msgstr ""
+
+msgid "You can also press Ctrl-Enter"
+msgstr ""
+
+msgid "You can also star a label to make it a priority label."
+msgstr ""
+
+msgid "You can also test your %{gitlab_ci_yml} in %{lint_link_start}CI Lint%{lint_link_end}"
+msgstr ""
+
+msgid "You can also upload existing files from your computer using the instructions below."
+msgstr ""
+
+msgid "You can create files directly in GitLab using one of the following options."
+msgstr ""
+
+msgid "You can easily contribute to them by requesting to join these groups."
+msgstr ""
+
+msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
+msgstr ""
+
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
+msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
+msgstr ""
+
+msgid "You can invite a new member to <strong>%{project_name}</strong>."
+msgstr ""
+
+msgid "You can invite another group to <strong>%{project_name}</strong>."
+msgstr ""
+
+msgid "You can move around the graph by using the arrow keys."
+msgstr ""
+
+msgid "You can now submit a merge request to get this change into the original branch."
+msgstr ""
+
+msgid "You can now submit a merge request to get this change into the original project."
+msgstr ""
+
+msgid "You can only add files when you are on a branch"
+msgstr ""
+
+msgid "You can only edit files when you are on a branch"
+msgstr ""
+
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
+msgstr ""
+
+msgid "You can only transfer the project to namespaces you manage."
+msgstr ""
+
+msgid "You can resolve the merge conflict using either the Interactive mode, by choosing %{use_ours} or %{use_theirs} buttons, or by editing the files directly. Commit these changes into %{branch_name}"
+msgstr ""
+
+msgid "You can see your chat accounts."
+msgstr ""
+
+msgid "You can set up jobs to only use Runners with specific tags. Separate tags with commas."
+msgstr ""
+
+msgid "You can specify notification level per group or per project."
+msgstr ""
+
+msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
+msgstr ""
+
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
+msgid "You cannot impersonate a blocked user"
+msgstr ""
+
+msgid "You cannot impersonate a user who cannot log in"
+msgstr ""
+
+msgid "You cannot impersonate an internal user"
+msgstr ""
+
+msgid "You cannot play this scheduled pipeline at the moment. Please wait a minute."
+msgstr ""
+
+msgid "You cannot write to a read-only secondary GitLab Geo instance. Please use %{link_to_primary_node} instead."
+msgstr ""
+
+msgid "You cannot write to this read-only GitLab instance."
+msgstr ""
+
+msgid "You could not create a new trigger."
+msgstr ""
+
+msgid "You do not have any subscriptions yet"
+msgstr ""
+
+msgid "You do not have permission to leave this %{namespaceType}."
+msgstr ""
+
+msgid "You do not have permission to run the Web Terminal. Please contact a project administrator."
+msgstr ""
+
+msgid "You do not have the correct permissions to override the settings from the LDAP group sync."
+msgstr ""
+
+msgid "You don't have any U2F devices registered yet."
+msgstr ""
+
+msgid "You don't have any active chat names."
+msgstr ""
+
+msgid "You don't have any applications"
+msgstr ""
+
+msgid "You don't have any authorized applications"
+msgstr ""
+
+msgid "You don't have any deployments right now."
+msgstr ""
+
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
+msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
+msgstr ""
+
+msgid "You have been granted %{access_level} access to the %{source_name} %{source_type}."
+msgstr ""
+
+msgid "You have been granted %{member_human_access} access to %{label}."
+msgstr ""
+
+msgid "You have been unsubscribed from this thread."
+msgstr ""
+
+msgid "You have declined the invitation to join %{label}."
+msgstr ""
+
+msgid "You have no permissions"
+msgstr ""
+
+msgid "You have not added any approvers. Start by adding users or groups."
+msgstr ""
+
+msgid "You have reached your project limit"
+msgstr ""
+
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
+msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
+msgstr ""
+
+msgid "You may also add variables that are made available to the running application by prepending the variable key with <code>K8S_SECRET_</code>."
+msgstr ""
+
+msgid "You must accept our Terms of Service and privacy policy in order to register an account"
+msgstr ""
+
+msgid "You must have maintainer access to force delete a lock"
+msgstr ""
+
+msgid "You must have permission to create a project in a namespace before forking."
+msgstr ""
+
+msgid "You must provide a valid current password"
+msgstr ""
+
+msgid "You must provide your current password in order to change it."
+msgstr ""
+
+msgid "You need a different license to enable FileLocks feature"
+msgstr ""
+
+msgid "You need a different license to use Geo replication."
+msgstr ""
+
+msgid "You need git-lfs version %{min_git_lfs_version} (or greater) to continue. Please visit https://git-lfs.github.com"
+msgstr ""
+
+msgid "You need permission."
+msgstr ""
+
+msgid "You need to be logged in."
+msgstr ""
+
+msgid "You need to register a two-factor authentication app before you can set up a U2F device."
+msgstr ""
+
+msgid "You need to specify both an Access Token and a Host URL."
+msgstr ""
+
+msgid "You need to upload a GitLab project export archive (ending in .gz)."
+msgstr ""
+
+msgid "You need to upload a Google Takeout archive."
+msgstr ""
+
+msgid "You tried to fork %{link_to_the_project} but it failed for the following reason:"
+msgstr ""
+
+msgid "You will lose all changes you've made to this file. This action cannot be undone."
+msgstr ""
+
+msgid "You will lose all the unstaged changes you've made in this project. This action cannot be undone."
+msgstr ""
+
+msgid "You will need to update your local repositories to point to the new location."
+msgstr ""
+
+msgid "You will not get any notifications via email"
+msgstr ""
+
+msgid "You will only receive notifications for the events you choose"
+msgstr ""
+
+msgid "You will only receive notifications for threads you have participated in"
+msgstr ""
+
+msgid "You will receive notifications for any activity"
+msgstr ""
+
+msgid "You will receive notifications only for comments in which you were @mentioned"
+msgstr ""
+
+msgid "You won't be able to pull or push project code via %{protocol} until you %{set_password_link} on your account"
+msgstr ""
+
+msgid "You won't be able to pull or push project code via SSH until you %{add_ssh_key_link} to your profile"
+msgstr ""
+
+msgid "You won't be able to pull or push project code via SSH until you add an SSH key to your profile"
+msgstr ""
+
+msgid "You'll be signed out from your current account automatically."
+msgstr ""
+
+msgid "You'll need to use different branch names to get a valid comparison."
+msgstr ""
+
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
+msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
+msgstr ""
+
+msgid "You're not allowed to make changes to this project directly. A fork of this project is being created that you can make changes in, so you can submit a merge request."
+msgstr ""
+
+msgid "You're only seeing %{startTag}other activity%{endTag} in the feed. To add a comment, switch to one of the following options."
+msgstr ""
+
+msgid "You're receiving this email because %{reason}."
+msgstr ""
+
+msgid "You're receiving this email because of your account on %{host}."
+msgstr ""
+
+msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} &middot; %{help_link}"
+msgstr ""
+
+msgid "You've already enabled two-factor authentication using one time password authenticators. In order to register a different device, you must first disable two-factor authentication."
+msgstr ""
+
+msgid "YouTube"
+msgstr ""
+
+msgid "Your Commit Email will be used for web based operations, such as edits and merges."
+msgstr ""
+
+msgid "Your Conversational Development Index gives an overview of how you are using GitLab from a feature perspective. View how you compare with other organizations, discover features you are not using, and learn best practices through blog posts and white papers."
+msgstr ""
+
+msgid "Your Default Notification Email will be used for account notifications if a %{openingTag}group-specific email address%{closingTag} is not set."
+msgstr ""
+
+msgid "Your GPG keys (%{count})"
+msgstr ""
+
+msgid "Your Groups"
+msgstr ""
+
+msgid "Your New Personal Access Token"
+msgstr ""
+
+msgid "Your Primary Email will be used for avatar detection."
+msgstr ""
+
+msgid "Your Projects (default)"
+msgstr ""
+
+msgid "Your Projects' Activity"
+msgstr ""
+
+msgid "Your Public Email will be displayed on your public profile."
+msgstr ""
+
+msgid "Your SSH keys (%{count})"
+msgstr ""
+
+msgid "Your To-Do List"
+msgstr ""
+
+msgid "Your U2F device did not send a valid JSON response."
+msgstr ""
+
+msgid "Your U2F device needs to be set up. Plug it in (if not already) and click the button on the left."
+msgstr ""
+
+msgid "Your U2F device was registered!"
+msgstr ""
+
+msgid "Your access request to the %{source_type} has been withdrawn."
+msgstr ""
+
+msgid "Your account uses dedicated credentials for the \"%{group_name}\" group and can only be updated through SSO."
+msgstr ""
+
+msgid "Your applications (%{size})"
+msgstr ""
+
+msgid "Your authorized applications"
+msgstr ""
+
+msgid "Your browser doesn't support U2F. Please use Google Chrome desktop (version 41 or newer)."
+msgstr ""
+
+msgid "Your changes can be committed to %{branch_name} because a merge request is open."
+msgstr ""
+
+msgid "Your changes have been committed. Commit %{commitId} %{commitStats}"
+msgstr ""
+
+msgid "Your changes have been saved"
+msgstr ""
+
+msgid "Your changes have been successfully committed."
+msgstr ""
+
+msgid "Your comment could not be submitted! Please check your network connection and try again."
+msgstr ""
+
+msgid "Your comment could not be updated! Please check your network connection and try again."
+msgstr ""
+
+msgid "Your deployment services will be broken, you will need to manually fix the services after renaming."
+msgstr ""
+
+msgid "Your device was successfully set up! Give it a name and register it with the GitLab server."
+msgstr ""
+
+msgid "Your groups"
+msgstr ""
+
+msgid "Your issues are being imported. Once finished, you'll get a confirmation email."
+msgstr ""
+
+msgid "Your issues will be imported in the background. Once finished, you'll get a confirmation email."
+msgstr ""
+
+msgid "Your message here"
+msgstr ""
+
+msgid "Your name"
+msgstr ""
+
+msgid "Your new SCIM token"
+msgstr ""
+
+msgid "Your new personal access token has been created."
+msgstr ""
+
+msgid "Your pages are served under:"
+msgstr ""
+
+msgid "Your password reset token has expired."
+msgstr ""
+
+msgid "Your project limit is %{limit} projects! Please contact your administrator to increase it"
+msgstr ""
+
+msgid "Your projects"
+msgstr ""
+
+msgid "Your request for access has been queued for review."
+msgstr ""
+
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
+msgid "a deleted user"
+msgstr ""
+
+msgid "added %{created_at_timeago}"
+msgstr ""
+
+msgid "added a Zoom call to this issue"
+msgstr ""
+
+msgid "ago"
+msgstr ""
+
+msgid "allowed to fail"
+msgstr ""
+
+msgid "already being used for another group or project milestone."
+msgstr ""
+
+msgid "already shared with this group"
+msgstr ""
+
+msgid "among other things"
+msgstr ""
+
+msgid "assign yourself"
+msgstr ""
+
+msgid "attach a new file"
+msgstr ""
+
+msgid "authored"
+msgstr ""
+
+msgid "branch name"
+msgstr ""
+
+msgid "by"
+msgstr ""
+
+msgid "cannot be changed if a personal project has container registry tags."
+msgstr ""
+
+msgid "cannot be enabled unless all domains have TLS certificates"
+msgstr ""
+
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
+msgid "cannot block others"
+msgstr ""
+
+msgid "cannot include leading slash or directory traversal."
+msgstr ""
+
+msgid "cannot itself be blocked"
+msgstr ""
+
+msgid "cannot merge"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about DAST %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about Dependency Scanning %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{linkStartTag}Learn more about SAST %{linkEndTag}"
+msgstr ""
+
+msgid "ciReport|%{namespace} is affected by %{vulnerability}."
+msgstr ""
+
+msgid "ciReport|%{remainingPackagesCount} more"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerability"
+msgid_plural "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerabilities"
+msgstr[0] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerability for the source branch only"
+msgid_plural "ciReport|%{reportType} %{status} detected %{dismissedCount} dismissed vulnerabilities for the source branch only"
+msgstr[0] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerability"
+msgid_plural "ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerabilities"
+msgstr[0] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{fixedCount} fixed, and %{dismissedCount} dismissed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new vulnerability"
+msgid_plural "ciReport|%{reportType} %{status} detected %{newCount} new vulnerabilities"
+msgstr[0] ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, %{fixedCount} fixed, and %{dismissedCount} dismissed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, and %{dismissedCount} dismissed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, and %{dismissedCount} dismissed vulnerabilities for the source branch only"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} new, and %{fixedCount} fixed vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected %{newCount} vulnerability for the source branch only"
+msgid_plural "ciReport|%{reportType} %{status} detected %{newCount} vulnerabilities for the source branch only"
+msgstr[0] ""
+
+msgid "ciReport|%{reportType} %{status} detected no new vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected no vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} %{status} detected no vulnerabilities for the source branch only"
+msgstr ""
+
+msgid "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerability"
+msgid_plural "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerabilities"
+msgstr[0] ""
+
+msgid "ciReport|%{reportType} detected no vulnerabilities"
+msgstr ""
+
+msgid "ciReport|%{reportType} is loading"
+msgstr ""
+
+msgid "ciReport|%{reportType}: Loading resulted in an error"
+msgstr ""
+
+msgid "ciReport|%{vulnerability} in %{featurename}"
+msgstr ""
+
+msgid "ciReport|(errors when loading results)"
+msgstr ""
+
+msgid "ciReport|(is loading)"
+msgstr ""
+
+msgid "ciReport|(is loading, errors when loading results)"
+msgstr ""
+
+msgid "ciReport|All confidence levels"
+msgstr ""
+
+msgid "ciReport|All projects"
+msgstr ""
+
+msgid "ciReport|All report types"
+msgstr ""
+
+msgid "ciReport|All severities"
+msgstr ""
+
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
+msgid "ciReport|Class"
+msgstr ""
+
+msgid "ciReport|Code quality"
+msgstr ""
+
+msgid "ciReport|Confidence"
+msgstr ""
+
+msgid "ciReport|Container Scanning"
+msgstr ""
+
+msgid "ciReport|Container scanning"
+msgstr ""
+
+msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
+msgstr ""
+
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
+msgstr ""
+
+msgid "ciReport|Create issue"
+msgstr ""
+
+msgid "ciReport|DAST"
+msgstr ""
+
+msgid "ciReport|Dependency Scanning"
+msgstr ""
+
+msgid "ciReport|Dependency Scanning detects known vulnerabilities in your source code's dependencies."
+msgstr ""
+
+msgid "ciReport|Dependency scanning"
+msgstr ""
+
+msgid "ciReport|Description"
+msgstr ""
+
+msgid "ciReport|Download patch to resolve"
+msgstr ""
+
+msgid "ciReport|Download the patch to apply it manually"
+msgstr ""
+
+msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
+msgstr ""
+
+msgid "ciReport|Failed to load %{reportName} report"
+msgstr ""
+
+msgid "ciReport|File"
+msgstr ""
+
+msgid "ciReport|Fixed:"
+msgstr ""
+
+msgid "ciReport|Identifiers"
+msgstr ""
+
+msgid "ciReport|Image"
+msgstr ""
+
+msgid "ciReport|Instances"
+msgstr ""
+
+msgid "ciReport|Investigate this vulnerability by creating an issue"
+msgstr ""
+
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr ""
+
+msgid "ciReport|Links"
+msgstr ""
+
+msgid "ciReport|Loading %{reportName} report"
+msgstr ""
+
+msgid "ciReport|Manage licenses"
+msgstr ""
+
+msgid "ciReport|Method"
+msgstr ""
+
+msgid "ciReport|Namespace"
+msgstr ""
+
+msgid "ciReport|No changes to code quality"
+msgstr ""
+
+msgid "ciReport|No changes to performance metrics"
+msgstr ""
+
+msgid "ciReport|Performance metrics"
+msgstr ""
+
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
+msgid "ciReport|SAST"
+msgstr ""
+
+msgid "ciReport|Security scanning"
+msgstr ""
+
+msgid "ciReport|Security scanning failed loading any results"
+msgstr ""
+
+msgid "ciReport|Severity"
+msgstr ""
+
+msgid "ciReport|Solution"
+msgstr ""
+
+msgid "ciReport|Static Application Security Testing (SAST) detects known vulnerabilities in your source code."
+msgstr ""
+
+msgid "ciReport|There was an error creating the issue. Please try again."
+msgstr ""
+
+msgid "ciReport|There was an error creating the merge request. Please try again."
+msgstr ""
+
+msgid "ciReport|There was an error dismissing the vulnerability. Please try again."
+msgstr ""
+
+msgid "ciReport|There was an error loading DAST report"
+msgstr ""
+
+msgid "ciReport|There was an error loading SAST report"
+msgstr ""
+
+msgid "ciReport|There was an error loading container scanning report"
+msgstr ""
+
+msgid "ciReport|There was an error loading dependency scanning report"
+msgstr ""
+
+msgid "ciReport|There was an error reverting the dismissal. Please try again."
+msgstr ""
+
+msgid "ciReport|Upgrade %{name} from %{version} to %{fixed}."
+msgstr ""
+
+msgid "ciReport|Upgrade %{name} to %{fixed}."
+msgstr ""
+
+msgid "ciReport|Upgrade to %{fixed}."
+msgstr ""
+
+msgid "ciReport|Used by %{packagesString}"
+msgid_plural "ciReport|Used by %{packagesString}, and %{lastPackage}"
+msgstr[0] ""
+
+msgid "ciReport|View full report"
+msgstr ""
+
+msgid "comment"
+msgstr ""
+
+msgid "commented on %{link_to_project}"
+msgstr ""
+
+msgid "commit %{commit_id}"
+msgstr ""
+
+msgid "confidence|Confirmed"
+msgstr ""
+
+msgid "confidence|Experimental"
+msgstr ""
+
+msgid "confidence|High"
+msgstr ""
+
+msgid "confidence|Ignore"
+msgstr ""
+
+msgid "confidence|Low"
+msgstr ""
+
+msgid "confidence|Medium"
+msgstr ""
+
+msgid "confidence|Undefined"
+msgstr ""
+
+msgid "confidence|Unknown"
+msgstr ""
+
+msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue."
+msgstr ""
+
+msgid "confidentiality|You are going to turn on the confidentiality. This means that only team members with <strong>at least Reporter access</strong> are able to see and leave comments on the issue."
+msgstr ""
+
+msgid "connecting"
+msgstr ""
+
+msgid "could not read private key, is the passphrase correct?"
+msgstr ""
+
+msgid "created"
+msgstr ""
+
+msgid "customize"
+msgstr ""
+
+msgid "date must not be after 9999-12-31"
+msgstr ""
+
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+
+msgid "deleted"
+msgstr ""
+
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
+
+msgid "detached"
+msgstr ""
+
+msgid "disabled"
+msgstr ""
+
+msgid "done"
+msgstr ""
+
+msgid "draft"
+msgid_plural "drafts"
+msgstr[0] ""
+
+msgid "e.g. %{token}"
+msgstr ""
+
+msgid "element is not a hierarchy"
+msgstr ""
+
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "encrypted: needs to be a :required, :optional or :migrating!"
+msgstr ""
+
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
+msgstr ""
+
+msgid "error"
+msgstr ""
+
+msgid "error code:"
+msgstr ""
+
+msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command."
+msgstr ""
+
+msgid "expired on %{milestone_due_date}"
+msgstr ""
+
+msgid "expires on %{milestone_due_date}"
+msgstr ""
+
+msgid "failed"
+msgstr ""
+
+msgid "for %{link_to_merge_request} with %{link_to_merge_request_source_branch}"
+msgstr ""
+
+msgid "for %{link_to_merge_request} with %{link_to_merge_request_source_branch} into %{link_to_merge_request_target_branch}"
+msgstr ""
+
+msgid "for %{link_to_pipeline_ref}"
+msgstr ""
+
+msgid "for %{ref}"
+msgstr ""
+
+msgid "for this project"
+msgstr ""
+
+msgid "from"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "has already been taken"
+msgstr ""
+
+msgid "help"
+msgstr ""
+
+msgid "here"
+msgstr ""
+
+msgid "https://your-bitbucket-server"
+msgstr ""
+
+msgid "image diff"
+msgstr ""
+
+msgid "import flow"
+msgstr ""
+
+msgid "importing"
+msgstr ""
+
+msgid "in group %{link_to_group}"
+msgstr ""
+
+msgid "in project %{link_to_project}"
+msgstr ""
+
+msgid "index"
+msgstr ""
+
+msgid "instance completed"
+msgid_plural "instances completed"
+msgstr[0] ""
+
+msgid "invalid milestone state `%{state}`"
+msgstr ""
+
+msgid "is an invalid IP address range"
+msgstr ""
+
+msgid "is enabled."
+msgstr ""
+
+msgid "is invalid because there is downstream lock"
+msgstr ""
+
+msgid "is invalid because there is upstream lock"
+msgstr ""
+
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
+msgid "is not a valid X509 certificate."
+msgstr ""
+
+msgid "is not an email you own"
+msgstr ""
+
+msgid "is too long (maximum is 1000 entries)"
+msgstr ""
+
+msgid "issue"
+msgstr ""
+
+msgid "it is stored externally"
+msgstr ""
+
+msgid "it is stored in LFS"
+msgstr ""
+
+msgid "it is too large"
+msgstr ""
+
+msgid "jigsaw is not defined"
+msgstr ""
+
+msgid "latest"
+msgstr ""
+
+msgid "latest deployment"
+msgstr ""
+
+msgid "latest version"
+msgstr ""
+
+msgid "leave %{group_name}"
+msgstr ""
+
+msgid "locked by %{path_lock_user_name} %{created_at}"
+msgstr ""
+
+msgid "log in"
+msgstr ""
+
+msgid "manual"
+msgstr ""
+
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
+msgid "merge request"
+msgid_plural "merge requests"
+msgstr[0] ""
+
+msgid "milestone should belong either to a project or a group."
+msgstr ""
+
+msgid "missing"
+msgstr ""
+
+msgid "mrWidgetCommitsAdded|%{commitCount} and %{mergeCommitCount} will be added to %{targetBranch}."
+msgstr ""
+
+msgid "mrWidgetCommitsAdded|%{commitCount} will be added to %{targetBranch}."
+msgstr ""
+
+msgid "mrWidgetCommitsAdded|1 merge commit"
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
+msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
+msgstr ""
+
+msgid "mrWidget|%{link_start}Learn more about resolving conflicts%{link_end}"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} decreased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage %{emphasisStart} increased %{emphasisEnd} from %{memoryFrom}MB to %{memoryTo}MB"
+msgstr ""
+
+msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
+msgstr ""
+
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
+msgid "mrWidget|Added to the merge train by"
+msgstr ""
+
+msgid "mrWidget|Allows commits from members who can merge to the target branch"
+msgstr ""
+
+msgid "mrWidget|An error occurred while removing your approval."
+msgstr ""
+
+msgid "mrWidget|An error occurred while retrieving approval data for this merge request."
+msgstr ""
+
+msgid "mrWidget|An error occurred while submitting your approval."
+msgstr ""
+
+msgid "mrWidget|Approval password is invalid."
+msgstr ""
+
+msgid "mrWidget|Approve"
+msgstr ""
+
+msgid "mrWidget|Approve additionally"
+msgstr ""
+
+msgid "mrWidget|Approved by"
+msgstr ""
+
+msgid "mrWidget|Cancel automatic merge"
+msgstr ""
+
+msgid "mrWidget|Check out branch"
+msgstr ""
+
+msgid "mrWidget|Checking ability to merge automatically"
+msgstr ""
+
+msgid "mrWidget|Cherry-pick"
+msgstr ""
+
+msgid "mrWidget|Cherry-pick this merge request in a new merge request"
+msgstr ""
+
+msgid "mrWidget|Closed"
+msgstr ""
+
+msgid "mrWidget|Closed by"
+msgstr ""
+
+msgid "mrWidget|Closes"
+msgstr ""
+
+msgid "mrWidget|Create an issue to resolve them later"
+msgstr ""
+
+msgid "mrWidget|Delete source branch"
+msgstr ""
+
+msgid "mrWidget|Deployment statistics are not available currently"
+msgstr ""
+
+msgid "mrWidget|Did not close"
+msgstr ""
+
+msgid "mrWidget|Email patches"
+msgstr ""
+
+msgid "mrWidget|Failed to load deployment statistics"
+msgstr ""
+
+msgid "mrWidget|Fast-forward merge is not possible. To merge this request, first rebase locally."
+msgstr ""
+
+msgid "mrWidget|Fork merge requests do not create merge request pipelines which validate a post merge result"
+msgstr ""
+
+msgid "mrWidget|If the %{branch} branch exists in your local repository, you can merge this merge request manually using the"
+msgstr ""
+
+msgid "mrWidget|If the %{missingBranchName} branch exists in your local repository, you can merge this merge request manually using the command line"
+msgstr ""
+
+msgid "mrWidget|Loading deployment statistics"
+msgstr ""
+
+msgid "mrWidget|Mentions"
+msgstr ""
+
+msgid "mrWidget|Merge"
+msgstr ""
+
+msgid "mrWidget|Merge failed."
+msgstr ""
+
+msgid "mrWidget|Merge failed: %{mergeError}. Please try again."
+msgstr ""
+
+msgid "mrWidget|Merge locally"
+msgstr ""
+
+msgid "mrWidget|Merge request approved."
+msgstr ""
+
+msgid "mrWidget|Merged by"
+msgstr ""
+
+msgid "mrWidget|More information"
+msgstr ""
+
+msgid "mrWidget|No approval required"
+msgstr ""
+
+msgid "mrWidget|No approval required; you can still approve"
+msgstr ""
+
+msgid "mrWidget|Open in Web IDE"
+msgstr ""
+
+msgid "mrWidget|Pipeline blocked. The pipeline for this merge request requires a manual action to proceed"
+msgstr ""
+
+msgid "mrWidget|Plain diff"
+msgstr ""
+
+msgid "mrWidget|Ready to be merged automatically. Ask someone with write access to this repository to merge this request"
+msgstr ""
+
+msgid "mrWidget|Refresh"
+msgstr ""
+
+msgid "mrWidget|Refresh now"
+msgstr ""
+
+msgid "mrWidget|Refreshing now"
+msgstr ""
+
+msgid "mrWidget|Remove from merge train"
+msgstr ""
+
+msgid "mrWidget|Request to merge"
+msgstr ""
+
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
+msgid "mrWidget|Resolve conflicts"
+msgstr ""
+
+msgid "mrWidget|Resolve these conflicts or ask someone with write access to this repository to merge it locally"
+msgstr ""
+
+msgid "mrWidget|Revert"
+msgstr ""
+
+msgid "mrWidget|Revert this merge request in a new merge request"
+msgstr ""
+
+msgid "mrWidget|Revoke approval"
+msgstr ""
+
+msgid "mrWidget|Set by"
+msgstr ""
+
+msgid "mrWidget|The changes were merged into"
+msgstr ""
+
+msgid "mrWidget|The changes were not merged into"
+msgstr ""
+
+msgid "mrWidget|The changes will be merged into"
+msgstr ""
+
+msgid "mrWidget|The pipeline for this merge request failed. Please retry the job or push a new commit to fix the failure"
+msgstr ""
+
+msgid "mrWidget|The source branch HEAD has recently changed. Please reload the page and review the changes before merging"
+msgstr ""
+
+msgid "mrWidget|The source branch has been deleted"
+msgstr ""
+
+msgid "mrWidget|The source branch is %{commitsBehindLinkStart}%{commitsBehind}%{commitsBehindLinkEnd} the target branch"
+msgstr ""
+
+msgid "mrWidget|The source branch is being deleted"
+msgstr ""
+
+msgid "mrWidget|The source branch will be deleted"
+msgstr ""
+
+msgid "mrWidget|The source branch will not be deleted"
+msgstr ""
+
+msgid "mrWidget|There are merge conflicts"
+msgstr ""
+
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
+
+msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
+msgstr ""
+
+msgid "mrWidget|This merge request failed to be merged automatically"
+msgstr ""
+
+msgid "mrWidget|This merge request is in the process of being merged"
+msgstr ""
+
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This project is archived, write access has been disabled"
+msgstr ""
+
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
+msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
+msgstr ""
+
+msgid "mrWidget|You can delete the source branch now"
+msgstr ""
+
+msgid "mrWidget|You can merge this merge request manually using the"
+msgstr ""
+
+msgid "mrWidget|Your password"
+msgstr ""
+
+msgid "mrWidget|branch does not exist."
+msgstr ""
+
+msgid "mrWidget|command line"
+msgstr ""
+
+msgid "mrWidget|into"
+msgstr ""
+
+msgid "mrWidget|to be added to the merge train when the pipeline succeeds"
+msgstr ""
+
+msgid "mrWidget|to be merged automatically when the pipeline succeeds"
+msgstr ""
+
+msgid "mrWidget|to start a merge train when the pipeline succeeds"
+msgstr ""
+
+msgid "must be greater than start date"
+msgstr ""
+
+msgid "n/a"
+msgstr ""
+
+msgid "needs to be between 10 minutes and 1 month"
+msgstr ""
+
+msgid "new merge request"
+msgstr ""
+
+msgid "no contributions"
+msgstr ""
+
+msgid "no one can merge"
+msgstr ""
+
+msgid "none"
+msgstr ""
+
+msgid "not found"
+msgstr ""
+
+msgid "notification emails"
+msgstr ""
+
+msgid "nounSeries|%{firstItem} and %{lastItem}"
+msgstr ""
+
+msgid "nounSeries|%{item}, %{nextItem}"
+msgstr ""
+
+msgid "nounSeries|%{item}, and %{lastItem}"
+msgstr ""
+
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
+
+msgid "out of %d total test"
+msgid_plural "out of %d total tests"
+msgstr[0] ""
+
+msgid "parent"
+msgid_plural "parents"
+msgstr[0] ""
+
+msgid "password"
+msgstr ""
+
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
+
+msgid "point"
+msgid_plural "points"
+msgstr[0] ""
+
+msgid "private"
+msgstr ""
+
+msgid "private key does not match certificate."
+msgstr ""
+
+msgid "processing"
+msgstr ""
+
+msgid "project"
+msgid_plural "projects"
+msgstr[0] ""
+
+msgid "project avatar"
+msgstr ""
+
+msgid "quick actions"
+msgstr ""
+
+msgid "register"
+msgstr ""
+
+msgid "released %{time}"
+msgstr ""
+
+msgid "remaining"
+msgstr ""
+
+msgid "remove"
+msgstr ""
+
+msgid "remove due date"
+msgstr ""
+
+msgid "remove weight"
+msgstr ""
+
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
+msgid "rendered diff"
+msgstr ""
+
+msgid "reply"
+msgid_plural "replies"
+msgstr[0] ""
+
+msgid "reset it."
+msgstr ""
+
+msgid "score"
+msgstr ""
+
+msgid "security Reports|There was an error creating the merge request"
+msgstr ""
+
+msgid "severity|Critical"
+msgstr ""
+
+msgid "severity|High"
+msgstr ""
+
+msgid "severity|Info"
+msgstr ""
+
+msgid "severity|Low"
+msgstr ""
+
+msgid "severity|Medium"
+msgstr ""
+
+msgid "severity|Undefined"
+msgstr ""
+
+msgid "severity|Unknown"
+msgstr ""
+
+msgid "should be greater than or equal to %{access} inherited membership from group %{group_name}"
+msgstr ""
+
+msgid "show less"
+msgstr ""
+
+msgid "sign in"
+msgstr ""
+
+msgid "sort:"
+msgstr ""
+
+msgid "source"
+msgstr ""
+
+msgid "source diff"
+msgstr ""
+
+msgid "specified top is not part of the tree"
+msgstr ""
+
+msgid "spendCommand|%{slash_command} will update the sum of the time spent."
+msgstr ""
+
+msgid "started"
+msgstr ""
+
+msgid "started on %{milestone_start_date}"
+msgstr ""
+
+msgid "starts on %{milestone_start_date}"
+msgstr ""
+
+msgid "stuck"
+msgstr ""
+
+msgid "success"
+msgstr ""
+
+msgid "syntax is correct"
+msgstr ""
+
+msgid "syntax is incorrect"
+msgstr ""
+
+msgid "this document"
+msgstr ""
+
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+
+msgid "to help your contributors communicate effectively!"
+msgstr ""
+
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
+msgid "triggered"
+msgstr ""
+
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
+msgid "updated"
+msgstr ""
+
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
+msgid "username"
+msgstr ""
+
+msgid "uses Kubernetes clusters to deploy your code!"
+msgstr ""
+
+msgid "verify ownership"
+msgstr ""
+
+msgid "version %{versionIndex}"
+msgstr ""
+
+msgid "via %{closed_via}"
+msgstr ""
+
+msgid "via merge request %{link}"
+msgstr ""
+
+msgid "view it on GitLab"
+msgstr ""
+
+msgid "view the blob"
+msgstr ""
+
+msgid "vulnerability|Add a comment or reason for dismissal"
+msgstr ""
+
+msgid "vulnerability|Add comment"
+msgstr ""
+
+msgid "vulnerability|Add comment & dismiss"
+msgstr ""
+
+msgid "vulnerability|Dismiss vulnerability"
+msgstr ""
+
+msgid "vulnerability|Save comment"
+msgstr ""
+
+msgid "vulnerability|Undo dismiss"
+msgstr ""
+
+msgid "vulnerability|dismissed"
+msgstr ""
+
+msgid "with %{additions} additions, %{deletions} deletions."
+msgstr ""
+
+msgid "within %d minute "
+msgid_plural "within %d minutes "
+msgstr[0] ""
+
+msgid "yaml invalid"
+msgstr ""
+
diff --git a/locale/zh_CN/gitlab.po b/locale/zh_CN/gitlab.po
index ff95d89a9b2..4b19f016a59 100644
--- a/locale/zh_CN/gitlab.po
+++ b/locale/zh_CN/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: zh-CN\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:43\n"
+"PO-Revision-Date: 2019-09-24 10:19\n"
+
+msgid " (from %{timeoutSource})"
+msgstr " (æ¥è‡ª %{timeoutSource})"
msgid " Please sign in."
msgstr " 请登录。"
@@ -27,6 +30,12 @@ msgstr " 您需è¦åœ¨ %{grace_period_deadline} 之å‰æ‰§è¡Œæ­¤æ“作。"
msgid " and"
msgstr "和"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " ä¸‹é™ %d 点"
@@ -38,12 +47,18 @@ msgstr[0] " æ高 %d 点"
msgid " or "
msgstr " 或 "
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr " 或<#epic id>"
msgid " or <#issue id>"
msgstr "或 <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%dæ¡è¯„论"
@@ -54,7 +69,11 @@ msgstr[0] "%d 次æ交"
msgid "%d commit behind"
msgid_plural "%d commits behind"
-msgstr[0] "è½åŽ %d 个æ交"
+msgstr[0] "è½åŽ%d个æ交"
+
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] "%d 次æ交,"
msgid "%d commits"
msgstr "%d 次æ交"
@@ -69,12 +88,16 @@ msgstr[0] "%d 导出器"
msgid "%d failed test result"
msgid_plural "%d failed test results"
-msgstr[0] "%d 个失败的测试结果"
+msgstr[0] "%d个失败的测试结果"
msgid "%d fixed test result"
msgid_plural "%d fixed test results"
msgstr[0] "%d 个确定的测试结果"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d 个议题"
@@ -93,16 +116,24 @@ msgstr[0] "%d 个åˆå¹¶è¯·æ±‚"
msgid "%d merge request that you don't have access to."
msgid_plural "%d merge requests that you don't have access to."
-msgstr[0] ""
+msgstr[0] "%d个您无法访问的åˆå¹¶è¯·æ±‚。"
msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d 个指标"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] "%d个更多评论"
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d 个已暂存的修改"
@@ -118,14 +149,14 @@ msgstr[0] "为æ高页é¢åŠ è½½é€Ÿåº¦åŠæ€§èƒ½ï¼Œå·²çœç•¥äº† %s 次æ交。"
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} 和 %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName}的讨论"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "ç”± %{commit_author_link} æ交于 %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
-msgstr "%{counter_repositories}个仓库, %{counter_wikis}个wikis, %{counter_build_artifacts}个构建产物, %{counter_lfs_objects}个LFS"
+msgid "%{count} LOC/commit"
+msgstr ""
msgid "%{count} approval required from %{name}"
msgid_plural "%{count} approvals required from %{name}"
@@ -134,8 +165,11 @@ msgstr[0] "éœ€è¦ %{name} çš„ %{count} 个核准"
msgid "%{count} approvals from %{name}"
msgstr "æ¥è‡ª %{name} çš„ %{count} 个核准"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
-msgstr "其余 %{count} 项"
+msgstr "其余%{count}项"
msgid "%{count} more assignees"
msgstr "åŠå…¶ä»–%{count}å指派人"
@@ -148,18 +182,30 @@ msgstr "%{count} / %{total}"
msgid "%{count} participant"
msgid_plural "%{count} participants"
-msgstr[0] "%{count} ä½å‚与者"
+msgstr[0] "%{count}ä½å‚与者"
msgid "%{count} pending comment"
msgid_plural "%{count} pending comments"
msgstr[0] "%{count}个待处ç†çš„评论"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr "%{edit_in_new_fork_notice} å°è¯•å†æ¬¡æ‹£é€‰æ­¤æ交。"
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr "%{edit_in_new_fork_notice} Try to revert this commit again."
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "%{filePath} 已删除"
@@ -175,6 +221,9 @@ msgstr "%{group_docs_link_start}群组%{group_docs_link_end} å…许您管ç†ã€å
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr "%{group_name}使用由群组管ç†çš„å¸æˆ·ã€‚您需è¦åˆ›å»ºä¸€ä¸ªæ–°çš„GitLabå¸æˆ·ï¼Œè¯¥å¸æˆ·å°†é€šè¿‡%{group_name}组æ¥ç®¡ç†ã€‚"
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "%{issuableType} 将被删除ï¼æ‚¨ç¡®å®šå—?"
@@ -182,7 +231,7 @@ msgid "%{label_for_message} unavailable"
msgstr "%{label_for_message}ä¸å¯ç”¨"
msgid "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free, automated, and open certificate authority (CA), that give digital certificates in order to enable HTTPS (SSL/TLS) for websites."
-msgstr "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} 是一个å…费且自动化的和开放的è¯ä¹¦é¢å‘机构(CA),æ供数字è¯ä¹¦ä»¥ä¾¿ä¸ºç½‘ç«™å¯ç”¨HTTPS(SSL / TLS)。"
+msgstr "%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}是一个å…费且自动化的和开放的è¯ä¹¦é¢å‘机构(CA),æ供数字è¯ä¹¦ä»¥ä¾¿ä¸ºç½‘ç«™å¯ç”¨HTTPS(SSL/TLS)。"
msgid "%{level_name} is not allowed in a %{group_level_name} group."
msgstr "%{level_name} ä¸å…许在 %{group_level_name} 组。"
@@ -190,18 +239,21 @@ msgstr "%{level_name} ä¸å…许在 %{group_level_name} 组。"
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr "由于派生的æºé¡¹ç›®å¯è§æ€§è¾ƒä½Žï¼Œå› æ­¤ä¸å…许使用%{level_name}。"
-msgid "%{level_name} visibility has been restricted by the administrator."
-msgstr "%{level_name} å¯è§æ€§å·²å—到管ç†å‘˜çš„é™åˆ¶ã€‚"
-
msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "%{link_start}查看更多%{link_end} 关于角色æƒé™"
+msgid "%{listToShow}, and %{awardsListLength} more."
+msgstr ""
+
msgid "%{loadingIcon} Started"
msgstr "%{loadingIcon} 已开始"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} 被GitLab用户 %{lock_user_id} é”定"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr "%{mrText},此议题将自动关闭。"
@@ -215,7 +267,7 @@ msgid "%{name}'s avatar"
msgstr "%{name} 的头åƒ"
msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
-msgstr "%{number_commits_behind} 个è½åŽ %{default_branch} 分支的æ交, %{number_commits_ahead} 个超å‰çš„æ交"
+msgstr "%{number_commits_behind}个è½åŽäºŽ%{default_branch}分支的æ交, åŒæ—¶%{number_commits_ahead}个超å‰çš„æ交"
msgid "%{openOrClose} %{noteable}"
msgstr "%{openOrClose} %{noteable}"
@@ -262,6 +314,9 @@ msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] "%{strong_start}%{tag_count}%{strong_end} 个标签"
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text}%{files}"
@@ -279,11 +334,23 @@ msgid "%{unstaged} unstaged and %{staged} staged changes"
msgstr "%{unstaged}个未暂存的更改åŠ%{staged}个已暂存的更改"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
-msgstr "%{usage_ping_link_start}了解更多%{usage_ping_link_end}关于GitLab Inc.的共享信æ¯ã€‚"
+msgstr "%{usage_ping_link_start}了解更多%{usage_ping_link_end}分享给GitLab Inc.çš„ä¿¡æ¯ã€‚"
+
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
msgid "%{user_name} profile page"
msgstr "%{user_name}的个人资料"
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr "%{verb} 耗时 %{time_spent_value}"
@@ -293,30 +360,45 @@ msgstr "“%{level}â€ä¸æ˜¯æœ‰æ•ˆçš„å¯è§æ€§çº§åˆ«"
msgid "'%{source}' is not a import source"
msgstr "'%{source}'ä¸æ˜¯ä¸€ä¸ªå¯¼å…¥æº"
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
-msgstr[0] ""
+msgstr[0] "(%d 已关闭)"
msgid "(%{mrCount} merged)"
-msgstr ""
+msgstr "(%{mrCount} å·²åˆå¹¶)"
msgid "(No changes)"
msgstr "(æ— å˜æ›´å†…容)"
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr "(检查进度)"
msgid "(external source)"
msgstr "(外部资æº)"
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
-msgstr "+ 其余 %{count} 项"
+msgstr "+ 其余%{count}项"
msgid "+ %{moreCount} more"
-msgstr "+ 其余 %{moreCount} 项"
+msgstr "+ 其余%{moreCount}项"
+
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
msgid "+%{extraOptionCount} more"
-msgstr "+其余 %{extraOptionCount} 项"
+msgstr "+其余%{extraOptionCount}项"
msgid ", or "
msgstr ",或"
@@ -347,11 +429,11 @@ msgstr[0] "%d天"
msgid "1 closed issue"
msgid_plural "%{issues} closed issues"
-msgstr[0] ""
+msgstr[0] "%{issues}个已关闭的议题"
msgid "1 closed merge request"
msgid_plural "%{merge_requests} closed merge requests"
-msgstr[0] ""
+msgstr[0] "%{merge_requests}个已关闭的åˆå¹¶è¯·æ±‚"
msgid "1 day"
msgstr "1天"
@@ -362,15 +444,15 @@ msgstr[0] "%d 个群组"
msgid "1 merged merge request"
msgid_plural "%{merge_requests} merged merge requests"
-msgstr[0] ""
+msgstr[0] "%{merge_requests}个已åˆå¹¶çš„åˆå¹¶è¯·æ±‚"
msgid "1 open issue"
msgid_plural "%{issues} open issues"
-msgstr[0] ""
+msgstr[0] "%{issues}个未关闭的问题"
msgid "1 open merge request"
msgid_plural "%{merge_requests} open merge requests"
-msgstr[0] ""
+msgstr[0] "%{merge_requests}个开å¯ä¸­çš„åˆå¹¶è¯·æ±‚"
msgid "1 pipeline"
msgid_plural "%d pipelines"
@@ -402,9 +484,6 @@ msgstr "20-29项贡献"
msgid "2FA"
msgstr "åŒé‡è®¤è¯"
-msgid "2FA enabled"
-msgstr "åŒé‡è®¤è¯å¼€å¯"
-
msgid "2FADevice|Registered On"
msgstr "注册于"
@@ -453,6 +532,9 @@ msgstr "<code>“johnsmith@example.comâ€ï¼šâ€œ@ johnsmithâ€</code> 将会把â€
msgid "<no name set>"
msgstr "<未设置å称>"
+msgid "<no scopes selected>"
+msgstr "<未选择范围>"
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} 未暂存</strong> å’Œ <strong>%{stagedFilesLength} 已暂存</strong> å˜æ›´å†…容"
@@ -489,6 +571,9 @@ msgstr "一个Hugo站点,它使用NetLifyæ¥ä»£æ›¿Gitlabçš„CI/CD,但ä»ç„¶å…
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr "一个Jekyll站点,它使用NetLifyæ¥ä»£æ›¿Gitlabçš„CI/CD,但ä»ç„¶å…·æœ‰æ‰€æœ‰å…¶ä»–主è¦çš„Gitlab功能。"
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr "将使用您的电å­é‚®ä»¶åœ°å€ä¸ºæ­¤GitLab安装并é…ç½®Let's Encryptå¸æˆ·ã€‚您将收到è¯ä¹¦å³å°†åˆ°æœŸçš„警告电å­é‚®ä»¶ã€‚"
@@ -502,7 +587,7 @@ msgid "A fork is a copy of a project.<br />Forking a repository allows you to ma
msgstr "派生是项目的副本。<br />仓库的派生å…许您在ä¸å½±å“原始项目的情况下进行更改。"
msgid "A member of the abuse team will review your report as soon as possible."
-msgstr ""
+msgstr "GitLab滥用审查团队æˆå‘˜å°†ä¼šå°½å¿«æŸ¥çœ‹æ‚¨çš„报告。"
msgid "A new branch will be created in your fork and a new merge request will be started."
msgstr "将在派生(fork)项目中中创建一个新的分支, 并开å¯ä¸€ä¸ªæ–°çš„åˆå¹¶è¯·æ±‚。"
@@ -525,6 +610,9 @@ msgstr "适用于iOS Swift应用的éšæ—¶å¯ç”¨çš„模æ¿ã€‚"
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "用于在作业日志中查找匹é…测试覆盖率输出的正则表达å¼ã€‚留空则ç¦ç”¨"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "具有对æºåˆ†æ”¯çš„写入æƒé™çš„用户选择了此选项"
@@ -534,6 +622,9 @@ msgstr "API帮助"
msgid "API Token"
msgstr "API令牌"
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr "关于 GitLab"
@@ -588,6 +679,66 @@ msgstr "角色"
msgid "AccessDropdown|Users"
msgstr "用户"
+msgid "AccessTokens|Access Tokens"
+msgstr "访问令牌"
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr "您确定é‡ç½®Feed令牌å—?当å‰æ­£åœ¨ä½¿ç”¨çš„所有RSS或日历URL都将åœæ­¢å·¥ä½œã€‚"
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr "你确定è¦é‡ç½®è¿›å…¥ç”µå­é‚®ä»¶ä»¤ç‰Œä¹ˆï¼Ÿæ‰€ä»¥ä½¿ç”¨å½“å‰ä»¤ç‰Œçš„议题邮件地å€éƒ½å°†åœæ­¢å·¥ä½œã€‚"
+
+msgid "AccessTokens|Created"
+msgstr "已创建"
+
+msgid "AccessTokens|Feed token"
+msgstr "Feed令牌"
+
+msgid "AccessTokens|Incoming email token"
+msgstr "传入电å­é‚®ä»¶ä»¤ç‰Œ"
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr "该令牌无法用于访问其它数æ®ã€‚"
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "请确ä¿è¯¥ä»¤ç‰Œçš„安全。任何æŒæœ‰è¯¥ä»¤ç‰Œçš„人,都å¯ä»¥ä»¥ä½ çš„身份æ¥åˆ›å»ºè®®é¢˜ã€‚如果令牌泄露,你应该%{link_reset_it} 。"
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr "请确ä¿è¯¥ä»¤ç‰Œçš„安全。任何æŒæœ‰è¯¥ä»¤ç‰Œçš„人,都å¯ä»¥ä»¥ä½ çš„身份æ¥é€šè¿‡RSSç§å­é˜…读你的活动以åŠé—®é¢˜åˆ—表信æ¯ã€‚如果令牌泄露,你应该%{link_reset_it} 。"
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr "个人访问令牌"
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr "当您å¯ç”¨ä¸¤æ­¥è®¤è¯(2FA)时,它们将是唯一å¯æŽ¥å—的密ç ã€‚"
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr "您还å¯ä»¥ä½¿ç”¨ä¸ªäººè®¿é—®ä»¤ç‰Œé€šè¿‡HTTP进行Git验è¯ã€‚"
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr "您å¯ä»¥ä¸ºéœ€è¦è®¿é—®GitLab APIçš„æ¯ä¸ªåº”用程åºç”Ÿæˆä¸ªäººè®¿é—®ä»¤ç‰Œã€‚"
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr "当你的RSS阅读器加载个人RSSç§å­çš„时候或者在您的日历应用加载个人日历时,将使用你的RSS令牌æ¥è¿›è¡Œè®¤è¯ï¼Œå¹¶ä¸”会包å«åœ¨è¿™äº›feed URL里。"
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr "当你使用电å­é‚®ä»¶åˆ›å»ºæ–°è®®é¢˜çš„时候,将使用接收邮件令牌进行验è¯ï¼Œè¯¥ä»¤ç‰Œä¹ŸåŒ…å«åœ¨ä¸ªäººçš„项目特定的电å­é‚®ä»¶åœ°å€ä¸­ã€‚"
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr "é‡ç½®ä»¤ç‰Œ"
+
msgid "Account"
msgstr "å¸å·"
@@ -606,6 +757,9 @@ msgstr "å¯ç”¨æœåŠ¡å°"
msgid "Active"
msgstr "å¯ç”¨"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr "活动的 %{type} 令牌 (%{token_length})"
+
msgid "Active Sessions"
msgstr "活动会è¯"
@@ -615,12 +769,19 @@ msgstr "动æ€"
msgid "Add"
msgstr "添加"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] "添加%d个议题"
+
msgid "Add CHANGELOG"
msgstr "添加更新日志"
msgid "Add CONTRIBUTING"
msgstr "添加贡献信æ¯"
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "添加组 Webhooks å’Œ GitLab ä¼ä¸šç‰ˆã€‚"
@@ -633,12 +794,27 @@ msgstr "添加 Kubernetes 集群"
msgid "Add README"
msgstr "添加自述文件"
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr "增加一个 %{type} 令牌"
+
msgid "Add a GPG key"
msgstr "添加GPG密钥"
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr "添加一个符å·åˆ—表"
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "添加一般评论 %{noteable_name}。"
@@ -657,9 +833,6 @@ msgstr "添加表格"
msgid "Add a task list"
msgstr "添加任务列表"
-msgid "Add a todo"
-msgstr "添加一个待办事项"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "添加包å«åœ¨æ‰€æœ‰ç”µå­é‚®ä»¶ä¸­çš„附加文本。 长度ä¸è¶…过%{character_limit} 字符"
@@ -667,6 +840,9 @@ msgid "Add an SSH key"
msgstr "添加SSH密钥"
msgid "Add an issue"
+msgstr "添加一个议题"
+
+msgid "Add approval rule"
msgstr ""
msgid "Add approvers"
@@ -682,7 +858,7 @@ msgid "Add comment now"
msgstr "ç«‹å³æ·»åŠ è¯„论"
msgid "Add email address"
-msgstr ""
+msgstr "添加电å­é‚®ä»¶åœ°å€"
msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface"
msgstr "添加页眉和页脚到电å­é‚®ä»¶ã€‚请注æ„,颜色设置仅适用于应用程åºç•Œé¢"
@@ -690,6 +866,9 @@ msgstr "添加页眉和页脚到电å­é‚®ä»¶ã€‚请注æ„,颜色设置仅适用
msgid "Add image comment"
msgstr "添加图片评论"
+msgid "Add issues"
+msgstr "添加议题"
+
msgid "Add italic text"
msgstr "添加斜体文本"
@@ -708,26 +887,35 @@ msgstr "新建应用"
msgid "Add new directory"
msgstr "添加目录"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr "增加或å‡å°‘耗时"
msgid "Add reaction"
msgstr "添加回应"
-msgid "Add to merge train"
+msgid "Add to Slack"
msgstr ""
-msgid "Add to merge train when pipeline succeeds"
+msgid "Add to epic"
msgstr ""
+msgid "Add to merge train"
+msgstr "添加到åˆå¹¶åˆ—车"
+
+msgid "Add to merge train when pipeline succeeds"
+msgstr "æµæ°´çº¿æˆåŠŸæ—¶æ·»åŠ åˆ°åˆå¹¶åˆ—车"
+
msgid "Add to project"
msgstr "添加到项目"
msgid "Add to review"
msgstr "添加到评审"
-msgid "Add todo"
-msgstr "添加待办事项"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "å‘群组添加用户"
@@ -741,9 +929,27 @@ msgstr "未指定用户。"
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr "已指定太多用户(é™åˆ¶ä¸º %{user_limit})"
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr "添加时间"
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "当å‰GitLab实例ç¦æ­¢æ·»åŠ æ–°åº”用程åºã€‚请è”系您的GitLab管ç†å‘˜ä»¥èŽ·å¾—相关æƒé™ã€‚"
@@ -759,8 +965,17 @@ msgstr "添加"
msgid "Adds %{epic_ref} as child epic."
msgstr "添加%{epic_ref}作为å­å²è¯—。"
-msgid "Adds a todo."
-msgstr "添加一个待办事项."
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "管ç†ä¸­å¿ƒ"
@@ -795,6 +1010,9 @@ msgstr "åœæ­¢ä½œä¸šå¤±è´¥"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "您å³å°†åœæ­¢æ‰€æœ‰ä½œä¸šã€‚这会中断并结æŸæ‰€æœ‰æ­£åœ¨è¿è¡Œçš„作业。"
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr " 备注"
@@ -820,29 +1038,53 @@ msgid "AdminSettings|Environment variables are protected by default"
msgstr "环境å˜é‡é»˜è®¤å—ä¿æŠ¤"
msgid "AdminSettings|No required pipeline"
-msgstr ""
+msgstr "没有必需的æµæ°´çº¿"
msgid "AdminSettings|Required pipeline configuration"
-msgstr ""
+msgstr "强制æµæ°´çº¿é…ç½®"
msgid "AdminSettings|Select a pipeline configuration file"
-msgstr ""
+msgstr "选择æµæ°´çº¿é…置文件"
msgid "AdminSettings|Select a template"
-msgstr ""
+msgstr "选择模æ¿"
msgid "AdminSettings|Set an instance-wide auto included %{link_start}pipeline configuration%{link_end}. This pipeline configuration will be run after the project's own configuration."
-msgstr ""
+msgstr "设置一个实例范围自动包å«çš„%{link_start}æµæ°´çº¿é…ç½®%{link_end}。 该æµæ°´çº¿é…置将在项目本身的é…ç½®åŽè¿è¡Œã€‚"
msgid "AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages."
msgstr "为æ¯ä¸ªé¡¹ç›®çš„自动审阅应用 (Auto Review Apps) 和自动部署 (Auto Deploy) 阶段指定一个默认使用的域。"
msgid "AdminSettings|The required pipeline configuration can be selected from the %{code_start}gitlab-ci%{code_end} directory inside of the configured %{link_start}instance template repository%{link_end} or from GitLab provided configurations."
-msgstr ""
+msgstr "强制æµæ°´çº¿é…ç½®å¯ä»Ž%{link_start}实例模æ¿åº“%{link_end}中%{code_start}gitlab-ci%{code_end}目录选择或使用GitLabæ供的é…置。"
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "创建一个新的环境å˜é‡æ—¶ï¼Œå®ƒä¼šè¢«é»˜è®¤ä¿æŠ¤ã€‚"
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr "åŒé‡è®¤è¯å…³é—­"
@@ -937,6 +1179,12 @@ msgid "Alert"
msgid_plural "Alerts"
msgstr[0] "警报"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr "警报"
@@ -946,12 +1194,18 @@ msgstr "全部"
msgid "All Members"
msgstr "所有æˆå‘˜"
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "所有更改å‡å·²æ交"
-msgid "All email addresses will be used to identify your commits."
+msgid "All cross-project dependencies have merged"
msgstr ""
+msgid "All email addresses will be used to identify your commits."
+msgstr "所有电å­é‚®ä»¶åœ°å€éƒ½å¯ç”¨äºŽæ ‡è¯†æ‚¨çš„æ交。"
+
msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings."
msgstr "从模æ¿æˆ–导入时为空白项目将å¯ç”¨æ‰€æœ‰åŠŸèƒ½ï¼Œä½†å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­å°†å…¶ç¦ç”¨ã€‚"
@@ -967,9 +1221,6 @@ msgstr "所有åˆå¹¶å†²çªéƒ½å·²è§£å†³ã€‚æ­¤åˆå¹¶è¯·æ±‚现在å¯ä»¥åˆå¹¶ã€‚"
msgid "All projects"
msgstr "所有项目"
-msgid "All todos were marked as done."
-msgstr "所有待办事项都标记为已完æˆã€‚"
-
msgid "All users"
msgstr "所有用户"
@@ -1003,6 +1254,12 @@ msgstr "å…许在Asciidoc文档中渲染PlantUML图。"
msgid "Allow requests to the local network from hooks and services."
msgstr "å…许æ¥è‡ªé’©å­å’ŒæœåŠ¡çš„对本地网络的请求。"
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr "åŒæ—¶å…许此秘钥推é€æ–‡ä»¶åˆ°ä»“库å—?(默认åªæ‹¥æœ‰æ‹‰å–æƒé™)"
@@ -1015,6 +1272,9 @@ msgstr "å…许用户请求访问æƒé™"
msgid "Allow users to request access if visibility is public or internal."
msgstr "如果是公开或内部å¯è§æ€§ï¼Œåˆ™å…许用户请求访问æƒé™ã€‚"
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr "å…许失败"
@@ -1027,14 +1287,8 @@ msgstr "也称为“签å‘者â€æˆ–“ä¾èµ–方信任标识符â€"
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "也称为“ä¾èµ–æ–¹æœåŠ¡URLâ€æˆ–“回å¤URLâ€"
-msgid "Alternate support URL for help page"
-msgstr "帮助页é¢çš„å¤‡ç”¨æ”¯æŒ URL"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "此外,也å¯ä»¥ä½¿ç”¨ %{personal_access_token_link}。创建 Personal Access Token 时,在范围中需选择 <code>repo</code> ,以便显示å¯ä¾›è¿žæŽ¥çš„公开和ç§æœ‰çš„仓库列表。"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "此外,也å¯ä»¥ä½¿ç”¨ %{personal_access_token_link}。创建Personal Access Token时,在范围中需选择 <code>repo</code> ,以便显示å¯ä¾›å¯¼å…¥å…¬å¼€å’Œç§æœ‰çš„仓库列表"
+msgid "Alternate support URL for help page and help dropdown"
+msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "å…许用户跳过强制é…ç½®åŒé‡è®¤è¯çš„时间(以å°æ—¶ä¸ºå•ä½ï¼‰"
@@ -1048,8 +1302,8 @@ msgstr "空GitLab用户字段将在所有问题和注释的æ述中添加FogBug
msgid "An error has occurred"
msgstr "å‘生错误"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "å‘讨论添加è‰ç¨¿æ—¶å‡ºé”™ã€‚"
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "添加新è‰ç¨¿æ—¶å‡ºé”™ã€‚"
@@ -1108,6 +1362,9 @@ msgstr "获å–环境时出错。"
msgid "An error occurred while fetching folder content."
msgstr "获å–文件夹内容时å‘生错误."
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr "获å–标记颜色时出错。"
@@ -1145,11 +1402,14 @@ msgid "An error occurred while fetching the pipeline."
msgstr "获å–æµæ°´çº¿æ—¶å‘生错误"
msgid "An error occurred while fetching the releases. Please try again."
-msgstr "获å–版本时å‘生错误。请é‡è¯•ã€‚"
+msgstr "获å–å‘布时å‘生错误。请é‡è¯•ã€‚"
msgid "An error occurred while fetching this tab."
msgstr "获å–æ­¤é¢æ¿æ—¶å‘生了一个错误。"
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "获å–项目时å‘生错误"
@@ -1195,12 +1455,12 @@ msgstr "删除å²è¯—æ—¶å‘生错误。"
msgid "An error occurred while removing issues."
msgstr "删除议题时å‘生错误。"
-msgid "An error occurred while rendering KaTeX"
-msgstr "渲染KaTeXæ—¶å‘生错误"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "渲染广播消æ¯æ—¶å‘生错误"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "获å–日历动æ€æ—¶å‘生错误"
@@ -1219,6 +1479,12 @@ msgstr "ä¿å­˜æ ¸å‡†è®¾ç½®æ—¶å‘生错误"
msgid "An error occurred while subscribing to notifications."
msgstr "订阅通知时å‘生错误。"
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "å–消订阅通知时å‘生错误。"
@@ -1267,6 +1533,9 @@ msgstr "加载æµæ°´çº¿ä½œä¸šæ—¶å‘生错误。"
msgid "An error occurred. Please try again."
msgstr "å‘生了错误,请å†è¯•ä¸€æ¬¡ã€‚"
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr "议题å¯ä»¥æ˜¯éœ€è¦åœ¨é¡¹ç›®ä¸­è®¨è®ºçš„缺陷,待办事项或功能请求。此外,议题是å¯æœç´¢å’Œå¯è¿‡æ»¤çš„。"
+
msgid "An unexpected error occurred while checking the project environment."
msgstr "检查项目环境时å‘生æ„外错误。"
@@ -1285,6 +1554,9 @@ msgstr "åœæ­¢Web终端时å‘生æ„外错误。"
msgid "Analytics"
msgstr "分æž"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr "祖先"
@@ -1309,6 +1581,9 @@ msgstr "任何加密的令牌"
msgid "Any namespace"
msgstr "任何命å空间"
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "外观"
@@ -1351,6 +1626,9 @@ msgstr "应用"
msgid "Applied"
msgstr "已应用"
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr "应用建议"
@@ -1386,10 +1664,10 @@ msgid_plural "ApprovalRuleSummary|%{count} approvals required from %{membersCoun
msgstr[0] "%{membersCount} éœ€è¦ %{count} 个核准"
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
-msgstr "具有开å‘人员或更高级别角色的所有æˆå‘˜ä»¥åŠä»£ç æ‰€æœ‰è€…(如果有)"
+msgstr "具有开å‘人员或更高级别角色的所有æˆå‘˜ä»¥åŠä»£ç æ‰€æœ‰è€…(如存在)"
-msgid "ApprovalRule|Members"
-msgstr "æˆå‘˜"
+msgid "ApprovalRule|Approvers"
+msgstr ""
msgid "ApprovalRule|Name"
msgstr "å称"
@@ -1397,12 +1675,27 @@ msgstr "å称"
msgid "ApprovalRule|No. approvals required"
msgstr "需è¦æ ¸å‡†çš„æ•°é‡"
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr "例如质é‡ä¿è¯ã€å®‰å…¨ç­‰ç­‰ã€‚"
msgid "Approvals"
msgstr "核准"
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "4月"
@@ -1439,6 +1732,15 @@ msgstr "确定è¦å–消创建此评论å—?"
msgid "Are you sure you want to cancel editing this comment?"
msgstr "确定è¦å–消编辑此评论å—?"
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr "您确定è¦åˆ é™¤æ­¤è®¾å¤‡å—?此æ“作无法撤销。"
@@ -1481,6 +1783,9 @@ msgstr "您确定è¦é‡ç½®SCIM令牌å—?在完æˆæ–°ä»¤ç‰Œæ›´æ–°ä¹‹å‰ï¼ŒSCIMé
msgid "Are you sure you want to reset the health check token?"
msgstr "确定è¦é‡ç½®è¿è¡ŒçŠ¶å†µæ£€æŸ¥ä»¤ç‰Œå—?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr "确定è¦æ’¤é”€æ­¤%{type}令牌å—?此æ“作ä¸å¯é€†ã€‚"
+
msgid "Are you sure you want to revoke this nickname?"
msgstr "您确定è¦å–消此昵称?"
@@ -1508,6 +1813,12 @@ msgstr "你确定å—?这将使您的已注册应用和U2F设备失效。"
msgid "Artifact ID"
msgstr "作业产物ID"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "产物"
@@ -1544,6 +1855,9 @@ msgstr "指派"
msgid "Assign custom color like #FF0000"
msgstr "分é…自定义颜色,如FF0000"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "指派标记"
@@ -1562,6 +1876,9 @@ msgstr "将这些议题分é…给自己"
msgid "Assign yourself to this issue"
msgstr "将此议题分é…给自己"
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "已分é…议题"
@@ -1572,7 +1889,8 @@ msgid "Assigned to me"
msgstr "已分派给我"
msgid "Assignee"
-msgstr "指派人"
+msgid_plural "%d Assignees"
+msgstr[0] ""
msgid "Assignee lists not available with your current license"
msgstr "当å‰è®¸å¯è¯æ— æ³•ä½¿ç”¨æŒ‡æ´¾åˆ—表"
@@ -1583,6 +1901,9 @@ msgstr "指派列表显示分é…给选定用户的所有议题。"
msgid "Assignee(s)"
msgstr "指派人"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr "至少需è¦ä¸€ä¸ªä»£ç æ‰€æœ‰è€…批准,以便更改符åˆç›¸åº”çš„ CODEEWNER 规则的文件。"
@@ -1602,12 +1923,21 @@ msgstr "添加附件失败。"
msgid "Audit Events"
msgstr "审计事件"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "8月"
msgid "August"
msgstr "8 月"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "认è¯æ—¥å¿—"
@@ -1665,6 +1995,9 @@ msgstr "å¯ç”¨Auto DevOps"
msgid "Auto DevOps, runners and job artifacts"
msgstr "Auto DevOps, runnersåŠä½œä¸šäº§ç‰©"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "自动å–消多余且处于等待状æ€çš„æµæ°´çº¿"
@@ -1686,12 +2019,24 @@ msgstr "想了解更多请访问 %{link_to_documentation}"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "Auto DevOpsæµæ°´çº¿å·²å¯ç”¨ã€‚如果未找到CIé…置文件,将使用该æµæ°´çº¿ã€‚ %{more_information_link}"
-msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
+msgid "Autocomplete"
msgstr ""
-msgid "Automatic certificate management using Let's Encrypt"
+msgid "Autocomplete description"
msgstr ""
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
+msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
+msgstr "使用%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}自动管ç†è¯ä¹¦"
+
+msgid "Automatic certificate management using Let's Encrypt"
+msgstr "使用Let's Encrypt自动管ç†è¯ä¹¦"
+
msgid "Automatically marked as default internal user"
msgstr "自动标记为默认内部用户"
@@ -1852,7 +2197,7 @@ msgid "Be careful. Changing the project's namespace can have unintended side eff
msgstr "请注æ„,更改项目的命å空间å¯èƒ½ä¼šäº§ç”Ÿéžé¢„期的副作用。"
msgid "Be careful. Renaming a project's repository can have unintended side effects."
-msgstr "å°å¿ƒã€‚é‡å‘½å项目的仓库å¯èƒ½ä¼šäº§ç”Ÿæ„想ä¸åˆ°çš„副作用。"
+msgstr "请注æ„,é‡å‘½å项目的仓库å¯èƒ½ä¼šäº§ç”Ÿæ„想ä¸åˆ°çš„副作用。"
msgid "Begin with the selected commit"
msgstr "从选定的æ交开始"
@@ -1866,32 +2211,32 @@ msgstr "您将在下é¢æ‰¾åˆ°æ‰€æœ‰å…¬å¼€çš„群组。"
msgid "Billing"
msgstr "计费"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} 正在使用 %{plan_link}计划。"
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "ç›®å‰æ— æ³•è‡ªåŠ¨é™çº§æˆ–å‡çº§åˆ°æŸäº›è®¡åˆ’。"
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "当å‰è®¡åˆ’"
-msgid "BillingPlans|Customer Support"
-msgstr "客户支æŒ"
-
msgid "BillingPlans|Downgrade"
msgstr "é™çº§"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "请查阅%{faq_link}æ¥äº†è§£æœ‰å…³å„订阅计划的更多信æ¯ã€‚您å¯ä»¥é€šè¿‡ä»¥ä¸‹é“¾æŽ¥å…费试用GitLab.comçš„Gold计划30天。"
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "请查阅%{faq_link} 进一步了解æ¯ä¸ªè®¡åˆ’的相关信æ¯ã€‚"
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "管ç†è®¡åˆ’"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "在这ç§æƒ…况下请è”ç³»%{customer_support_link}。"
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "查看 %{plan_name} 计划中的功能"
@@ -1905,14 +2250,11 @@ msgstr "访问%{parent_billing_page_link}的计费部分以管ç†è¯¥é¡¹ç›®çš„订
msgid "BillingPlans|Upgrade"
msgstr "å‡çº§"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "您目å‰æ­£åœ¨ä½¿ç”¨%{plan_link}计划。"
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "您的GitLab.com试用期已在%{expiration_date}结æŸã€‚%{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "您的Gold计划试用将 <strong>于 %{expiration_date}过期</strong>。您å¯ä»¥é€šè¿‡é˜…读%{features_link}æ¥è¿›ä¸€æ­¥äº†è§£GitLab.com Gold计划的相关信æ¯ã€‚"
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "功能"
@@ -1929,6 +2271,9 @@ msgstr "æ¯å¹´æ”¯ä»˜ %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "æ¯ç”¨æˆ·"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr "BitbucketæœåŠ¡å™¨å¯¼å…¥"
@@ -1941,27 +2286,49 @@ msgstr "å±è”½"
msgid "Blocked"
msgstr "å·²ç¦ç”¨"
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-
msgid "Blog"
msgstr "åšå®¢"
msgid "Blue helpers indicate an action to be taken."
msgstr "è“色助手表示需è¦é‡‡å–的行动。"
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr "添加默认列表"
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr "å•å‡»å°†ä¸‹åˆ—默认列表添加到议题看æ¿ï¼š"
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr "ä¸å¿…了,使用自定义列表"
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr "使用默认列表,是您充分利用看æ¿ä½œç”¨çš„起点。"
+
msgid "Boards"
msgstr "看æ¿"
+msgid "Boards|Collapse"
+msgstr "收起"
+
msgid "Boards|Edit board"
-msgstr ""
+msgstr "编辑看æ¿"
+
+msgid "Boards|Expand"
+msgstr "展开"
msgid "Boards|View scope"
+msgstr "查看范围"
+
+msgid "Branch"
msgstr ""
msgid "Branch %{branchName} was not found in this project's repository."
@@ -2126,6 +2493,9 @@ msgstr "æµè§ˆæ–‡ä»¶"
msgid "Browse Files"
msgstr "æµè§ˆæ–‡ä»¶"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "æµè§ˆæ–‡ä»¶"
@@ -2190,7 +2560,7 @@ msgid "CI variables"
msgstr "CI å˜é‡"
msgid "CI will run using the credentials assigned above."
-msgstr "CI将使用上é¢æŒ‡å®šçš„凭æ®è¿è¡Œã€‚"
+msgstr "CI将使用以上指定的用户身份è¿è¡Œã€‚"
msgid "CI/CD"
msgstr "CI/CD"
@@ -2237,8 +2607,11 @@ msgstr "了解更多Auto DevOps的相关信æ¯"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "在未找到备用CIé…置文件时使用Auto DevOpsæµæ°´çº¿ã€‚"
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
-msgstr "您必须添加一个%{kubernetes_cluster_start}Kubernetes集群集æˆ%{kubernetes_cluster_end}域å到此项目,以便您的部署策略正常工作。"
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgstr ""
msgid "CICD|group enabled"
msgstr "群组已å¯ç”¨"
@@ -2246,6 +2619,12 @@ msgstr "群组已å¯ç”¨"
msgid "CICD|instance enabled"
msgstr "å·²å¯ç”¨çš„实例"
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr "贡献信æ¯"
@@ -2273,9 +2652,15 @@ msgstr "金ä¸é›€éƒ¨ç½²æ˜¯ä¸€é¡¹æµè¡Œçš„CI策略,其中一å°éƒ¨åˆ†èŠ‚点更æ
msgid "Cancel"
msgstr "å–消"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "å–消此作业"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "无法自动åˆå¹¶"
@@ -2285,6 +2670,9 @@ msgstr "无法创建滥用报告。用户已被删除。"
msgid "Cannot create the abuse report. This user has been blocked."
msgstr "无法创建滥用报告。此用户已被ç¦ç”¨ã€‚"
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "无法修改托管的 Kubernetes 集群"
@@ -2312,12 +2700,21 @@ msgstr "è¯ä¹¦(PEM)"
msgid "Change Weight"
msgstr "更改æƒé‡"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr "更改指派人"
msgid "Change assignee(s)."
msgstr "更改指派人。"
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr "更改路径"
@@ -2354,6 +2751,12 @@ msgstr "还原"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "这将创建一个新的æ交, æ¥è¿˜åŽŸçŽ°æœ‰çš„更改。"
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr "å˜æ›´"
@@ -2375,6 +2778,57 @@ msgstr "统计图"
msgid "Chat"
msgstr "å³æ—¶é€šè®¯"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr "å†æ¬¡æ£€æŸ¥"
@@ -2417,6 +2871,9 @@ msgstr "选择分支/标签(例如%{master})或输入æ交(例如%{sha})以查ç
msgid "Choose a file"
msgstr "选择一个文件"
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr "选择角色æƒé™"
@@ -2453,9 +2910,6 @@ msgstr "请选择è¦è¿žæŽ¥å¹¶è¿è¡Œ CI/CD æµæ°´çº¿çš„代ç ä»“库。"
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "选择è¦åŒæ­¥åˆ°æ­¤æ¬¡èŠ‚点的切片。"
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr "选择åˆå¹¶æ–¹æ³•ã€é€‰é¡¹ã€æ£€æŸ¥å¹¶è®¾ç½®é»˜è®¤åˆå¹¶è¯·æ±‚说明模æ¿ã€‚"
-
msgid "CiStatusLabel|canceled"
msgstr "å·²å–消"
@@ -2546,6 +3000,9 @@ msgstr "删除å˜é‡è¡Œ"
msgid "CiVariables|Scope"
msgstr "范围"
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr "状æ€"
@@ -2555,6 +3012,9 @@ msgstr "类型"
msgid "CiVariables|Value"
msgstr "值"
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "* (所有环境)"
@@ -2600,15 +3060,24 @@ msgstr "清除"
msgid "Clear input"
msgstr "清除输入"
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "清除æœç´¢"
msgid "Clear search input"
msgstr "清除æœç´¢è¾“å…¥"
+msgid "Clear templates search input"
+msgstr "清除模æ¿æœç´¢è¾“å…¥"
+
msgid "Clear weight"
msgstr "清除æƒé‡"
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr "清除æƒé‡"
@@ -2616,7 +3085,7 @@ msgid "Click any <strong>project name</strong> in the project list below to navi
msgstr "å•å‡»ä¸‹é¢é¡¹ç›®åˆ—表中的任何 <strong>项目å称</strong> 跳转到项目里程碑。"
msgid "Click here"
-msgstr ""
+msgstr "点击此处"
msgid "Click the <strong>Download</strong> button and wait for downloading to complete."
msgstr "点击 <strong>下载</strong> 按钮,等待下载完æˆã€‚"
@@ -2630,6 +3099,9 @@ msgstr "请点击å³è¾¹çš„ <strong>æ— </strong> 按钮,因为我们åªéœ€è¦â€
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "点击下é¢çš„按钮转到Kubernetes页é¢å¼€å§‹å®‰è£…过程"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "点击以展开。"
@@ -2666,6 +3138,9 @@ msgstr "使用 SSH 克隆"
msgid "Close"
msgstr "关闭"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "关闭å²è¯—"
@@ -2675,17 +3150,32 @@ msgstr "关闭里程碑"
msgid "Close sidebar"
msgstr "关闭侧边æ "
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "已关闭"
msgid "Closed issues"
msgstr "已关闭议题"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr "%{custom_domain_start}更多信æ¯%{custom_domain_end}。"
msgid "ClusterIntegration| can be used instead of a custom domain."
-msgstr "å¯ä»¥ç”¨æ¥ä»£æ›¿è‡ªå®šä¹‰åŸŸã€‚"
+msgstr "也å¯ä»¥ç”¨æ¥ä»£æ›¿è‡ªå®šä¹‰åŸŸã€‚"
msgid "ClusterIntegration| is the default environment scope for this cluster. This means that all jobs, regardless of their environment, will use this cluster. %{environment_scope_start}More information%{environment_scope_end}"
msgstr "是此群集的默认环境范围。这æ„味ç€æ‰€æœ‰ä½œä¸šéƒ½å°†ä½¿ç”¨æ­¤ç¾¤é›†ã€‚%{environment_scope_start}更多信æ¯%{environment_scope_end}"
@@ -2697,7 +3187,7 @@ msgid "ClusterIntegration|%{title} uninstalled successfully."
msgstr "%{title} å·²æˆåŠŸå¸è½½ã€‚"
msgid "ClusterIntegration|%{title} updated successfully."
-msgstr ""
+msgstr "%{title}æ›´æ–°æˆåŠŸã€‚"
msgid "ClusterIntegration|A service token scoped to %{code}kube-system%{end_code} with %{code}cluster-admin%{end_code} privileges."
msgstr "在%{code}kube-system%{end_code}具有%{code}cluster-admin%{end_code}æƒé™çš„æœåŠ¡ä»¤ç‰Œ"
@@ -2729,6 +3219,9 @@ msgstr "添加集æˆåŽï¼Œå¯ä»¥åœ¨æ‰€æœ‰é¡¹ç›®ä¸­å…±äº«é›†ç¾¤ã€‚"
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Kubernetes集群集æˆçš„高级选项"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr "所有数æ®å°†è¢«åˆ é™¤ï¼Œæ— æ³•æ¢å¤ã€‚"
@@ -2736,7 +3229,10 @@ msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts
msgstr "å…许 GitLab 管ç†æ­¤é›†ç¾¤çš„命å空间和æœåŠ¡è´¦æˆ·ã€‚"
msgid "ClusterIntegration|Alternatively"
-msgstr "除外"
+msgstr "此外,"
+
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "å°è¯•è”ç³»Google Cloud APIæ—¶å‘生错误。请ç¨åŽå†è¯•ã€‚"
@@ -2777,12 +3273,18 @@ msgstr "Cert-Manager 是一个本地的 Kubernetes è¯ä¹¦ç®¡ç†æŽ§åˆ¶å™¨ï¼Œå¯å¸
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "è¯ä¹¦æŽˆæƒåŒ…(PEMæ ¼å¼)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "选择è¦åœ¨ Kubernetes 群集上安装的应用程åºã€‚安装以下任何一个应用å‰éœ€è¦å…ˆå®‰è£…Helm Tiller。"
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "请选择使用此Kubernetes群集的环境。"
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr "集群è¿è¡ŒçŠ¶å†µ"
@@ -2813,12 +3315,21 @@ msgstr "å¤åˆ¶Kubernetes集群å称"
msgid "ClusterIntegration|Copy Service Token"
msgstr "å¤åˆ¶æœåŠ¡ä»¤ç‰Œ"
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "创建Kubernetes集群"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "你是å¦äº†è§£ï¼Ÿ"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "å¯ç”¨æˆ–ç¦ç”¨GitLab与Kubernetes群集的连接。"
@@ -2867,6 +3378,9 @@ msgstr "GitLab管ç†çš„集群"
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Google 云平å°é¡¹ç›®"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -2954,8 +3468,8 @@ msgstr "正在Google Kubernetes Engine上创建Kubernetes集群..."
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Kubernetes 集群å称"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Kubernetes集群已在Google Kubernetes Engine上æˆåŠŸåˆ›å»ºã€‚刷新页é¢ä»¥æŸ¥çœ‹Kubernetes集群的详细信æ¯"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "通过Kubernetes群集集æˆï¼Œå¯ä»¥è½»æ¾åœ°ä½¿ç”¨è¯„审应用ã€éƒ¨ç½²åº”用ã€è¿è¡Œæµæ°´çº¿ç­‰ç­‰ã€‚"
@@ -2969,6 +3483,9 @@ msgstr "进一步了解 %{help_link_start_machine_type}实例类型%{help_link_e
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "进一步了解 %{help_link_start}地域%{help_link_end}。"
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "了解更多的Kubernetesä¿¡æ¯"
@@ -2981,6 +3498,12 @@ msgstr "了解有关实例级Kubernetes集群更多信æ¯"
msgid "ClusterIntegration|Let's Encrypt"
msgstr "Let's Encrypt"
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "机器类型"
@@ -2990,6 +3513,9 @@ msgstr "请确ä¿æ‚¨çš„å¸æˆ·%{link_to_requirements}å¯ä»¥åˆ›å»º Kubernetes 集ç
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "通过访问 %{link_gke} ç®¡ç† Kubernetes 集群"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "未找到您æœç´¢çš„实例类型"
@@ -2999,6 +3525,9 @@ msgstr "未找到项目"
msgid "ClusterIntegration|No projects matched your search"
msgstr "未找到您æœç´¢çš„项目"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "未找到您æœç´¢çš„地域"
@@ -3023,6 +3552,9 @@ msgstr "项目级集群"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "项目命å空间(å¯é€‰ï¼Œå”¯ä¸€)"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3035,6 +3567,9 @@ msgstr "å¯ç”¨RBAC的群集"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "请阅读关于Kubernetes集群集æˆçš„%{link_to_help_page}。"
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "删除Kubernetes集群集æˆ"
@@ -3053,15 +3588,24 @@ msgstr "请求å¯åŠ¨å®‰è£…失败"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr "请求å¯åŠ¨å¸è½½å¤±è´¥"
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "ä¿å­˜æ›´æ”¹"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "æœç´¢å®žä¾‹ç±»åž‹"
msgid "ClusterIntegration|Search projects"
msgstr "æœç´¢é¡¹ç›®"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "æœç´¢åœ°åŸŸ"
@@ -3080,6 +3624,9 @@ msgstr "按项目和地域选择实例类型"
msgid "ClusterIntegration|Select project to choose zone"
msgstr "按项目选择地域"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "选择地域"
@@ -3111,7 +3658,7 @@ msgid "ClusterIntegration|Something went wrong while updating Knative domain nam
msgstr "æ›´æ–°Knative域å时出错。"
msgid "ClusterIntegration|Specifying a domain will allow you to use Auto Review Apps and Auto Deploy stages for %{auto_devops_start}Auto DevOps%{auto_devops_end}. The domain should have a wildcard DNS configured matching the domain."
-msgstr "指定域将å…许您使用自动评审应用程åºå’Œè‡ªåŠ¨éƒ¨ç½²é˜¶æ®µè¿›è¡Œ %{auto_devops_start}Auto DevOps%{auto_devops_end}。域应é…置与域匹é…的通é…符DNS。"
+msgstr "指定域将å…许您使用%{auto_devops_start}Auto DevOps%{auto_devops_end}中的自动评审应用和自动部署阶段。域å应包å«ä¸ŽåŸŸåŒ¹é…的通é…符DNS。"
msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster."
msgstr "用于对群集进行身份验è¯çš„ Kubernetes è¯ä¹¦ã€‚"
@@ -3119,18 +3666,24 @@ msgstr "用于对群集进行身份验è¯çš„ Kubernetes è¯ä¹¦ã€‚"
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr "用于访问 Kubernetes API 的 URL。"
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
-msgstr "å…³è”IP将被删除,ä¸èƒ½æ¢å¤ã€‚"
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
+msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
-msgstr "相关è¯ä¹¦å°†è¢«åˆ é™¤ï¼Œå¹¶ä¸”ä¸èƒ½æ¢å¤ã€‚"
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
+msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr "å…³è”çš„è´Ÿè½½å‡è¡¡å™¨å’ŒIP将被删除,无法还原。"
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr "节点正在分é…中。如果需è¦å¾ˆé•¿æ—¶é—´ï¼Œè¯·æ£€æŸ¥æ‚¨çš„ Kubernetes 集群或 Google Kubernetes Engine 上的é…é¢ã€‚"
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr "群集身份验è¯æ—¶å‡ºçŽ°é—®é¢˜ã€‚请确ä¿æ‚¨çš„CAè¯ä¹¦å’Œä»¤ç‰Œæœ‰æ•ˆã€‚"
@@ -3152,6 +3705,9 @@ msgstr "å¸è½½ %{appTitle}"
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr "更新失败。请检查日志,然åŽé‡è¯•ã€‚"
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "验è¯é¡¹ç›®è´¦å•çŠ¶æ€"
@@ -3188,18 +3744,24 @@ msgstr "文档"
msgid "ClusterIntegration|help page"
msgstr "帮助页é¢"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "符åˆç›¸å…³è¦æ±‚"
msgid "ClusterIntegration|pricing"
msgstr "定价"
-msgid "ClusterIntegration|properly configured"
-msgstr "正确é…ç½®"
-
msgid "ClusterIntegration|sign up"
msgstr "注册"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr "代ç "
@@ -3227,15 +3789,24 @@ msgstr "折å æ ¸å‡†äºº"
msgid "Collapse sidebar"
msgstr "收起侧边æ "
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr "ComboSearch未定义"
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr "命令行指引"
msgid "Commands applied"
msgstr "命令已执行"
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "添加评论"
@@ -3245,11 +3816,11 @@ msgstr "评论并关闭 %{noteable_name}"
msgid "Comment & reopen %{noteable_name}"
msgstr "评论并é‡æ–°å¼€å¯ %{noteable_name}"
-msgid "Comment & resolve discussion"
-msgstr "添加评论并解决讨论"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "添加评论并将讨论å˜ä¸ºæœªå†³"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "评论框ä½ç½®"
@@ -3257,6 +3828,9 @@ msgstr "评论框ä½ç½®"
msgid "Comment is being updated"
msgstr "评论正在更新"
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "评论"
@@ -3267,6 +3841,9 @@ msgstr[0] "æ交"
msgid "Commit %{commit_id}"
msgstr "æ交 %{commit_id}"
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "æ交消æ¯"
@@ -3363,12 +3940,18 @@ msgstr "目标分支"
msgid "CompareBranches|There isn't anything to compare."
msgstr "无需比较。"
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "ç§å¯†"
msgid "Confidentiality"
msgstr "ç§å¯†æ€§"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr "é…ç½® GitLab Runner 以开始使用Web终端。 %{helpStart}了解更多。%{helpEnd}"
@@ -3376,7 +3959,10 @@ msgid "Configure Gitaly timeouts."
msgstr "é…ç½®Gitaly超时时间。"
msgid "Configure Let's Encrypt"
-msgstr "é…ç½® Let's Encrypt"
+msgstr "é…ç½®Let's Encrypt"
+
+msgid "Configure Prometheus"
+msgstr "é…ç½®Promethes"
msgid "Configure Tracing"
msgstr "é…置跟踪"
@@ -3387,6 +3973,9 @@ msgstr "在 <code>.gitlab</code> 目录中é…ç½® <code>.gitlab-webide.yml</code>
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "在仓库上é…置自动git检查和仓库整ç†ã€‚"
+msgid "Configure existing installation"
+msgstr "é…置现有安装"
+
msgid "Configure limits for web and API requests."
msgstr "é…ç½® web å’Œ API 请求é™åˆ¶ã€‚"
@@ -3406,7 +3995,7 @@ msgid "Confirm"
msgstr "确认"
msgid "Confirmation email sent to %{email}"
-msgstr ""
+msgstr "确认电å­é‚®ä»¶å‘é€åˆ°%{email}"
msgid "Confirmation required"
msgstr "需è¦ç¡®è®¤"
@@ -3427,7 +4016,7 @@ msgid "Connect your external repositories, and CI/CD pipelines will run for new
msgstr "连接外部仓库åŽï¼Œæ–°æ交将会å¯åŠ¨CI/CDæµæ°´çº¿ã€‚ä»…å¯ç”¨CI/CD功能的Gitlab项目将会被创建。"
msgid "Connecting to terminal sync service"
-msgstr ""
+msgstr "连接到终端åŒæ­¥æœåŠ¡"
msgid "Connecting..."
msgstr "正在连接..."
@@ -3453,32 +4042,39 @@ msgstr "容器镜åƒåº“"
msgid "Container registry images"
msgstr "容器镜åƒåº“é•œåƒ"
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "首先使用您的 GitLab 用户å和密ç ç™»å½• GitLab 的容器镜åƒåº“。如果您已ç»%{link_2fa},则需è¦ä½¿ç”¨%{link_token}:"
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab 最多支æŒ3个级别的镜åƒå‘½å。以下镜åƒå称示例对当å‰é¡¹ç›®æœ‰æ•ˆï¼š"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "如何使用容器镜åƒåº“"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "进一步了解"
+msgid "ContainerRegistry|Last Updated"
+msgstr "最近更新时间"
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "容器镜åƒåº“中没有此容器镜åƒçš„标签。"
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "登录åŽæ‚¨å¯ä»¥ä½¿ç”¨é€šç”¨çš„%{build}å’Œ%{push}命令创建和上传容器镜åƒ"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "删除仓库"
-msgid "ContainerRegistry|Remove tag"
-msgstr "删除标签"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "大å°"
@@ -3489,14 +4085,29 @@ msgstr "标签"
msgid "ContainerRegistry|Tag ID"
msgstr "标签 ID"
-msgid "ContainerRegistry|Use different image names"
-msgstr "使用ä¸åŒçš„é•œåƒå称"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
+
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "通过使用GitLab内置的Docker容器镜åƒåº“,æ¯ä¸ªé¡¹ç›®éƒ½å¯ä»¥æœ‰ç‹¬ç«‹çš„空间æ¥å­˜å‚¨Dockeré•œåƒã€‚"
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr "å³å°†åˆ é™¤é•œåƒ <b>%{title}</b>。此æ“作将删除镜åƒå’ŒæŒ‡å‘此镜åƒçš„所有标签。"
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "您也å¯ä»¥ä½¿ç”¨ %{deploy_token} 以åªè¯»æ–¹å¼è®¿é—®é•œåƒåº“çš„é•œåƒã€‚"
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr "å³å°†åˆ é™¤å­˜å‚¨åº“ <b>%{title}</b>。一旦确认,此存储库将被永久删除。"
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
msgstr "包å«å›¾åƒ(%{size})çš„%{count}个blob"
@@ -3547,7 +4158,7 @@ msgid "ContributorsPage|Please wait a moment, this page will automatically refre
msgstr "请ç¨å€™ï¼Œå›¾è¡¨æž„建完æˆåŽé¡µé¢ä¼šè‡ªåŠ¨åˆ·æ–°ã€‚"
msgid "Control emails linked to your account"
-msgstr ""
+msgstr "控制与您å¸æˆ·å…³è”的电å­é‚®ä»¶"
msgid "Control the display of third party offers."
msgstr "控制第三方优惠的显示。"
@@ -3558,15 +4169,24 @@ msgstr "控制此次è¦èŠ‚点的åŒæ­¥ä»“库的最大并å‘"
msgid "ConvDev Index"
msgstr "ConvDev指数"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr "å·²å¤åˆ¶"
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr "å¤åˆ¶ %{http_label} 克隆地å€"
msgid "Copy %{protocol} clone URL"
msgstr "å¤åˆ¶ %{protocol} 克隆URL"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr "å¤åˆ¶ID到剪贴æ¿"
@@ -3603,6 +4223,9 @@ msgstr "从当å‰é¡¹ç›®ä¸­å…¶ä»–议题或åˆå¹¶è¯·æ±‚å¤åˆ¶æ ‡è®°å’Œé‡Œç¨‹ç¢‘"
msgid "Copy link"
msgstr "å¤åˆ¶é“¾æŽ¥"
+msgid "Copy personal access token to clipboard"
+msgstr "å¤åˆ¶ä¸ªäººè®¿é—®ä»¤ç‰Œåˆ°å‰ªè´´æ¿"
+
msgid "Copy reference to clipboard"
msgstr "将标识å¤åˆ¶åˆ°å‰ªè´´æ¿"
@@ -3610,7 +4233,7 @@ msgid "Copy secret to clipboard"
msgstr "å¤åˆ¶å¯†ç åˆ°å‰ªè´´æ¿"
msgid "Copy source to clipboard"
-msgstr "å¤åˆ¶æºåˆ°å‰ªè´´æ¿"
+msgstr "å¤åˆ¶æºæ–‡ä»¶åˆ°å‰ªè´´æ¿"
msgid "Copy to clipboard"
msgstr "å¤åˆ¶åˆ°å‰ªè´´æ¿"
@@ -3618,6 +4241,12 @@ msgstr "å¤åˆ¶åˆ°å‰ªè´´æ¿"
msgid "Copy token to clipboard"
msgstr "将令牌å¤åˆ¶åˆ°å‰ªè´´æ¿"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr "无法授æƒèŠå¤©æ˜µç§°ã€‚å†è¯•ä¸€æ¬¡ï¼"
@@ -3628,32 +4257,44 @@ msgid "Could not connect to FogBugz, check your URL"
msgstr "无法连接到 FogBugz,请检查您的 URL"
msgid "Could not connect to Web IDE file mirror service."
-msgstr ""
+msgstr "无法连接到Web IDE的文件镜åƒæœåŠ¡ã€‚"
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr "ç›®å‰æ— æ³•åˆ›å»º Wiki 仓库。请ç¨åŽå†è¯•ã€‚"
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr ""
+
msgid "Could not delete chat nickname %{chat_name}."
msgstr "无法删除èŠå¤©æ˜µç§° %{chat_name}。"
msgid "Could not remove the trigger."
msgstr "无法删除触å‘器。"
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "无法获å–æµæ°´çº¿çŠ¶æ€ã€‚有关故障排除步骤,请å‚阅 %{linkStart}文档%{linkEnd}。"
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr "无法撤消身份模拟令牌 %{token_name}。"
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr "无法撤消个人访问令牌 %{personal_access_token_name}。"
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr "覆盖率"
msgid "Create"
msgstr "创建"
+msgid "Create %{type} token"
+msgstr "创建%{type}令牌"
+
msgid "Create New Directory"
msgstr "创建新目录"
@@ -3666,8 +4307,8 @@ msgstr "请先创建一个GitLabå¸æˆ·ï¼Œç„¶åŽå°†å…¶è¿žæŽ¥åˆ°æ‚¨çš„ %{label} å¸
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr "创建本地代ç†ï¼Œç”¨äºŽå­˜å‚¨é¢‘ç¹ä½¿ç”¨çš„上游镜åƒã€‚ %{link_start}了解更多%{link_end} 关于ä¾èµ–代ç†çš„内容。"
-msgid "Create a merge request."
-msgstr "创建一个åˆå¹¶è¯·æ±‚."
+msgid "Create a merge request"
+msgstr ""
msgid "Create a new branch"
msgstr "创建一个新分支"
@@ -3687,12 +4328,24 @@ msgstr "在å¸æˆ·ä¸Šåˆ›å»ºä¸ªäººè®¿é—®ä»¤ç‰Œï¼Œä»¥é€šè¿‡ %{protocol} æ¥æ‹‰å–æˆ
msgid "Create an issue. Issues are created for each alert triggered."
msgstr "创建一个议题。为已触å‘çš„æ¯ä¸ªè­¦æŠ¥åˆ›å»ºè®®é¢˜ã€‚"
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "创建分支"
msgid "Create commit"
msgstr "创建æ交"
+msgid "Create confidential merge request"
+msgstr "创建机密åˆå¹¶è¯·æ±‚"
+
+msgid "Create confidential merge request and branch"
+msgstr "创建机密åˆå¹¶è¯·æ±‚åŠåˆ†æ”¯"
+
msgid "Create directory"
msgstr "创建目录"
@@ -3723,6 +4376,9 @@ msgstr "创建åˆå¹¶è¯·æ±‚åŠåˆ†æ”¯"
msgid "Create milestone"
msgstr "创建里程碑"
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "创建新分支"
@@ -3741,6 +4397,9 @@ msgstr "创建新标记"
msgid "Create new..."
msgstr "创建..."
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "创建项目标记"
@@ -3765,6 +4424,12 @@ msgstr "创建时间"
msgid "Created At"
msgstr "创建于"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "由我创建"
@@ -3786,18 +4451,30 @@ msgstr "创建于"
msgid "Created on:"
msgstr "创建于:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
-msgstr "创建分支“%{branch_name}â€åŠç›¸åº”çš„åˆå¹¶è¯·æ±‚以解决此议题"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
msgid "Creating epic"
msgstr "创建å²è¯—中"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr "正在使用PrometheusæœåŠ¡å™¨ä¸­çš„æ•°æ®åˆ›å»ºå›¾è¡¨ã€‚如果这需è¦å¾ˆé•¿æ—¶é—´ï¼Œè¯·ç¡®ä¿æ•°æ®å¯ç”¨ã€‚"
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Cron 时区"
msgid "Cron syntax"
msgstr "Cron 语法"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "当å‰åˆ†æ”¯"
@@ -3834,6 +4511,45 @@ msgstr "自定义项目模æ¿"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr "尚未为您所属的群组设置自定义项目模æ¿ã€‚请在群组的设置页é¢å¯ç”¨å®ƒã€‚è¦è®¾ç½®è‡ªå®šä¹‰é¡¹ç›®æ¨¡æ¿ï¼Œè¯·è”系群组的所有者或维护者。"
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "自定义颜色"
@@ -3843,18 +4559,51 @@ msgstr "自定义如何将FogBugz电å­é‚®ä»¶åœ°å€å’Œç”¨æˆ·å导入GitLab。ä¸
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "自定义如何将Google Code电å­é‚®ä»¶åœ°å€å’Œç”¨æˆ·å导入GitLab。下一步将选择è¦å¯¼å…¥çš„项目。"
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr "自定义语言和区域相关设置。"
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "自定义æµæ°´çº¿é…置,查看æµæ°´çº¿çŠ¶æ€å’Œè¦†ç›–率报告。"
msgid "Cycle Analytics"
msgstr "周期分æž"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "周期分æžæ¦‚述了项目从想法到产å“实现的å„阶段所需的时间。"
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "ç¼–ç "
@@ -3876,6 +4625,29 @@ msgstr "预å‘布"
msgid "CycleAnalyticsStage|Test"
msgstr "测试"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr "DNS"
@@ -3900,8 +4672,8 @@ msgstr "%{firstProject} 和 %{secondProject}"
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr "%{firstProject}ã€%{rest} å’Œ %{secondProject}"
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
-msgstr "无法添加 %{invalidProjects}。 当å‰ä»ªè¡¨æ¿å¯ç”¨äºŽå…¬å¼€é¡¹ç›®ä»¥åŠå…·æœ‰Gold方案的群组中的ç§æœ‰é¡¹ç›®ã€‚"
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
+msgstr ""
msgid "Data is still calculating..."
msgstr "æ•°æ®ä»åœ¨è®¡ç®—中……"
@@ -3921,6 +4693,9 @@ msgstr "æ—¥"
msgid "DayTitle|W"
msgstr "三"
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr "调试"
@@ -3942,12 +4717,21 @@ msgstr "默认分支"
msgid "Default artifacts expiration"
msgstr "默认产物过期时间"
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr "默认分类标记"
msgid "Default description template for issues"
msgstr "议题的默认æ述模æ¿"
+msgid "Default description template for merge requests"
+msgstr "åˆå¹¶è¯·æ±‚的默认æ述模æ¿"
+
msgid "Default first day of the week"
msgstr "æ¯å‘¨çš„默认起始日"
@@ -3958,7 +4742,7 @@ msgid "Default issue template"
msgstr "默认议题模æ¿"
msgid "Default project deletion protection"
-msgstr ""
+msgstr "默认项目删除ä¿æŠ¤"
msgid "Default: Directly import the Google Code email address or username"
msgstr "默认:直接导入Google Code电å­é‚®ä»¶åœ°å€æˆ–用户å"
@@ -3990,12 +4774,21 @@ msgstr "已延时"
msgid "Delete"
msgstr "删除"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "删除文件包"
msgid "Delete Snippet"
msgstr "删除代ç ç‰‡æ®µ"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "删除评论"
@@ -4032,6 +4825,9 @@ msgstr "已删除"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr "已删除èŠå¤©çš„昵称: %{chat_name}!"
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr "删除许å¯è¯å¤±è´¥ã€‚"
@@ -4048,37 +4844,63 @@ msgid "Deny"
msgstr "æ‹’ç»"
msgid "Dependencies"
+msgstr "ä¾èµ–项"
+
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
msgstr ""
-msgid "Dependencies|Component"
+msgid "Dependencies|All"
msgstr ""
+msgid "Dependencies|Component"
+msgstr "组件"
+
msgid "Dependencies|Component name"
-msgstr ""
+msgstr "组件å称"
msgid "Dependencies|Export as JSON"
-msgstr ""
+msgstr "导出为JSON"
msgid "Dependencies|Job failed to generate the dependency list"
+msgstr "作业无法生æˆä¾èµ–项列表"
+
+msgid "Dependencies|License"
msgstr ""
msgid "Dependencies|Location"
-msgstr ""
+msgstr "ä½ç½®"
msgid "Dependencies|Packager"
+msgstr "打包程åº"
+
+msgid "Dependencies|Safe"
msgstr ""
-msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
+msgid "Dependencies|Status"
msgstr ""
+msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
+msgstr "%{codeStartTag}dependency_scanning%{codeEndTag} 作业失败,无法生æˆåˆ—表。请确ä¿ä½œä¸šæ­£å¸¸è¿è¡Œå¹¶é‡å¯æµæ°´çº¿ã€‚"
+
msgid "Dependencies|Unsupported file(s) detected"
-msgstr ""
+msgstr "检测到ä¸æ”¯æŒçš„文件"
msgid "Dependencies|Version"
+msgstr "版本"
+
+msgid "Dependencies|Vulnerable components"
msgstr ""
msgid "Dependency List"
-msgstr ""
+msgstr "ä¾èµ–项列表"
msgid "Dependency Proxy"
msgstr "ä¾èµ–代ç†"
@@ -4095,6 +4917,14 @@ msgstr "ä¾èµ–代ç†åŠŸèƒ½ç›®å‰ä»…é™äºŽå…¬å¼€ç¾¤ç»„。"
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr " 开关ä¾èµ–代ç†"
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "部署"
@@ -4105,6 +4935,15 @@ msgstr "部署密钥"
msgid "Deploy key was successfully updated."
msgstr "部署密钥已æˆåŠŸæ›´æ–°ã€‚"
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr "部署é¢æ¿å·²åˆ é™¤æ ‡ç­¾%{appLabel}上的匹é…。è¦æŸ¥çœ‹éƒ¨ç½²é¢æ¿ä¸Šçš„所有实例,您必须更新Chart并é‡æ–°éƒ¨ç½²ã€‚"
+
msgid "DeployKeys|+%{count} others"
msgstr "+%{count} 其他"
@@ -4177,6 +5016,9 @@ msgstr "创建部署令牌"
msgid "DeployTokens|Created"
msgstr "创建时间"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "部署令牌"
@@ -4228,6 +5070,9 @@ msgstr "新项目部署令牌已创建。"
msgid "Deployed"
msgstr "已部署"
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr "已部署到"
@@ -4252,9 +5097,30 @@ msgstr "æ述模æ¿å…许您为项目的问题和åˆå¹¶è¯·æ±‚定义æ述字段
msgid "Description:"
msgstr "æè¿°:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr "å–消所有"
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr "%{current_design}/%{designs_count}"
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr "无法找到设计,请å†è¯•ä¸€æ¬¡ã€‚"
@@ -4270,17 +5136,20 @@ msgstr "转到下一个设计"
msgid "DesignManagement|Go to previous design"
msgstr "转到上一个设计"
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr "å…许上传的设计最大数é‡ä¸º %{upload_limit}。请å†è¯•ä¸€æ¬¡ã€‚"
msgid "DesignManagement|The one place for your designs"
-msgstr "您的设计的一个地方"
+msgstr "您的设计将汇èšäºŽæ­¤ã€‚"
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
-msgstr "上传并查看此议题的最新设计。兼容且易于查找,因此æ¯ä¸ªäººéƒ½æ˜¯æœ€æ–°çš„。"
-
-msgid "DesignManagement|Upload designs"
-msgstr "上传设计"
+msgstr "上传并查看此议题的最新设计。一致且易于查找,因此æ¯ä¸ªäººéƒ½å¯ä»¥èŽ·å¾—最新的设计。"
msgid "Designs"
msgstr "设计"
@@ -4303,9 +5172,15 @@ msgstr "差异内容é™åˆ¶"
msgid "Diff limits"
msgstr "差异é™åˆ¶"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr "(æº)"
+
msgid "Diffs|No file name available"
msgstr "æ— å¯ç”¨çš„文件å"
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "获å–差异线时å‘生错误。"
@@ -4318,6 +5193,9 @@ msgstr "目录å称"
msgid "Disable"
msgstr "ç¦ç”¨"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "在此项目中ç¦ç”¨"
@@ -4334,7 +5212,7 @@ msgid "Disabled"
msgstr "å·²ç¦ç”¨"
msgid "Disabled mirrors can only be enabled by instance owners. It is recommended that you delete them."
-msgstr "ç¦ç”¨é•œåƒåªèƒ½ç”±å®žä¾‹æ‰€æœ‰è€…å¯ç”¨ã€‚建议您删除。"
+msgstr "å·²ç¦ç”¨é•œåƒåªèƒ½ç”±å®žä¾‹æ‰€æœ‰è€…å¯ç”¨ã€‚建议删除此项。"
msgid "Discard"
msgstr "放弃"
@@ -4375,6 +5253,12 @@ msgstr "讨论具体的建议或议题"
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr "讨论需è¦è§£å†³çš„具体建议或议题"
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr "讨论"
@@ -4405,6 +5289,9 @@ msgstr "在æµæ°´çº¿%{pipelineLink}上忽略"
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr "在%{projectLink} 中的æµæ°´çº¿ %{pipelineLink}上忽略"
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "您想自定义如何将Google Code电å­é‚®ä»¶åœ°å€å’Œç”¨æˆ·å导入GitLabå—?"
@@ -4414,6 +5301,9 @@ msgstr "Dockerfile"
msgid "Documentation for popular identity providers"
msgstr "常è§çš„身份验è¯æ供商的相关文档"
+msgid "Doing"
+msgstr "进行中"
+
msgid "Domain"
msgstr "域å"
@@ -4435,9 +5325,15 @@ msgstr "完æˆ"
msgid "Download"
msgstr "下载"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr "下载产物"
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr "下载资æº"
@@ -4447,6 +5343,9 @@ msgstr "下载代ç "
msgid "Download export"
msgstr "下载导出"
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr "下载许å¯è¯"
@@ -4483,9 +5382,15 @@ msgstr "æ¯ä¸ªRunnerå¯ä»¥å¤„于以下状æ€ä¸­çš„其中一ç§ï¼š"
msgid "Edit"
msgstr "编辑"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr "编辑%{name}"
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr "编辑部署密钥"
@@ -4507,12 +5412,21 @@ msgstr "编辑代ç ç‰‡æ®µ"
msgid "Edit application"
msgstr "编辑应用"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr "编辑评论"
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr "编辑环境"
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr "编辑文件"
@@ -4531,6 +5445,18 @@ msgstr "编辑议题"
msgid "Edit public deploy key"
msgstr "编辑公共部署密钥"
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4555,6 +5481,9 @@ msgstr "电å­é‚®ä»¶"
msgid "Email address"
msgstr "电å­é‚®ä»¶åœ°å€"
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "电å­é‚®ä»¶è¡¥ä¸"
@@ -4639,10 +5568,13 @@ msgstr "å¯ç”¨åŒ¿å化的数æ®æ”¶é›†"
msgid "Enable SAML authentication for this group"
msgstr "为此群组å¯ç”¨ SAML 身份验è¯"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "å¯ç”¨S​​entry进行错误报告和日志记录。"
+msgid "Enable access to Grafana"
+msgstr ""
msgid "Enable access to the Performance Bar for a given group."
+msgstr "为特定群组å¯ç”¨æ€§èƒ½æ çš„访问æƒé™ã€‚"
+
+msgid "Enable and configure Grafana."
msgstr ""
msgid "Enable and configure InfluxDB metrics."
@@ -4657,6 +5589,9 @@ msgstr "使用外部æœåŠ¡å¯ç”¨åˆ†ç±»æŽ§åˆ¶"
msgid "Enable error tracking"
msgstr "å¯ç”¨é”™è¯¯è·Ÿè¸ª"
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "在此项目中å¯ç”¨"
@@ -4675,12 +5610,18 @@ msgstr "å¯ç”¨æˆ–ç¦ç”¨åŒ¿å化数æ®æ”¶é›†."
msgid "Enable or disable version check and usage ping."
msgstr "å¯ç”¨æˆ–ç¦ç”¨ç‰ˆæœ¬æ£€æŸ¥åŠä½¿ç”¨æƒ…况检测(usage ping)。"
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "å¯ç”¨reCAPTCHA或Akismet并设置IPé™åˆ¶ã€‚"
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr "å¯ç”¨å…±äº«Runner"
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr "å¯ç”¨åŒé‡è®¤è¯"
@@ -4714,18 +5655,36 @@ msgstr "结æŸäºŽ(UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr "强制DNSé‡æ–°ç»‘定攻击ä¿æŠ¤"
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
+msgstr "输入IP地å€èŒƒå›´"
+
+msgid "Enter a number"
msgstr ""
msgid "Enter at least three characters to search"
msgstr "请至少输入三个字符æ‰å¯æœç´¢"
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "输入您的BitbucketæœåŠ¡å™¨URL和个人访问令牌"
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr "在下é¢è¾“入您的Phabricator Server URL和个人访问令牌"
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "输入议题æè¿°"
@@ -4738,12 +5697,21 @@ msgstr "输入åˆå¹¶è¯·æ±‚说明"
msgid "Enter the merge request title"
msgstr "输入åˆå¹¶è¯·æ±‚标题"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr "您正在查看最åŽæ›´æ–°çš„环境"
-msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
+msgid "Environment"
msgstr ""
+msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
+msgstr "环境å˜é‡é€šè¿‡Runner应用于环境。è¦ä¿æŠ¤å®ƒä»¬ï¼Œå¯å°†ä»–们仅开放给给å—ä¿æŠ¤çš„分支或标签。此外,它们å¯ä»¥è¢«å±è”½ï¼Œä»Žè€Œåœ¨ä½œä¸šæ—¥å¿—中éšè—它们,但必须符åˆä¸€å®šçš„正则表达å¼è¦æ±‚æ‰èƒ½è¢«å±è”½ã€‚您å¯ä»¥å°†çŽ¯å¢ƒå˜é‡ç”¨äºŽå¯†ç ã€å¯†é’¥æˆ–任何您想è¦ä½¿ç”¨çš„地方。"
+
msgid "Environment variables are configured by your administrator to be %{link_start}protected%{link_end} by default"
msgstr "环境å˜é‡å·²è¢«ç®¡ç†å‘˜é…置为%{link_start}å—ä¿æŠ¤çš„(默认)%{link_end}"
@@ -4909,32 +5877,38 @@ msgstr "å²è¯—"
msgid "Epics"
msgstr "å²è¯—"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr "å²è¯—路线图"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "有效利用å²è¯—,您的产å“线管ç†ä¼šå˜å¾—æ›´è½»æ¾é«˜æ•ˆ"
msgid "Epics|%{epicsCount} epics and %{issuesCount} issues"
-msgstr ""
+msgstr "%{epicsCount}个epics和%{issuesCount}个议题"
msgid "Epics|Add an epic"
-msgstr ""
+msgstr "添加一个å²è¯—"
msgid "Epics|Add an existing epic as a child epic."
-msgstr ""
+msgstr "添加一个现有的å²è¯—作为å­å²è¯—。"
msgid "Epics|An error occurred while saving the %{epicDateType} date"
msgstr "ä¿å­˜ %{epicDateType} 日期时å‘生错误"
msgid "Epics|Are you sure you want to remove %{bStart}%{targetIssueTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}?"
-msgstr ""
+msgstr "确定è¦ä»Ž%{bStart}%{parentEpicTitle}%{bEnd}删除%{bStart}%{targetIssueTitle}%{bEnd}å—?"
msgid "Epics|Create an epic within this group and add it as a child epic."
-msgstr ""
+msgstr "在当å‰ç¾¤ç»„创建å²è¯—,并将其作为å­å²è¯—添加到当å‰å²è¯—。"
msgid "Epics|Create new epic"
-msgstr ""
+msgstr "创建新å²è¯—"
msgid "Epics|How can I solve this?"
msgstr "我该如何解决该问题?"
@@ -4943,22 +5917,37 @@ msgid "Epics|More information"
msgstr "更多信æ¯"
msgid "Epics|Remove epic"
-msgstr ""
+msgstr "删除å²è¯—"
msgid "Epics|Remove issue"
+msgstr "删除议题"
+
+msgid "Epics|Show more"
msgstr ""
-msgid "Epics|Something went wrong while creating child epics."
+msgid "Epics|Something went wrong while assigning issue to epic."
msgstr ""
+msgid "Epics|Something went wrong while creating child epics."
+msgstr "创建å­å²è¯—时出错。"
+
msgid "Epics|Something went wrong while fetching child epics."
+msgstr "获å–å­å²è¯—时出错。"
+
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
msgstr ""
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "这些日期会影å“å²è¯—在路线图中的显示方å¼ã€‚里程碑日期æ¥è‡ªäºŽå²è¯—故事中的议题所属的里程碑。您还å¯ä»¥è®¾ç½®å›ºå®šæ—¥æœŸæˆ–完全删除它们。"
msgid "Epics|This will also remove any descendents of %{bStart}%{targetEpicTitle}%{bEnd} from %{bStart}%{parentEpicTitle}%{bEnd}. Are you sure?"
-msgstr ""
+msgstr "该æ“作也会从%{bStart}%{parentEpicTitle}%{bEnd}中移除%{bStart}%{targetEpicTitle}%{bEnd}的所有级别å­å²è¯—。确定继续å—?"
msgid "Epics|To schedule your epic's %{epicDateType} date based on milestones, assign a milestone with a %{epicDateType} date to any issue in the epic."
msgstr "如需根æ®é‡Œç¨‹ç¢‘æ¥å®‰æŽ’å²è¯—çš„ %{epicDateType} 日期,请为å²è¯—中的任一议题指定带有 %{epicDateType} 日期的里程碑。"
@@ -4972,9 +5961,6 @@ msgstr "开始"
msgid "Error"
msgstr "错误"
-msgid "Error Reporting and Logging"
-msgstr "错误报告和日志记录"
-
msgid "Error Tracking"
msgstr "错误跟踪"
@@ -4990,6 +5976,12 @@ msgstr "删除 %{issuableType} 时出错"
msgid "Error fetching contributors data."
msgstr "获å–贡献者数æ®æ—¶å‡ºé”™ã€‚"
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "获å–标记时出错。"
@@ -5003,7 +5995,7 @@ msgid "Error fetching refs"
msgstr "获å–refs时出错。"
msgid "Error fetching the dependency list. Please check your network connection and try again."
-msgstr ""
+msgstr "获å–ä¾èµ–列表时出错。请检查您的网络连接,然åŽé‡è¯•ã€‚"
msgid "Error fetching usage ping data."
msgstr "获å–使用情况(usage ping)æ•°æ®æ—¶å‡ºé”™ã€‚"
@@ -5015,7 +6007,7 @@ msgid "Error loading branches."
msgstr "加载分支时出错。"
msgid "Error loading burndown chart data"
-msgstr ""
+msgstr "加载燃尽图数æ®æ—¶å‡ºé”™"
msgid "Error loading file viewer."
msgstr "加载文件查看器时出错。"
@@ -5047,9 +6039,15 @@ msgstr "加载查看器时出错"
msgid "Error occurred when fetching sidebar data"
msgstr "获å–侧边æ æ•°æ®æ—¶å‡ºé”™"
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "切æ¢é€šçŸ¥è®¢é˜…æ—¶å‘生错误"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr "å‘生了错误。用户未被ç¦ç”¨"
@@ -5068,14 +6066,17 @@ msgstr "渲染Markdown预览时出错"
msgid "Error saving label update."
msgstr "ä¿å­˜æ ‡è®°æ›´æ–°æ—¶å‡ºé”™ã€‚"
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr "更新 %{issuableType} 时出错"
-msgid "Error updating status for all todos."
-msgstr "更新所有待办事项的状æ€æ—¶å‡ºé”™ã€‚"
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "更新待办事项状æ€æ—¶å‡ºé”™ã€‚"
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr "上传文件时出错"
@@ -5167,9 +6168,15 @@ msgstr "æ¯å‘¨æ‰§è¡Œï¼ˆå‘¨æ—¥å‡Œæ™¨ 4 点)"
msgid "Everyone"
msgstr "所有人"
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr "人人皆å¯è´¡çŒ®"
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr "使用GitBook创建GitLab Pages站点所需的一切。"
@@ -5186,11 +6193,14 @@ msgid "Everything you need to create a GitLab Pages site using plain HTML."
msgstr "使用纯HTML创建GitLab Pages网站所需的一切。"
msgid "Example: Usage = single query. (Requested) / (Capacity) = multiple queries combined into a formula."
-msgstr ""
+msgstr "示例:使用é‡=å•ä¸€æŸ¥è¯¢ã€‚(请求)/(容é‡)=å½¢æˆå…¬å¼çš„多é‡æŸ¥è¯¢ã€‚"
msgid "Except policy:"
msgstr "策略以外:"
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr "现有的æˆå‘˜å’Œç¾¤ç»„"
@@ -5203,9 +6213,18 @@ msgstr "展开全部"
msgid "Expand approvers"
msgstr "展开核准人"
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "展开侧边æ "
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr "到期时间"
@@ -5215,6 +6234,12 @@ msgstr "已过期"
msgid "Expired %{expiredOn}"
msgstr "已在 %{expiredOn} 过期"
+msgid "Expires"
+msgstr "到期"
+
+msgid "Expires at"
+msgstr "到期时间"
+
msgid "Expires in %{expires_at}"
msgstr "在 %{expires_at} 过期"
@@ -5269,6 +6294,12 @@ msgstr "外部授æƒæ‹’ç»è®¿é—®æ­¤é¡¹ç›®"
msgid "External authorization request timeout"
msgstr "外部授æƒè¯·æ±‚超时"
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "分类标签"
@@ -5308,6 +6339,15 @@ msgstr "失败的作业"
msgid "Failed create wiki"
msgstr "创建 Wiki 失败"
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "无法å˜æ›´æ‰€æœ‰è€…"
@@ -5329,6 +6369,9 @@ msgstr "无法通过 gitlab-shell 创建仓库"
msgid "Failed to create resources"
msgstr "创建资æºå¤±è´¥"
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr "无法部署到"
@@ -5350,6 +6393,18 @@ msgstr "加载群组和用户失败。"
msgid "Failed to load related branches"
msgstr "加载相关分支失败"
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr "由于内部错误而无法å‡çº§æ ‡è®°ã€‚请è”系管ç†å‘˜ã€‚"
@@ -5359,6 +6414,9 @@ msgstr "ä¿æŠ¤åˆ†æ”¯å¤±è´¥"
msgid "Failed to protect the environment"
msgstr "ä¿æŠ¤çŽ¯å¢ƒå¤±è´¥"
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "无法从看æ¿ç§»é™¤è®®é¢˜ï¼Œè¯·é‡è¯•ã€‚"
@@ -5392,6 +6450,9 @@ msgstr "无法ä¿å­˜å好设置(%{error_message})。"
msgid "Failed to save preferences."
msgstr "无法ä¿å­˜å好设置。"
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr "无法使用智能å¡èº«ä»½éªŒè¯è¿›è¡Œç™»å½•"
@@ -5419,6 +6480,9 @@ msgstr "上传对象映射文件失败"
msgid "Failure"
msgstr "失败"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr "æ— åˆå¹¶æ交的快进å¼åˆå¹¶"
@@ -5449,6 +6513,15 @@ msgstr "API URL"
msgid "FeatureFlags|Active"
msgstr "å·²å¯ç”¨"
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr "é…ç½®"
@@ -5470,6 +6543,9 @@ msgstr "æè¿°"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "编辑功能标志"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr "环境规格"
@@ -5479,20 +6555,20 @@ msgstr "环境规格"
msgid "FeatureFlags|Feature Flag"
msgstr "功能标志"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
-msgstr "功能标记是通过创建一组规则æ¥å®šä¹‰ç›®æ ‡çŽ¯å¢ƒçš„状æ€æ¥æž„建的行为。默认的规则%{codeStart} *%{codeEnd}用于%{boldStart}所有环境%{boldEnd},您å¯ä»¥é€šè¿‡ä¸‹é¢çš„环境规范添加任æ„æ•°é‡çš„规则。您å¯ä»¥åˆ‡æ¢æ¯ä¸ªè§„则的行为以设置它们%{boldStart}活动%{boldEnd}或%{boldStart}éžæ´»åŠ¨%{boldEnd}。"
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgstr "功能标记是通过创建一组规则æ¥å®šä¹‰ç›®æ ‡çŽ¯å¢ƒçš„状æ€æ¥æž„建的行为。默认的规则%{codeStart} *%{codeEnd}用于%{boldStart}所有环境%{boldEnd},您å¯ä»¥é€šè¿‡ä¸‹é¢çš„环境规范添加任æ„æ•°é‡çš„规则。您å¯ä»¥åˆ‡æ¢æ¯ä¸ªè§„则的行为以设置它们%{boldStart}å¯ç”¨%{boldEnd}或%{boldStart}ç¦ç”¨%{boldEnd}。"
msgid "FeatureFlags|Feature Flags"
msgstr "功能标志"
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
-msgstr "功能标志å…许您通过动æ€åˆ‡æ¢æŸäº›åŠŸèƒ½å°†ä»£ç é…置为ä¸åŒçš„风格。"
-
msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr "功能标志 %{name} 将被删除。您确定å—?"
-msgid "FeatureFlags|Get started with Feature Flags"
-msgstr "功能标志入门"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgstr ""
+
+msgid "FeatureFlags|Get started with feature flags"
+msgstr ""
msgid "FeatureFlags|Inactive"
msgstr "未å¯ç”¨"
@@ -5506,11 +6582,11 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr "实例ID"
-msgid "FeatureFlags|Loading Feature Flags"
-msgstr "加载功能标志"
+msgid "FeatureFlags|Loading feature flags"
+msgstr ""
-msgid "FeatureFlags|More Information"
-msgstr "更多信æ¯"
+msgid "FeatureFlags|More information"
+msgstr ""
msgid "FeatureFlags|Name"
msgstr "å称"
@@ -5521,26 +6597,53 @@ msgstr "新建"
msgid "FeatureFlags|New Feature Flag"
msgstr "新建功能标志"
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr "å—ä¿æŠ¤"
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "状æ€"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr "目标环境"
-msgid "FeatureFlags|There are no active Feature Flags"
-msgstr "没有活动的功能标志"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
+msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
-msgstr "没有éžæ´»åŠ¨çš„功能标志"
+msgid "FeatureFlags|There are no inactive feature flags"
+msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
msgstr "获å–功能标志时出错。"
msgid "FeatureFlags|Try again in a few moments or contact your support team."
-msgstr "请ç¨åŽé‡è¯•æˆ–è”系您的支æŒå›¢é˜Ÿã€‚"
+msgstr "请ç¨åŽé‡è¯•æˆ–è”系支æŒå›¢é˜Ÿã€‚"
+
+msgid "FeatureFlags|User IDs"
+msgstr ""
msgid "Feb"
msgstr "2月"
@@ -5560,9 +6663,6 @@ msgstr "获å–许å¯è¯å¤±è´¥ã€‚找ä¸åˆ°è¯·æ±‚端点。"
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr "获å–许å¯è¯å¤±è´¥ã€‚当å‰æƒé™æ— æ³•æ‰§è¡Œæ­¤æ“作。"
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "当å‰é¡µé¢ä¸Šçš„字段ä¸å¯ç¼–辑,å¯ä»¥é…ç½®"
-
msgid "File"
msgid_plural "Files"
msgstr[0] "文件"
@@ -5624,6 +6724,9 @@ msgstr "按群组过滤结果"
msgid "Filter results by project"
msgstr "按项目过滤结果"
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "过滤..."
@@ -5666,17 +6769,20 @@ msgstr "已完æˆ"
msgid "First day of the week"
msgstr "æ¯å‘¨çš„起始日"
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
-msgstr "ä¿®å¤æ—¥æœŸ"
+msgstr "固定日期"
msgid "Fixed due date"
msgstr "固定截止日期"
msgid "Fixed start date"
-msgstr "ä¿®å¤å¼€å§‹æ—¥æœŸ"
+msgstr "固定开始日期"
msgid "Fixed:"
-msgstr "ä¿®å¤ï¼š"
+msgstr "固定:"
msgid "FlowdockService|Flowdock Git source token"
msgstr "Flowdockçš„Gitæºä»¤ç‰Œ"
@@ -5729,6 +6835,9 @@ msgstr "对于ç§æœ‰é¡¹ç›®ï¼Œä»»ä½•æˆå‘˜ï¼ˆè®¿å®¢æˆ–更高级别)都å¯ä»¥æŸ¥
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr "对于公开项目,任何人都å¯ä»¥æŸ¥çœ‹æµæ°´çº¿å¹¶è®¿é—®ä½œä¸šè¯¦æƒ…(输出日志和产物)"
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr "派生"
@@ -5765,12 +6874,18 @@ msgstr "在您的 %{gitlab_ci_yml} 中找到错误:"
msgid "Found errors in your .gitlab-ci.yml:"
msgstr "在.gitlab-ci.yml中å‘现错误:"
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "å…费试用gitlab.comçš„Gold计划"
msgid "Friday"
msgstr "星期五"
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr "%{providerTitle}æºåœ°å€"
@@ -5831,6 +6946,9 @@ msgstr "生æˆä¸€ç»„默认的标记"
msgid "Generate key"
msgstr "生æˆå¯†é’¥"
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr "生æˆæ–°çš„导出"
@@ -5843,6 +6961,9 @@ msgstr "Geo 节点"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Geoå…许您将您的GitLab实例å¤åˆ¶åˆ°å…¶ä»–地ç†ä½ç½®ã€‚"
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "节点出现故障或æŸå。"
@@ -5906,6 +7027,9 @@ msgstr "本地LFS对象"
msgid "GeoNodes|Local attachments"
msgstr "本地附件"
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr "本地作业产物"
@@ -6014,33 +7138,42 @@ msgstr "当å‰Geo节点é…置使用ä¸å®‰å…¨çš„HTTP连接, 建议使用HTTPS。"
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} 计划强制é‡æ–°ä¸‹è½½"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} 计划é‡æ–°æ£€æŸ¥"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} 已计划é‡æ–°åŒæ­¥"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
msgid "Geo|All"
msgstr "全部"
msgid "Geo|All projects"
msgstr "所有项目"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "正在计划所有项目é‡æ–°æ£€æŸ¥"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "正在计划所有项目é‡æ–°åŒæ­¥"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "批é‡æ“作"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr "选择è¦ä¸Žæ­¤è¾…助节点åŒæ­¥çš„群组。"
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr "控制此辅助节点的 LFS/附件回写的最大并å‘"
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr "控制此 Geo 节点的验è¯æ“作的最大并å‘"
@@ -6065,11 +7198,14 @@ msgstr "Geo状æ€"
msgid "Geo|Groups to synchronize"
msgstr "需åŒæ­¥çš„群组"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "å·²åŒæ­¥"
-msgid "Geo|Internal URL"
-msgstr "内部 URL"
+msgid "Geo|Internal URL (optional)"
+msgstr ""
msgid "Geo|Last repository check run"
msgstr "上次仓库的è¿è¡Œæ£€æŸ¥"
@@ -6119,12 +7255,6 @@ msgstr "特定存储片中的项目"
msgid "Geo|Re-verification interval"
msgstr "é‡æ–°éªŒè¯é—´éš”"
-msgid "Geo|Recheck"
-msgstr "é‡æ–°æ£€æŸ¥"
-
-msgid "Geo|Recheck all projects"
-msgstr "é‡æ–°æ£€æŸ¥æ‰€æœ‰é¡¹ç›®"
-
msgid "Geo|Redownload"
msgstr "é‡æ–°ä¸‹è½½"
@@ -6143,6 +7273,12 @@ msgstr "é‡æ–°åŒæ­¥æ‰€æœ‰é¡¹ç›®"
msgid "Geo|Retry count"
msgstr "é‡è¯•è®¡æ•°"
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr "选择è¦å¤åˆ¶çš„群组。"
@@ -6167,8 +7303,8 @@ msgstr "åŒæ­¥äºŽ"
msgid "Geo|Synchronization failed - %{error}"
msgstr "åŒæ­¥å¤±è´¥ - %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
-msgstr "在主节点上定义的URL,辅助节点应使用该URL与其è”系。如果未设置,则返回“urlâ€"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
+msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
msgstr "æ•°æ®åº“当å‰è½åŽäºŽä¸»èŠ‚点%{db_lag}。"
@@ -6224,8 +7360,11 @@ msgstr "获得å…费的实例评估"
msgid "Get started with error tracking"
msgstr "开始使用错误跟踪"
+msgid "Get started with performance monitoring"
+msgstr "开始进行性能监控"
+
msgid "Getting started with releases"
-msgstr "开始使用版本"
+msgstr "开始使用å‘布"
msgid "Git"
msgstr "Git"
@@ -6234,7 +7373,7 @@ msgid "Git LFS is not enabled on this GitLab server, contact your admin."
msgstr "æ­¤ GitLab æœåŠ¡å™¨ä¸Šæœªå¯ç”¨ Git LFS,请è”系管ç†å‘˜ã€‚"
msgid "Git LFS objects will be synced in pull mirrors if LFS is %{docs_link_start}enabled for the project%{docs_link_end}. They will <strong>not</strong> be synced in push mirrors."
-msgstr "如果 %{docs_link_start}为项目å¯ç”¨%{docs_link_end}了LFS,则Git LFS对象将在拉å–é•œåƒæ—¶åŒæ­¥ï¼Œ 但<strong>ä¸ä¼š</strong> 在推é€é•œåƒæ—¶åŒæ­¥ã€‚"
+msgstr "如%{docs_link_start}为项目å¯ç”¨%{docs_link_end}了LFS,则Git LFS对象将在拉å–é•œåƒæ—¶åŒæ­¥ï¼Œ 但<strong>ä¸ä¼š</strong>在推é€é•œåƒæ—¶åŒæ­¥ã€‚"
msgid "Git global setup"
msgstr "Git 全局设置"
@@ -6246,7 +7385,7 @@ msgid "Git revision"
msgstr "Gitæ交版本"
msgid "Git shallow clone"
-msgstr ""
+msgstr "Git 浅克隆"
msgid "Git strategy for pipelines"
msgstr "æµæ°´çº¿çš„Gitç­–ç•¥"
@@ -6281,6 +7420,15 @@ msgstr "GitLab用户"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr "å³ä½¿ç³»ç»Ÿä¸­çš„用户数已ç»è¶…过了许å¯ä¸­çš„数目,GitLabä¾ç„¶å…许继续使用当å‰è®¸å¯ã€‚续订许å¯æ—¶ï¼Œæ‚¨éœ€è¦æ”¯ä»˜è¿™äº›ç”¨æˆ·çš„费用。"
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr "GitLab å…ƒæ•°æ® URL"
@@ -6299,9 +7447,6 @@ msgstr "GitLabå°†è¿è¡ŒåŽå°ä»»åŠ¡ï¼Œç”Ÿæˆæ•°æ®åº“的匿å化CSV,并上传
msgid "GitLab.com import"
msgstr "从GitLab.com导入"
-msgid "GitLab’s issue tracker"
-msgstr "GitLab 问题跟踪器"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6317,9 +7462,18 @@ msgstr "Gitea 主机地å€"
msgid "Gitea Import"
msgstr "从Gitea导入"
+msgid "Gitlab CI/CD"
+msgstr "GitLab CI/CD"
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr "%{time_ago}授æƒè®¿é—®"
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr "全局通知设置"
@@ -6332,6 +7486,12 @@ msgstr "Go Micro是一个微æœåŠ¡å¼€å‘的框架。"
msgid "Go back"
msgstr "返回"
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr "返回%{startTag}å¼€å¯çš„议题%{endTag}并选择è¦æ·»åŠ åˆ°çœ‹æ¿çš„议题。"
+
msgid "Go full screen"
msgstr "å…¨å±æ¨¡å¼"
@@ -6341,39 +7501,129 @@ msgstr "转到"
msgid "Go to %{link_to_google_takeout}."
msgstr "转至 %{link_to_google_takeout}。"
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr "转到上一级"
msgid "Go to project"
msgstr "跳转到项目"
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr "跳转到你的派生项目"
-msgid "Golden Tanuki"
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
msgstr ""
+msgid "Golden Tanuki"
+msgstr "金狸"
+
msgid "Google Code import"
msgstr "从Google Code导入"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "Google身份验è¯æœª%{link_to_documentation}。如需使用此æœåŠ¡ï¼Œè¯·å’¨è¯¢GitLab管ç†å‘˜ã€‚"
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
-msgstr ""
+msgstr "知é“了"
msgid "Got it!"
msgstr "了解ï¼"
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr "å…许访问"
msgid "Graph"
msgstr "分支图"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr "å¯ç”¨ Gravatar"
@@ -6437,15 +7687,15 @@ msgstr "群组æµæ°´çº¿åˆ†é’Ÿæ•°å·²æˆåŠŸé‡ç½®ã€‚"
msgid "Group was successfully updated."
msgstr "群组已æˆåŠŸæ›´æ–°ã€‚"
-msgid "Group:"
-msgstr "群组:"
-
msgid "Group: %{group_name}"
msgstr "群组:%{group_name}"
msgid "Group: %{name}"
msgstr "群组: %{name}"
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "从 %{dateWord} 起"
@@ -6474,7 +7724,7 @@ msgid "GroupSAML|Certificate fingerprint"
msgstr "è¯ä¹¦æŒ‡çº¹"
msgid "GroupSAML|Configuration"
-msgstr ""
+msgstr "é…ç½®"
msgid "GroupSAML|Enable SAML authentication for this group."
msgstr "为此群组å¯ç”¨SAML身份验è¯ã€‚"
@@ -6482,6 +7732,9 @@ msgstr "为此群组å¯ç”¨SAML身份验è¯ã€‚"
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr "为此群组强制执行仅SSO身份验è¯ã€‚"
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr "强制用户为该群组设置专用的由群组管ç†å¸æˆ·ã€‚"
@@ -6557,6 +7810,9 @@ msgstr "自定义群组徽章。"
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr "默认为此群组中所有项目的 Auto DevOps æµæ°´çº¿"
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "了解有关徽章的更多信æ¯ã€‚"
@@ -6590,6 +7846,9 @@ msgstr "此设置已应用于 %{ancestor_group}。 您å¯ä»¥è¦†ç›–此设置或 %
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "此设置将应用于所有å­ç»„,除éžç”±ç»„所有者覆盖。已ç»æœ‰æƒè®¿é—®è¯¥é¡¹ç›®çš„群组将ä»ç„¶å…·æœ‰è®¿é—®æƒé™ï¼Œé™¤éžè®¿é—®æƒé™è¢«æ‰‹åŠ¨ç§»é™¤ã€‚"
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "无法ç¦ç”¨çˆ¶ç»„的“共享群组é”â€ï¼Œåªæœ‰çˆ¶ç¾¤ç»„的所有者æ‰å¯ä»¥æ“作ï¼"
@@ -6713,6 +7972,12 @@ msgstr "帮助页é¢"
msgid "Help page text and support page url."
msgstr "帮助页é¢æ–‡æœ¬å’Œæ”¯æŒé¡µé¢ç½‘å€ã€‚"
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr "éšè—已归档的项目"
@@ -6734,6 +7999,9 @@ msgstr "éšè—上传数æ®"
msgid "Hide shared projects"
msgstr "éšè—共享项目"
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "éšè—值"
@@ -6741,6 +8009,9 @@ msgstr[0] "éšè—值"
msgid "Hide values"
msgstr "éšè—值"
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr "顶级角色:"
@@ -6759,6 +8030,9 @@ msgstr "Hook å·²æˆåŠŸåˆ›å»ºã€‚"
msgid "Hook was successfully updated."
msgstr "é’©å­å·²æˆåŠŸæ›´æ–°ã€‚"
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr "例行维护"
@@ -6768,6 +8042,9 @@ msgstr "已开始维护"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr "管家,导出,路径,转移,删除,存档。"
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr "æ¯ä¸ªElasticsearch分片有多少个副本。"
@@ -6777,6 +8054,9 @@ msgstr "å°†Elasticsearch索引拆分æˆå¤šå°‘个分片。"
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr "但是,您已ç»æ˜¯ %{member_source} çš„æˆå‘˜ã€‚请使用其他å¸æˆ·ç™»å½•ä»¥æŽ¥å—邀请。"
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "æˆ‘æŽ¥å— %{terms_link}"
@@ -6789,9 +8069,15 @@ msgstr "我忘记了密ç "
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr "我已阅读并åŒæ„Let's Encrypt %{link_start}æœåŠ¡æ¡æ¬¾%{link_end}"
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "å…许Web IDE中的JavaScript项目使用CodeSandbox客户端的实时预览。"
@@ -6828,14 +8114,17 @@ msgstr "刷新预览"
msgid "IDE|Review"
msgstr "审阅"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "IP地å€"
msgid "IP address restriction is not editable in subgroups. Value inherited from top-level parent group."
-msgstr ""
+msgstr "IP地å€é™åˆ¶ä¸èƒ½åœ¨å­ç¾¤ç»„中编辑。相关设置继承于最顶层的上级群组。"
msgid "IP subnet restriction only allowed for top-level groups"
-msgstr ""
+msgstr "åªå…许在最顶层群组设置IPå­ç½‘é™åˆ¶"
msgid "Identifier"
msgstr "身份标识"
@@ -6850,7 +8139,7 @@ msgid "If checked, group owners can manage LDAP group links and LDAP member over
msgstr "如果选中,则群组所有者å¯ä»¥ç®¡ç† LDAP 群组链接和 LDAP æˆå‘˜è¦†ç›–"
msgid "If checked, new group memberships and permissions can only be added via LDAP synchronization"
-msgstr ""
+msgstr "选中åŽå°†åˆ™åªèƒ½é€šè¿‡LDAPåŒæ­¥æ·»åŠ æ–°çš„组æˆå‘˜èº«ä»½å’Œæƒé™"
msgid "If disabled, a diverged local branch will not be automatically updated with commits from its remote counterpart, to prevent local data loss. If the default branch (%{default_branch}) has diverged and cannot be updated, mirroring will fail. Other diverged branches are silently ignored."
msgstr "如果ç¦ç”¨ï¼Œåˆ™ä¸ä¼šä½¿ç”¨è¿œç¨‹å‰¯æœ¬çš„æ交自动更新分å‰çš„本地分支,以防止本地数æ®ä¸¢å¤±ã€‚如果默认分支 (%{default_branch}) 已分å‰ä¸”无法更新,则镜åƒå°†å¤±è´¥ã€‚其他分å‰çš„分支默默被忽略。"
@@ -6891,6 +8180,12 @@ msgstr "分帧(Onion skin)"
msgid "ImageDiffViewer|Swipe"
msgstr "滑动"
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr "身份模拟已被ç¦ç”¨"
@@ -6996,8 +8291,8 @@ msgstr "无法导入远程数æ®ã€‚"
msgid "ImportProjects|The repository could not be created."
msgstr "无法创建仓库。"
-msgid "ImportProjects|Updating the imported projects failed"
-msgstr "更新已导入的项目失败"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
+msgstr ""
msgid "Improve Issue boards"
msgstr "增强议题看æ¿"
@@ -7050,14 +8345,17 @@ msgstr "包括一个 MVC 结构,Gemfile,Rakefile,以åŠå…¶ä»–许多æ¥å¸®å
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr "包括一个MVC 结构,mvw å’Œ pom.xml æ¥å¸®åŠ©æ‚¨å¼€å§‹ã€‚"
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr "ä¸å…¼å®¹çš„项目"
msgid "Incompatible options set!"
msgstr "设置了ä¸å…¼å®¹çš„选项ï¼"
-msgid "Indexing"
-msgstr "正在索引"
+msgid "Index all projects"
+msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
msgstr "指示此runner是å¦å¯ä»¥é€‰æ‹©æ— æ ‡è®°çš„作业"
@@ -7090,7 +8388,7 @@ msgid "Insights"
msgstr "洞察"
msgid "Install"
-msgstr ""
+msgstr "安装"
msgid "Install GitLab Runner"
msgstr "安装GitLab Runner"
@@ -7101,11 +8399,14 @@ msgstr "在Kubernetes上安装Runner"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr "请先从您的应用程åºåº“安装软件令牌验è¯å™¨ï¼Œå¦‚%{free_otp_link}或者谷歌验è¯å™¨ï¼Œç„¶åŽæ‰«æ这个QRç ã€‚更多信æ¯å¯ä»¥åœ¨æ­¤%{help_link_start}文档%{help_link_end}中找到。"
+msgid "Install on clusters"
+msgstr "在群集上安装"
+
msgid "Installed"
-msgstr ""
+msgstr "已安装"
msgid "Installing"
-msgstr ""
+msgstr "正在安装"
msgid "Instance"
msgid_plural "Instances"
@@ -7117,6 +8418,9 @@ msgstr "本站统计"
msgid "Instance Statistics visibility"
msgstr "实例统计信æ¯å¯è§æ€§"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "实例ä¸æ”¯æŒå¤šä¸ªKubernetes集群"
@@ -7159,9 +8463,12 @@ msgstr "检测到无效的 Insights é…置文件"
msgid "Invalid Login or password"
msgstr "登录å或密ç æ— æ•ˆ"
-msgid "Invalid date"
+msgid "Invalid URL"
msgstr ""
+msgid "Invalid date"
+msgstr "无效日期"
+
msgid "Invalid feature"
msgstr "无效的功能"
@@ -7181,13 +8488,13 @@ msgid "Invalid pin code"
msgstr "无效的 pin ç "
msgid "Invalid query"
-msgstr ""
+msgstr "无效的查询"
msgid "Invalid repository path"
msgstr "无效的仓库路径"
msgid "Invalid server response"
-msgstr ""
+msgstr "无效的æœåŠ¡å™¨å“应"
msgid "Invalid two-factor code."
msgstr "无效的åŒé‡è®¤è¯ç ã€‚"
@@ -7207,17 +8514,23 @@ msgstr "邀请群组"
msgid "Invite member"
msgstr "邀请æˆå‘˜"
-msgid "Invoke Count"
-msgstr "调用计数"
-
-msgid "Invoke Time"
-msgstr "调用时间"
+msgid "Invocations"
+msgstr ""
msgid "Is using license seat:"
msgstr "正在使用许å¯è¯ï¼š"
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
-msgstr "已关闭(%{moved_link_start}已移动%{moved_link_end})"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
+msgstr ""
+
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
+msgstr ""
msgid "Issue"
msgstr "议题"
@@ -7238,7 +8551,7 @@ msgid "Issue update failed"
msgstr "议题更新失败"
msgid "Issue was closed by %{name} %{reason}"
-msgstr ""
+msgstr "议题由%{name}以%{reason}原因关闭"
msgid "IssueBoards|Board"
msgstr "看æ¿"
@@ -7261,9 +8574,27 @@ msgstr "您的一些看æ¿è¢«éšè—,请激活许å¯è¯åŽå†æ¬¡æŸ¥çœ‹ã€‚"
msgid "IssueBoards|Switch board"
msgstr "切æ¢çœ‹æ¿"
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "议题"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "议题å¯ä»¥æ˜¯ç¼ºé™·ï¼Œä»»åŠ¡æˆ–è¦è®¨è®ºçš„想法。此外,å¯ä»¥é€šè¿‡æœç´¢å’Œè¿‡æ»¤æ¥æŸ¥æ‰¾è®®é¢˜ã€‚"
@@ -7279,8 +8610,11 @@ msgstr "议题,åˆå¹¶è¯·æ±‚,推é€åŠè¯„论。"
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr "在您为项目创建议题åŽï¼Œæˆ‘们就会开始跟踪并显示它们的指标"
-msgid "IssuesAnalytics|Issues Created"
-msgstr "创建的议题数"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
msgid "IssuesAnalytics|Issues created per month"
msgstr "æ¯æœˆåˆ›å»ºçš„议题"
@@ -7297,6 +8631,12 @@ msgstr "群组中的项目无任何议题"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "è¦æ‰©å¤§æœç´¢èŒƒå›´ï¼Œè¯·æ›´æ”¹æˆ–删除上é¢çš„过滤æ¡ä»¶"
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr "它必须有标题行和至少有两列:第一æ æ˜¯è®®é¢˜æ ‡é¢˜ï¼Œç¬¬äºŒæ æ˜¯è®®é¢˜æ述。自动检测分隔符。"
@@ -7322,13 +8662,13 @@ msgid "JiraService|If different from Web URL"
msgstr "如果与 Web URL ä¸åŒ"
msgid "JiraService|Jira API URL"
-msgstr "JIRA API URL"
+msgstr "Jira API URL"
msgid "JiraService|Jira comments will be created when an issue gets referenced in a commit."
-msgstr "在æ交中引用议题时将创建 JIRA 评论。"
+msgstr "在æ交中引用议题时将创建Jira评论。"
msgid "JiraService|Jira comments will be created when an issue gets referenced in a merge request."
-msgstr "在åˆå¹¶è¯·æ±‚中引用议题时将创建 JIRA 评论。"
+msgstr "在åˆå¹¶è¯·æ±‚中引用议题时将创建Jira评论。"
msgid "JiraService|Jira issue tracker"
msgstr "Jira 议题跟踪"
@@ -7343,10 +8683,10 @@ msgid "JiraService|Use , or ; to separate multiple transition IDs"
msgstr "使用“, â€æˆ–“; â€åˆ†éš”多个转æ¢ID"
msgid "JiraService|Use a password for server version and an API token for cloud version"
-msgstr "为æœåŠ¡å™¨ç‰ˆæœ¬ä½¿ç”¨å¯†ç , 为云版本使用 API 令牌"
+msgstr "æœåŠ¡å™¨ç‰ˆæœ¬è¯·ä½¿ç”¨å¯†ç , 云版本请使用API令牌"
msgid "JiraService|Use a username for server version and an email for cloud version"
-msgstr "为æœåŠ¡å™¨ç‰ˆæœ¬ä½¿ç”¨ç”¨æˆ·å,为云版本使用电å­é‚®ä»¶"
+msgstr "æœåŠ¡å™¨ç‰ˆæœ¬è¯·ä½¿ç”¨ç”¨æˆ·å,云版本请使用电å­é‚®ä»¶"
msgid "JiraService|Username or Email"
msgstr "用户å或电å­é‚®ä»¶"
@@ -7394,7 +8734,7 @@ msgid "Job|Browse"
msgstr "æµè§ˆ"
msgid "Job|Complete Raw"
-msgstr "完整原"
+msgstr "完整原始日志"
msgid "Job|Download"
msgstr "下载"
@@ -7448,7 +8788,7 @@ msgid "Job|with"
msgstr "ç”±"
msgid "Join Zoom meeting"
-msgstr ""
+msgstr "加入Zoom会议"
msgid "Jul"
msgstr "7月"
@@ -7474,6 +8814,9 @@ msgstr "秘钥 (PEM)"
msgid "Key: %{key}"
msgstr "密钥: %{key}"
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7498,11 +8841,14 @@ msgstr "Kubernetes集群已æˆåŠŸæ›´æ–°ã€‚"
msgid "Kubernetes configured"
msgstr "Kuberneteså·²é…ç½®"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr "Kubinentes 错误: %{error_code}"
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "KubernetesæœåŠ¡é›†æˆå³å°†è¢«åœç”¨ã€‚ 请使用新的 <a href=\"%{url}\"/>Kubernetes集群</a> 页é¢%{deprecated_message_content} Kubernetes集群"
+msgid "LDAP"
+msgstr ""
msgid "LDAP settings"
msgstr "LDAP 设置"
@@ -7586,6 +8932,9 @@ msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "最近 %d 天"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "最新æµæ°´çº¿"
@@ -7607,15 +8956,24 @@ msgstr "最åŽä¿®æ”¹äºŽ%{date}"
msgid "Last edited by %{name}"
msgstr "最åŽä¿®æ”¹æ¥è‡ªäºŽ%{name}"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr "最åŽå›žå¤æ¥è‡ªäºŽ"
msgid "Last seen"
msgstr "上次查看"
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "最åŽæ›´æ–°"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "最近更新"
@@ -7634,8 +8992,8 @@ msgstr "于"
msgid "Latest changes"
msgstr "最新更改"
-msgid "Latest pipeline for this branch"
-msgstr "该分支的最新æµæ°´çº¿"
+msgid "Latest pipeline for the most recent commit on this branch"
+msgstr ""
msgid "Lead"
msgstr "最高"
@@ -7652,9 +9010,6 @@ msgstr "了解GitLab如何 %{no_packages_link_start}å‘布和共享您的包%{no
msgid "Learn more"
msgstr "进一步了解"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "为了了解更多关于 %{issue_boards_url},在多个列表中ä¿æŒå¯¹è®®é¢˜çš„追踪,您å¯ä»¥ä½¿ç”¨ä½¿ç”¨æ ‡è®°ï¼ŒæŒ‡æ´¾äººï¼Œå’Œé‡Œç¨‹ç¢‘。 如果你å‘现议题看æ¿ä¸Šä¸¢å¤±äº†ä¸€äº›ä¿¡æ¯ï¼Œè¯·åœ¨ %{gitlab_issues_url} 创建一个议题。"
-
msgid "Learn more about Auto DevOps"
msgstr "了解更多关于Auto DevOps"
@@ -7665,7 +9020,7 @@ msgid "Learn more about Web Terminal"
msgstr "了解更多关于 Web 终端"
msgid "Learn more about adding certificates to your project by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
-msgstr ""
+msgstr "通过%{docs_link_start}GitLab Pages上的文档%{docs_link_end}了解更多关于å‘项目添加è¯ä¹¦çš„ä¿¡æ¯ã€‚"
msgid "Learn more about approvals."
msgstr "了解有关核准的更多信æ¯ã€‚"
@@ -7673,6 +9028,9 @@ msgstr "了解有关核准的更多信æ¯ã€‚"
msgid "Learn more about custom project templates"
msgstr "了解更多关于自定义项目模æ¿"
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr "了解更多关于群组级项目模æ¿"
@@ -7680,6 +9038,9 @@ msgid "Learn more about signing commits"
msgstr "了解更多有关签åæ交的详细信æ¯"
msgid "Learn more about the dependency list"
+msgstr "了解更多关于ä¾èµ–列表的信æ¯"
+
+msgid "Learn more about vulnerability check"
msgstr ""
msgid "Learn more in the"
@@ -7707,82 +9068,102 @@ msgid "Let's Encrypt does not accept emails on example.com"
msgstr "Let's Encryptä¸æŽ¥å—example.com的电å­é‚®ä»¶"
msgid "Let's Encrypt is a free, automated, and open certificate authority (CA) that gives digital certificates in order to enable HTTPS (SSL/TLS) for websites. Learn more about Let's Encrypt configuration by following the %{docs_link_start}documentation on GitLab Pages%{docs_link_end}."
-msgstr ""
+msgstr "Let's Encrypt是一个å…è´¹ã€è‡ªåŠ¨åŒ–和开放的è¯ä¹¦æŽˆæƒ(CA)机构。它å¯ä»¥æ供网站å¯ç”¨HTTPS (SSL/TLS)所需的数字è¯ä¹¦ã€‚通过%{docs_link_start}GitLab Pages上的文档%{docs_link_end}æ¥äº†è§£Let's Encrypté…置的更多信æ¯ã€‚"
msgid "License"
msgstr "许å¯è¯"
-msgid "LicenseManagement|Add a license"
-msgstr "添加许å¯è¯"
+msgid "License Compliance"
+msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "手动添加许å¯è¯ä»¥æ‰¹å‡†æˆ–加入黑åå•"
+msgid "LicenseCompliance|Add a license"
+msgstr ""
-msgid "LicenseManagement|Approve"
-msgstr "批准"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "批准许å¯è¯"
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "批准许å¯è¯ï¼Ÿ"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "已批准"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
-msgstr "黑åå•"
+msgid "LicenseCompliance|Approved"
+msgstr ""
-msgid "LicenseManagement|Blacklist license"
-msgstr "许å¯è¯é»‘åå•"
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
-msgid "LicenseManagement|Blacklist license?"
-msgstr "许å¯è¯é»‘åå•ï¼Ÿ"
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
-msgid "LicenseManagement|Blacklisted"
-msgstr "黑åå•"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "å–消"
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
-msgid "LicenseManagement|License"
-msgstr "许å¯è¯"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
-msgid "LicenseManagement|License Management"
-msgstr "许å¯è¯ç®¡ç†"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
-msgid "LicenseManagement|License details"
-msgstr "许å¯è¯ä¿¡æ¯"
+msgid "LicenseCompliance|License"
+msgstr ""
-msgid "LicenseManagement|License name"
-msgstr "许å¯è¯å称"
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "管ç†æ­¤é¡¹ç›®çš„已批准和列入黑åå•çš„许å¯è¯ã€‚"
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
-msgid "LicenseManagement|Packages"
-msgstr "包"
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
-msgid "LicenseManagement|Remove license"
-msgstr "删除许å¯è¯"
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
-msgid "LicenseManagement|Remove license?"
-msgstr "删除许å¯è¯ï¼Ÿ"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "æ交"
+msgid "LicenseCompliance|License details"
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "此项目目å‰æ— å·²æ‰¹å‡†æˆ–列入黑åå•çš„许å¯è¯ã€‚"
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "此许å¯è¯å·²å­˜åœ¨äºŽå½“å‰é¡¹ç›®ä¸­ã€‚"
+msgid "LicenseCompliance|Packages"
+msgstr ""
-msgid "LicenseManagement|URL"
-msgstr "URL"
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "您å³å°†ä»Žé¡¹ç›® %{name} 中删除许å¯è¯ã€‚"
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
+
+msgid "LicenseCompliance|Submit"
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
+
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
+
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
+
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
msgid "Licensed Features"
msgstr "需è¦è®¸å¯çš„功能"
@@ -7793,6 +9174,9 @@ msgstr "授æƒç»™"
msgid "Licenses"
msgstr "许å¯è¯"
+msgid "Limit display of time tracking units to hours."
+msgstr "é™åˆ¶æ—¶é—´è·Ÿè¸ªå•ä½æ˜¾ç¤ºåˆ°å°æ—¶ã€‚"
+
msgid "Limit namespaces and projects that can be indexed"
msgstr "é™åˆ¶å¯ç´¢å¼•å‘½å空间和项目"
@@ -7800,12 +9184,18 @@ msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
msgstr[0] "最多显示 %d 个事件"
-msgid "Linked emails (%{email_count})"
+msgid "Link copied to clipboard"
msgstr ""
+msgid "Linked emails (%{email_count})"
+msgstr "链接的电å­é‚®ä»¶ (%{email_count})"
+
msgid "LinkedIn"
msgstr "领英(LinkedIn)"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "列表"
@@ -7818,15 +9208,15 @@ msgstr "列出å¯ç”¨ä»“库"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr "å…许的辅助节点IPå’ŒCIDR列表。以逗å·åˆ†éš”,例如“1.1.1.1,2.2.2.0/24â€"
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "列表视图"
msgid "List your Bitbucket Server repositories"
msgstr "列出您的 Bitbucket 库"
-msgid "List your GitHub repositories"
-msgstr "列出GitHub仓库"
-
msgid "Live preview"
msgstr "实时预览"
@@ -7834,7 +9224,10 @@ msgid "Loading contribution stats for group members"
msgstr "加载群组æˆå‘˜çš„贡献统计信æ¯"
msgid "Loading functions timed out. Please reload the page to try again."
-msgstr ""
+msgstr "加载功能超时。请刷新页é¢é‡è¯•ã€‚"
+
+msgid "Loading issues"
+msgstr "加载议题"
msgid "Loading the GitLab IDE..."
msgstr "加载GitLab IDE..."
@@ -7855,7 +9248,7 @@ msgid "Lock %{issuableDisplayName}"
msgstr "é”定 %{issuableDisplayName}"
msgid "Lock memberships to LDAP synchronization"
-msgstr ""
+msgstr "é”定æˆå‘˜èº«ä»½åˆ°LDAPåŒæ­¥"
msgid "Lock not found"
msgstr "未找到é”"
@@ -7864,7 +9257,7 @@ msgid "Lock the discussion"
msgstr "é”定讨论"
msgid "Lock this %{issuableDisplayName}? Only <strong>project members</strong> will be able to comment."
-msgstr "é”定%{issuableDisplayName}?åªæœ‰ <strong>项目æˆå‘˜</strong> å¯ä»¥å‘表评论。"
+msgstr "é”定此%{issuableDisplayName}å—?é”定åŽå°†åªæœ‰<strong>项目æˆå‘˜</strong>å¯ä»¥å‘表评论。"
msgid "Lock to current projects"
msgstr "é”定到当å‰é¡¹ç›®"
@@ -7875,14 +9268,20 @@ msgstr "å·²é”定"
msgid "Locked Files"
msgstr "å·²é”定文件"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "å·²é”定到目å‰çš„项目"
msgid "Locks give the ability to lock specific file or folder."
msgstr "加é”å¯ä»¥é”定特定的文件或文件夹。"
-msgid "Locks the discussion"
-msgstr "é”定讨论"
+msgid "Locks the discussion."
+msgstr ""
msgid "Login with smartcard"
msgstr "使用智能å¡ç™»å½•"
@@ -7893,6 +9292,9 @@ msgstr "徽标已æˆåŠŸåˆ é™¤ã€‚"
msgid "Logs"
msgstr "日志"
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr "核准人是"
@@ -7908,20 +9310,26 @@ msgstr "åªæŸ¥çœ‹å˜æ›´å†…容"
msgid "MRDiff|Show full file"
msgstr "显示全部文件"
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr "使用Web IDE在æµè§ˆå™¨ä¸­åˆ›å»ºå’ŒæŸ¥çœ‹æ›´æ”¹"
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "GitLab Geoå¯ä»¥åˆ›å»ºGitLab实例的åªè¯»é•œåƒ, 使得从远端克隆和拉å–大型代ç ä»“库的时间大大缩短,从而æ高团队æˆå‘˜çš„工作效率。"
-msgid "Make issue confidential."
-msgstr "将议题设置为ç§å¯†ã€‚"
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
+msgstr "请确ä¿å¦¥å–„ä¿å­˜å®ƒ - 您无法å†æ¬¡è®¿é—®å®ƒçš„内容。"
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "ç¡®ä¿æ‚¨å·²ç™»å½•åˆ°æ¬²å¯¼å…¥é¡¹ç›®æ‰€æœ‰è€…çš„å¸æˆ·ã€‚"
-msgid "Makes this issue confidential"
-msgstr "将此议题设置为ç§å¯†"
+msgid "Makes this issue confidential."
+msgstr ""
msgid "Manage"
msgstr "管ç†"
@@ -7965,6 +9373,9 @@ msgstr "Manifest文件导入"
msgid "Manual job"
msgstr "手动作业"
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr "无法ä¿å­˜è®®é¢˜çš„顺åº"
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "å°†FogBugzå¸æˆ·ID映射为GitLab用户"
@@ -7983,6 +9394,12 @@ msgstr "3月"
msgid "March"
msgstr "3月"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr "标记为已解决"
@@ -7992,8 +9409,8 @@ msgstr "将评论标记为已解决"
msgid "Mark this issue as a duplicate of another issue"
msgstr "将此议题标记为å¦ä¸€ä¸ªè®®é¢˜çš„é‡å¤"
-msgid "Mark todo as done"
-msgstr "标记为已完æˆ"
+msgid "Mark this issue as related to another issue"
+msgstr "将此议题标记为与å¦ä¸€ä¸ªè®®é¢˜çš„相关"
msgid "Markdown"
msgstr "Markdown"
@@ -8004,15 +9421,66 @@ msgstr "Markdown帮助"
msgid "Markdown enabled"
msgstr "支æŒMarkdownæ ¼å¼"
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr "将此议题标记为 %{duplicate_reference} çš„é‡å¤ã€‚"
-msgid "Marks todo as done."
-msgstr "将待办事项标记为已完æˆã€‚"
+msgid "Marks this issue as related to %{issue_ref}."
+msgstr "将此议题标记为%{issue_ref}的相关议题。"
msgid "Match not found; try refining your search query."
msgstr "未找到匹é…;请å°è¯•æ›´æ”¹æŸ¥è¯¢æ¡ä»¶ã€‚"
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Maven 元数æ®"
@@ -8070,7 +9538,16 @@ msgstr "项目 <i>维护者</i> 或 <i>所有者</i>å¯ä»¥æ·»åŠ æˆå‘˜"
msgid "Members of <strong>%{project_name}</strong>"
msgstr "<strong>%{project_name}</strong>çš„æˆå‘˜"
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
+msgstr "åˆå¹¶"
+
+msgid "Merge (when the pipeline succeeds)"
msgstr ""
msgid "Merge Request"
@@ -8100,6 +9577,9 @@ msgstr "正在åˆå¹¶"
msgid "Merge request"
msgstr "åˆå¹¶è¯·æ±‚"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "åˆå¹¶è¯·æ±‚批准"
@@ -8112,6 +9592,9 @@ msgstr "åˆå¹¶è¯·æ±‚"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "åˆå¹¶è¯·æ±‚用于æ出对项目的更改并与他人进行讨论"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr "当æµæ°´çº¿æˆåŠŸæ—¶åˆå¹¶"
@@ -8145,18 +9628,6 @@ msgstr "添加回å¤"
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "ä¿å­˜è¯„论è‰ç¨¿æ—¶å‘生错误。"
-msgid "MergeRequests|Discussion stays resolved"
-msgstr "讨论并解决"
-
-msgid "MergeRequests|Discussion stays unresolved"
-msgstr "讨论并未解决"
-
-msgid "MergeRequests|Discussion will be resolved"
-msgstr "讨论并解决"
-
-msgid "MergeRequests|Discussion will be unresolved"
-msgstr "讨论并未解决"
-
msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr "无法压缩(Squash)。应该手动完æˆã€‚"
@@ -8166,8 +9637,8 @@ msgstr "跳转到下一个未解决的讨论"
msgid "MergeRequests|Reply..."
msgstr "回å¤..."
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "在新议题中解决此讨论"
+msgid "MergeRequests|Resolve this thread in a new issue"
+msgstr ""
msgid "MergeRequests|Saving the comment failed"
msgstr "ä¿å­˜è¯„论失败"
@@ -8175,6 +9646,18 @@ msgstr "ä¿å­˜è¯„论失败"
msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr "压缩(Squash)任务已å–消:å¦ä¸€ä¸ªåŽ‹ç¼©å·²åœ¨è¿›è¡Œä¸­ã€‚"
+msgid "MergeRequests|Thread stays resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
+
+msgid "MergeRequests|Thread will be unresolved"
+msgstr ""
+
msgid "MergeRequests|Toggle comments for this file"
msgstr "开关此文件的讨论"
@@ -8187,26 +9670,26 @@ msgstr "查看已替æ¢æ–‡ä»¶ @ %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr "讨论%{commitLink}æ交"
-msgid "MergeRequests|started a discussion"
-msgstr "开始讨论"
+msgid "MergeRequests|started a thread"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
-msgstr "开始讨论 %{linkStart}旧版本的差异%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
-msgstr "开始讨论 %{linkStart}差异%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "开始讨论一个过时的å˜æ›´æ交%{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr "开始讨论æ交%{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
+msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
msgstr "%{paragraphStart}%{timeDifferenceMinutes}%{descriptionChangedTimes}次更改了æè¿°%{paragraphEnd}"
msgid "MergeRequest|Error dismissing suggestion popover. Please try again."
-msgstr ""
+msgstr "关闭建议弹窗时出错。请å†è¯•ä¸€æ¬¡ã€‚"
msgid "MergeRequest|Error loading full diff. Please try again."
msgstr "加载完整差异时出错。请å†è¯•ä¸€æ¬¡ã€‚"
@@ -8223,26 +9706,44 @@ msgstr "å·²åˆå¹¶"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr "å·²åˆå¹¶åˆ†æ”¯æ­£åœ¨è¢«åˆ é™¤ã€‚该æ“作å¯èƒ½éœ€è¦ä¸€äº›æ—¶é—´ï¼Œå…·ä½“å–决于分支的数é‡ã€‚请刷新页é¢ä»¥æŸ¥çœ‹æ›´æ–°ã€‚"
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "消æ¯"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr "指标已æˆåŠŸæ·»åŠ ã€‚"
msgid "Metric was successfully updated."
msgstr "指标已æˆåŠŸæ›´æ–°ã€‚"
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "指标"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "指标 - Influx"
msgid "Metrics - Prometheus"
msgstr "指标 - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
-msgstr "指标和分æž"
+msgstr "指标与分æž"
msgid "Metrics for environment"
msgstr "环境指标"
@@ -8409,9 +9910,6 @@ msgstr "最å°é•¿åº¦ä¸º%{minimum_password_length}个字符。"
msgid "Minutes"
msgstr "分钟"
-msgid "Mirror a repository"
-msgstr "é•œåƒä»“库"
-
msgid "Mirror direction"
msgstr "é•œåƒæ–¹å‘"
@@ -8451,6 +9949,9 @@ msgstr "å–消"
msgid "Modal|Close"
msgstr "关闭"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr "修改æ交信æ¯"
@@ -8463,8 +9964,8 @@ msgstr "修改åˆå¹¶æ交"
msgid "Monday"
msgstr "星期一"
-msgid "Monitor your errors by integrating with Sentry"
-msgstr "通过与Sentry集æˆæ¥ç›‘控您的错误"
+msgid "Monitor your errors by integrating with Sentry."
+msgstr ""
msgid "Monitoring"
msgstr "监控"
@@ -8475,6 +9976,12 @@ msgstr "月"
msgid "More"
msgstr "更多"
+msgid "More Information"
+msgstr "更多信æ¯"
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr "更多æ“作"
@@ -8505,6 +10012,12 @@ msgstr "移动议题"
msgid "Move issue from one column of the board to another"
msgstr "将议题从看æ¿çš„一列移到å¦ä¸€åˆ—"
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr "将此议题移至å¦ä¸€ä¸ªé¡¹ç›®ã€‚"
@@ -8514,6 +10027,12 @@ msgstr "由于æƒé™ä¸è¶³è€Œæ— æ³•ç§»åŠ¨è®®é¢˜!"
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr "无法将议题移动到æºé¡¹ç›®ä¸­!"
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr "将议题移至看æ¿çš„ %{label} 列中。"
@@ -8608,6 +10127,9 @@ msgstr "新密ç "
msgid "New Pipeline Schedule"
msgstr "创建æµæ°´çº¿è®¡åˆ’"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "新建代ç ç‰‡æ®µ"
@@ -8630,7 +10152,7 @@ msgid "New epic"
msgstr "新建å²è¯—"
msgid "New epic title"
-msgstr ""
+msgstr "æ–°å²è¯—标题"
msgid "New file"
msgstr "新建文件"
@@ -8684,7 +10206,7 @@ msgid "New users set to external"
msgstr "新用户设置为外部"
msgid "New! Suggest changes directly"
-msgstr ""
+msgstr "新特性ï¼ç›´æŽ¥å»ºè®®å˜æ›´å†…容"
msgid "New..."
msgstr "新建..."
@@ -8695,14 +10217,26 @@ msgstr "默认情况下,新注册的用户将是外部用户"
msgid "Next"
msgstr "下一个"
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr "昵称"
msgid "No"
msgstr "å¦"
-msgid "No %{providerTitle} repositories available to import"
-msgstr "æ— %{providerTitle} 仓库å¯ä¾›å¯¼å…¥"
+msgid "No %{header} for this request."
+msgstr "此请求没有%{header}。"
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
+msgstr ""
msgid "No Label"
msgstr "无标记"
@@ -8713,15 +10247,21 @@ msgstr "无里程碑"
msgid "No Tag"
msgstr "无标签"
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr "没有å‘现任何活动"
-msgid "No available namespaces to fork the project."
-msgstr "没有å¯ç”¨çš„命å空间æ¥æ´¾ç”Ÿé¡¹ç›®ã€‚"
+msgid "No application_settings found"
+msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
msgstr ""
+msgid "No available namespaces to fork the project."
+msgstr "没有å¯ç”¨çš„命å空间æ¥æ´¾ç”Ÿé¡¹ç›®ã€‚"
+
msgid "No branches found"
msgstr "未å‘现分支"
@@ -8734,9 +10274,6 @@ msgstr "%{ref_start}%{source_branch}%{ref_end} 和 %{ref_start}%{target_branch}%
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "无法连接到GitalyæœåŠ¡å™¨ï¼Œè¯·æ£€æŸ¥ç›¸å…³æ—¥å¿—ï¼"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr "此项目当å‰æœªå­˜å‚¨å®¹å™¨é•œåƒã€‚如需使用,请å‚照上述说明新建容器镜åƒã€‚"
-
msgid "No contributions"
msgstr "无贡献"
@@ -8746,6 +10283,15 @@ msgstr "未找到任何贡献者"
msgid "No credit card required."
msgstr "无需信用å¡ã€‚"
+msgid "No data found"
+msgstr "未找到数æ®"
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr "没有å¯ç”¨çš„详细信æ¯"
@@ -8770,12 +10316,18 @@ msgstr "没有文件"
msgid "No files found."
msgstr "未找到文件。"
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr "所选时间段无议题。"
msgid "No job trace"
msgstr "没有作业日志"
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "没有具有此类å称或æ述的标记"
@@ -8822,7 +10374,7 @@ msgid "No repository"
msgstr "无仓库"
msgid "No required pipeline"
-msgstr ""
+msgstr "没有必需的æµæ°´çº¿"
msgid "No runners found"
msgstr "未找到Runner"
@@ -8830,16 +10382,25 @@ msgstr "未找到Runner"
msgid "No schedules"
msgstr "无计划"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr "没有开始日期"
+msgid "No template"
+msgstr "没有模æ¿"
+
msgid "No value set by top-level parent group."
-msgstr ""
+msgstr "顶级群组未设置值。"
msgid "No, directly import the existing email addresses and usernames."
msgstr "å¦, 请直接导入现有电å­é‚®ä»¶åœ°å€å’Œç”¨æˆ·å。"
msgid "No, not interested right now"
+msgstr "ä¸ï¼Œæš‚æ—¶ä¸æ„Ÿå…´è¶£"
+
+msgid "Nobody has starred this repository yet"
msgstr ""
msgid "Node was successfully created."
@@ -8854,6 +10415,9 @@ msgstr "节点"
msgid "None"
msgstr "æ— "
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "æ•°æ®ä¸è¶³"
@@ -8872,6 +10436,9 @@ msgstr "æ•°æ®ä¸è¶³"
msgid "Not found."
msgstr "未找到。"
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr "æš‚ä¸"
@@ -8881,6 +10448,9 @@ msgstr "还没有准备好。请ç¨åŽå†è¯•ã€‚"
msgid "Not started"
msgstr "未开始"
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr "请注æ„,此邀请已å‘é€è‡³%{mail_to_invite_email},但您当å‰ä½¿ç”¨ç”µå­é‚®ä»¶%{mail_to_current_user}以%{link_to_current_user} 登录。"
@@ -8896,6 +10466,9 @@ msgstr "æ示:如GitLab管ç†å‘˜é…ç½® %{github_integration_link},将å…许
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "æ示:如GitLab管ç†å‘˜é…ç½® %{github_integration_link},将å…许通过GitHub登录并å…许导入Github代ç ä»“库而ä¸éœ€è¦ä¸ªäººè®¿é—®ä»¤ç‰Œã€‚"
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr "注æ„"
@@ -8992,6 +10565,9 @@ msgstr "自定义"
msgid "Notifications"
msgstr "通知"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "ç¦ç”¨é€šçŸ¥"
@@ -8999,10 +10575,10 @@ msgid "Notifications on"
msgstr "å¯ç”¨é€šçŸ¥"
msgid "Nov"
-msgstr "å一"
+msgstr "11月"
msgid "November"
-msgstr "å一月"
+msgstr "11月"
msgid "Number of Elasticsearch replicas"
msgstr "Elasticsearch副本的数é‡"
@@ -9010,9 +10586,21 @@ msgstr "Elasticsearch副本的数é‡"
msgid "Number of Elasticsearch shards"
msgstr "Elasticsearch分片数"
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "确定"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr "对象在æœåŠ¡å™¨ä¸Šä¸å­˜åœ¨, 或者您没有访问它的æƒé™"
@@ -9028,6 +10616,9 @@ msgstr "过滤"
msgid "Ok let's go"
msgstr "好的,我们开始å§"
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr "新手上路"
@@ -9054,13 +10645,19 @@ msgid "One or more of your Google Code projects cannot be imported into GitLab d
msgstr "您的一个或多个Google Code项目无法直接导入GitLab,因为它们使用Subversion或Mercurial进行版本控制,而ä¸æ˜¯Git。"
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
+msgstr "有一个或多个ä¾èµ–项文件ä¸æ”¯æŒï¼Œå¹¶ä¸”ä¾èµ–项列表å¯èƒ½ä¸å®Œæ•´ã€‚以下是支æŒçš„文件类型列表。"
+
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
msgstr ""
msgid "Only admins"
msgstr "仅管ç†å‘˜"
msgid "Only admins can delete project"
-msgstr ""
+msgstr "åªæœ‰ç®¡ç†å‘˜å¯ä»¥åˆ é™¤é¡¹ç›®"
msgid "Only mirror protected branches"
msgstr "åªé•œåƒå—ä¿æŠ¤çš„分支"
@@ -9080,15 +10677,24 @@ msgstr "仅导入项目æˆå‘˜ã€‚群组æˆå‘˜å°†è¢«è·³è¿‡ã€‚"
msgid "Only these extensions are supported: %{extension_list}"
msgstr "仅支æŒè¿™äº›æ‰©å±•: %{extension_list}"
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr "å•Š~~, 确定å—?"
msgid "Open"
-msgstr "展开"
+msgstr "打开"
msgid "Open Documentation"
msgstr "打开文档"
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr "打开评论类型下拉列表"
@@ -9098,6 +10704,12 @@ msgstr "打开错误"
msgid "Open in Xcode"
msgstr "用Xcode打开"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr "å¼€å¯çš„议题"
+
msgid "Open projects"
msgstr "打开项目"
@@ -9179,6 +10791,12 @@ msgstr "其他信æ¯"
msgid "Other merge requests block this MR"
msgstr "其他åˆå¹¶è¯·æ±‚阻止了此MR"
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr "外å‘请求"
@@ -9203,6 +10821,18 @@ msgstr "包信æ¯"
msgid "Package was removed"
msgstr "包已被删除"
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "软件包"
@@ -9225,29 +10855,29 @@ msgid "Pages getting started guide"
msgstr "Pages 入门指å—"
msgid "Pagination|Go to first page"
-msgstr ""
+msgstr "转到第一页"
msgid "Pagination|Go to last page"
-msgstr ""
+msgstr "转到最åŽä¸€é¡µ"
msgid "Pagination|Go to next page"
-msgstr ""
+msgstr "转到下一页"
msgid "Pagination|Go to previous page"
-msgstr ""
+msgstr "转到上一页"
msgid "Pagination|Last »"
msgstr "尾页 »"
-msgid "Pagination|Next"
-msgstr "下一页"
-
-msgid "Pagination|Prev"
-msgstr "上一页"
+msgid "Pagination|Next ›"
+msgstr "下一页 ›"
msgid "Pagination|« First"
msgstr "« 首页"
+msgid "Pagination|‹ Prev"
+msgstr "‹ 上一页"
+
msgid "Parameter"
msgstr "å‚æ•°"
@@ -9285,7 +10915,7 @@ msgid "Paste issue link"
msgstr "粘贴议题链接"
msgid "Paste your public SSH key, which is usually contained in the file '~/.ssh/id_ed25519.pub' or '~/.ssh/id_rsa.pub' and begins with 'ssh-ed25519' or 'ssh-rsa'. Don't use your private SSH key."
-msgstr ""
+msgstr "粘贴您的SSH公钥,通常包å«åœ¨æ–‡ä»¶'~/.ssh/id_ed25519.pub'或'~/.ssh/id_rsa.pub' 中,并以“ssh-ed25519â€æˆ–“ssh-rsaâ€å¼€å¤´ã€‚请ä¸è¦ä½¿ç”¨æ‚¨çš„SSHç§é’¥ã€‚"
msgid "Path"
msgstr "路径"
@@ -9309,17 +10939,35 @@ msgid "Pending"
msgstr "等待中"
msgid "People without permission will never get a notification and won't be able to comment."
-msgstr "未ç»è®¸å¯çš„用户将无法收到通知,也无法评论。"
+msgstr "æƒé™ä¸è¶³çš„用户将无法收到通知,也无法评论。"
msgid "People without permission will never get a notification."
-msgstr ""
+msgstr "没有æƒé™çš„用户将永远ä¸ä¼šæ”¶åˆ°é€šçŸ¥ã€‚"
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "执行高级选项,例如更改路径,移动或删除群组。"
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr "性能优化"
+msgid "PerformanceBar|Gitaly calls"
+msgstr "Gitaly调用"
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr "SQL查询"
+
+msgid "PerformanceBar|trace"
+msgstr "跟踪"
+
msgid "Permissions"
msgstr "æƒé™"
@@ -9347,12 +10995,21 @@ msgstr "Phabricator任务"
msgid "Pick a name"
msgstr "选择一个å称"
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr "请为应用程åºé€‰æ‹©ä¸€ä¸ªå称,以便生æˆå”¯ä¸€çš„%{type}令牌。"
+
msgid "Pin code"
msgstr "Pinç "
msgid "Pipeline"
msgstr "æµæ°´çº¿"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "æµæ°´çº¿è®¡åˆ’"
@@ -9419,8 +11076,8 @@ msgstr "å˜é‡"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "自定义"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
-msgstr "æ交:%{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
+msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
msgstr "æµæ°´çº¿ï¼š%{ci_status}"
@@ -9443,10 +11100,19 @@ msgstr "上周的æµæ°´çº¿"
msgid "Pipelines for last year"
msgstr "去年的æµæ°´çº¿"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr "“%{project_name}â€çš„æµæ°´çº¿è®¾ç½®å·²æˆåŠŸæ›´æ–°ã€‚"
msgid "Pipelines| to purchase more minutes."
+msgstr "以购买更多的分钟数。"
+
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
msgstr ""
msgid "Pipelines|API"
@@ -9462,7 +11128,7 @@ msgid "Pipelines|Clear Runner Caches"
msgstr "清除Runner缓存"
msgid "Pipelines|Continuous Integration can help catch bugs by running your tests automatically, while Continuous Deployment can help you deliver code to your product environment."
-msgstr "æŒç»­é›†æˆå¯ä»¥é€šè¿‡è‡ªåŠ¨è¿è¡Œæµ‹è¯•æ¥å¸®åŠ©æ•èŽ·é”™è¯¯ï¼Œè€ŒæŒç»­éƒ¨ç½²å¯ä»¥å¸®åŠ©æ‚¨å‘生产环境交付代ç ã€‚"
+msgstr "æŒç»­é›†æˆå¯ä»¥é€šè¿‡è‡ªåŠ¨è¿è¡Œæµ‹è¯•æ¥å¸®åŠ©æ£€æµ‹ä»£ç ç¼ºé™·ï¼Œè€ŒæŒç»­éƒ¨ç½²å¯ä»¥å¸®åŠ©æ‚¨å‘生产环境交付代ç ã€‚"
msgid "Pipelines|Get started with Pipelines"
msgstr "æµæ°´çº¿å…¥é—¨"
@@ -9489,7 +11155,7 @@ msgid "Pipelines|There are currently no pipelines."
msgstr "当å‰æ— æµæ°´çº¿ã€‚"
msgid "Pipelines|There was an error fetching the pipelines. Try again in a few moments or contact your support team."
-msgstr "获å–æµæ°´çº¿æ—¶å‡ºçŽ°é”™è¯¯ã€‚请ç¨åŽé‡è¯•æˆ–å°è¯•è”系您的支æŒå›¢é˜Ÿã€‚"
+msgstr "获å–æµæ°´çº¿æ—¶å‡ºé”™ã€‚请ç¨åŽé‡è¯•æˆ–è”系支æŒå›¢é˜Ÿã€‚"
msgid "Pipelines|This project is not currently set up to run pipelines."
msgstr "此项目当å‰æœªé…ç½®è¿è¡Œæµæ°´çº¿ã€‚"
@@ -9497,15 +11163,30 @@ msgstr "此项目当å‰æœªé…ç½®è¿è¡Œæµæ°´çº¿ã€‚"
msgid "Pipeline|Commit"
msgstr "æ交"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr "覆盖率"
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr "时长"
msgid "Pipeline|Existing branch name or tag"
msgstr "现有分支å称或者标签"
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "æµæ°´çº¿"
@@ -9536,6 +11217,9 @@ msgstr "åœæ­¢æµæ°´çº¿ï¼ƒ%{pipelineId}å—?"
msgid "Pipeline|Triggerer"
msgstr "触å‘者"
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr "å˜é‡"
@@ -9548,18 +11232,12 @@ msgstr "所有"
msgid "Pipeline|for"
msgstr "使用æ交"
-msgid "Pipeline|into"
-msgstr "åˆå¹¶åˆ°"
-
msgid "Pipeline|on"
msgstr "于"
msgid "Pipeline|success"
msgstr "æˆåŠŸ"
-msgid "Pipeline|with"
-msgstr "ç”±"
-
msgid "Pipeline|with stage"
msgstr ",包å«é˜¶æ®µ"
@@ -9590,6 +11268,9 @@ msgstr "è¿è¡Œæ‰€æœ‰æ‰‹åŠ¨ä½œä¸š"
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr "想è¦è¯„论请 %{link_to_register} 或 %{link_to_sign_in}"
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "请接å—æœåŠ¡æ¡æ¬¾ä»¥ç»§ç»­ã€‚"
@@ -9608,6 +11289,9 @@ msgstr "请检查é…置文件以确ä¿å·²å£°æ˜Žäº†ä¸€ç»„图表。"
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr "请检查é…置文件以确ä¿å®ƒå¯ç”¨ä¸”YAML有效"
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr "请选择无特殊字符的群组URL。"
@@ -9684,7 +11368,7 @@ msgid "Please upgrade PostgreSQL to version 9.6 or greater. The status of the re
msgstr "请将PostgreSQLå‡çº§åˆ°9.6或更高版本。使用当å‰ç‰ˆæœ¬æ— æ³•å¯é åœ°ç¡®å®šå¤åˆ¶çš„状æ€ã€‚"
msgid "Please use this form to report to the admin users who create spam issues, comments or behave inappropriately."
-msgstr ""
+msgstr "请使用此表å•å‘管ç†å‘˜æŠ¥å‘Šåˆ›å»ºåžƒåœ¾è®®é¢˜ã€è¯„论或行为ä¸å½“的用户。"
msgid "Please wait a moment, this page will automatically refresh when ready."
msgstr "请ç¨ç­‰ç‰‡åˆ»ï¼Œæ­¤é¡µé¢åœ¨å°±ç»ªæ—¶ä¼šè‡ªåŠ¨åˆ·æ–°ã€‚"
@@ -9695,6 +11379,9 @@ msgstr "连接代ç ä»“库中,请ç¨å€™ã€‚å¯åœ¨ä»»æ„时刻刷新以获å–当
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "导入代ç ä»“库中,请ç¨å€™ã€‚å¯åœ¨ä»»æ„时刻刷新以获å–当å‰çŠ¶æ€ã€‚"
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "å好设置"
@@ -9702,19 +11389,19 @@ msgid "Preferences saved."
msgstr "å好设置已ä¿å­˜ã€‚"
msgid "Preferences|Behavior"
-msgstr ""
+msgstr "呈现"
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
-msgstr ""
+msgstr "选择项目概览页é¢ä¸­æ‚¨æƒ³çœ‹åˆ°çš„内容。"
msgid "Preferences|Customize the appearance of the application header and navigation sidebar."
-msgstr ""
+msgstr "自定义应用程åºé¡¶éƒ¨å’Œå¯¼èˆªä¾§è¾¹æ çš„外观。"
msgid "Preferences|Default dashboard"
-msgstr ""
+msgstr "默认仪表æ¿"
msgid "Preferences|Display time in 24-hour format"
msgstr "以24å°æ—¶æ ¼å¼æ˜¾ç¤ºæ—¶é—´"
@@ -9723,16 +11410,19 @@ msgid "Preferences|For example: 30 mins ago."
msgstr "例如:30分钟å‰"
msgid "Preferences|Layout width"
-msgstr ""
+msgstr "布局宽度"
msgid "Preferences|Navigation theme"
msgstr "导航主题"
msgid "Preferences|Project overview content"
+msgstr "项目概览内容"
+
+msgid "Preferences|Show whitespace in diffs"
msgstr ""
msgid "Preferences|Syntax highlighting theme"
-msgstr ""
+msgstr "语法高亮主题"
msgid "Preferences|These settings will update how dates and times are displayed for you."
msgstr "这些设置将更新您的日期和时间显示方å¼ã€‚"
@@ -9741,10 +11431,10 @@ msgid "Preferences|This feature is experimental and translations are not complet
msgstr "此功能当åˆå¤„于实验阶段,翻译尚未全部完æˆã€‚"
msgid "Preferences|This setting allows you to customize the appearance of the syntax."
-msgstr ""
+msgstr "此设置å…许您自定义基于语法的外观。"
msgid "Preferences|This setting allows you to customize the behavior of the system layout and default views."
-msgstr ""
+msgstr "此设置å…许您自定义系统布局和默认视图的呈现。"
msgid "Preferences|Time display"
msgstr "时间显示"
@@ -9765,7 +11455,7 @@ msgid "Press Enter or click to search"
msgstr "按 回车键或å•å‡»ä»¥æœç´¢"
msgid "Prevent adding new members to project membership within this group"
-msgstr "ç¦æ­¢å‘当å‰ç¾¤ç»„添加æˆå‘˜"
+msgstr "ç¦æ­¢å‘当å‰ç¾¤ç»„中的项目添加新æˆå‘˜"
msgid "Prevent approval of merge requests by merge request author"
msgstr "阻止åˆå¹¶è¯·æ±‚作者核准åˆå¹¶è¯·æ±‚"
@@ -9788,6 +11478,12 @@ msgstr "预览上传数æ®"
msgid "Previous Artifacts"
msgstr "å‰ä¸€ä¸ªäº§ç‰©"
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "主è¦"
@@ -9824,6 +11520,21 @@ msgstr "ç§æœ‰é¡¹ç›®å¯ä»¥åœ¨ä¸ªäººå称空间中创建:"
msgid "Proceed"
msgstr "继续"
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "用户资料"
@@ -9888,7 +11599,7 @@ msgid "Profiles|Click on icon to activate signin with one of the following servi
msgstr "å•å‡»å›¾æ ‡ä»¥ä½¿ç”¨ä»¥ä¸‹æœåŠ¡ä¹‹ä¸€æ¿€æ´»ç™»å½•"
msgid "Profiles|Commit email"
-msgstr ""
+msgstr "æ交邮件"
msgid "Profiles|Connect"
msgstr "连接"
@@ -9903,7 +11614,7 @@ msgid "Profiles|Current status"
msgstr "当å‰çŠ¶æ€"
msgid "Profiles|Default notification email"
-msgstr ""
+msgstr "默认通知邮件"
msgid "Profiles|Delete Account"
msgstr "删除å¸æˆ·"
@@ -9938,6 +11649,9 @@ msgstr "ä¿¡æ¯åŠ¨æ€ä»¤ç‰Œå·²æˆåŠŸé‡ç½®"
msgid "Profiles|Full name"
msgstr "å…¨å"
+msgid "Profiles|Impersonation"
+msgstr "身份模拟"
+
msgid "Profiles|Include private contributions on my profile"
msgstr "在个人资料中包å«éžå…¬å¼€è´¡çŒ®"
@@ -9972,7 +11686,7 @@ msgid "Profiles|No file chosen"
msgstr "未选择文件"
msgid "Profiles|Notification email"
-msgstr ""
+msgstr "通知邮件"
msgid "Profiles|Organization"
msgstr "组织"
@@ -9980,11 +11694,14 @@ msgstr "组织"
msgid "Profiles|Path"
msgstr "路径"
+msgid "Profiles|Personal Access"
+msgstr "个人访问"
+
msgid "Profiles|Position and size your new avatar"
msgstr "您新头åƒçš„ä½ç½®å’Œå¤§å°"
msgid "Profiles|Primary email"
-msgstr ""
+msgstr "主邮件"
msgid "Profiles|Private contributions"
msgstr "éžå…¬å¼€è´¡çŒ®"
@@ -9996,7 +11713,7 @@ msgid "Profiles|Public Avatar"
msgstr "公开头åƒ"
msgid "Profiles|Public email"
-msgstr ""
+msgstr "公开邮件"
msgid "Profiles|Remove avatar"
msgstr "删除头åƒ"
@@ -10010,6 +11727,9 @@ msgstr "社交登录"
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "æŸäº›é€‰é¡¹å¯¹äºŽ LDAP å¸æˆ·ä¸å¯ç”¨"
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr "请用少于250字符æ述您自己"
@@ -10041,7 +11761,7 @@ msgid "Profiles|Type your %{confirmationValue} to confirm:"
msgstr "键入您的 %{confirmationValue} 以确认:"
msgid "Profiles|Typically starts with \"ssh-ed25519 …\" or \"ssh-rsa …\""
-msgstr ""
+msgstr "通常以“ssh-ed25519 …â€æˆ–“ssh-rsa …â€å¼€å¤´"
msgid "Profiles|Update profile settings"
msgstr "更新个人资料设置"
@@ -10115,6 +11835,12 @@ msgstr "您当å‰çš„状æ€ï¼Ÿ"
msgid "Profiles|e.g. My MacBook key"
msgstr "例如: My MacBook Key"
+msgid "Profiles|impersonation"
+msgstr "身份模拟"
+
+msgid "Profiles|personal access"
+msgstr "个人访问"
+
msgid "Profiles|username"
msgstr "用户å"
@@ -10160,6 +11886,9 @@ msgstr "项目 '%{project_name}' 已更新完æˆã€‚"
msgid "Project Badges"
msgstr "项目徽章"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr "项目ID"
@@ -10169,6 +11898,9 @@ msgstr "项目 URL"
msgid "Project access must be granted explicitly to each user."
msgstr "项目访问æƒé™å¿…须明确授æƒç»™æ¯ä¸ªç”¨æˆ·ã€‚"
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr "项目和wiki仓库"
@@ -10220,9 +11952,6 @@ msgstr "项目上传"
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr "当项目转移到群组åŽï¼Œå…¶å¯è§æ€§çº§åˆ«å°†æ›´æ”¹ä¸ºä¸Žå‘½å空间规则匹é…。"
-msgid "Project:"
-msgstr "项目:"
-
msgid "Project: %{name}"
msgstr "项目: %{name}"
@@ -10265,6 +11994,12 @@ msgstr "转至您的派生"
msgid "ProjectOverview|Star"
msgstr "星标"
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr "å–消星标"
@@ -10283,21 +12018,57 @@ msgstr "或群组"
msgid "ProjectSelect|Search for project"
msgstr "æœç´¢é¡¹ç›®"
+msgid "ProjectService|%{service_title}: status off"
+msgstr ""
+
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
msgstr "å½±å“åˆå¹¶æ‰§è¡Œæ–¹å¼å’Œæ—¶é—´çš„其他åˆå¹¶è¯·æ±‚功能"
msgid "ProjectSettings|All discussions must be resolved"
msgstr "所有讨论都必须解决"
-msgid "ProjectSettings|Allow merge trains"
-msgstr ""
-
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
msgstr "自动解决过期的åˆå¹¶è¯·æ±‚差异相关讨论"
msgid "ProjectSettings|Badges"
msgstr "徽章"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr "选择åˆå¹¶æ–¹æ³•ã€åˆå¹¶é€‰é¡¹ä»¥åŠåˆå¹¶æ£€æŸ¥"
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr "选择åˆå¹¶æ–¹æ³•ã€åˆå¹¶é€‰é¡¹ã€åˆå¹¶æ£€æŸ¥ã€è®¾ç½®é»˜è®¤åˆå¹¶è¯·æ±‚æ述模æ¿"
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "è”系管ç†å‘˜æ›´æ”¹æ­¤è®¾ç½®ã€‚"
@@ -10341,13 +12112,13 @@ msgid "ProjectSettings|Merge pipelines will try to validate the post-merge resul
msgstr "åˆå¹¶æµæ°´çº¿å°†å°è¯•åœ¨è¿›è¡Œå®žé™…åˆå¹¶ä¹‹å‰éªŒè¯åˆå¹¶ç»“æžœ"
msgid "ProjectSettings|No merge commits are created"
-msgstr "项目设置|未创建åˆå¹¶æ交"
+msgstr "未创建åˆå¹¶æ交"
msgid "ProjectSettings|Only signed commits can be pushed to this repository."
msgstr "åªæœ‰å·²ç­¾ç½²æ交æ‰å¯ä»¥æŽ¨é€åˆ°æ­¤ä»“库。"
msgid "ProjectSettings|Pipelines must succeed"
-msgstr "项目设置|æµæ°´çº¿å¿…é¡»æˆåŠŸ"
+msgstr "æµæ°´çº¿å¿…é¡»æˆåŠŸ"
msgid "ProjectSettings|Pipelines need to be configured to enable this feature."
msgstr "需é…ç½®æµæ°´çº¿ä»¥å¯ç”¨æ­¤åŠŸèƒ½ã€‚"
@@ -10374,7 +12145,7 @@ msgid "ProjectSettings|Users can only push commits to this repository that were
msgstr "用户åªèƒ½é€šè¿‡è‡ªå·±å·²éªŒè¯çš„电å­é‚®ä»¶åœ°å€å°†æ交到此仓库中。"
msgid "ProjectSettings|When conflicts arise the user is given the option to rebase"
-msgstr "项目设置 |当出现冲çªæ—¶ï¼Œç”¨æˆ·å¯ä»¥é€‰æ‹©rebase"
+msgstr "当出现冲çªæ—¶ï¼Œç”¨æˆ·å¯ä»¥é€‰æ‹©rebase"
msgid "ProjectTemplates|.NET Core"
msgstr ".NET Core"
@@ -10469,12 +12240,60 @@ msgstr "对ä¸èµ·ï¼Œæœªæœç´¢åˆ°ç¬¦åˆæ¡ä»¶çš„项目"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "此功能需è¦æµè§ˆå™¨æ”¯æŒæœ¬åœ°å­˜å‚¨"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
msgid "PrometheusAlerts|Add alert"
msgstr "添加警报"
-msgid "PrometheusAlerts|Alert set"
-msgstr "警报设置"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "编辑警报"
@@ -10490,9 +12309,6 @@ msgstr "获å–警报时出错"
msgid "PrometheusAlerts|Error saving alert"
msgstr "ä¿å­˜è­¦æŠ¥æ—¶å‡ºé”™"
-msgid "PrometheusAlerts|No alert set"
-msgstr "无警报设定"
-
msgid "PrometheusAlerts|Operator"
msgstr "æ“作符"
@@ -10526,6 +12342,9 @@ msgstr "常用指标会根æ®åº”用广泛的导出器指标库自动监控。"
msgid "PrometheusService|Custom metrics"
msgstr "自定义指标"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr "使用上é¢ä»»ä¸€é€‰é¡¹ä»¥å¯ç”¨ Prometheus æ¥å®šä¹‰è‡ªå®šä¹‰åº¦é‡æ ‡å‡†ï¼Œ"
@@ -10556,6 +12375,9 @@ msgstr "更多的信æ¯"
msgid "PrometheusService|New metric"
msgstr "新建指标"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Prometheus API 地å€ï¼Œä¾‹å¦‚ http://prometheus.example.com/"
@@ -10580,6 +12402,12 @@ msgstr "等待首次部署到环境以查找常用指标"
msgid "Promote"
msgstr "å‡çº§"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "将这些项目里程碑å‡çº§ä¸ºç¾¤ç»„里程碑。"
@@ -10598,6 +12426,9 @@ msgstr "项目ä¸å±žäºŽä»»ä½•ä¸€ä¸ªç¾¤ç»„。"
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr "å‡çº§å¤±è´¥ - %{message}"
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr "ä¸å†æ˜¾ç¤º"
@@ -10628,6 +12459,9 @@ msgstr "å—ä¿æŠ¤çš„环境"
msgid "Protected Tag"
msgstr "å—ä¿æŠ¤çš„标签"
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} 将对开å‘人员å¯å†™ã€‚确定继续å—?"
@@ -10683,7 +12517,7 @@ msgid "Pseudonymizer data collection"
msgstr "匿å化数æ®æ”¶é›†"
msgid "Public"
-msgstr "公有"
+msgstr "公开"
msgid "Public - The group and any public projects can be viewed without any authentication."
msgstr "公开 - 群组和任何公开项目å¯ä»¥å¼€æ”¾æŸ¥çœ‹ï¼Œæ— éœ€èº«ä»½éªŒè¯ã€‚"
@@ -10703,6 +12537,9 @@ msgstr "公开æµæ°´çº¿"
msgid "Pull"
msgstr "拉å–"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "推é€"
@@ -10785,7 +12622,7 @@ msgid "Query"
msgstr "查询"
msgid "Query is valid"
-msgstr ""
+msgstr "查询有效"
msgid "Quick actions can be used in the issues description and comment boxes."
msgstr "快速æ“作å¯ç”¨äºŽè®®é¢˜æ述和评论框。"
@@ -10796,6 +12633,9 @@ msgstr "自述文件"
msgid "Rake Tasks Help"
msgstr "Rake任务帮助"
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "进一步了解"
@@ -10805,9 +12645,18 @@ msgstr "阅读更多有关环境"
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "了解有关项目æƒé™çš„æ›´å¤šä¿¡æ¯ <strong>%{link_to_help}</strong>"
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "实时功能"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr "从手动é…置的 Prometheus æœåŠ¡å™¨æŽ¥æ”¶è­¦æŠ¥ã€‚"
@@ -10817,8 +12666,11 @@ msgstr "接收关于您自己活动的通知"
msgid "Recent"
msgstr "最近"
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
-msgstr "最近的项目活动"
+msgstr "最近的项目动æ€"
msgid "Recent Searches Service is unavailable"
msgstr "最近æœç´¢æœåŠ¡ä¸å¯ç”¨"
@@ -10843,7 +12695,7 @@ msgid_plural "Refreshing in %d seconds to show the updated status..."
msgstr[0] "%d 秒åŽåˆ·æ–°ä»¥æ˜¾ç¤ºæ›´æ–°çŠ¶æ€..."
msgid "Regenerate instance ID"
-msgstr ""
+msgstr "é‡æ–°ç”Ÿæˆå®žä¾‹ID"
msgid "Regenerate key"
msgstr "é‡æ–°ç”Ÿæˆå¯†é’¥"
@@ -10852,7 +12704,7 @@ msgid "Regenerate recovery codes"
msgstr "é‡æ–°ç”Ÿæˆæ¢å¤ç "
msgid "Regenerating the instance ID can break integration depending on the client you are using."
-msgstr ""
+msgstr "é‡æ–°ç”Ÿæˆå®žä¾‹ ID,å¯èƒ½ä¼šæ‚¨ä½¿ç”¨çš„部分客户端的集æˆå¤±æ•ˆã€‚"
msgid "Regex pattern"
msgstr "正则表达å¼"
@@ -10884,14 +12736,11 @@ msgstr "使用åŒé‡è®¤è¯åº”用注册"
msgid "Registration"
msgstr "注册"
-msgid "Registry"
-msgstr "é•œåƒåº“"
-
msgid "Related Deployed Jobs"
msgstr "相关的部署作业"
msgid "Related Issues"
-msgstr "相关的议题"
+msgstr "相关议题"
msgid "Related Jobs"
msgstr "相关的作业"
@@ -10903,16 +12752,19 @@ msgid "Related Merged Requests"
msgstr "相关已åˆå¹¶çš„åˆå¹¶è¯·æ±‚"
msgid "Related issues"
-msgstr "相关的议题"
+msgstr "相关议题"
msgid "Related merge requests"
msgstr "相关åˆå¹¶è¯·æ±‚"
msgid "Releases"
-msgstr "版本"
+msgstr "å‘布"
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
-msgstr "版本标志ç€é¡¹ç›®çš„å‘展历å²ä¸­çš„具体节点,传达相关的å˜æ›´ä¿¡æ¯ï¼Œå¹¶æä¾›ç»è¿‡ç¼–译并且已准备好交付的软件版本ã€ä»¥ä¾¿åœ¨å…¶å®ƒåœ°æ–¹é‡ç”¨ã€‚ç›®å‰ï¼Œåªèƒ½é€šè¿‡ API 创建版本。"
+msgstr "å‘布标志ç€é¡¹ç›®çš„å‘展历å²ä¸­çš„特定节点,传达相关的å˜æ›´ä¿¡æ¯ï¼Œå¹¶æä¾›ç»è¿‡ç¼–译并且已准备好交付的软件版本ã€ä»¥ä¾¿åœ¨å…¶å®ƒåœ°æ–¹é‡ç”¨ã€‚ç›®å‰ï¼Œåªèƒ½é€šè¿‡API创建å‘布。"
+
+msgid "Remember me"
+msgstr ""
msgid "Remind later"
msgstr "ç¨åŽæ醒"
@@ -10923,9 +12775,15 @@ msgstr "远程对象没有ç»å¯¹è·¯å¾„。"
msgid "Remove"
msgstr "删除"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr "移除Runner"
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr "将新的æ交推é€åˆ°å…¶æºåˆ†æ”¯æ—¶ï¼Œåˆ é™¤åˆå¹¶è¯·æ±‚中的所有核准"
@@ -10947,6 +12805,9 @@ msgstr "删除指派人"
msgid "Remove avatar"
msgstr "删除头åƒ"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr "从å²è¯—中删除å­å²è¯—"
@@ -10956,12 +12817,21 @@ msgstr "删除截止日期"
msgid "Remove fork relationship"
msgstr "删除派生关系"
+msgid "Remove from board"
+msgstr "从看æ¿ç§»é™¤"
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr "删除群组"
msgid "Remove milestone"
msgstr "删除里程碑"
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "删除优先级"
@@ -10971,30 +12841,75 @@ msgstr "删除项目"
msgid "Remove spent time"
msgstr "删除消耗时间"
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr "删除时间估计"
msgid "Removed"
msgstr "已删除"
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr "已删除 %{type} 的 id %{id}"
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr "已删除的群组无法æ¢å¤ï¼"
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr "已删除的项目无法æ¢å¤!"
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr "从å­å²è¯—中删除%{epic_ref}。"
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr "删除里程碑%{milestone_reference}。"
msgid "Removes all labels."
msgstr "删除所有标记。"
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr "删除消耗时间."
@@ -11028,6 +12943,15 @@ msgstr "é‡æ–°å¼€å¯å²è¯—"
msgid "Reopen milestone"
msgstr "é‡æ–°æ‰“开里程碑"
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr "ä¿®å¤è®¤è¯"
@@ -11037,17 +12961,26 @@ msgstr "替æ¢"
msgid "Replace all label(s)"
msgstr "替æ¢æ‰€æœ‰æ ‡è®°"
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr "回å¤è¯„论"
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr "直接回å¤æ­¤é‚®ä»¶æˆ– %{view_it_on_gitlab}。"
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr "从 URL 导入仓库"
msgid "Report abuse to admin"
-msgstr ""
+msgstr "å‘管ç†å‘˜æŠ¥å‘Šæ»¥ç”¨è¡Œä¸º"
msgid "Reporting"
msgstr "报告"
@@ -11077,7 +13010,7 @@ msgid "Reports|Metrics reports are loading"
msgstr "正在加载指标报告"
msgid "Reports|Metrics reports changed on %{numberOfChanges} %{pointsString}"
-msgstr "指标报告有%{numberOfChanges}处å˜åŒ–,共%{pointsString}"
+msgstr "指标报告有%{numberOfChanges} %{pointsString}å˜åŒ–"
msgid "Reports|Metrics reports did not change"
msgstr "指标报告无å˜åŒ–"
@@ -11109,6 +13042,9 @@ msgstr "未å‘生å˜åŒ–的测试结果"
msgid "Repository"
msgstr "仓库"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "仓库设置"
@@ -11133,9 +13069,15 @@ msgstr "仓库维护"
msgid "Repository mirror"
msgstr "仓库镜åƒ"
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr "仓库存储"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "选择"
@@ -11148,6 +13090,9 @@ msgstr "请求的 %{time_ago}"
msgid "Requests Profiles"
msgstr "请求分æž"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "è¦æ±‚此群组中的所有用户都å¯ç”¨åŒé‡è®¤è¯"
@@ -11163,6 +13108,9 @@ msgstr "需è¦ç”¨æˆ·å¯†ç æ‰èƒ½æ‰¹å‡†"
msgid "Require users to prove ownership of custom domains"
msgstr "è¦æ±‚用户è¯æ˜Žè‡ªå®šä¹‰åŸŸçš„所有æƒ"
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] "éœ€è¦ %{count} 个 %{names} 的核准"
@@ -11172,11 +13120,14 @@ msgid_plural "Requires %d more approvals."
msgstr[0] "éœ€è¦ %d 个核准"
msgid "Resend confirmation email"
-msgstr ""
+msgstr "é‡æ–°å‘é€ç¡®è®¤é‚®ä»¶"
msgid "Resend invite"
msgstr "é‡æ–°å‘é€é‚€è¯·"
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr "é‡ç½®æŽˆæƒå¯†é’¥"
@@ -11192,11 +13143,17 @@ msgstr "é‡ç½®å¯†é’¥"
msgid "Reset runners registration token"
msgstr "é‡ç½® Runner 注册令牌"
+msgid "Reset template"
+msgstr "é‡ç½®æ¨¡æ¿"
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr "é‡ç½®æŽˆæƒå¯†é’¥å°†ä¼šä½¿å…ˆå‰çš„密钥无效。现有警报é…置需è¦é€šè¿‡æ–°çš„密钥更新。"
-msgid "Resolve all discussions in new issue"
-msgstr "在新议题中解决所有讨论"
+msgid "Resolve all threads in new issue"
+msgstr ""
msgid "Resolve conflicts on source branch"
msgstr "在æºåˆ†æ”¯ä¸Šè§£å†³å†²çª"
@@ -11204,6 +13161,9 @@ msgstr "在æºåˆ†æ”¯ä¸Šè§£å†³å†²çª"
msgid "Resolve discussion"
msgstr "解决讨论"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr "已解决"
@@ -11220,7 +13180,7 @@ msgid "Resolved by %{resolvedByName}"
msgstr "由 %{resolvedByName} 解决"
msgid "Resolves IP addresses once and uses them to submit requests"
-msgstr "解æžä¸€æ¬¡ IP 地å€å¹¶ä½¿ç”¨å®ƒä»¬æ交请求"
+msgstr "解æžä¸€æ¬¡IP地å€å¹¶ä½¿ç”¨å®ƒä»¬æ交请求"
msgid "Response"
msgstr "å“应"
@@ -11250,6 +13210,9 @@ msgid "Restart Terminal"
msgstr "é‡å¯ç»ˆç«¯"
msgid "Restrict access by IP address"
+msgstr "通过IP地å€é™åˆ¶è®¿é—®"
+
+msgid "Restrict membership by email"
msgstr ""
msgid "Resume"
@@ -11268,7 +13231,7 @@ msgid "Retry this job in order to create the necessary resources."
msgstr "é‡è¯•æ­¤ä½œä¸šä»¥åˆ›å»ºå¿…è¦çš„资æºã€‚"
msgid "Retry update"
-msgstr ""
+msgstr "é‡è¯•æ›´æ–°"
msgid "Retry verification"
msgstr "é‡è¯•éªŒè¯"
@@ -11316,6 +13279,9 @@ msgstr "删除"
msgid "Roadmap"
msgstr "路线图"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "使用外部仓库的CI/CDæµæ°´çº¿"
@@ -11376,8 +13342,8 @@ msgstr "Runner页é¢"
msgid "Runners page."
msgstr "Runner页é¢."
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "您已ç»ä½¿ç”¨äº†æ‰€æœ‰å…±äº«Runnerçš„æµæ°´çº¿æ—¶é—´ã€‚"
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "è¿è¡Œä¸­"
@@ -11451,6 +13417,9 @@ msgstr "ä¿å­˜æµæ°´çº¿è®¡åˆ’"
msgid "Save variables"
msgstr "ä¿å­˜å˜é‡"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr "正在ä¿å­˜é¡¹ç›®ã€‚"
@@ -11460,6 +13429,9 @@ msgstr "新建æµæ°´çº¿è®¡åˆ’"
msgid "Scheduled"
msgstr "已加入日程"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "计划"
@@ -11481,15 +13453,30 @@ msgstr "指定范围的议题看æ¿"
msgid "Scoped label"
msgstr "有范围标记"
+msgid "Scopes"
+msgstr "范围"
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr "å‘下滚动到 <strong>Google Code项目托管</strong> 并通过å³ä¾§çš„开关å¯ç”¨ã€‚"
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr "滚动到底部"
msgid "Scroll to top"
msgstr "滚动到顶部"
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "æœç´¢"
@@ -11577,9 +13564,65 @@ msgstr "在此群组"
msgid "SearchAutocomplete|in this project"
msgstr "在此项目"
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr "显示%{scope}中共%{count}项\"%{term}\"的第%{from}项 - 第%{to}项"
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+
msgid "Seats currently in use"
msgstr "当å‰æ­£åœ¨ä½¿ç”¨çš„用户数é‡"
@@ -11592,6 +13635,9 @@ msgstr "密ç "
msgid "Security"
msgstr "安全"
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr "安全仪表æ¿"
@@ -11607,24 +13653,48 @@ msgstr "获å–æ¼æ´žåˆ—表时出错。请检查您的网络连接,然åŽé‡è¯•
msgid "Security Dashboard|Issue Created"
msgstr "已创建议题"
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr "创建议题"
msgid "Security Reports|Dismiss vulnerability"
msgstr "忽略æ¼æ´ž"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr "了解更多关于您的仪表æ¿è®¾ç½®"
msgid "Security Reports|More info"
msgstr "更多信æ¯"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr "创建议题时出错。"
msgid "Security Reports|There was an error creating the merge request."
msgstr "创建åˆå¹¶è¯·æ±‚时出错。"
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr "忽略æ¼æ´žæ—¶å‡ºé”™ã€‚"
@@ -11650,6 +13720,9 @@ msgid "SecurityDashboard| The security dashboard displays the latest security re
msgstr "安全仪表æ¿æ˜¾ç¤ºæœ€æ–°çš„安全报告。用它æ¥æŸ¥æ‰¾å’Œä¿®å¤æ¼æ´žã€‚"
msgid "SecurityDashboard|Confidence"
+msgstr "置信度"
+
+msgid "SecurityDashboard|Hide dismissed"
msgstr ""
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
@@ -11659,13 +13732,13 @@ msgid "SecurityDashboard|Pipeline %{pipelineLink} triggered"
msgstr "æµæ°´çº¿ %{pipelineLink} 已触å‘"
msgid "SecurityDashboard|Project"
-msgstr ""
+msgstr "项目"
msgid "SecurityDashboard|Report type"
-msgstr ""
+msgstr "报表类型"
msgid "SecurityDashboard|Severity"
-msgstr ""
+msgstr "严é‡æ€§"
msgid "See metrics"
msgstr "查看指标"
@@ -11679,6 +13752,9 @@ msgstr "选择"
msgid "Select Archive Format"
msgstr "选择下载格å¼"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr "选择页é¢"
@@ -11688,12 +13764,18 @@ msgstr "请先从左侧边æ é€‰æ‹©ä¸€ä¸ªæ–‡ä»¶å¼€å§‹ç¼–辑,然åŽå°±å¯ä»¥æ
msgid "Select a group to invite"
msgstr "选择è¦é‚€è¯·çš„组"
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr "选择一个命å空间æ¥æ´¾ç”Ÿé¡¹ç›®"
msgid "Select a new namespace"
msgstr "选择一个新的命å空间"
+msgid "Select a project"
+msgstr "选择一个项目"
+
msgid "Select a project to read Insights configuration file"
msgstr "选择è¦è¯»å– Insights é…置文件的项目"
@@ -11706,6 +13788,9 @@ msgstr "选择模æ¿ä»“库"
msgid "Select a timezone"
msgstr "选择时区"
+msgid "Select all"
+msgstr "选择全部"
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "选择一个既有的Kubernetes集群或者创建一个新的"
@@ -11715,8 +13800,17 @@ msgstr "选择分支/标签"
msgid "Select group or project"
msgstr "选择群组或项目"
-msgid "Select members to invite"
-msgstr "选择è¦é‚€è¯·çš„æˆå‘˜"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
+msgstr ""
msgid "Select project"
msgstr "选择项目"
@@ -11727,6 +13821,9 @@ msgstr "按项目和地域选择实例类型"
msgid "Select project to choose zone"
msgstr "按项目选择地域"
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr "选择è¦å¯¼å…¥çš„项目。"
@@ -11742,17 +13839,23 @@ msgstr "选择当å‰é¡¹ç›®çš„默认分支。除éžå¦è¡ŒæŒ‡å®šï¼Œå¦åˆ™æ‰€æœ‰åˆ
msgid "Select the custom project template source group."
msgstr "选择自定义项目模æ¿æºç¾¤ç»„。"
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr "éžç®¡ç†å‘˜ç”¨æˆ·æ— æ³•ä¸ºç¾¤ç»„ã€é¡¹ç›®æˆ–代ç ç‰‡æ®µä½¿ç”¨æ‰€é€‰çº§åˆ«ã€‚如果公共级别å—到é™åˆ¶ï¼Œåˆ™ç”¨æˆ·é…置文件仅对登录用户å¯è§ã€‚"
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "选中GitLab用户将在议题和评论的æ述中加入指å‘该GitLab用户的链接(例如“By <a href=\"#\">@johnsmith</a>â€ï¼‰ã€‚它还将与所选用户关è”å’Œ/或分é…这些议题和评论。"
-msgid "Send an email notification to Developers."
-msgstr "å‘å¼€å‘人员å‘é€ç”µå­é‚®ä»¶é€šçŸ¥ã€‚"
+msgid "Send a separate email notification to Developers."
+msgstr "å‘å¼€å‘人员å‘é€å•ç‹¬çš„电å­é‚®ä»¶é€šçŸ¥ã€‚"
msgid "Send confirmation email"
-msgstr ""
+msgstr "å‘é€ç¡®è®¤é‚®ä»¶"
msgid "Send email"
msgstr "å‘é€ç”µå­é‚®ä»¶"
@@ -11775,6 +13878,12 @@ msgstr "用逗å·åˆ†éš”主题。"
msgid "September"
msgstr "9月"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr "æœåŠ¡å™¨ä»…支æŒæ‰¹å¤„ç†API,请将您的Git LFS客户端更新到1.0.1åŠæ›´é«˜ç‰ˆæœ¬ã€‚"
@@ -11802,6 +13911,9 @@ msgstr "Kubernestes Pods"
msgid "ServerlessDetails|More information"
msgstr "更多信æ¯"
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr "æ ¹æ®éœ€è¦éšæ—¶é—´æŽ¨ç§»ä½¿ç”¨çš„Kubernetes Podæ•°é‡ã€‚"
@@ -11832,9 +13944,21 @@ msgstr "了解更多关于 Serverless"
msgid "Serverless|No functions available"
msgstr "没有å¯ç”¨çš„功能"
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr " Knativeç›®å‰æ²¡æœ‰å¯ç”¨çš„功能数æ®ã€‚è¿™å¯èƒ½æœ‰å¤šç§åŽŸå› ï¼ŒåŒ…括:"
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr "æœåŠ¡"
@@ -11853,6 +13977,9 @@ msgstr "会è¯æŒç»­æ—¶é—´(分钟)"
msgid "Session expiration, projects limit and attachment size."
msgstr "会è¯æœ‰æ•ˆæœŸï¼Œé¡¹ç›®é™åˆ¶åŠé™„件大å°ã€‚"
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr "设置议题æ述的默认模æ¿ã€‚"
@@ -11886,12 +14013,24 @@ msgstr "设置新密ç "
msgid "Set notification email for abuse reports."
msgstr "为滥用报告设置通知电å­é‚®ä»¶ã€‚"
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "设定用户登录的æ¡ä»¶ã€‚å¯ç”¨å¼ºåˆ¶åŒé‡è®¤è¯ã€‚"
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr "设置æ¯ä¸ªä½œä¸šçš„产物的默认到期时间。 0 表示无é™åˆ¶ã€‚默认以秒为å•ä½ï¼Œä½†æ‚¨å¯ä»¥å®šä¹‰æ›¿ä»£æ–¹æ¡ˆã€‚例如:<code>4 mins 2 sec</code>, <code>2h42min</code>.。"
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr "设置作业的过期时间。一旦逾期,作业将被归档并且ä¸èƒ½é‡è¯•ã€‚留空则永ä¸è¿‡æœŸã€‚必须设置为 1 天以上,例如: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>。"
@@ -11901,18 +14040,24 @@ msgstr "设置æ¯ä¸ªä½œä¸šçš„产物文件的最大大å°"
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr "设置群组æ¯ä¸ªæœˆå¯åœ¨å…±äº«Runner上使用的最大æµæ°´çº¿åˆ†é’Ÿæ•°ã€‚ 0 表示无é™åˆ¶ã€‚"
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr "设置时间估计"
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "é…ç½® CI/CD"
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
msgid "Set up a %{type} Runner manually"
msgstr "手动设置%{type} Runner "
-msgid "Set up a specific Runner automatically"
-msgstr "自动创建指定Runner"
-
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr "æ ¹æ®%{docsLinkStart}文档%{icon}%{docsLinkEnd}设置断言/属性/声明(email,first_name,last_name)和NameID"
@@ -11928,6 +14073,9 @@ msgstr "设置项目以自动推é€å’Œ/或从å¦ä¸€ä¸ªä»“库中æå–更改。åˆ
msgid "Set weight"
msgstr "设置æƒé‡"
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "设置密ç "
@@ -11955,6 +14103,12 @@ msgstr "对ä¸èµ·ï¼Œæˆ‘们无法设置您的状æ€ã€‚请ç¨åŽå†è¯•ã€‚"
msgid "SetStatusModal|What's your status?"
msgstr "您的状æ€æ˜¯ä»€ä¹ˆï¼Ÿ"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr "将截止日期设置为 %{due_date}。"
@@ -12012,9 +14166,15 @@ msgstr "仅显示已归档项目"
msgid "Show command"
msgstr "显示相关命令"
+msgid "Show comments"
+msgstr "显示评论"
+
msgid "Show comments only"
msgstr "仅显示评论"
+msgid "Show commit description"
+msgstr "显示æ交æè¿°"
+
msgid "Show complete raw log"
msgstr "显示完整的原始日志"
@@ -12037,6 +14197,18 @@ msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "显示 %d 个事件"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr "显示所有议题"
+
+msgid "Showing last %{size} of log -"
+msgstr "显示日志的最åŽ%{size} -"
+
msgid "Side-by-side"
msgstr "并排"
@@ -12067,6 +14239,9 @@ msgstr "使用智能å¡ç™»å½•"
msgid "Sign in via 2FA code"
msgstr "通过2FA代ç ç™»å½•"
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr "使用å•ç‚¹ç™»å½•(SSO)进行登录"
@@ -12079,6 +14254,9 @@ msgstr "退出"
msgid "Sign out & Register"
msgstr "退出并注册"
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr "注册æˆåŠŸï¼è¯·ç¡®è®¤æ‚¨çš„电å­é‚®ä»¶ä»¥ç™»å½•ã€‚"
@@ -12088,12 +14266,18 @@ msgstr "登录é™åˆ¶"
msgid "Sign-up restrictions"
msgstr "注册é™åˆ¶"
-msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
msgstr ""
-msgid "SignUp|Username is too long (maximum is %{max_length} characters)."
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
msgstr ""
+msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
+msgstr "å称太长(最大为%{max_length}字符)。"
+
+msgid "SignUp|Username is too long (maximum is %{max_length} characters)."
+msgstr "用户å太长(最大为%{max_length}字符)。"
+
msgid "Signed in"
msgstr "已登录"
@@ -12110,6 +14294,9 @@ msgid "Similar issues"
msgstr "相似议题"
msgid "Single or combined queries"
+msgstr "å•ä¸ªæˆ–组åˆæŸ¥è¯¢"
+
+msgid "Site ID"
msgstr ""
msgid "Size"
@@ -12130,6 +14317,21 @@ msgstr "Slack应用"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr "Slack集æˆå…许您通过èŠå¤©çª—å£ä¸­çš„shash命令与GitLab交互。"
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "更慢,但能确ä¿é¡¹ç›®å·¥ä½œç©ºé—´ä¸ŽåŽŸå§‹ç‰ˆæœ¬ä¸€è‡´ï¼›å› å…¶å¯¹æ¯ä¸ªä½œä¸šå‡ä»Žå¤´å¼€å§‹å…‹éš†ä»“库"
@@ -12163,9 +14365,15 @@ msgstr "没有è¦æ˜¾ç¤ºçš„代ç ç‰‡æ®µã€‚"
msgid "SnippetsEmptyState|They can be either public or private."
msgstr "它们å¯ä»¥è®¾ç½®ä¸ºå…¬å¼€æˆ–ç§æœ‰ã€‚"
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr "æŸäº›ç”µå­é‚®ä»¶æœåŠ¡å™¨ä¸æ”¯æŒè¦†ç›–电å­é‚®ä»¶çš„å‘件人å称。å¯ç”¨æ­¤é€‰é¡¹å¯ä»¥åœ¨ç”µå­é‚®ä»¶æ­£æ–‡ä¸­åŒ…å«è®®é¢˜çš„作者姓åã€åˆå¹¶è¯·æ±‚或评论。"
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr "有人与您åŒæ—¶ç¼–辑了%{issueType} 。æ述已被更新,您需è¦é‡æ–°ä¿®æ”¹ã€‚"
@@ -12196,6 +14404,9 @@ msgstr "点击按钮时出错"
msgid "Something went wrong while adding your award. Please try again."
msgstr "添加赞èµæ—¶å‡ºé”™ã€‚请å†è¯•ä¸€æ¬¡ã€‚"
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr "应用åŒæ„时出了点问题。请å†è¯•ä¸€æ¬¡ã€‚"
@@ -12205,6 +14416,12 @@ msgstr "关闭 %{issuable} 时出错。请ç¨åŽé‡è¯•"
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr "删除æºåˆ†æ”¯æ—¶å‡ºé”™ã€‚请é‡è¯•ã€‚"
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "åœ¨èŽ·å– %{listType} 列表时出错了"
@@ -12238,6 +14455,9 @@ msgstr "é‡æ–°å¼€å¯ %{issuable} 时出错。请ç¨åŽå†è¯•"
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "解决当å‰è®¨è®ºæ—¶å‡ºé”™ï¼Œè¯·é‡è¯•ã€‚"
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "å°†%{project} 添加到仪表æ¿æ—¶å‡ºé”™"
@@ -12289,6 +14509,9 @@ msgstr "已截止"
msgid "SortOptions|Due soon"
msgstr "å³å°†æˆªæ­¢"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "标记优先"
@@ -12358,6 +14581,9 @@ msgstr "最新的活动"
msgid "SortOptions|Oldest sign in"
msgstr "最早的登录"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "最早更新"
@@ -12373,6 +14599,12 @@ msgstr "最近一次活动"
msgid "SortOptions|Recent sign in"
msgstr "最近登录"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr "排åºæ–¹å‘"
@@ -12451,6 +14683,9 @@ msgstr "已暂存的 %{type}"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "把一个标记加上星标,å¯å°†å…¶å˜ä¸ºä¼˜å…ˆæ ‡è®°ã€‚通过拖放æ¥è°ƒæ•´ä¼˜å…ˆæ ‡è®°çš„顺åºï¼Œå¯ä»¥æ”¹å˜ä»–们的相对优先级。"
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr "星标开关失败。请ç¨åŽå†è¯•ã€‚"
@@ -12472,54 +14707,69 @@ msgstr "访问æŸä¸€é¡¹ç›®é¡µé¢å¹¶ç‚¹å‡»æ˜Ÿå½¢å›¾æ ‡åŽå¯ä»¥åœ¨æ­¤é¡µé¢ä¸Šæ‰¾
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr "您还没有已加星标的项目。"
+msgid "Starrers"
+msgstr ""
+
msgid "Stars"
msgstr "星标"
msgid "Start GitLab Ultimate trial"
msgstr "å¯åŠ¨ GitLab Ultimate 试用"
-msgid "Start Indexing"
-msgstr "开始索引"
-
msgid "Start Web Terminal"
msgstr "å¯åŠ¨Web终端"
msgid "Start a %{new_merge_request} with these changes"
msgstr "由此更改 %{new_merge_request}"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr "å¯åŠ¨æ–°çš„讨论..."
+
msgid "Start a new merge request"
-msgstr "开始一个新的åˆå¹¶è¯·æ±‚"
+msgstr "å¯åŠ¨æ–°çš„åˆå¹¶è¯·æ±‚"
msgid "Start a review"
-msgstr "开始一个评审"
+msgstr "å¯åŠ¨è¯„审"
msgid "Start and due date"
msgstr "开始和截止日期"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr "开始清ç†"
msgid "Start date"
msgstr "开始日期"
-msgid "Start discussion"
-msgstr "开始讨论"
-
-msgid "Start discussion & close %{noteable_name}"
-msgstr "开始讨论并关闭 %{noteable_name}"
-
-msgid "Start discussion & reopen %{noteable_name}"
-msgstr "开始讨论并é‡æ–°æ‰“å¼€ %{noteable_name}"
-
msgid "Start merge train"
-msgstr ""
+msgstr "å¯åŠ¨åˆå¹¶åˆ—车"
msgid "Start merge train when pipeline succeeds"
+msgstr "æµæ°´çº¿æˆåŠŸæ—¶å¯åŠ¨åˆå¹¶åˆ—车"
+
+msgid "Start search"
msgstr ""
msgid "Start the Runner!"
msgstr "å¯åŠ¨ Runner!"
+msgid "Start thread"
+msgstr ""
+
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
+
msgid "Start your trial"
msgstr "开始试用"
@@ -12544,12 +14794,18 @@ msgstr "开始于(UTC)"
msgid "State your message to activate"
msgstr "输入消æ¯ä»¥å¯ç”¨"
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "状æ€"
msgid "Status:"
msgstr "状æ€:"
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr "通过é…ç½®Prometheusæ¥ç›‘控你的部署,了解环境的性能和å¥åº·åº¦çš„最新状æ€ã€‚"
+
msgid "Stop Terminal"
msgstr "åœæ­¢ç»ˆç«¯"
@@ -12580,6 +14836,18 @@ msgstr "存储:"
msgid "StorageSize|Unknown"
msgstr "未知"
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "å­ç¾¤ç»„"
@@ -12595,6 +14863,9 @@ msgstr "垃圾信æ¯ä¸¾æŠ¥"
msgid "Submit feedback"
msgstr "æ交å馈"
+msgid "Submit issue"
+msgstr "æ交议题"
+
msgid "Submit review"
msgstr "æ交评审"
@@ -12619,6 +14890,12 @@ msgstr "订阅日历"
msgid "Subscribed"
msgstr "已订阅"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr "订阅"
@@ -12631,9 +14908,6 @@ msgstr "å…è´¹"
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr "GitLab å…许您继续使用您的订阅,å³ä½¿æ‚¨å·²è¶…过您购买的最大用户数é‡ã€‚您必须在续订时支付这些订阅。"
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr "GitLab.com %{planName} %{suffix}"
-
msgid "SubscriptionTable|Last invoice"
msgstr "最åŽä¸€ä¸ªå‘票"
@@ -12694,6 +14968,9 @@ msgstr "使用情况"
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr "使用次数将在æ¯å¤©ä¸­åˆ12:00进行更新。"
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr "å‡åŽ»"
@@ -12719,7 +14996,7 @@ msgid "Successfully unlocked"
msgstr "æˆåŠŸè§£é™¤ç¦ç”¨"
msgid "Suggest code changes which are immediately applied. Try it out!"
-msgstr ""
+msgstr "å¯ä»¥ä¸€é”®åº”用的建议代ç æ›´æ”¹åŠŸèƒ½ã€‚试试看ï¼"
msgid "Suggested change"
msgstr "å˜æ›´å»ºè®®"
@@ -12787,9 +15064,15 @@ msgstr "æžæš—ç°ç»¿è‰²"
msgid "SuggestedColors|Very pale orange"
msgstr "æžæ·¡æ©™è‰²"
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr "星期日"
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr "对自定义è¯ä¹¦çš„支æŒå·²ç¦ç”¨ã€‚请è”系系统管ç†å‘˜æ¥å¯ç”¨å®ƒã€‚"
@@ -12847,6 +15130,12 @@ msgstr "标签列表:"
msgid "Tag this commit."
msgstr "为此æ交打标签。"
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "标签"
@@ -12884,7 +15173,7 @@ msgid "TagsPage|Deleting the %{tag_name} tag cannot be undone. Are you sure?"
msgstr "删除 %{tag_name} åŽå°†æ— æ³•æ¢å¤ï¼Œæ‚¨ç¡®å®šï¼Ÿ"
msgid "TagsPage|Edit release notes"
-msgstr "编辑å‘行记录"
+msgstr "编辑å‘行说明"
msgid "TagsPage|Existing branch name, tag, or commit SHA"
msgstr "已存在分支å称,标记或æ交SHA"
@@ -12956,7 +15245,7 @@ msgid "Terminal for environment"
msgstr "环境终端"
msgid "Terminal sync service is running"
-msgstr ""
+msgstr "终端åŒæ­¥æœåŠ¡æ­£åœ¨è¿è¡Œ"
msgid "Terms of Service Agreement and Privacy Policy"
msgstr "æœåŠ¡æ¡æ¬¾å议和éšç§æ”¿ç­–"
@@ -13000,6 +15289,9 @@ msgstr "ç¡®ä¿é¡¹ç›®æœ‰æ³¨é‡Šã€‚"
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr "ç¡®ä¿wikiå·²å¯ç”¨å¹¶å…·æœ‰é¡µé¢ã€‚"
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr "感谢您的报告。 GitLab管ç†å‘˜å°†å°½å¿«è¿›è¡Œè°ƒæŸ¥ã€‚"
@@ -13013,6 +15305,9 @@ msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
msgstr[0] "%{type} 包å«ä»¥ä¸‹é”™è¯¯ï¼š"
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "GitLab 中的高级全局æœç´¢åŠŸèƒ½æ˜¯ä¸€ä¸ªå¼ºå¤§ä¸”节çœæ‚¨çš„时间的æœç´¢æœåŠ¡ã€‚您å¯ä»¥æœç´¢å…¶ä»–团队的代ç ä»¥å¸®åŠ©æ‚¨å®Œå–„自己项目中的代ç ã€‚从而é¿å…创建é‡å¤çš„代ç æˆ–浪费时间。"
@@ -13037,9 +15332,6 @@ msgstr "获å–辅助节点状æ€è¯·æ±‚超时的秒数。"
msgid "The branch for this project has no active pipeline configuration."
msgstr "此项目的分支没有活跃的æµæ°´çº¿é…置。"
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "字符çªå‡ºæ˜¾ç¤ºå™¨å¸®åŠ©æ‚¨å°†ä¸»é¢˜è¡Œä¿æŒä¸º %{titleLength} 字符并将正文包装为 %{bodyLength} 以便它们在git中å¯è¯»ã€‚"
@@ -13056,7 +15348,7 @@ msgid "The content of this page is not encoded in UTF-8. Edits can only be made
msgstr "此页é¢çš„内容未以UTF-8ç¼–ç ã€‚编辑åªèƒ½é€šè¿‡Git仓库进行。"
msgid "The dependency list details information about the components used within your project."
-msgstr ""
+msgstr "ä¾èµ–项列表详细说明了项目中使用组件的信æ¯ã€‚"
msgid "The deployment of this job to %{environmentLink} did not succeed."
msgstr "将此作业部署为 %{environmentLink} 并未æˆåŠŸã€‚"
@@ -13064,6 +15356,12 @@ msgstr "将此作业部署为 %{environmentLink} 并未æˆåŠŸã€‚"
msgid "The directory has been successfully created."
msgstr "目录已æˆåŠŸåˆ›å»ºã€‚"
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr "输入的用户映射ä¸æ˜¯æœ‰æ•ˆçš„JSON用户映射。"
@@ -13100,9 +15398,6 @@ msgstr "%{group_links} 的群组设置è¦æ±‚您为å¸æˆ·å¯ç”¨åŒé‡è®¤è¯ã€‚ä½ 
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "该导入过程将在 %{timeout}åŽè¶…时。对于需è¦é•¿äºŽè¯¥æ—¶é—´æ‰èƒ½å¯¼å…¥çš„仓库,请使用克隆/推é€ç»„åˆã€‚"
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr "无法接å—邀请。"
@@ -13146,7 +15441,7 @@ msgid "The name %{entryName} is already taken in this directory."
msgstr "å称%{entryName}在此目录中已使用。"
msgid "The number of changes to be fetched from GitLab when cloning a repository. This can speed up Pipelines execution. Keep empty or set to 0 to disable shallow clone by default and make GitLab CI fetch all branches and tags each time."
-msgstr ""
+msgstr "克隆仓库时从GitLab获å–çš„å˜æ›´æ•°ç›®ã€‚此设置å¯ä»¥åŠ å¿«æµæ°´çº¿çš„执行速度。ä¿æŒä¸ºç©ºæˆ–设置为0将默认ç¦ç”¨æµ…克隆,并使GitLab CIæ¯æ¬¡éƒ½èŽ·å–所有分支和标签。"
msgid "The number of times an upload record could not find its file"
msgstr "上载记录无法找到相应文件的次数"
@@ -13209,7 +15504,7 @@ msgid "The repository for this project does not exist."
msgstr "此项目的仓库ä¸å­˜åœ¨ã€‚"
msgid "The repository for this project is empty"
-msgstr "该项目的仓库是空的"
+msgstr "该项目仓库当å‰ä¸ºç©º"
msgid "The repository is being updated..."
msgstr "仓库正在更新......"
@@ -13217,8 +15512,8 @@ msgstr "仓库正在更新......"
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "该仓库必须å¯é€šè¿‡<code>http://</code>, <code>https://</code> 或 <code>git://</code>进行访问。"
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "该仓库必须å¯é€šè¿‡ <code>http://</code>,<code>https://</code>,<code>ssh://</code> å’Œ <code>git://</code>进行访问。"
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "审阅阶段概述了从创建åˆå¹¶è¯·æ±‚到被åˆå¹¶çš„时间。当创建第一个åˆå¹¶è¯·æ±‚åŽï¼Œæ•°æ®å°†è‡ªåŠ¨æ·»åŠ åˆ°æ­¤å¤„。"
@@ -13244,8 +15539,8 @@ msgstr "任何登录用户都å¯ä»¥çœ‹åˆ°è¯¥ä»£ç ç‰‡æ®µã€‚"
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "预å‘布阶段概述了从åˆå¹¶è¯·æ±‚被åˆå¹¶åˆ°éƒ¨ç½²è‡³ç”Ÿäº§çŽ¯å¢ƒçš„总时间。首次部署到生产环境åŽï¼Œæ•°æ®å°†è‡ªåŠ¨æ·»åŠ åˆ°æ­¤å¤„。"
-msgid "The tabs below will be removed in a future version"
-msgstr "以下选项å¡å°†åœ¨ä»¥åŽçš„版本中删除"
+msgid "The target element is missing."
+msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "测试阶段概述了 GitLab CI 为相关åˆå¹¶è¯·æ±‚è¿è¡Œæ¯ä¸ªæµæ°´çº¿æ‰€éœ€çš„时间。当第一个æµæ°´çº¿è¿è¡Œå®ŒæˆåŽï¼Œæ•°æ®å°†è‡ªåŠ¨æ·»åŠ åˆ°æ­¤å¤„。"
@@ -13253,8 +15548,8 @@ msgstr "测试阶段概述了 GitLab CI 为相关åˆå¹¶è¯·æ±‚è¿è¡Œæ¯ä¸ªæµæ°´ç
msgid "The time taken by each data entry gathered by that stage."
msgstr "该阶段æ¯æ¡æ•°æ®æ‰€èŠ±çš„时间"
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
-msgstr "Geo节点的唯一标识符。如果在 gitlab. rb 中设置, åˆ™éœ€åŒ¹é… \"geo_node_name\", å¦åˆ™å¿…须与 \"external_url\" 匹é…"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
+msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
msgstr "æ›´æ–°æ“作将在 %{number_of_minutes} 分钟åŽè¶…时。对于大型仓库,请使用clone/push组åˆã€‚"
@@ -13277,8 +15572,8 @@ msgstr "用户映射是一个JSON文档,将å‚与项目的Google Code用户映
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "用户映射是å‚与项目的 FogBugz 用户的电å­é‚®ä»¶åœ°å€å’Œç”¨æˆ·å将被导入 GitLab çš„æ–¹å¼ã€‚您å¯ä»¥é€šè¿‡ä»¥ä¸‹è¡¨æ ¼æ¥ä¿®æ”¹æ˜ å°„关系。"
-msgid "The user-facing URL of the Geo node."
-msgstr "é¢å‘用户的Geo节点URL。"
+msgid "The user-facing URL of the Geo node"
+msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr "中ä½æ•°æ˜¯ä¸€ä¸ªæ•°åˆ—中最中间的值。例如在 3ã€5ã€9 之间,中ä½æ•°æ˜¯ 5。在 3ã€5ã€7ã€8 之间,中ä½æ•°æ˜¯ (5 + 7)/ 2 = 6。"
@@ -13313,9 +15608,15 @@ msgstr "没有为此GitLab实例设置自定义项目模æ¿ã€‚它们是从GitLab
msgid "There are no issues to show"
msgstr "当å‰æ— è®®é¢˜"
+msgid "There are no issues to show."
+msgstr "没有è¦æ˜¾ç¤ºçš„议题。"
+
msgid "There are no labels yet"
msgstr "ç›®å‰æ— æ ‡è®°"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr "没有未关闭的议题"
@@ -13337,27 +15638,33 @@ msgstr "无未暂存的修改"
msgid "There is already a repository with that name on disk"
msgstr "ç£ç›˜ä¸Šå·²å­˜åœ¨å…·æœ‰è¯¥å称的仓库"
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr "与您的设备通信时出现问题。"
msgid "There was a problem sending the confirmation email"
-msgstr ""
+msgstr "å‘é€ç¡®è®¤é‚®ä»¶æ—¶å‡ºçŽ°é—®é¢˜"
msgid "There was an error %{message} todo."
msgstr "%{message}待办事项时出现错误"
-msgid "There was an error adding a todo."
-msgstr "添加待办事项时出现错误。"
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
-msgstr ""
+msgstr "创建议题时出错"
-msgid "There was an error deleting the todo."
-msgstr "删除待办事项时出现错误。"
+msgid "There was an error deleting the To Do."
+msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr "获å–图表的é…置时出错"
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr "收集图表数æ®æ—¶å‡ºé”™"
@@ -13382,6 +15689,9 @@ msgstr "ä¿å­˜é€šçŸ¥è®¾ç½®æ—¶å‘生错误。"
msgid "There was an error subscribing to this label."
msgstr "订阅此标记时出错。"
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr "é‡ç½®ç”µå­é‚®ä»¶ä»¤ç‰Œæ—¶å‡ºé”™ã€‚"
@@ -13407,10 +15717,10 @@ msgid "Third party offers"
msgstr "第三方优惠"
msgid "This %{issuableDisplayName} is locked. Only project members can comment."
-msgstr ""
+msgstr "æ­¤%{issuableDisplayName}被é”定。åªæœ‰é¡¹ç›®æˆå‘˜å¯ä»¥è¯„论。"
msgid "This %{issuable} is locked. Only <strong>project members</strong> can comment."
-msgstr "这个 %{issuable} 已被é”定。åªæœ‰ <strong>项目æˆå‘˜</strong> å¯ä»¥å‘表评论。"
+msgstr "æ­¤%{issuable}已被é”定。åªæœ‰<strong>项目æˆå‘˜</strong>å¯ä»¥å‘表评论。"
msgid "This %{viewer} could not be displayed because %{reason}. You can %{options} instead."
msgstr "因为 %{reason}无法显示 %{viewer} 。您å¯ä»¥æ”¹ä¸º %{options}。"
@@ -13439,12 +15749,12 @@ msgstr "此看æ¿èŒƒå›´ç¼©å°äº†"
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "自您开始编辑åŽ, 此分支已更改。您想创建一个新的分支å—?"
-msgid "This certificate is automatically managed by Let's Encrypt"
-msgstr ""
-
msgid "This chart could not be displayed"
msgstr "无法显示此图表"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
+msgstr ""
+
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
msgstr "æ­¤æ交是åˆå¹¶è¯·æ±‚ %{link_to_merge_request} 的一部分。此处创建的评论将在该åˆå¹¶è¯·æ±‚的上下文中创建。"
@@ -13490,6 +15800,12 @@ msgstr "此域å未ç»è¿‡éªŒè¯ã€‚在å¯ç”¨è®¿é—®æƒé™ä¹‹å‰ï¼Œæ‚¨éœ€è¦éªŒè¯
msgid "This environment has no deployments yet."
msgstr "此环境还没有部署。"
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr "该字段是必填字段。"
@@ -13499,14 +15815,17 @@ msgstr "当å‰ç¾¤ç»„"
msgid "This group does not provide any group Runners yet."
msgstr "该群组未æ供任何群组Runner。"
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr "此用户为“幽çµç”¨æˆ·â€ï¼Œç”¨äºŽæŒæœ‰è¢«åˆ é™¤ç”¨æˆ·çš„所有议题。该用户无法被删除。"
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
-msgstr "这是一个ç§å¯†è®®é¢˜ã€‚"
+msgstr "当å‰è®®é¢˜ä¸ºç§å¯†è®®é¢˜ã€‚"
msgid "This is a delayed job to run in %{remainingTime}"
msgstr "这是一个将在%{remainingTime}åŽè¿è¡Œçš„延时作业。"
@@ -13526,15 +15845,15 @@ msgstr "这是自许å¯è¯å¯ç”¨ä»¥æ¥åŒæ—¶å­˜åœ¨çš„最大用户数。续订许
msgid "This is your current session"
msgstr "这是您当å‰çš„会è¯"
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "当å‰è®®é¢˜ä¸ºç§å¯†è®®é¢˜"
msgid "This issue is locked."
msgstr "此议题已é”定。"
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "当å‰ä½œä¸šéœ€è¦ç”¨æˆ·è§¦å‘其过程。此类作业通常用于将代ç éƒ¨ç½²åˆ°ç”Ÿäº§çŽ¯å¢ƒ"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "当å‰ä½œä¸šéœ€åœ¨ä¸Šçº§ä½œä¸šæˆåŠŸåŽæ‰å¯è¢«å¯åŠ¨ã€‚"
@@ -13551,7 +15870,7 @@ msgid "This job has not been triggered yet"
msgstr "作业还未被触å‘"
msgid "This job has not started yet"
-msgstr "作业还未开始"
+msgstr "作业尚未开始"
msgid "This job is an out-of-date deployment to %{environmentLink}."
msgstr "此项作业已过时,无法部署到 %{environmentLink}。"
@@ -13566,7 +15885,7 @@ msgid "This job is creating a deployment to %{environmentLink} and will overwrit
msgstr "此作业将创建部署到 %{environmentLink} 并将覆盖已有部署%{deploymentLink} 。"
msgid "This job is creating a deployment to %{environmentLink}."
-msgstr "这项工作正在创建一个 %{environmentLink}的部署。"
+msgstr "当å‰ä½œä¸šæ­£åœ¨éƒ¨ç½²åº”用到%{environmentLink}。"
msgid "This job is in pending state and is waiting to be picked by a runner"
msgstr "作业挂起中,等待进入队列"
@@ -13589,9 +15908,15 @@ msgstr "此作业最近部署到 %{link}。"
msgid "This job requires a manual action"
msgstr "作业需手动æ“作"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr "该作业将在计时器完æˆåŽè‡ªåŠ¨è¿è¡Œã€‚它们通常用于生产环境的增é‡éƒ¨ç½²ã€‚未计划时,它会转æ¢ä¸ºæ‰‹åŠ¨æ“作。"
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "在创建一个空的仓库或导入现有仓库之å‰ï¼Œå°†æ— æ³•æŽ¨é€ä»£ç ã€‚"
@@ -13610,9 +15935,6 @@ msgstr "此页é¢ä¸å¯ç”¨ï¼Œæ‚¨æ— æƒè·¨é¡¹ç›®é˜…读相关信æ¯ã€‚"
msgid "This page will be removed in a future release."
msgstr "此页é¢å°†åœ¨å°†æ¥çš„版本中删除。"
-msgid "This pipeline is run on the source branch"
-msgstr "æ­¤æµæ°´çº¿åœ¨æºåˆ†æ”¯ä¸Šè¿è¡Œ"
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr "æ­¤æµæ°´çº¿ä½¿ç”¨äº† %{strongStart}Auto DevOps 预先定义的并已å¯ç”¨çš„ CI/CD é…置。%{strongEnd}"
@@ -13643,6 +15965,9 @@ msgstr "æ­¤Runner仅在å—ä¿æŠ¤åˆ†æ”¯ä¸Šè§¦å‘çš„æµæ°´çº¿ä¸Šè¿è¡Œ"
msgid "This setting can be overridden in each project."
msgstr "当å‰è®¾ç½®å¯åœ¨æ¯ä¸ªé¡¹ç›®ä¸­è¿›è¡Œæ›´æ”¹è¦†ç›–。"
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr "此设置将更新用于生æˆç§æœ‰æ交电å­é‚®ä»¶çš„主机å。 %{learn_more}"
@@ -13652,6 +15977,9 @@ msgstr "当低于项目定义的超时时,此超时将优先,并å¯æŽ¥å—英
msgid "This user cannot be unlocked manually from GitLab"
msgstr "无法从GitLab手动解ç¦æ­¤ç”¨æˆ·"
+msgid "This user has no active %{type} Tokens."
+msgstr "此用户没有活动的%{type}令牌。"
+
msgid "This user has no identities"
msgstr "该用户无身份标识"
@@ -13673,6 +16001,9 @@ msgstr "这些电å­é‚®ä»¶è‡ªåŠ¨ç”Ÿæˆä¸ºè®®é¢˜(评论生æˆä¸ºç”µå­é‚®ä»¶ä¼šè¯
msgid "Thursday"
msgstr "星期四"
+msgid "Time"
+msgstr "时间"
+
msgid "Time based: Yes"
msgstr "基于时间:是"
@@ -13691,6 +16022,15 @@ msgstr "从创建åˆå¹¶è¯·æ±‚到被åˆå¹¶æˆ–关闭的时间"
msgid "Time estimate"
msgstr "预计时间"
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "GitLab等待外部æœåŠ¡çš„å“应时间(秒)。当æœåŠ¡æ²¡æœ‰åŠæ—¶å“应时,访问将被拒ç»ã€‚"
@@ -13700,6 +16040,9 @@ msgstr "剩余时间:"
msgid "Time spent"
msgstr "花费的时间"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "工时统计"
@@ -13709,12 +16052,21 @@ msgstr "创建第一个åˆå¹¶è¯·æ±‚之å‰çš„时间"
msgid "TimeTrackingEstimated|Est"
msgstr "预计"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "预计:"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "已用:"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr " %s天å‰"
@@ -13743,7 +16095,7 @@ msgid "Timeago|%s seconds remaining"
msgstr "剩余%s秒"
msgid "Timeago|%s weeks ago"
-msgstr " %s星期å‰"
+msgstr "%s星期å‰"
msgid "Timeago|%s weeks remaining"
msgstr "剩余%s星期"
@@ -13838,6 +16190,9 @@ msgstr "刚刚"
msgid "Timeago|right now"
msgstr "ç«‹å³"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "超时"
@@ -13867,6 +16222,9 @@ msgstr "标题和文件å称"
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr "è¦%{link_to_help}到您的域å,请将上述密钥添加到DNSé…置中的TXT记录。"
+msgid "To Do"
+msgstr "待处ç†"
+
msgid "To GitLab"
msgstr "GitLab目标路径"
@@ -13882,6 +16240,9 @@ msgstr "如需手动添加æ¡ç›®ï¼Œè¯·åœ¨æ‰‹æœºåº”用中æ供以下信æ¯ã€‚"
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "å¯ä»¥ä½¿ç”¨ %{personal_access_token_link} 连接GitHub仓库。当创建个人访问令牌时,需è¦é€‰æ‹© <code>repo</code> 范围,以显示å¯ä¾›è¿žæŽ¥çš„公开和ç§æœ‰çš„仓库列表。"
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "è¦è¿žæŽ¥GitHub仓库,首先需è¦æŽˆæƒGitLab访问列表中的GitHub仓库:"
@@ -13909,12 +16270,6 @@ msgstr "为了帮助改进 GitLab åŠå…¶ç”¨æˆ·ä½“验, GitLab 将定期收集使ç
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "为了帮助改进GitLab,我们希望定期收集使用信æ¯ã€‚è¿™å¯ä»¥é€šè¿‡ %{settings_link_start}设置%{link_end}éšæ—¶æ›´æ”¹ã€‚ %{info_link_start}更多信æ¯%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "å¯ä»¥ä½¿ç”¨ %{personal_access_token_link}导入GitHub仓库。当创建个人访问令牌时,需è¦é€‰æ‹© <code>repo</code> 范围,以显示å¯å¯¼å…¥çš„公开和ç§æœ‰çš„仓库列表。"
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "è¦å¯¼å…¥GitHub仓库,首先需è¦æŽˆæƒGitLab访问列表中的GitHub仓库:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "è¦å¯¼å…¥SVN仓库,请查看 %{svn_link}。"
@@ -13939,12 +16294,30 @@ msgstr "请将%{link} 页é¢è¿žæŽ¥åˆ°æ‚¨çš„ Jaeger æœåŠ¡å™¨ï¼Œä»¥ä¾¿åœ¨ GitLab
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr "为了ä¿æŒæ€§èƒ½ï¼Œä»…显示文件中的 <strong>%{display_size}/%{real_size}</strong>。"
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr "è¦ä»Žæ‰‹åŠ¨é…置的PrometheusæœåŠ¡æŽ¥æ”¶è­¦æŠ¥ï¼Œè¯·å°†ä»¥ä¸‹URL和授æƒå¯†é’¥æ·»åŠ åˆ°Prometheus webhooké…置文件中。了解更多关于 %{linkStart}é…ç½®Prometheus%{linkEnd} 将警报å‘é€åˆ°GitLab。"
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr "è¦æŸ¥çœ‹ç”¨æˆ·çš„所有个人访问令牌,您必须先模拟其身份。"
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "通过Azure,Okta,Onelogin,Ping Identity或自定义SAML 2.0等身份验è¯ç¨‹åºä¸ºæ‚¨çš„群组设置SAML身份验è¯ï¼š"
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr "è‹¥è¦æŒ‡å®šæ‚¨æ‰€å±žçš„群组的æ¯ä¸ªé¡¹ç›®çš„通知级别,您需è¦è®¿é—®é¡¹ç›®é¡µé¢ï¼Œæ›´æ”¹é€šçŸ¥çº§åˆ«ã€‚"
@@ -13969,17 +16342,17 @@ msgstr "è¦æ‰©å¤§æœç´¢èŒƒå›´ï¼Œè¯·æ›´æ”¹æˆ–删除上é¢çš„过滤器"
msgid "To widen your search, change or remove filters."
msgstr "需è¦æ‰©å¤§æœç´¢èŒƒå›´ï¼Œè¯·æ›´æ”¹æˆ–移除过滤æ¡ä»¶ã€‚"
-msgid "Today"
-msgstr "今日"
+msgid "To-Do List"
+msgstr ""
-msgid "Todo"
-msgstr "待办事项"
+msgid "To-do item successfully marked as done."
+msgstr ""
-msgid "Todo was successfully marked as done."
-msgstr "待办事项已标记为完æˆã€‚"
+msgid "Today"
+msgstr "今日"
-msgid "Todos"
-msgstr "待办事项"
+msgid "Toggle Markdown preview"
+msgstr ""
msgid "Toggle Sidebar"
msgstr "切æ¢ä¾§è¾¹æ "
@@ -13987,17 +16360,17 @@ msgstr "切æ¢ä¾§è¾¹æ "
msgid "Toggle backtrace"
msgstr "切æ¢è°ƒç”¨æ ˆå›žæº¯(backtrace)"
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr "切æ¢æ­¤æ–‡ä»¶çš„评论"
msgid "Toggle commit description"
-msgstr "切æ¢æ交æè¿°"
+msgstr "开关æ交æè¿°"
msgid "Toggle commit list"
-msgstr "切æ¢æ交列表"
-
-msgid "Toggle discussion"
-msgstr "开关讨论"
+msgstr "开关æ交列表"
msgid "Toggle emoji award"
msgstr "切æ¢è¡¨æƒ…符å·èµžèµ"
@@ -14006,23 +16379,32 @@ msgid "Toggle navigation"
msgstr "切æ¢å¯¼èˆª"
msgid "Toggle project"
-msgstr ""
+msgstr "切æ¢é¡¹ç›®"
msgid "Toggle sidebar"
msgstr "切æ¢è¾¹æ "
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "开关状æ€ï¼šå…³é—­"
msgid "ToggleButton|Toggle Status: ON"
msgstr "开关状æ€ï¼šå¼€å¯"
+msgid "Toggled :%{name}: emoji award."
+msgstr ""
+
msgid "Toggles :%{name}: emoji award."
msgstr "åˆ‡æ¢ :%{name}: 表情符å·èµžèµã€‚"
-msgid "Token"
-msgstr "令牌"
-
msgid "Tomorrow"
msgstr "明日"
@@ -14041,6 +16423,9 @@ msgstr "贡献总计"
msgid "Total Time"
msgstr "总时间"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "所有æ交和åˆå¹¶çš„总测试时间"
@@ -14059,6 +16444,12 @@ msgstr "在ä¸åŒé¡¹ç›®å’Œé‡Œç¨‹ç¢‘中跟踪具有åŒä¸€ä¸»é¢˜çš„议题组"
msgid "Track time with quick actions"
msgstr "使用快æ·æ“作æ¥ç»Ÿè®¡å·¥æ—¶"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr "转移项目"
@@ -14095,9 +16486,6 @@ msgstr "目标命å空间中已存在具有相åŒå称或路径的项目"
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr "转移失败,请è”系管ç†å‘˜ã€‚"
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr "树形视图"
@@ -14125,9 +16513,6 @@ msgstr "触å‘å˜é‡ï¼š"
msgid "Trigger was created successfully."
msgstr "触å‘器已æˆåŠŸåˆ›å»ºã€‚"
-msgid "Trigger was re-assigned."
-msgstr "触å‘器已é‡æ–°åˆ†é…。"
-
msgid "Trigger was successfully updated."
msgstr "触å‘器已æˆåŠŸæ›´æ–°ã€‚"
@@ -14152,12 +16537,21 @@ msgstr "30天内体验GitLab的所有功能。"
msgid "Try to fork again"
msgstr "å°è¯•å†æ¬¡æ´¾ç”Ÿ"
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr "å°è¯•ä¸Žæ‚¨çš„设备通信。请将其æ’入并立å³æŒ‰ä¸‹ä¸Šçš„按钮。"
msgid "Tuesday"
msgstr "星期二"
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "å¯ç”¨æœåŠ¡å°"
@@ -14191,11 +16585,23 @@ msgstr "U2Fåªæ”¯æŒåœ¨HTTPS的网站。请è”系管ç†å‘˜èŽ·å¾—更多信æ¯"
msgid "URL"
msgstr "URL"
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr "无法连接到PrometheusæœåŠ¡å™¨"
+
msgid "Unable to connect to server: %{error}"
msgstr "无法连接到æœåŠ¡å™¨: %{error}"
msgid "Unable to generate new instance ID"
-msgstr ""
+msgstr "无法生æˆæ–°çš„实例 ID"
msgid "Unable to load the diff. %{button_try_again}"
msgstr "无法加载差异。 %{button_try_again}"
@@ -14203,6 +16609,9 @@ msgstr "无法加载差异。 %{button_try_again}"
msgid "Unable to resolve"
msgstr "无法解决"
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr "无法安排æµæ°´çº¿ç«‹å³è¿è¡Œ"
@@ -14233,6 +16642,12 @@ msgstr "撤消"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr "很é—憾,您å‘é€ç»™GitLab的电å­é‚®ä»¶æ— æ³•å¤„ç†ã€‚"
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "未知的"
@@ -14255,17 +16670,29 @@ msgid "Unlock the discussion"
msgstr "解é”讨论"
msgid "Unlock this %{issuableDisplayName}? <strong>Everyone</strong> will be able to comment."
-msgstr "è§£é” %{issuableDisplayName} ? <strong>所有人</strong> 都将å¯ä»¥å‘表评论。"
+msgstr "解é”æ­¤%{issuableDisplayName}å—?解é”åŽ<strong>所有人</strong>都将å¯ä»¥å‘表评论。"
msgid "Unlocked"
-msgstr "已解é”"
+msgstr "未é”定"
-msgid "Unlocks the discussion"
-msgstr "解é”讨论"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
+msgstr ""
msgid "Unresolve discussion"
msgstr "待解决的讨论"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr "å–消作业计划"
@@ -14302,6 +16729,15 @@ msgstr "在项目级别å–消订阅"
msgid "Unsubscribe from %{type}"
msgstr "å–消订阅 %{type}"
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "未验è¯"
@@ -14311,15 +16747,27 @@ msgstr "已是最新"
msgid "Upcoming"
msgstr "å³å°†å¼€å§‹"
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "æ›´æ–°"
-msgid "Update approvers"
-msgstr "更新核准人"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
+msgstr ""
msgid "Update failed"
msgstr "更新失败"
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr "ç«‹å³æ›´æ–°"
@@ -14350,6 +16798,9 @@ msgstr "已更新"
msgid "Updated %{updated_at} by %{updated_by}"
msgstr "由%{updated_by}更新于%{updated_at}"
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "更新中"
@@ -14362,6 +16813,9 @@ msgstr "å‡çº§æ‚¨çš„订阅计划"
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "å‡çº§æ‚¨çš„订阅计划以å¯ç”¨é«˜çº§å…¨å±€æœç´¢ã€‚"
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "å‡çº§æ‚¨çš„订阅计划以å¯ç”¨è´¡çŒ®åº¦åˆ†æžã€‚"
@@ -14408,7 +16862,7 @@ msgid "Uploaded on"
msgstr "上传于"
msgid "Uploading changes to terminal"
-msgstr ""
+msgstr "正在将å˜æ›´å†…容上传到终端"
msgid "Uploads"
msgstr "上传"
@@ -14425,14 +16879,17 @@ msgstr "使用情况"
msgid "Usage ping is not enabled"
msgstr "使用情况检测(usage ping)未å¯ç”¨"
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "使用情况统计"
msgid "UsageQuota|%{help_link_start}Shared runners%{help_link_end} are disabled, so there are no limits set on pipeline usage"
-msgstr ""
+msgstr "%{help_link_start}共享Runner%{help_link_end}å·²ç¦ç”¨ï¼Œæ‰€ä»¥æµæ°´çº¿ä½¿ç”¨æ²¡æœ‰è®¾ç½®é™åˆ¶"
msgid "UsageQuota|Artifacts"
-msgstr ""
+msgstr "产物"
msgid "UsageQuota|Buy additional minutes"
msgstr "è´­ä¹°é¢å¤–分钟数"
@@ -14441,22 +16898,22 @@ msgid "UsageQuota|Current period usage"
msgstr "当å‰å‘¨æœŸä½¿ç”¨é‡"
msgid "UsageQuota|LFS Storage"
-msgstr ""
+msgstr "LFS存储"
msgid "UsageQuota|Packages"
-msgstr ""
+msgstr "软件包"
msgid "UsageQuota|Pipelines"
msgstr "æµæ°´çº¿"
msgid "UsageQuota|Repository"
-msgstr ""
+msgstr "仓库"
msgid "UsageQuota|Storage"
-msgstr ""
+msgstr "存储"
msgid "UsageQuota|This namespace has no projects which use shared runners"
-msgstr ""
+msgstr "此命å空间没有使用共享Runner的项目"
msgid "UsageQuota|Unlimited"
msgstr "æ— é™"
@@ -14474,7 +16931,7 @@ msgid "UsageQuota|Usage since"
msgstr "使用é‡è‡ª"
msgid "UsageQuota|Wiki"
-msgstr ""
+msgstr "Wiki"
msgid "Use %{code_start}::%{code_end} to create a %{link_start}scoped label set%{link_end} (eg. %{code_start}priority::1%{code_end})"
msgstr "使用 %{code_start}::%{code_end} 创建 %{link_start}有范围标签集%{link_end} (例如 %{code_start}priority::1%{code_end})"
@@ -14567,138 +17024,144 @@ msgid "User was successfully updated."
msgstr "用户已æˆåŠŸæ›´æ–°ã€‚"
msgid "UserOnboardingTour|%{activeTour}/%{totalTours}"
-msgstr ""
+msgstr "%{activeTour}/%{totalTours}"
msgid "UserOnboardingTour|%{completed}/%{total} steps completed"
-msgstr ""
+msgstr "%{completed}/%{total}步已完æˆ"
msgid "UserOnboardingTour|%{emphasisStart}Well done!%{emphasisEnd}%{lineBreak}%{lineBreak}That's it for our guided tour, congratulations for making it all the way to the end!%{lineBreak}%{lineBreak}We hope this gave you a good overview of GitLab and how it can help you. We'll now show you how to create your own project and invite your colleagues."
-msgstr ""
+msgstr "%{emphasisStart}太棒了ï¼%{emphasisEnd}%{lineBreak}%{lineBreak}我们的导览之旅到这里就结æŸäº†ï¼Œç¥è´ºæ‚¨å®Œæˆå…¨éƒ¨å¯¼è§ˆå†…容ï¼%{lineBreak}%{lineBreak}我们希望这个导览对您了解GitLab有所帮助。下é¢å°†å‘您展示如何创建自己的项目并将您的åŒäº‹åŠ å…¥é¡¹ç›®ã€‚"
msgid "UserOnboardingTour|Adding other members to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
-msgstr ""
+msgstr "å¯ä»¥é€šè¿‡é¡¹ç›®è®¾ç½®æ¥æ·»åŠ å…¶ä»–æˆå‘˜åˆ°é¡¹ç›®ã€‚点击 %{emphasisStart}设置%{emphasisEnd}。"
msgid "UserOnboardingTour|Alright, that's it for Commits. Let's take a look at the %{emphasisStart}Branches%{emphasisEnd}."
-msgstr ""
+msgstr "好的,æ交就介ç»åˆ°è¿™é‡Œã€‚让我们一起æ¥äº†è§£ä¸€ä¸‹%{emphasisStart}分支%{emphasisEnd}。"
msgid "UserOnboardingTour|Awesome! Now click on %{emphasisStart}Members%{emphasisEnd}."
-msgstr ""
+msgstr "好æžäº†ï¼çŽ°åœ¨ç‚¹å‡» %{emphasisStart}æˆå‘˜%{emphasisEnd}。"
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}Compare%{emphasisEnd} buttons to compare a branch to master."
-msgstr ""
+msgstr "点击任一一个%{emphasisStart}比较%{emphasisEnd}按钮,将分支与分支进行比较。"
msgid "UserOnboardingTour|Click on one of the %{emphasisStart}pipeline IDs%{emphasisEnd} to see the details of a pipeline."
-msgstr ""
+msgstr "点击任一一个%{emphasisStart}æµæ°´çº¿ID%{emphasisEnd}以查看æµæ°´çº¿çš„详细信æ¯ã€‚"
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
+msgstr "点击打开最新æ交æ¥æŸ¥çœ‹è¯¦æƒ…。"
+
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
msgstr ""
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
-msgstr ""
+msgstr "æ交按时间顺åºæ˜¾ç¤ºï¼Œå¹¶å¯é€šè¿‡æ交消æ¯æˆ–分支进行过滤。"
msgid "UserOnboardingTour|Create a project"
-msgstr ""
+msgstr "创建一个新项目"
msgid "UserOnboardingTour|Exit 'Learn GitLab'"
-msgstr ""
+msgstr "退出'学习 GitLab'"
msgid "UserOnboardingTour|Got it"
+msgstr "知é“了"
+
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
msgstr ""
msgid "UserOnboardingTour|Guided GitLab Tour"
-msgstr ""
+msgstr "GitLab导览"
msgid "UserOnboardingTour|Here you can compare the changes of this branch to another one. Changes are divided by files so that it's easier to see what was changed where."
-msgstr ""
+msgstr "在这里,您å¯ä»¥å°†æ­¤åˆ†æ”¯çš„å˜æ›´ä¸Žå¦ä¸€ä¸ªåˆ†æ”¯è¿›è¡Œæ¯”较。å˜æ›´ä¾ç…§æ–‡ä»¶åˆ†ç»„,方便您查看更改的ä½ç½®ã€‚"
msgid "UserOnboardingTour|Here you can create a project from scratch, start with a template or import a repository from other platforms. Whatever you choose, we'll guide you through the process.%{lineBreak}%{lineBreak}Choose a way to create a project and click on %{emphasisStart}Create Project%{emphasisEnd} to progress to the next step."
-msgstr ""
+msgstr "在这里,您å¯ä»¥ä»Žé›¶å¼€å§‹åˆ›å»ºé¡¹ç›®ï¼Œä¹Ÿå¯ä»¥ä»Žæ¨¡æ¿å¼€å§‹æˆ–从其他平å°å¯¼å…¥ä»“库。无论您选择哪ç§æ–¹å¼ï¼Œæˆ‘们都会指导您完æˆæ•´ä¸ªè¿‡ç¨‹ã€‚%{lineBreak}%{lineBreak}请选择创建项目的方法,然åŽå•å‡»%{emphasisStart}创建项目%{emphasisEnd}进入下一步。"
msgid "UserOnboardingTour|Here you can see the breakdown of the pipelines: its stages and jobs in each of the stages and their status.%{lineBreak}%{lineBreak}Our CI/CD pipelines are quite complex, most of our users have fewer and simpler pipelines."
-msgstr ""
+msgstr "在这里您å¯ä»¥çœ‹åˆ°æµæ°´çº¿çš„组æˆï¼šæ‰€æœ‰é˜¶æ®µå’Œæ¯ä¸ªé˜¶æ®µçš„作业åŠå…¶çŠ¶æ€ã€‚%{lineBreak}%{lineBreak}我们的CI/CDæµæ°´çº¿éžå¸¸å¤æ‚,大多数用户拥有更少和更简å•çš„æµæ°´çº¿ã€‚"
msgid "UserOnboardingTour|Here you can see the current members of the project (just you at the moment) and invite new members.%{lineBreak}%{lineBreak}You can invite multiple members at once (existing GitLab users or invite by email) and you can also set their roles and permissions.%{lineBreak}%{lineBreak}Add a few members and click on %{emphasisStart}Add to project%{emphasisEnd} to complete this step."
-msgstr ""
+msgstr "在这里,您å¯ä»¥çœ‹åˆ°é¡¹ç›®çš„当å‰æˆå‘˜(ç›®å‰æœ‰æ‚¨è‡ªå·±)并邀请新æˆå‘˜ã€‚%{lineBreak}%{lineBreak}您å¯ä»¥ä¸€æ¬¡é‚€è¯·å¤šä¸ªæˆå‘˜(现有GitLab用户或通过电å­é‚®ä»¶é‚€è¯·),您也å¯ä»¥è®¾ç½®ä»–们的角色和æƒé™ã€‚%{lineBreak}%{lineBreak}请添加几个æˆå‘˜ï¼Œç„¶åŽå•å‡»%{emphasisStart}添加到项目%{emphasisEnd}以完æˆæ­¤æ­¥éª¤ã€‚"
msgid "UserOnboardingTour|Here you can see what changes were made with this commit, on what branch and if there's a related merge request. The status of the pipeline will also show up if CI/CD is set up.%{lineBreak}%{lineBreak}You can also comment on the lines of code that were changed and start a discussion with your colleagues!"
-msgstr ""
+msgstr "在这里,您å¯ä»¥çœ‹åˆ°æ­¤æ交包å«äº†å“ªäº›æ›´æ”¹ï¼Œåœ¨å“ªä¸ªåˆ†æ”¯ä¸Šä»¥åŠæ˜¯å¦å­˜åœ¨ç›¸å…³çš„åˆå¹¶è¯·æ±‚。如果设置了CI/CD,æµæ°´çº¿çš„状æ€ä¹Ÿä¼šæ˜¾ç¤ºå‡ºæ¥ã€‚%{lineBreak}%{lineBreak}您还å¯ä»¥å¯¹å·²æ›´æ”¹çš„代ç è¡Œè¿›è¡Œè¯„论,并与åŒäº‹å¼€å§‹è®¨è®ºï¼"
msgid "UserOnboardingTour|Here's an overview of branches in the %{emphasisStart}%{projectName}%{emphasisEnd} project. They're split into Active and Stale.%{lineBreak}%{lineBreak}From here, you can create a new merge request, from a branch or compare the branch to any other branch in the project. By default, it will compare it to the master branch."
-msgstr ""
+msgstr "这里是%{emphasisStart}%{projectName}%{emphasisEnd} 项目中分支的概览。分支在此被分类为活跃与éžæ´»è·ƒã€‚%{lineBreak}%{lineBreak}从这个界é¢ï¼Œæ‚¨å¯ä»¥ä»Žåˆ†æ”¯åˆ›å»ºæ–°çš„åˆå¹¶è¯·æ±‚,或者将分支与项目中的任何其他分支进行比较。默认情况下,它会将其与主分支进行比较。"
msgid "UserOnboardingTour|Invite colleagues"
-msgstr ""
+msgstr "邀请åŒäº‹"
msgid "UserOnboardingTour|Issues are great for communicating and keeping track of progess in GitLab. These are all issues that are open in the %{emphasisStart}%{projectName}%{emphasisEnd}.%{lineBreak}%{lineBreak}You can help us improve GitLab by contributing work to issues that are labeled <span class=\"badge color-label accept-mr-label\">Accepting merge requests</span>.%{lineBreak}%{lineBreak}This list can be filtered by labels, milestones, assignees, authors... We'll show you how it looks like when the list is filtered by a label."
-msgstr ""
+msgstr "议题éžå¸¸é€‚åˆåœ¨GitLab中进行沟通和跟踪进展。这些是在%{emphasisStart}%{projectName}%{emphasisEnd}项目中开å¯çš„所有议题。%{lineBreak}%{lineBreak}您å¯ä»¥é€šè¿‡ä¸ºæ ‡è®°ä¸º<span class=\"badge color-label accept-mr-label\">接å—åˆå¹¶è¯·æ±‚</span>的议题æ¥æœªæ”¹è¿›GitLab作出贡献。%{lineBreak}%{lineBreak}此列表å¯ä»¥æŒ‰æ ‡ç­¾ï¼Œé‡Œç¨‹ç¢‘,å—让人,作者进行过滤......我们将å‘您展示列表按标记过滤时的呈现。"
msgid "UserOnboardingTour|Learn GitLab"
-msgstr ""
+msgstr "学习GitLab"
msgid "UserOnboardingTour|Let's take a closer look at a merge request. Click on the title of one."
-msgstr ""
+msgstr "让我们仔细查看åˆå¹¶è¯·æ±‚。点击一个标题。"
msgid "UserOnboardingTour|Let's take a closer look at all the commits. Click on %{emphasisStart}Commits%{emphasisEnd}."
-msgstr ""
+msgstr "让我们仔细查看所有æ交。点击 %{emphasisStart}æ交%{emphasisEnd}。"
msgid "UserOnboardingTour|Let's take a closer look at the repository of this project. Click on %{emphasisStart}Repository%{emphasisEnd}."
-msgstr ""
+msgstr "让我们仔细看看这个项目的仓库。å•å‡»%{emphasisStart}Repository%{emphasisEnd}。"
msgid "UserOnboardingTour|No thanks"
-msgstr ""
+msgstr "ä¸ï¼Œè°¢è°¢"
msgid "UserOnboardingTour|Ok, let's go"
-msgstr ""
+msgstr "好,我们开始å§"
msgid "UserOnboardingTour|Ok, show me"
-msgstr ""
+msgstr "好,请展示"
msgid "UserOnboardingTour|Open one of the issues by clicking on its title."
-msgstr ""
+msgstr "å•å‡»å…¶æ ‡é¢˜æ‰“开任一议题。"
msgid "UserOnboardingTour|Restart this step"
-msgstr ""
+msgstr "é‡æ–°å¼€å§‹æ­¤æ­¥éª¤"
msgid "UserOnboardingTour|Skip this step"
-msgstr ""
+msgstr "跳过此步骤"
msgid "UserOnboardingTour|Sweet! Your project was created is is ready to be used.%{lineBreak}%{lineBreak}You can start adding files to the repository or clone it. One last thing we want to show you is how to invite your colleagues to your new project."
-msgstr ""
+msgstr "好æžäº†ï¼æ‚¨çš„项目已就绪。%{lineBreak}%{lineBreak}您å¯ä»¥å°†æ–‡ä»¶æ·»åŠ åˆ°ä»“库或克隆。我们è¦å±•ç¤ºçš„最åŽä¸€ä»¶äº‹å°±æ˜¯å¦‚何邀请您的åŒäº‹åŠ å…¥æ‚¨çš„新项目。"
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
-msgstr ""
+msgstr "这里是个éžå¸¸æœ‰ç”¨çš„èœå•ï¼Œå¯ä»¥å¿«é€Ÿåˆ›å»ºé—®é¢˜ã€åˆå¹¶è¯·æ±‚ã€ä»£ç ã€é¡¹ç›®å’Œç¾¤ç»„。点击并从“GitLabâ€éƒ¨åˆ†ä¸­é€‰æ‹©â€œæ–°å»ºé¡¹ç›®â€å¼€å§‹ã€‚"
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
-msgstr ""
+msgstr "这就是议题。接下æ¥è®©æˆ‘们进入%{emphasisStart}åˆå¹¶è¯·æ±‚%{emphasisEnd}。 "
msgid "UserOnboardingTour|That's it for merge requests. Now for the finla part of this guided tour - the %{emphasisStart}CI/CD%{emphasisEnd}."
-msgstr ""
+msgstr "åˆå¹¶è¯·æ±‚就介ç»åˆ°è¿™é‡Œã€‚现在为本导览的最åŽéƒ¨åˆ† - %{emphasisStart}CI/CD%{emphasisEnd}。"
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
-msgstr ""
+msgstr "仓库就介ç»åˆ°è¿™é‡Œã€‚接下æ¥æˆ‘们一起æ¥äº†è§£%{emphasisStart}议题%{emphasisEnd}。"
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
-msgstr ""
+msgstr "这里有éžå¸¸å¤šçš„ä¿¡æ¯ï¼Œä½†ä¸ç”¨æ‹…心,我们会一一解释。%{lineBreak}%{lineBreak}在界é¢é¡¶éƒ¨ï¼Œæ‚¨å¯ä»¥çœ‹åˆ°è®®é¢˜çš„状æ€ä»¥åŠå¼€å¯æ—¶é—´å’Œç”±è°æ‰“开。在正下方的是议题æ述,å†ä¸‹é¢æ˜¯å…¶ä»– %{emphasisStart}相关议题%{emphasisEnd}åŠ%{emphasisStart}åˆå¹¶è¯·æ±‚%{emphasisEnd}(如果有的è¯)。然åŽå†ä¸‹é¢æ˜¯%{emphasisStart}讨论区%{emphasisEnd},包å«äº†å¤§éƒ¨åˆ†å…³äºŽè®®é¢˜çš„交æµä¸Žæ²Ÿé€šã€‚%{lineBreak}%{lineBreak}ç•Œé¢å³ä¾§æ˜¯ä¾§è¾¹æ ï¼Œæ‚¨å¯ä»¥åœ¨å…¶ä¸­æŸ¥çœ‹/更改%{emphasisStart}å—让人,里程碑,截止日期,标签,æƒé‡%{emphasisEnd}等。"
msgid "UserOnboardingTour|These are all the CI/CD pipelines we have for our %{emphasisStart}%{projectName}%{emphasisEnd} project.%{lineBreak}%{lineBreak}Here you can see the status of each pipeline, for what commit it's running for, its stages and the status for them."
-msgstr ""
+msgstr "这些是%{emphasisStart}%{projectName}%{emphasisEnd}项目所有的CI/CDæµæ°´çº¿ã€‚%{lineBreak}%{lineBreak}您å¯ä»¥åœ¨è¿™é‡Œçœ‹åˆ°æ¯ä¸€æ¡æµæ°´çº¿çš„状æ€ã€å¯¹åº”çš„æ交ã€é˜¶æ®µåŠå…¶çŠ¶æ€ã€‚"
msgid "UserOnboardingTour|These are all the issues that are available for community contributions. Let's take a closer look at one of them."
-msgstr ""
+msgstr "这些是所有开放社区贡献的议题。让我们仔细看一下其中的一个。"
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
-msgstr ""
+msgstr "这就是对当å‰é¡¹ç›®æ‰€æœ‰åˆå¹¶è¯·æ±‚的概览。与议题概览类似,它å¯ä»¥é€šè¿‡æ ‡è®°ã€é‡Œç¨‹ç¢‘ã€ä½œè€…ã€å—让人等等æ¡ä»¶æ¥è¿‡æ»¤ã€‚"
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14746,6 +17209,12 @@ msgstr "代ç ç‰‡æ®µ"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr "GitLab 中的代ç ç‰‡æ®µå¯ä»¥æ˜¯ç§æœ‰çš„ã€å†…部或公开。"
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr "关注"
@@ -14758,6 +17227,9 @@ msgstr "此用户具有éžå…¬å¼€ä¸ªäººèµ„料设置"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr "此用户未对任何项目åšå‡ºè´¡çŒ®"
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "查看全部"
@@ -14785,6 +17257,9 @@ msgstr "用户å已被使用。"
msgid "Username is available."
msgstr "用户åå¯ç”¨ã€‚"
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "用户"
@@ -14863,11 +17338,14 @@ msgstr "已验è¯"
msgid "Version"
msgstr "版本"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr "查看应用程åº"
msgid "View dependency details for your project"
-msgstr ""
+msgstr "查看您项目的ä¾èµ–详细信æ¯"
msgid "View deployment"
msgstr "查看部署"
@@ -14879,7 +17357,7 @@ msgid "View documentation"
msgstr "查看文档"
msgid "View eligible approvers"
-msgstr "查看符åˆæ¡ä»¶çš„核准人"
+msgstr "查看具备相关资格的核准人"
msgid "View epics list"
msgstr "查看å²è¯—列表"
@@ -14900,7 +17378,7 @@ msgid "View it on GitLab"
msgstr "使用GitLab查看"
msgid "View job"
-msgstr ""
+msgstr "查看作业"
msgid "View job trace"
msgstr "查看作业日志"
@@ -14941,6 +17419,9 @@ msgstr "å¯è§æ€§çº§åˆ«"
msgid "Visibility level:"
msgstr "å¯è§æ€§çº§åˆ«:"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr "å¯è§æ€§ï¼Œé¡¹ç›®åŠŸèƒ½ï¼Œæƒé™"
@@ -14962,17 +17443,29 @@ msgstr "未知"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr "%{stepStart}步骤 1%{stepEnd}. å¤åˆ¶ä»¥ä¸‹è„šæœ¬ï¼š"
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
-msgstr "%{stepStart}步骤 2%{stepEnd}. 把它添加到您的应用程åºçš„æ¯ä¸€é¡µçš„%{headTags}。 "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
+msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
-msgstr "%{stepStart}步骤 3%{stepEnd}. 打开评审应用,并在 %{linkStart}个人访问令牌%{linkEnd}åŽæ供一个个人访问令牌。"
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
+msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
-msgstr "%{stepStart}步骤 4%{stepEnd}. 您现在å¯ä»¥åœ¨è¯„审应用中留下å馈。"
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
+msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
-msgstr "添加以下脚本到您的代ç åŽï¼Œè¿™æ ·å¯ä»¥åœ¨è¯„审应用中直接留下å馈。å馈将自动æ交给此åˆå¹¶è¯·æ±‚的讨论,包括元数æ®ã€‚"
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
+msgstr ""
msgid "VisualReviewApp|Open review app"
msgstr "打开评审应用"
@@ -14980,17 +17473,20 @@ msgstr "打开评审应用"
msgid "VisualReviewApp|Review"
msgstr "评审"
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
-msgstr "在评审应用中进行评审并直接给出å馈æ„è§"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
+msgstr ""
msgid "Vulnerabilities"
+msgstr "æ¼æ´ž"
+
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability Chart"
-msgstr "æ¼æ´žå›¾è¡¨"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
-msgid "Vulnerability List"
-msgstr "æ¼æ´žæ¸…å•"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
+msgstr ""
msgid "Vulnerability|Class"
msgstr "类型"
@@ -15031,6 +17527,9 @@ msgstr "严é‡çº§åˆ«"
msgid "Wait for the source to load to copy it to the clipboard"
msgstr "等待æºåŠ è½½ä»¥å°†å…¶å¤åˆ¶åˆ°å‰ªè´´æ¿"
+msgid "Waiting for performance data"
+msgstr "等待性能数æ®"
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "æƒé™ä¸è¶³ã€‚如需查看相关数æ®ï¼Œè¯·å‘管ç†å‘˜ç”³è¯·æƒé™ã€‚"
@@ -15046,11 +17545,8 @@ msgstr "我们无法确定删除å²è¯—的路径"
msgid "We could not determine the path to remove the issue"
msgstr "我们无法确定删除议题的路径"
-msgid "We couldn't find any results matching"
-msgstr "我们找ä¸åˆ°ä»»ä½•åŒ¹é…的结果"
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
-msgstr "我们创建了一个简短的指å—,帮助您了解GitLab的基础知识以åŠå®ƒå°†å¦‚何帮助您更好地完æˆå·¥ä½œã€‚它应该åªéœ€è¦å‡ åˆ†é’Ÿã€‚您将å—到两ç§ç±»åž‹çš„帮助的指导,å¯é€šè¿‡é¢œè‰²è¯†åˆ«ã€‚"
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
+msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
msgstr "我们在%{humanized_resource_name}检测到潜在滥用行为。请输入此reCAPTCHA验è¯ç å¹¶ç»§ç»­ã€‚"
@@ -15103,6 +17599,9 @@ msgstr "欢迎æ¥åˆ°Guided GitLab Tour"
msgid "Welcome to your Issue Board!"
msgstr "欢迎使用议题看æ¿"
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "当Runner被é”定时,ä¸èƒ½å°†å…¶åˆ†é…给其他项目"
@@ -15116,12 +17615,18 @@ msgid "When this merge request is accepted"
msgid_plural "When these merge requests are accepted"
msgstr[0] "当åˆå¹¶è¯·æ±‚被接å—æ—¶"
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr "当:"
msgid "White helpers give contextual information."
msgstr "白色助手给出了上下文信æ¯ã€‚"
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "哪些人å¯ä»¥çœ‹åˆ°è¿™ä¸ªç¾¤ç»„?"
@@ -15131,6 +17636,9 @@ msgstr "哪些人å¯ä»¥çœ‹åˆ°è¿™ä¸ªç¾¤ç»„?"
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr "Wikiå·²æˆåŠŸæ›´æ–°ã€‚"
@@ -15203,15 +17711,9 @@ msgstr "文档"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "è¦é“¾æŽ¥åˆ°(æ–°)页é¢ï¼Œåªéœ€é”®å…¥ %{link_example}"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "如何设置"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "æ示:您å¯ä»¥æŒ‡å®šæ–°æ–‡ä»¶çš„完整路径。我们将自动创建完整的目录。"
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "æ–° Wiki 页é¢"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "确定è¦åˆ é™¤æ­¤é¡µé¢å—?"
@@ -15227,20 +17729,17 @@ msgstr "有人在åŒä¸€æ—¶é—´ç¼–辑了页é¢ã€‚请检查 %{page_link} 并确ä¿æ
msgid "WikiPageConflictMessage|the page"
msgstr "这一页"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "创建 %{page_title}"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "æ›´æ–° %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
-msgstr "页é¢æ ‡è¯†ä¸²"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr "在这里编写您的内容或将文件拖动到此处..."
-msgid "Wiki|Create Page"
-msgstr "创建页é¢"
+msgid "Wiki|Create New Page"
+msgstr ""
msgid "Wiki|Create page"
msgstr "创建页é¢"
@@ -15260,6 +17759,9 @@ msgstr "新页é¢"
msgid "Wiki|Page history"
msgstr "页é¢åŽ†å²"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "页é¢ç‰ˆæœ¬"
@@ -15290,6 +17792,9 @@ msgstr "编辑"
msgid "Write a comment or drag your files here…"
msgstr "在此写评论或拖动您的文件到这里…"
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr "å·²å…许写入æƒé™"
@@ -15315,7 +17820,7 @@ msgid "Yesterday"
msgstr "昨天"
msgid "You"
-msgstr "当å‰"
+msgstr "您"
msgid "You are an admin, which means granting access to <strong>%{client_name}</strong> will allow them to interact with GitLab as an admin as well. Proceed with caution."
msgstr "您是一å管ç†å‘˜ï¼Œè¿™æ„味ç€æŽˆäºˆå¯¹ <strong>%{client_name}</strong> 访问æƒé™å°†å…许他们作为管ç†å‘˜ä¸ŽGitLab进行交互。请谨慎æ“作。"
@@ -15326,6 +17831,9 @@ msgstr "您正在å°è¯•åˆ é™¤å…ˆå‰å·²æ›´æ–°çš„文件。"
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr "您正在å°è¯•æ›´æ–°çš„文件自您开始编辑以æ¥å·²ç»å‘生更改。"
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr "您已连接到PrometheusæœåŠ¡å™¨ï¼Œä½†å½“å‰æ²¡æœ‰æ•°æ®å¯æ˜¾ç¤ºã€‚"
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr "您将删除%{group_name},这也将删除其所有å­ç¾¤ç»„和项目。删除的群组无法æ¢å¤ï¼ç¡®å®šç»§ç»­ï¼Ÿ"
@@ -15380,11 +17888,14 @@ msgstr "您å¯ä»¥è¯·æ±‚加入这些群组,以便为群组项目åšå‡ºè´¡çŒ®ã€‚
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "å¯ä»¥è½»æ¾åœ°åœ¨Kubernetes集群上安装Runner。 %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
-msgstr "您å¯ä»¥é‚€è¯·ä¸€ä¸ªæ–°æˆå‘˜æˆ–å¦ä¸€ä¸ªç¾¤ç»„加入<strong>%{project_name}</strong>。"
+msgstr "邀请新æˆå‘˜æˆ–å¦ä¸€ä¸ªç¾¤ç»„加入<strong>%{project_name}</strong>。"
msgid "You can invite a new member to <strong>%{project_name}</strong>."
-msgstr "您å¯ä»¥é‚€è¯·ä¸€ä¸ªæ–°æˆå‘˜åŠ å…¥<strong>%{project_name}</strong>。"
+msgstr "邀请新æˆå‘˜åŠ å…¥<strong>%{project_name}</strong>。"
msgid "You can invite another group to <strong>%{project_name}</strong>."
msgstr "您å¯ä»¥é‚€è¯·å¦ä¸€ä¸ªç¾¤ç»„加入<strong>%{project_name}</strong>。"
@@ -15404,8 +17915,11 @@ msgstr "åªèƒ½åœ¨åˆ†æ”¯ä¸Šæ·»åŠ æ–‡ä»¶"
msgid "You can only edit files when you are on a branch"
msgstr "åªèƒ½åœ¨åˆ†æ”¯ä¸Šç¼–辑文件"
-msgid "You can only merge once the items above are resolved"
-msgstr "åªæœ‰è§£å†³äº†ä¸Šè¿°é¡¹ç›®åŽæ‰èƒ½åˆå¹¶"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
+msgstr ""
msgid "You can only transfer the project to namespaces you manage."
msgstr "您åªèƒ½å°†é¡¹ç›®è½¬ç§»åˆ°æ‚¨ç®¡ç†çš„命å空间。"
@@ -15425,6 +17939,9 @@ msgstr "您å¯ä»¥æŒ‡å®šæ¯ä¸ªç¾¤ç»„或æ¯ä¸ªé¡¹ç›®çš„通知级别。"
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "您也å¯ä»¥é€šè¿‡%{linkStart}Lint%{linkEnd}测试.gitlab-ci.yml."
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr "您无法使用被ç¦ç”¨ç”¨æˆ·çš„身份"
@@ -15446,9 +17963,6 @@ msgstr "您ä¸èƒ½å†™å…¥è¿™ä¸ªåªè¯»çš„ GitLab 实例。"
msgid "You could not create a new trigger."
msgstr "您无法创建新的触å‘器。"
-msgid "You could not take ownership of trigger."
-msgstr "你无法å–得触å‘器的所有æƒã€‚"
-
msgid "You do not have any subscriptions yet"
msgstr "您当å‰å°šæœªè®¢é˜…任何计划"
@@ -15476,6 +17990,18 @@ msgstr "您没有任何授æƒçš„应用"
msgid "You don't have any deployments right now."
msgstr "您现在没有任何部署。"
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr "你已被授予 %{access_level} 访问 %{source_link} %{source_type} çš„æƒé™ã€‚"
@@ -15500,6 +18026,12 @@ msgstr "你还没有添加任何核准人。 请添加用户或群组。"
msgid "You have reached your project limit"
msgstr "您已达到项目数é‡é™åˆ¶"
+msgid "You haven't added any issues to your project yet"
+msgstr "您尚未å‘项目添加任何议题"
+
+msgid "You haven't selected any issues yet"
+msgstr "您尚未选择任何议题"
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr "ä½ å·²ç»ä»Žâ€œ%{membershipable_human_name}†%{source_type}退出。"
@@ -15590,6 +18122,9 @@ msgstr "您将自动从当å‰å¸æˆ·é€€å‡ºã€‚"
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "需è¦ä½¿ç”¨ä¸åŒçš„分支æ‰èƒ½è¿›è¡Œæœ‰æ•ˆçš„比较。"
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr "您ä¸èƒ½ç›´æŽ¥å¯¹æ­¤é¡¹ç›®è¿›è¡Œæ›´æ”¹ã€‚此项目的派生项目已ç»åˆ›å»ºï¼Œæ‚¨å¯ä»¥åœ¨æ´¾ç”Ÿé¡¹ç›®ä¸­è¿›è¡Œæ›´æ”¹ï¼Œä»¥ä¾¿æ交åˆå¹¶è¯·æ±‚。"
@@ -15615,13 +18150,13 @@ msgid "YouTube"
msgstr "YouTube"
msgid "Your Commit Email will be used for web based operations, such as edits and merges."
-msgstr ""
+msgstr "您的æ交电å­é‚®ä»¶å°†ç”¨äºŽåŸºäºŽwebçš„æ“作,例如编辑与åˆå¹¶ã€‚"
msgid "Your Conversational Development Index gives an overview of how you are using GitLab from a feature perspective. View how you compare with other organizations, discover features you are not using, and learn best practices through blog posts and white papers."
msgstr "会è¯å¼€å‘指数从功能角度上展现了GitLab的使用情况。您å¯ä»¥æŸ¥çœ‹ä¸Žå…¶ä»–组织的比较,探索未使用的功能,并通过åšå®¢æ–‡ç« å’Œç™½çš®ä¹¦äº†è§£æœ€ä½³å®žè·µã€‚"
msgid "Your Default Notification Email will be used for account notifications if a %{openingTag}group-specific email address%{closingTag} is not set."
-msgstr ""
+msgstr "如果没有设置%{openingTag}群组特定的电å­é‚®ä»¶åœ°å€%{closingTag} ,您的默认通知电å­é‚®ä»¶å°†ç”¨äºŽå¸æˆ·é€šçŸ¥ã€‚"
msgid "Your GPG keys (%{count})"
msgstr "您的GPG密钥 (%{count})"
@@ -15629,8 +18164,11 @@ msgstr "您的GPG密钥 (%{count})"
msgid "Your Groups"
msgstr "您的群组"
+msgid "Your New Personal Access Token"
+msgstr "您的新个人访问令牌"
+
msgid "Your Primary Email will be used for avatar detection."
-msgstr ""
+msgstr "您的主电å­é‚®ä»¶å°†ç”¨äºŽå¤´åƒæ£€æµ‹ã€‚"
msgid "Your Projects (default)"
msgstr "您的项目 (默认值)"
@@ -15639,13 +18177,13 @@ msgid "Your Projects' Activity"
msgstr "您的项目动æ€"
msgid "Your Public Email will be displayed on your public profile."
-msgstr ""
+msgstr "您的公共电å­é‚®ä»¶å°†åœ¨æ‚¨çš„公开信æ¯ä¸­æ˜¾ç¤ºã€‚"
msgid "Your SSH keys (%{count})"
msgstr "您的SSH密钥(%{count})"
-msgid "Your Todos"
-msgstr "您的待办事项"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr "您的 U2F 设备没有å‘é€æœ‰æ•ˆçš„ JSON å“应。"
@@ -15716,6 +18254,9 @@ msgstr "您的新 SCIM 令牌"
msgid "Your new personal access token has been created."
msgstr "您的新个人访问令牌已创建。"
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr "您的密ç é‡ç½®ä»¤ç‰Œå·²è¿‡æœŸã€‚"
@@ -15728,12 +18269,21 @@ msgstr "您的项目"
msgid "Your request for access has been queued for review."
msgstr "您的访问请求已进入审核队列。"
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "已删除的用户"
msgid "added %{created_at_timeago}"
msgstr "创建于 %{created_at_timeago}"
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "å‰"
@@ -15749,6 +18299,9 @@ msgstr "已与该群组分享"
msgid "among other things"
msgstr "åŠå…¶ä»–功能"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr "添加新附件"
@@ -15767,6 +18320,12 @@ msgstr "如果个人项目具有容器镜åƒåº“标签,则无法更改。"
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr "除éžæ‰€æœ‰åŸŸéƒ½å…·æœ‰TLSè¯ä¹¦ï¼Œå¦åˆ™æ— æ³•å¯ç”¨"
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr "ä¸ä¼šé˜»å¡žå…¶ä»–"
@@ -15776,6 +18335,9 @@ msgstr "ä¸èƒ½ä»¥æ–œçº¿å¼€å¤´æˆ–转到仓库以外目录。"
msgid "cannot itself be blocked"
msgstr "本身ä¸èƒ½è¢«é˜»å¡ž"
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}了解更多有关容器安全扫æçš„ä¿¡æ¯ %{linkEndTag}"
@@ -15836,7 +18398,7 @@ msgid "ciReport|%{reportType} %{status} detected no vulnerabilities"
msgstr "%{reportType} %{status} 未å‘现安全æ¼æ´ž"
msgid "ciReport|%{reportType} %{status} detected no vulnerabilities for the source branch only"
-msgstr "%{reportType}%{status}检测到æºåˆ†æ”¯æ— å®‰å…¨æ¼æ´ž"
+msgstr "%{reportType}%{status}未检测到仅在æºåˆ†æ”¯ä¸Šå­˜åœ¨çš„安全æ¼æ´ž"
msgid "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerability"
msgid_plural "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerabilities"
@@ -15875,6 +18437,9 @@ msgstr "所有报告类型"
msgid "ciReport|All severities"
msgstr "全部严é‡çº§åˆ«"
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr "在新分支中自动应用补ä¸"
+
msgid "ciReport|Class"
msgstr "ç±»"
@@ -15893,12 +18458,12 @@ msgstr "容器安全扫æ"
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "容器扫æå¯ä»¥æ£€æµ‹Dockeré•œåƒä¸­ä¸­å·²çŸ¥çš„安全æ¼æ´žã€‚"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
+msgstr "创建一个åˆå¹¶è¯·æ±‚æ¥æ‰§è¡Œè¿™ä¸ªè§£å†³æ–¹æ¡ˆï¼Œæˆ–者下载并手动应用补ä¸ã€‚"
+
msgid "ciReport|Create issue"
msgstr "创建议题"
-msgid "ciReport|Create merge request"
-msgstr "创建åˆå¹¶è¯·æ±‚"
-
msgid "ciReport|DAST"
msgstr "DAST"
@@ -15914,11 +18479,11 @@ msgstr "ä¾èµ–项扫æ"
msgid "ciReport|Description"
msgstr "说明"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
-msgstr "下载并应用此修补程åºä»¥ä¿®å¤æ­¤æ¼æ´žã€‚"
+msgid "ciReport|Download patch to resolve"
+msgstr "下载补ä¸ä»¥è§£å†³"
-msgid "ciReport|Download patch"
-msgstr "下载补ä¸"
+msgid "ciReport|Download the patch to apply it manually"
+msgstr "下载补ä¸ä»¥æ‰‹åŠ¨åº”用"
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
msgstr "动æ€åº”用程åºå®‰å…¨æµ‹è¯•ï¼ˆDAST)å¯æ£€æµ‹Web应用程åºä¸­çš„已知æ¼æ´žã€‚"
@@ -15938,31 +18503,14 @@ msgstr "标识符"
msgid "ciReport|Image"
msgstr "é•œåƒ"
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr "通过创建åˆå¹¶è¯·æ±‚æ¥å®žçŽ°æ­¤è§£å†³æ–¹æ¡ˆ"
-
msgid "ciReport|Instances"
msgstr "实例"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr "通过创建议题æ¥è°ƒæŸ¥æ­¤æ¼æ´ž"
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "了解有关安全报告(Alpha)的更多信æ¯ã€‚"
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "许å¯è¯ç®¡ç†ä»…检测到æºåˆ†æ”¯çš„%d个许å¯è¯"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "许å¯è¯ç®¡ç†æ£€æµ‹åˆ°%d个新的许å¯è¯"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "许å¯è¯ç®¡ç†ä»…未检测到æºåˆ†æ”¯ä¸Šçš„许å¯è¯"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "许å¯è¯ç®¡ç†æœªæ£€æµ‹åˆ°æ–°çš„许å¯è¯"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr "了解更多关于与安全报告交互的信æ¯"
msgid "ciReport|Links"
msgstr "链接"
@@ -15988,6 +18536,9 @@ msgstr "性能指标无å˜åŒ–"
msgid "ciReport|Performance metrics"
msgstr "性能指标"
+msgid "ciReport|Resolve with merge request"
+msgstr "通过åˆå¹¶è¯·æ±‚解决"
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16046,11 +18597,14 @@ msgstr[0] "已用于 %{packagesString} 和 %{lastPackage}"
msgid "ciReport|View full report"
msgstr "查看完整报告"
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr "评论 %{link_to_project}"
msgid "commit %{commit_id}"
-msgstr ""
+msgstr "æ交 %{commit_id}"
msgid "confidence|Confirmed"
msgstr "已确认"
@@ -16088,6 +18642,9 @@ msgstr "连接中"
msgid "could not read private key, is the passphrase correct?"
msgstr "无法读å–ç§é’¥ï¼Œå¯†ç çŸ­è¯­æ˜¯å¦æ­£ç¡®ï¼Ÿ"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr "自定义"
@@ -16101,8 +18658,11 @@ msgstr[0] "天"
msgid "deleted"
msgstr "已删除"
-msgid "deploy token"
-msgstr "部署令牌"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
msgid "detached"
msgstr "已游离"
@@ -16110,10 +18670,6 @@ msgstr "已游离"
msgid "disabled"
msgstr "å·²ç¦ç”¨"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] "讨论已解决"
-
msgid "done"
msgstr "完æˆ"
@@ -16121,17 +18677,29 @@ msgid "draft"
msgid_plural "drafts"
msgstr[0] "è‰ç¨¿"
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr "此元素并éžç¾¤ç»„层级"
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "å·²å¯ç”¨"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr "加密:必须是 :requiredã€:optional 或 :migrating 之一"
-msgid "epic"
-msgstr "å²è¯—"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
+msgstr ""
msgid "error"
msgstr "错误"
@@ -16175,6 +18743,9 @@ msgstr "群组"
msgid "has already been taken"
msgstr "å·²ç»è¢«ä½¿ç”¨"
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "此处"
@@ -16207,7 +18778,7 @@ msgid "invalid milestone state `%{state}`"
msgstr "æ— æ•ˆçš„é‡Œç¨‹ç¢‘çŠ¶æ€ `%{state}`"
msgid "is an invalid IP address range"
-msgstr ""
+msgstr "是无效的 IP 地å€èŒƒå›´"
msgid "is enabled."
msgstr "å·²å¯ç”¨ã€‚"
@@ -16218,21 +18789,21 @@ msgstr "因下游é”定而无效"
msgid "is invalid because there is upstream lock"
msgstr "因上游é”定而无效"
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "ä¸æ˜¯æœ‰æ•ˆçš„X509è¯ä¹¦ã€‚"
msgid "is not an email you own"
msgstr "ä¸æ˜¯æ‚¨è‡ªå·±çš„电å­é‚®ä»¶"
-msgid "is out of the hierarchy of the Group owning the template"
-msgstr "ä¸å±žäºŽæ‹¥æœ‰æ¨¡æ¿çš„群组层次结构"
+msgid "is too long (maximum is 1000 entries)"
+msgstr ""
msgid "issue"
msgstr "议题"
-msgid "issue boards"
-msgstr "议题看æ¿"
-
msgid "it is stored externally"
msgstr "它是外部存储的"
@@ -16257,15 +18828,24 @@ msgstr "最新版本"
msgid "leave %{group_name}"
msgstr "退出%{group_name}"
-msgid "license management"
-msgstr "许å¯è¯ç®¡ç†"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "被 %{path_lock_user_name} 在 %{created_at} é”定"
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr "手动"
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "åˆå¹¶è¯·æ±‚"
@@ -16285,6 +18865,15 @@ msgstr "%{commitCount} 将添加到 %{targetBranch}。"
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr "1个åˆå¹¶æ交"
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "请æ¢å¤æ­¤åˆ†æ”¯æˆ–使用其他的 %{missingBranchName} 分支"
@@ -16301,10 +18890,10 @@ msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasis
msgstr "%{metricsLinkStart} 内存 %{metricsLinkEnd} å ç”¨ %{emphasisStart} æ— å˜åŒ– %{emphasisEnd}, ä¿æŒåœ¨ %{memoryFrom}MB"
msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
-msgstr ""
+msgstr "已添加到åˆå¹¶åˆ—车,当å‰åœ¨ç¬¬ %{mergeTrainPosition} ä½"
msgid "mrWidget|Added to the merge train by"
-msgstr ""
+msgstr "已被添加到åˆå¹¶åˆ—车,添加者:"
msgid "mrWidget|Allows commits from members who can merge to the target branch"
msgstr "å…许具有åˆå¹¶åˆ°ç›®æ ‡åˆ†æ”¯æƒé™çš„æˆå‘˜æ交"
@@ -16397,7 +18986,7 @@ msgid "mrWidget|Merge failed."
msgstr "åˆå¹¶å¤±è´¥ã€‚"
msgid "mrWidget|Merge failed: %{mergeError}. Please try again."
-msgstr ""
+msgstr "åˆå¹¶å¤±è´¥: %{mergeError}. 请å†è¯•ä¸€æ¬¡ã€‚"
msgid "mrWidget|Merge locally"
msgstr "本地åˆå¹¶"
@@ -16408,6 +18997,9 @@ msgstr "åˆå¹¶è¯·æ±‚已核准。"
msgid "mrWidget|Merged by"
msgstr "åˆå¹¶è€…:"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr "无需核准"
@@ -16436,11 +19028,14 @@ msgid "mrWidget|Refreshing now"
msgstr "ç«‹å³åˆ·æ–°"
msgid "mrWidget|Remove from merge train"
-msgstr ""
+msgstr "从åˆå¹¶åˆ—车中移除"
msgid "mrWidget|Request to merge"
msgstr "请求åˆå¹¶"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "解决冲çª"
@@ -16475,10 +19070,10 @@ msgid "mrWidget|The source branch HEAD has recently changed. Please reload the p
msgstr "æºåˆ†æ”¯HEAD最近已更改。请在é‡æ–°åˆå¹¶ä¹‹å‰é‡æ–°åŠ è½½é¡µé¢å¹¶æŸ¥çœ‹æ›´æ”¹"
msgid "mrWidget|The source branch has been deleted"
-msgstr "æºåˆ†æ”¯å·²è¢«åˆ é™¤"
+msgstr "æºåˆ†æ”¯å·²åˆ é™¤"
msgid "mrWidget|The source branch is %{commitsBehindLinkStart}%{commitsBehind}%{commitsBehindLinkEnd} the target branch"
-msgstr "æºåˆ†æ”¯æ˜¯æ¯”目标分支%{commitsBehindLinkStart}%{commitsBehind}%{commitsBehindLinkEnd}"
+msgstr "æºåˆ†æ”¯æ¯”目标分支%{commitsBehindLinkStart}%{commitsBehind}%{commitsBehindLinkEnd}"
msgid "mrWidget|The source branch is being deleted"
msgstr "æºåˆ†æ”¯æ­£åœ¨åˆ é™¤"
@@ -16492,8 +19087,8 @@ msgstr "æºåˆ†æ”¯å°†ä¸ä¼šè¢«åˆ é™¤"
msgid "mrWidget|There are merge conflicts"
msgstr "存在åˆå¹¶å†²çª"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "存在尚未解决的讨论。请先解决这些讨论。"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr "此功能是从目标分支åˆå¹¶åˆ°æºåˆ†æ”¯çš„更改。您无法使用此功能,因为æºåˆ†æ”¯å—到ä¿æŠ¤ã€‚"
@@ -16504,9 +19099,21 @@ msgstr "该åˆå¹¶è¯·æ±‚未能自动åˆå¹¶"
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "该åˆå¹¶è¯·æ±‚正在被åˆå¹¶"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "该项目已存档,ç¦æ­¢å†™å…¥"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "ä¸å…许直接编辑此项目。请派生(fork)åŽè¿›è¡Œæ›´æ”¹ã€‚"
@@ -16516,6 +19123,9 @@ msgstr "您现在å¯ä»¥åˆ é™¤æºåˆ†æ”¯"
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "æ­¤åˆå¹¶è¯·æ±‚å¯ä»¥æ‰‹åŠ¨åˆå¹¶ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹"
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "分支ä¸å­˜åœ¨"
@@ -16526,13 +19136,13 @@ msgid "mrWidget|into"
msgstr "å…¥"
msgid "mrWidget|to be added to the merge train when the pipeline succeeds"
-msgstr ""
+msgstr "æµæ°´çº¿æˆåŠŸæ—¶æ·»åŠ åˆ°åˆå¹¶åˆ—车"
msgid "mrWidget|to be merged automatically when the pipeline succeeds"
msgstr "æµæ°´çº¿æˆåŠŸæ—¶è‡ªåŠ¨åˆå¹¶"
msgid "mrWidget|to start a merge train when the pipeline succeeds"
-msgstr ""
+msgstr "æµæ°´çº¿æˆåŠŸæ—¶å¯åŠ¨åˆå¹¶åˆ—车"
msgid "must be greater than start date"
msgstr "必须大于开始日期"
@@ -16541,7 +19151,7 @@ msgid "n/a"
msgstr "ä¸é€‚用"
msgid "needs to be between 10 minutes and 1 month"
-msgstr "需è¦åœ¨10分钟到1个月之间"
+msgstr ""
msgid "new merge request"
msgstr "新建åˆå¹¶è¯·æ±‚"
@@ -16549,9 +19159,15 @@ msgstr "新建åˆå¹¶è¯·æ±‚"
msgid "no contributions"
msgstr "无贡献"
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr "æ— "
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "通知邮件"
@@ -16564,8 +19180,8 @@ msgstr "%{item}, %{nextItem}"
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr "%{item},和 %{lastItem}"
-msgid "or"
-msgstr "或"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16578,8 +19194,11 @@ msgstr[0] "上级"
msgid "password"
msgstr "密ç "
-msgid "personal access token"
-msgstr "个人访问令牌"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16598,12 +19217,18 @@ msgid "project"
msgid_plural "projects"
msgstr[0] "项目"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr "å¿«æ·æ“作"
msgid "register"
msgstr "注册"
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "剩余"
@@ -16616,6 +19241,9 @@ msgstr "删除截止日期"
msgid "remove weight"
msgstr "移除æƒé‡"
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr "渲染差异"
@@ -16701,15 +19329,37 @@ msgstr "语法ä¸æ­£ç¡®"
msgid "this document"
msgstr "此文档"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "帮助您的贡献者进行有效沟通ï¼"
+msgid "to list"
+msgstr "到列表中"
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr "已触å‘"
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr "已更新"
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "用户å"
@@ -16719,11 +19369,14 @@ msgstr "使用 Kubernetes 集群æ¥éƒ¨ç½²ä»£ç ï¼"
msgid "verify ownership"
msgstr "验è¯æ‰€æœ‰æƒ"
+msgid "version %{versionIndex}"
+msgstr "版本 %{versionIndex}"
+
msgid "via %{closed_via}"
-msgstr ""
+msgstr "通过%{closed_via}"
msgid "via merge request %{link}"
-msgstr ""
+msgstr "通过åˆå¹¶è¯·æ±‚%{link}"
msgid "view it on GitLab"
msgstr "使用GitLab查看"
@@ -16734,12 +19387,18 @@ msgstr "查看blob"
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr "为忽略添加评论或原因"
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr "添加评论并忽略"
msgid "vulnerability|Dismiss vulnerability"
msgstr "忽略æ¼æ´ž"
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr "撤销忽略"
@@ -16751,7 +19410,7 @@ msgstr "å…± %{additions} æ¡æ–°å¢ž, %{deletions} æ¡åˆ é™¤."
msgid "within %d minute "
msgid_plural "within %d minutes "
-msgstr[0] "在 %d 分钟内 "
+msgstr[0] "在%d分钟内"
msgid "yaml invalid"
msgstr "yaml无效"
diff --git a/locale/zh_HK/gitlab.po b/locale/zh_HK/gitlab.po
index 14b7552a46e..e1050515e4d 100644
--- a/locale/zh_HK/gitlab.po
+++ b/locale/zh_HK/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: zh-HK\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:41\n"
+"PO-Revision-Date: 2019-09-24 10:20\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr "請登入您的帳戶"
@@ -27,6 +30,12 @@ msgstr " 您需è¦åœ¨ %{grace_period_deadline} 之å‰åŸ·è¡Œæ­¤æ“作。"
msgid " and"
msgstr " 和"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
msgstr[0] " é™ä½Ž %d 點"
@@ -38,12 +47,18 @@ msgstr[0] " æ高 %d 分"
msgid " or "
msgstr "或"
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
msgstr ""
msgid " or <#issue id>"
msgstr "或 <#issue id>"
+msgid " or references (e.g. path/to/project!merge_request_id)"
+msgstr ""
+
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d 則留言"
@@ -56,6 +71,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] "è½å¾Œ %d 個æ交"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+
msgid "%d commits"
msgstr "%d 個æ交"
@@ -75,6 +94,10 @@ msgid "%d fixed test result"
msgid_plural "%d fixed test results"
msgstr[0] "%d 個已修復測試çµæžœ"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d 個議題"
@@ -99,10 +122,18 @@ msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d 指標"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d 個暫存變更"
@@ -118,13 +149,13 @@ msgstr[0] "為æ高é é¢åŠ è¼‰é€Ÿåº¦åŠæ€§èƒ½ï¼Œå·²çœç•¥äº† %s 次æ交。"
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} 和 %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName} 的討論"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "ç”± %{commit_author_link} æ交於 %{commit_timeago}"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -134,6 +165,9 @@ msgstr[0] "éœ€è¦ %{count} 個由 %{name} 的批准"
msgid "%{count} approvals from %{name}"
msgstr "éœ€è¦ %{count} 個由 %{name} 的批准"
+msgid "%{count} files touched"
+msgstr ""
+
msgid "%{count} more"
msgstr "還有 %{count} 項"
@@ -154,12 +188,24 @@ msgid "%{count} pending comment"
msgid_plural "%{count} pending comments"
msgstr[0] "%{count} 個待處ç†è©•è«–"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
msgstr "已刪除 %{filePath}"
@@ -175,6 +221,9 @@ msgstr "%{group_docs_link_start}群組%{group_docs_link_end}å…許您管ç†ã€å
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "將會移除 %{issuableType}ï¼ç¢ºå®šï¼Ÿ"
@@ -190,10 +239,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -202,6 +251,9 @@ msgstr "%{loadingIcon} 開始"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} 被使用者 %{lock_user_id} 鎖定"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -262,6 +314,9 @@ msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files} 個檔案"
@@ -281,9 +336,21 @@ msgstr "%{unstaged} 個未暫存和 %{staged} 個已暫存變更"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}了解更多%{usage_ping_link_end} 關於與GitLab Inc.共享的信æ¯"
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -293,6 +360,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -303,18 +373,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "+ %{count} 以上"
msgid "+ %{moreCount} more"
msgstr "+ %{moreCount} 更多"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -402,9 +484,6 @@ msgstr ""
msgid "2FA"
msgstr "é›™é‡èªè­‰"
-msgid "2FA enabled"
-msgstr "已啟用雙é‡èªè­‰"
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -453,6 +532,9 @@ msgstr ""
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr ""
@@ -489,6 +571,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -525,6 +610,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr ""
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "一個有存å–原始分支權é™çš„使用者,é¸æ“‡äº†æ­¤é …ç›®"
@@ -534,6 +622,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr ""
@@ -588,6 +679,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "帳戶"
@@ -606,6 +757,9 @@ msgstr ""
msgid "Active"
msgstr "啟用"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr ""
@@ -615,12 +769,19 @@ msgstr "活動"
msgid "Add"
msgstr "增加"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+
msgid "Add CHANGELOG"
msgstr "新增 CHANGELOG"
msgid "Add CONTRIBUTING"
msgstr "新增 CONTRIBUTING"
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr ""
@@ -633,12 +794,27 @@ msgstr "增加 Kubernetes å¢é›†"
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr "å° %{noteable_name} 新增一般留言。"
@@ -657,9 +833,6 @@ msgstr "新增表格"
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr "新增待辦事項"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr ""
@@ -669,6 +842,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr "新增批准人"
@@ -690,6 +866,9 @@ msgstr ""
msgid "Add image comment"
msgstr "增加圖片留言"
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -708,12 +887,21 @@ msgstr ""
msgid "Add new directory"
msgstr "添加新目錄"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr "增加或減少所花時間"
msgid "Add reaction"
msgstr ""
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -726,8 +914,8 @@ msgstr ""
msgid "Add to review"
msgstr ""
-msgid "Add todo"
-msgstr "增加待辦事項"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr ""
@@ -741,9 +929,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr ""
@@ -759,8 +965,17 @@ msgstr "增加"
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
-msgstr "新增待辦事項。"
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "管ç†å€åŸŸ"
@@ -795,6 +1010,9 @@ msgstr "åœæ­¢ä»»å‹™å¤±æ•—"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "您將åœæ­¢æ‰€æœ‰ä»»å‹™ï¼Œé€™å°‡æœƒæš«åœæ‰€æœ‰æ­£åœ¨é‹è¡Œçš„任務。"
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -843,6 +1061,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -937,6 +1179,12 @@ msgid "Alert"
msgid_plural "Alerts"
msgstr[0] "æ示"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -946,9 +1194,15 @@ msgstr "全部"
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "所有改變都已經æ交"
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -967,9 +1221,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr "所有待辦事項都標記為已完æˆã€‚"
-
msgid "All users"
msgstr "所有使用者"
@@ -1003,6 +1254,12 @@ msgstr "å…許在 Asciidoc 文件中渲染 PlantUML 圖片"
msgid "Allow requests to the local network from hooks and services."
msgstr "å…許來自鉤å­å’Œæœå‹™çš„å°æœ¬åœ°ç¶²çµ¡çš„請求。"
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1015,6 +1272,9 @@ msgstr ""
msgid "Allow users to request access if visibility is public or internal."
msgstr ""
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1027,13 +1287,7 @@ msgstr ""
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr ""
-msgid "Alternate support URL for help page"
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr ""
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
@@ -1048,7 +1302,7 @@ msgstr ""
msgid "An error has occurred"
msgstr ""
-msgid "An error occurred adding a draft to the discussion."
+msgid "An error occurred adding a draft to the thread."
msgstr ""
msgid "An error occurred adding a new draft."
@@ -1108,6 +1362,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1150,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "讀å–專案時發生錯誤"
@@ -1195,10 +1455,10 @@ msgstr ""
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
+msgid "An error occurred while rendering preview broadcast message"
msgstr ""
-msgid "An error occurred while rendering preview broadcast message"
+msgid "An error occurred while reordering issues."
msgstr ""
msgid "An error occurred while retrieving calendar activity"
@@ -1219,6 +1479,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr "訂閱通知時出錯"
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "å–消訂閱通知時出錯"
@@ -1267,6 +1533,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr ""
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1285,6 +1554,9 @@ msgstr ""
msgid "Analytics"
msgstr ""
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1309,6 +1581,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "外觀"
@@ -1351,6 +1626,9 @@ msgstr "應用程å¼"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1388,7 +1666,7 @@ msgstr[0] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1397,12 +1675,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr "批准"
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "四月"
@@ -1439,6 +1732,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1481,6 +1783,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr "確定è¦é‡ç½®å¥åº·æª¢æŸ¥ä»¤ç‰Œå—Žï¼Ÿ"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1508,6 +1813,12 @@ msgstr ""
msgid "Artifact ID"
msgstr ""
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr ""
@@ -1544,6 +1855,9 @@ msgstr "指派"
msgid "Assign custom color like #FF0000"
msgstr ""
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "指派標籤"
@@ -1562,6 +1876,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr ""
@@ -1572,7 +1889,8 @@ msgid "Assigned to me"
msgstr ""
msgid "Assignee"
-msgstr "指派人"
+msgid_plural "%d Assignees"
+msgstr[0] ""
msgid "Assignee lists not available with your current license"
msgstr "您目å‰çš„許å¯è­‰ä¸æ”¯æ´æŒ‡æ´¾äººåå–®"
@@ -1583,6 +1901,9 @@ msgstr "指派人å單顯示了分é…給é¸å®šä½¿ç”¨è€…的所有議題。"
msgid "Assignee(s)"
msgstr "指派人"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1602,12 +1923,21 @@ msgstr ""
msgid "Audit Events"
msgstr ""
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "八月"
msgid "August"
msgstr "八月"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr ""
@@ -1665,6 +1995,9 @@ msgstr ""
msgid "Auto DevOps, runners and job artifacts"
msgstr ""
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr ""
@@ -1686,6 +2019,18 @@ msgstr ""
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr ""
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1866,31 +2211,31 @@ msgstr ""
msgid "Billing"
msgstr ""
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
msgstr ""
msgid "BillingPlans|Current plan"
msgstr ""
-msgid "BillingPlans|Customer Support"
+msgid "BillingPlans|Downgrade"
msgstr ""
-msgid "BillingPlans|Downgrade"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
msgstr ""
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr ""
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
msgstr ""
msgid "BillingPlans|Manage plan"
msgstr ""
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
+msgid "BillingPlans|Pricing page"
msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
@@ -1905,13 +2250,10 @@ msgstr ""
msgid "BillingPlans|Upgrade"
msgstr ""
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr ""
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr ""
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
msgstr ""
msgid "BillingPlans|features"
@@ -1929,6 +2271,9 @@ msgstr "æ¯å¹´æ”¶å– %{price_per_year}"
msgid "BillingPlans|per user"
msgstr ""
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr ""
@@ -1941,29 +2286,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-
msgid "Blog"
msgstr ""
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr ""
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr ""
@@ -2126,6 +2493,9 @@ msgstr "ç€è¦½æ–‡ä»¶"
msgid "Browse Files"
msgstr "ç€è¦½æ–‡ä»¶"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "ç€è¦½æ–‡ä»¶"
@@ -2237,7 +2607,10 @@ msgstr ""
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr ""
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2246,6 +2619,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr ""
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2273,9 +2652,15 @@ msgstr ""
msgid "Cancel"
msgstr "å–消"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr ""
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr ""
@@ -2285,6 +2670,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
@@ -2312,12 +2700,21 @@ msgstr ""
msgid "Change Weight"
msgstr "更改權é‡"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr "更改指派人"
msgid "Change assignee(s)."
msgstr "更改指派人。"
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2354,6 +2751,12 @@ msgstr "還原"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr ""
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr "變更"
@@ -2375,6 +2778,57 @@ msgstr "統計圖"
msgid "Chat"
msgstr ""
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2417,6 +2871,9 @@ msgstr ""
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2453,9 +2910,6 @@ msgstr ""
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr ""
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "å·²å–消"
@@ -2546,6 +3000,9 @@ msgstr ""
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2555,6 +3012,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr ""
@@ -2600,15 +3060,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr ""
msgid "Clear search input"
msgstr ""
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2630,6 +3099,9 @@ msgstr ""
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr ""
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr ""
@@ -2666,6 +3138,9 @@ msgstr ""
msgid "Close"
msgstr ""
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr ""
@@ -2675,12 +3150,27 @@ msgstr "關閉里程碑"
msgid "Close sidebar"
msgstr "關閉å´é‚Šæ¬„"
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "已關閉"
msgid "Closed issues"
msgstr "已關閉議題"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2729,6 +3219,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr ""
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2738,6 +3231,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr ""
@@ -2777,12 +3273,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr ""
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr ""
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr ""
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2813,12 +3315,21 @@ msgstr ""
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr ""
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr ""
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr ""
@@ -2867,6 +3378,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr ""
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr ""
@@ -2954,7 +3468,7 @@ msgstr ""
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr ""
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
@@ -2969,6 +3483,9 @@ msgstr ""
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr ""
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr ""
@@ -2981,6 +3498,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr ""
@@ -2990,6 +3513,9 @@ msgstr ""
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr ""
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr ""
@@ -2999,6 +3525,9 @@ msgstr ""
msgid "ClusterIntegration|No projects matched your search"
msgstr ""
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr ""
@@ -3023,6 +3552,9 @@ msgstr ""
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr ""
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr ""
@@ -3035,6 +3567,9 @@ msgstr ""
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr ""
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr ""
@@ -3053,15 +3588,24 @@ msgstr ""
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr ""
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr ""
msgid "ClusterIntegration|Search projects"
msgstr ""
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr ""
@@ -3080,6 +3624,9 @@ msgstr ""
msgid "ClusterIntegration|Select project to choose zone"
msgstr ""
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr ""
@@ -3119,18 +3666,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3152,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr ""
@@ -3188,16 +3744,22 @@ msgstr ""
msgid "ClusterIntegration|help page"
msgstr ""
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr ""
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
+msgid "ClusterIntegration|sign up"
msgstr ""
-msgid "ClusterIntegration|sign up"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
msgstr ""
msgid "Code"
@@ -3227,15 +3789,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr "收起å´é‚Šæ¬„"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "留言"
@@ -3245,11 +3816,11 @@ msgstr "留言並關閉 %{noteable_name}"
msgid "Comment & reopen %{noteable_name}"
msgstr "留言並é‡æ–°é–‹å•Ÿ %{noteable_name}"
-msgid "Comment & resolve discussion"
-msgstr "留言並關閉討論"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "留言並é‡æ–°è¨Žè«–"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "留言框ä½ç½®"
@@ -3257,6 +3828,9 @@ msgstr "留言框ä½ç½®"
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "è©•è«–"
@@ -3267,6 +3841,9 @@ msgstr[0] "æ交"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr ""
@@ -3363,12 +3940,18 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare."
msgstr ""
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "隱密"
msgid "Confidentiality"
msgstr "隱密的"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3378,6 +3961,9 @@ msgstr ""
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr ""
@@ -3387,6 +3973,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr ""
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr ""
@@ -3453,31 +4042,38 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
+msgid "ContainerRegistry|Copy build command to clipboard"
msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
+msgid "ContainerRegistry|Copy push command to clipboard"
msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
+msgid "ContainerRegistry|Last Updated"
msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr ""
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr ""
-msgid "ContainerRegistry|Remove tag"
+msgid "ContainerRegistry|Remove selected images"
msgstr ""
msgid "ContainerRegistry|Size"
@@ -3489,13 +4085,28 @@ msgstr ""
msgid "ContainerRegistry|Tag ID"
msgstr ""
-msgid "ContainerRegistry|Use different image names"
+msgid "ContainerRegistry|There are no container images stored for this project"
msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
@@ -3558,15 +4169,24 @@ msgstr ""
msgid "ConvDev Index"
msgstr ""
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr ""
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr ""
@@ -3603,6 +4223,9 @@ msgstr ""
msgid "Copy link"
msgstr ""
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr ""
@@ -3618,6 +4241,12 @@ msgstr ""
msgid "Copy token to clipboard"
msgstr ""
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3633,13 +4262,16 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
-msgid "Could not delete chat nickname %{chat_name}."
+msgid "Could not create group"
msgstr ""
-msgid "Could not remove the trigger."
+msgid "Could not create project"
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgid "Could not delete chat nickname %{chat_name}."
+msgstr ""
+
+msgid "Could not remove the trigger."
msgstr ""
msgid "Could not revoke impersonation token %{token_name}."
@@ -3648,12 +4280,21 @@ msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr ""
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "創建新目錄"
@@ -3666,8 +4307,8 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
-msgstr "建立åˆä½µè«‹æ±‚。"
+msgid "Create a merge request"
+msgstr ""
msgid "Create a new branch"
msgstr ""
@@ -3687,12 +4328,24 @@ msgstr "在帳戶上創建個人訪å•ä»¤ç‰Œï¼Œä»¥é€šéŽ %{protocol} 來拉å–æˆ
msgid "Create an issue. Issues are created for each alert triggered."
msgstr "建立議題。為已觸發的æ¯å€‹è­¦å ±å»ºç«‹è­°é¡Œã€‚"
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "建立分支"
msgid "Create commit"
msgstr ""
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "創建目錄"
@@ -3723,6 +4376,9 @@ msgstr "建立åˆä½µè«‹æ±‚åŠåˆ†æ”¯"
msgid "Create milestone"
msgstr "建立里程碑"
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr ""
@@ -3741,6 +4397,9 @@ msgstr "建立新標籤"
msgid "Create new..."
msgstr "創建..."
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "建立專案標籤"
@@ -3765,6 +4424,12 @@ msgstr ""
msgid "Created At"
msgstr ""
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr ""
@@ -3786,18 +4451,30 @@ msgstr ""
msgid "Created on:"
msgstr ""
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr ""
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Cron 時å€"
msgid "Cron syntax"
msgstr "Cron 語法"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr ""
@@ -3834,6 +4511,45 @@ msgstr ""
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr ""
@@ -3843,18 +4559,51 @@ msgstr ""
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr ""
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr ""
msgid "Cycle Analytics"
msgstr "週期分æž"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "編碼"
@@ -3876,6 +4625,29 @@ msgstr "é ç™¼å¸ƒ"
msgid "CycleAnalyticsStage|Test"
msgstr "測試"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3900,7 +4672,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3921,6 +4693,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr ""
@@ -3942,12 +4717,21 @@ msgstr ""
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr ""
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -3990,12 +4774,21 @@ msgstr ""
msgid "Delete"
msgstr "刪除"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr ""
msgid "Delete Snippet"
msgstr ""
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "刪除留言"
@@ -4032,6 +4825,9 @@ msgstr ""
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4050,6 +4846,20 @@ msgstr ""
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4062,12 +4872,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4077,6 +4896,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4095,6 +4917,14 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "部署"
@@ -4105,6 +4935,15 @@ msgstr ""
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr ""
@@ -4177,6 +5016,9 @@ msgstr ""
msgid "DeployTokens|Created"
msgstr ""
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr ""
@@ -4228,6 +5070,9 @@ msgstr ""
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr ""
@@ -4252,9 +5097,30 @@ msgstr ""
msgid "Description:"
msgstr ""
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4270,6 +5136,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4279,9 +5151,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4303,9 +5172,15 @@ msgstr ""
msgid "Diff limits"
msgstr ""
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr ""
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr ""
@@ -4318,6 +5193,9 @@ msgstr "目錄å稱"
msgid "Disable"
msgstr ""
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr ""
@@ -4375,6 +5253,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr "討論"
@@ -4405,6 +5289,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr ""
@@ -4414,6 +5301,9 @@ msgstr "Dockerfile"
msgid "Documentation for popular identity providers"
msgstr ""
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr ""
@@ -4435,9 +5325,15 @@ msgstr ""
msgid "Download"
msgstr "下載"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4447,6 +5343,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4483,9 +5382,15 @@ msgstr ""
msgid "Edit"
msgstr "編輯"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4507,12 +5412,21 @@ msgstr ""
msgid "Edit application"
msgstr ""
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr "編輯留言"
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4531,6 +5445,18 @@ msgstr "編輯議題"
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr ""
@@ -4555,6 +5481,9 @@ msgstr ""
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr ""
@@ -4639,12 +5568,15 @@ msgstr ""
msgid "Enable SAML authentication for this group"
msgstr ""
-msgid "Enable Sentry for error reporting and logging."
+msgid "Enable access to Grafana"
msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr ""
@@ -4657,6 +5589,9 @@ msgstr ""
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr ""
@@ -4675,12 +5610,18 @@ msgstr ""
msgid "Enable or disable version check and usage ping."
msgstr ""
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4714,18 +5655,36 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr ""
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "輸入議題說明"
@@ -4738,9 +5697,18 @@ msgstr ""
msgid "Enter the merge request title"
msgstr ""
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4909,9 +5877,15 @@ msgstr ""
msgid "Epics"
msgstr ""
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr ""
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr ""
@@ -4948,12 +5922,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "這些日期會影響在開發è—圖中 Epic 的顯示方å¼ã€‚來自里程碑的日期來自å°æ‡‰åˆ° Epic 中議題的里程碑。您也å¯ä»¥è¨­å®šå›ºå®šæ—¥æœŸã€æˆ–是完全移除它們。"
@@ -4972,9 +5961,6 @@ msgstr ""
msgid "Error"
msgstr ""
-msgid "Error Reporting and Logging"
-msgstr ""
-
msgid "Error Tracking"
msgstr ""
@@ -4990,6 +5976,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr ""
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "讀å–標籤時發生錯誤。"
@@ -5047,9 +6039,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr ""
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5068,14 +6066,17 @@ msgstr ""
msgid "Error saving label update."
msgstr "更新標籤時發生錯誤。"
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "更新所有待辦事項的狀態時發生錯誤。"
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "更新待辦事項狀態時發生錯誤。"
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr "上傳檔案時出錯"
@@ -5167,9 +6168,15 @@ msgstr "æ¯é€±åŸ·è¡Œï¼ˆå‘¨æ—¥æ·©æ™¨ 4 點)"
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr ""
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5191,6 +6198,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5203,9 +6213,18 @@ msgstr ""
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr ""
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr ""
@@ -5215,6 +6234,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5269,6 +6294,12 @@ msgstr ""
msgid "External authorization request timeout"
msgstr ""
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr ""
@@ -5308,6 +6339,15 @@ msgstr ""
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "無法變更所有者"
@@ -5329,6 +6369,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr ""
@@ -5350,6 +6393,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5359,6 +6414,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "從看æ¿åˆªé™¤è­°é¡Œæ™‚發生錯誤,請ç¨å€™é‡è©¦ã€‚"
@@ -5392,6 +6450,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr ""
@@ -5419,6 +6480,9 @@ msgstr ""
msgid "Failure"
msgstr ""
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5449,6 +6513,15 @@ msgstr ""
msgid "FeatureFlags|Active"
msgstr ""
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr ""
@@ -5470,6 +6543,9 @@ msgstr ""
msgid "FeatureFlags|Edit Feature Flag"
msgstr ""
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5479,19 +6555,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr ""
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5506,10 +6582,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr ""
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5521,19 +6597,43 @@ msgstr ""
msgid "FeatureFlags|New Feature Flag"
msgstr ""
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr ""
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5542,6 +6642,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "二月"
@@ -5560,9 +6663,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5624,6 +6724,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr ""
@@ -5666,6 +6769,9 @@ msgstr ""
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr ""
@@ -5729,6 +6835,9 @@ msgstr ""
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr ""
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5765,12 +6874,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr ""
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr ""
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5831,6 +6946,9 @@ msgstr "產生é è¨­çš„標籤"
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5843,6 +6961,9 @@ msgstr ""
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr ""
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr ""
@@ -5906,6 +7027,9 @@ msgstr ""
msgid "GeoNodes|Local attachments"
msgstr ""
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr ""
@@ -6014,10 +7138,10 @@ msgstr ""
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-check"
+msgid "Geo|%{name} is scheduled for re-sync"
msgstr ""
-msgid "Geo|%{name} is scheduled for re-sync"
+msgid "Geo|%{name} is scheduled for re-verify"
msgstr ""
msgid "Geo|All"
@@ -6026,10 +7150,13 @@ msgstr ""
msgid "Geo|All projects"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-check"
+msgid "Geo|All projects are being scheduled for re-sync"
msgstr ""
-msgid "Geo|All projects are being scheduled for re-sync"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
msgstr ""
msgid "Geo|Batch operations"
@@ -6038,9 +7165,15 @@ msgstr ""
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6065,10 +7198,13 @@ msgstr ""
msgid "Geo|Groups to synchronize"
msgstr ""
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr ""
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6119,12 +7255,6 @@ msgstr ""
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr ""
-
-msgid "Geo|Recheck all projects"
-msgstr ""
-
msgid "Geo|Redownload"
msgstr ""
@@ -6143,6 +7273,12 @@ msgstr ""
msgid "Geo|Retry count"
msgstr ""
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr ""
@@ -6167,7 +7303,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr ""
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6224,6 +7360,9 @@ msgstr ""
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6281,6 +7420,15 @@ msgstr ""
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6299,9 +7447,6 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
-msgid "GitLab’s issue tracker"
-msgstr ""
-
msgid "Gitaly"
msgstr ""
@@ -6317,9 +7462,18 @@ msgstr ""
msgid "Gitea Import"
msgstr ""
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6332,6 +7486,12 @@ msgstr ""
msgid "Go back"
msgstr ""
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6341,15 +7501,99 @@ msgstr ""
msgid "Go to %{link_to_google_takeout}."
msgstr ""
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6359,7 +7603,7 @@ msgstr ""
msgid "Google Takeout"
msgstr ""
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
msgstr ""
msgid "Got it"
@@ -6368,12 +7612,18 @@ msgstr ""
msgid "Got it!"
msgstr ""
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr ""
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6437,15 +7687,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr ""
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr ""
@@ -6482,6 +7732,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6557,6 +7810,9 @@ msgstr ""
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr ""
@@ -6590,6 +7846,9 @@ msgstr ""
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr ""
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr ""
@@ -6713,6 +7972,12 @@ msgstr "說明é é¢"
msgid "Help page text and support page url."
msgstr ""
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6734,6 +7999,9 @@ msgstr ""
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] ""
@@ -6741,6 +8009,9 @@ msgstr[0] ""
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6759,6 +8030,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6768,6 +8042,9 @@ msgstr "已開始維護"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6777,6 +8054,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr ""
@@ -6789,9 +8069,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr ""
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr ""
@@ -6828,6 +8114,9 @@ msgstr ""
msgid "IDE|Review"
msgstr ""
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr ""
@@ -6891,6 +8180,12 @@ msgstr ""
msgid "ImageDiffViewer|Swipe"
msgstr ""
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -6996,7 +8291,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7050,13 +8345,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr ""
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7101,6 +8399,9 @@ msgstr ""
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7117,6 +8418,9 @@ msgstr ""
msgid "Instance Statistics visibility"
msgstr ""
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr ""
@@ -7159,6 +8463,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7207,16 +8514,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7261,9 +8574,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "議題"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr ""
@@ -7279,7 +8610,10 @@ msgstr "è­°é¡Œã€åˆä½µè«‹æ±‚ã€æŽ¨é€åŠç•™è¨€ã€‚"
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr ""
-msgid "IssuesAnalytics|Issues Created"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
msgstr ""
msgid "IssuesAnalytics|Issues created per month"
@@ -7297,6 +8631,12 @@ msgstr ""
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr ""
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7474,6 +8814,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr ""
@@ -7498,10 +8841,13 @@ msgstr ""
msgid "Kubernetes configured"
msgstr ""
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
+msgid "LDAP"
msgstr ""
msgid "LDAP settings"
@@ -7586,6 +8932,9 @@ msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "最近 %d 天"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "最新æµæ°´ç·š"
@@ -7607,15 +8956,24 @@ msgstr ""
msgid "Last edited by %{name}"
msgstr ""
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr ""
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "最後更新"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "最後更新"
@@ -7634,7 +8992,7 @@ msgstr "在"
msgid "Latest changes"
msgstr ""
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7652,9 +9010,6 @@ msgstr ""
msgid "Learn more"
msgstr ""
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "了解更多有關 %{issue_boards_url} 的資訊,å¯ä»¥é€éŽæ¨™ç±¤ã€æŒ‡æ´¾äººã€é‡Œç¨‹ç¢‘來建立追蹤議題列表。如果您發ç¾è­°é¡Œçœ‹æ¿ä¸Šå°‘了一些資訊,請在 %{gitlab_issues_url} 建立議題。"
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7673,6 +9028,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7682,6 +9040,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "了解更多"
@@ -7712,76 +9073,96 @@ msgstr ""
msgid "License"
msgstr ""
-msgid "LicenseManagement|Add a license"
+msgid "License Compliance"
msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
+msgid "LicenseCompliance|Add a license"
msgstr ""
-msgid "LicenseManagement|Approve"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
msgstr ""
-msgid "LicenseManagement|Approve license"
+msgid "LicenseCompliance|Approve"
msgstr ""
-msgid "LicenseManagement|Approve license?"
+msgid "LicenseCompliance|Approve license"
msgstr ""
-msgid "LicenseManagement|Approved"
+msgid "LicenseCompliance|Approve license?"
msgstr ""
-msgid "LicenseManagement|Blacklist"
+msgid "LicenseCompliance|Approved"
msgstr ""
-msgid "LicenseManagement|Blacklist license"
+msgid "LicenseCompliance|Blacklist"
msgstr ""
-msgid "LicenseManagement|Blacklist license?"
+msgid "LicenseCompliance|Blacklist license"
msgstr ""
-msgid "LicenseManagement|Blacklisted"
+msgid "LicenseCompliance|Blacklist license?"
msgstr ""
-msgid "LicenseManagement|Cancel"
+msgid "LicenseCompliance|Blacklisted"
msgstr ""
-msgid "LicenseManagement|License"
+msgid "LicenseCompliance|Cancel"
msgstr ""
-msgid "LicenseManagement|License Management"
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
msgstr ""
-msgid "LicenseManagement|License details"
+msgid "LicenseCompliance|License"
msgstr ""
-msgid "LicenseManagement|License name"
+msgid "LicenseCompliance|License Compliance"
msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
+
+msgid "LicenseCompliance|License details"
+msgstr ""
+
+msgid "LicenseCompliance|License name"
msgstr ""
-msgid "LicenseManagement|Packages"
+msgid "LicenseCompliance|Packages"
msgstr ""
-msgid "LicenseManagement|Remove license"
+msgid "LicenseCompliance|Remove license"
msgstr ""
-msgid "LicenseManagement|Remove license?"
+msgid "LicenseCompliance|Remove license?"
msgstr ""
-msgid "LicenseManagement|Submit"
+msgid "LicenseCompliance|Submit"
msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
msgstr ""
-msgid "LicenseManagement|URL"
+msgid "LicenseCompliance|This license already exists in this project."
msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
+msgid "LicenseCompliance|URL"
+msgstr ""
+
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
msgstr ""
msgid "Licensed Features"
@@ -7793,6 +9174,9 @@ msgstr ""
msgid "Licenses"
msgstr ""
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7800,12 +9184,18 @@ msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
msgstr[0] ""
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr ""
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr ""
@@ -7818,15 +9208,15 @@ msgstr ""
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "列表顯示"
msgid "List your Bitbucket Server repositories"
msgstr ""
-msgid "List your GitHub repositories"
-msgstr ""
-
msgid "Live preview"
msgstr ""
@@ -7836,6 +9226,9 @@ msgstr ""
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr ""
@@ -7875,13 +9268,19 @@ msgstr ""
msgid "Locked Files"
msgstr ""
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr ""
msgid "Locks give the ability to lock specific file or folder."
msgstr ""
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7893,6 +9292,9 @@ msgstr ""
msgid "Logs"
msgstr ""
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7908,19 +9310,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr ""
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr ""
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -7965,6 +9373,9 @@ msgstr ""
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr ""
@@ -7983,6 +9394,12 @@ msgstr "三月"
msgid "March"
msgstr "三月"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -7992,8 +9409,8 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
-msgstr "將待辦事項標記為已完æˆ"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr ""
@@ -8004,15 +9421,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr ""
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
-msgstr "將待辦事項標記為已完æˆã€‚"
+msgid "Marks this issue as related to %{issue_ref}."
+msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr ""
@@ -8070,9 +9538,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "åˆä½µè«‹æ±‚"
@@ -8100,6 +9577,9 @@ msgstr ""
msgid "Merge request"
msgstr "åˆä½µè«‹æ±‚"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr ""
@@ -8112,6 +9592,9 @@ msgstr "åˆä½µè«‹æ±‚"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr ""
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8145,34 +9628,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr ""
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
+msgid "MergeRequests|Saving the comment failed"
msgstr ""
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
+msgid "MergeRequests|Thread stays unresolved"
msgstr ""
-msgid "MergeRequests|Saving the comment failed"
+msgid "MergeRequests|Thread will be resolved"
msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8187,19 +9670,19 @@ msgstr "檢視å–代檔案@ %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8223,24 +9706,42 @@ msgstr "å·²åˆä½µ"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr ""
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr ""
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr ""
msgid "Metrics - Prometheus"
msgstr ""
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr ""
@@ -8409,9 +9910,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr ""
-
msgid "Mirror direction"
msgstr ""
@@ -8451,6 +9949,9 @@ msgstr ""
msgid "Modal|Close"
msgstr ""
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8463,7 +9964,7 @@ msgstr "修改åˆä½µæ交"
msgid "Monday"
msgstr "星期一"
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8475,6 +9976,12 @@ msgstr "月"
msgid "More"
msgstr ""
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr ""
@@ -8505,6 +10012,12 @@ msgstr "移動議題"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8514,6 +10027,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8608,6 +10127,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "創建æµæ°´ç·šè¨ˆåŠƒ"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr ""
@@ -8695,13 +10217,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr ""
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8713,13 +10247,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
msgstr ""
-msgid "No blocking merge requests "
+msgid "No authentication methods configured."
+msgstr ""
+
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8734,9 +10274,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr ""
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr ""
-
msgid "No contributions"
msgstr ""
@@ -8746,6 +10283,15 @@ msgstr ""
msgid "No credit card required."
msgstr ""
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8770,12 +10316,18 @@ msgstr ""
msgid "No files found."
msgstr ""
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr ""
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr ""
@@ -8830,9 +10382,15 @@ msgstr ""
msgid "No schedules"
msgstr "沒有計劃"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8842,6 +10400,9 @@ msgstr ""
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8854,6 +10415,9 @@ msgstr ""
msgid "None"
msgstr "ç„¡"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "ä¸å¯ç”¨"
@@ -8872,6 +10436,9 @@ msgstr "數據ä¸è¶³"
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr ""
@@ -8881,6 +10448,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8896,6 +10466,9 @@ msgstr ""
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr ""
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -8992,6 +10565,9 @@ msgstr ""
msgid "Notifications"
msgstr "通知"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "關閉通知"
@@ -9010,9 +10586,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr ""
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9028,6 +10616,9 @@ msgstr "篩é¸"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9056,6 +10647,12 @@ msgstr ""
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr ""
@@ -9080,6 +10677,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr ""
@@ -9089,6 +10692,9 @@ msgstr ""
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9098,6 +10704,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr ""
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr ""
@@ -9179,6 +10791,12 @@ msgstr ""
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr ""
@@ -9203,6 +10821,18 @@ msgstr ""
msgid "Package was removed"
msgstr ""
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr ""
@@ -9239,13 +10869,13 @@ msgstr ""
msgid "Pagination|Last »"
msgstr ""
-msgid "Pagination|Next"
+msgid "Pagination|Next ›"
msgstr ""
-msgid "Pagination|Prev"
+msgid "Pagination|« First"
msgstr ""
-msgid "Pagination|« First"
+msgid "Pagination|‹ Prev"
msgstr ""
msgid "Parameter"
@@ -9317,9 +10947,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr ""
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr ""
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr ""
@@ -9347,12 +10995,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "æµæ°´ç·š"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "æµæ°´ç·šè¨ˆåŠƒ"
@@ -9419,7 +11076,7 @@ msgstr "變é‡"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "自定義"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9443,12 +11100,21 @@ msgstr ""
msgid "Pipelines for last year"
msgstr "去年的æµæ°´ç·š"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9497,15 +11163,30 @@ msgstr ""
msgid "Pipeline|Commit"
msgstr ""
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr ""
msgid "Pipeline|Existing branch name or tag"
msgstr ""
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr ""
@@ -9536,6 +11217,9 @@ msgstr ""
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr ""
@@ -9548,18 +11232,12 @@ msgstr "所有"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "æˆåŠŸ"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "於階段"
@@ -9590,6 +11268,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr ""
@@ -9608,6 +11289,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr ""
@@ -9695,6 +11379,9 @@ msgstr ""
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr ""
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr ""
@@ -9704,7 +11391,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9731,6 +11418,9 @@ msgstr ""
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9788,6 +11478,12 @@ msgstr ""
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr ""
@@ -9824,6 +11520,21 @@ msgstr ""
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "個人資料"
@@ -9938,6 +11649,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -9980,6 +11694,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr ""
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr ""
@@ -10010,6 +11727,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr ""
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10115,6 +11835,12 @@ msgstr ""
msgid "Profiles|e.g. My MacBook key"
msgstr ""
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10160,6 +11886,9 @@ msgstr "é …ç›® '%{project_name}' 已更新完æˆã€‚"
msgid "Project Badges"
msgstr ""
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10169,6 +11898,9 @@ msgstr ""
msgid "Project access must be granted explicitly to each user."
msgstr "項目訪å•æ¬Šé™å¿…須明確授權給æ¯å€‹ç”¨æˆ¶ã€‚"
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10220,9 +11952,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10265,6 +11994,12 @@ msgstr ""
msgid "ProjectOverview|Star"
msgstr ""
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr ""
@@ -10283,13 +12018,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
+msgstr ""
+
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10298,6 +12063,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr ""
@@ -10469,10 +12240,58 @@ msgstr ""
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr ""
-msgid "PrometheusAlerts|Add alert"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
msgstr ""
-msgid "PrometheusAlerts|Alert set"
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
+msgid "PrometheusAlerts|Add alert"
msgstr ""
msgid "PrometheusAlerts|Edit alert"
@@ -10490,9 +12309,6 @@ msgstr ""
msgid "PrometheusAlerts|Error saving alert"
msgstr ""
-msgid "PrometheusAlerts|No alert set"
-msgstr ""
-
msgid "PrometheusAlerts|Operator"
msgstr ""
@@ -10526,6 +12342,9 @@ msgstr ""
msgid "PrometheusService|Custom metrics"
msgstr ""
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10556,6 +12375,9 @@ msgstr ""
msgid "PrometheusService|New metric"
msgstr ""
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr ""
@@ -10580,6 +12402,12 @@ msgstr ""
msgid "Promote"
msgstr ""
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "將這些專案里程碑æå‡æˆç¾¤çµ„里程碑。"
@@ -10598,6 +12426,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr ""
@@ -10628,6 +12459,9 @@ msgstr ""
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr ""
@@ -10703,6 +12537,9 @@ msgstr ""
msgid "Pull"
msgstr ""
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr ""
@@ -10796,6 +12633,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "了解更多"
@@ -10805,9 +12645,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr ""
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr ""
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10817,6 +12666,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10884,9 +12736,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr "相關的部署作業"
@@ -10914,6 +12763,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "ç¨å¾Œæ醒"
@@ -10923,9 +12775,15 @@ msgstr ""
msgid "Remove"
msgstr ""
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr ""
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -10947,6 +12805,9 @@ msgstr "移除指派人"
msgid "Remove avatar"
msgstr ""
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -10956,12 +12817,21 @@ msgstr "刪除截止日期"
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr ""
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr ""
@@ -10971,30 +12841,75 @@ msgstr "刪除項目"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr ""
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11028,6 +12943,15 @@ msgstr ""
msgid "Reopen milestone"
msgstr "é‡æ–°é–‹å•Ÿé‡Œç¨‹ç¢‘"
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr ""
@@ -11037,12 +12961,21 @@ msgstr "å–代"
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr ""
@@ -11109,6 +13042,9 @@ msgstr ""
msgid "Repository"
msgstr "存儲庫"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr ""
@@ -11133,9 +13069,15 @@ msgstr ""
msgid "Repository mirror"
msgstr ""
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr ""
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr ""
@@ -11148,6 +13090,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr ""
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr ""
@@ -11163,6 +13108,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] "從 %{names} éœ€è¦ %{count} 批准。"
@@ -11177,6 +13125,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11192,10 +13143,16 @@ msgstr ""
msgid "Reset runners registration token"
msgstr "é‡ç½® Runner 註冊令牌"
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
+msgid "Resolve all threads in new issue"
msgstr ""
msgid "Resolve conflicts on source branch"
@@ -11204,6 +13161,9 @@ msgstr ""
msgid "Resolve discussion"
msgstr ""
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11252,6 +13212,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11316,6 +13279,9 @@ msgstr ""
msgid "Roadmap"
msgstr ""
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr ""
@@ -11376,7 +13342,7 @@ msgstr ""
msgid "Runners page."
msgstr ""
-msgid "Runners|You have used all your shared Runners pipeline minutes."
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
msgstr ""
msgid "Running"
@@ -11451,6 +13417,9 @@ msgstr "ä¿å­˜æµæ°´ç·šè¨ˆåŠƒ"
msgid "Save variables"
msgstr ""
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11460,6 +13429,9 @@ msgstr "新建æµæ°´ç·šè¨ˆåŠƒ"
msgid "Scheduled"
msgstr ""
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr ""
@@ -11481,15 +13453,30 @@ msgstr ""
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr ""
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr ""
msgid "Scroll to top"
msgstr ""
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr ""
@@ -11577,9 +13564,65 @@ msgstr ""
msgid "SearchAutocomplete|in this project"
msgstr ""
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11592,6 +13635,9 @@ msgstr ""
msgid "Security"
msgstr ""
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr ""
@@ -11607,24 +13653,48 @@ msgstr ""
msgid "Security Dashboard|Issue Created"
msgstr ""
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr ""
msgid "Security Reports|Dismiss vulnerability"
msgstr ""
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr ""
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr ""
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr ""
@@ -11652,6 +13722,9 @@ msgstr ""
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr ""
@@ -11679,6 +13752,9 @@ msgstr ""
msgid "Select Archive Format"
msgstr "é¸æ“‡ä¸‹è¼‰æ ¼å¼"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11688,12 +13764,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr ""
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr ""
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11706,6 +13788,9 @@ msgstr ""
msgid "Select a timezone"
msgstr "é¸æ“‡æ™‚å€"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr ""
@@ -11715,7 +13800,16 @@ msgstr "é¸æ“‡åˆ†æ”¯/標籤"
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11727,6 +13821,9 @@ msgstr ""
msgid "Select project to choose zone"
msgstr ""
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr ""
@@ -11742,13 +13839,19 @@ msgstr ""
msgid "Select the custom project template source group."
msgstr ""
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11775,6 +13878,12 @@ msgstr ""
msgid "September"
msgstr "ä¹æœˆ"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11802,6 +13911,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11832,9 +13944,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11853,6 +13977,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr ""
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11886,12 +14013,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr ""
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr ""
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11901,16 +14040,22 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr ""
-msgid "Set up a %{type} Runner manually"
+msgid "Set up a %{type} Runner automatically"
msgstr ""
-msgid "Set up a specific Runner automatically"
+msgid "Set up a %{type} Runner manually"
msgstr ""
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
@@ -11928,6 +14073,9 @@ msgstr ""
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "設置密碼"
@@ -11955,6 +14103,12 @@ msgstr ""
msgid "SetStatusModal|What's your status?"
msgstr ""
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12012,9 +14166,15 @@ msgstr ""
msgid "Show command"
msgstr ""
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr "åªé¡¯ç¤ºç•™è¨€"
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -12037,6 +14197,18 @@ msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "顯示 %d 個事件"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr ""
@@ -12067,6 +14239,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr ""
@@ -12079,6 +14254,9 @@ msgstr "登出"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12088,6 +14266,12 @@ msgstr ""
msgid "Sign-up restrictions"
msgstr ""
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12112,6 +14296,9 @@ msgstr "相似議題"
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr ""
@@ -12130,6 +14317,21 @@ msgstr ""
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr ""
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr ""
@@ -12163,9 +14365,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12196,6 +14404,9 @@ msgstr ""
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12205,6 +14416,12 @@ msgstr ""
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr ""
@@ -12238,6 +14455,9 @@ msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr ""
@@ -12289,6 +14509,9 @@ msgstr ""
msgid "SortOptions|Due soon"
msgstr ""
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr ""
@@ -12358,6 +14581,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr ""
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr ""
@@ -12373,6 +14599,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr ""
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12451,6 +14683,9 @@ msgstr ""
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr ""
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12472,13 +14707,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12487,6 +14722,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "由此更改 %{new_merge_request}"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr "開始一個新的åˆä½µè«‹æ±‚"
@@ -12496,19 +14737,16 @@ msgstr ""
msgid "Start and due date"
msgstr ""
-msgid "Start cleanup"
-msgstr ""
-
-msgid "Start date"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
msgstr ""
-msgid "Start discussion"
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start cleanup"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start date"
msgstr ""
msgid "Start merge train"
@@ -12517,9 +14755,21 @@ msgstr ""
msgid "Start merge train when pipeline succeeds"
msgstr ""
+msgid "Start search"
+msgstr ""
+
msgid "Start the Runner!"
msgstr "é‹ä½œ Runner!"
+msgid "Start thread"
+msgstr ""
+
+msgid "Start thread & close %{noteable_name}"
+msgstr ""
+
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
+
msgid "Start your trial"
msgstr ""
@@ -12544,12 +14794,18 @@ msgstr ""
msgid "State your message to activate"
msgstr ""
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr ""
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12580,6 +14836,18 @@ msgstr ""
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr ""
@@ -12595,6 +14863,9 @@ msgstr ""
msgid "Submit feedback"
msgstr "æ交æ„見"
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr ""
@@ -12619,6 +14890,12 @@ msgstr ""
msgid "Subscribed"
msgstr ""
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12631,9 +14908,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12694,6 +14968,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12787,9 +15064,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr "星期日"
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12847,6 +15130,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "標籤"
@@ -13000,6 +15289,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13013,6 +15305,9 @@ msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -13037,9 +15332,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr ""
@@ -13064,6 +15356,12 @@ msgstr ""
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13100,9 +15398,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr ""
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13217,7 +15512,7 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr ""
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
@@ -13244,7 +15539,7 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "é ç™¼å¸ƒéšŽæ®µæ¦‚述了åˆä½µè«‹æ±‚çš„åˆä½µåˆ°éƒ¨ç½²ä»£ç¢¼åˆ°ç”Ÿç”¢ç’°å¢ƒçš„總時間。當首次部署到生產環境後,數據將自動添加到此處。"
-msgid "The tabs below will be removed in a future version"
+msgid "The target element is missing."
msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
@@ -13253,7 +15548,7 @@ msgstr "測試階段概述了 GitLab CI 為相關åˆä½µè«‹æ±‚é‹è¡Œæ¯å€‹æµæ°´ç
msgid "The time taken by each data entry gathered by that stage."
msgstr "該階段æ¯æ¢æ•¸æ“šæ‰€èŠ±çš„時間"
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13277,7 +15572,7 @@ msgstr ""
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr ""
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13313,9 +15608,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "沒有å¯ä»¥é¡¯ç¤ºçš„è­°é¡Œ"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr ""
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13337,6 +15638,9 @@ msgstr ""
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13346,18 +15650,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
-msgstr "增新待辦事項時出錯。"
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
-msgstr "刪除待辦事項時出錯。"
+msgid "There was an error deleting the To Do."
+msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13382,6 +15689,9 @@ msgstr ""
msgid "There was an error subscribing to this label."
msgstr ""
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr ""
@@ -13439,10 +15749,10 @@ msgstr ""
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr ""
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13490,6 +15800,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13499,12 +15815,15 @@ msgstr ""
msgid "This group does not provide any group Runners yet."
msgstr ""
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "這是個隱密議題。"
@@ -13526,15 +15845,15 @@ msgstr ""
msgid "This is your current session"
msgstr ""
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "這個議題是隱密的"
msgid "This issue is locked."
msgstr "這個議題已被鎖定。"
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr ""
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr ""
@@ -13589,9 +15908,15 @@ msgstr ""
msgid "This job requires a manual action"
msgstr ""
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "在創建壹個空的存儲庫或導入ç¾æœ‰å­˜å„²åº«ä¹‹å‰ï¼Œæ‚¨å°‡ç„¡æ³•æŽ¨é€ä»£ç¢¼ã€‚"
@@ -13610,9 +15935,6 @@ msgstr ""
msgid "This page will be removed in a future release."
msgstr ""
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13643,6 +15965,9 @@ msgstr ""
msgid "This setting can be overridden in each project."
msgstr ""
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr ""
@@ -13652,6 +15977,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr ""
@@ -13673,6 +16001,9 @@ msgstr ""
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13691,6 +16022,15 @@ msgstr "從創建åˆä½µè«‹æ±‚到被åˆä½µæˆ–關閉的時間"
msgid "Time estimate"
msgstr ""
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr ""
@@ -13700,6 +16040,9 @@ msgstr ""
msgid "Time spent"
msgstr ""
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "時間追蹤"
@@ -13709,12 +16052,21 @@ msgstr "創建第壹個åˆä½µè«‹æ±‚之å‰çš„時間"
msgid "TimeTrackingEstimated|Est"
msgstr "é ä¼°"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "é ä¼°ï¼š"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "已花費:"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr " %s 天å‰"
@@ -13838,6 +16190,9 @@ msgstr ""
msgid "Timeago|right now"
msgstr ""
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr ""
@@ -13867,6 +16222,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr ""
@@ -13882,6 +16240,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr ""
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr ""
@@ -13909,12 +16270,6 @@ msgstr ""
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr ""
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr ""
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr ""
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr ""
@@ -13939,12 +16294,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr ""
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -13969,17 +16342,17 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr ""
-msgid "Today"
-msgstr "今天"
+msgid "To-Do List"
+msgstr ""
-msgid "Todo"
-msgstr "待辦事項"
+msgid "To-do item successfully marked as done."
+msgstr ""
-msgid "Todo was successfully marked as done."
-msgstr "待辦事項已æˆåŠŸåœ°æ¨™è¨˜ç‚ºå·²å®Œæˆã€‚"
+msgid "Today"
+msgstr "今天"
-msgid "Todos"
-msgstr "待辦事項"
+msgid "Toggle Markdown preview"
+msgstr ""
msgid "Toggle Sidebar"
msgstr ""
@@ -13987,6 +16360,9 @@ msgstr ""
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -13996,9 +16372,6 @@ msgstr ""
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr ""
-
msgid "Toggle emoji award"
msgstr ""
@@ -14011,16 +16384,25 @@ msgstr ""
msgid "Toggle sidebar"
msgstr ""
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr ""
msgid "ToggleButton|Toggle Status: ON"
msgstr ""
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
+msgid "Toggles :%{name}: emoji award."
msgstr ""
msgid "Tomorrow"
@@ -14041,6 +16423,9 @@ msgstr ""
msgid "Total Time"
msgstr "總時間"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "所有æ交和åˆä½µçš„總測試時間"
@@ -14059,6 +16444,12 @@ msgstr ""
msgid "Track time with quick actions"
msgstr ""
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14095,9 +16486,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr "樹狀顯示"
@@ -14125,9 +16513,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14152,12 +16537,21 @@ msgstr ""
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr ""
@@ -14191,6 +16585,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14203,6 +16609,9 @@ msgstr ""
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14233,6 +16642,12 @@ msgstr ""
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr ""
@@ -14260,12 +16675,24 @@ msgstr ""
msgid "Unlocked"
msgstr ""
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr ""
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr ""
@@ -14302,6 +16729,15 @@ msgstr ""
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "未驗證"
@@ -14311,15 +16747,27 @@ msgstr ""
msgid "Upcoming"
msgstr ""
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr ""
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr ""
@@ -14350,6 +16798,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr ""
@@ -14362,6 +16813,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr ""
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr ""
@@ -14425,6 +16879,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr ""
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr ""
@@ -14593,6 +17050,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14605,6 +17065,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14668,7 +17131,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14680,7 +17143,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14695,10 +17158,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14746,6 +17209,12 @@ msgstr "程å¼ç¢¼ç‰‡æ®µ"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr ""
@@ -14758,6 +17227,9 @@ msgstr ""
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr ""
@@ -14785,6 +17257,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr ""
@@ -14863,6 +17338,9 @@ msgstr "已驗證"
msgid "Version"
msgstr ""
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr ""
@@ -14941,6 +17419,9 @@ msgstr ""
msgid "Visibility level:"
msgstr ""
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -14962,16 +17443,28 @@ msgstr "未知"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -14980,16 +17473,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
msgstr ""
-msgid "Vulnerability List"
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
+msgstr ""
+
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15031,6 +17527,9 @@ msgstr ""
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "權é™ä¸è¶³ã€‚如需查看相關數據,請å‘管ç†å“¡ç”³è«‹æ¬Šé™ã€‚"
@@ -15046,10 +17545,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15103,6 +17599,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr ""
@@ -15116,12 +17615,18 @@ msgid "When this merge request is accepted"
msgid_plural "When these merge requests are accepted"
msgstr[0] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr ""
@@ -15131,6 +17636,9 @@ msgstr ""
msgid "Wiki"
msgstr ""
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15203,15 +17711,9 @@ msgstr ""
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr ""
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr ""
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr ""
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr ""
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr ""
@@ -15227,19 +17729,16 @@ msgstr ""
msgid "WikiPageConflictMessage|the page"
msgstr ""
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr ""
-
-msgid "WikiPageEdit|Update %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
msgstr ""
-msgid "WikiPage|Page slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr ""
-msgid "Wiki|Create Page"
+msgid "Wiki|Create New Page"
msgstr ""
msgid "Wiki|Create page"
@@ -15260,6 +17759,9 @@ msgstr ""
msgid "Wiki|Page history"
msgstr ""
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr ""
@@ -15290,6 +17792,9 @@ msgstr "寫"
msgid "Write a comment or drag your files here…"
msgstr "寫評論或拖動你的文件到這裡"
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15326,6 +17831,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15380,6 +17888,9 @@ msgstr ""
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr ""
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15404,7 +17915,10 @@ msgstr "åªèƒ½åœ¨åˆ†æ”¯ä¸Šæ·»åŠ æ–‡ä»¶"
msgid "You can only edit files when you are on a branch"
msgstr ""
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15425,6 +17939,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr ""
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15446,9 +17963,6 @@ msgstr ""
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr ""
@@ -15476,6 +17990,18 @@ msgstr ""
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15500,6 +18026,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "您已é”到項目數é‡é™åˆ¶"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15590,6 +18122,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr ""
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15629,6 +18164,9 @@ msgstr ""
msgid "Your Groups"
msgstr ""
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15644,8 +18182,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "您的待辦事項"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15716,6 +18254,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15728,12 +18269,21 @@ msgstr ""
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr ""
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr ""
@@ -15749,6 +18299,9 @@ msgstr ""
msgid "among other things"
msgstr ""
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15767,6 +18320,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15776,6 +18335,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr ""
@@ -15875,6 +18437,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr ""
@@ -15893,10 +18458,10 @@ msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr ""
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15914,10 +18479,10 @@ msgstr ""
msgid "ciReport|Description"
msgstr ""
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -15938,30 +18503,13 @@ msgstr ""
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr ""
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr ""
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] ""
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] ""
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr ""
-
-msgid "ciReport|License management detected no new licenses"
+msgid "ciReport|Learn more about interacting with security reports"
msgstr ""
msgid "ciReport|Links"
@@ -15988,6 +18536,9 @@ msgstr ""
msgid "ciReport|Performance metrics"
msgstr ""
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr ""
@@ -16046,6 +18597,9 @@ msgstr[0] ""
msgid "ciReport|View full report"
msgstr ""
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16088,6 +18642,9 @@ msgstr ""
msgid "could not read private key, is the passphrase correct?"
msgstr ""
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr ""
@@ -16101,7 +18658,10 @@ msgstr[0] "天"
msgid "deleted"
msgstr ""
-msgid "deploy token"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
msgstr ""
msgid "detached"
@@ -16110,10 +18670,6 @@ msgstr ""
msgid "disabled"
msgstr ""
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-
msgid "done"
msgstr ""
@@ -16121,16 +18677,28 @@ msgid "draft"
msgid_plural "drafts"
msgstr[0] ""
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr ""
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
msgstr ""
msgid "error"
@@ -16175,6 +18743,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr ""
@@ -16218,21 +18789,21 @@ msgstr ""
msgid "is invalid because there is upstream lock"
msgstr ""
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr ""
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr ""
-
msgid "it is stored externally"
msgstr ""
@@ -16257,15 +18828,24 @@ msgstr ""
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
+msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr ""
-msgid "locked by %{path_lock_user_name} %{created_at}"
+msgid "log in"
msgstr ""
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] ""
@@ -16285,6 +18865,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr ""
@@ -16408,6 +18997,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr ""
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16441,6 +19033,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "請求åˆä½µ"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr ""
@@ -16492,7 +19087,7 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr ""
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
@@ -16504,9 +19099,21 @@ msgstr ""
msgid "mrWidget|This merge request is in the process of being merged"
msgstr ""
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr ""
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr ""
@@ -16516,6 +19123,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr ""
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr ""
@@ -16549,9 +19159,15 @@ msgstr "æ–°åˆä½µè«‹æ±‚"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr "ç„¡"
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "通知郵件"
@@ -16564,7 +19180,7 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
+msgid "or %{link_start}create a new Google account%{link_end}"
msgstr ""
msgid "out of %d total test"
@@ -16578,7 +19194,10 @@ msgstr[0] "父級"
msgid "password"
msgstr ""
-msgid "personal access token"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
msgstr ""
msgid "point"
@@ -16598,12 +19217,18 @@ msgid "project"
msgid_plural "projects"
msgstr[0] ""
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr "快速æ“作"
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr ""
@@ -16616,6 +19241,9 @@ msgstr "刪除截止日期"
msgid "remove weight"
msgstr "移除權é‡"
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16701,15 +19329,37 @@ msgstr ""
msgid "this document"
msgstr ""
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+
msgid "to help your contributors communicate effectively!"
msgstr ""
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr ""
@@ -16719,6 +19369,9 @@ msgstr ""
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16734,12 +19387,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/locale/zh_TW/gitlab.po b/locale/zh_TW/gitlab.po
index eb2655eddce..89f48dcb07f 100644
--- a/locale/zh_TW/gitlab.po
+++ b/locale/zh_TW/gitlab.po
@@ -13,7 +13,10 @@ msgstr ""
"X-Crowdin-Project: gitlab-ee\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/locale/gitlab.pot\n"
-"PO-Revision-Date: 2019-06-18 11:44\n"
+"PO-Revision-Date: 2019-09-24 10:20\n"
+
+msgid " (from %{timeoutSource})"
+msgstr ""
msgid " Please sign in."
msgstr ""
@@ -27,21 +30,33 @@ msgstr ""
msgid " and"
msgstr " 和"
+msgid " and "
+msgstr ""
+
+msgid " and %{sliced}"
+msgstr ""
+
msgid " degraded on %d point"
msgid_plural " degraded on %d points"
-msgstr[0] " 劣化了 %d 點"
+msgstr[0] " 劣化 %d 點"
msgid " improved on %d point"
msgid_plural " improved on %d points"
-msgstr[0] " 改善了 %d 點"
+msgstr[0] " 改善 %d 點"
msgid " or "
msgstr ""
+msgid " or <!merge request id>"
+msgstr ""
+
msgid " or <#epic id>"
-msgstr " 或 <#å²è©© id>"
+msgstr " 或 <#epic id>"
msgid " or <#issue id>"
+msgstr " 或 <#議題 id>"
+
+msgid " or references (e.g. path/to/project!merge_request_id)"
msgstr ""
msgid "%d comment"
@@ -56,6 +71,10 @@ msgid "%d commit behind"
msgid_plural "%d commits behind"
msgstr[0] "è½å¾Œäº† %d 則æ交"
+msgid "%d commit,"
+msgid_plural "%d commits,"
+msgstr[0] ""
+
msgid "%d commits"
msgstr ""
@@ -75,6 +94,10 @@ msgid "%d fixed test result"
msgid_plural "%d fixed test results"
msgstr[0] "%d 項已修復測試çµæžœ"
+msgid "%d inaccessible merge request"
+msgid_plural "%d inaccessible merge requests"
+msgstr[0] ""
+
msgid "%d issue"
msgid_plural "%d issues"
msgstr[0] "%d 則議題"
@@ -99,10 +122,18 @@ msgid "%d metric"
msgid_plural "%d metrics"
msgstr[0] "%d 個指標"
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+
msgid "%d more comment"
msgid_plural "%d more comments"
msgstr[0] ""
+msgid "%d second"
+msgid_plural "%d seconds"
+msgstr[0] ""
+
msgid "%d staged change"
msgid_plural "%d staged changes"
msgstr[0] "%d 個暫存變更"
@@ -118,13 +149,13 @@ msgstr[0] "為é¿å…效能å•é¡Œï¼Œå·²éš±è— %s 則é¡å¤–çš„æ交記錄。"
msgid "%{actionText} & %{openOrClose} %{noteable}"
msgstr "%{actionText} 和 %{openOrClose} %{noteable}"
-msgid "%{authorsName}'s discussion"
-msgstr "%{authorsName} 建立的討論"
+msgid "%{authorsName}'s thread"
+msgstr ""
msgid "%{commit_author_link} authored %{commit_timeago}"
msgstr "%{commit_author_link} 已在 %{commit_timeago} é€äº¤"
-msgid "%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS"
+msgid "%{count} LOC/commit"
msgstr ""
msgid "%{count} approval required from %{name}"
@@ -132,6 +163,9 @@ msgid_plural "%{count} approvals required from %{name}"
msgstr[0] ""
msgid "%{count} approvals from %{name}"
+msgstr "%{count} 個來自 %{name} 的核准"
+
+msgid "%{count} files touched"
msgstr ""
msgid "%{count} more"
@@ -154,14 +188,26 @@ msgid "%{count} pending comment"
msgid_plural "%{count} pending comments"
msgstr[0] "%{count} 則待檢閱留言"
+msgid "%{duration}ms"
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to cherry-pick this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to create a new directory again."
+msgstr ""
+
msgid "%{edit_in_new_fork_notice} Try to revert this commit again."
msgstr ""
+msgid "%{edit_in_new_fork_notice} Try to upload a file again."
+msgstr ""
+
+msgid "%{extra} more downstream pipelines"
+msgstr ""
+
msgid "%{filePath} deleted"
-msgstr "已刪除 %{filePath} 檔案"
+msgstr "已刪除 %{filePath}"
msgid "%{firstLabel} +%{labelCount} more"
msgstr "%{firstLabel}(內å«å‰©é¤˜çš„ %{labelCount} 個)"
@@ -175,6 +221,9 @@ msgstr "%{group_docs_link_start}群組%{group_docs_link_end} 讓您能跨管ç†ä
msgid "%{group_name} uses group managed accounts. You need to create a new GitLab account which will be managed by %{group_name}."
msgstr ""
+msgid "%{icon}You are about to add %{usersTag} people to the discussion. Proceed with caution."
+msgstr ""
+
msgid "%{issuableType} will be removed! Are you sure?"
msgstr "將移除 %{issuableType}ï¼ç¢ºå®šï¼Ÿ"
@@ -190,10 +239,10 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr ""
-msgid "%{level_name} visibility has been restricted by the administrator."
+msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr ""
-msgid "%{link_start}Read more%{link_end} about role permissions"
+msgid "%{listToShow}, and %{awardsListLength} more."
msgstr ""
msgid "%{loadingIcon} Started"
@@ -202,6 +251,9 @@ msgstr "%{loadingIcon} 已開始程å¼"
msgid "%{lock_path} is locked by GitLab User %{lock_user_id}"
msgstr "%{lock_path} 被 GitLab 使用者 %{lock_user_id} 鎖定"
+msgid "%{mergeLength}/%{usersLength} can merge"
+msgstr ""
+
msgid "%{mrText}, this issue will be closed automatically."
msgstr ""
@@ -262,6 +314,9 @@ msgid "%{strong_start}%{tag_count}%{strong_end} Tag"
msgid_plural "%{strong_start}%{tag_count}%{strong_end} Tags"
msgstr[0] ""
+msgid "%{tabname} changed"
+msgstr ""
+
msgid "%{text} %{files}"
msgid_plural "%{text} %{files} files"
msgstr[0] "%{text} %{files} 個檔案"
@@ -281,9 +336,21 @@ msgstr "%{unstaged} å€‹æœªæš«å­˜ä»¥åŠ %{staged} 個已暫存變更"
msgid "%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc."
msgstr "%{usage_ping_link_start}得知更多%{usage_ping_link_end}會分享給 GitLab å…¬å¸çš„資料。"
+msgid "%{userName} (cannot merge)"
+msgstr ""
+
+msgid "%{userName}'s avatar"
+msgstr ""
+
msgid "%{user_name} profile page"
msgstr ""
+msgid "%{username}'s avatar"
+msgstr ""
+
+msgid "%{value} ms"
+msgstr ""
+
msgid "%{verb} %{time_spent_value} spent time."
msgstr ""
@@ -293,6 +360,9 @@ msgstr ""
msgid "'%{source}' is not a import source"
msgstr ""
+msgid "'%{template_name}' is unknown or invalid"
+msgstr ""
+
msgid "(%d closed)"
msgid_plural "(%d closed)"
msgstr[0] ""
@@ -303,18 +373,30 @@ msgstr ""
msgid "(No changes)"
msgstr ""
+msgid "(Show all)"
+msgstr ""
+
msgid "(check progress)"
msgstr ""
msgid "(external source)"
msgstr ""
+msgid "(removed)"
+msgstr ""
+
+msgid "+ %{amount} more"
+msgstr ""
+
msgid "+ %{count} more"
msgstr "(還有 %{count} 個)"
msgid "+ %{moreCount} more"
msgstr "(還有 %{moreCount} 個)"
+msgid "+ %{numberOfHiddenAssignees} more"
+msgstr ""
+
msgid "+%{extraOptionCount} more"
msgstr ""
@@ -402,9 +484,6 @@ msgstr ""
msgid "2FA"
msgstr ""
-msgid "2FA enabled"
-msgstr "已啟用兩步驟驗證"
-
msgid "2FADevice|Registered On"
msgstr ""
@@ -453,6 +532,9 @@ msgstr "<code>\"johnsmith@example.com\": \"johnsmith@example.com\"</code> 將會
msgid "<no name set>"
msgstr ""
+msgid "<no scopes selected>"
+msgstr ""
+
msgid "<strong>%{changedFilesLength} unstaged</strong> and <strong>%{stagedFilesLength} staged</strong> changes"
msgstr "<strong>%{changedFilesLength} 個未暫存</strong>和 <strong>%{stagedFilesLength} 個已暫存</strong>變更"
@@ -489,6 +571,9 @@ msgstr ""
msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features."
msgstr ""
+msgid "A Let's Encrypt SSL certificate can not be obtained until your domain is verified."
+msgstr ""
+
msgid "A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates."
msgstr ""
@@ -525,6 +610,9 @@ msgstr ""
msgid "A regular expression that will be used to find the test coverage output in the job trace. Leave blank to disable"
msgstr "æ­£è¦è¡¨ç¤ºå¼å°‡æœƒç”¨ä¾†å°‹æ‰¾ä½œæ¥­è¿½è¹¤ä¸­çš„測試涵蓋範åœè¼¸å‡ºã€‚留空å³åœç”¨æ­¤åŠŸèƒ½ã€‚"
+msgid "A secure token that identifies an external storage request."
+msgstr ""
+
msgid "A user with write access to the source branch selected this option"
msgstr "一ä½æœ‰ä¾†æºåˆ†æ”¯å¯«å…¥æ¬Šé™çš„使用者é¸æ“‡äº†é€™å€‹é¸é …"
@@ -534,6 +622,9 @@ msgstr ""
msgid "API Token"
msgstr ""
+msgid "Abort"
+msgstr ""
+
msgid "About GitLab"
msgstr "關於 GitLab"
@@ -588,6 +679,66 @@ msgstr ""
msgid "AccessDropdown|Users"
msgstr ""
+msgid "AccessTokens|Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Are you sure?"
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any RSS or calendar URLs currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Are you sure? Any issue email addresses currently in use will stop working."
+msgstr ""
+
+msgid "AccessTokens|Created"
+msgstr ""
+
+msgid "AccessTokens|Feed token"
+msgstr ""
+
+msgid "AccessTokens|Incoming email token"
+msgstr ""
+
+msgid "AccessTokens|It cannot be used to access any other data."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can access repository static objects as if they were you. You should %{reset_link_start}reset it%{reset_link_end} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can create issues as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Keep this token secret. Anyone who gets ahold of it can read activity and issue RSS feeds or your calendar feed as if they were you. You should %{link_reset_it} if that ever happens."
+msgstr ""
+
+msgid "AccessTokens|Personal Access Tokens"
+msgstr ""
+
+msgid "AccessTokens|Static object token"
+msgstr ""
+
+msgid "AccessTokens|They are the only accepted password when you have Two-Factor Authentication (2FA) enabled."
+msgstr ""
+
+msgid "AccessTokens|You can also use personal access tokens to authenticate against Git over HTTP."
+msgstr ""
+
+msgid "AccessTokens|You can generate a personal access token for each application you use that needs access to the GitLab API."
+msgstr ""
+
+msgid "AccessTokens|Your feed token is used to authenticate you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar, and is included in those feed URLs."
+msgstr ""
+
+msgid "AccessTokens|Your incoming email token is used to authenticate you when you create a new issue by email, and is included in your personal project-specific email addresses."
+msgstr ""
+
+msgid "AccessTokens|Your static object token is used to authenticate you when repository static objects (e.g. archives, blobs, ...) are being served from an external storage."
+msgstr ""
+
+msgid "AccessTokens|reset it"
+msgstr ""
+
msgid "Account"
msgstr "帳號"
@@ -606,6 +757,9 @@ msgstr ""
msgid "Active"
msgstr "使用中"
+msgid "Active %{type} Tokens (%{token_length})"
+msgstr ""
+
msgid "Active Sessions"
msgstr "連線中的è£ç½®"
@@ -615,12 +769,19 @@ msgstr "活動"
msgid "Add"
msgstr "新增"
+msgid "Add %d issue"
+msgid_plural "Add %d issues"
+msgstr[0] ""
+
msgid "Add CHANGELOG"
msgstr ""
msgid "Add CONTRIBUTING"
msgstr ""
+msgid "Add GitLab to Slack"
+msgstr ""
+
msgid "Add Group Webhooks and GitLab Enterprise Edition."
msgstr "新增群組 Webhook å’Œ GitLab ä¼æ¥­ç‰ˆæœ¬ã€‚"
@@ -633,12 +794,27 @@ msgstr "新增 Kubernetes å¢é›†"
msgid "Add README"
msgstr ""
+msgid "Add Zoom meeting"
+msgstr ""
+
+msgid "Add a %{type} token"
+msgstr ""
+
msgid "Add a GPG key"
msgstr ""
+msgid "Add a Grafana button in the admin sidebar, monitoring section, to access a variety of statistics on the health and performance of GitLab."
+msgstr ""
+
+msgid "Add a To Do"
+msgstr ""
+
msgid "Add a bullet list"
msgstr ""
+msgid "Add a general comment to this %{noteableDisplayName}."
+msgstr ""
+
msgid "Add a general comment to this %{noteable_name}."
msgstr ""
@@ -657,9 +833,6 @@ msgstr "新增表格"
msgid "Add a task list"
msgstr ""
-msgid "Add a todo"
-msgstr "新增待辦事項"
-
msgid "Add additional text to appear in all email communications. %{character_limit} character limit"
msgstr "新增顯示於所有電å­éƒµä»¶å°è©±çš„附加文字。最多 %{character_limit} 個字元。"
@@ -669,6 +842,9 @@ msgstr ""
msgid "Add an issue"
msgstr ""
+msgid "Add approval rule"
+msgstr ""
+
msgid "Add approvers"
msgstr ""
@@ -690,6 +866,9 @@ msgstr ""
msgid "Add image comment"
msgstr "增加圖片留言"
+msgid "Add issues"
+msgstr ""
+
msgid "Add italic text"
msgstr ""
@@ -708,12 +887,21 @@ msgstr "新增應用程å¼"
msgid "Add new directory"
msgstr "新增資料夾"
+msgid "Add new member to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Add or subtract spent time"
msgstr ""
msgid "Add reaction"
msgstr "新增回應"
+msgid "Add to Slack"
+msgstr ""
+
+msgid "Add to epic"
+msgstr ""
+
msgid "Add to merge train"
msgstr ""
@@ -726,8 +914,8 @@ msgstr ""
msgid "Add to review"
msgstr "新增è¦åŠ å…¥åˆ°æª¢é–±çš„內容"
-msgid "Add todo"
-msgstr "新增待辦事項"
+msgid "Add to tree"
+msgstr ""
msgid "Add user(s) to the group:"
msgstr "將使用者加到群組:"
@@ -741,9 +929,27 @@ msgstr ""
msgid "AddMember|Too many users specified (limit is %{user_limit})"
msgstr ""
+msgid "Added"
+msgstr ""
+
+msgid "Added %{epic_ref} as child epic."
+msgstr ""
+
+msgid "Added %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Added a To Do."
+msgstr ""
+
+msgid "Added an issue to an epic."
+msgstr ""
+
msgid "Added at"
msgstr ""
+msgid "Added in this version"
+msgstr ""
+
msgid "Adding new applications is disabled in your GitLab instance. Please contact your GitLab administrator to get the permission"
msgstr "您的 GitLab 執行個體已åœç”¨ã€Œæ–°å¢žæ‡‰ç”¨ç¨‹å¼ã€åŠŸèƒ½ã€‚è«‹è¯çµ¡æ‚¨çš„ GitLab 管ç†å“¡å–得新增權é™"
@@ -759,8 +965,17 @@ msgstr ""
msgid "Adds %{epic_ref} as child epic."
msgstr ""
-msgid "Adds a todo."
-msgstr "新增待辦事項。"
+msgid "Adds %{labels} %{label_text}."
+msgstr ""
+
+msgid "Adds a To Do."
+msgstr ""
+
+msgid "Adds a Zoom meeting"
+msgstr ""
+
+msgid "Adds an issue to an epic."
+msgstr ""
msgid "Admin Area"
msgstr "管ç†å€å¡Š"
@@ -795,6 +1010,9 @@ msgstr "åœæ­¢ä½œæ¥­å¤±æ•—"
msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
msgstr "您正打算åœæ­¢æ‰€æœ‰ä½œæ¥­ï¼Œé€™å°‡æš«åœæ‰€æœ‰æ­£åœ¨åŸ·è¡Œä¸­çš„作業。"
+msgid "AdminDashboard|Error loading the statistics. Please try again"
+msgstr ""
+
msgid "AdminNote|Note"
msgstr ""
@@ -843,6 +1061,30 @@ msgstr ""
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr ""
+msgid "AdminStatistics|Active Users"
+msgstr ""
+
+msgid "AdminStatistics|Forks"
+msgstr ""
+
+msgid "AdminStatistics|Issues"
+msgstr ""
+
+msgid "AdminStatistics|Merge Requests"
+msgstr ""
+
+msgid "AdminStatistics|Milestones"
+msgstr ""
+
+msgid "AdminStatistics|Notes"
+msgstr ""
+
+msgid "AdminStatistics|SSH Keys"
+msgstr ""
+
+msgid "AdminStatistics|Snippets"
+msgstr ""
+
msgid "AdminUsers|2FA Disabled"
msgstr ""
@@ -937,6 +1179,12 @@ msgid "Alert"
msgid_plural "Alerts"
msgstr[0] "通知"
+msgid "AlertService|%{linkStart}Learn more%{linkEnd} about configuring this endpoint to receive alerts."
+msgstr ""
+
+msgid "AlertService|Each alert source must be authorized using the following URL and authorization key."
+msgstr ""
+
msgid "Alerts"
msgstr ""
@@ -946,9 +1194,15 @@ msgstr "全部"
msgid "All Members"
msgstr ""
+msgid "All branches"
+msgstr ""
+
msgid "All changes are committed"
msgstr "å·²æ交所有變更"
+msgid "All cross-project dependencies have merged"
+msgstr ""
+
msgid "All email addresses will be used to identify your commits."
msgstr ""
@@ -967,9 +1221,6 @@ msgstr ""
msgid "All projects"
msgstr ""
-msgid "All todos were marked as done."
-msgstr "所有待辦事項都標記為已完æˆã€‚"
-
msgid "All users"
msgstr "所有使用者"
@@ -1003,6 +1254,12 @@ msgstr "å…許在 Asciidoc 檔案繪製 PlantUML 圖片。"
msgid "Allow requests to the local network from hooks and services."
msgstr "å…許觸發器和æœå‹™å‘本機網路傳é€è«‹æ±‚。"
+msgid "Allow requests to the local network from system hooks"
+msgstr ""
+
+msgid "Allow requests to the local network from web hooks and services"
+msgstr ""
+
msgid "Allow this key to push to repository as well? (Default only allows pull access.)"
msgstr ""
@@ -1015,6 +1272,9 @@ msgstr "å…許使用者請求存å–權é™"
msgid "Allow users to request access if visibility is public or internal."
msgstr "若為公開或內部å¯è¦‹ï¼Œå‰‡å…許使用者請求存å–權é™ã€‚"
+msgid "Allowed email domain restriction only permitted for top-level groups"
+msgstr ""
+
msgid "Allowed to fail"
msgstr ""
@@ -1027,15 +1287,9 @@ msgstr "也被稱為「議題開啟者ã€æˆ–「信賴憑證者信任識別碼ã€
msgid "Also called \"Relying party service URL\" or \"Reply URL\""
msgstr "也稱為「信賴憑證者æœå‹™ URLã€æˆ–「回覆 URLã€"
-msgid "Alternate support URL for help page"
+msgid "Alternate support URL for help page and help dropdown"
msgstr ""
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
-msgstr "或者,你能使用 %{personal_access_token_link} 連çµã€‚當你è¦å»ºç«‹å€‹äººå­˜å–憑證時,將需è¦é¸æ“‡<code>版本庫</code>範åœï¼Œæˆ‘們æ‰èƒ½é¡¯ç¤ºå¯é€£ç·šçš„公開åŠç§äººç‰ˆæœ¬åº«åˆ—表。"
-
-msgid "Alternatively, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "或者,你能使用 %{personal_access_token_link} 連çµã€‚當你è¦å»ºç«‹å€‹äººå­˜å–憑證時,將需è¦é¸æ“‡<code>版本庫</code>範åœï¼Œæˆ‘們æ‰èƒ½é¡¯ç¤ºå¯åŒ¯å…¥çš„公開åŠç§äººç‰ˆæœ¬åº«åˆ—表。"
-
msgid "Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication"
msgstr "å…許使用者跳éŽå¼·åˆ¶è¨­å®šå…©æ­¥é©Ÿé©—證的時間(å°æ™‚)"
@@ -1048,8 +1302,8 @@ msgstr "空的 GitLab 使用者欄ä½å°‡æœƒåœ¨æ‰€æœ‰è­°é¡Œèˆ‡èªªæ˜Žçš„說明欄å
msgid "An error has occurred"
msgstr "發生了一個錯誤"
-msgid "An error occurred adding a draft to the discussion."
-msgstr "新增è‰ç¨¿åœ¨è¨Žè«–串時發生錯誤。"
+msgid "An error occurred adding a draft to the thread."
+msgstr ""
msgid "An error occurred adding a new draft."
msgstr "新增è‰ç¨¿æ™‚發生錯誤。"
@@ -1108,6 +1362,9 @@ msgstr ""
msgid "An error occurred while fetching folder content."
msgstr ""
+msgid "An error occurred while fetching issues."
+msgstr ""
+
msgid "An error occurred while fetching label colors."
msgstr ""
@@ -1150,6 +1407,9 @@ msgstr ""
msgid "An error occurred while fetching this tab."
msgstr ""
+msgid "An error occurred while generating a username. Please try again."
+msgstr ""
+
msgid "An error occurred while getting projects"
msgstr "å–得專案時發生錯誤"
@@ -1195,12 +1455,12 @@ msgstr "刪除å²è©©æ™‚發生錯誤。"
msgid "An error occurred while removing issues."
msgstr ""
-msgid "An error occurred while rendering KaTeX"
-msgstr "繪製 KaTex 時發生錯誤"
-
msgid "An error occurred while rendering preview broadcast message"
msgstr "在繪製é è¦½å»£æ’­è¨Šæ¯æ™‚發生錯誤"
+msgid "An error occurred while reordering issues."
+msgstr ""
+
msgid "An error occurred while retrieving calendar activity"
msgstr "讀å–行事曆活動時發生錯誤"
@@ -1219,6 +1479,12 @@ msgstr ""
msgid "An error occurred while subscribing to notifications."
msgstr "訂閱通知時發生錯誤。"
+msgid "An error occurred while triggering the job."
+msgstr ""
+
+msgid "An error occurred while trying to run a new pipeline for this Merge Request."
+msgstr ""
+
msgid "An error occurred while unsubscribing to notifications."
msgstr "當å–消訂閱通知時發生錯誤"
@@ -1267,6 +1533,9 @@ msgstr ""
msgid "An error occurred. Please try again."
msgstr "發生錯誤,請å†è©¦ä¸€æ¬¡ã€‚"
+msgid "An issue can be a bug, a todo or a feature request that needs to be discussed in a project. Besides, issues are searchable and filterable."
+msgstr ""
+
msgid "An unexpected error occurred while checking the project environment."
msgstr ""
@@ -1285,6 +1554,9 @@ msgstr ""
msgid "Analytics"
msgstr "分æž"
+msgid "Analytics|Timeframe"
+msgstr ""
+
msgid "Ancestors"
msgstr ""
@@ -1309,6 +1581,9 @@ msgstr ""
msgid "Any namespace"
msgstr ""
+msgid "Any user"
+msgstr ""
+
msgid "Appearance"
msgstr "外觀"
@@ -1351,6 +1626,9 @@ msgstr "應用程å¼"
msgid "Applied"
msgstr ""
+msgid "Apply a label"
+msgstr ""
+
msgid "Apply suggestion"
msgstr ""
@@ -1388,7 +1666,7 @@ msgstr[0] ""
msgid "ApprovalRule|All members with Developer role or higher and code owners (if any)"
msgstr ""
-msgid "ApprovalRule|Members"
+msgid "ApprovalRule|Approvers"
msgstr ""
msgid "ApprovalRule|Name"
@@ -1397,12 +1675,27 @@ msgstr ""
msgid "ApprovalRule|No. approvals required"
msgstr ""
+msgid "ApprovalRule|Rule name"
+msgstr ""
+
msgid "ApprovalRule|e.g. QA, Security, etc."
msgstr ""
msgid "Approvals"
msgstr ""
+msgid "Approve"
+msgstr ""
+
+msgid "Approve a merge request"
+msgstr ""
+
+msgid "Approve the current merge request."
+msgstr ""
+
+msgid "Approved the current merge request."
+msgstr ""
+
msgid "Apr"
msgstr "四月"
@@ -1439,6 +1732,15 @@ msgstr ""
msgid "Are you sure you want to cancel editing this comment?"
msgstr ""
+msgid "Are you sure you want to delete these artifacts?"
+msgstr ""
+
+msgid "Are you sure you want to delete this %{typeOfComment}?"
+msgstr ""
+
+msgid "Are you sure you want to delete this board?"
+msgstr ""
+
msgid "Are you sure you want to delete this device? This action cannot be undone."
msgstr ""
@@ -1481,6 +1783,9 @@ msgstr ""
msgid "Are you sure you want to reset the health check token?"
msgstr "確定è¦é‡è¨­å¥åº·æª¢æŸ¥å­˜å–憑證嗎?"
+msgid "Are you sure you want to revoke this %{type} Token? This action cannot be undone."
+msgstr ""
+
msgid "Are you sure you want to revoke this nickname?"
msgstr ""
@@ -1508,6 +1813,12 @@ msgstr ""
msgid "Artifact ID"
msgstr "æˆå“ ID"
+msgid "Artifact could not be deleted."
+msgstr ""
+
+msgid "Artifact was successfully deleted."
+msgstr ""
+
msgid "Artifacts"
msgstr "æˆå“"
@@ -1544,6 +1855,9 @@ msgstr ""
msgid "Assign custom color like #FF0000"
msgstr "指定自訂é¡è‰²ï¼Œä¾‹å¦‚ #FF0000"
+msgid "Assign epic"
+msgstr ""
+
msgid "Assign labels"
msgstr "指派標籤"
@@ -1562,6 +1876,9 @@ msgstr ""
msgid "Assign yourself to this issue"
msgstr ""
+msgid "Assigned %{assignee_users_sentence}."
+msgstr ""
+
msgid "Assigned Issues"
msgstr "已指派的議題"
@@ -1572,7 +1889,8 @@ msgid "Assigned to me"
msgstr "指派給我"
msgid "Assignee"
-msgstr "指派人"
+msgid_plural "%d Assignees"
+msgstr[0] ""
msgid "Assignee lists not available with your current license"
msgstr "被指派人åå–®ä¸æ”¯æ´æ‚¨ç›®å‰çš„授權"
@@ -1583,6 +1901,9 @@ msgstr "指派列表顯示了分é…給é¸å®šä½¿ç”¨è€…的所有議題"
msgid "Assignee(s)"
msgstr "指派人"
+msgid "Assigns %{assignee_users_sentence}."
+msgstr ""
+
msgid "At least one approval from a code owner is required to change files matching the respective CODEOWNER rules."
msgstr ""
@@ -1602,12 +1923,21 @@ msgstr ""
msgid "Audit Events"
msgstr "審計活動"
+msgid "Audit Events is a way to keep track of important events that happened in GitLab."
+msgstr ""
+
msgid "Aug"
msgstr "八月"
msgid "August"
msgstr "八月"
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with GitHub"
+msgstr ""
+
msgid "Authentication Log"
msgstr "驗證紀錄"
@@ -1665,6 +1995,9 @@ msgstr "啟動自動 DevOps"
msgid "Auto DevOps, runners and job artifacts"
msgstr "自動 DevOpsã€åŸ·è¡Œå™¨èˆ‡å·¥ä½œç”¢å‡ºç‰©"
+msgid "Auto License Compliance"
+msgstr ""
+
msgid "Auto-cancel redundant, pending pipelines"
msgstr "自動å–消多餘ã€å¾…處ç†çš„管線"
@@ -1686,6 +2019,18 @@ msgstr "在 %{link_to_documentation} 了解更多"
msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}"
msgstr "自動 DevOps 管線已經啟用,且會在沒有替代 CI 組態檔案å¯ç”¨çš„情æ³ä¸‹ä½¿ç”¨ã€‚%{more_information_link}"
+msgid "Autocomplete"
+msgstr ""
+
+msgid "Autocomplete description"
+msgstr ""
+
+msgid "Autocomplete hint"
+msgstr ""
+
+msgid "Autocomplete usage hint"
+msgstr ""
+
msgid "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgstr ""
@@ -1866,32 +2211,32 @@ msgstr "您將會在底下找到所有公開的群組。"
msgid "Billing"
msgstr "方案"
-msgid "BillingPlans|%{group_name} is currently on the %{plan_link} plan."
-msgstr "%{group_name} ç›®å‰ä½¿ç”¨ %{plan_link} 方案。"
+msgid "BillingPlans|%{group_name} is currently using the %{plan_link} plan."
+msgstr ""
-msgid "BillingPlans|Automatic downgrade and upgrade to some plans is currently not available."
-msgstr "在部份的方案中,ä¸æ”¯æ´è‡ªå‹•å‡ç´šæˆ–é™ç´šã€‚"
+msgid "BillingPlans|@%{user_name} you are currently using the %{plan_link} plan."
+msgstr ""
msgid "BillingPlans|Current plan"
msgstr "ç›®å‰æ–¹æ¡ˆ"
-msgid "BillingPlans|Customer Support"
-msgstr "客戶æœå‹™"
-
msgid "BillingPlans|Downgrade"
msgstr "é™ç´š"
+msgid "BillingPlans|If you would like to downgrade your plan please contact %{support_link_start}Customer Support%{support_link_end}."
+msgstr ""
+
msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}, or start a free 30-day trial of GitLab.com Gold."
msgstr "閱讀我們的 %{faq_link} 連çµï¼Œä¾†å¾—知關於æ¯å€‹æ–¹æ¡ˆçš„資訊,或是開始 30 天å…費的 GitLab.com Gold 試用版。"
-msgid "BillingPlans|Learn more about each plan by reading our %{faq_link}."
-msgstr "é€éŽé–±è®€ %{faq_link} 了解更多我們的æ¯å€‹æ–¹æ¡ˆ"
+msgid "BillingPlans|Learn more about each plan by visiting our %{pricing_page_link}."
+msgstr ""
msgid "BillingPlans|Manage plan"
msgstr "管ç†æ–¹æ¡ˆ"
-msgid "BillingPlans|Please contact %{customer_support_link} in that case."
-msgstr "在這情æ³ä¸‹ï¼Œè«‹è¯ç¹« %{customer_support_link}"
+msgid "BillingPlans|Pricing page"
+msgstr ""
msgid "BillingPlans|See all %{plan_name} features"
msgstr "檢視更多 %{plan_name} 功能"
@@ -1905,14 +2250,11 @@ msgstr "è‹¥è¦ç®¡ç†é€™å€‹ç¾¤çµ„的方案,請ç€è¦½ %{parent_billing_page_link
msgid "BillingPlans|Upgrade"
msgstr "å‡ç´š"
-msgid "BillingPlans|You are currently on the %{plan_link} plan."
-msgstr "ä½ ç›®å‰æ­£åœ¨ä½¿ç”¨æ–¹æ¡ˆ %{plan_link}"
-
msgid "BillingPlans|Your GitLab.com trial expired on %{expiration_date}. %{learn_more_text}"
msgstr "您的 GitLab.com 試用版已經於 %{expiration_date} éŽæœŸã€‚%{learn_more_text}"
-msgid "BillingPlans|Your Gold trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
-msgstr "您的 Gold 試用版將會 <strong>在 %{expiration_date} 之後éŽæœŸ</strong>。您å¯ä»¥é€éŽé–±è®€æˆ‘們的 %{features_link} 了解關於 GitLab.com Gold 的更多資訊。"
+msgid "BillingPlans|Your GitLab.com trial will <strong>expire after %{expiration_date}</strong>. You can learn more about GitLab.com Gold by reading about our %{features_link}."
+msgstr ""
msgid "BillingPlans|features"
msgstr "功能"
@@ -1929,6 +2271,9 @@ msgstr "æ¯å¹´æ”¶å– %{price_per_year}"
msgid "BillingPlans|per user"
msgstr "æ¯ä½ä½¿ç”¨è€…"
+msgid "BillingPlan|Upgrade plan"
+msgstr ""
+
msgid "Bitbucket Server Import"
msgstr "匯入 BitBucket 伺æœå™¨"
@@ -1941,29 +2286,51 @@ msgstr ""
msgid "Blocked"
msgstr ""
-msgid "Blocked by %d merge request"
-msgid_plural "Blocked by %d merge requests"
-msgstr[0] ""
-
-msgid "Blocked by <strong>%d closed</strong> merge request."
-msgid_plural "Blocked by <strong>%d closed</strong> merge requests."
-msgstr[0] ""
-
msgid "Blog"
msgstr "部è½æ ¼"
msgid "Blue helpers indicate an action to be taken."
msgstr ""
+msgid "Board name"
+msgstr ""
+
+msgid "Board scope"
+msgstr ""
+
+msgid "Board scope affects which issues are displayed for anyone who visits this board"
+msgstr ""
+
+msgid "BoardBlankState|Add default lists"
+msgstr ""
+
+msgid "BoardBlankState|Add the following default lists to your Issue Board with one click:"
+msgstr ""
+
+msgid "BoardBlankState|Nevermind, I'll use my own"
+msgstr ""
+
+msgid "BoardBlankState|Starting out with the default set of lists will get you right on the way to making the most of your board."
+msgstr ""
+
msgid "Boards"
msgstr "看æ¿"
+msgid "Boards|Collapse"
+msgstr ""
+
msgid "Boards|Edit board"
msgstr ""
+msgid "Boards|Expand"
+msgstr ""
+
msgid "Boards|View scope"
msgstr ""
+msgid "Branch"
+msgstr ""
+
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "在這個專案的版本庫中找ä¸åˆ° %{branchName} 分支。"
@@ -2126,6 +2493,9 @@ msgstr "ç€è¦½æª”案"
msgid "Browse Files"
msgstr "ç€è¦½æª”案"
+msgid "Browse artifacts"
+msgstr ""
+
msgid "Browse files"
msgstr "ç€è¦½æª”案"
@@ -2237,7 +2607,10 @@ msgstr "學習更多關於 Auto DevOps 的相關訊æ¯"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
msgstr "自動 DevOps 管線將會在沒有替代 CI 組態檔案的情æ³ä¸‹åŸ·è¡Œã€‚"
-msgid "CICD|You must add a %{kubernetes_cluster_start}Kubernetes cluster integration%{kubernetes_cluster_end} to this project with a domain in order for your deployment strategy to work correctly."
+msgid "CICD|You must add a %{base_domain_link_start}base domain%{link_end} to your %{kubernetes_cluster_link_start}Kubernetes cluster%{link_end} in order for your deployment strategy to work."
+msgstr ""
+
+msgid "CICD|You must add a %{kubernetes_cluster_link_start}Kubernetes cluster integration%{link_end} to this project with a domain in order for your deployment strategy to work correctly."
msgstr ""
msgid "CICD|group enabled"
@@ -2246,6 +2619,12 @@ msgstr ""
msgid "CICD|instance enabled"
msgstr "已啟用實例"
+msgid "CLOSED"
+msgstr ""
+
+msgid "CLOSED (MOVED)"
+msgstr ""
+
msgid "CONTRIBUTING"
msgstr ""
@@ -2273,9 +2652,15 @@ msgstr ""
msgid "Cancel"
msgstr "å–消"
+msgid "Cancel running"
+msgstr ""
+
msgid "Cancel this job"
msgstr "å–消此作業"
+msgid "Cancelling Preview"
+msgstr ""
+
msgid "Cannot be merged automatically"
msgstr "ä¸èƒ½è‡ªå‹•åˆä½µ"
@@ -2285,6 +2670,9 @@ msgstr ""
msgid "Cannot create the abuse report. This user has been blocked."
msgstr ""
+msgid "Cannot merge"
+msgstr ""
+
msgid "Cannot modify managed Kubernetes cluster"
msgstr "無法變更被管ç†çš„ Kubernetes å¢é›†"
@@ -2312,12 +2700,21 @@ msgstr ""
msgid "Change Weight"
msgstr "變更權é‡"
+msgid "Change assignee"
+msgstr ""
+
msgid "Change assignee(s)"
msgstr "變更指派人"
msgid "Change assignee(s)."
msgstr "變更指派人。"
+msgid "Change label"
+msgstr ""
+
+msgid "Change milestone"
+msgstr ""
+
msgid "Change path"
msgstr ""
@@ -2354,6 +2751,12 @@ msgstr "復原"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
msgstr "這將會建立新的æ交記錄,以還原ç¾æœ‰çš„變更。"
+msgid "Changed assignee(s)."
+msgstr ""
+
+msgid "Changed the title to \"%{title_param}\"."
+msgstr ""
+
msgid "Changes"
msgstr ""
@@ -2375,6 +2778,57 @@ msgstr "統計圖表"
msgid "Chat"
msgstr "å³æ™‚通訊"
+msgid "ChatMessage|%{project_link}: Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Branch"
+msgstr ""
+
+msgid "ChatMessage|Commit"
+msgstr ""
+
+msgid "ChatMessage|Failed job"
+msgstr ""
+
+msgid "ChatMessage|Failed stage"
+msgstr ""
+
+msgid "ChatMessage|Invalid CI config YAML file"
+msgstr ""
+
+msgid "ChatMessage|Pipeline #%{pipeline_id} %{humanized_status} in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|Pipeline %{pipeline_link} of %{ref_type} %{branch_link} by %{user_combined_name} %{humanized_status}"
+msgstr ""
+
+msgid "ChatMessage|Tag"
+msgstr ""
+
+msgid "ChatMessage|and [%{count} more](%{pipeline_failed_jobs_url})"
+msgstr ""
+
+msgid "ChatMessage|failed"
+msgstr ""
+
+msgid "ChatMessage|has failed"
+msgstr ""
+
+msgid "ChatMessage|has passed"
+msgstr ""
+
+msgid "ChatMessage|has passed with warnings"
+msgstr ""
+
+msgid "ChatMessage|in %{duration}"
+msgstr ""
+
+msgid "ChatMessage|in %{project_link}"
+msgstr ""
+
+msgid "ChatMessage|passed"
+msgstr ""
+
msgid "Check again"
msgstr ""
@@ -2417,6 +2871,9 @@ msgstr "é¸æ“‡åˆ†æ”¯æˆ–標籤(例如:%{master}),或者輸入æ交代碼
msgid "Choose a file"
msgstr ""
+msgid "Choose a group"
+msgstr ""
+
msgid "Choose a role permission"
msgstr ""
@@ -2453,9 +2910,6 @@ msgstr "é¸æ“‡ä½ æƒ³è¦é€£ç·šä¸¦åŸ·è¡Œ CI / CD 管線的版本庫。"
msgid "Choose which shards you wish to synchronize to this secondary node."
msgstr "é¸æ“‡ä½ æƒ³è¦ç”¨ä¾†èˆ‡é€™å€‹æ¬¡è¦ç¯€é»žåŒæ­¥çš„碎片 (shards)。"
-msgid "Choose your merge method, options, checks, and set up a default merge request description template."
-msgstr ""
-
msgid "CiStatusLabel|canceled"
msgstr "å–消"
@@ -2546,6 +3000,9 @@ msgstr "移除變數欄"
msgid "CiVariables|Scope"
msgstr ""
+msgid "CiVariables|Specify variable values to be used in this run. The values specified in %{linkStart}CI/CD settings%{linkEnd} will be used as default"
+msgstr ""
+
msgid "CiVariables|State"
msgstr ""
@@ -2555,6 +3012,9 @@ msgstr ""
msgid "CiVariables|Value"
msgstr ""
+msgid "CiVariables|Variables"
+msgstr ""
+
msgid "CiVariable|* (All environments)"
msgstr "*(所有環境)"
@@ -2600,15 +3060,24 @@ msgstr ""
msgid "Clear input"
msgstr ""
+msgid "Clear recent searches"
+msgstr ""
+
msgid "Clear search"
msgstr "清除æœå°‹"
msgid "Clear search input"
msgstr "清除æœå°‹ç´€éŒ„"
+msgid "Clear templates search input"
+msgstr ""
+
msgid "Clear weight"
msgstr ""
+msgid "Cleared weight."
+msgstr ""
+
msgid "Clears weight."
msgstr ""
@@ -2630,6 +3099,9 @@ msgstr "點é¸å³å´çš„ <strong>ä¸é¸æ“‡</strong> 按鈕,因為我們åªéœ€è¦
msgid "Click the button below to begin the install process by navigating to the Kubernetes page"
msgstr "點é¸ä¸‹é¢çš„按鈕,連çµåˆ° Kubernetes é é¢é–‹å§‹å®‰è£ã€‚"
+msgid "Click the image where you'd like to start a new discussion"
+msgstr ""
+
msgid "Click to expand it."
msgstr "按一下以展開。"
@@ -2666,6 +3138,9 @@ msgstr ""
msgid "Close"
msgstr "關閉"
+msgid "Close %{tabname}"
+msgstr ""
+
msgid "Close epic"
msgstr "關閉å²è©©"
@@ -2675,12 +3150,27 @@ msgstr "關閉里程碑"
msgid "Close sidebar"
msgstr ""
+msgid "Close this %{quick_action_target}"
+msgstr ""
+
msgid "Closed"
msgstr "已關閉"
msgid "Closed issues"
msgstr "已關閉議題"
+msgid "Closed this %{quick_action_target}."
+msgstr ""
+
+msgid "Closes this %{quick_action_target}."
+msgstr ""
+
+msgid "Cluster %{cluster} was used."
+msgstr ""
+
+msgid "Cluster Health"
+msgstr ""
+
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
msgstr ""
@@ -2729,6 +3219,9 @@ msgstr ""
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
msgstr "Kubernetes å¢é›†æ•´åˆçš„進階設定"
+msgid "ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
msgstr ""
@@ -2738,6 +3231,9 @@ msgstr ""
msgid "ClusterIntegration|Alternatively"
msgstr ""
+msgid "ClusterIntegration|Amazon EKS"
+msgstr ""
+
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
msgstr "嘗試連線到 Google Cloud API 時出錯,請ç¨å€™å†è©¦ã€‚"
@@ -2777,12 +3273,18 @@ msgstr ""
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
msgstr "憑證 (PEM æ ¼å¼)"
+msgid "ClusterIntegration|Choose a prefix to be used for your namespaces. Defaults to your project path."
+msgstr ""
+
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
msgstr "é¸æ“‡è¦å®‰è£åœ¨æ‚¨ Kubernetes å¢é›†ä¸Šçš„應用程å¼ã€‚Helm Tiller 需è¦å®‰è£ä»»ä½•ä¸€å€‹ä»¥ä¸‹çš„程å¼ã€‚"
msgid "ClusterIntegration|Choose which of your environments will use this cluster."
msgstr "é¸æ“‡è¦ä½¿ç”¨åœ¨æ­¤å¢é›†çš„環境。"
+msgid "ClusterIntegration|Cloud Run"
+msgstr ""
+
msgid "ClusterIntegration|Cluster health"
msgstr ""
@@ -2813,12 +3315,21 @@ msgstr "複製 Kubernetes å¢é›†å稱"
msgid "ClusterIntegration|Copy Service Token"
msgstr ""
+msgid "ClusterIntegration|Could not load regions from your AWS account"
+msgstr ""
+
msgid "ClusterIntegration|Create Kubernetes cluster"
msgstr "建立 Kubernetes å¢é›†"
+msgid "ClusterIntegration|Create cluster on"
+msgstr ""
+
msgid "ClusterIntegration|Did you know?"
msgstr "你知é“嗎?"
+msgid "ClusterIntegration|Enable Cloud Run on GKE (beta)"
+msgstr ""
+
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
msgstr "啟用或åœç”¨æ‚¨ Kubernetes å¢é›†çš„ GitLab 連線。"
@@ -2867,6 +3378,9 @@ msgstr ""
msgid "ClusterIntegration|Google Cloud Platform project"
msgstr "Google 雲端專案"
+msgid "ClusterIntegration|Google GKE"
+msgstr ""
+
msgid "ClusterIntegration|Google Kubernetes Engine"
msgstr "Google Kubernetes Engine"
@@ -2954,8 +3468,8 @@ msgstr "Kubernetes å¢é›†å·²ç¶“在 Google Kubernetes Engine 建立"
msgid "ClusterIntegration|Kubernetes cluster name"
msgstr "Kubernetes å¢é›†å稱"
-msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine. Refresh the page to see Kubernetes cluster's details"
-msgstr "Kubernetes å¢é›†å·²ç¶“æˆåŠŸåœ¨ Google Kubernetes Engine 建立,é‡æ–°æ•´ç†æ­¤é é¢å¾Œå°‡å¯çœ‹åˆ° Kubernetes å¢é›†çš„詳細資訊"
+msgid "ClusterIntegration|Kubernetes cluster was successfully created on Google Kubernetes Engine."
+msgstr ""
msgid "ClusterIntegration|Kubernetes clusters allow you to use review apps, deploy your applications, run your pipelines, and much more in an easy way."
msgstr "é€éŽ Kubernetes å¢é›†æ•´åˆï¼Œå¯ä»¥è®“你輕鬆使用程å¼ç¢¼æª¢é–±å·¥å…·ã€ä½ˆç½²æ‚¨çš„應用程å¼ã€åŸ·è¡Œç®¡ç·šç­‰ã€‚"
@@ -2969,6 +3483,9 @@ msgstr "了解有關 %{help_link_start_machine_type}機器類型%{help_link_end}
msgid "ClusterIntegration|Learn more about %{help_link_start}zones%{help_link_end}."
msgstr "了解有關 %{help_link_start}å€åŸŸ%{help_link_end} 的詳細資訊。"
+msgid "ClusterIntegration|Learn more about %{startLink}Regions%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Learn more about Kubernetes"
msgstr "了解關於 Kubernetes 的更多資訊"
@@ -2981,6 +3498,12 @@ msgstr ""
msgid "ClusterIntegration|Let's Encrypt"
msgstr ""
+msgid "ClusterIntegration|Loading IAM Roles"
+msgstr ""
+
+msgid "ClusterIntegration|Loading Regions"
+msgstr ""
+
msgid "ClusterIntegration|Machine type"
msgstr "機器類型"
@@ -2990,6 +3513,9 @@ msgstr "請確èªæ‚¨çš„帳號 %{link_to_requirements} 是å¦å¯ä»¥å»ºç«‹ Kuberne
msgid "ClusterIntegration|Manage your Kubernetes cluster by visiting %{link_gke}"
msgstr "請造訪 %{link_gke} 管ç†æ‚¨çš„ Kubernetes å¢é›†"
+msgid "ClusterIntegration|No IAM Roles found"
+msgstr ""
+
msgid "ClusterIntegration|No machine types matched your search"
msgstr "沒有機器類型符åˆæ‚¨çš„æœå°‹"
@@ -2999,6 +3525,9 @@ msgstr "找ä¸åˆ°ä»»ä½•å°ˆæ¡ˆ"
msgid "ClusterIntegration|No projects matched your search"
msgstr "沒有任何專案符åˆæ‚¨çš„æœå°‹"
+msgid "ClusterIntegration|No region found"
+msgstr ""
+
msgid "ClusterIntegration|No zones matched your search"
msgstr "沒有å€åŸŸç¬¦åˆæ‚¨çš„æœå°‹"
@@ -3023,6 +3552,9 @@ msgstr "專案å¢é›†"
msgid "ClusterIntegration|Project namespace (optional, unique)"
msgstr "專案命å空間(é¸å¡«ï¼Œä¸å¯é‡è¤‡ï¼‰"
+msgid "ClusterIntegration|Project namespace prefix (optional, unique)"
+msgstr ""
+
msgid "ClusterIntegration|Prometheus"
msgstr "Prometheus"
@@ -3035,6 +3567,9 @@ msgstr "啟用 RBAC å¢é›†"
msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration."
msgstr "閱讀 GitLab 關於 Kubernetes å¢é›†æ•´åˆçš„資訊:%{link_to_help_page} 。"
+msgid "ClusterIntegration|Region"
+msgstr ""
+
msgid "ClusterIntegration|Remove Kubernetes cluster integration"
msgstr "移除 Kubernetes å¢é›†æ•´åˆ"
@@ -3053,15 +3588,24 @@ msgstr "請求開始安è£å¤±æ•—"
msgid "ClusterIntegration|Request to begin uninstalling failed"
msgstr ""
+msgid "ClusterIntegration|Role name"
+msgstr ""
+
msgid "ClusterIntegration|Save changes"
msgstr "儲存變更"
+msgid "ClusterIntegration|Search IAM Roles"
+msgstr ""
+
msgid "ClusterIntegration|Search machine types"
msgstr "æœå°‹æ©Ÿå™¨é¡žåž‹"
msgid "ClusterIntegration|Search projects"
msgstr "æœå°‹å°ˆæ¡ˆ"
+msgid "ClusterIntegration|Search regions"
+msgstr ""
+
msgid "ClusterIntegration|Search zones"
msgstr "æœå°‹å€åŸŸ"
@@ -3080,6 +3624,9 @@ msgstr "é¸æ“‡å°ˆæ¡ˆèˆ‡ä½ç½®ä¾†é¸æ“‡æ©Ÿå™¨é¡žåž‹"
msgid "ClusterIntegration|Select project to choose zone"
msgstr "é¸æ“‡å°ˆæ¡ˆä¾†é¸æ“‡æ™‚å€"
+msgid "ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}."
+msgstr ""
+
msgid "ClusterIntegration|Select zone"
msgstr "é¸æ“‡å€åŸŸ"
@@ -3119,18 +3666,24 @@ msgstr ""
msgid "ClusterIntegration|The URL used to access the Kubernetes API."
msgstr ""
-msgid "ClusterIntegration|The associated IP will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated IP and all deployed services will be deleted and cannot be restored. Uninstalling Knative will also remove Istio from your cluster. This will not effect any other applications."
msgstr ""
-msgid "ClusterIntegration|The associated certifcate will be deleted and cannot be restored."
+msgid "ClusterIntegration|The associated Tiller pod, the %{gitlabManagedAppsNamespace} namespace, and all of its resources will be deleted and cannot be restored."
msgstr ""
msgid "ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored."
msgstr ""
+msgid "ClusterIntegration|The associated private key will be deleted and cannot be restored."
+msgstr ""
+
msgid "ClusterIntegration|The endpoint is in the process of being assigned. Please check your Kubernetes cluster or Quotas on Google Kubernetes Engine if it takes a long time."
msgstr ""
+msgid "ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, pod logs, and Web terminals."
+msgstr ""
+
msgid "ClusterIntegration|There was a problem authenticating with your cluster. Please ensure your CA Certificate and Token are valid."
msgstr ""
@@ -3152,6 +3705,9 @@ msgstr ""
msgid "ClusterIntegration|Update failed. Please check the logs and try again."
msgstr ""
+msgid "ClusterIntegration|Uses the Cloud Run, Istio, and HTTP Load Balancing addons for this cluster."
+msgstr ""
+
msgid "ClusterIntegration|Validating project billing status"
msgstr "正在驗證è£ç½®è¨ˆè²»ç‹€æ…‹"
@@ -3188,18 +3744,24 @@ msgstr "文件"
msgid "ClusterIntegration|help page"
msgstr "說明é é¢"
+msgid "ClusterIntegration|installed via %{installed_via}"
+msgstr ""
+
msgid "ClusterIntegration|meets the requirements"
msgstr "é”到需求"
msgid "ClusterIntegration|pricing"
msgstr ""
-msgid "ClusterIntegration|properly configured"
-msgstr "設定正確"
-
msgid "ClusterIntegration|sign up"
msgstr "註冊"
+msgid "ClusterIntergation|Select a region"
+msgstr ""
+
+msgid "ClusterIntergation|Select role name"
+msgstr ""
+
msgid "Code"
msgstr ""
@@ -3227,15 +3789,24 @@ msgstr ""
msgid "Collapse sidebar"
msgstr "收起å´é‚Šæ¬„"
+msgid "Collector hostname"
+msgstr ""
+
msgid "ComboSearch is not defined"
msgstr ""
+msgid "Command"
+msgstr ""
+
msgid "Command line instructions"
msgstr ""
msgid "Commands applied"
msgstr ""
+msgid "Commands did not apply"
+msgstr ""
+
msgid "Comment"
msgstr "留言"
@@ -3245,11 +3816,11 @@ msgstr "留言並關閉 %{noteable_name}"
msgid "Comment & reopen %{noteable_name}"
msgstr "留言並é‡æ–°é–‹å•Ÿ %{noteable_name}"
-msgid "Comment & resolve discussion"
-msgstr "留言並關閉討論"
+msgid "Comment & resolve thread"
+msgstr ""
-msgid "Comment & unresolve discussion"
-msgstr "留言並é‡æ–°è¨Žè«–"
+msgid "Comment & unresolve thread"
+msgstr ""
msgid "Comment form position"
msgstr "留言框ä½ç½®"
@@ -3257,6 +3828,9 @@ msgstr "留言框ä½ç½®"
msgid "Comment is being updated"
msgstr ""
+msgid "Comment/Reply (quoting selected text)"
+msgstr ""
+
msgid "Comments"
msgstr "留言"
@@ -3267,6 +3841,9 @@ msgstr[0] "æ交記錄"
msgid "Commit %{commit_id}"
msgstr ""
+msgid "Commit (when editing commit message)"
+msgstr ""
+
msgid "Commit Message"
msgstr "æ交訊æ¯"
@@ -3363,12 +3940,18 @@ msgstr "目標"
msgid "CompareBranches|There isn't anything to compare."
msgstr "沒有å¯æ¯”較的內容。"
+msgid "Complete"
+msgstr ""
+
msgid "Confidential"
msgstr "機密"
msgid "Confidentiality"
msgstr "機密性"
+msgid "Configuration"
+msgstr ""
+
msgid "Configure GitLab runners to start using the Web Terminal. %{helpStart}Learn more.%{helpEnd}"
msgstr ""
@@ -3378,6 +3961,9 @@ msgstr "設定 Gitaly 延é²éŽä¹…。"
msgid "Configure Let's Encrypt"
msgstr ""
+msgid "Configure Prometheus"
+msgstr ""
+
msgid "Configure Tracing"
msgstr "設定追蹤"
@@ -3387,6 +3973,9 @@ msgstr ""
msgid "Configure automatic git checks and housekeeping on repositories."
msgstr "於版本庫上設定自動 Git 檢查與內務管ç†"
+msgid "Configure existing installation"
+msgstr ""
+
msgid "Configure limits for web and API requests."
msgstr "為網路與 API 請求設定é™åˆ¶ã€‚"
@@ -3453,32 +4042,39 @@ msgstr "容器登錄表"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|First log in to GitLab&rsquo;s Container Registry using your GitLab username and password. If you have %{link_2fa} you need to use a %{link_token}:"
-msgstr "請先使用您的 GitLab 帳號登入到 GitLab 的容器登錄表。若您有設定 %{link_2fa} ,則必須使用 %{link_token}:"
+msgid "ContainerRegistry|Container Registry"
+msgstr ""
-msgid "ContainerRegistry|GitLab supports up to 3 levels of image names. The following examples of images are valid for your project:"
-msgstr "GitLab 支æ´å¤šé” 3 級的映åƒå稱。以下的映åƒç¯„例å°æ‚¨çš„專案有效:"
+msgid "ContainerRegistry|Copy build command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|How to use the Container Registry"
-msgstr "如何使用容器登錄表"
+msgid "ContainerRegistry|Copy push command to clipboard"
+msgstr ""
-msgid "ContainerRegistry|Last Updated"
+msgid "ContainerRegistry|Docker connection error"
msgstr ""
-msgid "ContainerRegistry|Learn more about"
-msgstr "了解更多"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
msgid "ContainerRegistry|No tags in Container Registry for this container image."
msgstr "在這個容器登錄表中ä¸åŒ…å«æœ‰æ¨™ç±¤çš„容器映åƒ"
-msgid "ContainerRegistry|Once you log in, you&rsquo;re free to create and upload a container image using the common %{build} and %{push} commands"
-msgstr "當您登入後,您å¯ä»¥é€éŽå¸¸è¦‹çš„ %{build} å’Œ %{push} 指令自由建立和上傳容器映åƒ"
+msgid "ContainerRegistry|Quick Start"
+msgstr ""
+
+msgid "ContainerRegistry|Remove image"
+msgid_plural "ContainerRegistry|Remove images"
+msgstr[0] ""
+
+msgid "ContainerRegistry|Remove image(s) and tags"
+msgstr ""
msgid "ContainerRegistry|Remove repository"
msgstr "移除版本庫"
-msgid "ContainerRegistry|Remove tag"
-msgstr "移除標籤"
+msgid "ContainerRegistry|Remove selected images"
+msgstr ""
msgid "ContainerRegistry|Size"
msgstr "大å°"
@@ -3489,14 +4085,29 @@ msgstr "標籤"
msgid "ContainerRegistry|Tag ID"
msgstr "標籤 ID"
-msgid "ContainerRegistry|Use different image names"
-msgstr "使用ä¸åŒçš„映åƒå稱"
+msgid "ContainerRegistry|There are no container images stored for this project"
+msgstr ""
-msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images."
-msgstr "å°‡ Docker 容器登錄表整åˆåˆ° GitLab 後,æ¯å€‹å°ˆæ¡ˆéƒ½èƒ½æœ‰è‡ªå·±çš„空間來儲存 Docker 映åƒæª”。"
+msgid "ContainerRegistry|We are having trouble connecting to Docker, which could be due to an issue with your project name or path. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
-msgid "ContainerRegistry|You can also use a %{deploy_token} for read-only access to the registry images."
-msgstr "您也å¯ä»¥ä½¿ç”¨ %{deploy_token} 為 Registry 映åƒæª”進行唯讀存å–"
+msgid "ContainerRegistry|With the Container Registry, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|With the Docker Container Registry integrated into GitLab, every project can have its own space to store its Docker images. %{docLinkStart}More Information%{docLinkEnd}"
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete <b>%{count}</b> images. This will delete the images and all tags pointing to them."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to delete the image <b>%{title}</b>. This will delete the image and all tags pointing to this image."
+msgstr ""
+
+msgid "ContainerRegistry|You are about to remove repository <b>%{title}</b>. Once you confirm, this repository will be permanently deleted."
+msgstr ""
+
+msgid "ContainerRegistry|You can add an image to this registry with the following commands:"
+msgstr ""
msgid "Contains %{count} blobs of images (%{size})"
msgstr ""
@@ -3558,15 +4169,24 @@ msgstr "控制此次è¦ç¯€é»žçš„版本庫最大並行é‡"
msgid "ConvDev Index"
msgstr "ConvDev 索引"
+msgid "Cookie domain"
+msgstr ""
+
msgid "Copied"
msgstr ""
+msgid "Copied labels and milestone from %{source_issuable_reference}."
+msgstr ""
+
msgid "Copy %{http_label} clone URL"
msgstr ""
msgid "Copy %{protocol} clone URL"
msgstr "複製 %{protocol} 的複製 (clone) URL"
+msgid "Copy %{proxy_url} to clipboard"
+msgstr ""
+
msgid "Copy ID to clipboard"
msgstr "複製 ID 到剪貼簿"
@@ -3603,6 +4223,9 @@ msgstr ""
msgid "Copy link"
msgstr "複製連çµ"
+msgid "Copy personal access token to clipboard"
+msgstr ""
+
msgid "Copy reference to clipboard"
msgstr "複製åƒç…§åˆ°å‰ªè²¼ç°¿"
@@ -3618,6 +4241,12 @@ msgstr "複製至剪貼簿"
msgid "Copy token to clipboard"
msgstr "複製憑證到剪貼簿"
+msgid "Could not add admins as members"
+msgstr ""
+
+msgid "Could not add prometheus URL to whitelist"
+msgstr ""
+
msgid "Could not authorize chat nickname. Try again!"
msgstr ""
@@ -3633,27 +4262,39 @@ msgstr ""
msgid "Could not create Wiki Repository at this time. Please try again later."
msgstr ""
+msgid "Could not create group"
+msgstr ""
+
+msgid "Could not create project"
+msgstr ""
+
msgid "Could not delete chat nickname %{chat_name}."
msgstr ""
msgid "Could not remove the trigger."
msgstr ""
-msgid "Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
-msgstr "無法讀管線狀態。有關故障排除的步驟,請åƒè€ƒ%{linkStart}檔案%{linkEnd}。"
-
msgid "Could not revoke impersonation token %{token_name}."
msgstr ""
msgid "Could not revoke personal access token %{personal_access_token_name}."
msgstr ""
+msgid "Could not save project ID"
+msgstr ""
+
+msgid "Could not save prometheus manual configuration"
+msgstr ""
+
msgid "Coverage"
msgstr ""
msgid "Create"
msgstr "建立"
+msgid "Create %{type} token"
+msgstr ""
+
msgid "Create New Directory"
msgstr "建立新資料夾"
@@ -3666,7 +4307,7 @@ msgstr ""
msgid "Create a local proxy for storing frequently used upstream images. %{link_start}Learn more%{link_end} about dependency proxies."
msgstr ""
-msgid "Create a merge request."
+msgid "Create a merge request"
msgstr ""
msgid "Create a new branch"
@@ -3687,12 +4328,24 @@ msgstr "建立您帳號的個人存å–憑證以é€éŽ %{protocol} 上傳或下è¼
msgid "Create an issue. Issues are created for each alert triggered."
msgstr ""
+msgid "Create and provide your GitHub %{link_start}Personal Access Token%{link_end}. You will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
+msgstr ""
+
+msgid "Create board"
+msgstr ""
+
msgid "Create branch"
msgstr "建立分支"
msgid "Create commit"
msgstr "建立æ交"
+msgid "Create confidential merge request"
+msgstr ""
+
+msgid "Create confidential merge request and branch"
+msgstr ""
+
msgid "Create directory"
msgstr "建立資料夾"
@@ -3723,6 +4376,9 @@ msgstr "建立åˆä½µè«‹æ±‚åŠåˆ†æ”¯"
msgid "Create milestone"
msgstr "建立里程碑"
+msgid "Create new board"
+msgstr ""
+
msgid "Create new branch"
msgstr "新增分支"
@@ -3741,6 +4397,9 @@ msgstr "建立新標籤"
msgid "Create new..."
msgstr "建立…"
+msgid "Create project"
+msgstr ""
+
msgid "Create project label"
msgstr "建立專案標籤"
@@ -3765,6 +4424,12 @@ msgstr "已建立"
msgid "Created At"
msgstr "建立於"
+msgid "Created a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Created branch '%{branch_name}' and a merge request to resolve this issue."
+msgstr ""
+
msgid "Created by me"
msgstr "由我建立"
@@ -3786,18 +4451,30 @@ msgstr "建立於"
msgid "Created on:"
msgstr "建立於:"
-msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue"
+msgid "Creates a branch and a merge request to resolve this issue."
+msgstr ""
+
+msgid "Creates branch '%{branch_name}' and a merge request to resolve this issue."
msgstr ""
msgid "Creating epic"
msgstr "正在建​立å²è©©"
+msgid "Creating graphs uses the data from the Prometheus server. If this takes a long time, ensure that data is available."
+msgstr ""
+
+msgid "Creation date"
+msgstr ""
+
msgid "Cron Timezone"
msgstr "Cron 時å€"
msgid "Cron syntax"
msgstr "Cron 語法"
+msgid "Cross-project dependencies"
+msgstr ""
+
msgid "Current Branch"
msgstr "ç›®å‰åˆ†æ”¯"
@@ -3834,6 +4511,45 @@ msgstr "自訂專案模æ¿"
msgid "Custom project templates have not been set up for groups that you are a member of. They are enabled from a group’s settings page. Contact your group’s Owner or Maintainer to setup custom project templates."
msgstr ""
+msgid "CustomCycleAnalytics|Add a stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Add stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Enter a name for the stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Name"
+msgstr ""
+
+msgid "CustomCycleAnalytics|New stage"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Please select a start event first"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Select stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event changed, please select a valid stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Start event label"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event"
+msgstr ""
+
+msgid "CustomCycleAnalytics|Stop event label"
+msgstr ""
+
msgid "Customize colors"
msgstr "自訂é¡è‰²"
@@ -3843,18 +4559,51 @@ msgstr "自訂把 FogBugz é›»å­ä¿¡ç®±ç¶²å€å’Œä½¿ç”¨è€…å稱匯入到 GitLab ç
msgid "Customize how Google Code email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import."
msgstr "自訂把 Google Code çš„é›»å­ä¿¡ç®±ç¶²å€å’Œä½¿ç”¨è€…å稱匯入到 GitLab çš„æ–¹å¼ã€‚下個步驟中,您將å¯ä»¥é¸æ“‡æ¬²åŒ¯å…¥çš„專案。"
+msgid "Customize icon"
+msgstr ""
+
msgid "Customize language and region related settings."
msgstr ""
+msgid "Customize name"
+msgstr ""
+
msgid "Customize your pipeline configuration, view your pipeline status and coverage report."
msgstr "å­˜å–您執行器憑證,自訂您的管線設定,並檢視你的æµæ°´ç¾ç‹€æ…‹åŠæ¸¬è©¦æ¶µè“‹çŽ‡å ±å‘Šã€‚"
msgid "Cycle Analytics"
msgstr "週期分æž"
+msgid "Cycle Analytics can help you determine your team’s velocity"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "「週期統計ã€æ供了您專案從想法到生產環境所花費時間的概覽"
+msgid "CycleAnalyticsEvent|Issue created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first associated with a milestone or issue first added to a board"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Issue first mentioned in a commit"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request created"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request first deployed to production"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build finish time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request last build start time"
+msgstr ""
+
+msgid "CycleAnalyticsEvent|Merge request merged"
+msgstr ""
+
msgid "CycleAnalyticsStage|Code"
msgstr "程å¼ç¢¼"
@@ -3876,6 +4625,29 @@ msgstr "試營é‹"
msgid "CycleAnalyticsStage|Test"
msgstr "測試"
+msgid "CycleAnalytics|%{projectName}"
+msgid_plural "CycleAnalytics|%d projects selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|%{stageName}"
+msgid_plural "CycleAnalytics|%d stages selected"
+msgstr[0] ""
+
+msgid "CycleAnalytics|All stages"
+msgstr ""
+
+msgid "CycleAnalytics|Stages"
+msgstr ""
+
+msgid "CycleAnalytics|group dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|project dropdown filter"
+msgstr ""
+
+msgid "CycleAnalytics|stage dropdown"
+msgstr ""
+
msgid "DNS"
msgstr ""
@@ -3900,7 +4672,7 @@ msgstr ""
msgid "Dashboard|%{firstProject}, %{rest}, and %{secondProject}"
msgstr ""
-msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Gold plan."
+msgid "Dashboard|Unable to add %{invalidProjects}. This dashboard is available for public projects, and private projects in groups with a Silver plan."
msgstr ""
msgid "Data is still calculating..."
@@ -3921,6 +4693,9 @@ msgstr ""
msgid "DayTitle|W"
msgstr ""
+msgid "Days"
+msgstr ""
+
msgid "Debug"
msgstr "除錯"
@@ -3942,12 +4717,21 @@ msgstr "é è¨­åˆ†æ”¯"
msgid "Default artifacts expiration"
msgstr ""
+msgid "Default branch"
+msgstr ""
+
+msgid "Default branch and protected branches"
+msgstr ""
+
msgid "Default classification label"
msgstr "é è¨­åˆ†é¡žæ¨™ç±¤"
msgid "Default description template for issues"
msgstr ""
+msgid "Default description template for merge requests"
+msgstr ""
+
msgid "Default first day of the week"
msgstr ""
@@ -3990,12 +4774,21 @@ msgstr "已延é²"
msgid "Delete"
msgstr "刪除"
+msgid "Delete Comment"
+msgstr ""
+
msgid "Delete Package"
msgstr "刪除套件"
msgid "Delete Snippet"
msgstr "刪除片段"
+msgid "Delete artifacts"
+msgstr ""
+
+msgid "Delete board"
+msgstr ""
+
msgid "Delete comment"
msgstr "刪除留言"
@@ -4032,6 +4825,9 @@ msgstr "已刪除"
msgid "Deleted chat nickname: %{chat_name}!"
msgstr ""
+msgid "Deleted in this version"
+msgstr ""
+
msgid "Deleting the license failed."
msgstr ""
@@ -4050,6 +4846,20 @@ msgstr "拒絕"
msgid "Dependencies"
msgstr ""
+msgid "Dependencies|%d additional vulnerability not shown"
+msgid_plural "Dependencies|%d additional vulnerabilities not shown"
+msgstr[0] ""
+
+msgid "Dependencies|%d vulnerability"
+msgid_plural "Dependencies|%d vulnerabilities"
+msgstr[0] ""
+
+msgid "Dependencies|%{remainingLicensesCount} more"
+msgstr ""
+
+msgid "Dependencies|All"
+msgstr ""
+
msgid "Dependencies|Component"
msgstr ""
@@ -4062,12 +4872,21 @@ msgstr ""
msgid "Dependencies|Job failed to generate the dependency list"
msgstr ""
+msgid "Dependencies|License"
+msgstr ""
+
msgid "Dependencies|Location"
msgstr ""
msgid "Dependencies|Packager"
msgstr ""
+msgid "Dependencies|Safe"
+msgstr ""
+
+msgid "Dependencies|Status"
+msgstr ""
+
msgid "Dependencies|The %{codeStartTag}dependency_scanning%{codeEndTag} job has failed and cannot generate the list. Please ensure the job is running properly and run the pipeline again."
msgstr ""
@@ -4077,6 +4896,9 @@ msgstr ""
msgid "Dependencies|Version"
msgstr ""
+msgid "Dependencies|Vulnerable components"
+msgstr ""
+
msgid "Dependency List"
msgstr ""
@@ -4095,6 +4917,14 @@ msgstr ""
msgid "DependencyProxy|Toggle Dependency Proxy"
msgstr ""
+msgid "Depends on %d merge request being merged"
+msgid_plural "Depends on %d merge requests being merged"
+msgstr[0] ""
+
+msgid "Depends on <strong>%d closed</strong> merge request."
+msgid_plural "Depends on <strong>%d closed</strong> merge requests."
+msgstr[0] ""
+
msgid "Deploy"
msgid_plural "Deploys"
msgstr[0] "佈署"
@@ -4105,6 +4935,15 @@ msgstr "佈署金鑰"
msgid "Deploy key was successfully updated."
msgstr ""
+msgid "Deploy progress not found. To see pods, ensure your environment matches %{linkStart}deploy board criteria%{linkEnd}."
+msgstr ""
+
+msgid "Deploy to..."
+msgstr ""
+
+msgid "DeployBoard|Matching on the %{appLabel} label has been removed for deploy boards. To see all instances on your board, you must update your chart and redeploy."
+msgstr ""
+
msgid "DeployKeys|+%{count} others"
msgstr "其他 +%{count} 個"
@@ -4177,6 +5016,9 @@ msgstr "建立佈署憑證"
msgid "DeployTokens|Created"
msgstr "已建立"
+msgid "DeployTokens|Default format is \"gitlab+deploy-token-{n}\". Enter custom username if you want to change it."
+msgstr ""
+
msgid "DeployTokens|Deploy Tokens"
msgstr "佈署憑證"
@@ -4228,6 +5070,9 @@ msgstr "您的新專案佈署憑證已經建立。"
msgid "Deployed"
msgstr ""
+msgid "Deployed %{deployedSince}"
+msgstr ""
+
msgid "Deployed to"
msgstr "已佈署到"
@@ -4252,9 +5097,30 @@ msgstr "《æ述模æ¿ã€‹å…許你為您專案的議題或åˆä½µè«‹æ±‚之æè¿°
msgid "Description:"
msgstr "說明:"
+msgid "Descriptive label"
+msgstr ""
+
+msgid "Deselect all"
+msgstr ""
+
msgid "DesignManagement|%{current_design} of %{designs_count}"
msgstr ""
+msgid "DesignManagement|Add designs"
+msgstr ""
+
+msgid "DesignManagement|Adding a design with the same filename replaces the file in a new version."
+msgstr ""
+
+msgid "DesignManagement|An error occurred while loading designs. Please try again."
+msgstr ""
+
+msgid "DesignManagement|Could not add a new comment. Please try again"
+msgstr ""
+
+msgid "DesignManagement|Could not create new discussion, please try again."
+msgstr ""
+
msgid "DesignManagement|Could not find design, please try again."
msgstr ""
@@ -4270,6 +5136,12 @@ msgstr ""
msgid "DesignManagement|Go to previous design"
msgstr ""
+msgid "DesignManagement|Requested design version does not exist"
+msgstr ""
+
+msgid "DesignManagement|Requested design version does not exist. Showing latest version instead"
+msgstr ""
+
msgid "DesignManagement|The maximum number of designs allowed to be uploaded is %{upload_limit}. Please try again."
msgstr ""
@@ -4279,9 +5151,6 @@ msgstr ""
msgid "DesignManagement|Upload and view the latest designs for this issue. Consistent and easy to find, so everyone is up to date."
msgstr ""
-msgid "DesignManagement|Upload designs"
-msgstr ""
-
msgid "Designs"
msgstr ""
@@ -4303,9 +5172,15 @@ msgstr "差異內容é™åˆ¶"
msgid "Diff limits"
msgstr "差異é™åˆ¶"
+msgid "DiffsCompareBaseBranch|(base)"
+msgstr ""
+
msgid "Diffs|No file name available"
msgstr "沒有å¯ç”¨çš„檔案å稱"
+msgid "Diffs|Show all lines"
+msgstr ""
+
msgid "Diffs|Something went wrong while fetching diff lines."
msgstr "讀å–差異檔時發生了一些錯誤."
@@ -4318,6 +5193,9 @@ msgstr "資料夾å稱"
msgid "Disable"
msgstr "åœç”¨"
+msgid "Disable email notifications"
+msgstr ""
+
msgid "Disable for this project"
msgstr "為此專案åœç”¨"
@@ -4375,6 +5253,12 @@ msgstr ""
msgid "Discuss a specific suggestion or question that needs to be resolved"
msgstr ""
+msgid "Discuss a specific suggestion or question that needs to be resolved."
+msgstr ""
+
+msgid "Discuss a specific suggestion or question."
+msgstr ""
+
msgid "Discussion"
msgstr "討論"
@@ -4405,6 +5289,9 @@ msgstr ""
msgid "Dismissed on pipeline %{pipelineLink} at %{projectLink}"
msgstr ""
+msgid "Display name"
+msgstr ""
+
msgid "Do you want to customize how Google Code email addresses and usernames are imported into GitLab?"
msgstr "是å¦è¦è‡ªè¨‚å°‡ Google Code çš„é›»å­ä¿¡ç®±ä½å€å’Œä½¿ç”¨è€…å稱匯入到 GitLab çš„æ–¹å¼ï¼Ÿ"
@@ -4414,6 +5301,9 @@ msgstr ""
msgid "Documentation for popular identity providers"
msgstr "知å身份æ供商的檔案"
+msgid "Doing"
+msgstr ""
+
msgid "Domain"
msgstr "網域"
@@ -4435,9 +5325,15 @@ msgstr "完æˆ"
msgid "Download"
msgstr "下載"
+msgid "Download CSV"
+msgstr ""
+
msgid "Download artifacts"
msgstr ""
+msgid "Download as"
+msgstr ""
+
msgid "Download asset"
msgstr ""
@@ -4447,6 +5343,9 @@ msgstr ""
msgid "Download export"
msgstr ""
+msgid "Download image"
+msgstr ""
+
msgid "Download license"
msgstr ""
@@ -4483,9 +5382,15 @@ msgstr "æ¯å€‹åŸ·è¡Œå™¨å¯ä»¥è™•æ–¼ä»¥ä¸‹ç‹€æ…‹ä¹‹ä¸€ï¼š"
msgid "Edit"
msgstr "編輯"
+msgid "Edit %{issuable}"
+msgstr ""
+
msgid "Edit %{name}"
msgstr ""
+msgid "Edit Comment"
+msgstr ""
+
msgid "Edit Deploy Key"
msgstr ""
@@ -4507,12 +5412,21 @@ msgstr "編輯片段"
msgid "Edit application"
msgstr "編輯應用程å¼"
+msgid "Edit board"
+msgstr ""
+
msgid "Edit comment"
msgstr "編輯留言"
+msgid "Edit description"
+msgstr ""
+
msgid "Edit environment"
msgstr ""
+msgid "Edit epic description"
+msgstr ""
+
msgid "Edit file"
msgstr ""
@@ -4531,6 +5445,18 @@ msgstr ""
msgid "Edit public deploy key"
msgstr ""
+msgid "Edit stage"
+msgstr ""
+
+msgid "Edit wiki page"
+msgstr ""
+
+msgid "Edit your most recent comment in a thread (from an empty textarea)"
+msgstr ""
+
+msgid "Editing"
+msgstr ""
+
msgid "Elasticsearch"
msgstr "Elasticsearch"
@@ -4555,6 +5481,9 @@ msgstr "é›»å­ä¿¡ç®±"
msgid "Email address"
msgstr ""
+msgid "Email domain is not editable in subgroups. Value inherited from top-level parent group."
+msgstr ""
+
msgid "Email patch"
msgstr "é›»å­éƒµä»¶è£œä¸"
@@ -4639,12 +5568,15 @@ msgstr "啟用 Pseudonymizer 的資料收集"
msgid "Enable SAML authentication for this group"
msgstr "為此群組啟用 SAML 驗證"
-msgid "Enable Sentry for error reporting and logging."
-msgstr "為錯誤報告與記錄啟用 Sentry。"
+msgid "Enable access to Grafana"
+msgstr ""
msgid "Enable access to the Performance Bar for a given group."
msgstr ""
+msgid "Enable and configure Grafana."
+msgstr ""
+
msgid "Enable and configure InfluxDB metrics."
msgstr "啟用與設定 InfluxDB 指標。"
@@ -4657,6 +5589,9 @@ msgstr "使用外部æœå‹™é€²è¡Œåˆ†é¡žæŽ§åˆ¶"
msgid "Enable error tracking"
msgstr ""
+msgid "Enable feature to choose access level"
+msgstr ""
+
msgid "Enable for this project"
msgstr "為此專案啟用"
@@ -4675,12 +5610,18 @@ msgstr "啟用或åœç”¨ Pseudonymizer 的資料收集。"
msgid "Enable or disable version check and usage ping."
msgstr "啟用或åœç”¨ç‰ˆæœ¬æª¢æŸ¥å’Œä½¿ç”¨ ping。"
-msgid "Enable reCAPTCHA or Akismet and set IP limits."
-msgstr "啟用 reCAPTCHA 或 Akismet 並設定 IP 上é™ã€‚"
+msgid "Enable proxy"
+msgstr ""
+
+msgid "Enable reCAPTCHA or Akismet and set IP limits. For reCAPTCHA, we currently only support %{recaptcha_v2_link_start}v2%{recaptcha_v2_link_end}"
+msgstr ""
msgid "Enable shared Runners"
msgstr ""
+msgid "Enable snowplow tracking"
+msgstr ""
+
msgid "Enable two-factor authentication"
msgstr ""
@@ -4714,18 +5655,36 @@ msgstr "æ–¼ (UTC) çµæŸ"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Ensure connectivity is available from the GitLab server to the Prometheus server"
+msgstr ""
+
+msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster."
+msgstr ""
+
msgid "Enter IP address range"
msgstr ""
+msgid "Enter a number"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
+msgid "Enter board name"
+msgstr ""
+
+msgid "Enter domain"
+msgstr ""
+
msgid "Enter in your Bitbucket Server URL and personal access token below"
msgstr "在底下輸入您的 BitBucket 伺æœå™¨ URL 和個人存å–憑證"
msgid "Enter in your Phabricator Server URL and personal access token below"
msgstr ""
+msgid "Enter merge request URLs"
+msgstr ""
+
msgid "Enter the issue description"
msgstr "請輸入議題說明"
@@ -4738,9 +5697,18 @@ msgstr "請輸入åˆä½µè«‹æ±‚說明"
msgid "Enter the merge request title"
msgstr "請請輸入åˆä½µè«‹æ±‚標題"
+msgid "Enter your password to approve"
+msgstr ""
+
+msgid "Enter zen mode"
+msgstr ""
+
msgid "EnviornmentDashboard|You are looking at the last updated environment"
msgstr ""
+msgid "Environment"
+msgstr ""
+
msgid "Environment variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. Additionally, they can be masked so they are hidden in job logs, though they must match certain regexp requirements to do so. You can use environment variables for passwords, secret keys, or whatever you want."
msgstr ""
@@ -4909,9 +5877,15 @@ msgstr "å²è©©"
msgid "Epics"
msgstr "å²è©©"
+msgid "Epics (Ultimate / Gold license only)"
+msgstr ""
+
msgid "Epics Roadmap"
msgstr "å²è©©è·¯ç·šåœ–"
+msgid "Epics and Issues"
+msgstr ""
+
msgid "Epics let you manage your portfolio of projects more efficiently and with less effort"
msgstr "Epics 讓你能更有效率且花費更少功夫的管ç†æ‚¨å°ˆæ¡ˆçš„組åˆã€‚"
@@ -4948,12 +5922,27 @@ msgstr ""
msgid "Epics|Remove issue"
msgstr ""
+msgid "Epics|Show more"
+msgstr ""
+
+msgid "Epics|Something went wrong while assigning issue to epic."
+msgstr ""
+
msgid "Epics|Something went wrong while creating child epics."
msgstr ""
msgid "Epics|Something went wrong while fetching child epics."
msgstr ""
+msgid "Epics|Something went wrong while fetching group epics."
+msgstr ""
+
+msgid "Epics|Something went wrong while ordering item."
+msgstr ""
+
+msgid "Epics|Something went wrong while removing issue from epic."
+msgstr ""
+
msgid "Epics|These dates affect how your epics appear in the roadmap. Dates from milestones come from the milestones assigned to issues in the epic. You can also set fixed dates or remove them entirely."
msgstr "這些日期會影響在開發è—圖中 Epic 的顯示方å¼ã€‚來自里程碑的日期來自å°æ‡‰åˆ° Epic 中議題的里程碑。您也å¯ä»¥è¨­å®šå›ºå®šæ—¥æœŸã€æˆ–是完全移除它們。"
@@ -4972,9 +5961,6 @@ msgstr "開始"
msgid "Error"
msgstr "錯誤"
-msgid "Error Reporting and Logging"
-msgstr "錯誤報告與記錄"
-
msgid "Error Tracking"
msgstr ""
@@ -4990,6 +5976,12 @@ msgstr ""
msgid "Error fetching contributors data."
msgstr "抓å–è²¢ç»è€…資料時發生錯誤。"
+msgid "Error fetching diverging counts for branches. Please try again."
+msgstr ""
+
+msgid "Error fetching forked projects. Please try again."
+msgstr ""
+
msgid "Error fetching labels."
msgstr "抓å–標籤時發生錯誤。"
@@ -5047,9 +6039,15 @@ msgstr ""
msgid "Error occurred when fetching sidebar data"
msgstr ""
+msgid "Error occurred when saving assignees"
+msgstr ""
+
msgid "Error occurred when toggling the notification subscription"
msgstr "切æ›è¨‚閱通知時發生錯誤"
+msgid "Error occurred while updating the issue weight"
+msgstr ""
+
msgid "Error occurred. User was not blocked"
msgstr ""
@@ -5068,14 +6066,17 @@ msgstr ""
msgid "Error saving label update."
msgstr "儲存標籤更新時發生錯誤。"
+msgid "Error setting up editor. Please try again."
+msgstr ""
+
msgid "Error updating %{issuableType}"
msgstr ""
-msgid "Error updating status for all todos."
-msgstr "更新所有待辦事項的狀態時發生錯誤"
+msgid "Error updating status for all to-do items."
+msgstr ""
-msgid "Error updating todo status."
-msgstr "更新待辦事項狀態時發生錯誤。"
+msgid "Error updating status of to-do item."
+msgstr ""
msgid "Error uploading file"
msgstr ""
@@ -5167,9 +6168,15 @@ msgstr "æ¯é€±åŸ·è¡Œï¼ˆé€±æ—¥å‡Œæ™¨å››é»žï¼‰"
msgid "Everyone"
msgstr ""
+msgid "Everyone With Access"
+msgstr ""
+
msgid "Everyone can contribute"
msgstr "æ¯å€‹äººéƒ½èƒ½è²¢ç»"
+msgid "Everything on your to-do list is marked as done."
+msgstr ""
+
msgid "Everything you need to create a GitLab Pages site using GitBook."
msgstr ""
@@ -5191,6 +6198,9 @@ msgstr ""
msgid "Except policy:"
msgstr ""
+msgid "Existing"
+msgstr ""
+
msgid "Existing members and groups"
msgstr ""
@@ -5203,9 +6213,18 @@ msgstr "展開全部"
msgid "Expand approvers"
msgstr ""
+msgid "Expand down"
+msgstr ""
+
+msgid "Expand dropdown"
+msgstr ""
+
msgid "Expand sidebar"
msgstr "展開å´é‚Šæ¬„"
+msgid "Expand up"
+msgstr ""
+
msgid "Expiration date"
msgstr "截止日期"
@@ -5215,6 +6234,12 @@ msgstr ""
msgid "Expired %{expiredOn}"
msgstr ""
+msgid "Expires"
+msgstr ""
+
+msgid "Expires at"
+msgstr ""
+
msgid "Expires in %{expires_at}"
msgstr ""
@@ -5269,6 +6294,12 @@ msgstr "外部èªè­‰æ‹’絕存å–這個專案。"
msgid "External authorization request timeout"
msgstr "外部èªè­‰è«‹æ±‚等待éŽä¹…"
+msgid "External storage URL"
+msgstr ""
+
+msgid "External storage authentication token"
+msgstr ""
+
msgid "ExternalAuthorizationService|Classification label"
msgstr "分類標籤"
@@ -5308,6 +6339,15 @@ msgstr "失敗的作業"
msgid "Failed create wiki"
msgstr ""
+msgid "Failed to add a Zoom meeting"
+msgstr ""
+
+msgid "Failed to apply commands."
+msgstr ""
+
+msgid "Failed to assign a user because no user was found."
+msgstr ""
+
msgid "Failed to change the owner"
msgstr "無法變更所有者"
@@ -5329,6 +6369,9 @@ msgstr ""
msgid "Failed to create resources"
msgstr ""
+msgid "Failed to delete board. Please try again."
+msgstr ""
+
msgid "Failed to deploy to"
msgstr "無法佈署到"
@@ -5350,6 +6393,18 @@ msgstr ""
msgid "Failed to load related branches"
msgstr ""
+msgid "Failed to mark this issue as a duplicate because referenced issue was not found."
+msgstr ""
+
+msgid "Failed to move this issue because label was not found."
+msgstr ""
+
+msgid "Failed to move this issue because only a single label can be provided."
+msgstr ""
+
+msgid "Failed to move this issue because target project doesn't exist."
+msgstr ""
+
msgid "Failed to promote label due to internal error. Please contact administrators."
msgstr ""
@@ -5359,6 +6414,9 @@ msgstr ""
msgid "Failed to protect the environment"
msgstr ""
+msgid "Failed to remove a Zoom meeting"
+msgstr ""
+
msgid "Failed to remove issue from board, please try again."
msgstr "從看æ¿åˆªé™¤è­°é¡Œæ™‚發生錯誤,請ç¨å€™é‡è©¦ã€‚"
@@ -5392,6 +6450,9 @@ msgstr ""
msgid "Failed to save preferences."
msgstr ""
+msgid "Failed to set due date because the date format is invalid."
+msgstr ""
+
msgid "Failed to signing using smartcard authentication"
msgstr "無法é€éŽ smartcard 進行èªè­‰"
@@ -5419,6 +6480,9 @@ msgstr ""
msgid "Failure"
msgstr "失敗"
+msgid "Fast-forward merge is not possible. Rebase the source branch onto the target branch or merge target branch into source branch to allow this merge request to be merged."
+msgstr ""
+
msgid "Fast-forward merge without a merge commit"
msgstr ""
@@ -5449,6 +6513,15 @@ msgstr "API URL"
msgid "FeatureFlags|Active"
msgstr "活動"
+msgid "FeatureFlags|Add"
+msgstr ""
+
+msgid "FeatureFlags|All users"
+msgstr ""
+
+msgid "FeatureFlags|Clear all"
+msgstr ""
+
msgid "FeatureFlags|Configure"
msgstr "設定"
@@ -5470,6 +6543,9 @@ msgstr "說明"
msgid "FeatureFlags|Edit Feature Flag"
msgstr "編輯功能標籤"
+msgid "FeatureFlags|Enter comma separated list of user IDs"
+msgstr ""
+
msgid "FeatureFlags|Environment Spec"
msgstr ""
@@ -5479,19 +6555,19 @@ msgstr ""
msgid "FeatureFlags|Feature Flag"
msgstr "功能標籤"
-msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcare rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
+msgid "FeatureFlags|Feature Flag behavior is built up by creating a set of rules to define the status of target environments. A default wildcard rule %{codeStart}*%{codeEnd} for %{boldStart}All Environments%{boldEnd} is set, and you are able to add as many rules as you need by choosing environment specs below. You can toggle the behavior for each of your rules to set them %{boldStart}Active%{boldEnd} or %{boldStart}Inactive%{boldEnd}."
msgstr ""
msgid "FeatureFlags|Feature Flags"
msgstr ""
-msgid "FeatureFlags|Feature Flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
+msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
msgstr ""
-msgid "FeatureFlags|Feature flag %{name} will be removed. Are you sure?"
+msgid "FeatureFlags|Feature flags allow you to configure your code into different flavors by dynamically toggling certain functionality."
msgstr ""
-msgid "FeatureFlags|Get started with Feature Flags"
+msgid "FeatureFlags|Get started with feature flags"
msgstr ""
msgid "FeatureFlags|Inactive"
@@ -5506,10 +6582,10 @@ msgstr ""
msgid "FeatureFlags|Instance ID"
msgstr "實例 ID"
-msgid "FeatureFlags|Loading Feature Flags"
+msgid "FeatureFlags|Loading feature flags"
msgstr ""
-msgid "FeatureFlags|More Information"
+msgid "FeatureFlags|More information"
msgstr ""
msgid "FeatureFlags|Name"
@@ -5521,19 +6597,43 @@ msgstr "æ–°"
msgid "FeatureFlags|New Feature Flag"
msgstr "新增功能標籤"
+msgid "FeatureFlags|New feature flag"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout (logged in users)"
+msgstr ""
+
+msgid "FeatureFlags|Percent rollout must be a whole number between 0 and 100"
+msgstr ""
+
msgid "FeatureFlags|Protected"
msgstr ""
+msgid "FeatureFlags|Remove"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Percentage"
+msgstr ""
+
+msgid "FeatureFlags|Rollout Strategy"
+msgstr ""
+
msgid "FeatureFlags|Status"
msgstr "狀態"
+msgid "FeatureFlags|Target Users"
+msgstr ""
+
msgid "FeatureFlags|Target environments"
msgstr ""
-msgid "FeatureFlags|There are no active Feature Flags"
+msgid "FeatureFlags|Target user behaviour is built up by creating a list of active user IDs. These IDs should be the users in the system in which the feature flag is set, not GitLab ids. Target users apply across %{strong_start}All Environments%{strong_end} and are not affected by Target Environment rules."
+msgstr ""
+
+msgid "FeatureFlags|There are no active feature flags"
msgstr ""
-msgid "FeatureFlags|There are no inactive Feature Flags"
+msgid "FeatureFlags|There are no inactive feature flags"
msgstr ""
msgid "FeatureFlags|There was an error fetching the feature flags."
@@ -5542,6 +6642,9 @@ msgstr ""
msgid "FeatureFlags|Try again in a few moments or contact your support team."
msgstr ""
+msgid "FeatureFlags|User IDs"
+msgstr ""
+
msgid "Feb"
msgstr "二月"
@@ -5560,9 +6663,6 @@ msgstr ""
msgid "Fetching licenses failed. You are not permitted to perform this action."
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr "æ­¤é é¢çš„欄ä½ç›®å‰ç„¡æ³•ç·¨è¼¯ï¼Œä½†ä½ èƒ½è¨­å®š"
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5624,6 +6724,9 @@ msgstr ""
msgid "Filter results by project"
msgstr ""
+msgid "Filter your projects by name"
+msgstr ""
+
msgid "Filter..."
msgstr "篩é¸â€¦"
@@ -5666,6 +6769,9 @@ msgstr "已完æˆ"
msgid "First day of the week"
msgstr ""
+msgid "First name"
+msgstr ""
+
msgid "Fixed date"
msgstr "修復日期"
@@ -5729,6 +6835,9 @@ msgstr "å°æ–¼ç§äººå°ˆæ¡ˆï¼Œä»»ä½•æˆå“¡ (訪客或以上) 都å¯ä»¥æª¢è¦–管ç·
msgid "For public projects, anyone can view pipelines and access job details (output logs and artifacts)"
msgstr "å°æ–¼å…¬é–‹å°ˆæ¡ˆï¼Œä»»ä½•äººéƒ½å¯ä»¥æª¢è¦–管線並存å–工作詳細資訊 (輸出記錄和æˆå“)"
+msgid "Forgot your password?"
+msgstr ""
+
msgid "Fork"
msgstr ""
@@ -5765,12 +6874,18 @@ msgstr ""
msgid "Found errors in your .gitlab-ci.yml:"
msgstr "在您的 .gitlab-ci.yml 中找到錯誤:"
+msgid "Free Trial"
+msgstr ""
+
msgid "Free Trial of GitLab.com Gold"
msgstr "å…費試用 GitLab.com 黃金計畫"
msgid "Friday"
msgstr ""
+msgid "From"
+msgstr ""
+
msgid "From %{providerTitle}"
msgstr ""
@@ -5831,6 +6946,9 @@ msgstr "產生é è¨­æ¨™ç±¤é›†"
msgid "Generate key"
msgstr ""
+msgid "Generate link to chart"
+msgstr ""
+
msgid "Generate new export"
msgstr ""
@@ -5843,6 +6961,9 @@ msgstr "Geo 節點"
msgid "Geo allows you to replicate your GitLab instance to other geographical locations."
msgstr "Geo å…許您將您的 GitLab 實例複製到其他地ç†ä½ç½®ã€‚"
+msgid "GeoNodeStatusEvent|%{timeAgoStr} (%{pendingEvents} events)"
+msgstr ""
+
msgid "GeoNodeSyncStatus|Node is failing or broken."
msgstr "節點發生錯誤或æ壞。"
@@ -5906,6 +7027,9 @@ msgstr "本機 LFS 物件"
msgid "GeoNodes|Local attachments"
msgstr "本機附件"
+msgid "GeoNodes|Local container repositories"
+msgstr ""
+
msgid "GeoNodes|Local job artifacts"
msgstr "本機作業檔案"
@@ -6014,33 +7138,42 @@ msgstr "您使用ä¸å®‰å…¨çš„ HTTP 連線設定 Geo 節點。我們建議使用
msgid "Geo|%{name} is scheduled for forced re-download"
msgstr "%{name} 已經排定以用來強制é‡æ–°ä¸‹è¼‰"
-msgid "Geo|%{name} is scheduled for re-check"
-msgstr "%{name} 已經排定以用來é‡æ–°æª¢æŸ¥"
-
msgid "Geo|%{name} is scheduled for re-sync"
msgstr "%{name} 已經排定以用來é‡æ–°åŒæ­¥"
+msgid "Geo|%{name} is scheduled for re-verify"
+msgstr ""
+
msgid "Geo|All"
msgstr "全部"
msgid "Geo|All projects"
msgstr "所有專案"
-msgid "Geo|All projects are being scheduled for re-check"
-msgstr "正在計畫é‡æ–°æª¢æŸ¥æ‰€æœ‰çš„專案"
-
msgid "Geo|All projects are being scheduled for re-sync"
msgstr "正在計畫é‡æ–°åŒæ­¥æ‰€æœ‰å°ˆæ¡ˆ"
+msgid "Geo|All projects are being scheduled for re-verify"
+msgstr ""
+
+msgid "Geo|Allow this secondary node to replicate content on Object Storage"
+msgstr ""
+
msgid "Geo|Batch operations"
msgstr "批次æ“作"
msgid "Geo|Choose which groups you wish to synchronize to this secondary node."
msgstr ""
+msgid "Geo|Container repositories sync capacity"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of LFS/attachment backfill for this secondary node"
msgstr ""
+msgid "Geo|Control the maximum concurrency of container repository operations for this Geo node"
+msgstr ""
+
msgid "Geo|Control the maximum concurrency of verification operations for this Geo node"
msgstr ""
@@ -6065,10 +7198,13 @@ msgstr "Geo 狀態"
msgid "Geo|Groups to synchronize"
msgstr "è¦åŒæ­¥çš„群組"
+msgid "Geo|If enabled, and if object storage is enabled, GitLab will handle Object Storage replication using Geo"
+msgstr ""
+
msgid "Geo|In sync"
msgstr "åŒæ­¥ä¸­"
-msgid "Geo|Internal URL"
+msgid "Geo|Internal URL (optional)"
msgstr ""
msgid "Geo|Last repository check run"
@@ -6119,12 +7255,6 @@ msgstr "æŸäº›å„²å­˜ç©ºé–“碎片中的專案"
msgid "Geo|Re-verification interval"
msgstr ""
-msgid "Geo|Recheck"
-msgstr "é‡æ–°æª¢æŸ¥"
-
-msgid "Geo|Recheck all projects"
-msgstr "é‡æ–°æª¢æŸ¥æ‰€æœ‰å°ˆæ¡ˆ"
-
msgid "Geo|Redownload"
msgstr "é‡æ–°ä¸‹è¼‰"
@@ -6143,6 +7273,12 @@ msgstr "é‡æ–°åŒæ­¥æ‰€æœ‰å°ˆæ¡ˆ"
msgid "Geo|Retry count"
msgstr "é‡è©¦æ¬¡æ•¸"
+msgid "Geo|Reverify"
+msgstr ""
+
+msgid "Geo|Reverify all projects"
+msgstr ""
+
msgid "Geo|Select groups to replicate."
msgstr "é¸æ“‡è¦è¤‡è£½çš„群組。"
@@ -6167,7 +7303,7 @@ msgstr ""
msgid "Geo|Synchronization failed - %{error}"
msgstr "åŒæ­¥å¤±æ•— - %{error}"
-msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Returns `url` if not set"
+msgid "Geo|The URL defined on the primary node that secondary nodes should use to contact it. Defaults to URL"
msgstr ""
msgid "Geo|The database is currently %{db_lag} behind the primary node."
@@ -6224,6 +7360,9 @@ msgstr "å–å¾—å…費試用評估"
msgid "Get started with error tracking"
msgstr ""
+msgid "Get started with performance monitoring"
+msgstr ""
+
msgid "Getting started with releases"
msgstr ""
@@ -6281,6 +7420,15 @@ msgstr "GitLab 使用者"
msgid "GitLab allows you to continue using your license even if you exceed the number of seats you purchased. You will be required to pay for these seats when you renew your license."
msgstr ""
+msgid "GitLab for Slack"
+msgstr ""
+
+msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later."
+msgstr ""
+
+msgid "GitLab member or Email address"
+msgstr ""
+
msgid "GitLab metadata URL"
msgstr ""
@@ -6299,9 +7447,6 @@ msgstr "GitLab 將會在後å°é€²è¡Œç”¢ç”Ÿ GitLab 資料庫å‡å CSV 的作業ï
msgid "GitLab.com import"
msgstr "匯入 GitLab.com"
-msgid "GitLab’s issue tracker"
-msgstr "GitLab 的議題追蹤器"
-
msgid "Gitaly"
msgstr "Gitaly"
@@ -6317,9 +7462,18 @@ msgstr "Gitea 主機 URL"
msgid "Gitea Import"
msgstr "匯入 Gitea"
+msgid "Gitlab CI/CD"
+msgstr ""
+
+msgid "Gitlab Pages"
+msgstr ""
+
msgid "Given access %{time_ago}"
msgstr ""
+msgid "Global Shortcuts"
+msgstr ""
+
msgid "Global notification settings"
msgstr ""
@@ -6332,6 +7486,12 @@ msgstr ""
msgid "Go back"
msgstr "上一é "
+msgid "Go back (while searching for files"
+msgstr ""
+
+msgid "Go back to %{startTag}Open issues%{endTag} and select some issues to add to your board."
+msgstr ""
+
msgid "Go full screen"
msgstr ""
@@ -6341,15 +7501,99 @@ msgstr "å‰å¾€"
msgid "Go to %{link_to_google_takeout}."
msgstr "å‰å¾€ %{link_to_google_takeout}。"
+msgid "Go to commits"
+msgstr ""
+
+msgid "Go to environments"
+msgstr ""
+
+msgid "Go to file"
+msgstr ""
+
+msgid "Go to file (MRs only)"
+msgstr ""
+
+msgid "Go to file permalink (while viewing a file)"
+msgstr ""
+
+msgid "Go to files"
+msgstr ""
+
+msgid "Go to find file"
+msgstr ""
+
+msgid "Go to issue boards"
+msgstr ""
+
+msgid "Go to issues"
+msgstr ""
+
+msgid "Go to jobs"
+msgstr ""
+
+msgid "Go to kubernetes"
+msgstr ""
+
+msgid "Go to merge requests"
+msgstr ""
+
+msgid "Go to metrics"
+msgstr ""
+
msgid "Go to parent"
msgstr ""
msgid "Go to project"
msgstr ""
+msgid "Go to releases"
+msgstr ""
+
+msgid "Go to repository charts"
+msgstr ""
+
+msgid "Go to repository graph"
+msgstr ""
+
+msgid "Go to snippets"
+msgstr ""
+
+msgid "Go to the activity feed"
+msgstr ""
+
+msgid "Go to the milestone list"
+msgstr ""
+
+msgid "Go to the project's activity feed"
+msgstr ""
+
+msgid "Go to the project's overview page"
+msgstr ""
+
+msgid "Go to wiki"
+msgstr ""
+
+msgid "Go to your To-Do list"
+msgstr ""
+
msgid "Go to your fork"
msgstr ""
+msgid "Go to your groups"
+msgstr ""
+
+msgid "Go to your issues"
+msgstr ""
+
+msgid "Go to your merge requests"
+msgstr ""
+
+msgid "Go to your projects"
+msgstr ""
+
+msgid "Go to your snippets"
+msgstr ""
+
msgid "Golden Tanuki"
msgstr ""
@@ -6359,8 +7603,8 @@ msgstr "匯入 Google Code"
msgid "Google Takeout"
msgstr "Google Takeout"
-msgid "Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service."
-msgstr "Google 身份驗證ä¸æ˜¯ %{link_to_documentation}。如果您想使用此æœå‹™ï¼Œè«‹è«®è©¢ GitLab 管ç†å“¡ã€‚"
+msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
+msgstr ""
msgid "Got it"
msgstr ""
@@ -6368,12 +7612,18 @@ msgstr ""
msgid "Got it!"
msgstr "了解ï¼"
+msgid "Grafana URL"
+msgstr ""
+
msgid "Grant access"
msgstr ""
msgid "Graph"
msgstr "圖表"
+msgid "Gravatar"
+msgstr ""
+
msgid "Gravatar enabled"
msgstr ""
@@ -6437,15 +7687,15 @@ msgstr ""
msgid "Group was successfully updated."
msgstr ""
-msgid "Group:"
-msgstr ""
-
msgid "Group: %{group_name}"
msgstr "群組:%{group_name}"
msgid "Group: %{name}"
msgstr ""
+msgid "GroupRoadmap|%{startDateInWords} &ndash; %{endDateInWords}"
+msgstr ""
+
msgid "GroupRoadmap|From %{dateWord}"
msgstr "從 %{dateWord}"
@@ -6482,6 +7732,9 @@ msgstr ""
msgid "GroupSAML|Enforce SSO-only authentication for this group."
msgstr ""
+msgid "GroupSAML|Enforce SSO-only membership for this group."
+msgstr ""
+
msgid "GroupSAML|Enforce users to have dedicated group managed accounts for this group."
msgstr ""
@@ -6557,6 +7810,9 @@ msgstr "自訂您的群組徵章。"
msgid "GroupSettings|Default to Auto DevOps pipeline for all projects within this group"
msgstr ""
+msgid "GroupSettings|Disable email notifications"
+msgstr ""
+
msgid "GroupSettings|Learn more about badges."
msgstr "了解關於徵章的更多資訊。"
@@ -6590,6 +7846,9 @@ msgstr "此設定已經套用至 %{ancestor_group}。你å¯ä»¥è¦†è“‹æ­¤è¨­å®šæˆ–
msgid "GroupSettings|This setting will be applied to all subgroups unless overridden by a group owner. Groups that already have access to the project will continue to have access unless removed manually."
msgstr "除éžç¾¤çµ„所有者覆蓋了設定,å¦å‰‡æ­¤è¨­å®šå°‡å¥—用到所有å­ç¾¤çµ„。先å‰èƒ½å­˜å–此專案的群組ä»å¯ç¹¼çºŒå­˜å–,除éžæ‰‹å‹•ç§»é™¤å­˜å–權é™ã€‚"
+msgid "GroupSettings|This setting will override user notification preferences for all members of the group, subgroups, and projects."
+msgstr ""
+
msgid "GroupSettings|cannot be disabled when the parent group \"Share with group lock\" is enabled, except by the owner of the parent group"
msgstr "當上層群組的「群組分享鎖ã€å•Ÿç”¨æ™‚,除了上層群組的所有者以外的人都ä¸èƒ½åœç”¨ã€‚"
@@ -6713,6 +7972,12 @@ msgstr "說明é é¢"
msgid "Help page text and support page url."
msgstr "說明é é¢æ–‡å­—與支æ´é é¢é€£çµ"
+msgid "Helps prevent bots from brute-force attacks."
+msgstr ""
+
+msgid "Helps prevent bots from creating accounts."
+msgstr ""
+
msgid "Hide archived projects"
msgstr ""
@@ -6734,6 +7999,9 @@ msgstr "éš±è—酬載"
msgid "Hide shared projects"
msgstr ""
+msgid "Hide stage"
+msgstr ""
+
msgid "Hide value"
msgid_plural "Hide values"
msgstr[0] "éš±è—數值"
@@ -6741,6 +8009,9 @@ msgstr[0] "éš±è—數值"
msgid "Hide values"
msgstr ""
+msgid "Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0."
+msgstr ""
+
msgid "Highest role:"
msgstr ""
@@ -6759,6 +8030,9 @@ msgstr ""
msgid "Hook was successfully updated."
msgstr ""
+msgid "Hours"
+msgstr ""
+
msgid "Housekeeping"
msgstr ""
@@ -6768,6 +8042,9 @@ msgstr "已順利開始維護程åº"
msgid "Housekeeping, export, path, transfer, remove, archive."
msgstr ""
+msgid "How it works"
+msgstr ""
+
msgid "How many replicas each Elasticsearch shard has."
msgstr ""
@@ -6777,6 +8054,9 @@ msgstr ""
msgid "However, you are already a member of this %{member_source}. Sign in using a different account to accept the invitation."
msgstr ""
+msgid "I accept the %{terms_link_start}Terms of Service and Privacy Policy%{terms_link_end}"
+msgstr ""
+
msgid "I accept the %{terms_link}"
msgstr "æˆ‘æŽ¥å— %{terms_link}"
@@ -6789,9 +8069,15 @@ msgstr ""
msgid "I have read and agree to the Let's Encrypt %{link_start}Terms of Service%{link_end}"
msgstr ""
+msgid "I'd like to receive updates via email about GitLab"
+msgstr ""
+
msgid "ID"
msgstr "ID"
+msgid "ID:"
+msgstr ""
+
msgid "IDE|Allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation."
msgstr "å…許使用 CodeSandbox ä½¿ç”¨è€…ç«¯è©•ä¼°ç‰ˆåœ¨ç¶²é  IDE 來å³æ™‚é è¦½ JavaScript 專案"
@@ -6828,6 +8114,9 @@ msgstr "é‡æ–°è¼‰å…¥é è¦½"
msgid "IDE|Review"
msgstr "檢閱"
+msgid "IDE|Successful commit"
+msgstr ""
+
msgid "IP Address"
msgstr "IP ä½å€"
@@ -6891,6 +8180,12 @@ msgstr "Onion 主題"
msgid "ImageDiffViewer|Swipe"
msgstr "Swipe"
+msgid "ImageViewerDimensions|H"
+msgstr ""
+
+msgid "ImageViewerDimensions|W"
+msgstr ""
+
msgid "Impersonation has been disabled"
msgstr ""
@@ -6996,7 +8291,7 @@ msgstr ""
msgid "ImportProjects|The repository could not be created."
msgstr ""
-msgid "ImportProjects|Updating the imported projects failed"
+msgid "ImportProjects|Update of imported projects with realtime changes failed"
msgstr ""
msgid "Improve Issue boards"
@@ -7050,13 +8345,16 @@ msgstr ""
msgid "Includes an MVC structure, mvnw and pom.xml to help you get started."
msgstr ""
+msgid "Incoming email"
+msgstr ""
+
msgid "Incompatible Project"
msgstr "ä¸ç›¸å®¹çš„專案"
msgid "Incompatible options set!"
msgstr ""
-msgid "Indexing"
+msgid "Index all projects"
msgstr ""
msgid "Indicates whether this runner can pick jobs without tags"
@@ -7101,6 +8399,9 @@ msgstr "在 Kubernetes 上安è£åŸ·è¡Œå™¨"
msgid "Install a soft token authenticator like %{free_otp_link} or Google Authenticator from your application repository and scan this QR code. More information is available in the %{help_link_start}documentation%{help_link_end}."
msgstr ""
+msgid "Install on clusters"
+msgstr ""
+
msgid "Installed"
msgstr ""
@@ -7117,6 +8418,9 @@ msgstr "實例統計"
msgid "Instance Statistics visibility"
msgstr "實例統計å¯è¦‹åº¦"
+msgid "Instance administrators group already exists"
+msgstr ""
+
msgid "Instance does not support multiple Kubernetes clusters"
msgstr "主機ä¸æ”¯æ´å¤šå€‹ Kubernetes å¢é›†"
@@ -7159,6 +8463,9 @@ msgstr ""
msgid "Invalid Login or password"
msgstr ""
+msgid "Invalid URL"
+msgstr ""
+
msgid "Invalid date"
msgstr ""
@@ -7207,16 +8514,22 @@ msgstr ""
msgid "Invite member"
msgstr ""
-msgid "Invoke Count"
+msgid "Invocations"
msgstr ""
-msgid "Invoke Time"
+msgid "Is using license seat:"
msgstr ""
-msgid "Is using license seat:"
+msgid "IssuableStatus|Closed"
+msgstr ""
+
+msgid "IssuableStatus|Closed (%{link})"
msgstr ""
-msgid "IssuableStatus|Closed (%{moved_link_start}moved%{moved_link_end})"
+msgid "IssuableStatus|duplicated"
+msgstr ""
+
+msgid "IssuableStatus|moved"
msgstr ""
msgid "Issue"
@@ -7261,9 +8574,27 @@ msgstr ""
msgid "IssueBoards|Switch board"
msgstr ""
+msgid "IssueTracker|Bugzilla issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Custom issue tracker"
+msgstr ""
+
+msgid "IssueTracker|GitLab issue tracker"
+msgstr ""
+
+msgid "IssueTracker|Redmine issue tracker"
+msgstr ""
+
+msgid "IssueTracker|YouTrack issue tracker"
+msgstr ""
+
msgid "Issues"
msgstr "議題"
+msgid "Issues / Merge Requests"
+msgstr ""
+
msgid "Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
msgstr "è­°é¡Œå¯ä»¥æ˜¯è‡­èŸ²ã€ä»»å‹™æˆ–者想法,便於使用者討論它。此外,議題是å¯æœå°‹å’ŒéŽæ¿¾çš„。"
@@ -7279,8 +8610,11 @@ msgstr "è­°é¡Œã€åˆä½µè«‹æ±‚ã€æŽ¨é€åŠç•™è¨€ã€‚"
msgid "IssuesAnalytics|After you begin creating issues for your projects, we can start tracking and displaying metrics for them"
msgstr "在您為專案建立議題後,我們開始追蹤並顯示它們的指標"
-msgid "IssuesAnalytics|Issues Created"
-msgstr "已創立議題"
+msgid "IssuesAnalytics|Avg/Month:"
+msgstr ""
+
+msgid "IssuesAnalytics|Issues created"
+msgstr ""
msgid "IssuesAnalytics|Issues created per month"
msgstr "æ¯æœˆå»ºç«‹çš„è­°é¡Œ"
@@ -7297,6 +8631,12 @@ msgstr "群組中的所有專案沒有任何議題"
msgid "IssuesAnalytics|To widen your search, change or remove filters in the filter bar above"
msgstr "è¦åœ¨ä¸Šé¢çš„篩é¸æ¢ä»¶ä¸­æ“´å¤§æœå°‹ç¯„åœï¼Œè®Šæ›´æˆ–刪除篩é¸æ¢ä»¶"
+msgid "IssuesAnalytics|Total:"
+msgstr ""
+
+msgid "It may take up to 30 minutes before the site is available after the first deployment."
+msgstr ""
+
msgid "It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected."
msgstr ""
@@ -7474,6 +8814,9 @@ msgstr ""
msgid "Key: %{key}"
msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr ""
+
msgid "Kubernetes"
msgstr "Kubernetes"
@@ -7498,11 +8841,14 @@ msgstr "Kubernetes å¢é›†å·²æˆåŠŸæ›´æ–°ã€‚"
msgid "Kubernetes configured"
msgstr "Kubernetes 已設定"
+msgid "Kubernetes deployment not found"
+msgstr ""
+
msgid "Kubernetes error: %{error_code}"
msgstr ""
-msgid "Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
-msgstr "Kubernetes æœå‹™æ•´åˆå·²è¢«æ£„用。%{deprecated_message_content} 而ç¾åœ¨æ‚¨çš„ Kubernetes å¢é›†å·²æ”¹ç”¨æ–°çš„ <a href=\"%{url}\"/>Kubernetes å¢é›†</a> é é¢"
+msgid "LDAP"
+msgstr ""
msgid "LDAP settings"
msgstr ""
@@ -7586,6 +8932,9 @@ msgid "Last %d day"
msgid_plural "Last %d days"
msgstr[0] "最近 %d 天"
+msgid "Last %{days} days"
+msgstr ""
+
msgid "Last Pipeline"
msgstr "最近一次管線"
@@ -7607,15 +8956,24 @@ msgstr "最後編輯時間:%{date}"
msgid "Last edited by %{name}"
msgstr "最後由 %{name} 編輯"
+msgid "Last name"
+msgstr ""
+
msgid "Last reply by"
msgstr "最後回應由"
msgid "Last seen"
msgstr ""
+msgid "Last successful update"
+msgstr ""
+
msgid "Last update"
msgstr "最後更新"
+msgid "Last update attempt"
+msgstr ""
+
msgid "Last updated"
msgstr "最後更新"
@@ -7634,7 +8992,7 @@ msgstr "æ–¼"
msgid "Latest changes"
msgstr "最新修改"
-msgid "Latest pipeline for this branch"
+msgid "Latest pipeline for the most recent commit on this branch"
msgstr ""
msgid "Lead"
@@ -7652,9 +9010,6 @@ msgstr ""
msgid "Learn more"
msgstr "進一步了解"
-msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
-msgstr "了解更多有關 %{issue_boards_url} 的資訊,å¯ä»¥é€éŽæ¨™ç±¤ã€è² è²¬äººã€é‡Œç¨‹ç¢‘來建立追蹤議題列表。如果您發ç¾è­°é¡Œçœ‹æ¿ä¸Šå°‘了一些資訊,請在 %{gitlab_issues_url} 建立議題。"
-
msgid "Learn more about Auto DevOps"
msgstr ""
@@ -7673,6 +9028,9 @@ msgstr ""
msgid "Learn more about custom project templates"
msgstr ""
+msgid "Learn more about deploying to a cluster"
+msgstr ""
+
msgid "Learn more about group-level project templates"
msgstr ""
@@ -7682,6 +9040,9 @@ msgstr ""
msgid "Learn more about the dependency list"
msgstr ""
+msgid "Learn more about vulnerability check"
+msgstr ""
+
msgid "Learn more in the"
msgstr "進一步了解於"
@@ -7712,77 +9073,97 @@ msgstr ""
msgid "License"
msgstr "授權"
-msgid "LicenseManagement|Add a license"
-msgstr "增加許å¯è­‰"
+msgid "License Compliance"
+msgstr ""
-msgid "LicenseManagement|Add licenses manually to approve or blacklist"
-msgstr "手動增加許å¯è­‰ä»¥æ‰¹å‡†æˆ–å°éŽ–"
+msgid "LicenseCompliance|Add a license"
+msgstr ""
-msgid "LicenseManagement|Approve"
-msgstr "批准"
+msgid "LicenseCompliance|Add licenses manually to approve or blacklist"
+msgstr ""
-msgid "LicenseManagement|Approve license"
-msgstr "批准授權"
+msgid "LicenseCompliance|Approve"
+msgstr ""
-msgid "LicenseManagement|Approve license?"
-msgstr "是å¦æ‰¹å‡†æŽˆæ¬Šï¼Ÿ"
+msgid "LicenseCompliance|Approve license"
+msgstr ""
-msgid "LicenseManagement|Approved"
-msgstr "已批准"
+msgid "LicenseCompliance|Approve license?"
+msgstr ""
-msgid "LicenseManagement|Blacklist"
-msgstr "黑åå–®"
+msgid "LicenseCompliance|Approved"
+msgstr ""
-msgid "LicenseManagement|Blacklist license"
-msgstr "將授權加入到黑åå–®"
+msgid "LicenseCompliance|Blacklist"
+msgstr ""
-msgid "LicenseManagement|Blacklist license?"
-msgstr "是å¦å°‡æŽˆæ¬ŠåŠ å…¥åˆ°é»‘å單?"
+msgid "LicenseCompliance|Blacklist license"
+msgstr ""
-msgid "LicenseManagement|Blacklisted"
-msgstr "已加入到黑åå–®"
+msgid "LicenseCompliance|Blacklist license?"
+msgstr ""
-msgid "LicenseManagement|Cancel"
-msgstr "å–消"
+msgid "LicenseCompliance|Blacklisted"
+msgstr ""
-msgid "LicenseManagement|License"
-msgstr "授權"
+msgid "LicenseCompliance|Cancel"
+msgstr ""
+
+msgid "LicenseCompliance|Here you can approve or blacklist licenses for this project. Using %{ci} or %{license} will allow you to see if there are any unmanaged licenses and approve or blacklist them in merge request."
+msgstr ""
+
+msgid "LicenseCompliance|License"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance"
+msgstr ""
+
+msgid "LicenseCompliance|License Compliance detected %d license for the source branch only"
+msgid_plural "LicenseCompliance|License Compliance detected %d licenses for the source branch only"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected %d new license"
+msgid_plural "LicenseCompliance|License Compliance detected %d new licenses"
+msgstr[0] ""
+
+msgid "LicenseCompliance|License Compliance detected no licenses for the source branch only"
+msgstr ""
-msgid "LicenseManagement|License Management"
-msgstr "授權管ç†"
+msgid "LicenseCompliance|License Compliance detected no new licenses"
+msgstr ""
-msgid "LicenseManagement|License details"
-msgstr "授權詳細資訊"
+msgid "LicenseCompliance|License details"
+msgstr ""
-msgid "LicenseManagement|License name"
-msgstr "許å¯è­‰å稱"
+msgid "LicenseCompliance|License name"
+msgstr ""
-msgid "LicenseManagement|Manage approved and blacklisted licenses for this project."
-msgstr "管ç†æ­¤å°ˆæ¡ˆä¸­å·²æ‰¹å‡†å’Œå·²åŠ åˆ°é»‘å單的授權"
+msgid "LicenseCompliance|Packages"
+msgstr ""
-msgid "LicenseManagement|Packages"
-msgstr "套件"
+msgid "LicenseCompliance|Remove license"
+msgstr ""
-msgid "LicenseManagement|Remove license"
-msgstr "移除授權"
+msgid "LicenseCompliance|Remove license?"
+msgstr ""
-msgid "LicenseManagement|Remove license?"
-msgstr "是å¦ç§»é™¤æŽˆæ¬Šï¼Ÿ"
+msgid "LicenseCompliance|Submit"
+msgstr ""
-msgid "LicenseManagement|Submit"
-msgstr "é€å‡º"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses in this project."
+msgstr ""
-msgid "LicenseManagement|There are currently no approved or blacklisted licenses in this project."
-msgstr "此專案目å‰æ²’有已批准或已加到黑å單的授權"
+msgid "LicenseCompliance|There are currently no approved or blacklisted licenses that match in this project."
+msgstr ""
-msgid "LicenseManagement|This license already exists in this project."
-msgstr "此許å¯è­‰å·²ç¶“存在此專案中。"
+msgid "LicenseCompliance|This license already exists in this project."
+msgstr ""
-msgid "LicenseManagement|URL"
-msgstr "URL"
+msgid "LicenseCompliance|URL"
+msgstr ""
-msgid "LicenseManagement|You are about to remove the license, %{name}, from this project."
-msgstr "您正打算從此專案移除此授權:%{name}"
+msgid "LicenseCompliance|You are about to remove the license, %{name}, from this project."
+msgstr ""
msgid "Licensed Features"
msgstr ""
@@ -7793,6 +9174,9 @@ msgstr ""
msgid "Licenses"
msgstr "授權"
+msgid "Limit display of time tracking units to hours."
+msgstr ""
+
msgid "Limit namespaces and projects that can be indexed"
msgstr ""
@@ -7800,12 +9184,18 @@ msgid "Limited to showing %d event at most"
msgid_plural "Limited to showing %d events at most"
msgstr[0] "é™åˆ¶æœ€å¤šé¡¯ç¤º %d 個活動"
+msgid "Link copied to clipboard"
+msgstr ""
+
msgid "Linked emails (%{email_count})"
msgstr ""
msgid "LinkedIn"
msgstr "LinkedIn"
+msgid "LinkedPipelines|%{counterLabel} more downstream pipelines"
+msgstr ""
+
msgid "List"
msgstr "清單"
@@ -7818,15 +9208,15 @@ msgstr "列出å¯ç”¨çš„版本庫"
msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\""
msgstr ""
+msgid "List the merge requests that must be merged before this one."
+msgstr ""
+
msgid "List view"
msgstr "列表顯示"
msgid "List your Bitbucket Server repositories"
msgstr "列出 BitBucket 伺æœå™¨ç‰ˆæœ¬åº«"
-msgid "List your GitHub repositories"
-msgstr "列出您 GitHub 的版本庫"
-
msgid "Live preview"
msgstr "å³æ™‚é è¦½"
@@ -7836,6 +9226,9 @@ msgstr "正在讀å–群組æˆå“¡çš„è²¢ç»çµ±è¨ˆ"
msgid "Loading functions timed out. Please reload the page to try again."
msgstr ""
+msgid "Loading issues"
+msgstr ""
+
msgid "Loading the GitLab IDE..."
msgstr "è®€å– GitLab IDE…"
@@ -7875,13 +9268,19 @@ msgstr "已鎖定"
msgid "Locked Files"
msgstr "鎖定的檔案"
+msgid "Locked by %{fileLockUserName}"
+msgstr ""
+
+msgid "Locked the discussion."
+msgstr ""
+
msgid "Locked to current projects"
msgstr "已鎖定目å‰å°ˆæ¡ˆ"
msgid "Locks give the ability to lock specific file or folder."
msgstr "《鎖定》æ供了鎖定特定檔案或資料夾的能力。"
-msgid "Locks the discussion"
+msgid "Locks the discussion."
msgstr ""
msgid "Login with smartcard"
@@ -7893,6 +9292,9 @@ msgstr ""
msgid "Logs"
msgstr "記錄檔"
+msgid "MERGED"
+msgstr ""
+
msgid "MRApprovals|Approved by"
msgstr ""
@@ -7908,19 +9310,25 @@ msgstr ""
msgid "MRDiff|Show full file"
msgstr ""
+msgid "Made this issue confidential."
+msgstr ""
+
msgid "Make and review changes in the browser with the Web IDE"
msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "無論身在何處,都能讓您團隊中的æ¯å€‹äººéƒ½æ›´æœ‰æ•ˆçŽ‡ã€‚GitLab Geo 建立了您 GitLab 主機的唯讀é¡åƒï¼Œæ‰€ä»¥æ‚¨å¯ä»¥ç¸®çŸ­è¤‡è£½å’ŒæŠ“å–大型版本庫的時間。"
-msgid "Make issue confidential."
+msgid "Make issue confidential"
+msgstr ""
+
+msgid "Make sure you save it - you won't be able to access it again."
msgstr ""
msgid "Make sure you're logged into the account that owns the projects you'd like to import."
msgstr "請確ä¿æ‚¨å·²ç¶“登入æ“有您è¦åŒ¯å…¥çš„專案的帳號。"
-msgid "Makes this issue confidential"
+msgid "Makes this issue confidential."
msgstr ""
msgid "Manage"
@@ -7965,6 +9373,9 @@ msgstr "匯入 Manifest 檔案"
msgid "Manual job"
msgstr ""
+msgid "ManualOrdering|Couldn't save the order of the issues"
+msgstr ""
+
msgid "Map a FogBugz account ID to a GitLab user"
msgstr "å°‡ FogBugz 的帳號å°æ‡‰åˆ° GitLab 使用者"
@@ -7983,6 +9394,12 @@ msgstr "三月"
msgid "March"
msgstr "三月"
+msgid "Mark To Do as done"
+msgstr ""
+
+msgid "Mark as done"
+msgstr ""
+
msgid "Mark as resolved"
msgstr ""
@@ -7992,8 +9409,8 @@ msgstr ""
msgid "Mark this issue as a duplicate of another issue"
msgstr ""
-msgid "Mark todo as done"
-msgstr "將待辦事項標記為已完æˆ"
+msgid "Mark this issue as related to another issue"
+msgstr ""
msgid "Markdown"
msgstr ""
@@ -8004,15 +9421,66 @@ msgstr ""
msgid "Markdown enabled"
msgstr "已啟用 Markdown"
+msgid "Markdown is supported"
+msgstr ""
+
+msgid "Marked To Do as done."
+msgstr ""
+
+msgid "Marked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Marked this issue as a duplicate of %{duplicate_param}."
+msgstr ""
+
+msgid "Marked this issue as related to %{issue_ref}."
+msgstr ""
+
+msgid "Marks To Do as done."
+msgstr ""
+
+msgid "Marks this %{noun} as Work In Progress."
+msgstr ""
+
msgid "Marks this issue as a duplicate of %{duplicate_reference}."
msgstr ""
-msgid "Marks todo as done."
-msgstr "將待辦事項標記為已完æˆã€‚"
+msgid "Marks this issue as related to %{issue_ref}."
+msgstr ""
msgid "Match not found; try refining your search query."
msgstr ""
+msgid "MattermostService|Add to Mattermost"
+msgstr ""
+
+msgid "MattermostService|Command trigger word"
+msgstr ""
+
+msgid "MattermostService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "MattermostService|Request URL"
+msgstr ""
+
+msgid "MattermostService|Request method"
+msgstr ""
+
+msgid "MattermostService|Response icon"
+msgstr ""
+
+msgid "MattermostService|Response username"
+msgstr ""
+
+msgid "MattermostService|See list of available commands in Mattermost after setting up this service, by entering"
+msgstr ""
+
+msgid "MattermostService|Suggestions:"
+msgstr ""
+
+msgid "MattermostService|This service allows users to perform common operations on this project by entering slash commands in Mattermost."
+msgstr ""
+
msgid "Maven Metadata"
msgstr "Maven 詮釋資料"
@@ -8070,9 +9538,18 @@ msgstr ""
msgid "Members of <strong>%{project_name}</strong>"
msgstr ""
+msgid "Members with access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
+msgid "Members with pending access to %{strong_start}%{group_name}%{strong_end}"
+msgstr ""
+
msgid "Merge"
msgstr ""
+msgid "Merge (when the pipeline succeeds)"
+msgstr ""
+
msgid "Merge Request"
msgstr "åˆä½µè«‹æ±‚"
@@ -8100,6 +9577,9 @@ msgstr ""
msgid "Merge request"
msgstr "åˆä½µè«‹æ±‚"
+msgid "Merge request %{iid} authored by %{authorName}"
+msgstr ""
+
msgid "Merge request approvals"
msgstr "批准åˆä½µè«‹æ±‚"
@@ -8112,6 +9592,9 @@ msgstr "åˆä½µè«‹æ±‚"
msgid "Merge requests are a place to propose changes you've made to a project and discuss those changes with others"
msgstr "「åˆä½µè«‹æ±‚ã€æ˜¯ä¸€å€‹è®“其他人æ出變更建議並討論的地方"
+msgid "Merge requests are read-only in a secondary Geo node"
+msgstr ""
+
msgid "Merge when pipeline succeeds"
msgstr ""
@@ -8145,34 +9628,34 @@ msgstr ""
msgid "MergeRequests|An error occurred while saving the draft comment."
msgstr "儲存留言è‰ç¨¿æ™‚發生錯誤。"
-msgid "MergeRequests|Discussion stays resolved"
+msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
-msgid "MergeRequests|Discussion stays unresolved"
+msgid "MergeRequests|Jump to next unresolved discussion"
msgstr ""
-msgid "MergeRequests|Discussion will be resolved"
+msgid "MergeRequests|Reply..."
msgstr ""
-msgid "MergeRequests|Discussion will be unresolved"
+msgid "MergeRequests|Resolve this thread in a new issue"
msgstr ""
-msgid "MergeRequests|Failed to squash. Should be done manually."
-msgstr ""
+msgid "MergeRequests|Saving the comment failed"
+msgstr "儲存留言失敗"
-msgid "MergeRequests|Jump to next unresolved discussion"
+msgid "MergeRequests|Squash task canceled: another squash is already in progress."
msgstr ""
-msgid "MergeRequests|Reply..."
+msgid "MergeRequests|Thread stays resolved"
msgstr ""
-msgid "MergeRequests|Resolve this discussion in a new issue"
-msgstr "çµæŸè©²è¨Žè«–,並為它å¦å»ºè­°é¡Œã€‚"
+msgid "MergeRequests|Thread stays unresolved"
+msgstr ""
-msgid "MergeRequests|Saving the comment failed"
-msgstr "儲存留言失敗"
+msgid "MergeRequests|Thread will be resolved"
+msgstr ""
-msgid "MergeRequests|Squash task canceled: another squash is already in progress."
+msgid "MergeRequests|Thread will be unresolved"
msgstr ""
msgid "MergeRequests|Toggle comments for this file"
@@ -8187,19 +9670,19 @@ msgstr "檢視å–代檔案@ %{commitId}"
msgid "MergeRequests|commented on commit %{commitLink}"
msgstr ""
-msgid "MergeRequests|started a discussion"
+msgid "MergeRequests|started a thread"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}an old version of the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
+msgid "MergeRequests|started a thread on %{linkStart}the diff%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
-msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
+msgid "MergeRequests|started a thread on commit %{linkStart}%{commitId}%{linkEnd}"
msgstr ""
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
@@ -8223,24 +9706,42 @@ msgstr "å·²åˆä½µ"
msgid "Merged branches are being deleted. This can take some time depending on the number of branches. Please refresh the page to see changes."
msgstr ""
+msgid "Merges this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Messages"
msgstr "訊æ¯"
+msgid "Method"
+msgstr ""
+
msgid "Metric was successfully added."
msgstr ""
msgid "Metric was successfully updated."
msgstr ""
+msgid "MetricChart|Please select a metric"
+msgstr ""
+
+msgid "MetricChart|Selected"
+msgstr ""
+
msgid "Metrics"
msgstr "指標"
+msgid "Metrics - Grafana"
+msgstr ""
+
msgid "Metrics - Influx"
msgstr "指標 - Influx"
msgid "Metrics - Prometheus"
msgstr "指標 - Prometheus"
+msgid "Metrics Dashboard"
+msgstr ""
+
msgid "Metrics and profiling"
msgstr "指標和分æž"
@@ -8368,7 +9869,7 @@ msgid "Milestones"
msgstr "里程碑"
msgid "Milestones| You’re about to permanently delete the milestone %{milestoneTitle} and remove it from %{issuesWithCount} and %{mergeRequestsWithCount}. Once deleted, it cannot be undone or recovered."
-msgstr "ä½ å³å°‡æ°¸ä¹…刪除里程碑 %{milestoneTitle} 並將其中 %{issuesWithCount} å’Œ %{mergeRequestsWithCount}. 一但刪除後,將無法復原或復原。"
+msgstr "ä½ å³å°‡æ°¸ä¹…刪除里程碑 %{milestoneTitle} ,並從 %{issuesWithCount} å’Œ %{mergeRequestsWithCount} 中移除該里程碑。一但刪除,將無法復原或還原。"
msgid "Milestones| You’re about to permanently delete the milestone %{milestoneTitle}. This milestone is not currently used in any issues or merge requests."
msgstr "ä½ å³å°‡æ°¸ä¹…刪除里程碑 %{milestoneTitle}。此里程碑裡目å‰æ²’有任何議題或åˆä½µè«‹æ±‚。"
@@ -8409,9 +9910,6 @@ msgstr ""
msgid "Minutes"
msgstr ""
-msgid "Mirror a repository"
-msgstr "å°ä¸€å€‹ç‰ˆæœ¬åº«é¡åƒ"
-
msgid "Mirror direction"
msgstr "é¡åƒæ–¹å‘"
@@ -8451,6 +9949,9 @@ msgstr "å–消"
msgid "Modal|Close"
msgstr "關閉"
+msgid "Modified in this version"
+msgstr ""
+
msgid "Modify commit message"
msgstr ""
@@ -8463,7 +9964,7 @@ msgstr "修改åˆä½µæ交"
msgid "Monday"
msgstr "星期一"
-msgid "Monitor your errors by integrating with Sentry"
+msgid "Monitor your errors by integrating with Sentry."
msgstr ""
msgid "Monitoring"
@@ -8475,6 +9976,12 @@ msgstr "月"
msgid "More"
msgstr "更多"
+msgid "More Information"
+msgstr ""
+
+msgid "More Slack commands"
+msgstr ""
+
msgid "More actions"
msgstr "更多動作"
@@ -8505,6 +10012,12 @@ msgstr "移動議題"
msgid "Move issue from one column of the board to another"
msgstr ""
+msgid "Move selection down"
+msgstr ""
+
+msgid "Move selection up"
+msgstr ""
+
msgid "Move this issue to another project."
msgstr ""
@@ -8514,6 +10027,12 @@ msgstr ""
msgid "MoveIssue|Cannot move issue to project it originates from!"
msgstr ""
+msgid "Moved issue to %{label} column in the board."
+msgstr ""
+
+msgid "Moved this issue to %{path_to_project}."
+msgstr ""
+
msgid "Moves issue to %{label} column in the board."
msgstr ""
@@ -8608,6 +10127,9 @@ msgstr ""
msgid "New Pipeline Schedule"
msgstr "建立排程管線"
+msgid "New Project"
+msgstr ""
+
msgid "New Snippet"
msgstr "新增片段"
@@ -8695,13 +10217,25 @@ msgstr ""
msgid "Next"
msgstr ""
+msgid "Next file in diff (MRs only)"
+msgstr ""
+
+msgid "Next unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Nickname"
msgstr ""
msgid "No"
msgstr "å¦"
-msgid "No %{providerTitle} repositories available to import"
+msgid "No %{header} for this request."
+msgstr ""
+
+msgid "No %{providerTitle} repositories found"
+msgstr ""
+
+msgid "No Epic"
msgstr ""
msgid "No Label"
@@ -8713,13 +10247,19 @@ msgstr ""
msgid "No Tag"
msgstr ""
+msgid "No active admin user found"
+msgstr ""
+
msgid "No activities found"
msgstr ""
-msgid "No available namespaces to fork the project."
+msgid "No application_settings found"
+msgstr ""
+
+msgid "No authentication methods configured."
msgstr ""
-msgid "No blocking merge requests "
+msgid "No available namespaces to fork the project."
msgstr ""
msgid "No branches found"
@@ -8734,9 +10274,6 @@ msgstr ""
msgid "No connection could be made to a Gitaly Server, please check your logs!"
msgstr "無法連線到 Gitaly 伺æœå™¨ï¼Œè«‹æª¢æŸ¥æ—¥èªŒè¨˜éŒ„ï¼"
-msgid "No container images stored for this project. Add one by following the instructions above."
-msgstr "此專案目å‰æ²’有儲存容器映åƒï¼Œè«‹ä¾ç…§ä¸Šè¿°èªªæ˜Žæ–°å¢žå®¹å™¨æ˜ åƒã€‚"
-
msgid "No contributions"
msgstr ""
@@ -8746,6 +10283,15 @@ msgstr "找ä¸åˆ°è²¢ç»"
msgid "No credit card required."
msgstr "無需信用å¡ã€‚"
+msgid "No data found"
+msgstr ""
+
+msgid "No data to display"
+msgstr ""
+
+msgid "No deployments found"
+msgstr ""
+
msgid "No details available"
msgstr ""
@@ -8770,12 +10316,18 @@ msgstr ""
msgid "No files found."
msgstr "找ä¸åˆ°ä»»ä½•æª”案"
+msgid "No forks available to you."
+msgstr ""
+
msgid "No issues for the selected time period."
msgstr "é¸å–的時間範åœä¸­æ²’有議題。"
msgid "No job trace"
msgstr ""
+msgid "No jobs to show"
+msgstr ""
+
msgid "No labels with such name or description"
msgstr "沒有具有此類å稱或æ述的標籤"
@@ -8830,9 +10382,15 @@ msgstr "找ä¸åˆ°åŸ·è¡Œå™¨"
msgid "No schedules"
msgstr "找ä¸åˆ°æŽ’程"
+msgid "No starrers matched your search"
+msgstr ""
+
msgid "No start date"
msgstr ""
+msgid "No template"
+msgstr ""
+
msgid "No value set by top-level parent group."
msgstr ""
@@ -8842,6 +10400,9 @@ msgstr "ä¸ï¼Œç›´æŽ¥åŒ¯å…¥ç¾æœ‰çš„é›»å­éƒµä»¶ä½å€å’Œä½¿ç”¨è€…å稱。"
msgid "No, not interested right now"
msgstr ""
+msgid "Nobody has starred this repository yet"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -8854,6 +10415,9 @@ msgstr "節點"
msgid "None"
msgstr "ç„¡"
+msgid "Not all data has been processed yet, the accuracy of the chart for the selected timeframe is limited."
+msgstr ""
+
msgid "Not available"
msgstr "無法使用"
@@ -8872,6 +10436,9 @@ msgstr "資料ä¸è¶³"
msgid "Not found."
msgstr ""
+msgid "Not helpful"
+msgstr ""
+
msgid "Not now"
msgstr "ä¸æ˜¯ç¾åœ¨"
@@ -8881,6 +10448,9 @@ msgstr ""
msgid "Not started"
msgstr ""
+msgid "Note"
+msgstr ""
+
msgid "Note that this invitation was sent to %{mail_to_invite_email}, but you are signed in as %{link_to_current_user} with email %{mail_to_current_user}."
msgstr ""
@@ -8896,6 +10466,9 @@ msgstr "注æ„:請考慮讓您的 GitLab 管ç†å“¡è¨­å®š %{github_integration_
msgid "Note: Consider asking your GitLab administrator to configure %{github_integration_link}, which will allow login via GitHub and allow importing repositories without generating a Personal Access Token."
msgstr "注æ„:請考慮讓您的 GitLab 管ç†å“¡è¨­å®š %{github_integration_link},這將å…許使用者é€éŽ GitHub 登入並å…許匯入版本庫而ä¸ç”Ÿæˆå€‹äººå­˜å–憑證。"
+msgid "Note: the container registry is always visible when a project is public"
+msgstr ""
+
msgid "NoteForm|Note"
msgstr ""
@@ -8992,6 +10565,9 @@ msgstr ""
msgid "Notifications"
msgstr "通知"
+msgid "Notifications have been disabled by the project or group owner"
+msgstr ""
+
msgid "Notifications off"
msgstr "關閉通知"
@@ -9010,9 +10586,21 @@ msgstr ""
msgid "Number of Elasticsearch shards"
msgstr ""
+msgid "Number of LOCs per commit"
+msgstr ""
+
+msgid "Number of commits per MR"
+msgstr ""
+
+msgid "Number of files touched"
+msgstr ""
+
msgid "OK"
msgstr "確定"
+msgid "Object Storage replication"
+msgstr ""
+
msgid "Object does not exist on the server or you don't have permissions to access it"
msgstr ""
@@ -9028,6 +10616,9 @@ msgstr "篩é¸"
msgid "Ok let's go"
msgstr ""
+msgid "OmniAuth"
+msgstr ""
+
msgid "Onboarding"
msgstr ""
@@ -9056,6 +10647,12 @@ msgstr "您的一個或多個 Google Code 專案無法直接匯入 GitLab,因ç
msgid "One or more of your dependency files are not supported, and the dependency list may be incomplete. Below is a list of supported file types."
msgstr ""
+msgid "Only 'Reporter' roles and above on tiers Premium / Silver and above can see Cycle Analytics."
+msgstr ""
+
+msgid "Only Project Members"
+msgstr ""
+
msgid "Only admins"
msgstr "僅管ç†å“¡"
@@ -9080,6 +10677,12 @@ msgstr ""
msgid "Only these extensions are supported: %{extension_list}"
msgstr ""
+msgid "Only users with an email address in this domain can be added to the group.<br>Example: <code>gitlab.com</code>. Some common domains are not allowed. %{read_more_link}."
+msgstr ""
+
+msgid "Only ‘Reporter’ roles and above on tiers Premium / Silver and above can see Productivity Analytics."
+msgstr ""
+
msgid "Oops, are you sure?"
msgstr "喔喔…確定?"
@@ -9089,6 +10692,9 @@ msgstr "é–‹å•Ÿ"
msgid "Open Documentation"
msgstr ""
+msgid "Open Selection"
+msgstr ""
+
msgid "Open comment type dropdown"
msgstr ""
@@ -9098,6 +10704,12 @@ msgstr ""
msgid "Open in Xcode"
msgstr "在 Xcode 開啟"
+msgid "Open in file view"
+msgstr ""
+
+msgid "Open issues"
+msgstr ""
+
msgid "Open projects"
msgstr "打開專案"
@@ -9179,6 +10791,12 @@ msgstr "其他資訊"
msgid "Other merge requests block this MR"
msgstr ""
+msgid "Other visibility settings have been disabled by the administrator."
+msgstr ""
+
+msgid "Our Privacy Policy has changed, please visit %{privacy_policy_link} to review these changes."
+msgstr ""
+
msgid "Outbound requests"
msgstr "Outbound 請求"
@@ -9203,6 +10821,18 @@ msgstr "軟體包資訊"
msgid "Package was removed"
msgstr "軟體包被移除"
+msgid "PackageRegistry|Delete Package Version"
+msgstr ""
+
+msgid "PackageRegistry|There was a problem fetching the details for this package."
+msgstr ""
+
+msgid "PackageRegistry|Unable to load package"
+msgstr ""
+
+msgid "PackageRegistry|You are about to delete version %{boldStart}%{version}%{boldEnd} of %{boldStart}%{name}%{boldEnd}. Are you sure?"
+msgstr ""
+
msgid "Packages"
msgstr "軟體包"
@@ -9239,15 +10869,15 @@ msgstr ""
msgid "Pagination|Last »"
msgstr "æœ€æœ«é  Â»"
-msgid "Pagination|Next"
-msgstr "下一é "
-
-msgid "Pagination|Prev"
-msgstr "上一é "
+msgid "Pagination|Next ›"
+msgstr ""
msgid "Pagination|« First"
msgstr "« 第一é "
+msgid "Pagination|‹ Prev"
+msgstr ""
+
msgid "Parameter"
msgstr ""
@@ -9317,9 +10947,27 @@ msgstr ""
msgid "Perform advanced options such as changing path, transferring, or removing the group."
msgstr "執行進階é¸é …,例如變更路徑ã€å‚³è¼¸æˆ–移除群組。"
+msgid "Perform common operations on GitLab project"
+msgstr ""
+
msgid "Performance optimization"
msgstr "效能最佳化"
+msgid "PerformanceBar|Gitaly calls"
+msgstr ""
+
+msgid "PerformanceBar|Redis calls"
+msgstr ""
+
+msgid "PerformanceBar|Rugged calls"
+msgstr ""
+
+msgid "PerformanceBar|SQL queries"
+msgstr ""
+
+msgid "PerformanceBar|trace"
+msgstr ""
+
msgid "Permissions"
msgstr "權é™"
@@ -9347,12 +10995,21 @@ msgstr ""
msgid "Pick a name"
msgstr ""
+msgid "Pick a name for the application, and we'll give you a unique %{type} token."
+msgstr ""
+
msgid "Pin code"
msgstr ""
msgid "Pipeline"
msgstr "管線"
+msgid "Pipeline %{label}"
+msgstr ""
+
+msgid "Pipeline %{label} for \"%{dataTitle}\""
+msgstr ""
+
msgid "Pipeline Schedule"
msgstr "排程管線"
@@ -9419,7 +11076,7 @@ msgstr "變數"
msgid "PipelineSheduleIntervalPattern|Custom"
msgstr "自訂"
-msgid "PipelineStatusTooltip|Commit: %{ci_status}"
+msgid "PipelineStatusTooltip|Pipeline: %{ciStatus}"
msgstr ""
msgid "PipelineStatusTooltip|Pipeline: %{ci_status}"
@@ -9443,12 +11100,21 @@ msgstr "上週的管線"
msgid "Pipelines for last year"
msgstr "去年的管線"
+msgid "Pipelines for merge requests are configured. A detached pipeline runs in the context of the merge request, and not against the merged result. Learn more on the documentation for Pipelines for Merged Results."
+msgstr ""
+
msgid "Pipelines settings for '%{project_name}' were successfully updated."
msgstr ""
msgid "Pipelines| to purchase more minutes."
msgstr ""
+msgid "Pipelines|%{namespace_name} has exceeded its pipeline minutes quota."
+msgstr ""
+
+msgid "Pipelines|%{namespace_name} has less than %{notification_level}%% of CI minutes available."
+msgstr ""
+
msgid "Pipelines|API"
msgstr ""
@@ -9497,15 +11163,30 @@ msgstr "這個專案目å‰é‚„沒設定管線。"
msgid "Pipeline|Commit"
msgstr "æ交"
+msgid "Pipeline|Could not retrieve the pipeline status. For troubleshooting steps, read the %{linkStart}documentation.%{linkEnd}"
+msgstr ""
+
msgid "Pipeline|Coverage"
msgstr ""
+msgid "Pipeline|Detached merge request pipeline"
+msgstr ""
+
msgid "Pipeline|Duration"
msgstr "耗時"
msgid "Pipeline|Existing branch name or tag"
msgstr "存在的分支å稱或標籤"
+msgid "Pipeline|Key"
+msgstr ""
+
+msgid "Pipeline|Merge train pipeline"
+msgstr ""
+
+msgid "Pipeline|Merged result pipeline"
+msgstr ""
+
msgid "Pipeline|Pipeline"
msgstr "管線"
@@ -9536,6 +11217,9 @@ msgstr "åœæ­¢ç®¡ç·š #%{pipelineId}?"
msgid "Pipeline|Triggerer"
msgstr ""
+msgid "Pipeline|Value"
+msgstr ""
+
msgid "Pipeline|Variables"
msgstr "變數"
@@ -9548,18 +11232,12 @@ msgstr "全部"
msgid "Pipeline|for"
msgstr ""
-msgid "Pipeline|into"
-msgstr ""
-
msgid "Pipeline|on"
msgstr ""
msgid "Pipeline|success"
msgstr "æˆåŠŸ"
-msgid "Pipeline|with"
-msgstr ""
-
msgid "Pipeline|with stage"
msgstr "與階段"
@@ -9590,6 +11268,9 @@ msgstr ""
msgid "Please %{link_to_register} or %{link_to_sign_in} to comment"
msgstr ""
+msgid "Please %{startTagRegister}register%{endRegisterTag} or %{startTagSignIn}sign in%{endSignInTag} to reply"
+msgstr ""
+
msgid "Please accept the Terms of Service before continuing."
msgstr "在繼續之å‰ï¼Œè«‹åŒæ„æœå‹™æ¢æ¬¾"
@@ -9608,6 +11289,9 @@ msgstr ""
msgid "Please check the configuration file to ensure that it is available and the YAML is valid"
msgstr ""
+msgid "Please check your email (%{email}) to verify that you own this address. Didn't receive it? %{resend_link}. Wrong email address? %{update_link}."
+msgstr ""
+
msgid "Please choose a group URL with no special characters."
msgstr "è«‹é¸æ“‡æ²’有特殊符號的群組網å€ã€‚"
@@ -9695,6 +11379,9 @@ msgstr "è«‹ç¨å€™ï¼Œæ­£åœ¨é€£ç·šåˆ°æ‚¨çš„版本庫,ç¨å¾Œè«‹é‡æ–°æ•´ç†ã€‚"
msgid "Please wait while we import the repository for you. Refresh at will."
msgstr "è«‹ç¨å€™ï¼Œæ­£åœ¨åŒ¯å…¥æ‚¨çš„版本庫,ç¨å¾Œè«‹é‡æ–°æ•´ç†ã€‚"
+msgid "Pods in use"
+msgstr ""
+
msgid "Preferences"
msgstr "å好設定"
@@ -9704,7 +11391,7 @@ msgstr ""
msgid "Preferences|Behavior"
msgstr ""
-msgid "Preferences|Choose between fixed (max. 1280px) and fluid (100%%) application layout."
+msgid "Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout."
msgstr ""
msgid "Preferences|Choose what content you want to see on a project’s overview page."
@@ -9731,6 +11418,9 @@ msgstr "導航主題"
msgid "Preferences|Project overview content"
msgstr ""
+msgid "Preferences|Show whitespace in diffs"
+msgstr ""
+
msgid "Preferences|Syntax highlighting theme"
msgstr ""
@@ -9788,6 +11478,12 @@ msgstr "é è¦½æœ‰æ•ˆè² è¼‰"
msgid "Previous Artifacts"
msgstr ""
+msgid "Previous file in diff (MRs only)"
+msgstr ""
+
+msgid "Previous unresolved discussion (MRs only)"
+msgstr ""
+
msgid "Primary"
msgstr "主è¦"
@@ -9824,6 +11520,21 @@ msgstr "å¯ä»¥åœ¨æ‚¨çš„個人命å空間中建立ç§äººå°ˆæ¡ˆ:"
msgid "Proceed"
msgstr ""
+msgid "Productivity Analytics"
+msgstr ""
+
+msgid "Productivity analytics can help identify the problems that are delaying your team"
+msgstr ""
+
+msgid "ProductivityAnalytics|Ascending"
+msgstr ""
+
+msgid "ProductivityAnalytics|Days to merge"
+msgstr ""
+
+msgid "ProductivityAnalytics|Descending"
+msgstr ""
+
msgid "Profile"
msgstr "個人資料"
@@ -9938,6 +11649,9 @@ msgstr ""
msgid "Profiles|Full name"
msgstr ""
+msgid "Profiles|Impersonation"
+msgstr ""
+
msgid "Profiles|Include private contributions on my profile"
msgstr ""
@@ -9980,6 +11694,9 @@ msgstr ""
msgid "Profiles|Path"
msgstr "ä½ç½®"
+msgid "Profiles|Personal Access"
+msgstr ""
+
msgid "Profiles|Position and size your new avatar"
msgstr "定ä½ä¸¦èª¿æ•´æ‚¨æ–°é ­è²¼çš„大å°"
@@ -10010,6 +11727,9 @@ msgstr ""
msgid "Profiles|Some options are unavailable for LDAP accounts"
msgstr "部份é¸é …ä¸æ”¯æ´ LDAP 帳號"
+msgid "Profiles|Static object token was successfully reset"
+msgstr ""
+
msgid "Profiles|Tell us about yourself in fewer than 250 characters"
msgstr ""
@@ -10115,6 +11835,12 @@ msgstr "你的狀態"
msgid "Profiles|e.g. My MacBook key"
msgstr "例如:我的 MacBook 金鑰"
+msgid "Profiles|impersonation"
+msgstr ""
+
+msgid "Profiles|personal access"
+msgstr ""
+
msgid "Profiles|username"
msgstr ""
@@ -10160,6 +11886,9 @@ msgstr "專案「%{project_name}ã€æ›´æ–°æˆåŠŸã€‚"
msgid "Project Badges"
msgstr "專案徽章"
+msgid "Project Files"
+msgstr ""
+
msgid "Project ID"
msgstr ""
@@ -10169,6 +11898,9 @@ msgstr "專案 URL"
msgid "Project access must be granted explicitly to each user."
msgstr "專案權é™å¿…須明確指派給æ¯ä½ä½¿ç”¨è€…。"
+msgid "Project already created"
+msgstr ""
+
msgid "Project and wiki repositories"
msgstr ""
@@ -10220,9 +11952,6 @@ msgstr ""
msgid "Project visibility level will be changed to match namespace rules when transferring to a group."
msgstr ""
-msgid "Project:"
-msgstr ""
-
msgid "Project: %{name}"
msgstr ""
@@ -10265,6 +11994,12 @@ msgstr "移至你的分å‰"
msgid "ProjectOverview|Star"
msgstr "星星"
+msgid "ProjectOverview|Starrer"
+msgstr ""
+
+msgid "ProjectOverview|Starrers"
+msgstr ""
+
msgid "ProjectOverview|Unstar"
msgstr "刪除星星"
@@ -10283,13 +12018,43 @@ msgstr ""
msgid "ProjectSelect|Search for project"
msgstr ""
-msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgid "ProjectService|%{service_title}: status off"
msgstr ""
-msgid "ProjectSettings|All discussions must be resolved"
+msgid "ProjectService|%{service_title}: status on"
+msgstr ""
+
+msgid "ProjectService|Integrations"
msgstr ""
-msgid "ProjectSettings|Allow merge trains"
+msgid "ProjectService|Last edit"
+msgstr ""
+
+msgid "ProjectService|Perform common operations on GitLab project: %{project_name}"
+msgstr ""
+
+msgid "ProjectService|Project services"
+msgstr ""
+
+msgid "ProjectService|Project services allow you to integrate GitLab with other applications"
+msgstr ""
+
+msgid "ProjectService|Service"
+msgstr ""
+
+msgid "ProjectService|Services"
+msgstr ""
+
+msgid "ProjectService|Settings"
+msgstr ""
+
+msgid "ProjectService|To set up this service:"
+msgstr ""
+
+msgid "ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed"
+msgstr ""
+
+msgid "ProjectSettings|All discussions must be resolved"
msgstr ""
msgid "ProjectSettings|Automatically resolve merge request diff discussions when they become outdated"
@@ -10298,6 +12063,12 @@ msgstr ""
msgid "ProjectSettings|Badges"
msgstr "徵章"
+msgid "ProjectSettings|Choose your merge method, merge options, and merge checks."
+msgstr ""
+
+msgid "ProjectSettings|Choose your merge method, merge options, merge checks, and set up a default description template for merge requests."
+msgstr ""
+
msgid "ProjectSettings|Contact an admin to change this setting."
msgstr "è¯çµ¡ç®¡ç†å“¡ä»¥è®Šæ›´é€™å€‹è¨­å®šã€‚"
@@ -10469,12 +12240,60 @@ msgstr "抱歉,沒有符åˆæœå°‹æ¢ä»¶çš„專案"
msgid "ProjectsDropdown|This feature requires browser localStorage support"
msgstr "此功能需è¦ç€è¦½å™¨çš„ localStorage 支æ´"
+msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository."
+msgstr ""
+
+msgid "ProjectsNew|Blank"
+msgstr ""
+
+msgid "ProjectsNew|Blank project"
+msgstr ""
+
+msgid "ProjectsNew|Contact an administrator to enable options for importing your project."
+msgstr ""
+
+msgid "ProjectsNew|Create from template"
+msgstr ""
+
+msgid "ProjectsNew|Creating project & repository."
+msgstr ""
+
+msgid "ProjectsNew|Description format"
+msgstr ""
+
+msgid "ProjectsNew|Import"
+msgstr ""
+
+msgid "ProjectsNew|Import project"
+msgstr ""
+
+msgid "ProjectsNew|Initialize repository with a README"
+msgstr ""
+
+msgid "ProjectsNew|No import options available"
+msgstr ""
+
+msgid "ProjectsNew|Please wait a moment, this page will automatically refresh when ready."
+msgstr ""
+
+msgid "ProjectsNew|Project description %{tag_start}(optional)%{tag_end}"
+msgstr ""
+
+msgid "ProjectsNew|Template"
+msgstr ""
+
+msgid "ProjectsNew|Visibility Level"
+msgstr ""
+
+msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}"
+msgstr ""
+
+msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI"
+msgstr ""
+
msgid "PrometheusAlerts|Add alert"
msgstr "增加警報"
-msgid "PrometheusAlerts|Alert set"
-msgstr "警報設定"
-
msgid "PrometheusAlerts|Edit alert"
msgstr "編輯警報"
@@ -10490,9 +12309,6 @@ msgstr "讀å–警示時發生錯誤"
msgid "PrometheusAlerts|Error saving alert"
msgstr "儲存警示時發生錯誤"
-msgid "PrometheusAlerts|No alert set"
-msgstr "未設定警報"
-
msgid "PrometheusAlerts|Operator"
msgstr "æ“作者"
@@ -10526,6 +12342,9 @@ msgstr "常用的指標會根據å—匯出者歡迎的指標庫來自動監控。
msgid "PrometheusService|Custom metrics"
msgstr "自訂指標"
+msgid "PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope \"*\" OR a manually configured Prometheus to be available."
+msgstr ""
+
msgid "PrometheusService|Enable Prometheus to define custom metrics, using either option above"
msgstr ""
@@ -10556,6 +12375,9 @@ msgstr "更多資訊"
msgid "PrometheusService|New metric"
msgstr "新增指標"
+msgid "PrometheusService|No custom metrics have been created. Create one using the button above"
+msgstr ""
+
msgid "PrometheusService|Prometheus API Base URL, like http://prometheus.example.com/"
msgstr "Prometheus API ä½å€ï¼Œä¾‹å¦‚ http://prometheus.example.com/"
@@ -10580,6 +12402,12 @@ msgstr "等您首次佈署到環境後以查詢常用指標"
msgid "Promote"
msgstr "æå‡"
+msgid "Promote issue to an epic"
+msgstr ""
+
+msgid "Promote issue to an epic."
+msgstr ""
+
msgid "Promote these project milestones into a group milestone."
msgstr "將這些專案里程碑æå‡æˆç¾¤çµ„里程碑。"
@@ -10598,6 +12426,9 @@ msgstr ""
msgid "PromoteMilestone|Promotion failed - %{message}"
msgstr ""
+msgid "Promoted issue to an epic."
+msgstr ""
+
msgid "Promotions|Don't show me this again"
msgstr "ä¸è¦å†é¡¯ç¤º"
@@ -10628,6 +12459,9 @@ msgstr "å—ä¿è­·ç’°å¢ƒ"
msgid "Protected Tag"
msgstr ""
+msgid "Protected branches"
+msgstr ""
+
msgid "ProtectedEnvironment|%{environment_name} will be writable for developers. Are you sure?"
msgstr "%{environment_name} 將開放開發者的寫入權é™ï¼Œç¢ºèªï¼Ÿ"
@@ -10703,6 +12537,9 @@ msgstr "公共管線"
msgid "Pull"
msgstr "拉å–"
+msgid "Purchase more minutes"
+msgstr ""
+
msgid "Push"
msgstr "推é€"
@@ -10796,6 +12633,9 @@ msgstr ""
msgid "Rake Tasks Help"
msgstr ""
+msgid "Raw blob request rate limit per minute"
+msgstr ""
+
msgid "Read more"
msgstr "了解更多"
@@ -10805,9 +12645,18 @@ msgstr ""
msgid "Read more about project permissions <strong>%{link_to_help}</strong>"
msgstr "閱讀有關專案權é™çš„ç›¸é—œè¨Šæ¯ <strong>%{link_to_help}</strong>"
+msgid "Read more about related issues"
+msgstr ""
+
msgid "Real-time features"
msgstr "å³æ™‚功能"
+msgid "Rebase"
+msgstr ""
+
+msgid "Rebase in progress"
+msgstr ""
+
msgid "Receive alerts from manually configured Prometheus servers."
msgstr ""
@@ -10817,6 +12666,9 @@ msgstr ""
msgid "Recent"
msgstr ""
+msgid "Recent Activity"
+msgstr ""
+
msgid "Recent Project Activity"
msgstr ""
@@ -10884,9 +12736,6 @@ msgstr ""
msgid "Registration"
msgstr ""
-msgid "Registry"
-msgstr "註冊表"
-
msgid "Related Deployed Jobs"
msgstr "相關佈署作業"
@@ -10914,6 +12763,9 @@ msgstr ""
msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API."
msgstr ""
+msgid "Remember me"
+msgstr ""
+
msgid "Remind later"
msgstr "ç¨å¾Œæ醒"
@@ -10923,9 +12775,15 @@ msgstr ""
msgid "Remove"
msgstr "移除"
+msgid "Remove %{displayReference}"
+msgstr ""
+
msgid "Remove Runner"
msgstr "移除執行器"
+msgid "Remove Zoom meeting"
+msgstr ""
+
msgid "Remove all approvals in a merge request when new commits are pushed to its source branch"
msgstr ""
@@ -10947,6 +12805,9 @@ msgstr "移除指派人"
msgid "Remove avatar"
msgstr "移除大頭貼"
+msgid "Remove card"
+msgstr ""
+
msgid "Remove child epic from an epic"
msgstr ""
@@ -10956,12 +12817,21 @@ msgstr ""
msgid "Remove fork relationship"
msgstr ""
+msgid "Remove from board"
+msgstr ""
+
+msgid "Remove from epic"
+msgstr ""
+
msgid "Remove group"
msgstr "刪除群組"
msgid "Remove milestone"
msgstr ""
+msgid "Remove parent epic from an epic"
+msgstr ""
+
msgid "Remove priority"
msgstr "刪除優先權"
@@ -10971,30 +12841,75 @@ msgstr "移除專案"
msgid "Remove spent time"
msgstr ""
+msgid "Remove stage"
+msgstr ""
+
msgid "Remove time estimate"
msgstr ""
msgid "Removed"
msgstr ""
+msgid "Removed %{assignee_text} %{assignee_references}."
+msgstr ""
+
+msgid "Removed %{epic_ref} from child epics."
+msgstr ""
+
+msgid "Removed %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Removed %{milestone_reference} milestone."
+msgstr ""
+
msgid "Removed %{type} with id %{id}"
msgstr ""
+msgid "Removed all labels."
+msgstr ""
+
+msgid "Removed an issue from an epic."
+msgstr ""
+
msgid "Removed group can not be restored!"
msgstr "刪除的群組將無法復原ï¼"
+msgid "Removed parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removed projects cannot be restored!"
msgstr ""
+msgid "Removed spent time."
+msgstr ""
+
+msgid "Removed the due date."
+msgstr ""
+
+msgid "Removed time estimate."
+msgstr ""
+
+msgid "Removes %{assignee_text} %{assignee_references}."
+msgstr ""
+
msgid "Removes %{epic_ref} from child epics."
msgstr ""
+msgid "Removes %{label_references} %{label_text}."
+msgstr ""
+
msgid "Removes %{milestone_reference} milestone."
msgstr ""
msgid "Removes all labels."
msgstr ""
+msgid "Removes an issue from an epic."
+msgstr ""
+
+msgid "Removes parent epic %{epic_ref}."
+msgstr ""
+
msgid "Removes spent time."
msgstr ""
@@ -11028,6 +12943,15 @@ msgstr "é‡æ–°é–‹å•Ÿå²è©©"
msgid "Reopen milestone"
msgstr "é‡æ–°æ‰“開里程碑"
+msgid "Reopen this %{quick_action_target}"
+msgstr ""
+
+msgid "Reopened this %{quick_action_target}."
+msgstr ""
+
+msgid "Reopens this %{quick_action_target}."
+msgstr ""
+
msgid "Repair authentication"
msgstr "修復èªè­‰"
@@ -11037,12 +12961,21 @@ msgstr "å–代"
msgid "Replace all label(s)"
msgstr ""
+msgid "Replaced all labels with %{label_references} %{label_text}."
+msgstr ""
+
+msgid "Reply by email"
+msgstr ""
+
msgid "Reply to comment"
msgstr ""
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr "直接回復此電å­ä¿¡ç®±æˆ– %{view_it_on_gitlab}。"
+msgid "Reply..."
+msgstr ""
+
msgid "Repo by URL"
msgstr "來自 URL 的版本庫"
@@ -11109,6 +13042,9 @@ msgstr "沒有變更的測試çµæžœ"
msgid "Repository"
msgstr "版本庫"
+msgid "Repository Graph"
+msgstr ""
+
msgid "Repository Settings"
msgstr "版本庫設定"
@@ -11133,9 +13069,15 @@ msgstr "版本庫維護"
msgid "Repository mirror"
msgstr "é¡åƒç‰ˆæœ¬åº«"
+msgid "Repository static objects"
+msgstr ""
+
msgid "Repository storage"
msgstr "版本庫儲存空間"
+msgid "Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / LFS: %{counter_lfs_objects}"
+msgstr ""
+
msgid "RepositorySettingsAccessLevel|Select"
msgstr "é¸æ“‡"
@@ -11148,6 +13090,9 @@ msgstr ""
msgid "Requests Profiles"
msgstr "請求個人資料"
+msgid "Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The whitelist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com."
+msgstr ""
+
msgid "Require all users in this group to setup Two-factor authentication"
msgstr "è¦æ±‚此群組中的所有使用者啟用兩步驟驗證"
@@ -11163,6 +13108,9 @@ msgstr ""
msgid "Require users to prove ownership of custom domains"
msgstr ""
+msgid "Required argument 'targetElement' is missing"
+msgstr ""
+
msgid "Requires approval from %{names}."
msgid_plural "Requires %{count} more approvals from %{names}."
msgstr[0] "從 %{names} éœ€è¦ %{count} 核准。"
@@ -11177,6 +13125,9 @@ msgstr ""
msgid "Resend invite"
msgstr ""
+msgid "Resend it"
+msgstr ""
+
msgid "Reset authorization key"
msgstr ""
@@ -11192,11 +13143,17 @@ msgstr ""
msgid "Reset runners registration token"
msgstr "é‡è¨­åŸ·è¡Œå™¨è¨»å†Šæ†‘è­‰"
+msgid "Reset template"
+msgstr ""
+
+msgid "Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in."
+msgstr ""
+
msgid "Resetting the authorization key will invalidate the previous key. Existing alert configurations will need to be updated with the new key."
msgstr ""
-msgid "Resolve all discussions in new issue"
-msgstr "建立新議題以解決所有討論"
+msgid "Resolve all threads in new issue"
+msgstr ""
msgid "Resolve conflicts on source branch"
msgstr "解決來æºåˆ†æ”¯ä¸Šçš„è¡çª"
@@ -11204,6 +13161,9 @@ msgstr "解決來æºåˆ†æ”¯ä¸Šçš„è¡çª"
msgid "Resolve discussion"
msgstr "關閉討論"
+msgid "Resolve thread"
+msgstr ""
+
msgid "Resolved"
msgstr ""
@@ -11252,6 +13212,9 @@ msgstr ""
msgid "Restrict access by IP address"
msgstr ""
+msgid "Restrict membership by email"
+msgstr ""
+
msgid "Resume"
msgstr "繼續"
@@ -11316,6 +13279,9 @@ msgstr ""
msgid "Roadmap"
msgstr "路線圖"
+msgid "Rollback"
+msgstr ""
+
msgid "Run CI/CD pipelines for external repositories"
msgstr "執行外部版本庫的 CI / CD 管線。"
@@ -11376,8 +13342,8 @@ msgstr "執行器é é¢"
msgid "Runners page."
msgstr "執行器é é¢ã€‚"
-msgid "Runners|You have used all your shared Runners pipeline minutes."
-msgstr "您已經使用了所有分享的執行器多久的時間。"
+msgid "Runners|You have used %{quotaUsed} out of %{quotaLimit} of your shared Runners pipeline minutes."
+msgstr ""
msgid "Running"
msgstr "執行中"
@@ -11451,6 +13417,9 @@ msgstr "儲存排程管線"
msgid "Save variables"
msgstr "儲存變數"
+msgid "Saving"
+msgstr ""
+
msgid "Saving project."
msgstr ""
@@ -11460,6 +13429,9 @@ msgstr "排程新管線"
msgid "Scheduled"
msgstr "已排程"
+msgid "Scheduled to merge this merge request when the pipeline succeeds."
+msgstr ""
+
msgid "Schedules"
msgstr "排程"
@@ -11481,15 +13453,30 @@ msgstr "å€åŸŸæ€§çš„議題看æ¿"
msgid "Scoped label"
msgstr ""
+msgid "Scopes"
+msgstr ""
+
+msgid "Scroll down"
+msgstr ""
+
msgid "Scroll down to <strong>Google Code Project Hosting</strong> and enable the switch on the right."
msgstr "å‘下滾動到 <strong>Google Code Project Hosting</strong> 並啟用å³å´çš„開關。"
+msgid "Scroll left"
+msgstr ""
+
+msgid "Scroll right"
+msgstr ""
+
msgid "Scroll to bottom"
msgstr "滾到底部"
msgid "Scroll to top"
msgstr "滾到頂部"
+msgid "Scroll up"
+msgstr ""
+
msgid "Search"
msgstr "æœå°‹"
@@ -11577,9 +13564,65 @@ msgstr "在這個群組"
msgid "SearchAutocomplete|in this project"
msgstr "在這個專案"
+msgid "SearchCodeResults|in"
+msgstr ""
+
+msgid "SearchCodeResults|of %{link_to_project}"
+msgstr ""
+
+msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
+msgstr ""
+
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr ""
+msgid "SearchResults|We couldn't find any %{scope} matching %{term}"
+msgstr ""
+
+msgid "SearchResults|code result"
+msgid_plural "SearchResults|code results"
+msgstr[0] ""
+
+msgid "SearchResults|comment"
+msgid_plural "SearchResults|comments"
+msgstr[0] ""
+
+msgid "SearchResults|commit"
+msgid_plural "SearchResults|commits"
+msgstr[0] ""
+
+msgid "SearchResults|issue"
+msgid_plural "SearchResults|issues"
+msgstr[0] ""
+
+msgid "SearchResults|merge request"
+msgid_plural "SearchResults|merge requests"
+msgstr[0] ""
+
+msgid "SearchResults|milestone"
+msgid_plural "SearchResults|milestones"
+msgstr[0] ""
+
+msgid "SearchResults|project"
+msgid_plural "SearchResults|projects"
+msgstr[0] ""
+
+msgid "SearchResults|snippet"
+msgid_plural "SearchResults|snippets"
+msgstr[0] ""
+
+msgid "SearchResults|snippet result"
+msgid_plural "SearchResults|snippet results"
+msgstr[0] ""
+
+msgid "SearchResults|user"
+msgid_plural "SearchResults|users"
+msgstr[0] ""
+
+msgid "SearchResults|wiki result"
+msgid_plural "SearchResults|wiki results"
+msgstr[0] ""
+
msgid "Seats currently in use"
msgstr ""
@@ -11592,6 +13635,9 @@ msgstr "密碼"
msgid "Security"
msgstr "安全"
+msgid "Security & Compliance"
+msgstr ""
+
msgid "Security Dashboard"
msgstr "安全儀表æ¿"
@@ -11607,24 +13653,48 @@ msgstr "讀å–æ¼æ´žåˆ—表時發生錯誤,請檢查您的網路連線,然後
msgid "Security Dashboard|Issue Created"
msgstr "已建立å•é¡Œ"
+msgid "Security Reports|Comment added to '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment deleted on '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Comment edited on '%{vulnerabilityName}'"
+msgstr ""
+
msgid "Security Reports|Create issue"
msgstr "建立å•é¡Œ"
msgid "Security Reports|Dismiss vulnerability"
msgstr "忽略æ¼æ´ž"
+msgid "Security Reports|Dismissed '%{vulnerabilityName}'"
+msgstr ""
+
+msgid "Security Reports|Either you don't have permission to view this dashboard or the dashboard has not been setup. Please check your permission settings with your administrator or check your dashboard configurations to proceed."
+msgstr ""
+
msgid "Security Reports|Learn more about setting up your dashboard"
msgstr ""
msgid "Security Reports|More info"
msgstr "更多資訊"
+msgid "Security Reports|Oops, something doesn't seem right."
+msgstr ""
+
+msgid "Security Reports|There was an error adding the comment."
+msgstr ""
+
msgid "Security Reports|There was an error creating the issue."
msgstr "建立議題時發生錯誤。"
msgid "Security Reports|There was an error creating the merge request."
msgstr ""
+msgid "Security Reports|There was an error deleting the comment."
+msgstr ""
+
msgid "Security Reports|There was an error dismissing the vulnerability."
msgstr "忽略æ¼æ´žæ™‚發生錯誤。"
@@ -11652,6 +13722,9 @@ msgstr "安全儀表æ¿å°‡é¡¯ç¤ºæœ€æ–°çš„安全報告。用它來尋找和修補
msgid "SecurityDashboard|Confidence"
msgstr ""
+msgid "SecurityDashboard|Hide dismissed"
+msgstr ""
+
msgid "SecurityDashboard|Monitor vulnerabilities in your code"
msgstr "監控程å¼ç¢¼ä¸­çš„æ¼æ´ž"
@@ -11679,6 +13752,9 @@ msgstr "é¸æ“‡"
msgid "Select Archive Format"
msgstr "é¸æ“‡å°å­˜æª”æ ¼å¼"
+msgid "Select GitLab project to link with your Slack team"
+msgstr ""
+
msgid "Select Page"
msgstr ""
@@ -11688,12 +13764,18 @@ msgstr ""
msgid "Select a group to invite"
msgstr "é¸æ“‡è¦é‚€è«‹çš„群組"
+msgid "Select a label"
+msgstr ""
+
msgid "Select a namespace to fork the project"
msgstr "é¸æ“‡ä¸€å€‹å‘½å空間,以複製這個專案"
msgid "Select a new namespace"
msgstr ""
+msgid "Select a project"
+msgstr ""
+
msgid "Select a project to read Insights configuration file"
msgstr ""
@@ -11706,6 +13788,9 @@ msgstr "é¸æ“‡æ¨¡æ¿ç‰ˆæœ¬åº«"
msgid "Select a timezone"
msgstr "é¸æ“‡æ™‚å€"
+msgid "Select all"
+msgstr ""
+
msgid "Select an existing Kubernetes cluster or create a new one"
msgstr "é¸æ“‡ä¸€å€‹ç¾æœ‰çš„ Kubernetes å¢é›†æˆ–新增一個"
@@ -11715,7 +13800,16 @@ msgstr "é¸æ“‡åˆ†æ”¯æˆ–標籤"
msgid "Select group or project"
msgstr ""
-msgid "Select members to invite"
+msgid "Select labels"
+msgstr ""
+
+msgid "Select merge moment"
+msgstr ""
+
+msgid "Select milestone"
+msgstr ""
+
+msgid "Select private project"
msgstr ""
msgid "Select project"
@@ -11727,6 +13821,9 @@ msgstr "é¸æ“‡å°ˆæ¡ˆèˆ‡ä½ç½®ä¾†é¸æ“‡æ©Ÿå™¨é¡žåž‹"
msgid "Select project to choose zone"
msgstr "é¸æ“‡å°ˆæ¡ˆä»¥é¸æ“‡ä½ç½®"
+msgid "Select projects"
+msgstr ""
+
msgid "Select projects you want to import."
msgstr "é¸æ“‡ä½ æƒ³è¦åŒ¯å…¥çš„專案。"
@@ -11742,13 +13839,19 @@ msgstr "é¸æ“‡æ­¤å°ˆæ¡ˆçš„é è¨­åˆ†æ”¯ã€‚除éžæœ‰é¡å¤–設定,å¦å‰‡æ‰€æœ‰åˆ
msgid "Select the custom project template source group."
msgstr "é¸æ“‡è‡ªè¨‚專案模æ¿ä¾†æºç¾¤çµ„。"
+msgid "Select timeframe"
+msgstr ""
+
+msgid "Select user"
+msgstr ""
+
msgid "Selected levels cannot be used by non-admin users for groups, projects or snippets. If the public level is restricted, user profiles are only visible to logged in users."
msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr "é¸æ“‡ GitLab 使用者將在議題和留言的æè¿°ä¸­æ–°å¢žæŒ‡å‘ GitLab 使用者的超連çµï¼ˆä¾‹å¦‚\"ç”± <a href=\"#\">@johnsmith</a>\")。它還將與所é¸ä½¿ç”¨è€…é—œè¯/分é…這些議題和留言。"
-msgid "Send an email notification to Developers."
+msgid "Send a separate email notification to Developers."
msgstr ""
msgid "Send confirmation email"
@@ -11775,6 +13878,12 @@ msgstr ""
msgid "September"
msgstr "ä¹æœˆ"
+msgid "SeriesFinalConjunction|and"
+msgstr ""
+
+msgid "Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN)."
+msgstr ""
+
msgid "Server supports batch API only, please update your Git LFS client to version 1.0.1 and up."
msgstr ""
@@ -11802,6 +13911,9 @@ msgstr ""
msgid "ServerlessDetails|More information"
msgstr ""
+msgid "ServerlessDetails|No pods loaded at this time."
+msgstr ""
+
msgid "ServerlessDetails|Number of Kubernetes pods in use over time based on necessity."
msgstr ""
@@ -11832,9 +13944,21 @@ msgstr ""
msgid "Serverless|No functions available"
msgstr ""
+msgid "Serverless|The deploy job has not finished."
+msgstr ""
+
+msgid "Serverless|The functions listed in the %{startTag}serverless.yml%{endTag} file don't match the namespace of your cluster."
+msgstr ""
+
msgid "Serverless|There is currently no function data available from Knative. This could be for a variety of reasons including:"
msgstr ""
+msgid "Serverless|Your %{startTag}.gitlab-ci.yml%{endTag} file is not properly configured."
+msgstr ""
+
+msgid "Serverless|Your repository does not have a corresponding %{startTag}serverless.yml%{endTag} file."
+msgstr ""
+
msgid "Service"
msgstr ""
@@ -11853,6 +13977,9 @@ msgstr ""
msgid "Session expiration, projects limit and attachment size."
msgstr "éŽæœŸå·¥ä½œéšŽæ®µã€å°ˆæ¡ˆä¸Šé™èˆ‡é™„件大å°ã€‚"
+msgid "Set %{epic_ref} as parent epic."
+msgstr ""
+
msgid "Set a default template for issue descriptions."
msgstr ""
@@ -11886,12 +14013,24 @@ msgstr ""
msgid "Set notification email for abuse reports."
msgstr "為濫用回報設定通知電å­ä¿¡ç®±ã€‚"
+msgid "Set parent epic to an epic"
+msgstr ""
+
msgid "Set requirements for a user to sign-in. Enable mandatory two-factor authentication."
msgstr "設定使用者登入的需求。啟用強制性的兩步驟驗證。"
+msgid "Set target branch"
+msgstr ""
+
+msgid "Set target branch to %{branch_name}."
+msgstr ""
+
msgid "Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: <code>4 mins 2 sec</code>, <code>2h42min</code>."
msgstr ""
+msgid "Set the due date to %{due_date}."
+msgstr ""
+
msgid "Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: <code>15 days</code>, <code>1 month</code>, <code>2 years</code>."
msgstr ""
@@ -11901,18 +14040,24 @@ msgstr ""
msgid "Set the maximum number of pipeline minutes that a group can use on shared Runners per month. 0 for unlimited."
msgstr ""
+msgid "Set the milestone to %{milestone_reference}."
+msgstr ""
+
msgid "Set time estimate"
msgstr ""
+msgid "Set time estimate to %{time_estimate}."
+msgstr ""
+
msgid "Set up CI/CD"
msgstr "設定 CI / CD"
+msgid "Set up a %{type} Runner automatically"
+msgstr ""
+
msgid "Set up a %{type} Runner manually"
msgstr "手動設定 %{type} 執行器"
-msgid "Set up a specific Runner automatically"
-msgstr "自動設定特定的執行器"
-
msgid "Set up assertions/attributes/claims (email, first_name, last_name) and NameID according to %{docsLinkStart}the documentation %{icon}%{docsLinkEnd}"
msgstr "根據 %{docsLinkStart}這個檔案%{icon}%{docsLinkEnd} 設定斷言 / 屬性 / è²æ˜Ž (email, first_name, last_name) å’Œ NameID"
@@ -11928,6 +14073,9 @@ msgstr "設定你的專案以自動推é€å’Œ/或從å¦ä¸€å€‹ç‰ˆæœ¬åº«æ‹‰å–變æ›
msgid "Set weight"
msgstr ""
+msgid "Set weight to %{weight}."
+msgstr ""
+
msgid "SetPasswordToCloneLink|set a password"
msgstr "設定密碼"
@@ -11955,6 +14103,12 @@ msgstr "抱歉,我們無法設定您的狀態,請ç¨å€™åœ¨è©¦ã€‚"
msgid "SetStatusModal|What's your status?"
msgstr "你的狀態是什麼?"
+msgid "Sets %{epic_ref} as parent epic."
+msgstr ""
+
+msgid "Sets target branch to %{branch_name}."
+msgstr ""
+
msgid "Sets the due date to %{due_date}."
msgstr ""
@@ -12012,9 +14166,15 @@ msgstr ""
msgid "Show command"
msgstr "顯示指令"
+msgid "Show comments"
+msgstr ""
+
msgid "Show comments only"
msgstr "åªé¡¯ç¤ºç•™è¨€"
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr "顯示完整的原始記錄"
@@ -12037,6 +14197,18 @@ msgid "Showing %d event"
msgid_plural "Showing %d events"
msgstr[0] "顯示 %d 個事件"
+msgid "Showing Latest Version"
+msgstr ""
+
+msgid "Showing Version #%{versionNumber}"
+msgstr ""
+
+msgid "Showing all issues"
+msgstr ""
+
+msgid "Showing last %{size} of log -"
+msgstr ""
+
msgid "Side-by-side"
msgstr "並排"
@@ -12067,6 +14239,9 @@ msgstr ""
msgid "Sign in via 2FA code"
msgstr ""
+msgid "Sign in with Google"
+msgstr ""
+
msgid "Sign in with Single Sign-On"
msgstr "é€éŽå–®ä¸€ç™»å…¥é€²è¡Œç™»å…¥"
@@ -12079,6 +14254,9 @@ msgstr "登出"
msgid "Sign out & Register"
msgstr ""
+msgid "Sign up"
+msgstr ""
+
msgid "Sign up was successful! Please confirm your email to sign in."
msgstr ""
@@ -12088,6 +14266,12 @@ msgstr "登入é™åˆ¶"
msgid "Sign-up restrictions"
msgstr "註冊é™åˆ¶"
+msgid "SignUp|First Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
+msgid "SignUp|Last Name is too long (maximum is %{max_length} characters)."
+msgstr ""
+
msgid "SignUp|Name is too long (maximum is %{max_length} characters)."
msgstr ""
@@ -12112,6 +14296,9 @@ msgstr ""
msgid "Single or combined queries"
msgstr ""
+msgid "Site ID"
+msgstr ""
+
msgid "Size"
msgstr "大å°"
@@ -12130,6 +14317,21 @@ msgstr "Slack 應用程å¼"
msgid "Slack integration allows you to interact with GitLab via slash commands in a chat window."
msgstr "Slack æ•´åˆå…許您é€éŽèŠå¤©è¦–窗中的斜線指令與GitLab進行整åˆã€‚"
+msgid "SlackService|2. Paste the <strong>Token</strong> into the field below"
+msgstr ""
+
+msgid "SlackService|3. Select the <strong>Active</strong> checkbox, press <strong>Save changes</strong> and start using GitLab inside Slack!"
+msgstr ""
+
+msgid "SlackService|Fill in the word that works best for your team."
+msgstr ""
+
+msgid "SlackService|See list of available commands in Slack after setting up this service, by entering"
+msgstr ""
+
+msgid "SlackService|This service allows users to perform common operations on this project by entering slash commands in Slack."
+msgstr ""
+
msgid "Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job"
msgstr "速度較慢,但確ä¿å°ˆæ¡ˆå·¥ä½œç©ºé–“是原始的,因為它為æ¯é …工作從頭開始複製版本庫"
@@ -12163,9 +14365,15 @@ msgstr ""
msgid "SnippetsEmptyState|They can be either public or private."
msgstr ""
+msgid "Snowplow"
+msgstr ""
+
msgid "Some email servers do not support overriding the email sender name. Enable this option to include the name of the author of the issue, merge request or comment in the email body instead."
msgstr ""
+msgid "Someone edited the issue at the same time you did. Please check out %{linkStart}the issue%{linkEnd} and make sure your changes will not unintentionally remove theirs."
+msgstr ""
+
msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
msgstr ""
@@ -12196,6 +14404,9 @@ msgstr "切æ›æŒ‰éˆ•æ™‚發生錯誤"
msgid "Something went wrong while adding your award. Please try again."
msgstr ""
+msgid "Something went wrong while adding your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while applying the suggestion. Please try again."
msgstr ""
@@ -12205,6 +14416,12 @@ msgstr "在關閉議題 %{issuable} 時出ç¾å•é¡Œï¼Œè«‹ç¨å¾Œå†è©¦"
msgid "Something went wrong while deleting the source branch. Please try again."
msgstr ""
+msgid "Something went wrong while deleting your note. Please try again."
+msgstr ""
+
+msgid "Something went wrong while editing your comment. Please try again."
+msgstr ""
+
msgid "Something went wrong while fetching %{listType} list"
msgstr "è®€å– %{listType} 列表時發生錯誤"
@@ -12238,6 +14455,9 @@ msgstr "é‡æ–°é–‹å•Ÿ %{issuable} 議題時發生錯誤。請ç¨å¾Œå†è©¦"
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr "解決此議題時出ç¾å•é¡Œã€‚è«‹å†è©¦ä¸€æ¬¡ã€‚"
+msgid "Something went wrong while stopping this environment. Please try again."
+msgstr ""
+
msgid "Something went wrong, unable to add %{project} to dashboard"
msgstr "å°‡ %{project} 新增到儀表æ¿æ™‚發生錯誤"
@@ -12289,6 +14509,9 @@ msgstr "已截止日期"
msgid "SortOptions|Due soon"
msgstr "å³å°‡æˆªæ­¢æ—¥æœŸ"
+msgid "SortOptions|Expired date"
+msgstr ""
+
msgid "SortOptions|Label priority"
msgstr "標籤優先"
@@ -12358,6 +14581,9 @@ msgstr ""
msgid "SortOptions|Oldest sign in"
msgstr "最早登入"
+msgid "SortOptions|Oldest starred"
+msgstr ""
+
msgid "SortOptions|Oldest updated"
msgstr "最早更新"
@@ -12373,6 +14599,12 @@ msgstr ""
msgid "SortOptions|Recent sign in"
msgstr "最近登入"
+msgid "SortOptions|Recently starred"
+msgstr ""
+
+msgid "SortOptions|Size"
+msgstr ""
+
msgid "SortOptions|Sort direction"
msgstr ""
@@ -12451,6 +14683,9 @@ msgstr "已暫存的 %{type}"
msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging."
msgstr "為一個標籤標上星號,使其æˆç‚ºå„ªå…ˆæ¨™ç±¤ã€‚é€éŽæ‹–動指令優先標籤變更其相å°å„ªå…ˆåº¦ã€‚"
+msgid "Star labels to start sorting by priority"
+msgstr ""
+
msgid "Star toggle failed. Try again later."
msgstr ""
@@ -12472,13 +14707,13 @@ msgstr ""
msgid "StarredProjectsEmptyState|You don't have starred projects yet."
msgstr ""
-msgid "Stars"
+msgid "Starrers"
msgstr ""
-msgid "Start GitLab Ultimate trial"
+msgid "Stars"
msgstr ""
-msgid "Start Indexing"
+msgid "Start GitLab Ultimate trial"
msgstr ""
msgid "Start Web Terminal"
@@ -12487,6 +14722,12 @@ msgstr ""
msgid "Start a %{new_merge_request} with these changes"
msgstr "建立包å«é€™äº›è®Šå‹•çš„ %{new_merge_request}"
+msgid "Start a Free Trial"
+msgstr ""
+
+msgid "Start a new discussion..."
+msgstr ""
+
msgid "Start a new merge request"
msgstr "開始一個新的åˆä½µè«‹æ±‚"
@@ -12496,29 +14737,38 @@ msgstr "開始檢閱"
msgid "Start and due date"
msgstr "開始和截止日期"
+msgid "Start by choosing a group to see how your team is spending time. You can then drill down to the project level."
+msgstr ""
+
+msgid "Start by choosing a group to start exploring the merge requests in that group. You can then proceed to filter by projects, labels, milestones and authors."
+msgstr ""
+
msgid "Start cleanup"
msgstr ""
msgid "Start date"
msgstr "開始日期"
-msgid "Start discussion"
+msgid "Start merge train"
msgstr ""
-msgid "Start discussion & close %{noteable_name}"
+msgid "Start merge train when pipeline succeeds"
msgstr ""
-msgid "Start discussion & reopen %{noteable_name}"
+msgid "Start search"
msgstr ""
-msgid "Start merge train"
+msgid "Start the Runner!"
+msgstr "啟動執行器ï¼"
+
+msgid "Start thread"
msgstr ""
-msgid "Start merge train when pipeline succeeds"
+msgid "Start thread & close %{noteable_name}"
msgstr ""
-msgid "Start the Runner!"
-msgstr "啟動執行器ï¼"
+msgid "Start thread & reopen %{noteable_name}"
+msgstr ""
msgid "Start your trial"
msgstr "開始試用"
@@ -12544,12 +14794,18 @@ msgstr "開始於 (UTC)"
msgid "State your message to activate"
msgstr "暫存您的訊æ¯ä»¥å•Ÿç”¨"
+msgid "Statistics"
+msgstr ""
+
msgid "Status"
msgstr "狀態"
msgid "Status:"
msgstr ""
+msgid "Stay updated about the performance and health of your environment by configuring Prometheus to monitor your deployments."
+msgstr ""
+
msgid "Stop Terminal"
msgstr ""
@@ -12580,6 +14836,18 @@ msgstr "儲存空間:"
msgid "StorageSize|Unknown"
msgstr ""
+msgid "SubgroupCreationLevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Allowed to create subgroups"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Maintainers"
+msgstr ""
+
+msgid "SubgroupCreationlevel|Owners"
+msgstr ""
+
msgid "Subgroups"
msgstr "å­ç¾¤çµ„"
@@ -12595,6 +14863,9 @@ msgstr "以垃圾訊æ¯æ交"
msgid "Submit feedback"
msgstr "æ交æ„見"
+msgid "Submit issue"
+msgstr ""
+
msgid "Submit review"
msgstr "æ交檢閱"
@@ -12619,6 +14890,12 @@ msgstr ""
msgid "Subscribed"
msgstr "已訂閱"
+msgid "Subscribed to this %{quick_action_target}."
+msgstr ""
+
+msgid "Subscribes to this %{quick_action_target}."
+msgstr ""
+
msgid "Subscription"
msgstr ""
@@ -12631,9 +14908,6 @@ msgstr ""
msgid "SubscriptionTable|GitLab allows you to continue using your subscription even if you exceed the number of seats you purchased. You will be required to pay for these seats upon renewal."
msgstr ""
-msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
-
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -12694,6 +14968,9 @@ msgstr ""
msgid "SubscriptionTable|Usage count is performed once a day at 12:00 PM."
msgstr ""
+msgid "Subtracted"
+msgstr ""
+
msgid "Subtracts"
msgstr ""
@@ -12787,9 +15064,15 @@ msgstr ""
msgid "SuggestedColors|Very pale orange"
msgstr ""
+msgid "Suggestions:"
+msgstr ""
+
msgid "Sunday"
msgstr "星期日"
+msgid "Support"
+msgstr ""
+
msgid "Support for custom certificates is disabled. Ask your system's administrator to enable it."
msgstr ""
@@ -12847,6 +15130,12 @@ msgstr ""
msgid "Tag this commit."
msgstr ""
+msgid "Tagged this commit to %{tag_name} with \"%{message}\"."
+msgstr ""
+
+msgid "Tagged this commit to %{tag_name}."
+msgstr ""
+
msgid "Tags"
msgstr "標籤"
@@ -13000,6 +15289,9 @@ msgstr ""
msgid "TestHooks|Ensure the wiki is enabled and has pages."
msgstr ""
+msgid "Thank you for signing up for your free trial! You will get additional instructions in your inbox shortly."
+msgstr ""
+
msgid "Thank you for your report. A GitLab administrator will look into it shortly."
msgstr ""
@@ -13013,6 +15305,9 @@ msgid "The %{type} contains the following error:"
msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
+msgid "The API path was not specified."
+msgstr ""
+
msgid "The Advanced Global Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr "GitLab 的進階全域æœå°‹åŠŸèƒ½æ˜¯éžå¸¸å¼·å¤§çš„æœå°‹æœå‹™ã€‚您å¯ä»¥ç«‹åˆ»æœå°‹å…¶ä»–團隊的程å¼ç¢¼ä»¥å¹«åŠ©æ‚¨å®Œå–„自己項目中的程å¼ç¢¼ã€‚從而é¿å…建立é‡è¤‡çš„程å¼ç¢¼æµªè²»æ™‚間。"
@@ -13037,9 +15332,6 @@ msgstr ""
msgid "The branch for this project has no active pipeline configuration."
msgstr ""
-msgid "The certificate will be shown here once it has been obtained from Let's Encrypt. This process may take up to an hour to complete."
-msgstr ""
-
msgid "The character highlighter helps you keep the subject line to %{titleLength} characters and wrap the body at %{bodyLength} so they are readable in git."
msgstr "文字çªé¡¯å°‡å¹«åŠ©ä½ å°‡ä¸»é¡Œä¿æŒç‚º %{titleLength} 個字,並且將正文包è£ç‚º %{bodyLength} 個字,以便它們å¯ä»¥åœ¨ git 中閱讀。"
@@ -13064,6 +15356,12 @@ msgstr "å° %{environmentLink} 作業的佈署並未æˆåŠŸã€‚"
msgid "The directory has been successfully created."
msgstr ""
+msgid "The domain you entered is misformatted."
+msgstr ""
+
+msgid "The domain you entered is not allowed."
+msgstr ""
+
msgid "The entered user map is not a valid JSON user map."
msgstr ""
@@ -13100,9 +15398,6 @@ msgstr ""
msgid "The import will time out after %{timeout}. For repositories that take longer, use a clone/push combination."
msgstr "匯入將在 %{timeout} 之後逾時。å°æ–¼éœ€è¦æ›´é•·æ™‚間的存儲庫,請使用 clone / push 組åˆã€‚"
-msgid "The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
-msgstr ""
-
msgid "The invitation could not be accepted."
msgstr ""
@@ -13217,8 +15512,8 @@ msgstr ""
msgid "The repository must be accessible over <code>http://</code>, <code>https://</code> or <code>git://</code>."
msgstr "該存儲庫必須å¯é€éŽ <code>http://</code>, <code>https://</code> 或 <code>git://</code>訪å•ã€‚"
-msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> and <code>git://</code>."
-msgstr "版本庫必須能以 <code>http://</code>ã€<code>https://</code>ã€<code>ssh://</code> å’Œ <code>git://</code> 通訊å”定存å–。"
+msgid "The repository must be accessible over <code>http://</code>, <code>https://</code>, <code>ssh://</code> or <code>git://</code>."
+msgstr ""
msgid "The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request."
msgstr "檢閱階段顯示從åˆä½µè«‹æ±‚建立後至被åˆä½µçš„時間。當建立第一個åˆä½µè«‹æ±‚後,資料將自動填入。"
@@ -13244,8 +15539,8 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr "試營é‹æ®µé¡¯ç¤ºå¾žåˆä½µè«‹æ±‚被åˆä½µå¾Œè‡³ä½ˆç½²ç‡Ÿé‹çš„時間。當第一次佈署營é‹å¾Œï¼Œè³‡æ–™å°‡è‡ªå‹•å¡«å…¥"
-msgid "The tabs below will be removed in a future version"
-msgstr "底下的分é å°‡æœƒåœ¨æœªä¾†ç‰ˆæœ¬ä¸­ç§»é™¤"
+msgid "The target element is missing."
+msgstr ""
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr "測試階段顯示相關åˆä½µè«‹æ±‚的管線所花的時間。當第一個管線執行完畢後,資料將自動填入。"
@@ -13253,7 +15548,7 @@ msgstr "測試階段顯示相關åˆä½µè«‹æ±‚的管線所花的時間。當第一
msgid "The time taken by each data entry gathered by that stage."
msgstr "該階段中æ¯ä¸€å€‹è³‡æ–™é …目所花的時間。"
-msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url`"
+msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
@@ -13277,7 +15572,7 @@ msgstr "å°æ‡‰ä½¿ç”¨è€…是一個JSON檔,是將åƒèˆ‡å°ˆæ¡ˆçš„ Google Code 使ç
msgid "The user map is a mapping of the FogBugz users that participated on your projects to the way their email address and usernames will be imported into GitLab. You can change this by populating the table below."
msgstr "使用者å°æ‡‰æ˜¯å°‡åƒèˆ‡å°ˆæ¡ˆçš„ FogBugz 使用者與其電å­éƒµä»¶å’Œä½¿ç”¨è€…å稱匯入 GitLab çš„æ–¹å¼ã€‚您å¯ä»¥é€éŽå¡«å¯«ä¸‹æ–¹çš„表單來變更此設定。"
-msgid "The user-facing URL of the Geo node."
+msgid "The user-facing URL of the Geo node"
msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
@@ -13313,9 +15608,15 @@ msgstr ""
msgid "There are no issues to show"
msgstr "沒有å¯ä»¥é¡¯ç¤ºçš„è­°é¡Œ"
+msgid "There are no issues to show."
+msgstr ""
+
msgid "There are no labels yet"
msgstr "ç›®å‰é‚„沒有標籤"
+msgid "There are no matching files"
+msgstr ""
+
msgid "There are no open issues"
msgstr ""
@@ -13337,6 +15638,9 @@ msgstr "此處沒有未暫存的變更"
msgid "There is already a repository with that name on disk"
msgstr ""
+msgid "There is no data available. Please change your selection."
+msgstr ""
+
msgid "There was a problem communicating with your device."
msgstr ""
@@ -13346,18 +15650,21 @@ msgstr ""
msgid "There was an error %{message} todo."
msgstr ""
-msgid "There was an error adding a todo."
-msgstr "增新待辦事項時出錯。"
+msgid "There was an error adding a To Do."
+msgstr ""
msgid "There was an error creating the issue"
msgstr ""
-msgid "There was an error deleting the todo."
-msgstr "刪除待辦事項時出錯。"
+msgid "There was an error deleting the To Do."
+msgstr ""
msgid "There was an error fetching configuration for charts"
msgstr ""
+msgid "There was an error fetching the form data"
+msgstr ""
+
msgid "There was an error gathering the chart data"
msgstr ""
@@ -13382,6 +15689,9 @@ msgstr "儲存您的通知設定時發生錯誤。"
msgid "There was an error subscribing to this label."
msgstr "訂閱此標籤時發生錯誤。"
+msgid "There was an error trying to validate your query"
+msgstr ""
+
msgid "There was an error when reseting email token."
msgstr "é‡è¨­é›»å­éƒµä»¶æ†‘證時發生錯誤。"
@@ -13439,10 +15749,10 @@ msgstr "已縮å°æ­¤çœ‹æ¿ç¯„åœ"
msgid "This branch has changed since you started editing. Would you like to create a new branch?"
msgstr "自上次編輯以來此分支已經變更éŽã€‚是å¦å»ºç«‹æ–°åˆ†æ”¯ï¼Ÿ"
-msgid "This certificate is automatically managed by Let's Encrypt"
+msgid "This chart could not be displayed"
msgstr ""
-msgid "This chart could not be displayed"
+msgid "This comment has changed since you started editing, please review the %{startTag}updated comment%{endTag} to ensure information is not lost."
msgstr ""
msgid "This commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
@@ -13490,6 +15800,12 @@ msgstr ""
msgid "This environment has no deployments yet."
msgstr ""
+msgid "This feature is in development. Please disable the `job_log_json` feature flag"
+msgstr ""
+
+msgid "This feature requires local storage to be enabled"
+msgstr ""
+
msgid "This field is required."
msgstr ""
@@ -13499,12 +15815,15 @@ msgstr "此群組"
msgid "This group does not provide any group Runners yet."
msgstr "這群組尚未æ供任何群組執行器。"
-msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Example: <code>192.168.0.0/24</code>. %{read_more_link}."
+msgid "This group, including all subgroups, projects and git repositories, will only be reachable from the specified IP address range. Multiple addresses are supported with comma delimiters.<br>Example: <code>192.168.0.0/24,192.168.1.0/24</code>. %{read_more_link}."
msgstr ""
msgid "This is a \"Ghost User\", created to hold all issues authored by users that have since been deleted. This user cannot be removed."
msgstr ""
+msgid "This is a Work in Progress"
+msgstr ""
+
msgid "This is a confidential issue."
msgstr "這是個隱密å•é¡Œã€‚"
@@ -13526,15 +15845,15 @@ msgstr ""
msgid "This is your current session"
msgstr ""
+msgid "This issue is %{confidentialLinkStart}confidential%{linkEnd} and %{lockedLinkStart}locked%{linkEnd}."
+msgstr ""
+
msgid "This issue is confidential"
msgstr "這個議題是ä¿å¯†çš„"
msgid "This issue is locked."
msgstr "這個å•é¡Œå·²è¢«éŽ–定。"
-msgid "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
-msgstr "這項作業將由使用者觸發,這通常用於佈署應用程å¼åˆ°æ­£å¼ç’°å¢ƒ"
-
msgid "This job depends on upstream jobs that need to succeed in order for this job to be triggered"
msgstr "這項工作需è¦ä¸Šä¸€å€‹å·¥ä½œæˆåŠŸæ™‚æ‰èƒ½è§¸ç™¼åŸ·è¡Œå·¥ä½œ"
@@ -13589,9 +15908,15 @@ msgstr "這個工作最近佈署到 %{link}。"
msgid "This job requires a manual action"
msgstr "這份作業需è¦æ‰‹å‹•åŸ·è¡Œ"
+msgid "This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes."
+msgstr ""
+
msgid "This job will automatically run after its timer finishes. Often they are used for incremental roll-out deploys to production environments. When unscheduled it converts into a manual action."
msgstr ""
+msgid "This may expose confidential information as the selected fork is in another namespace that can have other members."
+msgstr ""
+
msgid "This means you can not push code until you create an empty repository or import existing one."
msgstr "這代表在您建立一個空的版本庫或是匯入一個ç¾å­˜çš„版本庫之å‰ï¼Œæ‚¨å°‡ç„¡æ³•ä¸Šå‚³æ›´æ–°ã€‚"
@@ -13610,9 +15935,6 @@ msgstr "æ­¤é é¢ä¸å¯ç”¨ï¼Œå› ç‚ºæ‚¨ä¸å…許跨多個專案閱讀訊æ¯ã€‚"
msgid "This page will be removed in a future release."
msgstr "æ­¤é é¢å°‡æœƒåœ¨æœªä¾†ç‰ˆæœ¬ä¸­ç§»é™¤ã€‚"
-msgid "This pipeline is run on the source branch"
-msgstr ""
-
msgid "This pipeline makes use of a predefined CI/CD configuration enabled by %{strongStart}Auto DevOps.%{strongEnd}"
msgstr ""
@@ -13643,6 +15965,9 @@ msgstr "此執行器將åªåŸ·è¡Œè¢«ä¿è­·çš„分支所觸發的管線"
msgid "This setting can be overridden in each project."
msgstr "ç›®å‰è¨­å®šå¯ä»¥åœ¨æ¯å€‹å°ˆæ¡ˆä¸­é€²è¡Œè¤‡å¯«ã€‚"
+msgid "This setting will override user notification preferences for all project members."
+msgstr ""
+
msgid "This setting will update the hostname that is used to generate private commit emails. %{learn_more}"
msgstr "此設定將更新你用來產生ç§äººæ交æ交的電å­éƒµä»¶çš„主機域å。%{learn_more}"
@@ -13652,6 +15977,9 @@ msgstr ""
msgid "This user cannot be unlocked manually from GitLab"
msgstr ""
+msgid "This user has no active %{type} Tokens."
+msgstr ""
+
msgid "This user has no identities"
msgstr "該使用者沒有身份"
@@ -13673,6 +16001,9 @@ msgstr "這裡列出了那些自動æˆç‚ºè­°é¡Œçš„é›»å­éƒµä»¶ï¼ˆå¾žç•™è¨€è®Šæˆ
msgid "Thursday"
msgstr ""
+msgid "Time"
+msgstr ""
+
msgid "Time based: Yes"
msgstr ""
@@ -13691,6 +16022,15 @@ msgstr "åˆä½µè«‹æ±‚從建立到被åˆä½µæˆ–是關閉的時間"
msgid "Time estimate"
msgstr "é è¨ˆæ™‚é–“"
+msgid "Time from first comment to last commit"
+msgstr ""
+
+msgid "Time from first commit until first comment"
+msgstr ""
+
+msgid "Time from last commit to merge"
+msgstr ""
+
msgid "Time in seconds GitLab will wait for a response from the external service. When the service does not respond in time, access will be denied."
msgstr "GitLab 等待外部æœå‹™çš„回應時間(秒)。當æœå‹™æ²’有在時間內回應時,存å–將被拒絕。"
@@ -13700,6 +16040,9 @@ msgstr "剩餘時間"
msgid "Time spent"
msgstr "經éŽæ™‚é–“"
+msgid "Time to merge"
+msgstr ""
+
msgid "Time tracking"
msgstr "時間追蹤"
@@ -13709,12 +16052,21 @@ msgstr "第一個åˆä½µè«‹æ±‚被建立å‰çš„時間"
msgid "TimeTrackingEstimated|Est"
msgstr "é ä¼°"
+msgid "TimeTracking|%{startTag}Spent: %{endTag}%{timeSpentHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Estimated:"
msgstr "é ä¼°ï¼š"
+msgid "TimeTracking|Over by %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "TimeTracking|Spent"
msgstr "已花費:"
+msgid "TimeTracking|Time remaining: %{timeRemainingHumanReadable}"
+msgstr ""
+
msgid "Timeago|%s days ago"
msgstr " %s 天å‰"
@@ -13838,6 +16190,9 @@ msgstr "ç¾åœ¨"
msgid "Timeago|right now"
msgstr "立刻"
+msgid "Timeframe"
+msgstr ""
+
msgid "Timeout"
msgstr "逾時"
@@ -13867,6 +16222,9 @@ msgstr ""
msgid "To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration."
msgstr ""
+msgid "To Do"
+msgstr ""
+
msgid "To GitLab"
msgstr "到 GitLab"
@@ -13882,6 +16240,9 @@ msgstr ""
msgid "To connect GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to connect."
msgstr "è‹¥è¦é€£ç·šåˆ° GitHub 版本庫,您å¯ä»¥ä½¿ç”¨ %{personal_access_token_link} 連çµã€‚當您建立了您的個人存å–憑證,您將需è¦é¸æ“‡ <code>版本庫</code> 範åœï¼Œæ‰€ä»¥æˆ‘們å¯ä»¥é¡¯ç¤ºæ‚¨å¯ä¾›é€£ç·šçš„公開與ç§äººç‰ˆæœ¬åº«åˆ—表。"
+msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories."
+msgstr ""
+
msgid "To connect GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
msgstr "è¦é€£ç·š GitHub 版本庫,您首先需è¦æŽˆæ¬Š GitLab å­˜å–您的 GitHub 版本庫列表:"
@@ -13909,12 +16270,6 @@ msgstr "為了幫助改進 GitLab åŠå…¶ä½¿ç”¨è€…體驗,GitLab 將定期收集
msgid "To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}"
msgstr "為了幫助改進 GitLab åŠå…¶ä½¿ç”¨è€…體驗,我們希望定期收集使用者資訊。這å¯ä»¥åœ¨%{settings_link_start}設定%{link_end}隨時變更。%{info_link_start}更多資訊%{link_end}"
-msgid "To import GitHub repositories, you can use a %{personal_access_token_link}. When you create your Personal Access Token, you will need to select the <code>repo</code> scope, so we can display a list of your public and private repositories which are available to import."
-msgstr "è¦åŒ¯å…¥ GitHub 存儲庫,你å¯ä»¥ä½¿ç”¨ %{personal_access_token_link}。當你建立你的個人存å–憑證時,你將需è¦é¸æ“‡<code>版本庫</code>範åœï¼Œæ‰€ä»¥æˆ‘們將會顯示你公開åŠç§äººçš„版本庫清單進行匯入。"
-
-msgid "To import GitHub repositories, you first need to authorize GitLab to access the list of your GitHub repositories:"
-msgstr "è¦åŒ¯å…¥ GitHub 存儲庫,您首先需è¦æŽˆæ¬Š GitLab 訪å•æ‚¨çš„ GitHub 存儲庫列表:"
-
msgid "To import an SVN repository, check out %{svn_link}."
msgstr "è¦åŒ¯å…¥SVN存儲庫,請檢視 %{svn_link}。"
@@ -13939,12 +16294,30 @@ msgstr ""
msgid "To preserve performance only <strong>%{display_size} of %{real_size}</strong> files are displayed."
msgstr ""
+msgid "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private."
+msgstr ""
+
+msgid "To protect this issue's confidentiality, a private fork of this project was selected."
+msgstr ""
+
msgid "To receive alerts from manually configured Prometheus services, add the following URL and Authorization key to your Prometheus webhook config file. Learn more about %{linkStart}configuring Prometheus%{linkEnd} to send alerts to GitLab."
msgstr ""
+msgid "To see all the user's personal access tokens you must impersonate them first."
+msgstr ""
+
+msgid "To see this project's operational details, %{linkStart}upgrade its group plan to Silver%{linkEnd}. You can also remove the project from the dashboard."
+msgstr ""
+
+msgid "To see this project's operational details, contact an owner of group %{groupName} to upgrade the plan. You can also remove the project from the dashboard."
+msgstr ""
+
msgid "To set up SAML authentication for your group through an identity provider like Azure, Okta, Onelogin, Ping Identity, or your custom SAML 2.0 provider:"
msgstr "è‹¥è¦é€éŽèº«ä»½æ供者(例如 Azureã€Oktaã€Oneloginã€Ping Identity 或您自訂的 SAML 2.0 æ供者)設定 SAML èªè­‰ï¼š"
+msgid "To set up this service:"
+msgstr ""
+
msgid "To specify the notification level per project of a group you belong to, you need to visit project page and change notification level there."
msgstr ""
@@ -13969,17 +16342,17 @@ msgstr ""
msgid "To widen your search, change or remove filters."
msgstr "è‹¥è¦æ“´å¤§æœå°‹ç¯„åœï¼Œè«‹è®Šæ›´æˆ–移除篩é¸å™¨ã€‚"
-msgid "Today"
-msgstr "今天"
+msgid "To-Do List"
+msgstr ""
-msgid "Todo"
-msgstr "待辦事項"
+msgid "To-do item successfully marked as done."
+msgstr ""
-msgid "Todo was successfully marked as done."
-msgstr "待辦事項已æˆåŠŸåœ°æ¨™è¨˜ç‚ºå·²å®Œæˆã€‚"
+msgid "Today"
+msgstr "今天"
-msgid "Todos"
-msgstr "待辦事項"
+msgid "Toggle Markdown preview"
+msgstr ""
msgid "Toggle Sidebar"
msgstr "展開 / 收起å´é‚Šæ¬„"
@@ -13987,6 +16360,9 @@ msgstr "展開 / 收起å´é‚Šæ¬„"
msgid "Toggle backtrace"
msgstr ""
+msgid "Toggle collapse"
+msgstr ""
+
msgid "Toggle comments for this file"
msgstr ""
@@ -13996,9 +16372,6 @@ msgstr "切æ›æ交說明"
msgid "Toggle commit list"
msgstr ""
-msgid "Toggle discussion"
-msgstr "切æ›è¨Žè«–"
-
msgid "Toggle emoji award"
msgstr ""
@@ -14011,17 +16384,26 @@ msgstr ""
msgid "Toggle sidebar"
msgstr "切æ›å´é‚Šæ¬„"
+msgid "Toggle the Performance Bar"
+msgstr ""
+
+msgid "Toggle this dialog"
+msgstr ""
+
+msgid "Toggle thread"
+msgstr ""
+
msgid "ToggleButton|Toggle Status: OFF"
msgstr "切æ›ç‹€æ…‹ï¼šé—œé–‰"
msgid "ToggleButton|Toggle Status: ON"
msgstr "切æ›ç‹€æ…‹ï¼šé–‹å•Ÿ"
-msgid "Toggles :%{name}: emoji award."
+msgid "Toggled :%{name}: emoji award."
msgstr ""
-msgid "Token"
-msgstr "憑證"
+msgid "Toggles :%{name}: emoji award."
+msgstr ""
msgid "Tomorrow"
msgstr "明天"
@@ -14041,6 +16423,9 @@ msgstr "總計貢ç»"
msgid "Total Time"
msgstr "總時間"
+msgid "Total artifacts size: %{total_size}"
+msgstr ""
+
msgid "Total test time for all commits/merges"
msgstr "åˆä½µ/æ交記錄的總測試時間"
@@ -14059,6 +16444,12 @@ msgstr "跟蹤共通主題ã€è·¨å°ˆæ¡ˆå’Œé‡Œç¨‹ç¢‘的議題群組"
msgid "Track time with quick actions"
msgstr "快速使用時間追蹤工具"
+msgid "Track your GitLab projects with GitLab for Slack."
+msgstr ""
+
+msgid "Track your project with Audit Events."
+msgstr ""
+
msgid "Transfer project"
msgstr ""
@@ -14095,9 +16486,6 @@ msgstr ""
msgid "TransferProject|Transfer failed, please contact an admin."
msgstr ""
-msgid "Tree"
-msgstr ""
-
msgid "Tree view"
msgstr "樹狀顯示"
@@ -14125,9 +16513,6 @@ msgstr ""
msgid "Trigger was created successfully."
msgstr ""
-msgid "Trigger was re-assigned."
-msgstr ""
-
msgid "Trigger was successfully updated."
msgstr ""
@@ -14152,12 +16537,21 @@ msgstr "試用 GitLab 的所有功能 30 天。"
msgid "Try to fork again"
msgstr ""
+msgid "Try using a different search term to find the file you are looking for."
+msgstr ""
+
msgid "Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now."
msgstr ""
msgid "Tuesday"
msgstr ""
+msgid "Turn Off"
+msgstr ""
+
+msgid "Turn On"
+msgstr ""
+
msgid "Turn on Service Desk"
msgstr "é–‹å•Ÿæœå‹™å€"
@@ -14191,6 +16585,18 @@ msgstr ""
msgid "URL"
msgstr ""
+msgid "URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...)."
+msgstr ""
+
+msgid "Unable to apply suggestions to a deleted line."
+msgstr ""
+
+msgid "Unable to build Slack link."
+msgstr ""
+
+msgid "Unable to connect to Prometheus server"
+msgstr ""
+
msgid "Unable to connect to server: %{error}"
msgstr ""
@@ -14203,6 +16609,9 @@ msgstr "無法載入差異。%{button_try_again}"
msgid "Unable to resolve"
msgstr ""
+msgid "Unable to save your changes. Please try again."
+msgstr ""
+
msgid "Unable to schedule a pipeline to run immediately"
msgstr ""
@@ -14233,6 +16642,12 @@ msgstr "復原"
msgid "Unfortunately, your email message to GitLab could not be processed."
msgstr ""
+msgid "Uninstall"
+msgstr ""
+
+msgid "Uninstalling"
+msgstr ""
+
msgid "Unknown"
msgstr "未知"
@@ -14260,12 +16675,24 @@ msgstr "解鎖這個%{issuableDisplayName}?<strong>所有人</strong>都å¯ä»¥
msgid "Unlocked"
msgstr "已解鎖"
-msgid "Unlocks the discussion"
+msgid "Unlocked the discussion."
+msgstr ""
+
+msgid "Unlocks the discussion."
+msgstr ""
+
+msgid "Unmarked this %{noun} as Work In Progress."
+msgstr ""
+
+msgid "Unmarks this %{noun} as Work In Progress."
msgstr ""
msgid "Unresolve discussion"
msgstr "é‡æ–°è¨Žè«–"
+msgid "Unresolve thread"
+msgstr ""
+
msgid "Unschedule job"
msgstr "未排定工作"
@@ -14302,6 +16729,15 @@ msgstr "解除專案訂閱"
msgid "Unsubscribe from %{type}"
msgstr ""
+msgid "Unsubscribed from this %{quick_action_target}."
+msgstr ""
+
+msgid "Unsubscribes from this %{quick_action_target}."
+msgstr ""
+
+msgid "Until"
+msgstr ""
+
msgid "Unverified"
msgstr "未驗證"
@@ -14311,15 +16747,27 @@ msgstr "已經是最新"
msgid "Upcoming"
msgstr "å³å°‡é–‹å§‹"
+msgid "Upcoming Release"
+msgstr ""
+
msgid "Update"
msgstr "æ›´æ–°"
-msgid "Update approvers"
+msgid "Update all"
+msgstr ""
+
+msgid "Update approval rule"
msgstr ""
msgid "Update failed"
msgstr ""
+msgid "Update failed. Please try again."
+msgstr ""
+
+msgid "Update it"
+msgstr ""
+
msgid "Update now"
msgstr "ç«‹å³æ›´æ–°"
@@ -14350,6 +16798,9 @@ msgstr ""
msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
+msgid "Updated to"
+msgstr ""
+
msgid "Updating"
msgstr "更新中"
@@ -14362,6 +16813,9 @@ msgstr ""
msgid "Upgrade your plan to activate Advanced Global Search."
msgstr "å‡ç´šæ‚¨çš„方案以啟用進階全域æœå°‹ã€‚"
+msgid "Upgrade your plan to activate Audit Events."
+msgstr ""
+
msgid "Upgrade your plan to activate Contribution Analytics."
msgstr "å‡ç´šæ‚¨çš„方案以啟用貢ç»åˆ†æžã€‚"
@@ -14425,6 +16879,9 @@ msgstr ""
msgid "Usage ping is not enabled"
msgstr "使用情æ³åµæ¸¬æœªå•Ÿå‹•"
+msgid "Usage quotas help link"
+msgstr ""
+
msgid "Usage statistics"
msgstr "使用情形統計資料"
@@ -14593,6 +17050,9 @@ msgstr ""
msgid "UserOnboardingTour|Click to open the latest commit to see its details."
msgstr ""
+msgid "UserOnboardingTour|Close 'Learn GitLab'"
+msgstr ""
+
msgid "UserOnboardingTour|Commits are shown in chronological order and can be filtered by the commit message or by the branch."
msgstr ""
@@ -14605,6 +17065,9 @@ msgstr ""
msgid "UserOnboardingTour|Got it"
msgstr ""
+msgid "UserOnboardingTour|Great job! %{clapHands} We hope the tour was helpful and that you learned how to use GitLab.%{lineBreak}%{lineBreak}We'd love to get your feedback on this tour.%{lineBreak}%{lineBreak}%{emphasisStart}How helpful would you say this guided tour was?%{emphasisEnd}%{lineBreak}%{lineBreak}"
+msgstr ""
+
msgid "UserOnboardingTour|Guided GitLab Tour"
msgstr ""
@@ -14668,7 +17131,7 @@ msgstr ""
msgid "UserOnboardingTour|Take a look. Here's a nifty menu for quickly creating issues, merge requests, snippets, projects and groups. Click on it and select \"New project\" from the \"GitLab\" section to get started."
msgstr ""
-msgid "UserOnboardingTour|Thanks for taking the guided tour. Remember, if you want to go through it again, you can start %{emphasisStart}Learn GitLab%{emphasisEnd} in the help menu on the top right."
+msgid "UserOnboardingTour|Thanks for the feedback! %{thumbsUp}"
msgstr ""
msgid "UserOnboardingTour|That's it for issues. Let'st take a look at %{emphasisStart}Merge Requests%{emphasisEnd}."
@@ -14680,7 +17143,7 @@ msgstr ""
msgid "UserOnboardingTour|That's it for the Repository. Let's take a look at the %{emphasisStart}Issues%{emphasisEnd}."
msgstr ""
-msgid "UserOnboardingTour|The structure of this page is very similar to the onfe of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
+msgid "UserOnboardingTour|The structure of this page is very similar to the one of issues. Status, description, discussion and the sidebar are all here.%{lineBreak}%{lineBreak}But take a look below the description and you'll notice that there's more information about the merge request, the CI/CD pipeline and the options for approving it.%{lineBreak}%{lineBreak}Below, alongside the discussion you can also see more information about commits in this merge request, the status of pipelines and review all changes that were made."
msgstr ""
msgid "UserOnboardingTour|There's a lot of information here but don't worry, we'll go through it.%{lineBreak}%{lineBreak}On the top you can see the status of the issue and when it was opened and by whom. Directly below it is the issue description and below that are other %{emphasisStart}related issues%{emphasisEnd} and %{emphasisStart}merge requests%{emphasisEnd} (if any). Then below that is the %{emphasisStart}discussion%{emphasisEnd}, that's where most of the communication happens.%{lineBreak}%{lineBreak}On the right, there's a sidebar where you can view/change the %{emphasisStart}assignee, milestone, due date, labels, weight%{emphasisEnd}, etc."
@@ -14695,10 +17158,10 @@ msgstr ""
msgid "UserOnboardingTour|This is an overview of all merge requests in this project. Similarly to the issues overview it can be filtered down by things like labels, milestones, authors, assignees, etc."
msgstr ""
-msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file strcture, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
+msgid "UserOnboardingTour|This is the repository for the %{emphasisStart}%{projectName}%{emphasisEnd} project. All our code is stored here. Feel free to explore around and take a closer look at folders and files.%{lineBreak}%{lineBreak}Above the file structure, you can see the latest commit, who the author is and the status of the CI/CD pipeline.%{lineBreak}%{lineBreak}If you scroll down, below the file structure, you'll find the Readme of this project. This is defined in the README.md file at the root of the repository."
msgstr ""
-msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we uese to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
+msgid "UserOnboardingTour|Welcome to the project overview of the %{emphasisStart}%{projectName}%{emphasisEnd} project. This is the project that we use to work on GitLab. At first, a project seems like a simple repository, but at GitLab, a project is so much more.%{lineBreak}%{lineBreak}You can create projects for hosting your codebase, use it as an issue tracker, collaboreate on code, and continuously build, test, and deploy your app with built-in GitLab CI/CD."
msgstr ""
msgid "UserProfile|Activity"
@@ -14746,6 +17209,12 @@ msgstr "程å¼ç¢¼ç‰‡æ®µ"
msgid "UserProfile|Snippets in GitLab can either be private, internal, or public."
msgstr ""
+msgid "UserProfile|Star projects to track their progress and show your appreciation."
+msgstr ""
+
+msgid "UserProfile|Starred projects"
+msgstr ""
+
msgid "UserProfile|Subscribe"
msgstr "訂閱"
@@ -14758,6 +17227,9 @@ msgstr "此使用者具有ç§äººæª”案"
msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
+msgid "UserProfile|This user hasn't starred any projects"
+msgstr ""
+
msgid "UserProfile|View all"
msgstr "檢視全部"
@@ -14785,6 +17257,9 @@ msgstr ""
msgid "Username is available."
msgstr ""
+msgid "Username or email"
+msgstr ""
+
msgid "Users"
msgstr "使用者"
@@ -14863,6 +17338,9 @@ msgstr "已驗證"
msgid "Version"
msgstr "版本"
+msgid "Very helpful"
+msgstr ""
+
msgid "View app"
msgstr "檢視應用程å¼"
@@ -14941,6 +17419,9 @@ msgstr "å¯è¦–級別"
msgid "Visibility level:"
msgstr "å¯è¦‹ç­‰ç´šï¼š"
+msgid "Visibility settings have been disabled by the administrator."
+msgstr ""
+
msgid "Visibility, project features, permissions"
msgstr ""
@@ -14962,16 +17443,28 @@ msgstr "ä¸æ˜Ž"
msgid "VisualReviewApp|%{stepStart}Step 1%{stepEnd}. Copy the following script:"
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} of every page of your application. "
+msgid "VisualReviewApp|%{stepStart}Step 2%{stepEnd}. Add it to the %{headTags} tags of every page of your application, ensuring the merge request ID is set or not set as required. "
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the review app and provide a personal access token following %{linkStart}personal access token%{linkEnd}."
+msgid "VisualReviewApp|%{stepStart}Step 3%{stepEnd}. Open the Review App and provide a %{linkStart}personal access token%{linkEnd}."
msgstr ""
-msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. You are now able to leave feedback from within the review app."
+msgid "VisualReviewApp|%{stepStart}Step 4%{stepEnd}. If not previously %{linkStart}configured%{linkEnd} by a developer, enter the merge request ID for the review when prompted. The ID of this merge request is %{stepStart}%{mrId}%{stepStart}."
msgstr ""
-msgid "VisualReviewApp|Adding the following script to your code makes it possible to directly leave feedback inside of the review app. Feedback given will get submitted automatically to this merge request’s discussion, including metadata."
+msgid "VisualReviewApp|%{stepStart}Step 5%{stepEnd}. Leave feedback in the Review App."
+msgstr ""
+
+msgid "VisualReviewApp|Copy merge request ID to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Copy script to clipboard"
+msgstr ""
+
+msgid "VisualReviewApp|Enable Visual Reviews"
+msgstr ""
+
+msgid "VisualReviewApp|Follow the steps below to enable Visual Reviews inside your application."
msgstr ""
msgid "VisualReviewApp|Open review app"
@@ -14980,16 +17473,19 @@ msgstr ""
msgid "VisualReviewApp|Review"
msgstr ""
-msgid "VisualReviewApp|Review and give feedback directly from within the review app"
+msgid "VisualReviewApp|Steps 1 and 2 (and sometimes 3) are performed once by the developer before requesting feedback. Steps 3 (if necessary), 4, and 5 are performed by the reviewer each time they perform a review."
msgstr ""
msgid "Vulnerabilities"
msgstr ""
-msgid "Vulnerability Chart"
+msgid "Vulnerabilities over time"
+msgstr ""
+
+msgid "Vulnerability-Check requires one or more merge request approvals only if high or critical security vulnerabilities are detected."
msgstr ""
-msgid "Vulnerability List"
+msgid "VulnerabilityChart|%{formattedStartDate} to today"
msgstr ""
msgid "Vulnerability|Class"
@@ -15031,6 +17527,9 @@ msgstr "åš´é‡æ€§"
msgid "Wait for the source to load to copy it to the clipboard"
msgstr ""
+msgid "Waiting for performance data"
+msgstr ""
+
msgid "Want to see the data? Please ask an administrator for access."
msgstr "權é™ä¸è¶³ã€‚如需檢視相關資料,請å‘管ç†å“¡ç”³è«‹æ¬Šé™ã€‚"
@@ -15046,10 +17545,7 @@ msgstr ""
msgid "We could not determine the path to remove the issue"
msgstr ""
-msgid "We couldn't find any results matching"
-msgstr ""
-
-msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You willl be guided by two types of helpers, best recognized by their color."
+msgid "We created a short guided tour that will help you learn the basics of GitLab and how it will help you be better at your job. It should only take a couple of minutes. You will be guided by two types of helpers, best recognized by their color."
msgstr ""
msgid "We detected potential spam in the %{humanized_resource_name}. Please solve the reCAPTCHA to proceed."
@@ -15103,6 +17599,9 @@ msgstr ""
msgid "Welcome to your Issue Board!"
msgstr ""
+msgid "What are you searching for?"
+msgstr ""
+
msgid "When a runner is locked, it cannot be assigned to other projects"
msgstr "當執行器被鎖定,其將ä¸èƒ½è¢«å…¶ä»–專案指定。"
@@ -15116,12 +17615,18 @@ msgid "When this merge request is accepted"
msgid_plural "When these merge requests are accepted"
msgstr[0] ""
+msgid "When using the <code>http://</code> or <code>https://</code> protocols, please provide the exact URL to the repository. HTTP redirects will not be followed."
+msgstr ""
+
msgid "When:"
msgstr ""
msgid "White helpers give contextual information."
msgstr ""
+msgid "Whitelist to allow requests to the local network from hooks and services"
+msgstr ""
+
msgid "Who can see this group?"
msgstr "誰å¯ä»¥çœ‹åˆ°é€™å€‹ç¾¤çµ„?"
@@ -15131,6 +17636,9 @@ msgstr "誰å¯ä»¥çœ‹åˆ°é€™å€‹ç¾¤çµ„?"
msgid "Wiki"
msgstr "Wiki"
+msgid "Wiki pages"
+msgstr ""
+
msgid "Wiki was successfully updated."
msgstr ""
@@ -15144,7 +17652,7 @@ msgid "WikiClone|Install Gollum"
msgstr "å®‰è£ Gollum"
msgid "WikiClone|It is recommended to install %{markdown} so that GFM features render locally:"
-msgstr "å®ƒè¢«æŽ¨è–¦å®‰è£ %{markdown} 所以那 GFM 功能在本機呈ç¾ï¼š"
+msgstr "æŽ¨è–¦å®‰è£ %{markdown}ï¼Œé€™æ¨£å°±èƒ½åœ¨æœ¬æ©Ÿç«¯å‘ˆç¾ GFM 效果:"
msgid "WikiClone|Start Gollum and edit locally"
msgstr "開始你的 Gollum 並在本機編輯。"
@@ -15203,15 +17711,9 @@ msgstr "檔案"
msgid "WikiMarkdownTip|To link to a (new) page, simply type %{link_example}"
msgstr "è‹¥è¦é€£çµåˆ°ä¸€å€‹æ–°çš„é é¢ï¼Œåªè¦ç°¡å–®çš„輸入 %{link_example}。"
-msgid "WikiNewPagePlaceholder|how-to-setup"
-msgstr "如何安è£"
-
msgid "WikiNewPageTip|Tip: You can specify the full path for the new file. We will automatically create any missing directories."
msgstr "å°æ示: ä½ å¯ä»¥æŒ‡å®šæ–°æª”案的絕å°è·¯å¾‘。我們會自動建立所有ä¸å­˜åœ¨çš„資料夾。"
-msgid "WikiNewPageTitle|New Wiki Page"
-msgstr "新的維基é é¢"
-
msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?"
msgstr "你確定è¦åˆªé™¤é€™å€‹é é¢ï¼Ÿ"
@@ -15227,20 +17729,17 @@ msgstr "æŸå€‹äººåœ¨åŒä¸€æ™‚間跟你一起編輯了這個é é¢ã€‚請檢查 %{
msgid "WikiPageConflictMessage|the page"
msgstr "æ­¤é é¢"
-msgid "WikiPageCreate|Create %{page_title}"
-msgstr "建立 %{page_title}"
-
-msgid "WikiPageEdit|Update %{page_title}"
-msgstr "æ›´æ–° %{page_title}"
+msgid "WikiPageCreate|Create %{pageTitle}"
+msgstr ""
-msgid "WikiPage|Page slug"
-msgstr "é é¢ slug"
+msgid "WikiPageEdit|Update %{pageTitle}"
+msgstr ""
msgid "WikiPage|Write your content or drag files here…"
msgstr "填寫內容或拖曳檔案至此…"
-msgid "Wiki|Create Page"
-msgstr "建立é é¢"
+msgid "Wiki|Create New Page"
+msgstr ""
msgid "Wiki|Create page"
msgstr "建立é é¢"
@@ -15260,6 +17759,9 @@ msgstr "æ–°é é¢"
msgid "Wiki|Page history"
msgstr "æ­·å²é é¢"
+msgid "Wiki|Page title"
+msgstr ""
+
msgid "Wiki|Page version"
msgstr "é é¢ç‰ˆæœ¬"
@@ -15290,6 +17792,9 @@ msgstr "寫"
msgid "Write a comment or drag your files here…"
msgstr "寫評論或拖動你的文件到這裡"
+msgid "Write a comment…"
+msgstr ""
+
msgid "Write access allowed"
msgstr ""
@@ -15326,6 +17831,9 @@ msgstr ""
msgid "You are attempting to update a file that has changed since you started editing it."
msgstr ""
+msgid "You are connected to the Prometheus server, but there is currently no data to display."
+msgstr ""
+
msgid "You are going to remove %{group_name}, this will also remove all of its subgroups and projects. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?"
msgstr ""
@@ -15380,6 +17888,9 @@ msgstr "您å¯ä»¥é€éŽè«‹æ±‚加入這些群組,來輕鬆地為他們åšå‡ºè²¢
msgid "You can easily install a Runner on a Kubernetes cluster. %{link_to_help_page}"
msgstr "您å¯ä»¥è¼•é¬†åœ°åœ¨ Kubernetes å¢é›†ä¸Šå®‰è£åŸ·è¡Œå™¨ã€‚ %{link_to_help_page}"
+msgid "You can filter by 'days to merge' by clicking on the columns in the chart."
+msgstr ""
+
msgid "You can invite a new member to <strong>%{project_name}</strong> or invite another group."
msgstr ""
@@ -15404,7 +17915,10 @@ msgstr "åªèƒ½åœ¨åˆ†æ”¯ä¸Šå»ºç«‹æª”案"
msgid "You can only edit files when you are on a branch"
msgstr "您åªèƒ½åœ¨åˆ†æ”¯ä¸Šç·¨è¼¯æª”案"
-msgid "You can only merge once the items above are resolved"
+msgid "You can only merge once the items above are resolved."
+msgstr ""
+
+msgid "You can only merge once this merge request is approved."
msgstr ""
msgid "You can only transfer the project to namespaces you manage."
@@ -15425,6 +17939,9 @@ msgstr ""
msgid "You can test your .gitlab-ci.yml in %{linkStart}CI Lint%{linkEnd}."
msgstr "您å¯ä»¥é€éŽ %{linkStart}CI Lint%{linkEnd} 測試 .gitlab-ci.yml"
+msgid "You cannot access the raw file. Please wait a minute."
+msgstr ""
+
msgid "You cannot impersonate a blocked user"
msgstr ""
@@ -15446,9 +17963,6 @@ msgstr "您ä¸èƒ½ä¿®æ”¹é€™å€‹å”¯è®€çš„ GitLab 主機。"
msgid "You could not create a new trigger."
msgstr ""
-msgid "You could not take ownership of trigger."
-msgstr ""
-
msgid "You do not have any subscriptions yet"
msgstr "你還沒有任何訂閱"
@@ -15476,6 +17990,18 @@ msgstr "您沒有任何已授權的應用程å¼"
msgid "You don't have any deployments right now."
msgstr ""
+msgid "You don't have any projects available."
+msgstr ""
+
+msgid "You don't have any recent searches"
+msgstr ""
+
+msgid "You don’t have access to Cycle Analytics for this group"
+msgstr ""
+
+msgid "You don’t have access to Productivity Analytics in this group"
+msgstr ""
+
msgid "You have been granted %{access_level} access to the %{source_link} %{source_type}."
msgstr ""
@@ -15500,6 +18026,12 @@ msgstr ""
msgid "You have reached your project limit"
msgstr "您已é”到專案數é‡é™åˆ¶"
+msgid "You haven't added any issues to your project yet"
+msgstr ""
+
+msgid "You haven't selected any issues yet"
+msgstr ""
+
msgid "You left the \"%{membershipable_human_name}\" %{source_type}."
msgstr ""
@@ -15590,6 +18122,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison."
msgstr "你需è¦é¸æ“‡å…©å€‹ä¸åŒçš„分支,æ‰èƒ½é€²è¡Œæ¯”較。"
+msgid "You're not allowed to %{tag_start}edit%{tag_end} files in this project directly. Please fork this project, make your changes there, and submit a merge request."
+msgstr ""
+
msgid "You're not allowed to make changes to this project directly. A fork of this project has been created that you can make changes in, so you can submit a merge request."
msgstr ""
@@ -15629,6 +18164,9 @@ msgstr ""
msgid "Your Groups"
msgstr "你的群組"
+msgid "Your New Personal Access Token"
+msgstr ""
+
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -15644,8 +18182,8 @@ msgstr ""
msgid "Your SSH keys (%{count})"
msgstr ""
-msgid "Your Todos"
-msgstr "您的待辦事項"
+msgid "Your To-Do List"
+msgstr ""
msgid "Your U2F device did not send a valid JSON response."
msgstr ""
@@ -15716,6 +18254,9 @@ msgstr ""
msgid "Your new personal access token has been created."
msgstr ""
+msgid "Your pages are served under:"
+msgstr ""
+
msgid "Your password reset token has expired."
msgstr ""
@@ -15728,12 +18269,21 @@ msgstr "您的專案"
msgid "Your request for access has been queued for review."
msgstr ""
+msgid "Zoom meeting added"
+msgstr ""
+
+msgid "Zoom meeting removed"
+msgstr ""
+
msgid "a deleted user"
msgstr "已刪除的使用者"
msgid "added %{created_at_timeago}"
msgstr ""
+msgid "added a Zoom call to this issue"
+msgstr ""
+
msgid "ago"
msgstr "之å‰"
@@ -15749,6 +18299,9 @@ msgstr ""
msgid "among other things"
msgstr "除了其他事情"
+msgid "assign yourself"
+msgstr ""
+
msgid "attach a new file"
msgstr ""
@@ -15767,6 +18320,12 @@ msgstr ""
msgid "cannot be enabled unless all domains have TLS certificates"
msgstr ""
+msgid "cannot be in the same project"
+msgstr ""
+
+msgid "cannot be modified"
+msgstr ""
+
msgid "cannot block others"
msgstr ""
@@ -15776,6 +18335,9 @@ msgstr ""
msgid "cannot itself be blocked"
msgstr ""
+msgid "cannot merge"
+msgstr ""
+
msgid "ciReport|%{linkStartTag}Learn more about Container Scanning %{linkEndTag}"
msgstr "%{linkStartTag}關於容器掃æ的更多資訊%{linkEndTag}"
@@ -15875,6 +18437,9 @@ msgstr ""
msgid "ciReport|All severities"
msgstr ""
+msgid "ciReport|Automatically apply the patch in a new branch"
+msgstr ""
+
msgid "ciReport|Class"
msgstr "類別"
@@ -15893,10 +18458,10 @@ msgstr "正在掃æ容器"
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "容器掃æåµæ¸¬åœ¨æ‚¨çš„ Docker 映åƒä¸­çš„已知æ¼æ´žã€‚"
-msgid "ciReport|Create issue"
+msgid "ciReport|Create a merge request to implement this solution, or download and apply the patch manually."
msgstr ""
-msgid "ciReport|Create merge request"
+msgid "ciReport|Create issue"
msgstr ""
msgid "ciReport|DAST"
@@ -15914,10 +18479,10 @@ msgstr "正在掃æä¾è³´é—œä¿‚"
msgid "ciReport|Description"
msgstr "說明"
-msgid "ciReport|Download and apply the patch to fix this vulnerability."
+msgid "ciReport|Download patch to resolve"
msgstr ""
-msgid "ciReport|Download patch"
+msgid "ciReport|Download the patch to apply it manually"
msgstr ""
msgid "ciReport|Dynamic Application Security Testing (DAST) detects known vulnerabilities in your web application."
@@ -15938,31 +18503,14 @@ msgstr "身份"
msgid "ciReport|Image"
msgstr ""
-msgid "ciReport|Implement this solution by creating a merge request"
-msgstr ""
-
msgid "ciReport|Instances"
msgstr "實例"
msgid "ciReport|Investigate this vulnerability by creating an issue"
msgstr ""
-msgid "ciReport|Learn more about interacting with security reports (Alpha)."
-msgstr "了解關於和安全性報告 (Alpha) 互動的更多資訊。"
-
-msgid "ciReport|License management detected %d license for the source branch only"
-msgid_plural "ciReport|License management detected %d licenses for the source branch only"
-msgstr[0] "授權管ç†åµæ¸¬åˆ° %d 個åªèƒ½åœ¨ä¾†æºåˆ†æ”¯ä½¿ç”¨çš„授權"
-
-msgid "ciReport|License management detected %d new license"
-msgid_plural "ciReport|License management detected %d new licenses"
-msgstr[0] "授權管ç†åµæ¸¬åˆ° %d 個新授權"
-
-msgid "ciReport|License management detected no licenses for the source branch only"
-msgstr "授權管ç†æœªåµæ¸¬åˆ°åªèƒ½ç”¨æ–¼ä¾†æºåˆ†æ”¯çš„授權"
-
-msgid "ciReport|License management detected no new licenses"
-msgstr "授權管ç†æœªåµæ¸¬åˆ°æ–°æŽˆæ¬Š"
+msgid "ciReport|Learn more about interacting with security reports"
+msgstr ""
msgid "ciReport|Links"
msgstr "連çµ"
@@ -15988,6 +18536,9 @@ msgstr "沒有效能指標的變動"
msgid "ciReport|Performance metrics"
msgstr "效能指標"
+msgid "ciReport|Resolve with merge request"
+msgstr ""
+
msgid "ciReport|SAST"
msgstr "SAST"
@@ -16046,6 +18597,9 @@ msgstr[0] "由 %{packagesString} 和 %{lastPackage} 使用"
msgid "ciReport|View full report"
msgstr "檢視完整報告"
+msgid "comment"
+msgstr ""
+
msgid "commented on %{link_to_project}"
msgstr ""
@@ -16088,6 +18642,9 @@ msgstr "連線中"
msgid "could not read private key, is the passphrase correct?"
msgstr "無法存å–ç§é‘°ï¼Œæª¢æŸ¥å¯†ç¢¼æ˜¯å¦æ­£ç¢ºï¼Ÿ"
+msgid "created"
+msgstr ""
+
msgid "customize"
msgstr "自訂"
@@ -16101,8 +18658,11 @@ msgstr[0] "æ—¥"
msgid "deleted"
msgstr ""
-msgid "deploy token"
-msgstr "佈署憑證"
+msgid "deploy"
+msgstr ""
+
+msgid "design"
+msgstr ""
msgid "detached"
msgstr ""
@@ -16110,10 +18670,6 @@ msgstr ""
msgid "disabled"
msgstr "å·²åœç”¨"
-msgid "discussion resolved"
-msgid_plural "discussions resolved"
-msgstr[0] ""
-
msgid "done"
msgstr "完æˆ"
@@ -16121,17 +18677,29 @@ msgid "draft"
msgid_plural "drafts"
msgstr[0] "è‰ç¨¿"
+msgid "e.g. %{token}"
+msgstr ""
+
msgid "element is not a hierarchy"
msgstr ""
+msgid "email '%{email}' does not match the allowed domain of '%{email_domain}'"
+msgstr ""
+
msgid "enabled"
msgstr "已啟用"
msgid "encrypted: needs to be a :required, :optional or :migrating!"
msgstr ""
-msgid "epic"
-msgstr "å²è©©"
+msgid "entries cannot be larger than 255 characters"
+msgstr ""
+
+msgid "entries cannot be nil"
+msgstr ""
+
+msgid "entries cannot contain HTML tags"
+msgstr ""
msgid "error"
msgstr ""
@@ -16175,6 +18743,9 @@ msgstr ""
msgid "has already been taken"
msgstr ""
+msgid "help"
+msgstr ""
+
msgid "here"
msgstr "這裡"
@@ -16218,21 +18789,21 @@ msgstr "因為下游鎖定,所以無效"
msgid "is invalid because there is upstream lock"
msgstr "因上游鎖定而無效"
+msgid "is not a descendant of the Group owning the template"
+msgstr ""
+
msgid "is not a valid X509 certificate."
msgstr "éžæœ‰æ•ˆ X509 憑證。"
msgid "is not an email you own"
msgstr ""
-msgid "is out of the hierarchy of the Group owning the template"
+msgid "is too long (maximum is 1000 entries)"
msgstr ""
msgid "issue"
msgstr ""
-msgid "issue boards"
-msgstr "議題看æ¿"
-
msgid "it is stored externally"
msgstr ""
@@ -16257,15 +18828,24 @@ msgstr "最新版本"
msgid "leave %{group_name}"
msgstr ""
-msgid "license management"
-msgstr "授權管ç†"
-
msgid "locked by %{path_lock_user_name} %{created_at}"
msgstr "由 %{path_lock_user_name} 於 %{created_at} 鎖定"
+msgid "log in"
+msgstr ""
+
msgid "manual"
msgstr ""
+msgid "math|The math in this entry is taking too long to render and may not be displayed as expected. For performance reasons, math blocks are also limited to %{maxChars} characters. Consider splitting up large formulae, splitting math blocks among multiple entries, or using an image instead."
+msgstr ""
+
+msgid "math|There was an error rendering this math block"
+msgstr ""
+
+msgid "may expose confidential information"
+msgstr ""
+
msgid "merge request"
msgid_plural "merge requests"
msgstr[0] "åˆä½µè«‹æ±‚"
@@ -16285,6 +18865,15 @@ msgstr ""
msgid "mrWidgetCommitsAdded|1 merge commit"
msgstr ""
+msgid "mrWidgetNothingToMerge|Currently there are no changes in this merge request's source branch. Please push new commits or use a different branch."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Interested parties can even contribute by pushing commits if they want to."
+msgstr ""
+
+msgid "mrWidgetNothingToMerge|Merge requests are a place to propose changes you have made to a project and discuss those changes with others."
+msgstr ""
+
msgid "mrWidget| Please restore it or use a different %{missingBranchName} branch"
msgstr "請復原它或使用一個ä¸åŒ %{missingBranchName} 的分支"
@@ -16408,6 +18997,9 @@ msgstr ""
msgid "mrWidget|Merged by"
msgstr "åˆä½µè€…"
+msgid "mrWidget|More information"
+msgstr ""
+
msgid "mrWidget|No approval required"
msgstr ""
@@ -16441,6 +19033,9 @@ msgstr ""
msgid "mrWidget|Request to merge"
msgstr "請求åˆä½µ"
+msgid "mrWidget|Resolve WIP status"
+msgstr ""
+
msgid "mrWidget|Resolve conflicts"
msgstr "解決è¡çª"
@@ -16492,8 +19087,8 @@ msgstr ""
msgid "mrWidget|There are merge conflicts"
msgstr "發生åˆä½µè¡çª"
-msgid "mrWidget|There are unresolved discussions. Please resolve these discussions"
-msgstr "有個未解決的討論,請解決這些討論。"
+msgid "mrWidget|There are unresolved threads. Please resolve these threads"
+msgstr ""
msgid "mrWidget|This feature merges changes from the target branch to the source branch. You cannot use this feature since the source branch is protected."
msgstr ""
@@ -16504,9 +19099,21 @@ msgstr "æ­¤åˆä½µè«‹æ±‚未能自動åˆä½µ"
msgid "mrWidget|This merge request is in the process of being merged"
msgstr "æ­¤åˆä½µè«‹æ±‚正在被åˆä½µ"
+msgid "mrWidget|This merge request will be added to the merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
+msgid "mrWidget|This merge request will start a merge train when pipeline %{linkStart}#%{pipelineId}%{linkEnd} succeeds."
+msgstr ""
+
msgid "mrWidget|This project is archived, write access has been disabled"
msgstr "這個專案已經被打包,無法寫入"
+msgid "mrWidget|To approve this merge request, please enter your password. This project requires all approvals to be authenticated."
+msgstr ""
+
+msgid "mrWidget|When this merge request is ready, remove the WIP: prefix from the title to allow it to be merged"
+msgstr ""
+
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
msgstr "你沒有權é™ç›´æŽ¥ç·¨è¼¯æ­¤å°ˆæ¡ˆï¼Œè«‹åˆ†å‰å¾Œå†é€²è¡Œè®Šæ›´ã€‚"
@@ -16516,6 +19123,9 @@ msgstr ""
msgid "mrWidget|You can merge this merge request manually using the"
msgstr "ä½ å¯ä»¥æ‰‹å‹•åˆä½µé€™å€‹åˆä½µè«‹æ±‚,藉由"
+msgid "mrWidget|Your password"
+msgstr ""
+
msgid "mrWidget|branch does not exist."
msgstr "分支並ä¸å­˜åœ¨"
@@ -16549,9 +19159,15 @@ msgstr "建立åˆä½µè«‹æ±‚"
msgid "no contributions"
msgstr ""
+msgid "no one can merge"
+msgstr ""
+
msgid "none"
msgstr "ç„¡"
+msgid "not found"
+msgstr ""
+
msgid "notification emails"
msgstr "通知信"
@@ -16564,8 +19180,8 @@ msgstr ""
msgid "nounSeries|%{item}, and %{lastItem}"
msgstr ""
-msgid "or"
-msgstr "或"
+msgid "or %{link_start}create a new Google account%{link_end}"
+msgstr ""
msgid "out of %d total test"
msgid_plural "out of %d total tests"
@@ -16578,8 +19194,11 @@ msgstr[0] "上層"
msgid "password"
msgstr "密碼"
-msgid "personal access token"
-msgstr "ç§äººå­˜å–憑證"
+msgid "pending comment"
+msgstr ""
+
+msgid "pipeline"
+msgstr ""
msgid "point"
msgid_plural "points"
@@ -16598,12 +19217,18 @@ msgid "project"
msgid_plural "projects"
msgstr[0] "專案"
+msgid "project avatar"
+msgstr ""
+
msgid "quick actions"
msgstr "快速æ“作"
msgid "register"
msgstr ""
+msgid "released %{time}"
+msgstr ""
+
msgid "remaining"
msgstr "剩餘"
@@ -16616,6 +19241,9 @@ msgstr "刪除截止日期"
msgid "remove weight"
msgstr "移除權é‡"
+msgid "removed a Zoom call from this issue"
+msgstr ""
+
msgid "rendered diff"
msgstr ""
@@ -16701,15 +19329,37 @@ msgstr ""
msgid "this document"
msgstr "這份檔案"
+msgid "thread resolved"
+msgid_plural "threads resolved"
+msgstr[0] ""
+
msgid "to help your contributors communicate effectively!"
msgstr "å”助你的貢ç»è€…進行有效的æºé€šï¼"
+msgid "to list"
+msgstr ""
+
+msgid "toggle collapse"
+msgstr ""
+
+msgid "toggle dropdown"
+msgstr ""
+
msgid "triggered"
msgstr ""
+msgid "unicode domains should use IDNA encoding"
+msgstr ""
+
msgid "updated"
msgstr ""
+msgid "updated %{time_ago}"
+msgstr ""
+
+msgid "user avatar"
+msgstr ""
+
msgid "username"
msgstr "使用者å稱"
@@ -16719,6 +19369,9 @@ msgstr "使用 Kubernetes å¢é›†ä½ˆç½²æ‚¨çš„程å¼ç¢¼!"
msgid "verify ownership"
msgstr ""
+msgid "version %{versionIndex}"
+msgstr ""
+
msgid "via %{closed_via}"
msgstr ""
@@ -16734,12 +19387,18 @@ msgstr ""
msgid "vulnerability|Add a comment or reason for dismissal"
msgstr ""
+msgid "vulnerability|Add comment"
+msgstr ""
+
msgid "vulnerability|Add comment & dismiss"
msgstr ""
msgid "vulnerability|Dismiss vulnerability"
msgstr ""
+msgid "vulnerability|Save comment"
+msgstr ""
+
msgid "vulnerability|Undo dismiss"
msgstr ""
diff --git a/package.json b/package.json
index c468f7875ae..0d951a58406 100644
--- a/package.json
+++ b/package.json
@@ -30,16 +30,16 @@
"webpack-prod": "NODE_OPTIONS=\"--max-old-space-size=3584\" NODE_ENV=production webpack --config config/webpack.config.js"
},
"dependencies": {
- "@babel/core": "^7.5.5",
+ "@babel/core": "^7.6.2",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-proposal-json-strings": "^7.2.0",
- "@babel/plugin-proposal-private-methods": "^7.4.4",
+ "@babel/plugin-proposal-private-methods": "^7.6.0",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/plugin-syntax-import-meta": "^7.2.0",
- "@babel/preset-env": "^7.5.5",
- "@gitlab/svgs": "^1.73.0",
- "@gitlab/ui": "5.25.2",
- "@gitlab/visual-review-tools": "1.0.1",
+ "@babel/preset-env": "^7.6.2",
+ "@gitlab/svgs": "^1.78.0",
+ "@gitlab/ui": "5.36.0",
+ "@gitlab/visual-review-tools": "1.0.3",
"apollo-cache-inmemory": "^1.5.1",
"apollo-client": "^2.5.1",
"apollo-link": "^1.2.11",
@@ -49,17 +49,17 @@
"autosize": "^4.0.0",
"aws-sdk": "^2.526.0",
"axios": "^0.19.0",
- "babel-loader": "^8.0.5",
+ "babel-loader": "^8.0.6",
"bootstrap": "4.3.1",
"brace-expansion": "^1.1.8",
- "cache-loader": "^2.0.1",
+ "cache-loader": "^4.1.0",
"chart.js": "2.7.2",
"classlist-polyfill": "^1.2.0",
"clipboard": "^1.7.1",
"codesandbox-api": "^0.0.20",
- "compression-webpack-plugin": "^2.0.0",
+ "compression-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^5.0.4",
- "core-js": "^3.1.3",
+ "core-js": "^3.2.1",
"cropper": "^2.3.0",
"css-loader": "^1.0.0",
"d3": "^4.13.0",
@@ -81,7 +81,7 @@
"emoji-regex": "^7.0.3",
"emoji-unicode-version": "^0.2.1",
"exports-loader": "^0.7.0",
- "file-loader": "^3.0.1",
+ "file-loader": "^4.2.0",
"formdata-polyfill": "^3.0.11",
"fuzzaldrin-plus": "^0.5.0",
"glob": "^7.1.2",
@@ -110,7 +110,7 @@
"prosemirror-model": "^1.6.4",
"raphael": "^2.2.7",
"raven-js": "^3.22.1",
- "raw-loader": "^1.0.0",
+ "raw-loader": "^3.1.0",
"sanitize-html": "^1.16.1",
"select2": "3.5.2-browserify",
"sha1": "^1.1.1",
@@ -118,7 +118,7 @@
"sortablejs": "^1.10.0",
"sql.js": "^0.4.0",
"stickyfilljs": "^2.0.5",
- "style-loader": "^0.23.1",
+ "style-loader": "^1.0.0",
"svg4everybody": "2.1.9",
"three": "^0.84.0",
"three-orbit-controls": "^82.1.0",
@@ -128,21 +128,20 @@
"tiptap-commands": "^1.4.0",
"tiptap-extensions": "^1.8.0",
"underscore": "^1.9.0",
- "url-loader": "^1.1.2",
+ "url-loader": "^2.1.0",
"visibilityjs": "^1.2.4",
"vue": "^2.6.10",
"vue-apollo": "^3.0.0-beta.28",
- "vue-loader": "^15.7.0",
- "vue-resource": "^1.5.1",
+ "vue-loader": "^15.7.1",
"vue-router": "^3.0.2",
"vue-template-compiler": "^2.6.10",
"vue-virtual-scroll-list": "^1.3.1",
"vuedraggable": "^2.23.0",
"vuex": "^3.1.0",
- "webpack": "^4.29.0",
- "webpack-bundle-analyzer": "^3.3.2",
- "webpack-cli": "^3.2.1",
- "webpack-stats-plugin": "^0.2.1",
+ "webpack": "^4.40.2",
+ "webpack-bundle-analyzer": "^3.5.1",
+ "webpack-cli": "^3.3.9",
+ "webpack-stats-plugin": "^0.3.0",
"worker-loader": "^2.0.0",
"xterm": "^3.5.0"
},
@@ -167,6 +166,7 @@
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-jasmine": "^2.10.1",
"eslint-plugin-jest": "^22.3.0",
+ "eslint-plugin-no-jquery": "^2.1.0",
"gettext-extractor": "^3.4.3",
"gettext-extractor-vue": "^4.0.2",
"graphql-tag": "^2.10.0",
@@ -200,7 +200,7 @@
"stylelint-scss": "^3.9.2",
"timezone-mock": "^1.0.8",
"vue-jest": "^4.0.0-beta.2",
- "webpack-dev-server": "^3.1.14",
+ "webpack-dev-server": "^3.8.1",
"yarn-deduplicate": "^1.1.1"
},
"resolutions": {
diff --git a/public/-/emojis/1/100.png b/public/-/emojis/1/100.png
new file mode 100644
index 00000000000..6903ff0304a
--- /dev/null
+++ b/public/-/emojis/1/100.png
Binary files differ
diff --git a/public/-/emojis/1/1234.png b/public/-/emojis/1/1234.png
new file mode 100644
index 00000000000..248dc7e55b6
--- /dev/null
+++ b/public/-/emojis/1/1234.png
Binary files differ
diff --git a/public/-/emojis/1/1F627.png b/public/-/emojis/1/1F627.png
new file mode 100644
index 00000000000..f99026a3bc7
--- /dev/null
+++ b/public/-/emojis/1/1F627.png
Binary files differ
diff --git a/public/-/emojis/1/8ball.png b/public/-/emojis/1/8ball.png
new file mode 100644
index 00000000000..38ca662eded
--- /dev/null
+++ b/public/-/emojis/1/8ball.png
Binary files differ
diff --git a/public/-/emojis/1/a.png b/public/-/emojis/1/a.png
new file mode 100644
index 00000000000..8603ff05a17
--- /dev/null
+++ b/public/-/emojis/1/a.png
Binary files differ
diff --git a/public/-/emojis/1/ab.png b/public/-/emojis/1/ab.png
new file mode 100644
index 00000000000..d9f2d17dea0
--- /dev/null
+++ b/public/-/emojis/1/ab.png
Binary files differ
diff --git a/public/-/emojis/1/abc.png b/public/-/emojis/1/abc.png
new file mode 100644
index 00000000000..7688de692a9
--- /dev/null
+++ b/public/-/emojis/1/abc.png
Binary files differ
diff --git a/public/-/emojis/1/abcd.png b/public/-/emojis/1/abcd.png
new file mode 100644
index 00000000000..0996a870570
--- /dev/null
+++ b/public/-/emojis/1/abcd.png
Binary files differ
diff --git a/public/-/emojis/1/accept.png b/public/-/emojis/1/accept.png
new file mode 100644
index 00000000000..8afd7ce99cf
--- /dev/null
+++ b/public/-/emojis/1/accept.png
Binary files differ
diff --git a/public/-/emojis/1/aerial_tramway.png b/public/-/emojis/1/aerial_tramway.png
new file mode 100644
index 00000000000..3eb4b61bf1d
--- /dev/null
+++ b/public/-/emojis/1/aerial_tramway.png
Binary files differ
diff --git a/public/-/emojis/1/airplane.png b/public/-/emojis/1/airplane.png
new file mode 100644
index 00000000000..268d2ac3c8e
--- /dev/null
+++ b/public/-/emojis/1/airplane.png
Binary files differ
diff --git a/public/-/emojis/1/airplane_arriving.png b/public/-/emojis/1/airplane_arriving.png
new file mode 100644
index 00000000000..d66841962f2
--- /dev/null
+++ b/public/-/emojis/1/airplane_arriving.png
Binary files differ
diff --git a/public/-/emojis/1/airplane_departure.png b/public/-/emojis/1/airplane_departure.png
new file mode 100644
index 00000000000..a5766f9f4ae
--- /dev/null
+++ b/public/-/emojis/1/airplane_departure.png
Binary files differ
diff --git a/public/-/emojis/1/airplane_small.png b/public/-/emojis/1/airplane_small.png
new file mode 100644
index 00000000000..b731b15e3a8
--- /dev/null
+++ b/public/-/emojis/1/airplane_small.png
Binary files differ
diff --git a/public/-/emojis/1/alarm_clock.png b/public/-/emojis/1/alarm_clock.png
new file mode 100644
index 00000000000..cdbc2fbb950
--- /dev/null
+++ b/public/-/emojis/1/alarm_clock.png
Binary files differ
diff --git a/public/-/emojis/1/alembic.png b/public/-/emojis/1/alembic.png
new file mode 100644
index 00000000000..307a7324249
--- /dev/null
+++ b/public/-/emojis/1/alembic.png
Binary files differ
diff --git a/public/-/emojis/1/alien.png b/public/-/emojis/1/alien.png
new file mode 100644
index 00000000000..3b90e97433b
--- /dev/null
+++ b/public/-/emojis/1/alien.png
Binary files differ
diff --git a/public/-/emojis/1/ambulance.png b/public/-/emojis/1/ambulance.png
new file mode 100644
index 00000000000..6fb8076d766
--- /dev/null
+++ b/public/-/emojis/1/ambulance.png
Binary files differ
diff --git a/public/-/emojis/1/amphora.png b/public/-/emojis/1/amphora.png
new file mode 100644
index 00000000000..96de5056059
--- /dev/null
+++ b/public/-/emojis/1/amphora.png
Binary files differ
diff --git a/public/-/emojis/1/anchor.png b/public/-/emojis/1/anchor.png
new file mode 100644
index 00000000000..b036f70a00b
--- /dev/null
+++ b/public/-/emojis/1/anchor.png
Binary files differ
diff --git a/public/-/emojis/1/angel.png b/public/-/emojis/1/angel.png
new file mode 100644
index 00000000000..66ea97a3b99
--- /dev/null
+++ b/public/-/emojis/1/angel.png
Binary files differ
diff --git a/public/-/emojis/1/angel_tone1.png b/public/-/emojis/1/angel_tone1.png
new file mode 100644
index 00000000000..391694dc07e
--- /dev/null
+++ b/public/-/emojis/1/angel_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/angel_tone2.png b/public/-/emojis/1/angel_tone2.png
new file mode 100644
index 00000000000..700cbe6ed2c
--- /dev/null
+++ b/public/-/emojis/1/angel_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/angel_tone3.png b/public/-/emojis/1/angel_tone3.png
new file mode 100644
index 00000000000..be597437d25
--- /dev/null
+++ b/public/-/emojis/1/angel_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/angel_tone4.png b/public/-/emojis/1/angel_tone4.png
new file mode 100644
index 00000000000..b06d3c853ef
--- /dev/null
+++ b/public/-/emojis/1/angel_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/angel_tone5.png b/public/-/emojis/1/angel_tone5.png
new file mode 100644
index 00000000000..17bd677e334
--- /dev/null
+++ b/public/-/emojis/1/angel_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/anger.png b/public/-/emojis/1/anger.png
new file mode 100644
index 00000000000..d63c2e000e4
--- /dev/null
+++ b/public/-/emojis/1/anger.png
Binary files differ
diff --git a/public/-/emojis/1/anger_right.png b/public/-/emojis/1/anger_right.png
new file mode 100644
index 00000000000..f5c97c4d297
--- /dev/null
+++ b/public/-/emojis/1/anger_right.png
Binary files differ
diff --git a/public/-/emojis/1/angry.png b/public/-/emojis/1/angry.png
new file mode 100644
index 00000000000..cfc4a6ecde5
--- /dev/null
+++ b/public/-/emojis/1/angry.png
Binary files differ
diff --git a/public/-/emojis/1/ant.png b/public/-/emojis/1/ant.png
new file mode 100644
index 00000000000..994127ed6b3
--- /dev/null
+++ b/public/-/emojis/1/ant.png
Binary files differ
diff --git a/public/-/emojis/1/apple.png b/public/-/emojis/1/apple.png
new file mode 100644
index 00000000000..da650c60f62
--- /dev/null
+++ b/public/-/emojis/1/apple.png
Binary files differ
diff --git a/public/-/emojis/1/aquarius.png b/public/-/emojis/1/aquarius.png
new file mode 100644
index 00000000000..641a4f68889
--- /dev/null
+++ b/public/-/emojis/1/aquarius.png
Binary files differ
diff --git a/public/-/emojis/1/aries.png b/public/-/emojis/1/aries.png
new file mode 100644
index 00000000000..21a189d0ede
--- /dev/null
+++ b/public/-/emojis/1/aries.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_backward.png b/public/-/emojis/1/arrow_backward.png
new file mode 100644
index 00000000000..ee38e3b038e
--- /dev/null
+++ b/public/-/emojis/1/arrow_backward.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_double_down.png b/public/-/emojis/1/arrow_double_down.png
new file mode 100644
index 00000000000..90193bfcb40
--- /dev/null
+++ b/public/-/emojis/1/arrow_double_down.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_double_up.png b/public/-/emojis/1/arrow_double_up.png
new file mode 100644
index 00000000000..13543d5eef2
--- /dev/null
+++ b/public/-/emojis/1/arrow_double_up.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_down.png b/public/-/emojis/1/arrow_down.png
new file mode 100644
index 00000000000..b8eefd0b19f
--- /dev/null
+++ b/public/-/emojis/1/arrow_down.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_down_small.png b/public/-/emojis/1/arrow_down_small.png
new file mode 100644
index 00000000000..5870b9a2241
--- /dev/null
+++ b/public/-/emojis/1/arrow_down_small.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_forward.png b/public/-/emojis/1/arrow_forward.png
new file mode 100644
index 00000000000..4e2b682857c
--- /dev/null
+++ b/public/-/emojis/1/arrow_forward.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_heading_down.png b/public/-/emojis/1/arrow_heading_down.png
new file mode 100644
index 00000000000..2d9d24bca80
--- /dev/null
+++ b/public/-/emojis/1/arrow_heading_down.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_heading_up.png b/public/-/emojis/1/arrow_heading_up.png
new file mode 100644
index 00000000000..f29bfcfc0de
--- /dev/null
+++ b/public/-/emojis/1/arrow_heading_up.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_left.png b/public/-/emojis/1/arrow_left.png
new file mode 100644
index 00000000000..8c685e0a81b
--- /dev/null
+++ b/public/-/emojis/1/arrow_left.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_lower_left.png b/public/-/emojis/1/arrow_lower_left.png
new file mode 100644
index 00000000000..88b37716078
--- /dev/null
+++ b/public/-/emojis/1/arrow_lower_left.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_lower_right.png b/public/-/emojis/1/arrow_lower_right.png
new file mode 100644
index 00000000000..7e807da7392
--- /dev/null
+++ b/public/-/emojis/1/arrow_lower_right.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_right.png b/public/-/emojis/1/arrow_right.png
new file mode 100644
index 00000000000..4755670b5cc
--- /dev/null
+++ b/public/-/emojis/1/arrow_right.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_right_hook.png b/public/-/emojis/1/arrow_right_hook.png
new file mode 100644
index 00000000000..e7258ad3268
--- /dev/null
+++ b/public/-/emojis/1/arrow_right_hook.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_up.png b/public/-/emojis/1/arrow_up.png
new file mode 100644
index 00000000000..af8218a87f7
--- /dev/null
+++ b/public/-/emojis/1/arrow_up.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_up_down.png b/public/-/emojis/1/arrow_up_down.png
new file mode 100644
index 00000000000..dfa32b97186
--- /dev/null
+++ b/public/-/emojis/1/arrow_up_down.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_up_small.png b/public/-/emojis/1/arrow_up_small.png
new file mode 100644
index 00000000000..20a13dcd5cd
--- /dev/null
+++ b/public/-/emojis/1/arrow_up_small.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_upper_left.png b/public/-/emojis/1/arrow_upper_left.png
new file mode 100644
index 00000000000..f38718fbe34
--- /dev/null
+++ b/public/-/emojis/1/arrow_upper_left.png
Binary files differ
diff --git a/public/-/emojis/1/arrow_upper_right.png b/public/-/emojis/1/arrow_upper_right.png
new file mode 100644
index 00000000000..c43e12d0f64
--- /dev/null
+++ b/public/-/emojis/1/arrow_upper_right.png
Binary files differ
diff --git a/public/-/emojis/1/arrows_clockwise.png b/public/-/emojis/1/arrows_clockwise.png
new file mode 100644
index 00000000000..26e49c38388
--- /dev/null
+++ b/public/-/emojis/1/arrows_clockwise.png
Binary files differ
diff --git a/public/-/emojis/1/arrows_counterclockwise.png b/public/-/emojis/1/arrows_counterclockwise.png
new file mode 100644
index 00000000000..8d06d8e0912
--- /dev/null
+++ b/public/-/emojis/1/arrows_counterclockwise.png
Binary files differ
diff --git a/public/-/emojis/1/art.png b/public/-/emojis/1/art.png
new file mode 100644
index 00000000000..bd6afe9ff06
--- /dev/null
+++ b/public/-/emojis/1/art.png
Binary files differ
diff --git a/public/-/emojis/1/articulated_lorry.png b/public/-/emojis/1/articulated_lorry.png
new file mode 100644
index 00000000000..c8217317132
--- /dev/null
+++ b/public/-/emojis/1/articulated_lorry.png
Binary files differ
diff --git a/public/-/emojis/1/asterisk.png b/public/-/emojis/1/asterisk.png
new file mode 100644
index 00000000000..2f8e5113803
--- /dev/null
+++ b/public/-/emojis/1/asterisk.png
Binary files differ
diff --git a/public/-/emojis/1/astonished.png b/public/-/emojis/1/astonished.png
new file mode 100644
index 00000000000..bd0ac55ec8e
--- /dev/null
+++ b/public/-/emojis/1/astonished.png
Binary files differ
diff --git a/public/-/emojis/1/athletic_shoe.png b/public/-/emojis/1/athletic_shoe.png
new file mode 100644
index 00000000000..423fa07dd5d
--- /dev/null
+++ b/public/-/emojis/1/athletic_shoe.png
Binary files differ
diff --git a/public/-/emojis/1/atm.png b/public/-/emojis/1/atm.png
new file mode 100644
index 00000000000..4d935307b94
--- /dev/null
+++ b/public/-/emojis/1/atm.png
Binary files differ
diff --git a/public/-/emojis/1/atom.png b/public/-/emojis/1/atom.png
new file mode 100644
index 00000000000..5f4567aa093
--- /dev/null
+++ b/public/-/emojis/1/atom.png
Binary files differ
diff --git a/public/-/emojis/1/avocado.png b/public/-/emojis/1/avocado.png
new file mode 100644
index 00000000000..06f0d124aed
--- /dev/null
+++ b/public/-/emojis/1/avocado.png
Binary files differ
diff --git a/public/-/emojis/1/b.png b/public/-/emojis/1/b.png
new file mode 100644
index 00000000000..25875bc6a14
--- /dev/null
+++ b/public/-/emojis/1/b.png
Binary files differ
diff --git a/public/-/emojis/1/baby.png b/public/-/emojis/1/baby.png
new file mode 100644
index 00000000000..a4af92c63c7
--- /dev/null
+++ b/public/-/emojis/1/baby.png
Binary files differ
diff --git a/public/-/emojis/1/baby_bottle.png b/public/-/emojis/1/baby_bottle.png
new file mode 100644
index 00000000000..2bd10524180
--- /dev/null
+++ b/public/-/emojis/1/baby_bottle.png
Binary files differ
diff --git a/public/-/emojis/1/baby_chick.png b/public/-/emojis/1/baby_chick.png
new file mode 100644
index 00000000000..dccd96576ea
--- /dev/null
+++ b/public/-/emojis/1/baby_chick.png
Binary files differ
diff --git a/public/-/emojis/1/baby_symbol.png b/public/-/emojis/1/baby_symbol.png
new file mode 100644
index 00000000000..64a10b71710
--- /dev/null
+++ b/public/-/emojis/1/baby_symbol.png
Binary files differ
diff --git a/public/-/emojis/1/baby_tone1.png b/public/-/emojis/1/baby_tone1.png
new file mode 100644
index 00000000000..d20911d40db
--- /dev/null
+++ b/public/-/emojis/1/baby_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/baby_tone2.png b/public/-/emojis/1/baby_tone2.png
new file mode 100644
index 00000000000..b0a9b30ed17
--- /dev/null
+++ b/public/-/emojis/1/baby_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/baby_tone3.png b/public/-/emojis/1/baby_tone3.png
new file mode 100644
index 00000000000..7de5286fac1
--- /dev/null
+++ b/public/-/emojis/1/baby_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/baby_tone4.png b/public/-/emojis/1/baby_tone4.png
new file mode 100644
index 00000000000..9b7a86ac615
--- /dev/null
+++ b/public/-/emojis/1/baby_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/baby_tone5.png b/public/-/emojis/1/baby_tone5.png
new file mode 100644
index 00000000000..fe1be34cb88
--- /dev/null
+++ b/public/-/emojis/1/baby_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/back.png b/public/-/emojis/1/back.png
new file mode 100644
index 00000000000..d32c5d4f17f
--- /dev/null
+++ b/public/-/emojis/1/back.png
Binary files differ
diff --git a/public/-/emojis/1/bacon.png b/public/-/emojis/1/bacon.png
new file mode 100644
index 00000000000..f38a485fbe4
--- /dev/null
+++ b/public/-/emojis/1/bacon.png
Binary files differ
diff --git a/public/-/emojis/1/badminton.png b/public/-/emojis/1/badminton.png
new file mode 100644
index 00000000000..7ba15708990
--- /dev/null
+++ b/public/-/emojis/1/badminton.png
Binary files differ
diff --git a/public/-/emojis/1/baggage_claim.png b/public/-/emojis/1/baggage_claim.png
new file mode 100644
index 00000000000..409b593e78a
--- /dev/null
+++ b/public/-/emojis/1/baggage_claim.png
Binary files differ
diff --git a/public/-/emojis/1/balloon.png b/public/-/emojis/1/balloon.png
new file mode 100644
index 00000000000..07916fe6df1
--- /dev/null
+++ b/public/-/emojis/1/balloon.png
Binary files differ
diff --git a/public/-/emojis/1/ballot_box.png b/public/-/emojis/1/ballot_box.png
new file mode 100644
index 00000000000..9b6767aea9e
--- /dev/null
+++ b/public/-/emojis/1/ballot_box.png
Binary files differ
diff --git a/public/-/emojis/1/ballot_box_with_check.png b/public/-/emojis/1/ballot_box_with_check.png
new file mode 100644
index 00000000000..284d9573847
--- /dev/null
+++ b/public/-/emojis/1/ballot_box_with_check.png
Binary files differ
diff --git a/public/-/emojis/1/bamboo.png b/public/-/emojis/1/bamboo.png
new file mode 100644
index 00000000000..5d5e0e728a0
--- /dev/null
+++ b/public/-/emojis/1/bamboo.png
Binary files differ
diff --git a/public/-/emojis/1/banana.png b/public/-/emojis/1/banana.png
new file mode 100644
index 00000000000..f4987279580
--- /dev/null
+++ b/public/-/emojis/1/banana.png
Binary files differ
diff --git a/public/-/emojis/1/bangbang.png b/public/-/emojis/1/bangbang.png
new file mode 100644
index 00000000000..58a9c528fca
--- /dev/null
+++ b/public/-/emojis/1/bangbang.png
Binary files differ
diff --git a/public/-/emojis/1/bank.png b/public/-/emojis/1/bank.png
new file mode 100644
index 00000000000..dffdcef36a1
--- /dev/null
+++ b/public/-/emojis/1/bank.png
Binary files differ
diff --git a/public/-/emojis/1/bar_chart.png b/public/-/emojis/1/bar_chart.png
new file mode 100644
index 00000000000..53c89455008
--- /dev/null
+++ b/public/-/emojis/1/bar_chart.png
Binary files differ
diff --git a/public/-/emojis/1/barber.png b/public/-/emojis/1/barber.png
new file mode 100644
index 00000000000..896f4d716cf
--- /dev/null
+++ b/public/-/emojis/1/barber.png
Binary files differ
diff --git a/public/-/emojis/1/baseball.png b/public/-/emojis/1/baseball.png
new file mode 100644
index 00000000000..f8463f1538b
--- /dev/null
+++ b/public/-/emojis/1/baseball.png
Binary files differ
diff --git a/public/-/emojis/1/basketball.png b/public/-/emojis/1/basketball.png
new file mode 100644
index 00000000000..64c76b79c6d
--- /dev/null
+++ b/public/-/emojis/1/basketball.png
Binary files differ
diff --git a/public/-/emojis/1/basketball_player.png b/public/-/emojis/1/basketball_player.png
new file mode 100644
index 00000000000..8ce90c5cad6
--- /dev/null
+++ b/public/-/emojis/1/basketball_player.png
Binary files differ
diff --git a/public/-/emojis/1/basketball_player_tone1.png b/public/-/emojis/1/basketball_player_tone1.png
new file mode 100644
index 00000000000..cd12c7ab9bf
--- /dev/null
+++ b/public/-/emojis/1/basketball_player_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/basketball_player_tone2.png b/public/-/emojis/1/basketball_player_tone2.png
new file mode 100644
index 00000000000..f892fd596da
--- /dev/null
+++ b/public/-/emojis/1/basketball_player_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/basketball_player_tone3.png b/public/-/emojis/1/basketball_player_tone3.png
new file mode 100644
index 00000000000..e109997a91a
--- /dev/null
+++ b/public/-/emojis/1/basketball_player_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/basketball_player_tone4.png b/public/-/emojis/1/basketball_player_tone4.png
new file mode 100644
index 00000000000..3b90b946af4
--- /dev/null
+++ b/public/-/emojis/1/basketball_player_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/basketball_player_tone5.png b/public/-/emojis/1/basketball_player_tone5.png
new file mode 100644
index 00000000000..bafed7828a7
--- /dev/null
+++ b/public/-/emojis/1/basketball_player_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/bat.png b/public/-/emojis/1/bat.png
new file mode 100644
index 00000000000..3152c047e00
--- /dev/null
+++ b/public/-/emojis/1/bat.png
Binary files differ
diff --git a/public/-/emojis/1/bath.png b/public/-/emojis/1/bath.png
new file mode 100644
index 00000000000..43fba5c8a28
--- /dev/null
+++ b/public/-/emojis/1/bath.png
Binary files differ
diff --git a/public/-/emojis/1/bath_tone1.png b/public/-/emojis/1/bath_tone1.png
new file mode 100644
index 00000000000..2152eabf2f5
--- /dev/null
+++ b/public/-/emojis/1/bath_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/bath_tone2.png b/public/-/emojis/1/bath_tone2.png
new file mode 100644
index 00000000000..2102e6133e3
--- /dev/null
+++ b/public/-/emojis/1/bath_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/bath_tone3.png b/public/-/emojis/1/bath_tone3.png
new file mode 100644
index 00000000000..fae66181e9f
--- /dev/null
+++ b/public/-/emojis/1/bath_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/bath_tone4.png b/public/-/emojis/1/bath_tone4.png
new file mode 100644
index 00000000000..1f8959d0d99
--- /dev/null
+++ b/public/-/emojis/1/bath_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/bath_tone5.png b/public/-/emojis/1/bath_tone5.png
new file mode 100644
index 00000000000..c8a08e84f25
--- /dev/null
+++ b/public/-/emojis/1/bath_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/bathtub.png b/public/-/emojis/1/bathtub.png
new file mode 100644
index 00000000000..9a5f09361eb
--- /dev/null
+++ b/public/-/emojis/1/bathtub.png
Binary files differ
diff --git a/public/-/emojis/1/battery.png b/public/-/emojis/1/battery.png
new file mode 100644
index 00000000000..f593e2bdb65
--- /dev/null
+++ b/public/-/emojis/1/battery.png
Binary files differ
diff --git a/public/-/emojis/1/beach.png b/public/-/emojis/1/beach.png
new file mode 100644
index 00000000000..69108c8ea10
--- /dev/null
+++ b/public/-/emojis/1/beach.png
Binary files differ
diff --git a/public/-/emojis/1/beach_umbrella.png b/public/-/emojis/1/beach_umbrella.png
new file mode 100644
index 00000000000..220a74f8132
--- /dev/null
+++ b/public/-/emojis/1/beach_umbrella.png
Binary files differ
diff --git a/public/-/emojis/1/bear.png b/public/-/emojis/1/bear.png
new file mode 100644
index 00000000000..272d56bbbcc
--- /dev/null
+++ b/public/-/emojis/1/bear.png
Binary files differ
diff --git a/public/-/emojis/1/bed.png b/public/-/emojis/1/bed.png
new file mode 100644
index 00000000000..86f964e245d
--- /dev/null
+++ b/public/-/emojis/1/bed.png
Binary files differ
diff --git a/public/-/emojis/1/bee.png b/public/-/emojis/1/bee.png
new file mode 100644
index 00000000000..46156060096
--- /dev/null
+++ b/public/-/emojis/1/bee.png
Binary files differ
diff --git a/public/-/emojis/1/beer.png b/public/-/emojis/1/beer.png
new file mode 100644
index 00000000000..b6d73dc0b7a
--- /dev/null
+++ b/public/-/emojis/1/beer.png
Binary files differ
diff --git a/public/-/emojis/1/beers.png b/public/-/emojis/1/beers.png
new file mode 100644
index 00000000000..b55deb66b41
--- /dev/null
+++ b/public/-/emojis/1/beers.png
Binary files differ
diff --git a/public/-/emojis/1/beetle.png b/public/-/emojis/1/beetle.png
new file mode 100644
index 00000000000..3d93174d7fc
--- /dev/null
+++ b/public/-/emojis/1/beetle.png
Binary files differ
diff --git a/public/-/emojis/1/beginner.png b/public/-/emojis/1/beginner.png
new file mode 100644
index 00000000000..bc434fb7cb5
--- /dev/null
+++ b/public/-/emojis/1/beginner.png
Binary files differ
diff --git a/public/-/emojis/1/bell.png b/public/-/emojis/1/bell.png
new file mode 100644
index 00000000000..5b3b0461999
--- /dev/null
+++ b/public/-/emojis/1/bell.png
Binary files differ
diff --git a/public/-/emojis/1/bellhop.png b/public/-/emojis/1/bellhop.png
new file mode 100644
index 00000000000..6b3297ceaf7
--- /dev/null
+++ b/public/-/emojis/1/bellhop.png
Binary files differ
diff --git a/public/-/emojis/1/bento.png b/public/-/emojis/1/bento.png
new file mode 100644
index 00000000000..83d41ca7eb9
--- /dev/null
+++ b/public/-/emojis/1/bento.png
Binary files differ
diff --git a/public/-/emojis/1/bicyclist.png b/public/-/emojis/1/bicyclist.png
new file mode 100644
index 00000000000..9274da11048
--- /dev/null
+++ b/public/-/emojis/1/bicyclist.png
Binary files differ
diff --git a/public/-/emojis/1/bicyclist_tone1.png b/public/-/emojis/1/bicyclist_tone1.png
new file mode 100644
index 00000000000..decc2f728fe
--- /dev/null
+++ b/public/-/emojis/1/bicyclist_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/bicyclist_tone2.png b/public/-/emojis/1/bicyclist_tone2.png
new file mode 100644
index 00000000000..0067717b80a
--- /dev/null
+++ b/public/-/emojis/1/bicyclist_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/bicyclist_tone3.png b/public/-/emojis/1/bicyclist_tone3.png
new file mode 100644
index 00000000000..a4f7b5e2776
--- /dev/null
+++ b/public/-/emojis/1/bicyclist_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/bicyclist_tone4.png b/public/-/emojis/1/bicyclist_tone4.png
new file mode 100644
index 00000000000..a3c8a797db4
--- /dev/null
+++ b/public/-/emojis/1/bicyclist_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/bicyclist_tone5.png b/public/-/emojis/1/bicyclist_tone5.png
new file mode 100644
index 00000000000..1606a874051
--- /dev/null
+++ b/public/-/emojis/1/bicyclist_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/bike.png b/public/-/emojis/1/bike.png
new file mode 100644
index 00000000000..556ed70f1a7
--- /dev/null
+++ b/public/-/emojis/1/bike.png
Binary files differ
diff --git a/public/-/emojis/1/bikini.png b/public/-/emojis/1/bikini.png
new file mode 100644
index 00000000000..77a8a0aae5b
--- /dev/null
+++ b/public/-/emojis/1/bikini.png
Binary files differ
diff --git a/public/-/emojis/1/biohazard.png b/public/-/emojis/1/biohazard.png
new file mode 100644
index 00000000000..007b4fc2d85
--- /dev/null
+++ b/public/-/emojis/1/biohazard.png
Binary files differ
diff --git a/public/-/emojis/1/bird.png b/public/-/emojis/1/bird.png
new file mode 100644
index 00000000000..e201c22be33
--- /dev/null
+++ b/public/-/emojis/1/bird.png
Binary files differ
diff --git a/public/-/emojis/1/birthday.png b/public/-/emojis/1/birthday.png
new file mode 100644
index 00000000000..317e9a41949
--- /dev/null
+++ b/public/-/emojis/1/birthday.png
Binary files differ
diff --git a/public/-/emojis/1/black_circle.png b/public/-/emojis/1/black_circle.png
new file mode 100644
index 00000000000..b62b87170e8
--- /dev/null
+++ b/public/-/emojis/1/black_circle.png
Binary files differ
diff --git a/public/-/emojis/1/black_heart.png b/public/-/emojis/1/black_heart.png
new file mode 100644
index 00000000000..b4068c3e6e8
--- /dev/null
+++ b/public/-/emojis/1/black_heart.png
Binary files differ
diff --git a/public/-/emojis/1/black_joker.png b/public/-/emojis/1/black_joker.png
new file mode 100644
index 00000000000..3d0924b68aa
--- /dev/null
+++ b/public/-/emojis/1/black_joker.png
Binary files differ
diff --git a/public/-/emojis/1/black_large_square.png b/public/-/emojis/1/black_large_square.png
new file mode 100644
index 00000000000..162f2bb4290
--- /dev/null
+++ b/public/-/emojis/1/black_large_square.png
Binary files differ
diff --git a/public/-/emojis/1/black_medium_small_square.png b/public/-/emojis/1/black_medium_small_square.png
new file mode 100644
index 00000000000..39765bba610
--- /dev/null
+++ b/public/-/emojis/1/black_medium_small_square.png
Binary files differ
diff --git a/public/-/emojis/1/black_medium_square.png b/public/-/emojis/1/black_medium_square.png
new file mode 100644
index 00000000000..05a30a6aa2d
--- /dev/null
+++ b/public/-/emojis/1/black_medium_square.png
Binary files differ
diff --git a/public/-/emojis/1/black_nib.png b/public/-/emojis/1/black_nib.png
new file mode 100644
index 00000000000..872d0ae1598
--- /dev/null
+++ b/public/-/emojis/1/black_nib.png
Binary files differ
diff --git a/public/-/emojis/1/black_small_square.png b/public/-/emojis/1/black_small_square.png
new file mode 100644
index 00000000000..48595d3e1a9
--- /dev/null
+++ b/public/-/emojis/1/black_small_square.png
Binary files differ
diff --git a/public/-/emojis/1/black_square_button.png b/public/-/emojis/1/black_square_button.png
new file mode 100644
index 00000000000..a78fc2f6b63
--- /dev/null
+++ b/public/-/emojis/1/black_square_button.png
Binary files differ
diff --git a/public/-/emojis/1/blossom.png b/public/-/emojis/1/blossom.png
new file mode 100644
index 00000000000..4083026c157
--- /dev/null
+++ b/public/-/emojis/1/blossom.png
Binary files differ
diff --git a/public/-/emojis/1/blowfish.png b/public/-/emojis/1/blowfish.png
new file mode 100644
index 00000000000..a10f4f84e35
--- /dev/null
+++ b/public/-/emojis/1/blowfish.png
Binary files differ
diff --git a/public/-/emojis/1/blue_book.png b/public/-/emojis/1/blue_book.png
new file mode 100644
index 00000000000..e1e455401cc
--- /dev/null
+++ b/public/-/emojis/1/blue_book.png
Binary files differ
diff --git a/public/-/emojis/1/blue_car.png b/public/-/emojis/1/blue_car.png
new file mode 100644
index 00000000000..e8ba817d393
--- /dev/null
+++ b/public/-/emojis/1/blue_car.png
Binary files differ
diff --git a/public/-/emojis/1/blue_heart.png b/public/-/emojis/1/blue_heart.png
new file mode 100644
index 00000000000..bdf1287e55e
--- /dev/null
+++ b/public/-/emojis/1/blue_heart.png
Binary files differ
diff --git a/public/-/emojis/1/blush.png b/public/-/emojis/1/blush.png
new file mode 100644
index 00000000000..aac1a424ad4
--- /dev/null
+++ b/public/-/emojis/1/blush.png
Binary files differ
diff --git a/public/-/emojis/1/boar.png b/public/-/emojis/1/boar.png
new file mode 100644
index 00000000000..fead972633c
--- /dev/null
+++ b/public/-/emojis/1/boar.png
Binary files differ
diff --git a/public/-/emojis/1/bomb.png b/public/-/emojis/1/bomb.png
new file mode 100644
index 00000000000..c7f8f81c939
--- /dev/null
+++ b/public/-/emojis/1/bomb.png
Binary files differ
diff --git a/public/-/emojis/1/book.png b/public/-/emojis/1/book.png
new file mode 100644
index 00000000000..0f4447ed396
--- /dev/null
+++ b/public/-/emojis/1/book.png
Binary files differ
diff --git a/public/-/emojis/1/bookmark.png b/public/-/emojis/1/bookmark.png
new file mode 100644
index 00000000000..bbb444611f0
--- /dev/null
+++ b/public/-/emojis/1/bookmark.png
Binary files differ
diff --git a/public/-/emojis/1/bookmark_tabs.png b/public/-/emojis/1/bookmark_tabs.png
new file mode 100644
index 00000000000..f8d9e01b428
--- /dev/null
+++ b/public/-/emojis/1/bookmark_tabs.png
Binary files differ
diff --git a/public/-/emojis/1/books.png b/public/-/emojis/1/books.png
new file mode 100644
index 00000000000..59a8bafeb0d
--- /dev/null
+++ b/public/-/emojis/1/books.png
Binary files differ
diff --git a/public/-/emojis/1/boom.png b/public/-/emojis/1/boom.png
new file mode 100644
index 00000000000..9b0f027b1a8
--- /dev/null
+++ b/public/-/emojis/1/boom.png
Binary files differ
diff --git a/public/-/emojis/1/boot.png b/public/-/emojis/1/boot.png
new file mode 100644
index 00000000000..11f1065ed07
--- /dev/null
+++ b/public/-/emojis/1/boot.png
Binary files differ
diff --git a/public/-/emojis/1/bouquet.png b/public/-/emojis/1/bouquet.png
new file mode 100644
index 00000000000..11455af6df4
--- /dev/null
+++ b/public/-/emojis/1/bouquet.png
Binary files differ
diff --git a/public/-/emojis/1/bow.png b/public/-/emojis/1/bow.png
new file mode 100644
index 00000000000..d8f793088dc
--- /dev/null
+++ b/public/-/emojis/1/bow.png
Binary files differ
diff --git a/public/-/emojis/1/bow_and_arrow.png b/public/-/emojis/1/bow_and_arrow.png
new file mode 100644
index 00000000000..6a538bf475f
--- /dev/null
+++ b/public/-/emojis/1/bow_and_arrow.png
Binary files differ
diff --git a/public/-/emojis/1/bow_tone1.png b/public/-/emojis/1/bow_tone1.png
new file mode 100644
index 00000000000..87afb7b54cf
--- /dev/null
+++ b/public/-/emojis/1/bow_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/bow_tone2.png b/public/-/emojis/1/bow_tone2.png
new file mode 100644
index 00000000000..3ccf7dc0850
--- /dev/null
+++ b/public/-/emojis/1/bow_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/bow_tone3.png b/public/-/emojis/1/bow_tone3.png
new file mode 100644
index 00000000000..8b9eb64f926
--- /dev/null
+++ b/public/-/emojis/1/bow_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/bow_tone4.png b/public/-/emojis/1/bow_tone4.png
new file mode 100644
index 00000000000..683795ff40d
--- /dev/null
+++ b/public/-/emojis/1/bow_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/bow_tone5.png b/public/-/emojis/1/bow_tone5.png
new file mode 100644
index 00000000000..7969d971752
--- /dev/null
+++ b/public/-/emojis/1/bow_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/bowling.png b/public/-/emojis/1/bowling.png
new file mode 100644
index 00000000000..63add89e53b
--- /dev/null
+++ b/public/-/emojis/1/bowling.png
Binary files differ
diff --git a/public/-/emojis/1/boxing_glove.png b/public/-/emojis/1/boxing_glove.png
new file mode 100644
index 00000000000..9838f24e51a
--- /dev/null
+++ b/public/-/emojis/1/boxing_glove.png
Binary files differ
diff --git a/public/-/emojis/1/boy.png b/public/-/emojis/1/boy.png
new file mode 100644
index 00000000000..8ecfb0a4e92
--- /dev/null
+++ b/public/-/emojis/1/boy.png
Binary files differ
diff --git a/public/-/emojis/1/boy_tone1.png b/public/-/emojis/1/boy_tone1.png
new file mode 100644
index 00000000000..2fc436ea512
--- /dev/null
+++ b/public/-/emojis/1/boy_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/boy_tone2.png b/public/-/emojis/1/boy_tone2.png
new file mode 100644
index 00000000000..09a5f18d360
--- /dev/null
+++ b/public/-/emojis/1/boy_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/boy_tone3.png b/public/-/emojis/1/boy_tone3.png
new file mode 100644
index 00000000000..3cfe675dd3a
--- /dev/null
+++ b/public/-/emojis/1/boy_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/boy_tone4.png b/public/-/emojis/1/boy_tone4.png
new file mode 100644
index 00000000000..780be0ace36
--- /dev/null
+++ b/public/-/emojis/1/boy_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/boy_tone5.png b/public/-/emojis/1/boy_tone5.png
new file mode 100644
index 00000000000..f32fe22e35c
--- /dev/null
+++ b/public/-/emojis/1/boy_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/bread.png b/public/-/emojis/1/bread.png
new file mode 100644
index 00000000000..6676510aaa5
--- /dev/null
+++ b/public/-/emojis/1/bread.png
Binary files differ
diff --git a/public/-/emojis/1/bride_with_veil.png b/public/-/emojis/1/bride_with_veil.png
new file mode 100644
index 00000000000..eaf4bd97890
--- /dev/null
+++ b/public/-/emojis/1/bride_with_veil.png
Binary files differ
diff --git a/public/-/emojis/1/bride_with_veil_tone1.png b/public/-/emojis/1/bride_with_veil_tone1.png
new file mode 100644
index 00000000000..c4fb141ae8f
--- /dev/null
+++ b/public/-/emojis/1/bride_with_veil_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/bride_with_veil_tone2.png b/public/-/emojis/1/bride_with_veil_tone2.png
new file mode 100644
index 00000000000..c248769fc06
--- /dev/null
+++ b/public/-/emojis/1/bride_with_veil_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/bride_with_veil_tone3.png b/public/-/emojis/1/bride_with_veil_tone3.png
new file mode 100644
index 00000000000..962c0a6eedb
--- /dev/null
+++ b/public/-/emojis/1/bride_with_veil_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/bride_with_veil_tone4.png b/public/-/emojis/1/bride_with_veil_tone4.png
new file mode 100644
index 00000000000..740ca208cd4
--- /dev/null
+++ b/public/-/emojis/1/bride_with_veil_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/bride_with_veil_tone5.png b/public/-/emojis/1/bride_with_veil_tone5.png
new file mode 100644
index 00000000000..5cc5598587d
--- /dev/null
+++ b/public/-/emojis/1/bride_with_veil_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/bridge_at_night.png b/public/-/emojis/1/bridge_at_night.png
new file mode 100644
index 00000000000..1d444e0be65
--- /dev/null
+++ b/public/-/emojis/1/bridge_at_night.png
Binary files differ
diff --git a/public/-/emojis/1/briefcase.png b/public/-/emojis/1/briefcase.png
new file mode 100644
index 00000000000..b9912ba2148
--- /dev/null
+++ b/public/-/emojis/1/briefcase.png
Binary files differ
diff --git a/public/-/emojis/1/broken_heart.png b/public/-/emojis/1/broken_heart.png
new file mode 100644
index 00000000000..718e26ee122
--- /dev/null
+++ b/public/-/emojis/1/broken_heart.png
Binary files differ
diff --git a/public/-/emojis/1/bug.png b/public/-/emojis/1/bug.png
new file mode 100644
index 00000000000..e64e72f259a
--- /dev/null
+++ b/public/-/emojis/1/bug.png
Binary files differ
diff --git a/public/-/emojis/1/bulb.png b/public/-/emojis/1/bulb.png
new file mode 100644
index 00000000000..38e32e02d9f
--- /dev/null
+++ b/public/-/emojis/1/bulb.png
Binary files differ
diff --git a/public/-/emojis/1/bullettrain_front.png b/public/-/emojis/1/bullettrain_front.png
new file mode 100644
index 00000000000..4f698e056fa
--- /dev/null
+++ b/public/-/emojis/1/bullettrain_front.png
Binary files differ
diff --git a/public/-/emojis/1/bullettrain_side.png b/public/-/emojis/1/bullettrain_side.png
new file mode 100644
index 00000000000..ed61c67bf07
--- /dev/null
+++ b/public/-/emojis/1/bullettrain_side.png
Binary files differ
diff --git a/public/-/emojis/1/burrito.png b/public/-/emojis/1/burrito.png
new file mode 100644
index 00000000000..02bd5601df7
--- /dev/null
+++ b/public/-/emojis/1/burrito.png
Binary files differ
diff --git a/public/-/emojis/1/bus.png b/public/-/emojis/1/bus.png
new file mode 100644
index 00000000000..641ddc56ca7
--- /dev/null
+++ b/public/-/emojis/1/bus.png
Binary files differ
diff --git a/public/-/emojis/1/busstop.png b/public/-/emojis/1/busstop.png
new file mode 100644
index 00000000000..b2b62208bfd
--- /dev/null
+++ b/public/-/emojis/1/busstop.png
Binary files differ
diff --git a/public/-/emojis/1/bust_in_silhouette.png b/public/-/emojis/1/bust_in_silhouette.png
new file mode 100644
index 00000000000..123b2cbe1fb
--- /dev/null
+++ b/public/-/emojis/1/bust_in_silhouette.png
Binary files differ
diff --git a/public/-/emojis/1/busts_in_silhouette.png b/public/-/emojis/1/busts_in_silhouette.png
new file mode 100644
index 00000000000..d7656860a1c
--- /dev/null
+++ b/public/-/emojis/1/busts_in_silhouette.png
Binary files differ
diff --git a/public/-/emojis/1/butterfly.png b/public/-/emojis/1/butterfly.png
new file mode 100644
index 00000000000..5631fe99226
--- /dev/null
+++ b/public/-/emojis/1/butterfly.png
Binary files differ
diff --git a/public/-/emojis/1/cactus.png b/public/-/emojis/1/cactus.png
new file mode 100644
index 00000000000..9b48ccf3d0c
--- /dev/null
+++ b/public/-/emojis/1/cactus.png
Binary files differ
diff --git a/public/-/emojis/1/cake.png b/public/-/emojis/1/cake.png
new file mode 100644
index 00000000000..4368177be9a
--- /dev/null
+++ b/public/-/emojis/1/cake.png
Binary files differ
diff --git a/public/-/emojis/1/calendar.png b/public/-/emojis/1/calendar.png
new file mode 100644
index 00000000000..47353b74447
--- /dev/null
+++ b/public/-/emojis/1/calendar.png
Binary files differ
diff --git a/public/-/emojis/1/calendar_spiral.png b/public/-/emojis/1/calendar_spiral.png
new file mode 100644
index 00000000000..dec8d49bfa8
--- /dev/null
+++ b/public/-/emojis/1/calendar_spiral.png
Binary files differ
diff --git a/public/-/emojis/1/call_me.png b/public/-/emojis/1/call_me.png
new file mode 100644
index 00000000000..a10c59ba711
--- /dev/null
+++ b/public/-/emojis/1/call_me.png
Binary files differ
diff --git a/public/-/emojis/1/call_me_tone1.png b/public/-/emojis/1/call_me_tone1.png
new file mode 100644
index 00000000000..2c93201181a
--- /dev/null
+++ b/public/-/emojis/1/call_me_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/call_me_tone2.png b/public/-/emojis/1/call_me_tone2.png
new file mode 100644
index 00000000000..c39f45a41ed
--- /dev/null
+++ b/public/-/emojis/1/call_me_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/call_me_tone3.png b/public/-/emojis/1/call_me_tone3.png
new file mode 100644
index 00000000000..83a57f63c29
--- /dev/null
+++ b/public/-/emojis/1/call_me_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/call_me_tone4.png b/public/-/emojis/1/call_me_tone4.png
new file mode 100644
index 00000000000..65b3468fe44
--- /dev/null
+++ b/public/-/emojis/1/call_me_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/call_me_tone5.png b/public/-/emojis/1/call_me_tone5.png
new file mode 100644
index 00000000000..94ef68ff3b3
--- /dev/null
+++ b/public/-/emojis/1/call_me_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/calling.png b/public/-/emojis/1/calling.png
new file mode 100644
index 00000000000..e2f308f8e46
--- /dev/null
+++ b/public/-/emojis/1/calling.png
Binary files differ
diff --git a/public/-/emojis/1/camel.png b/public/-/emojis/1/camel.png
new file mode 100644
index 00000000000..b421d07a805
--- /dev/null
+++ b/public/-/emojis/1/camel.png
Binary files differ
diff --git a/public/-/emojis/1/camera.png b/public/-/emojis/1/camera.png
new file mode 100644
index 00000000000..0a3429f72ef
--- /dev/null
+++ b/public/-/emojis/1/camera.png
Binary files differ
diff --git a/public/-/emojis/1/camera_with_flash.png b/public/-/emojis/1/camera_with_flash.png
new file mode 100644
index 00000000000..27471da2029
--- /dev/null
+++ b/public/-/emojis/1/camera_with_flash.png
Binary files differ
diff --git a/public/-/emojis/1/camping.png b/public/-/emojis/1/camping.png
new file mode 100644
index 00000000000..d589cc1f44b
--- /dev/null
+++ b/public/-/emojis/1/camping.png
Binary files differ
diff --git a/public/-/emojis/1/cancer.png b/public/-/emojis/1/cancer.png
new file mode 100644
index 00000000000..a64af07cb5f
--- /dev/null
+++ b/public/-/emojis/1/cancer.png
Binary files differ
diff --git a/public/-/emojis/1/candle.png b/public/-/emojis/1/candle.png
new file mode 100644
index 00000000000..0b56444e355
--- /dev/null
+++ b/public/-/emojis/1/candle.png
Binary files differ
diff --git a/public/-/emojis/1/candy.png b/public/-/emojis/1/candy.png
new file mode 100644
index 00000000000..8c67ace3a35
--- /dev/null
+++ b/public/-/emojis/1/candy.png
Binary files differ
diff --git a/public/-/emojis/1/canoe.png b/public/-/emojis/1/canoe.png
new file mode 100644
index 00000000000..e26cdb9da69
--- /dev/null
+++ b/public/-/emojis/1/canoe.png
Binary files differ
diff --git a/public/-/emojis/1/capital_abcd.png b/public/-/emojis/1/capital_abcd.png
new file mode 100644
index 00000000000..fe9482d2d8a
--- /dev/null
+++ b/public/-/emojis/1/capital_abcd.png
Binary files differ
diff --git a/public/-/emojis/1/capricorn.png b/public/-/emojis/1/capricorn.png
new file mode 100644
index 00000000000..6293d31d4b1
--- /dev/null
+++ b/public/-/emojis/1/capricorn.png
Binary files differ
diff --git a/public/-/emojis/1/card_box.png b/public/-/emojis/1/card_box.png
new file mode 100644
index 00000000000..f2e764ce59d
--- /dev/null
+++ b/public/-/emojis/1/card_box.png
Binary files differ
diff --git a/public/-/emojis/1/card_index.png b/public/-/emojis/1/card_index.png
new file mode 100644
index 00000000000..151e11cb3b4
--- /dev/null
+++ b/public/-/emojis/1/card_index.png
Binary files differ
diff --git a/public/-/emojis/1/carousel_horse.png b/public/-/emojis/1/carousel_horse.png
new file mode 100644
index 00000000000..a17074edf05
--- /dev/null
+++ b/public/-/emojis/1/carousel_horse.png
Binary files differ
diff --git a/public/-/emojis/1/carrot.png b/public/-/emojis/1/carrot.png
new file mode 100644
index 00000000000..c68829b58e7
--- /dev/null
+++ b/public/-/emojis/1/carrot.png
Binary files differ
diff --git a/public/-/emojis/1/cartwheel.png b/public/-/emojis/1/cartwheel.png
new file mode 100644
index 00000000000..cbcaa578253
--- /dev/null
+++ b/public/-/emojis/1/cartwheel.png
Binary files differ
diff --git a/public/-/emojis/1/cartwheel_tone1.png b/public/-/emojis/1/cartwheel_tone1.png
new file mode 100644
index 00000000000..db6d65895fb
--- /dev/null
+++ b/public/-/emojis/1/cartwheel_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/cartwheel_tone2.png b/public/-/emojis/1/cartwheel_tone2.png
new file mode 100644
index 00000000000..e00ffbc27a8
--- /dev/null
+++ b/public/-/emojis/1/cartwheel_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/cartwheel_tone3.png b/public/-/emojis/1/cartwheel_tone3.png
new file mode 100644
index 00000000000..49321be391f
--- /dev/null
+++ b/public/-/emojis/1/cartwheel_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/cartwheel_tone4.png b/public/-/emojis/1/cartwheel_tone4.png
new file mode 100644
index 00000000000..d4562b5e3dd
--- /dev/null
+++ b/public/-/emojis/1/cartwheel_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/cartwheel_tone5.png b/public/-/emojis/1/cartwheel_tone5.png
new file mode 100644
index 00000000000..6e09a870767
--- /dev/null
+++ b/public/-/emojis/1/cartwheel_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/cat.png b/public/-/emojis/1/cat.png
new file mode 100644
index 00000000000..efd82c2abf3
--- /dev/null
+++ b/public/-/emojis/1/cat.png
Binary files differ
diff --git a/public/-/emojis/1/cat2.png b/public/-/emojis/1/cat2.png
new file mode 100644
index 00000000000..46abe8cbc14
--- /dev/null
+++ b/public/-/emojis/1/cat2.png
Binary files differ
diff --git a/public/-/emojis/1/cd.png b/public/-/emojis/1/cd.png
new file mode 100644
index 00000000000..e6b01449cd9
--- /dev/null
+++ b/public/-/emojis/1/cd.png
Binary files differ
diff --git a/public/-/emojis/1/chains.png b/public/-/emojis/1/chains.png
new file mode 100644
index 00000000000..57f46139a06
--- /dev/null
+++ b/public/-/emojis/1/chains.png
Binary files differ
diff --git a/public/-/emojis/1/champagne.png b/public/-/emojis/1/champagne.png
new file mode 100644
index 00000000000..285a79a93d0
--- /dev/null
+++ b/public/-/emojis/1/champagne.png
Binary files differ
diff --git a/public/-/emojis/1/champagne_glass.png b/public/-/emojis/1/champagne_glass.png
new file mode 100644
index 00000000000..31937ae9392
--- /dev/null
+++ b/public/-/emojis/1/champagne_glass.png
Binary files differ
diff --git a/public/-/emojis/1/chart.png b/public/-/emojis/1/chart.png
new file mode 100644
index 00000000000..9773f03be22
--- /dev/null
+++ b/public/-/emojis/1/chart.png
Binary files differ
diff --git a/public/-/emojis/1/chart_with_downwards_trend.png b/public/-/emojis/1/chart_with_downwards_trend.png
new file mode 100644
index 00000000000..5222ec72d85
--- /dev/null
+++ b/public/-/emojis/1/chart_with_downwards_trend.png
Binary files differ
diff --git a/public/-/emojis/1/chart_with_upwards_trend.png b/public/-/emojis/1/chart_with_upwards_trend.png
new file mode 100644
index 00000000000..f13cfcf9956
--- /dev/null
+++ b/public/-/emojis/1/chart_with_upwards_trend.png
Binary files differ
diff --git a/public/-/emojis/1/checkered_flag.png b/public/-/emojis/1/checkered_flag.png
new file mode 100644
index 00000000000..5a71eecb89b
--- /dev/null
+++ b/public/-/emojis/1/checkered_flag.png
Binary files differ
diff --git a/public/-/emojis/1/cheese.png b/public/-/emojis/1/cheese.png
new file mode 100644
index 00000000000..00e99762286
--- /dev/null
+++ b/public/-/emojis/1/cheese.png
Binary files differ
diff --git a/public/-/emojis/1/cherries.png b/public/-/emojis/1/cherries.png
new file mode 100644
index 00000000000..9b10cbaac5e
--- /dev/null
+++ b/public/-/emojis/1/cherries.png
Binary files differ
diff --git a/public/-/emojis/1/cherry_blossom.png b/public/-/emojis/1/cherry_blossom.png
new file mode 100644
index 00000000000..282f3e7bc81
--- /dev/null
+++ b/public/-/emojis/1/cherry_blossom.png
Binary files differ
diff --git a/public/-/emojis/1/chestnut.png b/public/-/emojis/1/chestnut.png
new file mode 100644
index 00000000000..e9fb40468ed
--- /dev/null
+++ b/public/-/emojis/1/chestnut.png
Binary files differ
diff --git a/public/-/emojis/1/chicken.png b/public/-/emojis/1/chicken.png
new file mode 100644
index 00000000000..9a6992e55ba
--- /dev/null
+++ b/public/-/emojis/1/chicken.png
Binary files differ
diff --git a/public/-/emojis/1/children_crossing.png b/public/-/emojis/1/children_crossing.png
new file mode 100644
index 00000000000..fa4c091c7c3
--- /dev/null
+++ b/public/-/emojis/1/children_crossing.png
Binary files differ
diff --git a/public/-/emojis/1/chipmunk.png b/public/-/emojis/1/chipmunk.png
new file mode 100644
index 00000000000..2aac560cb22
--- /dev/null
+++ b/public/-/emojis/1/chipmunk.png
Binary files differ
diff --git a/public/-/emojis/1/chocolate_bar.png b/public/-/emojis/1/chocolate_bar.png
new file mode 100644
index 00000000000..318bbd40ef9
--- /dev/null
+++ b/public/-/emojis/1/chocolate_bar.png
Binary files differ
diff --git a/public/-/emojis/1/christmas_tree.png b/public/-/emojis/1/christmas_tree.png
new file mode 100644
index 00000000000..4197d37a52b
--- /dev/null
+++ b/public/-/emojis/1/christmas_tree.png
Binary files differ
diff --git a/public/-/emojis/1/church.png b/public/-/emojis/1/church.png
new file mode 100644
index 00000000000..8242fd272b3
--- /dev/null
+++ b/public/-/emojis/1/church.png
Binary files differ
diff --git a/public/-/emojis/1/cinema.png b/public/-/emojis/1/cinema.png
new file mode 100644
index 00000000000..65f27b386f2
--- /dev/null
+++ b/public/-/emojis/1/cinema.png
Binary files differ
diff --git a/public/-/emojis/1/circus_tent.png b/public/-/emojis/1/circus_tent.png
new file mode 100644
index 00000000000..b0379775b12
--- /dev/null
+++ b/public/-/emojis/1/circus_tent.png
Binary files differ
diff --git a/public/-/emojis/1/city_dusk.png b/public/-/emojis/1/city_dusk.png
new file mode 100644
index 00000000000..80cdff7cf5d
--- /dev/null
+++ b/public/-/emojis/1/city_dusk.png
Binary files differ
diff --git a/public/-/emojis/1/city_sunset.png b/public/-/emojis/1/city_sunset.png
new file mode 100644
index 00000000000..7cded0ba55b
--- /dev/null
+++ b/public/-/emojis/1/city_sunset.png
Binary files differ
diff --git a/public/-/emojis/1/cityscape.png b/public/-/emojis/1/cityscape.png
new file mode 100644
index 00000000000..d7b9844a0b4
--- /dev/null
+++ b/public/-/emojis/1/cityscape.png
Binary files differ
diff --git a/public/-/emojis/1/cl.png b/public/-/emojis/1/cl.png
new file mode 100644
index 00000000000..8b01b4343e2
--- /dev/null
+++ b/public/-/emojis/1/cl.png
Binary files differ
diff --git a/public/-/emojis/1/clap.png b/public/-/emojis/1/clap.png
new file mode 100644
index 00000000000..b0ffe928920
--- /dev/null
+++ b/public/-/emojis/1/clap.png
Binary files differ
diff --git a/public/-/emojis/1/clap_tone1.png b/public/-/emojis/1/clap_tone1.png
new file mode 100644
index 00000000000..de4bc837b96
--- /dev/null
+++ b/public/-/emojis/1/clap_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/clap_tone2.png b/public/-/emojis/1/clap_tone2.png
new file mode 100644
index 00000000000..1323de775ba
--- /dev/null
+++ b/public/-/emojis/1/clap_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/clap_tone3.png b/public/-/emojis/1/clap_tone3.png
new file mode 100644
index 00000000000..d448ca19dde
--- /dev/null
+++ b/public/-/emojis/1/clap_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/clap_tone4.png b/public/-/emojis/1/clap_tone4.png
new file mode 100644
index 00000000000..c49f44ee91d
--- /dev/null
+++ b/public/-/emojis/1/clap_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/clap_tone5.png b/public/-/emojis/1/clap_tone5.png
new file mode 100644
index 00000000000..29ee9bdf37c
--- /dev/null
+++ b/public/-/emojis/1/clap_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/clapper.png b/public/-/emojis/1/clapper.png
new file mode 100644
index 00000000000..81390883111
--- /dev/null
+++ b/public/-/emojis/1/clapper.png
Binary files differ
diff --git a/public/-/emojis/1/classical_building.png b/public/-/emojis/1/classical_building.png
new file mode 100644
index 00000000000..de7b559daaf
--- /dev/null
+++ b/public/-/emojis/1/classical_building.png
Binary files differ
diff --git a/public/-/emojis/1/clipboard.png b/public/-/emojis/1/clipboard.png
new file mode 100644
index 00000000000..7edcfc52509
--- /dev/null
+++ b/public/-/emojis/1/clipboard.png
Binary files differ
diff --git a/public/-/emojis/1/clock.png b/public/-/emojis/1/clock.png
new file mode 100644
index 00000000000..ffdb451e3a8
--- /dev/null
+++ b/public/-/emojis/1/clock.png
Binary files differ
diff --git a/public/-/emojis/1/clock1.png b/public/-/emojis/1/clock1.png
new file mode 100644
index 00000000000..d6e34941f23
--- /dev/null
+++ b/public/-/emojis/1/clock1.png
Binary files differ
diff --git a/public/-/emojis/1/clock10.png b/public/-/emojis/1/clock10.png
new file mode 100644
index 00000000000..e62b245cdbe
--- /dev/null
+++ b/public/-/emojis/1/clock10.png
Binary files differ
diff --git a/public/-/emojis/1/clock1030.png b/public/-/emojis/1/clock1030.png
new file mode 100644
index 00000000000..0802b3c65b9
--- /dev/null
+++ b/public/-/emojis/1/clock1030.png
Binary files differ
diff --git a/public/-/emojis/1/clock11.png b/public/-/emojis/1/clock11.png
new file mode 100644
index 00000000000..0983345273b
--- /dev/null
+++ b/public/-/emojis/1/clock11.png
Binary files differ
diff --git a/public/-/emojis/1/clock1130.png b/public/-/emojis/1/clock1130.png
new file mode 100644
index 00000000000..d970d03b809
--- /dev/null
+++ b/public/-/emojis/1/clock1130.png
Binary files differ
diff --git a/public/-/emojis/1/clock12.png b/public/-/emojis/1/clock12.png
new file mode 100644
index 00000000000..e61caa4b3e2
--- /dev/null
+++ b/public/-/emojis/1/clock12.png
Binary files differ
diff --git a/public/-/emojis/1/clock1230.png b/public/-/emojis/1/clock1230.png
new file mode 100644
index 00000000000..f2b1d261721
--- /dev/null
+++ b/public/-/emojis/1/clock1230.png
Binary files differ
diff --git a/public/-/emojis/1/clock130.png b/public/-/emojis/1/clock130.png
new file mode 100644
index 00000000000..86b7689b84e
--- /dev/null
+++ b/public/-/emojis/1/clock130.png
Binary files differ
diff --git a/public/-/emojis/1/clock2.png b/public/-/emojis/1/clock2.png
new file mode 100644
index 00000000000..a54253d7d57
--- /dev/null
+++ b/public/-/emojis/1/clock2.png
Binary files differ
diff --git a/public/-/emojis/1/clock230.png b/public/-/emojis/1/clock230.png
new file mode 100644
index 00000000000..7a787e018e6
--- /dev/null
+++ b/public/-/emojis/1/clock230.png
Binary files differ
diff --git a/public/-/emojis/1/clock3.png b/public/-/emojis/1/clock3.png
new file mode 100644
index 00000000000..27ec4b1f514
--- /dev/null
+++ b/public/-/emojis/1/clock3.png
Binary files differ
diff --git a/public/-/emojis/1/clock330.png b/public/-/emojis/1/clock330.png
new file mode 100644
index 00000000000..c6860395cec
--- /dev/null
+++ b/public/-/emojis/1/clock330.png
Binary files differ
diff --git a/public/-/emojis/1/clock4.png b/public/-/emojis/1/clock4.png
new file mode 100644
index 00000000000..60a1ef4cc13
--- /dev/null
+++ b/public/-/emojis/1/clock4.png
Binary files differ
diff --git a/public/-/emojis/1/clock430.png b/public/-/emojis/1/clock430.png
new file mode 100644
index 00000000000..3c05b362122
--- /dev/null
+++ b/public/-/emojis/1/clock430.png
Binary files differ
diff --git a/public/-/emojis/1/clock5.png b/public/-/emojis/1/clock5.png
new file mode 100644
index 00000000000..c9382d1e094
--- /dev/null
+++ b/public/-/emojis/1/clock5.png
Binary files differ
diff --git a/public/-/emojis/1/clock530.png b/public/-/emojis/1/clock530.png
new file mode 100644
index 00000000000..c21fa926db2
--- /dev/null
+++ b/public/-/emojis/1/clock530.png
Binary files differ
diff --git a/public/-/emojis/1/clock6.png b/public/-/emojis/1/clock6.png
new file mode 100644
index 00000000000..8fd5d3f5bd7
--- /dev/null
+++ b/public/-/emojis/1/clock6.png
Binary files differ
diff --git a/public/-/emojis/1/clock630.png b/public/-/emojis/1/clock630.png
new file mode 100644
index 00000000000..2aec87fefcf
--- /dev/null
+++ b/public/-/emojis/1/clock630.png
Binary files differ
diff --git a/public/-/emojis/1/clock7.png b/public/-/emojis/1/clock7.png
new file mode 100644
index 00000000000..8c7084036f2
--- /dev/null
+++ b/public/-/emojis/1/clock7.png
Binary files differ
diff --git a/public/-/emojis/1/clock730.png b/public/-/emojis/1/clock730.png
new file mode 100644
index 00000000000..f7a1135e03f
--- /dev/null
+++ b/public/-/emojis/1/clock730.png
Binary files differ
diff --git a/public/-/emojis/1/clock8.png b/public/-/emojis/1/clock8.png
new file mode 100644
index 00000000000..fcddf722e95
--- /dev/null
+++ b/public/-/emojis/1/clock8.png
Binary files differ
diff --git a/public/-/emojis/1/clock830.png b/public/-/emojis/1/clock830.png
new file mode 100644
index 00000000000..799b4aebc08
--- /dev/null
+++ b/public/-/emojis/1/clock830.png
Binary files differ
diff --git a/public/-/emojis/1/clock9.png b/public/-/emojis/1/clock9.png
new file mode 100644
index 00000000000..dfbe0117981
--- /dev/null
+++ b/public/-/emojis/1/clock9.png
Binary files differ
diff --git a/public/-/emojis/1/clock930.png b/public/-/emojis/1/clock930.png
new file mode 100644
index 00000000000..4a2092ee6f0
--- /dev/null
+++ b/public/-/emojis/1/clock930.png
Binary files differ
diff --git a/public/-/emojis/1/closed_book.png b/public/-/emojis/1/closed_book.png
new file mode 100644
index 00000000000..6395cf2151e
--- /dev/null
+++ b/public/-/emojis/1/closed_book.png
Binary files differ
diff --git a/public/-/emojis/1/closed_lock_with_key.png b/public/-/emojis/1/closed_lock_with_key.png
new file mode 100644
index 00000000000..1c1cd5d0741
--- /dev/null
+++ b/public/-/emojis/1/closed_lock_with_key.png
Binary files differ
diff --git a/public/-/emojis/1/closed_umbrella.png b/public/-/emojis/1/closed_umbrella.png
new file mode 100644
index 00000000000..ecefba9e446
--- /dev/null
+++ b/public/-/emojis/1/closed_umbrella.png
Binary files differ
diff --git a/public/-/emojis/1/cloud.png b/public/-/emojis/1/cloud.png
new file mode 100644
index 00000000000..5b4f57f77ba
--- /dev/null
+++ b/public/-/emojis/1/cloud.png
Binary files differ
diff --git a/public/-/emojis/1/cloud_lightning.png b/public/-/emojis/1/cloud_lightning.png
new file mode 100644
index 00000000000..0831e88aa31
--- /dev/null
+++ b/public/-/emojis/1/cloud_lightning.png
Binary files differ
diff --git a/public/-/emojis/1/cloud_rain.png b/public/-/emojis/1/cloud_rain.png
new file mode 100644
index 00000000000..385685e0512
--- /dev/null
+++ b/public/-/emojis/1/cloud_rain.png
Binary files differ
diff --git a/public/-/emojis/1/cloud_snow.png b/public/-/emojis/1/cloud_snow.png
new file mode 100644
index 00000000000..9720384eb99
--- /dev/null
+++ b/public/-/emojis/1/cloud_snow.png
Binary files differ
diff --git a/public/-/emojis/1/cloud_tornado.png b/public/-/emojis/1/cloud_tornado.png
new file mode 100644
index 00000000000..4821c89da1e
--- /dev/null
+++ b/public/-/emojis/1/cloud_tornado.png
Binary files differ
diff --git a/public/-/emojis/1/clown.png b/public/-/emojis/1/clown.png
new file mode 100644
index 00000000000..02b7ff70049
--- /dev/null
+++ b/public/-/emojis/1/clown.png
Binary files differ
diff --git a/public/-/emojis/1/clubs.png b/public/-/emojis/1/clubs.png
new file mode 100644
index 00000000000..4f2abf791ca
--- /dev/null
+++ b/public/-/emojis/1/clubs.png
Binary files differ
diff --git a/public/-/emojis/1/cocktail.png b/public/-/emojis/1/cocktail.png
new file mode 100644
index 00000000000..2e50c57e98d
--- /dev/null
+++ b/public/-/emojis/1/cocktail.png
Binary files differ
diff --git a/public/-/emojis/1/coffee.png b/public/-/emojis/1/coffee.png
new file mode 100644
index 00000000000..553061471b1
--- /dev/null
+++ b/public/-/emojis/1/coffee.png
Binary files differ
diff --git a/public/-/emojis/1/coffin.png b/public/-/emojis/1/coffin.png
new file mode 100644
index 00000000000..fb2932aa5f6
--- /dev/null
+++ b/public/-/emojis/1/coffin.png
Binary files differ
diff --git a/public/-/emojis/1/cold_sweat.png b/public/-/emojis/1/cold_sweat.png
new file mode 100644
index 00000000000..85b2231bbf6
--- /dev/null
+++ b/public/-/emojis/1/cold_sweat.png
Binary files differ
diff --git a/public/-/emojis/1/comet.png b/public/-/emojis/1/comet.png
new file mode 100644
index 00000000000..a99751f79be
--- /dev/null
+++ b/public/-/emojis/1/comet.png
Binary files differ
diff --git a/public/-/emojis/1/compression.png b/public/-/emojis/1/compression.png
new file mode 100644
index 00000000000..d7eda7f362a
--- /dev/null
+++ b/public/-/emojis/1/compression.png
Binary files differ
diff --git a/public/-/emojis/1/computer.png b/public/-/emojis/1/computer.png
new file mode 100644
index 00000000000..c1fee27e3a9
--- /dev/null
+++ b/public/-/emojis/1/computer.png
Binary files differ
diff --git a/public/-/emojis/1/confetti_ball.png b/public/-/emojis/1/confetti_ball.png
new file mode 100644
index 00000000000..ba4fd9b12be
--- /dev/null
+++ b/public/-/emojis/1/confetti_ball.png
Binary files differ
diff --git a/public/-/emojis/1/confounded.png b/public/-/emojis/1/confounded.png
new file mode 100644
index 00000000000..aa4b29e9375
--- /dev/null
+++ b/public/-/emojis/1/confounded.png
Binary files differ
diff --git a/public/-/emojis/1/confused.png b/public/-/emojis/1/confused.png
new file mode 100644
index 00000000000..502b6bf0e0b
--- /dev/null
+++ b/public/-/emojis/1/confused.png
Binary files differ
diff --git a/public/-/emojis/1/congratulations.png b/public/-/emojis/1/congratulations.png
new file mode 100644
index 00000000000..ba8c89d95ee
--- /dev/null
+++ b/public/-/emojis/1/congratulations.png
Binary files differ
diff --git a/public/-/emojis/1/construction.png b/public/-/emojis/1/construction.png
new file mode 100644
index 00000000000..ef8db5f471c
--- /dev/null
+++ b/public/-/emojis/1/construction.png
Binary files differ
diff --git a/public/-/emojis/1/construction_site.png b/public/-/emojis/1/construction_site.png
new file mode 100644
index 00000000000..8206a20f63f
--- /dev/null
+++ b/public/-/emojis/1/construction_site.png
Binary files differ
diff --git a/public/-/emojis/1/construction_worker.png b/public/-/emojis/1/construction_worker.png
new file mode 100644
index 00000000000..a9970a89005
--- /dev/null
+++ b/public/-/emojis/1/construction_worker.png
Binary files differ
diff --git a/public/-/emojis/1/construction_worker_tone1.png b/public/-/emojis/1/construction_worker_tone1.png
new file mode 100644
index 00000000000..2f24a2bab24
--- /dev/null
+++ b/public/-/emojis/1/construction_worker_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/construction_worker_tone2.png b/public/-/emojis/1/construction_worker_tone2.png
new file mode 100644
index 00000000000..93c8fec5a75
--- /dev/null
+++ b/public/-/emojis/1/construction_worker_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/construction_worker_tone3.png b/public/-/emojis/1/construction_worker_tone3.png
new file mode 100644
index 00000000000..abc1f2af2e0
--- /dev/null
+++ b/public/-/emojis/1/construction_worker_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/construction_worker_tone4.png b/public/-/emojis/1/construction_worker_tone4.png
new file mode 100644
index 00000000000..eed83289aeb
--- /dev/null
+++ b/public/-/emojis/1/construction_worker_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/construction_worker_tone5.png b/public/-/emojis/1/construction_worker_tone5.png
new file mode 100644
index 00000000000..acbb220b8bb
--- /dev/null
+++ b/public/-/emojis/1/construction_worker_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/control_knobs.png b/public/-/emojis/1/control_knobs.png
new file mode 100644
index 00000000000..6635ac93b50
--- /dev/null
+++ b/public/-/emojis/1/control_knobs.png
Binary files differ
diff --git a/public/-/emojis/1/convenience_store.png b/public/-/emojis/1/convenience_store.png
new file mode 100644
index 00000000000..26b53b5669e
--- /dev/null
+++ b/public/-/emojis/1/convenience_store.png
Binary files differ
diff --git a/public/-/emojis/1/cookie.png b/public/-/emojis/1/cookie.png
new file mode 100644
index 00000000000..1b6bcb1554f
--- /dev/null
+++ b/public/-/emojis/1/cookie.png
Binary files differ
diff --git a/public/-/emojis/1/cooking.png b/public/-/emojis/1/cooking.png
new file mode 100644
index 00000000000..918c980577a
--- /dev/null
+++ b/public/-/emojis/1/cooking.png
Binary files differ
diff --git a/public/-/emojis/1/cool.png b/public/-/emojis/1/cool.png
new file mode 100644
index 00000000000..74674978d00
--- /dev/null
+++ b/public/-/emojis/1/cool.png
Binary files differ
diff --git a/public/-/emojis/1/cop.png b/public/-/emojis/1/cop.png
new file mode 100644
index 00000000000..0b16d7c17b7
--- /dev/null
+++ b/public/-/emojis/1/cop.png
Binary files differ
diff --git a/public/-/emojis/1/cop_tone1.png b/public/-/emojis/1/cop_tone1.png
new file mode 100644
index 00000000000..6ccba3879dc
--- /dev/null
+++ b/public/-/emojis/1/cop_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/cop_tone2.png b/public/-/emojis/1/cop_tone2.png
new file mode 100644
index 00000000000..7814ea9f52d
--- /dev/null
+++ b/public/-/emojis/1/cop_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/cop_tone3.png b/public/-/emojis/1/cop_tone3.png
new file mode 100644
index 00000000000..d78e88ec872
--- /dev/null
+++ b/public/-/emojis/1/cop_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/cop_tone4.png b/public/-/emojis/1/cop_tone4.png
new file mode 100644
index 00000000000..2e13c508315
--- /dev/null
+++ b/public/-/emojis/1/cop_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/cop_tone5.png b/public/-/emojis/1/cop_tone5.png
new file mode 100644
index 00000000000..2980d61cc2e
--- /dev/null
+++ b/public/-/emojis/1/cop_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/copyright.png b/public/-/emojis/1/copyright.png
new file mode 100644
index 00000000000..6b9a6adbfd2
--- /dev/null
+++ b/public/-/emojis/1/copyright.png
Binary files differ
diff --git a/public/-/emojis/1/corn.png b/public/-/emojis/1/corn.png
new file mode 100644
index 00000000000..36e20127931
--- /dev/null
+++ b/public/-/emojis/1/corn.png
Binary files differ
diff --git a/public/-/emojis/1/couch.png b/public/-/emojis/1/couch.png
new file mode 100644
index 00000000000..27b19b13bb0
--- /dev/null
+++ b/public/-/emojis/1/couch.png
Binary files differ
diff --git a/public/-/emojis/1/couple.png b/public/-/emojis/1/couple.png
new file mode 100644
index 00000000000..960323f3c16
--- /dev/null
+++ b/public/-/emojis/1/couple.png
Binary files differ
diff --git a/public/-/emojis/1/couple_mm.png b/public/-/emojis/1/couple_mm.png
new file mode 100644
index 00000000000..8759fa5db87
--- /dev/null
+++ b/public/-/emojis/1/couple_mm.png
Binary files differ
diff --git a/public/-/emojis/1/couple_with_heart.png b/public/-/emojis/1/couple_with_heart.png
new file mode 100644
index 00000000000..62111601b36
--- /dev/null
+++ b/public/-/emojis/1/couple_with_heart.png
Binary files differ
diff --git a/public/-/emojis/1/couple_ww.png b/public/-/emojis/1/couple_ww.png
new file mode 100644
index 00000000000..08fdabcdc5c
--- /dev/null
+++ b/public/-/emojis/1/couple_ww.png
Binary files differ
diff --git a/public/-/emojis/1/couplekiss.png b/public/-/emojis/1/couplekiss.png
new file mode 100644
index 00000000000..9aa519da9e8
--- /dev/null
+++ b/public/-/emojis/1/couplekiss.png
Binary files differ
diff --git a/public/-/emojis/1/cow.png b/public/-/emojis/1/cow.png
new file mode 100644
index 00000000000..718a3986d64
--- /dev/null
+++ b/public/-/emojis/1/cow.png
Binary files differ
diff --git a/public/-/emojis/1/cow2.png b/public/-/emojis/1/cow2.png
new file mode 100644
index 00000000000..4d0ca534ff1
--- /dev/null
+++ b/public/-/emojis/1/cow2.png
Binary files differ
diff --git a/public/-/emojis/1/cowboy.png b/public/-/emojis/1/cowboy.png
new file mode 100644
index 00000000000..70dd5d0d9d1
--- /dev/null
+++ b/public/-/emojis/1/cowboy.png
Binary files differ
diff --git a/public/-/emojis/1/crab.png b/public/-/emojis/1/crab.png
new file mode 100644
index 00000000000..19f3047ab61
--- /dev/null
+++ b/public/-/emojis/1/crab.png
Binary files differ
diff --git a/public/-/emojis/1/crayon.png b/public/-/emojis/1/crayon.png
new file mode 100644
index 00000000000..8d7b427aaa3
--- /dev/null
+++ b/public/-/emojis/1/crayon.png
Binary files differ
diff --git a/public/-/emojis/1/credit_card.png b/public/-/emojis/1/credit_card.png
new file mode 100644
index 00000000000..372777d5c61
--- /dev/null
+++ b/public/-/emojis/1/credit_card.png
Binary files differ
diff --git a/public/-/emojis/1/crescent_moon.png b/public/-/emojis/1/crescent_moon.png
new file mode 100644
index 00000000000..765420ecec7
--- /dev/null
+++ b/public/-/emojis/1/crescent_moon.png
Binary files differ
diff --git a/public/-/emojis/1/cricket.png b/public/-/emojis/1/cricket.png
new file mode 100644
index 00000000000..d602294a2cd
--- /dev/null
+++ b/public/-/emojis/1/cricket.png
Binary files differ
diff --git a/public/-/emojis/1/crocodile.png b/public/-/emojis/1/crocodile.png
new file mode 100644
index 00000000000..3005c46f176
--- /dev/null
+++ b/public/-/emojis/1/crocodile.png
Binary files differ
diff --git a/public/-/emojis/1/croissant.png b/public/-/emojis/1/croissant.png
new file mode 100644
index 00000000000..fb33feb1a38
--- /dev/null
+++ b/public/-/emojis/1/croissant.png
Binary files differ
diff --git a/public/-/emojis/1/cross.png b/public/-/emojis/1/cross.png
new file mode 100644
index 00000000000..42b10e82257
--- /dev/null
+++ b/public/-/emojis/1/cross.png
Binary files differ
diff --git a/public/-/emojis/1/crossed_flags.png b/public/-/emojis/1/crossed_flags.png
new file mode 100644
index 00000000000..273bd0f0fe5
--- /dev/null
+++ b/public/-/emojis/1/crossed_flags.png
Binary files differ
diff --git a/public/-/emojis/1/crossed_swords.png b/public/-/emojis/1/crossed_swords.png
new file mode 100644
index 00000000000..907e9607134
--- /dev/null
+++ b/public/-/emojis/1/crossed_swords.png
Binary files differ
diff --git a/public/-/emojis/1/crown.png b/public/-/emojis/1/crown.png
new file mode 100644
index 00000000000..93b82d92f04
--- /dev/null
+++ b/public/-/emojis/1/crown.png
Binary files differ
diff --git a/public/-/emojis/1/cruise_ship.png b/public/-/emojis/1/cruise_ship.png
new file mode 100644
index 00000000000..19d4acbe40c
--- /dev/null
+++ b/public/-/emojis/1/cruise_ship.png
Binary files differ
diff --git a/public/-/emojis/1/cry.png b/public/-/emojis/1/cry.png
new file mode 100644
index 00000000000..b7877f8a173
--- /dev/null
+++ b/public/-/emojis/1/cry.png
Binary files differ
diff --git a/public/-/emojis/1/crying_cat_face.png b/public/-/emojis/1/crying_cat_face.png
new file mode 100644
index 00000000000..b4f49715e00
--- /dev/null
+++ b/public/-/emojis/1/crying_cat_face.png
Binary files differ
diff --git a/public/-/emojis/1/crystal_ball.png b/public/-/emojis/1/crystal_ball.png
new file mode 100644
index 00000000000..485d5c888f1
--- /dev/null
+++ b/public/-/emojis/1/crystal_ball.png
Binary files differ
diff --git a/public/-/emojis/1/cucumber.png b/public/-/emojis/1/cucumber.png
new file mode 100644
index 00000000000..500807059d2
--- /dev/null
+++ b/public/-/emojis/1/cucumber.png
Binary files differ
diff --git a/public/-/emojis/1/cupid.png b/public/-/emojis/1/cupid.png
new file mode 100644
index 00000000000..2df0078ddd1
--- /dev/null
+++ b/public/-/emojis/1/cupid.png
Binary files differ
diff --git a/public/-/emojis/1/curly_loop.png b/public/-/emojis/1/curly_loop.png
new file mode 100644
index 00000000000..440aa56d50e
--- /dev/null
+++ b/public/-/emojis/1/curly_loop.png
Binary files differ
diff --git a/public/-/emojis/1/currency_exchange.png b/public/-/emojis/1/currency_exchange.png
new file mode 100644
index 00000000000..4d46c6050e7
--- /dev/null
+++ b/public/-/emojis/1/currency_exchange.png
Binary files differ
diff --git a/public/-/emojis/1/curry.png b/public/-/emojis/1/curry.png
new file mode 100644
index 00000000000..69657ca8103
--- /dev/null
+++ b/public/-/emojis/1/curry.png
Binary files differ
diff --git a/public/-/emojis/1/custard.png b/public/-/emojis/1/custard.png
new file mode 100644
index 00000000000..fa3df67b8f6
--- /dev/null
+++ b/public/-/emojis/1/custard.png
Binary files differ
diff --git a/public/-/emojis/1/customs.png b/public/-/emojis/1/customs.png
new file mode 100644
index 00000000000..21b7ce2c69e
--- /dev/null
+++ b/public/-/emojis/1/customs.png
Binary files differ
diff --git a/public/-/emojis/1/cyclone.png b/public/-/emojis/1/cyclone.png
new file mode 100644
index 00000000000..ff00b1afe70
--- /dev/null
+++ b/public/-/emojis/1/cyclone.png
Binary files differ
diff --git a/public/-/emojis/1/dagger.png b/public/-/emojis/1/dagger.png
new file mode 100644
index 00000000000..66e97b0aa25
--- /dev/null
+++ b/public/-/emojis/1/dagger.png
Binary files differ
diff --git a/public/-/emojis/1/dancer.png b/public/-/emojis/1/dancer.png
new file mode 100644
index 00000000000..04b166991cb
--- /dev/null
+++ b/public/-/emojis/1/dancer.png
Binary files differ
diff --git a/public/-/emojis/1/dancer_tone1.png b/public/-/emojis/1/dancer_tone1.png
new file mode 100644
index 00000000000..2c7b11c3a6e
--- /dev/null
+++ b/public/-/emojis/1/dancer_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/dancer_tone2.png b/public/-/emojis/1/dancer_tone2.png
new file mode 100644
index 00000000000..cb04b1f907e
--- /dev/null
+++ b/public/-/emojis/1/dancer_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/dancer_tone3.png b/public/-/emojis/1/dancer_tone3.png
new file mode 100644
index 00000000000..98c5bca7b64
--- /dev/null
+++ b/public/-/emojis/1/dancer_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/dancer_tone4.png b/public/-/emojis/1/dancer_tone4.png
new file mode 100644
index 00000000000..fdb1e00cbba
--- /dev/null
+++ b/public/-/emojis/1/dancer_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/dancer_tone5.png b/public/-/emojis/1/dancer_tone5.png
new file mode 100644
index 00000000000..0e34e0e23f0
--- /dev/null
+++ b/public/-/emojis/1/dancer_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/dancers.png b/public/-/emojis/1/dancers.png
new file mode 100644
index 00000000000..67e6ffacb76
--- /dev/null
+++ b/public/-/emojis/1/dancers.png
Binary files differ
diff --git a/public/-/emojis/1/dango.png b/public/-/emojis/1/dango.png
new file mode 100644
index 00000000000..f73f37b01c7
--- /dev/null
+++ b/public/-/emojis/1/dango.png
Binary files differ
diff --git a/public/-/emojis/1/dark_sunglasses.png b/public/-/emojis/1/dark_sunglasses.png
new file mode 100644
index 00000000000..b1b6db0acff
--- /dev/null
+++ b/public/-/emojis/1/dark_sunglasses.png
Binary files differ
diff --git a/public/-/emojis/1/dart.png b/public/-/emojis/1/dart.png
new file mode 100644
index 00000000000..f6704aeb8ba
--- /dev/null
+++ b/public/-/emojis/1/dart.png
Binary files differ
diff --git a/public/-/emojis/1/dash.png b/public/-/emojis/1/dash.png
new file mode 100644
index 00000000000..064b8525c12
--- /dev/null
+++ b/public/-/emojis/1/dash.png
Binary files differ
diff --git a/public/-/emojis/1/date.png b/public/-/emojis/1/date.png
new file mode 100644
index 00000000000..f05b3da97b8
--- /dev/null
+++ b/public/-/emojis/1/date.png
Binary files differ
diff --git a/public/-/emojis/1/deciduous_tree.png b/public/-/emojis/1/deciduous_tree.png
new file mode 100644
index 00000000000..785fc1c30ea
--- /dev/null
+++ b/public/-/emojis/1/deciduous_tree.png
Binary files differ
diff --git a/public/-/emojis/1/deer.png b/public/-/emojis/1/deer.png
new file mode 100644
index 00000000000..d8698195ff0
--- /dev/null
+++ b/public/-/emojis/1/deer.png
Binary files differ
diff --git a/public/-/emojis/1/department_store.png b/public/-/emojis/1/department_store.png
new file mode 100644
index 00000000000..58867c7a6e1
--- /dev/null
+++ b/public/-/emojis/1/department_store.png
Binary files differ
diff --git a/public/-/emojis/1/desert.png b/public/-/emojis/1/desert.png
new file mode 100644
index 00000000000..e9966ff8c65
--- /dev/null
+++ b/public/-/emojis/1/desert.png
Binary files differ
diff --git a/public/-/emojis/1/desktop.png b/public/-/emojis/1/desktop.png
new file mode 100644
index 00000000000..909bd42b5e1
--- /dev/null
+++ b/public/-/emojis/1/desktop.png
Binary files differ
diff --git a/public/-/emojis/1/diamond_shape_with_a_dot_inside.png b/public/-/emojis/1/diamond_shape_with_a_dot_inside.png
new file mode 100644
index 00000000000..2a22a26d1e2
--- /dev/null
+++ b/public/-/emojis/1/diamond_shape_with_a_dot_inside.png
Binary files differ
diff --git a/public/-/emojis/1/diamonds.png b/public/-/emojis/1/diamonds.png
new file mode 100644
index 00000000000..1f25f51f97a
--- /dev/null
+++ b/public/-/emojis/1/diamonds.png
Binary files differ
diff --git a/public/-/emojis/1/disappointed.png b/public/-/emojis/1/disappointed.png
new file mode 100644
index 00000000000..efe4e67e23c
--- /dev/null
+++ b/public/-/emojis/1/disappointed.png
Binary files differ
diff --git a/public/-/emojis/1/disappointed_relieved.png b/public/-/emojis/1/disappointed_relieved.png
new file mode 100644
index 00000000000..aef864d2b3d
--- /dev/null
+++ b/public/-/emojis/1/disappointed_relieved.png
Binary files differ
diff --git a/public/-/emojis/1/dividers.png b/public/-/emojis/1/dividers.png
new file mode 100644
index 00000000000..46a7e403f9d
--- /dev/null
+++ b/public/-/emojis/1/dividers.png
Binary files differ
diff --git a/public/-/emojis/1/dizzy.png b/public/-/emojis/1/dizzy.png
new file mode 100644
index 00000000000..85f52efad24
--- /dev/null
+++ b/public/-/emojis/1/dizzy.png
Binary files differ
diff --git a/public/-/emojis/1/dizzy_face.png b/public/-/emojis/1/dizzy_face.png
new file mode 100644
index 00000000000..3120316ab5e
--- /dev/null
+++ b/public/-/emojis/1/dizzy_face.png
Binary files differ
diff --git a/public/-/emojis/1/do_not_litter.png b/public/-/emojis/1/do_not_litter.png
new file mode 100644
index 00000000000..341d2575f4f
--- /dev/null
+++ b/public/-/emojis/1/do_not_litter.png
Binary files differ
diff --git a/public/-/emojis/1/dog.png b/public/-/emojis/1/dog.png
new file mode 100644
index 00000000000..281b81d58bd
--- /dev/null
+++ b/public/-/emojis/1/dog.png
Binary files differ
diff --git a/public/-/emojis/1/dog2.png b/public/-/emojis/1/dog2.png
new file mode 100644
index 00000000000..976143dbdbe
--- /dev/null
+++ b/public/-/emojis/1/dog2.png
Binary files differ
diff --git a/public/-/emojis/1/dollar.png b/public/-/emojis/1/dollar.png
new file mode 100644
index 00000000000..a9904c28293
--- /dev/null
+++ b/public/-/emojis/1/dollar.png
Binary files differ
diff --git a/public/-/emojis/1/dolls.png b/public/-/emojis/1/dolls.png
new file mode 100644
index 00000000000..10955615110
--- /dev/null
+++ b/public/-/emojis/1/dolls.png
Binary files differ
diff --git a/public/-/emojis/1/dolphin.png b/public/-/emojis/1/dolphin.png
new file mode 100644
index 00000000000..81434809003
--- /dev/null
+++ b/public/-/emojis/1/dolphin.png
Binary files differ
diff --git a/public/-/emojis/1/door.png b/public/-/emojis/1/door.png
new file mode 100644
index 00000000000..36ae3e27494
--- /dev/null
+++ b/public/-/emojis/1/door.png
Binary files differ
diff --git a/public/-/emojis/1/doughnut.png b/public/-/emojis/1/doughnut.png
new file mode 100644
index 00000000000..0ca4cd0bde8
--- /dev/null
+++ b/public/-/emojis/1/doughnut.png
Binary files differ
diff --git a/public/-/emojis/1/dove.png b/public/-/emojis/1/dove.png
new file mode 100644
index 00000000000..9580c4917d7
--- /dev/null
+++ b/public/-/emojis/1/dove.png
Binary files differ
diff --git a/public/-/emojis/1/dragon.png b/public/-/emojis/1/dragon.png
new file mode 100644
index 00000000000..d6311cf5429
--- /dev/null
+++ b/public/-/emojis/1/dragon.png
Binary files differ
diff --git a/public/-/emojis/1/dragon_face.png b/public/-/emojis/1/dragon_face.png
new file mode 100644
index 00000000000..3c2720446c6
--- /dev/null
+++ b/public/-/emojis/1/dragon_face.png
Binary files differ
diff --git a/public/-/emojis/1/dress.png b/public/-/emojis/1/dress.png
new file mode 100644
index 00000000000..a697ca5c57d
--- /dev/null
+++ b/public/-/emojis/1/dress.png
Binary files differ
diff --git a/public/-/emojis/1/dromedary_camel.png b/public/-/emojis/1/dromedary_camel.png
new file mode 100644
index 00000000000..5271637c7c4
--- /dev/null
+++ b/public/-/emojis/1/dromedary_camel.png
Binary files differ
diff --git a/public/-/emojis/1/drooling_face.png b/public/-/emojis/1/drooling_face.png
new file mode 100644
index 00000000000..a5460532597
--- /dev/null
+++ b/public/-/emojis/1/drooling_face.png
Binary files differ
diff --git a/public/-/emojis/1/droplet.png b/public/-/emojis/1/droplet.png
new file mode 100644
index 00000000000..71241ec3061
--- /dev/null
+++ b/public/-/emojis/1/droplet.png
Binary files differ
diff --git a/public/-/emojis/1/drum.png b/public/-/emojis/1/drum.png
new file mode 100644
index 00000000000..b038727cc99
--- /dev/null
+++ b/public/-/emojis/1/drum.png
Binary files differ
diff --git a/public/-/emojis/1/duck.png b/public/-/emojis/1/duck.png
new file mode 100644
index 00000000000..74330b77ca3
--- /dev/null
+++ b/public/-/emojis/1/duck.png
Binary files differ
diff --git a/public/-/emojis/1/dvd.png b/public/-/emojis/1/dvd.png
new file mode 100644
index 00000000000..045a6f7a08d
--- /dev/null
+++ b/public/-/emojis/1/dvd.png
Binary files differ
diff --git a/public/-/emojis/1/e-mail.png b/public/-/emojis/1/e-mail.png
new file mode 100644
index 00000000000..d22e654a20b
--- /dev/null
+++ b/public/-/emojis/1/e-mail.png
Binary files differ
diff --git a/public/-/emojis/1/eagle.png b/public/-/emojis/1/eagle.png
new file mode 100644
index 00000000000..4f277debeef
--- /dev/null
+++ b/public/-/emojis/1/eagle.png
Binary files differ
diff --git a/public/-/emojis/1/ear.png b/public/-/emojis/1/ear.png
new file mode 100644
index 00000000000..f84f9ff154a
--- /dev/null
+++ b/public/-/emojis/1/ear.png
Binary files differ
diff --git a/public/-/emojis/1/ear_of_rice.png b/public/-/emojis/1/ear_of_rice.png
new file mode 100644
index 00000000000..3564d9d643a
--- /dev/null
+++ b/public/-/emojis/1/ear_of_rice.png
Binary files differ
diff --git a/public/-/emojis/1/ear_tone1.png b/public/-/emojis/1/ear_tone1.png
new file mode 100644
index 00000000000..d09e1e41996
--- /dev/null
+++ b/public/-/emojis/1/ear_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/ear_tone2.png b/public/-/emojis/1/ear_tone2.png
new file mode 100644
index 00000000000..300d60a9948
--- /dev/null
+++ b/public/-/emojis/1/ear_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/ear_tone3.png b/public/-/emojis/1/ear_tone3.png
new file mode 100644
index 00000000000..2a56eebe445
--- /dev/null
+++ b/public/-/emojis/1/ear_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/ear_tone4.png b/public/-/emojis/1/ear_tone4.png
new file mode 100644
index 00000000000..bd270f7763e
--- /dev/null
+++ b/public/-/emojis/1/ear_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/ear_tone5.png b/public/-/emojis/1/ear_tone5.png
new file mode 100644
index 00000000000..b96bb441dff
--- /dev/null
+++ b/public/-/emojis/1/ear_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/earth_africa.png b/public/-/emojis/1/earth_africa.png
new file mode 100644
index 00000000000..66c3348c23a
--- /dev/null
+++ b/public/-/emojis/1/earth_africa.png
Binary files differ
diff --git a/public/-/emojis/1/earth_americas.png b/public/-/emojis/1/earth_americas.png
new file mode 100644
index 00000000000..538c3cddd68
--- /dev/null
+++ b/public/-/emojis/1/earth_americas.png
Binary files differ
diff --git a/public/-/emojis/1/earth_asia.png b/public/-/emojis/1/earth_asia.png
new file mode 100644
index 00000000000..d8df97fec3c
--- /dev/null
+++ b/public/-/emojis/1/earth_asia.png
Binary files differ
diff --git a/public/-/emojis/1/egg.png b/public/-/emojis/1/egg.png
new file mode 100644
index 00000000000..c171974d993
--- /dev/null
+++ b/public/-/emojis/1/egg.png
Binary files differ
diff --git a/public/-/emojis/1/eggplant.png b/public/-/emojis/1/eggplant.png
new file mode 100644
index 00000000000..fafd7c1a14c
--- /dev/null
+++ b/public/-/emojis/1/eggplant.png
Binary files differ
diff --git a/public/-/emojis/1/eight.png b/public/-/emojis/1/eight.png
new file mode 100644
index 00000000000..8c95874d4c5
--- /dev/null
+++ b/public/-/emojis/1/eight.png
Binary files differ
diff --git a/public/-/emojis/1/eight_pointed_black_star.png b/public/-/emojis/1/eight_pointed_black_star.png
new file mode 100644
index 00000000000..820179bda50
--- /dev/null
+++ b/public/-/emojis/1/eight_pointed_black_star.png
Binary files differ
diff --git a/public/-/emojis/1/eight_spoked_asterisk.png b/public/-/emojis/1/eight_spoked_asterisk.png
new file mode 100644
index 00000000000..3307ffa62ee
--- /dev/null
+++ b/public/-/emojis/1/eight_spoked_asterisk.png
Binary files differ
diff --git a/public/-/emojis/1/eject.png b/public/-/emojis/1/eject.png
new file mode 100644
index 00000000000..ec5cfc48973
--- /dev/null
+++ b/public/-/emojis/1/eject.png
Binary files differ
diff --git a/public/-/emojis/1/electric_plug.png b/public/-/emojis/1/electric_plug.png
new file mode 100644
index 00000000000..31d1eb215b4
--- /dev/null
+++ b/public/-/emojis/1/electric_plug.png
Binary files differ
diff --git a/public/-/emojis/1/elephant.png b/public/-/emojis/1/elephant.png
new file mode 100644
index 00000000000..b8a6d140595
--- /dev/null
+++ b/public/-/emojis/1/elephant.png
Binary files differ
diff --git a/public/-/emojis/1/end.png b/public/-/emojis/1/end.png
new file mode 100644
index 00000000000..ef3ccd5f367
--- /dev/null
+++ b/public/-/emojis/1/end.png
Binary files differ
diff --git a/public/-/emojis/1/envelope.png b/public/-/emojis/1/envelope.png
new file mode 100644
index 00000000000..ec77ac375a4
--- /dev/null
+++ b/public/-/emojis/1/envelope.png
Binary files differ
diff --git a/public/-/emojis/1/envelope_with_arrow.png b/public/-/emojis/1/envelope_with_arrow.png
new file mode 100644
index 00000000000..7448a6b7673
--- /dev/null
+++ b/public/-/emojis/1/envelope_with_arrow.png
Binary files differ
diff --git a/public/-/emojis/1/euro.png b/public/-/emojis/1/euro.png
new file mode 100644
index 00000000000..a49020820e1
--- /dev/null
+++ b/public/-/emojis/1/euro.png
Binary files differ
diff --git a/public/-/emojis/1/european_castle.png b/public/-/emojis/1/european_castle.png
new file mode 100644
index 00000000000..888d11332ce
--- /dev/null
+++ b/public/-/emojis/1/european_castle.png
Binary files differ
diff --git a/public/-/emojis/1/european_post_office.png b/public/-/emojis/1/european_post_office.png
new file mode 100644
index 00000000000..3745aff8dd2
--- /dev/null
+++ b/public/-/emojis/1/european_post_office.png
Binary files differ
diff --git a/public/-/emojis/1/evergreen_tree.png b/public/-/emojis/1/evergreen_tree.png
new file mode 100644
index 00000000000..f679d8dd772
--- /dev/null
+++ b/public/-/emojis/1/evergreen_tree.png
Binary files differ
diff --git a/public/-/emojis/1/exclamation.png b/public/-/emojis/1/exclamation.png
new file mode 100644
index 00000000000..2c14406422f
--- /dev/null
+++ b/public/-/emojis/1/exclamation.png
Binary files differ
diff --git a/public/-/emojis/1/expressionless.png b/public/-/emojis/1/expressionless.png
new file mode 100644
index 00000000000..2954017f6c2
--- /dev/null
+++ b/public/-/emojis/1/expressionless.png
Binary files differ
diff --git a/public/-/emojis/1/eye.png b/public/-/emojis/1/eye.png
new file mode 100644
index 00000000000..9d989cdd375
--- /dev/null
+++ b/public/-/emojis/1/eye.png
Binary files differ
diff --git a/public/-/emojis/1/eye_in_speech_bubble.png b/public/-/emojis/1/eye_in_speech_bubble.png
new file mode 100644
index 00000000000..21bd22bbcce
--- /dev/null
+++ b/public/-/emojis/1/eye_in_speech_bubble.png
Binary files differ
diff --git a/public/-/emojis/1/eyeglasses.png b/public/-/emojis/1/eyeglasses.png
new file mode 100644
index 00000000000..865d8274acf
--- /dev/null
+++ b/public/-/emojis/1/eyeglasses.png
Binary files differ
diff --git a/public/-/emojis/1/eyes.png b/public/-/emojis/1/eyes.png
new file mode 100644
index 00000000000..2102ada7e09
--- /dev/null
+++ b/public/-/emojis/1/eyes.png
Binary files differ
diff --git a/public/-/emojis/1/face_palm.png b/public/-/emojis/1/face_palm.png
new file mode 100644
index 00000000000..defc796cf16
--- /dev/null
+++ b/public/-/emojis/1/face_palm.png
Binary files differ
diff --git a/public/-/emojis/1/face_palm_tone1.png b/public/-/emojis/1/face_palm_tone1.png
new file mode 100644
index 00000000000..2f4b010bb40
--- /dev/null
+++ b/public/-/emojis/1/face_palm_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/face_palm_tone2.png b/public/-/emojis/1/face_palm_tone2.png
new file mode 100644
index 00000000000..97fb6831687
--- /dev/null
+++ b/public/-/emojis/1/face_palm_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/face_palm_tone3.png b/public/-/emojis/1/face_palm_tone3.png
new file mode 100644
index 00000000000..b5b5c1e5306
--- /dev/null
+++ b/public/-/emojis/1/face_palm_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/face_palm_tone4.png b/public/-/emojis/1/face_palm_tone4.png
new file mode 100644
index 00000000000..2840b113483
--- /dev/null
+++ b/public/-/emojis/1/face_palm_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/face_palm_tone5.png b/public/-/emojis/1/face_palm_tone5.png
new file mode 100644
index 00000000000..6f070db98be
--- /dev/null
+++ b/public/-/emojis/1/face_palm_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/factory.png b/public/-/emojis/1/factory.png
new file mode 100644
index 00000000000..e1d2ddf4a27
--- /dev/null
+++ b/public/-/emojis/1/factory.png
Binary files differ
diff --git a/public/-/emojis/1/fallen_leaf.png b/public/-/emojis/1/fallen_leaf.png
new file mode 100644
index 00000000000..0d60e7bdf2d
--- /dev/null
+++ b/public/-/emojis/1/fallen_leaf.png
Binary files differ
diff --git a/public/-/emojis/1/family.png b/public/-/emojis/1/family.png
new file mode 100644
index 00000000000..26421965791
--- /dev/null
+++ b/public/-/emojis/1/family.png
Binary files differ
diff --git a/public/-/emojis/1/family_mmb.png b/public/-/emojis/1/family_mmb.png
new file mode 100644
index 00000000000..7a2e4e2c491
--- /dev/null
+++ b/public/-/emojis/1/family_mmb.png
Binary files differ
diff --git a/public/-/emojis/1/family_mmbb.png b/public/-/emojis/1/family_mmbb.png
new file mode 100644
index 00000000000..81e6c0fc0ee
--- /dev/null
+++ b/public/-/emojis/1/family_mmbb.png
Binary files differ
diff --git a/public/-/emojis/1/family_mmg.png b/public/-/emojis/1/family_mmg.png
new file mode 100644
index 00000000000..932a85e1fe5
--- /dev/null
+++ b/public/-/emojis/1/family_mmg.png
Binary files differ
diff --git a/public/-/emojis/1/family_mmgb.png b/public/-/emojis/1/family_mmgb.png
new file mode 100644
index 00000000000..41e35166670
--- /dev/null
+++ b/public/-/emojis/1/family_mmgb.png
Binary files differ
diff --git a/public/-/emojis/1/family_mmgg.png b/public/-/emojis/1/family_mmgg.png
new file mode 100644
index 00000000000..8e8ccfe6c7f
--- /dev/null
+++ b/public/-/emojis/1/family_mmgg.png
Binary files differ
diff --git a/public/-/emojis/1/family_mwbb.png b/public/-/emojis/1/family_mwbb.png
new file mode 100644
index 00000000000..b544fbe573f
--- /dev/null
+++ b/public/-/emojis/1/family_mwbb.png
Binary files differ
diff --git a/public/-/emojis/1/family_mwg.png b/public/-/emojis/1/family_mwg.png
new file mode 100644
index 00000000000..71d2681c32a
--- /dev/null
+++ b/public/-/emojis/1/family_mwg.png
Binary files differ
diff --git a/public/-/emojis/1/family_mwgb.png b/public/-/emojis/1/family_mwgb.png
new file mode 100644
index 00000000000..40dbf1f7a18
--- /dev/null
+++ b/public/-/emojis/1/family_mwgb.png
Binary files differ
diff --git a/public/-/emojis/1/family_mwgg.png b/public/-/emojis/1/family_mwgg.png
new file mode 100644
index 00000000000..bfefa4879cb
--- /dev/null
+++ b/public/-/emojis/1/family_mwgg.png
Binary files differ
diff --git a/public/-/emojis/1/family_wwb.png b/public/-/emojis/1/family_wwb.png
new file mode 100644
index 00000000000..836feae7c78
--- /dev/null
+++ b/public/-/emojis/1/family_wwb.png
Binary files differ
diff --git a/public/-/emojis/1/family_wwbb.png b/public/-/emojis/1/family_wwbb.png
new file mode 100644
index 00000000000..6c6ba45e7bb
--- /dev/null
+++ b/public/-/emojis/1/family_wwbb.png
Binary files differ
diff --git a/public/-/emojis/1/family_wwg.png b/public/-/emojis/1/family_wwg.png
new file mode 100644
index 00000000000..41225c6fa5a
--- /dev/null
+++ b/public/-/emojis/1/family_wwg.png
Binary files differ
diff --git a/public/-/emojis/1/family_wwgb.png b/public/-/emojis/1/family_wwgb.png
new file mode 100644
index 00000000000..284d29ab5da
--- /dev/null
+++ b/public/-/emojis/1/family_wwgb.png
Binary files differ
diff --git a/public/-/emojis/1/family_wwgg.png b/public/-/emojis/1/family_wwgg.png
new file mode 100644
index 00000000000..d8d3f49b85f
--- /dev/null
+++ b/public/-/emojis/1/family_wwgg.png
Binary files differ
diff --git a/public/-/emojis/1/fast_forward.png b/public/-/emojis/1/fast_forward.png
new file mode 100644
index 00000000000..c406fedfdb1
--- /dev/null
+++ b/public/-/emojis/1/fast_forward.png
Binary files differ
diff --git a/public/-/emojis/1/fax.png b/public/-/emojis/1/fax.png
new file mode 100644
index 00000000000..6f929e294c2
--- /dev/null
+++ b/public/-/emojis/1/fax.png
Binary files differ
diff --git a/public/-/emojis/1/fearful.png b/public/-/emojis/1/fearful.png
new file mode 100644
index 00000000000..eb8b347cef9
--- /dev/null
+++ b/public/-/emojis/1/fearful.png
Binary files differ
diff --git a/public/-/emojis/1/feet.png b/public/-/emojis/1/feet.png
new file mode 100644
index 00000000000..5fe568cee93
--- /dev/null
+++ b/public/-/emojis/1/feet.png
Binary files differ
diff --git a/public/-/emojis/1/fencer.png b/public/-/emojis/1/fencer.png
new file mode 100644
index 00000000000..5288c920eb9
--- /dev/null
+++ b/public/-/emojis/1/fencer.png
Binary files differ
diff --git a/public/-/emojis/1/ferris_wheel.png b/public/-/emojis/1/ferris_wheel.png
new file mode 100644
index 00000000000..55c8ff0475b
--- /dev/null
+++ b/public/-/emojis/1/ferris_wheel.png
Binary files differ
diff --git a/public/-/emojis/1/ferry.png b/public/-/emojis/1/ferry.png
new file mode 100644
index 00000000000..41816b3ae34
--- /dev/null
+++ b/public/-/emojis/1/ferry.png
Binary files differ
diff --git a/public/-/emojis/1/field_hockey.png b/public/-/emojis/1/field_hockey.png
new file mode 100644
index 00000000000..839637716ee
--- /dev/null
+++ b/public/-/emojis/1/field_hockey.png
Binary files differ
diff --git a/public/-/emojis/1/file_cabinet.png b/public/-/emojis/1/file_cabinet.png
new file mode 100644
index 00000000000..fddc65dde96
--- /dev/null
+++ b/public/-/emojis/1/file_cabinet.png
Binary files differ
diff --git a/public/-/emojis/1/file_folder.png b/public/-/emojis/1/file_folder.png
new file mode 100644
index 00000000000..addedaf0870
--- /dev/null
+++ b/public/-/emojis/1/file_folder.png
Binary files differ
diff --git a/public/-/emojis/1/film_frames.png b/public/-/emojis/1/film_frames.png
new file mode 100644
index 00000000000..30143aedbe6
--- /dev/null
+++ b/public/-/emojis/1/film_frames.png
Binary files differ
diff --git a/public/-/emojis/1/fingers_crossed.png b/public/-/emojis/1/fingers_crossed.png
new file mode 100644
index 00000000000..4cd18514ea3
--- /dev/null
+++ b/public/-/emojis/1/fingers_crossed.png
Binary files differ
diff --git a/public/-/emojis/1/fingers_crossed_tone1.png b/public/-/emojis/1/fingers_crossed_tone1.png
new file mode 100644
index 00000000000..dd2384a6cd5
--- /dev/null
+++ b/public/-/emojis/1/fingers_crossed_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/fingers_crossed_tone2.png b/public/-/emojis/1/fingers_crossed_tone2.png
new file mode 100644
index 00000000000..6228401befe
--- /dev/null
+++ b/public/-/emojis/1/fingers_crossed_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/fingers_crossed_tone3.png b/public/-/emojis/1/fingers_crossed_tone3.png
new file mode 100644
index 00000000000..b1074da15f5
--- /dev/null
+++ b/public/-/emojis/1/fingers_crossed_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/fingers_crossed_tone4.png b/public/-/emojis/1/fingers_crossed_tone4.png
new file mode 100644
index 00000000000..75e05e4d332
--- /dev/null
+++ b/public/-/emojis/1/fingers_crossed_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/fingers_crossed_tone5.png b/public/-/emojis/1/fingers_crossed_tone5.png
new file mode 100644
index 00000000000..761aebdc30f
--- /dev/null
+++ b/public/-/emojis/1/fingers_crossed_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/fire.png b/public/-/emojis/1/fire.png
new file mode 100644
index 00000000000..bd3775a460b
--- /dev/null
+++ b/public/-/emojis/1/fire.png
Binary files differ
diff --git a/public/-/emojis/1/fire_engine.png b/public/-/emojis/1/fire_engine.png
new file mode 100644
index 00000000000..2cd45b7cf7e
--- /dev/null
+++ b/public/-/emojis/1/fire_engine.png
Binary files differ
diff --git a/public/-/emojis/1/fireworks.png b/public/-/emojis/1/fireworks.png
new file mode 100644
index 00000000000..176c8b58265
--- /dev/null
+++ b/public/-/emojis/1/fireworks.png
Binary files differ
diff --git a/public/-/emojis/1/first_place.png b/public/-/emojis/1/first_place.png
new file mode 100644
index 00000000000..15612b66492
--- /dev/null
+++ b/public/-/emojis/1/first_place.png
Binary files differ
diff --git a/public/-/emojis/1/first_quarter_moon.png b/public/-/emojis/1/first_quarter_moon.png
new file mode 100644
index 00000000000..5dccaf72a4f
--- /dev/null
+++ b/public/-/emojis/1/first_quarter_moon.png
Binary files differ
diff --git a/public/-/emojis/1/first_quarter_moon_with_face.png b/public/-/emojis/1/first_quarter_moon_with_face.png
new file mode 100644
index 00000000000..cd8a3d7acd8
--- /dev/null
+++ b/public/-/emojis/1/first_quarter_moon_with_face.png
Binary files differ
diff --git a/public/-/emojis/1/fish.png b/public/-/emojis/1/fish.png
new file mode 100644
index 00000000000..c2d2faaacd4
--- /dev/null
+++ b/public/-/emojis/1/fish.png
Binary files differ
diff --git a/public/-/emojis/1/fish_cake.png b/public/-/emojis/1/fish_cake.png
new file mode 100644
index 00000000000..157bded65db
--- /dev/null
+++ b/public/-/emojis/1/fish_cake.png
Binary files differ
diff --git a/public/-/emojis/1/fishing_pole_and_fish.png b/public/-/emojis/1/fishing_pole_and_fish.png
new file mode 100644
index 00000000000..dfcdf07eb50
--- /dev/null
+++ b/public/-/emojis/1/fishing_pole_and_fish.png
Binary files differ
diff --git a/public/-/emojis/1/fist.png b/public/-/emojis/1/fist.png
new file mode 100644
index 00000000000..de33592bf98
--- /dev/null
+++ b/public/-/emojis/1/fist.png
Binary files differ
diff --git a/public/-/emojis/1/fist_tone1.png b/public/-/emojis/1/fist_tone1.png
new file mode 100644
index 00000000000..02809e2dd68
--- /dev/null
+++ b/public/-/emojis/1/fist_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/fist_tone2.png b/public/-/emojis/1/fist_tone2.png
new file mode 100644
index 00000000000..5de34810383
--- /dev/null
+++ b/public/-/emojis/1/fist_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/fist_tone3.png b/public/-/emojis/1/fist_tone3.png
new file mode 100644
index 00000000000..0d5240129b1
--- /dev/null
+++ b/public/-/emojis/1/fist_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/fist_tone4.png b/public/-/emojis/1/fist_tone4.png
new file mode 100644
index 00000000000..a95c0dd634b
--- /dev/null
+++ b/public/-/emojis/1/fist_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/fist_tone5.png b/public/-/emojis/1/fist_tone5.png
new file mode 100644
index 00000000000..a2f092fd8c7
--- /dev/null
+++ b/public/-/emojis/1/fist_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/five.png b/public/-/emojis/1/five.png
new file mode 100644
index 00000000000..d14371f3f27
--- /dev/null
+++ b/public/-/emojis/1/five.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ac.png b/public/-/emojis/1/flag_ac.png
new file mode 100644
index 00000000000..286239920c7
--- /dev/null
+++ b/public/-/emojis/1/flag_ac.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ad.png b/public/-/emojis/1/flag_ad.png
new file mode 100644
index 00000000000..20f4b14e8ad
--- /dev/null
+++ b/public/-/emojis/1/flag_ad.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ae.png b/public/-/emojis/1/flag_ae.png
new file mode 100644
index 00000000000..d16ffe4b862
--- /dev/null
+++ b/public/-/emojis/1/flag_ae.png
Binary files differ
diff --git a/public/-/emojis/1/flag_af.png b/public/-/emojis/1/flag_af.png
new file mode 100644
index 00000000000..a51533b554d
--- /dev/null
+++ b/public/-/emojis/1/flag_af.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ag.png b/public/-/emojis/1/flag_ag.png
new file mode 100644
index 00000000000..07f2ce397d0
--- /dev/null
+++ b/public/-/emojis/1/flag_ag.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ai.png b/public/-/emojis/1/flag_ai.png
new file mode 100644
index 00000000000..500b5ab09fb
--- /dev/null
+++ b/public/-/emojis/1/flag_ai.png
Binary files differ
diff --git a/public/-/emojis/1/flag_al.png b/public/-/emojis/1/flag_al.png
new file mode 100644
index 00000000000..03a20132cc6
--- /dev/null
+++ b/public/-/emojis/1/flag_al.png
Binary files differ
diff --git a/public/-/emojis/1/flag_am.png b/public/-/emojis/1/flag_am.png
new file mode 100644
index 00000000000..2ad60a273ec
--- /dev/null
+++ b/public/-/emojis/1/flag_am.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ao.png b/public/-/emojis/1/flag_ao.png
new file mode 100644
index 00000000000..cb46c31f862
--- /dev/null
+++ b/public/-/emojis/1/flag_ao.png
Binary files differ
diff --git a/public/-/emojis/1/flag_aq.png b/public/-/emojis/1/flag_aq.png
new file mode 100644
index 00000000000..b272021d375
--- /dev/null
+++ b/public/-/emojis/1/flag_aq.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ar.png b/public/-/emojis/1/flag_ar.png
new file mode 100644
index 00000000000..73136caf3b7
--- /dev/null
+++ b/public/-/emojis/1/flag_ar.png
Binary files differ
diff --git a/public/-/emojis/1/flag_as.png b/public/-/emojis/1/flag_as.png
new file mode 100644
index 00000000000..3db45a0d9f3
--- /dev/null
+++ b/public/-/emojis/1/flag_as.png
Binary files differ
diff --git a/public/-/emojis/1/flag_at.png b/public/-/emojis/1/flag_at.png
new file mode 100644
index 00000000000..c43769dcb19
--- /dev/null
+++ b/public/-/emojis/1/flag_at.png
Binary files differ
diff --git a/public/-/emojis/1/flag_au.png b/public/-/emojis/1/flag_au.png
new file mode 100644
index 00000000000..7794309c78c
--- /dev/null
+++ b/public/-/emojis/1/flag_au.png
Binary files differ
diff --git a/public/-/emojis/1/flag_aw.png b/public/-/emojis/1/flag_aw.png
new file mode 100644
index 00000000000..02c840d12c9
--- /dev/null
+++ b/public/-/emojis/1/flag_aw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ax.png b/public/-/emojis/1/flag_ax.png
new file mode 100644
index 00000000000..fc5466174bb
--- /dev/null
+++ b/public/-/emojis/1/flag_ax.png
Binary files differ
diff --git a/public/-/emojis/1/flag_az.png b/public/-/emojis/1/flag_az.png
new file mode 100644
index 00000000000..89d3d15fd9f
--- /dev/null
+++ b/public/-/emojis/1/flag_az.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ba.png b/public/-/emojis/1/flag_ba.png
new file mode 100644
index 00000000000..25fe407e13c
--- /dev/null
+++ b/public/-/emojis/1/flag_ba.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bb.png b/public/-/emojis/1/flag_bb.png
new file mode 100644
index 00000000000..bccd8c5c9b0
--- /dev/null
+++ b/public/-/emojis/1/flag_bb.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bd.png b/public/-/emojis/1/flag_bd.png
new file mode 100644
index 00000000000..b0597a3149b
--- /dev/null
+++ b/public/-/emojis/1/flag_bd.png
Binary files differ
diff --git a/public/-/emojis/1/flag_be.png b/public/-/emojis/1/flag_be.png
new file mode 100644
index 00000000000..551f086e3c4
--- /dev/null
+++ b/public/-/emojis/1/flag_be.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bf.png b/public/-/emojis/1/flag_bf.png
new file mode 100644
index 00000000000..444d4829f94
--- /dev/null
+++ b/public/-/emojis/1/flag_bf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bg.png b/public/-/emojis/1/flag_bg.png
new file mode 100644
index 00000000000..821eee5e170
--- /dev/null
+++ b/public/-/emojis/1/flag_bg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bh.png b/public/-/emojis/1/flag_bh.png
new file mode 100644
index 00000000000..f33724249f0
--- /dev/null
+++ b/public/-/emojis/1/flag_bh.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bi.png b/public/-/emojis/1/flag_bi.png
new file mode 100644
index 00000000000..ea20ac93211
--- /dev/null
+++ b/public/-/emojis/1/flag_bi.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bj.png b/public/-/emojis/1/flag_bj.png
new file mode 100644
index 00000000000..7cca4f80457
--- /dev/null
+++ b/public/-/emojis/1/flag_bj.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bl.png b/public/-/emojis/1/flag_bl.png
new file mode 100644
index 00000000000..1082e78999f
--- /dev/null
+++ b/public/-/emojis/1/flag_bl.png
Binary files differ
diff --git a/public/-/emojis/1/flag_black.png b/public/-/emojis/1/flag_black.png
new file mode 100644
index 00000000000..0e28d05d5ac
--- /dev/null
+++ b/public/-/emojis/1/flag_black.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bm.png b/public/-/emojis/1/flag_bm.png
new file mode 100644
index 00000000000..ab8cafdac63
--- /dev/null
+++ b/public/-/emojis/1/flag_bm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bn.png b/public/-/emojis/1/flag_bn.png
new file mode 100644
index 00000000000..caa9329a896
--- /dev/null
+++ b/public/-/emojis/1/flag_bn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bo.png b/public/-/emojis/1/flag_bo.png
new file mode 100644
index 00000000000..98af62b3da7
--- /dev/null
+++ b/public/-/emojis/1/flag_bo.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bq.png b/public/-/emojis/1/flag_bq.png
new file mode 100644
index 00000000000..cb978ef9de9
--- /dev/null
+++ b/public/-/emojis/1/flag_bq.png
Binary files differ
diff --git a/public/-/emojis/1/flag_br.png b/public/-/emojis/1/flag_br.png
new file mode 100644
index 00000000000..b139366a42b
--- /dev/null
+++ b/public/-/emojis/1/flag_br.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bs.png b/public/-/emojis/1/flag_bs.png
new file mode 100644
index 00000000000..d36bcd2fb52
--- /dev/null
+++ b/public/-/emojis/1/flag_bs.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bt.png b/public/-/emojis/1/flag_bt.png
new file mode 100644
index 00000000000..ed57aa0360e
--- /dev/null
+++ b/public/-/emojis/1/flag_bt.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bv.png b/public/-/emojis/1/flag_bv.png
new file mode 100644
index 00000000000..5884e648228
--- /dev/null
+++ b/public/-/emojis/1/flag_bv.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bw.png b/public/-/emojis/1/flag_bw.png
new file mode 100644
index 00000000000..cb12f34739d
--- /dev/null
+++ b/public/-/emojis/1/flag_bw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_by.png b/public/-/emojis/1/flag_by.png
new file mode 100644
index 00000000000..859c05beb13
--- /dev/null
+++ b/public/-/emojis/1/flag_by.png
Binary files differ
diff --git a/public/-/emojis/1/flag_bz.png b/public/-/emojis/1/flag_bz.png
new file mode 100644
index 00000000000..34761cd03d8
--- /dev/null
+++ b/public/-/emojis/1/flag_bz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ca.png b/public/-/emojis/1/flag_ca.png
new file mode 100644
index 00000000000..7c5b390e85b
--- /dev/null
+++ b/public/-/emojis/1/flag_ca.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cc.png b/public/-/emojis/1/flag_cc.png
new file mode 100644
index 00000000000..b6555a23d83
--- /dev/null
+++ b/public/-/emojis/1/flag_cc.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cd.png b/public/-/emojis/1/flag_cd.png
new file mode 100644
index 00000000000..fa92009771d
--- /dev/null
+++ b/public/-/emojis/1/flag_cd.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cf.png b/public/-/emojis/1/flag_cf.png
new file mode 100644
index 00000000000..b969ae29ea9
--- /dev/null
+++ b/public/-/emojis/1/flag_cf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cg.png b/public/-/emojis/1/flag_cg.png
new file mode 100644
index 00000000000..3a38a40a95e
--- /dev/null
+++ b/public/-/emojis/1/flag_cg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ch.png b/public/-/emojis/1/flag_ch.png
new file mode 100644
index 00000000000..5ff86b8a3b7
--- /dev/null
+++ b/public/-/emojis/1/flag_ch.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ci.png b/public/-/emojis/1/flag_ci.png
new file mode 100644
index 00000000000..e3b4d15c7f1
--- /dev/null
+++ b/public/-/emojis/1/flag_ci.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ck.png b/public/-/emojis/1/flag_ck.png
new file mode 100644
index 00000000000..b6b53dbc1c4
--- /dev/null
+++ b/public/-/emojis/1/flag_ck.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cl.png b/public/-/emojis/1/flag_cl.png
new file mode 100644
index 00000000000..c9390da5499
--- /dev/null
+++ b/public/-/emojis/1/flag_cl.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cm.png b/public/-/emojis/1/flag_cm.png
new file mode 100644
index 00000000000..2d3f6ec4518
--- /dev/null
+++ b/public/-/emojis/1/flag_cm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cn.png b/public/-/emojis/1/flag_cn.png
new file mode 100644
index 00000000000..0a7f350a6d2
--- /dev/null
+++ b/public/-/emojis/1/flag_cn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_co.png b/public/-/emojis/1/flag_co.png
new file mode 100644
index 00000000000..7e0f5e0dc3c
--- /dev/null
+++ b/public/-/emojis/1/flag_co.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cp.png b/public/-/emojis/1/flag_cp.png
new file mode 100644
index 00000000000..70c761036bd
--- /dev/null
+++ b/public/-/emojis/1/flag_cp.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cr.png b/public/-/emojis/1/flag_cr.png
new file mode 100644
index 00000000000..a5fce126515
--- /dev/null
+++ b/public/-/emojis/1/flag_cr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cu.png b/public/-/emojis/1/flag_cu.png
new file mode 100644
index 00000000000..447328f7dfd
--- /dev/null
+++ b/public/-/emojis/1/flag_cu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cv.png b/public/-/emojis/1/flag_cv.png
new file mode 100644
index 00000000000..43faf4d64d5
--- /dev/null
+++ b/public/-/emojis/1/flag_cv.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cw.png b/public/-/emojis/1/flag_cw.png
new file mode 100644
index 00000000000..eb39e8d0078
--- /dev/null
+++ b/public/-/emojis/1/flag_cw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cx.png b/public/-/emojis/1/flag_cx.png
new file mode 100644
index 00000000000..09d21359f3a
--- /dev/null
+++ b/public/-/emojis/1/flag_cx.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cy.png b/public/-/emojis/1/flag_cy.png
new file mode 100644
index 00000000000..154a7aa3176
--- /dev/null
+++ b/public/-/emojis/1/flag_cy.png
Binary files differ
diff --git a/public/-/emojis/1/flag_cz.png b/public/-/emojis/1/flag_cz.png
new file mode 100644
index 00000000000..9737ca223c7
--- /dev/null
+++ b/public/-/emojis/1/flag_cz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_de.png b/public/-/emojis/1/flag_de.png
new file mode 100644
index 00000000000..98ed76b3bab
--- /dev/null
+++ b/public/-/emojis/1/flag_de.png
Binary files differ
diff --git a/public/-/emojis/1/flag_dg.png b/public/-/emojis/1/flag_dg.png
new file mode 100644
index 00000000000..aae927d14b8
--- /dev/null
+++ b/public/-/emojis/1/flag_dg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_dj.png b/public/-/emojis/1/flag_dj.png
new file mode 100644
index 00000000000..73c2a2acbd9
--- /dev/null
+++ b/public/-/emojis/1/flag_dj.png
Binary files differ
diff --git a/public/-/emojis/1/flag_dk.png b/public/-/emojis/1/flag_dk.png
new file mode 100644
index 00000000000..e5a60b06256
--- /dev/null
+++ b/public/-/emojis/1/flag_dk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_dm.png b/public/-/emojis/1/flag_dm.png
new file mode 100644
index 00000000000..50f8a53981d
--- /dev/null
+++ b/public/-/emojis/1/flag_dm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_do.png b/public/-/emojis/1/flag_do.png
new file mode 100644
index 00000000000..037a45d7c26
--- /dev/null
+++ b/public/-/emojis/1/flag_do.png
Binary files differ
diff --git a/public/-/emojis/1/flag_dz.png b/public/-/emojis/1/flag_dz.png
new file mode 100644
index 00000000000..24945b10f2d
--- /dev/null
+++ b/public/-/emojis/1/flag_dz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ea.png b/public/-/emojis/1/flag_ea.png
new file mode 100644
index 00000000000..356ff347838
--- /dev/null
+++ b/public/-/emojis/1/flag_ea.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ec.png b/public/-/emojis/1/flag_ec.png
new file mode 100644
index 00000000000..13814594619
--- /dev/null
+++ b/public/-/emojis/1/flag_ec.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ee.png b/public/-/emojis/1/flag_ee.png
new file mode 100644
index 00000000000..84f317e7747
--- /dev/null
+++ b/public/-/emojis/1/flag_ee.png
Binary files differ
diff --git a/public/-/emojis/1/flag_eg.png b/public/-/emojis/1/flag_eg.png
new file mode 100644
index 00000000000..57786064a95
--- /dev/null
+++ b/public/-/emojis/1/flag_eg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_eh.png b/public/-/emojis/1/flag_eh.png
new file mode 100644
index 00000000000..4d7a76687f6
--- /dev/null
+++ b/public/-/emojis/1/flag_eh.png
Binary files differ
diff --git a/public/-/emojis/1/flag_er.png b/public/-/emojis/1/flag_er.png
new file mode 100644
index 00000000000..0c3c724c1fb
--- /dev/null
+++ b/public/-/emojis/1/flag_er.png
Binary files differ
diff --git a/public/-/emojis/1/flag_es.png b/public/-/emojis/1/flag_es.png
new file mode 100644
index 00000000000..3e73597a225
--- /dev/null
+++ b/public/-/emojis/1/flag_es.png
Binary files differ
diff --git a/public/-/emojis/1/flag_et.png b/public/-/emojis/1/flag_et.png
new file mode 100644
index 00000000000..9560a134c97
--- /dev/null
+++ b/public/-/emojis/1/flag_et.png
Binary files differ
diff --git a/public/-/emojis/1/flag_eu.png b/public/-/emojis/1/flag_eu.png
new file mode 100644
index 00000000000..0b456cf3330
--- /dev/null
+++ b/public/-/emojis/1/flag_eu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_fi.png b/public/-/emojis/1/flag_fi.png
new file mode 100644
index 00000000000..ebcf58abfc5
--- /dev/null
+++ b/public/-/emojis/1/flag_fi.png
Binary files differ
diff --git a/public/-/emojis/1/flag_fj.png b/public/-/emojis/1/flag_fj.png
new file mode 100644
index 00000000000..9cc8c37fe37
--- /dev/null
+++ b/public/-/emojis/1/flag_fj.png
Binary files differ
diff --git a/public/-/emojis/1/flag_fk.png b/public/-/emojis/1/flag_fk.png
new file mode 100644
index 00000000000..61372fd2549
--- /dev/null
+++ b/public/-/emojis/1/flag_fk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_fm.png b/public/-/emojis/1/flag_fm.png
new file mode 100644
index 00000000000..0889825c8e1
--- /dev/null
+++ b/public/-/emojis/1/flag_fm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_fo.png b/public/-/emojis/1/flag_fo.png
new file mode 100644
index 00000000000..9a4431b0831
--- /dev/null
+++ b/public/-/emojis/1/flag_fo.png
Binary files differ
diff --git a/public/-/emojis/1/flag_fr.png b/public/-/emojis/1/flag_fr.png
new file mode 100644
index 00000000000..62ca19c3fcf
--- /dev/null
+++ b/public/-/emojis/1/flag_fr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ga.png b/public/-/emojis/1/flag_ga.png
new file mode 100644
index 00000000000..2e68e527a3e
--- /dev/null
+++ b/public/-/emojis/1/flag_ga.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gb.png b/public/-/emojis/1/flag_gb.png
new file mode 100644
index 00000000000..3ed10f62347
--- /dev/null
+++ b/public/-/emojis/1/flag_gb.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gd.png b/public/-/emojis/1/flag_gd.png
new file mode 100644
index 00000000000..527aad33807
--- /dev/null
+++ b/public/-/emojis/1/flag_gd.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ge.png b/public/-/emojis/1/flag_ge.png
new file mode 100644
index 00000000000..a75d142480d
--- /dev/null
+++ b/public/-/emojis/1/flag_ge.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gf.png b/public/-/emojis/1/flag_gf.png
new file mode 100644
index 00000000000..0cf96f327c0
--- /dev/null
+++ b/public/-/emojis/1/flag_gf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gg.png b/public/-/emojis/1/flag_gg.png
new file mode 100644
index 00000000000..970002c7f76
--- /dev/null
+++ b/public/-/emojis/1/flag_gg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gh.png b/public/-/emojis/1/flag_gh.png
new file mode 100644
index 00000000000..f31b5eb7b45
--- /dev/null
+++ b/public/-/emojis/1/flag_gh.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gi.png b/public/-/emojis/1/flag_gi.png
new file mode 100644
index 00000000000..e554a2a1d0c
--- /dev/null
+++ b/public/-/emojis/1/flag_gi.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gl.png b/public/-/emojis/1/flag_gl.png
new file mode 100644
index 00000000000..2e795dd4e33
--- /dev/null
+++ b/public/-/emojis/1/flag_gl.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gm.png b/public/-/emojis/1/flag_gm.png
new file mode 100644
index 00000000000..bb69c0975a3
--- /dev/null
+++ b/public/-/emojis/1/flag_gm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gn.png b/public/-/emojis/1/flag_gn.png
new file mode 100644
index 00000000000..1981f61dbf5
--- /dev/null
+++ b/public/-/emojis/1/flag_gn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gp.png b/public/-/emojis/1/flag_gp.png
new file mode 100644
index 00000000000..10e42e672bd
--- /dev/null
+++ b/public/-/emojis/1/flag_gp.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gq.png b/public/-/emojis/1/flag_gq.png
new file mode 100644
index 00000000000..11475e61eeb
--- /dev/null
+++ b/public/-/emojis/1/flag_gq.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gr.png b/public/-/emojis/1/flag_gr.png
new file mode 100644
index 00000000000..0f6bb1b6b94
--- /dev/null
+++ b/public/-/emojis/1/flag_gr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gs.png b/public/-/emojis/1/flag_gs.png
new file mode 100644
index 00000000000..6fc92780453
--- /dev/null
+++ b/public/-/emojis/1/flag_gs.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gt.png b/public/-/emojis/1/flag_gt.png
new file mode 100644
index 00000000000..7213d4139ed
--- /dev/null
+++ b/public/-/emojis/1/flag_gt.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gu.png b/public/-/emojis/1/flag_gu.png
new file mode 100644
index 00000000000..4027549ca3c
--- /dev/null
+++ b/public/-/emojis/1/flag_gu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gw.png b/public/-/emojis/1/flag_gw.png
new file mode 100644
index 00000000000..6357f6225f4
--- /dev/null
+++ b/public/-/emojis/1/flag_gw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_gy.png b/public/-/emojis/1/flag_gy.png
new file mode 100644
index 00000000000..746e2fb7e44
--- /dev/null
+++ b/public/-/emojis/1/flag_gy.png
Binary files differ
diff --git a/public/-/emojis/1/flag_hk.png b/public/-/emojis/1/flag_hk.png
new file mode 100644
index 00000000000..cf0c7151b56
--- /dev/null
+++ b/public/-/emojis/1/flag_hk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_hm.png b/public/-/emojis/1/flag_hm.png
new file mode 100644
index 00000000000..b613509e466
--- /dev/null
+++ b/public/-/emojis/1/flag_hm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_hn.png b/public/-/emojis/1/flag_hn.png
new file mode 100644
index 00000000000..402cdcefdf8
--- /dev/null
+++ b/public/-/emojis/1/flag_hn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_hr.png b/public/-/emojis/1/flag_hr.png
new file mode 100644
index 00000000000..46f4f06b4f2
--- /dev/null
+++ b/public/-/emojis/1/flag_hr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ht.png b/public/-/emojis/1/flag_ht.png
new file mode 100644
index 00000000000..d8d0c888498
--- /dev/null
+++ b/public/-/emojis/1/flag_ht.png
Binary files differ
diff --git a/public/-/emojis/1/flag_hu.png b/public/-/emojis/1/flag_hu.png
new file mode 100644
index 00000000000..a898de636a5
--- /dev/null
+++ b/public/-/emojis/1/flag_hu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ic.png b/public/-/emojis/1/flag_ic.png
new file mode 100644
index 00000000000..69fd990aa95
--- /dev/null
+++ b/public/-/emojis/1/flag_ic.png
Binary files differ
diff --git a/public/-/emojis/1/flag_id.png b/public/-/emojis/1/flag_id.png
new file mode 100644
index 00000000000..85b4c063a45
--- /dev/null
+++ b/public/-/emojis/1/flag_id.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ie.png b/public/-/emojis/1/flag_ie.png
new file mode 100644
index 00000000000..a28295838cc
--- /dev/null
+++ b/public/-/emojis/1/flag_ie.png
Binary files differ
diff --git a/public/-/emojis/1/flag_il.png b/public/-/emojis/1/flag_il.png
new file mode 100644
index 00000000000..85c410d45fb
--- /dev/null
+++ b/public/-/emojis/1/flag_il.png
Binary files differ
diff --git a/public/-/emojis/1/flag_im.png b/public/-/emojis/1/flag_im.png
new file mode 100644
index 00000000000..60a2458e38e
--- /dev/null
+++ b/public/-/emojis/1/flag_im.png
Binary files differ
diff --git a/public/-/emojis/1/flag_in.png b/public/-/emojis/1/flag_in.png
new file mode 100644
index 00000000000..feccc8952ce
--- /dev/null
+++ b/public/-/emojis/1/flag_in.png
Binary files differ
diff --git a/public/-/emojis/1/flag_io.png b/public/-/emojis/1/flag_io.png
new file mode 100644
index 00000000000..aae927d14b8
--- /dev/null
+++ b/public/-/emojis/1/flag_io.png
Binary files differ
diff --git a/public/-/emojis/1/flag_iq.png b/public/-/emojis/1/flag_iq.png
new file mode 100644
index 00000000000..41fd1db6f86
--- /dev/null
+++ b/public/-/emojis/1/flag_iq.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ir.png b/public/-/emojis/1/flag_ir.png
new file mode 100644
index 00000000000..ff7aaf62ba6
--- /dev/null
+++ b/public/-/emojis/1/flag_ir.png
Binary files differ
diff --git a/public/-/emojis/1/flag_is.png b/public/-/emojis/1/flag_is.png
new file mode 100644
index 00000000000..ad8d4131dd2
--- /dev/null
+++ b/public/-/emojis/1/flag_is.png
Binary files differ
diff --git a/public/-/emojis/1/flag_it.png b/public/-/emojis/1/flag_it.png
new file mode 100644
index 00000000000..f21563ec533
--- /dev/null
+++ b/public/-/emojis/1/flag_it.png
Binary files differ
diff --git a/public/-/emojis/1/flag_je.png b/public/-/emojis/1/flag_je.png
new file mode 100644
index 00000000000..198a918f6a4
--- /dev/null
+++ b/public/-/emojis/1/flag_je.png
Binary files differ
diff --git a/public/-/emojis/1/flag_jm.png b/public/-/emojis/1/flag_jm.png
new file mode 100644
index 00000000000..f84e4f9e8db
--- /dev/null
+++ b/public/-/emojis/1/flag_jm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_jo.png b/public/-/emojis/1/flag_jo.png
new file mode 100644
index 00000000000..20bfa147e3e
--- /dev/null
+++ b/public/-/emojis/1/flag_jo.png
Binary files differ
diff --git a/public/-/emojis/1/flag_jp.png b/public/-/emojis/1/flag_jp.png
new file mode 100644
index 00000000000..8d8838e4708
--- /dev/null
+++ b/public/-/emojis/1/flag_jp.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ke.png b/public/-/emojis/1/flag_ke.png
new file mode 100644
index 00000000000..9e417ab3009
--- /dev/null
+++ b/public/-/emojis/1/flag_ke.png
Binary files differ
diff --git a/public/-/emojis/1/flag_kg.png b/public/-/emojis/1/flag_kg.png
new file mode 100644
index 00000000000..2f2d848fe58
--- /dev/null
+++ b/public/-/emojis/1/flag_kg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_kh.png b/public/-/emojis/1/flag_kh.png
new file mode 100644
index 00000000000..9a2877dd620
--- /dev/null
+++ b/public/-/emojis/1/flag_kh.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ki.png b/public/-/emojis/1/flag_ki.png
new file mode 100644
index 00000000000..10e507e3245
--- /dev/null
+++ b/public/-/emojis/1/flag_ki.png
Binary files differ
diff --git a/public/-/emojis/1/flag_km.png b/public/-/emojis/1/flag_km.png
new file mode 100644
index 00000000000..bd5a0588e03
--- /dev/null
+++ b/public/-/emojis/1/flag_km.png
Binary files differ
diff --git a/public/-/emojis/1/flag_kn.png b/public/-/emojis/1/flag_kn.png
new file mode 100644
index 00000000000..776207c9605
--- /dev/null
+++ b/public/-/emojis/1/flag_kn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_kp.png b/public/-/emojis/1/flag_kp.png
new file mode 100644
index 00000000000..6b3fd89eaaa
--- /dev/null
+++ b/public/-/emojis/1/flag_kp.png
Binary files differ
diff --git a/public/-/emojis/1/flag_kr.png b/public/-/emojis/1/flag_kr.png
new file mode 100644
index 00000000000..833a88116e1
--- /dev/null
+++ b/public/-/emojis/1/flag_kr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_kw.png b/public/-/emojis/1/flag_kw.png
new file mode 100644
index 00000000000..4d19bfa6ca7
--- /dev/null
+++ b/public/-/emojis/1/flag_kw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ky.png b/public/-/emojis/1/flag_ky.png
new file mode 100644
index 00000000000..40daa4da597
--- /dev/null
+++ b/public/-/emojis/1/flag_ky.png
Binary files differ
diff --git a/public/-/emojis/1/flag_kz.png b/public/-/emojis/1/flag_kz.png
new file mode 100644
index 00000000000..2f97a8fd3c6
--- /dev/null
+++ b/public/-/emojis/1/flag_kz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_la.png b/public/-/emojis/1/flag_la.png
new file mode 100644
index 00000000000..4d4179f34f6
--- /dev/null
+++ b/public/-/emojis/1/flag_la.png
Binary files differ
diff --git a/public/-/emojis/1/flag_lb.png b/public/-/emojis/1/flag_lb.png
new file mode 100644
index 00000000000..3d594467011
--- /dev/null
+++ b/public/-/emojis/1/flag_lb.png
Binary files differ
diff --git a/public/-/emojis/1/flag_lc.png b/public/-/emojis/1/flag_lc.png
new file mode 100644
index 00000000000..45547b1e439
--- /dev/null
+++ b/public/-/emojis/1/flag_lc.png
Binary files differ
diff --git a/public/-/emojis/1/flag_li.png b/public/-/emojis/1/flag_li.png
new file mode 100644
index 00000000000..0eafa6a2215
--- /dev/null
+++ b/public/-/emojis/1/flag_li.png
Binary files differ
diff --git a/public/-/emojis/1/flag_lk.png b/public/-/emojis/1/flag_lk.png
new file mode 100644
index 00000000000..ab4fe10c40c
--- /dev/null
+++ b/public/-/emojis/1/flag_lk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_lr.png b/public/-/emojis/1/flag_lr.png
new file mode 100644
index 00000000000..f66f267fea2
--- /dev/null
+++ b/public/-/emojis/1/flag_lr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ls.png b/public/-/emojis/1/flag_ls.png
new file mode 100644
index 00000000000..24745631e3c
--- /dev/null
+++ b/public/-/emojis/1/flag_ls.png
Binary files differ
diff --git a/public/-/emojis/1/flag_lt.png b/public/-/emojis/1/flag_lt.png
new file mode 100644
index 00000000000..d644b56d62a
--- /dev/null
+++ b/public/-/emojis/1/flag_lt.png
Binary files differ
diff --git a/public/-/emojis/1/flag_lu.png b/public/-/emojis/1/flag_lu.png
new file mode 100644
index 00000000000..a2df9c92994
--- /dev/null
+++ b/public/-/emojis/1/flag_lu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_lv.png b/public/-/emojis/1/flag_lv.png
new file mode 100644
index 00000000000..ae680d5f0e3
--- /dev/null
+++ b/public/-/emojis/1/flag_lv.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ly.png b/public/-/emojis/1/flag_ly.png
new file mode 100644
index 00000000000..f6e77b0f3ba
--- /dev/null
+++ b/public/-/emojis/1/flag_ly.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ma.png b/public/-/emojis/1/flag_ma.png
new file mode 100644
index 00000000000..c4a056722cd
--- /dev/null
+++ b/public/-/emojis/1/flag_ma.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mc.png b/public/-/emojis/1/flag_mc.png
new file mode 100644
index 00000000000..d479eab98cb
--- /dev/null
+++ b/public/-/emojis/1/flag_mc.png
Binary files differ
diff --git a/public/-/emojis/1/flag_md.png b/public/-/emojis/1/flag_md.png
new file mode 100644
index 00000000000..a7a72539872
--- /dev/null
+++ b/public/-/emojis/1/flag_md.png
Binary files differ
diff --git a/public/-/emojis/1/flag_me.png b/public/-/emojis/1/flag_me.png
new file mode 100644
index 00000000000..7c771e7e120
--- /dev/null
+++ b/public/-/emojis/1/flag_me.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mf.png b/public/-/emojis/1/flag_mf.png
new file mode 100644
index 00000000000..70c761036bd
--- /dev/null
+++ b/public/-/emojis/1/flag_mf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mg.png b/public/-/emojis/1/flag_mg.png
new file mode 100644
index 00000000000..2f3ccdda76f
--- /dev/null
+++ b/public/-/emojis/1/flag_mg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mh.png b/public/-/emojis/1/flag_mh.png
new file mode 100644
index 00000000000..598016481c1
--- /dev/null
+++ b/public/-/emojis/1/flag_mh.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mk.png b/public/-/emojis/1/flag_mk.png
new file mode 100644
index 00000000000..7ba775ee75c
--- /dev/null
+++ b/public/-/emojis/1/flag_mk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ml.png b/public/-/emojis/1/flag_ml.png
new file mode 100644
index 00000000000..68343785468
--- /dev/null
+++ b/public/-/emojis/1/flag_ml.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mm.png b/public/-/emojis/1/flag_mm.png
new file mode 100644
index 00000000000..37dc7d71591
--- /dev/null
+++ b/public/-/emojis/1/flag_mm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mn.png b/public/-/emojis/1/flag_mn.png
new file mode 100644
index 00000000000..1f146bbcd1a
--- /dev/null
+++ b/public/-/emojis/1/flag_mn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mo.png b/public/-/emojis/1/flag_mo.png
new file mode 100644
index 00000000000..7edde31f64b
--- /dev/null
+++ b/public/-/emojis/1/flag_mo.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mp.png b/public/-/emojis/1/flag_mp.png
new file mode 100644
index 00000000000..17ec1c441ed
--- /dev/null
+++ b/public/-/emojis/1/flag_mp.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mq.png b/public/-/emojis/1/flag_mq.png
new file mode 100644
index 00000000000..1e672dc9087
--- /dev/null
+++ b/public/-/emojis/1/flag_mq.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mr.png b/public/-/emojis/1/flag_mr.png
new file mode 100644
index 00000000000..f87de46effe
--- /dev/null
+++ b/public/-/emojis/1/flag_mr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ms.png b/public/-/emojis/1/flag_ms.png
new file mode 100644
index 00000000000..480b0d4ebda
--- /dev/null
+++ b/public/-/emojis/1/flag_ms.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mt.png b/public/-/emojis/1/flag_mt.png
new file mode 100644
index 00000000000..c9e1dbdce82
--- /dev/null
+++ b/public/-/emojis/1/flag_mt.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mu.png b/public/-/emojis/1/flag_mu.png
new file mode 100644
index 00000000000..55b33cb7c33
--- /dev/null
+++ b/public/-/emojis/1/flag_mu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mv.png b/public/-/emojis/1/flag_mv.png
new file mode 100644
index 00000000000..ce5867126ae
--- /dev/null
+++ b/public/-/emojis/1/flag_mv.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mw.png b/public/-/emojis/1/flag_mw.png
new file mode 100644
index 00000000000..003d8548401
--- /dev/null
+++ b/public/-/emojis/1/flag_mw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mx.png b/public/-/emojis/1/flag_mx.png
new file mode 100644
index 00000000000..42572bcd0ba
--- /dev/null
+++ b/public/-/emojis/1/flag_mx.png
Binary files differ
diff --git a/public/-/emojis/1/flag_my.png b/public/-/emojis/1/flag_my.png
new file mode 100644
index 00000000000..17526c26742
--- /dev/null
+++ b/public/-/emojis/1/flag_my.png
Binary files differ
diff --git a/public/-/emojis/1/flag_mz.png b/public/-/emojis/1/flag_mz.png
new file mode 100644
index 00000000000..2352a78e786
--- /dev/null
+++ b/public/-/emojis/1/flag_mz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_na.png b/public/-/emojis/1/flag_na.png
new file mode 100644
index 00000000000..ed31c3df04d
--- /dev/null
+++ b/public/-/emojis/1/flag_na.png
Binary files differ
diff --git a/public/-/emojis/1/flag_nc.png b/public/-/emojis/1/flag_nc.png
new file mode 100644
index 00000000000..90b3afebfa3
--- /dev/null
+++ b/public/-/emojis/1/flag_nc.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ne.png b/public/-/emojis/1/flag_ne.png
new file mode 100644
index 00000000000..f98a1173c2a
--- /dev/null
+++ b/public/-/emojis/1/flag_ne.png
Binary files differ
diff --git a/public/-/emojis/1/flag_nf.png b/public/-/emojis/1/flag_nf.png
new file mode 100644
index 00000000000..9099e767420
--- /dev/null
+++ b/public/-/emojis/1/flag_nf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ng.png b/public/-/emojis/1/flag_ng.png
new file mode 100644
index 00000000000..ea0abeff1a1
--- /dev/null
+++ b/public/-/emojis/1/flag_ng.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ni.png b/public/-/emojis/1/flag_ni.png
new file mode 100644
index 00000000000..772920dfa10
--- /dev/null
+++ b/public/-/emojis/1/flag_ni.png
Binary files differ
diff --git a/public/-/emojis/1/flag_nl.png b/public/-/emojis/1/flag_nl.png
new file mode 100644
index 00000000000..83a0e817e41
--- /dev/null
+++ b/public/-/emojis/1/flag_nl.png
Binary files differ
diff --git a/public/-/emojis/1/flag_no.png b/public/-/emojis/1/flag_no.png
new file mode 100644
index 00000000000..99d3142eb7b
--- /dev/null
+++ b/public/-/emojis/1/flag_no.png
Binary files differ
diff --git a/public/-/emojis/1/flag_np.png b/public/-/emojis/1/flag_np.png
new file mode 100644
index 00000000000..87425a8dfef
--- /dev/null
+++ b/public/-/emojis/1/flag_np.png
Binary files differ
diff --git a/public/-/emojis/1/flag_nr.png b/public/-/emojis/1/flag_nr.png
new file mode 100644
index 00000000000..b3e3a5d5621
--- /dev/null
+++ b/public/-/emojis/1/flag_nr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_nu.png b/public/-/emojis/1/flag_nu.png
new file mode 100644
index 00000000000..f03614443ee
--- /dev/null
+++ b/public/-/emojis/1/flag_nu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_nz.png b/public/-/emojis/1/flag_nz.png
new file mode 100644
index 00000000000..a4eeeab9cd9
--- /dev/null
+++ b/public/-/emojis/1/flag_nz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_om.png b/public/-/emojis/1/flag_om.png
new file mode 100644
index 00000000000..ea824ba31e7
--- /dev/null
+++ b/public/-/emojis/1/flag_om.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pa.png b/public/-/emojis/1/flag_pa.png
new file mode 100644
index 00000000000..c3091d89889
--- /dev/null
+++ b/public/-/emojis/1/flag_pa.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pe.png b/public/-/emojis/1/flag_pe.png
new file mode 100644
index 00000000000..39223aa9dbb
--- /dev/null
+++ b/public/-/emojis/1/flag_pe.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pf.png b/public/-/emojis/1/flag_pf.png
new file mode 100644
index 00000000000..113445f8f6e
--- /dev/null
+++ b/public/-/emojis/1/flag_pf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pg.png b/public/-/emojis/1/flag_pg.png
new file mode 100644
index 00000000000..825e9dcb762
--- /dev/null
+++ b/public/-/emojis/1/flag_pg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ph.png b/public/-/emojis/1/flag_ph.png
new file mode 100644
index 00000000000..8260e15bd2c
--- /dev/null
+++ b/public/-/emojis/1/flag_ph.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pk.png b/public/-/emojis/1/flag_pk.png
new file mode 100644
index 00000000000..a7b6a1c5074
--- /dev/null
+++ b/public/-/emojis/1/flag_pk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pl.png b/public/-/emojis/1/flag_pl.png
new file mode 100644
index 00000000000..19de2edec11
--- /dev/null
+++ b/public/-/emojis/1/flag_pl.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pm.png b/public/-/emojis/1/flag_pm.png
new file mode 100644
index 00000000000..2ca60554193
--- /dev/null
+++ b/public/-/emojis/1/flag_pm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pn.png b/public/-/emojis/1/flag_pn.png
new file mode 100644
index 00000000000..f2263b154bc
--- /dev/null
+++ b/public/-/emojis/1/flag_pn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pr.png b/public/-/emojis/1/flag_pr.png
new file mode 100644
index 00000000000..d0209cddb79
--- /dev/null
+++ b/public/-/emojis/1/flag_pr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ps.png b/public/-/emojis/1/flag_ps.png
new file mode 100644
index 00000000000..7ccab09778b
--- /dev/null
+++ b/public/-/emojis/1/flag_ps.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pt.png b/public/-/emojis/1/flag_pt.png
new file mode 100644
index 00000000000..cc93f27c64b
--- /dev/null
+++ b/public/-/emojis/1/flag_pt.png
Binary files differ
diff --git a/public/-/emojis/1/flag_pw.png b/public/-/emojis/1/flag_pw.png
new file mode 100644
index 00000000000..154b2f12d3c
--- /dev/null
+++ b/public/-/emojis/1/flag_pw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_py.png b/public/-/emojis/1/flag_py.png
new file mode 100644
index 00000000000..662ad2f6ff1
--- /dev/null
+++ b/public/-/emojis/1/flag_py.png
Binary files differ
diff --git a/public/-/emojis/1/flag_qa.png b/public/-/emojis/1/flag_qa.png
new file mode 100644
index 00000000000..a01d8b05cc7
--- /dev/null
+++ b/public/-/emojis/1/flag_qa.png
Binary files differ
diff --git a/public/-/emojis/1/flag_re.png b/public/-/emojis/1/flag_re.png
new file mode 100644
index 00000000000..57f2bbe9df8
--- /dev/null
+++ b/public/-/emojis/1/flag_re.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ro.png b/public/-/emojis/1/flag_ro.png
new file mode 100644
index 00000000000..3e48c447706
--- /dev/null
+++ b/public/-/emojis/1/flag_ro.png
Binary files differ
diff --git a/public/-/emojis/1/flag_rs.png b/public/-/emojis/1/flag_rs.png
new file mode 100644
index 00000000000..9df6c9a5235
--- /dev/null
+++ b/public/-/emojis/1/flag_rs.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ru.png b/public/-/emojis/1/flag_ru.png
new file mode 100644
index 00000000000..e50c9db90e7
--- /dev/null
+++ b/public/-/emojis/1/flag_ru.png
Binary files differ
diff --git a/public/-/emojis/1/flag_rw.png b/public/-/emojis/1/flag_rw.png
new file mode 100644
index 00000000000..c238c874e1d
--- /dev/null
+++ b/public/-/emojis/1/flag_rw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sa.png b/public/-/emojis/1/flag_sa.png
new file mode 100644
index 00000000000..4941be7d198
--- /dev/null
+++ b/public/-/emojis/1/flag_sa.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sb.png b/public/-/emojis/1/flag_sb.png
new file mode 100644
index 00000000000..7d8f1ac6130
--- /dev/null
+++ b/public/-/emojis/1/flag_sb.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sc.png b/public/-/emojis/1/flag_sc.png
new file mode 100644
index 00000000000..6ae4d90765e
--- /dev/null
+++ b/public/-/emojis/1/flag_sc.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sd.png b/public/-/emojis/1/flag_sd.png
new file mode 100644
index 00000000000..963be1b36fb
--- /dev/null
+++ b/public/-/emojis/1/flag_sd.png
Binary files differ
diff --git a/public/-/emojis/1/flag_se.png b/public/-/emojis/1/flag_se.png
new file mode 100644
index 00000000000..fc0d0e0ce89
--- /dev/null
+++ b/public/-/emojis/1/flag_se.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sg.png b/public/-/emojis/1/flag_sg.png
new file mode 100644
index 00000000000..de3c7737c42
--- /dev/null
+++ b/public/-/emojis/1/flag_sg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sh.png b/public/-/emojis/1/flag_sh.png
new file mode 100644
index 00000000000..40cd9e44e96
--- /dev/null
+++ b/public/-/emojis/1/flag_sh.png
Binary files differ
diff --git a/public/-/emojis/1/flag_si.png b/public/-/emojis/1/flag_si.png
new file mode 100644
index 00000000000..e308999dba2
--- /dev/null
+++ b/public/-/emojis/1/flag_si.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sj.png b/public/-/emojis/1/flag_sj.png
new file mode 100644
index 00000000000..5884e648228
--- /dev/null
+++ b/public/-/emojis/1/flag_sj.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sk.png b/public/-/emojis/1/flag_sk.png
new file mode 100644
index 00000000000..4259d0e1418
--- /dev/null
+++ b/public/-/emojis/1/flag_sk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sl.png b/public/-/emojis/1/flag_sl.png
new file mode 100644
index 00000000000..d2cc68830ab
--- /dev/null
+++ b/public/-/emojis/1/flag_sl.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sm.png b/public/-/emojis/1/flag_sm.png
new file mode 100644
index 00000000000..03b8708754e
--- /dev/null
+++ b/public/-/emojis/1/flag_sm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sn.png b/public/-/emojis/1/flag_sn.png
new file mode 100644
index 00000000000..5368bbe93df
--- /dev/null
+++ b/public/-/emojis/1/flag_sn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_so.png b/public/-/emojis/1/flag_so.png
new file mode 100644
index 00000000000..68a0597365a
--- /dev/null
+++ b/public/-/emojis/1/flag_so.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sr.png b/public/-/emojis/1/flag_sr.png
new file mode 100644
index 00000000000..d3251327035
--- /dev/null
+++ b/public/-/emojis/1/flag_sr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ss.png b/public/-/emojis/1/flag_ss.png
new file mode 100644
index 00000000000..122977e798f
--- /dev/null
+++ b/public/-/emojis/1/flag_ss.png
Binary files differ
diff --git a/public/-/emojis/1/flag_st.png b/public/-/emojis/1/flag_st.png
new file mode 100644
index 00000000000..f83a863d612
--- /dev/null
+++ b/public/-/emojis/1/flag_st.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sv.png b/public/-/emojis/1/flag_sv.png
new file mode 100644
index 00000000000..efb83e2f253
--- /dev/null
+++ b/public/-/emojis/1/flag_sv.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sx.png b/public/-/emojis/1/flag_sx.png
new file mode 100644
index 00000000000..94b760fbedf
--- /dev/null
+++ b/public/-/emojis/1/flag_sx.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sy.png b/public/-/emojis/1/flag_sy.png
new file mode 100644
index 00000000000..09a8ee8f78c
--- /dev/null
+++ b/public/-/emojis/1/flag_sy.png
Binary files differ
diff --git a/public/-/emojis/1/flag_sz.png b/public/-/emojis/1/flag_sz.png
new file mode 100644
index 00000000000..f74e82ea1fd
--- /dev/null
+++ b/public/-/emojis/1/flag_sz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ta.png b/public/-/emojis/1/flag_ta.png
new file mode 100644
index 00000000000..b44283e90e2
--- /dev/null
+++ b/public/-/emojis/1/flag_ta.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tc.png b/public/-/emojis/1/flag_tc.png
new file mode 100644
index 00000000000..156b33d1ba6
--- /dev/null
+++ b/public/-/emojis/1/flag_tc.png
Binary files differ
diff --git a/public/-/emojis/1/flag_td.png b/public/-/emojis/1/flag_td.png
new file mode 100644
index 00000000000..ebe7f592828
--- /dev/null
+++ b/public/-/emojis/1/flag_td.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tf.png b/public/-/emojis/1/flag_tf.png
new file mode 100644
index 00000000000..a1a3ad68ee2
--- /dev/null
+++ b/public/-/emojis/1/flag_tf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tg.png b/public/-/emojis/1/flag_tg.png
new file mode 100644
index 00000000000..826b73c9ac5
--- /dev/null
+++ b/public/-/emojis/1/flag_tg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_th.png b/public/-/emojis/1/flag_th.png
new file mode 100644
index 00000000000..93ff542c5a6
--- /dev/null
+++ b/public/-/emojis/1/flag_th.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tj.png b/public/-/emojis/1/flag_tj.png
new file mode 100644
index 00000000000..7a8a0b6190a
--- /dev/null
+++ b/public/-/emojis/1/flag_tj.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tk.png b/public/-/emojis/1/flag_tk.png
new file mode 100644
index 00000000000..2fa5a21b1bb
--- /dev/null
+++ b/public/-/emojis/1/flag_tk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tl.png b/public/-/emojis/1/flag_tl.png
new file mode 100644
index 00000000000..5b120eccc6f
--- /dev/null
+++ b/public/-/emojis/1/flag_tl.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tm.png b/public/-/emojis/1/flag_tm.png
new file mode 100644
index 00000000000..c3c4f532302
--- /dev/null
+++ b/public/-/emojis/1/flag_tm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tn.png b/public/-/emojis/1/flag_tn.png
new file mode 100644
index 00000000000..58ef161229f
--- /dev/null
+++ b/public/-/emojis/1/flag_tn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_to.png b/public/-/emojis/1/flag_to.png
new file mode 100644
index 00000000000..1ffa7bb9d19
--- /dev/null
+++ b/public/-/emojis/1/flag_to.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tr.png b/public/-/emojis/1/flag_tr.png
new file mode 100644
index 00000000000..325251fae88
--- /dev/null
+++ b/public/-/emojis/1/flag_tr.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tt.png b/public/-/emojis/1/flag_tt.png
new file mode 100644
index 00000000000..ed3bb39a300
--- /dev/null
+++ b/public/-/emojis/1/flag_tt.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tv.png b/public/-/emojis/1/flag_tv.png
new file mode 100644
index 00000000000..e82c65c7bb9
--- /dev/null
+++ b/public/-/emojis/1/flag_tv.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tw.png b/public/-/emojis/1/flag_tw.png
new file mode 100644
index 00000000000..3a8f00b5928
--- /dev/null
+++ b/public/-/emojis/1/flag_tw.png
Binary files differ
diff --git a/public/-/emojis/1/flag_tz.png b/public/-/emojis/1/flag_tz.png
new file mode 100644
index 00000000000..2a020853d4e
--- /dev/null
+++ b/public/-/emojis/1/flag_tz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ua.png b/public/-/emojis/1/flag_ua.png
new file mode 100644
index 00000000000..cd84d1bbd36
--- /dev/null
+++ b/public/-/emojis/1/flag_ua.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ug.png b/public/-/emojis/1/flag_ug.png
new file mode 100644
index 00000000000..dc97690eb55
--- /dev/null
+++ b/public/-/emojis/1/flag_ug.png
Binary files differ
diff --git a/public/-/emojis/1/flag_um.png b/public/-/emojis/1/flag_um.png
new file mode 100644
index 00000000000..4a7ee3cdf13
--- /dev/null
+++ b/public/-/emojis/1/flag_um.png
Binary files differ
diff --git a/public/-/emojis/1/flag_us.png b/public/-/emojis/1/flag_us.png
new file mode 100644
index 00000000000..9f730305860
--- /dev/null
+++ b/public/-/emojis/1/flag_us.png
Binary files differ
diff --git a/public/-/emojis/1/flag_uy.png b/public/-/emojis/1/flag_uy.png
new file mode 100644
index 00000000000..b8002a697a6
--- /dev/null
+++ b/public/-/emojis/1/flag_uy.png
Binary files differ
diff --git a/public/-/emojis/1/flag_uz.png b/public/-/emojis/1/flag_uz.png
new file mode 100644
index 00000000000..d56ca9bc424
--- /dev/null
+++ b/public/-/emojis/1/flag_uz.png
Binary files differ
diff --git a/public/-/emojis/1/flag_va.png b/public/-/emojis/1/flag_va.png
new file mode 100644
index 00000000000..ddaf5e3141b
--- /dev/null
+++ b/public/-/emojis/1/flag_va.png
Binary files differ
diff --git a/public/-/emojis/1/flag_vc.png b/public/-/emojis/1/flag_vc.png
new file mode 100644
index 00000000000..43703c62a71
--- /dev/null
+++ b/public/-/emojis/1/flag_vc.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ve.png b/public/-/emojis/1/flag_ve.png
new file mode 100644
index 00000000000..1b62796824e
--- /dev/null
+++ b/public/-/emojis/1/flag_ve.png
Binary files differ
diff --git a/public/-/emojis/1/flag_vg.png b/public/-/emojis/1/flag_vg.png
new file mode 100644
index 00000000000..536f780f1c0
--- /dev/null
+++ b/public/-/emojis/1/flag_vg.png
Binary files differ
diff --git a/public/-/emojis/1/flag_vi.png b/public/-/emojis/1/flag_vi.png
new file mode 100644
index 00000000000..64102012cfe
--- /dev/null
+++ b/public/-/emojis/1/flag_vi.png
Binary files differ
diff --git a/public/-/emojis/1/flag_vn.png b/public/-/emojis/1/flag_vn.png
new file mode 100644
index 00000000000..427036046b6
--- /dev/null
+++ b/public/-/emojis/1/flag_vn.png
Binary files differ
diff --git a/public/-/emojis/1/flag_vu.png b/public/-/emojis/1/flag_vu.png
new file mode 100644
index 00000000000..706eba44070
--- /dev/null
+++ b/public/-/emojis/1/flag_vu.png
Binary files differ
diff --git a/public/-/emojis/1/flag_wf.png b/public/-/emojis/1/flag_wf.png
new file mode 100644
index 00000000000..70c761036bd
--- /dev/null
+++ b/public/-/emojis/1/flag_wf.png
Binary files differ
diff --git a/public/-/emojis/1/flag_white.png b/public/-/emojis/1/flag_white.png
new file mode 100644
index 00000000000..86d6e96d5e9
--- /dev/null
+++ b/public/-/emojis/1/flag_white.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ws.png b/public/-/emojis/1/flag_ws.png
new file mode 100644
index 00000000000..a1ea0703141
--- /dev/null
+++ b/public/-/emojis/1/flag_ws.png
Binary files differ
diff --git a/public/-/emojis/1/flag_xk.png b/public/-/emojis/1/flag_xk.png
new file mode 100644
index 00000000000..e587a446632
--- /dev/null
+++ b/public/-/emojis/1/flag_xk.png
Binary files differ
diff --git a/public/-/emojis/1/flag_ye.png b/public/-/emojis/1/flag_ye.png
new file mode 100644
index 00000000000..eadfebd5f67
--- /dev/null
+++ b/public/-/emojis/1/flag_ye.png
Binary files differ
diff --git a/public/-/emojis/1/flag_yt.png b/public/-/emojis/1/flag_yt.png
new file mode 100644
index 00000000000..c81fa6d886e
--- /dev/null
+++ b/public/-/emojis/1/flag_yt.png
Binary files differ
diff --git a/public/-/emojis/1/flag_za.png b/public/-/emojis/1/flag_za.png
new file mode 100644
index 00000000000..f397ef5072f
--- /dev/null
+++ b/public/-/emojis/1/flag_za.png
Binary files differ
diff --git a/public/-/emojis/1/flag_zm.png b/public/-/emojis/1/flag_zm.png
new file mode 100644
index 00000000000..2494a31f662
--- /dev/null
+++ b/public/-/emojis/1/flag_zm.png
Binary files differ
diff --git a/public/-/emojis/1/flag_zw.png b/public/-/emojis/1/flag_zw.png
new file mode 100644
index 00000000000..e09b9652be6
--- /dev/null
+++ b/public/-/emojis/1/flag_zw.png
Binary files differ
diff --git a/public/-/emojis/1/flags.png b/public/-/emojis/1/flags.png
new file mode 100644
index 00000000000..3b451035a3a
--- /dev/null
+++ b/public/-/emojis/1/flags.png
Binary files differ
diff --git a/public/-/emojis/1/flashlight.png b/public/-/emojis/1/flashlight.png
new file mode 100644
index 00000000000..eee36c25067
--- /dev/null
+++ b/public/-/emojis/1/flashlight.png
Binary files differ
diff --git a/public/-/emojis/1/fleur-de-lis.png b/public/-/emojis/1/fleur-de-lis.png
new file mode 100644
index 00000000000..c9250d27fa7
--- /dev/null
+++ b/public/-/emojis/1/fleur-de-lis.png
Binary files differ
diff --git a/public/-/emojis/1/floppy_disk.png b/public/-/emojis/1/floppy_disk.png
new file mode 100644
index 00000000000..072a76d3c13
--- /dev/null
+++ b/public/-/emojis/1/floppy_disk.png
Binary files differ
diff --git a/public/-/emojis/1/flower_playing_cards.png b/public/-/emojis/1/flower_playing_cards.png
new file mode 100644
index 00000000000..6766b044d95
--- /dev/null
+++ b/public/-/emojis/1/flower_playing_cards.png
Binary files differ
diff --git a/public/-/emojis/1/flushed.png b/public/-/emojis/1/flushed.png
new file mode 100644
index 00000000000..829220bc470
--- /dev/null
+++ b/public/-/emojis/1/flushed.png
Binary files differ
diff --git a/public/-/emojis/1/fog.png b/public/-/emojis/1/fog.png
new file mode 100644
index 00000000000..4e73c2de272
--- /dev/null
+++ b/public/-/emojis/1/fog.png
Binary files differ
diff --git a/public/-/emojis/1/foggy.png b/public/-/emojis/1/foggy.png
new file mode 100644
index 00000000000..57702d8d3ac
--- /dev/null
+++ b/public/-/emojis/1/foggy.png
Binary files differ
diff --git a/public/-/emojis/1/football.png b/public/-/emojis/1/football.png
new file mode 100644
index 00000000000..10366f41fce
--- /dev/null
+++ b/public/-/emojis/1/football.png
Binary files differ
diff --git a/public/-/emojis/1/footprints.png b/public/-/emojis/1/footprints.png
new file mode 100644
index 00000000000..b2673c5a1a8
--- /dev/null
+++ b/public/-/emojis/1/footprints.png
Binary files differ
diff --git a/public/-/emojis/1/fork_and_knife.png b/public/-/emojis/1/fork_and_knife.png
new file mode 100644
index 00000000000..09f1feaea1c
--- /dev/null
+++ b/public/-/emojis/1/fork_and_knife.png
Binary files differ
diff --git a/public/-/emojis/1/fork_knife_plate.png b/public/-/emojis/1/fork_knife_plate.png
new file mode 100644
index 00000000000..7411755f708
--- /dev/null
+++ b/public/-/emojis/1/fork_knife_plate.png
Binary files differ
diff --git a/public/-/emojis/1/fountain.png b/public/-/emojis/1/fountain.png
new file mode 100644
index 00000000000..293f5d91c0f
--- /dev/null
+++ b/public/-/emojis/1/fountain.png
Binary files differ
diff --git a/public/-/emojis/1/four.png b/public/-/emojis/1/four.png
new file mode 100644
index 00000000000..b0e914aac45
--- /dev/null
+++ b/public/-/emojis/1/four.png
Binary files differ
diff --git a/public/-/emojis/1/four_leaf_clover.png b/public/-/emojis/1/four_leaf_clover.png
new file mode 100644
index 00000000000..fdedfcc2b4e
--- /dev/null
+++ b/public/-/emojis/1/four_leaf_clover.png
Binary files differ
diff --git a/public/-/emojis/1/fox.png b/public/-/emojis/1/fox.png
new file mode 100644
index 00000000000..1ab339bf054
--- /dev/null
+++ b/public/-/emojis/1/fox.png
Binary files differ
diff --git a/public/-/emojis/1/frame_photo.png b/public/-/emojis/1/frame_photo.png
new file mode 100644
index 00000000000..9fe84607bfd
--- /dev/null
+++ b/public/-/emojis/1/frame_photo.png
Binary files differ
diff --git a/public/-/emojis/1/free.png b/public/-/emojis/1/free.png
new file mode 100644
index 00000000000..b71956eb48a
--- /dev/null
+++ b/public/-/emojis/1/free.png
Binary files differ
diff --git a/public/-/emojis/1/french_bread.png b/public/-/emojis/1/french_bread.png
new file mode 100644
index 00000000000..4c2c5639822
--- /dev/null
+++ b/public/-/emojis/1/french_bread.png
Binary files differ
diff --git a/public/-/emojis/1/fried_shrimp.png b/public/-/emojis/1/fried_shrimp.png
new file mode 100644
index 00000000000..752ba7f1398
--- /dev/null
+++ b/public/-/emojis/1/fried_shrimp.png
Binary files differ
diff --git a/public/-/emojis/1/fries.png b/public/-/emojis/1/fries.png
new file mode 100644
index 00000000000..4e2a4caacef
--- /dev/null
+++ b/public/-/emojis/1/fries.png
Binary files differ
diff --git a/public/-/emojis/1/frog.png b/public/-/emojis/1/frog.png
new file mode 100644
index 00000000000..8825d1ad577
--- /dev/null
+++ b/public/-/emojis/1/frog.png
Binary files differ
diff --git a/public/-/emojis/1/frowning.png b/public/-/emojis/1/frowning.png
new file mode 100644
index 00000000000..43ab6b0a1c1
--- /dev/null
+++ b/public/-/emojis/1/frowning.png
Binary files differ
diff --git a/public/-/emojis/1/frowning2.png b/public/-/emojis/1/frowning2.png
new file mode 100644
index 00000000000..6ae71f233b9
--- /dev/null
+++ b/public/-/emojis/1/frowning2.png
Binary files differ
diff --git a/public/-/emojis/1/fuelpump.png b/public/-/emojis/1/fuelpump.png
new file mode 100644
index 00000000000..05b18794474
--- /dev/null
+++ b/public/-/emojis/1/fuelpump.png
Binary files differ
diff --git a/public/-/emojis/1/full_moon.png b/public/-/emojis/1/full_moon.png
new file mode 100644
index 00000000000..c9a2d6aa7c9
--- /dev/null
+++ b/public/-/emojis/1/full_moon.png
Binary files differ
diff --git a/public/-/emojis/1/full_moon_with_face.png b/public/-/emojis/1/full_moon_with_face.png
new file mode 100644
index 00000000000..a5c25bbaf64
--- /dev/null
+++ b/public/-/emojis/1/full_moon_with_face.png
Binary files differ
diff --git a/public/-/emojis/1/game_die.png b/public/-/emojis/1/game_die.png
new file mode 100644
index 00000000000..ad3626fe5e5
--- /dev/null
+++ b/public/-/emojis/1/game_die.png
Binary files differ
diff --git a/public/-/emojis/1/gay_pride_flag.png b/public/-/emojis/1/gay_pride_flag.png
new file mode 100644
index 00000000000..1bec5f2ffd7
--- /dev/null
+++ b/public/-/emojis/1/gay_pride_flag.png
Binary files differ
diff --git a/public/-/emojis/1/gear.png b/public/-/emojis/1/gear.png
new file mode 100644
index 00000000000..2a1cc2c0ff4
--- /dev/null
+++ b/public/-/emojis/1/gear.png
Binary files differ
diff --git a/public/-/emojis/1/gem.png b/public/-/emojis/1/gem.png
new file mode 100644
index 00000000000..db122d26a19
--- /dev/null
+++ b/public/-/emojis/1/gem.png
Binary files differ
diff --git a/public/-/emojis/1/gemini.png b/public/-/emojis/1/gemini.png
new file mode 100644
index 00000000000..1a09698cf00
--- /dev/null
+++ b/public/-/emojis/1/gemini.png
Binary files differ
diff --git a/public/-/emojis/1/ghost.png b/public/-/emojis/1/ghost.png
new file mode 100644
index 00000000000..5650bc0ed18
--- /dev/null
+++ b/public/-/emojis/1/ghost.png
Binary files differ
diff --git a/public/-/emojis/1/gift.png b/public/-/emojis/1/gift.png
new file mode 100644
index 00000000000..844e2164560
--- /dev/null
+++ b/public/-/emojis/1/gift.png
Binary files differ
diff --git a/public/-/emojis/1/gift_heart.png b/public/-/emojis/1/gift_heart.png
new file mode 100644
index 00000000000..902ceafe4d1
--- /dev/null
+++ b/public/-/emojis/1/gift_heart.png
Binary files differ
diff --git a/public/-/emojis/1/girl.png b/public/-/emojis/1/girl.png
new file mode 100644
index 00000000000..dc1d4d08b39
--- /dev/null
+++ b/public/-/emojis/1/girl.png
Binary files differ
diff --git a/public/-/emojis/1/girl_tone1.png b/public/-/emojis/1/girl_tone1.png
new file mode 100644
index 00000000000..bb667e88651
--- /dev/null
+++ b/public/-/emojis/1/girl_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/girl_tone2.png b/public/-/emojis/1/girl_tone2.png
new file mode 100644
index 00000000000..a59ed4a3f0d
--- /dev/null
+++ b/public/-/emojis/1/girl_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/girl_tone3.png b/public/-/emojis/1/girl_tone3.png
new file mode 100644
index 00000000000..517e7f2a7b0
--- /dev/null
+++ b/public/-/emojis/1/girl_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/girl_tone4.png b/public/-/emojis/1/girl_tone4.png
new file mode 100644
index 00000000000..542d96c8487
--- /dev/null
+++ b/public/-/emojis/1/girl_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/girl_tone5.png b/public/-/emojis/1/girl_tone5.png
new file mode 100644
index 00000000000..66b7c28c2df
--- /dev/null
+++ b/public/-/emojis/1/girl_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/globe_with_meridians.png b/public/-/emojis/1/globe_with_meridians.png
new file mode 100644
index 00000000000..82450c1a4ba
--- /dev/null
+++ b/public/-/emojis/1/globe_with_meridians.png
Binary files differ
diff --git a/public/-/emojis/1/goal.png b/public/-/emojis/1/goal.png
new file mode 100644
index 00000000000..df3a53da0fb
--- /dev/null
+++ b/public/-/emojis/1/goal.png
Binary files differ
diff --git a/public/-/emojis/1/goat.png b/public/-/emojis/1/goat.png
new file mode 100644
index 00000000000..f9d9e38a128
--- /dev/null
+++ b/public/-/emojis/1/goat.png
Binary files differ
diff --git a/public/-/emojis/1/golf.png b/public/-/emojis/1/golf.png
new file mode 100644
index 00000000000..f65a21d8a46
--- /dev/null
+++ b/public/-/emojis/1/golf.png
Binary files differ
diff --git a/public/-/emojis/1/golfer.png b/public/-/emojis/1/golfer.png
new file mode 100644
index 00000000000..39c552de86d
--- /dev/null
+++ b/public/-/emojis/1/golfer.png
Binary files differ
diff --git a/public/-/emojis/1/gorilla.png b/public/-/emojis/1/gorilla.png
new file mode 100644
index 00000000000..acc51e13622
--- /dev/null
+++ b/public/-/emojis/1/gorilla.png
Binary files differ
diff --git a/public/-/emojis/1/grapes.png b/public/-/emojis/1/grapes.png
new file mode 100644
index 00000000000..30d22218896
--- /dev/null
+++ b/public/-/emojis/1/grapes.png
Binary files differ
diff --git a/public/-/emojis/1/green_apple.png b/public/-/emojis/1/green_apple.png
new file mode 100644
index 00000000000..5fd51bd3915
--- /dev/null
+++ b/public/-/emojis/1/green_apple.png
Binary files differ
diff --git a/public/-/emojis/1/green_book.png b/public/-/emojis/1/green_book.png
new file mode 100644
index 00000000000..e5e411cf3b5
--- /dev/null
+++ b/public/-/emojis/1/green_book.png
Binary files differ
diff --git a/public/-/emojis/1/green_heart.png b/public/-/emojis/1/green_heart.png
new file mode 100644
index 00000000000..c52d60a58be
--- /dev/null
+++ b/public/-/emojis/1/green_heart.png
Binary files differ
diff --git a/public/-/emojis/1/grey_exclamation.png b/public/-/emojis/1/grey_exclamation.png
new file mode 100644
index 00000000000..9b64da8bf7f
--- /dev/null
+++ b/public/-/emojis/1/grey_exclamation.png
Binary files differ
diff --git a/public/-/emojis/1/grey_question.png b/public/-/emojis/1/grey_question.png
new file mode 100644
index 00000000000..6e7824c75f6
--- /dev/null
+++ b/public/-/emojis/1/grey_question.png
Binary files differ
diff --git a/public/-/emojis/1/grimacing.png b/public/-/emojis/1/grimacing.png
new file mode 100644
index 00000000000..871b2f071c9
--- /dev/null
+++ b/public/-/emojis/1/grimacing.png
Binary files differ
diff --git a/public/-/emojis/1/grin.png b/public/-/emojis/1/grin.png
new file mode 100644
index 00000000000..418d94c811b
--- /dev/null
+++ b/public/-/emojis/1/grin.png
Binary files differ
diff --git a/public/-/emojis/1/grinning.png b/public/-/emojis/1/grinning.png
new file mode 100644
index 00000000000..3e8e0dab78c
--- /dev/null
+++ b/public/-/emojis/1/grinning.png
Binary files differ
diff --git a/public/-/emojis/1/guardsman.png b/public/-/emojis/1/guardsman.png
new file mode 100644
index 00000000000..8d7ab3c473c
--- /dev/null
+++ b/public/-/emojis/1/guardsman.png
Binary files differ
diff --git a/public/-/emojis/1/guardsman_tone1.png b/public/-/emojis/1/guardsman_tone1.png
new file mode 100644
index 00000000000..cea9ba27468
--- /dev/null
+++ b/public/-/emojis/1/guardsman_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/guardsman_tone2.png b/public/-/emojis/1/guardsman_tone2.png
new file mode 100644
index 00000000000..037464e4028
--- /dev/null
+++ b/public/-/emojis/1/guardsman_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/guardsman_tone3.png b/public/-/emojis/1/guardsman_tone3.png
new file mode 100644
index 00000000000..0f6726fbe87
--- /dev/null
+++ b/public/-/emojis/1/guardsman_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/guardsman_tone4.png b/public/-/emojis/1/guardsman_tone4.png
new file mode 100644
index 00000000000..85fcf9a3b97
--- /dev/null
+++ b/public/-/emojis/1/guardsman_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/guardsman_tone5.png b/public/-/emojis/1/guardsman_tone5.png
new file mode 100644
index 00000000000..e5f9ca7d5a2
--- /dev/null
+++ b/public/-/emojis/1/guardsman_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/guitar.png b/public/-/emojis/1/guitar.png
new file mode 100644
index 00000000000..43d752f1e3d
--- /dev/null
+++ b/public/-/emojis/1/guitar.png
Binary files differ
diff --git a/public/-/emojis/1/gun.png b/public/-/emojis/1/gun.png
new file mode 100644
index 00000000000..89c5c244c7b
--- /dev/null
+++ b/public/-/emojis/1/gun.png
Binary files differ
diff --git a/public/-/emojis/1/haircut.png b/public/-/emojis/1/haircut.png
new file mode 100644
index 00000000000..91266b12930
--- /dev/null
+++ b/public/-/emojis/1/haircut.png
Binary files differ
diff --git a/public/-/emojis/1/haircut_tone1.png b/public/-/emojis/1/haircut_tone1.png
new file mode 100644
index 00000000000..c743b74abeb
--- /dev/null
+++ b/public/-/emojis/1/haircut_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/haircut_tone2.png b/public/-/emojis/1/haircut_tone2.png
new file mode 100644
index 00000000000..f144f8e55ce
--- /dev/null
+++ b/public/-/emojis/1/haircut_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/haircut_tone3.png b/public/-/emojis/1/haircut_tone3.png
new file mode 100644
index 00000000000..d5ad19563ac
--- /dev/null
+++ b/public/-/emojis/1/haircut_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/haircut_tone4.png b/public/-/emojis/1/haircut_tone4.png
new file mode 100644
index 00000000000..244fd3af008
--- /dev/null
+++ b/public/-/emojis/1/haircut_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/haircut_tone5.png b/public/-/emojis/1/haircut_tone5.png
new file mode 100644
index 00000000000..20a94a88623
--- /dev/null
+++ b/public/-/emojis/1/haircut_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/hamburger.png b/public/-/emojis/1/hamburger.png
new file mode 100644
index 00000000000..3573b28a1fd
--- /dev/null
+++ b/public/-/emojis/1/hamburger.png
Binary files differ
diff --git a/public/-/emojis/1/hammer.png b/public/-/emojis/1/hammer.png
new file mode 100644
index 00000000000..00736cce47d
--- /dev/null
+++ b/public/-/emojis/1/hammer.png
Binary files differ
diff --git a/public/-/emojis/1/hammer_pick.png b/public/-/emojis/1/hammer_pick.png
new file mode 100644
index 00000000000..3bee30ec588
--- /dev/null
+++ b/public/-/emojis/1/hammer_pick.png
Binary files differ
diff --git a/public/-/emojis/1/hamster.png b/public/-/emojis/1/hamster.png
new file mode 100644
index 00000000000..9a04388e4e7
--- /dev/null
+++ b/public/-/emojis/1/hamster.png
Binary files differ
diff --git a/public/-/emojis/1/hand_splayed.png b/public/-/emojis/1/hand_splayed.png
new file mode 100644
index 00000000000..fb5ae8ebb5a
--- /dev/null
+++ b/public/-/emojis/1/hand_splayed.png
Binary files differ
diff --git a/public/-/emojis/1/hand_splayed_tone1.png b/public/-/emojis/1/hand_splayed_tone1.png
new file mode 100644
index 00000000000..a7888e6bd23
--- /dev/null
+++ b/public/-/emojis/1/hand_splayed_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/hand_splayed_tone2.png b/public/-/emojis/1/hand_splayed_tone2.png
new file mode 100644
index 00000000000..cc10fbc272d
--- /dev/null
+++ b/public/-/emojis/1/hand_splayed_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/hand_splayed_tone3.png b/public/-/emojis/1/hand_splayed_tone3.png
new file mode 100644
index 00000000000..707236ae8a4
--- /dev/null
+++ b/public/-/emojis/1/hand_splayed_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/hand_splayed_tone4.png b/public/-/emojis/1/hand_splayed_tone4.png
new file mode 100644
index 00000000000..1430df9c61f
--- /dev/null
+++ b/public/-/emojis/1/hand_splayed_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/hand_splayed_tone5.png b/public/-/emojis/1/hand_splayed_tone5.png
new file mode 100644
index 00000000000..80bec971b6b
--- /dev/null
+++ b/public/-/emojis/1/hand_splayed_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/handbag.png b/public/-/emojis/1/handbag.png
new file mode 100644
index 00000000000..cbf75c5d25e
--- /dev/null
+++ b/public/-/emojis/1/handbag.png
Binary files differ
diff --git a/public/-/emojis/1/handball.png b/public/-/emojis/1/handball.png
new file mode 100644
index 00000000000..1152f1344c7
--- /dev/null
+++ b/public/-/emojis/1/handball.png
Binary files differ
diff --git a/public/-/emojis/1/handball_tone1.png b/public/-/emojis/1/handball_tone1.png
new file mode 100644
index 00000000000..c26cac2df98
--- /dev/null
+++ b/public/-/emojis/1/handball_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/handball_tone2.png b/public/-/emojis/1/handball_tone2.png
new file mode 100644
index 00000000000..7baaf95a9a2
--- /dev/null
+++ b/public/-/emojis/1/handball_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/handball_tone3.png b/public/-/emojis/1/handball_tone3.png
new file mode 100644
index 00000000000..0e3a37c3d40
--- /dev/null
+++ b/public/-/emojis/1/handball_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/handball_tone4.png b/public/-/emojis/1/handball_tone4.png
new file mode 100644
index 00000000000..e1233f38266
--- /dev/null
+++ b/public/-/emojis/1/handball_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/handball_tone5.png b/public/-/emojis/1/handball_tone5.png
new file mode 100644
index 00000000000..6b1eb9b64b0
--- /dev/null
+++ b/public/-/emojis/1/handball_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/handshake.png b/public/-/emojis/1/handshake.png
new file mode 100644
index 00000000000..c5d35fd8138
--- /dev/null
+++ b/public/-/emojis/1/handshake.png
Binary files differ
diff --git a/public/-/emojis/1/handshake_tone1.png b/public/-/emojis/1/handshake_tone1.png
new file mode 100644
index 00000000000..8f8fbb9bdca
--- /dev/null
+++ b/public/-/emojis/1/handshake_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/handshake_tone2.png b/public/-/emojis/1/handshake_tone2.png
new file mode 100644
index 00000000000..336a77a6d78
--- /dev/null
+++ b/public/-/emojis/1/handshake_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/handshake_tone3.png b/public/-/emojis/1/handshake_tone3.png
new file mode 100644
index 00000000000..95f62d4fecd
--- /dev/null
+++ b/public/-/emojis/1/handshake_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/handshake_tone4.png b/public/-/emojis/1/handshake_tone4.png
new file mode 100644
index 00000000000..2b0a6433886
--- /dev/null
+++ b/public/-/emojis/1/handshake_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/handshake_tone5.png b/public/-/emojis/1/handshake_tone5.png
new file mode 100644
index 00000000000..40189ee68e4
--- /dev/null
+++ b/public/-/emojis/1/handshake_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/hash.png b/public/-/emojis/1/hash.png
new file mode 100644
index 00000000000..6e26f0070b0
--- /dev/null
+++ b/public/-/emojis/1/hash.png
Binary files differ
diff --git a/public/-/emojis/1/hatched_chick.png b/public/-/emojis/1/hatched_chick.png
new file mode 100644
index 00000000000..31dfb511e0e
--- /dev/null
+++ b/public/-/emojis/1/hatched_chick.png
Binary files differ
diff --git a/public/-/emojis/1/hatching_chick.png b/public/-/emojis/1/hatching_chick.png
new file mode 100644
index 00000000000..c5b0e8f3bcc
--- /dev/null
+++ b/public/-/emojis/1/hatching_chick.png
Binary files differ
diff --git a/public/-/emojis/1/head_bandage.png b/public/-/emojis/1/head_bandage.png
new file mode 100644
index 00000000000..0be723085e0
--- /dev/null
+++ b/public/-/emojis/1/head_bandage.png
Binary files differ
diff --git a/public/-/emojis/1/headphones.png b/public/-/emojis/1/headphones.png
new file mode 100644
index 00000000000..e9fd34041d8
--- /dev/null
+++ b/public/-/emojis/1/headphones.png
Binary files differ
diff --git a/public/-/emojis/1/hear_no_evil.png b/public/-/emojis/1/hear_no_evil.png
new file mode 100644
index 00000000000..74b6be0c6c5
--- /dev/null
+++ b/public/-/emojis/1/hear_no_evil.png
Binary files differ
diff --git a/public/-/emojis/1/heart.png b/public/-/emojis/1/heart.png
new file mode 100644
index 00000000000..638cb72dc4e
--- /dev/null
+++ b/public/-/emojis/1/heart.png
Binary files differ
diff --git a/public/-/emojis/1/heart_decoration.png b/public/-/emojis/1/heart_decoration.png
new file mode 100644
index 00000000000..5443f60bc63
--- /dev/null
+++ b/public/-/emojis/1/heart_decoration.png
Binary files differ
diff --git a/public/-/emojis/1/heart_exclamation.png b/public/-/emojis/1/heart_exclamation.png
new file mode 100644
index 00000000000..91b520be40b
--- /dev/null
+++ b/public/-/emojis/1/heart_exclamation.png
Binary files differ
diff --git a/public/-/emojis/1/heart_eyes.png b/public/-/emojis/1/heart_eyes.png
new file mode 100644
index 00000000000..73fbee29d4e
--- /dev/null
+++ b/public/-/emojis/1/heart_eyes.png
Binary files differ
diff --git a/public/-/emojis/1/heart_eyes_cat.png b/public/-/emojis/1/heart_eyes_cat.png
new file mode 100644
index 00000000000..bc5a833f9a1
--- /dev/null
+++ b/public/-/emojis/1/heart_eyes_cat.png
Binary files differ
diff --git a/public/-/emojis/1/heartbeat.png b/public/-/emojis/1/heartbeat.png
new file mode 100644
index 00000000000..0bcf2d1d567
--- /dev/null
+++ b/public/-/emojis/1/heartbeat.png
Binary files differ
diff --git a/public/-/emojis/1/heartpulse.png b/public/-/emojis/1/heartpulse.png
new file mode 100644
index 00000000000..d6e694e972f
--- /dev/null
+++ b/public/-/emojis/1/heartpulse.png
Binary files differ
diff --git a/public/-/emojis/1/hearts.png b/public/-/emojis/1/hearts.png
new file mode 100644
index 00000000000..393c3ed5267
--- /dev/null
+++ b/public/-/emojis/1/hearts.png
Binary files differ
diff --git a/public/-/emojis/1/heavy_check_mark.png b/public/-/emojis/1/heavy_check_mark.png
new file mode 100644
index 00000000000..03bd695377e
--- /dev/null
+++ b/public/-/emojis/1/heavy_check_mark.png
Binary files differ
diff --git a/public/-/emojis/1/heavy_division_sign.png b/public/-/emojis/1/heavy_division_sign.png
new file mode 100644
index 00000000000..df32ab21bea
--- /dev/null
+++ b/public/-/emojis/1/heavy_division_sign.png
Binary files differ
diff --git a/public/-/emojis/1/heavy_dollar_sign.png b/public/-/emojis/1/heavy_dollar_sign.png
new file mode 100644
index 00000000000..ef2c2e20590
--- /dev/null
+++ b/public/-/emojis/1/heavy_dollar_sign.png
Binary files differ
diff --git a/public/-/emojis/1/heavy_minus_sign.png b/public/-/emojis/1/heavy_minus_sign.png
new file mode 100644
index 00000000000..054211caf12
--- /dev/null
+++ b/public/-/emojis/1/heavy_minus_sign.png
Binary files differ
diff --git a/public/-/emojis/1/heavy_multiplication_x.png b/public/-/emojis/1/heavy_multiplication_x.png
new file mode 100644
index 00000000000..e47cc1b685d
--- /dev/null
+++ b/public/-/emojis/1/heavy_multiplication_x.png
Binary files differ
diff --git a/public/-/emojis/1/heavy_plus_sign.png b/public/-/emojis/1/heavy_plus_sign.png
new file mode 100644
index 00000000000..40799798aaf
--- /dev/null
+++ b/public/-/emojis/1/heavy_plus_sign.png
Binary files differ
diff --git a/public/-/emojis/1/helicopter.png b/public/-/emojis/1/helicopter.png
new file mode 100644
index 00000000000..7ec5f39a51a
--- /dev/null
+++ b/public/-/emojis/1/helicopter.png
Binary files differ
diff --git a/public/-/emojis/1/helmet_with_cross.png b/public/-/emojis/1/helmet_with_cross.png
new file mode 100644
index 00000000000..7140a676038
--- /dev/null
+++ b/public/-/emojis/1/helmet_with_cross.png
Binary files differ
diff --git a/public/-/emojis/1/herb.png b/public/-/emojis/1/herb.png
new file mode 100644
index 00000000000..d984d1562bb
--- /dev/null
+++ b/public/-/emojis/1/herb.png
Binary files differ
diff --git a/public/-/emojis/1/hibiscus.png b/public/-/emojis/1/hibiscus.png
new file mode 100644
index 00000000000..39dd3524233
--- /dev/null
+++ b/public/-/emojis/1/hibiscus.png
Binary files differ
diff --git a/public/-/emojis/1/high_brightness.png b/public/-/emojis/1/high_brightness.png
new file mode 100644
index 00000000000..c41f2d5fd50
--- /dev/null
+++ b/public/-/emojis/1/high_brightness.png
Binary files differ
diff --git a/public/-/emojis/1/high_heel.png b/public/-/emojis/1/high_heel.png
new file mode 100644
index 00000000000..b331cbccc9d
--- /dev/null
+++ b/public/-/emojis/1/high_heel.png
Binary files differ
diff --git a/public/-/emojis/1/hockey.png b/public/-/emojis/1/hockey.png
new file mode 100644
index 00000000000..be94e9cbf73
--- /dev/null
+++ b/public/-/emojis/1/hockey.png
Binary files differ
diff --git a/public/-/emojis/1/hole.png b/public/-/emojis/1/hole.png
new file mode 100644
index 00000000000..517d2ae0deb
--- /dev/null
+++ b/public/-/emojis/1/hole.png
Binary files differ
diff --git a/public/-/emojis/1/homes.png b/public/-/emojis/1/homes.png
new file mode 100644
index 00000000000..6ab4a2a2651
--- /dev/null
+++ b/public/-/emojis/1/homes.png
Binary files differ
diff --git a/public/-/emojis/1/honey_pot.png b/public/-/emojis/1/honey_pot.png
new file mode 100644
index 00000000000..9d8f592955e
--- /dev/null
+++ b/public/-/emojis/1/honey_pot.png
Binary files differ
diff --git a/public/-/emojis/1/horse.png b/public/-/emojis/1/horse.png
new file mode 100644
index 00000000000..7cb1172f4e4
--- /dev/null
+++ b/public/-/emojis/1/horse.png
Binary files differ
diff --git a/public/-/emojis/1/horse_racing.png b/public/-/emojis/1/horse_racing.png
new file mode 100644
index 00000000000..addf9edac56
--- /dev/null
+++ b/public/-/emojis/1/horse_racing.png
Binary files differ
diff --git a/public/-/emojis/1/horse_racing_tone1.png b/public/-/emojis/1/horse_racing_tone1.png
new file mode 100644
index 00000000000..e9bf4092e98
--- /dev/null
+++ b/public/-/emojis/1/horse_racing_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/horse_racing_tone2.png b/public/-/emojis/1/horse_racing_tone2.png
new file mode 100644
index 00000000000..031bbc3d867
--- /dev/null
+++ b/public/-/emojis/1/horse_racing_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/horse_racing_tone3.png b/public/-/emojis/1/horse_racing_tone3.png
new file mode 100644
index 00000000000..b40ef891f9b
--- /dev/null
+++ b/public/-/emojis/1/horse_racing_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/horse_racing_tone4.png b/public/-/emojis/1/horse_racing_tone4.png
new file mode 100644
index 00000000000..e286cb85065
--- /dev/null
+++ b/public/-/emojis/1/horse_racing_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/horse_racing_tone5.png b/public/-/emojis/1/horse_racing_tone5.png
new file mode 100644
index 00000000000..453c51c6007
--- /dev/null
+++ b/public/-/emojis/1/horse_racing_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/hospital.png b/public/-/emojis/1/hospital.png
new file mode 100644
index 00000000000..1cbce4ae767
--- /dev/null
+++ b/public/-/emojis/1/hospital.png
Binary files differ
diff --git a/public/-/emojis/1/hot_pepper.png b/public/-/emojis/1/hot_pepper.png
new file mode 100644
index 00000000000..266675bd577
--- /dev/null
+++ b/public/-/emojis/1/hot_pepper.png
Binary files differ
diff --git a/public/-/emojis/1/hotdog.png b/public/-/emojis/1/hotdog.png
new file mode 100644
index 00000000000..3c3354d94cb
--- /dev/null
+++ b/public/-/emojis/1/hotdog.png
Binary files differ
diff --git a/public/-/emojis/1/hotel.png b/public/-/emojis/1/hotel.png
new file mode 100644
index 00000000000..ea8f4c4979a
--- /dev/null
+++ b/public/-/emojis/1/hotel.png
Binary files differ
diff --git a/public/-/emojis/1/hotsprings.png b/public/-/emojis/1/hotsprings.png
new file mode 100644
index 00000000000..3d9df2d9475
--- /dev/null
+++ b/public/-/emojis/1/hotsprings.png
Binary files differ
diff --git a/public/-/emojis/1/hourglass.png b/public/-/emojis/1/hourglass.png
new file mode 100644
index 00000000000..a5db2d1d3f4
--- /dev/null
+++ b/public/-/emojis/1/hourglass.png
Binary files differ
diff --git a/public/-/emojis/1/hourglass_flowing_sand.png b/public/-/emojis/1/hourglass_flowing_sand.png
new file mode 100644
index 00000000000..b93b15ed6d8
--- /dev/null
+++ b/public/-/emojis/1/hourglass_flowing_sand.png
Binary files differ
diff --git a/public/-/emojis/1/house.png b/public/-/emojis/1/house.png
new file mode 100644
index 00000000000..01c98a0ba92
--- /dev/null
+++ b/public/-/emojis/1/house.png
Binary files differ
diff --git a/public/-/emojis/1/house_abandoned.png b/public/-/emojis/1/house_abandoned.png
new file mode 100644
index 00000000000..c55e81de990
--- /dev/null
+++ b/public/-/emojis/1/house_abandoned.png
Binary files differ
diff --git a/public/-/emojis/1/house_with_garden.png b/public/-/emojis/1/house_with_garden.png
new file mode 100644
index 00000000000..0aae41598ef
--- /dev/null
+++ b/public/-/emojis/1/house_with_garden.png
Binary files differ
diff --git a/public/-/emojis/1/hugging.png b/public/-/emojis/1/hugging.png
new file mode 100644
index 00000000000..5bba6dc6d51
--- /dev/null
+++ b/public/-/emojis/1/hugging.png
Binary files differ
diff --git a/public/-/emojis/1/hushed.png b/public/-/emojis/1/hushed.png
new file mode 100644
index 00000000000..cad0e23132e
--- /dev/null
+++ b/public/-/emojis/1/hushed.png
Binary files differ
diff --git a/public/-/emojis/1/ice_cream.png b/public/-/emojis/1/ice_cream.png
new file mode 100644
index 00000000000..94267b9c434
--- /dev/null
+++ b/public/-/emojis/1/ice_cream.png
Binary files differ
diff --git a/public/-/emojis/1/ice_skate.png b/public/-/emojis/1/ice_skate.png
new file mode 100644
index 00000000000..8c449b0c039
--- /dev/null
+++ b/public/-/emojis/1/ice_skate.png
Binary files differ
diff --git a/public/-/emojis/1/icecream.png b/public/-/emojis/1/icecream.png
new file mode 100644
index 00000000000..8f6546e31a5
--- /dev/null
+++ b/public/-/emojis/1/icecream.png
Binary files differ
diff --git a/public/-/emojis/1/id.png b/public/-/emojis/1/id.png
new file mode 100644
index 00000000000..5bf69bf7ba8
--- /dev/null
+++ b/public/-/emojis/1/id.png
Binary files differ
diff --git a/public/-/emojis/1/ideograph_advantage.png b/public/-/emojis/1/ideograph_advantage.png
new file mode 100644
index 00000000000..0c0d589caf0
--- /dev/null
+++ b/public/-/emojis/1/ideograph_advantage.png
Binary files differ
diff --git a/public/-/emojis/1/imp.png b/public/-/emojis/1/imp.png
new file mode 100644
index 00000000000..9f9a9605539
--- /dev/null
+++ b/public/-/emojis/1/imp.png
Binary files differ
diff --git a/public/-/emojis/1/inbox_tray.png b/public/-/emojis/1/inbox_tray.png
new file mode 100644
index 00000000000..41a6be2b0ee
--- /dev/null
+++ b/public/-/emojis/1/inbox_tray.png
Binary files differ
diff --git a/public/-/emojis/1/incoming_envelope.png b/public/-/emojis/1/incoming_envelope.png
new file mode 100644
index 00000000000..fd22e88182e
--- /dev/null
+++ b/public/-/emojis/1/incoming_envelope.png
Binary files differ
diff --git a/public/-/emojis/1/information_desk_person.png b/public/-/emojis/1/information_desk_person.png
new file mode 100644
index 00000000000..55fc6294d25
--- /dev/null
+++ b/public/-/emojis/1/information_desk_person.png
Binary files differ
diff --git a/public/-/emojis/1/information_desk_person_tone1.png b/public/-/emojis/1/information_desk_person_tone1.png
new file mode 100644
index 00000000000..3d9e2247940
--- /dev/null
+++ b/public/-/emojis/1/information_desk_person_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/information_desk_person_tone2.png b/public/-/emojis/1/information_desk_person_tone2.png
new file mode 100644
index 00000000000..879e8b7966d
--- /dev/null
+++ b/public/-/emojis/1/information_desk_person_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/information_desk_person_tone3.png b/public/-/emojis/1/information_desk_person_tone3.png
new file mode 100644
index 00000000000..307514eab67
--- /dev/null
+++ b/public/-/emojis/1/information_desk_person_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/information_desk_person_tone4.png b/public/-/emojis/1/information_desk_person_tone4.png
new file mode 100644
index 00000000000..297395dcb3f
--- /dev/null
+++ b/public/-/emojis/1/information_desk_person_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/information_desk_person_tone5.png b/public/-/emojis/1/information_desk_person_tone5.png
new file mode 100644
index 00000000000..26f8f22b28b
--- /dev/null
+++ b/public/-/emojis/1/information_desk_person_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/information_source.png b/public/-/emojis/1/information_source.png
new file mode 100644
index 00000000000..871f2db9314
--- /dev/null
+++ b/public/-/emojis/1/information_source.png
Binary files differ
diff --git a/public/-/emojis/1/innocent.png b/public/-/emojis/1/innocent.png
new file mode 100644
index 00000000000..57f5151124f
--- /dev/null
+++ b/public/-/emojis/1/innocent.png
Binary files differ
diff --git a/public/-/emojis/1/interrobang.png b/public/-/emojis/1/interrobang.png
new file mode 100644
index 00000000000..509813e9bb2
--- /dev/null
+++ b/public/-/emojis/1/interrobang.png
Binary files differ
diff --git a/public/-/emojis/1/iphone.png b/public/-/emojis/1/iphone.png
new file mode 100644
index 00000000000..fd377acf872
--- /dev/null
+++ b/public/-/emojis/1/iphone.png
Binary files differ
diff --git a/public/-/emojis/1/island.png b/public/-/emojis/1/island.png
new file mode 100644
index 00000000000..7fd834389b7
--- /dev/null
+++ b/public/-/emojis/1/island.png
Binary files differ
diff --git a/public/-/emojis/1/izakaya_lantern.png b/public/-/emojis/1/izakaya_lantern.png
new file mode 100644
index 00000000000..dfd933f6f36
--- /dev/null
+++ b/public/-/emojis/1/izakaya_lantern.png
Binary files differ
diff --git a/public/-/emojis/1/jack_o_lantern.png b/public/-/emojis/1/jack_o_lantern.png
new file mode 100644
index 00000000000..44c3fc0aec9
--- /dev/null
+++ b/public/-/emojis/1/jack_o_lantern.png
Binary files differ
diff --git a/public/-/emojis/1/japan.png b/public/-/emojis/1/japan.png
new file mode 100644
index 00000000000..d86d0a59e12
--- /dev/null
+++ b/public/-/emojis/1/japan.png
Binary files differ
diff --git a/public/-/emojis/1/japanese_castle.png b/public/-/emojis/1/japanese_castle.png
new file mode 100644
index 00000000000..64b4e33a1ae
--- /dev/null
+++ b/public/-/emojis/1/japanese_castle.png
Binary files differ
diff --git a/public/-/emojis/1/japanese_goblin.png b/public/-/emojis/1/japanese_goblin.png
new file mode 100644
index 00000000000..515c6a2250e
--- /dev/null
+++ b/public/-/emojis/1/japanese_goblin.png
Binary files differ
diff --git a/public/-/emojis/1/japanese_ogre.png b/public/-/emojis/1/japanese_ogre.png
new file mode 100644
index 00000000000..fe8670fdaf1
--- /dev/null
+++ b/public/-/emojis/1/japanese_ogre.png
Binary files differ
diff --git a/public/-/emojis/1/jeans.png b/public/-/emojis/1/jeans.png
new file mode 100644
index 00000000000..2a6869d674c
--- /dev/null
+++ b/public/-/emojis/1/jeans.png
Binary files differ
diff --git a/public/-/emojis/1/joy.png b/public/-/emojis/1/joy.png
new file mode 100644
index 00000000000..0ba3b1859d8
--- /dev/null
+++ b/public/-/emojis/1/joy.png
Binary files differ
diff --git a/public/-/emojis/1/joy_cat.png b/public/-/emojis/1/joy_cat.png
new file mode 100644
index 00000000000..aac353179aa
--- /dev/null
+++ b/public/-/emojis/1/joy_cat.png
Binary files differ
diff --git a/public/-/emojis/1/joystick.png b/public/-/emojis/1/joystick.png
new file mode 100644
index 00000000000..1ee1905434e
--- /dev/null
+++ b/public/-/emojis/1/joystick.png
Binary files differ
diff --git a/public/-/emojis/1/juggling.png b/public/-/emojis/1/juggling.png
new file mode 100644
index 00000000000..a37f6224a42
--- /dev/null
+++ b/public/-/emojis/1/juggling.png
Binary files differ
diff --git a/public/-/emojis/1/juggling_tone1.png b/public/-/emojis/1/juggling_tone1.png
new file mode 100644
index 00000000000..c18eda40031
--- /dev/null
+++ b/public/-/emojis/1/juggling_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/juggling_tone2.png b/public/-/emojis/1/juggling_tone2.png
new file mode 100644
index 00000000000..de3b7a555b6
--- /dev/null
+++ b/public/-/emojis/1/juggling_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/juggling_tone3.png b/public/-/emojis/1/juggling_tone3.png
new file mode 100644
index 00000000000..74ab6d85458
--- /dev/null
+++ b/public/-/emojis/1/juggling_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/juggling_tone4.png b/public/-/emojis/1/juggling_tone4.png
new file mode 100644
index 00000000000..1c57823203f
--- /dev/null
+++ b/public/-/emojis/1/juggling_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/juggling_tone5.png b/public/-/emojis/1/juggling_tone5.png
new file mode 100644
index 00000000000..c343d6ee98a
--- /dev/null
+++ b/public/-/emojis/1/juggling_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/kaaba.png b/public/-/emojis/1/kaaba.png
new file mode 100644
index 00000000000..1778c1138e4
--- /dev/null
+++ b/public/-/emojis/1/kaaba.png
Binary files differ
diff --git a/public/-/emojis/1/key.png b/public/-/emojis/1/key.png
new file mode 100644
index 00000000000..319cd1b884c
--- /dev/null
+++ b/public/-/emojis/1/key.png
Binary files differ
diff --git a/public/-/emojis/1/key2.png b/public/-/emojis/1/key2.png
new file mode 100644
index 00000000000..e11d706c6c8
--- /dev/null
+++ b/public/-/emojis/1/key2.png
Binary files differ
diff --git a/public/-/emojis/1/keyboard.png b/public/-/emojis/1/keyboard.png
new file mode 100644
index 00000000000..75027cb9af7
--- /dev/null
+++ b/public/-/emojis/1/keyboard.png
Binary files differ
diff --git a/public/-/emojis/1/kimono.png b/public/-/emojis/1/kimono.png
new file mode 100644
index 00000000000..abe851115d1
--- /dev/null
+++ b/public/-/emojis/1/kimono.png
Binary files differ
diff --git a/public/-/emojis/1/kiss.png b/public/-/emojis/1/kiss.png
new file mode 100644
index 00000000000..85e6dcfc4e8
--- /dev/null
+++ b/public/-/emojis/1/kiss.png
Binary files differ
diff --git a/public/-/emojis/1/kiss_mm.png b/public/-/emojis/1/kiss_mm.png
new file mode 100644
index 00000000000..a9a0edae17c
--- /dev/null
+++ b/public/-/emojis/1/kiss_mm.png
Binary files differ
diff --git a/public/-/emojis/1/kiss_ww.png b/public/-/emojis/1/kiss_ww.png
new file mode 100644
index 00000000000..fdac73cbb1d
--- /dev/null
+++ b/public/-/emojis/1/kiss_ww.png
Binary files differ
diff --git a/public/-/emojis/1/kissing.png b/public/-/emojis/1/kissing.png
new file mode 100644
index 00000000000..39d325fd8e3
--- /dev/null
+++ b/public/-/emojis/1/kissing.png
Binary files differ
diff --git a/public/-/emojis/1/kissing_cat.png b/public/-/emojis/1/kissing_cat.png
new file mode 100644
index 00000000000..6e0bcc77540
--- /dev/null
+++ b/public/-/emojis/1/kissing_cat.png
Binary files differ
diff --git a/public/-/emojis/1/kissing_closed_eyes.png b/public/-/emojis/1/kissing_closed_eyes.png
new file mode 100644
index 00000000000..b684d7d4d6c
--- /dev/null
+++ b/public/-/emojis/1/kissing_closed_eyes.png
Binary files differ
diff --git a/public/-/emojis/1/kissing_heart.png b/public/-/emojis/1/kissing_heart.png
new file mode 100644
index 00000000000..0ff808fd614
--- /dev/null
+++ b/public/-/emojis/1/kissing_heart.png
Binary files differ
diff --git a/public/-/emojis/1/kissing_smiling_eyes.png b/public/-/emojis/1/kissing_smiling_eyes.png
new file mode 100644
index 00000000000..e181f17099d
--- /dev/null
+++ b/public/-/emojis/1/kissing_smiling_eyes.png
Binary files differ
diff --git a/public/-/emojis/1/kiwi.png b/public/-/emojis/1/kiwi.png
new file mode 100644
index 00000000000..dfbd8258074
--- /dev/null
+++ b/public/-/emojis/1/kiwi.png
Binary files differ
diff --git a/public/-/emojis/1/knife.png b/public/-/emojis/1/knife.png
new file mode 100644
index 00000000000..1acb9f3077b
--- /dev/null
+++ b/public/-/emojis/1/knife.png
Binary files differ
diff --git a/public/-/emojis/1/koala.png b/public/-/emojis/1/koala.png
new file mode 100644
index 00000000000..a0aa437a98c
--- /dev/null
+++ b/public/-/emojis/1/koala.png
Binary files differ
diff --git a/public/-/emojis/1/koko.png b/public/-/emojis/1/koko.png
new file mode 100644
index 00000000000..6450eb44d90
--- /dev/null
+++ b/public/-/emojis/1/koko.png
Binary files differ
diff --git a/public/-/emojis/1/label.png b/public/-/emojis/1/label.png
new file mode 100644
index 00000000000..d41c9b4f1e1
--- /dev/null
+++ b/public/-/emojis/1/label.png
Binary files differ
diff --git a/public/-/emojis/1/large_blue_circle.png b/public/-/emojis/1/large_blue_circle.png
new file mode 100644
index 00000000000..84078ef3127
--- /dev/null
+++ b/public/-/emojis/1/large_blue_circle.png
Binary files differ
diff --git a/public/-/emojis/1/large_blue_diamond.png b/public/-/emojis/1/large_blue_diamond.png
new file mode 100644
index 00000000000..416a58bd5a8
--- /dev/null
+++ b/public/-/emojis/1/large_blue_diamond.png
Binary files differ
diff --git a/public/-/emojis/1/large_orange_diamond.png b/public/-/emojis/1/large_orange_diamond.png
new file mode 100644
index 00000000000..73ff0ac36c8
--- /dev/null
+++ b/public/-/emojis/1/large_orange_diamond.png
Binary files differ
diff --git a/public/-/emojis/1/last_quarter_moon.png b/public/-/emojis/1/last_quarter_moon.png
new file mode 100644
index 00000000000..0842a0dd408
--- /dev/null
+++ b/public/-/emojis/1/last_quarter_moon.png
Binary files differ
diff --git a/public/-/emojis/1/last_quarter_moon_with_face.png b/public/-/emojis/1/last_quarter_moon_with_face.png
new file mode 100644
index 00000000000..94099343c5d
--- /dev/null
+++ b/public/-/emojis/1/last_quarter_moon_with_face.png
Binary files differ
diff --git a/public/-/emojis/1/laughing.png b/public/-/emojis/1/laughing.png
new file mode 100644
index 00000000000..d94e9505ba1
--- /dev/null
+++ b/public/-/emojis/1/laughing.png
Binary files differ
diff --git a/public/-/emojis/1/leaves.png b/public/-/emojis/1/leaves.png
new file mode 100644
index 00000000000..1e43e1af820
--- /dev/null
+++ b/public/-/emojis/1/leaves.png
Binary files differ
diff --git a/public/-/emojis/1/ledger.png b/public/-/emojis/1/ledger.png
new file mode 100644
index 00000000000..13e7561a4bd
--- /dev/null
+++ b/public/-/emojis/1/ledger.png
Binary files differ
diff --git a/public/-/emojis/1/left_facing_fist.png b/public/-/emojis/1/left_facing_fist.png
new file mode 100644
index 00000000000..a9d9fd8d59c
--- /dev/null
+++ b/public/-/emojis/1/left_facing_fist.png
Binary files differ
diff --git a/public/-/emojis/1/left_facing_fist_tone1.png b/public/-/emojis/1/left_facing_fist_tone1.png
new file mode 100644
index 00000000000..1262a6b4b69
--- /dev/null
+++ b/public/-/emojis/1/left_facing_fist_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/left_facing_fist_tone2.png b/public/-/emojis/1/left_facing_fist_tone2.png
new file mode 100644
index 00000000000..40bf70b82b2
--- /dev/null
+++ b/public/-/emojis/1/left_facing_fist_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/left_facing_fist_tone3.png b/public/-/emojis/1/left_facing_fist_tone3.png
new file mode 100644
index 00000000000..93f58145111
--- /dev/null
+++ b/public/-/emojis/1/left_facing_fist_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/left_facing_fist_tone4.png b/public/-/emojis/1/left_facing_fist_tone4.png
new file mode 100644
index 00000000000..d82b5ec91f0
--- /dev/null
+++ b/public/-/emojis/1/left_facing_fist_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/left_facing_fist_tone5.png b/public/-/emojis/1/left_facing_fist_tone5.png
new file mode 100644
index 00000000000..09ae4cd492b
--- /dev/null
+++ b/public/-/emojis/1/left_facing_fist_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/left_luggage.png b/public/-/emojis/1/left_luggage.png
new file mode 100644
index 00000000000..887b23f3f25
--- /dev/null
+++ b/public/-/emojis/1/left_luggage.png
Binary files differ
diff --git a/public/-/emojis/1/left_right_arrow.png b/public/-/emojis/1/left_right_arrow.png
new file mode 100644
index 00000000000..7937f24f2ac
--- /dev/null
+++ b/public/-/emojis/1/left_right_arrow.png
Binary files differ
diff --git a/public/-/emojis/1/leftwards_arrow_with_hook.png b/public/-/emojis/1/leftwards_arrow_with_hook.png
new file mode 100644
index 00000000000..ba45c2ad9e9
--- /dev/null
+++ b/public/-/emojis/1/leftwards_arrow_with_hook.png
Binary files differ
diff --git a/public/-/emojis/1/lemon.png b/public/-/emojis/1/lemon.png
new file mode 100644
index 00000000000..9a7d95ca220
--- /dev/null
+++ b/public/-/emojis/1/lemon.png
Binary files differ
diff --git a/public/-/emojis/1/leo.png b/public/-/emojis/1/leo.png
new file mode 100644
index 00000000000..30158d34de9
--- /dev/null
+++ b/public/-/emojis/1/leo.png
Binary files differ
diff --git a/public/-/emojis/1/leopard.png b/public/-/emojis/1/leopard.png
new file mode 100644
index 00000000000..8aac3d49448
--- /dev/null
+++ b/public/-/emojis/1/leopard.png
Binary files differ
diff --git a/public/-/emojis/1/level_slider.png b/public/-/emojis/1/level_slider.png
new file mode 100644
index 00000000000..720a3b34119
--- /dev/null
+++ b/public/-/emojis/1/level_slider.png
Binary files differ
diff --git a/public/-/emojis/1/levitate.png b/public/-/emojis/1/levitate.png
new file mode 100644
index 00000000000..3dc315a3d91
--- /dev/null
+++ b/public/-/emojis/1/levitate.png
Binary files differ
diff --git a/public/-/emojis/1/libra.png b/public/-/emojis/1/libra.png
new file mode 100644
index 00000000000..8fd133a357c
--- /dev/null
+++ b/public/-/emojis/1/libra.png
Binary files differ
diff --git a/public/-/emojis/1/lifter.png b/public/-/emojis/1/lifter.png
new file mode 100644
index 00000000000..afdeaa476af
--- /dev/null
+++ b/public/-/emojis/1/lifter.png
Binary files differ
diff --git a/public/-/emojis/1/lifter_tone1.png b/public/-/emojis/1/lifter_tone1.png
new file mode 100644
index 00000000000..febaad123ec
--- /dev/null
+++ b/public/-/emojis/1/lifter_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/lifter_tone2.png b/public/-/emojis/1/lifter_tone2.png
new file mode 100644
index 00000000000..27ae794a18e
--- /dev/null
+++ b/public/-/emojis/1/lifter_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/lifter_tone3.png b/public/-/emojis/1/lifter_tone3.png
new file mode 100644
index 00000000000..45c4c22c709
--- /dev/null
+++ b/public/-/emojis/1/lifter_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/lifter_tone4.png b/public/-/emojis/1/lifter_tone4.png
new file mode 100644
index 00000000000..67dd21d2464
--- /dev/null
+++ b/public/-/emojis/1/lifter_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/lifter_tone5.png b/public/-/emojis/1/lifter_tone5.png
new file mode 100644
index 00000000000..fa0152038b6
--- /dev/null
+++ b/public/-/emojis/1/lifter_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/light_rail.png b/public/-/emojis/1/light_rail.png
new file mode 100644
index 00000000000..a64829f5078
--- /dev/null
+++ b/public/-/emojis/1/light_rail.png
Binary files differ
diff --git a/public/-/emojis/1/link.png b/public/-/emojis/1/link.png
new file mode 100644
index 00000000000..ae20f0f8eec
--- /dev/null
+++ b/public/-/emojis/1/link.png
Binary files differ
diff --git a/public/-/emojis/1/lion_face.png b/public/-/emojis/1/lion_face.png
new file mode 100644
index 00000000000..5062ab47ecf
--- /dev/null
+++ b/public/-/emojis/1/lion_face.png
Binary files differ
diff --git a/public/-/emojis/1/lips.png b/public/-/emojis/1/lips.png
new file mode 100644
index 00000000000..35f3cc2006f
--- /dev/null
+++ b/public/-/emojis/1/lips.png
Binary files differ
diff --git a/public/-/emojis/1/lipstick.png b/public/-/emojis/1/lipstick.png
new file mode 100644
index 00000000000..61a0c084c99
--- /dev/null
+++ b/public/-/emojis/1/lipstick.png
Binary files differ
diff --git a/public/-/emojis/1/lizard.png b/public/-/emojis/1/lizard.png
new file mode 100644
index 00000000000..8363876050e
--- /dev/null
+++ b/public/-/emojis/1/lizard.png
Binary files differ
diff --git a/public/-/emojis/1/lock.png b/public/-/emojis/1/lock.png
new file mode 100644
index 00000000000..5a739c46644
--- /dev/null
+++ b/public/-/emojis/1/lock.png
Binary files differ
diff --git a/public/-/emojis/1/lock_with_ink_pen.png b/public/-/emojis/1/lock_with_ink_pen.png
new file mode 100644
index 00000000000..19a07d162fb
--- /dev/null
+++ b/public/-/emojis/1/lock_with_ink_pen.png
Binary files differ
diff --git a/public/-/emojis/1/lollipop.png b/public/-/emojis/1/lollipop.png
new file mode 100644
index 00000000000..ad76d7bf916
--- /dev/null
+++ b/public/-/emojis/1/lollipop.png
Binary files differ
diff --git a/public/-/emojis/1/loop.png b/public/-/emojis/1/loop.png
new file mode 100644
index 00000000000..0b82c8fe315
--- /dev/null
+++ b/public/-/emojis/1/loop.png
Binary files differ
diff --git a/public/-/emojis/1/loud_sound.png b/public/-/emojis/1/loud_sound.png
new file mode 100644
index 00000000000..8370033a539
--- /dev/null
+++ b/public/-/emojis/1/loud_sound.png
Binary files differ
diff --git a/public/-/emojis/1/loudspeaker.png b/public/-/emojis/1/loudspeaker.png
new file mode 100644
index 00000000000..5fd76a95b82
--- /dev/null
+++ b/public/-/emojis/1/loudspeaker.png
Binary files differ
diff --git a/public/-/emojis/1/love_hotel.png b/public/-/emojis/1/love_hotel.png
new file mode 100644
index 00000000000..5e136be6f8b
--- /dev/null
+++ b/public/-/emojis/1/love_hotel.png
Binary files differ
diff --git a/public/-/emojis/1/love_letter.png b/public/-/emojis/1/love_letter.png
new file mode 100644
index 00000000000..3c3c767e784
--- /dev/null
+++ b/public/-/emojis/1/love_letter.png
Binary files differ
diff --git a/public/-/emojis/1/low_brightness.png b/public/-/emojis/1/low_brightness.png
new file mode 100644
index 00000000000..543011d3961
--- /dev/null
+++ b/public/-/emojis/1/low_brightness.png
Binary files differ
diff --git a/public/-/emojis/1/lying_face.png b/public/-/emojis/1/lying_face.png
new file mode 100644
index 00000000000..02827e2628b
--- /dev/null
+++ b/public/-/emojis/1/lying_face.png
Binary files differ
diff --git a/public/-/emojis/1/m.png b/public/-/emojis/1/m.png
new file mode 100644
index 00000000000..8a3506fc1d7
--- /dev/null
+++ b/public/-/emojis/1/m.png
Binary files differ
diff --git a/public/-/emojis/1/mag.png b/public/-/emojis/1/mag.png
new file mode 100644
index 00000000000..55487156ac6
--- /dev/null
+++ b/public/-/emojis/1/mag.png
Binary files differ
diff --git a/public/-/emojis/1/mag_right.png b/public/-/emojis/1/mag_right.png
new file mode 100644
index 00000000000..0f4b1bca876
--- /dev/null
+++ b/public/-/emojis/1/mag_right.png
Binary files differ
diff --git a/public/-/emojis/1/mahjong.png b/public/-/emojis/1/mahjong.png
new file mode 100644
index 00000000000..66fd32025b2
--- /dev/null
+++ b/public/-/emojis/1/mahjong.png
Binary files differ
diff --git a/public/-/emojis/1/mailbox.png b/public/-/emojis/1/mailbox.png
new file mode 100644
index 00000000000..ef5174e40dd
--- /dev/null
+++ b/public/-/emojis/1/mailbox.png
Binary files differ
diff --git a/public/-/emojis/1/mailbox_closed.png b/public/-/emojis/1/mailbox_closed.png
new file mode 100644
index 00000000000..ddc705db0d8
--- /dev/null
+++ b/public/-/emojis/1/mailbox_closed.png
Binary files differ
diff --git a/public/-/emojis/1/mailbox_with_mail.png b/public/-/emojis/1/mailbox_with_mail.png
new file mode 100644
index 00000000000..5460616a5b1
--- /dev/null
+++ b/public/-/emojis/1/mailbox_with_mail.png
Binary files differ
diff --git a/public/-/emojis/1/mailbox_with_no_mail.png b/public/-/emojis/1/mailbox_with_no_mail.png
new file mode 100644
index 00000000000..f9aeee6b15a
--- /dev/null
+++ b/public/-/emojis/1/mailbox_with_no_mail.png
Binary files differ
diff --git a/public/-/emojis/1/man.png b/public/-/emojis/1/man.png
new file mode 100644
index 00000000000..857a02e5146
--- /dev/null
+++ b/public/-/emojis/1/man.png
Binary files differ
diff --git a/public/-/emojis/1/man_dancing.png b/public/-/emojis/1/man_dancing.png
new file mode 100644
index 00000000000..ccff3bede5a
--- /dev/null
+++ b/public/-/emojis/1/man_dancing.png
Binary files differ
diff --git a/public/-/emojis/1/man_dancing_tone1.png b/public/-/emojis/1/man_dancing_tone1.png
new file mode 100644
index 00000000000..e0b9f82d905
--- /dev/null
+++ b/public/-/emojis/1/man_dancing_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/man_dancing_tone2.png b/public/-/emojis/1/man_dancing_tone2.png
new file mode 100644
index 00000000000..a5beed56e2e
--- /dev/null
+++ b/public/-/emojis/1/man_dancing_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/man_dancing_tone3.png b/public/-/emojis/1/man_dancing_tone3.png
new file mode 100644
index 00000000000..2fa20180a6e
--- /dev/null
+++ b/public/-/emojis/1/man_dancing_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/man_dancing_tone4.png b/public/-/emojis/1/man_dancing_tone4.png
new file mode 100644
index 00000000000..bd3528c83ba
--- /dev/null
+++ b/public/-/emojis/1/man_dancing_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/man_dancing_tone5.png b/public/-/emojis/1/man_dancing_tone5.png
new file mode 100644
index 00000000000..41fd4f880c9
--- /dev/null
+++ b/public/-/emojis/1/man_dancing_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/man_in_tuxedo.png b/public/-/emojis/1/man_in_tuxedo.png
new file mode 100644
index 00000000000..5f7e9303f89
--- /dev/null
+++ b/public/-/emojis/1/man_in_tuxedo.png
Binary files differ
diff --git a/public/-/emojis/1/man_in_tuxedo_tone1.png b/public/-/emojis/1/man_in_tuxedo_tone1.png
new file mode 100644
index 00000000000..7b6b3acd99b
--- /dev/null
+++ b/public/-/emojis/1/man_in_tuxedo_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/man_in_tuxedo_tone2.png b/public/-/emojis/1/man_in_tuxedo_tone2.png
new file mode 100644
index 00000000000..7975191b360
--- /dev/null
+++ b/public/-/emojis/1/man_in_tuxedo_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/man_in_tuxedo_tone3.png b/public/-/emojis/1/man_in_tuxedo_tone3.png
new file mode 100644
index 00000000000..a2816f600ae
--- /dev/null
+++ b/public/-/emojis/1/man_in_tuxedo_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/man_in_tuxedo_tone4.png b/public/-/emojis/1/man_in_tuxedo_tone4.png
new file mode 100644
index 00000000000..ea8291760f9
--- /dev/null
+++ b/public/-/emojis/1/man_in_tuxedo_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/man_in_tuxedo_tone5.png b/public/-/emojis/1/man_in_tuxedo_tone5.png
new file mode 100644
index 00000000000..c743e05fc5e
--- /dev/null
+++ b/public/-/emojis/1/man_in_tuxedo_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/man_tone1.png b/public/-/emojis/1/man_tone1.png
new file mode 100644
index 00000000000..bb86e963a80
--- /dev/null
+++ b/public/-/emojis/1/man_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/man_tone2.png b/public/-/emojis/1/man_tone2.png
new file mode 100644
index 00000000000..fdeeaff46f5
--- /dev/null
+++ b/public/-/emojis/1/man_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/man_tone3.png b/public/-/emojis/1/man_tone3.png
new file mode 100644
index 00000000000..7ae0b5df9cf
--- /dev/null
+++ b/public/-/emojis/1/man_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/man_tone4.png b/public/-/emojis/1/man_tone4.png
new file mode 100644
index 00000000000..db14cde99b8
--- /dev/null
+++ b/public/-/emojis/1/man_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/man_tone5.png b/public/-/emojis/1/man_tone5.png
new file mode 100644
index 00000000000..7c67a70529c
--- /dev/null
+++ b/public/-/emojis/1/man_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_gua_pi_mao.png b/public/-/emojis/1/man_with_gua_pi_mao.png
new file mode 100644
index 00000000000..7841e13608d
--- /dev/null
+++ b/public/-/emojis/1/man_with_gua_pi_mao.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone1.png b/public/-/emojis/1/man_with_gua_pi_mao_tone1.png
new file mode 100644
index 00000000000..5b7b3def19c
--- /dev/null
+++ b/public/-/emojis/1/man_with_gua_pi_mao_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone2.png b/public/-/emojis/1/man_with_gua_pi_mao_tone2.png
new file mode 100644
index 00000000000..c8b9cf87f4b
--- /dev/null
+++ b/public/-/emojis/1/man_with_gua_pi_mao_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone3.png b/public/-/emojis/1/man_with_gua_pi_mao_tone3.png
new file mode 100644
index 00000000000..effdd0c4c84
--- /dev/null
+++ b/public/-/emojis/1/man_with_gua_pi_mao_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone4.png b/public/-/emojis/1/man_with_gua_pi_mao_tone4.png
new file mode 100644
index 00000000000..f885ff46fa1
--- /dev/null
+++ b/public/-/emojis/1/man_with_gua_pi_mao_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_gua_pi_mao_tone5.png b/public/-/emojis/1/man_with_gua_pi_mao_tone5.png
new file mode 100644
index 00000000000..a6d55ca1380
--- /dev/null
+++ b/public/-/emojis/1/man_with_gua_pi_mao_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_turban.png b/public/-/emojis/1/man_with_turban.png
new file mode 100644
index 00000000000..51cf047f966
--- /dev/null
+++ b/public/-/emojis/1/man_with_turban.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_turban_tone1.png b/public/-/emojis/1/man_with_turban_tone1.png
new file mode 100644
index 00000000000..1e12ee4b231
--- /dev/null
+++ b/public/-/emojis/1/man_with_turban_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_turban_tone2.png b/public/-/emojis/1/man_with_turban_tone2.png
new file mode 100644
index 00000000000..37de4cceb23
--- /dev/null
+++ b/public/-/emojis/1/man_with_turban_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_turban_tone3.png b/public/-/emojis/1/man_with_turban_tone3.png
new file mode 100644
index 00000000000..f607afd3450
--- /dev/null
+++ b/public/-/emojis/1/man_with_turban_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_turban_tone4.png b/public/-/emojis/1/man_with_turban_tone4.png
new file mode 100644
index 00000000000..c05695888af
--- /dev/null
+++ b/public/-/emojis/1/man_with_turban_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/man_with_turban_tone5.png b/public/-/emojis/1/man_with_turban_tone5.png
new file mode 100644
index 00000000000..4b4ff64720b
--- /dev/null
+++ b/public/-/emojis/1/man_with_turban_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/mans_shoe.png b/public/-/emojis/1/mans_shoe.png
new file mode 100644
index 00000000000..4bf7541032c
--- /dev/null
+++ b/public/-/emojis/1/mans_shoe.png
Binary files differ
diff --git a/public/-/emojis/1/map.png b/public/-/emojis/1/map.png
new file mode 100644
index 00000000000..15efe32c798
--- /dev/null
+++ b/public/-/emojis/1/map.png
Binary files differ
diff --git a/public/-/emojis/1/maple_leaf.png b/public/-/emojis/1/maple_leaf.png
new file mode 100644
index 00000000000..c49acea67f7
--- /dev/null
+++ b/public/-/emojis/1/maple_leaf.png
Binary files differ
diff --git a/public/-/emojis/1/martial_arts_uniform.png b/public/-/emojis/1/martial_arts_uniform.png
new file mode 100644
index 00000000000..8d6114761f6
--- /dev/null
+++ b/public/-/emojis/1/martial_arts_uniform.png
Binary files differ
diff --git a/public/-/emojis/1/mask.png b/public/-/emojis/1/mask.png
new file mode 100644
index 00000000000..1e800acd1c0
--- /dev/null
+++ b/public/-/emojis/1/mask.png
Binary files differ
diff --git a/public/-/emojis/1/massage.png b/public/-/emojis/1/massage.png
new file mode 100644
index 00000000000..b91d845e374
--- /dev/null
+++ b/public/-/emojis/1/massage.png
Binary files differ
diff --git a/public/-/emojis/1/massage_tone1.png b/public/-/emojis/1/massage_tone1.png
new file mode 100644
index 00000000000..e0f415d3186
--- /dev/null
+++ b/public/-/emojis/1/massage_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/massage_tone2.png b/public/-/emojis/1/massage_tone2.png
new file mode 100644
index 00000000000..0bb244a270b
--- /dev/null
+++ b/public/-/emojis/1/massage_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/massage_tone3.png b/public/-/emojis/1/massage_tone3.png
new file mode 100644
index 00000000000..a117ee81a22
--- /dev/null
+++ b/public/-/emojis/1/massage_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/massage_tone4.png b/public/-/emojis/1/massage_tone4.png
new file mode 100644
index 00000000000..6f42ab017f4
--- /dev/null
+++ b/public/-/emojis/1/massage_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/massage_tone5.png b/public/-/emojis/1/massage_tone5.png
new file mode 100644
index 00000000000..6a388c0d0b5
--- /dev/null
+++ b/public/-/emojis/1/massage_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/meat_on_bone.png b/public/-/emojis/1/meat_on_bone.png
new file mode 100644
index 00000000000..b20a59d1690
--- /dev/null
+++ b/public/-/emojis/1/meat_on_bone.png
Binary files differ
diff --git a/public/-/emojis/1/medal.png b/public/-/emojis/1/medal.png
new file mode 100644
index 00000000000..b85896b14da
--- /dev/null
+++ b/public/-/emojis/1/medal.png
Binary files differ
diff --git a/public/-/emojis/1/mega.png b/public/-/emojis/1/mega.png
new file mode 100644
index 00000000000..4e6735188e3
--- /dev/null
+++ b/public/-/emojis/1/mega.png
Binary files differ
diff --git a/public/-/emojis/1/melon.png b/public/-/emojis/1/melon.png
new file mode 100644
index 00000000000..c01232d419d
--- /dev/null
+++ b/public/-/emojis/1/melon.png
Binary files differ
diff --git a/public/-/emojis/1/menorah.png b/public/-/emojis/1/menorah.png
new file mode 100644
index 00000000000..b4297362869
--- /dev/null
+++ b/public/-/emojis/1/menorah.png
Binary files differ
diff --git a/public/-/emojis/1/mens.png b/public/-/emojis/1/mens.png
new file mode 100644
index 00000000000..f5a1e1ba0cd
--- /dev/null
+++ b/public/-/emojis/1/mens.png
Binary files differ
diff --git a/public/-/emojis/1/metal.png b/public/-/emojis/1/metal.png
new file mode 100644
index 00000000000..4aa6e7e0a44
--- /dev/null
+++ b/public/-/emojis/1/metal.png
Binary files differ
diff --git a/public/-/emojis/1/metal_tone1.png b/public/-/emojis/1/metal_tone1.png
new file mode 100644
index 00000000000..c080d2addbd
--- /dev/null
+++ b/public/-/emojis/1/metal_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/metal_tone2.png b/public/-/emojis/1/metal_tone2.png
new file mode 100644
index 00000000000..12313529bcf
--- /dev/null
+++ b/public/-/emojis/1/metal_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/metal_tone3.png b/public/-/emojis/1/metal_tone3.png
new file mode 100644
index 00000000000..ca9be6ae67b
--- /dev/null
+++ b/public/-/emojis/1/metal_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/metal_tone4.png b/public/-/emojis/1/metal_tone4.png
new file mode 100644
index 00000000000..abe28cbf890
--- /dev/null
+++ b/public/-/emojis/1/metal_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/metal_tone5.png b/public/-/emojis/1/metal_tone5.png
new file mode 100644
index 00000000000..0c6b5dd34ed
--- /dev/null
+++ b/public/-/emojis/1/metal_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/metro.png b/public/-/emojis/1/metro.png
new file mode 100644
index 00000000000..1de8f0551f3
--- /dev/null
+++ b/public/-/emojis/1/metro.png
Binary files differ
diff --git a/public/-/emojis/1/microphone.png b/public/-/emojis/1/microphone.png
new file mode 100644
index 00000000000..d4e6b0def25
--- /dev/null
+++ b/public/-/emojis/1/microphone.png
Binary files differ
diff --git a/public/-/emojis/1/microphone2.png b/public/-/emojis/1/microphone2.png
new file mode 100644
index 00000000000..cd9167654ff
--- /dev/null
+++ b/public/-/emojis/1/microphone2.png
Binary files differ
diff --git a/public/-/emojis/1/microscope.png b/public/-/emojis/1/microscope.png
new file mode 100644
index 00000000000..90f5acf6a78
--- /dev/null
+++ b/public/-/emojis/1/microscope.png
Binary files differ
diff --git a/public/-/emojis/1/middle_finger.png b/public/-/emojis/1/middle_finger.png
new file mode 100644
index 00000000000..697f7a25eb2
--- /dev/null
+++ b/public/-/emojis/1/middle_finger.png
Binary files differ
diff --git a/public/-/emojis/1/middle_finger_tone1.png b/public/-/emojis/1/middle_finger_tone1.png
new file mode 100644
index 00000000000..61ef12a1548
--- /dev/null
+++ b/public/-/emojis/1/middle_finger_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/middle_finger_tone2.png b/public/-/emojis/1/middle_finger_tone2.png
new file mode 100644
index 00000000000..c31a69be9af
--- /dev/null
+++ b/public/-/emojis/1/middle_finger_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/middle_finger_tone3.png b/public/-/emojis/1/middle_finger_tone3.png
new file mode 100644
index 00000000000..73ac216ce63
--- /dev/null
+++ b/public/-/emojis/1/middle_finger_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/middle_finger_tone4.png b/public/-/emojis/1/middle_finger_tone4.png
new file mode 100644
index 00000000000..80b8ab7706d
--- /dev/null
+++ b/public/-/emojis/1/middle_finger_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/middle_finger_tone5.png b/public/-/emojis/1/middle_finger_tone5.png
new file mode 100644
index 00000000000..a8826b196e8
--- /dev/null
+++ b/public/-/emojis/1/middle_finger_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/military_medal.png b/public/-/emojis/1/military_medal.png
new file mode 100644
index 00000000000..ecd3fb03584
--- /dev/null
+++ b/public/-/emojis/1/military_medal.png
Binary files differ
diff --git a/public/-/emojis/1/milk.png b/public/-/emojis/1/milk.png
new file mode 100644
index 00000000000..e4fcf2e64f3
--- /dev/null
+++ b/public/-/emojis/1/milk.png
Binary files differ
diff --git a/public/-/emojis/1/milky_way.png b/public/-/emojis/1/milky_way.png
new file mode 100644
index 00000000000..b2b8ac59c5e
--- /dev/null
+++ b/public/-/emojis/1/milky_way.png
Binary files differ
diff --git a/public/-/emojis/1/minibus.png b/public/-/emojis/1/minibus.png
new file mode 100644
index 00000000000..c60dd8f47ab
--- /dev/null
+++ b/public/-/emojis/1/minibus.png
Binary files differ
diff --git a/public/-/emojis/1/minidisc.png b/public/-/emojis/1/minidisc.png
new file mode 100644
index 00000000000..9fa94cfbe74
--- /dev/null
+++ b/public/-/emojis/1/minidisc.png
Binary files differ
diff --git a/public/-/emojis/1/mobile_phone_off.png b/public/-/emojis/1/mobile_phone_off.png
new file mode 100644
index 00000000000..8b661ec1c94
--- /dev/null
+++ b/public/-/emojis/1/mobile_phone_off.png
Binary files differ
diff --git a/public/-/emojis/1/money_mouth.png b/public/-/emojis/1/money_mouth.png
new file mode 100644
index 00000000000..75fd1e90cb0
--- /dev/null
+++ b/public/-/emojis/1/money_mouth.png
Binary files differ
diff --git a/public/-/emojis/1/money_with_wings.png b/public/-/emojis/1/money_with_wings.png
new file mode 100644
index 00000000000..f022b04b3c2
--- /dev/null
+++ b/public/-/emojis/1/money_with_wings.png
Binary files differ
diff --git a/public/-/emojis/1/moneybag.png b/public/-/emojis/1/moneybag.png
new file mode 100644
index 00000000000..b9296be0902
--- /dev/null
+++ b/public/-/emojis/1/moneybag.png
Binary files differ
diff --git a/public/-/emojis/1/monkey.png b/public/-/emojis/1/monkey.png
new file mode 100644
index 00000000000..9fae29448e3
--- /dev/null
+++ b/public/-/emojis/1/monkey.png
Binary files differ
diff --git a/public/-/emojis/1/monkey_face.png b/public/-/emojis/1/monkey_face.png
new file mode 100644
index 00000000000..7cab9b91a82
--- /dev/null
+++ b/public/-/emojis/1/monkey_face.png
Binary files differ
diff --git a/public/-/emojis/1/monorail.png b/public/-/emojis/1/monorail.png
new file mode 100644
index 00000000000..11eb1f574bf
--- /dev/null
+++ b/public/-/emojis/1/monorail.png
Binary files differ
diff --git a/public/-/emojis/1/mortar_board.png b/public/-/emojis/1/mortar_board.png
new file mode 100644
index 00000000000..8b17ddd9d00
--- /dev/null
+++ b/public/-/emojis/1/mortar_board.png
Binary files differ
diff --git a/public/-/emojis/1/mosque.png b/public/-/emojis/1/mosque.png
new file mode 100644
index 00000000000..ef770b26d96
--- /dev/null
+++ b/public/-/emojis/1/mosque.png
Binary files differ
diff --git a/public/-/emojis/1/motor_scooter.png b/public/-/emojis/1/motor_scooter.png
new file mode 100644
index 00000000000..c5afa72d807
--- /dev/null
+++ b/public/-/emojis/1/motor_scooter.png
Binary files differ
diff --git a/public/-/emojis/1/motorboat.png b/public/-/emojis/1/motorboat.png
new file mode 100644
index 00000000000..0506db1a40f
--- /dev/null
+++ b/public/-/emojis/1/motorboat.png
Binary files differ
diff --git a/public/-/emojis/1/motorcycle.png b/public/-/emojis/1/motorcycle.png
new file mode 100644
index 00000000000..3d1d567e8ec
--- /dev/null
+++ b/public/-/emojis/1/motorcycle.png
Binary files differ
diff --git a/public/-/emojis/1/motorway.png b/public/-/emojis/1/motorway.png
new file mode 100644
index 00000000000..8c3d3d03e3f
--- /dev/null
+++ b/public/-/emojis/1/motorway.png
Binary files differ
diff --git a/public/-/emojis/1/mount_fuji.png b/public/-/emojis/1/mount_fuji.png
new file mode 100644
index 00000000000..88a54752458
--- /dev/null
+++ b/public/-/emojis/1/mount_fuji.png
Binary files differ
diff --git a/public/-/emojis/1/mountain.png b/public/-/emojis/1/mountain.png
new file mode 100644
index 00000000000..6722ebdd294
--- /dev/null
+++ b/public/-/emojis/1/mountain.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_bicyclist.png b/public/-/emojis/1/mountain_bicyclist.png
new file mode 100644
index 00000000000..41d3dc3ac6f
--- /dev/null
+++ b/public/-/emojis/1/mountain_bicyclist.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_bicyclist_tone1.png b/public/-/emojis/1/mountain_bicyclist_tone1.png
new file mode 100644
index 00000000000..e9f1daf5e40
--- /dev/null
+++ b/public/-/emojis/1/mountain_bicyclist_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_bicyclist_tone2.png b/public/-/emojis/1/mountain_bicyclist_tone2.png
new file mode 100644
index 00000000000..555b9e29d4d
--- /dev/null
+++ b/public/-/emojis/1/mountain_bicyclist_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_bicyclist_tone3.png b/public/-/emojis/1/mountain_bicyclist_tone3.png
new file mode 100644
index 00000000000..7df5508ec8c
--- /dev/null
+++ b/public/-/emojis/1/mountain_bicyclist_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_bicyclist_tone4.png b/public/-/emojis/1/mountain_bicyclist_tone4.png
new file mode 100644
index 00000000000..f94b3450697
--- /dev/null
+++ b/public/-/emojis/1/mountain_bicyclist_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_bicyclist_tone5.png b/public/-/emojis/1/mountain_bicyclist_tone5.png
new file mode 100644
index 00000000000..16a45861e1f
--- /dev/null
+++ b/public/-/emojis/1/mountain_bicyclist_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_cableway.png b/public/-/emojis/1/mountain_cableway.png
new file mode 100644
index 00000000000..1dea73ca53b
--- /dev/null
+++ b/public/-/emojis/1/mountain_cableway.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_railway.png b/public/-/emojis/1/mountain_railway.png
new file mode 100644
index 00000000000..ade2218e469
--- /dev/null
+++ b/public/-/emojis/1/mountain_railway.png
Binary files differ
diff --git a/public/-/emojis/1/mountain_snow.png b/public/-/emojis/1/mountain_snow.png
new file mode 100644
index 00000000000..76e1cfd8313
--- /dev/null
+++ b/public/-/emojis/1/mountain_snow.png
Binary files differ
diff --git a/public/-/emojis/1/mouse.png b/public/-/emojis/1/mouse.png
new file mode 100644
index 00000000000..50afcd3262e
--- /dev/null
+++ b/public/-/emojis/1/mouse.png
Binary files differ
diff --git a/public/-/emojis/1/mouse2.png b/public/-/emojis/1/mouse2.png
new file mode 100644
index 00000000000..20fb041f09f
--- /dev/null
+++ b/public/-/emojis/1/mouse2.png
Binary files differ
diff --git a/public/-/emojis/1/mouse_three_button.png b/public/-/emojis/1/mouse_three_button.png
new file mode 100644
index 00000000000..e84e96ff6e8
--- /dev/null
+++ b/public/-/emojis/1/mouse_three_button.png
Binary files differ
diff --git a/public/-/emojis/1/movie_camera.png b/public/-/emojis/1/movie_camera.png
new file mode 100644
index 00000000000..4e73b130155
--- /dev/null
+++ b/public/-/emojis/1/movie_camera.png
Binary files differ
diff --git a/public/-/emojis/1/moyai.png b/public/-/emojis/1/moyai.png
new file mode 100644
index 00000000000..e6a7779c45b
--- /dev/null
+++ b/public/-/emojis/1/moyai.png
Binary files differ
diff --git a/public/-/emojis/1/mrs_claus.png b/public/-/emojis/1/mrs_claus.png
new file mode 100644
index 00000000000..9cf2458df1a
--- /dev/null
+++ b/public/-/emojis/1/mrs_claus.png
Binary files differ
diff --git a/public/-/emojis/1/mrs_claus_tone1.png b/public/-/emojis/1/mrs_claus_tone1.png
new file mode 100644
index 00000000000..d8a695d7035
--- /dev/null
+++ b/public/-/emojis/1/mrs_claus_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/mrs_claus_tone2.png b/public/-/emojis/1/mrs_claus_tone2.png
new file mode 100644
index 00000000000..0e17e8c51f3
--- /dev/null
+++ b/public/-/emojis/1/mrs_claus_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/mrs_claus_tone3.png b/public/-/emojis/1/mrs_claus_tone3.png
new file mode 100644
index 00000000000..c3ee4d1dfae
--- /dev/null
+++ b/public/-/emojis/1/mrs_claus_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/mrs_claus_tone4.png b/public/-/emojis/1/mrs_claus_tone4.png
new file mode 100644
index 00000000000..68a556da2fe
--- /dev/null
+++ b/public/-/emojis/1/mrs_claus_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/mrs_claus_tone5.png b/public/-/emojis/1/mrs_claus_tone5.png
new file mode 100644
index 00000000000..ccab3c40ff2
--- /dev/null
+++ b/public/-/emojis/1/mrs_claus_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/muscle.png b/public/-/emojis/1/muscle.png
new file mode 100644
index 00000000000..7e67c1880f7
--- /dev/null
+++ b/public/-/emojis/1/muscle.png
Binary files differ
diff --git a/public/-/emojis/1/muscle_tone1.png b/public/-/emojis/1/muscle_tone1.png
new file mode 100644
index 00000000000..1522942ce51
--- /dev/null
+++ b/public/-/emojis/1/muscle_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/muscle_tone2.png b/public/-/emojis/1/muscle_tone2.png
new file mode 100644
index 00000000000..569c6e832ca
--- /dev/null
+++ b/public/-/emojis/1/muscle_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/muscle_tone3.png b/public/-/emojis/1/muscle_tone3.png
new file mode 100644
index 00000000000..0a76b00fa89
--- /dev/null
+++ b/public/-/emojis/1/muscle_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/muscle_tone4.png b/public/-/emojis/1/muscle_tone4.png
new file mode 100644
index 00000000000..f0cf31328e0
--- /dev/null
+++ b/public/-/emojis/1/muscle_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/muscle_tone5.png b/public/-/emojis/1/muscle_tone5.png
new file mode 100644
index 00000000000..4fda92460e8
--- /dev/null
+++ b/public/-/emojis/1/muscle_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/mushroom.png b/public/-/emojis/1/mushroom.png
new file mode 100644
index 00000000000..dd85742ba2c
--- /dev/null
+++ b/public/-/emojis/1/mushroom.png
Binary files differ
diff --git a/public/-/emojis/1/musical_keyboard.png b/public/-/emojis/1/musical_keyboard.png
new file mode 100644
index 00000000000..442b7456842
--- /dev/null
+++ b/public/-/emojis/1/musical_keyboard.png
Binary files differ
diff --git a/public/-/emojis/1/musical_note.png b/public/-/emojis/1/musical_note.png
new file mode 100644
index 00000000000..06691ef61bb
--- /dev/null
+++ b/public/-/emojis/1/musical_note.png
Binary files differ
diff --git a/public/-/emojis/1/musical_score.png b/public/-/emojis/1/musical_score.png
new file mode 100644
index 00000000000..47dc05a8ef5
--- /dev/null
+++ b/public/-/emojis/1/musical_score.png
Binary files differ
diff --git a/public/-/emojis/1/mute.png b/public/-/emojis/1/mute.png
new file mode 100644
index 00000000000..7c1788e5075
--- /dev/null
+++ b/public/-/emojis/1/mute.png
Binary files differ
diff --git a/public/-/emojis/1/nail_care.png b/public/-/emojis/1/nail_care.png
new file mode 100644
index 00000000000..aa52af7050d
--- /dev/null
+++ b/public/-/emojis/1/nail_care.png
Binary files differ
diff --git a/public/-/emojis/1/nail_care_tone1.png b/public/-/emojis/1/nail_care_tone1.png
new file mode 100644
index 00000000000..26e883dd244
--- /dev/null
+++ b/public/-/emojis/1/nail_care_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/nail_care_tone2.png b/public/-/emojis/1/nail_care_tone2.png
new file mode 100644
index 00000000000..61257b47ea3
--- /dev/null
+++ b/public/-/emojis/1/nail_care_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/nail_care_tone3.png b/public/-/emojis/1/nail_care_tone3.png
new file mode 100644
index 00000000000..29871b05f62
--- /dev/null
+++ b/public/-/emojis/1/nail_care_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/nail_care_tone4.png b/public/-/emojis/1/nail_care_tone4.png
new file mode 100644
index 00000000000..2881de0b17d
--- /dev/null
+++ b/public/-/emojis/1/nail_care_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/nail_care_tone5.png b/public/-/emojis/1/nail_care_tone5.png
new file mode 100644
index 00000000000..a0b7c0a45a6
--- /dev/null
+++ b/public/-/emojis/1/nail_care_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/name_badge.png b/public/-/emojis/1/name_badge.png
new file mode 100644
index 00000000000..ec5ee213e20
--- /dev/null
+++ b/public/-/emojis/1/name_badge.png
Binary files differ
diff --git a/public/-/emojis/1/nauseated_face.png b/public/-/emojis/1/nauseated_face.png
new file mode 100644
index 00000000000..a566c109c28
--- /dev/null
+++ b/public/-/emojis/1/nauseated_face.png
Binary files differ
diff --git a/public/-/emojis/1/necktie.png b/public/-/emojis/1/necktie.png
new file mode 100644
index 00000000000..1804e7f3ff3
--- /dev/null
+++ b/public/-/emojis/1/necktie.png
Binary files differ
diff --git a/public/-/emojis/1/negative_squared_cross_mark.png b/public/-/emojis/1/negative_squared_cross_mark.png
new file mode 100644
index 00000000000..dae487f1f98
--- /dev/null
+++ b/public/-/emojis/1/negative_squared_cross_mark.png
Binary files differ
diff --git a/public/-/emojis/1/nerd.png b/public/-/emojis/1/nerd.png
new file mode 100644
index 00000000000..7820bd581dc
--- /dev/null
+++ b/public/-/emojis/1/nerd.png
Binary files differ
diff --git a/public/-/emojis/1/neutral_face.png b/public/-/emojis/1/neutral_face.png
new file mode 100644
index 00000000000..065d193afe4
--- /dev/null
+++ b/public/-/emojis/1/neutral_face.png
Binary files differ
diff --git a/public/-/emojis/1/new.png b/public/-/emojis/1/new.png
new file mode 100644
index 00000000000..b4f85488d1a
--- /dev/null
+++ b/public/-/emojis/1/new.png
Binary files differ
diff --git a/public/-/emojis/1/new_moon.png b/public/-/emojis/1/new_moon.png
new file mode 100644
index 00000000000..ecff72caa42
--- /dev/null
+++ b/public/-/emojis/1/new_moon.png
Binary files differ
diff --git a/public/-/emojis/1/new_moon_with_face.png b/public/-/emojis/1/new_moon_with_face.png
new file mode 100644
index 00000000000..150dd12400c
--- /dev/null
+++ b/public/-/emojis/1/new_moon_with_face.png
Binary files differ
diff --git a/public/-/emojis/1/newspaper.png b/public/-/emojis/1/newspaper.png
new file mode 100644
index 00000000000..2aa8f060bde
--- /dev/null
+++ b/public/-/emojis/1/newspaper.png
Binary files differ
diff --git a/public/-/emojis/1/newspaper2.png b/public/-/emojis/1/newspaper2.png
new file mode 100644
index 00000000000..f64748df2b2
--- /dev/null
+++ b/public/-/emojis/1/newspaper2.png
Binary files differ
diff --git a/public/-/emojis/1/ng.png b/public/-/emojis/1/ng.png
new file mode 100644
index 00000000000..ee8d20f5ebc
--- /dev/null
+++ b/public/-/emojis/1/ng.png
Binary files differ
diff --git a/public/-/emojis/1/night_with_stars.png b/public/-/emojis/1/night_with_stars.png
new file mode 100644
index 00000000000..ca2018f456d
--- /dev/null
+++ b/public/-/emojis/1/night_with_stars.png
Binary files differ
diff --git a/public/-/emojis/1/nine.png b/public/-/emojis/1/nine.png
new file mode 100644
index 00000000000..9fce3d1eca9
--- /dev/null
+++ b/public/-/emojis/1/nine.png
Binary files differ
diff --git a/public/-/emojis/1/no_bell.png b/public/-/emojis/1/no_bell.png
new file mode 100644
index 00000000000..15cb38dd1e7
--- /dev/null
+++ b/public/-/emojis/1/no_bell.png
Binary files differ
diff --git a/public/-/emojis/1/no_bicycles.png b/public/-/emojis/1/no_bicycles.png
new file mode 100644
index 00000000000..19c85421ce9
--- /dev/null
+++ b/public/-/emojis/1/no_bicycles.png
Binary files differ
diff --git a/public/-/emojis/1/no_entry.png b/public/-/emojis/1/no_entry.png
new file mode 100644
index 00000000000..476800fc5c6
--- /dev/null
+++ b/public/-/emojis/1/no_entry.png
Binary files differ
diff --git a/public/-/emojis/1/no_entry_sign.png b/public/-/emojis/1/no_entry_sign.png
new file mode 100644
index 00000000000..d2efd65e74b
--- /dev/null
+++ b/public/-/emojis/1/no_entry_sign.png
Binary files differ
diff --git a/public/-/emojis/1/no_good.png b/public/-/emojis/1/no_good.png
new file mode 100644
index 00000000000..ed577100322
--- /dev/null
+++ b/public/-/emojis/1/no_good.png
Binary files differ
diff --git a/public/-/emojis/1/no_good_tone1.png b/public/-/emojis/1/no_good_tone1.png
new file mode 100644
index 00000000000..5c1a3cbb884
--- /dev/null
+++ b/public/-/emojis/1/no_good_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/no_good_tone2.png b/public/-/emojis/1/no_good_tone2.png
new file mode 100644
index 00000000000..80d8021f8fe
--- /dev/null
+++ b/public/-/emojis/1/no_good_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/no_good_tone3.png b/public/-/emojis/1/no_good_tone3.png
new file mode 100644
index 00000000000..635e6a00815
--- /dev/null
+++ b/public/-/emojis/1/no_good_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/no_good_tone4.png b/public/-/emojis/1/no_good_tone4.png
new file mode 100644
index 00000000000..b96e412a374
--- /dev/null
+++ b/public/-/emojis/1/no_good_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/no_good_tone5.png b/public/-/emojis/1/no_good_tone5.png
new file mode 100644
index 00000000000..9a7084afa0a
--- /dev/null
+++ b/public/-/emojis/1/no_good_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/no_mobile_phones.png b/public/-/emojis/1/no_mobile_phones.png
new file mode 100644
index 00000000000..7b1ae6ea579
--- /dev/null
+++ b/public/-/emojis/1/no_mobile_phones.png
Binary files differ
diff --git a/public/-/emojis/1/no_mouth.png b/public/-/emojis/1/no_mouth.png
new file mode 100644
index 00000000000..b642f6c1172
--- /dev/null
+++ b/public/-/emojis/1/no_mouth.png
Binary files differ
diff --git a/public/-/emojis/1/no_pedestrians.png b/public/-/emojis/1/no_pedestrians.png
new file mode 100644
index 00000000000..286aa577a23
--- /dev/null
+++ b/public/-/emojis/1/no_pedestrians.png
Binary files differ
diff --git a/public/-/emojis/1/no_smoking.png b/public/-/emojis/1/no_smoking.png
new file mode 100644
index 00000000000..586b8d29d05
--- /dev/null
+++ b/public/-/emojis/1/no_smoking.png
Binary files differ
diff --git a/public/-/emojis/1/non-potable_water.png b/public/-/emojis/1/non-potable_water.png
new file mode 100644
index 00000000000..827d4193f4e
--- /dev/null
+++ b/public/-/emojis/1/non-potable_water.png
Binary files differ
diff --git a/public/-/emojis/1/nose.png b/public/-/emojis/1/nose.png
new file mode 100644
index 00000000000..2f04ac5f98f
--- /dev/null
+++ b/public/-/emojis/1/nose.png
Binary files differ
diff --git a/public/-/emojis/1/nose_tone1.png b/public/-/emojis/1/nose_tone1.png
new file mode 100644
index 00000000000..8008d17506e
--- /dev/null
+++ b/public/-/emojis/1/nose_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/nose_tone2.png b/public/-/emojis/1/nose_tone2.png
new file mode 100644
index 00000000000..ac17f26e827
--- /dev/null
+++ b/public/-/emojis/1/nose_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/nose_tone3.png b/public/-/emojis/1/nose_tone3.png
new file mode 100644
index 00000000000..d8b6cbe0f8e
--- /dev/null
+++ b/public/-/emojis/1/nose_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/nose_tone4.png b/public/-/emojis/1/nose_tone4.png
new file mode 100644
index 00000000000..004b2631e2e
--- /dev/null
+++ b/public/-/emojis/1/nose_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/nose_tone5.png b/public/-/emojis/1/nose_tone5.png
new file mode 100644
index 00000000000..7b33821f6c9
--- /dev/null
+++ b/public/-/emojis/1/nose_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/notebook.png b/public/-/emojis/1/notebook.png
new file mode 100644
index 00000000000..f6c28b4915d
--- /dev/null
+++ b/public/-/emojis/1/notebook.png
Binary files differ
diff --git a/public/-/emojis/1/notebook_with_decorative_cover.png b/public/-/emojis/1/notebook_with_decorative_cover.png
new file mode 100644
index 00000000000..03f566b6d2c
--- /dev/null
+++ b/public/-/emojis/1/notebook_with_decorative_cover.png
Binary files differ
diff --git a/public/-/emojis/1/notepad_spiral.png b/public/-/emojis/1/notepad_spiral.png
new file mode 100644
index 00000000000..85faa10d8ea
--- /dev/null
+++ b/public/-/emojis/1/notepad_spiral.png
Binary files differ
diff --git a/public/-/emojis/1/notes.png b/public/-/emojis/1/notes.png
new file mode 100644
index 00000000000..57d499aa181
--- /dev/null
+++ b/public/-/emojis/1/notes.png
Binary files differ
diff --git a/public/-/emojis/1/nut_and_bolt.png b/public/-/emojis/1/nut_and_bolt.png
new file mode 100644
index 00000000000..4b9ae155319
--- /dev/null
+++ b/public/-/emojis/1/nut_and_bolt.png
Binary files differ
diff --git a/public/-/emojis/1/o.png b/public/-/emojis/1/o.png
new file mode 100644
index 00000000000..3fe75ce4675
--- /dev/null
+++ b/public/-/emojis/1/o.png
Binary files differ
diff --git a/public/-/emojis/1/o2.png b/public/-/emojis/1/o2.png
new file mode 100644
index 00000000000..73278ba194a
--- /dev/null
+++ b/public/-/emojis/1/o2.png
Binary files differ
diff --git a/public/-/emojis/1/ocean.png b/public/-/emojis/1/ocean.png
new file mode 100644
index 00000000000..45ff1e87703
--- /dev/null
+++ b/public/-/emojis/1/ocean.png
Binary files differ
diff --git a/public/-/emojis/1/octagonal_sign.png b/public/-/emojis/1/octagonal_sign.png
new file mode 100644
index 00000000000..5ed61004045
--- /dev/null
+++ b/public/-/emojis/1/octagonal_sign.png
Binary files differ
diff --git a/public/-/emojis/1/octopus.png b/public/-/emojis/1/octopus.png
new file mode 100644
index 00000000000..72c84074aac
--- /dev/null
+++ b/public/-/emojis/1/octopus.png
Binary files differ
diff --git a/public/-/emojis/1/oden.png b/public/-/emojis/1/oden.png
new file mode 100644
index 00000000000..d38a849fece
--- /dev/null
+++ b/public/-/emojis/1/oden.png
Binary files differ
diff --git a/public/-/emojis/1/office.png b/public/-/emojis/1/office.png
new file mode 100644
index 00000000000..7eee927d1b0
--- /dev/null
+++ b/public/-/emojis/1/office.png
Binary files differ
diff --git a/public/-/emojis/1/oil.png b/public/-/emojis/1/oil.png
new file mode 100644
index 00000000000..c4c4d42da8b
--- /dev/null
+++ b/public/-/emojis/1/oil.png
Binary files differ
diff --git a/public/-/emojis/1/ok.png b/public/-/emojis/1/ok.png
new file mode 100644
index 00000000000..d0d775532ff
--- /dev/null
+++ b/public/-/emojis/1/ok.png
Binary files differ
diff --git a/public/-/emojis/1/ok_hand.png b/public/-/emojis/1/ok_hand.png
new file mode 100644
index 00000000000..028d69b0de3
--- /dev/null
+++ b/public/-/emojis/1/ok_hand.png
Binary files differ
diff --git a/public/-/emojis/1/ok_hand_tone1.png b/public/-/emojis/1/ok_hand_tone1.png
new file mode 100644
index 00000000000..cecf7b2ab5a
--- /dev/null
+++ b/public/-/emojis/1/ok_hand_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/ok_hand_tone2.png b/public/-/emojis/1/ok_hand_tone2.png
new file mode 100644
index 00000000000..c19239bcd3d
--- /dev/null
+++ b/public/-/emojis/1/ok_hand_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/ok_hand_tone3.png b/public/-/emojis/1/ok_hand_tone3.png
new file mode 100644
index 00000000000..94b65b03ecd
--- /dev/null
+++ b/public/-/emojis/1/ok_hand_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/ok_hand_tone4.png b/public/-/emojis/1/ok_hand_tone4.png
new file mode 100644
index 00000000000..03d26f08e6a
--- /dev/null
+++ b/public/-/emojis/1/ok_hand_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/ok_hand_tone5.png b/public/-/emojis/1/ok_hand_tone5.png
new file mode 100644
index 00000000000..d4b24086364
--- /dev/null
+++ b/public/-/emojis/1/ok_hand_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/ok_woman.png b/public/-/emojis/1/ok_woman.png
new file mode 100644
index 00000000000..90a2c7469c4
--- /dev/null
+++ b/public/-/emojis/1/ok_woman.png
Binary files differ
diff --git a/public/-/emojis/1/ok_woman_tone1.png b/public/-/emojis/1/ok_woman_tone1.png
new file mode 100644
index 00000000000..c99543e785b
--- /dev/null
+++ b/public/-/emojis/1/ok_woman_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/ok_woman_tone2.png b/public/-/emojis/1/ok_woman_tone2.png
new file mode 100644
index 00000000000..ad5fae813db
--- /dev/null
+++ b/public/-/emojis/1/ok_woman_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/ok_woman_tone3.png b/public/-/emojis/1/ok_woman_tone3.png
new file mode 100644
index 00000000000..51bf4fab406
--- /dev/null
+++ b/public/-/emojis/1/ok_woman_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/ok_woman_tone4.png b/public/-/emojis/1/ok_woman_tone4.png
new file mode 100644
index 00000000000..ee3f9dc640a
--- /dev/null
+++ b/public/-/emojis/1/ok_woman_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/ok_woman_tone5.png b/public/-/emojis/1/ok_woman_tone5.png
new file mode 100644
index 00000000000..62a9d9237f7
--- /dev/null
+++ b/public/-/emojis/1/ok_woman_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/older_man.png b/public/-/emojis/1/older_man.png
new file mode 100644
index 00000000000..4ace4e6f308
--- /dev/null
+++ b/public/-/emojis/1/older_man.png
Binary files differ
diff --git a/public/-/emojis/1/older_man_tone1.png b/public/-/emojis/1/older_man_tone1.png
new file mode 100644
index 00000000000..ab459baace8
--- /dev/null
+++ b/public/-/emojis/1/older_man_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/older_man_tone2.png b/public/-/emojis/1/older_man_tone2.png
new file mode 100644
index 00000000000..f4dfc7694ea
--- /dev/null
+++ b/public/-/emojis/1/older_man_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/older_man_tone3.png b/public/-/emojis/1/older_man_tone3.png
new file mode 100644
index 00000000000..5ffd11792f4
--- /dev/null
+++ b/public/-/emojis/1/older_man_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/older_man_tone4.png b/public/-/emojis/1/older_man_tone4.png
new file mode 100644
index 00000000000..b350a764bfd
--- /dev/null
+++ b/public/-/emojis/1/older_man_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/older_man_tone5.png b/public/-/emojis/1/older_man_tone5.png
new file mode 100644
index 00000000000..05fe24a1708
--- /dev/null
+++ b/public/-/emojis/1/older_man_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/older_woman.png b/public/-/emojis/1/older_woman.png
new file mode 100644
index 00000000000..52dc4987143
--- /dev/null
+++ b/public/-/emojis/1/older_woman.png
Binary files differ
diff --git a/public/-/emojis/1/older_woman_tone1.png b/public/-/emojis/1/older_woman_tone1.png
new file mode 100644
index 00000000000..b49e821402c
--- /dev/null
+++ b/public/-/emojis/1/older_woman_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/older_woman_tone2.png b/public/-/emojis/1/older_woman_tone2.png
new file mode 100644
index 00000000000..e86bf5ab3b7
--- /dev/null
+++ b/public/-/emojis/1/older_woman_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/older_woman_tone3.png b/public/-/emojis/1/older_woman_tone3.png
new file mode 100644
index 00000000000..83fc14b0874
--- /dev/null
+++ b/public/-/emojis/1/older_woman_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/older_woman_tone4.png b/public/-/emojis/1/older_woman_tone4.png
new file mode 100644
index 00000000000..e4aa8a424d4
--- /dev/null
+++ b/public/-/emojis/1/older_woman_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/older_woman_tone5.png b/public/-/emojis/1/older_woman_tone5.png
new file mode 100644
index 00000000000..4009012bb0a
--- /dev/null
+++ b/public/-/emojis/1/older_woman_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/om_symbol.png b/public/-/emojis/1/om_symbol.png
new file mode 100644
index 00000000000..a35c63c459c
--- /dev/null
+++ b/public/-/emojis/1/om_symbol.png
Binary files differ
diff --git a/public/-/emojis/1/on.png b/public/-/emojis/1/on.png
new file mode 100644
index 00000000000..a0c371ae21e
--- /dev/null
+++ b/public/-/emojis/1/on.png
Binary files differ
diff --git a/public/-/emojis/1/oncoming_automobile.png b/public/-/emojis/1/oncoming_automobile.png
new file mode 100644
index 00000000000..3c7e1d52e63
--- /dev/null
+++ b/public/-/emojis/1/oncoming_automobile.png
Binary files differ
diff --git a/public/-/emojis/1/oncoming_bus.png b/public/-/emojis/1/oncoming_bus.png
new file mode 100644
index 00000000000..ad91e256c7f
--- /dev/null
+++ b/public/-/emojis/1/oncoming_bus.png
Binary files differ
diff --git a/public/-/emojis/1/oncoming_police_car.png b/public/-/emojis/1/oncoming_police_car.png
new file mode 100644
index 00000000000..c9109c85b5d
--- /dev/null
+++ b/public/-/emojis/1/oncoming_police_car.png
Binary files differ
diff --git a/public/-/emojis/1/oncoming_taxi.png b/public/-/emojis/1/oncoming_taxi.png
new file mode 100644
index 00000000000..fea14e45846
--- /dev/null
+++ b/public/-/emojis/1/oncoming_taxi.png
Binary files differ
diff --git a/public/-/emojis/1/one.png b/public/-/emojis/1/one.png
new file mode 100644
index 00000000000..e6d84b80128
--- /dev/null
+++ b/public/-/emojis/1/one.png
Binary files differ
diff --git a/public/-/emojis/1/open_file_folder.png b/public/-/emojis/1/open_file_folder.png
new file mode 100644
index 00000000000..3993b09222f
--- /dev/null
+++ b/public/-/emojis/1/open_file_folder.png
Binary files differ
diff --git a/public/-/emojis/1/open_hands.png b/public/-/emojis/1/open_hands.png
new file mode 100644
index 00000000000..1cf75c9101e
--- /dev/null
+++ b/public/-/emojis/1/open_hands.png
Binary files differ
diff --git a/public/-/emojis/1/open_hands_tone1.png b/public/-/emojis/1/open_hands_tone1.png
new file mode 100644
index 00000000000..352d2614f11
--- /dev/null
+++ b/public/-/emojis/1/open_hands_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/open_hands_tone2.png b/public/-/emojis/1/open_hands_tone2.png
new file mode 100644
index 00000000000..70824a50c73
--- /dev/null
+++ b/public/-/emojis/1/open_hands_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/open_hands_tone3.png b/public/-/emojis/1/open_hands_tone3.png
new file mode 100644
index 00000000000..d7d136bd3db
--- /dev/null
+++ b/public/-/emojis/1/open_hands_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/open_hands_tone4.png b/public/-/emojis/1/open_hands_tone4.png
new file mode 100644
index 00000000000..df4eaa711e7
--- /dev/null
+++ b/public/-/emojis/1/open_hands_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/open_hands_tone5.png b/public/-/emojis/1/open_hands_tone5.png
new file mode 100644
index 00000000000..7dc04eaebd8
--- /dev/null
+++ b/public/-/emojis/1/open_hands_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/open_mouth.png b/public/-/emojis/1/open_mouth.png
new file mode 100644
index 00000000000..a62cd27e148
--- /dev/null
+++ b/public/-/emojis/1/open_mouth.png
Binary files differ
diff --git a/public/-/emojis/1/ophiuchus.png b/public/-/emojis/1/ophiuchus.png
new file mode 100644
index 00000000000..0a780a700da
--- /dev/null
+++ b/public/-/emojis/1/ophiuchus.png
Binary files differ
diff --git a/public/-/emojis/1/orange_book.png b/public/-/emojis/1/orange_book.png
new file mode 100644
index 00000000000..ab40e6ae6a2
--- /dev/null
+++ b/public/-/emojis/1/orange_book.png
Binary files differ
diff --git a/public/-/emojis/1/orthodox_cross.png b/public/-/emojis/1/orthodox_cross.png
new file mode 100644
index 00000000000..0530e33a4d4
--- /dev/null
+++ b/public/-/emojis/1/orthodox_cross.png
Binary files differ
diff --git a/public/-/emojis/1/outbox_tray.png b/public/-/emojis/1/outbox_tray.png
new file mode 100644
index 00000000000..46493ed5b2c
--- /dev/null
+++ b/public/-/emojis/1/outbox_tray.png
Binary files differ
diff --git a/public/-/emojis/1/owl.png b/public/-/emojis/1/owl.png
new file mode 100644
index 00000000000..fa6815480c3
--- /dev/null
+++ b/public/-/emojis/1/owl.png
Binary files differ
diff --git a/public/-/emojis/1/ox.png b/public/-/emojis/1/ox.png
new file mode 100644
index 00000000000..badf5708f2f
--- /dev/null
+++ b/public/-/emojis/1/ox.png
Binary files differ
diff --git a/public/-/emojis/1/package.png b/public/-/emojis/1/package.png
new file mode 100644
index 00000000000..85431756ad8
--- /dev/null
+++ b/public/-/emojis/1/package.png
Binary files differ
diff --git a/public/-/emojis/1/page_facing_up.png b/public/-/emojis/1/page_facing_up.png
new file mode 100644
index 00000000000..ba4ed757e01
--- /dev/null
+++ b/public/-/emojis/1/page_facing_up.png
Binary files differ
diff --git a/public/-/emojis/1/page_with_curl.png b/public/-/emojis/1/page_with_curl.png
new file mode 100644
index 00000000000..06355319c74
--- /dev/null
+++ b/public/-/emojis/1/page_with_curl.png
Binary files differ
diff --git a/public/-/emojis/1/pager.png b/public/-/emojis/1/pager.png
new file mode 100644
index 00000000000..b24b99306a2
--- /dev/null
+++ b/public/-/emojis/1/pager.png
Binary files differ
diff --git a/public/-/emojis/1/paintbrush.png b/public/-/emojis/1/paintbrush.png
new file mode 100644
index 00000000000..28bffbaa3c9
--- /dev/null
+++ b/public/-/emojis/1/paintbrush.png
Binary files differ
diff --git a/public/-/emojis/1/palm_tree.png b/public/-/emojis/1/palm_tree.png
new file mode 100644
index 00000000000..4bbb10f4f19
--- /dev/null
+++ b/public/-/emojis/1/palm_tree.png
Binary files differ
diff --git a/public/-/emojis/1/pancakes.png b/public/-/emojis/1/pancakes.png
new file mode 100644
index 00000000000..6223d1a28e9
--- /dev/null
+++ b/public/-/emojis/1/pancakes.png
Binary files differ
diff --git a/public/-/emojis/1/panda_face.png b/public/-/emojis/1/panda_face.png
new file mode 100644
index 00000000000..978382775ce
--- /dev/null
+++ b/public/-/emojis/1/panda_face.png
Binary files differ
diff --git a/public/-/emojis/1/paperclip.png b/public/-/emojis/1/paperclip.png
new file mode 100644
index 00000000000..8cd8d4f8750
--- /dev/null
+++ b/public/-/emojis/1/paperclip.png
Binary files differ
diff --git a/public/-/emojis/1/paperclips.png b/public/-/emojis/1/paperclips.png
new file mode 100644
index 00000000000..76021e8c705
--- /dev/null
+++ b/public/-/emojis/1/paperclips.png
Binary files differ
diff --git a/public/-/emojis/1/park.png b/public/-/emojis/1/park.png
new file mode 100644
index 00000000000..63ec7016301
--- /dev/null
+++ b/public/-/emojis/1/park.png
Binary files differ
diff --git a/public/-/emojis/1/parking.png b/public/-/emojis/1/parking.png
new file mode 100644
index 00000000000..7be7dac27e8
--- /dev/null
+++ b/public/-/emojis/1/parking.png
Binary files differ
diff --git a/public/-/emojis/1/part_alternation_mark.png b/public/-/emojis/1/part_alternation_mark.png
new file mode 100644
index 00000000000..70453d41528
--- /dev/null
+++ b/public/-/emojis/1/part_alternation_mark.png
Binary files differ
diff --git a/public/-/emojis/1/partly_sunny.png b/public/-/emojis/1/partly_sunny.png
new file mode 100644
index 00000000000..a55e59c344c
--- /dev/null
+++ b/public/-/emojis/1/partly_sunny.png
Binary files differ
diff --git a/public/-/emojis/1/passport_control.png b/public/-/emojis/1/passport_control.png
new file mode 100644
index 00000000000..079e34ee4d4
--- /dev/null
+++ b/public/-/emojis/1/passport_control.png
Binary files differ
diff --git a/public/-/emojis/1/pause_button.png b/public/-/emojis/1/pause_button.png
new file mode 100644
index 00000000000..4f07e7ebfd7
--- /dev/null
+++ b/public/-/emojis/1/pause_button.png
Binary files differ
diff --git a/public/-/emojis/1/peace.png b/public/-/emojis/1/peace.png
new file mode 100644
index 00000000000..86033faf477
--- /dev/null
+++ b/public/-/emojis/1/peace.png
Binary files differ
diff --git a/public/-/emojis/1/peach.png b/public/-/emojis/1/peach.png
new file mode 100644
index 00000000000..9ab57cbb758
--- /dev/null
+++ b/public/-/emojis/1/peach.png
Binary files differ
diff --git a/public/-/emojis/1/peanuts.png b/public/-/emojis/1/peanuts.png
new file mode 100644
index 00000000000..b64fadad010
--- /dev/null
+++ b/public/-/emojis/1/peanuts.png
Binary files differ
diff --git a/public/-/emojis/1/pear.png b/public/-/emojis/1/pear.png
new file mode 100644
index 00000000000..3869f718bcf
--- /dev/null
+++ b/public/-/emojis/1/pear.png
Binary files differ
diff --git a/public/-/emojis/1/pen_ballpoint.png b/public/-/emojis/1/pen_ballpoint.png
new file mode 100644
index 00000000000..6ef7a342433
--- /dev/null
+++ b/public/-/emojis/1/pen_ballpoint.png
Binary files differ
diff --git a/public/-/emojis/1/pen_fountain.png b/public/-/emojis/1/pen_fountain.png
new file mode 100644
index 00000000000..3ca4bd2c231
--- /dev/null
+++ b/public/-/emojis/1/pen_fountain.png
Binary files differ
diff --git a/public/-/emojis/1/pencil.png b/public/-/emojis/1/pencil.png
new file mode 100644
index 00000000000..edc6155e168
--- /dev/null
+++ b/public/-/emojis/1/pencil.png
Binary files differ
diff --git a/public/-/emojis/1/pencil2.png b/public/-/emojis/1/pencil2.png
new file mode 100644
index 00000000000..3833d590fa2
--- /dev/null
+++ b/public/-/emojis/1/pencil2.png
Binary files differ
diff --git a/public/-/emojis/1/penguin.png b/public/-/emojis/1/penguin.png
new file mode 100644
index 00000000000..c0064fb9734
--- /dev/null
+++ b/public/-/emojis/1/penguin.png
Binary files differ
diff --git a/public/-/emojis/1/pensive.png b/public/-/emojis/1/pensive.png
new file mode 100644
index 00000000000..490fb566954
--- /dev/null
+++ b/public/-/emojis/1/pensive.png
Binary files differ
diff --git a/public/-/emojis/1/performing_arts.png b/public/-/emojis/1/performing_arts.png
new file mode 100644
index 00000000000..685441fdaa1
--- /dev/null
+++ b/public/-/emojis/1/performing_arts.png
Binary files differ
diff --git a/public/-/emojis/1/persevere.png b/public/-/emojis/1/persevere.png
new file mode 100644
index 00000000000..646a05fe908
--- /dev/null
+++ b/public/-/emojis/1/persevere.png
Binary files differ
diff --git a/public/-/emojis/1/person_frowning.png b/public/-/emojis/1/person_frowning.png
new file mode 100644
index 00000000000..579324959a1
--- /dev/null
+++ b/public/-/emojis/1/person_frowning.png
Binary files differ
diff --git a/public/-/emojis/1/person_frowning_tone1.png b/public/-/emojis/1/person_frowning_tone1.png
new file mode 100644
index 00000000000..21d3bb43923
--- /dev/null
+++ b/public/-/emojis/1/person_frowning_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/person_frowning_tone2.png b/public/-/emojis/1/person_frowning_tone2.png
new file mode 100644
index 00000000000..973f5fc8382
--- /dev/null
+++ b/public/-/emojis/1/person_frowning_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/person_frowning_tone3.png b/public/-/emojis/1/person_frowning_tone3.png
new file mode 100644
index 00000000000..41fbcc78816
--- /dev/null
+++ b/public/-/emojis/1/person_frowning_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/person_frowning_tone4.png b/public/-/emojis/1/person_frowning_tone4.png
new file mode 100644
index 00000000000..5a37c741030
--- /dev/null
+++ b/public/-/emojis/1/person_frowning_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/person_frowning_tone5.png b/public/-/emojis/1/person_frowning_tone5.png
new file mode 100644
index 00000000000..e08141f3efe
--- /dev/null
+++ b/public/-/emojis/1/person_frowning_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_blond_hair.png b/public/-/emojis/1/person_with_blond_hair.png
new file mode 100644
index 00000000000..ad6f01a7dda
--- /dev/null
+++ b/public/-/emojis/1/person_with_blond_hair.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_blond_hair_tone1.png b/public/-/emojis/1/person_with_blond_hair_tone1.png
new file mode 100644
index 00000000000..7d18ef24445
--- /dev/null
+++ b/public/-/emojis/1/person_with_blond_hair_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_blond_hair_tone2.png b/public/-/emojis/1/person_with_blond_hair_tone2.png
new file mode 100644
index 00000000000..dae1307315c
--- /dev/null
+++ b/public/-/emojis/1/person_with_blond_hair_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_blond_hair_tone3.png b/public/-/emojis/1/person_with_blond_hair_tone3.png
new file mode 100644
index 00000000000..684677e8e5a
--- /dev/null
+++ b/public/-/emojis/1/person_with_blond_hair_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_blond_hair_tone4.png b/public/-/emojis/1/person_with_blond_hair_tone4.png
new file mode 100644
index 00000000000..012be0b51f8
--- /dev/null
+++ b/public/-/emojis/1/person_with_blond_hair_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_blond_hair_tone5.png b/public/-/emojis/1/person_with_blond_hair_tone5.png
new file mode 100644
index 00000000000..d4ecc4cf44b
--- /dev/null
+++ b/public/-/emojis/1/person_with_blond_hair_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_pouting_face.png b/public/-/emojis/1/person_with_pouting_face.png
new file mode 100644
index 00000000000..10eb0571078
--- /dev/null
+++ b/public/-/emojis/1/person_with_pouting_face.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_pouting_face_tone1.png b/public/-/emojis/1/person_with_pouting_face_tone1.png
new file mode 100644
index 00000000000..57e826b75a4
--- /dev/null
+++ b/public/-/emojis/1/person_with_pouting_face_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_pouting_face_tone2.png b/public/-/emojis/1/person_with_pouting_face_tone2.png
new file mode 100644
index 00000000000..3f317c0c25f
--- /dev/null
+++ b/public/-/emojis/1/person_with_pouting_face_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_pouting_face_tone3.png b/public/-/emojis/1/person_with_pouting_face_tone3.png
new file mode 100644
index 00000000000..d2fbb6c20bf
--- /dev/null
+++ b/public/-/emojis/1/person_with_pouting_face_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_pouting_face_tone4.png b/public/-/emojis/1/person_with_pouting_face_tone4.png
new file mode 100644
index 00000000000..643ceb4a5c5
--- /dev/null
+++ b/public/-/emojis/1/person_with_pouting_face_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/person_with_pouting_face_tone5.png b/public/-/emojis/1/person_with_pouting_face_tone5.png
new file mode 100644
index 00000000000..b2eb6859c32
--- /dev/null
+++ b/public/-/emojis/1/person_with_pouting_face_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/pick.png b/public/-/emojis/1/pick.png
new file mode 100644
index 00000000000..6370fe6d791
--- /dev/null
+++ b/public/-/emojis/1/pick.png
Binary files differ
diff --git a/public/-/emojis/1/pig.png b/public/-/emojis/1/pig.png
new file mode 100644
index 00000000000..afe05ca1676
--- /dev/null
+++ b/public/-/emojis/1/pig.png
Binary files differ
diff --git a/public/-/emojis/1/pig2.png b/public/-/emojis/1/pig2.png
new file mode 100644
index 00000000000..5f31c1a2d75
--- /dev/null
+++ b/public/-/emojis/1/pig2.png
Binary files differ
diff --git a/public/-/emojis/1/pig_nose.png b/public/-/emojis/1/pig_nose.png
new file mode 100644
index 00000000000..3610ae4a910
--- /dev/null
+++ b/public/-/emojis/1/pig_nose.png
Binary files differ
diff --git a/public/-/emojis/1/pill.png b/public/-/emojis/1/pill.png
new file mode 100644
index 00000000000..1d4530e77a3
--- /dev/null
+++ b/public/-/emojis/1/pill.png
Binary files differ
diff --git a/public/-/emojis/1/pineapple.png b/public/-/emojis/1/pineapple.png
new file mode 100644
index 00000000000..c89a1606462
--- /dev/null
+++ b/public/-/emojis/1/pineapple.png
Binary files differ
diff --git a/public/-/emojis/1/ping_pong.png b/public/-/emojis/1/ping_pong.png
new file mode 100644
index 00000000000..ff3c51727d1
--- /dev/null
+++ b/public/-/emojis/1/ping_pong.png
Binary files differ
diff --git a/public/-/emojis/1/pisces.png b/public/-/emojis/1/pisces.png
new file mode 100644
index 00000000000..7f6f646a95c
--- /dev/null
+++ b/public/-/emojis/1/pisces.png
Binary files differ
diff --git a/public/-/emojis/1/pizza.png b/public/-/emojis/1/pizza.png
new file mode 100644
index 00000000000..e07365cb398
--- /dev/null
+++ b/public/-/emojis/1/pizza.png
Binary files differ
diff --git a/public/-/emojis/1/place_of_worship.png b/public/-/emojis/1/place_of_worship.png
new file mode 100644
index 00000000000..207d59cce85
--- /dev/null
+++ b/public/-/emojis/1/place_of_worship.png
Binary files differ
diff --git a/public/-/emojis/1/play_pause.png b/public/-/emojis/1/play_pause.png
new file mode 100644
index 00000000000..a9f857139ac
--- /dev/null
+++ b/public/-/emojis/1/play_pause.png
Binary files differ
diff --git a/public/-/emojis/1/point_down.png b/public/-/emojis/1/point_down.png
new file mode 100644
index 00000000000..00d3d13ab5c
--- /dev/null
+++ b/public/-/emojis/1/point_down.png
Binary files differ
diff --git a/public/-/emojis/1/point_down_tone1.png b/public/-/emojis/1/point_down_tone1.png
new file mode 100644
index 00000000000..140f157d8c7
--- /dev/null
+++ b/public/-/emojis/1/point_down_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/point_down_tone2.png b/public/-/emojis/1/point_down_tone2.png
new file mode 100644
index 00000000000..d518544f7fa
--- /dev/null
+++ b/public/-/emojis/1/point_down_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/point_down_tone3.png b/public/-/emojis/1/point_down_tone3.png
new file mode 100644
index 00000000000..018b688b8b7
--- /dev/null
+++ b/public/-/emojis/1/point_down_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/point_down_tone4.png b/public/-/emojis/1/point_down_tone4.png
new file mode 100644
index 00000000000..98845bf6f72
--- /dev/null
+++ b/public/-/emojis/1/point_down_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/point_down_tone5.png b/public/-/emojis/1/point_down_tone5.png
new file mode 100644
index 00000000000..9a9b039a9fc
--- /dev/null
+++ b/public/-/emojis/1/point_down_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/point_left.png b/public/-/emojis/1/point_left.png
new file mode 100644
index 00000000000..599fa2e3cf1
--- /dev/null
+++ b/public/-/emojis/1/point_left.png
Binary files differ
diff --git a/public/-/emojis/1/point_left_tone1.png b/public/-/emojis/1/point_left_tone1.png
new file mode 100644
index 00000000000..88e2c306076
--- /dev/null
+++ b/public/-/emojis/1/point_left_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/point_left_tone2.png b/public/-/emojis/1/point_left_tone2.png
new file mode 100644
index 00000000000..d3c89d87c5f
--- /dev/null
+++ b/public/-/emojis/1/point_left_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/point_left_tone3.png b/public/-/emojis/1/point_left_tone3.png
new file mode 100644
index 00000000000..b23b9167358
--- /dev/null
+++ b/public/-/emojis/1/point_left_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/point_left_tone4.png b/public/-/emojis/1/point_left_tone4.png
new file mode 100644
index 00000000000..3093f325c27
--- /dev/null
+++ b/public/-/emojis/1/point_left_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/point_left_tone5.png b/public/-/emojis/1/point_left_tone5.png
new file mode 100644
index 00000000000..2b4cbfa120c
--- /dev/null
+++ b/public/-/emojis/1/point_left_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/point_right.png b/public/-/emojis/1/point_right.png
new file mode 100644
index 00000000000..93a3cd34aa5
--- /dev/null
+++ b/public/-/emojis/1/point_right.png
Binary files differ
diff --git a/public/-/emojis/1/point_right_tone1.png b/public/-/emojis/1/point_right_tone1.png
new file mode 100644
index 00000000000..4a28c6bbc89
--- /dev/null
+++ b/public/-/emojis/1/point_right_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/point_right_tone2.png b/public/-/emojis/1/point_right_tone2.png
new file mode 100644
index 00000000000..7cb13231733
--- /dev/null
+++ b/public/-/emojis/1/point_right_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/point_right_tone3.png b/public/-/emojis/1/point_right_tone3.png
new file mode 100644
index 00000000000..5514807d71a
--- /dev/null
+++ b/public/-/emojis/1/point_right_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/point_right_tone4.png b/public/-/emojis/1/point_right_tone4.png
new file mode 100644
index 00000000000..b8541d6440d
--- /dev/null
+++ b/public/-/emojis/1/point_right_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/point_right_tone5.png b/public/-/emojis/1/point_right_tone5.png
new file mode 100644
index 00000000000..1b7aab07bb1
--- /dev/null
+++ b/public/-/emojis/1/point_right_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/point_up.png b/public/-/emojis/1/point_up.png
new file mode 100644
index 00000000000..f4978ff0f00
--- /dev/null
+++ b/public/-/emojis/1/point_up.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_2.png b/public/-/emojis/1/point_up_2.png
new file mode 100644
index 00000000000..bc496dfeae4
--- /dev/null
+++ b/public/-/emojis/1/point_up_2.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_2_tone1.png b/public/-/emojis/1/point_up_2_tone1.png
new file mode 100644
index 00000000000..a12a7e78430
--- /dev/null
+++ b/public/-/emojis/1/point_up_2_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_2_tone2.png b/public/-/emojis/1/point_up_2_tone2.png
new file mode 100644
index 00000000000..cdff40ceab0
--- /dev/null
+++ b/public/-/emojis/1/point_up_2_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_2_tone3.png b/public/-/emojis/1/point_up_2_tone3.png
new file mode 100644
index 00000000000..a07ce9e5ae8
--- /dev/null
+++ b/public/-/emojis/1/point_up_2_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_2_tone4.png b/public/-/emojis/1/point_up_2_tone4.png
new file mode 100644
index 00000000000..4f86c88ba42
--- /dev/null
+++ b/public/-/emojis/1/point_up_2_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_2_tone5.png b/public/-/emojis/1/point_up_2_tone5.png
new file mode 100644
index 00000000000..ed1b26c35d3
--- /dev/null
+++ b/public/-/emojis/1/point_up_2_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_tone1.png b/public/-/emojis/1/point_up_tone1.png
new file mode 100644
index 00000000000..6a9db21d64c
--- /dev/null
+++ b/public/-/emojis/1/point_up_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_tone2.png b/public/-/emojis/1/point_up_tone2.png
new file mode 100644
index 00000000000..15aa9ea0e05
--- /dev/null
+++ b/public/-/emojis/1/point_up_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_tone3.png b/public/-/emojis/1/point_up_tone3.png
new file mode 100644
index 00000000000..652b73a9c5d
--- /dev/null
+++ b/public/-/emojis/1/point_up_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_tone4.png b/public/-/emojis/1/point_up_tone4.png
new file mode 100644
index 00000000000..692bad926e9
--- /dev/null
+++ b/public/-/emojis/1/point_up_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/point_up_tone5.png b/public/-/emojis/1/point_up_tone5.png
new file mode 100644
index 00000000000..1e1b10fb71c
--- /dev/null
+++ b/public/-/emojis/1/point_up_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/police_car.png b/public/-/emojis/1/police_car.png
new file mode 100644
index 00000000000..3da4253de7e
--- /dev/null
+++ b/public/-/emojis/1/police_car.png
Binary files differ
diff --git a/public/-/emojis/1/poodle.png b/public/-/emojis/1/poodle.png
new file mode 100644
index 00000000000..8ec39e396af
--- /dev/null
+++ b/public/-/emojis/1/poodle.png
Binary files differ
diff --git a/public/-/emojis/1/poop.png b/public/-/emojis/1/poop.png
new file mode 100644
index 00000000000..10b15e72d56
--- /dev/null
+++ b/public/-/emojis/1/poop.png
Binary files differ
diff --git a/public/-/emojis/1/popcorn.png b/public/-/emojis/1/popcorn.png
new file mode 100644
index 00000000000..36853e381d4
--- /dev/null
+++ b/public/-/emojis/1/popcorn.png
Binary files differ
diff --git a/public/-/emojis/1/post_office.png b/public/-/emojis/1/post_office.png
new file mode 100644
index 00000000000..a23848f9aa0
--- /dev/null
+++ b/public/-/emojis/1/post_office.png
Binary files differ
diff --git a/public/-/emojis/1/postal_horn.png b/public/-/emojis/1/postal_horn.png
new file mode 100644
index 00000000000..c173b8dbd67
--- /dev/null
+++ b/public/-/emojis/1/postal_horn.png
Binary files differ
diff --git a/public/-/emojis/1/postbox.png b/public/-/emojis/1/postbox.png
new file mode 100644
index 00000000000..07c9c4ab3d6
--- /dev/null
+++ b/public/-/emojis/1/postbox.png
Binary files differ
diff --git a/public/-/emojis/1/potable_water.png b/public/-/emojis/1/potable_water.png
new file mode 100644
index 00000000000..2c610049459
--- /dev/null
+++ b/public/-/emojis/1/potable_water.png
Binary files differ
diff --git a/public/-/emojis/1/potato.png b/public/-/emojis/1/potato.png
new file mode 100644
index 00000000000..70350ca2c0a
--- /dev/null
+++ b/public/-/emojis/1/potato.png
Binary files differ
diff --git a/public/-/emojis/1/pouch.png b/public/-/emojis/1/pouch.png
new file mode 100644
index 00000000000..8795c6c66ff
--- /dev/null
+++ b/public/-/emojis/1/pouch.png
Binary files differ
diff --git a/public/-/emojis/1/poultry_leg.png b/public/-/emojis/1/poultry_leg.png
new file mode 100644
index 00000000000..eea4a53a2f9
--- /dev/null
+++ b/public/-/emojis/1/poultry_leg.png
Binary files differ
diff --git a/public/-/emojis/1/pound.png b/public/-/emojis/1/pound.png
new file mode 100644
index 00000000000..a0d4c4099e9
--- /dev/null
+++ b/public/-/emojis/1/pound.png
Binary files differ
diff --git a/public/-/emojis/1/pouting_cat.png b/public/-/emojis/1/pouting_cat.png
new file mode 100644
index 00000000000..41ddfeab42b
--- /dev/null
+++ b/public/-/emojis/1/pouting_cat.png
Binary files differ
diff --git a/public/-/emojis/1/pray.png b/public/-/emojis/1/pray.png
new file mode 100644
index 00000000000..8347f2435be
--- /dev/null
+++ b/public/-/emojis/1/pray.png
Binary files differ
diff --git a/public/-/emojis/1/pray_tone1.png b/public/-/emojis/1/pray_tone1.png
new file mode 100644
index 00000000000..060ef257172
--- /dev/null
+++ b/public/-/emojis/1/pray_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/pray_tone2.png b/public/-/emojis/1/pray_tone2.png
new file mode 100644
index 00000000000..56dc607c07a
--- /dev/null
+++ b/public/-/emojis/1/pray_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/pray_tone3.png b/public/-/emojis/1/pray_tone3.png
new file mode 100644
index 00000000000..0f33b862008
--- /dev/null
+++ b/public/-/emojis/1/pray_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/pray_tone4.png b/public/-/emojis/1/pray_tone4.png
new file mode 100644
index 00000000000..2ea8dc11657
--- /dev/null
+++ b/public/-/emojis/1/pray_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/pray_tone5.png b/public/-/emojis/1/pray_tone5.png
new file mode 100644
index 00000000000..2128a6c4703
--- /dev/null
+++ b/public/-/emojis/1/pray_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/prayer_beads.png b/public/-/emojis/1/prayer_beads.png
new file mode 100644
index 00000000000..a4b6dfcc62e
--- /dev/null
+++ b/public/-/emojis/1/prayer_beads.png
Binary files differ
diff --git a/public/-/emojis/1/pregnant_woman.png b/public/-/emojis/1/pregnant_woman.png
new file mode 100644
index 00000000000..084e83a414a
--- /dev/null
+++ b/public/-/emojis/1/pregnant_woman.png
Binary files differ
diff --git a/public/-/emojis/1/pregnant_woman_tone1.png b/public/-/emojis/1/pregnant_woman_tone1.png
new file mode 100644
index 00000000000..a78703b33aa
--- /dev/null
+++ b/public/-/emojis/1/pregnant_woman_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/pregnant_woman_tone2.png b/public/-/emojis/1/pregnant_woman_tone2.png
new file mode 100644
index 00000000000..0068c6c4a77
--- /dev/null
+++ b/public/-/emojis/1/pregnant_woman_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/pregnant_woman_tone3.png b/public/-/emojis/1/pregnant_woman_tone3.png
new file mode 100644
index 00000000000..3206296b684
--- /dev/null
+++ b/public/-/emojis/1/pregnant_woman_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/pregnant_woman_tone4.png b/public/-/emojis/1/pregnant_woman_tone4.png
new file mode 100644
index 00000000000..120fda5cd8c
--- /dev/null
+++ b/public/-/emojis/1/pregnant_woman_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/pregnant_woman_tone5.png b/public/-/emojis/1/pregnant_woman_tone5.png
new file mode 100644
index 00000000000..569bfdf05ce
--- /dev/null
+++ b/public/-/emojis/1/pregnant_woman_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/prince.png b/public/-/emojis/1/prince.png
new file mode 100644
index 00000000000..38d69344c84
--- /dev/null
+++ b/public/-/emojis/1/prince.png
Binary files differ
diff --git a/public/-/emojis/1/prince_tone1.png b/public/-/emojis/1/prince_tone1.png
new file mode 100644
index 00000000000..849930c8887
--- /dev/null
+++ b/public/-/emojis/1/prince_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/prince_tone2.png b/public/-/emojis/1/prince_tone2.png
new file mode 100644
index 00000000000..23d8b3b1285
--- /dev/null
+++ b/public/-/emojis/1/prince_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/prince_tone3.png b/public/-/emojis/1/prince_tone3.png
new file mode 100644
index 00000000000..db6dfff0647
--- /dev/null
+++ b/public/-/emojis/1/prince_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/prince_tone4.png b/public/-/emojis/1/prince_tone4.png
new file mode 100644
index 00000000000..8e10f8be6a8
--- /dev/null
+++ b/public/-/emojis/1/prince_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/prince_tone5.png b/public/-/emojis/1/prince_tone5.png
new file mode 100644
index 00000000000..138d4ea7048
--- /dev/null
+++ b/public/-/emojis/1/prince_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/princess.png b/public/-/emojis/1/princess.png
new file mode 100644
index 00000000000..879e9fa8c5d
--- /dev/null
+++ b/public/-/emojis/1/princess.png
Binary files differ
diff --git a/public/-/emojis/1/princess_tone1.png b/public/-/emojis/1/princess_tone1.png
new file mode 100644
index 00000000000..c28078cdc36
--- /dev/null
+++ b/public/-/emojis/1/princess_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/princess_tone2.png b/public/-/emojis/1/princess_tone2.png
new file mode 100644
index 00000000000..dcd20e6ecd4
--- /dev/null
+++ b/public/-/emojis/1/princess_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/princess_tone3.png b/public/-/emojis/1/princess_tone3.png
new file mode 100644
index 00000000000..cde6f315c56
--- /dev/null
+++ b/public/-/emojis/1/princess_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/princess_tone4.png b/public/-/emojis/1/princess_tone4.png
new file mode 100644
index 00000000000..c71e69caaef
--- /dev/null
+++ b/public/-/emojis/1/princess_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/princess_tone5.png b/public/-/emojis/1/princess_tone5.png
new file mode 100644
index 00000000000..063e2645910
--- /dev/null
+++ b/public/-/emojis/1/princess_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/printer.png b/public/-/emojis/1/printer.png
new file mode 100644
index 00000000000..027c830f0fe
--- /dev/null
+++ b/public/-/emojis/1/printer.png
Binary files differ
diff --git a/public/-/emojis/1/projector.png b/public/-/emojis/1/projector.png
new file mode 100644
index 00000000000..ce9ab0daa28
--- /dev/null
+++ b/public/-/emojis/1/projector.png
Binary files differ
diff --git a/public/-/emojis/1/punch.png b/public/-/emojis/1/punch.png
new file mode 100644
index 00000000000..b14ca5f5211
--- /dev/null
+++ b/public/-/emojis/1/punch.png
Binary files differ
diff --git a/public/-/emojis/1/punch_tone1.png b/public/-/emojis/1/punch_tone1.png
new file mode 100644
index 00000000000..93c7d17fb47
--- /dev/null
+++ b/public/-/emojis/1/punch_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/punch_tone2.png b/public/-/emojis/1/punch_tone2.png
new file mode 100644
index 00000000000..c0a1af6e10a
--- /dev/null
+++ b/public/-/emojis/1/punch_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/punch_tone3.png b/public/-/emojis/1/punch_tone3.png
new file mode 100644
index 00000000000..1458b021201
--- /dev/null
+++ b/public/-/emojis/1/punch_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/punch_tone4.png b/public/-/emojis/1/punch_tone4.png
new file mode 100644
index 00000000000..c1466bfcdef
--- /dev/null
+++ b/public/-/emojis/1/punch_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/punch_tone5.png b/public/-/emojis/1/punch_tone5.png
new file mode 100644
index 00000000000..00b4ddb8953
--- /dev/null
+++ b/public/-/emojis/1/punch_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/purple_heart.png b/public/-/emojis/1/purple_heart.png
new file mode 100644
index 00000000000..95c53a9ade6
--- /dev/null
+++ b/public/-/emojis/1/purple_heart.png
Binary files differ
diff --git a/public/-/emojis/1/purse.png b/public/-/emojis/1/purse.png
new file mode 100644
index 00000000000..981346193c5
--- /dev/null
+++ b/public/-/emojis/1/purse.png
Binary files differ
diff --git a/public/-/emojis/1/pushpin.png b/public/-/emojis/1/pushpin.png
new file mode 100644
index 00000000000..57e07d7f4cc
--- /dev/null
+++ b/public/-/emojis/1/pushpin.png
Binary files differ
diff --git a/public/-/emojis/1/put_litter_in_its_place.png b/public/-/emojis/1/put_litter_in_its_place.png
new file mode 100644
index 00000000000..82a84f9a375
--- /dev/null
+++ b/public/-/emojis/1/put_litter_in_its_place.png
Binary files differ
diff --git a/public/-/emojis/1/question.png b/public/-/emojis/1/question.png
new file mode 100644
index 00000000000..5a58f3458aa
--- /dev/null
+++ b/public/-/emojis/1/question.png
Binary files differ
diff --git a/public/-/emojis/1/rabbit.png b/public/-/emojis/1/rabbit.png
new file mode 100644
index 00000000000..ea75ab0426e
--- /dev/null
+++ b/public/-/emojis/1/rabbit.png
Binary files differ
diff --git a/public/-/emojis/1/rabbit2.png b/public/-/emojis/1/rabbit2.png
new file mode 100644
index 00000000000..2c8a29c642f
--- /dev/null
+++ b/public/-/emojis/1/rabbit2.png
Binary files differ
diff --git a/public/-/emojis/1/race_car.png b/public/-/emojis/1/race_car.png
new file mode 100644
index 00000000000..fe3f045f446
--- /dev/null
+++ b/public/-/emojis/1/race_car.png
Binary files differ
diff --git a/public/-/emojis/1/racehorse.png b/public/-/emojis/1/racehorse.png
new file mode 100644
index 00000000000..b3e73cc8903
--- /dev/null
+++ b/public/-/emojis/1/racehorse.png
Binary files differ
diff --git a/public/-/emojis/1/radio.png b/public/-/emojis/1/radio.png
new file mode 100644
index 00000000000..dec381fa242
--- /dev/null
+++ b/public/-/emojis/1/radio.png
Binary files differ
diff --git a/public/-/emojis/1/radio_button.png b/public/-/emojis/1/radio_button.png
new file mode 100644
index 00000000000..3a23449d917
--- /dev/null
+++ b/public/-/emojis/1/radio_button.png
Binary files differ
diff --git a/public/-/emojis/1/radioactive.png b/public/-/emojis/1/radioactive.png
new file mode 100644
index 00000000000..3b46199fe37
--- /dev/null
+++ b/public/-/emojis/1/radioactive.png
Binary files differ
diff --git a/public/-/emojis/1/rage.png b/public/-/emojis/1/rage.png
new file mode 100644
index 00000000000..9d739bd40ad
--- /dev/null
+++ b/public/-/emojis/1/rage.png
Binary files differ
diff --git a/public/-/emojis/1/railway_car.png b/public/-/emojis/1/railway_car.png
new file mode 100644
index 00000000000..a9acbf13008
--- /dev/null
+++ b/public/-/emojis/1/railway_car.png
Binary files differ
diff --git a/public/-/emojis/1/railway_track.png b/public/-/emojis/1/railway_track.png
new file mode 100644
index 00000000000..e1a7a0d1430
--- /dev/null
+++ b/public/-/emojis/1/railway_track.png
Binary files differ
diff --git a/public/-/emojis/1/rainbow.png b/public/-/emojis/1/rainbow.png
new file mode 100644
index 00000000000..154735d7147
--- /dev/null
+++ b/public/-/emojis/1/rainbow.png
Binary files differ
diff --git a/public/-/emojis/1/raised_back_of_hand.png b/public/-/emojis/1/raised_back_of_hand.png
new file mode 100644
index 00000000000..479234294b4
--- /dev/null
+++ b/public/-/emojis/1/raised_back_of_hand.png
Binary files differ
diff --git a/public/-/emojis/1/raised_back_of_hand_tone1.png b/public/-/emojis/1/raised_back_of_hand_tone1.png
new file mode 100644
index 00000000000..813d28499b5
--- /dev/null
+++ b/public/-/emojis/1/raised_back_of_hand_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/raised_back_of_hand_tone2.png b/public/-/emojis/1/raised_back_of_hand_tone2.png
new file mode 100644
index 00000000000..192ff795e37
--- /dev/null
+++ b/public/-/emojis/1/raised_back_of_hand_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/raised_back_of_hand_tone3.png b/public/-/emojis/1/raised_back_of_hand_tone3.png
new file mode 100644
index 00000000000..61a727abe6b
--- /dev/null
+++ b/public/-/emojis/1/raised_back_of_hand_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/raised_back_of_hand_tone4.png b/public/-/emojis/1/raised_back_of_hand_tone4.png
new file mode 100644
index 00000000000..2e83da511f5
--- /dev/null
+++ b/public/-/emojis/1/raised_back_of_hand_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/raised_back_of_hand_tone5.png b/public/-/emojis/1/raised_back_of_hand_tone5.png
new file mode 100644
index 00000000000..d7a5b95a02c
--- /dev/null
+++ b/public/-/emojis/1/raised_back_of_hand_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hand.png b/public/-/emojis/1/raised_hand.png
new file mode 100644
index 00000000000..6b2954315d1
--- /dev/null
+++ b/public/-/emojis/1/raised_hand.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hand_tone1.png b/public/-/emojis/1/raised_hand_tone1.png
new file mode 100644
index 00000000000..3b752902c07
--- /dev/null
+++ b/public/-/emojis/1/raised_hand_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hand_tone2.png b/public/-/emojis/1/raised_hand_tone2.png
new file mode 100644
index 00000000000..44e2a514c60
--- /dev/null
+++ b/public/-/emojis/1/raised_hand_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hand_tone3.png b/public/-/emojis/1/raised_hand_tone3.png
new file mode 100644
index 00000000000..5bb62a7528a
--- /dev/null
+++ b/public/-/emojis/1/raised_hand_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hand_tone4.png b/public/-/emojis/1/raised_hand_tone4.png
new file mode 100644
index 00000000000..c7f8c9ec270
--- /dev/null
+++ b/public/-/emojis/1/raised_hand_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hand_tone5.png b/public/-/emojis/1/raised_hand_tone5.png
new file mode 100644
index 00000000000..c601b58a73e
--- /dev/null
+++ b/public/-/emojis/1/raised_hand_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hands.png b/public/-/emojis/1/raised_hands.png
new file mode 100644
index 00000000000..c0155f728e7
--- /dev/null
+++ b/public/-/emojis/1/raised_hands.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hands_tone1.png b/public/-/emojis/1/raised_hands_tone1.png
new file mode 100644
index 00000000000..1168b8236b6
--- /dev/null
+++ b/public/-/emojis/1/raised_hands_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hands_tone2.png b/public/-/emojis/1/raised_hands_tone2.png
new file mode 100644
index 00000000000..322de622903
--- /dev/null
+++ b/public/-/emojis/1/raised_hands_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hands_tone3.png b/public/-/emojis/1/raised_hands_tone3.png
new file mode 100644
index 00000000000..2aa24e05ae1
--- /dev/null
+++ b/public/-/emojis/1/raised_hands_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hands_tone4.png b/public/-/emojis/1/raised_hands_tone4.png
new file mode 100644
index 00000000000..f31bf0db992
--- /dev/null
+++ b/public/-/emojis/1/raised_hands_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/raised_hands_tone5.png b/public/-/emojis/1/raised_hands_tone5.png
new file mode 100644
index 00000000000..5e95067f98b
--- /dev/null
+++ b/public/-/emojis/1/raised_hands_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/raising_hand.png b/public/-/emojis/1/raising_hand.png
new file mode 100644
index 00000000000..2880708c0cc
--- /dev/null
+++ b/public/-/emojis/1/raising_hand.png
Binary files differ
diff --git a/public/-/emojis/1/raising_hand_tone1.png b/public/-/emojis/1/raising_hand_tone1.png
new file mode 100644
index 00000000000..1c90e3e2689
--- /dev/null
+++ b/public/-/emojis/1/raising_hand_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/raising_hand_tone2.png b/public/-/emojis/1/raising_hand_tone2.png
new file mode 100644
index 00000000000..82c3ef2bfc5
--- /dev/null
+++ b/public/-/emojis/1/raising_hand_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/raising_hand_tone3.png b/public/-/emojis/1/raising_hand_tone3.png
new file mode 100644
index 00000000000..1b1da2aa0ca
--- /dev/null
+++ b/public/-/emojis/1/raising_hand_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/raising_hand_tone4.png b/public/-/emojis/1/raising_hand_tone4.png
new file mode 100644
index 00000000000..e453855c01f
--- /dev/null
+++ b/public/-/emojis/1/raising_hand_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/raising_hand_tone5.png b/public/-/emojis/1/raising_hand_tone5.png
new file mode 100644
index 00000000000..b86200fd844
--- /dev/null
+++ b/public/-/emojis/1/raising_hand_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/ram.png b/public/-/emojis/1/ram.png
new file mode 100644
index 00000000000..52a44464c9b
--- /dev/null
+++ b/public/-/emojis/1/ram.png
Binary files differ
diff --git a/public/-/emojis/1/ramen.png b/public/-/emojis/1/ramen.png
new file mode 100644
index 00000000000..c1cb7cd7384
--- /dev/null
+++ b/public/-/emojis/1/ramen.png
Binary files differ
diff --git a/public/-/emojis/1/rat.png b/public/-/emojis/1/rat.png
new file mode 100644
index 00000000000..86219144f10
--- /dev/null
+++ b/public/-/emojis/1/rat.png
Binary files differ
diff --git a/public/-/emojis/1/record_button.png b/public/-/emojis/1/record_button.png
new file mode 100644
index 00000000000..ada52830fce
--- /dev/null
+++ b/public/-/emojis/1/record_button.png
Binary files differ
diff --git a/public/-/emojis/1/recycle.png b/public/-/emojis/1/recycle.png
new file mode 100644
index 00000000000..9221f095c37
--- /dev/null
+++ b/public/-/emojis/1/recycle.png
Binary files differ
diff --git a/public/-/emojis/1/red_car.png b/public/-/emojis/1/red_car.png
new file mode 100644
index 00000000000..b3e6a774dea
--- /dev/null
+++ b/public/-/emojis/1/red_car.png
Binary files differ
diff --git a/public/-/emojis/1/red_circle.png b/public/-/emojis/1/red_circle.png
new file mode 100644
index 00000000000..4bef930d92f
--- /dev/null
+++ b/public/-/emojis/1/red_circle.png
Binary files differ
diff --git a/public/-/emojis/1/registered.png b/public/-/emojis/1/registered.png
new file mode 100644
index 00000000000..53ef9f2d4e6
--- /dev/null
+++ b/public/-/emojis/1/registered.png
Binary files differ
diff --git a/public/-/emojis/1/relaxed.png b/public/-/emojis/1/relaxed.png
new file mode 100644
index 00000000000..e9e53c03d45
--- /dev/null
+++ b/public/-/emojis/1/relaxed.png
Binary files differ
diff --git a/public/-/emojis/1/relieved.png b/public/-/emojis/1/relieved.png
new file mode 100644
index 00000000000..715ad0bf53f
--- /dev/null
+++ b/public/-/emojis/1/relieved.png
Binary files differ
diff --git a/public/-/emojis/1/reminder_ribbon.png b/public/-/emojis/1/reminder_ribbon.png
new file mode 100644
index 00000000000..3988bbd094c
--- /dev/null
+++ b/public/-/emojis/1/reminder_ribbon.png
Binary files differ
diff --git a/public/-/emojis/1/repeat.png b/public/-/emojis/1/repeat.png
new file mode 100644
index 00000000000..540ce4e0fba
--- /dev/null
+++ b/public/-/emojis/1/repeat.png
Binary files differ
diff --git a/public/-/emojis/1/repeat_one.png b/public/-/emojis/1/repeat_one.png
new file mode 100644
index 00000000000..9567e83337f
--- /dev/null
+++ b/public/-/emojis/1/repeat_one.png
Binary files differ
diff --git a/public/-/emojis/1/restroom.png b/public/-/emojis/1/restroom.png
new file mode 100644
index 00000000000..9588e0f0ef7
--- /dev/null
+++ b/public/-/emojis/1/restroom.png
Binary files differ
diff --git a/public/-/emojis/1/revolving_hearts.png b/public/-/emojis/1/revolving_hearts.png
new file mode 100644
index 00000000000..7b9d1948f73
--- /dev/null
+++ b/public/-/emojis/1/revolving_hearts.png
Binary files differ
diff --git a/public/-/emojis/1/rewind.png b/public/-/emojis/1/rewind.png
new file mode 100644
index 00000000000..e22e2bd3da5
--- /dev/null
+++ b/public/-/emojis/1/rewind.png
Binary files differ
diff --git a/public/-/emojis/1/rhino.png b/public/-/emojis/1/rhino.png
new file mode 100644
index 00000000000..12f4e0d9d9b
--- /dev/null
+++ b/public/-/emojis/1/rhino.png
Binary files differ
diff --git a/public/-/emojis/1/ribbon.png b/public/-/emojis/1/ribbon.png
new file mode 100644
index 00000000000..0f253c3d8c8
--- /dev/null
+++ b/public/-/emojis/1/ribbon.png
Binary files differ
diff --git a/public/-/emojis/1/rice.png b/public/-/emojis/1/rice.png
new file mode 100644
index 00000000000..6e3ac7956b1
--- /dev/null
+++ b/public/-/emojis/1/rice.png
Binary files differ
diff --git a/public/-/emojis/1/rice_ball.png b/public/-/emojis/1/rice_ball.png
new file mode 100644
index 00000000000..d3d8ee25cb8
--- /dev/null
+++ b/public/-/emojis/1/rice_ball.png
Binary files differ
diff --git a/public/-/emojis/1/rice_cracker.png b/public/-/emojis/1/rice_cracker.png
new file mode 100644
index 00000000000..7fbd08e4ff9
--- /dev/null
+++ b/public/-/emojis/1/rice_cracker.png
Binary files differ
diff --git a/public/-/emojis/1/rice_scene.png b/public/-/emojis/1/rice_scene.png
new file mode 100644
index 00000000000..1a28426592a
--- /dev/null
+++ b/public/-/emojis/1/rice_scene.png
Binary files differ
diff --git a/public/-/emojis/1/right_facing_fist.png b/public/-/emojis/1/right_facing_fist.png
new file mode 100644
index 00000000000..754ed066d2c
--- /dev/null
+++ b/public/-/emojis/1/right_facing_fist.png
Binary files differ
diff --git a/public/-/emojis/1/right_facing_fist_tone1.png b/public/-/emojis/1/right_facing_fist_tone1.png
new file mode 100644
index 00000000000..33ded2f61a6
--- /dev/null
+++ b/public/-/emojis/1/right_facing_fist_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/right_facing_fist_tone2.png b/public/-/emojis/1/right_facing_fist_tone2.png
new file mode 100644
index 00000000000..88054e335c7
--- /dev/null
+++ b/public/-/emojis/1/right_facing_fist_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/right_facing_fist_tone3.png b/public/-/emojis/1/right_facing_fist_tone3.png
new file mode 100644
index 00000000000..84b9f5da7f7
--- /dev/null
+++ b/public/-/emojis/1/right_facing_fist_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/right_facing_fist_tone4.png b/public/-/emojis/1/right_facing_fist_tone4.png
new file mode 100644
index 00000000000..e741cfea68b
--- /dev/null
+++ b/public/-/emojis/1/right_facing_fist_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/right_facing_fist_tone5.png b/public/-/emojis/1/right_facing_fist_tone5.png
new file mode 100644
index 00000000000..cf66d760c1f
--- /dev/null
+++ b/public/-/emojis/1/right_facing_fist_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/ring.png b/public/-/emojis/1/ring.png
new file mode 100644
index 00000000000..87d227adb74
--- /dev/null
+++ b/public/-/emojis/1/ring.png
Binary files differ
diff --git a/public/-/emojis/1/robot.png b/public/-/emojis/1/robot.png
new file mode 100644
index 00000000000..7cc62612c6a
--- /dev/null
+++ b/public/-/emojis/1/robot.png
Binary files differ
diff --git a/public/-/emojis/1/rocket.png b/public/-/emojis/1/rocket.png
new file mode 100644
index 00000000000..0d8da089a37
--- /dev/null
+++ b/public/-/emojis/1/rocket.png
Binary files differ
diff --git a/public/-/emojis/1/rofl.png b/public/-/emojis/1/rofl.png
new file mode 100644
index 00000000000..b1736fedfeb
--- /dev/null
+++ b/public/-/emojis/1/rofl.png
Binary files differ
diff --git a/public/-/emojis/1/roller_coaster.png b/public/-/emojis/1/roller_coaster.png
new file mode 100644
index 00000000000..5b849e071e8
--- /dev/null
+++ b/public/-/emojis/1/roller_coaster.png
Binary files differ
diff --git a/public/-/emojis/1/rolling_eyes.png b/public/-/emojis/1/rolling_eyes.png
new file mode 100644
index 00000000000..2f77b9fc3b9
--- /dev/null
+++ b/public/-/emojis/1/rolling_eyes.png
Binary files differ
diff --git a/public/-/emojis/1/rooster.png b/public/-/emojis/1/rooster.png
new file mode 100644
index 00000000000..bbf2bbff97a
--- /dev/null
+++ b/public/-/emojis/1/rooster.png
Binary files differ
diff --git a/public/-/emojis/1/rose.png b/public/-/emojis/1/rose.png
new file mode 100644
index 00000000000..52c286d31ce
--- /dev/null
+++ b/public/-/emojis/1/rose.png
Binary files differ
diff --git a/public/-/emojis/1/rosette.png b/public/-/emojis/1/rosette.png
new file mode 100644
index 00000000000..8030e494bcf
--- /dev/null
+++ b/public/-/emojis/1/rosette.png
Binary files differ
diff --git a/public/-/emojis/1/rotating_light.png b/public/-/emojis/1/rotating_light.png
new file mode 100644
index 00000000000..cad66b0afef
--- /dev/null
+++ b/public/-/emojis/1/rotating_light.png
Binary files differ
diff --git a/public/-/emojis/1/round_pushpin.png b/public/-/emojis/1/round_pushpin.png
new file mode 100644
index 00000000000..28b9d72866e
--- /dev/null
+++ b/public/-/emojis/1/round_pushpin.png
Binary files differ
diff --git a/public/-/emojis/1/rowboat.png b/public/-/emojis/1/rowboat.png
new file mode 100644
index 00000000000..dd4dfc095d9
--- /dev/null
+++ b/public/-/emojis/1/rowboat.png
Binary files differ
diff --git a/public/-/emojis/1/rowboat_tone1.png b/public/-/emojis/1/rowboat_tone1.png
new file mode 100644
index 00000000000..5e5d18548cb
--- /dev/null
+++ b/public/-/emojis/1/rowboat_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/rowboat_tone2.png b/public/-/emojis/1/rowboat_tone2.png
new file mode 100644
index 00000000000..9b123ef8871
--- /dev/null
+++ b/public/-/emojis/1/rowboat_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/rowboat_tone3.png b/public/-/emojis/1/rowboat_tone3.png
new file mode 100644
index 00000000000..8ebd89a55f5
--- /dev/null
+++ b/public/-/emojis/1/rowboat_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/rowboat_tone4.png b/public/-/emojis/1/rowboat_tone4.png
new file mode 100644
index 00000000000..2b0d04f8725
--- /dev/null
+++ b/public/-/emojis/1/rowboat_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/rowboat_tone5.png b/public/-/emojis/1/rowboat_tone5.png
new file mode 100644
index 00000000000..b346f2dfc84
--- /dev/null
+++ b/public/-/emojis/1/rowboat_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/rugby_football.png b/public/-/emojis/1/rugby_football.png
new file mode 100644
index 00000000000..b1872273436
--- /dev/null
+++ b/public/-/emojis/1/rugby_football.png
Binary files differ
diff --git a/public/-/emojis/1/runner.png b/public/-/emojis/1/runner.png
new file mode 100644
index 00000000000..e914915976a
--- /dev/null
+++ b/public/-/emojis/1/runner.png
Binary files differ
diff --git a/public/-/emojis/1/runner_tone1.png b/public/-/emojis/1/runner_tone1.png
new file mode 100644
index 00000000000..9355239a52d
--- /dev/null
+++ b/public/-/emojis/1/runner_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/runner_tone2.png b/public/-/emojis/1/runner_tone2.png
new file mode 100644
index 00000000000..6112fd5c376
--- /dev/null
+++ b/public/-/emojis/1/runner_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/runner_tone3.png b/public/-/emojis/1/runner_tone3.png
new file mode 100644
index 00000000000..625ec708f48
--- /dev/null
+++ b/public/-/emojis/1/runner_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/runner_tone4.png b/public/-/emojis/1/runner_tone4.png
new file mode 100644
index 00000000000..242f1b56337
--- /dev/null
+++ b/public/-/emojis/1/runner_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/runner_tone5.png b/public/-/emojis/1/runner_tone5.png
new file mode 100644
index 00000000000..2976c6f019f
--- /dev/null
+++ b/public/-/emojis/1/runner_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/running_shirt_with_sash.png b/public/-/emojis/1/running_shirt_with_sash.png
new file mode 100644
index 00000000000..6d83c06b803
--- /dev/null
+++ b/public/-/emojis/1/running_shirt_with_sash.png
Binary files differ
diff --git a/public/-/emojis/1/sa.png b/public/-/emojis/1/sa.png
new file mode 100644
index 00000000000..900f9633247
--- /dev/null
+++ b/public/-/emojis/1/sa.png
Binary files differ
diff --git a/public/-/emojis/1/sagittarius.png b/public/-/emojis/1/sagittarius.png
new file mode 100644
index 00000000000..f8d94ff2923
--- /dev/null
+++ b/public/-/emojis/1/sagittarius.png
Binary files differ
diff --git a/public/-/emojis/1/sailboat.png b/public/-/emojis/1/sailboat.png
new file mode 100644
index 00000000000..772ef11da5d
--- /dev/null
+++ b/public/-/emojis/1/sailboat.png
Binary files differ
diff --git a/public/-/emojis/1/sake.png b/public/-/emojis/1/sake.png
new file mode 100644
index 00000000000..2933f5672c4
--- /dev/null
+++ b/public/-/emojis/1/sake.png
Binary files differ
diff --git a/public/-/emojis/1/salad.png b/public/-/emojis/1/salad.png
new file mode 100644
index 00000000000..c89f9341158
--- /dev/null
+++ b/public/-/emojis/1/salad.png
Binary files differ
diff --git a/public/-/emojis/1/sandal.png b/public/-/emojis/1/sandal.png
new file mode 100644
index 00000000000..9d9f5122b7a
--- /dev/null
+++ b/public/-/emojis/1/sandal.png
Binary files differ
diff --git a/public/-/emojis/1/santa.png b/public/-/emojis/1/santa.png
new file mode 100644
index 00000000000..bc83ab80d52
--- /dev/null
+++ b/public/-/emojis/1/santa.png
Binary files differ
diff --git a/public/-/emojis/1/santa_tone1.png b/public/-/emojis/1/santa_tone1.png
new file mode 100644
index 00000000000..5233ffb7174
--- /dev/null
+++ b/public/-/emojis/1/santa_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/santa_tone2.png b/public/-/emojis/1/santa_tone2.png
new file mode 100644
index 00000000000..4e845438197
--- /dev/null
+++ b/public/-/emojis/1/santa_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/santa_tone3.png b/public/-/emojis/1/santa_tone3.png
new file mode 100644
index 00000000000..7fc4f33b60f
--- /dev/null
+++ b/public/-/emojis/1/santa_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/santa_tone4.png b/public/-/emojis/1/santa_tone4.png
new file mode 100644
index 00000000000..d1d5a15132d
--- /dev/null
+++ b/public/-/emojis/1/santa_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/santa_tone5.png b/public/-/emojis/1/santa_tone5.png
new file mode 100644
index 00000000000..4d697a01f24
--- /dev/null
+++ b/public/-/emojis/1/santa_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/satellite.png b/public/-/emojis/1/satellite.png
new file mode 100644
index 00000000000..db0372795f4
--- /dev/null
+++ b/public/-/emojis/1/satellite.png
Binary files differ
diff --git a/public/-/emojis/1/satellite_orbital.png b/public/-/emojis/1/satellite_orbital.png
new file mode 100644
index 00000000000..4ba55d6e297
--- /dev/null
+++ b/public/-/emojis/1/satellite_orbital.png
Binary files differ
diff --git a/public/-/emojis/1/saxophone.png b/public/-/emojis/1/saxophone.png
new file mode 100644
index 00000000000..a392faec291
--- /dev/null
+++ b/public/-/emojis/1/saxophone.png
Binary files differ
diff --git a/public/-/emojis/1/scales.png b/public/-/emojis/1/scales.png
new file mode 100644
index 00000000000..0757eda1684
--- /dev/null
+++ b/public/-/emojis/1/scales.png
Binary files differ
diff --git a/public/-/emojis/1/school.png b/public/-/emojis/1/school.png
new file mode 100644
index 00000000000..269759534f0
--- /dev/null
+++ b/public/-/emojis/1/school.png
Binary files differ
diff --git a/public/-/emojis/1/school_satchel.png b/public/-/emojis/1/school_satchel.png
new file mode 100644
index 00000000000..9997c86e7dc
--- /dev/null
+++ b/public/-/emojis/1/school_satchel.png
Binary files differ
diff --git a/public/-/emojis/1/scissors.png b/public/-/emojis/1/scissors.png
new file mode 100644
index 00000000000..270571c8cdd
--- /dev/null
+++ b/public/-/emojis/1/scissors.png
Binary files differ
diff --git a/public/-/emojis/1/scooter.png b/public/-/emojis/1/scooter.png
new file mode 100644
index 00000000000..4ab7ef59cd2
--- /dev/null
+++ b/public/-/emojis/1/scooter.png
Binary files differ
diff --git a/public/-/emojis/1/scorpion.png b/public/-/emojis/1/scorpion.png
new file mode 100644
index 00000000000..449a6b281c9
--- /dev/null
+++ b/public/-/emojis/1/scorpion.png
Binary files differ
diff --git a/public/-/emojis/1/scorpius.png b/public/-/emojis/1/scorpius.png
new file mode 100644
index 00000000000..c31a9920455
--- /dev/null
+++ b/public/-/emojis/1/scorpius.png
Binary files differ
diff --git a/public/-/emojis/1/scream.png b/public/-/emojis/1/scream.png
new file mode 100644
index 00000000000..c3bea9f2510
--- /dev/null
+++ b/public/-/emojis/1/scream.png
Binary files differ
diff --git a/public/-/emojis/1/scream_cat.png b/public/-/emojis/1/scream_cat.png
new file mode 100644
index 00000000000..15803ad8e6e
--- /dev/null
+++ b/public/-/emojis/1/scream_cat.png
Binary files differ
diff --git a/public/-/emojis/1/scroll.png b/public/-/emojis/1/scroll.png
new file mode 100644
index 00000000000..50ee5dcd4b9
--- /dev/null
+++ b/public/-/emojis/1/scroll.png
Binary files differ
diff --git a/public/-/emojis/1/seat.png b/public/-/emojis/1/seat.png
new file mode 100644
index 00000000000..a6d72d95adb
--- /dev/null
+++ b/public/-/emojis/1/seat.png
Binary files differ
diff --git a/public/-/emojis/1/second_place.png b/public/-/emojis/1/second_place.png
new file mode 100644
index 00000000000..17b011268b6
--- /dev/null
+++ b/public/-/emojis/1/second_place.png
Binary files differ
diff --git a/public/-/emojis/1/secret.png b/public/-/emojis/1/secret.png
new file mode 100644
index 00000000000..5fd72608e60
--- /dev/null
+++ b/public/-/emojis/1/secret.png
Binary files differ
diff --git a/public/-/emojis/1/see_no_evil.png b/public/-/emojis/1/see_no_evil.png
new file mode 100644
index 00000000000..5187e474531
--- /dev/null
+++ b/public/-/emojis/1/see_no_evil.png
Binary files differ
diff --git a/public/-/emojis/1/seedling.png b/public/-/emojis/1/seedling.png
new file mode 100644
index 00000000000..ae0948bcfd6
--- /dev/null
+++ b/public/-/emojis/1/seedling.png
Binary files differ
diff --git a/public/-/emojis/1/selfie.png b/public/-/emojis/1/selfie.png
new file mode 100644
index 00000000000..6a1ba75c7e3
--- /dev/null
+++ b/public/-/emojis/1/selfie.png
Binary files differ
diff --git a/public/-/emojis/1/selfie_tone1.png b/public/-/emojis/1/selfie_tone1.png
new file mode 100644
index 00000000000..290e075b56f
--- /dev/null
+++ b/public/-/emojis/1/selfie_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/selfie_tone2.png b/public/-/emojis/1/selfie_tone2.png
new file mode 100644
index 00000000000..fcd9595b643
--- /dev/null
+++ b/public/-/emojis/1/selfie_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/selfie_tone3.png b/public/-/emojis/1/selfie_tone3.png
new file mode 100644
index 00000000000..f3a22fdf435
--- /dev/null
+++ b/public/-/emojis/1/selfie_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/selfie_tone4.png b/public/-/emojis/1/selfie_tone4.png
new file mode 100644
index 00000000000..cdecf6d9f4e
--- /dev/null
+++ b/public/-/emojis/1/selfie_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/selfie_tone5.png b/public/-/emojis/1/selfie_tone5.png
new file mode 100644
index 00000000000..86acbb6c202
--- /dev/null
+++ b/public/-/emojis/1/selfie_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/seven.png b/public/-/emojis/1/seven.png
new file mode 100644
index 00000000000..9b3476ae7c7
--- /dev/null
+++ b/public/-/emojis/1/seven.png
Binary files differ
diff --git a/public/-/emojis/1/shallow_pan_of_food.png b/public/-/emojis/1/shallow_pan_of_food.png
new file mode 100644
index 00000000000..663a1006acd
--- /dev/null
+++ b/public/-/emojis/1/shallow_pan_of_food.png
Binary files differ
diff --git a/public/-/emojis/1/shamrock.png b/public/-/emojis/1/shamrock.png
new file mode 100644
index 00000000000..f202aecfe6f
--- /dev/null
+++ b/public/-/emojis/1/shamrock.png
Binary files differ
diff --git a/public/-/emojis/1/shark.png b/public/-/emojis/1/shark.png
new file mode 100644
index 00000000000..c75076d57d8
--- /dev/null
+++ b/public/-/emojis/1/shark.png
Binary files differ
diff --git a/public/-/emojis/1/shaved_ice.png b/public/-/emojis/1/shaved_ice.png
new file mode 100644
index 00000000000..36dfb53ca93
--- /dev/null
+++ b/public/-/emojis/1/shaved_ice.png
Binary files differ
diff --git a/public/-/emojis/1/sheep.png b/public/-/emojis/1/sheep.png
new file mode 100644
index 00000000000..102b8a52b28
--- /dev/null
+++ b/public/-/emojis/1/sheep.png
Binary files differ
diff --git a/public/-/emojis/1/shell.png b/public/-/emojis/1/shell.png
new file mode 100644
index 00000000000..55721629f62
--- /dev/null
+++ b/public/-/emojis/1/shell.png
Binary files differ
diff --git a/public/-/emojis/1/shield.png b/public/-/emojis/1/shield.png
new file mode 100644
index 00000000000..610bf033ce0
--- /dev/null
+++ b/public/-/emojis/1/shield.png
Binary files differ
diff --git a/public/-/emojis/1/shinto_shrine.png b/public/-/emojis/1/shinto_shrine.png
new file mode 100644
index 00000000000..5a344975bf3
--- /dev/null
+++ b/public/-/emojis/1/shinto_shrine.png
Binary files differ
diff --git a/public/-/emojis/1/ship.png b/public/-/emojis/1/ship.png
new file mode 100644
index 00000000000..62d54f7d6c9
--- /dev/null
+++ b/public/-/emojis/1/ship.png
Binary files differ
diff --git a/public/-/emojis/1/shirt.png b/public/-/emojis/1/shirt.png
new file mode 100644
index 00000000000..af08dec8b59
--- /dev/null
+++ b/public/-/emojis/1/shirt.png
Binary files differ
diff --git a/public/-/emojis/1/shopping_bags.png b/public/-/emojis/1/shopping_bags.png
new file mode 100644
index 00000000000..99f2a2b13ac
--- /dev/null
+++ b/public/-/emojis/1/shopping_bags.png
Binary files differ
diff --git a/public/-/emojis/1/shopping_cart.png b/public/-/emojis/1/shopping_cart.png
new file mode 100644
index 00000000000..1086fe6e456
--- /dev/null
+++ b/public/-/emojis/1/shopping_cart.png
Binary files differ
diff --git a/public/-/emojis/1/shower.png b/public/-/emojis/1/shower.png
new file mode 100644
index 00000000000..156776a2e52
--- /dev/null
+++ b/public/-/emojis/1/shower.png
Binary files differ
diff --git a/public/-/emojis/1/shrimp.png b/public/-/emojis/1/shrimp.png
new file mode 100644
index 00000000000..49eff28a71e
--- /dev/null
+++ b/public/-/emojis/1/shrimp.png
Binary files differ
diff --git a/public/-/emojis/1/shrug.png b/public/-/emojis/1/shrug.png
new file mode 100644
index 00000000000..76e63bfac77
--- /dev/null
+++ b/public/-/emojis/1/shrug.png
Binary files differ
diff --git a/public/-/emojis/1/shrug_tone1.png b/public/-/emojis/1/shrug_tone1.png
new file mode 100644
index 00000000000..1c895e64468
--- /dev/null
+++ b/public/-/emojis/1/shrug_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/shrug_tone2.png b/public/-/emojis/1/shrug_tone2.png
new file mode 100644
index 00000000000..4e3ca8f8bac
--- /dev/null
+++ b/public/-/emojis/1/shrug_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/shrug_tone3.png b/public/-/emojis/1/shrug_tone3.png
new file mode 100644
index 00000000000..d1b16a19bb5
--- /dev/null
+++ b/public/-/emojis/1/shrug_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/shrug_tone4.png b/public/-/emojis/1/shrug_tone4.png
new file mode 100644
index 00000000000..5fbef3f2255
--- /dev/null
+++ b/public/-/emojis/1/shrug_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/shrug_tone5.png b/public/-/emojis/1/shrug_tone5.png
new file mode 100644
index 00000000000..4af2e28bc5c
--- /dev/null
+++ b/public/-/emojis/1/shrug_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/signal_strength.png b/public/-/emojis/1/signal_strength.png
new file mode 100644
index 00000000000..ee2b5a4b519
--- /dev/null
+++ b/public/-/emojis/1/signal_strength.png
Binary files differ
diff --git a/public/-/emojis/1/six.png b/public/-/emojis/1/six.png
new file mode 100644
index 00000000000..371b3acef2c
--- /dev/null
+++ b/public/-/emojis/1/six.png
Binary files differ
diff --git a/public/-/emojis/1/six_pointed_star.png b/public/-/emojis/1/six_pointed_star.png
new file mode 100644
index 00000000000..2eb1707458b
--- /dev/null
+++ b/public/-/emojis/1/six_pointed_star.png
Binary files differ
diff --git a/public/-/emojis/1/ski.png b/public/-/emojis/1/ski.png
new file mode 100644
index 00000000000..4a2d2c12306
--- /dev/null
+++ b/public/-/emojis/1/ski.png
Binary files differ
diff --git a/public/-/emojis/1/skier.png b/public/-/emojis/1/skier.png
new file mode 100644
index 00000000000..2eb3bdce2af
--- /dev/null
+++ b/public/-/emojis/1/skier.png
Binary files differ
diff --git a/public/-/emojis/1/skull.png b/public/-/emojis/1/skull.png
new file mode 100644
index 00000000000..26abb17296a
--- /dev/null
+++ b/public/-/emojis/1/skull.png
Binary files differ
diff --git a/public/-/emojis/1/skull_crossbones.png b/public/-/emojis/1/skull_crossbones.png
new file mode 100644
index 00000000000..b459df9227a
--- /dev/null
+++ b/public/-/emojis/1/skull_crossbones.png
Binary files differ
diff --git a/public/-/emojis/1/sleeping.png b/public/-/emojis/1/sleeping.png
new file mode 100644
index 00000000000..9ecf600d6d8
--- /dev/null
+++ b/public/-/emojis/1/sleeping.png
Binary files differ
diff --git a/public/-/emojis/1/sleeping_accommodation.png b/public/-/emojis/1/sleeping_accommodation.png
new file mode 100644
index 00000000000..c739e7fb69b
--- /dev/null
+++ b/public/-/emojis/1/sleeping_accommodation.png
Binary files differ
diff --git a/public/-/emojis/1/sleepy.png b/public/-/emojis/1/sleepy.png
new file mode 100644
index 00000000000..836b4107717
--- /dev/null
+++ b/public/-/emojis/1/sleepy.png
Binary files differ
diff --git a/public/-/emojis/1/slight_frown.png b/public/-/emojis/1/slight_frown.png
new file mode 100644
index 00000000000..b2f1d983d36
--- /dev/null
+++ b/public/-/emojis/1/slight_frown.png
Binary files differ
diff --git a/public/-/emojis/1/slight_smile.png b/public/-/emojis/1/slight_smile.png
new file mode 100644
index 00000000000..ddd7d65dd3d
--- /dev/null
+++ b/public/-/emojis/1/slight_smile.png
Binary files differ
diff --git a/public/-/emojis/1/slot_machine.png b/public/-/emojis/1/slot_machine.png
new file mode 100644
index 00000000000..ee71b6c268c
--- /dev/null
+++ b/public/-/emojis/1/slot_machine.png
Binary files differ
diff --git a/public/-/emojis/1/small_blue_diamond.png b/public/-/emojis/1/small_blue_diamond.png
new file mode 100644
index 00000000000..b86b5bc4db3
--- /dev/null
+++ b/public/-/emojis/1/small_blue_diamond.png
Binary files differ
diff --git a/public/-/emojis/1/small_orange_diamond.png b/public/-/emojis/1/small_orange_diamond.png
new file mode 100644
index 00000000000..e1c6ed9b2f8
--- /dev/null
+++ b/public/-/emojis/1/small_orange_diamond.png
Binary files differ
diff --git a/public/-/emojis/1/small_red_triangle.png b/public/-/emojis/1/small_red_triangle.png
new file mode 100644
index 00000000000..785887c195a
--- /dev/null
+++ b/public/-/emojis/1/small_red_triangle.png
Binary files differ
diff --git a/public/-/emojis/1/small_red_triangle_down.png b/public/-/emojis/1/small_red_triangle_down.png
new file mode 100644
index 00000000000..a83beff1914
--- /dev/null
+++ b/public/-/emojis/1/small_red_triangle_down.png
Binary files differ
diff --git a/public/-/emojis/1/smile.png b/public/-/emojis/1/smile.png
new file mode 100644
index 00000000000..aa47ffe978c
--- /dev/null
+++ b/public/-/emojis/1/smile.png
Binary files differ
diff --git a/public/-/emojis/1/smile_cat.png b/public/-/emojis/1/smile_cat.png
new file mode 100644
index 00000000000..6f25f11dd3a
--- /dev/null
+++ b/public/-/emojis/1/smile_cat.png
Binary files differ
diff --git a/public/-/emojis/1/smiley.png b/public/-/emojis/1/smiley.png
new file mode 100644
index 00000000000..30957a65968
--- /dev/null
+++ b/public/-/emojis/1/smiley.png
Binary files differ
diff --git a/public/-/emojis/1/smiley_cat.png b/public/-/emojis/1/smiley_cat.png
new file mode 100644
index 00000000000..163b57a3427
--- /dev/null
+++ b/public/-/emojis/1/smiley_cat.png
Binary files differ
diff --git a/public/-/emojis/1/smiling_imp.png b/public/-/emojis/1/smiling_imp.png
new file mode 100644
index 00000000000..cc2c5f1ec72
--- /dev/null
+++ b/public/-/emojis/1/smiling_imp.png
Binary files differ
diff --git a/public/-/emojis/1/smirk.png b/public/-/emojis/1/smirk.png
new file mode 100644
index 00000000000..87852109988
--- /dev/null
+++ b/public/-/emojis/1/smirk.png
Binary files differ
diff --git a/public/-/emojis/1/smirk_cat.png b/public/-/emojis/1/smirk_cat.png
new file mode 100644
index 00000000000..9ac5954c199
--- /dev/null
+++ b/public/-/emojis/1/smirk_cat.png
Binary files differ
diff --git a/public/-/emojis/1/smoking.png b/public/-/emojis/1/smoking.png
new file mode 100644
index 00000000000..910f648c8f9
--- /dev/null
+++ b/public/-/emojis/1/smoking.png
Binary files differ
diff --git a/public/-/emojis/1/snail.png b/public/-/emojis/1/snail.png
new file mode 100644
index 00000000000..f4ea071e2d3
--- /dev/null
+++ b/public/-/emojis/1/snail.png
Binary files differ
diff --git a/public/-/emojis/1/snake.png b/public/-/emojis/1/snake.png
new file mode 100644
index 00000000000..d0278a28d8c
--- /dev/null
+++ b/public/-/emojis/1/snake.png
Binary files differ
diff --git a/public/-/emojis/1/sneezing_face.png b/public/-/emojis/1/sneezing_face.png
new file mode 100644
index 00000000000..ccf07d4b64d
--- /dev/null
+++ b/public/-/emojis/1/sneezing_face.png
Binary files differ
diff --git a/public/-/emojis/1/snowboarder.png b/public/-/emojis/1/snowboarder.png
new file mode 100644
index 00000000000..6361c0f2c9d
--- /dev/null
+++ b/public/-/emojis/1/snowboarder.png
Binary files differ
diff --git a/public/-/emojis/1/snowflake.png b/public/-/emojis/1/snowflake.png
new file mode 100644
index 00000000000..db319a77ec6
--- /dev/null
+++ b/public/-/emojis/1/snowflake.png
Binary files differ
diff --git a/public/-/emojis/1/snowman.png b/public/-/emojis/1/snowman.png
new file mode 100644
index 00000000000..20c177c2aff
--- /dev/null
+++ b/public/-/emojis/1/snowman.png
Binary files differ
diff --git a/public/-/emojis/1/snowman2.png b/public/-/emojis/1/snowman2.png
new file mode 100644
index 00000000000..896f28502af
--- /dev/null
+++ b/public/-/emojis/1/snowman2.png
Binary files differ
diff --git a/public/-/emojis/1/sob.png b/public/-/emojis/1/sob.png
new file mode 100644
index 00000000000..52e3517a1ee
--- /dev/null
+++ b/public/-/emojis/1/sob.png
Binary files differ
diff --git a/public/-/emojis/1/soccer.png b/public/-/emojis/1/soccer.png
new file mode 100644
index 00000000000..28cfa218d6d
--- /dev/null
+++ b/public/-/emojis/1/soccer.png
Binary files differ
diff --git a/public/-/emojis/1/soon.png b/public/-/emojis/1/soon.png
new file mode 100644
index 00000000000..8cdfd86690d
--- /dev/null
+++ b/public/-/emojis/1/soon.png
Binary files differ
diff --git a/public/-/emojis/1/sos.png b/public/-/emojis/1/sos.png
new file mode 100644
index 00000000000..d7d8c9953e4
--- /dev/null
+++ b/public/-/emojis/1/sos.png
Binary files differ
diff --git a/public/-/emojis/1/sound.png b/public/-/emojis/1/sound.png
new file mode 100644
index 00000000000..e75ddca53ba
--- /dev/null
+++ b/public/-/emojis/1/sound.png
Binary files differ
diff --git a/public/-/emojis/1/space_invader.png b/public/-/emojis/1/space_invader.png
new file mode 100644
index 00000000000..2e73f5f32e5
--- /dev/null
+++ b/public/-/emojis/1/space_invader.png
Binary files differ
diff --git a/public/-/emojis/1/spades.png b/public/-/emojis/1/spades.png
new file mode 100644
index 00000000000..f822f184cb0
--- /dev/null
+++ b/public/-/emojis/1/spades.png
Binary files differ
diff --git a/public/-/emojis/1/spaghetti.png b/public/-/emojis/1/spaghetti.png
new file mode 100644
index 00000000000..89c24a321f1
--- /dev/null
+++ b/public/-/emojis/1/spaghetti.png
Binary files differ
diff --git a/public/-/emojis/1/sparkle.png b/public/-/emojis/1/sparkle.png
new file mode 100644
index 00000000000..6aa7b6ec9cf
--- /dev/null
+++ b/public/-/emojis/1/sparkle.png
Binary files differ
diff --git a/public/-/emojis/1/sparkler.png b/public/-/emojis/1/sparkler.png
new file mode 100644
index 00000000000..30339cd6e09
--- /dev/null
+++ b/public/-/emojis/1/sparkler.png
Binary files differ
diff --git a/public/-/emojis/1/sparkles.png b/public/-/emojis/1/sparkles.png
new file mode 100644
index 00000000000..169bc10b023
--- /dev/null
+++ b/public/-/emojis/1/sparkles.png
Binary files differ
diff --git a/public/-/emojis/1/sparkling_heart.png b/public/-/emojis/1/sparkling_heart.png
new file mode 100644
index 00000000000..6709269454e
--- /dev/null
+++ b/public/-/emojis/1/sparkling_heart.png
Binary files differ
diff --git a/public/-/emojis/1/speak_no_evil.png b/public/-/emojis/1/speak_no_evil.png
new file mode 100644
index 00000000000..9d9e07c974b
--- /dev/null
+++ b/public/-/emojis/1/speak_no_evil.png
Binary files differ
diff --git a/public/-/emojis/1/speaker.png b/public/-/emojis/1/speaker.png
new file mode 100644
index 00000000000..7bcffb8fc43
--- /dev/null
+++ b/public/-/emojis/1/speaker.png
Binary files differ
diff --git a/public/-/emojis/1/speaking_head.png b/public/-/emojis/1/speaking_head.png
new file mode 100644
index 00000000000..2df93aaae09
--- /dev/null
+++ b/public/-/emojis/1/speaking_head.png
Binary files differ
diff --git a/public/-/emojis/1/speech_balloon.png b/public/-/emojis/1/speech_balloon.png
new file mode 100644
index 00000000000..a34ef741733
--- /dev/null
+++ b/public/-/emojis/1/speech_balloon.png
Binary files differ
diff --git a/public/-/emojis/1/speech_left.png b/public/-/emojis/1/speech_left.png
new file mode 100644
index 00000000000..00c05959bcd
--- /dev/null
+++ b/public/-/emojis/1/speech_left.png
Binary files differ
diff --git a/public/-/emojis/1/speedboat.png b/public/-/emojis/1/speedboat.png
new file mode 100644
index 00000000000..74059d12de1
--- /dev/null
+++ b/public/-/emojis/1/speedboat.png
Binary files differ
diff --git a/public/-/emojis/1/spider.png b/public/-/emojis/1/spider.png
new file mode 100644
index 00000000000..3849fa90b94
--- /dev/null
+++ b/public/-/emojis/1/spider.png
Binary files differ
diff --git a/public/-/emojis/1/spider_web.png b/public/-/emojis/1/spider_web.png
new file mode 100644
index 00000000000..ba448ee7fba
--- /dev/null
+++ b/public/-/emojis/1/spider_web.png
Binary files differ
diff --git a/public/-/emojis/1/spoon.png b/public/-/emojis/1/spoon.png
new file mode 100644
index 00000000000..3c4da766aee
--- /dev/null
+++ b/public/-/emojis/1/spoon.png
Binary files differ
diff --git a/public/-/emojis/1/spy.png b/public/-/emojis/1/spy.png
new file mode 100644
index 00000000000..a729e9584d6
--- /dev/null
+++ b/public/-/emojis/1/spy.png
Binary files differ
diff --git a/public/-/emojis/1/spy_tone1.png b/public/-/emojis/1/spy_tone1.png
new file mode 100644
index 00000000000..2d1c022caee
--- /dev/null
+++ b/public/-/emojis/1/spy_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/spy_tone2.png b/public/-/emojis/1/spy_tone2.png
new file mode 100644
index 00000000000..548b9c26f5d
--- /dev/null
+++ b/public/-/emojis/1/spy_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/spy_tone3.png b/public/-/emojis/1/spy_tone3.png
new file mode 100644
index 00000000000..b023f4b18e1
--- /dev/null
+++ b/public/-/emojis/1/spy_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/spy_tone4.png b/public/-/emojis/1/spy_tone4.png
new file mode 100644
index 00000000000..d8300af492d
--- /dev/null
+++ b/public/-/emojis/1/spy_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/spy_tone5.png b/public/-/emojis/1/spy_tone5.png
new file mode 100644
index 00000000000..ca1462595fa
--- /dev/null
+++ b/public/-/emojis/1/spy_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/squid.png b/public/-/emojis/1/squid.png
new file mode 100644
index 00000000000..d2af223f0cb
--- /dev/null
+++ b/public/-/emojis/1/squid.png
Binary files differ
diff --git a/public/-/emojis/1/stadium.png b/public/-/emojis/1/stadium.png
new file mode 100644
index 00000000000..00cd6db5e29
--- /dev/null
+++ b/public/-/emojis/1/stadium.png
Binary files differ
diff --git a/public/-/emojis/1/star.png b/public/-/emojis/1/star.png
new file mode 100644
index 00000000000..c930947076e
--- /dev/null
+++ b/public/-/emojis/1/star.png
Binary files differ
diff --git a/public/-/emojis/1/star2.png b/public/-/emojis/1/star2.png
new file mode 100644
index 00000000000..2f5cba592db
--- /dev/null
+++ b/public/-/emojis/1/star2.png
Binary files differ
diff --git a/public/-/emojis/1/star_and_crescent.png b/public/-/emojis/1/star_and_crescent.png
new file mode 100644
index 00000000000..e182636457d
--- /dev/null
+++ b/public/-/emojis/1/star_and_crescent.png
Binary files differ
diff --git a/public/-/emojis/1/star_of_david.png b/public/-/emojis/1/star_of_david.png
new file mode 100644
index 00000000000..fc59d0dde24
--- /dev/null
+++ b/public/-/emojis/1/star_of_david.png
Binary files differ
diff --git a/public/-/emojis/1/stars.png b/public/-/emojis/1/stars.png
new file mode 100644
index 00000000000..aa45384d1c6
--- /dev/null
+++ b/public/-/emojis/1/stars.png
Binary files differ
diff --git a/public/-/emojis/1/station.png b/public/-/emojis/1/station.png
new file mode 100644
index 00000000000..5c26fee529c
--- /dev/null
+++ b/public/-/emojis/1/station.png
Binary files differ
diff --git a/public/-/emojis/1/statue_of_liberty.png b/public/-/emojis/1/statue_of_liberty.png
new file mode 100644
index 00000000000..05df8289b59
--- /dev/null
+++ b/public/-/emojis/1/statue_of_liberty.png
Binary files differ
diff --git a/public/-/emojis/1/steam_locomotive.png b/public/-/emojis/1/steam_locomotive.png
new file mode 100644
index 00000000000..9ac0d999c4c
--- /dev/null
+++ b/public/-/emojis/1/steam_locomotive.png
Binary files differ
diff --git a/public/-/emojis/1/stew.png b/public/-/emojis/1/stew.png
new file mode 100644
index 00000000000..6b3f010c17a
--- /dev/null
+++ b/public/-/emojis/1/stew.png
Binary files differ
diff --git a/public/-/emojis/1/stop_button.png b/public/-/emojis/1/stop_button.png
new file mode 100644
index 00000000000..cfa99988ac2
--- /dev/null
+++ b/public/-/emojis/1/stop_button.png
Binary files differ
diff --git a/public/-/emojis/1/stopwatch.png b/public/-/emojis/1/stopwatch.png
new file mode 100644
index 00000000000..8fae1c9a898
--- /dev/null
+++ b/public/-/emojis/1/stopwatch.png
Binary files differ
diff --git a/public/-/emojis/1/straight_ruler.png b/public/-/emojis/1/straight_ruler.png
new file mode 100644
index 00000000000..1017b7433a1
--- /dev/null
+++ b/public/-/emojis/1/straight_ruler.png
Binary files differ
diff --git a/public/-/emojis/1/strawberry.png b/public/-/emojis/1/strawberry.png
new file mode 100644
index 00000000000..7bb86f0b29c
--- /dev/null
+++ b/public/-/emojis/1/strawberry.png
Binary files differ
diff --git a/public/-/emojis/1/stuck_out_tongue.png b/public/-/emojis/1/stuck_out_tongue.png
new file mode 100644
index 00000000000..25757341f96
--- /dev/null
+++ b/public/-/emojis/1/stuck_out_tongue.png
Binary files differ
diff --git a/public/-/emojis/1/stuck_out_tongue_closed_eyes.png b/public/-/emojis/1/stuck_out_tongue_closed_eyes.png
new file mode 100644
index 00000000000..5c0401e9b1d
--- /dev/null
+++ b/public/-/emojis/1/stuck_out_tongue_closed_eyes.png
Binary files differ
diff --git a/public/-/emojis/1/stuck_out_tongue_winking_eye.png b/public/-/emojis/1/stuck_out_tongue_winking_eye.png
new file mode 100644
index 00000000000..4817eaa3dc6
--- /dev/null
+++ b/public/-/emojis/1/stuck_out_tongue_winking_eye.png
Binary files differ
diff --git a/public/-/emojis/1/stuffed_flatbread.png b/public/-/emojis/1/stuffed_flatbread.png
new file mode 100644
index 00000000000..a2e10df40a5
--- /dev/null
+++ b/public/-/emojis/1/stuffed_flatbread.png
Binary files differ
diff --git a/public/-/emojis/1/sun_with_face.png b/public/-/emojis/1/sun_with_face.png
new file mode 100644
index 00000000000..14a4ea971db
--- /dev/null
+++ b/public/-/emojis/1/sun_with_face.png
Binary files differ
diff --git a/public/-/emojis/1/sunflower.png b/public/-/emojis/1/sunflower.png
new file mode 100644
index 00000000000..08cc07761ea
--- /dev/null
+++ b/public/-/emojis/1/sunflower.png
Binary files differ
diff --git a/public/-/emojis/1/sunglasses.png b/public/-/emojis/1/sunglasses.png
new file mode 100644
index 00000000000..20011735110
--- /dev/null
+++ b/public/-/emojis/1/sunglasses.png
Binary files differ
diff --git a/public/-/emojis/1/sunny.png b/public/-/emojis/1/sunny.png
new file mode 100644
index 00000000000..fd521ae31a7
--- /dev/null
+++ b/public/-/emojis/1/sunny.png
Binary files differ
diff --git a/public/-/emojis/1/sunrise.png b/public/-/emojis/1/sunrise.png
new file mode 100644
index 00000000000..4ad36003c20
--- /dev/null
+++ b/public/-/emojis/1/sunrise.png
Binary files differ
diff --git a/public/-/emojis/1/sunrise_over_mountains.png b/public/-/emojis/1/sunrise_over_mountains.png
new file mode 100644
index 00000000000..2b99307344d
--- /dev/null
+++ b/public/-/emojis/1/sunrise_over_mountains.png
Binary files differ
diff --git a/public/-/emojis/1/surfer.png b/public/-/emojis/1/surfer.png
new file mode 100644
index 00000000000..3ab017adf4b
--- /dev/null
+++ b/public/-/emojis/1/surfer.png
Binary files differ
diff --git a/public/-/emojis/1/surfer_tone1.png b/public/-/emojis/1/surfer_tone1.png
new file mode 100644
index 00000000000..b5faaa524cc
--- /dev/null
+++ b/public/-/emojis/1/surfer_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/surfer_tone2.png b/public/-/emojis/1/surfer_tone2.png
new file mode 100644
index 00000000000..6d92e412ff1
--- /dev/null
+++ b/public/-/emojis/1/surfer_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/surfer_tone3.png b/public/-/emojis/1/surfer_tone3.png
new file mode 100644
index 00000000000..f05ef59496e
--- /dev/null
+++ b/public/-/emojis/1/surfer_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/surfer_tone4.png b/public/-/emojis/1/surfer_tone4.png
new file mode 100644
index 00000000000..35e143d19dc
--- /dev/null
+++ b/public/-/emojis/1/surfer_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/surfer_tone5.png b/public/-/emojis/1/surfer_tone5.png
new file mode 100644
index 00000000000..38917658eac
--- /dev/null
+++ b/public/-/emojis/1/surfer_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/sushi.png b/public/-/emojis/1/sushi.png
new file mode 100644
index 00000000000..f171fd2f7a1
--- /dev/null
+++ b/public/-/emojis/1/sushi.png
Binary files differ
diff --git a/public/-/emojis/1/suspension_railway.png b/public/-/emojis/1/suspension_railway.png
new file mode 100644
index 00000000000..a59d5f48c24
--- /dev/null
+++ b/public/-/emojis/1/suspension_railway.png
Binary files differ
diff --git a/public/-/emojis/1/sweat.png b/public/-/emojis/1/sweat.png
new file mode 100644
index 00000000000..f0dae7b7893
--- /dev/null
+++ b/public/-/emojis/1/sweat.png
Binary files differ
diff --git a/public/-/emojis/1/sweat_drops.png b/public/-/emojis/1/sweat_drops.png
new file mode 100644
index 00000000000..4106117ebc8
--- /dev/null
+++ b/public/-/emojis/1/sweat_drops.png
Binary files differ
diff --git a/public/-/emojis/1/sweat_smile.png b/public/-/emojis/1/sweat_smile.png
new file mode 100644
index 00000000000..cb18d9c899b
--- /dev/null
+++ b/public/-/emojis/1/sweat_smile.png
Binary files differ
diff --git a/public/-/emojis/1/sweet_potato.png b/public/-/emojis/1/sweet_potato.png
new file mode 100644
index 00000000000..92a425f2e20
--- /dev/null
+++ b/public/-/emojis/1/sweet_potato.png
Binary files differ
diff --git a/public/-/emojis/1/swimmer.png b/public/-/emojis/1/swimmer.png
new file mode 100644
index 00000000000..55b4d72f9a7
--- /dev/null
+++ b/public/-/emojis/1/swimmer.png
Binary files differ
diff --git a/public/-/emojis/1/swimmer_tone1.png b/public/-/emojis/1/swimmer_tone1.png
new file mode 100644
index 00000000000..38441c9ca9a
--- /dev/null
+++ b/public/-/emojis/1/swimmer_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/swimmer_tone2.png b/public/-/emojis/1/swimmer_tone2.png
new file mode 100644
index 00000000000..b0d43112444
--- /dev/null
+++ b/public/-/emojis/1/swimmer_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/swimmer_tone3.png b/public/-/emojis/1/swimmer_tone3.png
new file mode 100644
index 00000000000..211e77e2aa0
--- /dev/null
+++ b/public/-/emojis/1/swimmer_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/swimmer_tone4.png b/public/-/emojis/1/swimmer_tone4.png
new file mode 100644
index 00000000000..f34c34db9d2
--- /dev/null
+++ b/public/-/emojis/1/swimmer_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/swimmer_tone5.png b/public/-/emojis/1/swimmer_tone5.png
new file mode 100644
index 00000000000..3e9231ff868
--- /dev/null
+++ b/public/-/emojis/1/swimmer_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/symbols.png b/public/-/emojis/1/symbols.png
new file mode 100644
index 00000000000..ac2fc1f358f
--- /dev/null
+++ b/public/-/emojis/1/symbols.png
Binary files differ
diff --git a/public/-/emojis/1/synagogue.png b/public/-/emojis/1/synagogue.png
new file mode 100644
index 00000000000..ee347904c80
--- /dev/null
+++ b/public/-/emojis/1/synagogue.png
Binary files differ
diff --git a/public/-/emojis/1/syringe.png b/public/-/emojis/1/syringe.png
new file mode 100644
index 00000000000..71c1a9528d5
--- /dev/null
+++ b/public/-/emojis/1/syringe.png
Binary files differ
diff --git a/public/-/emojis/1/taco.png b/public/-/emojis/1/taco.png
new file mode 100644
index 00000000000..10e847a4619
--- /dev/null
+++ b/public/-/emojis/1/taco.png
Binary files differ
diff --git a/public/-/emojis/1/tada.png b/public/-/emojis/1/tada.png
new file mode 100644
index 00000000000..0244d60f269
--- /dev/null
+++ b/public/-/emojis/1/tada.png
Binary files differ
diff --git a/public/-/emojis/1/tanabata_tree.png b/public/-/emojis/1/tanabata_tree.png
new file mode 100644
index 00000000000..46fcb3a1aac
--- /dev/null
+++ b/public/-/emojis/1/tanabata_tree.png
Binary files differ
diff --git a/public/-/emojis/1/tangerine.png b/public/-/emojis/1/tangerine.png
new file mode 100644
index 00000000000..ab14e5378db
--- /dev/null
+++ b/public/-/emojis/1/tangerine.png
Binary files differ
diff --git a/public/-/emojis/1/taurus.png b/public/-/emojis/1/taurus.png
new file mode 100644
index 00000000000..b2a370df42b
--- /dev/null
+++ b/public/-/emojis/1/taurus.png
Binary files differ
diff --git a/public/-/emojis/1/taxi.png b/public/-/emojis/1/taxi.png
new file mode 100644
index 00000000000..55f4cc84797
--- /dev/null
+++ b/public/-/emojis/1/taxi.png
Binary files differ
diff --git a/public/-/emojis/1/tea.png b/public/-/emojis/1/tea.png
new file mode 100644
index 00000000000..b53b98f0c45
--- /dev/null
+++ b/public/-/emojis/1/tea.png
Binary files differ
diff --git a/public/-/emojis/1/telephone.png b/public/-/emojis/1/telephone.png
new file mode 100644
index 00000000000..a1e69f566bc
--- /dev/null
+++ b/public/-/emojis/1/telephone.png
Binary files differ
diff --git a/public/-/emojis/1/telephone_receiver.png b/public/-/emojis/1/telephone_receiver.png
new file mode 100644
index 00000000000..69388316c35
--- /dev/null
+++ b/public/-/emojis/1/telephone_receiver.png
Binary files differ
diff --git a/public/-/emojis/1/telescope.png b/public/-/emojis/1/telescope.png
new file mode 100644
index 00000000000..d63154614b5
--- /dev/null
+++ b/public/-/emojis/1/telescope.png
Binary files differ
diff --git a/public/-/emojis/1/ten.png b/public/-/emojis/1/ten.png
new file mode 100644
index 00000000000..782d4004962
--- /dev/null
+++ b/public/-/emojis/1/ten.png
Binary files differ
diff --git a/public/-/emojis/1/tennis.png b/public/-/emojis/1/tennis.png
new file mode 100644
index 00000000000..7e68ba8f301
--- /dev/null
+++ b/public/-/emojis/1/tennis.png
Binary files differ
diff --git a/public/-/emojis/1/tent.png b/public/-/emojis/1/tent.png
new file mode 100644
index 00000000000..3fddcfc56eb
--- /dev/null
+++ b/public/-/emojis/1/tent.png
Binary files differ
diff --git a/public/-/emojis/1/thermometer.png b/public/-/emojis/1/thermometer.png
new file mode 100644
index 00000000000..b1147392426
--- /dev/null
+++ b/public/-/emojis/1/thermometer.png
Binary files differ
diff --git a/public/-/emojis/1/thermometer_face.png b/public/-/emojis/1/thermometer_face.png
new file mode 100644
index 00000000000..8fc57387563
--- /dev/null
+++ b/public/-/emojis/1/thermometer_face.png
Binary files differ
diff --git a/public/-/emojis/1/thinking.png b/public/-/emojis/1/thinking.png
new file mode 100644
index 00000000000..c18f6fd14ad
--- /dev/null
+++ b/public/-/emojis/1/thinking.png
Binary files differ
diff --git a/public/-/emojis/1/third_place.png b/public/-/emojis/1/third_place.png
new file mode 100644
index 00000000000..636e04a5950
--- /dev/null
+++ b/public/-/emojis/1/third_place.png
Binary files differ
diff --git a/public/-/emojis/1/thought_balloon.png b/public/-/emojis/1/thought_balloon.png
new file mode 100644
index 00000000000..72fe8fa7022
--- /dev/null
+++ b/public/-/emojis/1/thought_balloon.png
Binary files differ
diff --git a/public/-/emojis/1/three.png b/public/-/emojis/1/three.png
new file mode 100644
index 00000000000..dbaa6183e72
--- /dev/null
+++ b/public/-/emojis/1/three.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsdown.png b/public/-/emojis/1/thumbsdown.png
new file mode 100644
index 00000000000..b63da2f20a8
--- /dev/null
+++ b/public/-/emojis/1/thumbsdown.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsdown_tone1.png b/public/-/emojis/1/thumbsdown_tone1.png
new file mode 100644
index 00000000000..a1631af8e92
--- /dev/null
+++ b/public/-/emojis/1/thumbsdown_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsdown_tone2.png b/public/-/emojis/1/thumbsdown_tone2.png
new file mode 100644
index 00000000000..85fff82d595
--- /dev/null
+++ b/public/-/emojis/1/thumbsdown_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsdown_tone3.png b/public/-/emojis/1/thumbsdown_tone3.png
new file mode 100644
index 00000000000..eeba3be80fd
--- /dev/null
+++ b/public/-/emojis/1/thumbsdown_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsdown_tone4.png b/public/-/emojis/1/thumbsdown_tone4.png
new file mode 100644
index 00000000000..1addafdaed0
--- /dev/null
+++ b/public/-/emojis/1/thumbsdown_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsdown_tone5.png b/public/-/emojis/1/thumbsdown_tone5.png
new file mode 100644
index 00000000000..37ec07b5721
--- /dev/null
+++ b/public/-/emojis/1/thumbsdown_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsup.png b/public/-/emojis/1/thumbsup.png
new file mode 100644
index 00000000000..f9e6f13a34f
--- /dev/null
+++ b/public/-/emojis/1/thumbsup.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsup_tone1.png b/public/-/emojis/1/thumbsup_tone1.png
new file mode 100644
index 00000000000..39684cd5cc7
--- /dev/null
+++ b/public/-/emojis/1/thumbsup_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsup_tone2.png b/public/-/emojis/1/thumbsup_tone2.png
new file mode 100644
index 00000000000..a9b59723573
--- /dev/null
+++ b/public/-/emojis/1/thumbsup_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsup_tone3.png b/public/-/emojis/1/thumbsup_tone3.png
new file mode 100644
index 00000000000..c5e29167015
--- /dev/null
+++ b/public/-/emojis/1/thumbsup_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsup_tone4.png b/public/-/emojis/1/thumbsup_tone4.png
new file mode 100644
index 00000000000..5bf4857a884
--- /dev/null
+++ b/public/-/emojis/1/thumbsup_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/thumbsup_tone5.png b/public/-/emojis/1/thumbsup_tone5.png
new file mode 100644
index 00000000000..d829f787c61
--- /dev/null
+++ b/public/-/emojis/1/thumbsup_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/thunder_cloud_rain.png b/public/-/emojis/1/thunder_cloud_rain.png
new file mode 100644
index 00000000000..31a26a1b6ee
--- /dev/null
+++ b/public/-/emojis/1/thunder_cloud_rain.png
Binary files differ
diff --git a/public/-/emojis/1/ticket.png b/public/-/emojis/1/ticket.png
new file mode 100644
index 00000000000..605936bb6b3
--- /dev/null
+++ b/public/-/emojis/1/ticket.png
Binary files differ
diff --git a/public/-/emojis/1/tickets.png b/public/-/emojis/1/tickets.png
new file mode 100644
index 00000000000..e510f4a7a50
--- /dev/null
+++ b/public/-/emojis/1/tickets.png
Binary files differ
diff --git a/public/-/emojis/1/tiger.png b/public/-/emojis/1/tiger.png
new file mode 100644
index 00000000000..a4d3ef086d4
--- /dev/null
+++ b/public/-/emojis/1/tiger.png
Binary files differ
diff --git a/public/-/emojis/1/tiger2.png b/public/-/emojis/1/tiger2.png
new file mode 100644
index 00000000000..871a8b74d56
--- /dev/null
+++ b/public/-/emojis/1/tiger2.png
Binary files differ
diff --git a/public/-/emojis/1/timer.png b/public/-/emojis/1/timer.png
new file mode 100644
index 00000000000..8a3be574c24
--- /dev/null
+++ b/public/-/emojis/1/timer.png
Binary files differ
diff --git a/public/-/emojis/1/tired_face.png b/public/-/emojis/1/tired_face.png
new file mode 100644
index 00000000000..4e01eff5b23
--- /dev/null
+++ b/public/-/emojis/1/tired_face.png
Binary files differ
diff --git a/public/-/emojis/1/tm.png b/public/-/emojis/1/tm.png
new file mode 100644
index 00000000000..7a0c44a2c2b
--- /dev/null
+++ b/public/-/emojis/1/tm.png
Binary files differ
diff --git a/public/-/emojis/1/toilet.png b/public/-/emojis/1/toilet.png
new file mode 100644
index 00000000000..1392f761835
--- /dev/null
+++ b/public/-/emojis/1/toilet.png
Binary files differ
diff --git a/public/-/emojis/1/tokyo_tower.png b/public/-/emojis/1/tokyo_tower.png
new file mode 100644
index 00000000000..37df7fc65b1
--- /dev/null
+++ b/public/-/emojis/1/tokyo_tower.png
Binary files differ
diff --git a/public/-/emojis/1/tomato.png b/public/-/emojis/1/tomato.png
new file mode 100644
index 00000000000..497da8f6b22
--- /dev/null
+++ b/public/-/emojis/1/tomato.png
Binary files differ
diff --git a/public/-/emojis/1/tone1.png b/public/-/emojis/1/tone1.png
new file mode 100644
index 00000000000..c395f3d0d68
--- /dev/null
+++ b/public/-/emojis/1/tone1.png
Binary files differ
diff --git a/public/-/emojis/1/tone2.png b/public/-/emojis/1/tone2.png
new file mode 100644
index 00000000000..080847431c1
--- /dev/null
+++ b/public/-/emojis/1/tone2.png
Binary files differ
diff --git a/public/-/emojis/1/tone3.png b/public/-/emojis/1/tone3.png
new file mode 100644
index 00000000000..482dd403475
--- /dev/null
+++ b/public/-/emojis/1/tone3.png
Binary files differ
diff --git a/public/-/emojis/1/tone4.png b/public/-/emojis/1/tone4.png
new file mode 100644
index 00000000000..5cae8bb20b0
--- /dev/null
+++ b/public/-/emojis/1/tone4.png
Binary files differ
diff --git a/public/-/emojis/1/tone5.png b/public/-/emojis/1/tone5.png
new file mode 100644
index 00000000000..49d1a8c3a64
--- /dev/null
+++ b/public/-/emojis/1/tone5.png
Binary files differ
diff --git a/public/-/emojis/1/tongue.png b/public/-/emojis/1/tongue.png
new file mode 100644
index 00000000000..70ce9c1225f
--- /dev/null
+++ b/public/-/emojis/1/tongue.png
Binary files differ
diff --git a/public/-/emojis/1/tools.png b/public/-/emojis/1/tools.png
new file mode 100644
index 00000000000..3c6049273a9
--- /dev/null
+++ b/public/-/emojis/1/tools.png
Binary files differ
diff --git a/public/-/emojis/1/top.png b/public/-/emojis/1/top.png
new file mode 100644
index 00000000000..49dea8c08b5
--- /dev/null
+++ b/public/-/emojis/1/top.png
Binary files differ
diff --git a/public/-/emojis/1/tophat.png b/public/-/emojis/1/tophat.png
new file mode 100644
index 00000000000..131b657b109
--- /dev/null
+++ b/public/-/emojis/1/tophat.png
Binary files differ
diff --git a/public/-/emojis/1/track_next.png b/public/-/emojis/1/track_next.png
new file mode 100644
index 00000000000..f8880d33bab
--- /dev/null
+++ b/public/-/emojis/1/track_next.png
Binary files differ
diff --git a/public/-/emojis/1/track_previous.png b/public/-/emojis/1/track_previous.png
new file mode 100644
index 00000000000..1ffd0566cfc
--- /dev/null
+++ b/public/-/emojis/1/track_previous.png
Binary files differ
diff --git a/public/-/emojis/1/trackball.png b/public/-/emojis/1/trackball.png
new file mode 100644
index 00000000000..3bea84ad7ce
--- /dev/null
+++ b/public/-/emojis/1/trackball.png
Binary files differ
diff --git a/public/-/emojis/1/tractor.png b/public/-/emojis/1/tractor.png
new file mode 100644
index 00000000000..c1bf8cae44f
--- /dev/null
+++ b/public/-/emojis/1/tractor.png
Binary files differ
diff --git a/public/-/emojis/1/traffic_light.png b/public/-/emojis/1/traffic_light.png
new file mode 100644
index 00000000000..6b312285b00
--- /dev/null
+++ b/public/-/emojis/1/traffic_light.png
Binary files differ
diff --git a/public/-/emojis/1/train.png b/public/-/emojis/1/train.png
new file mode 100644
index 00000000000..3c80321f7e8
--- /dev/null
+++ b/public/-/emojis/1/train.png
Binary files differ
diff --git a/public/-/emojis/1/train2.png b/public/-/emojis/1/train2.png
new file mode 100644
index 00000000000..367c7bc5d39
--- /dev/null
+++ b/public/-/emojis/1/train2.png
Binary files differ
diff --git a/public/-/emojis/1/tram.png b/public/-/emojis/1/tram.png
new file mode 100644
index 00000000000..b6f0e69038f
--- /dev/null
+++ b/public/-/emojis/1/tram.png
Binary files differ
diff --git a/public/-/emojis/1/triangular_flag_on_post.png b/public/-/emojis/1/triangular_flag_on_post.png
new file mode 100644
index 00000000000..c12d8b06886
--- /dev/null
+++ b/public/-/emojis/1/triangular_flag_on_post.png
Binary files differ
diff --git a/public/-/emojis/1/triangular_ruler.png b/public/-/emojis/1/triangular_ruler.png
new file mode 100644
index 00000000000..77dee9ee843
--- /dev/null
+++ b/public/-/emojis/1/triangular_ruler.png
Binary files differ
diff --git a/public/-/emojis/1/trident.png b/public/-/emojis/1/trident.png
new file mode 100644
index 00000000000..777a1dad121
--- /dev/null
+++ b/public/-/emojis/1/trident.png
Binary files differ
diff --git a/public/-/emojis/1/triumph.png b/public/-/emojis/1/triumph.png
new file mode 100644
index 00000000000..0be7a501969
--- /dev/null
+++ b/public/-/emojis/1/triumph.png
Binary files differ
diff --git a/public/-/emojis/1/trolleybus.png b/public/-/emojis/1/trolleybus.png
new file mode 100644
index 00000000000..139a9931b52
--- /dev/null
+++ b/public/-/emojis/1/trolleybus.png
Binary files differ
diff --git a/public/-/emojis/1/trophy.png b/public/-/emojis/1/trophy.png
new file mode 100644
index 00000000000..ac2895c1896
--- /dev/null
+++ b/public/-/emojis/1/trophy.png
Binary files differ
diff --git a/public/-/emojis/1/tropical_drink.png b/public/-/emojis/1/tropical_drink.png
new file mode 100644
index 00000000000..cd714f81b36
--- /dev/null
+++ b/public/-/emojis/1/tropical_drink.png
Binary files differ
diff --git a/public/-/emojis/1/tropical_fish.png b/public/-/emojis/1/tropical_fish.png
new file mode 100644
index 00000000000..252105235a6
--- /dev/null
+++ b/public/-/emojis/1/tropical_fish.png
Binary files differ
diff --git a/public/-/emojis/1/truck.png b/public/-/emojis/1/truck.png
new file mode 100644
index 00000000000..130de047f8b
--- /dev/null
+++ b/public/-/emojis/1/truck.png
Binary files differ
diff --git a/public/-/emojis/1/trumpet.png b/public/-/emojis/1/trumpet.png
new file mode 100644
index 00000000000..864ccbcd04a
--- /dev/null
+++ b/public/-/emojis/1/trumpet.png
Binary files differ
diff --git a/public/-/emojis/1/tulip.png b/public/-/emojis/1/tulip.png
new file mode 100644
index 00000000000..f799d75c182
--- /dev/null
+++ b/public/-/emojis/1/tulip.png
Binary files differ
diff --git a/public/-/emojis/1/tumbler_glass.png b/public/-/emojis/1/tumbler_glass.png
new file mode 100644
index 00000000000..7bf09229879
--- /dev/null
+++ b/public/-/emojis/1/tumbler_glass.png
Binary files differ
diff --git a/public/-/emojis/1/turkey.png b/public/-/emojis/1/turkey.png
new file mode 100644
index 00000000000..344af94c9ec
--- /dev/null
+++ b/public/-/emojis/1/turkey.png
Binary files differ
diff --git a/public/-/emojis/1/turtle.png b/public/-/emojis/1/turtle.png
new file mode 100644
index 00000000000..c22f7519fe8
--- /dev/null
+++ b/public/-/emojis/1/turtle.png
Binary files differ
diff --git a/public/-/emojis/1/tv.png b/public/-/emojis/1/tv.png
new file mode 100644
index 00000000000..999f1fb5c6d
--- /dev/null
+++ b/public/-/emojis/1/tv.png
Binary files differ
diff --git a/public/-/emojis/1/twisted_rightwards_arrows.png b/public/-/emojis/1/twisted_rightwards_arrows.png
new file mode 100644
index 00000000000..5904badde65
--- /dev/null
+++ b/public/-/emojis/1/twisted_rightwards_arrows.png
Binary files differ
diff --git a/public/-/emojis/1/two.png b/public/-/emojis/1/two.png
new file mode 100644
index 00000000000..927339c9bff
--- /dev/null
+++ b/public/-/emojis/1/two.png
Binary files differ
diff --git a/public/-/emojis/1/two_hearts.png b/public/-/emojis/1/two_hearts.png
new file mode 100644
index 00000000000..4d8c3386042
--- /dev/null
+++ b/public/-/emojis/1/two_hearts.png
Binary files differ
diff --git a/public/-/emojis/1/two_men_holding_hands.png b/public/-/emojis/1/two_men_holding_hands.png
new file mode 100644
index 00000000000..a511fda822a
--- /dev/null
+++ b/public/-/emojis/1/two_men_holding_hands.png
Binary files differ
diff --git a/public/-/emojis/1/two_women_holding_hands.png b/public/-/emojis/1/two_women_holding_hands.png
new file mode 100644
index 00000000000..b077cd3e40f
--- /dev/null
+++ b/public/-/emojis/1/two_women_holding_hands.png
Binary files differ
diff --git a/public/-/emojis/1/u5272.png b/public/-/emojis/1/u5272.png
new file mode 100644
index 00000000000..c4f837fe684
--- /dev/null
+++ b/public/-/emojis/1/u5272.png
Binary files differ
diff --git a/public/-/emojis/1/u5408.png b/public/-/emojis/1/u5408.png
new file mode 100644
index 00000000000..8375ad9d9af
--- /dev/null
+++ b/public/-/emojis/1/u5408.png
Binary files differ
diff --git a/public/-/emojis/1/u55b6.png b/public/-/emojis/1/u55b6.png
new file mode 100644
index 00000000000..d21cb30eaf3
--- /dev/null
+++ b/public/-/emojis/1/u55b6.png
Binary files differ
diff --git a/public/-/emojis/1/u6307.png b/public/-/emojis/1/u6307.png
new file mode 100644
index 00000000000..078e23e4ff3
--- /dev/null
+++ b/public/-/emojis/1/u6307.png
Binary files differ
diff --git a/public/-/emojis/1/u6708.png b/public/-/emojis/1/u6708.png
new file mode 100644
index 00000000000..c41bd36a26a
--- /dev/null
+++ b/public/-/emojis/1/u6708.png
Binary files differ
diff --git a/public/-/emojis/1/u6709.png b/public/-/emojis/1/u6709.png
new file mode 100644
index 00000000000..a4510de41c0
--- /dev/null
+++ b/public/-/emojis/1/u6709.png
Binary files differ
diff --git a/public/-/emojis/1/u6e80.png b/public/-/emojis/1/u6e80.png
new file mode 100644
index 00000000000..f9dea8b8833
--- /dev/null
+++ b/public/-/emojis/1/u6e80.png
Binary files differ
diff --git a/public/-/emojis/1/u7121.png b/public/-/emojis/1/u7121.png
new file mode 100644
index 00000000000..d3a19b420de
--- /dev/null
+++ b/public/-/emojis/1/u7121.png
Binary files differ
diff --git a/public/-/emojis/1/u7533.png b/public/-/emojis/1/u7533.png
new file mode 100644
index 00000000000..6b7af0ee222
--- /dev/null
+++ b/public/-/emojis/1/u7533.png
Binary files differ
diff --git a/public/-/emojis/1/u7981.png b/public/-/emojis/1/u7981.png
new file mode 100644
index 00000000000..4c704e03433
--- /dev/null
+++ b/public/-/emojis/1/u7981.png
Binary files differ
diff --git a/public/-/emojis/1/u7a7a.png b/public/-/emojis/1/u7a7a.png
new file mode 100644
index 00000000000..47966c1ea93
--- /dev/null
+++ b/public/-/emojis/1/u7a7a.png
Binary files differ
diff --git a/public/-/emojis/1/umbrella.png b/public/-/emojis/1/umbrella.png
new file mode 100644
index 00000000000..5b35b7ff6a4
--- /dev/null
+++ b/public/-/emojis/1/umbrella.png
Binary files differ
diff --git a/public/-/emojis/1/umbrella2.png b/public/-/emojis/1/umbrella2.png
new file mode 100644
index 00000000000..97fe859e74f
--- /dev/null
+++ b/public/-/emojis/1/umbrella2.png
Binary files differ
diff --git a/public/-/emojis/1/unamused.png b/public/-/emojis/1/unamused.png
new file mode 100644
index 00000000000..25e3677f2eb
--- /dev/null
+++ b/public/-/emojis/1/unamused.png
Binary files differ
diff --git a/public/-/emojis/1/underage.png b/public/-/emojis/1/underage.png
new file mode 100644
index 00000000000..6dfe6da51e2
--- /dev/null
+++ b/public/-/emojis/1/underage.png
Binary files differ
diff --git a/public/-/emojis/1/unicorn.png b/public/-/emojis/1/unicorn.png
new file mode 100644
index 00000000000..05a97969f7e
--- /dev/null
+++ b/public/-/emojis/1/unicorn.png
Binary files differ
diff --git a/public/-/emojis/1/unlock.png b/public/-/emojis/1/unlock.png
new file mode 100644
index 00000000000..4a74a693911
--- /dev/null
+++ b/public/-/emojis/1/unlock.png
Binary files differ
diff --git a/public/-/emojis/1/up.png b/public/-/emojis/1/up.png
new file mode 100644
index 00000000000..0d42142ba04
--- /dev/null
+++ b/public/-/emojis/1/up.png
Binary files differ
diff --git a/public/-/emojis/1/upside_down.png b/public/-/emojis/1/upside_down.png
new file mode 100644
index 00000000000..128f31c9828
--- /dev/null
+++ b/public/-/emojis/1/upside_down.png
Binary files differ
diff --git a/public/-/emojis/1/urn.png b/public/-/emojis/1/urn.png
new file mode 100644
index 00000000000..6b5b3503438
--- /dev/null
+++ b/public/-/emojis/1/urn.png
Binary files differ
diff --git a/public/-/emojis/1/v.png b/public/-/emojis/1/v.png
new file mode 100644
index 00000000000..70c5516ffee
--- /dev/null
+++ b/public/-/emojis/1/v.png
Binary files differ
diff --git a/public/-/emojis/1/v_tone1.png b/public/-/emojis/1/v_tone1.png
new file mode 100644
index 00000000000..6ac54a745f4
--- /dev/null
+++ b/public/-/emojis/1/v_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/v_tone2.png b/public/-/emojis/1/v_tone2.png
new file mode 100644
index 00000000000..6dd9669866d
--- /dev/null
+++ b/public/-/emojis/1/v_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/v_tone3.png b/public/-/emojis/1/v_tone3.png
new file mode 100644
index 00000000000..a615e53f02f
--- /dev/null
+++ b/public/-/emojis/1/v_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/v_tone4.png b/public/-/emojis/1/v_tone4.png
new file mode 100644
index 00000000000..33a34bd5a78
--- /dev/null
+++ b/public/-/emojis/1/v_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/v_tone5.png b/public/-/emojis/1/v_tone5.png
new file mode 100644
index 00000000000..45ad14b6c9c
--- /dev/null
+++ b/public/-/emojis/1/v_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/vertical_traffic_light.png b/public/-/emojis/1/vertical_traffic_light.png
new file mode 100644
index 00000000000..8085973eecf
--- /dev/null
+++ b/public/-/emojis/1/vertical_traffic_light.png
Binary files differ
diff --git a/public/-/emojis/1/vhs.png b/public/-/emojis/1/vhs.png
new file mode 100644
index 00000000000..b9eb78ecd92
--- /dev/null
+++ b/public/-/emojis/1/vhs.png
Binary files differ
diff --git a/public/-/emojis/1/vibration_mode.png b/public/-/emojis/1/vibration_mode.png
new file mode 100644
index 00000000000..cc46510e48e
--- /dev/null
+++ b/public/-/emojis/1/vibration_mode.png
Binary files differ
diff --git a/public/-/emojis/1/video_camera.png b/public/-/emojis/1/video_camera.png
new file mode 100644
index 00000000000..85b300d425c
--- /dev/null
+++ b/public/-/emojis/1/video_camera.png
Binary files differ
diff --git a/public/-/emojis/1/video_game.png b/public/-/emojis/1/video_game.png
new file mode 100644
index 00000000000..316a9106a55
--- /dev/null
+++ b/public/-/emojis/1/video_game.png
Binary files differ
diff --git a/public/-/emojis/1/violin.png b/public/-/emojis/1/violin.png
new file mode 100644
index 00000000000..e1e76cce242
--- /dev/null
+++ b/public/-/emojis/1/violin.png
Binary files differ
diff --git a/public/-/emojis/1/virgo.png b/public/-/emojis/1/virgo.png
new file mode 100644
index 00000000000..a6b56c2cb5e
--- /dev/null
+++ b/public/-/emojis/1/virgo.png
Binary files differ
diff --git a/public/-/emojis/1/volcano.png b/public/-/emojis/1/volcano.png
new file mode 100644
index 00000000000..931d569294c
--- /dev/null
+++ b/public/-/emojis/1/volcano.png
Binary files differ
diff --git a/public/-/emojis/1/volleyball.png b/public/-/emojis/1/volleyball.png
new file mode 100644
index 00000000000..7a0e49d4b07
--- /dev/null
+++ b/public/-/emojis/1/volleyball.png
Binary files differ
diff --git a/public/-/emojis/1/vs.png b/public/-/emojis/1/vs.png
new file mode 100644
index 00000000000..e1180f4a464
--- /dev/null
+++ b/public/-/emojis/1/vs.png
Binary files differ
diff --git a/public/-/emojis/1/vulcan.png b/public/-/emojis/1/vulcan.png
new file mode 100644
index 00000000000..54728bcaf5c
--- /dev/null
+++ b/public/-/emojis/1/vulcan.png
Binary files differ
diff --git a/public/-/emojis/1/vulcan_tone1.png b/public/-/emojis/1/vulcan_tone1.png
new file mode 100644
index 00000000000..8aff5d8fa16
--- /dev/null
+++ b/public/-/emojis/1/vulcan_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/vulcan_tone2.png b/public/-/emojis/1/vulcan_tone2.png
new file mode 100644
index 00000000000..82b7ad519b4
--- /dev/null
+++ b/public/-/emojis/1/vulcan_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/vulcan_tone3.png b/public/-/emojis/1/vulcan_tone3.png
new file mode 100644
index 00000000000..d1400e1dd28
--- /dev/null
+++ b/public/-/emojis/1/vulcan_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/vulcan_tone4.png b/public/-/emojis/1/vulcan_tone4.png
new file mode 100644
index 00000000000..47e2b280148
--- /dev/null
+++ b/public/-/emojis/1/vulcan_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/vulcan_tone5.png b/public/-/emojis/1/vulcan_tone5.png
new file mode 100644
index 00000000000..60b5c6077be
--- /dev/null
+++ b/public/-/emojis/1/vulcan_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/walking.png b/public/-/emojis/1/walking.png
new file mode 100644
index 00000000000..06dc169a3fd
--- /dev/null
+++ b/public/-/emojis/1/walking.png
Binary files differ
diff --git a/public/-/emojis/1/walking_tone1.png b/public/-/emojis/1/walking_tone1.png
new file mode 100644
index 00000000000..4e391b45a0b
--- /dev/null
+++ b/public/-/emojis/1/walking_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/walking_tone2.png b/public/-/emojis/1/walking_tone2.png
new file mode 100644
index 00000000000..31f94a1bce1
--- /dev/null
+++ b/public/-/emojis/1/walking_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/walking_tone3.png b/public/-/emojis/1/walking_tone3.png
new file mode 100644
index 00000000000..f7ed8e39c2e
--- /dev/null
+++ b/public/-/emojis/1/walking_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/walking_tone4.png b/public/-/emojis/1/walking_tone4.png
new file mode 100644
index 00000000000..e58dc04c7b2
--- /dev/null
+++ b/public/-/emojis/1/walking_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/walking_tone5.png b/public/-/emojis/1/walking_tone5.png
new file mode 100644
index 00000000000..ba4e1b58fcb
--- /dev/null
+++ b/public/-/emojis/1/walking_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/waning_crescent_moon.png b/public/-/emojis/1/waning_crescent_moon.png
new file mode 100644
index 00000000000..cf68706b871
--- /dev/null
+++ b/public/-/emojis/1/waning_crescent_moon.png
Binary files differ
diff --git a/public/-/emojis/1/waning_gibbous_moon.png b/public/-/emojis/1/waning_gibbous_moon.png
new file mode 100644
index 00000000000..24e16266119
--- /dev/null
+++ b/public/-/emojis/1/waning_gibbous_moon.png
Binary files differ
diff --git a/public/-/emojis/1/warning.png b/public/-/emojis/1/warning.png
new file mode 100644
index 00000000000..35691c2ed97
--- /dev/null
+++ b/public/-/emojis/1/warning.png
Binary files differ
diff --git a/public/-/emojis/1/wastebasket.png b/public/-/emojis/1/wastebasket.png
new file mode 100644
index 00000000000..2b3c484b498
--- /dev/null
+++ b/public/-/emojis/1/wastebasket.png
Binary files differ
diff --git a/public/-/emojis/1/watch.png b/public/-/emojis/1/watch.png
new file mode 100644
index 00000000000..64819bc6e21
--- /dev/null
+++ b/public/-/emojis/1/watch.png
Binary files differ
diff --git a/public/-/emojis/1/water_buffalo.png b/public/-/emojis/1/water_buffalo.png
new file mode 100644
index 00000000000..80446615caf
--- /dev/null
+++ b/public/-/emojis/1/water_buffalo.png
Binary files differ
diff --git a/public/-/emojis/1/water_polo.png b/public/-/emojis/1/water_polo.png
new file mode 100644
index 00000000000..cb44576780d
--- /dev/null
+++ b/public/-/emojis/1/water_polo.png
Binary files differ
diff --git a/public/-/emojis/1/water_polo_tone1.png b/public/-/emojis/1/water_polo_tone1.png
new file mode 100644
index 00000000000..bed1a908d6a
--- /dev/null
+++ b/public/-/emojis/1/water_polo_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/water_polo_tone2.png b/public/-/emojis/1/water_polo_tone2.png
new file mode 100644
index 00000000000..ec5a43b4d4a
--- /dev/null
+++ b/public/-/emojis/1/water_polo_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/water_polo_tone3.png b/public/-/emojis/1/water_polo_tone3.png
new file mode 100644
index 00000000000..b081a4a5a96
--- /dev/null
+++ b/public/-/emojis/1/water_polo_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/water_polo_tone4.png b/public/-/emojis/1/water_polo_tone4.png
new file mode 100644
index 00000000000..82cfbc3b0c7
--- /dev/null
+++ b/public/-/emojis/1/water_polo_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/water_polo_tone5.png b/public/-/emojis/1/water_polo_tone5.png
new file mode 100644
index 00000000000..bd3366eb06c
--- /dev/null
+++ b/public/-/emojis/1/water_polo_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/watermelon.png b/public/-/emojis/1/watermelon.png
new file mode 100644
index 00000000000..0761488b4c9
--- /dev/null
+++ b/public/-/emojis/1/watermelon.png
Binary files differ
diff --git a/public/-/emojis/1/wave.png b/public/-/emojis/1/wave.png
new file mode 100644
index 00000000000..e0cd79b45f5
--- /dev/null
+++ b/public/-/emojis/1/wave.png
Binary files differ
diff --git a/public/-/emojis/1/wave_tone1.png b/public/-/emojis/1/wave_tone1.png
new file mode 100644
index 00000000000..6b2b34b106e
--- /dev/null
+++ b/public/-/emojis/1/wave_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/wave_tone2.png b/public/-/emojis/1/wave_tone2.png
new file mode 100644
index 00000000000..b857119732e
--- /dev/null
+++ b/public/-/emojis/1/wave_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/wave_tone3.png b/public/-/emojis/1/wave_tone3.png
new file mode 100644
index 00000000000..6283b670f43
--- /dev/null
+++ b/public/-/emojis/1/wave_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/wave_tone4.png b/public/-/emojis/1/wave_tone4.png
new file mode 100644
index 00000000000..fe6b2baa747
--- /dev/null
+++ b/public/-/emojis/1/wave_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/wave_tone5.png b/public/-/emojis/1/wave_tone5.png
new file mode 100644
index 00000000000..4bd168ebb78
--- /dev/null
+++ b/public/-/emojis/1/wave_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/wavy_dash.png b/public/-/emojis/1/wavy_dash.png
new file mode 100644
index 00000000000..001c8d6e47d
--- /dev/null
+++ b/public/-/emojis/1/wavy_dash.png
Binary files differ
diff --git a/public/-/emojis/1/waxing_crescent_moon.png b/public/-/emojis/1/waxing_crescent_moon.png
new file mode 100644
index 00000000000..687125173d9
--- /dev/null
+++ b/public/-/emojis/1/waxing_crescent_moon.png
Binary files differ
diff --git a/public/-/emojis/1/waxing_gibbous_moon.png b/public/-/emojis/1/waxing_gibbous_moon.png
new file mode 100644
index 00000000000..3a808156318
--- /dev/null
+++ b/public/-/emojis/1/waxing_gibbous_moon.png
Binary files differ
diff --git a/public/-/emojis/1/wc.png b/public/-/emojis/1/wc.png
new file mode 100644
index 00000000000..aa433e84ba6
--- /dev/null
+++ b/public/-/emojis/1/wc.png
Binary files differ
diff --git a/public/-/emojis/1/weary.png b/public/-/emojis/1/weary.png
new file mode 100644
index 00000000000..98bfbd24a16
--- /dev/null
+++ b/public/-/emojis/1/weary.png
Binary files differ
diff --git a/public/-/emojis/1/wedding.png b/public/-/emojis/1/wedding.png
new file mode 100644
index 00000000000..d0d8aa0bfae
--- /dev/null
+++ b/public/-/emojis/1/wedding.png
Binary files differ
diff --git a/public/-/emojis/1/whale.png b/public/-/emojis/1/whale.png
new file mode 100644
index 00000000000..9f19b44257c
--- /dev/null
+++ b/public/-/emojis/1/whale.png
Binary files differ
diff --git a/public/-/emojis/1/whale2.png b/public/-/emojis/1/whale2.png
new file mode 100644
index 00000000000..0df9d3c73a4
--- /dev/null
+++ b/public/-/emojis/1/whale2.png
Binary files differ
diff --git a/public/-/emojis/1/wheel_of_dharma.png b/public/-/emojis/1/wheel_of_dharma.png
new file mode 100644
index 00000000000..3666db0016b
--- /dev/null
+++ b/public/-/emojis/1/wheel_of_dharma.png
Binary files differ
diff --git a/public/-/emojis/1/wheelchair.png b/public/-/emojis/1/wheelchair.png
new file mode 100644
index 00000000000..4e5b2698eac
--- /dev/null
+++ b/public/-/emojis/1/wheelchair.png
Binary files differ
diff --git a/public/-/emojis/1/white_check_mark.png b/public/-/emojis/1/white_check_mark.png
new file mode 100644
index 00000000000..e55f087e544
--- /dev/null
+++ b/public/-/emojis/1/white_check_mark.png
Binary files differ
diff --git a/public/-/emojis/1/white_circle.png b/public/-/emojis/1/white_circle.png
new file mode 100644
index 00000000000..c19e15684dd
--- /dev/null
+++ b/public/-/emojis/1/white_circle.png
Binary files differ
diff --git a/public/-/emojis/1/white_flower.png b/public/-/emojis/1/white_flower.png
new file mode 100644
index 00000000000..d6af8b60077
--- /dev/null
+++ b/public/-/emojis/1/white_flower.png
Binary files differ
diff --git a/public/-/emojis/1/white_large_square.png b/public/-/emojis/1/white_large_square.png
new file mode 100644
index 00000000000..6f06c1c79de
--- /dev/null
+++ b/public/-/emojis/1/white_large_square.png
Binary files differ
diff --git a/public/-/emojis/1/white_medium_small_square.png b/public/-/emojis/1/white_medium_small_square.png
new file mode 100644
index 00000000000..ae874126750
--- /dev/null
+++ b/public/-/emojis/1/white_medium_small_square.png
Binary files differ
diff --git a/public/-/emojis/1/white_medium_square.png b/public/-/emojis/1/white_medium_square.png
new file mode 100644
index 00000000000..8daacf57059
--- /dev/null
+++ b/public/-/emojis/1/white_medium_square.png
Binary files differ
diff --git a/public/-/emojis/1/white_small_square.png b/public/-/emojis/1/white_small_square.png
new file mode 100644
index 00000000000..d7ebdb0c0ed
--- /dev/null
+++ b/public/-/emojis/1/white_small_square.png
Binary files differ
diff --git a/public/-/emojis/1/white_square_button.png b/public/-/emojis/1/white_square_button.png
new file mode 100644
index 00000000000..934b1cedfd2
--- /dev/null
+++ b/public/-/emojis/1/white_square_button.png
Binary files differ
diff --git a/public/-/emojis/1/white_sun_cloud.png b/public/-/emojis/1/white_sun_cloud.png
new file mode 100644
index 00000000000..0a4cc100269
--- /dev/null
+++ b/public/-/emojis/1/white_sun_cloud.png
Binary files differ
diff --git a/public/-/emojis/1/white_sun_rain_cloud.png b/public/-/emojis/1/white_sun_rain_cloud.png
new file mode 100644
index 00000000000..491f9ca4839
--- /dev/null
+++ b/public/-/emojis/1/white_sun_rain_cloud.png
Binary files differ
diff --git a/public/-/emojis/1/white_sun_small_cloud.png b/public/-/emojis/1/white_sun_small_cloud.png
new file mode 100644
index 00000000000..cead0bfa521
--- /dev/null
+++ b/public/-/emojis/1/white_sun_small_cloud.png
Binary files differ
diff --git a/public/-/emojis/1/wilted_rose.png b/public/-/emojis/1/wilted_rose.png
new file mode 100644
index 00000000000..62412b143ae
--- /dev/null
+++ b/public/-/emojis/1/wilted_rose.png
Binary files differ
diff --git a/public/-/emojis/1/wind_blowing_face.png b/public/-/emojis/1/wind_blowing_face.png
new file mode 100644
index 00000000000..df81b652eb6
--- /dev/null
+++ b/public/-/emojis/1/wind_blowing_face.png
Binary files differ
diff --git a/public/-/emojis/1/wind_chime.png b/public/-/emojis/1/wind_chime.png
new file mode 100644
index 00000000000..3c9ef3a95f6
--- /dev/null
+++ b/public/-/emojis/1/wind_chime.png
Binary files differ
diff --git a/public/-/emojis/1/wine_glass.png b/public/-/emojis/1/wine_glass.png
new file mode 100644
index 00000000000..3cc98689192
--- /dev/null
+++ b/public/-/emojis/1/wine_glass.png
Binary files differ
diff --git a/public/-/emojis/1/wink.png b/public/-/emojis/1/wink.png
new file mode 100644
index 00000000000..7ea7810a37d
--- /dev/null
+++ b/public/-/emojis/1/wink.png
Binary files differ
diff --git a/public/-/emojis/1/wolf.png b/public/-/emojis/1/wolf.png
new file mode 100644
index 00000000000..ba7220f2de9
--- /dev/null
+++ b/public/-/emojis/1/wolf.png
Binary files differ
diff --git a/public/-/emojis/1/woman.png b/public/-/emojis/1/woman.png
new file mode 100644
index 00000000000..ece440e7a61
--- /dev/null
+++ b/public/-/emojis/1/woman.png
Binary files differ
diff --git a/public/-/emojis/1/woman_tone1.png b/public/-/emojis/1/woman_tone1.png
new file mode 100644
index 00000000000..ff089b8889b
--- /dev/null
+++ b/public/-/emojis/1/woman_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/woman_tone2.png b/public/-/emojis/1/woman_tone2.png
new file mode 100644
index 00000000000..0719c378016
--- /dev/null
+++ b/public/-/emojis/1/woman_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/woman_tone3.png b/public/-/emojis/1/woman_tone3.png
new file mode 100644
index 00000000000..5672e2fd52d
--- /dev/null
+++ b/public/-/emojis/1/woman_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/woman_tone4.png b/public/-/emojis/1/woman_tone4.png
new file mode 100644
index 00000000000..5754aab558b
--- /dev/null
+++ b/public/-/emojis/1/woman_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/woman_tone5.png b/public/-/emojis/1/woman_tone5.png
new file mode 100644
index 00000000000..fc252af3a39
--- /dev/null
+++ b/public/-/emojis/1/woman_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/womans_clothes.png b/public/-/emojis/1/womans_clothes.png
new file mode 100644
index 00000000000..01410dc8107
--- /dev/null
+++ b/public/-/emojis/1/womans_clothes.png
Binary files differ
diff --git a/public/-/emojis/1/womans_hat.png b/public/-/emojis/1/womans_hat.png
new file mode 100644
index 00000000000..b837b6a2e47
--- /dev/null
+++ b/public/-/emojis/1/womans_hat.png
Binary files differ
diff --git a/public/-/emojis/1/womens.png b/public/-/emojis/1/womens.png
new file mode 100644
index 00000000000..d4ecc22e7b3
--- /dev/null
+++ b/public/-/emojis/1/womens.png
Binary files differ
diff --git a/public/-/emojis/1/worried.png b/public/-/emojis/1/worried.png
new file mode 100644
index 00000000000..7074afcf5b7
--- /dev/null
+++ b/public/-/emojis/1/worried.png
Binary files differ
diff --git a/public/-/emojis/1/wrench.png b/public/-/emojis/1/wrench.png
new file mode 100644
index 00000000000..c16b7439697
--- /dev/null
+++ b/public/-/emojis/1/wrench.png
Binary files differ
diff --git a/public/-/emojis/1/wrestlers.png b/public/-/emojis/1/wrestlers.png
new file mode 100644
index 00000000000..71e67cfad85
--- /dev/null
+++ b/public/-/emojis/1/wrestlers.png
Binary files differ
diff --git a/public/-/emojis/1/wrestlers_tone1.png b/public/-/emojis/1/wrestlers_tone1.png
new file mode 100644
index 00000000000..379070fd03b
--- /dev/null
+++ b/public/-/emojis/1/wrestlers_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/wrestlers_tone2.png b/public/-/emojis/1/wrestlers_tone2.png
new file mode 100644
index 00000000000..6863ea9209d
--- /dev/null
+++ b/public/-/emojis/1/wrestlers_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/wrestlers_tone3.png b/public/-/emojis/1/wrestlers_tone3.png
new file mode 100644
index 00000000000..b7e62910127
--- /dev/null
+++ b/public/-/emojis/1/wrestlers_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/wrestlers_tone4.png b/public/-/emojis/1/wrestlers_tone4.png
new file mode 100644
index 00000000000..750f9589233
--- /dev/null
+++ b/public/-/emojis/1/wrestlers_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/wrestlers_tone5.png b/public/-/emojis/1/wrestlers_tone5.png
new file mode 100644
index 00000000000..36ab9bb3f42
--- /dev/null
+++ b/public/-/emojis/1/wrestlers_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/writing_hand.png b/public/-/emojis/1/writing_hand.png
new file mode 100644
index 00000000000..85639f8ac40
--- /dev/null
+++ b/public/-/emojis/1/writing_hand.png
Binary files differ
diff --git a/public/-/emojis/1/writing_hand_tone1.png b/public/-/emojis/1/writing_hand_tone1.png
new file mode 100644
index 00000000000..7923d8ebb17
--- /dev/null
+++ b/public/-/emojis/1/writing_hand_tone1.png
Binary files differ
diff --git a/public/-/emojis/1/writing_hand_tone2.png b/public/-/emojis/1/writing_hand_tone2.png
new file mode 100644
index 00000000000..bcb304e15d2
--- /dev/null
+++ b/public/-/emojis/1/writing_hand_tone2.png
Binary files differ
diff --git a/public/-/emojis/1/writing_hand_tone3.png b/public/-/emojis/1/writing_hand_tone3.png
new file mode 100644
index 00000000000..fd885fd2d90
--- /dev/null
+++ b/public/-/emojis/1/writing_hand_tone3.png
Binary files differ
diff --git a/public/-/emojis/1/writing_hand_tone4.png b/public/-/emojis/1/writing_hand_tone4.png
new file mode 100644
index 00000000000..d065b8c64ab
--- /dev/null
+++ b/public/-/emojis/1/writing_hand_tone4.png
Binary files differ
diff --git a/public/-/emojis/1/writing_hand_tone5.png b/public/-/emojis/1/writing_hand_tone5.png
new file mode 100644
index 00000000000..a44b3dd757c
--- /dev/null
+++ b/public/-/emojis/1/writing_hand_tone5.png
Binary files differ
diff --git a/public/-/emojis/1/x.png b/public/-/emojis/1/x.png
new file mode 100644
index 00000000000..9f9ed0f7ad2
--- /dev/null
+++ b/public/-/emojis/1/x.png
Binary files differ
diff --git a/public/-/emojis/1/yellow_heart.png b/public/-/emojis/1/yellow_heart.png
new file mode 100644
index 00000000000..7901a9d0103
--- /dev/null
+++ b/public/-/emojis/1/yellow_heart.png
Binary files differ
diff --git a/public/-/emojis/1/yen.png b/public/-/emojis/1/yen.png
new file mode 100644
index 00000000000..63ee4799d66
--- /dev/null
+++ b/public/-/emojis/1/yen.png
Binary files differ
diff --git a/public/-/emojis/1/yin_yang.png b/public/-/emojis/1/yin_yang.png
new file mode 100644
index 00000000000..f2900f6338f
--- /dev/null
+++ b/public/-/emojis/1/yin_yang.png
Binary files differ
diff --git a/public/-/emojis/1/yum.png b/public/-/emojis/1/yum.png
new file mode 100644
index 00000000000..2df15753ca1
--- /dev/null
+++ b/public/-/emojis/1/yum.png
Binary files differ
diff --git a/public/-/emojis/1/zap.png b/public/-/emojis/1/zap.png
new file mode 100644
index 00000000000..47e68e48e49
--- /dev/null
+++ b/public/-/emojis/1/zap.png
Binary files differ
diff --git a/public/-/emojis/1/zero.png b/public/-/emojis/1/zero.png
new file mode 100644
index 00000000000..13aca83e018
--- /dev/null
+++ b/public/-/emojis/1/zero.png
Binary files differ
diff --git a/public/-/emojis/1/zipper_mouth.png b/public/-/emojis/1/zipper_mouth.png
new file mode 100644
index 00000000000..f8ced2502a7
--- /dev/null
+++ b/public/-/emojis/1/zipper_mouth.png
Binary files differ
diff --git a/public/-/emojis/1/zzz.png b/public/-/emojis/1/zzz.png
new file mode 100644
index 00000000000..9bc72b4469f
--- /dev/null
+++ b/public/-/emojis/1/zzz.png
Binary files differ
diff --git a/public/robots.txt b/public/robots.txt
index 7908297564e..2cda837d6f1 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -8,7 +8,7 @@
# Only some crawlers respect this setting, e.g. Googlebot does not
# Crawl-delay: 1
-# Based on details in https://gitlab.com/gitlab-org/gitlab-ce/blob/master/config/routes.rb, https://gitlab.com/gitlab-org/gitlab-ce/blob/master/spec/routing, and using application
+# Based on details in https://gitlab.com/gitlab-org/gitlab/blob/master/config/routes.rb, https://gitlab.com/gitlab-org/gitlab/blob/master/spec/routing, and using application
User-Agent: *
Disallow: /autocomplete/users
Disallow: /search
diff --git a/qa/Dockerfile b/qa/Dockerfile
index 84dbfae1008..4845938b57e 100644
--- a/qa/Dockerfile
+++ b/qa/Dockerfile
@@ -50,12 +50,13 @@ RUN export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
WORKDIR /home/gitlab/qa
COPY ./qa/Gemfile* /home/gitlab/qa/
COPY ./config/initializers/0_inject_enterprise_edition_module.rb /home/gitlab/config/initializers/
-# Copy VERSION to ensure the COPY succeeds to copy at least one file since ee/app/models/license.rb isn't present in CE
+# Copy VERSION to ensure the COPY succeeds to copy at least one file since ee/app/models/license.rb isn't present in FOSS
+# The [b] part makes ./ee/app/models/license.r[b] a pattern that is allowed to return no files (which is the case in FOSS)
COPY VERSION ./ee/app/models/license.r[b] /home/gitlab/ee/app/models/
COPY ./lib/gitlab.rb /home/gitlab/lib/
-COPY ./INSTALLATION_TYPE /home/gitlab/
-COPY ./VERSION /home/gitlab/
-RUN cd /home/gitlab/qa/ && bundle install
+COPY ./lib/gitlab/utils.rb /home/gitlab/lib/gitlab/
+COPY ./INSTALLATION_TYPE ./VERSION /home/gitlab/
+RUN cd /home/gitlab/qa/ && bundle install --jobs=$(nproc) --retry=3 --quiet
COPY ./qa /home/gitlab/qa
ENTRYPOINT ["bin/test"]
diff --git a/qa/knapsack/gitlab-ce/review-qa-all_master_report.json b/qa/knapsack/gitlab-ce/review-qa-all_master_report.json
deleted file mode 100644
index f147346ba0f..00000000000
--- a/qa/knapsack/gitlab-ce/review-qa-all_master_report.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb": 9.697327613830566,
- "qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 46.54227638244629,
- "qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb": 10.214765310287476,
- "qa/specs/features/browser_ui/1_manage/project/view_project_activity_spec.rb": 7.882027864456177,
- "qa/specs/features/api/3_create/repository/files_spec.rb": 5.015859127044678,
- "qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 12.772682905197144,
- "qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 29.76174831390381,
- "qa/specs/features/browser_ui/3_create/repository/use_ssh_key_spec.rb": 22.800872802734375,
- "qa/specs/features/browser_ui/1_manage/login/register_spec.rb": 22.320587396621704,
- "qa/specs/features/api/1_manage/users_spec.rb": 0.6089541912078857,
- "qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 0.9618203639984131,
- "qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 13.403101205825806,
- "qa/specs/features/browser_ui/non_devops/performance_bar_spec.rb": 8.810423135757446,
- "qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 7.730542182922363,
- "qa/specs/features/browser_ui/3_create/repository/add_ssh_key_spec.rb": 16.18057894706726,
- "qa/specs/features/browser_ui/4_verify/ci_variable/add_ci_variable_spec.rb": 8.31815505027771,
- "qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 9.48607873916626,
- "qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 19.552733182907104,
- "qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb": 17.273863554000854,
- "qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb": 8.281434059143066,
- "qa/specs/features/browser_ui/3_create/repository/create_edit_delete_file_via_web_spec.rb": 18.047621726989746,
- "qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 7.422840595245361,
- "qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb": 3.438166856765747,
- "qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb": 18.679633855819702,
- "qa/specs/features/browser_ui/3_create/merge_request/squash_merge_request_spec.rb": 27.943300485610962,
- "qa/specs/features/browser_ui/3_create/repository/add_list_delete_branches_spec.rb": 39.17585229873657,
- "qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 40.09336972236633,
- "qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 3.705310821533203,
- "qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb": 5.812374591827393,
- "qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 92.46774697303772,
- "qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb": 100.28881478309631,
- "qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 23.710937023162842,
- "qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb": 20.58603596687317,
- "qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb": 25.460349321365356,
- "qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 19.459370374679565,
- "qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 6.731764793395996,
- "qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 15.342933893203735,
- "qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 11.280649185180664,
- "qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 57.48992609977722,
- "qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 32.5517954826355
-} \ No newline at end of file
diff --git a/qa/knapsack/master_report.json b/qa/knapsack/master_report.json
new file mode 100644
index 00000000000..467150e84c7
--- /dev/null
+++ b/qa/knapsack/master_report.json
@@ -0,0 +1,54 @@
+{
+ "qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb": 4.835599899291992,
+ "qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb": 69.85551619529724,
+ "qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb": 14.649160623550415,
+ "qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb": 12.790381908416748,
+ "qa/specs/features/ee/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb": 0.00018262863159179688,
+ "qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb": 59.73394823074341,
+ "qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb": 26.39240026473999,
+ "qa/specs/features/ee/browser_ui/secure/create_project_with_secure_spec.rb": 46.76790499687195,
+ "qa/specs/features/api/1_manage/users_spec.rb": 0.6089541912078857,
+ "qa/specs/features/api/3_create/repository/files_spec.rb": 5.015859127044678,
+ "qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 1.0199065208435059,
+ "qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb": 33.54091453552246,
+ "qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb": 3.438166856765747,
+ "qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb": 20.58603596687317,
+ "qa/specs/features/browser_ui/1_manage/login/register_spec.rb": 22.320587396621704,
+ "qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb": 8.490083694458008,
+ "qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb": 10.214765310287476,
+ "qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb": 100.28881478309631,
+ "qa/specs/features/browser_ui/1_manage/project/view_project_activity_spec.rb": 7.882027864456177,
+ "qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb": 13.739388942718506,
+ "qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 13.403101205825806,
+ "qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 10.989444971084595,
+ "qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 10.811973810195923,
+ "qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 12.63524317741394,
+ "qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 11.280649185180664,
+ "qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 41.76726770401001,
+ "qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 32.5517954826355,
+ "qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 46.54227638244629,
+ "qa/specs/features/browser_ui/3_create/merge_request/squash_merge_request_spec.rb": 27.943300485610962,
+ "qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 3.705310821533203,
+ "qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 40.09336972236633,
+ "qa/specs/features/browser_ui/3_create/repository/add_list_delete_branches_spec.rb": 31.49540114402771,
+ "qa/specs/features/browser_ui/3_create/repository/add_ssh_key_spec.rb": 16.18057894706726,
+ "qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 0.7397980690002441,
+ "qa/specs/features/browser_ui/3_create/repository/create_edit_delete_file_via_web_spec.rb": 18.047621726989746,
+ "qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 9.48607873916626,
+ "qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 23.710937023162842,
+ "qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 19.459370374679565,
+ "qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 7.730542182922363,
+ "qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 29.76174831390381,
+ "qa/specs/features/browser_ui/3_create/repository/use_ssh_key_spec.rb": 22.800872802734375,
+ "qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 6.731764793395996,
+ "qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb": 5.812374591827393,
+ "qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb": 25.460349321365356,
+ "qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb": 17.273863554000854,
+ "qa/specs/features/browser_ui/4_verify/ci_variable/add_ci_variable_spec.rb": 8.31815505027771,
+ "qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb": 18.679633855819702,
+ "qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 15.342933893203735,
+ "qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 92.46774697303772,
+ "qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 20.252174615859985,
+ "qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb": 8.281434059143066,
+ "qa/specs/features/browser_ui/non_devops/performance_bar_spec.rb": 8.810423135757446
+} \ No newline at end of file
diff --git a/qa/qa.rb b/qa/qa.rb
index 6e87129641a..a628c0e0e3f 100644
--- a/qa/qa.rb
+++ b/qa/qa.rb
@@ -5,6 +5,7 @@ $: << File.expand_path(File.dirname(__FILE__))
Encoding.default_external = 'UTF-8'
require_relative '../lib/gitlab'
+require_relative '../lib/gitlab/utils'
require_relative '../config/initializers/0_inject_enterprise_edition_module'
module QA
@@ -23,6 +24,7 @@ module QA
autoload :Feature, 'qa/runtime/feature'
autoload :Fixtures, 'qa/runtime/fixtures'
autoload :Logger, 'qa/runtime/logger'
+ autoload :GPG, 'qa/runtime/gpg'
module API
autoload :Client, 'qa/runtime/api/client'
@@ -67,7 +69,9 @@ module QA
autoload :Fork, 'qa/resource/fork'
autoload :SSHKey, 'qa/resource/ssh_key'
autoload :Snippet, 'qa/resource/snippet'
+ autoload :Tag, 'qa/resource/tag'
autoload :ProjectMember, 'qa/resource/project_member'
+ autoload :UserGPG, 'qa/resource/user_gpg'
module Events
autoload :Base, 'qa/resource/events/base'
@@ -111,6 +115,7 @@ module QA
module Integration
autoload :Github, 'qa/scenario/test/integration/github'
autoload :LDAPNoTLS, 'qa/scenario/test/integration/ldap_no_tls'
+ autoload :LDAPNoServer, 'qa/scenario/test/integration/ldap_no_server'
autoload :LDAPTLS, 'qa/scenario/test/integration/ldap_tls'
autoload :InstanceSAML, 'qa/scenario/test/integration/instance_saml'
autoload :OAuth, 'qa/scenario/test/integration/oauth'
@@ -287,6 +292,8 @@ module QA
autoload :Menu, 'qa/page/profile/menu'
autoload :PersonalAccessTokens, 'qa/page/profile/personal_access_tokens'
autoload :SSHKeys, 'qa/page/profile/ssh_keys'
+ autoload :Emails, 'qa/page/profile/emails'
+ autoload :Password, 'qa/page/profile/password'
autoload :TwoFactorAuth, 'qa/page/profile/two_factor_auth'
end
@@ -329,6 +336,13 @@ module QA
autoload :PerformanceBar, 'qa/page/admin/settings/component/performance_bar'
end
end
+
+ module Overview
+ module Users
+ autoload :Index, 'qa/page/admin/overview/users/index'
+ autoload :Show, 'qa/page/admin/overview/users/show'
+ end
+ end
end
module Mattermost
@@ -344,6 +358,7 @@ module QA
# Classes describing components that are used by several pages.
#
module Component
+ autoload :CiBadgeLink, 'qa/page/component/ci_badge_link'
autoload :ClonePanel, 'qa/page/component/clone_panel'
autoload :LazyLoader, 'qa/page/component/lazy_loader'
autoload :LegacyClonePanel, 'qa/page/component/legacy_clone_panel'
@@ -381,7 +396,6 @@ module QA
autoload :Shellout, 'qa/service/shellout'
autoload :KubernetesCluster, 'qa/service/kubernetes_cluster'
autoload :Omnibus, 'qa/service/omnibus'
- autoload :Runner, 'qa/service/runner'
module ClusterProvider
autoload :Base, 'qa/service/cluster_provider/base'
@@ -389,6 +403,13 @@ module QA
autoload :Minikube, 'qa/service/cluster_provider/minikube'
autoload :K3d, 'qa/service/cluster_provider/k3d'
end
+
+ module DockerRun
+ autoload :Base, 'qa/service/docker_run/base'
+ autoload :LDAP, 'qa/service/docker_run/ldap'
+ autoload :NodeJs, 'qa/service/docker_run/node_js'
+ autoload :GitlabRunner, 'qa/service/docker_run/gitlab_runner'
+ end
end
##
@@ -421,6 +442,10 @@ module QA
autoload :Login, 'qa/vendor/github/page/login'
end
end
+
+ module OnePassword
+ autoload :CLI, 'qa/vendor/one_password/cli'
+ end
end
# Classes that provide support to other parts of the framework.
@@ -430,6 +455,7 @@ module QA
autoload :Logging, 'qa/support/page/logging'
end
autoload :Api, 'qa/support/api'
+ autoload :Dates, 'qa/support/dates'
autoload :Waiter, 'qa/support/waiter'
autoload :Retrier, 'qa/support/retrier'
end
diff --git a/qa/qa/ce/knapsack/nightly_master_report.json b/qa/qa/ce/knapsack/nightly_master_report.json
deleted file mode 100644
index 08694f706de..00000000000
--- a/qa/qa/ce/knapsack/nightly_master_report.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "qa/specs/features/api/1_manage/users_spec.rb": 0.6089541912078857,
- "qa/specs/features/api/3_create/repository/files_spec.rb": 5.015859127044678,
- "qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb": 1.0199065208435059,
- "qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb": 33.54091453552246,
- "qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb": 3.438166856765747,
- "qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb": 20.58603596687317,
- "qa/specs/features/browser_ui/1_manage/login/register_spec.rb": 22.320587396621704,
- "qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb": 8.490083694458008,
- "qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb": 10.214765310287476,
- "qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb": 100.28881478309631,
- "qa/specs/features/browser_ui/1_manage/project/view_project_activity_spec.rb": 7.882027864456177,
- "qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb": 13.739388942718506,
- "qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb": 13.403101205825806,
- "qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb": 10.989444971084595,
- "qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb": 10.811973810195923,
- "qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb": 12.63524317741394,
- "qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb": 11.280649185180664,
- "qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb": 41.76726770401001,
- "qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb": 32.5517954826355,
- "qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb": 46.54227638244629,
- "qa/specs/features/browser_ui/3_create/merge_request/squash_merge_request_spec.rb": 27.943300485610962,
- "qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb": 3.705310821533203,
- "qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb": 40.09336972236633,
- "qa/specs/features/browser_ui/3_create/repository/add_list_delete_branches_spec.rb": 31.49540114402771,
- "qa/specs/features/browser_ui/3_create/repository/add_ssh_key_spec.rb": 16.18057894706726,
- "qa/specs/features/browser_ui/3_create/repository/clone_spec.rb": 0.7397980690002441,
- "qa/specs/features/browser_ui/3_create/repository/create_edit_delete_file_via_web_spec.rb": 18.047621726989746,
- "qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb": 9.48607873916626,
- "qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb": 23.710937023162842,
- "qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb": 19.459370374679565,
- "qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb": 7.730542182922363,
- "qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb": 29.76174831390381,
- "qa/specs/features/browser_ui/3_create/repository/use_ssh_key_spec.rb": 22.800872802734375,
- "qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb": 6.731764793395996,
- "qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb": 5.812374591827393,
- "qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb": 25.460349321365356,
- "qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb": 17.273863554000854,
- "qa/specs/features/browser_ui/4_verify/ci_variable/add_ci_variable_spec.rb": 8.31815505027771,
- "qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb": 18.679633855819702,
- "qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb": 15.342933893203735,
- "qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb": 92.46774697303772,
- "qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb": 20.252174615859985,
- "qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb": 8.281434059143066,
- "qa/specs/features/browser_ui/non_devops/performance_bar_spec.rb": 8.810423135757446
-} \ No newline at end of file
diff --git a/qa/qa/fixtures/ldap/admin/1_add_nodes.ldif b/qa/qa/fixtures/ldap/admin/1_add_nodes.ldif
new file mode 100644
index 00000000000..1476f53a0b9
--- /dev/null
+++ b/qa/qa/fixtures/ldap/admin/1_add_nodes.ldif
@@ -0,0 +1,7 @@
+dn: ou=Global Groups,dc=example,dc=org
+objectClass: organizationalUnit
+ou: Global Groups
+
+dn: ou=People,ou=Global Groups,dc=example,dc=org
+objectClass: organizationalUnit
+ou: People
diff --git a/qa/qa/fixtures/ldap/admin/2_add_users.ldif b/qa/qa/fixtures/ldap/admin/2_add_users.ldif
new file mode 100644
index 00000000000..00ba2fe8397
--- /dev/null
+++ b/qa/qa/fixtures/ldap/admin/2_add_users.ldif
@@ -0,0 +1,63 @@
+
+# 1. hruser1
+
+dn: uid=hruser1,ou=People,ou=Global Groups,dc=example,dc=org
+cn: HR User 1
+givenName: HR
+sn: User1
+uid: hruser1
+uidNumber: 5000
+gidNumber: 10000
+homeDirectory: /home/hruser1
+mail: hruser1@example.org
+objectClass: top
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+loginShell: /bin/bash
+# hashed value for 'password'
+userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
+
+# 2. adminuser1
+
+dn: uid=adminuser1,ou=People,ou=Global Groups,dc=example,dc=org
+cn: Admin User 1
+givenName: Admin
+sn: User1
+uid: adminuser1
+uidNumber: 5009
+gidNumber: 10009
+homeDirectory: /home/adminuser1
+mail: adminuser1@example.org
+objectClass: top
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+loginShell: /bin/bash
+# hashed value for 'password'
+userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
+
+# 2. adminuser2
+
+dn: uid=adminuser2,ou=People,ou=Global Groups,dc=example,dc=org
+cn: Admin User 2
+givenName: Admin
+sn: User1
+uid: adminuser2
+uidNumber: 5010
+gidNumber: 10010
+homeDirectory: /home/adminuser2
+mail: adminuser2@example.org
+objectClass: top
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+loginShell: /bin/bash
+# hashed value for 'password'
+userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
diff --git a/qa/qa/fixtures/ldap/admin/3_add_groups.ldif b/qa/qa/fixtures/ldap/admin/3_add_groups.ldif
new file mode 100644
index 00000000000..db8b15bc9ea
--- /dev/null
+++ b/qa/qa/fixtures/ldap/admin/3_add_groups.ldif
@@ -0,0 +1,16 @@
+# 1. Human Resources
+
+dn: cn=Human Resources,ou=Global Groups,dc=example,dc=org
+objectClass: groupofnames
+cn: Human Resources
+description: Human Resources
+member: uid=hruser1,ou=People,ou=Global Groups,dc=example,dc=org
+
+# 2. Admin
+
+dn: cn=AdminGroup,ou=Global Groups,dc=example,dc=org
+objectClass: groupofnames
+cn: AdminGroup
+description: Human Resources
+member: uid=adminuser1,ou=People,ou=Global Groups,dc=example,dc=org
+member: uid=adminuser2,ou=People,ou=Global Groups,dc=example,dc=org
diff --git a/qa/qa/fixtures/ldap/non_admin/1_add_nodes.ldif b/qa/qa/fixtures/ldap/non_admin/1_add_nodes.ldif
new file mode 100644
index 00000000000..1476f53a0b9
--- /dev/null
+++ b/qa/qa/fixtures/ldap/non_admin/1_add_nodes.ldif
@@ -0,0 +1,7 @@
+dn: ou=Global Groups,dc=example,dc=org
+objectClass: organizationalUnit
+ou: Global Groups
+
+dn: ou=People,ou=Global Groups,dc=example,dc=org
+objectClass: organizationalUnit
+ou: People
diff --git a/qa/qa/fixtures/ldap/non_admin/2_add_users.ldif b/qa/qa/fixtures/ldap/non_admin/2_add_users.ldif
new file mode 100644
index 00000000000..cf8accc97e1
--- /dev/null
+++ b/qa/qa/fixtures/ldap/non_admin/2_add_users.ldif
@@ -0,0 +1,61 @@
+
+# 1. Human Resources
+
+dn: uid=hruser1,ou=People,ou=Global Groups,dc=example,dc=org
+cn: HR User 1
+givenName: HR
+sn: User1
+uid: hruser1
+uidNumber: 5000
+gidNumber: 10000
+homeDirectory: /home/hruser1
+mail: hruser1@example.org
+objectClass: top
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+loginShell: /bin/bash
+# hashed value for 'password'
+userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
+
+# 2. Admin
+
+dn: uid=adminuser1,ou=People,ou=Global Groups,dc=example,dc=org
+cn: Admin User 1
+givenName: Admin
+sn: User1
+uid: adminuser1
+uidNumber: 5009
+gidNumber: 10009
+homeDirectory: /home/adminuser1
+mail: adminuser1@example.org
+objectClass: top
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+loginShell: /bin/bash
+# hashed value for 'password'
+userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
+
+dn: uid=adminuser2,ou=People,ou=Global Groups,dc=example,dc=org
+cn: Admin User 2
+givenName: Admin
+sn: User1
+uid: adminuser2
+uidNumber: 5010
+gidNumber: 10010
+homeDirectory: /home/adminuser2
+mail: adminuser2@example.org
+objectClass: top
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+loginShell: /bin/bash
+# hashed value for 'password'
+userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
diff --git a/qa/qa/fixtures/ldap/non_admin/3_add_groups.ldif b/qa/qa/fixtures/ldap/non_admin/3_add_groups.ldif
new file mode 100644
index 00000000000..65487a3b2c6
--- /dev/null
+++ b/qa/qa/fixtures/ldap/non_admin/3_add_groups.ldif
@@ -0,0 +1,16 @@
+# 1. Human Resources
+
+dn: cn=Human Resources,ou=Global Groups,dc=example,dc=org
+objectClass: groupofnames
+cn: Human Resources
+description: Human Resources
+member: uid=hruser1,ou=People,ou=Global Groups,dc=example,dc=org
+member: uid=adminuser1,ou=People,ou=Global Groups,dc=example,dc=org
+
+# 2. Admin
+
+dn: cn=AdminGroup,ou=Global Groups,dc=example,dc=org
+objectClass: groupofnames
+cn: AdminGroup
+description: Human Resources
+member: uid=adminuser2,ou=People,ou=Global Groups,dc=example,dc=org
diff --git a/qa/qa/git/repository.rb b/qa/qa/git/repository.rb
index 24b9fc67dd9..f56fab63198 100644
--- a/qa/qa/git/repository.rb
+++ b/qa/qa/git/repository.rb
@@ -14,7 +14,7 @@ module QA
include Scenario::Actable
RepositoryCommandError = Class.new(StandardError)
- attr_writer :use_lfs
+ attr_writer :use_lfs, :gpg_key_id
attr_accessor :env_vars
InvalidCredentialsError = Class.new(RuntimeError)
@@ -25,6 +25,7 @@ module QA
# .netrc can be utilised
self.env_vars = [%Q{HOME="#{tmp_home_dir}"}]
@use_lfs = false
+ @gpg_key_id = nil
end
def self.perform(*args)
@@ -75,7 +76,7 @@ module QA
end
def configure_identity(name, email)
- run(%Q{git config user.name #{name}})
+ run(%Q{git config user.name "#{name}"})
run(%Q{git config user.email #{email}})
end
@@ -99,10 +100,18 @@ module QA
git_lfs_track_result.to_s + git_add_result.to_s
end
+ def delete_tag(tag_name)
+ run(%Q{git push origin --delete #{tag_name}}).to_s
+ end
+
def commit(message)
run(%Q{git commit -m "#{message}"}).to_s
end
+ def commit_with_gpg(message)
+ run(%Q{git config user.signingkey #{@gpg_key_id} && git config gpg.program $(which gpg) && git commit -S -m "#{message}"}).to_s
+ end
+
def push_changes(branch = 'master')
run("git push #{uri} #{branch}").to_s
end
diff --git a/qa/qa/page/admin/menu.rb b/qa/qa/page/admin/menu.rb
index 5a18ebd7af8..2d1af78046d 100644
--- a/qa/qa/page/admin/menu.rb
+++ b/qa/qa/page/admin/menu.rb
@@ -6,12 +6,16 @@ module QA
class Menu < Page::Base
view 'app/views/layouts/nav/sidebar/_admin.html.haml' do
element :admin_sidebar
- element :admin_sidebar_submenu
+ element :admin_sidebar_settings_submenu
element :admin_settings_item
element :admin_settings_repository_item
element :admin_settings_general_item
element :admin_settings_metrics_and_profiling_item
element :admin_settings_preferences_link
+ element :admin_monitoring_link
+ element :admin_sidebar_monitoring_submenu_content
+ element :admin_sidebar_overview_submenu_content
+ element :users_overview_link
end
view 'app/views/layouts/nav/sidebar/_admin.html.haml' do
@@ -19,59 +23,65 @@ module QA
end
def go_to_preferences_settings
- hover_settings do
- within_submenu do
+ hover_element(:admin_settings_item) do
+ within_submenu(:admin_sidebar_settings_submenu) do
click_element :admin_settings_preferences_link
end
end
end
def go_to_repository_settings
- hover_settings do
- within_submenu do
+ hover_element(:admin_settings_item) do
+ within_submenu(:admin_sidebar_settings_submenu) do
click_element :admin_settings_repository_item
end
end
end
def go_to_integration_settings
- hover_settings do
- within_submenu do
+ hover_element(:admin_settings_item) do
+ within_submenu(:admin_sidebar_settings_submenu) do
click_element :integration_settings_link
end
end
end
def go_to_general_settings
- hover_settings do
- within_submenu do
+ hover_element(:admin_settings_item) do
+ within_submenu(:admin_sidebar_settings_submenu) do
click_element :admin_settings_general_item
end
end
end
def go_to_metrics_and_profiling_settings
- hover_settings do
- within_submenu do
+ hover_element(:admin_settings_item) do
+ within_submenu(:admin_sidebar_settings_submenu) do
click_element :admin_settings_metrics_and_profiling_item
end
end
end
def go_to_network_settings
- hover_settings do
- within_submenu do
+ hover_element(:admin_settings_item) do
+ within_submenu(:admin_sidebar_settings_submenu) do
click_element :admin_settings_network_item
end
end
end
+ def go_to_users_overview
+ within_submenu(:admin_sidebar_overview_submenu_content) do
+ click_element :users_overview_link
+ end
+ end
+
private
- def hover_settings
+ def hover_element(element)
within_sidebar do
- scroll_to_element(:admin_settings_item)
- find_element(:admin_settings_item).hover
+ scroll_to_element(element)
+ find_element(element).hover
yield
end
@@ -83,8 +93,8 @@ module QA
end
end
- def within_submenu
- within_element(:admin_sidebar_submenu) do
+ def within_submenu(element)
+ within_element(element) do
yield
end
end
diff --git a/qa/qa/page/admin/overview/users/index.rb b/qa/qa/page/admin/overview/users/index.rb
new file mode 100644
index 00000000000..e374c1bf281
--- /dev/null
+++ b/qa/qa/page/admin/overview/users/index.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Admin
+ module Overview
+ module Users
+ class Index < QA::Page::Base
+ view 'app/views/admin/users/index.html.haml' do
+ element :user_search_field
+ end
+
+ view 'app/views/admin/users/_user.html.haml' do
+ element :user_row_content
+ end
+
+ view 'app/views/admin/users/_user_detail.html.haml' do
+ element :username_link
+ end
+
+ def search_user(username)
+ find_element(:user_search_field).set(username).send_keys(:return)
+ end
+
+ def click_user(username)
+ within_element(:user_row_content, text: username) do
+ click_element(:username_link)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/admin/overview/users/show.rb b/qa/qa/page/admin/overview/users/show.rb
new file mode 100644
index 00000000000..11ea7bcabc8
--- /dev/null
+++ b/qa/qa/page/admin/overview/users/show.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Admin
+ module Overview
+ module Users
+ class Show < QA::Page::Base
+ view 'app/views/admin/users/_head.html.haml' do
+ element :impersonate_user_link
+ end
+
+ def click_impersonate_user
+ click_element(:impersonate_user_link)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb
index 45496c6b245..71df90f2f42 100644
--- a/qa/qa/page/base.rb
+++ b/qa/qa/page/base.rb
@@ -15,6 +15,10 @@ module QA
def_delegators :evaluator, :view, :views
+ def assert_no_element(name)
+ assert_no_selector(element_selector_css(name))
+ end
+
def refresh
page.refresh
end
@@ -90,8 +94,8 @@ module QA
end
# replace with (..., page = self.class)
- def click_element(name, page = nil)
- find_element(name).click
+ def click_element(name, page = nil, text: nil)
+ find_element(name, text: text).click
page.validate_elements_present! if page
end
@@ -102,9 +106,9 @@ module QA
def select_element(name, value)
element = find_element(name)
- return if element.text.downcase.to_s == value.to_s
+ return if element.text == value
- element.select value.to_s.capitalize
+ element.select value
end
def has_element?(name, text: nil, wait: Capybara.default_max_wait_time)
@@ -127,6 +131,10 @@ module QA
has_no_css?('.fa-spinner', wait: Capybara.default_max_wait_time)
end
+ def finished_loading_block?
+ has_no_css?('.fa-spinner.block-loading', wait: Capybara.default_max_wait_time)
+ end
+
def wait_for_animated_element(name)
# It would be ideal if we could detect when the animation is complete
# but in some cases there's nothing we can easily access via capybara
@@ -143,6 +151,11 @@ module QA
end
def within_element_by_index(name, index)
+ # Finding all elements can be flaky if the elements don't all load
+ # immediately. So we wait for any to appear before trying to find a
+ # specific one.
+ has_element?(name)
+
page.within all_elements(name)[index] do
yield
end
diff --git a/qa/qa/page/component/ci_badge_link.rb b/qa/qa/page/component/ci_badge_link.rb
new file mode 100644
index 00000000000..aad8dc1d3df
--- /dev/null
+++ b/qa/qa/page/component/ci_badge_link.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module CiBadgeLink
+ COMPLETED_STATUSES = %w[passed failed canceled blocked skipped manual].freeze # excludes created, pending, running
+ PASSED_STATUS = 'passed'.freeze
+
+ def self.included(base)
+ base.view 'app/assets/javascripts/vue_shared/components/ci_badge_link.vue' do
+ element :status_badge
+ end
+ end
+
+ def status_badge
+ find_element(:status_badge).text
+ end
+
+ def successful?(timeout: 60)
+ raise "Timed out waiting for the status to be a valid completed state" unless completed?(timeout: timeout)
+
+ status_badge == PASSED_STATUS
+ end
+
+ private
+
+ def completed?(timeout: 60)
+ wait(reload: false, max: timeout) do
+ COMPLETED_STATUSES.include?(status_badge)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/component/note.rb b/qa/qa/page/component/note.rb
index 34fde045091..c85fa690d6c 100644
--- a/qa/qa/page/component/note.rb
+++ b/qa/qa/page/component/note.rb
@@ -10,6 +10,10 @@ module QA
element :discussion_option
end
+ base.view 'app/assets/javascripts/notes/components/noteable_discussion.vue' do
+ element :discussion_content
+ end
+
base.view 'app/assets/javascripts/notes/components/note_actions.vue' do
element :note_edit_button
end
@@ -21,6 +25,7 @@ module QA
base.view 'app/assets/javascripts/notes/components/discussion_actions.vue' do
element :discussion_reply_tab
+ element :resolve_discussion_button
end
base.view 'app/assets/javascripts/notes/components/toggle_replies_widget.vue' do
@@ -54,6 +59,12 @@ module QA
click_element :reply_comment_button
end
+ def resolve_discussion_at_index(index)
+ within_element_by_index(:discussion_content, index) do
+ click_element :resolve_discussion_button
+ end
+ end
+
def collapse_replies
click_element :collapse_replies
end
diff --git a/qa/qa/page/group/new.rb b/qa/qa/page/group/new.rb
index 9e37d14fbf3..e01b8754d55 100644
--- a/qa/qa/page/group/new.rb
+++ b/qa/qa/page/group/new.rb
@@ -11,7 +11,7 @@ module QA
end
view 'app/views/groups/new.html.haml' do
- element :create_group_button, "submit 'Create group'" # rubocop:disable QA/ElementWithPattern
+ element :create_group_button, "submit _('Create group')" # rubocop:disable QA/ElementWithPattern
element :visibility_radios, 'visibility_level:' # rubocop:disable QA/ElementWithPattern
end
diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb
index ca93663dba2..6e266e26d78 100644
--- a/qa/qa/page/main/login.rb
+++ b/qa/qa/page/main/login.rb
@@ -42,7 +42,7 @@ module QA
element :login_page, required: true
end
- def sign_in_using_credentials(user = nil)
+ def sign_in_using_credentials(user: nil, skip_page_validation: false)
# Don't try to log-in if we're already logged-in
return if Page::Main::Menu.perform(&:signed_in?)
@@ -52,9 +52,9 @@ module QA
raise NotImplementedError if Runtime::User.ldap_user? && user&.credentials_given?
if Runtime::User.ldap_user?
- sign_in_using_ldap_credentials(user || Runtime::User)
+ sign_in_using_ldap_credentials(user: user || Runtime::User)
else
- sign_in_using_gitlab_credentials(user || Runtime::User)
+ sign_in_using_gitlab_credentials(user: user || Runtime::User, skip_page_validation: skip_page_validation)
end
end
end
@@ -68,13 +68,13 @@ module QA
using_wait_time 0 do
set_initial_password_if_present
- sign_in_using_gitlab_credentials(admin)
+ sign_in_using_gitlab_credentials(user: admin)
end
Page::Main::Menu.perform(&:has_personal_area?)
end
- def sign_in_using_ldap_credentials(user)
+ def sign_in_using_ldap_credentials(user:)
Page::Main::Menu.perform(&:sign_out_if_signed_in)
using_wait_time 0 do
@@ -87,7 +87,7 @@ module QA
click_element :sign_in_button
end
- Page::Main::Menu.perform(&:has_personal_area?)
+ Page::Main::Menu.perform(&:signed_in?)
end
def self.path
@@ -148,18 +148,18 @@ module QA
def sign_out_and_sign_in_as(user:)
Menu.perform(&:sign_out_if_signed_in)
has_sign_in_tab?
- sign_in_using_credentials(user)
+ sign_in_using_credentials(user: user)
end
private
- def sign_in_using_gitlab_credentials(user)
+ def sign_in_using_gitlab_credentials(user:, skip_page_validation: false)
switch_to_sign_in_tab if has_sign_in_tab?
switch_to_standard_tab if has_standard_tab?
fill_element :login_field, user.username
fill_element :password_field, user.password
- click_element :sign_in_button, Page::Main::Menu
+ click_element :sign_in_button, !skip_page_validation && Page::Main::Menu
end
def set_initial_password_if_present
diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb
index 751b67d7695..024f56db8e2 100644
--- a/qa/qa/page/main/menu.rb
+++ b/qa/qa/page/main/menu.rb
@@ -13,12 +13,14 @@ module QA
element :navbar, required: true
element :user_avatar, required: true
element :user_menu, required: true
+ element :stop_impersonation_link
end
view 'app/views/layouts/nav/_dashboard.html.haml' do
element :admin_area_link
element :projects_dropdown, required: true
element :groups_dropdown, required: true
+ element :more_dropdown, required: true
element :snippets_link
end
@@ -51,6 +53,13 @@ module QA
end
end
+ def go_to_snippets
+ within_top_menu do
+ click_element :more_dropdown
+ click_element :snippets_link
+ end
+ end
+
def click_admin_area
within_top_menu { click_element :admin_area_link }
end
@@ -79,10 +88,6 @@ module QA
end
end
- def click_snippets_link
- click_element :snippets_link
- end
-
def search_for(term)
fill_element :search_term_field, "#{term}\n"
end
@@ -95,6 +100,14 @@ module QA
has_element?(:admin_area_link, wait: wait)
end
+ def has_no_admin_area_link?(wait: Capybara.default_max_wait_time)
+ has_no_element?(:admin_area_link, wait: wait)
+ end
+
+ def click_stop_impersonation_link
+ click_element(:stop_impersonation_link)
+ end
+
private
def within_top_menu
diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb
index 6e550805f9f..14b8c420b16 100644
--- a/qa/qa/page/merge_request/show.rb
+++ b/qa/qa/page/merge_request/show.rb
@@ -6,6 +6,17 @@ module QA
class Show < Page::Base
include Page::Component::Note
+ view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue' do
+ element :dropdown_toggle
+ element :download_email_patches
+ element :download_plain_diff
+ end
+
+ view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue' do
+ element :merge_request_pipeline_info_content
+ element :pipeline_link
+ end
+
view 'app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue' do
element :merge_button
element :fast_forward_message, 'Fast-forward merge without a merge commit' # rubocop:disable QA/ElementWithPattern
@@ -27,12 +38,6 @@ module QA
element :squash_checkbox
end
- view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue' do
- element :dropdown_toggle
- element :download_email_patches
- element :download_plain_diff
- end
-
view 'app/views/projects/merge_requests/show.html.haml' do
element :notes_tab
element :diffs_tab
@@ -55,6 +60,18 @@ module QA
element :edit_button
end
+ def click_discussions_tab
+ click_element :notes_tab
+ end
+
+ def click_diffs_tab
+ click_element :diffs_tab
+ end
+
+ def click_pipeline_link
+ click_element :pipeline_link
+ end
+
def fast_forward_possible?
has_no_text?('Fast-forward merge is not possible')
end
@@ -111,6 +128,11 @@ module QA
end
end
+ def has_pipeline_status?(text)
+ # Pipelines can be slow, so we wait a bit longer than the usual 10 seconds
+ has_element?(:merge_request_pipeline_info_content, text: text, wait: 30)
+ end
+
def has_title?(title)
has_element?(:title, text: title)
end
@@ -120,17 +142,7 @@ module QA
end
def try_to_merge!
- # The merge button is disabled on load
- wait do
- has_element?(:merge_button)
- end
-
- # The merge button is enabled via JS
- wait(reload: false) do
- !find_element(:merge_button).disabled?
- end
-
- merge_immediately
+ merge_immediately if ready_to_merge?
end
def merge!
@@ -157,14 +169,6 @@ module QA
click_element :squash_checkbox
end
- def click_discussions_tab
- click_element :notes_tab
- end
-
- def click_diffs_tab
- click_element :diffs_tab
- end
-
def add_comment_to_diff(text)
wait(interval: 5) do
has_text?("No newline at end of file")
@@ -178,6 +182,18 @@ module QA
click_element :edit_button
end
+ def ready_to_merge?
+ # The merge button is disabled on load
+ wait do
+ has_element?(:merge_button)
+ end
+
+ # The merge button is enabled via JS
+ wait(reload: false) do
+ !find_element(:merge_button).disabled?
+ end
+ end
+
def view_email_patches
click_element :dropdown_toggle
visit_link_in_element(:download_email_patches)
diff --git a/qa/qa/page/profile/emails.rb b/qa/qa/page/profile/emails.rb
new file mode 100644
index 00000000000..c20bc6a5c57
--- /dev/null
+++ b/qa/qa/page/profile/emails.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Profile
+ class Emails < Page::Base
+ view 'app/views/profiles/emails/index.html.haml' do
+ element :email_address_field
+ element :add_email_address_button
+ element :email_row_content
+ element :delete_email_link
+ end
+
+ def add_email_address(email_address)
+ find_element(:email_address_field).set email_address
+ click_element(:add_email_address_button)
+ end
+
+ def delete_email_address(email_address)
+ page.accept_alert do
+ within_element(:email_row_content, text: email_address) do
+ click_element(:delete_email_link)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/profile/menu.rb b/qa/qa/page/profile/menu.rb
index 99a795a23ef..e7baaf3d40a 100644
--- a/qa/qa/page/profile/menu.rb
+++ b/qa/qa/page/profile/menu.rb
@@ -9,6 +9,8 @@ module QA
element :access_token_title, 'Access Tokens' # rubocop:disable QA/ElementWithPattern
element :top_level_items, '.sidebar-top-level-items' # rubocop:disable QA/ElementWithPattern
element :ssh_keys, 'SSH Keys' # rubocop:disable QA/ElementWithPattern
+ element :profile_emails_link
+ element :profile_password_link
end
def click_access_tokens
@@ -23,6 +25,18 @@ module QA
end
end
+ def click_emails
+ within_sidebar do
+ click_element(:profile_emails_link)
+ end
+ end
+
+ def click_password
+ within_sidebar do
+ click_element(:profile_password_link)
+ end
+ end
+
private
def within_sidebar
diff --git a/qa/qa/page/profile/password.rb b/qa/qa/page/profile/password.rb
new file mode 100644
index 00000000000..ce062f39edb
--- /dev/null
+++ b/qa/qa/page/profile/password.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Profile
+ class Password < Page::Base
+ view 'app/views/profiles/passwords/edit.html.haml' do
+ element :current_password_field
+ element :new_password_field
+ element :confirm_password_field
+ element :save_password_button
+ end
+
+ def update_password(new_password, current_password)
+ find_element(:current_password_field).set current_password
+ find_element(:new_password_field).set new_password
+ find_element(:confirm_password_field).set new_password
+ click_element(:save_password_button)
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/project/issue/index.rb b/qa/qa/page/project/issue/index.rb
index f74366f6967..befee25b37a 100644
--- a/qa/qa/page/project/issue/index.rb
+++ b/qa/qa/page/project/issue/index.rb
@@ -5,14 +5,30 @@ module QA
module Project
module Issue
class Index < Page::Base
+ view 'app/helpers/projects_helper.rb' do
+ element :assignee_link
+ end
+
view 'app/views/projects/issues/_issue.html.haml' do
element :issue_link, 'link_to issue.title' # rubocop:disable QA/ElementWithPattern
end
+ view 'app/views/shared/issuable/_assignees.html.haml' do
+ element :avatar_counter
+ end
+
view 'app/views/shared/issuable/_nav.html.haml' do
element :closed_issues_link
end
+ def assignee_link_count
+ all_elements(:assignee_link).count
+ end
+
+ def avatar_counter
+ find_element(:avatar_counter)
+ end
+
def click_issue_link(title)
click_link(title)
end
diff --git a/qa/qa/page/project/issue/show.rb b/qa/qa/page/project/issue/show.rb
index e5e26b1864b..d2732eb7dd2 100644
--- a/qa/qa/page/project/issue/show.rb
+++ b/qa/qa/page/project/issue/show.rb
@@ -22,30 +22,68 @@ module QA
element :noteable_note_item
end
+ view 'app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue' do
+ element :avatar_image
+ end
+
+ view 'app/assets/javascripts/sidebar/components/assignees/assignee_title.vue' do
+ element :assignee_edit_link
+ element :assignee_title
+ end
+
+ view 'app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue' do
+ element :more_assignees_link
+ end
+
+ view 'app/assets/javascripts/vue_shared/components/issue/related_issuable_item.vue' do
+ element :remove_related_issue_button
+ end
+
view 'app/helpers/dropdowns_helper.rb' do
element :dropdown_input_field
end
- view 'app/views/shared/notes/_form.html.haml' do
- element :new_note_form, 'new-note' # rubocop:disable QA/ElementWithPattern
- element :new_note_form, 'attr: :note' # rubocop:disable QA/ElementWithPattern
+ view 'app/views/shared/issuable/_close_reopen_button.html.haml' do
+ element :reopen_issue_button
end
view 'app/views/shared/issuable/_sidebar.html.haml' do
+ element :assignee_block
element :labels_block
element :edit_link_labels
element :dropdown_menu_labels
element :milestone_link
end
- view 'app/views/shared/issuable/_close_reopen_button.html.haml' do
- element :reopen_issue_button
+ view 'app/views/shared/notes/_form.html.haml' do
+ element :new_note_form, 'new-note' # rubocop:disable QA/ElementWithPattern
+ element :new_note_form, 'attr: :note' # rubocop:disable QA/ElementWithPattern
+ end
+
+ def assign(user)
+ click_element(:assignee_edit_link)
+ select_user(user.username)
+ click_body
+ end
+
+ def assignee_title
+ find_element(:assignee_title)
+ end
+
+ def avatar_image_count
+ wait_assignees_block_finish_loading do
+ all_elements(:avatar_image).count
+ end
end
def click_milestone_link
click_element(:milestone_link)
end
+ def click_remove_related_issue_button
+ click_element(:remove_related_issue_button)
+ end
+
# Adds a comment to an issue
# attachment option should be an absolute path
def comment(text, attachment: nil, filter: :all_activities)
@@ -66,6 +104,10 @@ module QA
end
end
+ def more_assignees_link
+ find_element(:more_assignees_link)
+ end
+
def select_all_activities_filter
select_filter_with_text('Show all activity')
end
@@ -103,6 +145,10 @@ module QA
find_element(:labels_block)
end
+ def toggle_more_assignees_link
+ click_element(:more_assignees_link)
+ end
+
private
def select_filter_with_text(text)
@@ -112,6 +158,20 @@ module QA
find_element(:filter_options, text: text).click
end
end
+
+ def select_user(username)
+ find("#{element_selector_css(:assignee_block)} input").set(username)
+ find('.dropdown-menu-user-link', text: "@#{username}").click
+ end
+
+ def wait_assignees_block_finish_loading
+ within_element(:assignee_block) do
+ wait(reload: false, max: 10, interval: 1) do
+ finished_loading_block?
+ yield
+ end
+ end
+ end
end
end
end
diff --git a/qa/qa/page/project/job/show.rb b/qa/qa/page/project/job/show.rb
index 5853f487f0b..cf847710024 100644
--- a/qa/qa/page/project/job/show.rb
+++ b/qa/qa/page/project/job/show.rb
@@ -3,17 +3,12 @@
module QA::Page
module Project::Job
class Show < QA::Page::Base
- COMPLETED_STATUSES = %w[passed failed canceled blocked skipped manual].freeze # excludes created, pending, running
- PASSED_STATUS = 'passed'.freeze
+ include Component::CiBadgeLink
view 'app/assets/javascripts/jobs/components/job_log.vue' do
element :build_trace
end
- view 'app/assets/javascripts/vue_shared/components/ci_badge_link.vue' do
- element :status_badge
- end
-
view 'app/assets/javascripts/jobs/components/stages_dropdown.vue' do
element :pipeline_path
end
@@ -26,8 +21,16 @@ module QA::Page
end
# Reminder: You may wish to wait for a particular job status before checking output
- def output
- find_element(:build_trace).text
+ def output(wait: 5)
+ result = ''
+
+ wait(reload: false, max: wait, interval: 1) do
+ result = find_element(:build_trace).text
+
+ !result.empty?
+ end
+
+ result
end
private
@@ -37,16 +40,6 @@ module QA::Page
has_element?(:build_trace, wait: 1)
end
end
-
- def completed?(timeout: 60)
- wait(reload: false, max: timeout) do
- COMPLETED_STATUSES.include?(status_badge)
- end
- end
-
- def status_badge
- find_element(:status_badge).text
- end
end
end
end
diff --git a/qa/qa/page/project/milestone/index.rb b/qa/qa/page/project/milestone/index.rb
index 8ad7689ce70..6895c44f72f 100644
--- a/qa/qa/page/project/milestone/index.rb
+++ b/qa/qa/page/project/milestone/index.rb
@@ -17,5 +17,3 @@ module QA
end
end
end
-
-QA::Page::Project::Milestone::Index.prepend_if_ee('QA::EE::Page::Project::Milestone::Index')
diff --git a/qa/qa/page/project/pipeline/show.rb b/qa/qa/page/project/pipeline/show.rb
index 3dca47a57e9..fd29c5eacdc 100644
--- a/qa/qa/page/project/pipeline/show.rb
+++ b/qa/qa/page/project/pipeline/show.rb
@@ -3,6 +3,8 @@
module QA::Page
module Project::Pipeline
class Show < QA::Page::Base
+ include Component::CiBadgeLink
+
view 'app/assets/javascripts/vue_shared/components/header_ci_component.vue' do
element :pipeline_header, /header class.*ci-header-container.*/ # rubocop:disable QA/ElementWithPattern
end
@@ -16,6 +18,10 @@ module QA::Page
element :job_link
end
+ view 'app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue' do
+ element :linked_pipeline_button
+ end
+
view 'app/assets/javascripts/vue_shared/components/ci_icon.vue' do
element :status_icon, 'ci-status-icon-${status}' # rubocop:disable QA/ElementWithPattern
end
@@ -38,6 +44,14 @@ module QA::Page
end
end
+ def has_job?(job_name)
+ has_element?(:job_link, text: job_name)
+ end
+
+ def has_no_job?(job_name)
+ has_no_element?(:job_link, text: job_name)
+ end
+
def has_tag?(tag_name)
within_element(:pipeline_badges) do
has_selector?('.badge', text: tag_name)
@@ -45,7 +59,11 @@ module QA::Page
end
def click_job(job_name)
- find_element(:job_link, text: job_name).click
+ click_element(:job_link, text: job_name)
+ end
+
+ def click_linked_job(project_name)
+ click_element(:linked_pipeline_button, text: /#{project_name}/)
end
def click_on_first_job
diff --git a/qa/qa/page/project/settings/main.rb b/qa/qa/page/project/settings/main.rb
index 6b26c82a46f..18d55598d90 100644
--- a/qa/qa/page/project/settings/main.rb
+++ b/qa/qa/page/project/settings/main.rb
@@ -11,6 +11,7 @@ module QA
view 'app/views/projects/edit.html.haml' do
element :advanced_settings
+ element :merge_request_settings
end
view 'app/views/projects/settings/_general.html.haml' do
@@ -41,6 +42,12 @@ module QA
end
end
+ def expand_merge_requests_settings(&block)
+ expand_section(:merge_request_settings) do
+ MergeRequest.perform(&block)
+ end
+ end
+
def expand_visibility_project_features_permissions(&block)
expand_section(:visibility_features_permissions_content) do
VisibilityFeaturesPermissions.perform(&block)
@@ -51,5 +58,3 @@ module QA
end
end
end
-
-QA::Page::Project::Settings::Main.prepend_if_ee('QA::EE::Page::Project::Settings::Main')
diff --git a/qa/qa/page/project/settings/merge_request.rb b/qa/qa/page/project/settings/merge_request.rb
index f92528c4262..7da2c9d168c 100644
--- a/qa/qa/page/project/settings/merge_request.rb
+++ b/qa/qa/page/project/settings/merge_request.rb
@@ -8,7 +8,6 @@ module QA
include Common
view 'app/views/projects/edit.html.haml' do
- element :merge_request_settings
element :save_merge_request_changes
end
@@ -16,14 +15,18 @@ module QA
element :radio_button_merge_ff
end
+ def click_save_changes
+ click_element :save_merge_request_changes
+ end
+
def enable_ff_only
- expand_section(:merge_request_settings) do
- click_element :radio_button_merge_ff
- click_element :save_merge_request_changes
- end
+ click_element :radio_button_merge_ff
+ click_save_changes
end
end
end
end
end
end
+
+QA::Page::Project::Settings::MergeRequest.prepend_if_ee("QA::EE::Page::Project::Settings::MergeRequest")
diff --git a/qa/qa/page/project/settings/mirroring_repositories.rb b/qa/qa/page/project/settings/mirroring_repositories.rb
index 441235afca8..4afe042d9fb 100644
--- a/qa/qa/page/project/settings/mirroring_repositories.rb
+++ b/qa/qa/page/project/settings/mirroring_repositories.rb
@@ -15,7 +15,9 @@ module QA
element :mirror_repository_button
element :mirror_repository_url_cell
element :mirror_last_update_at_cell
+ element :mirror_error_badge
element :mirrored_repository_row
+ element :copy_public_key_button
end
view 'app/views/projects/mirrors/_mirror_repos_form.html.haml' do
@@ -24,6 +26,17 @@ module QA
view 'app/views/shared/_remote_mirror_update_button.html.haml' do
element :update_now_button
+ element :updating_button
+ end
+
+ view 'app/views/projects/mirrors/_ssh_host_keys.html.haml' do
+ element :detect_host_keys
+ element :fingerprints_list
+ end
+
+ view 'app/views/projects/mirrors/_authentication_method.html.haml' do
+ element :authentication_method
+ element :password
end
def repository_url=(value)
@@ -35,17 +48,40 @@ module QA
end
def mirror_direction=(value)
- raise ArgumentError, "Mirror direction must be :push or :pull" unless [:push, :pull].include? value
+ raise ArgumentError, "Mirror direction must be 'Push' or 'Pull'" unless %w(Push Pull).include? value
select_element(:mirror_direction, value)
+
+ # Changing the mirror direction causes the fields below to change,
+ # and that change is animated, so we need to wait for the animation
+ # to complete otherwise changes to those fields could fail
+ wait_for_animated_element :authentication_method
end
def authentication_method=(value)
- raise ArgumentError, "Authentication method must be :password or :none" unless [:password, :none].include? value
+ raise ArgumentError, "Authentication method must be 'SSH public key', 'Password', or 'None'" unless %w(Password None SSH\ public\ key).include? value
select_element(:authentication_method, value)
end
+ def public_key(url)
+ row_index = find_repository_row_index url
+
+ within_element_by_index(:mirrored_repository_row, row_index) do
+ find_element(:copy_public_key_button)['data-clipboard-text']
+ end
+ end
+
+ def detect_host_keys
+ click_element :detect_host_keys
+
+ # The host key detection process is interrupted if we navigate away
+ # from the page before the fingerprint appears.
+ wait(max: 5) do
+ find_element(:fingerprints_list).has_text? /.*/
+ end
+ end
+
def mirror_repository
click_element :mirror_repository_button
end
@@ -54,7 +90,9 @@ module QA
row_index = find_repository_row_index url
within_element_by_index(:mirrored_repository_row, row_index) do
- click_element :update_now_button
+ # When a repository is first mirrored, the update process might
+ # already be started, so the button is already "clicked"
+ click_element :update_now_button unless has_element? :updating_button
end
# Wait a few seconds for the sync to occur and then refresh the page
@@ -72,16 +110,19 @@ module QA
# Fail early if the page still shows that there has been no update
within_element_by_index(:mirrored_repository_row, row_index) do
find_element(:mirror_last_update_at_cell, wait: 0).assert_no_text('Never')
+ assert_no_element(:mirror_error_badge)
end
end
private
def find_repository_row_index(target_url)
- all_elements(:mirror_repository_url_cell).index do |url|
- # The url might be a sanitized url but the target_url won't be so
- # we compare just the paths instead of the full url
- URI.parse(url.text).path == target_url.path
+ wait(max: 5, reload: false) do
+ all_elements(:mirror_repository_url_cell).index do |url|
+ # The url might be a sanitized url but the target_url won't be so
+ # we compare just the paths instead of the full url
+ URI.parse(url.text).path == target_url.path
+ end
end
end
end
diff --git a/qa/qa/page/project/settings/repository.rb b/qa/qa/page/project/settings/repository.rb
index 437a945aceb..58ed37870b7 100644
--- a/qa/qa/page/project/settings/repository.rb
+++ b/qa/qa/page/project/settings/repository.rb
@@ -16,7 +16,7 @@ module QA
end
view 'app/views/projects/mirrors/_mirror_repos.html.haml' do
- element :mirroring_repositories_settings
+ element :mirroring_repositories_settings_section
end
def expand_deploy_keys(&block)
@@ -38,7 +38,7 @@ module QA
end
def expand_mirroring_repositories(&block)
- expand_section(:mirroring_repositories_settings) do
+ expand_section(:mirroring_repositories_settings_section) do
MirroringRepositories.perform(&block)
end
end
@@ -47,3 +47,5 @@ module QA
end
end
end
+
+QA::Page::Project::Settings::Repository.prepend_if_ee('QA::EE::Page::Project::Settings::Repository')
diff --git a/qa/qa/page/validator.rb b/qa/qa/page/validator.rb
index 9b2d0a1a41d..75e48b5785e 100644
--- a/qa/qa/page/validator.rb
+++ b/qa/qa/page/validator.rb
@@ -17,7 +17,7 @@ module QA
def constants
@consts ||= @module.constants.map do |const|
- @module.const_get(const)
+ @module.const_get(const, false)
end
end
diff --git a/qa/qa/resource/fork.rb b/qa/qa/resource/fork.rb
index 54b0c2d0059..d203e8eb264 100644
--- a/qa/qa/resource/fork.rb
+++ b/qa/qa/resource/fork.rb
@@ -30,7 +30,7 @@ module QA
Page::Main::Menu.perform(&:sign_out)
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.perform do |login|
- login.sign_in_using_credentials(user)
+ login.sign_in_using_credentials(user: user)
end
upstream.project.visit!
diff --git a/qa/qa/resource/issue.rb b/qa/qa/resource/issue.rb
index a894e5c2033..0817a9de06f 100644
--- a/qa/qa/resource/issue.rb
+++ b/qa/qa/resource/issue.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require 'securerandom'
+
module QA
module Resource
class Issue < Base
@@ -13,11 +15,15 @@ module QA
end
attribute :id
+ attribute :iid
+ attribute :assignee_ids
attribute :labels
attribute :title
def initialize
+ @assignee_ids = []
@labels = []
+ @title = "Issue title #{SecureRandom.hex(8)}"
end
def fabricate!
@@ -25,10 +31,10 @@ module QA
Page::Project::Show.perform(&:go_to_new_issue)
- Page::Project::Issue::New.perform do |page| # rubocop:disable QA/AmbiguousPageObjectName
- page.add_title(@title)
- page.add_description(@description)
- page.create_new_issue
+ Page::Project::Issue::New.perform do |new_page|
+ new_page.add_title(@title)
+ new_page.add_description(@description)
+ new_page.create_new_issue
end
end
@@ -42,6 +48,7 @@ module QA
def api_post_body
{
+ assignee_ids: assignee_ids,
labels: labels,
title: title
}.tap do |hash|
diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb
index a0389390c83..caaa766e982 100644
--- a/qa/qa/resource/project.rb
+++ b/qa/qa/resource/project.rb
@@ -88,6 +88,10 @@ module QA
"#{api_get_path}/members"
end
+ def api_runners_path
+ "#{api_get_path}/runners"
+ end
+
def api_post_path
'/projects'
end
@@ -108,6 +112,11 @@ module QA
post_body
end
+ def runners
+ response = get Runtime::API::Request.new(api_client, api_runners_path).url
+ parse_body(response)
+ end
+
def share_with_group(invitee, access_level = Resource::Members::AccessLevel::DEVELOPER)
post Runtime::API::Request.new(api_client, "/projects/#{id}/share").url, { group_id: invitee.id, group_access: access_level }
end
diff --git a/qa/qa/resource/repository/commit.rb b/qa/qa/resource/repository/commit.rb
index 61c2ad6bfc0..4b5e8535ade 100644
--- a/qa/qa/resource/repository/commit.rb
+++ b/qa/qa/resource/repository/commit.rb
@@ -21,14 +21,16 @@ module QA
@commit_message = 'QA Test - Commit message'
end
- def files=(files)
- if !files.is_a?(Array) ||
- files.empty? ||
- files.any? { |file| !file.has_key?(:file_path) || !file.has_key?(:content) }
- raise ArgumentError, "Please provide an array of hashes e.g.: [{file_path: 'file1', content: 'foo'}]"
- end
+ def add_files(files)
+ validate_files!(files)
+
+ @add_files = files
+ end
+
+ def update_files(files)
+ validate_files!(files)
- @files = files
+ @update_files = files
end
def resource_web_url(resource)
@@ -56,8 +58,19 @@ module QA
end
def actions
- @files.map do |file|
- file.merge({ action: "create" })
+ pending_actions = []
+ pending_actions << @add_files.map { |file| file.merge({ action: "create" }) } if @add_files
+ pending_actions << @update_files.map { |file| file.merge({ action: "update" }) } if @update_files
+ pending_actions.flatten
+ end
+
+ private
+
+ def validate_files!(files)
+ if !files.is_a?(Array) ||
+ files.empty? ||
+ files.any? { |file| !file.has_key?(:file_path) || !file.has_key?(:content) }
+ raise ArgumentError, "Please provide an array of hashes e.g.: [{file_path: 'file1', content: 'foo'}]"
end
end
end
diff --git a/qa/qa/resource/repository/push.rb b/qa/qa/resource/repository/push.rb
index a5827fb6e73..68674248be2 100644
--- a/qa/qa/resource/repository/push.rb
+++ b/qa/qa/resource/repository/push.rb
@@ -8,9 +8,9 @@ module QA
class Push < Base
attr_accessor :file_name, :file_content, :commit_message,
:branch_name, :new_branch, :output, :repository_http_uri,
- :repository_ssh_uri, :ssh_key, :user, :use_lfs
+ :repository_ssh_uri, :ssh_key, :user, :use_lfs, :tag_name
- attr_writer :remote_branch
+ attr_writer :remote_branch, :gpg_key_id
def initialize
@file_name = 'file.txt'
@@ -21,6 +21,8 @@ module QA
@repository_http_uri = ""
@ssh_key = nil
@use_lfs = false
+ @tag_name = nil
+ @gpg_key_id = nil
end
def remote_branch
@@ -67,29 +69,43 @@ module QA
email = user.email
end
+ unless @gpg_key_id.nil?
+ repository.gpg_key_id = @gpg_key_id
+ end
+
@output += repository.clone
repository.configure_identity(username, email)
@output += repository.checkout(branch_name, new_branch: new_branch)
- if @directory
- @directory.each_child do |f|
- @output += repository.add_file(f.basename, f.read) if f.file?
- end
- elsif @files
- @files.each do |f|
- repository.add_file(f[:name], f[:content])
- end
+ if @tag_name
+ @output += repository.delete_tag(@tag_name)
else
- @output += repository.add_file(file_name, file_content)
- end
+ if @directory
+ @directory.each_child do |f|
+ @output += repository.add_file(f.basename, f.read) if f.file?
+ end
+ elsif @files
+ @files.each do |f|
+ repository.add_file(f[:name], f[:content])
+ end
+ else
+ @output += repository.add_file(file_name, file_content)
+ end
- @output += repository.commit(commit_message)
- @output += repository.push_changes("#{branch_name}:#{remote_branch}")
+ @output += commit_to repository
+ @output += repository.push_changes("#{branch_name}:#{remote_branch}")
+ end
repository.delete_ssh_key
end
end
+
+ private
+
+ def commit_to(repository)
+ @gpg_key_id.nil? ? repository.commit(@commit_message) : repository.commit_with_gpg(@commit_message)
+ end
end
end
end
diff --git a/qa/qa/resource/repository/wiki_push.rb b/qa/qa/resource/repository/wiki_push.rb
index 8edaff70ac6..e926c00d380 100644
--- a/qa/qa/resource/repository/wiki_push.rb
+++ b/qa/qa/resource/repository/wiki_push.rb
@@ -25,14 +25,7 @@ module QA
end
def repository_ssh_uri
- @repository_ssh_uri ||= begin
- wiki.visit!
- Page::Project::Wiki::Show.act do
- click_clone_repository
- choose_repository_clone_ssh
- repository_location.uri
- end
- end
+ @repository_ssh_uri ||= wiki.repository_ssh_location.uri
end
def fabricate!
diff --git a/qa/qa/resource/runner.rb b/qa/qa/resource/runner.rb
index 9c2e138bade..1be2429bc04 100644
--- a/qa/qa/resource/runner.rb
+++ b/qa/qa/resource/runner.rb
@@ -6,8 +6,9 @@ module QA
module Resource
class Runner < Base
attr_writer :name, :tags, :image
- attr_accessor :config
+ attr_accessor :config, :token
+ attribute :id
attribute :project do
Project.fabricate_via_api! do |resource|
resource.name = 'project-with-ci-cd'
@@ -28,9 +29,9 @@ module QA
end
def fabricate_via_api!
- Service::Runner.new(name).tap do |runner|
+ Service::DockerRun::GitlabRunner.new(name).tap do |runner|
runner.pull
- runner.token = project.runners_token
+ runner.token = @token ||= project.runners_token
runner.address = Runtime::Scenario.gitlab_address
runner.tags = tags
runner.image = image
@@ -40,6 +41,18 @@ module QA
end
end
+ def remove_via_api!
+ @id = project.runners.find { |runner| runner[:description] == name }[:id]
+
+ super
+
+ Service::DockerRun::GitlabRunner.new(name).remove!
+ end
+
+ def api_delete_path
+ "/runners/#{id}"
+ end
+
def api_get_path
end
diff --git a/qa/qa/resource/sandbox.rb b/qa/qa/resource/sandbox.rb
index 47bd86440a0..6ee3dcf350f 100644
--- a/qa/qa/resource/sandbox.rb
+++ b/qa/qa/resource/sandbox.rb
@@ -10,6 +10,7 @@ module QA
attr_accessor :path
attribute :id
+ attribute :runners_token
def initialize
@path = Runtime::Namespace.sandbox_name
diff --git a/qa/qa/resource/tag.rb b/qa/qa/resource/tag.rb
new file mode 100644
index 00000000000..ac4fccec525
--- /dev/null
+++ b/qa/qa/resource/tag.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+module QA
+ module Resource
+ class Tag < Base
+ attr_accessor :project, :name, :ref
+
+ def resource_web_url(resource)
+ super
+ rescue ResourceURLMissingError
+ # this particular resource does not expose a web_url property
+ end
+
+ def api_get_path
+ "/projects/#{project.id}/repository/tags/#{name}"
+ end
+
+ def api_post_path
+ "/projects/#{project.id}/repository/tags"
+ end
+
+ def api_post_body
+ {
+ tag_name: name,
+ ref: ref
+ }
+ end
+ end
+ end
+end
diff --git a/qa/qa/resource/user.rb b/qa/qa/resource/user.rb
index 911d2b2f506..dcf145c9882 100644
--- a/qa/qa/resource/user.rb
+++ b/qa/qa/resource/user.rb
@@ -26,7 +26,7 @@ module QA
end
def name
- @name ||= api_resource&.dig(:name) || username
+ @name ||= api_resource&.dig(:name) || "QA User #{unique_id}"
end
def email
@@ -53,7 +53,7 @@ module QA
if credentials_given?
Page::Main::Login.perform do |login|
- login.sign_in_using_credentials(self)
+ login.sign_in_using_credentials(user: self)
end
else
Page::Main::Login.perform do |login|
@@ -91,9 +91,8 @@ module QA
def self.fabricate_or_use(username = nil, password = nil)
if Runtime::Env.signup_disabled?
- self.new.tap do |user|
+ self.fabricate_via_api! do |user|
user.username = username
- user.password = password
end
else
self.fabricate!
diff --git a/qa/qa/resource/user_gpg.rb b/qa/qa/resource/user_gpg.rb
new file mode 100644
index 00000000000..25d74ad8ce5
--- /dev/null
+++ b/qa/qa/resource/user_gpg.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+module QA
+ module Resource
+ class UserGPG < Base
+ attr_accessor :id, :gpg
+ attr_reader :key_id
+
+ def initialize
+ @gpg = Runtime::GPG.new
+ @key_id = @gpg.key_id
+ end
+
+ def fabricate_via_api!
+ super
+ @id = self.api_response[:id]
+ rescue ResourceFabricationFailedError => error
+ if error.message.include? 'has already been taken'
+ self
+ else
+ raise ResourceFabricationFailedError error
+ end
+ end
+
+ def resource_web_url(resource)
+ super
+ rescue ResourceURLMissingError
+ # this particular resource does not expose a web_url property
+ end
+
+ def api_get_path
+ "/user/gpg_keys/#{@id}"
+ end
+
+ def api_post_path
+ '/user/gpg_keys'
+ end
+
+ def api_post_body
+ {
+ key: @gpg.key
+ }
+ end
+ end
+ end
+end
diff --git a/qa/qa/resource/wiki.rb b/qa/qa/resource/wiki.rb
index 6e3648dba0b..45d5da9346d 100644
--- a/qa/qa/resource/wiki.rb
+++ b/qa/qa/resource/wiki.rb
@@ -21,6 +21,15 @@ module QA
end
end
+ attribute :repository_ssh_location do
+ Page::Project::Wiki::Show.perform(&:click_clone_repository)
+
+ Page::Project::Wiki::GitAccess.perform do |git_access|
+ git_access.choose_repository_clone_ssh
+ git_access.repository_location
+ end
+ end
+
def fabricate!
project.visit!
diff --git a/qa/qa/runtime/api/client.rb b/qa/qa/runtime/api/client.rb
index 594913c757a..1b0adbc9053 100644
--- a/qa/qa/runtime/api/client.rb
+++ b/qa/qa/runtime/api/client.rb
@@ -50,7 +50,7 @@ module QA
unless Page::Main::Menu.perform { |p| p.has_personal_area?(wait: 0) }
Runtime::Browser.visit(@address, Page::Main::Login)
- Page::Main::Login.perform { |login| login.sign_in_using_credentials(@user) }
+ Page::Main::Login.perform { |login| login.sign_in_using_credentials(user: @user) }
end
token = Resource::PersonalAccessToken.fabricate!.access_token
diff --git a/qa/qa/runtime/browser.rb b/qa/qa/runtime/browser.rb
index 77d04aa7594..4789b380377 100644
--- a/qa/qa/runtime/browser.rb
+++ b/qa/qa/runtime/browser.rb
@@ -65,7 +65,7 @@ module QA
# QA::Runtime::Env.browser.capitalize will work for every driver type except PhantomJS.
# We will have no use to use PhantomJS so this shouldn't be a problem.
- options = Selenium::WebDriver.const_get(QA::Runtime::Env.browser.capitalize)::Options.new
+ options = Selenium::WebDriver.const_get(QA::Runtime::Env.browser.capitalize, false)::Options.new
if QA::Runtime::Env.browser == :chrome
options.add_argument("window-size=1480,2200")
diff --git a/qa/qa/runtime/env.rb b/qa/qa/runtime/env.rb
index 594e5712ab2..b4047ef5088 100644
--- a/qa/qa/runtime/env.rb
+++ b/qa/qa/runtime/env.rb
@@ -145,6 +145,54 @@ module QA
ENV['GITLAB_QA_PASSWORD_2']
end
+ def gitlab_qa_username_3
+ ENV['GITLAB_QA_USERNAME_3'] || 'gitlab-qa-user3'
+ end
+
+ def gitlab_qa_password_3
+ ENV['GITLAB_QA_PASSWORD_3']
+ end
+
+ def gitlab_qa_username_4
+ ENV['GITLAB_QA_USERNAME_4'] || 'gitlab-qa-user4'
+ end
+
+ def gitlab_qa_password_4
+ ENV['GITLAB_QA_PASSWORD_4']
+ end
+
+ def gitlab_qa_username_5
+ ENV['GITLAB_QA_USERNAME_5'] || 'gitlab-qa-user5'
+ end
+
+ def gitlab_qa_password_5
+ ENV['GITLAB_QA_PASSWORD_5']
+ end
+
+ def gitlab_qa_username_6
+ ENV['GITLAB_QA_USERNAME_6'] || 'gitlab-qa-user6'
+ end
+
+ def gitlab_qa_password_6
+ ENV['GITLAB_QA_PASSWORD_6']
+ end
+
+ def gitlab_qa_1p_email
+ ENV['GITLAB_QA_1P_EMAIL']
+ end
+
+ def gitlab_qa_1p_password
+ ENV['GITLAB_QA_1P_PASSWORD']
+ end
+
+ def gitlab_qa_1p_secret
+ ENV['GITLAB_QA_1P_SECRET']
+ end
+
+ def gitlab_qa_1p_github_uuid
+ ENV['GITLAB_QA_1P_GITHUB_UUID']
+ end
+
def knapsack?
!!(ENV['KNAPSACK_GENERATE_REPORT'] || ENV['KNAPSACK_REPORT_PATH'] || ENV['KNAPSACK_TEST_FILE_PATTERN'])
end
diff --git a/qa/qa/runtime/fixtures.rb b/qa/qa/runtime/fixtures.rb
index 02cecffd4df..f91218ea0b5 100644
--- a/qa/qa/runtime/fixtures.rb
+++ b/qa/qa/runtime/fixtures.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require 'tmpdir'
+
module QA
module Runtime
module Fixtures
@@ -18,6 +20,19 @@ module QA
parse_body(response)[:content]
end
+ def with_fixtures(fixtures)
+ dir = Dir.mktmpdir
+ fixtures.each do |file_def|
+ path = File.join(dir, file_def[:file_path])
+ FileUtils.mkdir_p(File.dirname(path))
+ File.write(path, file_def[:content])
+ end
+
+ yield dir
+ ensure
+ FileUtils.remove_entry(dir)
+ end
+
private
def api_client
diff --git a/qa/qa/runtime/gpg.rb b/qa/qa/runtime/gpg.rb
new file mode 100644
index 00000000000..9f8baf7e580
--- /dev/null
+++ b/qa/qa/runtime/gpg.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+module QA
+ module Runtime
+ class GPG
+ attr_reader :key, :key_id
+
+ def initialize
+ @key_id = 'B8358D73048DACC4'
+ import_key(File.expand_path('qa/ee/fixtures/gpg/admin.asc'))
+ @key = collect_key.first
+ end
+
+ private
+
+ def import_key(path)
+ import_key = "gpg --import #{path}"
+ execute(import_key)
+ end
+
+ def collect_key
+ get_ascii_format = "gpg --armor --export #{@key_id}"
+ execute(get_ascii_format)
+ end
+
+ def execute(command)
+ Open3.capture2e(*command) do |stdin, out, wait|
+ out.each_char { |char| print char }
+
+ if wait.value.exited? && wait.value.exitstatus.nonzero?
+ raise CommandError, "Command `#{command}` failed!"
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/runtime/release.rb b/qa/qa/runtime/release.rb
index 4f96e0cf44b..18a6736afcf 100644
--- a/qa/qa/runtime/release.rb
+++ b/qa/qa/runtime/release.rb
@@ -19,7 +19,7 @@ module QA
end
def strategy
- QA.const_get("QA::#{version}::Strategy")
+ Object.const_get("QA::#{version}::Strategy", false)
end
def self.method_missing(name, *args)
diff --git a/qa/qa/runtime/user.rb b/qa/qa/runtime/user.rb
index 011e4a548a5..3c26a3ad691 100644
--- a/qa/qa/runtime/user.rb
+++ b/qa/qa/runtime/user.rb
@@ -25,6 +25,10 @@ module QA
Runtime::Env.user_password || default_password
end
+ def email
+ default_email
+ end
+
def ldap_user?
Runtime::Env.ldap_username && Runtime::Env.ldap_password
end
diff --git a/qa/qa/scenario/test/integration/ldap_no_server.rb b/qa/qa/scenario/test/integration/ldap_no_server.rb
new file mode 100644
index 00000000000..be71fc0ef6d
--- /dev/null
+++ b/qa/qa/scenario/test/integration/ldap_no_server.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module QA
+ module Scenario
+ module Test
+ module Integration
+ class LDAPNoServer < Test::Instance::All
+ tags :ldap_no_server
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/service/docker_run/base.rb b/qa/qa/service/docker_run/base.rb
new file mode 100644
index 00000000000..3f42c09ad2c
--- /dev/null
+++ b/qa/qa/service/docker_run/base.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+module QA
+ module Service
+ module DockerRun
+ class Base
+ include Service::Shellout
+
+ def initialize
+ @network = Runtime::Scenario.attributes[:network] || 'test'
+ end
+
+ def network
+ shell "docker network inspect #{@network}"
+ rescue CommandError
+ 'bridge'
+ else
+ @network
+ end
+
+ def pull
+ shell "docker pull #{@image}"
+ end
+
+ def host_name
+ "#{@name}.#{network}"
+ end
+
+ def register!
+ raise NotImplementedError
+ end
+
+ def remove!
+ shell "docker rm -f #{@name}" if running?
+ end
+
+ def running?
+ `docker ps -f name=#{@name}`.include?(@name)
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/service/docker_run/gitlab_runner.rb b/qa/qa/service/docker_run/gitlab_runner.rb
new file mode 100644
index 00000000000..6856a5a8399
--- /dev/null
+++ b/qa/qa/service/docker_run/gitlab_runner.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+require 'securerandom'
+
+module QA
+ module Service
+ module DockerRun
+ class GitlabRunner < Base
+ attr_accessor :token, :address, :tags, :image, :run_untagged
+ attr_writer :config
+
+ def initialize(name)
+ @image = 'gitlab/gitlab-runner:alpine'
+ @name = name || "qa-runner-#{SecureRandom.hex(4)}"
+ @tags = %w[qa test]
+ @run_untagged = false
+
+ super()
+ end
+
+ def config
+ @config ||= <<~END
+ concurrent = 1
+ check_interval = 0
+
+ [session_server]
+ session_timeout = 1800
+ END
+ end
+
+ def register!
+ shell <<~CMD.tr("\n", ' ')
+ docker run -d --rm --entrypoint=/bin/sh
+ --network #{network} --name #{@name}
+ -p 8093:8093
+ -e CI_SERVER_URL=#{@address}
+ -e REGISTER_NON_INTERACTIVE=true
+ -e REGISTRATION_TOKEN=#{@token}
+ -e RUNNER_EXECUTOR=shell
+ -e RUNNER_TAG_LIST=#{@tags.join(',')}
+ -e RUNNER_NAME=#{@name}
+ #{@image} -c "#{register_command}"
+ CMD
+ end
+
+ private
+
+ def register_command
+ <<~CMD
+ printf '#{config.chomp.gsub(/\n/, "\\n").gsub('"', '\"')}' > /etc/gitlab-runner/config.toml &&
+ gitlab-runner register --run-untagged=#{@run_untagged} &&
+ gitlab-runner run
+ CMD
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/service/docker_run/ldap.rb b/qa/qa/service/docker_run/ldap.rb
new file mode 100644
index 00000000000..c33d75ff640
--- /dev/null
+++ b/qa/qa/service/docker_run/ldap.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module QA
+ module Service
+ module DockerRun
+ class LDAP < Base
+ def initialize(volume)
+ @image = 'osixia/openldap:latest'
+ @name = 'ldap-server'
+ @volume = volume
+
+ super()
+ end
+
+ def register!
+ shell <<~CMD.tr("\n", ' ')
+ docker run -d --rm
+ --network #{network}
+ --hostname #{host_name}
+ --name #{@name}
+ -p 389:389
+ --volume #{volume_or_fixture(@volume)}:/container/service/slapd/assets/config/bootstrap/ldif/custom
+ #{@image} --copy-service
+ CMD
+ end
+
+ def volume_or_fixture(volume_name)
+ if volume_exists?(volume_name)
+ volume_name
+ else
+ File.expand_path("../fixtures/ldap/#{volume_name}", __dir__)
+ end
+ end
+
+ def volume_exists?(volume_name)
+ `docker volume ls -q -f name=#{volume_name}`.include?(volume_name)
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/service/docker_run/node_js.rb b/qa/qa/service/docker_run/node_js.rb
new file mode 100644
index 00000000000..642f1d1a33a
--- /dev/null
+++ b/qa/qa/service/docker_run/node_js.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module QA
+ module Service
+ module DockerRun
+ class NodeJs < Base
+ def initialize(volume_host_path)
+ @image = 'node:12.11.1-alpine'
+ @name = "qa-node-#{SecureRandom.hex(8)}"
+ @volume_host_path = volume_host_path
+
+ super()
+ end
+
+ def publish!
+ # When we run the tests via gitlab-qa, we use docker-in-docker
+ # which means that host of a volume mount would be the host that
+ # started the gitlab-qa QA container (e.g., the CI runner),
+ # not the gitlab-qa container itself. That means we can't
+ # mount a volume from the file system inside the gitlab-qa
+ # container.
+ #
+ # Instead, we copy the files into the container.
+ shell <<~CMD.tr("\n", ' ')
+ docker run -d --rm
+ --network #{network}
+ --hostname #{host_name}
+ --name #{@name}
+ --volume #{@volume_host_path}:/home/node
+ #{@image} sh -c "sleep 60"
+ CMD
+ shell "docker cp #{@volume_host_path}/. #{@name}:/home/node"
+ shell "docker exec -t #{@name} sh -c 'cd /home/node && npm publish'"
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/service/runner.rb b/qa/qa/service/runner.rb
deleted file mode 100644
index 6fc5984b12a..00000000000
--- a/qa/qa/service/runner.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-# frozen_string_literal: true
-
-require 'securerandom'
-
-module QA
- module Service
- class Runner
- include Service::Shellout
-
- attr_accessor :token, :address, :tags, :image, :run_untagged
- attr_writer :config
-
- def initialize(name)
- @image = 'gitlab/gitlab-runner:alpine'
- @name = name || "qa-runner-#{SecureRandom.hex(4)}"
- @network = Runtime::Scenario.attributes[:network] || 'test'
- @tags = %w[qa test]
- @run_untagged = false
- end
-
- def config
- @config ||= <<~END
- concurrent = 1
- check_interval = 0
-
- [session_server]
- session_timeout = 1800
- END
- end
-
- def network
- shell "docker network inspect #{@network}"
- rescue CommandError
- 'bridge'
- else
- @network
- end
-
- def pull
- shell "docker pull #{@image}"
- end
-
- def register!
- shell <<~CMD.tr("\n", ' ')
- docker run -d --rm --entrypoint=/bin/sh
- --network #{network} --name #{@name}
- -p 8093:8093
- -e CI_SERVER_URL=#{@address}
- -e REGISTER_NON_INTERACTIVE=true
- -e REGISTRATION_TOKEN=#{@token}
- -e RUNNER_EXECUTOR=shell
- -e RUNNER_TAG_LIST=#{@tags.join(',')}
- -e RUNNER_NAME=#{@name}
- #{@image} -c "#{register_command}"
- CMD
- end
-
- def remove!
- shell "docker rm -f #{@name}"
- end
-
- private
-
- def register_command
- <<~CMD
- printf '#{config.chomp.gsub(/\n/, "\\n").gsub('"', '\"')}' > /etc/gitlab-runner/config.toml &&
- gitlab-runner register --run-untagged=#{@run_untagged} &&
- gitlab-runner run
- CMD
- end
- end
- end
-end
diff --git a/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb b/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb
index 44c5e0b4196..819739ac535 100644
--- a/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb
+++ b/qa/qa/specs/features/api/1_manage/rate_limits_spec.rb
@@ -3,11 +3,8 @@
module QA
context 'Manage with IP rate limits', :requires_admin do
describe 'Users API' do
- before(:context) do
- @api_client = Runtime::API::Client.new(:gitlab, ip_limits: true)
- end
-
- let(:request) { Runtime::API::Request.new(@api_client, '/users') }
+ let(:api_client) { Runtime::API::Client.new(:gitlab, ip_limits: true) }
+ let(:request) { Runtime::API::Request.new(api_client, '/users') }
it 'GET /users' do
5.times do
diff --git a/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb b/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb
index ce8425cb3d1..5ba434a7781 100644
--- a/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb
+++ b/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb
@@ -8,7 +8,7 @@ module QA
describe 'Compare archives of different user projects with the same name and check they\'re different' do
include Support::Api
- before(:all) do
+ before do
@project_name = "project-archive-download-#{SecureRandom.hex(8)}"
@archive_types = %w(tar.gz tar.bz2 tar zip)
@users = {
@@ -46,7 +46,7 @@ module QA
project.standalone = true
project.add_name_uuid = false
project.name = project_name
- project.path_with_namespace = "#{user.name}/#{project_name}"
+ project.path_with_namespace = "#{user.username}/#{project_name}"
project.user = user
project.api_client = api_client
end
diff --git a/qa/qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb
index db99488160b..a118176eb8a 100644
--- a/qa/qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb
+++ b/qa/qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb
@@ -1,8 +1,7 @@
# frozen_string_literal: true
module QA
- # Failure issue: https://gitlab.com/gitlab-org/quality/nightly/issues/121
- context 'Manage', :orchestrated, :oauth, :quarantine do
+ context 'Manage', :orchestrated, :oauth do
describe 'OAuth login' do
it 'User logs in to GitLab with GitHub OAuth' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
index e3fd835bb01..45c14d0537c 100644
--- a/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
+++ b/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
@@ -11,6 +11,7 @@ module QA
project = Resource::Project.fabricate_via_api! do |resource|
resource.name = 'project-to-test-mention'
+ resource.visibility = 'private'
end
project.visit!
diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb
index 3ce291bf8bc..c7b5e40d0be 100644
--- a/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb
@@ -13,8 +13,12 @@ module QA
end
project.visit!
- Page::Project::Menu.perform(&:click_settings)
- Page::Project::Settings::MergeRequest.perform(&:enable_ff_only)
+ Page::Project::Menu.perform(&:go_to_general_settings)
+ Page::Project::Settings::Main.perform do |main|
+ main.expand_merge_requests_settings do |settings|
+ settings.enable_ff_only
+ end
+ end
merge_request = Resource::MergeRequest.fabricate! do |merge_request|
merge_request.project = project
diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb
index c4a6ce13f4c..e42d538fdf8 100644
--- a/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb
@@ -6,8 +6,10 @@ module QA
include Runtime::Fixtures
def login
- Runtime::Browser.visit(:gitlab, Page::Main::Login)
- Page::Main::Login.perform(&:sign_in_using_credentials)
+ unless Page::Main::Menu.perform(&:signed_in?)
+ Runtime::Browser.visit(:gitlab, Page::Main::Login)
+ Page::Main::Login.perform(&:sign_in_using_credentials)
+ end
end
before(:all) do
@@ -57,12 +59,10 @@ module QA
@project.visit!
Page::Project::Show.perform(&:create_new_file!)
- Page::File::Form.perform do |page| # rubocop:disable QA/AmbiguousPageObjectName
- page.select_template template[:file_name], template[:name]
+ Page::File::Form.perform do |form|
+ form.select_template template[:file_name], template[:name]
end
- expect(page).to have_content('Template applied')
- expect(page).to have_button('Undo')
expect(page).to have_content(content[0..100])
Page::File::Form.perform(&:commit_changes)
diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb
index 448d4980727..059362704b4 100644
--- a/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb
@@ -25,8 +25,8 @@ module QA
settings.expand_mirroring_repositories do |mirror_settings|
# Configure the source project to push to the target project
mirror_settings.repository_url = target_project_uri
- mirror_settings.mirror_direction = :push
- mirror_settings.authentication_method = :password
+ mirror_settings.mirror_direction = 'Push'
+ mirror_settings.authentication_method = 'Password'
mirror_settings.password = Runtime::User.password
mirror_settings.mirror_repository
mirror_settings.update target_project_uri
diff --git a/qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb b/qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb
index 796de44a012..cbc9f63f772 100644
--- a/qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb
@@ -7,7 +7,7 @@ module QA
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.perform(&:sign_in_using_credentials)
- Page::Main::Menu.perform(&:click_snippets_link)
+ Page::Main::Menu.perform(&:go_to_snippets)
Resource::Snippet.fabricate_via_browser_ui! do |snippet|
snippet.title = 'Snippet title'
diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb
index 2952a54ff5d..5d91b70082c 100644
--- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb
+++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb
@@ -6,7 +6,7 @@ module QA
let(:executor) { "qa-runner-#{Time.now.to_i}" }
after do
- Service::Runner.new(executor).remove!
+ Service::DockerRun::GitlabRunner.new(executor).remove!
end
it 'users creates a pipeline which gets processed' do
diff --git a/qa/qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb
index 900ddcb7f59..58f129b846d 100644
--- a/qa/qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb
+++ b/qa/qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb
@@ -6,7 +6,7 @@ module QA
let(:executor) { "qa-runner-#{Time.now.to_i}" }
after do
- Service::Runner.new(executor).remove!
+ Service::DockerRun::GitlabRunner.new(executor).remove!
end
it 'user registers a new specific runner' do
diff --git a/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb b/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb
index 141166f6971..e45ce438fc2 100644
--- a/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb
+++ b/qa/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb
@@ -26,7 +26,7 @@ module QA
end
after do
- Service::Runner.new(@runner_name).remove!
+ Service::DockerRun::GitlabRunner.new(@runner_name).remove!
end
keys = [
diff --git a/qa/qa/support/dates.rb b/qa/qa/support/dates.rb
new file mode 100644
index 00000000000..47fc721afc1
--- /dev/null
+++ b/qa/qa/support/dates.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module QA
+ module Support
+ module Dates
+ def current_date_yyyy_mm_dd
+ current_date.strftime("%Y/%m/%d")
+ end
+
+ def next_month_yyyy_mm_dd
+ current_date.next_month.strftime("%Y/%m/%d")
+ end
+
+ private
+
+ def current_date
+ DateTime.now
+ end
+ end
+ end
+end
diff --git a/qa/qa/support/page/logging.rb b/qa/qa/support/page/logging.rb
index 93d8fa99c0a..6b6e12f86de 100644
--- a/qa/qa/support/page/logging.rb
+++ b/qa/qa/support/page/logging.rb
@@ -4,6 +4,12 @@ module QA
module Support
module Page
module Logging
+ def assert_no_element(name)
+ log("asserting no element :#{name}")
+
+ super
+ end
+
def refresh
log("refreshing #{current_url}")
@@ -53,9 +59,10 @@ module QA
elements
end
- def click_element(name, page = nil)
+ def click_element(name, page = nil, **kwargs)
msg = ["clicking :#{name}"]
msg << ", expecting to be at #{page.class}" if page
+ msg << "with args #{kwargs}"
log(msg.compact.join(' '))
diff --git a/qa/qa/vendor/github/page/login.rb b/qa/qa/vendor/github/page/login.rb
index 120ba6e6c06..f6e72bb01f9 100644
--- a/qa/qa/vendor/github/page/login.rb
+++ b/qa/qa/vendor/github/page/login.rb
@@ -12,6 +12,12 @@ module QA
fill_in 'password', with: QA::Runtime::Env.github_password
click_on 'Sign in'
+ otp = OnePassword::CLI.new.otp
+
+ fill_in 'otp', with: otp
+
+ click_on 'Verify'
+
click_on 'Authorize gitlab-qa' if has_button?('Authorize gitlab-qa')
end
end
diff --git a/qa/qa/vendor/one_password/cli.rb b/qa/qa/vendor/one_password/cli.rb
new file mode 100644
index 00000000000..3cb69391783
--- /dev/null
+++ b/qa/qa/vendor/one_password/cli.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+module QA
+ module Vendor
+ module OnePassword
+ class CLI
+ def initialize
+ @email = QA::Runtime::Env.gitlab_qa_1p_email
+ @password = QA::Runtime::Env.gitlab_qa_1p_password
+ @secret = QA::Runtime::Env.gitlab_qa_1p_secret
+ @github_uuid = QA::Runtime::Env.gitlab_qa_1p_github_uuid
+ end
+
+ def otp
+ `#{op_path} get totp #{@github_uuid} --session=#{session_token}`.to_i
+ end
+
+ private
+
+ def session_token
+ `echo '#{@password}' | #{op_path} signin gitlab.1password.com #{@email} #{@secret} --output=raw --shorthand=gitlab_qa`
+ end
+
+ def op_path
+ File.expand_path(File.join(%W[qa vendor one_password #{os} op]))
+ end
+
+ def os
+ RUBY_PLATFORM.include?("darwin") ? "darwin" : "linux"
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/vendor/one_password/darwin/op b/qa/qa/vendor/one_password/darwin/op
new file mode 100755
index 00000000000..0f646522834
--- /dev/null
+++ b/qa/qa/vendor/one_password/darwin/op
Binary files differ
diff --git a/qa/qa/vendor/one_password/linux/op b/qa/qa/vendor/one_password/linux/op
new file mode 100755
index 00000000000..47ce87731be
--- /dev/null
+++ b/qa/qa/vendor/one_password/linux/op
Binary files differ
diff --git a/qa/spec/page/element_spec.rb b/qa/spec/page/element_spec.rb
index 20d4a00c020..ff5e118cefa 100644
--- a/qa/spec/page/element_spec.rb
+++ b/qa/spec/page/element_spec.rb
@@ -113,6 +113,7 @@ describe QA::Page::Element do
describe 'data-qa selectors' do
subject { described_class.new(:my_element) }
+
it 'properly translates to a data-qa-selector' do
expect(subject.selector_css).to include(%q([data-qa-selector="my_element"]))
end
diff --git a/qa/spec/resource/user_spec.rb b/qa/spec/resource/user_spec.rb
index d612dfc530e..5845f7996a3 100644
--- a/qa/spec/resource/user_spec.rb
+++ b/qa/spec/resource/user_spec.rb
@@ -35,8 +35,8 @@ describe QA::Resource::User do
end
describe '#name' do
- it 'defaults to the username' do
- expect(subject.name).to eq(subject.username)
+ it 'defaults to a name based on the username' do
+ expect(subject.name).to match(/#{subject.username.tr('-', ' ')}/i)
end
it 'retrieves the name from the api_resource if present' do
diff --git a/qa/spec/scenario/test/integration/ldap_spec.rb b/qa/spec/scenario/test/integration/ldap_spec.rb
index b6d798bf504..86747cd8eb7 100644
--- a/qa/spec/scenario/test/integration/ldap_spec.rb
+++ b/qa/spec/scenario/test/integration/ldap_spec.rb
@@ -8,6 +8,14 @@ describe QA::Scenario::Test::Integration::LDAPNoTLS do
end
end
+describe QA::Scenario::Test::Integration::LDAPNoServer do
+ context '#perform' do
+ it_behaves_like 'a QA scenario class' do
+ let(:tags) { [:ldap_no_server] }
+ end
+ end
+end
+
describe QA::Scenario::Test::Integration::LDAPTLS do
context '#perform' do
it_behaves_like 'a QA scenario class' do
diff --git a/rubocop/cop/gitlab/const_get_inherit_false.rb b/rubocop/cop/gitlab/const_get_inherit_false.rb
new file mode 100644
index 00000000000..3d3bbc4c8d3
--- /dev/null
+++ b/rubocop/cop/gitlab/const_get_inherit_false.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+module RuboCop
+ module Cop
+ module Gitlab
+ # Cop that encourages usage of inherit=false for 2nd argument when using const_get.
+ #
+ # See https://gitlab.com/gitlab-org/gitlab/issues/27678
+ class ConstGetInheritFalse < RuboCop::Cop::Cop
+ MSG = 'Use inherit=false when using const_get.'
+
+ def_node_matcher :const_get?, <<~PATTERN
+ (send _ :const_get ...)
+ PATTERN
+
+ def on_send(node)
+ return unless const_get?(node)
+ return if second_argument(node)&.false_type?
+
+ add_offense(node, location: :selector)
+ end
+
+ def autocorrect(node)
+ lambda do |corrector|
+ if arg = second_argument(node)
+ corrector.replace(arg.source_range, 'false')
+ else
+ first_argument = node.arguments[0]
+ corrector.insert_after(first_argument.source_range, ', false')
+ end
+ end
+ end
+
+ private
+
+ def second_argument(node)
+ node.arguments[1]
+ end
+ end
+ end
+ end
+end
diff --git a/rubocop/cop/line_break_around_conditional_block.rb b/rubocop/cop/line_break_around_conditional_block.rb
index 8118b314b63..2523cc162f3 100644
--- a/rubocop/cop/line_break_around_conditional_block.rb
+++ b/rubocop/cop/line_break_around_conditional_block.rb
@@ -117,7 +117,7 @@ module RuboCop
end
def block_start?(line)
- line.match(/ (do|{)( \|.*?\|)?\s?$/)
+ line.match(/ (do|{)( \|.*?\|)?\s?(#.+)?\z/)
end
def end_line?(line)
diff --git a/rubocop/migration_helpers.rb b/rubocop/migration_helpers.rb
index c066d424437..577f768da67 100644
--- a/rubocop/migration_helpers.rb
+++ b/rubocop/migration_helpers.rb
@@ -3,15 +3,17 @@ module RuboCop
module MigrationHelpers
# Returns true if the given node originated from the db/migrate directory.
def in_migration?(node)
- dirname = File.dirname(node.location.expression.source_buffer.name)
-
- dirname.end_with?('db/migrate', 'db/post_migrate')
+ dirname(node).end_with?('db/migrate', 'db/geo/migrate') || in_post_deployment_migration?(node)
end
def in_post_deployment_migration?(node)
- dirname = File.dirname(node.location.expression.source_buffer.name)
+ dirname(node).end_with?('db/post_migrate', 'db/geo/post_migrate')
+ end
+
+ private
- dirname.end_with?('db/post_migrate')
+ def dirname(node)
+ File.dirname(node.location.expression.source_buffer.name)
end
end
end
diff --git a/rubocop/rubocop.rb b/rubocop/rubocop.rb
index 8e7df62ea75..70679aa1e78 100644
--- a/rubocop/rubocop.rb
+++ b/rubocop/rubocop.rb
@@ -1,3 +1,4 @@
+require_relative 'cop/gitlab/const_get_inherit_false'
require_relative 'cop/gitlab/module_with_instance_variables'
require_relative 'cop/gitlab/predicate_memoization'
require_relative 'cop/gitlab/httparty'
diff --git a/scripts/lint-doc.sh b/scripts/lint-doc.sh
index e2c22785963..d097c2aee91 100755
--- a/scripts/lint-doc.sh
+++ b/scripts/lint-doc.sh
@@ -24,12 +24,12 @@ then
fi
# Make sure no files in doc/ are executable
-EXEC_PERM_COUNT=$(find doc/ app/ -type f -perm 755 | wc -l)
+EXEC_PERM_COUNT=$(find doc/ -type f -perm 755 | wc -l)
echo '=> Checking for executable permissions...'
if [ "${EXEC_PERM_COUNT}" -ne 0 ]
then
echo '✖ ERROR: Executable permissions should not be used in documentation! Use `chmod 644` to the files in question:' >&2
- find doc/ app/ -type f -perm 755
+ find doc/ -type f -perm 755
exit 1
fi
diff --git a/scripts/notify-slack b/scripts/notify-slack
new file mode 100755
index 00000000000..5907fd8b986
--- /dev/null
+++ b/scripts/notify-slack
@@ -0,0 +1,14 @@
+#!/bin/bash
+# Sends Slack notification MSG to CI_SLACK_WEBHOOK_URL (which needs to be set).
+# ICON_EMOJI needs to be set to an icon emoji name (without the `:` around it).
+
+CHANNEL=$1
+MSG=$2
+ICON_EMOJI=$3
+
+if [ -z "$CHANNEL" ] || [ -z "$CI_SLACK_WEBHOOK_URL" ] || [ -z "$MSG" ] || [ -z "$ICON_EMOJI" ]; then
+ echo "Missing argument(s) - Use: $0 channel message icon_emoji"
+ echo "and set CI_SLACK_WEBHOOK_URL environment variable."
+else
+ curl -X POST --data-urlencode 'payload={"channel": "#'"$CHANNEL"'", "username": "GitLab QA Bot", "text": "'"$MSG"'", "icon_emoji": "'":$ICON_EMOJI:"'"}' "$CI_SLACK_WEBHOOK_URL"
+fi
diff --git a/scripts/review_apps/automated_cleanup.rb b/scripts/review_apps/automated_cleanup.rb
index 4166070f7cd..9edc1a2b857 100755
--- a/scripts/review_apps/automated_cleanup.rb
+++ b/scripts/review_apps/automated_cleanup.rb
@@ -18,7 +18,8 @@ class AutomatedCleanup
].freeze
def self.ee?
- ENV['CI_PROJECT_NAME'] == 'gitlab-ee' || File.exist?('CHANGELOG-EE.md')
+ # Support former project name for `dev`
+ %w[gitlab gitlab-ee].include?(ENV['CI_PROJECT_NAME'])
end
def initialize(project_path: ENV['CI_PROJECT_PATH'], gitlab_token: ENV['GITLAB_BOT_REVIEW_APPS_CLEANUP_TOKEN'])
diff --git a/scripts/review_apps/base-config.yaml b/scripts/review_apps/base-config.yaml
index 403c1df97aa..573a5ccde11 100644
--- a/scripts/review_apps/base-config.yaml
+++ b/scripts/review_apps/base-config.yaml
@@ -35,11 +35,14 @@ gitlab:
gitlab-shell:
resources:
requests:
- cpu: 70m
+ cpu: 125m
memory: 20M
limits:
- cpu: 140m
+ cpu: 250m
memory: 40M
+ maxReplicas: 3
+ hpa:
+ targetAverageValue: 130m
sidekiq:
resources:
requests:
@@ -59,34 +62,43 @@ gitlab:
unicorn:
resources:
requests:
- cpu: 600m
+ cpu: 400m
memory: 1.4G
limits:
- cpu: 1.2G
+ cpu: 800m
memory: 2.8G
+ deployment:
+ readinessProbe:
+ initialDelaySeconds: 5 # Default is 0
+ periodSeconds: 15 # Default is 10
+ timeoutSeconds: 5 # Default is 2
workhorse:
resources:
requests:
- cpu: 100m
+ cpu: 175m
memory: 100M
limits:
- cpu: 200m
+ cpu: 350m
memory: 200M
+ readinessProbe:
+ initialDelaySeconds: 5 # Default is 0
+ periodSeconds: 15 # Default is 10
+ timeoutSeconds: 5 # Default is 2
gitlab-runner:
resources:
requests:
- cpu: 300m
+ cpu: 355m
memory: 300M
limits:
- cpu: 600m
+ cpu: 710m
memory: 600M
minio:
resources:
requests:
- cpu: 100m
+ cpu: 5m
memory: 128M
limits:
- cpu: 200m
+ cpu: 10m
memory: 280M
nginx-ingress:
controller:
@@ -95,10 +107,10 @@ nginx-ingress:
replicaCount: 2
resources:
requests:
- cpu: 150m
+ cpu: 100m
memory: 250M
limits:
- cpu: 300m
+ cpu: 200m
memory: 500M
minAvailable: 1
service:
@@ -141,7 +153,8 @@ redis:
redis-ha:
enabled: false
registry:
- minReplicas: 1
+ hpa:
+ minReplicas: 1
resources:
requests:
cpu: 50m
diff --git a/scripts/review_apps/review-apps.sh b/scripts/review_apps/review-apps.sh
index a4fb4749720..51768d07860 100755
--- a/scripts/review_apps/review-apps.sh
+++ b/scripts/review_apps/review-apps.sh
@@ -255,25 +255,13 @@ EOF
}
function display_deployment_debug() {
+ # Get all pods for this release
+ echoinfo "Pods for release ${CI_ENVIRONMENT_SLUG}"
kubectl get pods -n "$KUBE_NAMESPACE" -lrelease=${CI_ENVIRONMENT_SLUG}
- migrations_pod=$(get_pod "migrations");
- if [ -z "${migrations_pod}" ]; then
- echoerr "Migrations pod not found."
- else
- echoinfo "Logs tail of the ${migrations_pod} pod..."
-
- kubectl logs -n "$KUBE_NAMESPACE" "${migrations_pod}" | sed "s/${REVIEW_APPS_ROOT_PASSWORD}/[REDACTED]/g"
- fi
-
- unicorn_pod=$(get_pod "unicorn");
- if [ -z "${unicorn_pod}" ]; then
- echoerr "Unicorn pod not found."
- else
- echoinfo "Logs tail of the ${unicorn_pod} pod..."
-
- kubectl logs -n "$KUBE_NAMESPACE" -c unicorn "${unicorn_pod}" | sed "s/${REVIEW_APPS_ROOT_PASSWORD}/[REDACTED]/g"
- fi
+ # Get all non-completed jobs
+ echoinfo "Unsuccessful Jobs for release ${CI_ENVIRONMENT_SLUG}"
+ kubectl get jobs -n "$KUBE_NAMESPACE" -lrelease=${CI_ENVIRONMENT_SLUG} --field-selector=status.successful!=1
}
function add_license() {
diff --git a/scripts/rspec_helpers.sh b/scripts/rspec_helpers.sh
new file mode 100644
index 00000000000..1c75958aef1
--- /dev/null
+++ b/scripts/rspec_helpers.sh
@@ -0,0 +1,100 @@
+#!/bin/bash
+
+function retrieve_tests_metadata() {
+ mkdir -p knapsack/ rspec_flaky/ rspec_profiling/
+
+ if [[ ! -f "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" ]]; then
+ wget -O "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" "http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" || echo "{}" > "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}"
+ fi
+
+ if [[ ! -f "${FLAKY_RSPEC_SUITE_REPORT_PATH}" ]]; then
+ wget -O "${FLAKY_RSPEC_SUITE_REPORT_PATH}" "http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/${FLAKY_RSPEC_SUITE_REPORT_PATH}" || echo "{}" > "${FLAKY_RSPEC_SUITE_REPORT_PATH}"
+ fi
+}
+
+function update_tests_metadata() {
+ echo "{}" > "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}"
+
+ scripts/merge-reports "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" knapsack/rspec*_pg9_*.json
+ if [[ -n "${TESTS_METADATA_S3_BUCKET}" ]]; then
+ scripts/sync-reports put "${TESTS_METADATA_S3_BUCKET}" "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}"
+ fi
+
+ rm -f knapsack/rspec*.json
+
+ scripts/merge-reports "${FLAKY_RSPEC_SUITE_REPORT_PATH}" rspec_flaky/all_*.json
+
+ export FLAKY_RSPEC_GENERATE_REPORT="1"
+ scripts/prune-old-flaky-specs "${FLAKY_RSPEC_SUITE_REPORT_PATH}"
+
+ if [[ -n ${TESTS_METADATA_S3_BUCKET} ]]; then
+ scripts/sync-reports put "${TESTS_METADATA_S3_BUCKET}" "${FLAKY_RSPEC_SUITE_REPORT_PATH}"
+ fi
+
+ rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json
+
+ scripts/insert-rspec-profiling-data
+}
+
+function rspec_simple_job() {
+ local rspec_opts="${1}"
+
+ export NO_KNAPSACK="1"
+ export CACHE_CLASSES="true"
+
+ scripts/gitaly-test-spawn
+
+ bin/rspec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml ${rspec_opts}
+}
+
+function rspec_paralellized_job() {
+ read -ra job_name <<< "$CI_JOB_NAME"
+ local test_tool="${job_name[0]}"
+ local test_level="${job_name[1]}"
+ local database="${job_name[2]}"
+ local rspec_opts="${1}"
+ local spec_folder_prefix=""
+
+ if [[ "${test_tool}" =~ "-ee" ]]; then
+ spec_folder_prefix="ee/"
+ fi
+
+ export CACHE_CLASSES="true"
+ export KNAPSACK_LOG_LEVEL="debug"
+ export KNAPSACK_REPORT_PATH="knapsack/${test_tool}_${test_level}_${database}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json"
+
+ cp "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" "${KNAPSACK_REPORT_PATH}"
+
+ if [[ -z "${KNAPSACK_TEST_FILE_PATTERN}" ]]; then
+ pattern=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new(%(${spec_folder_prefix})).pattern(:${test_level})")
+ export KNAPSACK_TEST_FILE_PATTERN="${pattern}"
+ fi
+
+ echo "KNAPSACK_TEST_FILE_PATTERN: ${KNAPSACK_TEST_FILE_PATTERN}"
+
+ if [[ -d "ee/" ]]; then
+ export KNAPSACK_GENERATE_REPORT="true"
+ export FLAKY_RSPEC_GENERATE_REPORT="true"
+ export SUITE_FLAKY_RSPEC_REPORT_PATH="${FLAKY_RSPEC_SUITE_REPORT_PATH}"
+ export FLAKY_RSPEC_REPORT_PATH="rspec_flaky/all_${test_tool}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json"
+ export NEW_FLAKY_RSPEC_REPORT_PATH="rspec_flaky/new_${test_tool}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json"
+
+ if [[ ! -f $FLAKY_RSPEC_REPORT_PATH ]]; then
+ echo "{}" > "${FLAKY_RSPEC_REPORT_PATH}"
+ fi
+
+ if [[ ! -f $NEW_FLAKY_RSPEC_REPORT_PATH ]]; then
+ echo "{}" > "${NEW_FLAKY_RSPEC_REPORT_PATH}"
+ fi
+ fi
+
+ scripts/gitaly-test-spawn
+
+ mkdir -p tmp/memory_test
+
+ export MEMORY_TEST_PATH="tmp/memory_test/${test_tool}_${test_level}_${database}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv"
+
+ knapsack rspec "-Ispec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml ${rspec_opts}"
+
+ date
+}
diff --git a/scripts/trigger-build b/scripts/trigger-build
index 4d8110fce10..badbb562021 100755
--- a/scripts/trigger-build
+++ b/scripts/trigger-build
@@ -12,7 +12,8 @@ end
module Trigger
def self.ee?
- ENV['CI_PROJECT_NAME'] == 'gitlab-ee' || File.exist?('CHANGELOG-EE.md')
+ # Support former project name for `dev`
+ %w[gitlab gitlab-ee].include?(ENV['CI_PROJECT_NAME'])
end
class Base
@@ -89,7 +90,7 @@ module Trigger
private
def downstream_project_path
- 'gitlab-org/omnibus-gitlab'
+ ENV['OMNIBUS_PROJECT_PATH'] || 'gitlab-org/build/omnibus-gitlab-mirror'
end
def ref
@@ -97,7 +98,7 @@ module Trigger
end
def trigger_token
- ENV['BUILD_TRIGGER_TOKEN']
+ ENV['CI_JOB_TOKEN']
end
def access_token
diff --git a/scripts/trigger-build-docs b/scripts/trigger-build-docs
index 046ee5bceb8..ea717d9ccbf 100755
--- a/scripts/trigger-build-docs
+++ b/scripts/trigger-build-docs
@@ -16,14 +16,12 @@ end
GITLAB_DOCS_REPO = 'gitlab-org/gitlab-docs'.freeze
#
-# Truncate the remote docs branch name otherwise we hit the filesystem
-# limit and the directory name where NGINX serves the site won't match
-# the branch name.
+# This is the branch that will be created in the gitlab-docs project.
+# Name it after the product we're previewing and the ID of the MR that
+# kicked the review app.
#
def docs_branch
- # The maximum string length a file can have on a filesystem (ext4)
- # is 63 characters. CI_ENVIRONMENT_SLUG is limited to 24 characters.
- ENV["CI_ENVIRONMENT_SLUG"]
+ "docs-preview-#{slug}-#{ENV["CI_MERGE_REQUEST_IID"]}"
end
#
diff --git a/scripts/update-feature-categories b/scripts/update-feature-categories
new file mode 100755
index 00000000000..ed5d8dccdd6
--- /dev/null
+++ b/scripts/update-feature-categories
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+
+require 'uri'
+require 'net/http'
+require 'yaml'
+
+url = URI("https://gitlab.com/gitlab-com/www-gitlab-com/raw/master/data/stages.yml")
+
+http = Net::HTTP.new(url.host, url.port)
+http.use_ssl = true
+
+request = Net::HTTP::Get.new(url)
+
+response = http.request(request)
+
+stages_doc = YAML.safe_load(response.read_body)
+feature_categories = stages_doc["stages"].values
+ .flat_map { |stage| stage["groups"].values }
+ .flat_map { |group| group["categories"] }
+ .select(&:itself)
+ .uniq
+ .sort
+
+File.open("#{__dir__}/../config/feature_categories.yml", 'w') do |file|
+ file.puts(<<~HEADER_COMMENT)
+ #
+ # This file contains a list of all feature categories in GitLab
+ # It is generated from the stages file at #{url}.
+ # If you would like to update it, please run
+ # `./scripts/update-feature-categories` to generate a new copy
+ #
+ # PLEASE DO NOT EDIT THIS FILE MANUALLY.
+ #
+ HEADER_COMMENT
+ file.write(feature_categories.to_yaml)
+end
diff --git a/spec/config/smime_signature_settings_spec.rb b/spec/config/smime_signature_settings_spec.rb
index 38f96e9b330..4f076a92b16 100644
--- a/spec/config/smime_signature_settings_spec.rb
+++ b/spec/config/smime_signature_settings_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SmimeSignatureSettings do
diff --git a/spec/controllers/admin/application_settings_controller_spec.rb b/spec/controllers/admin/application_settings_controller_spec.rb
index d62e0a97609..bc14e9112a1 100644
--- a/spec/controllers/admin/application_settings_controller_spec.rb
+++ b/spec/controllers/admin/application_settings_controller_spec.rb
@@ -118,7 +118,7 @@ describe Admin::ApplicationSettingsController do
end
describe 'verify panel actions' do
- (Admin::ApplicationSettingsController::VALID_SETTING_PANELS - %w(templates geo)).each do |valid_action|
+ Admin::ApplicationSettingsController::VALID_SETTING_PANELS.each do |valid_action|
it_behaves_like 'renders correct panels' do
let(:action) { valid_action }
end
@@ -143,4 +143,22 @@ describe Admin::ApplicationSettingsController do
expect(response).to redirect_to(admin_runners_path)
end
end
+
+ describe 'GET #lets_encrypt_terms_of_service' do
+ include LetsEncryptHelpers
+
+ before do
+ sign_in(admin)
+
+ stub_lets_encrypt_client
+ end
+
+ subject { get :lets_encrypt_terms_of_service }
+
+ it 'redirects the user to the terms of service page' do
+ subject
+
+ expect(response).to redirect_to("https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf")
+ end
+ end
end
diff --git a/spec/controllers/admin/clusters_controller_spec.rb b/spec/controllers/admin/clusters_controller_spec.rb
index afc059d7561..233710b9fc3 100644
--- a/spec/controllers/admin/clusters_controller_spec.rb
+++ b/spec/controllers/admin/clusters_controller_spec.rb
@@ -469,7 +469,7 @@ describe Admin::ClustersController do
end
describe 'security' do
- set(:cluster) { create(:cluster, :provided_by_gcp, :instance) }
+ let_it_be(:cluster) { create(:cluster, :provided_by_gcp, :instance) }
it { expect { put_update }.to be_allowed_for(:admin) }
it { expect { put_update }.to be_denied_for(:user) }
@@ -531,7 +531,7 @@ describe Admin::ClustersController do
end
describe 'security' do
- set(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, :instance) }
+ let_it_be(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, :instance) }
it { expect { delete_destroy }.to be_allowed_for(:admin) }
it { expect { delete_destroy }.to be_denied_for(:user) }
diff --git a/spec/controllers/admin/requests_profiles_controller_spec.rb b/spec/controllers/admin/requests_profiles_controller_spec.rb
index 345f7720c25..853767199bc 100644
--- a/spec/controllers/admin/requests_profiles_controller_spec.rb
+++ b/spec/controllers/admin/requests_profiles_controller_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
describe Admin::RequestsProfilesController do
- set(:admin) { create(:admin) }
+ let_it_be(:admin) { create(:admin) }
before do
sign_in(admin)
diff --git a/spec/controllers/admin/sessions_controller_spec.rb b/spec/controllers/admin/sessions_controller_spec.rb
new file mode 100644
index 00000000000..c1cb57c0b9d
--- /dev/null
+++ b/spec/controllers/admin/sessions_controller_spec.rb
@@ -0,0 +1,98 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Admin::SessionsController, :do_not_mock_admin_mode do
+ include_context 'custom session'
+
+ let(:user) { create(:user) }
+
+ before do
+ sign_in(user)
+ end
+
+ describe '#new' do
+ context 'for regular users' do
+ it 'shows error page' do
+ get :new
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+ end
+ end
+
+ context 'for admin users' do
+ let(:user) { create(:admin) }
+
+ it 'renders a password form' do
+ get :new
+
+ expect(response).to render_template :new
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+ end
+ end
+ end
+
+ describe '#create' do
+ context 'for regular users' do
+ it 'shows error page' do
+ post :create
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+ end
+ end
+
+ context 'for admin users' do
+ let(:user) { create(:admin) }
+
+ it 'sets admin mode with a valid password' do
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+
+ controller.store_location_for(:redirect, admin_root_path)
+ post :create, params: { password: user.password }
+
+ expect(response).to redirect_to admin_root_path
+ expect(controller.send(:current_user_mode).admin_mode?).to be(true)
+ end
+
+ it 'fails with an invalid password' do
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+
+ controller.store_location_for(:redirect, admin_root_path)
+
+ post :create, params: { password: '' }
+
+ expect(response).to render_template :new
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+ end
+ end
+ end
+
+ describe '#destroy' do
+ context 'for regular users' do
+ it 'shows error page' do
+ get :destroy
+
+ expect(response).to have_gitlab_http_status(404)
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+ end
+ end
+
+ context 'for admin users' do
+ let(:user) { create(:admin) }
+
+ it 'disables admin mode and redirects to main page' do
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+ post :create, params: { password: user.password }
+ expect(controller.send(:current_user_mode).admin_mode?).to be(true)
+
+ get :destroy
+
+ expect(response).to have_gitlab_http_status(:found)
+ expect(response).to redirect_to(root_path)
+ expect(controller.send(:current_user_mode).admin_mode?).to be(false)
+ end
+ end
+ end
+end
diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb
index d7428f8b52c..1d1653e67e3 100644
--- a/spec/controllers/admin/users_controller_spec.rb
+++ b/spec/controllers/admin/users_controller_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
describe Admin::UsersController do
let(:user) { create(:user) }
- set(:admin) { create(:admin) }
+ let_it_be(:admin) { create(:admin) }
before do
sign_in(admin)
@@ -60,6 +60,96 @@ describe Admin::UsersController do
end
end
+ describe 'PUT #activate' do
+ shared_examples 'a request that activates the user' do
+ it 'activates the user' do
+ put :activate, params: { id: user.username }
+ user.reload
+ expect(user.active?).to be_truthy
+ expect(flash[:notice]).to eq('Successfully activated')
+ end
+ end
+
+ context 'for a deactivated user' do
+ before do
+ user.deactivate
+ end
+
+ it_behaves_like 'a request that activates the user'
+ end
+
+ context 'for an active user' do
+ it_behaves_like 'a request that activates the user'
+ end
+
+ context 'for a blocked user' do
+ before do
+ user.block
+ end
+
+ it 'does not activate the user' do
+ put :activate, params: { id: user.username }
+ user.reload
+ expect(user.active?).to be_falsey
+ expect(flash[:notice]).to eq('Error occurred. A blocked user must be unblocked to be activated')
+ end
+ end
+ end
+
+ describe 'PUT #deactivate' do
+ shared_examples 'a request that deactivates the user' do
+ it 'deactivates the user' do
+ put :deactivate, params: { id: user.username }
+ user.reload
+ expect(user.deactivated?).to be_truthy
+ expect(flash[:notice]).to eq('Successfully deactivated')
+ end
+ end
+
+ context 'for an active user' do
+ let(:activity) { {} }
+ let(:user) { create(:user, **activity) }
+
+ context 'with no recent activity' do
+ let(:activity) { { last_activity_on: ::User::MINIMUM_INACTIVE_DAYS.next.days.ago } }
+
+ it_behaves_like 'a request that deactivates the user'
+ end
+
+ context 'with recent activity' do
+ let(:activity) { { last_activity_on: ::User::MINIMUM_INACTIVE_DAYS.pred.days.ago } }
+
+ it 'does not deactivate the user' do
+ put :deactivate, params: { id: user.username }
+ user.reload
+ expect(user.deactivated?).to be_falsey
+ expect(flash[:notice]).to eq("The user you are trying to deactivate has been active in the past 14 days and cannot be deactivated")
+ end
+ end
+ end
+
+ context 'for a deactivated user' do
+ before do
+ user.deactivate
+ end
+
+ it_behaves_like 'a request that deactivates the user'
+ end
+
+ context 'for a blocked user' do
+ before do
+ user.block
+ end
+
+ it 'does not deactivate the user' do
+ put :deactivate, params: { id: user.username }
+ user.reload
+ expect(user.deactivated?).to be_falsey
+ expect(flash[:notice]).to eq('Error occurred. A blocked user cannot be deactivated')
+ end
+ end
+ end
+
describe 'PUT block/:id' do
it 'blocks user' do
put :block, params: { id: user.username }
diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb
index d7134d3d25a..ed91b5973b8 100644
--- a/spec/controllers/application_controller_spec.rb
+++ b/spec/controllers/application_controller_spec.rb
@@ -56,6 +56,8 @@ describe ApplicationController do
end
end
+ it_behaves_like 'a Trackable Controller'
+
describe '#add_gon_variables' do
before do
Gon.clear
@@ -94,14 +96,30 @@ describe ApplicationController do
request.path = '/-/peek'
end
- it_behaves_like 'not setting gon variables'
+ # TODO:
+ # remove line below once `privacy_policy_update_callout`
+ # feature flag is removed and `gon` reverts back to
+ # to not setting any variables.
+ if Gitlab.ee?
+ it_behaves_like 'setting gon variables'
+ else
+ it_behaves_like 'not setting gon variables'
+ end
end
end
context 'with json format' do
let(:format) { :json }
- it_behaves_like 'not setting gon variables'
+ # TODO:
+ # remove line below once `privacy_policy_update_callout`
+ # feature flag is removed and `gon` reverts back to
+ # to not setting any variables.
+ if Gitlab.ee?
+ it_behaves_like 'setting gon variables'
+ else
+ it_behaves_like 'not setting gon variables'
+ end
end
end
@@ -442,6 +460,25 @@ describe ApplicationController do
end
end
+ context 'deactivated user' do
+ controller(described_class) do
+ def index
+ render html: 'authenticated'
+ end
+ end
+
+ before do
+ sign_in user
+ user.deactivate
+ end
+
+ it 'signs out a deactivated user' do
+ get :index
+ expect(response).to redirect_to(new_user_session_path)
+ expect(flash[:alert]).to eq('Your account has been deactivated by your administrator. Please log back in to reactivate your account.')
+ end
+ end
+
context 'terms' do
controller(described_class) do
def index
@@ -761,4 +798,92 @@ describe ApplicationController do
end
end
end
+
+ describe '#current_user_mode', :do_not_mock_admin_mode do
+ include_context 'custom session'
+
+ controller(described_class) do
+ def index
+ render html: 'authenticated'
+ end
+ end
+
+ before do
+ allow(ActiveSession).to receive(:list_sessions).with(user).and_return([session])
+
+ sign_in(user)
+ get :index
+ end
+
+ context 'with a regular user' do
+ it 'admin mode is not set' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(Gitlab::Auth::CurrentUserMode.new(user).admin_mode?).to be(false)
+ end
+ end
+
+ context 'with an admin user' do
+ let(:user) { create(:admin) }
+
+ it 'admin mode is not set' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(Gitlab::Auth::CurrentUserMode.new(user).admin_mode?).to be(false)
+ end
+
+ context 'that re-authenticated' do
+ before do
+ Gitlab::Auth::CurrentUserMode.new(user).enable_admin_mode!(password: user.password)
+ end
+
+ it 'admin mode is set' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(Gitlab::Auth::CurrentUserMode.new(user).admin_mode?).to be(true)
+ end
+ end
+ end
+ end
+
+ describe '#require_role' do
+ controller(described_class) do
+ def index; end
+ end
+
+ let(:user) { create(:user) }
+ let(:experiment_enabled) { true }
+
+ before do
+ stub_experiment(signup_flow: experiment_enabled)
+ end
+
+ context 'experiment enabled and user with required role' do
+ before do
+ user.set_role_required!
+ sign_in(user)
+ get :index
+ end
+
+ it { is_expected.to redirect_to users_sign_up_welcome_path }
+ end
+
+ context 'experiment enabled and user without a role' do
+ before do
+ sign_in(user)
+ get :index
+ end
+
+ it { is_expected.not_to redirect_to users_sign_up_welcome_path }
+ end
+
+ context 'experiment disabled and user with required role' do
+ let(:experiment_enabled) { false }
+
+ before do
+ user.set_role_required!
+ sign_in(user)
+ get :index
+ end
+
+ it { is_expected.not_to redirect_to users_sign_up_welcome_path }
+ end
+ end
end
diff --git a/spec/controllers/boards/lists_controller_spec.rb b/spec/controllers/boards/lists_controller_spec.rb
index 77b5872fcb3..bc46d02556b 100644
--- a/spec/controllers/boards/lists_controller_spec.rb
+++ b/spec/controllers/boards/lists_controller_spec.rb
@@ -14,6 +14,10 @@ describe Boards::ListsController do
end
describe 'GET index' do
+ before do
+ create(:list, board: board)
+ end
+
it 'returns a successful 200 response' do
read_board_list user: user, board: board
@@ -22,27 +26,22 @@ describe Boards::ListsController do
end
it 'returns a list of board lists' do
- create(:list, board: board)
-
read_board_list user: user, board: board
expect(response).to match_response_schema('lists')
expect(json_response.length).to eq 3
end
- it 'avoids n+1 queries when serializing lists' do
- list_1 = create(:list, board: board)
- list_1.update_preferences_for(user, { collapsed: true })
-
- control_count = ActiveRecord::QueryRecorder.new { read_board_list user: user, board: board }.count
-
- list_2 = create(:list, board: board)
- list_2.update_preferences_for(user, { collapsed: true })
+ context 'when another user has list preferences' do
+ before do
+ board.lists.first.update_preferences_for(guest, collapsed: true)
+ end
- list_3 = create(:list, board: board)
- list_3.update_preferences_for(user, { collapsed: true })
+ it 'returns the complete list of board lists' do
+ read_board_list user: user, board: board
- expect { read_board_list user: user, board: board }.not_to exceed_query_limit(control_count)
+ expect(json_response.length).to eq 3
+ end
end
context 'with unauthorized user' do
diff --git a/spec/controllers/concerns/enforces_admin_authentication_spec.rb b/spec/controllers/concerns/enforces_admin_authentication_spec.rb
index e6a6702fdea..019a21e8cf0 100644
--- a/spec/controllers/concerns/enforces_admin_authentication_spec.rb
+++ b/spec/controllers/concerns/enforces_admin_authentication_spec.rb
@@ -2,7 +2,9 @@
require 'spec_helper'
-describe EnforcesAdminAuthentication do
+describe EnforcesAdminAuthentication, :do_not_mock_admin_mode do
+ include AdminModeHelper
+
let(:user) { create(:user) }
before do
@@ -10,30 +12,86 @@ describe EnforcesAdminAuthentication do
end
controller(ApplicationController) do
- # `described_class` is not available in this context
- include EnforcesAdminAuthentication # rubocop:disable RSpec/DescribedClass
+ include EnforcesAdminAuthentication
def index
head :ok
end
end
- describe 'authenticate_admin!' do
- context 'as an admin' do
- let(:user) { create(:admin) }
+ context 'feature flag :user_mode_in_session is enabled' do
+ describe 'authenticate_admin!' do
+ context 'as an admin' do
+ let(:user) { create(:admin) }
- it 'renders ok' do
- get :index
+ it 'renders redirect for re-authentication and does not set admin mode' do
+ get :index
+
+ expect(response).to redirect_to new_admin_session_path
+ expect(assigns(:current_user_mode)&.admin_mode?).to be(false)
+ end
+
+ context 'when admin mode is active' do
+ before do
+ enable_admin_mode!(user)
+ end
+
+ it 'renders ok' do
+ get :index
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
+ end
+
+ context 'as a user' do
+ it 'renders a 404' do
+ get :index
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+
+ it 'does not set admin mode' do
+ get :index
- expect(response).to have_gitlab_http_status(200)
+ # check for nil too since on 404, current_user_mode might not be initialized
+ expect(assigns(:current_user_mode)&.admin_mode?).to be_falsey
+ end
end
end
+ end
+
+ context 'feature flag :user_mode_in_session is disabled' do
+ before do
+ stub_feature_flags(user_mode_in_session: false)
+ end
- context 'as a user' do
- it 'renders a 404' do
+ describe 'authenticate_admin!' do
+ before do
get :index
+ end
+
+ context 'as an admin' do
+ let(:user) { create(:admin) }
+
+ it 'allows direct access to page' do
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'does not set admin mode' do
+ expect(assigns(:current_user_mode)&.admin_mode?).to be_falsey
+ end
+ end
+
+ context 'as a user' do
+ it 'renders a 404' do
+ expect(response).to have_gitlab_http_status(404)
+ end
- expect(response).to have_gitlab_http_status(404)
+ it 'does not set admin mode' do
+ # check for nil too since on 404, current_user_mode might not be initialized
+ expect(assigns(:current_user_mode)&.admin_mode?).to be_falsey
+ end
end
end
end
diff --git a/spec/controllers/concerns/metrics_dashboard_spec.rb b/spec/controllers/concerns/metrics_dashboard_spec.rb
new file mode 100644
index 00000000000..a71e34fd1ca
--- /dev/null
+++ b/spec/controllers/concerns/metrics_dashboard_spec.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe MetricsDashboard do
+ describe 'GET #metrics_dashboard' do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:environment) { create(:environment, project: project) }
+
+ before do
+ sign_in(user)
+ project.add_maintainer(user)
+ end
+
+ controller(::ApplicationController) do
+ include MetricsDashboard # rubocop:disable RSpec/DescribedClass
+ end
+
+ let(:json_response) do
+ routes.draw { get "metrics_dashboard" => "anonymous#metrics_dashboard" }
+ response = get :metrics_dashboard, format: :json
+
+ JSON.parse(response.parsed_body)
+ end
+
+ context 'when no parameters are provided' do
+ it 'returns an error json_response' do
+ expect(json_response['status']).to eq('error')
+ end
+ end
+
+ context 'when params are provided' do
+ before do
+ allow(controller).to receive(:project).and_return(project)
+ allow(controller)
+ .to receive(:metrics_dashboard_params)
+ .and_return(environment: environment)
+ end
+
+ it 'returns the specified dashboard' do
+ expect(json_response['dashboard']['dashboard']).to eq('Environment metrics')
+ expect(json_response).not_to have_key('all_dashboards')
+ end
+
+ context 'when parameters are provided and the list of all dashboards is required' do
+ before do
+ allow(controller).to receive(:include_all_dashboards?).and_return(true)
+ end
+
+ it 'returns a dashboard in addition to the list of dashboards' do
+ expect(json_response['dashboard']['dashboard']).to eq('Environment metrics')
+ expect(json_response).to have_key('all_dashboards')
+ end
+ end
+ end
+ end
+end
diff --git a/spec/controllers/dashboard/todos_controller_spec.rb b/spec/controllers/dashboard/todos_controller_spec.rb
index c5af04f72ee..4ce445fe41a 100644
--- a/spec/controllers/dashboard/todos_controller_spec.rb
+++ b/spec/controllers/dashboard/todos_controller_spec.rb
@@ -131,7 +131,7 @@ describe Dashboard::TodosController do
expect(todo.reload).to be_pending
expect(response).to have_gitlab_http_status(200)
- expect(json_response).to eq({ "count" => "1", "done_count" => "0" })
+ expect(json_response).to eq({ "count" => 1, "done_count" => 0 })
end
end
@@ -145,7 +145,7 @@ describe Dashboard::TodosController do
expect(todo.reload).to be_pending
end
expect(response).to have_gitlab_http_status(200)
- expect(json_response).to eq({ 'count' => '2', 'done_count' => '0' })
+ expect(json_response).to eq({ 'count' => 2, 'done_count' => 0 })
end
end
end
diff --git a/spec/controllers/groups/clusters_controller_spec.rb b/spec/controllers/groups/clusters_controller_spec.rb
index 5a3ba51d4df..51a6dcca640 100644
--- a/spec/controllers/groups/clusters_controller_spec.rb
+++ b/spec/controllers/groups/clusters_controller_spec.rb
@@ -6,7 +6,7 @@ describe Groups::ClustersController do
include AccessMatchersForController
include GoogleApi::CloudPlatformHelpers
- set(:group) { create(:group) }
+ let_it_be(:group) { create(:group) }
let(:user) { create(:user) }
@@ -536,7 +536,7 @@ describe Groups::ClustersController do
end
describe 'security' do
- set(:cluster) { create(:cluster, :provided_by_gcp, cluster_type: :group_type, groups: [group]) }
+ let_it_be(:cluster) { create(:cluster, :provided_by_gcp, cluster_type: :group_type, groups: [group]) }
it { expect { go }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(group) }
@@ -604,7 +604,7 @@ describe Groups::ClustersController do
end
describe 'security' do
- set(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, cluster_type: :group_type, groups: [group]) }
+ let_it_be(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, cluster_type: :group_type, groups: [group]) }
it { expect { go }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(group) }
diff --git a/spec/controllers/groups/group_members_controller_spec.rb b/spec/controllers/groups/group_members_controller_spec.rb
index 0c3dd971582..22f970133e3 100644
--- a/spec/controllers/groups/group_members_controller_spec.rb
+++ b/spec/controllers/groups/group_members_controller_spec.rb
@@ -6,7 +6,7 @@ describe Groups::GroupMembersController do
include ExternalAuthorizationServiceHelpers
let(:user) { create(:user) }
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:group) { create(:group, :public) }
let(:membership) { create(:group_member, group: group) }
describe 'GET index' do
diff --git a/spec/controllers/groups/labels_controller_spec.rb b/spec/controllers/groups/labels_controller_spec.rb
index 98a4c50fc49..d4780fa2675 100644
--- a/spec/controllers/groups/labels_controller_spec.rb
+++ b/spec/controllers/groups/labels_controller_spec.rb
@@ -3,9 +3,9 @@
require 'spec_helper'
describe Groups::LabelsController do
- set(:group) { create(:group) }
- set(:user) { create(:user) }
- set(:project) { create(:project, namespace: group) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, namespace: group) }
before do
group.add_owner(user)
@@ -14,8 +14,8 @@ describe Groups::LabelsController do
end
describe 'GET #index' do
- set(:label_1) { create(:label, project: project, title: 'label_1') }
- set(:group_label_1) { create(:group_label, group: group, title: 'group_label_1') }
+ let_it_be(:label_1) { create(:label, project: project, title: 'label_1') }
+ let_it_be(:group_label_1) { create(:group_label, group: group, title: 'group_label_1') }
it 'returns group and project labels by default' do
get :index, params: { group_id: group }, format: :json
@@ -25,8 +25,8 @@ describe Groups::LabelsController do
end
context 'with ancestor group' do
- set(:subgroup) { create(:group, parent: group) }
- set(:subgroup_label_1) { create(:group_label, group: subgroup, title: 'subgroup_label_1') }
+ let_it_be(:subgroup) { create(:group, parent: group) }
+ let_it_be(:subgroup_label_1) { create(:group_label, group: subgroup, title: 'subgroup_label_1') }
before do
subgroup.add_owner(user)
diff --git a/spec/controllers/groups/registry/repositories_controller_spec.rb b/spec/controllers/groups/registry/repositories_controller_spec.rb
new file mode 100644
index 00000000000..4129891914d
--- /dev/null
+++ b/spec/controllers/groups/registry/repositories_controller_spec.rb
@@ -0,0 +1,90 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Groups::Registry::RepositoriesController do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:guest) { create(:user) }
+ let_it_be(:group, reload: true) { create(:group) }
+
+ before do
+ stub_container_registry_config(enabled: true)
+ group.add_owner(user)
+ group.add_guest(guest)
+ sign_in(user)
+ end
+
+ context 'GET #index' do
+ context 'when container registry is enabled' do
+ it 'show index page' do
+ get :index, params: {
+ group_id: group
+ }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ end
+
+ it 'has the correct response schema' do
+ get :index, params: {
+ group_id: group,
+ format: :json
+ }
+
+ expect(response).to match_response_schema('registry/repositories')
+ end
+
+ it 'returns a list of projects for json format' do
+ project = create(:project, group: group)
+ repo = create(:container_repository, project: project)
+
+ get :index, params: {
+ group_id: group,
+ format: :json
+ }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to be_kind_of(Array)
+ expect(json_response.first).to include(
+ 'id' => repo.id,
+ 'name' => repo.name
+ )
+ end
+
+ it 'tracks the event' do
+ expect(Gitlab::Tracking).to receive(:event).with(anything, 'list_repositories', {})
+
+ get :index, params: {
+ group_id: group
+ }
+ end
+ end
+
+ context 'container registry is disabled' do
+ before do
+ stub_container_registry_config(enabled: false)
+ end
+
+ it 'renders not found' do
+ get :index, params: {
+ group_id: group
+ }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ context 'user do not have acces to container registry' do
+ before do
+ sign_out(user)
+ sign_in(guest)
+ end
+
+ it 'renders not found' do
+ get :index, params: {
+ group_id: group
+ }
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
+end
diff --git a/spec/controllers/groups/settings/ci_cd_controller_spec.rb b/spec/controllers/groups/settings/ci_cd_controller_spec.rb
index 70b3a5fb496..897ba491036 100644
--- a/spec/controllers/groups/settings/ci_cd_controller_spec.rb
+++ b/spec/controllers/groups/settings/ci_cd_controller_spec.rb
@@ -156,4 +156,58 @@ describe Groups::Settings::CiCdController do
end
end
end
+
+ describe 'PATCH #update' do
+ subject do
+ patch :update, params: {
+ group_id: group,
+ group: { max_artifacts_size: 10 }
+ }
+ end
+
+ context 'when user is not an admin' do
+ before do
+ group.add_owner(user)
+ end
+
+ it { is_expected.to have_gitlab_http_status(404) }
+ end
+
+ context 'when user is an admin' do
+ let(:user) { create(:admin) }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it { is_expected.to redirect_to(group_settings_ci_cd_path) }
+
+ context 'when service execution went wrong' do
+ let(:update_service) { double }
+
+ before do
+ allow(Groups::UpdateService).to receive(:new).and_return(update_service)
+ allow(update_service).to receive(:execute).and_return(false)
+ allow_any_instance_of(Group).to receive_message_chain(:errors, :full_messages)
+ .and_return(['Error 1'])
+
+ subject
+ end
+
+ it 'returns a flash alert' do
+ expect(response).to set_flash[:alert]
+ .to eq("There was a problem updating the pipeline settings: [\"Error 1\"].")
+ end
+ end
+
+ context 'when service execution was successful' do
+ it 'returns a flash notice' do
+ subject
+
+ expect(response).to set_flash[:notice]
+ .to eq('Pipeline settings was updated for the group')
+ end
+ end
+ end
+ end
end
diff --git a/spec/controllers/groups/shared_projects_controller_spec.rb b/spec/controllers/groups/shared_projects_controller_spec.rb
index 9f6c558c931..a4b2efa7c43 100644
--- a/spec/controllers/groups/shared_projects_controller_spec.rb
+++ b/spec/controllers/groups/shared_projects_controller_spec.rb
@@ -17,9 +17,9 @@ describe Groups::SharedProjectsController do
).execute(group)
end
- set(:group) { create(:group) }
- set(:user) { create(:user) }
- set(:shared_project) do
+ let_it_be(:group) { create(:group) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:shared_project) do
shared_project = create(:project, namespace: user.namespace)
share_project(shared_project)
diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb
index 404e61c5271..3c39a6468e5 100644
--- a/spec/controllers/groups_controller_spec.rb
+++ b/spec/controllers/groups_controller_spec.rb
@@ -125,7 +125,7 @@ describe GroupsController do
end
context 'as json' do
- it 'includes all projects from groups and subgroups in event feed' do
+ it 'includes events from all projects in group and subgroups' do
2.times do
project = create(:project, group: group)
create(:event, project: project)
@@ -385,6 +385,29 @@ describe GroupsController do
expect(response).to have_gitlab_http_status(302)
expect(group.reload.project_creation_level).to eq(::Gitlab::Access::MAINTAINER_PROJECT_ACCESS)
end
+
+ context 'when a project inside the group has container repositories' do
+ before do
+ stub_container_registry_config(enabled: true)
+ stub_container_registry_tags(repository: /image/, tags: %w[rc1])
+ create(:container_repository, project: project, name: :image)
+ end
+
+ it 'does allow the group to be renamed' do
+ post :update, params: { id: group.to_param, group: { name: 'new_name' } }
+
+ expect(controller).to set_flash[:notice]
+ expect(response).to have_gitlab_http_status(302)
+ expect(group.reload.name).to eq('new_name')
+ end
+
+ it 'does not allow to path of the group to be changed' do
+ post :update, params: { id: group.to_param, group: { path: 'new_path' } }
+
+ expect(assigns(:group).errors[:base].first).to match(/Docker images in their Container Registry/)
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
end
describe '#ensure_canonical_path' do
@@ -673,6 +696,28 @@ describe GroupsController do
expect(response).to have_gitlab_http_status(404)
end
end
+
+ context 'transferring when a project has container images' do
+ let(:group) { create(:group, :public, :nested) }
+ let!(:group_member) { create(:group_member, :owner, group: group, user: user) }
+
+ before do
+ stub_container_registry_config(enabled: true)
+ stub_container_registry_tags(repository: /image/, tags: %w[rc1])
+ create(:container_repository, project: project, name: :image)
+
+ put :transfer,
+ params: {
+ id: group.to_param,
+ new_parent_group_id: ''
+ }
+ end
+
+ it 'does not allow the group to be transferred' do
+ expect(controller).to set_flash[:alert].to match(/Docker images in their Container Registry/)
+ expect(response).to redirect_to(edit_group_path(group))
+ end
+ end
end
context 'token authentication' do
diff --git a/spec/controllers/health_controller_spec.rb b/spec/controllers/health_controller_spec.rb
index e82dcfcdb64..8a2291bccd7 100644
--- a/spec/controllers/health_controller_spec.rb
+++ b/spec/controllers/health_controller_spec.rb
@@ -24,11 +24,26 @@ describe HealthController do
it 'responds with readiness checks data' do
subject
- expect(json_response['db_check']['status']).to eq('ok')
- expect(json_response['cache_check']['status']).to eq('ok')
- expect(json_response['queues_check']['status']).to eq('ok')
- expect(json_response['shared_state_check']['status']).to eq('ok')
- expect(json_response['gitaly_check']['status']).to eq('ok')
+ expect(json_response['db_check']).to contain_exactly({ 'status' => 'ok' })
+ expect(json_response['cache_check']).to contain_exactly({ 'status' => 'ok' })
+ expect(json_response['queues_check']).to contain_exactly({ 'status' => 'ok' })
+ expect(json_response['shared_state_check']).to contain_exactly({ 'status' => 'ok' })
+ expect(json_response['gitaly_check']).to contain_exactly(
+ { 'status' => 'ok', 'labels' => { 'shard' => 'default' } })
+ end
+
+ it 'responds with readiness checks data when a failure happens' do
+ allow(Gitlab::HealthChecks::Redis::RedisCheck).to receive(:readiness).and_return(
+ Gitlab::HealthChecks::Result.new('redis_check', false, "check error"))
+
+ subject
+
+ expect(json_response['cache_check']).to contain_exactly({ 'status' => 'ok' })
+ expect(json_response['redis_check']).to contain_exactly(
+ { 'status' => 'failed', 'message' => 'check error' })
+
+ expect(response.status).to eq(503)
+ expect(response.headers['X-GitLab-Custom-Error']).to eq(1)
end
end
@@ -76,10 +91,7 @@ describe HealthController do
it 'responds with liveness checks data' do
subject
- expect(json_response['db_check']['status']).to eq('ok')
- expect(json_response['cache_check']['status']).to eq('ok')
- expect(json_response['queues_check']['status']).to eq('ok')
- expect(json_response['shared_state_check']['status']).to eq('ok')
+ expect(json_response).to eq('status' => 'ok')
end
end
diff --git a/spec/controllers/import/bitbucket_controller_spec.rb b/spec/controllers/import/bitbucket_controller_spec.rb
index 38388c21749..d013bd6d427 100644
--- a/spec/controllers/import/bitbucket_controller_spec.rb
+++ b/spec/controllers/import/bitbucket_controller_spec.rb
@@ -80,6 +80,21 @@ describe Import::BitbucketController do
expect(assigns(:already_added_projects)).to eq([@project])
expect(assigns(:repos)).to eq([])
end
+
+ context 'when filtering' do
+ let(:filter) { '<html>test</html>' }
+ let(:expected_filter) { 'test' }
+
+ subject { get :status, params: { filter: filter }, as: :json }
+
+ it 'passes sanitized filter param to bitbucket client' do
+ expect_next_instance_of(Bitbucket::Client) do |client|
+ expect(client).to receive(:repos).with(filter: expected_filter).and_return([@repo])
+ end
+
+ subject
+ end
+ end
end
describe "POST create" do
diff --git a/spec/controllers/import/bitbucket_server_controller_spec.rb b/spec/controllers/import/bitbucket_server_controller_spec.rb
index e1aeab46fca..f30eace7d30 100644
--- a/spec/controllers/import/bitbucket_server_controller_spec.rb
+++ b/spec/controllers/import/bitbucket_server_controller_spec.rb
@@ -39,7 +39,7 @@ describe Import::BitbucketServerController do
assign_session_tokens
end
- set(:project) { create(:project) }
+ let_it_be(:project) { create(:project) }
it 'returns the new project' do
allow(Gitlab::BitbucketServerImport::ProjectCreator)
diff --git a/spec/controllers/import/gitlab_projects_controller_spec.rb b/spec/controllers/import/gitlab_projects_controller_spec.rb
index 51b398895bc..a3f6d8dcea2 100644
--- a/spec/controllers/import/gitlab_projects_controller_spec.rb
+++ b/spec/controllers/import/gitlab_projects_controller_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe Import::GitlabProjectsController do
- set(:namespace) { create(:namespace) }
- set(:user) { namespace.owner }
+ let_it_be(:namespace) { create(:namespace) }
+ let_it_be(:user) { namespace.owner }
let(:file) { fixture_file_upload('spec/fixtures/project_export.tar.gz', 'text/plain') }
before do
diff --git a/spec/controllers/omniauth_callbacks_controller_spec.rb b/spec/controllers/omniauth_callbacks_controller_spec.rb
index 9371c434f49..521dbe7ee23 100644
--- a/spec/controllers/omniauth_callbacks_controller_spec.rb
+++ b/spec/controllers/omniauth_callbacks_controller_spec.rb
@@ -18,6 +18,28 @@ describe OmniauthCallbacksController, type: :controller do
Rails.application.env_config['omniauth.auth'] = @original_env_config_omniauth_auth
end
+ context 'a deactivated user' do
+ let(:provider) { :github }
+ let(:extern_uid) { 'my-uid' }
+
+ before do
+ user.deactivate!
+ post provider
+ end
+
+ it 'allows sign in' do
+ expect(request.env['warden']).to be_authenticated
+ end
+
+ it 'activates the user' do
+ expect(user.reload.active?).to be_truthy
+ end
+
+ it 'shows reactivation flash message after logging in' do
+ expect(flash[:notice]).to eq('Welcome back! Your account had been deactivated due to inactivity but is now reactivated.')
+ end
+ end
+
context 'when the user is on the last sign in attempt' do
let(:extern_uid) { 'my-uid' }
diff --git a/spec/controllers/profiles/notifications_controller_spec.rb b/spec/controllers/profiles/notifications_controller_spec.rb
index f69847119d4..dbc408bcdd9 100644
--- a/spec/controllers/profiles/notifications_controller_spec.rb
+++ b/spec/controllers/profiles/notifications_controller_spec.rb
@@ -20,6 +20,38 @@ describe Profiles::NotificationsController do
expect(response).to render_template :show
end
+
+ context 'with groups that do not have notification preferences' do
+ set(:group) { create(:group) }
+ set(:subgroup) { create(:group, parent: group) }
+
+ before do
+ group.add_developer(user)
+ end
+
+ it 'still shows up in the list' do
+ sign_in(user)
+
+ get :show
+
+ expect(assigns(:group_notifications).map(&:source_id)).to include(subgroup.id)
+ end
+
+ it 'has an N+1 (but should not)' do
+ sign_in(user)
+
+ control = ActiveRecord::QueryRecorder.new do
+ get :show
+ end
+
+ create_list(:group, 2, parent: group)
+
+ # We currently have an N + 1, switch to `not_to` once fixed
+ expect do
+ get :show
+ end.to exceed_query_limit(control)
+ end
+ end
end
describe 'POST update' do
diff --git a/spec/controllers/profiles_controller_spec.rb b/spec/controllers/profiles_controller_spec.rb
index 08681c0341a..eb479d9a0aa 100644
--- a/spec/controllers/profiles_controller_spec.rb
+++ b/spec/controllers/profiles_controller_spec.rb
@@ -153,7 +153,7 @@ describe ProfilesController, :request_store do
user.reload
expect(response.status).to eq(302)
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_username}/#{project.path}.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_username}/#{project.path}.git")).to be_truthy
end
end
@@ -171,7 +171,7 @@ describe ProfilesController, :request_store do
user.reload
expect(response.status).to eq(302)
- expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{project.disk_path}.git")).to be_truthy
expect(before_disk_path).to eq(project.disk_path)
end
end
diff --git a/spec/controllers/projects/artifacts_controller_spec.rb b/spec/controllers/projects/artifacts_controller_spec.rb
index 6ea82785e98..acc6935cb71 100644
--- a/spec/controllers/projects/artifacts_controller_spec.rb
+++ b/spec/controllers/projects/artifacts_controller_spec.rb
@@ -4,9 +4,9 @@ require 'spec_helper'
describe Projects::ArtifactsController do
let(:user) { project.owner }
- set(:project) { create(:project, :repository, :public) }
+ let_it_be(:project) { create(:project, :repository, :public) }
- let(:pipeline) do
+ let_it_be(:pipeline, reload: true) do
create(:ci_pipeline,
project: project,
sha: project.commit.sha,
@@ -14,12 +14,119 @@ describe Projects::ArtifactsController do
status: 'success')
end
- let(:job) { create(:ci_build, :success, :artifacts, pipeline: pipeline) }
+ let!(:job) { create(:ci_build, :success, :artifacts, pipeline: pipeline) }
before do
sign_in(user)
end
+ describe 'GET index' do
+ subject { get :index, params: { namespace_id: project.namespace, project_id: project } }
+
+ context 'when feature flag is on' do
+ before do
+ stub_feature_flags(artifacts_management_page: true)
+ end
+
+ it 'sets the artifacts variable' do
+ subject
+
+ expect(assigns(:artifacts)).to contain_exactly(*project.job_artifacts)
+ end
+
+ it 'sets the total size variable' do
+ subject
+
+ expect(assigns(:total_size)).to eq(project.job_artifacts.total_size)
+ end
+
+ describe 'pagination' do
+ before do
+ stub_const("#{described_class}::MAX_PER_PAGE", 1)
+ end
+
+ it 'paginates artifacts' do
+ subject
+
+ expect(assigns(:artifacts)).to contain_exactly(project.reload.job_artifacts.last)
+ end
+ end
+ end
+
+ context 'when feature flag is off' do
+ before do
+ stub_feature_flags(artifacts_management_page: false)
+ end
+
+ it 'renders no content' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:no_content)
+ end
+
+ it 'does not set the artifacts variable' do
+ subject
+
+ expect(assigns(:artifacts)).to eq(nil)
+ end
+
+ it 'does not set the total size variable' do
+ subject
+
+ expect(assigns(:total_size)).to eq(nil)
+ end
+ end
+ end
+
+ describe 'DELETE destroy' do
+ let!(:artifact) { job.job_artifacts.erasable.first }
+
+ subject { delete :destroy, params: { namespace_id: project.namespace, project_id: project, id: artifact } }
+
+ it 'deletes the artifact' do
+ expect { subject }.to change { Ci::JobArtifact.count }.by(-1)
+ expect(artifact).not_to exist
+ end
+
+ it 'redirects to artifacts index page' do
+ subject
+
+ expect(response).to redirect_to(project_artifacts_path(project))
+ end
+
+ it 'sets the notice' do
+ subject
+
+ expect(flash[:notice]).to eq('Artifact was successfully deleted.')
+ end
+
+ context 'when artifact deletion fails' do
+ before do
+ allow_any_instance_of(Ci::JobArtifact).to receive(:destroy).and_return(false)
+ end
+
+ it 'redirects to artifacts index page' do
+ subject
+
+ expect(response).to redirect_to(project_artifacts_path(project))
+ end
+
+ it 'sets the notice' do
+ subject
+
+ expect(flash[:notice]).to eq('Artifact could not be deleted.')
+ end
+ end
+
+ context 'when user is not authorized' do
+ let(:user) { create(:user) }
+
+ it 'does not delete the artifact' do
+ expect { subject }.not_to change { Ci::JobArtifact.count }
+ end
+ end
+ end
+
describe 'GET download' do
def download_artifact(extra_params = {})
params = { namespace_id: project.namespace, project_id: project, job_id: job }.merge(extra_params)
@@ -179,6 +286,25 @@ describe Projects::ArtifactsController do
expect(response).to render_template('projects/artifacts/file')
end
end
+
+ context 'when the project is private and pages access control is enabled' do
+ let(:private_project) { create(:project, :repository, :private) }
+ let(:pipeline) { create(:ci_pipeline, project: private_project) }
+ let(:job) { create(:ci_build, :success, :artifacts, pipeline: pipeline) }
+
+ before do
+ private_project.add_developer(user)
+
+ allow(Gitlab.config.pages).to receive(:access_control).and_return(true)
+ allow(Gitlab.config.pages).to receive(:artifacts_server).and_return(true)
+ end
+
+ it 'renders the file view' do
+ get :file, params: { namespace_id: private_project.namespace, project_id: private_project, job_id: job, path: 'ci_artifacts.txt' }
+
+ expect(response).to have_gitlab_http_status(302)
+ end
+ end
end
describe 'GET raw' do
diff --git a/spec/controllers/projects/autocomplete_sources_controller_spec.rb b/spec/controllers/projects/autocomplete_sources_controller_spec.rb
index a9a058e7e17..34765ae3951 100644
--- a/spec/controllers/projects/autocomplete_sources_controller_spec.rb
+++ b/spec/controllers/projects/autocomplete_sources_controller_spec.rb
@@ -3,10 +3,10 @@
require 'spec_helper'
describe Projects::AutocompleteSourcesController do
- set(:group) { create(:group) }
- set(:project) { create(:project, namespace: group) }
- set(:issue) { create(:issue, project: project) }
- set(:user) { create(:user) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:project) { create(:project, namespace: group) }
+ let_it_be(:issue) { create(:issue, project: project) }
+ let_it_be(:user) { create(:user) }
describe 'GET members' do
before do
diff --git a/spec/controllers/projects/branches_controller_spec.rb b/spec/controllers/projects/branches_controller_spec.rb
index f5bcea4a097..affe0e0f970 100644
--- a/spec/controllers/projects/branches_controller_spec.rb
+++ b/spec/controllers/projects/branches_controller_spec.rb
@@ -578,7 +578,9 @@ describe Projects::BranchesController do
describe 'GET diverging_commit_counts' do
before do
sign_in(user)
+ end
+ it 'returns the commit counts behind and ahead of default branch' do
get :diverging_commit_counts,
format: :json,
params: {
@@ -586,14 +588,58 @@ describe Projects::BranchesController do
project_id: project,
names: ['fix', 'add-pdf-file', 'branch-merged']
}
- end
- it 'returns the commit counts behind and ahead of default branch' do
+ expect(response).to have_gitlab_http_status(200)
expect(json_response).to eq(
"fix" => { "behind" => 29, "ahead" => 2 },
"branch-merged" => { "behind" => 1, "ahead" => 0 },
"add-pdf-file" => { "behind" => 0, "ahead" => 3 }
)
end
+
+ it 'returns the commits counts with no names provided' do
+ allow_any_instance_of(Repository).to receive(:branch_count).and_return(Kaminari.config.default_per_page)
+
+ get :diverging_commit_counts,
+ format: :json,
+ params: {
+ namespace_id: project.namespace,
+ project_id: project
+ }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response.count).to be > 1
+ end
+
+ describe 'with many branches' do
+ before do
+ allow_any_instance_of(Repository).to receive(:branch_count).and_return(Kaminari.config.default_per_page + 1)
+ end
+
+ it 'returns 422 if no names are specified' do
+ get :diverging_commit_counts,
+ format: :json,
+ params: {
+ namespace_id: project.namespace,
+ project_id: project
+ }
+
+ expect(response).to have_gitlab_http_status(422)
+ expect(json_response['error']).to eq("Specify at least one and at most #{Kaminari.config.default_per_page} branch names")
+ end
+
+ it 'returns the list of counts' do
+ get :diverging_commit_counts,
+ format: :json,
+ params: {
+ namespace_id: project.namespace,
+ project_id: project,
+ names: ['fix', 'add-pdf-file', 'branch-merged']
+ }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response.count).to be > 1
+ end
+ end
end
end
diff --git a/spec/controllers/projects/clusters_controller_spec.rb b/spec/controllers/projects/clusters_controller_spec.rb
index 8ac72df5d20..e1f6d571d27 100644
--- a/spec/controllers/projects/clusters_controller_spec.rb
+++ b/spec/controllers/projects/clusters_controller_spec.rb
@@ -7,7 +7,7 @@ describe Projects::ClustersController do
include GoogleApi::CloudPlatformHelpers
include KubernetesHelpers
- set(:project) { create(:project) }
+ let_it_be(:project) { create(:project) }
let(:user) { create(:user) }
@@ -536,7 +536,7 @@ describe Projects::ClustersController do
end
describe 'security' do
- set(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
+ let_it_be(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
it { expect { go }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) }
@@ -605,7 +605,7 @@ describe Projects::ClustersController do
end
describe 'security' do
- set(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
+ let_it_be(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
it { expect { go }.to be_allowed_for(:admin) }
it { expect { go }.to be_allowed_for(:owner).of(project) }
diff --git a/spec/controllers/projects/commit_controller_spec.rb b/spec/controllers/projects/commit_controller_spec.rb
index afd5cb15e0f..95112cfeabe 100644
--- a/spec/controllers/projects/commit_controller_spec.rb
+++ b/spec/controllers/projects/commit_controller_spec.rb
@@ -3,9 +3,10 @@
require 'spec_helper'
describe Projects::CommitController do
- set(:project) { create(:project, :repository) }
- set(:user) { create(:user) }
- let(:commit) { project.commit("master") }
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:user) { create(:user) }
+
+ let(:commit) { project.commit("master") }
let(:master_pickable_sha) { '7d3b0f7cff5f37573aea97cebfd5692ea1689924' }
let(:master_pickable_commit) { project.commit(master_pickable_sha) }
diff --git a/spec/controllers/projects/deploy_keys_controller_spec.rb b/spec/controllers/projects/deploy_keys_controller_spec.rb
index ccad76eaddd..8b1ca2efab2 100644
--- a/spec/controllers/projects/deploy_keys_controller_spec.rb
+++ b/spec/controllers/projects/deploy_keys_controller_spec.rb
@@ -5,6 +5,7 @@ require 'spec_helper'
describe Projects::DeployKeysController do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
+ let(:admin) { create(:admin) }
before do
project.add_maintainer(user)
@@ -37,7 +38,7 @@ describe Projects::DeployKeysController do
create(:deploy_keys_project, project: project2, deploy_key: deploy_key_internal)
end
- let!(:deploy_keys_actual_project) do
+ let!(:deploy_keys_project_actual) do
create(:deploy_keys_project, project: project, deploy_key: deploy_key_actual)
end
@@ -154,7 +155,7 @@ describe Projects::DeployKeysController do
context 'with admin' do
before do
- sign_in(create(:admin))
+ sign_in(admin)
end
it 'returns 302' do
@@ -219,7 +220,7 @@ describe Projects::DeployKeysController do
context 'with admin' do
before do
- sign_in(create(:admin))
+ sign_in(admin)
end
it 'returns 302' do
@@ -234,4 +235,80 @@ describe Projects::DeployKeysController do
end
end
end
+
+ describe 'PUT update' do
+ let(:extra_params) { {} }
+
+ subject do
+ put :update, params: extra_params.reverse_merge(id: deploy_key.id,
+ namespace_id: project.namespace,
+ project_id: project)
+ end
+
+ def deploy_key_params(title, can_push)
+ deploy_keys_projects_attributes = { '0' => { id: deploy_keys_project, can_push: can_push } }
+ { deploy_key: { title: title, deploy_keys_projects_attributes: deploy_keys_projects_attributes } }
+ end
+
+ let(:deploy_key) { create(:deploy_key, public: true) }
+ let(:project) { create(:project) }
+ let!(:deploy_keys_project) do
+ create(:deploy_keys_project, project: project, deploy_key: deploy_key)
+ end
+
+ context 'with project maintainer' do
+ before do
+ project.add_maintainer(user)
+ end
+
+ context 'public deploy key attached to project' do
+ let(:extra_params) { deploy_key_params('updated title', '1') }
+
+ it 'does not update the title of the deploy key' do
+ expect { subject }.not_to change { deploy_key.reload.title }
+ end
+
+ it 'updates can_push of deploy_keys_project' do
+ expect { subject }.to change { deploy_keys_project.reload.can_push }.from(false).to(true)
+ end
+ end
+ end
+
+ context 'with admin' do
+ before do
+ sign_in(admin)
+ end
+
+ context 'public deploy key attached to project' do
+ let(:extra_params) { deploy_key_params('updated title', '1') }
+
+ it 'updates the title of the deploy key' do
+ expect { subject }.to change { deploy_key.reload.title }.to('updated title')
+ end
+
+ it 'updates can_push of deploy_keys_project' do
+ expect { subject }.to change { deploy_keys_project.reload.can_push }.from(false).to(true)
+ end
+ end
+ end
+
+ context 'with admin as project maintainer' do
+ before do
+ sign_in(admin)
+ project.add_maintainer(admin)
+ end
+
+ context 'public deploy key attached to project' do
+ let(:extra_params) { deploy_key_params('updated title', '1') }
+
+ it 'updates the title of the deploy key' do
+ expect { subject }.to change { deploy_key.reload.title }.to('updated title')
+ end
+
+ it 'updates can_push of deploy_keys_project' do
+ expect { subject }.to change { deploy_keys_project.reload.can_push }.from(false).to(true)
+ end
+ end
+ end
+ end
end
diff --git a/spec/controllers/projects/deployments_controller_spec.rb b/spec/controllers/projects/deployments_controller_spec.rb
index b9ee69a617b..66112c95742 100644
--- a/spec/controllers/projects/deployments_controller_spec.rb
+++ b/spec/controllers/projects/deployments_controller_spec.rb
@@ -75,15 +75,13 @@ describe Projects::DeploymentsController do
}
end
- before do
+ it 'returns a metrics JSON document' do
expect_next_instance_of(DeploymentMetrics) do |deployment_metrics|
allow(deployment_metrics).to receive(:has_metrics?).and_return(true)
expect(deployment_metrics).to receive(:metrics).and_return(empty_metrics)
end
- end
- it 'returns a metrics JSON document' do
get :metrics, params: deployment_params(id: deployment.to_param)
expect(response).to be_ok
@@ -91,6 +89,19 @@ describe Projects::DeploymentsController do
expect(json_response['metrics']).to eq({})
expect(json_response['last_update']).to eq(42)
end
+
+ it 'returns a 404 if the deployment failed' do
+ failed_deployment = create(
+ :deployment,
+ :failed,
+ project: project,
+ environment: environment
+ )
+
+ get :metrics, params: deployment_params(id: failed_deployment.to_param)
+
+ expect(response).to have_gitlab_http_status(404)
+ end
end
end
end
diff --git a/spec/controllers/projects/discussions_controller_spec.rb b/spec/controllers/projects/discussions_controller_spec.rb
index e30b28a4bd5..6ed822bbb10 100644
--- a/spec/controllers/projects/discussions_controller_spec.rb
+++ b/spec/controllers/projects/discussions_controller_spec.rb
@@ -189,7 +189,7 @@ describe Projects::DiscussionsController do
context "when vue_mr_discussions cookie is present" do
before do
- allow(controller).to receive(:cookies).and_return({ vue_mr_discussions: 'true' })
+ cookies[:vue_mr_discussions] = 'true'
end
it "renders discussion with serializer" do
diff --git a/spec/controllers/projects/environments/prometheus_api_controller_spec.rb b/spec/controllers/projects/environments/prometheus_api_controller_spec.rb
index 45328482ad7..b12964f8d8b 100644
--- a/spec/controllers/projects/environments/prometheus_api_controller_spec.rb
+++ b/spec/controllers/projects/environments/prometheus_api_controller_spec.rb
@@ -3,9 +3,9 @@
require 'spec_helper'
describe Projects::Environments::PrometheusApiController do
- set(:project) { create(:project) }
- set(:environment) { create(:environment, project: project) }
- set(:user) { create(:user) }
+ let_it_be(:project) { create(:project) }
+ let_it_be(:environment) { create(:environment, project: project) }
+ let_it_be(:user) { create(:user) }
before do
project.add_reporter(user)
diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb
index 820ce159633..3fe5ff5feee 100644
--- a/spec/controllers/projects/environments_controller_spec.rb
+++ b/spec/controllers/projects/environments_controller_spec.rb
@@ -5,10 +5,10 @@ require 'spec_helper'
describe Projects::EnvironmentsController do
include MetricsDashboardHelpers
- set(:user) { create(:user) }
- set(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project) }
- set(:environment) do
+ let_it_be(:environment) do
create(:environment, name: 'production', project: project)
end
@@ -256,7 +256,7 @@ describe Projects::EnvironmentsController do
it 'loads the terminals for the environment' do
# In EE we have to stub EE::Environment since it overwrites the
# "terminals" method.
- expect_any_instance_of(defined?(EE) ? EE::Environment : Environment)
+ expect_any_instance_of(Gitlab.ee? ? EE::Environment : Environment)
.to receive(:terminals)
get :terminal, params: environment_params
@@ -282,7 +282,7 @@ describe Projects::EnvironmentsController do
it 'returns the first terminal for the environment' do
# In EE we have to stub EE::Environment since it overwrites the
# "terminals" method.
- expect_any_instance_of(defined?(EE) ? EE::Environment : Environment)
+ expect_any_instance_of(Gitlab.ee? ? EE::Environment : Environment)
.to receive(:terminals)
.and_return([:fake_terminal])
@@ -483,10 +483,8 @@ describe Projects::EnvironmentsController do
end
shared_examples_for 'the default dashboard' do
- all_dashboards = Feature.enabled?(:environment_metrics_show_multiple_dashboards)
-
it_behaves_like '200 response'
- it_behaves_like 'includes all dashboards' if all_dashboards
+ it_behaves_like 'includes all dashboards'
it 'is the default dashboard' do
get :metrics_dashboard, params: environment_params(dashboard_params)
@@ -618,16 +616,6 @@ describe Projects::EnvironmentsController do
it_behaves_like 'the default dashboard'
it_behaves_like 'dashboard can be specified'
it_behaves_like 'dashboard can be embedded'
-
- context 'when multiple dashboards is disabled' do
- before do
- stub_feature_flags(environment_metrics_show_multiple_dashboards: false)
- end
-
- it_behaves_like 'the default dashboard'
- it_behaves_like 'dashboard cannot be specified'
- it_behaves_like 'dashboard can be embedded'
- end
end
describe 'GET #search' do
diff --git a/spec/controllers/projects/error_tracking_controller_spec.rb b/spec/controllers/projects/error_tracking_controller_spec.rb
index d11ef24ef96..4c224e960a6 100644
--- a/spec/controllers/projects/error_tracking_controller_spec.rb
+++ b/spec/controllers/projects/error_tracking_controller_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe Projects::ErrorTrackingController do
- set(:project) { create(:project) }
- set(:user) { create(:user) }
+ let_it_be(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
before do
sign_in(user)
diff --git a/spec/controllers/projects/git_http_controller_spec.rb b/spec/controllers/projects/git_http_controller_spec.rb
index 88fa2236e33..b756dd5662d 100644
--- a/spec/controllers/projects/git_http_controller_spec.rb
+++ b/spec/controllers/projects/git_http_controller_spec.rb
@@ -22,5 +22,30 @@ describe Projects::GitHttpController do
expect(response.status).to eq(401)
end
+
+ context 'with exceptions' do
+ let(:project) { create(:project, :public, :repository) }
+
+ before do
+ allow(controller).to receive(:verify_workhorse_api!).and_return(true)
+ end
+
+ it 'returns 503 with GRPC Unavailable' do
+ allow(controller).to receive(:access_check).and_raise(GRPC::Unavailable)
+
+ get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' }
+
+ expect(response.status).to eq(503)
+ end
+
+ it 'returns 503 with timeout error' do
+ allow(controller).to receive(:access_check).and_raise(Gitlab::GitAccess::TimeoutError)
+
+ get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' }
+
+ expect(response.status).to eq(503)
+ expect(response.body).to eq 'Gitlab::GitAccess::TimeoutError'
+ end
+ end
end
end
diff --git a/spec/controllers/projects/grafana_api_controller_spec.rb b/spec/controllers/projects/grafana_api_controller_spec.rb
new file mode 100644
index 00000000000..352a364295b
--- /dev/null
+++ b/spec/controllers/projects/grafana_api_controller_spec.rb
@@ -0,0 +1,97 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Projects::GrafanaApiController do
+ let_it_be(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+
+ before do
+ project.add_reporter(user)
+ sign_in(user)
+ end
+
+ describe 'GET #proxy' do
+ let(:proxy_service) { instance_double(Grafana::ProxyService) }
+ let(:params) do
+ {
+ namespace_id: project.namespace.full_path,
+ project_id: project.name,
+ proxy_path: 'api/v1/query_range',
+ datasource_id: '1',
+ query: 'rate(relevant_metric)',
+ start: '1570441248',
+ end: '1570444848',
+ step: '900'
+ }
+ end
+
+ before do
+ allow(Grafana::ProxyService).to receive(:new).and_return(proxy_service)
+ allow(proxy_service).to receive(:execute).and_return(service_result)
+ end
+
+ shared_examples_for 'error response' do |http_status|
+ it "returns #{http_status}" do
+ get :proxy, params: params
+
+ expect(response).to have_gitlab_http_status(http_status)
+ expect(json_response['status']).to eq('error')
+ expect(json_response['message']).to eq('error message')
+ end
+ end
+
+ context 'with a successful result' do
+ let(:service_result) { { status: :success, body: '{}' } }
+
+ it 'returns a grafana datasource response' do
+ get :proxy, params: params
+
+ expect(Grafana::ProxyService)
+ .to have_received(:new)
+ .with(project, '1', 'api/v1/query_range',
+ params.slice(:query, :start, :end, :step).stringify_keys)
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to eq({})
+ end
+ end
+
+ context 'when the request is still unavailable' do
+ let(:service_result) { nil }
+
+ it 'returns 204 no content' do
+ get :proxy, params: params
+
+ expect(response).to have_gitlab_http_status(:no_content)
+ expect(json_response['status']).to eq('processing')
+ expect(json_response['message']).to eq('Not ready yet. Try again later.')
+ end
+ end
+
+ context 'when an error has occurred' do
+ context 'with an error accessing grafana' do
+ let(:service_result) do
+ {
+ http_status: :service_unavailable,
+ status: :error,
+ message: 'error message'
+ }
+ end
+
+ it_behaves_like 'error response', :service_unavailable
+ end
+
+ context 'with a processing error' do
+ let(:service_result) do
+ {
+ status: :error,
+ message: 'error message'
+ }
+ end
+
+ it_behaves_like 'error response', :bad_request
+ end
+ end
+ end
+end
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index ad57c29850b..c9558abab33 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -408,6 +408,7 @@ describe Projects::IssuesController do
context 'when user has access to update issue' do
before do
+ project.update!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
project.add_developer(user)
end
@@ -421,14 +422,30 @@ describe Projects::IssuesController do
context 'when Akismet is enabled and the issue is identified as spam' do
before do
stub_application_setting(recaptcha_enabled: true)
- allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true)
- allow_any_instance_of(AkismetService).to receive(:spam?).and_return(true)
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
+ end
+
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
+
+ it 'renders json with recaptcha_html' do
+ subject
+
+ expect(json_response).to have_key('recaptcha_html')
+ end
end
- it 'renders json with recaptcha_html' do
- subject
+ context 'when allow_possible_spam feature flag is true' do
+ it 'updates the issue' do
+ subject
- expect(json_response).to have_key('recaptcha_html')
+ expect(response).to have_http_status(:ok)
+ expect(issue.reload.title).to eq('New title')
+ end
end
end
end
@@ -681,13 +698,13 @@ describe Projects::IssuesController do
before do
project.update!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
stub_application_setting(recaptcha_enabled: true)
- allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true)
end
context 'when an issue is not identified as spam' do
before do
- allow_any_instance_of(described_class).to receive(:verify_recaptcha).and_return(false)
- allow_any_instance_of(AkismetService).to receive(:spam?).and_return(false)
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: false)
+ end
end
it 'normally updates the issue' do
@@ -696,45 +713,64 @@ describe Projects::IssuesController do
end
context 'when an issue is identified as spam' do
- before do
- allow_any_instance_of(AkismetService).to receive(:spam?).and_return(true)
- end
-
context 'when captcha is not verified' do
before do
- allow_any_instance_of(described_class).to receive(:verify_recaptcha).and_return(false)
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
end
- it 'rejects an issue recognized as a spam' do
- expect { update_issue }.not_to change { issue.reload.title }
- end
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
- it 'rejects an issue recognized as a spam when recaptcha disabled' do
- stub_application_setting(recaptcha_enabled: false)
+ it 'rejects an issue recognized as a spam' do
+ expect { update_issue }.not_to change { issue.reload.title }
+ end
- expect { update_issue }.not_to change { issue.reload.title }
- end
+ it 'rejects an issue recognized as a spam when recaptcha disabled' do
+ stub_application_setting(recaptcha_enabled: false)
- it 'creates a spam log' do
- update_issue(issue_params: { title: 'Spam title' })
+ expect { update_issue }.not_to change { issue.reload.title }
+ end
- spam_logs = SpamLog.all
+ it 'creates a spam log' do
+ expect { update_issue(issue_params: { title: 'Spam title' }) }
+ .to log_spam(title: 'Spam title', noteable_type: 'Issue')
+ end
- expect(spam_logs.count).to eq(1)
- expect(spam_logs.first.title).to eq('Spam title')
- expect(spam_logs.first.recaptcha_verified).to be_falsey
- end
+ it 'renders recaptcha_html json response' do
+ update_issue
+
+ expect(json_response).to have_key('recaptcha_html')
+ end
- it 'renders recaptcha_html json response' do
- update_issue
+ it 'returns 200 status' do
+ update_issue
- expect(json_response).to have_key('recaptcha_html')
+ expect(response).to have_gitlab_http_status(200)
+ end
end
- it 'returns 200 status' do
- update_issue
+ context 'when allow_possible_spam feature flag is true' do
+ it 'updates the issue recognized as spam' do
+ expect { update_issue }.to change { issue.reload.title }
+ end
- expect(response).to have_gitlab_http_status(200)
+ it 'creates a spam log' do
+ expect { update_issue(issue_params: { title: 'Spam title' }) }
+ .to log_spam(
+ title: 'Spam title', description: issue.description,
+ noteable_type: 'Issue', recaptcha_verified: false
+ )
+ end
+
+ it 'returns 200 status' do
+ update_issue
+
+ expect(response).to have_gitlab_http_status(200)
+ end
end
end
@@ -748,11 +784,6 @@ describe Projects::IssuesController do
additional_params: { spam_log_id: spam_logs.last.id, recaptcha_verification: true })
end
- before do
- allow_any_instance_of(described_class).to receive(:verify_recaptcha)
- .and_return(true)
- end
-
it 'returns 200 status' do
expect(response).to have_gitlab_http_status(200)
end
@@ -917,55 +948,72 @@ describe Projects::IssuesController do
context 'Akismet is enabled' do
before do
stub_application_setting(recaptcha_enabled: true)
- allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true)
end
context 'when an issue is not identified as spam' do
before do
- allow_any_instance_of(described_class).to receive(:verify_recaptcha).and_return(false)
- allow_any_instance_of(AkismetService).to receive(:spam?).and_return(false)
+ stub_feature_flags(allow_possible_spam: false)
+
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: false)
+ end
end
- it 'does not create an issue' do
- expect { post_new_issue(title: '') }.not_to change(Issue, :count)
+ it 'creates an issue' do
+ expect { post_new_issue(title: 'Some title') }.to change(Issue, :count)
end
end
context 'when an issue is identified as spam' do
- before do
- allow_any_instance_of(AkismetService).to receive(:spam?).and_return(true)
- end
-
context 'when captcha is not verified' do
def post_spam_issue
post_new_issue(title: 'Spam Title', description: 'Spam lives here')
end
before do
- allow_any_instance_of(described_class).to receive(:verify_recaptcha).and_return(false)
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
end
- it 'rejects an issue recognized as a spam' do
- expect { post_spam_issue }.not_to change(Issue, :count)
- end
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
- it 'creates a spam log' do
- post_spam_issue
- spam_logs = SpamLog.all
+ it 'rejects an issue recognized as a spam' do
+ expect { post_spam_issue }.not_to change(Issue, :count)
+ end
- expect(spam_logs.count).to eq(1)
- expect(spam_logs.first.title).to eq('Spam Title')
- expect(spam_logs.first.recaptcha_verified).to be_falsey
- end
+ it 'creates a spam log' do
+ expect { post_spam_issue }
+ .to log_spam(title: 'Spam Title', noteable_type: 'Issue', recaptcha_verified: false)
+ end
- it 'does not create an issue when it is not valid' do
- expect { post_new_issue(title: '') }.not_to change(Issue, :count)
+ it 'does not create an issue when it is not valid' do
+ expect { post_new_issue(title: '') }.not_to change(Issue, :count)
+ end
+
+ it 'does not create an issue when recaptcha is not enabled' do
+ stub_application_setting(recaptcha_enabled: false)
+
+ expect { post_spam_issue }.not_to change(Issue, :count)
+ end
end
- it 'does not create an issue when recaptcha is not enabled' do
- stub_application_setting(recaptcha_enabled: false)
+ context 'when allow_possible_spam feature flag is true' do
+ it 'creates an issue recognized as spam' do
+ expect { post_spam_issue }.to change(Issue, :count)
+ end
- expect { post_spam_issue }.not_to change(Issue, :count)
+ it 'creates a spam log' do
+ expect { post_spam_issue }
+ .to log_spam(title: 'Spam Title', noteable_type: 'Issue', recaptcha_verified: false)
+ end
+
+ it 'does not create an issue when it is not valid' do
+ expect { post_new_issue(title: '') }.not_to change(Issue, :count)
+ end
end
end
@@ -977,7 +1025,7 @@ describe Projects::IssuesController do
end
before do
- allow_any_instance_of(described_class).to receive(:verify_recaptcha).and_return(true)
+ expect(controller).to receive_messages(verify_recaptcha: true)
end
it 'accepts an issue after recaptcha is verified' do
@@ -1030,8 +1078,12 @@ describe Projects::IssuesController do
describe 'POST #mark_as_spam' do
context 'properly submits to Akismet' do
before do
- allow_any_instance_of(AkismetService).to receive_messages(submit_spam: true)
- allow_any_instance_of(ApplicationSetting).to receive_messages(akismet_enabled: true)
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(submit_spam: true)
+ end
+ expect_next_instance_of(ApplicationSetting) do |setting|
+ expect(setting).to receive_messages(akismet_enabled: true)
+ end
end
def post_spam
@@ -1128,6 +1180,7 @@ describe Projects::IssuesController do
name: emoji_name
})
end
+
let(:emoji_name) { 'thumbsup' }
it "toggles the award emoji" do
@@ -1266,7 +1319,9 @@ describe Projects::IssuesController do
end
it "shows error when upload fails" do
- allow_any_instance_of(UploadService).to receive(:execute).and_return(nil)
+ expect_next_instance_of(UploadService) do |upload_service|
+ expect(upload_service).to receive(:execute).and_return(nil)
+ end
import_csv
diff --git a/spec/controllers/projects/jobs_controller_spec.rb b/spec/controllers/projects/jobs_controller_spec.rb
index 53d32665b0c..90ccb884927 100644
--- a/spec/controllers/projects/jobs_controller_spec.rb
+++ b/spec/controllers/projects/jobs_controller_spec.rb
@@ -527,6 +527,7 @@ describe Projects::JobsController, :clean_gitlab_redis_shared_state do
describe 'GET trace.json' do
before do
+ stub_feature_flags(job_log_json: true)
get_trace
end
@@ -535,8 +536,119 @@ describe Projects::JobsController, :clean_gitlab_redis_shared_state do
it 'returns a trace' do
expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to match_response_schema('job/build_trace')
expect(json_response['id']).to eq job.id
expect(json_response['status']).to eq job.status
+ expect(json_response['state']).to be_present
+ expect(json_response['append']).not_to be_nil
+ expect(json_response['truncated']).not_to be_nil
+ expect(json_response['size']).to be_present
+ expect(json_response['total']).to be_present
+ expect(json_response['lines'].count).to be_positive
+ end
+ end
+
+ context 'when job has a trace' do
+ let(:job) { create(:ci_build, :trace_live, pipeline: pipeline) }
+
+ it 'returns a trace' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to match_response_schema('job/build_trace')
+ expect(json_response['id']).to eq job.id
+ expect(json_response['status']).to eq job.status
+ expect(json_response['lines']).to eq [{ 'content' => [{ 'text' => 'BUILD TRACE' }], 'offset' => 0 }]
+ end
+ end
+
+ context 'when job has no traces' do
+ let(:job) { create(:ci_build, pipeline: pipeline) }
+
+ it 'returns no traces' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to match_response_schema('job/build_trace')
+ expect(json_response['id']).to eq job.id
+ expect(json_response['status']).to eq job.status
+ expect(json_response['lines']).to be_nil
+ end
+ end
+
+ context 'when job has a trace with ANSI sequence and Unicode' do
+ let(:job) { create(:ci_build, :unicode_trace_live, pipeline: pipeline) }
+
+ it 'returns a trace with Unicode' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to match_response_schema('job/build_trace')
+ expect(json_response['id']).to eq job.id
+ expect(json_response['status']).to eq job.status
+ expect(json_response['lines'].flat_map {|l| l['content'].map { |c| c['text'] } }).to include("ヾ(´༎ຶД༎ຶ`)ノ")
+ end
+ end
+
+ context 'when trace artifact is in ObjectStorage' do
+ let(:url) { 'http://object-storage/trace' }
+ let(:file_path) { expand_fixture_path('trace/sample_trace') }
+ let!(:job) { create(:ci_build, :success, :trace_artifact, pipeline: pipeline) }
+
+ before do
+ allow_any_instance_of(JobArtifactUploader).to receive(:file_storage?) { false }
+ allow_any_instance_of(JobArtifactUploader).to receive(:url) { url }
+ allow_any_instance_of(JobArtifactUploader).to receive(:size) { File.size(file_path) }
+ end
+
+ context 'when there are no network issues' do
+ before do
+ stub_remote_url_206(url, file_path)
+
+ get_trace
+ end
+
+ it 'returns a trace' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response['id']).to eq job.id
+ expect(json_response['status']).to eq job.status
+ expect(json_response['lines'].count).to be_positive
+ end
+ end
+
+ context 'when there is a network issue' do
+ before do
+ stub_remote_url_500(url)
+ end
+
+ it 'returns a trace' do
+ expect { get_trace }.to raise_error(Gitlab::HttpIO::FailedToGetChunkError)
+ end
+ end
+ end
+
+ def get_trace
+ get :trace,
+ params: {
+ namespace_id: project.namespace,
+ project_id: project,
+ id: job.id
+ },
+ format: :json
+ end
+ end
+
+ describe 'GET legacy trace.json' do
+ before do
+ get_trace
+ end
+
+ context 'when job has a trace artifact' do
+ let(:job) { create(:ci_build, :trace_artifact, pipeline: pipeline) }
+
+ it 'returns a trace' do
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response['id']).to eq job.id
+ expect(json_response['status']).to eq job.status
+ expect(json_response['state']).to be_present
+ expect(json_response['append']).not_to be_nil
+ expect(json_response['truncated']).not_to be_nil
+ expect(json_response['size']).to be_present
+ expect(json_response['total']).to be_present
expect(json_response['html']).to eq(job.trace.html)
end
end
@@ -612,12 +724,13 @@ describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
def get_trace
- get :trace, params: {
- namespace_id: project.namespace,
- project_id: project,
- id: job.id
- },
- format: :json
+ get :trace,
+ params: {
+ namespace_id: project.namespace,
+ project_id: project,
+ id: job.id
+ },
+ format: :json
end
end
diff --git a/spec/controllers/projects/merge_requests/diffs_controller_spec.rb b/spec/controllers/projects/merge_requests/diffs_controller_spec.rb
index ac3e9901123..5c02e8d6461 100644
--- a/spec/controllers/projects/merge_requests/diffs_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests/diffs_controller_spec.rb
@@ -5,6 +5,49 @@ require 'spec_helper'
describe Projects::MergeRequests::DiffsController do
include ProjectForksHelper
+ shared_examples 'forked project with submodules' do
+ render_views
+
+ let(:project) { create(:project, :repository) }
+ let(:forked_project) { fork_project_with_submodules(project) }
+ let(:merge_request) { create(:merge_request_with_diffs, source_project: forked_project, source_branch: 'add-submodule-version-bump', target_branch: 'master', target_project: project) }
+
+ before do
+ project.add_developer(user)
+
+ merge_request.reload
+ go
+ end
+
+ it 'renders' do
+ expect(response).to be_successful
+ expect(response.body).to have_content('Subproject commit')
+ end
+ end
+
+ shared_examples 'persisted preferred diff view cookie' do
+ context 'with view param' do
+ before do
+ go(view: 'parallel')
+ end
+
+ it 'saves the preferred diff view in a cookie' do
+ expect(response.cookies['diff_view']).to eq('parallel')
+ end
+ end
+
+ context 'when the user cannot view the merge request' do
+ before do
+ project.team.truncate
+ go
+ end
+
+ it 'returns a 404' do
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+ end
+
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project) }
@@ -39,9 +82,9 @@ describe Projects::MergeRequests::DiffsController do
end
end
- context 'when note has no position' do
+ context 'when note is a legacy diff note' do
before do
- create(:legacy_diff_note_on_merge_request, project: project, noteable: merge_request, position: nil)
+ create(:legacy_diff_note_on_merge_request, project: project, noteable: merge_request)
end
it 'serializes merge request diff collection' do
@@ -51,34 +94,138 @@ describe Projects::MergeRequests::DiffsController do
end
end
- context 'with forked projects with submodules' do
- render_views
+ it_behaves_like 'forked project with submodules'
+ end
- let(:project) { create(:project, :repository) }
- let(:forked_project) { fork_project_with_submodules(project) }
- let(:merge_request) { create(:merge_request_with_diffs, source_project: forked_project, source_branch: 'add-submodule-version-bump', target_branch: 'master', target_project: project) }
+ it_behaves_like 'persisted preferred diff view cookie'
+ end
- before do
- project.add_developer(user)
+ describe 'GET diffs_metadata' do
+ def go(extra_params = {})
+ params = {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid,
+ format: 'json'
+ }
- merge_request.reload
- go
+ get :diffs_metadata, params: params.merge(extra_params)
+ end
+
+ context 'when not authorized' do
+ let(:another_user) { create(:user) }
+
+ before do
+ sign_in(another_user)
+ end
+
+ it 'returns 404 when not a member' do
+ go
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+
+ it 'returns 404 when visibility level is not enough' do
+ project.add_guest(another_user)
+
+ go
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'when diffable does not exists' do
+ it 'returns 404' do
+ go(diff_id: 9999)
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'with valid diff_id' do
+ it 'returns success' do
+ go(diff_id: merge_request.merge_request_diff.id)
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'serializes diffs metadata with expected arguments' do
+ expected_options = {
+ environment: nil,
+ merge_request: merge_request,
+ merge_request_diff: merge_request.merge_request_diff,
+ merge_request_diffs: merge_request.merge_request_diffs,
+ start_version: nil,
+ start_sha: nil,
+ commit: nil,
+ latest_diff: true
+ }
+
+ expect_next_instance_of(DiffsMetadataSerializer) do |instance|
+ expect(instance).to receive(:represent)
+ .with(an_instance_of(Gitlab::Diff::FileCollection::MergeRequestDiff), expected_options)
+ .and_call_original
end
- it 'renders' do
- expect(response).to be_successful
- expect(response.body).to have_content('Subproject commit')
+ go(diff_id: merge_request.merge_request_diff.id)
+ end
+ end
+
+ context 'with MR regular diff params' do
+ it 'returns success' do
+ go
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'serializes diffs metadata with expected arguments' do
+ expected_options = {
+ environment: nil,
+ merge_request: merge_request,
+ merge_request_diff: merge_request.merge_request_diff,
+ merge_request_diffs: merge_request.merge_request_diffs,
+ start_version: nil,
+ start_sha: nil,
+ commit: nil,
+ latest_diff: true
+ }
+
+ expect_next_instance_of(DiffsMetadataSerializer) do |instance|
+ expect(instance).to receive(:represent)
+ .with(an_instance_of(Gitlab::Diff::FileCollection::MergeRequestDiff), expected_options)
+ .and_call_original
end
+
+ go
end
end
- context 'with view' do
- before do
- go(view: 'parallel')
+ context 'with commit param' do
+ it 'returns success' do
+ go(commit_id: merge_request.diff_head_sha)
+
+ expect(response).to have_gitlab_http_status(200)
end
- it 'saves the preferred diff view in a cookie' do
- expect(response.cookies['diff_view']).to eq('parallel')
+ it 'serializes diffs metadata with expected arguments' do
+ expected_options = {
+ environment: nil,
+ merge_request: merge_request,
+ merge_request_diff: nil,
+ merge_request_diffs: merge_request.merge_request_diffs,
+ start_version: nil,
+ start_sha: nil,
+ commit: merge_request.diff_head_commit,
+ latest_diff: nil
+ }
+
+ expect_next_instance_of(DiffsMetadataSerializer) do |instance|
+ expect(instance).to receive(:represent)
+ .with(an_instance_of(Gitlab::Diff::FileCollection::Commit), expected_options)
+ .and_call_original
+ end
+
+ go(commit_id: merge_request.diff_head_sha)
end
end
end
@@ -154,4 +301,113 @@ describe Projects::MergeRequests::DiffsController do
end
end
end
+
+ describe 'GET diffs_batch' do
+ def go(extra_params = {})
+ params = {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid,
+ format: 'json'
+ }
+
+ get :diffs_batch, params: params.merge(extra_params)
+ end
+
+ context 'when feature is disabled' do
+ before do
+ stub_feature_flags(diffs_batch_load: false)
+ end
+
+ it 'returns 404' do
+ go
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'when not authorized' do
+ let(:other_user) { create(:user) }
+
+ before do
+ sign_in(other_user)
+ end
+
+ it 'returns 404' do
+ go
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'with default params' do
+ let(:expected_options) do
+ {
+ merge_request: merge_request,
+ pagination_data: {
+ current_page: 1,
+ next_page: nil,
+ total_pages: 1
+ }
+ }
+ end
+
+ it 'serializes paginated merge request diff collection' do
+ expect_next_instance_of(PaginatedDiffSerializer) do |instance|
+ expect(instance).to receive(:represent)
+ .with(an_instance_of(Gitlab::Diff::FileCollection::MergeRequestDiffBatch), expected_options)
+ .and_call_original
+ end
+
+ go
+ end
+ end
+
+ context 'with smaller diff batch params' do
+ let(:expected_options) do
+ {
+ merge_request: merge_request,
+ pagination_data: {
+ current_page: 2,
+ next_page: 3,
+ total_pages: 4
+ }
+ }
+ end
+
+ it 'serializes paginated merge request diff collection' do
+ expect_next_instance_of(PaginatedDiffSerializer) do |instance|
+ expect(instance).to receive(:represent)
+ .with(an_instance_of(Gitlab::Diff::FileCollection::MergeRequestDiffBatch), expected_options)
+ .and_call_original
+ end
+
+ go(page: 2, per_page: 5)
+ end
+ end
+
+ it_behaves_like 'forked project with submodules'
+ it_behaves_like 'persisted preferred diff view cookie'
+
+ context 'diff unfolding' do
+ let!(:unfoldable_diff_note) do
+ create(:diff_note_on_merge_request, :folded_position, project: project, noteable: merge_request)
+ end
+
+ let!(:diff_note) do
+ create(:diff_note_on_merge_request, project: project, noteable: merge_request)
+ end
+
+ it 'unfolds correct diff file positions' do
+ expect_next_instance_of(Gitlab::Diff::FileCollection::MergeRequestDiffBatch) do |instance|
+ expect(instance)
+ .to receive(:unfold_diff_files)
+ .with([unfoldable_diff_note.position])
+ .and_call_original
+ end
+
+ go
+ end
+ end
+ end
end
diff --git a/spec/controllers/projects/mirrors_controller_spec.rb b/spec/controllers/projects/mirrors_controller_spec.rb
index 51ce9e2544f..fb3dd75460a 100644
--- a/spec/controllers/projects/mirrors_controller_spec.rb
+++ b/spec/controllers/projects/mirrors_controller_spec.rb
@@ -6,7 +6,7 @@ describe Projects::MirrorsController do
include ReactiveCachingHelpers
describe 'setting up a remote mirror' do
- set(:project) { create(:project, :repository) }
+ let_it_be(:project) { create(:project, :repository) }
context 'when the current project is not a mirror' do
it 'allows to create a remote mirror' do
diff --git a/spec/controllers/projects/notes_controller_spec.rb b/spec/controllers/projects/notes_controller_spec.rb
index 4db77921f24..3ab191c0032 100644
--- a/spec/controllers/projects/notes_controller_spec.rb
+++ b/spec/controllers/projects/notes_controller_spec.rb
@@ -713,6 +713,7 @@ describe Projects::NotesController do
end
subject { post(:toggle_award_emoji, params: request_params.merge(name: emoji_name)) }
+
let(:emoji_name) { 'thumbsup' }
it "toggles the award emoji" do
diff --git a/spec/controllers/projects/pipeline_schedules_controller_spec.rb b/spec/controllers/projects/pipeline_schedules_controller_spec.rb
index 850ef9c92fb..63e2c8a339c 100644
--- a/spec/controllers/projects/pipeline_schedules_controller_spec.rb
+++ b/spec/controllers/projects/pipeline_schedules_controller_spec.rb
@@ -5,9 +5,9 @@ require 'spec_helper'
describe Projects::PipelineSchedulesController do
include AccessMatchersForController
- set(:user) { create(:user) }
- set(:project) { create(:project, :public, :repository) }
- set(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :public, :repository) }
+ let_it_be(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project) }
before do
project.add_developer(user)
@@ -60,8 +60,6 @@ describe Projects::PipelineSchedulesController do
end
describe 'GET #new' do
- set(:user) { create(:user) }
-
before do
project.add_developer(user)
sign_in(user)
@@ -77,8 +75,6 @@ describe Projects::PipelineSchedulesController do
describe 'POST #create' do
describe 'functionality' do
- set(:user) { create(:user) }
-
before do
project.add_developer(user)
sign_in(user)
@@ -149,7 +145,6 @@ describe Projects::PipelineSchedulesController do
describe 'PUT #update' do
describe 'functionality' do
- set(:user) { create(:user) }
let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project, owner: user) }
before do
@@ -383,7 +378,6 @@ describe Projects::PipelineSchedulesController do
end
describe 'POST #play', :clean_gitlab_redis_cache do
- set(:user) { create(:user) }
let(:ref) { 'master' }
before do
@@ -442,8 +436,6 @@ describe Projects::PipelineSchedulesController do
end
describe 'DELETE #destroy' do
- set(:user) { create(:user) }
-
context 'when a developer makes the request' do
before do
project.add_developer(user)
diff --git a/spec/controllers/projects/pipelines_controller_spec.rb b/spec/controllers/projects/pipelines_controller_spec.rb
index 212d8b15252..e3ad36f8d24 100644
--- a/spec/controllers/projects/pipelines_controller_spec.rb
+++ b/spec/controllers/projects/pipelines_controller_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
describe Projects::PipelinesController do
include ApiHelpers
- set(:user) { create(:user) }
+ let_it_be(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) }
let(:feature) { ProjectFeature::ENABLED }
@@ -217,6 +217,193 @@ describe Projects::PipelinesController do
end
end
+ context 'with triggered pipelines' do
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:source_project) { create(:project, :repository) }
+ let_it_be(:target_project) { create(:project, :repository) }
+ let_it_be(:root_pipeline) { create_pipeline(project) }
+ let_it_be(:source_pipeline) { create_pipeline(source_project) }
+ let_it_be(:source_of_source_pipeline) { create_pipeline(source_project) }
+ let_it_be(:target_pipeline) { create_pipeline(target_project) }
+ let_it_be(:target_of_target_pipeline) { create_pipeline(target_project) }
+
+ before do
+ create_link(source_of_source_pipeline, source_pipeline)
+ create_link(source_pipeline, root_pipeline)
+ create_link(root_pipeline, target_pipeline)
+ create_link(target_pipeline, target_of_target_pipeline)
+ end
+
+ shared_examples 'not expanded' do
+ let(:expected_stages) { be_nil }
+
+ it 'does return base details' do
+ get_pipeline_json(root_pipeline)
+
+ expect(json_response['triggered_by']).to include('id' => source_pipeline.id)
+ expect(json_response['triggered']).to contain_exactly(
+ include('id' => target_pipeline.id))
+ end
+
+ it 'does not expand triggered_by pipeline' do
+ get_pipeline_json(root_pipeline)
+
+ triggered_by = json_response['triggered_by']
+ expect(triggered_by['triggered_by']).to be_nil
+ expect(triggered_by['triggered']).to be_nil
+ expect(triggered_by['details']['stages']).to expected_stages
+ end
+
+ it 'does not expand triggered pipelines' do
+ get_pipeline_json(root_pipeline)
+
+ first_triggered = json_response['triggered'].first
+ expect(first_triggered['triggered_by']).to be_nil
+ expect(first_triggered['triggered']).to be_nil
+ expect(first_triggered['details']['stages']).to expected_stages
+ end
+ end
+
+ shared_examples 'expanded' do
+ it 'does return base details' do
+ get_pipeline_json(root_pipeline)
+
+ expect(json_response['triggered_by']).to include('id' => source_pipeline.id)
+ expect(json_response['triggered']).to contain_exactly(
+ include('id' => target_pipeline.id))
+ end
+
+ it 'does expand triggered_by pipeline' do
+ get_pipeline_json(root_pipeline)
+
+ triggered_by = json_response['triggered_by']
+ expect(triggered_by['triggered_by']).to include(
+ 'id' => source_of_source_pipeline.id)
+ expect(triggered_by['details']['stages']).not_to be_nil
+ end
+
+ it 'does not recursively expand triggered_by' do
+ get_pipeline_json(root_pipeline)
+
+ triggered_by = json_response['triggered_by']
+ expect(triggered_by['triggered']).to be_nil
+ end
+
+ it 'does expand triggered pipelines' do
+ get_pipeline_json(root_pipeline)
+
+ first_triggered = json_response['triggered'].first
+ expect(first_triggered['triggered']).to contain_exactly(
+ include('id' => target_of_target_pipeline.id))
+ expect(first_triggered['details']['stages']).not_to be_nil
+ end
+
+ it 'does not recursively expand triggered' do
+ get_pipeline_json(root_pipeline)
+
+ first_triggered = json_response['triggered'].first
+ expect(first_triggered['triggered_by']).to be_nil
+ end
+ end
+
+ context 'when it does have permission to read other projects' do
+ before do
+ source_project.add_developer(user)
+ target_project.add_developer(user)
+ end
+
+ context 'when not-expanding any pipelines' do
+ let(:expanded) { nil }
+
+ it_behaves_like 'not expanded'
+ end
+
+ context 'when expanding non-existing pipeline' do
+ let(:expanded) { [-1] }
+
+ it_behaves_like 'not expanded'
+ end
+
+ context 'when expanding pipeline that is not directly expandable' do
+ let(:expanded) { [source_of_source_pipeline.id, target_of_target_pipeline.id] }
+
+ it_behaves_like 'not expanded'
+ end
+
+ context 'when expanding self' do
+ let(:expanded) { [root_pipeline.id] }
+
+ context 'it does not recursively expand pipelines' do
+ it_behaves_like 'not expanded'
+ end
+ end
+
+ context 'when expanding source and target pipeline' do
+ let(:expanded) { [source_pipeline.id, target_pipeline.id] }
+
+ it_behaves_like 'expanded'
+
+ context 'when expand depth is limited to 1' do
+ before do
+ stub_const('TriggeredPipelineEntity::MAX_EXPAND_DEPTH', 1)
+ end
+
+ it_behaves_like 'not expanded' do
+ # We expect that triggered/triggered_by is not expanded,
+ # but we still return details.stages for that pipeline
+ let(:expected_stages) { be_a(Array) }
+ end
+ end
+ end
+
+ context 'when expanding all' do
+ let(:expanded) do
+ [
+ source_of_source_pipeline.id,
+ source_pipeline.id,
+ root_pipeline.id,
+ target_pipeline.id,
+ target_of_target_pipeline.id
+ ]
+ end
+
+ it_behaves_like 'expanded'
+ end
+ end
+
+ context 'when does not have permission to read other projects' do
+ let(:expanded) { [source_pipeline.id, target_pipeline.id] }
+
+ it_behaves_like 'not expanded'
+ end
+
+ def create_pipeline(project)
+ create(:ci_empty_pipeline, project: project).tap do |pipeline|
+ create(:ci_build, pipeline: pipeline, stage: 'test', name: 'rspec')
+ end
+ end
+
+ def create_link(source_pipeline, pipeline)
+ source_pipeline.sourced_pipelines.create!(
+ source_job: source_pipeline.builds.all.sample,
+ source_project: source_pipeline.project,
+ project: pipeline.project,
+ pipeline: pipeline
+ )
+ end
+
+ def get_pipeline_json(pipeline)
+ params = {
+ namespace_id: pipeline.project.namespace,
+ project_id: pipeline.project,
+ id: pipeline,
+ expanded: expanded
+ }
+
+ get :show, params: params.compact, format: :json
+ end
+ end
+
def get_pipeline_json
get :show, params: { namespace_id: project.namespace, project_id: project, id: pipeline }, format: :json
end
@@ -398,6 +585,76 @@ describe Projects::PipelinesController do
end
end
+ describe 'GET test_report.json' do
+ subject(:get_test_report_json) do
+ post :test_report, params: {
+ namespace_id: project.namespace,
+ project_id: project,
+ id: pipeline.id
+ },
+ format: :json
+ end
+
+ context 'when feature is enabled' do
+ before do
+ stub_feature_flags(junit_pipeline_view: true)
+ end
+
+ context 'when pipeline does not have a test report' do
+ let(:pipeline) { create(:ci_pipeline, project: project) }
+
+ it 'renders an empty test report' do
+ get_test_report_json
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response['total_count']).to eq(0)
+ end
+ end
+
+ context 'when pipeline has a test report' do
+ let(:pipeline) { create(:ci_pipeline, :with_test_reports, project: project) }
+
+ it 'renders the test report' do
+ get_test_report_json
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response['total_count']).to eq(4)
+ end
+ end
+
+ context 'when pipeline has corrupt test reports' do
+ let(:pipeline) { create(:ci_pipeline, project: project) }
+
+ before do
+ job = create(:ci_build, pipeline: pipeline)
+ create(:ci_job_artifact, :junit_with_corrupted_data, job: job, project: project)
+ end
+
+ it 'renders the test reports' do
+ get_test_report_json
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response['status']).to eq('error_parsing_report')
+ end
+ end
+ end
+
+ context 'when feature is disabled' do
+ let(:pipeline) { create(:ci_empty_pipeline, project: project) }
+
+ before do
+ stub_feature_flags(junit_pipeline_view: false)
+ end
+
+ it 'renders empty response' do
+ get_test_report_json
+
+ expect(response).to have_gitlab_http_status(:no_content)
+ expect(response.body).to be_empty
+ end
+ end
+ end
+
describe 'GET latest' do
let(:branch_main) { project.repository.branches[0] }
let(:branch_secondary) { project.repository.branches[1] }
diff --git a/spec/controllers/projects/pipelines_settings_controller_spec.rb b/spec/controllers/projects/pipelines_settings_controller_spec.rb
index 3656b4e3771..16a43f62bd5 100644
--- a/spec/controllers/projects/pipelines_settings_controller_spec.rb
+++ b/spec/controllers/projects/pipelines_settings_controller_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe Projects::PipelinesSettingsController do
- set(:user) { create(:user) }
- set(:project_auto_devops) { create(:project_auto_devops) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project_auto_devops) { create(:project_auto_devops) }
let(:project) { project_auto_devops.project }
before do
diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/spec/controllers/projects/project_members_controller_spec.rb
index 5130e26c928..2f473d395ad 100644
--- a/spec/controllers/projects/project_members_controller_spec.rb
+++ b/spec/controllers/projects/project_members_controller_spec.rb
@@ -4,7 +4,7 @@ require('spec_helper')
describe Projects::ProjectMembersController do
let(:user) { create(:user) }
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
describe 'GET index' do
it 'has the project_members address with a 200 status code' do
diff --git a/spec/controllers/projects/registry/repositories_controller_spec.rb b/spec/controllers/projects/registry/repositories_controller_spec.rb
index 63d84b366d3..192e4ce2e73 100644
--- a/spec/controllers/projects/registry/repositories_controller_spec.rb
+++ b/spec/controllers/projects/registry/repositories_controller_spec.rb
@@ -40,6 +40,12 @@ describe Projects::Registry::RepositoriesController do
expect(response).to have_gitlab_http_status(:ok)
end
+ it 'tracks the event' do
+ expect(Gitlab::Tracking).to receive(:event).with(anything, 'list_repositories', {})
+
+ go_to_index
+ end
+
it 'creates a root container repository' do
expect { go_to_index }.to change { ContainerRepository.all.count }.by(1)
expect(ContainerRepository.first).to be_root_repository
@@ -92,8 +98,16 @@ describe Projects::Registry::RepositoriesController do
expect(DeleteContainerRepositoryWorker).to receive(:perform_async).with(user.id, repository.id)
delete_repository(repository)
+
expect(response).to have_gitlab_http_status(:no_content)
end
+
+ it 'tracks the event' do
+ expect(Gitlab::Tracking).to receive(:event).with(anything, 'delete_repository', {})
+ allow(DeleteContainerRepositoryWorker).to receive(:perform_async).with(user.id, repository.id)
+
+ delete_repository(repository)
+ end
end
end
end
diff --git a/spec/controllers/projects/registry/tags_controller_spec.rb b/spec/controllers/projects/registry/tags_controller_spec.rb
index c6e063d8229..5ab32b7d81d 100644
--- a/spec/controllers/projects/registry/tags_controller_spec.rb
+++ b/spec/controllers/projects/registry/tags_controller_spec.rb
@@ -10,6 +10,8 @@ describe Projects::Registry::TagsController do
create(:container_repository, name: 'image', project: project)
end
+ let(:service) { double('service') }
+
before do
sign_in(user)
stub_container_registry_config(enabled: true)
@@ -36,6 +38,12 @@ describe Projects::Registry::TagsController do
expect(response).to match_response_schema('registry/tags')
expect(response).to include_pagination_headers
end
+
+ it 'tracks the event' do
+ expect(Gitlab::Tracking).to receive(:event).with(anything, 'list_tags', {})
+
+ get_tags
+ end
end
context 'when user can read the registry' do
@@ -84,17 +92,24 @@ describe Projects::Registry::TagsController do
context 'when there is matching tag present' do
before do
- stub_container_registry_tags(repository: repository.path, tags: %w[rc1 test.])
+ stub_container_registry_tags(repository: repository.path, tags: %w[rc1], with_manifest: true)
end
it 'makes it possible to delete regular tag' do
- expect_any_instance_of(ContainerRegistry::Tag).to receive(:delete)
+ expect_delete_tags(%w[rc1])
destroy_tag('rc1')
end
it 'makes it possible to delete a tag that ends with a dot' do
- expect_any_instance_of(ContainerRegistry::Tag).to receive(:delete)
+ expect_delete_tags(%w[test.])
+
+ destroy_tag('test.')
+ end
+
+ it 'tracks the event' do
+ expect_delete_tags(%w[test.])
+ expect(controller).to receive(:track_event).with(:delete_tag)
destroy_tag('test.')
end
@@ -125,11 +140,19 @@ describe Projects::Registry::TagsController do
stub_container_registry_tags(repository: repository.path, tags: %w[rc1 test.])
end
+ let(:tags) { %w[tc1 test.] }
+
it 'makes it possible to delete tags in bulk' do
- allow_any_instance_of(ContainerRegistry::Tag).to receive(:delete) { |*args| ContainerRegistry::Tag.delete(*args) }
- expect(ContainerRegistry::Tag).to receive(:delete).exactly(2).times
+ expect_delete_tags(tags)
+
+ bulk_destroy_tags(tags)
+ end
+
+ it 'tracks the event' do
+ expect_delete_tags(tags)
+ expect(Gitlab::Tracking).to receive(:event).with(anything, 'delete_tag_bulk', {})
- bulk_destroy_tags(['rc1', 'test.'])
+ bulk_destroy_tags(tags)
end
end
end
@@ -146,4 +169,9 @@ describe Projects::Registry::TagsController do
format: :json
end
end
+
+ def expect_delete_tags(tags, status = :success)
+ expect(service).to receive(:execute).with(repository) { { status: status } }
+ expect(Projects::ContainerRepository::DeleteTagsService).to receive(:new).with(repository.project, user, tags: tags) { service }
+ end
end
diff --git a/spec/controllers/projects/serverless/functions_controller_spec.rb b/spec/controllers/projects/serverless/functions_controller_spec.rb
index 9f1ef3a4be8..eccc8e1d5de 100644
--- a/spec/controllers/projects/serverless/functions_controller_spec.rb
+++ b/spec/controllers/projects/serverless/functions_controller_spec.rb
@@ -107,26 +107,50 @@ describe Projects::Serverless::FunctionsController do
end
end
- context 'valid data', :use_clean_rails_memory_store_caching do
- before do
- stub_kubeclient_service_pods
- stub_reactive_cache(knative_services_finder,
- {
- services: kube_knative_services_body(namespace: namespace.namespace, name: cluster.project.name)["items"],
- pods: kube_knative_pods_body(cluster.project.name, namespace.namespace)["items"]
- },
- *knative_services_finder.cache_args)
+ context 'with valid data', :use_clean_rails_memory_store_caching do
+ shared_examples 'GET #show with valid data' do
+ it 'has a valid function name' do
+ get :show, params: params({ format: :json, environment_id: "*", id: cluster.project.name })
+ expect(response).to have_gitlab_http_status(200)
+
+ expect(json_response).to include(
+ "name" => project.name,
+ "url" => "http://#{project.name}.#{namespace.namespace}.example.com",
+ "podcount" => 1
+ )
+ end
end
- it 'has a valid function name' do
- get :show, params: params({ format: :json, environment_id: "*", id: cluster.project.name })
- expect(response).to have_gitlab_http_status(200)
+ context 'on Knative 0.5' do
+ before do
+ stub_kubeclient_service_pods
+ stub_reactive_cache(knative_services_finder,
+ {
+ services: kube_knative_services_body(
+ legacy_knative: true,
+ namespace: namespace.namespace,
+ name: cluster.project.name
+ )["items"],
+ pods: kube_knative_pods_body(cluster.project.name, namespace.namespace)["items"]
+ },
+ *knative_services_finder.cache_args)
+ end
- expect(json_response).to include(
- "name" => project.name,
- "url" => "http://#{project.name}.#{namespace.namespace}.example.com",
- "podcount" => 1
- )
+ include_examples 'GET #show with valid data'
+ end
+
+ context 'on Knative 0.6 or 0.7' do
+ before do
+ stub_kubeclient_service_pods
+ stub_reactive_cache(knative_services_finder,
+ {
+ services: kube_knative_services_body(namespace: namespace.namespace, name: cluster.project.name)["items"],
+ pods: kube_knative_pods_body(cluster.project.name, namespace.namespace)["items"]
+ },
+ *knative_services_finder.cache_args)
+ end
+
+ include_examples 'GET #show with valid data'
end
end
end
@@ -141,38 +165,60 @@ describe Projects::Serverless::FunctionsController do
end
describe 'GET #index with data', :use_clean_rails_memory_store_caching do
- before do
- stub_kubeclient_service_pods
- stub_reactive_cache(knative_services_finder,
- {
- services: kube_knative_services_body(namespace: namespace.namespace, name: cluster.project.name)["items"],
- pods: kube_knative_pods_body(cluster.project.name, namespace.namespace)["items"]
- },
- *knative_services_finder.cache_args)
+ shared_examples 'GET #index with data' do
+ it 'has data' do
+ get :index, params: params({ format: :json })
+
+ expect(response).to have_gitlab_http_status(200)
+
+ expect(json_response).to match({
+ "knative_installed" => "checking",
+ "functions" => [
+ a_hash_including(
+ "name" => project.name,
+ "url" => "http://#{project.name}.#{namespace.namespace}.example.com"
+ )
+ ]
+ })
+ end
+
+ it 'has data in html' do
+ get :index, params: params
+
+ expect(response).to have_gitlab_http_status(200)
+ end
end
- it 'has data' do
- get :index, params: params({ format: :json })
-
- expect(response).to have_gitlab_http_status(200)
-
- expect(json_response).to match(
- {
- "knative_installed" => "checking",
- "functions" => [
- a_hash_including(
- "name" => project.name,
- "url" => "http://#{project.name}.#{namespace.namespace}.example.com"
- )
- ]
- }
- )
+ context 'on Knative 0.5' do
+ before do
+ stub_kubeclient_service_pods
+ stub_reactive_cache(knative_services_finder,
+ {
+ services: kube_knative_services_body(
+ legacy_knative: true,
+ namespace: namespace.namespace,
+ name: cluster.project.name
+ )["items"],
+ pods: kube_knative_pods_body(cluster.project.name, namespace.namespace)["items"]
+ },
+ *knative_services_finder.cache_args)
+ end
+
+ include_examples 'GET #index with data'
end
- it 'has data in html' do
- get :index, params: params
+ context 'on Knative 0.6 or 0.7' do
+ before do
+ stub_kubeclient_service_pods
+ stub_reactive_cache(knative_services_finder,
+ {
+ services: kube_knative_services_body(namespace: namespace.namespace, name: cluster.project.name)["items"],
+ pods: kube_knative_pods_body(cluster.project.name, namespace.namespace)["items"]
+ },
+ *knative_services_finder.cache_args)
+ end
- expect(response).to have_gitlab_http_status(200)
+ include_examples 'GET #index with data'
end
end
end
diff --git a/spec/controllers/projects/settings/ci_cd_controller_spec.rb b/spec/controllers/projects/settings/ci_cd_controller_spec.rb
index 5bfbcf6eeb5..c67e7f7dadd 100644
--- a/spec/controllers/projects/settings/ci_cd_controller_spec.rb
+++ b/spec/controllers/projects/settings/ci_cd_controller_spec.rb
@@ -3,8 +3,8 @@
require('spec_helper')
describe Projects::Settings::CiCdController do
- set(:user) { create(:user) }
- set(:project_auto_devops) { create(:project_auto_devops) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project_auto_devops) { create(:project_auto_devops) }
let(:project) { project_auto_devops.project }
before do
@@ -78,6 +78,7 @@ describe Projects::Settings::CiCdController do
describe 'PUT #reset_registration_token' do
subject { put :reset_registration_token, params: { namespace_id: project.namespace, project_id: project } }
+
it 'resets runner registration token' do
expect { subject }.to change { project.reload.runners_token }
end
@@ -215,6 +216,30 @@ describe Projects::Settings::CiCdController do
expect(project.ci_default_git_depth).to eq(10)
end
end
+
+ context 'when max_artifacts_size is specified' do
+ let(:params) { { max_artifacts_size: 10 } }
+
+ context 'and user is not an admin' do
+ it 'does not set max_artifacts_size' do
+ subject
+
+ project.reload
+ expect(project.max_artifacts_size).to be_nil
+ end
+ end
+
+ context 'and user is an admin' do
+ let(:user) { create(:admin) }
+
+ it 'sets max_artifacts_size' do
+ subject
+
+ project.reload
+ expect(project.max_artifacts_size).to eq(10)
+ end
+ end
+ end
end
end
end
diff --git a/spec/controllers/projects/settings/operations_controller_spec.rb b/spec/controllers/projects/settings/operations_controller_spec.rb
index aa9cd41ed19..0b34656e9e2 100644
--- a/spec/controllers/projects/settings/operations_controller_spec.rb
+++ b/spec/controllers/projects/settings/operations_controller_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe Projects::Settings::OperationsController do
- set(:user) { create(:user) }
- set(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project) }
before do
sign_in(user)
@@ -180,6 +180,21 @@ describe Projects::Settings::OperationsController do
end
end
+ context 'grafana integration' do
+ describe 'PATCH #update' do
+ let(:params) do
+ {
+ grafana_integration_attributes: {
+ grafana_url: 'https://grafana.gitlab.com',
+ token: 'eyJrIjoicDRlRTREdjhhOEZ5WjZPWXUzazJOSW0zZHJUejVOd3IiLCJuIjoiVGVzdCBLZXkiLCJpZCI6MX0='
+ }
+ }
+ end
+
+ it_behaves_like 'PATCHable'
+ end
+ end
+
private
def project_params(project, params = {})
diff --git a/spec/controllers/projects/snippets_controller_spec.rb b/spec/controllers/projects/snippets_controller_spec.rb
index b13534b9088..042a5542786 100644
--- a/spec/controllers/projects/snippets_controller_spec.rb
+++ b/spec/controllers/projects/snippets_controller_spec.rb
@@ -111,7 +111,7 @@ describe Projects::SnippetsController do
it 'creates a spam log' do
expect { create_snippet(project, visibility_level: Snippet::PUBLIC) }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Title', user_id: user.id, noteable_type: 'ProjectSnippet')
end
it 'renders :new with recaptcha disabled' do
@@ -192,7 +192,7 @@ describe Projects::SnippetsController do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: user.id, noteable_type: 'ProjectSnippet')
end
it 'renders :edit with recaptcha disabled' do
@@ -237,7 +237,7 @@ describe Projects::SnippetsController do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo', visibility_level: Snippet::PUBLIC) }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: user.id, noteable_type: 'ProjectSnippet')
end
it 'renders :edit with recaptcha disabled' do
diff --git a/spec/controllers/projects/templates_controller_spec.rb b/spec/controllers/projects/templates_controller_spec.rb
index d5ef2b0e114..07b8a36fefc 100644
--- a/spec/controllers/projects/templates_controller_spec.rb
+++ b/spec/controllers/projects/templates_controller_spec.rb
@@ -99,4 +99,44 @@ describe Projects::TemplatesController do
include_examples 'renders 404 when params are invalid'
end
end
+
+ describe '#names' do
+ before do
+ project.add_developer(user)
+ sign_in(user)
+ end
+
+ shared_examples 'template names request' do
+ it 'returns the template names' do
+ get(:names, params: { namespace_id: project.namespace, template_type: template_type, project_id: project }, format: :json)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response.size).to eq(1)
+ expect(json_response[0]['name']).to eq(expected_template_name)
+ end
+
+ it 'fails for user with no access' do
+ other_user = create(:user)
+ sign_in(other_user)
+
+ get(:names, params: { namespace_id: project.namespace, template_type: template_type, project_id: project }, format: :json)
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'when querying for issue templates' do
+ it_behaves_like 'template names request' do
+ let(:template_type) { 'issue' }
+ let(:expected_template_name) { 'issue_template' }
+ end
+ end
+
+ context 'when querying for merge_request templates' do
+ it_behaves_like 'template names request' do
+ let(:template_type) { 'merge_request' }
+ let(:expected_template_name) { 'merge_request_template' }
+ end
+ end
+ end
end
diff --git a/spec/controllers/projects/wikis_controller_spec.rb b/spec/controllers/projects/wikis_controller_spec.rb
index 6fea6bca4f2..f46da908218 100644
--- a/spec/controllers/projects/wikis_controller_spec.rb
+++ b/spec/controllers/projects/wikis_controller_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe Projects::WikisController do
- set(:project) { create(:project, :public, :repository) }
- set(:user) { project.owner }
+ let_it_be(:project) { create(:project, :public, :repository) }
+ let(:user) { project.owner }
let(:project_wiki) { ProjectWiki.new(project, user) }
let(:wiki) { project_wiki.wiki }
let(:wiki_title) { 'page title test' }
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index c732caa6160..ea7dd78329a 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -149,7 +149,7 @@ describe ProjectsController do
end
context 'when the storage is not available', :broken_storage do
- set(:project) { create(:project, :broken_storage) }
+ let_it_be(:project) { create(:project, :broken_storage) }
before do
project.add_developer(user)
diff --git a/spec/controllers/registrations_controller_spec.rb b/spec/controllers/registrations_controller_spec.rb
index 5d87dbdee8b..ebeed94c274 100644
--- a/spec/controllers/registrations_controller_spec.rb
+++ b/spec/controllers/registrations_controller_spec.rb
@@ -114,9 +114,14 @@ describe RegistrationsController do
context 'when invisible captcha is enabled' do
before do
stub_feature_flags(invisible_captcha: true)
+ InvisibleCaptcha.timestamp_enabled = true
InvisibleCaptcha.timestamp_threshold = treshold
end
+ after do
+ InvisibleCaptcha.timestamp_enabled = false
+ end
+
let(:treshold) { 4 }
let(:session_params) { { invisible_captcha_timestamp: form_rendered_time.iso8601 } }
let(:form_rendered_time) { Time.current }
diff --git a/spec/controllers/search_controller_spec.rb b/spec/controllers/search_controller_spec.rb
index 3e0d53a6573..3dcafae295a 100644
--- a/spec/controllers/search_controller_spec.rb
+++ b/spec/controllers/search_controller_spec.rb
@@ -67,7 +67,7 @@ describe SearchController do
using RSpec::Parameterized::TableSyntax
render_views
- set(:project) { create(:project, :public, :repository, :wiki_repo) }
+ let_it_be(:project) { create(:project, :public, :repository, :wiki_repo) }
before do
expect(::Gitlab::GitalyClient).to receive(:allow_ref_name_caching).and_call_original
diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb
index 68b7bf61231..2108cf1c8ae 100644
--- a/spec/controllers/sessions_controller_spec.rb
+++ b/spec/controllers/sessions_controller_spec.rb
@@ -61,6 +61,25 @@ describe SessionsController do
expect(subject.current_user).to eq user
end
+ context 'a deactivated user' do
+ before do
+ user.deactivate!
+ post(:create, params: { user: user_params })
+ end
+
+ it 'is allowed to login' do
+ expect(subject.current_user).to eq user
+ end
+
+ it 'activates the user' do
+ expect(subject.current_user.active?).to be_truthy
+ end
+
+ it 'shows reactivation flash message after logging in' do
+ expect(flash[:notice]).to eq('Welcome back! Your account had been deactivated due to inactivity but is now reactivated.')
+ end
+ end
+
context 'with password authentication disabled' do
before do
stub_application_setting(password_authentication_enabled_for_web: false)
diff --git a/spec/controllers/snippets_controller_spec.rb b/spec/controllers/snippets_controller_spec.rb
index 1b3a8965342..e892c736c69 100644
--- a/spec/controllers/snippets_controller_spec.rb
+++ b/spec/controllers/snippets_controller_spec.rb
@@ -269,7 +269,7 @@ describe SnippetsController do
it 'creates a spam log' do
expect { create_snippet(visibility_level: Snippet::PUBLIC) }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Title', user: user, noteable_type: 'PersonalSnippet')
end
it 'renders :new with recaptcha disabled' do
@@ -345,7 +345,7 @@ describe SnippetsController do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo', visibility_level: Snippet::PUBLIC) }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user: user, noteable_type: 'PersonalSnippet')
end
it 'renders :edit with recaptcha disabled' do
@@ -389,8 +389,8 @@ describe SnippetsController do
end
it 'creates a spam log' do
- expect { update_snippet(title: 'Foo') }
- .to change { SpamLog.count }.by(1)
+ expect {update_snippet(title: 'Foo') }
+ .to log_spam(title: 'Foo', user: user, noteable_type: 'PersonalSnippet')
end
it 'renders :edit with recaptcha disabled' do
diff --git a/spec/controllers/uploads_controller_spec.rb b/spec/controllers/uploads_controller_spec.rb
index 5f4a6bf8ee7..dd7ab4f9d47 100644
--- a/spec/controllers/uploads_controller_spec.rb
+++ b/spec/controllers/uploads_controller_spec.rb
@@ -1,16 +1,15 @@
# frozen_string_literal: true
require 'spec_helper'
-shared_examples 'content not cached without revalidation' do
+shared_examples 'content 5 min private cached with revalidation' do
it 'ensures content will not be cached without revalidation' do
- expect(subject['Cache-Control']).to eq('max-age=0, private, must-revalidate')
+ expect(subject['Cache-Control']).to eq('max-age=300, private, must-revalidate')
end
end
-shared_examples 'content not cached without revalidation and no-store' do
+shared_examples 'content long term private cached with revalidation' do
it 'ensures content will not be cached without revalidation' do
- # Fixed in newer versions of ActivePack, it will only output a single `private`.
- expect(subject['Cache-Control']).to eq('max-age=0, private, must-revalidate, no-store')
+ expect(subject['Cache-Control']).to eq('max-age=15778476, private, must-revalidate')
end
end
@@ -285,7 +284,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation' do
+ it_behaves_like 'content 5 min private cached with revalidation' do
subject do
get :show, params: { model: 'project', mounted_as: 'avatar', id: project.id, filename: 'dk.png' }
@@ -305,7 +304,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation and no-store' do
+ it_behaves_like 'content 5 min private cached with revalidation' do
subject do
get :show, params: { model: 'project', mounted_as: 'avatar', id: project.id, filename: 'dk.png' }
@@ -358,7 +357,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation and no-store' do
+ it_behaves_like 'content 5 min private cached with revalidation' do
subject do
get :show, params: { model: 'project', mounted_as: 'avatar', id: project.id, filename: 'dk.png' }
@@ -390,7 +389,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation' do
+ it_behaves_like 'content 5 min private cached with revalidation' do
subject do
get :show, params: { model: 'group', mounted_as: 'avatar', id: group.id, filename: 'dk.png' }
@@ -410,7 +409,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation and no-store' do
+ it_behaves_like 'content 5 min private cached with revalidation' do
subject do
get :show, params: { model: 'group', mounted_as: 'avatar', id: group.id, filename: 'dk.png' }
@@ -454,7 +453,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation and no-store' do
+ it_behaves_like 'content 5 min private cached with revalidation' do
subject do
get :show, params: { model: 'group', mounted_as: 'avatar', id: group.id, filename: 'dk.png' }
@@ -491,7 +490,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation' do
+ it_behaves_like 'content long term private cached with revalidation' do
subject do
get :show, params: { model: 'note', mounted_as: 'attachment', id: note.id, filename: 'dk.png' }
@@ -511,7 +510,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation and no-store' do
+ it_behaves_like 'content long term private cached with revalidation' do
subject do
get :show, params: { model: 'note', mounted_as: 'attachment', id: note.id, filename: 'dk.png' }
@@ -564,7 +563,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation and no-store' do
+ it_behaves_like 'content long term private cached with revalidation' do
subject do
get :show, params: { model: 'note', mounted_as: 'attachment', id: note.id, filename: 'dk.png' }
diff --git a/spec/db/production/settings_spec.rb b/spec/db/production/settings_spec.rb
index db19e98b851..02e25aa37e3 100644
--- a/spec/db/production/settings_spec.rb
+++ b/spec/db/production/settings_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'rainbow/ext/string'
diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb
index 5216683bd36..53f4a261092 100644
--- a/spec/db/schema_spec.rb
+++ b/spec/db/schema_spec.rb
@@ -19,6 +19,7 @@ describe 'Database schema' do
approver_groups: %w[target_id],
audit_events: %w[author_id entity_id],
award_emoji: %w[awardable_id user_id],
+ aws_roles: %w[role_external_id],
boards: %w[milestone_id],
chat_names: %w[chat_id service_id team_id user_id],
chat_teams: %w[team_id],
@@ -26,6 +27,7 @@ describe 'Database schema' do
ci_pipelines: %w[user_id],
ci_runner_projects: %w[runner_id],
ci_trigger_requests: %w[commit_id],
+ cluster_providers_aws: %w[security_group_id vpc_id access_key_id],
cluster_providers_gcp: %w[gcp_project_id operation_id],
deploy_keys_projects: %w[deploy_key_id],
deployments: %w[deployable_id environment_id user_id],
diff --git a/spec/dependencies/omniauth_saml_spec.rb b/spec/dependencies/omniauth_saml_spec.rb
index ccc604dc230..8a685648c71 100644
--- a/spec/dependencies/omniauth_saml_spec.rb
+++ b/spec/dependencies/omniauth_saml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'omniauth/strategies/saml'
diff --git a/spec/factories/abuse_reports.rb b/spec/factories/abuse_reports.rb
index 578af9ed895..4174faae1ed 100644
--- a/spec/factories/abuse_reports.rb
+++ b/spec/factories/abuse_reports.rb
@@ -4,6 +4,6 @@ FactoryBot.define do
factory :abuse_report do
reporter factory: :user
user
- message 'User sends spam'
+ message { 'User sends spam' }
end
end
diff --git a/spec/factories/analytics/cycle_analytics/project_stages.rb b/spec/factories/analytics/cycle_analytics/project_stages.rb
new file mode 100644
index 00000000000..6f8c140ed8a
--- /dev/null
+++ b/spec/factories/analytics/cycle_analytics/project_stages.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+FactoryBot.define do
+ factory :cycle_analytics_project_stage, class: Analytics::CycleAnalytics::ProjectStage do
+ project
+ sequence(:name) { |n| "Stage ##{n}" }
+ hidden { false }
+ issue_stage
+
+ trait :issue_stage do
+ start_event_identifier { Gitlab::Analytics::CycleAnalytics::StageEvents::IssueCreated.identifier }
+ end_event_identifier { Gitlab::Analytics::CycleAnalytics::StageEvents::IssueStageEnd.identifier }
+ end
+ end
+end
diff --git a/spec/factories/appearances.rb b/spec/factories/appearances.rb
index bdd5964fb93..e2922662ea4 100644
--- a/spec/factories/appearances.rb
+++ b/spec/factories/appearances.rb
@@ -4,9 +4,9 @@
FactoryBot.define do
factory :appearance do
- title "GitLab Community Edition"
- description "Open source software to collaborate on code"
- new_project_guidelines "Custom project guidelines"
+ title { "GitLab Community Edition" }
+ description { "Open source software to collaborate on code" }
+ new_project_guidelines { "Custom project guidelines" }
end
trait :with_logo do
diff --git a/spec/factories/application_settings.rb b/spec/factories/application_settings.rb
index 90b6b9e648a..d4571b9861d 100644
--- a/spec/factories/application_settings.rb
+++ b/spec/factories/application_settings.rb
@@ -2,6 +2,6 @@
FactoryBot.define do
factory :application_setting do
- default_projects_limit 42
+ default_projects_limit { 42 }
end
end
diff --git a/spec/factories/award_emoji.rb b/spec/factories/award_emoji.rb
index a8bb806381e..a430210ab49 100644
--- a/spec/factories/award_emoji.rb
+++ b/spec/factories/award_emoji.rb
@@ -2,7 +2,7 @@
FactoryBot.define do
factory :award_emoji do
- name "thumbsup"
+ name { "thumbsup" }
user
awardable factory: :issue
@@ -12,7 +12,7 @@ FactoryBot.define do
trait :upvote
trait :downvote do
- name "thumbsdown"
+ name { "thumbsdown" }
end
end
end
diff --git a/spec/factories/aws/roles.rb b/spec/factories/aws/roles.rb
new file mode 100644
index 00000000000..c078033dfad
--- /dev/null
+++ b/spec/factories/aws/roles.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+FactoryBot.define do
+ factory :aws_role, class: Aws::Role do
+ user
+
+ role_arn { 'arn:aws:iam::123456789012:role/role-name' }
+ sequence(:role_external_id) { |n| "external-id-#{n}" }
+ end
+end
diff --git a/spec/factories/boards.rb b/spec/factories/boards.rb
index a5aff5c7504..a201ca94380 100644
--- a/spec/factories/boards.rb
+++ b/spec/factories/boards.rb
@@ -3,11 +3,11 @@
FactoryBot.define do
factory :board do
transient do
- project nil
- group nil
- project_id nil
- group_id nil
- parent nil
+ project { nil }
+ group { nil }
+ project_id { nil }
+ group_id { nil }
+ resource_parent { nil }
end
after(:build, :stub) do |board, evaluator|
@@ -19,9 +19,9 @@ FactoryBot.define do
board.project = evaluator.project
elsif evaluator.project_id
board.project_id = evaluator.project_id
- elsif evaluator.parent
- id = evaluator.parent.id
- evaluator.parent.is_a?(Group) ? board.group_id = id : evaluator.project_id = id
+ elsif evaluator.resource_parent
+ id = evaluator.resource_parent.id
+ evaluator.resource_parent.is_a?(Group) ? board.group_id = id : evaluator.project_id = id
else
board.project = create(:project, :empty_repo)
end
diff --git a/spec/factories/broadcast_messages.rb b/spec/factories/broadcast_messages.rb
index 2a30e2034b1..ed6e267e7c4 100644
--- a/spec/factories/broadcast_messages.rb
+++ b/spec/factories/broadcast_messages.rb
@@ -2,7 +2,7 @@
FactoryBot.define do
factory :broadcast_message do
- message "MyText"
+ message { "MyText" }
starts_at { 1.day.ago }
ends_at { 1.day.from_now }
diff --git a/spec/factories/chat_names.rb b/spec/factories/chat_names.rb
index 07bf990162f..ace5d5e83c9 100644
--- a/spec/factories/chat_names.rb
+++ b/spec/factories/chat_names.rb
@@ -5,8 +5,8 @@ FactoryBot.define do
user factory: :user
service factory: :service
- team_id 'T0001'
- team_domain 'Awesome Team'
+ team_id { 'T0001' }
+ team_domain { 'Awesome Team' }
sequence(:chat_id) { |n| "U#{n}" }
chat_name { generate(:username) }
diff --git a/spec/factories/ci/bridge.rb b/spec/factories/ci/bridge.rb
index b1b714277e4..60219b07cf0 100644
--- a/spec/factories/ci/bridge.rb
+++ b/spec/factories/ci/bridge.rb
@@ -2,22 +2,26 @@
FactoryBot.define do
factory :ci_bridge, class: Ci::Bridge do
- name 'bridge'
- stage 'test'
- stage_idx 0
- ref 'master'
- tag false
- created_at 'Di 29. Okt 09:50:00 CET 2013'
- status :created
+ name { 'bridge' }
+ stage { 'test' }
+ stage_idx { 0 }
+ ref { 'master' }
+ tag { false }
+ created_at { 'Di 29. Okt 09:50:00 CET 2013' }
+ status { :created }
pipeline factory: :ci_pipeline
trait :variables do
- yaml_variables [{ key: 'BRIDGE', value: 'cross', public: true }]
+ yaml_variables do
+ [{ key: 'BRIDGE', value: 'cross', public: true }]
+ end
end
- transient { downstream nil }
- transient { upstream nil }
+ transient do
+ downstream { nil }
+ upstream { nil }
+ end
after(:build) do |bridge, evaluator|
bridge.project ||= bridge.pipeline.project
diff --git a/spec/factories/ci/build_trace_chunks.rb b/spec/factories/ci/build_trace_chunks.rb
index 492dc47f083..22f091f8e76 100644
--- a/spec/factories/ci/build_trace_chunks.rb
+++ b/spec/factories/ci/build_trace_chunks.rb
@@ -3,14 +3,14 @@
FactoryBot.define do
factory :ci_build_trace_chunk, class: Ci::BuildTraceChunk do
build factory: :ci_build
- chunk_index 0
- data_store :redis
+ chunk_index { 0 }
+ data_store { :redis }
trait :redis_with_data do
- data_store :redis
+ data_store { :redis }
transient do
- initial_data 'test data'
+ initial_data { 'test data' }
end
after(:create) do |build_trace_chunk, evaluator|
@@ -19,14 +19,14 @@ FactoryBot.define do
end
trait :redis_without_data do
- data_store :redis
+ data_store { :redis }
end
trait :database_with_data do
- data_store :database
+ data_store { :database}
transient do
- initial_data 'test data'
+ initial_data { 'test data' }
end
after(:build) do |build_trace_chunk, evaluator|
@@ -35,14 +35,14 @@ FactoryBot.define do
end
trait :database_without_data do
- data_store :database
+ data_store { :database }
end
trait :fog_with_data do
- data_store :fog
+ data_store { :fog }
transient do
- initial_data 'test data'
+ initial_data { 'test data' }
end
after(:create) do |build_trace_chunk, evaluator|
@@ -51,7 +51,7 @@ FactoryBot.define do
end
trait :fog_without_data do
- data_store :fog
+ data_store { :fog }
end
end
end
diff --git a/spec/factories/ci/builds.rb b/spec/factories/ci/builds.rb
index e3b7c64176a..0bd39d4cdcf 100644
--- a/spec/factories/ci/builds.rb
+++ b/spec/factories/ci/builds.rb
@@ -4,13 +4,13 @@ include ActionDispatch::TestProcess
FactoryBot.define do
factory :ci_build, class: Ci::Build do
- name 'test'
- stage 'test'
- stage_idx 0
- ref 'master'
- tag false
- protected false
- created_at 'Di 29. Okt 09:50:00 CET 2013'
+ name { 'test' }
+ stage { 'test' }
+ stage_idx { 0 }
+ ref { 'master' }
+ tag { false }
+ add_attribute(:protected) { false }
+ created_at { 'Di 29. Okt 09:50:00 CET 2013' }
pending
options do
@@ -30,127 +30,127 @@ FactoryBot.define do
pipeline factory: :ci_pipeline
trait :degenerated do
- options nil
- yaml_variables nil
+ options { nil }
+ yaml_variables { nil }
end
trait :started do
- started_at 'Di 29. Okt 09:51:28 CET 2013'
+ started_at { 'Di 29. Okt 09:51:28 CET 2013' }
end
trait :finished do
started
- finished_at 'Di 29. Okt 09:53:28 CET 2013'
+ finished_at { 'Di 29. Okt 09:53:28 CET 2013' }
end
trait :success do
finished
- status 'success'
+ status { 'success' }
end
trait :failed do
finished
- status 'failed'
+ status { 'failed' }
end
trait :canceled do
finished
- status 'canceled'
+ status { 'canceled' }
end
trait :skipped do
started
- status 'skipped'
+ status { 'skipped' }
end
trait :running do
started
- status 'running'
+ status { 'running' }
end
trait :pending do
- queued_at 'Di 29. Okt 09:50:59 CET 2013'
- status 'pending'
+ queued_at { 'Di 29. Okt 09:50:59 CET 2013' }
+ status { 'pending' }
end
trait :created do
- status 'created'
+ status { 'created' }
end
trait :preparing do
- status 'preparing'
+ status { 'preparing' }
end
trait :scheduled do
schedulable
- status 'scheduled'
+ status { 'scheduled' }
scheduled_at { 1.minute.since }
end
trait :expired_scheduled do
schedulable
- status 'scheduled'
+ status { 'scheduled' }
scheduled_at { 1.minute.ago }
end
trait :manual do
- status 'manual'
- self.when 'manual'
+ status { 'manual' }
+ self.when { 'manual' }
end
trait :teardown_environment do
- environment 'staging'
+ environment { 'staging' }
options do
{
script: %w(ls),
environment: { name: 'staging',
- action: 'stop',
- url: 'http://staging.example.com/$CI_JOB_NAME' }
+ action: 'stop',
+ url: 'http://staging.example.com/$CI_JOB_NAME' }
}
end
end
trait :deploy_to_production do
- environment 'production'
+ environment { 'production' }
options do
{
script: %w(ls),
environment: { name: 'production',
- url: 'http://prd.example.com/$CI_JOB_NAME' }
+ url: 'http://prd.example.com/$CI_JOB_NAME' }
}
end
end
trait :start_review_app do
- environment 'review/$CI_COMMIT_REF_NAME'
+ environment { 'review/$CI_COMMIT_REF_NAME' }
options do
{
script: %w(ls),
environment: { name: 'review/$CI_COMMIT_REF_NAME',
- url: 'http://staging.example.com/$CI_JOB_NAME',
- on_stop: 'stop_review_app' }
+ url: 'http://staging.example.com/$CI_JOB_NAME',
+ on_stop: 'stop_review_app' }
}
end
end
trait :stop_review_app do
- name 'stop_review_app'
- environment 'review/$CI_COMMIT_REF_NAME'
+ name { 'stop_review_app' }
+ environment { 'review/$CI_COMMIT_REF_NAME' }
options do
{
script: %w(ls),
environment: { name: 'review/$CI_COMMIT_REF_NAME',
- url: 'http://staging.example.com/$CI_JOB_NAME',
- action: 'stop' }
+ url: 'http://staging.example.com/$CI_JOB_NAME',
+ action: 'stop' }
}
end
end
trait :allowed_to_fail do
- allow_failure true
+ allow_failure { true }
end
trait :ignored do
@@ -166,7 +166,7 @@ FactoryBot.define do
end
trait :schedulable do
- self.when 'delayed'
+ self.when { 'delayed' }
options do
{
@@ -177,11 +177,11 @@ FactoryBot.define do
end
trait :actionable do
- self.when 'manual'
+ self.when { 'manual' }
end
trait :retried do
- retried true
+ retried { true }
end
trait :cancelable do
@@ -194,11 +194,13 @@ FactoryBot.define do
end
trait :tags do
- tag_list [:docker, :ruby]
+ tag_list do
+ [:docker, :ruby]
+ end
end
trait :on_tag do
- tag true
+ tag { true }
end
trait :triggered do
@@ -209,13 +211,24 @@ FactoryBot.define do
build.project ||= build.pipeline.project
end
+ trait :with_deployment do
+ after(:build) do |build, evaluator|
+ ##
+ # Build deployment/environment relations if environment name is set
+ # to the job. If `build.deployment` has already been set, it doesn't
+ # build a new instance.
+ build.deployment =
+ Gitlab::Ci::Pipeline::Seed::Deployment.new(build).to_resource
+ end
+ end
+
trait :tag do
- tag true
+ tag { true }
end
trait :coverage do
- coverage 99.9
- coverage_regex '/(d+)/'
+ coverage { 99.9 }
+ coverage_regex { '/(d+)/' }
end
trait :trace_live do
@@ -303,23 +316,23 @@ FactoryBot.define do
trait :extended_options do
options do
{
- image: { name: 'ruby:2.1', entrypoint: '/bin/sh' },
- services: ['postgres', { name: 'docker:stable-dind', entrypoint: '/bin/sh', command: 'sleep 30', alias: 'docker' }],
- script: %w(echo),
- after_script: %w(ls date),
- artifacts: {
- name: 'artifacts_file',
- untracked: false,
- paths: ['out/'],
- when: 'always',
- expire_in: '7d'
- },
- cache: {
- key: 'cache_key',
- untracked: false,
- paths: ['vendor/*'],
- policy: 'pull-push'
- }
+ image: { name: 'ruby:2.1', entrypoint: '/bin/sh' },
+ services: ['postgres', { name: 'docker:stable-dind', entrypoint: '/bin/sh', command: 'sleep 30', alias: 'docker' }],
+ script: %w(echo),
+ after_script: %w(ls date),
+ artifacts: {
+ name: 'artifacts_file',
+ untracked: false,
+ paths: ['out/'],
+ when: 'always',
+ expire_in: '7d'
+ },
+ cache: {
+ key: 'cache_key',
+ untracked: false,
+ paths: ['vendor/*'],
+ policy: 'pull-push'
+ }
}
end
end
@@ -328,28 +341,60 @@ FactoryBot.define do
options { {} }
end
+ trait :dast do
+ options do
+ {
+ artifacts: { reports: { dast: 'gl-dast-report.json' } }
+ }
+ end
+ end
+
+ trait :sast do
+ options do
+ {
+ artifacts: { reports: { sast: 'gl-sast-report.json' } }
+ }
+ end
+ end
+
+ trait :dependency_scanning do
+ options do
+ {
+ artifacts: { reports: { dependency_scanning: 'gl-dependency-scanning-report.json' } }
+ }
+ end
+ end
+
+ trait :container_scanning do
+ options do
+ {
+ artifacts: { reports: { container_scanning: 'gl-container-scanning-report.json' } }
+ }
+ end
+ end
+
trait :non_playable do
- status 'created'
- self.when 'manual'
+ status { 'created' }
+ self.when { 'manual' }
end
trait :protected do
- protected true
+ add_attribute(:protected) { true }
end
trait :script_failure do
failed
- failure_reason 1
+ failure_reason { 1 }
end
trait :api_failure do
failed
- failure_reason 2
+ failure_reason { 2 }
end
trait :prerequisite_failure do
failed
- failure_reason 10
+ failure_reason { 10 }
end
trait :with_runner_session do
diff --git a/spec/factories/ci/group_variables.rb b/spec/factories/ci/group_variables.rb
index 13c2b78e61b..217f05a088e 100644
--- a/spec/factories/ci/group_variables.rb
+++ b/spec/factories/ci/group_variables.rb
@@ -3,11 +3,11 @@
FactoryBot.define do
factory :ci_group_variable, class: Ci::GroupVariable do
sequence(:key) { |n| "VARIABLE_#{n}" }
- value 'VARIABLE_VALUE'
- masked false
+ value { 'VARIABLE_VALUE' }
+ masked { false }
trait(:protected) do
- protected true
+ add_attribute(:protected) { true }
end
group factory: :group
diff --git a/spec/factories/ci/job_artifacts.rb b/spec/factories/ci/job_artifacts.rb
index 6f553cadfa3..bdc6cc2f169 100644
--- a/spec/factories/ci/job_artifacts.rb
+++ b/spec/factories/ci/job_artifacts.rb
@@ -5,15 +5,15 @@ include ActionDispatch::TestProcess
FactoryBot.define do
factory :ci_job_artifact, class: Ci::JobArtifact do
job factory: :ci_build
- file_type :archive
- file_format :zip
+ file_type { :archive }
+ file_format { :zip }
trait :expired do
expire_at { Date.yesterday }
end
trait :remote_store do
- file_store JobArtifactUploader::Store::REMOTE
+ file_store { JobArtifactUploader::Store::REMOTE}
end
after :build do |artifact|
@@ -21,7 +21,7 @@ FactoryBot.define do
end
trait :raw do
- file_format :raw
+ file_format { :raw }
after(:build) do |artifact, _|
artifact.file = fixture_file_upload(
@@ -30,7 +30,7 @@ FactoryBot.define do
end
trait :zip do
- file_format :zip
+ file_format { :zip }
after(:build) do |artifact, _|
artifact.file = fixture_file_upload(
@@ -39,7 +39,7 @@ FactoryBot.define do
end
trait :gzip do
- file_format :gzip
+ file_format { :gzip }
after(:build) do |artifact, _|
artifact.file = fixture_file_upload(
@@ -48,8 +48,8 @@ FactoryBot.define do
end
trait :archive do
- file_type :archive
- file_format :zip
+ file_type { :archive }
+ file_format { :zip }
transient do
file { fixture_file_upload(Rails.root.join('spec/fixtures/ci_build_artifacts.zip'), 'application/zip') }
@@ -63,12 +63,12 @@ FactoryBot.define do
trait :legacy_archive do
archive
- file_location :legacy_path
+ file_location { :legacy_path }
end
trait :metadata do
- file_type :metadata
- file_format :gzip
+ file_type { :metadata }
+ file_format { :gzip }
transient do
file { fixture_file_upload(Rails.root.join('spec/fixtures/ci_build_artifacts_metadata.gz'), 'application/x-gzip') }
@@ -80,8 +80,8 @@ FactoryBot.define do
end
trait :trace do
- file_type :trace
- file_format :raw
+ file_type { :trace }
+ file_format { :raw }
after(:build) do |artifact, evaluator|
artifact.file = fixture_file_upload(
@@ -90,8 +90,8 @@ FactoryBot.define do
end
trait :junit do
- file_type :junit
- file_format :gzip
+ file_type { :junit }
+ file_format { :gzip }
after(:build) do |artifact, evaluator|
artifact.file = fixture_file_upload(
@@ -100,8 +100,8 @@ FactoryBot.define do
end
trait :junit_with_ant do
- file_type :junit
- file_format :gzip
+ file_type { :junit }
+ file_format { :gzip }
after(:build) do |artifact, evaluator|
artifact.file = fixture_file_upload(
@@ -110,8 +110,8 @@ FactoryBot.define do
end
trait :junit_with_three_testsuites do
- file_type :junit
- file_format :gzip
+ file_type { :junit }
+ file_format { :gzip }
after(:build) do |artifact, evaluator|
artifact.file = fixture_file_upload(
@@ -120,8 +120,8 @@ FactoryBot.define do
end
trait :junit_with_corrupted_data do
- file_type :junit
- file_format :gzip
+ file_type { :junit }
+ file_format { :gzip }
after(:build) do |artifact, evaluator|
artifact.file = fixture_file_upload(
@@ -130,8 +130,8 @@ FactoryBot.define do
end
trait :codequality do
- file_type :codequality
- file_format :raw
+ file_type { :codequality }
+ file_format { :raw }
after(:build) do |artifact, evaluator|
artifact.file = fixture_file_upload(
diff --git a/spec/factories/ci/job_variables.rb b/spec/factories/ci/job_variables.rb
index d664b763abd..bfc631b8126 100644
--- a/spec/factories/ci/job_variables.rb
+++ b/spec/factories/ci/job_variables.rb
@@ -3,7 +3,7 @@
FactoryBot.define do
factory :ci_job_variable, class: Ci::JobVariable do
sequence(:key) { |n| "VARIABLE_#{n}" }
- value 'VARIABLE_VALUE'
+ value { 'VARIABLE_VALUE' }
job factory: :ci_build
end
diff --git a/spec/factories/ci/pipeline_schedule.rb b/spec/factories/ci/pipeline_schedule.rb
index 8fae6986869..c752dc1c9dd 100644
--- a/spec/factories/ci/pipeline_schedule.rb
+++ b/spec/factories/ci/pipeline_schedule.rb
@@ -2,40 +2,40 @@
FactoryBot.define do
factory :ci_pipeline_schedule, class: Ci::PipelineSchedule do
- cron '0 1 * * *'
- cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE
- ref 'master'
- active true
- description "pipeline schedule"
+ cron { '0 1 * * *' }
+ cron_timezone { Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE }
+ ref { 'master' }
+ active { true }
+ description { "pipeline schedule" }
project
trait :every_minute do
- cron '*/1 * * * *'
- cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE
+ cron { '*/1 * * * *' }
+ cron_timezone { Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE }
end
trait :hourly do
- cron '* */1 * * *'
- cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE
+ cron { '* */1 * * *' }
+ cron_timezone { Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE }
end
trait :nightly do
- cron '0 1 * * *'
- cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE
+ cron { '0 1 * * *' }
+ cron_timezone { Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE }
end
trait :weekly do
- cron '0 1 * * 6'
- cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE
+ cron { '0 1 * * 6' }
+ cron_timezone { Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE }
end
trait :monthly do
- cron '0 1 22 * *'
- cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE
+ cron { '0 1 22 * *' }
+ cron_timezone { Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE }
end
trait :inactive do
- active false
+ active { false }
end
end
end
diff --git a/spec/factories/ci/pipeline_schedule_variables.rb b/spec/factories/ci/pipeline_schedule_variables.rb
index fd7cfada65b..24913c614f4 100644
--- a/spec/factories/ci/pipeline_schedule_variables.rb
+++ b/spec/factories/ci/pipeline_schedule_variables.rb
@@ -3,8 +3,8 @@
FactoryBot.define do
factory :ci_pipeline_schedule_variable, class: Ci::PipelineScheduleVariable do
sequence(:key) { |n| "VARIABLE_#{n}" }
- value 'VARIABLE_VALUE'
- variable_type 'env_var'
+ value { 'VARIABLE_VALUE' }
+ variable_type { 'env_var' }
pipeline_schedule factory: :ci_pipeline_schedule
end
diff --git a/spec/factories/ci/pipeline_variables.rb b/spec/factories/ci/pipeline_variables.rb
index af0982124d7..48f6e35fe70 100644
--- a/spec/factories/ci/pipeline_variables.rb
+++ b/spec/factories/ci/pipeline_variables.rb
@@ -3,7 +3,7 @@
FactoryBot.define do
factory :ci_pipeline_variable, class: Ci::PipelineVariable do
sequence(:key) { |n| "VARIABLE_#{n}" }
- value 'VARIABLE_VALUE'
+ value { 'VARIABLE_VALUE' }
pipeline factory: :ci_empty_pipeline
end
diff --git a/spec/factories/ci/pipelines.rb b/spec/factories/ci/pipelines.rb
index 9652b0000a9..fefd89728e6 100644
--- a/spec/factories/ci/pipelines.rb
+++ b/spec/factories/ci/pipelines.rb
@@ -2,11 +2,11 @@
FactoryBot.define do
factory :ci_empty_pipeline, class: Ci::Pipeline do
- source :push
- ref 'master'
- sha '97de212e80737a608d939f648d959671fb0a0142'
- status 'pending'
- protected false
+ source { :push }
+ ref { 'master' }
+ sha { '97de212e80737a608d939f648d959671fb0a0142' }
+ status { 'pending' }
+ add_attribute(:protected) { false }
project
@@ -26,7 +26,7 @@ FactoryBot.define do
# Persist merge request head_pipeline_id
# on pipeline factories to avoid circular references
- transient { head_pipeline_of nil }
+ transient { head_pipeline_of { nil } }
after(:create) do |pipeline, evaluator|
merge_request = evaluator.head_pipeline_of
@@ -34,7 +34,7 @@ FactoryBot.define do
end
factory :ci_pipeline do
- transient { config nil }
+ transient { config { nil } }
after(:build) do |pipeline, evaluator|
if evaluator.config
@@ -48,44 +48,47 @@ FactoryBot.define do
end
trait :invalid do
- config(rspec: nil)
- failure_reason :config_error
+ config do
+ { rspec: nil }
+ end
+
+ failure_reason { :config_error }
end
trait :created do
- status :created
+ status { :created }
end
trait :preparing do
- status :preparing
+ status { :preparing }
end
trait :blocked do
- status :manual
+ status { :manual }
end
trait :scheduled do
- status :scheduled
+ status { :scheduled }
end
trait :success do
- status :success
+ status { :success }
end
trait :running do
- status :running
+ status { :running }
end
trait :failed do
- status :failed
+ status { :failed }
end
trait :protected do
- protected true
+ add_attribute(:protected) { true }
end
trait :with_test_reports do
- status :success
+ status { :success }
after(:build) do |pipeline, evaluator|
pipeline.builds << build(:ci_build, :test_reports, pipeline: pipeline, project: pipeline.project)
diff --git a/spec/factories/ci/runners.rb b/spec/factories/ci/runners.rb
index 1e4344b814d..3697970721b 100644
--- a/spec/factories/ci/runners.rb
+++ b/spec/factories/ci/runners.rb
@@ -4,22 +4,22 @@ FactoryBot.define do
factory :ci_runner, class: Ci::Runner do
sequence(:description) { |n| "My runner#{n}" }
- platform "darwin"
- active true
- access_level :not_protected
+ platform { "darwin" }
+ active { true }
+ access_level { :not_protected }
- runner_type :instance_type
+ runner_type { :instance_type }
trait :online do
contacted_at { Time.now }
end
trait :instance do
- runner_type :instance_type
+ runner_type { :instance_type }
end
trait :group do
- runner_type :group_type
+ runner_type { :group_type }
after(:build) do |runner, evaluator|
runner.groups << build(:group) if runner.groups.empty?
@@ -27,7 +27,7 @@ FactoryBot.define do
end
trait :project do
- runner_type :project_type
+ runner_type { :project_type }
after(:build) do |runner, evaluator|
runner.projects << build(:project) if runner.projects.empty?
@@ -43,21 +43,21 @@ FactoryBot.define do
end
trait :inactive do
- active false
+ active { false }
end
trait :ref_protected do
- access_level :ref_protected
+ access_level { :ref_protected }
end
trait :tagged_only do
- run_untagged false
+ run_untagged { false }
- tag_list %w(tag1 tag2)
+ tag_list { %w(tag1 tag2) }
end
trait :locked do
- locked true
+ locked { true }
end
end
end
diff --git a/spec/factories/ci/sources/pipelines.rb b/spec/factories/ci/sources/pipelines.rb
new file mode 100644
index 00000000000..57495502944
--- /dev/null
+++ b/spec/factories/ci/sources/pipelines.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+FactoryBot.define do
+ factory :ci_sources_pipeline, class: Ci::Sources::Pipeline do
+ after(:build) do |source|
+ source.project ||= source.pipeline.project
+ source.source_pipeline ||= source.source_job.pipeline
+ source.source_project ||= source.source_pipeline.project
+ end
+
+ source_job factory: :ci_build
+
+ pipeline factory: :ci_empty_pipeline
+ end
+end
diff --git a/spec/factories/ci/stages.rb b/spec/factories/ci/stages.rb
index 88ff8d7dc53..67f4db41d96 100644
--- a/spec/factories/ci/stages.rb
+++ b/spec/factories/ci/stages.rb
@@ -5,16 +5,16 @@ FactoryBot.define do
skip_create
transient do
- name 'test'
- status nil
- warnings nil
+ name { 'test' }
+ status { nil }
+ warnings { nil }
pipeline factory: :ci_empty_pipeline
end
initialize_with do
Ci::LegacyStage.new(pipeline, name: name,
- status: status,
- warnings: warnings)
+ status: status,
+ warnings: warnings)
end
end
@@ -22,8 +22,8 @@ FactoryBot.define do
project factory: :project
pipeline factory: :ci_empty_pipeline
- name 'test'
- position 1
- status 'pending'
+ name { 'test' }
+ position { 1 }
+ status { 'pending' }
end
end
diff --git a/spec/factories/ci/variables.rb b/spec/factories/ci/variables.rb
index 55d11085040..9d2501c4e18 100644
--- a/spec/factories/ci/variables.rb
+++ b/spec/factories/ci/variables.rb
@@ -3,11 +3,11 @@
FactoryBot.define do
factory :ci_variable, class: Ci::Variable do
sequence(:key) { |n| "VARIABLE_#{n}" }
- value 'VARIABLE_VALUE'
- masked false
+ value { 'VARIABLE_VALUE' }
+ masked { false }
trait(:protected) do
- protected true
+ add_attribute(:protected) { true }
end
project
diff --git a/spec/factories/clusters/applications/helm.rb b/spec/factories/clusters/applications/helm.rb
index 89f7bc15217..c7ec7c11743 100644
--- a/spec/factories/clusters/applications/helm.rb
+++ b/spec/factories/clusters/applications/helm.rb
@@ -19,50 +19,50 @@ FactoryBot.define do
end
trait :not_installable do
- status(-2)
+ status { -2 }
end
trait :errored do
- status(-1)
- status_reason 'something went wrong'
+ status { -1 }
+ status_reason { 'something went wrong' }
end
trait :installable do
- status 0
+ status { 0 }
end
trait :scheduled do
- status 1
+ status { 1 }
end
trait :installing do
- status 2
+ status { 2 }
end
trait :installed do
- status 3
+ status { 3 }
end
trait :updating do
- status 4
+ status { 4 }
end
trait :updated do
- status 5
+ status { 5 }
end
trait :update_errored do
- status(6)
- status_reason 'something went wrong'
+ status { 6 }
+ status_reason { 'something went wrong' }
end
trait :uninstalling do
- status 7
+ status { 7 }
end
trait :uninstall_errored do
- status(8)
- status_reason 'something went wrong'
+ status { 8 }
+ status_reason { 'something went wrong' }
end
trait :timed_out do
@@ -75,7 +75,7 @@ FactoryBot.define do
end
factory :clusters_applications_cert_manager, class: Clusters::Applications::CertManager do
- email 'admin@example.com'
+ email { 'admin@example.com' }
cluster factory: %i(cluster with_installed_helm provided_by_gcp)
end
@@ -89,7 +89,7 @@ FactoryBot.define do
end
factory :clusters_applications_knative, class: Clusters::Applications::Knative do
- hostname 'example.com'
+ hostname { 'example.com' }
cluster factory: %i(cluster with_installed_helm provided_by_gcp)
end
diff --git a/spec/factories/clusters/clusters.rb b/spec/factories/clusters/clusters.rb
index d294e6d055e..63f33633a3c 100644
--- a/spec/factories/clusters/clusters.rb
+++ b/spec/factories/clusters/clusters.rb
@@ -3,10 +3,10 @@
FactoryBot.define do
factory :cluster, class: Clusters::Cluster do
user
- name 'test-cluster'
- cluster_type :project_type
- managed true
- namespace_per_environment true
+ name { 'test-cluster' }
+ cluster_type { :project_type }
+ managed { true }
+ namespace_per_environment { true }
factory :cluster_for_group, traits: [:provided_by_gcp, :group]
@@ -30,27 +30,39 @@ FactoryBot.define do
end
end
+ trait :management_project do
+ management_project factory: :project
+ end
+
trait :namespace_per_environment_disabled do
- namespace_per_environment false
+ namespace_per_environment { false }
end
trait :provided_by_user do
- provider_type :user
- platform_type :kubernetes
+ provider_type { :user }
+ platform_type { :kubernetes }
platform_kubernetes factory: [:cluster_platform_kubernetes, :configured]
end
trait :provided_by_gcp do
- provider_type :gcp
- platform_type :kubernetes
+ provider_type { :gcp }
+ platform_type { :kubernetes }
provider_gcp factory: [:cluster_provider_gcp, :created]
platform_kubernetes factory: [:cluster_platform_kubernetes, :configured]
end
+ trait :provided_by_aws do
+ provider_type { :aws }
+ platform_type { :kubernetes }
+
+ provider_aws factory: [:cluster_provider_aws, :created]
+ platform_kubernetes factory: [:cluster_platform_kubernetes, :configured]
+ end
+
trait :providing_by_gcp do
- provider_type :gcp
+ provider_type { :gcp }
provider_gcp factory: [:cluster_provider_gcp, :creating]
end
@@ -58,8 +70,12 @@ FactoryBot.define do
platform_kubernetes factory: [:cluster_platform_kubernetes, :configured, :rbac_disabled]
end
+ trait :cloud_run_enabled do
+ provider_gcp factory: [:cluster_provider_gcp, :created, :cloud_run_enabled]
+ end
+
trait :disabled do
- enabled false
+ enabled { false }
end
trait :production_environment do
@@ -71,11 +87,11 @@ FactoryBot.define do
end
trait :with_domain do
- domain 'example.com'
+ domain { 'example.com' }
end
trait :not_managed do
- managed false
+ managed { false }
end
end
end
diff --git a/spec/factories/clusters/kubernetes_namespaces.rb b/spec/factories/clusters/kubernetes_namespaces.rb
index 8d6ad1b9f79..75895e1c020 100644
--- a/spec/factories/clusters/kubernetes_namespaces.rb
+++ b/spec/factories/clusters/kubernetes_namespaces.rb
@@ -27,7 +27,7 @@ FactoryBot.define do
end
trait :without_token do
- service_account_token nil
+ service_account_token { nil }
end
end
end
diff --git a/spec/factories/clusters/platforms/kubernetes.rb b/spec/factories/clusters/platforms/kubernetes.rb
index d5dc288fddb..2757498e36b 100644
--- a/spec/factories/clusters/platforms/kubernetes.rb
+++ b/spec/factories/clusters/platforms/kubernetes.rb
@@ -3,14 +3,14 @@
FactoryBot.define do
factory :cluster_platform_kubernetes, class: Clusters::Platforms::Kubernetes do
cluster
- namespace nil
- api_url 'https://kubernetes.example.com'
+ namespace { nil }
+ api_url { 'https://kubernetes.example.com' }
token { 'a' * 40 }
trait :configured do
- api_url 'https://kubernetes.example.com'
- username 'xxxxxx'
- password 'xxxxxx'
+ api_url { 'https://kubernetes.example.com' }
+ username { 'xxxxxx' }
+ password { 'xxxxxx' }
before(:create) do |platform_kubernetes, evaluator|
pem_file = File.expand_path(Rails.root.join('spec/fixtures/clusters/sample_cert.pem'))
@@ -19,7 +19,7 @@ FactoryBot.define do
end
trait :rbac_disabled do
- authorization_type :abac
+ authorization_type { :abac }
end
end
end
diff --git a/spec/factories/clusters/providers/aws.rb b/spec/factories/clusters/providers/aws.rb
new file mode 100644
index 00000000000..f4bc61455c5
--- /dev/null
+++ b/spec/factories/clusters/providers/aws.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+FactoryBot.define do
+ factory :cluster_provider_aws, class: Clusters::Providers::Aws do
+ cluster
+ created_by_user factory: :user
+
+ role_arn { 'arn:aws:iam::123456789012:role/role-name' }
+ vpc_id { 'vpc-00000000000000000' }
+ subnet_ids { %w(subnet-00000000000000000 subnet-11111111111111111) }
+ security_group_id { 'sg-00000000000000000' }
+ key_name { 'user' }
+
+ trait :scheduled do
+ access_key_id { 'access_key_id' }
+ secret_access_key { 'secret_access_key' }
+ session_token { 'session_token' }
+ end
+
+ trait :creating do
+ after(:build) do |provider|
+ provider.make_creating
+ end
+ end
+
+ trait :created do
+ after(:build) do |provider|
+ provider.make_created
+ end
+ end
+
+ trait :errored do
+ after(:build) do |provider|
+ provider.make_errored('An error occurred')
+ end
+ end
+ end
+end
diff --git a/spec/factories/clusters/providers/gcp.rb b/spec/factories/clusters/providers/gcp.rb
index 22462651b6a..83b65dc8087 100644
--- a/spec/factories/clusters/providers/gcp.rb
+++ b/spec/factories/clusters/providers/gcp.rb
@@ -3,14 +3,14 @@
FactoryBot.define do
factory :cluster_provider_gcp, class: Clusters::Providers::Gcp do
cluster
- gcp_project_id 'test-gcp-project'
+ gcp_project_id { 'test-gcp-project' }
trait :scheduled do
- access_token 'access_token_123'
+ access_token { 'access_token_123' }
end
trait :creating do
- access_token 'access_token_123'
+ access_token { 'access_token_123' }
after(:build) do |gcp, evaluator|
gcp.make_creating('operation-123')
@@ -18,7 +18,7 @@ FactoryBot.define do
end
trait :created do
- endpoint '111.111.111.111'
+ endpoint { '111.111.111.111' }
after(:build) do |gcp, evaluator|
gcp.make_created
@@ -32,7 +32,11 @@ FactoryBot.define do
end
trait :abac_enabled do
- legacy_abac true
+ legacy_abac { true }
+ end
+
+ trait :cloud_run_enabled do
+ cloud_run { true }
end
end
end
diff --git a/spec/factories/commit_statuses.rb b/spec/factories/commit_statuses.rb
index a76da30217e..3ce71a1b05d 100644
--- a/spec/factories/commit_statuses.rb
+++ b/spec/factories/commit_statuses.rb
@@ -2,53 +2,53 @@
FactoryBot.define do
factory :commit_status, class: CommitStatus do
- name 'default'
- stage 'test'
- stage_idx 0
- status 'success'
- description 'commit status'
+ name { 'default' }
+ stage { 'test' }
+ stage_idx { 0 }
+ status { 'success' }
+ description { 'commit status'}
pipeline factory: :ci_pipeline_with_one_job
- started_at 'Tue, 26 Jan 2016 08:21:42 +0100'
- finished_at 'Tue, 26 Jan 2016 08:23:42 +0100'
+ started_at { 'Tue, 26 Jan 2016 08:21:42 +0100'}
+ finished_at { 'Tue, 26 Jan 2016 08:23:42 +0100'}
trait :success do
- status 'success'
+ status { 'success' }
end
trait :failed do
- status 'failed'
+ status { 'failed' }
end
trait :canceled do
- status 'canceled'
+ status { 'canceled' }
end
trait :skipped do
- status 'skipped'
+ status { 'skipped' }
end
trait :running do
- status 'running'
+ status { 'running' }
end
trait :pending do
- status 'pending'
+ status { 'pending' }
end
trait :preparing do
- status 'preparing'
+ status { 'preparing' }
end
trait :created do
- status 'created'
+ status { 'created' }
end
trait :manual do
- status 'manual'
+ status { 'manual' }
end
trait :scheduled do
- status 'scheduled'
+ status { 'scheduled' }
end
after(:build) do |build, evaluator|
@@ -56,8 +56,8 @@ FactoryBot.define do
end
factory :generic_commit_status, class: GenericCommitStatus do
- name 'generic'
- description 'external commit status'
+ name { 'generic' }
+ description { 'external commit status' }
end
end
end
diff --git a/spec/factories/commits.rb b/spec/factories/commits.rb
index d1554426a76..d006f9baf1f 100644
--- a/spec/factories/commits.rb
+++ b/spec/factories/commits.rb
@@ -5,7 +5,7 @@ require_relative '../support/helpers/repo_helpers'
FactoryBot.define do
factory :commit do
transient do
- author nil
+ author { nil }
end
git_commit do
diff --git a/spec/factories/container_repositories.rb b/spec/factories/container_repositories.rb
index 0b756220d68..4cf1537f64b 100644
--- a/spec/factories/container_repositories.rb
+++ b/spec/factories/container_repositories.rb
@@ -6,29 +6,32 @@ FactoryBot.define do
project
transient do
- tags []
+ tags { [] }
end
trait :root do
- name ''
+ name { '' }
end
after(:build) do |repository, evaluator|
next if evaluator.tags.to_a.none?
+ tags = evaluator.tags
+ # convert Array into Hash
+ tags = tags.product(['sha256:4c8e63ca4cb663ce6c688cb06f1c372b088dac5b6d7ad7d49cd620d85cf72a15']).to_h unless tags.is_a?(Hash)
+
allow(repository.client)
.to receive(:repository_tags)
.and_return({
'name' => repository.path,
- 'tags' => evaluator.tags
+ 'tags' => tags.keys
})
- evaluator.tags.each do |tag|
+ tags.each_pair do |tag, digest|
allow(repository.client)
.to receive(:repository_tag_digest)
.with(repository.path, tag)
- .and_return('sha256:4c8e63ca4cb663ce6c688cb06f1c3' \
- '72b088dac5b6d7ad7d49cd620d85cf72a15')
+ .and_return(digest)
end
end
end
diff --git a/spec/factories/conversational_development_index_metrics.rb b/spec/factories/conversational_development_index_metrics.rb
index ea5816684c6..f039bac81d0 100644
--- a/spec/factories/conversational_development_index_metrics.rb
+++ b/spec/factories/conversational_development_index_metrics.rb
@@ -2,44 +2,44 @@
FactoryBot.define do
factory :conversational_development_index_metric, class: ConversationalDevelopmentIndex::Metric do
- leader_issues 9.256
- instance_issues 1.234
- percentage_issues 13.331
+ leader_issues { 9.256 }
+ instance_issues { 1.234 }
+ percentage_issues { 13.331 }
- leader_notes 30.33333
- instance_notes 28.123
- percentage_notes 92.713
+ leader_notes { 30.33333 }
+ instance_notes { 28.123 }
+ percentage_notes { 92.713 }
- leader_milestones 16.2456
- instance_milestones 1.234
- percentage_milestones 7.595
+ leader_milestones { 16.2456 }
+ instance_milestones { 1.234 }
+ percentage_milestones { 7.595 }
- leader_boards 5.2123
- instance_boards 3.254
- percentage_boards 62.429
+ leader_boards { 5.2123 }
+ instance_boards { 3.254 }
+ percentage_boards { 62.429 }
- leader_merge_requests 1.2
- instance_merge_requests 0.6
- percentage_merge_requests 50.0
+ leader_merge_requests { 1.2 }
+ instance_merge_requests { 0.6 }
+ percentage_merge_requests { 50.0 }
- leader_ci_pipelines 12.1234
- instance_ci_pipelines 2.344
- percentage_ci_pipelines 19.334
+ leader_ci_pipelines { 12.1234 }
+ instance_ci_pipelines { 2.344 }
+ percentage_ci_pipelines { 19.334 }
- leader_environments 3.3333
- instance_environments 2.2222
- percentage_environments 66.672
+ leader_environments { 3.3333 }
+ instance_environments { 2.2222 }
+ percentage_environments { 66.672 }
- leader_deployments 1.200
- instance_deployments 0.771
- percentage_deployments 64.25
+ leader_deployments { 1.200 }
+ instance_deployments { 0.771 }
+ percentage_deployments { 64.25 }
- leader_projects_prometheus_active 0.111
- instance_projects_prometheus_active 0.109
- percentage_projects_prometheus_active 98.198
+ leader_projects_prometheus_active { 0.111 }
+ instance_projects_prometheus_active { 0.109 }
+ percentage_projects_prometheus_active { 98.198 }
- leader_service_desk_issues 15.891
- instance_service_desk_issues 13.345
- percentage_service_desk_issues 83.978
+ leader_service_desk_issues { 15.891 }
+ instance_service_desk_issues { 13.345 }
+ percentage_service_desk_issues { 83.978 }
end
end
diff --git a/spec/factories/deploy_keys_projects.rb b/spec/factories/deploy_keys_projects.rb
index 7f82902dee7..2a429bf8e56 100644
--- a/spec/factories/deploy_keys_projects.rb
+++ b/spec/factories/deploy_keys_projects.rb
@@ -6,7 +6,7 @@ FactoryBot.define do
project
trait :write_access do
- can_push true
+ can_push { true }
end
end
end
diff --git a/spec/factories/deploy_tokens.rb b/spec/factories/deploy_tokens.rb
index 99486acc2ab..42ed66ac191 100644
--- a/spec/factories/deploy_tokens.rb
+++ b/spec/factories/deploy_tokens.rb
@@ -2,20 +2,20 @@
FactoryBot.define do
factory :deploy_token do
- token nil
- token_encrypted { Gitlab::CryptoHelper.aes256_gcm_encrypt( SecureRandom.hex(50) ) }
+ token { nil }
+ token_encrypted { Gitlab::CryptoHelper.aes256_gcm_encrypt(SecureRandom.hex(50)) }
sequence(:name) { |n| "PDT #{n}" }
- read_repository true
- read_registry true
- revoked false
+ read_repository { true }
+ read_registry { true }
+ revoked { false }
expires_at { 5.days.from_now }
trait :revoked do
- revoked true
+ revoked { true }
end
trait :gitlab_deploy_token do
- name DeployToken::GITLAB_DEPLOY_TOKEN_NAME
+ name { DeployToken::GITLAB_DEPLOY_TOKEN_NAME }
end
trait :expired do
diff --git a/spec/factories/deployments.rb b/spec/factories/deployments.rb
index 50dc304a10e..f4da206990c 100644
--- a/spec/factories/deployments.rb
+++ b/spec/factories/deployments.rb
@@ -2,11 +2,11 @@
FactoryBot.define do
factory :deployment, class: Deployment do
- sha 'b83d6e391c22777fca1ed3012fce84f633d7fed0'
- ref 'master'
- tag false
- user nil
- project nil
+ sha { 'b83d6e391c22777fca1ed3012fce84f633d7fed0' }
+ ref { 'master' }
+ tag { false }
+ user { nil }
+ project { nil }
deployable factory: :ci_build
environment factory: :environment
@@ -25,7 +25,7 @@ FactoryBot.define do
trait :review_app do
sha { TestEnv::BRANCH_SHA['pages-deploy'] }
- ref 'pages-deploy'
+ ref { 'pages-deploy' }
end
trait :on_cluster do
@@ -33,21 +33,21 @@ FactoryBot.define do
end
trait :running do
- status :running
+ status { :running }
end
trait :success do
- status :success
+ status { :success }
finished_at { Time.now }
end
trait :failed do
- status :failed
+ status { :failed }
finished_at { Time.now }
end
trait :canceled do
- status :canceled
+ status { :canceled }
finished_at { Time.now }
end
diff --git a/spec/factories/environments.rb b/spec/factories/environments.rb
index b5c8f0ca4f0..9286f49bc59 100644
--- a/spec/factories/environments.rb
+++ b/spec/factories/environments.rb
@@ -9,7 +9,7 @@ FactoryBot.define do
trait :with_review_app do |environment|
transient do
- ref 'master'
+ ref { 'master' }
end
# At this point `review app` is an ephemeral concept related to
@@ -41,8 +41,8 @@ FactoryBot.define do
end
trait :non_playable do
- status 'created'
- self.when 'manual'
+ status { 'created' }
+ self.when { 'manual' }
end
end
end
diff --git a/spec/factories/error_tracking/error.rb b/spec/factories/error_tracking/error.rb
index ff883a3d22c..541bc410462 100644
--- a/spec/factories/error_tracking/error.rb
+++ b/spec/factories/error_tracking/error.rb
@@ -2,22 +2,22 @@
FactoryBot.define do
factory :error_tracking_error, class: Gitlab::ErrorTracking::Error do
- id 'id'
- title 'title'
- type 'error'
- user_count 1
- count 2
+ id { 'id' }
+ title { 'title' }
+ type { 'error' }
+ user_count { 1 }
+ count { 2 }
first_seen { Time.now }
last_seen { Time.now }
- message 'message'
- culprit 'culprit'
- external_url 'http://example.com/id'
- project_id 'project1'
- project_name 'project name'
- project_slug 'project_name'
- short_id 'ID'
- status 'unresolved'
- frequency []
+ message { 'message' }
+ culprit { 'culprit' }
+ external_url { 'http://example.com/id' }
+ project_id { 'project1' }
+ project_name { 'project name' }
+ project_slug { 'project_name' }
+ short_id { 'ID' }
+ status { 'unresolved' }
+ frequency { [] }
skip_create
end
diff --git a/spec/factories/error_tracking/project.rb b/spec/factories/error_tracking/project.rb
index 5e9219b241f..885d398d433 100644
--- a/spec/factories/error_tracking/project.rb
+++ b/spec/factories/error_tracking/project.rb
@@ -2,13 +2,13 @@
FactoryBot.define do
factory :error_tracking_project, class: Gitlab::ErrorTracking::Project do
- id '1'
- name 'Sentry Example'
- slug 'sentry-example'
- status 'active'
- organization_name 'Sentry'
- organization_id '1'
- organization_slug 'sentry'
+ id { '1' }
+ name { 'Sentry Example' }
+ slug { 'sentry-example' }
+ status { 'active' }
+ organization_name { 'Sentry' }
+ organization_id { '1' }
+ organization_slug { 'sentry' }
skip_create
end
diff --git a/spec/factories/events.rb b/spec/factories/events.rb
index b15eb1592fc..4eedcd02c9a 100644
--- a/spec/factories/events.rb
+++ b/spec/factories/events.rb
@@ -4,19 +4,19 @@ FactoryBot.define do
factory :event do
project
author(factory: :user) { project.creator }
- action Event::JOINED
+ action { Event::JOINED }
- trait(:created) { action Event::CREATED }
- trait(:updated) { action Event::UPDATED }
- trait(:closed) { action Event::CLOSED }
- trait(:reopened) { action Event::REOPENED }
- trait(:pushed) { action Event::PUSHED }
- trait(:commented) { action Event::COMMENTED }
- trait(:merged) { action Event::MERGED }
- trait(:joined) { action Event::JOINED }
- trait(:left) { action Event::LEFT }
- trait(:destroyed) { action Event::DESTROYED }
- trait(:expired) { action Event::EXPIRED }
+ trait(:created) { action { Event::CREATED } }
+ trait(:updated) { action { Event::UPDATED } }
+ trait(:closed) { action { Event::CLOSED } }
+ trait(:reopened) { action { Event::REOPENED } }
+ trait(:pushed) { action { Event::PUSHED } }
+ trait(:commented) { action { Event::COMMENTED } }
+ trait(:merged) { action { Event::MERGED } }
+ trait(:joined) { action { Event::JOINED } }
+ trait(:left) { action { Event::LEFT } }
+ trait(:destroyed) { action { Event::DESTROYED } }
+ trait(:expired) { action { Event::EXPIRED } }
factory :closed_issue_event do
action { Event::CLOSED }
@@ -27,15 +27,15 @@ FactoryBot.define do
factory :push_event, class: PushEvent do
project factory: :project_empty_repo
author(factory: :user) { project.creator }
- action Event::PUSHED
+ action { Event::PUSHED }
end
factory :push_event_payload do
event
- commit_count 1
- action :pushed
- ref_type :branch
- ref 'master'
- commit_to '3cdce97ed87c91368561584e7358f4d46e3e173c'
+ commit_count { 1 }
+ action { :pushed }
+ ref_type { :branch }
+ ref { 'master' }
+ commit_to { '3cdce97ed87c91368561584e7358f4d46e3e173c' }
end
end
diff --git a/spec/factories/evidences.rb b/spec/factories/evidences.rb
new file mode 100644
index 00000000000..964f232a1c9
--- /dev/null
+++ b/spec/factories/evidences.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+FactoryBot.define do
+ factory :evidence do
+ release
+ end
+end
diff --git a/spec/factories/external_pull_requests.rb b/spec/factories/external_pull_requests.rb
index 08d0fa4d419..7a6e77f8572 100644
--- a/spec/factories/external_pull_requests.rb
+++ b/spec/factories/external_pull_requests.rb
@@ -4,14 +4,14 @@ FactoryBot.define do
factory :external_pull_request do
sequence(:pull_request_iid)
project
- source_branch 'feature'
- source_repository 'the-repository'
- source_sha '97de212e80737a608d939f648d959671fb0a0142'
- target_branch 'master'
- target_repository 'the-repository'
- target_sha 'a09386439ca39abe575675ffd4b89ae824fec22f'
- status :open
+ source_branch { 'feature' }
+ source_repository { 'the-repository' }
+ source_sha { '97de212e80737a608d939f648d959671fb0a0142' }
+ target_branch { 'master' }
+ target_repository { 'the-repository' }
+ target_sha { 'a09386439ca39abe575675ffd4b89ae824fec22f' }
+ status { :open }
- trait(:closed) { status 'closed' }
+ trait(:closed) { status { 'closed'} }
end
end
diff --git a/spec/factories/file_uploaders.rb b/spec/factories/file_uploaders.rb
index ec8f5c9af2d..dc888fdd535 100644
--- a/spec/factories/file_uploaders.rb
+++ b/spec/factories/file_uploaders.rb
@@ -5,7 +5,7 @@ FactoryBot.define do
skip_create
project
- secret nil
+ secret { nil }
transient do
fixture { 'rails_sample.jpg' }
diff --git a/spec/factories/gitaly/commit.rb b/spec/factories/gitaly/commit.rb
index 954b5338846..ef5301db770 100644
--- a/spec/factories/gitaly/commit.rb
+++ b/spec/factories/gitaly/commit.rb
@@ -12,6 +12,7 @@ FactoryBot.define do
Google::Protobuf::RepeatedField.new(:string, ids)
end
subject { "My commit" }
+
body { subject + "\nMy body" }
author { build(:gitaly_commit_author) }
committer { build(:gitaly_commit_author) }
diff --git a/spec/factories/gpg_signature.rb b/spec/factories/gpg_signature.rb
index a0fc1740d77..2ab4d190276 100644
--- a/spec/factories/gpg_signature.rb
+++ b/spec/factories/gpg_signature.rb
@@ -6,6 +6,6 @@ FactoryBot.define do
project
gpg_key
gpg_key_primary_keyid { gpg_key.keyid }
- verification_status :verified
+ verification_status { :verified }
end
end
diff --git a/spec/factories/grafana_integrations.rb b/spec/factories/grafana_integrations.rb
new file mode 100644
index 00000000000..c19417f5a90
--- /dev/null
+++ b/spec/factories/grafana_integrations.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+FactoryBot.define do
+ factory :grafana_integration, class: GrafanaIntegration do
+ project
+ grafana_url { 'https://grafana.com' }
+ token { SecureRandom.hex(10) }
+ end
+end
diff --git a/spec/factories/group_members.rb b/spec/factories/group_members.rb
index a93f13395a2..3c9d469f23c 100644
--- a/spec/factories/group_members.rb
+++ b/spec/factories/group_members.rb
@@ -6,23 +6,23 @@ FactoryBot.define do
group
user
- trait(:guest) { access_level GroupMember::GUEST }
- trait(:reporter) { access_level GroupMember::REPORTER }
- trait(:developer) { access_level GroupMember::DEVELOPER }
- trait(:maintainer) { access_level GroupMember::MAINTAINER }
- trait(:owner) { access_level GroupMember::OWNER }
+ trait(:guest) { access_level { GroupMember::GUEST } }
+ trait(:reporter) { access_level { GroupMember::REPORTER } }
+ trait(:developer) { access_level { GroupMember::DEVELOPER } }
+ trait(:maintainer) { access_level { GroupMember::MAINTAINER } }
+ trait(:owner) { access_level { GroupMember::OWNER } }
trait(:access_request) { requested_at { Time.now } }
trait(:invited) do
- user_id nil
- invite_token 'xxx'
+ user_id { nil }
+ invite_token { 'xxx' }
sequence :invite_email do |n|
"email#{n}@email.com"
end
end
trait(:ldap) do
- ldap true
+ ldap { true }
end
trait :blocked do
diff --git a/spec/factories/groups.rb b/spec/factories/groups.rb
index d3c6101bad4..93c01f8034d 100644
--- a/spec/factories/groups.rb
+++ b/spec/factories/groups.rb
@@ -4,9 +4,9 @@ FactoryBot.define do
factory :group, class: Group, parent: :namespace do
sequence(:name) { |n| "group#{n}" }
path { name.downcase.gsub(/\s/, '_') }
- type 'Group'
- owner nil
- project_creation_level ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS
+ type { 'Group' }
+ owner { nil }
+ project_creation_level { ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS}
after(:create) do |group|
if group.owner
@@ -17,23 +17,23 @@ FactoryBot.define do
end
trait :public do
- visibility_level Gitlab::VisibilityLevel::PUBLIC
+ visibility_level { Gitlab::VisibilityLevel::PUBLIC}
end
trait :internal do
- visibility_level Gitlab::VisibilityLevel::INTERNAL
+ visibility_level {Gitlab::VisibilityLevel::INTERNAL}
end
trait :private do
- visibility_level Gitlab::VisibilityLevel::PRIVATE
+ visibility_level { Gitlab::VisibilityLevel::PRIVATE}
end
trait :with_avatar do
avatar { fixture_file_upload('spec/fixtures/dk.png') }
end
- trait :access_requestable do
- request_access_enabled true
+ trait :request_access_disabled do
+ request_access_enabled { false }
end
trait :nested do
@@ -41,15 +41,15 @@ FactoryBot.define do
end
trait :auto_devops_enabled do
- auto_devops_enabled true
+ auto_devops_enabled { true }
end
trait :auto_devops_disabled do
- auto_devops_enabled false
+ auto_devops_enabled { false }
end
trait :owner_subgroup_creation_only do
- subgroup_creation_level ::Gitlab::Access::OWNER_SUBGROUP_ACCESS
+ subgroup_creation_level { ::Gitlab::Access::OWNER_SUBGROUP_ACCESS}
end
end
end
diff --git a/spec/factories/identities.rb b/spec/factories/identities.rb
index 21cfe7fe623..a2615ce30c3 100644
--- a/spec/factories/identities.rb
+++ b/spec/factories/identities.rb
@@ -2,7 +2,7 @@
FactoryBot.define do
factory :identity do
- provider 'ldapmain'
- extern_uid 'my-ldap-id'
+ provider { 'ldapmain' }
+ extern_uid { 'my-ldap-id' }
end
end
diff --git a/spec/factories/import_states.rb b/spec/factories/import_states.rb
index 8e778200389..576f68ab57f 100644
--- a/spec/factories/import_states.rb
+++ b/spec/factories/import_states.rb
@@ -2,12 +2,12 @@
FactoryBot.define do
factory :import_state, class: ProjectImportState do
- status :none
+ status { :none }
association :project, factory: :project
transient do
import_url { generate(:url) }
- import_type nil
+ import_type { nil }
end
trait :repository do
@@ -15,23 +15,23 @@ FactoryBot.define do
end
trait :none do
- status :none
+ status { :none }
end
trait :scheduled do
- status :scheduled
+ status { :scheduled }
end
trait :started do
- status :started
+ status { :started }
end
trait :finished do
- status :finished
+ status { :finished }
end
trait :failed do
- status :failed
+ status { :failed }
end
after(:create) do |import_state, evaluator|
diff --git a/spec/factories/internal_ids.rb b/spec/factories/internal_ids.rb
index df5c5beeb42..bc6ea41ec06 100644
--- a/spec/factories/internal_ids.rb
+++ b/spec/factories/internal_ids.rb
@@ -3,7 +3,7 @@
FactoryBot.define do
factory :internal_id do
project
- usage :issues
+ usage { :issues }
last_value { project.issues.maximum(:iid) || 0 }
end
end
diff --git a/spec/factories/issues.rb b/spec/factories/issues.rb
index 434225f7022..46910078ee5 100644
--- a/spec/factories/issues.rb
+++ b/spec/factories/issues.rb
@@ -8,28 +8,32 @@ FactoryBot.define do
updated_by { author }
trait :confidential do
- confidential true
+ confidential { true }
end
trait :opened do
- state :opened
+ state_id { Issue.available_states[:opened] }
end
trait :locked do
- discussion_locked true
+ discussion_locked { true }
end
trait :closed do
- state :closed
+ state_id { Issue.available_states[:closed] }
closed_at { Time.now }
end
+ after(:build) do |issue, evaluator|
+ issue.state_id = Issue.available_states[evaluator.state]
+ end
+
factory :closed_issue, traits: [:closed]
factory :reopened_issue, traits: [:opened]
factory :labeled_issue do
transient do
- labels []
+ labels { [] }
end
after(:create) do |issue, evaluator|
diff --git a/spec/factories/labels.rb b/spec/factories/labels.rb
index 3eed750be03..89fcd8b1a9d 100644
--- a/spec/factories/labels.rb
+++ b/spec/factories/labels.rb
@@ -3,14 +3,14 @@
FactoryBot.define do
trait :base_label do
title { generate(:label_title) }
- color "#990000"
+ color { "#990000" }
end
factory :label, traits: [:base_label], class: ProjectLabel do
project
transient do
- priority nil
+ priority { nil }
end
after(:create) do |label, evaluator|
diff --git a/spec/factories/lfs_file_locks.rb b/spec/factories/lfs_file_locks.rb
index 73675d076ab..a676dabeff2 100644
--- a/spec/factories/lfs_file_locks.rb
+++ b/spec/factories/lfs_file_locks.rb
@@ -4,6 +4,6 @@ FactoryBot.define do
factory :lfs_file_lock do
user
project
- path 'README.md'
+ path { 'README.md' }
end
end
diff --git a/spec/factories/lfs_objects.rb b/spec/factories/lfs_objects.rb
index 631d87cfb12..35fc4db8519 100644
--- a/spec/factories/lfs_objects.rb
+++ b/spec/factories/lfs_objects.rb
@@ -5,7 +5,7 @@ include ActionDispatch::TestProcess
FactoryBot.define do
factory :lfs_object do
sequence(:oid) { |n| "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a%05x" % n }
- size 499013
+ size { 499013 }
end
trait :with_file do
@@ -15,8 +15,8 @@ FactoryBot.define do
# The uniqueness constraint means we can't use the correct OID for all LFS
# objects, so the test needs to decide which (if any) object gets it
trait :correct_oid do
- oid 'b804383982bb89b00e828e3f44c038cc991d3d1768009fc39ba8e2c081b9fb75'
- size 1062
+ oid { 'b804383982bb89b00e828e3f44c038cc991d3d1768009fc39ba8e2c081b9fb75' }
+ size { 1062 }
end
trait :object_storage do
diff --git a/spec/factories/lfs_objects_projects.rb b/spec/factories/lfs_objects_projects.rb
index 7b55cc57f75..7d3e61ea2b1 100644
--- a/spec/factories/lfs_objects_projects.rb
+++ b/spec/factories/lfs_objects_projects.rb
@@ -4,6 +4,6 @@ FactoryBot.define do
factory :lfs_objects_project do
lfs_object
project
- repository_type :project
+ repository_type { :project }
end
end
diff --git a/spec/factories/lists.rb b/spec/factories/lists.rb
index e68611ec518..8785d3f0468 100644
--- a/spec/factories/lists.rb
+++ b/spec/factories/lists.rb
@@ -4,19 +4,19 @@ FactoryBot.define do
factory :list do
board
label
- list_type :label
+ list_type { :label }
sequence(:position)
end
factory :backlog_list, parent: :list do
- list_type :backlog
- label nil
- position nil
+ list_type { :backlog }
+ label { nil }
+ position { nil }
end
factory :closed_list, parent: :list do
- list_type :closed
- label nil
- position nil
+ list_type { :closed }
+ label { nil }
+ position { nil }
end
end
diff --git a/spec/factories/merge_request_diff_files.rb b/spec/factories/merge_request_diff_files.rb
index 469a7a0ac8d..86eff445ec8 100644
--- a/spec/factories/merge_request_diff_files.rb
+++ b/spec/factories/merge_request_diff_files.rb
@@ -4,44 +4,44 @@ FactoryBot.define do
factory :merge_request_diff_file do
association :merge_request_diff
- relative_order 0
- new_file true
- renamed_file false
- deleted_file false
- too_large false
- a_mode 0
- b_mode 100644
- new_path 'foo'
- old_path 'foo'
- diff ''
- binary false
+ relative_order { 0 }
+ new_file { true }
+ renamed_file { false }
+ deleted_file { false }
+ too_large { false }
+ a_mode { 0 }
+ b_mode { 100644 }
+ new_path { 'foo' }
+ old_path { 'foo' }
+ diff { '' }
+ binary { false }
trait :new_file do
- relative_order 0
- new_file true
- renamed_file false
- deleted_file false
- too_large false
- a_mode 0
- b_mode 100644
- new_path 'foo'
- old_path 'foo'
- diff ''
- binary false
+ relative_order { 0 }
+ new_file { true }
+ renamed_file { false }
+ deleted_file { false }
+ too_large { false }
+ a_mode { 0 }
+ b_mode { 100644 }
+ new_path { 'foo' }
+ old_path { 'foo' }
+ diff { '' }
+ binary { false }
end
trait :renamed_file do
- relative_order 662
- new_file false
- renamed_file true
- deleted_file false
- too_large false
- a_mode 100644
- b_mode 100644
- new_path 'bar'
- old_path 'baz'
- diff ''
- binary false
+ relative_order { 662 }
+ new_file { false }
+ renamed_file { true }
+ deleted_file { false }
+ too_large { false }
+ a_mode { 100644 }
+ b_mode { 100644 }
+ new_path { 'bar' }
+ old_path { 'baz' }
+ diff { '' }
+ binary { false }
end
end
end
diff --git a/spec/factories/merge_request_diffs.rb b/spec/factories/merge_request_diffs.rb
index e7b51189538..0c4c3244af5 100644
--- a/spec/factories/merge_request_diffs.rb
+++ b/spec/factories/merge_request_diffs.rb
@@ -3,8 +3,8 @@
FactoryBot.define do
factory :merge_request_diff do
association :merge_request
- state :collected
- commits_count 1
+ state { :collected }
+ commits_count { 1 }
base_commit_sha { Digest::SHA1.hexdigest(SecureRandom.hex) }
head_commit_sha { Digest::SHA1.hexdigest(SecureRandom.hex) }
diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb
index 3d12ff98257..d16e0c10671 100644
--- a/spec/factories/merge_requests.rb
+++ b/spec/factories/merge_requests.rb
@@ -16,36 +16,36 @@ FactoryBot.define do
#
# See also RepoHelpers.sample_compare
#
- source_branch "master"
- target_branch "feature"
+ source_branch { "master" }
+ target_branch { "feature" }
- merge_status "can_be_merged"
+ merge_status { "can_be_merged" }
trait :with_diffs do
end
trait :with_image_diffs do
- source_branch "add_images_and_changes"
- target_branch "master"
+ source_branch { "add_images_and_changes" }
+ target_branch { "master" }
end
trait :without_diffs do
- source_branch "improve/awesome"
- target_branch "master"
+ source_branch { "improve/awesome" }
+ target_branch { "master" }
end
trait :conflict do
- source_branch "feature_conflict"
- target_branch "feature"
+ source_branch { "feature_conflict" }
+ target_branch { "feature" }
end
trait :merged do
- state :merged
+ state_id { MergeRequest.available_states[:merged] }
end
trait :merged_target do
- source_branch "merged-target"
- target_branch "improve/awesome"
+ source_branch { "merged-target" }
+ target_branch { "improve/awesome" }
end
trait :merged_last_month do
@@ -57,7 +57,7 @@ FactoryBot.define do
end
trait :closed do
- state :closed
+ state_id { MergeRequest.available_states[:closed] }
end
trait :closed_last_month do
@@ -69,36 +69,36 @@ FactoryBot.define do
end
trait :opened do
- state :opened
+ state_id { MergeRequest.available_states[:opened] }
end
trait :invalid do
- source_branch "feature_one"
- target_branch "feature_two"
+ source_branch { "feature_one" }
+ target_branch { "feature_two" }
end
trait :locked do
- state :locked
+ state_id { MergeRequest.available_states[:locked] }
end
trait :simple do
- source_branch "feature"
- target_branch "master"
+ source_branch { "feature" }
+ target_branch { "master" }
end
trait :rebased do
- source_branch "markdown"
- target_branch "improve/awesome"
+ source_branch { "markdown" }
+ target_branch { "improve/awesome" }
end
trait :diverged do
- source_branch "feature"
- target_branch "master"
+ source_branch { "feature" }
+ target_branch { "master" }
end
trait :merge_when_pipeline_succeeds do
- auto_merge_enabled true
- auto_merge_strategy AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS
+ auto_merge_enabled { true }
+ auto_merge_strategy { AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS }
merge_user { author }
end
@@ -162,7 +162,7 @@ FactoryBot.define do
end
trait :deployed_review_app do
- target_branch 'pages-deploy-target'
+ target_branch { 'pages-deploy-target' }
transient do
deployment { create(:deployment, :review_app) }
@@ -186,6 +186,10 @@ FactoryBot.define do
end
end
+ after(:build) do |merge_request, evaluator|
+ merge_request.state_id = MergeRequest.available_states[evaluator.state]
+ end
+
after(:create) do |merge_request, evaluator|
merge_request.cache_merge_request_closes_issues!
end
@@ -203,7 +207,7 @@ FactoryBot.define do
factory :labeled_merge_request do
transient do
- labels []
+ labels { [] }
end
after(:create) do |merge_request, evaluator|
diff --git a/spec/factories/milestones.rb b/spec/factories/milestones.rb
index 7d623000fc9..32eee645f6a 100644
--- a/spec/factories/milestones.rb
+++ b/spec/factories/milestones.rb
@@ -5,19 +5,19 @@ FactoryBot.define do
title
transient do
- project nil
- group nil
- project_id nil
- group_id nil
- parent nil
+ project { nil }
+ group { nil }
+ project_id { nil }
+ group_id { nil }
+ resource_parent { nil }
end
trait :active do
- state "active"
+ state { "active" }
end
trait :closed do
- state "closed"
+ state { "closed" }
end
trait :with_dates do
@@ -34,9 +34,9 @@ FactoryBot.define do
milestone.project = evaluator.project
elsif evaluator.project_id
milestone.project_id = evaluator.project_id
- elsif evaluator.parent
- id = evaluator.parent.id
- evaluator.parent.is_a?(Group) ? evaluator.group_id = id : evaluator.project_id = id
+ elsif evaluator.resource_parent
+ id = evaluator.resource_parent.id
+ evaluator.resource_parent.is_a?(Group) ? evaluator.group_id = id : evaluator.project_id = id
else
milestone.project = create(:project)
end
diff --git a/spec/factories/notes.rb b/spec/factories/notes.rb
index 5b9a7e6f864..2f02acca794 100644
--- a/spec/factories/notes.rb
+++ b/spec/factories/notes.rb
@@ -41,14 +41,14 @@ FactoryBot.define do
factory :legacy_diff_note_on_merge_request, traits: [:on_merge_request, :legacy_diff_note], class: LegacyDiffNote do
association :project, :repository
- position ''
+ position { '' }
end
factory :diff_note_on_merge_request, traits: [:on_merge_request], class: DiffNote do
association :project, :repository
transient do
- line_number 14
+ line_number { 14 }
diff_refs { noteable.try(:diff_refs) }
end
@@ -62,6 +62,18 @@ FactoryBot.define do
)
end
+ trait :folded_position do
+ position do
+ Gitlab::Diff::Position.new(
+ old_path: "files/ruby/popen.rb",
+ new_path: "files/ruby/popen.rb",
+ old_line: 1,
+ new_line: 1,
+ diff_refs: diff_refs
+ )
+ end
+ end
+
trait :resolved do
resolved_at { Time.now }
resolved_by { create(:user) }
@@ -87,7 +99,7 @@ FactoryBot.define do
association :project, :repository
transient do
- line_number 14
+ line_number { 14 }
diff_refs { project.commit(commit_id).try(:diff_refs) }
end
@@ -104,14 +116,14 @@ FactoryBot.define do
trait :on_commit do
association :project, :repository
- noteable nil
- noteable_type 'Commit'
- noteable_id nil
+ noteable { nil }
+ noteable_type { 'Commit' }
+ noteable_id { nil }
commit_id { RepoHelpers.sample_commit.id }
end
trait :legacy_diff_note do
- line_code "0_184_184"
+ line_code { "0_184_184" }
end
trait :on_issue do
@@ -132,19 +144,19 @@ FactoryBot.define do
trait :on_personal_snippet do
noteable { create(:personal_snippet) }
- project nil
+ project { nil }
end
trait :system do
- system true
+ system { true }
end
trait :downvote do
- note "thumbsdown"
+ note { "thumbsdown" }
end
trait :upvote do
- note "thumbsup"
+ note { "thumbsup" }
end
trait :with_attachment do
@@ -156,7 +168,7 @@ FactoryBot.define do
end
transient do
- in_reply_to nil
+ in_reply_to { nil }
end
before(:create) do |note, evaluator|
diff --git a/spec/factories/notification_settings.rb b/spec/factories/notification_settings.rb
index c16b0e456ba..025120fefc1 100644
--- a/spec/factories/notification_settings.rb
+++ b/spec/factories/notification_settings.rb
@@ -4,6 +4,6 @@ FactoryBot.define do
factory :notification_setting do
source factory: :project
user
- level 3
+ level { 3 }
end
end
diff --git a/spec/factories/oauth_applications.rb b/spec/factories/oauth_applications.rb
index 4748b320298..aff32805f03 100644
--- a/spec/factories/oauth_applications.rb
+++ b/spec/factories/oauth_applications.rb
@@ -6,6 +6,6 @@ FactoryBot.define do
uid { Doorkeeper::OAuth::Helpers::UniqueToken.generate }
redirect_uri { generate(:url) }
owner
- owner_type 'User'
+ owner_type { 'User' }
end
end
diff --git a/spec/factories/pages_domains.rb b/spec/factories/pages_domains.rb
index ae3988bdd69..91423832888 100644
--- a/spec/factories/pages_domains.rb
+++ b/spec/factories/pages_domains.rb
@@ -6,7 +6,8 @@ FactoryBot.define do
verified_at { Time.now }
enabled_until { 1.week.from_now }
- certificate '-----BEGIN CERTIFICATE-----
+ certificate do
+ '-----BEGIN CERTIFICATE-----
MIICGzCCAYSgAwIBAgIBATANBgkqhkiG9w0BAQUFADAbMRkwFwYDVQQDExB0ZXN0
LWNlcnRpZmljYXRlMB4XDTE2MDIxMjE0MzIwMFoXDTIwMDQxMjE0MzIwMFowGzEZ
MBcGA1UEAxMQdGVzdC1jZXJ0aWZpY2F0ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
@@ -20,8 +21,10 @@ joZp2JHYvNlTPkRJ/J4TcXxBTJmArcQgTIuNoBtC+0A/SwdK4MfTCUY4vNWNdese
5A4K65Nb7Oh1AdQieTBHNXXCdyFsva9/ScfQGEl7p55a52jOPs0StPd7g64uvjlg
YHi2yesCrOvVXt+lgPTd
-----END CERTIFICATE-----'
+ end
- key '-----BEGIN PRIVATE KEY-----
+ key do
+ '-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKS+CfS9GcRSdYSN
SzyH5QJQBr5umRL6E+KilOV39iYFO/9oHjUdapTRWkrwnNPCp7qaeck4Jr8iv14t
PVNDfNr76eGb6/3YknOAP0QOjLWunoC8kjU+N/JHU52NrUeX3qEy8EKV9LeCDJcB
@@ -37,10 +40,11 @@ EPjGlXIT+aW2XiPmK3ZlCDcWIenE+lmtbOpI159Wpk8BGXs/s/xBAkEAlAY3ymgx
63BDJEwvOb2IaP8lDDxNsXx9XJNVvQbv5n15vNsLHbjslHfAhAbxnLQ1fLhUPqSi
nNp/xedE1YxutQ==
-----END PRIVATE KEY-----'
+ end
trait :disabled do
- verified_at nil
- enabled_until nil
+ verified_at { nil }
+ enabled_until { nil }
end
trait :scheduled_for_removal do
@@ -52,7 +56,7 @@ nNp/xedE1YxutQ==
end
trait :unverified do
- verified_at nil
+ verified_at { nil }
end
trait :reverify do
@@ -64,17 +68,18 @@ nNp/xedE1YxutQ==
end
trait :without_certificate do
- certificate nil
+ certificate { nil }
end
trait :without_key do
- key nil
+ key { nil }
end
trait :with_missing_chain do
# This certificate is signed with different key
# And misses the CA to build trust chain
- certificate '-----BEGIN CERTIFICATE-----
+ certificate do
+ '-----BEGIN CERTIFICATE-----
MIIDGTCCAgGgAwIBAgIBAjANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwdUZXN0
IENBMB4XDTE2MDIxMjE0MjMwMFoXDTE3MDIxMTE0MjMwMFowHTEbMBkGA1UEAxMS
dGVzdC1jZXJ0aWZpY2F0ZS0yMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
@@ -93,13 +98,15 @@ WlU8raZoPIqf6H/8JA97pM/nk/3CqCoHsouSQv+jGY4pSL22RqsO0ylIM0LDBbmF
m4AEaojTljX1tMJAF9Rbiw/omam5bDPq2JWtosrz/zB69y5FaQjc6FnCk0M4oN/+
VM+d42lQAgoq318A84Xu5vRh1KCAJuztkhNbM+w=
-----END CERTIFICATE-----'
+ end
end
trait :with_trusted_chain do
# This contains
# [Intermediate #2 (SHA-2)] 'Comodo RSA Domain Validation Secure Server CA'
# [Intermediate #1 (SHA-2)] 'COMODO RSA Certification Authority'
- certificate '-----BEGIN CERTIFICATE-----
+ certificate do
+ '-----BEGIN CERTIFICATE-----
MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB
hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
@@ -166,13 +173,15 @@ B5a6SE2Q8pTIqXOi6wZ7I53eovNNVZ96YUWYGGjHXkBrI/V5eu+MtWuLt29G9Hvx
PUsE2JOAWVrgQSQdso8VYFhH2+9uRv0V9dlfmrPb2LjkQLPNlzmuhbsdjrzch5vR
pu/xO28QOG8=
-----END CERTIFICATE-----'
+ end
end
trait :with_trusted_expired_chain do
# This contains
# Let's Encrypt Authority X3
# DST Root CA X3
- certificate '-----BEGIN CERTIFICATE-----
+ certificate do
+ '-----BEGIN CERTIFICATE-----
MIIFSjCCBDKgAwIBAgISAw24xGWrFotvTBa6AZI/pzq1MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTAzMDcxNzU5NTZaFw0x
@@ -250,10 +259,12 @@ R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----'
+ end
end
trait :with_expired_certificate do
- certificate '-----BEGIN CERTIFICATE-----
+ certificate do
+ '-----BEGIN CERTIFICATE-----
MIIBsDCCARmgAwIBAgIBATANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNleHBp
cmVkLWNlcnRpZmljYXRlMB4XDTE1MDIxMjE0MzMwMFoXDTE2MDIwMTE0MzMwMFow
HjEcMBoGA1UEAxMTZXhwaXJlZC1jZXJ0aWZpY2F0ZTCBnzANBgkqhkiG9w0BAQEF
@@ -265,6 +276,7 @@ Hq9LkWn6WP4EHsesHyslgTQZF8C7kVLTbLn2noLnOE+Mp3vcWlZxl3Yk6aZMhKS+
Iy6oRpHaCF/2obZdIdgf9rlyz0fkqyHJc9GkioSoOhJZxEV2SgAkap8yS0sX2tJ9
ZDXgrA==
-----END CERTIFICATE-----'
+ end
end
trait :letsencrypt do
@@ -273,7 +285,8 @@ ZDXgrA==
end
trait :explicit_ecdsa do
- certificate '-----BEGIN CERTIFICATE-----
+ certificate do
+ '-----BEGIN CERTIFICATE-----
MIID1zCCAzkCCQDatOIwBlktwjAKBggqhkjOPQQDAjBPMQswCQYDVQQGEwJVUzEL
MAkGA1UECAwCTlkxCzAJBgNVBAcMAk5ZMQswCQYDVQQLDAJJVDEZMBcGA1UEAwwQ
dGVzdC1jZXJ0aWZpY2F0ZTAeFw0xOTA4MjkxMTE1NDBaFw0yMTA4MjgxMTE1NDBa
@@ -296,8 +309,10 @@ OjSJpIDdFWGVYJHyMDI5WgQyhm4hAioXJ0T22Zab8Wmq+hBYRJNcHoaV894blfqR
V3ZJgam8EQJCAcnPpJQ0IqoT1pAQkaL3+Ka8ZaaCd6/8RnoDtGvWljisuyH65SRu
kmYv87bZe1KqOZDoaDBdfVsoxcGbik19lBPV
-----END CERTIFICATE-----'
+ end
- key '-----BEGIN EC PARAMETERS-----
+ key do
+ '-----BEGIN EC PARAMETERS-----
MIIBwgIBATBNBgcqhkjOPQEBAkIB////////////////////////////////////
//////////////////////////////////////////////////8wgZ4EQgH/////
////////////////////////////////////////////////////////////////
@@ -326,10 +341,12 @@ ZAkCAQGhgYkDgYYABAFUb/hz+GCXfq2geP54Yvimq/uXsz5kpAni/PRj0TrEjH6C
+Iu6YSMSWFwExlVeJeFvm3F/XW5cBafmfpCF7Llgo8w2MsuoOpobX158IsJ3bUDR
Nw==
-----END EC PRIVATE KEY-----'
+ end
end
trait :ecdsa do
- certificate '-----BEGIN CERTIFICATE-----
+ certificate do
+ '-----BEGIN CERTIFICATE-----
MIIB8zCCAVUCCQCGKuPQ6SBxUTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJVUzEL
MAkGA1UECAwCVVMxCzAJBgNVBAcMAlVTMRUwEwYDVQQDDAxzaHVzaGxpbi5kZXYw
HhcNMTkwOTAyMDkyMDUxWhcNMjEwOTAxMDkyMDUxWjA+MQswCQYDVQQGEwJVUzEL
@@ -342,8 +359,10 @@ R9WYUg5+PQMg7kS+4K/5+5gonWCvaMcP+2P7hltUcvq41l3uMKKCZRU/x60/FMHc
1ZXdAkIBuVtm9RJXziNOKS4TcpH9os/FuREW8YQlpec58LDZdlivcHnikHZ4LCri
T7zu3VY6Rq+V/IKpsQwQjmoTJ0IpCM8=
-----END CERTIFICATE-----'
+ end
- key '-----BEGIN EC PARAMETERS-----
+ key do
+ '-----BEGIN EC PARAMETERS-----
BgUrgQQAIw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
@@ -353,6 +372,7 @@ dNqyCW1lFsgyt6KHJw6H8bhNemSny1O0Sy4P6yHxq7cnLCyLz1FJnq+BWgJjv/8N
Da9qZifIFmpsv5xNAGxDvANQRpLI/RHc/hvo7HfjuljNfBJ1I6tr0KbhMxB76mtU
x6zG6WoibsbsJMj70nwseUnPTBQNDP+j61RJjC/r
-----END EC PRIVATE KEY-----'
+ end
end
end
end
diff --git a/spec/factories/personal_access_tokens.rb b/spec/factories/personal_access_tokens.rb
index cc9b2328705..d8ff2e08657 100644
--- a/spec/factories/personal_access_tokens.rb
+++ b/spec/factories/personal_access_tokens.rb
@@ -4,19 +4,19 @@ FactoryBot.define do
factory :personal_access_token do
user
sequence(:name) { |n| "PAT #{n}" }
- revoked false
+ revoked { false }
expires_at { 5.days.from_now }
- scopes ['api']
- impersonation false
+ scopes { ['api'] }
+ impersonation { false }
after(:build) { |personal_access_token| personal_access_token.ensure_token }
trait :impersonation do
- impersonation true
+ impersonation { true }
end
trait :revoked do
- revoked true
+ revoked { true }
end
trait :expired do
@@ -24,7 +24,7 @@ FactoryBot.define do
end
trait :invalid do
- token_digest nil
+ token_digest { nil }
end
end
end
diff --git a/spec/factories/pool_repositories.rb b/spec/factories/pool_repositories.rb
index 7a8946d47b0..f0905d28c70 100644
--- a/spec/factories/pool_repositories.rb
+++ b/spec/factories/pool_repositories.rb
@@ -3,7 +3,7 @@
FactoryBot.define do
factory :pool_repository do
shard { Shard.by_name("default") }
- state :none
+ state { :none }
before(:create) do |pool|
pool.source_project = create(:project, :repository)
@@ -11,19 +11,19 @@ FactoryBot.define do
end
trait :scheduled do
- state :scheduled
+ state { :scheduled }
end
trait :failed do
- state :failed
+ state { :failed }
end
trait :obsolete do
- state :obsolete
+ state { :obsolete }
end
trait :ready do
- state :ready
+ state { :ready }
after(:create) do |pool|
pool.create_object_pool
diff --git a/spec/factories/programming_languages.rb b/spec/factories/programming_languages.rb
index ee8e7765ec9..7baa63cd4f8 100644
--- a/spec/factories/programming_languages.rb
+++ b/spec/factories/programming_languages.rb
@@ -2,7 +2,7 @@
FactoryBot.define do
factory :programming_language do
- name 'Ruby'
- color '#123456'
+ name { 'Ruby' }
+ color { '#123456' }
end
end
diff --git a/spec/factories/project_auto_devops.rb b/spec/factories/project_auto_devops.rb
index 4cc59c7095c..c87de30211c 100644
--- a/spec/factories/project_auto_devops.rb
+++ b/spec/factories/project_auto_devops.rb
@@ -3,23 +3,23 @@
FactoryBot.define do
factory :project_auto_devops do
project
- enabled true
- deploy_strategy :continuous
+ enabled { true }
+ deploy_strategy { :continuous }
trait :continuous_deployment do
- deploy_strategy ProjectAutoDevops.deploy_strategies[:continuous] # rubocop:disable FactoryBot/DynamicAttributeDefinedStatically
+ deploy_strategy { ProjectAutoDevops.deploy_strategies[:continuous] }
end
trait :manual_deployment do
- deploy_strategy ProjectAutoDevops.deploy_strategies[:manual] # rubocop:disable FactoryBot/DynamicAttributeDefinedStatically
+ deploy_strategy { ProjectAutoDevops.deploy_strategies[:manual] }
end
trait :timed_incremental_deployment do
- deploy_strategy ProjectAutoDevops.deploy_strategies[:timed_incremental] # rubocop:disable FactoryBot/DynamicAttributeDefinedStatically
+ deploy_strategy { ProjectAutoDevops.deploy_strategies[:timed_incremental] }
end
trait :disabled do
- enabled false
+ enabled { false }
end
end
end
diff --git a/spec/factories/project_daily_statistics.rb b/spec/factories/project_daily_statistics.rb
index 7e4142fa401..7aeee55c327 100644
--- a/spec/factories/project_daily_statistics.rb
+++ b/spec/factories/project_daily_statistics.rb
@@ -3,6 +3,6 @@
FactoryBot.define do
factory :project_daily_statistic do
project
- fetch_count 1
+ fetch_count { 1 }
end
end
diff --git a/spec/factories/project_error_tracking_settings.rb b/spec/factories/project_error_tracking_settings.rb
index be30bd0260a..f90a2d17846 100644
--- a/spec/factories/project_error_tracking_settings.rb
+++ b/spec/factories/project_error_tracking_settings.rb
@@ -3,10 +3,10 @@
FactoryBot.define do
factory :project_error_tracking_setting, class: ErrorTracking::ProjectErrorTrackingSetting do
project
- api_url 'https://gitlab.com/api/0/projects/sentry-org/sentry-project'
- enabled true
- token 'access_token_123'
- project_name 'Sentry Project'
- organization_name 'Sentry Org'
+ api_url { 'https://gitlab.com/api/0/projects/sentry-org/sentry-project' }
+ enabled { true }
+ token { 'access_token_123' }
+ project_name { 'Sentry Project' }
+ organization_name { 'Sentry Org' }
end
end
diff --git a/spec/factories/project_group_links.rb b/spec/factories/project_group_links.rb
index b02d167a950..3c8c7a34680 100644
--- a/spec/factories/project_group_links.rb
+++ b/spec/factories/project_group_links.rb
@@ -4,6 +4,6 @@ FactoryBot.define do
factory :project_group_link do
project
group
- expires_at nil
+ expires_at { nil }
end
end
diff --git a/spec/factories/project_hooks.rb b/spec/factories/project_hooks.rb
index 96c9742c7d0..6592141e26d 100644
--- a/spec/factories/project_hooks.rb
+++ b/spec/factories/project_hooks.rb
@@ -3,7 +3,7 @@
FactoryBot.define do
factory :project_hook do
url { generate(:url) }
- enable_ssl_verification false
+ enable_ssl_verification { false }
project
trait :token do
@@ -11,16 +11,16 @@ FactoryBot.define do
end
trait :all_events_enabled do
- push_events true
- merge_requests_events true
- tag_push_events true
- issues_events true
- confidential_issues_events true
- note_events true
- confidential_note_events true
- job_events true
- pipeline_events true
- wiki_page_events true
+ push_events { true }
+ merge_requests_events { true }
+ tag_push_events { true }
+ issues_events { true }
+ confidential_issues_events { true }
+ note_events { true }
+ confidential_note_events { true }
+ job_events { true }
+ pipeline_events { true }
+ wiki_page_events { true }
end
end
end
diff --git a/spec/factories/project_members.rb b/spec/factories/project_members.rb
index 723fa6058fe..e7004937be3 100644
--- a/spec/factories/project_members.rb
+++ b/spec/factories/project_members.rb
@@ -6,16 +6,16 @@ FactoryBot.define do
project
maintainer
- trait(:guest) { access_level ProjectMember::GUEST }
- trait(:reporter) { access_level ProjectMember::REPORTER }
- trait(:developer) { access_level ProjectMember::DEVELOPER }
- trait(:maintainer) { access_level ProjectMember::MAINTAINER }
+ trait(:guest) { access_level { ProjectMember::GUEST } }
+ trait(:reporter) { access_level { ProjectMember::REPORTER } }
+ trait(:developer) { access_level { ProjectMember::DEVELOPER } }
+ trait(:maintainer) { access_level { ProjectMember::MAINTAINER } }
trait(:access_request) { requested_at { Time.now } }
trait(:invited) do
- user_id nil
- invite_token 'xxx'
- invite_email 'email@email.com'
+ user_id { nil }
+ invite_token { 'xxx' }
+ invite_email { 'email@email.com' }
end
trait :blocked do
diff --git a/spec/factories/project_metrics_settings.rb b/spec/factories/project_metrics_settings.rb
index 234753f9b87..51b2ce0e0e9 100644
--- a/spec/factories/project_metrics_settings.rb
+++ b/spec/factories/project_metrics_settings.rb
@@ -3,6 +3,6 @@
FactoryBot.define do
factory :project_metrics_setting, class: ProjectMetricsSetting do
project
- external_dashboard_url 'https://grafana.com'
+ external_dashboard_url { 'https://grafana.com' }
end
end
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index ea89555b0d5..9477eeb18d4 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -13,7 +13,7 @@ FactoryBot.define do
sequence(:name) { |n| "project#{n}" }
path { name.downcase.gsub(/\s/, '_') }
# Behaves differently to nil due to cache_has_external_issue_tracker
- has_external_issue_tracker false
+ has_external_issue_tracker { false }
# Associations
namespace
@@ -21,21 +21,21 @@ FactoryBot.define do
transient do
# Nest Project Feature attributes
- wiki_access_level ProjectFeature::ENABLED
- builds_access_level ProjectFeature::ENABLED
- snippets_access_level ProjectFeature::ENABLED
- issues_access_level ProjectFeature::ENABLED
- merge_requests_access_level ProjectFeature::ENABLED
- repository_access_level ProjectFeature::ENABLED
+ wiki_access_level { ProjectFeature::ENABLED }
+ builds_access_level { ProjectFeature::ENABLED }
+ snippets_access_level { ProjectFeature::ENABLED }
+ issues_access_level { ProjectFeature::ENABLED }
+ merge_requests_access_level { ProjectFeature::ENABLED }
+ repository_access_level { ProjectFeature::ENABLED }
pages_access_level do
visibility_level == Gitlab::VisibilityLevel::PUBLIC ? ProjectFeature::ENABLED : ProjectFeature::PRIVATE
end
# we can't assign the delegated `#ci_cd_settings` attributes directly, as the
# `#ci_cd_settings` relation needs to be created first
- group_runners_enabled nil
- import_status nil
- import_jid nil
+ group_runners_enabled { nil }
+ import_status { nil }
+ import_jid { nil }
end
after(:create) do |project, evaluator|
@@ -80,45 +80,45 @@ FactoryBot.define do
end
trait :public do
- visibility_level Gitlab::VisibilityLevel::PUBLIC
+ visibility_level { Gitlab::VisibilityLevel::PUBLIC }
end
trait :internal do
- visibility_level Gitlab::VisibilityLevel::INTERNAL
+ visibility_level { Gitlab::VisibilityLevel::INTERNAL }
end
trait :private do
- visibility_level Gitlab::VisibilityLevel::PRIVATE
+ visibility_level { Gitlab::VisibilityLevel::PRIVATE }
end
trait :import_scheduled do
- import_status :scheduled
+ import_status { :scheduled }
end
trait :import_started do
- import_status :started
+ import_status { :started }
end
trait :import_finished do
- import_status :finished
+ import_status { :finished }
end
trait :import_failed do
- import_status :failed
+ import_status { :failed }
end
trait :archived do
- archived true
+ archived { true }
end
- storage_version Project::LATEST_STORAGE_VERSION
+ storage_version { Project::LATEST_STORAGE_VERSION }
trait :legacy_storage do
- storage_version nil
+ storage_version { nil }
end
- trait :access_requestable do
- request_access_enabled true
+ trait :request_access_disabled do
+ request_access_enabled { false }
end
trait :with_avatar do
@@ -146,7 +146,7 @@ FactoryBot.define do
# will create a repository containing two files, and two commits, in master
trait :custom_repo do
transient do
- files {}
+ files { {} }
end
after :create do |project, evaluator|
@@ -169,7 +169,7 @@ FactoryBot.define do
test_repo
transient do
- create_templates nil
+ create_templates { nil }
end
after :create do |project, evaluator|
@@ -206,9 +206,9 @@ FactoryBot.define do
trait :remote_mirror do
transient do
- remote_name "remote_mirror_#{SecureRandom.hex}"
- url "http://foo.com"
- enabled true
+ remote_name { "remote_mirror_#{SecureRandom.hex}" }
+ url { "http://foo.com" }
+ enabled { true }
end
after(:create) do |project, evaluator|
project.remote_mirrors.create!(url: evaluator.url, enabled: evaluator.enabled)
@@ -229,7 +229,7 @@ FactoryBot.define do
end
trait :read_only do
- repository_read_only true
+ repository_read_only { true }
end
trait :broken_repo do
@@ -249,29 +249,29 @@ FactoryBot.define do
end
end
- trait(:wiki_enabled) { wiki_access_level ProjectFeature::ENABLED }
- trait(:wiki_disabled) { wiki_access_level ProjectFeature::DISABLED }
- trait(:wiki_private) { wiki_access_level ProjectFeature::PRIVATE }
- trait(:builds_enabled) { builds_access_level ProjectFeature::ENABLED }
- trait(:builds_disabled) { builds_access_level ProjectFeature::DISABLED }
- trait(:builds_private) { builds_access_level ProjectFeature::PRIVATE }
- trait(:snippets_enabled) { snippets_access_level ProjectFeature::ENABLED }
- trait(:snippets_disabled) { snippets_access_level ProjectFeature::DISABLED }
- trait(:snippets_private) { snippets_access_level ProjectFeature::PRIVATE }
- trait(:issues_disabled) { issues_access_level ProjectFeature::DISABLED }
- trait(:issues_enabled) { issues_access_level ProjectFeature::ENABLED }
- trait(:issues_private) { issues_access_level ProjectFeature::PRIVATE }
- trait(:merge_requests_enabled) { merge_requests_access_level ProjectFeature::ENABLED }
- trait(:merge_requests_disabled) { merge_requests_access_level ProjectFeature::DISABLED }
- trait(:merge_requests_private) { merge_requests_access_level ProjectFeature::PRIVATE }
- trait(:merge_requests_public) { merge_requests_access_level ProjectFeature::PUBLIC }
- trait(:repository_enabled) { repository_access_level ProjectFeature::ENABLED }
- trait(:repository_disabled) { repository_access_level ProjectFeature::DISABLED }
- trait(:repository_private) { repository_access_level ProjectFeature::PRIVATE }
- trait(:pages_public) { pages_access_level ProjectFeature::PUBLIC }
- trait(:pages_enabled) { pages_access_level ProjectFeature::ENABLED }
- trait(:pages_disabled) { pages_access_level ProjectFeature::DISABLED }
- trait(:pages_private) { pages_access_level ProjectFeature::PRIVATE }
+ trait(:wiki_enabled) { wiki_access_level { ProjectFeature::ENABLED } }
+ trait(:wiki_disabled) { wiki_access_level { ProjectFeature::DISABLED } }
+ trait(:wiki_private) { wiki_access_level { ProjectFeature::PRIVATE } }
+ trait(:builds_enabled) { builds_access_level { ProjectFeature::ENABLED } }
+ trait(:builds_disabled) { builds_access_level { ProjectFeature::DISABLED } }
+ trait(:builds_private) { builds_access_level { ProjectFeature::PRIVATE } }
+ trait(:snippets_enabled) { snippets_access_level { ProjectFeature::ENABLED } }
+ trait(:snippets_disabled) { snippets_access_level { ProjectFeature::DISABLED } }
+ trait(:snippets_private) { snippets_access_level { ProjectFeature::PRIVATE } }
+ trait(:issues_disabled) { issues_access_level { ProjectFeature::DISABLED } }
+ trait(:issues_enabled) { issues_access_level { ProjectFeature::ENABLED } }
+ trait(:issues_private) { issues_access_level { ProjectFeature::PRIVATE } }
+ trait(:merge_requests_enabled) { merge_requests_access_level { ProjectFeature::ENABLED } }
+ trait(:merge_requests_disabled) { merge_requests_access_level { ProjectFeature::DISABLED } }
+ trait(:merge_requests_private) { merge_requests_access_level { ProjectFeature::PRIVATE } }
+ trait(:merge_requests_public) { merge_requests_access_level { ProjectFeature::PUBLIC } }
+ trait(:repository_enabled) { repository_access_level { ProjectFeature::ENABLED } }
+ trait(:repository_disabled) { repository_access_level { ProjectFeature::DISABLED } }
+ trait(:repository_private) { repository_access_level { ProjectFeature::PRIVATE } }
+ trait(:pages_public) { pages_access_level { ProjectFeature::PUBLIC } }
+ trait(:pages_enabled) { pages_access_level { ProjectFeature::ENABLED } }
+ trait(:pages_disabled) { pages_access_level { ProjectFeature::DISABLED } }
+ trait(:pages_private) { pages_access_level { ProjectFeature::PRIVATE } }
trait :auto_devops do
association :auto_devops, factory: :project_auto_devops
@@ -308,19 +308,19 @@ FactoryBot.define do
end
factory :redmine_project, parent: :project do
- has_external_issue_tracker true
+ has_external_issue_tracker { true }
redmine_service
end
factory :youtrack_project, parent: :project do
- has_external_issue_tracker true
+ has_external_issue_tracker { true }
youtrack_service
end
factory :jira_project, parent: :project do
- has_external_issue_tracker true
+ has_external_issue_tracker { true }
jira_service
end
diff --git a/spec/factories/prometheus_metrics.rb b/spec/factories/prometheus_metrics.rb
index c56644bfb96..f6b58cf84c3 100644
--- a/spec/factories/prometheus_metrics.rb
+++ b/spec/factories/prometheus_metrics.rb
@@ -2,17 +2,17 @@
FactoryBot.define do
factory :prometheus_metric, class: PrometheusMetric do
- title 'title'
- query 'avg(metric)'
- y_label 'y_label'
- unit 'm/s'
- group :business
+ title { 'title' }
+ query { 'avg(metric)' }
+ y_label { 'y_label' }
+ unit { 'm/s' }
+ group { :business }
project
- legend 'legend'
+ legend { 'legend' }
trait :common do
- common true
- project nil
+ common { true }
+ project { nil }
end
end
end
diff --git a/spec/factories/protected_branches.rb b/spec/factories/protected_branches.rb
index 741615bc0d3..2d3abc77350 100644
--- a/spec/factories/protected_branches.rb
+++ b/spec/factories/protected_branches.rb
@@ -6,14 +6,14 @@ FactoryBot.define do
project
transient do
- default_push_level true
- default_merge_level true
- default_access_level true
+ default_push_level { true }
+ default_merge_level { true }
+ default_access_level { true }
end
trait :developers_can_push do
transient do
- default_push_level false
+ default_push_level { false }
end
after(:build) do |protected_branch|
@@ -23,7 +23,7 @@ FactoryBot.define do
trait :developers_can_merge do
transient do
- default_merge_level false
+ default_merge_level { false }
end
after(:build) do |protected_branch|
@@ -33,7 +33,7 @@ FactoryBot.define do
trait :no_one_can_push do
transient do
- default_push_level false
+ default_push_level { false }
end
after(:build) do |protected_branch|
@@ -43,7 +43,7 @@ FactoryBot.define do
trait :maintainers_can_push do
transient do
- default_push_level false
+ default_push_level { false }
end
after(:build) do |protected_branch|
diff --git a/spec/factories/protected_tags.rb b/spec/factories/protected_tags.rb
index 6ff2a245b58..3859267ecaf 100644
--- a/spec/factories/protected_tags.rb
+++ b/spec/factories/protected_tags.rb
@@ -6,12 +6,12 @@ FactoryBot.define do
project
transient do
- default_access_level true
+ default_access_level { true }
end
trait :developers_can_create do
transient do
- default_access_level false
+ default_access_level { false }
end
after(:build) do |protected_tag|
@@ -21,7 +21,7 @@ FactoryBot.define do
trait :no_one_can_create do
transient do
- default_access_level false
+ default_access_level { false }
end
after(:build) do |protected_tag|
@@ -31,7 +31,7 @@ FactoryBot.define do
trait :maintainers_can_create do
transient do
- default_access_level false
+ default_access_level { false }
end
after(:build) do |protected_tag|
diff --git a/spec/factories/releases.rb b/spec/factories/releases.rb
index 34794f57284..2f77bb95ea3 100644
--- a/spec/factories/releases.rb
+++ b/spec/factories/releases.rb
@@ -2,17 +2,17 @@
FactoryBot.define do
factory :release do
- tag "v1.1.0"
- sha 'b83d6e391c22777fca1ed3012fce84f633d7fed0'
+ tag { "v1.1.0" }
+ sha { 'b83d6e391c22777fca1ed3012fce84f633d7fed0' }
name { tag }
- description "Awesome release"
+ description { "Awesome release" }
project
author
released_at { Time.zone.parse('2018-10-20T18:00:00Z') }
trait :legacy do
- sha nil
- author nil
+ sha { nil }
+ author { nil }
end
end
end
diff --git a/spec/factories/remote_mirrors.rb b/spec/factories/remote_mirrors.rb
index ff1d751c86c..124c0510cab 100644
--- a/spec/factories/remote_mirrors.rb
+++ b/spec/factories/remote_mirrors.rb
@@ -3,6 +3,6 @@
FactoryBot.define do
factory :remote_mirror, class: 'RemoteMirror' do
association :project, :repository
- url "http://foo:bar@test.com"
+ url { "http://foo:bar@test.com" }
end
end
diff --git a/spec/factories/repository_languages.rb b/spec/factories/repository_languages.rb
index b2b17ebbce2..884298033ac 100644
--- a/spec/factories/repository_languages.rb
+++ b/spec/factories/repository_languages.rb
@@ -4,6 +4,6 @@ FactoryBot.define do
factory :repository_language do
project
programming_language
- share 98.5
+ share { 98.5 }
end
end
diff --git a/spec/factories/resource_label_events.rb b/spec/factories/resource_label_events.rb
index 739ba901052..b59da465fc3 100644
--- a/spec/factories/resource_label_events.rb
+++ b/spec/factories/resource_label_events.rb
@@ -2,7 +2,7 @@
FactoryBot.define do
factory :resource_label_event do
- action :add
+ action { :add }
label
user { issuable&.author || create(:user) }
diff --git a/spec/factories/services.rb b/spec/factories/services.rb
index c4cb3f07fe7..f9c77dbf87f 100644
--- a/spec/factories/services.rb
+++ b/spec/factories/services.rb
@@ -3,54 +3,58 @@
FactoryBot.define do
factory :service do
project
- type 'Service'
+ type { 'Service' }
end
factory :custom_issue_tracker_service, class: CustomIssueTrackerService do
project
- active true
+ active { true }
issue_tracker
end
factory :emails_on_push_service do
project
- type 'EmailsOnPushService'
- active true
- push_events true
- tag_push_events true
- properties(
- recipients: 'test@example.com',
- disable_diffs: true,
- send_from_committer_email: true
- )
+ type { 'EmailsOnPushService' }
+ active { true }
+ push_events { true }
+ tag_push_events { true }
+ properties do
+ {
+ recipients: 'test@example.com',
+ disable_diffs: true,
+ send_from_committer_email: true
+ }
+ end
end
factory :mock_deployment_service do
project
- type 'MockDeploymentService'
- active true
+ type { 'MockDeploymentService' }
+ active { true }
end
factory :prometheus_service do
project
- active true
- properties({
- api_url: 'https://prometheus.example.com/',
- manual_configuration: true
- })
+ active { true }
+ properties do
+ {
+ api_url: 'https://prometheus.example.com/',
+ manual_configuration: true
+ }
+ end
end
factory :jira_service do
project
- active true
+ active { true }
transient do
- create_data true
- url 'https://jira.example.com'
- api_url nil
- username 'jira_username'
- password 'jira_password'
- jira_issue_transition_id '56-1'
+ create_data { true }
+ url { 'https://jira.example.com' }
+ api_url { nil }
+ username { 'jira_username' }
+ password { 'jira_password' }
+ jira_issue_transition_id { '56-1' }
end
after(:build) do |service, evaluator|
@@ -65,34 +69,34 @@ FactoryBot.define do
factory :bugzilla_service do
project
- active true
+ active { true }
issue_tracker
end
factory :redmine_service do
project
- active true
+ active { true }
issue_tracker
end
factory :youtrack_service do
project
- active true
+ active { true }
issue_tracker
end
factory :gitlab_issue_tracker_service do
project
- active true
+ active { true }
issue_tracker
end
trait :issue_tracker do
transient do
- create_data true
- project_url 'http://issuetracker.example.com'
- issues_url 'http://issues.example.com/issues/:id'
- new_issue_url 'http://new-issue.example.com'
+ create_data { true }
+ project_url { 'http://issuetracker.example.com' }
+ issues_url { 'http://issues.example.com/issues/:id' }
+ new_issue_url { 'http://new-issue.example.com' }
end
after(:build) do |service, evaluator|
@@ -105,29 +109,29 @@ FactoryBot.define do
end
trait :jira_cloud_service do
- url 'https://mysite.atlassian.net'
- username 'jira_user'
- password 'my-secret-password'
+ url { 'https://mysite.atlassian.net' }
+ username { 'jira_user' }
+ password { 'my-secret-password' }
end
factory :hipchat_service do
project
- type 'HipchatService'
- token 'test_token'
+ type { 'HipchatService' }
+ token { 'test_token' }
end
# this is for testing storing values inside properties, which is deprecated and will be removed in
- # https://gitlab.com/gitlab-org/gitlab-ce/issues/63084
+ # https://gitlab.com/gitlab-org/gitlab/issues/29404
trait :without_properties_callback do
- jira_tracker_data nil
- issue_tracker_data nil
- create_data false
+ jira_tracker_data { nil }
+ issue_tracker_data { nil }
+ create_data { false }
after(:build) do |service|
IssueTrackerService.skip_callback(:validation, :before, :handle_properties)
end
- to_create { |instance| instance.save(validate: false)}
+ to_create { |instance| instance.save(validate: false) }
after(:create) do
IssueTrackerService.set_callback(:validation, :before, :handle_properties)
diff --git a/spec/factories/shards.rb b/spec/factories/shards.rb
index c30a38180e8..357d3bfbfa1 100644
--- a/spec/factories/shards.rb
+++ b/spec/factories/shards.rb
@@ -2,6 +2,6 @@
FactoryBot.define do
factory :shard do
- name "default"
+ name { "default" }
end
end
diff --git a/spec/factories/snippets.rb b/spec/factories/snippets.rb
index 9c3a0fbe9b3..ede071ae70c 100644
--- a/spec/factories/snippets.rb
+++ b/spec/factories/snippets.rb
@@ -9,15 +9,15 @@ FactoryBot.define do
file_name { generate(:filename) }
trait :public do
- visibility_level Snippet::PUBLIC
+ visibility_level { Snippet::PUBLIC }
end
trait :internal do
- visibility_level Snippet::INTERNAL
+ visibility_level { Snippet::INTERNAL }
end
trait :private do
- visibility_level Snippet::PRIVATE
+ visibility_level { Snippet::PRIVATE }
end
end
diff --git a/spec/factories/spam_logs.rb b/spec/factories/spam_logs.rb
index 42a856832e7..ec4454cac57 100644
--- a/spec/factories/spam_logs.rb
+++ b/spec/factories/spam_logs.rb
@@ -4,7 +4,7 @@ FactoryBot.define do
factory :spam_log do
user
sequence(:source_ip) { |n| "42.42.42.#{n % 255}" }
- noteable_type 'Issue'
+ noteable_type { 'Issue' }
sequence(:title) { |n| "Spam title #{n}" }
description { "Spam description\nwith\nmultiple\nlines" }
end
diff --git a/spec/factories/suggestions.rb b/spec/factories/suggestions.rb
index b1427e0211f..420c59df40e 100644
--- a/spec/factories/suggestions.rb
+++ b/spec/factories/suggestions.rb
@@ -2,18 +2,18 @@
FactoryBot.define do
factory :suggestion do
- relative_order 0
+ relative_order { 0 }
association :note, factory: :diff_note_on_merge_request
- from_content " vars = {\n"
- to_content " vars = [\n"
+ from_content { " vars = {\n" }
+ to_content { " vars = [\n" }
trait :unappliable do
- from_content "foo"
- to_content "foo"
+ from_content { "foo" }
+ to_content { "foo" }
end
trait :applied do
- applied true
+ applied { true }
commit_id { RepoHelpers.sample_commit.id }
end
diff --git a/spec/factories/system_note_metadata.rb b/spec/factories/system_note_metadata.rb
index 8cd4b77799c..56941edba1f 100644
--- a/spec/factories/system_note_metadata.rb
+++ b/spec/factories/system_note_metadata.rb
@@ -3,6 +3,6 @@
FactoryBot.define do
factory :system_note_metadata do
note
- action 'merge'
+ action { 'merge' }
end
end
diff --git a/spec/factories/term_agreements.rb b/spec/factories/term_agreements.rb
index b7e259bd44b..150948df044 100644
--- a/spec/factories/term_agreements.rb
+++ b/spec/factories/term_agreements.rb
@@ -7,10 +7,10 @@ FactoryBot.define do
end
trait :declined do
- accepted false
+ accepted { false }
end
trait :accepted do
- accepted true
+ accepted { true }
end
end
diff --git a/spec/factories/terms.rb b/spec/factories/terms.rb
index b890261d293..b98a2453f7e 100644
--- a/spec/factories/terms.rb
+++ b/spec/factories/terms.rb
@@ -2,6 +2,6 @@
FactoryBot.define do
factory :term, class: ApplicationSetting::Term do
- terms "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+ terms { "Lorem ipsum dolor sit amet, consectetur adipiscing elit." }
end
end
diff --git a/spec/factories/timelogs.rb b/spec/factories/timelogs.rb
index 056a8833c46..5d34acc635d 100644
--- a/spec/factories/timelogs.rb
+++ b/spec/factories/timelogs.rb
@@ -4,7 +4,7 @@
FactoryBot.define do
factory :timelog do
- time_spent 3600
+ time_spent { 3600 }
issue
user { issue.project.creator }
end
diff --git a/spec/factories/todos.rb b/spec/factories/todos.rb
index 2ff024112a4..bb91fc9ac8e 100644
--- a/spec/factories/todos.rb
+++ b/spec/factories/todos.rb
@@ -38,11 +38,11 @@ FactoryBot.define do
end
trait :pending do
- state :pending
+ state { :pending }
end
trait :done do
- state :done
+ state { :done }
end
end
@@ -52,6 +52,6 @@ FactoryBot.define do
user
action { Todo::ASSIGNED }
commit_id { RepoHelpers.sample_commit.id }
- target_type "Commit"
+ target_type { "Commit" }
end
end
diff --git a/spec/factories/u2f_registrations.rb b/spec/factories/u2f_registrations.rb
index c968468834b..7017b0ee9e7 100644
--- a/spec/factories/u2f_registrations.rb
+++ b/spec/factories/u2f_registrations.rb
@@ -5,6 +5,6 @@ FactoryBot.define do
certificate { FFaker::BaconIpsum.characters(728) }
key_handle { FFaker::BaconIpsum.characters(86) }
public_key { FFaker::BaconIpsum.characters(88) }
- counter 0
+ counter { 0 }
end
end
diff --git a/spec/factories/uploads.rb b/spec/factories/uploads.rb
index 3f6326114c9..a060cd7d6f8 100644
--- a/spec/factories/uploads.rb
+++ b/spec/factories/uploads.rb
@@ -2,32 +2,36 @@
FactoryBot.define do
factory :upload do
- model { build(:project) }
+ model { create(:project) }
size { 100.kilobytes }
- uploader "AvatarUploader"
- mount_point :avatar
- secret nil
- store ObjectStorage::Store::LOCAL
+ uploader { "AvatarUploader" }
+ mount_point { :avatar }
+ secret { nil }
+ store { ObjectStorage::Store::LOCAL }
# we should build a mount agnostic upload by default
transient do
- filename 'myfile.jpg'
+ filename { 'avatar.jpg' }
end
- # this needs to comply with RecordsUpload::Concern#upload_path
- path { File.join("uploads/-/system", model.class.underscore, mount_point.to_s, 'avatar.jpg') }
+ path do
+ uploader_instance = Object.const_get(uploader.to_s, false).new(model, mount_point)
+ File.join(uploader_instance.store_dir, filename)
+ end
trait :personal_snippet_upload do
- uploader "PersonalFileUploader"
+ model { create(:personal_snippet) }
path { File.join(secret, filename) }
- model { build(:personal_snippet) }
+ uploader { "PersonalFileUploader" }
secret { SecureRandom.hex }
+ mount_point { nil }
end
trait :issuable_upload do
- uploader "FileUploader"
+ uploader { "FileUploader" }
path { File.join(secret, filename) }
secret { SecureRandom.hex }
+ mount_point { nil }
end
trait :with_file do
@@ -38,27 +42,28 @@ FactoryBot.define do
end
trait :object_storage do
- store ObjectStorage::Store::REMOTE
+ store { ObjectStorage::Store::REMOTE }
end
trait :namespace_upload do
- model { build(:group) }
+ model { create(:group) }
path { File.join(secret, filename) }
- uploader "NamespaceFileUploader"
+ uploader { "NamespaceFileUploader" }
secret { SecureRandom.hex }
+ mount_point { nil }
end
trait :favicon_upload do
- model { build(:appearance) }
- path { File.join(secret, filename) }
- uploader "FaviconUploader"
+ model { create(:appearance) }
+ uploader { "FaviconUploader" }
secret { SecureRandom.hex }
+ mount_point { :favicon }
end
trait :attachment_upload do
- mount_point :attachment
- model { build(:note) }
- uploader "AttachmentUploader"
+ mount_point { :attachment }
+ model { create(:note) }
+ uploader { "AttachmentUploader" }
end
end
end
diff --git a/spec/factories/user_agent_details.rb b/spec/factories/user_agent_details.rb
index 055aea50585..3185ded26ce 100644
--- a/spec/factories/user_agent_details.rb
+++ b/spec/factories/user_agent_details.rb
@@ -2,8 +2,8 @@
FactoryBot.define do
factory :user_agent_detail do
- ip_address '127.0.0.1'
- user_agent 'AppleWebKit/537.36'
+ ip_address { '127.0.0.1' }
+ user_agent { 'AppleWebKit/537.36' }
association :subject, factory: :issue
end
end
diff --git a/spec/factories/user_callouts.rb b/spec/factories/user_callouts.rb
index c4a217fd357..cedc6efd8d7 100644
--- a/spec/factories/user_callouts.rb
+++ b/spec/factories/user_callouts.rb
@@ -2,7 +2,7 @@
FactoryBot.define do
factory :user_callout do
- feature_name :gke_cluster_integration
+ feature_name { :gke_cluster_integration }
user
end
diff --git a/spec/factories/user_statuses.rb b/spec/factories/user_statuses.rb
index 9998ae9609c..dbed6031ce1 100644
--- a/spec/factories/user_statuses.rb
+++ b/spec/factories/user_statuses.rb
@@ -3,7 +3,7 @@
FactoryBot.define do
factory :user_status do
user
- emoji 'coffee'
- message 'I crave coffee'
+ emoji { 'coffee' }
+ message { 'I crave coffee' }
end
end
diff --git a/spec/factories/users.rb b/spec/factories/users.rb
index 57e58513529..f83c137b758 100644
--- a/spec/factories/users.rb
+++ b/spec/factories/users.rb
@@ -5,17 +5,18 @@ FactoryBot.define do
email { generate(:email) }
name { generate(:name) }
username { generate(:username) }
- password "12345678"
+ password { "12345678" }
+ role { 'software_developer' }
confirmed_at { Time.now }
confirmation_token { nil }
- can_create_group true
+ can_create_group { true }
after(:stub) do |user|
user.notification_email = user.email
end
trait :admin do
- admin true
+ admin { true }
end
trait :blocked do
@@ -23,7 +24,7 @@ FactoryBot.define do
end
trait :external do
- external true
+ external { true }
end
trait :two_factor do
@@ -31,7 +32,7 @@ FactoryBot.define do
end
trait :ghost do
- ghost true
+ ghost { true }
after(:build) { |user, _| user.block! }
end
@@ -40,11 +41,11 @@ FactoryBot.define do
end
trait :with_sign_ins do
- sign_in_count 3
+ sign_in_count { 3 }
current_sign_in_at { Time.now }
last_sign_in_at { FFaker::Time.between(10.days.ago, 1.day.ago) }
- current_sign_in_ip '127.0.0.1'
- last_sign_in_ip '127.0.0.1'
+ current_sign_in_ip { '127.0.0.1' }
+ last_sign_in_ip { '127.0.0.1' }
end
trait :two_factor_via_otp do
@@ -57,7 +58,7 @@ FactoryBot.define do
end
trait :two_factor_via_u2f do
- transient { registrations_count 5 }
+ transient { registrations_count { 5 } }
after(:create) do |user, evaluator|
create_list(:u2f_registration, evaluator.registrations_count, user: user)
@@ -65,7 +66,7 @@ FactoryBot.define do
end
trait :readme do
- project_view :readme
+ project_view { :readme }
end
trait :commit_email do
@@ -77,7 +78,7 @@ FactoryBot.define do
end
transient do
- developer_projects []
+ developer_projects { [] }
end
after(:create) do |user, evaluator|
@@ -88,8 +89,8 @@ FactoryBot.define do
factory :omniauth_user do
transient do
- extern_uid '123456'
- provider 'ldapmain'
+ extern_uid { '123456' }
+ provider { 'ldapmain' }
end
after(:create) do |user, evaluator|
diff --git a/spec/factories/web_hook_log.rb b/spec/factories/web_hook_log.rb
index 5750af85662..65b91b7183a 100644
--- a/spec/factories/web_hook_log.rb
+++ b/spec/factories/web_hook_log.rb
@@ -3,14 +3,20 @@
FactoryBot.define do
factory :web_hook_log do
web_hook factory: :project_hook
- trigger 'push_hooks'
+ trigger { 'push_hooks' }
url { generate(:url) }
- request_headers {}
- request_data {}
- response_headers {}
- response_body ''
- response_status '200'
- execution_duration 2.0
- internal_error_message nil
+ request_headers do
+ {}
+ end
+ request_data do
+ {}
+ end
+ response_headers do
+ {}
+ end
+ response_body { '' }
+ response_status { '200' }
+ execution_duration { 2.0 }
+ internal_error_message { nil }
end
end
diff --git a/spec/factories/wiki_directories.rb b/spec/factories/wiki_directories.rb
index de23cf110b5..afa003617c4 100644
--- a/spec/factories/wiki_directories.rb
+++ b/spec/factories/wiki_directories.rb
@@ -4,7 +4,7 @@ FactoryBot.define do
factory :wiki_directory do
skip_create
- slug '/path_up_to/dir'
+ slug { '/path_up_to/dir' }
initialize_with { new(slug) }
end
end
diff --git a/spec/factories_spec.rb b/spec/factories_spec.rb
index 66b71d0f556..aa72a116be2 100644
--- a/spec/factories_spec.rb
+++ b/spec/factories_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'factories' do
diff --git a/spec/fast_spec_helper.rb b/spec/fast_spec_helper.rb
index f5a487b4d57..1a8af335244 100644
--- a/spec/fast_spec_helper.rb
+++ b/spec/fast_spec_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'bundler/setup'
ENV['GITLAB_ENV'] = 'test'
diff --git a/spec/features/admin/admin_settings_spec.rb b/spec/features/admin/admin_settings_spec.rb
index ab58d9fb9d5..e1c9364067a 100644
--- a/spec/features/admin/admin_settings_spec.rb
+++ b/spec/features/admin/admin_settings_spec.rb
@@ -2,450 +2,529 @@
require 'spec_helper'
-describe 'Admin updates settings' do
+describe 'Admin updates settings', :clean_gitlab_redis_shared_state, :do_not_mock_admin_mode do
include StubENV
include TermsHelper
let(:admin) { create(:admin) }
- before do
- stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
- sign_in(admin)
- end
-
- context 'General page' do
+ context 'feature flag :user_mode_in_session is enabled' do
before do
- visit general_admin_application_settings_path
+ stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
+ sign_in(admin)
+ gitlab_enable_admin_mode_sign_in(admin)
end
- it 'Change visibility settings' do
- page.within('.as-visibility-access') do
- choose "application_setting_default_project_visibility_20"
- click_button 'Save changes'
+ context 'General page' do
+ before do
+ visit general_admin_application_settings_path
end
- expect(page).to have_content "Application settings saved successfully"
- end
+ it 'Change visibility settings' do
+ page.within('.as-visibility-access') do
+ choose "application_setting_default_project_visibility_20"
+ click_button 'Save changes'
+ end
- it 'Uncheck all restricted visibility levels' do
- page.within('.as-visibility-access') do
- find('#application_setting_visibility_level_0').set(false)
- find('#application_setting_visibility_level_10').set(false)
- find('#application_setting_visibility_level_20').set(false)
- click_button 'Save changes'
+ expect(page).to have_content "Application settings saved successfully"
end
- expect(page).to have_content "Application settings saved successfully"
- expect(find('#application_setting_visibility_level_0')).not_to be_checked
- expect(find('#application_setting_visibility_level_10')).not_to be_checked
- expect(find('#application_setting_visibility_level_20')).not_to be_checked
- end
+ it 'Uncheck all restricted visibility levels' do
+ page.within('.as-visibility-access') do
+ find('#application_setting_visibility_level_0').set(false)
+ find('#application_setting_visibility_level_10').set(false)
+ find('#application_setting_visibility_level_20').set(false)
+ click_button 'Save changes'
+ end
+
+ expect(page).to have_content "Application settings saved successfully"
+ expect(find('#application_setting_visibility_level_0')).not_to be_checked
+ expect(find('#application_setting_visibility_level_10')).not_to be_checked
+ expect(find('#application_setting_visibility_level_20')).not_to be_checked
+ end
- it 'Modify import sources' do
- expect(current_settings.import_sources).not_to be_empty
+ it 'Modify import sources' do
+ expect(current_settings.import_sources).not_to be_empty
- page.within('.as-visibility-access') do
- Gitlab::ImportSources.options.map do |name, _|
- uncheck name
+ page.within('.as-visibility-access') do
+ Gitlab::ImportSources.options.map do |name, _|
+ uncheck name
+ end
+
+ click_button 'Save changes'
end
- click_button 'Save changes'
- end
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.import_sources).to be_empty
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.import_sources).to be_empty
+ page.within('.as-visibility-access') do
+ check "Repo by URL"
+ click_button 'Save changes'
+ end
- page.within('.as-visibility-access') do
- check "Repo by URL"
- click_button 'Save changes'
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.import_sources).to eq(['git'])
end
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.import_sources).to eq(['git'])
- end
+ it 'Change Visibility and Access Controls' do
+ page.within('.as-visibility-access') do
+ uncheck 'Project export enabled'
+ click_button 'Save changes'
+ end
- it 'Change Visibility and Access Controls' do
- page.within('.as-visibility-access') do
- uncheck 'Project export enabled'
- click_button 'Save changes'
+ expect(current_settings.project_export_enabled).to be_falsey
+ expect(page).to have_content "Application settings saved successfully"
end
- expect(current_settings.project_export_enabled).to be_falsey
- expect(page).to have_content "Application settings saved successfully"
- end
+ it 'Change Keys settings' do
+ page.within('.as-visibility-access') do
+ select 'Are forbidden', from: 'RSA SSH keys'
+ select 'Are allowed', from: 'DSA SSH keys'
+ select 'Must be at least 384 bits', from: 'ECDSA SSH keys'
+ select 'Are forbidden', from: 'ED25519 SSH keys'
+ click_on 'Save changes'
+ end
- it 'Change Keys settings' do
- page.within('.as-visibility-access') do
- select 'Are forbidden', from: 'RSA SSH keys'
- select 'Are allowed', from: 'DSA SSH keys'
- select 'Must be at least 384 bits', from: 'ECDSA SSH keys'
- select 'Are forbidden', from: 'ED25519 SSH keys'
- click_on 'Save changes'
- end
+ forbidden = ApplicationSetting::FORBIDDEN_KEY_VALUE.to_s
- forbidden = ApplicationSetting::FORBIDDEN_KEY_VALUE.to_s
+ expect(page).to have_content 'Application settings saved successfully'
+ expect(find_field('RSA SSH keys').value).to eq(forbidden)
+ expect(find_field('DSA SSH keys').value).to eq('0')
+ expect(find_field('ECDSA SSH keys').value).to eq('384')
+ expect(find_field('ED25519 SSH keys').value).to eq(forbidden)
+ end
- expect(page).to have_content 'Application settings saved successfully'
- expect(find_field('RSA SSH keys').value).to eq(forbidden)
- expect(find_field('DSA SSH keys').value).to eq('0')
- expect(find_field('ECDSA SSH keys').value).to eq('384')
- expect(find_field('ED25519 SSH keys').value).to eq(forbidden)
- end
+ it 'Change Account and Limit Settings' do
+ page.within('.as-account-limit') do
+ uncheck 'Gravatar enabled'
+ click_button 'Save changes'
+ end
- it 'Change Account and Limit Settings' do
- page.within('.as-account-limit') do
- uncheck 'Gravatar enabled'
- click_button 'Save changes'
+ expect(current_settings.gravatar_enabled).to be_falsey
+ expect(page).to have_content "Application settings saved successfully"
end
- expect(current_settings.gravatar_enabled).to be_falsey
- expect(page).to have_content "Application settings saved successfully"
- end
+ it 'Change New users set to external', :js do
+ user_internal_regex = find('#application_setting_user_default_internal_regex', visible: :all)
- it 'Change New users set to external', :js do
- user_internal_regex = find('#application_setting_user_default_internal_regex', visible: :all)
+ expect(user_internal_regex).to be_readonly
+ expect(user_internal_regex['placeholder']).to eq 'To define internal users, first enable new users set to external'
- expect(user_internal_regex).to be_readonly
- expect(user_internal_regex['placeholder']).to eq 'To define internal users, first enable new users set to external'
+ check 'application_setting_user_default_external'
- check 'application_setting_user_default_external'
+ expect(user_internal_regex).not_to be_readonly
+ expect(user_internal_regex['placeholder']).to eq 'Regex pattern'
+ end
- expect(user_internal_regex).not_to be_readonly
- expect(user_internal_regex['placeholder']).to eq 'Regex pattern'
- end
+ it 'Change Sign-in restrictions' do
+ page.within('.as-signin') do
+ fill_in 'Home page URL', with: 'https://about.gitlab.com/'
+ click_button 'Save changes'
+ end
- it 'Change Sign-in restrictions' do
- page.within('.as-signin') do
- fill_in 'Home page URL', with: 'https://about.gitlab.com/'
- click_button 'Save changes'
+ expect(current_settings.home_page_url).to eq "https://about.gitlab.com/"
+ expect(page).to have_content "Application settings saved successfully"
end
- expect(current_settings.home_page_url).to eq "https://about.gitlab.com/"
- expect(page).to have_content "Application settings saved successfully"
- end
+ it 'Terms of Service' do
+ # Already have the admin accept terms, so they don't need to accept in this spec.
+ _existing_terms = create(:term)
+ accept_terms(admin)
- it 'Terms of Service' do
- # Already have the admin accept terms, so they don't need to accept in this spec.
- _existing_terms = create(:term)
- accept_terms(admin)
+ page.within('.as-terms') do
+ check 'Require all users to accept Terms of Service and Privacy Policy when they access GitLab.'
+ fill_in 'Terms of Service Agreement', with: 'Be nice!'
+ click_button 'Save changes'
+ end
- page.within('.as-terms') do
- check 'Require all users to accept Terms of Service and Privacy Policy when they access GitLab.'
- fill_in 'Terms of Service Agreement', with: 'Be nice!'
- click_button 'Save changes'
+ expect(current_settings.enforce_terms).to be(true)
+ expect(current_settings.terms).to eq 'Be nice!'
+ expect(page).to have_content 'Application settings saved successfully'
end
- expect(current_settings.enforce_terms).to be(true)
- expect(current_settings.terms).to eq 'Be nice!'
- expect(page).to have_content 'Application settings saved successfully'
- end
+ it 'Modify oauth providers' do
+ expect(current_settings.disabled_oauth_sign_in_sources).to be_empty
- it 'Modify oauth providers' do
- expect(current_settings.disabled_oauth_sign_in_sources).to be_empty
+ page.within('.as-signin') do
+ uncheck 'Google'
+ click_button 'Save changes'
+ end
- page.within('.as-signin') do
- uncheck 'Google'
- click_button 'Save changes'
- end
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.disabled_oauth_sign_in_sources).to include('google_oauth2')
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.disabled_oauth_sign_in_sources).to include('google_oauth2')
+ page.within('.as-signin') do
+ check "Google"
+ click_button 'Save changes'
+ end
- page.within('.as-signin') do
- check "Google"
- click_button 'Save changes'
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.disabled_oauth_sign_in_sources).not_to include('google_oauth2')
end
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.disabled_oauth_sign_in_sources).not_to include('google_oauth2')
- end
+ it 'Oauth providers do not raise validation errors when saving unrelated changes' do
+ expect(current_settings.disabled_oauth_sign_in_sources).to be_empty
- it 'Oauth providers do not raise validation errors when saving unrelated changes' do
- expect(current_settings.disabled_oauth_sign_in_sources).to be_empty
+ page.within('.as-signin') do
+ uncheck 'Google'
+ click_button 'Save changes'
+ end
- page.within('.as-signin') do
- uncheck 'Google'
- click_button 'Save changes'
- end
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.disabled_oauth_sign_in_sources).to include('google_oauth2')
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.disabled_oauth_sign_in_sources).to include('google_oauth2')
+ # Remove google_oauth2 from the Omniauth strategies
+ allow(Devise).to receive(:omniauth_providers).and_return([])
- # Remove google_oauth2 from the Omniauth strategies
- allow(Devise).to receive(:omniauth_providers).and_return([])
+ # Save an unrelated setting
+ page.within('.as-terms') do
+ click_button 'Save changes'
+ end
- # Save an unrelated setting
- page.within('.as-terms') do
- click_button 'Save changes'
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.disabled_oauth_sign_in_sources).to include('google_oauth2')
end
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.disabled_oauth_sign_in_sources).to include('google_oauth2')
+ it 'Configure web terminal' do
+ page.within('.as-terminal') do
+ fill_in 'Max session time', with: 15
+ click_button 'Save changes'
+ end
+
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.terminal_max_session_time).to eq(15)
+ end
end
- it 'Configure web terminal' do
- page.within('.as-terminal') do
- fill_in 'Max session time', with: 15
- click_button 'Save changes'
+ context 'Integrations page' do
+ before do
+ visit integrations_admin_application_settings_path
end
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.terminal_max_session_time).to eq(15)
- end
- end
+ it 'Enable hiding third party offers' do
+ page.within('.as-third-party-offers') do
+ check 'Do not display offers from third parties within GitLab'
+ click_button 'Save changes'
+ end
- context 'Integrations page' do
- before do
- visit integrations_admin_application_settings_path
- end
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.hide_third_party_offers).to be true
+ end
+
+ it 'Change Slack Notifications Service template settings' do
+ first(:link, 'Service Templates').click
+ click_link 'Slack notifications'
+ fill_in 'Webhook', with: 'http://localhost'
+ fill_in 'Username', with: 'test_user'
+ fill_in 'service_push_channel', with: '#test_channel'
+ page.check('Notify only broken pipelines')
+ page.select 'All branches', from: 'Branches to be notified'
+
+ check_all_events
+ click_on 'Save'
- it 'Enable hiding third party offers' do
- page.within('.as-third-party-offers') do
- check 'Do not display offers from third parties within GitLab'
- click_button 'Save changes'
+ expect(page).to have_content 'Application settings saved successfully'
+
+ click_link 'Slack notifications'
+
+ page.all('input[type=checkbox]').each do |checkbox|
+ expect(checkbox).to be_checked
+ end
+ expect(find_field('Webhook').value).to eq 'http://localhost'
+ expect(find_field('Username').value).to eq 'test_user'
+ expect(find('#service_push_channel').value).to eq '#test_channel'
end
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.hide_third_party_offers).to be true
+ it 'defaults Deployment events to false for chat notification template settings' do
+ first(:link, 'Service Templates').click
+ click_link 'Slack notifications'
+
+ expect(find_field('Deployment')).not_to be_checked
+ end
end
- it 'Change Slack Notifications Service template settings' do
- first(:link, 'Service Templates').click
- click_link 'Slack notifications'
- fill_in 'Webhook', with: 'http://localhost'
- fill_in 'Username', with: 'test_user'
- fill_in 'service_push_channel', with: '#test_channel'
- page.check('Notify only broken pipelines')
- page.select 'All branches', from: 'Branches to be notified'
+ context 'CI/CD page' do
+ it 'Change CI/CD settings' do
+ visit ci_cd_admin_application_settings_path
+
+ page.within('.as-ci-cd') do
+ check 'Default to Auto DevOps pipeline for all projects'
+ fill_in 'application_setting_auto_devops_domain', with: 'domain.com'
+ click_button 'Save changes'
+ end
- check_all_events
- click_on 'Save'
+ expect(current_settings.auto_devops_enabled?).to be true
+ expect(current_settings.auto_devops_domain).to eq('domain.com')
+ expect(page).to have_content "Application settings saved successfully"
+ end
+ end
- expect(page).to have_content 'Application settings saved successfully'
+ context 'Reporting page' do
+ it 'Change Spam settings' do
+ visit reporting_admin_application_settings_path
- click_link 'Slack notifications'
+ page.within('.as-spam') do
+ check 'Enable reCAPTCHA'
+ check 'Enable reCAPTCHA for login'
+ fill_in 'reCAPTCHA Site Key', with: 'key'
+ fill_in 'reCAPTCHA Private Key', with: 'key'
+ fill_in 'IPs per user', with: 15
+ click_button 'Save changes'
+ end
- page.all('input[type=checkbox]').each do |checkbox|
- expect(checkbox).to be_checked
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.recaptcha_enabled).to be true
+ expect(current_settings.login_recaptcha_protection_enabled).to be true
+ expect(current_settings.unique_ips_limit_per_user).to eq(15)
end
- expect(find_field('Webhook').value).to eq 'http://localhost'
- expect(find_field('Username').value).to eq 'test_user'
- expect(find('#service_push_channel').value).to eq '#test_channel'
end
- it 'defaults Deployment events to false for chat notification template settings' do
- first(:link, 'Service Templates').click
- click_link 'Slack notifications'
+ context 'Metrics and profiling page' do
+ before do
+ visit metrics_and_profiling_admin_application_settings_path
+ end
- expect(find_field('Deployment')).not_to be_checked
- end
- end
+ it 'Change Influx settings' do
+ page.within('.as-influx') do
+ check 'Enable InfluxDB Metrics'
+ click_button 'Save changes'
+ end
- context 'CI/CD page' do
- it 'Change CI/CD settings' do
- visit ci_cd_admin_application_settings_path
+ expect(current_settings.metrics_enabled?).to be true
+ expect(page).to have_content "Application settings saved successfully"
+ end
+
+ it 'Change Prometheus settings' do
+ page.within('.as-prometheus') do
+ check 'Enable Prometheus Metrics'
+ click_button 'Save changes'
+ end
- page.within('.as-ci-cd') do
- check 'Default to Auto DevOps pipeline for all projects'
- fill_in 'application_setting_auto_devops_domain', with: 'domain.com'
- click_button 'Save changes'
+ expect(current_settings.prometheus_metrics_enabled?).to be true
+ expect(page).to have_content "Application settings saved successfully"
end
- expect(current_settings.auto_devops_enabled?).to be true
- expect(current_settings.auto_devops_domain).to eq('domain.com')
- expect(page).to have_content "Application settings saved successfully"
- end
- end
+ it 'Change Performance bar settings' do
+ group = create(:group)
+
+ page.within('.as-performance-bar') do
+ check 'Enable access to the Performance Bar'
+ fill_in 'Allowed group', with: group.path
+ click_on 'Save changes'
+ end
- context 'Reporting page' do
- it 'Change Spam settings' do
- visit reporting_admin_application_settings_path
+ expect(page).to have_content "Application settings saved successfully"
+ expect(find_field('Enable access to the Performance Bar')).to be_checked
+ expect(find_field('Allowed group').value).to eq group.path
- page.within('.as-spam') do
- check 'Enable reCAPTCHA'
- check 'Enable reCAPTCHA for login'
- fill_in 'reCAPTCHA Site Key', with: 'key'
- fill_in 'reCAPTCHA Private Key', with: 'key'
- fill_in 'IPs per user', with: 15
- click_button 'Save changes'
+ page.within('.as-performance-bar') do
+ uncheck 'Enable access to the Performance Bar'
+ click_on 'Save changes'
+ end
+
+ expect(page).to have_content 'Application settings saved successfully'
+ expect(find_field('Enable access to the Performance Bar')).not_to be_checked
+ expect(find_field('Allowed group').value).to be_nil
end
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.recaptcha_enabled).to be true
- expect(current_settings.login_recaptcha_protection_enabled).to be true
- expect(current_settings.unique_ips_limit_per_user).to eq(15)
- end
- end
+ it 'loads usage ping payload on click', :js do
+ expect(page).to have_button 'Preview payload'
- context 'Metrics and profiling page' do
- before do
- visit metrics_and_profiling_admin_application_settings_path
- end
+ find('.js-usage-ping-payload-trigger').click
- it 'Change Influx settings' do
- page.within('.as-influx') do
- check 'Enable InfluxDB Metrics'
- click_button 'Save changes'
+ expect(page).to have_selector '.js-usage-ping-payload'
+ expect(page).to have_button 'Hide payload'
end
+ end
+
+ context 'Network page' do
+ it 'Changes Outbound requests settings' do
+ visit network_admin_application_settings_path
- expect(current_settings.metrics_enabled?).to be true
- expect(page).to have_content "Application settings saved successfully"
+ page.within('.as-outbound') do
+ check 'Allow requests to the local network from web hooks and services'
+ # Enabled by default
+ uncheck 'Allow requests to the local network from system hooks'
+ # Enabled by default
+ uncheck 'Enforce DNS rebinding attack protection'
+ click_button 'Save changes'
+ end
+
+ expect(page).to have_content "Application settings saved successfully"
+ expect(current_settings.allow_local_requests_from_web_hooks_and_services).to be true
+ expect(current_settings.allow_local_requests_from_system_hooks).to be false
+ expect(current_settings.dns_rebinding_protection_enabled).to be false
+ end
end
- it 'Change Prometheus settings' do
- page.within('.as-prometheus') do
- check 'Enable Prometheus Metrics'
- click_button 'Save changes'
+ context 'Preferences page' do
+ before do
+ visit preferences_admin_application_settings_path
end
- expect(current_settings.prometheus_metrics_enabled?).to be true
- expect(page).to have_content "Application settings saved successfully"
- end
+ it 'Change Help page' do
+ new_support_url = 'http://example.com/help'
- it 'Change Performance bar settings' do
- group = create(:group)
+ page.within('.as-help-page') do
+ fill_in 'Help page text', with: 'Example text'
+ check 'Hide marketing-related entries from help'
+ fill_in 'Support page URL', with: new_support_url
+ click_button 'Save changes'
+ end
- page.within('.as-performance-bar') do
- check 'Enable access to the Performance Bar'
- fill_in 'Allowed group', with: group.path
- click_on 'Save changes'
+ expect(current_settings.help_page_text).to eq "Example text"
+ expect(current_settings.help_page_hide_commercial_content).to be_truthy
+ expect(current_settings.help_page_support_url).to eq new_support_url
+ expect(page).to have_content "Application settings saved successfully"
end
- expect(page).to have_content "Application settings saved successfully"
- expect(find_field('Enable access to the Performance Bar')).to be_checked
- expect(find_field('Allowed group').value).to eq group.path
+ it 'Change Pages settings' do
+ page.within('.as-pages') do
+ fill_in 'Maximum size of pages (MB)', with: 15
+ check 'Require users to prove ownership of custom domains'
+ click_button 'Save changes'
+ end
- page.within('.as-performance-bar') do
- uncheck 'Enable access to the Performance Bar'
- click_on 'Save changes'
+ expect(current_settings.max_pages_size).to eq 15
+ expect(current_settings.pages_domain_verification_enabled?).to be_truthy
+ expect(page).to have_content "Application settings saved successfully"
end
- expect(page).to have_content 'Application settings saved successfully'
- expect(find_field('Enable access to the Performance Bar')).not_to be_checked
- expect(find_field('Allowed group').value).to be_nil
- end
+ it 'Change Real-time features settings' do
+ page.within('.as-realtime') do
+ fill_in 'Polling interval multiplier', with: 5.0
+ click_button 'Save changes'
+ end
- it 'loads usage ping payload on click', :js do
- expect(page).to have_button 'Preview payload'
+ expect(current_settings.polling_interval_multiplier).to eq 5.0
+ expect(page).to have_content "Application settings saved successfully"
+ end
- find('.js-usage-ping-payload-trigger').click
+ it 'shows an error when validation fails' do
+ page.within('.as-realtime') do
+ fill_in 'Polling interval multiplier', with: -1.0
+ click_button 'Save changes'
+ end
- expect(page).to have_selector '.js-usage-ping-payload'
- expect(page).to have_button 'Hide payload'
- end
- end
+ expect(current_settings.polling_interval_multiplier).not_to eq(-1.0)
+ expect(page)
+ .to have_content "The form contains the following error: Polling interval multiplier must be greater than or equal to 0"
+ end
- context 'Network page' do
- it 'Changes Outbound requests settings' do
- visit network_admin_application_settings_path
+ it "Change Pages Let's Encrypt settings" do
+ visit preferences_admin_application_settings_path
+ page.within('.as-pages') do
+ fill_in 'Email', with: 'my@test.example.com'
+ check "I have read and agree to the Let's Encrypt Terms of Service"
+ click_button 'Save changes'
+ end
- page.within('.as-outbound') do
- check 'Allow requests to the local network from web hooks and services'
- # Enabled by default
- uncheck 'Allow requests to the local network from system hooks'
- # Enabled by default
- uncheck 'Enforce DNS rebinding attack protection'
- click_button 'Save changes'
+ expect(current_settings.lets_encrypt_notification_email).to eq 'my@test.example.com'
+ expect(current_settings.lets_encrypt_terms_of_service_accepted).to eq true
end
-
- expect(page).to have_content "Application settings saved successfully"
- expect(current_settings.allow_local_requests_from_web_hooks_and_services).to be true
- expect(current_settings.allow_local_requests_from_system_hooks).to be false
- expect(current_settings.dns_rebinding_protection_enabled).to be false
end
- end
- context 'Preferences page' do
- before do
- visit preferences_admin_application_settings_path
- end
+ context 'Nav bar' do
+ it 'Shows default help links in nav' do
+ default_support_url = 'https://about.gitlab.com/getting-help/'
- it 'Change Help page' do
- new_support_url = 'http://example.com/help'
+ visit root_dashboard_path
- page.within('.as-help-page') do
- fill_in 'Help page text', with: 'Example text'
- check 'Hide marketing-related entries from help'
- fill_in 'Support page URL', with: new_support_url
- click_button 'Save changes'
+ find('.header-help-dropdown-toggle').click
+
+ page.within '.header-help' do
+ expect(page).to have_link(text: 'Help', href: help_path)
+ expect(page).to have_link(text: 'Support', href: default_support_url)
+ end
end
- expect(current_settings.help_page_text).to eq "Example text"
- expect(current_settings.help_page_hide_commercial_content).to be_truthy
- expect(current_settings.help_page_support_url).to eq new_support_url
- expect(page).to have_content "Application settings saved successfully"
- end
+ it 'Shows custom support url in nav when set' do
+ new_support_url = 'http://example.com/help'
+ stub_application_setting(help_page_support_url: new_support_url)
- it 'Change Pages settings' do
- page.within('.as-pages') do
- fill_in 'Maximum size of pages (MB)', with: 15
- check 'Require users to prove ownership of custom domains'
- click_button 'Save changes'
- end
+ visit root_dashboard_path
- expect(current_settings.max_pages_size).to eq 15
- expect(current_settings.pages_domain_verification_enabled?).to be_truthy
- expect(page).to have_content "Application settings saved successfully"
+ find('.header-help-dropdown-toggle').click
+
+ page.within '.header-help' do
+ expect(page).to have_link(text: 'Support', href: new_support_url)
+ end
+ end
end
- it 'Change Real-time features settings' do
- page.within('.as-realtime') do
- fill_in 'Polling interval multiplier', with: 5.0
- click_button 'Save changes'
+ context 'when in admin_mode' do
+ it 'contains link to leave admin mode' do
+ page.within('.navbar-sub-nav') do
+ expect(page).to have_link(href: destroy_admin_session_path)
+ end
end
- expect(current_settings.polling_interval_multiplier).to eq 5.0
- expect(page).to have_content "Application settings saved successfully"
- end
+ it 'can leave admin mode' do
+ page.within('.navbar-sub-nav') do
+ # Select first, link is also included in mobile view list
+ click_on 'Leave admin mode', match: :first
- it 'shows an error when validation fails' do
- page.within('.as-realtime') do
- fill_in 'Polling interval multiplier', with: -1.0
- click_button 'Save changes'
+ expect(page).to have_link(href: new_admin_session_path)
+ end
end
- expect(current_settings.polling_interval_multiplier).not_to eq(-1.0)
- expect(page)
- .to have_content "The form contains the following error: Polling interval multiplier must be greater than or equal to 0"
+ it 'can open pages not in admin scope' do
+ page.within('.navbar-sub-nav') do
+ find_all('a', text: 'Projects').first.click
+
+ expect(page).to have_current_path(dashboard_projects_path)
+ end
+ end
end
- it "Change Pages Let's Encrypt settings" do
- visit preferences_admin_application_settings_path
- page.within('.as-pages') do
- fill_in 'Email', with: 'my@test.example.com'
- check "I have read and agree to the Let's Encrypt Terms of Service"
- click_button 'Save changes'
+ context 'when not in admin mode' do
+ before do
+ page.within('.navbar-sub-nav') do
+ # Select first, link is also included in mobile view list
+ click_on 'Leave admin mode', match: :first
+ end
end
- expect(current_settings.lets_encrypt_notification_email).to eq 'my@test.example.com'
- expect(current_settings.lets_encrypt_terms_of_service_accepted).to eq true
- end
- end
+ it 'has no leave admin mode button' do
+ page.within('.navbar-sub-nav') do
+ expect(page).not_to have_link(href: destroy_admin_session_path)
+ end
+ end
- context 'Nav bar' do
- it 'Shows default help links in nav' do
- default_support_url = 'https://about.gitlab.com/getting-help/'
+ it 'is necessary to provide credentials again before opening admin settings' do
+ visit admin_application_settings_path # admin logged out because not in admin_mode
- visit root_dashboard_path
+ expect(page).to have_current_path(new_admin_session_path)
+ end
- find('.header-help-dropdown-toggle').click
+ it 'can open pages not in admin scope' do
+ page.within('.navbar-sub-nav') do
+ find_all('a', text: 'Projects').first.click
+ end
- page.within '.header-help' do
- expect(page).to have_link(text: 'Help', href: help_path)
- expect(page).to have_link(text: 'Support', href: default_support_url)
+ expect(page).to have_current_path(dashboard_projects_path)
end
end
+ end
- it 'Shows custom support url in nav when set' do
- new_support_url = 'http://example.com/help'
- stub_application_setting(help_page_support_url: new_support_url)
+ context 'feature flag :user_mode_in_session is disabled' do
+ before do
+ stub_feature_flags(user_mode_in_session: false)
- visit root_dashboard_path
+ stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
- find('.header-help-dropdown-toggle').click
+ sign_in(admin)
+ visit admin_application_settings_path
+ end
+
+ it 'loads admin settings page without redirect for reauthentication' do
+ expect(current_path).to eq admin_application_settings_path
+ end
- page.within '.header-help' do
- expect(page).to have_link(text: 'Support', href: new_support_url)
+ it 'shows no admin mode buttons in navbar' do
+ page.within('.navbar-sub-nav') do
+ expect(page).not_to have_link(href: new_admin_session_path)
+ expect(page).not_to have_link(href: destroy_admin_session_path)
end
end
end
diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb
index ebf71d8c9da..29f29e58917 100644
--- a/spec/features/admin/admin_users_spec.rb
+++ b/spec/features/admin/admin_users_spec.rb
@@ -31,7 +31,8 @@ describe "Admin::Users" do
expect(page).to have_content(current_user.last_activity_on.strftime("%e %b, %Y"))
expect(page).to have_content(user.email)
expect(page).to have_content(user.name)
- expect(page).to have_link('Block', href: block_admin_user_path(user))
+ expect(page).to have_button('Block')
+ expect(page).to have_button('Deactivate')
expect(page).to have_button('Delete user')
expect(page).to have_button('Delete user and contributions')
end
@@ -277,7 +278,8 @@ describe "Admin::Users" do
expect(page).to have_content(user.email)
expect(page).to have_content(user.name)
expect(page).to have_content(user.id)
- expect(page).to have_link('Block user', href: block_admin_user_path(user))
+ expect(page).to have_button('Deactivate user')
+ expect(page).to have_button('Block user')
expect(page).to have_button('Delete user')
expect(page).to have_button('Delete user and contributions')
end
diff --git a/spec/features/boards/boards_spec.rb b/spec/features/boards/boards_spec.rb
index 57dc9de62fb..e26582d3444 100644
--- a/spec/features/boards/boards_spec.rb
+++ b/spec/features/boards/boards_spec.rb
@@ -234,6 +234,12 @@ describe 'Issue Boards', :js do
expect(find('.board:nth-child(2)')).to have_content(development.title)
expect(find('.board:nth-child(2)')).to have_content(planning.title)
+
+ # Make sure list positions are preserved after a reload
+ visit project_board_path(project, board)
+
+ expect(find('.board:nth-child(2)')).to have_content(development.title)
+ expect(find('.board:nth-child(2)')).to have_content(planning.title)
end
it 'dragging does not duplicate list' do
@@ -245,7 +251,7 @@ describe 'Issue Boards', :js do
expect(page).to have_selector(selector, text: development.title, count: 1)
end
- it 'issue moves between lists' do
+ it 'issue moves between lists and does not show the "Development" label since the card is in the "Development" list label' do
drag(list_from_index: 1, from_index: 1, list_to_index: 2)
wait_for_board_cards(2, 7)
@@ -253,10 +259,10 @@ describe 'Issue Boards', :js do
wait_for_board_cards(4, 1)
expect(find('.board:nth-child(3)')).to have_content(issue6.title)
- expect(find('.board:nth-child(3)').all('.board-card').last).to have_content(development.title)
+ expect(find('.board:nth-child(3)').all('.board-card').last).not_to have_content(development.title)
end
- it 'issue moves between lists' do
+ it 'issue moves between lists and does not show the "Planning" label since the card is in the "Planning" list label' do
drag(list_from_index: 2, list_to_index: 1)
wait_for_board_cards(2, 9)
@@ -264,7 +270,7 @@ describe 'Issue Boards', :js do
wait_for_board_cards(4, 1)
expect(find('.board:nth-child(2)')).to have_content(issue7.title)
- expect(find('.board:nth-child(2)').all('.board-card').first).to have_content(planning.title)
+ expect(find('.board:nth-child(2)').all('.board-card').first).not_to have_content(planning.title)
end
it 'issue moves from closed' do
diff --git a/spec/features/boards/multi_select_spec.rb b/spec/features/boards/multi_select_spec.rb
new file mode 100644
index 00000000000..885dc08e38d
--- /dev/null
+++ b/spec/features/boards/multi_select_spec.rb
@@ -0,0 +1,110 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Multi Select Issue', :js do
+ include DragTo
+
+ let(:group) { create(:group, :nested) }
+ let(:project) { create(:project, :public, namespace: group) }
+ let(:board) { create(:board, project: project) }
+ let(:user) { create(:user) }
+
+ def drag(selector: '.board-list', list_from_index: 1, from_index: 0, to_index: 0, list_to_index: 1, duration: 1000)
+ drag_to(selector: selector,
+ scrollable: '#board-app',
+ list_from_index: list_from_index,
+ from_index: from_index,
+ to_index: to_index,
+ list_to_index: list_to_index,
+ duration: duration)
+ end
+
+ def wait_for_board_cards(board_number, expected_cards)
+ page.within(find(".board:nth-child(#{board_number})")) do
+ expect(page.find('.board-header')).to have_content(expected_cards.to_s)
+ expect(page).to have_selector('.board-card', count: expected_cards)
+ end
+ end
+
+ def multi_select(selector, action = 'select')
+ element = page.find(selector)
+ script = "var el = document.querySelector('#{selector}');"
+ script += "var mousedown = new MouseEvent('mousedown', { button: 0, bubbles: true });"
+ script += "var mouseup = new MouseEvent('mouseup', { ctrlKey: true, button: 0, bubbles:true });"
+ script += "el.dispatchEvent(mousedown); el.dispatchEvent(mouseup);"
+ script += "Sortable.utils.#{action}(el);"
+
+ page.execute_script(script, element)
+ end
+
+ before do
+ project.add_maintainer(user)
+
+ sign_in(user)
+ end
+
+ context 'with lists' do
+ let(:label1) { create(:label, project: project, name: 'Label 1', description: 'Test') }
+ let(:label2) { create(:label, project: project, name: 'Label 2', description: 'Test') }
+ let!(:list1) { create(:list, board: board, label: label1, position: 0) }
+ let!(:list2) { create(:list, board: board, label: label2, position: 1) }
+ let!(:issue1) { create(:labeled_issue, project: project, title: 'Issue 1', description: '', assignees: [user], labels: [label1], relative_position: 1) }
+ let!(:issue2) { create(:labeled_issue, project: project, title: 'Issue 2', description: '', author: user, labels: [label1], relative_position: 2) }
+ let!(:issue3) { create(:labeled_issue, project: project, title: 'Issue 3', description: '', labels: [label1], relative_position: 3) }
+ let!(:issue4) { create(:labeled_issue, project: project, title: 'Issue 4', description: '', labels: [label1], relative_position: 4) }
+ let!(:issue5) { create(:labeled_issue, project: project, title: 'Issue 5', description: '', labels: [label1], relative_position: 5) }
+
+ before do
+ visit project_board_path(project, board)
+
+ wait_for_requests
+ end
+
+ it 'moves multiple issues to another list', :js do
+ multi_select('.board-card:nth-child(1)')
+ multi_select('.board-card:nth-child(2)')
+ drag(list_from_index: 1, list_to_index: 2)
+
+ wait_for_requests
+
+ page.within(all('.js-board-list')[2]) do
+ expect(find('.board-card:nth-child(1)')).to have_content(issue1.title)
+ expect(find('.board-card:nth-child(2)')).to have_content(issue2.title)
+ end
+ end
+
+ it 'maintains order when moved', :js do
+ multi_select('.board-card:nth-child(3)')
+ multi_select('.board-card:nth-child(2)')
+ multi_select('.board-card:nth-child(1)')
+
+ drag(list_from_index: 1, list_to_index: 2)
+
+ wait_for_requests
+
+ page.within(all('.js-board-list')[2]) do
+ expect(find('.board-card:nth-child(1)')).to have_content(issue1.title)
+ expect(find('.board-card:nth-child(2)')).to have_content(issue2.title)
+ expect(find('.board-card:nth-child(3)')).to have_content(issue3.title)
+ end
+ end
+
+ it 'move issues in the same list', :js do
+ multi_select('.board-card:nth-child(3)')
+ multi_select('.board-card:nth-child(4)')
+
+ drag(list_from_index: 1, list_to_index: 1, from_index: 2, to_index: 4)
+
+ wait_for_requests
+
+ page.within(all('.js-board-list')[1]) do
+ expect(find('.board-card:nth-child(1)')).to have_content(issue1.title)
+ expect(find('.board-card:nth-child(2)')).to have_content(issue2.title)
+ expect(find('.board-card:nth-child(3)')).to have_content(issue5.title)
+ expect(find('.board-card:nth-child(4)')).to have_content(issue3.title)
+ expect(find('.board-card:nth-child(5)')).to have_content(issue4.title)
+ end
+ end
+ end
+end
diff --git a/spec/features/boards/sidebar_spec.rb b/spec/features/boards/sidebar_spec.rb
index 8497eaf102f..2b923df40c5 100644
--- a/spec/features/boards/sidebar_spec.rb
+++ b/spec/features/boards/sidebar_spec.rb
@@ -304,7 +304,8 @@ describe 'Issue Boards', :js do
end
end
- expect(card).to have_selector('.badge', count: 3)
+ # 'Development' label does not show since the card is in a 'Development' list label
+ expect(card).to have_selector('.badge', count: 2)
expect(card).to have_content(bug.title)
end
@@ -330,7 +331,8 @@ describe 'Issue Boards', :js do
end
end
- expect(card).to have_selector('.badge', count: 4)
+ # 'Development' label does not show since the card is in a 'Development' list label
+ expect(card).to have_selector('.badge', count: 3)
expect(card).to have_content(bug.title)
expect(card).to have_content(regression.title)
end
@@ -357,7 +359,8 @@ describe 'Issue Boards', :js do
end
end
- expect(card).to have_selector('.badge', count: 1)
+ # 'Development' label does not show since the card is in a 'Development' list label
+ expect(card).to have_selector('.badge', count: 0)
expect(card).not_to have_content(stretch.title)
end
diff --git a/spec/features/clusters/cluster_detail_page_spec.rb b/spec/features/clusters/cluster_detail_page_spec.rb
index 927862689c1..437e7f18c48 100644
--- a/spec/features/clusters/cluster_detail_page_spec.rb
+++ b/spec/features/clusters/cluster_detail_page_spec.rb
@@ -14,10 +14,6 @@ describe 'Clusterable > Show page' do
end
shared_examples 'show page' do
- before do
- clusterable.add_maintainer(current_user)
- end
-
it 'allow the user to set domain' do
visit cluster_path
@@ -63,7 +59,6 @@ describe 'Clusterable > Show page' do
shared_examples 'editing a GCP cluster' do
before do
- clusterable.add_maintainer(current_user)
visit cluster_path
end
@@ -92,7 +87,6 @@ describe 'Clusterable > Show page' do
shared_examples 'editing a user-provided cluster' do
before do
stub_kubeclient_discover(cluster.platform.api_url)
- clusterable.add_maintainer(current_user)
visit cluster_path
end
@@ -123,6 +117,10 @@ describe 'Clusterable > Show page' do
let(:cluster_path) { project_cluster_path(clusterable, cluster) }
let(:cluster) { create(:cluster, :provided_by_gcp, :project, projects: [clusterable]) }
+ before do
+ clusterable.add_maintainer(current_user)
+ end
+
it_behaves_like 'show page'
it_behaves_like 'editing a GCP cluster'
@@ -137,6 +135,10 @@ describe 'Clusterable > Show page' do
let(:cluster_path) { group_cluster_path(clusterable, cluster) }
let(:cluster) { create(:cluster, :provided_by_gcp, :group, groups: [clusterable]) }
+ before do
+ clusterable.add_maintainer(current_user)
+ end
+
it_behaves_like 'show page'
it_behaves_like 'editing a GCP cluster'
@@ -145,4 +147,18 @@ describe 'Clusterable > Show page' do
let(:cluster) { create(:cluster, :provided_by_user, :group, groups: [clusterable]) }
end
end
+
+ context 'when clusterable is an instance' do
+ let(:current_user) { create(:admin) }
+ let(:cluster_path) { admin_cluster_path(cluster) }
+ let(:cluster) { create(:cluster, :provided_by_gcp, :instance) }
+
+ it_behaves_like 'show page'
+
+ it_behaves_like 'editing a GCP cluster'
+
+ it_behaves_like 'editing a user-provided cluster' do
+ let(:cluster) { create(:cluster, :provided_by_user, :instance) }
+ end
+ end
end
diff --git a/spec/features/container_registry_spec.rb b/spec/features/container_registry_spec.rb
index aefdc4d6d4f..03a2402a2d6 100644
--- a/spec/features/container_registry_spec.rb
+++ b/spec/features/container_registry_spec.rb
@@ -17,6 +17,11 @@ describe 'Container Registry', :js do
stub_container_registry_tags(repository: :any, tags: [])
end
+ it 'has a page title set' do
+ visit_container_registry
+ expect(page).to have_title(_('Container Registry'))
+ end
+
context 'when there are no image repositories' do
it 'user visits container registry main page' do
visit_container_registry
@@ -53,10 +58,12 @@ describe 'Container Registry', :js do
find('.js-toggle-repo').click
wait_for_requests
- expect_any_instance_of(ContainerRegistry::Tag).to receive(:delete).and_return(true)
+ service = double('service')
+ expect(service).to receive(:execute).with(container_repository) { { status: :success } }
+ expect(Projects::ContainerRepository::DeleteTagsService).to receive(:new).with(container_repository.project, user, tags: ['latest']) { service }
click_on(class: 'js-delete-registry-row', visible: false)
- expect(find('.modal .modal-title')).to have_content 'Remove image'
+ expect(find('.modal .modal-title')).to have_content 'Remove tag'
find('.modal .modal-footer .btn-danger').click
end
end
diff --git a/spec/features/dashboard/active_tab_spec.rb b/spec/features/dashboard/active_tab_spec.rb
index 92d0c0c9260..ee85c136190 100644
--- a/spec/features/dashboard/active_tab_spec.rb
+++ b/spec/features/dashboard/active_tab_spec.rb
@@ -27,20 +27,4 @@ RSpec.describe 'Dashboard Active Tab', :js do
subject { visit dashboard_groups_path }
end
end
-
- context 'on activity projects' do
- it_behaves_like 'page has active tab', 'Activity' do
- subject { visit activity_dashboard_path }
- end
- end
-
- context 'on instance statistics' do
- subject { visit instance_statistics_root_path }
-
- it 'shows Instance Statistics` as active' do
- subject
-
- expect(find('.navbar-sub-nav li.active')).to have_link('Instance Statistics')
- end
- end
end
diff --git a/spec/features/groups/issues_spec.rb b/spec/features/groups/issues_spec.rb
index 0cb24ef856b..5d87c9d7be8 100644
--- a/spec/features/groups/issues_spec.rb
+++ b/spec/features/groups/issues_spec.rb
@@ -93,6 +93,7 @@ describe 'Group issues page' do
end
it 'shows projects only with issues feature enabled', :js do
+ find('.empty-state .js-lazy-loaded')
find('.new-project-item-link').click
page.within('.select2-results') do
diff --git a/spec/features/groups/members/master_manages_access_requests_spec.rb b/spec/features/groups/members/master_manages_access_requests_spec.rb
index 454da126c81..1c13bd3d59e 100644
--- a/spec/features/groups/members/master_manages_access_requests_spec.rb
+++ b/spec/features/groups/members/master_manages_access_requests_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
describe 'Groups > Members > Maintainer manages access requests' do
it_behaves_like 'Maintainer manages access requests' do
- let(:entity) { create(:group, :public, :access_requestable) }
+ let(:entity) { create(:group, :public) }
let(:members_page_path) { group_group_members_path(entity) }
end
end
diff --git a/spec/features/groups/members/request_access_spec.rb b/spec/features/groups/members/request_access_spec.rb
index 0d5321709ae..5f22af3529c 100644
--- a/spec/features/groups/members/request_access_spec.rb
+++ b/spec/features/groups/members/request_access_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
describe 'Groups > Members > Request access' do
let(:user) { create(:user) }
let(:owner) { create(:user) }
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:group) { create(:group, :public) }
let!(:project) { create(:project, :private, namespace: group) }
before do
diff --git a/spec/features/groups/user_sees_package_sidebar_spec.rb b/spec/features/groups/user_sees_package_sidebar_spec.rb
new file mode 100644
index 00000000000..f85b6841636
--- /dev/null
+++ b/spec/features/groups/user_sees_package_sidebar_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Groups > sidebar' do
+ let(:user) { create(:user) }
+ let(:group) { create(:group) }
+
+ before do
+ group.add_developer(user)
+ sign_in(user)
+ end
+
+ context 'Package menu' do
+ context 'when container registry is enabled' do
+ before do
+ stub_container_registry_config(enabled: true)
+ visit group_path(group)
+ end
+
+ it 'shows main menu' do
+ within '.nav-sidebar' do
+ expect(page).to have_link(_('Packages'))
+ end
+ end
+
+ it 'has container registry link' do
+ within '.nav-sidebar' do
+ expect(page).to have_link(_('Container Registry'))
+ end
+ end
+ end
+
+ context 'when container registry is disabled' do
+ before do
+ stub_container_registry_config(enabled: false)
+ visit group_path(group)
+ end
+
+ it 'does not have container registry link' do
+ within '.nav-sidebar' do
+ expect(page).not_to have_link(_('Container Registry'))
+ end
+ end
+ end
+ end
+end
diff --git a/spec/features/invites_spec.rb b/spec/features/invites_spec.rb
index 1e054a7b358..2a1980346e9 100644
--- a/spec/features/invites_spec.rb
+++ b/spec/features/invites_spec.rb
@@ -10,7 +10,6 @@ describe 'Invites' do
let(:group_invite) { group.group_members.invite.last }
before do
- stub_feature_flags(invisible_captcha: false)
project.add_maintainer(owner)
group.add_user(owner, Gitlab::Access::OWNER)
group.add_developer('user@example.com', owner)
diff --git a/spec/features/issues/filtered_search/dropdown_milestone_spec.rb b/spec/features/issues/filtered_search/dropdown_milestone_spec.rb
index 9a782950bf6..5272a970a60 100644
--- a/spec/features/issues/filtered_search/dropdown_milestone_spec.rb
+++ b/spec/features/issues/filtered_search/dropdown_milestone_spec.rb
@@ -39,16 +39,28 @@ describe 'Dropdown milestone', :js do
end
describe 'behavior' do
- it 'opens when the search bar has milestone:' do
- filtered_search.set('milestone:')
+ context 'filters by "milestone:"' do
+ before do
+ filtered_search.set('milestone:')
+ end
- expect(page).to have_css(js_dropdown_milestone, visible: true)
- end
+ it 'opens when the search bar has milestone:' do
+ expect(page).to have_css(js_dropdown_milestone, visible: true)
+ end
- it 'closes when the search bar is unfocused' do
- find('body').click
+ it 'closes when the search bar is unfocused' do
+ find('body').click
- expect(page).to have_css(js_dropdown_milestone, visible: false)
+ expect(page).to have_css(js_dropdown_milestone, visible: false)
+ end
+
+ it 'hides loading indicator when loaded' do
+ expect(find(js_dropdown_milestone)).not_to have_css('.filter-dropdown-loading')
+ end
+
+ it 'loads all the milestones when opened' do
+ expect(filter_dropdown).to have_selector('.filter-dropdown .filter-dropdown-item', count: 6)
+ end
end
it 'shows loading indicator when opened' do
@@ -58,18 +70,6 @@ describe 'Dropdown milestone', :js do
expect(page).to have_css('#js-dropdown-milestone .filter-dropdown-loading', visible: true)
end
end
-
- it 'hides loading indicator when loaded' do
- filtered_search.set('milestone:')
-
- expect(find(js_dropdown_milestone)).not_to have_css('.filter-dropdown-loading')
- end
-
- it 'loads all the milestones when opened' do
- filtered_search.set('milestone:')
-
- expect(filter_dropdown).to have_selector('.filter-dropdown .filter-dropdown-item', count: 6)
- end
end
describe 'filtering' do
diff --git a/spec/features/issues/gfm_autocomplete_spec.rb b/spec/features/issues/gfm_autocomplete_spec.rb
index cc834df367b..0ff3809a915 100644
--- a/spec/features/issues/gfm_autocomplete_spec.rb
+++ b/spec/features/issues/gfm_autocomplete_spec.rb
@@ -27,6 +27,8 @@ describe 'GFM autocomplete', :js do
it 'updates issue description with GFM reference' do
find('.js-issuable-edit').click
+ wait_for_requests
+
simulate_input('#issue-description', "@#{user.name[0...3]}")
wait_for_requests
diff --git a/spec/features/issues/spam_issues_spec.rb b/spec/features/issues/spam_issues_spec.rb
index 0d009f47fff..18245f249fd 100644
--- a/spec/features/issues/spam_issues_spec.rb
+++ b/spec/features/issues/spam_issues_spec.rb
@@ -30,21 +30,47 @@ describe 'New issue', :js do
visit new_project_issue_path(project)
end
- it 'creates an issue after solving reCaptcha' do
- fill_in 'issue_title', with: 'issue title'
- fill_in 'issue_description', with: 'issue description'
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
- click_button 'Submit issue'
+ it 'creates an issue after solving reCaptcha' do
+ fill_in 'issue_title', with: 'issue title'
+ fill_in 'issue_description', with: 'issue description'
- # it is impossible to test recaptcha automatically and there is no possibility to fill in recaptcha
- # recaptcha verification is skipped in test environment and it always returns true
- expect(page).not_to have_content('issue title')
- expect(page).to have_css('.recaptcha')
+ click_button 'Submit issue'
- click_button 'Submit issue'
+ # it is impossible to test recaptcha automatically and there is no possibility to fill in recaptcha
+ # recaptcha verification is skipped in test environment and it always returns true
+ expect(page).not_to have_content('issue title')
+ expect(page).to have_css('.recaptcha')
- expect(page.find('.issue-details h2.title')).to have_content('issue title')
- expect(page.find('.issue-details .description')).to have_content('issue description')
+ click_button 'Submit issue'
+
+ expect(page.find('.issue-details h2.title')).to have_content('issue title')
+ expect(page.find('.issue-details .description')).to have_content('issue description')
+ end
+ end
+
+ context 'when allow_possible_spam feature flag is true' do
+ before do
+ fill_in 'issue_title', with: 'issue title'
+ fill_in 'issue_description', with: 'issue description'
+ end
+
+ it 'creates an issue without a need to solve reCaptcha' do
+ click_button 'Submit issue'
+
+ expect(page).not_to have_css('.recaptcha')
+ expect(page.find('.issue-details h2.title')).to have_content('issue title')
+ expect(page.find('.issue-details .description')).to have_content('issue description')
+ end
+
+ it 'creates a spam log record' do
+ expect { click_button 'Submit issue' }
+ .to log_spam(title: 'issue title', description: 'issue description', user_id: user.id, noteable_type: 'Issue')
+ end
end
end
diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb
index 5bdd9113b06..ef9daf70b0c 100644
--- a/spec/features/issues_spec.rb
+++ b/spec/features/issues_spec.rb
@@ -470,8 +470,7 @@ describe 'Issues' do
expect(page).to have_content 'None'
end
- # wait_for_requests does not work with vue-resource at the moment
- sleep 1
+ wait_for_requests
expect(issue.reload.assignees).to be_empty
end
diff --git a/spec/features/markdown/copy_as_gfm_spec.rb b/spec/features/markdown/copy_as_gfm_spec.rb
index 9f26321a1dc..84221f5555a 100644
--- a/spec/features/markdown/copy_as_gfm_spec.rb
+++ b/spec/features/markdown/copy_as_gfm_spec.rb
@@ -179,6 +179,12 @@ describe 'Copy as GFM', :js do
)
verify(
+ 'AudioLinkFilter',
+
+ '![Audio](https://example.com/audio.wav)'
+ )
+
+ verify(
'MathFilter: math as converted from GFM to HTML',
'$`c = \pm\sqrt{a^2 + b^2}`$',
diff --git a/spec/features/markdown/markdown_spec.rb b/spec/features/markdown/markdown_spec.rb
index 0efeffe3232..a45fa67ce9e 100644
--- a/spec/features/markdown/markdown_spec.rb
+++ b/spec/features/markdown/markdown_spec.rb
@@ -320,6 +320,10 @@ describe 'GitLab Markdown', :aggregate_failures do
expect(doc).to parse_video_links
end
+ aggregate_failures 'AudioLinkFilter' do
+ expect(doc).to parse_audio_links
+ end
+
aggregate_failures 'ColorFilter' do
expect(doc).to parse_colors
end
diff --git a/spec/features/markdown/mermaid_spec.rb b/spec/features/markdown/mermaid_spec.rb
index b2a31ff2275..4520d1bb2da 100644
--- a/spec/features/markdown/mermaid_spec.rb
+++ b/spec/features/markdown/mermaid_spec.rb
@@ -56,18 +56,6 @@ describe 'Mermaid rendering', :js do
graph LR
A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;
```
- ```mermaid
- graph LR
- A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;
- ```
- ```mermaid
- graph LR
- A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;
- ```
- ```mermaid
- graph LR
- A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;
- ```
MERMAID
project = create(:project, :public)
diff --git a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb
new file mode 100644
index 00000000000..59c20f4ec6b
--- /dev/null
+++ b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Merge request > User edits assignees sidebar', :js do
+ let(:project) { create(:project, :public, :repository) }
+ let(:protected_branch) { create(:protected_branch, :maintainers_can_push, name: 'master', project: project) }
+ let(:merge_request) { create(:merge_request, :simple, source_project: project, target_branch: protected_branch.name) }
+
+ let(:users_find_limit) { 5 }
+
+ # Insert more than limit so that response doesn't include assigned user
+ let(:project_developers) { Array.new(users_find_limit + 1) { create(:user).tap { |u| project.add_developer(u) } } }
+ let(:project_maintainers) { Array.new(users_find_limit + 1) { create(:user).tap { |u| project.add_maintainer(u) } } }
+
+ # DOM finders to simplify and improve readability
+ let(:sidebar_assignee_block) { page.find('.js-issuable-sidebar .assignee') }
+ let(:sidebar_assignee_avatar_link) { sidebar_assignee_block.find_all('a').find { |a| a['href'].include? assignee.username } }
+ let(:sidebar_assignee_tooltip) { sidebar_assignee_avatar_link['data-original-title'] || '' }
+ let(:sidebar_assignee_dropdown_item) { sidebar_assignee_block.find(".dropdown-menu li[data-user-id=\"#{assignee.id}\"]") }
+ let(:sidebar_assignee_dropdown_tooltip) { sidebar_assignee_dropdown_item.find('a')['data-title'] || '' }
+
+ before do
+ stub_const('Autocomplete::UsersFinder::LIMIT', users_find_limit)
+
+ sign_in(project.owner)
+
+ merge_request.assignees << assignee
+
+ visit project_merge_request_path(project, merge_request)
+
+ wait_for_requests
+ end
+
+ shared_examples 'when assigned' do |expected_tooltip: ''|
+ it 'shows assignee name' do
+ expect(sidebar_assignee_block).to have_text(assignee.name)
+ end
+
+ it "shows assignee tooltip '#{expected_tooltip}'" do
+ expect(sidebar_assignee_tooltip).to eql(expected_tooltip)
+ end
+
+ context 'when edit is clicked' do
+ before do
+ sidebar_assignee_block.click_link('Edit')
+
+ wait_for_requests
+ end
+
+ it "shows assignee tooltip '#{expected_tooltip}" do
+ expect(sidebar_assignee_dropdown_tooltip).to eql(expected_tooltip)
+ end
+ end
+ end
+
+ context 'when assigned to maintainer' do
+ let(:assignee) { project_maintainers.last }
+
+ it_behaves_like 'when assigned', expected_tooltip: ''
+ end
+
+ context 'when assigned to developer' do
+ let(:assignee) { project_developers.last }
+
+ it_behaves_like 'when assigned', expected_tooltip: 'Cannot merge'
+ end
+end
diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb
index d19835741e3..6b6226ad1c5 100644
--- a/spec/features/merge_request/user_sees_merge_widget_spec.rb
+++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb
@@ -536,10 +536,10 @@ describe 'Merge request > User sees merge widget', :js do
within(".js-reports-container") do
click_button 'Expand'
- expect(page).to have_content('Test summary contained 1 failed test result out of 2 total tests')
+ expect(page).to have_content('Test summary contained 1 failed/error test result out of 2 total tests')
within(".js-report-section-container") do
expect(page).to have_content('rspec found no changed test results out of 1 total test')
- expect(page).to have_content('junit found 1 failed test result out of 1 total test')
+ expect(page).to have_content('junit found 1 failed/error test result out of 1 total test')
expect(page).to have_content('New')
expect(page).to have_content('addTest')
end
@@ -581,9 +581,9 @@ describe 'Merge request > User sees merge widget', :js do
within(".js-reports-container") do
click_button 'Expand'
- expect(page).to have_content('Test summary contained 1 failed test result out of 2 total tests')
+ expect(page).to have_content('Test summary contained 1 failed/error test result out of 2 total tests')
within(".js-report-section-container") do
- expect(page).to have_content('rspec found 1 failed test result out of 1 total test')
+ expect(page).to have_content('rspec found 1 failed/error test result out of 1 total test')
expect(page).to have_content('junit found no changed test results out of 1 total test')
expect(page).not_to have_content('New')
expect(page).to have_content('Test#sum when a is 1 and b is 3 returns summary')
@@ -677,10 +677,10 @@ describe 'Merge request > User sees merge widget', :js do
within(".js-reports-container") do
click_button 'Expand'
- expect(page).to have_content('Test summary contained 20 failed test results out of 20 total tests')
+ expect(page).to have_content('Test summary contained 20 failed/error test results out of 20 total tests')
within(".js-report-section-container") do
- expect(page).to have_content('rspec found 10 failed test results out of 10 total tests')
- expect(page).to have_content('junit found 10 failed test results out of 10 total tests')
+ expect(page).to have_content('rspec found 10 failed/error test results out of 10 total tests')
+ expect(page).to have_content('junit found 10 failed/error test results out of 10 total tests')
expect(page).to have_content('Test#sum when a is 1 and b is 3 returns summary', count: 2)
end
diff --git a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb
index 4363b359038..3d26ff3ed94 100644
--- a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb
+++ b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb
@@ -14,6 +14,10 @@ describe 'User comments on a diff', :js do
expect(suggested_content).to eq(expected_suggested_content)
end
+ def expect_appliable_suggestions(amount)
+ expect(all('button', text: 'Apply suggestion').size).to eq(amount)
+ end
+
let(:project) { create(:project, :repository) }
let(:merge_request) do
create(:merge_request_with_diffs, source_project: project, target_project: project, source_branch: 'merge-test')
@@ -89,6 +93,60 @@ describe 'User comments on a diff', :js do
end
end
+ context 'multiple suggestions in expanded lines' do
+ it 'suggestions are appliable' do
+ diff_file = merge_request.diffs(paths: ['files/ruby/popen.rb']).diff_files.first
+ hash = Digest::SHA1.hexdigest(diff_file.file_path)
+
+ expanded_changes = [
+ {
+ line_code: "#{hash}_1_1",
+ file_path: diff_file.file_path
+ },
+ {
+ line_code: "#{hash}_5_5",
+ file_path: diff_file.file_path
+ }
+ ]
+ changes = sample_compare(expanded_changes).changes.last(expanded_changes.size)
+
+ page.within("[id='#{hash}']") do
+ find("button[data-original-title='Show full file']").click
+ wait_for_requests
+
+ click_diff_line(find("[id='#{changes.first[:line_code]}']"))
+
+ page.within('.js-discussion-note-form') do
+ fill_in('note_note', with: "```suggestion\n# change to a comment\n```")
+ click_button('Comment')
+ wait_for_requests
+ end
+
+ click_diff_line(find("[id='#{changes.last[:line_code]}']"))
+
+ page.within('.js-discussion-note-form') do
+ fill_in('note_note', with: "```suggestion\n# 2nd change to a comment\n```")
+ click_button('Comment')
+ wait_for_requests
+ end
+
+ expect_appliable_suggestions(2)
+ end
+
+ # Making sure it's not a Front-end cache.
+ visit(diffs_project_merge_request_path(project, merge_request))
+
+ expect_appliable_suggestions(2)
+
+ page.within("[id='#{hash}']") do
+ all('button', text: 'Apply suggestion').last.click
+ wait_for_requests
+
+ expect(page).to have_content('Applied')
+ end
+ end
+ end
+
context 'multiple suggestions in a single note' do
it 'suggestions are presented' do
click_diff_line(find("[id='#{sample_compare.changes[1][:line_code]}']"))
diff --git a/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb
new file mode 100644
index 00000000000..26984a1fb5e
--- /dev/null
+++ b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+# This is a feature spec because the problems arrise when rendering the view for
+# an actual project for which the repository is removed but the cached not
+# updated.
+# This can occur when the fork a merge request is created from is in the process
+# of being destroyed.
+describe 'User views merged merge request from deleted fork' do
+ include ProjectForksHelper
+
+ let(:project) { create(:project, :repository) }
+ let(:source_project) { fork_project(project, nil, repository: true) }
+ let(:user) { project.owner }
+ let!(:merge_request) { create(:merge_request, :merged, source_project: source_project, target_project: project) }
+
+ before do
+ sign_in user
+
+ fork_owner = source_project.namespace.owners.first
+ # Place the source_project in the weird in between state
+ source_project.update_attribute(:pending_delete, true)
+ Projects::DestroyService.new(source_project, fork_owner, {}).__send__(:trash_repositories!)
+ end
+
+ it 'correctly shows the merge request' do
+ visit(merge_request_path(merge_request))
+
+ expect(page).to have_content(merge_request.title)
+ end
+end
diff --git a/spec/features/milestones/user_deletes_milestone_spec.rb b/spec/features/milestones/user_deletes_milestone_spec.rb
index 7c1d88f7798..fd72f2dfefa 100644
--- a/spec/features/milestones/user_deletes_milestone_spec.rb
+++ b/spec/features/milestones/user_deletes_milestone_spec.rb
@@ -12,7 +12,7 @@ describe "User deletes milestone", :js do
end
context "when milestone belongs to project" do
- let!(:milestone) { create(:milestone, parent: project, title: "project milestone") }
+ let!(:milestone) { create(:milestone, resource_parent: project, title: "project milestone") }
it "deletes milestone" do
project.add_developer(user)
@@ -30,8 +30,8 @@ describe "User deletes milestone", :js do
end
context "when milestone belongs to group" do
- let!(:milestone_to_be_deleted) { create(:milestone, parent: group, title: "group milestone 1") }
- let!(:milestone) { create(:milestone, parent: group, title: "group milestone 2") }
+ let!(:milestone_to_be_deleted) { create(:milestone, resource_parent: group, title: "group milestone 1") }
+ let!(:milestone) { create(:milestone, resource_parent: group, title: "group milestone 2") }
it "deletes milestone" do
group.add_developer(user)
diff --git a/spec/features/projects/artifacts/user_browses_artifacts_spec.rb b/spec/features/projects/artifacts/user_browses_artifacts_spec.rb
index ecc07181d09..d8c6ef4755d 100644
--- a/spec/features/projects/artifacts/user_browses_artifacts_spec.rb
+++ b/spec/features/projects/artifacts/user_browses_artifacts_spec.rb
@@ -114,5 +114,24 @@ describe "User browses artifacts" do
it { expect(page).to have_link("doc_sample.txt").and have_no_selector(".js-artifact-tree-external-icon") }
end
+
+ context "when the project is private and pages access control is enabled" do
+ let!(:private_project) { create(:project, :private) }
+ let(:pipeline) { create(:ci_empty_pipeline, project: private_project) }
+ let(:job) { create(:ci_build, :artifacts, pipeline: pipeline) }
+ let(:user) { create(:user) }
+
+ before do
+ private_project.add_developer(user)
+
+ allow(Gitlab.config.pages).to receive(:access_control).and_return(true)
+
+ sign_in(user)
+
+ visit(browse_project_job_artifacts_path(private_project, job, "other_artifacts_0.1.2"))
+ end
+
+ it { expect(page).to have_link("doc_sample.txt").and have_selector(".js-artifact-tree-external-icon") }
+ end
end
end
diff --git a/spec/features/projects/branches_spec.rb b/spec/features/projects/branches_spec.rb
index b35067d0f4d..9dc0f7c90c2 100644
--- a/spec/features/projects/branches_spec.rb
+++ b/spec/features/projects/branches_spec.rb
@@ -101,7 +101,7 @@ describe 'Branches' do
visit project_branches_filtered_path(project, state: 'all')
expect(all('.all-branches').last).to have_selector('li', count: 20)
- accept_confirm { find('.js-branch-add-pdf-text-binary .btn-remove').click }
+ accept_confirm { first('.js-branch-item .btn-remove').click }
expect(all('.all-branches').last).to have_selector('li', count: 19)
end
@@ -246,7 +246,6 @@ describe 'Branches' do
end
expect(page).to have_content 'Commits'
- expect(page).to have_link 'Create merge request'
end
end
diff --git a/spec/features/projects/clusters/eks_spec.rb b/spec/features/projects/clusters/eks_spec.rb
new file mode 100644
index 00000000000..758dccd6e49
--- /dev/null
+++ b/spec/features/projects/clusters/eks_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'AWS EKS Cluster', :js do
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+
+ before do
+ project.add_maintainer(user)
+ gitlab_sign_in(user)
+ allow(Projects::ClustersController).to receive(:STATUS_POLLING_INTERVAL) { 100 }
+ end
+
+ context 'when user does not have a cluster and visits cluster index page' do
+ let(:project_id) { 'test-project-1234' }
+
+ before do
+ visit project_clusters_path(project)
+
+ click_link 'Add Kubernetes cluster'
+ end
+
+ context 'when user creates a cluster on AWS EKS' do
+ before do
+ click_link 'Amazon EKS'
+ end
+
+ it 'user sees a form to create an EKS cluster' do
+ expect(page).to have_selector(:css, '.js-create-eks-cluster')
+ end
+ end
+ end
+end
diff --git a/spec/features/projects/clusters/gcp_spec.rb b/spec/features/projects/clusters/gcp_spec.rb
index a11237db508..b5ab9faa14b 100644
--- a/spec/features/projects/clusters/gcp_spec.rb
+++ b/spec/features/projects/clusters/gcp_spec.rb
@@ -177,6 +177,7 @@ describe 'Gcp Cluster', :js do
context 'when user has not dismissed GCP signup offer' do
before do
+ stub_feature_flags(create_eks_clusters: false)
visit project_clusters_path(project)
end
@@ -200,6 +201,7 @@ describe 'Gcp Cluster', :js do
context 'when user has dismissed GCP signup offer' do
before do
+ stub_feature_flags(create_eks_clusters: false)
visit project_clusters_path(project)
end
diff --git a/spec/features/projects/clusters_spec.rb b/spec/features/projects/clusters_spec.rb
index d1cd19dff2d..67d14d0a58a 100644
--- a/spec/features/projects/clusters_spec.rb
+++ b/spec/features/projects/clusters_spec.rb
@@ -74,7 +74,7 @@ describe 'Clusters', :js do
visit project_clusters_path(project)
click_link 'Add Kubernetes cluster'
- click_link 'Create new Cluster on GKE'
+ click_link 'Create new Cluster'
end
it 'user sees a link to create a GKE cluster' do
diff --git a/spec/features/projects/commits/user_browses_commits_spec.rb b/spec/features/projects/commits/user_browses_commits_spec.rb
index 085d8d63d52..131d9097f48 100644
--- a/spec/features/projects/commits/user_browses_commits_spec.rb
+++ b/spec/features/projects/commits/user_browses_commits_spec.rb
@@ -93,13 +93,13 @@ describe 'User browses commits' do
context 'when the blob does not exist' do
let(:commit) { create(:commit, project: project) }
- it 'shows a blank label' do
+ it 'renders successfully' do
allow_any_instance_of(Gitlab::Diff::File).to receive(:blob).and_return(nil)
allow_any_instance_of(Gitlab::Diff::File).to receive(:binary?).and_return(true)
visit(project_commit_path(project, commit))
- expect(find('.diff-file-changes', visible: false)).to have_content('No file name available')
+ expect(find('.diff-file-changes', visible: false)).to have_content('files/ruby/popen.rb')
end
end
diff --git a/spec/features/projects/compare_spec.rb b/spec/features/projects/compare_spec.rb
index 2674617bcfc..34bde29c8da 100644
--- a/spec/features/projects/compare_spec.rb
+++ b/spec/features/projects/compare_spec.rb
@@ -12,6 +12,23 @@ describe "Compare", :js do
end
describe "branches" do
+ shared_examples 'compares branches' do
+ it 'compares branches' do
+ visit project_compare_index_path(project, from: 'master', to: 'master')
+
+ select_using_dropdown 'from', 'feature'
+ expect(find('.js-compare-from-dropdown .dropdown-toggle-text')).to have_content('feature')
+
+ select_using_dropdown 'to', 'binary-encoding'
+ expect(find('.js-compare-to-dropdown .dropdown-toggle-text')).to have_content('binary-encoding')
+
+ click_button 'Compare'
+
+ expect(page).to have_content 'Commits'
+ expect(page).to have_link 'Create merge request'
+ end
+ end
+
it "pre-populates fields" do
visit project_compare_index_path(project, from: "master", to: "master")
@@ -19,19 +36,14 @@ describe "Compare", :js do
expect(find(".js-compare-to-dropdown .dropdown-toggle-text")).to have_content("master")
end
- it "compares branches" do
- visit project_compare_index_path(project, from: "master", to: "master")
-
- select_using_dropdown "from", "feature"
- expect(find(".js-compare-from-dropdown .dropdown-toggle-text")).to have_content("feature")
-
- select_using_dropdown "to", "binary-encoding"
- expect(find(".js-compare-to-dropdown .dropdown-toggle-text")).to have_content("binary-encoding")
+ it_behaves_like 'compares branches'
- click_button "Compare"
+ context 'on a read-only instance' do
+ before do
+ allow(Gitlab::Database).to receive(:read_only?).and_return(true)
+ end
- expect(page).to have_content "Commits"
- expect(page).to have_link 'Create merge request'
+ it_behaves_like 'compares branches'
end
it 'renders additions info when click unfold diff' do
diff --git a/spec/features/projects/environments/environment_spec.rb b/spec/features/projects/environments/environment_spec.rb
index 497880a7835..dd690699ff6 100644
--- a/spec/features/projects/environments/environment_spec.rb
+++ b/spec/features/projects/environments/environment_spec.rb
@@ -66,8 +66,8 @@ describe 'Environment' do
create(:deployment, :running, environment: environment, deployable: build)
end
- it 'does not show deployments' do
- expect(page).to have_content('You don\'t have any deployments right now.')
+ it 'does show deployments' do
+ expect(page).to have_link("#{build.name} (##{build.id})")
end
end
@@ -79,8 +79,8 @@ describe 'Environment' do
create(:deployment, :failed, environment: environment, deployable: build)
end
- it 'does not show deployments' do
- expect(page).to have_content('You don\'t have any deployments right now.')
+ it 'does show deployments' do
+ expect(page).to have_link("#{build.name} (##{build.id})")
end
end
@@ -175,7 +175,7 @@ describe 'Environment' do
#
# In EE we have to stub EE::Environment since it overwrites
# the "terminals" method.
- allow_any_instance_of(defined?(EE) ? EE::Environment : Environment)
+ allow_any_instance_of(Gitlab.ee? ? EE::Environment : Environment)
.to receive(:terminals) { nil }
visit terminal_project_environment_path(project, environment)
@@ -304,9 +304,11 @@ describe 'Environment' do
#
def remove_branch_with_hooks(project, user, branch)
params = {
- oldrev: project.commit(branch).id,
- newrev: Gitlab::Git::BLANK_SHA,
- ref: "refs/heads/#{branch}"
+ change: {
+ oldrev: project.commit(branch).id,
+ newrev: Gitlab::Git::BLANK_SHA,
+ ref: "refs/heads/#{branch}"
+ }
}
yield
diff --git a/spec/features/projects/features_visibility_spec.rb b/spec/features/projects/features_visibility_spec.rb
index 531592ffd65..9ec61743a11 100644
--- a/spec/features/projects/features_visibility_spec.rb
+++ b/spec/features/projects/features_visibility_spec.rb
@@ -211,7 +211,7 @@ describe 'Edit Project Settings' do
visit activity_project_path(project)
page.within(".event-filter") do
- expect(page).to have_selector("a", count: 2)
+ expect(page).to have_content("All")
expect(page).not_to have_content("Push events")
expect(page).not_to have_content("Merge events")
expect(page).not_to have_content("Comments")
diff --git a/spec/features/projects/files/dockerfile_dropdown_spec.rb b/spec/features/projects/files/dockerfile_dropdown_spec.rb
index 2e0c589e168..756f2f2d493 100644
--- a/spec/features/projects/files/dockerfile_dropdown_spec.rb
+++ b/spec/features/projects/files/dockerfile_dropdown_spec.rb
@@ -23,7 +23,7 @@ describe 'Projects > Files > User wants to add a Dockerfile file' do
wait_for_requests
- expect(page).to have_css('.dockerfile-selector .dropdown-toggle-text', text: 'HTTPd')
+ expect(page).to have_css('.dockerfile-selector .dropdown-toggle-text', text: 'Apply a template')
expect(page).to have_content('COPY ./ /usr/local/apache2/htdocs/')
end
end
diff --git a/spec/features/projects/files/gitignore_dropdown_spec.rb b/spec/features/projects/files/gitignore_dropdown_spec.rb
index dcb960b880a..a8c6e780d47 100644
--- a/spec/features/projects/files/gitignore_dropdown_spec.rb
+++ b/spec/features/projects/files/gitignore_dropdown_spec.rb
@@ -23,7 +23,7 @@ describe 'Projects > Files > User wants to add a .gitignore file' do
wait_for_requests
- expect(page).to have_css('.gitignore-selector .dropdown-toggle-text', text: 'Rails')
+ expect(page).to have_css('.gitignore-selector .dropdown-toggle-text', text: 'Apply a template')
expect(page).to have_content('/.bundle')
expect(page).to have_content('# Gemfile.lock, .ruby-version, .ruby-gemset')
end
diff --git a/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb b/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb
index 875ae5d34d1..107d426a893 100644
--- a/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb
+++ b/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb
@@ -23,7 +23,7 @@ describe 'Projects > Files > User wants to add a .gitlab-ci.yml file' do
wait_for_requests
- expect(page).to have_css('.gitlab-ci-yml-selector .dropdown-toggle-text', text: 'Jekyll')
+ expect(page).to have_css('.gitlab-ci-yml-selector .dropdown-toggle-text', text: 'Apply a template')
expect(page).to have_content('This file is a template, and might need editing before it works on your project')
expect(page).to have_content('jekyll build -d test')
end
diff --git a/spec/features/projects/files/project_owner_creates_license_file_spec.rb b/spec/features/projects/files/project_owner_creates_license_file_spec.rb
index 2944089358f..943c6e0e959 100644
--- a/spec/features/projects/files/project_owner_creates_license_file_spec.rb
+++ b/spec/features/projects/files/project_owner_creates_license_file_spec.rb
@@ -64,7 +64,7 @@ describe 'Projects > Files > Project owner creates a license file', :js do
def select_template(template)
page.within('.js-license-selector-wrap') do
- click_button 'Apply a license template'
+ click_button 'Apply a template'
click_link template
wait_for_requests
end
diff --git a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb
index 556b7227403..9f63b312146 100644
--- a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb
+++ b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb
@@ -37,7 +37,7 @@ describe 'Projects > Files > Project owner sees a link to create a license file
def select_template(template)
page.within('.js-license-selector-wrap') do
- click_button 'Apply a license template'
+ click_button 'Apply a template'
click_link template
wait_for_requests
end
diff --git a/spec/features/projects/files/template_type_dropdown_spec.rb b/spec/features/projects/files/template_type_dropdown_spec.rb
index 8b385185e2e..ba52a7e7deb 100644
--- a/spec/features/projects/files/template_type_dropdown_spec.rb
+++ b/spec/features/projects/files/template_type_dropdown_spec.rb
@@ -24,8 +24,9 @@ describe 'Projects > Files > Template type dropdown selector', :js do
try_selecting_all_types
end
- it 'updates toggle value when input matches' do
+ it 'updates template type toggle value when template is chosen' do
fill_in 'file_path', with: '.gitignore'
+ select_template('gitignore', 'Actionscript')
check_type_selector_toggle_text('.gitignore')
end
end
@@ -70,6 +71,7 @@ describe 'Projects > Files > Template type dropdown selector', :js do
end
it 'toggle is set to the correct value' do
+ select_template('gitignore', 'Actionscript')
check_type_selector_toggle_text('.gitignore')
end
@@ -88,7 +90,7 @@ describe 'Projects > Files > Template type dropdown selector', :js do
end
it 'toggle is set to the proper value' do
- check_type_selector_toggle_text('Choose type')
+ check_type_selector_toggle_text('Select a template type')
end
it 'selects every template type correctly' do
@@ -103,16 +105,15 @@ def check_type_selector_display(is_visible)
end
def try_selecting_all_types
- try_selecting_template_type('LICENSE', 'Apply a license template')
- try_selecting_template_type('Dockerfile', 'Apply a Dockerfile template')
- try_selecting_template_type('.gitlab-ci.yml', 'Apply a GitLab CI Yaml template')
- try_selecting_template_type('.gitignore', 'Apply a .gitignore template')
+ try_selecting_template_type('LICENSE', 'Apply a template')
+ try_selecting_template_type('Dockerfile', 'Apply a template')
+ try_selecting_template_type('.gitlab-ci.yml', 'Apply a template')
+ try_selecting_template_type('.gitignore', 'Apply a template')
end
def try_selecting_template_type(template_type, selector_label)
select_template_type(template_type)
check_template_selector_display(selector_label)
- check_type_selector_toggle_text(template_type)
end
def select_template_type(template_type)
@@ -120,6 +121,11 @@ def select_template_type(template_type)
find('.dropdown-content li', text: template_type).click
end
+def select_template(type, template)
+ find(".js-#{type}-selector-wrap").click
+ find('.dropdown-content li', text: template).click
+end
+
def check_template_selector_display(content)
expect(page).to have_content(content)
end
diff --git a/spec/features/projects/files/undo_template_spec.rb b/spec/features/projects/files/undo_template_spec.rb
index d3f8d36a0a9..887214e1dbf 100644
--- a/spec/features/projects/files/undo_template_spec.rb
+++ b/spec/features/projects/files/undo_template_spec.rb
@@ -13,11 +13,12 @@ describe 'Projects > Files > Template Undo Button', :js do
context 'editing a matching file and applying a template' do
before do
visit project_edit_blob_path(project, File.join(project.default_branch, "LICENSE"))
+ select_file_template_type('LICENSE')
select_file_template('.js-license-selector', 'Apache License 2.0')
end
it 'reverts template application' do
- try_template_undo('http://www.apache.org/licenses/', 'Apply a license template')
+ try_template_undo('http://www.apache.org/licenses/', 'Apply a template')
end
end
@@ -29,7 +30,7 @@ describe 'Projects > Files > Template Undo Button', :js do
end
it 'reverts template application' do
- try_template_undo('http://www.apache.org/licenses/', 'Apply a license template')
+ try_template_undo('http://www.apache.org/licenses/', 'Apply a template')
end
end
end
@@ -45,12 +46,12 @@ def check_toggle_text_set(neutral_toggle_text)
end
def check_undo_button_display
- expect(page).to have_content('Template applied')
- expect(page).to have_css('.template-selectors-undo-menu .btn-info')
+ expect(page).to have_content('template applied')
+ expect(page).to have_css('.toasted-container')
end
def check_content_reverted(template_content)
- find('.template-selectors-undo-menu .btn-info').click
+ find('.toasted-container a', text: 'Undo').click
expect(page).not_to have_content(template_content)
expect(page).to have_css('.template-type-selector .dropdown-toggle-text')
end
diff --git a/spec/features/projects/import_export/export_file_spec.rb b/spec/features/projects/import_export/export_file_spec.rb
index a1002f38936..7618a2bdea3 100644
--- a/spec/features/projects/import_export/export_file_spec.rb
+++ b/spec/features/projects/import_export/export_file_spec.rb
@@ -49,8 +49,7 @@ describe 'Import/Export - project export integration test', :js do
expect(page).to have_content('Download export')
- expect(file_permissions(project.export_path)).to eq(0700)
-
+ expect(project.export_status).to eq(:finished)
expect(project.export_file.path).to include('tar.gz')
in_directory_with_expanded_export(project) do |exit_status, tmpdir|
diff --git a/spec/features/projects/import_export/import_file_spec.rb b/spec/features/projects/import_export/import_file_spec.rb
index a12fc8b18ed..6f96da60a31 100644
--- a/spec/features/projects/import_export/import_file_spec.rb
+++ b/spec/features/projects/import_export/import_file_spec.rb
@@ -3,7 +3,6 @@
require 'spec_helper'
describe 'Import/Export - project import integration test', :js do
- include Select2Helper
include GitHelpers
let(:user) { create(:user) }
@@ -31,7 +30,6 @@ describe 'Import/Export - project import integration test', :js do
it 'user imports an exported project successfully' do
visit new_project_path
- select2(namespace.id, from: '#project_namespace_id')
fill_in :project_name, with: project_name, visible: true
click_import_project_tab
click_link 'GitLab export'
@@ -78,7 +76,6 @@ describe 'Import/Export - project import integration test', :js do
visit new_project_path
- select2(user.namespace.id, from: '#project_namespace_id')
fill_in :project_name, with: project.name, visible: true
click_import_project_tab
click_link 'GitLab export'
diff --git a/spec/features/projects/issuable_templates_spec.rb b/spec/features/projects/issuable_templates_spec.rb
index 18eadb7c4a3..4b6f1672f08 100644
--- a/spec/features/projects/issuable_templates_spec.rb
+++ b/spec/features/projects/issuable_templates_spec.rb
@@ -92,6 +92,9 @@ describe 'issuable templates', :js do
context 'user creates a merge request using templates' do
let(:template_content) { 'this is a test "feature-proposal" template' }
+ let(:bug_template_content) { 'this is merge request bug template' }
+ let(:template_override_warning) { 'Applying a template will replace the existing issue description.' }
+ let(:updated_description) { 'updated merge request description' }
let(:merge_request) { create(:merge_request, :with_diffs, source_project: project) }
before do
@@ -101,6 +104,12 @@ describe 'issuable templates', :js do
template_content,
message: 'added merge request template',
branch_name: 'master')
+ project.repository.create_file(
+ user,
+ '.gitlab/merge_request_templates/bug.md',
+ bug_template_content,
+ message: 'added merge request bug template',
+ branch_name: 'master')
visit edit_project_merge_request_path project, merge_request
fill_in :'merge_request[title]', with: 'test merge request title'
end
@@ -111,6 +120,34 @@ describe 'issuable templates', :js do
assert_template
save_changes
end
+
+ context 'changes template' do
+ before do
+ select_template 'bug'
+ wait_for_requests
+ fill_in :'merge_request[description]', with: updated_description
+ select_template 'feature-proposal'
+ expect(page).to have_content template_override_warning
+ end
+
+ it 'user selects "bug" template, then updates description, then selects "feature-proposal" template, then cancels template change' do
+ page.find('.js-template-warning .js-close-btn.js-cancel-btn').click
+ expect(find('textarea')['value']).to eq(updated_description)
+ expect(page).not_to have_content template_override_warning
+ end
+
+ it 'user selects "bug" template, then updates description, then selects "feature-proposal" template, then dismiss the template warning' do
+ page.find('.js-template-warning .js-close-btn.js-dismiss-btn').click
+ expect(find('textarea')['value']).to eq(updated_description)
+ expect(page).not_to have_content template_override_warning
+ end
+
+ it 'user selects "bug" template, then updates description, then selects "feature-proposal" template, then applies template change' do
+ page.find('.js-template-warning .js-override-template').click
+ wait_for_requests
+ assert_template
+ end
+ end
end
context 'user creates a merge request from a forked project using templates' do
diff --git a/spec/features/projects/jobs/permissions_spec.rb b/spec/features/projects/jobs/permissions_spec.rb
index 44309a9c4bf..ae506b66a86 100644
--- a/spec/features/projects/jobs/permissions_spec.rb
+++ b/spec/features/projects/jobs/permissions_spec.rb
@@ -10,6 +10,7 @@ describe 'Project Jobs Permissions' do
let!(:job) { create(:ci_build, :running, :coverage, :trace_artifact, pipeline: pipeline) }
before do
+ stub_feature_flags(job_log_json: true)
sign_in(user)
project.enable_ci
@@ -69,7 +70,7 @@ describe 'Project Jobs Permissions' do
it_behaves_like 'recent job page details responds with status', 200 do
it 'renders job details', :js do
expect(page).to have_content "Job ##{job.id}"
- expect(page).to have_css '.js-build-trace'
+ expect(page).to have_css '.log-line'
end
end
diff --git a/spec/features/projects/jobs/user_browses_job_spec.rb b/spec/features/projects/jobs/user_browses_job_spec.rb
index 4d8a4812123..856c39df8b3 100644
--- a/spec/features/projects/jobs/user_browses_job_spec.rb
+++ b/spec/features/projects/jobs/user_browses_job_spec.rb
@@ -38,86 +38,26 @@ describe 'User browses a job', :js do
expect(page).to have_content('Job has been erased')
end
- shared_examples 'has collapsible sections' do
- it 'collapses the section clicked' do
- wait_for_requests
- text_to_hide = "Cloning into '/nolith/ci-tests'"
- text_to_show = 'Waiting for pod'
-
- expect(page).to have_content(text_to_hide)
- expect(page).to have_content(text_to_show)
-
- first('.js-section-start[data-section="get-sources"]').click
-
- expect(page).not_to have_content(text_to_hide)
- expect(page).to have_content(text_to_show)
- end
-
- it 'collapses the section header clicked' do
- wait_for_requests
- text_to_hide = "Cloning into '/nolith/ci-tests'"
- text_to_show = 'Waiting for pod'
-
- expect(page).to have_content(text_to_hide)
- expect(page).to have_content(text_to_show)
-
- first('.js-section-header.js-s-get-sources').click
-
- expect(page).not_to have_content(text_to_hide)
- expect(page).to have_content(text_to_show)
- end
- end
-
- context 'when job trace contains sections' do
- let!(:build) { create(:ci_build, :success, :trace_with_sections, :coverage, pipeline: pipeline) }
-
- it_behaves_like 'has collapsible sections'
- end
-
- context 'when job trace contains duplicate sections' do
- let!(:build) { create(:ci_build, :success, :trace_with_duplicate_sections, :coverage, pipeline: pipeline) }
-
- it_behaves_like 'has collapsible sections'
- end
-
- context 'when job trace contains sections' do
- let!(:build) { create(:ci_build, :success, :trace_with_duplicate_sections, :coverage, pipeline: pipeline) }
-
- it 'collapses a section' do
- wait_for_requests
- text_to_hide = "Cloning into '/nolith/ci-tests'"
- text_to_show = 'Waiting for pod'
-
- expect(page).to have_content(text_to_hide)
- expect(page).to have_content(text_to_show)
-
- first('.js-section-start[data-section="get-sources"]').click
-
- expect(page).not_to have_content(text_to_hide)
- expect(page).to have_content(text_to_show)
- end
- end
-
context 'with a failed job' do
let!(:build) { create(:ci_build, :failed, :trace_artifact, pipeline: pipeline) }
it 'displays the failure reason' do
wait_for_all_requests
within('.builds-container') do
- build_link = first('.build-job > a')
- expect(build_link['data-original-title']).to eq('test - failed - (unknown failure)')
+ expect(page).to have_selector(
+ ".build-job > a[data-original-title='test - failed - (unknown failure)']")
end
end
end
context 'when a failed job has been retried' do
- let!(:build) { create(:ci_build, :failed, :retried, :trace_artifact, pipeline: pipeline) }
+ let!(:build_retried) { create(:ci_build, :failed, :retried, :trace_artifact, pipeline: pipeline) }
it 'displays the failure reason and retried label' do
wait_for_all_requests
within('.builds-container') do
- build_link = first('.build-job > a')
- expect(build_link['data-original-title']).to eq('test - failed - (unknown failure) (retried)')
+ expect(page).to have_selector(
+ ".build-job > a[data-original-title='test - failed - (unknown failure) (retried)']")
end
end
end
diff --git a/spec/features/projects/jobs_spec.rb b/spec/features/projects/jobs_spec.rb
index cebca338f33..f5d5bc7f5b9 100644
--- a/spec/features/projects/jobs_spec.rb
+++ b/spec/features/projects/jobs_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'tempfile'
@@ -424,8 +426,8 @@ describe 'Jobs', :clean_gitlab_redis_shared_state do
it 'loads job trace' do
expect(page).to have_content 'BUILD TRACE'
- job.trace.write('a+b') do |stream|
- stream.append(' and more trace', 11)
+ job.trace.write(+'a+b') do |stream|
+ stream.append(+' and more trace', 11)
end
expect(page).to have_content 'BUILD TRACE and more trace'
@@ -534,7 +536,7 @@ describe 'Jobs', :clean_gitlab_redis_shared_state do
end
it 'shows deployment message' do
- expect(page).to have_content 'This job is the most recent deployment to production'
+ expect(page).to have_content 'This job is deployed to production'
expect(find('.js-environment-link')['href']).to match("environments/#{environment.id}")
end
@@ -548,14 +550,14 @@ describe 'Jobs', :clean_gitlab_redis_shared_state do
end
it 'shows the name of the cluster' do
- expect(page).to have_content 'Cluster the-cluster was used'
+ expect(page).to have_content 'using cluster the-cluster'
end
context 'when the user is not able to view the cluster' do
let(:user_access_level) { :developer }
it 'includes only the name of the cluster without a link' do
- expect(page).to have_content 'Cluster the-cluster was used'
+ expect(page).to have_content 'using cluster the-cluster'
expect(page).not_to have_link 'the-cluster'
end
end
@@ -623,8 +625,7 @@ describe 'Jobs', :clean_gitlab_redis_shared_state do
let!(:second_deployment) { create(:deployment, :success, environment: environment, deployable: second_build) }
it 'shows deployment message' do
- expected_text = 'This job is an out-of-date deployment ' \
- "to staging. View the most recent deployment ##{second_deployment.iid}."
+ expected_text = 'This job is an out-of-date deployment to staging. View the most recent deployment.'
expect(page).to have_css('.environment-information', text: expected_text)
end
diff --git a/spec/features/projects/members/group_members_spec.rb b/spec/features/projects/members/group_members_spec.rb
index dd5fc82e058..4ecc3db78b3 100644
--- a/spec/features/projects/members/group_members_spec.rb
+++ b/spec/features/projects/members/group_members_spec.rb
@@ -5,8 +5,8 @@ require 'spec_helper'
describe 'Projects members' do
let(:user) { create(:user) }
let(:developer) { create(:user) }
- let(:group) { create(:group, :public, :access_requestable) }
- let(:project) { create(:project, :public, :access_requestable, creator: user, group: group) }
+ let(:group) { create(:group, :public) }
+ let(:project) { create(:project, :public, creator: user, group: group) }
let(:project_invitee) { create(:project_member, project: project, invite_token: '123', invite_email: 'test1@abc.com', user: nil) }
let(:group_invitee) { create(:group_member, group: group, invite_token: '123', invite_email: 'test2@abc.com', user: nil) }
let(:project_requester) { create(:user) }
diff --git a/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb b/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb
index fb4238f0a1f..ecd55f71c84 100644
--- a/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb
+++ b/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb
@@ -5,8 +5,8 @@ require 'spec_helper'
describe 'Projects > Members > Group requester cannot request access to project', :js do
let(:user) { create(:user) }
let(:owner) { create(:user) }
- let(:group) { create(:group, :public, :access_requestable) }
- let(:project) { create(:project, :public, :access_requestable, namespace: group) }
+ let(:group) { create(:group, :public) }
+ let(:project) { create(:project, :public, namespace: group) }
before do
group.add_owner(owner)
diff --git a/spec/features/projects/members/master_manages_access_requests_spec.rb b/spec/features/projects/members/master_manages_access_requests_spec.rb
index 17d6efbcaa5..f113fb643f8 100644
--- a/spec/features/projects/members/master_manages_access_requests_spec.rb
+++ b/spec/features/projects/members/master_manages_access_requests_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
describe 'Projects > Members > Maintainer manages access requests' do
it_behaves_like 'Maintainer manages access requests' do
- let(:entity) { create(:project, :public, :access_requestable) }
+ let(:entity) { create(:project, :public) }
let(:members_page_path) { project_project_members_path(entity) }
end
end
diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb
index 9f7327cd6e4..a77f0bdcbe9 100644
--- a/spec/features/projects/members/user_requests_access_spec.rb
+++ b/spec/features/projects/members/user_requests_access_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
describe 'Projects > Members > User requests access', :js do
let(:user) { create(:user) }
- let(:project) { create(:project, :public, :access_requestable, :repository) }
+ let(:project) { create(:project, :public, :repository) }
let(:maintainer) { project.owner }
before do
diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb
index 9759fd04ad2..04adb1ec6af 100644
--- a/spec/features/projects/pipelines/pipeline_spec.rb
+++ b/spec/features/projects/pipelines/pipeline_spec.rb
@@ -98,6 +98,16 @@ describe 'Pipeline', :js do
end
end
+ it 'shows links to the related merge requests' do
+ visit_pipeline
+
+ within '.related-merge-request-info' do
+ pipeline.all_merge_requests.map do |merge_request|
+ expect(page).to have_link(project_merge_request_path(project, merge_request))
+ end
+ end
+ end
+
it_behaves_like 'showing user status' do
let(:user_with_status) { pipeline.user }
diff --git a/spec/features/projects/settings/repository_settings_spec.rb b/spec/features/projects/settings/repository_settings_spec.rb
index 1294c8822b6..18031a40f15 100644
--- a/spec/features/projects/settings/repository_settings_spec.rb
+++ b/spec/features/projects/settings/repository_settings_spec.rb
@@ -66,6 +66,19 @@ describe 'Projects > Settings > Repository settings' do
expect(page).to have_content('Write access allowed')
end
+ it 'edit an existing public deploy key to be writable' do
+ project.deploy_keys << public_deploy_key
+ visit project_settings_repository_path(project)
+
+ find('.deploy-key', text: public_deploy_key.title).find('.ic-pencil').click
+
+ check 'deploy_key_deploy_keys_projects_attributes_0_can_push'
+ click_button 'Save changes'
+
+ expect(page).to have_content('public_deploy_key')
+ expect(page).to have_content('Write access allowed')
+ end
+
it 'edit a deploy key from projects user has access to' do
project2 = create(:project_empty_repo)
project2.add_role(user, role)
diff --git a/spec/features/protected_branches_spec.rb b/spec/features/protected_branches_spec.rb
index 80937223016..36c5a116b66 100644
--- a/spec/features/protected_branches_spec.rb
+++ b/spec/features/protected_branches_spec.rb
@@ -92,7 +92,10 @@ describe 'Protected Branches', :js do
set_protected_branch_name('some-branch')
click_on "Protect"
- within(".protected-branches-list") { expect(page).to have_content(commit.id[0..7]) }
+ within(".protected-branches-list") do
+ expect(page).not_to have_content("matching")
+ expect(page).not_to have_content("was deleted")
+ end
end
it "displays an error message if the named branch does not exist" do
@@ -101,7 +104,7 @@ describe 'Protected Branches', :js do
set_protected_branch_name('some-branch')
click_on "Protect"
- within(".protected-branches-list") { expect(page).to have_content('branch was deleted') }
+ within(".protected-branches-list") { expect(page).to have_content('Branch was deleted') }
end
end
@@ -127,7 +130,6 @@ describe 'Protected Branches', :js do
click_on "Protect"
within(".protected-branches-list") do
- expect(page).to have_content("Protected branch (2)")
expect(page).to have_content("2 matching branches")
end
end
diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb
index 63d21d94b5f..0049d3ca7c9 100644
--- a/spec/features/runners_spec.rb
+++ b/spec/features/runners_spec.rb
@@ -272,6 +272,12 @@ describe 'Runners' do
expect(page).to have_content 'This group does not provide any group Runners yet'
end
+
+ it 'user can see a link to install runners on kubernetes clusters' do
+ visit group_settings_ci_cd_path(group)
+
+ expect(page).to have_link('Install Runner on Kubernetes', href: group_clusters_path(group))
+ end
end
context 'group with a runner' do
diff --git a/spec/features/search/user_searches_for_code_spec.rb b/spec/features/search/user_searches_for_code_spec.rb
index 9451ee6eb15..9949595fddf 100644
--- a/spec/features/search/user_searches_for_code_spec.rb
+++ b/spec/features/search/user_searches_for_code_spec.rb
@@ -94,6 +94,13 @@ describe 'User searches for code' do
expect(page).to have_selector('.results', text: 'path = gitlab-grack')
end
+
+ it 'persist refs over browser tabs' do
+ ref = 'feature'
+ find('.js-project-refs-dropdown').click
+ link = find_link(ref)[:href]
+ expect(link.include?("repository_ref=" + ref)).to be(true)
+ end
end
it 'no ref switcher shown in issue result summary', :js do
diff --git a/spec/features/security/group/internal_access_spec.rb b/spec/features/security/group/internal_access_spec.rb
index d6575ec9de1..a182b6b9d57 100644
--- a/spec/features/security/group/internal_access_spec.rb
+++ b/spec/features/security/group/internal_access_spec.rb
@@ -16,6 +16,7 @@ describe 'Internal Group access' do
describe "Group should be internal" do
describe '#internal?' do
subject { group.internal? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/features/security/group/private_access_spec.rb b/spec/features/security/group/private_access_spec.rb
index 2dc863a6e73..5e3e9824aaa 100644
--- a/spec/features/security/group/private_access_spec.rb
+++ b/spec/features/security/group/private_access_spec.rb
@@ -16,6 +16,7 @@ describe 'Private Group access' do
describe "Group should be private" do
describe '#private?' do
subject { group.private? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/features/security/group/public_access_spec.rb b/spec/features/security/group/public_access_spec.rb
index 4066a19fce2..efc84205980 100644
--- a/spec/features/security/group/public_access_spec.rb
+++ b/spec/features/security/group/public_access_spec.rb
@@ -16,6 +16,7 @@ describe 'Public Group access' do
describe "Group should be public" do
describe '#public?' do
subject { group.public? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb
index d089fa718d2..768b883a90e 100644
--- a/spec/features/security/project/internal_access_spec.rb
+++ b/spec/features/security/project/internal_access_spec.rb
@@ -14,6 +14,7 @@ describe "Internal Project Access" do
describe "Project should be internal" do
describe '#internal?' do
subject { project.internal? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb
index b868cd595cb..c2d44c05a22 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/spec/features/security/project/private_access_spec.rb
@@ -14,6 +14,7 @@ describe "Private Project Access" do
describe "Project should be private" do
describe '#private?' do
subject { project.private? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index 8db2f2d69e5..19f01257713 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -14,6 +14,7 @@ describe "Public Project Access" do
describe "Project should be public" do
describe '#public?' do
subject { project.public? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/features/snippets/private_snippets_spec.rb b/spec/features/snippets/private_snippets_spec.rb
new file mode 100644
index 00000000000..9df4cd01103
--- /dev/null
+++ b/spec/features/snippets/private_snippets_spec.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Private Snippets', :js do
+ let(:user) { create(:user) }
+
+ before do
+ sign_in(user)
+ end
+
+ it 'Private Snippet renders for creator' do
+ private_snippet = create(:personal_snippet, :private, author: user)
+
+ visit snippet_path(private_snippet)
+ wait_for_requests
+
+ expect(page).to have_content(private_snippet.content)
+ expect(page).not_to have_css('.js-embed-btn')
+ expect(page).not_to have_css('.js-share-btn')
+ end
+end
diff --git a/spec/features/snippets/public_snippets_spec.rb b/spec/features/snippets/public_snippets_spec.rb
index a0db00cfc67..82edda509c2 100644
--- a/spec/features/snippets/public_snippets_spec.rb
+++ b/spec/features/snippets/public_snippets_spec.rb
@@ -10,6 +10,8 @@ describe 'Public Snippets', :js do
wait_for_requests
expect(page).to have_content(public_snippet.content)
+ expect(page).to have_css('.js-embed-btn', visible: false)
+ expect(page).to have_css('.js-share-btn', visible: false)
end
it 'Unauthenticated user should see raw public snippets' do
diff --git a/spec/features/snippets/spam_snippets_spec.rb b/spec/features/snippets/spam_snippets_spec.rb
new file mode 100644
index 00000000000..3e71a4e7879
--- /dev/null
+++ b/spec/features/snippets/spam_snippets_spec.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'User creates snippet', :js do
+ let(:user) { create(:user) }
+
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
+
+ Gitlab::CurrentSettings.update!(
+ akismet_enabled: true,
+ akismet_api_key: 'testkey',
+ recaptcha_enabled: true,
+ recaptcha_site_key: 'test site key',
+ recaptcha_private_key: 'test private key'
+ )
+
+ sign_in(user)
+ visit new_snippet_path
+
+ fill_in 'personal_snippet_title', with: 'My Snippet Title'
+ fill_in 'personal_snippet_description', with: 'My Snippet **Description**'
+ find('#personal_snippet_visibility_level_20').set(true)
+ page.within('.file-editor') do
+ find('.ace_text-input', visible: false).send_keys 'Hello World!'
+ end
+ end
+
+ shared_examples 'solve recaptcha' do
+ it 'creates a snippet after solving reCaptcha' do
+ click_button('Create snippet')
+ wait_for_requests
+
+ # it is impossible to test recaptcha automatically and there is no possibility to fill in recaptcha
+ # recaptcha verification is skipped in test environment and it always returns true
+ expect(page).not_to have_content('My Snippet Title')
+ expect(page).to have_css('.recaptcha')
+ click_button('Submit personal snippet')
+
+ expect(page).to have_content('My Snippet Title')
+ end
+ end
+
+ context 'when identified as a spam' do
+ before do
+ WebMock.stub_request(:any, /.*akismet.com.*/).to_return(body: "true", status: 200)
+ end
+
+ context 'when allow_possible_spam feature flag is false' do
+ it_behaves_like 'solve recaptcha'
+ end
+
+ context 'when allow_possible_spam feature flag is true' do
+ it_behaves_like 'solve recaptcha'
+ end
+ end
+
+ context 'when not identified as a spam' do
+ before do
+ WebMock.stub_request(:any, /.*akismet.com.*/).to_return(body: "false", status: 200)
+ end
+
+ it 'creates a snippet' do
+ click_button('Create snippet')
+ wait_for_requests
+
+ expect(page).not_to have_css('.recaptcha')
+ expect(page).to have_content('My Snippet Title')
+ end
+ end
+end
diff --git a/spec/features/snippets/user_creates_snippet_spec.rb b/spec/features/snippets/user_creates_snippet_spec.rb
index 52ec5eddd5c..9a141dd463a 100644
--- a/spec/features/snippets/user_creates_snippet_spec.rb
+++ b/spec/features/snippets/user_creates_snippet_spec.rb
@@ -45,7 +45,9 @@ describe 'User creates snippet', :js do
link = find('a.no-attachment-icon img[alt="banana_sample"]')['src']
expect(link).to match(%r{/uploads/-/system/user/#{user.id}/\h{32}/banana_sample\.gif\z})
- reqs = inspect_requests { visit(link) }
+ # Adds a cache buster for checking if the image exists as Selenium is now handling the cached regquests
+ # not anymore as requests when they come straight from memory cache.
+ reqs = inspect_requests { visit("#{link}?ran=#{SecureRandom.base64(20)}") }
expect(reqs.first.status_code).to eq(200)
end
end
@@ -63,7 +65,7 @@ describe 'User creates snippet', :js do
link = find('a.no-attachment-icon img[alt="banana_sample"]')['src']
expect(link).to match(%r{/uploads/-/system/personal_snippet/#{Snippet.last.id}/\h{32}/banana_sample\.gif\z})
- reqs = inspect_requests { visit(link) }
+ reqs = inspect_requests { visit("#{link}?ran=#{SecureRandom.base64(20)}") }
expect(reqs.first.status_code).to eq(200)
end
@@ -88,7 +90,7 @@ describe 'User creates snippet', :js do
link = find('a.no-attachment-icon img[alt="banana_sample"]')['src']
expect(link).to match(%r{/uploads/-/system/personal_snippet/#{Snippet.last.id}/\h{32}/banana_sample\.gif\z})
- reqs = inspect_requests { visit(link) }
+ reqs = inspect_requests { visit("#{link}?ran=#{SecureRandom.base64(20)}") }
expect(reqs.first.status_code).to eq(200)
end
diff --git a/spec/features/users/signup_spec.rb b/spec/features/users/signup_spec.rb
index fb927a9ca3b..562d6fcab1b 100644
--- a/spec/features/users/signup_spec.rb
+++ b/spec/features/users/signup_spec.rb
@@ -2,19 +2,14 @@
require 'spec_helper'
-describe 'Signup' do
+shared_examples 'Signup' do
include TermsHelper
- before do
- stub_feature_flags(invisible_captcha: false)
- end
-
let(:new_user) { build_stubbed(:user) }
describe 'username validation', :js do
before do
- visit root_path
- click_link 'Register'
+ visit new_user_registration_path
end
it 'does not show an error border if the username is available' do
@@ -130,36 +125,43 @@ describe 'Signup' do
describe 'user\'s full name validation', :js do
before do
- visit root_path
- click_link 'Register'
+ if Gitlab::Experimentation.enabled?(:signup_flow)
+ user = create(:user, role: nil)
+ sign_in(user)
+ visit users_sign_up_welcome_path
+ @user_name_field = 'user_name'
+ else
+ visit new_user_registration_path
+ @user_name_field = 'new_user_name'
+ end
end
it 'does not show an error border if the user\'s fullname length is not longer than 128 characters' do
- fill_in 'new_user_name', with: 'u' * 128
+ fill_in @user_name_field, with: 'u' * 128
expect(find('.name')).not_to have_css '.gl-field-error-outline'
end
it 'shows an error border if the user\'s fullname contains an emoji' do
- simulate_input('#new_user_name', 'Ehsan 🦋')
+ simulate_input("##{@user_name_field}", 'Ehsan 🦋')
expect(find('.name')).to have_css '.gl-field-error-outline'
end
it 'shows an error border if the user\'s fullname is longer than 128 characters' do
- fill_in 'new_user_name', with: 'n' * 129
+ fill_in @user_name_field, with: 'n' * 129
expect(find('.name')).to have_css '.gl-field-error-outline'
end
it 'shows an error message if the user\'s fullname is longer than 128 characters' do
- fill_in 'new_user_name', with: 'n' * 129
+ fill_in @user_name_field, with: 'n' * 129
expect(page).to have_content("Name is too long (maximum is 128 characters).")
end
it 'shows an error message if the username contains emojis' do
- simulate_input('#new_user_name', 'Ehsan 🦋')
+ simulate_input("##{@user_name_field}", 'Ehsan 🦋')
expect(page).to have_content("Invalid input, please avoid emojis")
end
@@ -177,13 +179,17 @@ describe 'Signup' do
end
it 'creates the user account and sends a confirmation email' do
- visit root_path
+ visit new_user_registration_path
+
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_name', with: new_user.name
- fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_email_confirmation', with: new_user.email
- fill_in 'new_user_password', with: new_user.password
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ fill_in 'new_user_email_confirmation', with: new_user.email
+ end
+
+ fill_in 'new_user_password', with: new_user.password
expect { click_button 'Register' }.to change { User.count }.by(1)
@@ -198,35 +204,51 @@ describe 'Signup' do
end
it 'creates the user account and sends a confirmation email' do
- visit root_path
+ visit new_user_registration_path
+
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
+
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ fill_in 'new_user_email_confirmation', with: new_user.email
+ end
- fill_in 'new_user_name', with: new_user.name
- fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_email_confirmation', with: new_user.email
- fill_in 'new_user_password', with: new_user.password
+ fill_in 'new_user_password', with: new_user.password
expect { click_button 'Register' }.to change { User.count }.by(1)
- expect(current_path).to eq dashboard_projects_path
- expect(page).to have_content("Please check your email (#{new_user.email}) to verify that you own this address.")
+ if Gitlab::Experimentation.enabled?(:signup_flow)
+ expect(current_path).to eq users_sign_up_welcome_path
+ else
+ expect(current_path).to eq dashboard_projects_path
+ expect(page).to have_content("Please check your email (#{new_user.email}) to verify that you own this address.")
+ end
end
end
end
context "when sigining up with different cased emails" do
it "creates the user successfully" do
- visit root_path
+ visit new_user_registration_path
+
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_name', with: new_user.name
- fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_email_confirmation', with: new_user.email.capitalize
- fill_in 'new_user_password', with: new_user.password
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ fill_in 'new_user_email_confirmation', with: new_user.email.capitalize
+ end
+
+ fill_in 'new_user_password', with: new_user.password
click_button "Register"
- expect(current_path).to eq dashboard_projects_path
- expect(page).to have_content("Welcome! You have signed up successfully.")
+ if Gitlab::Experimentation.enabled?(:signup_flow)
+ expect(current_path).to eq users_sign_up_welcome_path
+ else
+ expect(current_path).to eq dashboard_projects_path
+ expect(page).to have_content("Welcome! You have signed up successfully.")
+ end
end
end
@@ -236,17 +258,25 @@ describe 'Signup' do
end
it 'creates the user account and goes to dashboard' do
- visit root_path
+ visit new_user_registration_path
- fill_in 'new_user_name', with: new_user.name
- fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_email_confirmation', with: new_user.email
- fill_in 'new_user_password', with: new_user.password
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
+
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ fill_in 'new_user_email_confirmation', with: new_user.email
+ end
+
+ fill_in 'new_user_password', with: new_user.password
click_button "Register"
- expect(current_path).to eq dashboard_projects_path
- expect(page).to have_content("Welcome! You have signed up successfully.")
+ if Gitlab::Experimentation.enabled?(:signup_flow)
+ expect(current_path).to eq users_sign_up_welcome_path
+ else
+ expect(current_path).to eq dashboard_projects_path
+ expect(page).to have_content("Welcome! You have signed up successfully.")
+ end
end
end
end
@@ -255,28 +285,40 @@ describe 'Signup' do
it "displays the errors" do
existing_user = create(:user)
- visit root_path
+ visit new_user_registration_path
+
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ end
- fill_in 'new_user_name', with: new_user.name
fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: existing_user.email
+ fill_in 'new_user_email', with: existing_user.email
fill_in 'new_user_password', with: new_user.password
click_button "Register"
expect(current_path).to eq user_registration_path
- expect(page).to have_content("errors prohibited this user from being saved")
+
+ if Gitlab::Experimentation.enabled?(:signup_flow)
+ expect(page).to have_content("error prohibited this user from being saved")
+ else
+ expect(page).to have_content("errors prohibited this user from being saved")
+ expect(page).to have_content("Email confirmation doesn't match")
+ end
+
expect(page).to have_content("Email has already been taken")
- expect(page).to have_content("Email confirmation doesn't match")
end
it 'does not redisplay the password' do
existing_user = create(:user)
- visit root_path
+ visit new_user_registration_path
+
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ end
- fill_in 'new_user_name', with: new_user.name
fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: existing_user.email
+ fill_in 'new_user_email', with: existing_user.email
fill_in 'new_user_password', with: new_user.password
click_button "Register"
@@ -291,13 +333,17 @@ describe 'Signup' do
end
it 'requires the user to check the checkbox' do
- visit root_path
+ visit new_user_registration_path
- fill_in 'new_user_name', with: new_user.name
- fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_email_confirmation', with: new_user.email
- fill_in 'new_user_password', with: new_user.password
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
+
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ fill_in 'new_user_email_confirmation', with: new_user.email
+ end
+
+ fill_in 'new_user_password', with: new_user.password
click_button 'Register'
@@ -306,18 +352,99 @@ describe 'Signup' do
end
it 'asks the user to accept terms before going to the dashboard' do
- visit root_path
+ visit new_user_registration_path
- fill_in 'new_user_name', with: new_user.name
- fill_in 'new_user_username', with: new_user.username
- fill_in 'new_user_email', with: new_user.email
- fill_in 'new_user_email_confirmation', with: new_user.email
- fill_in 'new_user_password', with: new_user.password
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
+
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ fill_in 'new_user_email_confirmation', with: new_user.email
+ end
+
+ fill_in 'new_user_password', with: new_user.password
check :terms_opt_in
click_button "Register"
- expect(current_path).to eq dashboard_projects_path
+ if Gitlab::Experimentation.enabled?(:signup_flow)
+ expect(current_path).to eq users_sign_up_welcome_path
+ else
+ expect(current_path).to eq dashboard_projects_path
+ end
+ end
+ end
+
+ context 'when reCAPTCHA and invisible captcha are enabled' do
+ before do
+ InvisibleCaptcha.timestamp_enabled = true
+ stub_application_setting(recaptcha_enabled: true)
+ allow_any_instance_of(RegistrationsController).to receive(:verify_recaptcha).and_return(false)
+ end
+
+ after do
+ InvisibleCaptcha.timestamp_enabled = false
+ end
+
+ it 'prevents from signing up' do
+ visit new_user_registration_path
+
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
+
+ unless Gitlab::Experimentation.enabled?(:signup_flow)
+ fill_in 'new_user_name', with: new_user.name
+ fill_in 'new_user_email_confirmation', with: new_user.email
+ end
+
+ fill_in 'new_user_password', with: new_user.password
+
+ expect { click_button 'Register' }.not_to change { User.count }
+
+ if Gitlab::Experimentation.enabled?(:signup_flow)
+ expect(page).to have_content('That was a bit too quick! Please resubmit.')
+ else
+ expect(page).to have_content('There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.')
+ end
+ end
+ end
+end
+
+describe 'With original flow' do
+ before do
+ stub_experiment(signup_flow: false)
+ end
+
+ it_behaves_like 'Signup'
+end
+
+describe 'With experimental flow' do
+ before do
+ stub_experiment(signup_flow: true)
+ end
+
+ it_behaves_like 'Signup'
+
+ describe 'when role is required' do
+ it 'after registering, it redirects to step 2 of the signup process, sets the name and role and then redirects to the original requested url' do
+ new_user = build_stubbed(:user)
+ visit new_user_registration_path
+ fill_in 'new_user_username', with: new_user.username
+ fill_in 'new_user_email', with: new_user.email
+ fill_in 'new_user_password', with: new_user.password
+ click_button 'Register'
+ visit new_project_path
+
+ expect(page).to have_current_path(users_sign_up_welcome_path)
+
+ fill_in 'user_name', with: 'New name'
+ select 'Software Developer', from: 'user_role'
+ click_button 'Get started!'
+ new_user = User.find_by_username(new_user.username)
+
+ expect(new_user.name).to eq 'New name'
+ expect(new_user.software_developer_role?).to be_truthy
+ expect(page).to have_current_path(new_project_path)
end
end
end
diff --git a/spec/finders/access_requests_finder_spec.rb b/spec/finders/access_requests_finder_spec.rb
index 605777462bb..fbfc8035bcc 100644
--- a/spec/finders/access_requests_finder_spec.rb
+++ b/spec/finders/access_requests_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AccessRequestsFinder do
@@ -5,13 +7,13 @@ describe AccessRequestsFinder do
let(:access_requester) { create(:user) }
let(:project) do
- create(:project, :public, :access_requestable) do |project|
+ create(:project, :public) do |project|
project.request_access(access_requester)
end
end
let(:group) do
- create(:group, :public, :access_requestable) do |group|
+ create(:group, :public) do |group|
group.request_access(access_requester)
end
end
diff --git a/spec/finders/admin/projects_finder_spec.rb b/spec/finders/admin/projects_finder_spec.rb
index 44cc8debd04..eb5d0bba183 100644
--- a/spec/finders/admin/projects_finder_spec.rb
+++ b/spec/finders/admin/projects_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Admin::ProjectsFinder do
diff --git a/spec/finders/artifacts_finder_spec.rb b/spec/finders/artifacts_finder_spec.rb
new file mode 100644
index 00000000000..b956e2c9515
--- /dev/null
+++ b/spec/finders/artifacts_finder_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe ArtifactsFinder do
+ let(:project) { create(:project) }
+
+ describe '#execute' do
+ before do
+ create(:ci_build, :artifacts, project: project)
+ end
+
+ subject { described_class.new(project, params).execute }
+
+ context 'with empty params' do
+ let(:params) { {} }
+
+ it 'returns all artifacts belonging to the project' do
+ expect(subject).to contain_exactly(*project.job_artifacts)
+ end
+ end
+
+ context 'with sort param' do
+ let(:params) { { sort: 'size_desc' } }
+
+ it 'sorts the artifacts' do
+ expect(subject).to eq(project.job_artifacts.order_by('size_desc'))
+ end
+ end
+ end
+end
diff --git a/spec/finders/autocomplete/move_to_project_finder_spec.rb b/spec/finders/autocomplete/move_to_project_finder_spec.rb
index 4a87b47bd08..f997dd32c40 100644
--- a/spec/finders/autocomplete/move_to_project_finder_spec.rb
+++ b/spec/finders/autocomplete/move_to_project_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Autocomplete::MoveToProjectFinder do
diff --git a/spec/finders/autocomplete/users_finder_spec.rb b/spec/finders/autocomplete/users_finder_spec.rb
index f3b54ca0461..5d340c46114 100644
--- a/spec/finders/autocomplete/users_finder_spec.rb
+++ b/spec/finders/autocomplete/users_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Autocomplete::UsersFinder do
diff --git a/spec/finders/boards/visits_finder_spec.rb b/spec/finders/boards/visits_finder_spec.rb
index 4d40f4826f8..7e3ad8aa9f0 100644
--- a/spec/finders/boards/visits_finder_spec.rb
+++ b/spec/finders/boards/visits_finder_spec.rb
@@ -10,7 +10,7 @@ describe Boards::VisitsFinder do
let(:project) { create(:project) }
let(:project_board) { create(:board, project: project) }
- subject(:finder) { described_class.new(project_board.parent, user) }
+ subject(:finder) { described_class.new(project_board.resource_parent, user) }
it 'returns nil when there is no user' do
finder.current_user = nil
@@ -27,7 +27,7 @@ describe Boards::VisitsFinder do
it 'queries for last N visits' do
expect(BoardProjectRecentVisit).to receive(:latest).with(user, project, count: 5).once
- described_class.new(project_board.parent, user).latest(5)
+ described_class.new(project_board.resource_parent, user).latest(5)
end
end
@@ -35,7 +35,7 @@ describe Boards::VisitsFinder do
let(:group) { create(:group) }
let(:group_board) { create(:board, group: group) }
- subject(:finder) { described_class.new(group_board.parent, user) }
+ subject(:finder) { described_class.new(group_board.resource_parent, user) }
it 'returns nil when there is no user' do
finder.current_user = nil
@@ -52,7 +52,7 @@ describe Boards::VisitsFinder do
it 'queries for last N visits' do
expect(BoardGroupRecentVisit).to receive(:latest).with(user, group, count: 5).once
- described_class.new(group_board.parent, user).latest(5)
+ described_class.new(group_board.resource_parent, user).latest(5)
end
end
end
diff --git a/spec/finders/branches_finder_spec.rb b/spec/finders/branches_finder_spec.rb
index 3fc86f3e408..1a33bdf11d7 100644
--- a/spec/finders/branches_finder_spec.rb
+++ b/spec/finders/branches_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BranchesFinder do
diff --git a/spec/finders/clusters/knative_services_finder_spec.rb b/spec/finders/clusters/knative_services_finder_spec.rb
index 159724b3c1f..7ad64cc3bca 100644
--- a/spec/finders/clusters/knative_services_finder_spec.rb
+++ b/spec/finders/clusters/knative_services_finder_spec.rb
@@ -77,6 +77,7 @@ describe Clusters::KnativeServicesFinder do
describe '#knative_detected' do
subject { finder.knative_detected }
+
before do
synchronous_reactive_cache(finder)
end
diff --git a/spec/finders/clusters/kubernetes_namespace_finder_spec.rb b/spec/finders/clusters/kubernetes_namespace_finder_spec.rb
index 8beba0b99a4..7d9c4daa0fe 100644
--- a/spec/finders/clusters/kubernetes_namespace_finder_spec.rb
+++ b/spec/finders/clusters/kubernetes_namespace_finder_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe Clusters::KubernetesNamespaceFinder do
described_class.new(
cluster,
project: project,
- environment_slug: 'production',
+ environment_name: 'production',
allow_blank_token: allow_blank_token
)
end
@@ -22,8 +22,8 @@ RSpec.describe Clusters::KubernetesNamespaceFinder do
end
describe '#execute' do
- let(:production) { create(:environment, project: project, slug: 'production') }
- let(:staging) { create(:environment, project: project, slug: 'staging') }
+ let(:production) { create(:environment, project: project, name: 'production') }
+ let(:staging) { create(:environment, project: project, name: 'staging') }
let(:cluster) { create(:cluster, :group, :provided_by_user) }
let(:project) { create(:project) }
diff --git a/spec/finders/clusters_finder_spec.rb b/spec/finders/clusters_finder_spec.rb
index da529e0670f..f6ea8347f67 100644
--- a/spec/finders/clusters_finder_spec.rb
+++ b/spec/finders/clusters_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ClustersFinder do
diff --git a/spec/finders/concerns/finder_methods_spec.rb b/spec/finders/concerns/finder_methods_spec.rb
index e074e53c2c5..2e44df8b044 100644
--- a/spec/finders/concerns/finder_methods_spec.rb
+++ b/spec/finders/concerns/finder_methods_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe FinderMethods do
diff --git a/spec/finders/concerns/finder_with_cross_project_access_spec.rb b/spec/finders/concerns/finder_with_cross_project_access_spec.rb
index f29acb521a8..6ba98b79176 100644
--- a/spec/finders/concerns/finder_with_cross_project_access_spec.rb
+++ b/spec/finders/concerns/finder_with_cross_project_access_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe FinderWithCrossProjectAccess do
@@ -22,6 +24,7 @@ describe FinderWithCrossProjectAccess do
let(:user) { create(:user) }
subject(:finder) { finder_class.new(user) }
+
let!(:result) { create(:issue) }
before do
diff --git a/spec/finders/contributed_projects_finder_spec.rb b/spec/finders/contributed_projects_finder_spec.rb
index ee84fd067d4..1d907261fe9 100644
--- a/spec/finders/contributed_projects_finder_spec.rb
+++ b/spec/finders/contributed_projects_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ContributedProjectsFinder do
diff --git a/spec/finders/environments_finder_spec.rb b/spec/finders/environments_finder_spec.rb
index 25835bb4d94..69687eaa99f 100644
--- a/spec/finders/environments_finder_spec.rb
+++ b/spec/finders/environments_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EnvironmentsFinder do
diff --git a/spec/finders/events_finder_spec.rb b/spec/finders/events_finder_spec.rb
index 3bce46cc4d1..848030262cd 100644
--- a/spec/finders/events_finder_spec.rb
+++ b/spec/finders/events_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EventsFinder do
diff --git a/spec/finders/fork_projects_finder_spec.rb b/spec/finders/fork_projects_finder_spec.rb
index 98cff37205e..2fba53a74a0 100644
--- a/spec/finders/fork_projects_finder_spec.rb
+++ b/spec/finders/fork_projects_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ForkProjectsFinder do
diff --git a/spec/finders/group_descendants_finder_spec.rb b/spec/finders/group_descendants_finder_spec.rb
index 5fb6739d6e2..17875a9b9ab 100644
--- a/spec/finders/group_descendants_finder_spec.rb
+++ b/spec/finders/group_descendants_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GroupDescendantsFinder do
diff --git a/spec/finders/group_members_finder_spec.rb b/spec/finders/group_members_finder_spec.rb
index 49b0e14241e..08f3b4024b3 100644
--- a/spec/finders/group_members_finder_spec.rb
+++ b/spec/finders/group_members_finder_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GroupMembersFinder, '#execute' do
let(:group) { create(:group) }
- let(:nested_group) { create(:group, :access_requestable, parent: group) }
+ let(:nested_group) { create(:group, parent: group) }
let(:user1) { create(:user) }
let(:user2) { create(:user) }
let(:user3) { create(:user) }
diff --git a/spec/finders/group_projects_finder_spec.rb b/spec/finders/group_projects_finder_spec.rb
index f4bd8a3f6ba..b291b5d4b90 100644
--- a/spec/finders/group_projects_finder_spec.rb
+++ b/spec/finders/group_projects_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GroupProjectsFinder do
diff --git a/spec/finders/groups_finder_spec.rb b/spec/finders/groups_finder_spec.rb
index c8875d1f92d..741a89a270b 100644
--- a/spec/finders/groups_finder_spec.rb
+++ b/spec/finders/groups_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GroupsFinder do
diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb
index a17ff1ad50d..c27ce263bf0 100644
--- a/spec/finders/issues_finder_spec.rb
+++ b/spec/finders/issues_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe IssuesFinder do
diff --git a/spec/finders/joined_groups_finder_spec.rb b/spec/finders/joined_groups_finder_spec.rb
index ae3e55f90f1..b01bd44470a 100644
--- a/spec/finders/joined_groups_finder_spec.rb
+++ b/spec/finders/joined_groups_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe JoinedGroupsFinder do
diff --git a/spec/finders/labels_finder_spec.rb b/spec/finders/labels_finder_spec.rb
index ba41ded112a..2681f098fec 100644
--- a/spec/finders/labels_finder_spec.rb
+++ b/spec/finders/labels_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe LabelsFinder do
diff --git a/spec/finders/license_template_finder_spec.rb b/spec/finders/license_template_finder_spec.rb
index f6f40bf33cc..183ee67d801 100644
--- a/spec/finders/license_template_finder_spec.rb
+++ b/spec/finders/license_template_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe LicenseTemplateFinder do
diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb
index 6920fb4e572..f9b8fee6f2d 100644
--- a/spec/finders/members_finder_spec.rb
+++ b/spec/finders/members_finder_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MembersFinder, '#execute' do
set(:group) { create(:group) }
- set(:nested_group) { create(:group, :access_requestable, parent: group) }
+ set(:nested_group) { create(:group, parent: group) }
set(:project) { create(:project, namespace: nested_group) }
set(:user1) { create(:user) }
set(:user2) { create(:user) }
@@ -55,7 +57,7 @@ describe MembersFinder, '#execute' do
context 'when include_invited_groups_members == true' do
subject { described_class.new(project, user2).execute(include_invited_groups_members: true) }
- set(:linked_group) { create(:group, :public, :access_requestable) }
+ set(:linked_group) { create(:group, :public) }
set(:nested_linked_group) { create(:group, parent: linked_group) }
set(:linked_group_member) { linked_group.add_guest(user1) }
set(:nested_linked_group_member) { nested_linked_group.add_guest(user2) }
@@ -86,10 +88,8 @@ describe MembersFinder, '#execute' do
create(:project_group_link, project: project, group: nested_linked_group, group_access: Gitlab::Access::REPORTER)
nested_linked_group.add_developer(user1)
- result = subject
-
- expect(result).to contain_exactly(linked_group_member, nested_linked_group_member)
- expect(result.first.access_level).to eq(Gitlab::Access::REPORTER)
+ expect(subject.map(&:user)).to contain_exactly(user1, user2)
+ expect(subject.max_by(&:access_level).access_level).to eq(Gitlab::Access::REPORTER)
end
end
end
diff --git a/spec/finders/merge_request_target_project_finder_spec.rb b/spec/finders/merge_request_target_project_finder_spec.rb
index d26a75179de..1d78b7ba4e3 100644
--- a/spec/finders/merge_request_target_project_finder_spec.rb
+++ b/spec/finders/merge_request_target_project_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MergeRequestTargetProjectFinder do
diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb
index 6c0bbeff4f4..a396284f1e9 100644
--- a/spec/finders/merge_requests_finder_spec.rb
+++ b/spec/finders/merge_requests_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MergeRequestsFinder do
diff --git a/spec/finders/milestones_finder_spec.rb b/spec/finders/milestones_finder_spec.rb
index 34c7b508c56..3545ff35ed8 100644
--- a/spec/finders/milestones_finder_spec.rb
+++ b/spec/finders/milestones_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MilestonesFinder do
diff --git a/spec/finders/notes_finder_spec.rb b/spec/finders/notes_finder_spec.rb
index 88906adfeeb..44636a22ef9 100644
--- a/spec/finders/notes_finder_spec.rb
+++ b/spec/finders/notes_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe NotesFinder do
diff --git a/spec/finders/personal_access_tokens_finder_spec.rb b/spec/finders/personal_access_tokens_finder_spec.rb
index 3e849c9a644..a44daf585ba 100644
--- a/spec/finders/personal_access_tokens_finder_spec.rb
+++ b/spec/finders/personal_access_tokens_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PersonalAccessTokensFinder do
diff --git a/spec/finders/personal_projects_finder_spec.rb b/spec/finders/personal_projects_finder_spec.rb
index ef7dd0cd4a8..7686dd3dc9d 100644
--- a/spec/finders/personal_projects_finder_spec.rb
+++ b/spec/finders/personal_projects_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PersonalProjectsFinder do
diff --git a/spec/finders/pipeline_schedules_finder_spec.rb b/spec/finders/pipeline_schedules_finder_spec.rb
index 2fefa0280d1..8d0bde15e03 100644
--- a/spec/finders/pipeline_schedules_finder_spec.rb
+++ b/spec/finders/pipeline_schedules_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PipelineSchedulesFinder do
diff --git a/spec/finders/pipelines_finder_spec.rb b/spec/finders/pipelines_finder_spec.rb
index b23fd8ccdc6..05d13a76e0e 100644
--- a/spec/finders/pipelines_finder_spec.rb
+++ b/spec/finders/pipelines_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PipelinesFinder do
diff --git a/spec/finders/projects_finder_spec.rb b/spec/finders/projects_finder_spec.rb
index ac866e49fcd..4ec12b5a7f7 100644
--- a/spec/finders/projects_finder_spec.rb
+++ b/spec/finders/projects_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ProjectsFinder do
diff --git a/spec/finders/runner_jobs_finder_spec.rb b/spec/finders/runner_jobs_finder_spec.rb
index 01f45a37ba8..c11f9182036 100644
--- a/spec/finders/runner_jobs_finder_spec.rb
+++ b/spec/finders/runner_jobs_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe RunnerJobsFinder do
diff --git a/spec/finders/snippets_finder_spec.rb b/spec/finders/snippets_finder_spec.rb
index d367f9015c7..bcb762664f7 100644
--- a/spec/finders/snippets_finder_spec.rb
+++ b/spec/finders/snippets_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SnippetsFinder do
@@ -15,16 +17,27 @@ describe SnippetsFinder do
end
describe '#execute' do
- set(:user) { create(:user) }
- set(:private_personal_snippet) { create(:personal_snippet, :private, author: user) }
- set(:internal_personal_snippet) { create(:personal_snippet, :internal, author: user) }
- set(:public_personal_snippet) { create(:personal_snippet, :public, author: user) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:admin) { create(:admin) }
+ let_it_be(:group) { create(:group, :public) }
+ let_it_be(:project) { create(:project, :public, group: group) }
+
+ let_it_be(:private_personal_snippet) { create(:personal_snippet, :private, author: user) }
+ let_it_be(:internal_personal_snippet) { create(:personal_snippet, :internal, author: user) }
+ let_it_be(:public_personal_snippet) { create(:personal_snippet, :public, author: user) }
+
+ let_it_be(:private_project_snippet) { create(:project_snippet, :private, project: project) }
+ let_it_be(:internal_project_snippet) { create(:project_snippet, :internal, project: project) }
+ let_it_be(:public_project_snippet) { create(:project_snippet, :public, project: project) }
context 'filter by scope' do
it "returns all snippets for 'all' scope" do
snippets = described_class.new(user, scope: :all).execute
- expect(snippets).to contain_exactly(private_personal_snippet, internal_personal_snippet, public_personal_snippet)
+ expect(snippets).to contain_exactly(
+ private_personal_snippet, internal_personal_snippet, public_personal_snippet,
+ internal_project_snippet, public_project_snippet
+ )
end
it "returns all snippets for 'are_private' scope" do
@@ -36,13 +49,13 @@ describe SnippetsFinder do
it "returns all snippets for 'are_internal' scope" do
snippets = described_class.new(user, scope: :are_internal).execute
- expect(snippets).to contain_exactly(internal_personal_snippet)
+ expect(snippets).to contain_exactly(internal_personal_snippet, internal_project_snippet)
end
- it "returns all snippets for 'are_private' scope" do
+ it "returns all snippets for 'are_public' scope" do
snippets = described_class.new(user, scope: :are_public).execute
- expect(snippets).to contain_exactly(public_personal_snippet)
+ expect(snippets).to contain_exactly(public_personal_snippet, public_project_snippet)
end
end
@@ -84,7 +97,6 @@ describe SnippetsFinder do
end
it 'returns all snippets for an admin' do
- admin = create(:user, :admin)
snippets = described_class.new(admin, author: user).execute
expect(snippets).to contain_exactly(private_personal_snippet, internal_personal_snippet, public_personal_snippet)
@@ -92,12 +104,6 @@ describe SnippetsFinder do
end
context 'project snippets' do
- let(:group) { create(:group, :public) }
- let(:project) { create(:project, :public, group: group) }
- let!(:private_project_snippet) { create(:project_snippet, :private, project: project) }
- let!(:internal_project_snippet) { create(:project_snippet, :internal, project: project) }
- let!(:public_project_snippet) { create(:project_snippet, :public, project: project) }
-
it 'returns public personal and project snippets for unauthorized user' do
snippets = described_class.new(nil, project: project).execute
@@ -145,11 +151,54 @@ describe SnippetsFinder do
end
it 'returns all snippets for an admin' do
- admin = create(:user, :admin)
snippets = described_class.new(admin, project: project).execute
expect(snippets).to contain_exactly(private_project_snippet, internal_project_snippet, public_project_snippet)
end
+
+ context 'filter by author' do
+ let!(:other_user) { create(:user) }
+ let!(:other_private_project_snippet) { create(:project_snippet, :private, project: project, author: other_user) }
+ let!(:other_internal_project_snippet) { create(:project_snippet, :internal, project: project, author: other_user) }
+ let!(:other_public_project_snippet) { create(:project_snippet, :public, project: project, author: other_user) }
+
+ it 'returns all snippets for project members' do
+ project.add_developer(user)
+
+ snippets = described_class.new(user, author: other_user).execute
+
+ expect(snippets)
+ .to contain_exactly(
+ other_private_project_snippet,
+ other_internal_project_snippet,
+ other_public_project_snippet
+ )
+ end
+ end
+ end
+
+ context 'explore snippets' do
+ it 'returns only public personal snippets for unauthenticated users' do
+ snippets = described_class.new(nil, explore: true).execute
+
+ expect(snippets).to contain_exactly(public_personal_snippet)
+ end
+
+ it 'also returns internal personal snippets for authenticated users' do
+ snippets = described_class.new(user, explore: true).execute
+
+ expect(snippets).to contain_exactly(
+ internal_personal_snippet, public_personal_snippet
+ )
+ end
+
+ it 'returns all personal snippets for admins' do
+ snippets = described_class.new(admin, explore: true).execute
+
+ expect(snippets).to contain_exactly(
+ private_personal_snippet, internal_personal_snippet, public_personal_snippet
+ )
+ end
end
context 'when the user cannot read cross project' do
diff --git a/spec/finders/tags_finder_spec.rb b/spec/finders/tags_finder_spec.rb
index 460e278e2d3..85f970b71c4 100644
--- a/spec/finders/tags_finder_spec.rb
+++ b/spec/finders/tags_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TagsFinder do
diff --git a/spec/finders/template_finder_spec.rb b/spec/finders/template_finder_spec.rb
index 114af9461e0..ed47752cf60 100644
--- a/spec/finders/template_finder_spec.rb
+++ b/spec/finders/template_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TemplateFinder do
diff --git a/spec/finders/todos_finder_spec.rb b/spec/finders/todos_finder_spec.rb
index f7b35e76925..044e135fa0b 100644
--- a/spec/finders/todos_finder_spec.rb
+++ b/spec/finders/todos_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TodosFinder do
@@ -14,6 +16,10 @@ describe TodosFinder do
end
describe '#execute' do
+ it 'returns no todos if user is nil' do
+ expect(described_class.new(nil, {}).execute).to be_empty
+ end
+
context 'filtering' do
let!(:todo1) { create(:todo, user: user, project: project, target: issue) }
let!(:todo2) { create(:todo, user: user, group: group, target: merge_request) }
@@ -36,14 +42,98 @@ describe TodosFinder do
expect(todos).to match_array([todo1])
end
- context 'with subgroups' do
- let(:subgroup) { create(:group, parent: group) }
- let!(:todo3) { create(:todo, user: user, group: subgroup, target: issue) }
+ context 'when filtering for actions' do
+ let!(:todo1) { create(:todo, user: user, project: project, target: issue, action: Todo::ASSIGNED) }
+ let!(:todo2) { create(:todo, user: user, group: group, target: merge_request, action: Todo::DIRECTLY_ADDRESSED) }
+
+ context 'by action ids' do
+ it 'returns the expected todos' do
+ todos = finder.new(user, { action_id: Todo::DIRECTLY_ADDRESSED }).execute
+
+ expect(todos).to match_array([todo2])
+ end
+
+ context 'multiple actions' do
+ it 'returns the expected todos' do
+ todos = finder.new(user, { action_id: [Todo::DIRECTLY_ADDRESSED, Todo::ASSIGNED] }).execute
+
+ expect(todos).to match_array([todo2, todo1])
+ end
+ end
+ end
+
+ context 'by action names' do
+ it 'returns the expected todos' do
+ todos = finder.new(user, { action: :directly_addressed }).execute
+
+ expect(todos).to match_array([todo2])
+ end
+
+ context 'multiple actions' do
+ it 'returns the expected todos' do
+ todos = finder.new(user, { action: [:directly_addressed, :assigned] }).execute
+
+ expect(todos).to match_array([todo2, todo1])
+ end
+ end
+ end
+ end
+
+ context 'when filtering by author' do
+ let(:author1) { create(:user) }
+ let(:author2) { create(:user) }
+
+ let!(:todo1) { create(:todo, user: user, author: author1) }
+ let!(:todo2) { create(:todo, user: user, author: author2) }
+
+ it 'returns correct todos when filtering by an author' do
+ todos = finder.new(user, { author_id: author1.id }).execute
+
+ expect(todos).to match_array([todo1])
+ end
+
+ context 'querying for multiple authors' do
+ it 'returns the correct todo items' do
+ todos = finder.new(user, { author_id: [author2.id, author1.id] }).execute
+
+ expect(todos).to match_array([todo2, todo1])
+ end
+ end
+ end
+
+ context 'by groups' do
+ context 'with subgroups' do
+ let(:subgroup) { create(:group, parent: group) }
+ let!(:todo3) { create(:todo, user: user, group: subgroup, target: issue) }
+
+ it 'returns todos from subgroups when filtered by a group' do
+ todos = finder.new(user, { group_id: group.id }).execute
+
+ expect(todos).to match_array([todo1, todo2, todo3])
+ end
+ end
+
+ context 'filtering for multiple groups' do
+ let_it_be(:group2) { create(:group) }
+ let_it_be(:group3) { create(:group) }
+
+ let!(:todo1) { create(:todo, user: user, project: project, target: issue) }
+ let!(:todo2) { create(:todo, user: user, group: group, target: merge_request) }
+ let!(:todo3) { create(:todo, user: user, group: group2, target: merge_request) }
+
+ let(:subgroup1) { create(:group, parent: group) }
+ let!(:todo4) { create(:todo, user: user, group: subgroup1, target: issue) }
+
+ let(:subgroup2) { create(:group, parent: group2) }
+ let!(:todo5) { create(:todo, user: user, group: subgroup2, target: issue) }
+
+ let!(:todo6) { create(:todo, user: user, group: group3, target: issue) }
- it 'returns todos from subgroups when filtered by a group' do
- todos = finder.new(user, { group_id: group.id }).execute
+ it 'returns the expected groups' do
+ todos = finder.new(user, { group_id: [group.id, group2.id] }).execute
- expect(todos).to match_array([todo1, todo2, todo3])
+ expect(todos).to match_array([todo1, todo2, todo3, todo4, todo5])
+ end
end
end
end
diff --git a/spec/finders/user_finder_spec.rb b/spec/finders/user_finder_spec.rb
index 4771b878b8e..c20d7850d68 100644
--- a/spec/finders/user_finder_spec.rb
+++ b/spec/finders/user_finder_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
describe UserFinder do
- set(:user) { create(:user) }
+ let_it_be(:user) { create(:user) }
describe '#find_by_id' do
context 'when the user exists' do
@@ -24,7 +24,7 @@ describe UserFinder do
context 'when the user does not exist' do
it 'returns nil' do
- found = described_class.new(1).find_by_id
+ found = described_class.new(-1).find_by_id
expect(found).to be_nil
end
@@ -84,7 +84,7 @@ describe UserFinder do
context 'when the user does not exist' do
it 'returns nil' do
- found = described_class.new(1).find_by_id_or_username
+ found = described_class.new(-1).find_by_id_or_username
expect(found).to be_nil
end
@@ -110,7 +110,7 @@ describe UserFinder do
context 'when the user does not exist' do
it 'raises ActiveRecord::RecordNotFound' do
- finder = described_class.new(1)
+ finder = described_class.new(-1)
expect { finder.find_by_id! }.to raise_error(ActiveRecord::RecordNotFound)
end
@@ -170,10 +170,32 @@ describe UserFinder do
context 'when the user does not exist' do
it 'raises ActiveRecord::RecordNotFound' do
- finder = described_class.new(1)
+ finder = described_class.new(-1)
expect { finder.find_by_id_or_username! }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
+
+ describe '#find_by_ssh_key_id' do
+ let_it_be(:ssh_key) { create(:key, user: user) }
+
+ it 'returns the user when passing the ssh key id' do
+ found = described_class.new(ssh_key.id).find_by_ssh_key_id
+
+ expect(found).to eq(user)
+ end
+
+ it 'returns the user when passing the ssh key id (string)' do
+ found = described_class.new(ssh_key.id.to_s).find_by_ssh_key_id
+
+ expect(found).to eq(user)
+ end
+
+ it 'returns nil when the id does not exist' do
+ found = described_class.new(-1).find_by_ssh_key_id
+
+ expect(found).to be_nil
+ end
+ end
end
diff --git a/spec/finders/user_recent_events_finder_spec.rb b/spec/finders/user_recent_events_finder_spec.rb
index 5ebceeb7586..eef6448a4a2 100644
--- a/spec/finders/user_recent_events_finder_spec.rb
+++ b/spec/finders/user_recent_events_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe UserRecentEventsFinder do
diff --git a/spec/finders/users_finder_spec.rb b/spec/finders/users_finder_spec.rb
index d71d3c99272..7f1fc1cc1c5 100644
--- a/spec/finders/users_finder_spec.rb
+++ b/spec/finders/users_finder_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe UsersFinder do
diff --git a/spec/fixtures/api/schemas/deployment.json b/spec/fixtures/api/schemas/deployment.json
index 81c2d1ef5ab..0cfeadfe548 100644
--- a/spec/fixtures/api/schemas/deployment.json
+++ b/spec/fixtures/api/schemas/deployment.json
@@ -60,7 +60,8 @@
"scheduled_actions": {
"type": "array",
"items": { "$ref": "job/job.json" }
- }
+ },
+ "status": { "type": "string" }
},
"additionalProperties": false
}
diff --git a/spec/fixtures/api/schemas/evidences/evidence.json b/spec/fixtures/api/schemas/evidences/evidence.json
new file mode 100644
index 00000000000..ea3861258e1
--- /dev/null
+++ b/spec/fixtures/api/schemas/evidences/evidence.json
@@ -0,0 +1,11 @@
+{
+ "type": "object",
+ "required": [
+ "release"
+ ],
+ "properties": {
+ "release": { "$ref": "release.json" }
+ },
+ "additionalProperties": false
+}
+
diff --git a/spec/fixtures/api/schemas/evidences/issue.json b/spec/fixtures/api/schemas/evidences/issue.json
new file mode 100644
index 00000000000..fd9daf17ab8
--- /dev/null
+++ b/spec/fixtures/api/schemas/evidences/issue.json
@@ -0,0 +1,25 @@
+{
+ "type": "object",
+ "required": [
+ "id",
+ "title",
+ "description",
+ "author",
+ "state",
+ "iid",
+ "confidential",
+ "created_at",
+ "due_date"
+ ],
+ "properties": {
+ "id": { "type": "integer" },
+ "title": { "type": "string" },
+ "description": { "type": ["string", "null"] },
+ "state": { "type": "string" },
+ "iid": { "type": "integer" },
+ "confidential": { "type": "boolean" },
+ "created_at": { "type": "date" },
+ "due_date": { "type": ["date", "null"] }
+ },
+ "additionalProperties": false
+}
diff --git a/spec/fixtures/api/schemas/evidences/milestone.json b/spec/fixtures/api/schemas/evidences/milestone.json
new file mode 100644
index 00000000000..ab27fdecde2
--- /dev/null
+++ b/spec/fixtures/api/schemas/evidences/milestone.json
@@ -0,0 +1,27 @@
+{
+ "type": "object",
+ "required": [
+ "id",
+ "title",
+ "description",
+ "state",
+ "iid",
+ "created_at",
+ "due_date",
+ "issues"
+ ],
+ "properties": {
+ "id": { "type": "integer" },
+ "title": { "type": "string" },
+ "description": { "type": ["string", "null"] },
+ "state": { "type": "string" },
+ "iid": { "type": "integer" },
+ "created_at": { "type": "date" },
+ "due_date": { "type": ["date", "null"] },
+ "issues": {
+ "type": "array",
+ "items": { "$ref": "issue.json" }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/spec/fixtures/api/schemas/evidences/project.json b/spec/fixtures/api/schemas/evidences/project.json
new file mode 100644
index 00000000000..3a094bd276f
--- /dev/null
+++ b/spec/fixtures/api/schemas/evidences/project.json
@@ -0,0 +1,16 @@
+{
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "description",
+ "created_at"
+ ],
+ "properties": {
+ "id": { "type": "integer" },
+ "name": { "type": "string" },
+ "description": { "type": ["string", "null"] },
+ "created_at": { "type": "date" }
+ },
+ "additionalProperties": false
+}
diff --git a/spec/fixtures/api/schemas/evidences/release.json b/spec/fixtures/api/schemas/evidences/release.json
new file mode 100644
index 00000000000..37eb9a9b5c0
--- /dev/null
+++ b/spec/fixtures/api/schemas/evidences/release.json
@@ -0,0 +1,25 @@
+{
+ "type": "object",
+ "required": [
+ "id",
+ "tag_name",
+ "name",
+ "description",
+ "created_at",
+ "project",
+ "milestones"
+ ],
+ "properties": {
+ "id": { "type": "integer" },
+ "tag_name": { "type": "string" },
+ "name": { "type": ["string", "null"] },
+ "description": { "type": "string" },
+ "created_at": { "type": "date" },
+ "project": { "$ref": "project.json" },
+ "milestones": {
+ "type": "array",
+ "items": { "$ref": "milestone.json" }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/spec/fixtures/api/schemas/job/build_trace.json b/spec/fixtures/api/schemas/job/build_trace.json
new file mode 100644
index 00000000000..becd881ea57
--- /dev/null
+++ b/spec/fixtures/api/schemas/job/build_trace.json
@@ -0,0 +1,31 @@
+{
+ "description": "Build trace",
+ "type": "object",
+ "required": [
+ "id",
+ "status",
+ "complete",
+ "state",
+ "append",
+ "truncated",
+ "offset",
+ "size",
+ "total"
+ ],
+ "properties": {
+ "id": { "type": "integer" },
+ "status": { "type": "string" },
+ "complete": { "type": "boolean" },
+ "state": { "type": ["string", "null"] },
+ "append": { "type": ["boolean", "null"] },
+ "truncated": { "type": ["boolean", "null"] },
+ "offset": { "type": ["integer", "null"] },
+ "size": { "type": ["integer", "null"] },
+ "total": { "type": ["integer", "null"] },
+ "html": { "type": ["string", "null"] },
+ "lines": {
+ "type": ["array", "null"],
+ "items": { "$ref": "./build_trace_line.json" }
+ }
+ }
+}
diff --git a/spec/fixtures/api/schemas/job/build_trace_line.json b/spec/fixtures/api/schemas/job/build_trace_line.json
new file mode 100644
index 00000000000..18726dff2bb
--- /dev/null
+++ b/spec/fixtures/api/schemas/job/build_trace_line.json
@@ -0,0 +1,18 @@
+{
+ "description": "Build trace line",
+ "type": "object",
+ "required": [
+ "offset",
+ "content"
+ ],
+ "properties": {
+ "offset": { "type": "integer" },
+ "content": {
+ "type": "array",
+ "items": { "$ref": "./build_trace_line_content.json" }
+ },
+ "section": "string",
+ "section_header": "boolean",
+ "section_duration": "string"
+ }
+}
diff --git a/spec/fixtures/api/schemas/job/build_trace_line_content.json b/spec/fixtures/api/schemas/job/build_trace_line_content.json
new file mode 100644
index 00000000000..41f8124c113
--- /dev/null
+++ b/spec/fixtures/api/schemas/job/build_trace_line_content.json
@@ -0,0 +1,11 @@
+{
+ "description": "Build trace line content",
+ "type": "object",
+ "required": [
+ "text"
+ ],
+ "properties": {
+ "text": { "type": "string" },
+ "style": { "type": "string" }
+ }
+}
diff --git a/spec/fixtures/api/schemas/list.json b/spec/fixtures/api/schemas/list.json
index b76ec115293..7603892e198 100644
--- a/spec/fixtures/api/schemas/list.json
+++ b/spec/fixtures/api/schemas/list.json
@@ -35,7 +35,8 @@
}
},
"title": { "type": "string" },
- "position": { "type": ["integer", "null"] }
+ "position": { "type": ["integer", "null"] },
+ "max_issue_count": { "type": "integer" }
},
"additionalProperties": true
}
diff --git a/spec/fixtures/api/schemas/public_api/v4/board.json b/spec/fixtures/api/schemas/public_api/v4/board.json
index d667f1d631c..8dc3999baa2 100644
--- a/spec/fixtures/api/schemas/public_api/v4/board.json
+++ b/spec/fixtures/api/schemas/public_api/v4/board.json
@@ -76,7 +76,8 @@
"name": { "type": "string" }
}
},
- "position": { "type": ["integer", "null"] }
+ "position": { "type": ["integer", "null"] },
+ "max_issue_count": { "type": "integer" }
},
"additionalProperties": false
}
diff --git a/spec/fixtures/api/schemas/public_api/v4/deployment.json b/spec/fixtures/api/schemas/public_api/v4/deployment.json
index 3af2dc27d55..2371509edd6 100644
--- a/spec/fixtures/api/schemas/public_api/v4/deployment.json
+++ b/spec/fixtures/api/schemas/public_api/v4/deployment.json
@@ -6,6 +6,7 @@
"ref",
"sha",
"created_at",
+ "updated_at",
"user",
"deployable"
],
@@ -15,6 +16,7 @@
"ref": { "type": "string" },
"sha": { "type": "string" },
"created_at": { "type": "string" },
+ "updated_at": { "type": "string" },
"user": {
"oneOf": [
{ "type": "null" },
@@ -26,7 +28,8 @@
{ "type": "null" },
{ "$ref": "job.json" }
]
- }
+ },
+ "status": { "type": "string" }
},
"additionalProperties": false
}
diff --git a/spec/fixtures/api/schemas/public_api/v4/environment.json b/spec/fixtures/api/schemas/public_api/v4/environment.json
index 242e90fb7ac..57352017f03 100644
--- a/spec/fixtures/api/schemas/public_api/v4/environment.json
+++ b/spec/fixtures/api/schemas/public_api/v4/environment.json
@@ -17,7 +17,8 @@
{ "type": "null" },
{ "$ref": "deployment.json" }
]
- }
+ },
+ "state": { "type": "string" }
},
"additionalProperties": false
}
diff --git a/spec/fixtures/api/schemas/public_api/v4/release.json b/spec/fixtures/api/schemas/public_api/v4/release.json
index 662e61a9c06..2bdc8bc711c 100644
--- a/spec/fixtures/api/schemas/public_api/v4/release.json
+++ b/spec/fixtures/api/schemas/public_api/v4/release.json
@@ -19,6 +19,9 @@
"type": "array",
"items": { "$ref": "milestone.json" }
},
+ "commit_path": { "type": "string" },
+ "tag_path": { "type": "string" },
+ "name": { "type": "string" },
"assets": {
"required": ["count", "links", "sources"],
"properties": {
@@ -33,6 +36,13 @@
}
},
"additionalProperties": false
+ },
+ "_links": {
+ "required": ["merge_requests_url", "issues_url"],
+ "properties": {
+ "merge_requests_url": { "type": "string" },
+ "issues_url": { "type": "string" }
+ }
}
},
"additionalProperties": false
diff --git a/spec/fixtures/api/schemas/public_api/v4/release/release_for_guest.json b/spec/fixtures/api/schemas/public_api/v4/release/release_for_guest.json
index 0c1e8fd5fb3..bce74892059 100644
--- a/spec/fixtures/api/schemas/public_api/v4/release/release_for_guest.json
+++ b/spec/fixtures/api/schemas/public_api/v4/release/release_for_guest.json
@@ -8,6 +8,12 @@
"created_at": { "type": "date" },
"released_at": { "type": "date" },
"upcoming_release": { "type": "boolean" },
+ "milestones": {
+ "type": "array",
+ "items": { "$ref": "../milestone.json" }
+ },
+ "commit_path": { "type": "string" },
+ "tag_path": { "type": "string" },
"author": {
"oneOf": [{ "type": "null" }, { "$ref": "../user/basic.json" }]
},
@@ -18,6 +24,13 @@
"links": { "$ref": "../../../release/links.json" }
},
"additionalProperties": false
+ },
+ "_links": {
+ "required": ["merge_requests_url", "issues_url"],
+ "properties": {
+ "merge_requests_url": { "type": "string" },
+ "issues_url": { "type": "string" }
+ }
}
},
"additionalProperties": false
diff --git a/spec/fixtures/audio_sample.wav b/spec/fixtures/audio_sample.wav
new file mode 100644
index 00000000000..e0a42d58920
--- /dev/null
+++ b/spec/fixtures/audio_sample.wav
Binary files differ
diff --git a/spec/fixtures/emails/auto_reply.eml b/spec/fixtures/emails/auto_reply.eml
index 7999c8d78b7..4d5a45df467 100644
--- a/spec/fixtures/emails/auto_reply.eml
+++ b/spec/fixtures/emails/auto_reply.eml
@@ -12,7 +12,7 @@ Mime-Version: 1.0
Content-Type: text/plain;
charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
-Auto-Submitted: auto-generated
+X-Autoreply: yes
X-Sieve: CMU Sieve 2.2
X-Received: by 10.0.0.1 with SMTP id n7mr11234144ipb.85.1371157428600; Thu,
13 Jun 2013 14:03:48 -0700 (PDT)
diff --git a/spec/fixtures/emails/auto_submitted.eml b/spec/fixtures/emails/auto_submitted.eml
new file mode 100644
index 00000000000..7999c8d78b7
--- /dev/null
+++ b/spec/fixtures/emails/auto_submitted.eml
@@ -0,0 +1,21 @@
+Return-Path: <jake@adventuretime.ooo>
+Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
+Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; Thu, 13 Jun 2013 17:03:50 -0400
+Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; Thu, 13 Jun 2013 14:03:48 -0700
+Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
+Date: Thu, 13 Jun 2013 17:03:48 -0400
+From: Jake the Dog <jake@adventuretime.ooo>
+To: reply+636ca428858779856c226bb145ef4fad@appmail.adventuretime.ooo
+Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
+Subject: re: [Discourse Meta] eviltrout posted in 'Adventure Time Sux'
+Mime-Version: 1.0
+Content-Type: text/plain;
+ charset=ISO-8859-1
+Content-Transfer-Encoding: 7bit
+Auto-Submitted: auto-generated
+X-Sieve: CMU Sieve 2.2
+X-Received: by 10.0.0.1 with SMTP id n7mr11234144ipb.85.1371157428600; Thu,
+ 13 Jun 2013 14:03:48 -0700 (PDT)
+X-Scanned-By: MIMEDefang 2.69 on IPv6:2001:470:1d:165::1
+
+Test reply to Discourse email digest
diff --git a/spec/fixtures/lib/gitlab/import_export/project.group.json b/spec/fixtures/lib/gitlab/import_export/project.group.json
new file mode 100644
index 00000000000..47faf271cca
--- /dev/null
+++ b/spec/fixtures/lib/gitlab/import_export/project.group.json
@@ -0,0 +1,186 @@
+{
+ "description": "Nisi et repellendus ut enim quo accusamus vel magnam.",
+ "visibility_level": 10,
+ "archived": false,
+ "milestones": [
+ {
+ "id": 1,
+ "title": "Project milestone",
+ "project_id": 8,
+ "description": "Project-level milestone",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.415Z",
+ "updated_at": "2016-06-14T15:02:04.415Z",
+ "state": "active",
+ "iid": 1,
+ "group_id": null
+ }
+ ],
+ "labels": [
+ {
+ "id": 2,
+ "title": "A project label",
+ "color": "#428bca",
+ "project_id": 8,
+ "created_at": "2016-07-22T08:55:44.161Z",
+ "updated_at": "2016-07-22T08:55:44.161Z",
+ "template": false,
+ "description": "",
+ "type": "ProjectLabel",
+ "priorities": [
+ {
+ "id": 1,
+ "project_id": 5,
+ "label_id": 1,
+ "priority": 1,
+ "created_at": "2016-10-18T09:35:43.338Z",
+ "updated_at": "2016-10-18T09:35:43.338Z"
+ }
+ ]
+ }
+ ],
+ "issues": [
+ {
+ "id": 1,
+ "title": "Fugiat est minima quae maxime non similique.",
+ "assignee_id": null,
+ "project_id": 8,
+ "author_id": 1,
+ "created_at": "2017-07-07T18:13:01.138Z",
+ "updated_at": "2017-08-15T18:37:40.807Z",
+ "branch_name": null,
+ "description": "Quam totam fuga numquam in eveniet.",
+ "state": "opened",
+ "iid": 1,
+ "updated_by_id": 1,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "lock_version": null,
+ "time_estimate": 0,
+ "closed_at": null,
+ "last_edited_at": null,
+ "last_edited_by_id": null,
+ "group_milestone_id": null,
+ "milestone": {
+ "id": 1,
+ "title": "Project milestone",
+ "project_id": 8,
+ "description": "Project-level milestone",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.415Z",
+ "updated_at": "2016-06-14T15:02:04.415Z",
+ "state": "active",
+ "iid": 1,
+ "group_id": null
+ },
+ "label_links": [
+ {
+ "id": 11,
+ "label_id": 6,
+ "target_id": 1,
+ "target_type": "Issue",
+ "created_at": "2017-08-15T18:37:40.795Z",
+ "updated_at": "2017-08-15T18:37:40.795Z",
+ "label": {
+ "id": 6,
+ "title": "group label",
+ "color": "#A8D695",
+ "project_id": null,
+ "created_at": "2017-08-15T18:37:19.698Z",
+ "updated_at": "2017-08-15T18:37:19.698Z",
+ "template": false,
+ "description": "",
+ "group_id": 5,
+ "type": "GroupLabel",
+ "priorities": []
+ }
+ },
+ {
+ "id": 11,
+ "label_id": 2,
+ "target_id": 1,
+ "target_type": "Issue",
+ "created_at": "2017-08-15T18:37:40.795Z",
+ "updated_at": "2017-08-15T18:37:40.795Z",
+ "label": {
+ "id": 6,
+ "title": "A project label",
+ "color": "#A8D695",
+ "project_id": null,
+ "created_at": "2017-08-15T18:37:19.698Z",
+ "updated_at": "2017-08-15T18:37:19.698Z",
+ "template": false,
+ "description": "",
+ "group_id": 5,
+ "type": "ProjectLabel",
+ "priorities": []
+ }
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "title": "Fugiat est minima quae maxime non similique.",
+ "assignee_id": null,
+ "project_id": 8,
+ "author_id": 1,
+ "created_at": "2017-07-07T18:13:01.138Z",
+ "updated_at": "2017-08-15T18:37:40.807Z",
+ "branch_name": null,
+ "description": "Quam totam fuga numquam in eveniet.",
+ "state": "closed",
+ "iid": 2,
+ "updated_by_id": 1,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "lock_version": null,
+ "time_estimate": 0,
+ "closed_at": null,
+ "last_edited_at": null,
+ "last_edited_by_id": null,
+ "group_milestone_id": null,
+ "milestone": {
+ "id": 2,
+ "title": "A group milestone",
+ "description": "Group-level milestone",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.415Z",
+ "updated_at": "2016-06-14T15:02:04.415Z",
+ "state": "active",
+ "iid": 1,
+ "group_id": 100
+ },
+ "label_links": [
+ {
+ "id": 11,
+ "label_id": 2,
+ "target_id": 1,
+ "target_type": "Issue",
+ "created_at": "2017-08-15T18:37:40.795Z",
+ "updated_at": "2017-08-15T18:37:40.795Z",
+ "label": {
+ "id": 2,
+ "title": "A project label",
+ "color": "#A8D695",
+ "project_id": null,
+ "created_at": "2017-08-15T18:37:19.698Z",
+ "updated_at": "2017-08-15T18:37:19.698Z",
+ "template": false,
+ "description": "",
+ "group_id": 5,
+ "type": "ProjectLabel",
+ "priorities": []
+ }
+ }
+ ]
+ }
+ ],
+ "snippets": [
+
+ ],
+ "hooks": [
+
+ ]
+}
diff --git a/spec/fixtures/lib/gitlab/import_export/project.json b/spec/fixtures/lib/gitlab/import_export/project.json
new file mode 100644
index 00000000000..7d9c8cdef8f
--- /dev/null
+++ b/spec/fixtures/lib/gitlab/import_export/project.json
@@ -0,0 +1,7254 @@
+{
+ "description": "Nisi et repellendus ut enim quo accusamus vel magnam.",
+ "import_type": "gitlab_project",
+ "creator_id": 123,
+ "visibility_level": 10,
+ "archived": false,
+ "labels": [
+ {
+ "id": 2,
+ "title": "test2",
+ "color": "#428bca",
+ "project_id": 8,
+ "created_at": "2016-07-22T08:55:44.161Z",
+ "updated_at": "2016-07-22T08:55:44.161Z",
+ "template": false,
+ "description": "",
+ "type": "ProjectLabel",
+ "priorities": []
+ },
+ {
+ "id": 3,
+ "title": "test3",
+ "color": "#428bca",
+ "group_id": 8,
+ "created_at": "2016-07-22T08:55:44.161Z",
+ "updated_at": "2016-07-22T08:55:44.161Z",
+ "template": false,
+ "description": "",
+ "project_id": null,
+ "type": "GroupLabel",
+ "priorities": [
+ {
+ "id": 1,
+ "project_id": 5,
+ "label_id": 1,
+ "priority": 1,
+ "created_at": "2016-10-18T09:35:43.338Z",
+ "updated_at": "2016-10-18T09:35:43.338Z"
+ }
+ ]
+ }
+ ],
+ "issues": [
+ {
+ "id": 40,
+ "title": "Voluptatem",
+ "author_id": 22,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:08.340Z",
+ "updated_at": "2016-06-14T15:02:47.967Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Aliquam enim illo et possimus.",
+ "state": "opened",
+ "iid": 10,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "test_ee_field": "test",
+ "issue_assignees": [
+ {
+ "user_id": 1,
+ "issue_id": 40
+ },
+ {
+ "user_id": 15,
+ "issue_id": 40
+ },
+ {
+ "user_id": 16,
+ "issue_id": 40
+ },
+ {
+ "user_id": 16,
+ "issue_id": 40
+ },
+ {
+ "user_id": 6,
+ "issue_id": 40
+ }
+ ],
+ "milestone": {
+ "id": 1,
+ "title": "test milestone",
+ "project_id": 8,
+ "description": "test milestone",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.415Z",
+ "updated_at": "2016-06-14T15:02:04.415Z",
+ "state": "active",
+ "iid": 1,
+ "events": [
+ {
+ "id": 487,
+ "target_type": "Milestone",
+ "target_id": 1,
+ "project_id": 46,
+ "created_at": "2016-06-14T15:02:04.418Z",
+ "updated_at": "2016-06-14T15:02:04.418Z",
+ "action": 1,
+ "author_id": 18
+ }
+ ]
+ },
+ "label_links": [
+ {
+ "id": 2,
+ "label_id": 2,
+ "target_id": 40,
+ "target_type": "Issue",
+ "created_at": "2016-07-22T08:57:02.840Z",
+ "updated_at": "2016-07-22T08:57:02.840Z",
+ "label": {
+ "id": 2,
+ "title": "test2",
+ "color": "#428bca",
+ "project_id": 8,
+ "created_at": "2016-07-22T08:55:44.161Z",
+ "updated_at": "2016-07-22T08:55:44.161Z",
+ "template": false,
+ "description": "",
+ "type": "ProjectLabel"
+ }
+ },
+ {
+ "id": 3,
+ "label_id": 3,
+ "target_id": 40,
+ "target_type": "Issue",
+ "created_at": "2016-07-22T08:57:02.841Z",
+ "updated_at": "2016-07-22T08:57:02.841Z",
+ "label": {
+ "id": 3,
+ "title": "test3",
+ "color": "#428bca",
+ "group_id": 8,
+ "created_at": "2016-07-22T08:55:44.161Z",
+ "updated_at": "2016-07-22T08:55:44.161Z",
+ "template": false,
+ "description": "",
+ "project_id": null,
+ "type": "GroupLabel",
+ "priorities": [
+ {
+ "id": 1,
+ "project_id": 5,
+ "label_id": 1,
+ "priority": 1,
+ "created_at": "2016-10-18T09:35:43.338Z",
+ "updated_at": "2016-10-18T09:35:43.338Z"
+ }
+ ]
+ }
+ }
+ ],
+ "notes": [
+ {
+ "id": 351,
+ "note": "Quo reprehenderit aliquam qui dicta impedit cupiditate eligendi.",
+ "note_html": "<p>something else entirely</p>",
+ "cached_markdown_version": 917504,
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:47.770Z",
+ "updated_at": "2016-06-14T15:02:47.770Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 352,
+ "note": "Est reprehenderit quas aut aspernatur autem recusandae voluptatem.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:47.795Z",
+ "updated_at": "2016-06-14T15:02:47.795Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 353,
+ "note": "Perspiciatis suscipit voluptates in eius nihil.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:47.823Z",
+ "updated_at": "2016-06-14T15:02:47.823Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 354,
+ "note": "Aut vel voluptas corrupti nisi provident laboriosam magnam aut.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:47.850Z",
+ "updated_at": "2016-06-14T15:02:47.850Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 355,
+ "note": "Officia dolore consequatur in saepe cum magni.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:47.876Z",
+ "updated_at": "2016-06-14T15:02:47.876Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 356,
+ "note": "Cum ipsum rem voluptas eaque et ea.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:47.908Z",
+ "updated_at": "2016-06-14T15:02:47.908Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 357,
+ "note": "Recusandae excepturi asperiores suscipit autem nostrum.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:47.937Z",
+ "updated_at": "2016-06-14T15:02:47.937Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 358,
+ "note": "Et hic est id similique et non nesciunt voluptate.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:47.965Z",
+ "updated_at": "2016-06-14T15:02:47.965Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 40,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "resource_label_events": [
+ {
+ "id":244,
+ "action":"remove",
+ "issue_id":40,
+ "merge_request_id":null,
+ "label_id":2,
+ "user_id":1,
+ "created_at":"2018-08-28T08:24:00.494Z",
+ "label": {
+ "id": 2,
+ "title": "test2",
+ "color": "#428bca",
+ "project_id": 8,
+ "created_at": "2016-07-22T08:55:44.161Z",
+ "updated_at": "2016-07-22T08:55:44.161Z",
+ "template": false,
+ "description": "",
+ "type": "ProjectLabel"
+ }
+ }
+ ]
+ },
+ {
+ "id": 39,
+ "title": "Issue without assignees",
+ "author_id": 22,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:08.233Z",
+ "updated_at": "2016-06-14T15:02:48.194Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Voluptate vel reprehenderit facilis omnis voluptas magnam tenetur.",
+ "state": "opened",
+ "iid": 9,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "issue_assignees": [],
+ "milestone": {
+ "id": 1,
+ "title": "test milestone",
+ "project_id": 8,
+ "description": "test milestone",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.415Z",
+ "updated_at": "2016-06-14T15:02:04.415Z",
+ "state": "active",
+ "iid": 1,
+ "events": [
+ {
+ "id": 487,
+ "target_type": "Milestone",
+ "target_id": 1,
+ "project_id": 46,
+ "created_at": "2016-06-14T15:02:04.418Z",
+ "updated_at": "2016-06-14T15:02:04.418Z",
+ "action": 1,
+ "author_id": 18
+ }
+ ]
+ },
+ "notes": [
+ {
+ "id": 359,
+ "note": "Quo eius velit quia et id quam.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:48.009Z",
+ "updated_at": "2016-06-14T15:02:48.009Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 360,
+ "note": "Nulla commodi ratione cumque id autem.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:48.032Z",
+ "updated_at": "2016-06-14T15:02:48.032Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 361,
+ "note": "Illum non ea sed dolores corrupti.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:48.056Z",
+ "updated_at": "2016-06-14T15:02:48.056Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 362,
+ "note": "Facere dolores ipsum dolorum maiores omnis occaecati ab.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:48.082Z",
+ "updated_at": "2016-06-14T15:02:48.082Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 363,
+ "note": "Quod laudantium similique sint aut est ducimus.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:48.113Z",
+ "updated_at": "2016-06-14T15:02:48.113Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 364,
+ "note": "Aut omnis eos esse incidunt vero reiciendis.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:48.139Z",
+ "updated_at": "2016-06-14T15:02:48.139Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 365,
+ "note": "Beatae dolore et doloremque asperiores sunt.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:48.162Z",
+ "updated_at": "2016-06-14T15:02:48.162Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 366,
+ "note": "Doloribus ipsam ex delectus rerum libero recusandae modi repellendus.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:48.192Z",
+ "updated_at": "2016-06-14T15:02:48.192Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 39,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 38,
+ "title": "Quasi adipisci non cupiditate dolorem quo qui earum sed.",
+ "author_id": 6,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:08.154Z",
+ "updated_at": "2016-06-14T15:02:48.614Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Ea recusandae neque autem tempora.",
+ "state": "closed",
+ "iid": 8,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "label_links": [
+ {
+ "id": 99,
+ "label_id": 2,
+ "target_id": 38,
+ "target_type": "Issue",
+ "created_at": "2016-07-22T08:57:02.840Z",
+ "updated_at": "2016-07-22T08:57:02.840Z",
+ "label": {
+ "id": 2,
+ "title": "test2",
+ "color": "#428bca",
+ "project_id": 8,
+ "created_at": "2016-07-22T08:55:44.161Z",
+ "updated_at": "2016-07-22T08:55:44.161Z",
+ "template": false,
+ "description": "",
+ "type": "ProjectLabel"
+ }
+ }
+ ],
+ "notes": [
+ {
+ "id": 367,
+ "note": "Accusantium fugiat et eaque quisquam esse corporis.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:48.235Z",
+ "updated_at": "2016-06-14T15:02:48.235Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 368,
+ "note": "Ea labore eum nam qui laboriosam.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:48.261Z",
+ "updated_at": "2016-06-14T15:02:48.261Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 369,
+ "note": "Accusantium quis sed molestiae et.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:48.294Z",
+ "updated_at": "2016-06-14T15:02:48.294Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 370,
+ "note": "Corporis numquam a voluptatem pariatur asperiores dolorem delectus autem.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:48.523Z",
+ "updated_at": "2016-06-14T15:02:48.523Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 371,
+ "note": "Ea accusantium maxime voluptas rerum.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:48.546Z",
+ "updated_at": "2016-06-14T15:02:48.546Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 372,
+ "note": "Pariatur iusto et et excepturi similique ipsam eum.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:48.569Z",
+ "updated_at": "2016-06-14T15:02:48.569Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 373,
+ "note": "Aliquam et culpa officia iste eius.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:48.591Z",
+ "updated_at": "2016-06-14T15:02:48.591Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 374,
+ "note": "Ab id velit id unde laborum.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:48.613Z",
+ "updated_at": "2016-06-14T15:02:48.613Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 38,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 37,
+ "title": "Cupiditate quo aut ducimus minima molestiae vero numquam possimus.",
+ "author_id": 20,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:08.051Z",
+ "updated_at": "2016-06-14T15:02:48.854Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Maiores architecto quos in dolorem.",
+ "state": "opened",
+ "iid": 7,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "notes": [
+ {
+ "id": 375,
+ "note": "Quasi fugit qui sed eligendi aut quia.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:48.647Z",
+ "updated_at": "2016-06-14T15:02:48.647Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 376,
+ "note": "Esse nesciunt voluptatem ex vero est consequatur.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:48.674Z",
+ "updated_at": "2016-06-14T15:02:48.674Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 377,
+ "note": "Similique qui quas non aut et velit sequi in.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:48.696Z",
+ "updated_at": "2016-06-14T15:02:48.696Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 378,
+ "note": "Eveniet ut cupiditate repellendus numquam in esse eius.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:48.720Z",
+ "updated_at": "2016-06-14T15:02:48.720Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 379,
+ "note": "Velit est dolorem adipisci rerum sed iure.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:48.755Z",
+ "updated_at": "2016-06-14T15:02:48.755Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 380,
+ "note": "Voluptatem ullam ab ut illo ut quo.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:48.793Z",
+ "updated_at": "2016-06-14T15:02:48.793Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 381,
+ "note": "Voluptatem impedit beatae quasi ipsa earum consectetur.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:48.823Z",
+ "updated_at": "2016-06-14T15:02:48.823Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 382,
+ "note": "Nihil officiis eaque incidunt sunt voluptatum excepturi.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:48.852Z",
+ "updated_at": "2016-06-14T15:02:48.852Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 37,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 36,
+ "title": "Necessitatibus dolor est enim quia rem suscipit quidem voluptas ullam.",
+ "author_id": 16,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:07.958Z",
+ "updated_at": "2016-06-14T15:02:49.044Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Ut aut ut et tenetur velit aut id modi.",
+ "state": "opened",
+ "iid": 6,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "notes": [
+ {
+ "id": 383,
+ "note": "Excepturi deleniti sunt rerum nesciunt vero fugiat possimus.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:48.885Z",
+ "updated_at": "2016-06-14T15:02:48.885Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 384,
+ "note": "Et est nemo sed nam sed.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:48.910Z",
+ "updated_at": "2016-06-14T15:02:48.910Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 385,
+ "note": "Animi mollitia nulla facere amet aut quaerat.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:48.934Z",
+ "updated_at": "2016-06-14T15:02:48.934Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 386,
+ "note": "Excepturi id voluptas ut odio officiis omnis.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:48.955Z",
+ "updated_at": "2016-06-14T15:02:48.955Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 387,
+ "note": "Molestiae labore officiis magni et eligendi quasi maxime.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:48.978Z",
+ "updated_at": "2016-06-14T15:02:48.978Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 388,
+ "note": "Officia tenetur praesentium rem nam non.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:49.001Z",
+ "updated_at": "2016-06-14T15:02:49.001Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 389,
+ "note": "Et et et molestiae reprehenderit.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:49.022Z",
+ "updated_at": "2016-06-14T15:02:49.022Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 390,
+ "note": "Aperiam in consequatur est sunt cum quia.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:49.043Z",
+ "updated_at": "2016-06-14T15:02:49.043Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 35,
+ "title": "Repellat praesentium deserunt maxime incidunt harum porro qui.",
+ "author_id": 20,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:07.832Z",
+ "updated_at": "2016-06-14T15:02:49.226Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Dicta nisi nihil non ipsa velit.",
+ "state": "closed",
+ "iid": 5,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "notes": [
+ {
+ "id": 391,
+ "note": "Qui magnam et assumenda quod id dicta necessitatibus.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:49.075Z",
+ "updated_at": "2016-06-14T15:02:49.075Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 392,
+ "note": "Consectetur deserunt possimus dolor est odio.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:49.095Z",
+ "updated_at": "2016-06-14T15:02:49.095Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 393,
+ "note": "Labore nisi quo cumque voluptas consequatur aut qui.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:49.117Z",
+ "updated_at": "2016-06-14T15:02:49.117Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 394,
+ "note": "Et totam facilis voluptas et enim.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:49.138Z",
+ "updated_at": "2016-06-14T15:02:49.138Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 395,
+ "note": "Ratione sint pariatur sed omnis eligendi quo libero exercitationem.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:49.160Z",
+ "updated_at": "2016-06-14T15:02:49.160Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 396,
+ "note": "Iure hic autem id voluptatem.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:49.182Z",
+ "updated_at": "2016-06-14T15:02:49.182Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 397,
+ "note": "Excepturi eum laboriosam delectus repellendus odio nisi et voluptatem.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:49.205Z",
+ "updated_at": "2016-06-14T15:02:49.205Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 398,
+ "note": "Ut quis ex soluta consequatur et blanditiis.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:49.225Z",
+ "updated_at": "2016-06-14T15:02:49.225Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 35,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 34,
+ "title": "Ullam expedita deserunt libero consequatur quia dolor harum perferendis facere quidem.",
+ "author_id": 1,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:07.717Z",
+ "updated_at": "2016-06-14T15:02:49.416Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Ut et explicabo vel voluptatem consequuntur ut sed.",
+ "state": "closed",
+ "iid": 4,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "notes": [
+ {
+ "id": 399,
+ "note": "Dolor iste tempora tenetur non vitae maiores voluptatibus.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:49.256Z",
+ "updated_at": "2016-06-14T15:02:49.256Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 400,
+ "note": "Aut sit quidem qui adipisci maxime excepturi iusto.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:49.284Z",
+ "updated_at": "2016-06-14T15:02:49.284Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 401,
+ "note": "Et a necessitatibus autem quidem animi sunt voluptatum rerum.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:49.305Z",
+ "updated_at": "2016-06-14T15:02:49.305Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 402,
+ "note": "Esse laboriosam quo voluptatem quis molestiae.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:49.328Z",
+ "updated_at": "2016-06-14T15:02:49.328Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 403,
+ "note": "Nemo magnam distinctio est ut voluptate ea.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:49.350Z",
+ "updated_at": "2016-06-14T15:02:49.350Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 404,
+ "note": "Omnis sed rerum neque rerum quae quam nulla officiis.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:49.372Z",
+ "updated_at": "2016-06-14T15:02:49.372Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 405,
+ "note": "Quo soluta dolorem vitae ad consequatur qui aut dicta.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:49.394Z",
+ "updated_at": "2016-06-14T15:02:49.394Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 406,
+ "note": "Magni minus est aut aut totam ut.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:49.414Z",
+ "updated_at": "2016-06-14T15:02:49.414Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 34,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 33,
+ "title": "Numquam accusamus eos iste exercitationem magni non inventore.",
+ "author_id": 26,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:07.611Z",
+ "updated_at": "2016-06-14T15:02:49.661Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Non asperiores velit accusantium voluptate.",
+ "state": "closed",
+ "iid": 3,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "notes": [
+ {
+ "id": 407,
+ "note": "Quod ea et possimus architecto.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:49.450Z",
+ "updated_at": "2016-06-14T15:02:49.450Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 408,
+ "note": "Reiciendis est et unde perferendis dicta ut praesentium quasi.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:49.503Z",
+ "updated_at": "2016-06-14T15:02:49.503Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 409,
+ "note": "Magni quia odio blanditiis pariatur voluptas.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:49.527Z",
+ "updated_at": "2016-06-14T15:02:49.527Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 410,
+ "note": "Enim quam ut et et et.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:49.551Z",
+ "updated_at": "2016-06-14T15:02:49.551Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 411,
+ "note": "Fugit voluptatem ratione maxime expedita.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:49.578Z",
+ "updated_at": "2016-06-14T15:02:49.578Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 412,
+ "note": "Voluptatem enim aut ipsa et et ducimus.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:49.604Z",
+ "updated_at": "2016-06-14T15:02:49.604Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 413,
+ "note": "Quia repellat fugiat consectetur quidem.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:49.631Z",
+ "updated_at": "2016-06-14T15:02:49.631Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 414,
+ "note": "Corporis ipsum et ea necessitatibus quod assumenda repudiandae quam.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:49.659Z",
+ "updated_at": "2016-06-14T15:02:49.659Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 33,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 32,
+ "title": "Necessitatibus magnam qui at velit consequatur perspiciatis.",
+ "author_id": 15,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:07.431Z",
+ "updated_at": "2016-06-14T15:02:49.884Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Molestiae corporis magnam et fugit aliquid nulla quia.",
+ "state": "closed",
+ "iid": 2,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "notes": [
+ {
+ "id": 415,
+ "note": "Nemo consequatur sed blanditiis qui id iure dolores.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:49.694Z",
+ "updated_at": "2016-06-14T15:02:49.694Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 416,
+ "note": "Voluptas ab accusantium dicta in.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:49.718Z",
+ "updated_at": "2016-06-14T15:02:49.718Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 417,
+ "note": "Esse odit qui a et eum ducimus.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:49.741Z",
+ "updated_at": "2016-06-14T15:02:49.741Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 418,
+ "note": "Sequi dolor doloribus ratione placeat repellendus.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:49.767Z",
+ "updated_at": "2016-06-14T15:02:49.767Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 419,
+ "note": "Quae aspernatur rem est similique.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:49.796Z",
+ "updated_at": "2016-06-14T15:02:49.796Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 420,
+ "note": "Voluptate omnis et id rerum non nesciunt laudantium assumenda.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:49.825Z",
+ "updated_at": "2016-06-14T15:02:49.825Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 421,
+ "note": "Quia enim ab et eligendi.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:49.853Z",
+ "updated_at": "2016-06-14T15:02:49.853Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 422,
+ "note": "In fugiat rerum voluptas quas officia.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:49.881Z",
+ "updated_at": "2016-06-14T15:02:49.881Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 32,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ },
+ {
+ "id": 31,
+ "title": "Libero nam magnam incidunt eaque placeat error et.",
+ "author_id": 16,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:07.280Z",
+ "updated_at": "2016-06-14T15:02:50.134Z",
+ "position": 0,
+ "branch_name": null,
+ "description": "Quod ad architecto qui est sed quia.",
+ "state": "closed",
+ "iid": 1,
+ "updated_by_id": null,
+ "confidential": false,
+ "due_date": null,
+ "moved_to_id": null,
+ "notes": [
+ {
+ "id": 423,
+ "note": "A mollitia qui iste consequatur eaque iure omnis sunt.",
+ "noteable_type": "Issue",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:49.933Z",
+ "updated_at": "2016-06-14T15:02:49.933Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 424,
+ "note": "Eveniet est et blanditiis sequi alias.",
+ "noteable_type": "Issue",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:49.965Z",
+ "updated_at": "2016-06-14T15:02:49.965Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 425,
+ "note": "Commodi tempore voluptas doloremque est.",
+ "noteable_type": "Issue",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:49.996Z",
+ "updated_at": "2016-06-14T15:02:49.996Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 426,
+ "note": "Quo libero impedit odio debitis rerum aspernatur.",
+ "noteable_type": "Issue",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:50.024Z",
+ "updated_at": "2016-06-14T15:02:50.024Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 427,
+ "note": "Dolorem voluptatem qui labore deserunt.",
+ "noteable_type": "Issue",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:50.049Z",
+ "updated_at": "2016-06-14T15:02:50.049Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 428,
+ "note": "Est blanditiis laboriosam enim ipsam.",
+ "noteable_type": "Issue",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:50.077Z",
+ "updated_at": "2016-06-14T15:02:50.077Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 429,
+ "note": "Et in voluptatem animi dolorem eos.",
+ "noteable_type": "Issue",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:50.107Z",
+ "updated_at": "2016-06-14T15:02:50.107Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 430,
+ "note": "Unde culpa voluptate qui sint quos.",
+ "noteable_type": "Issue",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:50.132Z",
+ "updated_at": "2016-06-14T15:02:50.132Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 31,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ]
+ }
+ ],
+ "milestones": [
+ {
+ "id": 1,
+ "title": "test milestone",
+ "project_id": 8,
+ "description": "test milestone",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.415Z",
+ "updated_at": "2016-06-14T15:02:04.415Z",
+ "state": "active",
+ "iid": 1,
+ "events": [
+ {
+ "id": 487,
+ "target_type": "Milestone",
+ "target_id": 1,
+ "project_id": 46,
+ "created_at": "2016-06-14T15:02:04.418Z",
+ "updated_at": "2016-06-14T15:02:04.418Z",
+ "action": 1,
+ "author_id": 18
+ }
+ ]
+ },
+ {
+ "id": 20,
+ "title": "v4.0",
+ "project_id": 5,
+ "description": "Totam quam laborum id magnam natus eaque aspernatur.",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.590Z",
+ "updated_at": "2016-06-14T15:02:04.590Z",
+ "state": "active",
+ "iid": 5,
+ "events": [
+ {
+ "id": 240,
+ "target_type": "Milestone",
+ "target_id": 20,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:04.593Z",
+ "updated_at": "2016-06-14T15:02:04.593Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 60,
+ "target_type": "Milestone",
+ "target_id": 20,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:04.593Z",
+ "updated_at": "2016-06-14T15:02:04.593Z",
+ "action": 1,
+ "author_id": 20
+ }
+ ]
+ },
+ {
+ "id": 19,
+ "title": "v3.0",
+ "project_id": 5,
+ "description": "Rerum at autem exercitationem ea voluptates harum quam placeat.",
+ "due_date": null,
+ "created_at": "2016-06-14T15:02:04.583Z",
+ "updated_at": "2016-06-14T15:02:04.583Z",
+ "state": "active",
+ "iid": 4,
+ "events": [
+ {
+ "id": 241,
+ "target_type": "Milestone",
+ "target_id": 19,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:04.585Z",
+ "updated_at": "2016-06-14T15:02:04.585Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 59,
+ "target_type": "Milestone",
+ "target_id": 19,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:04.585Z",
+ "updated_at": "2016-06-14T15:02:04.585Z",
+ "action": 1,
+ "author_id": 25
+ }
+ ]
+ }
+ ],
+ "snippets": [],
+ "releases": [],
+ "project_members": [
+ {
+ "id": 36,
+ "access_level": 40,
+ "source_id": 5,
+ "source_type": "Project",
+ "user_id": 16,
+ "notification_level": 3,
+ "created_at": "2016-06-14T15:02:03.834Z",
+ "updated_at": "2016-06-14T15:02:03.834Z",
+ "created_by_id": null,
+ "invite_email": null,
+ "invite_token": null,
+ "invite_accepted_at": null,
+ "requested_at": null,
+ "user": {
+ "id": 16,
+ "email": "maritza_schoen@block.ca",
+ "username": "bernard_willms"
+ }
+ },
+ {
+ "id": 35,
+ "access_level": 10,
+ "source_id": 5,
+ "source_type": "Project",
+ "user_id": 6,
+ "notification_level": 3,
+ "created_at": "2016-06-14T15:02:03.811Z",
+ "updated_at": "2016-06-14T15:02:03.811Z",
+ "created_by_id": null,
+ "invite_email": null,
+ "invite_token": null,
+ "invite_accepted_at": null,
+ "requested_at": null,
+ "user": {
+ "id": 6,
+ "email": "shaina@koelpindenesik.com",
+ "username": "saul_will"
+ }
+ },
+ {
+ "id": 34,
+ "access_level": 20,
+ "source_id": 5,
+ "source_type": "Project",
+ "user_id": 15,
+ "notification_level": 3,
+ "created_at": "2016-06-14T15:02:03.776Z",
+ "updated_at": "2016-06-14T15:02:03.776Z",
+ "created_by_id": null,
+ "invite_email": null,
+ "invite_token": null,
+ "invite_accepted_at": null,
+ "requested_at": null,
+ "user": {
+ "id": 15,
+ "email": "breanna_sanford@wolf.com",
+ "username": "emmet.schamberger"
+ }
+ },
+ {
+ "id": 33,
+ "access_level": 20,
+ "source_id": 5,
+ "source_type": "Project",
+ "user_id": 26,
+ "notification_level": 3,
+ "created_at": "2016-06-14T15:02:03.742Z",
+ "updated_at": "2016-06-14T15:02:03.742Z",
+ "created_by_id": null,
+ "invite_email": null,
+ "invite_token": null,
+ "invite_accepted_at": null,
+ "requested_at": null,
+ "user": {
+ "id": 26,
+ "email": "user4@example.com",
+ "username": "user4"
+ }
+ }
+ ],
+ "merge_requests": [
+ {
+ "id": 27,
+ "target_branch": "feature",
+ "source_branch": "feature_conflict",
+ "source_project_id": 999,
+ "author_id": 1,
+ "assignee_id": null,
+ "title": "MR1",
+ "created_at": "2016-06-14T15:02:36.568Z",
+ "updated_at": "2016-06-14T15:02:56.815Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 9,
+ "description": null,
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "diff_head_sha": "HEAD",
+ "source_branch_sha": "ABCD",
+ "target_branch_sha": "DCBA",
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": true,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 671,
+ "note": "Sit voluptatibus eveniet architecto quidem.",
+ "note_html": "<p>something else entirely</p>",
+ "cached_markdown_version": 917504,
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:56.632Z",
+ "updated_at": "2016-06-14T15:02:56.632Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 672,
+ "note": "Odio maxime ratione voluptatibus sed.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:56.656Z",
+ "updated_at": "2016-06-14T15:02:56.656Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 673,
+ "note": "Et deserunt et omnis nihil excepturi accusantium.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:56.679Z",
+ "updated_at": "2016-06-14T15:02:56.679Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 674,
+ "note": "Saepe asperiores exercitationem non dignissimos laborum reiciendis et ipsum.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:56.700Z",
+ "updated_at": "2016-06-14T15:02:56.700Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": [],
+ "suggestions": [
+ {
+ "id": 1,
+ "note_id": 674,
+ "relative_order": 0,
+ "applied": false,
+ "commit_id": null,
+ "from_content": "Original line\n",
+ "to_content": "New line\n",
+ "lines_above": 0,
+ "lines_below": 0,
+ "outdated": false
+ }
+ ]
+ },
+ {
+ "id": 675,
+ "note": "Numquam est at dolor quo et sed eligendi similique.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:56.720Z",
+ "updated_at": "2016-06-14T15:02:56.720Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 676,
+ "note": "Et perferendis aliquam sunt nisi labore delectus.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:56.742Z",
+ "updated_at": "2016-06-14T15:02:56.742Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 677,
+ "note": "Aut ex rerum et in.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:56.791Z",
+ "updated_at": "2016-06-14T15:02:56.791Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 678,
+ "note": "Dolor laborum earum ut exercitationem.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:56.814Z",
+ "updated_at": "2016-06-14T15:02:56.814Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 27,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "resource_label_events": [
+ {
+ "id":243,
+ "action":"add",
+ "issue_id":null,
+ "merge_request_id":27,
+ "label_id":null,
+ "user_id":1,
+ "created_at":"2018-08-28T08:24:00.494Z"
+ }
+ ],
+ "merge_request_diff": {
+ "id": 27,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 0,
+ "sha": "bb5206fee213d983da88c47f9cf4cc6caf9c66dc",
+ "message": "Feature conflict added\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-08-06T08:35:52.000+02:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-08-06T08:35:52.000+02:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 1,
+ "sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
+ "message": "Add submodule from gitlab.com\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T10:01:38.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T10:01:38.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 2,
+ "sha": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
+ "message": "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:57:31.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:57:31.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 3,
+ "sha": "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9",
+ "message": "More submodules\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:54:21.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:54:21.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 4,
+ "sha": "d14d6c0abdd253381df51a723d58691b2ee1ab08",
+ "message": "Remove ds_store files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:49:50.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:49:50.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 5,
+ "sha": "c1acaa58bbcbc3eafe538cb8274ba387047b69f8",
+ "message": "Ignore DS files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:48:32.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:48:32.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 0,
+ "utf8_diff": "Binary files a/.DS_Store and /dev/null differ\n",
+ "new_path": ".DS_Store",
+ "old_path": ".DS_Store",
+ "a_mode": "100644",
+ "b_mode": "0",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": true,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 1,
+ "utf8_diff": "--- a/.gitignore\n+++ b/.gitignore\n@@ -17,3 +17,4 @@ rerun.txt\n pickle-email-*.html\n .project\n config/initializers/secret_token.rb\n+.DS_Store\n",
+ "new_path": ".gitignore",
+ "old_path": ".gitignore",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 2,
+ "utf8_diff": "--- a/.gitmodules\n+++ b/.gitmodules\n@@ -1,3 +1,9 @@\n [submodule \"six\"]\n \tpath = six\n \turl = git://github.com/randx/six.git\n+[submodule \"gitlab-shell\"]\n+\tpath = gitlab-shell\n+\turl = https://github.com/gitlabhq/gitlab-shell.git\n+[submodule \"gitlab-grack\"]\n+\tpath = gitlab-grack\n+\turl = https://gitlab.com/gitlab-org/gitlab-grack.git\n",
+ "new_path": ".gitmodules",
+ "old_path": ".gitmodules",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 3,
+ "utf8_diff": "Binary files a/files/.DS_Store and /dev/null differ\n",
+ "new_path": "files/.DS_Store",
+ "old_path": "files/.DS_Store",
+ "a_mode": "100644",
+ "b_mode": "0",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": true,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 4,
+ "utf8_diff": "--- /dev/null\n+++ b/files/ruby/feature.rb\n@@ -0,0 +1,4 @@\n+# This file was changed in feature branch\n+# We put different code here to make merge conflict\n+class Conflict\n+end\n",
+ "new_path": "files/ruby/feature.rb",
+ "old_path": "files/ruby/feature.rb",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 5,
+ "utf8_diff": "--- a/files/ruby/popen.rb\n+++ b/files/ruby/popen.rb\n@@ -6,12 +6,18 @@ module Popen\n \n def popen(cmd, path=nil)\n unless cmd.is_a?(Array)\n- raise \"System commands must be given as an array of strings\"\n+ raise RuntimeError, \"System commands must be given as an array of strings\"\n end\n \n path ||= Dir.pwd\n- vars = { \"PWD\" => path }\n- options = { chdir: path }\n+\n+ vars = {\n+ \"PWD\" => path\n+ }\n+\n+ options = {\n+ chdir: path\n+ }\n \n unless File.directory?(path)\n FileUtils.mkdir_p(path)\n@@ -19,6 +25,7 @@ module Popen\n \n @cmd_output = \"\"\n @cmd_status = 0\n+\n Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|\n @cmd_output << stdout.read\n @cmd_output << stderr.read\n",
+ "new_path": "files/ruby/popen.rb",
+ "old_path": "files/ruby/popen.rb",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 6,
+ "utf8_diff": "--- a/files/ruby/regex.rb\n+++ b/files/ruby/regex.rb\n@@ -19,14 +19,12 @@ module Gitlab\n end\n \n def archive_formats_regex\n- #|zip|tar| tar.gz | tar.bz2 |\n- /(zip|tar|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n+ /(zip|tar|7z|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n end\n \n def git_reference_regex\n # Valid git ref regex, see:\n # https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html\n-\n %r{\n (?!\n (?# doesn't begins with)\n",
+ "new_path": "files/ruby/regex.rb",
+ "old_path": "files/ruby/regex.rb",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 7,
+ "utf8_diff": "--- /dev/null\n+++ b/gitlab-grack\n@@ -0,0 +1 @@\n+Subproject commit 645f6c4c82fd3f5e06f67134450a570b795e55a6\n",
+ "new_path": "gitlab-grack",
+ "old_path": "gitlab-grack",
+ "a_mode": "0",
+ "b_mode": "160000",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 27,
+ "relative_order": 8,
+ "utf8_diff": "--- /dev/null\n+++ b/gitlab-shell\n@@ -0,0 +1 @@\n+Subproject commit 79bceae69cb5750d6567b223597999bfa91cb3b9\n",
+ "new_path": "gitlab-shell",
+ "old_path": "gitlab-shell",
+ "a_mode": "0",
+ "b_mode": "160000",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 27,
+ "created_at": "2016-06-14T15:02:36.572Z",
+ "updated_at": "2016-06-14T15:02:36.658Z",
+ "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
+ "real_size": "9"
+ },
+ "events": [
+ {
+ "id": 221,
+ "target_type": "MergeRequest",
+ "target_id": 27,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:36.703Z",
+ "updated_at": "2016-06-14T15:02:36.703Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 187,
+ "target_type": "MergeRequest",
+ "target_id": 27,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:36.703Z",
+ "updated_at": "2016-06-14T15:02:36.703Z",
+ "action": 1,
+ "author_id": 1
+ }
+ ],
+ "approvals_before_merge": 1
+ },
+ {
+ "id": 26,
+ "target_branch": "master",
+ "source_branch": "feature",
+ "source_project_id": 4,
+ "author_id": 1,
+ "assignee_id": null,
+ "title": "MR2",
+ "created_at": "2016-06-14T15:02:36.418Z",
+ "updated_at": "2016-06-14T15:02:57.013Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 8,
+ "description": null,
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 679,
+ "note": "Qui rerum totam nisi est.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:56.848Z",
+ "updated_at": "2016-06-14T15:02:56.848Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 680,
+ "note": "Pariatur magni corrupti consequatur debitis minima error beatae voluptatem.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:56.871Z",
+ "updated_at": "2016-06-14T15:02:56.871Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 681,
+ "note": "Qui quis ut modi eos rerum ratione.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:56.895Z",
+ "updated_at": "2016-06-14T15:02:56.895Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 682,
+ "note": "Illum quidem expedita mollitia fugit.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:56.918Z",
+ "updated_at": "2016-06-14T15:02:56.918Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 683,
+ "note": "Consectetur voluptate sit sint possimus veritatis quod.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:56.942Z",
+ "updated_at": "2016-06-14T15:02:56.942Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 684,
+ "note": "Natus libero quibusdam rem assumenda deleniti accusamus sed earum.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:56.966Z",
+ "updated_at": "2016-06-14T15:02:56.966Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 685,
+ "note": "Tenetur autem nihil rerum odit.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:56.989Z",
+ "updated_at": "2016-06-14T15:02:56.989Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 686,
+ "note": "Quia maiores et odio sed.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:57.012Z",
+ "updated_at": "2016-06-14T15:02:57.012Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 26,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 26,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 26,
+ "sha": "0b4bc9a49b562e85de7cc9e834518ea6828729b9",
+ "relative_order": 0,
+ "message": "Feature added\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:26:01.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:26:01.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 26,
+ "relative_order": 0,
+ "utf8_diff": "--- /dev/null\n+++ b/files/ruby/feature.rb\n@@ -0,0 +1,5 @@\n+class Feature\n+ def foo\n+ puts 'bar'\n+ end\n+end\n",
+ "new_path": "files/ruby/feature.rb",
+ "old_path": "files/ruby/feature.rb",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 26,
+ "created_at": "2016-06-14T15:02:36.421Z",
+ "updated_at": "2016-06-14T15:02:36.474Z",
+ "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
+ "real_size": "1"
+ },
+ "events": [
+ {
+ "id": 222,
+ "target_type": "MergeRequest",
+ "target_id": 26,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:36.496Z",
+ "updated_at": "2016-06-14T15:02:36.496Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 186,
+ "target_type": "MergeRequest",
+ "target_id": 26,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:36.496Z",
+ "updated_at": "2016-06-14T15:02:36.496Z",
+ "action": 1,
+ "author_id": 1
+ }
+ ]
+ },
+ {
+ "id": 15,
+ "target_branch": "test-7",
+ "source_branch": "test-1",
+ "source_project_id": 5,
+ "author_id": 22,
+ "assignee_id": 16,
+ "title": "Qui accusantium et inventore facilis doloribus occaecati officiis.",
+ "created_at": "2016-06-14T15:02:25.168Z",
+ "updated_at": "2016-06-14T15:02:59.521Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 7,
+ "description": "Et commodi deserunt aspernatur vero rerum. Ut non dolorum alias in odit est libero. Voluptatibus eos in et vitae repudiandae facilis ex mollitia.",
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 777,
+ "note": "Pariatur voluptas placeat aspernatur culpa suscipit soluta.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:59.348Z",
+ "updated_at": "2016-06-14T15:02:59.348Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 778,
+ "note": "Alias et iure mollitia suscipit molestiae voluptatum nostrum asperiores.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:59.372Z",
+ "updated_at": "2016-06-14T15:02:59.372Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 779,
+ "note": "Laudantium qui eum qui sunt.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:59.395Z",
+ "updated_at": "2016-06-14T15:02:59.395Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 780,
+ "note": "Quas rem est iusto ut delectus fugiat recusandae mollitia.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:59.418Z",
+ "updated_at": "2016-06-14T15:02:59.418Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 781,
+ "note": "Repellendus ab et qui nesciunt.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:59.444Z",
+ "updated_at": "2016-06-14T15:02:59.444Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 782,
+ "note": "Non possimus voluptatum odio qui ut.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:59.469Z",
+ "updated_at": "2016-06-14T15:02:59.469Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 783,
+ "note": "Dolores repellendus eum ducimus quam ab dolorem quia.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:59.494Z",
+ "updated_at": "2016-06-14T15:02:59.494Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 784,
+ "note": "Facilis dolorem aut corrupti id ratione occaecati.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:59.520Z",
+ "updated_at": "2016-06-14T15:02:59.520Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 15,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 15,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 15,
+ "relative_order": 0,
+ "sha": "94b8d581c48d894b86661718582fecbc5e3ed2eb",
+ "message": "fixes #10\n",
+ "authored_date": "2016-01-19T13:22:56.000+01:00",
+ "author_name": "James Lopez",
+ "author_email": "james@jameslopez.es",
+ "committed_date": "2016-01-19T13:22:56.000+01:00",
+ "committer_name": "James Lopez",
+ "committer_email": "james@jameslopez.es"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 15,
+ "relative_order": 0,
+ "utf8_diff": "--- /dev/null\n+++ b/test\n",
+ "new_path": "test",
+ "old_path": "test",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 15,
+ "created_at": "2016-06-14T15:02:25.171Z",
+ "updated_at": "2016-06-14T15:02:25.230Z",
+ "base_commit_sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
+ "real_size": "1"
+ },
+ "events": [
+ {
+ "id": 223,
+ "target_type": "MergeRequest",
+ "target_id": 15,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:25.262Z",
+ "updated_at": "2016-06-14T15:02:25.262Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 175,
+ "target_type": "MergeRequest",
+ "target_id": 15,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:25.262Z",
+ "updated_at": "2016-06-14T15:02:25.262Z",
+ "action": 1,
+ "author_id": 22
+ }
+ ]
+ },
+ {
+ "id": 14,
+ "target_branch": "fix",
+ "source_branch": "test-3",
+ "source_project_id": 5,
+ "author_id": 20,
+ "assignee_id": 20,
+ "title": "In voluptas aut sequi voluptatem ullam vel corporis illum consequatur.",
+ "created_at": "2016-06-14T15:02:24.760Z",
+ "updated_at": "2016-06-14T15:02:59.749Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 6,
+ "description": "Dicta magnam non voluptates nam dignissimos nostrum deserunt. Dolorum et suscipit iure quae doloremque. Necessitatibus saepe aut labore sed.",
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 785,
+ "note": "Atque cupiditate necessitatibus deserunt minus natus odit.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:59.559Z",
+ "updated_at": "2016-06-14T15:02:59.559Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 786,
+ "note": "Non dolorem provident mollitia nesciunt optio ex eveniet.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:59.587Z",
+ "updated_at": "2016-06-14T15:02:59.587Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 787,
+ "note": "Similique officia nemo quasi commodi accusantium quae qui.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:59.621Z",
+ "updated_at": "2016-06-14T15:02:59.621Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 788,
+ "note": "Et est et alias ad dolor qui.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:59.650Z",
+ "updated_at": "2016-06-14T15:02:59.650Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 789,
+ "note": "Numquam temporibus ratione voluptatibus aliquid.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:59.675Z",
+ "updated_at": "2016-06-14T15:02:59.675Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 790,
+ "note": "Ut ex aliquam consectetur perferendis est hic aut quia.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:59.703Z",
+ "updated_at": "2016-06-14T15:02:59.703Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 791,
+ "note": "Esse eos quam quaerat aut ut asperiores officiis.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:59.726Z",
+ "updated_at": "2016-06-14T15:02:59.726Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 792,
+ "note": "Sint facilis accusantium iure blanditiis.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:59.748Z",
+ "updated_at": "2016-06-14T15:02:59.748Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 14,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 14,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 0,
+ "sha": "ddd4ff416a931589c695eb4f5b23f844426f6928",
+ "message": "fixes #10\n",
+ "authored_date": "2016-01-19T14:14:43.000+01:00",
+ "author_name": "James Lopez",
+ "author_email": "james@jameslopez.es",
+ "committed_date": "2016-01-19T14:14:43.000+01:00",
+ "committer_name": "James Lopez",
+ "committer_email": "james@jameslopez.es"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 1,
+ "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
+ "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
+ "authored_date": "2015-12-07T12:52:12.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "marin@gitlab.com",
+ "committed_date": "2015-12-07T12:52:12.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "marin@gitlab.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 2,
+ "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
+ "message": "LFS object pointer.\n",
+ "authored_date": "2015-12-07T11:54:28.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "maxlazio@gmail.com",
+ "committed_date": "2015-12-07T11:54:28.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "maxlazio@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 3,
+ "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
+ "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
+ "authored_date": "2015-11-13T16:27:12.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T16:27:12.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 4,
+ "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
+ "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
+ "authored_date": "2015-11-13T08:50:17.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:50:17.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 5,
+ "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
+ "message": "Add GitLab SVG\n",
+ "authored_date": "2015-11-13T08:39:43.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:39:43.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 6,
+ "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
+ "authored_date": "2015-11-13T07:21:40.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T07:21:40.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 7,
+ "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
+ "message": "add spaces in whitespace file\n",
+ "authored_date": "2015-11-13T06:01:27.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:01:27.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 8,
+ "sha": "08f22f255f082689c0d7d39d19205085311542bc",
+ "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
+ "authored_date": "2015-11-13T06:00:16.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:00:16.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 9,
+ "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
+ "authored_date": "2015-11-13T05:23:14.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T05:23:14.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 10,
+ "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
+ "message": "add whitespace in empty\n",
+ "authored_date": "2015-11-13T05:08:45.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:45.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 11,
+ "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
+ "message": "add empty file\n",
+ "authored_date": "2015-11-13T05:08:04.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:04.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 12,
+ "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
+ "message": "Add ISO-8859 test file\n",
+ "authored_date": "2015-08-25T17:53:12.000+02:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@packetzoom.com",
+ "committed_date": "2015-08-25T17:53:12.000+02:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@packetzoom.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 13,
+ "sha": "e56497bb5f03a90a51293fc6d516788730953899",
+ "message": "Merge branch 'tree_helper_spec' into 'master'\n\nAdd directory structure for tree_helper spec\n\nThis directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module\n\nSee [merge request #275](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/275#note_732774)\n\nSee merge request !2\n",
+ "authored_date": "2015-01-10T22:23:29.000+01:00",
+ "author_name": "Sytse Sijbrandij",
+ "author_email": "sytse@gitlab.com",
+ "committed_date": "2015-01-10T22:23:29.000+01:00",
+ "committer_name": "Sytse Sijbrandij",
+ "committer_email": "sytse@gitlab.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 14,
+ "sha": "4cd80ccab63c82b4bad16faa5193fbd2aa06df40",
+ "message": "add directory structure for tree_helper spec\n",
+ "authored_date": "2015-01-10T21:28:18.000+01:00",
+ "author_name": "marmis85",
+ "author_email": "marmis85@gmail.com",
+ "committed_date": "2015-01-10T21:28:18.000+01:00",
+ "committer_name": "marmis85",
+ "committer_email": "marmis85@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 15,
+ "sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
+ "message": "Add submodule from gitlab.com\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T10:01:38.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T10:01:38.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 16,
+ "sha": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
+ "message": "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:57:31.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:57:31.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 17,
+ "sha": "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9",
+ "message": "More submodules\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:54:21.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:54:21.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 18,
+ "sha": "d14d6c0abdd253381df51a723d58691b2ee1ab08",
+ "message": "Remove ds_store files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:49:50.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:49:50.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 19,
+ "sha": "c1acaa58bbcbc3eafe538cb8274ba387047b69f8",
+ "message": "Ignore DS files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:48:32.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:48:32.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 0,
+ "utf8_diff": "Binary files a/.DS_Store and /dev/null differ\n",
+ "new_path": ".DS_Store",
+ "old_path": ".DS_Store",
+ "a_mode": "100644",
+ "b_mode": "0",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": true,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 1,
+ "utf8_diff": "--- a/.gitignore\n+++ b/.gitignore\n@@ -17,3 +17,4 @@ rerun.txt\n pickle-email-*.html\n .project\n config/initializers/secret_token.rb\n+.DS_Store\n",
+ "new_path": ".gitignore",
+ "old_path": ".gitignore",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 2,
+ "utf8_diff": "--- a/.gitmodules\n+++ b/.gitmodules\n@@ -1,3 +1,9 @@\n [submodule \"six\"]\n \tpath = six\n \turl = git://github.com/randx/six.git\n+[submodule \"gitlab-shell\"]\n+\tpath = gitlab-shell\n+\turl = https://github.com/gitlabhq/gitlab-shell.git\n+[submodule \"gitlab-grack\"]\n+\tpath = gitlab-grack\n+\turl = https://gitlab.com/gitlab-org/gitlab-grack.git\n",
+ "new_path": ".gitmodules",
+ "old_path": ".gitmodules",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 3,
+ "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
+ "new_path": "CHANGELOG",
+ "old_path": "CHANGELOG",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 4,
+ "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
+ "new_path": "encoding/iso8859.txt",
+ "old_path": "encoding/iso8859.txt",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 5,
+ "utf8_diff": "Binary files a/files/.DS_Store and /dev/null differ\n",
+ "new_path": "files/.DS_Store",
+ "old_path": "files/.DS_Store",
+ "a_mode": "100644",
+ "b_mode": "0",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": true,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 6,
+ "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
+ "new_path": "files/images/wm.svg",
+ "old_path": "files/images/wm.svg",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 7,
+ "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
+ "new_path": "files/lfs/lfs_object.iso",
+ "old_path": "files/lfs/lfs_object.iso",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 8,
+ "utf8_diff": "--- a/files/ruby/popen.rb\n+++ b/files/ruby/popen.rb\n@@ -6,12 +6,18 @@ module Popen\n \n def popen(cmd, path=nil)\n unless cmd.is_a?(Array)\n- raise \"System commands must be given as an array of strings\"\n+ raise RuntimeError, \"System commands must be given as an array of strings\"\n end\n \n path ||= Dir.pwd\n- vars = { \"PWD\" => path }\n- options = { chdir: path }\n+\n+ vars = {\n+ \"PWD\" => path\n+ }\n+\n+ options = {\n+ chdir: path\n+ }\n \n unless File.directory?(path)\n FileUtils.mkdir_p(path)\n@@ -19,6 +25,7 @@ module Popen\n \n @cmd_output = \"\"\n @cmd_status = 0\n+\n Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|\n @cmd_output << stdout.read\n @cmd_output << stderr.read\n",
+ "new_path": "files/ruby/popen.rb",
+ "old_path": "files/ruby/popen.rb",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 9,
+ "utf8_diff": "--- a/files/ruby/regex.rb\n+++ b/files/ruby/regex.rb\n@@ -19,14 +19,12 @@ module Gitlab\n end\n \n def archive_formats_regex\n- #|zip|tar| tar.gz | tar.bz2 |\n- /(zip|tar|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n+ /(zip|tar|7z|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n end\n \n def git_reference_regex\n # Valid git ref regex, see:\n # https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html\n-\n %r{\n (?!\n (?# doesn't begins with)\n",
+ "new_path": "files/ruby/regex.rb",
+ "old_path": "files/ruby/regex.rb",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 10,
+ "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
+ "new_path": "files/whitespace",
+ "old_path": "files/whitespace",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 11,
+ "utf8_diff": "--- /dev/null\n+++ b/foo/bar/.gitkeep\n",
+ "new_path": "foo/bar/.gitkeep",
+ "old_path": "foo/bar/.gitkeep",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 12,
+ "utf8_diff": "--- /dev/null\n+++ b/gitlab-grack\n@@ -0,0 +1 @@\n+Subproject commit 645f6c4c82fd3f5e06f67134450a570b795e55a6\n",
+ "new_path": "gitlab-grack",
+ "old_path": "gitlab-grack",
+ "a_mode": "0",
+ "b_mode": "160000",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 13,
+ "utf8_diff": "--- /dev/null\n+++ b/gitlab-shell\n@@ -0,0 +1 @@\n+Subproject commit 79bceae69cb5750d6567b223597999bfa91cb3b9\n",
+ "new_path": "gitlab-shell",
+ "old_path": "gitlab-shell",
+ "a_mode": "0",
+ "b_mode": "160000",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 14,
+ "relative_order": 14,
+ "utf8_diff": "--- /dev/null\n+++ b/test\n",
+ "new_path": "test",
+ "old_path": "test",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 14,
+ "created_at": "2016-06-14T15:02:24.770Z",
+ "updated_at": "2016-06-14T15:02:25.007Z",
+ "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
+ "real_size": "15"
+ },
+ "events": [
+ {
+ "id": 224,
+ "target_type": "MergeRequest",
+ "target_id": 14,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:25.113Z",
+ "updated_at": "2016-06-14T15:02:25.113Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 174,
+ "target_type": "MergeRequest",
+ "target_id": 14,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:25.113Z",
+ "updated_at": "2016-06-14T15:02:25.113Z",
+ "action": 1,
+ "author_id": 20
+ }
+ ]
+ },
+ {
+ "id": 13,
+ "target_branch": "improve/awesome",
+ "source_branch": "test-8",
+ "source_project_id": 5,
+ "author_id": 16,
+ "assignee_id": 25,
+ "title": "Voluptates consequatur eius nemo amet libero animi illum delectus tempore.",
+ "created_at": "2016-06-14T15:02:24.415Z",
+ "updated_at": "2016-06-14T15:02:59.958Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 5,
+ "description": "Est eaque quasi qui qui. Similique voluptatem impedit iusto ratione reprehenderit. Itaque est illum ut nulla aut.",
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 793,
+ "note": "In illum maxime aperiam nulla est aspernatur.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:02:59.782Z",
+ "updated_at": "2016-06-14T15:02:59.782Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": [
+ {
+ "merge_request_diff_id": 14,
+ "id": 529,
+ "target_type": "Note",
+ "target_id": 793,
+ "project_id": 4,
+ "created_at": "2016-07-07T14:35:12.128Z",
+ "updated_at": "2016-07-07T14:35:12.128Z",
+ "action": 6,
+ "author_id": 1
+ }
+ ]
+ },
+ {
+ "id": 794,
+ "note": "Enim quia perferendis cum distinctio tenetur optio voluptas veniam.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:02:59.807Z",
+ "updated_at": "2016-06-14T15:02:59.807Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 795,
+ "note": "Dolor ad quia quis pariatur ducimus.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:02:59.831Z",
+ "updated_at": "2016-06-14T15:02:59.831Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 796,
+ "note": "Et a odio voluptate aut.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:02:59.854Z",
+ "updated_at": "2016-06-14T15:02:59.854Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 797,
+ "note": "Quis nihil temporibus voluptatum modi minima a ut.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:02:59.879Z",
+ "updated_at": "2016-06-14T15:02:59.879Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 798,
+ "note": "Ut alias consequatur in nostrum.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:02:59.904Z",
+ "updated_at": "2016-06-14T15:02:59.904Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 799,
+ "note": "Voluptatibus aperiam assumenda et neque sint libero.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:02:59.926Z",
+ "updated_at": "2016-06-14T15:02:59.926Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 800,
+ "note": "Veritatis voluptatem dolor dolores magni quo ut ipsa fuga.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:02:59.956Z",
+ "updated_at": "2016-06-14T15:02:59.956Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 13,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 13,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 0,
+ "sha": "0bfedc29d30280c7e8564e19f654584b459e5868",
+ "message": "fixes #10\n",
+ "authored_date": "2016-01-19T15:25:23.000+01:00",
+ "author_name": "James Lopez",
+ "author_email": "james@jameslopez.es",
+ "committed_date": "2016-01-19T15:25:23.000+01:00",
+ "committer_name": "James Lopez",
+ "committer_email": "james@jameslopez.es"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 1,
+ "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
+ "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
+ "authored_date": "2015-12-07T12:52:12.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "marin@gitlab.com",
+ "committed_date": "2015-12-07T12:52:12.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "marin@gitlab.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 2,
+ "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
+ "message": "LFS object pointer.\n",
+ "authored_date": "2015-12-07T11:54:28.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "maxlazio@gmail.com",
+ "committed_date": "2015-12-07T11:54:28.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "maxlazio@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 3,
+ "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
+ "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
+ "authored_date": "2015-11-13T16:27:12.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T16:27:12.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 4,
+ "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
+ "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
+ "authored_date": "2015-11-13T08:50:17.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:50:17.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 5,
+ "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
+ "message": "Add GitLab SVG\n",
+ "authored_date": "2015-11-13T08:39:43.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:39:43.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 6,
+ "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
+ "authored_date": "2015-11-13T07:21:40.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T07:21:40.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 7,
+ "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
+ "message": "add spaces in whitespace file\n",
+ "authored_date": "2015-11-13T06:01:27.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:01:27.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 8,
+ "sha": "08f22f255f082689c0d7d39d19205085311542bc",
+ "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
+ "authored_date": "2015-11-13T06:00:16.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:00:16.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 9,
+ "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
+ "authored_date": "2015-11-13T05:23:14.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T05:23:14.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 10,
+ "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
+ "message": "add whitespace in empty\n",
+ "authored_date": "2015-11-13T05:08:45.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:45.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 11,
+ "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
+ "message": "add empty file\n",
+ "authored_date": "2015-11-13T05:08:04.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:04.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 12,
+ "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
+ "message": "Add ISO-8859 test file\n",
+ "authored_date": "2015-08-25T17:53:12.000+02:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@packetzoom.com",
+ "committed_date": "2015-08-25T17:53:12.000+02:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@packetzoom.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 13,
+ "sha": "e56497bb5f03a90a51293fc6d516788730953899",
+ "message": "Merge branch 'tree_helper_spec' into 'master'\n\nAdd directory structure for tree_helper spec\n\nThis directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module\n\nSee [merge request #275](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/275#note_732774)\n\nSee merge request !2\n",
+ "authored_date": "2015-01-10T22:23:29.000+01:00",
+ "author_name": "Sytse Sijbrandij",
+ "author_email": "sytse@gitlab.com",
+ "committed_date": "2015-01-10T22:23:29.000+01:00",
+ "committer_name": "Sytse Sijbrandij",
+ "committer_email": "sytse@gitlab.com"
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 14,
+ "sha": "4cd80ccab63c82b4bad16faa5193fbd2aa06df40",
+ "message": "add directory structure for tree_helper spec\n",
+ "authored_date": "2015-01-10T21:28:18.000+01:00",
+ "author_name": "marmis85",
+ "author_email": "marmis85@gmail.com",
+ "committed_date": "2015-01-10T21:28:18.000+01:00",
+ "committer_name": "marmis85",
+ "committer_email": "marmis85@gmail.com"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 0,
+ "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
+ "new_path": "CHANGELOG",
+ "old_path": "CHANGELOG",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 1,
+ "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
+ "new_path": "encoding/iso8859.txt",
+ "old_path": "encoding/iso8859.txt",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 2,
+ "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
+ "new_path": "files/images/wm.svg",
+ "old_path": "files/images/wm.svg",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 3,
+ "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
+ "new_path": "files/lfs/lfs_object.iso",
+ "old_path": "files/lfs/lfs_object.iso",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 4,
+ "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
+ "new_path": "files/whitespace",
+ "old_path": "files/whitespace",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 5,
+ "utf8_diff": "--- /dev/null\n+++ b/foo/bar/.gitkeep\n",
+ "new_path": "foo/bar/.gitkeep",
+ "old_path": "foo/bar/.gitkeep",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 13,
+ "relative_order": 6,
+ "utf8_diff": "--- /dev/null\n+++ b/test\n",
+ "new_path": "test",
+ "old_path": "test",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 13,
+ "created_at": "2016-06-14T15:02:24.420Z",
+ "updated_at": "2016-06-14T15:02:24.561Z",
+ "base_commit_sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
+ "real_size": "7"
+ },
+ "events": [
+ {
+ "id": 225,
+ "target_type": "MergeRequest",
+ "target_id": 13,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:24.636Z",
+ "updated_at": "2016-06-14T15:02:24.636Z",
+ "action": 1,
+ "author_id": 16
+ },
+ {
+ "id": 173,
+ "target_type": "MergeRequest",
+ "target_id": 13,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:24.636Z",
+ "updated_at": "2016-06-14T15:02:24.636Z",
+ "action": 1,
+ "author_id": 16
+ }
+ ]
+ },
+ {
+ "id": 12,
+ "target_branch": "flatten-dirs",
+ "source_branch": "test-2",
+ "source_project_id": 5,
+ "author_id": 1,
+ "assignee_id": 22,
+ "title": "In a rerum harum nihil accusamus aut quia nobis non.",
+ "created_at": "2016-06-14T15:02:24.000Z",
+ "updated_at": "2016-06-14T15:03:00.225Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 4,
+ "description": "Nam magnam odit velit rerum. Sapiente dolore sunt saepe debitis. Culpa maiores ut ad dolores dolorem et.",
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 801,
+ "note": "Nihil dicta molestias expedita atque.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:03:00.001Z",
+ "updated_at": "2016-06-14T15:03:00.001Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 802,
+ "note": "Illum culpa voluptas enim accusantium deserunt.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:03:00.034Z",
+ "updated_at": "2016-06-14T15:03:00.034Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 803,
+ "note": "Dicta esse aliquam laboriosam unde alias.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:03:00.065Z",
+ "updated_at": "2016-06-14T15:03:00.065Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 804,
+ "note": "Dicta autem et sed molestiae ut quae.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:03:00.097Z",
+ "updated_at": "2016-06-14T15:03:00.097Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 805,
+ "note": "Ut ut temporibus voluptas dolore quia velit.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:03:00.129Z",
+ "updated_at": "2016-06-14T15:03:00.129Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 806,
+ "note": "Dolores similique sint pariatur error id quia fugit aut.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:03:00.162Z",
+ "updated_at": "2016-06-14T15:03:00.162Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 807,
+ "note": "Quisquam provident nihil aperiam voluptatem.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:03:00.193Z",
+ "updated_at": "2016-06-14T15:03:00.193Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 808,
+ "note": "Similique quo vero expedita deserunt ipsam earum.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:03:00.224Z",
+ "updated_at": "2016-06-14T15:03:00.224Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 12,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 12,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 0,
+ "sha": "97a0df9696e2aebf10c31b3016f40214e0e8f243",
+ "message": "fixes #10\n",
+ "authored_date": "2016-01-19T14:08:21.000+01:00",
+ "author_name": "James Lopez",
+ "author_email": "james@jameslopez.es",
+ "committed_date": "2016-01-19T14:08:21.000+01:00",
+ "committer_name": "James Lopez",
+ "committer_email": "james@jameslopez.es"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 1,
+ "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
+ "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
+ "authored_date": "2015-12-07T12:52:12.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "marin@gitlab.com",
+ "committed_date": "2015-12-07T12:52:12.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "marin@gitlab.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 2,
+ "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
+ "message": "LFS object pointer.\n",
+ "authored_date": "2015-12-07T11:54:28.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "maxlazio@gmail.com",
+ "committed_date": "2015-12-07T11:54:28.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "maxlazio@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 3,
+ "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
+ "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
+ "authored_date": "2015-11-13T16:27:12.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T16:27:12.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 4,
+ "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
+ "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
+ "authored_date": "2015-11-13T08:50:17.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:50:17.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 5,
+ "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
+ "message": "Add GitLab SVG\n",
+ "authored_date": "2015-11-13T08:39:43.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:39:43.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 6,
+ "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
+ "authored_date": "2015-11-13T07:21:40.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T07:21:40.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 7,
+ "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
+ "message": "add spaces in whitespace file\n",
+ "authored_date": "2015-11-13T06:01:27.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:01:27.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 8,
+ "sha": "08f22f255f082689c0d7d39d19205085311542bc",
+ "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
+ "authored_date": "2015-11-13T06:00:16.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:00:16.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 9,
+ "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
+ "authored_date": "2015-11-13T05:23:14.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T05:23:14.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 10,
+ "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
+ "message": "add whitespace in empty\n",
+ "authored_date": "2015-11-13T05:08:45.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:45.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 11,
+ "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
+ "message": "add empty file\n",
+ "authored_date": "2015-11-13T05:08:04.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:04.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 12,
+ "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
+ "message": "Add ISO-8859 test file\n",
+ "authored_date": "2015-08-25T17:53:12.000+02:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@packetzoom.com",
+ "committed_date": "2015-08-25T17:53:12.000+02:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@packetzoom.com"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 0,
+ "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
+ "new_path": "CHANGELOG",
+ "old_path": "CHANGELOG",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 1,
+ "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
+ "new_path": "encoding/iso8859.txt",
+ "old_path": "encoding/iso8859.txt",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 2,
+ "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
+ "new_path": "files/images/wm.svg",
+ "old_path": "files/images/wm.svg",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 3,
+ "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
+ "new_path": "files/lfs/lfs_object.iso",
+ "old_path": "files/lfs/lfs_object.iso",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 4,
+ "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
+ "new_path": "files/whitespace",
+ "old_path": "files/whitespace",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 12,
+ "relative_order": 5,
+ "utf8_diff": "--- /dev/null\n+++ b/test\n",
+ "new_path": "test",
+ "old_path": "test",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 12,
+ "created_at": "2016-06-14T15:02:24.006Z",
+ "updated_at": "2016-06-14T15:02:24.169Z",
+ "base_commit_sha": "e56497bb5f03a90a51293fc6d516788730953899",
+ "real_size": "6"
+ },
+ "events": [
+ {
+ "id": 226,
+ "target_type": "MergeRequest",
+ "target_id": 12,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:24.253Z",
+ "updated_at": "2016-06-14T15:02:24.253Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 172,
+ "target_type": "MergeRequest",
+ "target_id": 12,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:24.253Z",
+ "updated_at": "2016-06-14T15:02:24.253Z",
+ "action": 1,
+ "author_id": 1
+ }
+ ]
+ },
+ {
+ "id": 11,
+ "target_branch": "test-15",
+ "source_branch": "'test'",
+ "source_project_id": 5,
+ "author_id": 16,
+ "assignee_id": 16,
+ "title": "Corporis provident similique perspiciatis dolores eos animi.",
+ "created_at": "2016-06-14T15:02:23.767Z",
+ "updated_at": "2016-06-14T15:03:00.475Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 3,
+ "description": "Libero nesciunt mollitia quis odit eos vero quasi. Iure voluptatem ut sint pariatur voluptates ut aut. Laborum possimus unde illum ipsum eum.",
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 809,
+ "note": "Omnis ratione laboriosam dolores qui.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:03:00.260Z",
+ "updated_at": "2016-06-14T15:03:00.260Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 810,
+ "note": "Voluptas voluptates pariatur dolores maxime est voluptas.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:03:00.290Z",
+ "updated_at": "2016-06-14T15:03:00.290Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 811,
+ "note": "Sit perspiciatis facilis ipsum consequatur.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:03:00.323Z",
+ "updated_at": "2016-06-14T15:03:00.323Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 812,
+ "note": "Ut neque aliquam nam et est.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:03:00.349Z",
+ "updated_at": "2016-06-14T15:03:00.349Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 813,
+ "note": "Et debitis rerum minima sit aut dolorem.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:03:00.374Z",
+ "updated_at": "2016-06-14T15:03:00.374Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 814,
+ "note": "Ea nisi earum fugit iste aperiam consequatur.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:03:00.397Z",
+ "updated_at": "2016-06-14T15:03:00.397Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 815,
+ "note": "Amet ratione consequatur laudantium rerum voluptas est nobis.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:03:00.450Z",
+ "updated_at": "2016-06-14T15:03:00.450Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 816,
+ "note": "Ab ducimus cumque quia dolorem vitae sint beatae rerum.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:03:00.474Z",
+ "updated_at": "2016-06-14T15:03:00.474Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 11,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 11,
+ "state": "empty",
+ "merge_request_diff_commits": [],
+ "merge_request_diff_files": [],
+ "merge_request_id": 11,
+ "created_at": "2016-06-14T15:02:23.772Z",
+ "updated_at": "2016-06-14T15:02:23.833Z",
+ "base_commit_sha": "e56497bb5f03a90a51293fc6d516788730953899",
+ "real_size": null
+ },
+ "events": [
+ {
+ "id": 227,
+ "target_type": "MergeRequest",
+ "target_id": 11,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:23.865Z",
+ "updated_at": "2016-06-14T15:02:23.865Z",
+ "action": 1,
+ "author_id": 16
+ },
+ {
+ "id": 171,
+ "target_type": "MergeRequest",
+ "target_id": 11,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:23.865Z",
+ "updated_at": "2016-06-14T15:02:23.865Z",
+ "action": 1,
+ "author_id": 16
+ }
+ ]
+ },
+ {
+ "id": 10,
+ "target_branch": "feature",
+ "source_branch": "test-5",
+ "source_project_id": 5,
+ "author_id": 20,
+ "assignee_id": 25,
+ "title": "Eligendi reprehenderit doloribus quia et sit id.",
+ "created_at": "2016-06-14T15:02:23.014Z",
+ "updated_at": "2016-06-14T15:03:00.685Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 2,
+ "description": "Ut dolor quia aliquid dolore et nisi. Est minus suscipit enim quaerat sapiente consequatur rerum. Eveniet provident consequatur dolor accusantium reiciendis.",
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 817,
+ "note": "Recusandae et voluptas enim qui et.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:03:00.510Z",
+ "updated_at": "2016-06-14T15:03:00.510Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 818,
+ "note": "Asperiores dolorem rerum ipsum totam.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:03:00.538Z",
+ "updated_at": "2016-06-14T15:03:00.538Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 819,
+ "note": "Qui quam et iure quasi provident cumque itaque sequi.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:03:00.562Z",
+ "updated_at": "2016-06-14T15:03:00.562Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 820,
+ "note": "Sint accusantium aliquid iste qui iusto minus vel.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:03:00.585Z",
+ "updated_at": "2016-06-14T15:03:00.585Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 821,
+ "note": "Dolor corrupti dolorem blanditiis voluptas.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:03:00.610Z",
+ "updated_at": "2016-06-14T15:03:00.610Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 822,
+ "note": "Est perferendis assumenda aliquam aliquid sit ipsum ullam aut.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:03:00.635Z",
+ "updated_at": "2016-06-14T15:03:00.635Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 823,
+ "note": "Hic neque reiciendis quaerat maiores.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:03:00.659Z",
+ "updated_at": "2016-06-14T15:03:00.659Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 824,
+ "note": "Sequi architecto doloribus ut vel autem.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:03:00.683Z",
+ "updated_at": "2016-06-14T15:03:00.683Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 10,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 10,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 0,
+ "sha": "f998ac87ac9244f15e9c15109a6f4e62a54b779d",
+ "message": "fixes #10\n",
+ "authored_date": "2016-01-19T14:43:23.000+01:00",
+ "author_name": "James Lopez",
+ "author_email": "james@jameslopez.es",
+ "committed_date": "2016-01-19T14:43:23.000+01:00",
+ "committer_name": "James Lopez",
+ "committer_email": "james@jameslopez.es"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 1,
+ "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
+ "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
+ "authored_date": "2015-12-07T12:52:12.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "marin@gitlab.com",
+ "committed_date": "2015-12-07T12:52:12.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "marin@gitlab.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 2,
+ "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
+ "message": "LFS object pointer.\n",
+ "authored_date": "2015-12-07T11:54:28.000+01:00",
+ "author_name": "Marin Jankovski",
+ "author_email": "maxlazio@gmail.com",
+ "committed_date": "2015-12-07T11:54:28.000+01:00",
+ "committer_name": "Marin Jankovski",
+ "committer_email": "maxlazio@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 3,
+ "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
+ "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
+ "authored_date": "2015-11-13T16:27:12.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T16:27:12.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 4,
+ "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
+ "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
+ "authored_date": "2015-11-13T08:50:17.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:50:17.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 5,
+ "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
+ "message": "Add GitLab SVG\n",
+ "authored_date": "2015-11-13T08:39:43.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T08:39:43.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 6,
+ "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
+ "authored_date": "2015-11-13T07:21:40.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T07:21:40.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 7,
+ "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
+ "message": "add spaces in whitespace file\n",
+ "authored_date": "2015-11-13T06:01:27.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:01:27.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 8,
+ "sha": "08f22f255f082689c0d7d39d19205085311542bc",
+ "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
+ "authored_date": "2015-11-13T06:00:16.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T06:00:16.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 9,
+ "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
+ "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
+ "authored_date": "2015-11-13T05:23:14.000+01:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@gmail.com",
+ "committed_date": "2015-11-13T05:23:14.000+01:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 10,
+ "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
+ "message": "add whitespace in empty\n",
+ "authored_date": "2015-11-13T05:08:45.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:45.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 11,
+ "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
+ "message": "add empty file\n",
+ "authored_date": "2015-11-13T05:08:04.000+01:00",
+ "author_name": "윤민ì‹",
+ "author_email": "minsik.yoon@samsung.com",
+ "committed_date": "2015-11-13T05:08:04.000+01:00",
+ "committer_name": "윤민ì‹",
+ "committer_email": "minsik.yoon@samsung.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 12,
+ "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
+ "message": "Add ISO-8859 test file\n",
+ "authored_date": "2015-08-25T17:53:12.000+02:00",
+ "author_name": "Stan Hu",
+ "author_email": "stanhu@packetzoom.com",
+ "committed_date": "2015-08-25T17:53:12.000+02:00",
+ "committer_name": "Stan Hu",
+ "committer_email": "stanhu@packetzoom.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 13,
+ "sha": "e56497bb5f03a90a51293fc6d516788730953899",
+ "message": "Merge branch 'tree_helper_spec' into 'master'\n\nAdd directory structure for tree_helper spec\n\nThis directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module\n\nSee [merge request #275](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/275#note_732774)\n\nSee merge request !2\n",
+ "authored_date": "2015-01-10T22:23:29.000+01:00",
+ "author_name": "Sytse Sijbrandij",
+ "author_email": "sytse@gitlab.com",
+ "committed_date": "2015-01-10T22:23:29.000+01:00",
+ "committer_name": "Sytse Sijbrandij",
+ "committer_email": "sytse@gitlab.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 14,
+ "sha": "4cd80ccab63c82b4bad16faa5193fbd2aa06df40",
+ "message": "add directory structure for tree_helper spec\n",
+ "authored_date": "2015-01-10T21:28:18.000+01:00",
+ "author_name": "marmis85",
+ "author_email": "marmis85@gmail.com",
+ "committed_date": "2015-01-10T21:28:18.000+01:00",
+ "committer_name": "marmis85",
+ "committer_email": "marmis85@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 16,
+ "sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
+ "message": "Add submodule from gitlab.com\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T10:01:38.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T10:01:38.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 17,
+ "sha": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
+ "message": "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:57:31.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:57:31.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 18,
+ "sha": "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9",
+ "message": "More submodules\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:54:21.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:54:21.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 19,
+ "sha": "d14d6c0abdd253381df51a723d58691b2ee1ab08",
+ "message": "Remove ds_store files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:49:50.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:49:50.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 20,
+ "sha": "c1acaa58bbcbc3eafe538cb8274ba387047b69f8",
+ "message": "Ignore DS files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
+ "authored_date": "2014-02-27T09:48:32.000+01:00",
+ "author_name": "Dmitriy Zaporozhets",
+ "author_email": "dmitriy.zaporozhets@gmail.com",
+ "committed_date": "2014-02-27T09:48:32.000+01:00",
+ "committer_name": "Dmitriy Zaporozhets",
+ "committer_email": "dmitriy.zaporozhets@gmail.com"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 0,
+ "utf8_diff": "Binary files a/.DS_Store and /dev/null differ\n",
+ "new_path": ".DS_Store",
+ "old_path": ".DS_Store",
+ "a_mode": "100644",
+ "b_mode": "0",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": true,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 1,
+ "utf8_diff": "--- a/.gitignore\n+++ b/.gitignore\n@@ -17,3 +17,4 @@ rerun.txt\n pickle-email-*.html\n .project\n config/initializers/secret_token.rb\n+.DS_Store\n",
+ "new_path": ".gitignore",
+ "old_path": ".gitignore",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 2,
+ "utf8_diff": "--- a/.gitmodules\n+++ b/.gitmodules\n@@ -1,3 +1,9 @@\n [submodule \"six\"]\n \tpath = six\n \turl = git://github.com/randx/six.git\n+[submodule \"gitlab-shell\"]\n+\tpath = gitlab-shell\n+\turl = https://github.com/gitlabhq/gitlab-shell.git\n+[submodule \"gitlab-grack\"]\n+\tpath = gitlab-grack\n+\turl = https://gitlab.com/gitlab-org/gitlab-grack.git\n",
+ "new_path": ".gitmodules",
+ "old_path": ".gitmodules",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 3,
+ "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
+ "new_path": "CHANGELOG",
+ "old_path": "CHANGELOG",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 4,
+ "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
+ "new_path": "encoding/iso8859.txt",
+ "old_path": "encoding/iso8859.txt",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 5,
+ "utf8_diff": "Binary files a/files/.DS_Store and /dev/null differ\n",
+ "new_path": "files/.DS_Store",
+ "old_path": "files/.DS_Store",
+ "a_mode": "100644",
+ "b_mode": "0",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": true,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 6,
+ "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
+ "new_path": "files/images/wm.svg",
+ "old_path": "files/images/wm.svg",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 7,
+ "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
+ "new_path": "files/lfs/lfs_object.iso",
+ "old_path": "files/lfs/lfs_object.iso",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 8,
+ "utf8_diff": "--- a/files/ruby/popen.rb\n+++ b/files/ruby/popen.rb\n@@ -6,12 +6,18 @@ module Popen\n \n def popen(cmd, path=nil)\n unless cmd.is_a?(Array)\n- raise \"System commands must be given as an array of strings\"\n+ raise RuntimeError, \"System commands must be given as an array of strings\"\n end\n \n path ||= Dir.pwd\n- vars = { \"PWD\" => path }\n- options = { chdir: path }\n+\n+ vars = {\n+ \"PWD\" => path\n+ }\n+\n+ options = {\n+ chdir: path\n+ }\n \n unless File.directory?(path)\n FileUtils.mkdir_p(path)\n@@ -19,6 +25,7 @@ module Popen\n \n @cmd_output = \"\"\n @cmd_status = 0\n+\n Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|\n @cmd_output << stdout.read\n @cmd_output << stderr.read\n",
+ "new_path": "files/ruby/popen.rb",
+ "old_path": "files/ruby/popen.rb",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 9,
+ "utf8_diff": "--- a/files/ruby/regex.rb\n+++ b/files/ruby/regex.rb\n@@ -19,14 +19,12 @@ module Gitlab\n end\n \n def archive_formats_regex\n- #|zip|tar| tar.gz | tar.bz2 |\n- /(zip|tar|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n+ /(zip|tar|7z|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n end\n \n def git_reference_regex\n # Valid git ref regex, see:\n # https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html\n-\n %r{\n (?!\n (?# doesn't begins with)\n",
+ "new_path": "files/ruby/regex.rb",
+ "old_path": "files/ruby/regex.rb",
+ "a_mode": "100644",
+ "b_mode": "100644",
+ "new_file": false,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 10,
+ "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
+ "new_path": "files/whitespace",
+ "old_path": "files/whitespace",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 11,
+ "utf8_diff": "--- /dev/null\n+++ b/foo/bar/.gitkeep\n",
+ "new_path": "foo/bar/.gitkeep",
+ "old_path": "foo/bar/.gitkeep",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 12,
+ "utf8_diff": "--- /dev/null\n+++ b/gitlab-grack\n@@ -0,0 +1 @@\n+Subproject commit 645f6c4c82fd3f5e06f67134450a570b795e55a6\n",
+ "new_path": "gitlab-grack",
+ "old_path": "gitlab-grack",
+ "a_mode": "0",
+ "b_mode": "160000",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 13,
+ "utf8_diff": "--- /dev/null\n+++ b/gitlab-shell\n@@ -0,0 +1 @@\n+Subproject commit 79bceae69cb5750d6567b223597999bfa91cb3b9\n",
+ "new_path": "gitlab-shell",
+ "old_path": "gitlab-shell",
+ "a_mode": "0",
+ "b_mode": "160000",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ },
+ {
+ "merge_request_diff_id": 10,
+ "relative_order": 14,
+ "utf8_diff": "--- /dev/null\n+++ b/test\n",
+ "new_path": "test",
+ "old_path": "test",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 10,
+ "created_at": "2016-06-14T15:02:23.019Z",
+ "updated_at": "2016-06-14T15:02:23.493Z",
+ "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
+ "real_size": "15"
+ },
+ "events": [
+ {
+ "id": 228,
+ "target_type": "MergeRequest",
+ "target_id": 10,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:23.660Z",
+ "updated_at": "2016-06-14T15:02:23.660Z",
+ "action": 1,
+ "author_id": 1
+ },
+ {
+ "id": 170,
+ "target_type": "MergeRequest",
+ "target_id": 10,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:23.660Z",
+ "updated_at": "2016-06-14T15:02:23.660Z",
+ "action": 1,
+ "author_id": 20
+ }
+ ]
+ },
+ {
+ "id": 9,
+ "target_branch": "test-6",
+ "source_branch": "test-12",
+ "source_project_id": 5,
+ "author_id": 16,
+ "assignee_id": 6,
+ "title": "Et ipsam voluptas velit sequi illum ut.",
+ "created_at": "2016-06-14T15:02:22.825Z",
+ "updated_at": "2016-06-14T15:03:00.904Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 1,
+ "description": "Eveniet nihil ratione veniam similique qui aut sapiente tempora. Sed praesentium iusto dignissimos possimus id repudiandae quo nihil. Qui doloremque autem et iure fugit.",
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "merge_params": {
+ "force_remove_source_branch": null
+ },
+ "merge_when_pipeline_succeeds": false,
+ "merge_user_id": null,
+ "merge_commit_sha": null,
+ "notes": [
+ {
+ "id": 825,
+ "note": "Aliquid voluptatem consequatur voluptas ex perspiciatis.",
+ "noteable_type": "MergeRequest",
+ "author_id": 26,
+ "created_at": "2016-06-14T15:03:00.722Z",
+ "updated_at": "2016-06-14T15:03:00.722Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 4"
+ },
+ "events": []
+ },
+ {
+ "id": 826,
+ "note": "Itaque optio voluptatem praesentium voluptas.",
+ "noteable_type": "MergeRequest",
+ "author_id": 25,
+ "created_at": "2016-06-14T15:03:00.745Z",
+ "updated_at": "2016-06-14T15:03:00.745Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 3"
+ },
+ "events": []
+ },
+ {
+ "id": 827,
+ "note": "Ut est corporis fuga asperiores delectus excepturi aperiam.",
+ "noteable_type": "MergeRequest",
+ "author_id": 22,
+ "created_at": "2016-06-14T15:03:00.771Z",
+ "updated_at": "2016-06-14T15:03:00.771Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "User 0"
+ },
+ "events": []
+ },
+ {
+ "id": 828,
+ "note": "Similique ea dolore officiis temporibus.",
+ "noteable_type": "MergeRequest",
+ "author_id": 20,
+ "created_at": "2016-06-14T15:03:00.798Z",
+ "updated_at": "2016-06-14T15:03:00.798Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ottis Schuster II"
+ },
+ "events": []
+ },
+ {
+ "id": 829,
+ "note": "Qui laudantium qui quae quis.",
+ "noteable_type": "MergeRequest",
+ "author_id": 16,
+ "created_at": "2016-06-14T15:03:00.828Z",
+ "updated_at": "2016-06-14T15:03:00.828Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Rhett Emmerich IV"
+ },
+ "events": []
+ },
+ {
+ "id": 830,
+ "note": "Et vel voluptas amet laborum qui soluta.",
+ "noteable_type": "MergeRequest",
+ "author_id": 15,
+ "created_at": "2016-06-14T15:03:00.850Z",
+ "updated_at": "2016-06-14T15:03:00.850Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Burdette Bernier"
+ },
+ "events": []
+ },
+ {
+ "id": 831,
+ "note": "Enim ad consequuntur assumenda provident voluptatem similique deleniti.",
+ "noteable_type": "MergeRequest",
+ "author_id": 6,
+ "created_at": "2016-06-14T15:03:00.876Z",
+ "updated_at": "2016-06-14T15:03:00.876Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Ari Wintheiser"
+ },
+ "events": []
+ },
+ {
+ "id": 832,
+ "note": "Officiis sequi commodi pariatur totam fugiat voluptas corporis dignissimos.",
+ "noteable_type": "MergeRequest",
+ "author_id": 1,
+ "created_at": "2016-06-14T15:03:00.902Z",
+ "updated_at": "2016-06-14T15:03:00.902Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": null,
+ "noteable_id": 9,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ },
+ "events": []
+ }
+ ],
+ "merge_request_diff": {
+ "id": 9,
+ "state": "collected",
+ "merge_request_diff_commits": [
+ {
+ "merge_request_diff_id": 9,
+ "relative_order": 0,
+ "sha": "a4e5dfebf42e34596526acb8611bc7ed80e4eb3f",
+ "message": "fixes #10\n",
+ "authored_date": "2016-01-19T15:44:02.000+01:00",
+ "author_name": "James Lopez",
+ "author_email": "james@jameslopez.es",
+ "committed_date": "2016-01-19T15:44:02.000+01:00",
+ "committer_name": "James Lopez",
+ "committer_email": "james@jameslopez.es"
+ }
+ ],
+ "merge_request_diff_files": [
+ {
+ "merge_request_diff_id": 9,
+ "relative_order": 0,
+ "utf8_diff": "--- /dev/null\n+++ b/test\n",
+ "new_path": "test",
+ "old_path": "test",
+ "a_mode": "0",
+ "b_mode": "100644",
+ "new_file": true,
+ "renamed_file": false,
+ "deleted_file": false,
+ "too_large": false
+ }
+ ],
+ "merge_request_id": 9,
+ "created_at": "2016-06-14T15:02:22.829Z",
+ "updated_at": "2016-06-14T15:02:22.900Z",
+ "base_commit_sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
+ "real_size": "1"
+ },
+ "events": [
+ {
+ "id": 229,
+ "target_type": "MergeRequest",
+ "target_id": 9,
+ "project_id": 36,
+ "created_at": "2016-06-14T15:02:22.927Z",
+ "updated_at": "2016-06-14T15:02:22.927Z",
+ "action": 1,
+ "author_id": 16
+ },
+ {
+ "id": 169,
+ "target_type": "MergeRequest",
+ "target_id": 9,
+ "project_id": 5,
+ "created_at": "2016-06-14T15:02:22.927Z",
+ "updated_at": "2016-06-14T15:02:22.927Z",
+ "action": 1,
+ "author_id": 16
+ }
+ ]
+ }
+ ],
+ "pipelines": [
+ {
+ "id": 36,
+ "project_id": 5,
+ "ref": null,
+ "sha": "sha-notes",
+ "before_sha": null,
+ "push_data": null,
+ "created_at": "2016-03-22T15:20:35.755Z",
+ "updated_at": "2016-03-22T15:20:35.755Z",
+ "tag": null,
+ "yaml_errors": null,
+ "committed_at": null,
+ "status": "failed",
+ "started_at": null,
+ "finished_at": null,
+ "user_id": 9999,
+ "duration": null,
+ "source": "push",
+ "merge_request_id": null,
+ "notes": [
+ {
+ "id": 999,
+ "note": "Natus rerum qui dolorem dolorum voluptas.",
+ "noteable_type": "Commit",
+ "author_id": 1,
+ "created_at": "2016-03-22T15:19:59.469Z",
+ "updated_at": "2016-03-22T15:19:59.469Z",
+ "project_id": 5,
+ "attachment": {
+ "url": null
+ },
+ "line_code": null,
+ "commit_id": "be93687618e4b132087f430a4d8fc3a609c9b77c",
+ "noteable_id": 36,
+ "system": false,
+ "st_diff": null,
+ "updated_by_id": null,
+ "author": {
+ "name": "Administrator"
+ }
+ }
+ ],
+ "stages": [
+ {
+ "id": 11,
+ "project_id": 5,
+ "pipeline_id": 36,
+ "name": "test",
+ "status": 1,
+ "created_at": "2016-03-22T15:44:44.772Z",
+ "updated_at": "2016-03-29T06:44:44.634Z",
+ "statuses": [
+ {
+ "id": 71,
+ "project_id": 5,
+ "status": "failed",
+ "finished_at": "2016-03-29T06:28:12.630Z",
+ "trace": null,
+ "created_at": "2016-03-22T15:20:35.772Z",
+ "updated_at": "2016-03-29T06:28:12.634Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 36,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 1",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "stage_id": 11,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null,
+ "type": "Ci::Build",
+ "token": "abcd",
+ "artifacts_file_store": 1,
+ "artifacts_metadata_store": 1,
+ "artifacts_size": 10
+ },
+ {
+ "id": 72,
+ "project_id": 5,
+ "status": "success",
+ "finished_at": null,
+ "trace": "Porro ea qui ut dolores. Labore ab nemo explicabo aspernatur quis voluptates corporis. Et quasi delectus est sit aperiam perspiciatis asperiores. Repudiandae cum aut consectetur accusantium officia sunt.\n\nQuidem dolore iusto quaerat ut aut inventore et molestiae. Libero voluptates atque nemo qui. Nulla temporibus ipsa similique facere.\n\nAliquam ipsam perferendis qui fugit accusantium omnis id voluptatum. Dignissimos aliquid dicta eos voluptatem assumenda quia. Sed autem natus unde dolor et non nisi et. Consequuntur nihil consequatur rerum est.\n\nSimilique neque est iste ducimus qui fuga cupiditate. Libero autem est aut fuga. Consectetur natus quis non ducimus ut dolore. Magni voluptatibus eius et maxime aut.\n\nAd officiis tempore voluptate vitae corrupti explicabo labore est. Consequatur expedita et sunt nihil aut. Deleniti porro iusto molestiae et beatae.\n\nDeleniti modi nulla qui et labore sequi corrupti. Qui voluptatem assumenda eum cupiditate et. Nesciunt ipsam ut ea possimus eum. Consectetur quidem suscipit atque dolore itaque voluptatibus et cupiditate.",
+ "created_at": "2016-03-22T15:20:35.777Z",
+ "updated_at": "2016-03-22T15:20:35.777Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 36,
+ "commands": "$ deploy command",
+ "job_id": null,
+ "name": "test build 2",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "deploy",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "stage_id": 12,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ }
+ ]
+ },
+ {
+ "id": 12,
+ "project_id": 5,
+ "pipeline_id": 36,
+ "name": "deploy",
+ "status": 2,
+ "created_at": "2016-03-22T15:45:45.772Z",
+ "updated_at": "2016-03-29T06:45:45.634Z"
+ }
+ ]
+ },
+ {
+ "id": 37,
+ "project_id": 5,
+ "ref": "master",
+ "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
+ "before_sha": null,
+ "push_data": null,
+ "created_at": "2016-03-22T15:20:35.757Z",
+ "updated_at": "2016-03-22T15:20:35.757Z",
+ "tag": false,
+ "yaml_errors": null,
+ "committed_at": null,
+ "status": "failed",
+ "started_at": null,
+ "finished_at": null,
+ "duration": null,
+ "source": "merge_request_event",
+ "merge_request_id": 27,
+ "stages": [
+ {
+ "id": 21,
+ "project_id": 5,
+ "pipeline_id": 37,
+ "name": "test",
+ "status": 1,
+ "created_at": "2016-03-22T15:44:44.772Z",
+ "updated_at": "2016-03-29T06:44:44.634Z",
+ "statuses": [
+ {
+ "id": 74,
+ "project_id": 5,
+ "status": "success",
+ "finished_at": null,
+ "trace": "Ad ut quod repudiandae iste dolor doloribus. Adipisci consequuntur deserunt omnis quasi eveniet et sed fugit. Aut nemo omnis molestiae impedit ex consequatur ducimus. Voluptatum exercitationem quia aut est et hic dolorem.\n\nQuasi repellendus et eaque magni eum facilis. Dolorem aperiam nam nihil pariatur praesentium ad aliquam. Commodi enim et eos tenetur. Odio voluptatibus laboriosam mollitia rerum exercitationem magnam consequuntur. Tenetur ea vel eum corporis.\n\nVoluptatibus optio in aliquid est voluptates. Ad a ut ab placeat vero blanditiis. Earum aspernatur quia beatae expedita voluptatem dignissimos provident. Quis minima id nemo ut aut est veritatis provident.\n\nRerum voluptatem quidem eius maiores magnam veniam. Voluptatem aperiam aut voluptate et nulla deserunt voluptas. Quaerat aut accusantium laborum est dolorem architecto reiciendis. Aliquam asperiores doloribus omnis maxime enim nesciunt. Eum aut rerum repellendus debitis et ut eius.\n\nQuaerat assumenda ea sit consequatur autem in. Cum eligendi voluptatem quo sed. Ut fuga iusto cupiditate autem sint.\n\nOfficia totam officiis architecto corporis molestiae amet ut. Tempora sed dolorum rerum omnis voluptatem accusantium sit eum. Quia debitis ipsum quidem aliquam inventore sunt consequatur qui.",
+ "created_at": "2016-03-22T15:20:35.846Z",
+ "updated_at": "2016-03-22T15:20:35.846Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 37,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 2",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ },
+ {
+ "id": 73,
+ "project_id": 5,
+ "status": "canceled",
+ "finished_at": null,
+ "trace": null,
+ "created_at": "2016-03-22T15:20:35.842Z",
+ "updated_at": "2016-03-22T15:20:35.842Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 37,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 1",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ }
+ ]
+ }
+ ],
+ "merge_request": {
+ "id": 27,
+ "target_branch": "feature",
+ "source_branch": "feature_conflict",
+ "source_project_id": 999,
+ "author_id": 1,
+ "assignee_id": null,
+ "title": "MR1",
+ "created_at": "2016-06-14T15:02:36.568Z",
+ "updated_at": "2016-06-14T15:02:56.815Z",
+ "state": "opened",
+ "merge_status": "unchecked",
+ "target_project_id": 5,
+ "iid": 9,
+ "description": null,
+ "position": 0,
+ "updated_by_id": null,
+ "merge_error": null,
+ "diff_head_sha": "HEAD",
+ "source_branch_sha": "ABCD",
+ "target_branch_sha": "DCBA",
+ "merge_params": {
+ "force_remove_source_branch": null
+ }
+ }
+ },
+ {
+ "id": 38,
+ "iid": 1,
+ "project_id": 5,
+ "ref": "master",
+ "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
+ "before_sha": null,
+ "push_data": null,
+ "created_at": "2016-03-22T15:20:35.759Z",
+ "updated_at": "2016-03-22T15:20:35.759Z",
+ "tag": null,
+ "yaml_errors": null,
+ "committed_at": null,
+ "status": "failed",
+ "started_at": null,
+ "finished_at": null,
+ "duration": null,
+ "stages": [
+ {
+ "id": 22,
+ "project_id": 5,
+ "pipeline_id": 38,
+ "name": "test",
+ "status": 1,
+ "created_at": "2016-03-22T15:44:44.772Z",
+ "updated_at": "2016-03-29T06:44:44.634Z",
+ "statuses": [
+ {
+ "id": 76,
+ "project_id": 5,
+ "status": "success",
+ "finished_at": null,
+ "trace": "Et rerum quia ea cumque ut modi non. Libero eaque ipsam architecto maiores expedita deleniti. Ratione quia qui est id.\n\nQuod sit officiis sed unde inventore veniam quisquam velit. Ea harum cum quibusdam quisquam minima quo possimus non. Temporibus itaque aliquam aut rerum veritatis at.\n\nMagnam ipsum eius recusandae qui quis sit maiores eum. Et animi iusto aut itaque. Doloribus harum deleniti nobis accusantium et libero.\n\nRerum fuga perferendis magni commodi officiis id repudiandae. Consequatur ratione consequatur suscipit facilis sunt iure est dicta. Qui unde quasi facilis et quae nesciunt. Magnam iste et nobis officiis tenetur. Aspernatur quo et temporibus non in.\n\nNisi rerum velit est ad enim sint molestiae consequuntur. Quaerat nisi nesciunt quasi officiis. Possimus non blanditiis laborum quos.\n\nRerum laudantium facere animi qui. Ipsa est iusto magnam nihil. Enim omnis occaecati non dignissimos ut recusandae eum quasi. Qui maxime dolor et nemo voluptates incidunt quia.",
+ "created_at": "2016-03-22T15:20:35.882Z",
+ "updated_at": "2016-03-22T15:20:35.882Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 38,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 2",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ },
+ {
+ "id": 75,
+ "project_id": 5,
+ "status": "failed",
+ "finished_at": null,
+ "trace": "Sed et iste recusandae dicta corporis. Sunt alias porro fugit sunt. Fugiat omnis nihil dignissimos aperiam explicabo doloremque sit aut. Harum fugit expedita quia rerum ut consequatur laboriosam aliquam.\n\nNatus libero ut ut tenetur earum. Tempora omnis autem omnis et libero dolores illum autem. Deleniti eos sunt mollitia ipsam. Cum dolor repellendus dolorum sequi officia. Ullam sunt in aut pariatur excepturi.\n\nDolor nihil debitis et est eos. Cumque eos eum saepe ducimus autem. Alias architecto consequatur aut pariatur possimus. Aut quos aut incidunt quam velit et. Quas voluptatum ad dolorum dignissimos.\n\nUt voluptates consectetur illo et. Est commodi accusantium vel quo. Eos qui fugiat soluta porro.\n\nRatione possimus alias vel maxime sint totam est repellat. Ipsum corporis eos sint voluptatem eos odit. Temporibus libero nulla harum eligendi labore similique ratione magnam. Suscipit sequi in omnis neque.\n\nLaudantium dolor amet omnis placeat mollitia aut molestiae. Aut rerum similique ipsum quod illo quas unde. Sunt aut veritatis eos omnis porro. Rem veritatis mollitia praesentium dolorem. Consequatur sequi ad cumque earum omnis quia necessitatibus.",
+ "created_at": "2016-03-22T15:20:35.864Z",
+ "updated_at": "2016-03-22T15:20:35.864Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 38,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 1",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": 39,
+ "project_id": 5,
+ "ref": "master",
+ "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
+ "before_sha": null,
+ "push_data": null,
+ "created_at": "2016-03-22T15:20:35.761Z",
+ "updated_at": "2016-03-22T15:20:35.761Z",
+ "tag": null,
+ "yaml_errors": null,
+ "committed_at": null,
+ "status": "failed",
+ "started_at": null,
+ "finished_at": null,
+ "duration": null,
+ "stages": [
+ {
+ "id": 23,
+ "project_id": 5,
+ "pipeline_id": 39,
+ "name": "test",
+ "status": 1,
+ "created_at": "2016-03-22T15:44:44.772Z",
+ "updated_at": "2016-03-29T06:44:44.634Z",
+ "statuses": [
+ {
+ "id": 78,
+ "project_id": 5,
+ "status": "success",
+ "finished_at": null,
+ "trace": "Dolorem deserunt quas quia error hic quo cum vel. Natus voluptatem cumque expedita numquam odit. Eos expedita nostrum corporis consequatur est recusandae.\n\nCulpa blanditiis rerum repudiandae alias voluptatem. Velit iusto est ullam consequatur doloribus porro. Corporis voluptas consectetur est veniam et quia quae.\n\nEt aut magni fuga nesciunt officiis molestias. Quaerat et nam necessitatibus qui rerum. Architecto quia officiis voluptatem laborum est recusandae. Quasi ducimus soluta odit necessitatibus labore numquam dignissimos. Quia facere sint temporibus inventore sunt nihil saepe dolorum.\n\nFacere dolores quis dolores a. Est minus nostrum nihil harum. Earum laborum et ipsum unde neque sit nemo. Corrupti est consequatur minima fugit. Illum voluptatem illo error ducimus officia qui debitis.\n\nDignissimos porro a autem harum aut. Aut id reprehenderit et exercitationem. Est et quisquam ipsa temporibus molestiae. Architecto natus dolore qui fugiat incidunt. Autem odit veniam excepturi et voluptatibus culpa ipsum eos.\n\nAmet quo quisquam dignissimos soluta modi dolores. Sint omnis eius optio corporis dolor. Eligendi animi porro quia placeat ut.",
+ "created_at": "2016-03-22T15:20:35.927Z",
+ "updated_at": "2016-03-22T15:20:35.927Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 39,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 2",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ },
+ {
+ "id": 77,
+ "project_id": 5,
+ "status": "failed",
+ "finished_at": null,
+ "trace": "Rerum ut et suscipit est perspiciatis. Inventore debitis cum eius vitae. Ex incidunt id velit aut quo nisi. Laboriosam repellat deserunt eius reiciendis architecto et. Est harum quos nesciunt nisi consectetur.\n\nAlias esse omnis sint officia est consequatur in nobis. Dignissimos dolorum vel eligendi nesciunt dolores sit. Veniam mollitia ducimus et exercitationem molestiae libero sed. Atque omnis debitis laudantium voluptatibus qui. Repellendus tempore est commodi pariatur.\n\nExpedita voluptate illum est alias non. Modi nesciunt ab assumenda laborum nulla consequatur molestias doloremque. Magnam quod officia vel explicabo accusamus ut voluptatem incidunt. Rerum ut aliquid ullam saepe. Est eligendi debitis beatae blanditiis reiciendis.\n\nQui fuga sit dolores libero maiores et suscipit. Consectetur asperiores omnis minima impedit eos fugiat. Similique omnis nisi sed vero inventore ipsum aliquam exercitationem.\n\nBlanditiis magni iure dolorum omnis ratione delectus molestiae. Atque officia dolor voluptatem culpa quod. Incidunt suscipit quidem possimus veritatis non vel. Iusto aliquid et id quia quasi.\n\nVel facere velit blanditiis incidunt cupiditate sed maiores consequuntur. Quasi quia dicta consequuntur et quia voluptatem iste id. Incidunt et rerum fuga esse sint.",
+ "created_at": "2016-03-22T15:20:35.905Z",
+ "updated_at": "2016-03-22T15:20:35.905Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 39,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 1",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": 40,
+ "project_id": 5,
+ "ref": "master",
+ "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
+ "before_sha": null,
+ "push_data": null,
+ "created_at": "2016-03-22T15:20:35.763Z",
+ "updated_at": "2016-03-22T15:20:35.763Z",
+ "tag": null,
+ "yaml_errors": null,
+ "committed_at": null,
+ "status": "failed",
+ "started_at": null,
+ "finished_at": null,
+ "duration": null,
+ "stages": [
+ {
+ "id": 24,
+ "project_id": 5,
+ "pipeline_id": 40,
+ "name": "test",
+ "status": 1,
+ "created_at": "2016-03-22T15:44:44.772Z",
+ "updated_at": "2016-03-29T06:44:44.634Z",
+ "statuses": [
+ {
+ "id": 79,
+ "project_id": 5,
+ "status": "failed",
+ "finished_at": "2016-03-29T06:28:12.695Z",
+ "trace": "Sed culpa est et facere saepe vel id ab. Quas temporibus aut similique dolorem consequatur corporis aut praesentium. Cum officia molestiae sit earum excepturi.\n\nSint possimus aut ratione quia. Quis nesciunt ratione itaque illo. Tenetur est dolor assumenda possimus voluptatem quia minima. Accusamus reprehenderit ut et itaque non reiciendis incidunt.\n\nRerum suscipit quibusdam dolore nam omnis. Consequatur ipsa nihil ut enim blanditiis delectus. Nulla quis hic occaecati mollitia qui placeat. Quo rerum sed perferendis a accusantium consequatur commodi ut. Sit quae et cumque vel eius tempora nostrum.\n\nUllam dolorem et itaque sint est. Ea molestias quia provident dolorem vitae error et et. Ea expedita officiis iste non. Qui vitae odit saepe illum. Dolores enim ratione deserunt tempore expedita amet non neque.\n\nEligendi asperiores voluptatibus omnis repudiandae expedita distinctio qui aliquid. Autem aut doloremque distinctio ab. Nostrum sapiente repudiandae aspernatur ea et quae voluptas. Officiis perspiciatis nisi laudantium asperiores error eligendi ab. Eius quia amet magni omnis exercitationem voluptatum et.\n\nVoluptatem ullam labore quas dicta est ex voluptas. Pariatur ea modi voluptas consequatur dolores perspiciatis similique. Numquam in distinctio perspiciatis ut qui earum. Quidem omnis mollitia facere aut beatae. Ea est iure et voluptatem.",
+ "created_at": "2016-03-22T15:20:35.950Z",
+ "updated_at": "2016-03-29T06:28:12.696Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 40,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 1",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ },
+ {
+ "id": 80,
+ "project_id": 5,
+ "status": "success",
+ "finished_at": null,
+ "trace": "Impedit et optio nemo ipsa. Non ad non quis ut sequi laudantium omnis velit. Corporis a enim illo eos. Quia totam tempore inventore ad est.\n\nNihil recusandae cupiditate eaque voluptatem molestias sint. Consequatur id voluptatem cupiditate harum. Consequuntur iusto quaerat reiciendis aut autem libero est. Quisquam dolores veritatis rerum et sint maxime ullam libero. Id quas porro ut perspiciatis rem amet vitae.\n\nNemo inventore minus blanditiis magnam. Modi consequuntur nostrum aut voluptatem ex. Sunt rerum rem optio mollitia qui aliquam officiis officia. Aliquid eos et id aut minus beatae reiciendis.\n\nDolores non in temporibus dicta. Fugiat voluptatem est aspernatur expedita voluptatum nam qui. Quia et eligendi sit quae sint tempore exercitationem eos. Est sapiente corrupti quidem at. Qui magni odio repudiandae saepe tenetur optio dolore.\n\nEos placeat soluta at dolorem adipisci provident. Quo commodi id reprehenderit possimus quo tenetur. Ipsum et quae eligendi laborum. Et qui nesciunt at quasi quidem voluptatem cum rerum. Excepturi non facilis aut sunt vero sed.\n\nQui explicabo ratione ut eligendi recusandae. Quis quasi quas molestiae consequatur voluptatem et voluptatem. Ex repellat saepe occaecati aperiam ea eveniet dignissimos facilis.",
+ "created_at": "2016-03-22T15:20:35.966Z",
+ "updated_at": "2016-03-22T15:20:35.966Z",
+ "started_at": null,
+ "runner_id": null,
+ "coverage": null,
+ "commit_id": 40,
+ "commands": "$ build command",
+ "job_id": null,
+ "name": "test build 2",
+ "deploy": false,
+ "options": null,
+ "allow_failure": false,
+ "stage": "test",
+ "trigger_request_id": null,
+ "stage_idx": 1,
+ "tag": null,
+ "ref": "master",
+ "user_id": null,
+ "target_url": null,
+ "description": null,
+ "erased_by_id": null,
+ "erased_at": null
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "triggers": [
+ {
+ "id": 123,
+ "token": "cdbfasdf44a5958c83654733449e585",
+ "project_id": 5,
+ "owner_id": 1,
+ "created_at": "2017-01-16T15:25:28.637Z",
+ "updated_at": "2017-01-16T15:25:28.637Z"
+ },
+ {
+ "id": 456,
+ "token": "33a66349b5ad01fc00174af87804e40",
+ "project_id": 5,
+ "created_at": "2017-01-16T15:25:29.637Z",
+ "updated_at": "2017-01-16T15:25:29.637Z"
+ }
+ ],
+ "deploy_keys": [],
+ "services": [
+ {
+ "id": 101,
+ "title": "YouTrack",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.327Z",
+ "updated_at": "2016-06-14T15:01:51.327Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "YoutrackService",
+ "category": "issue_tracker",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 100,
+ "title": "JetBrains TeamCity CI",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.315Z",
+ "updated_at": "2016-06-14T15:01:51.315Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "TeamcityService",
+ "category": "ci",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 99,
+ "title": "Slack",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.303Z",
+ "updated_at": "2016-06-14T15:01:51.303Z",
+ "active": false,
+ "properties": {
+ "notify_only_broken_pipelines": true
+ },
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "pipeline_events": true,
+ "type": "SlackService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 98,
+ "title": "Redmine",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.289Z",
+ "updated_at": "2016-06-14T15:01:51.289Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "RedmineService",
+ "category": "issue_tracker",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 97,
+ "title": "Pushover",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.277Z",
+ "updated_at": "2016-06-14T15:01:51.277Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "PushoverService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 96,
+ "title": "PivotalTracker",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.267Z",
+ "updated_at": "2016-06-14T15:01:51.267Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "PivotalTrackerService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 95,
+ "title": "Jira",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.255Z",
+ "updated_at": "2016-06-14T15:01:51.255Z",
+ "active": false,
+ "properties": {
+ "api_url": "",
+ "jira_issue_transition_id": "2"
+ },
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "JiraService",
+ "category": "issue_tracker",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 94,
+ "title": "Irker (IRC gateway)",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.232Z",
+ "updated_at": "2016-06-14T15:01:51.232Z",
+ "active": true,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "IrkerService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 93,
+ "title": "HipChat",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.219Z",
+ "updated_at": "2016-06-14T15:01:51.219Z",
+ "active": false,
+ "properties": {
+ "notify_only_broken_pipelines": true
+ },
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "pipeline_events": true,
+ "type": "HipchatService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 91,
+ "title": "Flowdock",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.182Z",
+ "updated_at": "2016-06-14T15:01:51.182Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "FlowdockService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 90,
+ "title": "External Wiki",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.166Z",
+ "updated_at": "2016-06-14T15:01:51.166Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "ExternalWikiService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 89,
+ "title": "Emails on push",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.153Z",
+ "updated_at": "2016-06-14T15:01:51.153Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "EmailsOnPushService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 88,
+ "title": "Drone CI",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.139Z",
+ "updated_at": "2016-06-14T15:01:51.139Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "DroneCiService",
+ "category": "ci",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 87,
+ "title": "Custom Issue Tracker",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.125Z",
+ "updated_at": "2016-06-14T15:01:51.125Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "CustomIssueTrackerService",
+ "category": "issue_tracker",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 86,
+ "title": "Campfire",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.113Z",
+ "updated_at": "2016-06-14T15:01:51.113Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "CampfireService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 84,
+ "title": "Buildkite",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.080Z",
+ "updated_at": "2016-06-14T15:01:51.080Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "BuildkiteService",
+ "category": "ci",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 83,
+ "title": "Atlassian Bamboo CI",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.067Z",
+ "updated_at": "2016-06-14T15:01:51.067Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "BambooService",
+ "category": "ci",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 82,
+ "title": "Assembla",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.047Z",
+ "updated_at": "2016-06-14T15:01:51.047Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "AssemblaService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 81,
+ "title": "Asana",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.031Z",
+ "updated_at": "2016-06-14T15:01:51.031Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "type": "AssemblaService",
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true
+ },
+ {
+ "id": 101,
+ "title": "JenkinsDeprecated",
+ "project_id": 5,
+ "created_at": "2016-06-14T15:01:51.031Z",
+ "updated_at": "2016-06-14T15:01:51.031Z",
+ "active": false,
+ "properties": {},
+ "template": false,
+ "push_events": true,
+ "issues_events": true,
+ "merge_requests_events": true,
+ "tag_push_events": true,
+ "note_events": true,
+ "job_events": true,
+ "category": "common",
+ "default": false,
+ "wiki_page_events": true,
+ "type": "JenkinsDeprecatedService"
+ }
+ ],
+ "hooks": [],
+ "protected_branches": [
+ {
+ "id": 1,
+ "project_id": 9,
+ "name": "master",
+ "created_at": "2016-08-30T07:32:52.426Z",
+ "updated_at": "2016-08-30T07:32:52.426Z",
+ "merge_access_levels": [
+ {
+ "id": 1,
+ "protected_branch_id": 1,
+ "access_level": 40,
+ "created_at": "2016-08-30T07:32:52.458Z",
+ "updated_at": "2016-08-30T07:32:52.458Z"
+ }
+ ],
+ "push_access_levels": [
+ {
+ "id": 1,
+ "protected_branch_id": 1,
+ "access_level": 40,
+ "created_at": "2016-08-30T07:32:52.490Z",
+ "updated_at": "2016-08-30T07:32:52.490Z"
+ }
+ ]
+ }
+ ],
+ "protected_tags": [
+ {
+ "id": 1,
+ "project_id": 9,
+ "name": "v*",
+ "created_at": "2017-04-04T13:48:13.426Z",
+ "updated_at": "2017-04-04T13:48:13.426Z",
+ "create_access_levels": [
+ {
+ "id": 1,
+ "protected_tag_id": 1,
+ "access_level": 40,
+ "created_at": "2017-04-04T13:48:13.458Z",
+ "updated_at": "2017-04-04T13:48:13.458Z"
+ }
+ ]
+ }
+ ],
+ "project_feature": {
+ "builds_access_level": 0,
+ "created_at": "2014-12-26T09:26:45.000Z",
+ "id": 2,
+ "issues_access_level": 0,
+ "merge_requests_access_level": 20,
+ "project_id": 4,
+ "snippets_access_level": 20,
+ "updated_at": "2016-09-23T11:58:28.000Z",
+ "wiki_access_level": 20
+ },
+ "custom_attributes": [
+ {
+ "id": 1,
+ "created_at": "2017-10-19T15:36:23.466Z",
+ "updated_at": "2017-10-19T15:36:23.466Z",
+ "project_id": 5,
+ "key": "foo",
+ "value": "foo"
+ },
+ {
+ "id": 2,
+ "created_at": "2017-10-19T15:37:21.904Z",
+ "updated_at": "2017-10-19T15:37:21.904Z",
+ "project_id": 5,
+ "key": "bar",
+ "value": "bar"
+ }
+ ],
+ "project_badges": [
+ {
+ "id": 1,
+ "created_at": "2017-10-19T15:36:23.466Z",
+ "updated_at": "2017-10-19T15:36:23.466Z",
+ "project_id": 5,
+ "type": "ProjectBadge",
+ "link_url": "http://www.example.com",
+ "image_url": "http://www.example.com"
+ },
+ {
+ "id": 2,
+ "created_at": "2017-10-19T15:36:23.466Z",
+ "updated_at": "2017-10-19T15:36:23.466Z",
+ "project_id": 5,
+ "type": "ProjectBadge",
+ "link_url": "http://www.example.com",
+ "image_url": "http://www.example.com"
+ }
+ ],
+ "boards": [
+ {
+ "id": 29,
+ "project_id": 49,
+ "created_at": "2019-06-06T14:01:06.204Z",
+ "updated_at": "2019-06-06T14:22:37.045Z",
+ "name": "TestBoardABC",
+ "milestone_id": null,
+ "group_id": null,
+ "weight": null,
+ "lists": [
+ {
+ "id": 59,
+ "board_id": 29,
+ "label_id": null,
+ "list_type": "backlog",
+ "position": null,
+ "created_at": "2019-06-06T14:01:06.214Z",
+ "updated_at": "2019-06-06T14:01:06.214Z",
+ "user_id": null,
+ "milestone_id": null
+ },
+ {
+ "id": 61,
+ "board_id": 29,
+ "label_id": 20,
+ "list_type": "label",
+ "position": 0,
+ "created_at": "2019-06-06T14:01:43.197Z",
+ "updated_at": "2019-06-06T14:01:43.197Z",
+ "user_id": null,
+ "milestone_id": null,
+ "label": {
+ "id": 20,
+ "title": "testlabel",
+ "color": "#0033CC",
+ "project_id": 49,
+ "created_at": "2019-06-06T14:01:19.698Z",
+ "updated_at": "2019-06-06T14:01:19.698Z",
+ "template": false,
+ "description": null,
+ "group_id": null,
+ "type": "ProjectLabel",
+ "priorities": []
+ }
+ },
+ {
+ "id": 60,
+ "board_id": 29,
+ "label_id": null,
+ "list_type": "closed",
+ "position": null,
+ "created_at": "2019-06-06T14:01:06.221Z",
+ "updated_at": "2019-06-06T14:01:06.221Z",
+ "user_id": null,
+ "milestone_id": null
+ }
+ ]
+ }
+ ]
+}
diff --git a/spec/lib/gitlab/import_export/project.light.json b/spec/fixtures/lib/gitlab/import_export/project.light.json
index 2971ca0f0f8..2971ca0f0f8 100644
--- a/spec/lib/gitlab/import_export/project.light.json
+++ b/spec/fixtures/lib/gitlab/import_export/project.light.json
diff --git a/spec/lib/gitlab/import_export/project.milestone-iid.json b/spec/fixtures/lib/gitlab/import_export/project.milestone-iid.json
index b028147b5eb..b028147b5eb 100644
--- a/spec/lib/gitlab/import_export/project.milestone-iid.json
+++ b/spec/fixtures/lib/gitlab/import_export/project.milestone-iid.json
diff --git a/spec/fixtures/markdown.md.erb b/spec/fixtures/markdown.md.erb
index 8016cf7a86d..b19b45928d9 100644
--- a/spec/fixtures/markdown.md.erb
+++ b/spec/fixtures/markdown.md.erb
@@ -286,6 +286,10 @@ However the wrapping tags cannot be mixed as such:
![My Video](/assets/videos/gitlab-demo.mp4)
+### Audio
+
+![My Audio Clip](/assets/audio/gitlab-demo.wav)
+
### Colors
`#F00`
diff --git a/spec/fixtures/spdx.json b/spec/fixtures/spdx.json
new file mode 100644
index 00000000000..41989626bec
--- /dev/null
+++ b/spec/fixtures/spdx.json
@@ -0,0 +1 @@
+{ "licenseListVersion": "3.6", "licenses": [ { "reference": "./0BSD.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/0BSD.json", "referenceNumber": "319", "name": "BSD Zero Clause License", "licenseId": "0BSD", "seeAlso": [ "http://landley.net/toybox/license.html" ], "isOsiApproved": true }, { "reference": "./AAL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/AAL.json", "referenceNumber": "21", "name": "Attribution Assurance License", "licenseId": "AAL", "seeAlso": [ "https://opensource.org/licenses/attribution" ], "isOsiApproved": true }, { "reference": "./ADSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ADSL.json", "referenceNumber": "19", "name": "Amazon Digital Services License", "licenseId": "ADSL", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/AmazonDigitalServicesLicense" ], "isOsiApproved": false }, { "reference": "./AFL-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AFL-1.1.json", "referenceNumber": "118", "name": "Academic Free License v1.1", "licenseId": "AFL-1.1", "seeAlso": [ "http://opensource.linux-mirror.org/licenses/afl-1.1.txt", "http://wayback.archive.org/web/20021004124254/http://www.opensource.org/licenses/academic.php" ], "isOsiApproved": true }, { "reference": "./AFL-1.2.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AFL-1.2.json", "referenceNumber": "136", "name": "Academic Free License v1.2", "licenseId": "AFL-1.2", "seeAlso": [ "http://opensource.linux-mirror.org/licenses/afl-1.2.txt", "http://wayback.archive.org/web/20021204204652/http://www.opensource.org/licenses/academic.php" ], "isOsiApproved": true }, { "reference": "./AFL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AFL-2.0.json", "referenceNumber": "115", "name": "Academic Free License v2.0", "licenseId": "AFL-2.0", "seeAlso": [ "http://wayback.archive.org/web/20060924134533/http://www.opensource.org/licenses/afl-2.0.txt" ], "isOsiApproved": true }, { "reference": "./AFL-2.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AFL-2.1.json", "referenceNumber": "251", "name": "Academic Free License v2.1", "licenseId": "AFL-2.1", "seeAlso": [ "http://opensource.linux-mirror.org/licenses/afl-2.1.txt" ], "isOsiApproved": true }, { "reference": "./AFL-3.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AFL-3.0.json", "referenceNumber": "216", "name": "Academic Free License v3.0", "licenseId": "AFL-3.0", "seeAlso": [ "http://www.rosenlaw.com/AFL3.0.htm", "https://opensource.org/licenses/afl-3.0" ], "isOsiApproved": true }, { "reference": "./AGPL-1.0.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AGPL-1.0.json", "referenceNumber": "335", "name": "Affero General Public License v1.0", "licenseId": "AGPL-1.0", "seeAlso": [ "http://www.affero.org/oagpl.html" ], "isOsiApproved": false }, { "reference": "./AGPL-1.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/AGPL-1.0-only.json", "referenceNumber": "384", "name": "Affero General Public License v1.0 only", "licenseId": "AGPL-1.0-only", "seeAlso": [ "http://www.affero.org/oagpl.html" ], "isOsiApproved": false }, { "reference": "./AGPL-1.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/AGPL-1.0-or-later.json", "referenceNumber": "332", "name": "Affero General Public License v1.0 or later", "licenseId": "AGPL-1.0-or-later", "seeAlso": [ "http://www.affero.org/oagpl.html" ], "isOsiApproved": false }, { "reference": "./AGPL-3.0.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AGPL-3.0.json", "referenceNumber": "229", "name": "GNU Affero General Public License v3.0", "licenseId": "AGPL-3.0", "seeAlso": [ "https://www.gnu.org/licenses/agpl.txt", "https://opensource.org/licenses/AGPL-3.0" ], "isOsiApproved": true }, { "reference": "./AGPL-3.0-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AGPL-3.0-only.json", "referenceNumber": "95", "name": "GNU Affero General Public License v3.0 only", "licenseId": "AGPL-3.0-only", "seeAlso": [ "https://www.gnu.org/licenses/agpl.txt", "https://opensource.org/licenses/AGPL-3.0" ], "isOsiApproved": true }, { "reference": "./AGPL-3.0-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/AGPL-3.0-or-later.json", "referenceNumber": "155", "name": "GNU Affero General Public License v3.0 or later", "licenseId": "AGPL-3.0-or-later", "seeAlso": [ "https://www.gnu.org/licenses/agpl.txt", "https://opensource.org/licenses/AGPL-3.0" ], "isOsiApproved": true }, { "reference": "./AMDPLPA.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/AMDPLPA.json", "referenceNumber": "33", "name": "AMD\u0027s plpa_map.c License", "licenseId": "AMDPLPA", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/AMD_plpa_map_License" ], "isOsiApproved": false }, { "reference": "./AML.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/AML.json", "referenceNumber": "148", "name": "Apple MIT License", "licenseId": "AML", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Apple_MIT_License" ], "isOsiApproved": false }, { "reference": "./AMPAS.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/AMPAS.json", "referenceNumber": "191", "name": "Academy of Motion Picture Arts and Sciences BSD", "licenseId": "AMPAS", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/BSD#AMPASBSD" ], "isOsiApproved": false }, { "reference": "./ANTLR-PD.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ANTLR-PD.json", "referenceNumber": "395", "name": "ANTLR Software Rights Notice", "licenseId": "ANTLR-PD", "seeAlso": [ "http://www.antlr2.org/license.html" ], "isOsiApproved": false }, { "reference": "./APAFML.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/APAFML.json", "referenceNumber": "195", "name": "Adobe Postscript AFM License", "licenseId": "APAFML", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/AdobePostscriptAFM" ], "isOsiApproved": false }, { "reference": "./APL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/APL-1.0.json", "referenceNumber": "252", "name": "Adaptive Public License 1.0", "licenseId": "APL-1.0", "seeAlso": [ "https://opensource.org/licenses/APL-1.0" ], "isOsiApproved": true }, { "reference": "./APSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/APSL-1.0.json", "referenceNumber": "354", "name": "Apple Public Source License 1.0", "licenseId": "APSL-1.0", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Apple_Public_Source_License_1.0" ], "isOsiApproved": true }, { "reference": "./APSL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/APSL-1.1.json", "referenceNumber": "324", "name": "Apple Public Source License 1.1", "licenseId": "APSL-1.1", "seeAlso": [ "http://www.opensource.apple.com/source/IOSerialFamily/IOSerialFamily-7/APPLE_LICENSE" ], "isOsiApproved": true }, { "reference": "./APSL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/APSL-1.2.json", "referenceNumber": "34", "name": "Apple Public Source License 1.2", "licenseId": "APSL-1.2", "seeAlso": [ "http://www.samurajdata.se/opensource/mirror/licenses/apsl.php" ], "isOsiApproved": true }, { "reference": "./APSL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/APSL-2.0.json", "referenceNumber": "109", "name": "Apple Public Source License 2.0", "licenseId": "APSL-2.0", "seeAlso": [ "http://www.opensource.apple.com/license/apsl/" ], "isOsiApproved": true }, { "reference": "./Abstyles.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Abstyles.json", "referenceNumber": "80", "name": "Abstyles License", "licenseId": "Abstyles", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Abstyles" ], "isOsiApproved": false }, { "reference": "./Adobe-2006.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Adobe-2006.json", "referenceNumber": "285", "name": "Adobe Systems Incorporated Source Code License Agreement", "licenseId": "Adobe-2006", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/AdobeLicense" ], "isOsiApproved": false }, { "reference": "./Adobe-Glyph.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Adobe-Glyph.json", "referenceNumber": "107", "name": "Adobe Glyph List License", "licenseId": "Adobe-Glyph", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/MIT#AdobeGlyph" ], "isOsiApproved": false }, { "reference": "./Afmparse.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Afmparse.json", "referenceNumber": "42", "name": "Afmparse License", "licenseId": "Afmparse", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Afmparse" ], "isOsiApproved": false }, { "reference": "./Aladdin.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Aladdin.json", "referenceNumber": "258", "name": "Aladdin Free Public License", "licenseId": "Aladdin", "seeAlso": [ "http://pages.cs.wisc.edu/~ghost/doc/AFPL/6.01/Public.htm" ], "isOsiApproved": false }, { "reference": "./Apache-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Apache-1.0.json", "referenceNumber": "237", "name": "Apache License 1.0", "licenseId": "Apache-1.0", "seeAlso": [ "http://www.apache.org/licenses/LICENSE-1.0" ], "isOsiApproved": false }, { "reference": "./Apache-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Apache-1.1.json", "referenceNumber": "84", "name": "Apache License 1.1", "licenseId": "Apache-1.1", "seeAlso": [ "http://apache.org/licenses/LICENSE-1.1", "https://opensource.org/licenses/Apache-1.1" ], "isOsiApproved": true }, { "reference": "./Apache-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Apache-2.0.json", "referenceNumber": "26", "name": "Apache License 2.0", "licenseId": "Apache-2.0", "seeAlso": [ "http://www.apache.org/licenses/LICENSE-2.0", "https://opensource.org/licenses/Apache-2.0" ], "isOsiApproved": true }, { "reference": "./Artistic-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Artistic-1.0.json", "referenceNumber": "165", "name": "Artistic License 1.0", "licenseId": "Artistic-1.0", "seeAlso": [ "https://opensource.org/licenses/Artistic-1.0" ], "isOsiApproved": true }, { "reference": "./Artistic-1.0-Perl.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Artistic-1.0-Perl.json", "referenceNumber": "377", "name": "Artistic License 1.0 (Perl)", "licenseId": "Artistic-1.0-Perl", "seeAlso": [ "http://dev.perl.org/licenses/artistic.html" ], "isOsiApproved": true }, { "reference": "./Artistic-1.0-cl8.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Artistic-1.0-cl8.json", "referenceNumber": "13", "name": "Artistic License 1.0 w/clause 8", "licenseId": "Artistic-1.0-cl8", "seeAlso": [ "https://opensource.org/licenses/Artistic-1.0" ], "isOsiApproved": true }, { "reference": "./Artistic-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Artistic-2.0.json", "referenceNumber": "189", "name": "Artistic License 2.0", "licenseId": "Artistic-2.0", "seeAlso": [ "http://www.perlfoundation.org/artistic_license_2_0", "https://opensource.org/licenses/artistic-license-2.0" ], "isOsiApproved": true }, { "reference": "./BSD-1-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-1-Clause.json", "referenceNumber": "358", "name": "BSD 1-Clause License", "licenseId": "BSD-1-Clause", "seeAlso": [ "https://svnweb.freebsd.org/base/head/include/ifaddrs.h?revision\u003d326823" ], "isOsiApproved": false }, { "reference": "./BSD-2-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-2-Clause.json", "referenceNumber": "325", "name": "BSD 2-Clause \"Simplified\" License", "licenseId": "BSD-2-Clause", "seeAlso": [ "https://opensource.org/licenses/BSD-2-Clause" ], "isOsiApproved": true }, { "reference": "./BSD-2-Clause-FreeBSD.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/BSD-2-Clause-FreeBSD.json", "referenceNumber": "121", "name": "BSD 2-Clause FreeBSD License", "licenseId": "BSD-2-Clause-FreeBSD", "seeAlso": [ "http://www.freebsd.org/copyright/freebsd-license.html" ], "isOsiApproved": false }, { "reference": "./BSD-2-Clause-NetBSD.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-2-Clause-NetBSD.json", "referenceNumber": "381", "name": "BSD 2-Clause NetBSD License", "licenseId": "BSD-2-Clause-NetBSD", "seeAlso": [ "http://www.netbsd.org/about/redistribution.html#default" ], "isOsiApproved": false }, { "reference": "./BSD-2-Clause-Patent.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-2-Clause-Patent.json", "referenceNumber": "169", "name": "BSD-2-Clause Plus Patent License", "licenseId": "BSD-2-Clause-Patent", "seeAlso": [ "https://opensource.org/licenses/BSDplusPatent" ], "isOsiApproved": true }, { "reference": "./BSD-3-Clause.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause.json", "referenceNumber": "270", "name": "BSD 3-Clause \"New\" or \"Revised\" License", "licenseId": "BSD-3-Clause", "seeAlso": [ "https://opensource.org/licenses/BSD-3-Clause" ], "isOsiApproved": true }, { "reference": "./BSD-3-Clause-Attribution.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause-Attribution.json", "referenceNumber": "39", "name": "BSD with attribution", "licenseId": "BSD-3-Clause-Attribution", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/BSD_with_Attribution" ], "isOsiApproved": false }, { "reference": "./BSD-3-Clause-Clear.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause-Clear.json", "referenceNumber": "212", "name": "BSD 3-Clause Clear License", "licenseId": "BSD-3-Clause-Clear", "seeAlso": [ "http://labs.metacarta.com/license-explanation.html#license" ], "isOsiApproved": false }, { "reference": "./BSD-3-Clause-LBNL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause-LBNL.json", "referenceNumber": "337", "name": "Lawrence Berkeley National Labs BSD variant license", "licenseId": "BSD-3-Clause-LBNL", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/LBNLBSD" ], "isOsiApproved": true }, { "reference": "./BSD-3-Clause-No-Nuclear-License.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.json", "referenceNumber": "12", "name": "BSD 3-Clause No Nuclear License", "licenseId": "BSD-3-Clause-No-Nuclear-License", "seeAlso": [ "http://download.oracle.com/otn-pub/java/licenses/bsd.txt?AuthParam\u003d1467140197_43d516ce1776bd08a58235a7785be1cc" ], "isOsiApproved": false }, { "reference": "./BSD-3-Clause-No-Nuclear-License-2014.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.json", "referenceNumber": "137", "name": "BSD 3-Clause No Nuclear License 2014", "licenseId": "BSD-3-Clause-No-Nuclear-License-2014", "seeAlso": [ "https://java.net/projects/javaeetutorial/pages/BerkeleyLicense" ], "isOsiApproved": false }, { "reference": "./BSD-3-Clause-No-Nuclear-Warranty.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.json", "referenceNumber": "44", "name": "BSD 3-Clause No Nuclear Warranty", "licenseId": "BSD-3-Clause-No-Nuclear-Warranty", "seeAlso": [ "https://jogamp.org/git/?p\u003dgluegen.git;a\u003dblob_plain;f\u003dLICENSE.txt" ], "isOsiApproved": false }, { "reference": "./BSD-3-Clause-Open-MPI.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-3-Clause-Open-MPI.json", "referenceNumber": "349", "name": "BSD 3-Clause Open MPI variant", "licenseId": "BSD-3-Clause-Open-MPI", "seeAlso": [ "https://www.open-mpi.org/community/license.php", "http://www.netlib.org/lapack/LICENSE.txt" ], "isOsiApproved": false }, { "reference": "./BSD-4-Clause.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/BSD-4-Clause.json", "referenceNumber": "162", "name": "BSD 4-Clause \"Original\" or \"Old\" License", "licenseId": "BSD-4-Clause", "seeAlso": [ "http://directory.fsf.org/wiki/License:BSD_4Clause" ], "isOsiApproved": false }, { "reference": "./BSD-4-Clause-UC.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-4-Clause-UC.json", "referenceNumber": "203", "name": "BSD-4-Clause (University of California-Specific)", "licenseId": "BSD-4-Clause-UC", "seeAlso": [ "http://www.freebsd.org/copyright/license.html" ], "isOsiApproved": false }, { "reference": "./BSD-Protection.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-Protection.json", "referenceNumber": "119", "name": "BSD Protection License", "licenseId": "BSD-Protection", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/BSD_Protection_License" ], "isOsiApproved": false }, { "reference": "./BSD-Source-Code.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BSD-Source-Code.json", "referenceNumber": "308", "name": "BSD Source Code Attribution", "licenseId": "BSD-Source-Code", "seeAlso": [ "https://github.com/robbiehanson/CocoaHTTPServer/blob/master/LICENSE.txt" ], "isOsiApproved": false }, { "reference": "./BSL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/BSL-1.0.json", "referenceNumber": "224", "name": "Boost Software License 1.0", "licenseId": "BSL-1.0", "seeAlso": [ "http://www.boost.org/LICENSE_1_0.txt", "https://opensource.org/licenses/BSL-1.0" ], "isOsiApproved": true }, { "reference": "./Bahyph.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Bahyph.json", "referenceNumber": "366", "name": "Bahyph License", "licenseId": "Bahyph", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Bahyph" ], "isOsiApproved": false }, { "reference": "./Barr.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Barr.json", "referenceNumber": "333", "name": "Barr License", "licenseId": "Barr", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Barr" ], "isOsiApproved": false }, { "reference": "./Beerware.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Beerware.json", "referenceNumber": "17", "name": "Beerware License", "licenseId": "Beerware", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Beerware", "https://people.freebsd.org/~phk/" ], "isOsiApproved": false }, { "reference": "./BitTorrent-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BitTorrent-1.0.json", "referenceNumber": "218", "name": "BitTorrent Open Source License v1.0", "licenseId": "BitTorrent-1.0", "seeAlso": [ "http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/licenses/BitTorrent?r1\u003d1.1\u0026r2\u003d1.1.1.1\u0026diff_format\u003ds" ], "isOsiApproved": false }, { "reference": "./BitTorrent-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/BitTorrent-1.1.json", "referenceNumber": "179", "name": "BitTorrent Open Source License v1.1", "licenseId": "BitTorrent-1.1", "seeAlso": [ "http://directory.fsf.org/wiki/License:BitTorrentOSL1.1" ], "isOsiApproved": false }, { "reference": "./BlueOak-1.0.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/BlueOak-1.0.0.json", "referenceNumber": "23", "name": "Blue Oak Model License 1.0.0", "licenseId": "BlueOak-1.0.0", "seeAlso": [ "https://blueoakcouncil.org/license/1.0.0" ], "isOsiApproved": false }, { "reference": "./Borceux.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Borceux.json", "referenceNumber": "311", "name": "Borceux license", "licenseId": "Borceux", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Borceux" ], "isOsiApproved": false }, { "reference": "./CATOSL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CATOSL-1.1.json", "referenceNumber": "262", "name": "Computer Associates Trusted Open Source License 1.1", "licenseId": "CATOSL-1.1", "seeAlso": [ "https://opensource.org/licenses/CATOSL-1.1" ], "isOsiApproved": true }, { "reference": "./CC-BY-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-1.0.json", "referenceNumber": "128", "name": "Creative Commons Attribution 1.0 Generic", "licenseId": "CC-BY-1.0", "seeAlso": [ "https://creativecommons.org/licenses/by/1.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-2.0.json", "referenceNumber": "232", "name": "Creative Commons Attribution 2.0 Generic", "licenseId": "CC-BY-2.0", "seeAlso": [ "https://creativecommons.org/licenses/by/2.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-2.5.json", "referenceNumber": "129", "name": "Creative Commons Attribution 2.5 Generic", "licenseId": "CC-BY-2.5", "seeAlso": [ "https://creativecommons.org/licenses/by/2.5/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-3.0.json", "referenceNumber": "256", "name": "Creative Commons Attribution 3.0 Unported", "licenseId": "CC-BY-3.0", "seeAlso": [ "https://creativecommons.org/licenses/by/3.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-4.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CC-BY-4.0.json", "referenceNumber": "330", "name": "Creative Commons Attribution 4.0 International", "licenseId": "CC-BY-4.0", "seeAlso": [ "https://creativecommons.org/licenses/by/4.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-1.0.json", "referenceNumber": "130", "name": "Creative Commons Attribution Non Commercial 1.0 Generic", "licenseId": "CC-BY-NC-1.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc/1.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-2.0.json", "referenceNumber": "244", "name": "Creative Commons Attribution Non Commercial 2.0 Generic", "licenseId": "CC-BY-NC-2.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc/2.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-2.5.json", "referenceNumber": "1", "name": "Creative Commons Attribution Non Commercial 2.5 Generic", "licenseId": "CC-BY-NC-2.5", "seeAlso": [ "https://creativecommons.org/licenses/by-nc/2.5/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-3.0.json", "referenceNumber": "255", "name": "Creative Commons Attribution Non Commercial 3.0 Unported", "licenseId": "CC-BY-NC-3.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc/3.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-4.0.json", "referenceNumber": "186", "name": "Creative Commons Attribution Non Commercial 4.0 International", "licenseId": "CC-BY-NC-4.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc/4.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-ND-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-ND-1.0.json", "referenceNumber": "59", "name": "Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic", "licenseId": "CC-BY-NC-ND-1.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nd-nc/1.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-ND-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-ND-2.0.json", "referenceNumber": "36", "name": "Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic", "licenseId": "CC-BY-NC-ND-2.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-nd/2.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-ND-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-ND-2.5.json", "referenceNumber": "158", "name": "Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic", "licenseId": "CC-BY-NC-ND-2.5", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-nd/2.5/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-ND-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-ND-3.0.json", "referenceNumber": "48", "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported", "licenseId": "CC-BY-NC-ND-3.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-nd/3.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-ND-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-ND-4.0.json", "referenceNumber": "281", "name": "Creative Commons Attribution Non Commercial No Derivatives 4.0 International", "licenseId": "CC-BY-NC-ND-4.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-SA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-SA-1.0.json", "referenceNumber": "178", "name": "Creative Commons Attribution Non Commercial Share Alike 1.0 Generic", "licenseId": "CC-BY-NC-SA-1.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-sa/1.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-SA-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-SA-2.0.json", "referenceNumber": "81", "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Generic", "licenseId": "CC-BY-NC-SA-2.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-SA-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-SA-2.5.json", "referenceNumber": "62", "name": "Creative Commons Attribution Non Commercial Share Alike 2.5 Generic", "licenseId": "CC-BY-NC-SA-2.5", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-sa/2.5/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-SA-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-SA-3.0.json", "referenceNumber": "22", "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Unported", "licenseId": "CC-BY-NC-SA-3.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-sa/3.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-NC-SA-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-NC-SA-4.0.json", "referenceNumber": "47", "name": "Creative Commons Attribution Non Commercial Share Alike 4.0 International", "licenseId": "CC-BY-NC-SA-4.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-ND-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-ND-1.0.json", "referenceNumber": "50", "name": "Creative Commons Attribution No Derivatives 1.0 Generic", "licenseId": "CC-BY-ND-1.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nd/1.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-ND-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-ND-2.0.json", "referenceNumber": "287", "name": "Creative Commons Attribution No Derivatives 2.0 Generic", "licenseId": "CC-BY-ND-2.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nd/2.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-ND-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-ND-2.5.json", "referenceNumber": "68", "name": "Creative Commons Attribution No Derivatives 2.5 Generic", "licenseId": "CC-BY-ND-2.5", "seeAlso": [ "https://creativecommons.org/licenses/by-nd/2.5/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-ND-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-ND-3.0.json", "referenceNumber": "393", "name": "Creative Commons Attribution No Derivatives 3.0 Unported", "licenseId": "CC-BY-ND-3.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nd/3.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-ND-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-ND-4.0.json", "referenceNumber": "132", "name": "Creative Commons Attribution No Derivatives 4.0 International", "licenseId": "CC-BY-ND-4.0", "seeAlso": [ "https://creativecommons.org/licenses/by-nd/4.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-SA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-SA-1.0.json", "referenceNumber": "322", "name": "Creative Commons Attribution Share Alike 1.0 Generic", "licenseId": "CC-BY-SA-1.0", "seeAlso": [ "https://creativecommons.org/licenses/by-sa/1.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-SA-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-SA-2.0.json", "referenceNumber": "142", "name": "Creative Commons Attribution Share Alike 2.0 Generic", "licenseId": "CC-BY-SA-2.0", "seeAlso": [ "https://creativecommons.org/licenses/by-sa/2.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-SA-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-SA-2.5.json", "referenceNumber": "306", "name": "Creative Commons Attribution Share Alike 2.5 Generic", "licenseId": "CC-BY-SA-2.5", "seeAlso": [ "https://creativecommons.org/licenses/by-sa/2.5/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-SA-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-BY-SA-3.0.json", "referenceNumber": "394", "name": "Creative Commons Attribution Share Alike 3.0 Unported", "licenseId": "CC-BY-SA-3.0", "seeAlso": [ "https://creativecommons.org/licenses/by-sa/3.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-BY-SA-4.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CC-BY-SA-4.0.json", "referenceNumber": "32", "name": "Creative Commons Attribution Share Alike 4.0 International", "licenseId": "CC-BY-SA-4.0", "seeAlso": [ "https://creativecommons.org/licenses/by-sa/4.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CC-PDDC.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CC-PDDC.json", "referenceNumber": "371", "name": "Creative Commons Public Domain Dedication and Certification", "licenseId": "CC-PDDC", "seeAlso": [ "https://creativecommons.org/licenses/publicdomain/" ], "isOsiApproved": false }, { "reference": "./CC0-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CC0-1.0.json", "referenceNumber": "213", "name": "Creative Commons Zero v1.0 Universal", "licenseId": "CC0-1.0", "seeAlso": [ "https://creativecommons.org/publicdomain/zero/1.0/legalcode" ], "isOsiApproved": false }, { "reference": "./CDDL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CDDL-1.0.json", "referenceNumber": "138", "name": "Common Development and Distribution License 1.0", "licenseId": "CDDL-1.0", "seeAlso": [ "https://opensource.org/licenses/cddl1" ], "isOsiApproved": true }, { "reference": "./CDDL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CDDL-1.1.json", "referenceNumber": "376", "name": "Common Development and Distribution License 1.1", "licenseId": "CDDL-1.1", "seeAlso": [ "http://glassfish.java.net/public/CDDL+GPL_1_1.html", "https://javaee.github.io/glassfish/LICENSE" ], "isOsiApproved": false }, { "reference": "./CDLA-Permissive-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CDLA-Permissive-1.0.json", "referenceNumber": "250", "name": "Community Data License Agreement Permissive 1.0", "licenseId": "CDLA-Permissive-1.0", "seeAlso": [ "https://cdla.io/permissive-1-0" ], "isOsiApproved": false }, { "reference": "./CDLA-Sharing-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CDLA-Sharing-1.0.json", "referenceNumber": "310", "name": "Community Data License Agreement Sharing 1.0", "licenseId": "CDLA-Sharing-1.0", "seeAlso": [ "https://cdla.io/sharing-1-0" ], "isOsiApproved": false }, { "reference": "./CECILL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CECILL-1.0.json", "referenceNumber": "223", "name": "CeCILL Free Software License Agreement v1.0", "licenseId": "CECILL-1.0", "seeAlso": [ "http://www.cecill.info/licences/Licence_CeCILL_V1-fr.html" ], "isOsiApproved": false }, { "reference": "./CECILL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CECILL-1.1.json", "referenceNumber": "300", "name": "CeCILL Free Software License Agreement v1.1", "licenseId": "CECILL-1.1", "seeAlso": [ "http://www.cecill.info/licences/Licence_CeCILL_V1.1-US.html" ], "isOsiApproved": false }, { "reference": "./CECILL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CECILL-2.0.json", "referenceNumber": "352", "name": "CeCILL Free Software License Agreement v2.0", "licenseId": "CECILL-2.0", "seeAlso": [ "http://www.cecill.info/licences/Licence_CeCILL_V2-en.html" ], "isOsiApproved": false }, { "reference": "./CECILL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CECILL-2.1.json", "referenceNumber": "120", "name": "CeCILL Free Software License Agreement v2.1", "licenseId": "CECILL-2.1", "seeAlso": [ "http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html" ], "isOsiApproved": true }, { "reference": "./CECILL-B.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CECILL-B.json", "referenceNumber": "340", "name": "CeCILL-B Free Software License Agreement", "licenseId": "CECILL-B", "seeAlso": [ "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html" ], "isOsiApproved": false }, { "reference": "./CECILL-C.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CECILL-C.json", "referenceNumber": "77", "name": "CeCILL-C Free Software License Agreement", "licenseId": "CECILL-C", "seeAlso": [ "http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html" ], "isOsiApproved": false }, { "reference": "./CERN-OHL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CERN-OHL-1.1.json", "referenceNumber": "341", "name": "CERN Open Hardware License v1.1", "licenseId": "CERN-OHL-1.1", "seeAlso": [ "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.1" ], "isOsiApproved": false }, { "reference": "./CERN-OHL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CERN-OHL-1.2.json", "referenceNumber": "3", "name": "CERN Open Hardware Licence v1.2", "licenseId": "CERN-OHL-1.2", "seeAlso": [ "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.2" ], "isOsiApproved": false }, { "reference": "./CNRI-Jython.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CNRI-Jython.json", "referenceNumber": "94", "name": "CNRI Jython License", "licenseId": "CNRI-Jython", "seeAlso": [ "http://www.jython.org/license.html" ], "isOsiApproved": false }, { "reference": "./CNRI-Python.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CNRI-Python.json", "referenceNumber": "45", "name": "CNRI Python License", "licenseId": "CNRI-Python", "seeAlso": [ "https://opensource.org/licenses/CNRI-Python" ], "isOsiApproved": true }, { "reference": "./CNRI-Python-GPL-Compatible.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CNRI-Python-GPL-Compatible.json", "referenceNumber": "202", "name": "CNRI Python Open Source GPL Compatible License Agreement", "licenseId": "CNRI-Python-GPL-Compatible", "seeAlso": [ "http://www.python.org/download/releases/1.6.1/download_win/" ], "isOsiApproved": false }, { "reference": "./CPAL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CPAL-1.0.json", "referenceNumber": "170", "name": "Common Public Attribution License 1.0", "licenseId": "CPAL-1.0", "seeAlso": [ "https://opensource.org/licenses/CPAL-1.0" ], "isOsiApproved": true }, { "reference": "./CPL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/CPL-1.0.json", "referenceNumber": "172", "name": "Common Public License 1.0", "licenseId": "CPL-1.0", "seeAlso": [ "https://opensource.org/licenses/CPL-1.0" ], "isOsiApproved": true }, { "reference": "./CPOL-1.02.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CPOL-1.02.json", "referenceNumber": "28", "name": "Code Project Open License 1.02", "licenseId": "CPOL-1.02", "seeAlso": [ "http://www.codeproject.com/info/cpol10.aspx" ], "isOsiApproved": false }, { "reference": "./CUA-OPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CUA-OPL-1.0.json", "referenceNumber": "365", "name": "CUA Office Public License v1.0", "licenseId": "CUA-OPL-1.0", "seeAlso": [ "https://opensource.org/licenses/CUA-OPL-1.0" ], "isOsiApproved": true }, { "reference": "./Caldera.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Caldera.json", "referenceNumber": "108", "name": "Caldera License", "licenseId": "Caldera", "seeAlso": [ "http://www.lemis.com/grog/UNIX/ancient-source-all.pdf" ], "isOsiApproved": false }, { "reference": "./ClArtistic.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/ClArtistic.json", "referenceNumber": "271", "name": "Clarified Artistic License", "licenseId": "ClArtistic", "seeAlso": [ "http://gianluca.dellavedova.org/2011/01/03/clarified-artistic-license/", "http://www.ncftp.com/ncftp/doc/LICENSE.txt" ], "isOsiApproved": false }, { "reference": "./Condor-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Condor-1.1.json", "referenceNumber": "307", "name": "Condor Public License v1.1", "licenseId": "Condor-1.1", "seeAlso": [ "http://research.cs.wisc.edu/condor/license.html#condor", "http://web.archive.org/web/20111123062036/http://research.cs.wisc.edu/condor/license.html#condor" ], "isOsiApproved": false }, { "reference": "./Crossword.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Crossword.json", "referenceNumber": "363", "name": "Crossword License", "licenseId": "Crossword", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Crossword" ], "isOsiApproved": false }, { "reference": "./CrystalStacker.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/CrystalStacker.json", "referenceNumber": "168", "name": "CrystalStacker License", "licenseId": "CrystalStacker", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing:CrystalStacker?rd\u003dLicensing/CrystalStacker" ], "isOsiApproved": false }, { "reference": "./Cube.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Cube.json", "referenceNumber": "370", "name": "Cube License", "licenseId": "Cube", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Cube" ], "isOsiApproved": false }, { "reference": "./D-FSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/D-FSL-1.0.json", "referenceNumber": "182", "name": "Deutsche Freie Software Lizenz", "licenseId": "D-FSL-1.0", "seeAlso": [ "http://www.dipp.nrw.de/d-fsl/lizenzen/", "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/de/D-FSL-1_0_de.txt", "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/en/D-FSL-1_0_en.txt", "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl", "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/deutsche-freie-software-lizenz", "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/german-free-software-license", "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_de.txt/at_download/file", "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_en.txt/at_download/file" ], "isOsiApproved": false }, { "reference": "./DOC.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/DOC.json", "referenceNumber": "160", "name": "DOC License", "licenseId": "DOC", "seeAlso": [ "http://www.cs.wustl.edu/~schmidt/ACE-copying.html" ], "isOsiApproved": false }, { "reference": "./DSDP.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/DSDP.json", "referenceNumber": "141", "name": "DSDP License", "licenseId": "DSDP", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/DSDP" ], "isOsiApproved": false }, { "reference": "./Dotseqn.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Dotseqn.json", "referenceNumber": "390", "name": "Dotseqn License", "licenseId": "Dotseqn", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Dotseqn" ], "isOsiApproved": false }, { "reference": "./ECL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ECL-1.0.json", "referenceNumber": "396", "name": "Educational Community License v1.0", "licenseId": "ECL-1.0", "seeAlso": [ "https://opensource.org/licenses/ECL-1.0" ], "isOsiApproved": true }, { "reference": "./ECL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/ECL-2.0.json", "referenceNumber": "298", "name": "Educational Community License v2.0", "licenseId": "ECL-2.0", "seeAlso": [ "https://opensource.org/licenses/ECL-2.0" ], "isOsiApproved": true }, { "reference": "./EFL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/EFL-1.0.json", "referenceNumber": "150", "name": "Eiffel Forum License v1.0", "licenseId": "EFL-1.0", "seeAlso": [ "http://www.eiffel-nice.org/license/forum.txt", "https://opensource.org/licenses/EFL-1.0" ], "isOsiApproved": true }, { "reference": "./EFL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/EFL-2.0.json", "referenceNumber": "161", "name": "Eiffel Forum License v2.0", "licenseId": "EFL-2.0", "seeAlso": [ "http://www.eiffel-nice.org/license/eiffel-forum-license-2.html", "https://opensource.org/licenses/EFL-2.0" ], "isOsiApproved": true }, { "reference": "./EPL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/EPL-1.0.json", "referenceNumber": "214", "name": "Eclipse Public License 1.0", "licenseId": "EPL-1.0", "seeAlso": [ "http://www.eclipse.org/legal/epl-v10.html", "https://opensource.org/licenses/EPL-1.0" ], "isOsiApproved": true }, { "reference": "./EPL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/EPL-2.0.json", "referenceNumber": "134", "name": "Eclipse Public License 2.0", "licenseId": "EPL-2.0", "seeAlso": [ "https://www.eclipse.org/legal/epl-2.0", "https://www.opensource.org/licenses/EPL-2.0" ], "isOsiApproved": true }, { "reference": "./EUDatagrid.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/EUDatagrid.json", "referenceNumber": "192", "name": "EU DataGrid Software License", "licenseId": "EUDatagrid", "seeAlso": [ "http://eu-datagrid.web.cern.ch/eu-datagrid/license.html", "https://opensource.org/licenses/EUDatagrid" ], "isOsiApproved": true }, { "reference": "./EUPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/EUPL-1.0.json", "referenceNumber": "173", "name": "European Union Public License 1.0", "licenseId": "EUPL-1.0", "seeAlso": [ "http://ec.europa.eu/idabc/en/document/7330.html", "http://ec.europa.eu/idabc/servlets/Doc027f.pdf?id\u003d31096" ], "isOsiApproved": false }, { "reference": "./EUPL-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/EUPL-1.1.json", "referenceNumber": "92", "name": "European Union Public License 1.1", "licenseId": "EUPL-1.1", "seeAlso": [ "https://joinup.ec.europa.eu/software/page/eupl/licence-eupl", "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl1.1.-licence-en_0.pdf", "https://opensource.org/licenses/EUPL-1.1" ], "isOsiApproved": true }, { "reference": "./EUPL-1.2.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/EUPL-1.2.json", "referenceNumber": "387", "name": "European Union Public License 1.2", "licenseId": "EUPL-1.2", "seeAlso": [ "https://joinup.ec.europa.eu/page/eupl-text-11-12", "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl_v1.2_en.pdf", "https://joinup.ec.europa.eu/sites/default/files/inline-files/EUPL%20v1_2%20EN(1).txt", "http://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri\u003dCELEX:32017D0863", "https://opensource.org/licenses/EUPL-1.1" ], "isOsiApproved": true }, { "reference": "./Entessa.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Entessa.json", "referenceNumber": "99", "name": "Entessa Public License v1.0", "licenseId": "Entessa", "seeAlso": [ "https://opensource.org/licenses/Entessa" ], "isOsiApproved": true }, { "reference": "./ErlPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ErlPL-1.1.json", "referenceNumber": "157", "name": "Erlang Public License v1.1", "licenseId": "ErlPL-1.1", "seeAlso": [ "http://www.erlang.org/EPLICENSE" ], "isOsiApproved": false }, { "reference": "./Eurosym.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Eurosym.json", "referenceNumber": "113", "name": "Eurosym License", "licenseId": "Eurosym", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Eurosym" ], "isOsiApproved": false }, { "reference": "./FSFAP.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/FSFAP.json", "referenceNumber": "114", "name": "FSF All Permissive License", "licenseId": "FSFAP", "seeAlso": [ "https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html" ], "isOsiApproved": false }, { "reference": "./FSFUL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/FSFUL.json", "referenceNumber": "193", "name": "FSF Unlimited License", "licenseId": "FSFUL", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License" ], "isOsiApproved": false }, { "reference": "./FSFULLR.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/FSFULLR.json", "referenceNumber": "43", "name": "FSF Unlimited License (with License Retention)", "licenseId": "FSFULLR", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant" ], "isOsiApproved": false }, { "reference": "./FTL.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/FTL.json", "referenceNumber": "240", "name": "Freetype Project License", "licenseId": "FTL", "seeAlso": [ "http://freetype.fis.uniroma2.it/FTL.TXT", "http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/FTL.TXT" ], "isOsiApproved": false }, { "reference": "./Fair.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Fair.json", "referenceNumber": "297", "name": "Fair License", "licenseId": "Fair", "seeAlso": [ "http://fairlicense.org/", "https://opensource.org/licenses/Fair" ], "isOsiApproved": true }, { "reference": "./Frameworx-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Frameworx-1.0.json", "referenceNumber": "389", "name": "Frameworx Open License 1.0", "licenseId": "Frameworx-1.0", "seeAlso": [ "https://opensource.org/licenses/Frameworx-1.0" ], "isOsiApproved": true }, { "reference": "./FreeImage.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/FreeImage.json", "referenceNumber": "277", "name": "FreeImage Public License v1.0", "licenseId": "FreeImage", "seeAlso": [ "http://freeimage.sourceforge.net/freeimage-license.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.1.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.1.json", "referenceNumber": "98", "name": "GNU Free Documentation License v1.1", "licenseId": "GFDL-1.1", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.1-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.1-only.json", "referenceNumber": "102", "name": "GNU Free Documentation License v1.1 only", "licenseId": "GFDL-1.1-only", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.1-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.1-or-later.json", "referenceNumber": "348", "name": "GNU Free Documentation License v1.1 or later", "licenseId": "GFDL-1.1-or-later", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.2.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.2.json", "referenceNumber": "197", "name": "GNU Free Documentation License v1.2", "licenseId": "GFDL-1.2", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.2-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.2-only.json", "referenceNumber": "236", "name": "GNU Free Documentation License v1.2 only", "licenseId": "GFDL-1.2-only", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.2-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.2-or-later.json", "referenceNumber": "215", "name": "GNU Free Documentation License v1.2 or later", "licenseId": "GFDL-1.2-or-later", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.3.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.3.json", "referenceNumber": "112", "name": "GNU Free Documentation License v1.3", "licenseId": "GFDL-1.3", "seeAlso": [ "https://www.gnu.org/licenses/fdl-1.3.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.3-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.3-only.json", "referenceNumber": "69", "name": "GNU Free Documentation License v1.3 only", "licenseId": "GFDL-1.3-only", "seeAlso": [ "https://www.gnu.org/licenses/fdl-1.3.txt" ], "isOsiApproved": false }, { "reference": "./GFDL-1.3-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GFDL-1.3-or-later.json", "referenceNumber": "4", "name": "GNU Free Documentation License v1.3 or later", "licenseId": "GFDL-1.3-or-later", "seeAlso": [ "https://www.gnu.org/licenses/fdl-1.3.txt" ], "isOsiApproved": false }, { "reference": "./GL2PS.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/GL2PS.json", "referenceNumber": "124", "name": "GL2PS License", "licenseId": "GL2PS", "seeAlso": [ "http://www.geuz.org/gl2ps/COPYING.GL2PS" ], "isOsiApproved": false }, { "reference": "./GPL-1.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-1.0.json", "referenceNumber": "79", "name": "GNU General Public License v1.0 only", "licenseId": "GPL-1.0", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" ], "isOsiApproved": false }, { "reference": "./GPL-1.0+.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-1.0+.json", "referenceNumber": "175", "name": "GNU General Public License v1.0 or later", "licenseId": "GPL-1.0+", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" ], "isOsiApproved": false }, { "reference": "./GPL-1.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/GPL-1.0-only.json", "referenceNumber": "15", "name": "GNU General Public License v1.0 only", "licenseId": "GPL-1.0-only", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" ], "isOsiApproved": false }, { "reference": "./GPL-1.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/GPL-1.0-or-later.json", "referenceNumber": "357", "name": "GNU General Public License v1.0 or later", "licenseId": "GPL-1.0-or-later", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" ], "isOsiApproved": false }, { "reference": "./GPL-2.0.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0.json", "referenceNumber": "147", "name": "GNU General Public License v2.0 only", "licenseId": "GPL-2.0", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", "https://opensource.org/licenses/GPL-2.0" ], "isOsiApproved": true }, { "reference": "./GPL-2.0+.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0+.json", "referenceNumber": "75", "name": "GNU General Public License v2.0 or later", "licenseId": "GPL-2.0+", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", "https://opensource.org/licenses/GPL-2.0" ], "isOsiApproved": true }, { "reference": "./GPL-2.0-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0-only.json", "referenceNumber": "233", "name": "GNU General Public License v2.0 only", "licenseId": "GPL-2.0-only", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", "https://opensource.org/licenses/GPL-2.0" ], "isOsiApproved": true }, { "reference": "./GPL-2.0-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0-or-later.json", "referenceNumber": "56", "name": "GNU General Public License v2.0 or later", "licenseId": "GPL-2.0-or-later", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", "https://opensource.org/licenses/GPL-2.0" ], "isOsiApproved": true }, { "reference": "./GPL-2.0-with-GCC-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0-with-GCC-exception.json", "referenceNumber": "117", "name": "GNU General Public License v2.0 w/GCC Runtime Library exception", "licenseId": "GPL-2.0-with-GCC-exception", "seeAlso": [ "https://gcc.gnu.org/git/?p\u003dgcc.git;a\u003dblob;f\u003dgcc/libgcc1.c;h\u003d762f5143fc6eed57b6797c82710f3538aa52b40b;hb\u003dcb143a3ce4fb417c68f5fa2691a1b1b1053dfba9#l10" ], "isOsiApproved": false }, { "reference": "./GPL-2.0-with-autoconf-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0-with-autoconf-exception.json", "referenceNumber": "355", "name": "GNU General Public License v2.0 w/Autoconf exception", "licenseId": "GPL-2.0-with-autoconf-exception", "seeAlso": [ "http://ac-archive.sourceforge.net/doc/copyright.html" ], "isOsiApproved": false }, { "reference": "./GPL-2.0-with-bison-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0-with-bison-exception.json", "referenceNumber": "378", "name": "GNU General Public License v2.0 w/Bison exception", "licenseId": "GPL-2.0-with-bison-exception", "seeAlso": [ "http://git.savannah.gnu.org/cgit/bison.git/tree/data/yacc.c?id\u003d193d7c7054ba7197b0789e14965b739162319b5e#n141" ], "isOsiApproved": false }, { "reference": "./GPL-2.0-with-classpath-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0-with-classpath-exception.json", "referenceNumber": "60", "name": "GNU General Public License v2.0 w/Classpath exception", "licenseId": "GPL-2.0-with-classpath-exception", "seeAlso": [ "https://www.gnu.org/software/classpath/license.html" ], "isOsiApproved": false }, { "reference": "./GPL-2.0-with-font-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-2.0-with-font-exception.json", "referenceNumber": "375", "name": "GNU General Public License v2.0 w/Font exception", "licenseId": "GPL-2.0-with-font-exception", "seeAlso": [ "https://www.gnu.org/licenses/gpl-faq.html#FontException" ], "isOsiApproved": false }, { "reference": "./GPL-3.0.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-3.0.json", "referenceNumber": "242", "name": "GNU General Public License v3.0 only", "licenseId": "GPL-3.0", "seeAlso": [ "https://www.gnu.org/licenses/gpl-3.0-standalone.html", "https://opensource.org/licenses/GPL-3.0" ], "isOsiApproved": true }, { "reference": "./GPL-3.0+.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-3.0+.json", "referenceNumber": "73", "name": "GNU General Public License v3.0 or later", "licenseId": "GPL-3.0+", "seeAlso": [ "https://www.gnu.org/licenses/gpl-3.0-standalone.html", "https://opensource.org/licenses/GPL-3.0" ], "isOsiApproved": true }, { "reference": "./GPL-3.0-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-3.0-only.json", "referenceNumber": "206", "name": "GNU General Public License v3.0 only", "licenseId": "GPL-3.0-only", "seeAlso": [ "https://www.gnu.org/licenses/gpl-3.0-standalone.html", "https://opensource.org/licenses/GPL-3.0" ], "isOsiApproved": true }, { "reference": "./GPL-3.0-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/GPL-3.0-or-later.json", "referenceNumber": "196", "name": "GNU General Public License v3.0 or later", "licenseId": "GPL-3.0-or-later", "seeAlso": [ "https://www.gnu.org/licenses/gpl-3.0-standalone.html", "https://opensource.org/licenses/GPL-3.0" ], "isOsiApproved": true }, { "reference": "./GPL-3.0-with-GCC-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-3.0-with-GCC-exception.json", "referenceNumber": "221", "name": "GNU General Public License v3.0 w/GCC Runtime Library exception", "licenseId": "GPL-3.0-with-GCC-exception", "seeAlso": [ "https://www.gnu.org/licenses/gcc-exception-3.1.html" ], "isOsiApproved": true }, { "reference": "./GPL-3.0-with-autoconf-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/GPL-3.0-with-autoconf-exception.json", "referenceNumber": "235", "name": "GNU General Public License v3.0 w/Autoconf exception", "licenseId": "GPL-3.0-with-autoconf-exception", "seeAlso": [ "https://www.gnu.org/licenses/autoconf-exception-3.0.html" ], "isOsiApproved": false }, { "reference": "./Giftware.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Giftware.json", "referenceNumber": "369", "name": "Giftware License", "licenseId": "Giftware", "seeAlso": [ "http://liballeg.org/license.html#allegro-4-the-giftware-license" ], "isOsiApproved": false }, { "reference": "./Glide.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Glide.json", "referenceNumber": "374", "name": "3dfx Glide License", "licenseId": "Glide", "seeAlso": [ "http://www.users.on.net/~triforce/glidexp/COPYING.txt" ], "isOsiApproved": false }, { "reference": "./Glulxe.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Glulxe.json", "referenceNumber": "93", "name": "Glulxe License", "licenseId": "Glulxe", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Glulxe" ], "isOsiApproved": false }, { "reference": "./HPND.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/HPND.json", "referenceNumber": "264", "name": "Historical Permission Notice and Disclaimer", "licenseId": "HPND", "seeAlso": [ "https://opensource.org/licenses/HPND" ], "isOsiApproved": true }, { "reference": "./HPND-sell-variant.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/HPND-sell-variant.json", "referenceNumber": "145", "name": "Historical Permission Notice and Disclaimer - sell variant", "licenseId": "HPND-sell-variant", "seeAlso": [ "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/sunrpc/auth_gss/gss_generic_token.c?h\u003dv4.19" ], "isOsiApproved": false }, { "reference": "./HaskellReport.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/HaskellReport.json", "referenceNumber": "122", "name": "Haskell Language Report License", "licenseId": "HaskellReport", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Haskell_Language_Report_License" ], "isOsiApproved": false }, { "reference": "./IBM-pibs.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/IBM-pibs.json", "referenceNumber": "207", "name": "IBM PowerPC Initialization and Boot Software", "licenseId": "IBM-pibs", "seeAlso": [ "http://git.denx.de/?p\u003du-boot.git;a\u003dblob;f\u003darch/powerpc/cpu/ppc4xx/miiphy.c;h\u003d297155fdafa064b955e53e9832de93bfb0cfb85b;hb\u003d9fab4bf4cc077c21e43941866f3f2c196f28670d" ], "isOsiApproved": false }, { "reference": "./ICU.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ICU.json", "referenceNumber": "194", "name": "ICU License", "licenseId": "ICU", "seeAlso": [ "http://source.icu-project.org/repos/icu/icu/trunk/license.html" ], "isOsiApproved": false }, { "reference": "./IJG.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/IJG.json", "referenceNumber": "55", "name": "Independent JPEG Group License", "licenseId": "IJG", "seeAlso": [ "http://dev.w3.org/cvsweb/Amaya/libjpeg/Attic/README?rev\u003d1.2" ], "isOsiApproved": false }, { "reference": "./IPA.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/IPA.json", "referenceNumber": "312", "name": "IPA Font License", "licenseId": "IPA", "seeAlso": [ "https://opensource.org/licenses/IPA" ], "isOsiApproved": true }, { "reference": "./IPL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/IPL-1.0.json", "referenceNumber": "31", "name": "IBM Public License v1.0", "licenseId": "IPL-1.0", "seeAlso": [ "https://opensource.org/licenses/IPL-1.0" ], "isOsiApproved": true }, { "reference": "./ISC.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/ISC.json", "referenceNumber": "110", "name": "ISC License", "licenseId": "ISC", "seeAlso": [ "https://www.isc.org/downloads/software-support-policy/isc-license/", "https://opensource.org/licenses/ISC" ], "isOsiApproved": true }, { "reference": "./ImageMagick.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ImageMagick.json", "referenceNumber": "231", "name": "ImageMagick License", "licenseId": "ImageMagick", "seeAlso": [ "http://www.imagemagick.org/script/license.php" ], "isOsiApproved": false }, { "reference": "./Imlib2.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Imlib2.json", "referenceNumber": "257", "name": "Imlib2 License", "licenseId": "Imlib2", "seeAlso": [ "http://trac.enlightenment.org/e/browser/trunk/imlib2/COPYING", "https://git.enlightenment.org/legacy/imlib2.git/tree/COPYING" ], "isOsiApproved": false }, { "reference": "./Info-ZIP.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Info-ZIP.json", "referenceNumber": "104", "name": "Info-ZIP License", "licenseId": "Info-ZIP", "seeAlso": [ "http://www.info-zip.org/license.html" ], "isOsiApproved": false }, { "reference": "./Intel.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Intel.json", "referenceNumber": "167", "name": "Intel Open Source License", "licenseId": "Intel", "seeAlso": [ "https://opensource.org/licenses/Intel" ], "isOsiApproved": true }, { "reference": "./Intel-ACPI.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Intel-ACPI.json", "referenceNumber": "88", "name": "Intel ACPI Software License Agreement", "licenseId": "Intel-ACPI", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Intel_ACPI_Software_License_Agreement" ], "isOsiApproved": false }, { "reference": "./Interbase-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Interbase-1.0.json", "referenceNumber": "83", "name": "Interbase Public License v1.0", "licenseId": "Interbase-1.0", "seeAlso": [ "https://web.archive.org/web/20060319014854/http://info.borland.com/devsupport/interbase/opensource/IPL.html" ], "isOsiApproved": false }, { "reference": "./JPNIC.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/JPNIC.json", "referenceNumber": "105", "name": "Japan Network Information Center License", "licenseId": "JPNIC", "seeAlso": [ "https://gitlab.isc.org/isc-projects/bind9/blob/master/COPYRIGHT#L366" ], "isOsiApproved": false }, { "reference": "./JSON.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/JSON.json", "referenceNumber": "372", "name": "JSON License", "licenseId": "JSON", "seeAlso": [ "http://www.json.org/license.html" ], "isOsiApproved": false }, { "reference": "./JasPer-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/JasPer-2.0.json", "referenceNumber": "239", "name": "JasPer License", "licenseId": "JasPer-2.0", "seeAlso": [ "http://www.ece.uvic.ca/~mdadams/jasper/LICENSE" ], "isOsiApproved": false }, { "reference": "./LAL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LAL-1.2.json", "referenceNumber": "380", "name": "Licence Art Libre 1.2", "licenseId": "LAL-1.2", "seeAlso": [ "http://artlibre.org/licence/lal/licence-art-libre-12/" ], "isOsiApproved": false }, { "reference": "./LAL-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LAL-1.3.json", "referenceNumber": "156", "name": "Licence Art Libre 1.3", "licenseId": "LAL-1.3", "seeAlso": [ "http://artlibre.org/" ], "isOsiApproved": false }, { "reference": "./LGPL-2.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/LGPL-2.0.json", "referenceNumber": "268", "name": "GNU Library General Public License v2 only", "licenseId": "LGPL-2.0", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" ], "isOsiApproved": true }, { "reference": "./LGPL-2.0+.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/LGPL-2.0+.json", "referenceNumber": "52", "name": "GNU Library General Public License v2 or later", "licenseId": "LGPL-2.0+", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" ], "isOsiApproved": true }, { "reference": "./LGPL-2.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LGPL-2.0-only.json", "referenceNumber": "276", "name": "GNU Library General Public License v2 only", "licenseId": "LGPL-2.0-only", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" ], "isOsiApproved": true }, { "reference": "./LGPL-2.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LGPL-2.0-or-later.json", "referenceNumber": "217", "name": "GNU Library General Public License v2 or later", "licenseId": "LGPL-2.0-or-later", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" ], "isOsiApproved": true }, { "reference": "./LGPL-2.1.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-2.1.json", "referenceNumber": "166", "name": "GNU Lesser General Public License v2.1 only", "licenseId": "LGPL-2.1", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", "https://opensource.org/licenses/LGPL-2.1" ], "isOsiApproved": true }, { "reference": "./LGPL-2.1+.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-2.1+.json", "referenceNumber": "64", "name": "GNU Library General Public License v2.1 or later", "licenseId": "LGPL-2.1+", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", "https://opensource.org/licenses/LGPL-2.1" ], "isOsiApproved": true }, { "reference": "./LGPL-2.1-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-2.1-only.json", "referenceNumber": "2", "name": "GNU Lesser General Public License v2.1 only", "licenseId": "LGPL-2.1-only", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", "https://opensource.org/licenses/LGPL-2.1" ], "isOsiApproved": true }, { "reference": "./LGPL-2.1-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-2.1-or-later.json", "referenceNumber": "338", "name": "GNU Lesser General Public License v2.1 or later", "licenseId": "LGPL-2.1-or-later", "seeAlso": [ "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", "https://opensource.org/licenses/LGPL-2.1" ], "isOsiApproved": true }, { "reference": "./LGPL-3.0.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-3.0.json", "referenceNumber": "210", "name": "GNU Lesser General Public License v3.0 only", "licenseId": "LGPL-3.0", "seeAlso": [ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", "https://opensource.org/licenses/LGPL-3.0" ], "isOsiApproved": true }, { "reference": "./LGPL-3.0+.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-3.0+.json", "referenceNumber": "152", "name": "GNU Lesser General Public License v3.0 or later", "licenseId": "LGPL-3.0+", "seeAlso": [ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", "https://opensource.org/licenses/LGPL-3.0" ], "isOsiApproved": true }, { "reference": "./LGPL-3.0-only.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-3.0-only.json", "referenceNumber": "254", "name": "GNU Lesser General Public License v3.0 only", "licenseId": "LGPL-3.0-only", "seeAlso": [ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", "https://opensource.org/licenses/LGPL-3.0" ], "isOsiApproved": true }, { "reference": "./LGPL-3.0-or-later.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LGPL-3.0-or-later.json", "referenceNumber": "301", "name": "GNU Lesser General Public License v3.0 or later", "licenseId": "LGPL-3.0-or-later", "seeAlso": [ "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", "https://opensource.org/licenses/LGPL-3.0" ], "isOsiApproved": true }, { "reference": "./LGPLLR.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LGPLLR.json", "referenceNumber": "103", "name": "Lesser General Public License For Linguistic Resources", "licenseId": "LGPLLR", "seeAlso": [ "http://www-igm.univ-mlv.fr/~unitex/lgpllr.html" ], "isOsiApproved": false }, { "reference": "./LPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LPL-1.0.json", "referenceNumber": "89", "name": "Lucent Public License Version 1.0", "licenseId": "LPL-1.0", "seeAlso": [ "https://opensource.org/licenses/LPL-1.0" ], "isOsiApproved": true }, { "reference": "./LPL-1.02.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LPL-1.02.json", "referenceNumber": "131", "name": "Lucent Public License v1.02", "licenseId": "LPL-1.02", "seeAlso": [ "http://plan9.bell-labs.com/plan9/license.html", "https://opensource.org/licenses/LPL-1.02" ], "isOsiApproved": true }, { "reference": "./LPPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LPPL-1.0.json", "referenceNumber": "259", "name": "LaTeX Project Public License v1.0", "licenseId": "LPPL-1.0", "seeAlso": [ "http://www.latex-project.org/lppl/lppl-1-0.txt" ], "isOsiApproved": false }, { "reference": "./LPPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LPPL-1.1.json", "referenceNumber": "309", "name": "LaTeX Project Public License v1.1", "licenseId": "LPPL-1.1", "seeAlso": [ "http://www.latex-project.org/lppl/lppl-1-1.txt" ], "isOsiApproved": false }, { "reference": "./LPPL-1.2.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LPPL-1.2.json", "referenceNumber": "392", "name": "LaTeX Project Public License v1.2", "licenseId": "LPPL-1.2", "seeAlso": [ "http://www.latex-project.org/lppl/lppl-1-2.txt" ], "isOsiApproved": false }, { "reference": "./LPPL-1.3a.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/LPPL-1.3a.json", "referenceNumber": "305", "name": "LaTeX Project Public License v1.3a", "licenseId": "LPPL-1.3a", "seeAlso": [ "http://www.latex-project.org/lppl/lppl-1-3a.txt" ], "isOsiApproved": false }, { "reference": "./LPPL-1.3c.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LPPL-1.3c.json", "referenceNumber": "326", "name": "LaTeX Project Public License v1.3c", "licenseId": "LPPL-1.3c", "seeAlso": [ "http://www.latex-project.org/lppl/lppl-1-3c.txt", "https://opensource.org/licenses/LPPL-1.3c" ], "isOsiApproved": true }, { "reference": "./Latex2e.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Latex2e.json", "referenceNumber": "283", "name": "Latex2e License", "licenseId": "Latex2e", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Latex2e" ], "isOsiApproved": false }, { "reference": "./Leptonica.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Leptonica.json", "referenceNumber": "159", "name": "Leptonica License", "licenseId": "Leptonica", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Leptonica" ], "isOsiApproved": false }, { "reference": "./LiLiQ-P-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LiLiQ-P-1.1.json", "referenceNumber": "379", "name": "Licence Libre du Québec – Permissive version 1.1", "licenseId": "LiLiQ-P-1.1", "seeAlso": [ "https://forge.gouv.qc.ca/licence/fr/liliq-v1-1/", "http://opensource.org/licenses/LiLiQ-P-1.1" ], "isOsiApproved": true }, { "reference": "./LiLiQ-R-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LiLiQ-R-1.1.json", "referenceNumber": "286", "name": "Licence Libre du Québec – Réciprocité version 1.1", "licenseId": "LiLiQ-R-1.1", "seeAlso": [ "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-liliq-r-v1-1/", "http://opensource.org/licenses/LiLiQ-R-1.1" ], "isOsiApproved": true }, { "reference": "./LiLiQ-Rplus-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/LiLiQ-Rplus-1.1.json", "referenceNumber": "139", "name": "Licence Libre du Québec – Réciprocité forte version 1.1", "licenseId": "LiLiQ-Rplus-1.1", "seeAlso": [ "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-forte-liliq-r-v1-1/", "http://opensource.org/licenses/LiLiQ-Rplus-1.1" ], "isOsiApproved": true }, { "reference": "./Libpng.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Libpng.json", "referenceNumber": "101", "name": "libpng License", "licenseId": "Libpng", "seeAlso": [ "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" ], "isOsiApproved": false }, { "reference": "./Linux-OpenIB.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Linux-OpenIB.json", "referenceNumber": "5", "name": "Linux Kernel Variant of OpenIB.org license", "licenseId": "Linux-OpenIB", "seeAlso": [ "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/core/sa.h" ], "isOsiApproved": false }, { "reference": "./MIT.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/MIT.json", "referenceNumber": "201", "name": "MIT License", "licenseId": "MIT", "seeAlso": [ "https://opensource.org/licenses/MIT" ], "isOsiApproved": true }, { "reference": "./MIT-0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MIT-0.json", "referenceNumber": "6", "name": "MIT No Attribution", "licenseId": "MIT-0", "seeAlso": [ "https://github.com/aws/mit-0", "https://romanrm.net/mit-zero", "https://github.com/awsdocs/aws-cloud9-user-guide/blob/master/LICENSE-SAMPLECODE" ], "isOsiApproved": true }, { "reference": "./MIT-CMU.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MIT-CMU.json", "referenceNumber": "9", "name": "CMU License", "licenseId": "MIT-CMU", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing:MIT?rd\u003dLicensing/MIT#CMU_Style", "https://github.com/python-pillow/Pillow/blob/fffb426092c8db24a5f4b6df243a8a3c01fb63cd/LICENSE" ], "isOsiApproved": false }, { "reference": "./MIT-advertising.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MIT-advertising.json", "referenceNumber": "8", "name": "Enlightenment License (e16)", "licenseId": "MIT-advertising", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/MIT_With_Advertising" ], "isOsiApproved": false }, { "reference": "./MIT-enna.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MIT-enna.json", "referenceNumber": "25", "name": "enna License", "licenseId": "MIT-enna", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/MIT#enna" ], "isOsiApproved": false }, { "reference": "./MIT-feh.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MIT-feh.json", "referenceNumber": "38", "name": "feh License", "licenseId": "MIT-feh", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/MIT#feh" ], "isOsiApproved": false }, { "reference": "./MITNFA.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MITNFA.json", "referenceNumber": "294", "name": "MIT +no-false-attribs license", "licenseId": "MITNFA", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/MITNFA" ], "isOsiApproved": false }, { "reference": "./MPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MPL-1.0.json", "referenceNumber": "49", "name": "Mozilla Public License 1.0", "licenseId": "MPL-1.0", "seeAlso": [ "http://www.mozilla.org/MPL/MPL-1.0.html", "https://opensource.org/licenses/MPL-1.0" ], "isOsiApproved": true }, { "reference": "./MPL-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/MPL-1.1.json", "referenceNumber": "304", "name": "Mozilla Public License 1.1", "licenseId": "MPL-1.1", "seeAlso": [ "http://www.mozilla.org/MPL/MPL-1.1.html", "https://opensource.org/licenses/MPL-1.1" ], "isOsiApproved": true }, { "reference": "./MPL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/MPL-2.0.json", "referenceNumber": "234", "name": "Mozilla Public License 2.0", "licenseId": "MPL-2.0", "seeAlso": [ "http://www.mozilla.org/MPL/2.0/", "https://opensource.org/licenses/MPL-2.0" ], "isOsiApproved": true }, { "reference": "./MPL-2.0-no-copyleft-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MPL-2.0-no-copyleft-exception.json", "referenceNumber": "303", "name": "Mozilla Public License 2.0 (no copyleft exception)", "licenseId": "MPL-2.0-no-copyleft-exception", "seeAlso": [ "http://www.mozilla.org/MPL/2.0/", "https://opensource.org/licenses/MPL-2.0" ], "isOsiApproved": true }, { "reference": "./MS-PL.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/MS-PL.json", "referenceNumber": "336", "name": "Microsoft Public License", "licenseId": "MS-PL", "seeAlso": [ "http://www.microsoft.com/opensource/licenses.mspx", "https://opensource.org/licenses/MS-PL" ], "isOsiApproved": true }, { "reference": "./MS-RL.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/MS-RL.json", "referenceNumber": "280", "name": "Microsoft Reciprocal License", "licenseId": "MS-RL", "seeAlso": [ "http://www.microsoft.com/opensource/licenses.mspx", "https://opensource.org/licenses/MS-RL" ], "isOsiApproved": true }, { "reference": "./MTLL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MTLL.json", "referenceNumber": "181", "name": "Matrix Template Library License", "licenseId": "MTLL", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Matrix_Template_Library_License" ], "isOsiApproved": false }, { "reference": "./MakeIndex.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MakeIndex.json", "referenceNumber": "187", "name": "MakeIndex License", "licenseId": "MakeIndex", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/MakeIndex" ], "isOsiApproved": false }, { "reference": "./MirOS.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/MirOS.json", "referenceNumber": "299", "name": "MirOS License", "licenseId": "MirOS", "seeAlso": [ "https://opensource.org/licenses/MirOS" ], "isOsiApproved": true }, { "reference": "./Motosoto.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Motosoto.json", "referenceNumber": "317", "name": "Motosoto License", "licenseId": "Motosoto", "seeAlso": [ "https://opensource.org/licenses/Motosoto" ], "isOsiApproved": true }, { "reference": "./Multics.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Multics.json", "referenceNumber": "63", "name": "Multics License", "licenseId": "Multics", "seeAlso": [ "https://opensource.org/licenses/Multics" ], "isOsiApproved": true }, { "reference": "./Mup.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Mup.json", "referenceNumber": "353", "name": "Mup License", "licenseId": "Mup", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Mup" ], "isOsiApproved": false }, { "reference": "./NASA-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NASA-1.3.json", "referenceNumber": "87", "name": "NASA Open Source Agreement 1.3", "licenseId": "NASA-1.3", "seeAlso": [ "http://ti.arc.nasa.gov/opensource/nosa/", "https://opensource.org/licenses/NASA-1.3" ], "isOsiApproved": true }, { "reference": "./NBPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NBPL-1.0.json", "referenceNumber": "361", "name": "Net Boolean Public License v1", "licenseId": "NBPL-1.0", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d37b4b3f6cc4bf34e1d3dec61e69914b9819d8894" ], "isOsiApproved": false }, { "reference": "./NCSA.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/NCSA.json", "referenceNumber": "58", "name": "University of Illinois/NCSA Open Source License", "licenseId": "NCSA", "seeAlso": [ "http://otm.illinois.edu/uiuc_openSource", "https://opensource.org/licenses/NCSA" ], "isOsiApproved": true }, { "reference": "./NGPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NGPL.json", "referenceNumber": "71", "name": "Nethack General Public License", "licenseId": "NGPL", "seeAlso": [ "https://opensource.org/licenses/NGPL" ], "isOsiApproved": true }, { "reference": "./NLOD-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NLOD-1.0.json", "referenceNumber": "209", "name": "Norwegian Licence for Open Government Data", "licenseId": "NLOD-1.0", "seeAlso": [ "http://data.norge.no/nlod/en/1.0" ], "isOsiApproved": false }, { "reference": "./NLPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NLPL.json", "referenceNumber": "344", "name": "No Limit Public License", "licenseId": "NLPL", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/NLPL" ], "isOsiApproved": false }, { "reference": "./NOSL.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/NOSL.json", "referenceNumber": "383", "name": "Netizen Open Source License", "licenseId": "NOSL", "seeAlso": [ "http://bits.netizen.com.au/licenses/NOSL/nosl.txt" ], "isOsiApproved": false }, { "reference": "./NPL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/NPL-1.0.json", "referenceNumber": "328", "name": "Netscape Public License v1.0", "licenseId": "NPL-1.0", "seeAlso": [ "http://www.mozilla.org/MPL/NPL/1.0/" ], "isOsiApproved": false }, { "reference": "./NPL-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/NPL-1.1.json", "referenceNumber": "185", "name": "Netscape Public License v1.1", "licenseId": "NPL-1.1", "seeAlso": [ "http://www.mozilla.org/MPL/NPL/1.1/" ], "isOsiApproved": false }, { "reference": "./NPOSL-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NPOSL-3.0.json", "referenceNumber": "222", "name": "Non-Profit Open Software License 3.0", "licenseId": "NPOSL-3.0", "seeAlso": [ "https://opensource.org/licenses/NOSL3.0" ], "isOsiApproved": true }, { "reference": "./NRL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NRL.json", "referenceNumber": "53", "name": "NRL License", "licenseId": "NRL", "seeAlso": [ "http://web.mit.edu/network/isakmp/nrllicense.html" ], "isOsiApproved": false }, { "reference": "./NTP.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NTP.json", "referenceNumber": "261", "name": "NTP License", "licenseId": "NTP", "seeAlso": [ "https://opensource.org/licenses/NTP" ], "isOsiApproved": true }, { "reference": "./Naumen.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Naumen.json", "referenceNumber": "278", "name": "Naumen Public License", "licenseId": "Naumen", "seeAlso": [ "https://opensource.org/licenses/Naumen" ], "isOsiApproved": true }, { "reference": "./Net-SNMP.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Net-SNMP.json", "referenceNumber": "284", "name": "Net-SNMP License", "licenseId": "Net-SNMP", "seeAlso": [ "http://net-snmp.sourceforge.net/about/license.html" ], "isOsiApproved": false }, { "reference": "./NetCDF.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/NetCDF.json", "referenceNumber": "46", "name": "NetCDF license", "licenseId": "NetCDF", "seeAlso": [ "http://www.unidata.ucar.edu/software/netcdf/copyright.html" ], "isOsiApproved": false }, { "reference": "./Newsletr.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Newsletr.json", "referenceNumber": "279", "name": "Newsletr License", "licenseId": "Newsletr", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Newsletr" ], "isOsiApproved": false }, { "reference": "./Nokia.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Nokia.json", "referenceNumber": "327", "name": "Nokia Open Source License", "licenseId": "Nokia", "seeAlso": [ "https://opensource.org/licenses/nokia" ], "isOsiApproved": true }, { "reference": "./Noweb.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Noweb.json", "referenceNumber": "364", "name": "Noweb License", "licenseId": "Noweb", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Noweb" ], "isOsiApproved": false }, { "reference": "./Nunit.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Nunit.json", "referenceNumber": "288", "name": "Nunit License", "licenseId": "Nunit", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Nunit" ], "isOsiApproved": false }, { "reference": "./OCCT-PL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OCCT-PL.json", "referenceNumber": "282", "name": "Open CASCADE Technology Public License", "licenseId": "OCCT-PL", "seeAlso": [ "http://www.opencascade.com/content/occt-public-license" ], "isOsiApproved": false }, { "reference": "./OCLC-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OCLC-2.0.json", "referenceNumber": "111", "name": "OCLC Research Public License 2.0", "licenseId": "OCLC-2.0", "seeAlso": [ "http://www.oclc.org/research/activities/software/license/v2final.htm", "https://opensource.org/licenses/OCLC-2.0" ], "isOsiApproved": true }, { "reference": "./ODC-By-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ODC-By-1.0.json", "referenceNumber": "144", "name": "Open Data Commons Attribution License v1.0", "licenseId": "ODC-By-1.0", "seeAlso": [ "https://opendatacommons.org/licenses/by/1.0/" ], "isOsiApproved": false }, { "reference": "./ODbL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/ODbL-1.0.json", "referenceNumber": "246", "name": "ODC Open Database License v1.0", "licenseId": "ODbL-1.0", "seeAlso": [ "http://www.opendatacommons.org/licenses/odbl/1.0/" ], "isOsiApproved": false }, { "reference": "./OFL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OFL-1.0.json", "referenceNumber": "153", "name": "SIL Open Font License 1.0", "licenseId": "OFL-1.0", "seeAlso": [ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" ], "isOsiApproved": false }, { "reference": "./OFL-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OFL-1.1.json", "referenceNumber": "315", "name": "SIL Open Font License 1.1", "licenseId": "OFL-1.1", "seeAlso": [ "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", "https://opensource.org/licenses/OFL-1.1" ], "isOsiApproved": true }, { "reference": "./OGL-UK-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OGL-UK-1.0.json", "referenceNumber": "116", "name": "Open Government Licence v1.0", "licenseId": "OGL-UK-1.0", "seeAlso": [ "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/1/" ], "isOsiApproved": false }, { "reference": "./OGL-UK-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OGL-UK-2.0.json", "referenceNumber": "289", "name": "Open Government Licence v2.0", "licenseId": "OGL-UK-2.0", "seeAlso": [ "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/" ], "isOsiApproved": false }, { "reference": "./OGL-UK-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OGL-UK-3.0.json", "referenceNumber": "226", "name": "Open Government Licence v3.0", "licenseId": "OGL-UK-3.0", "seeAlso": [ "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/" ], "isOsiApproved": false }, { "reference": "./OGTSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OGTSL.json", "referenceNumber": "125", "name": "Open Group Test Suite License", "licenseId": "OGTSL", "seeAlso": [ "http://www.opengroup.org/testing/downloads/The_Open_Group_TSL.txt", "https://opensource.org/licenses/OGTSL" ], "isOsiApproved": true }, { "reference": "./OLDAP-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-1.1.json", "referenceNumber": "97", "name": "Open LDAP Public License v1.1", "licenseId": "OLDAP-1.1", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d806557a5ad59804ef3a44d5abfbe91d706b0791f" ], "isOsiApproved": false }, { "reference": "./OLDAP-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-1.2.json", "referenceNumber": "190", "name": "Open LDAP Public License v1.2", "licenseId": "OLDAP-1.2", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d42b0383c50c299977b5893ee695cf4e486fb0dc7" ], "isOsiApproved": false }, { "reference": "./OLDAP-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-1.3.json", "referenceNumber": "106", "name": "Open LDAP Public License v1.3", "licenseId": "OLDAP-1.3", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003de5f8117f0ce088d0bd7a8e18ddf37eaa40eb09b1" ], "isOsiApproved": false }, { "reference": "./OLDAP-1.4.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-1.4.json", "referenceNumber": "30", "name": "Open LDAP Public License v1.4", "licenseId": "OLDAP-1.4", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dc9f95c2f3f2ffb5e0ae55fe7388af75547660941" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.0.json", "referenceNumber": "266", "name": "Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)", "licenseId": "OLDAP-2.0", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcbf50f4e1185a21abd4c0a54d3f4341fe28f36ea" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.0.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.0.1.json", "referenceNumber": "350", "name": "Open LDAP Public License v2.0.1", "licenseId": "OLDAP-2.0.1", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db6d68acd14e51ca3aab4428bf26522aa74873f0e" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.1.json", "referenceNumber": "154", "name": "Open LDAP Public License v2.1", "licenseId": "OLDAP-2.1", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db0d176738e96a0d3b9f85cb51e140a86f21be715" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.2.json", "referenceNumber": "362", "name": "Open LDAP Public License v2.2", "licenseId": "OLDAP-2.2", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d470b0c18ec67621c85881b2733057fecf4a1acc3" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.2.1.json", "referenceNumber": "339", "name": "Open LDAP Public License v2.2.1", "licenseId": "OLDAP-2.2.1", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d4bc786f34b50aa301be6f5600f58a980070f481e" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.2.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.2.2.json", "referenceNumber": "199", "name": "Open LDAP Public License 2.2.2", "licenseId": "OLDAP-2.2.2", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003ddf2cc1e21eb7c160695f5b7cffd6296c151ba188" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.3.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.3.json", "referenceNumber": "164", "name": "Open LDAP Public License v2.3", "licenseId": "OLDAP-2.3", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dd32cf54a32d581ab475d23c810b0a7fbaf8d63c3" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.4.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.4.json", "referenceNumber": "66", "name": "Open LDAP Public License v2.4", "licenseId": "OLDAP-2.4", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcd1284c4a91a8a380d904eee68d1583f989ed386" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.5.json", "referenceNumber": "183", "name": "Open LDAP Public License v2.5", "licenseId": "OLDAP-2.5", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d6852b9d90022e8593c98205413380536b1b5a7cf" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.6.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.6.json", "referenceNumber": "61", "name": "Open LDAP Public License v2.6", "licenseId": "OLDAP-2.6", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d1cae062821881f41b73012ba816434897abf4205" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.7.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.7.json", "referenceNumber": "123", "name": "Open LDAP Public License v2.7", "licenseId": "OLDAP-2.7", "seeAlso": [ "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d47c2415c1df81556eeb39be6cad458ef87c534a2" ], "isOsiApproved": false }, { "reference": "./OLDAP-2.8.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OLDAP-2.8.json", "referenceNumber": "37", "name": "Open LDAP Public License v2.8", "licenseId": "OLDAP-2.8", "seeAlso": [ "http://www.openldap.org/software/release/license.html" ], "isOsiApproved": false }, { "reference": "./OML.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OML.json", "referenceNumber": "65", "name": "Open Market License", "licenseId": "OML", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Open_Market_License" ], "isOsiApproved": false }, { "reference": "./OPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OPL-1.0.json", "referenceNumber": "343", "name": "Open Public License v1.0", "licenseId": "OPL-1.0", "seeAlso": [ "http://old.koalateam.com/jackaroo/OPL_1_0.TXT", "https://fedoraproject.org/wiki/Licensing/Open_Public_License" ], "isOsiApproved": false }, { "reference": "./OSET-PL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/OSET-PL-2.1.json", "referenceNumber": "291", "name": "OSET Public License version 2.1", "licenseId": "OSET-PL-2.1", "seeAlso": [ "http://www.osetfoundation.org/public-license", "https://opensource.org/licenses/OPL-2.1" ], "isOsiApproved": true }, { "reference": "./OSL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OSL-1.0.json", "referenceNumber": "85", "name": "Open Software License 1.0", "licenseId": "OSL-1.0", "seeAlso": [ "https://opensource.org/licenses/OSL-1.0" ], "isOsiApproved": true }, { "reference": "./OSL-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OSL-1.1.json", "referenceNumber": "334", "name": "Open Software License 1.1", "licenseId": "OSL-1.1", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/OSL1.1" ], "isOsiApproved": false }, { "reference": "./OSL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OSL-2.0.json", "referenceNumber": "20", "name": "Open Software License 2.0", "licenseId": "OSL-2.0", "seeAlso": [ "http://web.archive.org/web/20041020171434/http://www.rosenlaw.com/osl2.0.html" ], "isOsiApproved": true }, { "reference": "./OSL-2.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OSL-2.1.json", "referenceNumber": "24", "name": "Open Software License 2.1", "licenseId": "OSL-2.1", "seeAlso": [ "http://web.archive.org/web/20050212003940/http://www.rosenlaw.com/osl21.htm", "https://opensource.org/licenses/OSL-2.1" ], "isOsiApproved": true }, { "reference": "./OSL-3.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OSL-3.0.json", "referenceNumber": "100", "name": "Open Software License 3.0", "licenseId": "OSL-3.0", "seeAlso": [ "https://web.archive.org/web/20120101081418/http://rosenlaw.com:80/OSL3.0.htm", "https://opensource.org/licenses/OSL-3.0" ], "isOsiApproved": true }, { "reference": "./OpenSSL.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/OpenSSL.json", "referenceNumber": "249", "name": "OpenSSL License", "licenseId": "OpenSSL", "seeAlso": [ "http://www.openssl.org/source/license.html" ], "isOsiApproved": false }, { "reference": "./PDDL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/PDDL-1.0.json", "referenceNumber": "14", "name": "ODC Public Domain Dedication \u0026 License 1.0", "licenseId": "PDDL-1.0", "seeAlso": [ "http://opendatacommons.org/licenses/pddl/1.0/" ], "isOsiApproved": false }, { "reference": "./PHP-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/PHP-3.0.json", "referenceNumber": "385", "name": "PHP License v3.0", "licenseId": "PHP-3.0", "seeAlso": [ "http://www.php.net/license/3_0.txt", "https://opensource.org/licenses/PHP-3.0" ], "isOsiApproved": true }, { "reference": "./PHP-3.01.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/PHP-3.01.json", "referenceNumber": "316", "name": "PHP License v3.01", "licenseId": "PHP-3.01", "seeAlso": [ "http://www.php.net/license/3_01.txt" ], "isOsiApproved": false }, { "reference": "./Parity-6.0.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Parity-6.0.0.json", "referenceNumber": "91", "name": "The Parity Public License 6.0.0", "licenseId": "Parity-6.0.0", "seeAlso": [ "https://paritylicense.com/versions/6.0.0.html" ], "isOsiApproved": false }, { "reference": "./Plexus.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Plexus.json", "referenceNumber": "225", "name": "Plexus Classworlds License", "licenseId": "Plexus", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Plexus_Classworlds_License" ], "isOsiApproved": false }, { "reference": "./PostgreSQL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/PostgreSQL.json", "referenceNumber": "247", "name": "PostgreSQL License", "licenseId": "PostgreSQL", "seeAlso": [ "http://www.postgresql.org/about/licence", "https://opensource.org/licenses/PostgreSQL" ], "isOsiApproved": true }, { "reference": "./Python-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Python-2.0.json", "referenceNumber": "35", "name": "Python License 2.0", "licenseId": "Python-2.0", "seeAlso": [ "https://opensource.org/licenses/Python-2.0" ], "isOsiApproved": true }, { "reference": "./QPL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/QPL-1.0.json", "referenceNumber": "27", "name": "Q Public License 1.0", "licenseId": "QPL-1.0", "seeAlso": [ "http://doc.qt.nokia.com/3.3/license.html", "https://opensource.org/licenses/QPL-1.0" ], "isOsiApproved": true }, { "reference": "./Qhull.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Qhull.json", "referenceNumber": "67", "name": "Qhull License", "licenseId": "Qhull", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Qhull" ], "isOsiApproved": false }, { "reference": "./RHeCos-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/RHeCos-1.1.json", "referenceNumber": "149", "name": "Red Hat eCos Public License v1.1", "licenseId": "RHeCos-1.1", "seeAlso": [ "http://ecos.sourceware.org/old-license.html" ], "isOsiApproved": false }, { "reference": "./RPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/RPL-1.1.json", "referenceNumber": "269", "name": "Reciprocal Public License 1.1", "licenseId": "RPL-1.1", "seeAlso": [ "https://opensource.org/licenses/RPL-1.1" ], "isOsiApproved": true }, { "reference": "./RPL-1.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/RPL-1.5.json", "referenceNumber": "227", "name": "Reciprocal Public License 1.5", "licenseId": "RPL-1.5", "seeAlso": [ "https://opensource.org/licenses/RPL-1.5" ], "isOsiApproved": true }, { "reference": "./RPSL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/RPSL-1.0.json", "referenceNumber": "273", "name": "RealNetworks Public Source License v1.0", "licenseId": "RPSL-1.0", "seeAlso": [ "https://helixcommunity.org/content/rpsl", "https://opensource.org/licenses/RPSL-1.0" ], "isOsiApproved": true }, { "reference": "./RSA-MD.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/RSA-MD.json", "referenceNumber": "82", "name": "RSA Message-Digest License ", "licenseId": "RSA-MD", "seeAlso": [ "http://www.faqs.org/rfcs/rfc1321.html" ], "isOsiApproved": false }, { "reference": "./RSCPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/RSCPL.json", "referenceNumber": "211", "name": "Ricoh Source Code Public License", "licenseId": "RSCPL", "seeAlso": [ "http://wayback.archive.org/web/20060715140826/http://www.risource.org/RPL/RPL-1.0A.shtml", "https://opensource.org/licenses/RSCPL" ], "isOsiApproved": true }, { "reference": "./Rdisc.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Rdisc.json", "referenceNumber": "295", "name": "Rdisc License", "licenseId": "Rdisc", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Rdisc_License" ], "isOsiApproved": false }, { "reference": "./Ruby.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Ruby.json", "referenceNumber": "263", "name": "Ruby License", "licenseId": "Ruby", "seeAlso": [ "http://www.ruby-lang.org/en/LICENSE.txt" ], "isOsiApproved": false }, { "reference": "./SAX-PD.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SAX-PD.json", "referenceNumber": "140", "name": "Sax Public Domain Notice", "licenseId": "SAX-PD", "seeAlso": [ "http://www.saxproject.org/copying.html" ], "isOsiApproved": false }, { "reference": "./SCEA.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SCEA.json", "referenceNumber": "16", "name": "SCEA Shared Source License", "licenseId": "SCEA", "seeAlso": [ "http://research.scea.com/scea_shared_source_license.html" ], "isOsiApproved": false }, { "reference": "./SGI-B-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SGI-B-1.0.json", "referenceNumber": "90", "name": "SGI Free Software License B v1.0", "licenseId": "SGI-B-1.0", "seeAlso": [ "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.1.0.html" ], "isOsiApproved": false }, { "reference": "./SGI-B-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SGI-B-1.1.json", "referenceNumber": "241", "name": "SGI Free Software License B v1.1", "licenseId": "SGI-B-1.1", "seeAlso": [ "http://oss.sgi.com/projects/FreeB/" ], "isOsiApproved": false }, { "reference": "./SGI-B-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/SGI-B-2.0.json", "referenceNumber": "272", "name": "SGI Free Software License B v2.0", "licenseId": "SGI-B-2.0", "seeAlso": [ "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.2.0.pdf" ], "isOsiApproved": false }, { "reference": "./SHL-0.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SHL-0.5.json", "referenceNumber": "72", "name": "Solderpad Hardware License v0.5", "licenseId": "SHL-0.5", "seeAlso": [ "https://solderpad.org/licenses/SHL-0.5/" ], "isOsiApproved": false }, { "reference": "./SHL-0.51.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SHL-0.51.json", "referenceNumber": "314", "name": "Solderpad Hardware License, Version 0.51", "licenseId": "SHL-0.51", "seeAlso": [ "https://solderpad.org/licenses/SHL-0.51/" ], "isOsiApproved": false }, { "reference": "./SISSL.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/SISSL.json", "referenceNumber": "74", "name": "Sun Industry Standards Source License v1.1", "licenseId": "SISSL", "seeAlso": [ "http://www.openoffice.org/licenses/sissl_license.html", "https://opensource.org/licenses/SISSL" ], "isOsiApproved": true }, { "reference": "./SISSL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SISSL-1.2.json", "referenceNumber": "7", "name": "Sun Industry Standards Source License v1.2", "licenseId": "SISSL-1.2", "seeAlso": [ "http://gridscheduler.sourceforge.net/Gridengine_SISSL_license.html" ], "isOsiApproved": false }, { "reference": "./SMLNJ.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/SMLNJ.json", "referenceNumber": "296", "name": "Standard ML of New Jersey License", "licenseId": "SMLNJ", "seeAlso": [ "https://www.smlnj.org/license.html" ], "isOsiApproved": false }, { "reference": "./SMPPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SMPPL.json", "referenceNumber": "127", "name": "Secure Messaging Protocol Public License", "licenseId": "SMPPL", "seeAlso": [ "https://github.com/dcblake/SMP/blob/master/Documentation/License.txt" ], "isOsiApproved": false }, { "reference": "./SNIA.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SNIA.json", "referenceNumber": "230", "name": "SNIA Public License 1.1", "licenseId": "SNIA", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/SNIA_Public_License" ], "isOsiApproved": false }, { "reference": "./SPL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/SPL-1.0.json", "referenceNumber": "54", "name": "Sun Public License v1.0", "licenseId": "SPL-1.0", "seeAlso": [ "https://opensource.org/licenses/SPL-1.0" ], "isOsiApproved": true }, { "reference": "./SSPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SSPL-1.0.json", "referenceNumber": "356", "name": "Server Side Public License, v 1", "licenseId": "SSPL-1.0", "seeAlso": [ "https://www.mongodb.com/licensing/server-side-public-license" ], "isOsiApproved": false }, { "reference": "./SWL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SWL.json", "referenceNumber": "208", "name": "Scheme Widget Library (SWL) Software License Agreement", "licenseId": "SWL", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/SWL" ], "isOsiApproved": false }, { "reference": "./Saxpath.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Saxpath.json", "referenceNumber": "18", "name": "Saxpath License", "licenseId": "Saxpath", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Saxpath_License" ], "isOsiApproved": false }, { "reference": "./Sendmail.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Sendmail.json", "referenceNumber": "151", "name": "Sendmail License", "licenseId": "Sendmail", "seeAlso": [ "http://www.sendmail.com/pdfs/open_source/sendmail_license.pdf", "https://web.archive.org/web/20160322142305/https://www.sendmail.com/pdfs/open_source/sendmail_license.pdf" ], "isOsiApproved": false }, { "reference": "./Sendmail-8.23.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Sendmail-8.23.json", "referenceNumber": "41", "name": "Sendmail License 8.23", "licenseId": "Sendmail-8.23", "seeAlso": [ "https://www.proofpoint.com/sites/default/files/sendmail-license.pdf", "https://web.archive.org/web/20181003101040/https://www.proofpoint.com/sites/default/files/sendmail-license.pdf" ], "isOsiApproved": false }, { "reference": "./SimPL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SimPL-2.0.json", "referenceNumber": "184", "name": "Simple Public License 2.0", "licenseId": "SimPL-2.0", "seeAlso": [ "https://opensource.org/licenses/SimPL-2.0" ], "isOsiApproved": true }, { "reference": "./Sleepycat.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Sleepycat.json", "referenceNumber": "290", "name": "Sleepycat License", "licenseId": "Sleepycat", "seeAlso": [ "https://opensource.org/licenses/Sleepycat" ], "isOsiApproved": true }, { "reference": "./Spencer-86.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Spencer-86.json", "referenceNumber": "313", "name": "Spencer License 86", "licenseId": "Spencer-86", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License" ], "isOsiApproved": false }, { "reference": "./Spencer-94.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Spencer-94.json", "referenceNumber": "29", "name": "Spencer License 94", "licenseId": "Spencer-94", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License" ], "isOsiApproved": false }, { "reference": "./Spencer-99.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Spencer-99.json", "referenceNumber": "386", "name": "Spencer License 99", "licenseId": "Spencer-99", "seeAlso": [ "http://www.opensource.apple.com/source/tcl/tcl-5/tcl/generic/regfronts.c" ], "isOsiApproved": false }, { "reference": "./StandardML-NJ.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/StandardML-NJ.json", "referenceNumber": "219", "name": "Standard ML of New Jersey License", "licenseId": "StandardML-NJ", "seeAlso": [ "http://www.smlnj.org//license.html" ], "isOsiApproved": false }, { "reference": "./SugarCRM-1.1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/SugarCRM-1.1.3.json", "referenceNumber": "292", "name": "SugarCRM Public License v1.1.3", "licenseId": "SugarCRM-1.1.3", "seeAlso": [ "http://www.sugarcrm.com/crm/SPL" ], "isOsiApproved": false }, { "reference": "./TAPR-OHL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TAPR-OHL-1.0.json", "referenceNumber": "267", "name": "TAPR Open Hardware License v1.0", "licenseId": "TAPR-OHL-1.0", "seeAlso": [ "https://www.tapr.org/OHL" ], "isOsiApproved": false }, { "reference": "./TCL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TCL.json", "referenceNumber": "265", "name": "TCL/TK License", "licenseId": "TCL", "seeAlso": [ "http://www.tcl.tk/software/tcltk/license.html", "https://fedoraproject.org/wiki/Licensing/TCL" ], "isOsiApproved": false }, { "reference": "./TCP-wrappers.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TCP-wrappers.json", "referenceNumber": "274", "name": "TCP Wrappers License", "licenseId": "TCP-wrappers", "seeAlso": [ "http://rc.quest.com/topics/openssh/license.php#tcpwrappers" ], "isOsiApproved": false }, { "reference": "./TMate.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TMate.json", "referenceNumber": "253", "name": "TMate Open Source License", "licenseId": "TMate", "seeAlso": [ "http://svnkit.com/license.html" ], "isOsiApproved": false }, { "reference": "./TORQUE-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TORQUE-1.1.json", "referenceNumber": "171", "name": "TORQUE v2.5+ Software License v1.1", "licenseId": "TORQUE-1.1", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/TORQUEv1.1" ], "isOsiApproved": false }, { "reference": "./TOSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TOSL.json", "referenceNumber": "360", "name": "Trusster Open Source License", "licenseId": "TOSL", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/TOSL" ], "isOsiApproved": false }, { "reference": "./TU-Berlin-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TU-Berlin-1.0.json", "referenceNumber": "373", "name": "Technische Universitaet Berlin License 1.0", "licenseId": "TU-Berlin-1.0", "seeAlso": [ "https://github.com/swh/ladspa/blob/7bf6f3799fdba70fda297c2d8fd9f526803d9680/gsm/COPYRIGHT" ], "isOsiApproved": false }, { "reference": "./TU-Berlin-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/TU-Berlin-2.0.json", "referenceNumber": "391", "name": "Technische Universitaet Berlin License 2.0", "licenseId": "TU-Berlin-2.0", "seeAlso": [ "https://github.com/CorsixTH/deps/blob/fd339a9f526d1d9c9f01ccf39e438a015da50035/licences/libgsm.txt" ], "isOsiApproved": false }, { "reference": "./UPL-1.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/UPL-1.0.json", "referenceNumber": "205", "name": "Universal Permissive License v1.0", "licenseId": "UPL-1.0", "seeAlso": [ "https://opensource.org/licenses/UPL" ], "isOsiApproved": true }, { "reference": "./Unicode-DFS-2015.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Unicode-DFS-2015.json", "referenceNumber": "11", "name": "Unicode License Agreement - Data Files and Software (2015)", "licenseId": "Unicode-DFS-2015", "seeAlso": [ "https://web.archive.org/web/20151224134844/http://unicode.org/copyright.html" ], "isOsiApproved": false }, { "reference": "./Unicode-DFS-2016.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Unicode-DFS-2016.json", "referenceNumber": "382", "name": "Unicode License Agreement - Data Files and Software (2016)", "licenseId": "Unicode-DFS-2016", "seeAlso": [ "http://www.unicode.org/copyright.html" ], "isOsiApproved": false }, { "reference": "./Unicode-TOU.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Unicode-TOU.json", "referenceNumber": "70", "name": "Unicode Terms of Use", "licenseId": "Unicode-TOU", "seeAlso": [ "http://www.unicode.org/copyright.html" ], "isOsiApproved": false }, { "reference": "./Unlicense.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Unlicense.json", "referenceNumber": "293", "name": "The Unlicense", "licenseId": "Unlicense", "seeAlso": [ "http://unlicense.org/" ], "isOsiApproved": false }, { "reference": "./VOSTROM.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/VOSTROM.json", "referenceNumber": "228", "name": "VOSTROM Public License for Open Source", "licenseId": "VOSTROM", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/VOSTROM" ], "isOsiApproved": false }, { "reference": "./VSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/VSL-1.0.json", "referenceNumber": "180", "name": "Vovida Software License v1.0", "licenseId": "VSL-1.0", "seeAlso": [ "https://opensource.org/licenses/VSL-1.0" ], "isOsiApproved": true }, { "reference": "./Vim.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Vim.json", "referenceNumber": "133", "name": "Vim License", "licenseId": "Vim", "seeAlso": [ "http://vimdoc.sourceforge.net/htmldoc/uganda.html" ], "isOsiApproved": false }, { "reference": "./W3C.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/W3C.json", "referenceNumber": "351", "name": "W3C Software Notice and License (2002-12-31)", "licenseId": "W3C", "seeAlso": [ "http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.html", "https://opensource.org/licenses/W3C" ], "isOsiApproved": true }, { "reference": "./W3C-19980720.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/W3C-19980720.json", "referenceNumber": "323", "name": "W3C Software Notice and License (1998-07-20)", "licenseId": "W3C-19980720", "seeAlso": [ "http://www.w3.org/Consortium/Legal/copyright-software-19980720.html" ], "isOsiApproved": false }, { "reference": "./W3C-20150513.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/W3C-20150513.json", "referenceNumber": "51", "name": "W3C Software Notice and Document License (2015-05-13)", "licenseId": "W3C-20150513", "seeAlso": [ "https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document" ], "isOsiApproved": false }, { "reference": "./WTFPL.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/WTFPL.json", "referenceNumber": "368", "name": "Do What The F*ck You Want To Public License", "licenseId": "WTFPL", "seeAlso": [ "http://sam.zoy.org/wtfpl/COPYING" ], "isOsiApproved": false }, { "reference": "./Watcom-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Watcom-1.0.json", "referenceNumber": "177", "name": "Sybase Open Watcom Public License 1.0", "licenseId": "Watcom-1.0", "seeAlso": [ "https://opensource.org/licenses/Watcom-1.0" ], "isOsiApproved": true }, { "reference": "./Wsuipa.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Wsuipa.json", "referenceNumber": "135", "name": "Wsuipa License", "licenseId": "Wsuipa", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Wsuipa" ], "isOsiApproved": false }, { "reference": "./X11.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/X11.json", "referenceNumber": "188", "name": "X11 License", "licenseId": "X11", "seeAlso": [ "http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3" ], "isOsiApproved": false }, { "reference": "./XFree86-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/XFree86-1.1.json", "referenceNumber": "243", "name": "XFree86 License 1.1", "licenseId": "XFree86-1.1", "seeAlso": [ "http://www.xfree86.org/current/LICENSE4.html" ], "isOsiApproved": false }, { "reference": "./XSkat.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/XSkat.json", "referenceNumber": "96", "name": "XSkat License", "licenseId": "XSkat", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/XSkat_License" ], "isOsiApproved": false }, { "reference": "./Xerox.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Xerox.json", "referenceNumber": "163", "name": "Xerox License", "licenseId": "Xerox", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Xerox" ], "isOsiApproved": false }, { "reference": "./Xnet.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Xnet.json", "referenceNumber": "388", "name": "X.Net License", "licenseId": "Xnet", "seeAlso": [ "https://opensource.org/licenses/Xnet" ], "isOsiApproved": true }, { "reference": "./YPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/YPL-1.0.json", "referenceNumber": "174", "name": "Yahoo! Public License v1.0", "licenseId": "YPL-1.0", "seeAlso": [ "http://www.zimbra.com/license/yahoo_public_license_1.0.html" ], "isOsiApproved": false }, { "reference": "./YPL-1.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/YPL-1.1.json", "referenceNumber": "57", "name": "Yahoo! Public License v1.1", "licenseId": "YPL-1.1", "seeAlso": [ "http://www.zimbra.com/license/yahoo_public_license_1.1.html" ], "isOsiApproved": false }, { "reference": "./ZPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/ZPL-1.1.json", "referenceNumber": "359", "name": "Zope Public License 1.1", "licenseId": "ZPL-1.1", "seeAlso": [ "http://old.zope.org/Resources/License/ZPL-1.1" ], "isOsiApproved": false }, { "reference": "./ZPL-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/ZPL-2.0.json", "referenceNumber": "78", "name": "Zope Public License 2.0", "licenseId": "ZPL-2.0", "seeAlso": [ "http://old.zope.org/Resources/License/ZPL-2.0", "https://opensource.org/licenses/ZPL-2.0" ], "isOsiApproved": true }, { "reference": "./ZPL-2.1.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/ZPL-2.1.json", "referenceNumber": "345", "name": "Zope Public License 2.1", "licenseId": "ZPL-2.1", "seeAlso": [ "http://old.zope.org/Resources/ZPL/" ], "isOsiApproved": false }, { "reference": "./Zed.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Zed.json", "referenceNumber": "248", "name": "Zed License", "licenseId": "Zed", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Zed" ], "isOsiApproved": false }, { "reference": "./Zend-2.0.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Zend-2.0.json", "referenceNumber": "198", "name": "Zend License v2.0", "licenseId": "Zend-2.0", "seeAlso": [ "https://web.archive.org/web/20130517195954/http://www.zend.com/license/2_00.txt" ], "isOsiApproved": false }, { "reference": "./Zimbra-1.3.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Zimbra-1.3.json", "referenceNumber": "40", "name": "Zimbra Public License v1.3", "licenseId": "Zimbra-1.3", "seeAlso": [ "http://web.archive.org/web/20100302225219/http://www.zimbra.com/license/zimbra-public-license-1-3.html" ], "isOsiApproved": false }, { "reference": "./Zimbra-1.4.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/Zimbra-1.4.json", "referenceNumber": "238", "name": "Zimbra Public License v1.4", "licenseId": "Zimbra-1.4", "seeAlso": [ "http://www.zimbra.com/legal/zimbra-public-license-1-4" ], "isOsiApproved": false }, { "reference": "./Zlib.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/Zlib.json", "referenceNumber": "320", "name": "zlib License", "licenseId": "Zlib", "seeAlso": [ "http://www.zlib.net/zlib_license.html", "https://opensource.org/licenses/Zlib" ], "isOsiApproved": true }, { "reference": "./blessing.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/blessing.json", "referenceNumber": "331", "name": "SQLite Blessing", "licenseId": "blessing", "seeAlso": [ "https://www.sqlite.org/src/artifact/e33a4df7e32d742a?ln\u003d4-9", "https://sqlite.org/src/artifact/df5091916dbb40e6" ], "isOsiApproved": false }, { "reference": "./bzip2-1.0.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/bzip2-1.0.5.json", "referenceNumber": "200", "name": "bzip2 and libbzip2 License v1.0.5", "licenseId": "bzip2-1.0.5", "seeAlso": [ "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html" ], "isOsiApproved": false }, { "reference": "./bzip2-1.0.6.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/bzip2-1.0.6.json", "referenceNumber": "302", "name": "bzip2 and libbzip2 License v1.0.6", "licenseId": "bzip2-1.0.6", "seeAlso": [ "https://github.com/asimonov-im/bzip2/blob/master/LICENSE" ], "isOsiApproved": false }, { "reference": "./copyleft-next-0.3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/copyleft-next-0.3.0.json", "referenceNumber": "176", "name": "copyleft-next 0.3.0", "licenseId": "copyleft-next-0.3.0", "seeAlso": [ "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.0" ], "isOsiApproved": false }, { "reference": "./copyleft-next-0.3.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/copyleft-next-0.3.1.json", "referenceNumber": "347", "name": "copyleft-next 0.3.1", "licenseId": "copyleft-next-0.3.1", "seeAlso": [ "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.1" ], "isOsiApproved": false }, { "reference": "./curl.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/curl.json", "referenceNumber": "260", "name": "curl License", "licenseId": "curl", "seeAlso": [ "https://github.com/bagder/curl/blob/master/COPYING" ], "isOsiApproved": false }, { "reference": "./diffmark.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/diffmark.json", "referenceNumber": "367", "name": "diffmark license", "licenseId": "diffmark", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/diffmark" ], "isOsiApproved": false }, { "reference": "./dvipdfm.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/dvipdfm.json", "referenceNumber": "143", "name": "dvipdfm License", "licenseId": "dvipdfm", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/dvipdfm" ], "isOsiApproved": false }, { "reference": "./eCos-2.0.html", "isDeprecatedLicenseId": true, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/eCos-2.0.json", "referenceNumber": "329", "name": "eCos license version 2.0", "licenseId": "eCos-2.0", "seeAlso": [ "https://www.gnu.org/licenses/ecos-license.html" ], "isOsiApproved": false }, { "reference": "./eGenix.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/eGenix.json", "referenceNumber": "204", "name": "eGenix.com Public License 1.1.0", "licenseId": "eGenix", "seeAlso": [ "http://www.egenix.com/products/eGenix.com-Public-License-1.1.0.pdf", "https://fedoraproject.org/wiki/Licensing/eGenix.com_Public_License_1.1.0" ], "isOsiApproved": false }, { "reference": "./gSOAP-1.3b.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/gSOAP-1.3b.json", "referenceNumber": "346", "name": "gSOAP Public License v1.3b", "licenseId": "gSOAP-1.3b", "seeAlso": [ "http://www.cs.fsu.edu/~engelen/license.html" ], "isOsiApproved": false }, { "reference": "./gnuplot.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/gnuplot.json", "referenceNumber": "10", "name": "gnuplot License", "licenseId": "gnuplot", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Gnuplot" ], "isOsiApproved": false }, { "reference": "./iMatix.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/iMatix.json", "referenceNumber": "342", "name": "iMatix Standard Function Library Agreement", "licenseId": "iMatix", "seeAlso": [ "http://legacy.imatix.com/html/sfl/sfl4.htm#license" ], "isOsiApproved": false }, { "reference": "./libpng-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/libpng-2.0.json", "referenceNumber": "76", "name": "PNG Reference Library version 2", "licenseId": "libpng-2.0", "seeAlso": [ "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" ], "isOsiApproved": false }, { "reference": "./libtiff.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/libtiff.json", "referenceNumber": "220", "name": "libtiff License", "licenseId": "libtiff", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/libtiff" ], "isOsiApproved": false }, { "reference": "./mpich2.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/mpich2.json", "referenceNumber": "318", "name": "mpich2 License", "licenseId": "mpich2", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/MIT" ], "isOsiApproved": false }, { "reference": "./psfrag.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/psfrag.json", "referenceNumber": "245", "name": "psfrag License", "licenseId": "psfrag", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/psfrag" ], "isOsiApproved": false }, { "reference": "./psutils.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/psutils.json", "referenceNumber": "126", "name": "psutils License", "licenseId": "psutils", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/psutils" ], "isOsiApproved": false }, { "reference": "./wxWindows.html", "isDeprecatedLicenseId": true, "detailsUrl": "http://spdx.org/licenses/wxWindows.json", "referenceNumber": "86", "name": "wxWindows Library License", "licenseId": "wxWindows", "seeAlso": [ "https://opensource.org/licenses/WXwindows" ], "isOsiApproved": false }, { "reference": "./xinetd.html", "isDeprecatedLicenseId": false, "isFsfLibre": true, "detailsUrl": "http://spdx.org/licenses/xinetd.json", "referenceNumber": "146", "name": "xinetd License", "licenseId": "xinetd", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/Xinetd_License" ], "isOsiApproved": false }, { "reference": "./xpp.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/xpp.json", "referenceNumber": "275", "name": "XPP License", "licenseId": "xpp", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/xpp" ], "isOsiApproved": false }, { "reference": "./zlib-acknowledgement.html", "isDeprecatedLicenseId": false, "detailsUrl": "http://spdx.org/licenses/zlib-acknowledgement.json", "referenceNumber": "321", "name": "zlib/libpng License with Acknowledgement", "licenseId": "zlib-acknowledgement", "seeAlso": [ "https://fedoraproject.org/wiki/Licensing/ZlibWithAcknowledgement" ], "isOsiApproved": false } ], "releaseDate": "2019-07-10" }
diff --git a/spec/frontend/clusters/stores/clusters_store_spec.js b/spec/frontend/clusters/stores/clusters_store_spec.js
index ee3b7d8aa90..5ee06eb44c9 100644
--- a/spec/frontend/clusters/stores/clusters_store_spec.js
+++ b/spec/frontend/clusters/stores/clusters_store_spec.js
@@ -54,8 +54,11 @@ describe('Clusters Store', () => {
environmentsHelpPath: null,
clustersHelpPath: null,
deployBoardsHelpPath: null,
+ cloudRunHelpPath: null,
status: mockResponseData.status,
statusReason: mockResponseData.status_reason,
+ providerType: null,
+ preInstalledKnative: false,
rbac: false,
applications: {
helm: {
diff --git a/spec/frontend/commit/commit_pipeline_status_component_spec.js b/spec/frontend/commit/commit_pipeline_status_component_spec.js
new file mode 100644
index 00000000000..1736d1d0df8
--- /dev/null
+++ b/spec/frontend/commit/commit_pipeline_status_component_spec.js
@@ -0,0 +1,179 @@
+import Visibility from 'visibilityjs';
+import { GlLoadingIcon } from '@gitlab/ui';
+import Poll from '~/lib/utils/poll';
+import flash from '~/flash';
+import CiIcon from '~/vue_shared/components/ci_icon.vue';
+import CommitPipelineStatus from '~/projects/tree/components/commit_pipeline_status_component.vue';
+import { shallowMount } from '@vue/test-utils';
+import { getJSONFixture } from '../helpers/fixtures';
+
+jest.mock('~/lib/utils/poll');
+jest.mock('visibilityjs');
+jest.mock('~/flash');
+
+const mockFetchData = jest.fn();
+jest.mock('~/projects/tree/services/commit_pipeline_service', () =>
+ jest.fn().mockImplementation(() => ({
+ fetchData: mockFetchData.mockReturnValue(Promise.resolve()),
+ })),
+);
+
+describe('Commit pipeline status component', () => {
+ let wrapper;
+ const { pipelines } = getJSONFixture('pipelines/pipelines.json');
+ const { status: mockCiStatus } = pipelines[0].details;
+
+ const defaultProps = {
+ endpoint: 'endpoint',
+ };
+
+ const createComponent = (props = {}) => {
+ wrapper = shallowMount(CommitPipelineStatus, {
+ propsData: {
+ ...defaultProps,
+ ...props,
+ },
+ sync: false,
+ });
+ };
+
+ const findLoader = () => wrapper.find(GlLoadingIcon);
+ const findLink = () => wrapper.find('a');
+ const findCiIcon = () => findLink().find(CiIcon);
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ jest.clearAllMocks();
+ });
+
+ describe('Visibility management', () => {
+ describe('when component is hidden', () => {
+ beforeEach(() => {
+ Visibility.hidden.mockReturnValue(true);
+ createComponent();
+ });
+
+ it('does not start polling', () => {
+ const [pollInstance] = Poll.mock.instances;
+ expect(pollInstance.makeRequest).not.toHaveBeenCalled();
+ });
+
+ it('requests pipeline data', () => {
+ expect(mockFetchData).toHaveBeenCalled();
+ });
+ });
+
+ describe('when component is visible', () => {
+ beforeEach(() => {
+ Visibility.hidden.mockReturnValue(false);
+ createComponent();
+ });
+
+ it('starts polling', () => {
+ const [pollInstance] = [...Poll.mock.instances].reverse();
+ expect(pollInstance.makeRequest).toHaveBeenCalled();
+ });
+ });
+
+ describe('when component changes its visibility', () => {
+ it.each`
+ visibility | action
+ ${false} | ${'restart'}
+ ${true} | ${'stop'}
+ `(
+ '$action polling when component visibility becomes $visibility',
+ ({ visibility, action }) => {
+ Visibility.hidden.mockReturnValue(!visibility);
+ createComponent();
+ const [pollInstance] = Poll.mock.instances;
+ expect(pollInstance[action]).not.toHaveBeenCalled();
+ Visibility.hidden.mockReturnValue(visibility);
+ const [visibilityHandler] = Visibility.change.mock.calls[0];
+ visibilityHandler();
+ expect(pollInstance[action]).toHaveBeenCalled();
+ },
+ );
+ });
+ });
+
+ it('stops polling when component is destroyed', () => {
+ createComponent();
+ wrapper.destroy();
+ const [pollInstance] = Poll.mock.instances;
+ expect(pollInstance.stop).toHaveBeenCalled();
+ });
+
+ describe('when polling', () => {
+ let pollConfig;
+ beforeEach(() => {
+ Poll.mockImplementation(config => {
+ pollConfig = config;
+ return { makeRequest: jest.fn(), restart: jest.fn(), stop: jest.fn() };
+ });
+ createComponent();
+ });
+
+ it('shows the loading icon at start', () => {
+ createComponent();
+ expect(findLoader().exists()).toBe(true);
+
+ pollConfig.successCallback({
+ data: { pipelines: [] },
+ });
+
+ return wrapper.vm.$nextTick().then(() => {
+ expect(findLoader().exists()).toBe(false);
+ });
+ });
+
+ describe('is successful', () => {
+ beforeEach(() => {
+ pollConfig.successCallback({
+ data: { pipelines: [{ details: { status: mockCiStatus } }] },
+ });
+ return wrapper.vm.$nextTick();
+ });
+
+ it('does not render loader', () => {
+ expect(findLoader().exists()).toBe(false);
+ });
+
+ it('renders link with href', () => {
+ expect(findLink().attributes('href')).toEqual(mockCiStatus.details_path);
+ });
+
+ it('renders CI icon', () => {
+ expect(findCiIcon().attributes('data-original-title')).toEqual('Pipeline: pending');
+ expect(findCiIcon().props('status')).toEqual(mockCiStatus);
+ });
+ });
+
+ describe('is not successful', () => {
+ beforeEach(() => {
+ pollConfig.errorCallback();
+ });
+
+ it('does not render loader', () => {
+ expect(findLoader().exists()).toBe(false);
+ });
+
+ it('renders link with href', () => {
+ expect(findLink().attributes('href')).toBeUndefined();
+ });
+
+ it('renders not found CI icon', () => {
+ expect(findCiIcon().attributes('data-original-title')).toEqual('Pipeline: not found');
+ expect(findCiIcon().props('status')).toEqual({
+ text: 'not found',
+ icon: 'status_notfound',
+ group: 'notfound',
+ });
+ });
+
+ it('displays flash error message', () => {
+ expect(flash).toHaveBeenCalled();
+ });
+ });
+ });
+});
diff --git a/spec/frontend/create_cluster/eks_cluster/components/cluster_form_dropdown_spec.js b/spec/frontend/create_cluster/eks_cluster/components/cluster_form_dropdown_spec.js
index e873ef0b2fa..366c2fc7b26 100644
--- a/spec/frontend/create_cluster/eks_cluster/components/cluster_form_dropdown_spec.js
+++ b/spec/frontend/create_cluster/eks_cluster/components/cluster_form_dropdown_spec.js
@@ -7,12 +7,22 @@ import DropdownHiddenInput from '~/vue_shared/components/dropdown/dropdown_hidde
describe('ClusterFormDropdown', () => {
let vm;
+ const firstItem = { name: 'item 1', value: 1 };
+ const secondItem = { name: 'item 2', value: 2 };
+ const items = [firstItem, secondItem, { name: 'item 3', value: 3 }];
beforeEach(() => {
vm = shallowMount(ClusterFormDropdown);
});
afterEach(() => vm.destroy());
+ describe('when initial value is provided', () => {
+ it('sets selectedItem to initial value', () => {
+ vm.setProps({ items, value: secondItem.value });
+ expect(vm.find(DropdownButton).props('toggleText')).toEqual(secondItem.name);
+ });
+ });
+
describe('when no item is selected', () => {
it('displays placeholder text', () => {
const placeholder = 'placeholder';
@@ -24,18 +34,19 @@ describe('ClusterFormDropdown', () => {
});
describe('when an item is selected', () => {
- const selectedItem = { name: 'Name', value: 'value' };
-
beforeEach(() => {
- vm.setData({ selectedItem });
+ vm.setProps({ items });
+ vm.findAll('.js-dropdown-item')
+ .at(1)
+ .trigger('click');
});
it('displays selected item label', () => {
- expect(vm.find(DropdownButton).props('toggleText')).toEqual(selectedItem.name);
+ expect(vm.find(DropdownButton).props('toggleText')).toEqual(secondItem.name);
});
it('sets selected value to dropdown hidden input', () => {
- expect(vm.find(DropdownHiddenInput).props('value')).toEqual(selectedItem.value);
+ expect(vm.find(DropdownHiddenInput).props('value')).toEqual(secondItem.value);
});
});
@@ -124,9 +135,7 @@ describe('ClusterFormDropdown', () => {
});
it('it filters results by search query', () => {
- const secondItem = { name: 'second item' };
- const items = [{ name: 'first item' }, secondItem];
- const searchQuery = 'second';
+ const searchQuery = secondItem.name;
vm.setProps({ items });
vm.setData({ searchQuery });
diff --git a/spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js b/spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js
new file mode 100644
index 00000000000..69290f6dfa9
--- /dev/null
+++ b/spec/frontend/create_cluster/eks_cluster/components/eks_cluster_configuration_form_spec.js
@@ -0,0 +1,457 @@
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import Vue from 'vue';
+import { GlFormCheckbox } from '@gitlab/ui';
+
+import EksClusterConfigurationForm from '~/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue';
+import RegionDropdown from '~/create_cluster/eks_cluster/components/region_dropdown.vue';
+import eksClusterFormState from '~/create_cluster/eks_cluster/store/state';
+import clusterDropdownStoreState from '~/create_cluster/eks_cluster/store/cluster_dropdown/state';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('EksClusterConfigurationForm', () => {
+ let store;
+ let actions;
+ let state;
+ let rolesState;
+ let regionsState;
+ let vpcsState;
+ let subnetsState;
+ let keyPairsState;
+ let securityGroupsState;
+ let vpcsActions;
+ let rolesActions;
+ let regionsActions;
+ let subnetsActions;
+ let keyPairsActions;
+ let securityGroupsActions;
+ let vm;
+
+ beforeEach(() => {
+ state = eksClusterFormState();
+ actions = {
+ setClusterName: jest.fn(),
+ setEnvironmentScope: jest.fn(),
+ setKubernetesVersion: jest.fn(),
+ setRegion: jest.fn(),
+ setVpc: jest.fn(),
+ setSubnet: jest.fn(),
+ setRole: jest.fn(),
+ setKeyPair: jest.fn(),
+ setSecurityGroup: jest.fn(),
+ setGitlabManagedCluster: jest.fn(),
+ };
+ regionsActions = {
+ fetchItems: jest.fn(),
+ };
+ keyPairsActions = {
+ fetchItems: jest.fn(),
+ };
+ vpcsActions = {
+ fetchItems: jest.fn(),
+ };
+ subnetsActions = {
+ fetchItems: jest.fn(),
+ };
+ rolesActions = {
+ fetchItems: jest.fn(),
+ };
+ securityGroupsActions = {
+ fetchItems: jest.fn(),
+ };
+ rolesState = {
+ ...clusterDropdownStoreState(),
+ };
+ regionsState = {
+ ...clusterDropdownStoreState(),
+ };
+ vpcsState = {
+ ...clusterDropdownStoreState(),
+ };
+ subnetsState = {
+ ...clusterDropdownStoreState(),
+ };
+ keyPairsState = {
+ ...clusterDropdownStoreState(),
+ };
+ securityGroupsState = {
+ ...clusterDropdownStoreState(),
+ };
+ store = new Vuex.Store({
+ state,
+ actions,
+ modules: {
+ vpcs: {
+ namespaced: true,
+ state: vpcsState,
+ actions: vpcsActions,
+ },
+ regions: {
+ namespaced: true,
+ state: regionsState,
+ actions: regionsActions,
+ },
+ subnets: {
+ namespaced: true,
+ state: subnetsState,
+ actions: subnetsActions,
+ },
+ roles: {
+ namespaced: true,
+ state: rolesState,
+ actions: rolesActions,
+ },
+ keyPairs: {
+ namespaced: true,
+ state: keyPairsState,
+ actions: keyPairsActions,
+ },
+ securityGroups: {
+ namespaced: true,
+ state: securityGroupsState,
+ actions: securityGroupsActions,
+ },
+ },
+ });
+ });
+
+ beforeEach(() => {
+ vm = shallowMount(EksClusterConfigurationForm, {
+ localVue,
+ store,
+ propsData: {
+ gitlabManagedClusterHelpPath: '',
+ kubernetesIntegrationHelpPath: '',
+ },
+ });
+ });
+
+ afterEach(() => {
+ vm.destroy();
+ });
+
+ const findClusterNameInput = () => vm.find('[id=eks-cluster-name]');
+ const findEnvironmentScopeInput = () => vm.find('[id=eks-environment-scope]');
+ const findKubernetesVersionDropdown = () => vm.find('[field-id="eks-kubernetes-version"]');
+ const findRegionDropdown = () => vm.find(RegionDropdown);
+ const findKeyPairDropdown = () => vm.find('[field-id="eks-key-pair"]');
+ const findVpcDropdown = () => vm.find('[field-id="eks-vpc"]');
+ const findSubnetDropdown = () => vm.find('[field-id="eks-subnet"]');
+ const findRoleDropdown = () => vm.find('[field-id="eks-role"]');
+ const findSecurityGroupDropdown = () => vm.find('[field-id="eks-security-group"]');
+ const findGitlabManagedClusterCheckbox = () => vm.find(GlFormCheckbox);
+
+ describe('when mounted', () => {
+ it('fetches available regions', () => {
+ expect(regionsActions.fetchItems).toHaveBeenCalled();
+ });
+
+ it('fetches available roles', () => {
+ expect(rolesActions.fetchItems).toHaveBeenCalled();
+ });
+ });
+
+ it('sets isLoadingRoles to RoleDropdown loading property', () => {
+ rolesState.isLoadingItems = true;
+
+ return Vue.nextTick().then(() => {
+ expect(findRoleDropdown().props('loading')).toBe(rolesState.isLoadingItems);
+ });
+ });
+
+ it('sets roles to RoleDropdown items property', () => {
+ expect(findRoleDropdown().props('items')).toBe(rolesState.items);
+ });
+
+ it('sets RoleDropdown hasErrors to true when loading roles failed', () => {
+ rolesState.loadingItemsError = new Error();
+
+ expect(findRoleDropdown().props('hasErrors')).toEqual(true);
+ });
+
+ it('sets isLoadingRegions to RegionDropdown loading property', () => {
+ regionsState.isLoadingItems = true;
+
+ return Vue.nextTick().then(() => {
+ expect(findRegionDropdown().props('loading')).toBe(regionsState.isLoadingItems);
+ });
+ });
+
+ it('sets regions to RegionDropdown regions property', () => {
+ expect(findRegionDropdown().props('regions')).toBe(regionsState.items);
+ });
+
+ it('sets loadingRegionsError to RegionDropdown error property', () => {
+ expect(findRegionDropdown().props('error')).toBe(regionsState.loadingItemsError);
+ });
+
+ it('disables KeyPairDropdown when no region is selected', () => {
+ expect(findKeyPairDropdown().props('disabled')).toBe(true);
+ });
+
+ it('enables KeyPairDropdown when no region is selected', () => {
+ state.selectedRegion = { name: 'west-1 ' };
+
+ return Vue.nextTick().then(() => {
+ expect(findKeyPairDropdown().props('disabled')).toBe(false);
+ });
+ });
+
+ it('sets isLoadingKeyPairs to KeyPairDropdown loading property', () => {
+ keyPairsState.isLoadingItems = true;
+
+ return Vue.nextTick().then(() => {
+ expect(findKeyPairDropdown().props('loading')).toBe(keyPairsState.isLoadingItems);
+ });
+ });
+
+ it('sets keyPairs to KeyPairDropdown items property', () => {
+ expect(findKeyPairDropdown().props('items')).toBe(keyPairsState.items);
+ });
+
+ it('sets KeyPairDropdown hasErrors to true when loading key pairs fails', () => {
+ keyPairsState.loadingItemsError = new Error();
+
+ expect(findKeyPairDropdown().props('hasErrors')).toEqual(true);
+ });
+
+ it('disables VpcDropdown when no region is selected', () => {
+ expect(findVpcDropdown().props('disabled')).toBe(true);
+ });
+
+ it('enables VpcDropdown when no region is selected', () => {
+ state.selectedRegion = { name: 'west-1 ' };
+
+ return Vue.nextTick().then(() => {
+ expect(findVpcDropdown().props('disabled')).toBe(false);
+ });
+ });
+
+ it('sets isLoadingVpcs to VpcDropdown loading property', () => {
+ vpcsState.isLoadingItems = true;
+
+ return Vue.nextTick().then(() => {
+ expect(findVpcDropdown().props('loading')).toBe(vpcsState.isLoadingItems);
+ });
+ });
+
+ it('sets vpcs to VpcDropdown items property', () => {
+ expect(findVpcDropdown().props('items')).toBe(vpcsState.items);
+ });
+
+ it('sets VpcDropdown hasErrors to true when loading vpcs fails', () => {
+ vpcsState.loadingItemsError = new Error();
+
+ expect(findVpcDropdown().props('hasErrors')).toEqual(true);
+ });
+
+ it('disables SubnetDropdown when no vpc is selected', () => {
+ expect(findSubnetDropdown().props('disabled')).toBe(true);
+ });
+
+ it('enables SubnetDropdown when a vpc is selected', () => {
+ state.selectedVpc = { name: 'vpc-1 ' };
+
+ return Vue.nextTick().then(() => {
+ expect(findSubnetDropdown().props('disabled')).toBe(false);
+ });
+ });
+
+ it('sets isLoadingSubnets to SubnetDropdown loading property', () => {
+ subnetsState.isLoadingItems = true;
+
+ return Vue.nextTick().then(() => {
+ expect(findSubnetDropdown().props('loading')).toBe(subnetsState.isLoadingItems);
+ });
+ });
+
+ it('sets subnets to SubnetDropdown items property', () => {
+ expect(findSubnetDropdown().props('items')).toBe(subnetsState.items);
+ });
+
+ it('sets SubnetDropdown hasErrors to true when loading subnets fails', () => {
+ subnetsState.loadingItemsError = new Error();
+
+ expect(findSubnetDropdown().props('hasErrors')).toEqual(true);
+ });
+
+ it('disables SecurityGroupDropdown when no vpc is selected', () => {
+ expect(findSecurityGroupDropdown().props('disabled')).toBe(true);
+ });
+
+ it('enables SecurityGroupDropdown when a vpc is selected', () => {
+ state.selectedVpc = { name: 'vpc-1 ' };
+
+ return Vue.nextTick().then(() => {
+ expect(findSecurityGroupDropdown().props('disabled')).toBe(false);
+ });
+ });
+
+ it('sets isLoadingSecurityGroups to SecurityGroupDropdown loading property', () => {
+ securityGroupsState.isLoadingItems = true;
+
+ return Vue.nextTick().then(() => {
+ expect(findSecurityGroupDropdown().props('loading')).toBe(securityGroupsState.isLoadingItems);
+ });
+ });
+
+ it('sets securityGroups to SecurityGroupDropdown items property', () => {
+ expect(findSecurityGroupDropdown().props('items')).toBe(securityGroupsState.items);
+ });
+
+ it('sets SecurityGroupDropdown hasErrors to true when loading security groups fails', () => {
+ securityGroupsState.loadingItemsError = new Error();
+
+ expect(findSecurityGroupDropdown().props('hasErrors')).toEqual(true);
+ });
+
+ describe('when region is selected', () => {
+ const region = { name: 'us-west-2' };
+
+ beforeEach(() => {
+ findRegionDropdown().vm.$emit('input', region);
+ });
+
+ it('dispatches setRegion action', () => {
+ expect(actions.setRegion).toHaveBeenCalledWith(expect.anything(), { region }, undefined);
+ });
+
+ it('fetches available vpcs', () => {
+ expect(vpcsActions.fetchItems).toHaveBeenCalledWith(expect.anything(), { region }, undefined);
+ });
+
+ it('fetches available key pairs', () => {
+ expect(keyPairsActions.fetchItems).toHaveBeenCalledWith(
+ expect.anything(),
+ { region },
+ undefined,
+ );
+ });
+ });
+
+ it('dispatches setClusterName when cluster name input changes', () => {
+ const clusterName = 'name';
+
+ findClusterNameInput().vm.$emit('input', clusterName);
+
+ expect(actions.setClusterName).toHaveBeenCalledWith(
+ expect.anything(),
+ { clusterName },
+ undefined,
+ );
+ });
+
+ it('dispatches setEnvironmentScope when environment scope input changes', () => {
+ const environmentScope = 'production';
+
+ findEnvironmentScopeInput().vm.$emit('input', environmentScope);
+
+ expect(actions.setEnvironmentScope).toHaveBeenCalledWith(
+ expect.anything(),
+ { environmentScope },
+ undefined,
+ );
+ });
+
+ it('dispatches setKubernetesVersion when kubernetes version dropdown changes', () => {
+ const kubernetesVersion = { name: '1.11' };
+
+ findKubernetesVersionDropdown().vm.$emit('input', kubernetesVersion);
+
+ expect(actions.setKubernetesVersion).toHaveBeenCalledWith(
+ expect.anything(),
+ { kubernetesVersion },
+ undefined,
+ );
+ });
+
+ it('dispatches setGitlabManagedCluster when gitlab managed cluster input changes', () => {
+ const gitlabManagedCluster = false;
+
+ findGitlabManagedClusterCheckbox().vm.$emit('input', gitlabManagedCluster);
+
+ expect(actions.setGitlabManagedCluster).toHaveBeenCalledWith(
+ expect.anything(),
+ { gitlabManagedCluster },
+ undefined,
+ );
+ });
+
+ describe('when vpc is selected', () => {
+ const vpc = { name: 'vpc-1' };
+
+ beforeEach(() => {
+ findVpcDropdown().vm.$emit('input', vpc);
+ });
+
+ it('dispatches setVpc action', () => {
+ expect(actions.setVpc).toHaveBeenCalledWith(expect.anything(), { vpc }, undefined);
+ });
+
+ it('dispatches fetchSubnets action', () => {
+ expect(subnetsActions.fetchItems).toHaveBeenCalledWith(expect.anything(), { vpc }, undefined);
+ });
+
+ it('dispatches fetchSecurityGroups action', () => {
+ expect(securityGroupsActions.fetchItems).toHaveBeenCalledWith(
+ expect.anything(),
+ { vpc },
+ undefined,
+ );
+ });
+ });
+
+ describe('when a subnet is selected', () => {
+ const subnet = { name: 'subnet-1' };
+
+ beforeEach(() => {
+ findSubnetDropdown().vm.$emit('input', subnet);
+ });
+
+ it('dispatches setSubnet action', () => {
+ expect(actions.setSubnet).toHaveBeenCalledWith(expect.anything(), { subnet }, undefined);
+ });
+ });
+
+ describe('when role is selected', () => {
+ const role = { name: 'admin' };
+
+ beforeEach(() => {
+ findRoleDropdown().vm.$emit('input', role);
+ });
+
+ it('dispatches setRole action', () => {
+ expect(actions.setRole).toHaveBeenCalledWith(expect.anything(), { role }, undefined);
+ });
+ });
+
+ describe('when key pair is selected', () => {
+ const keyPair = { name: 'key pair' };
+
+ beforeEach(() => {
+ findKeyPairDropdown().vm.$emit('input', keyPair);
+ });
+
+ it('dispatches setKeyPair action', () => {
+ expect(actions.setKeyPair).toHaveBeenCalledWith(expect.anything(), { keyPair }, undefined);
+ });
+ });
+
+ describe('when security group is selected', () => {
+ const securityGroup = { name: 'default group' };
+
+ beforeEach(() => {
+ findSecurityGroupDropdown().vm.$emit('input', securityGroup);
+ });
+
+ it('dispatches setSecurityGroup action', () => {
+ expect(actions.setSecurityGroup).toHaveBeenCalledWith(
+ expect.anything(),
+ { securityGroup },
+ undefined,
+ );
+ });
+ });
+});
diff --git a/spec/frontend/create_cluster/eks_cluster/components/region_dropdown_spec.js b/spec/frontend/create_cluster/eks_cluster/components/region_dropdown_spec.js
new file mode 100644
index 00000000000..0ebb5026a4b
--- /dev/null
+++ b/spec/frontend/create_cluster/eks_cluster/components/region_dropdown_spec.js
@@ -0,0 +1,55 @@
+import { shallowMount } from '@vue/test-utils';
+
+import ClusterFormDropdown from '~/create_cluster/eks_cluster/components/cluster_form_dropdown.vue';
+import RegionDropdown from '~/create_cluster/eks_cluster/components/region_dropdown.vue';
+
+describe('RegionDropdown', () => {
+ let vm;
+
+ const getClusterFormDropdown = () => vm.find(ClusterFormDropdown);
+
+ beforeEach(() => {
+ vm = shallowMount(RegionDropdown);
+ });
+ afterEach(() => vm.destroy());
+
+ it('renders a cluster-form-dropdown', () => {
+ expect(getClusterFormDropdown().exists()).toBe(true);
+ });
+
+ it('sets regions to cluster-form-dropdown items property', () => {
+ const regions = [{ name: 'basic' }];
+
+ vm.setProps({ regions });
+
+ expect(getClusterFormDropdown().props('items')).toEqual(regions);
+ });
+
+ it('sets a loading text', () => {
+ expect(getClusterFormDropdown().props('loadingText')).toEqual('Loading Regions');
+ });
+
+ it('sets a placeholder', () => {
+ expect(getClusterFormDropdown().props('placeholder')).toEqual('Select a region');
+ });
+
+ it('sets an empty results text', () => {
+ expect(getClusterFormDropdown().props('emptyText')).toEqual('No region found');
+ });
+
+ it('sets a search field placeholder', () => {
+ expect(getClusterFormDropdown().props('searchFieldPlaceholder')).toEqual('Search regions');
+ });
+
+ it('sets hasErrors property', () => {
+ vm.setProps({ error: {} });
+
+ expect(getClusterFormDropdown().props('hasErrors')).toEqual(true);
+ });
+
+ it('sets an error message', () => {
+ expect(getClusterFormDropdown().props('errorMessage')).toEqual(
+ 'Could not load regions from your AWS account',
+ );
+ });
+});
diff --git a/spec/frontend/create_cluster/eks_cluster/components/role_name_dropdown_spec.js b/spec/frontend/create_cluster/eks_cluster/components/role_name_dropdown_spec.js
deleted file mode 100644
index 657637c1b56..00000000000
--- a/spec/frontend/create_cluster/eks_cluster/components/role_name_dropdown_spec.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-
-import ClusterFormDropdown from '~/create_cluster/eks_cluster/components/cluster_form_dropdown.vue';
-import RoleNameDropdown from '~/create_cluster/eks_cluster/components/role_name_dropdown.vue';
-
-describe('RoleNameDropdown', () => {
- let vm;
-
- beforeEach(() => {
- vm = shallowMount(RoleNameDropdown);
- });
- afterEach(() => vm.destroy());
-
- it('renders a cluster-form-dropdown', () => {
- expect(vm.find(ClusterFormDropdown).exists()).toBe(true);
- });
-
- it('sets roles to cluster-form-dropdown items property', () => {
- const roles = [{ name: 'basic' }];
-
- vm.setProps({ roles });
-
- expect(vm.find(ClusterFormDropdown).props('items')).toEqual(roles);
- });
-
- it('sets a loading text', () => {
- expect(vm.find(ClusterFormDropdown).props('loadingText')).toEqual('Loading IAM Roles');
- });
-
- it('sets a placeholder', () => {
- expect(vm.find(ClusterFormDropdown).props('placeholder')).toEqual('Select role name');
- });
-
- it('sets an empty results text', () => {
- expect(vm.find(ClusterFormDropdown).props('emptyText')).toEqual('No IAM Roles found');
- });
-
- it('sets a search field placeholder', () => {
- expect(vm.find(ClusterFormDropdown).props('searchFieldPlaceholder')).toEqual(
- 'Search IAM Roles',
- );
- });
-});
diff --git a/spec/frontend/create_cluster/eks_cluster/store/actions_spec.js b/spec/frontend/create_cluster/eks_cluster/store/actions_spec.js
new file mode 100644
index 00000000000..1ed7f806804
--- /dev/null
+++ b/spec/frontend/create_cluster/eks_cluster/store/actions_spec.js
@@ -0,0 +1,60 @@
+import testAction from 'helpers/vuex_action_helper';
+
+import createState from '~/create_cluster/eks_cluster/store/state';
+import * as actions from '~/create_cluster/eks_cluster/store/actions';
+import {
+ SET_CLUSTER_NAME,
+ SET_ENVIRONMENT_SCOPE,
+ SET_KUBERNETES_VERSION,
+ SET_REGION,
+ SET_VPC,
+ SET_KEY_PAIR,
+ SET_SUBNET,
+ SET_ROLE,
+ SET_SECURITY_GROUP,
+ SET_GITLAB_MANAGED_CLUSTER,
+} from '~/create_cluster/eks_cluster/store/mutation_types';
+
+describe('EKS Cluster Store Actions', () => {
+ let clusterName;
+ let environmentScope;
+ let kubernetesVersion;
+ let region;
+ let vpc;
+ let subnet;
+ let role;
+ let keyPair;
+ let securityGroup;
+ let gitlabManagedCluster;
+
+ beforeEach(() => {
+ clusterName = 'my cluster';
+ environmentScope = 'production';
+ kubernetesVersion = '11.1';
+ region = { name: 'regions-1' };
+ vpc = { name: 'vpc-1' };
+ subnet = { name: 'subnet-1' };
+ role = { name: 'role-1' };
+ keyPair = { name: 'key-pair-1' };
+ securityGroup = { name: 'default group' };
+ gitlabManagedCluster = true;
+ });
+
+ it.each`
+ action | mutation | payload | payloadDescription
+ ${'setClusterName'} | ${SET_CLUSTER_NAME} | ${{ clusterName }} | ${'cluster name'}
+ ${'setEnvironmentScope'} | ${SET_ENVIRONMENT_SCOPE} | ${{ environmentScope }} | ${'environment scope'}
+ ${'setKubernetesVersion'} | ${SET_KUBERNETES_VERSION} | ${{ kubernetesVersion }} | ${'kubernetes version'}
+ ${'setRole'} | ${SET_ROLE} | ${{ role }} | ${'role'}
+ ${'setRegion'} | ${SET_REGION} | ${{ region }} | ${'region'}
+ ${'setKeyPair'} | ${SET_KEY_PAIR} | ${{ keyPair }} | ${'key pair'}
+ ${'setVpc'} | ${SET_VPC} | ${{ vpc }} | ${'vpc'}
+ ${'setSubnet'} | ${SET_SUBNET} | ${{ subnet }} | ${'subnet'}
+ ${'setSecurityGroup'} | ${SET_SECURITY_GROUP} | ${{ securityGroup }} | ${'securityGroup'}
+ ${'setGitlabManagedCluster'} | ${SET_GITLAB_MANAGED_CLUSTER} | ${gitlabManagedCluster} | ${'gitlab managed cluster'}
+ `(`$action commits $mutation with $payloadDescription payload`, data => {
+ const { action, mutation, payload } = data;
+
+ testAction(actions[action], payload, createState(), [{ type: mutation, payload }]);
+ });
+});
diff --git a/spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/actions_spec.js b/spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/actions_spec.js
new file mode 100644
index 00000000000..58f8855a64c
--- /dev/null
+++ b/spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/actions_spec.js
@@ -0,0 +1,95 @@
+import testAction from 'helpers/vuex_action_helper';
+
+import createState from '~/create_cluster/eks_cluster/store/cluster_dropdown/state';
+import * as types from '~/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types';
+import actionsFactory from '~/create_cluster/eks_cluster/store/cluster_dropdown/actions';
+
+describe('Cluster dropdown Store Actions', () => {
+ const items = [{ name: 'item 1' }];
+ let fetchFn;
+ let actions;
+
+ beforeEach(() => {
+ fetchFn = jest.fn();
+ actions = actionsFactory(fetchFn);
+ });
+
+ describe('fetchItems', () => {
+ describe('on success', () => {
+ beforeEach(() => {
+ fetchFn.mockResolvedValueOnce(items);
+ actions = actionsFactory(fetchFn);
+ });
+
+ it('dispatches success with received items', () =>
+ testAction(
+ actions.fetchItems,
+ null,
+ createState(),
+ [],
+ [
+ { type: 'requestItems' },
+ {
+ type: 'receiveItemsSuccess',
+ payload: { items },
+ },
+ ],
+ ));
+ });
+
+ describe('on failure', () => {
+ const error = new Error('Could not fetch items');
+
+ beforeEach(() => {
+ fetchFn.mockRejectedValueOnce(error);
+ });
+
+ it('dispatches success with received items', () =>
+ testAction(
+ actions.fetchItems,
+ null,
+ createState(),
+ [],
+ [
+ { type: 'requestItems' },
+ {
+ type: 'receiveItemsError',
+ payload: { error },
+ },
+ ],
+ ));
+ });
+ });
+
+ describe('requestItems', () => {
+ it(`commits ${types.REQUEST_ITEMS} mutation`, () =>
+ testAction(actions.requestItems, null, createState(), [{ type: types.REQUEST_ITEMS }]));
+ });
+
+ describe('receiveItemsSuccess', () => {
+ it(`commits ${types.RECEIVE_ITEMS_SUCCESS} mutation`, () =>
+ testAction(actions.receiveItemsSuccess, { items }, createState(), [
+ {
+ type: types.RECEIVE_ITEMS_SUCCESS,
+ payload: {
+ items,
+ },
+ },
+ ]));
+ });
+
+ describe('receiveItemsError', () => {
+ it(`commits ${types.RECEIVE_ITEMS_ERROR} mutation`, () => {
+ const error = new Error('Error fetching items');
+
+ testAction(actions.receiveItemsError, { error }, createState(), [
+ {
+ type: types.RECEIVE_ITEMS_ERROR,
+ payload: {
+ error,
+ },
+ },
+ ]);
+ });
+ });
+});
diff --git a/spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/mutations_spec.js b/spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/mutations_spec.js
new file mode 100644
index 00000000000..0665047edea
--- /dev/null
+++ b/spec/frontend/create_cluster/eks_cluster/store/cluster_dropdown/mutations_spec.js
@@ -0,0 +1,36 @@
+import {
+ REQUEST_ITEMS,
+ RECEIVE_ITEMS_SUCCESS,
+ RECEIVE_ITEMS_ERROR,
+} from '~/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types';
+import createState from '~/create_cluster/eks_cluster/store/cluster_dropdown/state';
+import mutations from '~/create_cluster/eks_cluster/store/cluster_dropdown/mutations';
+
+describe('Cluster dropdown store mutations', () => {
+ let state;
+ let emptyPayload;
+ let items;
+ let error;
+
+ beforeEach(() => {
+ emptyPayload = {};
+ items = [{ name: 'item 1' }];
+ error = new Error('could not load error');
+ state = createState();
+ });
+
+ it.each`
+ mutation | mutatedProperty | payload | expectedValue | expectedValueDescription
+ ${REQUEST_ITEMS} | ${'isLoadingItems'} | ${emptyPayload} | ${true} | ${true}
+ ${REQUEST_ITEMS} | ${'loadingItemsError'} | ${emptyPayload} | ${null} | ${null}
+ ${RECEIVE_ITEMS_SUCCESS} | ${'isLoadingItems'} | ${{ items }} | ${false} | ${false}
+ ${RECEIVE_ITEMS_SUCCESS} | ${'items'} | ${{ items }} | ${items} | ${'items payload'}
+ ${RECEIVE_ITEMS_ERROR} | ${'isLoadingItems'} | ${{ error }} | ${false} | ${false}
+ ${RECEIVE_ITEMS_ERROR} | ${'error'} | ${{ error }} | ${error} | ${'received error object'}
+ `(`$mutation sets $mutatedProperty to $expectedValueDescription`, data => {
+ const { mutation, mutatedProperty, payload, expectedValue } = data;
+
+ mutations[mutation](state, payload);
+ expect(state[mutatedProperty]).toBe(expectedValue);
+ });
+});
diff --git a/spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js b/spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js
new file mode 100644
index 00000000000..81b65180fb5
--- /dev/null
+++ b/spec/frontend/create_cluster/eks_cluster/store/mutations_spec.js
@@ -0,0 +1,62 @@
+import {
+ SET_CLUSTER_NAME,
+ SET_ENVIRONMENT_SCOPE,
+ SET_KUBERNETES_VERSION,
+ SET_REGION,
+ SET_VPC,
+ SET_KEY_PAIR,
+ SET_SUBNET,
+ SET_ROLE,
+ SET_SECURITY_GROUP,
+ SET_GITLAB_MANAGED_CLUSTER,
+} from '~/create_cluster/eks_cluster/store/mutation_types';
+import createState from '~/create_cluster/eks_cluster/store/state';
+import mutations from '~/create_cluster/eks_cluster/store/mutations';
+
+describe('Create EKS cluster store mutations', () => {
+ let clusterName;
+ let environmentScope;
+ let kubernetesVersion;
+ let state;
+ let region;
+ let vpc;
+ let subnet;
+ let role;
+ let keyPair;
+ let securityGroup;
+ let gitlabManagedCluster;
+
+ beforeEach(() => {
+ clusterName = 'my cluster';
+ environmentScope = 'production';
+ kubernetesVersion = '11.1';
+ region = { name: 'regions-1' };
+ vpc = { name: 'vpc-1' };
+ subnet = { name: 'subnet-1' };
+ role = { name: 'role-1' };
+ keyPair = { name: 'key pair' };
+ securityGroup = { name: 'default group' };
+ gitlabManagedCluster = false;
+
+ state = createState();
+ });
+
+ it.each`
+ mutation | mutatedProperty | payload | expectedValue | expectedValueDescription
+ ${SET_CLUSTER_NAME} | ${'clusterName'} | ${{ clusterName }} | ${clusterName} | ${'cluster name'}
+ ${SET_ENVIRONMENT_SCOPE} | ${'environmentScope'} | ${{ environmentScope }} | ${environmentScope} | ${'environment scope'}
+ ${SET_KUBERNETES_VERSION} | ${'kubernetesVersion'} | ${{ kubernetesVersion }} | ${kubernetesVersion} | ${'kubernetes version'}
+ ${SET_ROLE} | ${'selectedRole'} | ${{ role }} | ${role} | ${'selected role payload'}
+ ${SET_REGION} | ${'selectedRegion'} | ${{ region }} | ${region} | ${'selected region payload'}
+ ${SET_KEY_PAIR} | ${'selectedKeyPair'} | ${{ keyPair }} | ${keyPair} | ${'selected key pair payload'}
+ ${SET_VPC} | ${'selectedVpc'} | ${{ vpc }} | ${vpc} | ${'selected vpc payload'}
+ ${SET_SUBNET} | ${'selectedSubnet'} | ${{ subnet }} | ${subnet} | ${'selected sybnet payload'}
+ ${SET_SECURITY_GROUP} | ${'selectedSecurityGroup'} | ${{ securityGroup }} | ${securityGroup} | ${'selected security group payload'}
+ ${SET_GITLAB_MANAGED_CLUSTER} | ${'gitlabManagedCluster'} | ${{ gitlabManagedCluster }} | ${gitlabManagedCluster} | ${'gitlab managed cluster'}
+ `(`$mutation sets $mutatedProperty to $expectedValueDescription`, data => {
+ const { mutation, mutatedProperty, payload, expectedValue } = data;
+
+ mutations[mutation](state, payload);
+ expect(state[mutatedProperty]).toBe(expectedValue);
+ });
+});
diff --git a/spec/frontend/error_tracking/utils_spec.js b/spec/frontend/error_tracking/utils_spec.js
new file mode 100644
index 00000000000..0e9047cd375
--- /dev/null
+++ b/spec/frontend/error_tracking/utils_spec.js
@@ -0,0 +1,27 @@
+import * as errorTrackingUtils from '~/error_tracking/utils';
+
+const externalUrl = 'https://sentry.io/organizations/test-sentry-nk/issues/1/?project=1';
+
+describe('Error Tracking Events', () => {
+ describe('trackViewInSentryOptions', () => {
+ it('should return correct event options', () => {
+ expect(errorTrackingUtils.trackViewInSentryOptions(externalUrl)).toEqual({
+ category: 'Error Tracking',
+ action: 'click_view_in_sentry',
+ label: 'External Url',
+ property: externalUrl,
+ });
+ });
+ });
+
+ describe('trackClickErrorLinkToSentryOptions', () => {
+ it('should return correct event options', () => {
+ expect(errorTrackingUtils.trackClickErrorLinkToSentryOptions(externalUrl)).toEqual({
+ category: 'Error Tracking',
+ action: 'click_error_link_to_sentry',
+ label: 'Error Link',
+ property: externalUrl,
+ });
+ });
+ });
+});
diff --git a/spec/frontend/fixtures/abuse_reports.rb b/spec/frontend/fixtures/abuse_reports.rb
index 21356390cae..712ed2e8d7e 100644
--- a/spec/frontend/fixtures/abuse_reports.rb
+++ b/spec/frontend/fixtures/abuse_reports.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Admin::AbuseReportsController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/admin_users.rb b/spec/frontend/fixtures/admin_users.rb
index 0209594dadc..b0f7d69f091 100644
--- a/spec/frontend/fixtures/admin_users.rb
+++ b/spec/frontend/fixtures/admin_users.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Admin::UsersController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/application_settings.rb b/spec/frontend/fixtures/application_settings.rb
index afe5949ed3b..a16888d8f03 100644
--- a/spec/frontend/fixtures/application_settings.rb
+++ b/spec/frontend/fixtures/application_settings.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Admin::ApplicationSettingsController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/autocomplete_sources.rb b/spec/frontend/fixtures/autocomplete_sources.rb
index 9e04328e2b9..382eff02b0f 100644
--- a/spec/frontend/fixtures/autocomplete_sources.rb
+++ b/spec/frontend/fixtures/autocomplete_sources.rb
@@ -24,6 +24,10 @@ describe Projects::AutocompleteSourcesController, '(JavaScript fixtures)', type:
create(:label, project: project, title: 'feature')
create(:label, project: project, title: 'documentation')
+ create(:label, project: project, title: 'P1')
+ create(:label, project: project, title: 'P2')
+ create(:label, project: project, title: 'P3')
+ create(:label, project: project, title: 'P4')
get :labels,
format: :json,
diff --git a/spec/frontend/fixtures/blob.rb b/spec/frontend/fixtures/blob.rb
index ce5030efbf8..28a3badaa17 100644
--- a/spec/frontend/fixtures/blob.rb
+++ b/spec/frontend/fixtures/blob.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::BlobController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/boards.rb b/spec/frontend/fixtures/boards.rb
index f257d80390f..b3c7865a088 100644
--- a/spec/frontend/fixtures/boards.rb
+++ b/spec/frontend/fixtures/boards.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::BoardsController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/branches.rb b/spec/frontend/fixtures/branches.rb
index 197fe42c52a..2dc8cde625a 100644
--- a/spec/frontend/fixtures/branches.rb
+++ b/spec/frontend/fixtures/branches.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::BranchesController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/clusters.rb b/spec/frontend/fixtures/clusters.rb
index f15ef010807..fd64d3c0e28 100644
--- a/spec/frontend/fixtures/clusters.rb
+++ b/spec/frontend/fixtures/clusters.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::ClustersController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/commit.rb b/spec/frontend/fixtures/commit.rb
index a328c455356..2c4bf6fbd3d 100644
--- a/spec/frontend/fixtures/commit.rb
+++ b/spec/frontend/fixtures/commit.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::CommitController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/deploy_keys.rb b/spec/frontend/fixtures/deploy_keys.rb
index fca233c6f59..f491c424bcf 100644
--- a/spec/frontend/fixtures/deploy_keys.rb
+++ b/spec/frontend/fixtures/deploy_keys.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::DeployKeysController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/groups.rb b/spec/frontend/fixtures/groups.rb
index c1bb2d43332..237fc711594 100644
--- a/spec/frontend/fixtures/groups.rb
+++ b/spec/frontend/fixtures/groups.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'Groups (JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/issues.rb b/spec/frontend/fixtures/issues.rb
index b5eb38e0023..7e524990863 100644
--- a/spec/frontend/fixtures/issues.rb
+++ b/spec/frontend/fixtures/issues.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::IssuesController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/jobs.rb b/spec/frontend/fixtures/jobs.rb
index a3a7759c85b..787ab517f75 100644
--- a/spec/frontend/fixtures/jobs.rb
+++ b/spec/frontend/fixtures/jobs.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::JobsController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/labels.rb b/spec/frontend/fixtures/labels.rb
index a312287970f..e4d66dbcd0a 100644
--- a/spec/frontend/fixtures/labels.rb
+++ b/spec/frontend/fixtures/labels.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'Labels (JavaScript fixtures)' do
diff --git a/spec/frontend/fixtures/merge_requests.rb b/spec/frontend/fixtures/merge_requests.rb
index 88706e96676..8fbdb534b3d 100644
--- a/spec/frontend/fixtures/merge_requests.rb
+++ b/spec/frontend/fixtures/merge_requests.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::MergeRequestsController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/merge_requests_diffs.rb b/spec/frontend/fixtures/merge_requests_diffs.rb
index b633a0495a6..9493cba03bb 100644
--- a/spec/frontend/fixtures/merge_requests_diffs.rb
+++ b/spec/frontend/fixtures/merge_requests_diffs.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::MergeRequests::DiffsController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/pipeline_schedules.rb b/spec/frontend/fixtures/pipeline_schedules.rb
index a70091a3919..e00a35d5362 100644
--- a/spec/frontend/fixtures/pipeline_schedules.rb
+++ b/spec/frontend/fixtures/pipeline_schedules.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::PipelineSchedulesController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/pipelines.rb b/spec/frontend/fixtures/pipelines.rb
index ed57eb0aa80..83fc13af7d3 100644
--- a/spec/frontend/fixtures/pipelines.rb
+++ b/spec/frontend/fixtures/pipelines.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::PipelinesController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/projects.rb b/spec/frontend/fixtures/projects.rb
index 91e3b65215a..af5b70fbbeb 100644
--- a/spec/frontend/fixtures/projects.rb
+++ b/spec/frontend/fixtures/projects.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'Projects (JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/prometheus_service.rb b/spec/frontend/fixtures/prometheus_service.rb
index 93ee81120d7..c404b8260d2 100644
--- a/spec/frontend/fixtures/prometheus_service.rb
+++ b/spec/frontend/fixtures/prometheus_service.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::ServicesController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/raw.rb b/spec/frontend/fixtures/raw.rb
index 801c80a0112..9c9fa4ec40b 100644
--- a/spec/frontend/fixtures/raw.rb
+++ b/spec/frontend/fixtures/raw.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'Raw files', '(JavaScript fixtures)' do
diff --git a/spec/frontend/fixtures/search.rb b/spec/frontend/fixtures/search.rb
index c26c6998ae9..025cc53c745 100644
--- a/spec/frontend/fixtures/search.rb
+++ b/spec/frontend/fixtures/search.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SearchController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/services.rb b/spec/frontend/fixtures/services.rb
index ee1e088f158..1b81a83ca49 100644
--- a/spec/frontend/fixtures/services.rb
+++ b/spec/frontend/fixtures/services.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Projects::ServicesController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/sessions.rb b/spec/frontend/fixtures/sessions.rb
index 18574ea06b5..a4dc0aef79c 100644
--- a/spec/frontend/fixtures/sessions.rb
+++ b/spec/frontend/fixtures/sessions.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'Sessions (JavaScript fixtures)' do
diff --git a/spec/frontend/fixtures/snippet.rb b/spec/frontend/fixtures/snippet.rb
index 23bcdb47ac6..34a6fade9c9 100644
--- a/spec/frontend/fixtures/snippet.rb
+++ b/spec/frontend/fixtures/snippet.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SnippetsController, '(JavaScript fixtures)', type: :controller do
diff --git a/spec/frontend/fixtures/static/environments_logs.html b/spec/frontend/fixtures/static/environments_logs.html
index 6179d3dbc23..ccf9c364154 100644
--- a/spec/frontend/fixtures/static/environments_logs.html
+++ b/spec/frontend/fixtures/static/environments_logs.html
@@ -1,29 +1,102 @@
-<div class="js-kubernetes-logs" data-logs-path="/root/kubernetes-app/environments/1/logs">
- <div class="build-page">
+<div
+ class="js-kubernetes-logs"
+ data-current-environment-name="production"
+ data-environments-path="/root/my-project/environments.json"
+ data-logs-page="/root/my-project/environments/1/logs"
+ data-logs-path="/root/my-project/environments/1/logs.json"
+>
+ <div class="build-page-pod-logs">
<div class="build-trace-container prepend-top-default">
- <div class="top-bar js-top-bar">
- <div class="truncated-info hidden-xs pull-left"></div>
- <div class="dropdown prepend-left-10 js-pod-dropdown">
- <button aria-expanded="false" class="dropdown-menu-toggle" data-toggle="dropdown" type="button">
- <i class="fa fa-chevron-down"></i>
- </button>
- <div class="dropdown-menu dropdown-menu-selectable dropdown-menu-drop-up"></div>
+ <div class="top-bar js-top-bar d-flex">
+ <div class="row">
+ <div class="form-group col-6" role="group">
+ <label class="d-block col-form-label-sm col-form-label">
+ Environment
+ </label>
+ <div class="dropdown js-environment-dropdown d-flex">
+ <button
+ aria-expanded="false"
+ class="dropdown-menu-toggle d-flex align-content-center align-self-center"
+ data-toggle="dropdown"
+ type="button"
+ >
+ <i aria-hidden="true" data-hidden="true" class="fa fa-chevron-down"></i>
+ <div class="dropdown-toggle-text">
+ &nbsp;
+ </div>
+ </button>
+ <div class="dropdown-menu dropdown-menu-selectable dropdown-menu-drop-up"></div>
+ </div>
+ </div>
+ <div class="form-group col-6" role="group">
+ <label class="d-block col-form-label-sm col-form-label">
+ Pod logs from
+ </label>
+ <div class="dropdown js-pod-dropdown d-flex">
+ <button
+ aria-expanded="false"
+ class="dropdown-menu-toggle d-flex align-content-center align-self-center"
+ data-toggle="dropdown"
+ type="button"
+ >
+ <i aria-hidden="true" data-hidden="true" class="fa fa-chevron-down"></i>
+ <div class="dropdown-toggle-text">
+ &nbsp;
+ </div>
+ </button>
+ <div class="dropdown-menu dropdown-menu-selectable dropdown-menu-drop-up"></div>
+ </div>
+ </div>
</div>
- <div class="controllers pull-right">
- <div class="has-tooltip controllers-buttons" data-container="body" data-placement="top" title="Scroll to top">
- <button class="js-scroll-up btn-scroll btn-transparent btn-blank" disabled type="button"></button>
+ <div class="controllers align-self-end">
+ <div
+ class="has-tooltip controllers-buttons"
+ data-container="body"
+ data-placement="top"
+ title="Scroll to top"
+ >
+ <button
+ class="js-scroll-up btn-scroll btn-transparent btn-blank"
+ disabled
+ type="button"
+ ></button>
</div>
- <div class="has-tooltip controllers-buttons" data-container="body" data-placement="top" title="Scroll to bottom">
- <button class="js-scroll-down btn-scroll btn-transparent btn-blank" disabled type="button"></button>
+ <div
+ class="has-tooltip controllers-buttons"
+ data-container="body"
+ data-placement="top"
+ title="Scroll to bottom"
+ >
+ <button
+ class="js-scroll-down btn-scroll btn-transparent btn-blank"
+ disabled
+ type="button"
+ ></button>
</div>
- <div class="refresh-control pull-right">
- <div class="has-tooltip controllers-buttons" data-container="body" data-placement="top" title="Refresh">
- <button class="js-refresh-log btn-default btn-refresh" disabled type="button"></button>
+ <div class="refresh-control">
+ <div
+ class="has-tooltip controllers-buttons"
+ data-container="body"
+ data-placement="top"
+ title="Refresh"
+ >
+ <button
+ class="js-refresh-log btn btn-default btn-refresh h-32-px"
+ disabled
+ type="button"
+ ></button>
</div>
</div>
</div>
</div>
- <pre class="build-trace" id="build-trace"><code class="bash js-build-output"><div class="build-loader-animation js-build-refresh"></div></code></pre>
+ <pre class="build-trace" id="build-trace">
+ <code class="bash js-build-output"></code>
+ <div class="build-loader-animation js-build-refresh">
+ <div class="dot"></div>
+ <div class="dot"></div>
+ <div class="dot"></div>
+ </div>
+ </pre>
</div>
</div>
</div>
diff --git a/spec/frontend/fixtures/todos.rb b/spec/frontend/fixtures/todos.rb
index a7c183d2414..e5bdb4998ed 100644
--- a/spec/frontend/fixtures/todos.rb
+++ b/spec/frontend/fixtures/todos.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'Todos (JavaScript fixtures)' do
diff --git a/spec/frontend/fixtures/u2f.rb b/spec/frontend/fixtures/u2f.rb
index 8ecbc0390cd..dded6ce6380 100644
--- a/spec/frontend/fixtures/u2f.rb
+++ b/spec/frontend/fixtures/u2f.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
context 'U2F' do
diff --git a/spec/frontend/helpers/dom_shims/README.md b/spec/frontend/helpers/dom_shims/README.md
new file mode 100644
index 00000000000..1105e4b0c4c
--- /dev/null
+++ b/spec/frontend/helpers/dom_shims/README.md
@@ -0,0 +1,12 @@
+## Jest DOM shims
+
+This is where we shim parts of JSDom. It is imported in our root `test_setup.js`.
+
+### Why do we need this?
+
+Since JSDom mocks a real DOM environment (which is a good thing), it
+unfortunately does not support some jQuery matchers.
+
+### References
+
+- https://gitlab.com/gitlab-org/gitlab/merge_requests/17906#note_224448120
diff --git a/spec/frontend/helpers/dom_shims/get_client_rects.js b/spec/frontend/helpers/dom_shims/get_client_rects.js
new file mode 100644
index 00000000000..d740c1bf154
--- /dev/null
+++ b/spec/frontend/helpers/dom_shims/get_client_rects.js
@@ -0,0 +1,50 @@
+function hasHiddenStyle(node) {
+ if (!node.style) {
+ return false;
+ } else if (node.style.display === 'none' || node.style.visibility === 'hidden') {
+ return true;
+ }
+
+ return false;
+}
+
+function createDefaultClientRect() {
+ return {
+ bottom: 0,
+ height: 0,
+ left: 0,
+ right: 0,
+ top: 0,
+ width: 0,
+ x: 0,
+ y: 0,
+ };
+}
+
+/**
+ * This is needed to get the `toBeVisible` matcher to work in `jsdom`
+ *
+ * Reference:
+ * - https://github.com/jsdom/jsdom/issues/1322
+ * - https://github.com/unindented/custom-jquery-matchers/blob/v2.1.0/packages/custom-jquery-matchers/src/matchers.js#L157
+ */
+window.Element.prototype.getClientRects = function getClientRects() {
+ let node = this;
+
+ while (node) {
+ if (node === document) {
+ break;
+ }
+
+ if (hasHiddenStyle(node)) {
+ return [];
+ }
+ node = node.parentNode;
+ }
+
+ if (!node) {
+ return [];
+ }
+
+ return [createDefaultClientRect()];
+};
diff --git a/spec/frontend/helpers/dom_shims/get_client_rects_spec.js b/spec/frontend/helpers/dom_shims/get_client_rects_spec.js
new file mode 100644
index 00000000000..e7b8f1e235b
--- /dev/null
+++ b/spec/frontend/helpers/dom_shims/get_client_rects_spec.js
@@ -0,0 +1,71 @@
+const createTestElement = () => {
+ const element = document.createElement('div');
+
+ element.textContent = 'Hello World!';
+
+ return element;
+};
+
+describe('DOM patch for getClientRects', () => {
+ let origHtml;
+ let el;
+
+ beforeEach(() => {
+ origHtml = document.body.innerHTML;
+ el = createTestElement();
+ });
+
+ afterEach(() => {
+ document.body.innerHTML = origHtml;
+ });
+
+ describe('toBeVisible matcher', () => {
+ describe('when not attached to document', () => {
+ it('does not match', () => {
+ expect(el).not.toBeVisible();
+ });
+ });
+
+ describe('when attached to document', () => {
+ beforeEach(() => {
+ document.body.appendChild(el);
+ });
+
+ it('matches', () => {
+ expect(el).toBeVisible();
+ });
+ });
+
+ describe('with parent and attached to document', () => {
+ let parentEl;
+
+ beforeEach(() => {
+ parentEl = createTestElement();
+ parentEl.appendChild(el);
+ document.body.appendChild(parentEl);
+ });
+
+ it('matches', () => {
+ expect(el).toBeVisible();
+ });
+
+ describe.each`
+ style
+ ${{ display: 'none' }}
+ ${{ visibility: 'hidden' }}
+ `('with style $style', ({ style }) => {
+ it('does not match when applied to element', () => {
+ Object.assign(el.style, style);
+
+ expect(el).not.toBeVisible();
+ });
+
+ it('does not match when applied to parent', () => {
+ Object.assign(parentEl.style, style);
+
+ expect(el).not.toBeVisible();
+ });
+ });
+ });
+ });
+});
diff --git a/spec/frontend/helpers/dom_shims/index.js b/spec/frontend/helpers/dom_shims/index.js
new file mode 100644
index 00000000000..40256398e6d
--- /dev/null
+++ b/spec/frontend/helpers/dom_shims/index.js
@@ -0,0 +1 @@
+import './get_client_rects';
diff --git a/spec/frontend/helpers/test_constants.js b/spec/frontend/helpers/test_constants.js
index 8dc4aef87e1..c97d47a6406 100644
--- a/spec/frontend/helpers/test_constants.js
+++ b/spec/frontend/helpers/test_constants.js
@@ -1,2 +1,7 @@
-// eslint-disable-next-line import/prefer-default-export
+export const FIXTURES_PATH = `/fixtures`;
export const TEST_HOST = 'http://test.host';
+
+export const DUMMY_IMAGE_URL = `${FIXTURES_PATH}/static/images/one_white_pixel.png`;
+
+export const GREEN_BOX_IMAGE_URL = `${FIXTURES_PATH}/static/images/green_box.png`;
+export const RED_BOX_IMAGE_URL = `${FIXTURES_PATH}/static/images/red_box.png`;
diff --git a/spec/frontend/helpers/tracking_helper.js b/spec/frontend/helpers/tracking_helper.js
new file mode 100644
index 00000000000..68c1bd2dbca
--- /dev/null
+++ b/spec/frontend/helpers/tracking_helper.js
@@ -0,0 +1,25 @@
+import Tracking from '~/tracking';
+
+export default Tracking;
+
+let document;
+let handlers;
+
+export function mockTracking(category = '_category_', documentOverride, spyMethod) {
+ document = documentOverride || window.document;
+ window.snowplow = () => {};
+ Tracking.bindDocument(category, document);
+ return spyMethod ? spyMethod(Tracking, 'event') : null;
+}
+
+export function unmockTracking() {
+ window.snowplow = undefined;
+ handlers.forEach(event => document.removeEventListener(event.name, event.func));
+}
+
+export function triggerEvent(selectorOrEl, eventName = 'click') {
+ const event = new Event(eventName, { bubbles: true });
+ const el = typeof selectorOrEl === 'string' ? document.querySelector(selectorOrEl) : selectorOrEl;
+
+ el.dispatchEvent(event);
+}
diff --git a/spec/frontend/helpers/vue_resource_helper.js b/spec/frontend/helpers/vue_resource_helper.js
deleted file mode 100644
index 0f58af09933..00000000000
--- a/spec/frontend/helpers/vue_resource_helper.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// eslint-disable-next-line import/prefer-default-export
-export const headersInterceptor = (request, next) => {
- next(response => {
- const headers = {};
- response.headers.forEach((value, key) => {
- headers[key] = value;
- });
- // eslint-disable-next-line no-param-reassign
- response.headers = headers;
- });
-};
diff --git a/spec/frontend/ide/components/branches/search_list_spec.js b/spec/frontend/ide/components/branches/search_list_spec.js
new file mode 100644
index 00000000000..5cfe1c25c6b
--- /dev/null
+++ b/spec/frontend/ide/components/branches/search_list_spec.js
@@ -0,0 +1,81 @@
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import { __ } from '~/locale';
+import List from '~/ide/components/branches/search_list.vue';
+import Item from '~/ide/components/branches/item.vue';
+import { GlLoadingIcon } from '@gitlab/ui';
+import { branches } from '../../mock_data';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('IDE branches search list', () => {
+ let wrapper;
+ const fetchBranchesMock = jest.fn();
+
+ const createComponent = (state, currentBranchId = 'branch') => {
+ const fakeStore = new Vuex.Store({
+ state: {
+ currentBranchId,
+ currentProjectId: 'project',
+ },
+ modules: {
+ branches: {
+ namespaced: true,
+ state: { isLoading: false, branches: [], ...state },
+ actions: {
+ fetchBranches: fetchBranchesMock,
+ },
+ },
+ },
+ });
+
+ wrapper = shallowMount(List, {
+ localVue,
+ store: fakeStore,
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('calls fetch on mounted', () => {
+ createComponent();
+ expect(fetchBranchesMock).toHaveBeenCalled();
+ });
+
+ it('renders loading icon when `isLoading` is true', () => {
+ createComponent({ isLoading: true });
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
+ });
+
+ it('renders branches not found when search is not empty and branches list is empty', () => {
+ createComponent({ branches: [] });
+ wrapper.find('input[type="search"]').setValue('something');
+
+ return wrapper.vm.$nextTick().then(() => {
+ expect(wrapper.text()).toContain(__('No branches found'));
+ });
+ });
+
+ describe('with branches', () => {
+ it('renders list', () => {
+ createComponent({ branches });
+ const items = wrapper.findAll(Item);
+
+ expect(items.length).toBe(branches.length);
+ });
+
+ it('renders check next to active branch', () => {
+ const activeBranch = 'regular';
+ createComponent({ branches }, activeBranch);
+ const items = wrapper.findAll(Item).filter(w => w.props('isActive'));
+
+ expect(items.length).toBe(1);
+ expect(items.at(0).props('item').name).toBe(activeBranch);
+ });
+ });
+});
diff --git a/spec/frontend/ide/components/error_message_spec.js b/spec/frontend/ide/components/error_message_spec.js
new file mode 100644
index 00000000000..e995c64645e
--- /dev/null
+++ b/spec/frontend/ide/components/error_message_spec.js
@@ -0,0 +1,122 @@
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import { GlLoadingIcon } from '@gitlab/ui';
+import ErrorMessage from '~/ide/components/error_message.vue';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('IDE error message component', () => {
+ let wrapper;
+
+ const setErrorMessageMock = jest.fn();
+ const createComponent = messageProps => {
+ const fakeStore = new Vuex.Store({
+ actions: { setErrorMessage: setErrorMessageMock },
+ });
+
+ wrapper = shallowMount(ErrorMessage, {
+ propsData: {
+ message: {
+ text: 'some text',
+ actionText: 'test action',
+ actionPayload: 'testActionPayload',
+ ...messageProps,
+ },
+ },
+ store: fakeStore,
+ localVue,
+ sync: false,
+ });
+ };
+
+ beforeEach(() => {
+ setErrorMessageMock.mockReset();
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('renders error message', () => {
+ const text = 'error message';
+ createComponent({ text });
+ expect(wrapper.text()).toContain(text);
+ });
+
+ it('clears error message on click', () => {
+ createComponent();
+ wrapper.trigger('click');
+
+ expect(setErrorMessageMock).toHaveBeenCalledWith(expect.any(Object), null, undefined);
+ });
+
+ describe('with action', () => {
+ let actionMock;
+
+ const message = {
+ actionText: 'test action',
+ actionPayload: 'testActionPayload',
+ };
+
+ beforeEach(() => {
+ actionMock = jest.fn().mockResolvedValue();
+ createComponent({
+ ...message,
+ action: actionMock,
+ });
+ });
+
+ it('renders action button', () => {
+ const button = wrapper.find('button');
+
+ expect(button.exists()).toBe(true);
+ expect(button.text()).toContain(message.actionText);
+ });
+
+ it('does not clear error message on click', () => {
+ wrapper.trigger('click');
+
+ expect(setErrorMessageMock).not.toHaveBeenCalled();
+ });
+
+ it('dispatches action', () => {
+ wrapper.find('button').trigger('click');
+
+ expect(actionMock).toHaveBeenCalledWith(message.actionPayload);
+ });
+
+ it('does not dispatch action when already loading', () => {
+ wrapper.find('button').trigger('click');
+ actionMock.mockReset();
+ wrapper.find('button').trigger('click');
+ expect(actionMock).not.toHaveBeenCalled();
+ });
+
+ it('shows loading icon when loading', () => {
+ let resolveAction;
+ actionMock.mockImplementation(
+ () =>
+ new Promise(resolve => {
+ resolveAction = resolve;
+ }),
+ );
+ wrapper.find('button').trigger('click');
+
+ return wrapper.vm.$nextTick(() => {
+ expect(wrapper.find(GlLoadingIcon).isVisible()).toBe(true);
+ resolveAction();
+ });
+ });
+
+ it('hides loading icon when operation finishes', () => {
+ wrapper.find('button').trigger('click');
+ return actionMock()
+ .then(() => wrapper.vm.$nextTick())
+ .then(() => {
+ expect(wrapper.find(GlLoadingIcon).isVisible()).toBe(false);
+ });
+ });
+ });
+});
diff --git a/spec/frontend/ide/components/file_templates/dropdown_spec.js b/spec/frontend/ide/components/file_templates/dropdown_spec.js
new file mode 100644
index 00000000000..83d797469ad
--- /dev/null
+++ b/spec/frontend/ide/components/file_templates/dropdown_spec.js
@@ -0,0 +1,175 @@
+import Vuex from 'vuex';
+import $ from 'jquery';
+import { GlLoadingIcon } from '@gitlab/ui';
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import Dropdown from '~/ide/components/file_templates/dropdown.vue';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('IDE file templates dropdown component', () => {
+ let wrapper;
+ let element;
+ let fetchTemplateTypesMock;
+
+ const defaultProps = {
+ label: 'label',
+ };
+
+ const findItemButtons = () => wrapper.findAll('button');
+ const findSearch = () => wrapper.find('input[type="search"]');
+ const triggerDropdown = () => $(element).trigger('show.bs.dropdown');
+
+ const createComponent = ({ props, state } = {}) => {
+ fetchTemplateTypesMock = jest.fn();
+ const fakeStore = new Vuex.Store({
+ modules: {
+ fileTemplates: {
+ namespaced: true,
+ state: {
+ templates: [],
+ isLoading: false,
+ ...state,
+ },
+ actions: {
+ fetchTemplateTypes: fetchTemplateTypesMock,
+ },
+ },
+ },
+ });
+
+ wrapper = shallowMount(Dropdown, {
+ propsData: {
+ ...defaultProps,
+ ...props,
+ },
+ store: fakeStore,
+ localVue,
+ sync: false,
+ });
+
+ ({ element } = wrapper);
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('calls clickItem on click', () => {
+ const itemData = { name: 'test.yml ' };
+ createComponent({ props: { data: [itemData] } });
+ const item = findItemButtons().at(0);
+ item.trigger('click');
+
+ expect(wrapper.emitted().click[0][0]).toBe(itemData);
+ });
+
+ it('renders dropdown title', () => {
+ const title = 'Test title';
+ createComponent({ props: { title } });
+
+ expect(wrapper.find('.dropdown-title').text()).toContain(title);
+ });
+
+ describe('in async mode', () => {
+ const defaultAsyncProps = { ...defaultProps, isAsyncData: true };
+
+ it('calls `fetchTemplateTypes` on dropdown event', () => {
+ createComponent({ props: defaultAsyncProps });
+
+ triggerDropdown();
+
+ expect(fetchTemplateTypesMock).toHaveBeenCalled();
+ });
+
+ it('does not call `fetchTemplateTypes` on dropdown event if destroyed', () => {
+ createComponent({ props: defaultAsyncProps });
+ wrapper.destroy();
+
+ triggerDropdown();
+
+ expect(fetchTemplateTypesMock).not.toHaveBeenCalled();
+ });
+
+ it('shows loader when isLoading is true', () => {
+ createComponent({ props: defaultAsyncProps, state: { isLoading: true } });
+
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
+ });
+
+ it('renders templates', () => {
+ const templates = [{ name: 'file-1' }, { name: 'file-2' }];
+ createComponent({
+ props: { ...defaultAsyncProps, data: [{ name: 'should-never-appear ' }] },
+ state: {
+ templates,
+ },
+ });
+ const items = findItemButtons();
+
+ expect(items.wrappers.map(x => x.text())).toEqual(templates.map(x => x.name));
+ });
+
+ it('searches template data', () => {
+ const templates = [{ name: 'match 1' }, { name: 'other' }, { name: 'match 2' }];
+ const matches = ['match 1', 'match 2'];
+ createComponent({
+ props: { ...defaultAsyncProps, data: matches, searchable: true },
+ state: { templates },
+ });
+ findSearch().setValue('match');
+ return wrapper.vm.$nextTick().then(() => {
+ const items = findItemButtons();
+
+ expect(items.length).toBe(matches.length);
+ expect(items.wrappers.map(x => x.text())).toEqual(matches);
+ });
+ });
+
+ it('does not render input when `searchable` is true & `showLoading` is true', () => {
+ createComponent({
+ props: { ...defaultAsyncProps, searchable: true },
+ state: { isLoading: true },
+ });
+
+ expect(findSearch().exists()).toBe(false);
+ });
+ });
+
+ describe('in sync mode', () => {
+ it('renders props data', () => {
+ const data = [{ name: 'file-1' }, { name: 'file-2' }];
+ createComponent({
+ props: { data },
+ state: {
+ templates: [{ name: 'should-never-appear ' }],
+ },
+ });
+
+ const items = findItemButtons();
+
+ expect(items.length).toBe(data.length);
+ expect(items.wrappers.map(x => x.text())).toEqual(data.map(x => x.name));
+ });
+
+ it('renders input when `searchable` is true', () => {
+ createComponent({ props: { searchable: true } });
+
+ expect(findSearch().exists()).toBe(true);
+ });
+
+ it('searches data', () => {
+ const data = [{ name: 'match 1' }, { name: 'other' }, { name: 'match 2' }];
+ const matches = ['match 1', 'match 2'];
+ createComponent({ props: { searchable: true, data } });
+ findSearch().setValue('match');
+ return wrapper.vm.$nextTick().then(() => {
+ const items = findItemButtons();
+
+ expect(items.length).toBe(matches.length);
+ expect(items.wrappers.map(x => x.text())).toEqual(matches);
+ });
+ });
+ });
+});
diff --git a/spec/frontend/ide/components/jobs/list_spec.js b/spec/frontend/ide/components/jobs/list_spec.js
new file mode 100644
index 00000000000..ec2e5b05048
--- /dev/null
+++ b/spec/frontend/ide/components/jobs/list_spec.js
@@ -0,0 +1,115 @@
+import { shallowMount, mount, createLocalVue } from '@vue/test-utils';
+import { GlLoadingIcon } from '@gitlab/ui';
+import Vuex from 'vuex';
+import StageList from '~/ide/components/jobs/list.vue';
+import Stage from '~/ide/components/jobs/stage.vue';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+const storeActions = {
+ fetchJobs: jest.fn(),
+ toggleStageCollapsed: jest.fn(),
+ setDetailJob: jest.fn(),
+};
+
+const store = new Vuex.Store({
+ modules: {
+ pipelines: {
+ namespaced: true,
+ actions: storeActions,
+ },
+ },
+});
+
+describe('IDE stages list', () => {
+ let wrapper;
+
+ const defaultProps = {
+ stages: [],
+ loading: false,
+ };
+
+ const stages = ['build', 'test', 'deploy'].map((name, id) => ({
+ id,
+ name,
+ jobs: [],
+ status: { icon: 'status_success' },
+ }));
+
+ const createComponent = props => {
+ wrapper = shallowMount(StageList, {
+ propsData: {
+ ...defaultProps,
+ ...props,
+ },
+ localVue,
+ store,
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ Object.values(storeActions).forEach(actionMock => actionMock.mockClear());
+ });
+
+ afterAll(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('renders loading icon when no stages & loading', () => {
+ createComponent({ loading: true, stages: [] });
+
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
+ });
+
+ it('renders stages components for each stage', () => {
+ createComponent({ stages });
+ expect(wrapper.findAll(Stage).length).toBe(stages.length);
+ });
+
+ it('triggers fetchJobs action when stage emits fetch event', () => {
+ createComponent({ stages });
+ wrapper.find(Stage).vm.$emit('fetch');
+ expect(storeActions.fetchJobs).toHaveBeenCalled();
+ });
+
+ it('triggers toggleStageCollapsed action when stage emits toggleCollapsed event', () => {
+ createComponent({ stages });
+ wrapper.find(Stage).vm.$emit('toggleCollapsed');
+ expect(storeActions.toggleStageCollapsed).toHaveBeenCalled();
+ });
+
+ it('triggers setDetailJob action when stage emits clickViewLog event', () => {
+ createComponent({ stages });
+ wrapper.find(Stage).vm.$emit('clickViewLog');
+ expect(storeActions.setDetailJob).toHaveBeenCalled();
+ });
+
+ describe('integration tests', () => {
+ const findCardHeader = () => wrapper.find('.card-header');
+
+ beforeEach(() => {
+ wrapper = mount(StageList, {
+ propsData: { ...defaultProps, stages },
+ store,
+ sync: false,
+ localVue,
+ });
+ });
+
+ it('calls toggleStageCollapsed when clicking stage header', () => {
+ findCardHeader().trigger('click');
+
+ expect(storeActions.toggleStageCollapsed).toHaveBeenCalledWith(
+ expect.any(Object),
+ 0,
+ undefined,
+ );
+ });
+
+ it('calls fetchJobs when stage is mounted', () => {
+ expect(storeActions.fetchJobs.mock.calls.map(([, stage]) => stage)).toEqual(stages);
+ });
+ });
+});
diff --git a/spec/frontend/ide/components/merge_requests/list_spec.js b/spec/frontend/ide/components/merge_requests/list_spec.js
new file mode 100644
index 00000000000..86a311acad4
--- /dev/null
+++ b/spec/frontend/ide/components/merge_requests/list_spec.js
@@ -0,0 +1,214 @@
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import List from '~/ide/components/merge_requests/list.vue';
+import Item from '~/ide/components/merge_requests/item.vue';
+import TokenedInput from '~/ide/components/shared/tokened_input.vue';
+import { GlLoadingIcon } from '@gitlab/ui';
+import { mergeRequests as mergeRequestsMock } from '../../mock_data';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('IDE merge requests list', () => {
+ let wrapper;
+ let fetchMergeRequestsMock;
+
+ const findSearchTypeButtons = () => wrapper.findAll('button');
+ const findTokenedInput = () => wrapper.find(TokenedInput);
+
+ const createComponent = (state = {}) => {
+ const { mergeRequests = {}, ...restOfState } = state;
+ const fakeStore = new Vuex.Store({
+ state: {
+ currentMergeRequestId: '1',
+ currentProjectId: 'project/master',
+ ...restOfState,
+ },
+ modules: {
+ mergeRequests: {
+ namespaced: true,
+ state: {
+ isLoading: false,
+ mergeRequests: [],
+ ...mergeRequests,
+ },
+ actions: {
+ fetchMergeRequests: fetchMergeRequestsMock,
+ },
+ },
+ },
+ });
+
+ wrapper = shallowMount(List, {
+ store: fakeStore,
+ localVue,
+ sync: false,
+ });
+ };
+
+ beforeEach(() => {
+ fetchMergeRequestsMock = jest.fn();
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('calls fetch on mounted', () => {
+ createComponent();
+ expect(fetchMergeRequestsMock).toHaveBeenCalledWith(
+ expect.any(Object),
+ {
+ search: '',
+ type: '',
+ },
+ undefined,
+ );
+ });
+
+ it('renders loading icon when merge request is loading', () => {
+ createComponent({ mergeRequests: { isLoading: true } });
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
+ });
+
+ it('renders no search results text when search is not empty', () => {
+ createComponent();
+ findTokenedInput().vm.$emit('input', 'something');
+ return wrapper.vm.$nextTick().then(() => {
+ expect(wrapper.text()).toContain('No merge requests found');
+ });
+ });
+
+ it('clicking on search type, sets currentSearchType and loads merge requests', () => {
+ createComponent();
+ findTokenedInput().vm.$emit('focus');
+
+ return wrapper.vm
+ .$nextTick()
+ .then(() => {
+ findSearchTypeButtons()
+ .at(0)
+ .trigger('click');
+ return wrapper.vm.$nextTick();
+ })
+ .then(() => {
+ const searchType = wrapper.vm.$options.searchTypes[0];
+
+ expect(findTokenedInput().props('tokens')).toEqual([searchType]);
+ expect(fetchMergeRequestsMock).toHaveBeenCalledWith(
+ expect.any(Object),
+ {
+ type: searchType.type,
+ search: '',
+ },
+ undefined,
+ );
+ });
+ });
+
+ describe('with merge requests', () => {
+ let defaultStateWithMergeRequests;
+
+ beforeAll(() => {
+ defaultStateWithMergeRequests = {
+ mergeRequests: {
+ isLoading: false,
+ mergeRequests: [
+ { ...mergeRequestsMock[0], projectPathWithNamespace: 'gitlab-org/gitlab-foss' },
+ ],
+ },
+ };
+ });
+
+ it('renders list', () => {
+ createComponent(defaultStateWithMergeRequests);
+
+ expect(wrapper.findAll(Item).length).toBe(1);
+ expect(wrapper.find(Item).props('item')).toBe(
+ defaultStateWithMergeRequests.mergeRequests.mergeRequests[0],
+ );
+ });
+
+ describe('when searching merge requests', () => {
+ it('calls `loadMergeRequests` on input in search field', () => {
+ createComponent(defaultStateWithMergeRequests);
+ const input = findTokenedInput();
+ input.vm.$emit('input', 'something');
+ fetchMergeRequestsMock.mockClear();
+
+ jest.runAllTimers();
+ return wrapper.vm.$nextTick().then(() => {
+ expect(fetchMergeRequestsMock).toHaveBeenCalledWith(
+ expect.any(Object),
+ {
+ search: 'something',
+ type: '',
+ },
+ undefined,
+ );
+ });
+ });
+ });
+ });
+
+ describe('on search focus', () => {
+ let input;
+
+ beforeEach(() => {
+ createComponent();
+ input = findTokenedInput();
+ });
+
+ describe('without search value', () => {
+ beforeEach(() => {
+ input.vm.$emit('focus');
+ return wrapper.vm.$nextTick();
+ });
+
+ it('shows search types', () => {
+ const buttons = findSearchTypeButtons();
+ expect(buttons.wrappers.map(x => x.text().trim())).toEqual(
+ wrapper.vm.$options.searchTypes.map(x => x.label),
+ );
+ });
+
+ it('hides search types when search changes', () => {
+ input.vm.$emit('input', 'something');
+
+ return wrapper.vm.$nextTick().then(() => {
+ expect(findSearchTypeButtons().exists()).toBe(false);
+ });
+ });
+
+ describe('with search type', () => {
+ beforeEach(() => {
+ findSearchTypeButtons()
+ .at(0)
+ .trigger('click');
+
+ return wrapper.vm
+ .$nextTick()
+ .then(() => input.vm.$emit('focus'))
+ .then(() => wrapper.vm.$nextTick());
+ });
+
+ it('does not show search types', () => {
+ expect(findSearchTypeButtons().exists()).toBe(false);
+ });
+ });
+ });
+
+ describe('with search value', () => {
+ beforeEach(() => {
+ input.vm.$emit('input', 'something');
+ input.vm.$emit('focus');
+ return wrapper.vm.$nextTick();
+ });
+
+ it('does not show search types', () => {
+ expect(findSearchTypeButtons().exists()).toBe(false);
+ });
+ });
+ });
+});
diff --git a/spec/frontend/ide/components/pipelines/__snapshots__/list_spec.js.snap b/spec/frontend/ide/components/pipelines/__snapshots__/list_spec.js.snap
new file mode 100644
index 00000000000..5fbe6af750d
--- /dev/null
+++ b/spec/frontend/ide/components/pipelines/__snapshots__/list_spec.js.snap
@@ -0,0 +1,15 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`IDE pipelines list when loaded renders empty state when no latestPipeline 1`] = `
+<div
+ class="ide-pipeline"
+>
+ <!---->
+
+ <emptystate-stub
+ cansetci="true"
+ emptystatesvgpath="http://test.host"
+ helppagepath="http://test.host"
+ />
+</div>
+`;
diff --git a/spec/frontend/ide/components/pipelines/list_spec.js b/spec/frontend/ide/components/pipelines/list_spec.js
new file mode 100644
index 00000000000..a974139a8f9
--- /dev/null
+++ b/spec/frontend/ide/components/pipelines/list_spec.js
@@ -0,0 +1,193 @@
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import List from '~/ide/components/pipelines/list.vue';
+import JobsList from '~/ide/components/jobs/list.vue';
+import Tab from '~/vue_shared/components/tabs/tab.vue';
+import CiIcon from '~/vue_shared/components/ci_icon.vue';
+import { GlLoadingIcon } from '@gitlab/ui';
+import { TEST_HOST } from 'helpers/test_constants';
+import { pipelines } from '../../../../javascripts/ide/mock_data';
+
+const localVue = createLocalVue();
+localVue.use(Vuex);
+
+describe('IDE pipelines list', () => {
+ let wrapper;
+
+ const defaultState = {
+ links: { ciHelpPagePath: TEST_HOST },
+ pipelinesEmptyStateSvgPath: TEST_HOST,
+ pipelines: {
+ stages: [],
+ failedStages: [],
+ isLoadingJobs: false,
+ },
+ };
+
+ const fetchLatestPipelineMock = jest.fn();
+ const failedStagesGetterMock = jest.fn().mockReturnValue([]);
+
+ const createComponent = (state = {}) => {
+ const { pipelines: pipelinesState, ...restOfState } = state;
+ const { defaultPipelines, ...defaultRestOfState } = defaultState;
+
+ const fakeStore = new Vuex.Store({
+ getters: { currentProject: () => ({ web_url: 'some/url ' }) },
+ state: {
+ ...defaultRestOfState,
+ ...restOfState,
+ },
+ modules: {
+ pipelines: {
+ namespaced: true,
+ state: {
+ ...defaultPipelines,
+ ...pipelinesState,
+ },
+ actions: {
+ fetchLatestPipeline: fetchLatestPipelineMock,
+ },
+ getters: {
+ jobsCount: () => 1,
+ failedJobsCount: () => 1,
+ failedStages: failedStagesGetterMock,
+ pipelineFailed: () => false,
+ },
+ methods: {
+ fetchLatestPipeline: jest.fn(),
+ },
+ },
+ },
+ });
+
+ wrapper = shallowMount(List, {
+ localVue,
+ store: fakeStore,
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('fetches latest pipeline', () => {
+ createComponent();
+
+ expect(fetchLatestPipelineMock).toHaveBeenCalled();
+ });
+
+ describe('when loading', () => {
+ let defaultPipelinesLoadingState;
+ beforeAll(() => {
+ defaultPipelinesLoadingState = {
+ ...defaultState.pipelines,
+ isLoadingPipeline: true,
+ };
+ });
+
+ it('does not render when pipeline has loaded before', () => {
+ createComponent({
+ pipelines: {
+ ...defaultPipelinesLoadingState,
+ hasLoadedPipeline: true,
+ },
+ });
+
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(false);
+ });
+
+ it('renders loading state', () => {
+ createComponent({
+ pipelines: {
+ ...defaultPipelinesLoadingState,
+ hasLoadedPipeline: false,
+ },
+ });
+
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
+ });
+ });
+
+ describe('when loaded', () => {
+ let defaultPipelinesLoadedState;
+ beforeAll(() => {
+ defaultPipelinesLoadedState = {
+ ...defaultState.pipelines,
+ isLoadingPipeline: false,
+ hasLoadedPipeline: true,
+ };
+ });
+
+ it('renders empty state when no latestPipeline', () => {
+ createComponent({ pipelines: { ...defaultPipelinesLoadedState, latestPipeline: null } });
+ expect(wrapper.element).toMatchSnapshot();
+ });
+
+ describe('with latest pipeline loaded', () => {
+ let withLatestPipelineState;
+ beforeAll(() => {
+ withLatestPipelineState = {
+ ...defaultPipelinesLoadedState,
+ latestPipeline: pipelines[0],
+ };
+ });
+
+ it('renders ci icon', () => {
+ createComponent({ pipelines: withLatestPipelineState });
+ expect(wrapper.find(CiIcon).exists()).toBe(true);
+ });
+
+ it('renders pipeline data', () => {
+ createComponent({ pipelines: withLatestPipelineState });
+
+ expect(wrapper.text()).toContain('#1');
+ });
+
+ it('renders list of jobs', () => {
+ const stages = [];
+ const isLoadingJobs = true;
+ createComponent({ pipelines: { ...withLatestPipelineState, stages, isLoadingJobs } });
+
+ const jobProps = wrapper
+ .findAll(Tab)
+ .at(0)
+ .find(JobsList)
+ .props();
+ expect(jobProps.stages).toBe(stages);
+ expect(jobProps.loading).toBe(isLoadingJobs);
+ });
+
+ it('renders list of failed jobs', () => {
+ const failedStages = [];
+ failedStagesGetterMock.mockReset().mockReturnValue(failedStages);
+ const isLoadingJobs = true;
+ createComponent({ pipelines: { ...withLatestPipelineState, isLoadingJobs } });
+
+ const jobProps = wrapper
+ .findAll(Tab)
+ .at(1)
+ .find(JobsList)
+ .props();
+ expect(jobProps.stages).toBe(failedStages);
+ expect(jobProps.loading).toBe(isLoadingJobs);
+ });
+
+ describe('with YAML error', () => {
+ it('renders YAML error', () => {
+ const yamlError = 'test yaml error';
+ createComponent({
+ pipelines: {
+ ...defaultPipelinesLoadedState,
+ latestPipeline: { ...pipelines[0], yamlError },
+ },
+ });
+
+ expect(wrapper.text()).toContain('Found errors in your .gitlab-ci.yml:');
+ expect(wrapper.text()).toContain(yamlError);
+ });
+ });
+ });
+ });
+});
diff --git a/spec/frontend/ide/lib/files_spec.js b/spec/frontend/ide/lib/files_spec.js
index 08a31318544..654dc6c13c8 100644
--- a/spec/frontend/ide/lib/files_spec.js
+++ b/spec/frontend/ide/lib/files_spec.js
@@ -1,6 +1,6 @@
import { viewerInformationForPath } from '~/vue_shared/components/content_viewer/lib/viewer_utils';
-import { decorateFiles, splitParent, escapeFileUrl } from '~/ide/lib/files';
-import { decorateData } from '~/ide/stores/utils';
+import { decorateFiles, splitParent } from '~/ide/lib/files';
+import { decorateData, escapeFileUrl } from '~/ide/stores/utils';
const TEST_BRANCH_ID = 'lorem-ipsum';
const TEST_PROJECT_ID = 10;
diff --git a/spec/frontend/ide/mock_data.js b/spec/frontend/ide/mock_data.js
new file mode 100644
index 00000000000..80eb15fe5a6
--- /dev/null
+++ b/spec/frontend/ide/mock_data.js
@@ -0,0 +1,228 @@
+import { TEST_HOST } from 'spec/test_constants';
+
+export const projectData = {
+ id: 1,
+ name: 'abcproject',
+ web_url: '',
+ avatar_url: '',
+ path: '',
+ name_with_namespace: 'namespace/abcproject',
+ branches: {
+ master: {
+ treeId: 'abcproject/master',
+ can_push: true,
+ commit: {
+ id: '123',
+ },
+ },
+ },
+ mergeRequests: {},
+ merge_requests_enabled: true,
+ default_branch: 'master',
+};
+
+export const pipelines = [
+ {
+ id: 1,
+ ref: 'master',
+ sha: '123',
+ details: {
+ status: {
+ icon: 'status_failed',
+ group: 'failed',
+ text: 'Failed',
+ },
+ },
+ commit: { id: '123' },
+ },
+ {
+ id: 2,
+ ref: 'master',
+ sha: '213',
+ details: {
+ status: {
+ icon: 'status_failed',
+ group: 'failed',
+ text: 'Failed',
+ },
+ },
+ commit: { id: '213' },
+ },
+];
+
+export const stages = [
+ {
+ dropdown_path: `${TEST_HOST}/testing`,
+ name: 'build',
+ status: {
+ icon: 'status_failed',
+ group: 'failed',
+ text: 'failed',
+ },
+ },
+ {
+ dropdown_path: 'testing',
+ name: 'test',
+ status: {
+ icon: 'status_failed',
+ group: 'failed',
+ text: 'failed',
+ },
+ },
+];
+
+export const jobs = [
+ {
+ id: 1,
+ name: 'test',
+ path: 'testing',
+ status: {
+ icon: 'status_success',
+ text: 'passed',
+ },
+ stage: 'test',
+ duration: 1,
+ started: new Date(),
+ },
+ {
+ id: 2,
+ name: 'test 2',
+ path: 'testing2',
+ status: {
+ icon: 'status_success',
+ text: 'passed',
+ },
+ stage: 'test',
+ duration: 1,
+ started: new Date(),
+ },
+ {
+ id: 3,
+ name: 'test 3',
+ path: 'testing3',
+ status: {
+ icon: 'status_success',
+ text: 'passed',
+ },
+ stage: 'test',
+ duration: 1,
+ started: new Date(),
+ },
+ {
+ id: 4,
+ name: 'test 4',
+ path: 'testing4',
+ status: {
+ icon: 'status_failed',
+ text: 'failed',
+ },
+ stage: 'build',
+ duration: 1,
+ started: new Date(),
+ },
+];
+
+export const fullPipelinesResponse = {
+ data: {
+ count: {
+ all: 2,
+ },
+ pipelines: [
+ {
+ id: '51',
+ path: 'test',
+ commit: {
+ id: '123',
+ },
+ details: {
+ status: {
+ icon: 'status_failed',
+ text: 'failed',
+ },
+ stages: [...stages],
+ },
+ },
+ {
+ id: '50',
+ commit: {
+ id: 'abc123def456ghi789jkl',
+ },
+ details: {
+ status: {
+ icon: 'status_success',
+ text: 'passed',
+ },
+ stages: [...stages],
+ },
+ },
+ ],
+ },
+};
+
+export const mergeRequests = [
+ {
+ id: 1,
+ iid: 1,
+ title: 'Test merge request',
+ project_id: 1,
+ web_url: `${TEST_HOST}/namespace/project-path/merge_requests/1`,
+ },
+];
+
+export const branches = [
+ {
+ id: 1,
+ name: 'master',
+ commit: {
+ message: 'Update master branch',
+ committed_date: '2018-08-01T00:20:05Z',
+ },
+ can_push: true,
+ protected: true,
+ default: true,
+ },
+ {
+ id: 2,
+ name: 'protected/no-access',
+ commit: {
+ message: 'Update some stuff',
+ committed_date: '2018-08-02T00:00:05Z',
+ },
+ can_push: false,
+ protected: true,
+ default: false,
+ },
+ {
+ id: 3,
+ name: 'protected/access',
+ commit: {
+ message: 'Update some stuff',
+ committed_date: '2018-08-02T00:00:05Z',
+ },
+ can_push: true,
+ protected: true,
+ default: false,
+ },
+ {
+ id: 4,
+ name: 'regular',
+ commit: {
+ message: 'Update some more stuff',
+ committed_date: '2018-06-30T00:20:05Z',
+ },
+ can_push: true,
+ protected: false,
+ default: false,
+ },
+ {
+ id: 5,
+ name: 'regular/no-access',
+ commit: {
+ message: 'Update some more stuff',
+ committed_date: '2018-06-30T00:20:05Z',
+ },
+ can_push: false,
+ protected: false,
+ default: false,
+ },
+];
diff --git a/spec/frontend/ide/stores/integration_spec.js b/spec/frontend/ide/stores/integration_spec.js
new file mode 100644
index 00000000000..443de18f288
--- /dev/null
+++ b/spec/frontend/ide/stores/integration_spec.js
@@ -0,0 +1,100 @@
+import { decorateFiles } from '~/ide/lib/files';
+import { createStore } from '~/ide/stores';
+
+const TEST_BRANCH = 'test_branch';
+const TEST_NAMESPACE = 'test_namespace';
+const TEST_PROJECT_ID = `${TEST_NAMESPACE}/test_project`;
+const TEST_PATH_DIR = 'src';
+const TEST_PATH = `${TEST_PATH_DIR}/foo.js`;
+const TEST_CONTENT = `Lorem ipsum dolar sit
+Lorem ipsum dolar
+Lorem ipsum
+Lorem
+`;
+
+jest.mock('~/ide/ide_router');
+
+describe('IDE store integration', () => {
+ let store;
+
+ beforeEach(() => {
+ store = createStore();
+ store.replaceState({
+ ...store.state,
+ projects: {
+ [TEST_PROJECT_ID]: {
+ web_url: 'test_web_url',
+ branches: [],
+ },
+ },
+ currentProjectId: TEST_PROJECT_ID,
+ currentBranchId: TEST_BRANCH,
+ });
+ });
+
+ describe('with project and files', () => {
+ beforeEach(() => {
+ const { entries, treeList } = decorateFiles({
+ data: [`${TEST_PATH_DIR}/`, TEST_PATH, 'README.md'],
+ projectId: TEST_PROJECT_ID,
+ branchId: TEST_BRANCH,
+ });
+
+ Object.assign(entries[TEST_PATH], {
+ raw: TEST_CONTENT,
+ });
+
+ store.replaceState({
+ ...store.state,
+ trees: {
+ [`${TEST_PROJECT_ID}/${TEST_BRANCH}`]: {
+ tree: treeList,
+ },
+ },
+ entries,
+ });
+ });
+
+ describe('when a file is deleted and readded', () => {
+ beforeEach(() => {
+ store.dispatch('deleteEntry', TEST_PATH);
+ store.dispatch('createTempEntry', { name: TEST_PATH, type: 'blob' });
+ });
+
+ it('has changed and staged', () => {
+ expect(store.state.changedFiles).toEqual([
+ expect.objectContaining({
+ path: TEST_PATH,
+ tempFile: true,
+ deleted: false,
+ }),
+ ]);
+
+ expect(store.state.stagedFiles).toEqual([
+ expect.objectContaining({
+ path: TEST_PATH,
+ deleted: true,
+ }),
+ ]);
+ });
+
+ it('cleans up after commit', () => {
+ const expected = expect.objectContaining({
+ path: TEST_PATH,
+ staged: false,
+ changed: false,
+ tempFile: false,
+ deleted: false,
+ });
+ store.dispatch('stageChange', TEST_PATH);
+
+ store.dispatch('commit/updateFilesAfterCommit', { data: {} });
+
+ expect(store.state.entries[TEST_PATH]).toEqual(expected);
+ expect(store.state.entries[TEST_PATH_DIR].tree.find(x => x.path === TEST_PATH)).toEqual(
+ expected,
+ );
+ });
+ });
+ });
+});
diff --git a/spec/frontend/import_projects/components/import_projects_table_spec.js b/spec/frontend/import_projects/components/import_projects_table_spec.js
index 17a998d0174..708f2758083 100644
--- a/spec/frontend/import_projects/components/import_projects_table_spec.js
+++ b/spec/frontend/import_projects/components/import_projects_table_spec.js
@@ -93,7 +93,7 @@ describe('ImportProjectsTable', () => {
return vm.$nextTick().then(() => {
expect(vm.$el.querySelector('.js-loading-button-icon')).toBeNull();
expect(vm.$el.querySelector('.table')).toBeNull();
- expect(vm.$el.innerText).toMatch(`No ${providerTitle} repositories available to import`);
+ expect(vm.$el.innerText).toMatch(`No ${providerTitle} repositories found`);
});
});
@@ -182,4 +182,10 @@ describe('ImportProjectsTable', () => {
expect(vm.$el.querySelector(`.ic-status_${statusObject.icon}`)).not.toBeNull();
});
});
+
+ it('renders filtering input field', () => {
+ expect(
+ vm.$el.querySelector('input[data-qa-selector="githubish_import_filter_field"]'),
+ ).not.toBeNull();
+ });
});
diff --git a/spec/frontend/import_projects/store/actions_spec.js b/spec/frontend/import_projects/store/actions_spec.js
index 6a7b90788dd..340b6f02d93 100644
--- a/spec/frontend/import_projects/store/actions_spec.js
+++ b/spec/frontend/import_projects/store/actions_spec.js
@@ -97,6 +97,7 @@ describe('import_projects store actions', () => {
describe('fetchRepos', () => {
let mock;
+ const payload = { imported_projects: [{}], provider_repos: [{}], namespaces: [{}] };
beforeEach(() => {
localState.reposPath = `${TEST_HOST}/endpoint.json`;
@@ -105,8 +106,7 @@ describe('import_projects store actions', () => {
afterEach(() => mock.restore());
- it('dispatches requestRepos and receiveReposSuccess actions on a successful request', done => {
- const payload = { imported_projects: [{}], provider_repos: [{}], namespaces: [{}] };
+ it('dispatches stopJobsPolling, requestRepos and receiveReposSuccess actions on a successful request', done => {
mock.onGet(`${TEST_HOST}/endpoint.json`).reply(200, payload);
testAction(
@@ -115,6 +115,7 @@ describe('import_projects store actions', () => {
localState,
[],
[
+ { type: 'stopJobsPolling' },
{ type: 'requestRepos' },
{
type: 'receiveReposSuccess',
@@ -128,7 +129,7 @@ describe('import_projects store actions', () => {
);
});
- it('dispatches requestRepos and receiveReposSuccess actions on an unsuccessful request', done => {
+ it('dispatches stopJobsPolling, requestRepos and receiveReposError actions on an unsuccessful request', done => {
mock.onGet(`${TEST_HOST}/endpoint.json`).reply(500);
testAction(
@@ -136,10 +137,39 @@ describe('import_projects store actions', () => {
null,
localState,
[],
- [{ type: 'requestRepos' }, { type: 'receiveReposError' }],
+ [{ type: 'stopJobsPolling' }, { type: 'requestRepos' }, { type: 'receiveReposError' }],
done,
);
});
+
+ describe('when filtered', () => {
+ beforeEach(() => {
+ localState.filter = 'filter';
+ });
+
+ it('fetches repos with filter applied', done => {
+ mock.onGet(`${TEST_HOST}/endpoint.json?filter=filter`).reply(200, payload);
+
+ testAction(
+ fetchRepos,
+ null,
+ localState,
+ [],
+ [
+ { type: 'stopJobsPolling' },
+ { type: 'requestRepos' },
+ {
+ type: 'receiveReposSuccess',
+ payload: convertObjectPropsToCamelCase(payload, { deep: true }),
+ },
+ {
+ type: 'fetchJobs',
+ },
+ ],
+ done,
+ );
+ });
+ });
});
describe('requestImport', () => {
@@ -249,6 +279,7 @@ describe('import_projects store actions', () => {
describe('fetchJobs', () => {
let mock;
+ const updatedProjects = [{ name: 'imported/project' }, { name: 'provider/repo' }];
beforeEach(() => {
localState.jobsPath = `${TEST_HOST}/endpoint.json`;
@@ -263,7 +294,6 @@ describe('import_projects store actions', () => {
afterEach(() => mock.restore());
it('dispatches requestJobs and receiveJobsSuccess actions on a successful request', done => {
- const updatedProjects = [{ name: 'imported/project' }, { name: 'provider/repo' }];
mock.onGet(`${TEST_HOST}/endpoint.json`).reply(200, updatedProjects);
testAction(
@@ -280,5 +310,29 @@ describe('import_projects store actions', () => {
done,
);
});
+
+ describe('when filtered', () => {
+ beforeEach(() => {
+ localState.filter = 'filter';
+ });
+
+ it('fetches realtime changes with filter applied', done => {
+ mock.onGet(`${TEST_HOST}/endpoint.json?filter=filter`).reply(200, updatedProjects);
+
+ testAction(
+ fetchJobs,
+ null,
+ localState,
+ [],
+ [
+ {
+ type: 'receiveJobsSuccess',
+ payload: convertObjectPropsToCamelCase(updatedProjects, { deep: true }),
+ },
+ ],
+ done,
+ );
+ });
+ });
});
});
diff --git a/spec/frontend/issue_show/store_spec.js b/spec/frontend/issue_show/store_spec.js
new file mode 100644
index 00000000000..b7fd70bf00e
--- /dev/null
+++ b/spec/frontend/issue_show/store_spec.js
@@ -0,0 +1,39 @@
+import Store from '~/issue_show/stores';
+import updateDescription from '~/issue_show/utils/update_description';
+
+jest.mock('~/issue_show/utils/update_description');
+
+describe('Store', () => {
+ let store;
+
+ beforeEach(() => {
+ store = new Store({
+ descriptionHtml: '<p>This is a description</p>',
+ });
+ });
+
+ describe('updateState', () => {
+ beforeEach(() => {
+ document.body.innerHTML = `
+ <div class="detail-page-description content-block">
+ <details open>
+ <summary>One</summary>
+ </details>
+ <details>
+ <summary>Two</summary>
+ </details>
+ </div>
+ `;
+ });
+
+ afterEach(() => {
+ document.getElementsByTagName('html')[0].innerHTML = '';
+ });
+
+ it('calls updateDetailsState', () => {
+ store.updateState({ description: '' });
+
+ expect(updateDescription).toHaveBeenCalledTimes(1);
+ });
+ });
+});
diff --git a/spec/frontend/issue_show/utils/update_description_spec.js b/spec/frontend/issue_show/utils/update_description_spec.js
new file mode 100644
index 00000000000..b2c6bd3c302
--- /dev/null
+++ b/spec/frontend/issue_show/utils/update_description_spec.js
@@ -0,0 +1,24 @@
+import updateDescription from '~/issue_show/utils/update_description';
+
+describe('updateDescription', () => {
+ it('returns the correct value to be set as descriptionHtml', () => {
+ const actual = updateDescription(
+ '<details><summary>One</summary></details><details><summary>Two</summary></details>',
+ [{ open: true }, { open: false }], // mocking NodeList from the dom.
+ );
+
+ expect(actual).toEqual(
+ '<details open="true"><summary>One</summary></details><details><summary>Two</summary></details>',
+ );
+ });
+
+ describe('when description details returned from api is different then whats currently on the dom', () => {
+ it('returns the description from the api', () => {
+ const dataDescription = '<details><summary>One</summary></details>';
+
+ const actual = updateDescription(dataDescription, []);
+
+ expect(actual).toEqual(dataDescription);
+ });
+ });
+});
diff --git a/spec/frontend/jobs/components/log/collapsible_section_spec.js b/spec/frontend/jobs/components/log/collapsible_section_spec.js
new file mode 100644
index 00000000000..01184a51193
--- /dev/null
+++ b/spec/frontend/jobs/components/log/collapsible_section_spec.js
@@ -0,0 +1,73 @@
+import { mount } from '@vue/test-utils';
+import CollpasibleSection from '~/jobs/components/log/collapsible_section.vue';
+import { collapsibleSectionClosed, collapsibleSectionOpened } from './mock_data';
+
+describe('Job Log Collapsible Section', () => {
+ let wrapper;
+
+ const traceEndpoint = 'jobs/335';
+
+ const findCollapsibleLine = () => wrapper.find('.collapsible-line');
+ const findCollapsibleLineSvg = () => wrapper.find('.collapsible-line svg');
+
+ const createComponent = (props = {}) => {
+ wrapper = mount(CollpasibleSection, {
+ sync: true,
+ propsData: {
+ ...props,
+ },
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ describe('with closed section', () => {
+ beforeEach(() => {
+ createComponent({
+ section: collapsibleSectionClosed,
+ traceEndpoint,
+ });
+ });
+
+ it('renders clickable header line', () => {
+ expect(findCollapsibleLine().attributes('role')).toBe('button');
+ });
+
+ it('renders an icon with the closed state', () => {
+ expect(findCollapsibleLineSvg().classes()).toContain('ic-angle-right');
+ });
+ });
+
+ describe('with opened section', () => {
+ beforeEach(() => {
+ createComponent({
+ section: collapsibleSectionOpened,
+ traceEndpoint,
+ });
+ });
+
+ it('renders clickable header line', () => {
+ expect(findCollapsibleLine().attributes('role')).toBe('button');
+ });
+
+ it('renders an icon with the open state', () => {
+ expect(findCollapsibleLineSvg().classes()).toContain('ic-angle-down');
+ });
+
+ it('renders collapsible lines content', () => {
+ expect(wrapper.findAll('.js-line').length).toEqual(collapsibleSectionOpened.lines.length);
+ });
+ });
+
+ it('emits onClickCollapsibleLine on click', () => {
+ createComponent({
+ section: collapsibleSectionOpened,
+ traceEndpoint,
+ });
+
+ findCollapsibleLine().trigger('click');
+ expect(wrapper.emitted('onClickCollapsibleLine').length).toBe(1);
+ });
+});
diff --git a/spec/frontend/jobs/components/log/mock_data.js b/spec/frontend/jobs/components/log/mock_data.js
index db42644de77..d375d82d3ca 100644
--- a/spec/frontend/jobs/components/log/mock_data.js
+++ b/spec/frontend/jobs/components/log/mock_data.js
@@ -14,13 +14,13 @@ export const jobLog = [
text: 'Using Docker executor with image dev.gitlab.org3',
},
],
- sections: ['prepare-executor'],
+ section: 'prepare-executor',
section_header: true,
},
{
offset: 1003,
content: [{ text: 'Starting service postgres:9.6.14 ...', style: 'text-green' }],
- sections: ['prepare-executor'],
+ section: 'prepare-executor',
},
];
@@ -37,23 +37,23 @@ export const utilsMockData = [
'Using Docker executor with image dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33',
},
],
- sections: ['prepare-executor'],
+ section: 'prepare-executor',
section_header: true,
},
{
offset: 1003,
content: [{ text: 'Starting service postgres:9.6.14 ...' }],
- sections: ['prepare-executor'],
+ section: 'prepare-executor',
},
{
offset: 1004,
content: [{ text: 'Pulling docker image postgres:9.6.14 ...', style: 'term-fg-l-green' }],
- sections: ['prepare-executor'],
+ section: 'prepare-executor',
},
{
offset: 1005,
content: [],
- sections: ['prepare-executor'],
+ section: 'prepare-executor',
section_duration: '10:00',
},
];
@@ -100,7 +100,7 @@ export const headerTrace = [
text: 'log line',
},
],
- sections: ['section'],
+ section: 'section',
},
];
@@ -113,7 +113,7 @@ export const headerTraceIncremental = [
text: 'updated log line',
},
],
- sections: ['section'],
+ section: 'section',
},
];
@@ -126,7 +126,7 @@ export const collapsibleTrace = [
text: 'log line',
},
],
- sections: ['section'],
+ section: 'section',
},
{
offset: 2,
@@ -135,7 +135,7 @@ export const collapsibleTrace = [
text: 'log line',
},
],
- sections: ['section'],
+ section: 'section',
},
];
@@ -147,6 +147,48 @@ export const collapsibleTraceIncremental = [
text: 'updated log line',
},
],
- sections: ['section'],
+ section: 'section',
},
];
+
+export const collapsibleSectionClosed = {
+ offset: 5,
+ section_header: true,
+ isHeader: true,
+ isClosed: true,
+ line: {
+ content: [{ text: 'foo' }],
+ section: 'prepare-script',
+ lineNumber: 1,
+ },
+ section_duration: '00:03',
+ lines: [
+ {
+ offset: 80,
+ content: [{ text: 'this is a collapsible nested section' }],
+ section: 'prepare-script',
+ lineNumber: 3,
+ },
+ ],
+};
+
+export const collapsibleSectionOpened = {
+ offset: 5,
+ section_header: true,
+ isHeader: true,
+ isClosed: false,
+ line: {
+ content: [{ text: 'foo' }],
+ section: 'prepare-script',
+ lineNumber: 1,
+ },
+ section_duration: '00:03',
+ lines: [
+ {
+ offset: 80,
+ content: [{ text: 'this is a collapsible nested section' }],
+ section: 'prepare-script',
+ lineNumber: 3,
+ },
+ ],
+};
diff --git a/spec/frontend/jobs/store/mutations_spec.js b/spec/frontend/jobs/store/mutations_spec.js
index 8e5ab4b229a..d1ab152330e 100644
--- a/spec/frontend/jobs/store/mutations_spec.js
+++ b/spec/frontend/jobs/store/mutations_spec.js
@@ -73,12 +73,88 @@ describe('Jobs Store Mutations', () => {
html,
size: 511846,
complete: true,
+ lines: [],
});
expect(stateCopy.trace).toEqual(html);
expect(stateCopy.traceSize).toEqual(511846);
expect(stateCopy.isTraceComplete).toEqual(true);
});
+
+ describe('with new job log', () => {
+ let stateWithNewLog;
+ beforeEach(() => {
+ gon.features = gon.features || {};
+ gon.features.jobLogJson = true;
+
+ stateWithNewLog = state();
+ });
+
+ afterEach(() => {
+ gon.features.jobLogJson = false;
+ });
+
+ describe('log.lines', () => {
+ describe('when append is true', () => {
+ it('sets the parsed log ', () => {
+ mutations[types.RECEIVE_TRACE_SUCCESS](stateWithNewLog, {
+ append: true,
+ size: 511846,
+ complete: true,
+ lines: [
+ {
+ offset: 1,
+ content: [{ text: 'Running with gitlab-runner 11.12.1 (5a147c92)' }],
+ },
+ ],
+ });
+
+ expect(stateWithNewLog.trace).toEqual([
+ {
+ offset: 1,
+ content: [{ text: 'Running with gitlab-runner 11.12.1 (5a147c92)' }],
+ lineNumber: 0,
+ },
+ ]);
+ });
+ });
+
+ describe('when it is defined', () => {
+ it('sets the parsed log ', () => {
+ mutations[types.RECEIVE_TRACE_SUCCESS](stateWithNewLog, {
+ append: false,
+ size: 511846,
+ complete: true,
+ lines: [
+ { offset: 0, content: [{ text: 'Running with gitlab-runner 11.11.1 (5a147c92)' }] },
+ ],
+ });
+
+ expect(stateWithNewLog.trace).toEqual([
+ {
+ offset: 0,
+ content: [{ text: 'Running with gitlab-runner 11.11.1 (5a147c92)' }],
+ lineNumber: 0,
+ },
+ ]);
+ });
+ });
+
+ describe('when it is null', () => {
+ it('sets the default value', () => {
+ mutations[types.RECEIVE_TRACE_SUCCESS](stateWithNewLog, {
+ append: true,
+ html,
+ size: 511846,
+ complete: false,
+ lines: null,
+ });
+
+ expect(stateWithNewLog.trace).toEqual([]);
+ });
+ });
+ });
+ });
});
describe('STOP_POLLING_TRACE', () => {
diff --git a/spec/frontend/jobs/store/utils_spec.js b/spec/frontend/jobs/store/utils_spec.js
index 780d42fd6a1..43dacfe622c 100644
--- a/spec/frontend/jobs/store/utils_spec.js
+++ b/spec/frontend/jobs/store/utils_spec.js
@@ -1,4 +1,13 @@
-import { logLinesParser, updateIncrementalTrace } from '~/jobs/store/utils';
+import {
+ logLinesParser,
+ updateIncrementalTrace,
+ parseHeaderLine,
+ parseLine,
+ addDurationToHeader,
+ isCollapsibleSection,
+ findOffsetAndRemove,
+ getIncrementalLineNumber,
+} from '~/jobs/store/utils';
import {
utilsMockData,
originalTrace,
@@ -11,6 +20,153 @@ import {
} from '../components/log/mock_data';
describe('Jobs Store Utils', () => {
+ describe('parseHeaderLine', () => {
+ it('returns a new object with the header keys and the provided line parsed', () => {
+ const headerLine = { content: [{ text: 'foo' }] };
+ const parsedHeaderLine = parseHeaderLine(headerLine, 2);
+
+ expect(parsedHeaderLine).toEqual({
+ isClosed: true,
+ isHeader: true,
+ line: {
+ ...headerLine,
+ lineNumber: 2,
+ },
+ lines: [],
+ });
+ });
+ });
+
+ describe('parseLine', () => {
+ it('returns a new object with the lineNumber key added to the provided line object', () => {
+ const line = { content: [{ text: 'foo' }] };
+ const parsed = parseLine(line, 1);
+ expect(parsed.content).toEqual(line.content);
+ expect(parsed.lineNumber).toEqual(1);
+ });
+ });
+
+ describe('addDurationToHeader', () => {
+ const duration = {
+ offset: 106,
+ content: [],
+ section: 'prepare-script',
+ section_duration: '00:03',
+ };
+
+ it('adds the section duration to the correct header', () => {
+ const parsed = [
+ {
+ isClosed: true,
+ isHeader: true,
+ line: {
+ section: 'prepare-script',
+ content: [{ text: 'foo' }],
+ },
+ lines: [],
+ },
+ {
+ isClosed: true,
+ isHeader: true,
+ line: {
+ section: 'foo-bar',
+ content: [{ text: 'foo' }],
+ },
+ lines: [],
+ },
+ ];
+
+ addDurationToHeader(parsed, duration);
+
+ expect(parsed[0].line.section_duration).toEqual(duration.section_duration);
+ expect(parsed[1].line.section_duration).toEqual(undefined);
+ });
+
+ it('does not add the section duration when the headers do not match', () => {
+ const parsed = [
+ {
+ isClosed: true,
+ isHeader: true,
+ line: {
+ section: 'bar-foo',
+ content: [{ text: 'foo' }],
+ },
+ lines: [],
+ },
+ {
+ isClosed: true,
+ isHeader: true,
+ line: {
+ section: 'foo-bar',
+ content: [{ text: 'foo' }],
+ },
+ lines: [],
+ },
+ ];
+ addDurationToHeader(parsed, duration);
+
+ expect(parsed[0].line.section_duration).toEqual(undefined);
+ expect(parsed[1].line.section_duration).toEqual(undefined);
+ });
+
+ it('does not add when content has no headers', () => {
+ const parsed = [
+ {
+ section: 'bar-foo',
+ content: [{ text: 'foo' }],
+ lineNumber: 1,
+ },
+ {
+ section: 'foo-bar',
+ content: [{ text: 'foo' }],
+ lineNumber: 2,
+ },
+ ];
+
+ addDurationToHeader(parsed, duration);
+
+ expect(parsed[0].line).toEqual(undefined);
+ expect(parsed[1].line).toEqual(undefined);
+ });
+ });
+
+ describe('isCollapsibleSection', () => {
+ const header = {
+ isHeader: true,
+ line: {
+ section: 'foo',
+ },
+ };
+ const line = {
+ lineNumber: 1,
+ section: 'foo',
+ content: [],
+ };
+
+ it('returns true when line belongs to the last section', () => {
+ expect(isCollapsibleSection([header], header, { section: 'foo', content: [] })).toEqual(true);
+ });
+
+ it('returns false when last line was not an header', () => {
+ expect(isCollapsibleSection([line], line, { section: 'bar' })).toEqual(false);
+ });
+
+ it('returns false when accumulator is empty', () => {
+ expect(isCollapsibleSection([], { isHeader: true }, { section: 'bar' })).toEqual(false);
+ });
+
+ it('returns false when section_duration is defined', () => {
+ expect(isCollapsibleSection([header], header, { section_duration: '10:00' })).toEqual(false);
+ });
+
+ it('returns false when `section` is not a match', () => {
+ expect(isCollapsibleSection([header], header, { section: 'bar' })).toEqual(false);
+ });
+
+ it('returns false when no parameters are provided', () => {
+ expect(isCollapsibleSection()).toEqual(false);
+ });
+ });
describe('logLinesParser', () => {
let result;
@@ -43,7 +199,7 @@ describe('Jobs Store Utils', () => {
describe('section duration', () => {
it('adds the section information to the header section', () => {
- expect(result[1].section_duration).toEqual(utilsMockData[4].section_duration);
+ expect(result[1].line.section_duration).toEqual(utilsMockData[4].section_duration);
});
it('does not add section duration as a line', () => {
@@ -52,11 +208,183 @@ describe('Jobs Store Utils', () => {
});
});
+ describe('findOffsetAndRemove', () => {
+ describe('when last item is header', () => {
+ const existingLog = [
+ {
+ isHeader: true,
+ isClosed: true,
+ line: { content: [{ text: 'bar' }], offset: 10, lineNumber: 1 },
+ },
+ ];
+
+ describe('and matches the offset', () => {
+ it('returns an array with the item removed', () => {
+ const newData = [{ offset: 10, content: [{ text: 'foobar' }] }];
+ const result = findOffsetAndRemove(newData, existingLog);
+
+ expect(result).toEqual([]);
+ });
+ });
+
+ describe('and does not match the offset', () => {
+ it('returns the provided existing log', () => {
+ const newData = [{ offset: 110, content: [{ text: 'foobar' }] }];
+ const result = findOffsetAndRemove(newData, existingLog);
+
+ expect(result).toEqual(existingLog);
+ });
+ });
+ });
+
+ describe('when last item is a regular line', () => {
+ const existingLog = [{ content: [{ text: 'bar' }], offset: 10, lineNumber: 1 }];
+
+ describe('and matches the offset', () => {
+ it('returns an array with the item removed', () => {
+ const newData = [{ offset: 10, content: [{ text: 'foobar' }] }];
+ const result = findOffsetAndRemove(newData, existingLog);
+
+ expect(result).toEqual([]);
+ });
+ });
+
+ describe('and does not match the fofset', () => {
+ it('returns the provided old log', () => {
+ const newData = [{ offset: 101, content: [{ text: 'foobar' }] }];
+ const result = findOffsetAndRemove(newData, existingLog);
+
+ expect(result).toEqual(existingLog);
+ });
+ });
+ });
+
+ describe('when last item is nested', () => {
+ const existingLog = [
+ {
+ isHeader: true,
+ isClosed: true,
+ lines: [{ offset: 101, content: [{ text: 'foobar' }], lineNumber: 2 }],
+ line: {
+ offset: 10,
+ lineNumber: 1,
+ section_duration: '10:00',
+ },
+ },
+ ];
+
+ describe('and matches the offset', () => {
+ it('returns an array with the last nested line item removed', () => {
+ const newData = [{ offset: 101, content: [{ text: 'foobar' }] }];
+
+ const result = findOffsetAndRemove(newData, existingLog);
+ expect(result[0].lines).toEqual([]);
+ });
+ });
+
+ describe('and does not match the offset', () => {
+ it('returns the provided old log', () => {
+ const newData = [{ offset: 120, content: [{ text: 'foobar' }] }];
+
+ const result = findOffsetAndRemove(newData, existingLog);
+ expect(result).toEqual(existingLog);
+ });
+ });
+ });
+
+ describe('when no data is provided', () => {
+ it('returns an empty array', () => {
+ const result = findOffsetAndRemove();
+ expect(result).toEqual([]);
+ });
+ });
+ });
+
+ describe('getIncrementalLineNumber', () => {
+ describe('when last line is 0', () => {
+ it('returns 1', () => {
+ const log = [
+ {
+ content: [],
+ lineNumber: 0,
+ },
+ ];
+
+ expect(getIncrementalLineNumber(log)).toEqual(1);
+ });
+ });
+
+ describe('with unnested line', () => {
+ it('returns the lineNumber of the last item in the array', () => {
+ const log = [
+ {
+ content: [],
+ lineNumber: 10,
+ },
+ {
+ content: [],
+ lineNumber: 101,
+ },
+ ];
+
+ expect(getIncrementalLineNumber(log)).toEqual(102);
+ });
+ });
+
+ describe('when last line is the header section', () => {
+ it('returns the lineNumber of the last item in the array', () => {
+ const log = [
+ {
+ content: [],
+ lineNumber: 10,
+ },
+ {
+ isHeader: true,
+ line: {
+ lineNumber: 101,
+ content: [],
+ },
+ lines: [],
+ },
+ ];
+
+ expect(getIncrementalLineNumber(log)).toEqual(102);
+ });
+ });
+
+ describe('when last line is a nested line', () => {
+ it('returns the lineNumber of the last item in the nested array', () => {
+ const log = [
+ {
+ content: [],
+ lineNumber: 10,
+ },
+ {
+ isHeader: true,
+ line: {
+ lineNumber: 101,
+ content: [],
+ },
+ lines: [
+ {
+ lineNumber: 102,
+ content: [],
+ },
+ { lineNumber: 103, content: [] },
+ ],
+ },
+ ];
+
+ expect(getIncrementalLineNumber(log)).toEqual(104);
+ });
+ });
+ });
+
describe('updateIncrementalTrace', () => {
describe('without repeated section', () => {
it('concats and parses both arrays', () => {
const oldLog = logLinesParser(originalTrace);
- const result = updateIncrementalTrace(originalTrace, oldLog, regularIncremental);
+ const result = updateIncrementalTrace(regularIncremental, oldLog);
expect(result).toEqual([
{
@@ -84,7 +412,7 @@ describe('Jobs Store Utils', () => {
describe('with regular line repeated offset', () => {
it('updates the last line and formats with the incremental part', () => {
const oldLog = logLinesParser(originalTrace);
- const result = updateIncrementalTrace(originalTrace, oldLog, regularIncrementalRepeated);
+ const result = updateIncrementalTrace(regularIncrementalRepeated, oldLog);
expect(result).toEqual([
{
@@ -103,7 +431,7 @@ describe('Jobs Store Utils', () => {
describe('with header line repeated', () => {
it('updates the header line and formats with the incremental part', () => {
const oldLog = logLinesParser(headerTrace);
- const result = updateIncrementalTrace(headerTrace, oldLog, headerTraceIncremental);
+ const result = updateIncrementalTrace(headerTraceIncremental, oldLog);
expect(result).toEqual([
{
@@ -117,7 +445,7 @@ describe('Jobs Store Utils', () => {
text: 'updated log line',
},
],
- sections: ['section'],
+ section: 'section',
lineNumber: 0,
},
lines: [],
@@ -129,11 +457,7 @@ describe('Jobs Store Utils', () => {
describe('with collapsible line repeated', () => {
it('updates the collapsible line and formats with the incremental part', () => {
const oldLog = logLinesParser(collapsibleTrace);
- const result = updateIncrementalTrace(
- collapsibleTrace,
- oldLog,
- collapsibleTraceIncremental,
- );
+ const result = updateIncrementalTrace(collapsibleTraceIncremental, oldLog);
expect(result).toEqual([
{
@@ -147,7 +471,7 @@ describe('Jobs Store Utils', () => {
text: 'log line',
},
],
- sections: ['section'],
+ section: 'section',
lineNumber: 0,
},
lines: [
@@ -158,7 +482,7 @@ describe('Jobs Store Utils', () => {
text: 'updated log line',
},
],
- sections: ['section'],
+ section: 'section',
lineNumber: 1,
},
],
diff --git a/spec/frontend/lib/utils/datetime_utility_spec.js b/spec/frontend/lib/utils/datetime_utility_spec.js
index 9f1700bb243..e2e71229320 100644
--- a/spec/frontend/lib/utils/datetime_utility_spec.js
+++ b/spec/frontend/lib/utils/datetime_utility_spec.js
@@ -388,20 +388,6 @@ describe('prettyTime methods', () => {
expect(datetimeUtility.stringifyTime(timeObject, true)).toEqual('1 week 1 hour');
});
});
-
- describe('abbreviateTime', () => {
- it('should abbreviate stringified times for weeks', () => {
- const fullTimeString = '1w 3d 4h 5m';
-
- expect(datetimeUtility.abbreviateTime(fullTimeString)).toBe('1w');
- });
-
- it('should abbreviate stringified times for non-weeks', () => {
- const fullTimeString = '0w 3d 4h 5m';
-
- expect(datetimeUtility.abbreviateTime(fullTimeString)).toBe('3d');
- });
- });
});
describe('calculateRemainingMilliseconds', () => {
@@ -440,3 +426,18 @@ describe('newDate', () => {
expect(initialDate instanceof Date).toBe(true);
});
});
+
+describe('getDateInPast', () => {
+ const date = new Date(1563235200000); // 2019-07-16T00:00:00.000Z;
+ const daysInPast = 90;
+
+ it('returns the correct date in the past', () => {
+ const dateInPast = datetimeUtility.getDateInPast(date, daysInPast);
+ expect(dateInPast).toBe('2019-04-17T00:00:00.000Z');
+ });
+
+ it('does not modifiy the original date', () => {
+ datetimeUtility.getDateInPast(date, daysInPast);
+ expect(date).toStrictEqual(new Date(1563235200000));
+ });
+});
diff --git a/spec/frontend/lib/utils/number_utility_spec.js b/spec/frontend/lib/utils/number_utility_spec.js
index 77d7478d317..381d7c6f8d9 100644
--- a/spec/frontend/lib/utils/number_utility_spec.js
+++ b/spec/frontend/lib/utils/number_utility_spec.js
@@ -6,6 +6,7 @@ import {
numberToHumanSize,
sum,
isOdd,
+ median,
} from '~/lib/utils/number_utils';
describe('Number Utils', () => {
@@ -109,4 +110,16 @@ describe('Number Utils', () => {
expect(isOdd(1)).toEqual(1);
});
});
+
+ describe('median', () => {
+ it('computes the median for a given array with odd length', () => {
+ const items = [10, 27, 20, 5, 19];
+ expect(median(items)).toBe(19);
+ });
+
+ it('computes the median for a given array with even length', () => {
+ const items = [10, 27, 20, 5, 19, 4];
+ expect(median(items)).toBe(14.5);
+ });
+ });
});
diff --git a/spec/frontend/lib/utils/set_spec.js b/spec/frontend/lib/utils/set_spec.js
new file mode 100644
index 00000000000..7636a1c634c
--- /dev/null
+++ b/spec/frontend/lib/utils/set_spec.js
@@ -0,0 +1,19 @@
+import { isSubset } from '~/lib/utils/set';
+
+describe('utils/set', () => {
+ describe('isSubset', () => {
+ it.each`
+ subset | superset | expected
+ ${new Set()} | ${new Set()} | ${true}
+ ${new Set()} | ${new Set([1])} | ${true}
+ ${new Set([1])} | ${new Set([1])} | ${true}
+ ${new Set([1, 3])} | ${new Set([1, 2, 3])} | ${true}
+ ${new Set([1])} | ${new Set()} | ${false}
+ ${new Set([1])} | ${new Set([2])} | ${false}
+ ${new Set([7, 8, 9])} | ${new Set([1, 2, 3])} | ${false}
+ ${new Set([1, 2, 3, 4])} | ${new Set([1, 2, 3])} | ${false}
+ `('isSubset($subset, $superset) === $expected', ({ subset, superset, expected }) => {
+ expect(isSubset(subset, superset)).toBe(expected);
+ });
+ });
+});
diff --git a/spec/frontend/lib/utils/suppress_ajax_errors_during_navigation_spec.js b/spec/frontend/lib/utils/suppress_ajax_errors_during_navigation_spec.js
new file mode 100644
index 00000000000..89e8459d594
--- /dev/null
+++ b/spec/frontend/lib/utils/suppress_ajax_errors_during_navigation_spec.js
@@ -0,0 +1,37 @@
+import suppressAjaxErrorsDuringNavigation from '~/lib/utils/suppress_ajax_errors_during_navigation';
+import waitForPromises from 'helpers/wait_for_promises';
+
+describe('suppressAjaxErrorsDuringNavigation', () => {
+ const OTHER_ERR_CODE = 'foo';
+ const NAV_ERR_CODE = 'ECONNABORTED';
+
+ it.each`
+ isFeatureFlagEnabled | isUserNavigating | code
+ ${false} | ${false} | ${OTHER_ERR_CODE}
+ ${false} | ${false} | ${NAV_ERR_CODE}
+ ${false} | ${true} | ${OTHER_ERR_CODE}
+ ${false} | ${true} | ${NAV_ERR_CODE}
+ ${true} | ${false} | ${OTHER_ERR_CODE}
+ ${true} | ${false} | ${NAV_ERR_CODE}
+ ${true} | ${true} | ${OTHER_ERR_CODE}
+ `('should return a rejected Promise', ({ isFeatureFlagEnabled, isUserNavigating, code }) => {
+ const err = { code };
+ const actual = suppressAjaxErrorsDuringNavigation(err, isUserNavigating, isFeatureFlagEnabled);
+
+ return expect(actual).rejects.toBe(err);
+ });
+
+ it('should return a Promise that never resolves', () => {
+ const err = { code: NAV_ERR_CODE };
+ const actual = suppressAjaxErrorsDuringNavigation(err, true, true);
+
+ const thenCallback = jest.fn();
+ const catchCallback = jest.fn();
+ actual.then(thenCallback).catch(catchCallback);
+
+ return waitForPromises().then(() => {
+ expect(thenCallback).not.toHaveBeenCalled();
+ expect(catchCallback).not.toHaveBeenCalled();
+ });
+ });
+});
diff --git a/spec/frontend/lib/utils/url_utility_spec.js b/spec/frontend/lib/utils/url_utility_spec.js
index 41df93c9a48..6edb2e2dce2 100644
--- a/spec/frontend/lib/utils/url_utility_spec.js
+++ b/spec/frontend/lib/utils/url_utility_spec.js
@@ -136,6 +136,24 @@ describe('URL utility', () => {
});
});
+ describe('doesHashExistInUrl', () => {
+ it('should return true when the given string exists in the URL hash', () => {
+ setWindowLocation({
+ href: 'https://gitlab.com/gitlab-org/gitlab-test/issues/1#note_1',
+ });
+
+ expect(urlUtils.doesHashExistInUrl('note_')).toBe(true);
+ });
+
+ it('should return false when the given string does not exist in the URL hash', () => {
+ setWindowLocation({
+ href: 'https://gitlab.com/gitlab-org/gitlab-test/issues/1#note_1',
+ });
+
+ expect(urlUtils.doesHashExistInUrl('doesnotexist')).toBe(false);
+ });
+ });
+
describe('setUrlFragment', () => {
it('should set fragment when url has no fragment', () => {
const url = urlUtils.setUrlFragment('/home/feature', 'usage');
diff --git a/spec/frontend/monitoring/components/date_time_picker/date_time_picker_input_spec.js b/spec/frontend/monitoring/components/date_time_picker/date_time_picker_input_spec.js
new file mode 100644
index 00000000000..1315e1226a4
--- /dev/null
+++ b/spec/frontend/monitoring/components/date_time_picker/date_time_picker_input_spec.js
@@ -0,0 +1,66 @@
+import { mount } from '@vue/test-utils';
+import DateTimePickerInput from '~/monitoring/components/date_time_picker/date_time_picker_input.vue';
+
+const inputLabel = 'This is a label';
+const inputValue = 'something';
+
+describe('DateTimePickerInput', () => {
+ let wrapper;
+
+ const createComponent = (propsData = {}) => {
+ wrapper = mount(DateTimePickerInput, {
+ propsData: {
+ state: null,
+ value: '',
+ label: '',
+ ...propsData,
+ },
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('renders label above the input', () => {
+ createComponent({
+ label: inputLabel,
+ });
+
+ expect(wrapper.find('.gl-form-group label').text()).toBe(inputLabel);
+ });
+
+ it('renders the same `ID` for input and `for` for label', () => {
+ createComponent({ label: inputLabel });
+
+ expect(wrapper.find('.gl-form-group label').attributes('for')).toBe(
+ wrapper.find('input').attributes('id'),
+ );
+ });
+
+ it('renders valid input in gray color instead of green', () => {
+ createComponent({
+ state: true,
+ });
+
+ expect(wrapper.find('input').classes('is-valid')).toBe(false);
+ });
+
+ it('renders invalid input in red color', () => {
+ createComponent({
+ state: false,
+ });
+
+ expect(wrapper.find('input').classes('is-invalid')).toBe(true);
+ });
+
+ it('input event is emitted when focus is lost', () => {
+ createComponent();
+ jest.spyOn(wrapper.vm, '$emit');
+ wrapper.find('input').setValue(inputValue);
+ wrapper.find('input').trigger('blur');
+
+ expect(wrapper.vm.$emit).toHaveBeenCalledWith('input', inputValue);
+ });
+});
diff --git a/spec/frontend/monitoring/components/date_time_picker/date_time_picker_spec.js b/spec/frontend/monitoring/components/date_time_picker/date_time_picker_spec.js
new file mode 100644
index 00000000000..be544435671
--- /dev/null
+++ b/spec/frontend/monitoring/components/date_time_picker/date_time_picker_spec.js
@@ -0,0 +1,157 @@
+import { mount } from '@vue/test-utils';
+import DateTimePicker from '~/monitoring/components/date_time_picker/date_time_picker.vue';
+import { timeWindows } from '~/monitoring/constants';
+
+const timeWindowsCount = Object.keys(timeWindows).length;
+const selectedTimeWindow = {
+ start: '2019-10-10T07:00:00.000Z',
+ end: '2019-10-13T07:00:00.000Z',
+};
+const selectedTimeWindowText = `3 days`;
+
+describe('DateTimePicker', () => {
+ let dateTimePicker;
+
+ const dropdownToggle = () => dateTimePicker.find('.dropdown-toggle');
+ const dropdownMenu = () => dateTimePicker.find('.dropdown-menu');
+ const applyButtonElement = () => dateTimePicker.find('button[variant="success"]').element;
+ const cancelButtonElement = () => dateTimePicker.find('button.btn-secondary').element;
+ const fillInputAndBlur = (input, val) => {
+ dateTimePicker.find(input).setValue(val);
+ dateTimePicker.find(input).trigger('blur');
+ };
+
+ const createComponent = props => {
+ dateTimePicker = mount(DateTimePicker, {
+ propsData: {
+ timeWindows,
+ selectedTimeWindow,
+ ...props,
+ },
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ dateTimePicker.destroy();
+ });
+
+ it('renders dropdown toggle button with selected text', done => {
+ createComponent();
+ dateTimePicker.vm.$nextTick(() => {
+ expect(dropdownToggle().text()).toBe(selectedTimeWindowText);
+ done();
+ });
+ });
+
+ it('renders dropdown with 2 custom time range inputs', () => {
+ createComponent();
+ dateTimePicker.vm.$nextTick(() => {
+ expect(dateTimePicker.findAll('input').length).toBe(2);
+ });
+ });
+
+ it('renders inputs with h/m/s truncated if its all 0s', done => {
+ createComponent({
+ selectedTimeWindow: {
+ start: '2019-10-10T00:00:00.000Z',
+ end: '2019-10-14T00:10:00.000Z',
+ },
+ });
+ dateTimePicker.vm.$nextTick(() => {
+ expect(dateTimePicker.find('#custom-time-from').element.value).toBe('2019-10-10');
+ expect(dateTimePicker.find('#custom-time-to').element.value).toBe('2019-10-14 00:10:00');
+ done();
+ });
+ });
+
+ it(`renders dropdown with ${timeWindowsCount} items in quick range`, done => {
+ createComponent();
+ dropdownToggle().trigger('click');
+ dateTimePicker.vm.$nextTick(() => {
+ expect(dateTimePicker.findAll('.dropdown-item').length).toBe(timeWindowsCount);
+ done();
+ });
+ });
+
+ it(`renders dropdown with correct quick range item selected`, done => {
+ createComponent();
+ dropdownToggle().trigger('click');
+ dateTimePicker.vm.$nextTick(() => {
+ expect(dateTimePicker.find('.dropdown-item.active').text()).toBe(selectedTimeWindowText);
+
+ expect(dateTimePicker.find('.dropdown-item.active svg').isVisible()).toBe(true);
+ done();
+ });
+ });
+
+ it('renders a disabled apply button on load', () => {
+ createComponent();
+
+ expect(applyButtonElement().getAttribute('disabled')).toBe('disabled');
+ });
+
+ it('displays inline error message if custom time range inputs are invalid', done => {
+ createComponent();
+ fillInputAndBlur('#custom-time-from', '2019-10-01abc');
+ fillInputAndBlur('#custom-time-to', '2019-10-10abc');
+
+ dateTimePicker.vm.$nextTick(() => {
+ expect(dateTimePicker.findAll('.invalid-feedback').length).toBe(2);
+ done();
+ });
+ });
+
+ it('keeps apply button disabled with invalid custom time range inputs', done => {
+ createComponent();
+ fillInputAndBlur('#custom-time-from', '2019-10-01abc');
+ fillInputAndBlur('#custom-time-to', '2019-09-19');
+
+ dateTimePicker.vm.$nextTick(() => {
+ expect(applyButtonElement().getAttribute('disabled')).toBe('disabled');
+ done();
+ });
+ });
+
+ it('enables apply button with valid custom time range inputs', done => {
+ createComponent();
+ fillInputAndBlur('#custom-time-from', '2019-10-01');
+ fillInputAndBlur('#custom-time-to', '2019-10-19');
+
+ dateTimePicker.vm.$nextTick(() => {
+ expect(applyButtonElement().getAttribute('disabled')).toBeNull();
+ done();
+ });
+ });
+
+ it('returns an object when apply is clicked', done => {
+ createComponent();
+ fillInputAndBlur('#custom-time-from', '2019-10-01');
+ fillInputAndBlur('#custom-time-to', '2019-10-19');
+
+ dateTimePicker.vm.$nextTick(() => {
+ jest.spyOn(dateTimePicker.vm, '$emit');
+ applyButtonElement().click();
+
+ expect(dateTimePicker.vm.$emit).toHaveBeenCalledWith('onApply', {
+ end: '2019-10-19T00:00:00Z',
+ start: '2019-10-01T00:00:00Z',
+ });
+ done();
+ });
+ });
+
+ it('hides the popover with cancel button', done => {
+ createComponent();
+ dropdownToggle().trigger('click');
+
+ dateTimePicker.vm.$nextTick(() => {
+ cancelButtonElement().click();
+
+ dateTimePicker.vm.$nextTick(() => {
+ expect(dropdownMenu().classes('show')).toBe(false);
+ done();
+ });
+ });
+ });
+});
diff --git a/spec/frontend/monitoring/embed/embed_spec.js b/spec/frontend/monitoring/embed/embed_spec.js
index 1ce14e2418a..5de1a7c4c3b 100644
--- a/spec/frontend/monitoring/embed/embed_spec.js
+++ b/spec/frontend/monitoring/embed/embed_spec.js
@@ -74,5 +74,9 @@ describe('Embed', () => {
expect(wrapper.find(MonitorTimeSeriesChart).exists()).toBe(true);
expect(wrapper.findAll(MonitorTimeSeriesChart).length).toBe(2);
});
+
+ it('includes groupId with dashboardUrl', () => {
+ expect(wrapper.find(MonitorTimeSeriesChart).props('groupId')).toBe(TEST_HOST);
+ });
});
});
diff --git a/spec/frontend/monitoring/utils_spec.js b/spec/frontend/monitoring/utils_spec.js
new file mode 100644
index 00000000000..1e8d5753885
--- /dev/null
+++ b/spec/frontend/monitoring/utils_spec.js
@@ -0,0 +1,54 @@
+import * as monitoringUtils from '~/monitoring/utils';
+
+describe('Snowplow Events', () => {
+ const generatedLink = 'http://chart.link.com';
+ const chartTitle = 'Some metric chart';
+
+ describe('trackGenerateLinkToChartEventOptions', () => {
+ it('should return Cluster Monitoring options if located on Cluster Health Dashboard', () => {
+ document.body.dataset.page = 'groups:clusters:show';
+
+ expect(monitoringUtils.generateLinkToChartOptions(generatedLink)).toEqual({
+ category: 'Cluster Monitoring',
+ action: 'generate_link_to_cluster_metric_chart',
+ label: 'Chart link',
+ property: generatedLink,
+ });
+ });
+
+ it('should return Incident Management event options if located on Metrics Dashboard', () => {
+ document.body.dataset.page = 'metrics:show';
+
+ expect(monitoringUtils.generateLinkToChartOptions(generatedLink)).toEqual({
+ category: 'Incident Management::Embedded metrics',
+ action: 'generate_link_to_metrics_chart',
+ label: 'Chart link',
+ property: generatedLink,
+ });
+ });
+ });
+
+ describe('trackDownloadCSVEvent', () => {
+ it('should return Cluster Monitoring options if located on Cluster Health Dashboard', () => {
+ document.body.dataset.page = 'groups:clusters:show';
+
+ expect(monitoringUtils.downloadCSVOptions(chartTitle)).toEqual({
+ category: 'Cluster Monitoring',
+ action: 'download_csv_of_cluster_metric_chart',
+ label: 'Chart title',
+ property: chartTitle,
+ });
+ });
+
+ it('should return Incident Management event options if located on Metrics Dashboard', () => {
+ document.body.dataset.page = 'metriss:show';
+
+ expect(monitoringUtils.downloadCSVOptions(chartTitle)).toEqual({
+ category: 'Incident Management::Embedded metrics',
+ action: 'download_csv_of_metrics_dashboard_chart',
+ label: 'Chart title',
+ property: chartTitle,
+ });
+ });
+ });
+});
diff --git a/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap b/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap
index 11d65ced180..b29d093130a 100644
--- a/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap
+++ b/spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap
@@ -11,7 +11,6 @@ exports[`JumpToNextDiscussionButton matches the snapshot 1`] = `
title=""
>
<icon-stub
- cssclasses=""
name="comment-next"
size="16"
/>
diff --git a/spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap b/spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap
new file mode 100644
index 00000000000..78a736a9060
--- /dev/null
+++ b/spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap
@@ -0,0 +1,63 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`User Operation confirmation modal renders modal with form included 1`] = `
+<div>
+ <p>
+ content
+ </p>
+
+ <p>
+ To confirm, type
+ <code>
+ username
+ </code>
+ </p>
+
+ <form
+ action="delete-url"
+ method="post"
+ >
+ <input
+ name="_method"
+ type="hidden"
+ value="delete"
+ />
+
+ <input
+ name="authenticity_token"
+ type="hidden"
+ value="csrf"
+ />
+
+ <glforminput-stub
+ autocomplete="off"
+ autofocus=""
+ name="username"
+ type="text"
+ value=""
+ />
+ </form>
+
+ <glbutton-stub
+ variant="secondary"
+ >
+ Cancel
+ </glbutton-stub>
+
+ <glbutton-stub
+ disabled="true"
+ variant="warning"
+ >
+
+ secondaryAction
+
+ </glbutton-stub>
+
+ <glbutton-stub
+ disabled="true"
+ variant="danger"
+ >
+ action
+ </glbutton-stub>
+</div>
+`;
diff --git a/spec/frontend/pages/admin/users/components/__snapshots__/user_operation_confirmation_modal_spec.js.snap b/spec/frontend/pages/admin/users/components/__snapshots__/user_operation_confirmation_modal_spec.js.snap
new file mode 100644
index 00000000000..4a3989f5192
--- /dev/null
+++ b/spec/frontend/pages/admin/users/components/__snapshots__/user_operation_confirmation_modal_spec.js.snap
@@ -0,0 +1,33 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`User Operation confirmation modal renders modal with form included 1`] = `
+<glmodal-stub
+ modalclass=""
+ modalid="user-operation-modal"
+ ok-title="action"
+ ok-variant="warning"
+ title="title"
+ titletag="h4"
+>
+ <form
+ action="/url"
+ method="post"
+ >
+ <span>
+ content
+ </span>
+
+ <input
+ name="_method"
+ type="hidden"
+ value="method"
+ />
+
+ <input
+ name="authenticity_token"
+ type="hidden"
+ value="csrf"
+ />
+ </form>
+</glmodal-stub>
+`;
diff --git a/spec/frontend/pages/admin/users/components/delete_user_modal_spec.js b/spec/frontend/pages/admin/users/components/delete_user_modal_spec.js
new file mode 100644
index 00000000000..57802a41bb5
--- /dev/null
+++ b/spec/frontend/pages/admin/users/components/delete_user_modal_spec.js
@@ -0,0 +1,85 @@
+import { shallowMount } from '@vue/test-utils';
+import { GlButton, GlFormInput } from '@gitlab/ui';
+import DeleteUserModal from '~/pages/admin/users/components/delete_user_modal.vue';
+import ModalStub from './stubs/modal_stub';
+
+describe('User Operation confirmation modal', () => {
+ let wrapper;
+
+ const findButton = variant =>
+ wrapper
+ .findAll(GlButton)
+ .filter(w => w.attributes('variant') === variant)
+ .at(0);
+
+ const createComponent = (props = {}) => {
+ wrapper = shallowMount(DeleteUserModal, {
+ propsData: {
+ title: 'title',
+ content: 'content',
+ action: 'action',
+ secondaryAction: 'secondaryAction',
+ deleteUserUrl: 'delete-url',
+ blockUserUrl: 'block-url',
+ username: 'username',
+ csrfToken: 'csrf',
+ ...props,
+ },
+ stubs: {
+ GlModal: ModalStub,
+ },
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('renders modal with form included', () => {
+ createComponent();
+ expect(wrapper.element).toMatchSnapshot();
+ });
+
+ it.each`
+ variant | prop | action
+ ${'danger'} | ${'deleteUserUrl'} | ${'delete'}
+ ${'warning'} | ${'blockUserUrl'} | ${'block'}
+ `('closing modal with $variant button triggers $action', ({ variant, prop }) => {
+ createComponent();
+ const form = wrapper.find('form');
+ jest.spyOn(form.element, 'submit').mockReturnValue();
+ const modalButton = findButton(variant);
+ modalButton.vm.$emit('click');
+ return wrapper.vm.$nextTick().then(() => {
+ expect(form.element.submit).toHaveBeenCalled();
+ expect(form.element.action).toContain(wrapper.props(prop));
+ expect(new FormData(form.element).get('authenticity_token')).toEqual(
+ wrapper.props('csrfToken'),
+ );
+ });
+ });
+
+ it('disables buttons by default', () => {
+ createComponent();
+ const blockButton = findButton('warning');
+ const deleteButton = findButton('danger');
+ expect(blockButton.attributes().disabled).toBeTruthy();
+ expect(deleteButton.attributes().disabled).toBeTruthy();
+ });
+
+ it('enables button when username is typed', () => {
+ createComponent({
+ username: 'some-username',
+ });
+ wrapper.find(GlFormInput).vm.$emit('input', 'some-username');
+ const blockButton = findButton('warning');
+ const deleteButton = findButton('danger');
+
+ return wrapper.vm.$nextTick().then(() => {
+ expect(blockButton.attributes().disabled).toBeFalsy();
+ expect(deleteButton.attributes().disabled).toBeFalsy();
+ });
+ });
+});
diff --git a/spec/frontend/pages/admin/users/components/stubs/modal_stub.js b/spec/frontend/pages/admin/users/components/stubs/modal_stub.js
new file mode 100644
index 00000000000..4dc55e909a0
--- /dev/null
+++ b/spec/frontend/pages/admin/users/components/stubs/modal_stub.js
@@ -0,0 +1,23 @@
+const ModalStub = {
+ inheritAttrs: false,
+ name: 'glmodal-stub',
+ data() {
+ return {
+ showWasCalled: false,
+ };
+ },
+ methods: {
+ show() {
+ this.showWasCalled = true;
+ },
+ hide() {},
+ },
+ render(h) {
+ const children = [this.$slots.default, this.$slots['modal-footer']]
+ .filter(Boolean)
+ .reduce((acc, nodes) => acc.concat(nodes), []);
+ return h('div', children);
+ },
+};
+
+export default ModalStub;
diff --git a/spec/frontend/pages/admin/users/components/user_modal_manager_spec.js b/spec/frontend/pages/admin/users/components/user_modal_manager_spec.js
new file mode 100644
index 00000000000..7653fffc502
--- /dev/null
+++ b/spec/frontend/pages/admin/users/components/user_modal_manager_spec.js
@@ -0,0 +1,148 @@
+import { shallowMount } from '@vue/test-utils';
+import UserModalManager from '~/pages/admin/users/components/user_modal_manager.vue';
+import ModalStub from './stubs/modal_stub';
+
+describe('Users admin page Modal Manager', () => {
+ const modalConfiguration = {
+ action1: {
+ title: 'action1',
+ content: 'Action Modal 1',
+ },
+ action2: {
+ title: 'action2',
+ content: 'Action Modal 2',
+ },
+ };
+
+ const actionModals = {
+ action1: ModalStub,
+ action2: ModalStub,
+ };
+
+ let wrapper;
+
+ const createComponent = (props = {}) => {
+ wrapper = shallowMount(UserModalManager, {
+ propsData: {
+ actionModals,
+ modalConfiguration,
+ csrfToken: 'dummyCSRF',
+ ...props,
+ },
+ stubs: {
+ dummyComponent1: true,
+ dummyComponent2: true,
+ },
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ describe('render behavior', () => {
+ it('does not renders modal when initialized', () => {
+ createComponent();
+ expect(wrapper.find({ ref: 'modal' }).exists()).toBeFalsy();
+ });
+
+ it('throws if non-existing action is requested', () => {
+ createComponent();
+ expect(() => wrapper.vm.show({ glModalAction: 'non-existing' })).toThrow();
+ });
+
+ it('throws if action has no proper configuration', () => {
+ createComponent({
+ modalConfiguration: {},
+ });
+ expect(() => wrapper.vm.show({ glModalAction: 'action1' })).toThrow();
+ });
+
+ it('renders modal with expected props when valid configuration is passed', () => {
+ createComponent();
+ wrapper.vm.show({
+ glModalAction: 'action1',
+ extraProp: 'extraPropValue',
+ });
+
+ return wrapper.vm.$nextTick().then(() => {
+ const modal = wrapper.find({ ref: 'modal' });
+ expect(modal.exists()).toBeTruthy();
+ expect(modal.vm.$attrs.csrfToken).toEqual('dummyCSRF');
+ expect(modal.vm.$attrs.extraProp).toEqual('extraPropValue');
+ expect(modal.vm.showWasCalled).toBeTruthy();
+ });
+ });
+ });
+
+ describe('global listener', () => {
+ beforeEach(() => {
+ jest.spyOn(document, 'addEventListener');
+ jest.spyOn(document, 'removeEventListener');
+ });
+
+ afterEach(() => {
+ jest.clearAllMocks();
+ });
+
+ afterAll(() => {
+ jest.restoreAllMocks();
+ });
+
+ it('registers global listener on mount', () => {
+ createComponent();
+ expect(document.addEventListener).toHaveBeenCalledWith('click', expect.any(Function));
+ });
+
+ it('removes global listener on destroy', () => {
+ createComponent();
+ wrapper.destroy();
+ expect(document.removeEventListener).toHaveBeenCalledWith('click', expect.any(Function));
+ });
+ });
+
+ describe('click handling', () => {
+ let node;
+
+ beforeEach(() => {
+ node = document.createElement('div');
+ document.body.appendChild(node);
+ });
+
+ afterEach(() => {
+ node.remove();
+ node = null;
+ });
+
+ it('ignores wrong clicks', () => {
+ createComponent();
+ const event = new window.MouseEvent('click', {
+ bubbles: true,
+ cancellable: true,
+ });
+ jest.spyOn(event, 'preventDefault');
+ node.dispatchEvent(event);
+ expect(event.preventDefault).not.toHaveBeenCalled();
+ });
+
+ it('captures click with glModalAction', () => {
+ createComponent();
+ node.dataset.glModalAction = 'action1';
+ const event = new window.MouseEvent('click', {
+ bubbles: true,
+ cancellable: true,
+ });
+ jest.spyOn(event, 'preventDefault');
+ node.dispatchEvent(event);
+
+ expect(event.preventDefault).toHaveBeenCalled();
+ return wrapper.vm.$nextTick().then(() => {
+ const modal = wrapper.find({ ref: 'modal' });
+ expect(modal.exists()).toBeTruthy();
+ expect(modal.vm.showWasCalled).toBeTruthy();
+ });
+ });
+ });
+});
diff --git a/spec/frontend/pages/admin/users/components/user_operation_confirmation_modal_spec.js b/spec/frontend/pages/admin/users/components/user_operation_confirmation_modal_spec.js
new file mode 100644
index 00000000000..0ecdae2618c
--- /dev/null
+++ b/spec/frontend/pages/admin/users/components/user_operation_confirmation_modal_spec.js
@@ -0,0 +1,47 @@
+import { shallowMount } from '@vue/test-utils';
+import { GlModal } from '@gitlab/ui';
+import UserOperationConfirmationModal from '~/pages/admin/users/components/user_operation_confirmation_modal.vue';
+
+describe('User Operation confirmation modal', () => {
+ let wrapper;
+
+ const createComponent = (props = {}) => {
+ wrapper = shallowMount(UserOperationConfirmationModal, {
+ propsData: {
+ title: 'title',
+ content: 'content',
+ action: 'action',
+ url: '/url',
+ username: 'username',
+ csrfToken: 'csrf',
+ method: 'method',
+ ...props,
+ },
+ sync: false,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('renders modal with form included', () => {
+ createComponent();
+ expect(wrapper.element).toMatchSnapshot();
+ });
+
+ it('closing modal with ok button triggers form submit', () => {
+ createComponent();
+ const form = wrapper.find('form');
+ jest.spyOn(form.element, 'submit').mockReturnValue();
+ wrapper.find(GlModal).vm.$emit('ok');
+ return wrapper.vm.$nextTick().then(() => {
+ expect(form.element.submit).toHaveBeenCalled();
+ expect(form.element.action).toContain(wrapper.props('url'));
+ expect(new FormData(form.element).get('authenticity_token')).toEqual(
+ wrapper.props('csrfToken'),
+ );
+ });
+ });
+});
diff --git a/spec/frontend/performance_bar/components/detailed_metric_spec.js b/spec/frontend/performance_bar/components/detailed_metric_spec.js
new file mode 100644
index 00000000000..74f242431a1
--- /dev/null
+++ b/spec/frontend/performance_bar/components/detailed_metric_spec.js
@@ -0,0 +1,111 @@
+import DetailedMetric from '~/performance_bar/components/detailed_metric.vue';
+import RequestWarning from '~/performance_bar/components/request_warning.vue';
+import { shallowMount } from '@vue/test-utils';
+
+describe('detailedMetric', () => {
+ const createComponent = props =>
+ shallowMount(DetailedMetric, {
+ propsData: {
+ ...props,
+ },
+ });
+
+ describe('when the current request has no details', () => {
+ const wrapper = createComponent({
+ currentRequest: {},
+ metric: 'gitaly',
+ header: 'Gitaly calls',
+ details: 'details',
+ keys: ['feature', 'request'],
+ });
+
+ it('does not render the element', () => {
+ expect(wrapper.isEmpty()).toBe(true);
+ });
+ });
+
+ describe('when the current request has details', () => {
+ const requestDetails = [
+ { duration: '100', feature: 'find_commit', request: 'abcdef', backtrace: ['hello', 'world'] },
+ { duration: '23', feature: 'rebase_in_progress', request: '', backtrace: ['world', 'hello'] },
+ ];
+
+ describe('with a default metric name', () => {
+ const wrapper = createComponent({
+ currentRequest: {
+ details: {
+ gitaly: {
+ duration: '123ms',
+ calls: '456',
+ details: requestDetails,
+ warnings: ['gitaly calls: 456 over 30'],
+ },
+ },
+ },
+ metric: 'gitaly',
+ header: 'Gitaly calls',
+ keys: ['feature', 'request'],
+ });
+
+ it('displays details', () => {
+ expect(wrapper.text().replace(/\s+/g, ' ')).toContain('123ms / 456');
+ });
+
+ it('adds a modal with a table of the details', () => {
+ wrapper
+ .findAll('.performance-bar-modal td:nth-child(1)')
+ .wrappers.forEach((duration, index) => {
+ expect(duration.text()).toContain(requestDetails[index].duration);
+ });
+
+ wrapper
+ .findAll('.performance-bar-modal td:nth-child(2)')
+ .wrappers.forEach((feature, index) => {
+ expect(feature.text()).toContain(requestDetails[index].feature);
+ });
+
+ wrapper
+ .findAll('.performance-bar-modal td:nth-child(2)')
+ .wrappers.forEach((request, index) => {
+ expect(request.text()).toContain(requestDetails[index].request);
+ });
+
+ expect(wrapper.find('.text-expander.js-toggle-button')).not.toBeNull();
+
+ wrapper.findAll('.performance-bar-modal td:nth-child(2)').wrappers.forEach(request => {
+ expect(request.text()).toContain('world');
+ });
+ });
+
+ it('displays the metric title', () => {
+ expect(wrapper.text()).toContain('gitaly');
+ });
+
+ it('displays request warnings', () => {
+ expect(wrapper.find(RequestWarning).exists()).toBe(true);
+ });
+ });
+
+ describe('when using a custom metric title', () => {
+ const wrapper = createComponent({
+ currentRequest: {
+ details: {
+ gitaly: {
+ duration: '123ms',
+ calls: '456',
+ details: requestDetails,
+ },
+ },
+ },
+ metric: 'gitaly',
+ title: 'custom',
+ header: 'Gitaly calls',
+ keys: ['feature', 'request'],
+ });
+
+ it('displays the custom title', () => {
+ expect(wrapper.text()).toContain('custom');
+ });
+ });
+ });
+});
diff --git a/spec/frontend/performance_bar/components/performance_bar_app_spec.js b/spec/frontend/performance_bar/components/performance_bar_app_spec.js
new file mode 100644
index 00000000000..ba403dd6209
--- /dev/null
+++ b/spec/frontend/performance_bar/components/performance_bar_app_spec.js
@@ -0,0 +1,20 @@
+import PerformanceBarApp from '~/performance_bar/components/performance_bar_app.vue';
+import PerformanceBarStore from '~/performance_bar/stores/performance_bar_store';
+import { shallowMount } from '@vue/test-utils';
+
+describe('performance bar app', () => {
+ const store = new PerformanceBarStore();
+ const wrapper = shallowMount(PerformanceBarApp, {
+ propsData: {
+ store,
+ env: 'development',
+ requestId: '123',
+ peekUrl: '/-/peek/results',
+ profileUrl: '?lineprofiler=true',
+ },
+ });
+
+ it('sets the class to match the environment', () => {
+ expect(wrapper.element.getAttribute('class')).toContain('development');
+ });
+});
diff --git a/spec/frontend/performance_bar/components/request_selector_spec.js b/spec/frontend/performance_bar/components/request_selector_spec.js
new file mode 100644
index 00000000000..a4ed55fbf15
--- /dev/null
+++ b/spec/frontend/performance_bar/components/request_selector_spec.js
@@ -0,0 +1,64 @@
+import RequestSelector from '~/performance_bar/components/request_selector.vue';
+import { shallowMount } from '@vue/test-utils';
+
+describe('request selector', () => {
+ const requests = [
+ {
+ id: '123',
+ url: 'https://gitlab.com/',
+ hasWarnings: false,
+ },
+ {
+ id: '456',
+ url: 'https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/1',
+ hasWarnings: false,
+ },
+ {
+ id: '789',
+ url: 'https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/1.json?serializer=widget',
+ hasWarnings: false,
+ },
+ {
+ id: 'abc',
+ url: 'https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/1/discussions.json',
+ hasWarnings: true,
+ },
+ ];
+
+ const wrapper = shallowMount(RequestSelector, {
+ propsData: {
+ requests,
+ currentRequest: requests[1],
+ },
+ });
+
+ function optionText(requestId) {
+ return wrapper
+ .find(`[value='${requestId}']`)
+ .text()
+ .trim();
+ }
+
+ it('displays the last component of the path', () => {
+ expect(optionText(requests[2].id)).toEqual('1.json?serializer=widget');
+ });
+
+ it('keeps the last two components of the path when the last component is numeric', () => {
+ expect(optionText(requests[1].id)).toEqual('merge_requests/1');
+ });
+
+ it('ignores trailing slashes', () => {
+ expect(optionText(requests[0].id)).toEqual('gitlab.com');
+ });
+
+ it('has a warning icon if any requests have warnings', () => {
+ expect(wrapper.find('span > gl-emoji').element.dataset.name).toEqual('warning');
+ });
+
+ it('adds a warning glyph to requests with warnings', () => {
+ const requestValue = wrapper.find('[value="abc"]').text();
+
+ expect(requestValue).toContain('discussions.json');
+ expect(requestValue).toContain('(!)');
+ });
+});
diff --git a/spec/frontend/performance_bar/components/request_warning_spec.js b/spec/frontend/performance_bar/components/request_warning_spec.js
new file mode 100644
index 00000000000..6d8bfba56f6
--- /dev/null
+++ b/spec/frontend/performance_bar/components/request_warning_spec.js
@@ -0,0 +1,33 @@
+import RequestWarning from '~/performance_bar/components/request_warning.vue';
+import { shallowMount } from '@vue/test-utils';
+
+describe('request warning', () => {
+ const htmlId = 'request-123';
+
+ describe('when the request has warnings', () => {
+ const wrapper = shallowMount(RequestWarning, {
+ propsData: {
+ htmlId,
+ warnings: ['gitaly calls: 30 over 10', 'gitaly duration: 1500 over 1000'],
+ },
+ });
+
+ it('adds a warning emoji with the correct ID', () => {
+ expect(wrapper.find('span[id]').attributes('id')).toEqual(htmlId);
+ expect(wrapper.find('span[id] gl-emoji').element.dataset.name).toEqual('warning');
+ });
+ });
+
+ describe('when the request does not have warnings', () => {
+ const wrapper = shallowMount(RequestWarning, {
+ propsData: {
+ htmlId,
+ warnings: [],
+ },
+ });
+
+ it('does nothing', () => {
+ expect(wrapper.isEmpty()).toBe(true);
+ });
+ });
+});
diff --git a/spec/frontend/registry/components/__snapshots__/group_empty_state_spec.js.snap b/spec/frontend/registry/components/__snapshots__/group_empty_state_spec.js.snap
new file mode 100644
index 00000000000..3f13b7d4d76
--- /dev/null
+++ b/spec/frontend/registry/components/__snapshots__/group_empty_state_spec.js.snap
@@ -0,0 +1,61 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Registry Group Empty state to match the default snapshot 1`] = `
+<div
+ class="row container-message empty-state"
+>
+ <div
+ class="col-12"
+ >
+ <div
+ class="svg-250 svg-content"
+ >
+ <img
+ alt="There are no container images available in this group"
+ class=""
+ src="imageUrl"
+ />
+ </div>
+ </div>
+
+ <div
+ class="col-12"
+ >
+ <div
+ class="text-content"
+ >
+ <h4
+ class="center"
+ style=""
+ >
+ There are no container images available in this group
+ </h4>
+
+ <p
+ class="center"
+ style=""
+ >
+ <p
+ class="js-no-container-images-text"
+ >
+ With the Container Registry, every project can have its own space to store its Docker images. Push at least one Docker image in one of this group's projects in order to show up here.
+ <a
+ href="help"
+ target="_blank"
+ >
+ More Information
+ </a>
+ </p>
+ </p>
+
+ <div
+ class="text-center"
+ >
+ <!---->
+
+ <!---->
+ </div>
+ </div>
+ </div>
+</div>
+`;
diff --git a/spec/frontend/registry/components/__snapshots__/project_empty_state_spec.js.snap b/spec/frontend/registry/components/__snapshots__/project_empty_state_spec.js.snap
new file mode 100644
index 00000000000..3084462f5ae
--- /dev/null
+++ b/spec/frontend/registry/components/__snapshots__/project_empty_state_spec.js.snap
@@ -0,0 +1,186 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Registry Project Empty state to match the default snapshot 1`] = `
+<div
+ class="row container-message empty-state"
+>
+ <div
+ class="col-12"
+ >
+ <div
+ class="svg-250 svg-content"
+ >
+ <img
+ alt="There are no container images stored for this project"
+ class=""
+ src="imageUrl"
+ />
+ </div>
+ </div>
+
+ <div
+ class="col-12"
+ >
+ <div
+ class="text-content"
+ >
+ <h4
+ class="center"
+ style=""
+ >
+ There are no container images stored for this project
+ </h4>
+
+ <p
+ class="center"
+ style=""
+ >
+ <p
+ class="js-no-container-images-text"
+ >
+ With the Container Registry, every project can have its own space to store its Docker images.
+ <a
+ href="help"
+ target="_blank"
+ >
+ More Information
+ </a>
+ </p>
+
+ <h5>
+ Quick Start
+ </h5>
+
+ <p
+ class="js-not-logged-in-to-registry-text"
+ >
+ If you are not already logged in, you need to authenticate to the Container Registry by using your GitLab username and password. If you have
+ <a
+ href="help_link"
+ target="_blank"
+ >
+ Two-Factor Authentication
+ </a>
+ enabled, use a
+ <a
+ href="personal_token"
+ target="_blank"
+ >
+ Personal Access Token
+ </a>
+ instead of a password.
+ </p>
+
+ <div
+ class="input-group append-bottom-10"
+ >
+ <input
+ class="form-control monospace"
+ readonly="readonly"
+ type="text"
+ />
+
+ <span
+ class="input-group-append"
+ >
+ <button
+ class="btn input-group-text btn-secondary btn-default"
+ data-clipboard-text="docker login host"
+ data-original-title="Copy login command"
+ title=""
+ type="button"
+ >
+ <svg
+ aria-hidden="true"
+ class="s16 ic-duplicate"
+ >
+ <use
+ xlink:href="#duplicate"
+ />
+ </svg>
+ </button>
+ </span>
+ </div>
+
+ <p />
+
+ <p>
+
+ You can add an image to this registry with the following commands:
+
+ </p>
+
+ <div
+ class="input-group append-bottom-10"
+ >
+ <input
+ class="form-control monospace"
+ readonly="readonly"
+ type="text"
+ />
+
+ <span
+ class="input-group-append"
+ >
+ <button
+ class="btn input-group-text btn-secondary btn-default"
+ data-clipboard-text="docker build -t url ."
+ data-original-title="Copy build command"
+ title=""
+ type="button"
+ >
+ <svg
+ aria-hidden="true"
+ class="s16 ic-duplicate"
+ >
+ <use
+ xlink:href="#duplicate"
+ />
+ </svg>
+ </button>
+ </span>
+ </div>
+
+ <div
+ class="input-group"
+ >
+ <input
+ class="form-control monospace"
+ readonly="readonly"
+ type="text"
+ />
+
+ <span
+ class="input-group-append"
+ >
+ <button
+ class="btn input-group-text btn-secondary btn-default"
+ data-clipboard-text="docker push url"
+ data-original-title="Copy push command"
+ title=""
+ type="button"
+ >
+ <svg
+ aria-hidden="true"
+ class="s16 ic-duplicate"
+ >
+ <use
+ xlink:href="#duplicate"
+ />
+ </svg>
+ </button>
+ </span>
+ </div>
+ </p>
+
+ <div
+ class="text-center"
+ >
+ <!---->
+
+ <!---->
+ </div>
+ </div>
+ </div>
+</div>
+`;
diff --git a/spec/frontend/registry/components/app_spec.js b/spec/frontend/registry/components/app_spec.js
new file mode 100644
index 00000000000..a69c33c246d
--- /dev/null
+++ b/spec/frontend/registry/components/app_spec.js
@@ -0,0 +1,160 @@
+import Vue from 'vue';
+import { mount } from '@vue/test-utils';
+import registry from '~/registry/components/app.vue';
+import { TEST_HOST } from '../../helpers/test_constants';
+import { reposServerResponse, parsedReposServerResponse } from '../mock_data';
+
+describe('Registry List', () => {
+ let wrapper;
+
+ const findCollapsibleContainer = w => w.findAll({ name: 'CollapsibeContainerRegisty' });
+ const findProjectEmptyState = w => w.find({ name: 'ProjectEmptyState' });
+ const findGroupEmptyState = w => w.find({ name: 'GroupEmptyState' });
+ const findSpinner = w => w.find('.gl-spinner');
+ const findCharacterErrorText = w => w.find('.js-character-error-text');
+
+ const propsData = {
+ endpoint: `${TEST_HOST}/foo`,
+ helpPagePath: 'foo',
+ noContainersImage: 'foo',
+ containersErrorImage: 'foo',
+ repositoryUrl: 'foo',
+ registryHostUrlWithPort: 'foo',
+ personalAccessTokensHelpLink: 'foo',
+ twoFactorAuthHelpLink: 'foo',
+ };
+
+ const setMainEndpoint = jest.fn();
+ const fetchRepos = jest.fn();
+ const setIsDeleteDisabled = jest.fn();
+
+ const methods = {
+ setMainEndpoint,
+ fetchRepos,
+ setIsDeleteDisabled,
+ };
+
+ beforeEach(() => {
+ // This is needed due to console.error called by vue to emit a warning that stop the tests.
+ // See https://github.com/vuejs/vue-test-utils/issues/532.
+ Vue.config.silent = true;
+ wrapper = mount(registry, {
+ propsData,
+ computed: {
+ repos() {
+ return parsedReposServerResponse;
+ },
+ },
+ methods,
+ });
+ });
+
+ afterEach(() => {
+ jest.clearAllMocks();
+ Vue.config.silent = false;
+ wrapper.destroy();
+ });
+
+ describe('with data', () => {
+ it('should render a list of CollapsibeContainerRegisty', () => {
+ const containers = findCollapsibleContainer(wrapper);
+ expect(wrapper.vm.repos.length).toEqual(reposServerResponse.length);
+ expect(containers.length).toEqual(reposServerResponse.length);
+ });
+ });
+
+ describe('without data', () => {
+ let localWrapper;
+ beforeEach(() => {
+ localWrapper = mount(registry, {
+ propsData,
+ computed: {
+ repos() {
+ return [];
+ },
+ },
+ methods,
+ });
+ });
+
+ it('should render project empty message', () => {
+ const projectEmptyState = findProjectEmptyState(localWrapper);
+ expect(projectEmptyState.exists()).toBe(true);
+ });
+ });
+
+ describe('while loading data', () => {
+ let localWrapper;
+
+ beforeEach(() => {
+ localWrapper = mount(registry, {
+ propsData,
+ computed: {
+ repos() {
+ return [];
+ },
+ isLoading() {
+ return true;
+ },
+ },
+ methods,
+ });
+ });
+
+ it('should render a loading spinner', () => {
+ const spinner = findSpinner(localWrapper);
+ expect(spinner.exists()).toBe(true);
+ });
+ });
+
+ describe('invalid characters in path', () => {
+ let localWrapper;
+
+ beforeEach(() => {
+ localWrapper = mount(registry, {
+ propsData: {
+ ...propsData,
+ characterError: true,
+ },
+ computed: {
+ repos() {
+ return [];
+ },
+ },
+ methods,
+ });
+ });
+
+ it('should render invalid characters error message', () => {
+ const characterErrorText = findCharacterErrorText(localWrapper);
+ expect(characterErrorText.text()).toEqual(
+ 'We are having trouble connecting to Docker, which could be due to an issue with your project name or path. More Information',
+ );
+ });
+ });
+
+ describe('with groupId set', () => {
+ const isGroupPage = true;
+
+ beforeEach(() => {
+ wrapper = mount(registry, {
+ propsData: {
+ ...propsData,
+ endpoint: null,
+ isGroupPage,
+ },
+ methods,
+ });
+ });
+
+ it('call the right vuex setters', () => {
+ expect(methods.setMainEndpoint).toHaveBeenLastCalledWith(null);
+ expect(methods.setIsDeleteDisabled).toHaveBeenLastCalledWith(true);
+ });
+
+ it('should render groups empty message', () => {
+ const groupEmptyState = findGroupEmptyState(wrapper);
+ expect(groupEmptyState.exists()).toBe(true);
+ });
+ });
+});
diff --git a/spec/frontend/registry/components/collapsible_container_spec.js b/spec/frontend/registry/components/collapsible_container_spec.js
new file mode 100644
index 00000000000..f93ebab1a4d
--- /dev/null
+++ b/spec/frontend/registry/components/collapsible_container_spec.js
@@ -0,0 +1,127 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import { mount, createLocalVue } from '@vue/test-utils';
+import collapsibleComponent from '~/registry/components/collapsible_container.vue';
+import { repoPropsData } from '../mock_data';
+import createFlash from '~/flash';
+import * as getters from '~/registry/stores/getters';
+
+jest.mock('~/flash.js');
+
+const localVue = createLocalVue();
+
+localVue.use(Vuex);
+
+describe('collapsible registry container', () => {
+ let wrapper;
+ let store;
+
+ const findDeleteBtn = w => w.find('.js-remove-repo');
+ const findContainerImageTags = w => w.find('.container-image-tags');
+ const findToggleRepos = w => w.findAll('.js-toggle-repo');
+
+ const mountWithStore = config => mount(collapsibleComponent, { ...config, store, localVue });
+
+ beforeEach(() => {
+ createFlash.mockClear();
+ // This is needed due to console.error called by vue to emit a warning that stop the tests
+ // see https://github.com/vuejs/vue-test-utils/issues/532
+ Vue.config.silent = true;
+ store = new Vuex.Store({
+ state: {
+ isDeleteDisabled: false,
+ },
+ getters,
+ });
+
+ wrapper = mountWithStore({
+ propsData: {
+ repo: repoPropsData,
+ },
+ });
+ });
+
+ afterEach(() => {
+ Vue.config.silent = false;
+ wrapper.destroy();
+ });
+
+ describe('toggle', () => {
+ beforeEach(() => {
+ const fetchList = jest.fn();
+ wrapper.setMethods({ fetchList });
+ });
+
+ const expectIsClosed = () => {
+ const container = findContainerImageTags(wrapper);
+ expect(container.exists()).toBe(false);
+ expect(wrapper.vm.iconName).toEqual('angle-right');
+ };
+
+ it('should be closed by default', () => {
+ expectIsClosed();
+ });
+ it('should be open when user clicks on closed repo', () => {
+ const toggleRepos = findToggleRepos(wrapper);
+ toggleRepos.at(0).trigger('click');
+ const container = findContainerImageTags(wrapper);
+ expect(container.exists()).toBe(true);
+ expect(wrapper.vm.fetchList).toHaveBeenCalled();
+ });
+ it('should be closed when the user clicks on an opened repo', done => {
+ const toggleRepos = findToggleRepos(wrapper);
+ toggleRepos.at(0).trigger('click');
+ Vue.nextTick(() => {
+ toggleRepos.at(0).trigger('click');
+ Vue.nextTick(() => {
+ expectIsClosed();
+ done();
+ });
+ });
+ });
+ });
+
+ describe('delete repo', () => {
+ it('should be possible to delete a repo', () => {
+ const deleteBtn = findDeleteBtn(wrapper);
+ expect(deleteBtn.exists()).toBe(true);
+ });
+
+ it('should call deleteItem when confirming deletion', () => {
+ const deleteItem = jest.fn().mockResolvedValue();
+ const fetchRepos = jest.fn().mockResolvedValue();
+ wrapper.setMethods({ deleteItem, fetchRepos });
+ wrapper.vm.handleDeleteRepository();
+ expect(wrapper.vm.deleteItem).toHaveBeenCalledWith(wrapper.vm.repo);
+ });
+
+ it('should show an error when there is API error', () => {
+ const deleteItem = jest.fn().mockRejectedValue('error');
+ wrapper.setMethods({ deleteItem });
+ return wrapper.vm.handleDeleteRepository().then(() => {
+ expect(createFlash).toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe('disabled delete', () => {
+ beforeEach(() => {
+ store = new Vuex.Store({
+ state: {
+ isDeleteDisabled: true,
+ },
+ getters,
+ });
+ wrapper = mountWithStore({
+ propsData: {
+ repo: repoPropsData,
+ },
+ });
+ });
+
+ it('should not render delete button', () => {
+ const deleteBtn = findDeleteBtn(wrapper);
+ expect(deleteBtn.exists()).toBe(false);
+ });
+ });
+});
diff --git a/spec/frontend/registry/components/group_empty_state_spec.js b/spec/frontend/registry/components/group_empty_state_spec.js
new file mode 100644
index 00000000000..f71074b5154
--- /dev/null
+++ b/spec/frontend/registry/components/group_empty_state_spec.js
@@ -0,0 +1,23 @@
+import { mount } from '@vue/test-utils';
+import groupEmptyState from '~/registry/components/group_empty_state.vue';
+
+describe('Registry Group Empty state', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ wrapper = mount(groupEmptyState, {
+ propsData: {
+ noContainersImage: 'imageUrl',
+ helpPagePath: 'help',
+ },
+ });
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('to match the default snapshot', () => {
+ expect(wrapper.element).toMatchSnapshot();
+ });
+});
diff --git a/spec/frontend/registry/components/project_empty_state_spec.js b/spec/frontend/registry/components/project_empty_state_spec.js
new file mode 100644
index 00000000000..913524db3aa
--- /dev/null
+++ b/spec/frontend/registry/components/project_empty_state_spec.js
@@ -0,0 +1,27 @@
+import { mount } from '@vue/test-utils';
+import projectEmptyState from '~/registry/components/project_empty_state.vue';
+
+describe('Registry Project Empty state', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ wrapper = mount(projectEmptyState, {
+ propsData: {
+ noContainersImage: 'imageUrl',
+ helpPagePath: 'help',
+ repositoryUrl: 'url',
+ twoFactorAuthHelpLink: 'help_link',
+ personalAccessTokensHelpLink: 'personal_token',
+ registryHostUrlWithPort: 'host',
+ },
+ });
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('to match the default snapshot', () => {
+ expect(wrapper.element).toMatchSnapshot();
+ });
+});
diff --git a/spec/frontend/registry/components/table_registry_spec.js b/spec/frontend/registry/components/table_registry_spec.js
new file mode 100644
index 00000000000..7cb7c012d9d
--- /dev/null
+++ b/spec/frontend/registry/components/table_registry_spec.js
@@ -0,0 +1,268 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import tableRegistry from '~/registry/components/table_registry.vue';
+import { mount, createLocalVue } from '@vue/test-utils';
+import { repoPropsData } from '../mock_data';
+import * as getters from '~/registry/stores/getters';
+
+const [firstImage, secondImage] = repoPropsData.list;
+
+const localVue = createLocalVue();
+
+localVue.use(Vuex);
+
+describe('table registry', () => {
+ let wrapper;
+ let store;
+
+ const findSelectAllCheckbox = w => w.find('.js-select-all-checkbox > input');
+ const findSelectCheckboxes = w => w.findAll('.js-select-checkbox > input');
+ const findDeleteButton = w => w.find('.js-delete-registry');
+ const findDeleteButtonsRow = w => w.findAll('.js-delete-registry-row');
+ const findPagination = w => w.find('.js-registry-pagination');
+ const bulkDeletePath = 'path';
+
+ const mountWithStore = config => mount(tableRegistry, { ...config, store, localVue });
+
+ beforeEach(() => {
+ // This is needed due to console.error called by vue to emit a warning that stop the tests
+ // see https://github.com/vuejs/vue-test-utils/issues/532
+ Vue.config.silent = true;
+
+ store = new Vuex.Store({
+ state: {
+ isDeleteDisabled: false,
+ },
+ getters,
+ });
+
+ wrapper = mountWithStore({
+ propsData: {
+ repo: repoPropsData,
+ canDeleteRepo: true,
+ },
+ });
+ });
+
+ afterEach(() => {
+ Vue.config.silent = false;
+ wrapper.destroy();
+ });
+
+ describe('rendering', () => {
+ it('should render a table with the registry list', () => {
+ expect(wrapper.findAll('.registry-image-row').length).toEqual(repoPropsData.list.length);
+ });
+
+ it('should render registry tag', () => {
+ const tds = wrapper.findAll('.registry-image-row td');
+ expect(tds.at(0).classes()).toContain('check');
+ expect(tds.at(1).html()).toContain(repoPropsData.list[0].tag);
+ expect(tds.at(2).html()).toContain(repoPropsData.list[0].shortRevision);
+ expect(tds.at(3).html()).toContain(repoPropsData.list[0].layers);
+ expect(tds.at(3).html()).toContain(repoPropsData.list[0].size);
+ expect(tds.at(4).html()).toContain(wrapper.vm.timeFormated(repoPropsData.list[0].createdAt));
+ });
+ });
+
+ describe('multi select', () => {
+ it('selecting a row should enable delete button', done => {
+ const deleteBtn = findDeleteButton(wrapper);
+ const checkboxes = findSelectCheckboxes(wrapper);
+
+ expect(deleteBtn.attributes('disabled')).toBe('disabled');
+
+ checkboxes.at(0).trigger('click');
+ Vue.nextTick(() => {
+ expect(deleteBtn.attributes('disabled')).toEqual(undefined);
+ done();
+ });
+ });
+
+ it('selecting all checkbox should select all rows and enable delete button', done => {
+ const selectAll = findSelectAllCheckbox(wrapper);
+ const checkboxes = findSelectCheckboxes(wrapper);
+ selectAll.trigger('click');
+
+ Vue.nextTick(() => {
+ const checked = checkboxes.filter(w => w.element.checked);
+ expect(checked.length).toBe(checkboxes.length);
+ done();
+ });
+ });
+
+ it('deselecting select all checkbox should deselect all rows and disable delete button', done => {
+ const checkboxes = findSelectCheckboxes(wrapper);
+ const selectAll = findSelectAllCheckbox(wrapper);
+ selectAll.trigger('click');
+ selectAll.trigger('click');
+
+ Vue.nextTick(() => {
+ const checked = checkboxes.filter(w => !w.element.checked);
+ expect(checked.length).toBe(checkboxes.length);
+ done();
+ });
+ });
+
+ it('should delete multiple items when multiple items are selected', done => {
+ const multiDeleteItems = jest.fn().mockResolvedValue();
+ wrapper.setMethods({ multiDeleteItems });
+ const selectAll = findSelectAllCheckbox(wrapper);
+ selectAll.trigger('click');
+
+ Vue.nextTick(() => {
+ const deleteBtn = findDeleteButton(wrapper);
+ expect(wrapper.vm.selectedItems).toEqual([0, 1]);
+ expect(deleteBtn.attributes('disabled')).toEqual(undefined);
+ wrapper.setData({ itemsToBeDeleted: [...wrapper.vm.selectedItems] });
+ wrapper.vm.handleMultipleDelete();
+
+ Vue.nextTick(() => {
+ expect(wrapper.vm.selectedItems).toEqual([]);
+ expect(wrapper.vm.itemsToBeDeleted).toEqual([]);
+ expect(wrapper.vm.multiDeleteItems).toHaveBeenCalledWith({
+ path: bulkDeletePath,
+ items: [firstImage.tag, secondImage.tag],
+ });
+ done();
+ });
+ });
+ });
+
+ it('should show an error message if bulkDeletePath is not set', () => {
+ const showError = jest.fn();
+ wrapper.setMethods({ showError });
+ wrapper.setProps({
+ repo: {
+ ...repoPropsData,
+ tagsPath: null,
+ },
+ });
+ wrapper.vm.handleMultipleDelete();
+ expect(wrapper.vm.showError).toHaveBeenCalled();
+ });
+ });
+
+ describe('delete registry', () => {
+ beforeEach(() => {
+ wrapper.setData({ selectedItems: [0] });
+ });
+
+ it('should be possible to delete a registry', () => {
+ const deleteBtn = findDeleteButton(wrapper);
+ const deleteBtns = findDeleteButtonsRow(wrapper);
+ expect(wrapper.vm.selectedItems).toEqual([0]);
+ expect(deleteBtn).toBeDefined();
+ expect(deleteBtn.attributes('disable')).toBe(undefined);
+ expect(deleteBtns.is('button')).toBe(true);
+ });
+
+ it('should allow deletion row by row', () => {
+ const deleteBtns = findDeleteButtonsRow(wrapper);
+ const deleteSingleItem = jest.fn();
+ const deleteItem = jest.fn().mockResolvedValue();
+ wrapper.setMethods({ deleteSingleItem, deleteItem });
+ deleteBtns.at(0).trigger('click');
+ expect(wrapper.vm.deleteSingleItem).toHaveBeenCalledWith(0);
+ wrapper.vm.handleSingleDelete(1);
+ expect(wrapper.vm.deleteItem).toHaveBeenCalledWith(1);
+ });
+ });
+
+ describe('pagination', () => {
+ const repo = {
+ repoPropsData,
+ pagination: {
+ total: 20,
+ perPage: 2,
+ nextPage: 2,
+ },
+ };
+
+ beforeEach(() => {
+ wrapper = mount(tableRegistry, {
+ propsData: {
+ repo,
+ },
+ });
+ });
+
+ it('should exist', () => {
+ const pagination = findPagination(wrapper);
+ expect(pagination.exists()).toBe(true);
+ });
+ it('should be visible when pagination is needed', () => {
+ const pagination = findPagination(wrapper);
+ expect(pagination.isVisible()).toBe(true);
+ wrapper.setProps({
+ repo: {
+ pagination: {
+ total: 0,
+ perPage: 10,
+ },
+ },
+ });
+ expect(wrapper.vm.shouldRenderPagination).toBe(false);
+ });
+ it('should have a change function that update the list when run', () => {
+ const fetchList = jest.fn().mockResolvedValue();
+ wrapper.setMethods({ fetchList });
+ wrapper.vm.onPageChange(1);
+ expect(wrapper.vm.fetchList).toHaveBeenCalledWith({ repo, page: 1 });
+ });
+ });
+
+ describe('modal content', () => {
+ it('should show the singular title and image name when deleting a single image', () => {
+ wrapper.setData({ selectedItems: [1, 2, 3] });
+ wrapper.vm.deleteSingleItem(0);
+ expect(wrapper.vm.modalAction).toBe('Remove tag');
+ expect(wrapper.vm.modalDescription).toContain(firstImage.tag);
+ });
+
+ it('should show the plural title and image count when deleting more than one image', () => {
+ wrapper.setData({ selectedItems: [1, 2] });
+ wrapper.vm.deleteMultipleItems();
+
+ expect(wrapper.vm.modalAction).toBe('Remove tags');
+ expect(wrapper.vm.modalDescription).toContain('<b>2</b> tags');
+ });
+ });
+
+ describe('disabled delete', () => {
+ beforeEach(() => {
+ store = new Vuex.Store({
+ state: {
+ isDeleteDisabled: true,
+ },
+ getters,
+ });
+ wrapper = mountWithStore({
+ propsData: {
+ repo: repoPropsData,
+ canDeleteRepo: false,
+ },
+ });
+ });
+
+ it('should not render select all', () => {
+ const selectAll = findSelectAllCheckbox(wrapper);
+ expect(selectAll.exists()).toBe(false);
+ });
+
+ it('should not render any select checkbox', () => {
+ const selects = findSelectCheckboxes(wrapper);
+ expect(selects.length).toBe(0);
+ });
+
+ it('should not render delete registry button', () => {
+ const deleteBtn = findDeleteButton(wrapper);
+ expect(deleteBtn.exists()).toBe(false);
+ });
+
+ it('should not render delete row button', () => {
+ const deleteBtns = findDeleteButtonsRow(wrapper);
+ expect(deleteBtns.length).toBe(0);
+ });
+ });
+});
diff --git a/spec/frontend/registry/getters_spec.js b/spec/frontend/registry/getters_spec.js
deleted file mode 100644
index 839aa718997..00000000000
--- a/spec/frontend/registry/getters_spec.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import * as getters from '~/registry/stores/getters';
-
-describe('Getters Registry Store', () => {
- let state;
-
- beforeEach(() => {
- state = {
- isLoading: false,
- endpoint: '/root/empty-project/container_registry.json',
- repos: [
- {
- canDelete: true,
- destroyPath: 'bar',
- id: '134',
- isLoading: false,
- list: [],
- location: 'foo',
- name: 'gitlab-org/omnibus-gitlab/foo',
- tagsPath: 'foo',
- },
- {
- canDelete: true,
- destroyPath: 'bar',
- id: '123',
- isLoading: false,
- list: [],
- location: 'foo',
- name: 'gitlab-org/omnibus-gitlab',
- tagsPath: 'foo',
- },
- ],
- };
- });
-
- describe('isLoading', () => {
- it('should return the isLoading property', () => {
- expect(getters.isLoading(state)).toEqual(state.isLoading);
- });
- });
-
- describe('repos', () => {
- it('should return the repos', () => {
- expect(getters.repos(state)).toEqual(state.repos);
- });
- });
-});
diff --git a/spec/javascripts/registry/mock_data.js b/spec/frontend/registry/mock_data.js
index 130ab298e89..130ab298e89 100644
--- a/spec/javascripts/registry/mock_data.js
+++ b/spec/frontend/registry/mock_data.js
diff --git a/spec/frontend/registry/stores/actions_spec.js b/spec/frontend/registry/stores/actions_spec.js
new file mode 100644
index 00000000000..7937fa82e80
--- /dev/null
+++ b/spec/frontend/registry/stores/actions_spec.js
@@ -0,0 +1,203 @@
+import MockAdapter from 'axios-mock-adapter';
+import axios from '~/lib/utils/axios_utils';
+import * as actions from '~/registry/stores/actions';
+import * as types from '~/registry/stores/mutation_types';
+import { TEST_HOST } from '../../helpers/test_constants';
+import testAction from '../../helpers/vuex_action_helper';
+import createFlash from '~/flash';
+
+import {
+ reposServerResponse,
+ registryServerResponse,
+ parsedReposServerResponse,
+} from '../mock_data';
+
+jest.mock('~/flash.js');
+
+describe('Actions Registry Store', () => {
+ let mock;
+ let state;
+
+ beforeEach(() => {
+ mock = new MockAdapter(axios);
+ state = {
+ endpoint: `${TEST_HOST}/endpoint.json`,
+ };
+ });
+
+ afterEach(() => {
+ mock.restore();
+ });
+
+ describe('fetchRepos', () => {
+ beforeEach(() => {
+ mock.onGet(`${TEST_HOST}/endpoint.json`).replyOnce(200, reposServerResponse, {});
+ });
+
+ it('should set received repos', done => {
+ testAction(
+ actions.fetchRepos,
+ null,
+ state,
+ [
+ { type: types.TOGGLE_MAIN_LOADING },
+ { type: types.TOGGLE_MAIN_LOADING },
+ { type: types.SET_REPOS_LIST, payload: reposServerResponse },
+ ],
+ [],
+ done,
+ );
+ });
+
+ it('should create flash on API error', done => {
+ testAction(
+ actions.fetchRepos,
+ null,
+ {
+ endpoint: null,
+ },
+ [{ type: types.TOGGLE_MAIN_LOADING }, { type: types.TOGGLE_MAIN_LOADING }],
+ [],
+ () => {
+ expect(createFlash).toHaveBeenCalled();
+ done();
+ },
+ );
+ });
+ });
+
+ describe('fetchList', () => {
+ let repo;
+ beforeEach(() => {
+ state.repos = parsedReposServerResponse;
+ [, repo] = state.repos;
+ });
+
+ it('should set received list', done => {
+ mock.onGet(repo.tagsPath).replyOnce(200, registryServerResponse, {});
+ testAction(
+ actions.fetchList,
+ { repo },
+ state,
+ [
+ { type: types.TOGGLE_REGISTRY_LIST_LOADING, payload: repo },
+ { type: types.TOGGLE_REGISTRY_LIST_LOADING, payload: repo },
+ {
+ type: types.SET_REGISTRY_LIST,
+ payload: {
+ repo,
+ resp: registryServerResponse,
+ headers: expect.anything(),
+ },
+ },
+ ],
+ [],
+ done,
+ );
+ });
+
+ it('should create flash on API error', done => {
+ mock.onGet(repo.tagsPath).replyOnce(400);
+ const updatedRepo = {
+ ...repo,
+ tagsPath: null,
+ };
+ testAction(
+ actions.fetchList,
+ {
+ repo: updatedRepo,
+ },
+ state,
+ [
+ { type: types.TOGGLE_REGISTRY_LIST_LOADING, payload: updatedRepo },
+ { type: types.TOGGLE_REGISTRY_LIST_LOADING, payload: updatedRepo },
+ ],
+ [],
+ () => {
+ expect(createFlash).toHaveBeenCalled();
+ done();
+ },
+ );
+ });
+ });
+
+ describe('setMainEndpoint', () => {
+ it('should commit set main endpoint', done => {
+ testAction(
+ actions.setMainEndpoint,
+ 'endpoint',
+ state,
+ [{ type: types.SET_MAIN_ENDPOINT, payload: 'endpoint' }],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('setIsDeleteDisabled', () => {
+ it('should commit set is delete disabled', done => {
+ testAction(
+ actions.setIsDeleteDisabled,
+ true,
+ state,
+ [{ type: types.SET_IS_DELETE_DISABLED, payload: true }],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('toggleLoading', () => {
+ it('should commit toggle main loading', done => {
+ testAction(
+ actions.toggleLoading,
+ null,
+ state,
+ [{ type: types.TOGGLE_MAIN_LOADING }],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('deleteItem and multiDeleteItems', () => {
+ let deleted;
+ const destroyPath = `${TEST_HOST}/mygroup/myproject/container_registry/1.json`;
+
+ const expectDelete = done => {
+ expect(mock.history.delete.length).toBe(1);
+ expect(deleted).toBe(true);
+ done();
+ };
+
+ beforeEach(() => {
+ deleted = false;
+ mock.onDelete(destroyPath).replyOnce(() => {
+ deleted = true;
+ return [200];
+ });
+ });
+
+ it('deleteItem should perform DELETE request on destroyPath', done => {
+ testAction(
+ actions.deleteItem,
+ {
+ destroyPath,
+ },
+ state,
+ )
+ .then(() => {
+ expectDelete(done);
+ })
+ .catch(done.fail);
+ });
+
+ it('multiDeleteItems should perform DELETE request on path', done => {
+ testAction(actions.multiDeleteItems, { path: destroyPath, items: [1] }, state)
+ .then(() => {
+ expectDelete(done);
+ })
+ .catch(done.fail);
+ });
+ });
+});
diff --git a/spec/frontend/registry/stores/getters_spec.js b/spec/frontend/registry/stores/getters_spec.js
new file mode 100644
index 00000000000..c16f520223b
--- /dev/null
+++ b/spec/frontend/registry/stores/getters_spec.js
@@ -0,0 +1,52 @@
+import * as getters from '~/registry/stores/getters';
+
+describe('Getters Registry Store', () => {
+ let state;
+
+ beforeEach(() => {
+ state = {
+ isLoading: false,
+ endpoint: '/root/empty-project/container_registry.json',
+ isDeleteDisabled: false,
+ repos: [
+ {
+ canDelete: true,
+ destroyPath: 'bar',
+ id: '134',
+ isLoading: false,
+ list: [],
+ location: 'foo',
+ name: 'gitlab-org/omnibus-gitlab/foo',
+ tagsPath: 'foo',
+ },
+ {
+ canDelete: true,
+ destroyPath: 'bar',
+ id: '123',
+ isLoading: false,
+ list: [],
+ location: 'foo',
+ name: 'gitlab-org/omnibus-gitlab',
+ tagsPath: 'foo',
+ },
+ ],
+ };
+ });
+
+ describe('isLoading', () => {
+ it('should return the isLoading property', () => {
+ expect(getters.isLoading(state)).toEqual(state.isLoading);
+ });
+ });
+
+ describe('repos', () => {
+ it('should return the repos', () => {
+ expect(getters.repos(state)).toEqual(state.repos);
+ });
+ });
+ describe('isDeleteDisabled', () => {
+ it('should return isDeleteDisabled', () => {
+ expect(getters.isDeleteDisabled(state)).toEqual(state.isDeleteDisabled);
+ });
+ });
+});
diff --git a/spec/frontend/registry/stores/mutations_spec.js b/spec/frontend/registry/stores/mutations_spec.js
new file mode 100644
index 00000000000..1d583028ca6
--- /dev/null
+++ b/spec/frontend/registry/stores/mutations_spec.js
@@ -0,0 +1,94 @@
+import mutations from '~/registry/stores/mutations';
+import * as types from '~/registry/stores/mutation_types';
+import {
+ defaultState,
+ reposServerResponse,
+ registryServerResponse,
+ parsedReposServerResponse,
+ parsedRegistryServerResponse,
+} from '../mock_data';
+
+describe('Mutations Registry Store', () => {
+ let mockState;
+ beforeEach(() => {
+ mockState = defaultState;
+ });
+
+ describe('SET_MAIN_ENDPOINT', () => {
+ it('should set the main endpoint', () => {
+ const expectedState = Object.assign({}, mockState, { endpoint: 'foo' });
+ mutations[types.SET_MAIN_ENDPOINT](mockState, 'foo');
+
+ expect(mockState.endpoint).toEqual(expectedState.endpoint);
+ });
+ });
+
+ describe('SET_IS_DELETE_DISABLED', () => {
+ it('should set the is delete disabled', () => {
+ const expectedState = Object.assign({}, mockState, { isDeleteDisabled: true });
+ mutations[types.SET_IS_DELETE_DISABLED](mockState, true);
+
+ expect(mockState.isDeleteDisabled).toEqual(expectedState.isDeleteDisabled);
+ });
+ });
+
+ describe('SET_REPOS_LIST', () => {
+ it('should set a parsed repository list', () => {
+ mutations[types.SET_REPOS_LIST](mockState, reposServerResponse);
+
+ expect(mockState.repos).toEqual(parsedReposServerResponse);
+ });
+ });
+
+ describe('TOGGLE_MAIN_LOADING', () => {
+ it('should set a parsed repository list', () => {
+ mutations[types.TOGGLE_MAIN_LOADING](mockState);
+
+ expect(mockState.isLoading).toEqual(true);
+ });
+ });
+
+ describe('SET_REGISTRY_LIST', () => {
+ it('should set a list of registries in a specific repository', () => {
+ mutations[types.SET_REPOS_LIST](mockState, reposServerResponse);
+ mutations[types.SET_REGISTRY_LIST](mockState, {
+ repo: mockState.repos[0],
+ resp: registryServerResponse,
+ headers: {
+ 'x-per-page': 2,
+ 'x-page': 1,
+ 'x-total': 10,
+ },
+ });
+
+ expect(mockState.repos[0].list).toEqual(parsedRegistryServerResponse);
+ expect(mockState.repos[0].pagination).toEqual({
+ perPage: 2,
+ page: 1,
+ total: 10,
+ totalPages: NaN,
+ nextPage: NaN,
+ previousPage: NaN,
+ });
+ });
+ });
+
+ describe('TOGGLE_REGISTRY_LIST_LOADING', () => {
+ it('should toggle isLoading property for a specific repository', () => {
+ mutations[types.SET_REPOS_LIST](mockState, reposServerResponse);
+ mutations[types.SET_REGISTRY_LIST](mockState, {
+ repo: mockState.repos[0],
+ resp: registryServerResponse,
+ headers: {
+ 'x-per-page': 2,
+ 'x-page': 1,
+ 'x-total': 10,
+ },
+ });
+
+ mutations[types.TOGGLE_REGISTRY_LIST_LOADING](mockState, mockState.repos[0]);
+
+ expect(mockState.repos[0].isLoading).toEqual(true);
+ });
+ });
+});
diff --git a/spec/frontend/releases/components/milestone_list_spec.js b/spec/frontend/releases/components/milestone_list_spec.js
deleted file mode 100644
index f267177ddab..00000000000
--- a/spec/frontend/releases/components/milestone_list_spec.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import { shallowMount } from '@vue/test-utils';
-import { GlLink } from '@gitlab/ui';
-import MilestoneList from '~/releases/components/milestone_list.vue';
-import Icon from '~/vue_shared/components/icon.vue';
-import _ from 'underscore';
-import { milestones } from '../mock_data';
-
-describe('Milestone list', () => {
- let wrapper;
-
- const factory = milestonesProp => {
- wrapper = shallowMount(MilestoneList, {
- propsData: {
- milestones: milestonesProp,
- },
- sync: false,
- });
- };
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('renders the milestone icon', () => {
- factory(milestones);
-
- expect(wrapper.find(Icon).exists()).toBe(true);
- });
-
- it('renders the label as "Milestone" if only a single milestone is passed in', () => {
- factory(milestones.slice(0, 1));
-
- expect(wrapper.find('.js-label-text').text()).toEqual('Milestone');
- });
-
- it('renders the label as "Milestones" if more than one milestone is passed in', () => {
- factory(milestones);
-
- expect(wrapper.find('.js-label-text').text()).toEqual('Milestones');
- });
-
- it('renders a link to the milestone with a tooltip', () => {
- const milestone = _.first(milestones);
- factory([milestone]);
-
- const milestoneLink = wrapper.find(GlLink);
-
- expect(milestoneLink.exists()).toBe(true);
-
- expect(milestoneLink.text()).toBe(milestone.title);
-
- expect(milestoneLink.attributes('href')).toBe(milestone.web_url);
-
- expect(milestoneLink.attributes('data-original-title')).toBe(milestone.description);
- });
-});
diff --git a/spec/frontend/releases/components/release_block_spec.js b/spec/frontend/releases/components/release_block_spec.js
deleted file mode 100644
index 4be5d500fd9..00000000000
--- a/spec/frontend/releases/components/release_block_spec.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import { mount } from '@vue/test-utils';
-import ReleaseBlock from '~/releases/components/release_block.vue';
-import timeagoMixin from '~/vue_shared/mixins/timeago';
-import { first } from 'underscore';
-import { release } from '../mock_data';
-
-describe('Release block', () => {
- let wrapper;
-
- const factory = releaseProp => {
- wrapper = mount(ReleaseBlock, {
- propsData: {
- release: releaseProp,
- },
- sync: false,
- });
- };
-
- const milestoneListExists = () => wrapper.find('.js-milestone-list').exists();
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('with default props', () => {
- beforeEach(() => {
- factory(release);
- });
-
- it("renders the block with an id equal to the release's tag name", () => {
- expect(wrapper.attributes().id).toBe('v0.3');
- });
-
- it('renders release name', () => {
- expect(wrapper.text()).toContain(release.name);
- });
-
- it('renders commit sha', () => {
- expect(wrapper.text()).toContain(release.commit.short_id);
- });
-
- it('renders tag name', () => {
- expect(wrapper.text()).toContain(release.tag_name);
- });
-
- it('renders release date', () => {
- expect(wrapper.text()).toContain(timeagoMixin.methods.timeFormated(release.released_at));
- });
-
- it('renders number of assets provided', () => {
- expect(wrapper.find('.js-assets-count').text()).toContain(release.assets.count);
- });
-
- it('renders dropdown with the sources', () => {
- expect(wrapper.findAll('.js-sources-dropdown li').length).toEqual(
- release.assets.sources.length,
- );
-
- expect(wrapper.find('.js-sources-dropdown li a').attributes().href).toEqual(
- first(release.assets.sources).url,
- );
-
- expect(wrapper.find('.js-sources-dropdown li a').text()).toContain(
- first(release.assets.sources).format,
- );
- });
-
- it('renders list with the links provided', () => {
- expect(wrapper.findAll('.js-assets-list li').length).toEqual(release.assets.links.length);
-
- expect(wrapper.find('.js-assets-list li a').attributes().href).toEqual(
- first(release.assets.links).url,
- );
-
- expect(wrapper.find('.js-assets-list li a').text()).toContain(
- first(release.assets.links).name,
- );
- });
-
- it('renders author avatar', () => {
- expect(wrapper.find('.user-avatar-link').exists()).toBe(true);
- });
-
- describe('external label', () => {
- it('renders external label when link is external', () => {
- expect(wrapper.find('.js-assets-list li a').text()).toContain('external source');
- });
-
- it('does not render external label when link is not external', () => {
- expect(wrapper.find('.js-assets-list li:nth-child(2) a').text()).not.toContain(
- 'external source',
- );
- });
- });
-
- it('renders the milestone list if at least one milestone is associated to the release', () => {
- factory(release);
-
- expect(milestoneListExists()).toBe(true);
- });
- });
-
- it('does not render the milestone list if no milestones are associated to the release', () => {
- const releaseClone = JSON.parse(JSON.stringify(release));
- delete releaseClone.milestone;
-
- factory(releaseClone);
-
- expect(milestoneListExists()).toBe(false);
- });
-
- it('renders upcoming release badge', () => {
- const releaseClone = JSON.parse(JSON.stringify(release));
- releaseClone.upcoming_release = true;
-
- factory(releaseClone);
-
- expect(wrapper.text()).toContain('Upcoming Release');
- });
-});
diff --git a/spec/frontend/releases/detail/components/app_spec.js b/spec/frontend/releases/detail/components/app_spec.js
new file mode 100644
index 00000000000..f8eb33a69a8
--- /dev/null
+++ b/spec/frontend/releases/detail/components/app_spec.js
@@ -0,0 +1,70 @@
+import Vuex from 'vuex';
+import { mount } from '@vue/test-utils';
+import ReleaseDetailApp from '~/releases/detail/components/app';
+import { release } from '../../mock_data';
+import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
+
+describe('Release detail component', () => {
+ let wrapper;
+ let releaseClone;
+ let actions;
+
+ beforeEach(() => {
+ gon.api_version = 'v4';
+
+ releaseClone = JSON.parse(JSON.stringify(convertObjectPropsToCamelCase(release)));
+
+ const state = {
+ release: releaseClone,
+ markdownDocsPath: 'path/to/markdown/docs',
+ };
+
+ actions = {
+ fetchRelease: jest.fn(),
+ updateRelease: jest.fn(),
+ navigateToReleasesPage: jest.fn(),
+ };
+
+ const store = new Vuex.Store({ actions, state });
+
+ wrapper = mount(ReleaseDetailApp, { store });
+
+ return wrapper.vm.$nextTick();
+ });
+
+ it('calls fetchRelease when the component is created', () => {
+ expect(actions.fetchRelease).toHaveBeenCalledTimes(1);
+ });
+
+ it('renders the description text at the top of the page', () => {
+ expect(wrapper.find('.js-subtitle-text').text()).toBe(
+ 'Releases are based on Git tags. We recommend naming tags that fit within semantic versioning, for example v1.0, v2.0-pre.',
+ );
+ });
+
+ it('renders the correct tag name in the "Tag name" field', () => {
+ expect(wrapper.find('#git-ref').element.value).toBe(releaseClone.tagName);
+ });
+
+ it('renders the correct release title in the "Release title" field', () => {
+ expect(wrapper.find('#release-title').element.value).toBe(releaseClone.name);
+ });
+
+ it('renders the release notes in the "Release notes" textarea', () => {
+ expect(wrapper.find('#release-notes').element.value).toBe(releaseClone.description);
+ });
+
+ it('renders the "Save changes" button as type="submit"', () => {
+ expect(wrapper.find('.js-submit-button').attributes('type')).toBe('submit');
+ });
+
+ it('calls updateRelease when the form is submitted', () => {
+ wrapper.find('form').trigger('submit');
+ expect(actions.updateRelease).toHaveBeenCalledTimes(1);
+ });
+
+ it('calls navigateToReleasesPage when the "Cancel" button is clicked', () => {
+ wrapper.find('.js-cancel-button').vm.$emit('click');
+ expect(actions.navigateToReleasesPage).toHaveBeenCalledTimes(1);
+ });
+});
diff --git a/spec/frontend/releases/detail/store/actions_spec.js b/spec/frontend/releases/detail/store/actions_spec.js
new file mode 100644
index 00000000000..f1c7f3c1048
--- /dev/null
+++ b/spec/frontend/releases/detail/store/actions_spec.js
@@ -0,0 +1,217 @@
+import axios from 'axios';
+import MockAdapter from 'axios-mock-adapter';
+import * as actions from '~/releases/detail/store/actions';
+import testAction from 'helpers/vuex_action_helper';
+import * as types from '~/releases/detail/store/mutation_types';
+import { release } from '../../mock_data';
+import state from '~/releases/detail/store/state';
+import createFlash from '~/flash';
+import { redirectTo } from '~/lib/utils/url_utility';
+import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
+
+jest.mock('~/flash', () => jest.fn());
+
+jest.mock('~/lib/utils/url_utility', () => ({
+ redirectTo: jest.fn(),
+ joinPaths: jest.requireActual('~/lib/utils/url_utility').joinPaths,
+}));
+
+describe('Release detail actions', () => {
+ let stateClone;
+ let releaseClone;
+ let mock;
+ let error;
+
+ beforeEach(() => {
+ stateClone = state();
+ releaseClone = JSON.parse(JSON.stringify(release));
+ mock = new MockAdapter(axios);
+ gon.api_version = 'v4';
+ error = { message: 'An error occurred' };
+ createFlash.mockClear();
+ });
+
+ afterEach(() => {
+ mock.restore();
+ });
+
+ describe('setInitialState', () => {
+ it(`commits ${types.SET_INITIAL_STATE} with the provided object`, () => {
+ const initialState = {};
+
+ return testAction(actions.setInitialState, initialState, stateClone, [
+ { type: types.SET_INITIAL_STATE, payload: initialState },
+ ]);
+ });
+ });
+
+ describe('requestRelease', () => {
+ it(`commits ${types.REQUEST_RELEASE}`, () =>
+ testAction(actions.requestRelease, undefined, stateClone, [{ type: types.REQUEST_RELEASE }]));
+ });
+
+ describe('receiveReleaseSuccess', () => {
+ it(`commits ${types.RECEIVE_RELEASE_SUCCESS}`, () =>
+ testAction(actions.receiveReleaseSuccess, releaseClone, stateClone, [
+ { type: types.RECEIVE_RELEASE_SUCCESS, payload: releaseClone },
+ ]));
+ });
+
+ describe('receiveReleaseError', () => {
+ it(`commits ${types.RECEIVE_RELEASE_ERROR}`, () =>
+ testAction(actions.receiveReleaseError, error, stateClone, [
+ { type: types.RECEIVE_RELEASE_ERROR, payload: error },
+ ]));
+
+ it('shows a flash with an error message', () => {
+ actions.receiveReleaseError({ commit: jest.fn() }, error);
+
+ expect(createFlash).toHaveBeenCalledTimes(1);
+ expect(createFlash).toHaveBeenCalledWith(
+ 'Something went wrong while getting the release details',
+ );
+ });
+ });
+
+ describe('fetchRelease', () => {
+ let getReleaseUrl;
+
+ beforeEach(() => {
+ stateClone.projectId = '18';
+ stateClone.tagName = 'v1.3';
+ getReleaseUrl = `/api/v4/projects/${stateClone.projectId}/releases/${stateClone.tagName}`;
+ });
+
+ it(`dispatches requestRelease and receiveReleaseSuccess with the camel-case'd release object`, () => {
+ mock.onGet(getReleaseUrl).replyOnce(200, releaseClone);
+
+ return testAction(
+ actions.fetchRelease,
+ undefined,
+ stateClone,
+ [],
+ [
+ { type: 'requestRelease' },
+ {
+ type: 'receiveReleaseSuccess',
+ payload: convertObjectPropsToCamelCase(releaseClone, { deep: true }),
+ },
+ ],
+ );
+ });
+
+ it(`dispatches requestRelease and receiveReleaseError with an error object`, () => {
+ mock.onGet(getReleaseUrl).replyOnce(500);
+
+ return testAction(
+ actions.fetchRelease,
+ undefined,
+ stateClone,
+ [],
+ [{ type: 'requestRelease' }, { type: 'receiveReleaseError', payload: expect.anything() }],
+ );
+ });
+ });
+
+ describe('updateReleaseTitle', () => {
+ it(`commits ${types.UPDATE_RELEASE_TITLE} with the updated release title`, () => {
+ const newTitle = 'The new release title';
+ return testAction(actions.updateReleaseTitle, newTitle, stateClone, [
+ { type: types.UPDATE_RELEASE_TITLE, payload: newTitle },
+ ]);
+ });
+ });
+
+ describe('updateReleaseNotes', () => {
+ it(`commits ${types.UPDATE_RELEASE_NOTES} with the updated release notes`, () => {
+ const newReleaseNotes = 'The new release notes';
+ return testAction(actions.updateReleaseNotes, newReleaseNotes, stateClone, [
+ { type: types.UPDATE_RELEASE_NOTES, payload: newReleaseNotes },
+ ]);
+ });
+ });
+
+ describe('requestUpdateRelease', () => {
+ it(`commits ${types.REQUEST_UPDATE_RELEASE}`, () =>
+ testAction(actions.requestUpdateRelease, undefined, stateClone, [
+ { type: types.REQUEST_UPDATE_RELEASE },
+ ]));
+ });
+
+ describe('receiveUpdateReleaseSuccess', () => {
+ it(`commits ${types.RECEIVE_UPDATE_RELEASE_SUCCESS}`, () =>
+ testAction(
+ actions.receiveUpdateReleaseSuccess,
+ undefined,
+ stateClone,
+ [{ type: types.RECEIVE_UPDATE_RELEASE_SUCCESS }],
+ [{ type: 'navigateToReleasesPage' }],
+ ));
+ });
+
+ describe('receiveUpdateReleaseError', () => {
+ it(`commits ${types.RECEIVE_UPDATE_RELEASE_ERROR}`, () =>
+ testAction(actions.receiveUpdateReleaseError, error, stateClone, [
+ { type: types.RECEIVE_UPDATE_RELEASE_ERROR, payload: error },
+ ]));
+
+ it('shows a flash with an error message', () => {
+ actions.receiveUpdateReleaseError({ commit: jest.fn() }, error);
+
+ expect(createFlash).toHaveBeenCalledTimes(1);
+ expect(createFlash).toHaveBeenCalledWith(
+ 'Something went wrong while saving the release details',
+ );
+ });
+ });
+
+ describe('updateRelease', () => {
+ let getReleaseUrl;
+
+ beforeEach(() => {
+ stateClone.release = releaseClone;
+ stateClone.projectId = '18';
+ stateClone.tagName = 'v1.3';
+ getReleaseUrl = `/api/v4/projects/${stateClone.projectId}/releases/${stateClone.tagName}`;
+ });
+
+ it(`dispatches requestUpdateRelease and receiveUpdateReleaseSuccess`, () => {
+ mock.onPut(getReleaseUrl).replyOnce(200);
+
+ return testAction(
+ actions.updateRelease,
+ undefined,
+ stateClone,
+ [],
+ [{ type: 'requestUpdateRelease' }, { type: 'receiveUpdateReleaseSuccess' }],
+ );
+ });
+
+ it(`dispatches requestUpdateRelease and receiveUpdateReleaseError with an error object`, () => {
+ mock.onPut(getReleaseUrl).replyOnce(500);
+
+ return testAction(
+ actions.updateRelease,
+ undefined,
+ stateClone,
+ [],
+ [
+ { type: 'requestUpdateRelease' },
+ { type: 'receiveUpdateReleaseError', payload: expect.anything() },
+ ],
+ );
+ });
+ });
+
+ describe('navigateToReleasesPage', () => {
+ it(`calls redirectTo() with the URL to the releases page`, () => {
+ const releasesPagePath = 'path/to/releases/page';
+ stateClone.releasesPagePath = releasesPagePath;
+
+ actions.navigateToReleasesPage({ state: stateClone });
+
+ expect(redirectTo).toHaveBeenCalledTimes(1);
+ expect(redirectTo).toHaveBeenCalledWith(releasesPagePath);
+ });
+ });
+});
diff --git a/spec/frontend/releases/detail/store/mutations_spec.js b/spec/frontend/releases/detail/store/mutations_spec.js
new file mode 100644
index 00000000000..106a40c812e
--- /dev/null
+++ b/spec/frontend/releases/detail/store/mutations_spec.js
@@ -0,0 +1,119 @@
+/* eslint-disable jest/valid-describe */
+/*
+ * ESLint disable directive ↑ can be removed once
+ * https://github.com/jest-community/eslint-plugin-jest/issues/203
+ * is resolved
+ */
+
+import state from '~/releases/detail/store/state';
+import mutations from '~/releases/detail/store/mutations';
+import * as types from '~/releases/detail/store/mutation_types';
+import { release } from '../../mock_data';
+
+describe('Release detail mutations', () => {
+ let stateClone;
+ let releaseClone;
+
+ beforeEach(() => {
+ stateClone = state();
+ releaseClone = JSON.parse(JSON.stringify(release));
+ });
+
+ describe(types.SET_INITIAL_STATE, () => {
+ it('populates the state with initial values', () => {
+ const initialState = {
+ projectId: '18',
+ tagName: 'v1.3',
+ releasesPagePath: 'path/to/releases/page',
+ markdownDocsPath: 'path/to/markdown/docs',
+ markdownPreviewPath: 'path/to/markdown/preview',
+ };
+
+ mutations[types.SET_INITIAL_STATE](stateClone, initialState);
+
+ expect(stateClone).toEqual(expect.objectContaining(initialState));
+ });
+ });
+
+ describe(types.REQUEST_RELEASE, () => {
+ it('set state.isFetchingRelease to true', () => {
+ mutations[types.REQUEST_RELEASE](stateClone);
+
+ expect(stateClone.isFetchingRelease).toEqual(true);
+ });
+ });
+
+ describe(types.RECEIVE_RELEASE_SUCCESS, () => {
+ it('handles a successful response from the server', () => {
+ mutations[types.RECEIVE_RELEASE_SUCCESS](stateClone, releaseClone);
+
+ expect(stateClone.fetchError).toEqual(undefined);
+
+ expect(stateClone.isFetchingRelease).toEqual(false);
+
+ expect(stateClone.release).toEqual(releaseClone);
+ });
+ });
+
+ describe(types.RECEIVE_RELEASE_ERROR, () => {
+ it('handles an unsuccessful response from the server', () => {
+ const error = { message: 'An error occurred!' };
+ mutations[types.RECEIVE_RELEASE_ERROR](stateClone, error);
+
+ expect(stateClone.isFetchingRelease).toEqual(false);
+
+ expect(stateClone.release).toBeUndefined();
+
+ expect(stateClone.fetchError).toEqual(error);
+ });
+ });
+
+ describe(types.UPDATE_RELEASE_TITLE, () => {
+ it("updates the release's title", () => {
+ stateClone.release = releaseClone;
+ const newTitle = 'The new release title';
+ mutations[types.UPDATE_RELEASE_TITLE](stateClone, newTitle);
+
+ expect(stateClone.release.name).toEqual(newTitle);
+ });
+ });
+
+ describe(types.UPDATE_RELEASE_NOTES, () => {
+ it("updates the release's notes", () => {
+ stateClone.release = releaseClone;
+ const newNotes = 'The new release notes';
+ mutations[types.UPDATE_RELEASE_NOTES](stateClone, newNotes);
+
+ expect(stateClone.release.description).toEqual(newNotes);
+ });
+ });
+
+ describe(types.REQUEST_UPDATE_RELEASE, () => {
+ it('set state.isUpdatingRelease to true', () => {
+ mutations[types.REQUEST_UPDATE_RELEASE](stateClone);
+
+ expect(stateClone.isUpdatingRelease).toEqual(true);
+ });
+ });
+
+ describe(types.RECEIVE_UPDATE_RELEASE_SUCCESS, () => {
+ it('handles a successful response from the server', () => {
+ mutations[types.RECEIVE_UPDATE_RELEASE_SUCCESS](stateClone, releaseClone);
+
+ expect(stateClone.updateError).toEqual(undefined);
+
+ expect(stateClone.isUpdatingRelease).toEqual(false);
+ });
+ });
+
+ describe(types.RECEIVE_UPDATE_RELEASE_ERROR, () => {
+ it('handles an unsuccessful response from the server', () => {
+ const error = { message: 'An error occurred!' };
+ mutations[types.RECEIVE_UPDATE_RELEASE_ERROR](stateClone, error);
+
+ expect(stateClone.isUpdatingRelease).toEqual(false);
+
+ expect(stateClone.updateError).toEqual(error);
+ });
+ });
+});
diff --git a/spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap b/spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap
new file mode 100644
index 00000000000..8f2c0427c83
--- /dev/null
+++ b/spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap
@@ -0,0 +1,332 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Release block with default props matches the snapshot 1`] = `
+<div
+ class="card release-block"
+ id="v0.3"
+>
+ <div
+ class="card-body"
+ >
+ <div
+ class="d-flex align-items-start"
+ >
+ <h2
+ class="card-title mt-0 mr-auto"
+ >
+
+ New release
+
+ <!---->
+ </h2>
+
+ <a
+ class="btn btn-default js-edit-button ml-2"
+ data-original-title="Edit this release"
+ href="http://0.0.0.0:3001/root/release-test/-/releases/v0.3/edit"
+ title=""
+ >
+ <svg
+ aria-hidden="true"
+ class="s16 ic-pencil"
+ >
+ <use
+ xlink:href="#pencil"
+ />
+ </svg>
+ </a>
+ </div>
+
+ <div
+ class="card-subtitle d-flex flex-wrap text-secondary"
+ >
+ <div
+ class="append-right-8"
+ >
+ <svg
+ aria-hidden="true"
+ class="align-middle s16 ic-commit"
+ >
+ <use
+ xlink:href="#commit"
+ />
+ </svg>
+
+ <span
+ data-original-title="Initial commit"
+ title=""
+ >
+ c22b0728
+ </span>
+ </div>
+
+ <div
+ class="append-right-8"
+ >
+ <svg
+ aria-hidden="true"
+ class="align-middle s16 ic-tag"
+ >
+ <use
+ xlink:href="#tag"
+ />
+ </svg>
+
+ <span
+ data-original-title="Tag"
+ title=""
+ >
+ v0.3
+ </span>
+ </div>
+
+ <div
+ class="js-milestone-list-label"
+ >
+ <svg
+ aria-hidden="true"
+ class="align-middle s16 ic-flag"
+ >
+ <use
+ xlink:href="#flag"
+ />
+ </svg>
+
+ <span
+ class="js-label-text"
+ >
+ Milestones
+ </span>
+ </div>
+
+ <a
+ class="append-right-4 prepend-left-4 js-milestone-link"
+ data-original-title="The 13.6 milestone!"
+ href="http://0.0.0.0:3001/root/release-test/-/milestones/2"
+ title=""
+ >
+
+ 13.6
+
+ </a>
+
+ •
+
+ <a
+ class="append-right-4 prepend-left-4 js-milestone-link"
+ data-original-title="The 13.5 milestone!"
+ href="http://0.0.0.0:3001/root/release-test/-/milestones/1"
+ title=""
+ >
+
+ 13.5
+
+ </a>
+
+ <!---->
+
+ <div
+ class="append-right-4"
+ >
+
+ •
+
+ <span
+ data-original-title="Aug 26, 2019 5:54pm GMT+0000"
+ title=""
+ >
+
+ released 1 month ago
+
+ </span>
+ </div>
+
+ <div
+ class="d-flex"
+ >
+
+ by
+
+ <a
+ class="user-avatar-link prepend-left-4"
+ href=""
+ >
+ <span>
+ <img
+ alt="root's avatar"
+ class="avatar s20 "
+ data-original-title=""
+ data-src="https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon"
+ height="20"
+ src="https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon"
+ title=""
+ width="20"
+ />
+
+ <div
+ aria-hidden="true"
+ class="js-user-avatar-image-toolip d-none"
+ style="display: none;"
+ >
+ <div>
+ root
+ </div>
+ </div>
+ </span>
+ <!---->
+ </a>
+ </div>
+ </div>
+
+ <div
+ class="card-text prepend-top-default"
+ >
+ <b>
+
+ Assets
+
+ <span
+ class="js-assets-count badge badge-pill"
+ >
+ 5
+ </span>
+ </b>
+
+ <ul
+ class="pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list"
+ >
+ <li
+ class="append-bottom-8"
+ >
+ <a
+ class=""
+ data-original-title="Download asset"
+ href="https://google.com"
+ title=""
+ >
+ <svg
+ aria-hidden="true"
+ class="align-middle append-right-4 align-text-bottom s16 ic-package"
+ >
+ <use
+ xlink:href="#package"
+ />
+ </svg>
+
+ my link
+
+ <span>
+ (external source)
+ </span>
+ </a>
+ </li>
+ <li
+ class="append-bottom-8"
+ >
+ <a
+ class=""
+ data-original-title="Download asset"
+ href="https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/v11.6.0-rc4/download?job=rspec-mysql+41%2F50"
+ title=""
+ >
+ <svg
+ aria-hidden="true"
+ class="align-middle append-right-4 align-text-bottom s16 ic-package"
+ >
+ <use
+ xlink:href="#package"
+ />
+ </svg>
+
+ my second link
+
+ <!---->
+ </a>
+ </li>
+ </ul>
+
+ <div
+ class="dropdown"
+ >
+ <button
+ aria-expanded="false"
+ aria-haspopup="true"
+ class="btn btn-link"
+ data-toggle="dropdown"
+ type="button"
+ >
+ <svg
+ aria-hidden="true"
+ class="align-top append-right-4 s16 ic-doc-code"
+ >
+ <use
+ xlink:href="#doc-code"
+ />
+ </svg>
+
+ Source code
+
+ <svg
+ aria-hidden="true"
+ class="s16 ic-arrow-down"
+ >
+ <use
+ xlink:href="#arrow-down"
+ />
+ </svg>
+ </button>
+
+ <div
+ class="js-sources-dropdown dropdown-menu"
+ >
+ <li>
+ <a
+ class=""
+ href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.zip"
+ >
+ Download zip
+ </a>
+ </li>
+ <li>
+ <a
+ class=""
+ href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.tar.gz"
+ >
+ Download tar.gz
+ </a>
+ </li>
+ <li>
+ <a
+ class=""
+ href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.tar.bz2"
+ >
+ Download tar.bz2
+ </a>
+ </li>
+ <li>
+ <a
+ class=""
+ href="http://0.0.0.0:3001/root/release-test/-/archive/v0.3/release-test-v0.3.tar"
+ >
+ Download tar
+ </a>
+ </li>
+ </div>
+ </div>
+ </div>
+
+ <div
+ class="card-text prepend-top-default"
+ >
+ <div>
+ <p
+ data-sourcepos="1:1-1:21"
+ dir="auto"
+ >
+ A super nice release!
+ </p>
+ </div>
+ </div>
+ </div>
+</div>
+`;
diff --git a/spec/frontend/releases/list/components/release_block_spec.js b/spec/frontend/releases/list/components/release_block_spec.js
new file mode 100644
index 00000000000..0b908d7d6bc
--- /dev/null
+++ b/spec/frontend/releases/list/components/release_block_spec.js
@@ -0,0 +1,266 @@
+import { mount } from '@vue/test-utils';
+import ReleaseBlock from '~/releases/list/components/release_block.vue';
+import timeagoMixin from '~/vue_shared/mixins/timeago';
+import { first } from 'underscore';
+import { release } from '../../mock_data';
+import Icon from '~/vue_shared/components/icon.vue';
+import { scrollToElement } from '~/lib/utils/common_utils';
+
+let mockLocationHash;
+jest.mock('~/lib/utils/url_utility', () => ({
+ __esModule: true,
+ getLocationHash: jest.fn().mockImplementation(() => mockLocationHash),
+}));
+
+jest.mock('~/lib/utils/common_utils', () => ({
+ __esModule: true,
+ scrollToElement: jest.fn(),
+}));
+
+describe('Release block', () => {
+ let wrapper;
+ let releaseClone;
+
+ const factory = (releaseProp, releaseEditPageFeatureFlag = true) => {
+ wrapper = mount(ReleaseBlock, {
+ propsData: {
+ release: releaseProp,
+ },
+ provide: {
+ glFeatures: {
+ releaseEditPage: releaseEditPageFeatureFlag,
+ },
+ },
+ sync: false,
+ });
+
+ return wrapper.vm.$nextTick();
+ };
+
+ const milestoneListLabel = () => wrapper.find('.js-milestone-list-label');
+ const editButton = () => wrapper.find('.js-edit-button');
+
+ beforeEach(() => {
+ releaseClone = JSON.parse(JSON.stringify(release));
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ describe('with default props', () => {
+ beforeEach(() => factory(release));
+
+ it('matches the snapshot', () => {
+ expect(wrapper.element).toMatchSnapshot();
+ });
+
+ it("renders the block with an id equal to the release's tag name", () => {
+ expect(wrapper.attributes().id).toBe('v0.3');
+ });
+
+ it('renders an edit button that links to the "Edit release" page', () => {
+ expect(editButton().exists()).toBe(true);
+ expect(editButton().attributes('href')).toBe(release._links.edit);
+ });
+
+ it('renders release name', () => {
+ expect(wrapper.text()).toContain(release.name);
+ });
+
+ it('renders release date', () => {
+ expect(wrapper.text()).toContain(timeagoMixin.methods.timeFormated(release.released_at));
+ });
+
+ it('renders number of assets provided', () => {
+ expect(wrapper.find('.js-assets-count').text()).toContain(release.assets.count);
+ });
+
+ it('renders dropdown with the sources', () => {
+ expect(wrapper.findAll('.js-sources-dropdown li').length).toEqual(
+ release.assets.sources.length,
+ );
+
+ expect(wrapper.find('.js-sources-dropdown li a').attributes().href).toEqual(
+ first(release.assets.sources).url,
+ );
+
+ expect(wrapper.find('.js-sources-dropdown li a').text()).toContain(
+ first(release.assets.sources).format,
+ );
+ });
+
+ it('renders list with the links provided', () => {
+ expect(wrapper.findAll('.js-assets-list li').length).toEqual(release.assets.links.length);
+
+ expect(wrapper.find('.js-assets-list li a').attributes().href).toEqual(
+ first(release.assets.links).url,
+ );
+
+ expect(wrapper.find('.js-assets-list li a').text()).toContain(
+ first(release.assets.links).name,
+ );
+ });
+
+ it('renders author avatar', () => {
+ expect(wrapper.find('.user-avatar-link').exists()).toBe(true);
+ });
+
+ describe('external label', () => {
+ it('renders external label when link is external', () => {
+ expect(wrapper.find('.js-assets-list li a').text()).toContain('external source');
+ });
+
+ it('does not render external label when link is not external', () => {
+ expect(wrapper.find('.js-assets-list li:nth-child(2) a').text()).not.toContain(
+ 'external source',
+ );
+ });
+ });
+
+ it('renders the milestone icon', () => {
+ expect(
+ milestoneListLabel()
+ .find(Icon)
+ .exists(),
+ ).toBe(true);
+ });
+
+ it('renders the label as "Milestones" if more than one milestone is passed in', () => {
+ expect(
+ milestoneListLabel()
+ .find('.js-label-text')
+ .text(),
+ ).toEqual('Milestones');
+ });
+
+ it('renders a link to the milestone with a tooltip', () => {
+ const milestone = first(release.milestones);
+ const milestoneLink = wrapper.find('.js-milestone-link');
+
+ expect(milestoneLink.exists()).toBe(true);
+
+ expect(milestoneLink.text()).toBe(milestone.title);
+
+ expect(milestoneLink.attributes('href')).toBe(milestone.web_url);
+
+ expect(milestoneLink.attributes('data-original-title')).toBe(milestone.description);
+ });
+ });
+
+ it('renders commit sha', () => {
+ releaseClone.commit_path = '/commit/example';
+
+ return factory(releaseClone).then(() => {
+ expect(wrapper.text()).toContain(release.commit.short_id);
+
+ expect(wrapper.find('a[href="/commit/example"]').exists()).toBe(true);
+ });
+ });
+
+ it('renders tag name', () => {
+ releaseClone.tag_path = '/tag/example';
+
+ return factory(releaseClone).then(() => {
+ expect(wrapper.text()).toContain(release.tag_name);
+
+ expect(wrapper.find('a[href="/tag/example"]').exists()).toBe(true);
+ });
+ });
+
+ it("does not render an edit button if release._links.edit isn't a string", () => {
+ delete releaseClone._links;
+
+ return factory(releaseClone).then(() => {
+ expect(editButton().exists()).toBe(false);
+ });
+ });
+
+ it('does not render an edit button if the releaseEditPage feature flag is disabled', () =>
+ factory(releaseClone, false).then(() => {
+ expect(editButton().exists()).toBe(false);
+ }));
+
+ it('does not render the milestone list if no milestones are associated to the release', () => {
+ delete releaseClone.milestones;
+
+ return factory(releaseClone).then(() => {
+ expect(milestoneListLabel().exists()).toBe(false);
+ });
+ });
+
+ it('renders the label as "Milestone" if only a single milestone is passed in', () => {
+ releaseClone.milestones = releaseClone.milestones.slice(0, 1);
+
+ return factory(releaseClone).then(() => {
+ expect(
+ milestoneListLabel()
+ .find('.js-label-text')
+ .text(),
+ ).toEqual('Milestone');
+ });
+ });
+
+ it('renders upcoming release badge', () => {
+ releaseClone.upcoming_release = true;
+
+ return factory(releaseClone).then(() => {
+ expect(wrapper.text()).toContain('Upcoming Release');
+ });
+ });
+
+ it('slugifies the tag_name before setting it as the elements ID', () => {
+ releaseClone.tag_name = 'a dangerous tag name <script>alert("hello")</script>';
+
+ return factory(releaseClone).then(() => {
+ expect(wrapper.attributes().id).toBe('a-dangerous-tag-name-script-alert-hello-script-');
+ });
+ });
+
+ describe('anchor scrolling', () => {
+ beforeEach(() => {
+ scrollToElement.mockClear();
+ });
+
+ const hasTargetBlueBackground = () => wrapper.classes('bg-line-target-blue');
+
+ it('does not attempt to scroll the page if no anchor tag is included in the URL', () => {
+ mockLocationHash = '';
+ return factory(release).then(() => {
+ expect(scrollToElement).not.toHaveBeenCalled();
+ });
+ });
+
+ it("does not attempt to scroll the page if the anchor tag doesn't match the release's tag name", () => {
+ mockLocationHash = 'v0.4';
+ return factory(release).then(() => {
+ expect(scrollToElement).not.toHaveBeenCalled();
+ });
+ });
+
+ it("attempts to scroll itself into view if the anchor tag matches the release's tag name", () => {
+ mockLocationHash = release.tag_name;
+ return factory(release).then(() => {
+ expect(scrollToElement).toHaveBeenCalledTimes(1);
+
+ expect(scrollToElement).toHaveBeenCalledWith(wrapper.element);
+ });
+ });
+
+ it('renders with a light blue background if it is the target of the anchor', () => {
+ mockLocationHash = release.tag_name;
+
+ return factory(release).then(() => {
+ expect(hasTargetBlueBackground()).toBe(true);
+ });
+ });
+
+ it('does not render with a light blue background if it is not the target of the anchor', () => {
+ mockLocationHash = '';
+
+ return factory(release).then(() => {
+ expect(hasTargetBlueBackground()).toBe(false);
+ });
+ });
+ });
+});
diff --git a/spec/frontend/releases/mock_data.js b/spec/frontend/releases/mock_data.js
index a0885813c7e..b2ebf1174d4 100644
--- a/spec/frontend/releases/mock_data.js
+++ b/spec/frontend/releases/mock_data.js
@@ -57,7 +57,7 @@ export const release = {
committed_date: '2019-08-26T17:47:07.000Z',
},
upcoming_release: false,
- milestone: milestones[0],
+ milestones,
assets: {
count: 5,
sources: [
@@ -89,9 +89,12 @@ export const release = {
id: 2,
name: 'my second link',
url:
- 'https://gitlab.com/gitlab-org/gitlab-ce/-/jobs/artifacts/v11.6.0-rc4/download?job=rspec-mysql+41%2F50',
+ 'https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/v11.6.0-rc4/download?job=rspec-mysql+41%2F50',
external: false,
},
],
},
+ _links: {
+ edit: 'http://0.0.0.0:3001/root/release-test/-/releases/v0.3/edit',
+ },
};
diff --git a/spec/frontend/reports/store/utils_spec.js b/spec/frontend/reports/store/utils_spec.js
index 1679d120db2..f0141b9e162 100644
--- a/spec/frontend/reports/store/utils_spec.js
+++ b/spec/frontend/reports/store/utils_spec.js
@@ -30,7 +30,9 @@ describe('Reports store utils', () => {
const data = { failed: 3, total: 10 };
const result = utils.summaryTextBuilder(name, data);
- expect(result).toBe('Test summary contained 3 failed test results out of 10 total tests');
+ expect(result).toBe(
+ 'Test summary contained 3 failed/error test results out of 10 total tests',
+ );
});
it('should render text for multiple fixed results', () => {
@@ -47,7 +49,7 @@ describe('Reports store utils', () => {
const result = utils.summaryTextBuilder(name, data);
expect(result).toBe(
- 'Test summary contained 3 failed test results and 4 fixed test results out of 10 total tests',
+ 'Test summary contained 3 failed/error test results and 4 fixed test results out of 10 total tests',
);
});
@@ -57,7 +59,7 @@ describe('Reports store utils', () => {
const result = utils.summaryTextBuilder(name, data);
expect(result).toBe(
- 'Test summary contained 1 failed test result and 1 fixed test result out of 10 total tests',
+ 'Test summary contained 1 failed/error test result and 1 fixed test result out of 10 total tests',
);
});
});
@@ -84,7 +86,7 @@ describe('Reports store utils', () => {
const data = { failed: 3, total: 10 };
const result = utils.reportTextBuilder(name, data);
- expect(result).toBe('Rspec found 3 failed test results out of 10 total tests');
+ expect(result).toBe('Rspec found 3 failed/error test results out of 10 total tests');
});
it('should render text for multiple fixed results', () => {
@@ -101,7 +103,7 @@ describe('Reports store utils', () => {
const result = utils.reportTextBuilder(name, data);
expect(result).toBe(
- 'Rspec found 3 failed test results and 4 fixed test results out of 10 total tests',
+ 'Rspec found 3 failed/error test results and 4 fixed test results out of 10 total tests',
);
});
@@ -111,7 +113,7 @@ describe('Reports store utils', () => {
const result = utils.reportTextBuilder(name, data);
expect(result).toBe(
- 'Rspec found 1 failed test result and 1 fixed test result out of 10 total tests',
+ 'Rspec found 1 failed/error test result and 1 fixed test result out of 10 total tests',
);
});
});
diff --git a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
index cd8372a8800..08173f4f0c4 100644
--- a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
+++ b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
@@ -60,6 +60,111 @@ exports[`Repository last commit component renders commit widget 1`] = `
<div
class="commit-actions flex-row"
>
+ <!---->
+
+ <gllink-stub
+ class="js-commit-pipeline"
+ data-original-title="Commit: failed"
+ href="https://test.com/pipeline"
+ title=""
+ >
+ <ciicon-stub
+ aria-label="Commit: failed"
+ cssclasses=""
+ size="24"
+ status="[object Object]"
+ />
+ </gllink-stub>
+
+ <div
+ class="commit-sha-group d-flex"
+ >
+ <div
+ class="label label-monospace monospace"
+ >
+
+ 12345678
+
+ </div>
+
+ <clipboardbutton-stub
+ cssclass="btn-default"
+ text="123456789"
+ title="Copy commit SHA"
+ tooltipplacement="bottom"
+ />
+ </div>
+ </div>
+ </div>
+</div>
+`;
+
+exports[`Repository last commit component renders the signature HTML as returned by the backend 1`] = `
+<div
+ class="info-well d-none d-sm-flex project-last-commit commit p-3"
+>
+ <useravatarlink-stub
+ class="avatar-cell"
+ imgalt=""
+ imgcssclasses=""
+ imgsize="40"
+ imgsrc="https://test.com"
+ linkhref="https://test.com/test"
+ tooltipplacement="top"
+ tooltiptext=""
+ username=""
+ />
+
+ <div
+ class="commit-detail flex-list"
+ >
+ <div
+ class="commit-content qa-commit-content"
+ >
+ <gllink-stub
+ class="commit-row-message item-title"
+ href="https://test.com/commit/123"
+ >
+
+ Commit title
+
+ </gllink-stub>
+
+ <!---->
+
+ <div
+ class="committer"
+ >
+ <gllink-stub
+ class="commit-author-link js-user-link"
+ href="https://test.com/test"
+ >
+
+ Test
+
+ </gllink-stub>
+
+ authored
+
+ <timeagotooltip-stub
+ cssclass=""
+ time="2019-01-01"
+ tooltipplacement="bottom"
+ />
+ </div>
+
+ <!---->
+ </div>
+
+ <div
+ class="commit-actions flex-row"
+ >
+ <div>
+ <button>
+ Verified
+ </button>
+ </div>
+
<gllink-stub
class="js-commit-pipeline"
data-original-title="Commit: failed"
@@ -88,7 +193,7 @@ exports[`Repository last commit component renders commit widget 1`] = `
<clipboardbutton-stub
cssclass="btn-default"
text="123456789"
- title="Copy commit SHA to clipboard"
+ title="Copy commit SHA"
tooltipplacement="bottom"
/>
</div>
diff --git a/spec/frontend/repository/components/last_commit_spec.js b/spec/frontend/repository/components/last_commit_spec.js
index 14479f3c3a4..01b56d453e6 100644
--- a/spec/frontend/repository/components/last_commit_spec.js
+++ b/spec/frontend/repository/components/last_commit_spec.js
@@ -107,4 +107,10 @@ describe('Repository last commit component', () => {
expect(vm.find('.commit-row-description').isVisible()).toBe(true);
expect(vm.find('.text-expander').classes('open')).toBe(true);
});
+
+ it('renders the signature HTML as returned by the backend', () => {
+ factory(createCommitData({ signatureHtml: '<button>Verified</button>' }));
+
+ expect(vm.element).toMatchSnapshot();
+ });
});
diff --git a/spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap b/spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap
new file mode 100644
index 00000000000..1f93336e755
--- /dev/null
+++ b/spec/frontend/sidebar/__snapshots__/confidential_issue_sidebar_spec.js.snap
@@ -0,0 +1,229 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Confidential Issue Sidebar Block renders for isConfidential = false and isEditable = false 1`] = `
+<div
+ class="block issuable-sidebar-item confidentiality"
+>
+ <div
+ class="sidebar-collapsed-icon"
+ data-boundary="viewport"
+ data-container="body"
+ data-original-title="Not confidential"
+ data-placement="left"
+ title=""
+ >
+ <icon-stub
+ aria-hidden="true"
+ name="eye"
+ size="16"
+ />
+ </div>
+
+ <div
+ class="title hide-collapsed"
+ >
+
+ Confidentiality
+
+ <!---->
+ </div>
+
+ <div
+ class="value sidebar-item-value hide-collapsed"
+ >
+ <!---->
+
+ <div
+ class="no-value sidebar-item-value"
+ >
+ <icon-stub
+ aria-hidden="true"
+ class="sidebar-item-icon inline"
+ name="eye"
+ size="16"
+ />
+
+ Not confidential
+
+ </div>
+ </div>
+
+ <!---->
+</div>
+`;
+
+exports[`Confidential Issue Sidebar Block renders for isConfidential = false and isEditable = true 1`] = `
+<div
+ class="block issuable-sidebar-item confidentiality"
+>
+ <div
+ class="sidebar-collapsed-icon"
+ data-boundary="viewport"
+ data-container="body"
+ data-original-title="Not confidential"
+ data-placement="left"
+ title=""
+ >
+ <icon-stub
+ aria-hidden="true"
+ name="eye"
+ size="16"
+ />
+ </div>
+
+ <div
+ class="title hide-collapsed"
+ >
+
+ Confidentiality
+
+ <a
+ class="float-right confidential-edit"
+ data-track-event="click_edit_button"
+ data-track-label="right_sidebar"
+ data-track-property="confidentiality"
+ href="#"
+ >
+
+ Edit
+
+ </a>
+ </div>
+
+ <div
+ class="value sidebar-item-value hide-collapsed"
+ >
+ <!---->
+
+ <div
+ class="no-value sidebar-item-value"
+ >
+ <icon-stub
+ aria-hidden="true"
+ class="sidebar-item-icon inline"
+ name="eye"
+ size="16"
+ />
+
+ Not confidential
+
+ </div>
+ </div>
+
+ <!---->
+</div>
+`;
+
+exports[`Confidential Issue Sidebar Block renders for isConfidential = true and isEditable = false 1`] = `
+<div
+ class="block issuable-sidebar-item confidentiality"
+>
+ <div
+ class="sidebar-collapsed-icon"
+ data-boundary="viewport"
+ data-container="body"
+ data-original-title="Confidential"
+ data-placement="left"
+ title=""
+ >
+ <icon-stub
+ aria-hidden="true"
+ name="eye-slash"
+ size="16"
+ />
+ </div>
+
+ <div
+ class="title hide-collapsed"
+ >
+
+ Confidentiality
+
+ <!---->
+ </div>
+
+ <div
+ class="value sidebar-item-value hide-collapsed"
+ >
+ <!---->
+
+ <div
+ class="value sidebar-item-value hide-collapsed"
+ >
+ <icon-stub
+ aria-hidden="true"
+ class="sidebar-item-icon inline is-active"
+ name="eye-slash"
+ size="16"
+ />
+
+ This issue is confidential
+
+ </div>
+ </div>
+
+ <!---->
+</div>
+`;
+
+exports[`Confidential Issue Sidebar Block renders for isConfidential = true and isEditable = true 1`] = `
+<div
+ class="block issuable-sidebar-item confidentiality"
+>
+ <div
+ class="sidebar-collapsed-icon"
+ data-boundary="viewport"
+ data-container="body"
+ data-original-title="Confidential"
+ data-placement="left"
+ title=""
+ >
+ <icon-stub
+ aria-hidden="true"
+ name="eye-slash"
+ size="16"
+ />
+ </div>
+
+ <div
+ class="title hide-collapsed"
+ >
+
+ Confidentiality
+
+ <a
+ class="float-right confidential-edit"
+ data-track-event="click_edit_button"
+ data-track-label="right_sidebar"
+ data-track-property="confidentiality"
+ href="#"
+ >
+
+ Edit
+
+ </a>
+ </div>
+
+ <div
+ class="value sidebar-item-value hide-collapsed"
+ >
+ <!---->
+
+ <div
+ class="value sidebar-item-value hide-collapsed"
+ >
+ <icon-stub
+ aria-hidden="true"
+ class="sidebar-item-icon inline is-active"
+ name="eye-slash"
+ size="16"
+ />
+
+ This issue is confidential
+
+ </div>
+ </div>
+
+ <!---->
+</div>
+`;
diff --git a/spec/frontend/sidebar/__snapshots__/todo_spec.js.snap b/spec/frontend/sidebar/__snapshots__/todo_spec.js.snap
new file mode 100644
index 00000000000..abcdf600a67
--- /dev/null
+++ b/spec/frontend/sidebar/__snapshots__/todo_spec.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`SidebarTodo template renders component container element with proper data attributes 1`] = `
+<button
+ aria-label="Mark as done"
+ class="btn btn-default btn-todo issuable-header-btn float-right"
+ data-boundary="viewport"
+ data-container="body"
+ data-issuable-id="1"
+ data-issuable-type="epic"
+ data-original-title=""
+ data-placement="left"
+ title=""
+ type="button"
+>
+ <icon-stub
+ class="todo-undone"
+ name="todo-done"
+ size="16"
+ style="display: none;"
+ />
+
+ <span
+ class="issuable-todo-inner"
+ >
+ Mark as done
+ </span>
+
+ <glloadingicon-stub
+ color="orange"
+ inline="true"
+ label="Loading"
+ size="sm"
+ style="display: none;"
+ />
+</button>
+`;
diff --git a/spec/frontend/sidebar/confidential_issue_sidebar_spec.js b/spec/frontend/sidebar/confidential_issue_sidebar_spec.js
new file mode 100644
index 00000000000..1ec5a94ba68
--- /dev/null
+++ b/spec/frontend/sidebar/confidential_issue_sidebar_spec.js
@@ -0,0 +1,167 @@
+import { shallowMount } from '@vue/test-utils';
+import ConfidentialIssueSidebar from '~/sidebar/components/confidential/confidential_issue_sidebar.vue';
+import { mockTracking, triggerEvent } from 'helpers/tracking_helper';
+import EditForm from '~/sidebar/components/confidential/edit_form.vue';
+import SidebarService from '~/sidebar/services/sidebar_service';
+import createFlash from '~/flash';
+import RecaptchaModal from '~/vue_shared/components/recaptcha_modal';
+
+jest.mock('~/flash');
+jest.mock('~/sidebar/services/sidebar_service');
+
+describe('Confidential Issue Sidebar Block', () => {
+ let wrapper;
+
+ const findRecaptchaModal = () => wrapper.find(RecaptchaModal);
+
+ const triggerUpdateConfidentialAttribute = () => {
+ wrapper.setData({ edit: true });
+ return (
+ // wait for edit form to become visible
+ wrapper.vm
+ .$nextTick()
+ .then(() => {
+ const editForm = wrapper.find(EditForm);
+ const { updateConfidentialAttribute } = editForm.props();
+ updateConfidentialAttribute();
+ })
+ // wait for reCAPTCHA modal to render
+ .then(() => wrapper.vm.$nextTick())
+ );
+ };
+
+ const createComponent = propsData => {
+ const service = new SidebarService();
+ wrapper = shallowMount(ConfidentialIssueSidebar, {
+ propsData: {
+ service,
+ ...propsData,
+ },
+ sync: false,
+ });
+ };
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+ jest.spyOn(window.location, 'reload').mockImplementation();
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it.each`
+ isConfidential | isEditable
+ ${false} | ${false}
+ ${false} | ${true}
+ ${true} | ${false}
+ ${true} | ${true}
+ `(
+ 'renders for isConfidential = $isConfidential and isEditable = $isEditable',
+ ({ isConfidential, isEditable }) => {
+ createComponent({
+ isConfidential,
+ isEditable,
+ });
+
+ expect(wrapper.element).toMatchSnapshot();
+ },
+ );
+
+ describe('if editable', () => {
+ beforeEach(() => {
+ createComponent({
+ isConfidential: true,
+ isEditable: true,
+ });
+ });
+
+ it('displays the edit form when editable', () => {
+ wrapper.setData({ edit: false });
+
+ wrapper.find({ ref: 'editLink' }).trigger('click');
+
+ return wrapper.vm.$nextTick().then(() => {
+ expect(wrapper.find(EditForm).exists()).toBe(true);
+ });
+ });
+
+ it('displays the edit form when opened from collapsed state', () => {
+ wrapper.setData({ edit: false });
+
+ wrapper.find({ ref: 'collapseIcon' }).trigger('click');
+
+ return wrapper.vm.$nextTick().then(() => {
+ expect(wrapper.find(EditForm).exists()).toBe(true);
+ });
+ });
+
+ it('tracks the event when "Edit" is clicked', () => {
+ const spy = mockTracking('_category_', wrapper.element, jest.spyOn);
+
+ const editLink = wrapper.find({ ref: 'editLink' });
+ triggerEvent(editLink.element);
+
+ expect(spy).toHaveBeenCalledWith('_category_', 'click_edit_button', {
+ label: 'right_sidebar',
+ property: 'confidentiality',
+ });
+ });
+
+ describe('for successful update', () => {
+ beforeEach(() => {
+ SidebarService.prototype.update.mockResolvedValue({ data: 'irrelevant' });
+ });
+
+ it('reloads the page', () =>
+ triggerUpdateConfidentialAttribute().then(() => {
+ expect(window.location.reload).toHaveBeenCalled();
+ }));
+
+ it('does not show an error message', () =>
+ triggerUpdateConfidentialAttribute().then(() => {
+ expect(createFlash).not.toHaveBeenCalled();
+ }));
+ });
+
+ describe('for update error', () => {
+ beforeEach(() => {
+ SidebarService.prototype.update.mockRejectedValue(new Error('updating failed!'));
+ });
+
+ it('does not reload the page', () =>
+ triggerUpdateConfidentialAttribute().then(() => {
+ expect(window.location.reload).not.toHaveBeenCalled();
+ }));
+
+ it('shows an error message', () =>
+ triggerUpdateConfidentialAttribute().then(() => {
+ expect(createFlash).toHaveBeenCalled();
+ }));
+ });
+
+ describe('for spam error', () => {
+ beforeEach(() => {
+ SidebarService.prototype.update.mockRejectedValue({ name: 'SpamError' });
+ });
+
+ it('does not reload the page', () =>
+ triggerUpdateConfidentialAttribute().then(() => {
+ expect(window.location.reload).not.toHaveBeenCalled();
+ }));
+
+ it('does not show an error message', () =>
+ triggerUpdateConfidentialAttribute().then(() => {
+ expect(createFlash).not.toHaveBeenCalled();
+ }));
+
+ it('shows a reCAPTCHA modal', () => {
+ expect(findRecaptchaModal().exists()).toBe(false);
+
+ return triggerUpdateConfidentialAttribute().then(() => {
+ expect(findRecaptchaModal().exists()).toBe(true);
+ });
+ });
+ });
+ });
+});
diff --git a/spec/frontend/sidebar/todo_spec.js b/spec/frontend/sidebar/todo_spec.js
new file mode 100644
index 00000000000..c93bbadc264
--- /dev/null
+++ b/spec/frontend/sidebar/todo_spec.js
@@ -0,0 +1,93 @@
+import { shallowMount } from '@vue/test-utils';
+import { GlLoadingIcon } from '@gitlab/ui';
+
+import SidebarTodos from '~/sidebar/components/todo_toggle/todo.vue';
+import Icon from '~/vue_shared/components/icon.vue';
+
+const defaultProps = {
+ issuableId: 1,
+ issuableType: 'epic',
+};
+
+describe('SidebarTodo', () => {
+ let wrapper;
+
+ const createComponent = (props = {}) => {
+ wrapper = shallowMount(SidebarTodos, {
+ sync: false,
+ propsData: {
+ ...defaultProps,
+ ...props,
+ },
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it.each`
+ state | classes
+ ${false} | ${['btn', 'btn-default', 'btn-todo', 'issuable-header-btn', 'float-right']}
+ ${true} | ${['btn-blank', 'btn-todo', 'sidebar-collapsed-icon', 'dont-change-state']}
+ `('returns todo button classes for when `collapsed` prop is `$state`', ({ state, classes }) => {
+ createComponent({ collapsed: state });
+ expect(wrapper.find('button').classes()).toStrictEqual(classes);
+ });
+
+ it.each`
+ isTodo | iconClass | label | icon
+ ${false} | ${''} | ${'Add a To Do'} | ${'todo-add'}
+ ${true} | ${'todo-undone'} | ${'Mark as done'} | ${'todo-done'}
+ `(
+ 'renders proper button when `isTodo` prop is `$isTodo`',
+ ({ isTodo, iconClass, label, icon }) => {
+ createComponent({ isTodo });
+
+ expect(
+ wrapper
+ .find(Icon)
+ .classes()
+ .join(' '),
+ ).toStrictEqual(iconClass);
+ expect(wrapper.find(Icon).props('name')).toStrictEqual(icon);
+ expect(wrapper.find('button').text()).toBe(label);
+ },
+ );
+
+ describe('template', () => {
+ it('emits `toggleTodo` event when clicked on button', () => {
+ createComponent();
+ wrapper.find('button').trigger('click');
+
+ expect(wrapper.emitted().toggleTodo).toBeTruthy();
+ });
+
+ it('renders component container element with proper data attributes', () => {
+ createComponent({
+ issuableId: 1,
+ issuableType: 'epic',
+ });
+
+ expect(wrapper.element).toMatchSnapshot();
+ });
+
+ it('renders button label element when `collapsed` prop is `false`', () => {
+ createComponent({ collapsed: false });
+
+ expect(wrapper.find('span.issuable-todo-inner').text()).toBe('Mark as done');
+ });
+
+ it('renders button icon when `collapsed` prop is `true`', () => {
+ createComponent({ collapsed: true });
+
+ expect(wrapper.find(Icon).props('name')).toBe('todo-done');
+ });
+
+ it('renders loading icon when `isActionActive` prop is true', () => {
+ createComponent({ isActionActive: true });
+
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
+ });
+ });
+});
diff --git a/spec/frontend/test_setup.js b/spec/frontend/test_setup.js
index 6e1f1038dcd..0b9cfa44409 100644
--- a/spec/frontend/test_setup.js
+++ b/spec/frontend/test_setup.js
@@ -8,6 +8,8 @@ import { getJSONFixture, loadHTMLFixture, setHTMLFixture } from './helpers/fixtu
import { setupManualMocks } from './mocks/mocks_helper';
import customMatchers from './matchers';
+import './helpers/dom_shims';
+
// Expose jQuery so specs using jQuery plugins can be imported nicely.
// Here is an issue to explore better alternatives:
// https://gitlab.com/gitlab-org/gitlab/issues/12448
diff --git a/spec/frontend/tracking_spec.js b/spec/frontend/tracking_spec.js
index dfc068ab6ea..964f8b8787e 100644
--- a/spec/frontend/tracking_spec.js
+++ b/spec/frontend/tracking_spec.js
@@ -1,10 +1,9 @@
-import $ from 'jquery';
import { setHTMLFixture } from './helpers/fixtures';
-
import Tracking, { initUserTracking } from '~/tracking';
describe('Tracking', () => {
let snowplowSpy;
+ let bindDocumentSpy;
beforeEach(() => {
window.snowplow = window.snowplow || (() => {});
@@ -17,6 +16,10 @@ describe('Tracking', () => {
});
describe('initUserTracking', () => {
+ beforeEach(() => {
+ bindDocumentSpy = jest.spyOn(Tracking, 'bindDocument').mockImplementation(() => null);
+ });
+
it('calls through to get a new tracker with the expected options', () => {
initUserTracking();
expect(snowplowSpy).toHaveBeenCalledWith('newTracker', '_namespace_', 'app.gitfoo.com', {
@@ -50,6 +53,11 @@ describe('Tracking', () => {
expect(snowplowSpy).toHaveBeenCalledWith('enableFormTracking');
expect(snowplowSpy).toHaveBeenCalledWith('enableLinkClickTracking');
});
+
+ it('binds the document event handling', () => {
+ initUserTracking();
+ expect(bindDocumentSpy).toHaveBeenCalled();
+ });
});
describe('.event', () => {
@@ -62,11 +70,15 @@ describe('Tracking', () => {
it('tracks to snowplow (our current tracking system)', () => {
Tracking.event('_category_', '_eventName_', { label: '_label_' });
- expect(snowplowSpy).toHaveBeenCalledWith('trackStructEvent', '_category_', '_eventName_', {
- label: '_label_',
- property: '',
- value: '',
- });
+ expect(snowplowSpy).toHaveBeenCalledWith(
+ 'trackStructEvent',
+ '_category_',
+ '_eventName_',
+ '_label_',
+ undefined,
+ undefined,
+ undefined,
+ );
});
it('skips tracking if snowplow is unavailable', () => {
@@ -99,83 +111,70 @@ describe('Tracking', () => {
});
describe('tracking interface events', () => {
- let eventSpy = null;
- let subject = null;
+ let eventSpy;
+
+ const trigger = (selector, eventName = 'click') => {
+ const event = new Event(eventName, { bubbles: true });
+ document.querySelector(selector).dispatchEvent(event);
+ };
beforeEach(() => {
eventSpy = jest.spyOn(Tracking, 'event');
- subject = new Tracking('_category_');
+ Tracking.bindDocument('_category_'); // only happens once
setHTMLFixture(`
<input data-track-event="click_input1" data-track-label="_label_" value="_value_"/>
<input data-track-event="click_input2" data-track-value="_value_override_" value="_value_"/>
<input type="checkbox" data-track-event="toggle_checkbox" value="_value_" checked/>
<input class="dropdown" data-track-event="toggle_dropdown"/>
- <div class="js-projects-list-holder"></div>
+ <div data-track-event="nested_event"><span class="nested"></span></div>
`);
});
it('binds to clicks on elements matching [data-track-event]', () => {
- subject.bind(document);
- $('[data-track-event="click_input1"]').click();
+ trigger('[data-track-event="click_input1"]');
expect(eventSpy).toHaveBeenCalledWith('_category_', 'click_input1', {
label: '_label_',
value: '_value_',
- property: '',
});
});
it('allows value override with the data-track-value attribute', () => {
- subject.bind(document);
- $('[data-track-event="click_input2"]').click();
+ trigger('[data-track-event="click_input2"]');
expect(eventSpy).toHaveBeenCalledWith('_category_', 'click_input2', {
- label: '',
value: '_value_override_',
- property: '',
});
});
it('handles checkbox values correctly', () => {
- subject.bind(document);
- const $checkbox = $('[data-track-event="toggle_checkbox"]');
-
- $checkbox.click(); // unchecking
+ trigger('[data-track-event="toggle_checkbox"]'); // checking
expect(eventSpy).toHaveBeenCalledWith('_category_', 'toggle_checkbox', {
- label: '',
- property: '',
value: false,
});
- $checkbox.click(); // checking
+ trigger('[data-track-event="toggle_checkbox"]'); // unchecking
expect(eventSpy).toHaveBeenCalledWith('_category_', 'toggle_checkbox', {
- label: '',
- property: '',
value: '_value_',
});
});
it('handles bootstrap dropdowns', () => {
- new Tracking('_category_').bind(document);
- const $dropdown = $('[data-track-event="toggle_dropdown"]');
+ trigger('[data-track-event="toggle_dropdown"]', 'show.bs.dropdown'); // showing
- $dropdown.trigger('show.bs.dropdown'); // showing
+ expect(eventSpy).toHaveBeenCalledWith('_category_', 'toggle_dropdown_show', {});
- expect(eventSpy).toHaveBeenCalledWith('_category_', 'toggle_dropdown_show', {
- label: '',
- property: '',
- value: '',
- });
+ trigger('[data-track-event="toggle_dropdown"]', 'hide.bs.dropdown'); // hiding
+
+ expect(eventSpy).toHaveBeenCalledWith('_category_', 'toggle_dropdown_hide', {});
+ });
- $dropdown.trigger('hide.bs.dropdown'); // hiding
+ it('handles nested elements inside an element with tracking', () => {
+ trigger('span.nested', 'click');
- expect(eventSpy).toHaveBeenCalledWith('_category_', 'toggle_dropdown_hide', {
- label: '',
- property: '',
- value: '',
- });
+ expect(eventSpy).toHaveBeenCalledWith('_category_', 'nested_event', {});
});
});
});
diff --git a/spec/frontend/vue_mr_widget/components/artifacts_list_app_spec.js b/spec/frontend/vue_mr_widget/components/artifacts_list_app_spec.js
new file mode 100644
index 00000000000..7d593a77bf3
--- /dev/null
+++ b/spec/frontend/vue_mr_widget/components/artifacts_list_app_spec.js
@@ -0,0 +1,121 @@
+import { mount, createLocalVue } from '@vue/test-utils';
+import Vuex from 'vuex';
+import MockAdapter from 'axios-mock-adapter';
+import axios from '~/lib/utils/axios_utils';
+import { GlLoadingIcon } from '@gitlab/ui';
+import { TEST_HOST } from 'helpers/test_constants';
+import ArtifactsListApp from '~/vue_merge_request_widget/components/artifacts_list_app.vue';
+import createStore from '~/vue_merge_request_widget/stores/artifacts_list';
+import { artifactsList } from './mock_data';
+
+describe('Merge Requests Artifacts list app', () => {
+ let wrapper;
+ let mock;
+ const store = createStore();
+ const localVue = createLocalVue();
+ localVue.use(Vuex);
+
+ const actionSpies = {
+ fetchArtifacts: jest.fn(),
+ };
+
+ beforeEach(() => {
+ mock = new MockAdapter(axios);
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ mock.restore();
+ });
+
+ const createComponent = () => {
+ wrapper = mount(localVue.extend(ArtifactsListApp), {
+ propsData: {
+ endpoint: TEST_HOST,
+ },
+ store,
+ methods: {
+ ...actionSpies,
+ },
+ localVue,
+ sync: false,
+ });
+ };
+
+ const findButtons = () => wrapper.findAll('button');
+ const findTitle = () => wrapper.find('.js-title');
+ const findErrorMessage = () => wrapper.find('.js-error-state');
+ const findTableRows = () => wrapper.findAll('tbody tr');
+
+ describe('while loading', () => {
+ beforeEach(() => {
+ createComponent();
+ store.dispatch('requestArtifacts');
+ return wrapper.vm.$nextTick();
+ });
+
+ it('renders a loading icon', () => {
+ const loadingIcon = wrapper.find(GlLoadingIcon);
+ expect(loadingIcon.exists()).toBe(true);
+ });
+
+ it('renders loading text', () => {
+ expect(findTitle().text()).toBe('Loading artifacts');
+ });
+
+ it('renders disabled buttons', () => {
+ const buttons = findButtons();
+ expect(buttons.at(0).attributes('disabled')).toBe('disabled');
+ expect(buttons.at(1).attributes('disabled')).toBe('disabled');
+ });
+ });
+
+ describe('with results', () => {
+ beforeEach(() => {
+ createComponent();
+ mock.onGet(wrapper.vm.$store.state.endpoint).reply(200, artifactsList, {});
+ store.dispatch('receiveArtifactsSuccess', {
+ data: artifactsList,
+ status: 200,
+ });
+ return wrapper.vm.$nextTick();
+ });
+
+ it('renders a title with the number of artifacts', () => {
+ expect(findTitle().text()).toBe('View 2 exposed artifacts');
+ });
+
+ it('renders both buttons enabled', () => {
+ const buttons = findButtons();
+ expect(buttons.at(0).attributes('disabled')).toBe(undefined);
+ expect(buttons.at(1).attributes('disabled')).toBe(undefined);
+ });
+
+ describe('on click', () => {
+ it('renders the list of artifacts', () => {
+ findTitle().trigger('click');
+ wrapper.vm.$nextTick(() => {
+ expect(findTableRows().length).toEqual(2);
+ });
+ });
+ });
+ });
+
+ describe('with error', () => {
+ beforeEach(() => {
+ createComponent();
+ mock.onGet(wrapper.vm.$store.state.endpoint).reply(500, {}, {});
+ store.dispatch('receiveArtifactsError');
+ return wrapper.vm.$nextTick();
+ });
+
+ it('renders the error state', () => {
+ expect(findErrorMessage().text()).toBe('An error occurred while fetching the artifacts');
+ });
+
+ it('does not render buttons', () => {
+ const buttons = findButtons();
+ expect(buttons.exists()).toBe(false);
+ });
+ });
+});
diff --git a/spec/frontend/vue_mr_widget/components/artifacts_list_spec.js b/spec/frontend/vue_mr_widget/components/artifacts_list_spec.js
new file mode 100644
index 00000000000..8c805faf574
--- /dev/null
+++ b/spec/frontend/vue_mr_widget/components/artifacts_list_spec.js
@@ -0,0 +1,61 @@
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+import { GlLink } from '@gitlab/ui';
+import ArtifactsList from '~/vue_merge_request_widget/components/artifacts_list.vue';
+import { artifactsList } from './mock_data';
+
+describe('Artifacts List', () => {
+ let wrapper;
+ const localVue = createLocalVue();
+
+ const data = {
+ artifacts: artifactsList,
+ };
+
+ const mountComponent = props => {
+ wrapper = shallowMount(localVue.extend(ArtifactsList), {
+ propsData: {
+ ...props,
+ },
+ sync: false,
+ localVue,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ beforeEach(() => {
+ mountComponent(data);
+ });
+
+ it('renders list of artifacts', () => {
+ expect(wrapper.findAll('tbody tr').length).toEqual(data.artifacts.length);
+ });
+
+ it('renders link for the artifact', () => {
+ expect(wrapper.find(GlLink).attributes('href')).toEqual(data.artifacts[0].url);
+ });
+
+ it('renders artifact name', () => {
+ expect(wrapper.find(GlLink).text()).toEqual(data.artifacts[0].text);
+ });
+
+ it('renders job url', () => {
+ expect(
+ wrapper
+ .findAll(GlLink)
+ .at(1)
+ .attributes('href'),
+ ).toEqual(data.artifacts[0].job_path);
+ });
+
+ it('renders job name', () => {
+ expect(
+ wrapper
+ .findAll(GlLink)
+ .at(1)
+ .text(),
+ ).toEqual(data.artifacts[0].job_name);
+ });
+});
diff --git a/spec/frontend/vue_mr_widget/components/mock_data.js b/spec/frontend/vue_mr_widget/components/mock_data.js
new file mode 100644
index 00000000000..39c7d75cda5
--- /dev/null
+++ b/spec/frontend/vue_mr_widget/components/mock_data.js
@@ -0,0 +1,15 @@
+// eslint-disable-next-line import/prefer-default-export
+export const artifactsList = [
+ {
+ text: 'result.txt',
+ url: 'bar',
+ job_name: 'generate-artifact',
+ job_path: 'bar',
+ },
+ {
+ text: 'foo.txt',
+ url: 'foo',
+ job_name: 'foo-artifact',
+ job_path: 'foo',
+ },
+];
diff --git a/spec/frontend/vue_mr_widget/components/mr_collapsible_extension_spec.js b/spec/frontend/vue_mr_widget/components/mr_collapsible_extension_spec.js
new file mode 100644
index 00000000000..ee107f297ef
--- /dev/null
+++ b/spec/frontend/vue_mr_widget/components/mr_collapsible_extension_spec.js
@@ -0,0 +1,99 @@
+import { mount } from '@vue/test-utils';
+import MrCollapsibleSection from '~/vue_merge_request_widget/components/mr_collapsible_extension.vue';
+import { GlLoadingIcon } from '@gitlab/ui';
+
+describe('Merge Request Collapsible Extension', () => {
+ let wrapper;
+ const data = {
+ title: 'View artifacts',
+ };
+
+ const mountComponent = props => {
+ wrapper = mount(MrCollapsibleSection, {
+ propsData: {
+ ...props,
+ },
+ slots: {
+ default: '<div class="js-slot">Foo</div>',
+ },
+ });
+ };
+
+ const findTitle = () => wrapper.find('.js-title');
+ const findErrorMessage = () => wrapper.find('.js-error-state');
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ describe('while collapsed', () => {
+ beforeEach(() => {
+ mountComponent(data);
+ });
+
+ it('renders provided title', () => {
+ expect(findTitle().text()).toBe(data.title);
+ });
+
+ it('renders angle-right icon', () => {
+ expect(wrapper.vm.arrowIconName).toBe('angle-right');
+ });
+
+ describe('onClick', () => {
+ beforeEach(() => {
+ wrapper.find('button').trigger('click');
+ });
+
+ it('rendes the provided slot', () => {
+ expect(wrapper.find('.js-slot').isVisible()).toBe(true);
+ });
+
+ it('renders `Collapse` as the title', () => {
+ expect(findTitle().text()).toBe('Collapse');
+ });
+
+ it('renders angle-down icon', () => {
+ expect(wrapper.vm.arrowIconName).toBe('angle-down');
+ });
+ });
+ });
+
+ describe('while loading', () => {
+ beforeEach(() => {
+ mountComponent(Object.assign({}, data, { isLoading: true }));
+ });
+
+ it('renders the buttons disabled', () => {
+ expect(
+ wrapper
+ .findAll('button')
+ .at(0)
+ .attributes('disabled'),
+ ).toEqual('disabled');
+ expect(
+ wrapper
+ .findAll('button')
+ .at(1)
+ .attributes('disabled'),
+ ).toEqual('disabled');
+ });
+
+ it('renders loading spinner', () => {
+ expect(wrapper.find(GlLoadingIcon).isVisible()).toBe(true);
+ });
+ });
+
+ describe('with error', () => {
+ beforeEach(() => {
+ mountComponent(Object.assign({}, data, { hasError: true }));
+ });
+
+ it('does not render the buttons', () => {
+ expect(wrapper.findAll('button').exists()).toBe(false);
+ });
+
+ it('renders title message provided', () => {
+ expect(findErrorMessage().text()).toBe(data.title);
+ });
+ });
+});
diff --git a/spec/frontend/vue_mr_widget/stores/artifacts_list/getters_spec.js b/spec/frontend/vue_mr_widget/stores/artifacts_list/getters_spec.js
new file mode 100644
index 00000000000..62ee6f5f189
--- /dev/null
+++ b/spec/frontend/vue_mr_widget/stores/artifacts_list/getters_spec.js
@@ -0,0 +1,32 @@
+import { title } from '~/vue_merge_request_widget/stores/artifacts_list/getters';
+import state from '~/vue_merge_request_widget/stores/artifacts_list/state';
+import { artifactsList } from '../../components/mock_data';
+
+describe('Artifacts Store Getters', () => {
+ let localState;
+
+ beforeEach(() => {
+ localState = state();
+ });
+
+ describe('title', () => {
+ describe('when is loading', () => {
+ it('returns loading message', () => {
+ localState.isLoading = true;
+ expect(title(localState)).toBe('Loading artifacts');
+ });
+ });
+ describe('when has error', () => {
+ it('returns error message', () => {
+ localState.hasError = true;
+ expect(title(localState)).toBe('An error occurred while fetching the artifacts');
+ });
+ });
+ describe('when it has artifacts', () => {
+ it('returns artifacts message', () => {
+ localState.artifacts = artifactsList;
+ expect(title(localState)).toBe('View 2 exposed artifacts');
+ });
+ });
+ });
+});
diff --git a/spec/frontend/vue_mr_widget/stores/artifacts_list/mutations_spec.js b/spec/frontend/vue_mr_widget/stores/artifacts_list/mutations_spec.js
new file mode 100644
index 00000000000..ea89fdb72e9
--- /dev/null
+++ b/spec/frontend/vue_mr_widget/stores/artifacts_list/mutations_spec.js
@@ -0,0 +1,78 @@
+import state from '~/vue_merge_request_widget/stores/artifacts_list/state';
+import mutations from '~/vue_merge_request_widget/stores/artifacts_list/mutations';
+import * as types from '~/vue_merge_request_widget/stores/artifacts_list/mutation_types';
+
+describe('Artifacts Store Mutations', () => {
+ let stateCopy;
+
+ beforeEach(() => {
+ stateCopy = state();
+ });
+
+ describe('SET_ENDPOINT', () => {
+ it('should set endpoint', () => {
+ mutations[types.SET_ENDPOINT](stateCopy, 'endpoint.json');
+
+ expect(stateCopy.endpoint).toEqual('endpoint.json');
+ });
+ });
+
+ describe('REQUEST_ARTIFACTS', () => {
+ it('should set isLoading to true', () => {
+ mutations[types.REQUEST_ARTIFACTS](stateCopy);
+
+ expect(stateCopy.isLoading).toEqual(true);
+ });
+ });
+
+ describe('REECEIVE_ARTIFACTS_SUCCESS', () => {
+ const artifacts = [
+ {
+ text: 'result.txt',
+ url: 'asda',
+ job_name: 'generate-artifact',
+ job_path: 'asda',
+ },
+ {
+ text: 'file.txt',
+ url: 'asda',
+ job_name: 'generate-artifact',
+ job_path: 'asda',
+ },
+ ];
+
+ beforeEach(() => {
+ mutations[types.RECEIVE_ARTIFACTS_SUCCESS](stateCopy, artifacts);
+ });
+
+ it('should set isLoading to false', () => {
+ expect(stateCopy.isLoading).toEqual(false);
+ });
+
+ it('should set hasError to false', () => {
+ expect(stateCopy.hasError).toEqual(false);
+ });
+
+ it('should set list of artifacts', () => {
+ expect(stateCopy.artifacts).toEqual(artifacts);
+ });
+ });
+
+ describe('RECEIVE_ARTIFACTS_ERROR', () => {
+ beforeEach(() => {
+ mutations[types.RECEIVE_ARTIFACTS_ERROR](stateCopy);
+ });
+
+ it('should set isLoading to false', () => {
+ expect(stateCopy.isLoading).toEqual(false);
+ });
+
+ it('should set hasError to true', () => {
+ expect(stateCopy.hasError).toEqual(true);
+ });
+
+ it('should set list of artifacts as empty array', () => {
+ expect(stateCopy.artifacts).toEqual([]);
+ });
+ });
+});
diff --git a/spec/frontend/vue_shared/components/changed_file_icon_spec.js b/spec/frontend/vue_shared/components/changed_file_icon_spec.js
index d0586f9e63f..d5861b18318 100644
--- a/spec/frontend/vue_shared/components/changed_file_icon_spec.js
+++ b/spec/frontend/vue_shared/components/changed_file_icon_spec.js
@@ -28,10 +28,7 @@ describe('Changed file icon', () => {
const findIcon = () => wrapper.find(Icon);
const findIconName = () => findIcon().props('name');
- const findIconClasses = () =>
- findIcon()
- .props('cssClasses')
- .split(' ');
+ const findIconClasses = () => findIcon().classes();
const findTooltipText = () => wrapper.attributes('data-original-title');
it('with isCentered true, adds center class', () => {
diff --git a/spec/frontend/vue_shared/components/file_icon_spec.js b/spec/frontend/vue_shared/components/file_icon_spec.js
index 328eec0a80a..f8f68a6a77a 100644
--- a/spec/frontend/vue_shared/components/file_icon_spec.js
+++ b/spec/frontend/vue_shared/components/file_icon_spec.js
@@ -49,7 +49,7 @@ describe('File Icon component', () => {
});
expect(findIcon().exists()).toBe(false);
- expect(wrapper.find(Icon).props('cssClasses')).toContain('folder-icon');
+ expect(wrapper.find(Icon).classes()).toContain('folder-icon');
});
it('should render a loading icon', () => {
diff --git a/spec/frontend/vue_shared/components/modal_copy_button_spec.js b/spec/frontend/vue_shared/components/modal_copy_button_spec.js
index f1943861523..d8c55bee8e0 100644
--- a/spec/frontend/vue_shared/components/modal_copy_button_spec.js
+++ b/spec/frontend/vue_shared/components/modal_copy_button_spec.js
@@ -14,7 +14,7 @@ describe('modal copy button', () => {
wrapper = shallowMount(Component, {
propsData: {
text: 'copy me',
- title: 'Copy this value into Clipboard!',
+ title: 'Copy this value',
},
});
});
diff --git a/spec/frontend/vue_shared/components/recaptcha_eventhub_spec.js b/spec/frontend/vue_shared/components/recaptcha_eventhub_spec.js
new file mode 100644
index 00000000000..d86d627886f
--- /dev/null
+++ b/spec/frontend/vue_shared/components/recaptcha_eventhub_spec.js
@@ -0,0 +1,21 @@
+import { eventHub, callbackName } from '~/vue_shared/components/recaptcha_eventhub';
+
+describe('reCAPTCHA event hub', () => {
+ // the following test case currently crashes
+ // see https://gitlab.com/gitlab-org/gitlab/issues/29192#note_217840035
+ // eslint-disable-next-line jest/no-disabled-tests
+ it.skip('throws an error for overriding the callback', () => {
+ expect(() => {
+ window[callbackName] = 'something';
+ }).toThrow();
+ });
+
+ it('triggering callback emits a submit event', () => {
+ const eventHandler = jest.fn();
+ eventHub.$once('submit', eventHandler);
+
+ window[callbackName]();
+
+ expect(eventHandler).toHaveBeenCalled();
+ });
+});
diff --git a/spec/frontend/vue_shared/components/recaptcha_modal_spec.js b/spec/frontend/vue_shared/components/recaptcha_modal_spec.js
new file mode 100644
index 00000000000..e509fe09d94
--- /dev/null
+++ b/spec/frontend/vue_shared/components/recaptcha_modal_spec.js
@@ -0,0 +1,36 @@
+import { shallowMount } from '@vue/test-utils';
+
+import { eventHub } from '~/vue_shared/components/recaptcha_eventhub';
+
+import RecaptchaModal from '~/vue_shared/components/recaptcha_modal';
+
+describe('RecaptchaModal', () => {
+ const recaptchaFormId = 'recaptcha-form';
+ const recaptchaHtml = `<form id="${recaptchaFormId}"></form>`;
+
+ let wrapper;
+
+ const findRecaptchaForm = () => wrapper.find(`#${recaptchaFormId}`).element;
+
+ beforeEach(() => {
+ wrapper = shallowMount(RecaptchaModal, {
+ sync: false,
+ propsData: {
+ html: recaptchaHtml,
+ },
+ });
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('submits the form if event hub emits submit event', () => {
+ const form = findRecaptchaForm();
+ jest.spyOn(form, 'submit').mockImplementation();
+
+ eventHub.$emit('submit');
+
+ expect(form.submit).toHaveBeenCalled();
+ });
+});
diff --git a/spec/frontend/vue_shared/directives/track_event_spec.js b/spec/frontend/vue_shared/directives/track_event_spec.js
new file mode 100644
index 00000000000..d63f6ae05b4
--- /dev/null
+++ b/spec/frontend/vue_shared/directives/track_event_spec.js
@@ -0,0 +1,49 @@
+import Vue from 'vue';
+import { createLocalVue, shallowMount } from '@vue/test-utils';
+import Tracking from '~/tracking';
+import TrackEvent from '~/vue_shared/directives/track_event';
+
+jest.mock('~/tracking');
+
+const Component = Vue.component('dummy-element', {
+ directives: {
+ TrackEvent,
+ },
+ data() {
+ return {
+ trackingOptions: null,
+ };
+ },
+ template: '<button id="trackable" v-track-event="trackingOptions"></button>',
+});
+
+const localVue = createLocalVue();
+let wrapper;
+let button;
+
+describe('Error Tracking directive', () => {
+ beforeEach(() => {
+ wrapper = shallowMount(localVue.extend(Component), {
+ localVue,
+ });
+ button = wrapper.find('#trackable');
+ });
+
+ it('should not track the event if required arguments are not provided', () => {
+ button.trigger('click');
+ expect(Tracking.event).not.toHaveBeenCalled();
+ });
+
+ it('should track event on click if tracking info provided', () => {
+ const trackingOptions = {
+ category: 'Tracking',
+ action: 'click_trackable_btn',
+ label: 'Trackable Info',
+ };
+
+ wrapper.setData({ trackingOptions });
+ const { category, action, label, property, value } = trackingOptions;
+ button.trigger('click');
+ expect(Tracking.event).toHaveBeenCalledWith(category, action, { label, property, value });
+ });
+});
diff --git a/spec/frontend/vue_shared/gl_feature_flags_plugin_spec.js b/spec/frontend/vue_shared/gl_feature_flags_plugin_spec.js
new file mode 100644
index 00000000000..6ecc330b5af
--- /dev/null
+++ b/spec/frontend/vue_shared/gl_feature_flags_plugin_spec.js
@@ -0,0 +1,42 @@
+import { createLocalVue, shallowMount } from '@vue/test-utils';
+import GlFeatureFlags from '~/vue_shared/gl_feature_flags_plugin';
+import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
+
+const localVue = createLocalVue();
+
+describe('GitLab Feature Flags Plugin', () => {
+ beforeEach(() => {
+ window.gon = {
+ features: {
+ aFeature: true,
+ bFeature: false,
+ },
+ };
+
+ localVue.use(GlFeatureFlags);
+ });
+
+ it('should provide glFeatures to components', () => {
+ const component = {
+ template: `<span></span>`,
+ inject: ['glFeatures'],
+ };
+ const wrapper = shallowMount(component, { localVue });
+ expect(wrapper.vm.glFeatures).toEqual({
+ aFeature: true,
+ bFeature: false,
+ });
+ });
+
+ it('should integrate with the glFeatureMixin', () => {
+ const component = {
+ template: `<span></span>`,
+ mixins: [glFeatureFlagsMixin()],
+ };
+ const wrapper = shallowMount(component, { localVue });
+ expect(wrapper.vm.glFeatures).toEqual({
+ aFeature: true,
+ bFeature: false,
+ });
+ });
+});
diff --git a/spec/frontend/vue_shared/mixins/gl_feature_flags_mixin_spec.js b/spec/frontend/vue_shared/mixins/gl_feature_flags_mixin_spec.js
new file mode 100644
index 00000000000..a3e3270a4e8
--- /dev/null
+++ b/spec/frontend/vue_shared/mixins/gl_feature_flags_mixin_spec.js
@@ -0,0 +1,36 @@
+import { createLocalVue, shallowMount } from '@vue/test-utils';
+import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
+
+const localVue = createLocalVue();
+
+describe('GitLab Feature Flags Mixin', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ const gon = {
+ features: {
+ aFeature: true,
+ bFeature: false,
+ },
+ };
+
+ const component = {
+ template: `<span></span>`,
+ mixins: [glFeatureFlagsMixin()],
+ };
+
+ wrapper = shallowMount(component, {
+ localVue,
+ provide: {
+ glFeatures: { ...(gon.features || {}) },
+ },
+ });
+ });
+
+ it('should provide glFeatures to components', () => {
+ expect(wrapper.vm.glFeatures).toEqual({
+ aFeature: true,
+ bFeature: false,
+ });
+ });
+});
diff --git a/spec/frontend/vue_shared/plugins/global_toast_spec.js b/spec/frontend/vue_shared/plugins/global_toast_spec.js
index 551abe3cb41..89f43a5e556 100644
--- a/spec/frontend/vue_shared/plugins/global_toast_spec.js
+++ b/spec/frontend/vue_shared/plugins/global_toast_spec.js
@@ -1,24 +1,24 @@
-import toast from '~/vue_shared/plugins/global_toast';
import Vue from 'vue';
+import toast from '~/vue_shared/plugins/global_toast';
describe('Global toast', () => {
let spyFunc;
beforeEach(() => {
- spyFunc = jest.spyOn(Vue.toasted, 'show').mockImplementation(() => {});
+ spyFunc = jest.spyOn(Vue.prototype.$toast, 'show').mockImplementation(() => {});
});
afterEach(() => {
spyFunc.mockRestore();
});
- it('should pass all args to Vue toasted', () => {
+ it("should call GitLab UI's toast method", () => {
const arg1 = 'TestMessage';
const arg2 = { className: 'foo' };
toast(arg1, arg2);
- expect(Vue.toasted.show).toHaveBeenCalledTimes(1);
- expect(Vue.toasted.show).toHaveBeenCalledWith(arg1, arg2);
+ expect(Vue.prototype.$toast.show).toHaveBeenCalledTimes(1);
+ expect(Vue.prototype.$toast.show).toHaveBeenCalledWith(arg1, arg2);
});
});
diff --git a/spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb b/spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb
new file mode 100644
index 00000000000..897b8f4e9ef
--- /dev/null
+++ b/spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Mutations::ResolvesGroup do
+ let(:mutation_class) do
+ Class.new(Mutations::BaseMutation) do
+ include Mutations::ResolvesGroup
+ end
+ end
+
+ let(:context) { double }
+ subject(:mutation) { mutation_class.new(object: nil, context: context) }
+
+ it 'uses the GroupsResolver to resolve groups by path' do
+ group = create(:group)
+
+ expect(Resolvers::GroupResolver).to receive(:new).with(object: nil, context: context).and_call_original
+ expect(mutation.resolve_group(full_path: group.full_path).sync).to eq(group)
+ end
+end
diff --git a/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb b/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb
index aa0f5c55902..09d1f66a2c7 100644
--- a/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb
+++ b/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Mutations::ResolvesProject do
diff --git a/spec/graphql/mutations/merge_requests/set_wip_spec.rb b/spec/graphql/mutations/merge_requests/set_wip_spec.rb
index e600abf3941..c4accab9e46 100644
--- a/spec/graphql/mutations/merge_requests/set_wip_spec.rb
+++ b/spec/graphql/mutations/merge_requests/set_wip_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Mutations::MergeRequests::SetWip do
diff --git a/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb b/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb
index 3140af27af5..fa031af4013 100644
--- a/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb
+++ b/spec/graphql/resolvers/concerns/resolves_pipelines_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ResolvesPipelines do
diff --git a/spec/graphql/resolvers/issues_resolver_spec.rb b/spec/graphql/resolvers/issues_resolver_spec.rb
index d122c081069..2232c9b7d7b 100644
--- a/spec/graphql/resolvers/issues_resolver_spec.rb
+++ b/spec/graphql/resolvers/issues_resolver_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Resolvers::IssuesResolver do
diff --git a/spec/graphql/resolvers/last_commit_resolver_spec.rb b/spec/graphql/resolvers/last_commit_resolver_spec.rb
new file mode 100644
index 00000000000..15b09b77a10
--- /dev/null
+++ b/spec/graphql/resolvers/last_commit_resolver_spec.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Resolvers::LastCommitResolver do
+ include GraphqlHelpers
+
+ let(:repository) { create(:project, :repository).repository }
+ let(:tree) { repository.tree(ref, path) }
+
+ let(:commit) { resolve(described_class, obj: tree) }
+
+ describe '#resolve' do
+ context 'last commit is a merge commit' do
+ let(:ref) { 'master' }
+ let(:path) { '/' }
+
+ it 'resolves to the merge commit' do
+ expect(commit).to eq(repository.commits(ref, limit: 1).last)
+ end
+ end
+
+ context 'last commit for a different branch and path' do
+ let(:ref) { 'fix' }
+ let(:path) { 'files' }
+
+ it 'resolves commit' do
+ expect(commit).to eq(repository.commits(ref, path: path, limit: 1).last)
+ end
+ end
+
+ context 'last commit does not exist' do
+ let(:ref) { 'master' }
+ let(:path) { 'does-not-exist' }
+
+ it 'returns nil' do
+ expect(commit).to be_nil
+ end
+ end
+ end
+end
diff --git a/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb b/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb
index 09b17bf6fc9..b8bdfc36ba7 100644
--- a/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb
+++ b/spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Resolvers::MergeRequestPipelinesResolver do
diff --git a/spec/graphql/resolvers/merge_requests_resolver_spec.rb b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
index 97b8e5ed41c..fe167a6ae3e 100644
--- a/spec/graphql/resolvers/merge_requests_resolver_spec.rb
+++ b/spec/graphql/resolvers/merge_requests_resolver_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Resolvers::MergeRequestsResolver do
diff --git a/spec/graphql/resolvers/metadata_resolver_spec.rb b/spec/graphql/resolvers/metadata_resolver_spec.rb
index e662ed127a5..afff9eabb97 100644
--- a/spec/graphql/resolvers/metadata_resolver_spec.rb
+++ b/spec/graphql/resolvers/metadata_resolver_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Resolvers::MetadataResolver do
diff --git a/spec/graphql/resolvers/project_pipelines_resolver_spec.rb b/spec/graphql/resolvers/project_pipelines_resolver_spec.rb
index 6862ae8a5ed..f312a118c96 100644
--- a/spec/graphql/resolvers/project_pipelines_resolver_spec.rb
+++ b/spec/graphql/resolvers/project_pipelines_resolver_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Resolvers::ProjectPipelinesResolver do
diff --git a/spec/graphql/resolvers/project_resolver_spec.rb b/spec/graphql/resolvers/project_resolver_spec.rb
index d0fc2957909..860f8b4abb8 100644
--- a/spec/graphql/resolvers/project_resolver_spec.rb
+++ b/spec/graphql/resolvers/project_resolver_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Resolvers::ProjectResolver do
diff --git a/spec/graphql/resolvers/todo_resolver_spec.rb b/spec/graphql/resolvers/todo_resolver_spec.rb
new file mode 100644
index 00000000000..fef761d7243
--- /dev/null
+++ b/spec/graphql/resolvers/todo_resolver_spec.rb
@@ -0,0 +1,113 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Resolvers::TodoResolver do
+ include GraphqlHelpers
+
+ describe '#resolve' do
+ let_it_be(:current_user) { create(:user) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:author1) { create(:user) }
+ let_it_be(:author2) { create(:user) }
+
+ let_it_be(:todo1) { create(:todo, user: user, target_type: 'MergeRequest', state: :pending, action: Todo::MENTIONED, author: author1) }
+ let_it_be(:todo2) { create(:todo, user: user, state: :done, action: Todo::ASSIGNED, author: author2) }
+ let_it_be(:todo3) { create(:todo, user: user, state: :pending, action: Todo::ASSIGNED, author: author1) }
+
+ it 'calls TodosFinder' do
+ expect_next_instance_of(TodosFinder) do |finder|
+ expect(finder).to receive(:execute)
+ end
+
+ resolve_todos
+ end
+
+ context 'when using no filter' do
+ it 'returns expected todos' do
+ todos = resolve(described_class, obj: user, args: {}, ctx: { current_user: user })
+
+ expect(todos).to contain_exactly(todo1, todo3)
+ end
+ end
+
+ context 'when using filters' do
+ # TODO These can be removed as soon as we support filtering for multiple field contents for todos
+
+ it 'just uses the first state' do
+ todos = resolve(described_class, obj: user, args: { state: [:done, :pending] }, ctx: { current_user: user })
+
+ expect(todos).to contain_exactly(todo2)
+ end
+
+ it 'just uses the first action' do
+ todos = resolve(described_class, obj: user, args: { action: [Todo::MENTIONED, Todo::ASSIGNED] }, ctx: { current_user: user })
+
+ expect(todos).to contain_exactly(todo1)
+ end
+
+ it 'just uses the first author id' do
+ # We need a pending todo for now because of TodosFinder's state query
+ todo4 = create(:todo, user: user, state: :pending, action: Todo::ASSIGNED, author: author2)
+
+ todos = resolve(described_class, obj: user, args: { author_id: [author2.id, author1.id] }, ctx: { current_user: user })
+
+ expect(todos).to contain_exactly(todo4)
+ end
+
+ it 'just uses the first project id' do
+ project1 = create(:project)
+ project2 = create(:project)
+
+ create(:todo, project: project1, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ todo5 = create(:todo, project: project2, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
+
+ todos = resolve(described_class, obj: user, args: { project_id: [project2.id, project1.id] }, ctx: { current_user: user })
+
+ expect(todos).to contain_exactly(todo5)
+ end
+
+ it 'just uses the first group id' do
+ group1 = create(:group)
+ group2 = create(:group)
+
+ group1.add_developer(user)
+ group2.add_developer(user)
+
+ create(:todo, group: group1, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
+ todo5 = create(:todo, group: group2, user: user, state: :pending, action: Todo::ASSIGNED, author: author1)
+
+ todos = resolve(described_class, obj: user, args: { group_id: [group2.id, group1.id] }, ctx: { current_user: user })
+
+ expect(todos).to contain_exactly(todo5)
+ end
+
+ it 'just uses the first target' do
+ todos = resolve(described_class, obj: user, args: { type: %w[Issue MergeRequest] }, ctx: { current_user: user })
+
+ # Just todo3 because todo2 is in state "done"
+ expect(todos).to contain_exactly(todo3)
+ end
+ end
+
+ context 'when no user is provided' do
+ it 'returns no todos' do
+ todos = resolve(described_class, obj: nil, args: {}, ctx: { current_user: current_user })
+
+ expect(todos).to be_empty
+ end
+ end
+
+ context 'when provided user is not current user' do
+ it 'returns no todos' do
+ todos = resolve(described_class, obj: user, args: {}, ctx: { current_user: current_user })
+
+ expect(todos).to be_empty
+ end
+ end
+ end
+
+ def resolve_todos(args = {}, context = { current_user: current_user })
+ resolve(described_class, obj: current_user, args: args, ctx: context)
+ end
+end
diff --git a/spec/graphql/resolvers/tree_resolver_spec.rb b/spec/graphql/resolvers/tree_resolver_spec.rb
index 9f95b740ab1..0ea4e6eeaad 100644
--- a/spec/graphql/resolvers/tree_resolver_spec.rb
+++ b/spec/graphql/resolvers/tree_resolver_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Resolvers::TreeResolver do
diff --git a/spec/graphql/types/ci/detailed_status_type_spec.rb b/spec/graphql/types/ci/detailed_status_type_spec.rb
index a21162adb42..169a03c770b 100644
--- a/spec/graphql/types/ci/detailed_status_type_spec.rb
+++ b/spec/graphql/types/ci/detailed_status_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Types::Ci::DetailedStatusType do
diff --git a/spec/graphql/types/ci/pipeline_type_spec.rb b/spec/graphql/types/ci/pipeline_type_spec.rb
index ec1c689a4be..2fafc1bc13f 100644
--- a/spec/graphql/types/ci/pipeline_type_spec.rb
+++ b/spec/graphql/types/ci/pipeline_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Types::Ci::PipelineType do
diff --git a/spec/graphql/types/commit_type_spec.rb b/spec/graphql/types/commit_type_spec.rb
index 5d8edcf254c..1ff1c97f8db 100644
--- a/spec/graphql/types/commit_type_spec.rb
+++ b/spec/graphql/types/commit_type_spec.rb
@@ -7,5 +7,10 @@ describe GitlabSchema.types['Commit'] do
it { expect(described_class).to require_graphql_authorizations(:download_code) }
- it { expect(described_class).to have_graphql_fields(:id, :sha, :title, :description, :message, :authored_date, :author, :web_url, :latest_pipeline) }
+ it 'contains attributes related to commit' do
+ expect(described_class).to have_graphql_fields(
+ :id, :sha, :title, :description, :message, :authored_date,
+ :author, :web_url, :latest_pipeline, :signature_html
+ )
+ end
end
diff --git a/spec/graphql/types/extended_issue_type_spec.rb b/spec/graphql/types/extended_issue_type_spec.rb
new file mode 100644
index 00000000000..72ce53ae1be
--- /dev/null
+++ b/spec/graphql/types/extended_issue_type_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe GitlabSchema.types['ExtendedIssue'] do
+ it { expect(described_class).to expose_permissions_using(Types::PermissionTypes::Issue) }
+
+ it { expect(described_class.graphql_name).to eq('ExtendedIssue') }
+
+ it { expect(described_class).to require_graphql_authorizations(:read_issue) }
+
+ it { expect(described_class.interfaces).to include(Types::Notes::NoteableType.to_graphql) }
+
+ it 'has specific fields' do
+ fields = Types::IssueType.fields.keys + [:subscribed]
+
+ fields.each do |field_name|
+ expect(described_class).to have_graphql_field(field_name)
+ end
+ end
+end
diff --git a/spec/graphql/types/issue_type_spec.rb b/spec/graphql/types/issue_type_spec.rb
index 734e5af3cd8..8aa2385ddaa 100644
--- a/spec/graphql/types/issue_type_spec.rb
+++ b/spec/graphql/types/issue_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['Issue'] do
@@ -10,8 +12,9 @@ describe GitlabSchema.types['Issue'] do
it { expect(described_class.interfaces).to include(Types::Notes::NoteableType.to_graphql) }
it 'has specific fields' do
- fields = %i[title_html description_html relative_position web_path web_url
- reference]
+ fields = %i[iid title description state reference author assignees participants labels milestone due_date
+ confidential discussion_locked upvotes downvotes user_notes_count web_path web_url relative_position
+ time_estimate total_time_spent closed_at created_at updated_at task_completion_status]
fields.each do |field_name|
expect(described_class).to have_graphql_field(field_name)
diff --git a/spec/graphql/types/merge_request_type_spec.rb b/spec/graphql/types/merge_request_type_spec.rb
index 59bd0123d88..04e9bb6861f 100644
--- a/spec/graphql/types/merge_request_type_spec.rb
+++ b/spec/graphql/types/merge_request_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['MergeRequest'] do
@@ -18,7 +20,9 @@ describe GitlabSchema.types['MergeRequest'] do
merge_error allow_collaboration should_be_rebased rebase_commit_sha
rebase_in_progress merge_commit_message default_merge_commit_message
merge_ongoing source_branch_exists mergeable_discussions_state web_url
- upvotes downvotes subscribed head_pipeline pipelines task_completion_status
+ upvotes downvotes head_pipeline pipelines task_completion_status
+ milestone assignees participants subscribed labels discussion_locked time_estimate
+ total_time_spent reference
]
is_expected.to have_graphql_fields(*expected_fields)
diff --git a/spec/graphql/types/metadata_type_spec.rb b/spec/graphql/types/metadata_type_spec.rb
index 5236380e477..2988f3c6ba5 100644
--- a/spec/graphql/types/metadata_type_spec.rb
+++ b/spec/graphql/types/metadata_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['Metadata'] do
diff --git a/spec/graphql/types/notes/diff_position_type_spec.rb b/spec/graphql/types/notes/diff_position_type_spec.rb
index 345bca8f702..aa08daaacd4 100644
--- a/spec/graphql/types/notes/diff_position_type_spec.rb
+++ b/spec/graphql/types/notes/diff_position_type_spec.rb
@@ -7,6 +7,6 @@ describe GitlabSchema.types['DiffPosition'] do
:new_path, :position_type, :old_line, :new_line, :x, :y,
:width, :height]
- is_expected.to have_graphql_field(*expected_fields)
+ is_expected.to have_graphql_fields(*expected_fields)
end
end
diff --git a/spec/graphql/types/permission_types/base_permission_type_spec.rb b/spec/graphql/types/permission_types/base_permission_type_spec.rb
index 0ee8b883d51..a45102e5b50 100644
--- a/spec/graphql/types/permission_types/base_permission_type_spec.rb
+++ b/spec/graphql/types/permission_types/base_permission_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Types::PermissionTypes::BasePermissionType do
diff --git a/spec/graphql/types/permission_types/issue_spec.rb b/spec/graphql/types/permission_types/issue_spec.rb
index f0fbeda202f..a94bc6b780e 100644
--- a/spec/graphql/types/permission_types/issue_spec.rb
+++ b/spec/graphql/types/permission_types/issue_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Types::PermissionTypes::Issue do
diff --git a/spec/graphql/types/permission_types/merge_request_spec.rb b/spec/graphql/types/permission_types/merge_request_spec.rb
index e1026b01a74..e0f8bdd4712 100644
--- a/spec/graphql/types/permission_types/merge_request_spec.rb
+++ b/spec/graphql/types/permission_types/merge_request_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Types::PermissionTypes::MergeRequest do
diff --git a/spec/graphql/types/permission_types/merge_request_type_spec.rb b/spec/graphql/types/permission_types/merge_request_type_spec.rb
index 6e57122867a..572b4ac42d0 100644
--- a/spec/graphql/types/permission_types/merge_request_type_spec.rb
+++ b/spec/graphql/types/permission_types/merge_request_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Types::MergeRequestType do
diff --git a/spec/graphql/types/permission_types/note_spec.rb b/spec/graphql/types/permission_types/note_spec.rb
index 32d56eb1f7a..a7811fc20e5 100644
--- a/spec/graphql/types/permission_types/note_spec.rb
+++ b/spec/graphql/types/permission_types/note_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['NotePermissions'] do
diff --git a/spec/graphql/types/permission_types/project_spec.rb b/spec/graphql/types/permission_types/project_spec.rb
index 4974995b587..6d5a905c128 100644
--- a/spec/graphql/types/permission_types/project_spec.rb
+++ b/spec/graphql/types/permission_types/project_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe Types::PermissionTypes::Project do
diff --git a/spec/graphql/types/project_type_spec.rb b/spec/graphql/types/project_type_spec.rb
index 69fbc72bdf5..cfd0f8ec7a7 100644
--- a/spec/graphql/types/project_type_spec.rb
+++ b/spec/graphql/types/project_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['Project'] do
@@ -25,4 +27,40 @@ describe GitlabSchema.types['Project'] do
is_expected.to have_graphql_fields(*expected_fields)
end
+
+ describe 'issue field' do
+ subject { described_class.fields['issue'] }
+
+ it 'returns issue' do
+ is_expected.to have_graphql_type(Types::ExtendedIssueType)
+ is_expected.to have_graphql_resolver(Resolvers::IssuesResolver.single)
+ end
+ end
+
+ describe 'issues field' do
+ subject { described_class.fields['issues'] }
+
+ it 'returns issue' do
+ is_expected.to have_graphql_type(Types::IssueType.connection_type)
+ is_expected.to have_graphql_resolver(Resolvers::IssuesResolver)
+ end
+ end
+
+ describe 'merge_requests field' do
+ subject { described_class.fields['mergeRequest'] }
+
+ it 'returns merge requests' do
+ is_expected.to have_graphql_type(Types::MergeRequestType)
+ is_expected.to have_graphql_resolver(Resolvers::MergeRequestsResolver.single)
+ end
+ end
+
+ describe 'merge_request field' do
+ subject { described_class.fields['mergeRequests'] }
+
+ it 'returns merge request' do
+ is_expected.to have_graphql_type(Types::MergeRequestType.connection_type)
+ is_expected.to have_graphql_resolver(Resolvers::MergeRequestsResolver)
+ end
+ end
end
diff --git a/spec/graphql/types/query_type_spec.rb b/spec/graphql/types/query_type_spec.rb
index bc3b8a42392..1365bc0dc14 100644
--- a/spec/graphql/types/query_type_spec.rb
+++ b/spec/graphql/types/query_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['Query'] do
@@ -5,7 +7,7 @@ describe GitlabSchema.types['Query'] do
expect(described_class.graphql_name).to eq('Query')
end
- it { is_expected.to have_graphql_fields(:project, :namespace, :group, :echo, :metadata) }
+ it { is_expected.to have_graphql_fields(:project, :namespace, :group, :echo, :metadata, :current_user) }
describe 'namespace field' do
subject { described_class.fields['namespace'] }
diff --git a/spec/graphql/types/repository_type_spec.rb b/spec/graphql/types/repository_type_spec.rb
index 8a8238f2a2a..236f9bb9459 100644
--- a/spec/graphql/types/repository_type_spec.rb
+++ b/spec/graphql/types/repository_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['Repository'] do
diff --git a/spec/graphql/types/time_type_spec.rb b/spec/graphql/types/time_type_spec.rb
index 4196d9d27d4..88a535ed3bb 100644
--- a/spec/graphql/types/time_type_spec.rb
+++ b/spec/graphql/types/time_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabSchema.types['Time'] do
diff --git a/spec/graphql/types/todo_type_spec.rb b/spec/graphql/types/todo_type_spec.rb
new file mode 100644
index 00000000000..a5ea5bcffb0
--- /dev/null
+++ b/spec/graphql/types/todo_type_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe GitlabSchema.types['Todo'] do
+ it 'has the correct fields' do
+ expected_fields = [:id, :project, :group, :author, :action, :target_type, :body, :state, :created_at]
+
+ is_expected.to have_graphql_fields(*expected_fields)
+ end
+
+ it { expect(described_class).to require_graphql_authorizations(:read_todo) }
+end
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 2f481e237a7..e8c438e459b 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ApplicationHelper do
diff --git a/spec/helpers/auto_devops_helper_spec.rb b/spec/helpers/auto_devops_helper_spec.rb
index e80388f9ea7..5d42a80aae3 100644
--- a/spec/helpers/auto_devops_helper_spec.rb
+++ b/spec/helpers/auto_devops_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AutoDevopsHelper do
diff --git a/spec/helpers/avatars_helper_spec.rb b/spec/helpers/avatars_helper_spec.rb
index 9330e75af11..77182a59c1c 100644
--- a/spec/helpers/avatars_helper_spec.rb
+++ b/spec/helpers/avatars_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AvatarsHelper do
diff --git a/spec/helpers/award_emoji_helper_spec.rb b/spec/helpers/award_emoji_helper_spec.rb
index 035960ed96e..2ee27bc5427 100644
--- a/spec/helpers/award_emoji_helper_spec.rb
+++ b/spec/helpers/award_emoji_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AwardEmojiHelper do
diff --git a/spec/helpers/blame_helper_spec.rb b/spec/helpers/blame_helper_spec.rb
index 722d21c566f..8b5de040508 100644
--- a/spec/helpers/blame_helper_spec.rb
+++ b/spec/helpers/blame_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BlameHelper do
diff --git a/spec/helpers/blob_helper_spec.rb b/spec/helpers/blob_helper_spec.rb
index 1f236429347..4996e27c2e6 100644
--- a/spec/helpers/blob_helper_spec.rb
+++ b/spec/helpers/blob_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BlobHelper do
@@ -268,4 +270,32 @@ describe BlobHelper do
end
end
end
+
+ describe '#ide_fork_and_edit_path' do
+ let(:project) { create(:project) }
+ let(:current_user) { create(:user) }
+ let(:can_push_code) { true }
+
+ before do
+ allow(helper).to receive(:current_user).and_return(current_user)
+ allow(helper).to receive(:can?).and_return(can_push_code)
+ end
+
+ it 'returns path to fork the repo with a redirect param to the full IDE path' do
+ uri = URI(helper.ide_fork_and_edit_path(project, "master", ""))
+ params = CGI.unescape(uri.query)
+
+ expect(uri.path).to eq("/#{project.namespace.path}/#{project.path}/-/forks")
+ expect(params).to include("continue[to]=/-/ide/project/#{project.namespace.path}/#{project.path}/edit/master")
+ expect(params).to include("namespace_key=#{current_user.namespace.id}")
+ end
+
+ context 'when user is not logged in' do
+ let(:current_user) { nil }
+
+ it 'returns nil' do
+ expect(helper.ide_fork_and_edit_path(project, "master", "")).to be_nil
+ end
+ end
+ end
end
diff --git a/spec/helpers/boards_helper_spec.rb b/spec/helpers/boards_helper_spec.rb
index ad088398ce9..8a4446b7f59 100644
--- a/spec/helpers/boards_helper_spec.rb
+++ b/spec/helpers/boards_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BoardsHelper do
diff --git a/spec/helpers/broadcast_messages_helper_spec.rb b/spec/helpers/broadcast_messages_helper_spec.rb
index 9bec0f9f432..d0f0e6f1dd5 100644
--- a/spec/helpers/broadcast_messages_helper_spec.rb
+++ b/spec/helpers/broadcast_messages_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BroadcastMessagesHelper do
diff --git a/spec/helpers/button_helper_spec.rb b/spec/helpers/button_helper_spec.rb
index eebae1d7290..e918c34ffef 100644
--- a/spec/helpers/button_helper_spec.rb
+++ b/spec/helpers/button_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ButtonHelper do
@@ -164,7 +166,7 @@ describe ButtonHelper do
it 'shows copy to clipboard button with default configuration and no text set to copy' do
expect(element.attr('class')).to eq('btn btn-clipboard btn-transparent')
expect(element.attr('type')).to eq('button')
- expect(element.attr('aria-label')).to eq('Copy to clipboard')
+ expect(element.attr('aria-label')).to eq('Copy')
expect(element.attr('data-toggle')).to eq('tooltip')
expect(element.attr('data-placement')).to eq('bottom')
expect(element.attr('data-container')).to eq('body')
diff --git a/spec/helpers/calendar_helper_spec.rb b/spec/helpers/calendar_helper_spec.rb
index 828a9d9fea0..8dba6815e8d 100644
--- a/spec/helpers/calendar_helper_spec.rb
+++ b/spec/helpers/calendar_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe CalendarHelper do
diff --git a/spec/helpers/ci_status_helper_spec.rb b/spec/helpers/ci_status_helper_spec.rb
index 4f665dc0514..80be119b069 100644
--- a/spec/helpers/ci_status_helper_spec.rb
+++ b/spec/helpers/ci_status_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe CiStatusHelper do
diff --git a/spec/helpers/commits_helper_spec.rb b/spec/helpers/commits_helper_spec.rb
index 9e53bc05a48..cbc5566979b 100644
--- a/spec/helpers/commits_helper_spec.rb
+++ b/spec/helpers/commits_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe CommitsHelper do
diff --git a/spec/helpers/components_helper_spec.rb b/spec/helpers/components_helper_spec.rb
index 94a59193be8..703bee0ca92 100644
--- a/spec/helpers/components_helper_spec.rb
+++ b/spec/helpers/components_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ComponentsHelper do
diff --git a/spec/helpers/dashboard_helper_spec.rb b/spec/helpers/dashboard_helper_spec.rb
index 059ae128d93..c899c2d9853 100644
--- a/spec/helpers/dashboard_helper_spec.rb
+++ b/spec/helpers/dashboard_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DashboardHelper do
diff --git a/spec/helpers/defer_script_tag_helper_spec.rb b/spec/helpers/defer_script_tag_helper_spec.rb
index 9ada3ae75ba..440904188ca 100644
--- a/spec/helpers/defer_script_tag_helper_spec.rb
+++ b/spec/helpers/defer_script_tag_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DeferScriptTagHelper do
diff --git a/spec/helpers/diff_helper_spec.rb b/spec/helpers/diff_helper_spec.rb
index 5396243f44d..47c076e3322 100644
--- a/spec/helpers/diff_helper_spec.rb
+++ b/spec/helpers/diff_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DiffHelper do
diff --git a/spec/helpers/emails_helper_spec.rb b/spec/helpers/emails_helper_spec.rb
index a14ae2cde4b..931b7008173 100644
--- a/spec/helpers/emails_helper_spec.rb
+++ b/spec/helpers/emails_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EmailsHelper do
diff --git a/spec/helpers/environment_helper_spec.rb b/spec/helpers/environment_helper_spec.rb
new file mode 100644
index 00000000000..53953d72b06
--- /dev/null
+++ b/spec/helpers/environment_helper_spec.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe EnvironmentHelper do
+ describe '#render_deployment_status' do
+ context 'when using a manual deployment' do
+ it 'renders a span tag' do
+ deploy = build(:deployment, deployable: nil, status: :success)
+ html = helper.render_deployment_status(deploy)
+
+ expect(html).to have_css('span.ci-status.ci-success')
+ end
+ end
+
+ context 'when using a deployment from a build' do
+ it 'renders a link tag' do
+ deploy = build(:deployment, status: :success)
+ html = helper.render_deployment_status(deploy)
+
+ expect(html).to have_css('a.ci-status.ci-success')
+ end
+ end
+ end
+end
diff --git a/spec/helpers/events_helper_spec.rb b/spec/helpers/events_helper_spec.rb
index e062c841717..7853617c3ed 100644
--- a/spec/helpers/events_helper_spec.rb
+++ b/spec/helpers/events_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EventsHelper do
diff --git a/spec/helpers/explore_helper_spec.rb b/spec/helpers/explore_helper_spec.rb
index 12651d80e36..5208d3bd656 100644
--- a/spec/helpers/explore_helper_spec.rb
+++ b/spec/helpers/explore_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ExploreHelper do
diff --git a/spec/helpers/form_helper_spec.rb b/spec/helpers/form_helper_spec.rb
index a70d8333f30..68aa0137cd5 100644
--- a/spec/helpers/form_helper_spec.rb
+++ b/spec/helpers/form_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe FormHelper do
diff --git a/spec/helpers/git_helper_spec.rb b/spec/helpers/git_helper_spec.rb
index 9b1ef1e05a2..505d6ed15ac 100644
--- a/spec/helpers/git_helper_spec.rb
+++ b/spec/helpers/git_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitHelper do
diff --git a/spec/helpers/gitlab_routing_helper_spec.rb b/spec/helpers/gitlab_routing_helper_spec.rb
index 027480143bd..bf043f3f013 100644
--- a/spec/helpers/gitlab_routing_helper_spec.rb
+++ b/spec/helpers/gitlab_routing_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GitlabRoutingHelper do
diff --git a/spec/helpers/graph_helper_spec.rb b/spec/helpers/graph_helper_spec.rb
index 1f8a38dc697..dc389c09e60 100644
--- a/spec/helpers/graph_helper_spec.rb
+++ b/spec/helpers/graph_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GraphHelper do
diff --git a/spec/helpers/groups_helper_spec.rb b/spec/helpers/groups_helper_spec.rb
index 98719697cea..8b33277ea18 100644
--- a/spec/helpers/groups_helper_spec.rb
+++ b/spec/helpers/groups_helper_spec.rb
@@ -191,6 +191,41 @@ describe GroupsHelper do
end
end
+ describe '#group_container_registry_nav' do
+ let(:group) { create(:group, :public) }
+ let(:user) { create(:user) }
+ before do
+ stub_container_registry_config(enabled: true)
+ allow(helper).to receive(:current_user) { user }
+ allow(helper).to receive(:can?).with(user, :read_container_image, group) { true }
+ helper.instance_variable_set(:@group, group)
+ end
+
+ subject { helper.group_container_registry_nav? }
+
+ context 'when container registry is enabled' do
+ it { is_expected.to be_truthy }
+
+ it 'is disabled for guest' do
+ allow(helper).to receive(:can?).with(user, :read_container_image, group) { false }
+ expect(subject).to be false
+ end
+ end
+
+ context 'when container registry is not enabled' do
+ before do
+ stub_container_registry_config(enabled: false)
+ end
+
+ it { is_expected.to be_falsy }
+
+ it 'is disabled for guests' do
+ allow(helper).to receive(:can?).with(user, :read_container_image, group) { false }
+ expect(subject).to be false
+ end
+ end
+ end
+
describe '#group_sidebar_links' do
let(:group) { create(:group, :public) }
let(:user) { create(:user) }
diff --git a/spec/helpers/hooks_helper_spec.rb b/spec/helpers/hooks_helper_spec.rb
index 2e21f1134b1..4352089c1c0 100644
--- a/spec/helpers/hooks_helper_spec.rb
+++ b/spec/helpers/hooks_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe HooksHelper do
diff --git a/spec/helpers/icons_helper_spec.rb b/spec/helpers/icons_helper_spec.rb
index 950f951e22e..f1b1d411e05 100644
--- a/spec/helpers/icons_helper_spec.rb
+++ b/spec/helpers/icons_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe IconsHelper do
diff --git a/spec/helpers/import_helper_spec.rb b/spec/helpers/import_helper_spec.rb
index 8a1b1e859b1..a6b283e49dc 100644
--- a/spec/helpers/import_helper_spec.rb
+++ b/spec/helpers/import_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ImportHelper do
diff --git a/spec/helpers/instance_configuration_helper_spec.rb b/spec/helpers/instance_configuration_helper_spec.rb
index 5d716b9191d..31a6c7bc839 100644
--- a/spec/helpers/instance_configuration_helper_spec.rb
+++ b/spec/helpers/instance_configuration_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe InstanceConfigurationHelper do
diff --git a/spec/helpers/issuables_helper_spec.rb b/spec/helpers/issuables_helper_spec.rb
index 3c8179460ac..2f67ea457a0 100644
--- a/spec/helpers/issuables_helper_spec.rb
+++ b/spec/helpers/issuables_helper_spec.rb
@@ -190,7 +190,6 @@ describe IssuablesHelper do
issuableRef: "##{issue.iid}",
markdownPreviewPath: "/#{@project.full_path}/preview_markdown",
markdownDocsPath: '/help/user/markdown',
- issuableTemplates: [],
lockVersion: issue.lock_version,
projectPath: @project.path,
projectNamespace: @project.namespace.path,
@@ -244,4 +243,32 @@ describe IssuablesHelper do
end
end
end
+
+ describe '#assignee_sidebar_data' do
+ let(:user) { create(:user) }
+ let(:merge_request) { nil }
+ subject { helper.assignee_sidebar_data(user, merge_request: merge_request) }
+
+ it 'returns hash of assignee data' do
+ is_expected.to eql({
+ avatar_url: user.avatar_url,
+ name: user.name,
+ username: user.username
+ })
+ end
+
+ context 'with merge_request' do
+ let(:merge_request) { build_stubbed(:merge_request) }
+
+ where(can_merge: [true, false])
+
+ with_them do
+ before do
+ allow(merge_request).to receive(:can_be_merged_by?).and_return(can_merge)
+ end
+
+ it { is_expected.to include({ can_merge: can_merge })}
+ end
+ end
+ end
end
diff --git a/spec/helpers/issues_helper_spec.rb b/spec/helpers/issues_helper_spec.rb
index d15b5a4ab58..a394812f8f0 100644
--- a/spec/helpers/issues_helper_spec.rb
+++ b/spec/helpers/issues_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require "spec_helper"
describe IssuesHelper do
diff --git a/spec/helpers/labels_helper_spec.rb b/spec/helpers/labels_helper_spec.rb
index 1d57aaa0da5..a715390ecae 100644
--- a/spec/helpers/labels_helper_spec.rb
+++ b/spec/helpers/labels_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe LabelsHelper do
diff --git a/spec/helpers/markup_helper_spec.rb b/spec/helpers/markup_helper_spec.rb
index f6e1720e113..364f215420a 100644
--- a/spec/helpers/markup_helper_spec.rb
+++ b/spec/helpers/markup_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MarkupHelper do
@@ -408,12 +410,12 @@ describe MarkupHelper do
it 'preserves a link href when link text is truncated' do
text = 'The quick brown fox jumped over the lazy dog' # 44 chars
- input = "#{text}#{text}#{text} " # 133 chars
link_url = 'http://example.com/foo/bar/baz' # 30 chars
- input << link_url
- object = create_object(input)
+ input = "#{text}#{text}#{text} #{link_url}" # 163 chars
expected_link_text = 'http://example...</a>'
+ object = create_object(input)
+
expect(first_line_in_markdown(object, attribute, 150, project: project)).to match(link_url)
expect(first_line_in_markdown(object, attribute, 150, project: project)).to match(expected_link_text)
end
diff --git a/spec/helpers/members_helper_spec.rb b/spec/helpers/members_helper_spec.rb
index 908e8960f37..169c8707bf4 100644
--- a/spec/helpers/members_helper_spec.rb
+++ b/spec/helpers/members_helper_spec.rb
@@ -1,13 +1,15 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MembersHelper do
describe '#remove_member_message' do
let(:requester) { create(:user) }
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
let(:project_member) { build(:project_member, project: project) }
let(:project_member_invite) { build(:project_member, project: project).tap { |m| m.generate_invite_token! } }
let(:project_member_request) { project.request_access(requester) }
- let(:group) { create(:group, :access_requestable) }
+ let(:group) { create(:group) }
let(:group_member) { build(:group_member, group: group) }
let(:group_member_invite) { build(:group_member, group: group).tap { |m| m.generate_invite_token! } }
let(:group_member_request) { group.request_access(requester) }
@@ -24,10 +26,10 @@ describe MembersHelper do
describe '#remove_member_title' do
let(:requester) { create(:user) }
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
let(:project_member) { build(:project_member, project: project) }
let(:project_member_request) { project.request_access(requester) }
- let(:group) { create(:group, :access_requestable) }
+ let(:group) { create(:group) }
let(:group_member) { build(:group_member, group: group) }
let(:group_member_request) { group.request_access(requester) }
diff --git a/spec/helpers/merge_requests_helper_spec.rb b/spec/helpers/merge_requests_helper_spec.rb
index 193390d2f2c..695d1520897 100644
--- a/spec/helpers/merge_requests_helper_spec.rb
+++ b/spec/helpers/merge_requests_helper_spec.rb
@@ -39,6 +39,7 @@ describe MergeRequestsHelper do
let(:forked_project) { fork_project(project) }
let(:merge_request) { create(:merge_request, source_project: forked_project, target_project: project) }
subject { format_mr_branch_names(merge_request) }
+
let(:source_title) { "#{forked_project.full_path}:#{merge_request.source_branch}" }
let(:target_title) { "#{project.full_path}:#{merge_request.target_branch}" }
diff --git a/spec/helpers/milestones_helper_spec.rb b/spec/helpers/milestones_helper_spec.rb
index f5185cb2857..3574066e03e 100644
--- a/spec/helpers/milestones_helper_spec.rb
+++ b/spec/helpers/milestones_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MilestonesHelper do
diff --git a/spec/helpers/milestones_routing_helper_spec.rb b/spec/helpers/milestones_routing_helper_spec.rb
index dc13a43c2ab..4da589a5007 100644
--- a/spec/helpers/milestones_routing_helper_spec.rb
+++ b/spec/helpers/milestones_routing_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MilestonesRoutingHelper do
diff --git a/spec/helpers/namespaces_helper_spec.rb b/spec/helpers/namespaces_helper_spec.rb
index e38513f6d94..36465069311 100644
--- a/spec/helpers/namespaces_helper_spec.rb
+++ b/spec/helpers/namespaces_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe NamespacesHelper do
diff --git a/spec/helpers/nav_helper_spec.rb b/spec/helpers/nav_helper_spec.rb
index 979d89812f5..882a125a0da 100644
--- a/spec/helpers/nav_helper_spec.rb
+++ b/spec/helpers/nav_helper_spec.rb
@@ -1,16 +1,22 @@
+# frozen_string_literal: true
+
require 'spec_helper'
-describe NavHelper do
+describe NavHelper, :do_not_mock_admin_mode do
describe '#header_links' do
+ include_context 'custom session'
+
before do
- allow(helper).to receive(:session) { {} }
+ allow(helper).to receive(:session).and_return(session)
end
context 'when the user is logged in' do
- let(:user) { build(:user) }
+ let(:user) { create(:user) }
+ let(:current_user_mode) { Gitlab::Auth::CurrentUserMode.new(user) }
before do
allow(helper).to receive(:current_user).and_return(user)
+ allow(helper).to receive(:current_user_mode).and_return(current_user_mode)
allow(helper).to receive(:can?) { true }
end
@@ -26,6 +32,46 @@ describe NavHelper do
expect(helper.header_links).to include(:admin_impersonation)
end
+ context 'as admin' do
+ let(:user) { create(:user, :admin) }
+
+ context 'feature flag :user_mode_in_session is enabled' do
+ it 'does not contain the admin mode link by default' do
+ expect(helper.header_links).not_to include(:admin_mode)
+ end
+
+ context 'with admin mode enabled' do
+ before do
+ current_user_mode.enable_admin_mode!(password: user.password)
+ end
+
+ it 'contains the admin mode link' do
+ expect(helper.header_links).to include(:admin_mode)
+ end
+ end
+ end
+
+ context 'feature flag :user_mode_in_session is disabled' do
+ before do
+ stub_feature_flags(user_mode_in_session: false)
+ end
+
+ it 'does not contain the admin mode link' do
+ expect(helper.header_links).not_to include(:admin_mode)
+ end
+
+ context 'with admin mode enabled' do
+ before do
+ current_user_mode.enable_admin_mode!(password: user.password)
+ end
+
+ it 'has no effect on header links' do
+ expect(helper.header_links).not_to include(:admin_mode)
+ end
+ end
+ end
+ end
+
context 'when the user cannot read cross project' do
before do
allow(helper).to receive(:can?).with(user, :read_cross_project) { false }
diff --git a/spec/helpers/notes_helper_spec.rb b/spec/helpers/notes_helper_spec.rb
index 0715f34dafe..2da7717ebfc 100644
--- a/spec/helpers/notes_helper_spec.rb
+++ b/spec/helpers/notes_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require "spec_helper"
describe NotesHelper do
diff --git a/spec/helpers/notifications_helper_spec.rb b/spec/helpers/notifications_helper_spec.rb
index 5717b15d656..2384c87b377 100644
--- a/spec/helpers/notifications_helper_spec.rb
+++ b/spec/helpers/notifications_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe NotificationsHelper do
diff --git a/spec/helpers/page_layout_helper_spec.rb b/spec/helpers/page_layout_helper_spec.rb
index 3b08fc511a3..7e851a1af01 100644
--- a/spec/helpers/page_layout_helper_spec.rb
+++ b/spec/helpers/page_layout_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PageLayoutHelper do
diff --git a/spec/helpers/pagination_helper_spec.rb b/spec/helpers/pagination_helper_spec.rb
index e235475fb47..9fb51249edc 100644
--- a/spec/helpers/pagination_helper_spec.rb
+++ b/spec/helpers/pagination_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PaginationHelper do
diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb
index 554c08add2d..c4ed99e56a0 100644
--- a/spec/helpers/preferences_helper_spec.rb
+++ b/spec/helpers/preferences_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PreferencesHelper do
diff --git a/spec/helpers/profiles_helper_spec.rb b/spec/helpers/profiles_helper_spec.rb
index da2dc229c35..fc282eee26d 100644
--- a/spec/helpers/profiles_helper_spec.rb
+++ b/spec/helpers/profiles_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ProfilesHelper do
diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb
index d2a4ce6540d..1fa3c639603 100644
--- a/spec/helpers/projects_helper_spec.rb
+++ b/spec/helpers/projects_helper_spec.rb
@@ -902,4 +902,40 @@ describe ProjectsHelper do
end
end
end
+
+ describe '#grafana_integration_url' do
+ let(:project) { create(:project) }
+
+ before do
+ helper.instance_variable_set(:@project, project)
+ end
+
+ subject { helper.grafana_integration_url }
+
+ it { is_expected.to eq(nil) }
+
+ context 'grafana integration exists' do
+ let!(:grafana_integration) { create(:grafana_integration, project: project) }
+
+ it { is_expected.to eq(grafana_integration.grafana_url) }
+ end
+ end
+
+ describe '#grafana_integration_token' do
+ let(:project) { create(:project) }
+
+ before do
+ helper.instance_variable_set(:@project, project)
+ end
+
+ subject { helper.grafana_integration_token }
+
+ it { is_expected.to eq(nil) }
+
+ context 'grafana integration exists' do
+ let!(:grafana_integration) { create(:grafana_integration, project: project) }
+
+ it { is_expected.to eq(grafana_integration.token) }
+ end
+ end
end
diff --git a/spec/helpers/releases_helper_spec.rb b/spec/helpers/releases_helper_spec.rb
index ff820b3cc95..3b4973677ef 100644
--- a/spec/helpers/releases_helper_spec.rb
+++ b/spec/helpers/releases_helper_spec.rb
@@ -22,23 +22,9 @@ describe ReleasesHelper do
helper.instance_variable_set(:@project, project)
end
- describe '#url_for_merge_requests' do
- it 'returns the the correct link with the correct parameters' do
- path = "#{project.group.path}/#{project.path}/merge_requests?scope=all&state=opened"
- expect(helper.url_for_merge_requests).to include(path)
- end
- end
-
- describe '#url_for_issues' do
- it 'returns the the correct link with the correct parameters' do
- path = "#{project.group.path}/#{project.path}/issues?scope=all&state=opened"
- expect(helper.url_for_issues).to include(path)
- end
- end
-
describe '#data_for_releases_page' do
it 'has the needed data to display release blocks' do
- keys = %i(project_id illustration_path documentation_path merge_requests_url issues_url)
+ keys = %i(project_id illustration_path documentation_path)
expect(helper.data_for_releases_page.keys).to eq(keys)
end
end
diff --git a/spec/helpers/rss_helper_spec.rb b/spec/helpers/rss_helper_spec.rb
index a7f9bdf07e4..657f5fb42bc 100644
--- a/spec/helpers/rss_helper_spec.rb
+++ b/spec/helpers/rss_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe RssHelper do
diff --git a/spec/helpers/runners_helper_spec.rb b/spec/helpers/runners_helper_spec.rb
index bf00841fcb6..042714d002e 100644
--- a/spec/helpers/runners_helper_spec.rb
+++ b/spec/helpers/runners_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe RunnersHelper do
diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb
index e1dc589236b..9e9f87b3407 100644
--- a/spec/helpers/search_helper_spec.rb
+++ b/spec/helpers/search_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SearchHelper do
@@ -103,19 +105,17 @@ describe SearchHelper do
using RSpec::Parameterized::TableSyntax
where(:scope, :label) do
+ 'blobs' | 'code result'
'commits' | 'commit'
'issues' | 'issue'
'merge_requests' | 'merge request'
'milestones' | 'milestone'
+ 'notes' | 'comment'
'projects' | 'project'
+ 'snippet_blobs' | 'snippet result'
'snippet_titles' | 'snippet'
'users' | 'user'
-
- 'blobs' | 'result'
- 'snippet_blobs' | 'result'
- 'wiki_blobs' | 'result'
-
- 'notes' | 'comment'
+ 'wiki_blobs' | 'wiki result'
end
with_them do
@@ -140,6 +140,15 @@ describe SearchHelper do
end
end
+ describe 'search_entries_empty_message' do
+ it 'returns the formatted entry message' do
+ message = search_entries_empty_message('projects', '<h1>foo</h1>')
+
+ expect(message).to eq("We couldn't find any projects matching <code>&lt;h1&gt;foo&lt;/h1&gt;</code>")
+ expect(message).to be_html_safe
+ end
+ end
+
describe 'search_filter_input_options' do
context 'project' do
before do
diff --git a/spec/helpers/sidekiq_helper_spec.rb b/spec/helpers/sidekiq_helper_spec.rb
index 117abc9c556..86e52419f9c 100644
--- a/spec/helpers/sidekiq_helper_spec.rb
+++ b/spec/helpers/sidekiq_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SidekiqHelper do
diff --git a/spec/helpers/snippets_helper_spec.rb b/spec/helpers/snippets_helper_spec.rb
index ce5e037f88d..66c8d576a4c 100644
--- a/spec/helpers/snippets_helper_spec.rb
+++ b/spec/helpers/snippets_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SnippetsHelper do
diff --git a/spec/helpers/storage_helper_spec.rb b/spec/helpers/storage_helper_spec.rb
index 4bd0fbb76ca..577e6e5caf0 100644
--- a/spec/helpers/storage_helper_spec.rb
+++ b/spec/helpers/storage_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require "spec_helper"
describe StorageHelper do
diff --git a/spec/helpers/submodule_helper_spec.rb b/spec/helpers/submodule_helper_spec.rb
index 465c76e5e6b..fcfce0eaf31 100644
--- a/spec/helpers/submodule_helper_spec.rb
+++ b/spec/helpers/submodule_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe SubmoduleHelper do
diff --git a/spec/helpers/tab_helper_spec.rb b/spec/helpers/tab_helper_spec.rb
index 9abf63d4bd4..3a3935a2130 100644
--- a/spec/helpers/tab_helper_spec.rb
+++ b/spec/helpers/tab_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TabHelper do
diff --git a/spec/helpers/time_helper_spec.rb b/spec/helpers/time_helper_spec.rb
index 8bf378549fe..858d6d341f4 100644
--- a/spec/helpers/time_helper_spec.rb
+++ b/spec/helpers/time_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TimeHelper do
diff --git a/spec/helpers/todos_helper_spec.rb b/spec/helpers/todos_helper_spec.rb
index 63806ef91f3..7c73b990338 100644
--- a/spec/helpers/todos_helper_spec.rb
+++ b/spec/helpers/todos_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require "spec_helper"
describe TodosHelper do
diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb
index 4a62e696cd9..c7cdb4ae45c 100644
--- a/spec/helpers/tree_helper_spec.rb
+++ b/spec/helpers/tree_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TreeHelper do
diff --git a/spec/helpers/user_callouts_helper_spec.rb b/spec/helpers/user_callouts_helper_spec.rb
index 8fa479a4474..547bf693e94 100644
--- a/spec/helpers/user_callouts_helper_spec.rb
+++ b/spec/helpers/user_callouts_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require "spec_helper"
describe UserCalloutsHelper do
diff --git a/spec/helpers/users_helper_spec.rb b/spec/helpers/users_helper_spec.rb
index 9165e91ddcd..59abe8c09e1 100644
--- a/spec/helpers/users_helper_spec.rb
+++ b/spec/helpers/users_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe UsersHelper do
diff --git a/spec/helpers/version_check_helper_spec.rb b/spec/helpers/version_check_helper_spec.rb
index edc0d64d031..421ff21bfdb 100644
--- a/spec/helpers/version_check_helper_spec.rb
+++ b/spec/helpers/version_check_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe VersionCheckHelper do
diff --git a/spec/helpers/visibility_level_helper_spec.rb b/spec/helpers/visibility_level_helper_spec.rb
index 2d276696208..1a176cfe965 100644
--- a/spec/helpers/visibility_level_helper_spec.rb
+++ b/spec/helpers/visibility_level_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe VisibilityLevelHelper do
diff --git a/spec/helpers/wiki_helper_spec.rb b/spec/helpers/wiki_helper_spec.rb
index ee977e37ec1..bcc2bd71da1 100644
--- a/spec/helpers/wiki_helper_spec.rb
+++ b/spec/helpers/wiki_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe WikiHelper do
diff --git a/spec/initializers/google_api_client_spec.rb b/spec/initializers/google_api_client_spec.rb
new file mode 100644
index 00000000000..44a1bc0836c
--- /dev/null
+++ b/spec/initializers/google_api_client_spec.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe './config/initializers/google_api_client.rb' do
+ subject { Google::Apis::ContainerV1beta1 }
+
+ it 'is needed' do |example|
+ is_expected.not_to be_const_defined(:CloudRunConfig),
+ <<-MSG.strip_heredoc
+ The google-api-client gem has been upgraded!
+ Remove:
+ #{example.example_group.description}
+ #{example.file_path}
+ MSG
+ end
+end
diff --git a/spec/initializers/lograge_spec.rb b/spec/initializers/lograge_spec.rb
index 24d366731a2..c2c1960eeab 100644
--- a/spec/initializers/lograge_spec.rb
+++ b/spec/initializers/lograge_spec.rb
@@ -34,5 +34,38 @@ describe 'lograge', type: :request do
subject
end
+
+ it 'logs cpu_s on supported platform' do
+ allow(Gitlab::Metrics::System).to receive(:thread_cpu_time)
+ .and_return(
+ 0.111222333,
+ 0.222333833
+ )
+
+ expect(Lograge.formatter).to receive(:call)
+ .with(a_hash_including(cpu_s: 0.1111115))
+ .and_call_original
+
+ expect(Lograge.logger).to receive(:send)
+ .with(anything, include('"cpu_s":0.1111115'))
+ .and_call_original
+
+ subject
+ end
+
+ it 'does not log cpu_s on unsupported platform' do
+ allow(Gitlab::Metrics::System).to receive(:thread_cpu_time)
+ .and_return(nil)
+
+ expect(Lograge.formatter).to receive(:call)
+ .with(hash_not_including(:cpu_s))
+ .and_call_original
+
+ expect(Lograge.logger).not_to receive(:send)
+ .with(anything, include('"cpu_s":'))
+ .and_call_original
+
+ subject
+ end
end
end
diff --git a/spec/javascripts/blob/balsamiq/balsamiq_viewer_spec.js b/spec/javascripts/blob/balsamiq/balsamiq_viewer_spec.js
index fd73fb4bfcc..d175c8ba853 100644
--- a/spec/javascripts/blob/balsamiq/balsamiq_viewer_spec.js
+++ b/spec/javascripts/blob/balsamiq/balsamiq_viewer_spec.js
@@ -1,8 +1,10 @@
import sqljs from 'sql.js';
+import axios from '~/lib/utils/axios_utils';
import BalsamiqViewer from '~/blob/balsamiq/balsamiq_viewer';
import ClassSpecHelper from '../../helpers/class_spec_helper';
describe('BalsamiqViewer', () => {
+ const mockArrayBuffer = new ArrayBuffer(10);
let balsamiqViewer;
let viewer;
@@ -19,44 +21,65 @@ describe('BalsamiqViewer', () => {
});
describe('loadFile', () => {
- let xhr;
- let loadFile;
+ let bv;
const endpoint = 'endpoint';
+ const requestSuccess = Promise.resolve({
+ data: mockArrayBuffer,
+ status: 200,
+ });
beforeEach(() => {
- xhr = jasmine.createSpyObj('xhr', ['open', 'send']);
+ viewer = {};
+ bv = new BalsamiqViewer(viewer);
+ });
- balsamiqViewer = jasmine.createSpyObj('balsamiqViewer', ['renderFile']);
+ it('should call `axios.get` on `endpoint` param with responseType set to `arraybuffer', () => {
+ spyOn(axios, 'get').and.returnValue(requestSuccess);
+ spyOn(bv, 'renderFile').and.stub();
- spyOn(window, 'XMLHttpRequest').and.returnValue(xhr);
+ bv.loadFile(endpoint);
- loadFile = BalsamiqViewer.prototype.loadFile.call(balsamiqViewer, endpoint);
+ expect(axios.get).toHaveBeenCalledWith(
+ endpoint,
+ jasmine.objectContaining({
+ responseType: 'arraybuffer',
+ }),
+ );
});
- it('should call .open', () => {
- expect(xhr.open).toHaveBeenCalledWith('GET', endpoint, true);
- });
+ it('should call `renderFile` on request success', done => {
+ spyOn(axios, 'get').and.returnValue(requestSuccess);
+ spyOn(bv, 'renderFile').and.callFake(() => {});
- it('should set .responseType', () => {
- expect(xhr.responseType).toBe('arraybuffer');
+ bv.loadFile(endpoint)
+ .then(() => {
+ expect(bv.renderFile).toHaveBeenCalledWith(mockArrayBuffer);
+ })
+ .then(done)
+ .catch(done.fail);
});
- it('should call .send', () => {
- expect(xhr.send).toHaveBeenCalled();
- });
+ it('should not call `renderFile` on request failure', done => {
+ spyOn(axios, 'get').and.returnValue(Promise.reject());
+ spyOn(bv, 'renderFile');
- it('should return a promise', () => {
- expect(loadFile).toEqual(jasmine.any(Promise));
+ bv.loadFile(endpoint)
+ .then(() => {
+ done.fail('Expected loadFile to throw error!');
+ })
+ .catch(() => {
+ expect(bv.renderFile).not.toHaveBeenCalled();
+ })
+ .then(done)
+ .catch(done.fail);
});
});
describe('renderFile', () => {
let container;
- let loadEvent;
let previews;
beforeEach(() => {
- loadEvent = { target: { response: {} } };
viewer = jasmine.createSpyObj('viewer', ['appendChild']);
previews = [document.createElement('ul'), document.createElement('ul')];
@@ -73,11 +96,11 @@ describe('BalsamiqViewer', () => {
container = containerElement;
});
- BalsamiqViewer.prototype.renderFile.call(balsamiqViewer, loadEvent);
+ BalsamiqViewer.prototype.renderFile.call(balsamiqViewer, mockArrayBuffer);
});
it('should call .initDatabase', () => {
- expect(balsamiqViewer.initDatabase).toHaveBeenCalledWith(loadEvent.target.response);
+ expect(balsamiqViewer.initDatabase).toHaveBeenCalledWith(mockArrayBuffer);
});
it('should call .getPreviews', () => {
diff --git a/spec/javascripts/blob/viewer/index_spec.js b/spec/javascripts/blob/viewer/index_spec.js
index 4ac15ca5aa2..06c06613887 100644
--- a/spec/javascripts/blob/viewer/index_spec.js
+++ b/spec/javascripts/blob/viewer/index_spec.js
@@ -101,7 +101,7 @@ describe('Blob viewer', () => {
it('has tooltip when disabled', () => {
expect(copyButton.getAttribute('data-original-title')).toBe(
- 'Switch to the source to copy it to the clipboard',
+ 'Switch to the source to copy the file contents',
);
});
@@ -136,7 +136,7 @@ describe('Blob viewer', () => {
document.querySelector('.js-blob-viewer-switch-btn[data-viewer="simple"]').click();
setTimeout(() => {
- expect(copyButton.getAttribute('data-original-title')).toBe('Copy source to clipboard');
+ expect(copyButton.getAttribute('data-original-title')).toBe('Copy file contents');
done();
});
diff --git a/spec/javascripts/boards/board_card_spec.js b/spec/javascripts/boards/board_card_spec.js
index 13b708a03d5..9f441ca319e 100644
--- a/spec/javascripts/boards/board_card_spec.js
+++ b/spec/javascripts/boards/board_card_spec.js
@@ -67,6 +67,16 @@ describe('Board card', () => {
expect(vm.issueDetailVisible).toBe(true);
});
+ it("returns false when multiSelect doesn't contain issue", () => {
+ expect(vm.multiSelectVisible).toBe(false);
+ });
+
+ it('returns true when multiSelect contains issue', () => {
+ boardsStore.multiSelect.list = [vm.issue];
+
+ expect(vm.multiSelectVisible).toBe(true);
+ });
+
it('adds user-can-drag class if not disabled', () => {
expect(vm.$el.classList.contains('user-can-drag')).toBe(true);
});
@@ -180,7 +190,7 @@ describe('Board card', () => {
triggerEvent('mousedown');
triggerEvent('mouseup');
- expect(eventHub.$emit).toHaveBeenCalledWith('newDetailIssue', vm.issue);
+ expect(eventHub.$emit).toHaveBeenCalledWith('newDetailIssue', vm.issue, undefined);
expect(boardsStore.detail.list).toEqual(vm.list);
});
@@ -203,7 +213,7 @@ describe('Board card', () => {
triggerEvent('mousedown');
triggerEvent('mouseup');
- expect(eventHub.$emit).toHaveBeenCalledWith('clearDetailIssue');
+ expect(eventHub.$emit).toHaveBeenCalledWith('clearDetailIssue', undefined);
});
});
});
diff --git a/spec/javascripts/boards/boards_store_spec.js b/spec/javascripts/boards/boards_store_spec.js
index 11352140ba4..678fe5befa8 100644
--- a/spec/javascripts/boards/boards_store_spec.js
+++ b/spec/javascripts/boards/boards_store_spec.js
@@ -12,6 +12,7 @@ import '~/boards/services/board_service';
import boardsStore from '~/boards/stores/boards_store';
import eventHub from '~/boards/eventhub';
import { listObj, listObjDuplicate, boardsMockInterceptor, mockBoardService } from './mock_data';
+import waitForPromises from '../../frontend/helpers/wait_for_promises';
describe('Store', () => {
let mock;
@@ -29,6 +30,13 @@ describe('Store', () => {
}),
);
+ spyOn(gl.boardService, 'moveMultipleIssues').and.callFake(
+ () =>
+ new Promise(resolve => {
+ resolve();
+ }),
+ );
+
Cookies.set('issue_board_welcome_hidden', 'false', {
expires: 365 * 10,
path: '',
@@ -376,4 +384,128 @@ describe('Store', () => {
expect(state.currentBoard).toEqual(dummyBoard);
});
});
+
+ describe('toggleMultiSelect', () => {
+ let basicIssueObj;
+
+ beforeAll(() => {
+ basicIssueObj = { id: 987654 };
+ });
+
+ afterEach(() => {
+ boardsStore.clearMultiSelect();
+ });
+
+ it('adds issue when not present', () => {
+ boardsStore.toggleMultiSelect(basicIssueObj);
+
+ const selectedIds = boardsStore.multiSelect.list.map(x => x.id);
+
+ expect(selectedIds.includes(basicIssueObj.id)).toEqual(true);
+ });
+
+ it('removes issue when issue is present', () => {
+ boardsStore.toggleMultiSelect(basicIssueObj);
+ let selectedIds = boardsStore.multiSelect.list.map(x => x.id);
+
+ expect(selectedIds.includes(basicIssueObj.id)).toEqual(true);
+
+ boardsStore.toggleMultiSelect(basicIssueObj);
+ selectedIds = boardsStore.multiSelect.list.map(x => x.id);
+
+ expect(selectedIds.includes(basicIssueObj.id)).toEqual(false);
+ });
+ });
+
+ describe('clearMultiSelect', () => {
+ it('clears all the multi selected issues', () => {
+ const issue1 = { id: 12345 };
+ const issue2 = { id: 12346 };
+
+ boardsStore.toggleMultiSelect(issue1);
+ boardsStore.toggleMultiSelect(issue2);
+
+ expect(boardsStore.multiSelect.list.length).toEqual(2);
+
+ boardsStore.clearMultiSelect();
+
+ expect(boardsStore.multiSelect.list.length).toEqual(0);
+ });
+ });
+
+ describe('moveMultipleIssuesToList', () => {
+ it('move issues on the new index', done => {
+ const listOne = boardsStore.addList(listObj);
+ const listTwo = boardsStore.addList(listObjDuplicate);
+
+ expect(boardsStore.state.lists.length).toBe(2);
+
+ setTimeout(() => {
+ expect(listOne.issues.length).toBe(1);
+ expect(listTwo.issues.length).toBe(1);
+
+ boardsStore.moveMultipleIssuesToList({
+ listFrom: listOne,
+ listTo: listTwo,
+ issues: listOne.issues,
+ newIndex: 0,
+ });
+
+ expect(listTwo.issues.length).toBe(1);
+
+ done();
+ }, 0);
+ });
+ });
+
+ describe('moveMultipleIssuesInList', () => {
+ it('moves multiple issues in list', done => {
+ const issueObj = {
+ title: 'Issue #1',
+ id: 12345,
+ iid: 2,
+ confidential: false,
+ labels: [],
+ assignees: [],
+ };
+ const issue1 = new ListIssue(issueObj);
+ const issue2 = new ListIssue({
+ ...issueObj,
+ title: 'Issue #2',
+ id: 12346,
+ });
+
+ const list = boardsStore.addList(listObj);
+
+ waitForPromises()
+ .then(() => {
+ list.addIssue(issue1);
+ list.addIssue(issue2);
+
+ expect(list.issues.length).toBe(3);
+ expect(list.issues[0].id).not.toBe(issue2.id);
+
+ boardsStore.moveMultipleIssuesInList({
+ list,
+ issues: [issue1, issue2],
+ oldIndicies: [0],
+ newIndex: 1,
+ idArray: [1, 12345, 12346],
+ });
+
+ expect(list.issues[0].id).toBe(issue1.id);
+
+ expect(gl.boardService.moveMultipleIssues).toHaveBeenCalledWith({
+ ids: [issue1.id, issue2.id],
+ fromListId: null,
+ toListId: null,
+ moveBeforeId: 1,
+ moveAfterId: null,
+ });
+
+ done();
+ })
+ .catch(done.fail);
+ });
+ });
});
diff --git a/spec/javascripts/boards/issue_card_spec.js b/spec/javascripts/boards/issue_card_spec.js
index 8a20911cc66..314e051665e 100644
--- a/spec/javascripts/boards/issue_card_spec.js
+++ b/spec/javascripts/boards/issue_card_spec.js
@@ -32,7 +32,10 @@ describe('Issue card component', () => {
beforeEach(() => {
setFixtures('<div class="test-container"></div>');
- list = listObj;
+ list = {
+ ...listObj,
+ type: 'label',
+ };
issue = new ListIssue({
title: 'Testing',
id: 1,
@@ -42,6 +45,7 @@ describe('Issue card component', () => {
assignees: [],
reference_path: '#1',
real_path: '/test/1',
+ weight: 1,
});
component = new Vue({
@@ -240,8 +244,8 @@ describe('Issue card component', () => {
Vue.nextTick(() => done());
});
- it('renders list label', () => {
- expect(component.$el.querySelectorAll('.badge').length).toBe(2);
+ it('does not render list label but renders all other labels', () => {
+ expect(component.$el.querySelectorAll('.badge').length).toBe(1);
});
it('renders label', () => {
@@ -277,7 +281,7 @@ describe('Issue card component', () => {
Vue.nextTick()
.then(() => {
- expect(component.$el.querySelectorAll('.badge').length).toBe(2);
+ expect(component.$el.querySelectorAll('.badge').length).toBe(1);
expect(component.$el.textContent).not.toContain('closed');
done();
@@ -285,10 +289,4 @@ describe('Issue card component', () => {
.catch(done.fail);
});
});
-
- describe('weights', () => {
- it('not shows weight component', () => {
- expect(component.$el.querySelector('.board-card-weight')).toBeNull();
- });
- });
});
diff --git a/spec/javascripts/boards/mock_data.js b/spec/javascripts/boards/mock_data.js
index 50ad1442873..41b8f567e08 100644
--- a/spec/javascripts/boards/mock_data.js
+++ b/spec/javascripts/boards/mock_data.js
@@ -15,7 +15,7 @@ export const listObj = {
weight: 3,
label: {
id: 5000,
- title: 'Testing',
+ title: 'Test',
color: 'red',
description: 'testing;',
textColor: 'white',
@@ -30,7 +30,7 @@ export const listObjDuplicate = {
weight: 3,
label: {
id: listObj.label.id,
- title: 'Testing',
+ title: 'Test',
color: 'red',
description: 'testing;',
},
diff --git a/spec/javascripts/commit/commit_pipeline_status_component_spec.js b/spec/javascripts/commit/commit_pipeline_status_component_spec.js
deleted file mode 100644
index f6b36e88a5f..00000000000
--- a/spec/javascripts/commit/commit_pipeline_status_component_spec.js
+++ /dev/null
@@ -1,106 +0,0 @@
-import Vue from 'vue';
-import MockAdapter from 'axios-mock-adapter';
-import axios from '~/lib/utils/axios_utils';
-import commitPipelineStatus from '~/projects/tree/components/commit_pipeline_status_component.vue';
-import mountComponent from 'spec/helpers/vue_mount_component_helper';
-
-describe('Commit pipeline status component', () => {
- let vm;
- let Component;
- let mock;
- const mockCiStatus = {
- details_path: '/root/hello-world/pipelines/1',
- favicon: 'canceled.ico',
- group: 'canceled',
- has_details: true,
- icon: 'status_canceled',
- label: 'canceled',
- text: 'canceled',
- };
-
- beforeEach(() => {
- Component = Vue.extend(commitPipelineStatus);
- });
-
- describe('While polling pipeline data successfully', () => {
- beforeEach(() => {
- mock = new MockAdapter(axios);
- mock.onGet('/dummy/endpoint').reply(() => {
- const res = Promise.resolve([
- 200,
- {
- pipelines: [
- {
- details: {
- status: mockCiStatus,
- },
- },
- ],
- },
- ]);
- return res;
- });
- vm = mountComponent(Component, {
- endpoint: '/dummy/endpoint',
- });
- });
-
- afterEach(() => {
- vm.poll.stop();
- vm.$destroy();
- mock.restore();
- });
-
- it('shows the loading icon when polling is starting', done => {
- expect(vm.$el.querySelector('.loading-container')).not.toBe(null);
- setTimeout(() => {
- expect(vm.$el.querySelector('.loading-container')).toBe(null);
- done();
- });
- });
-
- it('contains a ciStatus when the polling is successful ', done => {
- setTimeout(() => {
- expect(vm.ciStatus).toEqual(mockCiStatus);
- done();
- });
- });
-
- it('contains a ci-status icon when polling is successful', done => {
- setTimeout(() => {
- expect(vm.$el.querySelector('.ci-status-icon')).not.toBe(null);
- expect(vm.$el.querySelector('.ci-status-icon').classList).toContain(
- `ci-status-icon-${mockCiStatus.group}`,
- );
- done();
- });
- });
- });
-
- describe('When polling data was not successful', () => {
- beforeEach(() => {
- mock = new MockAdapter(axios);
- mock.onGet('/dummy/endpoint').reply(502, {});
- vm = new Component({
- props: {
- endpoint: '/dummy/endpoint',
- },
- });
- });
-
- afterEach(() => {
- vm.poll.stop();
- vm.$destroy();
- mock.restore();
- });
-
- it('calls an errorCallback', done => {
- spyOn(vm, 'errorCallback').and.callThrough();
- vm.$mount();
- setTimeout(() => {
- expect(vm.errorCallback.calls.count()).toEqual(1);
- done();
- });
- });
- });
-});
diff --git a/spec/javascripts/create_cluster/.eslintrc.yml b/spec/javascripts/create_cluster/.eslintrc.yml
new file mode 100644
index 00000000000..14e318a2f3e
--- /dev/null
+++ b/spec/javascripts/create_cluster/.eslintrc.yml
@@ -0,0 +1,3 @@
+rules:
+ # https://gitlab.com/gitlab-org/gitlab/issues/33025
+ promise/no-nesting: off
diff --git a/spec/javascripts/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js b/spec/javascripts/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js
index 809da3f9088..016ecfb35b8 100644
--- a/spec/javascripts/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js
+++ b/spec/javascripts/create_cluster/gke_cluster/components/gke_project_id_dropdown_spec.js
@@ -4,6 +4,7 @@ import { createStore } from '~/create_cluster/gke_cluster/store';
import { SET_PROJECTS } from '~/create_cluster/gke_cluster/store/mutation_types';
import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
import { emptyProjectMock, selectedProjectMock } from '../mock_data';
+import { gapi } from '../helpers';
const componentConfig = {
docsUrl: 'https://console.cloud.google.com/home/dashboard',
@@ -32,6 +33,16 @@ describe('GkeProjectIdDropdown', () => {
let vm;
let store;
+ let originalGapi;
+ beforeAll(() => {
+ originalGapi = window.gapi;
+ window.gapi = gapi();
+ });
+
+ afterAll(() => {
+ window.gapi = originalGapi;
+ });
+
beforeEach(() => {
store = createStore();
vm = createComponent(store);
diff --git a/spec/javascripts/create_cluster/gke_cluster/stores/actions_spec.js b/spec/javascripts/create_cluster/gke_cluster/stores/actions_spec.js
index a7591cc38c7..7ceaeace82f 100644
--- a/spec/javascripts/create_cluster/gke_cluster/stores/actions_spec.js
+++ b/spec/javascripts/create_cluster/gke_cluster/stores/actions_spec.js
@@ -64,7 +64,15 @@ describe('GCP Cluster Dropdown Store Actions', () => {
});
describe('async fetch methods', () => {
- window.gapi = gapi();
+ let originalGapi;
+ beforeAll(() => {
+ originalGapi = window.gapi;
+ window.gapi = gapi();
+ });
+
+ afterAll(() => {
+ window.gapi = originalGapi;
+ });
describe('fetchProjects', () => {
it('fetches projects from Google API', done => {
diff --git a/spec/javascripts/flash_spec.js b/spec/javascripts/flash_spec.js
index bd8608b6bac..28fa87ac097 100644
--- a/spec/javascripts/flash_spec.js
+++ b/spec/javascripts/flash_spec.js
@@ -176,7 +176,7 @@ describe('Flash', () => {
it('removes element after clicking', () => {
flash('test', 'alert', document, null, false, true);
- document.querySelector('.flash-alert').click();
+ document.querySelector('.flash-alert .js-close-icon').click();
expect(document.querySelector('.flash-alert')).toBeNull();
@@ -210,7 +210,13 @@ describe('Flash', () => {
describe('removeFlashClickListener', () => {
beforeEach(() => {
- document.body.innerHTML += '<div class="flash-container"><div class="flash"></div></div>';
+ document.body.innerHTML += `
+ <div class="flash-container">
+ <div class="flash">
+ <div class="close-icon js-close-icon"></div>
+ </div>
+ </div>
+ `;
});
it('removes global flash on click', done => {
@@ -218,7 +224,7 @@ describe('Flash', () => {
removeFlashClickListener(flashEl, false);
- flashEl.click();
+ flashEl.querySelector('.js-close-icon').click();
setTimeout(() => {
expect(document.querySelector('.flash')).toBeNull();
diff --git a/spec/javascripts/frequent_items/components/app_spec.js b/spec/javascripts/frequent_items/components/app_spec.js
index 6814f656f5d..36dd8604d08 100644
--- a/spec/javascripts/frequent_items/components/app_spec.js
+++ b/spec/javascripts/frequent_items/components/app_spec.js
@@ -236,8 +236,15 @@ describe('Frequent Items App Component', () => {
.then(() => {
expect(vm.$el.querySelector('.loading-animation')).toBeDefined();
})
+
+ // This test waits for multiple ticks in order to allow the responses to
+ // propagate through each interceptor installed on the Axios instance.
+ // This shouldn't be necessary; this test should be refactored to avoid this.
+ // https://gitlab.com/gitlab-org/gitlab/issues/32479
+ .then(vm.$nextTick)
.then(vm.$nextTick)
.then(vm.$nextTick)
+
.then(() => {
expect(vm.$el.querySelectorAll('.frequent-items-list-container li').length).toBe(
mockSearchedProjects.length,
diff --git a/spec/javascripts/header_spec.js b/spec/javascripts/header_spec.js
index 0ddf589f368..c36d3be1b22 100644
--- a/spec/javascripts/header_spec.js
+++ b/spec/javascripts/header_spec.js
@@ -20,26 +20,26 @@ describe('Header', function() {
});
it('should update todos-count after receiving the todo:toggle event', () => {
- triggerToggle('5');
+ triggerToggle(5);
expect($(todosPendingCount).text()).toEqual('5');
});
it('should hide todos-count when it is 0', () => {
- triggerToggle('0');
+ triggerToggle(0);
expect(isTodosCountHidden()).toEqual(true);
});
it('should show todos-count when it is more than 0', () => {
- triggerToggle('10');
+ triggerToggle(10);
expect(isTodosCountHidden()).toEqual(false);
});
describe('when todos-count is 1000', () => {
beforeEach(() => {
- triggerToggle('1000');
+ triggerToggle(1000);
});
it('should show todos-count', () => {
diff --git a/spec/javascripts/helpers/tracking_helper.js b/spec/javascripts/helpers/tracking_helper.js
new file mode 100644
index 00000000000..68c1bd2dbca
--- /dev/null
+++ b/spec/javascripts/helpers/tracking_helper.js
@@ -0,0 +1,25 @@
+import Tracking from '~/tracking';
+
+export default Tracking;
+
+let document;
+let handlers;
+
+export function mockTracking(category = '_category_', documentOverride, spyMethod) {
+ document = documentOverride || window.document;
+ window.snowplow = () => {};
+ Tracking.bindDocument(category, document);
+ return spyMethod ? spyMethod(Tracking, 'event') : null;
+}
+
+export function unmockTracking() {
+ window.snowplow = undefined;
+ handlers.forEach(event => document.removeEventListener(event.name, event.func));
+}
+
+export function triggerEvent(selectorOrEl, eventName = 'click') {
+ const event = new Event(eventName, { bubbles: true });
+ const el = typeof selectorOrEl === 'string' ? document.querySelector(selectorOrEl) : selectorOrEl;
+
+ el.dispatchEvent(event);
+}
diff --git a/spec/javascripts/helpers/vue_resource_helper.js b/spec/javascripts/helpers/vue_resource_helper.js
deleted file mode 100644
index 0f58af09933..00000000000
--- a/spec/javascripts/helpers/vue_resource_helper.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// eslint-disable-next-line import/prefer-default-export
-export const headersInterceptor = (request, next) => {
- next(response => {
- const headers = {};
- response.headers.forEach((value, key) => {
- headers[key] = value;
- });
- // eslint-disable-next-line no-param-reassign
- response.headers = headers;
- });
-};
diff --git a/spec/javascripts/ide/components/branches/search_list_spec.js b/spec/javascripts/ide/components/branches/search_list_spec.js
deleted file mode 100644
index 72a3c2d5dcd..00000000000
--- a/spec/javascripts/ide/components/branches/search_list_spec.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import Vue from 'vue';
-import store from '~/ide/stores';
-import * as types from '~/ide/stores/modules/branches/mutation_types';
-import List from '~/ide/components/branches/search_list.vue';
-import { createComponentWithStore } from '../../../helpers/vue_mount_component_helper';
-import { branches as testBranches } from '../../mock_data';
-import { resetStore } from '../../helpers';
-
-describe('IDE branches search list', () => {
- const Component = Vue.extend(List);
- let vm;
-
- beforeEach(() => {
- vm = createComponentWithStore(Component, store, {});
-
- spyOn(vm, 'fetchBranches');
-
- vm.$mount();
- });
-
- afterEach(() => {
- vm.$destroy();
-
- resetStore(store);
- });
-
- it('calls fetch on mounted', () => {
- expect(vm.fetchBranches).toHaveBeenCalledWith({
- search: '',
- });
- });
-
- it('renders loading icon', done => {
- vm.$store.state.branches.isLoading = true;
-
- vm.$nextTick()
- .then(() => {
- expect(vm.$el).toContainElement('.loading-container');
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('renders branches not found when search is not empty', done => {
- vm.search = 'testing';
-
- vm.$nextTick(() => {
- expect(vm.$el).toContainText('No branches found');
-
- done();
- });
- });
-
- describe('with branches', () => {
- const currentBranch = testBranches[1];
-
- beforeEach(done => {
- vm.$store.state.currentBranchId = currentBranch.name;
- vm.$store.commit(`branches/${types.RECEIVE_BRANCHES_SUCCESS}`, testBranches);
-
- vm.$nextTick(done);
- });
-
- it('renders list', () => {
- const elementText = Array.from(vm.$el.querySelectorAll('li strong')).map(x =>
- x.textContent.trim(),
- );
-
- expect(elementText).toEqual(testBranches.map(x => x.name));
- });
-
- it('renders check next to active branch', () => {
- const checkedText = Array.from(vm.$el.querySelectorAll('li'))
- .filter(x => x.querySelector('.ide-search-list-current-icon svg'))
- .map(x => x.querySelector('strong').textContent.trim());
-
- expect(checkedText).toEqual([currentBranch.name]);
- });
- });
-});
diff --git a/spec/javascripts/ide/components/commit_sidebar/list_item_spec.js b/spec/javascripts/ide/components/commit_sidebar/list_item_spec.js
index bf48d7bfdad..c1dcd4928a0 100644
--- a/spec/javascripts/ide/components/commit_sidebar/list_item_spec.js
+++ b/spec/javascripts/ide/components/commit_sidebar/list_item_spec.js
@@ -2,12 +2,14 @@ import Vue from 'vue';
import store from '~/ide/stores';
import listItem from '~/ide/components/commit_sidebar/list_item.vue';
import router from '~/ide/ide_router';
+import { trimText } from 'spec/helpers/text_helper';
import { createComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
import { file, resetStore } from '../../helpers';
describe('Multi-file editor commit sidebar list item', () => {
let vm;
let f;
+ let findPathEl;
beforeEach(() => {
const Component = Vue.extend(listItem);
@@ -21,6 +23,8 @@ describe('Multi-file editor commit sidebar list item', () => {
actionComponent: 'stage-button',
activeFileKey: `staged-${f.key}`,
}).$mount();
+
+ findPathEl = vm.$el.querySelector('.multi-file-commit-list-path');
});
afterEach(() => {
@@ -29,15 +33,39 @@ describe('Multi-file editor commit sidebar list item', () => {
resetStore(store);
});
+ const findPathText = () => trimText(findPathEl.textContent);
+
it('renders file path', () => {
- expect(vm.$el.querySelector('.multi-file-commit-list-path').textContent).toContain(f.path);
+ expect(findPathText()).toContain(f.path);
+ });
+
+ it('correctly renders renamed entries', done => {
+ Vue.set(vm.file, 'prevName', 'Old name');
+
+ vm.$nextTick()
+ .then(() => {
+ expect(findPathText()).toEqual(`Old name → ${f.name}`);
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('correctly renders entry, the name of which did not change after rename (as within a folder)', done => {
+ Vue.set(vm.file, 'prevName', f.name);
+
+ vm.$nextTick()
+ .then(() => {
+ expect(findPathText()).toEqual(f.name);
+ })
+ .then(done)
+ .catch(done.fail);
});
it('opens a closed file in the editor when clicking the file path', done => {
spyOn(vm, 'openPendingTab').and.callThrough();
spyOn(router, 'push');
- vm.$el.querySelector('.multi-file-commit-list-path').click();
+ findPathEl.click();
setTimeout(() => {
expect(vm.openPendingTab).toHaveBeenCalled();
@@ -52,7 +80,7 @@ describe('Multi-file editor commit sidebar list item', () => {
spyOn(vm, 'updateViewer').and.callThrough();
spyOn(router, 'push');
- vm.$el.querySelector('.multi-file-commit-list-path').click();
+ findPathEl.click();
setTimeout(() => {
expect(vm.updateViewer).toHaveBeenCalledWith('diff');
diff --git a/spec/javascripts/ide/components/error_message_spec.js b/spec/javascripts/ide/components/error_message_spec.js
deleted file mode 100644
index 80d6c7fd564..00000000000
--- a/spec/javascripts/ide/components/error_message_spec.js
+++ /dev/null
@@ -1,106 +0,0 @@
-import Vue from 'vue';
-import store from '~/ide/stores';
-import ErrorMessage from '~/ide/components/error_message.vue';
-import { createComponentWithStore } from '../../helpers/vue_mount_component_helper';
-import { resetStore } from '../helpers';
-
-describe('IDE error message component', () => {
- const Component = Vue.extend(ErrorMessage);
- let vm;
-
- beforeEach(() => {
- vm = createComponentWithStore(Component, store, {
- message: {
- text: 'error message',
- action: null,
- actionText: null,
- },
- }).$mount();
- });
-
- afterEach(() => {
- vm.$destroy();
- resetStore(vm.$store);
- });
-
- it('renders error message', () => {
- expect(vm.$el.textContent).toContain('error message');
- });
-
- it('clears error message on click', () => {
- spyOn(vm, 'setErrorMessage');
-
- vm.$el.click();
-
- expect(vm.setErrorMessage).toHaveBeenCalledWith(null);
- });
-
- describe('with action', () => {
- let actionSpy;
-
- beforeEach(done => {
- actionSpy = jasmine.createSpy('action').and.returnValue(Promise.resolve());
-
- vm.message.action = actionSpy;
- vm.message.actionText = 'test action';
- vm.message.actionPayload = 'testActionPayload';
-
- vm.$nextTick(done);
- });
-
- it('renders action button', () => {
- expect(vm.$el.querySelector('.flash-action')).not.toBe(null);
- expect(vm.$el.textContent).toContain('test action');
- });
-
- it('does not clear error message on click', () => {
- spyOn(vm, 'setErrorMessage');
-
- vm.$el.click();
-
- expect(vm.setErrorMessage).not.toHaveBeenCalled();
- });
-
- it('dispatches action', done => {
- vm.$el.querySelector('.flash-action').click();
-
- vm.$nextTick(() => {
- expect(actionSpy).toHaveBeenCalledWith('testActionPayload');
-
- done();
- });
- });
-
- it('does not dispatch action when already loading', () => {
- vm.isLoading = true;
-
- vm.$el.querySelector('.flash-action').click();
-
- expect(actionSpy).not.toHaveBeenCalledWith();
- });
-
- it('resets isLoading after click', done => {
- vm.$el.querySelector('.flash-action').click();
-
- expect(vm.isLoading).toBe(true);
-
- setTimeout(() => {
- expect(vm.isLoading).toBe(false);
-
- done();
- });
- });
-
- it('shows loading icon when isLoading is true', done => {
- expect(vm.$el.querySelector('.loading-container').style.display).not.toBe('');
-
- vm.isLoading = true;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.loading-container').style.display).toBe('');
-
- done();
- });
- });
- });
-});
diff --git a/spec/javascripts/ide/components/file_row_extra_spec.js b/spec/javascripts/ide/components/file_row_extra_spec.js
index d7fed3f0681..86146fcef69 100644
--- a/spec/javascripts/ide/components/file_row_extra_spec.js
+++ b/spec/javascripts/ide/components/file_row_extra_spec.js
@@ -139,6 +139,27 @@ describe('IDE extra file row component', () => {
done();
});
});
+
+ it('shows when file is renamed', done => {
+ vm.file.prevPath = 'original-file';
+
+ vm.$nextTick(() => {
+ expect(vm.$el.querySelector('.file-changed-icon')).not.toBe(null);
+
+ done();
+ });
+ });
+
+ it('hides when file is renamed', done => {
+ vm.file.prevPath = 'original-file';
+ vm.file.type = 'tree';
+
+ vm.$nextTick(() => {
+ expect(vm.$el.querySelector('.file-changed-icon')).toBe(null);
+
+ done();
+ });
+ });
});
describe('merge request icon', () => {
diff --git a/spec/javascripts/ide/components/file_templates/dropdown_spec.js b/spec/javascripts/ide/components/file_templates/dropdown_spec.js
deleted file mode 100644
index 898796f4fa0..00000000000
--- a/spec/javascripts/ide/components/file_templates/dropdown_spec.js
+++ /dev/null
@@ -1,201 +0,0 @@
-import $ from 'jquery';
-import Vue from 'vue';
-import { createStore } from '~/ide/stores';
-import Dropdown from '~/ide/components/file_templates/dropdown.vue';
-import { createComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
-import { resetStore } from '../../helpers';
-
-describe('IDE file templates dropdown component', () => {
- let Component;
- let vm;
-
- beforeAll(() => {
- Component = Vue.extend(Dropdown);
- });
-
- beforeEach(() => {
- const store = createStore();
-
- vm = createComponentWithStore(Component, store, {
- label: 'Test',
- }).$mount();
- });
-
- afterEach(() => {
- vm.$destroy();
- resetStore(vm.$store);
- });
-
- describe('async', () => {
- beforeEach(() => {
- vm.isAsyncData = true;
- });
-
- it('calls async store method on Bootstrap dropdown event', () => {
- spyOn(vm, 'fetchTemplateTypes').and.stub();
-
- $(vm.$el).trigger('show.bs.dropdown');
-
- expect(vm.fetchTemplateTypes).toHaveBeenCalled();
- });
-
- it('renders templates when async', done => {
- vm.$store.state.fileTemplates.templates = [
- {
- name: 'test',
- },
- ];
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.dropdown-content').textContent).toContain('test');
-
- done();
- });
- });
-
- it('renders loading icon when isLoading is true', done => {
- vm.$store.state.fileTemplates.isLoading = true;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.loading-container')).not.toBe(null);
-
- done();
- });
- });
-
- it('searches template data', () => {
- vm.$store.state.fileTemplates.templates = [
- {
- name: 'test',
- },
- ];
- vm.searchable = true;
- vm.search = 'hello';
-
- expect(vm.outputData).toEqual([]);
- });
-
- it('does not filter data is searchable is false', () => {
- vm.$store.state.fileTemplates.templates = [
- {
- name: 'test',
- },
- ];
- vm.search = 'hello';
-
- expect(vm.outputData).toEqual([
- {
- name: 'test',
- },
- ]);
- });
-
- it('calls clickItem on click', done => {
- spyOn(vm, 'clickItem').and.stub();
-
- vm.$store.state.fileTemplates.templates = [
- {
- name: 'test',
- },
- ];
-
- vm.$nextTick(() => {
- vm.$el.querySelector('.dropdown-content button').click();
-
- expect(vm.clickItem).toHaveBeenCalledWith({
- name: 'test',
- });
-
- done();
- });
- });
-
- it('renders input when searchable is true', done => {
- vm.searchable = true;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.dropdown-input')).not.toBe(null);
-
- done();
- });
- });
-
- it('does not render input when searchable is true & showLoading is true', done => {
- vm.searchable = true;
- vm.$store.state.fileTemplates.isLoading = true;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.dropdown-input')).toBe(null);
-
- done();
- });
- });
- });
-
- describe('sync', () => {
- beforeEach(done => {
- vm.data = [
- {
- name: 'test sync',
- },
- ];
-
- vm.$nextTick(done);
- });
-
- it('renders props data', () => {
- expect(vm.$el.querySelector('.dropdown-content').textContent).toContain('test sync');
- });
-
- it('renders input when searchable is true', done => {
- vm.searchable = true;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.dropdown-input')).not.toBe(null);
-
- done();
- });
- });
-
- it('calls clickItem on click', done => {
- spyOn(vm, 'clickItem').and.stub();
-
- vm.$nextTick(() => {
- vm.$el.querySelector('.dropdown-content button').click();
-
- expect(vm.clickItem).toHaveBeenCalledWith({
- name: 'test sync',
- });
-
- done();
- });
- });
-
- it('searches template data', () => {
- vm.searchable = true;
- vm.search = 'hello';
-
- expect(vm.outputData).toEqual([]);
- });
-
- it('does not filter data is searchable is false', () => {
- vm.search = 'hello';
-
- expect(vm.outputData).toEqual([
- {
- name: 'test sync',
- },
- ]);
- });
-
- it('renders dropdown title', done => {
- vm.title = 'Test title';
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.dropdown-title').textContent).toContain('Test title');
-
- done();
- });
- });
- });
-});
diff --git a/spec/javascripts/ide/components/ide_tree_list_spec.js b/spec/javascripts/ide/components/ide_tree_list_spec.js
index 554bd1ae3b5..f63007c7dd2 100644
--- a/spec/javascripts/ide/components/ide_tree_list_spec.js
+++ b/spec/javascripts/ide/components/ide_tree_list_spec.js
@@ -58,20 +58,6 @@ describe('IDE tree list', () => {
it('renders list of files', () => {
expect(vm.$el.textContent).toContain('fileName');
});
-
- it('does not render moved entries', done => {
- const tree = [file('moved entry'), file('normal entry')];
- tree[0].moved = true;
- store.state.trees['abcproject/master'].tree = tree;
- const container = vm.$el.querySelector('.ide-tree-body');
-
- vm.$nextTick(() => {
- expect(container.children.length).toBe(1);
- expect(vm.$el.textContent).not.toContain('moved entry');
- expect(vm.$el.textContent).toContain('normal entry');
- done();
- });
- });
});
describe('empty-branch state', () => {
diff --git a/spec/javascripts/ide/components/jobs/list_spec.js b/spec/javascripts/ide/components/jobs/list_spec.js
deleted file mode 100644
index b24853c56fa..00000000000
--- a/spec/javascripts/ide/components/jobs/list_spec.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import Vue from 'vue';
-import StageList from '~/ide/components/jobs/list.vue';
-import { createStore } from '~/ide/stores';
-import { createComponentWithStore } from '../../../helpers/vue_mount_component_helper';
-import { stages, jobs } from '../../mock_data';
-
-describe('IDE stages list', () => {
- const Component = Vue.extend(StageList);
- let vm;
-
- beforeEach(() => {
- const store = createStore();
-
- vm = createComponentWithStore(Component, store, {
- stages: stages.map((mappedState, i) => ({
- ...mappedState,
- id: i,
- dropdownPath: mappedState.dropdown_path,
- jobs: [...jobs],
- isLoading: false,
- isCollapsed: false,
- })),
- loading: false,
- });
-
- spyOn(vm, 'fetchJobs');
- spyOn(vm, 'toggleStageCollapsed');
-
- vm.$mount();
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- it('renders list of stages', () => {
- expect(vm.$el.querySelectorAll('.card').length).toBe(2);
- });
-
- it('renders loading icon when no stages & is loading', done => {
- vm.stages = [];
- vm.loading = true;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.loading-container')).not.toBe(null);
-
- done();
- });
- });
-
- it('calls toggleStageCollapsed when clicking stage header', done => {
- vm.$el.querySelector('.card-header').click();
-
- vm.$nextTick(() => {
- expect(vm.toggleStageCollapsed).toHaveBeenCalledWith(0);
-
- done();
- });
- });
-
- it('calls fetchJobs when stage is mounted', () => {
- expect(vm.fetchJobs.calls.count()).toBe(stages.length);
-
- expect(vm.fetchJobs.calls.argsFor(0)).toEqual([vm.stages[0]]);
- expect(vm.fetchJobs.calls.argsFor(1)).toEqual([vm.stages[1]]);
- });
-});
diff --git a/spec/javascripts/ide/components/merge_requests/list_spec.js b/spec/javascripts/ide/components/merge_requests/list_spec.js
deleted file mode 100644
index 55e4f46d9ca..00000000000
--- a/spec/javascripts/ide/components/merge_requests/list_spec.js
+++ /dev/null
@@ -1,159 +0,0 @@
-import Vue from 'vue';
-import store from '~/ide/stores';
-import List from '~/ide/components/merge_requests/list.vue';
-import { createComponentWithStore } from '../../../helpers/vue_mount_component_helper';
-import { mergeRequests } from '../../mock_data';
-import { resetStore } from '../../helpers';
-
-describe('IDE merge requests list', () => {
- const Component = Vue.extend(List);
- let vm;
-
- beforeEach(() => {
- vm = createComponentWithStore(Component, store, {});
-
- spyOn(vm, 'fetchMergeRequests');
-
- vm.$mount();
- });
-
- afterEach(() => {
- vm.$destroy();
-
- resetStore(vm.$store);
- });
-
- it('calls fetch on mounted', () => {
- expect(vm.fetchMergeRequests).toHaveBeenCalledWith({
- search: '',
- type: '',
- });
- });
-
- it('renders loading icon', done => {
- vm.$store.state.mergeRequests.isLoading = true;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.loading-container')).not.toBe(null);
-
- done();
- });
- });
-
- it('renders no search results text when search is not empty', done => {
- vm.search = 'testing';
-
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain('No merge requests found');
-
- done();
- });
- });
-
- it('clicking on search type, sets currentSearchType and loads merge requests', done => {
- vm.onSearchFocus();
-
- vm.$nextTick()
- .then(() => {
- vm.$el.querySelector('li button').click();
-
- return vm.$nextTick();
- })
- .then(() => {
- expect(vm.currentSearchType).toEqual(vm.$options.searchTypes[0]);
- expect(vm.fetchMergeRequests).toHaveBeenCalledWith({
- type: vm.currentSearchType.type,
- search: '',
- });
- })
- .then(done)
- .catch(done.fail);
- });
-
- describe('with merge requests', () => {
- beforeEach(done => {
- vm.$store.state.mergeRequests.mergeRequests.push({
- ...mergeRequests[0],
- projectPathWithNamespace: 'gitlab-org/gitlab-ce',
- });
-
- vm.$nextTick(done);
- });
-
- it('renders list', () => {
- expect(vm.$el.querySelectorAll('li').length).toBe(1);
- expect(vm.$el.querySelector('li').textContent).toContain(mergeRequests[0].title);
- });
- });
-
- describe('searchMergeRequests', () => {
- beforeEach(() => {
- spyOn(vm, 'loadMergeRequests');
-
- jasmine.clock().install();
- });
-
- afterEach(() => {
- jasmine.clock().uninstall();
- });
-
- it('calls loadMergeRequests on input in search field', () => {
- const event = new Event('input');
-
- vm.$el.querySelector('input').dispatchEvent(event);
-
- jasmine.clock().tick(300);
-
- expect(vm.loadMergeRequests).toHaveBeenCalled();
- });
- });
-
- describe('onSearchFocus', () => {
- it('shows search types', done => {
- vm.$el.querySelector('input').dispatchEvent(new Event('focus'));
-
- expect(vm.hasSearchFocus).toBe(true);
- expect(vm.showSearchTypes).toBe(true);
-
- vm.$nextTick()
- .then(() => {
- const expectedSearchTypes = vm.$options.searchTypes.map(x => x.label);
- const renderedSearchTypes = Array.from(vm.$el.querySelectorAll('li')).map(x =>
- x.textContent.trim(),
- );
-
- expect(renderedSearchTypes).toEqual(expectedSearchTypes);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('does not show search types, if already has search value', () => {
- vm.search = 'lorem ipsum';
- vm.$el.querySelector('input').dispatchEvent(new Event('focus'));
-
- expect(vm.hasSearchFocus).toBe(true);
- expect(vm.showSearchTypes).toBe(false);
- });
-
- it('does not show search types, if already has a search type', () => {
- vm.currentSearchType = {};
- vm.$el.querySelector('input').dispatchEvent(new Event('focus'));
-
- expect(vm.hasSearchFocus).toBe(true);
- expect(vm.showSearchTypes).toBe(false);
- });
-
- it('resets hasSearchFocus when search changes', done => {
- vm.hasSearchFocus = true;
- vm.search = 'something else';
-
- vm.$nextTick()
- .then(() => {
- expect(vm.hasSearchFocus).toBe(false);
- })
- .then(done)
- .catch(done.fail);
- });
- });
-});
diff --git a/spec/javascripts/ide/components/pipelines/list_spec.js b/spec/javascripts/ide/components/pipelines/list_spec.js
deleted file mode 100644
index 80829f2358a..00000000000
--- a/spec/javascripts/ide/components/pipelines/list_spec.js
+++ /dev/null
@@ -1,137 +0,0 @@
-import Vue from 'vue';
-import MockAdapter from 'axios-mock-adapter';
-import axios from '~/lib/utils/axios_utils';
-import { createStore } from '~/ide/stores';
-import List from '~/ide/components/pipelines/list.vue';
-import { createComponentWithStore } from '../../../helpers/vue_mount_component_helper';
-import { pipelines, projectData, stages, jobs } from '../../mock_data';
-
-describe('IDE pipelines list', () => {
- const Component = Vue.extend(List);
- let vm;
- let mock;
-
- const findLoadingState = () => vm.$el.querySelector('.loading-container');
-
- beforeEach(done => {
- const store = createStore();
-
- mock = new MockAdapter(axios);
-
- store.state.currentProjectId = 'abc/def';
- store.state.currentBranchId = 'master';
- store.state.projects['abc/def'] = {
- ...projectData,
- path_with_namespace: 'abc/def',
- branches: {
- master: { commit: { id: '123' } },
- },
- };
- store.state.links = { ciHelpPagePath: gl.TEST_HOST };
- store.state.pipelinesEmptyStateSvgPath = gl.TEST_HOST;
- store.state.pipelines.stages = stages.map((mappedState, i) => ({
- ...mappedState,
- id: i,
- dropdownPath: mappedState.dropdown_path,
- jobs: [...jobs],
- isLoading: false,
- isCollapsed: false,
- }));
-
- mock
- .onGet('/abc/def/commit/123/pipelines')
- .replyOnce(200, { pipelines: [...pipelines] }, { 'poll-interval': '-1' });
-
- vm = createComponentWithStore(Component, store).$mount();
-
- setTimeout(done);
- });
-
- afterEach(done => {
- vm.$destroy();
- mock.restore();
-
- vm.$store
- .dispatch('pipelines/stopPipelinePolling')
- .then(() => vm.$store.dispatch('pipelines/clearEtagPoll'))
- .then(done)
- .catch(done.fail);
- });
-
- it('renders pipeline data', () => {
- expect(vm.$el.textContent).toContain('#1');
- });
-
- it('renders CI icon', () => {
- expect(vm.$el.querySelector('.ci-status-icon-failed')).not.toBe(null);
- });
-
- it('renders list of jobs', () => {
- expect(vm.$el.querySelectorAll('.tab-pane:first-child .ide-job-item').length).toBe(
- jobs.length * stages.length,
- );
- });
-
- it('renders list of failed jobs on failed jobs tab', done => {
- vm.$el.querySelectorAll('.tab-links a')[1].click();
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelectorAll('.tab-pane.active .ide-job-item').length).toBe(2);
-
- done();
- });
- });
-
- describe('YAML error', () => {
- it('renders YAML error', done => {
- vm.$store.state.pipelines.latestPipeline.yamlError = 'test yaml error';
-
- vm.$nextTick(() => {
- expect(vm.$el.textContent).toContain('Found errors in your .gitlab-ci.yml:');
- expect(vm.$el.textContent).toContain('test yaml error');
-
- done();
- });
- });
- });
-
- describe('empty state', () => {
- it('renders pipelines empty state', done => {
- vm.$store.state.pipelines.latestPipeline = null;
-
- vm.$nextTick(() => {
- expect(vm.$el.querySelector('.empty-state')).not.toBe(null);
-
- done();
- });
- });
- });
-
- describe('loading state', () => {
- beforeEach(() => {
- vm.$store.state.pipelines.isLoadingPipeline = true;
- });
-
- it('does not render when pipeline has loaded before', done => {
- vm.$store.state.pipelines.hasLoadedPipeline = true;
-
- vm.$nextTick()
- .then(() => {
- expect(findLoadingState()).toBe(null);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('renders loading state when there is no latest pipeline', done => {
- vm.$store.state.pipelines.hasLoadedPipeline = false;
-
- vm.$nextTick()
- .then(() => {
- expect(findLoadingState()).not.toBe(null);
- })
- .then(done)
- .catch(done.fail);
- });
- });
-});
diff --git a/spec/javascripts/ide/components/repo_editor_spec.js b/spec/javascripts/ide/components/repo_editor_spec.js
index 0701b773e17..d1b43df74b9 100644
--- a/spec/javascripts/ide/components/repo_editor_spec.js
+++ b/spec/javascripts/ide/components/repo_editor_spec.js
@@ -410,10 +410,23 @@ describe('RepoEditor', () => {
describe('initEditor', () => {
beforeEach(() => {
+ vm.file.tempFile = false;
spyOn(vm.editor, 'createInstance');
spyOnProperty(vm, 'shouldHideEditor').and.returnValue(true);
});
+ it('does not fetch file information for temp entries', done => {
+ vm.file.tempFile = true;
+
+ vm.initEditor();
+ vm.$nextTick()
+ .then(() => {
+ expect(vm.getFileData).not.toHaveBeenCalled();
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
it('is being initialised for files without content even if shouldHideEditor is `true`', done => {
vm.file.content = '';
vm.file.raw = '';
@@ -429,16 +442,13 @@ describe('RepoEditor', () => {
});
it('does not initialize editor for files already with content', done => {
- expect(vm.getFileData.calls.count()).toEqual(1);
- expect(vm.getRawFileData.calls.count()).toEqual(1);
-
vm.file.content = 'foo';
vm.initEditor();
vm.$nextTick()
.then(() => {
- expect(vm.getFileData.calls.count()).toEqual(1);
- expect(vm.getRawFileData.calls.count()).toEqual(1);
+ expect(vm.getFileData).not.toHaveBeenCalled();
+ expect(vm.getRawFileData).not.toHaveBeenCalled();
expect(vm.editor.createInstance).not.toHaveBeenCalled();
})
.then(done)
@@ -446,23 +456,56 @@ describe('RepoEditor', () => {
});
});
- it('calls removePendingTab when old file is pending', done => {
- spyOnProperty(vm, 'shouldHideEditor').and.returnValue(true);
- spyOn(vm, 'removePendingTab');
+ describe('updates on file changes', () => {
+ beforeEach(() => {
+ spyOn(vm, 'initEditor');
+ });
- vm.file.pending = true;
+ it('calls removePendingTab when old file is pending', done => {
+ spyOnProperty(vm, 'shouldHideEditor').and.returnValue(true);
+ spyOn(vm, 'removePendingTab');
- vm.$nextTick()
- .then(() => {
- vm.file = file('testing');
- vm.file.content = 'foo'; // need to prevent full cycle of initEditor
+ vm.file.pending = true;
+
+ vm.$nextTick()
+ .then(() => {
+ vm.file = file('testing');
+ vm.file.content = 'foo'; // need to prevent full cycle of initEditor
- return vm.$nextTick();
- })
- .then(() => {
- expect(vm.removePendingTab).toHaveBeenCalled();
- })
- .then(done)
- .catch(done.fail);
+ return vm.$nextTick();
+ })
+ .then(() => {
+ expect(vm.removePendingTab).toHaveBeenCalled();
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('does not call initEditor if the file did not change', done => {
+ Vue.set(vm, 'file', vm.file);
+
+ vm.$nextTick()
+ .then(() => {
+ expect(vm.initEditor).not.toHaveBeenCalled();
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('calls initEditor when file key is changed', done => {
+ expect(vm.initEditor).not.toHaveBeenCalled();
+
+ Vue.set(vm, 'file', {
+ ...vm.file,
+ key: 'new',
+ });
+
+ vm.$nextTick()
+ .then(() => {
+ expect(vm.initEditor).toHaveBeenCalled();
+ })
+ .then(done)
+ .catch(done.fail);
+ });
});
});
diff --git a/spec/javascripts/ide/mock_data.js b/spec/javascripts/ide/mock_data.js
index c02c7e5d45e..27f0ad01f54 100644
--- a/spec/javascripts/ide/mock_data.js
+++ b/spec/javascripts/ide/mock_data.js
@@ -1,226 +1 @@
-export const projectData = {
- id: 1,
- name: 'abcproject',
- web_url: '',
- avatar_url: '',
- path: '',
- name_with_namespace: 'namespace/abcproject',
- branches: {
- master: {
- treeId: 'abcproject/master',
- can_push: true,
- commit: {
- id: '123',
- },
- },
- },
- mergeRequests: {},
- merge_requests_enabled: true,
- default_branch: 'master',
-};
-
-export const pipelines = [
- {
- id: 1,
- ref: 'master',
- sha: '123',
- details: {
- status: {
- icon: 'status_failed',
- group: 'failed',
- text: 'Failed',
- },
- },
- commit: { id: '123' },
- },
- {
- id: 2,
- ref: 'master',
- sha: '213',
- details: {
- status: {
- icon: 'status_failed',
- group: 'failed',
- text: 'Failed',
- },
- },
- commit: { id: '213' },
- },
-];
-
-export const stages = [
- {
- dropdown_path: `${gl.TEST_HOST}/testing`,
- name: 'build',
- status: {
- icon: 'status_failed',
- group: 'failed',
- text: 'failed',
- },
- },
- {
- dropdown_path: 'testing',
- name: 'test',
- status: {
- icon: 'status_failed',
- group: 'failed',
- text: 'failed',
- },
- },
-];
-
-export const jobs = [
- {
- id: 1,
- name: 'test',
- path: 'testing',
- status: {
- icon: 'status_success',
- text: 'passed',
- },
- stage: 'test',
- duration: 1,
- started: new Date(),
- },
- {
- id: 2,
- name: 'test 2',
- path: 'testing2',
- status: {
- icon: 'status_success',
- text: 'passed',
- },
- stage: 'test',
- duration: 1,
- started: new Date(),
- },
- {
- id: 3,
- name: 'test 3',
- path: 'testing3',
- status: {
- icon: 'status_success',
- text: 'passed',
- },
- stage: 'test',
- duration: 1,
- started: new Date(),
- },
- {
- id: 4,
- name: 'test 4',
- path: 'testing4',
- status: {
- icon: 'status_failed',
- text: 'failed',
- },
- stage: 'build',
- duration: 1,
- started: new Date(),
- },
-];
-
-export const fullPipelinesResponse = {
- data: {
- count: {
- all: 2,
- },
- pipelines: [
- {
- id: '51',
- path: 'test',
- commit: {
- id: '123',
- },
- details: {
- status: {
- icon: 'status_failed',
- text: 'failed',
- },
- stages: [...stages],
- },
- },
- {
- id: '50',
- commit: {
- id: 'abc123def456ghi789jkl',
- },
- details: {
- status: {
- icon: 'status_success',
- text: 'passed',
- },
- stages: [...stages],
- },
- },
- ],
- },
-};
-
-export const mergeRequests = [
- {
- id: 1,
- iid: 1,
- title: 'Test merge request',
- project_id: 1,
- web_url: `${gl.TEST_HOST}/namespace/project-path/merge_requests/1`,
- },
-];
-
-export const branches = [
- {
- id: 1,
- name: 'master',
- commit: {
- message: 'Update master branch',
- committed_date: '2018-08-01T00:20:05Z',
- },
- can_push: true,
- protected: true,
- default: true,
- },
- {
- id: 2,
- name: 'protected/no-access',
- commit: {
- message: 'Update some stuff',
- committed_date: '2018-08-02T00:00:05Z',
- },
- can_push: false,
- protected: true,
- default: false,
- },
- {
- id: 3,
- name: 'protected/access',
- commit: {
- message: 'Update some stuff',
- committed_date: '2018-08-02T00:00:05Z',
- },
- can_push: true,
- protected: true,
- default: false,
- },
- {
- id: 4,
- name: 'regular',
- commit: {
- message: 'Update some more stuff',
- committed_date: '2018-06-30T00:20:05Z',
- },
- can_push: true,
- protected: false,
- default: false,
- },
- {
- id: 5,
- name: 'regular/no-access',
- commit: {
- message: 'Update some more stuff',
- committed_date: '2018-06-30T00:20:05Z',
- },
- can_push: false,
- protected: false,
- default: false,
- },
-];
+export * from '../../frontend/ide/mock_data';
diff --git a/spec/javascripts/ide/stores/actions/project_spec.js b/spec/javascripts/ide/stores/actions/project_spec.js
index 8ecb6129c63..bcc7b5d5e46 100644
--- a/spec/javascripts/ide/stores/actions/project_spec.js
+++ b/spec/javascripts/ide/stores/actions/project_spec.js
@@ -6,8 +6,10 @@ import {
createNewBranchFromDefault,
showEmptyState,
openBranch,
+ loadFile,
+ loadBranch,
} from '~/ide/stores/actions';
-import store from '~/ide/stores';
+import { createStore } from '~/ide/stores';
import service from '~/ide/services';
import api from '~/api';
import router from '~/ide/ide_router';
@@ -16,8 +18,10 @@ import testAction from '../../../helpers/vuex_action_helper';
describe('IDE store project actions', () => {
let mock;
+ let store;
beforeEach(() => {
+ store = createStore();
mock = new MockAdapter(axios);
store.state.projects['abc/def'] = {
@@ -231,28 +235,139 @@ describe('IDE store project actions', () => {
});
});
+ describe('loadFile', () => {
+ beforeEach(() => {
+ Object.assign(store.state, {
+ entries: {
+ foo: { pending: false },
+ 'foo/bar-pending': { pending: true },
+ 'foo/bar': { pending: false },
+ },
+ });
+ spyOn(store, 'dispatch');
+ });
+
+ it('does nothing, if basePath is not given', () => {
+ loadFile(store, { basePath: undefined });
+
+ expect(store.dispatch).not.toHaveBeenCalled();
+ });
+
+ it('handles tree entry action, if basePath is given and the entry is not pending', () => {
+ loadFile(store, { basePath: 'foo/bar/' });
+
+ expect(store.dispatch).toHaveBeenCalledWith(
+ 'handleTreeEntryAction',
+ store.state.entries['foo/bar'],
+ );
+ });
+
+ it('does not handle tree entry action, if entry is pending', () => {
+ loadFile(store, { basePath: 'foo/bar-pending/' });
+
+ expect(store.dispatch).not.toHaveBeenCalledWith('handleTreeEntryAction', jasmine.anything());
+ });
+
+ it('creates a new temp file supplied via URL if the file does not exist yet', () => {
+ loadFile(store, { basePath: 'not-existent.md' });
+
+ expect(store.dispatch.calls.count()).toBe(1);
+
+ expect(store.dispatch).not.toHaveBeenCalledWith('handleTreeEntryAction', jasmine.anything());
+
+ expect(store.dispatch).toHaveBeenCalledWith('createTempEntry', {
+ name: 'not-existent.md',
+ type: 'blob',
+ });
+ });
+ });
+
+ describe('loadBranch', () => {
+ const projectId = 'abc/def';
+ const branchId = '123-lorem';
+
+ it('fetches branch data', done => {
+ spyOn(store, 'dispatch').and.returnValue(Promise.resolve());
+
+ loadBranch(store, { projectId, branchId })
+ .then(() => {
+ expect(store.dispatch.calls.allArgs()).toEqual([
+ ['getBranchData', { projectId, branchId }],
+ ['getMergeRequestsForBranch', { projectId, branchId }],
+ ['getFiles', { projectId, branchId }],
+ ]);
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('shows an error if branch can not be fetched', done => {
+ spyOn(store, 'dispatch').and.returnValue(Promise.reject());
+
+ loadBranch(store, { projectId, branchId })
+ .then(done.fail)
+ .catch(() => {
+ expect(store.dispatch.calls.allArgs()).toEqual([
+ ['getBranchData', { projectId, branchId }],
+ ['showBranchNotFoundError', branchId],
+ ]);
+ done();
+ });
+ });
+ });
+
describe('openBranch', () => {
+ const projectId = 'abc/def';
+ const branchId = '123-lorem';
+
const branch = {
- projectId: 'abc/def',
- branchId: '123-lorem',
+ projectId,
+ branchId,
};
beforeEach(() => {
- store.state.entries = {
- foo: { pending: false },
- 'foo/bar-pending': { pending: true },
- 'foo/bar': { pending: false },
- };
+ Object.assign(store.state, {
+ entries: {
+ foo: { pending: false },
+ 'foo/bar-pending': { pending: true },
+ 'foo/bar': { pending: false },
+ },
+ });
+ });
+
+ it('loads file right away if the branch has already been fetched', done => {
+ spyOn(store, 'dispatch');
+
+ Object.assign(store.state, {
+ projects: {
+ [projectId]: {
+ branches: {
+ [branchId]: { foo: 'bar' },
+ },
+ },
+ },
+ });
+
+ openBranch(store, branch)
+ .then(() => {
+ expect(store.dispatch.calls.allArgs()).toEqual([['loadFile', { basePath: undefined }]]);
+ })
+ .then(done)
+ .catch(done.fail);
});
describe('empty repo', () => {
beforeEach(() => {
spyOn(store, 'dispatch').and.returnValue(Promise.resolve());
- store.state.currentProjectId = 'abc/def';
- store.state.projects['abc/def'] = {
- empty_repo: true,
- };
+ Object.assign(store.state, {
+ currentProjectId: 'abc/def',
+ projects: {
+ 'abc/def': {
+ empty_repo: true,
+ },
+ },
+ });
});
afterEach(() => {
@@ -262,10 +377,7 @@ describe('IDE store project actions', () => {
it('dispatches showEmptyState action right away', done => {
openBranch(store, branch)
.then(() => {
- expect(store.dispatch.calls.allArgs()).toEqual([
- ['setCurrentBranchId', branch.branchId],
- ['showEmptyState', branch],
- ]);
+ expect(store.dispatch.calls.allArgs()).toEqual([['showEmptyState', branch]]);
done();
})
.catch(done.fail);
@@ -281,56 +393,14 @@ describe('IDE store project actions', () => {
openBranch(store, branch)
.then(() => {
expect(store.dispatch.calls.allArgs()).toEqual([
- ['setCurrentBranchId', branch.branchId],
- ['getBranchData', branch],
- ['getMergeRequestsForBranch', branch],
- ['getFiles', branch],
+ ['setCurrentBranchId', branchId],
+ ['loadBranch', { projectId, branchId }],
+ ['loadFile', { basePath: undefined }],
]);
})
.then(done)
.catch(done.fail);
});
-
- it('handles tree entry action, if basePath is given', done => {
- openBranch(store, { ...branch, basePath: 'foo/bar/' })
- .then(() => {
- expect(store.dispatch).toHaveBeenCalledWith(
- 'handleTreeEntryAction',
- store.state.entries['foo/bar'],
- );
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('does not handle tree entry action, if entry is pending', done => {
- openBranch(store, { ...branch, basePath: 'foo/bar-pending' })
- .then(() => {
- expect(store.dispatch).not.toHaveBeenCalledWith(
- 'handleTreeEntryAction',
- jasmine.anything(),
- );
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('creates a new file supplied via URL if the file does not exist yet', done => {
- openBranch(store, { ...branch, basePath: 'not-existent.md' })
- .then(() => {
- expect(store.dispatch).not.toHaveBeenCalledWith(
- 'handleTreeEntryAction',
- jasmine.anything(),
- );
-
- expect(store.dispatch).toHaveBeenCalledWith('createTempEntry', {
- name: 'not-existent.md',
- type: 'blob',
- });
- })
- .then(done)
- .catch(done.fail);
- });
});
describe('non-existent branch', () => {
@@ -342,9 +412,8 @@ describe('IDE store project actions', () => {
openBranch(store, branch)
.then(() => {
expect(store.dispatch.calls.allArgs()).toEqual([
- ['setCurrentBranchId', branch.branchId],
- ['getBranchData', branch],
- ['showBranchNotFoundError', branch.branchId],
+ ['setCurrentBranchId', branchId],
+ ['loadBranch', { projectId, branchId }],
]);
})
.then(done)
diff --git a/spec/javascripts/ide/stores/actions_spec.js b/spec/javascripts/ide/stores/actions_spec.js
index 8504fb3f42b..7e77b859fdd 100644
--- a/spec/javascripts/ide/stores/actions_spec.js
+++ b/spec/javascripts/ide/stores/actions_spec.js
@@ -13,12 +13,15 @@ import actions, {
createTempEntry,
} from '~/ide/stores/actions';
import axios from '~/lib/utils/axios_utils';
-import store from '~/ide/stores';
+import { createStore } from '~/ide/stores';
import * as types from '~/ide/stores/mutation_types';
import router from '~/ide/ide_router';
import { resetStore, file } from '../helpers';
import testAction from '../../helpers/vuex_action_helper';
import MockAdapter from 'axios-mock-adapter';
+import eventHub from '~/ide/eventhub';
+
+const store = createStore();
describe('Multi-file store actions', () => {
beforeEach(() => {
@@ -451,6 +454,24 @@ describe('Multi-file store actions', () => {
done,
);
});
+
+ it('does not dispatch for parent, if parent does not exist', done => {
+ const f = {
+ ...file(),
+ path: 'test',
+ parentPath: 'testing',
+ };
+ store.state.entries[f.path] = f;
+
+ testAction(
+ updateTempFlagForEntry,
+ { file: f, tempFile: false },
+ store.state,
+ [{ type: 'UPDATE_TEMP_FLAG', payload: { path: f.path, tempFile: false } }],
+ [],
+ done,
+ );
+ });
});
describe('setCurrentBranchId', () => {
@@ -540,82 +561,298 @@ describe('Multi-file store actions', () => {
done,
);
});
- });
- describe('renameEntry', () => {
- it('renames entry', done => {
- store.state.entries.test = {
- tree: [],
+ it('if renamed, reverts the rename before deleting', () => {
+ const testEntry = {
+ path: 'test',
+ name: 'test',
+ prevPath: 'lorem/ipsum',
+ prevName: 'ipsum',
+ prevParentPath: 'lorem',
};
+ store.state.entries = { test: testEntry };
testAction(
- renameEntry,
- { path: 'test', name: 'new-name', entryPath: null, parentPath: 'parent-path' },
+ deleteEntry,
+ testEntry.path,
store.state,
+ [],
[
{
- type: types.RENAME_ENTRY,
- payload: { path: 'test', name: 'new-name', entryPath: null, parentPath: 'parent-path' },
- },
- {
- type: types.TOGGLE_FILE_CHANGED,
+ type: 'renameEntry',
payload: {
- file: store.state.entries['parent-path/new-name'],
- changed: true,
+ path: testEntry.path,
+ name: testEntry.prevName,
+ parentPath: testEntry.prevParentPath,
},
},
+ {
+ type: 'deleteEntry',
+ payload: testEntry.prevPath,
+ },
],
- [{ type: 'triggerFilesChange' }],
- done,
);
});
+ });
- it('renames all entries in tree', done => {
- store.state.entries.test = {
- type: 'tree',
- tree: [
- {
- path: 'tree-1',
- },
- {
- path: 'tree-2',
+ describe('renameEntry', () => {
+ describe('purging of file model cache', () => {
+ beforeEach(() => {
+ spyOn(eventHub, '$emit');
+ });
+
+ it('does not purge model cache for temporary entries that got renamed', done => {
+ Object.assign(store.state.entries, {
+ test: {
+ ...file('test'),
+ key: 'foo-key',
+ type: 'blob',
+ tempFile: true,
},
- ],
- };
+ });
- testAction(
- renameEntry,
- { path: 'test', name: 'new-name', parentPath: 'parent-path' },
- store.state,
- [
- {
- type: types.RENAME_ENTRY,
- payload: { path: 'test', name: 'new-name', entryPath: null, parentPath: 'parent-path' },
+ store
+ .dispatch('renameEntry', {
+ path: 'test',
+ name: 'new',
+ })
+ .then(() => {
+ expect(eventHub.$emit.calls.allArgs()).not.toContain(
+ 'editor.update.model.dispose.foo-bar',
+ );
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('purges model cache for renamed entry', done => {
+ Object.assign(store.state.entries, {
+ test: {
+ ...file('test'),
+ key: 'foo-key',
+ type: 'blob',
+ tempFile: false,
},
- ],
- [
- {
- type: 'renameEntry',
- payload: {
- path: 'test',
- name: 'new-name',
- entryPath: 'tree-1',
- parentPath: 'parent-path/new-name',
+ });
+
+ store
+ .dispatch('renameEntry', {
+ path: 'test',
+ name: 'new',
+ })
+ .then(() => {
+ expect(eventHub.$emit).toHaveBeenCalled();
+ expect(eventHub.$emit).toHaveBeenCalledWith(`editor.update.model.dispose.foo-key`);
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+ });
+
+ describe('single entry', () => {
+ let origEntry;
+ let renamedEntry;
+
+ beforeEach(() => {
+ // Need to insert both because `testAction` doesn't actually call the mutation
+ origEntry = file('orig', 'orig', 'blob');
+ renamedEntry = {
+ ...file('renamed', 'renamed', 'blob'),
+ prevKey: origEntry.key,
+ prevName: origEntry.name,
+ prevPath: origEntry.path,
+ };
+
+ Object.assign(store.state.entries, {
+ orig: origEntry,
+ renamed: renamedEntry,
+ });
+ });
+
+ afterEach(() => {
+ resetStore(store);
+ });
+
+ it('by default renames an entry and adds to changed', done => {
+ testAction(
+ renameEntry,
+ { path: 'orig', name: 'renamed' },
+ store.state,
+ [
+ {
+ type: types.RENAME_ENTRY,
+ payload: {
+ path: 'orig',
+ name: 'renamed',
+ parentPath: undefined,
+ },
},
- },
- {
- type: 'renameEntry',
- payload: {
- path: 'test',
- name: 'new-name',
- entryPath: 'tree-2',
- parentPath: 'parent-path/new-name',
+ {
+ type: types.ADD_FILE_TO_CHANGED,
+ payload: 'renamed',
+ },
+ ],
+ [{ type: 'triggerFilesChange' }],
+ done,
+ );
+ });
+
+ it('if not changed, completely unstages entry if renamed to original', done => {
+ testAction(
+ renameEntry,
+ { path: 'renamed', name: 'orig' },
+ store.state,
+ [
+ {
+ type: types.RENAME_ENTRY,
+ payload: {
+ path: 'renamed',
+ name: 'orig',
+ parentPath: undefined,
+ },
+ },
+ {
+ type: types.REMOVE_FILE_FROM_STAGED_AND_CHANGED,
+ payload: origEntry,
+ },
+ ],
+ [{ type: 'triggerFilesChange' }],
+ done,
+ );
+ });
+
+ it('if already in changed, does not add to change', done => {
+ store.state.changedFiles.push(renamedEntry);
+
+ testAction(
+ renameEntry,
+ { path: 'orig', name: 'renamed' },
+ store.state,
+ [jasmine.objectContaining({ type: types.RENAME_ENTRY })],
+ [{ type: 'triggerFilesChange' }],
+ done,
+ );
+ });
+
+ it('routes to the renamed file if the original file has been opened', done => {
+ Object.assign(store.state.entries.orig, {
+ opened: true,
+ url: '/foo-bar.md',
+ });
+
+ store
+ .dispatch('renameEntry', {
+ path: 'orig',
+ name: 'renamed',
+ })
+ .then(() => {
+ expect(router.push.calls.count()).toBe(1);
+ expect(router.push).toHaveBeenCalledWith(`/project/foo-bar.md`);
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+ });
+
+ describe('folder', () => {
+ let folder;
+ let file1;
+ let file2;
+
+ beforeEach(() => {
+ folder = file('folder', 'folder', 'tree');
+ file1 = file('file-1', 'file-1', 'blob', folder);
+ file2 = file('file-2', 'file-2', 'blob', folder);
+
+ folder.tree = [file1, file2];
+
+ Object.assign(store.state.entries, {
+ [folder.path]: folder,
+ [file1.path]: file1,
+ [file2.path]: file2,
+ });
+ });
+
+ it('updates entries in a folder correctly, when folder is renamed', done => {
+ store
+ .dispatch('renameEntry', {
+ path: 'folder',
+ name: 'new-folder',
+ })
+ .then(() => {
+ const keys = Object.keys(store.state.entries);
+
+ expect(keys.length).toBe(3);
+ expect(keys.indexOf('new-folder')).toBe(0);
+ expect(keys.indexOf('new-folder/file-1')).toBe(1);
+ expect(keys.indexOf('new-folder/file-2')).toBe(2);
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('discards renaming of an entry if the root folder is renamed back to a previous name', done => {
+ const rootFolder = file('old-folder', 'old-folder', 'tree');
+ const testEntry = file('test', 'test', 'blob', rootFolder);
+
+ Object.assign(store.state, {
+ entries: {
+ 'old-folder': {
+ ...rootFolder,
+ tree: [testEntry],
},
+ 'old-folder/test': testEntry,
},
- { type: 'triggerFilesChange' },
- ],
- done,
- );
+ });
+
+ store
+ .dispatch('renameEntry', {
+ path: 'old-folder',
+ name: 'new-folder',
+ })
+ .then(() => {
+ const { entries } = store.state;
+
+ expect(Object.keys(entries).length).toBe(2);
+ expect(entries['old-folder']).toBeUndefined();
+ expect(entries['old-folder/test']).toBeUndefined();
+
+ expect(entries['new-folder']).toBeDefined();
+ expect(entries['new-folder/test']).toEqual(
+ jasmine.objectContaining({
+ path: 'new-folder/test',
+ name: 'test',
+ prevPath: 'old-folder/test',
+ prevName: 'test',
+ }),
+ );
+ })
+ .then(() =>
+ store.dispatch('renameEntry', {
+ path: 'new-folder',
+ name: 'old-folder',
+ }),
+ )
+ .then(() => {
+ const { entries } = store.state;
+
+ expect(Object.keys(entries).length).toBe(2);
+ expect(entries['new-folder']).toBeUndefined();
+ expect(entries['new-folder/test']).toBeUndefined();
+
+ expect(entries['old-folder']).toBeDefined();
+ expect(entries['old-folder/test']).toEqual(
+ jasmine.objectContaining({
+ path: 'old-folder/test',
+ name: 'test',
+ prevPath: undefined,
+ prevName: undefined,
+ }),
+ );
+ })
+ .then(done)
+ .catch(done.fail);
+ });
});
});
diff --git a/spec/javascripts/ide/stores/modules/commit/actions_spec.js b/spec/javascripts/ide/stores/modules/commit/actions_spec.js
index 091b454c0d2..95d927065f0 100644
--- a/spec/javascripts/ide/stores/modules/commit/actions_spec.js
+++ b/spec/javascripts/ide/stores/modules/commit/actions_spec.js
@@ -1,5 +1,5 @@
import rootActions from '~/ide/stores/actions';
-import store from '~/ide/stores';
+import { createStore } from '~/ide/stores';
import service from '~/ide/services';
import router from '~/ide/ide_router';
import eventHub from '~/ide/eventhub';
@@ -11,6 +11,7 @@ import { resetStore, file } from 'spec/ide/helpers';
import testAction from '../../../../helpers/vuex_action_helper';
const TEST_COMMIT_SHA = '123456789';
+const store = createStore();
describe('IDE commit module actions', () => {
beforeEach(() => {
@@ -59,7 +60,9 @@ describe('IDE commit module actions', () => {
});
it('sets shouldCreateMR to true if "Create new MR" option is visible', done => {
- store.state.shouldHideNewMrOption = false;
+ Object.assign(store.state, {
+ shouldHideNewMrOption: false,
+ });
testAction(
actions.updateCommitAction,
@@ -78,7 +81,9 @@ describe('IDE commit module actions', () => {
});
it('sets shouldCreateMR to false if "Create new MR" option is hidden', done => {
- store.state.shouldHideNewMrOption = true;
+ Object.assign(store.state, {
+ shouldHideNewMrOption: true,
+ });
testAction(
actions.updateCommitAction,
@@ -172,24 +177,31 @@ describe('IDE commit module actions', () => {
content: 'file content',
});
- store.state.currentProjectId = 'abcproject';
- store.state.currentBranchId = 'master';
- store.state.projects.abcproject = {
- web_url: 'web_url',
- branches: {
- master: {
- workingReference: '',
- commit: {
- short_id: TEST_COMMIT_SHA,
+ Object.assign(store.state, {
+ currentProjectId: 'abcproject',
+ currentBranchId: 'master',
+ projects: {
+ abcproject: {
+ web_url: 'web_url',
+ branches: {
+ master: {
+ workingReference: '',
+ commit: {
+ short_id: TEST_COMMIT_SHA,
+ },
+ },
},
},
},
- };
- store.state.stagedFiles.push(f, {
- ...file('changedFile2'),
- changed: true,
+ stagedFiles: [
+ f,
+ {
+ ...file('changedFile2'),
+ changed: true,
+ },
+ ],
+ openFiles: store.state.stagedFiles,
});
- store.state.openFiles = store.state.stagedFiles;
store.state.stagedFiles.forEach(stagedFile => {
store.state.entries[stagedFile.path] = stagedFile;
@@ -275,40 +287,40 @@ describe('IDE commit module actions', () => {
document.body.innerHTML += '<div class="flash-container"></div>';
- store.state.currentProjectId = 'abcproject';
- store.state.currentBranchId = 'master';
- store.state.projects.abcproject = {
- web_url: 'webUrl',
- branches: {
- master: {
- workingReference: '1',
- commit: {
- id: TEST_COMMIT_SHA,
- },
- },
- },
- };
-
const f = {
...file('changed'),
type: 'blob',
active: true,
lastCommitSha: TEST_COMMIT_SHA,
};
- store.state.stagedFiles.push(f);
- store.state.changedFiles = [
- {
- ...f,
- },
- ];
- store.state.openFiles = store.state.changedFiles;
- store.state.openFiles.forEach(localF => {
- store.state.entries[localF.path] = localF;
+ Object.assign(store.state, {
+ stagedFiles: [f],
+ changedFiles: [f],
+ openFiles: [f],
+ currentProjectId: 'abcproject',
+ currentBranchId: 'master',
+ projects: {
+ abcproject: {
+ web_url: 'webUrl',
+ branches: {
+ master: {
+ workingReference: '1',
+ commit: {
+ id: TEST_COMMIT_SHA,
+ },
+ },
+ },
+ },
+ },
});
store.state.commit.commitAction = '2';
store.state.commit.commitMessage = 'testing 123';
+
+ store.state.openFiles.forEach(localF => {
+ store.state.entries[localF.path] = localF;
+ });
});
afterEach(() => {
@@ -473,18 +485,16 @@ describe('IDE commit module actions', () => {
});
it('resets changed files before redirecting', done => {
+ visitUrl = visitUrl.and.callFake(() => {
+ expect(store.state.stagedFiles.length).toBe(0);
+ done();
+ });
+
spyOn(eventHub, '$on');
store.state.commit.commitAction = '3';
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(store.state.stagedFiles.length).toBe(0);
-
- done();
- })
- .catch(done.fail);
+ store.dispatch('commit/commitChanges').catch(done.fail);
});
});
});
diff --git a/spec/javascripts/ide/stores/mutations/file_spec.js b/spec/javascripts/ide/stores/mutations/file_spec.js
index 064e66cef64..7c46bf55318 100644
--- a/spec/javascripts/ide/stores/mutations/file_spec.js
+++ b/spec/javascripts/ide/stores/mutations/file_spec.js
@@ -356,16 +356,16 @@ describe('IDE store file mutations', () => {
});
describe('STAGE_CHANGE', () => {
- it('adds file into stagedFiles array', () => {
+ beforeEach(() => {
mutations.STAGE_CHANGE(localState, localFile.path);
+ });
+ it('adds file into stagedFiles array', () => {
expect(localState.stagedFiles.length).toBe(1);
expect(localState.stagedFiles[0]).toEqual(localFile);
});
it('updates stagedFile if it is already staged', () => {
- mutations.STAGE_CHANGE(localState, localFile.path);
-
localFile.raw = 'testing 123';
mutations.STAGE_CHANGE(localState, localFile.path);
@@ -373,19 +373,6 @@ describe('IDE store file mutations', () => {
expect(localState.stagedFiles.length).toBe(1);
expect(localState.stagedFiles[0].raw).toEqual('testing 123');
});
-
- it('adds already-staged file to `replacedFiles`', () => {
- localFile.raw = 'already-staged';
-
- mutations.STAGE_CHANGE(localState, localFile.path);
-
- localFile.raw = 'testing 123';
-
- mutations.STAGE_CHANGE(localState, localFile.path);
-
- expect(localState.replacedFiles.length).toBe(1);
- expect(localState.replacedFiles[0].raw).toEqual('already-staged');
- });
});
describe('UNSTAGE_CHANGE', () => {
diff --git a/spec/javascripts/ide/stores/mutations_spec.js b/spec/javascripts/ide/stores/mutations_spec.js
index 2470c99e300..7dd5d323f69 100644
--- a/spec/javascripts/ide/stores/mutations_spec.js
+++ b/spec/javascripts/ide/stores/mutations_spec.js
@@ -79,16 +79,6 @@ describe('Multi-file store mutations', () => {
});
});
- describe('CLEAR_REPLACED_FILES', () => {
- it('clears replacedFiles array', () => {
- localState.replacedFiles.push('a');
-
- mutations.CLEAR_REPLACED_FILES(localState);
-
- expect(localState.replacedFiles.length).toBe(0);
- });
- });
-
describe('UPDATE_VIEWER', () => {
it('sets viewer state', () => {
mutations.UPDATE_VIEWER(localState, 'diff');
@@ -311,8 +301,7 @@ describe('Multi-file store mutations', () => {
describe('UPDATE_FILE_AFTER_COMMIT', () => {
it('updates URLs if prevPath is set', () => {
const f = {
- ...file(),
- path: 'test',
+ ...file('test'),
prevPath: 'testing-123',
rawPath: `${gl.TEST_HOST}/testing-123`,
permalink: `${gl.TEST_HOST}/testing-123`,
@@ -325,19 +314,26 @@ describe('Multi-file store mutations', () => {
mutations.UPDATE_FILE_AFTER_COMMIT(localState, { file: f, lastCommit: { commit: {} } });
- expect(f.rawPath).toBe(`${gl.TEST_HOST}/test`);
- expect(f.permalink).toBe(`${gl.TEST_HOST}/test`);
- expect(f.commitsPath).toBe(`${gl.TEST_HOST}/test`);
- expect(f.blamePath).toBe(`${gl.TEST_HOST}/test`);
- expect(f.replaces).toBe(false);
+ expect(f).toEqual(
+ jasmine.objectContaining({
+ rawPath: `${gl.TEST_HOST}/test`,
+ permalink: `${gl.TEST_HOST}/test`,
+ commitsPath: `${gl.TEST_HOST}/test`,
+ blamePath: `${gl.TEST_HOST}/test`,
+ replaces: false,
+ prevId: undefined,
+ prevPath: undefined,
+ prevName: undefined,
+ prevUrl: undefined,
+ prevKey: undefined,
+ }),
+ );
});
});
describe('OPEN_NEW_ENTRY_MODAL', () => {
it('sets entryModal', () => {
- localState.entries.testPath = {
- ...file(),
- };
+ localState.entries.testPath = file();
mutations.OPEN_NEW_ENTRY_MODAL(localState, { type: 'test', path: 'testPath' });
@@ -356,58 +352,178 @@ describe('Multi-file store mutations', () => {
};
localState.currentProjectId = 'gitlab-ce';
localState.currentBranchId = 'master';
- localState.entries.oldPath = {
- ...file(),
- type: 'blob',
- name: 'oldPath',
- path: 'oldPath',
- url: `${gl.TEST_HOST}/oldPath`,
+ localState.entries = {
+ oldPath: file('oldPath', 'oldPath', 'blob'),
};
});
- it('creates new renamed entry', () => {
+ it('updates existing entry without creating a new one', () => {
+ mutations.RENAME_ENTRY(localState, {
+ path: 'oldPath',
+ name: 'newPath',
+ parentPath: '',
+ });
+
+ expect(localState.entries).toEqual({
+ newPath: jasmine.objectContaining({
+ path: 'newPath',
+ prevPath: 'oldPath',
+ }),
+ });
+ });
+
+ it('correctly handles consecutive renames for the same entry', () => {
mutations.RENAME_ENTRY(localState, {
path: 'oldPath',
name: 'newPath',
+ parentPath: '',
+ });
+
+ mutations.RENAME_ENTRY(localState, {
+ path: 'newPath',
+ name: 'newestPath',
+ parentPath: '',
+ });
+
+ expect(localState.entries).toEqual({
+ newestPath: jasmine.objectContaining({
+ path: 'newestPath',
+ prevPath: 'oldPath',
+ }),
+ });
+ });
+
+ it('correctly handles the same entry within a consecutively renamed folder', () => {
+ const oldPath = file('root-folder/oldPath', 'root-folder/oldPath', 'blob');
+ localState.entries = {
+ 'root-folder': {
+ ...file('root-folder', 'root-folder', 'tree'),
+ tree: [oldPath],
+ },
+ 'root-folder/oldPath': oldPath,
+ };
+ Object.assign(localState.entries['root-folder/oldPath'], {
+ parentPath: 'root-folder',
+ url: 'root-folder/oldPath-blob-root-folder/oldPath',
+ });
+
+ mutations.RENAME_ENTRY(localState, {
+ path: 'root-folder/oldPath',
+ name: 'renamed-folder/oldPath',
entryPath: null,
parentPath: '',
});
+ mutations.RENAME_ENTRY(localState, {
+ path: 'renamed-folder/oldPath',
+ name: 'simply-renamed/oldPath',
+ entryPath: null,
+ parentPath: '',
+ });
+
+ expect(localState.entries).toEqual({
+ 'root-folder': jasmine.objectContaining({
+ path: 'root-folder',
+ }),
+ 'simply-renamed/oldPath': jasmine.objectContaining({
+ path: 'simply-renamed/oldPath',
+ prevPath: 'root-folder/oldPath',
+ }),
+ });
+ });
+
+ it('renames entry, preserving old parameters', () => {
+ Object.assign(localState.entries.oldPath, {
+ url: `project/-/oldPath`,
+ });
+ const oldPathData = localState.entries.oldPath;
+
+ mutations.RENAME_ENTRY(localState, {
+ path: 'oldPath',
+ name: 'newPath',
+ parentPath: '',
+ });
+
expect(localState.entries.newPath).toEqual({
- ...localState.entries.oldPath,
+ ...oldPathData,
id: 'newPath',
- name: 'newPath',
- key: 'newPath-blob-oldPath',
path: 'newPath',
- tempFile: true,
+ name: 'newPath',
+ url: `project/-/newPath`,
+ key: jasmine.stringMatching('newPath'),
+
+ prevId: 'oldPath',
+ prevName: 'oldPath',
prevPath: 'oldPath',
- tree: [],
- parentPath: '',
- url: `${gl.TEST_HOST}/newPath`,
- moved: jasmine.anything(),
- movedPath: jasmine.anything(),
- opened: false,
+ prevUrl: `project/-/oldPath`,
+ prevKey: oldPathData.key,
+ prevParentPath: oldPathData.parentPath,
});
});
- it('adds new entry to changedFiles', () => {
- mutations.RENAME_ENTRY(localState, { path: 'oldPath', name: 'newPath' });
+ it('does not store previous attributes on temp files', () => {
+ Object.assign(localState.entries.oldPath, {
+ tempFile: true,
+ });
+ mutations.RENAME_ENTRY(localState, {
+ path: 'oldPath',
+ name: 'newPath',
+ entryPath: null,
+ parentPath: '',
+ });
- expect(localState.changedFiles.length).toBe(1);
- expect(localState.changedFiles[0].path).toBe('newPath');
- });
+ expect(localState.entries.newPath).not.toEqual(
+ jasmine.objectContaining({
+ prevId: jasmine.anything(),
+ prevName: jasmine.anything(),
+ prevPath: jasmine.anything(),
+ prevUrl: jasmine.anything(),
+ prevKey: jasmine.anything(),
+ prevParentPath: jasmine.anything(),
+ }),
+ );
+ });
+
+ it('properly handles files with spaces in name', () => {
+ const path = 'my fancy path';
+ const newPath = 'new path';
+ const oldEntry = {
+ ...file(path, path, 'blob'),
+ url: `project/-/${encodeURI(path)}`,
+ };
- it('sets oldEntry as moved', () => {
- mutations.RENAME_ENTRY(localState, { path: 'oldPath', name: 'newPath' });
+ localState.entries[path] = oldEntry;
- expect(localState.entries.oldPath.moved).toBe(true);
+ mutations.RENAME_ENTRY(localState, {
+ path,
+ name: newPath,
+ entryPath: null,
+ parentPath: '',
+ });
+
+ expect(localState.entries[newPath]).toEqual({
+ ...oldEntry,
+ id: newPath,
+ path: newPath,
+ name: newPath,
+ url: `project/-/new%20path`,
+ key: jasmine.stringMatching(newPath),
+
+ prevId: path,
+ prevName: path,
+ prevPath: path,
+ prevUrl: `project/-/my%20fancy%20path`,
+ prevKey: oldEntry.key,
+ prevParentPath: oldEntry.parentPath,
+ });
});
- it('adds to parents tree', () => {
- localState.entries.oldPath.parentPath = 'parentPath';
- localState.entries.parentPath = {
- ...file(),
+ it('adds to parent tree', () => {
+ const parentEntry = {
+ ...file('parentPath', 'parentPath', 'tree'),
+ tree: [localState.entries.oldPath],
};
+ localState.entries.parentPath = parentEntry;
mutations.RENAME_ENTRY(localState, {
path: 'oldPath',
@@ -416,7 +532,180 @@ describe('Multi-file store mutations', () => {
parentPath: 'parentPath',
});
- expect(localState.entries.parentPath.tree.length).toBe(1);
+ expect(parentEntry.tree.length).toBe(1);
+ expect(parentEntry.tree[0].name).toBe('newPath');
+ });
+
+ it('sorts tree after renaming an entry', () => {
+ const alpha = file('alpha', 'alpha', 'blob');
+ const beta = file('beta', 'beta', 'blob');
+ const gamma = file('gamma', 'gamma', 'blob');
+ localState.entries = { alpha, beta, gamma };
+
+ localState.trees['gitlab-ce/master'].tree = [alpha, beta, gamma];
+
+ mutations.RENAME_ENTRY(localState, {
+ path: 'alpha',
+ name: 'theta',
+ entryPath: null,
+ parentPath: '',
+ });
+
+ expect(localState.trees['gitlab-ce/master'].tree).toEqual([
+ jasmine.objectContaining({ name: 'beta' }),
+ jasmine.objectContaining({ name: 'gamma' }),
+ jasmine.objectContaining({
+ path: 'theta',
+ name: 'theta',
+ }),
+ ]);
+ });
+
+ it('updates openFiles with the renamed one if the original one is open', () => {
+ Object.assign(localState.entries.oldPath, {
+ opened: true,
+ type: 'blob',
+ });
+ Object.assign(localState, {
+ openFiles: [localState.entries.oldPath],
+ });
+
+ mutations.RENAME_ENTRY(localState, { path: 'oldPath', name: 'newPath' });
+
+ expect(localState.openFiles.length).toBe(1);
+ expect(localState.openFiles[0].path).toBe('newPath');
+ });
+
+ it('does not add renamed entry to changedFiles', () => {
+ mutations.RENAME_ENTRY(localState, { path: 'oldPath', name: 'newPath' });
+
+ expect(localState.changedFiles.length).toBe(0);
+ });
+
+ it('updates existing changedFiles entry with the renamed one', () => {
+ const origFile = {
+ ...file('oldPath', 'oldPath', 'blob'),
+ content: 'Foo',
+ };
+
+ Object.assign(localState, {
+ changedFiles: [origFile],
+ });
+ Object.assign(localState.entries, {
+ oldPath: origFile,
+ });
+
+ mutations.RENAME_ENTRY(localState, { path: 'oldPath', name: 'newPath' });
+
+ expect(localState.changedFiles).toEqual([
+ jasmine.objectContaining({
+ path: 'newPath',
+ content: 'Foo',
+ }),
+ ]);
+ });
+
+ it('correctly saves original values if an entry is renamed multiple times', () => {
+ const original = { ...localState.entries.oldPath };
+ const paramsToCheck = ['prevId', 'prevPath', 'prevName', 'prevUrl'];
+ const expectedObj = paramsToCheck.reduce(
+ (o, param) => ({ ...o, [param]: original[param.replace('prev', '').toLowerCase()] }),
+ {},
+ );
+
+ mutations.RENAME_ENTRY(localState, { path: 'oldPath', name: 'newPath' });
+
+ expect(localState.entries.newPath).toEqual(jasmine.objectContaining(expectedObj));
+
+ mutations.RENAME_ENTRY(localState, { path: 'newPath', name: 'newer' });
+
+ expect(localState.entries.newer).toEqual(jasmine.objectContaining(expectedObj));
+ });
+
+ describe('renaming back to original', () => {
+ beforeEach(() => {
+ const renamedEntry = {
+ ...file('renamed', 'renamed', 'blob'),
+ prevId: 'lorem/orig',
+ prevPath: 'lorem/orig',
+ prevName: 'orig',
+ prevUrl: 'project/-/loren/orig',
+ prevKey: 'lorem/orig',
+ prevParentPath: 'lorem',
+ };
+
+ localState.entries = {
+ renamed: renamedEntry,
+ };
+
+ mutations.RENAME_ENTRY(localState, { path: 'renamed', name: 'orig', parentPath: 'lorem' });
+ });
+
+ it('renames entry and clears prev properties', () => {
+ expect(localState.entries).toEqual({
+ 'lorem/orig': jasmine.objectContaining({
+ id: 'lorem/orig',
+ path: 'lorem/orig',
+ name: 'orig',
+ prevId: undefined,
+ prevPath: undefined,
+ prevName: undefined,
+ prevUrl: undefined,
+ prevKey: undefined,
+ prevParentPath: undefined,
+ }),
+ });
+ });
+ });
+
+ describe('key updates', () => {
+ beforeEach(() => {
+ const rootFolder = file('rootFolder', 'rootFolder', 'tree');
+ localState.entries = {
+ rootFolder,
+ oldPath: file('oldPath', 'oldPath', 'blob'),
+ 'oldPath.txt': file('oldPath.txt', 'oldPath.txt', 'blob'),
+ 'rootFolder/oldPath.md': file('oldPath.md', 'oldPath.md', 'blob', rootFolder),
+ };
+ });
+
+ it('sets properly constucted key while preserving the original one', () => {
+ const key = 'oldPath.txt-blob-oldPath.txt';
+ localState.entries['oldPath.txt'].key = key;
+ mutations.RENAME_ENTRY(localState, { path: 'oldPath.txt', name: 'newPath.md' });
+
+ expect(localState.entries['newPath.md'].key).toBe('newPath.md-blob-newPath.md');
+ expect(localState.entries['newPath.md'].prevKey).toBe(key);
+ });
+
+ it('correctly updates key for an entry without an extension', () => {
+ localState.entries.oldPath.key = 'oldPath-blob-oldPath';
+ mutations.RENAME_ENTRY(localState, { path: 'oldPath', name: 'newPath.md' });
+
+ expect(localState.entries['newPath.md'].key).toBe('newPath.md-blob-newPath.md');
+ });
+
+ it('correctly updates key when new name does not have an extension', () => {
+ localState.entries['oldPath.txt'].key = 'oldPath.txt-blob-oldPath.txt';
+ mutations.RENAME_ENTRY(localState, { path: 'oldPath.txt', name: 'newPath' });
+
+ expect(localState.entries.newPath.key).toBe('newPath-blob-newPath');
+ });
+
+ it('correctly updates key when renaming an entry in a folder', () => {
+ localState.entries['rootFolder/oldPath.md'].key =
+ 'rootFolder/oldPath.md-blob-rootFolder/oldPath.md';
+ mutations.RENAME_ENTRY(localState, {
+ path: 'rootFolder/oldPath.md',
+ name: 'newPath.md',
+ entryPath: null,
+ parentPath: 'rootFolder',
+ });
+
+ expect(localState.entries['rootFolder/newPath.md'].key).toBe(
+ 'rootFolder/newPath.md-blob-rootFolder/newPath.md',
+ );
+ });
});
});
});
diff --git a/spec/javascripts/ide/stores/utils_spec.js b/spec/javascripts/ide/stores/utils_spec.js
index 0fc9519a6bf..a477d4fc200 100644
--- a/spec/javascripts/ide/stores/utils_spec.js
+++ b/spec/javascripts/ide/stores/utils_spec.js
@@ -237,31 +237,6 @@ describe('Multi-file store utils', () => {
});
describe('getCommitFiles', () => {
- it('returns list of files excluding moved files', () => {
- const files = [
- {
- path: 'a',
- type: 'blob',
- deleted: true,
- },
- {
- path: 'c',
- type: 'blob',
- moved: true,
- },
- ];
-
- const flattendFiles = utils.getCommitFiles(files);
-
- expect(flattendFiles).toEqual([
- {
- path: 'a',
- type: 'blob',
- deleted: true,
- },
- ]);
- });
-
it('filters out folders from the list', () => {
const files = [
{
@@ -422,4 +397,204 @@ describe('Multi-file store utils', () => {
expect(res[1].tree[0].opened).toEqual(true);
});
});
+
+ describe('escapeFileUrl', () => {
+ it('encodes URL excluding the slashes', () => {
+ expect(utils.escapeFileUrl('/foo-bar/file.md')).toBe('/foo-bar/file.md');
+ expect(utils.escapeFileUrl('foo bar/file.md')).toBe('foo%20bar/file.md');
+ expect(utils.escapeFileUrl('foo/bar/file.md')).toBe('foo/bar/file.md');
+ });
+ });
+
+ describe('swapInStateArray', () => {
+ let localState;
+
+ beforeEach(() => {
+ localState = [];
+ });
+
+ it('swaps existing entry with a new one', () => {
+ const file1 = {
+ ...file('old'),
+ key: 'foo',
+ };
+ const file2 = file('new');
+ const arr = [file1];
+
+ Object.assign(localState, {
+ dummyArray: arr,
+ entries: {
+ new: file2,
+ },
+ });
+
+ utils.swapInStateArray(localState, 'dummyArray', 'foo', 'new');
+
+ expect(localState.dummyArray.length).toBe(1);
+ expect(localState.dummyArray[0]).toBe(file2);
+ });
+
+ it('does not add an item if it does not exist yet in array', () => {
+ const file1 = file('file');
+ Object.assign(localState, {
+ dummyArray: [],
+ entries: {
+ file: file1,
+ },
+ });
+
+ utils.swapInStateArray(localState, 'dummyArray', 'foo', 'file');
+
+ expect(localState.dummyArray.length).toBe(0);
+ });
+ });
+
+ describe('swapInParentTreeWithSorting', () => {
+ let localState;
+ let branchInfo;
+ const currentProjectId = '123-foo';
+ const currentBranchId = 'master';
+
+ beforeEach(() => {
+ localState = {
+ currentBranchId,
+ currentProjectId,
+ trees: {
+ [`${currentProjectId}/${currentBranchId}`]: {
+ tree: [],
+ },
+ },
+ entries: {
+ oldPath: file('oldPath', 'oldPath', 'blob'),
+ newPath: file('newPath', 'newPath', 'blob'),
+ parentPath: file('parentPath', 'parentPath', 'tree'),
+ },
+ };
+ branchInfo = localState.trees[`${currentProjectId}/${currentBranchId}`];
+ });
+
+ it('does not change tree if newPath is not supplied', () => {
+ branchInfo.tree = [localState.entries.oldPath];
+
+ utils.swapInParentTreeWithSorting(localState, 'oldPath', undefined, undefined);
+
+ expect(branchInfo.tree).toEqual([localState.entries.oldPath]);
+ });
+
+ describe('oldPath to replace is not defined: simple addition to tree', () => {
+ it('adds to tree on the state if there is no parent for the entry', () => {
+ expect(branchInfo.tree.length).toBe(0);
+
+ utils.swapInParentTreeWithSorting(localState, undefined, 'oldPath', undefined);
+
+ expect(branchInfo.tree.length).toBe(1);
+ expect(branchInfo.tree[0].name).toBe('oldPath');
+
+ utils.swapInParentTreeWithSorting(localState, undefined, 'newPath', undefined);
+
+ expect(branchInfo.tree.length).toBe(2);
+ expect(branchInfo.tree).toEqual([
+ jasmine.objectContaining({ name: 'newPath' }),
+ jasmine.objectContaining({ name: 'oldPath' }),
+ ]);
+ });
+
+ it('adds to parent tree if it is supplied', () => {
+ utils.swapInParentTreeWithSorting(localState, undefined, 'newPath', 'parentPath');
+
+ expect(localState.entries.parentPath.tree.length).toBe(1);
+ expect(localState.entries.parentPath.tree).toEqual([
+ jasmine.objectContaining({ name: 'newPath' }),
+ ]);
+
+ localState.entries.parentPath.tree = [localState.entries.oldPath];
+
+ utils.swapInParentTreeWithSorting(localState, undefined, 'newPath', 'parentPath');
+
+ expect(localState.entries.parentPath.tree.length).toBe(2);
+ expect(localState.entries.parentPath.tree).toEqual([
+ jasmine.objectContaining({ name: 'newPath' }),
+ jasmine.objectContaining({ name: 'oldPath' }),
+ ]);
+ });
+ });
+
+ describe('swapping of the items', () => {
+ it('swaps entries if both paths are supplied', () => {
+ branchInfo.tree = [localState.entries.oldPath];
+
+ utils.swapInParentTreeWithSorting(localState, localState.entries.oldPath.key, 'newPath');
+
+ expect(branchInfo.tree).toEqual([jasmine.objectContaining({ name: 'newPath' })]);
+
+ utils.swapInParentTreeWithSorting(localState, localState.entries.newPath.key, 'oldPath');
+
+ expect(branchInfo.tree).toEqual([jasmine.objectContaining({ name: 'oldPath' })]);
+ });
+
+ it('sorts tree after swapping the entries', () => {
+ const alpha = file('alpha', 'alpha', 'blob');
+ const beta = file('beta', 'beta', 'blob');
+ const gamma = file('gamma', 'gamma', 'blob');
+ const theta = file('theta', 'theta', 'blob');
+ localState.entries = { alpha, beta, gamma, theta };
+
+ branchInfo.tree = [alpha, beta, gamma];
+
+ utils.swapInParentTreeWithSorting(localState, alpha.key, 'theta');
+
+ expect(branchInfo.tree).toEqual([
+ jasmine.objectContaining({ name: 'beta' }),
+ jasmine.objectContaining({ name: 'gamma' }),
+ jasmine.objectContaining({ name: 'theta' }),
+ ]);
+
+ utils.swapInParentTreeWithSorting(localState, gamma.key, 'alpha');
+
+ expect(branchInfo.tree).toEqual([
+ jasmine.objectContaining({ name: 'alpha' }),
+ jasmine.objectContaining({ name: 'beta' }),
+ jasmine.objectContaining({ name: 'theta' }),
+ ]);
+
+ utils.swapInParentTreeWithSorting(localState, beta.key, 'gamma');
+
+ expect(branchInfo.tree).toEqual([
+ jasmine.objectContaining({ name: 'alpha' }),
+ jasmine.objectContaining({ name: 'gamma' }),
+ jasmine.objectContaining({ name: 'theta' }),
+ ]);
+ });
+ });
+ });
+
+ describe('cleanTrailingSlash', () => {
+ [
+ { input: '', output: '' },
+ { input: 'abc', output: 'abc' },
+ { input: 'abc/', output: 'abc' },
+ { input: 'abc/def', output: 'abc/def' },
+ { input: 'abc/def/', output: 'abc/def' },
+ ].forEach(({ input, output }) => {
+ it(`cleans trailing slash from string "${input}"`, () => {
+ expect(utils.cleanTrailingSlash(input)).toEqual(output);
+ });
+ });
+ });
+
+ describe('pathsAreEqual', () => {
+ [
+ { args: ['abc', 'abc'], output: true },
+ { args: ['abc', 'def'], output: false },
+ { args: ['abc/', 'abc'], output: true },
+ { args: ['abc/abc', 'abc'], output: false },
+ { args: ['/', ''], output: true },
+ { args: ['', '/'], output: true },
+ { args: [false, '/'], output: true },
+ ].forEach(({ args, output }) => {
+ it(`cleans and tests equality (${JSON.stringify(args)})`, () => {
+ expect(utils.pathsAreEqual(...args)).toEqual(output);
+ });
+ });
+ });
});
diff --git a/spec/javascripts/integrations/integration_settings_form_spec.js b/spec/javascripts/integrations/integration_settings_form_spec.js
index 069e2cb07b5..82d1f815ca8 100644
--- a/spec/javascripts/integrations/integration_settings_form_spec.js
+++ b/spec/javascripts/integrations/integration_settings_form_spec.js
@@ -126,6 +126,7 @@ describe('IntegrationSettingsForm', () => {
spyOn(axios, 'put').and.callThrough();
integrationSettingsForm = new IntegrationSettingsForm('.js-integration-settings-form');
+ // eslint-disable-next-line no-jquery/no-serialize
formData = integrationSettingsForm.$form.serialize();
});
diff --git a/spec/javascripts/issue_show/components/app_spec.js b/spec/javascripts/issue_show/components/app_spec.js
index 2770743937e..9fce040fd8c 100644
--- a/spec/javascripts/issue_show/components/app_spec.js
+++ b/spec/javascripts/issue_show/components/app_spec.js
@@ -1,3 +1,5 @@
+/* eslint-disable no-unused-vars */
+import GLDropdown from '~/gl_dropdown';
import Vue from 'vue';
import MockAdapter from 'axios-mock-adapter';
import axios from '~/lib/utils/axios_utils';
@@ -21,6 +23,14 @@ describe('Issuable output', () => {
beforeEach(done => {
setFixtures(`
<div>
+ <div class="detail-page-description content-block">
+ <details open>
+ <summary>One</summary>
+ </details>
+ <details>
+ <summary>Two</summary>
+ </details>
+ </div>
<div class="flash-container"></div>
<span id="task_status"></span>
</div>
@@ -52,6 +62,7 @@ describe('Issuable output', () => {
markdownDocsPath: '/',
projectNamespace: '/',
projectPath: '/',
+ issuableTemplateNamesPath: '/issuable-templates-path',
},
}).$mount();
@@ -129,11 +140,11 @@ describe('Issuable output', () => {
});
it('does not update formState if form is already open', done => {
- vm.openForm();
+ vm.updateAndShowForm();
vm.state.titleText = 'testing 123';
- vm.openForm();
+ vm.updateAndShowForm();
Vue.nextTick(() => {
expect(vm.store.formState.title).not.toBe('testing 123');
@@ -284,7 +295,7 @@ describe('Issuable output', () => {
});
});
- it('shows error mesage from backend if exists', done => {
+ it('shows error message from backend if exists', done => {
const msg = 'Custom error message from backend';
spyOn(vm.service, 'updateIssuable').and.callFake(
// eslint-disable-next-line prefer-promise-reject-errors
@@ -405,20 +416,20 @@ describe('Issuable output', () => {
});
});
- describe('open form', () => {
+ describe('updateAndShowForm', () => {
it('shows locked warning if form is open & data is different', done => {
vm.$nextTick()
.then(() => {
- vm.openForm();
+ vm.updateAndShowForm();
vm.poll.makeRequest();
+
+ return new Promise(resolve => {
+ vm.$watch('formState.lockedWarningVisible', value => {
+ if (value) resolve();
+ });
+ });
})
- // Wait for the request
- .then(vm.$nextTick)
- // Wait for the successCallback to update the store state
- .then(vm.$nextTick)
- // Wait for the new state to flow to the Vue components
- .then(vm.$nextTick)
.then(() => {
expect(vm.formState.lockedWarningVisible).toEqual(true);
expect(vm.formState.lock_version).toEqual(1);
@@ -429,6 +440,41 @@ describe('Issuable output', () => {
});
});
+ describe('requestTemplatesAndShowForm', () => {
+ beforeEach(() => {
+ spyOn(vm, 'updateAndShowForm');
+ });
+
+ it('shows the form if template names request is successful', done => {
+ const mockData = [{ name: 'Bug' }];
+ mock.onGet('/issuable-templates-path').reply(() => Promise.resolve([200, mockData]));
+
+ vm.requestTemplatesAndShowForm()
+ .then(() => {
+ expect(vm.updateAndShowForm).toHaveBeenCalledWith(mockData);
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('shows the form if template names request failed', done => {
+ mock
+ .onGet('/issuable-templates-path')
+ .reply(() => Promise.reject(new Error('something went wrong')));
+
+ vm.requestTemplatesAndShowForm()
+ .then(() => {
+ expect(document.querySelector('.flash-container .flash-text').textContent).toContain(
+ 'Error updating issue',
+ );
+
+ expect(vm.updateAndShowForm).toHaveBeenCalledWith();
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+ });
+
describe('show inline edit button', () => {
it('should not render by default', () => {
expect(vm.$el.querySelector('.title-container .note-action-button')).toBeDefined();
diff --git a/spec/javascripts/jobs/components/environments_block_spec.js b/spec/javascripts/jobs/components/environments_block_spec.js
index 4bbc5f5a348..64a59d659a7 100644
--- a/spec/javascripts/jobs/components/environments_block_spec.js
+++ b/spec/javascripts/jobs/components/environments_block_spec.js
@@ -2,6 +2,9 @@ import Vue from 'vue';
import component from '~/jobs/components/environments_block.vue';
import mountComponent from '../../helpers/vue_mount_component_helper';
+const TEST_CLUSTER_NAME = 'test_cluster';
+const TEST_CLUSTER_PATH = 'path/to/test_cluster';
+
describe('Environments block', () => {
const Component = Vue.extend(component);
let vm;
@@ -20,22 +23,53 @@ describe('Environments block', () => {
const lastDeployment = { iid: 'deployment', deployable: { build_path: 'bar' } };
+ const createEnvironmentWithLastDeployment = () => ({
+ ...environment,
+ last_deployment: { ...lastDeployment },
+ });
+
+ const createEnvironmentWithCluster = () => ({
+ ...environment,
+ last_deployment: {
+ ...lastDeployment,
+ cluster: { name: TEST_CLUSTER_NAME, path: TEST_CLUSTER_PATH },
+ },
+ });
+
+ const createComponent = (deploymentStatus = {}) => {
+ vm = mountComponent(Component, {
+ deploymentStatus,
+ iconStatus: status,
+ });
+ };
+
+ const findText = () => vm.$el.textContent.trim();
+ const findJobDeploymentLink = () => vm.$el.querySelector('.js-job-deployment-link');
+ const findEnvironmentLink = () => vm.$el.querySelector('.js-environment-link');
+ const findClusterLink = () => vm.$el.querySelector('.js-job-cluster-link');
+
afterEach(() => {
vm.$destroy();
});
describe('with last deployment', () => {
it('renders info for most recent deployment', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'last',
- environment,
- },
- iconStatus: status,
+ createComponent({
+ status: 'last',
+ environment,
});
- expect(vm.$el.textContent.trim()).toEqual(
- 'This job is the most recent deployment to environment.',
+ expect(findText()).toEqual('This job is deployed to environment.');
+ });
+
+ it('renders info with cluster', () => {
+ createComponent({
+ status: 'last',
+ environment: createEnvironmentWithCluster(),
+ });
+
+ expect(findText()).toEqual(
+ `This job is deployed to environment using cluster ${TEST_CLUSTER_NAME}.`,
);
});
});
@@ -43,133 +77,106 @@ describe('Environments block', () => {
describe('with out of date deployment', () => {
describe('with last deployment', () => {
it('renders info for out date and most recent', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'out_of_date',
- environment: Object.assign({}, environment, {
- last_deployment: lastDeployment,
- }),
- },
- iconStatus: status,
+ createComponent({
+ status: 'out_of_date',
+ environment: createEnvironmentWithLastDeployment(),
});
- expect(vm.$el.textContent.trim()).toEqual(
- 'This job is an out-of-date deployment to environment. View the most recent deployment #deployment.',
+ expect(findText()).toEqual(
+ 'This job is an out-of-date deployment to environment. View the most recent deployment.',
);
- expect(vm.$el.querySelector('.js-job-deployment-link').getAttribute('href')).toEqual('bar');
+ expect(findJobDeploymentLink().getAttribute('href')).toEqual('bar');
+ });
+
+ it('renders info with cluster', () => {
+ createComponent({
+ status: 'out_of_date',
+ environment: createEnvironmentWithCluster(),
+ });
+
+ expect(findText()).toEqual(
+ `This job is an out-of-date deployment to environment using cluster ${TEST_CLUSTER_NAME}. View the most recent deployment.`,
+ );
});
});
describe('without last deployment', () => {
it('renders info about out of date deployment', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'out_of_date',
- environment,
- },
- iconStatus: status,
+ createComponent({
+ status: 'out_of_date',
+ environment,
});
- expect(vm.$el.textContent.trim()).toEqual(
- 'This job is an out-of-date deployment to environment.',
- );
+ expect(findText()).toEqual('This job is an out-of-date deployment to environment.');
});
});
});
describe('with failed deployment', () => {
it('renders info about failed deployment', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'failed',
- environment,
- },
- iconStatus: status,
+ createComponent({
+ status: 'failed',
+ environment,
});
- expect(vm.$el.textContent.trim()).toEqual(
- 'The deployment of this job to environment did not succeed.',
- );
+ expect(findText()).toEqual('The deployment of this job to environment did not succeed.');
});
});
describe('creating deployment', () => {
describe('with last deployment', () => {
it('renders info about creating deployment and overriding latest deployment', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'creating',
- environment: Object.assign({}, environment, {
- last_deployment: lastDeployment,
- }),
- },
- iconStatus: status,
+ createComponent({
+ status: 'creating',
+ environment: createEnvironmentWithLastDeployment(),
});
- expect(vm.$el.textContent.trim()).toEqual(
- 'This job is creating a deployment to environment and will overwrite the latest deployment.',
+ expect(findText()).toEqual(
+ 'This job is creating a deployment to environment. This will overwrite the latest deployment.',
);
- expect(vm.$el.querySelector('.js-job-deployment-link').getAttribute('href')).toEqual('bar');
+ expect(findJobDeploymentLink().getAttribute('href')).toEqual('bar');
+ expect(findEnvironmentLink().getAttribute('href')).toEqual(environment.environment_path);
+ expect(findClusterLink()).toBeNull();
});
});
describe('without last deployment', () => {
it('renders info about failed deployment', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'creating',
- environment,
- },
- iconStatus: status,
+ createComponent({
+ status: 'creating',
+ environment,
});
- expect(vm.$el.textContent.trim()).toEqual(
- 'This job is creating a deployment to environment.',
- );
+ expect(findText()).toEqual('This job is creating a deployment to environment.');
});
});
describe('without environment', () => {
it('does not render environment link', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'creating',
- environment: null,
- },
- iconStatus: status,
+ createComponent({
+ status: 'creating',
+ environment: null,
});
- expect(vm.$el.querySelector('.js-environment-link')).toBeNull();
+ expect(findEnvironmentLink()).toBeNull();
});
});
});
describe('with a cluster', () => {
it('renders the cluster link', () => {
- const cluster = {
- name: 'the-cluster',
- path: '/the-cluster-path',
- };
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'last',
- environment: Object.assign({}, environment, {
- last_deployment: {
- ...lastDeployment,
- cluster,
- },
- }),
- },
- iconStatus: status,
+ createComponent({
+ status: 'last',
+ environment: createEnvironmentWithCluster(),
});
- expect(vm.$el.textContent.trim()).toContain('Cluster the-cluster was used.');
-
- expect(vm.$el.querySelector('.js-job-cluster-link').getAttribute('href')).toEqual(
- '/the-cluster-path',
+ expect(findText()).toEqual(
+ `This job is deployed to environment using cluster ${TEST_CLUSTER_NAME}.`,
);
+
+ expect(findClusterLink().getAttribute('href')).toEqual(TEST_CLUSTER_PATH);
});
describe('when the cluster is missing the path', () => {
@@ -177,39 +184,20 @@ describe('Environments block', () => {
const cluster = {
name: 'the-cluster',
};
- vm = mountComponent(Component, {
- deploymentStatus: {
- status: 'last',
- environment: Object.assign({}, environment, {
- last_deployment: {
- ...lastDeployment,
- cluster,
- },
- }),
- },
- iconStatus: status,
- });
-
- expect(vm.$el.textContent.trim()).toContain('Cluster the-cluster was used.');
-
- expect(vm.$el.querySelector('.js-job-cluster-link')).toBeNull();
- });
- });
- });
-
- describe('without a cluster', () => {
- it('does not render a cluster link', () => {
- vm = mountComponent(Component, {
- deploymentStatus: {
+ createComponent({
status: 'last',
environment: Object.assign({}, environment, {
- last_deployment: lastDeployment,
+ last_deployment: {
+ ...lastDeployment,
+ cluster,
+ },
}),
- },
- iconStatus: status,
- });
+ });
+
+ expect(findText()).toContain('using cluster the-cluster.');
- expect(vm.$el.querySelector('.js-job-cluster-link')).toBeNull();
+ expect(findClusterLink()).toBeNull();
+ });
});
});
});
diff --git a/spec/javascripts/jobs/components/job_log_spec.js b/spec/javascripts/jobs/components/job_log_spec.js
index 24bb6b9a48b..dd58f234394 100644
--- a/spec/javascripts/jobs/components/job_log_spec.js
+++ b/spec/javascripts/jobs/components/job_log_spec.js
@@ -3,7 +3,6 @@ import component from '~/jobs/components/job_log.vue';
import createStore from '~/jobs/store';
import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
import { resetStore } from '../store/helpers';
-import { logWithCollapsibleSections } from '../mock_data';
describe('Job Log', () => {
const Component = Vue.extend(component);
@@ -63,60 +62,4 @@ describe('Job Log', () => {
expect(vm.$el.querySelector('.js-log-animation')).toBeNull();
});
});
-
- describe('Collapsible sections', () => {
- beforeEach(() => {
- vm = mountComponentWithStore(Component, {
- props: {
- trace: logWithCollapsibleSections.html,
- isComplete: true,
- },
- store,
- });
- });
-
- it('renders open arrow', () => {
- expect(vm.$el.querySelector('.fa-caret-down')).not.toBeNull();
- });
-
- it('toggles hidden class to the sibilings rows when arrow is clicked', done => {
- vm.$nextTick()
- .then(() => {
- const { section } = vm.$el.querySelector('.js-section-start').dataset;
- vm.$el.querySelector('.js-section-start').click();
-
- vm.$el.querySelectorAll(`.js-s-${section}:not(.js-section-header)`).forEach(el => {
- expect(el.classList.contains('hidden')).toEqual(true);
- });
-
- vm.$el.querySelector('.js-section-start').click();
-
- vm.$el.querySelectorAll(`.js-s-${section}:not(.js-section-header)`).forEach(el => {
- expect(el.classList.contains('hidden')).toEqual(false);
- });
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('toggles hidden class to the sibilings rows when header section is clicked', done => {
- vm.$nextTick()
- .then(() => {
- const { section } = vm.$el.querySelector('.js-section-header').dataset;
- vm.$el.querySelector('.js-section-header').click();
-
- vm.$el.querySelectorAll(`.js-s-${section}:not(.js-section-header)`).forEach(el => {
- expect(el.classList.contains('hidden')).toEqual(true);
- });
-
- vm.$el.querySelector('.js-section-header').click();
-
- vm.$el.querySelectorAll(`.js-s-${section}:not(.js-section-header)`).forEach(el => {
- expect(el.classList.contains('hidden')).toEqual(false);
- });
- })
- .then(done)
- .catch(done.fail);
- });
- });
});
diff --git a/spec/javascripts/labels_issue_sidebar_spec.js b/spec/javascripts/labels_issue_sidebar_spec.js
index ccf439aac74..5ae5643aefc 100644
--- a/spec/javascripts/labels_issue_sidebar_spec.js
+++ b/spec/javascripts/labels_issue_sidebar_spec.js
@@ -5,6 +5,7 @@ import MockAdapter from 'axios-mock-adapter';
import axios from '~/lib/utils/axios_utils';
import IssuableContext from '~/issuable_context';
import LabelsSelect from '~/labels_select';
+import _ from 'underscore';
import '~/gl_dropdown';
import 'select2';
@@ -15,6 +16,35 @@ import '~/users_select';
let saveLabelCount = 0;
let mock;
+function testLabelClicks(labelOrder, done) {
+ $('.edit-link')
+ .get(0)
+ .click();
+
+ setTimeout(() => {
+ const labelsInDropdown = $('.dropdown-content a');
+
+ expect(labelsInDropdown.length).toBe(10);
+
+ const arrayOfLabels = labelsInDropdown.get();
+ const randomArrayOfLabels = _.shuffle(arrayOfLabels);
+ randomArrayOfLabels.forEach((label, i) => {
+ if (i < saveLabelCount) {
+ $(label).click();
+ }
+ });
+
+ $('.edit-link')
+ .get(0)
+ .click();
+
+ setTimeout(() => {
+ expect($('.sidebar-collapsed-icon').attr('data-original-title')).toBe(labelOrder);
+ done();
+ }, 0);
+ }, 0);
+}
+
describe('Issue dropdown sidebar', () => {
preloadFixtures('static/issue_sidebar_label.html');
@@ -29,7 +59,7 @@ describe('Issue dropdown sidebar', () => {
mock.onGet('/root/test/labels.json').reply(() => {
const labels = Array(10)
.fill()
- .map((_, i) => ({
+ .map((_val, i) => ({
id: i,
title: `test ${i}`,
color: '#5CB85C',
@@ -41,7 +71,7 @@ describe('Issue dropdown sidebar', () => {
mock.onPut('/root/test/issues/2.json').reply(() => {
const labels = Array(saveLabelCount)
.fill()
- .map((_, i) => ({
+ .map((_val, i) => ({
id: i,
title: `test ${i}`,
color: '#5CB85C',
@@ -57,61 +87,11 @@ describe('Issue dropdown sidebar', () => {
it('changes collapsed tooltip when changing labels when less than 5', done => {
saveLabelCount = 5;
- $('.edit-link')
- .get(0)
- .click();
-
- setTimeout(() => {
- expect($('.dropdown-content a').length).toBe(10);
-
- $('.dropdown-content a').each(function(i) {
- if (i < saveLabelCount) {
- $(this)
- .get(0)
- .click();
- }
- });
-
- $('.edit-link')
- .get(0)
- .click();
-
- setTimeout(() => {
- expect($('.sidebar-collapsed-icon').attr('data-original-title')).toBe(
- 'test 0, test 1, test 2, test 3, test 4',
- );
- done();
- }, 0);
- }, 0);
+ testLabelClicks('test 0, test 1, test 2, test 3, test 4', done);
});
it('changes collapsed tooltip when changing labels when more than 5', done => {
saveLabelCount = 6;
- $('.edit-link')
- .get(0)
- .click();
-
- setTimeout(() => {
- expect($('.dropdown-content a').length).toBe(10);
-
- $('.dropdown-content a').each(function(i) {
- if (i < saveLabelCount) {
- $(this)
- .get(0)
- .click();
- }
- });
-
- $('.edit-link')
- .get(0)
- .click();
-
- setTimeout(() => {
- expect($('.sidebar-collapsed-icon').attr('data-original-title')).toBe(
- 'test 0, test 1, test 2, test 3, test 4, and 1 more',
- );
- done();
- }, 0);
- }, 0);
+ testLabelClicks('test 0, test 1, test 2, test 3, test 4, and 1 more', done);
});
});
diff --git a/spec/javascripts/lazy_loader_spec.js b/spec/javascripts/lazy_loader_spec.js
index f3fb792c62d..82ab73c2170 100644
--- a/spec/javascripts/lazy_loader_spec.js
+++ b/spec/javascripts/lazy_loader_spec.js
@@ -62,7 +62,7 @@ describe('LazyLoader', function() {
waitForAttributeChange(newImg, ['data-src', 'src']),
])
.then(() => {
- expect(LazyLoader.loadImage).toHaveBeenCalled();
+ expect(LazyLoader.loadImage).toHaveBeenCalledWith(newImg);
expect(newImg.getAttribute('src')).toBe(testPath);
expect(newImg).toHaveClass('js-lazy-loaded');
done();
@@ -79,7 +79,7 @@ describe('LazyLoader', function() {
scrollIntoViewPromise(newImg)
.then(waitForPromises)
.then(() => {
- expect(LazyLoader.loadImage).not.toHaveBeenCalled();
+ expect(LazyLoader.loadImage).not.toHaveBeenCalledWith(newImg);
expect(newImg).not.toHaveClass('js-lazy-loaded');
done();
})
@@ -98,7 +98,7 @@ describe('LazyLoader', function() {
scrollIntoViewPromise(newImg)
.then(waitForPromises)
.then(() => {
- expect(LazyLoader.loadImage).not.toHaveBeenCalled();
+ expect(LazyLoader.loadImage).not.toHaveBeenCalledWith(newImg);
expect(newImg).not.toHaveClass('js-lazy-loaded');
done();
})
@@ -121,7 +121,7 @@ describe('LazyLoader', function() {
])
.then(waitForPromises)
.then(() => {
- expect(LazyLoader.loadImage).toHaveBeenCalled();
+ expect(LazyLoader.loadImage).toHaveBeenCalledWith(newImg);
expect(newImg).toHaveClass('js-lazy-loaded');
done();
})
@@ -156,7 +156,7 @@ describe('LazyLoader', function() {
Promise.all([scrollIntoViewPromise(img), waitForAttributeChange(img, ['data-src', 'src'])])
.then(() => {
- expect(LazyLoader.loadImage).toHaveBeenCalled();
+ expect(LazyLoader.loadImage).toHaveBeenCalledWith(img);
expect(img.getAttribute('src')).toBe(originalDataSrc);
expect(img).toHaveClass('js-lazy-loaded');
done();
@@ -176,7 +176,7 @@ describe('LazyLoader', function() {
waitForAttributeChange(newImg, ['data-src', 'src']),
])
.then(() => {
- expect(LazyLoader.loadImage).toHaveBeenCalled();
+ expect(LazyLoader.loadImage).toHaveBeenCalledWith(newImg);
expect(newImg.getAttribute('src')).toBe(testPath);
expect(newImg).toHaveClass('js-lazy-loaded');
done();
@@ -193,7 +193,7 @@ describe('LazyLoader', function() {
scrollIntoViewPromise(newImg)
.then(waitForPromises)
.then(() => {
- expect(LazyLoader.loadImage).not.toHaveBeenCalled();
+ expect(LazyLoader.loadImage).not.toHaveBeenCalledWith(newImg);
expect(newImg).not.toHaveClass('js-lazy-loaded');
done();
})
@@ -212,7 +212,7 @@ describe('LazyLoader', function() {
scrollIntoViewPromise(newImg)
.then(waitForPromises)
.then(() => {
- expect(LazyLoader.loadImage).not.toHaveBeenCalled();
+ expect(LazyLoader.loadImage).not.toHaveBeenCalledWith(newImg);
expect(newImg).not.toHaveClass('js-lazy-loaded');
done();
})
@@ -234,7 +234,7 @@ describe('LazyLoader', function() {
waitForAttributeChange(newImg, ['data-src', 'src']),
])
.then(() => {
- expect(LazyLoader.loadImage).toHaveBeenCalled();
+ expect(LazyLoader.loadImage).toHaveBeenCalledWith(newImg);
expect(newImg).toHaveClass('js-lazy-loaded');
done();
})
diff --git a/spec/javascripts/lib/utils/common_utils_spec.js b/spec/javascripts/lib/utils/common_utils_spec.js
index 85949f2ae86..8956bc92e6b 100644
--- a/spec/javascripts/lib/utils/common_utils_spec.js
+++ b/spec/javascripts/lib/utils/common_utils_spec.js
@@ -943,4 +943,14 @@ describe('common_utils', () => {
expect(commonUtils.isScopedLabel({ title: 'foobar' })).toBe(false);
});
});
+
+ describe('getDashPath', () => {
+ it('returns the path following /-/', () => {
+ expect(commonUtils.getDashPath('/some/-/url-with-dashes-/')).toEqual('url-with-dashes-/');
+ });
+
+ it('returns null when no path follows /-/', () => {
+ expect(commonUtils.getDashPath('/some/url')).toEqual(null);
+ });
+ });
});
diff --git a/spec/javascripts/line_highlighter_spec.js b/spec/javascripts/line_highlighter_spec.js
index a75470b4db8..f8f835ffdef 100644
--- a/spec/javascripts/line_highlighter_spec.js
+++ b/spec/javascripts/line_highlighter_spec.js
@@ -1,4 +1,4 @@
-/* eslint-disable no-var, prefer-template, no-else-return, dot-notation, no-return-assign, no-new, no-underscore-dangle */
+/* eslint-disable no-var, no-else-return, dot-notation, no-return-assign, no-new, no-underscore-dangle */
import $ from 'jquery';
import LineHighlighter from '~/line_highlighter';
@@ -8,10 +8,10 @@ describe('LineHighlighter', function() {
preloadFixtures('static/line_highlighter.html');
clickLine = function(number, eventData = {}) {
if ($.isEmptyObject(eventData)) {
- return $('#L' + number).click();
+ return $(`#L${number}`).click();
} else {
const e = $.Event('click', eventData);
- return $('#L' + number).trigger(e);
+ return $(`#L${number}`).trigger(e);
}
};
beforeEach(function() {
@@ -42,9 +42,9 @@ describe('LineHighlighter', function() {
var line;
new LineHighlighter({ hash: '#L5-25' });
- expect($('.' + this.css).length).toBe(21);
+ expect($(`.${this.css}`).length).toBe(21);
for (line = 5; line <= 25; line += 1) {
- expect($('#LC' + line)).toHaveClass(this.css);
+ expect($(`#LC${line}`)).toHaveClass(this.css);
}
});
@@ -130,7 +130,7 @@ describe('LineHighlighter', function() {
});
expect($('#LC13')).toHaveClass(this.css);
- expect($('.' + this.css).length).toBe(1);
+ expect($(`.${this.css}`).length).toBe(1);
});
it('sets the hash', function() {
@@ -152,9 +152,9 @@ describe('LineHighlighter', function() {
shiftKey: true,
});
- expect($('.' + this.css).length).toBe(6);
+ expect($(`.${this.css}`).length).toBe(6);
for (line = 15; line <= 20; line += 1) {
- expect($('#LC' + line)).toHaveClass(this.css);
+ expect($(`#LC${line}`)).toHaveClass(this.css);
}
});
@@ -165,9 +165,9 @@ describe('LineHighlighter', function() {
shiftKey: true,
});
- expect($('.' + this.css).length).toBe(6);
+ expect($(`.${this.css}`).length).toBe(6);
for (line = 5; line <= 10; line += 1) {
- expect($('#LC' + line)).toHaveClass(this.css);
+ expect($(`#LC${line}`)).toHaveClass(this.css);
}
});
});
@@ -188,9 +188,9 @@ describe('LineHighlighter', function() {
shiftKey: true,
});
- expect($('.' + this.css).length).toBe(6);
+ expect($(`.${this.css}`).length).toBe(6);
for (line = 5; line <= 10; line += 1) {
- expect($('#LC' + line)).toHaveClass(this.css);
+ expect($(`#LC${line}`)).toHaveClass(this.css);
}
});
@@ -200,9 +200,9 @@ describe('LineHighlighter', function() {
shiftKey: true,
});
- expect($('.' + this.css).length).toBe(6);
+ expect($(`.${this.css}`).length).toBe(6);
for (line = 10; line <= 15; line += 1) {
- expect($('#LC' + line)).toHaveClass(this.css);
+ expect($(`#LC${line}`)).toHaveClass(this.css);
}
});
});
diff --git a/spec/javascripts/monitoring/charts/time_series_spec.js b/spec/javascripts/monitoring/charts/time_series_spec.js
index f6a5ed03c0d..5c718135b90 100644
--- a/spec/javascripts/monitoring/charts/time_series_spec.js
+++ b/spec/javascripts/monitoring/charts/time_series_spec.js
@@ -60,6 +60,18 @@ describe('Time series component', () => {
expect(timeSeriesChart.find('.js-graph-widgets').text()).toBe(mockWidgets);
});
+ it('allows user to override max value label text using prop', () => {
+ timeSeriesChart.setProps({ legendMaxText: 'legendMaxText' });
+
+ expect(timeSeriesChart.props().legendMaxText).toBe('legendMaxText');
+ });
+
+ it('allows user to override average value label text using prop', () => {
+ timeSeriesChart.setProps({ legendAverageText: 'averageText' });
+
+ expect(timeSeriesChart.props().legendAverageText).toBe('averageText');
+ });
+
describe('methods', () => {
describe('formatTooltipText', () => {
const mockDate = deploymentData[0].created_at;
@@ -140,6 +152,16 @@ describe('Time series component', () => {
expect(timeSeriesChart.vm.svgs[mockSvgName]).toBe(`path://${mockSvgPathContent}`);
});
});
+
+ it('contains an svg object within an array to properly render icon', () => {
+ timeSeriesChart.vm.$nextTick(() => {
+ expect(timeSeriesChart.vm.chartOptions.dataZoom).toEqual([
+ {
+ handleIcon: `path://${mockSvgPathContent}`,
+ },
+ ]);
+ });
+ });
});
describe('onResize', () => {
diff --git a/spec/javascripts/monitoring/components/dashboard_spec.js b/spec/javascripts/monitoring/components/dashboard_spec.js
index 6ce32d21f45..75df2ce3103 100644
--- a/spec/javascripts/monitoring/components/dashboard_spec.js
+++ b/spec/javascripts/monitoring/components/dashboard_spec.js
@@ -1,9 +1,9 @@
import Vue from 'vue';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { GlToast } from '@gitlab/ui';
+import VueDraggable from 'vuedraggable';
import MockAdapter from 'axios-mock-adapter';
import Dashboard from '~/monitoring/components/dashboard.vue';
-import { timeWindows, timeWindowsKeyNames } from '~/monitoring/constants';
import * as types from '~/monitoring/stores/mutation_types';
import { createStore } from '~/monitoring/stores';
import axios from '~/lib/utils/axios_utils';
@@ -36,6 +36,12 @@ const propsData = {
validateQueryPath: '',
};
+const resetSpy = spy => {
+ if (spy) {
+ spy.calls.reset();
+ }
+};
+
export default propsData;
describe('Dashboard', () => {
@@ -51,11 +57,6 @@ describe('Dashboard', () => {
<div class="layout-page"></div>
`);
- window.gon = {
- ...window.gon,
- ee: false,
- };
-
store = createStore();
mock = new MockAdapter(axios);
DashboardComponent = Vue.extend(Dashboard);
@@ -100,10 +101,15 @@ describe('Dashboard', () => {
});
describe('requests information to the server', () => {
+ let spy;
beforeEach(() => {
mock.onGet(mockApiEndpoint).reply(200, metricsGroupsAPIResponse);
});
+ afterEach(() => {
+ resetSpy(spy);
+ });
+
it('shows up a loading state', done => {
component = new DashboardComponent({
el: document.querySelector('.prometheus-graphs'),
@@ -276,7 +282,7 @@ describe('Dashboard', () => {
});
});
- it('renders the time window dropdown with a set of options', done => {
+ it('renders the datetimepicker dropdown', done => {
component = new DashboardComponent({
el: document.querySelector('.prometheus-graphs'),
propsData: {
@@ -286,17 +292,9 @@ describe('Dashboard', () => {
},
store,
});
- const numberOfTimeWindows = Object.keys(timeWindows).length;
setTimeout(() => {
- const timeWindowDropdown = component.$el.querySelector('.js-time-window-dropdown');
- const timeWindowDropdownEls = component.$el.querySelectorAll(
- '.js-time-window-dropdown .dropdown-item',
- );
-
- expect(timeWindowDropdown).not.toBeNull();
- expect(timeWindowDropdownEls.length).toEqual(numberOfTimeWindows);
-
+ expect(component.$el.querySelector('.js-time-window-dropdown')).not.toBeNull();
done();
});
});
@@ -333,8 +331,8 @@ describe('Dashboard', () => {
});
it('shows a specific time window selected from the url params', done => {
- const start = 1564439536;
- const end = 1564441336;
+ const start = '2019-10-01T18:27:47.000Z';
+ const end = '2019-10-01T18:57:47.000Z';
spyOnDependency(Dashboard, 'getTimeDiff').and.returnValue({
start,
end,
@@ -359,7 +357,7 @@ describe('Dashboard', () => {
});
});
- it('defaults to the eight hours time window for non valid url parameters', done => {
+ it('shows an error message if invalid url parameters are passed', done => {
spyOnDependency(Dashboard, 'getParameterValues').and.returnValue([
'<script>alert("XSS")</script>',
]);
@@ -370,15 +368,111 @@ describe('Dashboard', () => {
store,
});
- Vue.nextTick(() => {
- expect(component.selectedTimeWindowKey).toEqual(timeWindowsKeyNames.eightHours);
+ spy = spyOn(component, 'showInvalidDateError');
+ component.$mount();
+ component.$nextTick(() => {
+ expect(component.showInvalidDateError).toHaveBeenCalled();
done();
});
});
});
- // https://gitlab.com/gitlab-org/gitlab-foss/issues/66922
+ describe('drag and drop function', () => {
+ let wrapper;
+ let expectedPanelCount; // also called metrics, naming to be improved: https://gitlab.com/gitlab-org/gitlab/issues/31565
+ const findDraggables = () => wrapper.findAll(VueDraggable);
+ const findEnabledDraggables = () => findDraggables().filter(f => !f.attributes('disabled'));
+ const findDraggablePanels = () => wrapper.findAll('.js-draggable-panel');
+ const findRearrangeButton = () => wrapper.find('.js-rearrange-button');
+
+ beforeEach(done => {
+ mock.onGet(mockApiEndpoint).reply(200, metricsGroupsAPIResponse);
+ expectedPanelCount = metricsGroupsAPIResponse.data.reduce(
+ (acc, d) => d.metrics.length + acc,
+ 0,
+ );
+ store.dispatch('monitoringDashboard/setFeatureFlags', { additionalPanelTypesEnabled: true });
+
+ wrapper = shallowMount(DashboardComponent, {
+ localVue,
+ sync: false,
+ propsData: { ...propsData, hasMetrics: true },
+ store,
+ });
+
+ // not using $nextTicket becuase we must wait for the dashboard
+ // to be populated with the mock data results.
+ setTimeout(done);
+ });
+
+ it('wraps vuedraggable', () => {
+ expect(findDraggablePanels().exists()).toBe(true);
+ expect(findDraggablePanels().length).toEqual(expectedPanelCount);
+ });
+
+ it('is disabled by default', () => {
+ expect(findRearrangeButton().exists()).toBe(false);
+ expect(findEnabledDraggables().length).toBe(0);
+ });
+
+ describe('when rearrange is enabled', () => {
+ beforeEach(done => {
+ wrapper.setProps({ rearrangePanelsAvailable: true });
+ wrapper.vm.$nextTick(done);
+ });
+
+ it('displays rearrange button', () => {
+ expect(findRearrangeButton().exists()).toBe(true);
+ });
+
+ describe('when rearrange button is clicked', () => {
+ const findFirstDraggableRemoveButton = () =>
+ findDraggablePanels()
+ .at(0)
+ .find('.js-draggable-remove');
+
+ beforeEach(done => {
+ findRearrangeButton().vm.$emit('click');
+ wrapper.vm.$nextTick(done);
+ });
+
+ it('it enables draggables', () => {
+ expect(findRearrangeButton().attributes('pressed')).toBeTruthy();
+ expect(findEnabledDraggables()).toEqual(findDraggables());
+ });
+
+ it('shows a remove button, which removes a panel', done => {
+ expect(findFirstDraggableRemoveButton().isEmpty()).toBe(false);
+
+ expect(findDraggablePanels().length).toEqual(expectedPanelCount);
+ findFirstDraggableRemoveButton().trigger('click');
+
+ wrapper.vm.$nextTick(() => {
+ // At present graphs will not be removed in backend
+ // See https://gitlab.com/gitlab-org/gitlab/issues/27835
+ expect(findDraggablePanels().length).toEqual(expectedPanelCount - 1);
+ done();
+ });
+ });
+
+ it('it disables draggables when clicked again', done => {
+ findRearrangeButton().vm.$emit('click');
+ wrapper.vm.$nextTick(() => {
+ expect(findRearrangeButton().attributes('pressed')).toBeFalsy();
+ expect(findEnabledDraggables().length).toBe(0);
+ done();
+ });
+ });
+ });
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+ });
+
+ // https://gitlab.com/gitlab-org/gitlab-ce/issues/66922
// eslint-disable-next-line jasmine/no-disabled-tests
xdescribe('link to chart', () => {
let wrapper;
@@ -527,7 +621,6 @@ describe('Dashboard', () => {
component.$store.dispatch('monitoringDashboard/setFeatureFlags', {
prometheusEndpoint: false,
- multipleDashboardsEnabled: true,
});
component.$store.commit(
diff --git a/spec/javascripts/monitoring/store/actions_spec.js b/spec/javascripts/monitoring/store/actions_spec.js
index 955a39e03a5..1bd74f59282 100644
--- a/spec/javascripts/monitoring/store/actions_spec.js
+++ b/spec/javascripts/monitoring/store/actions_spec.js
@@ -240,8 +240,6 @@ describe('Monitoring store actions', () => {
const response = metricsDashboardResponse;
response.all_dashboards = dashboardGitResponse;
- state.multipleDashboardsEnabled = true;
-
receiveMetricsDashboardSuccess({ state, commit, dispatch }, { response, params });
expect(commit).toHaveBeenCalledWith(types.SET_ALL_DASHBOARDS, dashboardGitResponse);
diff --git a/spec/javascripts/monitoring/store/mutations_spec.js b/spec/javascripts/monitoring/store/mutations_spec.js
index bdb68a80a8a..bdddd83358c 100644
--- a/spec/javascripts/monitoring/store/mutations_spec.js
+++ b/spec/javascripts/monitoring/store/mutations_spec.js
@@ -7,6 +7,7 @@ import {
metricsDashboardResponse,
dashboardGitResponse,
} from '../mock_data';
+import { uniqMetricsId } from '~/monitoring/stores/utils';
describe('Monitoring mutations', () => {
let stateCopy;
@@ -128,6 +129,7 @@ describe('Monitoring mutations', () => {
describe('SET_QUERY_RESULT', () => {
const metricId = 12;
+ const id = 'system_metrics_kubernetes_container_memory_total';
const result = [{ values: [[0, 1], [1, 1], [1, 3]] }];
beforeEach(() => {
@@ -146,12 +148,13 @@ describe('Monitoring mutations', () => {
});
it('sets metricsWithData value', () => {
+ const uniqId = uniqMetricsId({ metric_id: metricId, id });
mutations[types.SET_QUERY_RESULT](stateCopy, {
- metricId,
+ metricId: uniqId,
result,
});
- expect(stateCopy.metricsWithData).toEqual([12]);
+ expect(stateCopy.metricsWithData).toEqual([uniqId]);
});
it('does not store empty results', () => {
diff --git a/spec/javascripts/monitoring/store/utils_spec.js b/spec/javascripts/monitoring/store/utils_spec.js
index 73dd370ffb3..98388ac19f8 100644
--- a/spec/javascripts/monitoring/store/utils_spec.js
+++ b/spec/javascripts/monitoring/store/utils_spec.js
@@ -1,4 +1,4 @@
-import { groupQueriesByChartInfo } from '~/monitoring/stores/utils';
+import { groupQueriesByChartInfo, normalizeMetric, uniqMetricsId } from '~/monitoring/stores/utils';
describe('groupQueriesByChartInfo', () => {
let input;
@@ -12,7 +12,11 @@ describe('groupQueriesByChartInfo', () => {
];
output = [
- { title: 'title', y_label: 'MB', queries: [{ metricId: null }, { metricId: null }] },
+ {
+ title: 'title',
+ y_label: 'MB',
+ queries: [{ metricId: null }, { metricId: null }],
+ },
{ title: 'new title', y_label: 'MB', queries: [{ metricId: null }] },
];
@@ -35,3 +39,36 @@ describe('groupQueriesByChartInfo', () => {
expect(groupQueriesByChartInfo(input)).toEqual(output);
});
});
+
+describe('normalizeMetric', () => {
+ [
+ { args: [], expected: 'undefined_undefined' },
+ { args: [undefined], expected: 'undefined_undefined' },
+ { args: [{ id: 'something' }], expected: 'undefined_something' },
+ { args: [{ id: 45 }], expected: 'undefined_45' },
+ { args: [{ metric_id: 5 }], expected: '5_undefined' },
+ { args: [{ metric_id: 'something' }], expected: 'something_undefined' },
+ {
+ args: [{ metric_id: 5, id: 'system_metrics_kubernetes_container_memory_total' }],
+ expected: '5_system_metrics_kubernetes_container_memory_total',
+ },
+ ].forEach(({ args, expected }) => {
+ it(`normalizes metric to "${expected}" with args=${JSON.stringify(args)}`, () => {
+ expect(normalizeMetric(...args)).toEqual({ metric_id: expected });
+ });
+ });
+});
+
+describe('uniqMetricsId', () => {
+ [
+ { input: { id: 1 }, expected: 'undefined_1' },
+ { input: { metric_id: 2 }, expected: '2_undefined' },
+ { input: { metric_id: 2, id: 21 }, expected: '2_21' },
+ { input: { metric_id: 22, id: 1 }, expected: '22_1' },
+ { input: { metric_id: 'aaa', id: '_a' }, expected: 'aaa__a' },
+ ].forEach(({ input, expected }) => {
+ it(`creates unique metric ID with ${JSON.stringify(input)}`, () => {
+ expect(uniqMetricsId(input)).toEqual(expected);
+ });
+ });
+});
diff --git a/spec/javascripts/monitoring/utils_spec.js b/spec/javascripts/monitoring/utils_spec.js
index e22e8cdc03d..512dd2a0eb3 100644
--- a/spec/javascripts/monitoring/utils_spec.js
+++ b/spec/javascripts/monitoring/utils_spec.js
@@ -1,5 +1,14 @@
-import { getTimeDiff, graphDataValidatorForValues } from '~/monitoring/utils';
-import { timeWindows } from '~/monitoring/constants';
+import {
+ getTimeDiff,
+ getTimeWindow,
+ graphDataValidatorForValues,
+ isDateTimePickerInputValid,
+ truncateZerosInDateTime,
+ stringToISODate,
+ ISODateToString,
+ isValidDate,
+} from '~/monitoring/utils';
+import { timeWindows, timeWindowsKeyNames } from '~/monitoring/constants';
import { graphDataPrometheusQuery, graphDataPrometheusQueryRange } from './mock_data';
describe('getTimeDiff', () => {
@@ -39,6 +48,55 @@ describe('getTimeDiff', () => {
});
});
+describe('getTimeWindow', () => {
+ [
+ {
+ args: [
+ {
+ start: '2019-10-01T18:27:47.000Z',
+ end: '2019-10-01T21:27:47.000Z',
+ },
+ ],
+ expected: timeWindowsKeyNames.threeHours,
+ },
+ {
+ args: [
+ {
+ start: '2019-10-01T28:27:47.000Z',
+ end: '2019-10-01T21:27:47.000Z',
+ },
+ ],
+ expected: null,
+ },
+ {
+ args: [
+ {
+ start: '',
+ end: '',
+ },
+ ],
+ expected: null,
+ },
+ {
+ args: [
+ {
+ start: null,
+ end: null,
+ },
+ ],
+ expected: null,
+ },
+ {
+ args: [{}],
+ expected: null,
+ },
+ ].forEach(({ args, expected }) => {
+ it(`returns "${expected}" with args=${JSON.stringify(args)}`, () => {
+ expect(getTimeWindow(...args)).toEqual(expected);
+ });
+ });
+});
+
describe('graphDataValidatorForValues', () => {
/*
* When dealing with a metric using the query format, e.g.
@@ -62,3 +120,190 @@ describe('graphDataValidatorForValues', () => {
expect(validGraphData).toBe(true);
});
});
+
+describe('stringToISODate', () => {
+ ['', 'null', undefined, 'abc'].forEach(input => {
+ it(`throws error for invalid input like ${input}`, done => {
+ try {
+ stringToISODate(input);
+ } catch (e) {
+ expect(e).toBeDefined();
+ done();
+ }
+ });
+ });
+ [
+ {
+ input: '2019-09-09 01:01:01',
+ output: '2019-09-09T01:01:01Z',
+ },
+ {
+ input: '2019-09-09 00:00:00',
+ output: '2019-09-09T00:00:00Z',
+ },
+ {
+ input: '2019-09-09 23:59:59',
+ output: '2019-09-09T23:59:59Z',
+ },
+ {
+ input: '2019-09-09',
+ output: '2019-09-09T00:00:00Z',
+ },
+ ].forEach(({ input, output }) => {
+ it(`returns ${output} from ${input}`, () => {
+ expect(stringToISODate(input)).toBe(output);
+ });
+ });
+});
+
+describe('ISODateToString', () => {
+ [
+ {
+ input: new Date('2019-09-09T00:00:00.000Z'),
+ output: '2019-09-09 00:00:00',
+ },
+ {
+ input: new Date('2019-09-09T07:00:00.000Z'),
+ output: '2019-09-09 07:00:00',
+ },
+ ].forEach(({ input, output }) => {
+ it(`ISODateToString return ${output} for ${input}`, () => {
+ expect(ISODateToString(input)).toBe(output);
+ });
+ });
+});
+
+describe('truncateZerosInDateTime', () => {
+ [
+ {
+ input: '',
+ output: '',
+ },
+ {
+ input: '2019-10-10',
+ output: '2019-10-10',
+ },
+ {
+ input: '2019-10-10 00:00:01',
+ output: '2019-10-10 00:00:01',
+ },
+ {
+ input: '2019-10-10 00:00:00',
+ output: '2019-10-10',
+ },
+ ].forEach(({ input, output }) => {
+ it(`truncateZerosInDateTime return ${output} for ${input}`, () => {
+ expect(truncateZerosInDateTime(input)).toBe(output);
+ });
+ });
+});
+
+describe('isValidDate', () => {
+ [
+ {
+ input: '2019-09-09T00:00:00.000Z',
+ output: true,
+ },
+ {
+ input: '2019-09-09T000:00.000Z',
+ output: false,
+ },
+ {
+ input: 'a2019-09-09T000:00.000Z',
+ output: false,
+ },
+ {
+ input: '2019-09-09T',
+ output: false,
+ },
+ {
+ input: '2019-09-09',
+ output: true,
+ },
+ {
+ input: '2019-9-9',
+ output: true,
+ },
+ {
+ input: '2019-9-',
+ output: true,
+ },
+ {
+ input: '2019--',
+ output: false,
+ },
+ {
+ input: '2019',
+ output: true,
+ },
+ {
+ input: '',
+ output: false,
+ },
+ {
+ input: null,
+ output: false,
+ },
+ ].forEach(({ input, output }) => {
+ it(`isValidDate return ${output} for ${input}`, () => {
+ expect(isValidDate(input)).toBe(output);
+ });
+ });
+});
+
+describe('isDateTimePickerInputValid', () => {
+ [
+ {
+ input: null,
+ output: false,
+ },
+ {
+ input: '',
+ output: false,
+ },
+ {
+ input: 'xxxx-xx-xx',
+ output: false,
+ },
+ {
+ input: '9999-99-19',
+ output: false,
+ },
+ {
+ input: '2019-19-23',
+ output: false,
+ },
+ {
+ input: '2019-09-23',
+ output: true,
+ },
+ {
+ input: '2019-09-23 x',
+ output: false,
+ },
+ {
+ input: '2019-09-29 0:0:0',
+ output: false,
+ },
+ {
+ input: '2019-09-29 00:00:00',
+ output: true,
+ },
+ {
+ input: '2019-09-29 24:24:24',
+ output: false,
+ },
+ {
+ input: '2019-09-29 23:24:24',
+ output: true,
+ },
+ {
+ input: '2019-09-29 23:24:24 ',
+ output: false,
+ },
+ ].forEach(({ input, output }) => {
+ it(`returns ${output} for ${input}`, () => {
+ expect(isDateTimePickerInputValid(input)).toBe(output);
+ });
+ });
+});
diff --git a/spec/javascripts/notes/components/discussion_filter_spec.js b/spec/javascripts/notes/components/discussion_filter_spec.js
index 1c366aee8e2..7524de36ac5 100644
--- a/spec/javascripts/notes/components/discussion_filter_spec.js
+++ b/spec/javascripts/notes/components/discussion_filter_spec.js
@@ -160,5 +160,28 @@ describe('DiscussionFilter component', () => {
done();
});
});
+
+ it('fetches discussions when there is a hash', done => {
+ window.location.hash = `note_${discussionMock.notes[0].id}`;
+ vm.currentValue = discussionFiltersMock[2].value;
+ spyOn(vm, 'selectFilter');
+ vm.handleLocationHash();
+
+ vm.$nextTick(() => {
+ expect(vm.selectFilter).toHaveBeenCalled();
+ done();
+ });
+ });
+
+ it('does not fetch discussions when there is no hash', done => {
+ window.location.hash = '';
+ spyOn(vm, 'selectFilter');
+ vm.handleLocationHash();
+
+ vm.$nextTick(() => {
+ expect(vm.selectFilter).not.toHaveBeenCalled();
+ done();
+ });
+ });
});
});
diff --git a/spec/javascripts/notes/stores/mutation_spec.js b/spec/javascripts/notes/stores/mutation_spec.js
index 4a640d589fb..ade4725dd68 100644
--- a/spec/javascripts/notes/stores/mutation_spec.js
+++ b/spec/javascripts/notes/stores/mutation_spec.js
@@ -48,9 +48,22 @@ describe('Notes Store mutations', () => {
});
describe('ADD_NEW_REPLY_TO_DISCUSSION', () => {
+ const newReply = Object.assign({}, note, { discussion_id: discussionMock.id });
+
+ let state;
+
+ beforeEach(() => {
+ state = { discussions: [{ ...discussionMock }] };
+ });
+
it('should add a reply to a specific discussion', () => {
- const state = { discussions: [discussionMock] };
- const newReply = Object.assign({}, note, { discussion_id: discussionMock.id });
+ mutations.ADD_NEW_REPLY_TO_DISCUSSION(state, newReply);
+
+ expect(state.discussions[0].notes.length).toEqual(4);
+ });
+
+ it('should not add the note if it already exists in the discussion', () => {
+ mutations.ADD_NEW_REPLY_TO_DISCUSSION(state, newReply);
mutations.ADD_NEW_REPLY_TO_DISCUSSION(state, newReply);
expect(state.discussions[0].notes.length).toEqual(4);
diff --git a/spec/javascripts/pager_spec.js b/spec/javascripts/pager_spec.js
index 93efc139254..c95a8400c6c 100644
--- a/spec/javascripts/pager_spec.js
+++ b/spec/javascripts/pager_spec.js
@@ -63,9 +63,9 @@ describe('pager', () => {
describe('getOld', () => {
const urlRegex = /(.*)some_list(.*)$/;
- function mockSuccess() {
+ function mockSuccess(count = 0) {
axiosMock.onGet(urlRegex).reply(200, {
- count: 0,
+ count,
html: '',
});
}
@@ -142,5 +142,21 @@ describe('pager', () => {
done();
});
});
+
+ it('disables if return count is less than limit', done => {
+ Pager.offset = 0;
+ Pager.limit = 20;
+
+ mockSuccess(1);
+ spyOn(Pager.loading, 'hide');
+ Pager.getOld();
+
+ setTimeout(() => {
+ expect(Pager.loading.hide).toHaveBeenCalled();
+ expect(Pager.disable).toBe(true);
+
+ done();
+ });
+ });
});
});
diff --git a/spec/javascripts/performance_bar/components/detailed_metric_spec.js b/spec/javascripts/performance_bar/components/detailed_metric_spec.js
deleted file mode 100644
index 0486b5fa3db..00000000000
--- a/spec/javascripts/performance_bar/components/detailed_metric_spec.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import Vue from 'vue';
-import detailedMetric from '~/performance_bar/components/detailed_metric.vue';
-import mountComponent from 'spec/helpers/vue_mount_component_helper';
-
-describe('detailedMetric', () => {
- let vm;
-
- afterEach(() => {
- vm.$destroy();
- });
-
- describe('when the current request has no details', () => {
- beforeEach(() => {
- vm = mountComponent(Vue.extend(detailedMetric), {
- currentRequest: {},
- metric: 'gitaly',
- header: 'Gitaly calls',
- details: 'details',
- keys: ['feature', 'request'],
- });
- });
-
- it('does not render the element', () => {
- expect(vm.$el.innerHTML).toEqual(undefined);
- });
- });
-
- describe('when the current request has details', () => {
- const requestDetails = [
- { duration: '100', feature: 'find_commit', request: 'abcdef', backtrace: ['hello', 'world'] },
- { duration: '23', feature: 'rebase_in_progress', request: '', backtrace: ['world', 'hello'] },
- ];
-
- beforeEach(() => {
- vm = mountComponent(Vue.extend(detailedMetric), {
- currentRequest: {
- details: {
- gitaly: {
- duration: '123ms',
- calls: '456',
- details: requestDetails,
- },
- },
- },
- metric: 'gitaly',
- header: 'Gitaly calls',
- keys: ['feature', 'request'],
- });
- });
-
- it('diplays details', () => {
- expect(vm.$el.innerText.replace(/\s+/g, ' ')).toContain('123ms / 456');
- });
-
- it('adds a modal with a table of the details', () => {
- vm.$el
- .querySelectorAll('.performance-bar-modal td:nth-child(1)')
- .forEach((duration, index) => {
- expect(duration.innerText).toContain(requestDetails[index].duration);
- });
-
- vm.$el
- .querySelectorAll('.performance-bar-modal td:nth-child(2)')
- .forEach((feature, index) => {
- expect(feature.innerText).toContain(requestDetails[index].feature);
- });
-
- vm.$el
- .querySelectorAll('.performance-bar-modal td:nth-child(2)')
- .forEach((request, index) => {
- expect(request.innerText).toContain(requestDetails[index].request);
- });
-
- expect(vm.$el.querySelector('.text-expander.js-toggle-button')).not.toBeNull();
-
- vm.$el.querySelectorAll('.performance-bar-modal td:nth-child(2)').forEach(request => {
- expect(request.innerText).toContain('world');
- });
- });
-
- it('displays the metric title', () => {
- expect(vm.$el.innerText).toContain('gitaly');
- });
-
- describe('when using a custom metric title', () => {
- beforeEach(() => {
- vm = mountComponent(Vue.extend(detailedMetric), {
- currentRequest: {
- details: {
- gitaly: {
- duration: '123ms',
- calls: '456',
- details: requestDetails,
- },
- },
- },
- metric: 'gitaly',
- title: 'custom',
- header: 'Gitaly calls',
- keys: ['feature', 'request'],
- });
- });
-
- it('displays the custom title', () => {
- expect(vm.$el.innerText).toContain('custom');
- });
- });
- });
-});
diff --git a/spec/javascripts/performance_bar/components/performance_bar_app_spec.js b/spec/javascripts/performance_bar/components/performance_bar_app_spec.js
deleted file mode 100644
index 7926db44429..00000000000
--- a/spec/javascripts/performance_bar/components/performance_bar_app_spec.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import Vue from 'vue';
-import performanceBarApp from '~/performance_bar/components/performance_bar_app.vue';
-import PerformanceBarStore from '~/performance_bar/stores/performance_bar_store';
-
-import mountComponent from 'spec/helpers/vue_mount_component_helper';
-
-describe('performance bar app', () => {
- let vm;
-
- beforeEach(() => {
- const store = new PerformanceBarStore();
-
- vm = mountComponent(Vue.extend(performanceBarApp), {
- store,
- env: 'development',
- requestId: '123',
- peekUrl: '/-/peek/results',
- profileUrl: '?lineprofiler=true',
- });
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- it('sets the class to match the environment', () => {
- expect(vm.$el.getAttribute('class')).toContain('development');
- });
-});
diff --git a/spec/javascripts/performance_bar/components/request_selector_spec.js b/spec/javascripts/performance_bar/components/request_selector_spec.js
deleted file mode 100644
index 3c2169de877..00000000000
--- a/spec/javascripts/performance_bar/components/request_selector_spec.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import Vue from 'vue';
-import requestSelector from '~/performance_bar/components/request_selector.vue';
-import mountComponent from 'spec/helpers/vue_mount_component_helper';
-
-describe('request selector', () => {
- const requests = [
- { id: '123', url: 'https://gitlab.com/' },
- {
- id: '456',
- url: 'https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/1',
- },
- {
- id: '789',
- url: 'https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/1.json?serializer=widget',
- },
- ];
-
- let vm;
-
- beforeEach(() => {
- vm = mountComponent(Vue.extend(requestSelector), {
- requests,
- currentRequest: requests[1],
- });
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- function optionText(requestId) {
- return vm.$el.querySelector(`[value='${requestId}']`).innerText.trim();
- }
-
- it('displays the last component of the path', () => {
- expect(optionText(requests[2].id)).toEqual('1.json?serializer=widget');
- });
-
- it('keeps the last two components of the path when the last component is numeric', () => {
- expect(optionText(requests[1].id)).toEqual('merge_requests/1');
- });
-
- it('ignores trailing slashes', () => {
- expect(optionText(requests[0].id)).toEqual('gitlab.com');
- });
-});
diff --git a/spec/javascripts/pipelines/graph/graph_component_spec.js b/spec/javascripts/pipelines/graph/graph_component_spec.js
index 98e92aff25f..5effbaabcd1 100644
--- a/spec/javascripts/pipelines/graph/graph_component_spec.js
+++ b/spec/javascripts/pipelines/graph/graph_component_spec.js
@@ -1,10 +1,17 @@
import Vue from 'vue';
import mountComponent from 'spec/helpers/vue_mount_component_helper';
+import PipelineStore from '~/pipelines/stores/pipeline_store';
import graphComponent from '~/pipelines/components/graph/graph_component.vue';
import graphJSON from './mock_data';
+import linkedPipelineJSON from '../linked_pipelines_mock.json';
+import PipelinesMediator from '~/pipelines/pipeline_details_mediator';
describe('graph component', () => {
const GraphComponent = Vue.extend(graphComponent);
+ const store = new PipelineStore();
+ store.storePipeline(linkedPipelineJSON);
+ const mediator = new PipelinesMediator({ endpoint: '' });
+
let component;
beforeEach(() => {
@@ -22,6 +29,7 @@ describe('graph component', () => {
component = mountComponent(GraphComponent, {
isLoading: true,
pipeline: {},
+ mediator,
});
expect(component.$el.querySelector('.loading-icon')).toBeDefined();
@@ -33,6 +41,7 @@ describe('graph component', () => {
component = mountComponent(GraphComponent, {
isLoading: false,
pipeline: graphJSON,
+ mediator,
});
expect(component.$el.classList.contains('js-pipeline-graph')).toEqual(true);
@@ -57,11 +66,205 @@ describe('graph component', () => {
});
});
+ describe('when linked pipelines are present', () => {
+ beforeEach(() => {
+ component = mountComponent(GraphComponent, {
+ isLoading: false,
+ pipeline: store.state.pipeline,
+ mediator,
+ });
+ });
+
+ describe('rendered output', () => {
+ it('should include the pipelines graph', () => {
+ expect(component.$el.classList.contains('js-pipeline-graph')).toEqual(true);
+ });
+
+ it('should not include the loading icon', () => {
+ expect(component.$el.querySelector('.fa-spinner')).toBeNull();
+ });
+
+ it('should include the stage column list', () => {
+ expect(component.$el.querySelector('.stage-column-list')).not.toBeNull();
+ });
+
+ it('should include the no-margin class on the first child', () => {
+ const firstStageColumnElement = component.$el.querySelector(
+ '.stage-column-list .stage-column',
+ );
+
+ expect(firstStageColumnElement.classList.contains('no-margin')).toEqual(true);
+ });
+
+ it('should include the has-only-one-job class on the first child', () => {
+ const firstStageColumnElement = component.$el.querySelector(
+ '.stage-column-list .stage-column',
+ );
+
+ expect(firstStageColumnElement.classList.contains('has-only-one-job')).toEqual(true);
+ });
+
+ it('should include the left-margin class on the second child', () => {
+ const firstStageColumnElement = component.$el.querySelector(
+ '.stage-column-list .stage-column:last-child',
+ );
+
+ expect(firstStageColumnElement.classList.contains('left-margin')).toEqual(true);
+ });
+
+ it('should include the js-has-linked-pipelines flag', () => {
+ expect(component.$el.querySelector('.js-has-linked-pipelines')).not.toBeNull();
+ });
+ });
+
+ describe('computeds and methods', () => {
+ describe('capitalizeStageName', () => {
+ it('it capitalizes the stage name', () => {
+ expect(component.capitalizeStageName('mystage')).toBe('Mystage');
+ });
+ });
+
+ describe('stageConnectorClass', () => {
+ it('it returns left-margin when there is a triggerer', () => {
+ expect(component.stageConnectorClass(0, { groups: ['job'] })).toBe('no-margin');
+ });
+ });
+ });
+
+ describe('linked pipelines components', () => {
+ beforeEach(() => {
+ component = mountComponent(GraphComponent, {
+ isLoading: false,
+ pipeline: store.state.pipeline,
+ mediator,
+ });
+ });
+
+ it('should render an upstream pipelines column', () => {
+ expect(component.$el.querySelector('.linked-pipelines-column')).not.toBeNull();
+ expect(component.$el.innerHTML).toContain('Upstream');
+ });
+
+ it('should render a downstream pipelines column', () => {
+ expect(component.$el.querySelector('.linked-pipelines-column')).not.toBeNull();
+ expect(component.$el.innerHTML).toContain('Downstream');
+ });
+
+ describe('triggered by', () => {
+ describe('on click', () => {
+ it('should emit `onClickTriggeredBy` when triggered by linked pipeline is clicked', () => {
+ spyOn(component, '$emit');
+
+ component.$el.querySelector('#js-linked-pipeline-12').click();
+
+ expect(component.$emit).toHaveBeenCalledWith(
+ 'onClickTriggeredBy',
+ component.pipeline,
+ component.pipeline.triggered_by[0],
+ );
+ });
+ });
+
+ describe('with expanded pipeline', () => {
+ it('should render expanded pipeline', done => {
+ // expand the pipeline
+ store.state.pipeline.triggered_by[0].isExpanded = true;
+
+ component = mountComponent(GraphComponent, {
+ isLoading: false,
+ pipeline: store.state.pipeline,
+ mediator,
+ });
+
+ Vue.nextTick()
+ .then(() => {
+ expect(component.$el.querySelector('.js-upstream-pipeline-12')).not.toBeNull();
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+ });
+ });
+
+ describe('triggered', () => {
+ describe('on click', () => {
+ it('should emit `onClickTriggered`', () => {
+ spyOn(component, '$emit');
+
+ component.$el.querySelector('#js-linked-pipeline-34993051').click();
+
+ expect(component.$emit).toHaveBeenCalledWith(
+ 'onClickTriggered',
+ component.pipeline,
+ component.pipeline.triggered[0],
+ );
+ });
+ });
+
+ describe('with expanded pipeline', () => {
+ it('should render expanded pipeline', done => {
+ // expand the pipeline
+ store.state.pipeline.triggered[0].isExpanded = true;
+
+ component = mountComponent(GraphComponent, {
+ isLoading: false,
+ pipeline: store.state.pipeline,
+ mediator,
+ });
+
+ Vue.nextTick()
+ .then(() => {
+ expect(
+ component.$el.querySelector('.js-downstream-pipeline-34993051'),
+ ).not.toBeNull();
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+ });
+ });
+ });
+ });
+
+ describe('when linked pipelines are not present', () => {
+ beforeEach(() => {
+ const pipeline = Object.assign(linkedPipelineJSON, { triggered: null, triggered_by: null });
+ component = mountComponent(GraphComponent, {
+ isLoading: false,
+ pipeline,
+ mediator,
+ });
+ });
+
+ describe('rendered output', () => {
+ it('should include the first column with a no margin', () => {
+ const firstColumn = component.$el.querySelector('.stage-column:first-child');
+
+ expect(firstColumn.classList.contains('no-margin')).toEqual(true);
+ });
+
+ it('should not render a linked pipelines column', () => {
+ expect(component.$el.querySelector('.linked-pipelines-column')).toBeNull();
+ });
+ });
+
+ describe('stageConnectorClass', () => {
+ it('it returns left-margin when no triggerer and there is one job', () => {
+ expect(component.stageConnectorClass(0, { groups: ['job'] })).toBe('no-margin');
+ });
+
+ it('it returns left-margin when no triggerer and not the first stage', () => {
+ expect(component.stageConnectorClass(99, { groups: ['job'] })).toBe('left-margin');
+ });
+ });
+ });
+
describe('capitalizeStageName', () => {
it('capitalizes and escapes stage name', () => {
component = mountComponent(GraphComponent, {
isLoading: false,
pipeline: graphJSON,
+ mediator,
});
expect(
diff --git a/spec/javascripts/pipelines/graph/linked_pipeline_spec.js b/spec/javascripts/pipelines/graph/linked_pipeline_spec.js
new file mode 100644
index 00000000000..8d3abf094b6
--- /dev/null
+++ b/spec/javascripts/pipelines/graph/linked_pipeline_spec.js
@@ -0,0 +1,116 @@
+import Vue from 'vue';
+import LinkedPipelineComponent from '~/pipelines/components/graph/linked_pipeline.vue';
+import mountComponent from 'spec/helpers/vue_mount_component_helper';
+import mockData from './linked_pipelines_mock_data';
+
+const mockPipeline = mockData.triggered[0];
+
+describe('Linked pipeline', () => {
+ const Component = Vue.extend(LinkedPipelineComponent);
+ let vm;
+
+ afterEach(() => {
+ vm.$destroy();
+ });
+
+ describe('rendered output', () => {
+ const props = {
+ pipeline: mockPipeline,
+ };
+
+ beforeEach(() => {
+ vm = mountComponent(Component, props);
+ });
+
+ it('should render a list item as the containing element', () => {
+ expect(vm.$el.tagName).toBe('LI');
+ });
+
+ it('should render a button', () => {
+ const linkElement = vm.$el.querySelector('.js-linked-pipeline-content');
+
+ expect(linkElement).not.toBeNull();
+ });
+
+ it('should render the project name', () => {
+ expect(vm.$el.innerText).toContain(props.pipeline.project.name);
+ });
+
+ it('should render an svg within the status container', () => {
+ const pipelineStatusElement = vm.$el.querySelector('.js-linked-pipeline-status');
+
+ expect(pipelineStatusElement.querySelector('svg')).not.toBeNull();
+ });
+
+ it('should render the pipeline status icon svg', () => {
+ expect(vm.$el.querySelector('.js-ci-status-icon-running')).not.toBeNull();
+ expect(vm.$el.querySelector('.js-ci-status-icon-running').innerHTML).toContain('<svg');
+ });
+
+ it('should have a ci-status child component', () => {
+ expect(vm.$el.querySelector('.js-linked-pipeline-status')).not.toBeNull();
+ });
+
+ it('should render the pipeline id', () => {
+ expect(vm.$el.innerText).toContain(`#${props.pipeline.id}`);
+ });
+
+ it('should correctly compute the tooltip text', () => {
+ expect(vm.tooltipText).toContain(mockPipeline.project.name);
+ expect(vm.tooltipText).toContain(mockPipeline.details.status.label);
+ });
+
+ it('should render the tooltip text as the title attribute', () => {
+ const tooltipRef = vm.$el.querySelector('.js-linked-pipeline-content');
+ const titleAttr = tooltipRef.getAttribute('data-original-title');
+
+ expect(titleAttr).toContain(mockPipeline.project.name);
+ expect(titleAttr).toContain(mockPipeline.details.status.label);
+ });
+
+ it('does not render the loading icon when isLoading is false', () => {
+ expect(vm.$el.querySelector('.js-linked-pipeline-loading')).toBeNull();
+ });
+ });
+
+ describe('when isLoading is true', () => {
+ const props = {
+ pipeline: { ...mockPipeline, isLoading: true },
+ };
+
+ beforeEach(() => {
+ vm = mountComponent(Component, props);
+ });
+
+ it('renders a loading icon', () => {
+ expect(vm.$el.querySelector('.js-linked-pipeline-loading')).not.toBeNull();
+ });
+ });
+
+ describe('on click', () => {
+ const props = {
+ pipeline: mockPipeline,
+ };
+
+ beforeEach(() => {
+ vm = mountComponent(Component, props);
+ });
+
+ it('emits `pipelineClicked` event', () => {
+ spyOn(vm, '$emit');
+ vm.$el.querySelector('button').click();
+
+ expect(vm.$emit).toHaveBeenCalledWith('pipelineClicked');
+ });
+
+ it('should emit `bv::hide::tooltip` to close the tooltip', () => {
+ spyOn(vm.$root, '$emit');
+ vm.$el.querySelector('button').click();
+
+ expect(vm.$root.$emit.calls.argsFor(0)).toEqual([
+ 'bv::hide::tooltip',
+ 'js-linked-pipeline-132',
+ ]);
+ });
+ });
+});
diff --git a/spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js b/spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js
new file mode 100644
index 00000000000..1f835dc4dee
--- /dev/null
+++ b/spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js
@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import LinkedPipelinesColumn from '~/pipelines/components/graph/linked_pipelines_column.vue';
+import mountComponent from 'spec/helpers/vue_mount_component_helper';
+import mockData from './linked_pipelines_mock_data';
+
+describe('Linked Pipelines Column', () => {
+ const Component = Vue.extend(LinkedPipelinesColumn);
+ const props = {
+ columnTitle: 'Upstream',
+ linkedPipelines: mockData.triggered,
+ graphPosition: 'right',
+ };
+ let vm;
+
+ beforeEach(() => {
+ vm = mountComponent(Component, props);
+ });
+
+ afterEach(() => {
+ vm.$destroy();
+ });
+
+ it('renders the pipeline orientation', () => {
+ const titleElement = vm.$el.querySelector('.linked-pipelines-column-title');
+
+ expect(titleElement.innerText).toContain(props.columnTitle);
+ });
+
+ it('has the correct number of linked pipeline child components', () => {
+ expect(vm.$children.length).toBe(props.linkedPipelines.length);
+ });
+
+ it('renders the correct number of linked pipelines', () => {
+ const linkedPipelineElements = vm.$el.querySelectorAll('.linked-pipeline');
+
+ expect(linkedPipelineElements.length).toBe(props.linkedPipelines.length);
+ });
+});
diff --git a/spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js b/spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js
new file mode 100644
index 00000000000..f794b8484a7
--- /dev/null
+++ b/spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js
@@ -0,0 +1,407 @@
+export default {
+ triggered_by: {
+ id: 129,
+ active: true,
+ path: '/gitlab-org/gitlab-foss/pipelines/129',
+ project: {
+ name: 'GitLabCE',
+ },
+ details: {
+ status: {
+ icon: 'status_running',
+ text: 'running',
+ label: 'running',
+ group: 'running',
+ has_details: true,
+ details_path: '/gitlab-org/gitlab-foss/pipelines/129',
+ favicon:
+ '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico',
+ },
+ },
+ flags: {
+ latest: false,
+ triggered: false,
+ stuck: false,
+ yaml_errors: false,
+ retryable: true,
+ cancelable: true,
+ },
+ ref: {
+ name: '7-5-stable',
+ path: '/gitlab-org/gitlab-foss/commits/7-5-stable',
+ tag: false,
+ branch: true,
+ },
+ commit: {
+ id: '23433d4d8b20d7e45c103d0b6048faad38a130ab',
+ short_id: '23433d4d',
+ title: 'Version 7.5.0.rc1',
+ created_at: '2014-11-17T15:44:14.000+01:00',
+ parent_ids: ['30ac909f30f58d319b42ed1537664483894b18cd'],
+ message: 'Version 7.5.0.rc1\n',
+ author_name: 'Jacob Vosmaer',
+ author_email: 'contact@jacobvosmaer.nl',
+ authored_date: '2014-11-17T15:44:14.000+01:00',
+ committer_name: 'Jacob Vosmaer',
+ committer_email: 'contact@jacobvosmaer.nl',
+ committed_date: '2014-11-17T15:44:14.000+01:00',
+ author_gravatar_url:
+ 'http://www.gravatar.com/avatar/e66d11c0eedf8c07b3b18fca46599807?s=80&d=identicon',
+ commit_url:
+ 'http://localhost:3000/gitlab-org/gitlab-foss/commit/23433d4d8b20d7e45c103d0b6048faad38a130ab',
+ commit_path: '/gitlab-org/gitlab-foss/commit/23433d4d8b20d7e45c103d0b6048faad38a130ab',
+ },
+ retry_path: '/gitlab-org/gitlab-foss/pipelines/129/retry',
+ cancel_path: '/gitlab-org/gitlab-foss/pipelines/129/cancel',
+ created_at: '2017-05-24T14:46:20.090Z',
+ updated_at: '2017-05-24T14:46:29.906Z',
+ },
+ triggered: [
+ {
+ id: 132,
+ active: true,
+ path: '/gitlab-org/gitlab-foss/pipelines/132',
+ project: {
+ name: 'GitLabCE',
+ },
+ details: {
+ status: {
+ icon: 'status_running',
+ text: 'running',
+ label: 'running',
+ group: 'running',
+ has_details: true,
+ details_path: '/gitlab-org/gitlab-foss/pipelines/132',
+ favicon:
+ '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico',
+ },
+ },
+ flags: {
+ latest: false,
+ triggered: false,
+ stuck: false,
+ yaml_errors: false,
+ retryable: true,
+ cancelable: true,
+ },
+ ref: {
+ name: 'crowd',
+ path: '/gitlab-org/gitlab-foss/commits/crowd',
+ tag: false,
+ branch: true,
+ },
+ commit: {
+ id: 'b9d58c4cecd06be74c3cc32ccfb522b31544ab2e',
+ short_id: 'b9d58c4c',
+ title: 'getting user keys publically through http without any authentication, the github…',
+ created_at: '2013-10-03T12:50:33.000+05:30',
+ parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'],
+ message:
+ 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n\nchangelog updated to include ssh key retrieval feature update\n',
+ author_name: 'devaroop',
+ author_email: 'devaroop123@yahoo.co.in',
+ authored_date: '2013-10-02T20:39:29.000+05:30',
+ committer_name: 'devaroop',
+ committer_email: 'devaroop123@yahoo.co.in',
+ committed_date: '2013-10-03T12:50:33.000+05:30',
+ author_gravatar_url:
+ 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon',
+ commit_url:
+ 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e',
+ commit_path: '/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e',
+ },
+ retry_path: '/gitlab-org/gitlab-foss/pipelines/132/retry',
+ cancel_path: '/gitlab-org/gitlab-foss/pipelines/132/cancel',
+ created_at: '2017-05-24T14:46:24.644Z',
+ updated_at: '2017-05-24T14:48:55.226Z',
+ },
+ {
+ id: 133,
+ active: true,
+ path: '/gitlab-org/gitlab-foss/pipelines/133',
+ project: {
+ name: 'GitLabCE',
+ },
+ details: {
+ status: {
+ icon: 'status_running',
+ text: 'running',
+ label: 'running',
+ group: 'running',
+ has_details: true,
+ details_path: '/gitlab-org/gitlab-foss/pipelines/133',
+ favicon:
+ '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico',
+ },
+ },
+ flags: {
+ latest: false,
+ triggered: false,
+ stuck: false,
+ yaml_errors: false,
+ retryable: true,
+ cancelable: true,
+ },
+ ref: {
+ name: 'crowd',
+ path: '/gitlab-org/gitlab-foss/commits/crowd',
+ tag: false,
+ branch: true,
+ },
+ commit: {
+ id: 'b6bd4856a33df3d144be66c4ed1f1396009bb08b',
+ short_id: 'b6bd4856',
+ title: 'getting user keys publically through http without any authentication, the github…',
+ created_at: '2013-10-02T20:39:29.000+05:30',
+ parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'],
+ message:
+ 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n',
+ author_name: 'devaroop',
+ author_email: 'devaroop123@yahoo.co.in',
+ authored_date: '2013-10-02T20:39:29.000+05:30',
+ committer_name: 'devaroop',
+ committer_email: 'devaroop123@yahoo.co.in',
+ committed_date: '2013-10-02T20:39:29.000+05:30',
+ author_gravatar_url:
+ 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon',
+ commit_url:
+ 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b',
+ commit_path: '/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b',
+ },
+ retry_path: '/gitlab-org/gitlab-foss/pipelines/133/retry',
+ cancel_path: '/gitlab-org/gitlab-foss/pipelines/133/cancel',
+ created_at: '2017-05-24T14:46:24.648Z',
+ updated_at: '2017-05-24T14:48:59.673Z',
+ },
+ {
+ id: 130,
+ active: true,
+ path: '/gitlab-org/gitlab-foss/pipelines/130',
+ project: {
+ name: 'GitLabCE',
+ },
+ details: {
+ status: {
+ icon: 'status_running',
+ text: 'running',
+ label: 'running',
+ group: 'running',
+ has_details: true,
+ details_path: '/gitlab-org/gitlab-foss/pipelines/130',
+ favicon:
+ '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico',
+ },
+ },
+ flags: {
+ latest: false,
+ triggered: false,
+ stuck: false,
+ yaml_errors: false,
+ retryable: true,
+ cancelable: true,
+ },
+ ref: {
+ name: 'crowd',
+ path: '/gitlab-org/gitlab-foss/commits/crowd',
+ tag: false,
+ branch: true,
+ },
+ commit: {
+ id: '6d7ced4a2311eeff037c5575cca1868a6d3f586f',
+ short_id: '6d7ced4a',
+ title: 'Whitespace fixes to patch',
+ created_at: '2013-10-08T13:53:22.000-05:00',
+ parent_ids: ['1875141a963a4238bda29011d8f7105839485253'],
+ message: 'Whitespace fixes to patch\n',
+ author_name: 'Dale Hamel',
+ author_email: 'dale.hamel@srvthe.net',
+ authored_date: '2013-10-08T13:53:22.000-05:00',
+ committer_name: 'Dale Hamel',
+ committer_email: 'dale.hamel@invenia.ca',
+ committed_date: '2013-10-08T13:53:22.000-05:00',
+ author_gravatar_url:
+ 'http://www.gravatar.com/avatar/cd08930e69fa5ad1a669206e7bafe476?s=80&d=identicon',
+ commit_url:
+ 'http://localhost:3000/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f',
+ commit_path: '/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f',
+ },
+ retry_path: '/gitlab-org/gitlab-foss/pipelines/130/retry',
+ cancel_path: '/gitlab-org/gitlab-foss/pipelines/130/cancel',
+ created_at: '2017-05-24T14:46:24.630Z',
+ updated_at: '2017-05-24T14:49:45.091Z',
+ },
+ {
+ id: 131,
+ active: true,
+ path: '/gitlab-org/gitlab-foss/pipelines/132',
+ project: {
+ name: 'GitLabCE',
+ },
+ details: {
+ status: {
+ icon: 'status_running',
+ text: 'running',
+ label: 'running',
+ group: 'running',
+ has_details: true,
+ details_path: '/gitlab-org/gitlab-foss/pipelines/132',
+ favicon:
+ '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico',
+ },
+ },
+ flags: {
+ latest: false,
+ triggered: false,
+ stuck: false,
+ yaml_errors: false,
+ retryable: true,
+ cancelable: true,
+ },
+ ref: {
+ name: 'crowd',
+ path: '/gitlab-org/gitlab-foss/commits/crowd',
+ tag: false,
+ branch: true,
+ },
+ commit: {
+ id: 'b9d58c4cecd06be74c3cc32ccfb522b31544ab2e',
+ short_id: 'b9d58c4c',
+ title: 'getting user keys publically through http without any authentication, the github…',
+ created_at: '2013-10-03T12:50:33.000+05:30',
+ parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'],
+ message:
+ 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n\nchangelog updated to include ssh key retrieval feature update\n',
+ author_name: 'devaroop',
+ author_email: 'devaroop123@yahoo.co.in',
+ authored_date: '2013-10-02T20:39:29.000+05:30',
+ committer_name: 'devaroop',
+ committer_email: 'devaroop123@yahoo.co.in',
+ committed_date: '2013-10-03T12:50:33.000+05:30',
+ author_gravatar_url:
+ 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon',
+ commit_url:
+ 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e',
+ commit_path: '/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e',
+ },
+ retry_path: '/gitlab-org/gitlab-foss/pipelines/132/retry',
+ cancel_path: '/gitlab-org/gitlab-foss/pipelines/132/cancel',
+ created_at: '2017-05-24T14:46:24.644Z',
+ updated_at: '2017-05-24T14:48:55.226Z',
+ },
+ {
+ id: 134,
+ active: true,
+ path: '/gitlab-org/gitlab-foss/pipelines/133',
+ project: {
+ name: 'GitLabCE',
+ },
+ details: {
+ status: {
+ icon: 'status_running',
+ text: 'running',
+ label: 'running',
+ group: 'running',
+ has_details: true,
+ details_path: '/gitlab-org/gitlab-foss/pipelines/133',
+ favicon:
+ '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico',
+ },
+ },
+ flags: {
+ latest: false,
+ triggered: false,
+ stuck: false,
+ yaml_errors: false,
+ retryable: true,
+ cancelable: true,
+ },
+ ref: {
+ name: 'crowd',
+ path: '/gitlab-org/gitlab-foss/commits/crowd',
+ tag: false,
+ branch: true,
+ },
+ commit: {
+ id: 'b6bd4856a33df3d144be66c4ed1f1396009bb08b',
+ short_id: 'b6bd4856',
+ title: 'getting user keys publically through http without any authentication, the github…',
+ created_at: '2013-10-02T20:39:29.000+05:30',
+ parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'],
+ message:
+ 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n',
+ author_name: 'devaroop',
+ author_email: 'devaroop123@yahoo.co.in',
+ authored_date: '2013-10-02T20:39:29.000+05:30',
+ committer_name: 'devaroop',
+ committer_email: 'devaroop123@yahoo.co.in',
+ committed_date: '2013-10-02T20:39:29.000+05:30',
+ author_gravatar_url:
+ 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon',
+ commit_url:
+ 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b',
+ commit_path: '/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b',
+ },
+ retry_path: '/gitlab-org/gitlab-foss/pipelines/133/retry',
+ cancel_path: '/gitlab-org/gitlab-foss/pipelines/133/cancel',
+ created_at: '2017-05-24T14:46:24.648Z',
+ updated_at: '2017-05-24T14:48:59.673Z',
+ },
+ {
+ id: 135,
+ active: true,
+ path: '/gitlab-org/gitlab-foss/pipelines/130',
+ project: {
+ name: 'GitLabCE',
+ },
+ details: {
+ status: {
+ icon: 'status_running',
+ text: 'running',
+ label: 'running',
+ group: 'running',
+ has_details: true,
+ details_path: '/gitlab-org/gitlab-foss/pipelines/130',
+ favicon:
+ '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico',
+ },
+ },
+ flags: {
+ latest: false,
+ triggered: false,
+ stuck: false,
+ yaml_errors: false,
+ retryable: true,
+ cancelable: true,
+ },
+ ref: {
+ name: 'crowd',
+ path: '/gitlab-org/gitlab-foss/commits/crowd',
+ tag: false,
+ branch: true,
+ },
+ commit: {
+ id: '6d7ced4a2311eeff037c5575cca1868a6d3f586f',
+ short_id: '6d7ced4a',
+ title: 'Whitespace fixes to patch',
+ created_at: '2013-10-08T13:53:22.000-05:00',
+ parent_ids: ['1875141a963a4238bda29011d8f7105839485253'],
+ message: 'Whitespace fixes to patch\n',
+ author_name: 'Dale Hamel',
+ author_email: 'dale.hamel@srvthe.net',
+ authored_date: '2013-10-08T13:53:22.000-05:00',
+ committer_name: 'Dale Hamel',
+ committer_email: 'dale.hamel@invenia.ca',
+ committed_date: '2013-10-08T13:53:22.000-05:00',
+ author_gravatar_url:
+ 'http://www.gravatar.com/avatar/cd08930e69fa5ad1a669206e7bafe476?s=80&d=identicon',
+ commit_url:
+ 'http://localhost:3000/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f',
+ commit_path: '/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f',
+ },
+ retry_path: '/gitlab-org/gitlab-foss/pipelines/130/retry',
+ cancel_path: '/gitlab-org/gitlab-foss/pipelines/130/cancel',
+ created_at: '2017-05-24T14:46:24.630Z',
+ updated_at: '2017-05-24T14:49:45.091Z',
+ },
+ ],
+};
diff --git a/spec/javascripts/pipelines/linked_pipelines_mock.json b/spec/javascripts/pipelines/linked_pipelines_mock.json
new file mode 100644
index 00000000000..b498903f804
--- /dev/null
+++ b/spec/javascripts/pipelines/linked_pipelines_mock.json
@@ -0,0 +1,3532 @@
+{
+ "id": 23211253,
+ "user": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": "\u003cspan class=\"user-status-emoji has-tooltip\" title=\"I like pizza\" data-html=\"true\" data-placement=\"top\"\u003e\u003cgl-emoji title=\"slice of pizza\" data-name=\"pizza\" data-unicode-version=\"6.0\"\u003eðŸ•\u003c/gl-emoji\u003e\u003c/span\u003e",
+ "path": "/axil"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "push",
+ "created_at": "2018-06-05T11:31:30.452Z",
+ "updated_at": "2018-10-31T16:35:31.305Z",
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "flags": {
+ "latest": false,
+ "stuck": false,
+ "auto_devops": false,
+ "merge_request": false,
+ "yaml_errors": false,
+ "retryable": false,
+ "cancelable": false,
+ "failure_reason": false
+ },
+ "details": {
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "duration": 53,
+ "finished_at": "2018-10-31T16:35:31.299Z",
+ "stages": [
+ {
+ "name": "prebuild",
+ "title": "prebuild: passed",
+ "groups": [
+ {
+ "name": "review-docs-deploy",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469032,
+ "name": "review-docs-deploy",
+ "started": "2018-10-31T16:34:58.778Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/retry",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.495Z",
+ "updated_at": "2018-10-31T16:35:31.251Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=prebuild"
+ },
+ {
+ "name": "test",
+ "title": "test: passed",
+ "groups": [
+ {
+ "name": "docs check links",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469033,
+ "name": "docs check links",
+ "started": "2018-06-05T11:31:33.240Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.627Z",
+ "updated_at": "2018-06-05T11:31:54.363Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=test"
+ },
+ {
+ "name": "cleanup",
+ "title": "cleanup: skipped",
+ "groups": [
+ {
+ "name": "review-docs-cleanup",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469034,
+ "name": "review-docs-cleanup",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.760Z",
+ "updated_at": "2018-06-05T11:31:56.037Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=cleanup"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "review-docs-cleanup",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review-docs-deploy",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "ref": {
+ "name": "docs/add-development-guide-to-readme",
+ "path": "/gitlab-org/gitlab-runner/commits/docs/add-development-guide-to-readme",
+ "tag": false,
+ "branch": true,
+ "merge_request": false
+ },
+ "commit": {
+ "id": "8083eb0a920572214d0dccedd7981f05d535ad46",
+ "short_id": "8083eb0a",
+ "title": "Add link to development guide in readme",
+ "created_at": "2018-06-05T11:30:48.000Z",
+ "parent_ids": ["1d7cf79b5a1a2121b9474ac20d61c1b8f621289d"],
+ "message": "Add link to development guide in readme\n\nCloses https://gitlab.com/gitlab-org/gitlab-runner/issues/3122\n",
+ "author_name": "Achilleas Pipinellis",
+ "author_email": "axil@gitlab.com",
+ "authored_date": "2018-06-05T11:30:48.000Z",
+ "committer_name": "Achilleas Pipinellis",
+ "committer_email": "axil@gitlab.com",
+ "committed_date": "2018-06-05T11:30:48.000Z",
+ "author": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": null,
+ "path": "/axil"
+ },
+ "author_gravatar_url": "https://secure.gravatar.com/avatar/1d37af00eec153a8333a4ce18e9aea41?s=80\u0026d=identicon",
+ "commit_url": "https://gitlab.com/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46",
+ "commit_path": "/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46"
+ },
+ "triggered_by": {
+ "id": 12,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "duration": 118,
+ "finished_at": "2018-10-31T16:41:40.615Z",
+ "stages": [
+ {
+ "name": "build-images",
+ "title": "build-images: skipped",
+ "groups": [
+ {
+ "name": "image:bootstrap",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 11421321982853,
+ "name": "image:bootstrap",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.704Z",
+ "updated_at": "2018-10-31T16:35:24.118Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:builder-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 1149822131854,
+ "name": "image:builder-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.728Z",
+ "updated_at": "2018-10-31T16:35:24.070Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 11498285523424,
+ "name": "image:nginx-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.753Z",
+ "updated_at": "2018-10-31T16:35:24.033Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build-images"
+ },
+ {
+ "name": "build",
+ "title": "build: failed",
+ "groups": [
+ {
+ "name": "compile_dev",
+ "size": 1,
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 1149846949786,
+ "name": "compile_dev",
+ "started": "2018-10-31T16:39:41.598Z",
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "retry_path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:39:41.138Z",
+ "updated_at": "2018-10-31T16:41:40.072Z",
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "recoverable": false
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build"
+ },
+ {
+ "name": "deploy",
+ "title": "deploy: skipped",
+ "groups": [
+ {
+ "name": "review",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 11498282342357,
+ "name": "review",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.805Z",
+ "updated_at": "2018-10-31T16:41:40.569Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ },
+ {
+ "name": "review_stop",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 114982858,
+ "name": "review_stop",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.840Z",
+ "updated_at": "2018-10-31T16:41:40.480Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=deploy"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "image:bootstrap",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:builder-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review_stop",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982858/play",
+ "playable": false,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "project": {
+ "id": 1794617,
+ "name": "Test",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ },
+ "triggered_by": {
+ "id": 349932310342451,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "duration": 118,
+ "finished_at": "2018-10-31T16:41:40.615Z",
+ "stages": [
+ {
+ "name": "build-images",
+ "title": "build-images: skipped",
+ "groups": [
+ {
+ "name": "image:bootstrap",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 11421321982853,
+ "name": "image:bootstrap",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.704Z",
+ "updated_at": "2018-10-31T16:35:24.118Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:builder-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 1149822131854,
+ "name": "image:builder-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.728Z",
+ "updated_at": "2018-10-31T16:35:24.070Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 11498285523424,
+ "name": "image:nginx-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.753Z",
+ "updated_at": "2018-10-31T16:35:24.033Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build-images"
+ },
+ {
+ "name": "build",
+ "title": "build: failed",
+ "groups": [
+ {
+ "name": "compile_dev",
+ "size": 1,
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 1149846949786,
+ "name": "compile_dev",
+ "started": "2018-10-31T16:39:41.598Z",
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "retry_path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:39:41.138Z",
+ "updated_at": "2018-10-31T16:41:40.072Z",
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "recoverable": false
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build"
+ },
+ {
+ "name": "deploy",
+ "title": "deploy: skipped",
+ "groups": [
+ {
+ "name": "review",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 11498282342357,
+ "name": "review",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.805Z",
+ "updated_at": "2018-10-31T16:41:40.569Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ },
+ {
+ "name": "review_stop",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 114982858,
+ "name": "review_stop",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.840Z",
+ "updated_at": "2018-10-31T16:41:40.480Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=deploy"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "image:bootstrap",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:builder-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review_stop",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982858/play",
+ "playable": false,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ },
+ "triggered": []
+ },
+ "triggered": [
+ {
+ "id": 34993051,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "duration": 118,
+ "finished_at": "2018-10-31T16:41:40.615Z",
+ "stages": [
+ {
+ "name": "build-images",
+ "title": "build-images: skipped",
+ "groups": [
+ {
+ "name": "image:bootstrap",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 114982853,
+ "name": "image:bootstrap",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.704Z",
+ "updated_at": "2018-10-31T16:35:24.118Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:builder-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 114982854,
+ "name": "image:builder-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.728Z",
+ "updated_at": "2018-10-31T16:35:24.070Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 114982855,
+ "name": "image:nginx-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.753Z",
+ "updated_at": "2018-10-31T16:35:24.033Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build-images"
+ },
+ {
+ "name": "build",
+ "title": "build: failed",
+ "groups": [
+ {
+ "name": "compile_dev",
+ "size": 1,
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 114984694,
+ "name": "compile_dev",
+ "started": "2018-10-31T16:39:41.598Z",
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "retry_path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:39:41.138Z",
+ "updated_at": "2018-10-31T16:41:40.072Z",
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "recoverable": false
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build"
+ },
+ {
+ "name": "deploy",
+ "title": "deploy: skipped",
+ "groups": [
+ {
+ "name": "review",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 114982857,
+ "name": "review",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.805Z",
+ "updated_at": "2018-10-31T16:41:40.569Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ },
+ {
+ "name": "review_stop",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 114982858,
+ "name": "review_stop",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.840Z",
+ "updated_at": "2018-10-31T16:41:40.480Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=deploy"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "image:bootstrap",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:builder-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review_stop",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982858/play",
+ "playable": false,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ },
+ {
+ "id": 34993052,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "duration": 118,
+ "finished_at": "2018-10-31T16:41:40.615Z",
+ "stages": [
+ {
+ "name": "build-images",
+ "title": "build-images: skipped",
+ "groups": [
+ {
+ "name": "image:bootstrap",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 114982853,
+ "name": "image:bootstrap",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.704Z",
+ "updated_at": "2018-10-31T16:35:24.118Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:builder-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 114982854,
+ "name": "image:builder-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.728Z",
+ "updated_at": "2018-10-31T16:35:24.070Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 1224982855,
+ "name": "image:nginx-onbuild",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "play_path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.753Z",
+ "updated_at": "2018-10-31T16:35:24.033Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual play action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build-images"
+ },
+ {
+ "name": "build",
+ "title": "build: failed",
+ "groups": [
+ {
+ "name": "compile_dev",
+ "size": 1,
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 1123984694,
+ "name": "compile_dev",
+ "started": "2018-10-31T16:39:41.598Z",
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "retry_path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:39:41.138Z",
+ "updated_at": "2018-10-31T16:41:40.072Z",
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed - (script failure)",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "recoverable": false
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build"
+ },
+ {
+ "name": "deploy",
+ "title": "deploy: skipped",
+ "groups": [
+ {
+ "name": "review",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 1143232982857,
+ "name": "review",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.805Z",
+ "updated_at": "2018-10-31T16:41:40.569Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ },
+ {
+ "name": "review_stop",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 114921313182858,
+ "name": "review_stop",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-10-31T16:35:23.840Z",
+ "updated_at": "2018-10-31T16:41:40.480Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
+ "dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=deploy"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "image:bootstrap",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:builder-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "image:nginx-onbuild",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review_stop",
+ "path": "/gitlab-com/gitlab-docs/-/jobs/114982858/play",
+ "playable": false,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ },
+ "triggered": [
+ {
+ "id": 26,
+ "user": null,
+ "active": false,
+ "coverage": null,
+ "source": "push",
+ "created_at": "2019-01-06T17:48:37.599Z",
+ "updated_at": "2019-01-06T17:48:38.371Z",
+ "path": "/h5bp/html5-boilerplate/pipelines/26",
+ "flags": {
+ "latest": true,
+ "stuck": false,
+ "auto_devops": false,
+ "merge_request": false,
+ "yaml_errors": false,
+ "retryable": true,
+ "cancelable": false,
+ "failure_reason": false
+ },
+ "details": {
+ "status": {
+ "icon": "status_warning",
+ "text": "passed",
+ "label": "passed with warnings",
+ "group": "success-with-warnings",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/pipelines/26",
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "duration": null,
+ "finished_at": "2019-01-06T17:48:38.370Z",
+ "stages": [
+ {
+ "name": "build",
+ "title": "build: passed",
+ "groups": [
+ {
+ "name": "build:linux",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/526",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/526/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 526,
+ "name": "build:linux",
+ "started": "2019-01-06T08:48:20.236Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/526",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/526/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.806Z",
+ "updated_at": "2019-01-06T17:48:37.806Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/526",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/526/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "build:osx",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/527",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/527/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 527,
+ "name": "build:osx",
+ "started": "2019-01-06T07:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/527",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/527/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.846Z",
+ "updated_at": "2019-01-06T17:48:37.846Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/527",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/527/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/pipelines/26#build",
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/h5bp/html5-boilerplate/pipelines/26#build",
+ "dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=build"
+ },
+ {
+ "name": "test",
+ "title": "test: passed with warnings",
+ "groups": [
+ {
+ "name": "jenkins",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": null,
+ "group": "success",
+ "tooltip": null,
+ "has_details": false,
+ "details_path": null,
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "jobs": [
+ {
+ "id": 546,
+ "name": "jenkins",
+ "started": "2019-01-06T11:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/546",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.359Z",
+ "updated_at": "2019-01-06T17:48:38.359Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": null,
+ "group": "success",
+ "tooltip": null,
+ "has_details": false,
+ "details_path": null,
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ }
+ }
+ ]
+ },
+ {
+ "name": "rspec:linux",
+ "size": 3,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": false,
+ "details_path": null,
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "jobs": [
+ {
+ "id": 528,
+ "name": "rspec:linux 0 3",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/528",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.885Z",
+ "updated_at": "2019-01-06T17:48:37.885Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/528",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ },
+ {
+ "id": 529,
+ "name": "rspec:linux 1 3",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/529",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/529/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.907Z",
+ "updated_at": "2019-01-06T17:48:37.907Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/529",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/529/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ },
+ {
+ "id": 530,
+ "name": "rspec:linux 2 3",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/530",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/530/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.927Z",
+ "updated_at": "2019-01-06T17:48:37.927Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/530",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/530/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "rspec:osx",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/535",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/535/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 535,
+ "name": "rspec:osx",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/535",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/535/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.018Z",
+ "updated_at": "2019-01-06T17:48:38.018Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/535",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/535/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "rspec:windows",
+ "size": 3,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": false,
+ "details_path": null,
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "jobs": [
+ {
+ "id": 531,
+ "name": "rspec:windows 0 3",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/531",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/531/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.944Z",
+ "updated_at": "2019-01-06T17:48:37.944Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/531",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/531/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ },
+ {
+ "id": 532,
+ "name": "rspec:windows 1 3",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/532",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/532/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.962Z",
+ "updated_at": "2019-01-06T17:48:37.962Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/532",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/532/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ },
+ {
+ "id": 534,
+ "name": "rspec:windows 2 3",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/534",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/534/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:37.999Z",
+ "updated_at": "2019-01-06T17:48:37.999Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/534",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/534/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "spinach:linux",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/536",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/536/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 536,
+ "name": "spinach:linux",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/536",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/536/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.050Z",
+ "updated_at": "2019-01-06T17:48:38.050Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/536",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/536/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "spinach:osx",
+ "size": 1,
+ "status": {
+ "icon": "status_warning",
+ "text": "failed",
+ "label": "failed (allowed to fail)",
+ "group": "failed-with-warnings",
+ "tooltip": "failed - (unknown failure) (allowed to fail)",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/537",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/537/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 537,
+ "name": "spinach:osx",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/537",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/537/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.069Z",
+ "updated_at": "2019-01-06T17:48:38.069Z",
+ "status": {
+ "icon": "status_warning",
+ "text": "failed",
+ "label": "failed (allowed to fail)",
+ "group": "failed-with-warnings",
+ "tooltip": "failed - (unknown failure) (allowed to fail)",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/537",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/537/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "callout_message": "There is an unknown failure, please try again",
+ "recoverable": true
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_warning",
+ "text": "passed",
+ "label": "passed with warnings",
+ "group": "success-with-warnings",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/pipelines/26#test",
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/h5bp/html5-boilerplate/pipelines/26#test",
+ "dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=test"
+ },
+ {
+ "name": "security",
+ "title": "security: passed",
+ "groups": [
+ {
+ "name": "container_scanning",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/541",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/541/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 541,
+ "name": "container_scanning",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/541",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/541/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.186Z",
+ "updated_at": "2019-01-06T17:48:38.186Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/541",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/541/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "dast",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/538",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/538/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 538,
+ "name": "dast",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/538",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/538/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.087Z",
+ "updated_at": "2019-01-06T17:48:38.087Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/538",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/538/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "dependency_scanning",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/540",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/540/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 540,
+ "name": "dependency_scanning",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/540",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/540/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.153Z",
+ "updated_at": "2019-01-06T17:48:38.153Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/540",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/540/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "sast",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/539",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/539/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 539,
+ "name": "sast",
+ "started": "2019-01-06T09:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/539",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/539/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.121Z",
+ "updated_at": "2019-01-06T17:48:38.121Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/539",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/539/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/pipelines/26#security",
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/h5bp/html5-boilerplate/pipelines/26#security",
+ "dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=security"
+ },
+ {
+ "name": "deploy",
+ "title": "deploy: passed",
+ "groups": [
+ {
+ "name": "production",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/544",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 544,
+ "name": "production",
+ "started": null,
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/544",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.313Z",
+ "updated_at": "2019-01-06T17:48:38.313Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/544",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ },
+ {
+ "name": "staging",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/542",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/542/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 542,
+ "name": "staging",
+ "started": "2019-01-06T11:48:20.237Z",
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/542",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/542/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.219Z",
+ "updated_at": "2019-01-06T17:48:38.219Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/542",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/h5bp/html5-boilerplate/-/jobs/542/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "stop staging",
+ "size": 1,
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/543",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "jobs": [
+ {
+ "id": 543,
+ "name": "stop staging",
+ "started": null,
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/543",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.283Z",
+ "updated_at": "2019-01-06T17:48:38.283Z",
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/543",
+ "illustration": {
+ "image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job has been skipped"
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/pipelines/26#deploy",
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/h5bp/html5-boilerplate/pipelines/26#deploy",
+ "dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=deploy"
+ },
+ {
+ "name": "notify",
+ "title": "notify: passed",
+ "groups": [
+ {
+ "name": "slack",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/545",
+ "illustration": {
+ "image": "/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/h5bp/html5-boilerplate/-/jobs/545/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 545,
+ "name": "slack",
+ "started": null,
+ "archived": false,
+ "build_path": "/h5bp/html5-boilerplate/-/jobs/545",
+ "retry_path": "/h5bp/html5-boilerplate/-/jobs/545/retry",
+ "play_path": "/h5bp/html5-boilerplate/-/jobs/545/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2019-01-06T17:48:38.341Z",
+ "updated_at": "2019-01-06T17:48:38.341Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/-/jobs/545",
+ "illustration": {
+ "image": "/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/h5bp/html5-boilerplate/-/jobs/545/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/h5bp/html5-boilerplate/pipelines/26#notify",
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/h5bp/html5-boilerplate/pipelines/26#notify",
+ "dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=notify"
+ }
+ ],
+ "artifacts": [
+ {
+ "name": "build:linux",
+ "expired": null,
+ "expire_at": null,
+ "path": "/h5bp/html5-boilerplate/-/jobs/526/artifacts/download",
+ "browse_path": "/h5bp/html5-boilerplate/-/jobs/526/artifacts/browse"
+ },
+ {
+ "name": "build:osx",
+ "expired": null,
+ "expire_at": null,
+ "path": "/h5bp/html5-boilerplate/-/jobs/527/artifacts/download",
+ "browse_path": "/h5bp/html5-boilerplate/-/jobs/527/artifacts/browse"
+ }
+ ],
+ "manual_actions": [
+ {
+ "name": "stop staging",
+ "path": "/h5bp/html5-boilerplate/-/jobs/543/play",
+ "playable": false,
+ "scheduled": false
+ },
+ {
+ "name": "production",
+ "path": "/h5bp/html5-boilerplate/-/jobs/544/play",
+ "playable": false,
+ "scheduled": false
+ },
+ {
+ "name": "slack",
+ "path": "/h5bp/html5-boilerplate/-/jobs/545/play",
+ "playable": true,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "ref": {
+ "name": "master",
+ "path": "/h5bp/html5-boilerplate/commits/master",
+ "tag": false,
+ "branch": true,
+ "merge_request": false
+ },
+ "commit": {
+ "id": "bad98c453eab56d20057f3929989251d45cd1a8b",
+ "short_id": "bad98c45",
+ "title": "remove instances of shrink-to-fit=no (#2103)",
+ "created_at": "2018-12-17T20:52:18.000Z",
+ "parent_ids": ["49130f6cfe9ff1f749015d735649a2bc6f66cf3a"],
+ "message": "remove instances of shrink-to-fit=no (#2103)\n\ncloses #2102\r\n\r\nPer my findings, the need for it as a default was rectified with the release of iOS 9.3, where the viewport no longer shrunk to accommodate overflow, as was introduced in iOS 9.",
+ "author_name": "Scott O'Hara",
+ "author_email": "scottaohara@users.noreply.github.com",
+ "authored_date": "2018-12-17T20:52:18.000Z",
+ "committer_name": "Rob Larsen",
+ "committer_email": "rob@drunkenfist.com",
+ "committed_date": "2018-12-17T20:52:18.000Z",
+ "author": null,
+ "author_gravatar_url": "https://www.gravatar.com/avatar/6d597df7cf998d16cbe00ccac063b31e?s=80\u0026d=identicon",
+ "commit_url": "http://localhost:3001/h5bp/html5-boilerplate/commit/bad98c453eab56d20057f3929989251d45cd1a8b",
+ "commit_path": "/h5bp/html5-boilerplate/commit/bad98c453eab56d20057f3929989251d45cd1a8b"
+ },
+ "retry_path": "/h5bp/html5-boilerplate/pipelines/26/retry",
+ "triggered_by": {
+ "id": 4,
+ "user": null,
+ "active": false,
+ "coverage": null,
+ "source": "push",
+ "path": "/gitlab-org/gitlab-test/pipelines/4",
+ "details": {
+ "status": {
+ "icon": "status_warning",
+ "text": "passed",
+ "label": "passed with warnings",
+ "group": "success-with-warnings",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-test/pipelines/4",
+ "illustration": null,
+ "favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ }
+ },
+ "project": {
+ "id": 1,
+ "name": "Gitlab Test",
+ "full_path": "/gitlab-org/gitlab-test",
+ "full_name": "Gitlab Org / Gitlab Test"
+ }
+ },
+ "triggered": [],
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/spec/javascripts/pipelines/stores/pipeline.json b/spec/javascripts/pipelines/stores/pipeline.json
new file mode 100644
index 00000000000..7d5891d3d52
--- /dev/null
+++ b/spec/javascripts/pipelines/stores/pipeline.json
@@ -0,0 +1,167 @@
+{
+ "id": 37232567,
+ "user": {
+ "id": 113870,
+ "name": "Phil Hughes",
+ "username": "iamphill",
+ "state": "active",
+ "avatar_url": "https://secure.gravatar.com/avatar/533a51534470a11062df393543eab649?s=80\u0026d=identicon",
+ "web_url": "https://gitlab.com/iamphill",
+ "status_tooltip_html": null,
+ "path": "/iamphill"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "push",
+ "created_at": "2018-11-20T10:22:52.617Z",
+ "updated_at": "2018-11-20T10:24:09.511Z",
+ "path": "/gitlab-org/gl-vue-cli/pipelines/37232567",
+ "flags": {
+ "latest": true,
+ "stuck": false,
+ "auto_devops": false,
+ "yaml_errors": false,
+ "retryable": false,
+ "cancelable": false,
+ "failure_reason": false
+ },
+ "details": {
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gl-vue-cli/pipelines/37232567",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "duration": 65,
+ "finished_at": "2018-11-20T10:24:09.483Z",
+ "stages": [
+ {
+ "name": "test",
+ "title": "test: passed",
+ "groups": [
+ {
+ "name": "eslint",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gl-vue-cli/-/jobs/122845352",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gl-vue-cli/-/jobs/122845352/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 122845352,
+ "name": "eslint",
+ "started": "2018-11-20T10:22:53.369Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gl-vue-cli/-/jobs/122845352",
+ "retry_path": "/gitlab-org/gl-vue-cli/-/jobs/122845352/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-11-20T10:22:52.630Z",
+ "updated_at": "2018-11-20T10:23:58.948Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gl-vue-cli/-/jobs/122845352",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gl-vue-cli/-/jobs/122845352/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gl-vue-cli/pipelines/37232567#test",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gl-vue-cli/pipelines/37232567#test",
+ "dropdown_path": "/gitlab-org/gl-vue-cli/pipelines/37232567/stage.json?stage=test"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [],
+ "scheduled_actions": []
+ },
+ "ref": {
+ "name": "master",
+ "path": "/gitlab-org/gl-vue-cli/commits/master",
+ "tag": false,
+ "branch": true
+ },
+ "commit": {
+ "id": "8f179601d481950bcb67032caeb33d1c24dde6bd",
+ "short_id": "8f179601",
+ "title": "Merge branch 'gl-cli-startt' into 'master'",
+ "created_at": "2018-11-20T10:22:51.000Z",
+ "parent_ids": [
+ "781d78fcd3d6c17ccf208f0cf0ab47c3e5397118",
+ "d227a0bb858c48eeee7393fcade1a33748f35183"
+ ],
+ "message": "Merge branch 'gl-cli-startt' into 'master'\n\nFirst iteration of the CLI\n\nCloses gitlab-foss#53657\n\nSee merge request gitlab-org/gl-vue-cli!2",
+ "author_name": "Phil Hughes",
+ "author_email": "me@iamphill.com",
+ "authored_date": "2018-11-20T10:22:51.000Z",
+ "committer_name": "Phil Hughes",
+ "committer_email": "me@iamphill.com",
+ "committed_date": "2018-11-20T10:22:51.000Z",
+ "author": {
+ "id": 113870,
+ "name": "Phil Hughes",
+ "username": "iamphill",
+ "state": "active",
+ "avatar_url": "https://secure.gravatar.com/avatar/533a51534470a11062df393543eab649?s=80\u0026d=identicon",
+ "web_url": "https://gitlab.com/iamphill",
+ "status_tooltip_html": null,
+ "path": "/iamphill"
+ },
+ "author_gravatar_url": "https://secure.gravatar.com/avatar/533a51534470a11062df393543eab649?s=80\u0026d=identicon",
+ "commit_url": "https://gitlab.com/gitlab-org/gl-vue-cli/commit/8f179601d481950bcb67032caeb33d1c24dde6bd",
+ "commit_path": "/gitlab-org/gl-vue-cli/commit/8f179601d481950bcb67032caeb33d1c24dde6bd"
+ },
+ "triggered_by": null,
+ "triggered": []
+}
diff --git a/spec/javascripts/pipelines/stores/pipeline_store.js b/spec/javascripts/pipelines/stores/pipeline_store.js
new file mode 100644
index 00000000000..4a0b3bf4c02
--- /dev/null
+++ b/spec/javascripts/pipelines/stores/pipeline_store.js
@@ -0,0 +1,165 @@
+import PipelineStore from '~/pipelines/stores/pipeline_store';
+import LinkedPipelines from '../linked_pipelines_mock.json';
+
+describe('EE Pipeline store', () => {
+ let store;
+ let data;
+
+ beforeEach(() => {
+ store = new PipelineStore();
+ data = Object.assign({}, LinkedPipelines);
+ });
+
+ describe('storePipeline', () => {
+ beforeAll(() => {
+ store.storePipeline(data);
+ });
+
+ describe('triggered_by', () => {
+ it('sets triggered_by as an array', () => {
+ expect(store.state.pipeline.triggered_by.length).toEqual(1);
+ });
+
+ it('adds isExpanding & isLoading keys set to false', () => {
+ expect(store.state.pipeline.triggered_by[0].isExpanded).toEqual(false);
+ expect(store.state.pipeline.triggered_by[0].isLoading).toEqual(false);
+ });
+
+ it('parses nested triggered_by', () => {
+ expect(store.state.pipeline.triggered_by[0].triggered_by.length).toEqual(1);
+ expect(store.state.pipeline.triggered_by[0].triggered_by[0].isExpanded).toEqual(false);
+ expect(store.state.pipeline.triggered_by[0].triggered_by[0].isLoading).toEqual(false);
+ });
+ });
+
+ describe('triggered', () => {
+ it('adds isExpanding & isLoading keys set to false for each triggered pipeline', () => {
+ store.state.pipeline.triggered.forEach(pipeline => {
+ expect(pipeline.isExpanded).toEqual(false);
+ expect(pipeline.isLoading).toEqual(false);
+ });
+ });
+
+ it('parses nested triggered pipelines', () => {
+ store.state.pipeline.triggered[1].triggered.forEach(pipeline => {
+ expect(pipeline.isExpanded).toEqual(false);
+ expect(pipeline.isLoading).toEqual(false);
+ });
+ });
+ });
+ });
+
+ describe('resetTriggeredByPipeline', () => {
+ beforeEach(() => {
+ store.storePipeline(data);
+ });
+
+ it('closes the pipeline & nested ones', () => {
+ store.state.pipeline.triggered_by[0].isExpanded = true;
+ store.state.pipeline.triggered_by[0].triggered_by[0].isExpanded = true;
+
+ store.resetTriggeredByPipeline(store.state.pipeline, store.state.pipeline.triggered_by[0]);
+
+ expect(store.state.pipeline.triggered_by[0].isExpanded).toEqual(false);
+ expect(store.state.pipeline.triggered_by[0].triggered_by[0].isExpanded).toEqual(false);
+ });
+ });
+
+ describe('openTriggeredByPipeline', () => {
+ beforeEach(() => {
+ store.storePipeline(data);
+ });
+
+ it('opens the given pipeline', () => {
+ store.openTriggeredByPipeline(store.state.pipeline, store.state.pipeline.triggered_by[0]);
+
+ expect(store.state.pipeline.triggered_by[0].isExpanded).toEqual(true);
+ });
+ });
+
+ describe('closeTriggeredByPipeline', () => {
+ beforeEach(() => {
+ store.storePipeline(data);
+ });
+
+ it('closes the given pipeline', () => {
+ // open it first
+ store.openTriggeredByPipeline(store.state.pipeline, store.state.pipeline.triggered_by[0]);
+
+ store.closeTriggeredByPipeline(store.state.pipeline, store.state.pipeline.triggered_by[0]);
+
+ expect(store.state.pipeline.triggered_by[0].isExpanded).toEqual(false);
+ });
+ });
+
+ describe('resetTriggeredPipelines', () => {
+ beforeEach(() => {
+ store.storePipeline(data);
+ });
+
+ it('closes the pipeline & nested ones', () => {
+ store.state.pipeline.triggered[0].isExpanded = true;
+ store.state.pipeline.triggered[0].triggered[0].isExpanded = true;
+
+ store.resetTriggeredPipeline(store.state.pipeline, store.state.pipeline.triggered[0]);
+
+ expect(store.state.pipeline.triggered[0].isExpanded).toEqual(false);
+ expect(store.state.pipeline.triggered[0].triggered[0].isExpanded).toEqual(false);
+ });
+ });
+
+ describe('openTriggeredPipeline', () => {
+ beforeEach(() => {
+ store.storePipeline(data);
+ });
+
+ it('opens the given pipeline', () => {
+ store.openTriggeredPipeline(store.state.pipeline, store.state.pipeline.triggered[0]);
+
+ expect(store.state.pipeline.triggered[0].isExpanded).toEqual(true);
+ });
+ });
+
+ describe('closeTriggeredPipeline', () => {
+ beforeEach(() => {
+ store.storePipeline(data);
+ });
+
+ it('closes the given pipeline', () => {
+ // open it first
+ store.openTriggeredPipeline(store.state.pipeline, store.state.pipeline.triggered[0]);
+
+ store.closeTriggeredPipeline(store.state.pipeline, store.state.pipeline.triggered[0]);
+
+ expect(store.state.pipeline.triggered[0].isExpanded).toEqual(false);
+ });
+ });
+
+ describe('toggleLoading', () => {
+ beforeEach(() => {
+ store.storePipeline(data);
+ });
+
+ it('toggles the isLoading property for the given pipeline', () => {
+ store.togglePipeline(store.state.pipeline.triggered[0]);
+
+ expect(store.state.pipeline.triggered[0].isLoading).toEqual(true);
+ });
+ });
+
+ describe('addExpandedPipelineToRequestData', () => {
+ it('pushes the given id to expandedPipelines array', () => {
+ store.addExpandedPipelineToRequestData('213231');
+
+ expect(store.state.expandedPipelines).toEqual(['213231']);
+ });
+ });
+
+ describe('removeExpandedPipelineToRequestData', () => {
+ it('pushes the given id to expandedPipelines array', () => {
+ store.removeExpandedPipelineToRequestData('213231');
+
+ expect(store.state.expandedPipelines).toEqual([]);
+ });
+ });
+});
diff --git a/spec/javascripts/pipelines/stores/pipeline_with_triggered.json b/spec/javascripts/pipelines/stores/pipeline_with_triggered.json
new file mode 100644
index 00000000000..1fa15e45792
--- /dev/null
+++ b/spec/javascripts/pipelines/stores/pipeline_with_triggered.json
@@ -0,0 +1,381 @@
+{
+ "id": 23211253,
+ "user": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": "\u003cspan class=\"user-status-emoji has-tooltip\" title=\"\" data-html=\"true\" data-placement=\"top\"\u003e\u003cgl-emoji title=\"trumpet\" data-name=\"trumpet\" data-unicode-version=\"6.0\"\u003e🎺\u003c/gl-emoji\u003e\u003c/span\u003e",
+ "path": "/axil"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "push",
+ "created_at": "2018-06-05T11:31:30.452Z",
+ "updated_at": "2018-10-31T16:35:31.305Z",
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "flags": {
+ "latest": false,
+ "stuck": false,
+ "auto_devops": false,
+ "yaml_errors": false,
+ "retryable": false,
+ "cancelable": false,
+ "failure_reason": false
+ },
+ "details": {
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "duration": 53,
+ "finished_at": "2018-10-31T16:35:31.299Z",
+ "stages": [
+ {
+ "name": "prebuild",
+ "title": "prebuild: passed",
+ "groups": [
+ {
+ "name": "review-docs-deploy",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469032,
+ "name": "review-docs-deploy",
+ "started": "2018-10-31T16:34:58.778Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/retry",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.495Z",
+ "updated_at": "2018-10-31T16:35:31.251Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=prebuild"
+ },
+ {
+ "name": "test",
+ "title": "test: passed",
+ "groups": [
+ {
+ "name": "docs check links",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469033,
+ "name": "docs check links",
+ "started": "2018-06-05T11:31:33.240Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.627Z",
+ "updated_at": "2018-06-05T11:31:54.363Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=test"
+ },
+ {
+ "name": "cleanup",
+ "title": "cleanup: skipped",
+ "groups": [
+ {
+ "name": "review-docs-cleanup",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469034,
+ "name": "review-docs-cleanup",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.760Z",
+ "updated_at": "2018-06-05T11:31:56.037Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=cleanup"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "review-docs-cleanup",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review-docs-deploy",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "ref": {
+ "name": "docs/add-development-guide-to-readme",
+ "path": "/gitlab-org/gitlab-runner/commits/docs/add-development-guide-to-readme",
+ "tag": false,
+ "branch": true
+ },
+ "commit": {
+ "id": "8083eb0a920572214d0dccedd7981f05d535ad46",
+ "short_id": "8083eb0a",
+ "title": "Add link to development guide in readme",
+ "created_at": "2018-06-05T11:30:48.000Z",
+ "parent_ids": ["1d7cf79b5a1a2121b9474ac20d61c1b8f621289d"],
+ "message": "Add link to development guide in readme\n\nCloses https://gitlab.com/gitlab-org/gitlab-runner/issues/3122\n",
+ "author_name": "Achilleas Pipinellis",
+ "author_email": "axil@gitlab.com",
+ "authored_date": "2018-06-05T11:30:48.000Z",
+ "committer_name": "Achilleas Pipinellis",
+ "committer_email": "axil@gitlab.com",
+ "committed_date": "2018-06-05T11:30:48.000Z",
+ "author": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": null,
+ "path": "/axil"
+ },
+ "author_gravatar_url": "https://secure.gravatar.com/avatar/1d37af00eec153a8333a4ce18e9aea41?s=80\u0026d=identicon",
+ "commit_url": "https://gitlab.com/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46",
+ "commit_path": "/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46"
+ },
+ "triggered_by": null,
+ "triggered": [
+ {
+ "id": 34993051,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ }
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ }
+ ]
+}
diff --git a/spec/javascripts/pipelines/stores/pipeline_with_triggered_by.json b/spec/javascripts/pipelines/stores/pipeline_with_triggered_by.json
new file mode 100644
index 00000000000..7aeea6f3ebb
--- /dev/null
+++ b/spec/javascripts/pipelines/stores/pipeline_with_triggered_by.json
@@ -0,0 +1,379 @@
+{
+ "id": 23211253,
+ "user": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": "\u003cspan class=\"user-status-emoji has-tooltip\" title=\"\" data-html=\"true\" data-placement=\"top\"\u003e\u003cgl-emoji title=\"trumpet\" data-name=\"trumpet\" data-unicode-version=\"6.0\"\u003e🎺\u003c/gl-emoji\u003e\u003c/span\u003e",
+ "path": "/axil"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "push",
+ "created_at": "2018-06-05T11:31:30.452Z",
+ "updated_at": "2018-10-31T16:35:31.305Z",
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "flags": {
+ "latest": false,
+ "stuck": false,
+ "auto_devops": false,
+ "yaml_errors": false,
+ "retryable": false,
+ "cancelable": false,
+ "failure_reason": false
+ },
+ "details": {
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "duration": 53,
+ "finished_at": "2018-10-31T16:35:31.299Z",
+ "stages": [
+ {
+ "name": "prebuild",
+ "title": "prebuild: passed",
+ "groups": [
+ {
+ "name": "review-docs-deploy",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469032,
+ "name": "review-docs-deploy",
+ "started": "2018-10-31T16:34:58.778Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/retry",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.495Z",
+ "updated_at": "2018-10-31T16:35:31.251Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=prebuild"
+ },
+ {
+ "name": "test",
+ "title": "test: passed",
+ "groups": [
+ {
+ "name": "docs check links",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469033,
+ "name": "docs check links",
+ "started": "2018-06-05T11:31:33.240Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.627Z",
+ "updated_at": "2018-06-05T11:31:54.363Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=test"
+ },
+ {
+ "name": "cleanup",
+ "title": "cleanup: skipped",
+ "groups": [
+ {
+ "name": "review-docs-cleanup",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469034,
+ "name": "review-docs-cleanup",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.760Z",
+ "updated_at": "2018-06-05T11:31:56.037Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=cleanup"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "review-docs-cleanup",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review-docs-deploy",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "ref": {
+ "name": "docs/add-development-guide-to-readme",
+ "path": "/gitlab-org/gitlab-runner/commits/docs/add-development-guide-to-readme",
+ "tag": false,
+ "branch": true
+ },
+ "commit": {
+ "id": "8083eb0a920572214d0dccedd7981f05d535ad46",
+ "short_id": "8083eb0a",
+ "title": "Add link to development guide in readme",
+ "created_at": "2018-06-05T11:30:48.000Z",
+ "parent_ids": ["1d7cf79b5a1a2121b9474ac20d61c1b8f621289d"],
+ "message": "Add link to development guide in readme\n\nCloses https://gitlab.com/gitlab-org/gitlab-runner/issues/3122\n",
+ "author_name": "Achilleas Pipinellis",
+ "author_email": "axil@gitlab.com",
+ "authored_date": "2018-06-05T11:30:48.000Z",
+ "committer_name": "Achilleas Pipinellis",
+ "committer_email": "axil@gitlab.com",
+ "committed_date": "2018-06-05T11:30:48.000Z",
+ "author": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": null,
+ "path": "/axil"
+ },
+ "author_gravatar_url": "https://secure.gravatar.com/avatar/1d37af00eec153a8333a4ce18e9aea41?s=80\u0026d=identicon",
+ "commit_url": "https://gitlab.com/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46",
+ "commit_path": "/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46"
+ },
+ "triggered_by": {
+ "id": 34993051,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ }
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ },
+ "triggered": []
+}
diff --git a/spec/javascripts/pipelines/stores/pipeline_with_triggered_triggered_by.json b/spec/javascripts/pipelines/stores/pipeline_with_triggered_triggered_by.json
new file mode 100644
index 00000000000..2402cbae6c8
--- /dev/null
+++ b/spec/javascripts/pipelines/stores/pipeline_with_triggered_triggered_by.json
@@ -0,0 +1,452 @@
+{
+ "id": 23211253,
+ "user": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": "\u003cspan class=\"user-status-emoji has-tooltip\" title=\"\" data-html=\"true\" data-placement=\"top\"\u003e\u003cgl-emoji title=\"trumpet\" data-name=\"trumpet\" data-unicode-version=\"6.0\"\u003e🎺\u003c/gl-emoji\u003e\u003c/span\u003e",
+ "path": "/axil"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "push",
+ "created_at": "2018-06-05T11:31:30.452Z",
+ "updated_at": "2018-10-31T16:35:31.305Z",
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "flags": {
+ "latest": false,
+ "stuck": false,
+ "auto_devops": false,
+ "yaml_errors": false,
+ "retryable": false,
+ "cancelable": false,
+ "failure_reason": false
+ },
+ "details": {
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "duration": 53,
+ "finished_at": "2018-10-31T16:35:31.299Z",
+ "stages": [
+ {
+ "name": "prebuild",
+ "title": "prebuild: passed",
+ "groups": [
+ {
+ "name": "review-docs-deploy",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469032,
+ "name": "review-docs-deploy",
+ "started": "2018-10-31T16:34:58.778Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/retry",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.495Z",
+ "updated_at": "2018-10-31T16:35:31.251Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "manual play action",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "play",
+ "title": "Play",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "method": "post",
+ "button_title": "Trigger this manual action"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=prebuild"
+ },
+ {
+ "name": "test",
+ "title": "test: passed",
+ "groups": [
+ {
+ "name": "docs check links",
+ "size": 1,
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469033,
+ "name": "docs check links",
+ "started": "2018-06-05T11:31:33.240Z",
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "playable": false,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.627Z",
+ "updated_at": "2018-06-05T11:31:54.363Z",
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
+ "size": "svg-430",
+ "title": "This job does not have a trace."
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
+ "action": {
+ "icon": "retry",
+ "title": "Retry",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
+ "method": "post",
+ "button_title": "Retry this job"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_success",
+ "text": "passed",
+ "label": "passed",
+ "group": "success",
+ "tooltip": "passed",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=test"
+ },
+ {
+ "name": "cleanup",
+ "title": "cleanup: skipped",
+ "groups": [
+ {
+ "name": "review-docs-cleanup",
+ "size": 1,
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ },
+ "jobs": [
+ {
+ "id": 72469034,
+ "name": "review-docs-cleanup",
+ "started": null,
+ "archived": false,
+ "build_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "play_path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false,
+ "created_at": "2018-06-05T11:31:30.760Z",
+ "updated_at": "2018-06-05T11:31:56.037Z",
+ "status": {
+ "icon": "status_manual",
+ "text": "manual",
+ "label": "manual stop action",
+ "group": "manual",
+ "tooltip": "manual action",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
+ "illustration": {
+ "image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
+ "size": "svg-394",
+ "title": "This job requires a manual action",
+ "content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
+ },
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
+ "action": {
+ "icon": "stop",
+ "title": "Stop",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "method": "post",
+ "button_title": "Stop this environment"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "status": {
+ "icon": "status_skipped",
+ "text": "skipped",
+ "label": "skipped",
+ "group": "skipped",
+ "tooltip": "skipped",
+ "has_details": true,
+ "details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
+ },
+ "path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
+ "dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=cleanup"
+ }
+ ],
+ "artifacts": [],
+ "manual_actions": [
+ {
+ "name": "review-docs-cleanup",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
+ "playable": true,
+ "scheduled": false
+ },
+ {
+ "name": "review-docs-deploy",
+ "path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
+ "playable": true,
+ "scheduled": false
+ }
+ ],
+ "scheduled_actions": []
+ },
+ "ref": {
+ "name": "docs/add-development-guide-to-readme",
+ "path": "/gitlab-org/gitlab-runner/commits/docs/add-development-guide-to-readme",
+ "tag": false,
+ "branch": true
+ },
+ "commit": {
+ "id": "8083eb0a920572214d0dccedd7981f05d535ad46",
+ "short_id": "8083eb0a",
+ "title": "Add link to development guide in readme",
+ "created_at": "2018-06-05T11:30:48.000Z",
+ "parent_ids": ["1d7cf79b5a1a2121b9474ac20d61c1b8f621289d"],
+ "message": "Add link to development guide in readme\n\nCloses https://gitlab.com/gitlab-org/gitlab-runner/issues/3122\n",
+ "author_name": "Achilleas Pipinellis",
+ "author_email": "axil@gitlab.com",
+ "authored_date": "2018-06-05T11:30:48.000Z",
+ "committer_name": "Achilleas Pipinellis",
+ "committer_email": "axil@gitlab.com",
+ "committed_date": "2018-06-05T11:30:48.000Z",
+ "author": {
+ "id": 3585,
+ "name": "Achilleas Pipinellis",
+ "username": "axil",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
+ "web_url": "https://gitlab.com/axil",
+ "status_tooltip_html": null,
+ "path": "/axil"
+ },
+ "author_gravatar_url": "https://secure.gravatar.com/avatar/1d37af00eec153a8333a4ce18e9aea41?s=80\u0026d=identicon",
+ "commit_url": "https://gitlab.com/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46",
+ "commit_path": "/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46"
+ },
+ "triggered_by": {
+ "id": 34993051,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ }
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ },
+ "triggered": [
+ {
+ "id": 349233051,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/349233051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ }
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ },
+ {
+ "id": 34993023,
+ "user": {
+ "id": 376774,
+ "name": "Alessio Caiazza",
+ "username": "nolith",
+ "state": "active",
+ "avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
+ "web_url": "https://gitlab.com/nolith",
+ "status_tooltip_html": null,
+ "path": "/nolith"
+ },
+ "active": false,
+ "coverage": null,
+ "source": "pipeline",
+ "path": "/gitlab-com/gitlab-docs/pipelines/34993023",
+ "details": {
+ "status": {
+ "icon": "status_failed",
+ "text": "failed",
+ "label": "failed",
+ "group": "failed",
+ "tooltip": "failed",
+ "has_details": true,
+ "details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
+ "illustration": null,
+ "favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
+ }
+ },
+ "project": {
+ "id": 1794617,
+ "name": "GitLab Docs",
+ "full_path": "/gitlab-com/gitlab-docs",
+ "full_name": "GitLab.com / GitLab Docs"
+ }
+ }
+ ]
+}
diff --git a/spec/javascripts/registry/components/app_spec.js b/spec/javascripts/registry/components/app_spec.js
deleted file mode 100644
index 5ea3f85a247..00000000000
--- a/spec/javascripts/registry/components/app_spec.js
+++ /dev/null
@@ -1,129 +0,0 @@
-import MockAdapter from 'axios-mock-adapter';
-import axios from '~/lib/utils/axios_utils';
-import Vue from 'vue';
-import registry from '~/registry/components/app.vue';
-import mountComponent from 'spec/helpers/vue_mount_component_helper';
-import { TEST_HOST } from 'spec/test_constants';
-import { reposServerResponse } from '../mock_data';
-
-describe('Registry List', () => {
- const Component = Vue.extend(registry);
- const props = {
- endpoint: `${TEST_HOST}/foo`,
- helpPagePath: 'foo',
- noContainersImage: 'foo',
- containersErrorImage: 'foo',
- repositoryUrl: 'foo',
- };
- let vm;
- let mock;
-
- beforeEach(() => {
- mock = new MockAdapter(axios);
- });
-
- afterEach(() => {
- mock.restore();
- vm.$destroy();
- });
-
- describe('with data', () => {
- beforeEach(() => {
- mock.onGet(`${TEST_HOST}/foo`).replyOnce(200, reposServerResponse);
-
- vm = mountComponent(Component, { ...props });
- });
-
- it('should render a list of repos', done => {
- setTimeout(() => {
- expect(vm.$store.state.repos.length).toEqual(reposServerResponse.length);
-
- Vue.nextTick(() => {
- expect(vm.$el.querySelectorAll('.container-image').length).toEqual(
- reposServerResponse.length,
- );
- done();
- });
- }, 0);
- });
-
- describe('delete repository', () => {
- it('should be possible to delete a repo', done => {
- setTimeout(() => {
- Vue.nextTick(() => {
- expect(vm.$el.querySelector('.container-image-head .js-remove-repo')).toBeDefined();
- done();
- });
- }, 0);
- });
- });
-
- describe('toggle repository', () => {
- it('should open the container', done => {
- setTimeout(() => {
- Vue.nextTick(() => {
- vm.$el.querySelector('.js-toggle-repo').click();
- Vue.nextTick(() => {
- expect(
- vm.$el.querySelector('.js-toggle-repo use').getAttribute('xlink:href'),
- ).toContain('angle-up');
- done();
- });
- });
- }, 0);
- });
- });
- });
-
- describe('without data', () => {
- beforeEach(() => {
- mock.onGet(`${TEST_HOST}/foo`).replyOnce(200, []);
-
- vm = mountComponent(Component, { ...props });
- });
-
- it('should render empty message', done => {
- setTimeout(() => {
- expect(vm.$el.querySelector('.js-no-container-images-text').textContent).toEqual(
- 'With the Container Registry, every project can have its own space to store its Docker images. More Information',
- );
- done();
- }, 0);
- });
- });
-
- describe('while loading data', () => {
- beforeEach(() => {
- mock.onGet(`${TEST_HOST}/foo`).replyOnce(200, []);
-
- vm = mountComponent(Component, { ...props });
- });
-
- it('should render a loading spinner', done => {
- Vue.nextTick(() => {
- expect(vm.$el.querySelector('.gl-spinner')).not.toBe(null);
- done();
- });
- });
- });
-
- describe('invalid characters in path', () => {
- beforeEach(() => {
- mock.onGet(`${TEST_HOST}/foo`).replyOnce(200, []);
-
- vm = mountComponent(Component, {
- ...props,
- characterError: true,
- });
- });
-
- it('should render invalid characters error message', done => {
- setTimeout(() => {
- expect(vm.$el.querySelector('p')).not.toContain(
- 'We are having trouble connecting to Docker, which could be due to an issue with your project name or path. More information',
- );
- done();
- });
- });
- });
-});
diff --git a/spec/javascripts/registry/components/collapsible_container_spec.js b/spec/javascripts/registry/components/collapsible_container_spec.js
deleted file mode 100644
index 2a5d8dd11da..00000000000
--- a/spec/javascripts/registry/components/collapsible_container_spec.js
+++ /dev/null
@@ -1,87 +0,0 @@
-import MockAdapter from 'axios-mock-adapter';
-import axios from '~/lib/utils/axios_utils';
-import Vue from 'vue';
-import collapsibleComponent from '~/registry/components/collapsible_container.vue';
-import store from '~/registry/stores';
-import * as types from '~/registry/stores/mutation_types';
-
-import { repoPropsData, registryServerResponse, reposServerResponse } from '../mock_data';
-
-describe('collapsible registry container', () => {
- let vm;
- let mock;
- const Component = Vue.extend(collapsibleComponent);
-
- const findDeleteBtn = () => vm.$el.querySelector('.js-remove-repo');
-
- beforeEach(() => {
- mock = new MockAdapter(axios);
-
- mock.onGet(repoPropsData.tagsPath).replyOnce(200, registryServerResponse, {});
-
- store.commit(types.SET_REPOS_LIST, reposServerResponse);
-
- vm = new Component({
- store,
- propsData: {
- repo: repoPropsData,
- },
- }).$mount();
- });
-
- afterEach(() => {
- mock.restore();
- vm.$destroy();
- });
-
- describe('toggle', () => {
- it('should be closed by default', () => {
- expect(vm.$el.querySelector('.container-image-tags')).toBe(null);
- expect(vm.iconName).toEqual('angle-right');
- });
-
- it('should be open when user clicks on closed repo', done => {
- vm.$el.querySelector('.js-toggle-repo').click();
-
- Vue.nextTick(() => {
- expect(vm.$el.querySelector('.container-image-tags')).not.toBeNull();
- expect(vm.iconName).toEqual('angle-up');
-
- done();
- });
- });
-
- it('should be closed when the user clicks on an opened repo', done => {
- vm.$el.querySelector('.js-toggle-repo').click();
-
- Vue.nextTick(() => {
- vm.$el.querySelector('.js-toggle-repo').click();
- setTimeout(() => {
- Vue.nextTick(() => {
- expect(vm.$el.querySelector('.container-image-tags')).toBe(null);
- expect(vm.iconName).toEqual('angle-right');
- done();
- });
- });
- });
- });
- });
-
- describe('delete repo', () => {
- it('should be possible to delete a repo', () => {
- expect(findDeleteBtn()).not.toBeNull();
- });
-
- it('should call deleteItem when confirming deletion', done => {
- findDeleteBtn().click();
- spyOn(vm, 'deleteItem').and.returnValue(Promise.resolve());
-
- Vue.nextTick(() => {
- document.querySelector(`#${vm.modalId} .btn-danger`).click();
-
- expect(vm.deleteItem).toHaveBeenCalledWith(vm.repo);
- done();
- });
- });
- });
-});
diff --git a/spec/javascripts/registry/components/table_registry_spec.js b/spec/javascripts/registry/components/table_registry_spec.js
deleted file mode 100644
index 9c7439206ef..00000000000
--- a/spec/javascripts/registry/components/table_registry_spec.js
+++ /dev/null
@@ -1,189 +0,0 @@
-import Vue from 'vue';
-import tableRegistry from '~/registry/components/table_registry.vue';
-import store from '~/registry/stores';
-import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
-import { repoPropsData } from '../mock_data';
-
-const [firstImage, secondImage] = repoPropsData.list;
-
-describe('table registry', () => {
- let vm;
- const Component = Vue.extend(tableRegistry);
- const bulkDeletePath = 'path';
-
- const findDeleteBtn = () => vm.$el.querySelector('.js-delete-registry');
- const findDeleteBtnRow = () => vm.$el.querySelector('.js-delete-registry-row');
- const findSelectAllCheckbox = () => vm.$el.querySelector('.js-select-all-checkbox > input');
- const findAllRowCheckboxes = () =>
- Array.from(vm.$el.querySelectorAll('.js-select-checkbox input'));
- const confirmationModal = (child = '') => document.querySelector(`#${vm.modalId} ${child}`);
-
- const createComponent = () => {
- vm = mountComponentWithStore(Component, {
- store,
- props: {
- repo: repoPropsData,
- },
- });
- };
-
- const selectAllCheckboxes = () => vm.selectAll();
- const deselectAllCheckboxes = () => vm.deselectAll();
-
- beforeEach(() => {
- createComponent();
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- describe('rendering', () => {
- it('should render a table with the registry list', () => {
- expect(vm.$el.querySelectorAll('table tbody tr').length).toEqual(repoPropsData.list.length);
- });
-
- it('should render registry tag', () => {
- const textRendered = vm.$el
- .querySelector('.table tbody tr')
- .textContent.trim()
- // replace additional whitespace characters (e.g. new lines) with a single empty space
- .replace(/\s\s+/g, ' ');
-
- expect(textRendered).toContain(repoPropsData.list[0].tag);
- expect(textRendered).toContain(repoPropsData.list[0].shortRevision);
- expect(textRendered).toContain(repoPropsData.list[0].layers);
- expect(textRendered).toContain(repoPropsData.list[0].size);
- });
- });
-
- describe('multi select', () => {
- it('should support multiselect and selecting a row should enable delete button', done => {
- findSelectAllCheckbox().click();
- selectAllCheckboxes();
-
- expect(findSelectAllCheckbox().checked).toBe(true);
-
- Vue.nextTick(() => {
- expect(findDeleteBtn().disabled).toBe(false);
- done();
- });
- });
-
- it('selecting all checkbox should select all rows and enable delete button', done => {
- selectAllCheckboxes();
-
- Vue.nextTick(() => {
- const checkedValues = findAllRowCheckboxes().filter(x => x.checked);
-
- expect(checkedValues.length).toBe(repoPropsData.list.length);
- done();
- });
- });
-
- it('deselecting select all checkbox should deselect all rows and disable delete button', done => {
- selectAllCheckboxes();
- deselectAllCheckboxes();
-
- Vue.nextTick(() => {
- const checkedValues = findAllRowCheckboxes().filter(x => x.checked);
-
- expect(checkedValues.length).toBe(0);
- done();
- });
- });
-
- it('should delete multiple items when multiple items are selected', done => {
- selectAllCheckboxes();
-
- Vue.nextTick(() => {
- expect(vm.itemsToBeDeleted).toEqual([0, 1]);
- expect(findDeleteBtn().disabled).toBe(false);
-
- findDeleteBtn().click();
- spyOn(vm, 'multiDeleteItems').and.returnValue(Promise.resolve());
-
- Vue.nextTick(() => {
- const modal = confirmationModal();
- confirmationModal('.btn-danger').click();
-
- expect(modal).toExist();
-
- Vue.nextTick(() => {
- expect(vm.itemsToBeDeleted).toEqual([]);
- expect(vm.multiDeleteItems).toHaveBeenCalledWith({
- path: bulkDeletePath,
- items: [firstImage.tag, secondImage.tag],
- });
- done();
- });
- });
- });
- });
- });
-
- describe('delete registry', () => {
- beforeEach(() => {
- vm.itemsToBeDeleted = [0];
- });
-
- it('should be possible to delete a registry', done => {
- Vue.nextTick(() => {
- expect(vm.itemsToBeDeleted).toEqual([0]);
- expect(findDeleteBtn()).toBeDefined();
- expect(findDeleteBtn().disabled).toBe(false);
- expect(findDeleteBtnRow()).toBeDefined();
- done();
- });
- });
-
- it('should call deleteItems and reset itemsToBeDeleted when confirming deletion', done => {
- Vue.nextTick(() => {
- expect(vm.itemsToBeDeleted).toEqual([0]);
- expect(findDeleteBtn().disabled).toBe(false);
- findDeleteBtn().click();
- spyOn(vm, 'multiDeleteItems').and.returnValue(Promise.resolve());
-
- Vue.nextTick(() => {
- confirmationModal('.btn-danger').click();
-
- expect(vm.itemsToBeDeleted).toEqual([]);
- expect(vm.multiDeleteItems).toHaveBeenCalledWith({
- path: bulkDeletePath,
- items: [firstImage.tag],
- });
- done();
- });
- });
- });
- });
-
- describe('pagination', () => {
- it('should be possible to change the page', () => {
- expect(vm.$el.querySelector('.gl-pagination')).toBeDefined();
- });
- });
-
- describe('modal content', () => {
- it('should show the singular title and image name when deleting a single image', done => {
- findDeleteBtnRow().click();
-
- Vue.nextTick(() => {
- expect(vm.modalTitle).toBe('Remove image');
- expect(vm.modalDescription).toContain(firstImage.tag);
- done();
- });
- });
-
- it('should show the plural title and image count when deleting more than one image', done => {
- selectAllCheckboxes();
- vm.setModalDescription();
-
- Vue.nextTick(() => {
- expect(vm.modalTitle).toBe('Remove images');
- expect(vm.modalDescription).toContain('<b>2</b> images');
- done();
- });
- });
- });
-});
diff --git a/spec/javascripts/registry/stores/actions_spec.js b/spec/javascripts/registry/stores/actions_spec.js
deleted file mode 100644
index 0613ec8e0f1..00000000000
--- a/spec/javascripts/registry/stores/actions_spec.js
+++ /dev/null
@@ -1,132 +0,0 @@
-import MockAdapter from 'axios-mock-adapter';
-import axios from '~/lib/utils/axios_utils';
-import * as actions from '~/registry/stores/actions';
-import * as types from '~/registry/stores/mutation_types';
-import state from '~/registry/stores/state';
-import { TEST_HOST } from 'spec/test_constants';
-import testAction from '../../helpers/vuex_action_helper';
-import {
- reposServerResponse,
- registryServerResponse,
- parsedReposServerResponse,
-} from '../mock_data';
-
-describe('Actions Registry Store', () => {
- let mockedState;
- let mock;
-
- beforeEach(() => {
- mockedState = state();
- mockedState.endpoint = `${TEST_HOST}/endpoint.json`;
- mock = new MockAdapter(axios);
- });
-
- afterEach(() => {
- mock.restore();
- });
-
- describe('server requests', () => {
- describe('fetchRepos', () => {
- beforeEach(() => {
- mock.onGet(`${TEST_HOST}/endpoint.json`).replyOnce(200, reposServerResponse, {});
- });
-
- it('should set receveived repos', done => {
- testAction(
- actions.fetchRepos,
- null,
- mockedState,
- [
- { type: types.TOGGLE_MAIN_LOADING },
- { type: types.TOGGLE_MAIN_LOADING },
- { type: types.SET_REPOS_LIST, payload: reposServerResponse },
- ],
- [],
- done,
- );
- });
- });
-
- describe('fetchList', () => {
- let repo;
- beforeEach(() => {
- mockedState.repos = parsedReposServerResponse;
- [, repo] = mockedState.repos;
-
- mock.onGet(repo.tagsPath).replyOnce(200, registryServerResponse, {});
- });
-
- it('should set received list', done => {
- testAction(
- actions.fetchList,
- { repo },
- mockedState,
- [
- { type: types.TOGGLE_REGISTRY_LIST_LOADING, payload: repo },
- { type: types.TOGGLE_REGISTRY_LIST_LOADING, payload: repo },
- {
- type: types.SET_REGISTRY_LIST,
- payload: {
- repo,
- resp: registryServerResponse,
- headers: jasmine.anything(),
- },
- },
- ],
- [],
- done,
- );
- });
- });
- });
-
- describe('setMainEndpoint', () => {
- it('should commit set main endpoint', done => {
- testAction(
- actions.setMainEndpoint,
- 'endpoint',
- mockedState,
- [{ type: types.SET_MAIN_ENDPOINT, payload: 'endpoint' }],
- [],
- done,
- );
- });
- });
-
- describe('toggleLoading', () => {
- it('should commit toggle main loading', done => {
- testAction(
- actions.toggleLoading,
- null,
- mockedState,
- [{ type: types.TOGGLE_MAIN_LOADING }],
- [],
- done,
- );
- });
- });
-
- describe('deleteItem', () => {
- it('should perform DELETE request on destroyPath', done => {
- const destroyPath = `${TEST_HOST}/mygroup/myproject/container_registry/1.json`;
- let deleted = false;
- mock.onDelete(destroyPath).replyOnce(() => {
- deleted = true;
- return [200];
- });
- testAction(
- actions.deleteItem,
- {
- destroyPath,
- },
- mockedState,
- )
- .then(() => {
- expect(mock.history.delete.length).toBe(1);
- expect(deleted).toBe(true);
- done();
- })
- .catch(done.fail);
- });
- });
-});
diff --git a/spec/javascripts/registry/stores/mutations_spec.js b/spec/javascripts/registry/stores/mutations_spec.js
deleted file mode 100644
index e19fe7a27cf..00000000000
--- a/spec/javascripts/registry/stores/mutations_spec.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import mutations from '~/registry/stores/mutations';
-import * as types from '~/registry/stores/mutation_types';
-import {
- defaultState,
- reposServerResponse,
- registryServerResponse,
- parsedReposServerResponse,
- parsedRegistryServerResponse,
-} from '../mock_data';
-
-describe('Mutations Registry Store', () => {
- let mockState;
- beforeEach(() => {
- mockState = defaultState;
- });
-
- describe('SET_MAIN_ENDPOINT', () => {
- it('should set the main endpoint', () => {
- const expectedState = Object.assign({}, mockState, { endpoint: 'foo' });
- mutations[types.SET_MAIN_ENDPOINT](mockState, 'foo');
-
- expect(mockState).toEqual(expectedState);
- });
- });
-
- describe('SET_REPOS_LIST', () => {
- it('should set a parsed repository list', () => {
- mutations[types.SET_REPOS_LIST](mockState, reposServerResponse);
-
- expect(mockState.repos).toEqual(parsedReposServerResponse);
- });
- });
-
- describe('TOGGLE_MAIN_LOADING', () => {
- it('should set a parsed repository list', () => {
- mutations[types.TOGGLE_MAIN_LOADING](mockState);
-
- expect(mockState.isLoading).toEqual(true);
- });
- });
-
- describe('SET_REGISTRY_LIST', () => {
- it('should set a list of registries in a specific repository', () => {
- mutations[types.SET_REPOS_LIST](mockState, reposServerResponse);
- mutations[types.SET_REGISTRY_LIST](mockState, {
- repo: mockState.repos[0],
- resp: registryServerResponse,
- headers: {
- 'x-per-page': 2,
- 'x-page': 1,
- 'x-total': 10,
- },
- });
-
- expect(mockState.repos[0].list).toEqual(parsedRegistryServerResponse);
- expect(mockState.repos[0].pagination).toEqual({
- perPage: 2,
- page: 1,
- total: 10,
- totalPages: NaN,
- nextPage: NaN,
- previousPage: NaN,
- });
- });
- });
-
- describe('TOGGLE_REGISTRY_LIST_LOADING', () => {
- it('should toggle isLoading property for a specific repository', () => {
- mutations[types.SET_REPOS_LIST](mockState, reposServerResponse);
- mutations[types.SET_REGISTRY_LIST](mockState, {
- repo: mockState.repos[0],
- resp: registryServerResponse,
- headers: {
- 'x-per-page': 2,
- 'x-page': 1,
- 'x-total': 10,
- },
- });
-
- mutations[types.TOGGLE_REGISTRY_LIST_LOADING](mockState, mockState.repos[0]);
-
- expect(mockState.repos[0].isLoading).toEqual(true);
- });
- });
-});
diff --git a/spec/javascripts/releases/components/app_spec.js b/spec/javascripts/releases/components/app_spec.js
deleted file mode 100644
index f30c7685e34..00000000000
--- a/spec/javascripts/releases/components/app_spec.js
+++ /dev/null
@@ -1,79 +0,0 @@
-import Vue from 'vue';
-import app from '~/releases/components/app.vue';
-import createStore from '~/releases/store';
-import api from '~/api';
-import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
-import { resetStore } from '../store/helpers';
-import { releases } from '../mock_data';
-
-describe('Releases App ', () => {
- const Component = Vue.extend(app);
- let store;
- let vm;
-
- const props = {
- projectId: 'gitlab-ce',
- documentationLink: 'help/releases',
- illustrationPath: 'illustration/path',
- };
-
- beforeEach(() => {
- store = createStore();
- });
-
- afterEach(() => {
- resetStore(store);
- vm.$destroy();
- });
-
- describe('while loading', () => {
- beforeEach(() => {
- spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: [] }));
- vm = mountComponentWithStore(Component, { props, store });
- });
-
- it('renders loading icon', done => {
- expect(vm.$el.querySelector('.js-loading')).not.toBeNull();
- expect(vm.$el.querySelector('.js-empty-state')).toBeNull();
- expect(vm.$el.querySelector('.js-success-state')).toBeNull();
-
- setTimeout(() => {
- done();
- }, 0);
- });
- });
-
- describe('with successful request', () => {
- beforeEach(() => {
- spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: releases }));
- vm = mountComponentWithStore(Component, { props, store });
- });
-
- it('renders success state', done => {
- setTimeout(() => {
- expect(vm.$el.querySelector('.js-loading')).toBeNull();
- expect(vm.$el.querySelector('.js-empty-state')).toBeNull();
- expect(vm.$el.querySelector('.js-success-state')).not.toBeNull();
-
- done();
- }, 0);
- });
- });
-
- describe('with empty request', () => {
- beforeEach(() => {
- spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: [] }));
- vm = mountComponentWithStore(Component, { props, store });
- });
-
- it('renders empty state', done => {
- setTimeout(() => {
- expect(vm.$el.querySelector('.js-loading')).toBeNull();
- expect(vm.$el.querySelector('.js-empty-state')).not.toBeNull();
- expect(vm.$el.querySelector('.js-success-state')).toBeNull();
-
- done();
- }, 0);
- });
- });
-});
diff --git a/spec/javascripts/releases/components/release_block_spec.js b/spec/javascripts/releases/components/release_block_spec.js
deleted file mode 100644
index 11a385fa64d..00000000000
--- a/spec/javascripts/releases/components/release_block_spec.js
+++ /dev/null
@@ -1,170 +0,0 @@
-import Vue from 'vue';
-import component from '~/releases/components/release_block.vue';
-import timeagoMixin from '~/vue_shared/mixins/timeago';
-
-import mountComponent from '../../helpers/vue_mount_component_helper';
-
-describe('Release block', () => {
- const Component = Vue.extend(component);
-
- const release = {
- name: 'Bionic Beaver',
- tag_name: '18.04',
- description: '## changelog\n\n* line 1\n* line2',
- description_html: '<div><h2>changelog</h2><ul><li>line1</li<li>line 2</li></ul></div>',
- author_name: 'Release bot',
- author_email: 'release-bot@example.com',
- released_at: '2012-05-28T05:00:00-07:00',
- author: {
- avatar_url: 'uploads/-/system/user/avatar/johndoe/avatar.png',
- id: 482476,
- name: 'John Doe',
- path: '/johndoe',
- state: 'active',
- status_tooltip_html: null,
- username: 'johndoe',
- web_url: 'https://gitlab.com/johndoe',
- },
- commit: {
- id: '2695effb5807a22ff3d138d593fd856244e155e7',
- short_id: '2695effb',
- title: 'Initial commit',
- created_at: '2017-07-26T11:08:53.000+02:00',
- parent_ids: ['2a4b78934375d7f53875269ffd4f45fd83a84ebe'],
- message: 'Initial commit',
- author_name: 'John Smith',
- author_email: 'john@example.com',
- authored_date: '2012-05-28T04:42:42-07:00',
- committer_name: 'Jack Smith',
- committer_email: 'jack@example.com',
- committed_date: '2012-05-28T04:42:42-07:00',
- },
- assets: {
- count: 6,
- sources: [
- {
- format: 'zip',
- url:
- 'https://gitlab.com/gitlab-org/gitlab-foss/-/archive/v11.3.12/gitlab-ce-v11.3.12.zip',
- },
- {
- format: 'tar.gz',
- url:
- 'https://gitlab.com/gitlab-org/gitlab-foss/-/archive/v11.3.12/gitlab-ce-v11.3.12.tar.gz',
- },
- {
- format: 'tar.bz2',
- url:
- 'https://gitlab.com/gitlab-org/gitlab-foss/-/archive/v11.3.12/gitlab-ce-v11.3.12.tar.bz2',
- },
- {
- format: 'tar',
- url:
- 'https://gitlab.com/gitlab-org/gitlab-foss/-/archive/v11.3.12/gitlab-ce-v11.3.12.tar',
- },
- ],
- links: [
- {
- name: 'release-18.04.dmg',
- url: 'https://my-external-hosting.example.com/scrambled-url/',
- external: true,
- },
- {
- name: 'binary-linux-amd64',
- url:
- 'https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/v11.6.0-rc4/download?job=rspec-mysql+41%2F50',
- external: false,
- },
- ],
- },
- };
- let vm;
-
- const factory = props => mountComponent(Component, { release: props });
-
- beforeEach(() => {
- vm = factory(release);
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- it("renders the block with an id equal to the release's tag name", () => {
- expect(vm.$el.id).toBe('18.04');
- });
-
- it('renders release name', () => {
- expect(vm.$el.textContent).toContain(release.name);
- });
-
- it('renders commit sha', () => {
- expect(vm.$el.textContent).toContain(release.commit.short_id);
- });
-
- it('renders tag name', () => {
- expect(vm.$el.textContent).toContain(release.tag_name);
- });
-
- it('renders release date', () => {
- expect(vm.$el.textContent).toContain(timeagoMixin.methods.timeFormated(release.released_at));
- });
-
- it('renders number of assets provided', () => {
- expect(vm.$el.querySelector('.js-assets-count').textContent).toContain(release.assets.count);
- });
-
- it('renders dropdown with the sources', () => {
- expect(vm.$el.querySelectorAll('.js-sources-dropdown li').length).toEqual(
- release.assets.sources.length,
- );
-
- expect(vm.$el.querySelector('.js-sources-dropdown li a').getAttribute('href')).toEqual(
- release.assets.sources[0].url,
- );
-
- expect(vm.$el.querySelector('.js-sources-dropdown li a').textContent).toContain(
- release.assets.sources[0].format,
- );
- });
-
- it('renders list with the links provided', () => {
- expect(vm.$el.querySelectorAll('.js-assets-list li').length).toEqual(
- release.assets.links.length,
- );
-
- expect(vm.$el.querySelector('.js-assets-list li a').getAttribute('href')).toEqual(
- release.assets.links[0].url,
- );
-
- expect(vm.$el.querySelector('.js-assets-list li a').textContent).toContain(
- release.assets.links[0].name,
- );
- });
-
- it('renders author avatar', () => {
- expect(vm.$el.querySelector('.user-avatar-link')).not.toBeNull();
- });
-
- describe('external label', () => {
- it('renders external label when link is external', () => {
- expect(vm.$el.querySelector('.js-assets-list li a').textContent).toContain('external source');
- });
-
- it('does not render external label when link is not external', () => {
- expect(vm.$el.querySelector('.js-assets-list li:nth-child(2) a').textContent).not.toContain(
- 'external source',
- );
- });
- });
-
- describe('with upcoming_release flag', () => {
- beforeEach(() => {
- vm = factory(Object.assign({}, release, { upcoming_release: true }));
- });
-
- it('renders upcoming release badge', () => {
- expect(vm.$el.textContent).toContain('Upcoming Release');
- });
- });
-});
diff --git a/spec/javascripts/releases/list/components/app_spec.js b/spec/javascripts/releases/list/components/app_spec.js
new file mode 100644
index 00000000000..471c442e497
--- /dev/null
+++ b/spec/javascripts/releases/list/components/app_spec.js
@@ -0,0 +1,79 @@
+import Vue from 'vue';
+import app from '~/releases/list/components/app.vue';
+import createStore from '~/releases/list/store';
+import api from '~/api';
+import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
+import { resetStore } from '../store/helpers';
+import { releases } from '../../mock_data';
+
+describe('Releases App ', () => {
+ const Component = Vue.extend(app);
+ let store;
+ let vm;
+
+ const props = {
+ projectId: 'gitlab-ce',
+ documentationLink: 'help/releases',
+ illustrationPath: 'illustration/path',
+ };
+
+ beforeEach(() => {
+ store = createStore();
+ });
+
+ afterEach(() => {
+ resetStore(store);
+ vm.$destroy();
+ });
+
+ describe('while loading', () => {
+ beforeEach(() => {
+ spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: [] }));
+ vm = mountComponentWithStore(Component, { props, store });
+ });
+
+ it('renders loading icon', done => {
+ expect(vm.$el.querySelector('.js-loading')).not.toBeNull();
+ expect(vm.$el.querySelector('.js-empty-state')).toBeNull();
+ expect(vm.$el.querySelector('.js-success-state')).toBeNull();
+
+ setTimeout(() => {
+ done();
+ }, 0);
+ });
+ });
+
+ describe('with successful request', () => {
+ beforeEach(() => {
+ spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: releases }));
+ vm = mountComponentWithStore(Component, { props, store });
+ });
+
+ it('renders success state', done => {
+ setTimeout(() => {
+ expect(vm.$el.querySelector('.js-loading')).toBeNull();
+ expect(vm.$el.querySelector('.js-empty-state')).toBeNull();
+ expect(vm.$el.querySelector('.js-success-state')).not.toBeNull();
+
+ done();
+ }, 0);
+ });
+ });
+
+ describe('with empty request', () => {
+ beforeEach(() => {
+ spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: [] }));
+ vm = mountComponentWithStore(Component, { props, store });
+ });
+
+ it('renders empty state', done => {
+ setTimeout(() => {
+ expect(vm.$el.querySelector('.js-loading')).toBeNull();
+ expect(vm.$el.querySelector('.js-empty-state')).not.toBeNull();
+ expect(vm.$el.querySelector('.js-success-state')).toBeNull();
+
+ done();
+ }, 0);
+ });
+ });
+});
diff --git a/spec/javascripts/releases/list/store/actions_spec.js b/spec/javascripts/releases/list/store/actions_spec.js
new file mode 100644
index 00000000000..8e78a631a5f
--- /dev/null
+++ b/spec/javascripts/releases/list/store/actions_spec.js
@@ -0,0 +1,98 @@
+import {
+ requestReleases,
+ fetchReleases,
+ receiveReleasesSuccess,
+ receiveReleasesError,
+} from '~/releases/list/store/actions';
+import state from '~/releases/list/store/state';
+import * as types from '~/releases/list/store/mutation_types';
+import api from '~/api';
+import testAction from 'spec/helpers/vuex_action_helper';
+import { releases } from '../../mock_data';
+
+describe('Releases State actions', () => {
+ let mockedState;
+
+ beforeEach(() => {
+ mockedState = state();
+ });
+
+ describe('requestReleases', () => {
+ it('should commit REQUEST_RELEASES mutation', done => {
+ testAction(requestReleases, null, mockedState, [{ type: types.REQUEST_RELEASES }], [], done);
+ });
+ });
+
+ describe('fetchReleases', () => {
+ describe('success', () => {
+ it('dispatches requestReleases and receiveReleasesSuccess ', done => {
+ spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: releases }));
+
+ testAction(
+ fetchReleases,
+ releases,
+ mockedState,
+ [],
+ [
+ {
+ type: 'requestReleases',
+ },
+ {
+ payload: releases,
+ type: 'receiveReleasesSuccess',
+ },
+ ],
+ done,
+ );
+ });
+ });
+
+ describe('error', () => {
+ it('dispatches requestReleases and receiveReleasesError ', done => {
+ spyOn(api, 'releases').and.returnValue(Promise.reject());
+
+ testAction(
+ fetchReleases,
+ null,
+ mockedState,
+ [],
+ [
+ {
+ type: 'requestReleases',
+ },
+ {
+ type: 'receiveReleasesError',
+ },
+ ],
+ done,
+ );
+ });
+ });
+ });
+
+ describe('receiveReleasesSuccess', () => {
+ it('should commit RECEIVE_RELEASES_SUCCESS mutation', done => {
+ testAction(
+ receiveReleasesSuccess,
+ releases,
+ mockedState,
+ [{ type: types.RECEIVE_RELEASES_SUCCESS, payload: releases }],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('receiveReleasesError', () => {
+ it('should commit RECEIVE_RELEASES_ERROR mutation', done => {
+ testAction(
+ receiveReleasesError,
+ null,
+ mockedState,
+ [{ type: types.RECEIVE_RELEASES_ERROR }],
+ [],
+ done,
+ );
+ });
+ });
+});
diff --git a/spec/javascripts/releases/list/store/helpers.js b/spec/javascripts/releases/list/store/helpers.js
new file mode 100644
index 00000000000..fbc89ec2148
--- /dev/null
+++ b/spec/javascripts/releases/list/store/helpers.js
@@ -0,0 +1,6 @@
+import state from '~/releases/list/store/state';
+
+// eslint-disable-next-line import/prefer-default-export
+export const resetStore = store => {
+ store.replaceState(state());
+};
diff --git a/spec/javascripts/releases/list/store/mutations_spec.js b/spec/javascripts/releases/list/store/mutations_spec.js
new file mode 100644
index 00000000000..d2577891495
--- /dev/null
+++ b/spec/javascripts/releases/list/store/mutations_spec.js
@@ -0,0 +1,47 @@
+import state from '~/releases/list/store/state';
+import mutations from '~/releases/list/store/mutations';
+import * as types from '~/releases/list/store/mutation_types';
+import { releases } from '../../mock_data';
+
+describe('Releases Store Mutations', () => {
+ let stateCopy;
+
+ beforeEach(() => {
+ stateCopy = state();
+ });
+
+ describe('REQUEST_RELEASES', () => {
+ it('sets isLoading to true', () => {
+ mutations[types.REQUEST_RELEASES](stateCopy);
+
+ expect(stateCopy.isLoading).toEqual(true);
+ });
+ });
+
+ describe('RECEIVE_RELEASES_SUCCESS', () => {
+ beforeEach(() => {
+ mutations[types.RECEIVE_RELEASES_SUCCESS](stateCopy, releases);
+ });
+
+ it('sets is loading to false', () => {
+ expect(stateCopy.isLoading).toEqual(false);
+ });
+
+ it('sets hasError to false', () => {
+ expect(stateCopy.hasError).toEqual(false);
+ });
+
+ it('sets data', () => {
+ expect(stateCopy.releases).toEqual(releases);
+ });
+ });
+
+ describe('RECEIVE_RELEASES_ERROR', () => {
+ it('resets data', () => {
+ mutations[types.RECEIVE_RELEASES_ERROR](stateCopy);
+
+ expect(stateCopy.isLoading).toEqual(false);
+ expect(stateCopy.releases).toEqual([]);
+ });
+ });
+});
diff --git a/spec/javascripts/releases/store/actions_spec.js b/spec/javascripts/releases/store/actions_spec.js
deleted file mode 100644
index 6eb8e681be9..00000000000
--- a/spec/javascripts/releases/store/actions_spec.js
+++ /dev/null
@@ -1,98 +0,0 @@
-import {
- requestReleases,
- fetchReleases,
- receiveReleasesSuccess,
- receiveReleasesError,
-} from '~/releases/store/actions';
-import state from '~/releases/store/state';
-import * as types from '~/releases/store/mutation_types';
-import api from '~/api';
-import testAction from 'spec/helpers/vuex_action_helper';
-import { releases } from '../mock_data';
-
-describe('Releases State actions', () => {
- let mockedState;
-
- beforeEach(() => {
- mockedState = state();
- });
-
- describe('requestReleases', () => {
- it('should commit REQUEST_RELEASES mutation', done => {
- testAction(requestReleases, null, mockedState, [{ type: types.REQUEST_RELEASES }], [], done);
- });
- });
-
- describe('fetchReleases', () => {
- describe('success', () => {
- it('dispatches requestReleases and receiveReleasesSuccess ', done => {
- spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: releases }));
-
- testAction(
- fetchReleases,
- releases,
- mockedState,
- [],
- [
- {
- type: 'requestReleases',
- },
- {
- payload: releases,
- type: 'receiveReleasesSuccess',
- },
- ],
- done,
- );
- });
- });
-
- describe('error', () => {
- it('dispatches requestReleases and receiveReleasesError ', done => {
- spyOn(api, 'releases').and.returnValue(Promise.reject());
-
- testAction(
- fetchReleases,
- null,
- mockedState,
- [],
- [
- {
- type: 'requestReleases',
- },
- {
- type: 'receiveReleasesError',
- },
- ],
- done,
- );
- });
- });
- });
-
- describe('receiveReleasesSuccess', () => {
- it('should commit RECEIVE_RELEASES_SUCCESS mutation', done => {
- testAction(
- receiveReleasesSuccess,
- releases,
- mockedState,
- [{ type: types.RECEIVE_RELEASES_SUCCESS, payload: releases }],
- [],
- done,
- );
- });
- });
-
- describe('receiveReleasesError', () => {
- it('should commit RECEIVE_RELEASES_ERROR mutation', done => {
- testAction(
- receiveReleasesError,
- null,
- mockedState,
- [{ type: types.RECEIVE_RELEASES_ERROR }],
- [],
- done,
- );
- });
- });
-});
diff --git a/spec/javascripts/releases/store/helpers.js b/spec/javascripts/releases/store/helpers.js
deleted file mode 100644
index e962b254377..00000000000
--- a/spec/javascripts/releases/store/helpers.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import state from '~/releases/store/state';
-
-// eslint-disable-next-line import/prefer-default-export
-export const resetStore = store => {
- store.replaceState(state());
-};
diff --git a/spec/javascripts/releases/store/mutations_spec.js b/spec/javascripts/releases/store/mutations_spec.js
deleted file mode 100644
index 72b98529fe9..00000000000
--- a/spec/javascripts/releases/store/mutations_spec.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import state from '~/releases/store/state';
-import mutations from '~/releases/store/mutations';
-import * as types from '~/releases/store/mutation_types';
-import { releases } from '../mock_data';
-
-describe('Releases Store Mutations', () => {
- let stateCopy;
-
- beforeEach(() => {
- stateCopy = state();
- });
-
- describe('REQUEST_RELEASES', () => {
- it('sets isLoading to true', () => {
- mutations[types.REQUEST_RELEASES](stateCopy);
-
- expect(stateCopy.isLoading).toEqual(true);
- });
- });
-
- describe('RECEIVE_RELEASES_SUCCESS', () => {
- beforeEach(() => {
- mutations[types.RECEIVE_RELEASES_SUCCESS](stateCopy, releases);
- });
-
- it('sets is loading to false', () => {
- expect(stateCopy.isLoading).toEqual(false);
- });
-
- it('sets hasError to false', () => {
- expect(stateCopy.hasError).toEqual(false);
- });
-
- it('sets data', () => {
- expect(stateCopy.releases).toEqual(releases);
- });
- });
-
- describe('RECEIVE_RELEASES_ERROR', () => {
- it('resets data', () => {
- mutations[types.RECEIVE_RELEASES_ERROR](stateCopy);
-
- expect(stateCopy.isLoading).toEqual(false);
- expect(stateCopy.releases).toEqual([]);
- });
- });
-});
diff --git a/spec/javascripts/reports/components/grouped_test_reports_app_spec.js b/spec/javascripts/reports/components/grouped_test_reports_app_spec.js
index 1f1e626ed33..1b006cdbd4e 100644
--- a/spec/javascripts/reports/components/grouped_test_reports_app_spec.js
+++ b/spec/javascripts/reports/components/grouped_test_reports_app_spec.js
@@ -83,11 +83,11 @@ describe('Grouped Test Reports App', () => {
setTimeout(() => {
expect(vm.$el.querySelector('.gl-spinner')).toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
- 'Test summary contained 2 failed test results out of 11 total tests',
+ 'Test summary contained 2 failed/error test results out of 11 total tests',
);
expect(vm.$el.textContent).toContain(
- 'rspec:pg found 2 failed test results out of 8 total tests',
+ 'rspec:pg found 2 failed/error test results out of 8 total tests',
);
expect(vm.$el.textContent).toContain('New');
@@ -111,16 +111,16 @@ describe('Grouped Test Reports App', () => {
setTimeout(() => {
expect(vm.$el.querySelector('.gl-spinner')).toBeNull();
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
- 'Test summary contained 2 failed test results and 2 fixed test results out of 11 total tests',
+ 'Test summary contained 2 failed/error test results and 2 fixed test results out of 11 total tests',
);
expect(vm.$el.textContent).toContain(
- 'rspec:pg found 1 failed test result and 2 fixed test results out of 8 total tests',
+ 'rspec:pg found 1 failed/error test result and 2 fixed test results out of 8 total tests',
);
expect(vm.$el.textContent).toContain('New');
expect(vm.$el.textContent).toContain(
- ' java ant found 1 failed test result out of 3 total tests',
+ ' java ant found 1 failed/error test result out of 3 total tests',
);
done();
}, 0);
diff --git a/spec/javascripts/sidebar/assignee_title_spec.js b/spec/javascripts/sidebar/assignee_title_spec.js
index 7fff7c075d9..6c65a55ff29 100644
--- a/spec/javascripts/sidebar/assignee_title_spec.js
+++ b/spec/javascripts/sidebar/assignee_title_spec.js
@@ -1,13 +1,12 @@
import Vue from 'vue';
import AssigneeTitle from '~/sidebar/components/assignees/assignee_title.vue';
+import { mockTracking, triggerEvent } from 'spec/helpers/tracking_helper';
describe('AssigneeTitle component', () => {
let component;
let AssigneeTitleComponent;
- let statsSpy;
beforeEach(() => {
- statsSpy = spyOnDependency(AssigneeTitle, 'trackEvent');
AssigneeTitleComponent = Vue.extend(AssigneeTitle);
});
@@ -105,15 +104,20 @@ describe('AssigneeTitle component', () => {
expect(component.$el.querySelector('.edit-link')).not.toBeNull();
});
- it('calls trackEvent when edit is clicked', () => {
+ it('tracks the event when edit is clicked', () => {
component = new AssigneeTitleComponent({
propsData: {
numberOfAssignees: 0,
editable: true,
},
}).$mount();
- component.$el.querySelector('.js-sidebar-dropdown-toggle').click();
- expect(statsSpy).toHaveBeenCalled();
+ const spy = mockTracking('_category_', component.$el, spyOn);
+ triggerEvent('.js-sidebar-dropdown-toggle');
+
+ expect(spy).toHaveBeenCalledWith('_category_', 'click_edit_button', {
+ label: 'right_sidebar',
+ property: 'assignee',
+ });
});
});
diff --git a/spec/javascripts/sidebar/components/time_tracking/time_tracker_spec.js b/spec/javascripts/sidebar/components/time_tracking/time_tracker_spec.js
index 2e1863cff86..ab28190ae64 100644
--- a/spec/javascripts/sidebar/components/time_tracking/time_tracker_spec.js
+++ b/spec/javascripts/sidebar/components/time_tracking/time_tracker_spec.js
@@ -83,8 +83,8 @@ describe('Issuable Time Tracker', () => {
initTimeTrackingComponent({
timeEstimate: 100000, // 1d 3h
timeSpent: 5000, // 1h 23m
- timeEstimateHumanReadable: '',
- timeSpentHumanReadable: '',
+ timeEstimateHumanReadable: '1d 3h',
+ timeSpentHumanReadable: '1h 23m',
});
});
@@ -98,6 +98,16 @@ describe('Issuable Time Tracker', () => {
});
});
+ it('should show full times when the sidebar is collapsed', done => {
+ Vue.nextTick(() => {
+ const timeTrackingText = vm.$el.querySelector('.time-tracking-collapsed-summary span')
+ .innerText;
+
+ expect(timeTrackingText).toBe('1h 23m / 1d 3h');
+ done();
+ });
+ });
+
describe('Remaining meter', () => {
it('should display the remaining meter with the correct width', done => {
Vue.nextTick(() => {
diff --git a/spec/javascripts/sidebar/confidential_issue_sidebar_spec.js b/spec/javascripts/sidebar/confidential_issue_sidebar_spec.js
deleted file mode 100644
index ea9e5677bc5..00000000000
--- a/spec/javascripts/sidebar/confidential_issue_sidebar_spec.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import Vue from 'vue';
-import confidentialIssueSidebar from '~/sidebar/components/confidential/confidential_issue_sidebar.vue';
-
-describe('Confidential Issue Sidebar Block', () => {
- let vm1;
- let vm2;
- let statsSpy;
-
- beforeEach(() => {
- statsSpy = spyOnDependency(confidentialIssueSidebar, 'trackEvent');
- const Component = Vue.extend(confidentialIssueSidebar);
- const service = {
- update: () => Promise.resolve(true),
- };
-
- vm1 = new Component({
- propsData: {
- isConfidential: true,
- isEditable: true,
- service,
- },
- }).$mount();
-
- vm2 = new Component({
- propsData: {
- isConfidential: false,
- isEditable: false,
- service,
- },
- }).$mount();
- });
-
- it('shows if confidential and/or editable', () => {
- expect(vm1.$el.innerHTML.includes('Edit')).toBe(true);
-
- expect(vm1.$el.innerHTML.includes('This issue is confidential')).toBe(true);
-
- expect(vm2.$el.innerHTML.includes('Not confidential')).toBe(true);
- });
-
- it('displays the edit form when editable', done => {
- expect(vm1.edit).toBe(false);
-
- vm1.$el.querySelector('.confidential-edit').click();
-
- expect(vm1.edit).toBe(true);
-
- setTimeout(() => {
- expect(vm1.$el.innerHTML.includes('You are going to turn off the confidentiality.')).toBe(
- true,
- );
-
- done();
- });
- });
-
- it('displays the edit form when opened from collapsed state', done => {
- expect(vm1.edit).toBe(false);
-
- vm1.$el.querySelector('.sidebar-collapsed-icon').click();
-
- expect(vm1.edit).toBe(true);
-
- setTimeout(() => {
- expect(vm1.$el.innerHTML.includes('You are going to turn off the confidentiality.')).toBe(
- true,
- );
-
- done();
- });
- });
-
- it('calls trackEvent when "Edit" is clicked', () => {
- vm1.$el.querySelector('.confidential-edit').click();
-
- expect(statsSpy).toHaveBeenCalled();
- });
-});
diff --git a/spec/javascripts/sidebar/lock/lock_issue_sidebar_spec.js b/spec/javascripts/sidebar/lock/lock_issue_sidebar_spec.js
index 2d930428230..decccbb8964 100644
--- a/spec/javascripts/sidebar/lock/lock_issue_sidebar_spec.js
+++ b/spec/javascripts/sidebar/lock/lock_issue_sidebar_spec.js
@@ -1,13 +1,12 @@
import Vue from 'vue';
import lockIssueSidebar from '~/sidebar/components/lock/lock_issue_sidebar.vue';
+import { mockTracking, triggerEvent } from 'spec/helpers/tracking_helper';
describe('LockIssueSidebar', () => {
let vm1;
let vm2;
- let statsSpy;
beforeEach(() => {
- statsSpy = spyOnDependency(lockIssueSidebar, 'trackEvent');
const Component = Vue.extend(lockIssueSidebar);
const mediator = {
@@ -61,10 +60,14 @@ describe('LockIssueSidebar', () => {
});
});
- it('calls trackEvent when "Edit" is clicked', () => {
- vm1.$el.querySelector('.lock-edit').click();
+ it('tracks an event when "Edit" is clicked', () => {
+ const spy = mockTracking('_category_', vm1.$el, spyOn);
+ triggerEvent('.lock-edit');
- expect(statsSpy).toHaveBeenCalled();
+ expect(spy).toHaveBeenCalledWith('_category_', 'click_edit_button', {
+ label: 'right_sidebar',
+ property: 'lock_issue',
+ });
});
it('displays the edit form when opened from collapsed state', done => {
diff --git a/spec/javascripts/sidebar/subscriptions_spec.js b/spec/javascripts/sidebar/subscriptions_spec.js
index 2efa13f3fe8..a97608d6b8a 100644
--- a/spec/javascripts/sidebar/subscriptions_spec.js
+++ b/spec/javascripts/sidebar/subscriptions_spec.js
@@ -2,14 +2,13 @@ import Vue from 'vue';
import subscriptions from '~/sidebar/components/subscriptions/subscriptions.vue';
import eventHub from '~/sidebar/event_hub';
import mountComponent from 'spec/helpers/vue_mount_component_helper';
+import { mockTracking } from 'spec/helpers/tracking_helper';
describe('Subscriptions', function() {
let vm;
let Subscriptions;
- let statsSpy;
beforeEach(() => {
- statsSpy = spyOnDependency(subscriptions, 'trackEvent');
Subscriptions = Vue.extend(subscriptions);
});
@@ -53,6 +52,7 @@ describe('Subscriptions', function() {
vm = mountComponent(Subscriptions, { subscribed: true });
spyOn(eventHub, '$emit');
spyOn(vm, '$emit');
+ spyOn(vm, 'track');
vm.toggleSubscription();
@@ -60,11 +60,12 @@ describe('Subscriptions', function() {
expect(vm.$emit).toHaveBeenCalledWith('toggleSubscription', jasmine.any(Object));
});
- it('calls trackEvent when toggled', () => {
+ it('tracks the event when toggled', () => {
vm = mountComponent(Subscriptions, { subscribed: true });
+ const spy = mockTracking('_category_', vm.$el, spyOn);
vm.toggleSubscription();
- expect(statsSpy).toHaveBeenCalled();
+ expect(spy).toHaveBeenCalled();
});
it('onClickCollapsedIcon method emits `toggleSidebar` event on component', () => {
diff --git a/spec/javascripts/sidebar/todo_spec.js b/spec/javascripts/sidebar/todo_spec.js
deleted file mode 100644
index e7abd19c865..00000000000
--- a/spec/javascripts/sidebar/todo_spec.js
+++ /dev/null
@@ -1,171 +0,0 @@
-import Vue from 'vue';
-
-import SidebarTodos from '~/sidebar/components/todo_toggle/todo.vue';
-import mountComponent from 'spec/helpers/vue_mount_component_helper';
-
-const createComponent = ({
- issuableId = 1,
- issuableType = 'epic',
- isTodo,
- isActionActive,
- collapsed,
-}) => {
- const Component = Vue.extend(SidebarTodos);
-
- return mountComponent(Component, {
- issuableId,
- issuableType,
- isTodo,
- isActionActive,
- collapsed,
- });
-};
-
-describe('SidebarTodo', () => {
- let vm;
-
- beforeEach(() => {
- vm = createComponent({});
- });
-
- afterEach(() => {
- vm.$destroy();
- });
-
- describe('computed', () => {
- describe('buttonClasses', () => {
- it('returns todo button classes for when `collapsed` prop is `false`', () => {
- expect(vm.buttonClasses).toBe('btn btn-default btn-todo issuable-header-btn float-right');
- });
-
- it('returns todo button classes for when `collapsed` prop is `true`', done => {
- vm.collapsed = true;
- Vue.nextTick()
- .then(() => {
- expect(vm.buttonClasses).toBe(
- 'btn-blank btn-todo sidebar-collapsed-icon dont-change-state',
- );
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('buttonLabel', () => {
- it('returns todo button text for marking todo as done when `isTodo` prop is `true`', () => {
- expect(vm.buttonLabel).toBe('Mark as done');
- });
-
- it('returns todo button text for add todo when `isTodo` prop is `false`', done => {
- vm.isTodo = false;
- Vue.nextTick()
- .then(() => {
- expect(vm.buttonLabel).toBe('Add a To Do');
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('collapsedButtonIconClasses', () => {
- it('returns collapsed button icon class when `isTodo` prop is `true`', () => {
- expect(vm.collapsedButtonIconClasses).toBe('todo-undone');
- });
-
- it('returns empty string when `isTodo` prop is `false`', done => {
- vm.isTodo = false;
- Vue.nextTick()
- .then(() => {
- expect(vm.collapsedButtonIconClasses).toBe('');
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('collapsedButtonIcon', () => {
- it('returns button icon name when `isTodo` prop is `true`', () => {
- expect(vm.collapsedButtonIcon).toBe('todo-done');
- });
-
- it('returns button icon name when `isTodo` prop is `false`', done => {
- vm.isTodo = false;
- Vue.nextTick()
- .then(() => {
- expect(vm.collapsedButtonIcon).toBe('todo-add');
- })
- .then(done)
- .catch(done.fail);
- });
- });
- });
-
- describe('methods', () => {
- describe('handleButtonClick', () => {
- it('emits `toggleTodo` event on component', () => {
- spyOn(vm, '$emit');
- vm.handleButtonClick();
-
- expect(vm.$emit).toHaveBeenCalledWith('toggleTodo');
- });
- });
- });
-
- describe('template', () => {
- it('renders component container element', () => {
- const dataAttributes = {
- issuableId: '1',
- issuableType: 'epic',
- originalTitle: '',
- placement: 'left',
- container: 'body',
- boundary: 'viewport',
- };
-
- expect(vm.$el.nodeName).toBe('BUTTON');
-
- const elDataAttrs = vm.$el.dataset;
- Object.keys(elDataAttrs).forEach(attr => {
- expect(elDataAttrs[attr]).toBe(dataAttributes[attr]);
- });
- });
-
- it('check button label computed property', () => {
- expect(vm.buttonLabel).toEqual('Mark as done');
- });
-
- it('renders button label element when `collapsed` prop is `false`', () => {
- const buttonLabelEl = vm.$el.querySelector('span.issuable-todo-inner');
-
- expect(buttonLabelEl).not.toBeNull();
- expect(buttonLabelEl.innerText.trim()).toBe('Mark as done');
- });
-
- it('renders button icon when `collapsed` prop is `true`', done => {
- vm.collapsed = true;
- Vue.nextTick()
- .then(() => {
- const buttonIconEl = vm.$el.querySelector('svg');
-
- expect(buttonIconEl).not.toBeNull();
- expect(buttonIconEl.querySelector('use').getAttribute('xlink:href')).toContain(
- 'todo-done',
- );
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('renders loading icon when `isActionActive` prop is true', done => {
- vm.isActionActive = true;
- Vue.nextTick()
- .then(() => {
- const loadingEl = vm.$el.querySelector('span.loading-container');
-
- expect(loadingEl).not.toBeNull();
- })
- .then(done)
- .catch(done.fail);
- });
- });
-});
diff --git a/spec/javascripts/test_bundle.js b/spec/javascripts/test_bundle.js
index c0a999cfaa6..cb6b158f01c 100644
--- a/spec/javascripts/test_bundle.js
+++ b/spec/javascripts/test_bundle.js
@@ -7,7 +7,6 @@ import 'core-js/features/set-immediate';
import 'vendor/jasmine-jquery';
import '~/commons';
import Vue from 'vue';
-import VueResource from 'vue-resource';
import Translate from '~/vue_shared/translate';
import jasmineDiff from 'jasmine-diff';
import { config as testUtilsConfig } from '@vue/test-utils';
@@ -46,7 +45,6 @@ Vue.config.errorHandler = function(err) {
fail(err);
};
-Vue.use(VueResource);
Vue.use(Translate);
// enable test fixtures
@@ -72,7 +70,7 @@ window.gl = window.gl || {};
window.gl.TEST_HOST = TEST_HOST;
window.gon = window.gon || {};
window.gon.test_env = true;
-window.gon.ee = process.env.IS_GITLAB_EE;
+window.gon.ee = process.env.IS_EE;
gon.relative_url_root = '';
let hasUnhandledPromiseRejections = false;
@@ -102,13 +100,6 @@ afterEach(__rewire_reset_all__); // eslint-disable-line
// to run our unit tests.
beforeEach(done => done());
-const builtinVueHttpInterceptors = Vue.http.interceptors.slice();
-
-beforeEach(() => {
- // restore interceptors so we have no remaining ones from previous tests
- Vue.http.interceptors = builtinVueHttpInterceptors.slice();
-});
-
let longRunningTestTimeoutHandle;
beforeEach(done => {
@@ -127,7 +118,7 @@ const axiosDefaultAdapter = getDefaultAdapter();
// render all of our tests
const testContexts = [require.context('spec', true, /_spec$/)];
-if (process.env.IS_GITLAB_EE) {
+if (process.env.IS_EE) {
testContexts.push(require.context('ee_spec', true, /_spec$/));
}
@@ -216,7 +207,7 @@ if (process.env.BABEL_ENV === 'coverage') {
describe('Uncovered files', function() {
const sourceFilesContexts = [require.context('~', true, /\.(js|vue)$/)];
- if (process.env.IS_GITLAB_EE) {
+ if (process.env.IS_EE) {
sourceFilesContexts.push(require.context('ee', true, /\.(js|vue)$/));
}
diff --git a/spec/javascripts/test_constants.js b/spec/javascripts/test_constants.js
index c97d47a6406..51c0716b99d 100644
--- a/spec/javascripts/test_constants.js
+++ b/spec/javascripts/test_constants.js
@@ -1,7 +1 @@
-export const FIXTURES_PATH = `/fixtures`;
-export const TEST_HOST = 'http://test.host';
-
-export const DUMMY_IMAGE_URL = `${FIXTURES_PATH}/static/images/one_white_pixel.png`;
-
-export const GREEN_BOX_IMAGE_URL = `${FIXTURES_PATH}/static/images/green_box.png`;
-export const RED_BOX_IMAGE_URL = `${FIXTURES_PATH}/static/images/red_box.png`;
+export * from '../frontend/helpers/test_constants';
diff --git a/spec/javascripts/todos_spec.js b/spec/javascripts/todos_spec.js
index 802f54f6a7e..dc3c547c632 100644
--- a/spec/javascripts/todos_spec.js
+++ b/spec/javascripts/todos_spec.js
@@ -1,18 +1,31 @@
import $ from 'jquery';
+import MockAdapter from 'axios-mock-adapter';
import Todos from '~/pages/dashboard/todos/index/todos';
import '~/lib/utils/common_utils';
+import '~/gl_dropdown';
+import axios from '~/lib/utils/axios_utils';
+import { addDelimiter } from '~/lib/utils/text_utility';
+
+const TEST_COUNT_BIG = 2000;
+const TEST_DONE_COUNT_BIG = 7300;
describe('Todos', () => {
preloadFixtures('todos/todos.html');
let todoItem;
+ let mock;
beforeEach(() => {
loadFixtures('todos/todos.html');
todoItem = document.querySelector('.todos-list .todo');
+ mock = new MockAdapter(axios);
return new Todos();
});
+ afterEach(() => {
+ mock.restore();
+ });
+
describe('goToTodoUrl', () => {
it('opens the todo url', done => {
const todoLink = todoItem.dataset.url;
@@ -53,5 +66,43 @@ describe('Todos', () => {
expect(windowOpenSpy).not.toHaveBeenCalled();
});
});
+
+ describe('on done todo click', () => {
+ let onToggleSpy;
+
+ beforeEach(done => {
+ const el = document.querySelector('.js-done-todo');
+ const path = el.dataset.href;
+
+ // Arrange
+ mock
+ .onDelete(path)
+ .replyOnce(200, { count: TEST_COUNT_BIG, done_count: TEST_DONE_COUNT_BIG });
+ onToggleSpy = jasmine.createSpy('onToggle');
+ $(document).on('todo:toggle', onToggleSpy);
+
+ // Act
+ el.click();
+
+ // Wait for axios and HTML to udpate
+ setImmediate(done);
+ });
+
+ it('dispatches todo:toggle', () => {
+ expect(onToggleSpy).toHaveBeenCalledWith(jasmine.anything(), TEST_COUNT_BIG);
+ });
+
+ it('updates pending text', () => {
+ expect(document.querySelector('.todos-pending .badge').innerHTML).toEqual(
+ addDelimiter(TEST_COUNT_BIG),
+ );
+ });
+
+ it('updates done text', () => {
+ expect(document.querySelector('.todos-done .badge').innerHTML).toEqual(
+ addDelimiter(TEST_DONE_COUNT_BIG),
+ );
+ });
+ });
});
});
diff --git a/spec/javascripts/vue_mr_widget/components/deployment_spec.js b/spec/javascripts/vue_mr_widget/components/deployment_spec.js
index 42bf3b7df09..1949bee1406 100644
--- a/spec/javascripts/vue_mr_widget/components/deployment_spec.js
+++ b/spec/javascripts/vue_mr_widget/components/deployment_spec.js
@@ -207,7 +207,7 @@ describe('Deployment component', () => {
it('renders the link to the review app without dropdown', () => {
expect(vm.$el.querySelector('.js-mr-wigdet-deployment-dropdown')).toBeNull();
- expect(vm.$el.querySelector('.js-deploy-url-feature-flag')).not.toBeNull();
+ expect(vm.$el.querySelector('.js-deploy-url')).not.toBeNull();
});
});
@@ -223,12 +223,12 @@ describe('Deployment component', () => {
it('renders the link to the review app without dropdown', () => {
expect(vm.$el.querySelector('.js-mr-wigdet-deployment-dropdown')).toBeNull();
- expect(vm.$el.querySelector('.js-deploy-url-feature-flag')).not.toBeNull();
+ expect(vm.$el.querySelector('.js-deploy-url')).not.toBeNull();
});
it('renders the link to the review app linked to to the first change', () => {
const expectedUrl = deploymentMockData.changes[0].external_url;
- const deployUrl = vm.$el.querySelector('.js-deploy-url-feature-flag');
+ const deployUrl = vm.$el.querySelector('.js-deploy-url');
expect(vm.$el.querySelector('.js-mr-wigdet-deployment-dropdown')).toBeNull();
expect(deployUrl).not.toBeNull();
diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js
index dfbc68c48b9..6cdf60f3535 100644
--- a/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js
+++ b/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js
@@ -1,6 +1,7 @@
import { mount, createLocalVue } from '@vue/test-utils';
import MrWidgetPipelineContainer from '~/vue_merge_request_widget/components/mr_widget_pipeline_container.vue';
import MrWidgetPipeline from '~/vue_merge_request_widget/components/mr_widget_pipeline.vue';
+import ArtifactsApp from '~/vue_merge_request_widget/components/artifacts_list_app.vue';
import { mockStore } from '../mock_data';
describe('MrWidgetPipelineContainer', () => {
@@ -87,4 +88,10 @@ describe('MrWidgetPipelineContainer', () => {
expect(deployments.wrappers.map(x => x.props())).toEqual(expectedProps);
});
});
+
+ describe('with artifacts path', () => {
+ it('renders the artifacts app', () => {
+ expect(wrapper.find(ArtifactsApp).isVisible()).toBe(true);
+ });
+ });
});
diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js
index 7b1d589dcf8..5844dad42ff 100644
--- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js
+++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_wip_spec.js
@@ -47,7 +47,7 @@ describe('Wip', () => {
it('should make a request to service and handle response', done => {
const vm = createComponent();
- spyOn(window, 'Flash').and.returnValue(true);
+ const flashSpy = spyOnDependency(WorkInProgress, 'createFlash').and.returnValue(true);
spyOn(eventHub, '$emit');
spyOn(vm.service, 'removeWIP').and.returnValue(
new Promise(resolve => {
@@ -61,10 +61,7 @@ describe('Wip', () => {
setTimeout(() => {
expect(vm.isMakingRequest).toBeTruthy();
expect(eventHub.$emit).toHaveBeenCalledWith('UpdateWidgetData', mrObj);
- expect(window.Flash).toHaveBeenCalledWith(
- 'The merge request can now be merged.',
- 'notice',
- );
+ expect(flashSpy).toHaveBeenCalledWith('The merge request can now be merged.', 'notice');
done();
}, 333);
});
diff --git a/spec/javascripts/vue_mr_widget/mock_data.js b/spec/javascripts/vue_mr_widget/mock_data.js
index 2f79806652b..089ec08fbf9 100644
--- a/spec/javascripts/vue_mr_widget/mock_data.js
+++ b/spec/javascripts/vue_mr_widget/mock_data.js
@@ -289,4 +289,5 @@ export const mockStore = {
troubleshootingDocsPath: 'troubleshooting-docs-path',
ciStatus: 'ci-status',
hasCI: true,
+ exposedArtifactsPath: 'exposed_artifacts.json',
};
diff --git a/spec/javascripts/vue_mr_widget/stores/artifacts_list/actions_spec.js b/spec/javascripts/vue_mr_widget/stores/artifacts_list/actions_spec.js
new file mode 100644
index 00000000000..4c4bebcb4cd
--- /dev/null
+++ b/spec/javascripts/vue_mr_widget/stores/artifacts_list/actions_spec.js
@@ -0,0 +1,165 @@
+import MockAdapter from 'axios-mock-adapter';
+import axios from '~/lib/utils/axios_utils';
+import {
+ setEndpoint,
+ requestArtifacts,
+ clearEtagPoll,
+ stopPolling,
+ fetchArtifacts,
+ receiveArtifactsSuccess,
+ receiveArtifactsError,
+} from '~/vue_merge_request_widget/stores/artifacts_list/actions';
+import state from '~/vue_merge_request_widget/stores/artifacts_list/state';
+import * as types from '~/vue_merge_request_widget/stores/artifacts_list/mutation_types';
+import testAction from 'spec/helpers/vuex_action_helper';
+import { TEST_HOST } from 'spec/test_constants';
+
+describe('Artifacts App Store Actions', () => {
+ let mockedState;
+
+ beforeEach(() => {
+ mockedState = state();
+ });
+
+ describe('setEndpoint', () => {
+ it('should commit SET_ENDPOINT mutation', done => {
+ testAction(
+ setEndpoint,
+ 'endpoint.json',
+ mockedState,
+ [{ type: types.SET_ENDPOINT, payload: 'endpoint.json' }],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('requestArtifacts', () => {
+ it('should commit REQUEST_ARTIFACTS mutation', done => {
+ testAction(
+ requestArtifacts,
+ null,
+ mockedState,
+ [{ type: types.REQUEST_ARTIFACTS }],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('fetchArtifacts', () => {
+ let mock;
+
+ beforeEach(() => {
+ mockedState.endpoint = `${TEST_HOST}/endpoint.json`;
+ mock = new MockAdapter(axios);
+ });
+
+ afterEach(() => {
+ mock.restore();
+ stopPolling();
+ clearEtagPoll();
+ });
+
+ describe('success', () => {
+ it('dispatches requestArtifacts and receiveArtifactsSuccess ', done => {
+ mock.onGet(`${TEST_HOST}/endpoint.json`).replyOnce(200, [
+ {
+ text: 'result.txt',
+ url: 'asda',
+ job_name: 'generate-artifact',
+ job_path: 'asda',
+ },
+ ]);
+
+ testAction(
+ fetchArtifacts,
+ null,
+ mockedState,
+ [],
+ [
+ {
+ type: 'requestArtifacts',
+ },
+ {
+ payload: {
+ data: [
+ {
+ text: 'result.txt',
+ url: 'asda',
+ job_name: 'generate-artifact',
+ job_path: 'asda',
+ },
+ ],
+ status: 200,
+ },
+ type: 'receiveArtifactsSuccess',
+ },
+ ],
+ done,
+ );
+ });
+ });
+
+ describe('error', () => {
+ beforeEach(() => {
+ mock.onGet(`${TEST_HOST}/endpoint.json`).reply(500);
+ });
+
+ it('dispatches requestArtifacts and receiveArtifactsError ', done => {
+ testAction(
+ fetchArtifacts,
+ null,
+ mockedState,
+ [],
+ [
+ {
+ type: 'requestArtifacts',
+ },
+ {
+ type: 'receiveArtifactsError',
+ },
+ ],
+ done,
+ );
+ });
+ });
+ });
+
+ describe('receiveArtifactsSuccess', () => {
+ it('should commit RECEIVE_ARTIFACTS_SUCCESS mutation with 200', done => {
+ testAction(
+ receiveArtifactsSuccess,
+ { data: { summary: {} }, status: 200 },
+ mockedState,
+ [{ type: types.RECEIVE_ARTIFACTS_SUCCESS, payload: { summary: {} } }],
+ [],
+ done,
+ );
+ });
+
+ it('should not commit RECEIVE_ARTIFACTS_SUCCESS mutation with 204', done => {
+ testAction(
+ receiveArtifactsSuccess,
+ { data: { summary: {} }, status: 204 },
+ mockedState,
+ [],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('receiveArtifactsError', () => {
+ it('should commit RECEIVE_ARTIFACTS_ERROR mutation', done => {
+ testAction(
+ receiveArtifactsError,
+ null,
+ mockedState,
+ [{ type: types.RECEIVE_ARTIFACTS_ERROR }],
+ [],
+ done,
+ );
+ });
+ });
+});
diff --git a/spec/javascripts/vue_shared/components/clipboard_button_spec.js b/spec/javascripts/vue_shared/components/clipboard_button_spec.js
index fd17349d48f..29a76574b89 100644
--- a/spec/javascripts/vue_shared/components/clipboard_button_spec.js
+++ b/spec/javascripts/vue_shared/components/clipboard_button_spec.js
@@ -14,7 +14,7 @@ describe('clipboard button', () => {
beforeEach(() => {
vm = mountComponent(Component, {
text: 'copy me',
- title: 'Copy this value into Clipboard!',
+ title: 'Copy this value',
cssClass: 'btn-danger',
});
});
@@ -26,7 +26,7 @@ describe('clipboard button', () => {
});
it('should have a tooltip with default values', () => {
- expect(vm.$el.getAttribute('data-original-title')).toEqual('Copy this value into Clipboard!');
+ expect(vm.$el.getAttribute('data-original-title')).toEqual('Copy this value');
});
it('should render provided classname', () => {
@@ -39,7 +39,7 @@ describe('clipboard button', () => {
vm = mountComponent(Component, {
text: 'copy me',
gfm: '`path/to/file`',
- title: 'Copy this value into Clipboard!',
+ title: 'Copy this value',
cssClass: 'btn-danger',
});
diff --git a/spec/javascripts/vue_shared/components/deprecated_modal_2_spec.js b/spec/javascripts/vue_shared/components/deprecated_modal_2_spec.js
new file mode 100644
index 00000000000..64fb984d9fc
--- /dev/null
+++ b/spec/javascripts/vue_shared/components/deprecated_modal_2_spec.js
@@ -0,0 +1,261 @@
+import $ from 'jquery';
+import Vue from 'vue';
+import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue';
+import mountComponent from 'spec/helpers/vue_mount_component_helper';
+
+const modalComponent = Vue.extend(DeprecatedModal2);
+
+describe('DeprecatedModal2', () => {
+ let vm;
+
+ afterEach(() => {
+ vm.$destroy();
+ });
+
+ describe('props', () => {
+ describe('with id', () => {
+ const props = {
+ id: 'my-modal',
+ };
+
+ beforeEach(() => {
+ vm = mountComponent(modalComponent, props);
+ });
+
+ it('assigns the id to the modal', () => {
+ expect(vm.$el.id).toBe(props.id);
+ });
+ });
+
+ describe('without id', () => {
+ beforeEach(() => {
+ vm = mountComponent(modalComponent, {});
+ });
+
+ it('does not add an id attribute to the modal', () => {
+ expect(vm.$el.hasAttribute('id')).toBe(false);
+ });
+ });
+
+ describe('with headerTitleText', () => {
+ const props = {
+ headerTitleText: 'my title text',
+ };
+
+ beforeEach(() => {
+ vm = mountComponent(modalComponent, props);
+ });
+
+ it('sets the modal title', () => {
+ const modalTitle = vm.$el.querySelector('.modal-title');
+
+ expect(modalTitle.innerHTML.trim()).toBe(props.headerTitleText);
+ });
+ });
+
+ describe('with footerPrimaryButtonVariant', () => {
+ const props = {
+ footerPrimaryButtonVariant: 'danger',
+ };
+
+ beforeEach(() => {
+ vm = mountComponent(modalComponent, props);
+ });
+
+ it('sets the primary button class', () => {
+ const primaryButton = vm.$el.querySelector('.modal-footer button:last-of-type');
+
+ expect(primaryButton).toHaveClass(`btn-${props.footerPrimaryButtonVariant}`);
+ });
+ });
+
+ describe('with footerPrimaryButtonText', () => {
+ const props = {
+ footerPrimaryButtonText: 'my button text',
+ };
+
+ beforeEach(() => {
+ vm = mountComponent(modalComponent, props);
+ });
+
+ it('sets the primary button text', () => {
+ const primaryButton = vm.$el.querySelector('.modal-footer button:last-of-type');
+
+ expect(primaryButton.innerHTML.trim()).toBe(props.footerPrimaryButtonText);
+ });
+ });
+ });
+
+ it('works with data-toggle="modal"', done => {
+ setFixtures(`
+ <button id="modal-button" data-toggle="modal" data-target="#my-modal"></button>
+ <div id="modal-container"></div>
+ `);
+
+ const modalContainer = document.getElementById('modal-container');
+ const modalButton = document.getElementById('modal-button');
+ vm = mountComponent(
+ modalComponent,
+ {
+ id: 'my-modal',
+ },
+ modalContainer,
+ );
+ $(vm.$el).on('shown.bs.modal', () => done());
+
+ modalButton.click();
+ });
+
+ describe('methods', () => {
+ const dummyEvent = 'not really an event';
+
+ beforeEach(() => {
+ vm = mountComponent(modalComponent, {});
+ spyOn(vm, '$emit');
+ });
+
+ describe('emitCancel', () => {
+ it('emits a cancel event', () => {
+ vm.emitCancel(dummyEvent);
+
+ expect(vm.$emit).toHaveBeenCalledWith('cancel', dummyEvent);
+ });
+ });
+
+ describe('emitSubmit', () => {
+ it('emits a submit event', () => {
+ vm.emitSubmit(dummyEvent);
+
+ expect(vm.$emit).toHaveBeenCalledWith('submit', dummyEvent);
+ });
+ });
+
+ describe('opened', () => {
+ it('emits a open event', () => {
+ vm.opened();
+
+ expect(vm.$emit).toHaveBeenCalledWith('open');
+ });
+ });
+
+ describe('closed', () => {
+ it('emits a closed event', () => {
+ vm.closed();
+
+ expect(vm.$emit).toHaveBeenCalledWith('closed');
+ });
+ });
+ });
+
+ describe('slots', () => {
+ const slotContent = 'this should go into the slot';
+ const modalWithSlot = slotName => {
+ let template;
+ if (slotName) {
+ template = `
+ <deprecated-modal-2>
+ <template slot="${slotName}">${slotContent}</template>
+ </deprecated-modal-2>
+ `;
+ } else {
+ template = `<deprecated-modal-2>${slotContent}</deprecated-modal-2>`;
+ }
+
+ return Vue.extend({
+ components: {
+ DeprecatedModal2,
+ },
+ template,
+ });
+ };
+
+ describe('default slot', () => {
+ beforeEach(() => {
+ vm = mountComponent(modalWithSlot());
+ });
+
+ it('sets the modal body', () => {
+ const modalBody = vm.$el.querySelector('.modal-body');
+
+ expect(modalBody.innerHTML).toBe(slotContent);
+ });
+ });
+
+ describe('header slot', () => {
+ beforeEach(() => {
+ vm = mountComponent(modalWithSlot('header'));
+ });
+
+ it('sets the modal header', () => {
+ const modalHeader = vm.$el.querySelector('.modal-header');
+
+ expect(modalHeader.innerHTML).toBe(slotContent);
+ });
+ });
+
+ describe('title slot', () => {
+ beforeEach(() => {
+ vm = mountComponent(modalWithSlot('title'));
+ });
+
+ it('sets the modal title', () => {
+ const modalTitle = vm.$el.querySelector('.modal-title');
+
+ expect(modalTitle.innerHTML).toBe(slotContent);
+ });
+ });
+
+ describe('footer slot', () => {
+ beforeEach(() => {
+ vm = mountComponent(modalWithSlot('footer'));
+ });
+
+ it('sets the modal footer', () => {
+ const modalFooter = vm.$el.querySelector('.modal-footer');
+
+ expect(modalFooter.innerHTML).toBe(slotContent);
+ });
+ });
+ });
+
+ describe('handling sizes', () => {
+ it('should render modal-sm', () => {
+ vm = mountComponent(modalComponent, {
+ modalSize: 'sm',
+ });
+
+ expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-sm')).toEqual(true);
+ });
+
+ it('should render modal-lg', () => {
+ vm = mountComponent(modalComponent, {
+ modalSize: 'lg',
+ });
+
+ expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-lg')).toEqual(true);
+ });
+
+ it('should render modal-xl', () => {
+ vm = mountComponent(modalComponent, {
+ modalSize: 'xl',
+ });
+
+ expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-xl')).toEqual(true);
+ });
+
+ it('should not add modal size classes when md size is passed', () => {
+ vm = mountComponent(modalComponent, {
+ modalSize: 'md',
+ });
+
+ expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-md')).toEqual(false);
+ });
+
+ it('should not add modal size classes by default', () => {
+ vm = mountComponent(modalComponent, {});
+
+ expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-sm')).toEqual(false);
+ expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-lg')).toEqual(false);
+ });
+ });
+});
diff --git a/spec/javascripts/vue_shared/components/file_row_spec.js b/spec/javascripts/vue_shared/components/file_row_spec.js
index 6abcac5c0ff..7da69e3fa84 100644
--- a/spec/javascripts/vue_shared/components/file_row_spec.js
+++ b/spec/javascripts/vue_shared/components/file_row_spec.js
@@ -90,19 +90,6 @@ describe('File row component', () => {
expect(vm.$el.querySelector('.js-file-row-header')).not.toBe(null);
});
- it('is not rendered for `moved` entries in subfolders', () => {
- createComponent({
- file: {
- path: 't5',
- moved: true,
- tree: [],
- },
- level: 2,
- });
-
- expect(vm.$el.nodeType).not.toEqual(1);
- });
-
describe('new dropdown', () => {
beforeEach(() => {
createComponent({
diff --git a/spec/javascripts/vue_shared/components/gl_modal_spec.js b/spec/javascripts/vue_shared/components/gl_modal_spec.js
deleted file mode 100644
index 19af8b5d2f7..00000000000
--- a/spec/javascripts/vue_shared/components/gl_modal_spec.js
+++ /dev/null
@@ -1,261 +0,0 @@
-import $ from 'jquery';
-import Vue from 'vue';
-import GlModal from '~/vue_shared/components/gl_modal.vue';
-import mountComponent from 'spec/helpers/vue_mount_component_helper';
-
-const modalComponent = Vue.extend(GlModal);
-
-describe('GlModal', () => {
- let vm;
-
- afterEach(() => {
- vm.$destroy();
- });
-
- describe('props', () => {
- describe('with id', () => {
- const props = {
- id: 'my-modal',
- };
-
- beforeEach(() => {
- vm = mountComponent(modalComponent, props);
- });
-
- it('assigns the id to the modal', () => {
- expect(vm.$el.id).toBe(props.id);
- });
- });
-
- describe('without id', () => {
- beforeEach(() => {
- vm = mountComponent(modalComponent, {});
- });
-
- it('does not add an id attribute to the modal', () => {
- expect(vm.$el.hasAttribute('id')).toBe(false);
- });
- });
-
- describe('with headerTitleText', () => {
- const props = {
- headerTitleText: 'my title text',
- };
-
- beforeEach(() => {
- vm = mountComponent(modalComponent, props);
- });
-
- it('sets the modal title', () => {
- const modalTitle = vm.$el.querySelector('.modal-title');
-
- expect(modalTitle.innerHTML.trim()).toBe(props.headerTitleText);
- });
- });
-
- describe('with footerPrimaryButtonVariant', () => {
- const props = {
- footerPrimaryButtonVariant: 'danger',
- };
-
- beforeEach(() => {
- vm = mountComponent(modalComponent, props);
- });
-
- it('sets the primary button class', () => {
- const primaryButton = vm.$el.querySelector('.modal-footer button:last-of-type');
-
- expect(primaryButton).toHaveClass(`btn-${props.footerPrimaryButtonVariant}`);
- });
- });
-
- describe('with footerPrimaryButtonText', () => {
- const props = {
- footerPrimaryButtonText: 'my button text',
- };
-
- beforeEach(() => {
- vm = mountComponent(modalComponent, props);
- });
-
- it('sets the primary button text', () => {
- const primaryButton = vm.$el.querySelector('.modal-footer button:last-of-type');
-
- expect(primaryButton.innerHTML.trim()).toBe(props.footerPrimaryButtonText);
- });
- });
- });
-
- it('works with data-toggle="modal"', done => {
- setFixtures(`
- <button id="modal-button" data-toggle="modal" data-target="#my-modal"></button>
- <div id="modal-container"></div>
- `);
-
- const modalContainer = document.getElementById('modal-container');
- const modalButton = document.getElementById('modal-button');
- vm = mountComponent(
- modalComponent,
- {
- id: 'my-modal',
- },
- modalContainer,
- );
- $(vm.$el).on('shown.bs.modal', () => done());
-
- modalButton.click();
- });
-
- describe('methods', () => {
- const dummyEvent = 'not really an event';
-
- beforeEach(() => {
- vm = mountComponent(modalComponent, {});
- spyOn(vm, '$emit');
- });
-
- describe('emitCancel', () => {
- it('emits a cancel event', () => {
- vm.emitCancel(dummyEvent);
-
- expect(vm.$emit).toHaveBeenCalledWith('cancel', dummyEvent);
- });
- });
-
- describe('emitSubmit', () => {
- it('emits a submit event', () => {
- vm.emitSubmit(dummyEvent);
-
- expect(vm.$emit).toHaveBeenCalledWith('submit', dummyEvent);
- });
- });
-
- describe('opened', () => {
- it('emits a open event', () => {
- vm.opened();
-
- expect(vm.$emit).toHaveBeenCalledWith('open');
- });
- });
-
- describe('closed', () => {
- it('emits a closed event', () => {
- vm.closed();
-
- expect(vm.$emit).toHaveBeenCalledWith('closed');
- });
- });
- });
-
- describe('slots', () => {
- const slotContent = 'this should go into the slot';
- const modalWithSlot = slotName => {
- let template;
- if (slotName) {
- template = `
- <gl-modal>
- <template slot="${slotName}">${slotContent}</template>
- </gl-modal>
- `;
- } else {
- template = `<gl-modal>${slotContent}</gl-modal>`;
- }
-
- return Vue.extend({
- components: {
- GlModal,
- },
- template,
- });
- };
-
- describe('default slot', () => {
- beforeEach(() => {
- vm = mountComponent(modalWithSlot());
- });
-
- it('sets the modal body', () => {
- const modalBody = vm.$el.querySelector('.modal-body');
-
- expect(modalBody.innerHTML).toBe(slotContent);
- });
- });
-
- describe('header slot', () => {
- beforeEach(() => {
- vm = mountComponent(modalWithSlot('header'));
- });
-
- it('sets the modal header', () => {
- const modalHeader = vm.$el.querySelector('.modal-header');
-
- expect(modalHeader.innerHTML).toBe(slotContent);
- });
- });
-
- describe('title slot', () => {
- beforeEach(() => {
- vm = mountComponent(modalWithSlot('title'));
- });
-
- it('sets the modal title', () => {
- const modalTitle = vm.$el.querySelector('.modal-title');
-
- expect(modalTitle.innerHTML).toBe(slotContent);
- });
- });
-
- describe('footer slot', () => {
- beforeEach(() => {
- vm = mountComponent(modalWithSlot('footer'));
- });
-
- it('sets the modal footer', () => {
- const modalFooter = vm.$el.querySelector('.modal-footer');
-
- expect(modalFooter.innerHTML).toBe(slotContent);
- });
- });
- });
-
- describe('handling sizes', () => {
- it('should render modal-sm', () => {
- vm = mountComponent(modalComponent, {
- modalSize: 'sm',
- });
-
- expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-sm')).toEqual(true);
- });
-
- it('should render modal-lg', () => {
- vm = mountComponent(modalComponent, {
- modalSize: 'lg',
- });
-
- expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-lg')).toEqual(true);
- });
-
- it('should render modal-xl', () => {
- vm = mountComponent(modalComponent, {
- modalSize: 'xl',
- });
-
- expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-xl')).toEqual(true);
- });
-
- it('should not add modal size classes when md size is passed', () => {
- vm = mountComponent(modalComponent, {
- modalSize: 'md',
- });
-
- expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-md')).toEqual(false);
- });
-
- it('should not add modal size classes by default', () => {
- vm = mountComponent(modalComponent, {});
-
- expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-sm')).toEqual(false);
- expect(vm.$el.querySelector('.modal-dialog').classList.contains('modal-lg')).toEqual(false);
- });
- });
-});
diff --git a/spec/javascripts/vue_shared/components/icon_spec.js b/spec/javascripts/vue_shared/components/icon_spec.js
index 45eef2ad737..7390798afa8 100644
--- a/spec/javascripts/vue_shared/components/icon_spec.js
+++ b/spec/javascripts/vue_shared/components/icon_spec.js
@@ -12,8 +12,6 @@ describe('Sprite Icon Component', function() {
icon = mountComponent(IconComponent, {
name: 'commit',
size: 32,
- cssClasses: 'extraclasses',
- tabIndex: '0',
});
});
@@ -47,10 +45,8 @@ describe('Sprite Icon Component', function() {
it('should properly render img css', function() {
const { classList } = icon.$el;
const containsSizeClass = classList.contains('s32');
- const containsCustomClass = classList.contains('extraclasses');
expect(containsSizeClass).toBe(true);
- expect(containsCustomClass).toBe(true);
});
it('`name` validator should return false for non existing icons', () => {
@@ -60,9 +56,5 @@ describe('Sprite Icon Component', function() {
it('`name` validator should return false for existing icons', () => {
expect(Icon.props.name.validator('commit')).toBe(true);
});
-
- it('should contain `tabindex` attribute on svg element when `tabIndex` prop is defined', () => {
- expect(icon.$el.getAttribute('tabindex')).toBe('0');
- });
});
});
diff --git a/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js b/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js
index f8271866ca1..9c2deca585b 100644
--- a/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js
+++ b/spec/javascripts/vue_shared/components/project_selector/project_selector_spec.js
@@ -4,9 +4,11 @@ import ProjectSelector from '~/vue_shared/components/project_selector/project_se
import ProjectListItem from '~/vue_shared/components/project_selector/project_list_item.vue';
import { GlSearchBoxByType } from '@gitlab/ui';
-import { mount } from '@vue/test-utils';
+import { mount, createLocalVue } from '@vue/test-utils';
import { trimText } from 'spec/helpers/text_helper';
+const localVue = createLocalVue();
+
describe('ProjectSelector component', () => {
let wrapper;
let vm;
@@ -22,6 +24,7 @@ describe('ProjectSelector component', () => {
jasmine.clock().install();
wrapper = mount(Vue.extend(ProjectSelector), {
+ localVue,
propsData: {
projectSearchResults: searchResults,
selectedProjects: selected,
diff --git a/spec/javascripts/zen_mode_spec.js b/spec/javascripts/zen_mode_spec.js
index 8f662c71c7a..5dee11b3810 100644
--- a/spec/javascripts/zen_mode_spec.js
+++ b/spec/javascripts/zen_mode_spec.js
@@ -2,6 +2,7 @@ import $ from 'jquery';
import Dropzone from 'dropzone';
import Mousetrap from 'mousetrap';
import ZenMode from '~/zen_mode';
+import initNotes from '~/init_notes';
describe('ZenMode', () => {
let zen;
@@ -28,6 +29,7 @@ describe('ZenMode', () => {
beforeEach(() => {
loadFixtures(fixtureName);
+ initNotes();
dropzoneForElementSpy = spyOn(Dropzone, 'forElement').and.callFake(() => ({
enable: () => true,
diff --git a/spec/lib/api/helpers/graphql_helpers_spec.rb b/spec/lib/api/helpers/graphql_helpers_spec.rb
new file mode 100644
index 00000000000..c775ba6d5e8
--- /dev/null
+++ b/spec/lib/api/helpers/graphql_helpers_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe API::Helpers::GraphqlHelpers do
+ describe 'run_graphql!' do
+ let(:query) { '{ metadata { version } }' }
+
+ let(:graphql_helper) do
+ Class.new do
+ include API::Helpers::GraphqlHelpers
+ end.new
+ end
+
+ context 'when transform function is provided' do
+ let(:result) { { 'data' => { 'metadata' => { 'version' => '1.0.0' } } } }
+
+ before do
+ allow(GitlabSchema).to receive(:execute).and_return(result)
+ end
+
+ it 'returns the expected result' do
+ expect(
+ graphql_helper.run_graphql!(
+ query: query,
+ transform: ->(result) { result.dig('data', 'metadata') }
+ )
+ ).to eq({ 'version' => '1.0.0' })
+ end
+ end
+
+ context 'when a transform function is not provided' do
+ let(:result) { double('result') }
+
+ before do
+ allow(GitlabSchema).to receive(:execute).and_return(result)
+ end
+
+ it 'returns the expected result' do
+ expect(graphql_helper.run_graphql!(query: query)).to eq(result)
+ end
+ end
+ end
+end
diff --git a/spec/lib/backup/files_spec.rb b/spec/lib/backup/files_spec.rb
index e903eada62d..b75f3bafeef 100644
--- a/spec/lib/backup/files_spec.rb
+++ b/spec/lib/backup/files_spec.rb
@@ -24,6 +24,7 @@ describe Backup::Files do
describe '#restore' do
subject { described_class.new('registry', '/var/gitlab-registry') }
+
let(:timestamp) { Time.utc(2017, 3, 22) }
around do |example|
diff --git a/spec/lib/backup/manager_spec.rb b/spec/lib/backup/manager_spec.rb
index fee7ffc60ee..35594cd2fb8 100644
--- a/spec/lib/backup/manager_spec.rb
+++ b/spec/lib/backup/manager_spec.rb
@@ -21,6 +21,49 @@ describe Backup::Manager do
$progress = @old_progress # rubocop:disable Style/GlobalVars
end
+ describe '#pack' do
+ let(:backup_contents) { ['backup_contents'] }
+ let(:tar_system_options) { { out: [tar_file, 'w', Gitlab.config.backup.archive_permissions] } }
+ let(:tar_cmdline) { ['tar', '-cf', '-', *backup_contents, tar_system_options] }
+
+ let(:backup_information) do
+ {
+ backup_created_at: Time.zone.parse('2019-01-01'),
+ gitlab_version: '12.3'
+ }
+ end
+
+ before do
+ allow(ActiveRecord::Base.connection).to receive(:reconnect!)
+ allow(Kernel).to receive(:system).and_return(true)
+
+ allow(subject).to receive(:backup_contents).and_return(backup_contents)
+ allow(subject).to receive(:backup_information).and_return(backup_information)
+ allow(subject).to receive(:upload)
+ end
+
+ context 'when BACKUP is not set' do
+ let(:tar_file) { '1546300800_2019_01_01_12.3_gitlab_backup.tar' }
+
+ it 'uses the default tar file name' do
+ subject.pack
+
+ expect(Kernel).to have_received(:system).with(*tar_cmdline)
+ end
+ end
+
+ context 'when BACKUP is set' do
+ let(:tar_file) { 'custom_gitlab_backup.tar' }
+
+ it 'uses the given value as tar file name' do
+ stub_env('BACKUP', '/ignored/path/custom')
+ subject.pack
+
+ expect(Kernel).to have_received(:system).with(*tar_cmdline)
+ end
+ end
+ end
+
describe '#remove_old' do
let(:files) do
[
@@ -238,7 +281,7 @@ describe Backup::Manager do
allow(Kernel).to receive(:system).and_return(true)
allow(YAML).to receive(:load_file).and_return(gitlab_version: Gitlab::VERSION)
- stub_env('BACKUP', '1451606400_2016_01_01_1.2.3')
+ stub_env('BACKUP', '/ignored/path/1451606400_2016_01_01_1.2.3')
end
it 'unpacks the file' do
diff --git a/spec/lib/backup/repository_spec.rb b/spec/lib/backup/repository_spec.rb
index e1d46c25338..bf827fb3914 100644
--- a/spec/lib/backup/repository_spec.rb
+++ b/spec/lib/backup/repository_spec.rb
@@ -10,7 +10,6 @@ describe Backup::Repository do
before do
allow(progress).to receive(:puts)
allow(progress).to receive(:print)
- allow(FileUtils).to receive(:mkdir_p).and_return(true)
allow(FileUtils).to receive(:mv).and_return(true)
allow_any_instance_of(described_class).to receive(:progress).and_return(progress)
@@ -84,30 +83,6 @@ describe Backup::Repository do
end
end
- describe '#prepare_directories', :seed_helper do
- before do
- allow(FileUtils).to receive(:mkdir_p).and_call_original
- allow(FileUtils).to receive(:mv).and_call_original
- end
-
- after(:all) do
- ensure_seeds
- end
-
- it' removes all repositories' do
- # Sanity check: there should be something for us to delete
- expect(list_repositories).to include(File.join(SEED_STORAGE_PATH, TEST_REPO_PATH))
-
- subject.prepare_directories
-
- expect(list_repositories).to be_empty
- end
-
- def list_repositories
- Dir[File.join(SEED_STORAGE_PATH, '*.git')]
- end
- end
-
describe '#empty_repo?' do
context 'for a wiki' do
let(:wiki) { create(:project_wiki) }
diff --git a/spec/lib/banzai/filter/audio_link_filter_spec.rb b/spec/lib/banzai/filter/audio_link_filter_spec.rb
new file mode 100644
index 00000000000..a8459137169
--- /dev/null
+++ b/spec/lib/banzai/filter/audio_link_filter_spec.rb
@@ -0,0 +1,120 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Banzai::Filter::AudioLinkFilter do
+ def filter(doc, contexts = {})
+ contexts.reverse_merge!({
+ project: project
+ })
+
+ described_class.call(doc, contexts)
+ end
+
+ def link_to_image(path)
+ return '<img/>' if path.nil?
+
+ %(<img src="#{path}"/>)
+ end
+
+ let(:project) { create(:project, :repository) }
+
+ shared_examples 'an audio element' do
+ let(:image) { link_to_image(src) }
+
+ it 'replaces the image tag with an audio tag' do
+ container = filter(image).children.first
+
+ expect(container.name).to eq 'div'
+ expect(container['class']).to eq 'audio-container'
+
+ audio, paragraph = container.children
+
+ expect(audio.name).to eq 'audio'
+ expect(audio['src']).to eq src
+
+ expect(paragraph.name).to eq 'p'
+
+ link = paragraph.children.first
+
+ expect(link.name).to eq 'a'
+ expect(link['href']).to eq src
+ expect(link['target']).to eq '_blank'
+ end
+ end
+
+ shared_examples 'an unchanged element' do |ext|
+ it 'leaves the document unchanged' do
+ element = filter(link_to_image(src)).children.first
+
+ expect(element.name).to eq 'img'
+ expect(element['src']).to eq src
+ end
+ end
+
+ context 'when the element src has an audio extension' do
+ Gitlab::FileTypeDetection::SAFE_AUDIO_EXT.each do |ext|
+ it_behaves_like 'an audio element' do
+ let(:src) { "/path/audio.#{ext}" }
+ end
+
+ it_behaves_like 'an audio element' do
+ let(:src) { "/path/audio.#{ext.upcase}" }
+ end
+ end
+ end
+
+ context 'when the element has no src attribute' do
+ let(:src) { nil }
+
+ it_behaves_like 'an unchanged element'
+ end
+
+ context 'when the element src is an image' do
+ let(:src) { '/path/my_image.jpg' }
+
+ it_behaves_like 'an unchanged element'
+ end
+
+ context 'when the element src has an invalid file extension' do
+ let(:src) { '/path/my_audio.somewav' }
+
+ it_behaves_like 'an unchanged element'
+ end
+
+ context 'when data-canonical-src is empty' do
+ let(:image) { %(<img src="#{src}" data-canonical-src=""/>) }
+
+ context 'and src is audio' do
+ let(:src) { '/path/audio.wav' }
+
+ it_behaves_like 'an audio element'
+ end
+
+ context 'and src is an image' do
+ let(:src) { '/path/my_image.jpg' }
+
+ it_behaves_like 'an unchanged element'
+ end
+ end
+
+ context 'when data-canonical-src is set' do
+ it 'uses the correct src' do
+ proxy_src = 'https://assets.example.com/6d8b63'
+ canonical_src = 'http://example.com/test.wav'
+ image = %(<img src="#{proxy_src}" data-canonical-src="#{canonical_src}"/>)
+ container = filter(image).children.first
+
+ expect(container['class']).to eq 'audio-container'
+
+ audio, paragraph = container.children
+
+ expect(audio['src']).to eq proxy_src
+ expect(audio['data-canonical-src']).to eq canonical_src
+
+ link = paragraph.children.first
+
+ expect(link['href']).to eq proxy_src
+ end
+ end
+end
diff --git a/spec/lib/banzai/filter/project_reference_filter_spec.rb b/spec/lib/banzai/filter/project_reference_filter_spec.rb
index 927d226c400..d0b4542d503 100644
--- a/spec/lib/banzai/filter/project_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/project_reference_filter_spec.rb
@@ -15,6 +15,7 @@ describe Banzai::Filter::ProjectReferenceFilter do
let(:project) { create(:project, :public) }
subject { project }
+
let(:subject_name) { "project" }
let(:reference) { get_reference(project) }
diff --git a/spec/lib/banzai/filter/relative_link_filter_spec.rb b/spec/lib/banzai/filter/relative_link_filter_spec.rb
index f8b3748c663..046c346a7ac 100644
--- a/spec/lib/banzai/filter/relative_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/relative_link_filter_spec.rb
@@ -3,6 +3,9 @@
require 'spec_helper'
describe Banzai::Filter::RelativeLinkFilter do
+ include GitHelpers
+ include RepoHelpers
+
def filter(doc, contexts = {})
contexts.reverse_merge!({
commit: commit,
@@ -26,6 +29,10 @@ describe Banzai::Filter::RelativeLinkFilter do
%(<video src="#{path}"></video>)
end
+ def audio(path)
+ %(<audio src="#{path}"></audio>)
+ end
+
def link(path)
%(<a href="#{path}">#{path}</a>)
end
@@ -34,6 +41,12 @@ describe Banzai::Filter::RelativeLinkFilter do
%(<div>#{element}</div>)
end
+ def allow_gitaly_n_plus_1
+ Gitlab::GitalyClient.allow_n_plus_1_calls do
+ yield
+ end
+ end
+
let(:project) { create(:project, :repository, :public) }
let(:user) { create(:user) }
let(:group) { nil }
@@ -44,6 +57,19 @@ describe Banzai::Filter::RelativeLinkFilter do
let(:requested_path) { '/' }
let(:only_path) { true }
+ it 'does not trigger a gitaly n+1', :request_store do
+ raw_doc = ""
+
+ allow_gitaly_n_plus_1 do
+ 30.times do |i|
+ create_file_in_repo(project, ref, ref, "new_file_#{i}", "x" )
+ raw_doc += link("new_file_#{i}")
+ end
+ end
+
+ expect { filter(raw_doc) }.to change { Gitlab::GitalyClient.get_request_count }.by(2)
+ end
+
shared_examples :preserve_unchanged do
it 'does not modify any relative URL in anchor' do
doc = filter(link('README.md'))
@@ -60,6 +86,12 @@ describe Banzai::Filter::RelativeLinkFilter do
expect(doc.at_css('video')['src']).to eq 'files/videos/intro.mp4'
end
+
+ it 'does not modify any relative URL in audio' do
+ doc = filter(audio('files/audio/sample.wav'), commit: project.commit('audio'), ref: 'audio')
+
+ expect(doc.at_css('audio')['src']).to eq 'files/audio/sample.wav'
+ end
end
context 'with a project_wiki' do
@@ -196,6 +228,13 @@ describe Banzai::Filter::RelativeLinkFilter do
.to eq "/#{project_path}/raw/video/files/videos/intro.mp4"
end
+ it 'rebuilds relative URL for audio in the repo' do
+ doc = filter(audio('files/audio/sample.wav'), commit: project.commit('audio'), ref: 'audio')
+
+ expect(doc.at_css('audio')['src'])
+ .to eq "/#{project_path}/raw/audio/files/audio/sample.wav"
+ end
+
it 'does not modify relative URL with an anchor only' do
doc = filter(link('#section-1'))
expect(doc.at_css('a')['href']).to eq '#section-1'
@@ -206,6 +245,12 @@ describe Banzai::Filter::RelativeLinkFilter do
expect(doc.at_css('a')['href']).to eq 'http://example.com'
end
+ it 'does not call gitaly' do
+ filter(link('http://example.com'))
+
+ expect(described_class).not_to receive(:get_blob_types)
+ end
+
it 'supports Unicode filenames' do
path = 'files/images/한글.png'
escaped = Addressable::URI.escape(path)
@@ -244,7 +289,8 @@ describe Banzai::Filter::RelativeLinkFilter do
end
context 'when ref name contains special chars' do
- let(:ref) {'mark#\'@],+;-._/#@!$&()+down'}
+ let(:ref) { 'mark#\'@],+;-._/#@!$&()+down' }
+ let(:path) { 'files/images/logo-black.png' }
it 'correctly escapes the ref' do
# Addressable won't escape the '#', so we do this manually
@@ -252,8 +298,9 @@ describe Banzai::Filter::RelativeLinkFilter do
# Stub this method so the branch doesn't actually need to be in the repo
allow_any_instance_of(described_class).to receive(:uri_type).and_return(:raw)
+ allow_any_instance_of(described_class).to receive(:get_uri_types).and_return({ path: :tree })
- doc = filter(link('files/images/logo-black.png'))
+ doc = filter(link(path))
expect(doc.at_css('a')['href'])
.to eq "/#{project_path}/raw/#{ref_escaped}/files/images/logo-black.png"
diff --git a/spec/lib/banzai/filter/table_of_contents_filter_spec.rb b/spec/lib/banzai/filter/table_of_contents_filter_spec.rb
index 5ca3c722e3e..05ef77c811a 100644
--- a/spec/lib/banzai/filter/table_of_contents_filter_spec.rb
+++ b/spec/lib/banzai/filter/table_of_contents_filter_spec.rb
@@ -82,7 +82,9 @@ describe Banzai::Filter::TableOfContentsFilter do
it 'supports Unicode' do
doc = filter(header(1, '한글'))
expect(doc.css('h1 a').first.attr('id')).to eq 'user-content-한글'
- expect(doc.css('h1 a').first.attr('href')).to eq '#한글'
+ # check that we encode the href to avoid issues with the
+ # ExternalLinkFilter (see https://gitlab.com/gitlab-org/gitlab/issues/26210)
+ expect(doc.css('h1 a').first.attr('href')).to eq "##{CGI.escape('한글')}"
end
end
end
diff --git a/spec/lib/banzai/filter/user_reference_filter_spec.rb b/spec/lib/banzai/filter/user_reference_filter_spec.rb
index 6bc87d245f5..a09aeb7d7f6 100644
--- a/spec/lib/banzai/filter/user_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/user_reference_filter_spec.rb
@@ -12,6 +12,7 @@ describe Banzai::Filter::UserReferenceFilter do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
subject { user }
+
let(:subject_name) { "user" }
let(:reference) { get_reference(user) }
diff --git a/spec/lib/banzai/filter/video_link_filter_spec.rb b/spec/lib/banzai/filter/video_link_filter_spec.rb
index cd932f502f3..a395b021f32 100644
--- a/spec/lib/banzai/filter/video_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/video_link_filter_spec.rb
@@ -12,52 +12,99 @@ describe Banzai::Filter::VideoLinkFilter do
end
def link_to_image(path)
- %(<img src="#{path}" />)
+ return '<img/>' if path.nil?
+
+ %(<img src="#{path}"/>)
end
let(:project) { create(:project, :repository) }
- context 'when the element src has a video extension' do
- UploaderHelper::VIDEO_EXT.each do |ext|
- it "replaces the image tag 'path/video.#{ext}' with a video tag" do
- container = filter(link_to_image("/path/video.#{ext}")).children.first
+ shared_examples 'a video element' do
+ let(:image) { link_to_image(src) }
- expect(container.name).to eq 'div'
- expect(container['class']).to eq 'video-container'
+ it 'replaces the image tag with a video tag' do
+ container = filter(image).children.first
- video, paragraph = container.children
+ expect(container.name).to eq 'div'
+ expect(container['class']).to eq 'video-container'
- expect(video.name).to eq 'video'
- expect(video['src']).to eq "/path/video.#{ext}"
+ video, paragraph = container.children
- expect(paragraph.name).to eq 'p'
+ expect(video.name).to eq 'video'
+ expect(video['src']).to eq src
+ expect(video['width']).to eq "100%"
- link = paragraph.children.first
+ expect(paragraph.name).to eq 'p'
- expect(link.name).to eq 'a'
- expect(link['href']).to eq "/path/video.#{ext}"
- expect(link['target']).to eq '_blank'
- end
+ link = paragraph.children.first
+
+ expect(link.name).to eq 'a'
+ expect(link['href']).to eq src
+ expect(link['target']).to eq '_blank'
end
end
- context 'when the element src is an image' do
+ shared_examples 'an unchanged element' do |ext|
it 'leaves the document unchanged' do
- element = filter(link_to_image('/path/my_image.jpg')).children.first
+ element = filter(link_to_image(src)).children.first
expect(element.name).to eq 'img'
- expect(element['src']).to eq '/path/my_image.jpg'
+ expect(element['src']).to eq src
end
end
- context 'when asset proxy is enabled' do
- it 'uses the correct src' do
- stub_asset_proxy_setting(enabled: true)
+ context 'when the element src has a video extension' do
+ Gitlab::FileTypeDetection::SAFE_VIDEO_EXT.each do |ext|
+ it_behaves_like 'a video element' do
+ let(:src) { "/path/video.#{ext}" }
+ end
+
+ it_behaves_like 'a video element' do
+ let(:src) { "/path/video.#{ext.upcase}" }
+ end
+ end
+ end
+
+ context 'when the element has no src attribute' do
+ let(:src) { nil }
+
+ it_behaves_like 'an unchanged element'
+ end
+
+ context 'when the element src is an image' do
+ let(:src) { '/path/my_image.jpg' }
+
+ it_behaves_like 'an unchanged element'
+ end
+
+ context 'when the element src has an invalid file extension' do
+ let(:src) { '/path/my_video.somemp4' }
+
+ it_behaves_like 'an unchanged element'
+ end
+
+ context 'when data-canonical-src is empty' do
+ let(:image) { %(<img src="#{src}" data-canonical-src=""/>) }
+ context 'and src is a video' do
+ let(:src) { '/path/video.mp4' }
+
+ it_behaves_like 'a video element'
+ end
+
+ context 'and src is an image' do
+ let(:src) { '/path/my_image.jpg' }
+
+ it_behaves_like 'an unchanged element'
+ end
+ end
+
+ context 'when data-canonical-src is set' do
+ it 'uses the correct src' do
proxy_src = 'https://assets.example.com/6d8b63'
canonical_src = 'http://example.com/test.mp4'
- image = %(<img src="#{proxy_src}" data-canonical-src="#{canonical_src}" />)
- container = filter(image, asset_proxy_enabled: true).children.first
+ image = %(<img src="#{proxy_src}" data-canonical-src="#{canonical_src}"/>)
+ container = filter(image).children.first
expect(container['class']).to eq 'video-container'
diff --git a/spec/lib/banzai/filter/wiki_link_filter_spec.rb b/spec/lib/banzai/filter/wiki_link_filter_spec.rb
index d2d539a62fc..4587bd85939 100644
--- a/spec/lib/banzai/filter/wiki_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/wiki_link_filter_spec.rb
@@ -60,6 +60,14 @@ describe Banzai::Filter::WikiLinkFilter do
expect(filtered_link.attribute('src').value).to eq("#{wiki.wiki_base_path}/#{repository_upload_folder}/a.mp4")
end
end
+
+ context 'with "audio" html tag' do
+ it 'rewrites links' do
+ filtered_link = filter("<audio src='#{repository_upload_folder}/a.wav'></audio>", project_wiki: wiki).children[0]
+
+ expect(filtered_link.attribute('src').value).to eq("#{wiki.wiki_base_path}/#{repository_upload_folder}/a.wav")
+ end
+ end
end
describe "invalid links" do
diff --git a/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb b/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb
index 4a485fbc2bd..26f2b0b0acf 100644
--- a/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb
+++ b/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb
@@ -260,11 +260,11 @@ describe Banzai::Pipeline::WikiPipeline do
end
end
- describe 'videos' do
- let(:namespace) { create(:namespace, name: "wiki_link_ns") }
- let(:project) { create(:project, :public, name: "wiki_link_project", namespace: namespace) }
- let(:project_wiki) { ProjectWiki.new(project, double(:user)) }
- let(:page) { build(:wiki_page, wiki: project_wiki, page: OpenStruct.new(url_path: 'nested/twice/start-page')) }
+ describe 'videos and audio' do
+ let_it_be(:namespace) { create(:namespace, name: "wiki_link_ns") }
+ let_it_be(:project) { create(:project, :public, name: "wiki_link_project", namespace: namespace) }
+ let_it_be(:project_wiki) { ProjectWiki.new(project, double(:user)) }
+ let_it_be(:page) { build(:wiki_page, wiki: project_wiki, page: OpenStruct.new(url_path: 'nested/twice/start-page')) }
it 'generates video html structure' do
markdown = "![video_file](video_file_name.mp4)"
@@ -279,5 +279,19 @@ describe Banzai::Pipeline::WikiPipeline do
expect(output).to include('<video src="/wiki_link_ns/wiki_link_project/wikis/nested/twice/video%20file%20name.mp4"')
end
+
+ it 'generates audio html structure' do
+ markdown = "![audio_file](audio_file_name.wav)"
+ output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug)
+
+ expect(output).to include('<audio src="/wiki_link_ns/wiki_link_project/wikis/nested/twice/audio_file_name.wav"')
+ end
+
+ it 'rewrites and replaces audio links names with white spaces to %20' do
+ markdown = "![audio file](audio file name.wav)"
+ output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug)
+
+ expect(output).to include('<audio src="/wiki_link_ns/wiki_link_project/wikis/nested/twice/audio%20file%20name.wav"')
+ end
end
end
diff --git a/spec/lib/banzai/reference_parser/commit_parser_spec.rb b/spec/lib/banzai/reference_parser/commit_parser_spec.rb
index b44ae67e430..eac1cf16a8f 100644
--- a/spec/lib/banzai/reference_parser/commit_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/commit_parser_spec.rb
@@ -8,6 +8,7 @@ describe Banzai::ReferenceParser::CommitParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb b/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb
index da853233018..78b337466aa 100644
--- a/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/commit_range_parser_spec.rb
@@ -8,6 +8,7 @@ describe Banzai::ReferenceParser::CommitRangeParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb b/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb
index 0f29a95bdcc..9343d52e44b 100644
--- a/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/external_issue_parser_spec.rb
@@ -8,6 +8,7 @@ describe Banzai::ReferenceParser::ExternalIssueParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/label_parser_spec.rb b/spec/lib/banzai/reference_parser/label_parser_spec.rb
index cf8adb57ffc..8b66a891e69 100644
--- a/spec/lib/banzai/reference_parser/label_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/label_parser_spec.rb
@@ -9,6 +9,7 @@ describe Banzai::ReferenceParser::LabelParser do
let(:user) { create(:user) }
let(:label) { create(:label, project: project) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb b/spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb
new file mode 100644
index 00000000000..1be279375bd
--- /dev/null
+++ b/spec/lib/banzai/reference_parser/mentioned_user_parser_spec.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Banzai::ReferenceParser::MentionedUserParser do
+ include ReferenceParserHelpers
+
+ let(:group) { create(:group, :private) }
+ let(:user) { create(:user) }
+ let(:new_user) { create(:user) }
+ let(:project) { create(:project, group: group, creator: user) }
+ let(:link) { empty_html_link }
+
+ subject { described_class.new(Banzai::RenderContext.new(project, new_user)) }
+
+ describe '#gather_references' do
+ context 'when the link has a data-group attribute' do
+ context 'using an existing group ID' do
+ before do
+ link['data-group'] = project.group.id.to_s
+ group.add_developer(new_user)
+ end
+
+ it 'returns empty list of users' do
+ expect(subject.gather_references([link])).to eq([])
+ end
+ end
+ end
+
+ context 'when the link has a data-project attribute' do
+ context 'using an existing project ID' do
+ before do
+ link['data-project'] = project.id.to_s
+ project.add_developer(new_user)
+ end
+
+ it 'returns empty list of users' do
+ expect(subject.gather_references([link])).to eq([])
+ end
+ end
+ end
+
+ context 'when the link has a data-user attribute' do
+ it 'returns an Array of users' do
+ link['data-user'] = user.id.to_s
+
+ expect(subject.referenced_by([link])).to eq([user])
+ end
+ end
+ end
+end
diff --git a/spec/lib/banzai/reference_parser/mentioned_users_by_group_parser_spec.rb b/spec/lib/banzai/reference_parser/mentioned_users_by_group_parser_spec.rb
new file mode 100644
index 00000000000..99d607629eb
--- /dev/null
+++ b/spec/lib/banzai/reference_parser/mentioned_users_by_group_parser_spec.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Banzai::ReferenceParser::MentionedUsersByGroupParser do
+ include ReferenceParserHelpers
+
+ let(:group) { create(:group, :private) }
+ let(:user) { create(:user) }
+ let(:new_user) { create(:user) }
+ let(:project) { create(:project, group: group, creator: user) }
+ let(:link) { empty_html_link }
+
+ subject { described_class.new(Banzai::RenderContext.new(project, new_user)) }
+
+ describe '#gather_references' do
+ context 'when the link has a data-group attribute' do
+ context 'using an existing group ID where user does not have access' do
+ it 'returns empty array' do
+ link['data-group'] = project.group.id.to_s
+
+ expect(subject.gather_references([link])).to eq([])
+ end
+ end
+
+ context 'using an existing group ID' do
+ before do
+ link['data-group'] = project.group.id.to_s
+ group.add_developer(new_user)
+ end
+
+ it 'returns groups' do
+ expect(subject.gather_references([link])).to eq([group])
+ end
+ end
+
+ context 'using a non-existing group ID' do
+ it 'returns an empty Array' do
+ link['data-group'] = 'test-non-existing'
+
+ expect(subject.gather_references([link])).to eq([])
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/banzai/reference_parser/mentioned_users_by_project_parser_spec.rb b/spec/lib/banzai/reference_parser/mentioned_users_by_project_parser_spec.rb
new file mode 100644
index 00000000000..155f2189d9e
--- /dev/null
+++ b/spec/lib/banzai/reference_parser/mentioned_users_by_project_parser_spec.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Banzai::ReferenceParser::MentionedUsersByProjectParser do
+ include ReferenceParserHelpers
+
+ let(:group) { create(:group, :private) }
+ let(:user) { create(:user) }
+ let(:new_user) { create(:user) }
+ let(:project) { create(:project, group: group, creator: user) }
+ let(:link) { empty_html_link }
+
+ subject { described_class.new(Banzai::RenderContext.new(project, new_user)) }
+
+ describe '#gather_references' do
+ context 'when the link has a data-project attribute' do
+ context 'using an existing project ID where user does not have access' do
+ it 'returns empty Array' do
+ link['data-project'] = project.id.to_s
+
+ expect(subject.gather_references([link])).to eq([])
+ end
+ end
+
+ context 'using an existing project ID' do
+ before do
+ link['data-project'] = project.id.to_s
+ project.add_developer(new_user)
+ end
+
+ it 'returns an Array of referenced projects' do
+ expect(subject.gather_references([link])).to eq([project])
+ end
+ end
+
+ context 'using a non-existing project ID' do
+ it 'returns an empty Array' do
+ link['data-project'] = 'inexisting-project-id'
+
+ expect(subject.gather_references([link])).to eq([])
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb
index 1561dabcdbf..cb65893aea0 100644
--- a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb
@@ -9,6 +9,7 @@ describe Banzai::ReferenceParser::MergeRequestParser do
let(:project) { create(:project, :public) }
let(:merge_request) { create(:merge_request, source_project: project) }
subject { described_class.new(Banzai::RenderContext.new(merge_request.target_project, user)) }
+
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/milestone_parser_spec.rb b/spec/lib/banzai/reference_parser/milestone_parser_spec.rb
index 006f8e37690..25ba41dd8a0 100644
--- a/spec/lib/banzai/reference_parser/milestone_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/milestone_parser_spec.rb
@@ -9,6 +9,7 @@ describe Banzai::ReferenceParser::MilestoneParser do
let(:user) { create(:user) }
let(:milestone) { create(:milestone, project: project) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
describe '#nodes_visible_to_user' do
diff --git a/spec/lib/banzai/reference_parser/project_parser_spec.rb b/spec/lib/banzai/reference_parser/project_parser_spec.rb
index e4936aa9e57..356dde1e9c2 100644
--- a/spec/lib/banzai/reference_parser/project_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/project_parser_spec.rb
@@ -8,6 +8,7 @@ describe Banzai::ReferenceParser::ProjectParser do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
describe '#referenced_by' do
diff --git a/spec/lib/banzai/reference_parser/snippet_parser_spec.rb b/spec/lib/banzai/reference_parser/snippet_parser_spec.rb
index 528f79ed020..05dc1cb4d2d 100644
--- a/spec/lib/banzai/reference_parser/snippet_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/snippet_parser_spec.rb
@@ -12,6 +12,7 @@ describe Banzai::ReferenceParser::SnippetParser do
let(:project_member) { create(:user) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
def visible_references(snippet_visibility, user = nil)
diff --git a/spec/lib/banzai/reference_parser/user_parser_spec.rb b/spec/lib/banzai/reference_parser/user_parser_spec.rb
index a5b4e59a3a1..931fb1e3953 100644
--- a/spec/lib/banzai/reference_parser/user_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/user_parser_spec.rb
@@ -9,6 +9,7 @@ describe Banzai::ReferenceParser::UserParser do
let(:user) { create(:user) }
let(:project) { create(:project, :public, group: group, creator: user) }
subject { described_class.new(Banzai::RenderContext.new(project, user)) }
+
let(:link) { empty_html_link }
describe '#referenced_by' do
diff --git a/spec/lib/container_registry/client_spec.rb b/spec/lib/container_registry/client_spec.rb
index 6c2b338bfcd..3782c30e88a 100644
--- a/spec/lib/container_registry/client_spec.rb
+++ b/spec/lib/container_registry/client_spec.rb
@@ -73,4 +73,69 @@ describe ContainerRegistry::Client do
expect(response).to eq('Successfully redirected')
end
end
+
+ def stub_upload(path, content, digest, status = 200)
+ stub_request(:post, "http://container-registry/v2/#{path}/blobs/uploads/")
+ .to_return(status: status, body: "", headers: { 'location' => 'http://container-registry/next_upload?id=someid' })
+
+ stub_request(:put, "http://container-registry/next_upload?digest=#{digest}&id=someid")
+ .with(body: content)
+ .to_return(status: status, body: "", headers: {})
+ end
+
+ describe '#upload_blob' do
+ subject { client.upload_blob('path', 'content', 'sha256:123') }
+
+ context 'with successful uploads' do
+ it 'starts the upload and posts the blob' do
+ stub_upload('path', 'content', 'sha256:123')
+
+ expect(subject).to be_success
+ end
+ end
+
+ context 'with a failed upload' do
+ before do
+ stub_upload('path', 'content', 'sha256:123', 400)
+ end
+
+ it 'returns nil' do
+ expect(subject).to be nil
+ end
+ end
+ end
+
+ describe '#generate_empty_manifest' do
+ subject { client.generate_empty_manifest('path') }
+
+ let(:result_manifest) do
+ {
+ schemaVersion: 2,
+ mediaType: 'application/vnd.docker.distribution.manifest.v2+json',
+ config: {
+ mediaType: 'application/vnd.docker.container.image.v1+json',
+ size: 21,
+ digest: 'sha256:4435000728ee66e6a80e55637fc22725c256b61de344a2ecdeaac6bdb36e8bc3'
+ }
+ }
+ end
+
+ it 'uploads a random image and returns the manifest' do
+ stub_upload('path', "{\n \"config\": {\n }\n}", 'sha256:4435000728ee66e6a80e55637fc22725c256b61de344a2ecdeaac6bdb36e8bc3')
+
+ expect(subject).to eq(result_manifest)
+ end
+ end
+
+ describe '#put_tag' do
+ subject { client.put_tag('path', 'tagA', { foo: :bar }) }
+
+ it 'uploads the manifest and returns the digest' do
+ stub_request(:put, "http://container-registry/v2/path/manifests/tagA")
+ .with(body: "{\n \"foo\": \"bar\"\n}")
+ .to_return(status: 200, body: "", headers: { 'docker-content-digest' => 'sha256:123' })
+
+ expect(subject).to eq 'sha256:123'
+ end
+ end
end
diff --git a/spec/lib/container_registry/tag_spec.rb b/spec/lib/container_registry/tag_spec.rb
index 110f006536b..3115dfe852f 100644
--- a/spec/lib/container_registry/tag_spec.rb
+++ b/spec/lib/container_registry/tag_spec.rb
@@ -179,7 +179,7 @@ describe ContainerRegistry::Tag do
end
end
- describe '#delete' do
+ describe '#unsafe_delete' do
before do
stub_request(:delete, 'http://registry.gitlab/v2/group/test/manifests/sha256:digest')
.with(headers: headers)
@@ -187,7 +187,7 @@ describe ContainerRegistry::Tag do
end
it 'correctly deletes the tag' do
- expect(tag.delete).to be_truthy
+ expect(tag.unsafe_delete).to be_truthy
end
end
end
diff --git a/spec/lib/event_filter_spec.rb b/spec/lib/event_filter_spec.rb
index d6eca8d85ff..21b8f726425 100644
--- a/spec/lib/event_filter_spec.rb
+++ b/spec/lib/event_filter_spec.rb
@@ -3,12 +3,6 @@
require 'spec_helper'
describe EventFilter do
- describe 'FILTERS' do
- it 'returns a definite list of filters' do
- expect(described_class::FILTERS).to eq(%w[all push merged issue comments team])
- end
- end
-
describe '#filter' do
it 'returns "all" if given filter is nil' do
expect(described_class.new(nil).filter).to eq(described_class::ALL)
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/base_query_builder_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/base_query_builder_spec.rb
new file mode 100644
index 00000000000..0fc9d3c1e9e
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/base_query_builder_spec.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::BaseQueryBuilder do
+ let_it_be(:project) { create(:project, :empty_repo) }
+ let_it_be(:mr1) { create(:merge_request, target_project: project, source_project: project, allow_broken: true, created_at: 3.months.ago) }
+ let_it_be(:mr2) { create(:merge_request, target_project: project, source_project: project, allow_broken: true, created_at: 1.month.ago) }
+ let(:params) { {} }
+ let(:records) do
+ stage = build(:cycle_analytics_project_stage, {
+ start_event_identifier: :merge_request_created,
+ end_event_identifier: :merge_request_merged,
+ project: project
+ })
+ described_class.new(stage: stage, params: params).build.to_a
+ end
+
+ before do
+ mr1.metrics.update!(merged_at: 1.month.ago)
+ mr2.metrics.update!(merged_at: Time.now)
+ end
+
+ around do |example|
+ Timecop.freeze { example.run }
+ end
+
+ describe 'date range parameters' do
+ context 'when filters by only the `from` parameter' do
+ before do
+ params[:from] = 4.months.ago
+ end
+
+ it { expect(records.size).to eq(2) }
+ end
+
+ context 'when filters by both `from` and `to` parameters' do
+ before do
+ params.merge!(from: 4.months.ago, to: 2.months.ago)
+ end
+
+ it { expect(records.size).to eq(1) }
+ end
+
+ context 'invalid date range is provided' do
+ before do
+ params.merge!(from: 1.month.ago, to: 10.months.ago)
+ end
+
+ it { expect(records.size).to eq(0) }
+ end
+ end
+
+ it 'scopes query within the target project' do
+ other_mr = create(:merge_request, source_project: create(:project), allow_broken: true, created_at: 2.months.ago)
+ other_mr.metrics.update!(merged_at: 1.month.ago)
+
+ params[:from] = 1.year.ago
+
+ expect(records.size).to eq(2)
+ end
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb
new file mode 100644
index 00000000000..334cab0b799
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb
@@ -0,0 +1,131 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::RecordsFetcher do
+ around do |example|
+ Timecop.freeze { example.run }
+ end
+
+ let_it_be(:project) { create(:project, :empty_repo) }
+ let_it_be(:user) { create(:user) }
+
+ subject do
+ Gitlab::Analytics::CycleAnalytics::DataCollector.new(
+ stage: stage,
+ params: {
+ from: 1.year.ago,
+ current_user: user
+ }
+ ).records_fetcher.serialized_records
+ end
+
+ describe '#serialized_records' do
+ shared_context 'when records are loaded by maintainer' do
+ before do
+ project.add_user(user, Gitlab::Access::MAINTAINER)
+ end
+
+ it 'returns all records' do
+ expect(subject.size).to eq(2)
+ end
+ end
+
+ describe 'for issue based stage' do
+ let_it_be(:issue1) { create(:issue, project: project) }
+ let_it_be(:issue2) { create(:issue, project: project, confidential: true) }
+ let(:stage) do
+ build(:cycle_analytics_project_stage, {
+ start_event_identifier: :plan_stage_start,
+ end_event_identifier: :issue_first_mentioned_in_commit,
+ project: project
+ })
+ end
+
+ before do
+ issue1.metrics.update(first_added_to_board_at: 3.days.ago, first_mentioned_in_commit_at: 2.days.ago)
+ issue2.metrics.update(first_added_to_board_at: 3.days.ago, first_mentioned_in_commit_at: 2.days.ago)
+ end
+
+ context 'when records are loaded by guest' do
+ before do
+ project.add_user(user, Gitlab::Access::GUEST)
+ end
+
+ it 'filters out confidential issues' do
+ expect(subject.size).to eq(1)
+ expect(subject.first[:iid].to_s).to eq(issue1.iid.to_s)
+ end
+ end
+
+ include_context 'when records are loaded by maintainer'
+ end
+
+ describe 'for merge request based stage' do
+ let(:mr1) { create(:merge_request, created_at: 5.days.ago, source_project: project, allow_broken: true) }
+ let(:mr2) { create(:merge_request, created_at: 4.days.ago, source_project: project, allow_broken: true) }
+ let(:stage) do
+ build(:cycle_analytics_project_stage, {
+ start_event_identifier: :merge_request_created,
+ end_event_identifier: :merge_request_merged,
+ project: project
+ })
+ end
+
+ before do
+ mr1.metrics.update(merged_at: 3.days.ago)
+ mr2.metrics.update(merged_at: 3.days.ago)
+ end
+
+ include_context 'when records are loaded by maintainer'
+ end
+
+ describe 'special case' do
+ let(:mr1) { create(:merge_request, source_project: project, allow_broken: true, created_at: 20.days.ago) }
+ let(:mr2) { create(:merge_request, source_project: project, allow_broken: true, created_at: 19.days.ago) }
+ let(:ci_build1) { create(:ci_build) }
+ let(:ci_build2) { create(:ci_build) }
+ let(:default_stages) { Gitlab::Analytics::CycleAnalytics::DefaultStages }
+ let(:stage) { build(:cycle_analytics_project_stage, default_stages.params_for_test_stage.merge(project: project)) }
+
+ before do
+ mr1.metrics.update!({
+ merged_at: 5.days.ago,
+ first_deployed_to_production_at: 1.day.ago,
+ latest_build_started_at: 5.days.ago,
+ latest_build_finished_at: 1.day.ago,
+ pipeline: ci_build1.pipeline
+ })
+ mr2.metrics.update!({
+ merged_at: 10.days.ago,
+ first_deployed_to_production_at: 5.days.ago,
+ latest_build_started_at: 9.days.ago,
+ latest_build_finished_at: 7.days.ago,
+ pipeline: ci_build2.pipeline
+ })
+ end
+
+ context 'returns build records' do
+ shared_examples 'orders build records by `latest_build_finished_at`' do
+ it 'orders by `latest_build_finished_at`' do
+ build_ids = subject.map { |item| item[:id] }
+
+ expect(build_ids).to eq([ci_build1.id, ci_build2.id])
+ end
+ end
+
+ context 'when requesting records for default test stage' do
+ include_examples 'orders build records by `latest_build_finished_at`'
+ end
+
+ context 'when requesting records for default staging stage' do
+ before do
+ stage.assign_attributes(default_stages.params_for_staging_stage)
+ end
+
+ include_examples 'orders build records by `latest_build_finished_at`'
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start_spec.rb
new file mode 100644
index 00000000000..29c8d548754
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start_spec.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::CodeStageStart do
+ let(:subject) { described_class.new({}) }
+ let(:project) { create(:project) }
+
+ it_behaves_like 'cycle analytics event'
+
+ it 'needs connection with an issue via merge_requests_closing_issues table' do
+ issue = create(:issue, project: project)
+ merge_request = create(:merge_request, source_project: project)
+ create(:merge_requests_closing_issues, issue: issue, merge_request: merge_request)
+
+ other_merge_request = create(:merge_request, source_project: project, source_branch: 'a', target_branch: 'master')
+
+ records = subject.apply_query_customization(MergeRequest.all)
+ expect(records).to eq([merge_request])
+ expect(records).not_to include(other_merge_request)
+ end
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created_spec.rb
new file mode 100644
index 00000000000..efdef91c5a2
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_created_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::IssueCreated do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit_spec.rb
new file mode 100644
index 00000000000..50883e1c1e2
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::IssueFirstMentionedInCommit do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end_spec.rb
new file mode 100644
index 00000000000..85062db370a
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::IssueStageEnd do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created_spec.rb
new file mode 100644
index 00000000000..7858b810661
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestCreated do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production_spec.rb
new file mode 100644
index 00000000000..ba9d8be5a2c
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestFirstDeployedToProduction do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished_spec.rb
new file mode 100644
index 00000000000..8e83e10ef96
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestLastBuildFinished do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started_spec.rb
new file mode 100644
index 00000000000..9f6b430a320
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestLastBuildStarted do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged_spec.rb
new file mode 100644
index 00000000000..ce2aa0a60db
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged_spec.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestMerged do
+ it_behaves_like 'cycle analytics event'
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start_spec.rb
new file mode 100644
index 00000000000..cb63139f0a8
--- /dev/null
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start_spec.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Analytics::CycleAnalytics::StageEvents::PlanStageStart do
+ let(:subject) { described_class.new({}) }
+ let(:project) { create(:project) }
+
+ it_behaves_like 'cycle analytics event'
+
+ it 'filters issues where first_associated_with_milestone_at or first_added_to_board_at is filled' do
+ issue1 = create(:issue, project: project)
+ issue1.metrics.update!(first_added_to_board_at: 1.month.ago, first_mentioned_in_commit_at: 2.months.ago)
+
+ issue2 = create(:issue, project: project)
+ issue2.metrics.update!(first_associated_with_milestone_at: 1.month.ago, first_mentioned_in_commit_at: 2.months.ago)
+
+ issue_without_metrics = create(:issue, project: project)
+
+ records = subject.apply_query_customization(Issue.all)
+ expect(records).to match_array([issue1, issue2])
+ expect(records).not_to include(issue_without_metrics)
+ end
+end
diff --git a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event_spec.rb b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event_spec.rb
index 29f4be76a65..b05faf5d813 100644
--- a/spec/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event_spec.rb
+++ b/spec/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event_spec.rb
@@ -3,8 +3,11 @@
require 'spec_helper'
describe Gitlab::Analytics::CycleAnalytics::StageEvents::StageEvent do
+ let(:instance) { described_class.new({}) }
+
it { expect(described_class).to respond_to(:name) }
it { expect(described_class).to respond_to(:identifier) }
-
- it { expect(described_class.new({})).to respond_to(:object_type) }
+ it { expect(instance).to respond_to(:object_type) }
+ it { expect(instance).to respond_to(:timestamp_projection) }
+ it { expect(instance).to respond_to(:apply_query_customization) }
end
diff --git a/spec/lib/gitlab/auth/current_user_mode_spec.rb b/spec/lib/gitlab/auth/current_user_mode_spec.rb
new file mode 100644
index 00000000000..b93d460cf48
--- /dev/null
+++ b/spec/lib/gitlab/auth/current_user_mode_spec.rb
@@ -0,0 +1,159 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode do
+ include_context 'custom session'
+
+ let(:user) { build(:user) }
+
+ subject { described_class.new(user) }
+
+ before do
+ allow(ActiveSession).to receive(:list_sessions).with(user).and_return([session])
+ end
+
+ describe '#admin_mode?', :request_store do
+ context 'when the user is a regular user' do
+ it 'is false by default' do
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'cannot be enabled with a valid password' do
+ subject.enable_admin_mode!(password: user.password)
+
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'cannot be enabled with an invalid password' do
+ subject.enable_admin_mode!(password: nil)
+
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'cannot be enabled with empty params' do
+ subject.enable_admin_mode!
+
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'disable has no effect' do
+ subject.enable_admin_mode!
+ subject.disable_admin_mode!
+
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ context 'skipping password validation' do
+ it 'cannot be enabled with a valid password' do
+ subject.enable_admin_mode!(password: user.password, skip_password_validation: true)
+
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'cannot be enabled with an invalid password' do
+ subject.enable_admin_mode!(skip_password_validation: true)
+
+ expect(subject.admin_mode?).to be(false)
+ end
+ end
+ end
+
+ context 'when the user is an admin' do
+ let(:user) { build(:user, :admin) }
+
+ it 'is false by default' do
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'cannot be enabled with an invalid password' do
+ subject.enable_admin_mode!(password: nil)
+
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'can be enabled with a valid password' do
+ subject.enable_admin_mode!(password: user.password)
+
+ expect(subject.admin_mode?).to be(true)
+ end
+
+ it 'can be disabled' do
+ subject.enable_admin_mode!(password: user.password)
+ subject.disable_admin_mode!
+
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'will expire in the future' do
+ subject.enable_admin_mode!(password: user.password)
+ expect(subject.admin_mode?).to be(true), 'admin mode is not active in the present'
+
+ Timecop.freeze(Gitlab::Auth::CurrentUserMode::MAX_ADMIN_MODE_TIME.from_now) do
+ # in the future this will be a new request, simulate by clearing the RequestStore
+ Gitlab::SafeRequestStore.clear!
+
+ expect(subject.admin_mode?).to be(false), 'admin mode did not expire in the future'
+ end
+ end
+
+ context 'skipping password validation' do
+ it 'can be enabled with a valid password' do
+ subject.enable_admin_mode!(password: user.password, skip_password_validation: true)
+
+ expect(subject.admin_mode?).to be(true)
+ end
+
+ it 'can be enabled with an invalid password' do
+ subject.enable_admin_mode!(skip_password_validation: true)
+
+ expect(subject.admin_mode?).to be(true)
+ end
+ end
+
+ context 'with two independent sessions' do
+ let(:another_session) { {} }
+ let(:another_subject) { described_class.new(user) }
+
+ before do
+ allow(ActiveSession).to receive(:list_sessions).with(user).and_return([session, another_session])
+ end
+
+ it 'can be enabled in one and seen in the other' do
+ Gitlab::Session.with_session(another_session) do
+ another_subject.enable_admin_mode!(password: user.password)
+ end
+
+ expect(subject.admin_mode?).to be(true)
+ end
+ end
+ end
+ end
+
+ describe '#enable_admin_mode!' do
+ let(:user) { build(:user, :admin) }
+
+ it 'creates a timestamp in the session' do
+ subject.enable_admin_mode!(password: user.password)
+
+ expect(session).to include(expected_session_entry(be_within(1.second).of Time.now))
+ end
+ end
+
+ describe '#disable_admin_mode!' do
+ let(:user) { build(:user, :admin) }
+
+ it 'sets the session timestamp to nil' do
+ subject.disable_admin_mode!
+
+ expect(session).to include(expected_session_entry(be_nil))
+ end
+ end
+
+ def expected_session_entry(value_matcher)
+ {
+ Gitlab::Auth::CurrentUserMode::SESSION_STORE_KEY => a_hash_including(
+ Gitlab::Auth::CurrentUserMode::ADMIN_MODE_START_TIME_KEY => value_matcher)
+ }
+ end
+end
diff --git a/spec/lib/gitlab/auth/user_access_denied_reason_spec.rb b/spec/lib/gitlab/auth/user_access_denied_reason_spec.rb
index 8ec19c454d8..7045105a2c7 100644
--- a/spec/lib/gitlab/auth/user_access_denied_reason_spec.rb
+++ b/spec/lib/gitlab/auth/user_access_denied_reason_spec.rb
@@ -33,5 +33,13 @@ describe Gitlab::Auth::UserAccessDeniedReason do
it { is_expected.to match /This action cannot be performed by internal users/ }
end
+
+ context 'when the user is deactivated' do
+ before do
+ user.deactivate!
+ end
+
+ it { is_expected.to eq "Your account has been deactivated by your administrator. Please log back in from a web browser to reactivate your account at #{Gitlab.config.gitlab.url}" }
+ end
end
end
diff --git a/spec/lib/gitlab/auth_spec.rb b/spec/lib/gitlab/auth_spec.rb
index 0365d63ea9c..dc4b0b5b1b6 100644
--- a/spec/lib/gitlab/auth_spec.rb
+++ b/spec/lib/gitlab/auth_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe Gitlab::Auth do
let(:gl_auth) { described_class }
+ set(:project) { create(:project) }
describe 'constants' do
it 'API_SCOPES contains all scopes for API access' do
@@ -90,13 +91,13 @@ describe Gitlab::Auth do
end
it 'recognises user-less build' do
- expect(subject).to eq(Gitlab::Auth::Result.new(nil, build.project, :ci, build_authentication_abilities))
+ expect(subject).to eq(Gitlab::Auth::Result.new(nil, build.project, :ci, described_class.build_authentication_abilities))
end
it 'recognises user token' do
build.update(user: create(:user))
- expect(subject).to eq(Gitlab::Auth::Result.new(build.user, build.project, :build, build_authentication_abilities))
+ expect(subject).to eq(Gitlab::Auth::Result.new(build.user, build.project, :build, described_class.build_authentication_abilities))
end
end
@@ -117,26 +118,25 @@ describe Gitlab::Auth do
end
it 'recognizes other ci services' do
- project = create(:project)
project.create_drone_ci_service(active: true)
project.drone_ci_service.update(token: 'token')
expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: 'drone-ci-token')
- expect(gl_auth.find_for_git_client('drone-ci-token', 'token', project: project, ip: 'ip')).to eq(Gitlab::Auth::Result.new(nil, project, :ci, build_authentication_abilities))
+ expect(gl_auth.find_for_git_client('drone-ci-token', 'token', project: project, ip: 'ip')).to eq(Gitlab::Auth::Result.new(nil, project, :ci, described_class.build_authentication_abilities))
end
it 'recognizes master passwords' do
user = create(:user, password: 'password')
expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: user.username)
- expect(gl_auth.find_for_git_client(user.username, 'password', project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, full_authentication_abilities))
+ expect(gl_auth.find_for_git_client(user.username, 'password', project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, described_class.full_authentication_abilities))
end
include_examples 'user login operation with unique ip limit' do
let(:user) { create(:user, password: 'password') }
def operation
- expect(gl_auth.find_for_git_client(user.username, 'password', project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, full_authentication_abilities))
+ expect(gl_auth.find_for_git_client(user.username, 'password', project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, described_class.full_authentication_abilities))
end
end
@@ -146,7 +146,7 @@ describe Gitlab::Auth do
token = Gitlab::LfsToken.new(user).token
expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: user.username)
- expect(gl_auth.find_for_git_client(user.username, token, project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :lfs_token, full_authentication_abilities))
+ expect(gl_auth.find_for_git_client(user.username, token, project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :lfs_token, described_class.read_write_project_authentication_abilities))
end
it 'recognizes deploy key lfs tokens' do
@@ -154,7 +154,7 @@ describe Gitlab::Auth do
token = Gitlab::LfsToken.new(key).token
expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: "lfs+deploy-key-#{key.id}")
- expect(gl_auth.find_for_git_client("lfs+deploy-key-#{key.id}", token, project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(key, nil, :lfs_deploy_token, read_only_authentication_abilities))
+ expect(gl_auth.find_for_git_client("lfs+deploy-key-#{key.id}", token, project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(key, nil, :lfs_deploy_token, described_class.read_only_authentication_abilities))
end
it 'does not try password auth before oauth' do
@@ -167,22 +167,20 @@ describe Gitlab::Auth do
end
it 'grants deploy key write permissions' do
- project = create(:project)
key = create(:deploy_key)
create(:deploy_keys_project, :write_access, deploy_key: key, project: project)
token = Gitlab::LfsToken.new(key).token
expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: "lfs+deploy-key-#{key.id}")
- expect(gl_auth.find_for_git_client("lfs+deploy-key-#{key.id}", token, project: project, ip: 'ip')).to eq(Gitlab::Auth::Result.new(key, nil, :lfs_deploy_token, read_write_authentication_abilities))
+ expect(gl_auth.find_for_git_client("lfs+deploy-key-#{key.id}", token, project: project, ip: 'ip')).to eq(Gitlab::Auth::Result.new(key, nil, :lfs_deploy_token, described_class.read_write_authentication_abilities))
end
it 'does not grant deploy key write permissions' do
- project = create(:project)
key = create(:deploy_key)
token = Gitlab::LfsToken.new(key).token
expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: "lfs+deploy-key-#{key.id}")
- expect(gl_auth.find_for_git_client("lfs+deploy-key-#{key.id}", token, project: project, ip: 'ip')).to eq(Gitlab::Auth::Result.new(key, nil, :lfs_deploy_token, read_only_authentication_abilities))
+ expect(gl_auth.find_for_git_client("lfs+deploy-key-#{key.id}", token, project: project, ip: 'ip')).to eq(Gitlab::Auth::Result.new(key, nil, :lfs_deploy_token, described_class.read_only_authentication_abilities))
end
end
@@ -193,7 +191,7 @@ describe Gitlab::Auth do
it 'succeeds for OAuth tokens with the `api` scope' do
expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: 'oauth2')
- expect(gl_auth.find_for_git_client("oauth2", token_w_api_scope.token, project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :oauth, full_authentication_abilities))
+ expect(gl_auth.find_for_git_client("oauth2", token_w_api_scope.token, project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(user, nil, :oauth, described_class.full_authentication_abilities))
end
it 'fails for OAuth tokens with other scopes' do
@@ -214,7 +212,7 @@ describe Gitlab::Auth do
it 'succeeds for personal access tokens with the `api` scope' do
personal_access_token = create(:personal_access_token, scopes: ['api'])
- expect_results_with_abilities(personal_access_token, full_authentication_abilities)
+ expect_results_with_abilities(personal_access_token, described_class.full_authentication_abilities)
end
it 'succeeds for personal access tokens with the `read_repository` scope' do
@@ -244,7 +242,7 @@ describe Gitlab::Auth do
it 'succeeds if it is an impersonation token' do
impersonation_token = create(:personal_access_token, :impersonation, scopes: ['api'])
- expect_results_with_abilities(impersonation_token, full_authentication_abilities)
+ expect_results_with_abilities(impersonation_token, described_class.full_authentication_abilities)
end
it 'limits abilities based on scope' do
@@ -267,7 +265,7 @@ describe Gitlab::Auth do
)
expect(gl_auth.find_for_git_client(user.username, user.password, project: nil, ip: 'ip'))
- .to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, full_authentication_abilities))
+ .to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, described_class.full_authentication_abilities))
end
it 'fails through oauth authentication when the username is oauth2' do
@@ -278,7 +276,7 @@ describe Gitlab::Auth do
)
expect(gl_auth.find_for_git_client(user.username, user.password, project: nil, ip: 'ip'))
- .to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, full_authentication_abilities))
+ .to eq(Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, described_class.full_authentication_abilities))
end
end
@@ -296,7 +294,6 @@ describe Gitlab::Auth do
end
context 'while using deploy tokens' do
- let(:project) { create(:project) }
let(:auth_failure) { Gitlab::Auth::Result.new(nil, nil) }
context 'when deploy token and user have the same username' do
@@ -316,7 +313,7 @@ describe Gitlab::Auth do
end
it 'succeeds for the user' do
- auth_success = Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, full_authentication_abilities)
+ auth_success = Gitlab::Auth::Result.new(user, nil, :gitlab_or_ldap, described_class.full_authentication_abilities)
expect(gl_auth.find_for_git_client(username, 'my-secret', project: project, ip: 'ip'))
.to eq(auth_success)
@@ -344,7 +341,7 @@ describe Gitlab::Auth do
end
context 'and belong to different projects' do
- let!(:read_registry) { create(:deploy_token, username: 'deployer', read_repository: false, projects: [create(:project)]) }
+ let!(:read_registry) { create(:deploy_token, username: 'deployer', read_repository: false, projects: [project]) }
let!(:read_repository) { create(:deploy_token, username: read_registry.username, read_registry: false, projects: [project]) }
it 'succeeds for the right token' do
@@ -523,6 +520,12 @@ describe Gitlab::Auth do
end
end
+ it 'finds the user in deactivated state' do
+ user.deactivate!
+
+ expect( gl_auth.find_with_user_password(username, password) ).to eql user
+ end
+
it "does not find user in blocked state" do
user.block
@@ -582,37 +585,6 @@ describe Gitlab::Auth do
private
- def build_authentication_abilities
- [
- :read_project,
- :build_download_code,
- :build_read_container_image,
- :build_create_container_image,
- :build_destroy_container_image
- ]
- end
-
- def read_only_authentication_abilities
- [
- :read_project,
- :download_code,
- :read_container_image
- ]
- end
-
- def read_write_authentication_abilities
- read_only_authentication_abilities + [
- :push_code,
- :create_container_image
- ]
- end
-
- def full_authentication_abilities
- read_write_authentication_abilities + [
- :admin_container_image
- ]
- end
-
def expect_results_with_abilities(personal_access_token, abilities, success = true)
expect(gl_auth).to receive(:rate_limit!).with('ip', success: success, login: '')
expect(gl_auth.find_for_git_client('', personal_access_token&.token, project: nil, ip: 'ip'))
diff --git a/spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb b/spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb
index 7d67dc0251d..c1eaf1d3433 100644
--- a/spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb
+++ b/spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb
@@ -32,7 +32,7 @@ describe Gitlab::BackgroundMigration::LegacyUploadMover do
if with_file
upload = create(:upload, :with_file, :attachment_upload, params)
- model.update(attachment: upload.build_uploader)
+ model.update(attachment: upload.retrieve_uploader)
model.attachment.upload
else
create(:upload, :attachment_upload, params)
diff --git a/spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb b/spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb
index ed8cbfeb11f..cabca3dbef9 100644
--- a/spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb
+++ b/spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb
@@ -24,7 +24,7 @@ describe Gitlab::BackgroundMigration::LegacyUploadsMigrator do
if with_file
upload = create(:upload, :with_file, :attachment_upload, params)
- model.update(attachment: upload.build_uploader)
+ model.update(attachment: upload.retrieve_uploader)
model.attachment.upload
else
create(:upload, :attachment_upload, params)
diff --git a/spec/lib/gitlab/background_migration/migrate_pages_metadata_spec.rb b/spec/lib/gitlab/background_migration/migrate_pages_metadata_spec.rb
new file mode 100644
index 00000000000..d94a312f605
--- /dev/null
+++ b/spec/lib/gitlab/background_migration/migrate_pages_metadata_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::BackgroundMigration::MigratePagesMetadata, :migration, schema: 20190919040324 do
+ let(:projects) { table(:projects) }
+
+ subject(:migrate_pages_metadata) { described_class.new }
+
+ describe '#perform_on_relation' do
+ let(:namespaces) { table(:namespaces) }
+ let(:builds) { table(:ci_builds) }
+ let(:pages_metadata) { table(:project_pages_metadata) }
+
+ it 'marks specified projects with successful pages deployment' do
+ namespace = namespaces.create!(name: 'gitlab', path: 'gitlab-org')
+ not_migrated_with_pages = projects.create!(namespace_id: namespace.id, name: 'Not Migrated With Pages')
+ builds.create!(project_id: not_migrated_with_pages.id, type: 'GenericCommitStatus', status: 'success', stage: 'deploy', name: 'pages:deploy')
+
+ migrated = projects.create!(namespace_id: namespace.id, name: 'Migrated')
+ pages_metadata.create!(project_id: migrated.id, deployed: true)
+
+ not_migrated_no_pages = projects.create!(namespace_id: namespace.id, name: 'Not Migrated No Pages')
+ project_not_in_relation_scope = projects.create!(namespace_id: namespace.id, name: 'Other')
+
+ projects_relation = projects.where(id: [not_migrated_with_pages, not_migrated_no_pages, migrated])
+
+ migrate_pages_metadata.perform_on_relation(projects_relation)
+
+ expect(pages_metadata.find_by_project_id(not_migrated_with_pages.id).deployed).to eq(true)
+ expect(pages_metadata.find_by_project_id(not_migrated_no_pages.id).deployed).to eq(false)
+ expect(pages_metadata.find_by_project_id(migrated.id).deployed).to eq(true)
+ expect(pages_metadata.find_by_project_id(project_not_in_relation_scope.id)).to be_nil
+ end
+ end
+
+ describe '#perform' do
+ it 'creates relation and delegates to #perform_on_relation' do
+ expect(migrate_pages_metadata).to receive(:perform_on_relation).with(projects.where(id: 3..5))
+
+ migrate_pages_metadata.perform(3, 5)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/badge/pipeline/template_spec.rb b/spec/lib/gitlab/badge/pipeline/template_spec.rb
index c0aaa3d73e1..da95c7219a4 100644
--- a/spec/lib/gitlab/badge/pipeline/template_spec.rb
+++ b/spec/lib/gitlab/badge/pipeline/template_spec.rb
@@ -67,7 +67,7 @@ describe Gitlab::Badge::Pipeline::Template do
end
it 'has expected color' do
- expect(template.value_color).to eq '#dfb317'
+ expect(template.value_color).to eq '#a7a7a7'
end
end
diff --git a/spec/lib/gitlab/bare_repository_import/importer_spec.rb b/spec/lib/gitlab/bare_repository_import/importer_spec.rb
index 0c1eedad7f4..2fb9f1a0a08 100644
--- a/spec/lib/gitlab/bare_repository_import/importer_spec.rb
+++ b/spec/lib/gitlab/bare_repository_import/importer_spec.rb
@@ -89,7 +89,7 @@ describe Gitlab::BareRepositoryImport::Importer, :seed_helper do
repo_path = "#{project.disk_path}.git"
hook_path = File.join(repo_path, 'hooks')
- expect(gitlab_shell.exists?(project.repository_storage, repo_path)).to be(true)
+ expect(gitlab_shell.repository_exists?(project.repository_storage, repo_path)).to be(true)
expect(gitlab_shell.exists?(project.repository_storage, hook_path)).to be(true)
end
@@ -145,8 +145,8 @@ describe Gitlab::BareRepositoryImport::Importer, :seed_helper do
project = Project.find_by_full_path("#{admin.full_path}/#{project_path}")
- expect(gitlab_shell.exists?(project.repository_storage, project.disk_path + '.git')).to be(true)
- expect(gitlab_shell.exists?(project.repository_storage, project.disk_path + '.wiki.git')).to be(true)
+ expect(gitlab_shell.repository_exists?(project.repository_storage, project.disk_path + '.git')).to be(true)
+ expect(gitlab_shell.repository_exists?(project.repository_storage, project.disk_path + '.wiki.git')).to be(true)
end
context 'with a repository already on disk' do
@@ -186,7 +186,7 @@ describe Gitlab::BareRepositoryImport::Importer, :seed_helper do
project = Project.find_by_full_path(project_path)
- expect(gitlab_shell.exists?(project.repository_storage, project.disk_path + '.wiki.git')).to be(true)
+ expect(gitlab_shell.repository_exists?(project.repository_storage, project.disk_path + '.wiki.git')).to be(true)
end
end
diff --git a/spec/lib/gitlab/bitbucket_import/importer_spec.rb b/spec/lib/gitlab/bitbucket_import/importer_spec.rb
index 3d0d3f91859..7f7a285c453 100644
--- a/spec/lib/gitlab/bitbucket_import/importer_spec.rb
+++ b/spec/lib/gitlab/bitbucket_import/importer_spec.rb
@@ -308,8 +308,8 @@ describe Gitlab::BitbucketImport::Importer do
importer.execute
- expect(project.issues.where(state: "closed").size).to eq(5)
- expect(project.issues.where(state: "opened").size).to eq(2)
+ expect(project.issues.where(state_id: Issue.available_states[:closed]).size).to eq(5)
+ expect(project.issues.where(state_id: Issue.available_states[:opened]).size).to eq(2)
end
describe 'wiki import' do
diff --git a/spec/lib/gitlab/ci/ansi2json/line_spec.rb b/spec/lib/gitlab/ci/ansi2json/line_spec.rb
new file mode 100644
index 00000000000..4b5c3f9489e
--- /dev/null
+++ b/spec/lib/gitlab/ci/ansi2json/line_spec.rb
@@ -0,0 +1,168 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Ansi2json::Line do
+ let(:offset) { 0 }
+ let(:style) { Gitlab::Ci::Ansi2json::Style.new }
+
+ subject { described_class.new(offset: offset, style: style) }
+
+ describe '#<<' do
+ it 'appends new data to the current segment' do
+ expect { subject << 'test 1' }.to change { subject.current_segment.text }
+ expect(subject.current_segment.text).to eq('test 1')
+
+ expect { subject << ', test 2' }.to change { subject.current_segment.text }
+ expect(subject.current_segment.text).to eq('test 1, test 2')
+ end
+ end
+
+ describe '#style' do
+ context 'when style is passed to the initializer' do
+ let(:style) { double }
+
+ it 'returns the same style' do
+ expect(subject.style).to eq(style)
+ end
+ end
+
+ context 'when style is not passed to the initializer' do
+ it 'returns the default style' do
+ expect(subject.style.set?).to be_falsey
+ end
+ end
+ end
+
+ describe '#update_style' do
+ let(:expected_style) do
+ Gitlab::Ci::Ansi2json::Style.new(
+ fg: 'term-fg-l-yellow',
+ bg: 'term-bg-blue',
+ mask: 1)
+ end
+
+ it 'sets the style' do
+ subject.update_style(%w[1 33 44])
+
+ expect(subject.style).to eq(expected_style)
+ end
+ end
+
+ describe '#add_section' do
+ it 'appends a new section to the list' do
+ subject.add_section('section_1')
+ subject.add_section('section_2')
+
+ expect(subject.sections).to eq(%w[section_1 section_2])
+ end
+ end
+
+ describe '#set_as_section_header' do
+ it 'change the section_header to true' do
+ expect { subject.set_as_section_header }
+ .to change { subject.section_header }
+ .to be_truthy
+ end
+ end
+
+ describe '#set_section_duration' do
+ it 'sets and formats the section_duration' do
+ subject.set_section_duration(75)
+
+ expect(subject.section_duration).to eq('01:15')
+ end
+ end
+
+ describe '#flush_current_segment!' do
+ context 'when current segment is not empty' do
+ before do
+ subject << 'some data'
+ end
+
+ it 'adds the segment to the list' do
+ expect { subject.flush_current_segment! }.to change { subject.segments.count }.by(1)
+
+ expect(subject.segments.map { |s| s[:text] }).to eq(['some data'])
+ end
+
+ it 'updates the current segment pointer propagating the style' do
+ previous_segment = subject.current_segment
+
+ subject.flush_current_segment!
+
+ expect(subject.current_segment).not_to eq(previous_segment)
+ expect(subject.current_segment.style).to eq(previous_segment.style)
+ end
+ end
+
+ context 'when current segment is empty' do
+ it 'does not add any segments to the list' do
+ expect { subject.flush_current_segment! }.not_to change { subject.segments.count }
+ end
+
+ it 'does not change the current segment' do
+ expect { subject.flush_current_segment! }.not_to change { subject.current_segment }
+ end
+ end
+ end
+
+ describe '#to_h' do
+ before do
+ subject << 'some data'
+ subject.update_style(['1'])
+ end
+
+ context 'when sections are present' do
+ before do
+ subject.add_section('section_1')
+ subject.add_section('section_2')
+ end
+
+ context 'when section header is set' do
+ before do
+ subject.set_as_section_header
+ end
+
+ it 'serializes the attributes set' do
+ result = {
+ offset: 0,
+ content: [{ text: 'some data', style: 'term-bold' }],
+ section: 'section_2',
+ section_header: true
+ }
+
+ expect(subject.to_h).to eq(result)
+ end
+ end
+
+ context 'when section duration is set' do
+ before do
+ subject.set_section_duration(75)
+ end
+
+ it 'serializes the attributes set' do
+ result = {
+ offset: 0,
+ content: [{ text: 'some data', style: 'term-bold' }],
+ section: 'section_2',
+ section_duration: '01:15'
+ }
+
+ expect(subject.to_h).to eq(result)
+ end
+ end
+ end
+
+ context 'when there are no sections' do
+ it 'serializes the attributes set' do
+ result = {
+ offset: 0,
+ content: [{ text: 'some data', style: 'term-bold' }]
+ }
+
+ expect(subject.to_h).to eq(result)
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/ansi2json/parser_spec.rb b/spec/lib/gitlab/ci/ansi2json/parser_spec.rb
new file mode 100644
index 00000000000..e161e74c1ff
--- /dev/null
+++ b/spec/lib/gitlab/ci/ansi2json/parser_spec.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+# The rest of the specs for this class are covered in style_spec.rb
+describe Gitlab::Ci::Ansi2json::Parser do
+ subject { described_class }
+
+ describe 'bold?' do
+ it 'returns true if style mask matches bold format' do
+ expect(subject.bold?(0x01)).to be_truthy
+ end
+
+ it 'returns false if style mask does not match bold format' do
+ expect(subject.bold?(0x02)).to be_falsey
+ end
+ end
+
+ describe 'matching_formats' do
+ it 'returns matching formats given a style mask' do
+ expect(subject.matching_formats(0x01)).to eq(%w[term-bold])
+ expect(subject.matching_formats(0x03)).to eq(%w[term-bold term-italic])
+ expect(subject.matching_formats(0x07)).to eq(%w[term-bold term-italic term-underline])
+ end
+
+ it 'returns an empty array if no formats match the style mask' do
+ expect(subject.matching_formats(0)).to eq([])
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/ansi2json/style_spec.rb b/spec/lib/gitlab/ci/ansi2json/style_spec.rb
new file mode 100644
index 00000000000..88a0ca35859
--- /dev/null
+++ b/spec/lib/gitlab/ci/ansi2json/style_spec.rb
@@ -0,0 +1,166 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Ansi2json::Style do
+ describe '#set?' do
+ subject { described_class.new(params).set? }
+
+ context 'when fg color is set' do
+ let(:params) { { fg: 'term-fg-black' } }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'when bg color is set' do
+ let(:params) { { bg: 'term-bg-black' } }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'when mask is set' do
+ let(:params) { { mask: 0x01 } }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'nothing is set' do
+ let(:params) { {} }
+
+ it { is_expected.to be_falsey }
+ end
+ end
+
+ describe '#reset!' do
+ let(:style) { described_class.new(fg: 'term-fg-black', bg: 'term-bg-yellow', mask: 0x01) }
+
+ it 'set the style params to default' do
+ style.reset!
+
+ expect(style.fg).to be_nil
+ expect(style.bg).to be_nil
+ expect(style.mask).to be_zero
+ end
+ end
+
+ describe 'update formats to mimic terminals' do
+ subject { described_class.new(params) }
+
+ context 'when fg color present' do
+ let(:params) { { fg: 'term-fg-black', mask: mask } }
+
+ context 'when mask is set to bold' do
+ let(:mask) { 0x01 }
+
+ it 'changes the fg color to a lighter version' do
+ expect(subject.fg).to eq('term-fg-l-black')
+ end
+ end
+
+ context 'when mask set to another format' do
+ let(:mask) { 0x02 }
+
+ it 'does not change the fg color' do
+ expect(subject.fg).to eq('term-fg-black')
+ end
+ end
+
+ context 'when mask is not set' do
+ let(:mask) { 0 }
+
+ it 'does not change the fg color' do
+ expect(subject.fg).to eq('term-fg-black')
+ end
+ end
+ end
+ end
+
+ describe '#update' do
+ where(:initial_state, :ansi_commands, :result, :description) do
+ [
+ # add format
+ [[], %w[0], '', 'does not set any style'],
+ [[], %w[1], 'term-bold', 'enables format bold'],
+ [[], %w[3], 'term-italic', 'enables format italic'],
+ [[], %w[4], 'term-underline', 'enables format underline'],
+ [[], %w[8], 'term-conceal', 'enables format conceal'],
+ [[], %w[9], 'term-cross', 'enables format cross'],
+ # remove format
+ [%w[1], %w[21], '', 'disables format bold'],
+ [%w[1 3], %w[21], 'term-italic', 'disables format bold and leaves italic'],
+ [%w[1], %w[22], '', 'disables format bold using command 22'],
+ [%w[1 3], %w[22], 'term-italic', 'disables format bold and leaves italic using command 22'],
+ [%w[3], %w[23], '', 'disables format italic'],
+ [%w[1 3], %w[23], 'term-bold', 'disables format italic and leaves bold'],
+ [%w[4], %w[24], '', 'disables format underline'],
+ [%w[1 4], %w[24], 'term-bold', 'disables format underline and leaves bold'],
+ [%w[8], %w[28], '', 'disables format conceal'],
+ [%w[1 8], %w[28], 'term-bold', 'disables format conceal and leaves bold'],
+ [%w[9], %w[29], '', 'disables format cross'],
+ [%w[1 9], %w[29], 'term-bold', 'disables format cross and leaves bold'],
+ # set fg color
+ [[], %w[30], 'term-fg-black', 'sets fg color black'],
+ [[], %w[31], 'term-fg-red', 'sets fg color red'],
+ [[], %w[32], 'term-fg-green', 'sets fg color green'],
+ [[], %w[33], 'term-fg-yellow', 'sets fg color yellow'],
+ [[], %w[34], 'term-fg-blue', 'sets fg color blue'],
+ [[], %w[35], 'term-fg-magenta', 'sets fg color magenta'],
+ [[], %w[36], 'term-fg-cyan', 'sets fg color cyan'],
+ [[], %w[37], 'term-fg-white', 'sets fg color white'],
+ # sets xterm fg color
+ [[], %w[38 5 1], 'xterm-fg-1', 'sets xterm fg color 1'],
+ [[], %w[38 5 2], 'xterm-fg-2', 'sets xterm fg color 2'],
+ [[], %w[38 1], 'term-bold', 'ignores 38 command if not followed by 5 and sets format bold'],
+ # set bg color
+ [[], %w[40], 'term-bg-black', 'sets bg color black'],
+ [[], %w[41], 'term-bg-red', 'sets bg color red'],
+ [[], %w[42], 'term-bg-green', 'sets bg color green'],
+ [[], %w[43], 'term-bg-yellow', 'sets bg color yellow'],
+ [[], %w[44], 'term-bg-blue', 'sets bg color blue'],
+ [[], %w[45], 'term-bg-magenta', 'sets bg color magenta'],
+ [[], %w[46], 'term-bg-cyan', 'sets bg color cyan'],
+ [[], %w[47], 'term-bg-white', 'sets bg color white'],
+ # set xterm bg color
+ [[], %w[48 5 1], 'xterm-bg-1', 'sets xterm bg color 1'],
+ [[], %w[48 5 2], 'xterm-bg-2', 'sets xterm bg color 2'],
+ [[], %w[48 1], 'term-bold', 'ignores 48 command if not followed by 5 and sets format bold'],
+ # set light fg color
+ [[], %w[90], 'term-fg-l-black', 'sets fg color light black'],
+ [[], %w[91], 'term-fg-l-red', 'sets fg color light red'],
+ [[], %w[92], 'term-fg-l-green', 'sets fg color light green'],
+ [[], %w[93], 'term-fg-l-yellow', 'sets fg color light yellow'],
+ [[], %w[94], 'term-fg-l-blue', 'sets fg color light blue'],
+ [[], %w[95], 'term-fg-l-magenta', 'sets fg color light magenta'],
+ [[], %w[96], 'term-fg-l-cyan', 'sets fg color light cyan'],
+ [[], %w[97], 'term-fg-l-white', 'sets fg color light white'],
+ # set light bg color
+ [[], %w[100], 'term-bg-l-black', 'sets bg color light black'],
+ [[], %w[101], 'term-bg-l-red', 'sets bg color light red'],
+ [[], %w[102], 'term-bg-l-green', 'sets bg color light green'],
+ [[], %w[103], 'term-bg-l-yellow', 'sets bg color light yellow'],
+ [[], %w[104], 'term-bg-l-blue', 'sets bg color light blue'],
+ [[], %w[105], 'term-bg-l-magenta', 'sets bg color light magenta'],
+ [[], %w[106], 'term-bg-l-cyan', 'sets bg color light cyan'],
+ [[], %w[107], 'term-bg-l-white', 'sets bg color light white'],
+ # reset
+ [%w[1], %w[0], '', 'resets style from format bold'],
+ [%w[1 3], %w[0], '', 'resets style from format bold and italic'],
+ [%w[1 3 term-fg-l-red term-bg-yellow], %w[0], '', 'resets all formats and colors'],
+ # misc
+ [[], %w[1 30 42 3], 'term-fg-l-black term-bg-green term-bold term-italic', 'adds fg color, bg color and formats from no style'],
+ [%w[3 31], %w[23 1 43], 'term-fg-l-red term-bg-yellow term-bold', 'replaces format italic with bold and adds a yellow background']
+ ]
+ end
+
+ with_them do
+ it 'change the style' do
+ style = described_class.new
+ style.update(initial_state)
+
+ style.update(ansi_commands)
+
+ expect(style.to_s).to eq(result)
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/ansi2json_spec.rb b/spec/lib/gitlab/ci/ansi2json_spec.rb
new file mode 100644
index 00000000000..3c6bc46436b
--- /dev/null
+++ b/spec/lib/gitlab/ci/ansi2json_spec.rb
@@ -0,0 +1,544 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Ansi2json do
+ subject { described_class }
+
+ describe 'lines' do
+ it 'prints non-ansi as-is' do
+ expect(convert_json('Hello')).to eq([
+ { offset: 0, content: [{ text: 'Hello' }] }
+ ])
+ end
+
+ it 'adds new line in a separate element' do
+ expect(convert_json("Hello\nworld")).to eq([
+ { offset: 0, content: [{ text: 'Hello' }] },
+ { offset: 6, content: [{ text: 'world' }] }
+ ])
+ end
+
+ it 'recognizes color changing ANSI sequences' do
+ expect(convert_json("\e[31mHello\e[0m")).to eq([
+ { offset: 0, content: [{ text: 'Hello', style: 'term-fg-red' }] }
+ ])
+ end
+
+ it 'recognizes color changing ANSI sequences across multiple lines' do
+ expect(convert_json("\e[31mHello\nWorld\e[0m")).to eq([
+ { offset: 0, content: [{ text: 'Hello', style: 'term-fg-red' }] },
+ { offset: 11, content: [{ text: 'World', style: 'term-fg-red' }] }
+ ])
+ end
+
+ it 'recognizes background and foreground colors' do
+ expect(convert_json("\e[31;44mHello")).to eq([
+ { offset: 0, content: [{ text: 'Hello', style: 'term-fg-red term-bg-blue' }] }
+ ])
+ end
+
+ it 'recognizes style changes within the same line' do
+ expect(convert_json("\e[31;44mHello\e[0m world")).to eq([
+ { offset: 0, content: [
+ { text: 'Hello', style: 'term-fg-red term-bg-blue' },
+ { text: ' world' }
+ ] }
+ ])
+ end
+
+ context 'with section markers' do
+ let(:section_name) { 'prepare-script' }
+ let(:section_duration) { 63.seconds }
+ let(:section_start_time) { Time.new(2019, 9, 17).utc }
+ let(:section_end_time) { section_start_time + section_duration }
+ let(:section_start) { "section_start:#{section_start_time.to_i}:#{section_name}\r\033[0K"}
+ let(:section_end) { "section_end:#{section_end_time.to_i}:#{section_name}\r\033[0K"}
+
+ it 'marks the first line of the section as header' do
+ expect(convert_json("Hello#{section_start}world!")).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Hello' }]
+ },
+ {
+ offset: 5,
+ content: [{ text: 'world!' }],
+ section: 'prepare-script',
+ section_header: true
+ }
+ ])
+ end
+
+ it 'does not marks the other lines of the section as header' do
+ expect(convert_json("outside section#{section_start}Hello\nworld!")).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'outside section' }]
+ },
+ {
+ offset: 15,
+ content: [{ text: 'Hello' }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 65,
+ content: [{ text: 'world!' }],
+ section: 'prepare-script'
+ }
+ ])
+ end
+
+ it 'marks the last line of the section as footer' do
+ expect(convert_json("#{section_start}Good\nmorning\nworld!#{section_end}")).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Good' }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 49,
+ content: [{ text: 'morning' }],
+ section: 'prepare-script'
+ },
+ {
+ offset: 57,
+ content: [{ text: 'world!' }],
+ section: 'prepare-script'
+ },
+ {
+ offset: 63,
+ content: [],
+ section_duration: '01:03',
+ section: 'prepare-script'
+ },
+ {
+ offset: 63,
+ content: []
+ }
+ ])
+ end
+
+ it 'marks the first line as header and footer if is the only line in the section' do
+ expect(convert_json("#{section_start}Hello world!#{section_end}")).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Hello world!' }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 56,
+ content: [],
+ section: 'prepare-script',
+ section_duration: '01:03'
+ },
+ {
+ offset: 56,
+ content: []
+ }
+ ])
+ end
+
+ it 'does not add sections attribute to lines after the section is closed' do
+ expect(convert_json("#{section_start}Hello#{section_end}world")).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Hello' }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 49,
+ content: [],
+ section: 'prepare-script',
+ section_duration: '01:03'
+ },
+ {
+ offset: 49,
+ content: [{ text: 'world' }]
+ }
+ ])
+ end
+
+ it 'ignores section_end marker if no section_start exists' do
+ expect(convert_json("Hello #{section_end}world")).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Hello world' }]
+ }
+ ])
+ end
+
+ context 'when section name contains .-_ and capital letters' do
+ let(:section_name) { 'a.Legit-SeCtIoN_namE' }
+
+ it 'sanitizes the section name' do
+ expect(convert_json("Hello#{section_start}world!")).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Hello' }]
+ },
+ {
+ offset: 5,
+ content: [{ text: 'world!' }],
+ section: 'a-legit-section-name',
+ section_header: true
+ }
+ ])
+ end
+ end
+
+ context 'when section name includes $' do
+ let(:section_name) { 'my_$ection' }
+
+ it 'ignores the section' do
+ expect(convert_json("#{section_start}hello")).to eq([
+ {
+ offset: 0,
+ content: [{ text: "#{section_start.gsub("\033[0K", '')}hello" }]
+ }
+ ])
+ end
+ end
+
+ context 'when section name includes <' do
+ let(:section_name) { '<a_tag>' }
+
+ it 'ignores the section' do
+ expect(convert_json("#{section_start}hello")).to eq([
+ {
+ offset: 0,
+ content: [{ text: "#{section_start.gsub("\033[0K", '').gsub('<', '&lt;')}hello" }]
+ }
+ ])
+ end
+ end
+
+ it 'prevents XSS injection' do
+ trace = "#{section_start}section_end:1:2<script>alert('XSS Hack!');</script>#{section_end}"
+ expect(convert_json(trace)).to eq([
+ {
+ offset: 0,
+ content: [{ text: "section_end:1:2&lt;script>alert('XSS Hack!');&lt;/script>" }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 95,
+ content: [],
+ section: 'prepare-script',
+ section_duration: '01:03'
+ },
+ {
+ offset: 95,
+ content: []
+ }
+ ])
+ end
+
+ context 'with nested section' do
+ let(:nested_section_name) { 'prepare-script-nested' }
+ let(:nested_section_duration) { 2.seconds }
+ let(:nested_section_start_time) { Time.new(2019, 9, 17).utc }
+ let(:nested_section_end_time) { nested_section_start_time + nested_section_duration }
+ let(:nested_section_start) { "section_start:#{nested_section_start_time.to_i}:#{nested_section_name}\r\033[0K"}
+ let(:nested_section_end) { "section_end:#{nested_section_end_time.to_i}:#{nested_section_name}\r\033[0K"}
+
+ it 'adds multiple sections to the lines inside the nested section' do
+ trace = "Hello#{section_start}foo#{nested_section_start}bar#{nested_section_end}baz#{section_end}world"
+
+ expect(convert_json(trace)).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Hello' }]
+ },
+ {
+ offset: 5,
+ content: [{ text: 'foo' }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 52,
+ content: [{ text: 'bar' }],
+ section: 'prepare-script-nested',
+ section_header: true
+ },
+ {
+ offset: 106,
+ content: [],
+ section: 'prepare-script-nested',
+ section_duration: '00:02'
+ },
+ {
+ offset: 106,
+ content: [{ text: 'baz' }],
+ section: 'prepare-script'
+ },
+ {
+ offset: 158,
+ content: [],
+ section: 'prepare-script',
+ section_duration: '01:03'
+ },
+ {
+ offset: 158,
+ content: [{ text: 'world' }]
+ }
+ ])
+ end
+
+ it 'adds multiple sections to the lines inside the nested section and closes all sections together' do
+ trace = "Hello#{section_start}\e[91mfoo\e[0m#{nested_section_start}bar#{nested_section_end}#{section_end}"
+
+ expect(convert_json(trace)).to eq([
+ {
+ offset: 0,
+ content: [{ text: 'Hello' }]
+ },
+ {
+ offset: 5,
+ content: [{ text: 'foo', style: 'term-fg-l-red' }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 61,
+ content: [{ text: 'bar' }],
+ section: 'prepare-script-nested',
+ section_header: true
+ },
+ {
+ offset: 115,
+ content: [],
+ section: 'prepare-script-nested',
+ section_duration: '00:02'
+ },
+ {
+ offset: 115,
+ content: [],
+ section: 'prepare-script',
+ section_duration: '01:03'
+ },
+ {
+ offset: 164,
+ content: []
+ }
+ ])
+ end
+ end
+ end
+
+ describe 'incremental updates' do
+ let(:pass1_stream) { StringIO.new(pre_text) }
+ let(:pass2_stream) { StringIO.new(pre_text + text) }
+ let(:pass1) { subject.convert(pass1_stream) }
+ let(:pass2) { subject.convert(pass2_stream, pass1.state) }
+
+ context 'with split word' do
+ let(:pre_text) { "\e[1mHello " }
+ let(:text) { "World" }
+
+ let(:lines) do
+ [
+ { offset: 0, content: [{ text: 'Hello World', style: 'term-bold' }] }
+ ]
+ end
+
+ it 'returns the full line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_falsey
+ end
+ end
+
+ context 'with split word on second line' do
+ let(:pre_text) { "Good\nmorning " }
+ let(:text) { "World" }
+
+ let(:lines) do
+ [
+ { offset: 5, content: [{ text: 'morning World' }] }
+ ]
+ end
+
+ it 'returns all lines since last partially processed line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_truthy
+ end
+ end
+
+ context 'with split sequence across multiple lines' do
+ let(:pre_text) { "\e[1mgood\nmorning\n" }
+ let(:text) { "\e[3mworld" }
+
+ let(:lines) do
+ [
+ { offset: 17, content: [{ text: 'world', style: 'term-bold term-italic' }] }
+ ]
+ end
+
+ it 'returns the full line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_truthy
+ end
+ end
+
+ context 'with split partial sequence' do
+ let(:pre_text) { "hello\e" }
+ let(:text) { "[1m world" }
+
+ let(:lines) do
+ [
+ { offset: 0, content: [
+ { text: 'hello' },
+ { text: ' world', style: 'term-bold' }
+ ] }
+ ]
+ end
+
+ it 'returns the full line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_falsey
+ end
+ end
+
+ context 'with split new line' do
+ let(:pre_text) { "hello\r" }
+ let(:text) { "\nworld" }
+
+ let(:lines) do
+ [
+ { offset: 0, content: [{ text: 'hello' }] },
+ { offset: 7, content: [{ text: 'world' }] }
+ ]
+ end
+
+ it 'returns the full line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_falsey
+ end
+ end
+
+ context 'with split section' do
+ let(:section_name) { 'prepare-script' }
+ let(:section_duration) { 63.seconds }
+ let(:section_start_time) { Time.new(2019, 9, 17).utc }
+ let(:section_end_time) { section_start_time + section_duration }
+ let(:section_start) { "section_start:#{section_start_time.to_i}:#{section_name}\r\033[0K"}
+ let(:section_end) { "section_end:#{section_end_time.to_i}:#{section_name}\r\033[0K"}
+
+ context 'with split section body' do
+ let(:pre_text) { "#{section_start}this is a header\nand " }
+ let(:text) { "this\n is a body" }
+
+ let(:lines) do
+ [
+ {
+ offset: 61,
+ content: [{ text: 'and this' }],
+ section: 'prepare-script'
+ },
+ {
+ offset: 70,
+ content: [{ text: ' is a body' }],
+ section: 'prepare-script'
+ }
+ ]
+ end
+
+ it 'returns the full line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_truthy
+ end
+ end
+
+ context 'with split section where header is also split' do
+ let(:pre_text) { "#{section_start}this is " }
+ let(:text) { "a header\nand body" }
+
+ let(:lines) do
+ [
+ {
+ offset: 0,
+ content: [{ text: 'this is a header' }],
+ section: 'prepare-script',
+ section_header: true
+ },
+ {
+ offset: 61,
+ content: [{ text: 'and body' }],
+ section: 'prepare-script'
+ }
+ ]
+ end
+
+ it 'returns the full line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_falsey
+ end
+ end
+
+ context 'with split section end' do
+ let(:pre_text) { "#{section_start}this is a header\nthe" }
+ let(:text) { " body\nthe end#{section_end}" }
+
+ let(:lines) do
+ [
+ {
+ offset: 61,
+ content: [{ text: 'the body' }],
+ section: 'prepare-script'
+ },
+ {
+ offset: 70,
+ content: [{ text: 'the end' }],
+ section: 'prepare-script'
+ },
+ {
+ offset: 77,
+ content: [],
+ section: 'prepare-script',
+ section_duration: '01:03'
+ },
+ {
+ offset: 77,
+ content: []
+ }
+ ]
+ end
+
+ it 'returns the full line' do
+ expect(pass2.lines).to eq(lines)
+ expect(pass2.append).to be_truthy
+ end
+ end
+ end
+ end
+
+ describe 'trucates' do
+ let(:text) { "Hello World" }
+ let(:stream) { StringIO.new(text) }
+ let(:subject) { described_class.convert(stream) }
+
+ before do
+ stream.seek(3, IO::SEEK_SET)
+ end
+
+ it "returns truncated output" do
+ expect(subject.truncated).to be_truthy
+ end
+
+ it "does not append output" do
+ expect(subject.append).to be_falsey
+ end
+ end
+
+ def convert_json(data)
+ stream = StringIO.new(data)
+ subject.convert(stream).lines
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb b/spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb
index 24d17eb0fb3..73c3cad88bc 100644
--- a/spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb
+++ b/spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb
@@ -34,27 +34,32 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
describe '#basename' do
subject { |example| path(example).basename }
+
it { is_expected.to eq 'absolute_path' }
end
end
describe 'path/dir_1/', path: 'path/dir_1/' do
subject { |example| path(example) }
+
it { is_expected.to have_parent }
it { is_expected.to be_directory }
describe '#basename' do
subject { |example| path(example).basename }
+
it { is_expected.to eq 'dir_1/' }
end
describe '#name' do
subject { |example| path(example).name }
+
it { is_expected.to eq 'dir_1' }
end
describe '#parent' do
subject { |example| path(example).parent }
+
it { is_expected.to eq entry('path/') }
end
@@ -102,21 +107,25 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
describe '#nodes' do
subject { |example| path(example).nodes }
+
it { is_expected.to eq 2 }
end
describe '#exists?' do
subject { |example| path(example).exists? }
+
it { is_expected.to be true }
end
describe '#empty?' do
subject { |example| path(example).empty? }
+
it { is_expected.to be false }
end
describe '#total_size' do
subject { |example| path(example).total_size }
+
it { is_expected.to eq(30) }
end
end
@@ -124,10 +133,12 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
describe 'empty path', path: '' do
subject { |example| path(example) }
+
it { is_expected.not_to have_parent }
describe '#children' do
subject { |example| path(example).children }
+
it { expect(subject.count).to eq 3 }
end
end
@@ -135,6 +146,7 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
describe 'path/dir_1/subdir/subfile', path: 'path/dir_1/subdir/subfile' do
describe '#nodes' do
subject { |example| path(example).nodes }
+
it { is_expected.to eq 4 }
end
@@ -153,11 +165,13 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
describe 'non-existent/', path: 'non-existent/' do
describe '#empty?' do
subject { |example| path(example).empty? }
+
it { is_expected.to be true }
end
describe '#exists?' do
subject { |example| path(example).exists? }
+
it { is_expected.to be false }
end
end
@@ -165,6 +179,7 @@ describe Gitlab::Ci::Build::Artifacts::Metadata::Entry do
describe 'another_directory/', path: 'another_directory/' do
describe '#empty?' do
subject { |example| path(example).empty? }
+
it { is_expected.to be true }
end
end
diff --git a/spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb b/spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb
index ff189c4701e..bfa65c66b33 100644
--- a/spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb
+++ b/spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb
@@ -76,21 +76,25 @@ describe Gitlab::Ci::Build::Artifacts::Metadata do
describe '#to_entry' do
subject { metadata('').to_entry }
+
it { is_expected.to be_an_instance_of(Gitlab::Ci::Build::Artifacts::Metadata::Entry) }
end
describe '#full_version' do
subject { metadata('').full_version }
+
it { is_expected.to eq 'GitLab Build Artifacts Metadata 0.0.1' }
end
describe '#version' do
subject { metadata('').version }
+
it { is_expected.to eq '0.0.1' }
end
describe '#errors' do
subject { metadata('').errors }
+
it { is_expected.to eq({}) }
end
end
diff --git a/spec/lib/gitlab/ci/build/rules/rule/clause/changes_spec.rb b/spec/lib/gitlab/ci/build/rules/rule/clause/changes_spec.rb
new file mode 100644
index 00000000000..076de3646b0
--- /dev/null
+++ b/spec/lib/gitlab/ci/build/rules/rule/clause/changes_spec.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Build::Rules::Rule::Clause::Changes do
+ describe '#satisfied_by?' do
+ it_behaves_like 'a glob matching rule' do
+ let(:pipeline) { build(:ci_pipeline) }
+
+ before do
+ allow(pipeline).to receive(:modified_paths).and_return(files.keys)
+ end
+
+ subject { described_class.new(globs).satisfied_by?(pipeline, nil) }
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/build/rules/rule/clause/exists_spec.rb b/spec/lib/gitlab/ci/build/rules/rule/clause/exists_spec.rb
new file mode 100644
index 00000000000..3605bac7dfc
--- /dev/null
+++ b/spec/lib/gitlab/ci/build/rules/rule/clause/exists_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Build::Rules::Rule::Clause::Exists do
+ describe '#satisfied_by?' do
+ let(:pipeline) { build(:ci_pipeline, project: project, sha: project.repository.head_commit.sha) }
+
+ subject { described_class.new(globs).satisfied_by?(pipeline, nil) }
+
+ it_behaves_like 'a glob matching rule' do
+ let(:project) { create(:project, :custom_repo, files: files) }
+ end
+
+ context 'after pattern comparision limit is reached' do
+ let(:globs) { ['*definitely_not_a_matching_glob*'] }
+ let(:project) { create(:project, :repository) }
+
+ before do
+ stub_const('Gitlab::Ci::Build::Rules::Rule::Clause::Exists::MAX_PATTERN_COMPARISONS', 2)
+ expect(File).to receive(:fnmatch?).exactly(2).times.and_call_original
+ end
+
+ it { is_expected.to be_truthy }
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/config/edge_stages_injector_spec.rb b/spec/lib/gitlab/ci/config/edge_stages_injector_spec.rb
new file mode 100644
index 00000000000..042f9b591b6
--- /dev/null
+++ b/spec/lib/gitlab/ci/config/edge_stages_injector_spec.rb
@@ -0,0 +1,112 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+
+describe Gitlab::Ci::Config::EdgeStagesInjector do
+ describe '#call' do
+ subject { described_class.new(config).to_hash }
+
+ context 'without stages' do
+ let(:config) do
+ {
+ test: { script: 'test' }
+ }
+ end
+
+ it { is_expected.to match config }
+ end
+
+ context 'with values' do
+ let(:config) do
+ {
+ stages: %w[stage1 stage2],
+ test: { script: 'test' }
+ }
+ end
+
+ let(:expected_stages) do
+ %w[.pre stage1 stage2 .post]
+ end
+
+ it { is_expected.to match(config.merge(stages: expected_stages)) }
+ end
+
+ context 'with bad values' do
+ let(:config) do
+ {
+ stages: 'stage1',
+ test: { script: 'test' }
+ }
+ end
+
+ it { is_expected.to match(config) }
+ end
+
+ context 'with collision values' do
+ let(:config) do
+ {
+ stages: %w[.post stage1 .pre .post stage2],
+ test: { script: 'test' }
+ }
+ end
+
+ let(:expected_stages) do
+ %w[.pre stage1 stage2 .post]
+ end
+
+ it { is_expected.to match(config.merge(stages: expected_stages)) }
+ end
+
+ context 'with types' do
+ let(:config) do
+ {
+ types: %w[stage1 stage2],
+ test: { script: 'test' }
+ }
+ end
+
+ let(:expected_config) do
+ {
+ types: %w[.pre stage1 stage2 .post],
+ test: { script: 'test' }
+ }
+ end
+
+ it { is_expected.to match expected_config }
+ end
+
+ context 'with types' do
+ let(:config) do
+ {
+ types: %w[.post stage1 .pre .post stage2],
+ test: { script: 'test' }
+ }
+ end
+
+ let(:expected_config) do
+ {
+ types: %w[.pre stage1 stage2 .post],
+ test: { script: 'test' }
+ }
+ end
+
+ it { is_expected.to match expected_config }
+ end
+ end
+
+ describe '.wrap_stages' do
+ subject { described_class.wrap_stages(stages) }
+
+ context 'with empty value' do
+ let(:stages) {}
+
+ it { is_expected.to eq %w[.pre .post] }
+ end
+
+ context 'with values' do
+ let(:stages) { %w[s1 .pre] }
+
+ it { is_expected.to eq %w[.pre s1 .post] }
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/config/entry/cache_spec.rb b/spec/lib/gitlab/ci/config/entry/cache_spec.rb
index 4cb63168ec7..9aab3664e1c 100644
--- a/spec/lib/gitlab/ci/config/entry/cache_spec.rb
+++ b/spec/lib/gitlab/ci/config/entry/cache_spec.rb
@@ -69,6 +69,7 @@ describe Gitlab::Ci::Config::Entry::Cache do
context 'when entry value is not correct' do
describe '#errors' do
subject { entry.errors }
+
context 'when is not a hash' do
let(:config) { 'ls' }
diff --git a/spec/lib/gitlab/ci/config/entry/coverage_spec.rb b/spec/lib/gitlab/ci/config/entry/coverage_spec.rb
index 48d0864cfca..877e3ec6216 100644
--- a/spec/lib/gitlab/ci/config/entry/coverage_spec.rb
+++ b/spec/lib/gitlab/ci/config/entry/coverage_spec.rb
@@ -11,11 +11,13 @@ describe Gitlab::Ci::Config::Entry::Coverage do
describe '#errors' do
subject { entry.errors }
+
it { is_expected.to include(/coverage config must be a regular expression/) }
end
describe '#valid?' do
subject { entry }
+
it { is_expected.not_to be_valid }
end
end
@@ -25,16 +27,19 @@ describe Gitlab::Ci::Config::Entry::Coverage do
describe '#value' do
subject { entry.value }
+
it { is_expected.to eq(config[1...-1]) }
end
describe '#errors' do
subject { entry.errors }
+
it { is_expected.to be_empty }
end
describe '#valid?' do
subject { entry }
+
it { is_expected.to be_valid }
end
end
@@ -44,11 +49,13 @@ describe Gitlab::Ci::Config::Entry::Coverage do
describe '#errors' do
subject { entry.errors }
+
it { is_expected.to include(/coverage config must be a regular expression/) }
end
describe '#valid?' do
subject { entry }
+
it { is_expected.not_to be_valid }
end
end
diff --git a/spec/lib/gitlab/ci/config/entry/root_spec.rb b/spec/lib/gitlab/ci/config/entry/root_spec.rb
index 968dbb9c7f2..7e1a80414d4 100644
--- a/spec/lib/gitlab/ci/config/entry/root_spec.rb
+++ b/spec/lib/gitlab/ci/config/entry/root_spec.rb
@@ -215,7 +215,7 @@ describe Gitlab::Ci::Config::Entry::Root do
describe '#stages_value' do
it 'returns an array of root stages' do
- expect(root.stages_value).to eq %w[build test deploy]
+ expect(root.stages_value).to eq %w[.pre build test deploy .post]
end
end
diff --git a/spec/lib/gitlab/ci/config/entry/rules/rule_spec.rb b/spec/lib/gitlab/ci/config/entry/rules/rule_spec.rb
index 18037a5612c..9d4f7153cd0 100644
--- a/spec/lib/gitlab/ci/config/entry/rules/rule_spec.rb
+++ b/spec/lib/gitlab/ci/config/entry/rules/rule_spec.rb
@@ -103,6 +103,52 @@ describe Gitlab::Ci::Config::Entry::Rules::Rule do
end
end
+ context 'when using a long list as an invalid changes: clause' do
+ let(:config) { { changes: ['app/'] * 51 } }
+
+ it { is_expected.not_to be_valid }
+
+ it 'returns errors' do
+ expect(subject.errors).to include(/changes is too long \(maximum is 50 characters\)/)
+ end
+ end
+
+ context 'when using a exists: clause' do
+ let(:config) { { exists: %w[app/ lib/ spec/ other/* paths/**/*.rb] } }
+
+ it { is_expected.to be_valid }
+ end
+
+ context 'when using a string as an invalid exists: clause' do
+ let(:config) { { exists: 'a regular string' } }
+
+ it { is_expected.not_to be_valid }
+
+ it 'reports an error about invalid policy' do
+ expect(subject.errors).to include(/should be an array of strings/)
+ end
+ end
+
+ context 'when using a list as an invalid exists: clause' do
+ let(:config) { { exists: [1, 2] } }
+
+ it { is_expected.not_to be_valid }
+
+ it 'returns errors' do
+ expect(subject.errors).to include(/exists should be an array of strings/)
+ end
+ end
+
+ context 'when using a long list as an invalid exists: clause' do
+ let(:config) { { exists: ['app/'] * 51 } }
+
+ it { is_expected.not_to be_valid }
+
+ it 'returns errors' do
+ expect(subject.errors).to include(/exists is too long \(maximum is 50 characters\)/)
+ end
+ end
+
context 'specifying a delayed job' do
let(:config) { { if: '$THIS || $THAT', when: 'delayed', start_in: '15 minutes' } }
@@ -198,6 +244,12 @@ describe Gitlab::Ci::Config::Entry::Rules::Rule do
expect(entry.value).to eq(config)
end
end
+
+ context 'when using a exists: clause' do
+ let(:config) { { exists: %w[app/ lib/ spec/ other/* paths/**/*.rb] } }
+
+ it { is_expected.to eq(config) }
+ end
end
describe '.default' do
diff --git a/spec/lib/gitlab/ci/config/entry/stages_spec.rb b/spec/lib/gitlab/ci/config/entry/stages_spec.rb
index 97970522104..3e6ff8eca28 100644
--- a/spec/lib/gitlab/ci/config/entry/stages_spec.rb
+++ b/spec/lib/gitlab/ci/config/entry/stages_spec.rb
@@ -42,7 +42,7 @@ describe Gitlab::Ci::Config::Entry::Stages do
describe '.default' do
it 'returns default stages' do
- expect(described_class.default).to eq %w[build test deploy]
+ expect(described_class.default).to eq %w[.pre build test deploy .post]
end
end
end
diff --git a/spec/lib/gitlab/ci/config/external/context_spec.rb b/spec/lib/gitlab/ci/config/external/context_spec.rb
new file mode 100644
index 00000000000..610646ca85a
--- /dev/null
+++ b/spec/lib/gitlab/ci/config/external/context_spec.rb
@@ -0,0 +1,128 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+
+describe Gitlab::Ci::Config::External::Context do
+ let(:project) { double('Project') }
+ let(:user) { double('User') }
+ let(:sha) { '12345' }
+ let(:attributes) { { project: project, user: user, sha: sha } }
+
+ subject(:subject) { described_class.new(**attributes) }
+
+ describe 'attributes' do
+ context 'with values' do
+ it { is_expected.to have_attributes(**attributes) }
+ it { expect(subject.expandset).to eq(Set.new) }
+ it { expect(subject.execution_deadline).to eq(0) }
+ end
+
+ context 'without values' do
+ let(:attributes) { { project: nil, user: nil, sha: nil } }
+
+ it { is_expected.to have_attributes(**attributes) }
+ it { expect(subject.expandset).to eq(Set.new) }
+ it { expect(subject.execution_deadline).to eq(0) }
+ end
+ end
+
+ describe '#set_deadline' do
+ let(:stubbed_time) { 1 }
+
+ before do
+ allow(subject).to receive(:current_monotonic_time).and_return(stubbed_time)
+ end
+
+ context 'with a float value' do
+ let(:timeout_seconds) { 10.5.seconds }
+
+ it 'updates execution_deadline' do
+ expect { subject.set_deadline(timeout_seconds) }
+ .to change { subject.execution_deadline }
+ .to(timeout_seconds + stubbed_time)
+ end
+ end
+
+ context 'with nil as a value' do
+ let(:timeout_seconds) {}
+
+ it 'updates execution_deadline' do
+ expect { subject.set_deadline(timeout_seconds) }
+ .to change { subject.execution_deadline }
+ .to(stubbed_time)
+ end
+ end
+ end
+
+ describe '#check_execution_time!' do
+ before do
+ allow(subject).to receive(:current_monotonic_time).and_return(stubbed_time)
+ allow(subject).to receive(:execution_deadline).and_return(stubbed_deadline)
+ end
+
+ context 'when execution is expired' do
+ let(:stubbed_time) { 2 }
+ let(:stubbed_deadline) { 1 }
+
+ it 'raises an error' do
+ expect { subject.check_execution_time! }
+ .to raise_error(described_class::TimeoutError)
+ end
+ end
+
+ context 'when execution is not expired' do
+ let(:stubbed_time) { 1 }
+ let(:stubbed_deadline) { 2 }
+
+ it 'does not raises any errors' do
+ expect { subject.check_execution_time! }.not_to raise_error
+ end
+ end
+
+ context 'without setting a deadline' do
+ let(:stubbed_time) { 2 }
+ let(:stubbed_deadline) { 1 }
+
+ before do
+ allow(subject).to receive(:execution_deadline).and_call_original
+ end
+
+ it 'does not raises any errors' do
+ expect { subject.check_execution_time! }.not_to raise_error
+ end
+ end
+ end
+
+ describe '#mutate' do
+ shared_examples 'a mutated context' do
+ let(:mutated) { subject.mutate(new_attributes) }
+
+ before do
+ subject.expandset << :a_file
+ subject.set_deadline(15.seconds)
+ end
+
+ it { expect(mutated).not_to eq(subject) }
+ it { expect(mutated).to be_a(described_class) }
+ it { expect(mutated).to have_attributes(new_attributes) }
+ it { expect(mutated.expandset).to eq(subject.expandset) }
+ it { expect(mutated.execution_deadline).to eq(mutated.execution_deadline) }
+ end
+
+ context 'with attributes' do
+ let(:new_attributes) { { project: double, user: double, sha: '56789' } }
+
+ it_behaves_like 'a mutated context'
+ end
+
+ context 'without attributes' do
+ let(:new_attributes) { {} }
+
+ it_behaves_like 'a mutated context'
+ end
+ end
+
+ describe '#sentry_payload' do
+ it { expect(subject.sentry_payload).to match(a_hash_including(:project, :user)) }
+ end
+end
diff --git a/spec/lib/gitlab/ci/config/external/file/base_spec.rb b/spec/lib/gitlab/ci/config/external/file/base_spec.rb
index af995f4869a..d472d6527e2 100644
--- a/spec/lib/gitlab/ci/config/external/file/base_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/base_spec.rb
@@ -1,13 +1,14 @@
# frozen_string_literal: true
-require 'fast_spec_helper'
+require 'spec_helper'
describe Gitlab::Ci::Config::External::File::Base do
- let(:context) { described_class::Context.new(nil, 'HEAD', nil, Set.new) }
+ let(:context_params) { { sha: 'HEAD' } }
+ let(:context) { Gitlab::Ci::Config::External::Context.new(**context_params) }
let(:test_class) do
Class.new(described_class) do
- def initialize(params, context = {})
+ def initialize(params, context)
@location = params
super
@@ -20,6 +21,9 @@ describe Gitlab::Ci::Config::External::File::Base do
before do
allow_any_instance_of(test_class)
.to receive(:content).and_return('key: value')
+
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
end
describe '#matching?' do
diff --git a/spec/lib/gitlab/ci/config/external/file/local_spec.rb b/spec/lib/gitlab/ci/config/external/file/local_spec.rb
index 9451db9522a..95f0c93e758 100644
--- a/spec/lib/gitlab/ci/config/external/file/local_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/local_spec.rb
@@ -7,10 +7,17 @@ describe Gitlab::Ci::Config::External::File::Local do
set(:user) { create(:user) }
let(:sha) { '12345' }
- let(:context) { described_class::Context.new(project, sha, user, Set.new) }
+ let(:context_params) { { project: project, sha: sha, user: user } }
+ let(:context) { Gitlab::Ci::Config::External::Context.new(**context_params) }
+
let(:params) { { local: location } }
let(:local_file) { described_class.new(params, context) }
+ before do
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
+ end
+
describe '#matching?' do
context 'when a local is specified' do
let(:params) { { local: 'file' } }
@@ -109,7 +116,7 @@ describe Gitlab::Ci::Config::External::File::Local do
describe '#expand_context' do
let(:location) { 'location.yml' }
- subject { local_file.send(:expand_context) }
+ subject { local_file.send(:expand_context_attrs) }
it 'inherits project, user and sha' do
is_expected.to include(user: user, project: project, sha: sha)
diff --git a/spec/lib/gitlab/ci/config/external/file/project_spec.rb b/spec/lib/gitlab/ci/config/external/file/project_spec.rb
index 4acb4f324d3..dd869c227a1 100644
--- a/spec/lib/gitlab/ci/config/external/file/project_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/project_spec.rb
@@ -8,11 +8,15 @@ describe Gitlab::Ci::Config::External::File::Project do
set(:user) { create(:user) }
let(:context_user) { user }
- let(:context) { described_class::Context.new(context_project, '12345', context_user, Set.new) }
+ let(:context_params) { { project: context_project, sha: '12345', user: context_user } }
+ let(:context) { Gitlab::Ci::Config::External::Context.new(**context_params) }
let(:project_file) { described_class.new(params, context) }
before do
project.add_developer(user)
+
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
end
describe '#matching?' do
@@ -145,7 +149,7 @@ describe Gitlab::Ci::Config::External::File::Project do
describe '#expand_context' do
let(:params) { { file: 'file.yml', project: project.full_path, ref: 'master' } }
- subject { project_file.send(:expand_context) }
+ subject { project_file.send(:expand_context_attrs) }
it 'inherits user, and target project and sha' do
is_expected.to include(user: user, project: project, sha: project.commit('master').id)
diff --git a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
index 4a097b59216..08db00dda9d 100644
--- a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
@@ -5,7 +5,8 @@ require 'spec_helper'
describe Gitlab::Ci::Config::External::File::Remote do
include StubRequests
- let(:context) { described_class::Context.new(nil, '12345', nil, Set.new) }
+ let(:context_params) { { sha: '12345' } }
+ let(:context) { Gitlab::Ci::Config::External::Context.new(**context_params) }
let(:params) { { remote: location } }
let(:remote_file) { described_class.new(params, context) }
let(:location) { 'https://gitlab.com/gitlab-org/gitlab-foss/blob/1234/.gitlab-ci-1.yml' }
@@ -19,6 +20,11 @@ describe Gitlab::Ci::Config::External::File::Remote do
HEREDOC
end
+ before do
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
+ end
+
describe '#matching?' do
context 'when a remote is specified' do
let(:params) { { remote: 'http://remote' } }
@@ -187,10 +193,10 @@ describe Gitlab::Ci::Config::External::File::Remote do
describe '#expand_context' do
let(:params) { { remote: 'http://remote' } }
- subject { remote_file.send(:expand_context) }
+ subject { remote_file.send(:expand_context_attrs) }
it 'drops all parameters' do
- is_expected.to include(user: nil, project: nil, sha: nil)
+ is_expected.to be_empty
end
end
end
diff --git a/spec/lib/gitlab/ci/config/external/file/template_spec.rb b/spec/lib/gitlab/ci/config/external/file/template_spec.rb
index 1609b8fd66b..164b5800abf 100644
--- a/spec/lib/gitlab/ci/config/external/file/template_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/template_spec.rb
@@ -6,12 +6,18 @@ describe Gitlab::Ci::Config::External::File::Template do
set(:project) { create(:project) }
set(:user) { create(:user) }
- let(:context) { described_class::Context.new(project, '12345', user, Set.new) }
+ let(:context_params) { { project: project, sha: '12345', user: user } }
+ let(:context) { Gitlab::Ci::Config::External::Context.new(**context_params) }
let(:template) { 'Auto-DevOps.gitlab-ci.yml' }
let(:params) { { template: template } }
let(:template_file) { described_class.new(params, context) }
+ before do
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
+ end
+
describe '#matching?' do
context 'when a template is specified' do
let(:params) { { template: 'some-template' } }
@@ -97,10 +103,10 @@ describe Gitlab::Ci::Config::External::File::Template do
describe '#expand_context' do
let(:location) { 'location.yml' }
- subject { template_file.send(:expand_context) }
+ subject { template_file.send(:expand_context_attrs) }
it 'drops all parameters' do
- is_expected.to include(user: nil, project: nil, sha: nil)
+ is_expected.to be_empty
end
end
end
diff --git a/spec/lib/gitlab/ci/config/external/mapper_spec.rb b/spec/lib/gitlab/ci/config/external/mapper_spec.rb
index 43708852594..8d09aa47f12 100644
--- a/spec/lib/gitlab/ci/config/external/mapper_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/mapper_spec.rb
@@ -11,7 +11,8 @@ describe Gitlab::Ci::Config::External::Mapper do
let(:local_file) { '/lib/gitlab/ci/templates/non-existent-file.yml' }
let(:remote_url) { 'https://gitlab.com/gitlab-org/gitlab-foss/blob/1234/.gitlab-ci-1.yml' }
let(:template_file) { 'Auto-DevOps.gitlab-ci.yml' }
- let(:expandset) { Set.new }
+ let(:context_params) { { project: project, sha: '123456', user: user } }
+ let(:context) { Gitlab::Ci::Config::External::Context.new(**context_params) }
let(:file_content) do
<<~HEREDOC
@@ -21,10 +22,13 @@ describe Gitlab::Ci::Config::External::Mapper do
before do
stub_full_request(remote_url).to_return(body: file_content)
+
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
end
describe '#process' do
- subject { described_class.new(values, project: project, sha: '123456', user: user, expandset: expandset).process }
+ subject { described_class.new(values, context).process }
context "when single 'include' keyword is defined" do
context 'when the string is a local file' do
diff --git a/spec/lib/gitlab/ci/config/external/processor_spec.rb b/spec/lib/gitlab/ci/config/external/processor_spec.rb
index 3b1a1e804f0..bb2d3f66972 100644
--- a/spec/lib/gitlab/ci/config/external/processor_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/processor_spec.rb
@@ -9,12 +9,16 @@ describe Gitlab::Ci::Config::External::Processor do
set(:another_project) { create(:project, :repository) }
set(:user) { create(:user) }
- let(:expandset) { Set.new }
let(:sha) { '12345' }
- let(:processor) { described_class.new(values, project: project, sha: '12345', user: user, expandset: expandset) }
+ let(:context_params) { { project: project, sha: sha, user: user } }
+ let(:context) { Gitlab::Ci::Config::External::Context.new(**context_params) }
+ let(:processor) { described_class.new(values, context) }
before do
project.add_developer(user)
+
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
end
describe "#perform" do
diff --git a/spec/lib/gitlab/ci/config_spec.rb b/spec/lib/gitlab/ci/config_spec.rb
index 839b4f9261d..b254f9af2f1 100644
--- a/spec/lib/gitlab/ci/config_spec.rb
+++ b/spec/lib/gitlab/ci/config_spec.rb
@@ -7,6 +7,11 @@ describe Gitlab::Ci::Config do
set(:user) { create(:user) }
+ before do
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
+ end
+
let(:config) do
described_class.new(yml, project: nil, sha: nil, user: nil)
end
@@ -46,6 +51,54 @@ describe Gitlab::Ci::Config do
end
end
end
+
+ describe '#stages' do
+ subject(:subject) { config.stages }
+
+ context 'with default stages' do
+ let(:default_stages) do
+ %w[.pre build test deploy .post]
+ end
+
+ it { is_expected.to eq default_stages }
+ end
+
+ context 'with custom stages' do
+ let(:yml) do
+ <<-EOS
+ stages:
+ - stage1
+ - stage2
+ job1:
+ stage: stage1
+ script:
+ - ls
+ EOS
+ end
+
+ it { is_expected.to eq %w[.pre stage1 stage2 .post] }
+ end
+
+ context 'with feature disabled' do
+ before do
+ stub_feature_flags(ci_pre_post_pipeline_stages: false)
+ end
+
+ let(:yml) do
+ <<-EOS
+ stages:
+ - stage1
+ - stage2
+ job1:
+ stage: stage1
+ script:
+ - ls
+ EOS
+ end
+
+ it { is_expected.to eq %w[stage1 stage2] }
+ end
+ end
end
context 'when using extendable hash' do
@@ -303,6 +356,49 @@ describe Gitlab::Ci::Config do
end
end
+ context "when it takes too long to evaluate includes" do
+ before do
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
+ .and_call_original
+
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:set_deadline)
+ .with(described_class::TIMEOUT_SECONDS)
+ .and_call_original
+
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:execution_expired?)
+ .and_return(true)
+ end
+
+ it 'raises error TimeoutError' do
+ expect(Gitlab::Sentry).to receive(:track_exception)
+
+ expect { config }.to raise_error(
+ described_class::ConfigError,
+ 'Resolving config took longer than expected'
+ )
+ end
+ end
+
+ context 'when context expansion timeout is disabled' do
+ before do
+ allow_any_instance_of(Gitlab::Ci::Config::External::Context)
+ .to receive(:check_execution_time!)
+ .and_call_original
+
+ allow(Feature)
+ .to receive(:enabled?)
+ .with(:ci_limit_yaml_expansion, project, default_enabled: true)
+ .and_return(false)
+ end
+
+ it 'does not raises errors' do
+ expect { config }.not_to raise_error
+ end
+ end
+
describe 'external file version' do
context 'when external local file SHA is defined' do
it 'is using a defined value' do
diff --git a/spec/lib/gitlab/ci/parsers/test/junit_spec.rb b/spec/lib/gitlab/ci/parsers/test/junit_spec.rb
index 8ff60710f67..6a7fe7a5927 100644
--- a/spec/lib/gitlab/ci/parsers/test/junit_spec.rb
+++ b/spec/lib/gitlab/ci/parsers/test/junit_spec.rb
@@ -38,12 +38,14 @@ describe Gitlab::Ci::Parsers::Test::Junit do
end
end
- context 'when there is only one <testcase> in <testsuite>' do
+ context 'when there is only one <testsuite> in <testsuites>' do
let(:junit) do
<<-EOF.strip_heredoc
- <testsuite>
- <testcase classname='Calculator' name='sumTest1' time='0.01'></testcase>
- </testsuite>
+ <testsuites>
+ <testsuite>
+ <testcase classname='Calculator' name='sumTest1' time='0.01'></testcase>
+ </testsuite>
+ </testsuites>
EOF
end
@@ -56,23 +58,65 @@ describe Gitlab::Ci::Parsers::Test::Junit do
end
end
- context 'when there is only one <testsuite> in <testsuites>' do
+ context 'when there is <testcase>' do
let(:junit) do
<<-EOF.strip_heredoc
- <testsuites>
<testsuite>
- <testcase classname='Calculator' name='sumTest1' time='0.01'></testcase>
+ <testcase classname='Calculator' name='sumTest1' time='0.01'>
+ #{testcase_content}
+ </testcase>
</testsuite>
- </testsuites>
EOF
end
- it 'parses XML and adds a test case to a suite' do
+ let(:test_case) { test_cases[0] }
+
+ before do
expect { subject }.not_to raise_error
+ end
- expect(test_cases[0].classname).to eq('Calculator')
- expect(test_cases[0].name).to eq('sumTest1')
- expect(test_cases[0].execution_time).to eq(0.01)
+ shared_examples_for '<testcase> XML parser' do |status, output|
+ it 'parses XML and adds a test case to the suite' do
+ aggregate_failures do
+ expect(test_case.classname).to eq('Calculator')
+ expect(test_case.name).to eq('sumTest1')
+ expect(test_case.execution_time).to eq(0.01)
+ expect(test_case.status).to eq(status)
+ expect(test_case.system_output).to eq(output)
+ end
+ end
+ end
+
+ context 'and has failure' do
+ let(:testcase_content) { '<failure>Some failure</failure>' }
+
+ it_behaves_like '<testcase> XML parser',
+ ::Gitlab::Ci::Reports::TestCase::STATUS_FAILED,
+ 'Some failure'
+ end
+
+ context 'and has error' do
+ let(:testcase_content) { '<error>Some error</error>' }
+
+ it_behaves_like '<testcase> XML parser',
+ ::Gitlab::Ci::Reports::TestCase::STATUS_FAILED,
+ 'Some error'
+ end
+
+ context 'and has an unknown type' do
+ let(:testcase_content) { '<foo>Some foo</foo>' }
+
+ it_behaves_like '<testcase> XML parser',
+ ::Gitlab::Ci::Reports::TestCase::STATUS_SUCCESS,
+ nil
+ end
+
+ context 'and has no content' do
+ let(:testcase_content) { '' }
+
+ it_behaves_like '<testcase> XML parser',
+ ::Gitlab::Ci::Reports::TestCase::STATUS_SUCCESS,
+ nil
end
end
diff --git a/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb b/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb
index 023d7530b4b..945baf47b7b 100644
--- a/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb
@@ -117,6 +117,24 @@ describe Gitlab::Ci::Pipeline::Seed::Build do
context 'when job is not a bridge' do
it { is_expected.to be_a(::Ci::Build) }
it { is_expected.to be_valid }
+
+ context 'when job has environment name' do
+ let(:attributes) { { name: 'rspec', ref: 'master', environment: 'production' } }
+
+ it 'returns a job with deployment' do
+ expect(subject.deployment).not_to be_nil
+ expect(subject.deployment.deployable).to eq(subject)
+ expect(subject.deployment.environment.name).to eq('production')
+ end
+
+ context 'when the environment name is invalid' do
+ let(:attributes) { { name: 'rspec', ref: 'master', environment: '!!!' } }
+
+ it 'returns a job without deployment' do
+ expect(subject.deployment).to be_nil
+ end
+ end
+ end
end
context 'when job is a bridge' do
diff --git a/spec/lib/gitlab/ci/pipeline/seed/deployment_spec.rb b/spec/lib/gitlab/ci/pipeline/seed/deployment_spec.rb
new file mode 100644
index 00000000000..4e63f60ea6b
--- /dev/null
+++ b/spec/lib/gitlab/ci/pipeline/seed/deployment_spec.rb
@@ -0,0 +1,76 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Pipeline::Seed::Deployment do
+ let_it_be(:project) { create(:project) }
+ let(:job) { build(:ci_build, project: project) }
+ let(:seed) { described_class.new(job) }
+ let(:attributes) { {} }
+
+ before do
+ job.assign_attributes(**attributes)
+ end
+
+ describe '#to_resource' do
+ subject { seed.to_resource }
+
+ context 'when job has environment attribute' do
+ let(:attributes) do
+ {
+ environment: 'production',
+ options: { environment: { name: 'production' } }
+ }
+ end
+
+ it 'returns a deployment object with environment' do
+ expect(subject).to be_a(Deployment)
+ expect(subject.iid).to be_present
+ expect(subject.environment.name).to eq('production')
+ expect(subject.cluster).to be_nil
+ end
+
+ context 'when environment has deployment platform' do
+ let!(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
+
+ it 'returns a deployment with cluster id' do
+ expect(subject.cluster).to eq(cluster)
+ end
+ end
+
+ context 'when environment has an invalid URL' do
+ let(:attributes) do
+ {
+ environment: '!!!',
+ options: { environment: { name: '!!!' } }
+ }
+ end
+
+ it 'returns nothing' do
+ is_expected.to be_nil
+ end
+ end
+
+ context 'when job has already deployment' do
+ let(:job) { build(:ci_build, :with_deployment, project: project, environment: 'production') }
+
+ it 'returns the persisted deployment' do
+ is_expected.to eq(job.deployment)
+ end
+ end
+ end
+
+ context 'when job has environment attribute with stop action' do
+ let(:attributes) do
+ {
+ environment: 'production',
+ options: { environment: { name: 'production', action: 'stop' } }
+ }
+ end
+
+ it 'returns nothing' do
+ is_expected.to be_nil
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb b/spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb
new file mode 100644
index 00000000000..71389999c6e
--- /dev/null
+++ b/spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Pipeline::Seed::Environment do
+ let_it_be(:project) { create(:project) }
+ let(:job) { build(:ci_build, project: project) }
+ let(:seed) { described_class.new(job) }
+ let(:attributes) { {} }
+
+ before do
+ job.assign_attributes(**attributes)
+ end
+
+ describe '#to_resource' do
+ subject { seed.to_resource }
+
+ context 'when job has environment attribute' do
+ let(:attributes) do
+ {
+ environment: 'production',
+ options: { environment: { name: 'production' } }
+ }
+ end
+
+ it 'returns a persisted environment object' do
+ expect(subject).to be_a(Environment)
+ expect(subject).to be_persisted
+ expect(subject.project).to eq(project)
+ expect(subject.name).to eq('production')
+ end
+
+ context 'when environment has already existed' do
+ let!(:environment) { create(:environment, project: project, name: 'production') }
+
+ it 'returns the existing environment object' do
+ expect(subject).to be_persisted
+ expect(subject).to eq(environment)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/composite_spec.rb b/spec/lib/gitlab/ci/status/composite_spec.rb
new file mode 100644
index 00000000000..1725d954b92
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/composite_spec.rb
@@ -0,0 +1,61 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Composite do
+ set(:pipeline) { create(:ci_pipeline) }
+
+ before(:all) do
+ @statuses = HasStatus::STATUSES_ENUM.map do |status, idx|
+ [status, create(:ci_build, pipeline: pipeline, status: status, importing: true)]
+ end.to_h
+
+ @statuses_with_allow_failure = HasStatus::STATUSES_ENUM.map do |status, idx|
+ [status, create(:ci_build, pipeline: pipeline, status: status, allow_failure: true, importing: true)]
+ end.to_h
+ end
+
+ describe '#status' do
+ shared_examples 'compares composite with SQL status' do
+ it 'returns exactly the same result' do
+ builds = Ci::Build.where(id: all_statuses)
+
+ expect(composite_status.status).to eq(builds.legacy_status)
+ expect(composite_status.warnings?).to eq(builds.failed_but_allowed.any?)
+ end
+ end
+
+ shared_examples 'validate all combinations' do |perms|
+ HasStatus::STATUSES_ENUM.keys.combination(perms).each do |statuses|
+ context "with #{statuses.join(",")}" do
+ it_behaves_like 'compares composite with SQL status' do
+ let(:all_statuses) do
+ statuses.map { |status| @statuses[status] }
+ end
+
+ let(:composite_status) do
+ described_class.new(all_statuses)
+ end
+ end
+
+ HasStatus::STATUSES_ENUM.each do |allow_failure_status, _|
+ context "and allow_failure #{allow_failure_status}" do
+ it_behaves_like 'compares composite with SQL status' do
+ let(:all_statuses) do
+ statuses.map { |status| @statuses[status] } +
+ [@statuses_with_allow_failure[allow_failure_status]]
+ end
+
+ let(:composite_status) do
+ described_class.new(all_statuses)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ it_behaves_like 'validate all combinations', 0
+ it_behaves_like 'validate all combinations', 1
+ it_behaves_like 'validate all combinations', 2
+ end
+end
diff --git a/spec/lib/gitlab/ci/status/external/factory_spec.rb b/spec/lib/gitlab/ci/status/external/factory_spec.rb
index 3b90fb60cca..9d7dfc42848 100644
--- a/spec/lib/gitlab/ci/status/external/factory_spec.rb
+++ b/spec/lib/gitlab/ci/status/external/factory_spec.rb
@@ -22,7 +22,7 @@ describe Gitlab::Ci::Status::External::Factory do
end
let(:expected_status) do
- Gitlab::Ci::Status.const_get(simple_status.capitalize)
+ Gitlab::Ci::Status.const_get(simple_status.capitalize, false)
end
it "fabricates a core status #{simple_status}" do
diff --git a/spec/lib/gitlab/ci/status/factory_spec.rb b/spec/lib/gitlab/ci/status/factory_spec.rb
index b51c0bec47e..c6d7a1ec5d9 100644
--- a/spec/lib/gitlab/ci/status/factory_spec.rb
+++ b/spec/lib/gitlab/ci/status/factory_spec.rb
@@ -13,7 +13,7 @@ describe Gitlab::Ci::Status::Factory do
let(:resource) { double('resource', status: simple_status) }
let(:expected_status) do
- Gitlab::Ci::Status.const_get(simple_status.capitalize)
+ Gitlab::Ci::Status.const_get(simple_status.capitalize, false)
end
it "fabricates a core status #{simple_status}" do
diff --git a/spec/lib/gitlab/ci/status/pipeline/factory_spec.rb b/spec/lib/gitlab/ci/status/pipeline/factory_spec.rb
index 8a36cd1b658..3acc767ab7a 100644
--- a/spec/lib/gitlab/ci/status/pipeline/factory_spec.rb
+++ b/spec/lib/gitlab/ci/status/pipeline/factory_spec.rb
@@ -18,7 +18,7 @@ describe Gitlab::Ci::Status::Pipeline::Factory do
let(:pipeline) { create(:ci_pipeline, status: simple_status) }
let(:expected_status) do
- Gitlab::Ci::Status.const_get(simple_status.capitalize)
+ Gitlab::Ci::Status.const_get(simple_status.capitalize, false)
end
it "matches correct core status for #{simple_status}" do
diff --git a/spec/lib/gitlab/ci/status/preparing_spec.rb b/spec/lib/gitlab/ci/status/preparing_spec.rb
index 7211c0e506d..33f6bab8d65 100644
--- a/spec/lib/gitlab/ci/status/preparing_spec.rb
+++ b/spec/lib/gitlab/ci/status/preparing_spec.rb
@@ -16,11 +16,11 @@ describe Gitlab::Ci::Status::Preparing do
end
describe '#icon' do
- it { expect(subject.icon).to eq 'status_created' }
+ it { expect(subject.icon).to eq 'status_preparing' }
end
describe '#favicon' do
- it { expect(subject.favicon).to eq 'favicon_status_created' }
+ it { expect(subject.favicon).to eq 'favicon_status_preparing' }
end
describe '#group' do
diff --git a/spec/lib/gitlab/ci/status/stage/factory_spec.rb b/spec/lib/gitlab/ci/status/stage/factory_spec.rb
index 8f5b1ff62a5..dcb53712157 100644
--- a/spec/lib/gitlab/ci/status/stage/factory_spec.rb
+++ b/spec/lib/gitlab/ci/status/stage/factory_spec.rb
@@ -34,7 +34,7 @@ describe Gitlab::Ci::Status::Stage::Factory do
it "fabricates a core status #{core_status}" do
expect(status).to be_a(
- Gitlab::Ci::Status.const_get(core_status.capitalize))
+ Gitlab::Ci::Status.const_get(core_status.capitalize, false))
end
it 'extends core status with common stage methods' do
diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb
index dd5f2f97ac9..1baea13299b 100644
--- a/spec/lib/gitlab/ci/trace/stream_spec.rb
+++ b/spec/lib/gitlab/ci/trace/stream_spec.rb
@@ -248,60 +248,6 @@ describe Gitlab::Ci::Trace::Stream, :clean_gitlab_redis_cache do
end
end
- describe '#html_with_state' do
- shared_examples_for 'html_with_states' do
- it 'returns html content with state' do
- result = stream.html_with_state
-
- expect(result.html).to eq("<span>1234</span>")
- end
-
- context 'follow-up state' do
- let!(:last_result) { stream.html_with_state }
-
- before do
- data_stream.seek(4, IO::SEEK_SET)
- data_stream.write("5678")
- stream.seek(0)
- end
-
- it "returns appended trace" do
- result = stream.html_with_state(last_result.state)
-
- expect(result.append).to be_truthy
- expect(result.html).to eq("<span>5678</span>")
- end
- end
- end
-
- context 'when stream is StringIO' do
- let(:data_stream) do
- StringIO.new("1234")
- end
-
- let(:stream) do
- described_class.new { data_stream }
- end
-
- it_behaves_like 'html_with_states'
- end
-
- context 'when stream is ChunkedIO' do
- let(:data_stream) do
- Gitlab::Ci::Trace::ChunkedIO.new(build).tap do |chunked_io|
- chunked_io.write("1234")
- chunked_io.seek(0, IO::SEEK_SET)
- end
- end
-
- let(:stream) do
- described_class.new { data_stream }
- end
-
- it_behaves_like 'html_with_states'
- end
- end
-
describe '#html' do
shared_examples_for 'htmls' do
it "returns html" do
diff --git a/spec/lib/gitlab/ci/yaml_processor_spec.rb b/spec/lib/gitlab/ci/yaml_processor_spec.rb
index d43eb4e4b4a..cb5ebde16d7 100644
--- a/spec/lib/gitlab/ci/yaml_processor_spec.rb
+++ b/spec/lib/gitlab/ci/yaml_processor_spec.rb
@@ -26,7 +26,7 @@ module Gitlab
it 'returns valid build attributes' do
expect(subject).to eq({
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "rspec",
options: {
before_script: ["pwd"],
@@ -56,7 +56,7 @@ module Gitlab
it 'returns valid build attributes' do
expect(subject).to eq({
stage: 'test',
- stage_idx: 1,
+ stage_idx: 2,
name: 'rspec',
options: { script: ['rspec'] },
rules: [
@@ -209,13 +209,16 @@ module Gitlab
end
let(:attributes) do
- [{ name: "build",
+ [{ name: ".pre",
index: 0,
builds: [] },
- { name: "test",
+ { name: "build",
index: 1,
+ builds: [] },
+ { name: "test",
+ index: 2,
builds:
- [{ stage_idx: 1,
+ [{ stage_idx: 2,
stage: "test",
name: "rspec",
allow_failure: false,
@@ -225,9 +228,9 @@ module Gitlab
only: { refs: ["branches"] },
except: {} }] },
{ name: "deploy",
- index: 2,
+ index: 3,
builds:
- [{ stage_idx: 2,
+ [{ stage_idx: 3,
stage: "deploy",
name: "prod",
allow_failure: false,
@@ -235,7 +238,10 @@ module Gitlab
yaml_variables: [],
options: { script: ["cap prod"] },
only: { refs: ["tags"] },
- except: {} }] }]
+ except: {} }] },
+ { name: ".post",
+ index: 4,
+ builds: [] }]
end
it 'returns stages seed attributes' do
@@ -425,7 +431,7 @@ module Gitlab
expect(config_processor.stage_builds_attributes("test").size).to eq(1)
expect(config_processor.stage_builds_attributes("test").first).to eq({
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "rspec",
options: {
before_script: ["pwd"],
@@ -456,7 +462,7 @@ module Gitlab
expect(config_processor.stage_builds_attributes("test").size).to eq(1)
expect(config_processor.stage_builds_attributes("test").first).to eq({
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "rspec",
options: {
before_script: ["pwd"],
@@ -485,7 +491,7 @@ module Gitlab
expect(config_processor.stage_builds_attributes("test").size).to eq(1)
expect(config_processor.stage_builds_attributes("test").first).to eq({
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "rspec",
options: {
before_script: ["pwd"],
@@ -510,7 +516,7 @@ module Gitlab
expect(config_processor.stage_builds_attributes("test").size).to eq(1)
expect(config_processor.stage_builds_attributes("test").first).to eq({
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "rspec",
options: {
before_script: ["pwd"],
@@ -977,7 +983,7 @@ module Gitlab
expect(config_processor.stage_builds_attributes("test").size).to eq(1)
expect(config_processor.stage_builds_attributes("test").first).to eq({
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "rspec",
options: {
before_script: ["pwd"],
@@ -1272,7 +1278,7 @@ module Gitlab
expect(subject.builds.size).to eq(5)
expect(subject.builds[0]).to eq(
stage: "build",
- stage_idx: 0,
+ stage_idx: 1,
name: "build1",
options: {
script: ["test"]
@@ -1283,7 +1289,7 @@ module Gitlab
)
expect(subject.builds[2]).to eq(
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "test1",
options: {
script: ["test"],
@@ -1398,7 +1404,7 @@ module Gitlab
expect(subject.size).to eq(1)
expect(subject.first).to eq({
stage: "test",
- stage_idx: 1,
+ stage_idx: 2,
name: "normal_job",
options: {
script: ["test"]
@@ -1442,7 +1448,7 @@ module Gitlab
expect(subject.size).to eq(2)
expect(subject.first).to eq({
stage: "build",
- stage_idx: 0,
+ stage_idx: 1,
name: "job1",
options: {
script: ["execute-script-for-job"]
@@ -1453,7 +1459,7 @@ module Gitlab
})
expect(subject.second).to eq({
stage: "build",
- stage_idx: 0,
+ stage_idx: 1,
name: "job2",
options: {
script: ["execute-script-for-job"]
@@ -1665,14 +1671,14 @@ module Gitlab
config = YAML.dump({ rspec: { script: "test", type: "acceptance" } })
expect do
Gitlab::Ci::YamlProcessor.new(config)
- end.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError, "rspec job: stage parameter should be build, test, deploy")
+ end.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError, "rspec job: stage parameter should be .pre, build, test, deploy, .post")
end
it "returns errors if job stage is not a defined stage" do
config = YAML.dump({ types: %w(build test), rspec: { script: "test", type: "acceptance" } })
expect do
Gitlab::Ci::YamlProcessor.new(config)
- end.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError, "rspec job: stage parameter should be build, test")
+ end.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError, "rspec job: stage parameter should be .pre, build, test, .post")
end
it "returns errors if stages is not an array" do
diff --git a/spec/lib/gitlab/cleanup/project_uploads_spec.rb b/spec/lib/gitlab/cleanup/project_uploads_spec.rb
index 7bad788e44e..5787cce7d20 100644
--- a/spec/lib/gitlab/cleanup/project_uploads_spec.rb
+++ b/spec/lib/gitlab/cleanup/project_uploads_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe Gitlab::Cleanup::ProjectUploads do
subject { described_class.new(logger: logger) }
+
let(:logger) { double(:logger) }
before do
diff --git a/spec/lib/gitlab/cluster/mixins/puma_cluster_spec.rb b/spec/lib/gitlab/cluster/mixins/puma_cluster_spec.rb
new file mode 100644
index 00000000000..1eddf488c5d
--- /dev/null
+++ b/spec/lib/gitlab/cluster/mixins/puma_cluster_spec.rb
@@ -0,0 +1,96 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+# For easier debugging set `PUMA_DEBUG=1`
+
+describe Gitlab::Cluster::Mixins::PumaCluster do
+ PUMA_STARTUP_TIMEOUT = 30
+
+ context 'when running Puma in Cluster-mode' do
+ %i[USR1 USR2 INT HUP].each do |signal|
+ it "for #{signal} does execute phased restart block" do
+ with_puma(workers: 1) do |pid|
+ Process.kill(signal, pid)
+
+ child_pid, child_status = Process.wait2(pid)
+ expect(child_pid).to eq(pid)
+ expect(child_status).to be_exited
+ expect(child_status.exitstatus).to eq(140)
+ end
+ end
+ end
+ end
+
+ private
+
+ def with_puma(workers:, timeout: PUMA_STARTUP_TIMEOUT)
+ with_puma_config(workers: workers) do |puma_rb|
+ cmdline = [
+ "bundle", "exec", "puma",
+ "-C", puma_rb,
+ "-I", Rails.root.to_s
+ ]
+
+ IO.popen(cmdline) do |process|
+ # wait for process to start:
+ # [2123] * Listening on tcp://127.0.0.1:0
+ wait_for_output(process, /Listening on/, timeout: timeout)
+ consume_output(process)
+
+ yield(process.pid)
+ ensure
+ begin
+ Process.kill(:KILL, process.pid)
+ rescue Errno::ESRCH
+ end
+ end
+ end
+ end
+
+ def with_puma_config(workers:)
+ Dir.mktmpdir do |dir|
+ File.write "#{dir}/puma.rb", <<-EOF
+ require './lib/gitlab/cluster/lifecycle_events'
+ require './lib/gitlab/cluster/mixins/puma_cluster'
+
+ workers #{workers}
+ bind "tcp://127.0.0.1:0"
+ preload_app!
+
+ app -> (env) { [404, {}, ['']] }
+
+ Puma::Cluster.prepend(#{described_class})
+
+ Gitlab::Cluster::LifecycleEvents.on_before_phased_restart do
+ exit(140)
+ end
+
+ # redirect stderr to stdout
+ $stderr.reopen($stdout)
+ EOF
+
+ yield("#{dir}/puma.rb")
+ end
+ end
+
+ def wait_for_output(process, output, timeout:)
+ Timeout.timeout(timeout) do
+ loop do
+ line = process.readline
+ puts "PUMA_DEBUG: #{line}" if ENV['PUMA_DEBUG']
+ break if line =~ output
+ end
+ end
+ end
+
+ def consume_output(process)
+ Thread.new do
+ loop do
+ line = process.readline
+ puts "PUMA_DEBUG: #{line}" if ENV['PUMA_DEBUG']
+ end
+ rescue
+ end
+ end
+end
diff --git a/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb b/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb
new file mode 100644
index 00000000000..2b3a267991c
--- /dev/null
+++ b/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb
@@ -0,0 +1,112 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+# For easier debugging set `UNICORN_DEBUG=1`
+
+describe Gitlab::Cluster::Mixins::UnicornHttpServer do
+ UNICORN_STARTUP_TIMEOUT = 10
+
+ context 'when running Unicorn' do
+ %i[USR2].each do |signal|
+ it "for #{signal} does execute phased restart block" do
+ with_unicorn(workers: 1) do |pid|
+ Process.kill(signal, pid)
+
+ child_pid, child_status = Process.wait2(pid)
+ expect(child_pid).to eq(pid)
+ expect(child_status).to be_exited
+ expect(child_status.exitstatus).to eq(140)
+ end
+ end
+ end
+
+ %i[QUIT TERM INT].each do |signal|
+ it "for #{signal} does not execute phased restart block" do
+ with_unicorn(workers: 1) do |pid|
+ Process.kill(signal, pid)
+
+ child_pid, child_status = Process.wait2(pid)
+ expect(child_pid).to eq(pid)
+ expect(child_status).to be_exited
+ expect(child_status.exitstatus).to eq(0)
+ end
+ end
+ end
+ end
+
+ private
+
+ def with_unicorn(workers:, timeout: UNICORN_STARTUP_TIMEOUT)
+ with_unicorn_configs(workers: workers) do |unicorn_rb, config_ru|
+ cmdline = [
+ "bundle", "exec", "unicorn",
+ "-I", Rails.root.to_s,
+ "-c", unicorn_rb,
+ config_ru
+ ]
+
+ IO.popen(cmdline) do |process|
+ # wait for process to start:
+ # I, [2019-10-15T13:21:27.565225 #3089] INFO -- : master process ready
+ wait_for_output(process, /master process ready/, timeout: timeout)
+ consume_output(process)
+
+ yield(process.pid)
+ ensure
+ begin
+ Process.kill(:KILL, process.pid)
+ rescue Errno::ESRCH
+ end
+ end
+ end
+ end
+
+ def with_unicorn_configs(workers:)
+ Dir.mktmpdir do |dir|
+ File.write "#{dir}/unicorn.rb", <<-EOF
+ require './lib/gitlab/cluster/lifecycle_events'
+ require './lib/gitlab/cluster/mixins/unicorn_http_server'
+
+ worker_processes #{workers}
+ listen "127.0.0.1:0"
+ preload_app true
+
+ Unicorn::HttpServer.prepend(#{described_class})
+
+ Gitlab::Cluster::LifecycleEvents.on_before_phased_restart do
+ exit(140)
+ end
+
+ # redirect stderr to stdout
+ $stderr.reopen($stdout)
+ EOF
+
+ File.write "#{dir}/config.ru", <<-EOF
+ run -> (env) { [404, {}, ['']] }
+ EOF
+
+ yield("#{dir}/unicorn.rb", "#{dir}/config.ru")
+ end
+ end
+
+ def wait_for_output(process, output, timeout:)
+ Timeout.timeout(timeout) do
+ loop do
+ line = process.readline
+ puts "UNICORN_DEBUG: #{line}" if ENV['UNICORN_DEBUG']
+ break if line =~ output
+ end
+ end
+ end
+
+ def consume_output(process)
+ Thread.new do
+ loop do
+ line = process.readline
+ puts "UNICORN_DEBUG: #{line}" if ENV['UNICORN_DEBUG']
+ end
+ rescue
+ end
+ end
+end
diff --git a/spec/lib/gitlab/config/entry/simplifiable_spec.rb b/spec/lib/gitlab/config/entry/simplifiable_spec.rb
index 65e18fe3f10..5c208cab449 100644
--- a/spec/lib/gitlab/config/entry/simplifiable_spec.rb
+++ b/spec/lib/gitlab/config/entry/simplifiable_spec.rb
@@ -24,9 +24,9 @@ describe Gitlab::Config::Entry::Simplifiable do
let(:unknown) { double('unknown strategy') }
before do
- stub_const("#{described_class.name}::Something", first)
- stub_const("#{described_class.name}::DifferentOne", second)
- stub_const("#{described_class.name}::UnknownStrategy", unknown)
+ entry::Something = first
+ entry::DifferentOne = second
+ entry::UnknownStrategy = unknown
end
context 'when first strategy should be used' do
diff --git a/spec/lib/gitlab/cycle_analytics/code_stage_spec.rb b/spec/lib/gitlab/cycle_analytics/code_stage_spec.rb
index dd1d9ac0f16..aa12bc21d22 100644
--- a/spec/lib/gitlab/cycle_analytics/code_stage_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/code_stage_spec.rb
@@ -12,7 +12,8 @@ describe Gitlab::CycleAnalytics::CodeStage do
let(:issue_3) { create(:issue, project: project, created_at: 60.minutes.ago) }
let(:mr_1) { create(:merge_request, source_project: project, created_at: 15.minutes.ago) }
let(:mr_2) { create(:merge_request, source_project: project, created_at: 10.minutes.ago, source_branch: 'A') }
- let(:stage) { described_class.new(options: { from: 2.days.ago, current_user: project.creator, project: project }) }
+ let(:stage_options) { { from: 2.days.ago, current_user: project.creator, project: project } }
+ let(:stage) { described_class.new(options: stage_options) }
before do
issue_1.metrics.update!(first_associated_with_milestone_at: 60.minutes.ago, first_mentioned_in_commit_at: 45.minutes.ago)
@@ -25,6 +26,13 @@ describe Gitlab::CycleAnalytics::CodeStage do
it_behaves_like 'base stage'
+ context 'when using the new query backend' do
+ include_examples 'Gitlab::Analytics::CycleAnalytics::DataCollector backend examples' do
+ let(:expected_record_count) { 2 }
+ let(:expected_ordered_attribute_values) { [mr_2.title, mr_1.title] }
+ end
+ end
+
describe '#project_median' do
around do |example|
Timecop.freeze { example.run }
@@ -33,6 +41,8 @@ describe Gitlab::CycleAnalytics::CodeStage do
it 'counts median from issues with metrics' do
expect(stage.project_median).to eq(ISSUES_MEDIAN)
end
+
+ include_examples 'calculate #median with date range'
end
describe '#events' do
diff --git a/spec/lib/gitlab/cycle_analytics/issue_stage_spec.rb b/spec/lib/gitlab/cycle_analytics/issue_stage_spec.rb
index 4dd21239cde..497db88d850 100644
--- a/spec/lib/gitlab/cycle_analytics/issue_stage_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/issue_stage_spec.rb
@@ -10,7 +10,8 @@ describe Gitlab::CycleAnalytics::IssueStage do
let(:issue_2) { create(:issue, project: project, created_at: 60.minutes.ago) }
let(:issue_3) { create(:issue, project: project, created_at: 30.minutes.ago) }
let!(:issue_without_milestone) { create(:issue, project: project, created_at: 1.minute.ago) }
- let(:stage) { described_class.new(options: { from: 2.days.ago, current_user: project.creator, project: project }) }
+ let(:stage_options) { { from: 2.days.ago, current_user: project.creator, project: project } }
+ let(:stage) { described_class.new(options: stage_options) }
before do
issue_1.metrics.update!(first_associated_with_milestone_at: 60.minutes.ago )
@@ -20,6 +21,13 @@ describe Gitlab::CycleAnalytics::IssueStage do
it_behaves_like 'base stage'
+ context 'when using the new query backend' do
+ include_examples 'Gitlab::Analytics::CycleAnalytics::DataCollector backend examples' do
+ let(:expected_record_count) { 3 }
+ let(:expected_ordered_attribute_values) { [issue_3.title, issue_2.title, issue_1.title] }
+ end
+ end
+
describe '#median' do
around do |example|
Timecop.freeze { example.run }
@@ -28,6 +36,8 @@ describe Gitlab::CycleAnalytics::IssueStage do
it 'counts median from issues with metrics' do
expect(stage.project_median).to eq(ISSUES_MEDIAN)
end
+
+ include_examples 'calculate #median with date range'
end
describe '#events' do
diff --git a/spec/lib/gitlab/cycle_analytics/plan_stage_spec.rb b/spec/lib/gitlab/cycle_analytics/plan_stage_spec.rb
index 98d2593de66..01a46f5ba65 100644
--- a/spec/lib/gitlab/cycle_analytics/plan_stage_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/plan_stage_spec.rb
@@ -10,7 +10,8 @@ describe Gitlab::CycleAnalytics::PlanStage do
let!(:issue_2) { create(:issue, project: project, created_at: 60.minutes.ago) }
let!(:issue_3) { create(:issue, project: project, created_at: 30.minutes.ago) }
let!(:issue_without_milestone) { create(:issue, project: project, created_at: 1.minute.ago) }
- let(:stage) { described_class.new(options: { from: 2.days.ago, current_user: project.creator, project: project }) }
+ let(:stage_options) { { from: 2.days.ago, current_user: project.creator, project: project } }
+ let(:stage) { described_class.new(options: stage_options) }
before do
issue_1.metrics.update!(first_associated_with_milestone_at: 60.minutes.ago, first_mentioned_in_commit_at: 10.minutes.ago)
@@ -20,6 +21,13 @@ describe Gitlab::CycleAnalytics::PlanStage do
it_behaves_like 'base stage'
+ context 'when using the new query backend' do
+ include_examples 'Gitlab::Analytics::CycleAnalytics::DataCollector backend examples' do
+ let(:expected_record_count) { 2 }
+ let(:expected_ordered_attribute_values) { [issue_1.title, issue_2.title] }
+ end
+ end
+
describe '#project_median' do
around do |example|
Timecop.freeze { example.run }
@@ -28,6 +36,8 @@ describe Gitlab::CycleAnalytics::PlanStage do
it 'counts median from issues with metrics' do
expect(stage.project_median).to eq(ISSUES_MEDIAN)
end
+
+ include_examples 'calculate #median with date range'
end
describe '#events' do
diff --git a/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb b/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb
index cf95741908f..c5b17aafdd2 100644
--- a/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb
@@ -32,3 +32,41 @@ shared_examples 'base stage' do
expect(stage.events).not_to be_nil
end
end
+
+shared_examples 'calculate #median with date range' do
+ context 'when valid date range is given' do
+ before do
+ stage_options[:from] = 5.days.ago
+ stage_options[:to] = 5.days.from_now
+ end
+
+ it { expect(stage.project_median).to eq(ISSUES_MEDIAN) }
+ end
+
+ context 'when records are out of the date range' do
+ before do
+ stage_options[:from] = 2.years.ago
+ stage_options[:to] = 1.year.ago
+ end
+
+ it { expect(stage.project_median).to eq(nil) }
+ end
+end
+
+shared_examples 'Gitlab::Analytics::CycleAnalytics::DataCollector backend examples' do
+ let(:stage_params) { Gitlab::Analytics::CycleAnalytics::DefaultStages.send("params_for_#{stage_name}_stage").merge(project: project) }
+ let(:stage) { Analytics::CycleAnalytics::ProjectStage.new(stage_params) }
+ let(:data_collector) { Gitlab::Analytics::CycleAnalytics::DataCollector.new(stage: stage, params: { from: stage_options[:from], current_user: project.creator }) }
+ let(:attribute_to_verify) { :title }
+
+ context 'provides the same results as the old implementation' do
+ it 'for the median' do
+ expect(data_collector.median.seconds).to eq(ISSUES_MEDIAN)
+ end
+
+ it 'for the list of event records' do
+ records = data_collector.records_fetcher.serialized_records
+ expect(records.map { |event| event[attribute_to_verify] }).to eq(expected_ordered_attribute_values)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb b/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb
index 778c2f479b5..8f9dac6d281 100644
--- a/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb
@@ -4,52 +4,98 @@ require 'spec_helper'
describe Gitlab::CycleAnalytics::StageSummary do
let(:project) { create(:project, :repository) }
- let(:from) { 1.day.ago }
+ let(:options) { { from: 1.day.ago, current_user: user } }
let(:user) { create(:user, :admin) }
- subject { described_class.new(project, from: Time.now, current_user: user).data }
+ let(:stage_summary) { described_class.new(project, options).data }
describe "#new_issues" do
+ subject { stage_summary.first[:value] }
+
it "finds the number of issues created after the 'from date'" do
Timecop.freeze(5.days.ago) { create(:issue, project: project) }
Timecop.freeze(5.days.from_now) { create(:issue, project: project) }
- expect(subject.first[:value]).to eq(1)
+ expect(subject).to eq(1)
end
it "doesn't find issues from other projects" do
Timecop.freeze(5.days.from_now) { create(:issue, project: create(:project)) }
- expect(subject.first[:value]).to eq(0)
+ expect(subject).to eq(0)
+ end
+
+ context 'when `to` parameter is given' do
+ before do
+ Timecop.freeze(5.days.ago) { create(:issue, project: project) }
+ Timecop.freeze(5.days.from_now) { create(:issue, project: project) }
+ end
+
+ it "doesn't find any record" do
+ options[:to] = Time.now
+
+ expect(subject).to eq(0)
+ end
+
+ it "finds records created between `from` and `to` range" do
+ options[:from] = 10.days.ago
+ options[:to] = 10.days.from_now
+
+ expect(subject).to eq(2)
+ end
end
end
describe "#commits" do
+ subject { stage_summary.second[:value] }
+
it "finds the number of commits created after the 'from date'" do
Timecop.freeze(5.days.ago) { create_commit("Test message", project, user, 'master') }
Timecop.freeze(5.days.from_now) { create_commit("Test message", project, user, 'master') }
- expect(subject.second[:value]).to eq(1)
+ expect(subject).to eq(1)
end
it "doesn't find commits from other projects" do
Timecop.freeze(5.days.from_now) { create_commit("Test message", create(:project, :repository), user, 'master') }
- expect(subject.second[:value]).to eq(0)
+ expect(subject).to eq(0)
end
it "finds a large (> 100) snumber of commits if present" do
Timecop.freeze(5.days.from_now) { create_commit("Test message", project, user, 'master', count: 100) }
- expect(subject.second[:value]).to eq(100)
+ expect(subject).to eq(100)
+ end
+
+ context 'when `to` parameter is given' do
+ before do
+ Timecop.freeze(5.days.ago) { create_commit("Test message", project, user, 'master') }
+ Timecop.freeze(5.days.from_now) { create_commit("Test message", project, user, 'master') }
+ end
+
+ it "doesn't find any record" do
+ options[:to] = Time.now
+
+ expect(subject).to eq(0)
+ end
+
+ it "finds records created between `from` and `to` range" do
+ options[:from] = 10.days.ago
+ options[:to] = 10.days.from_now
+
+ expect(subject).to eq(2)
+ end
end
end
describe "#deploys" do
+ subject { stage_summary.third[:value] }
+
it "finds the number of deploys made created after the 'from date'" do
Timecop.freeze(5.days.ago) { create(:deployment, :success, project: project) }
Timecop.freeze(5.days.from_now) { create(:deployment, :success, project: project) }
- expect(subject.third[:value]).to eq(1)
+ expect(subject).to eq(1)
end
it "doesn't find commits from other projects" do
@@ -57,7 +103,27 @@ describe Gitlab::CycleAnalytics::StageSummary do
create(:deployment, :success, project: create(:project, :repository))
end
- expect(subject.third[:value]).to eq(0)
+ expect(subject).to eq(0)
+ end
+
+ context 'when `to` parameter is given' do
+ before do
+ Timecop.freeze(5.days.ago) { create(:deployment, :success, project: project) }
+ Timecop.freeze(5.days.from_now) { create(:deployment, :success, project: project) }
+ end
+
+ it "doesn't find any record" do
+ options[:to] = Time.now
+
+ expect(subject).to eq(0)
+ end
+
+ it "finds records created between `from` and `to` range" do
+ options[:from] = 10.days.ago
+ options[:to] = 10.days.from_now
+
+ expect(subject).to eq(2)
+ end
end
end
end
diff --git a/spec/lib/gitlab/cycle_analytics/staging_stage_spec.rb b/spec/lib/gitlab/cycle_analytics/staging_stage_spec.rb
index bd64c4aca42..306b08a60e1 100644
--- a/spec/lib/gitlab/cycle_analytics/staging_stage_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/staging_stage_spec.rb
@@ -16,7 +16,8 @@ describe Gitlab::CycleAnalytics::StagingStage do
let(:build_1) { create(:ci_build, project: project) }
let(:build_2) { create(:ci_build, project: project) }
- let(:stage) { described_class.new(options: { from: 2.days.ago, current_user: project.creator, project: project }) }
+ let(:stage_options) { { from: 2.days.ago, current_user: project.creator, project: project } }
+ let(:stage) { described_class.new(options: stage_options) }
before do
mr_1.metrics.update!(merged_at: 80.minutes.ago, first_deployed_to_production_at: 50.minutes.ago, pipeline_id: build_1.commit_id)
@@ -38,6 +39,8 @@ describe Gitlab::CycleAnalytics::StagingStage do
it 'counts median from issues with metrics' do
expect(stage.project_median).to eq(ISSUES_MEDIAN)
end
+
+ it_behaves_like 'calculate #median with date range'
end
describe '#events' do
diff --git a/spec/lib/gitlab/cycle_analytics/test_stage_spec.rb b/spec/lib/gitlab/cycle_analytics/test_stage_spec.rb
index 9162686d17d..e347f36dfce 100644
--- a/spec/lib/gitlab/cycle_analytics/test_stage_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/test_stage_spec.rb
@@ -6,22 +6,26 @@ require 'lib/gitlab/cycle_analytics/shared_stage_spec'
describe Gitlab::CycleAnalytics::TestStage do
let(:stage_name) { :test }
let(:project) { create(:project) }
- let(:stage) { described_class.new(options: { from: 2.days.ago, current_user: project.creator, project: project }) }
+ let(:stage_options) { { from: 2.days.ago, current_user: project.creator, project: project } }
+ let(:stage) { described_class.new(options: stage_options) }
it_behaves_like 'base stage'
describe '#median' do
+ let(:mr_1) { create(:merge_request, :closed, source_project: project, created_at: 60.minutes.ago) }
+ let(:mr_2) { create(:merge_request, :closed, source_project: project, created_at: 40.minutes.ago, source_branch: 'A') }
+ let(:mr_3) { create(:merge_request, source_project: project, created_at: 10.minutes.ago, source_branch: 'B') }
+ let(:mr_4) { create(:merge_request, source_project: project, created_at: 10.minutes.ago, source_branch: 'C') }
+ let(:mr_5) { create(:merge_request, source_project: project, created_at: 10.minutes.ago, source_branch: 'D') }
+ let(:ci_build1) { create(:ci_build, project: project) }
+ let(:ci_build2) { create(:ci_build, project: project) }
+
before do
issue_1 = create(:issue, project: project, created_at: 90.minutes.ago)
issue_2 = create(:issue, project: project, created_at: 60.minutes.ago)
issue_3 = create(:issue, project: project, created_at: 60.minutes.ago)
- mr_1 = create(:merge_request, :closed, source_project: project, created_at: 60.minutes.ago)
- mr_2 = create(:merge_request, :closed, source_project: project, created_at: 40.minutes.ago, source_branch: 'A')
- mr_3 = create(:merge_request, source_project: project, created_at: 10.minutes.ago, source_branch: 'B')
- mr_4 = create(:merge_request, source_project: project, created_at: 10.minutes.ago, source_branch: 'C')
- mr_5 = create(:merge_request, source_project: project, created_at: 10.minutes.ago, source_branch: 'D')
- mr_1.metrics.update!(latest_build_started_at: 32.minutes.ago, latest_build_finished_at: 2.minutes.ago)
- mr_2.metrics.update!(latest_build_started_at: 62.minutes.ago, latest_build_finished_at: 32.minutes.ago)
+ mr_1.metrics.update!(latest_build_started_at: 32.minutes.ago, latest_build_finished_at: 2.minutes.ago, pipeline_id: ci_build1.commit_id)
+ mr_2.metrics.update!(latest_build_started_at: 62.minutes.ago, latest_build_finished_at: 32.minutes.ago, pipeline_id: ci_build2.commit_id)
mr_3.metrics.update!(latest_build_started_at: nil, latest_build_finished_at: nil)
mr_4.metrics.update!(latest_build_started_at: nil, latest_build_finished_at: nil)
mr_5.metrics.update!(latest_build_started_at: nil, latest_build_finished_at: nil)
@@ -40,5 +44,15 @@ describe Gitlab::CycleAnalytics::TestStage do
it 'counts median from issues with metrics' do
expect(stage.project_median).to eq(ISSUES_MEDIAN)
end
+
+ include_examples 'calculate #median with date range'
+
+ context 'when using the new query backend' do
+ include_examples 'Gitlab::Analytics::CycleAnalytics::DataCollector backend examples' do
+ let(:expected_record_count) { 2 }
+ let(:attribute_to_verify) { :id }
+ let(:expected_ordered_attribute_values) { [mr_1.metrics.pipeline.builds.first.id, mr_2.metrics.pipeline.builds.first.id] }
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/daemon_spec.rb b/spec/lib/gitlab/daemon_spec.rb
index 0372b770844..cf1f089c577 100644
--- a/spec/lib/gitlab/daemon_spec.rb
+++ b/spec/lib/gitlab/daemon_spec.rb
@@ -6,7 +6,7 @@ describe Gitlab::Daemon do
subject { described_class.new }
before do
- allow(subject).to receive(:start_working)
+ allow(subject).to receive(:run_thread)
allow(subject).to receive(:stop_working)
end
@@ -44,7 +44,7 @@ describe Gitlab::Daemon do
it 'starts the Daemon' do
expect { subject.start.join }.to change { subject.thread? }.from(false).to(true)
- expect(subject).to have_received(:start_working)
+ expect(subject).to have_received(:run_thread)
end
end
@@ -52,7 +52,21 @@ describe Gitlab::Daemon do
it "doesn't shutdown stopped Daemon" do
expect { subject.stop }.not_to change { subject.thread? }
- expect(subject).not_to have_received(:start_working)
+ expect(subject).not_to have_received(:run_thread)
+ end
+ end
+ end
+
+ describe '#start_working' do
+ context 'when start_working fails' do
+ before do
+ expect(subject).to receive(:start_working) { false }
+ end
+
+ it 'does not start thread' do
+ expect(subject).not_to receive(:run_thread)
+
+ expect(subject.start).to eq(nil)
end
end
end
@@ -66,7 +80,7 @@ describe Gitlab::Daemon do
it "doesn't start running Daemon" do
expect { subject.start.join }.not_to change { subject.thread }
- expect(subject).to have_received(:start_working).once
+ expect(subject).to have_received(:run_thread).once
end
end
@@ -79,7 +93,7 @@ describe Gitlab::Daemon do
context 'when stop_working raises exception' do
before do
- allow(subject).to receive(:start_working) do
+ allow(subject).to receive(:run_thread) do
sleep(1000)
end
end
@@ -108,7 +122,7 @@ describe Gitlab::Daemon do
expect(subject.start).to be_nil
expect { subject.start }.not_to change { subject.thread? }
- expect(subject).not_to have_received(:start_working)
+ expect(subject).not_to have_received(:run_thread)
end
end
diff --git a/spec/lib/gitlab/danger/helper_spec.rb b/spec/lib/gitlab/danger/helper_spec.rb
index 1b4d366ce7b..1696d3566ad 100644
--- a/spec/lib/gitlab/danger/helper_spec.rb
+++ b/spec/lib/gitlab/danger/helper_spec.rb
@@ -86,30 +86,30 @@ describe Gitlab::Danger::Helper do
describe '#ee?' do
subject { helper.ee? }
- it 'returns true if CI_PROJECT_NAME if set to gitlab-ee' do
- stub_env('CI_PROJECT_NAME', 'gitlab-ee')
- expect(File).not_to receive(:exist?)
+ it 'returns true if CI_PROJECT_NAME if set to gitlab' do
+ stub_env('CI_PROJECT_NAME', 'gitlab')
+ expect(Dir).not_to receive(:exist?)
is_expected.to be_truthy
end
it 'delegates to CHANGELOG-EE.md existence if CI_PROJECT_NAME is set to something else' do
stub_env('CI_PROJECT_NAME', 'something else')
- expect(File).to receive(:exist?).with('../../CHANGELOG-EE.md') { true }
+ expect(Dir).to receive(:exist?).with('../../ee') { true }
is_expected.to be_truthy
end
- it 'returns true if CHANGELOG-EE.md exists' do
+ it 'returns true if ee exists' do
stub_env('CI_PROJECT_NAME', nil)
- expect(File).to receive(:exist?).with('../../CHANGELOG-EE.md') { true }
+ expect(Dir).to receive(:exist?).with('../../ee') { true }
is_expected.to be_truthy
end
- it "returns false if CHANGELOG-EE.md doesn't exist" do
+ it "returns false if ee doesn't exist" do
stub_env('CI_PROJECT_NAME', nil)
- expect(File).to receive(:exist?).with('../../CHANGELOG-EE.md') { false }
+ expect(Dir).to receive(:exist?).with('../../ee') { false }
is_expected.to be_falsy
end
@@ -118,16 +118,16 @@ describe Gitlab::Danger::Helper do
describe '#project_name' do
subject { helper.project_name }
- it 'returns gitlab-ee if ee? returns true' do
+ it 'returns gitlab if ee? returns true' do
expect(helper).to receive(:ee?) { true }
- is_expected.to eq('gitlab-ee')
+ is_expected.to eq('gitlab')
end
it 'returns gitlab-ce if ee? returns false' do
expect(helper).to receive(:ee?) { false }
- is_expected.to eq('gitlab-ce')
+ is_expected.to eq('gitlab-foss')
end
end
@@ -273,7 +273,7 @@ describe Gitlab::Danger::Helper do
where(:category, :expected_label) do
:backend | '~backend'
:database | '~database'
- :docs | '~Documentation'
+ :docs | '~documentation'
:foo | '~foo'
:frontend | '~frontend'
:none | ''
diff --git a/spec/lib/gitlab/danger/roulette_spec.rb b/spec/lib/gitlab/danger/roulette_spec.rb
index 121c5d8ecd9..4d41e2c45aa 100644
--- a/spec/lib/gitlab/danger/roulette_spec.rb
+++ b/spec/lib/gitlab/danger/roulette_spec.rb
@@ -104,11 +104,13 @@ describe Gitlab::Danger::Roulette do
let(:person2) { Gitlab::Danger::Teammate.new('username' => 'godfat') }
let(:author) { Gitlab::Danger::Teammate.new('username' => 'filipa') }
let(:ooo) { Gitlab::Danger::Teammate.new('username' => 'jacopo-beschi') }
+ let(:no_capacity) { Gitlab::Danger::Teammate.new('username' => 'uncharged') }
before do
- stub_person_message(person1, 'making GitLab magic')
- stub_person_message(person2, 'making GitLab magic')
- stub_person_message(ooo, 'OOO till 15th')
+ stub_person_status(person1, message: 'making GitLab magic')
+ stub_person_status(person2, message: 'making GitLab magic')
+ stub_person_status(ooo, message: 'OOO till 15th')
+ stub_person_status(no_capacity, message: 'At capacity for the next few days', emoji: 'red_circle')
# we don't stub Filipa, as she is the author and
# we should not fire request checking for her
@@ -131,10 +133,14 @@ describe Gitlab::Danger::Roulette do
expect(subject.spin_for_person([author], random: Random.new)).to be_nil
end
+ it 'excludes person with no capacity' do
+ expect(subject.spin_for_person([no_capacity], random: Random.new)).to be_nil
+ end
+
private
- def stub_person_message(person, message)
- body = { message: message }.to_json
+ def stub_person_status(person, message: 'dummy message', emoji: 'unicorn')
+ body = { message: message, emoji: emoji }.to_json
WebMock
.stub_request(:get, "https://gitlab.com/api/v4/users/#{person.username}/status")
diff --git a/spec/lib/gitlab/danger/teammate_spec.rb b/spec/lib/gitlab/danger/teammate_spec.rb
index ca036390bde..bd1c2b10dc8 100644
--- a/spec/lib/gitlab/danger/teammate_spec.rb
+++ b/spec/lib/gitlab/danger/teammate_spec.rb
@@ -2,11 +2,14 @@
require 'fast_spec_helper'
+require 'rspec-parameterized'
+
require 'gitlab/danger/teammate'
describe Gitlab::Danger::Teammate do
- subject { described_class.new(options) }
- let(:options) { { 'projects' => projects, 'role' => role } }
+ subject { described_class.new(options.stringify_keys) }
+
+ let(:options) { { username: 'luigi', projects: projects, role: role } }
let(:projects) { { project => capabilities } }
let(:role) { 'Engineer, Manage' }
let(:labels) { [] }
@@ -95,4 +98,72 @@ describe Gitlab::Danger::Teammate do
expect(subject.maintainer?(project, :frontend, labels)).to be_falsey
end
end
+
+ describe '#status' do
+ let(:capabilities) { ['dish washing'] }
+
+ context 'with empty cache' do
+ context 'for successful request' do
+ it 'returns the response' do
+ mock_status = double(does_not: 'matter')
+ expect(Gitlab::Danger::RequestHelper).to receive(:http_get_json)
+ .and_return(mock_status)
+
+ expect(subject.status).to be mock_status
+ end
+ end
+
+ context 'for failing request' do
+ it 'returns nil' do
+ expect(Gitlab::Danger::RequestHelper).to receive(:http_get_json)
+ .and_raise(Gitlab::Danger::RequestHelper::HTTPError.new)
+
+ expect(subject.status).to be nil
+ end
+ end
+ end
+
+ context 'with filled cache' do
+ it 'returns the cached response' do
+ mock_status = double(does_not: 'matter')
+ expect(Gitlab::Danger::RequestHelper).to receive(:http_get_json)
+ .and_return(mock_status)
+ subject.status
+
+ expect(Gitlab::Danger::RequestHelper).not_to receive(:http_get_json)
+ expect(subject.status).to be mock_status
+ end
+ end
+ end
+
+ describe '#available?' do
+ using RSpec::Parameterized::TableSyntax
+
+ let(:capabilities) { ['dry head'] }
+
+ where(:status, :result) do
+ {} | true
+ { message: 'dear reader' } | true
+ { message: 'OOO: massage' } | false
+ { message: 'love it SOOO much' } | false
+ { emoji: 'red_circle' } | false
+ end
+
+ with_them do
+ before do
+ expect(Gitlab::Danger::RequestHelper).to receive(:http_get_json)
+ .and_return(status&.stringify_keys)
+ end
+
+ it { expect(subject.available?).to be result }
+ end
+
+ it 'returns true if request fails' do
+ expect(Gitlab::Danger::RequestHelper).to receive(:http_get_json)
+ .exactly(2).times
+ .and_raise(Gitlab::Danger::RequestHelper::HTTPError.new)
+
+ expect(subject.available?).to be true
+ end
+ end
end
diff --git a/spec/lib/gitlab/data_builder/push_spec.rb b/spec/lib/gitlab/data_builder/push_spec.rb
index e8a9f0b06a8..58509b69463 100644
--- a/spec/lib/gitlab/data_builder/push_spec.rb
+++ b/spec/lib/gitlab/data_builder/push_spec.rb
@@ -90,4 +90,12 @@ describe Gitlab::DataBuilder::Push do
.not_to raise_error
end
end
+
+ describe '.build_bulk' do
+ subject do
+ described_class.build_bulk(action: :created, ref_type: :branch, changes: [double, double])
+ end
+
+ it { is_expected.to eq(action: :created, ref_count: 2, ref_type: :branch) }
+ end
end
diff --git a/spec/lib/gitlab/database_spec.rb b/spec/lib/gitlab/database_spec.rb
index 8d37de32179..15fb1503529 100644
--- a/spec/lib/gitlab/database_spec.rb
+++ b/spec/lib/gitlab/database_spec.rb
@@ -101,20 +101,6 @@ describe Gitlab::Database do
end
end
- describe '.join_lateral_supported?' do
- it 'returns false when using PostgreSQL 9.2' do
- allow(described_class).to receive(:version).and_return('9.2.1')
-
- expect(described_class.join_lateral_supported?).to eq(false)
- end
-
- it 'returns true when using PostgreSQL 9.3.0 or newer' do
- allow(described_class).to receive(:version).and_return('9.3.0')
-
- expect(described_class.join_lateral_supported?).to eq(true)
- end
- end
-
describe '.replication_slots_supported?' do
it 'returns false when using PostgreSQL 9.3' do
allow(described_class).to receive(:version).and_return('9.3.1')
diff --git a/spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb b/spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb
new file mode 100644
index 00000000000..265c6260ca9
--- /dev/null
+++ b/spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb
@@ -0,0 +1,126 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Diff::FileCollection::MergeRequestDiffBatch do
+ let(:merge_request) { create(:merge_request) }
+ let(:batch_page) { 1 }
+ let(:batch_size) { 10 }
+ let(:diffable) { merge_request.merge_request_diff }
+ let(:diff_files_relation) { diffable.merge_request_diff_files }
+
+ subject do
+ described_class.new(diffable,
+ batch_page,
+ batch_size,
+ diff_options: nil)
+ end
+
+ let(:diff_files) { subject.diff_files }
+
+ describe 'initialize' do
+ it 'memoizes pagination_data' do
+ expect(subject.pagination_data).to eq(current_page: 1, next_page: 2, total_pages: 2)
+ end
+ end
+
+ describe '#diff_files' do
+ let(:batch_size) { 3 }
+ let(:paginated_rel) { diff_files_relation.page(batch_page).per(batch_size) }
+
+ let(:expected_batch_files) do
+ paginated_rel.map(&:new_path)
+ end
+
+ it 'returns paginated diff files' do
+ expect(diff_files.size).to eq(3)
+ end
+
+ it 'returns a valid instance of a DiffCollection' do
+ expect(diff_files).to be_a(Gitlab::Git::DiffCollection)
+ end
+
+ context 'first page' do
+ it 'returns correct diff files' do
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'another page' do
+ let(:batch_page) { 2 }
+
+ it 'returns correct diff files' do
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'nil batch_page' do
+ let(:batch_page) { nil }
+
+ it 'returns correct diff files' do
+ expected_batch_files =
+ diff_files_relation.page(described_class::DEFAULT_BATCH_PAGE).per(batch_size).map(&:new_path)
+
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'nil batch_size' do
+ let(:batch_size) { nil }
+
+ it 'returns correct diff files' do
+ expected_batch_files =
+ diff_files_relation.page(batch_page).per(described_class::DEFAULT_BATCH_SIZE).map(&:new_path)
+
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'invalid page' do
+ let(:batch_page) { 999 }
+
+ it 'returns correct diff files' do
+ expect(diff_files.map(&:new_path)).to be_empty
+ end
+ end
+
+ context 'last page' do
+ it 'returns correct diff files' do
+ last_page = paginated_rel.total_pages
+ collection = described_class.new(diffable,
+ last_page,
+ batch_size,
+ diff_options: nil)
+
+ expected_batch_files = diff_files_relation.page(last_page).per(batch_size).map(&:new_path)
+
+ expect(collection.diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+ end
+
+ it_behaves_like 'unfoldable diff' do
+ subject do
+ described_class.new(merge_request.merge_request_diff,
+ batch_page,
+ batch_size,
+ diff_options: nil)
+ end
+ end
+
+ it_behaves_like 'diff statistics' do
+ let(:collection_default_args) do
+ { diff_options: {} }
+ end
+
+ let(:diffable) { merge_request.merge_request_diff }
+ let(:stub_path) { '.gitignore' }
+
+ subject do
+ described_class.new(merge_request.merge_request_diff,
+ batch_page,
+ batch_size,
+ collection_default_args)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/diff/position_collection_spec.rb b/spec/lib/gitlab/diff/position_collection_spec.rb
new file mode 100644
index 00000000000..f2a8312587c
--- /dev/null
+++ b/spec/lib/gitlab/diff/position_collection_spec.rb
@@ -0,0 +1,86 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Diff::PositionCollection do
+ let(:merge_request) { build(:merge_request) }
+
+ def build_text_position(attrs = {})
+ attributes = {
+ old_path: "files/ruby/popen.rb",
+ new_path: "files/ruby/popen.rb",
+ old_line: nil,
+ new_line: 14,
+ diff_refs: merge_request.diff_refs
+ }.merge(attrs)
+
+ Gitlab::Diff::Position.new(attributes)
+ end
+
+ def build_image_position(attrs = {})
+ attributes = {
+ old_path: "files/images/any_image.png",
+ new_path: "files/images/any_image.png",
+ width: 10,
+ height: 10,
+ x: 1,
+ y: 1,
+ diff_refs: merge_request.diff_refs,
+ position_type: "image"
+ }.merge(attrs)
+
+ Gitlab::Diff::Position.new(attributes)
+ end
+
+ let(:text_position) { build_text_position }
+ let(:folded_text_position) { build_text_position(old_line: 1, new_line: 1) }
+ let(:image_position) { build_image_position }
+ let(:invalid_position) { 'a position' }
+ let(:head_sha) { merge_request.diff_head_sha }
+
+ let(:collection) do
+ described_class.new([text_position, folded_text_position, image_position, invalid_position], head_sha)
+ end
+
+ describe '#to_a' do
+ it 'returns all positions that are Gitlab::Diff::Position' do
+ expect(collection.to_a).to eq([text_position, folded_text_position, image_position])
+ end
+ end
+
+ describe '#unfoldable' do
+ it 'returns unfoldable diff positions' do
+ expect(collection.unfoldable).to eq([folded_text_position])
+ end
+
+ context 'when given head_sha does not match with positions head_sha' do
+ let(:head_sha) { 'unknown' }
+
+ it 'returns no position' do
+ expect(collection.unfoldable).to be_empty
+ end
+ end
+
+ context 'when given head_sha is nil' do
+ let(:head_sha) { nil }
+
+ it 'returns unfoldable diff positions unfiltered by head_sha' do
+ expect(collection.unfoldable).to eq([folded_text_position])
+ end
+ end
+ end
+
+ describe '#concat' do
+ let(:new_text_position) { build_text_position(old_line: 1, new_line: 1) }
+
+ it 'returns a Gitlab::Diff::Position' do
+ expect(collection.concat([new_text_position])).to be_a(described_class)
+ end
+
+ it 'concatenates the new position to the collection' do
+ collection.concat([new_text_position])
+
+ expect(collection.to_a).to eq([text_position, folded_text_position, image_position, new_text_position])
+ end
+ end
+end
diff --git a/spec/lib/gitlab/diff/position_spec.rb b/spec/lib/gitlab/diff/position_spec.rb
index 399787635c0..839780b53fe 100644
--- a/spec/lib/gitlab/diff/position_spec.rb
+++ b/spec/lib/gitlab/diff/position_spec.rb
@@ -130,6 +130,26 @@ describe Gitlab::Diff::Position do
expect(diff_file.new_path).to eq(subject.new_path)
expect(diff_file.diff_refs).to eq(subject.diff_refs)
end
+
+ context 'different folded positions in the same diff file' do
+ def diff_file(args = {})
+ described_class
+ .new(args_for_text.merge(args))
+ .diff_file(project.repository)
+ end
+
+ it 'expands the diff file', :request_store do
+ expect_any_instance_of(Gitlab::Diff::File)
+ .to receive(:unfold_diff_lines).and_call_original
+
+ diff_file(old_line: 1, new_line: 1, diff_refs: commit.diff_refs)
+
+ expect_any_instance_of(Gitlab::Diff::File)
+ .to receive(:unfold_diff_lines).and_call_original
+
+ diff_file(old_line: 5, new_line: 5, diff_refs: commit.diff_refs)
+ end
+ end
end
describe "#diff_line" do
diff --git a/spec/lib/gitlab/discussions_diff/file_collection_spec.rb b/spec/lib/gitlab/discussions_diff/file_collection_spec.rb
index 6ef1e41450f..a13727b62ea 100644
--- a/spec/lib/gitlab/discussions_diff/file_collection_spec.rb
+++ b/spec/lib/gitlab/discussions_diff/file_collection_spec.rb
@@ -40,6 +40,14 @@ describe Gitlab::DiscussionsDiff::FileCollection do
subject.load_highlight
end
+ it 'does not write cache for empty mapping' do
+ allow(subject).to receive(:highlighted_lines_by_ids).and_return([])
+
+ expect(Gitlab::DiscussionsDiff::HighlightCache).not_to receive(:write_multiple)
+
+ subject.load_highlight
+ end
+
it 'does not write cache for resolved notes' do
diff_note_a.update_column(:resolved_at, Time.now)
diff --git a/spec/lib/gitlab/downtime_check_spec.rb b/spec/lib/gitlab/downtime_check_spec.rb
index 56ad49d528f..5a5e34961a4 100644
--- a/spec/lib/gitlab/downtime_check_spec.rb
+++ b/spec/lib/gitlab/downtime_check_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe Gitlab::DowntimeCheck do
subject { described_class.new }
+
let(:path) { 'foo.rb' }
describe '#check' do
diff --git a/spec/lib/gitlab/email/message/repository_push_spec.rb b/spec/lib/gitlab/email/message/repository_push_spec.rb
index 84c5b38127e..b57764bceef 100644
--- a/spec/lib/gitlab/email/message/repository_push_spec.rb
+++ b/spec/lib/gitlab/email/message/repository_push_spec.rb
@@ -28,90 +28,107 @@ describe Gitlab::Email::Message::RepositoryPush do
describe '#project' do
subject { message.project }
+
it { is_expected.to eq project }
it { is_expected.to be_an_instance_of Project }
end
describe '#project_namespace' do
subject { message.project_namespace }
+
it { is_expected.to eq group }
it { is_expected.to be_kind_of Namespace }
end
describe '#project_name_with_namespace' do
subject { message.project_name_with_namespace }
+
it { is_expected.to eq "#{group.name} / #{project.path}" }
end
describe '#author' do
subject { message.author }
+
it { is_expected.to eq author }
it { is_expected.to be_an_instance_of User }
end
describe '#author_name' do
subject { message.author_name }
+
it { is_expected.to eq 'Author' }
end
describe '#commits' do
subject { message.commits }
+
it { is_expected.to be_kind_of Array }
it { is_expected.to all(be_instance_of Commit) }
end
describe '#diffs' do
subject { message.diffs }
+
it { is_expected.to all(be_an_instance_of Gitlab::Diff::File) }
end
describe '#diffs_count' do
subject { message.diffs_count }
+
it { is_expected.to eq raw_compare.diffs.size }
end
describe '#compare' do
subject { message.compare }
+
it { is_expected.to be_an_instance_of Compare }
end
describe '#compare_timeout' do
subject { message.compare_timeout }
+
it { is_expected.to eq raw_compare.diffs.overflow? }
end
describe '#reverse_compare?' do
subject { message.reverse_compare? }
+
it { is_expected.to eq false }
end
describe '#disable_diffs?' do
subject { message.disable_diffs? }
+
it { is_expected.to eq false }
end
describe '#send_from_committer_email?' do
subject { message.send_from_committer_email? }
+
it { is_expected.to eq true }
end
describe '#action_name' do
subject { message.action_name }
+
it { is_expected.to eq 'pushed to' }
end
describe '#ref_name' do
subject { message.ref_name }
+
it { is_expected.to eq 'master' }
end
describe '#ref_type' do
subject { message.ref_type }
+
it { is_expected.to eq 'branch' }
end
describe '#target_url' do
subject { message.target_url }
+
it { is_expected.to include 'compare' }
it { is_expected.to include compare.commits.first.parents.first.id }
it { is_expected.to include compare.commits.last.id }
@@ -119,6 +136,7 @@ describe Gitlab::Email::Message::RepositoryPush do
describe '#subject' do
subject { message.subject }
+
it { is_expected.to include "[Git][#{project.full_path}]" }
it { is_expected.to include "#{compare.commits.length} commits" }
it { is_expected.to include compare.commits.first.message.split("\n").first }
diff --git a/spec/lib/gitlab/email/receiver_spec.rb b/spec/lib/gitlab/email/receiver_spec.rb
index 6b5a355e598..43c73242f5f 100644
--- a/spec/lib/gitlab/email/receiver_spec.rb
+++ b/spec/lib/gitlab/email/receiver_spec.rb
@@ -40,7 +40,15 @@ describe Gitlab::Email::Receiver do
end
end
- context "when the email was auto generated" do
+ context "when the email was auto generated with Auto-Submitted header" do
+ let(:email_raw) { fixture_file("emails/auto_submitted.eml") }
+
+ it "raises an AutoGeneratedEmailError" do
+ expect { receiver.execute }.to raise_error(Gitlab::Email::AutoGeneratedEmailError)
+ end
+ end
+
+ context "when the email was auto generated with X-Autoreply header" do
let(:email_raw) { fixture_file("emails/auto_reply.eml") }
it "raises an AutoGeneratedEmailError" do
diff --git a/spec/lib/gitlab/experimentation_spec.rb b/spec/lib/gitlab/experimentation_spec.rb
new file mode 100644
index 00000000000..2e5fd16d370
--- /dev/null
+++ b/spec/lib/gitlab/experimentation_spec.rb
@@ -0,0 +1,157 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Experimentation::ControllerConcern, type: :controller do
+ controller(ApplicationController) do
+ include Gitlab::Experimentation::ControllerConcern
+
+ def index
+ head :ok
+ end
+ end
+
+ describe '#set_experimentation_subject_id_cookie' do
+ before do
+ get :index
+ end
+
+ context 'cookie is present' do
+ before do
+ cookies[:experimentation_subject_id] = 'test'
+ end
+
+ it 'does not change the cookie' do
+ expect(cookies[:experimentation_subject_id]).to eq 'test'
+ end
+ end
+
+ context 'cookie is not present' do
+ it 'sets a permanent signed cookie' do
+ expect(cookies.permanent.signed[:experimentation_subject_id]).to be_present
+ end
+ end
+ end
+
+ describe '#experiment_enabled?' do
+ context 'cookie is not present' do
+ it 'calls Gitlab::Experimentation.enabled? with the name of the experiment and an experimentation_subject_index of nil' do
+ expect(Gitlab::Experimentation).to receive(:enabled?).with(:test_experiment, nil)
+ controller.experiment_enabled?(:test_experiment)
+ end
+ end
+
+ context 'cookie is present' do
+ before do
+ cookies.permanent.signed[:experimentation_subject_id] = 'abcd-1234'
+ get :index
+ end
+
+ it 'calls Gitlab::Experimentation.enabled? with the name of the experiment and an experimentation_subject_index of the modulo 100 of the hex value of the uuid' do
+ # 'abcd1234'.hex % 100 = 76
+ expect(Gitlab::Experimentation).to receive(:enabled?).with(:test_experiment, 76)
+ controller.experiment_enabled?(:test_experiment)
+ end
+ end
+ end
+end
+
+describe Gitlab::Experimentation do
+ before do
+ stub_const('Gitlab::Experimentation::EXPERIMENTS', {
+ test_experiment: {
+ feature_toggle: feature_toggle,
+ environment: environment,
+ enabled_ratio: enabled_ratio
+ }
+ })
+
+ stub_feature_flags(feature_toggle => true)
+ end
+
+ let(:feature_toggle) { :test_experiment_toggle }
+ let(:environment) { Rails.env.test? }
+ let(:enabled_ratio) { 0.1 }
+
+ describe '.enabled?' do
+ subject { described_class.enabled?(:test_experiment, experimentation_subject_index) }
+
+ let(:experimentation_subject_index) { 9 }
+
+ context 'feature toggle is enabled, we are on the right environment and we are selected' do
+ it { is_expected.to be_truthy }
+ end
+
+ describe 'experiment is not defined' do
+ it 'returns false' do
+ expect(described_class.enabled?(:missing_experiment, experimentation_subject_index)).to be_falsey
+ end
+ end
+
+ describe 'feature toggle' do
+ context 'feature toggle is not set' do
+ let(:feature_toggle) { nil }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'feature toggle is not set, but a feature with the experiment key as name does exist' do
+ before do
+ stub_feature_flags(test_experiment: false)
+ end
+
+ let(:feature_toggle) { nil }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'feature toggle is disabled' do
+ before do
+ stub_feature_flags(feature_toggle => false)
+ end
+
+ it { is_expected.to be_falsey }
+ end
+ end
+
+ describe 'environment' do
+ context 'environment is not set' do
+ let(:environment) { nil }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'we are on the wrong environment' do
+ let(:environment) { ::Gitlab.com? }
+
+ it { is_expected.to be_falsey }
+ end
+ end
+
+ describe 'enabled ratio' do
+ context 'enabled ratio is not set' do
+ let(:enabled_ratio) { nil }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'experimentation_subject_index is not set' do
+ let(:experimentation_subject_index) { nil }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'experimentation_subject_index is an empty string' do
+ let(:experimentation_subject_index) { '' }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'experimentation_subject_index outside enabled ratio' do
+ let(:experimentation_subject_index) { 11 }
+
+ it { is_expected.to be_falsey }
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/favicon_spec.rb b/spec/lib/gitlab/favicon_spec.rb
index d221f39c2ed..617c0f88a89 100644
--- a/spec/lib/gitlab/favicon_spec.rb
+++ b/spec/lib/gitlab/favicon_spec.rb
@@ -57,6 +57,7 @@ RSpec.describe Gitlab::Favicon, :request_store do
favicon_status_manual
favicon_status_not_found
favicon_status_pending
+ favicon_status_preparing
favicon_status_running
favicon_status_scheduled
favicon_status_skipped
diff --git a/spec/lib/gitlab/file_markdown_link_builder_spec.rb b/spec/lib/gitlab/file_markdown_link_builder_spec.rb
index d9e2e162ae8..de0ac9733e6 100644
--- a/spec/lib/gitlab/file_markdown_link_builder_spec.rb
+++ b/spec/lib/gitlab/file_markdown_link_builder_spec.rb
@@ -27,19 +27,35 @@ describe Gitlab::FileMarkdownLinkBuilder do
end
end
- context 'when file is an image or video' do
- let(:filename) { 'dk.png' }
+ context 'when file is an image' do
+ let(:filename) { 'my_image.png' }
it 'returns preview markdown link' do
- expect(custom_class.markdown_link).to eq '![dk](/uploads/dk.png)'
+ expect(custom_class.markdown_link).to eq '![my_image](/uploads/my_image.png)'
end
end
- context 'when file is not an image or video' do
- let(:filename) { 'dk.zip' }
+ context 'when file is video' do
+ let(:filename) { 'my_video.mp4' }
+
+ it 'returns preview markdown link' do
+ expect(custom_class.markdown_link).to eq '![my_video](/uploads/my_video.mp4)'
+ end
+ end
+
+ context 'when file is audio' do
+ let(:filename) { 'my_audio.wav' }
+
+ it 'returns preview markdown link' do
+ expect(custom_class.markdown_link).to eq '![my_audio](/uploads/my_audio.wav)'
+ end
+ end
+
+ context 'when file is not embeddable' do
+ let(:filename) { 'my_zip.zip' }
it 'returns markdown link' do
- expect(custom_class.markdown_link).to eq '[dk.zip](/uploads/dk.zip)'
+ expect(custom_class.markdown_link).to eq '[my_zip.zip](/uploads/my_zip.zip)'
end
end
@@ -53,19 +69,35 @@ describe Gitlab::FileMarkdownLinkBuilder do
end
describe 'mardown_name' do
- context 'when file is an image or video' do
- let(:filename) { 'dk.png' }
+ context 'when file is an image' do
+ let(:filename) { 'my_image.png' }
+
+ it 'retrieves the name without the extension' do
+ expect(custom_class.markdown_name).to eq 'my_image'
+ end
+ end
+
+ context 'when file is video' do
+ let(:filename) { 'my_video.mp4' }
+
+ it 'retrieves the name without the extension' do
+ expect(custom_class.markdown_name).to eq 'my_video'
+ end
+ end
+
+ context 'when file is audio' do
+ let(:filename) { 'my_audio.wav' }
it 'retrieves the name without the extension' do
- expect(custom_class.markdown_name).to eq 'dk'
+ expect(custom_class.markdown_name).to eq 'my_audio'
end
end
- context 'when file is not an image or video' do
- let(:filename) { 'dk.zip' }
+ context 'when file is not embeddable' do
+ let(:filename) { 'my_zip.zip' }
it 'retrieves the name with the extesion' do
- expect(custom_class.markdown_name).to eq 'dk.zip'
+ expect(custom_class.markdown_name).to eq 'my_zip.zip'
end
end
diff --git a/spec/lib/gitlab/file_type_detection_spec.rb b/spec/lib/gitlab/file_type_detection_spec.rb
index 22ec7d414e8..05008bf895c 100644
--- a/spec/lib/gitlab/file_type_detection_spec.rb
+++ b/spec/lib/gitlab/file_type_detection_spec.rb
@@ -2,38 +2,298 @@
require 'spec_helper'
describe Gitlab::FileTypeDetection do
- def upload_fixture(filename)
- fixture_file_upload(File.join('spec', 'fixtures', filename))
- end
+ context 'when class is an uploader' do
+ let(:uploader) do
+ example_uploader = Class.new(CarrierWave::Uploader::Base) do
+ include Gitlab::FileTypeDetection
+
+ storage :file
+ end
- describe '#image_or_video?' do
- context 'when class is an uploader' do
- let(:uploader) do
- example_uploader = Class.new(CarrierWave::Uploader::Base) do
- include Gitlab::FileTypeDetection
+ example_uploader.new
+ end
+
+ def upload_fixture(filename)
+ fixture_file_upload(File.join('spec', 'fixtures', filename))
+ end
+
+ describe '#image?' do
+ it 'returns true for an image file' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ expect(uploader).to be_image
+ end
+
+ it 'returns false if filename has a dangerous image extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
+
+ expect(uploader).to be_dangerous_image
+ expect(uploader).not_to be_image
+ end
+
+ it 'returns false for a video file' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ expect(uploader).not_to be_image
+ end
+
+ it 'returns false for an audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).not_to be_image
+ end
+
+ it 'returns false if filename is blank' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ allow(uploader).to receive(:filename).and_return(nil)
+
+ expect(uploader).not_to be_image
+ end
+ end
+
+ describe '#video?' do
+ it 'returns true for a video file' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ expect(uploader).to be_video
+ end
+
+ it 'returns false for an image file' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ expect(uploader).not_to be_video
+ end
+
+ it 'returns false for an audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).not_to be_video
+ end
- storage :file
- end
+ it 'returns false if file has a dangerous image extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
- example_uploader.new
+ expect(uploader).to be_dangerous_image
+ expect(uploader).not_to be_video
end
+ it 'returns false if filename is blank' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ allow(uploader).to receive(:filename).and_return(nil)
+
+ expect(uploader).not_to be_video
+ end
+ end
+
+ describe '#audio?' do
+ it 'returns true for an audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).to be_audio
+ end
+
+ it 'returns false for an image file' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ expect(uploader).not_to be_audio
+ end
+
+ it 'returns false for a video file' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ expect(uploader).not_to be_audio
+ end
+
+ it 'returns false if file has a dangerous image extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
+
+ expect(uploader).to be_dangerous_image
+ expect(uploader).not_to be_audio
+ end
+
+ it 'returns false if filename is blank' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ allow(uploader).to receive(:filename).and_return(nil)
+
+ expect(uploader).not_to be_audio
+ end
+ end
+
+ describe '#embeddable?' do
it 'returns true for an image file' do
uploader.store!(upload_fixture('dk.png'))
- expect(uploader).to be_image_or_video
+ expect(uploader).to be_embeddable
end
it 'returns true for a video file' do
uploader.store!(upload_fixture('video_sample.mp4'))
- expect(uploader).to be_image_or_video
+ expect(uploader).to be_embeddable
+ end
+
+ it 'returns true for an audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).to be_embeddable
+ end
+
+ it 'returns false if not an embeddable file' do
+ uploader.store!(upload_fixture('doc_sample.txt'))
+
+ expect(uploader).not_to be_embeddable
+ end
+
+ it 'returns false if filename has a dangerous image extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
+
+ expect(uploader).to be_dangerous_image
+ expect(uploader).not_to be_embeddable
+ end
+
+ it 'returns false if filename is blank' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ allow(uploader).to receive(:filename).and_return(nil)
+
+ expect(uploader).not_to be_embeddable
+ end
+ end
+
+ describe '#dangerous_image?' do
+ it 'returns true if filename has a dangerous extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
+
+ expect(uploader).to be_dangerous_image
+ end
+
+ it 'returns false for an image file' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ expect(uploader).not_to be_dangerous_image
+ end
+
+ it 'returns false for a video file' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ expect(uploader).not_to be_dangerous_image
+ end
+
+ it 'returns false for an audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).not_to be_dangerous_image
+ end
+
+ it 'returns false if filename is blank' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ allow(uploader).to receive(:filename).and_return(nil)
+
+ expect(uploader).not_to be_dangerous_image
+ end
+ end
+
+ describe '#dangerous_video?' do
+ it 'returns false for a safe video file' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ expect(uploader).not_to be_dangerous_video
+ end
+
+ it 'returns false if filename is a dangerous image extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
+
+ expect(uploader).not_to be_dangerous_video
+ end
+
+ it 'returns false for an image file' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ expect(uploader).not_to be_dangerous_video
+ end
+
+ it 'returns false for an audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).not_to be_dangerous_video
+ end
+
+ it 'returns false if filename is blank' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ allow(uploader).to receive(:filename).and_return(nil)
+
+ expect(uploader).not_to be_dangerous_video
+ end
+ end
+
+ describe '#dangerous_audio?' do
+ it 'returns false for a safe audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).not_to be_dangerous_audio
+ end
+
+ it 'returns false if filename is a dangerous image extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
+
+ expect(uploader).not_to be_dangerous_audio
+ end
+
+ it 'returns false for an image file' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ expect(uploader).not_to be_dangerous_audio
+ end
+
+ it 'returns false for an video file' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ expect(uploader).not_to be_dangerous_audio
+ end
+
+ it 'returns false if filename is blank' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ allow(uploader).to receive(:filename).and_return(nil)
+
+ expect(uploader).not_to be_dangerous_audio
+ end
+ end
+
+ describe '#dangerous_embeddable?' do
+ it 'returns true if filename has a dangerous image extension' do
+ uploader.store!(upload_fixture('unsanitized.svg'))
+
+ expect(uploader).to be_dangerous_embeddable
+ end
+
+ it 'returns false for an image file' do
+ uploader.store!(upload_fixture('dk.png'))
+
+ expect(uploader).not_to be_dangerous_embeddable
+ end
+
+ it 'returns false for a video file' do
+ uploader.store!(upload_fixture('video_sample.mp4'))
+
+ expect(uploader).not_to be_dangerous_embeddable
end
- it 'returns false for other extensions' do
+ it 'returns false for an audio file' do
+ uploader.store!(upload_fixture('audio_sample.wav'))
+
+ expect(uploader).not_to be_dangerous_embeddable
+ end
+
+ it 'returns false for a non-embeddable file' do
uploader.store!(upload_fixture('doc_sample.txt'))
- expect(uploader).not_to be_image_or_video
+ expect(uploader).not_to be_dangerous_embeddable
end
it 'returns false if filename is blank' do
@@ -41,41 +301,289 @@ describe Gitlab::FileTypeDetection do
allow(uploader).to receive(:filename).and_return(nil)
- expect(uploader).not_to be_image_or_video
+ expect(uploader).not_to be_dangerous_embeddable
end
end
+ end
- context 'when class is a regular class' do
- let(:custom_class) do
- custom_class = Class.new do
- include Gitlab::FileTypeDetection
- end
+ context 'when class is a regular class' do
+ let(:custom_class) do
+ custom_class = Class.new do
+ include Gitlab::FileTypeDetection
+ end
+
+ custom_class.new
+ end
+
+ describe '#image?' do
+ it 'returns true for an image file' do
+ allow(custom_class).to receive(:filename).and_return('dk.png')
+
+ expect(custom_class).to be_image
+ end
+
+ it 'returns false if file has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).to be_dangerous_image
+ expect(custom_class).not_to be_image
+ end
+
+ it 'returns false for a video file' do
+ allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
- custom_class.new
+ expect(custom_class).not_to be_image
end
+ it 'returns false for an audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).not_to be_image
+ end
+
+ it 'returns false if filename is blank' do
+ allow(custom_class).to receive(:filename).and_return(nil)
+
+ expect(custom_class).not_to be_image
+ end
+ end
+
+ describe '#video?' do
+ it 'returns true for a video file' do
+ allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
+
+ expect(custom_class).to be_video
+ end
+
+ it 'returns false for an image file' do
+ allow(custom_class).to receive(:filename).and_return('dk.png')
+
+ expect(custom_class).not_to be_video
+ end
+
+ it 'returns false for an audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).not_to be_video
+ end
+
+ it 'returns false if file has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).to be_dangerous_image
+ expect(custom_class).not_to be_video
+ end
+
+ it 'returns false if filename is blank' do
+ allow(custom_class).to receive(:filename).and_return(nil)
+
+ expect(custom_class).not_to be_video
+ end
+ end
+
+ describe '#audio?' do
+ it 'returns true for an audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).to be_audio
+ end
+
+ it 'returns false for an image file' do
+ allow(custom_class).to receive(:filename).and_return('dk.png')
+
+ expect(custom_class).not_to be_audio
+ end
+
+ it 'returns false for a video file' do
+ allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
+
+ expect(custom_class).not_to be_audio
+ end
+
+ it 'returns false if file has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).to be_dangerous_image
+ expect(custom_class).not_to be_audio
+ end
+
+ it 'returns false if filename is blank' do
+ allow(custom_class).to receive(:filename).and_return(nil)
+
+ expect(custom_class).not_to be_audio
+ end
+ end
+
+ describe '#embeddable?' do
it 'returns true for an image file' do
allow(custom_class).to receive(:filename).and_return('dk.png')
- expect(custom_class).to be_image_or_video
+ expect(custom_class).to be_embeddable
end
it 'returns true for a video file' do
allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
- expect(custom_class).to be_image_or_video
+ expect(custom_class).to be_embeddable
+ end
+
+ it 'returns true for an audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).to be_embeddable
+ end
+
+ it 'returns false if not an embeddable file' do
+ allow(custom_class).to receive(:filename).and_return('doc_sample.txt')
+
+ expect(custom_class).not_to be_embeddable
+ end
+
+ it 'returns false if filename has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).to be_dangerous_image
+ expect(custom_class).not_to be_embeddable
+ end
+
+ it 'returns false if filename is blank' do
+ allow(custom_class).to receive(:filename).and_return(nil)
+
+ expect(custom_class).not_to be_embeddable
+ end
+ end
+
+ describe '#dangerous_image?' do
+ it 'returns true if file has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).to be_dangerous_image
+ end
+
+ it 'returns false for an image file' do
+ allow(custom_class).to receive(:filename).and_return('dk.png')
+
+ expect(custom_class).not_to be_dangerous_image
+ end
+
+ it 'returns false for a video file' do
+ allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
+
+ expect(custom_class).not_to be_dangerous_image
+ end
+
+ it 'returns false for an audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).not_to be_dangerous_image
+ end
+
+ it 'returns false if filename is blank' do
+ allow(custom_class).to receive(:filename).and_return(nil)
+
+ expect(custom_class).not_to be_dangerous_image
+ end
+ end
+
+ describe '#dangerous_video?' do
+ it 'returns false for a safe video file' do
+ allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
+
+ expect(custom_class).not_to be_dangerous_video
+ end
+
+ it 'returns false for an image file' do
+ allow(custom_class).to receive(:filename).and_return('dk.png')
+
+ expect(custom_class).not_to be_dangerous_video
+ end
+
+ it 'returns false for an audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).not_to be_dangerous_video
+ end
+
+ it 'returns false if file has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).not_to be_dangerous_video
+ end
+
+ it 'returns false if filename is blank' do
+ allow(custom_class).to receive(:filename).and_return(nil)
+
+ expect(custom_class).not_to be_dangerous_video
+ end
+ end
+
+ describe '#dangerous_audio?' do
+ it 'returns false for a safe audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).not_to be_dangerous_audio
+ end
+
+ it 'returns false for an image file' do
+ allow(custom_class).to receive(:filename).and_return('dk.png')
+
+ expect(custom_class).not_to be_dangerous_audio
+ end
+
+ it 'returns false for a video file' do
+ allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
+
+ expect(custom_class).not_to be_dangerous_audio
+ end
+
+ it 'returns false if file has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).not_to be_dangerous_audio
+ end
+
+ it 'returns false if filename is blank' do
+ allow(custom_class).to receive(:filename).and_return(nil)
+
+ expect(custom_class).not_to be_dangerous_audio
+ end
+ end
+
+ describe '#dangerous_embeddable?' do
+ it 'returns true if file has a dangerous image extension' do
+ allow(custom_class).to receive(:filename).and_return('unsanitized.svg')
+
+ expect(custom_class).to be_dangerous_embeddable
+ end
+
+ it 'returns false for an image file' do
+ allow(custom_class).to receive(:filename).and_return('dk.png')
+
+ expect(custom_class).not_to be_dangerous_embeddable
+ end
+
+ it 'returns false for a video file' do
+ allow(custom_class).to receive(:filename).and_return('video_sample.mp4')
+
+ expect(custom_class).not_to be_dangerous_embeddable
+ end
+
+ it 'returns false for an audio file' do
+ allow(custom_class).to receive(:filename).and_return('audio_sample.wav')
+
+ expect(custom_class).not_to be_dangerous_embeddable
end
- it 'returns false for other extensions' do
+ it 'returns false for a non-embeddable file' do
allow(custom_class).to receive(:filename).and_return('doc_sample.txt')
- expect(custom_class).not_to be_image_or_video
+ expect(custom_class).not_to be_dangerous_embeddable
end
it 'returns false if filename is blank' do
allow(custom_class).to receive(:filename).and_return(nil)
- expect(custom_class).not_to be_image_or_video
+ expect(custom_class).not_to be_dangerous_embeddable
end
end
end
diff --git a/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb b/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb
index d24f5c45107..eef3b9de476 100644
--- a/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb
+++ b/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb
@@ -84,11 +84,13 @@ describe Gitlab::Gfm::UploadsRewriter do
describe '#needs_rewrite?' do
subject { rewriter.needs_rewrite? }
+
it { is_expected.to eq true }
end
describe '#files' do
subject { rewriter.files }
+
it { is_expected.to be_an(Array) }
end
end
diff --git a/spec/lib/gitlab/git/branch_spec.rb b/spec/lib/gitlab/git/branch_spec.rb
index 0764e525ede..02ef7b92538 100644
--- a/spec/lib/gitlab/git/branch_spec.rb
+++ b/spec/lib/gitlab/git/branch_spec.rb
@@ -44,6 +44,7 @@ describe Gitlab::Git::Branch, :seed_helper do
describe '#size' do
subject { super().size }
+
it { is_expected.to eq(SeedRepo::Repo::BRANCHES.size) }
end
diff --git a/spec/lib/gitlab/git/changes_spec.rb b/spec/lib/gitlab/git/changes_spec.rb
new file mode 100644
index 00000000000..7f56d30cb48
--- /dev/null
+++ b/spec/lib/gitlab/git/changes_spec.rb
@@ -0,0 +1,81 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Git::Changes do
+ let(:changes) { described_class.new }
+
+ describe '#includes_branches?' do
+ subject { changes.includes_branches? }
+
+ context 'has changes for branches' do
+ before do
+ changes.add_branch_change(oldrev: 'abc123', newrev: 'def456', ref: 'branch')
+ end
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'has no changes for branches' do
+ before do
+ changes.add_tag_change(oldrev: 'abc123', newrev: 'def456', ref: 'tag')
+ end
+
+ it { is_expected.to be_falsey }
+ end
+ end
+
+ describe '#includes_tags?' do
+ subject { changes.includes_tags? }
+
+ context 'has changes for tags' do
+ before do
+ changes.add_tag_change(oldrev: 'abc123', newrev: 'def456', ref: 'tag')
+ end
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'has no changes for tags' do
+ before do
+ changes.add_branch_change(oldrev: 'abc123', newrev: 'def456', ref: 'branch')
+ end
+
+ it { is_expected.to be_falsey }
+ end
+ end
+
+ describe '#add_branch_change' do
+ let(:change) { { oldrev: 'abc123', newrev: 'def456', ref: 'branch' } }
+
+ subject { changes.add_branch_change(change) }
+
+ it 'adds the branch change to the collection' do
+ expect(subject).to include(change)
+ expect(subject.refs).to include(change[:ref])
+ expect(subject.repository_data).to include(before: change[:oldrev], after: change[:newrev], ref: change[:ref])
+ expect(subject.branch_changes).to include(change)
+ end
+
+ it 'does not add the change as a tag change' do
+ expect(subject.tag_changes).not_to include(change)
+ end
+ end
+
+ describe '#add_tag_change' do
+ let(:change) { { oldrev: 'abc123', newrev: 'def456', ref: 'tag' } }
+
+ subject { changes.add_tag_change(change) }
+
+ it 'adds the tag change to the collection' do
+ expect(subject).to include(change)
+ expect(subject.refs).to include(change[:ref])
+ expect(subject.repository_data).to include(before: change[:oldrev], after: change[:newrev], ref: change[:ref])
+ expect(subject.tag_changes).to include(change)
+ end
+
+ it 'does not add the change as a branch change' do
+ expect(subject.branch_changes).not_to include(change)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/git/commit_spec.rb b/spec/lib/gitlab/git/commit_spec.rb
index 3f0e6b34291..23651e3d7f2 100644
--- a/spec/lib/gitlab/git/commit_spec.rb
+++ b/spec/lib/gitlab/git/commit_spec.rb
@@ -174,6 +174,7 @@ describe Gitlab::Git::Commit, :seed_helper do
describe '#id' do
subject { super().id }
+
it { is_expected.to eq(SeedRepo::LastCommit::ID) }
end
end
@@ -183,6 +184,7 @@ describe Gitlab::Git::Commit, :seed_helper do
describe '#id' do
subject { super().id }
+
it { is_expected.to eq(SeedRepo::Commit::ID) }
end
end
@@ -192,6 +194,7 @@ describe Gitlab::Git::Commit, :seed_helper do
describe '#id' do
subject { super().id }
+
it { is_expected.to eq(SeedRepo::BigCommit::ID) }
end
end
@@ -544,11 +547,13 @@ describe Gitlab::Git::Commit, :seed_helper do
describe '#id' do
subject { super().id }
+
it { is_expected.to eq(sample_commit_hash[:id])}
end
describe '#message' do
subject { super().message }
+
it { is_expected.to eq(sample_commit_hash[:message])}
end
end
@@ -558,16 +563,19 @@ describe Gitlab::Git::Commit, :seed_helper do
describe '#additions' do
subject { super().additions }
+
it { is_expected.to eq(11) }
end
describe '#deletions' do
subject { super().deletions }
+
it { is_expected.to eq(6) }
end
describe '#total' do
subject { super().total }
+
it { is_expected.to eq(17) }
end
end
@@ -596,6 +604,7 @@ describe Gitlab::Git::Commit, :seed_helper do
describe '#keys' do
subject { super().keys.sort }
+
it { is_expected.to match(sample_commit_hash.keys.sort) }
end
end
diff --git a/spec/lib/gitlab/git/diff_collection_spec.rb b/spec/lib/gitlab/git/diff_collection_spec.rb
index be6ab0c1200..ce45d6e24ba 100644
--- a/spec/lib/gitlab/git/diff_collection_spec.rb
+++ b/spec/lib/gitlab/git/diff_collection_spec.rb
@@ -10,6 +10,7 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
expanded: expanded
)
end
+
let(:iterator) { MutatingConstantIterator.new(file_count, fake_diff(line_length, line_count)) }
let(:file_count) { 0 }
let(:line_length) { 1 }
@@ -21,6 +22,7 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#to_a' do
subject { super().to_a }
+
it { is_expected.to be_kind_of ::Array }
end
@@ -52,16 +54,19 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('3') }
end
@@ -76,6 +81,7 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
@@ -84,16 +90,19 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('3') }
end
@@ -108,6 +117,7 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
end
@@ -118,21 +128,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_truthy }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('0+') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq 1000 }
end
@@ -143,21 +157,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('3') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
@@ -174,21 +192,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_truthy }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('10+') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq 10 }
end
@@ -199,21 +221,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('11') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
@@ -226,21 +252,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_truthy }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('3+') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq 120 }
end
@@ -251,21 +281,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('11') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
@@ -282,21 +316,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('10') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
@@ -310,21 +348,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_truthy }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('9+') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
@@ -335,21 +377,25 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('10') }
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq file_count * line_count }
end
@@ -363,26 +409,31 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
describe '#overflow?' do
subject { super().overflow? }
+
it { is_expected.to be_falsey }
end
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_truthy }
end
describe '#size' do
subject { super().size }
+
it { is_expected.to eq(0) }
end
describe '#real_size' do
subject { super().real_size }
+
it { is_expected.to eq('0')}
end
describe '#line_count' do
subject { super().line_count }
+
it { is_expected.to eq 0 }
end
end
@@ -537,6 +588,70 @@ describe Gitlab::Git::DiffCollection, :seed_helper do
end
end
end
+
+ context 'when offset_index is given' do
+ subject do
+ Gitlab::Git::DiffCollection.new(
+ iterator,
+ max_files: max_files,
+ max_lines: max_lines,
+ limits: limits,
+ offset_index: 2,
+ expanded: expanded
+ )
+ end
+
+ def diff(raw)
+ raw['diff']
+ end
+
+ let(:iterator) do
+ [
+ fake_diff(1, 1),
+ fake_diff(2, 2),
+ fake_diff(3, 3),
+ fake_diff(4, 4)
+ ]
+ end
+
+ it 'does not yield diffs before the offset' do
+ expect(subject.to_a.map(&:diff)).to eq(
+ [
+ diff(fake_diff(3, 3)),
+ diff(fake_diff(4, 4))
+ ]
+ )
+ end
+
+ context 'when go over safe limits on bytes' do
+ let(:iterator) do
+ [
+ fake_diff(1, 10), # 10
+ fake_diff(1, 10), # 20
+ fake_diff(1, 15), # 35
+ fake_diff(1, 20), # 55
+ fake_diff(1, 45), # 100 - limit hit
+ fake_diff(1, 45),
+ fake_diff(1, 20480),
+ fake_diff(1, 1)
+ ]
+ end
+
+ before do
+ stub_const('Gitlab::Git::DiffCollection::DEFAULT_LIMITS',
+ { max_files: max_files, max_lines: 80 })
+ end
+
+ it 'considers size of diffs before the offset for prunning' do
+ expect(subject.to_a.map(&:diff)).to eq(
+ [
+ diff(fake_diff(1, 15)),
+ diff(fake_diff(1, 20))
+ ]
+ )
+ end
+ end
+ end
end
def fake_diff(line_length, line_count)
diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb
index dcb7401b695..44c41da7560 100644
--- a/spec/lib/gitlab/git/repository_spec.rb
+++ b/spec/lib/gitlab/git/repository_spec.rb
@@ -93,6 +93,7 @@ describe Gitlab::Git::Repository, :seed_helper do
describe '#last' do
subject { super().last }
+
it { is_expected.to eq("v1.2.1") }
end
it { is_expected.to include("v1.0.0") }
@@ -215,11 +216,13 @@ describe Gitlab::Git::Repository, :seed_helper do
describe '#first' do
subject { super().first }
+
it { is_expected.to eq('feature') }
end
describe '#last' do
subject { super().last }
+
it { is_expected.to eq('v1.2.1') }
end
end
@@ -2236,4 +2239,45 @@ describe Gitlab::Git::Repository, :seed_helper do
expect(repository.commit(new_commit.oid).id).to eq(new_commit.oid)
end
end
+
+ describe '#rename' do
+ let(:project) { create(:project, :repository)}
+ let(:repository) { project.repository }
+
+ it 'moves the repository' do
+ checksum = repository.checksum
+ new_relative_path = "rename_test/relative/path"
+ renamed_repository = Gitlab::Git::Repository.new(repository.storage, new_relative_path, nil, nil)
+
+ repository.rename(new_relative_path)
+
+ expect(renamed_repository.checksum).to eq(checksum)
+ expect(repository.exists?).to be false
+ end
+ end
+
+ describe '#remove' do
+ let(:project) { create(:project, :repository) }
+ let(:repository) { project.repository }
+
+ it 'removes the repository' do
+ expect(repository.exists?).to be true
+
+ repository.remove
+
+ expect(repository.raw_repository.exists?).to be false
+ end
+
+ context 'when the repository does not exist' do
+ let(:repository) { create(:project).repository }
+
+ it 'is idempotent' do
+ expect(repository.exists?).to be false
+
+ repository.remove
+
+ expect(repository.raw_repository.exists?).to be false
+ end
+ end
+ end
end
diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb
index d584cdbe280..81dc96b538a 100644
--- a/spec/lib/gitlab/git_access_spec.rb
+++ b/spec/lib/gitlab/git_access_spec.rb
@@ -541,6 +541,13 @@ describe Gitlab::GitAccess do
expect { pull_access_check }.to raise_unauthorized('Your account has been blocked.')
end
+ it 'disallows deactivated users to pull' do
+ project.add_maintainer(user)
+ user.deactivate!
+
+ expect { pull_access_check }.to raise_unauthorized("Your account has been deactivated by your administrator. Please log back in from a web browser to reactivate your account at #{Gitlab.config.gitlab.url}")
+ end
+
context 'when the project repository does not exist' do
it 'returns not found' do
project.add_guest(user)
@@ -925,6 +932,12 @@ describe Gitlab::GitAccess do
project.add_developer(user)
end
+ it 'does not allow deactivated users to push' do
+ user.deactivate!
+
+ expect { push_access_check }.to raise_unauthorized("Your account has been deactivated by your administrator. Please log back in from a web browser to reactivate your account at #{Gitlab.config.gitlab.url}")
+ end
+
it 'cleans up the files' do
expect(project.repository).to receive(:clean_stale_repository_files).and_call_original
expect { push_access_check }.not_to raise_error
diff --git a/spec/lib/gitlab/gitaly_client/commit_service_spec.rb b/spec/lib/gitlab/gitaly_client/commit_service_spec.rb
index ba6abba4e61..71489adb373 100644
--- a/spec/lib/gitlab/gitaly_client/commit_service_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/commit_service_spec.rb
@@ -252,31 +252,6 @@ describe Gitlab::GitalyClient::CommitService do
end
end
- describe '#patch' do
- let(:request) do
- Gitaly::CommitPatchRequest.new(
- repository: repository_message, revision: revision
- )
- end
- let(:response) { [double(data: "my "), double(data: "diff")] }
-
- subject { described_class.new(repository).patch(revision) }
-
- it 'sends an RPC request' do
- expect_any_instance_of(Gitaly::DiffService::Stub).to receive(:commit_patch)
- .with(request, kind_of(Hash)).and_return([])
-
- subject
- end
-
- it 'concatenates the responses data' do
- allow_any_instance_of(Gitaly::DiffService::Stub).to receive(:commit_patch)
- .with(request, kind_of(Hash)).and_return(response)
-
- expect(subject).to eq("my diff")
- end
- end
-
describe '#commit_stats' do
let(:request) do
Gitaly::CommitStatsRequest.new(
diff --git a/spec/lib/gitlab/gitaly_client/conflict_files_stitcher_spec.rb b/spec/lib/gitlab/gitaly_client/conflict_files_stitcher_spec.rb
index 1c933410bd5..a3602463756 100644
--- a/spec/lib/gitlab/gitaly_client/conflict_files_stitcher_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/conflict_files_stitcher_spec.rb
@@ -32,7 +32,7 @@ describe Gitlab::GitalyClient::ConflictFilesStitcher do
double(files: [double(header: nil, content: content_2[11..-1])])
]
- conflict_files = described_class.new(messages).to_a
+ conflict_files = described_class.new(messages, target_repository.gitaly_repository).to_a
expect(conflict_files.size).to be(2)
diff --git a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb
index a3808adb376..f4b73931f21 100644
--- a/spec/lib/gitlab/gitaly_client/repository_service_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/repository_service_spec.rb
@@ -272,4 +272,26 @@ describe Gitlab::GitalyClient::RepositoryService do
end
end
end
+
+ describe 'remove' do
+ it 'sends a remove_repository message' do
+ expect_any_instance_of(Gitaly::RepositoryService::Stub)
+ .to receive(:remove_repository)
+ .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
+ .and_return(double(value: true))
+
+ client.remove
+ end
+ end
+
+ describe 'rename' do
+ it 'sends a rename_repository message' do
+ expect_any_instance_of(Gitaly::RepositoryService::Stub)
+ .to receive(:rename_repository)
+ .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
+ .and_return(double(value: true))
+
+ client.rename('some/new/path')
+ end
+ end
end
diff --git a/spec/lib/gitlab/gitaly_client/storage_service_spec.rb b/spec/lib/gitlab/gitaly_client/storage_service_spec.rb
deleted file mode 100644
index 6c25e2d6ebd..00000000000
--- a/spec/lib/gitlab/gitaly_client/storage_service_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GitalyClient::StorageService do
- describe '#delete_all_repositories' do
- let!(:project) { create(:project, :repository) }
-
- it 'removes all repositories' do
- described_class.new(project.repository_storage).delete_all_repositories
-
- expect(project.repository.exists?).to be(false)
- end
- end
-end
diff --git a/spec/lib/gitlab/gitaly_client/storage_settings_spec.rb b/spec/lib/gitlab/gitaly_client/storage_settings_spec.rb
index f2f53982b09..2f83e5a5221 100644
--- a/spec/lib/gitlab/gitaly_client/storage_settings_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/storage_settings_spec.rb
@@ -27,6 +27,38 @@ describe Gitlab::GitalyClient::StorageSettings do
end
end
+ describe '.gitaly_address' do
+ context 'when the storage settings have no gitaly address but one is requested' do
+ it 'raises an error' do
+ expect do
+ described_class.new("path" => Rails.root).gitaly_address
+ end.to raise_error("key not found: \"gitaly_address\"")
+ end
+ end
+
+ context 'when the storage settings have a gitaly address and one is requested' do
+ it 'returns the setting value' do
+ expect(described_class.new("path" => Rails.root, "gitaly_address" => "test").gitaly_address).to eq("test")
+ end
+ end
+
+ context 'when the storage settings have a gitaly address keyed symbolically' do
+ it 'raises no error' do
+ expect do
+ described_class.new("path" => Rails.root, :gitaly_address => "test").gitaly_address
+ end.not_to raise_error
+ end
+ end
+
+ context 'when the storage settings have a gitaly address keyed with a string' do
+ it 'raises no error' do
+ expect do
+ described_class.new("path" => Rails.root, "gitaly_address" => "test").gitaly_address
+ end.not_to raise_error
+ end
+ end
+ end
+
describe '.disk_access_denied?' do
context 'when Rugged is enabled', :enable_rugged do
it 'returns false' do
diff --git a/spec/lib/gitlab/gitaly_client_spec.rb b/spec/lib/gitlab/gitaly_client_spec.rb
index 1c5f72a4396..ea3bb12d049 100644
--- a/spec/lib/gitlab/gitaly_client_spec.rb
+++ b/spec/lib/gitlab/gitaly_client_spec.rb
@@ -182,24 +182,24 @@ describe Gitlab::GitalyClient do
end
it 'sets the gitaly-session-id in the metadata' do
- results = described_class.request_kwargs('default', nil)
+ results = described_class.request_kwargs('default', timeout: 1)
expect(results[:metadata]).to include('gitaly-session-id')
end
context 'when RequestStore is not enabled' do
it 'sets a different gitaly-session-id per request' do
- gitaly_session_id = described_class.request_kwargs('default', nil)[:metadata]['gitaly-session-id']
+ gitaly_session_id = described_class.request_kwargs('default', timeout: 1)[:metadata]['gitaly-session-id']
- expect(described_class.request_kwargs('default', nil)[:metadata]['gitaly-session-id']).not_to eq(gitaly_session_id)
+ expect(described_class.request_kwargs('default', timeout: 1)[:metadata]['gitaly-session-id']).not_to eq(gitaly_session_id)
end
end
context 'when RequestStore is enabled', :request_store do
it 'sets the same gitaly-session-id on every outgoing request metadata' do
- gitaly_session_id = described_class.request_kwargs('default', nil)[:metadata]['gitaly-session-id']
+ gitaly_session_id = described_class.request_kwargs('default', timeout: 1)[:metadata]['gitaly-session-id']
3.times do
- expect(described_class.request_kwargs('default', nil)[:metadata]['gitaly-session-id']).to eq(gitaly_session_id)
+ expect(described_class.request_kwargs('default', timeout: 1)[:metadata]['gitaly-session-id']).to eq(gitaly_session_id)
end
end
end
diff --git a/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb b/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb
index 6d614c6527a..8331f0b6bc7 100644
--- a/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb
@@ -311,10 +311,11 @@ describe Gitlab::GithubImport::Importer::PullRequestImporter, :clean_gitlab_redi
end
end
- it 'creates the merge request diffs' do
+ it 'creates a merge request diff and sets it as the latest' do
mr = insert_git_data
expect(mr.merge_request_diffs.exists?).to eq(true)
+ expect(mr.reload.latest_merge_request_diff_id).to eq(mr.merge_request_diffs.first.id)
end
it 'creates the merge request diff commits' do
diff --git a/spec/lib/gitlab/github_import/importer/releases_importer_spec.rb b/spec/lib/gitlab/github_import/importer/releases_importer_spec.rb
index 0e5419e6c5e..6a31c57a73d 100644
--- a/spec/lib/gitlab/github_import/importer/releases_importer_spec.rb
+++ b/spec/lib/gitlab/github_import/importer/releases_importer_spec.rb
@@ -4,17 +4,17 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
let(:project) { create(:project) }
let(:client) { double(:client) }
let(:importer) { described_class.new(project, client) }
+ let(:github_release_name) { 'Initial Release' }
let(:created_at) { Time.new(2017, 1, 1, 12, 00) }
- let(:updated_at) { Time.new(2017, 1, 1, 12, 15) }
let(:released_at) { Time.new(2017, 1, 1, 12, 00) }
- let(:release) do
+ let(:github_release) do
double(
- :release,
+ :github_release,
tag_name: '1.0',
+ name: github_release_name,
body: 'This is my release',
created_at: created_at,
- updated_at: updated_at,
published_at: released_at
)
end
@@ -25,7 +25,7 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
tag_name: '1.0',
description: 'This is my release',
created_at: created_at,
- updated_at: updated_at,
+ updated_at: created_at,
released_at: released_at
}
@@ -34,11 +34,27 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
importer.execute
end
+
+ it 'imports draft releases' do
+ release_double = double(
+ name: 'Test',
+ body: 'This is description',
+ tag_name: '1.0',
+ description: 'This is my release',
+ created_at: created_at,
+ updated_at: created_at,
+ published_at: nil
+ )
+
+ expect(importer).to receive(:each_release).and_return([release_double])
+
+ expect { importer.execute }.to change { Release.count }.by(1)
+ end
end
describe '#build_releases' do
- it 'returns an Array containnig release rows' do
- expect(importer).to receive(:each_release).and_return([release])
+ it 'returns an Array containing release rows' do
+ expect(importer).to receive(:each_release).and_return([github_release])
rows = importer.build_releases
@@ -49,13 +65,13 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
it 'does not create releases that already exist' do
create(:release, project: project, tag: '1.0', description: '1.0')
- expect(importer).to receive(:each_release).and_return([release])
+ expect(importer).to receive(:each_release).and_return([github_release])
expect(importer.build_releases).to be_empty
end
it 'uses a default release description if none is provided' do
- expect(release).to receive(:body).and_return('')
- expect(importer).to receive(:each_release).and_return([release])
+ expect(github_release).to receive(:body).and_return('')
+ expect(importer).to receive(:each_release).and_return([github_release])
release = importer.build_releases.first
@@ -64,7 +80,7 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
end
describe '#build' do
- let(:release_hash) { importer.build(release) }
+ let(:release_hash) { importer.build(github_release) }
it 'returns the attributes of the release as a Hash' do
expect(release_hash).to be_an_instance_of(Hash)
@@ -88,13 +104,17 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
end
it 'includes the updated timestamp' do
- expect(release_hash[:updated_at]).to eq(updated_at)
+ expect(release_hash[:updated_at]).to eq(created_at)
+ end
+
+ it 'includes the release name' do
+ expect(release_hash[:name]).to eq(github_release_name)
end
end
end
describe '#each_release' do
- let(:release) { double(:release) }
+ let(:github_release) { double(:github_release) }
before do
allow(project).to receive(:import_source).and_return('foo/bar')
@@ -102,7 +122,7 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
allow(client)
.to receive(:releases)
.with('foo/bar')
- .and_return([release].to_enum)
+ .and_return([github_release].to_enum)
end
it 'returns an Enumerator' do
@@ -110,19 +130,19 @@ describe Gitlab::GithubImport::Importer::ReleasesImporter do
end
it 'yields every release to the Enumerator' do
- expect(importer.each_release.next).to eq(release)
+ expect(importer.each_release.next).to eq(github_release)
end
end
describe '#description_for' do
it 'returns the description when present' do
- expect(importer.description_for(release)).to eq(release.body)
+ expect(importer.description_for(github_release)).to eq(github_release.body)
end
it 'returns a generated description when one is not present' do
- allow(release).to receive(:body).and_return('')
+ allow(github_release).to receive(:body).and_return('')
- expect(importer.description_for(release)).to eq('Release for tag 1.0')
+ expect(importer.description_for(github_release)).to eq('Release for tag 1.0')
end
end
end
diff --git a/spec/lib/gitlab/gitlab_import/client_spec.rb b/spec/lib/gitlab/gitlab_import/client_spec.rb
index 22ad88e28cb..0f1745fcc02 100644
--- a/spec/lib/gitlab/gitlab_import/client_spec.rb
+++ b/spec/lib/gitlab/gitlab_import/client_spec.rb
@@ -52,6 +52,7 @@ describe Gitlab::GitlabImport::Client do
describe '#projects' do
subject(:method) { :projects }
+
let(:args) { [] }
let(:element_list) { build_list(:project, 2) }
@@ -67,6 +68,7 @@ describe Gitlab::GitlabImport::Client do
describe '#issues' do
subject(:method) { :issues }
+
let(:args) { [1] }
let(:element_list) { build_list(:issue, 2) }
@@ -82,6 +84,7 @@ describe Gitlab::GitlabImport::Client do
describe '#issue_comments' do
subject(:method) { :issue_comments }
+
let(:args) { [1, 1] }
let(:element_list) { build_list(:note_on_issue, 2) }
diff --git a/spec/lib/gitlab/gl_repository/repo_type_spec.rb b/spec/lib/gitlab/gl_repository/repo_type_spec.rb
index f06a2448ff7..9e09e1411ab 100644
--- a/spec/lib/gitlab/gl_repository/repo_type_spec.rb
+++ b/spec/lib/gitlab/gl_repository/repo_type_spec.rb
@@ -4,36 +4,6 @@ require 'spec_helper'
describe Gitlab::GlRepository::RepoType do
set(:project) { create(:project) }
- shared_examples 'a repo type' do
- describe "#identifier_for_subject" do
- subject { described_class.identifier_for_subject(project) }
-
- it { is_expected.to eq(expected_identifier) }
- end
-
- describe "#fetch_id" do
- it "finds an id match in the identifier" do
- expect(described_class.fetch_id(expected_identifier)).to eq(expected_id)
- end
-
- it 'does not break on other identifiers' do
- expect(described_class.fetch_id("wiki-noid")).to eq(nil)
- end
- end
-
- describe "#path_suffix" do
- subject { described_class.path_suffix }
-
- it { is_expected.to eq(expected_suffix) }
- end
-
- describe "#repository_for" do
- it "finds the repository for the repo type" do
- expect(described_class.repository_for(project)).to eq(expected_repository)
- end
- end
- end
-
describe Gitlab::GlRepository::PROJECT do
it_behaves_like 'a repo type' do
let(:expected_identifier) { "project-#{project.id}" }
diff --git a/spec/lib/gitlab/gpg/commit_spec.rb b/spec/lib/gitlab/gpg/commit_spec.rb
index fa47cfd519b..8401b683fd5 100644
--- a/spec/lib/gitlab/gpg/commit_spec.rb
+++ b/spec/lib/gitlab/gpg/commit_spec.rb
@@ -370,5 +370,33 @@ describe Gitlab::Gpg::Commit do
it_behaves_like 'returns the cached signature on second call'
end
+
+ context 'multiple commits with signatures' do
+ let(:first_signature) { create(:gpg_signature) }
+
+ let(:gpg_key) { create(:gpg_key, key: GpgHelpers::User2.public_key) }
+ let(:second_signature) { create(:gpg_signature, gpg_key: gpg_key) }
+
+ let!(:first_commit) { create(:commit, project: project, sha: first_signature.commit_sha) }
+ let!(:second_commit) { create(:commit, project: project, sha: second_signature.commit_sha) }
+
+ let(:commits) do
+ [first_commit, second_commit].map do |commit|
+ gpg_commit = described_class.new(commit)
+
+ allow(gpg_commit).to receive(:has_signature?).and_return(true)
+
+ gpg_commit
+ end
+ end
+
+ it 'does an aggregated sql request instead of 2 separate ones' do
+ recorder = ActiveRecord::QueryRecorder.new do
+ commits.each(&:signature)
+ end
+
+ expect(recorder.count).to eq(1)
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/graphs/commits_spec.rb b/spec/lib/gitlab/graphs/commits_spec.rb
index 530d4a981bf..09654e0439e 100644
--- a/spec/lib/gitlab/graphs/commits_spec.rb
+++ b/spec/lib/gitlab/graphs/commits_spec.rb
@@ -11,12 +11,14 @@ describe Gitlab::Graphs::Commits do
describe '#commit_per_day' do
context 'when range is only commits from today' do
subject { described_class.new([commit2, commit1]).commit_per_day }
+
it { is_expected.to eq 2 }
end
end
context 'when range is only commits from today' do
subject { described_class.new([commit2, commit1]) }
+
describe '#commit_per_day' do
it { expect(subject.commit_per_day).to eq 2 }
end
@@ -28,6 +30,7 @@ describe Gitlab::Graphs::Commits do
context 'with commits from yesterday and today' do
subject { described_class.new([commit2, commit1_yesterday]) }
+
describe '#commit_per_day' do
it { expect(subject.commit_per_day).to eq 1.0 }
end
diff --git a/spec/lib/gitlab/health_checks/gitaly_check_spec.rb b/spec/lib/gitlab/health_checks/gitaly_check_spec.rb
index 4912cd48761..36e2fd04aeb 100644
--- a/spec/lib/gitlab/health_checks/gitaly_check_spec.rb
+++ b/spec/lib/gitlab/health_checks/gitaly_check_spec.rb
@@ -18,18 +18,19 @@ describe Gitlab::HealthChecks::GitalyCheck do
context 'Gitaly server is up' do
let(:gitaly_check) { double(check: { success: true }) }
- it { is_expected.to eq([result_class.new(true, nil, shard: 'default')]) }
+ it { is_expected.to eq([result_class.new('gitaly_check', true, nil, shard: 'default')]) }
end
context 'Gitaly server is down' do
let(:gitaly_check) { double(check: { success: false, message: 'Connection refused' }) }
- it { is_expected.to eq([result_class.new(false, 'Connection refused', shard: 'default')]) }
+ it { is_expected.to eq([result_class.new('gitaly_check', false, 'Connection refused', shard: 'default')]) }
end
end
describe '#metrics' do
subject { described_class.metrics }
+
let(:server) { double(storage: 'default', read_writeable?: up) }
before do
diff --git a/spec/lib/gitlab/health_checks/probes/collection_spec.rb b/spec/lib/gitlab/health_checks/probes/collection_spec.rb
new file mode 100644
index 00000000000..33efc640257
--- /dev/null
+++ b/spec/lib/gitlab/health_checks/probes/collection_spec.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::HealthChecks::Probes::Collection do
+ let(:readiness) { described_class.new(*checks) }
+
+ describe '#call' do
+ subject { readiness.execute }
+
+ context 'with all checks' do
+ let(:checks) do
+ [
+ Gitlab::HealthChecks::DbCheck,
+ Gitlab::HealthChecks::Redis::RedisCheck,
+ Gitlab::HealthChecks::Redis::CacheCheck,
+ Gitlab::HealthChecks::Redis::QueuesCheck,
+ Gitlab::HealthChecks::Redis::SharedStateCheck,
+ Gitlab::HealthChecks::GitalyCheck
+ ]
+ end
+
+ it 'responds with readiness checks data' do
+ expect(subject.http_status).to eq(200)
+
+ expect(subject.json[:status]).to eq('ok')
+ expect(subject.json['db_check']).to contain_exactly(status: 'ok')
+ expect(subject.json['cache_check']).to contain_exactly(status: 'ok')
+ expect(subject.json['queues_check']).to contain_exactly(status: 'ok')
+ expect(subject.json['shared_state_check']).to contain_exactly(status: 'ok')
+ expect(subject.json['gitaly_check']).to contain_exactly(
+ status: 'ok', labels: { shard: 'default' })
+ end
+
+ context 'when Redis fails' do
+ before do
+ allow(Gitlab::HealthChecks::Redis::RedisCheck).to receive(:readiness).and_return(
+ Gitlab::HealthChecks::Result.new('redis_check', false, "check error"))
+ end
+
+ it 'responds with failure' do
+ expect(subject.http_status).to eq(503)
+
+ expect(subject.json[:status]).to eq('failed')
+ expect(subject.json['cache_check']).to contain_exactly(status: 'ok')
+ expect(subject.json['redis_check']).to contain_exactly(
+ status: 'failed', message: 'check error')
+ end
+ end
+ end
+
+ context 'without checks' do
+ let(:checks) { [] }
+
+ it 'responds with success' do
+ expect(subject.http_status).to eq(200)
+
+ expect(subject.json).to eq(status: 'ok')
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/health_checks/prometheus_text_format_spec.rb b/spec/lib/gitlab/health_checks/prometheus_text_format_spec.rb
deleted file mode 100644
index ed757ed60d8..00000000000
--- a/spec/lib/gitlab/health_checks/prometheus_text_format_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-describe Gitlab::HealthChecks::PrometheusTextFormat do
- let(:metric_class) { Gitlab::HealthChecks::Metric }
- subject { described_class.new }
-
- describe '#marshal' do
- let(:sample_metrics) do
- [metric_class.new('metric1', 1),
- metric_class.new('metric2', 2)]
- end
-
- it 'marshal to text with non repeating type definition' do
- expected = <<-EXPECTED.strip_heredoc
- # TYPE metric1 gauge
- metric1 1
- # TYPE metric2 gauge
- metric2 2
- EXPECTED
-
- expect(subject.marshal(sample_metrics)).to eq(expected)
- end
-
- context 'metrics where name repeats' do
- let(:sample_metrics) do
- [metric_class.new('metric1', 1),
- metric_class.new('metric1', 2),
- metric_class.new('metric2', 3)]
- end
-
- it 'marshal to text with non repeating type definition' do
- expected = <<-EXPECTED.strip_heredoc
- # TYPE metric1 gauge
- metric1 1
- metric1 2
- # TYPE metric2 gauge
- metric2 3
- EXPECTED
- expect(subject.marshal(sample_metrics)).to eq(expected)
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/health_checks/puma_check_spec.rb b/spec/lib/gitlab/health_checks/puma_check_spec.rb
new file mode 100644
index 00000000000..71b6386b174
--- /dev/null
+++ b/spec/lib/gitlab/health_checks/puma_check_spec.rb
@@ -0,0 +1,65 @@
+require 'spec_helper'
+
+describe Gitlab::HealthChecks::PumaCheck do
+ let(:result_class) { Gitlab::HealthChecks::Result }
+ let(:readiness) { described_class.readiness }
+ let(:metrics) { described_class.metrics }
+
+ shared_examples 'with state' do |(state, message)|
+ it "does provide readiness" do
+ expect(readiness).to eq(result_class.new('puma_check', state, message))
+ end
+
+ it "does provide metrics" do
+ expect(metrics).to include(
+ an_object_having_attributes(name: 'puma_check_success', value: state ? 1 : 0))
+ expect(metrics).to include(
+ an_object_having_attributes(name: 'puma_check_latency_seconds', value: be >= 0))
+ end
+ end
+
+ context 'when Puma is not loaded' do
+ before do
+ hide_const('Puma')
+ end
+
+ it "does not provide readiness and metrics" do
+ expect(readiness).to be_nil
+ expect(metrics).to be_nil
+ end
+ end
+
+ context 'when Puma is loaded' do
+ before do
+ stub_const('Puma', Module.new)
+ end
+
+ context 'when stats are missing' do
+ before do
+ expect(Puma).to receive(:stats).and_raise(NoMethodError)
+ end
+
+ it_behaves_like 'with state', [false, 'unexpected Puma check result: 0']
+ end
+
+ context 'for Single mode' do
+ before do
+ expect(Puma).to receive(:stats) do
+ '{}'
+ end
+ end
+
+ it_behaves_like 'with state', true
+ end
+
+ context 'for Cluster mode' do
+ before do
+ expect(Puma).to receive(:stats) do
+ '{"workers":2}'
+ end
+ end
+
+ it_behaves_like 'with state', true
+ end
+ end
+end
diff --git a/spec/lib/gitlab/health_checks/simple_check_shared.rb b/spec/lib/gitlab/health_checks/simple_check_shared.rb
index e2643458aca..03a7cf249cf 100644
--- a/spec/lib/gitlab/health_checks/simple_check_shared.rb
+++ b/spec/lib/gitlab/health_checks/simple_check_shared.rb
@@ -1,6 +1,7 @@
shared_context 'simple_check' do |metrics_prefix, check_name, success_result|
describe '#metrics' do
subject { described_class.metrics }
+
context 'Check is passing' do
before do
allow(described_class).to receive(:check).and_return success_result
@@ -34,6 +35,7 @@ shared_context 'simple_check' do |metrics_prefix, check_name, success_result|
describe '#readiness' do
subject { described_class.readiness }
+
context 'Check returns ok' do
before do
allow(described_class).to receive(:check).and_return success_result
@@ -57,10 +59,13 @@ shared_context 'simple_check' do |metrics_prefix, check_name, success_result|
it { is_expected.to have_attributes(success: false, message: "#{described_class.human_name} check timed out") }
end
- end
- describe '#liveness' do
- subject { described_class.readiness }
- it { is_expected.to eq(Gitlab::HealthChecks::Result.new(true)) }
+ context 'Check is raising an unhandled exception' do
+ before do
+ allow(described_class).to receive(:check ).and_raise "unexpected error"
+ end
+
+ it { is_expected.to have_attributes(success: false, message: "unexpected #{described_class.human_name} check result: unexpected error") }
+ end
end
end
diff --git a/spec/lib/gitlab/health_checks/unicorn_check_spec.rb b/spec/lib/gitlab/health_checks/unicorn_check_spec.rb
new file mode 100644
index 00000000000..c02d0c37738
--- /dev/null
+++ b/spec/lib/gitlab/health_checks/unicorn_check_spec.rb
@@ -0,0 +1,63 @@
+require 'spec_helper'
+
+describe Gitlab::HealthChecks::UnicornCheck do
+ let(:result_class) { Gitlab::HealthChecks::Result }
+ let(:readiness) { described_class.readiness }
+ let(:metrics) { described_class.metrics }
+
+ before do
+ described_class.clear_memoization(:http_servers)
+ end
+
+ shared_examples 'with state' do |(state, message)|
+ it "does provide readiness" do
+ expect(readiness).to eq(result_class.new('unicorn_check', state, message))
+ end
+
+ it "does provide metrics" do
+ expect(metrics).to include(
+ an_object_having_attributes(name: 'unicorn_check_success', value: state ? 1 : 0))
+ expect(metrics).to include(
+ an_object_having_attributes(name: 'unicorn_check_latency_seconds', value: be >= 0))
+ end
+ end
+
+ context 'when Unicorn is not loaded' do
+ before do
+ hide_const('Unicorn')
+ end
+
+ it "does not provide readiness and metrics" do
+ expect(readiness).to be_nil
+ expect(metrics).to be_nil
+ end
+ end
+
+ context 'when Unicorn is loaded' do
+ let(:http_server_class) { Struct.new(:worker_processes) }
+
+ before do
+ stub_const('Unicorn::HttpServer', http_server_class)
+ end
+
+ context 'when no servers are running' do
+ it_behaves_like 'with state', [false, 'unexpected Unicorn check result: 0']
+ end
+
+ context 'when servers without workers are running' do
+ before do
+ http_server_class.new(0)
+ end
+
+ it_behaves_like 'with state', [false, 'unexpected Unicorn check result: 0']
+ end
+
+ context 'when servers with workers are running' do
+ before do
+ http_server_class.new(1)
+ end
+
+ it_behaves_like 'with state', true
+ end
+ end
+end
diff --git a/spec/lib/gitlab/hook_data/issue_builder_spec.rb b/spec/lib/gitlab/hook_data/issue_builder_spec.rb
index 6013fb78bc7..ebd7feb0055 100644
--- a/spec/lib/gitlab/hook_data/issue_builder_spec.rb
+++ b/spec/lib/gitlab/hook_data/issue_builder_spec.rb
@@ -26,7 +26,7 @@ describe Gitlab::HookData::IssueBuilder do
duplicated_to_id
project_id
relative_position
- state
+ state_id
time_estimate
title
updated_at
@@ -41,6 +41,7 @@ describe Gitlab::HookData::IssueBuilder do
expect(data).to include(:human_time_estimate)
expect(data).to include(:human_total_time_spent)
expect(data).to include(:assignee_ids)
+ expect(data).to include(:state)
expect(data).to include('labels' => [label.hook_attrs])
end
diff --git a/spec/lib/gitlab/import/merge_request_creator_spec.rb b/spec/lib/gitlab/import/merge_request_creator_spec.rb
index 7c73e9b39f7..ff2c3032dbf 100644
--- a/spec/lib/gitlab/import/merge_request_creator_spec.rb
+++ b/spec/lib/gitlab/import/merge_request_creator_spec.rb
@@ -21,8 +21,11 @@ describe Gitlab::Import::MergeRequestCreator do
subject.execute(attributes)
- expect(merge_request.reload.merge_request_diffs.count).to eq(1)
- expect(merge_request.reload.merge_request_diffs.first.commits.count).to eq(commits_count)
+ merge_request.reload
+
+ expect(merge_request.merge_request_diffs.count).to eq(1)
+ expect(merge_request.merge_request_diffs.first.commits.count).to eq(commits_count)
+ expect(merge_request.latest_merge_request_diff_id).to eq(merge_request.merge_request_diffs.first.id)
end
end
diff --git a/spec/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy_spec.rb b/spec/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy_spec.rb
index 9a442de2900..a3d2880182d 100644
--- a/spec/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy_spec.rb
+++ b/spec/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy_spec.rb
@@ -24,14 +24,22 @@ describe Gitlab::ImportExport::AfterExportStrategies::BaseAfterExportStrategy do
service.execute(user, project)
- expect(lock_path_exist?).to be_truthy
+ expect(service.locks_present?).to be_truthy
end
context 'when the method succeeds' do
it 'removes the lock file' do
service.execute(user, project)
- expect(lock_path_exist?).to be_falsey
+ expect(service.locks_present?).to be_falsey
+ end
+
+ it 'removes the archive path' do
+ FileUtils.mkdir_p(shared.archive_path)
+
+ service.execute(user, project)
+
+ expect(File.exist?(shared.archive_path)).to be_falsey
end
end
@@ -62,13 +70,21 @@ describe Gitlab::ImportExport::AfterExportStrategies::BaseAfterExportStrategy do
service.execute(user, project)
end
+
+ it 'removes the archive path' do
+ FileUtils.mkdir_p(shared.archive_path)
+
+ service.execute(user, project)
+
+ expect(File.exist?(shared.archive_path)).to be_falsey
+ end
end
context 'when an exception is raised' do
it 'removes the lock' do
expect { service.execute(user, project) }.to raise_error(NotImplementedError)
- expect(lock_path_exist?).to be_falsey
+ expect(service.locks_present?).to be_falsey
end
end
end
@@ -97,8 +113,4 @@ describe Gitlab::ImportExport::AfterExportStrategies::BaseAfterExportStrategy do
expect(described_class.new(params).to_json).to eq result
end
end
-
- def lock_path_exist?
- File.exist?(described_class.lock_file_path(project))
- end
end
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index d3be1e86539..4fd61383c6b 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -25,6 +25,10 @@ issues:
- epic
- designs
- design_versions
+- description_versions
+- prometheus_alerts
+- prometheus_alert_events
+- self_managed_prometheus_alert_events
events:
- author
- project
@@ -79,6 +83,7 @@ releases:
- links
- milestone_releases
- milestones
+- evidence
links:
- release
project_members:
@@ -128,6 +133,7 @@ merge_requests:
- blocks_as_blockee
- blocking_merge_requests
- blocked_merge_requests
+- description_versions
external_pull_requests:
- project
merge_request_diff:
@@ -172,7 +178,7 @@ ci_pipelines:
- downstream_bridges
- job_artifacts
- vulnerabilities_occurrence_pipelines
-- vulnerabilities
+- vulnerability_findings
pipeline_variables:
- pipeline
stages:
@@ -250,11 +256,11 @@ project:
- cluster
- clusters
- cluster_project
-- cluster_ingresses
- creator
- cycle_analytics_stages
- group
- namespace
+- management_clusters
- boards
- last_event
- services
@@ -349,6 +355,7 @@ project:
- members_and_requesters
- build_trace_section_names
- build_trace_chunks
+- job_artifacts
- root_of_fork_network
- fork_network_member
- fork_network
@@ -389,6 +396,7 @@ project:
- sourced_pipelines
- prometheus_metrics
- vulnerabilities
+- vulnerability_findings
- vulnerability_feedback
- vulnerability_identifiers
- vulnerability_scanners
@@ -396,6 +404,7 @@ project:
- operations_feature_flags_client
- prometheus_alerts
- prometheus_alert_events
+- self_managed_prometheus_alert_events
- software_license_policies
- project_registry
- packages
@@ -409,6 +418,9 @@ project:
- designs
- project_aliases
- external_pull_requests
+- pages_metadatum
+- alerts_service
+- grafana_integration
award_emoji:
- awardable
- user
@@ -466,6 +478,8 @@ prometheus_alerts:
- prometheus_alert_events
prometheus_alert_events:
- project
+self_managed_prometheus_alert_events:
+- project
epic_issues:
- issue
- epic
@@ -499,3 +513,19 @@ lists:
milestone_releases:
- milestone
- release
+evidences:
+- release
+design: &design
+- issue
+- actions
+- versions
+- notes
+designs: *design
+actions:
+- design
+- version
+versions: &version
+- issue
+- designs
+- actions
+design_versions: *version
diff --git a/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb b/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb
index d23b27c9d8e..934e676d020 100644
--- a/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb
+++ b/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb
@@ -1,7 +1,12 @@
require 'spec_helper'
describe Gitlab::ImportExport::FastHashSerializer do
- subject { described_class.new(project, tree).execute }
+ # FastHashSerializer#execute generates the hash which is not easily accessible
+ # and includes `JSONBatchRelation` items which are serialized at this point.
+ # Wrapping the result into JSON generating/parsing is for making
+ # the testing more convenient. Doing this, we can check that
+ # all items are properly serialized while traversing the simple hash.
+ subject { JSON.parse(JSON.generate(described_class.new(project, tree).execute)) }
let!(:project) { setup_project }
let(:user) { create(:user) }
diff --git a/spec/lib/gitlab/import_export/model_configuration_spec.rb b/spec/lib/gitlab/import_export/model_configuration_spec.rb
index 3442e22c11f..4426e68b474 100644
--- a/spec/lib/gitlab/import_export/model_configuration_spec.rb
+++ b/spec/lib/gitlab/import_export/model_configuration_spec.rb
@@ -12,9 +12,9 @@ describe 'Import/Export model configuration' do
# Remove duplicated or add missing models
# - project is not part of the tree, so it has to be added manually.
- # - milestone, labels have both singular and plural versions in the tree, so remove the duplicates.
+ # - milestone, labels, merge_request have both singular and plural versions in the tree, so remove the duplicates.
# - User, Author... Models we do not care about for checking models
- names.flatten.uniq - %w(milestones labels user author) + ['project']
+ names.flatten.uniq - %w(milestones labels user author merge_request) + ['project']
end
let(:all_models_yml) { 'spec/lib/gitlab/import_export/all_models.yml' }
let(:all_models_hash) { YAML.load_file(all_models_yml) }
diff --git a/spec/lib/gitlab/import_export/project.group.json b/spec/lib/gitlab/import_export/project.group.json
deleted file mode 100644
index 66f5bb4c87b..00000000000
--- a/spec/lib/gitlab/import_export/project.group.json
+++ /dev/null
@@ -1,186 +0,0 @@
-{
- "description": "Nisi et repellendus ut enim quo accusamus vel magnam.",
- "visibility_level": 10,
- "archived": false,
- "milestones": [
- {
- "id": 1,
- "title": "Project milestone",
- "project_id": 8,
- "description": "Project-level milestone",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.415Z",
- "updated_at": "2016-06-14T15:02:04.415Z",
- "state": "active",
- "iid": 1,
- "group_id": null
- }
- ],
- "labels": [
- {
- "id": 2,
- "title": "A project label",
- "color": "#428bca",
- "project_id": 8,
- "created_at": "2016-07-22T08:55:44.161Z",
- "updated_at": "2016-07-22T08:55:44.161Z",
- "template": false,
- "description": "",
- "type": "ProjectLabel",
- "priorities": [
- {
- "id": 1,
- "project_id": 5,
- "label_id": 1,
- "priority": 1,
- "created_at": "2016-10-18T09:35:43.338Z",
- "updated_at": "2016-10-18T09:35:43.338Z"
- }
- ]
- }
- ],
- "issues": [
- {
- "id": 1,
- "title": "Fugiat est minima quae maxime non similique.",
- "assignee_id": null,
- "project_id": 8,
- "author_id": 1,
- "created_at": "2017-07-07T18:13:01.138Z",
- "updated_at": "2017-08-15T18:37:40.807Z",
- "branch_name": null,
- "description": "Quam totam fuga numquam in eveniet.",
- "state": "opened",
- "iid": 1,
- "updated_by_id": 1,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "lock_version": null,
- "time_estimate": 0,
- "closed_at": null,
- "last_edited_at": null,
- "last_edited_by_id": null,
- "group_milestone_id": null,
- "milestone": {
- "id": 1,
- "title": "Project milestone",
- "project_id": 8,
- "description": "Project-level milestone",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.415Z",
- "updated_at": "2016-06-14T15:02:04.415Z",
- "state": "active",
- "iid": 1,
- "group_id": null
- },
- "label_links": [
- {
- "id": 11,
- "label_id": 6,
- "target_id": 1,
- "target_type": "Issue",
- "created_at": "2017-08-15T18:37:40.795Z",
- "updated_at": "2017-08-15T18:37:40.795Z",
- "label": {
- "id": 6,
- "title": "group label",
- "color": "#A8D695",
- "project_id": null,
- "created_at": "2017-08-15T18:37:19.698Z",
- "updated_at": "2017-08-15T18:37:19.698Z",
- "template": false,
- "description": "",
- "group_id": 5,
- "type": "GroupLabel",
- "priorities": []
- }
- },
- {
- "id": 11,
- "label_id": 2,
- "target_id": 1,
- "target_type": "Issue",
- "created_at": "2017-08-15T18:37:40.795Z",
- "updated_at": "2017-08-15T18:37:40.795Z",
- "label": {
- "id": 6,
- "title": "A project label",
- "color": "#A8D695",
- "project_id": null,
- "created_at": "2017-08-15T18:37:19.698Z",
- "updated_at": "2017-08-15T18:37:19.698Z",
- "template": false,
- "description": "",
- "group_id": 5,
- "type": "ProjectLabel",
- "priorities": []
- }
- }
- ]
- },
- {
- "id": 2,
- "title": "Fugiat est minima quae maxime non similique.",
- "assignee_id": null,
- "project_id": 8,
- "author_id": 1,
- "created_at": "2017-07-07T18:13:01.138Z",
- "updated_at": "2017-08-15T18:37:40.807Z",
- "branch_name": null,
- "description": "Quam totam fuga numquam in eveniet.",
- "state": "opened",
- "iid": 2,
- "updated_by_id": 1,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "lock_version": null,
- "time_estimate": 0,
- "closed_at": null,
- "last_edited_at": null,
- "last_edited_by_id": null,
- "group_milestone_id": null,
- "milestone": {
- "id": 2,
- "title": "A group milestone",
- "description": "Group-level milestone",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.415Z",
- "updated_at": "2016-06-14T15:02:04.415Z",
- "state": "active",
- "iid": 1,
- "group_id": 100
- },
- "label_links": [
- {
- "id": 11,
- "label_id": 2,
- "target_id": 1,
- "target_type": "Issue",
- "created_at": "2017-08-15T18:37:40.795Z",
- "updated_at": "2017-08-15T18:37:40.795Z",
- "label": {
- "id": 2,
- "title": "A project label",
- "color": "#A8D695",
- "project_id": null,
- "created_at": "2017-08-15T18:37:19.698Z",
- "updated_at": "2017-08-15T18:37:19.698Z",
- "template": false,
- "description": "",
- "group_id": 5,
- "type": "ProjectLabel",
- "priorities": []
- }
- }
- ]
- }
- ],
- "snippets": [
-
- ],
- "hooks": [
-
- ]
-}
diff --git a/spec/lib/gitlab/import_export/project.json b/spec/lib/gitlab/import_export/project.json
deleted file mode 100644
index 5f4bf18c743..00000000000
--- a/spec/lib/gitlab/import_export/project.json
+++ /dev/null
@@ -1,7225 +0,0 @@
-{
- "description": "Nisi et repellendus ut enim quo accusamus vel magnam.",
- "import_type": "gitlab_project",
- "creator_id": 123,
- "visibility_level": 10,
- "archived": false,
- "labels": [
- {
- "id": 2,
- "title": "test2",
- "color": "#428bca",
- "project_id": 8,
- "created_at": "2016-07-22T08:55:44.161Z",
- "updated_at": "2016-07-22T08:55:44.161Z",
- "template": false,
- "description": "",
- "type": "ProjectLabel",
- "priorities": []
- },
- {
- "id": 3,
- "title": "test3",
- "color": "#428bca",
- "group_id": 8,
- "created_at": "2016-07-22T08:55:44.161Z",
- "updated_at": "2016-07-22T08:55:44.161Z",
- "template": false,
- "description": "",
- "project_id": null,
- "type": "GroupLabel",
- "priorities": [
- {
- "id": 1,
- "project_id": 5,
- "label_id": 1,
- "priority": 1,
- "created_at": "2016-10-18T09:35:43.338Z",
- "updated_at": "2016-10-18T09:35:43.338Z"
- }
- ]
- }
- ],
- "issues": [
- {
- "id": 40,
- "title": "Voluptatem",
- "author_id": 22,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:08.340Z",
- "updated_at": "2016-06-14T15:02:47.967Z",
- "position": 0,
- "branch_name": null,
- "description": "Aliquam enim illo et possimus.",
- "state": "opened",
- "iid": 10,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "test_ee_field": "test",
- "issue_assignees": [
- {
- "user_id": 1,
- "issue_id": 40
- },
- {
- "user_id": 15,
- "issue_id": 40
- },
- {
- "user_id": 16,
- "issue_id": 40
- },
- {
- "user_id": 16,
- "issue_id": 40
- },
- {
- "user_id": 6,
- "issue_id": 40
- }
- ],
- "milestone": {
- "id": 1,
- "title": "test milestone",
- "project_id": 8,
- "description": "test milestone",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.415Z",
- "updated_at": "2016-06-14T15:02:04.415Z",
- "state": "active",
- "iid": 1,
- "events": [
- {
- "id": 487,
- "target_type": "Milestone",
- "target_id": 1,
- "project_id": 46,
- "created_at": "2016-06-14T15:02:04.418Z",
- "updated_at": "2016-06-14T15:02:04.418Z",
- "action": 1,
- "author_id": 18
- }
- ]
- },
- "label_links": [
- {
- "id": 2,
- "label_id": 2,
- "target_id": 40,
- "target_type": "Issue",
- "created_at": "2016-07-22T08:57:02.840Z",
- "updated_at": "2016-07-22T08:57:02.840Z",
- "label": {
- "id": 2,
- "title": "test2",
- "color": "#428bca",
- "project_id": 8,
- "created_at": "2016-07-22T08:55:44.161Z",
- "updated_at": "2016-07-22T08:55:44.161Z",
- "template": false,
- "description": "",
- "type": "ProjectLabel"
- }
- },
- {
- "id": 3,
- "label_id": 3,
- "target_id": 40,
- "target_type": "Issue",
- "created_at": "2016-07-22T08:57:02.841Z",
- "updated_at": "2016-07-22T08:57:02.841Z",
- "label": {
- "id": 3,
- "title": "test3",
- "color": "#428bca",
- "group_id": 8,
- "created_at": "2016-07-22T08:55:44.161Z",
- "updated_at": "2016-07-22T08:55:44.161Z",
- "template": false,
- "description": "",
- "project_id": null,
- "type": "GroupLabel",
- "priorities": [
- {
- "id": 1,
- "project_id": 5,
- "label_id": 1,
- "priority": 1,
- "created_at": "2016-10-18T09:35:43.338Z",
- "updated_at": "2016-10-18T09:35:43.338Z"
- }
- ]
- }
- }
- ],
- "notes": [
- {
- "id": 351,
- "note": "Quo reprehenderit aliquam qui dicta impedit cupiditate eligendi.",
- "note_html": "<p>something else entirely</p>",
- "cached_markdown_version": 917504,
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:47.770Z",
- "updated_at": "2016-06-14T15:02:47.770Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 352,
- "note": "Est reprehenderit quas aut aspernatur autem recusandae voluptatem.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:47.795Z",
- "updated_at": "2016-06-14T15:02:47.795Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 353,
- "note": "Perspiciatis suscipit voluptates in eius nihil.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:47.823Z",
- "updated_at": "2016-06-14T15:02:47.823Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 354,
- "note": "Aut vel voluptas corrupti nisi provident laboriosam magnam aut.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:47.850Z",
- "updated_at": "2016-06-14T15:02:47.850Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 355,
- "note": "Officia dolore consequatur in saepe cum magni.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:47.876Z",
- "updated_at": "2016-06-14T15:02:47.876Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 356,
- "note": "Cum ipsum rem voluptas eaque et ea.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:47.908Z",
- "updated_at": "2016-06-14T15:02:47.908Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 357,
- "note": "Recusandae excepturi asperiores suscipit autem nostrum.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:47.937Z",
- "updated_at": "2016-06-14T15:02:47.937Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 358,
- "note": "Et hic est id similique et non nesciunt voluptate.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:47.965Z",
- "updated_at": "2016-06-14T15:02:47.965Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 40,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "resource_label_events": [
- {
- "id":244,
- "action":"remove",
- "issue_id":40,
- "merge_request_id":null,
- "label_id":2,
- "user_id":1,
- "created_at":"2018-08-28T08:24:00.494Z",
- "label": {
- "id": 2,
- "title": "test2",
- "color": "#428bca",
- "project_id": 8,
- "created_at": "2016-07-22T08:55:44.161Z",
- "updated_at": "2016-07-22T08:55:44.161Z",
- "template": false,
- "description": "",
- "type": "ProjectLabel"
- }
- }
- ]
- },
- {
- "id": 39,
- "title": "Issue without assignees",
- "author_id": 22,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:08.233Z",
- "updated_at": "2016-06-14T15:02:48.194Z",
- "position": 0,
- "branch_name": null,
- "description": "Voluptate vel reprehenderit facilis omnis voluptas magnam tenetur.",
- "state": "opened",
- "iid": 9,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "issue_assignees": [],
- "milestone": {
- "id": 1,
- "title": "test milestone",
- "project_id": 8,
- "description": "test milestone",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.415Z",
- "updated_at": "2016-06-14T15:02:04.415Z",
- "state": "active",
- "iid": 1,
- "events": [
- {
- "id": 487,
- "target_type": "Milestone",
- "target_id": 1,
- "project_id": 46,
- "created_at": "2016-06-14T15:02:04.418Z",
- "updated_at": "2016-06-14T15:02:04.418Z",
- "action": 1,
- "author_id": 18
- }
- ]
- },
- "notes": [
- {
- "id": 359,
- "note": "Quo eius velit quia et id quam.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:48.009Z",
- "updated_at": "2016-06-14T15:02:48.009Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 360,
- "note": "Nulla commodi ratione cumque id autem.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:48.032Z",
- "updated_at": "2016-06-14T15:02:48.032Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 361,
- "note": "Illum non ea sed dolores corrupti.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:48.056Z",
- "updated_at": "2016-06-14T15:02:48.056Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 362,
- "note": "Facere dolores ipsum dolorum maiores omnis occaecati ab.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:48.082Z",
- "updated_at": "2016-06-14T15:02:48.082Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 363,
- "note": "Quod laudantium similique sint aut est ducimus.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:48.113Z",
- "updated_at": "2016-06-14T15:02:48.113Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 364,
- "note": "Aut omnis eos esse incidunt vero reiciendis.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:48.139Z",
- "updated_at": "2016-06-14T15:02:48.139Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 365,
- "note": "Beatae dolore et doloremque asperiores sunt.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:48.162Z",
- "updated_at": "2016-06-14T15:02:48.162Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 366,
- "note": "Doloribus ipsam ex delectus rerum libero recusandae modi repellendus.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:48.192Z",
- "updated_at": "2016-06-14T15:02:48.192Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 39,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 38,
- "title": "Quasi adipisci non cupiditate dolorem quo qui earum sed.",
- "author_id": 6,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:08.154Z",
- "updated_at": "2016-06-14T15:02:48.614Z",
- "position": 0,
- "branch_name": null,
- "description": "Ea recusandae neque autem tempora.",
- "state": "closed",
- "iid": 8,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "label_links": [
- {
- "id": 99,
- "label_id": 2,
- "target_id": 38,
- "target_type": "Issue",
- "created_at": "2016-07-22T08:57:02.840Z",
- "updated_at": "2016-07-22T08:57:02.840Z",
- "label": {
- "id": 2,
- "title": "test2",
- "color": "#428bca",
- "project_id": 8,
- "created_at": "2016-07-22T08:55:44.161Z",
- "updated_at": "2016-07-22T08:55:44.161Z",
- "template": false,
- "description": "",
- "type": "ProjectLabel"
- }
- }
- ],
- "notes": [
- {
- "id": 367,
- "note": "Accusantium fugiat et eaque quisquam esse corporis.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:48.235Z",
- "updated_at": "2016-06-14T15:02:48.235Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 368,
- "note": "Ea labore eum nam qui laboriosam.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:48.261Z",
- "updated_at": "2016-06-14T15:02:48.261Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 369,
- "note": "Accusantium quis sed molestiae et.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:48.294Z",
- "updated_at": "2016-06-14T15:02:48.294Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 370,
- "note": "Corporis numquam a voluptatem pariatur asperiores dolorem delectus autem.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:48.523Z",
- "updated_at": "2016-06-14T15:02:48.523Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 371,
- "note": "Ea accusantium maxime voluptas rerum.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:48.546Z",
- "updated_at": "2016-06-14T15:02:48.546Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 372,
- "note": "Pariatur iusto et et excepturi similique ipsam eum.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:48.569Z",
- "updated_at": "2016-06-14T15:02:48.569Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 373,
- "note": "Aliquam et culpa officia iste eius.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:48.591Z",
- "updated_at": "2016-06-14T15:02:48.591Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 374,
- "note": "Ab id velit id unde laborum.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:48.613Z",
- "updated_at": "2016-06-14T15:02:48.613Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 38,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 37,
- "title": "Cupiditate quo aut ducimus minima molestiae vero numquam possimus.",
- "author_id": 20,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:08.051Z",
- "updated_at": "2016-06-14T15:02:48.854Z",
- "position": 0,
- "branch_name": null,
- "description": "Maiores architecto quos in dolorem.",
- "state": "opened",
- "iid": 7,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "notes": [
- {
- "id": 375,
- "note": "Quasi fugit qui sed eligendi aut quia.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:48.647Z",
- "updated_at": "2016-06-14T15:02:48.647Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 376,
- "note": "Esse nesciunt voluptatem ex vero est consequatur.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:48.674Z",
- "updated_at": "2016-06-14T15:02:48.674Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 377,
- "note": "Similique qui quas non aut et velit sequi in.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:48.696Z",
- "updated_at": "2016-06-14T15:02:48.696Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 378,
- "note": "Eveniet ut cupiditate repellendus numquam in esse eius.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:48.720Z",
- "updated_at": "2016-06-14T15:02:48.720Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 379,
- "note": "Velit est dolorem adipisci rerum sed iure.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:48.755Z",
- "updated_at": "2016-06-14T15:02:48.755Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 380,
- "note": "Voluptatem ullam ab ut illo ut quo.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:48.793Z",
- "updated_at": "2016-06-14T15:02:48.793Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 381,
- "note": "Voluptatem impedit beatae quasi ipsa earum consectetur.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:48.823Z",
- "updated_at": "2016-06-14T15:02:48.823Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 382,
- "note": "Nihil officiis eaque incidunt sunt voluptatum excepturi.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:48.852Z",
- "updated_at": "2016-06-14T15:02:48.852Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 37,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 36,
- "title": "Necessitatibus dolor est enim quia rem suscipit quidem voluptas ullam.",
- "author_id": 16,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:07.958Z",
- "updated_at": "2016-06-14T15:02:49.044Z",
- "position": 0,
- "branch_name": null,
- "description": "Ut aut ut et tenetur velit aut id modi.",
- "state": "opened",
- "iid": 6,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "notes": [
- {
- "id": 383,
- "note": "Excepturi deleniti sunt rerum nesciunt vero fugiat possimus.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:48.885Z",
- "updated_at": "2016-06-14T15:02:48.885Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 384,
- "note": "Et est nemo sed nam sed.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:48.910Z",
- "updated_at": "2016-06-14T15:02:48.910Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 385,
- "note": "Animi mollitia nulla facere amet aut quaerat.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:48.934Z",
- "updated_at": "2016-06-14T15:02:48.934Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 386,
- "note": "Excepturi id voluptas ut odio officiis omnis.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:48.955Z",
- "updated_at": "2016-06-14T15:02:48.955Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 387,
- "note": "Molestiae labore officiis magni et eligendi quasi maxime.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:48.978Z",
- "updated_at": "2016-06-14T15:02:48.978Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 388,
- "note": "Officia tenetur praesentium rem nam non.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:49.001Z",
- "updated_at": "2016-06-14T15:02:49.001Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 389,
- "note": "Et et et molestiae reprehenderit.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:49.022Z",
- "updated_at": "2016-06-14T15:02:49.022Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 390,
- "note": "Aperiam in consequatur est sunt cum quia.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:49.043Z",
- "updated_at": "2016-06-14T15:02:49.043Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 35,
- "title": "Repellat praesentium deserunt maxime incidunt harum porro qui.",
- "author_id": 20,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:07.832Z",
- "updated_at": "2016-06-14T15:02:49.226Z",
- "position": 0,
- "branch_name": null,
- "description": "Dicta nisi nihil non ipsa velit.",
- "state": "closed",
- "iid": 5,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "notes": [
- {
- "id": 391,
- "note": "Qui magnam et assumenda quod id dicta necessitatibus.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:49.075Z",
- "updated_at": "2016-06-14T15:02:49.075Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 392,
- "note": "Consectetur deserunt possimus dolor est odio.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:49.095Z",
- "updated_at": "2016-06-14T15:02:49.095Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 393,
- "note": "Labore nisi quo cumque voluptas consequatur aut qui.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:49.117Z",
- "updated_at": "2016-06-14T15:02:49.117Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 394,
- "note": "Et totam facilis voluptas et enim.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:49.138Z",
- "updated_at": "2016-06-14T15:02:49.138Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 395,
- "note": "Ratione sint pariatur sed omnis eligendi quo libero exercitationem.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:49.160Z",
- "updated_at": "2016-06-14T15:02:49.160Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 396,
- "note": "Iure hic autem id voluptatem.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:49.182Z",
- "updated_at": "2016-06-14T15:02:49.182Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 397,
- "note": "Excepturi eum laboriosam delectus repellendus odio nisi et voluptatem.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:49.205Z",
- "updated_at": "2016-06-14T15:02:49.205Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 398,
- "note": "Ut quis ex soluta consequatur et blanditiis.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:49.225Z",
- "updated_at": "2016-06-14T15:02:49.225Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 35,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 34,
- "title": "Ullam expedita deserunt libero consequatur quia dolor harum perferendis facere quidem.",
- "author_id": 1,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:07.717Z",
- "updated_at": "2016-06-14T15:02:49.416Z",
- "position": 0,
- "branch_name": null,
- "description": "Ut et explicabo vel voluptatem consequuntur ut sed.",
- "state": "closed",
- "iid": 4,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "notes": [
- {
- "id": 399,
- "note": "Dolor iste tempora tenetur non vitae maiores voluptatibus.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:49.256Z",
- "updated_at": "2016-06-14T15:02:49.256Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 400,
- "note": "Aut sit quidem qui adipisci maxime excepturi iusto.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:49.284Z",
- "updated_at": "2016-06-14T15:02:49.284Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 401,
- "note": "Et a necessitatibus autem quidem animi sunt voluptatum rerum.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:49.305Z",
- "updated_at": "2016-06-14T15:02:49.305Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 402,
- "note": "Esse laboriosam quo voluptatem quis molestiae.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:49.328Z",
- "updated_at": "2016-06-14T15:02:49.328Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 403,
- "note": "Nemo magnam distinctio est ut voluptate ea.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:49.350Z",
- "updated_at": "2016-06-14T15:02:49.350Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 404,
- "note": "Omnis sed rerum neque rerum quae quam nulla officiis.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:49.372Z",
- "updated_at": "2016-06-14T15:02:49.372Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 405,
- "note": "Quo soluta dolorem vitae ad consequatur qui aut dicta.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:49.394Z",
- "updated_at": "2016-06-14T15:02:49.394Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 406,
- "note": "Magni minus est aut aut totam ut.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:49.414Z",
- "updated_at": "2016-06-14T15:02:49.414Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 34,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 33,
- "title": "Numquam accusamus eos iste exercitationem magni non inventore.",
- "author_id": 26,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:07.611Z",
- "updated_at": "2016-06-14T15:02:49.661Z",
- "position": 0,
- "branch_name": null,
- "description": "Non asperiores velit accusantium voluptate.",
- "state": "closed",
- "iid": 3,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "notes": [
- {
- "id": 407,
- "note": "Quod ea et possimus architecto.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:49.450Z",
- "updated_at": "2016-06-14T15:02:49.450Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 408,
- "note": "Reiciendis est et unde perferendis dicta ut praesentium quasi.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:49.503Z",
- "updated_at": "2016-06-14T15:02:49.503Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 409,
- "note": "Magni quia odio blanditiis pariatur voluptas.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:49.527Z",
- "updated_at": "2016-06-14T15:02:49.527Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 410,
- "note": "Enim quam ut et et et.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:49.551Z",
- "updated_at": "2016-06-14T15:02:49.551Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 411,
- "note": "Fugit voluptatem ratione maxime expedita.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:49.578Z",
- "updated_at": "2016-06-14T15:02:49.578Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 412,
- "note": "Voluptatem enim aut ipsa et et ducimus.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:49.604Z",
- "updated_at": "2016-06-14T15:02:49.604Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 413,
- "note": "Quia repellat fugiat consectetur quidem.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:49.631Z",
- "updated_at": "2016-06-14T15:02:49.631Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 414,
- "note": "Corporis ipsum et ea necessitatibus quod assumenda repudiandae quam.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:49.659Z",
- "updated_at": "2016-06-14T15:02:49.659Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 33,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 32,
- "title": "Necessitatibus magnam qui at velit consequatur perspiciatis.",
- "author_id": 15,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:07.431Z",
- "updated_at": "2016-06-14T15:02:49.884Z",
- "position": 0,
- "branch_name": null,
- "description": "Molestiae corporis magnam et fugit aliquid nulla quia.",
- "state": "closed",
- "iid": 2,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "notes": [
- {
- "id": 415,
- "note": "Nemo consequatur sed blanditiis qui id iure dolores.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:49.694Z",
- "updated_at": "2016-06-14T15:02:49.694Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 416,
- "note": "Voluptas ab accusantium dicta in.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:49.718Z",
- "updated_at": "2016-06-14T15:02:49.718Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 417,
- "note": "Esse odit qui a et eum ducimus.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:49.741Z",
- "updated_at": "2016-06-14T15:02:49.741Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 418,
- "note": "Sequi dolor doloribus ratione placeat repellendus.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:49.767Z",
- "updated_at": "2016-06-14T15:02:49.767Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 419,
- "note": "Quae aspernatur rem est similique.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:49.796Z",
- "updated_at": "2016-06-14T15:02:49.796Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 420,
- "note": "Voluptate omnis et id rerum non nesciunt laudantium assumenda.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:49.825Z",
- "updated_at": "2016-06-14T15:02:49.825Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 421,
- "note": "Quia enim ab et eligendi.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:49.853Z",
- "updated_at": "2016-06-14T15:02:49.853Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 422,
- "note": "In fugiat rerum voluptas quas officia.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:49.881Z",
- "updated_at": "2016-06-14T15:02:49.881Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 32,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- },
- {
- "id": 31,
- "title": "Libero nam magnam incidunt eaque placeat error et.",
- "author_id": 16,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:07.280Z",
- "updated_at": "2016-06-14T15:02:50.134Z",
- "position": 0,
- "branch_name": null,
- "description": "Quod ad architecto qui est sed quia.",
- "state": "closed",
- "iid": 1,
- "updated_by_id": null,
- "confidential": false,
- "due_date": null,
- "moved_to_id": null,
- "notes": [
- {
- "id": 423,
- "note": "A mollitia qui iste consequatur eaque iure omnis sunt.",
- "noteable_type": "Issue",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:49.933Z",
- "updated_at": "2016-06-14T15:02:49.933Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 424,
- "note": "Eveniet est et blanditiis sequi alias.",
- "noteable_type": "Issue",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:49.965Z",
- "updated_at": "2016-06-14T15:02:49.965Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 425,
- "note": "Commodi tempore voluptas doloremque est.",
- "noteable_type": "Issue",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:49.996Z",
- "updated_at": "2016-06-14T15:02:49.996Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 426,
- "note": "Quo libero impedit odio debitis rerum aspernatur.",
- "noteable_type": "Issue",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:50.024Z",
- "updated_at": "2016-06-14T15:02:50.024Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 427,
- "note": "Dolorem voluptatem qui labore deserunt.",
- "noteable_type": "Issue",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:50.049Z",
- "updated_at": "2016-06-14T15:02:50.049Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 428,
- "note": "Est blanditiis laboriosam enim ipsam.",
- "noteable_type": "Issue",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:50.077Z",
- "updated_at": "2016-06-14T15:02:50.077Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 429,
- "note": "Et in voluptatem animi dolorem eos.",
- "noteable_type": "Issue",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:50.107Z",
- "updated_at": "2016-06-14T15:02:50.107Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 430,
- "note": "Unde culpa voluptate qui sint quos.",
- "noteable_type": "Issue",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:50.132Z",
- "updated_at": "2016-06-14T15:02:50.132Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 31,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ]
- }
- ],
- "milestones": [
- {
- "id": 1,
- "title": "test milestone",
- "project_id": 8,
- "description": "test milestone",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.415Z",
- "updated_at": "2016-06-14T15:02:04.415Z",
- "state": "active",
- "iid": 1,
- "events": [
- {
- "id": 487,
- "target_type": "Milestone",
- "target_id": 1,
- "project_id": 46,
- "created_at": "2016-06-14T15:02:04.418Z",
- "updated_at": "2016-06-14T15:02:04.418Z",
- "action": 1,
- "author_id": 18
- }
- ]
- },
- {
- "id": 20,
- "title": "v4.0",
- "project_id": 5,
- "description": "Totam quam laborum id magnam natus eaque aspernatur.",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.590Z",
- "updated_at": "2016-06-14T15:02:04.590Z",
- "state": "active",
- "iid": 5,
- "events": [
- {
- "id": 240,
- "target_type": "Milestone",
- "target_id": 20,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:04.593Z",
- "updated_at": "2016-06-14T15:02:04.593Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 60,
- "target_type": "Milestone",
- "target_id": 20,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:04.593Z",
- "updated_at": "2016-06-14T15:02:04.593Z",
- "action": 1,
- "author_id": 20
- }
- ]
- },
- {
- "id": 19,
- "title": "v3.0",
- "project_id": 5,
- "description": "Rerum at autem exercitationem ea voluptates harum quam placeat.",
- "due_date": null,
- "created_at": "2016-06-14T15:02:04.583Z",
- "updated_at": "2016-06-14T15:02:04.583Z",
- "state": "active",
- "iid": 4,
- "events": [
- {
- "id": 241,
- "target_type": "Milestone",
- "target_id": 19,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:04.585Z",
- "updated_at": "2016-06-14T15:02:04.585Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 59,
- "target_type": "Milestone",
- "target_id": 19,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:04.585Z",
- "updated_at": "2016-06-14T15:02:04.585Z",
- "action": 1,
- "author_id": 25
- }
- ]
- }
- ],
- "snippets": [],
- "releases": [],
- "project_members": [
- {
- "id": 36,
- "access_level": 40,
- "source_id": 5,
- "source_type": "Project",
- "user_id": 16,
- "notification_level": 3,
- "created_at": "2016-06-14T15:02:03.834Z",
- "updated_at": "2016-06-14T15:02:03.834Z",
- "created_by_id": null,
- "invite_email": null,
- "invite_token": null,
- "invite_accepted_at": null,
- "requested_at": null,
- "user": {
- "id": 16,
- "email": "maritza_schoen@block.ca",
- "username": "bernard_willms"
- }
- },
- {
- "id": 35,
- "access_level": 10,
- "source_id": 5,
- "source_type": "Project",
- "user_id": 6,
- "notification_level": 3,
- "created_at": "2016-06-14T15:02:03.811Z",
- "updated_at": "2016-06-14T15:02:03.811Z",
- "created_by_id": null,
- "invite_email": null,
- "invite_token": null,
- "invite_accepted_at": null,
- "requested_at": null,
- "user": {
- "id": 6,
- "email": "shaina@koelpindenesik.com",
- "username": "saul_will"
- }
- },
- {
- "id": 34,
- "access_level": 20,
- "source_id": 5,
- "source_type": "Project",
- "user_id": 15,
- "notification_level": 3,
- "created_at": "2016-06-14T15:02:03.776Z",
- "updated_at": "2016-06-14T15:02:03.776Z",
- "created_by_id": null,
- "invite_email": null,
- "invite_token": null,
- "invite_accepted_at": null,
- "requested_at": null,
- "user": {
- "id": 15,
- "email": "breanna_sanford@wolf.com",
- "username": "emmet.schamberger"
- }
- },
- {
- "id": 33,
- "access_level": 20,
- "source_id": 5,
- "source_type": "Project",
- "user_id": 26,
- "notification_level": 3,
- "created_at": "2016-06-14T15:02:03.742Z",
- "updated_at": "2016-06-14T15:02:03.742Z",
- "created_by_id": null,
- "invite_email": null,
- "invite_token": null,
- "invite_accepted_at": null,
- "requested_at": null,
- "user": {
- "id": 26,
- "email": "user4@example.com",
- "username": "user4"
- }
- }
- ],
- "merge_requests": [
- {
- "id": 27,
- "target_branch": "feature",
- "source_branch": "feature_conflict",
- "source_project_id": 999,
- "author_id": 1,
- "assignee_id": null,
- "title": "MR1",
- "created_at": "2016-06-14T15:02:36.568Z",
- "updated_at": "2016-06-14T15:02:56.815Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 9,
- "description": null,
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "diff_head_sha": "HEAD",
- "source_branch_sha": "ABCD",
- "target_branch_sha": "DCBA",
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": true,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 671,
- "note": "Sit voluptatibus eveniet architecto quidem.",
- "note_html": "<p>something else entirely</p>",
- "cached_markdown_version": 917504,
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:56.632Z",
- "updated_at": "2016-06-14T15:02:56.632Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 672,
- "note": "Odio maxime ratione voluptatibus sed.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:56.656Z",
- "updated_at": "2016-06-14T15:02:56.656Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 673,
- "note": "Et deserunt et omnis nihil excepturi accusantium.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:56.679Z",
- "updated_at": "2016-06-14T15:02:56.679Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 674,
- "note": "Saepe asperiores exercitationem non dignissimos laborum reiciendis et ipsum.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:56.700Z",
- "updated_at": "2016-06-14T15:02:56.700Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": [],
- "suggestions": [
- {
- "id": 1,
- "note_id": 674,
- "relative_order": 0,
- "applied": false,
- "commit_id": null,
- "from_content": "Original line\n",
- "to_content": "New line\n",
- "lines_above": 0,
- "lines_below": 0,
- "outdated": false
- }
- ]
- },
- {
- "id": 675,
- "note": "Numquam est at dolor quo et sed eligendi similique.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:56.720Z",
- "updated_at": "2016-06-14T15:02:56.720Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 676,
- "note": "Et perferendis aliquam sunt nisi labore delectus.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:56.742Z",
- "updated_at": "2016-06-14T15:02:56.742Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 677,
- "note": "Aut ex rerum et in.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:56.791Z",
- "updated_at": "2016-06-14T15:02:56.791Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 678,
- "note": "Dolor laborum earum ut exercitationem.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:56.814Z",
- "updated_at": "2016-06-14T15:02:56.814Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 27,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "resource_label_events": [
- {
- "id":243,
- "action":"add",
- "issue_id":null,
- "merge_request_id":27,
- "label_id":null,
- "user_id":1,
- "created_at":"2018-08-28T08:24:00.494Z"
- }
- ],
- "merge_request_diff": {
- "id": 27,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 27,
- "relative_order": 0,
- "sha": "bb5206fee213d983da88c47f9cf4cc6caf9c66dc",
- "message": "Feature conflict added\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-08-06T08:35:52.000+02:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-08-06T08:35:52.000+02:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 1,
- "sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
- "message": "Add submodule from gitlab.com\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T10:01:38.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T10:01:38.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 2,
- "sha": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
- "message": "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:57:31.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:57:31.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 3,
- "sha": "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9",
- "message": "More submodules\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:54:21.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:54:21.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 4,
- "sha": "d14d6c0abdd253381df51a723d58691b2ee1ab08",
- "message": "Remove ds_store files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:49:50.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:49:50.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 5,
- "sha": "c1acaa58bbcbc3eafe538cb8274ba387047b69f8",
- "message": "Ignore DS files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:48:32.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:48:32.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 27,
- "relative_order": 0,
- "utf8_diff": "Binary files a/.DS_Store and /dev/null differ\n",
- "new_path": ".DS_Store",
- "old_path": ".DS_Store",
- "a_mode": "100644",
- "b_mode": "0",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": true,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 1,
- "utf8_diff": "--- a/.gitignore\n+++ b/.gitignore\n@@ -17,3 +17,4 @@ rerun.txt\n pickle-email-*.html\n .project\n config/initializers/secret_token.rb\n+.DS_Store\n",
- "new_path": ".gitignore",
- "old_path": ".gitignore",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 2,
- "utf8_diff": "--- a/.gitmodules\n+++ b/.gitmodules\n@@ -1,3 +1,9 @@\n [submodule \"six\"]\n \tpath = six\n \turl = git://github.com/randx/six.git\n+[submodule \"gitlab-shell\"]\n+\tpath = gitlab-shell\n+\turl = https://github.com/gitlabhq/gitlab-shell.git\n+[submodule \"gitlab-grack\"]\n+\tpath = gitlab-grack\n+\turl = https://gitlab.com/gitlab-org/gitlab-grack.git\n",
- "new_path": ".gitmodules",
- "old_path": ".gitmodules",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 3,
- "utf8_diff": "Binary files a/files/.DS_Store and /dev/null differ\n",
- "new_path": "files/.DS_Store",
- "old_path": "files/.DS_Store",
- "a_mode": "100644",
- "b_mode": "0",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": true,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 4,
- "utf8_diff": "--- /dev/null\n+++ b/files/ruby/feature.rb\n@@ -0,0 +1,4 @@\n+# This file was changed in feature branch\n+# We put different code here to make merge conflict\n+class Conflict\n+end\n",
- "new_path": "files/ruby/feature.rb",
- "old_path": "files/ruby/feature.rb",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 5,
- "utf8_diff": "--- a/files/ruby/popen.rb\n+++ b/files/ruby/popen.rb\n@@ -6,12 +6,18 @@ module Popen\n \n def popen(cmd, path=nil)\n unless cmd.is_a?(Array)\n- raise \"System commands must be given as an array of strings\"\n+ raise RuntimeError, \"System commands must be given as an array of strings\"\n end\n \n path ||= Dir.pwd\n- vars = { \"PWD\" => path }\n- options = { chdir: path }\n+\n+ vars = {\n+ \"PWD\" => path\n+ }\n+\n+ options = {\n+ chdir: path\n+ }\n \n unless File.directory?(path)\n FileUtils.mkdir_p(path)\n@@ -19,6 +25,7 @@ module Popen\n \n @cmd_output = \"\"\n @cmd_status = 0\n+\n Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|\n @cmd_output << stdout.read\n @cmd_output << stderr.read\n",
- "new_path": "files/ruby/popen.rb",
- "old_path": "files/ruby/popen.rb",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 6,
- "utf8_diff": "--- a/files/ruby/regex.rb\n+++ b/files/ruby/regex.rb\n@@ -19,14 +19,12 @@ module Gitlab\n end\n \n def archive_formats_regex\n- #|zip|tar| tar.gz | tar.bz2 |\n- /(zip|tar|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n+ /(zip|tar|7z|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n end\n \n def git_reference_regex\n # Valid git ref regex, see:\n # https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html\n-\n %r{\n (?!\n (?# doesn't begins with)\n",
- "new_path": "files/ruby/regex.rb",
- "old_path": "files/ruby/regex.rb",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 7,
- "utf8_diff": "--- /dev/null\n+++ b/gitlab-grack\n@@ -0,0 +1 @@\n+Subproject commit 645f6c4c82fd3f5e06f67134450a570b795e55a6\n",
- "new_path": "gitlab-grack",
- "old_path": "gitlab-grack",
- "a_mode": "0",
- "b_mode": "160000",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 27,
- "relative_order": 8,
- "utf8_diff": "--- /dev/null\n+++ b/gitlab-shell\n@@ -0,0 +1 @@\n+Subproject commit 79bceae69cb5750d6567b223597999bfa91cb3b9\n",
- "new_path": "gitlab-shell",
- "old_path": "gitlab-shell",
- "a_mode": "0",
- "b_mode": "160000",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 27,
- "created_at": "2016-06-14T15:02:36.572Z",
- "updated_at": "2016-06-14T15:02:36.658Z",
- "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
- "real_size": "9"
- },
- "events": [
- {
- "id": 221,
- "target_type": "MergeRequest",
- "target_id": 27,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:36.703Z",
- "updated_at": "2016-06-14T15:02:36.703Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 187,
- "target_type": "MergeRequest",
- "target_id": 27,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:36.703Z",
- "updated_at": "2016-06-14T15:02:36.703Z",
- "action": 1,
- "author_id": 1
- }
- ],
- "approvals_before_merge": 1
- },
- {
- "id": 26,
- "target_branch": "master",
- "source_branch": "feature",
- "source_project_id": 4,
- "author_id": 1,
- "assignee_id": null,
- "title": "MR2",
- "created_at": "2016-06-14T15:02:36.418Z",
- "updated_at": "2016-06-14T15:02:57.013Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 8,
- "description": null,
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 679,
- "note": "Qui rerum totam nisi est.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:56.848Z",
- "updated_at": "2016-06-14T15:02:56.848Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 680,
- "note": "Pariatur magni corrupti consequatur debitis minima error beatae voluptatem.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:56.871Z",
- "updated_at": "2016-06-14T15:02:56.871Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 681,
- "note": "Qui quis ut modi eos rerum ratione.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:56.895Z",
- "updated_at": "2016-06-14T15:02:56.895Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 682,
- "note": "Illum quidem expedita mollitia fugit.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:56.918Z",
- "updated_at": "2016-06-14T15:02:56.918Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 683,
- "note": "Consectetur voluptate sit sint possimus veritatis quod.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:56.942Z",
- "updated_at": "2016-06-14T15:02:56.942Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 684,
- "note": "Natus libero quibusdam rem assumenda deleniti accusamus sed earum.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:56.966Z",
- "updated_at": "2016-06-14T15:02:56.966Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 685,
- "note": "Tenetur autem nihil rerum odit.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:56.989Z",
- "updated_at": "2016-06-14T15:02:56.989Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 686,
- "note": "Quia maiores et odio sed.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:57.012Z",
- "updated_at": "2016-06-14T15:02:57.012Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 26,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 26,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 26,
- "sha": "0b4bc9a49b562e85de7cc9e834518ea6828729b9",
- "relative_order": 0,
- "message": "Feature added\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:26:01.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:26:01.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 26,
- "relative_order": 0,
- "utf8_diff": "--- /dev/null\n+++ b/files/ruby/feature.rb\n@@ -0,0 +1,5 @@\n+class Feature\n+ def foo\n+ puts 'bar'\n+ end\n+end\n",
- "new_path": "files/ruby/feature.rb",
- "old_path": "files/ruby/feature.rb",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 26,
- "created_at": "2016-06-14T15:02:36.421Z",
- "updated_at": "2016-06-14T15:02:36.474Z",
- "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
- "real_size": "1"
- },
- "events": [
- {
- "id": 222,
- "target_type": "MergeRequest",
- "target_id": 26,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:36.496Z",
- "updated_at": "2016-06-14T15:02:36.496Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 186,
- "target_type": "MergeRequest",
- "target_id": 26,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:36.496Z",
- "updated_at": "2016-06-14T15:02:36.496Z",
- "action": 1,
- "author_id": 1
- }
- ]
- },
- {
- "id": 15,
- "target_branch": "test-7",
- "source_branch": "test-1",
- "source_project_id": 5,
- "author_id": 22,
- "assignee_id": 16,
- "title": "Qui accusantium et inventore facilis doloribus occaecati officiis.",
- "created_at": "2016-06-14T15:02:25.168Z",
- "updated_at": "2016-06-14T15:02:59.521Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 7,
- "description": "Et commodi deserunt aspernatur vero rerum. Ut non dolorum alias in odit est libero. Voluptatibus eos in et vitae repudiandae facilis ex mollitia.",
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 777,
- "note": "Pariatur voluptas placeat aspernatur culpa suscipit soluta.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:59.348Z",
- "updated_at": "2016-06-14T15:02:59.348Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 778,
- "note": "Alias et iure mollitia suscipit molestiae voluptatum nostrum asperiores.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:59.372Z",
- "updated_at": "2016-06-14T15:02:59.372Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 779,
- "note": "Laudantium qui eum qui sunt.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:59.395Z",
- "updated_at": "2016-06-14T15:02:59.395Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 780,
- "note": "Quas rem est iusto ut delectus fugiat recusandae mollitia.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:59.418Z",
- "updated_at": "2016-06-14T15:02:59.418Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 781,
- "note": "Repellendus ab et qui nesciunt.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:59.444Z",
- "updated_at": "2016-06-14T15:02:59.444Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 782,
- "note": "Non possimus voluptatum odio qui ut.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:59.469Z",
- "updated_at": "2016-06-14T15:02:59.469Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 783,
- "note": "Dolores repellendus eum ducimus quam ab dolorem quia.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:59.494Z",
- "updated_at": "2016-06-14T15:02:59.494Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 784,
- "note": "Facilis dolorem aut corrupti id ratione occaecati.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:59.520Z",
- "updated_at": "2016-06-14T15:02:59.520Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 15,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 15,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 15,
- "relative_order": 0,
- "sha": "94b8d581c48d894b86661718582fecbc5e3ed2eb",
- "message": "fixes #10\n",
- "authored_date": "2016-01-19T13:22:56.000+01:00",
- "author_name": "James Lopez",
- "author_email": "james@jameslopez.es",
- "committed_date": "2016-01-19T13:22:56.000+01:00",
- "committer_name": "James Lopez",
- "committer_email": "james@jameslopez.es"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 15,
- "relative_order": 0,
- "utf8_diff": "--- /dev/null\n+++ b/test\n",
- "new_path": "test",
- "old_path": "test",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 15,
- "created_at": "2016-06-14T15:02:25.171Z",
- "updated_at": "2016-06-14T15:02:25.230Z",
- "base_commit_sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
- "real_size": "1"
- },
- "events": [
- {
- "id": 223,
- "target_type": "MergeRequest",
- "target_id": 15,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:25.262Z",
- "updated_at": "2016-06-14T15:02:25.262Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 175,
- "target_type": "MergeRequest",
- "target_id": 15,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:25.262Z",
- "updated_at": "2016-06-14T15:02:25.262Z",
- "action": 1,
- "author_id": 22
- }
- ]
- },
- {
- "id": 14,
- "target_branch": "fix",
- "source_branch": "test-3",
- "source_project_id": 5,
- "author_id": 20,
- "assignee_id": 20,
- "title": "In voluptas aut sequi voluptatem ullam vel corporis illum consequatur.",
- "created_at": "2016-06-14T15:02:24.760Z",
- "updated_at": "2016-06-14T15:02:59.749Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 6,
- "description": "Dicta magnam non voluptates nam dignissimos nostrum deserunt. Dolorum et suscipit iure quae doloremque. Necessitatibus saepe aut labore sed.",
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 785,
- "note": "Atque cupiditate necessitatibus deserunt minus natus odit.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:59.559Z",
- "updated_at": "2016-06-14T15:02:59.559Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 786,
- "note": "Non dolorem provident mollitia nesciunt optio ex eveniet.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:59.587Z",
- "updated_at": "2016-06-14T15:02:59.587Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 787,
- "note": "Similique officia nemo quasi commodi accusantium quae qui.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:59.621Z",
- "updated_at": "2016-06-14T15:02:59.621Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 788,
- "note": "Et est et alias ad dolor qui.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:59.650Z",
- "updated_at": "2016-06-14T15:02:59.650Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 789,
- "note": "Numquam temporibus ratione voluptatibus aliquid.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:59.675Z",
- "updated_at": "2016-06-14T15:02:59.675Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 790,
- "note": "Ut ex aliquam consectetur perferendis est hic aut quia.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:59.703Z",
- "updated_at": "2016-06-14T15:02:59.703Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 791,
- "note": "Esse eos quam quaerat aut ut asperiores officiis.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:59.726Z",
- "updated_at": "2016-06-14T15:02:59.726Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 792,
- "note": "Sint facilis accusantium iure blanditiis.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:59.748Z",
- "updated_at": "2016-06-14T15:02:59.748Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 14,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 14,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 14,
- "relative_order": 0,
- "sha": "ddd4ff416a931589c695eb4f5b23f844426f6928",
- "message": "fixes #10\n",
- "authored_date": "2016-01-19T14:14:43.000+01:00",
- "author_name": "James Lopez",
- "author_email": "james@jameslopez.es",
- "committed_date": "2016-01-19T14:14:43.000+01:00",
- "committer_name": "James Lopez",
- "committer_email": "james@jameslopez.es"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 1,
- "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
- "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
- "authored_date": "2015-12-07T12:52:12.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "marin@gitlab.com",
- "committed_date": "2015-12-07T12:52:12.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "marin@gitlab.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 2,
- "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
- "message": "LFS object pointer.\n",
- "authored_date": "2015-12-07T11:54:28.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "maxlazio@gmail.com",
- "committed_date": "2015-12-07T11:54:28.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "maxlazio@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 3,
- "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
- "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
- "authored_date": "2015-11-13T16:27:12.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T16:27:12.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 4,
- "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
- "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
- "authored_date": "2015-11-13T08:50:17.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:50:17.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 5,
- "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
- "message": "Add GitLab SVG\n",
- "authored_date": "2015-11-13T08:39:43.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:39:43.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 6,
- "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
- "authored_date": "2015-11-13T07:21:40.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T07:21:40.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 7,
- "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
- "message": "add spaces in whitespace file\n",
- "authored_date": "2015-11-13T06:01:27.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:01:27.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 8,
- "sha": "08f22f255f082689c0d7d39d19205085311542bc",
- "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
- "authored_date": "2015-11-13T06:00:16.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:00:16.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 9,
- "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
- "authored_date": "2015-11-13T05:23:14.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T05:23:14.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 10,
- "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
- "message": "add whitespace in empty\n",
- "authored_date": "2015-11-13T05:08:45.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:45.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 11,
- "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
- "message": "add empty file\n",
- "authored_date": "2015-11-13T05:08:04.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:04.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 12,
- "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
- "message": "Add ISO-8859 test file\n",
- "authored_date": "2015-08-25T17:53:12.000+02:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@packetzoom.com",
- "committed_date": "2015-08-25T17:53:12.000+02:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@packetzoom.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 13,
- "sha": "e56497bb5f03a90a51293fc6d516788730953899",
- "message": "Merge branch 'tree_helper_spec' into 'master'\n\nAdd directory structure for tree_helper spec\n\nThis directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module\n\nSee [merge request #275](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/275#note_732774)\n\nSee merge request !2\n",
- "authored_date": "2015-01-10T22:23:29.000+01:00",
- "author_name": "Sytse Sijbrandij",
- "author_email": "sytse@gitlab.com",
- "committed_date": "2015-01-10T22:23:29.000+01:00",
- "committer_name": "Sytse Sijbrandij",
- "committer_email": "sytse@gitlab.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 14,
- "sha": "4cd80ccab63c82b4bad16faa5193fbd2aa06df40",
- "message": "add directory structure for tree_helper spec\n",
- "authored_date": "2015-01-10T21:28:18.000+01:00",
- "author_name": "marmis85",
- "author_email": "marmis85@gmail.com",
- "committed_date": "2015-01-10T21:28:18.000+01:00",
- "committer_name": "marmis85",
- "committer_email": "marmis85@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 15,
- "sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
- "message": "Add submodule from gitlab.com\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T10:01:38.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T10:01:38.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 16,
- "sha": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
- "message": "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:57:31.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:57:31.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 17,
- "sha": "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9",
- "message": "More submodules\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:54:21.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:54:21.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 18,
- "sha": "d14d6c0abdd253381df51a723d58691b2ee1ab08",
- "message": "Remove ds_store files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:49:50.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:49:50.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 19,
- "sha": "c1acaa58bbcbc3eafe538cb8274ba387047b69f8",
- "message": "Ignore DS files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:48:32.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:48:32.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 14,
- "relative_order": 0,
- "utf8_diff": "Binary files a/.DS_Store and /dev/null differ\n",
- "new_path": ".DS_Store",
- "old_path": ".DS_Store",
- "a_mode": "100644",
- "b_mode": "0",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": true,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 1,
- "utf8_diff": "--- a/.gitignore\n+++ b/.gitignore\n@@ -17,3 +17,4 @@ rerun.txt\n pickle-email-*.html\n .project\n config/initializers/secret_token.rb\n+.DS_Store\n",
- "new_path": ".gitignore",
- "old_path": ".gitignore",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 2,
- "utf8_diff": "--- a/.gitmodules\n+++ b/.gitmodules\n@@ -1,3 +1,9 @@\n [submodule \"six\"]\n \tpath = six\n \turl = git://github.com/randx/six.git\n+[submodule \"gitlab-shell\"]\n+\tpath = gitlab-shell\n+\turl = https://github.com/gitlabhq/gitlab-shell.git\n+[submodule \"gitlab-grack\"]\n+\tpath = gitlab-grack\n+\turl = https://gitlab.com/gitlab-org/gitlab-grack.git\n",
- "new_path": ".gitmodules",
- "old_path": ".gitmodules",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 3,
- "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
- "new_path": "CHANGELOG",
- "old_path": "CHANGELOG",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 4,
- "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
- "new_path": "encoding/iso8859.txt",
- "old_path": "encoding/iso8859.txt",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 5,
- "utf8_diff": "Binary files a/files/.DS_Store and /dev/null differ\n",
- "new_path": "files/.DS_Store",
- "old_path": "files/.DS_Store",
- "a_mode": "100644",
- "b_mode": "0",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": true,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 6,
- "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
- "new_path": "files/images/wm.svg",
- "old_path": "files/images/wm.svg",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 7,
- "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
- "new_path": "files/lfs/lfs_object.iso",
- "old_path": "files/lfs/lfs_object.iso",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 8,
- "utf8_diff": "--- a/files/ruby/popen.rb\n+++ b/files/ruby/popen.rb\n@@ -6,12 +6,18 @@ module Popen\n \n def popen(cmd, path=nil)\n unless cmd.is_a?(Array)\n- raise \"System commands must be given as an array of strings\"\n+ raise RuntimeError, \"System commands must be given as an array of strings\"\n end\n \n path ||= Dir.pwd\n- vars = { \"PWD\" => path }\n- options = { chdir: path }\n+\n+ vars = {\n+ \"PWD\" => path\n+ }\n+\n+ options = {\n+ chdir: path\n+ }\n \n unless File.directory?(path)\n FileUtils.mkdir_p(path)\n@@ -19,6 +25,7 @@ module Popen\n \n @cmd_output = \"\"\n @cmd_status = 0\n+\n Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|\n @cmd_output << stdout.read\n @cmd_output << stderr.read\n",
- "new_path": "files/ruby/popen.rb",
- "old_path": "files/ruby/popen.rb",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 9,
- "utf8_diff": "--- a/files/ruby/regex.rb\n+++ b/files/ruby/regex.rb\n@@ -19,14 +19,12 @@ module Gitlab\n end\n \n def archive_formats_regex\n- #|zip|tar| tar.gz | tar.bz2 |\n- /(zip|tar|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n+ /(zip|tar|7z|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n end\n \n def git_reference_regex\n # Valid git ref regex, see:\n # https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html\n-\n %r{\n (?!\n (?# doesn't begins with)\n",
- "new_path": "files/ruby/regex.rb",
- "old_path": "files/ruby/regex.rb",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 10,
- "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
- "new_path": "files/whitespace",
- "old_path": "files/whitespace",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 11,
- "utf8_diff": "--- /dev/null\n+++ b/foo/bar/.gitkeep\n",
- "new_path": "foo/bar/.gitkeep",
- "old_path": "foo/bar/.gitkeep",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 12,
- "utf8_diff": "--- /dev/null\n+++ b/gitlab-grack\n@@ -0,0 +1 @@\n+Subproject commit 645f6c4c82fd3f5e06f67134450a570b795e55a6\n",
- "new_path": "gitlab-grack",
- "old_path": "gitlab-grack",
- "a_mode": "0",
- "b_mode": "160000",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 13,
- "utf8_diff": "--- /dev/null\n+++ b/gitlab-shell\n@@ -0,0 +1 @@\n+Subproject commit 79bceae69cb5750d6567b223597999bfa91cb3b9\n",
- "new_path": "gitlab-shell",
- "old_path": "gitlab-shell",
- "a_mode": "0",
- "b_mode": "160000",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 14,
- "relative_order": 14,
- "utf8_diff": "--- /dev/null\n+++ b/test\n",
- "new_path": "test",
- "old_path": "test",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 14,
- "created_at": "2016-06-14T15:02:24.770Z",
- "updated_at": "2016-06-14T15:02:25.007Z",
- "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
- "real_size": "15"
- },
- "events": [
- {
- "id": 224,
- "target_type": "MergeRequest",
- "target_id": 14,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:25.113Z",
- "updated_at": "2016-06-14T15:02:25.113Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 174,
- "target_type": "MergeRequest",
- "target_id": 14,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:25.113Z",
- "updated_at": "2016-06-14T15:02:25.113Z",
- "action": 1,
- "author_id": 20
- }
- ]
- },
- {
- "id": 13,
- "target_branch": "improve/awesome",
- "source_branch": "test-8",
- "source_project_id": 5,
- "author_id": 16,
- "assignee_id": 25,
- "title": "Voluptates consequatur eius nemo amet libero animi illum delectus tempore.",
- "created_at": "2016-06-14T15:02:24.415Z",
- "updated_at": "2016-06-14T15:02:59.958Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 5,
- "description": "Est eaque quasi qui qui. Similique voluptatem impedit iusto ratione reprehenderit. Itaque est illum ut nulla aut.",
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 793,
- "note": "In illum maxime aperiam nulla est aspernatur.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:02:59.782Z",
- "updated_at": "2016-06-14T15:02:59.782Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": [
- {
- "merge_request_diff_id": 14,
- "id": 529,
- "target_type": "Note",
- "target_id": 793,
- "project_id": 4,
- "created_at": "2016-07-07T14:35:12.128Z",
- "updated_at": "2016-07-07T14:35:12.128Z",
- "action": 6,
- "author_id": 1
- }
- ]
- },
- {
- "id": 794,
- "note": "Enim quia perferendis cum distinctio tenetur optio voluptas veniam.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:02:59.807Z",
- "updated_at": "2016-06-14T15:02:59.807Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 795,
- "note": "Dolor ad quia quis pariatur ducimus.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:02:59.831Z",
- "updated_at": "2016-06-14T15:02:59.831Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 796,
- "note": "Et a odio voluptate aut.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:02:59.854Z",
- "updated_at": "2016-06-14T15:02:59.854Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 797,
- "note": "Quis nihil temporibus voluptatum modi minima a ut.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:02:59.879Z",
- "updated_at": "2016-06-14T15:02:59.879Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 798,
- "note": "Ut alias consequatur in nostrum.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:02:59.904Z",
- "updated_at": "2016-06-14T15:02:59.904Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 799,
- "note": "Voluptatibus aperiam assumenda et neque sint libero.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:02:59.926Z",
- "updated_at": "2016-06-14T15:02:59.926Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 800,
- "note": "Veritatis voluptatem dolor dolores magni quo ut ipsa fuga.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:02:59.956Z",
- "updated_at": "2016-06-14T15:02:59.956Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 13,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 13,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 13,
- "relative_order": 0,
- "sha": "0bfedc29d30280c7e8564e19f654584b459e5868",
- "message": "fixes #10\n",
- "authored_date": "2016-01-19T15:25:23.000+01:00",
- "author_name": "James Lopez",
- "author_email": "james@jameslopez.es",
- "committed_date": "2016-01-19T15:25:23.000+01:00",
- "committer_name": "James Lopez",
- "committer_email": "james@jameslopez.es"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 1,
- "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
- "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
- "authored_date": "2015-12-07T12:52:12.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "marin@gitlab.com",
- "committed_date": "2015-12-07T12:52:12.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "marin@gitlab.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 2,
- "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
- "message": "LFS object pointer.\n",
- "authored_date": "2015-12-07T11:54:28.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "maxlazio@gmail.com",
- "committed_date": "2015-12-07T11:54:28.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "maxlazio@gmail.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 3,
- "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
- "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
- "authored_date": "2015-11-13T16:27:12.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T16:27:12.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 4,
- "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
- "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
- "authored_date": "2015-11-13T08:50:17.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:50:17.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 5,
- "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
- "message": "Add GitLab SVG\n",
- "authored_date": "2015-11-13T08:39:43.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:39:43.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 6,
- "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
- "authored_date": "2015-11-13T07:21:40.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T07:21:40.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 7,
- "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
- "message": "add spaces in whitespace file\n",
- "authored_date": "2015-11-13T06:01:27.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:01:27.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 8,
- "sha": "08f22f255f082689c0d7d39d19205085311542bc",
- "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
- "authored_date": "2015-11-13T06:00:16.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:00:16.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 9,
- "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
- "authored_date": "2015-11-13T05:23:14.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T05:23:14.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 10,
- "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
- "message": "add whitespace in empty\n",
- "authored_date": "2015-11-13T05:08:45.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:45.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 11,
- "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
- "message": "add empty file\n",
- "authored_date": "2015-11-13T05:08:04.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:04.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 12,
- "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
- "message": "Add ISO-8859 test file\n",
- "authored_date": "2015-08-25T17:53:12.000+02:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@packetzoom.com",
- "committed_date": "2015-08-25T17:53:12.000+02:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@packetzoom.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 13,
- "sha": "e56497bb5f03a90a51293fc6d516788730953899",
- "message": "Merge branch 'tree_helper_spec' into 'master'\n\nAdd directory structure for tree_helper spec\n\nThis directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module\n\nSee [merge request #275](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/275#note_732774)\n\nSee merge request !2\n",
- "authored_date": "2015-01-10T22:23:29.000+01:00",
- "author_name": "Sytse Sijbrandij",
- "author_email": "sytse@gitlab.com",
- "committed_date": "2015-01-10T22:23:29.000+01:00",
- "committer_name": "Sytse Sijbrandij",
- "committer_email": "sytse@gitlab.com"
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 14,
- "sha": "4cd80ccab63c82b4bad16faa5193fbd2aa06df40",
- "message": "add directory structure for tree_helper spec\n",
- "authored_date": "2015-01-10T21:28:18.000+01:00",
- "author_name": "marmis85",
- "author_email": "marmis85@gmail.com",
- "committed_date": "2015-01-10T21:28:18.000+01:00",
- "committer_name": "marmis85",
- "committer_email": "marmis85@gmail.com"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 13,
- "relative_order": 0,
- "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
- "new_path": "CHANGELOG",
- "old_path": "CHANGELOG",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 1,
- "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
- "new_path": "encoding/iso8859.txt",
- "old_path": "encoding/iso8859.txt",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 2,
- "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
- "new_path": "files/images/wm.svg",
- "old_path": "files/images/wm.svg",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 3,
- "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
- "new_path": "files/lfs/lfs_object.iso",
- "old_path": "files/lfs/lfs_object.iso",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 4,
- "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
- "new_path": "files/whitespace",
- "old_path": "files/whitespace",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 5,
- "utf8_diff": "--- /dev/null\n+++ b/foo/bar/.gitkeep\n",
- "new_path": "foo/bar/.gitkeep",
- "old_path": "foo/bar/.gitkeep",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 13,
- "relative_order": 6,
- "utf8_diff": "--- /dev/null\n+++ b/test\n",
- "new_path": "test",
- "old_path": "test",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 13,
- "created_at": "2016-06-14T15:02:24.420Z",
- "updated_at": "2016-06-14T15:02:24.561Z",
- "base_commit_sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
- "real_size": "7"
- },
- "events": [
- {
- "id": 225,
- "target_type": "MergeRequest",
- "target_id": 13,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:24.636Z",
- "updated_at": "2016-06-14T15:02:24.636Z",
- "action": 1,
- "author_id": 16
- },
- {
- "id": 173,
- "target_type": "MergeRequest",
- "target_id": 13,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:24.636Z",
- "updated_at": "2016-06-14T15:02:24.636Z",
- "action": 1,
- "author_id": 16
- }
- ]
- },
- {
- "id": 12,
- "target_branch": "flatten-dirs",
- "source_branch": "test-2",
- "source_project_id": 5,
- "author_id": 1,
- "assignee_id": 22,
- "title": "In a rerum harum nihil accusamus aut quia nobis non.",
- "created_at": "2016-06-14T15:02:24.000Z",
- "updated_at": "2016-06-14T15:03:00.225Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 4,
- "description": "Nam magnam odit velit rerum. Sapiente dolore sunt saepe debitis. Culpa maiores ut ad dolores dolorem et.",
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 801,
- "note": "Nihil dicta molestias expedita atque.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:03:00.001Z",
- "updated_at": "2016-06-14T15:03:00.001Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 802,
- "note": "Illum culpa voluptas enim accusantium deserunt.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:03:00.034Z",
- "updated_at": "2016-06-14T15:03:00.034Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 803,
- "note": "Dicta esse aliquam laboriosam unde alias.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:03:00.065Z",
- "updated_at": "2016-06-14T15:03:00.065Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 804,
- "note": "Dicta autem et sed molestiae ut quae.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:03:00.097Z",
- "updated_at": "2016-06-14T15:03:00.097Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 805,
- "note": "Ut ut temporibus voluptas dolore quia velit.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:03:00.129Z",
- "updated_at": "2016-06-14T15:03:00.129Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 806,
- "note": "Dolores similique sint pariatur error id quia fugit aut.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:03:00.162Z",
- "updated_at": "2016-06-14T15:03:00.162Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 807,
- "note": "Quisquam provident nihil aperiam voluptatem.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:03:00.193Z",
- "updated_at": "2016-06-14T15:03:00.193Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 808,
- "note": "Similique quo vero expedita deserunt ipsam earum.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:03:00.224Z",
- "updated_at": "2016-06-14T15:03:00.224Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 12,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 12,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 12,
- "relative_order": 0,
- "sha": "97a0df9696e2aebf10c31b3016f40214e0e8f243",
- "message": "fixes #10\n",
- "authored_date": "2016-01-19T14:08:21.000+01:00",
- "author_name": "James Lopez",
- "author_email": "james@jameslopez.es",
- "committed_date": "2016-01-19T14:08:21.000+01:00",
- "committer_name": "James Lopez",
- "committer_email": "james@jameslopez.es"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 1,
- "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
- "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
- "authored_date": "2015-12-07T12:52:12.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "marin@gitlab.com",
- "committed_date": "2015-12-07T12:52:12.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "marin@gitlab.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 2,
- "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
- "message": "LFS object pointer.\n",
- "authored_date": "2015-12-07T11:54:28.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "maxlazio@gmail.com",
- "committed_date": "2015-12-07T11:54:28.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "maxlazio@gmail.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 3,
- "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
- "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
- "authored_date": "2015-11-13T16:27:12.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T16:27:12.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 4,
- "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
- "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
- "authored_date": "2015-11-13T08:50:17.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:50:17.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 5,
- "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
- "message": "Add GitLab SVG\n",
- "authored_date": "2015-11-13T08:39:43.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:39:43.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 6,
- "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
- "authored_date": "2015-11-13T07:21:40.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T07:21:40.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 7,
- "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
- "message": "add spaces in whitespace file\n",
- "authored_date": "2015-11-13T06:01:27.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:01:27.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 8,
- "sha": "08f22f255f082689c0d7d39d19205085311542bc",
- "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
- "authored_date": "2015-11-13T06:00:16.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:00:16.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 9,
- "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
- "authored_date": "2015-11-13T05:23:14.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T05:23:14.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 10,
- "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
- "message": "add whitespace in empty\n",
- "authored_date": "2015-11-13T05:08:45.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:45.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 11,
- "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
- "message": "add empty file\n",
- "authored_date": "2015-11-13T05:08:04.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:04.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 12,
- "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
- "message": "Add ISO-8859 test file\n",
- "authored_date": "2015-08-25T17:53:12.000+02:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@packetzoom.com",
- "committed_date": "2015-08-25T17:53:12.000+02:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@packetzoom.com"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 12,
- "relative_order": 0,
- "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
- "new_path": "CHANGELOG",
- "old_path": "CHANGELOG",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 1,
- "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
- "new_path": "encoding/iso8859.txt",
- "old_path": "encoding/iso8859.txt",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 2,
- "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
- "new_path": "files/images/wm.svg",
- "old_path": "files/images/wm.svg",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 3,
- "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
- "new_path": "files/lfs/lfs_object.iso",
- "old_path": "files/lfs/lfs_object.iso",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 4,
- "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
- "new_path": "files/whitespace",
- "old_path": "files/whitespace",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 12,
- "relative_order": 5,
- "utf8_diff": "--- /dev/null\n+++ b/test\n",
- "new_path": "test",
- "old_path": "test",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 12,
- "created_at": "2016-06-14T15:02:24.006Z",
- "updated_at": "2016-06-14T15:02:24.169Z",
- "base_commit_sha": "e56497bb5f03a90a51293fc6d516788730953899",
- "real_size": "6"
- },
- "events": [
- {
- "id": 226,
- "target_type": "MergeRequest",
- "target_id": 12,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:24.253Z",
- "updated_at": "2016-06-14T15:02:24.253Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 172,
- "target_type": "MergeRequest",
- "target_id": 12,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:24.253Z",
- "updated_at": "2016-06-14T15:02:24.253Z",
- "action": 1,
- "author_id": 1
- }
- ]
- },
- {
- "id": 11,
- "target_branch": "test-15",
- "source_branch": "'test'",
- "source_project_id": 5,
- "author_id": 16,
- "assignee_id": 16,
- "title": "Corporis provident similique perspiciatis dolores eos animi.",
- "created_at": "2016-06-14T15:02:23.767Z",
- "updated_at": "2016-06-14T15:03:00.475Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 3,
- "description": "Libero nesciunt mollitia quis odit eos vero quasi. Iure voluptatem ut sint pariatur voluptates ut aut. Laborum possimus unde illum ipsum eum.",
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 809,
- "note": "Omnis ratione laboriosam dolores qui.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:03:00.260Z",
- "updated_at": "2016-06-14T15:03:00.260Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 810,
- "note": "Voluptas voluptates pariatur dolores maxime est voluptas.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:03:00.290Z",
- "updated_at": "2016-06-14T15:03:00.290Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 811,
- "note": "Sit perspiciatis facilis ipsum consequatur.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:03:00.323Z",
- "updated_at": "2016-06-14T15:03:00.323Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 812,
- "note": "Ut neque aliquam nam et est.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:03:00.349Z",
- "updated_at": "2016-06-14T15:03:00.349Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 813,
- "note": "Et debitis rerum minima sit aut dolorem.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:03:00.374Z",
- "updated_at": "2016-06-14T15:03:00.374Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 814,
- "note": "Ea nisi earum fugit iste aperiam consequatur.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:03:00.397Z",
- "updated_at": "2016-06-14T15:03:00.397Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 815,
- "note": "Amet ratione consequatur laudantium rerum voluptas est nobis.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:03:00.450Z",
- "updated_at": "2016-06-14T15:03:00.450Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 816,
- "note": "Ab ducimus cumque quia dolorem vitae sint beatae rerum.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:03:00.474Z",
- "updated_at": "2016-06-14T15:03:00.474Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 11,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 11,
- "state": "empty",
- "merge_request_diff_commits": [],
- "merge_request_diff_files": [],
- "merge_request_id": 11,
- "created_at": "2016-06-14T15:02:23.772Z",
- "updated_at": "2016-06-14T15:02:23.833Z",
- "base_commit_sha": "e56497bb5f03a90a51293fc6d516788730953899",
- "real_size": null
- },
- "events": [
- {
- "id": 227,
- "target_type": "MergeRequest",
- "target_id": 11,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:23.865Z",
- "updated_at": "2016-06-14T15:02:23.865Z",
- "action": 1,
- "author_id": 16
- },
- {
- "id": 171,
- "target_type": "MergeRequest",
- "target_id": 11,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:23.865Z",
- "updated_at": "2016-06-14T15:02:23.865Z",
- "action": 1,
- "author_id": 16
- }
- ]
- },
- {
- "id": 10,
- "target_branch": "feature",
- "source_branch": "test-5",
- "source_project_id": 5,
- "author_id": 20,
- "assignee_id": 25,
- "title": "Eligendi reprehenderit doloribus quia et sit id.",
- "created_at": "2016-06-14T15:02:23.014Z",
- "updated_at": "2016-06-14T15:03:00.685Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 2,
- "description": "Ut dolor quia aliquid dolore et nisi. Est minus suscipit enim quaerat sapiente consequatur rerum. Eveniet provident consequatur dolor accusantium reiciendis.",
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 817,
- "note": "Recusandae et voluptas enim qui et.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:03:00.510Z",
- "updated_at": "2016-06-14T15:03:00.510Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 818,
- "note": "Asperiores dolorem rerum ipsum totam.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:03:00.538Z",
- "updated_at": "2016-06-14T15:03:00.538Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 819,
- "note": "Qui quam et iure quasi provident cumque itaque sequi.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:03:00.562Z",
- "updated_at": "2016-06-14T15:03:00.562Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 820,
- "note": "Sint accusantium aliquid iste qui iusto minus vel.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:03:00.585Z",
- "updated_at": "2016-06-14T15:03:00.585Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 821,
- "note": "Dolor corrupti dolorem blanditiis voluptas.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:03:00.610Z",
- "updated_at": "2016-06-14T15:03:00.610Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 822,
- "note": "Est perferendis assumenda aliquam aliquid sit ipsum ullam aut.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:03:00.635Z",
- "updated_at": "2016-06-14T15:03:00.635Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 823,
- "note": "Hic neque reiciendis quaerat maiores.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:03:00.659Z",
- "updated_at": "2016-06-14T15:03:00.659Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 824,
- "note": "Sequi architecto doloribus ut vel autem.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:03:00.683Z",
- "updated_at": "2016-06-14T15:03:00.683Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 10,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 10,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 10,
- "relative_order": 0,
- "sha": "f998ac87ac9244f15e9c15109a6f4e62a54b779d",
- "message": "fixes #10\n",
- "authored_date": "2016-01-19T14:43:23.000+01:00",
- "author_name": "James Lopez",
- "author_email": "james@jameslopez.es",
- "committed_date": "2016-01-19T14:43:23.000+01:00",
- "committer_name": "James Lopez",
- "committer_email": "james@jameslopez.es"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 1,
- "sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
- "message": "Merge branch 'master' into 'master'\r\n\r\nLFS object pointer.\r\n\r\n\r\n\r\nSee merge request !6",
- "authored_date": "2015-12-07T12:52:12.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "marin@gitlab.com",
- "committed_date": "2015-12-07T12:52:12.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "marin@gitlab.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 2,
- "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
- "message": "LFS object pointer.\n",
- "authored_date": "2015-12-07T11:54:28.000+01:00",
- "author_name": "Marin Jankovski",
- "author_email": "maxlazio@gmail.com",
- "committed_date": "2015-12-07T11:54:28.000+01:00",
- "committer_name": "Marin Jankovski",
- "committer_email": "maxlazio@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 3,
- "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
- "message": "GitLab currently doesn't support patches that involve a merge commit: add a commit here\n",
- "authored_date": "2015-11-13T16:27:12.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T16:27:12.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 4,
- "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
- "message": "Merge branch 'add-svg' into 'master'\r\n\r\nAdd GitLab SVG\r\n\r\nAdded to test preview of sanitized SVG images\r\n\r\nSee merge request !5",
- "authored_date": "2015-11-13T08:50:17.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:50:17.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 5,
- "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
- "message": "Add GitLab SVG\n",
- "authored_date": "2015-11-13T08:39:43.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T08:39:43.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 6,
- "sha": "59e29889be61e6e0e5e223bfa9ac2721d31605b8",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd whitespace test file\r\n\r\nSorry, I did a mistake.\r\nGit ignore empty files.\r\nSo I add a new whitespace test file.\r\n\r\nSee merge request !4",
- "authored_date": "2015-11-13T07:21:40.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T07:21:40.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 7,
- "sha": "66eceea0db202bb39c4e445e8ca28689645366c5",
- "message": "add spaces in whitespace file\n",
- "authored_date": "2015-11-13T06:01:27.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:01:27.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 8,
- "sha": "08f22f255f082689c0d7d39d19205085311542bc",
- "message": "remove empty file.(beacase git ignore empty file)\nadd whitespace test file.\n",
- "authored_date": "2015-11-13T06:00:16.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T06:00:16.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 9,
- "sha": "19e2e9b4ef76b422ce1154af39a91323ccc57434",
- "message": "Merge branch 'whitespace' into 'master'\r\n\r\nadd spaces\r\n\r\nTo test this pull request.(https://github.com/gitlabhq/gitlabhq/pull/9757)\r\nJust add whitespaces.\r\n\r\nSee merge request !3",
- "authored_date": "2015-11-13T05:23:14.000+01:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@gmail.com",
- "committed_date": "2015-11-13T05:23:14.000+01:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 10,
- "sha": "c642fe9b8b9f28f9225d7ea953fe14e74748d53b",
- "message": "add whitespace in empty\n",
- "authored_date": "2015-11-13T05:08:45.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:45.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 11,
- "sha": "9a944d90955aaf45f6d0c88f30e27f8d2c41cec0",
- "message": "add empty file\n",
- "authored_date": "2015-11-13T05:08:04.000+01:00",
- "author_name": "윤민ì‹",
- "author_email": "minsik.yoon@samsung.com",
- "committed_date": "2015-11-13T05:08:04.000+01:00",
- "committer_name": "윤민ì‹",
- "committer_email": "minsik.yoon@samsung.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 12,
- "sha": "c7fbe50c7c7419d9701eebe64b1fdacc3df5b9dd",
- "message": "Add ISO-8859 test file\n",
- "authored_date": "2015-08-25T17:53:12.000+02:00",
- "author_name": "Stan Hu",
- "author_email": "stanhu@packetzoom.com",
- "committed_date": "2015-08-25T17:53:12.000+02:00",
- "committer_name": "Stan Hu",
- "committer_email": "stanhu@packetzoom.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 13,
- "sha": "e56497bb5f03a90a51293fc6d516788730953899",
- "message": "Merge branch 'tree_helper_spec' into 'master'\n\nAdd directory structure for tree_helper spec\n\nThis directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module\n\nSee [merge request #275](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/275#note_732774)\n\nSee merge request !2\n",
- "authored_date": "2015-01-10T22:23:29.000+01:00",
- "author_name": "Sytse Sijbrandij",
- "author_email": "sytse@gitlab.com",
- "committed_date": "2015-01-10T22:23:29.000+01:00",
- "committer_name": "Sytse Sijbrandij",
- "committer_email": "sytse@gitlab.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 14,
- "sha": "4cd80ccab63c82b4bad16faa5193fbd2aa06df40",
- "message": "add directory structure for tree_helper spec\n",
- "authored_date": "2015-01-10T21:28:18.000+01:00",
- "author_name": "marmis85",
- "author_email": "marmis85@gmail.com",
- "committed_date": "2015-01-10T21:28:18.000+01:00",
- "committer_name": "marmis85",
- "committer_email": "marmis85@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 16,
- "sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
- "message": "Add submodule from gitlab.com\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T10:01:38.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T10:01:38.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 17,
- "sha": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
- "message": "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:57:31.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:57:31.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 18,
- "sha": "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9",
- "message": "More submodules\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:54:21.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:54:21.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 19,
- "sha": "d14d6c0abdd253381df51a723d58691b2ee1ab08",
- "message": "Remove ds_store files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:49:50.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:49:50.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 20,
- "sha": "c1acaa58bbcbc3eafe538cb8274ba387047b69f8",
- "message": "Ignore DS files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
- "authored_date": "2014-02-27T09:48:32.000+01:00",
- "author_name": "Dmitriy Zaporozhets",
- "author_email": "dmitriy.zaporozhets@gmail.com",
- "committed_date": "2014-02-27T09:48:32.000+01:00",
- "committer_name": "Dmitriy Zaporozhets",
- "committer_email": "dmitriy.zaporozhets@gmail.com"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 10,
- "relative_order": 0,
- "utf8_diff": "Binary files a/.DS_Store and /dev/null differ\n",
- "new_path": ".DS_Store",
- "old_path": ".DS_Store",
- "a_mode": "100644",
- "b_mode": "0",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": true,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 1,
- "utf8_diff": "--- a/.gitignore\n+++ b/.gitignore\n@@ -17,3 +17,4 @@ rerun.txt\n pickle-email-*.html\n .project\n config/initializers/secret_token.rb\n+.DS_Store\n",
- "new_path": ".gitignore",
- "old_path": ".gitignore",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 2,
- "utf8_diff": "--- a/.gitmodules\n+++ b/.gitmodules\n@@ -1,3 +1,9 @@\n [submodule \"six\"]\n \tpath = six\n \turl = git://github.com/randx/six.git\n+[submodule \"gitlab-shell\"]\n+\tpath = gitlab-shell\n+\turl = https://github.com/gitlabhq/gitlab-shell.git\n+[submodule \"gitlab-grack\"]\n+\tpath = gitlab-grack\n+\turl = https://gitlab.com/gitlab-org/gitlab-grack.git\n",
- "new_path": ".gitmodules",
- "old_path": ".gitmodules",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 3,
- "utf8_diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
- "new_path": "CHANGELOG",
- "old_path": "CHANGELOG",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 4,
- "utf8_diff": "--- /dev/null\n+++ b/encoding/iso8859.txt\n@@ -0,0 +1 @@\n+Äü\n",
- "new_path": "encoding/iso8859.txt",
- "old_path": "encoding/iso8859.txt",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 5,
- "utf8_diff": "Binary files a/files/.DS_Store and /dev/null differ\n",
- "new_path": "files/.DS_Store",
- "old_path": "files/.DS_Store",
- "a_mode": "100644",
- "b_mode": "0",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": true,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 6,
- "utf8_diff": "--- /dev/null\n+++ b/files/images/wm.svg\n@@ -0,0 +1,78 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<svg width=\"1300px\" height=\"680px\" viewBox=\"0 0 1300 680\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n+ <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->\n+ <title>wm</title>\n+ <desc>Created with Sketch.</desc>\n+ <defs>\n+ <path id=\"path-1\" d=\"M-69.8,1023.54607 L1675.19996,1023.54607 L1675.19996,0 L-69.8,0 L-69.8,1023.54607 L-69.8,1023.54607 Z\"></path>\n+ </defs>\n+ <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n+ <path d=\"M1300,680 L0,680 L0,0 L1300,0 L1300,680 L1300,680 Z\" id=\"bg\" fill=\"#30353E\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"gitlab_logo\" sketch:type=\"MSLayerGroup\" transform=\"translate(-262.000000, -172.000000)\">\n+ <g id=\"g10\" transform=\"translate(872.500000, 512.354581) scale(1, -1) translate(-872.500000, -512.354581) translate(0.000000, 0.290751)\">\n+ <g id=\"g12\" transform=\"translate(1218.022652, 440.744871)\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\">\n+ <path d=\"M-50.0233338,141.900706 L-69.07059,141.900706 L-69.0100967,0.155858152 L8.04444805,0.155858152 L8.04444805,17.6840847 L-49.9628405,17.6840847 L-50.0233338,141.900706 L-50.0233338,141.900706 Z\" id=\"path14\"></path>\n+ </g>\n+ <g id=\"g16\">\n+ <g id=\"g18-Clipped\">\n+ <mask id=\"mask-2\" sketch:name=\"path22\" fill=\"white\">\n+ <use xlink:href=\"#path-1\"></use>\n+ </mask>\n+ <g id=\"path22\"></g>\n+ <g id=\"g18\" mask=\"url(#mask-2)\">\n+ <g transform=\"translate(382.736659, 312.879425)\">\n+ <g id=\"g24\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(852.718192, 124.992771)\">\n+ <path d=\"M63.9833317,27.9148929 C59.2218085,22.9379001 51.2134221,17.9597442 40.3909323,17.9597442 C25.8888194,17.9597442 20.0453962,25.1013043 20.0453962,34.4074318 C20.0453962,48.4730484 29.7848226,55.1819277 50.5642821,55.1819277 C54.4602853,55.1819277 60.7364685,54.7492469 63.9833317,54.1002256 L63.9833317,27.9148929 L63.9833317,27.9148929 Z M44.2869356,113.827628 C28.9053426,113.827628 14.7975996,108.376082 3.78897657,99.301416 L10.5211864,87.6422957 C18.3131929,92.1866076 27.8374026,96.7320827 41.4728323,96.7320827 C57.0568452,96.7320827 63.9833317,88.7239978 63.9833317,75.3074024 L63.9833317,68.3821827 C60.9528485,69.0312039 54.6766653,69.4650479 50.7806621,69.4650479 C17.4476729,69.4650479 0.565379986,57.7791759 0.565379986,33.3245665 C0.565379986,11.4683685 13.9844297,0.43151772 34.3299658,0.43151772 C48.0351955,0.43151772 61.1692285,6.70771614 65.7143717,16.8780421 L69.1776149,3.02876588 L82.5978279,3.02876588 L82.5978279,75.5237428 C82.5978279,98.462806 72.6408582,113.827628 44.2869356,113.827628 L44.2869356,113.827628 Z\" id=\"path26\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g28\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(959.546624, 124.857151)\">\n+ <path d=\"M37.2266657,17.4468081 C30.0837992,17.4468081 23.8064527,18.3121698 19.0449295,20.4767371 L19.0449295,79.2306079 L19.0449295,86.0464943 C25.538656,91.457331 33.5470425,95.3526217 43.7203922,95.3526217 C62.1173451,95.3526217 69.2602116,82.3687072 69.2602116,61.3767077 C69.2602116,31.5135879 57.7885819,17.4468081 37.2266657,17.4468081 M45.2315622,113.963713 C28.208506,113.963713 19.0449295,102.384849 19.0449295,102.384849 L19.0449295,120.67143 L18.9844362,144.908535 L10.3967097,144.908535 L0.371103324,144.908535 L0.431596656,6.62629771 C9.73826309,2.73100702 22.5081728,0.567602823 36.3611458,0.567602823 C71.8579349,0.567602823 88.9566078,23.2891625 88.9566078,62.4584098 C88.9566078,93.4043948 73.1527248,113.963713 45.2315622,113.963713\" id=\"path30\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g32\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(509.576747, 125.294950)\">\n+ <path d=\"M68.636665,129.10638 C85.5189579,129.10638 96.3414476,123.480366 103.484314,117.853189 L111.669527,132.029302 C100.513161,141.811145 85.5073245,147.06845 69.5021849,147.06845 C29.0274926,147.06845 0.673569983,122.3975 0.673569983,72.6252464 C0.673569983,20.4709215 31.2622559,0.12910638 66.2553217,0.12910638 C83.7879179,0.12910638 98.7227909,4.24073748 108.462217,8.35236859 L108.063194,64.0763105 L108.063194,70.6502677 L108.063194,81.6057001 L56.1168719,81.6057001 L56.1168719,64.0763105 L89.2323178,64.0763105 L89.6313411,21.7701271 C85.3025779,19.6055598 77.7269514,17.8748364 67.554765,17.8748364 C39.4172223,17.8748364 20.5863462,35.5717154 20.5863462,72.8415868 C20.5863462,110.711628 40.0663623,129.10638 68.636665,129.10638\" id=\"path34\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g36\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(692.388992, 124.376085)\">\n+ <path d=\"M19.7766662,145.390067 L1.16216997,145.390067 L1.2226633,121.585642 L1.2226633,111.846834 L1.2226633,106.170806 L1.2226633,96.2656714 L1.2226633,39.5681976 L1.2226633,39.3518572 C1.2226633,16.4127939 11.1796331,1.04797161 39.5335557,1.04797161 C43.4504989,1.04797161 47.2836822,1.40388649 51.0051854,2.07965952 L51.0051854,18.7925385 C48.3109055,18.3796307 45.4351455,18.1446804 42.3476589,18.1446804 C26.763646,18.1446804 19.8371595,26.1516022 19.8371595,39.5681976 L19.8371595,96.2656714 L51.0051854,96.2656714 L51.0051854,111.846834 L19.8371595,111.846834 L19.7766662,145.390067 L19.7766662,145.390067 Z\" id=\"path38\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <path d=\"M646.318899,128.021188 L664.933395,128.021188 L664.933395,236.223966 L646.318899,236.223966 L646.318899,128.021188 L646.318899,128.021188 Z\" id=\"path40\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <path d=\"M646.318899,251.154944 L664.933395,251.154944 L664.933395,269.766036 L646.318899,269.766036 L646.318899,251.154944 L646.318899,251.154944 Z\" id=\"path42\" fill=\"#8C929D\" sketch:type=\"MSShapeGroup\"></path>\n+ <g id=\"g44\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.464170, 0.676006)\">\n+ <path d=\"M429.269989,169.815599 L405.225053,243.802859 L357.571431,390.440955 C355.120288,397.984955 344.444378,397.984955 341.992071,390.440955 L294.337286,243.802859 L136.094873,243.802859 L88.4389245,390.440955 C85.9877812,397.984955 75.3118715,397.984955 72.8595648,390.440955 L25.2059427,243.802859 L1.16216997,169.815599 C-1.03187664,163.067173 1.37156997,155.674379 7.11261982,151.503429 L215.215498,0.336141836 L423.319539,151.503429 C429.060589,155.674379 431.462873,163.067173 429.269989,169.815599\" id=\"path46\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g48\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(135.410135, 1.012147)\">\n+ <path d=\"M80.269998,0 L80.269998,0 L159.391786,243.466717 L1.14820997,243.466717 L80.269998,0 L80.269998,0 Z\" id=\"path50\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g52\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path54\"></g>\n+ </g>\n+ <g id=\"g56\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(24.893471, 1.012613)\">\n+ <path d=\"M190.786662,0 L111.664874,243.465554 L0.777106647,243.465554 L190.786662,0 L190.786662,0 Z\" id=\"path58\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g60\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <g id=\"path62\"></g>\n+ </g>\n+ <g id=\"g64\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(0.077245, 0.223203)\">\n+ <path d=\"M25.5933327,244.255313 L25.5933327,244.255313 L1.54839663,170.268052 C-0.644486651,163.519627 1.75779662,156.126833 7.50000981,151.957046 L215.602888,0.789758846 L25.5933327,244.255313 L25.5933327,244.255313 Z\" id=\"path66\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g68\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012147)\">\n+ <g id=\"path70\"></g>\n+ </g>\n+ <g id=\"g72\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(25.670578, 244.478283)\">\n+ <path d=\"M0,0 L110.887767,0 L63.2329818,146.638096 C60.7806751,154.183259 50.1047654,154.183259 47.6536221,146.638096 L0,0 L0,0 Z\" id=\"path74\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g76\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(215.680133, 1.012613)\">\n+ <path d=\"M0,0 L79.121788,243.465554 L190.009555,243.465554 L0,0 L0,0 Z\" id=\"path78\" fill=\"#FC6D26\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g80\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(214.902910, 0.223203)\">\n+ <path d=\"M190.786662,244.255313 L190.786662,244.255313 L214.831598,170.268052 C217.024481,163.519627 214.622198,156.126833 208.879985,151.957046 L0.777106647,0.789758846 L190.786662,244.255313 L190.786662,244.255313 Z\" id=\"path82\" fill=\"#FCA326\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ <g id=\"g84\" stroke-width=\"1\" fill=\"none\" sketch:type=\"MSLayerGroup\" transform=\"translate(294.009575, 244.478283)\">\n+ <path d=\"M111.679997,0 L0.79222998,0 L48.4470155,146.638096 C50.8993221,154.183259 61.5752318,154.183259 64.0263751,146.638096 L111.679997,0 L111.679997,0 Z\" id=\"path86\" fill=\"#E24329\" sketch:type=\"MSShapeGroup\"></path>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+ </g>\n+</svg>\n\\ No newline at end of file\n",
- "new_path": "files/images/wm.svg",
- "old_path": "files/images/wm.svg",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 7,
- "utf8_diff": "--- /dev/null\n+++ b/files/lfs/lfs_object.iso\n@@ -0,0 +1,4 @@\n+version https://git-lfs.github.com/spec/v1\n+oid sha256:91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897\n+size 1575078\n+\n",
- "new_path": "files/lfs/lfs_object.iso",
- "old_path": "files/lfs/lfs_object.iso",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 8,
- "utf8_diff": "--- a/files/ruby/popen.rb\n+++ b/files/ruby/popen.rb\n@@ -6,12 +6,18 @@ module Popen\n \n def popen(cmd, path=nil)\n unless cmd.is_a?(Array)\n- raise \"System commands must be given as an array of strings\"\n+ raise RuntimeError, \"System commands must be given as an array of strings\"\n end\n \n path ||= Dir.pwd\n- vars = { \"PWD\" => path }\n- options = { chdir: path }\n+\n+ vars = {\n+ \"PWD\" => path\n+ }\n+\n+ options = {\n+ chdir: path\n+ }\n \n unless File.directory?(path)\n FileUtils.mkdir_p(path)\n@@ -19,6 +25,7 @@ module Popen\n \n @cmd_output = \"\"\n @cmd_status = 0\n+\n Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|\n @cmd_output << stdout.read\n @cmd_output << stderr.read\n",
- "new_path": "files/ruby/popen.rb",
- "old_path": "files/ruby/popen.rb",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 9,
- "utf8_diff": "--- a/files/ruby/regex.rb\n+++ b/files/ruby/regex.rb\n@@ -19,14 +19,12 @@ module Gitlab\n end\n \n def archive_formats_regex\n- #|zip|tar| tar.gz | tar.bz2 |\n- /(zip|tar|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n+ /(zip|tar|7z|tar\\.gz|tgz|gz|tar\\.bz2|tbz|tbz2|tb2|bz2)/\n end\n \n def git_reference_regex\n # Valid git ref regex, see:\n # https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html\n-\n %r{\n (?!\n (?# doesn't begins with)\n",
- "new_path": "files/ruby/regex.rb",
- "old_path": "files/ruby/regex.rb",
- "a_mode": "100644",
- "b_mode": "100644",
- "new_file": false,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 10,
- "utf8_diff": "--- /dev/null\n+++ b/files/whitespace\n@@ -0,0 +1 @@\n+test \n",
- "new_path": "files/whitespace",
- "old_path": "files/whitespace",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 11,
- "utf8_diff": "--- /dev/null\n+++ b/foo/bar/.gitkeep\n",
- "new_path": "foo/bar/.gitkeep",
- "old_path": "foo/bar/.gitkeep",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 12,
- "utf8_diff": "--- /dev/null\n+++ b/gitlab-grack\n@@ -0,0 +1 @@\n+Subproject commit 645f6c4c82fd3f5e06f67134450a570b795e55a6\n",
- "new_path": "gitlab-grack",
- "old_path": "gitlab-grack",
- "a_mode": "0",
- "b_mode": "160000",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 13,
- "utf8_diff": "--- /dev/null\n+++ b/gitlab-shell\n@@ -0,0 +1 @@\n+Subproject commit 79bceae69cb5750d6567b223597999bfa91cb3b9\n",
- "new_path": "gitlab-shell",
- "old_path": "gitlab-shell",
- "a_mode": "0",
- "b_mode": "160000",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- },
- {
- "merge_request_diff_id": 10,
- "relative_order": 14,
- "utf8_diff": "--- /dev/null\n+++ b/test\n",
- "new_path": "test",
- "old_path": "test",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 10,
- "created_at": "2016-06-14T15:02:23.019Z",
- "updated_at": "2016-06-14T15:02:23.493Z",
- "base_commit_sha": "ae73cb07c9eeaf35924a10f713b364d32b2dd34f",
- "real_size": "15"
- },
- "events": [
- {
- "id": 228,
- "target_type": "MergeRequest",
- "target_id": 10,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:23.660Z",
- "updated_at": "2016-06-14T15:02:23.660Z",
- "action": 1,
- "author_id": 1
- },
- {
- "id": 170,
- "target_type": "MergeRequest",
- "target_id": 10,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:23.660Z",
- "updated_at": "2016-06-14T15:02:23.660Z",
- "action": 1,
- "author_id": 20
- }
- ]
- },
- {
- "id": 9,
- "target_branch": "test-6",
- "source_branch": "test-12",
- "source_project_id": 5,
- "author_id": 16,
- "assignee_id": 6,
- "title": "Et ipsam voluptas velit sequi illum ut.",
- "created_at": "2016-06-14T15:02:22.825Z",
- "updated_at": "2016-06-14T15:03:00.904Z",
- "state": "opened",
- "merge_status": "unchecked",
- "target_project_id": 5,
- "iid": 1,
- "description": "Eveniet nihil ratione veniam similique qui aut sapiente tempora. Sed praesentium iusto dignissimos possimus id repudiandae quo nihil. Qui doloremque autem et iure fugit.",
- "position": 0,
- "updated_by_id": null,
- "merge_error": null,
- "merge_params": {
- "force_remove_source_branch": null
- },
- "merge_when_pipeline_succeeds": false,
- "merge_user_id": null,
- "merge_commit_sha": null,
- "notes": [
- {
- "id": 825,
- "note": "Aliquid voluptatem consequatur voluptas ex perspiciatis.",
- "noteable_type": "MergeRequest",
- "author_id": 26,
- "created_at": "2016-06-14T15:03:00.722Z",
- "updated_at": "2016-06-14T15:03:00.722Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 4"
- },
- "events": []
- },
- {
- "id": 826,
- "note": "Itaque optio voluptatem praesentium voluptas.",
- "noteable_type": "MergeRequest",
- "author_id": 25,
- "created_at": "2016-06-14T15:03:00.745Z",
- "updated_at": "2016-06-14T15:03:00.745Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 3"
- },
- "events": []
- },
- {
- "id": 827,
- "note": "Ut est corporis fuga asperiores delectus excepturi aperiam.",
- "noteable_type": "MergeRequest",
- "author_id": 22,
- "created_at": "2016-06-14T15:03:00.771Z",
- "updated_at": "2016-06-14T15:03:00.771Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "User 0"
- },
- "events": []
- },
- {
- "id": 828,
- "note": "Similique ea dolore officiis temporibus.",
- "noteable_type": "MergeRequest",
- "author_id": 20,
- "created_at": "2016-06-14T15:03:00.798Z",
- "updated_at": "2016-06-14T15:03:00.798Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ottis Schuster II"
- },
- "events": []
- },
- {
- "id": 829,
- "note": "Qui laudantium qui quae quis.",
- "noteable_type": "MergeRequest",
- "author_id": 16,
- "created_at": "2016-06-14T15:03:00.828Z",
- "updated_at": "2016-06-14T15:03:00.828Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Rhett Emmerich IV"
- },
- "events": []
- },
- {
- "id": 830,
- "note": "Et vel voluptas amet laborum qui soluta.",
- "noteable_type": "MergeRequest",
- "author_id": 15,
- "created_at": "2016-06-14T15:03:00.850Z",
- "updated_at": "2016-06-14T15:03:00.850Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Burdette Bernier"
- },
- "events": []
- },
- {
- "id": 831,
- "note": "Enim ad consequuntur assumenda provident voluptatem similique deleniti.",
- "noteable_type": "MergeRequest",
- "author_id": 6,
- "created_at": "2016-06-14T15:03:00.876Z",
- "updated_at": "2016-06-14T15:03:00.876Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Ari Wintheiser"
- },
- "events": []
- },
- {
- "id": 832,
- "note": "Officiis sequi commodi pariatur totam fugiat voluptas corporis dignissimos.",
- "noteable_type": "MergeRequest",
- "author_id": 1,
- "created_at": "2016-06-14T15:03:00.902Z",
- "updated_at": "2016-06-14T15:03:00.902Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": null,
- "noteable_id": 9,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- },
- "events": []
- }
- ],
- "merge_request_diff": {
- "id": 9,
- "state": "collected",
- "merge_request_diff_commits": [
- {
- "merge_request_diff_id": 9,
- "relative_order": 0,
- "sha": "a4e5dfebf42e34596526acb8611bc7ed80e4eb3f",
- "message": "fixes #10\n",
- "authored_date": "2016-01-19T15:44:02.000+01:00",
- "author_name": "James Lopez",
- "author_email": "james@jameslopez.es",
- "committed_date": "2016-01-19T15:44:02.000+01:00",
- "committer_name": "James Lopez",
- "committer_email": "james@jameslopez.es"
- }
- ],
- "merge_request_diff_files": [
- {
- "merge_request_diff_id": 9,
- "relative_order": 0,
- "utf8_diff": "--- /dev/null\n+++ b/test\n",
- "new_path": "test",
- "old_path": "test",
- "a_mode": "0",
- "b_mode": "100644",
- "new_file": true,
- "renamed_file": false,
- "deleted_file": false,
- "too_large": false
- }
- ],
- "merge_request_id": 9,
- "created_at": "2016-06-14T15:02:22.829Z",
- "updated_at": "2016-06-14T15:02:22.900Z",
- "base_commit_sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
- "real_size": "1"
- },
- "events": [
- {
- "id": 229,
- "target_type": "MergeRequest",
- "target_id": 9,
- "project_id": 36,
- "created_at": "2016-06-14T15:02:22.927Z",
- "updated_at": "2016-06-14T15:02:22.927Z",
- "action": 1,
- "author_id": 16
- },
- {
- "id": 169,
- "target_type": "MergeRequest",
- "target_id": 9,
- "project_id": 5,
- "created_at": "2016-06-14T15:02:22.927Z",
- "updated_at": "2016-06-14T15:02:22.927Z",
- "action": 1,
- "author_id": 16
- }
- ]
- }
- ],
- "pipelines": [
- {
- "id": 36,
- "project_id": 5,
- "ref": "master",
- "sha": "sha-notes",
- "before_sha": null,
- "push_data": null,
- "created_at": "2016-03-22T15:20:35.755Z",
- "updated_at": "2016-03-22T15:20:35.755Z",
- "tag": null,
- "yaml_errors": null,
- "committed_at": null,
- "status": "failed",
- "started_at": null,
- "finished_at": null,
- "user_id": 9999,
- "duration": null,
- "notes": [
- {
- "id": 999,
- "note": "Natus rerum qui dolorem dolorum voluptas.",
- "noteable_type": "Commit",
- "author_id": 1,
- "created_at": "2016-03-22T15:19:59.469Z",
- "updated_at": "2016-03-22T15:19:59.469Z",
- "project_id": 5,
- "attachment": {
- "url": null
- },
- "line_code": null,
- "commit_id": "be93687618e4b132087f430a4d8fc3a609c9b77c",
- "noteable_id": 36,
- "system": false,
- "st_diff": null,
- "updated_by_id": null,
- "author": {
- "name": "Administrator"
- }
- }
- ],
- "stages": [
- {
- "id": 11,
- "project_id": 5,
- "pipeline_id": 36,
- "name": "test",
- "status": 1,
- "created_at": "2016-03-22T15:44:44.772Z",
- "updated_at": "2016-03-29T06:44:44.634Z",
- "statuses": [
- {
- "id": 71,
- "project_id": 5,
- "status": "failed",
- "finished_at": "2016-03-29T06:28:12.630Z",
- "trace": null,
- "created_at": "2016-03-22T15:20:35.772Z",
- "updated_at": "2016-03-29T06:28:12.634Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 36,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 1",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "stage_id": 11,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null,
- "type": "Ci::Build",
- "token": "abcd",
- "artifacts_file_store": 1,
- "artifacts_metadata_store": 1,
- "artifacts_size": 10
- },
- {
- "id": 72,
- "project_id": 5,
- "status": "success",
- "finished_at": null,
- "trace": "Porro ea qui ut dolores. Labore ab nemo explicabo aspernatur quis voluptates corporis. Et quasi delectus est sit aperiam perspiciatis asperiores. Repudiandae cum aut consectetur accusantium officia sunt.\n\nQuidem dolore iusto quaerat ut aut inventore et molestiae. Libero voluptates atque nemo qui. Nulla temporibus ipsa similique facere.\n\nAliquam ipsam perferendis qui fugit accusantium omnis id voluptatum. Dignissimos aliquid dicta eos voluptatem assumenda quia. Sed autem natus unde dolor et non nisi et. Consequuntur nihil consequatur rerum est.\n\nSimilique neque est iste ducimus qui fuga cupiditate. Libero autem est aut fuga. Consectetur natus quis non ducimus ut dolore. Magni voluptatibus eius et maxime aut.\n\nAd officiis tempore voluptate vitae corrupti explicabo labore est. Consequatur expedita et sunt nihil aut. Deleniti porro iusto molestiae et beatae.\n\nDeleniti modi nulla qui et labore sequi corrupti. Qui voluptatem assumenda eum cupiditate et. Nesciunt ipsam ut ea possimus eum. Consectetur quidem suscipit atque dolore itaque voluptatibus et cupiditate.",
- "created_at": "2016-03-22T15:20:35.777Z",
- "updated_at": "2016-03-22T15:20:35.777Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 36,
- "commands": "$ deploy command",
- "job_id": null,
- "name": "test build 2",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "deploy",
- "trigger_request_id": null,
- "stage_idx": 1,
- "stage_id": 12,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- }
- ]
- },
- {
- "id": 12,
- "project_id": 5,
- "pipeline_id": 36,
- "name": "deploy",
- "status": 2,
- "created_at": "2016-03-22T15:45:45.772Z",
- "updated_at": "2016-03-29T06:45:45.634Z"
- }
- ]
- },
- {
- "id": 37,
- "project_id": 5,
- "ref": null,
- "sha": "048721d90c449b244b7b4c53a9186b04330174ec",
- "before_sha": null,
- "push_data": null,
- "created_at": "2016-03-22T15:20:35.757Z",
- "updated_at": "2016-03-22T15:20:35.757Z",
- "tag": null,
- "yaml_errors": null,
- "committed_at": null,
- "status": "failed",
- "started_at": null,
- "finished_at": null,
- "duration": null,
- "stages": [
- {
- "id": 21,
- "project_id": 5,
- "pipeline_id": 37,
- "name": "test",
- "status": 1,
- "created_at": "2016-03-22T15:44:44.772Z",
- "updated_at": "2016-03-29T06:44:44.634Z",
- "statuses": [
- {
- "id": 74,
- "project_id": 5,
- "status": "success",
- "finished_at": null,
- "trace": "Ad ut quod repudiandae iste dolor doloribus. Adipisci consequuntur deserunt omnis quasi eveniet et sed fugit. Aut nemo omnis molestiae impedit ex consequatur ducimus. Voluptatum exercitationem quia aut est et hic dolorem.\n\nQuasi repellendus et eaque magni eum facilis. Dolorem aperiam nam nihil pariatur praesentium ad aliquam. Commodi enim et eos tenetur. Odio voluptatibus laboriosam mollitia rerum exercitationem magnam consequuntur. Tenetur ea vel eum corporis.\n\nVoluptatibus optio in aliquid est voluptates. Ad a ut ab placeat vero blanditiis. Earum aspernatur quia beatae expedita voluptatem dignissimos provident. Quis minima id nemo ut aut est veritatis provident.\n\nRerum voluptatem quidem eius maiores magnam veniam. Voluptatem aperiam aut voluptate et nulla deserunt voluptas. Quaerat aut accusantium laborum est dolorem architecto reiciendis. Aliquam asperiores doloribus omnis maxime enim nesciunt. Eum aut rerum repellendus debitis et ut eius.\n\nQuaerat assumenda ea sit consequatur autem in. Cum eligendi voluptatem quo sed. Ut fuga iusto cupiditate autem sint.\n\nOfficia totam officiis architecto corporis molestiae amet ut. Tempora sed dolorum rerum omnis voluptatem accusantium sit eum. Quia debitis ipsum quidem aliquam inventore sunt consequatur qui.",
- "created_at": "2016-03-22T15:20:35.846Z",
- "updated_at": "2016-03-22T15:20:35.846Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 37,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 2",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- },
- {
- "id": 73,
- "project_id": 5,
- "status": "canceled",
- "finished_at": null,
- "trace": null,
- "created_at": "2016-03-22T15:20:35.842Z",
- "updated_at": "2016-03-22T15:20:35.842Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 37,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 1",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- }
- ]
- }
- ]
- },
- {
- "id": 38,
- "iid": 1,
- "project_id": 5,
- "ref": "master",
- "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
- "before_sha": null,
- "push_data": null,
- "created_at": "2016-03-22T15:20:35.759Z",
- "updated_at": "2016-03-22T15:20:35.759Z",
- "tag": null,
- "yaml_errors": null,
- "committed_at": null,
- "status": "failed",
- "started_at": null,
- "finished_at": null,
- "duration": null,
- "stages": [
- {
- "id": 22,
- "project_id": 5,
- "pipeline_id": 38,
- "name": "test",
- "status": 1,
- "created_at": "2016-03-22T15:44:44.772Z",
- "updated_at": "2016-03-29T06:44:44.634Z",
- "statuses": [
- {
- "id": 76,
- "project_id": 5,
- "status": "success",
- "finished_at": null,
- "trace": "Et rerum quia ea cumque ut modi non. Libero eaque ipsam architecto maiores expedita deleniti. Ratione quia qui est id.\n\nQuod sit officiis sed unde inventore veniam quisquam velit. Ea harum cum quibusdam quisquam minima quo possimus non. Temporibus itaque aliquam aut rerum veritatis at.\n\nMagnam ipsum eius recusandae qui quis sit maiores eum. Et animi iusto aut itaque. Doloribus harum deleniti nobis accusantium et libero.\n\nRerum fuga perferendis magni commodi officiis id repudiandae. Consequatur ratione consequatur suscipit facilis sunt iure est dicta. Qui unde quasi facilis et quae nesciunt. Magnam iste et nobis officiis tenetur. Aspernatur quo et temporibus non in.\n\nNisi rerum velit est ad enim sint molestiae consequuntur. Quaerat nisi nesciunt quasi officiis. Possimus non blanditiis laborum quos.\n\nRerum laudantium facere animi qui. Ipsa est iusto magnam nihil. Enim omnis occaecati non dignissimos ut recusandae eum quasi. Qui maxime dolor et nemo voluptates incidunt quia.",
- "created_at": "2016-03-22T15:20:35.882Z",
- "updated_at": "2016-03-22T15:20:35.882Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 38,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 2",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- },
- {
- "id": 75,
- "project_id": 5,
- "status": "failed",
- "finished_at": null,
- "trace": "Sed et iste recusandae dicta corporis. Sunt alias porro fugit sunt. Fugiat omnis nihil dignissimos aperiam explicabo doloremque sit aut. Harum fugit expedita quia rerum ut consequatur laboriosam aliquam.\n\nNatus libero ut ut tenetur earum. Tempora omnis autem omnis et libero dolores illum autem. Deleniti eos sunt mollitia ipsam. Cum dolor repellendus dolorum sequi officia. Ullam sunt in aut pariatur excepturi.\n\nDolor nihil debitis et est eos. Cumque eos eum saepe ducimus autem. Alias architecto consequatur aut pariatur possimus. Aut quos aut incidunt quam velit et. Quas voluptatum ad dolorum dignissimos.\n\nUt voluptates consectetur illo et. Est commodi accusantium vel quo. Eos qui fugiat soluta porro.\n\nRatione possimus alias vel maxime sint totam est repellat. Ipsum corporis eos sint voluptatem eos odit. Temporibus libero nulla harum eligendi labore similique ratione magnam. Suscipit sequi in omnis neque.\n\nLaudantium dolor amet omnis placeat mollitia aut molestiae. Aut rerum similique ipsum quod illo quas unde. Sunt aut veritatis eos omnis porro. Rem veritatis mollitia praesentium dolorem. Consequatur sequi ad cumque earum omnis quia necessitatibus.",
- "created_at": "2016-03-22T15:20:35.864Z",
- "updated_at": "2016-03-22T15:20:35.864Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 38,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 1",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- }
- ]
- }
- ]
- },
- {
- "id": 39,
- "project_id": 5,
- "ref": "master",
- "sha": "d2d430676773caa88cdaf7c55944073b2fd5561a",
- "before_sha": null,
- "push_data": null,
- "created_at": "2016-03-22T15:20:35.761Z",
- "updated_at": "2016-03-22T15:20:35.761Z",
- "tag": null,
- "yaml_errors": null,
- "committed_at": null,
- "status": "failed",
- "started_at": null,
- "finished_at": null,
- "duration": null,
- "stages": [
- {
- "id": 23,
- "project_id": 5,
- "pipeline_id": 39,
- "name": "test",
- "status": 1,
- "created_at": "2016-03-22T15:44:44.772Z",
- "updated_at": "2016-03-29T06:44:44.634Z",
- "statuses": [
- {
- "id": 78,
- "project_id": 5,
- "status": "success",
- "finished_at": null,
- "trace": "Dolorem deserunt quas quia error hic quo cum vel. Natus voluptatem cumque expedita numquam odit. Eos expedita nostrum corporis consequatur est recusandae.\n\nCulpa blanditiis rerum repudiandae alias voluptatem. Velit iusto est ullam consequatur doloribus porro. Corporis voluptas consectetur est veniam et quia quae.\n\nEt aut magni fuga nesciunt officiis molestias. Quaerat et nam necessitatibus qui rerum. Architecto quia officiis voluptatem laborum est recusandae. Quasi ducimus soluta odit necessitatibus labore numquam dignissimos. Quia facere sint temporibus inventore sunt nihil saepe dolorum.\n\nFacere dolores quis dolores a. Est minus nostrum nihil harum. Earum laborum et ipsum unde neque sit nemo. Corrupti est consequatur minima fugit. Illum voluptatem illo error ducimus officia qui debitis.\n\nDignissimos porro a autem harum aut. Aut id reprehenderit et exercitationem. Est et quisquam ipsa temporibus molestiae. Architecto natus dolore qui fugiat incidunt. Autem odit veniam excepturi et voluptatibus culpa ipsum eos.\n\nAmet quo quisquam dignissimos soluta modi dolores. Sint omnis eius optio corporis dolor. Eligendi animi porro quia placeat ut.",
- "created_at": "2016-03-22T15:20:35.927Z",
- "updated_at": "2016-03-22T15:20:35.927Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 39,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 2",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- },
- {
- "id": 77,
- "project_id": 5,
- "status": "failed",
- "finished_at": null,
- "trace": "Rerum ut et suscipit est perspiciatis. Inventore debitis cum eius vitae. Ex incidunt id velit aut quo nisi. Laboriosam repellat deserunt eius reiciendis architecto et. Est harum quos nesciunt nisi consectetur.\n\nAlias esse omnis sint officia est consequatur in nobis. Dignissimos dolorum vel eligendi nesciunt dolores sit. Veniam mollitia ducimus et exercitationem molestiae libero sed. Atque omnis debitis laudantium voluptatibus qui. Repellendus tempore est commodi pariatur.\n\nExpedita voluptate illum est alias non. Modi nesciunt ab assumenda laborum nulla consequatur molestias doloremque. Magnam quod officia vel explicabo accusamus ut voluptatem incidunt. Rerum ut aliquid ullam saepe. Est eligendi debitis beatae blanditiis reiciendis.\n\nQui fuga sit dolores libero maiores et suscipit. Consectetur asperiores omnis minima impedit eos fugiat. Similique omnis nisi sed vero inventore ipsum aliquam exercitationem.\n\nBlanditiis magni iure dolorum omnis ratione delectus molestiae. Atque officia dolor voluptatem culpa quod. Incidunt suscipit quidem possimus veritatis non vel. Iusto aliquid et id quia quasi.\n\nVel facere velit blanditiis incidunt cupiditate sed maiores consequuntur. Quasi quia dicta consequuntur et quia voluptatem iste id. Incidunt et rerum fuga esse sint.",
- "created_at": "2016-03-22T15:20:35.905Z",
- "updated_at": "2016-03-22T15:20:35.905Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 39,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 1",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- }
- ]
- }
- ]
- },
- {
- "id": 40,
- "project_id": 5,
- "ref": "master",
- "sha": "2ea1f3dec713d940208fb5ce4a38765ecb5d3f73",
- "before_sha": null,
- "push_data": null,
- "created_at": "2016-03-22T15:20:35.763Z",
- "updated_at": "2016-03-22T15:20:35.763Z",
- "tag": null,
- "yaml_errors": null,
- "committed_at": null,
- "status": "failed",
- "started_at": null,
- "finished_at": null,
- "duration": null,
- "stages": [
- {
- "id": 24,
- "project_id": 5,
- "pipeline_id": 40,
- "name": "test",
- "status": 1,
- "created_at": "2016-03-22T15:44:44.772Z",
- "updated_at": "2016-03-29T06:44:44.634Z",
- "statuses": [
- {
- "id": 79,
- "project_id": 5,
- "status": "failed",
- "finished_at": "2016-03-29T06:28:12.695Z",
- "trace": "Sed culpa est et facere saepe vel id ab. Quas temporibus aut similique dolorem consequatur corporis aut praesentium. Cum officia molestiae sit earum excepturi.\n\nSint possimus aut ratione quia. Quis nesciunt ratione itaque illo. Tenetur est dolor assumenda possimus voluptatem quia minima. Accusamus reprehenderit ut et itaque non reiciendis incidunt.\n\nRerum suscipit quibusdam dolore nam omnis. Consequatur ipsa nihil ut enim blanditiis delectus. Nulla quis hic occaecati mollitia qui placeat. Quo rerum sed perferendis a accusantium consequatur commodi ut. Sit quae et cumque vel eius tempora nostrum.\n\nUllam dolorem et itaque sint est. Ea molestias quia provident dolorem vitae error et et. Ea expedita officiis iste non. Qui vitae odit saepe illum. Dolores enim ratione deserunt tempore expedita amet non neque.\n\nEligendi asperiores voluptatibus omnis repudiandae expedita distinctio qui aliquid. Autem aut doloremque distinctio ab. Nostrum sapiente repudiandae aspernatur ea et quae voluptas. Officiis perspiciatis nisi laudantium asperiores error eligendi ab. Eius quia amet magni omnis exercitationem voluptatum et.\n\nVoluptatem ullam labore quas dicta est ex voluptas. Pariatur ea modi voluptas consequatur dolores perspiciatis similique. Numquam in distinctio perspiciatis ut qui earum. Quidem omnis mollitia facere aut beatae. Ea est iure et voluptatem.",
- "created_at": "2016-03-22T15:20:35.950Z",
- "updated_at": "2016-03-29T06:28:12.696Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 40,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 1",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- },
- {
- "id": 80,
- "project_id": 5,
- "status": "success",
- "finished_at": null,
- "trace": "Impedit et optio nemo ipsa. Non ad non quis ut sequi laudantium omnis velit. Corporis a enim illo eos. Quia totam tempore inventore ad est.\n\nNihil recusandae cupiditate eaque voluptatem molestias sint. Consequatur id voluptatem cupiditate harum. Consequuntur iusto quaerat reiciendis aut autem libero est. Quisquam dolores veritatis rerum et sint maxime ullam libero. Id quas porro ut perspiciatis rem amet vitae.\n\nNemo inventore minus blanditiis magnam. Modi consequuntur nostrum aut voluptatem ex. Sunt rerum rem optio mollitia qui aliquam officiis officia. Aliquid eos et id aut minus beatae reiciendis.\n\nDolores non in temporibus dicta. Fugiat voluptatem est aspernatur expedita voluptatum nam qui. Quia et eligendi sit quae sint tempore exercitationem eos. Est sapiente corrupti quidem at. Qui magni odio repudiandae saepe tenetur optio dolore.\n\nEos placeat soluta at dolorem adipisci provident. Quo commodi id reprehenderit possimus quo tenetur. Ipsum et quae eligendi laborum. Et qui nesciunt at quasi quidem voluptatem cum rerum. Excepturi non facilis aut sunt vero sed.\n\nQui explicabo ratione ut eligendi recusandae. Quis quasi quas molestiae consequatur voluptatem et voluptatem. Ex repellat saepe occaecati aperiam ea eveniet dignissimos facilis.",
- "created_at": "2016-03-22T15:20:35.966Z",
- "updated_at": "2016-03-22T15:20:35.966Z",
- "started_at": null,
- "runner_id": null,
- "coverage": null,
- "commit_id": 40,
- "commands": "$ build command",
- "job_id": null,
- "name": "test build 2",
- "deploy": false,
- "options": null,
- "allow_failure": false,
- "stage": "test",
- "trigger_request_id": null,
- "stage_idx": 1,
- "tag": null,
- "ref": "master",
- "user_id": null,
- "target_url": null,
- "description": null,
- "erased_by_id": null,
- "erased_at": null
- }
- ]
- }
- ]
- }
- ],
- "triggers": [
- {
- "id": 123,
- "token": "cdbfasdf44a5958c83654733449e585",
- "project_id": 5,
- "owner_id": 1,
- "created_at": "2017-01-16T15:25:28.637Z",
- "updated_at": "2017-01-16T15:25:28.637Z"
- },
- {
- "id": 456,
- "token": "33a66349b5ad01fc00174af87804e40",
- "project_id": 5,
- "created_at": "2017-01-16T15:25:29.637Z",
- "updated_at": "2017-01-16T15:25:29.637Z"
- }
- ],
- "deploy_keys": [],
- "services": [
- {
- "id": 101,
- "title": "YouTrack",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.327Z",
- "updated_at": "2016-06-14T15:01:51.327Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "YoutrackService",
- "category": "issue_tracker",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 100,
- "title": "JetBrains TeamCity CI",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.315Z",
- "updated_at": "2016-06-14T15:01:51.315Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "TeamcityService",
- "category": "ci",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 99,
- "title": "Slack",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.303Z",
- "updated_at": "2016-06-14T15:01:51.303Z",
- "active": false,
- "properties": {
- "notify_only_broken_pipelines": true
- },
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "pipeline_events": true,
- "type": "SlackService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 98,
- "title": "Redmine",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.289Z",
- "updated_at": "2016-06-14T15:01:51.289Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "RedmineService",
- "category": "issue_tracker",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 97,
- "title": "Pushover",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.277Z",
- "updated_at": "2016-06-14T15:01:51.277Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "PushoverService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 96,
- "title": "PivotalTracker",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.267Z",
- "updated_at": "2016-06-14T15:01:51.267Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "PivotalTrackerService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 95,
- "title": "Jira",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.255Z",
- "updated_at": "2016-06-14T15:01:51.255Z",
- "active": false,
- "properties": {
- "api_url": "",
- "jira_issue_transition_id": "2"
- },
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "JiraService",
- "category": "issue_tracker",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 94,
- "title": "Irker (IRC gateway)",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.232Z",
- "updated_at": "2016-06-14T15:01:51.232Z",
- "active": true,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "IrkerService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 93,
- "title": "HipChat",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.219Z",
- "updated_at": "2016-06-14T15:01:51.219Z",
- "active": false,
- "properties": {
- "notify_only_broken_pipelines": true
- },
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "pipeline_events": true,
- "type": "HipchatService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 91,
- "title": "Flowdock",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.182Z",
- "updated_at": "2016-06-14T15:01:51.182Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "FlowdockService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 90,
- "title": "External Wiki",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.166Z",
- "updated_at": "2016-06-14T15:01:51.166Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "ExternalWikiService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 89,
- "title": "Emails on push",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.153Z",
- "updated_at": "2016-06-14T15:01:51.153Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "EmailsOnPushService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 88,
- "title": "Drone CI",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.139Z",
- "updated_at": "2016-06-14T15:01:51.139Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "DroneCiService",
- "category": "ci",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 87,
- "title": "Custom Issue Tracker",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.125Z",
- "updated_at": "2016-06-14T15:01:51.125Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "CustomIssueTrackerService",
- "category": "issue_tracker",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 86,
- "title": "Campfire",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.113Z",
- "updated_at": "2016-06-14T15:01:51.113Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "CampfireService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 84,
- "title": "Buildkite",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.080Z",
- "updated_at": "2016-06-14T15:01:51.080Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "BuildkiteService",
- "category": "ci",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 83,
- "title": "Atlassian Bamboo CI",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.067Z",
- "updated_at": "2016-06-14T15:01:51.067Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "BambooService",
- "category": "ci",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 82,
- "title": "Assembla",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.047Z",
- "updated_at": "2016-06-14T15:01:51.047Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "AssemblaService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 81,
- "title": "Asana",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.031Z",
- "updated_at": "2016-06-14T15:01:51.031Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "type": "AssemblaService",
- "category": "common",
- "default": false,
- "wiki_page_events": true
- },
- {
- "id": 101,
- "title": "JenkinsDeprecated",
- "project_id": 5,
- "created_at": "2016-06-14T15:01:51.031Z",
- "updated_at": "2016-06-14T15:01:51.031Z",
- "active": false,
- "properties": {},
- "template": false,
- "push_events": true,
- "issues_events": true,
- "merge_requests_events": true,
- "tag_push_events": true,
- "note_events": true,
- "job_events": true,
- "category": "common",
- "default": false,
- "wiki_page_events": true,
- "type": "JenkinsDeprecatedService"
- }
- ],
- "hooks": [],
- "protected_branches": [
- {
- "id": 1,
- "project_id": 9,
- "name": "master",
- "created_at": "2016-08-30T07:32:52.426Z",
- "updated_at": "2016-08-30T07:32:52.426Z",
- "merge_access_levels": [
- {
- "id": 1,
- "protected_branch_id": 1,
- "access_level": 40,
- "created_at": "2016-08-30T07:32:52.458Z",
- "updated_at": "2016-08-30T07:32:52.458Z"
- }
- ],
- "push_access_levels": [
- {
- "id": 1,
- "protected_branch_id": 1,
- "access_level": 40,
- "created_at": "2016-08-30T07:32:52.490Z",
- "updated_at": "2016-08-30T07:32:52.490Z"
- }
- ]
- }
- ],
- "protected_tags": [
- {
- "id": 1,
- "project_id": 9,
- "name": "v*",
- "created_at": "2017-04-04T13:48:13.426Z",
- "updated_at": "2017-04-04T13:48:13.426Z",
- "create_access_levels": [
- {
- "id": 1,
- "protected_tag_id": 1,
- "access_level": 40,
- "created_at": "2017-04-04T13:48:13.458Z",
- "updated_at": "2017-04-04T13:48:13.458Z"
- }
- ]
- }
- ],
- "project_feature": {
- "builds_access_level": 0,
- "created_at": "2014-12-26T09:26:45.000Z",
- "id": 2,
- "issues_access_level": 0,
- "merge_requests_access_level": 20,
- "project_id": 4,
- "snippets_access_level": 20,
- "updated_at": "2016-09-23T11:58:28.000Z",
- "wiki_access_level": 20
- },
- "custom_attributes": [
- {
- "id": 1,
- "created_at": "2017-10-19T15:36:23.466Z",
- "updated_at": "2017-10-19T15:36:23.466Z",
- "project_id": 5,
- "key": "foo",
- "value": "foo"
- },
- {
- "id": 2,
- "created_at": "2017-10-19T15:37:21.904Z",
- "updated_at": "2017-10-19T15:37:21.904Z",
- "project_id": 5,
- "key": "bar",
- "value": "bar"
- }
- ],
- "project_badges": [
- {
- "id": 1,
- "created_at": "2017-10-19T15:36:23.466Z",
- "updated_at": "2017-10-19T15:36:23.466Z",
- "project_id": 5,
- "type": "ProjectBadge",
- "link_url": "http://www.example.com",
- "image_url": "http://www.example.com"
- },
- {
- "id": 2,
- "created_at": "2017-10-19T15:36:23.466Z",
- "updated_at": "2017-10-19T15:36:23.466Z",
- "project_id": 5,
- "type": "ProjectBadge",
- "link_url": "http://www.example.com",
- "image_url": "http://www.example.com"
- }
- ],
- "boards": [
- {
- "id": 29,
- "project_id": 49,
- "created_at": "2019-06-06T14:01:06.204Z",
- "updated_at": "2019-06-06T14:22:37.045Z",
- "name": "TestBoardABC",
- "milestone_id": null,
- "group_id": null,
- "weight": null,
- "lists": [
- {
- "id": 59,
- "board_id": 29,
- "label_id": null,
- "list_type": "backlog",
- "position": null,
- "created_at": "2019-06-06T14:01:06.214Z",
- "updated_at": "2019-06-06T14:01:06.214Z",
- "user_id": null,
- "milestone_id": null
- },
- {
- "id": 61,
- "board_id": 29,
- "label_id": 20,
- "list_type": "label",
- "position": 0,
- "created_at": "2019-06-06T14:01:43.197Z",
- "updated_at": "2019-06-06T14:01:43.197Z",
- "user_id": null,
- "milestone_id": null,
- "label": {
- "id": 20,
- "title": "testlabel",
- "color": "#0033CC",
- "project_id": 49,
- "created_at": "2019-06-06T14:01:19.698Z",
- "updated_at": "2019-06-06T14:01:19.698Z",
- "template": false,
- "description": null,
- "group_id": null,
- "type": "ProjectLabel",
- "priorities": []
- }
- },
- {
- "id": 60,
- "board_id": 29,
- "label_id": null,
- "list_type": "closed",
- "position": null,
- "created_at": "2019-06-06T14:01:06.221Z",
- "updated_at": "2019-06-06T14:01:06.221Z",
- "user_id": null,
- "milestone_id": null
- }
- ]
- }
- ]
-}
diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
index 87be7857e67..676973ff5e7 100644
--- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
@@ -2,6 +2,8 @@ require 'spec_helper'
include ImportExport::CommonUtil
describe Gitlab::ImportExport::ProjectTreeRestorer do
+ let(:shared) { project.import_export_shared }
+
describe 'restore project tree' do
before(:context) do
# Using an admin for import, so we can check assignment of existing members
@@ -14,7 +16,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
RSpec::Mocks.with_temporary_scope do
@project = create(:project, :builds_enabled, :issues_disabled, name: 'project', path: 'project')
@shared = @project.import_export_shared
- allow(@shared).to receive(:export_path).and_return('spec/lib/gitlab/import_export/')
+ allow(@shared).to receive(:export_path).and_return('spec/fixtures/lib/gitlab/import_export/')
allow_any_instance_of(Repository).to receive(:fetch_source_branch!).and_return(true)
allow_any_instance_of(Gitlab::Git::Repository).to receive(:branch_exists?).and_return(false)
@@ -94,6 +96,17 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
expect(Ci::Pipeline.where(ref: nil)).not_to be_empty
end
+ it 'restores pipeline for merge request' do
+ pipeline = Ci::Pipeline.find_by_sha('048721d90c449b244b7b4c53a9186b04330174ec')
+
+ expect(pipeline).to be_valid
+ expect(pipeline.tag).to be_falsey
+ expect(pipeline.source).to eq('merge_request_event')
+ expect(pipeline.merge_request.id).to be > 0
+ expect(pipeline.merge_request.target_branch).to eq('feature')
+ expect(pipeline.merge_request.source_branch).to eq('feature_conflict')
+ end
+
it 'preserves updated_at on issues' do
issue = Issue.where(description: 'Aliquam enim illo et possimus.').first
@@ -274,36 +287,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
end
- shared_examples 'restores project successfully' do
- it 'correctly restores project' do
- expect(shared.errors).to be_empty
- expect(restored_project_json).to be_truthy
- end
- end
-
- shared_examples 'restores project correctly' do |**results|
- it 'has labels' do
- expect(project.labels.size).to eq(results.fetch(:labels, 0))
- end
-
- it 'has label priorities' do
- expect(project.labels.find_by(title: 'A project label').priorities).not_to be_empty
- end
-
- it 'has milestones' do
- expect(project.milestones.size).to eq(results.fetch(:milestones, 0))
- end
-
- it 'has issues' do
- expect(project.issues.size).to eq(results.fetch(:issues, 0))
- end
-
- it 'does not set params that are excluded from import_export settings' do
- expect(project.import_type).to be_nil
- expect(project.creator_id).not_to eq 123
- end
- end
-
shared_examples 'restores group correctly' do |**results|
it 'has group label' do
expect(project.group.labels.size).to eq(results.fetch(:labels, 0))
@@ -322,18 +305,17 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
context 'Light JSON' do
let(:user) { create(:user) }
- let(:shared) { project.import_export_shared }
let!(:project) { create(:project, :builds_disabled, :issues_disabled, name: 'project', path: 'project') }
let(:project_tree_restorer) { described_class.new(user: user, shared: shared, project: project) }
let(:restored_project_json) { project_tree_restorer.restore }
before do
- allow(shared).to receive(:export_path).and_return('spec/lib/gitlab/import_export/')
+ allow(shared).to receive(:export_path).and_return('spec/fixtures/lib/gitlab/import_export/')
end
context 'with a simple project' do
before do
- project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.light.json")
+ project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.light.json")
restored_project_json
end
@@ -341,6 +323,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
it_behaves_like 'restores project correctly',
issues: 1,
labels: 2,
+ label_with_priorities: 'A project label',
milestones: 1,
first_issue_labels: 1,
services: 1
@@ -363,7 +346,12 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
create(:ci_build, token: 'abcd')
end
- it_behaves_like 'restores project successfully'
+ it_behaves_like 'restores project correctly',
+ issues: 1,
+ labels: 2,
+ label_with_priorities: 'A project label',
+ milestones: 1,
+ first_issue_labels: 1
end
end
@@ -430,15 +418,15 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
before do
- project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.group.json")
+ project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.group.json")
restored_project_json
end
- it_behaves_like 'restores project successfully'
it_behaves_like 'restores project correctly',
issues: 2,
labels: 2,
+ label_with_priorities: 'A project label',
milestones: 2,
first_issue_labels: 1
@@ -446,6 +434,11 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
labels: 0,
milestones: 0,
first_issue_labels: 1
+
+ it 'restores issue states' do
+ expect(project.issues.with_state(:closed).count).to eq(1)
+ expect(project.issues.with_state(:opened).count).to eq(1)
+ end
end
context 'with existing group models' do
@@ -459,7 +452,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
before do
- project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.light.json")
+ project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.light.json")
end
it 'does not import any templated services' do
@@ -501,7 +494,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
it 'preserves the project milestone IID' do
- project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.milestone-iid.json")
+ project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.milestone-iid.json")
expect_any_instance_of(Gitlab::ImportExport::Shared).not_to receive(:error)
@@ -532,21 +525,21 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
end
- describe '#restored_project' do
+ context 'Minimal JSON' do
let(:project) { create(:project) }
- let(:shared) { project.import_export_shared }
let(:tree_hash) { { 'visibility_level' => visibility } }
let(:restorer) { described_class.new(user: nil, shared: shared, project: project) }
before do
- restorer.instance_variable_set(:@tree_hash, tree_hash)
+ expect(restorer).to receive(:read_tree_hash) { tree_hash }
end
context 'no group visibility' do
let(:visibility) { Gitlab::VisibilityLevel::PRIVATE }
it 'uses the project visibility' do
- expect(restorer.restored_project.visibility_level).to eq(visibility)
+ expect(restorer.restore).to eq(true)
+ expect(restorer.project.visibility_level).to eq(visibility)
end
end
@@ -557,7 +550,8 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
it 'uses private visibility' do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::INTERNAL])
- expect(restorer.restored_project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
+ expect(restorer.restore).to eq(true)
+ expect(restorer.project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
end
end
@@ -574,7 +568,8 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
let(:visibility) { Gitlab::VisibilityLevel::PUBLIC }
it 'uses the group visibility' do
- expect(restorer.restored_project.visibility_level).to eq(group_visibility)
+ expect(restorer.restore).to eq(true)
+ expect(restorer.project.visibility_level).to eq(group_visibility)
end
end
@@ -583,7 +578,8 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
let(:visibility) { Gitlab::VisibilityLevel::PRIVATE }
it 'uses the project visibility' do
- expect(restorer.restored_project.visibility_level).to eq(visibility)
+ expect(restorer.restore).to eq(true)
+ expect(restorer.project.visibility_level).to eq(visibility)
end
end
@@ -592,14 +588,16 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
let(:visibility) { Gitlab::VisibilityLevel::PUBLIC }
it 'uses the group visibility' do
- expect(restorer.restored_project.visibility_level).to eq(group_visibility)
+ expect(restorer.restore).to eq(true)
+ expect(restorer.project.visibility_level).to eq(group_visibility)
end
context 'with restricted internal visibility' do
it 'sets private visibility' do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::INTERNAL])
- expect(restorer.restored_project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
+ expect(restorer.restore).to eq(true)
+ expect(restorer.project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
end
end
diff --git a/spec/lib/gitlab/import_export/relation_factory_spec.rb b/spec/lib/gitlab/import_export/relation_factory_spec.rb
index a31f77484d8..a23e68a8f00 100644
--- a/spec/lib/gitlab/import_export/relation_factory_spec.rb
+++ b/spec/lib/gitlab/import_export/relation_factory_spec.rb
@@ -3,12 +3,14 @@ require 'spec_helper'
describe Gitlab::ImportExport::RelationFactory do
let(:project) { create(:project) }
let(:members_mapper) { double('members_mapper').as_null_object }
+ let(:merge_requests_mapping) { {} }
let(:user) { create(:admin) }
let(:excluded_keys) { [] }
let(:created_object) do
described_class.create(relation_sym: relation_sym,
relation_hash: relation_hash,
members_mapper: members_mapper,
+ merge_requests_mapping: merge_requests_mapping,
user: user,
project: project,
excluded_keys: excluded_keys)
@@ -83,7 +85,7 @@ describe Gitlab::ImportExport::RelationFactory do
class FooModel
include ActiveModel::Model
- def initialize(params)
+ def initialize(params = {})
params.each { |key, value| send("#{key}=", value) }
end
diff --git a/spec/lib/gitlab/import_export/relation_rename_service_spec.rb b/spec/lib/gitlab/import_export/relation_rename_service_spec.rb
index 17bb5bcc155..472bf55d37e 100644
--- a/spec/lib/gitlab/import_export/relation_rename_service_spec.rb
+++ b/spec/lib/gitlab/import_export/relation_rename_service_spec.rb
@@ -21,7 +21,7 @@ describe Gitlab::ImportExport::RelationRenameService do
context 'when importing' do
let(:project_tree_restorer) { Gitlab::ImportExport::ProjectTreeRestorer.new(user: user, shared: shared, project: project) }
- let(:import_path) { 'spec/lib/gitlab/import_export' }
+ let(:import_path) { 'spec/fixtures/lib/gitlab/import_export' }
let(:file_content) { IO.read("#{import_path}/project.json") }
let!(:json_file) { ActiveSupport::JSON.decode(file_content) }
diff --git a/spec/lib/gitlab/import_export/repo_saver_spec.rb b/spec/lib/gitlab/import_export/repo_saver_spec.rb
index 5a646b4aac8..c3df371af43 100644
--- a/spec/lib/gitlab/import_export/repo_saver_spec.rb
+++ b/spec/lib/gitlab/import_export/repo_saver_spec.rb
@@ -2,8 +2,8 @@ require 'spec_helper'
describe Gitlab::ImportExport::RepoSaver do
describe 'bundle a project Git repo' do
- let(:user) { create(:user) }
- let!(:project) { create(:project, :public, name: 'searchable_project') }
+ set(:user) { create(:user) }
+ let!(:project) { create(:project, :repository) }
let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" }
let(:shared) { project.import_export_shared }
let(:bundler) { described_class.new(project: project, shared: shared) }
@@ -20,5 +20,13 @@ describe Gitlab::ImportExport::RepoSaver do
it 'bundles the repo successfully' do
expect(bundler.save).to be true
end
+
+ context 'when the repo is empty' do
+ let!(:project) { create(:project) }
+
+ it 'bundles the repo successfully' do
+ expect(bundler.save).to be true
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml
index 2f178648838..8ae571a69ef 100644
--- a/spec/lib/gitlab/import_export/safe_model_attributes.yml
+++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml
@@ -47,6 +47,7 @@ PushEventPayload:
- commit_to
- ref
- commit_title
+- ref_count
Note:
- id
- note
@@ -126,6 +127,12 @@ Release:
- created_at
- updated_at
- released_at
+Evidence:
+- id
+- release_id
+- summary
+- created_at
+- updated_at
Releases::Link:
- id
- release_id
@@ -717,6 +724,7 @@ List:
- updated_at
- milestone_id
- user_id
+- max_issue_count
ExternalPullRequest:
- id
- created_at
@@ -730,3 +738,18 @@ ExternalPullRequest:
- target_repository
- source_sha
- target_sha
+DesignManagement::Design:
+- id
+- project_id
+- issue_id
+- filename
+DesignManagement::Action:
+- design_id
+- event
+- version_id
+DesignManagement::Version:
+- id
+- created_at
+- sha
+- issue_id
+- user_id
diff --git a/spec/lib/gitlab/import_export/shared_spec.rb b/spec/lib/gitlab/import_export/shared_spec.rb
index 2c288cff6ef..62669836973 100644
--- a/spec/lib/gitlab/import_export/shared_spec.rb
+++ b/spec/lib/gitlab/import_export/shared_spec.rb
@@ -5,6 +5,35 @@ describe Gitlab::ImportExport::Shared do
let(:project) { build(:project) }
subject { project.import_export_shared }
+ context 'with a repository on disk' do
+ let(:project) { create(:project, :repository) }
+ let(:base_path) { %(/tmp/project_exports/#{project.disk_path}/) }
+
+ describe '#archive_path' do
+ it 'uses a random hash to avoid conflicts' do
+ expect(subject.archive_path).to match(/#{base_path}\h{32}/)
+ end
+
+ it 'memoizes the path' do
+ path = subject.archive_path
+
+ 2.times { expect(subject.archive_path).to eq(path) }
+ end
+ end
+
+ describe '#export_path' do
+ it 'uses a random hash relative to project path' do
+ expect(subject.export_path).to match(/#{base_path}\h{32}\/\h{32}/)
+ end
+
+ it 'memoizes the path' do
+ path = subject.export_path
+
+ 2.times { expect(subject.export_path).to eq(path) }
+ end
+ end
+ end
+
describe '#error' do
let(:error) { StandardError.new('Error importing into /my/folder Permission denied @ unlink_internal - /var/opt/gitlab/gitlab-rails/shared/a/b/c/uploads/file') }
@@ -24,16 +53,17 @@ describe Gitlab::ImportExport::Shared do
subject.error(error)
end
- it 'calls the error logger with the full message' do
- expect(subject).to receive(:log_error).with(hash_including(message: error.message))
+ it 'calls the error logger without a backtrace' do
+ expect(subject).to receive(:log_error).with(message: error.message)
subject.error(error)
end
- it 'calls the debug logger with a backtrace' do
- error.set_backtrace('backtrace')
+ it 'calls the error logger with the full message' do
+ backtrace = caller
+ allow(error).to receive(:backtrace).and_return(caller)
- expect(subject).to receive(:log_debug).with(hash_including(backtrace: 'backtrace'))
+ expect(subject).to receive(:log_error).with(message: error.message, error_backtrace: Gitlab::Profiler.clean_backtrace(backtrace))
subject.error(error)
end
diff --git a/spec/lib/gitlab/import_export/uploads_manager_spec.rb b/spec/lib/gitlab/import_export/uploads_manager_spec.rb
index 792117e1df1..f13f639d6b7 100644
--- a/spec/lib/gitlab/import_export/uploads_manager_spec.rb
+++ b/spec/lib/gitlab/import_export/uploads_manager_spec.rb
@@ -83,7 +83,7 @@ describe Gitlab::ImportExport::UploadsManager do
it 'restores the file' do
manager.restore
- expect(project.uploads.map { |u| u.build_uploader.filename }).to include('dummy.txt')
+ expect(project.uploads.map { |u| u.retrieve_uploader.filename }).to include('dummy.txt')
end
end
end
diff --git a/spec/lib/gitlab/import_export/uploads_restorer_spec.rb b/spec/lib/gitlab/import_export/uploads_restorer_spec.rb
index 6072f18b8c7..e2e8204b2fa 100644
--- a/spec/lib/gitlab/import_export/uploads_restorer_spec.rb
+++ b/spec/lib/gitlab/import_export/uploads_restorer_spec.rb
@@ -27,7 +27,7 @@ describe Gitlab::ImportExport::UploadsRestorer do
it 'copies the uploads to the project path' do
subject.restore
- expect(project.uploads.map { |u| u.build_uploader.filename }).to include('dummy.txt')
+ expect(project.uploads.map { |u| u.retrieve_uploader.filename }).to include('dummy.txt')
end
end
@@ -43,7 +43,7 @@ describe Gitlab::ImportExport::UploadsRestorer do
it 'copies the uploads to the project path' do
subject.restore
- expect(project.uploads.map { |u| u.build_uploader.filename }).to include('dummy.txt')
+ expect(project.uploads.map { |u| u.retrieve_uploader.filename }).to include('dummy.txt')
end
end
end
diff --git a/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb b/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb
index 441aa1defe6..249afbd23d1 100644
--- a/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb
+++ b/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb
@@ -2,8 +2,8 @@ require 'spec_helper'
describe Gitlab::ImportExport::WikiRepoSaver do
describe 'bundle a wiki Git repo' do
- let(:user) { create(:user) }
- let!(:project) { create(:project, :public, :wiki_repo, name: 'searchable_project') }
+ set(:user) { create(:user) }
+ let!(:project) { create(:project, :wiki_repo) }
let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" }
let(:shared) { project.import_export_shared }
let(:wiki_bundler) { described_class.new(project: project, shared: shared) }
@@ -23,5 +23,13 @@ describe Gitlab::ImportExport::WikiRepoSaver do
it 'bundles the repo successfully' do
expect(wiki_bundler.save).to be true
end
+
+ context 'when the repo is empty' do
+ let!(:project) { create(:project) }
+
+ it 'bundles the repo successfully' do
+ expect(wiki_bundler.save).to be true
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/kubernetes/helm/delete_command_spec.rb b/spec/lib/gitlab/kubernetes/helm/delete_command_spec.rb
index 39a46f9bc6d..7e9853cf9ea 100644
--- a/spec/lib/gitlab/kubernetes/helm/delete_command_spec.rb
+++ b/spec/lib/gitlab/kubernetes/helm/delete_command_spec.rb
@@ -14,7 +14,7 @@ describe Gitlab::Kubernetes::Helm::DeleteCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
helm delete --purge app-name
EOS
end
@@ -36,7 +36,7 @@ describe Gitlab::Kubernetes::Helm::DeleteCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version #{tls_flags} && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version #{tls_flags} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
#{helm_delete_command}
EOS
end
diff --git a/spec/lib/gitlab/kubernetes/helm/install_command_spec.rb b/spec/lib/gitlab/kubernetes/helm/install_command_spec.rb
index f7f510f01db..9eb3322f1a6 100644
--- a/spec/lib/gitlab/kubernetes/helm/install_command_spec.rb
+++ b/spec/lib/gitlab/kubernetes/helm/install_command_spec.rb
@@ -36,7 +36,7 @@ describe Gitlab::Kubernetes::Helm::InstallCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version #{tls_flags} && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version #{tls_flags} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
helm repo add app-name https://repository.example.com
helm repo update
#{helm_install_comand}
@@ -64,7 +64,7 @@ describe Gitlab::Kubernetes::Helm::InstallCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version #{tls_flags} && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version #{tls_flags} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
helm repo add app-name https://repository.example.com
helm repo update
#{helm_install_command}
@@ -93,7 +93,7 @@ describe Gitlab::Kubernetes::Helm::InstallCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version #{tls_flags} && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version #{tls_flags} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
#{helm_install_command}
EOS
end
@@ -120,7 +120,7 @@ describe Gitlab::Kubernetes::Helm::InstallCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version #{tls_flags} && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version #{tls_flags} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
helm repo add app-name https://repository.example.com
helm repo update
/bin/date
@@ -151,7 +151,7 @@ describe Gitlab::Kubernetes::Helm::InstallCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version #{tls_flags} && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version #{tls_flags} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
helm repo add app-name https://repository.example.com
helm repo update
#{helm_install_command}
@@ -182,7 +182,7 @@ describe Gitlab::Kubernetes::Helm::InstallCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
helm repo add app-name https://repository.example.com
helm repo update
#{helm_install_command}
@@ -210,7 +210,7 @@ describe Gitlab::Kubernetes::Helm::InstallCommand do
let(:commands) do
<<~EOS
helm init --upgrade
- for i in $(seq 1 30); do helm version #{tls_flags} && break; sleep 1s; echo "Retrying ($i)..."; done
+ for i in $(seq 1 30); do helm version #{tls_flags} && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)
helm repo add app-name https://repository.example.com
helm repo update
#{helm_install_command}
diff --git a/spec/lib/gitlab/kubernetes/helm/reset_command_spec.rb b/spec/lib/gitlab/kubernetes/helm/reset_command_spec.rb
index d49d4779735..2a89b04723d 100644
--- a/spec/lib/gitlab/kubernetes/helm/reset_command_spec.rb
+++ b/spec/lib/gitlab/kubernetes/helm/reset_command_spec.rb
@@ -15,6 +15,7 @@ describe Gitlab::Kubernetes::Helm::ResetCommand do
<<~EOS
helm reset
kubectl delete replicaset -n gitlab-managed-apps -l name\\=tiller
+ kubectl delete clusterrolebinding tiller-admin
EOS
end
end
@@ -32,6 +33,7 @@ describe Gitlab::Kubernetes::Helm::ResetCommand do
--tls-key /data/helm/helm/config/key.pem
EOS1
kubectl delete replicaset -n gitlab-managed-apps -l name\\=tiller
+ kubectl delete clusterrolebinding tiller-admin
EOS2
end
end
diff --git a/spec/lib/gitlab/kubernetes/kube_client_spec.rb b/spec/lib/gitlab/kubernetes/kube_client_spec.rb
index e5d688aa391..59e81d89a50 100644
--- a/spec/lib/gitlab/kubernetes/kube_client_spec.rb
+++ b/spec/lib/gitlab/kubernetes/kube_client_spec.rb
@@ -162,7 +162,9 @@ describe Gitlab::Kubernetes::KubeClient do
:get_secret,
:get_service,
:get_service_account,
+ :delete_namespace,
:delete_pod,
+ :delete_service_account,
:create_config_map,
:create_namespace,
:create_pod,
diff --git a/spec/lib/gitlab/legacy_github_import/release_formatter_spec.rb b/spec/lib/gitlab/legacy_github_import/release_formatter_spec.rb
index 2cf4b367c0b..554be57fbec 100644
--- a/spec/lib/gitlab/legacy_github_import/release_formatter_spec.rb
+++ b/spec/lib/gitlab/legacy_github_import/release_formatter_spec.rb
@@ -37,6 +37,14 @@ describe Gitlab::LegacyGithubImport::ReleaseFormatter do
expect(release.attributes).to eq(expected)
end
+
+ context 'with a nil published_at date' do
+ let(:published_at) { nil }
+
+ it 'inserts a timestamp for released_at' do
+ expect(release.attributes[:released_at]).to be_a(Time)
+ end
+ end
end
describe '#valid' do
diff --git a/spec/lib/gitlab/lets_encrypt_spec.rb b/spec/lib/gitlab/lets_encrypt_spec.rb
index 65aea0937f1..2229393fb32 100644
--- a/spec/lib/gitlab/lets_encrypt_spec.rb
+++ b/spec/lib/gitlab/lets_encrypt_spec.rb
@@ -24,4 +24,16 @@ describe ::Gitlab::LetsEncrypt do
it { is_expected.to eq(false) }
end
end
+
+ describe '.terms_of_service_url' do
+ before do
+ stub_lets_encrypt_client
+ end
+
+ subject { described_class.terms_of_service_url }
+
+ it 'returns the url' do
+ is_expected.to eq("https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf")
+ end
+ end
end
diff --git a/spec/lib/gitlab/lfs_token_spec.rb b/spec/lib/gitlab/lfs_token_spec.rb
index 701ed1f3a1b..b2fd7bdd307 100644
--- a/spec/lib/gitlab/lfs_token_spec.rb
+++ b/spec/lib/gitlab/lfs_token_spec.rb
@@ -115,6 +115,46 @@ describe Gitlab::LfsToken, :clean_gitlab_redis_shared_state do
expect(lfs_token.token_valid?(lfs_token.token)).to be_truthy
end
end
+
+ context 'when the actor is a regular user' do
+ context 'when the user is blocked' do
+ let(:actor) { create(:user, :blocked) }
+
+ it 'returns false' do
+ expect(lfs_token.token_valid?(lfs_token.token)).to be_falsey
+ end
+ end
+
+ context 'when the user password is expired' do
+ let(:actor) { create(:user, password_expires_at: 1.minute.ago) }
+
+ it 'returns false' do
+ expect(lfs_token.token_valid?(lfs_token.token)).to be_falsey
+ end
+ end
+ end
+
+ context 'when the actor is an ldap user' do
+ before do
+ allow(actor).to receive(:ldap_user?).and_return(true)
+ end
+
+ context 'when the user is blocked' do
+ let(:actor) { create(:user, :blocked) }
+
+ it 'returns false' do
+ expect(lfs_token.token_valid?(lfs_token.token)).to be_falsey
+ end
+ end
+
+ context 'when the user password is expired' do
+ let(:actor) { create(:user, password_expires_at: 1.minute.ago) }
+
+ it 'returns true' do
+ expect(lfs_token.token_valid?(lfs_token.token)).to be_truthy
+ end
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/metrics/exporter/base_exporter_spec.rb b/spec/lib/gitlab/metrics/exporter/base_exporter_spec.rb
new file mode 100644
index 00000000000..47ec69e2f45
--- /dev/null
+++ b/spec/lib/gitlab/metrics/exporter/base_exporter_spec.rb
@@ -0,0 +1,180 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Metrics::Exporter::BaseExporter do
+ let(:exporter) { described_class.new }
+ let(:log_filename) { File.join(Rails.root, 'log', 'sidekiq_exporter.log') }
+ let(:settings) { double('settings') }
+
+ before do
+ allow_any_instance_of(described_class).to receive(:log_filename).and_return(log_filename)
+ allow_any_instance_of(described_class).to receive(:settings).and_return(settings)
+ end
+
+ describe 'when exporter is enabled' do
+ before do
+ allow(::WEBrick::HTTPServer).to receive(:new).with(
+ Port: anything,
+ BindAddress: anything,
+ Logger: anything,
+ AccessLog: anything
+ ).and_call_original
+
+ allow(settings).to receive(:enabled).and_return(true)
+ allow(settings).to receive(:port).and_return(0)
+ allow(settings).to receive(:address).and_return('127.0.0.1')
+ end
+
+ after do
+ exporter.stop
+ end
+
+ describe 'when exporter is stopped' do
+ describe '#start' do
+ it 'starts the exporter' do
+ expect_any_instance_of(::WEBrick::HTTPServer).to receive(:start)
+
+ expect { exporter.start.join }.to change { exporter.thread? }.from(false).to(true)
+ end
+
+ describe 'with custom settings' do
+ let(:port) { 99999 }
+ let(:address) { 'sidekiq_exporter_address' }
+
+ before do
+ allow(settings).to receive(:port).and_return(port)
+ allow(settings).to receive(:address).and_return(address)
+ end
+
+ it 'starts server with port and address from settings' do
+ expect(::WEBrick::HTTPServer).to receive(:new).with(
+ Port: port,
+ BindAddress: address,
+ Logger: anything,
+ AccessLog: anything
+ ).and_wrap_original do |m, *args|
+ m.call(DoNotListen: true, Logger: args.first[:Logger])
+ end
+
+ allow_any_instance_of(::WEBrick::HTTPServer).to receive(:start)
+
+ exporter.start.join
+ end
+ end
+
+ describe 'when thread is not alive' do
+ it 'does close listeners' do
+ expect_any_instance_of(::WEBrick::HTTPServer).to receive(:start)
+ expect_any_instance_of(::WEBrick::HTTPServer).to receive(:listeners)
+ .and_call_original
+
+ expect { exporter.start.join }.to change { exporter.thread? }.from(false).to(true)
+
+ exporter.stop
+ end
+ end
+ end
+
+ describe '#stop' do
+ it "doesn't shutdown stopped server" do
+ expect_any_instance_of(::WEBrick::HTTPServer).not_to receive(:shutdown)
+
+ expect { exporter.stop }.not_to change { exporter.thread? }
+ end
+ end
+ end
+
+ describe 'when exporter is running' do
+ before do
+ exporter.start
+ end
+
+ describe '#start' do
+ it "doesn't start running server" do
+ expect_any_instance_of(::WEBrick::HTTPServer).not_to receive(:start)
+
+ expect { exporter.start }.not_to change { exporter.thread? }
+ end
+ end
+
+ describe '#stop' do
+ it 'shutdowns server' do
+ expect_any_instance_of(::WEBrick::HTTPServer).to receive(:shutdown)
+
+ expect { exporter.stop }.to change { exporter.thread? }.from(true).to(false)
+ end
+ end
+ end
+ end
+
+ describe 'request handling' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:method_class, :path, :http_status) do
+ Net::HTTP::Get | '/metrics' | 200
+ Net::HTTP::Get | '/liveness' | 200
+ Net::HTTP::Get | '/readiness' | 200
+ Net::HTTP::Get | '/' | 404
+ end
+
+ before do
+ allow(settings).to receive(:enabled).and_return(true)
+ allow(settings).to receive(:port).and_return(0)
+ allow(settings).to receive(:address).and_return('127.0.0.1')
+
+ # We want to wrap original method
+ # and run handling of requests
+ # in separate thread
+ allow_any_instance_of(::WEBrick::HTTPServer)
+ .to receive(:start).and_wrap_original do |m, *args|
+ Thread.new do
+ m.call(*args)
+ rescue IOError
+ # is raised as we close listeners
+ end
+ end
+
+ exporter.start.join
+ end
+
+ after do
+ exporter.stop
+ end
+
+ with_them do
+ let(:config) { exporter.server.config }
+ let(:request) { method_class.new(path) }
+
+ it 'responds with proper http_status' do
+ http = Net::HTTP.new(config[:BindAddress], config[:Port])
+ response = http.request(request)
+
+ expect(response.code).to eq(http_status.to_s)
+ end
+ end
+ end
+
+ describe 'when exporter is disabled' do
+ before do
+ allow(settings).to receive(:enabled).and_return(false)
+ end
+
+ describe '#start' do
+ it "doesn't start" do
+ expect_any_instance_of(::WEBrick::HTTPServer).not_to receive(:start)
+
+ expect(exporter.start).to be_nil
+ expect { exporter.start }.not_to change { exporter.thread? }
+ end
+ end
+
+ describe '#stop' do
+ it "doesn't shutdown" do
+ expect_any_instance_of(::WEBrick::HTTPServer).not_to receive(:shutdown)
+
+ expect { exporter.stop }.not_to change { exporter.thread? }
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/metrics/exporter/sidekiq_exporter_spec.rb b/spec/lib/gitlab/metrics/exporter/sidekiq_exporter_spec.rb
new file mode 100644
index 00000000000..a415b6407d5
--- /dev/null
+++ b/spec/lib/gitlab/metrics/exporter/sidekiq_exporter_spec.rb
@@ -0,0 +1,65 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Metrics::Exporter::SidekiqExporter do
+ let(:exporter) { described_class.new }
+
+ after do
+ exporter.stop
+ end
+
+ context 'with valid config' do
+ before do
+ stub_config(
+ monitoring: {
+ sidekiq_exporter: {
+ enabled: true,
+ port: 0,
+ address: '127.0.0.1'
+ }
+ }
+ )
+ end
+
+ it 'does start thread' do
+ expect(exporter.start).not_to be_nil
+ end
+ end
+
+ context 'when port is already taken' do
+ let(:first_exporter) { described_class.new }
+
+ before do
+ stub_config(
+ monitoring: {
+ sidekiq_exporter: {
+ enabled: true,
+ port: 9992,
+ address: '127.0.0.1'
+ }
+ }
+ )
+
+ first_exporter.start
+ end
+
+ after do
+ first_exporter.stop
+ end
+
+ it 'does print error message' do
+ expect(Sidekiq.logger).to receive(:error)
+ .with(
+ class: described_class.to_s,
+ message: 'Cannot start sidekiq_exporter',
+ exception: anything)
+
+ exporter.start
+ end
+
+ it 'does not start thread' do
+ expect(exporter.start).to be_nil
+ end
+ end
+end
diff --git a/spec/lib/gitlab/metrics/exporter/web_exporter_spec.rb b/spec/lib/gitlab/metrics/exporter/web_exporter_spec.rb
new file mode 100644
index 00000000000..99349934e63
--- /dev/null
+++ b/spec/lib/gitlab/metrics/exporter/web_exporter_spec.rb
@@ -0,0 +1,64 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Metrics::Exporter::WebExporter do
+ let(:exporter) { described_class.new }
+
+ context 'when blackout seconds is used' do
+ let(:blackout_seconds) { 0 }
+ let(:readiness_probe) { exporter.send(:readiness_probe).execute }
+
+ before do
+ stub_config(
+ monitoring: {
+ web_exporter: {
+ enabled: true,
+ port: 0,
+ address: '127.0.0.1',
+ blackout_seconds: blackout_seconds
+ }
+ }
+ )
+
+ exporter.start
+ end
+
+ after do
+ exporter.stop
+ end
+
+ context 'when running server' do
+ it 'readiness probe returns succesful status' do
+ expect(readiness_probe.http_status).to eq(200)
+ expect(readiness_probe.json).to include(status: 'ok')
+ expect(readiness_probe.json).to include('web_exporter' => [{ 'status': 'ok' }])
+ end
+ end
+
+ context 'when blackout seconds is 10s' do
+ let(:blackout_seconds) { 10 }
+
+ it 'readiness probe returns a failure status' do
+ # during sleep we check the status of readiness probe
+ expect(exporter).to receive(:sleep).with(10) do
+ expect(readiness_probe.http_status).to eq(503)
+ expect(readiness_probe.json).to include(status: 'failed')
+ expect(readiness_probe.json).to include('web_exporter' => [{ 'status': 'failed' }])
+ end
+
+ exporter.stop
+ end
+ end
+
+ context 'when blackout is disabled' do
+ let(:blackout_seconds) { 0 }
+
+ it 'readiness probe returns a failure status' do
+ expect(exporter).not_to receive(:sleep)
+
+ exporter.stop
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb b/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
index c29db3a93ec..66ea390a2bf 100644
--- a/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
+++ b/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
@@ -63,5 +63,19 @@ describe Gitlab::Metrics::RequestsRackMiddleware do
expect { subject.call(env) }.to raise_error(StandardError)
end
end
+
+ describe '.initialize_http_request_duration_seconds' do
+ it "sets labels" do
+ expected_labels = []
+ described_class::HTTP_METHODS.each do |method, statuses|
+ statuses.each do |status|
+ expected_labels << { method: method, status: status }
+ end
+ end
+
+ described_class.initialize_http_request_duration_seconds
+ expect(described_class.http_request_duration_seconds.values.keys).to include(*expected_labels)
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/metrics/samplers/puma_sampler_spec.rb b/spec/lib/gitlab/metrics/samplers/puma_sampler_spec.rb
index b8add3c1324..1097d26c320 100644
--- a/spec/lib/gitlab/metrics/samplers/puma_sampler_spec.rb
+++ b/spec/lib/gitlab/metrics/samplers/puma_sampler_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe Gitlab::Metrics::Samplers::PumaSampler do
subject { described_class.new(5) }
+
let(:null_metric) { double('null_metric', set: nil, observe: nil) }
before do
diff --git a/spec/lib/gitlab/metrics/sidekiq_metrics_exporter_spec.rb b/spec/lib/gitlab/metrics/sidekiq_metrics_exporter_spec.rb
deleted file mode 100644
index 9eea3eb79dc..00000000000
--- a/spec/lib/gitlab/metrics/sidekiq_metrics_exporter_spec.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::Metrics::SidekiqMetricsExporter do
- let(:exporter) { described_class.new }
- let(:server) { double('server') }
-
- before do
- allow(::WEBrick::HTTPServer).to receive(:new).and_return(server)
- allow(server).to receive(:mount)
- allow(server).to receive(:start)
- allow(server).to receive(:shutdown)
- end
-
- describe 'when exporter is enabled' do
- before do
- allow(Settings.monitoring.sidekiq_exporter).to receive(:enabled).and_return(true)
- end
-
- describe 'when exporter is stopped' do
- describe '#start' do
- it 'starts the exporter' do
- expect { exporter.start.join }.to change { exporter.thread? }.from(false).to(true)
-
- expect(server).to have_received(:start)
- end
-
- describe 'with custom settings' do
- let(:port) { 99999 }
- let(:address) { 'sidekiq_exporter_address' }
-
- before do
- allow(Settings.monitoring.sidekiq_exporter).to receive(:port).and_return(port)
- allow(Settings.monitoring.sidekiq_exporter).to receive(:address).and_return(address)
- end
-
- it 'starts server with port and address from settings' do
- exporter.start.join
-
- expect(::WEBrick::HTTPServer).to have_received(:new).with(
- Port: port,
- BindAddress: address,
- Logger: anything,
- AccessLog: anything
- )
- end
- end
- end
-
- describe '#stop' do
- it "doesn't shutdown stopped server" do
- expect { exporter.stop }.not_to change { exporter.thread? }
-
- expect(server).not_to have_received(:shutdown)
- end
- end
- end
-
- describe 'when exporter is running' do
- before do
- exporter.start.join
- end
-
- describe '#start' do
- it "doesn't start running server" do
- expect { exporter.start.join }.not_to change { exporter.thread? }
-
- expect(server).to have_received(:start).once
- end
- end
-
- describe '#stop' do
- it 'shutdowns server' do
- expect { exporter.stop }.to change { exporter.thread? }.from(true).to(false)
-
- expect(server).to have_received(:shutdown)
- end
- end
- end
- end
-
- describe 'when exporter is disabled' do
- before do
- allow(Settings.monitoring.sidekiq_exporter).to receive(:enabled).and_return(false)
- end
-
- describe '#start' do
- it "doesn't start" do
- expect(exporter.start).to be_nil
- expect { exporter.start }.not_to change { exporter.thread? }
-
- expect(server).not_to have_received(:start)
- end
- end
-
- describe '#stop' do
- it "doesn't shutdown" do
- expect { exporter.stop }.not_to change { exporter.thread? }
-
- expect(server).not_to have_received(:shutdown)
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/metrics/system_spec.rb b/spec/lib/gitlab/metrics/system_spec.rb
index 6d2764a06f2..a5aa80686fd 100644
--- a/spec/lib/gitlab/metrics/system_spec.rb
+++ b/spec/lib/gitlab/metrics/system_spec.rb
@@ -58,4 +58,44 @@ describe Gitlab::Metrics::System do
expect(described_class.monotonic_time).to be_an(Float)
end
end
+
+ describe '.thread_cpu_time' do
+ it 'returns cpu_time on supported platform' do
+ stub_const("Process::CLOCK_THREAD_CPUTIME_ID", 16)
+
+ expect(Process).to receive(:clock_gettime)
+ .with(16, kind_of(Symbol)) { 0.111222333 }
+
+ expect(described_class.thread_cpu_time).to eq(0.111222333)
+ end
+
+ it 'returns nil on unsupported platform' do
+ hide_const("Process::CLOCK_THREAD_CPUTIME_ID")
+
+ expect(described_class.thread_cpu_time).to be_nil
+ end
+ end
+
+ describe '.thread_cpu_duration' do
+ let(:start_time) { described_class.thread_cpu_time }
+
+ it 'returns difference between start and current time' do
+ stub_const("Process::CLOCK_THREAD_CPUTIME_ID", 16)
+
+ expect(Process).to receive(:clock_gettime)
+ .with(16, kind_of(Symbol))
+ .and_return(
+ 0.111222333,
+ 0.222333833
+ )
+
+ expect(described_class.thread_cpu_duration(start_time)).to eq(0.1111115)
+ end
+
+ it 'returns nil on unsupported platform' do
+ hide_const("Process::CLOCK_THREAD_CPUTIME_ID")
+
+ expect(described_class.thread_cpu_duration(start_time)).to be_nil
+ end
+ end
end
diff --git a/spec/lib/gitlab/metrics/transaction_spec.rb b/spec/lib/gitlab/metrics/transaction_spec.rb
index 45e74597a2e..08de2426c5a 100644
--- a/spec/lib/gitlab/metrics/transaction_spec.rb
+++ b/spec/lib/gitlab/metrics/transaction_spec.rb
@@ -27,6 +27,14 @@ describe Gitlab::Metrics::Transaction do
end
end
+ describe '#thread_cpu_duration' do
+ it 'returns the duration of a transaction in seconds' do
+ transaction.run { }
+
+ expect(transaction.thread_cpu_duration).to be > 0
+ end
+ end
+
describe '#allocated_memory' do
it 'returns the allocated memory in bytes' do
transaction.run { 'a' * 32 }
diff --git a/spec/lib/gitlab/middleware/read_only_spec.rb b/spec/lib/gitlab/middleware/read_only_spec.rb
index d2c8f4ab0bd..c7e9b38e3ca 100644
--- a/spec/lib/gitlab/middleware/read_only_spec.rb
+++ b/spec/lib/gitlab/middleware/read_only_spec.rb
@@ -103,6 +103,13 @@ describe Gitlab::Middleware::ReadOnly do
expect(subject).not_to disallow_request
end
+ it 'expects a graphql request to be allowed' do
+ response = request.post("/api/graphql")
+
+ expect(response).not_to be_redirect
+ expect(subject).not_to disallow_request
+ end
+
context 'sidekiq admin requests' do
where(:mounted_at) do
[
diff --git a/spec/lib/gitlab/pages_client_spec.rb b/spec/lib/gitlab/pages_client_spec.rb
deleted file mode 100644
index 84381843221..00000000000
--- a/spec/lib/gitlab/pages_client_spec.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::PagesClient do
- subject { described_class }
-
- describe '.token' do
- it 'returns the token as it is on disk' do
- pending 'add omnibus support for generating the secret file https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/2466'
- expect(subject.token).to eq(File.read('.gitlab_pages_secret'))
- end
- end
-
- describe '.read_or_create_token' do
- subject { described_class.read_or_create_token }
- let(:token_path) { 'tmp/tests/gitlab-pages-secret' }
- before do
- allow(described_class).to receive(:token_path).and_return(token_path)
- FileUtils.rm_f(token_path)
- end
-
- it 'uses the existing token file if it exists' do
- secret = 'existing secret'
- File.write(token_path, secret)
-
- subject
- expect(described_class.token).to eq(secret)
- end
-
- it 'creates one if none exists' do
- pending 'add omnibus support for generating the secret file https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/2466'
-
- old_token = described_class.token
- # sanity check
- expect(File.exist?(token_path)).to eq(false)
-
- subject
- expect(described_class.token.bytesize).to eq(64)
- expect(described_class.token).not_to eq(old_token)
- end
- end
-
- describe '.write_token' do
- let(:token_path) { 'tmp/tests/gitlab-pages-secret' }
- before do
- allow(described_class).to receive(:token_path).and_return(token_path)
- FileUtils.rm_f(token_path)
- end
-
- it 'writes the secret' do
- new_secret = 'hello new secret'
- expect(File.exist?(token_path)).to eq(false)
-
- described_class.send(:write_token, new_secret)
-
- expect(File.read(token_path)).to eq(new_secret)
- end
-
- it 'does nothing if the file already exists' do
- existing_secret = 'hello secret'
- File.write(token_path, existing_secret)
-
- described_class.send(:write_token, 'new secret')
-
- expect(File.read(token_path)).to eq(existing_secret)
- end
- end
-
- describe '.load_certificate' do
- subject { described_class.load_certificate }
- before do
- allow(described_class).to receive(:config).and_return(config)
- end
-
- context 'with no certificate in the config' do
- let(:config) { double(:config, certificate: '') }
-
- it 'does not set @certificate' do
- subject
-
- expect(described_class.certificate).to be_nil
- end
- end
-
- context 'with a certificate path in the config' do
- let(:certificate_path) { 'tmp/tests/fake-certificate' }
- let(:config) { double(:config, certificate: certificate_path) }
-
- it 'sets @certificate' do
- certificate_data = "--- BEGIN CERTIFICATE ---\nbla\n--- END CERTIFICATE ---\n"
- File.write(certificate_path, certificate_data)
- subject
-
- expect(described_class.certificate).to eq(certificate_data)
- end
- end
- end
-
- describe '.request_kwargs' do
- let(:token) { 'secret token' }
- let(:auth_header) { 'Bearer c2VjcmV0IHRva2Vu' }
- before do
- allow(described_class).to receive(:token).and_return(token)
- end
-
- context 'without timeout' do
- it { expect(subject.send(:request_kwargs, nil)[:metadata]['authorization']).to eq(auth_header) }
- end
-
- context 'with timeout' do
- let(:timeout) { 1.second }
-
- it 'still sets the authorization header' do
- expect(subject.send(:request_kwargs, timeout)[:metadata]['authorization']).to eq(auth_header)
- end
-
- it 'sets a deadline value' do
- now = Time.now
- deadline = subject.send(:request_kwargs, timeout)[:deadline]
-
- expect(deadline).to be_between(now, now + 2 * timeout)
- end
- end
- end
-
- describe '.stub' do
- before do
- allow(described_class).to receive(:address).and_return('unix:/foo/bar')
- end
-
- it { expect(subject.send(:stub, :health_check)).to be_a(Grpc::Health::V1::Health::Stub) }
- end
-
- describe '.address' do
- subject { described_class.send(:address) }
-
- before do
- allow(described_class).to receive(:config).and_return(config)
- end
-
- context 'with a unix: address' do
- let(:config) { double(:config, address: 'unix:/foo/bar') }
-
- it { expect(subject).to eq('unix:/foo/bar') }
- end
-
- context 'with a tcp:// address' do
- let(:config) { double(:config, address: 'tcp://localhost:1234') }
-
- it { expect(subject).to eq('localhost:1234') }
- end
- end
-
- describe '.grpc_creds' do
- subject { described_class.send(:grpc_creds) }
-
- before do
- allow(described_class).to receive(:config).and_return(config)
- end
-
- context 'with a unix: address' do
- let(:config) { double(:config, address: 'unix:/foo/bar') }
-
- it { expect(subject).to eq(:this_channel_is_insecure) }
- end
-
- context 'with a tcp:// address' do
- let(:config) { double(:config, address: 'tcp://localhost:1234') }
-
- it { expect(subject).to be_a(GRPC::Core::ChannelCredentials) }
- end
- end
-end
diff --git a/spec/lib/gitlab/patch/prependable_spec.rb b/spec/lib/gitlab/patch/prependable_spec.rb
index 725d733d176..255324f89d5 100644
--- a/spec/lib/gitlab/patch/prependable_spec.rb
+++ b/spec/lib/gitlab/patch/prependable_spec.rb
@@ -72,8 +72,8 @@ describe Gitlab::Patch::Prependable do
expect(subject.ancestors.take(3)).to eq([subject, ee, ce])
expect(subject.singleton_class.ancestors.take(3))
.to eq([subject.singleton_class,
- ee.const_get(:ClassMethods),
- ce.const_get(:ClassMethods)])
+ ee.const_get(:ClassMethods, false),
+ ce.const_get(:ClassMethods, false)])
end
it 'prepends only once even if called twice' do
@@ -115,8 +115,8 @@ describe Gitlab::Patch::Prependable do
it 'has the expected ancestors' do
expect(subject.ancestors.take(3)).to eq([ee, ce, subject])
expect(subject.singleton_class.ancestors.take(3))
- .to eq([ee.const_get(:ClassMethods),
- ce.const_get(:ClassMethods),
+ .to eq([ee.const_get(:ClassMethods, false),
+ ce.const_get(:ClassMethods, false),
subject.singleton_class])
end
@@ -152,7 +152,7 @@ describe Gitlab::Patch::Prependable do
it 'has the expected ancestors' do
expect(subject.ancestors.take(2)).to eq([ee, subject])
expect(subject.singleton_class.ancestors.take(2))
- .to eq([ee.const_get(:ClassMethods),
+ .to eq([ee.const_get(:ClassMethods, false),
subject.singleton_class])
end
diff --git a/spec/lib/gitlab/path_regex_spec.rb b/spec/lib/gitlab/path_regex_spec.rb
index 0829a2b4334..3cbcae4cdeb 100644
--- a/spec/lib/gitlab/path_regex_spec.rb
+++ b/spec/lib/gitlab/path_regex_spec.rb
@@ -108,7 +108,7 @@ describe Gitlab::PathRegex do
git = Gitlab.config.git.bin_path
tracked = `cd #{Rails.root} && #{git} ls-files public`
.split("\n")
- .map { |entry| entry.gsub('public/', '') }
+ .map { |entry| entry.start_with?('public/-/') ? '-' : entry.gsub('public/', '') }
.uniq
tracked + %w(assets uploads)
end
diff --git a/spec/lib/gitlab/phabricator_import/worker_state_spec.rb b/spec/lib/gitlab/phabricator_import/worker_state_spec.rb
index b6f2524a9d0..51514dd0ffd 100644
--- a/spec/lib/gitlab/phabricator_import/worker_state_spec.rb
+++ b/spec/lib/gitlab/phabricator_import/worker_state_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe Gitlab::PhabricatorImport::WorkerState, :clean_gitlab_redis_shared_state do
subject(:state) { described_class.new('weird-project-id') }
+
let(:key) { 'phabricator-import/jobs/project-weird-project-id/job-count' }
describe '#add_job' do
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb
index 7513dbeeb6f..6bc9b6365d1 100644
--- a/spec/lib/gitlab/reference_extractor_spec.rb
+++ b/spec/lib/gitlab/reference_extractor_spec.rb
@@ -259,13 +259,15 @@ describe Gitlab::ReferenceExtractor do
describe '.references_pattern' do
subject { described_class.references_pattern }
+
it { is_expected.to be_kind_of Regexp }
end
describe 'referables prefixes' do
def prefixes
described_class::REFERABLES.each_with_object({}) do |referable, result|
- klass = referable.to_s.camelize.constantize
+ class_name = referable.to_s.camelize
+ klass = class_name.constantize if Object.const_defined?(class_name)
next unless klass.respond_to?(:reference_prefix)
diff --git a/spec/lib/gitlab/regex_spec.rb b/spec/lib/gitlab/regex_spec.rb
index 3036e3a9754..b557baed258 100644
--- a/spec/lib/gitlab/regex_spec.rb
+++ b/spec/lib/gitlab/regex_spec.rb
@@ -64,4 +64,15 @@ describe Gitlab::Regex do
it { is_expected.not_to match('.my/image') }
it { is_expected.not_to match('my/image.') }
end
+
+ describe '.aws_account_id_regex' do
+ subject { described_class.aws_arn_regex }
+
+ it { is_expected.to match('arn:aws:iam::123456789012:role/role-name') }
+ it { is_expected.to match('arn:aws:s3:::bucket/key') }
+ it { is_expected.to match('arn:aws:ec2:us-east-1:123456789012:volume/vol-1') }
+ it { is_expected.to match('arn:aws:rds:us-east-1:123456789012:pg:prod') }
+ it { is_expected.not_to match('123456789012') }
+ it { is_expected.not_to match('role/role-name') }
+ end
end
diff --git a/spec/lib/gitlab/request_context_spec.rb b/spec/lib/gitlab/request_context_spec.rb
index a744f48da1f..cde12d4b310 100644
--- a/spec/lib/gitlab/request_context_spec.rb
+++ b/spec/lib/gitlab/request_context_spec.rb
@@ -5,6 +5,7 @@ require 'spec_helper'
describe Gitlab::RequestContext do
describe '#client_ip' do
subject { described_class.client_ip }
+
let(:app) { -> (env) {} }
let(:env) { Hash.new }
diff --git a/spec/lib/gitlab/sanitizers/exif_spec.rb b/spec/lib/gitlab/sanitizers/exif_spec.rb
index f882dbbdb5c..11e430e0be4 100644
--- a/spec/lib/gitlab/sanitizers/exif_spec.rb
+++ b/spec/lib/gitlab/sanitizers/exif_spec.rb
@@ -58,7 +58,7 @@ describe Gitlab::Sanitizers::Exif do
end
describe '#clean' do
- let(:uploader) { create(:upload, :with_file, :issuable_upload).build_uploader }
+ let(:uploader) { create(:upload, :with_file, :issuable_upload).retrieve_uploader }
context "no dry run" do
it "removes exif from the image" do
diff --git a/spec/lib/gitlab/search_results_spec.rb b/spec/lib/gitlab/search_results_spec.rb
index 26cba53502d..86dde15cc8a 100644
--- a/spec/lib/gitlab/search_results_spec.rb
+++ b/spec/lib/gitlab/search_results_spec.rb
@@ -57,8 +57,8 @@ describe Gitlab::SearchResults do
where(:count, :expected) do
23 | '23'
- 100 | '100'
- 101 | max_limited_count
+ 99 | '99'
+ 100 | max_limited_count
1234 | max_limited_count
end
diff --git a/spec/lib/gitlab/shell_spec.rb b/spec/lib/gitlab/shell_spec.rb
index 55d8bac6c03..a17e9a31212 100644
--- a/spec/lib/gitlab/shell_spec.rb
+++ b/spec/lib/gitlab/shell_spec.rb
@@ -396,6 +396,7 @@ describe Gitlab::Shell do
describe 'namespace actions' do
subject { described_class.new }
+
let(:storage) { Gitlab.config.repositories.storages.keys.first }
describe '#add_namespace' do
@@ -422,6 +423,30 @@ describe Gitlab::Shell do
end
end
+ describe '#repository_exists?' do
+ context 'when the storage path does not exist' do
+ subject { described_class.new.repository_exists?(storage, "non-existing.git") }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'when the repository does not exist' do
+ let(:project) { create(:project, :repository, :legacy_storage) }
+
+ subject { described_class.new.repository_exists?(storage, "#{project.repository.disk_path}-some-other-repo.git") }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'when the repository exists' do
+ let(:project) { create(:project, :repository, :legacy_storage) }
+
+ subject { described_class.new.repository_exists?(storage, "#{project.repository.disk_path}.git") }
+
+ it { is_expected.to be_truthy }
+ end
+ end
+
describe '#remove' do
it 'removes the namespace' do
subject.add_namespace(storage, "mepmep")
diff --git a/spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb b/spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb
new file mode 100644
index 00000000000..45bcc71dfcb
--- /dev/null
+++ b/spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb
@@ -0,0 +1,501 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::SidekiqDaemon::MemoryKiller do
+ let(:memory_killer) { described_class.new }
+ let(:pid) { 12345 }
+
+ before do
+ allow(Sidekiq.logger).to receive(:info)
+ allow(Sidekiq.logger).to receive(:warn)
+ allow(memory_killer).to receive(:pid).and_return(pid)
+
+ # make sleep no-op
+ allow(memory_killer).to receive(:sleep) {}
+ end
+
+ describe '#run_thread' do
+ subject { memory_killer.send(:run_thread) }
+
+ before do
+ # let enabled? return 3 times: true, true, false
+ allow(memory_killer).to receive(:enabled?).and_return(true, true, false)
+ end
+
+ context 'when structured logging is used' do
+ it 'logs start message once' do
+ expect(Sidekiq.logger).to receive(:info).once
+ .with(
+ class: described_class.to_s,
+ action: 'start',
+ pid: pid,
+ message: 'Starting Gitlab::SidekiqDaemon::MemoryKiller Daemon')
+
+ subject
+ end
+
+ it 'logs StandardError message twice' do
+ expect(Sidekiq.logger).to receive(:warn).twice
+ .with(
+ class: described_class.to_s,
+ pid: pid,
+ message: "Exception from run_thread: My Exception")
+
+ expect(memory_killer).to receive(:rss_within_range?)
+ .twice
+ .and_raise(StandardError, 'My Exception')
+
+ expect { subject }.not_to raise_exception
+ end
+
+ it 'logs exception message once and raise execption and log stop message' do
+ expect(Sidekiq.logger).to receive(:warn).once
+ .with(
+ class: described_class.to_s,
+ pid: pid,
+ message: "Exception from run_thread: My Exception")
+
+ expect(memory_killer).to receive(:rss_within_range?)
+ .once
+ .and_raise(Exception, 'My Exception')
+
+ expect(memory_killer).to receive(:sleep).with(Gitlab::SidekiqDaemon::MemoryKiller::CHECK_INTERVAL_SECONDS)
+ expect(Sidekiq.logger).to receive(:warn).once
+ .with(
+ class: described_class.to_s,
+ action: 'stop',
+ pid: pid,
+ message: 'Stopping Gitlab::SidekiqDaemon::MemoryKiller Daemon')
+
+ expect { subject }.to raise_exception
+ end
+
+ it 'logs stop message once' do
+ expect(Sidekiq.logger).to receive(:warn).once
+ .with(
+ class: described_class.to_s,
+ action: 'stop',
+ pid: pid,
+ message: 'Stopping Gitlab::SidekiqDaemon::MemoryKiller Daemon')
+
+ subject
+ end
+ end
+
+ it 'not invoke restart_sidekiq when rss in range' do
+ expect(memory_killer).to receive(:rss_within_range?)
+ .twice
+ .and_return(true)
+
+ expect(memory_killer).not_to receive(:restart_sidekiq)
+
+ subject
+ end
+
+ it 'invoke restart_sidekiq when rss not in range' do
+ expect(memory_killer).to receive(:rss_within_range?)
+ .at_least(:once)
+ .and_return(false)
+
+ expect(memory_killer).to receive(:restart_sidekiq)
+ .at_least(:once)
+
+ subject
+ end
+ end
+
+ describe '#stop_working' do
+ subject { memory_killer.send(:stop_working)}
+
+ it 'changes enable? to false' do
+ expect { subject }.to change { memory_killer.send(:enabled?) }
+ .from(true).to(false)
+ end
+ end
+
+ describe '#rss_within_range?' do
+ let(:shutdown_timeout_seconds) { 7 }
+ let(:check_interval_seconds) { 2 }
+ let(:grace_balloon_seconds) { 5 }
+
+ subject { memory_killer.send(:rss_within_range?) }
+
+ before do
+ stub_const("#{described_class}::SHUTDOWN_TIMEOUT_SECONDS", shutdown_timeout_seconds)
+ stub_const("#{described_class}::CHECK_INTERVAL_SECONDS", check_interval_seconds)
+ stub_const("#{described_class}::GRACE_BALLOON_SECONDS", grace_balloon_seconds)
+ allow(Process).to receive(:getpgrp).and_return(pid)
+ allow(Sidekiq).to receive(:options).and_return(timeout: 9)
+ end
+
+ it 'return true when everything is within limit' do
+ expect(memory_killer).to receive(:get_rss).and_return(100)
+ expect(memory_killer).to receive(:get_soft_limit_rss).and_return(200)
+ expect(memory_killer).to receive(:get_hard_limit_rss).and_return(300)
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:running)
+ .and_call_original
+
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time).and_call_original
+ expect(memory_killer).not_to receive(:log_rss_out_of_range)
+
+ expect(subject).to be true
+ end
+
+ it 'return false when rss exceeds hard_limit_rss' do
+ expect(memory_killer).to receive(:get_rss).at_least(:once).and_return(400)
+ expect(memory_killer).to receive(:get_soft_limit_rss).at_least(:once).and_return(200)
+ expect(memory_killer).to receive(:get_hard_limit_rss).at_least(:once).and_return(300)
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:running)
+ .and_call_original
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:above_soft_limit)
+ .and_call_original
+
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time).and_call_original
+
+ expect(memory_killer).to receive(:log_rss_out_of_range).with(400, 300, 200)
+
+ expect(subject).to be false
+ end
+
+ it 'return false when rss exceed hard_limit_rss after a while' do
+ expect(memory_killer).to receive(:get_rss).and_return(250, 400, 400)
+ expect(memory_killer).to receive(:get_soft_limit_rss).at_least(:once).and_return(200)
+ expect(memory_killer).to receive(:get_hard_limit_rss).at_least(:once).and_return(300)
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:running)
+ .and_call_original
+
+ expect(memory_killer).to receive(:refresh_state)
+ .at_least(:once)
+ .with(:above_soft_limit)
+ .and_call_original
+
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time).twice.and_call_original
+ expect(memory_killer).to receive(:sleep).with(check_interval_seconds)
+ expect(memory_killer).to receive(:log_rss_out_of_range).with(400, 300, 200)
+
+ expect(subject).to be false
+ end
+
+ it 'return true when rss below soft_limit_rss after a while within GRACE_BALLOON_SECONDS' do
+ expect(memory_killer).to receive(:get_rss).and_return(250, 100)
+ expect(memory_killer).to receive(:get_soft_limit_rss).and_return(200, 200)
+ expect(memory_killer).to receive(:get_hard_limit_rss).and_return(300, 300)
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:running)
+ .and_call_original
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:above_soft_limit)
+ .and_call_original
+
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time).twice.and_call_original
+ expect(memory_killer).to receive(:sleep).with(check_interval_seconds)
+
+ expect(memory_killer).not_to receive(:log_rss_out_of_range)
+
+ expect(subject).to be true
+ end
+
+ context 'when exceeding GRACE_BALLOON_SECONDS' do
+ let(:grace_balloon_seconds) { 0 }
+
+ it 'return false when rss exceed soft_limit_rss' do
+ allow(memory_killer).to receive(:get_rss).and_return(250)
+ allow(memory_killer).to receive(:get_soft_limit_rss).and_return(200)
+ allow(memory_killer).to receive(:get_hard_limit_rss).and_return(300)
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:running)
+ .and_call_original
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:above_soft_limit)
+ .and_call_original
+
+ expect(memory_killer).to receive(:log_rss_out_of_range)
+ .with(250, 300, 200)
+
+ expect(subject).to be false
+ end
+ end
+ end
+
+ describe '#restart_sidekiq' do
+ let(:shutdown_timeout_seconds) { 7 }
+
+ subject { memory_killer.send(:restart_sidekiq) }
+
+ before do
+ stub_const("#{described_class}::SHUTDOWN_TIMEOUT_SECONDS", shutdown_timeout_seconds)
+ allow(Sidekiq).to receive(:options).and_return(timeout: 9)
+ allow(memory_killer).to receive(:get_rss).and_return(100)
+ allow(memory_killer).to receive(:get_soft_limit_rss).and_return(200)
+ allow(memory_killer).to receive(:get_hard_limit_rss).and_return(300)
+ end
+
+ it 'send signal' do
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:stop_fetching_new_jobs)
+ .ordered
+ .and_call_original
+ expect(memory_killer).to receive(:signal_and_wait)
+ .with(shutdown_timeout_seconds, 'SIGTSTP', 'stop fetching new jobs')
+ .ordered
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:shutting_down)
+ .ordered
+ .and_call_original
+ expect(memory_killer).to receive(:signal_and_wait)
+ .with(11, 'SIGTERM', 'gracefully shut down')
+ .ordered
+
+ expect(memory_killer).to receive(:refresh_state)
+ .with(:killing_sidekiq)
+ .ordered
+ .and_call_original
+ expect(memory_killer).to receive(:signal_pgroup)
+ .with('SIGKILL', 'die')
+ .ordered
+
+ subject
+ end
+ end
+
+ describe '#signal_and_wait' do
+ let(:time) { 0 }
+ let(:signal) { 'my-signal' }
+ let(:explanation) { 'my-explanation' }
+ let(:check_interval_seconds) { 2 }
+
+ subject { memory_killer.send(:signal_and_wait, time, signal, explanation) }
+
+ before do
+ stub_const("#{described_class}::CHECK_INTERVAL_SECONDS", check_interval_seconds)
+ end
+
+ it 'send signal and return when all jobs finished' do
+ expect(Process).to receive(:kill).with(signal, pid).ordered
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time).and_call_original
+
+ expect(memory_killer).to receive(:enabled?).and_return(true)
+ expect(memory_killer).to receive(:any_jobs?).and_return(false)
+
+ expect(memory_killer).not_to receive(:sleep)
+
+ subject
+ end
+
+ it 'send signal and wait till deadline if any job not finished' do
+ expect(Process).to receive(:kill)
+ .with(signal, pid)
+ .ordered
+
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time)
+ .and_call_original
+ .at_least(:once)
+
+ expect(memory_killer).to receive(:enabled?).and_return(true).at_least(:once)
+ expect(memory_killer).to receive(:any_jobs?).and_return(true).at_least(:once)
+
+ subject
+ end
+ end
+
+ describe '#signal_pgroup' do
+ let(:signal) { 'my-signal' }
+ let(:explanation) { 'my-explanation' }
+
+ subject { memory_killer.send(:signal_pgroup, signal, explanation) }
+
+ it 'send signal to this proces if it is not group leader' do
+ expect(Process).to receive(:getpgrp).and_return(pid + 1)
+
+ expect(Sidekiq.logger).to receive(:warn).once
+ .with(
+ class: described_class.to_s,
+ signal: signal,
+ pid: pid,
+ message: "sending Sidekiq worker PID-#{pid} #{signal} (#{explanation})")
+ expect(Process).to receive(:kill).with(signal, pid).ordered
+
+ subject
+ end
+
+ it 'send signal to whole process group as group leader' do
+ expect(Process).to receive(:getpgrp).and_return(pid)
+
+ expect(Sidekiq.logger).to receive(:warn).once
+ .with(
+ class: described_class.to_s,
+ signal: signal,
+ pid: pid,
+ message: "sending Sidekiq worker PGRP-#{pid} #{signal} (#{explanation})")
+ expect(Process).to receive(:kill).with(signal, 0).ordered
+
+ subject
+ end
+ end
+
+ describe '#log_rss_out_of_range' do
+ let(:current_rss) { 100 }
+ let(:soft_limit_rss) { 200 }
+ let(:hard_limit_rss) { 300 }
+ let(:reason) { 'rss out of range reason description' }
+
+ subject { memory_killer.send(:log_rss_out_of_range, current_rss, hard_limit_rss, soft_limit_rss) }
+
+ it 'invoke sidekiq logger warn' do
+ expect(memory_killer).to receive(:out_of_range_description).with(current_rss, hard_limit_rss, soft_limit_rss).and_return(reason)
+ expect(Sidekiq.logger).to receive(:warn)
+ .with(
+ class: described_class.to_s,
+ pid: pid,
+ message: 'Sidekiq worker RSS out of range',
+ current_rss: current_rss,
+ hard_limit_rss: hard_limit_rss,
+ soft_limit_rss: soft_limit_rss,
+ reason: reason)
+
+ subject
+ end
+ end
+
+ describe '#out_of_range_description' do
+ let(:hard_limit) { 300 }
+ let(:soft_limit) { 200 }
+ let(:grace_balloon_seconds) { 12 }
+
+ subject { memory_killer.send(:out_of_range_description, rss, hard_limit, soft_limit) }
+
+ context 'when rss > hard_limit' do
+ let(:rss) { 400 }
+
+ it 'tells reason' do
+ expect(subject).to eq("current_rss(#{rss}) > hard_limit_rss(#{hard_limit})")
+ end
+ end
+
+ context 'when rss <= hard_limit' do
+ let(:rss) { 300 }
+
+ it 'tells reason' do
+ stub_const("#{described_class}::GRACE_BALLOON_SECONDS", grace_balloon_seconds)
+ expect(subject).to eq("current_rss(#{rss}) > soft_limit_rss(#{soft_limit}) longer than GRACE_BALLOON_SECONDS(#{grace_balloon_seconds})")
+ end
+ end
+ end
+
+ describe '#rss_increase_by_jobs' do
+ let(:running_jobs) { { id1: 'job1', id2: 'job2' } }
+
+ subject { memory_killer.send(:rss_increase_by_jobs) }
+
+ it 'adds up individual rss_increase_by_job' do
+ expect(Gitlab::SidekiqDaemon::Monitor).to receive_message_chain(:instance, :jobs).and_return(running_jobs)
+ expect(memory_killer).to receive(:rss_increase_by_job).and_return(11, 22)
+ expect(subject).to eq(33)
+ end
+
+ it 'return 0 if no job' do
+ expect(Gitlab::SidekiqDaemon::Monitor).to receive_message_chain(:instance, :jobs).and_return({})
+ expect(subject).to eq(0)
+ end
+ end
+
+ describe '#rss_increase_by_job' do
+ let(:worker_class) { Chaos::SleepWorker }
+ let(:job) { { worker_class: worker_class, started_at: 321 } }
+ let(:max_memory_kb) { 100000 }
+
+ subject { memory_killer.send(:rss_increase_by_job, job) }
+
+ before do
+ stub_const("#{described_class}::DEFAULT_MAX_MEMORY_GROWTH_KB", max_memory_kb)
+ end
+
+ it 'return 0 if memory_growth_kb return 0' do
+ expect(memory_killer).to receive(:get_job_options).with(job, 'memory_killer_memory_growth_kb', 0).and_return(0)
+ expect(memory_killer).to receive(:get_job_options).with(job, 'memory_killer_max_memory_growth_kb', max_memory_kb).and_return(0)
+
+ expect(Time).not_to receive(:now)
+ expect(subject).to eq(0)
+ end
+
+ it 'return time factored growth value when it does not exceed max growth limit for whilited job' do
+ expect(memory_killer).to receive(:get_job_options).with(job, 'memory_killer_memory_growth_kb', 0).and_return(10)
+ expect(memory_killer).to receive(:get_job_options).with(job, 'memory_killer_max_memory_growth_kb', max_memory_kb).and_return(100)
+
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time).and_return(323)
+ expect(subject).to eq(20)
+ end
+
+ it 'return max growth limit when time factored growth value exceed max growth limit for whilited job' do
+ expect(memory_killer).to receive(:get_job_options).with(job, 'memory_killer_memory_growth_kb', 0).and_return(10)
+ expect(memory_killer).to receive(:get_job_options).with(job, 'memory_killer_max_memory_growth_kb', max_memory_kb).and_return(100)
+
+ expect(Gitlab::Metrics::System).to receive(:monotonic_time).and_return(332)
+ expect(subject).to eq(100)
+ end
+ end
+
+ describe '#get_job_options' do
+ let(:worker_class) { Chaos::SleepWorker }
+ let(:job) { { worker_class: worker_class, started_at: 321 } }
+ let(:key) { 'my-key' }
+ let(:default) { 'my-default' }
+
+ subject { memory_killer.send(:get_job_options, job, key, default) }
+
+ it 'return default if key is not defined' do
+ expect(worker_class).to receive(:sidekiq_options).and_return({ "retry" => 5 })
+
+ expect(subject).to eq(default)
+ end
+
+ it 'return default if get StandardError when retrieve sidekiq_options' do
+ expect(worker_class).to receive(:sidekiq_options).and_raise(StandardError)
+
+ expect(subject).to eq(default)
+ end
+
+ it 'return right value if sidekiq_options has the key' do
+ expect(worker_class).to receive(:sidekiq_options).and_return({ key => 10 })
+
+ expect(subject).to eq(10)
+ end
+ end
+
+ describe '#refresh_state' do
+ let(:metrics) { memory_killer.instance_variable_get(:@metrics) }
+
+ subject { memory_killer.send(:refresh_state, :shutting_down) }
+
+ it 'calls gitlab metrics gauge set methods' do
+ expect(memory_killer).to receive(:get_rss) { 1010 }
+ expect(memory_killer).to receive(:get_soft_limit_rss) { 1020 }
+ expect(memory_killer).to receive(:get_hard_limit_rss) { 1040 }
+
+ expect(metrics[:sidekiq_memory_killer_phase]).to receive(:set)
+ .with({}, described_class::PHASE[:shutting_down])
+ expect(metrics[:sidekiq_current_rss]).to receive(:set)
+ .with({}, 1010)
+ expect(metrics[:sidekiq_memory_killer_soft_limit_rss]).to receive(:set)
+ .with({}, 1020)
+ expect(metrics[:sidekiq_memory_killer_hard_limit_rss]).to receive(:set)
+ .with({}, 1040)
+
+ subject
+ end
+ end
+end
diff --git a/spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb b/spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb
index acbb09e3542..3f49ef0e9a7 100644
--- a/spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb
+++ b/spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb
@@ -8,12 +8,12 @@ describe Gitlab::SidekiqDaemon::Monitor do
describe '#within_job' do
it 'tracks thread' do
blk = proc do
- expect(monitor.jobs_thread['jid']).not_to be_nil
+ expect(monitor.jobs.dig('jid', :thread)).not_to be_nil
"OK"
end
- expect(monitor.within_job('jid', 'queue', &blk)).to eq("OK")
+ expect(monitor.within_job('worker_class', 'jid', 'queue', &blk)).to eq("OK")
end
context 'when job is canceled' do
@@ -25,26 +25,42 @@ describe Gitlab::SidekiqDaemon::Monitor do
it 'does not execute a block' do
expect do |blk|
- monitor.within_job(jid, 'queue', &blk)
+ monitor.within_job('worker_class', jid, 'queue', &blk)
rescue described_class::CancelledError
end.not_to yield_control
end
it 'raises exception' do
- expect { monitor.within_job(jid, 'queue') }.to raise_error(
+ expect { monitor.within_job('worker_class', jid, 'queue') }.to raise_error(
described_class::CancelledError)
end
end
end
- describe '#start_working' do
- subject { monitor.send(:start_working) }
+ describe '#run_thread when notification channel not enabled' do
+ subject { monitor.send(:run_thread) }
+
+ it 'return directly' do
+ allow(monitor).to receive(:notification_channel_enabled?).and_return(nil)
+
+ expect(Sidekiq.logger).not_to receive(:info)
+ expect(Sidekiq.logger).not_to receive(:warn)
+ expect(monitor).not_to receive(:enabled?)
+ expect(monitor).not_to receive(:process_messages)
+
+ subject
+ end
+ end
+
+ describe '#run_thread when notification channel enabled' do
+ subject { monitor.send(:run_thread) }
before do
# we want to run at most once cycle
# we toggle `enabled?` flag after the first call
stub_const('Gitlab::SidekiqDaemon::Monitor::RECONNECT_TIME', 0)
allow(monitor).to receive(:enabled?).and_return(true, false)
+ allow(monitor).to receive(:notification_channel_enabled?).and_return(1)
allow(Sidekiq.logger).to receive(:info)
allow(Sidekiq.logger).to receive(:warn)
@@ -204,7 +220,7 @@ describe Gitlab::SidekiqDaemon::Monitor do
let(:thread) { Thread.new { sleep 1000 } }
before do
- monitor.jobs_thread[jid] = thread
+ monitor.jobs[jid] = { worker_class: 'worker_class', thread: thread, started_at: Time.now.to_i }
end
after do
@@ -258,4 +274,24 @@ describe Gitlab::SidekiqDaemon::Monitor do
subject
end
end
+
+ describe '#notification_channel_enabled?' do
+ subject { monitor.send(:notification_channel_enabled?) }
+
+ it 'return nil when SIDEKIQ_MONITOR_WORKER is not set' do
+ expect(subject).to be nil
+ end
+
+ it 'return nil when SIDEKIQ_MONITOR_WORKER set to 0' do
+ allow(ENV).to receive(:fetch).with('SIDEKIQ_MONITOR_WORKER', 0).and_return("0")
+
+ expect(subject).to be nil
+ end
+
+ it 'return 1 when SIDEKIQ_MONITOR_WORKER set to 1' do
+ allow(ENV).to receive(:fetch).with('SIDEKIQ_MONITOR_WORKER', 0).and_return("1")
+
+ expect(subject).to be 1
+ end
+ end
end
diff --git a/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb b/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb
new file mode 100644
index 00000000000..24b6090cb19
--- /dev/null
+++ b/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::SidekiqLogging::ExceptionHandler do
+ describe '#call' do
+ let(:job) do
+ {
+ "class" => "TestWorker",
+ "args" => [1234, 'hello'],
+ "retry" => false,
+ "queue" => "cronjob:test_queue",
+ "queue_namespace" => "cronjob",
+ "jid" => "da883554ee4fe414012f5f42",
+ "correlation_id" => 'cid'
+ }
+ end
+
+ let(:exception_message) { 'An error was thrown' }
+ let(:backtrace) { caller }
+ let(:exception) { RuntimeError.new(exception_message) }
+ let(:logger) { double }
+
+ before do
+ allow(Sidekiq).to receive(:logger).and_return(logger)
+ allow(exception).to receive(:backtrace).and_return(backtrace)
+ end
+
+ subject { described_class.new.call(exception, { context: 'Test', job: job }) }
+
+ it 'logs job data into root tree' do
+ expected_data = job.merge(
+ error_class: 'RuntimeError',
+ error_message: exception_message,
+ context: 'Test',
+ error_backtrace: Gitlab::Profiler.clean_backtrace(backtrace)
+ )
+
+ expect(logger).to receive(:warn).with(expected_data)
+
+ subject
+ end
+ end
+end
diff --git a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
index 1b89c094a6b..46fbc069efb 100644
--- a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
+++ b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
@@ -23,13 +23,15 @@ describe Gitlab::SidekiqLogging::StructuredLogger do
end
let(:logger) { double }
+ let(:clock_thread_cputime_start) { 0.222222299 }
+ let(:clock_thread_cputime_end) { 1.333333799 }
let(:start_payload) do
job.merge(
'message' => 'TestWorker JID-da883554ee4fe414012f5f42: start',
'job_status' => 'start',
'pid' => Process.pid,
- 'created_at' => created_at.iso8601(3),
- 'enqueued_at' => created_at.iso8601(3),
+ 'created_at' => created_at.iso8601(6),
+ 'enqueued_at' => created_at.iso8601(6),
'scheduling_latency_s' => scheduling_latency_s
)
end
@@ -38,16 +40,15 @@ describe Gitlab::SidekiqLogging::StructuredLogger do
'message' => 'TestWorker JID-da883554ee4fe414012f5f42: done: 0.0 sec',
'job_status' => 'done',
'duration' => 0.0,
- "completed_at" => timestamp.iso8601(3),
- "system_s" => 0.0,
- "user_s" => 0.0
+ "completed_at" => timestamp.iso8601(6),
+ "cpu_s" => 1.111112
)
end
let(:exception_payload) do
end_payload.merge(
'message' => 'TestWorker JID-da883554ee4fe414012f5f42: fail: 0.0 sec',
'job_status' => 'fail',
- 'error' => ArgumentError,
+ 'error_class' => 'ArgumentError',
'error_message' => 'some exception'
)
end
@@ -57,12 +58,7 @@ describe Gitlab::SidekiqLogging::StructuredLogger do
allow(subject).to receive(:current_time).and_return(timestamp.to_f)
- allow(Process).to receive(:times).and_return(
- stime: 0.0,
- utime: 0.0,
- cutime: 0.0,
- cstime: 0.0
- )
+ allow(Process).to receive(:clock_gettime).with(Process::CLOCK_THREAD_CPUTIME_ID).and_return(clock_thread_cputime_start, clock_thread_cputime_end)
end
subject { described_class.new }
@@ -86,7 +82,6 @@ describe Gitlab::SidekiqLogging::StructuredLogger do
it 'logs an exception in job' do
Timecop.freeze(timestamp) do
expect(logger).to receive(:info).with(start_payload)
- # This excludes the exception_backtrace
expect(logger).to receive(:warn).with(hash_including(exception_payload))
expect(subject).to receive(:log_job_start).and_call_original
expect(subject).to receive(:log_job_done).and_call_original
@@ -188,31 +183,22 @@ describe Gitlab::SidekiqLogging::StructuredLogger do
end
end
end
+ end
- def ctime(times)
- times[:cstime] + times[:cutime]
- end
+ describe '#add_time_keys!' do
+ let(:time) { { duration: 0.1231234, cputime: 1.2342345 } }
+ let(:payload) { { 'class' => 'my-class', 'message' => 'my-message', 'job_status' => 'my-job-status' } }
+ let(:current_utc_time) { '2019-09-23 10:00:58 UTC' }
+ let(:payload_with_time_keys) { { 'class' => 'my-class', 'message' => 'my-message', 'job_status' => 'my-job-status', 'duration' => 0.123123, 'cpu_s' => 1.234235, 'completed_at' => current_utc_time } }
- context 'with ctime value greater than 0' do
- let(:times_start) { { stime: 0.04999, utime: 0.0483, cstime: 0.0188, cutime: 0.0188 } }
- let(:times_end) { { stime: 0.0699, utime: 0.0699, cstime: 0.0399, cutime: 0.0399 } }
+ subject { described_class.new }
- before do
- end_payload['system_s'] = 0.02
- end_payload['user_s'] = 0.022
- end_payload['child_s'] = 0.042
+ it 'update payload correctly' do
+ expect(Time).to receive_message_chain(:now, :utc).and_return(current_utc_time)
- allow(Process).to receive(:times).and_return(times_start, times_end)
- end
+ subject.send(:add_time_keys!, time, payload)
- it 'logs with ctime data and other cpu data' do
- Timecop.freeze(timestamp) do
- expect(logger).to receive(:info).with(start_payload.except('args')).ordered
- expect(logger).to receive(:info).with(end_payload.except('args')).ordered
-
- subject.call(job, 'test_queue') { }
- end
- end
+ expect(payload).to eq(payload_with_time_keys)
end
end
end
diff --git a/spec/lib/gitlab/sidekiq_middleware/memory_killer_spec.rb b/spec/lib/gitlab/sidekiq_middleware/memory_killer_spec.rb
index bf3bc8e1add..b5be43ec96c 100644
--- a/spec/lib/gitlab/sidekiq_middleware/memory_killer_spec.rb
+++ b/spec/lib/gitlab/sidekiq_middleware/memory_killer_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe Gitlab::SidekiqMiddleware::MemoryKiller do
subject { described_class.new }
+
let(:pid) { 999 }
let(:worker) { double(:worker, class: ProjectCacheWorker) }
diff --git a/spec/lib/gitlab/sidekiq_middleware/metrics_spec.rb b/spec/lib/gitlab/sidekiq_middleware/metrics_spec.rb
index ac97a5ebd15..806112fcb16 100644
--- a/spec/lib/gitlab/sidekiq_middleware/metrics_spec.rb
+++ b/spec/lib/gitlab/sidekiq_middleware/metrics_spec.rb
@@ -8,12 +8,14 @@ describe Gitlab::SidekiqMiddleware::Metrics do
let(:worker) { double(:worker) }
let(:completion_seconds_metric) { double('completion seconds metric') }
+ let(:user_execution_seconds_metric) { double('user execution seconds metric') }
let(:failed_total_metric) { double('failed total metric') }
let(:retried_total_metric) { double('retried total metric') }
let(:running_jobs_metric) { double('running jobs metric') }
before do
allow(Gitlab::Metrics).to receive(:histogram).with(:sidekiq_jobs_completion_seconds, anything, anything, anything).and_return(completion_seconds_metric)
+ allow(Gitlab::Metrics).to receive(:histogram).with(:sidekiq_jobs_cpu_seconds, anything, anything, anything).and_return(user_execution_seconds_metric)
allow(Gitlab::Metrics).to receive(:counter).with(:sidekiq_jobs_failed_total, anything).and_return(failed_total_metric)
allow(Gitlab::Metrics).to receive(:counter).with(:sidekiq_jobs_retried_total, anything).and_return(retried_total_metric)
allow(Gitlab::Metrics).to receive(:gauge).with(:sidekiq_running_jobs, anything, {}, :livesum).and_return(running_jobs_metric)
@@ -23,13 +25,16 @@ describe Gitlab::SidekiqMiddleware::Metrics do
it 'yields block' do
allow(completion_seconds_metric).to receive(:observe)
+ allow(user_execution_seconds_metric).to receive(:observe)
expect { |b| middleware.call(worker, {}, :test, &b) }.to yield_control.once
end
it 'sets metrics' do
labels = { queue: :test }
+ allow(middleware).to receive(:get_thread_cputime).and_return(1, 3)
+ expect(user_execution_seconds_metric).to receive(:observe).with(labels, 2)
expect(running_jobs_metric).to receive(:increment).with(labels, 1)
expect(running_jobs_metric).to receive(:increment).with(labels, -1)
expect(completion_seconds_metric).to receive(:observe).with(labels, kind_of(Numeric))
@@ -37,9 +42,17 @@ describe Gitlab::SidekiqMiddleware::Metrics do
middleware.call(worker, {}, :test) { nil }
end
+ it 'ignore user execution when measured 0' do
+ allow(completion_seconds_metric).to receive(:observe)
+ allow(middleware).to receive(:get_thread_cputime).and_return(0, 0)
+
+ expect(user_execution_seconds_metric).not_to receive(:observe)
+ end
+
context 'when job is retried' do
it 'sets sidekiq_jobs_retried_total metric' do
allow(completion_seconds_metric).to receive(:observe)
+ expect(user_execution_seconds_metric).to receive(:observe)
expect(retried_total_metric).to receive(:increment)
diff --git a/spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb b/spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb
index 023df1a6391..398144025ea 100644
--- a/spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb
+++ b/spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb
@@ -12,7 +12,7 @@ describe Gitlab::SidekiqMiddleware::Monitor do
it 'calls Gitlab::SidekiqDaemon::Monitor' do
expect(Gitlab::SidekiqDaemon::Monitor.instance).to receive(:within_job)
- .with('job-id', 'my-queue')
+ .with(anything, 'job-id', 'my-queue')
.and_call_original
expect { |blk| monitor.call(worker, job, queue, &blk) }.to yield_control
diff --git a/spec/lib/gitlab/slash_commands/presenters/access_spec.rb b/spec/lib/gitlab/slash_commands/presenters/access_spec.rb
index f00039c634f..c7b83467660 100644
--- a/spec/lib/gitlab/slash_commands/presenters/access_spec.rb
+++ b/spec/lib/gitlab/slash_commands/presenters/access_spec.rb
@@ -3,6 +3,13 @@
require 'spec_helper'
describe Gitlab::SlashCommands::Presenters::Access do
+ shared_examples_for 'displays an error message' do
+ it do
+ expect(subject[:text]).to match(error_message)
+ expect(subject[:response_type]).to be(:ephemeral)
+ end
+ end
+
describe '#access_denied' do
let(:project) { build(:project) }
@@ -10,9 +17,18 @@ describe Gitlab::SlashCommands::Presenters::Access do
it { is_expected.to be_a(Hash) }
- it 'displays an error message' do
- expect(subject[:text]).to match('are not allowed')
- expect(subject[:response_type]).to be(:ephemeral)
+ it_behaves_like 'displays an error message' do
+ let(:error_message) { 'you do not have access to the GitLab project' }
+ end
+ end
+
+ describe '#deactivated' do
+ subject { described_class.new.deactivated }
+
+ it { is_expected.to be_a(Hash) }
+
+ it_behaves_like 'displays an error message' do
+ let(:error_message) { 'your account has been deactivated by your administrator' }
end
end
diff --git a/spec/lib/gitlab/snippet_search_results_spec.rb b/spec/lib/gitlab/snippet_search_results_spec.rb
index d3353b76c15..47f26fdebe2 100644
--- a/spec/lib/gitlab/snippet_search_results_spec.rb
+++ b/spec/lib/gitlab/snippet_search_results_spec.rb
@@ -6,18 +6,17 @@ describe Gitlab::SnippetSearchResults do
include SearchHelpers
let!(:snippet) { create(:snippet, content: 'foo', file_name: 'foo') }
-
- let(:results) { described_class.new(Snippet.all, 'foo') }
+ let(:results) { described_class.new(snippet.author, 'foo') }
describe '#snippet_titles_count' do
it 'returns the amount of matched snippet titles' do
- expect(results.snippet_titles_count).to eq(1)
+ expect(results.limited_snippet_titles_count).to eq(1)
end
end
describe '#snippet_blobs_count' do
it 'returns the amount of matched snippet blobs' do
- expect(results.snippet_blobs_count).to eq(1)
+ expect(results.limited_snippet_blobs_count).to eq(1)
end
end
@@ -25,10 +24,10 @@ describe Gitlab::SnippetSearchResults do
using RSpec::Parameterized::TableSyntax
where(:scope, :count_method, :expected) do
- 'snippet_titles' | :snippet_titles_count | '1234'
- 'snippet_blobs' | :snippet_blobs_count | '1234'
- 'projects' | :limited_projects_count | max_limited_count
- 'unknown' | nil | nil
+ 'snippet_titles' | :limited_snippet_titles_count | max_limited_count
+ 'snippet_blobs' | :limited_snippet_blobs_count | max_limited_count
+ 'projects' | :limited_projects_count | max_limited_count
+ 'unknown' | nil | nil
end
with_them do
diff --git a/spec/lib/gitlab/submodule_links_spec.rb b/spec/lib/gitlab/submodule_links_spec.rb
index d4420c5b513..f0c8825de74 100644
--- a/spec/lib/gitlab/submodule_links_spec.rb
+++ b/spec/lib/gitlab/submodule_links_spec.rb
@@ -8,7 +8,9 @@ describe Gitlab::SubmoduleLinks do
let(:links) { described_class.new(repo) }
describe '#for' do
- subject { links.for(submodule_item, 'ref') }
+ let(:ref) { 'ref' }
+
+ subject { links.for(submodule_item, ref) }
context 'when there is no .gitmodules file' do
before do
@@ -35,8 +37,20 @@ describe Gitlab::SubmoduleLinks do
stub_urls({ 'gitlab-foss' => 'git@gitlab.com:gitlab-org/gitlab-foss.git' })
end
- it 'returns links' do
+ it 'returns links and caches the by ref' do
expect(subject).to eq(['https://gitlab.com/gitlab-org/gitlab-foss', 'https://gitlab.com/gitlab-org/gitlab-foss/tree/hash'])
+
+ cache_store = links.instance_variable_get("@cache_store")
+
+ expect(cache_store[ref]).to eq({ "gitlab-foss" => "git@gitlab.com:gitlab-org/gitlab-foss.git" })
+ end
+
+ context 'when ref name contains a dash' do
+ let(:ref) { 'signed-commits' }
+
+ it 'returns links' do
+ expect(subject).to eq(['https://gitlab.com/gitlab-org/gitlab-foss', 'https://gitlab.com/gitlab-org/gitlab-foss/tree/hash'])
+ end
end
end
end
diff --git a/spec/lib/gitlab/tracking/incident_management_spec.rb b/spec/lib/gitlab/tracking/incident_management_spec.rb
new file mode 100644
index 00000000000..6f7e04b7c16
--- /dev/null
+++ b/spec/lib/gitlab/tracking/incident_management_spec.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Tracking::IncidentManagement do
+ describe '.track_from_params' do
+ shared_examples 'a tracked event' do |label, value = nil|
+ it 'creates the tracking event with the correct details' do
+ expect(::Gitlab::Tracking)
+ .to receive(:event)
+ .with(
+ 'IncidentManagement::Settings',
+ label,
+ value || kind_of(Hash)
+ )
+ end
+ end
+
+ after do
+ described_class.track_from_params(params)
+ end
+
+ context 'known params' do
+ known_params = described_class.tracking_keys
+
+ known_params.each do |key, values|
+ context "param #{key}" do
+ let(:params) { { key => '1' } }
+
+ it_behaves_like 'a tracked event', "enabled_#{known_params[key][:name]}"
+ end
+ end
+
+ context 'different input values' do
+ shared_examples 'the correct prefixed event name' do |input, enabled|
+ let(:params) { { issue_template_key: input } }
+
+ it 'matches' do
+ expect(::Gitlab::Tracking)
+ .to receive(:event)
+ .with(
+ anything,
+ "#{enabled}_issue_template_on_alerts",
+ anything
+ )
+ end
+ end
+
+ it_behaves_like 'the correct prefixed event name', 1, 'enabled'
+ it_behaves_like 'the correct prefixed event name', '1', 'enabled'
+ it_behaves_like 'the correct prefixed event name', 'template', 'enabled'
+ it_behaves_like 'the correct prefixed event name', '', 'disabled'
+ it_behaves_like 'the correct prefixed event name', nil, 'disabled'
+ end
+
+ context 'param with label' do
+ let(:params) { { issue_template_key: '1' } }
+
+ it_behaves_like 'a tracked event', "enabled_issue_template_on_alerts", { label: 'Template name', property: '1' }
+ end
+
+ context 'param without label' do
+ let(:params) { { create_issue: '1' } }
+
+ it_behaves_like 'a tracked event', "enabled_issue_auto_creation_on_alerts", {}
+ end
+ end
+
+ context 'unknown params' do
+ let(:params) { { 'unknown' => '1' } }
+
+ it 'does not create the tracking event' do
+ expect(::Gitlab::Tracking)
+ .not_to receive(:event)
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/tracking_spec.rb b/spec/lib/gitlab/tracking_spec.rb
index 3cce82e522b..50488dba48c 100644
--- a/spec/lib/gitlab/tracking_spec.rb
+++ b/spec/lib/gitlab/tracking_spec.rb
@@ -12,10 +12,8 @@ describe Gitlab::Tracking do
end
describe '.snowplow_options' do
- subject(&method(:described_class))
-
it 'returns useful client options' do
- expect(subject.snowplow_options(nil)).to eq(
+ expect(described_class.snowplow_options(nil)).to eq(
namespace: 'gl',
hostname: 'gitfoo.com',
cookieDomain: '.gitfoo.com',
@@ -32,25 +30,37 @@ describe Gitlab::Tracking do
'_group_'
).and_return(false)
- expect(subject.snowplow_options('_group_')).to include(
+ expect(described_class.snowplow_options('_group_')).to include(
formTracking: false,
linkClickTracking: false
)
end
end
- describe '.event' do
- subject(&method(:described_class))
+ describe 'tracking events' do
+ shared_examples 'events not tracked' do
+ it 'does not track events' do
+ stub_application_setting(snowplow_enabled: false)
+ expect(SnowplowTracker::AsyncEmitter).not_to receive(:new)
+ expect(SnowplowTracker::Tracker).not_to receive(:new)
+
+ track_event
+ end
+ end
around do |example|
Timecop.freeze(timestamp) { example.run }
end
- it 'can track events' do
- tracker = double
+ before do
+ described_class.instance_variable_set("@snowplow", nil)
+ end
- expect(SnowplowTracker::Emitter).to receive(:new).with(
- 'gitfoo.com'
+ let(:tracker) { double }
+
+ def receive_events
+ expect(SnowplowTracker::AsyncEmitter).to receive(:new).with(
+ 'gitfoo.com', { protocol: 'https' }
).and_return('_emitter_')
expect(SnowplowTracker::Tracker).to receive(:new).with(
@@ -59,30 +69,67 @@ describe Gitlab::Tracking do
'gl',
'_abc123_'
).and_return(tracker)
+ end
- expect(tracker).to receive(:track_struct_event).with(
- 'category',
- 'action',
- '_label_',
- '_property_',
- '_value_',
- '_context_',
- timestamp.to_i
- )
+ describe '.event' do
+ let(:track_event) do
+ described_class.event('category', 'action',
+ label: '_label_',
+ property: '_property_',
+ value: '_value_',
+ context: nil
+ )
+ end
- subject.event('category', 'action',
- label: '_label_',
- property: '_property_',
- value: '_value_',
- context: '_context_'
- )
+ it_behaves_like 'events not tracked'
+
+ it 'can track events' do
+ receive_events
+ expect(tracker).to receive(:track_struct_event).with(
+ 'category',
+ 'action',
+ '_label_',
+ '_property_',
+ '_value_',
+ nil,
+ timestamp.to_i
+ )
+
+ track_event
+ end
end
- it 'does not track when not enabled' do
- stub_application_setting(snowplow_enabled: false)
- expect(SnowplowTracker::Tracker).not_to receive(:new)
+ describe '.self_describing_event' do
+ let(:track_event) do
+ described_class.self_describing_event('iglu:com.gitlab/example/jsonschema/1-0-2',
+ {
+ foo: 'bar',
+ foo_count: 42
+ },
+ context: nil
+ )
+ end
+
+ it_behaves_like 'events not tracked'
+
+ it 'can track self describing events' do
+ receive_events
+ expect(SnowplowTracker::SelfDescribingJson).to receive(:new).with(
+ 'iglu:com.gitlab/example/jsonschema/1-0-2',
+ {
+ foo: 'bar',
+ foo_count: 42
+ }
+ ).and_return('_event_json_')
+
+ expect(tracker).to receive(:track_self_describing_event).with(
+ '_event_json_',
+ nil,
+ timestamp.to_i
+ )
- subject.event('epics', 'action', property: 'what', value: 'doit')
+ track_event
+ end
end
end
end
diff --git a/spec/lib/gitlab/url_blocker_spec.rb b/spec/lib/gitlab/url_blocker_spec.rb
index 0e66e959b24..a68ba489986 100644
--- a/spec/lib/gitlab/url_blocker_spec.rb
+++ b/spec/lib/gitlab/url_blocker_spec.rb
@@ -62,6 +62,14 @@ describe Gitlab::UrlBlocker do
expect { subject }.to raise_error(described_class::BlockedUrlError)
end
end
+
+ context 'when domain is too long' do
+ let(:import_url) { 'https://example' + 'a' * 1024 + '.com' }
+
+ it 'raises an error' do
+ expect { subject }.to raise_error(described_class::BlockedUrlError)
+ end
+ end
end
context 'when the URL hostname is an IP address' do
diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb
index 62787c5abaf..f2e864472c5 100644
--- a/spec/lib/gitlab/usage_data_spec.rb
+++ b/spec/lib/gitlab/usage_data_spec.rb
@@ -38,7 +38,7 @@ describe Gitlab::UsageData do
subject { described_class.data }
- it 'gathers usage data' do
+ it 'gathers usage data', :aggregate_failures do
expect(subject.keys).to include(*%i(
active_user_count
counts
@@ -55,6 +55,7 @@ describe Gitlab::UsageData do
omniauth_enabled
reply_by_email_enabled
container_registry_enabled
+ dependency_proxy_enabled
gitlab_shared_runners_enabled
gitlab_pages
git
@@ -63,31 +64,29 @@ describe Gitlab::UsageData do
avg_cycle_analytics
influxdb_metrics_enabled
prometheus_metrics_enabled
- cycle_analytics_views
- productivity_analytics_views
))
-
- expect(subject).to include(
- snippet_create: a_kind_of(Integer),
- snippet_update: a_kind_of(Integer),
- snippet_comment: a_kind_of(Integer),
- merge_request_comment: a_kind_of(Integer),
- merge_request_create: a_kind_of(Integer),
- commit_comment: a_kind_of(Integer),
- wiki_pages_create: a_kind_of(Integer),
- wiki_pages_update: a_kind_of(Integer),
- wiki_pages_delete: a_kind_of(Integer),
- web_ide_views: a_kind_of(Integer),
- web_ide_commits: a_kind_of(Integer),
- web_ide_merge_requests: a_kind_of(Integer),
- navbar_searches: a_kind_of(Integer),
- cycle_analytics_views: a_kind_of(Integer),
- productivity_analytics_views: a_kind_of(Integer),
- source_code_pushes: a_kind_of(Integer)
- )
end
it 'gathers usage counts' do
+ smau_keys = %i(
+ snippet_create
+ snippet_update
+ snippet_comment
+ merge_request_comment
+ merge_request_create
+ commit_comment
+ wiki_pages_create
+ wiki_pages_update
+ wiki_pages_delete
+ web_ide_views
+ web_ide_commits
+ web_ide_merge_requests
+ navbar_searches
+ cycle_analytics_views
+ productivity_analytics_views
+ source_code_pushes
+ )
+
expected_keys = %i(
assignee_lists
boards
@@ -152,18 +151,18 @@ describe Gitlab::UsageData do
todos
uploads
web_hooks
- user_preferences
- )
+ ).push(*smau_keys)
count_data = subject[:counts]
expect(count_data[:boards]).to eq(1)
expect(count_data[:projects]).to eq(4)
+ expect(count_data.values_at(*smau_keys)).to all(be_an(Integer))
expect(count_data.keys).to include(*expected_keys)
expect(expected_keys - count_data.keys).to be_empty
end
- it 'gathers projects data correctly' do
+ it 'gathers projects data correctly', :aggregate_failures do
count_data = subject[:counts]
expect(count_data[:projects]).to eq(4)
@@ -209,11 +208,8 @@ describe Gitlab::UsageData do
describe 'the results of calling #totals on all objects in the array' do
subject { described_class.usage_data_counters.map(&:totals) }
- it do
- is_expected
- .to all(be_a Hash)
- .and all(have_attributes(keys: all(be_a Symbol), values: all(be_a Integer)))
- end
+ it { is_expected.to all(be_a Hash) }
+ it { is_expected.to all(have_attributes(keys: all(be_a Symbol), values: all(be_a Integer))) }
end
it 'does not have any conflicts' do
@@ -226,7 +222,7 @@ describe Gitlab::UsageData do
describe '#features_usage_data_ce' do
subject { described_class.features_usage_data_ce }
- it 'gathers feature usage data' do
+ it 'gathers feature usage data', :aggregate_failures do
expect(subject[:mattermost_enabled]).to eq(Gitlab.config.mattermost.enabled)
expect(subject[:signup_enabled]).to eq(Gitlab::CurrentSettings.allow_signup?)
expect(subject[:ldap_enabled]).to eq(Gitlab.config.ldap.enabled)
@@ -234,6 +230,7 @@ describe Gitlab::UsageData do
expect(subject[:omniauth_enabled]).to eq(Gitlab::Auth.omniauth_enabled?)
expect(subject[:reply_by_email_enabled]).to eq(Gitlab::IncomingEmail.enabled?)
expect(subject[:container_registry_enabled]).to eq(Gitlab.config.registry.enabled)
+ expect(subject[:dependency_proxy_enabled]).to eq(Gitlab.config.dependency_proxy.enabled)
expect(subject[:gitlab_shared_runners_enabled]).to eq(Gitlab.config.gitlab_ci.shared_runners_enabled)
end
end
@@ -241,7 +238,7 @@ describe Gitlab::UsageData do
describe '#components_usage_data' do
subject { described_class.components_usage_data }
- it 'gathers components usage data' do
+ it 'gathers components usage data', :aggregate_failures do
expect(subject[:gitlab_pages][:enabled]).to eq(Gitlab.config.pages.enabled)
expect(subject[:gitlab_pages][:version]).to eq(Gitlab::Pages::VERSION)
expect(subject[:git][:version]).to eq(Gitlab::Git.version)
@@ -257,7 +254,7 @@ describe Gitlab::UsageData do
describe '#license_usage_data' do
subject { described_class.license_usage_data }
- it 'gathers license data' do
+ it 'gathers license data', :aggregate_failures do
expect(subject[:uuid]).to eq(Gitlab::CurrentSettings.uuid)
expect(subject[:version]).to eq(Gitlab::VERSION)
expect(subject[:installation_type]).to eq('gitlab-development-kit')
@@ -289,11 +286,11 @@ describe Gitlab::UsageData do
end
describe '#approximate_counts' do
- it 'gets approximate counts for selected models' do
+ it 'gets approximate counts for selected models', :aggregate_failures do
create(:label)
expect(Gitlab::Database::Count).to receive(:approximate_counts)
- .with(described_class::APPROXIMATE_COUNT_MODELS).once.and_call_original
+ .with(described_class::APPROXIMATE_COUNT_MODELS).once.and_call_original
counts = described_class.approximate_counts.values
@@ -301,14 +298,12 @@ describe Gitlab::UsageData do
expect(counts.any? { |count| count < 0 }).to be_falsey
end
- it 'returns default values if counts can not be retrieved' do
+ it 'returns default values if counts can not be retrieved', :aggregate_failures do
described_class::APPROXIMATE_COUNT_MODELS.map do |model|
model.name.underscore.pluralize.to_sym
end
- expect(Gitlab::Database::Count).to receive(:approximate_counts)
- .and_return({})
-
+ expect(Gitlab::Database::Count).to receive(:approximate_counts).and_return({})
expect(described_class.approximate_counts.values.uniq).to eq([-1])
end
end
diff --git a/spec/lib/gitlab/utils/inline_hash_spec.rb b/spec/lib/gitlab/utils/inline_hash_spec.rb
new file mode 100644
index 00000000000..867db0b92a5
--- /dev/null
+++ b/spec/lib/gitlab/utils/inline_hash_spec.rb
@@ -0,0 +1,70 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+
+describe Gitlab::Utils::InlineHash do
+ describe '.merge_keys' do
+ subject { described_class.merge_keys(source) }
+
+ let(:source) do
+ {
+ nested_param: {
+ key: :Value
+ },
+ 'root_param' => 'Root',
+ unnested_symbol_key: :unnested_symbol_value,
+ 12 => 22,
+ 'very' => {
+ 'deep' => {
+ 'nested' => {
+ 'param' => 'Deep nested value'
+ }
+ }
+ }
+ }
+ end
+
+ it 'transforms a nested hash into a one-level hash' do
+ is_expected.to eq(
+ 'nested_param.key' => :Value,
+ 'root_param' => 'Root',
+ :unnested_symbol_key => :unnested_symbol_value,
+ 12 => 22,
+ 'very.deep.nested.param' => 'Deep nested value'
+ )
+ end
+
+ it 'retains key insertion order' do
+ expect(subject.keys)
+ .to eq(['nested_param.key', 'root_param', :unnested_symbol_key, 12, 'very.deep.nested.param'])
+ end
+
+ context 'with a custom connector' do
+ subject { described_class.merge_keys(source, connector: '::') }
+
+ it 'uses the connector to merge keys' do
+ is_expected.to eq(
+ 'nested_param::key' => :Value,
+ 'root_param' => 'Root',
+ :unnested_symbol_key => :unnested_symbol_value,
+ 12 => 22,
+ 'very::deep::nested::param' => 'Deep nested value'
+ )
+ end
+ end
+
+ context 'with a starter prefix' do
+ subject { described_class.merge_keys(source, prefix: 'options') }
+
+ it 'prefixes all the keys' do
+ is_expected.to eq(
+ 'options.nested_param.key' => :Value,
+ 'options.root_param' => 'Root',
+ 'options.unnested_symbol_key' => :unnested_symbol_value,
+ 'options.12' => 22,
+ 'options.very.deep.nested.param' => 'Deep nested value'
+ )
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/utils/override_spec.rb b/spec/lib/gitlab/utils/override_spec.rb
index 5855c4374a9..e2776efac85 100644
--- a/spec/lib/gitlab/utils/override_spec.rb
+++ b/spec/lib/gitlab/utils/override_spec.rb
@@ -151,6 +151,7 @@ describe Gitlab::Utils::Override do
context 'when subject is a module, and class is prepending it' do
subject { extension }
+
let(:klass) { prepending_class }
it_behaves_like 'checking as intended'
@@ -158,6 +159,7 @@ describe Gitlab::Utils::Override do
context 'when subject is a module, and class is including it' do
subject { extension }
+
let(:klass) { including_class }
it_behaves_like 'checking as intended, nothing was overridden'
@@ -177,6 +179,7 @@ describe Gitlab::Utils::Override do
context 'when subject is a module, and class is prepending it' do
subject { extension }
+
let(:klass) { prepending_class }
it_behaves_like 'nothing happened'
@@ -184,6 +187,7 @@ describe Gitlab::Utils::Override do
context 'when subject is a module, and class is including it' do
subject { extension }
+
let(:klass) { including_class }
it 'does not complain when it is overriding something' do
@@ -215,6 +219,7 @@ describe Gitlab::Utils::Override do
context 'when subject is a module, and class is prepending it' do
subject { extension }
+
let(:klass) { prepending_class_methods }
it_behaves_like 'checking as intended'
@@ -222,6 +227,7 @@ describe Gitlab::Utils::Override do
context 'when subject is a module, and class is extending it' do
subject { extension }
+
let(:klass) { extending_class_methods }
it_behaves_like 'checking as intended, nothing was overridden'
diff --git a/spec/lib/gitlab/utils/safe_inline_hash_spec.rb b/spec/lib/gitlab/utils/safe_inline_hash_spec.rb
new file mode 100644
index 00000000000..617845332bc
--- /dev/null
+++ b/spec/lib/gitlab/utils/safe_inline_hash_spec.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+
+describe Gitlab::Utils::SafeInlineHash do
+ describe '.merge_keys!' do
+ let(:source) { { 'foo' => { 'bar' => 'baz' } } }
+ let(:validator) { instance_double(Gitlab::Utils::DeepSize, valid?: valid) }
+
+ subject { described_class.merge_keys!(source, prefix: 'safe', connector: '::') }
+
+ before do
+ allow(Gitlab::Utils::DeepSize)
+ .to receive(:new)
+ .with(source)
+ .and_return(validator)
+ end
+
+ context 'when hash is too big' do
+ let(:valid) { false }
+
+ it 'raises an exception' do
+ expect { subject }.to raise_error ArgumentError, 'The Hash is too big'
+ end
+ end
+
+ context 'when hash has an acceptaable size' do
+ let(:valid) { true }
+
+ it 'returns a result of InlineHash' do
+ is_expected.to eq('safe::foo::bar' => 'baz')
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/utils/sanitize_node_link_spec.rb b/spec/lib/gitlab/utils/sanitize_node_link_spec.rb
index 80b0935a7ed..dd379f2fe1f 100644
--- a/spec/lib/gitlab/utils/sanitize_node_link_spec.rb
+++ b/spec/lib/gitlab/utils/sanitize_node_link_spec.rb
@@ -43,6 +43,11 @@ describe Gitlab::Utils::SanitizeNodeLink do
doc: HTML::Pipeline.parse("<video><source src='#{scheme}alert(1);'></video>"),
attr: "src",
node_to_check: -> (doc) { doc.children.first.children.filter("source").first }
+ },
+ audio: {
+ doc: HTML::Pipeline.parse("<audio><source src='#{scheme}alert(1);'></audio>"),
+ attr: "src",
+ node_to_check: -> (doc) { doc.children.first.children.filter("source").first }
}
}
diff --git a/spec/lib/gitlab_spec.rb b/spec/lib/gitlab_spec.rb
index ccb5cb3aa43..6bf837f1d3f 100644
--- a/spec/lib/gitlab_spec.rb
+++ b/spec/lib/gitlab_spec.rb
@@ -146,6 +146,7 @@ describe Gitlab do
describe '.ee?' do
before do
+ stub_env('FOSS_ONLY', nil) # Make sure the ENV is clean
described_class.instance_variable_set(:@is_ee, nil)
end
@@ -153,42 +154,66 @@ describe Gitlab do
described_class.instance_variable_set(:@is_ee, nil)
end
- it 'returns true when using Enterprise Edition' do
- root = Pathname.new('dummy')
- license_path = double(:path, exist?: true)
+ context 'for EE' do
+ before do
+ root = Pathname.new('dummy')
+ license_path = double(:path, exist?: true)
- allow(described_class)
- .to receive(:root)
- .and_return(root)
+ allow(described_class)
+ .to receive(:root)
+ .and_return(root)
- allow(root)
- .to receive(:join)
- .with('ee/app/models/license.rb')
- .and_return(license_path)
+ allow(root)
+ .to receive(:join)
+ .with('ee/app/models/license.rb')
+ .and_return(license_path)
+ end
- expect(described_class.ee?).to eq(true)
- end
+ context 'when using FOSS_ONLY=1' do
+ before do
+ stub_env('FOSS_ONLY', '1')
+ end
- it 'returns false when using Community Edition' do
- root = double(:path)
- license_path = double(:path, exists?: false)
+ it 'returns not to be EE' do
+ expect(described_class).not_to be_ee
+ end
+ end
- allow(described_class)
- .to receive(:root)
- .and_return(Pathname.new('dummy'))
+ context 'when using FOSS_ONLY=0' do
+ before do
+ stub_env('FOSS_ONLY', '0')
+ end
- allow(root)
- .to receive(:join)
- .with('ee/app/models/license.rb')
- .and_return(license_path)
+ it 'returns to be EE' do
+ expect(described_class).to be_ee
+ end
+ end
- expect(described_class.ee?).to eq(false)
+ context 'when using default FOSS_ONLY' do
+ it 'returns to be EE' do
+ expect(described_class).to be_ee
+ end
+ end
end
- it 'returns true when the IS_GITLAB_EE variable is not empty' do
- stub_env('IS_GITLAB_EE', '1')
+ context 'for CE' do
+ before do
+ root = double(:path)
+ license_path = double(:path, exists?: false)
- expect(described_class.ee?).to eq(true)
+ allow(described_class)
+ .to receive(:root)
+ .and_return(Pathname.new('dummy'))
+
+ allow(root)
+ .to receive(:join)
+ .with('ee/app/models/license.rb')
+ .and_return(license_path)
+ end
+
+ it 'returns not to be EE' do
+ expect(described_class).not_to be_ee
+ end
end
end
diff --git a/spec/lib/google_api/cloud_platform/client_spec.rb b/spec/lib/google_api/cloud_platform/client_spec.rb
index c24998d32f8..0f7f57095df 100644
--- a/spec/lib/google_api/cloud_platform/client_spec.rb
+++ b/spec/lib/google_api/cloud_platform/client_spec.rb
@@ -54,6 +54,7 @@ describe GoogleApi::CloudPlatform::Client do
describe '#projects_zones_clusters_get' do
subject { client.projects_zones_clusters_get(spy, spy, spy) }
+
let(:gke_cluster) { double }
before do
@@ -68,7 +69,7 @@ describe GoogleApi::CloudPlatform::Client do
describe '#projects_zones_clusters_create' do
subject do
client.projects_zones_clusters_create(
- project_id, zone, cluster_name, cluster_size, machine_type: machine_type, legacy_abac: legacy_abac)
+ project_id, zone, cluster_name, cluster_size, machine_type: machine_type, legacy_abac: legacy_abac, enable_addons: enable_addons)
end
let(:project_id) { 'project-123' }
@@ -77,39 +78,54 @@ describe GoogleApi::CloudPlatform::Client do
let(:cluster_size) { 1 }
let(:machine_type) { 'n1-standard-2' }
let(:legacy_abac) { true }
- let(:create_cluster_request_body) { double('Google::Apis::ContainerV1::CreateClusterRequest') }
+ let(:enable_addons) { [] }
+
+ let(:addons_config) do
+ enable_addons.each_with_object({}) do |addon, hash|
+ hash[addon] = { disabled: false }
+ end
+ end
+
+ let(:cluster_options) do
+ {
+ cluster: {
+ name: cluster_name,
+ initial_node_count: cluster_size,
+ node_config: {
+ machine_type: machine_type
+ },
+ master_auth: {
+ username: 'admin',
+ client_certificate_config: {
+ issue_client_certificate: true
+ }
+ },
+ legacy_abac: {
+ enabled: legacy_abac
+ },
+ ip_allocation_policy: {
+ use_ip_aliases: true
+ },
+ addons_config: addons_config
+ }
+ }
+ end
+
+ let(:create_cluster_request_body) { double('Google::Apis::ContainerV1beta1::CreateClusterRequest') }
let(:operation) { double }
before do
- allow_any_instance_of(Google::Apis::ContainerV1::ContainerService)
+ allow_any_instance_of(Google::Apis::ContainerV1beta1::ContainerService)
.to receive(:create_cluster).with(any_args)
.and_return(operation)
end
it 'sets corresponded parameters' do
- expect_any_instance_of(Google::Apis::ContainerV1::ContainerService)
+ expect_any_instance_of(Google::Apis::ContainerV1beta1::ContainerService)
.to receive(:create_cluster).with(project_id, zone, create_cluster_request_body, options: user_agent_options)
- expect(Google::Apis::ContainerV1::CreateClusterRequest)
- .to receive(:new).with(
- {
- "cluster": {
- "name": cluster_name,
- "initial_node_count": cluster_size,
- "node_config": {
- "machine_type": machine_type
- },
- "master_auth": {
- "username": "admin",
- "client_certificate_config": {
- issue_client_certificate: true
- }
- },
- "legacy_abac": {
- "enabled": true
- }
- }
- } ).and_return(create_cluster_request_body)
+ expect(Google::Apis::ContainerV1beta1::CreateClusterRequest)
+ .to receive(:new).with(cluster_options).and_return(create_cluster_request_body)
expect(subject).to eq operation
end
@@ -118,29 +134,25 @@ describe GoogleApi::CloudPlatform::Client do
let(:legacy_abac) { false }
it 'sets corresponded parameters' do
- expect_any_instance_of(Google::Apis::ContainerV1::ContainerService)
+ expect_any_instance_of(Google::Apis::ContainerV1beta1::ContainerService)
+ .to receive(:create_cluster).with(project_id, zone, create_cluster_request_body, options: user_agent_options)
+
+ expect(Google::Apis::ContainerV1beta1::CreateClusterRequest)
+ .to receive(:new).with(cluster_options).and_return(create_cluster_request_body)
+
+ expect(subject).to eq operation
+ end
+ end
+
+ context 'create with enable_addons for cloud_run' do
+ let(:enable_addons) { [:http_load_balancing, :istio_config, :cloud_run_config] }
+
+ it 'sets corresponded parameters' do
+ expect_any_instance_of(Google::Apis::ContainerV1beta1::ContainerService)
.to receive(:create_cluster).with(project_id, zone, create_cluster_request_body, options: user_agent_options)
- expect(Google::Apis::ContainerV1::CreateClusterRequest)
- .to receive(:new).with(
- {
- "cluster": {
- "name": cluster_name,
- "initial_node_count": cluster_size,
- "node_config": {
- "machine_type": machine_type
- },
- "master_auth": {
- "username": "admin",
- "client_certificate_config": {
- issue_client_certificate: true
- }
- },
- "legacy_abac": {
- "enabled": false
- }
- }
- } ).and_return(create_cluster_request_body)
+ expect(Google::Apis::ContainerV1beta1::CreateClusterRequest)
+ .to receive(:new).with(cluster_options).and_return(create_cluster_request_body)
expect(subject).to eq operation
end
@@ -149,6 +161,7 @@ describe GoogleApi::CloudPlatform::Client do
describe '#projects_zones_operations' do
subject { client.projects_zones_operations(spy, spy, spy) }
+
let(:operation) { double }
before do
diff --git a/spec/lib/grafana/client_spec.rb b/spec/lib/grafana/client_spec.rb
new file mode 100644
index 00000000000..bd93a3c59a2
--- /dev/null
+++ b/spec/lib/grafana/client_spec.rb
@@ -0,0 +1,107 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Grafana::Client do
+ let(:grafana_url) { 'https://grafanatest.com/-/grafana-project' }
+ let(:token) { 'test-token' }
+
+ subject(:client) { described_class.new(api_url: grafana_url, token: token) }
+
+ shared_examples 'calls grafana api' do
+ let!(:grafana_api_request) { stub_grafana_request(grafana_api_url) }
+
+ it 'calls grafana api' do
+ subject
+
+ expect(grafana_api_request).to have_been_requested
+ end
+ end
+
+ shared_examples 'no redirects' do
+ let(:redirect_to) { 'https://redirected.example.com' }
+ let(:other_url) { 'https://grafana.example.org' }
+
+ let!(:redirected_req_stub) { stub_grafana_request(other_url) }
+
+ let!(:redirect_req_stub) do
+ stub_grafana_request(
+ grafana_api_url,
+ status: 302,
+ headers: { location: redirect_to }
+ )
+ end
+
+ it 'does not follow redirects' do
+ expect { subject }.to raise_exception(
+ Grafana::Client::Error,
+ 'Grafana response status code: 302'
+ )
+
+ expect(redirect_req_stub).to have_been_requested
+ expect(redirected_req_stub).not_to have_been_requested
+ end
+ end
+
+ shared_examples 'handles exceptions' do
+ exceptions = {
+ Gitlab::HTTP::Error => 'Error when connecting to Grafana',
+ Net::OpenTimeout => 'Connection to Grafana timed out',
+ SocketError => 'Received SocketError when trying to connect to Grafana',
+ OpenSSL::SSL::SSLError => 'Grafana returned invalid SSL data',
+ Errno::ECONNREFUSED => 'Connection refused',
+ StandardError => 'Grafana request failed due to StandardError'
+ }
+
+ exceptions.each do |exception, message|
+ context "#{exception}" do
+ before do
+ stub_request(:get, grafana_api_url).to_raise(exception)
+ end
+
+ it do
+ expect { subject }
+ .to raise_exception(Grafana::Client::Error, message)
+ end
+ end
+ end
+ end
+
+ describe '#proxy_datasource' do
+ let(:grafana_api_url) do
+ 'https://grafanatest.com/-/grafana-project/' \
+ 'api/datasources/proxy/' \
+ '1/api/v1/query_range' \
+ '?query=rate(relevant_metric)' \
+ '&start=1570441248&end=1570444848&step=900'
+ end
+
+ subject do
+ client.proxy_datasource(
+ datasource_id: '1',
+ proxy_path: 'api/v1/query_range',
+ query: {
+ query: 'rate(relevant_metric)',
+ start: 1570441248,
+ end: 1570444848,
+ step: 900
+ }
+ )
+ end
+
+ it_behaves_like 'calls grafana api'
+ it_behaves_like 'no redirects'
+ it_behaves_like 'handles exceptions'
+ end
+
+ private
+
+ def stub_grafana_request(url, body: {}, status: 200, headers: {})
+ stub_request(:get, url)
+ .to_return(
+ status: status,
+ headers: { 'Content-Type' => 'application/json' }.merge(headers),
+ body: body.to_json
+ )
+ end
+end
diff --git a/spec/lib/json_web_token/token_spec.rb b/spec/lib/json_web_token/token_spec.rb
index 916d11ce0ed..ca587a6ebcd 100644
--- a/spec/lib/json_web_token/token_spec.rb
+++ b/spec/lib/json_web_token/token_spec.rb
@@ -16,6 +16,7 @@ describe JSONWebToken::Token do
context 'embeds default payload' do
subject { token.payload }
+
let(:default) { token.send(:default_payload) }
it { is_expected.to include(default) }
diff --git a/spec/lib/omni_auth/strategies/jwt_spec.rb b/spec/lib/omni_auth/strategies/jwt_spec.rb
index bdf3ea6be98..a8c565aa705 100644
--- a/spec/lib/omni_auth/strategies/jwt_spec.rb
+++ b/spec/lib/omni_auth/strategies/jwt_spec.rb
@@ -8,6 +8,7 @@ describe OmniAuth::Strategies::Jwt do
context '#decoded' do
subject { described_class.new({}) }
+
let(:timestamp) { Time.now.to_i }
let(:jwt_config) { Devise.omniauth_configs[:jwt] }
let(:claims) do
diff --git a/spec/lib/quality/test_level_spec.rb b/spec/lib/quality/test_level_spec.rb
index 59870ce44a7..4db188bd8f2 100644
--- a/spec/lib/quality/test_level_spec.rb
+++ b/spec/lib/quality/test_level_spec.rb
@@ -4,6 +4,20 @@ require 'fast_spec_helper'
RSpec.describe Quality::TestLevel do
describe '#pattern' do
+ context 'when level is all' do
+ it 'returns a pattern' do
+ expect(subject.pattern(:all))
+ .to eq("spec/**{,/**/}*_spec.rb")
+ end
+ end
+
+ context 'when level is geo' do
+ it 'returns a pattern' do
+ expect(subject.pattern(:geo))
+ .to eq("spec/**{,/**/}*_spec.rb")
+ end
+ end
+
context 'when level is unit' do
it 'returns a pattern' do
expect(subject.pattern(:unit))
@@ -44,6 +58,20 @@ RSpec.describe Quality::TestLevel do
end
describe '#regexp' do
+ context 'when level is all' do
+ it 'returns a regexp' do
+ expect(subject.regexp(:all))
+ .to eq(%r{spec/})
+ end
+ end
+
+ context 'when level is geo' do
+ it 'returns a regexp' do
+ expect(subject.regexp(:geo))
+ .to eq(%r{spec/})
+ end
+ end
+
context 'when level is unit' do
it 'returns a regexp' do
expect(subject.regexp(:unit))
diff --git a/spec/lib/uploaded_file_spec.rb b/spec/lib/uploaded_file_spec.rb
index 2cb4727bd4b..2bbbd67b13c 100644
--- a/spec/lib/uploaded_file_spec.rb
+++ b/spec/lib/uploaded_file_spec.rb
@@ -72,16 +72,6 @@ describe UploadedFile do
end
end
- context 'when only remote id is specified' do
- let(:params) do
- { 'file.remote_id' => 'remote_id' }
- end
-
- it "raises an error" do
- expect { subject }.to raise_error(UploadedFile::InvalidPathError, /file is invalid/)
- end
- end
-
context 'when verifying allowed paths' do
let(:params) do
{ 'file.path' => temp_file.path }
@@ -120,6 +110,52 @@ describe UploadedFile do
end
end
+ describe '.initialize' do
+ context 'when no size is provided' do
+ it 'determine size from local path' do
+ file = described_class.new(temp_file.path)
+
+ expect(file.size).to eq(temp_file.size)
+ end
+
+ it 'raises an exception if is a remote file' do
+ expect do
+ described_class.new(nil, remote_id: 'id')
+ end.to raise_error(UploadedFile::UnknownSizeError, 'Unable to determine file size')
+ end
+ end
+
+ context 'when size is a number' do
+ let_it_be(:size) { 1.gigabyte }
+
+ it 'is overridden by the size of the local file' do
+ file = described_class.new(temp_file.path, size: size)
+
+ expect(file.size).to eq(temp_file.size)
+ end
+
+ it 'is respected if is a remote file' do
+ file = described_class.new(nil, remote_id: 'id', size: size)
+
+ expect(file.size).to eq(size)
+ end
+ end
+
+ context 'when size is a string' do
+ it 'is converted to a number' do
+ file = described_class.new(nil, remote_id: 'id', size: '1')
+
+ expect(file.size).to eq(1)
+ end
+
+ it 'raises an exception if does not represent a number' do
+ expect do
+ described_class.new(nil, remote_id: 'id', size: 'not a number')
+ end.to raise_error(UploadedFile::UnknownSizeError, 'Unable to determine file size')
+ end
+ end
+ end
+
describe '#sanitize_filename' do
it { expect(described_class.new(temp_file.path).sanitize_filename('spaced name')).to eq('spaced_name') }
it { expect(described_class.new(temp_file.path).sanitize_filename('#$%^&')).to eq('_____') }
diff --git a/spec/mailers/emails/pipelines_spec.rb b/spec/mailers/emails/pipelines_spec.rb
new file mode 100644
index 00000000000..8d4afe9f00f
--- /dev/null
+++ b/spec/mailers/emails/pipelines_spec.rb
@@ -0,0 +1,69 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'email_spec'
+
+describe Emails::Pipelines do
+ include EmailSpec::Matchers
+
+ set(:project) { create(:project, :repository) }
+
+ shared_examples_for 'correct pipeline information' do
+ it 'has a correct information' do
+ expect(subject)
+ .to have_subject "#{project.name} | Pipeline ##{pipeline.id} has " \
+ "#{status} for #{pipeline.source_ref} | " \
+ "#{pipeline.short_sha}".to_s
+
+ expect(subject).to have_body_text pipeline.source_ref
+ expect(subject).to have_body_text status_text
+ end
+
+ context 'when pipeline for merge requests' do
+ let(:pipeline) { merge_request.all_pipelines.first }
+
+ let(:merge_request) do
+ create(:merge_request, :with_detached_merge_request_pipeline,
+ source_project: project,
+ target_project: project)
+ end
+
+ it 'has a correct information with merge request link' do
+ expect(subject)
+ .to have_subject "#{project.name} | Pipeline ##{pipeline.id} has " \
+ "#{status} for #{pipeline.source_ref} | " \
+ "#{pipeline.short_sha} in !#{merge_request.iid}".to_s
+
+ expect(subject).to have_body_text merge_request.to_reference
+ expect(subject).to have_body_text pipeline.source_ref
+ expect(subject).not_to have_body_text pipeline.ref
+ end
+ end
+ end
+
+ describe '#pipeline_success_email' do
+ subject { Notify.pipeline_success_email(pipeline, pipeline.user.try(:email)) }
+
+ let(:pipeline) { create(:ci_pipeline, project: project, ref: ref, sha: sha) }
+ let(:ref) { 'master' }
+ let(:sha) { project.commit(ref).sha }
+
+ it_behaves_like 'correct pipeline information' do
+ let(:status) { 'succeeded' }
+ let(:status_text) { 'Your pipeline has passed.' }
+ end
+ end
+
+ describe '#pipeline_failed_email' do
+ subject { Notify.pipeline_failed_email(pipeline, pipeline.user.try(:email)) }
+
+ let(:pipeline) { create(:ci_pipeline, project: project, ref: ref, sha: sha) }
+ let(:ref) { 'master' }
+ let(:sha) { project.commit(ref).sha }
+
+ it_behaves_like 'correct pipeline information' do
+ let(:status) { 'failed' }
+ let(:status_text) { 'Your pipeline has failed.' }
+ end
+ end
+end
diff --git a/spec/mailers/emails/releases_spec.rb b/spec/mailers/emails/releases_spec.rb
new file mode 100644
index 00000000000..19f404db2a6
--- /dev/null
+++ b/spec/mailers/emails/releases_spec.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'email_spec'
+
+describe Emails::Releases do
+ include EmailSpec::Matchers
+ include_context 'gitlab email notification'
+
+ describe '#new_release_email' do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project) }
+ let(:release) { create(:release, project: project) }
+
+ subject { Notify.new_release_email(user.id, release) }
+
+ it_behaves_like 'an email sent from GitLab'
+
+ context 'when the release has a name' do
+ it 'shows the correct subject' do
+ expected_subject = "#{release.project.name} | New release: #{release.name} - #{release.tag}"
+ is_expected.to have_subject(expected_subject)
+ end
+ end
+
+ context 'when the release does not have a name' do
+ it 'shows the correct subject' do
+ release.name = nil
+ expected_subject = "#{release.project.name} | New release: #{release.tag}"
+
+ is_expected.to have_subject(expected_subject)
+ end
+ end
+
+ it 'contains a message with the new release tag' do
+ message = "A new Release #{release.tag} for #{release.project.name} was published."
+ is_expected.to have_body_text(message)
+ end
+
+ it 'contains the release assets' do
+ is_expected.to have_body_text('Assets:')
+ release.sources do |source|
+ is_expected.to have_body_text("Download #{source.format}")
+ end
+ end
+
+ it 'contains the release notes' do
+ is_expected.to have_body_text('Release notes:')
+ is_expected.to have_body_text(release.description)
+ end
+ end
+end
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index 56fa26d5f23..1991bac0229 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -714,7 +714,7 @@ describe Notify do
describe 'project access requested' do
let(:project) do
- create(:project, :public, :access_requestable) do |project|
+ create(:project, :public) do |project|
project.add_maintainer(project.owner)
end
end
@@ -743,7 +743,7 @@ describe Notify do
end
describe 'project access denied' do
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
let(:project_member) do
project.request_access(user)
project.requesters.find_by(user_id: user.id)
@@ -765,7 +765,7 @@ describe Notify do
describe 'project access changed' do
let(:owner) { create(:user, name: "Chang O'Keefe") }
- let(:project) { create(:project, :public, :access_requestable, namespace: owner.namespace) }
+ let(:project) { create(:project, :public, namespace: owner.namespace) }
let(:project_member) { create(:project_member, project: project, user: user) }
subject { described_class.member_access_granted_email('project', project_member.id) }
@@ -1167,7 +1167,7 @@ describe Notify do
context 'for a group' do
describe 'group access requested' do
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:group) { create(:group, :public) }
let(:group_member) do
group.request_access(user)
group.requesters.find_by(user_id: user.id)
diff --git a/spec/migrations/README.md b/spec/migrations/README.md
index 4d86d30080a..5065df3fbef 100644
--- a/spec/migrations/README.md
+++ b/spec/migrations/README.md
@@ -1,137 +1 @@
-# Testing migrations
-
-In order to reliably test a migration, we need to test it against a database
-schema that this migration has been written for. In order to achieve that we
-have some _migration helpers_ and RSpec test tag, called `:migration`.
-
-If you want to write a test for a migration consider adding `:migration` tag to
-the test signature, like `describe SomeMigrationClass, :migration`.
-
-## How does it work?
-
-Adding a `:migration` tag to a test signature injects a few before / after
-hooks to the test.
-
-The most important change is that adding a `:migration` tag adds a `before`
-hook that will revert all migrations to the point that a migration under test
-is not yet migrated.
-
-In other words, our custom RSpec hooks will find a previous migration, and
-migrate the database **down** to the previous migration version.
-
-With this approach you can test a migration against a database schema that this
-migration has been written for.
-
-The `after` hook will migrate the database **up** and reinstitutes the latest
-schema version, so that the process does not affect subsequent specs and
-ensures proper isolation.
-
-## Available helpers
-
-Use `table` helper to create a temporary `ActiveRecord::Base` derived model
-for a table.
-
-See `spec/support/helpers/migrations_helpers.rb` for all the available helpers.
-
-## Testing a class that is an ActiveRecord::Migration
-
-In order to test a class that is an `ActiveRecord::Migration`, you will need to
-manually `require` the migration file because it is not autoloaded with Rails.
-
-Use `migrate!` helper to run the migration that is under test. It will not only
-run migration, but will also bump the schema version in the `schema_migrations`
-table. It is necessary because in the `after` hook we trigger the rest of
-the migrations, and we need to know where to start.
-
-### Example
-
-This spec tests the [`db/post_migrate/20170526185842_migrate_pipeline_stages.rb`](https://gitlab.com/gitlab-org/gitlab-foss/blob/v11.6.5/db/post_migrate/20170526185842_migrate_pipeline_stages.rb) migration. You can find the complete spec on [`spec/migrations/migrate_pipeline_stages_spec.rb`](https://gitlab.com/gitlab-org/gitlab-foss/blob/v11.6.5/spec/migrations/migrate_pipeline_stages_spec.rb).
-
-```ruby
-require 'spec_helper'
-require Rails.root.join('db', 'post_migrate', '20170526185842_migrate_pipeline_stages.rb')
-
-describe MigratePipelineStages, :migration do
-
- # Create test data - pipeline and CI/CD jobs.
-
- let(:jobs) { table(:ci_builds) }
- let(:stages) { table(:ci_stages) }
- let(:pipelines) { table(:ci_pipelines) }
- let(:projects) { table(:projects) }
-
- before do
- projects.create!(id: 123, name: 'gitlab1', path: 'gitlab1')
- pipelines.create!(id: 1, project_id: 123, ref: 'master', sha: 'adf43c3a')
- jobs.create!(id: 1, commit_id: 1, project_id: 123, stage_idx: 2, stage: 'build')
- jobs.create!(id: 2, commit_id: 1, project_id: 123, stage_idx: 1, stage: 'test')
- end
-
- # Test the migration.
-
- it 'correctly migrates pipeline stages' do
- expect(stages.count).to be_zero
-
- migrate!
-
- expect(stages.count).to eq 2
- expect(stages.all.pluck(:name)).to match_array %w[test build]
- end
-end
-```
-
-## Testing a class that is not an ActiveRecord::Migration
-
-To test a class that is not an `ActiveRecord::Migration` (a background migration),
-you will need to manually provide a required schema version. Please add a
-schema tag to a context that you want to switch the database schema within.
-
-Example: `describe SomeClass, :migration, schema: 20170608152748`.
-
-### Example
-
-This spec tests the [`lib/gitlab/background_migration/archive_legacy_traces.rb`](https://gitlab.com/gitlab-org/gitlab-foss/blob/v11.6.5/lib/gitlab/background_migration/archive_legacy_traces.rb)
-background migration. You can find the complete spec on
-[`spec/lib/gitlab/background_migration/archive_legacy_traces_spec.rb`](https://gitlab.com/gitlab-org/gitlab-foss/blob/v11.6.5/spec/lib/gitlab/background_migration/archive_legacy_traces_spec.rb)
-
-```ruby
-require 'spec_helper'
-
-describe Gitlab::BackgroundMigration::ArchiveLegacyTraces, :migration, schema: 20180529152628 do
- include TraceHelpers
-
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:builds) { table(:ci_builds) }
- let(:job_artifacts) { table(:ci_job_artifacts) }
-
- before do
- namespaces.create!(id: 123, name: 'gitlab1', path: 'gitlab1')
- projects.create!(id: 123, name: 'gitlab1', path: 'gitlab1', namespace_id: 123)
- @build = builds.create!(id: 1, project_id: 123, status: 'success', type: 'Ci::Build')
- end
-
- context 'when trace file exsits at the right place' do
- before do
- create_legacy_trace(@build, 'trace in file')
- end
-
- it 'correctly archive legacy traces' do
- expect(job_artifacts.count).to eq(0)
- expect(File.exist?(legacy_trace_path(@build))).to be_truthy
-
- described_class.new.perform(1, 1)
-
- expect(job_artifacts.count).to eq(1)
- expect(File.exist?(legacy_trace_path(@build))).to be_falsy
- expect(File.read(archived_trace_path(job_artifacts.first))).to eq('trace in file')
- end
- end
-end
-```
-
-## Best practices
-
-1. Note that this type of tests do not run within the transaction, we use
-a deletion database cleanup strategy. Do not depend on transaction being
-present.
+This document was moved to [another location](https://docs.gitlab.com/ee/development/testing_guide/testing_migrations_guide.html).
diff --git a/spec/migrations/backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps_spec.rb b/spec/migrations/backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps_spec.rb
new file mode 100644
index 00000000000..3ca7af8ea37
--- /dev/null
+++ b/spec/migrations/backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps_spec.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'migrate', '20190920194925_backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps.rb')
+
+describe BackfillReleasesTableUpdatedAtAndAddNotNullConstraintsToTimestamps, :migration do
+ let(:releases) { table(:releases) }
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+
+ subject(:migration) { described_class.new }
+
+ it 'fills null updated_at rows with the value of created_at' do
+ created_at_a = Time.zone.parse('2014-03-11T04:30:00Z')
+ created_at_b = Time.zone.parse('2019-09-10T12:00:00Z')
+ namespace = namespaces.create(name: 'foo', path: 'foo')
+ project = projects.create!(namespace_id: namespace.id)
+ release_a = releases.create!(project_id: project.id,
+ released_at: Time.zone.parse('2014-12-10T06:00:00Z'),
+ created_at: created_at_a)
+ release_b = releases.create!(project_id: project.id,
+ released_at: Time.zone.parse('2019-09-11T06:00:00Z'),
+ created_at: created_at_b)
+ release_a.update!(updated_at: nil)
+ release_b.update!(updated_at: nil)
+
+ disable_migrations_output { migrate! }
+
+ release_a.reload
+ release_b.reload
+ expect(release_a.updated_at).to eq(created_at_a)
+ expect(release_b.updated_at).to eq(created_at_b)
+ end
+
+ it 'does not change updated_at columns with a value' do
+ created_at_a = Time.zone.parse('2014-03-11T04:30:00Z')
+ updated_at_a = Time.zone.parse('2015-01-16T10:00:00Z')
+ created_at_b = Time.zone.parse('2019-09-10T12:00:00Z')
+ namespace = namespaces.create(name: 'foo', path: 'foo')
+ project = projects.create!(namespace_id: namespace.id)
+ release_a = releases.create!(project_id: project.id,
+ released_at: Time.zone.parse('2014-12-10T06:00:00Z'),
+ created_at: created_at_a,
+ updated_at: updated_at_a)
+ release_b = releases.create!(project_id: project.id,
+ released_at: Time.zone.parse('2019-09-11T06:00:00Z'),
+ created_at: created_at_b)
+ release_b.update!(updated_at: nil)
+
+ disable_migrations_output { migrate! }
+
+ release_a.reload
+ release_b.reload
+ expect(release_a.updated_at).to eq(updated_at_a)
+ expect(release_b.updated_at).to eq(created_at_b)
+ end
+end
diff --git a/spec/migrations/migrate_code_owner_approval_status_to_protected_branches_in_batches_spec.rb b/spec/migrations/migrate_code_owner_approval_status_to_protected_branches_in_batches_spec.rb
new file mode 100644
index 00000000000..67ac40d4d39
--- /dev/null
+++ b/spec/migrations/migrate_code_owner_approval_status_to_protected_branches_in_batches_spec.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20190827102026_migrate_code_owner_approval_status_to_protected_branches_in_batches.rb')
+
+describe MigrateCodeOwnerApprovalStatusToProtectedBranchesInBatches, :migration do
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+ let(:protected_branches) { table(:protected_branches) }
+
+ let(:namespace) do
+ namespaces.create!(
+ path: 'gitlab-instance-administrators',
+ name: 'GitLab Instance Administrators'
+ )
+ end
+
+ let(:project) do
+ projects.create!(
+ namespace_id: namespace.id,
+ name: 'GitLab Instance Administration'
+ )
+ end
+
+ let!(:protected_branch_1) do
+ protected_branches.create!(
+ name: "branch name",
+ project_id: project.id
+ )
+ end
+
+ describe '#up' do
+ context "when there's no projects needing approval" do
+ it "doesn't change any protected branch records" do
+ expect { migrate! }
+ .not_to change { ProtectedBranch.where(code_owner_approval_required: true).count }
+ end
+ end
+
+ context "when there's a project needing approval" do
+ let!(:project_needing_approval) do
+ projects.create!(
+ namespace_id: namespace.id,
+ name: 'GitLab Instance Administration',
+ merge_requests_require_code_owner_approval: true
+ )
+ end
+
+ let!(:protected_branch_2) do
+ protected_branches.create!(
+ name: "branch name",
+ project_id: project_needing_approval.id
+ )
+ end
+
+ it "changes N protected branch records" do
+ expect { migrate! }
+ .to change { ProtectedBranch.where(code_owner_approval_required: true).count }
+ .by(1)
+ end
+ end
+ end
+end
diff --git a/spec/migrations/schedule_pages_metadata_migration_spec.rb b/spec/migrations/schedule_pages_metadata_migration_spec.rb
new file mode 100644
index 00000000000..100ed520a32
--- /dev/null
+++ b/spec/migrations/schedule_pages_metadata_migration_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20191002031332_schedule_pages_metadata_migration')
+
+describe SchedulePagesMetadataMigration, :migration, :sidekiq do
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+
+ before do
+ stub_const("#{described_class.name}::BATCH_SIZE", 1)
+
+ namespaces.create!(id: 11, name: 'gitlab', path: 'gitlab-org')
+ projects.create!(id: 111, namespace_id: 11, name: 'Project 111')
+ projects.create!(id: 114, namespace_id: 11, name: 'Project 114')
+ end
+
+ it 'schedules pages metadata migration' do
+ Sidekiq::Testing.fake! do
+ Timecop.freeze do
+ migrate!
+
+ expect(described_class::MIGRATION).to be_scheduled_delayed_migration(2.minutes, 111, 111)
+ expect(described_class::MIGRATION).to be_scheduled_delayed_migration(4.minutes, 114, 114)
+ expect(BackgroundMigrationWorker.jobs.size).to eq(2)
+ end
+ end
+ end
+end
diff --git a/spec/migrations/sync_issuables_state_id_spec.rb b/spec/migrations/sync_issuables_state_id_spec.rb
new file mode 100644
index 00000000000..8d1f8a36ac3
--- /dev/null
+++ b/spec/migrations/sync_issuables_state_id_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20190911251732_sync_issuables_state_id')
+
+describe SyncIssuablesStateId, :migration, :sidekiq do
+ let(:migration) { described_class.new }
+
+ describe '#up' do
+ let(:issues) { table(:issues) }
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+ let(:merge_requests) { table(:merge_requests) }
+ let(:group) { namespaces.create!(name: 'gitlab', path: 'gitlab') }
+ let(:project) { projects.create!(namespace_id: group.id) }
+ # These state_ids should be the same defined on Issue/MergeRequest models
+ let(:state_ids) { { opened: 1, closed: 2, merged: 3, locked: 4 } }
+
+ it 'migrates state column to state_id as integer' do
+ opened_issue = issues.create!(description: 'first', state: 'opened')
+ closed_issue = issues.create!(description: 'second', state: 'closed')
+ opened_merge_request = merge_requests.create!(state: 'opened', target_project_id: project.id, target_branch: 'feature1', source_branch: 'master')
+ closed_merge_request = merge_requests.create!(state: 'closed', target_project_id: project.id, target_branch: 'feature2', source_branch: 'master')
+ merged_merge_request = merge_requests.create!(state: 'merged', target_project_id: project.id, target_branch: 'feature3', source_branch: 'master')
+ locked_merge_request = merge_requests.create!(state: 'locked', target_project_id: project.id, target_branch: 'feature4', source_branch: 'master')
+
+ migrate!
+
+ expect(opened_issue.reload.state_id).to eq(state_ids[:opened])
+ expect(closed_issue.reload.state_id).to eq(state_ids[:closed])
+ expect(opened_merge_request.reload.state_id).to eq(state_ids[:opened])
+ expect(closed_merge_request.reload.state_id).to eq(state_ids[:closed])
+ expect(merged_merge_request.reload.state_id).to eq(state_ids[:merged])
+ expect(locked_merge_request.reload.state_id).to eq(state_ids[:locked])
+ end
+ end
+end
diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb
index d12f9b9100a..7bef3d30064 100644
--- a/spec/models/application_setting_spec.rb
+++ b/spec/models/application_setting_spec.rb
@@ -51,6 +51,18 @@ describe ApplicationSetting do
it { is_expected.to allow_value(nil).for(:static_objects_external_storage_url) }
it { is_expected.to allow_value(http).for(:static_objects_external_storage_url) }
it { is_expected.to allow_value(https).for(:static_objects_external_storage_url) }
+ it { is_expected.to allow_value(['/example'] * 100).for(:protected_paths) }
+ it { is_expected.not_to allow_value(['/example'] * 101).for(:protected_paths) }
+ it { is_expected.not_to allow_value(nil).for(:protected_paths) }
+ it { is_expected.to allow_value([]).for(:protected_paths) }
+
+ it { is_expected.to allow_value(3).for(:push_event_hooks_limit) }
+ it { is_expected.not_to allow_value('three').for(:push_event_hooks_limit) }
+ it { is_expected.not_to allow_value(nil).for(:push_event_hooks_limit) }
+
+ it { is_expected.to allow_value(3).for(:push_event_activities_limit) }
+ it { is_expected.not_to allow_value('three').for(:push_event_activities_limit) }
+ it { is_expected.not_to allow_value(nil).for(:push_event_activities_limit) }
context "when user accepted let's encrypt terms of service" do
before do
diff --git a/spec/models/aws/role_spec.rb b/spec/models/aws/role_spec.rb
new file mode 100644
index 00000000000..c40752e40a6
--- /dev/null
+++ b/spec/models/aws/role_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Aws::Role do
+ it { is_expected.to belong_to(:user) }
+ it { is_expected.to validate_length_of(:role_external_id).is_at_least(1).is_at_most(64) }
+
+ describe 'custom validations' do
+ subject { role.valid? }
+
+ context ':role_arn' do
+ let(:role) { build(:aws_role, role_arn: role_arn) }
+
+ context 'length is zero' do
+ let(:role_arn) { '' }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'length is longer than 2048' do
+ let(:role_arn) { '1' * 2049 }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'ARN is valid' do
+ let(:role_arn) { 'arn:aws:iam::123456789012:role/test-role' }
+
+ it { is_expected.to be_truthy }
+ end
+ end
+ end
+end
diff --git a/spec/models/blob_spec.rb b/spec/models/blob_spec.rb
index 2efab3076d8..9e55fbcce20 100644
--- a/spec/models/blob_spec.rb
+++ b/spec/models/blob_spec.rb
@@ -320,6 +320,22 @@ describe Blob do
expect(blob.rich_viewer).to be_a(BlobViewer::Markup)
end
end
+
+ context 'when the blob is video' do
+ it 'returns a video viewer' do
+ blob = fake_blob(path: 'file.mp4', binary: true)
+
+ expect(blob.rich_viewer).to be_a(BlobViewer::Video)
+ end
+ end
+
+ context 'when the blob is audio' do
+ it 'returns an audio viewer' do
+ blob = fake_blob(path: 'file.wav', binary: true)
+
+ expect(blob.rich_viewer).to be_a(BlobViewer::Audio)
+ end
+ end
end
describe '#auxiliary_viewer' do
diff --git a/spec/models/ci/build_metadata_spec.rb b/spec/models/ci/build_metadata_spec.rb
index 67cd939b4c6..da95a2d30f5 100644
--- a/spec/models/ci/build_metadata_spec.rb
+++ b/spec/models/ci/build_metadata_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
describe Ci::BuildMetadata do
set(:user) { create(:user) }
- set(:group) { create(:group, :access_requestable) }
+ set(:group) { create(:group) }
set(:project) { create(:project, :repository, group: group, build_timeout: 2000) }
set(:pipeline) do
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index 5c0f8bd392a..058305bc04e 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
describe Ci::Build do
set(:user) { create(:user) }
- set(:group) { create(:group, :access_requestable) }
+ set(:group) { create(:group) }
set(:project) { create(:project, :repository, group: group) }
set(:pipeline) do
@@ -19,17 +19,24 @@ describe Ci::Build do
it { is_expected.to belong_to(:runner) }
it { is_expected.to belong_to(:trigger_request) }
it { is_expected.to belong_to(:erased_by) }
+
it { is_expected.to have_many(:trace_sections) }
it { is_expected.to have_many(:needs) }
+ it { is_expected.to have_many(:sourced_pipelines) }
+ it { is_expected.to have_many(:job_variables) }
+
it { is_expected.to have_one(:deployment) }
it { is_expected.to have_one(:runner_session) }
- it { is_expected.to have_many(:job_variables) }
+
it { is_expected.to validate_presence_of(:ref) }
+
it { is_expected.to respond_to(:has_trace?) }
it { is_expected.to respond_to(:trace) }
+
it { is_expected.to delegate_method(:merge_request_event?).to(:pipeline) }
it { is_expected.to delegate_method(:merge_request_ref?).to(:pipeline) }
it { is_expected.to delegate_method(:legacy_detached_merge_request_pipeline?).to(:pipeline) }
+
it { is_expected.to include_module(Ci::PipelineDelegator) }
describe 'associations' do
@@ -567,6 +574,7 @@ describe Ci::Build do
describe '#artifacts_metadata?' do
subject { build.artifacts_metadata? }
+
context 'artifacts metadata does not exist' do
it { is_expected.to be_falsy }
end
@@ -579,6 +587,7 @@ describe Ci::Build do
describe '#artifacts_expire_in' do
subject { build.artifacts_expire_in }
+
it { is_expected.to be_nil }
context 'when artifacts_expire_at is specified' do
@@ -957,7 +966,7 @@ describe Ci::Build do
end
describe 'state transition as a deployable' do
- let!(:build) { create(:ci_build, :start_review_app) }
+ let!(:build) { create(:ci_build, :with_deployment, :start_review_app) }
let(:deployment) { build.deployment }
let(:environment) { deployment.environment }
@@ -1043,20 +1052,6 @@ describe Ci::Build do
end
describe 'deployment' do
- describe '#has_deployment?' do
- subject { build.has_deployment? }
-
- context 'when build has a deployment' do
- let!(:deployment) { create(:deployment, deployable: build) }
-
- it { is_expected.to be_truthy }
- end
-
- context 'when build does not have a deployment' do
- it { is_expected.to be_falsy }
- end
- end
-
describe '#outdated_deployment?' do
subject { build.outdated_deployment? }
@@ -1272,6 +1267,7 @@ describe Ci::Build do
describe '#erasable?' do
subject { build.erasable? }
+
it { is_expected.to be_truthy }
end
@@ -1955,7 +1951,7 @@ describe Ci::Build do
end
context 'when build has a start environment' do
- let(:build) { create(:ci_build, :deploy_to_production, pipeline: pipeline) }
+ let(:build) { create(:ci_build, :with_deployment, :deploy_to_production, pipeline: pipeline) }
it 'does not expand environment name' do
expect(build).not_to receive(:expanded_environment_name)
@@ -2202,6 +2198,7 @@ describe Ci::Build do
{ key: 'CI_COMMIT_REF_NAME', value: build.ref, public: true, masked: false },
{ key: 'CI_COMMIT_REF_SLUG', value: build.ref_slug, public: true, masked: false },
{ key: 'CI_NODE_TOTAL', value: '1', public: true, masked: false },
+ { key: 'CI_DEFAULT_BRANCH', value: project.default_branch, public: true, masked: false },
{ key: 'CI_BUILD_REF', value: build.sha, public: true, masked: false },
{ key: 'CI_BUILD_BEFORE_SHA', value: build.before_sha, public: true, masked: false },
{ key: 'CI_BUILD_REF_NAME', value: build.ref, public: true, masked: false },
@@ -2210,6 +2207,7 @@ describe Ci::Build do
{ key: 'CI_BUILD_STAGE', value: 'test', public: true, masked: false },
{ key: 'CI_PROJECT_ID', value: project.id.to_s, public: true, masked: false },
{ key: 'CI_PROJECT_NAME', value: project.path, public: true, masked: false },
+ { key: 'CI_PROJECT_TITLE', value: project.title, public: true, masked: false },
{ key: 'CI_PROJECT_PATH', value: project.full_path, public: true, masked: false },
{ key: 'CI_PROJECT_PATH_SLUG', value: project.full_path_slug, public: true, masked: false },
{ key: 'CI_PROJECT_NAMESPACE', value: project.namespace.full_path, public: true, masked: false },
@@ -3079,6 +3077,12 @@ describe Ci::Build do
rescue StateMachines::InvalidTransition
end
+ it 'ensures pipeline ref existence' do
+ expect(job.pipeline.persistent_ref).to receive(:create).once
+
+ run_job_without_exception
+ end
+
shared_examples 'saves data on transition' do
it 'saves timeout' do
expect { job.run! }.to change { job.reload.ensure_metadata.timeout }.from(nil).to(expected_timeout)
@@ -3918,4 +3922,14 @@ describe Ci::Build do
end
end
end
+
+ describe '#invalid_dependencies' do
+ let!(:pre_stage_job_valid) { create(:ci_build, :manual, pipeline: pipeline, name: 'test1', stage_idx: 0) }
+ let!(:pre_stage_job_invalid) { create(:ci_build, :success, :expired, pipeline: pipeline, name: 'test2', stage_idx: 1) }
+ let!(:job) { create(:ci_build, :pending, pipeline: pipeline, stage_idx: 2, options: { dependencies: %w(test1 test2) }) }
+
+ it 'returns invalid dependencies' do
+ expect(job.invalid_dependencies).to eq([pre_stage_job_invalid])
+ end
+ end
end
diff --git a/spec/models/ci/build_trace_spec.rb b/spec/models/ci/build_trace_spec.rb
new file mode 100644
index 00000000000..2471a6fa827
--- /dev/null
+++ b/spec/models/ci/build_trace_spec.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Ci::BuildTrace do
+ let(:build) { build_stubbed(:ci_build) }
+ let(:state) { nil }
+ let(:data) { StringIO.new('the-stream') }
+
+ let(:stream) do
+ Gitlab::Ci::Trace::Stream.new { data }
+ end
+
+ subject { described_class.new(build: build, stream: stream, state: state, content_format: content_format) }
+
+ shared_examples 'delegates methods' do
+ it { is_expected.to delegate_method(:state).to(:trace) }
+ it { is_expected.to delegate_method(:append).to(:trace) }
+ it { is_expected.to delegate_method(:truncated).to(:trace) }
+ it { is_expected.to delegate_method(:offset).to(:trace) }
+ it { is_expected.to delegate_method(:size).to(:trace) }
+ it { is_expected.to delegate_method(:total).to(:trace) }
+ it { is_expected.to delegate_method(:id).to(:build).with_prefix }
+ it { is_expected.to delegate_method(:status).to(:build).with_prefix }
+ it { is_expected.to delegate_method(:complete?).to(:build).with_prefix }
+ end
+
+ context 'with :json content format' do
+ let(:content_format) { :json }
+
+ it_behaves_like 'delegates methods'
+
+ it { is_expected.to be_json }
+
+ it 'returns formatted trace' do
+ expect(subject.trace.lines).to eq([
+ { offset: 0, content: [{ text: 'the-stream' }] }
+ ])
+ end
+ end
+
+ context 'with :html content format' do
+ let(:content_format) { :html }
+
+ it_behaves_like 'delegates methods'
+
+ it { is_expected.to be_html }
+
+ it 'returns formatted trace' do
+ expect(subject.trace.html).to eq('<span>the-stream</span>')
+ end
+ end
+end
diff --git a/spec/models/ci/group_spec.rb b/spec/models/ci/group_spec.rb
index 36c65d92840..b3b158a111e 100644
--- a/spec/models/ci/group_spec.rb
+++ b/spec/models/ci/group_spec.rb
@@ -22,6 +22,32 @@ describe Ci::Group do
end
end
+ describe '#status' do
+ let(:jobs) do
+ [create(:ci_build, :failed)]
+ end
+
+ context 'when ci_composite_status is enabled' do
+ before do
+ stub_feature_flags(ci_composite_status: true)
+ end
+
+ it 'returns a failed status' do
+ expect(subject.status).to eq('failed')
+ end
+ end
+
+ context 'when ci_composite_status is disabled' do
+ before do
+ stub_feature_flags(ci_composite_status: false)
+ end
+
+ it 'returns a failed status' do
+ expect(subject.status).to eq('failed')
+ end
+ end
+ end
+
describe '#detailed_status' do
context 'when there is only one item in the group' do
it 'calls the status from the object itself' do
diff --git a/spec/models/ci/legacy_stage_spec.rb b/spec/models/ci/legacy_stage_spec.rb
index bb812cc0533..477f4036218 100644
--- a/spec/models/ci/legacy_stage_spec.rb
+++ b/spec/models/ci/legacy_stage_spec.rb
@@ -216,7 +216,7 @@ describe Ci::LegacyStage do
context 'when stage has warnings' do
context 'when using memoized warnings flag' do
context 'when there are warnings' do
- let(:stage) { build(:ci_stage, warnings: 2) }
+ let(:stage) { build(:ci_stage, warnings: true) }
it 'returns true using memoized value' do
expect(stage).not_to receive(:statuses)
@@ -225,22 +225,13 @@ describe Ci::LegacyStage do
end
context 'when there are no warnings' do
- let(:stage) { build(:ci_stage, warnings: 0) }
+ let(:stage) { build(:ci_stage, warnings: false) }
it 'returns false using memoized value' do
expect(stage).not_to receive(:statuses)
expect(stage).not_to have_warnings
end
end
-
- context 'when number of warnings is not a valid value' do
- let(:stage) { build(:ci_stage, warnings: true) }
-
- it 'calculates statuses using database queries' do
- expect(stage).to receive(:statuses).and_call_original
- expect(stage).not_to have_warnings
- end
- end
end
context 'when calculating warnings from statuses' do
diff --git a/spec/models/ci/persistent_ref_spec.rb b/spec/models/ci/persistent_ref_spec.rb
new file mode 100644
index 00000000000..be447476e2c
--- /dev/null
+++ b/spec/models/ci/persistent_ref_spec.rb
@@ -0,0 +1,96 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Ci::PersistentRef do
+ it 'cleans up persistent refs after pipeline finished' do
+ pipeline = create(:ci_pipeline, :running)
+
+ expect(pipeline.persistent_ref).to receive(:delete).once
+
+ pipeline.succeed!
+ end
+
+ context '#exist?' do
+ subject { pipeline.persistent_ref.exist? }
+
+ let(:pipeline) { create(:ci_pipeline, sha: sha, project: project) }
+ let(:project) { create(:project, :repository) }
+ let(:sha) { project.repository.commit.sha }
+
+ context 'when a persistent ref does not exist' do
+ it { is_expected.to eq(false) }
+ end
+
+ context 'when a persistent ref exists' do
+ before do
+ pipeline.persistent_ref.create
+ end
+
+ it { is_expected.to eq(true) }
+ end
+ end
+
+ context '#create' do
+ subject { pipeline.persistent_ref.create }
+
+ let(:pipeline) { create(:ci_pipeline, sha: sha, project: project) }
+ let(:project) { create(:project, :repository) }
+ let(:sha) { project.repository.commit.sha }
+
+ context 'when a persistent ref does not exist' do
+ it 'creates a persistent ref' do
+ subject
+
+ expect(pipeline.persistent_ref).to be_exist
+ end
+
+ context 'when sha does not exist in the repository' do
+ let(:sha) { 'not-exist' }
+
+ it 'fails to create a persistent ref' do
+ subject
+
+ expect(pipeline.persistent_ref).not_to be_exist
+ end
+ end
+ end
+
+ context 'when a persistent ref already exists' do
+ before do
+ pipeline.persistent_ref.create
+ end
+
+ it 'does not create a persistent ref' do
+ expect(project.repository).not_to receive(:create_ref)
+
+ subject
+ end
+ end
+ end
+
+ context '#delete' do
+ subject { pipeline.persistent_ref.delete }
+
+ let(:pipeline) { create(:ci_pipeline, sha: sha, project: project) }
+ let(:project) { create(:project, :repository) }
+ let(:sha) { project.repository.commit.sha }
+
+ context 'when a persistent ref exists' do
+ before do
+ pipeline.persistent_ref.create
+ end
+
+ it 'deletes the ref' do
+ expect { subject }.to change { pipeline.persistent_ref.exist? }
+ .from(true).to(false)
+ end
+ end
+
+ context 'when a persistent ref does not exist' do
+ it 'does not raise an error' do
+ expect { subject }.not_to raise_error
+ end
+ end
+ end
+end
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index d5ad70194cb..de0ce9932e8 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -28,7 +28,13 @@ describe Ci::Pipeline, :mailer do
it { is_expected.to have_many(:builds) }
it { is_expected.to have_many(:auto_canceled_pipelines) }
it { is_expected.to have_many(:auto_canceled_jobs) }
+ it { is_expected.to have_many(:sourced_pipelines) }
+ it { is_expected.to have_many(:triggered_pipelines) }
+
it { is_expected.to have_one(:chat_data) }
+ it { is_expected.to have_one(:source_pipeline) }
+ it { is_expected.to have_one(:triggered_by_pipeline) }
+ it { is_expected.to have_one(:source_job) }
it { is_expected.to validate_presence_of(:sha) }
it { is_expected.to validate_presence_of(:status) }
@@ -1136,59 +1142,71 @@ describe Ci::Pipeline, :mailer do
end
describe '#legacy_stages' do
+ using RSpec::Parameterized::TableSyntax
+
subject { pipeline.legacy_stages }
- context 'stages list' do
- it 'returns ordered list of stages' do
- expect(subject.map(&:name)).to eq(%w[build test deploy])
- end
+ where(:ci_composite_status) do
+ [false, true]
end
- context 'stages with statuses' do
- let(:statuses) do
- subject.map { |stage| [stage.name, stage.status] }
+ with_them do
+ before do
+ stub_feature_flags(ci_composite_status: ci_composite_status)
end
- it 'returns list of stages with correct statuses' do
- expect(statuses).to eq([%w(build failed),
- %w(test success),
- %w(deploy running)])
+ context 'stages list' do
+ it 'returns ordered list of stages' do
+ expect(subject.map(&:name)).to eq(%w[build test deploy])
+ end
end
- context 'when commit status is retried' do
- before do
- create(:commit_status, pipeline: pipeline,
- stage: 'build',
- name: 'mac',
- stage_idx: 0,
- status: 'success')
-
- pipeline.process!
+ context 'stages with statuses' do
+ let(:statuses) do
+ subject.map { |stage| [stage.name, stage.status] }
end
- it 'ignores the previous state' do
- expect(statuses).to eq([%w(build success),
+ it 'returns list of stages with correct statuses' do
+ expect(statuses).to eq([%w(build failed),
%w(test success),
%w(deploy running)])
end
- end
- end
- context 'when there is a stage with warnings' do
- before do
- create(:commit_status, pipeline: pipeline,
- stage: 'deploy',
- name: 'prod:2',
- stage_idx: 2,
- status: 'failed',
- allow_failure: true)
+ context 'when commit status is retried' do
+ before do
+ create(:commit_status, pipeline: pipeline,
+ stage: 'build',
+ name: 'mac',
+ stage_idx: 0,
+ status: 'success')
+
+ pipeline.process!
+ end
+
+ it 'ignores the previous state' do
+ expect(statuses).to eq([%w(build success),
+ %w(test success),
+ %w(deploy running)])
+ end
+ end
end
- it 'populates stage with correct number of warnings' do
- deploy_stage = pipeline.legacy_stages.third
+ context 'when there is a stage with warnings' do
+ before do
+ create(:commit_status, pipeline: pipeline,
+ stage: 'deploy',
+ name: 'prod:2',
+ stage_idx: 2,
+ status: 'failed',
+ allow_failure: true)
+ end
- expect(deploy_stage).not_to receive(:statuses)
- expect(deploy_stage).to have_warnings
+ it 'populates stage with correct number of warnings' do
+ deploy_stage = pipeline.legacy_stages.third
+
+ expect(deploy_stage).not_to receive(:statuses)
+ expect(deploy_stage).to have_warnings
+ end
end
end
end
@@ -1318,6 +1336,16 @@ describe Ci::Pipeline, :mailer do
let(:build_b) { create_build('build2', queued_at: 0) }
let(:build_c) { create_build('build3', queued_at: 0) }
+ %w[succeed! drop! cancel! skip!].each do |action|
+ context "when the pipeline recieved #{action} event" do
+ it 'deletes a persistent ref' do
+ expect(pipeline.persistent_ref).to receive(:delete).once
+
+ pipeline.public_send(action)
+ end
+ end
+ end
+
describe '#duration' do
context 'when multiple builds are finished' do
before do
@@ -1755,6 +1783,30 @@ describe Ci::Pipeline, :mailer do
end
end
+ describe '#all_worktree_paths' do
+ let(:files) { { 'main.go' => '', 'mocks/mocks.go' => '' } }
+ let(:project) { create(:project, :custom_repo, files: files) }
+ let(:pipeline) { build(:ci_pipeline, project: project, sha: project.repository.head_commit.sha) }
+
+ it 'returns all file paths cached' do
+ expect(project.repository).to receive(:ls_files).with(pipeline.sha).once.and_call_original
+ expect(pipeline.all_worktree_paths).to eq(files.keys)
+ expect(pipeline.all_worktree_paths).to eq(files.keys)
+ end
+ end
+
+ describe '#top_level_worktree_paths' do
+ let(:files) { { 'main.go' => '', 'mocks/mocks.go' => '' } }
+ let(:project) { create(:project, :custom_repo, files: files) }
+ let(:pipeline) { build(:ci_pipeline, project: project, sha: project.repository.head_commit.sha) }
+
+ it 'returns top-level file paths cached' do
+ expect(project.repository).to receive(:tree).with(pipeline.sha).once.and_call_original
+ expect(pipeline.top_level_worktree_paths).to eq(['main.go'])
+ expect(pipeline.top_level_worktree_paths).to eq(['main.go'])
+ end
+ end
+
describe '#has_kubernetes_active?' do
context 'when kubernetes is active' do
context 'when user configured kubernetes from CI/CD > Clusters' do
@@ -1932,40 +1984,57 @@ describe Ci::Pipeline, :mailer do
end
end
- describe '.latest_status_per_commit' do
+ describe '.latest_pipeline_per_commit' do
let(:project) { create(:project) }
- before do
- pairs = [
- %w[success ref1 123],
- %w[manual master 123],
- %w[failed ref 456]
- ]
-
- pairs.each do |(status, ref, sha)|
- create(
- :ci_empty_pipeline,
- status: status,
- ref: ref,
- sha: sha,
- project: project
- )
- end
+ let!(:commit_123_ref_master) do
+ create(
+ :ci_empty_pipeline,
+ status: 'success',
+ ref: 'master',
+ sha: '123',
+ project: project
+ )
+ end
+ let!(:commit_123_ref_develop) do
+ create(
+ :ci_empty_pipeline,
+ status: 'success',
+ ref: 'develop',
+ sha: '123',
+ project: project
+ )
+ end
+ let!(:commit_456_ref_test) do
+ create(
+ :ci_empty_pipeline,
+ status: 'success',
+ ref: 'test',
+ sha: '456',
+ project: project
+ )
end
context 'without a ref' do
- it 'returns a Hash containing the latest status per commit for all refs' do
- expect(described_class.latest_status_per_commit(%w[123 456]))
- .to eq({ '123' => 'manual', '456' => 'failed' })
+ it 'returns a Hash containing the latest pipeline per commit for all refs' do
+ result = described_class.latest_pipeline_per_commit(%w[123 456])
+
+ expect(result).to match(
+ '123' => commit_123_ref_develop,
+ '456' => commit_456_ref_test
+ )
end
- it 'only includes the status of the given commit SHAs' do
- expect(described_class.latest_status_per_commit(%w[123]))
- .to eq({ '123' => 'manual' })
+ it 'only includes the latest pipeline of the given commit SHAs' do
+ result = described_class.latest_pipeline_per_commit(%w[123])
+
+ expect(result).to match(
+ '123' => commit_123_ref_develop
+ )
end
context 'when there are two pipelines for a ref and SHA' do
- it 'returns the status of the latest pipeline' do
+ let!(:commit_123_ref_master_latest) do
create(
:ci_empty_pipeline,
status: 'failed',
@@ -1973,17 +2042,25 @@ describe Ci::Pipeline, :mailer do
sha: '123',
project: project
)
+ end
+
+ it 'returns the latest pipeline' do
+ result = described_class.latest_pipeline_per_commit(%w[123])
- expect(described_class.latest_status_per_commit(%w[123]))
- .to eq({ '123' => 'failed' })
+ expect(result).to match(
+ '123' => commit_123_ref_master_latest
+ )
end
end
end
context 'with a ref' do
it 'only includes the pipelines for the given ref' do
- expect(described_class.latest_status_per_commit(%w[123 456], 'master'))
- .to eq({ '123' => 'manual' })
+ result = described_class.latest_pipeline_per_commit(%w[123 456], 'master')
+
+ expect(result).to match(
+ '123' => commit_123_ref_master
+ )
end
end
end
@@ -2267,36 +2344,38 @@ describe Ci::Pipeline, :mailer do
describe '#update_status' do
context 'when pipeline is empty' do
it 'updates does not change pipeline status' do
- expect(pipeline.statuses.latest.status).to be_nil
+ expect(pipeline.statuses.latest.slow_composite_status).to be_nil
expect { pipeline.update_status }
- .to change { pipeline.reload.status }.to 'skipped'
+ .to change { pipeline.reload.status }
+ .from('created')
+ .to('skipped')
end
end
context 'when updating status to pending' do
before do
- allow(pipeline)
- .to receive_message_chain(:statuses, :latest, :status)
- .and_return(:running)
+ create(:ci_build, pipeline: pipeline, status: :running)
end
it 'updates pipeline status to running' do
expect { pipeline.update_status }
- .to change { pipeline.reload.status }.to 'running'
+ .to change { pipeline.reload.status }
+ .from('created')
+ .to('running')
end
end
context 'when updating status to scheduled' do
before do
- allow(pipeline)
- .to receive_message_chain(:statuses, :latest, :status)
- .and_return(:scheduled)
+ create(:ci_build, pipeline: pipeline, status: :scheduled)
end
it 'updates pipeline status to scheduled' do
expect { pipeline.update_status }
- .to change { pipeline.reload.status }.to 'scheduled'
+ .to change { pipeline.reload.status }
+ .from('created')
+ .to('scheduled')
end
end
diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb
index 70ff3cf5dc4..ac438f7d473 100644
--- a/spec/models/ci/runner_spec.rb
+++ b/spec/models/ci/runner_spec.rb
@@ -686,11 +686,13 @@ describe Ci::Runner do
describe '#has_tags?' do
context 'when runner has tags' do
subject { create(:ci_runner, tag_list: ['tag']) }
+
it { is_expected.to have_tags }
end
context 'when runner does not have tags' do
subject { create(:ci_runner, tag_list: []) }
+
it { is_expected.not_to have_tags }
end
end
diff --git a/spec/models/ci/sources/pipeline_spec.rb b/spec/models/ci/sources/pipeline_spec.rb
new file mode 100644
index 00000000000..63bee5bfb55
--- /dev/null
+++ b/spec/models/ci/sources/pipeline_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Ci::Sources::Pipeline do
+ it { is_expected.to belong_to(:project) }
+ it { is_expected.to belong_to(:pipeline) }
+
+ it { is_expected.to belong_to(:source_project) }
+ it { is_expected.to belong_to(:source_job) }
+ it { is_expected.to belong_to(:source_pipeline) }
+
+ it { is_expected.to validate_presence_of(:project) }
+ it { is_expected.to validate_presence_of(:pipeline) }
+
+ it { is_expected.to validate_presence_of(:source_project) }
+ it { is_expected.to validate_presence_of(:source_job) }
+ it { is_expected.to validate_presence_of(:source_pipeline) }
+end
diff --git a/spec/models/ci/stage_spec.rb b/spec/models/ci/stage_spec.rb
index 85cd32fb03a..8827509edda 100644
--- a/spec/models/ci/stage_spec.rb
+++ b/spec/models/ci/stage_spec.rb
@@ -130,7 +130,7 @@ describe Ci::Stage, :models do
context 'when statuses status was not recognized' do
before do
allow(stage)
- .to receive_message_chain(:statuses, :latest, :status)
+ .to receive(:latest_stage_status)
.and_return(:unknown)
end
diff --git a/spec/models/clusters/applications/cert_manager_spec.rb b/spec/models/clusters/applications/cert_manager_spec.rb
index bddc09decc3..c1933c578bc 100644
--- a/spec/models/clusters/applications/cert_manager_spec.rb
+++ b/spec/models/clusters/applications/cert_manager_spec.rb
@@ -54,7 +54,7 @@ describe Clusters::Applications::CertManager do
'kubectl label --overwrite namespace gitlab-managed-apps certmanager.k8s.io/disable-validation=true'
])
expect(subject.postinstall).to eq([
- 'for i in $(seq 1 30); do kubectl apply -f /data/helm/certmanager/config/cluster_issuer.yaml && break; sleep 1s; echo "Retrying ($i)..."; done'
+ "for i in $(seq 1 30); do kubectl apply -f /data/helm/certmanager/config/cluster_issuer.yaml && s=0 && break || s=$?; sleep 1s; echo \"Retrying ($i)...\"; done; (exit $s)"
])
end
diff --git a/spec/models/clusters/applications/helm_spec.rb b/spec/models/clusters/applications/helm_spec.rb
index 9672129bb1e..64f58155a66 100644
--- a/spec/models/clusters/applications/helm_spec.rb
+++ b/spec/models/clusters/applications/helm_spec.rb
@@ -134,4 +134,14 @@ describe Clusters::Applications::Helm do
end
end
end
+
+ describe '#post_uninstall' do
+ let(:helm) { create(:clusters_applications_helm, :installed) }
+
+ it do
+ expect(helm.cluster.kubeclient).to receive(:delete_namespace).with('gitlab-managed-apps')
+
+ helm.post_uninstall
+ end
+ end
end
diff --git a/spec/models/clusters/applications/ingress_spec.rb b/spec/models/clusters/applications/ingress_spec.rb
index d9461ee8581..be0c6df7ad6 100644
--- a/spec/models/clusters/applications/ingress_spec.rb
+++ b/spec/models/clusters/applications/ingress_spec.rb
@@ -96,7 +96,7 @@ describe Clusters::Applications::Ingress do
it 'is initialized with ingress arguments' do
expect(subject.name).to eq('ingress')
expect(subject.chart).to eq('stable/nginx-ingress')
- expect(subject.version).to eq('1.1.2')
+ expect(subject.version).to eq('1.22.1')
expect(subject).to be_rbac
expect(subject.files).to eq(ingress.files)
end
@@ -113,7 +113,7 @@ describe Clusters::Applications::Ingress do
let(:ingress) { create(:clusters_applications_ingress, :errored, version: 'nginx') }
it 'is initialized with the locked version' do
- expect(subject.version).to eq('1.1.2')
+ expect(subject.version).to eq('1.22.1')
end
end
end
diff --git a/spec/models/clusters/applications/jupyter_spec.rb b/spec/models/clusters/applications/jupyter_spec.rb
index e1eee014567..0ec9333d6a7 100644
--- a/spec/models/clusters/applications/jupyter_spec.rb
+++ b/spec/models/clusters/applications/jupyter_spec.rb
@@ -91,7 +91,6 @@ describe Clusters::Applications::Jupyter do
it 'includes valid values' do
expect(values).to include('ingress')
expect(values).to include('hub')
- expect(values).to include('rbac')
expect(values).to include('proxy')
expect(values).to include('auth')
expect(values).to include('singleuser')
@@ -111,7 +110,6 @@ describe Clusters::Applications::Jupyter do
it 'includes valid values' do
expect(values).to include('ingress')
expect(values).to include('hub')
- expect(values).to include('rbac')
expect(values).to include('proxy')
expect(values).to include('auth')
expect(values).to include('singleuser')
diff --git a/spec/models/clusters/applications/knative_spec.rb b/spec/models/clusters/applications/knative_spec.rb
index 3825994b733..51c8a6bb68d 100644
--- a/spec/models/clusters/applications/knative_spec.rb
+++ b/spec/models/clusters/applications/knative_spec.rb
@@ -16,6 +16,13 @@ describe Clusters::Applications::Knative do
allow(ClusterWaitForIngressIpAddressWorker).to receive(:perform_async)
end
+ describe 'when cloud run is enabled' do
+ let(:cluster) { create(:cluster, :provided_by_gcp, :cloud_run_enabled) }
+ let(:knative_cloud_run) { create(:clusters_applications_knative, cluster: cluster) }
+
+ it { expect(knative_cloud_run).to be_not_installable }
+ end
+
describe 'when rbac is not enabled' do
let(:cluster) { create(:cluster, :provided_by_gcp, :rbac_disabled) }
let(:knative_no_rbac) { create(:clusters_applications_knative, cluster: cluster) }
@@ -112,7 +119,7 @@ describe Clusters::Applications::Knative do
subject { knative.install_command }
it 'is initialized with latest version' do
- expect(subject.version).to eq('0.6.0')
+ expect(subject.version).to eq('0.7.0')
end
it_behaves_like 'a command'
diff --git a/spec/models/clusters/applications/prometheus_spec.rb b/spec/models/clusters/applications/prometheus_spec.rb
index 8fc3b7e4c40..2aeb7e5a990 100644
--- a/spec/models/clusters/applications/prometheus_spec.rb
+++ b/spec/models/clusters/applications/prometheus_spec.rb
@@ -175,6 +175,18 @@ describe Clusters::Applications::Prometheus do
expect(subject).to be_rbac
end
+ describe '#predelete' do
+ let(:knative) { create(:clusters_applications_knative, :updated ) }
+ let(:prometheus) { create(:clusters_applications_prometheus, cluster: knative.cluster) }
+
+ subject { prometheus.uninstall_command.predelete }
+
+ it 'deletes knative metrics' do
+ metrics_config = Clusters::Applications::Knative::METRICS_CONFIG
+ is_expected.to include("kubectl delete -f #{metrics_config} --ignore-not-found")
+ end
+ end
+
context 'on a non rbac enabled cluster' do
before do
prometheus.cluster.platform_kubernetes.abac!
diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb
index 9afbe6328ca..48e3b4d6bae 100644
--- a/spec/models/clusters/cluster_spec.rb
+++ b/spec/models/clusters/cluster_spec.rb
@@ -11,11 +11,13 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
subject { build(:cluster) }
it { is_expected.to belong_to(:user) }
+ it { is_expected.to belong_to(:management_project).class_name('::Project') }
it { is_expected.to have_many(:cluster_projects) }
it { is_expected.to have_many(:projects) }
it { is_expected.to have_many(:cluster_groups) }
it { is_expected.to have_many(:groups) }
it { is_expected.to have_one(:provider_gcp) }
+ it { is_expected.to have_one(:provider_aws) }
it { is_expected.to have_one(:platform_kubernetes) }
it { is_expected.to have_one(:application_helm) }
it { is_expected.to have_one(:application_ingress) }
@@ -38,6 +40,15 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
it { is_expected.to respond_to :project }
+ describe 'applications have inverse_of: :cluster option' do
+ let(:cluster) { create(:cluster) }
+ let!(:helm) { create(:clusters_applications_helm, cluster: cluster) }
+
+ it 'does not do a third query when referencing cluster again' do
+ expect { cluster.application_helm.cluster }.not_to exceed_query_limit(2)
+ end
+ end
+
describe '.enabled' do
subject { described_class.enabled }
@@ -98,6 +109,31 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
it { is_expected.to contain_exactly(cluster) }
end
+ describe '.aws_provided' do
+ subject { described_class.aws_provided }
+
+ let!(:cluster) { create(:cluster, :provided_by_aws) }
+
+ before do
+ create(:cluster, :provided_by_user)
+ end
+
+ it { is_expected.to contain_exactly(cluster) }
+ end
+
+ describe '.aws_installed' do
+ subject { described_class.aws_installed }
+
+ let!(:cluster) { create(:cluster, :provided_by_aws) }
+
+ before do
+ errored_cluster = create(:cluster, :provided_by_aws)
+ errored_cluster.provider.make_errored!("Error message")
+ end
+
+ it { is_expected.to contain_exactly(cluster) }
+ end
+
describe '.managed' do
subject do
described_class.managed
@@ -280,6 +316,20 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
it { is_expected.to be_valid }
end
end
+
+ describe 'unique scope for management_project' do
+ let(:project) { create(:project) }
+ let!(:cluster_with_management_project) { create(:cluster, management_project: project) }
+
+ context 'duplicate scopes for the same management project' do
+ let(:cluster) { build(:cluster, management_project: project) }
+
+ it 'adds an error on environment_scope' do
+ expect(cluster).not_to be_valid
+ expect(cluster.errors[:environment_scope].first).to eq('cannot add duplicated environment scope')
+ end
+ end
+ end
end
describe '.ancestor_clusters_for_clusterable' do
@@ -374,7 +424,14 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
it 'returns a provider' do
is_expected.to eq(cluster.provider_gcp)
- expect(subject.class.name.deconstantize).to eq(Clusters::Providers.to_s)
+ end
+ end
+
+ context 'when provider is aws' do
+ let(:cluster) { create(:cluster, :provided_by_aws) }
+
+ it 'returns a provider' do
+ is_expected.to eq(cluster.provider_aws)
end
end
@@ -537,7 +594,7 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
before do
expect(Clusters::KubernetesNamespaceFinder).to receive(:new)
- .with(cluster, project: environment.project, environment_slug: environment.slug)
+ .with(cluster, project: environment.project, environment_name: environment.name)
.and_return(double(execute: persisted_namespace))
end
@@ -747,4 +804,26 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
end
end
end
+
+ describe '#knative_pre_installed?' do
+ subject { cluster.knative_pre_installed? }
+
+ context 'with a GCP provider without cloud_run' do
+ let(:cluster) { create(:cluster, :provided_by_gcp) }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'with a GCP provider with cloud_run' do
+ let(:cluster) { create(:cluster, :provided_by_gcp, :cloud_run_enabled) }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'with a user provider' do
+ let(:cluster) { create(:cluster, :provided_by_user) }
+
+ it { is_expected.to be_falsey }
+ end
+ end
end
diff --git a/spec/models/clusters/clusters_hierarchy_spec.rb b/spec/models/clusters/clusters_hierarchy_spec.rb
index 0470ebe17ea..fc35b8257e9 100644
--- a/spec/models/clusters/clusters_hierarchy_spec.rb
+++ b/spec/models/clusters/clusters_hierarchy_spec.rb
@@ -4,8 +4,8 @@ require 'spec_helper'
describe Clusters::ClustersHierarchy do
describe '#base_and_ancestors' do
- def base_and_ancestors(clusterable)
- described_class.new(clusterable).base_and_ancestors
+ def base_and_ancestors(clusterable, include_management_project: true)
+ described_class.new(clusterable, include_management_project: include_management_project).base_and_ancestors
end
context 'project in nested group with clusters at every level' do
@@ -44,14 +44,44 @@ describe Clusters::ClustersHierarchy do
end
end
+ context 'cluster has management project' do
+ let!(:project_cluster) { create(:cluster, :project, projects: [project]) }
+ let!(:group_cluster) { create(:cluster, :group, groups: [group], management_project: management_project) }
+
+ let(:group) { create(:group) }
+ let(:project) { create(:project, group: group) }
+ let(:management_project) { create(:project) }
+
+ it 'returns clusters for management_project' do
+ expect(base_and_ancestors(management_project)).to eq([group_cluster])
+ end
+
+ it 'returns nothing if include_management_project is false' do
+ expect(base_and_ancestors(management_project, include_management_project: false)).to be_empty
+ end
+
+ it 'returns clusters for project' do
+ expect(base_and_ancestors(project)).to eq([project_cluster, group_cluster])
+ end
+
+ it 'returns clusters for group' do
+ expect(base_and_ancestors(group)).to eq([group_cluster])
+ end
+ end
+
context 'project in nested group with clusters at some levels' do
- let!(:child) { create(:cluster, :group, groups: [child_group]) }
+ let!(:child) { create(:cluster, :group, groups: [child_group], management_project: management_project) }
let!(:ancestor) { create(:cluster, :group, groups: [ancestor_group]) }
let(:ancestor_group) { create(:group) }
let(:parent_group) { create(:group, parent: ancestor_group) }
let(:child_group) { create(:group, parent: parent_group) }
let(:project) { create(:project, group: child_group) }
+ let(:management_project) { create(:project) }
+
+ it 'returns clusters for management_project' do
+ expect(base_and_ancestors(management_project)).to eq([child])
+ end
it 'returns clusters for project' do
expect(base_and_ancestors(project)).to eq([child, ancestor])
diff --git a/spec/models/clusters/kubernetes_namespace_spec.rb b/spec/models/clusters/kubernetes_namespace_spec.rb
index d4e3a0ac84d..2920bbf2b58 100644
--- a/spec/models/clusters/kubernetes_namespace_spec.rb
+++ b/spec/models/clusters/kubernetes_namespace_spec.rb
@@ -24,13 +24,13 @@ RSpec.describe Clusters::KubernetesNamespace, type: :model do
end
end
- describe '.with_environment_slug' do
+ describe '.with_environment_name' do
let(:cluster) { create(:cluster, :group) }
- let(:environment) { create(:environment, slug: slug) }
+ let(:environment) { create(:environment, name: name) }
- let(:slug) { 'production' }
+ let(:name) { 'production' }
- subject { described_class.with_environment_slug(slug) }
+ subject { described_class.with_environment_name(name) }
context 'there is no associated environment' do
let!(:namespace) { create(:cluster_kubernetes_namespace, cluster: cluster, project: environment.project) }
@@ -48,12 +48,12 @@ RSpec.describe Clusters::KubernetesNamespace, type: :model do
)
end
- context 'with a matching slug' do
+ context 'with a matching name' do
it { is_expected.to eq [namespace] }
end
- context 'without a matching slug' do
- let(:environment) { create(:environment, slug: 'staging') }
+ context 'without a matching name' do
+ let(:environment) { create(:environment, name: 'staging') }
it { is_expected.to be_empty }
end
diff --git a/spec/models/clusters/platforms/kubernetes_spec.rb b/spec/models/clusters/platforms/kubernetes_spec.rb
index 0c4cf291d20..d53fc32cfef 100644
--- a/spec/models/clusters/platforms/kubernetes_spec.rb
+++ b/spec/models/clusters/platforms/kubernetes_spec.rb
@@ -19,14 +19,23 @@ describe Clusters::Platforms::Kubernetes do
it_behaves_like 'having unique enum values'
describe 'before_validation' do
+ let(:kubernetes) { create(:cluster_platform_kubernetes, :configured, namespace: namespace) }
+
context 'when namespace includes upper case' do
- let(:kubernetes) { create(:cluster_platform_kubernetes, :configured, namespace: namespace) }
let(:namespace) { 'ABC' }
it 'converts to lower case' do
expect(kubernetes.namespace).to eq('abc')
end
end
+
+ context 'when namespace is blank' do
+ let(:namespace) { '' }
+
+ it 'nullifies the namespace' do
+ expect(kubernetes.namespace).to be_nil
+ end
+ end
end
describe 'validation' do
@@ -35,8 +44,8 @@ describe Clusters::Platforms::Kubernetes do
context 'when validates namespace' do
let(:kubernetes) { build(:cluster_platform_kubernetes, :configured, namespace: namespace) }
- context 'when namespace is blank' do
- let(:namespace) { '' }
+ context 'when namespace is nil' do
+ let(:namespace) { nil }
it { is_expected.to be_truthy }
end
@@ -218,7 +227,7 @@ describe Clusters::Platforms::Kubernetes do
before do
allow(Clusters::KubernetesNamespaceFinder).to receive(:new)
- .with(cluster, project: project, environment_slug: environment_slug)
+ .with(cluster, project: project, environment_name: environment_name)
.and_return(double(execute: persisted_namespace))
end
@@ -232,6 +241,23 @@ describe Clusters::Platforms::Kubernetes do
it { is_expected.to include(key: 'KUBE_CA_PEM_FILE', value: ca_pem, public: true, file: true) }
end
+ context 'cluster is managed by project' do
+ before do
+ allow(Gitlab::Kubernetes::DefaultNamespace).to receive(:new)
+ .with(cluster, project: project).and_return(double(from_environment_name: namespace))
+
+ allow(platform).to receive(:kubeconfig).with(namespace).and_return('kubeconfig')
+ end
+
+ let(:cluster) { create(:cluster, :group, platform_kubernetes: platform, management_project: project) }
+ let(:namespace) { 'kubernetes-namespace' }
+ let(:kubeconfig) { 'kubeconfig' }
+
+ it { is_expected.to include(key: 'KUBE_TOKEN', value: platform.token, public: false, masked: true) }
+ it { is_expected.to include(key: 'KUBE_NAMESPACE', value: namespace) }
+ it { is_expected.to include(key: 'KUBECONFIG', value: kubeconfig, public: false, file: true) }
+ end
+
context 'kubernetes namespace exists' do
let(:variable) { Hash(key: :fake_key, value: 'fake_value') }
let(:namespace_variables) { Gitlab::Ci::Variables::Collection.new([variable]) }
diff --git a/spec/models/clusters/providers/aws_spec.rb b/spec/models/clusters/providers/aws_spec.rb
new file mode 100644
index 00000000000..ec8159a7ee0
--- /dev/null
+++ b/spec/models/clusters/providers/aws_spec.rb
@@ -0,0 +1,76 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Clusters::Providers::Aws do
+ it { is_expected.to belong_to(:cluster) }
+ it { is_expected.to belong_to(:created_by_user) }
+
+ it { is_expected.to validate_length_of(:key_name).is_at_least(1).is_at_most(255) }
+ it { is_expected.to validate_length_of(:region).is_at_least(1).is_at_most(255) }
+ it { is_expected.to validate_length_of(:instance_type).is_at_least(1).is_at_most(255) }
+ it { is_expected.to validate_length_of(:security_group_id).is_at_least(1).is_at_most(255) }
+ it { is_expected.to validate_presence_of(:subnet_ids) }
+
+ include_examples 'provider status', :cluster_provider_aws
+
+ describe 'default_value_for' do
+ let(:provider) { build(:cluster_provider_aws) }
+
+ it "sets default values" do
+ expect(provider.region).to eq('us-east-1')
+ expect(provider.num_nodes).to eq(3)
+ expect(provider.instance_type).to eq('m5.large')
+ end
+ end
+
+ describe 'custom validations' do
+ subject { provider.valid? }
+
+ context ':num_nodes' do
+ let(:provider) { build(:cluster_provider_aws, num_nodes: num_nodes) }
+
+ context 'contains non-digit characters' do
+ let(:num_nodes) { 'A3' }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'is blank' do
+ let(:num_nodes) { nil }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'is less than 1' do
+ let(:num_nodes) { 0 }
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'is a positive integer' do
+ let(:num_nodes) { 3 }
+
+ it { is_expected.to be_truthy }
+ end
+ end
+ end
+
+ describe '#nullify_credentials' do
+ let(:provider) { create(:cluster_provider_aws, :scheduled) }
+
+ subject { provider.nullify_credentials }
+
+ before do
+ expect(provider.access_key_id).to be_present
+ expect(provider.secret_access_key).to be_present
+ end
+
+ it 'removes access_key_id and secret_access_key' do
+ subject
+
+ expect(provider.access_key_id).to be_nil
+ expect(provider.secret_access_key).to be_nil
+ end
+ end
+end
diff --git a/spec/models/clusters/providers/gcp_spec.rb b/spec/models/clusters/providers/gcp_spec.rb
index 785db4febe0..15e152519b4 100644
--- a/spec/models/clusters/providers/gcp_spec.rb
+++ b/spec/models/clusters/providers/gcp_spec.rb
@@ -6,6 +6,8 @@ describe Clusters::Providers::Gcp do
it { is_expected.to belong_to(:cluster) }
it { is_expected.to validate_presence_of(:zone) }
+ include_examples 'provider status', :cluster_provider_gcp
+
describe 'default_value_for' do
let(:gcp) { build(:cluster_provider_gcp) }
@@ -84,86 +86,20 @@ describe Clusters::Providers::Gcp do
it { is_expected.not_to be_legacy_abac }
end
- describe '#state_machine' do
- context 'when any => [:created]' do
- let(:gcp) { build(:cluster_provider_gcp, :creating) }
-
- before do
- gcp.make_created
- end
-
- it 'nullify access_token and operation_id' do
- expect(gcp.access_token).to be_nil
- expect(gcp.operation_id).to be_nil
- expect(gcp).to be_created
- end
- end
-
- context 'when any => [:creating]' do
- let(:gcp) { build(:cluster_provider_gcp) }
-
- context 'when operation_id is present' do
- let(:operation_id) { 'operation-xxx' }
-
- before do
- gcp.make_creating(operation_id)
- end
-
- it 'sets operation_id' do
- expect(gcp.operation_id).to eq(operation_id)
- expect(gcp).to be_creating
- end
- end
-
- context 'when operation_id is nil' do
- let(:operation_id) { nil }
-
- it 'raises an error' do
- expect { gcp.make_creating(operation_id) }
- .to raise_error('operation_id is required')
- end
- end
- end
-
- context 'when any => [:errored]' do
- let(:gcp) { build(:cluster_provider_gcp, :creating) }
- let(:status_reason) { 'err msg' }
-
- it 'nullify access_token and operation_id' do
- gcp.make_errored(status_reason)
-
- expect(gcp.access_token).to be_nil
- expect(gcp.operation_id).to be_nil
- expect(gcp.status_reason).to eq(status_reason)
- expect(gcp).to be_errored
- end
-
- context 'when status_reason is nil' do
- let(:gcp) { build(:cluster_provider_gcp, :errored) }
+ describe '#knative_pre_installed?' do
+ subject { gcp.knative_pre_installed? }
- it 'does not set status_reason' do
- gcp.make_errored(nil)
+ context 'when cluster is cloud_run' do
+ let(:gcp) { create(:cluster_provider_gcp) }
- expect(gcp.status_reason).not_to be_nil
- end
- end
+ it { is_expected.to be_falsey }
end
- end
- describe '#on_creation?' do
- subject { gcp.on_creation? }
-
- context 'when status is creating' do
- let(:gcp) { create(:cluster_provider_gcp, :creating) }
+ context 'when cluster is not cloud_run' do
+ let(:gcp) { create(:cluster_provider_gcp, :cloud_run_enabled) }
it { is_expected.to be_truthy }
end
-
- context 'when status is created' do
- let(:gcp) { create(:cluster_provider_gcp, :created) }
-
- it { is_expected.to be_falsey }
- end
end
describe '#api_client' do
@@ -190,4 +126,31 @@ describe Clusters::Providers::Gcp do
it { is_expected.to be_nil }
end
end
+
+ describe '#nullify_credentials' do
+ let(:provider) { create(:cluster_provider_gcp, :creating) }
+
+ before do
+ expect(provider.access_token).to be_present
+ expect(provider.operation_id).to be_present
+ end
+
+ it 'removes access_token and operation_id' do
+ provider.nullify_credentials
+
+ expect(provider.access_token).to be_nil
+ expect(provider.operation_id).to be_nil
+ end
+ end
+
+ describe '#assign_operation_id' do
+ let(:provider) { create(:cluster_provider_gcp, :scheduled) }
+ let(:operation_id) { 'operation-123' }
+
+ it 'sets operation_id' do
+ provider.assign_operation_id(operation_id)
+
+ expect(provider.operation_id).to eq(operation_id)
+ end
+ end
end
diff --git a/spec/models/commit_collection_spec.rb b/spec/models/commit_collection_spec.rb
index 0bdf83fa90f..d49b71db5f8 100644
--- a/spec/models/commit_collection_spec.rb
+++ b/spec/models/commit_collection_spec.rb
@@ -51,6 +51,30 @@ describe CommitCollection do
end
end
+ describe '#with_latest_pipeline' do
+ let!(:pipeline) do
+ create(
+ :ci_empty_pipeline,
+ ref: 'master',
+ sha: commit.id,
+ status: 'success',
+ project: project
+ )
+ end
+ let(:collection) { described_class.new(project, [commit]) }
+
+ it 'sets the latest pipeline for every commit so no additional queries are necessary' do
+ commits = collection.with_latest_pipeline('master')
+
+ recorder = ActiveRecord::QueryRecorder.new do
+ expect(commits.map { |c| c.latest_pipeline('master') })
+ .to eq([pipeline])
+ end
+
+ expect(recorder.count).to be_zero
+ end
+ end
+
describe 'enrichment methods' do
let(:gitaly_commit) { commit }
let(:hash_commit) { Commit.from_hash(gitaly_commit.to_hash, project) }
@@ -125,27 +149,17 @@ describe CommitCollection do
collection.enrich!
end
- end
- end
- describe '#with_pipeline_status' do
- it 'sets the pipeline status for every commit so no additional queries are necessary' do
- create(
- :ci_empty_pipeline,
- ref: 'master',
- sha: commit.id,
- status: 'success',
- project: project
- )
+ it 'returns the original commit if the commit could not be lazy loaded' do
+ collection = described_class.new(project, [hash_commit])
+ unexisting_lazy_commit = Commit.lazy(project, Gitlab::Git::BLANK_SHA)
- collection = described_class.new(project, [commit])
- collection.with_pipeline_status
+ expect(Commit).to receive(:lazy).with(project, hash_commit.id).and_return(unexisting_lazy_commit)
- recorder = ActiveRecord::QueryRecorder.new do
- expect(commit.status).to eq('success')
- end
+ collection.enrich!
- expect(recorder.count).to be_zero
+ expect(collection.commits).to contain_exactly(hash_commit)
+ end
end
end
diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb
index 5ef824b9950..839c4cadb5e 100644
--- a/spec/models/commit_spec.rb
+++ b/spec/models/commit_spec.rb
@@ -462,78 +462,6 @@ eos
end
end
- describe '#last_pipeline' do
- let!(:first_pipeline) do
- create(:ci_empty_pipeline,
- project: project,
- sha: commit.sha,
- status: 'success')
- end
- let!(:second_pipeline) do
- create(:ci_empty_pipeline,
- project: project,
- sha: commit.sha,
- status: 'success')
- end
-
- it 'returns last pipeline' do
- expect(commit.last_pipeline).to eq second_pipeline
- end
- end
-
- describe '#status' do
- context 'without ref argument' do
- before do
- %w[success failed created pending].each do |status|
- create(:ci_empty_pipeline,
- project: project,
- sha: commit.sha,
- status: status)
- end
- end
-
- it 'gives compound status from latest pipelines' do
- expect(commit.status).to eq(Ci::Pipeline.latest_status)
- expect(commit.status).to eq('pending')
- end
- end
-
- context 'when a particular ref is specified' do
- let!(:pipeline_from_master) do
- create(:ci_empty_pipeline,
- project: project,
- sha: commit.sha,
- ref: 'master',
- status: 'failed')
- end
-
- let!(:pipeline_from_fix) do
- create(:ci_empty_pipeline,
- project: project,
- sha: commit.sha,
- ref: 'fix',
- status: 'success')
- end
-
- it 'gives pipelines from a particular branch' do
- expect(commit.status('master')).to eq(pipeline_from_master.status)
- expect(commit.status('fix')).to eq(pipeline_from_fix.status)
- end
-
- it 'gives compound status from latest pipelines if ref is nil' do
- expect(commit.status(nil)).to eq(pipeline_from_fix.status)
- end
- end
- end
-
- describe '#set_status_for_ref' do
- it 'sets the status for a given reference' do
- commit.set_status_for_ref('master', 'failed')
-
- expect(commit.status('master')).to eq('failed')
- end
- end
-
describe '#participants' do
let(:user1) { build(:user) }
let(:user2) { build(:user) }
@@ -575,6 +503,8 @@ eos
expect(commit.uri_type('files/html')).to be(:tree)
expect(commit.uri_type('files/images/logo-black.png')).to be(:raw)
expect(commit.uri_type('files/images/wm.svg')).to be(:raw)
+ expect(project.commit('audio').uri_type('files/audio/clip.mp3')).to be(:raw)
+ expect(project.commit('audio').uri_type('files/audio/sample.wav')).to be(:raw)
expect(project.commit('video').uri_type('files/videos/intro.mp4')).to be(:raw)
expect(commit.uri_type('files/js/application.js')).to be(:blob)
end
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index 017cca0541e..95e9b0d0f92 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -321,7 +321,7 @@ describe CommitStatus do
end
it 'returns a correct compound status' do
- expect(described_class.all.status).to eq 'running'
+ expect(described_class.all.slow_composite_status).to eq 'running'
end
end
@@ -331,7 +331,7 @@ describe CommitStatus do
end
it 'returns status that indicates success' do
- expect(described_class.all.status).to eq 'success'
+ expect(described_class.all.slow_composite_status).to eq 'success'
end
end
@@ -342,7 +342,7 @@ describe CommitStatus do
end
it 'returns status according to the scope' do
- expect(described_class.latest.status).to eq 'success'
+ expect(described_class.latest.slow_composite_status).to eq 'success'
end
end
end
diff --git a/spec/models/commit_with_pipeline_spec.rb b/spec/models/commit_with_pipeline_spec.rb
new file mode 100644
index 00000000000..e0bb29fec7b
--- /dev/null
+++ b/spec/models/commit_with_pipeline_spec.rb
@@ -0,0 +1,123 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe CommitWithPipeline do
+ let(:project) { create(:project, :public, :repository) }
+ let(:commit) { described_class.new(project.commit) }
+
+ describe '#last_pipeline' do
+ let!(:first_pipeline) do
+ create(:ci_empty_pipeline,
+ project: project,
+ sha: commit.sha,
+ status: 'success')
+ end
+ let!(:second_pipeline) do
+ create(:ci_empty_pipeline,
+ project: project,
+ sha: commit.sha,
+ status: 'success')
+ end
+
+ it 'returns last pipeline' do
+ expect(commit.last_pipeline).to eq second_pipeline
+ end
+ end
+
+ describe '#latest_pipeline' do
+ let(:pipeline) { double }
+
+ shared_examples_for 'fetching latest pipeline' do |ref|
+ it 'returns the latest pipeline for the project' do
+ expect(commit)
+ .to receive(:latest_pipeline_for_project)
+ .with(ref, project)
+ .and_return(pipeline)
+
+ expect(result).to eq(pipeline)
+ end
+
+ it "returns the memoized pipeline for the key of #{ref}" do
+ commit.set_latest_pipeline_for_ref(ref, pipeline)
+
+ expect(commit)
+ .not_to receive(:latest_pipeline_for_project)
+
+ expect(result).to eq(pipeline)
+ end
+ end
+
+ context 'without ref argument' do
+ let(:result) { commit.latest_pipeline }
+
+ it_behaves_like 'fetching latest pipeline', nil
+ end
+
+ context 'when a particular ref is specified' do
+ let(:result) { commit.latest_pipeline('master') }
+
+ it_behaves_like 'fetching latest pipeline', 'master'
+ end
+ end
+
+ describe '#latest_pipeline_for_project' do
+ let(:project_pipelines) { double }
+ let(:pipeline_project) { double }
+ let(:pipeline) { double }
+ let(:ref) { 'master' }
+ let(:result) { commit.latest_pipeline_for_project(ref, pipeline_project) }
+
+ before do
+ allow(pipeline_project).to receive(:ci_pipelines).and_return(project_pipelines)
+ end
+
+ it 'returns the latest pipeline of the commit for the given ref and project' do
+ expect(project_pipelines)
+ .to receive(:latest_pipeline_per_commit)
+ .with(commit.id, ref)
+ .and_return(commit.id => pipeline)
+
+ expect(result).to eq(pipeline)
+ end
+ end
+
+ describe '#set_latest_pipeline_for_ref' do
+ let(:pipeline) { double }
+
+ it 'sets the latest pipeline for a given reference' do
+ commit.set_latest_pipeline_for_ref('master', pipeline)
+
+ expect(commit.latest_pipeline('master')).to eq(pipeline)
+ end
+ end
+
+ describe "#status" do
+ it 'returns the status of the latest pipeline for the given ref' do
+ expect(commit)
+ .to receive(:latest_pipeline)
+ .with('master')
+ .and_return(double(status: 'success'))
+
+ expect(commit.status('master')).to eq('success')
+ end
+
+ it 'returns nil when latest pipeline is not present for the given ref' do
+ expect(commit)
+ .to receive(:latest_pipeline)
+ .with('master')
+ .and_return(nil)
+
+ expect(commit.status('master')).to eq(nil)
+ end
+
+ it 'returns the status of the latest pipeline when no ref is given' do
+ expect(commit)
+ .to receive(:latest_pipeline)
+ .with(nil)
+ .and_return(double(status: 'success'))
+
+ expect(commit.status).to eq('success')
+ end
+ end
+end
diff --git a/spec/models/concerns/access_requestable_spec.rb b/spec/models/concerns/access_requestable_spec.rb
index de2bc3a387b..5c1694e3737 100644
--- a/spec/models/concerns/access_requestable_spec.rb
+++ b/spec/models/concerns/access_requestable_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
describe AccessRequestable do
describe 'Group' do
describe '#request_access' do
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:group) { create(:group, :public) }
let(:user) { create(:user) }
it { expect(group.request_access(user)).to be_a(GroupMember) }
@@ -13,7 +13,7 @@ describe AccessRequestable do
end
describe '#access_requested?' do
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:group) { create(:group, :public) }
let(:user) { create(:user) }
before do
@@ -26,14 +26,14 @@ describe AccessRequestable do
describe 'Project' do
describe '#request_access' do
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
let(:user) { create(:user) }
it { expect(project.request_access(user)).to be_a(ProjectMember) }
end
describe '#access_requested?' do
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
let(:user) { create(:user) }
before do
diff --git a/spec/models/concerns/atomic_internal_id_spec.rb b/spec/models/concerns/atomic_internal_id_spec.rb
new file mode 100644
index 00000000000..0605392c0aa
--- /dev/null
+++ b/spec/models/concerns/atomic_internal_id_spec.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe AtomicInternalId do
+ let(:milestone) { build(:milestone) }
+ let(:iid) { double('iid', to_i: 42) }
+ let(:external_iid) { 100 }
+ let(:scope_attrs) { { project: milestone.project } }
+ let(:usage) { :milestones }
+
+ describe '#track_project_iid!' do
+ subject { milestone.track_project_iid! }
+
+ it 'tracks the present value' do
+ milestone.iid = external_iid
+
+ expect(InternalId).to receive(:track_greatest).once.with(milestone, scope_attrs, usage, external_iid, anything)
+ expect(InternalId).not_to receive(:generate_next)
+
+ subject
+ end
+
+ context 'when value is set by ensure_project_iid!' do
+ it 'does not track the value' do
+ expect(InternalId).not_to receive(:track_greatest)
+
+ milestone.ensure_project_iid!
+ subject
+ end
+
+ it 'tracks the iid for the scope that is actually present' do
+ milestone.iid = external_iid
+
+ expect(InternalId).to receive(:track_greatest).once.with(milestone, scope_attrs, usage, external_iid, anything)
+ expect(InternalId).not_to receive(:generate_next)
+
+ # group scope is not present here, the milestone does not have a group
+ milestone.track_group_iid!
+ subject
+ end
+ end
+ end
+
+ describe '#ensure_project_iid!' do
+ subject { milestone.ensure_project_iid! }
+
+ it 'generates a new value if non is present' do
+ expect(InternalId).to receive(:generate_next).with(milestone, scope_attrs, usage, anything).and_return(iid)
+
+ expect { subject }.to change { milestone.iid }.from(nil).to(iid.to_i)
+ end
+
+ it 'generates a new value if first set with iid= but later set to nil' do
+ expect(InternalId).to receive(:generate_next).with(milestone, scope_attrs, usage, anything).and_return(iid)
+
+ milestone.iid = external_iid
+ milestone.iid = nil
+
+ expect { subject }.to change { milestone.iid }.from(nil).to(iid.to_i)
+ end
+ end
+end
diff --git a/spec/models/concerns/checksummable_spec.rb b/spec/models/concerns/checksummable_spec.rb
new file mode 100644
index 00000000000..017077bd297
--- /dev/null
+++ b/spec/models/concerns/checksummable_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Checksummable do
+ describe ".hexdigest" do
+ let(:fake_class) do
+ Class.new do
+ include Checksummable
+ end
+ end
+
+ it 'returns the SHA256 sum of the file' do
+ expected = Digest::SHA256.file(__FILE__).hexdigest
+
+ expect(fake_class.hexdigest(__FILE__)).to eq(expected)
+ end
+ end
+end
diff --git a/spec/models/concerns/deployable_spec.rb b/spec/models/concerns/deployable_spec.rb
deleted file mode 100644
index ad2c0770a2c..00000000000
--- a/spec/models/concerns/deployable_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Deployable do
- describe '#create_deployment' do
- let(:deployment) { job.deployment }
- let(:environment) { deployment&.environment }
-
- context 'when the deployable object will deploy to production' do
- let!(:job) { create(:ci_build, :start_review_app) }
-
- it 'creates a deployment and environment record' do
- expect(deployment.project).to eq(job.project)
- expect(deployment.ref).to eq(job.ref)
- expect(deployment.tag).to eq(job.tag)
- expect(deployment.sha).to eq(job.sha)
- expect(deployment.user).to eq(job.user)
- expect(deployment.deployable).to eq(job)
- expect(deployment.on_stop).to eq('stop_review_app')
- expect(environment.name).to eq('review/master')
- end
- end
-
- context 'when the deployable object will deploy to a cluster' do
- let(:project) { create(:project) }
- let!(:cluster) { create(:cluster, :provided_by_user, projects: [project]) }
- let!(:job) { create(:ci_build, :start_review_app, project: project) }
-
- it 'creates a deployment with cluster association' do
- expect(deployment.cluster).to eq(cluster)
- end
- end
-
- context 'when the deployable object will stop an environment' do
- let!(:job) { create(:ci_build, :stop_review_app) }
-
- it 'does not create a deployment record' do
- expect(deployment).to be_nil
- end
- end
-
- context 'when the deployable object has already had a deployment' do
- let!(:job) { create(:ci_build, :start_review_app, deployment: race_deployment) }
- let!(:race_deployment) { create(:deployment, :success) }
-
- it 'does not create a new deployment' do
- expect(deployment).to eq(race_deployment)
- end
- end
-
- context 'when the deployable object will not deploy' do
- let!(:job) { create(:ci_build) }
-
- it 'does not create a deployment and environment record' do
- expect(deployment).to be_nil
- expect(environment).to be_nil
- end
- end
-
- context 'when environment scope contains invalid character' do
- let(:job) do
- create(
- :ci_build,
- name: 'job:deploy-to-test-site',
- environment: '$CI_JOB_NAME',
- options: {
- environment: {
- name: '$CI_JOB_NAME',
- url: 'http://staging.example.com/$CI_JOB_NAME',
- on_stop: 'stop_review_app'
- }
- })
- end
-
- it 'does not create a deployment and environment record' do
- expect(deployment).to be_nil
- expect(environment).to be_nil
- end
- end
- end
-end
diff --git a/spec/models/concerns/deployment_platform_spec.rb b/spec/models/concerns/deployment_platform_spec.rb
index 220f244ad71..f99bf18768f 100644
--- a/spec/models/concerns/deployment_platform_spec.rb
+++ b/spec/models/concerns/deployment_platform_spec.rb
@@ -12,6 +12,26 @@ describe DeploymentPlatform do
it { is_expected.to be_nil }
end
+ context 'when project is the cluster\'s management project ' do
+ let!(:cluster_with_management_project) { create(:cluster, :provided_by_user, management_project: project) }
+
+ context 'cluster_management_project feature is enabled' do
+ it 'returns the cluster with management project' do
+ is_expected.to eq(cluster_with_management_project.platform_kubernetes)
+ end
+ end
+
+ context 'cluster_management_project feature is disabled' do
+ before do
+ stub_feature_flags(cluster_management_project: false)
+ end
+
+ it 'returns nothing' do
+ is_expected.to be_nil
+ end
+ end
+ end
+
context 'when project has configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
let(:platform_kubernetes) { cluster.platform_kubernetes }
@@ -45,6 +65,35 @@ describe DeploymentPlatform do
is_expected.to eq(group_cluster.platform_kubernetes)
end
+ context 'when project is the cluster\'s management project ' do
+ let!(:cluster_with_management_project) { create(:cluster, :provided_by_user, management_project: project) }
+
+ context 'cluster_management_project feature is enabled' do
+ it 'returns the cluster with management project' do
+ is_expected.to eq(cluster_with_management_project.platform_kubernetes)
+ end
+ end
+
+ context 'cluster_management_project feature is disabled' do
+ before do
+ stub_feature_flags(cluster_management_project: false)
+ end
+
+ it 'returns the group cluster' do
+ is_expected.to eq(group_cluster.platform_kubernetes)
+ end
+ end
+ end
+
+ context 'when project is not the cluster\'s management project' do
+ let(:another_project) { create(:project, group: group) }
+ let!(:cluster_with_management_project) { create(:cluster, :provided_by_user, management_project: another_project) }
+
+ it 'returns the group cluster' do
+ is_expected.to eq(group_cluster.platform_kubernetes)
+ end
+ end
+
context 'when child group has configured kubernetes cluster' do
let(:child_group1) { create(:group, parent: group) }
let!(:child_group1_cluster) { create(:cluster_for_group, groups: [child_group1]) }
diff --git a/spec/models/concerns/has_status_spec.rb b/spec/models/concerns/has_status_spec.rb
index 09fb2fff521..21e4dda6dab 100644
--- a/spec/models/concerns/has_status_spec.rb
+++ b/spec/models/concerns/has_status_spec.rb
@@ -3,12 +3,15 @@
require 'spec_helper'
describe HasStatus do
- describe '.status' do
- subject { CommitStatus.status }
+ describe '.slow_composite_status' do
+ using RSpec::Parameterized::TableSyntax
+
+ subject { CommitStatus.slow_composite_status }
shared_examples 'build status summary' do
context 'all successful' do
let!(:statuses) { Array.new(2) { create(type, status: :success) } }
+
it { is_expected.to eq 'success' }
end
@@ -165,16 +168,26 @@ describe HasStatus do
end
end
- context 'ci build statuses' do
- let(:type) { :ci_build }
-
- it_behaves_like 'build status summary'
+ where(:ci_composite_status) do
+ [false, true]
end
- context 'generic commit statuses' do
- let(:type) { :generic_commit_status }
+ with_them do
+ before do
+ stub_feature_flags(ci_composite_status: ci_composite_status)
+ end
+
+ context 'ci build statuses' do
+ let(:type) { :ci_build }
- it_behaves_like 'build status summary'
+ it_behaves_like 'build status summary'
+ end
+
+ context 'generic commit statuses' do
+ let(:type) { :generic_commit_status }
+
+ it_behaves_like 'build status summary'
+ end
end
end
@@ -372,8 +385,8 @@ describe HasStatus do
end
end
- describe '.status_sql' do
- subject { Ci::Build.status_sql }
+ describe '.legacy_status_sql' do
+ subject { Ci::Build.legacy_status_sql }
it 'returns SQL' do
puts subject
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb
index 65d41edc035..e8116f0a301 100644
--- a/spec/models/concerns/issuable_spec.rb
+++ b/spec/models/concerns/issuable_spec.rb
@@ -45,8 +45,11 @@ describe Issuable do
it { is_expected.to validate_presence_of(:iid) }
it { is_expected.to validate_presence_of(:author) }
it { is_expected.to validate_presence_of(:title) }
- it { is_expected.to validate_length_of(:title).is_at_most(255) }
- it { is_expected.to validate_length_of(:description).is_at_most(1_000_000) }
+ it { is_expected.to validate_length_of(:title).is_at_most(described_class::TITLE_LENGTH_MAX) }
+ it { is_expected.to validate_length_of(:description).is_at_most(described_class::DESCRIPTION_LENGTH_MAX).on(:create) }
+
+ it_behaves_like 'validates description length with custom validation'
+ it_behaves_like 'truncates the description to its allowed maximum length on import'
end
describe 'milestone' do
diff --git a/spec/models/concerns/noteable_spec.rb b/spec/models/concerns/noteable_spec.rb
index 929b5f52c7c..f823ac0165f 100644
--- a/spec/models/concerns/noteable_spec.rb
+++ b/spec/models/concerns/noteable_spec.rb
@@ -6,6 +6,7 @@ describe Noteable do
let!(:active_diff_note1) { create(:diff_note_on_merge_request) }
let(:project) { active_diff_note1.project }
subject { active_diff_note1.noteable }
+
let!(:active_diff_note2) { create(:diff_note_on_merge_request, project: project, noteable: subject, in_reply_to: active_diff_note1) }
let!(:active_diff_note3) { create(:diff_note_on_merge_request, project: project, noteable: subject, position: active_position2) }
let!(:outdated_diff_note1) { create(:diff_note_on_merge_request, project: project, noteable: subject, position: outdated_position) }
diff --git a/spec/models/concerns/stepable_spec.rb b/spec/models/concerns/stepable_spec.rb
index 5685de6a9bf..51356c3eaf6 100644
--- a/spec/models/concerns/stepable_spec.rb
+++ b/spec/models/concerns/stepable_spec.rb
@@ -7,6 +7,8 @@ describe Stepable do
Class.new do
include Stepable
+ attr_writer :return_non_success
+
steps :method1, :method2, :method3
def execute
@@ -15,18 +17,18 @@ describe Stepable do
private
- def method1
+ def method1(_result)
{ status: :success }
end
- def method2
- return { status: :error } unless @pass
+ def method2(result)
+ return { status: :not_a_success } if @return_non_success
- { status: :success, variable1: 'var1' }
+ result.merge({ status: :success, variable1: 'var1', excluded_variable: 'a' })
end
- def method3
- { status: :success, variable2: 'var2' }
+ def method3(result)
+ result.except(:excluded_variable).merge({ status: :success, variable2: 'var2' })
end
end
end
@@ -41,8 +43,8 @@ describe Stepable do
private
- def appended_method1
- { status: :success }
+ def appended_method1(previous_result)
+ previous_result.merge({ status: :success })
end
end
end
@@ -51,21 +53,19 @@ describe Stepable do
described_class.prepend(prepended_module)
end
- it 'stops after the first error' do
+ it 'stops after the first non success status' do
+ subject.return_non_success = true
+
expect(subject).not_to receive(:method3)
expect(subject).not_to receive(:appended_method1)
expect(subject.execute).to eq(
- status: :error,
- failed_step: :method2
+ status: :not_a_success,
+ last_step: :method2
)
end
context 'when all methods return success' do
- before do
- subject.instance_variable_set(:@pass, true)
- end
-
it 'calls all methods in order' do
expect(subject).to receive(:method1).and_call_original.ordered
expect(subject).to receive(:method2).and_call_original.ordered
@@ -82,6 +82,10 @@ describe Stepable do
variable2: 'var2'
)
end
+
+ it 'can modify results of previous steps' do
+ expect(subject.execute).not_to include(excluded_variable: 'a')
+ end
end
context 'with multiple stepable classes' do
diff --git a/spec/models/concerns/token_authenticatable_spec.rb b/spec/models/concerns/token_authenticatable_spec.rb
index 51e28974ae0..43b894b5957 100644
--- a/spec/models/concerns/token_authenticatable_spec.rb
+++ b/spec/models/concerns/token_authenticatable_spec.rb
@@ -17,6 +17,7 @@ describe User, 'TokenAuthenticatable' do
describe 'ensures authentication token' do
subject { create(:user).send(token_field) }
+
it { is_expected.to be_a String }
end
end
diff --git a/spec/models/container_repository_spec.rb b/spec/models/container_repository_spec.rb
index 935838ce294..eea539746a5 100644
--- a/spec/models/container_repository_spec.rb
+++ b/spec/models/container_repository_spec.rb
@@ -78,7 +78,7 @@ describe ContainerRepository do
describe '#delete_tags!' do
let(:repository) do
create(:container_repository, name: 'my_image',
- tags: %w[latest rc1],
+ tags: { latest: '123', rc1: '234' },
project: project)
end
@@ -86,6 +86,7 @@ describe ContainerRepository do
it 'returns status that indicates success' do
expect(repository.client)
.to receive(:delete_repository_tag)
+ .twice
.and_return(true)
expect(repository.delete_tags!).to be_truthy
@@ -96,6 +97,7 @@ describe ContainerRepository do
it 'returns status that indicates failure' do
expect(repository.client)
.to receive(:delete_repository_tag)
+ .twice
.and_return(false)
expect(repository.delete_tags!).to be_falsey
diff --git a/spec/models/deploy_keys_project_spec.rb b/spec/models/deploy_keys_project_spec.rb
index c137444763b..1dbae78a01d 100644
--- a/spec/models/deploy_keys_project_spec.rb
+++ b/spec/models/deploy_keys_project_spec.rb
@@ -16,6 +16,7 @@ describe DeployKeysProject do
describe "Destroying" do
let(:project) { create(:project) }
subject { create(:deploy_keys_project, project: project) }
+
let(:deploy_key) { subject.deploy_key }
context "when the deploy key is only used by this project" do
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb
index 51ed8e9421b..3a0b3c46ad0 100644
--- a/spec/models/deployment_spec.rb
+++ b/spec/models/deployment_spec.rb
@@ -348,4 +348,17 @@ describe Deployment do
expect(deployment.deployed_by).to eq(build_user)
end
end
+
+ describe '.find_successful_deployment!' do
+ it 'returns a successful deployment' do
+ deploy = create(:deployment, :success)
+
+ expect(described_class.find_successful_deployment!(deploy.iid)).to eq(deploy)
+ end
+
+ it 'raises when no deployment is found' do
+ expect { described_class.find_successful_deployment!(-1) }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
end
diff --git a/spec/models/description_version_spec.rb b/spec/models/description_version_spec.rb
new file mode 100644
index 00000000000..5ec34c0cde4
--- /dev/null
+++ b/spec/models/description_version_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe DescriptionVersion do
+ describe 'associations' do
+ it { is_expected.to belong_to :issue }
+ it { is_expected.to belong_to :merge_request }
+ end
+
+ describe 'validations' do
+ describe 'exactly_one_issuable' do
+ using RSpec::Parameterized::TableSyntax
+
+ subject { described_class.new(issue_id: issue_id, merge_request_id: merge_request_id).valid? }
+
+ where(:issue_id, :merge_request_id, :valid?) do
+ nil | 1 | true
+ 1 | nil | true
+ nil | nil | false
+ 1 | 1 | false
+ end
+
+ with_them do
+ it { is_expected.to eq(valid?) }
+ end
+ end
+ end
+end
diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb
index 521c4704c87..786f3b832c4 100644
--- a/spec/models/environment_spec.rb
+++ b/spec/models/environment_spec.rb
@@ -882,4 +882,19 @@ describe Environment, :use_clean_rails_memory_store_caching do
end
end
end
+
+ describe '.find_or_create_by_name' do
+ it 'finds an existing environment if it exists' do
+ env = create(:environment)
+
+ expect(described_class.find_or_create_by_name(env.name)).to eq(env)
+ end
+
+ it 'creates an environment if it does not exist' do
+ env = project.environments.find_or_create_by_name('kittens')
+
+ expect(env).to be_an_instance_of(described_class)
+ expect(env).to be_persisted
+ end
+ end
end
diff --git a/spec/models/environment_status_spec.rb b/spec/models/environment_status_spec.rb
index e2836420df9..01d331f518b 100644
--- a/spec/models/environment_status_spec.rb
+++ b/spec/models/environment_status_spec.rb
@@ -95,7 +95,7 @@ describe EnvironmentStatus do
describe '.build_environments_status' do
subject { described_class.send(:build_environments_status, merge_request, user, pipeline) }
- let!(:build) { create(:ci_build, :deploy_to_production, pipeline: pipeline) }
+ let!(:build) { create(:ci_build, :with_deployment, :deploy_to_production, pipeline: pipeline) }
let(:environment) { build.deployment.environment }
let(:user) { project.owner }
diff --git a/spec/models/event_collection_spec.rb b/spec/models/event_collection_spec.rb
index efe511042c3..c421ffa000d 100644
--- a/spec/models/event_collection_spec.rb
+++ b/spec/models/event_collection_spec.rb
@@ -4,50 +4,75 @@ require 'spec_helper'
describe EventCollection do
describe '#to_a' do
- let(:project) { create(:project_empty_repo) }
- let(:projects) { Project.where(id: project.id) }
- let(:user) { create(:user) }
+ set(:group) { create(:group) }
+ set(:project) { create(:project_empty_repo, group: group) }
+ set(:projects) { Project.where(id: project.id) }
+ set(:user) { create(:user) }
- before do
- 20.times do
- event = create(:push_event, project: project, author: user)
+ context 'with project events' do
+ before do
+ 20.times do
+ event = create(:push_event, project: project, author: user)
- create(:push_event_payload, event: event)
+ create(:push_event_payload, event: event)
+ end
+
+ create(:closed_issue_event, project: project, author: user)
end
- create(:closed_issue_event, project: project, author: user)
- end
+ it 'returns an Array of events' do
+ events = described_class.new(projects).to_a
- it 'returns an Array of events' do
- events = described_class.new(projects).to_a
+ expect(events).to be_an_instance_of(Array)
+ end
- expect(events).to be_an_instance_of(Array)
- end
+ it 'applies a limit to the number of events' do
+ events = described_class.new(projects).to_a
- it 'applies a limit to the number of events' do
- events = described_class.new(projects).to_a
+ expect(events.length).to eq(20)
+ end
- expect(events.length).to eq(20)
- end
+ it 'can paginate through events' do
+ events = described_class.new(projects, offset: 20).to_a
- it 'can paginate through events' do
- events = described_class.new(projects, offset: 20).to_a
+ expect(events.length).to eq(1)
+ end
- expect(events.length).to eq(1)
- end
+ it 'returns an empty Array when crossing the maximum page number' do
+ events = described_class.new(projects, limit: 1, offset: 15).to_a
- it 'returns an empty Array when crossing the maximum page number' do
- events = described_class.new(projects, limit: 1, offset: 15).to_a
+ expect(events).to be_empty
+ end
+
+ it 'allows filtering of events using an EventFilter' do
+ filter = EventFilter.new(EventFilter::ISSUE)
+ events = described_class.new(projects, filter: filter).to_a
- expect(events).to be_empty
+ expect(events.length).to eq(1)
+ expect(events[0].action).to eq(Event::CLOSED)
+ end
end
- it 'allows filtering of events using an EventFilter' do
- filter = EventFilter.new(EventFilter::ISSUE)
- events = described_class.new(projects, filter: filter).to_a
+ context 'with group events' do
+ let(:groups) { group.self_and_descendants.public_or_visible_to_user(user) }
+ let(:subject) { described_class.new(projects, groups: groups).to_a }
+
+ it 'includes also group events' do
+ subgroup = create(:group, parent: group)
+ event1 = create(:event, project: project, author: user)
+ event2 = create(:event, project: nil, group: group, author: user)
+ event3 = create(:event, project: nil, group: subgroup, author: user)
- expect(events.length).to eq(1)
- expect(events[0].action).to eq(Event::CLOSED)
+ expect(subject).to eq([event3, event2, event1])
+ end
+
+ it 'does not include events from inaccessible groups' do
+ subgroup = create(:group, :private, parent: group)
+ event1 = create(:event, project: nil, group: group, author: user)
+ create(:event, project: nil, group: subgroup, author: user)
+
+ expect(subject).to eq([event1])
+ end
end
end
end
diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb
index 62663c247d1..ff2e1aa047e 100644
--- a/spec/models/event_spec.rb
+++ b/spec/models/event_spec.rb
@@ -100,26 +100,31 @@ describe Event do
describe '#membership_changed?' do
context "created" do
subject { build(:event, :created).membership_changed? }
+
it { is_expected.to be_falsey }
end
context "updated" do
subject { build(:event, :updated).membership_changed? }
+
it { is_expected.to be_falsey }
end
context "expired" do
subject { build(:event, :expired).membership_changed? }
+
it { is_expected.to be_truthy }
end
context "left" do
subject { build(:event, :left).membership_changed? }
+
it { is_expected.to be_truthy }
end
context "joined" do
subject { build(:event, :joined).membership_changed? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/models/evidence_spec.rb b/spec/models/evidence_spec.rb
new file mode 100644
index 00000000000..00788c2c391
--- /dev/null
+++ b/spec/models/evidence_spec.rb
@@ -0,0 +1,87 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidence do
+ let_it_be(:project) { create(:project) }
+ let(:release) { create(:release, project: project) }
+ let(:schema_file) { 'evidences/evidence' }
+ let(:summary_json) { described_class.last.summary.to_json }
+
+ describe 'associations' do
+ it { is_expected.to belong_to(:release) }
+ end
+
+ describe 'summary_sha' do
+ it 'returns nil if summary is nil' do
+ expect(build(:evidence, summary: nil).summary_sha).to be_nil
+ end
+ end
+
+ describe '#generate_summary_and_sha' do
+ before do
+ described_class.create!(release: release)
+ end
+
+ context 'when a release name is not provided' do
+ let(:release) { create(:release, project: project, name: nil) }
+
+ it 'creates a valid JSON object' do
+ expect(release.name).to be_nil
+ expect(summary_json).to match_schema(schema_file)
+ end
+ end
+
+ context 'when a release is associated to a milestone' do
+ let(:milestone) { create(:milestone, project: project) }
+ let(:release) { create(:release, project: project, milestones: [milestone]) }
+
+ context 'when a milestone has no issue associated with it' do
+ it 'creates a valid JSON object' do
+ expect(milestone.issues).to be_empty
+ expect(summary_json).to match_schema(schema_file)
+ end
+ end
+
+ context 'when a milestone has no description' do
+ let(:milestone) { create(:milestone, project: project, description: nil) }
+
+ it 'creates a valid JSON object' do
+ expect(milestone.description).to be_nil
+ expect(summary_json).to match_schema(schema_file)
+ end
+ end
+
+ context 'when a milestone has no due_date' do
+ let(:milestone) { create(:milestone, project: project, due_date: nil) }
+
+ it 'creates a valid JSON object' do
+ expect(milestone.due_date).to be_nil
+ expect(summary_json).to match_schema(schema_file)
+ end
+ end
+
+ context 'when a milestone has an issue' do
+ context 'when the issue has no description' do
+ let(:issue) { create(:issue, project: project, description: nil, state: 'closed') }
+
+ before do
+ milestone.issues << issue
+ end
+
+ it 'creates a valid JSON object' do
+ expect(milestone.issues.first.description).to be_nil
+ expect(summary_json).to match_schema(schema_file)
+ end
+ end
+ end
+ end
+
+ context 'when a release is not associated to any milestone' do
+ it 'creates a valid JSON object' do
+ expect(release.milestones).to be_empty
+ expect(summary_json).to match_schema(schema_file)
+ end
+ end
+ end
+end
diff --git a/spec/models/gpg_signature_spec.rb b/spec/models/gpg_signature_spec.rb
index 4911375c962..a780b8bfdf5 100644
--- a/spec/models/gpg_signature_spec.rb
+++ b/spec/models/gpg_signature_spec.rb
@@ -20,6 +20,7 @@ RSpec.describe GpgSignature do
describe 'validation' do
subject { described_class.new }
+
it { is_expected.to validate_presence_of(:commit_sha) }
it { is_expected.to validate_presence_of(:project_id) }
it { is_expected.to validate_presence_of(:gpg_key_primary_keyid) }
@@ -60,6 +61,18 @@ RSpec.describe GpgSignature do
end
end
+ describe '.by_commit_sha scope' do
+ let(:gpg_key) { create(:gpg_key, key: GpgHelpers::User2.public_key) }
+ let!(:another_gpg_signature) { create(:gpg_signature, gpg_key: gpg_key) }
+
+ it 'returns all gpg signatures by sha' do
+ expect(described_class.by_commit_sha(commit_sha)).to eq([gpg_signature])
+ expect(
+ described_class.by_commit_sha([commit_sha, another_gpg_signature.commit_sha])
+ ).to contain_exactly(gpg_signature, another_gpg_signature)
+ end
+ end
+
describe '#commit' do
it 'fetches the commit through the project' do
expect_any_instance_of(Project).to receive(:commit).with(commit_sha).and_return(commit)
diff --git a/spec/models/grafana_integration_spec.rb b/spec/models/grafana_integration_spec.rb
new file mode 100644
index 00000000000..f8973097a40
--- /dev/null
+++ b/spec/models/grafana_integration_spec.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe GrafanaIntegration do
+ describe 'associations' do
+ it { is_expected.to belong_to(:project) }
+ end
+
+ describe 'validations' do
+ it { is_expected.to validate_presence_of(:project) }
+ it { is_expected.to validate_presence_of(:token) }
+
+ it 'disallows invalid urls for grafana_url' do
+ unsafe_url = %{https://replaceme.com/'><script>alert(document.cookie)</script>}
+ non_ascii_url = 'http://gitlab.com/api/0/projects/project1/something€'
+ blank_url = ''
+ excessively_long_url = 'https://grafan' + 'a' * 1024 + '.com'
+
+ is_expected.not_to allow_values(
+ unsafe_url,
+ non_ascii_url,
+ blank_url,
+ excessively_long_url
+ ).for(:grafana_url)
+ end
+
+ it 'allows valid urls for grafana_url' do
+ external_url = 'http://grafana.com/'
+ internal_url = 'http://192.168.1.1'
+
+ is_expected.to allow_value(
+ external_url,
+ internal_url
+ ).for(:grafana_url)
+ end
+ end
+end
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 796b6917fb2..520421ac5e3 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
describe Group do
- let!(:group) { create(:group, :access_requestable) }
+ let!(:group) { create(:group) }
describe 'associations' do
it { is_expected.to have_many :projects }
@@ -331,7 +331,7 @@ describe Group do
end
describe '#avatar_url' do
- let!(:group) { create(:group, :access_requestable, :with_avatar) }
+ let!(:group) { create(:group, :with_avatar) }
let(:user) { create(:user) }
context 'when avatar file is uploaded' do
@@ -880,22 +880,6 @@ describe Group do
end
end
- describe '#has_parent?' do
- context 'when the group has a parent' do
- it 'is truthy' do
- group = create(:group, :nested)
- expect(group.has_parent?).to be_truthy
- end
- end
-
- context 'when the group has no parent' do
- it 'is falsy' do
- group = create(:group, parent: nil)
- expect(group.has_parent?).to be_falsy
- end
- end
- end
-
context 'with uploads' do
it_behaves_like 'model with uploads', true do
let(:model_object) { create(:group, :with_avatar) }
@@ -1058,4 +1042,21 @@ describe Group do
expect(group.access_request_approvers_to_be_notified).to eq(active_owners_in_recent_sign_in_desc_order)
end
end
+
+ describe '.groups_including_descendants_by' do
+ it 'returns the expected groups for a group and its descendants' do
+ parent_group1 = create(:group)
+ child_group1 = create(:group, parent: parent_group1)
+ child_group2 = create(:group, parent: parent_group1)
+
+ parent_group2 = create(:group)
+ child_group3 = create(:group, parent: parent_group2)
+
+ create(:group)
+
+ groups = described_class.groups_including_descendants_by([parent_group2.id, parent_group1.id])
+
+ expect(groups).to contain_exactly(parent_group1, parent_group2, child_group1, child_group2, child_group3)
+ end
+ end
end
diff --git a/spec/models/hooks/web_hook_spec.rb b/spec/models/hooks/web_hook_spec.rb
index fe08dc4f5e6..025c11d6407 100644
--- a/spec/models/hooks/web_hook_spec.rb
+++ b/spec/models/hooks/web_hook_spec.rb
@@ -6,7 +6,7 @@ describe WebHook do
let(:hook) { build(:project_hook) }
describe 'associations' do
- it { is_expected.to have_many(:web_hook_logs).dependent(:destroy) }
+ it { is_expected.to have_many(:web_hook_logs) }
end
describe 'validations' do
@@ -85,4 +85,13 @@ describe WebHook do
hook.async_execute(data, hook_name)
end
end
+
+ describe '#destroy' do
+ it 'cascades to web_hook_logs' do
+ web_hook = create(:project_hook)
+ create_list(:web_hook_log, 3, web_hook: web_hook)
+
+ expect { web_hook.destroy }.to change(web_hook.web_hook_logs, :count).by(-3)
+ end
+ end
end
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 9c58d307c4c..18a1a30eee5 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -138,7 +138,10 @@ describe Issue do
end
it 'changes the state to closed' do
- expect { issue.close }.to change { issue.state }.from('opened').to('closed')
+ open_state = described_class.available_states[:opened]
+ closed_state = described_class.available_states[:closed]
+
+ expect { issue.close }.to change { issue.state_id }.from(open_state).to(closed_state)
end
end
@@ -155,7 +158,7 @@ describe Issue do
end
it 'changes the state to opened' do
- expect { issue.reopen }.to change { issue.state }.from('closed').to('opened')
+ expect { issue.reopen }.to change { issue.state_id }.from(described_class.available_states[:closed]).to(described_class.available_states[:opened])
end
end
@@ -277,6 +280,7 @@ describe Issue do
context 'checking destination project also' do
subject { issue.can_move?(user, to_project) }
+
let(:to_project) { create(:project) }
context 'destination project allowed' do
@@ -899,4 +903,6 @@ describe Issue do
let(:default_params) { { project: project } }
end
end
+
+ it_behaves_like 'versioned description'
end
diff --git a/spec/models/lfs_object_spec.rb b/spec/models/lfs_object_spec.rb
index 85bfc3f1387..47cae5cf197 100644
--- a/spec/models/lfs_object_spec.rb
+++ b/spec/models/lfs_object_spec.rb
@@ -31,6 +31,46 @@ describe LfsObject do
end
end
+ describe '#project_allowed_access?' do
+ set(:lfs_object) { create(:lfs_objects_project).lfs_object }
+ set(:project) { create(:project) }
+
+ it 'returns true when project is linked' do
+ create(:lfs_objects_project, lfs_object: lfs_object, project: project)
+
+ expect(lfs_object.project_allowed_access?(project)).to eq(true)
+ end
+
+ it 'returns false when project is not linked' do
+ expect(lfs_object.project_allowed_access?(project)).to eq(false)
+ end
+
+ context 'when project is a member of a fork network' do
+ set(:fork_network) { create(:fork_network) }
+ set(:fork_network_root_project) { fork_network.root_project }
+ set(:fork_network_membership) { create(:fork_network_member, project: project, fork_network: fork_network) }
+
+ it 'returns true for all members when forked project is linked' do
+ create(:lfs_objects_project, lfs_object: lfs_object, project: project)
+
+ expect(lfs_object.project_allowed_access?(project)).to eq(true)
+ expect(lfs_object.project_allowed_access?(fork_network_root_project)).to eq(true)
+ end
+
+ it 'returns true for all members when root of network is linked' do
+ create(:lfs_objects_project, lfs_object: lfs_object, project: fork_network_root_project)
+
+ expect(lfs_object.project_allowed_access?(project)).to eq(true)
+ expect(lfs_object.project_allowed_access?(fork_network_root_project)).to eq(true)
+ end
+
+ it 'returns false when no member of fork network is linked' do
+ expect(lfs_object.project_allowed_access?(project)).to eq(false)
+ expect(lfs_object.project_allowed_access?(fork_network_root_project)).to eq(false)
+ end
+ end
+ end
+
describe '#schedule_background_upload' do
before do
stub_lfs_setting(enabled: true)
@@ -116,4 +156,15 @@ describe LfsObject do
end
end
end
+
+ describe ".calculate_oid" do
+ let(:lfs_object) { create(:lfs_object, :with_file) }
+
+ it 'returns SHA256 sum of the file' do
+ path = lfs_object.file.path
+ expected = Digest::SHA256.file(path).hexdigest
+
+ expect(described_class.calculate_oid(path)).to eq expected
+ end
+ end
end
diff --git a/spec/models/list_spec.rb b/spec/models/list_spec.rb
index dc28204d7aa..bc9124e73af 100644
--- a/spec/models/list_spec.rb
+++ b/spec/models/list_spec.rb
@@ -136,18 +136,6 @@ describe List do
expect(preferences).to be_persisted
expect(preferences.collapsed).to eq(true)
end
-
- context 'when preferences are already loaded for user' do
- it 'gets preloaded user preferences' do
- fetched_list = described_class.where(id: list.id).with_preferences_for(user).first
-
- expect(fetched_list).to receive(:preloaded_preferences_for).with(user).and_call_original
-
- preferences = fetched_list.preferences_for(user)
-
- expect(preferences.collapsed).to eq(true)
- end
- end
end
context 'when preferences for user does not exist' do
diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb
index 2cb4f222ea4..e7f03226826 100644
--- a/spec/models/member_spec.rb
+++ b/spec/models/member_spec.rb
@@ -92,7 +92,7 @@ describe Member do
describe 'Scopes & finders' do
before do
- project = create(:project, :public, :access_requestable)
+ project = create(:project, :public)
group = create(:group)
@owner_user = create(:user).tap { |u| group.add_owner(u) }
@owner = group.members.find_by(user_id: @owner_user.id)
@@ -230,7 +230,7 @@ describe Member do
describe '.add_user' do
%w[project group].each do |source_type|
context "when source is a #{source_type}" do
- let!(:source) { create(source_type, :public, :access_requestable) }
+ let!(:source) { create(source_type, :public) }
let!(:user) { create(:user) }
let!(:admin) { create(:admin) }
@@ -437,7 +437,7 @@ describe Member do
describe '.add_users' do
%w[project group].each do |source_type|
context "when source is a #{source_type}" do
- let!(:source) { create(source_type, :public, :access_requestable) }
+ let!(:source) { create(source_type, :public) }
let!(:admin) { create(:admin) }
let(:user1) { create(:user) }
let(:user2) { create(:user) }
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index 65cc1a4bd6b..ad79bee8801 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -470,7 +470,7 @@ describe MergeRequest do
commit = double('commit1', safe_message: "Fixes #{issue.to_reference}")
allow(subject).to receive(:commits).and_return([commit])
- allow(subject).to receive(:state).and_return("closed")
+ allow(subject).to receive(:state_id).and_return(described_class.available_states[:closed])
expect { subject.cache_merge_request_closes_issues!(subject.author) }.not_to change(subject.merge_requests_closing_issues, :count)
end
@@ -479,7 +479,7 @@ describe MergeRequest do
issue = create :issue, project: subject.project
commit = double('commit1', safe_message: "Fixes #{issue.to_reference}")
allow(subject).to receive(:commits).and_return([commit])
- allow(subject).to receive(:state).and_return("merged")
+ allow(subject).to receive(:state_id).and_return(described_class.available_states[:merged])
expect { subject.cache_merge_request_closes_issues!(subject.author) }.not_to change(subject.merge_requests_closing_issues, :count)
end
@@ -541,6 +541,7 @@ describe MergeRequest do
context 'with diffs' do
subject { create(:merge_request, :with_diffs) }
+
it 'returns the sha of the source branch last commit' do
expect(subject.source_branch_sha).to eq(last_branch_commit.sha)
end
@@ -548,6 +549,7 @@ describe MergeRequest do
context 'without diffs' do
subject { create(:merge_request, :without_diffs) }
+
it 'returns the sha of the source branch last commit' do
expect(subject.source_branch_sha).to eq(last_branch_commit.sha)
end
@@ -570,6 +572,7 @@ describe MergeRequest do
context 'when the merge request is being created' do
subject { build(:merge_request, source_branch: nil, compare_commits: []) }
+
it 'returns nil' do
expect(subject.source_branch_sha).to be_nil
end
@@ -650,6 +653,46 @@ describe MergeRequest do
end
end
+ describe '#note_positions_for_paths' do
+ let(:merge_request) { create(:merge_request, :with_diffs) }
+ let(:project) { merge_request.project }
+ let!(:diff_note) do
+ create(:diff_note_on_merge_request, project: project, noteable: merge_request)
+ end
+
+ let(:file_paths) { merge_request.diffs.diff_files.map(&:file_path) }
+
+ subject do
+ merge_request.note_positions_for_paths(file_paths)
+ end
+
+ it 'returns a Gitlab::Diff::PositionCollection' do
+ expect(subject).to be_a(Gitlab::Diff::PositionCollection)
+ end
+
+ context 'within all diff files' do
+ it 'returns correct positions' do
+ expect(subject).to match_array([diff_note.position])
+ end
+ end
+
+ context 'within specific diff file' do
+ let(:file_paths) { [diff_note.position.file_path] }
+
+ it 'returns correct positions' do
+ expect(subject).to match_array([diff_note.position])
+ end
+ end
+
+ context 'within no diff files' do
+ let(:file_paths) { [] }
+
+ it 'returns no positions' do
+ expect(subject.to_a).to be_empty
+ end
+ end
+ end
+
describe '#discussions_diffs' do
let(:merge_request) { create(:merge_request) }
@@ -2032,7 +2075,7 @@ describe MergeRequest do
end
it 'refuses to enqueue a job if the MR is not open' do
- merge_request.update_column(:state, 'foo')
+ merge_request.update_column(:state_id, 5)
expect(RebaseWorker).not_to receive(:perform_async)
@@ -2326,7 +2369,7 @@ describe MergeRequest do
merge_requests_as_head_pipeline: [merge_request])
end
- let!(:job) { create(:ci_build, :start_review_app, pipeline: pipeline, project: project) }
+ let!(:job) { create(:ci_build, :with_deployment, :start_review_app, pipeline: pipeline, project: project) }
it 'returns environments' do
is_expected.to eq(pipeline.environments)
@@ -2455,6 +2498,7 @@ describe MergeRequest do
describe "#diff_refs" do
context "with diffs" do
subject { create(:merge_request, :with_diffs) }
+
let(:expected_diff_refs) do
Gitlab::Diff::DiffRefs.new(
base_sha: subject.merge_request_diff.base_commit_sha,
@@ -2527,32 +2571,32 @@ describe MergeRequest do
describe '#merge_ongoing?' do
it 'returns true when the merge request is locked' do
- merge_request = build_stubbed(:merge_request, state: :locked)
+ merge_request = build_stubbed(:merge_request, state_id: described_class.available_states[:locked])
expect(merge_request.merge_ongoing?).to be(true)
end
it 'returns true when merge_id, MR is not merged and it has no running job' do
- merge_request = build_stubbed(:merge_request, state: :open, merge_jid: 'foo')
+ merge_request = build_stubbed(:merge_request, state_id: described_class.available_states[:opened], merge_jid: 'foo')
allow(Gitlab::SidekiqStatus).to receive(:running?).with('foo') { true }
expect(merge_request.merge_ongoing?).to be(true)
end
it 'returns false when merge_jid is nil' do
- merge_request = build_stubbed(:merge_request, state: :open, merge_jid: nil)
+ merge_request = build_stubbed(:merge_request, state_id: described_class.available_states[:opened], merge_jid: nil)
expect(merge_request.merge_ongoing?).to be(false)
end
it 'returns false if MR is merged' do
- merge_request = build_stubbed(:merge_request, state: :merged, merge_jid: 'foo')
+ merge_request = build_stubbed(:merge_request, state_id: described_class.available_states[:merged], merge_jid: 'foo')
expect(merge_request.merge_ongoing?).to be(false)
end
it 'returns false if there is no merge job running' do
- merge_request = build_stubbed(:merge_request, state: :open, merge_jid: 'foo')
+ merge_request = build_stubbed(:merge_request, state_id: described_class.available_states[:opened], merge_jid: 'foo')
allow(Gitlab::SidekiqStatus).to receive(:running?).with('foo') { false }
expect(merge_request.merge_ongoing?).to be(false)
@@ -2686,7 +2730,7 @@ describe MergeRequest do
context 'closed MR' do
before do
- merge_request.update_attribute(:state, :closed)
+ merge_request.update_attribute(:state_id, described_class.available_states[:closed])
end
it 'is not mergeable' do
@@ -2800,6 +2844,7 @@ describe MergeRequest do
describe '#merge_request_diff_for' do
subject { create(:merge_request, importing: true) }
+
let!(:merge_request_diff1) { subject.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') }
let!(:merge_request_diff2) { subject.merge_request_diffs.create(head_commit_sha: nil) }
let!(:merge_request_diff3) { subject.merge_request_diffs.create(head_commit_sha: '5937ac0a7beb003549fc5fd26fc247adbce4a52e') }
@@ -2830,6 +2875,7 @@ describe MergeRequest do
describe '#version_params_for' do
subject { create(:merge_request, importing: true) }
+
let(:project) { subject.project }
let!(:merge_request_diff1) { subject.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') }
let!(:merge_request_diff2) { subject.merge_request_diffs.create(head_commit_sha: nil) }
@@ -3257,4 +3303,40 @@ describe MergeRequest do
end
end
end
+
+ describe '.with_open_merge_when_pipeline_succeeds' do
+ let!(:project) { create(:project) }
+ let!(:fork) { fork_project(project) }
+ let!(:merge_request1) do
+ create(:merge_request,
+ :merge_when_pipeline_succeeds,
+ target_project: project,
+ target_branch: 'master',
+ source_project: project,
+ source_branch: 'feature-1')
+ end
+
+ let!(:merge_request2) do
+ create(:merge_request,
+ :merge_when_pipeline_succeeds,
+ target_project: project,
+ target_branch: 'master',
+ source_project: fork,
+ source_branch: 'fork-feature-1')
+ end
+
+ let!(:merge_request4) do
+ create(:merge_request,
+ target_project: project,
+ target_branch: 'master',
+ source_project: fork,
+ source_branch: 'fork-feature-2')
+ end
+
+ let(:query) { described_class.with_open_merge_when_pipeline_succeeds }
+
+ it { expect(query).to contain_exactly(merge_request1, merge_request2) }
+ end
+
+ it_behaves_like 'versioned description'
end
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index 972f26ac745..1e06d0fd7b9 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -191,6 +191,16 @@ describe Namespace do
end
end
+ describe '.find_by_pages_host' do
+ it 'finds namespace by GitLab Pages host and is case-insensitive' do
+ namespace = create(:namespace, name: 'topnamespace')
+ create(:namespace, name: 'annother_namespace')
+ host = "TopNamespace.#{Settings.pages.host.upcase}"
+
+ expect(described_class.find_by_pages_host(host)).to eq(namespace)
+ end
+ end
+
describe '#ancestors_upto' do
let(:parent) { create(:group) }
let(:child) { create(:group, parent: parent) }
@@ -240,7 +250,7 @@ describe Namespace do
it "moves dir if path changed" do
namespace.update(path: namespace.full_path + '_new')
- expect(gitlab_shell.exists?(project.repository_storage, "#{namespace.path}/#{project.path}.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{namespace.path}/#{project.path}.git")).to be_truthy
end
context 'when #write_projects_repository_config raises an error' do
@@ -348,7 +358,7 @@ describe Namespace do
namespace.update(path: namespace.full_path + '_new')
expect(before_disk_path).to eq(project.disk_path)
- expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{project.disk_path}.git")).to be_truthy
end
end
@@ -886,31 +896,110 @@ describe Namespace do
end
end
end
+ end
- context 'when :emails_disabled feature flag is off' do
- before do
- stub_feature_flags(emails_disabled: false)
- end
+ describe '#pages_virtual_domain' do
+ let(:project) { create(:project, namespace: namespace) }
+
+ context 'when there are pages deployed for the project' do
+ context 'but pages metadata is not migrated' do
+ before do
+ generic_commit_status = create(:generic_commit_status, :success, stage: 'deploy', name: 'pages:deploy')
+ generic_commit_status.update!(project: project)
+ project.pages_metadatum.destroy!
+ end
+
+ it 'migrates pages metadata and returns the virual domain' do
+ virtual_domain = namespace.pages_virtual_domain
- context 'when not a subgroup' do
- it 'returns false' do
- group = create(:group, emails_disabled: true)
+ expect(project.reload.pages_metadatum.deployed).to eq(true)
- expect(group.emails_disabled?).to be_falsey
+ expect(virtual_domain).to be_an_instance_of(Pages::VirtualDomain)
+ expect(virtual_domain.lookup_paths).not_to be_empty
end
end
- context 'when a subgroup and ancestor emails are disabled' do
- let(:grandparent) { create(:group) }
- let(:parent) { create(:group, parent: grandparent) }
- let(:group) { create(:group, parent: parent) }
+ context 'and pages metadata is migrated' do
+ before do
+ project.mark_pages_as_deployed
+ end
- it 'returns false' do
- grandparent.update_attribute(:emails_disabled, true)
+ it 'returns the virual domain' do
+ virtual_domain = namespace.pages_virtual_domain
- expect(group.emails_disabled?).to be_falsey
+ expect(virtual_domain).to be_an_instance_of(Pages::VirtualDomain)
+ expect(virtual_domain.lookup_paths).not_to be_empty
end
end
end
end
+
+ describe '#has_parent?' do
+ it 'returns true when the group has a parent' do
+ group = create(:group, :nested)
+
+ expect(group.has_parent?).to be_truthy
+ end
+
+ it 'returns true when the group has an unsaved parent' do
+ parent = build(:group)
+ group = build(:group, parent: parent)
+
+ expect(group.has_parent?).to be_truthy
+ end
+
+ it 'returns false when the group has no parent' do
+ group = create(:group, parent: nil)
+
+ expect(group.has_parent?).to be_falsy
+ end
+ end
+
+ describe '#closest_setting' do
+ using RSpec::Parameterized::TableSyntax
+
+ shared_examples_for 'fetching closest setting' do
+ let!(:root_namespace) { create(:namespace) }
+ let!(:namespace) { create(:namespace, parent: root_namespace) }
+
+ let(:setting) { namespace.closest_setting(setting_name) }
+
+ before do
+ root_namespace.update_attribute(setting_name, root_setting)
+ namespace.update_attribute(setting_name, child_setting)
+ end
+
+ it 'returns closest non-nil value' do
+ expect(setting).to eq(result)
+ end
+ end
+
+ context 'when setting is of non-boolean type' do
+ where(:root_setting, :child_setting, :result) do
+ 100 | 200 | 200
+ 100 | nil | 100
+ nil | nil | nil
+ end
+
+ with_them do
+ let(:setting_name) { :max_artifacts_size }
+
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+
+ context 'when setting is of boolean type' do
+ where(:root_setting, :child_setting, :result) do
+ true | false | false
+ true | nil | true
+ nil | nil | nil
+ end
+
+ with_them do
+ let(:setting_name) { :lfs_enabled }
+
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+ end
end
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index 66e3c6d5e9d..4c320b4b145 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -55,11 +55,13 @@ describe Note do
context 'when noteable and note project are the same' do
subject { create(:note) }
+
it { is_expected.to be_valid }
end
context 'when project is missing for a project related note' do
subject { build(:note, project: nil, noteable: build_stubbed(:issue)) }
+
it { is_expected.to be_invalid }
end
@@ -70,6 +72,37 @@ describe Note do
is_expected.to be_valid
end
end
+
+ describe 'max notes limit' do
+ let_it_be(:noteable) { create(:issue) }
+ let_it_be(:existing_note) { create(:note, project: noteable.project, noteable: noteable) }
+
+ before do
+ stub_const('Noteable::MAX_NOTES_LIMIT', 1)
+ end
+
+ context 'when creating a system note' do
+ subject { build(:system_note, project: noteable.project, noteable: noteable) }
+
+ it { is_expected.to be_valid }
+ end
+
+ context 'when creating a user note' do
+ subject { build(:note, project: noteable.project, noteable: noteable) }
+
+ it { is_expected.not_to be_valid }
+ end
+
+ context 'when updating an existing note on a noteable that already exceeds the limit' do
+ subject { existing_note }
+
+ before do
+ create(:system_note, project: noteable.project, noteable: noteable)
+ end
+
+ it { is_expected.to be_valid }
+ end
+ end
end
describe "Commit notes" do
@@ -710,6 +743,7 @@ describe Note do
describe '#to_discussion' do
subject { create(:discussion_note_on_merge_request) }
+
let!(:note2) { create(:discussion_note_on_merge_request, project: subject.project, noteable: subject.noteable, in_reply_to: subject) }
it "returns a discussion with just this note" do
@@ -777,6 +811,7 @@ describe Note do
context 'for a note' do
context 'when part of a discussion' do
subject { create(:discussion_note_on_issue) }
+
let(:note) { create(:discussion_note_on_issue, in_reply_to: subject) }
it 'checks if the note is in reply to the other discussion' do
@@ -790,6 +825,7 @@ describe Note do
context 'when not part of a discussion' do
subject { create(:note) }
+
let(:note) { create(:note, in_reply_to: subject) }
it 'checks if the note is in reply to the other noteable' do
@@ -804,6 +840,7 @@ describe Note do
context 'for a discussion' do
context 'when part of the same discussion' do
subject { create(:diff_note_on_merge_request) }
+
let(:note) { create(:diff_note_on_merge_request, in_reply_to: subject) }
it 'returns true' do
@@ -813,6 +850,7 @@ describe Note do
context 'when not part of the same discussion' do
subject { create(:diff_note_on_merge_request) }
+
let(:note) { create(:diff_note_on_merge_request) }
it 'returns false' do
@@ -824,6 +862,7 @@ describe Note do
context 'for a noteable' do
context 'when a comment on the same noteable' do
subject { create(:note) }
+
let(:note) { create(:note, in_reply_to: subject) }
it 'returns true' do
@@ -833,6 +872,7 @@ describe Note do
context 'when not a comment on the same noteable' do
subject { create(:note) }
+
let(:note) { create(:note) }
it 'returns false' do
@@ -856,6 +896,7 @@ describe Note do
context 'when not part of a discussion' do
subject { create(:note) }
+
let(:note) { create(:note, in_reply_to: subject) }
it 'returns the noteable' do
@@ -941,13 +982,64 @@ describe Note do
project = create(:project)
note = create(:note_on_issue, project: project)
- expect(note.parent).to eq(project)
+ expect(note.resource_parent).to eq(project)
end
it 'returns nil for personal snippet note' do
note = create(:note_on_personal_snippet)
- expect(note.parent).to be_nil
+ expect(note.resource_parent).to be_nil
+ end
+ end
+
+ describe 'scopes' do
+ let_it_be(:note1) { create(:note, note: 'Test 345') }
+ let_it_be(:note2) { create(:note, note: 'Test 789') }
+
+ describe '#for_note_or_capitalized_note' do
+ it 'returns the expected matching note' do
+ notes = described_class.for_note_or_capitalized_note('Test 345')
+
+ expect(notes.count).to eq(1)
+ expect(notes.first.id).to eq(note1.id)
+ end
+
+ it 'returns the expected capitalized note' do
+ notes = described_class.for_note_or_capitalized_note('test 345')
+
+ expect(notes.count).to eq(1)
+ expect(notes.first.id).to eq(note1.id)
+ end
+
+ it 'does not support pattern matching' do
+ notes = described_class.for_note_or_capitalized_note('test%')
+
+ expect(notes.count).to eq(0)
+ end
+ end
+
+ describe '#like_note_or_capitalized_note' do
+ it 'returns the expected matching note' do
+ notes = described_class.like_note_or_capitalized_note('Test 345')
+
+ expect(notes.count).to eq(1)
+ expect(notes.first.id).to eq(note1.id)
+ end
+
+ it 'returns the expected capitalized note' do
+ notes = described_class.like_note_or_capitalized_note('test 345')
+
+ expect(notes.count).to eq(1)
+ expect(notes.first.id).to eq(note1.id)
+ end
+
+ it 'supports pattern matching' do
+ notes = described_class.like_note_or_capitalized_note('test%')
+
+ expect(notes.count).to eq(2)
+ expect(notes.first.id).to eq(note1.id)
+ expect(notes.second.id).to eq(note2.id)
+ end
end
end
end
diff --git a/spec/models/notification_setting_spec.rb b/spec/models/notification_setting_spec.rb
index 820d233dbdc..094c60e3e09 100644
--- a/spec/models/notification_setting_spec.rb
+++ b/spec/models/notification_setting_spec.rb
@@ -98,6 +98,7 @@ RSpec.describe NotificationSetting do
it 'returns email events' do
expect(subject).to include(
+ :new_release,
:new_note,
:new_issue,
:reopen_issue,
diff --git a/spec/models/pages/lookup_path_spec.rb b/spec/models/pages/lookup_path_spec.rb
index 2146b0c9abd..c05d4c82634 100644
--- a/spec/models/pages/lookup_path_spec.rb
+++ b/spec/models/pages/lookup_path_spec.rb
@@ -57,8 +57,18 @@ describe Pages::LookupPath do
end
describe '#prefix' do
- it 'returns "/"' do
+ it 'returns "/" for pages group root projects' do
+ project = instance_double(Project, pages_group_root?: true)
+ lookup_path = described_class.new(project, trim_prefix: 'mygroup')
+
expect(lookup_path.prefix).to eq('/')
end
+
+ it 'returns the project full path with the provided prefix removed' do
+ project = instance_double(Project, pages_group_root?: false, full_path: 'mygroup/myproject')
+ lookup_path = described_class.new(project, trim_prefix: 'mygroup')
+
+ expect(lookup_path.prefix).to eq('/myproject/')
+ end
end
end
diff --git a/spec/models/pages/virtual_domain_spec.rb b/spec/models/pages/virtual_domain_spec.rb
index eaa57b7acd6..a5310738482 100644
--- a/spec/models/pages/virtual_domain_spec.rb
+++ b/spec/models/pages/virtual_domain_spec.rb
@@ -25,19 +25,33 @@ describe Pages::VirtualDomain do
end
describe '#lookup_paths' do
- let(:domain) { instance_double(PagesDomain) }
let(:project_a) { instance_double(Project) }
let(:project_z) { instance_double(Project) }
let(:pages_lookup_path_a) { instance_double(Pages::LookupPath, prefix: 'aaa') }
let(:pages_lookup_path_z) { instance_double(Pages::LookupPath, prefix: 'zzz') }
- subject(:virtual_domain) { described_class.new([project_a, project_z], domain: domain) }
+ context 'when there is pages domain provided' do
+ let(:domain) { instance_double(PagesDomain) }
- it 'returns collection of projects pages lookup paths sorted by prefix in reverse' do
- expect(project_a).to receive(:pages_lookup_path).with(domain: domain).and_return(pages_lookup_path_a)
- expect(project_z).to receive(:pages_lookup_path).with(domain: domain).and_return(pages_lookup_path_z)
+ subject(:virtual_domain) { described_class.new([project_a, project_z], domain: domain) }
- expect(virtual_domain.lookup_paths).to eq([pages_lookup_path_z, pages_lookup_path_a])
+ it 'returns collection of projects pages lookup paths sorted by prefix in reverse' do
+ expect(project_a).to receive(:pages_lookup_path).with(domain: domain, trim_prefix: nil).and_return(pages_lookup_path_a)
+ expect(project_z).to receive(:pages_lookup_path).with(domain: domain, trim_prefix: nil).and_return(pages_lookup_path_z)
+
+ expect(virtual_domain.lookup_paths).to eq([pages_lookup_path_z, pages_lookup_path_a])
+ end
+ end
+
+ context 'when there is trim_prefix provided' do
+ subject(:virtual_domain) { described_class.new([project_a, project_z], trim_prefix: 'group/') }
+
+ it 'returns collection of projects pages lookup paths sorted by prefix in reverse' do
+ expect(project_a).to receive(:pages_lookup_path).with(trim_prefix: 'group/', domain: nil).and_return(pages_lookup_path_a)
+ expect(project_z).to receive(:pages_lookup_path).with(trim_prefix: 'group/', domain: nil).and_return(pages_lookup_path_z)
+
+ expect(virtual_domain.lookup_paths).to eq([pages_lookup_path_z, pages_lookup_path_a])
+ end
end
end
end
diff --git a/spec/models/pages_domain_spec.rb b/spec/models/pages_domain_spec.rb
index 89a837dc812..4b65bf032d1 100644
--- a/spec/models/pages_domain_spec.rb
+++ b/spec/models/pages_domain_spec.rb
@@ -160,7 +160,7 @@ describe PagesDomain do
end
context 'when curve is set explicitly by parameters' do
- it 'adds errors to private key', :quarantine do
+ it 'adds errors to private key' do
domain = build(:pages_domain, :explicit_ecdsa)
expect(domain).to be_invalid
@@ -293,11 +293,13 @@ describe PagesDomain do
describe "#https?" do
context "when a certificate is present" do
subject { build(:pages_domain) }
+
it { is_expected.to be_https }
end
context "when no certificate is present" do
subject { build(:pages_domain, :without_certificate) }
+
it { is_expected.not_to be_https }
end
end
@@ -557,15 +559,35 @@ describe PagesDomain do
end
end
- describe '.pages_virtual_domain' do
- let(:project) { build(:project) }
+ describe '#pages_virtual_domain' do
+ let(:project) { create(:project) }
+ let(:pages_domain) { create(:pages_domain, project: project) }
+
+ context 'when there are no pages deployed for the project' do
+ it 'returns nil' do
+ expect(pages_domain.pages_virtual_domain).to be_nil
+ end
+ end
+
+ context 'when there are pages deployed for the project' do
+ before do
+ generic_commit_status = create(:generic_commit_status, :success, stage: 'deploy', name: 'pages:deploy')
+ generic_commit_status.update!(project: project)
+ project.pages_metadatum.destroy!
+ project.reload
+ end
- subject(:pages_domain) { build(:pages_domain, project: project) }
+ it 'returns the virual domain' do
+ expect(Pages::VirtualDomain).to receive(:new).with([project], domain: pages_domain).and_call_original
- it 'returns instance of Pages::VirtualDomain' do
- expect(Pages::VirtualDomain).to receive(:new).with([project], domain: pages_domain).and_call_original
+ expect(pages_domain.pages_virtual_domain).to be_an_instance_of(Pages::VirtualDomain)
+ end
- expect(pages_domain.pages_virtual_domain).to be_a(Pages::VirtualDomain)
+ it 'migrates project pages metadata' do
+ expect { pages_domain.pages_virtual_domain }.to change {
+ project.reload.pages_metadatum&.deployed
+ }.from(nil).to(true)
+ end
end
end
end
diff --git a/spec/models/project_services/bugzilla_service_spec.rb b/spec/models/project_services/bugzilla_service_spec.rb
index 66481a461ca..d0ab5afc765 100644
--- a/spec/models/project_services/bugzilla_service_spec.rb
+++ b/spec/models/project_services/bugzilla_service_spec.rb
@@ -41,7 +41,7 @@ describe BugzillaService do
{ project_url: url, issues_url: url, new_issue_url: url }
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
diff --git a/spec/models/project_services/custom_issue_tracker_service_spec.rb b/spec/models/project_services/custom_issue_tracker_service_spec.rb
index 50bf15cfc8c..e749ea6eacc 100644
--- a/spec/models/project_services/custom_issue_tracker_service_spec.rb
+++ b/spec/models/project_services/custom_issue_tracker_service_spec.rb
@@ -55,7 +55,7 @@ describe CustomIssueTrackerService do
{ project_url: url, issues_url: url, new_issue_url: url }
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
diff --git a/spec/models/project_services/gitlab_issue_tracker_service_spec.rb b/spec/models/project_services/gitlab_issue_tracker_service_spec.rb
index 2dc0b67239c..defebcee9c6 100644
--- a/spec/models/project_services/gitlab_issue_tracker_service_spec.rb
+++ b/spec/models/project_services/gitlab_issue_tracker_service_spec.rb
@@ -58,7 +58,7 @@ describe GitlabIssueTrackerService do
{ project_url: url, issues_url: url, new_issue_url: url }
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
diff --git a/spec/models/project_services/jira_service_spec.rb b/spec/models/project_services/jira_service_spec.rb
index b86ab8959a2..5feb8ca7839 100644
--- a/spec/models/project_services/jira_service_spec.rb
+++ b/spec/models/project_services/jira_service_spec.rb
@@ -15,26 +15,53 @@ describe JiraService do
let(:transition_id) { 'test27' }
describe '#options' do
- let(:service) do
- described_class.create(
+ let(:options) do
+ {
project: create(:project),
active: true,
username: 'username',
password: 'test',
jira_issue_transition_id: 24,
url: 'http://jira.test.com/path/'
- )
+ }
end
+ let(:service) { described_class.create(options) }
+
it 'sets the URL properly' do
- # jira-ruby gem parses the URI and handles trailing slashes
- # fine: https://github.com/sumoheavy/jira-ruby/blob/v1.4.1/lib/jira/http_client.rb#L59
+ # jira-ruby gem parses the URI and handles trailing slashes fine:
+ # https://github.com/sumoheavy/jira-ruby/blob/v1.7.0/lib/jira/http_client.rb#L62
expect(service.options[:site]).to eq('http://jira.test.com/')
end
it 'leaves out trailing slashes in context' do
expect(service.options[:context_path]).to eq('/path')
end
+
+ context 'username with trailing whitespaces' do
+ before do
+ options.merge!(username: 'username ')
+ end
+
+ it 'leaves out trailing whitespaces in username' do
+ expect(service.options[:username]).to eq('username')
+ end
+ end
+
+ it 'provides additional cookies to allow basic auth with oracle webgate' do
+ expect(service.options[:use_cookies]).to eq(true)
+ expect(service.options[:additional_cookies]).to eq(['OBBasicAuth=fromDialog'])
+ end
+
+ context 'using api URL' do
+ before do
+ options.merge!(api_url: 'http://jira.test.com/api_path/')
+ end
+
+ it 'leaves out trailing slashes in context' do
+ expect(service.options[:context_path]).to eq('/api_path')
+ end
+ end
end
describe 'Associations' do
@@ -68,7 +95,7 @@ describe JiraService do
expect(subject.properties).to be_nil
end
- it 'sets title correctly' do
+ it 'sets title correctly' do
service = subject
expect(service.title).to eq('custom title')
@@ -93,7 +120,7 @@ describe JiraService do
end
# we need to make sure we are able to read both from properties and jira_tracker_data table
- # TODO: change this as part of #63084
+ # TODO: change this as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'overriding properties' do
let(:access_params) do
{ url: url, api_url: api_url, username: username, password: password,
@@ -278,11 +305,11 @@ describe JiraService do
end
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { data_params.merge(title: title, description: description) }
let!(:service) do
- create(:jira_service, :without_properties_callback, properties: properties)
+ create(:jira_service, :without_properties_callback, properties: properties.merge(additional: 'something'))
end
it_behaves_like 'issue tracker fields'
@@ -604,26 +631,6 @@ describe JiraService do
end
end
- describe 'additional cookies' do
- let(:project) { create(:project) }
-
- context 'provides additional cookies to allow basic auth with oracle webgate' do
- before do
- @service = project.create_jira_service(
- active: true, properties: { url: 'http://jira.com' })
- end
-
- after do
- @service.destroy!
- end
-
- it 'is initialized' do
- expect(@service.options[:use_cookies]).to eq(true)
- expect(@service.options[:additional_cookies]).to eq(['OBBasicAuth=fromDialog'])
- end
- end
- end
-
describe 'project and issue urls' do
context 'when gitlab.yml was initialized' do
it 'is prepopulated with the settings' do
@@ -650,7 +657,7 @@ describe JiraService do
end
end
- describe 'favicon urls', :request_store do
+ describe 'favicon urls' do
it 'includes the standard favicon' do
props = described_class.new.send(:build_remote_link_props, url: 'http://example.com', title: 'title')
expect(props[:object][:icon][:url16x16]).to match %r{^http://localhost/assets/favicon(?:-\h+).png$}
diff --git a/spec/models/project_services/redmine_service_spec.rb b/spec/models/project_services/redmine_service_spec.rb
index 2339c5a8421..6220d7b1fac 100644
--- a/spec/models/project_services/redmine_service_spec.rb
+++ b/spec/models/project_services/redmine_service_spec.rb
@@ -57,7 +57,7 @@ describe RedmineService do
{ project_url: url, issues_url: url, new_issue_url: url }
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
diff --git a/spec/models/project_services/youtrack_service_spec.rb b/spec/models/project_services/youtrack_service_spec.rb
index fe608baf16b..19d4cb95315 100644
--- a/spec/models/project_services/youtrack_service_spec.rb
+++ b/spec/models/project_services/youtrack_service_spec.rb
@@ -45,7 +45,7 @@ describe YoutrackService do
{ project_url: url, issues_url: url, new_issue_url: url }
end
- # this will be removed as part of https://gitlab.com/gitlab-org/gitlab-foss/issues/63084
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 7fe48e66def..9f3313e67b5 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -92,6 +92,7 @@ describe Project do
it { is_expected.to have_many(:pipeline_schedules) }
it { is_expected.to have_many(:members_and_requesters) }
it { is_expected.to have_many(:clusters) }
+ it { is_expected.to have_many(:management_clusters).class_name('Clusters::Cluster') }
it { is_expected.to have_many(:kubernetes_namespaces) }
it { is_expected.to have_many(:custom_attributes).class_name('ProjectCustomAttribute') }
it { is_expected.to have_many(:project_badges).class_name('ProjectBadge') }
@@ -100,6 +101,8 @@ describe Project do
it { is_expected.to have_many(:deploy_tokens).through(:project_deploy_tokens) }
it { is_expected.to have_many(:cycle_analytics_stages) }
it { is_expected.to have_many(:external_pull_requests) }
+ it { is_expected.to have_many(:sourced_pipelines) }
+ it { is_expected.to have_many(:source_pipelines) }
it 'has an inverse relationship with merge requests' do
expect(described_class.reflect_on_association(:merge_requests).has_inverse?).to eq(:target_project)
@@ -132,6 +135,13 @@ describe Project do
expect(project.ci_cd_settings).to be_an_instance_of(ProjectCiCdSetting)
expect(project.ci_cd_settings).to be_persisted
end
+
+ it 'automatically creates a Pages metadata row' do
+ project = create(:project)
+
+ expect(project.pages_metadatum).to be_an_instance_of(ProjectPagesMetadatum)
+ expect(project.pages_metadatum).to be_persisted
+ end
end
context 'updating cd_cd_settings' do
@@ -143,7 +153,7 @@ describe Project do
end
describe '#members & #requesters' do
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
let(:requester) { create(:user) }
let(:developer) { create(:user) }
before do
@@ -621,8 +631,38 @@ describe Project do
describe "#web_url" do
let(:project) { create(:project, path: "somewhere") }
- it 'returns the full web URL for this repo' do
- expect(project.web_url).to eq("#{Gitlab.config.gitlab.url}/#{project.namespace.full_path}/somewhere")
+ context 'when given the only_path option' do
+ subject { project.web_url(only_path: only_path) }
+
+ context 'when only_path is false' do
+ let(:only_path) { false }
+
+ it 'returns the full web URL for this repo' do
+ expect(subject).to eq("#{Gitlab.config.gitlab.url}/#{project.namespace.full_path}/somewhere")
+ end
+ end
+
+ context 'when only_path is true' do
+ let(:only_path) { true }
+
+ it 'returns the relative web URL for this repo' do
+ expect(subject).to eq("/#{project.namespace.full_path}/somewhere")
+ end
+ end
+
+ context 'when only_path is nil' do
+ let(:only_path) { nil }
+
+ it 'returns the full web URL for this repo' do
+ expect(subject).to eq("#{Gitlab.config.gitlab.url}/#{project.namespace.full_path}/somewhere")
+ end
+ end
+ end
+
+ context 'when not given the only_path option' do
+ it 'returns the full web URL for this repo' do
+ expect(project.web_url).to eq("#{Gitlab.config.gitlab.url}/#{project.namespace.full_path}/somewhere")
+ end
end
end
@@ -2380,29 +2420,6 @@ describe Project do
expect(project.emails_disabled?).to be_truthy
end
end
-
- context 'when :emails_disabled feature flag is off' do
- before do
- stub_feature_flags(emails_disabled: false)
- end
-
- context 'emails disabled in group' do
- it 'returns false' do
- allow(project.namespace).to receive(:emails_disabled?) { true }
-
- expect(project.emails_disabled?).to be_falsey
- end
- end
-
- context 'emails enabled in group' do
- it 'returns false' do
- allow(project.namespace).to receive(:emails_disabled?) { false }
- project.update_attribute(:emails_disabled, true)
-
- expect(project.emails_disabled?).to be_falsey
- end
- end
- end
end
describe '#lfs_enabled?' do
@@ -3239,20 +3256,78 @@ describe Project do
describe '#http_url_to_repo' do
let(:project) { create(:project) }
- it 'returns the url to the repo without a username' do
- expect(project.http_url_to_repo).to eq("#{project.web_url}.git")
- expect(project.http_url_to_repo).not_to include('@')
+ context 'when a custom HTTP clone URL root is not set' do
+ it 'returns the url to the repo without a username' do
+ expect(project.http_url_to_repo).to eq("#{project.web_url}.git")
+ expect(project.http_url_to_repo).not_to include('@')
+ end
+ end
+
+ context 'when a custom HTTP clone URL root is set' do
+ before do
+ stub_application_setting(custom_http_clone_url_root: custom_http_clone_url_root)
+ end
+
+ context 'when custom HTTP clone URL root has a relative URL root' do
+ context 'when custom HTTP clone URL root ends with a slash' do
+ let(:custom_http_clone_url_root) { 'https://git.example.com:51234/mygitlab/' }
+
+ it 'returns the url to the repo, with the root replaced with the custom one' do
+ expect(project.http_url_to_repo).to eq("https://git.example.com:51234/mygitlab/#{project.full_path}.git")
+ end
+ end
+
+ context 'when custom HTTP clone URL root does not end with a slash' do
+ let(:custom_http_clone_url_root) { 'https://git.example.com:51234/mygitlab' }
+
+ it 'returns the url to the repo, with the root replaced with the custom one' do
+ expect(project.http_url_to_repo).to eq("https://git.example.com:51234/mygitlab/#{project.full_path}.git")
+ end
+ end
+ end
+
+ context 'when custom HTTP clone URL root does not have a relative URL root' do
+ context 'when custom HTTP clone URL root ends with a slash' do
+ let(:custom_http_clone_url_root) { 'https://git.example.com:51234/' }
+
+ it 'returns the url to the repo, with the root replaced with the custom one' do
+ expect(project.http_url_to_repo).to eq("https://git.example.com:51234/#{project.full_path}.git")
+ end
+ end
+
+ context 'when custom HTTP clone URL root does not end with a slash' do
+ let(:custom_http_clone_url_root) { 'https://git.example.com:51234' }
+
+ it 'returns the url to the repo, with the root replaced with the custom one' do
+ expect(project.http_url_to_repo).to eq("https://git.example.com:51234/#{project.full_path}.git")
+ end
+ end
+ end
end
end
describe '#lfs_http_url_to_repo' do
let(:project) { create(:project) }
- it 'returns the url to the repo without a username' do
- lfs_http_url_to_repo = project.lfs_http_url_to_repo('operation_that_doesnt_matter')
+ context 'when a custom HTTP clone URL root is not set' do
+ it 'returns the url to the repo without a username' do
+ lfs_http_url_to_repo = project.lfs_http_url_to_repo('operation_that_doesnt_matter')
+
+ expect(lfs_http_url_to_repo).to eq("#{project.web_url}.git")
+ expect(lfs_http_url_to_repo).not_to include('@')
+ end
+ end
+
+ context 'when a custom HTTP clone URL root is set' do
+ before do
+ stub_application_setting(custom_http_clone_url_root: 'https://git.example.com:51234')
+ end
+
+ it 'returns the url to the repo, with the root replaced with the custom one' do
+ lfs_http_url_to_repo = project.lfs_http_url_to_repo('operation_that_doesnt_matter')
- expect(lfs_http_url_to_repo).to eq("#{project.web_url}.git")
- expect(lfs_http_url_to_repo).not_to include('@')
+ expect(lfs_http_url_to_repo).to eq("https://git.example.com:51234/#{project.full_path}.git")
+ end
end
end
@@ -3556,7 +3631,8 @@ describe Project do
end
describe '#remove_pages' do
- let(:project) { create(:project) }
+ let(:project) { create(:project).tap { |project| project.mark_pages_as_deployed } }
+ let(:pages_metadatum) { project.pages_metadatum }
let(:namespace) { project.namespace }
let(:pages_path) { project.pages_path }
@@ -3569,12 +3645,12 @@ describe Project do
end
end
- it 'removes the pages directory' do
+ it 'removes the pages directory and marks the project as not having pages deployed' do
expect_any_instance_of(Projects::UpdatePagesConfigurationService).to receive(:execute)
expect_any_instance_of(Gitlab::PagesTransfer).to receive(:rename_project).and_return(true)
expect(PagesWorker).to receive(:perform_in).with(5.minutes, :remove, namespace.full_path, anything)
- project.remove_pages
+ expect { project.remove_pages }.to change { pages_metadatum.reload.deployed }.from(true).to(false)
end
it 'is a no-op when there is no namespace' do
@@ -3584,13 +3660,13 @@ describe Project do
expect_any_instance_of(Projects::UpdatePagesConfigurationService).not_to receive(:execute)
expect_any_instance_of(Gitlab::PagesTransfer).not_to receive(:rename_project)
- project.remove_pages
+ expect { project.remove_pages }.not_to change { pages_metadatum.reload.deployed }
end
it 'is run when the project is destroyed' do
expect(project).to receive(:remove_pages).and_call_original
- project.destroy
+ expect { project.destroy }.not_to raise_error
end
end
@@ -3663,14 +3739,6 @@ describe Project do
end
end
- describe '#ensure_storage_path_exists' do
- it 'delegates to gitlab_shell to ensure namespace is created' do
- expect(gitlab_shell).to receive(:add_namespace).with(project.repository_storage, project.base_dir)
-
- project.ensure_storage_path_exists
- end
- end
-
describe '#legacy_storage?' do
it 'returns true when storage_version is nil' do
project = build(:project, storage_version: nil)
@@ -3785,16 +3853,6 @@ describe Project do
end
end
- describe '#ensure_storage_path_exists' do
- it 'delegates to gitlab_shell to ensure namespace is created' do
- allow(project).to receive(:gitlab_shell).and_return(gitlab_shell)
-
- expect(gitlab_shell).to receive(:add_namespace).with(project.repository_storage, hashed_prefix)
-
- project.ensure_storage_path_exists
- end
- end
-
describe '#pages_path' do
it 'returns a path where pages are stored' do
expect(project.pages_path).to eq(File.join(Settings.pages.path, project.namespace.full_path, project.path))
@@ -4225,13 +4283,24 @@ describe Project do
end
describe '#check_repository_path_availability' do
- let(:project) { build(:project) }
+ let(:project) { build(:project, :repository, :legacy_storage) }
+ subject { project.check_repository_path_availability }
- it 'skips gitlab-shell exists?' do
- project.skip_disk_validation = true
+ context 'when the repository already exists' do
+ let(:project) { create(:project, :repository, :legacy_storage) }
- expect(project.gitlab_shell).not_to receive(:exists?)
- expect(project.check_repository_path_availability).to be_truthy
+ it { is_expected.to be_falsey }
+ end
+
+ context 'when the repository does not exist' do
+ it { is_expected.to be_truthy }
+
+ it 'skips gitlab-shell exists?' do
+ project.skip_disk_validation = true
+
+ expect(project.gitlab_shell).not_to receive(:repository_exists?)
+ is_expected.to be_truthy
+ end
end
end
@@ -4945,6 +5014,7 @@ describe Project do
describe '#git_objects_poolable?' do
subject { project }
+
context 'when not using hashed storage' do
let(:project) { create(:project, :legacy_storage, :public, :repository) }
@@ -5044,6 +5114,35 @@ describe Project do
end
end
+ context 'pages deployed' do
+ let(:project) { create(:project) }
+
+ {
+ mark_pages_as_deployed: true,
+ mark_pages_as_not_deployed: false
+ }.each do |method_name, flag|
+ describe method_name do
+ it "creates new record and sets deployed to #{flag} if none exists yet" do
+ project.pages_metadatum.destroy!
+ project.reload
+
+ project.send(method_name)
+
+ expect(project.pages_metadatum.reload.deployed).to eq(flag)
+ end
+
+ it "updates the existing record and sets deployed to #{flag}" do
+ pages_metadatum = project.pages_metadatum
+ pages_metadatum.update!(deployed: !flag)
+
+ expect { project.send(method_name) }.to change {
+ pages_metadatum.reload.deployed
+ }.from(!flag).to(flag)
+ end
+ end
+ end
+ end
+
describe '#has_pool_repsitory?' do
it 'returns false when it does not have a pool repository' do
subject = create(:project, :repository)
@@ -5084,9 +5183,146 @@ describe Project do
let(:project) { build(:project) }
it 'returns instance of Pages::LookupPath' do
- expect(Pages::LookupPath).to receive(:new).with(project, domain: pages_domain).and_call_original
+ expect(Pages::LookupPath).to receive(:new).with(project, domain: pages_domain, trim_prefix: 'mygroup').and_call_original
+
+ expect(project.pages_lookup_path(domain: pages_domain, trim_prefix: 'mygroup')).to be_a(Pages::LookupPath)
+ end
+ end
+
+ describe '.with_pages_deployed' do
+ it 'returns only projects that have pages deployed' do
+ _project_without_pages = create(:project)
+ project_with_pages = create(:project)
+ project_with_pages.mark_pages_as_deployed
+
+ expect(described_class.with_pages_deployed).to contain_exactly(project_with_pages)
+ end
+ end
+
+ describe '.pages_metadata_not_migrated' do
+ it 'returns only projects that have pages deployed' do
+ _project_with_pages_metadata_migrated = create(:project)
+ project_with_pages_metadata_not_migrated = create(:project)
+ project_with_pages_metadata_not_migrated.pages_metadatum.destroy!
+
+ expect(described_class.pages_metadata_not_migrated).to contain_exactly(project_with_pages_metadata_not_migrated)
+ end
+ end
+
+ describe '#pages_group_root?' do
+ it 'returns returns true if pages_url is same as pages_group_url' do
+ project = build(:project)
+ expect(project).to receive(:pages_url).and_return(project.pages_group_url)
+
+ expect(project.pages_group_root?).to eq(true)
+ end
+
+ it 'returns returns false if pages_url is different than pages_group_url' do
+ project = build(:project)
+
+ expect(project.pages_group_root?).to eq(false)
+ end
+ end
+
+ describe '#closest_setting' do
+ using RSpec::Parameterized::TableSyntax
+
+ shared_examples_for 'fetching closest setting' do
+ let!(:namespace) { create(:namespace) }
+ let!(:project) { create(:project, namespace: namespace) }
+
+ let(:setting_name) { :some_setting }
+ let(:setting) { project.closest_setting(setting_name) }
- expect(project.pages_lookup_path(domain: pages_domain)).to be_a(Pages::LookupPath)
+ before do
+ allow(project).to receive(:read_attribute).with(setting_name).and_return(project_setting)
+ allow(namespace).to receive(:closest_setting).with(setting_name).and_return(group_setting)
+ allow(Gitlab::CurrentSettings).to receive(setting_name).and_return(global_setting)
+ end
+
+ it 'returns closest non-nil value' do
+ expect(setting).to eq(result)
+ end
+ end
+
+ context 'when setting is of non-boolean type' do
+ where(:global_setting, :group_setting, :project_setting, :result) do
+ 100 | 200 | 300 | 300
+ 100 | 200 | nil | 200
+ 100 | nil | nil | 100
+ nil | nil | nil | nil
+ end
+
+ with_them do
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+
+ context 'when setting is of boolean type' do
+ where(:global_setting, :group_setting, :project_setting, :result) do
+ true | true | false | false
+ true | false | nil | false
+ true | nil | nil | true
+ end
+
+ with_them do
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+ end
+
+ describe '#drop_visibility_level!' do
+ context 'when has a group' do
+ let(:group) { create(:group, visibility_level: group_visibility_level) }
+ let(:project) { build(:project, namespace: group, visibility_level: project_visibility_level) }
+
+ context 'when the group `visibility_level` is more strict' do
+ let(:group_visibility_level) { Gitlab::VisibilityLevel::PRIVATE }
+ let(:project_visibility_level) { Gitlab::VisibilityLevel::INTERNAL }
+
+ it 'sets `visibility_level` value from the group' do
+ expect { project.drop_visibility_level! }
+ .to change { project.visibility_level }
+ .to(Gitlab::VisibilityLevel::PRIVATE)
+ end
+ end
+
+ context 'when the group `visibility_level` is less strict' do
+ let(:group_visibility_level) { Gitlab::VisibilityLevel::INTERNAL }
+ let(:project_visibility_level) { Gitlab::VisibilityLevel::PRIVATE }
+
+ it 'does not change the value of the `visibility_level` field' do
+ expect { project.drop_visibility_level! }
+ .not_to change { project.visibility_level }
+ end
+ end
+ end
+
+ context 'when `restricted_visibility_levels` of the GitLab instance exist' do
+ before do
+ stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::INTERNAL])
+ end
+
+ let(:project) { build(:project, visibility_level: project_visibility_level) }
+
+ context 'when `visibility_level` is included into `restricted_visibility_levels`' do
+ let(:project_visibility_level) { Gitlab::VisibilityLevel::INTERNAL }
+
+ it 'sets `visibility_level` value to `PRIVATE`' do
+ expect { project.drop_visibility_level! }
+ .to change { project.visibility_level }
+ .to(Gitlab::VisibilityLevel::PRIVATE)
+ end
+ end
+
+ context 'when `restricted_visibility_levels` does not include `visibility_level`' do
+ let(:project_visibility_level) { Gitlab::VisibilityLevel::PUBLIC }
+
+ it 'does not change the value of the `visibility_level` field' do
+ expect { project.drop_visibility_level! }
+ .to not_change { project.visibility_level }
+ end
+ end
end
end
diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb
index 77c88a04cde..d62fa58739a 100644
--- a/spec/models/project_team_spec.rb
+++ b/spec/models/project_team_spec.rb
@@ -141,7 +141,7 @@ describe ProjectTeam do
describe '#find_member' do
context 'personal project' do
let(:project) do
- create(:project, :public, :access_requestable)
+ create(:project, :public)
end
let(:requester) { create(:user) }
@@ -161,7 +161,7 @@ describe ProjectTeam do
end
context 'group project' do
- let(:group) { create(:group, :access_requestable) }
+ let(:group) { create(:group) }
let(:project) { create(:project, group: group) }
let(:requester) { create(:user) }
@@ -246,7 +246,7 @@ describe ProjectTeam do
context 'personal project' do
let(:project) do
- create(:project, :public, :access_requestable)
+ create(:project, :public)
end
context 'when project is not shared with group' do
@@ -292,7 +292,7 @@ describe ProjectTeam do
end
context 'group project' do
- let(:group) { create(:group, :access_requestable) }
+ let(:group) { create(:group) }
let!(:project) do
create(:project, group: group)
end
diff --git a/spec/models/project_wiki_spec.rb b/spec/models/project_wiki_spec.rb
index d12dd97bb9e..31d1d1fd7d1 100644
--- a/spec/models/project_wiki_spec.rb
+++ b/spec/models/project_wiki_spec.rb
@@ -47,11 +47,25 @@ describe ProjectWiki do
describe "#http_url_to_repo" do
let(:project) { create :project }
- it 'returns the full http url to the repo' do
- expected_url = "#{Gitlab.config.gitlab.url}/#{subject.full_path}.git"
+ context 'when a custom HTTP clone URL root is not set' do
+ it 'returns the full http url to the repo' do
+ expected_url = "#{Gitlab.config.gitlab.url}/#{subject.full_path}.git"
- expect(project_wiki.http_url_to_repo).to eq(expected_url)
- expect(project_wiki.http_url_to_repo).not_to include('@')
+ expect(project_wiki.http_url_to_repo).to eq(expected_url)
+ expect(project_wiki.http_url_to_repo).not_to include('@')
+ end
+ end
+
+ context 'when a custom HTTP clone URL root is set' do
+ before do
+ stub_application_setting(custom_http_clone_url_root: 'https://git.example.com:51234')
+ end
+
+ it 'returns the full http url to the repo, with the root replaced with the custom one' do
+ expected_url = "https://git.example.com:51234/#{subject.full_path}.git"
+
+ expect(project_wiki.http_url_to_repo).to eq(expected_url)
+ end
end
end
@@ -95,6 +109,7 @@ describe ProjectWiki do
context "when the wiki repository is empty" do
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_truthy }
end
end
@@ -107,6 +122,7 @@ describe ProjectWiki do
describe '#empty?' do
subject { super().empty? }
+
it { is_expected.to be_falsey }
it 'only instantiates a Wiki page once' do
diff --git a/spec/models/release_spec.rb b/spec/models/release_spec.rb
index 8714c67f29d..0aac325c2b2 100644
--- a/spec/models/release_spec.rb
+++ b/spec/models/release_spec.rb
@@ -15,12 +15,13 @@ RSpec.describe Release do
it { is_expected.to have_many(:links).class_name('Releases::Link') }
it { is_expected.to have_many(:milestones) }
it { is_expected.to have_many(:milestone_releases) }
+ it { is_expected.to have_one(:evidence) }
end
describe 'validation' do
it { is_expected.to validate_presence_of(:project) }
it { is_expected.to validate_presence_of(:description) }
- it { is_expected.to validate_presence_of(:name) }
+ it { is_expected.to validate_presence_of(:tag) }
context 'when a release exists in the database without a name' do
it 'does not require name' do
@@ -90,4 +91,42 @@ RSpec.describe Release do
end
end
end
+
+ describe 'evidence' do
+ describe '#create_evidence!' do
+ context 'when a release is created' do
+ it 'creates one Evidence object too' do
+ expect { release }.to change(Evidence, :count).by(1)
+ end
+ end
+ end
+
+ context 'when a release is deleted' do
+ it 'also deletes the associated evidence' do
+ release = create(:release)
+
+ expect { release.destroy }.to change(Evidence, :count).by(-1)
+ end
+ end
+ end
+
+ describe '#notify_new_release' do
+ context 'when a release is created' do
+ it 'instantiates NewReleaseWorker to send notifications' do
+ expect(NewReleaseWorker).to receive(:perform_async)
+
+ create(:release)
+ end
+ end
+
+ context 'when a release is updated' do
+ let!(:release) { create(:release) }
+
+ it 'does not send any new notification' do
+ expect(NewReleaseWorker).not_to receive(:perform_async)
+
+ release.update!(description: 'new description')
+ end
+ end
+ end
end
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 6dc47e0e501..cf9100eb6cf 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -279,7 +279,7 @@ describe Repository do
describe '#commits' do
context 'when neither the all flag nor a ref are specified' do
it 'returns every commit from default branch' do
- expect(repository.commits(limit: 60).size).to eq(37)
+ expect(repository.commits(nil, limit: 60).size).to eq(37)
end
end
@@ -320,7 +320,7 @@ describe Repository do
context "when 'all' flag is set" do
it 'returns every commit from the repository' do
- expect(repository.commits(all: true, limit: 60).size).to eq(60)
+ expect(repository.commits(nil, all: true, limit: 60).size).to eq(60)
end
end
end
@@ -1075,7 +1075,7 @@ describe Repository do
let(:ref) { 'refs/heads/master' }
it 'returns nil' do
- is_expected.to eq(nil)
+ is_expected.to be_nil
end
end
@@ -1193,66 +1193,84 @@ describe Repository do
end
describe '#has_visible_content?' do
- before do
- # If raw_repository.has_visible_content? gets called more than once then
- # caching is broken. We don't want that.
+ it 'delegates to raw_repository when true' do
expect(repository.raw_repository).to receive(:has_visible_content?)
- .once
- .and_return(result)
- end
-
- context 'when true' do
- let(:result) { true }
+ .and_return(true)
- it 'returns true and caches it' do
- expect(repository.has_visible_content?).to eq(true)
- # Second call hits the cache
- expect(repository.has_visible_content?).to eq(true)
- end
+ expect(repository.has_visible_content?).to eq(true)
end
- context 'when false' do
- let(:result) { false }
+ it 'delegates to raw_repository when false' do
+ expect(repository.raw_repository).to receive(:has_visible_content?)
+ .and_return(false)
- it 'returns false and caches it' do
- expect(repository.has_visible_content?).to eq(false)
- # Second call hits the cache
- expect(repository.has_visible_content?).to eq(false)
- end
+ expect(repository.has_visible_content?).to eq(false)
end
+
+ it_behaves_like 'asymmetric cached method', :has_visible_content?
end
describe '#branch_exists?' do
- it 'uses branch_names' do
- allow(repository).to receive(:branch_names).and_return(['foobar'])
+ let(:branch) { repository.root_ref }
+
+ subject { repository.branch_exists?(branch) }
+
+ it 'delegates to branch_names when the cache is empty' do
+ repository.expire_branches_cache
+
+ expect(repository).to receive(:branch_names).and_call_original
+ is_expected.to eq(true)
+ end
+
+ it 'uses redis set caching when the cache is filled' do
+ repository.branch_names # ensure the branch name cache is filled
+
+ expect(repository)
+ .to receive(:branch_names_include?)
+ .with(branch)
+ .and_call_original
- expect(repository.branch_exists?('foobar')).to eq(true)
- expect(repository.branch_exists?('master')).to eq(false)
+ is_expected.to eq(true)
end
end
describe '#tag_exists?' do
- it 'uses tag_names' do
- allow(repository).to receive(:tag_names).and_return(['foobar'])
+ let(:tag) { repository.tags.first.name }
- expect(repository.tag_exists?('foobar')).to eq(true)
- expect(repository.tag_exists?('master')).to eq(false)
+ subject { repository.tag_exists?(tag) }
+
+ it 'delegates to tag_names when the cache is empty' do
+ repository.expire_tags_cache
+
+ expect(repository).to receive(:tag_names).and_call_original
+ is_expected.to eq(true)
+ end
+
+ it 'uses redis set caching when the cache is filled' do
+ repository.tag_names # ensure the tag name cache is filled
+
+ expect(repository)
+ .to receive(:tag_names_include?)
+ .with(tag)
+ .and_call_original
+
+ is_expected.to eq(true)
end
end
- describe '#branch_names', :use_clean_rails_memory_store_caching do
+ describe '#branch_names', :clean_gitlab_redis_cache do
let(:fake_branch_names) { ['foobar'] }
it 'gets cached across Repository instances' do
allow(repository.raw_repository).to receive(:branch_names).once.and_return(fake_branch_names)
- expect(repository.branch_names).to eq(fake_branch_names)
+ expect(repository.branch_names).to match_array(fake_branch_names)
fresh_repository = Project.find(project.id).repository
expect(fresh_repository.object_id).not_to eq(repository.object_id)
expect(fresh_repository.raw_repository).not_to receive(:branch_names)
- expect(fresh_repository.branch_names).to eq(fake_branch_names)
+ expect(fresh_repository.branch_names).to match_array(fake_branch_names)
end
end
@@ -1972,7 +1990,7 @@ describe Repository do
it 'returns nil if repo does not exist' do
allow(repository).to receive(:root_ref).and_raise(Gitlab::Git::Repository::NoRepository)
- expect(repository.avatar).to eq(nil)
+ expect(repository.avatar).to be_nil
end
it 'returns the first avatar file found in the repository' do
@@ -2574,6 +2592,10 @@ describe Repository do
expect { repository.create_if_not_exists }.to change { repository.exists? }.from(false).to(true)
end
+ it 'returns true' do
+ expect(repository.create_if_not_exists).to eq(true)
+ end
+
it 'calls out to the repository client to create a repo' do
expect(repository.raw.gitaly_repository_client).to receive(:create_repository)
@@ -2588,6 +2610,10 @@ describe Repository do
repository.create_if_not_exists
end
+
+ it 'returns nil' do
+ expect(repository.create_if_not_exists).to be_nil
+ end
end
context 'when the repository exists but the cache is not up to date' do
@@ -2599,6 +2625,10 @@ describe Repository do
expect { repository.create_if_not_exists }.not_to raise_error
end
+
+ it 'returns nil' do
+ expect(repository.create_if_not_exists).to be_nil
+ end
end
end
diff --git a/spec/models/resource_label_event_spec.rb b/spec/models/resource_label_event_spec.rb
index f4023dcb95a..f51041c9ddc 100644
--- a/spec/models/resource_label_event_spec.rb
+++ b/spec/models/resource_label_event_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
RSpec.describe ResourceLabelEvent, type: :model do
subject { build(:resource_label_event, issue: issue) }
+
let(:issue) { create(:issue) }
let(:merge_request) { create(:merge_request) }
diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb
index d96e1398677..64077b76f01 100644
--- a/spec/models/service_spec.rb
+++ b/spec/models/service_spec.rb
@@ -78,10 +78,11 @@ describe Service do
end
describe "Template" do
+ let(:project) { create(:project) }
+
describe '.build_from_template' do
context 'when template is invalid' do
it 'sets service template to inactive when template is invalid' do
- project = create(:project)
template = build(:prometheus_service, template: true, active: true, properties: {})
template.save(validate: false)
@@ -91,6 +92,64 @@ describe Service do
expect(service.active).to be false
end
end
+
+ describe 'build issue tracker from a template' do
+ let(:title) { 'custom title' }
+ let(:description) { 'custom description' }
+ let(:url) { 'http://jira.example.com' }
+ let(:api_url) { 'http://api-jira.example.com' }
+ let(:username) { 'jira-username' }
+ let(:password) { 'jira-password' }
+ let(:data_params) do
+ {
+ url: url, api_url: api_url,
+ username: username, password: password
+ }
+ end
+
+ shared_examples 'service creation from a template' do
+ it 'creates a correct service' do
+ service = described_class.build_from_template(project.id, template)
+
+ expect(service).to be_active
+ expect(service.title).to eq(title)
+ expect(service.description).to eq(description)
+ expect(service.url).to eq(url)
+ expect(service.api_url).to eq(api_url)
+ expect(service.username).to eq(username)
+ expect(service.password).to eq(password)
+ end
+ end
+
+ # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
+ context 'when data are stored in properties' do
+ let(:properties) { data_params.merge(title: title, description: description) }
+ let!(:template) do
+ create(:jira_service, :without_properties_callback, template: true, properties: properties.merge(additional: 'something'))
+ end
+
+ it_behaves_like 'service creation from a template'
+ end
+
+ context 'when data are stored in separated fields' do
+ let(:template) do
+ create(:jira_service, data_params.merge(properties: {}, title: title, description: description, template: true))
+ end
+
+ it_behaves_like 'service creation from a template'
+ end
+
+ context 'when data are stored in both properties and separated fields' do
+ let(:properties) { data_params.merge(title: title, description: description) }
+ let(:template) do
+ create(:jira_service, :without_properties_callback, active: true, template: true, properties: properties).tap do |service|
+ create(:jira_tracker_data, data_params.merge(service: service))
+ end
+ end
+
+ it_behaves_like 'service creation from a template'
+ end
+ end
end
describe "for pushover service" do
@@ -104,7 +163,6 @@ describe Service do
api_key: '123456789'
})
end
- let(:project) { create(:project) }
describe 'is prefilled for projects pushover service' do
it "has all fields prefilled" do
diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb
index 3524cdae3b8..f4dcbfbc190 100644
--- a/spec/models/snippet_spec.rb
+++ b/spec/models/snippet_spec.rb
@@ -133,6 +133,32 @@ describe Snippet do
end
end
+ describe 'when default snippet visibility set to internal' do
+ using RSpec::Parameterized::TableSyntax
+
+ before do
+ stub_application_setting(default_snippet_visibility: Gitlab::VisibilityLevel::INTERNAL)
+ end
+
+ where(:attribute_name, :value) do
+ :visibility | 'private'
+ :visibility_level | Gitlab::VisibilityLevel::PRIVATE
+ 'visibility' | 'private'
+ 'visibility_level' | Gitlab::VisibilityLevel::PRIVATE
+ end
+
+ with_them do
+ it 'sets the visibility level' do
+ snippet = described_class.new(attribute_name => value, title: 'test', file_name: 'test.rb', content: 'test data')
+
+ expect(snippet.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
+ expect(snippet.title).to eq('test')
+ expect(snippet.file_name).to eq('test.rb')
+ expect(snippet.content).to eq('test data')
+ end
+ end
+ end
+
describe '.with_optional_visibility' do
context 'when a visibility level is provided' do
it 'returns snippets with the given visibility' do
@@ -157,12 +183,12 @@ describe Snippet do
end
end
- describe '.only_global_snippets' do
+ describe '.only_personal_snippets' do
it 'returns snippets not associated with any projects' do
create(:project_snippet)
snippet = create(:snippet)
- snippets = described_class.only_global_snippets
+ snippets = described_class.only_personal_snippets
expect(snippets).to eq([snippet])
end
diff --git a/spec/models/suggestion_spec.rb b/spec/models/suggestion_spec.rb
index 8d4e9070b19..2ac3ae0a5ad 100644
--- a/spec/models/suggestion_spec.rb
+++ b/spec/models/suggestion_spec.rb
@@ -38,16 +38,6 @@ describe Suggestion do
end
describe '#appliable?' do
- context 'when note does not support suggestions' do
- it 'returns false' do
- expect_next_instance_of(DiffNote) do |note|
- allow(note).to receive(:supports_suggestion?) { false }
- end
-
- expect(suggestion).not_to be_appliable
- end
- end
-
context 'when patch is already applied' do
let(:suggestion) { create(:suggestion, :applied) }
diff --git a/spec/models/system_note_metadata_spec.rb b/spec/models/system_note_metadata_spec.rb
index bcd3c03f947..801f139355b 100644
--- a/spec/models/system_note_metadata_spec.rb
+++ b/spec/models/system_note_metadata_spec.rb
@@ -5,6 +5,7 @@ require 'spec_helper'
describe SystemNoteMetadata do
describe 'associations' do
it { is_expected.to belong_to(:note) }
+ it { is_expected.to belong_to(:description_version) }
end
describe 'validation' do
diff --git a/spec/models/timelog_spec.rb b/spec/models/timelog_spec.rb
index 28fc82f2a32..7321a458817 100644
--- a/spec/models/timelog_spec.rb
+++ b/spec/models/timelog_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
RSpec.describe Timelog do
subject { build(:timelog) }
+
let(:issue) { create(:issue) }
let(:merge_request) { create(:merge_request) }
diff --git a/spec/models/todo_spec.rb b/spec/models/todo_spec.rb
index c2566ccd047..487a1c619c6 100644
--- a/spec/models/todo_spec.rb
+++ b/spec/models/todo_spec.rb
@@ -253,14 +253,14 @@ describe Todo do
end
end
- describe '.for_group_and_descendants' do
+ describe '.for_group_ids_and_descendants' do
it 'returns the todos for a group and its descendants' do
parent_group = create(:group)
child_group = create(:group, parent: parent_group)
todo1 = create(:todo, group: parent_group)
todo2 = create(:todo, group: child_group)
- todos = described_class.for_group_and_descendants(parent_group)
+ todos = described_class.for_group_ids_and_descendants([parent_group.id])
expect(todos).to contain_exactly(todo1, todo2)
end
diff --git a/spec/models/upload_spec.rb b/spec/models/upload_spec.rb
index d97bb8cfb90..03434c95218 100644
--- a/spec/models/upload_spec.rb
+++ b/spec/models/upload_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
describe Upload do
- describe 'assocations' do
+ describe 'associations' do
it { is_expected.to belong_to(:model) }
end
@@ -107,6 +107,52 @@ describe Upload do
end
end
+ describe '#build_uploader' do
+ it 'returns a uploader object with current upload associated with it' do
+ subject = build(:upload)
+ uploader = subject.build_uploader
+
+ expect(uploader.upload).to eq(subject)
+ expect(uploader.mounted_as).to eq(subject.send(:mount_point))
+ expect(uploader.file).to be_nil
+ end
+ end
+
+ describe '#retrieve_uploader' do
+ it 'returns a uploader object with current uploader associated with and cache retrieved' do
+ subject = build(:upload)
+ uploader = subject.retrieve_uploader
+
+ expect(uploader.upload).to eq(subject)
+ expect(uploader.mounted_as).to eq(subject.send(:mount_point))
+ expect(uploader.file).not_to be_nil
+ end
+ end
+
+ describe '#needs_checksum?' do
+ context 'with local storage' do
+ it 'returns true when no checksum exists' do
+ subject = create(:upload, :with_file, checksum: nil)
+
+ expect(subject.needs_checksum?).to be_truthy
+ end
+
+ it 'returns false when checksum is already present' do
+ subject = create(:upload, :with_file, checksum: 'something')
+
+ expect(subject.needs_checksum?).to be_falsey
+ end
+ end
+
+ context 'with remote storage' do
+ subject { build(:upload, :object_storage) }
+
+ it 'returns false' do
+ expect(subject.needs_checksum?).to be_falsey
+ end
+ end
+ end
+
describe '#exist?' do
it 'returns true when the file exists' do
upload = described_class.new(path: __FILE__, store: ObjectStorage::Store::LOCAL)
diff --git a/spec/models/uploads/fog_spec.rb b/spec/models/uploads/fog_spec.rb
index 4a44cf5ab0f..b93d9449da9 100644
--- a/spec/models/uploads/fog_spec.rb
+++ b/spec/models/uploads/fog_spec.rb
@@ -44,7 +44,7 @@ describe Uploads::Fog do
subject { data_store.delete_keys(keys) }
before do
- uploads.each { |upload| upload.build_uploader.migrate!(2) }
+ uploads.each { |upload| upload.retrieve_uploader.migrate!(2) }
end
it 'deletes multiple data' do
diff --git a/spec/models/user_interacted_project_spec.rb b/spec/models/user_interacted_project_spec.rb
index 47d919c1d12..b96ff08e22d 100644
--- a/spec/models/user_interacted_project_spec.rb
+++ b/spec/models/user_interacted_project_spec.rb
@@ -5,6 +5,7 @@ require 'spec_helper'
describe UserInteractedProject do
describe '.track' do
subject { described_class.track(event) }
+
let(:event) { build(:event) }
Event::ACTIONS.each do |action|
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index a701b858783..8eb2f9b5bc0 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -79,7 +79,7 @@ describe User do
describe '#group_members' do
it 'does not include group memberships for which user is a requester' do
user = create(:user)
- group = create(:group, :public, :access_requestable)
+ group = create(:group, :public)
group.request_access(user)
expect(user.group_members).to be_empty
@@ -89,7 +89,7 @@ describe User do
describe '#project_members' do
it 'does not include project memberships for which user is a requester' do
user = create(:user)
- project = create(:project, :public, :access_requestable)
+ project = create(:project, :public)
project.request_access(user)
expect(user.project_members).to be_empty
@@ -1120,6 +1120,30 @@ describe User do
end
end
+ describe 'deactivating a user' do
+ let(:user) { create(:user, name: 'John Smith') }
+
+ context "an active user" do
+ it "can be deactivated" do
+ user.deactivate
+
+ expect(user.deactivated?).to be_truthy
+ end
+ end
+
+ context "a user who is blocked" do
+ before do
+ user.block
+ end
+
+ it "cannot be deactivated" do
+ user.deactivate
+
+ expect(user.reload.deactivated?).to be_falsy
+ end
+ end
+ end
+
describe '.filter_items' do
let(:user) { double }
@@ -1141,6 +1165,12 @@ describe User do
expect(described_class.filter_items('blocked')).to include user
end
+ it 'filters by deactivated' do
+ expect(described_class).to receive(:deactivated).and_return([user])
+
+ expect(described_class.filter_items('deactivated')).to include user
+ end
+
it 'filters by two_factor_disabled' do
expect(described_class).to receive(:without_two_factor).and_return([user])
@@ -1161,7 +1191,7 @@ describe User do
end
describe '.without_projects' do
- let!(:project) { create(:project, :public, :access_requestable) }
+ let!(:project) { create(:project, :public) }
let!(:user) { create(:user) }
let!(:user_without_project) { create(:user) }
let!(:user_without_project2) { create(:user) }
@@ -1427,10 +1457,18 @@ describe User do
expect(described_class.search(user.username)).to eq([user, user2])
end
+ it 'returns users with a matching username starting with a @' do
+ expect(described_class.search("@#{user.username}")).to eq([user, user2])
+ end
+
it 'returns users with a partially matching username' do
expect(described_class.search(user.username[0..2])).to eq([user, user2])
end
+ it 'returns users with a partially matching username starting with @' do
+ expect(described_class.search("@#{user.username[0..2]}")).to eq([user, user2])
+ end
+
it 'returns users with a matching username regardless of the casing' do
expect(described_class.search(user2.username.upcase)).to eq([user2])
end
@@ -1516,15 +1554,22 @@ describe User do
end
describe '.find_by_ssh_key_id' do
- context 'using an existing SSH key ID' do
- let(:user) { create(:user) }
- let(:key) { create(:key, user: user) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:key) { create(:key, user: user) }
+ context 'using an existing SSH key ID' do
it 'returns the corresponding User' do
expect(described_class.find_by_ssh_key_id(key.id)).to eq(user)
end
end
+ it 'only performs a single query' do
+ key # Don't count the queries for creating the key and user
+
+ expect { described_class.find_by_ssh_key_id(key.id) }
+ .not_to exceed_query_limit(1)
+ end
+
context 'using an invalid SSH key ID' do
it 'returns nil' do
expect(described_class.find_by_ssh_key_id(-1)).to be_nil
@@ -2034,8 +2079,98 @@ describe User do
end
end
+ describe "#last_active_at" do
+ let(:last_activity_on) { 5.days.ago.to_date }
+ let(:current_sign_in_at) { 8.days.ago }
+
+ context 'for a user that has `last_activity_on` set' do
+ let(:user) { create(:user, last_activity_on: last_activity_on) }
+
+ it 'returns `last_activity_on` with current time zone' do
+ expect(user.last_active_at).to eq(last_activity_on.to_time.in_time_zone)
+ end
+ end
+
+ context 'for a user that has `current_sign_in_at` set' do
+ let(:user) { create(:user, current_sign_in_at: current_sign_in_at) }
+
+ it 'returns `current_sign_in_at`' do
+ expect(user.last_active_at).to eq(current_sign_in_at)
+ end
+ end
+
+ context 'for a user that has both `current_sign_in_at` & ``last_activity_on`` set' do
+ let(:user) { create(:user, current_sign_in_at: current_sign_in_at, last_activity_on: last_activity_on) }
+
+ it 'returns the latest among `current_sign_in_at` & `last_activity_on`' do
+ latest_event = [current_sign_in_at, last_activity_on.to_time.in_time_zone].max
+ expect(user.last_active_at).to eq(latest_event)
+ end
+ end
+
+ context 'for a user that does not have both `current_sign_in_at` & `last_activity_on` set' do
+ let(:user) { create(:user, current_sign_in_at: nil, last_activity_on: nil) }
+
+ it 'returns nil' do
+ expect(user.last_active_at).to eq(nil)
+ end
+ end
+ end
+
+ describe "#can_be_deactivated?" do
+ let(:activity) { {} }
+ let(:user) { create(:user, name: 'John Smith', **activity) }
+ let(:day_within_minium_inactive_days_threshold) { User::MINIMUM_INACTIVE_DAYS.pred.days.ago }
+ let(:day_outside_minium_inactive_days_threshold) { User::MINIMUM_INACTIVE_DAYS.next.days.ago }
+
+ shared_examples 'not eligible for deactivation' do
+ it 'returns false' do
+ expect(user.can_be_deactivated?).to be_falsey
+ end
+ end
+
+ shared_examples 'eligible for deactivation' do
+ it 'returns true' do
+ expect(user.can_be_deactivated?).to be_truthy
+ end
+ end
+
+ context "a user who is not active" do
+ before do
+ user.block
+ end
+
+ it_behaves_like 'not eligible for deactivation'
+ end
+
+ context 'a user who has activity within the specified minimum inactive days' do
+ let(:activity) { { last_activity_on: day_within_minium_inactive_days_threshold } }
+
+ it_behaves_like 'not eligible for deactivation'
+ end
+
+ context 'a user who has signed in within the specified minimum inactive days' do
+ let(:activity) { { current_sign_in_at: day_within_minium_inactive_days_threshold } }
+
+ it_behaves_like 'not eligible for deactivation'
+ end
+
+ context 'a user who has no activity within the specified minimum inactive days' do
+ let(:activity) { { last_activity_on: day_outside_minium_inactive_days_threshold } }
+
+ it_behaves_like 'eligible for deactivation'
+ end
+
+ context 'a user who has not signed in within the specified minimum inactive days' do
+ let(:activity) { { current_sign_in_at: day_outside_minium_inactive_days_threshold } }
+
+ it_behaves_like 'eligible for deactivation'
+ end
+ end
+
describe "#contributed_projects" do
subject { create(:user) }
+
let!(:project1) { create(:project) }
let!(:project2) { fork_project(project3) }
let!(:project3) { create(:project) }
@@ -3600,6 +3735,80 @@ describe User do
end
end
+ describe '#notification_settings_for' do
+ let(:user) { create(:user) }
+ let(:source) { nil }
+
+ subject { user.notification_settings_for(source) }
+
+ context 'when source is nil' do
+ it 'returns a blank global notification settings object' do
+ expect(subject.source).to eq(nil)
+ expect(subject.notification_email).to eq(nil)
+ expect(subject.level).to eq('global')
+ end
+ end
+
+ context 'when source is a Group' do
+ let(:group) { create(:group) }
+
+ subject { user.notification_settings_for(group, inherit: true) }
+
+ context 'when group has no existing notification settings' do
+ context 'when group has no ancestors' do
+ it 'will be a default Global notification setting' do
+ expect(subject.notification_email).to eq(nil)
+ expect(subject.level).to eq('global')
+ end
+ end
+
+ context 'when group has ancestors' do
+ context 'when an ancestor has a level other than Global' do
+ let(:ancestor) { create(:group) }
+ let(:group) { create(:group, parent: ancestor) }
+
+ before do
+ create(:notification_setting, user: user, source: ancestor, level: 'participating', notification_email: 'ancestor@example.com')
+ end
+
+ it 'has the same level set' do
+ expect(subject.level).to eq('participating')
+ end
+
+ it 'has the same email set' do
+ expect(subject.notification_email).to eq('ancestor@example.com')
+ end
+
+ context 'when inherit is false' do
+ subject { user.notification_settings_for(group) }
+
+ it 'does not inherit settings' do
+ expect(subject.notification_email).to eq(nil)
+ expect(subject.level).to eq('global')
+ end
+ end
+ end
+
+ context 'when an ancestor has a Global level but has an email set' do
+ let(:grand_ancestor) { create(:group) }
+ let(:ancestor) { create(:group, parent: grand_ancestor) }
+ let(:group) { create(:group, parent: ancestor) }
+
+ before do
+ create(:notification_setting, user: user, source: grand_ancestor, level: 'participating', notification_email: 'grand@example.com')
+ create(:notification_setting, user: user, source: ancestor, level: 'global', notification_email: 'ancestor@example.com')
+ end
+
+ it 'has the same email set' do
+ expect(subject.level).to eq('global')
+ expect(subject.notification_email).to eq('ancestor@example.com')
+ end
+ end
+ end
+ end
+ end
+ end
+
describe '#notification_email_for' do
let(:user) { create(:user) }
let(:group) { create(:group) }
@@ -3632,4 +3841,34 @@ describe User do
end
end
end
+
+ describe '#password_expired?' do
+ let(:user) { build(:user, password_expires_at: password_expires_at) }
+
+ subject { user.password_expired? }
+
+ context 'when password_expires_at is not set' do
+ let(:password_expires_at) {}
+
+ it 'returns false' do
+ is_expected.to be_falsey
+ end
+ end
+
+ context 'when password_expires_at is in the past' do
+ let(:password_expires_at) { 1.minute.ago }
+
+ it 'returns true' do
+ is_expected.to be_truthy
+ end
+ end
+
+ context 'when password_expires_at is in the future' do
+ let(:password_expires_at) { 1.minute.from_now }
+
+ it 'returns false' do
+ is_expected.to be_falsey
+ end
+ end
+ end
end
diff --git a/spec/policies/deploy_keys_project_policy_spec.rb b/spec/policies/deploy_keys_project_policy_spec.rb
new file mode 100644
index 00000000000..952da86b7a7
--- /dev/null
+++ b/spec/policies/deploy_keys_project_policy_spec.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe DeployKeysProjectPolicy do
+ subject { described_class.new(current_user, deploy_key.deploy_keys_project_for(project)) }
+
+ describe 'updating a deploy_keys_project' do
+ context 'when a project maintainer' do
+ let(:current_user) { create(:user) }
+
+ context 'tries to update private deploy key attached to project' do
+ let(:deploy_key) { create(:deploy_key, public: false) }
+ let(:project) { create(:project_empty_repo) }
+
+ before do
+ project.add_maintainer(current_user)
+ project.deploy_keys << deploy_key
+ end
+
+ it { is_expected.to be_disallowed(:update_deploy_keys_project) }
+ end
+
+ context 'tries to update public deploy key attached to project' do
+ let(:deploy_key) { create(:deploy_key, public: true) }
+ let(:project) { create(:project_empty_repo) }
+
+ before do
+ project.add_maintainer(current_user)
+ project.deploy_keys << deploy_key
+ end
+
+ it { is_expected.to be_allowed(:update_deploy_keys_project) }
+ end
+ end
+
+ context 'when a non-maintainer project member' do
+ let(:current_user) { create(:user) }
+ let(:project) { create(:project_empty_repo) }
+
+ before do
+ project.add_developer(current_user)
+ project.deploy_keys << deploy_key
+ end
+
+ context 'tries to update private deploy key attached to project' do
+ let(:deploy_key) { create(:deploy_key, public: false) }
+
+ it { is_expected.to be_disallowed(:update_deploy_keys_project) }
+ end
+
+ context 'tries to update public deploy key attached to project' do
+ let(:deploy_key) { create(:deploy_key, public: true) }
+
+ it { is_expected.to be_disallowed(:update_deploy_keys_project) }
+ end
+ end
+
+ context 'when a user is not a project member' do
+ let(:current_user) { create(:user) }
+ let(:project) { create(:project_empty_repo) }
+ let(:deploy_key) { create(:deploy_key, public: true) }
+
+ before do
+ project.deploy_keys << deploy_key
+ end
+
+ context 'tries to update public deploy key attached to project' do
+ it { is_expected.to be_disallowed(:update_deploy_keys_project) }
+ end
+ end
+ end
+end
diff --git a/spec/policies/global_policy_spec.rb b/spec/policies/global_policy_spec.rb
index df6cc526eb0..880f1bcbc05 100644
--- a/spec/policies/global_policy_spec.rb
+++ b/spec/policies/global_policy_spec.rb
@@ -141,6 +141,40 @@ describe GlobalPolicy do
end
end
+ describe 'receive notifications' do
+ describe 'regular user' do
+ it { is_expected.to be_allowed(:receive_notifications) }
+ end
+
+ describe 'admin' do
+ let(:current_user) { create(:admin) }
+
+ it { is_expected.to be_allowed(:receive_notifications) }
+ end
+
+ describe 'anonymous' do
+ let(:current_user) { nil }
+
+ it { is_expected.not_to be_allowed(:receive_notifications) }
+ end
+
+ describe 'blocked user' do
+ before do
+ current_user.block
+ end
+
+ it { is_expected.not_to be_allowed(:receive_notifications) }
+ end
+
+ describe 'deactivated user' do
+ before do
+ current_user.deactivate
+ end
+
+ it { is_expected.not_to be_allowed(:receive_notifications) }
+ end
+ end
+
describe 'git access' do
describe 'regular user' do
it { is_expected.to be_allowed(:access_git) }
@@ -158,6 +192,14 @@ describe GlobalPolicy do
it { is_expected.to be_allowed(:access_git) }
end
+ describe 'deactivated user' do
+ before do
+ current_user.deactivate
+ end
+
+ it { is_expected.not_to be_allowed(:access_git) }
+ end
+
context 'when terms are enforced' do
before do
enforce_terms
@@ -246,6 +288,14 @@ describe GlobalPolicy do
it { is_expected.not_to be_allowed(:use_slash_commands) }
end
+ context 'when deactivated' do
+ before do
+ current_user.deactivate
+ end
+
+ it { is_expected.not_to be_allowed(:use_slash_commands) }
+ end
+
context 'when access locked' do
before do
current_user.lock_access!
diff --git a/spec/policies/group_policy_spec.rb b/spec/policies/group_policy_spec.rb
index be55d94daec..603e7e874c9 100644
--- a/spec/policies/group_policy_spec.rb
+++ b/spec/policies/group_policy_spec.rb
@@ -3,12 +3,13 @@ require 'spec_helper'
describe GroupPolicy do
include_context 'GroupPolicy context'
- context 'with no user' do
+ context 'public group with no user' do
let(:group) { create(:group, :public) }
let(:current_user) { nil }
it do
expect_allowed(:read_group)
+ expect_allowed(*read_group_permissions)
expect_disallowed(:upload_file)
expect_disallowed(*reporter_permissions)
expect_disallowed(*developer_permissions)
@@ -27,11 +28,11 @@ describe GroupPolicy do
end
it { expect_disallowed(:read_group) }
+ it { expect_disallowed(*read_group_permissions) }
end
context 'with foreign user and public project' do
let(:project) { create(:project, :public) }
- let(:user) { create(:user) }
let(:current_user) { create(:user) }
before do
@@ -39,6 +40,7 @@ describe GroupPolicy do
end
it { expect_disallowed(:read_group) }
+ it { expect_disallowed(*read_group_permissions) }
end
context 'has projects' do
@@ -49,13 +51,13 @@ describe GroupPolicy do
project.add_developer(current_user)
end
- it { expect_allowed(:read_label, :read_list) }
+ it { expect_allowed(*read_group_permissions) }
context 'in subgroups' do
let(:subgroup) { create(:group, :private, parent: group) }
let(:project) { create(:project, namespace: subgroup) }
- it { expect_allowed(:read_label, :read_list) }
+ it { expect_allowed(*read_group_permissions) }
end
end
@@ -63,6 +65,7 @@ describe GroupPolicy do
let(:current_user) { guest }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_disallowed(*reporter_permissions)
expect_disallowed(*developer_permissions)
@@ -75,6 +78,7 @@ describe GroupPolicy do
let(:current_user) { reporter }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_disallowed(*developer_permissions)
@@ -87,6 +91,7 @@ describe GroupPolicy do
let(:current_user) { developer }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -99,8 +104,8 @@ describe GroupPolicy do
let(:current_user) { maintainer }
context 'with subgroup_creation level set to maintainer' do
- let(:group) do
- create(:group, :private, subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS)
+ before_all do
+ group.update(subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS)
end
it 'allows every maintainer permission plus creating subgroups' do
@@ -110,6 +115,7 @@ describe GroupPolicy do
updated_owner_permissions =
owner_permissions - create_subgroup_permission
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -120,6 +126,7 @@ describe GroupPolicy do
context 'with subgroup_creation_level set to owner' do
it 'allows every maintainer permission' do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -133,6 +140,7 @@ describe GroupPolicy do
let(:current_user) { owner }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -145,6 +153,7 @@ describe GroupPolicy do
let(:current_user) { admin }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -154,11 +163,11 @@ describe GroupPolicy do
end
describe 'private nested group use the highest access level from the group and inherited permissions' do
- let(:nested_group) do
+ let_it_be(:nested_group) do
create(:group, :private, :owner_subgroup_creation_only, parent: group)
end
- before do
+ before_all do
nested_group.add_guest(guest)
nested_group.add_guest(reporter)
nested_group.add_guest(developer)
@@ -176,6 +185,7 @@ describe GroupPolicy do
let(:current_user) { nil }
it do
+ expect_disallowed(*read_group_permissions)
expect_disallowed(*guest_permissions)
expect_disallowed(*reporter_permissions)
expect_disallowed(*developer_permissions)
@@ -188,6 +198,7 @@ describe GroupPolicy do
let(:current_user) { guest }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_disallowed(*reporter_permissions)
expect_disallowed(*developer_permissions)
@@ -200,6 +211,7 @@ describe GroupPolicy do
let(:current_user) { reporter }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_disallowed(*developer_permissions)
@@ -212,6 +224,7 @@ describe GroupPolicy do
let(:current_user) { developer }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -224,6 +237,7 @@ describe GroupPolicy do
let(:current_user) { maintainer }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -236,6 +250,7 @@ describe GroupPolicy do
let(:current_user) { owner }
it do
+ expect_allowed(*read_group_permissions)
expect_allowed(*guest_permissions)
expect_allowed(*reporter_permissions)
expect_allowed(*developer_permissions)
@@ -252,6 +267,10 @@ describe GroupPolicy do
context 'when the group share_with_group_lock is enabled' do
let(:group) { create(:group, share_with_group_lock: true, parent: parent) }
+ before do
+ group.add_owner(owner)
+ end
+
context 'when the parent group share_with_group_lock is enabled' do
context 'when the group has a grandparent' do
let(:parent) { create(:group, share_with_group_lock: true, parent: grandparent) }
@@ -337,7 +356,9 @@ describe GroupPolicy do
context "create_projects" do
context 'when group has no project creation level set' do
- let(:group) { create(:group, project_creation_level: nil) }
+ before_all do
+ group.update(project_creation_level: nil)
+ end
context 'reporter' do
let(:current_user) { reporter }
@@ -365,7 +386,9 @@ describe GroupPolicy do
end
context 'when group has project creation level set to no one' do
- let(:group) { create(:group, project_creation_level: ::Gitlab::Access::NO_ONE_PROJECT_ACCESS) }
+ before_all do
+ group.update(project_creation_level: ::Gitlab::Access::NO_ONE_PROJECT_ACCESS)
+ end
context 'reporter' do
let(:current_user) { reporter }
@@ -393,7 +416,9 @@ describe GroupPolicy do
end
context 'when group has project creation level set to maintainer only' do
- let(:group) { create(:group, project_creation_level: ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS) }
+ before_all do
+ group.update(project_creation_level: ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS)
+ end
context 'reporter' do
let(:current_user) { reporter }
@@ -421,7 +446,9 @@ describe GroupPolicy do
end
context 'when group has project creation level set to developers + maintainer' do
- let(:group) { create(:group, project_creation_level: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS) }
+ before_all do
+ group.update(project_creation_level: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS)
+ end
context 'reporter' do
let(:current_user) { reporter }
@@ -451,10 +478,8 @@ describe GroupPolicy do
context "create_subgroup" do
context 'when group has subgroup creation level set to owner' do
- let(:group) do
- create(
- :group,
- subgroup_creation_level: ::Gitlab::Access::OWNER_SUBGROUP_ACCESS)
+ before_all do
+ group.update(subgroup_creation_level: ::Gitlab::Access::OWNER_SUBGROUP_ACCESS)
end
context 'reporter' do
@@ -483,10 +508,8 @@ describe GroupPolicy do
end
context 'when group has subgroup creation level set to maintainer' do
- let(:group) do
- create(
- :group,
- subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS)
+ before_all do
+ group.update(subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS)
end
context 'reporter' do
@@ -524,4 +547,28 @@ describe GroupPolicy do
groups: [clusterable])
end
end
+
+ describe 'update_max_artifacts_size' do
+ let(:group) { create(:group, :public) }
+
+ context 'when no user' do
+ let(:current_user) { nil }
+
+ it { expect_disallowed(:update_max_artifacts_size) }
+ end
+
+ context 'admin' do
+ let(:current_user) { admin }
+
+ it { expect_allowed(:update_max_artifacts_size) }
+ end
+
+ %w(guest reporter developer maintainer owner).each do |role|
+ context role do
+ let(:current_user) { send(role) }
+
+ it { expect_disallowed(:update_max_artifacts_size) }
+ end
+ end
+ end
end
diff --git a/spec/policies/identity_provider_policy_spec.rb b/spec/policies/identity_provider_policy_spec.rb
index 2520469d4e7..52b6d2c89ba 100644
--- a/spec/policies/identity_provider_policy_spec.rb
+++ b/spec/policies/identity_provider_policy_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe IdentityProviderPolicy do
subject(:policy) { described_class.new(user, provider) }
+
let(:user) { User.new }
let(:provider) { :a_provider }
diff --git a/spec/policies/merge_request_policy_spec.rb b/spec/policies/merge_request_policy_spec.rb
index 87205f56589..af4c9703eb4 100644
--- a/spec/policies/merge_request_policy_spec.rb
+++ b/spec/policies/merge_request_policy_spec.rb
@@ -53,21 +53,25 @@ describe MergeRequestPolicy do
describe 'the author' do
subject { author }
+
it_behaves_like 'a denied user'
end
describe 'a guest' do
subject { guest }
+
it_behaves_like 'a denied user'
end
describe 'a developer' do
subject { developer }
+
it_behaves_like 'a denied user'
end
describe 'any other user' do
subject { non_team_member }
+
it_behaves_like 'a denied user'
end
end
@@ -82,11 +86,13 @@ describe MergeRequestPolicy do
describe 'a non-team-member' do
subject { non_team_member }
+
it_behaves_like 'a denied user'
end
describe 'a developer' do
subject { developer }
+
it_behaves_like 'a user with access'
end
end
diff --git a/spec/policies/project_policy_spec.rb b/spec/policies/project_policy_spec.rb
index 71ba73d5661..e61a064e82c 100644
--- a/spec/policies/project_policy_spec.rb
+++ b/spec/policies/project_policy_spec.rb
@@ -40,14 +40,14 @@ describe ProjectPolicy do
update_commit_status create_build update_build create_pipeline
update_pipeline create_merge_request_from create_wiki push_code
resolve_note create_container_image update_container_image destroy_container_image
- create_environment create_deployment create_release update_release
+ create_environment create_deployment update_deployment create_release update_release
]
end
let(:base_maintainer_permissions) do
%i[
push_to_delete_protected_branch update_project_snippet update_environment
- update_deployment admin_project_snippet admin_project_member admin_note admin_wiki admin_project
+ admin_project_snippet admin_project_member admin_note admin_wiki admin_project
admin_commit_status admin_build admin_container_image
admin_pipeline admin_environment admin_deployment destroy_release add_cluster
daily_statistics
@@ -478,4 +478,28 @@ describe ProjectPolicy do
end
end
end
+
+ describe 'update_max_artifacts_size' do
+ subject { described_class.new(current_user, project) }
+
+ context 'when no user' do
+ let(:current_user) { nil }
+
+ it { expect_disallowed(:update_max_artifacts_size) }
+ end
+
+ context 'admin' do
+ let(:current_user) { admin }
+
+ it { expect_allowed(:update_max_artifacts_size) }
+ end
+
+ %w(guest reporter developer maintainer owner).each do |role|
+ context role do
+ let(:current_user) { send(role) }
+
+ it { expect_disallowed(:update_max_artifacts_size) }
+ end
+ end
+ end
end
diff --git a/spec/policies/todo_policy_spec.rb b/spec/policies/todo_policy_spec.rb
new file mode 100644
index 00000000000..be6fecd1045
--- /dev/null
+++ b/spec/policies/todo_policy_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe TodoPolicy do
+ let_it_be(:author) { create(:user) }
+
+ let_it_be(:user1) { create(:user) }
+ let_it_be(:user2) { create(:user) }
+ let_it_be(:user3) { create(:user) }
+
+ let_it_be(:todo1) { create(:todo, author: author, user: user1) }
+ let_it_be(:todo2) { create(:todo, author: author, user: user2) }
+ let_it_be(:todo3) { create(:todo, author: author, user: user2) }
+ let_it_be(:todo4) { create(:todo, author: author, user: user3) }
+
+ def permissions(user, todo)
+ described_class.new(user, todo)
+ end
+
+ describe 'own_todo' do
+ it 'allows owners to access their own todos' do
+ [
+ [user1, todo1],
+ [user2, todo2],
+ [user2, todo3],
+ [user3, todo4]
+ ].each do |user, todo|
+ expect(permissions(user, todo)).to be_allowed(:read_todo)
+ end
+ end
+
+ it 'does not allow users to access todos of other users' do
+ [
+ [user1, todo2],
+ [user1, todo3],
+ [user2, todo1],
+ [user2, todo4],
+ [user3, todo1],
+ [user3, todo2],
+ [user3, todo3]
+ ].each do |user, todo|
+ expect(permissions(user, todo)).to be_disallowed(:read_todo)
+ end
+ end
+ end
+end
diff --git a/spec/presenters/ci/build_runner_presenter_spec.rb b/spec/presenters/ci/build_runner_presenter_spec.rb
index a4234d14255..fa8791f2257 100644
--- a/spec/presenters/ci/build_runner_presenter_spec.rb
+++ b/spec/presenters/ci/build_runner_presenter_spec.rb
@@ -207,5 +207,22 @@ describe Ci::BuildRunnerPresenter do
end
end
end
+
+ context 'when persistent pipeline ref exists' do
+ let(:project) { create(:project, :repository) }
+ let(:sha) { project.repository.commit.sha }
+ let(:pipeline) { create(:ci_pipeline, sha: sha, project: project) }
+ let(:build) { create(:ci_build, pipeline: pipeline) }
+
+ before do
+ pipeline.persistent_ref.create
+ end
+
+ it 'exposes the persistent pipeline ref' do
+ is_expected
+ .to contain_exactly("+refs/pipelines/#{pipeline.id}:refs/pipelines/#{pipeline.id}",
+ "+refs/heads/#{build.ref}:refs/remotes/origin/#{build.ref}")
+ end
+ end
end
end
diff --git a/spec/presenters/ci/pipeline_presenter_spec.rb b/spec/presenters/ci/pipeline_presenter_spec.rb
index 7e8bbedcf6d..8cfcd9befb3 100644
--- a/spec/presenters/ci/pipeline_presenter_spec.rb
+++ b/spec/presenters/ci/pipeline_presenter_spec.rb
@@ -176,6 +176,44 @@ describe Ci::PipelinePresenter do
end
end
+ describe '#all_related_merge_request_text' do
+ subject { presenter.all_related_merge_request_text }
+
+ context 'with zero related merge requests (branch pipeline)' do
+ it { is_expected.to eq('No related merge requests found.') }
+ end
+
+ context 'with one related merge request' do
+ let!(:mr_1) { create(:merge_request, project: project, source_project: project) }
+
+ it {
+ is_expected.to eq("1 related merge request: " \
+ "<a class=\"mr-iid\" href=\"#{merge_request_path(mr_1)}\">#{mr_1.to_reference} #{mr_1.title}</a>")
+ }
+ end
+
+ context 'with two related merge requests' do
+ let!(:mr_1) { create(:merge_request, project: project, source_project: project, target_branch: 'staging') }
+ let!(:mr_2) { create(:merge_request, project: project, source_project: project, target_branch: 'feature') }
+
+ it {
+ is_expected.to eq("2 related merge requests: " \
+ "<a class=\"mr-iid\" href=\"#{merge_request_path(mr_2)}\">#{mr_2.to_reference} #{mr_2.title}</a>, " \
+ "<a class=\"mr-iid\" href=\"#{merge_request_path(mr_1)}\">#{mr_1.to_reference} #{mr_1.title}</a>")
+ }
+ end
+ end
+
+ describe '#all_related_merge_requests' do
+ it 'memoizes the returned relation' do
+ query_count = ActiveRecord::QueryRecorder.new do
+ 2.times { presenter.send(:all_related_merge_requests).count }
+ end.count
+
+ expect(query_count).to eq(1)
+ end
+ end
+
describe '#link_to_merge_request' do
subject { presenter.link_to_merge_request }
diff --git a/spec/presenters/commit_presenter_spec.rb b/spec/presenters/commit_presenter_spec.rb
index 4a0d3a28c32..bc749acfa3a 100644
--- a/spec/presenters/commit_presenter_spec.rb
+++ b/spec/presenters/commit_presenter_spec.rb
@@ -17,15 +17,19 @@ describe CommitPresenter do
end
it 'returns commit status for ref' do
- expect(commit).to receive(:status).with('ref').and_return('test')
+ pipeline = double
+ status = double
- expect(subject).to eq('test')
+ expect(commit).to receive(:latest_pipeline).with('ref').and_return(pipeline)
+ expect(pipeline).to receive(:detailed_status).with(user).and_return(status)
+
+ expect(subject).to eq(status)
end
end
context 'when user can not read_commit_status' do
- it 'is false' do
- is_expected.to eq(false)
+ it 'is nil' do
+ is_expected.to eq(nil)
end
end
end
@@ -51,4 +55,17 @@ describe CommitPresenter do
end
end
end
+
+ describe '#signature_html' do
+ let(:signature) { 'signature' }
+
+ before do
+ expect(commit).to receive(:has_signature?).and_return(true)
+ allow(ApplicationController.renderer).to receive(:render).and_return(signature)
+ end
+
+ it 'renders html for displaying signature' do
+ expect(presenter.signature_html).to eq(signature)
+ end
+ end
end
diff --git a/spec/presenters/conversational_development_index/metric_presenter_spec.rb b/spec/presenters/conversational_development_index/metric_presenter_spec.rb
index 81eb05a9a6b..b8b68a676e6 100644
--- a/spec/presenters/conversational_development_index/metric_presenter_spec.rb
+++ b/spec/presenters/conversational_development_index/metric_presenter_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper'
describe ConversationalDevelopmentIndex::MetricPresenter do
subject { described_class.new(metric) }
+
let(:metric) { build(:conversational_development_index_metric) }
describe '#cards' do
diff --git a/spec/presenters/issue_presenter_spec.rb b/spec/presenters/issue_presenter_spec.rb
index 8e24559341b..1eb674d1f8f 100644
--- a/spec/presenters/issue_presenter_spec.rb
+++ b/spec/presenters/issue_presenter_spec.rb
@@ -17,13 +17,27 @@ describe IssuePresenter do
describe '#web_url' do
it 'returns correct path' do
- expect(presenter.web_url).to eq "http://localhost/#{group.name}/#{project.name}/issues/#{issue.iid}"
+ expect(presenter.web_url).to eq("http://localhost/#{group.name}/#{project.name}/issues/#{issue.iid}")
+ end
+ end
+
+ describe '#subscribed?' do
+ subject { presenter.subscribed? }
+
+ it 'returns not subscribed' do
+ is_expected.to be(false)
+ end
+
+ it 'returns subscribed' do
+ create(:subscription, user: user, project: project, subscribable: issue, subscribed: true)
+
+ is_expected.to be(true)
end
end
describe '#issue_path' do
it 'returns correct path' do
- expect(presenter.issue_path).to eq "/#{group.name}/#{project.name}/issues/#{issue.iid}"
+ expect(presenter.issue_path).to eq("/#{group.name}/#{project.name}/issues/#{issue.iid}")
end
end
end
diff --git a/spec/presenters/project_presenter_spec.rb b/spec/presenters/project_presenter_spec.rb
index 5bf80f6e318..2a00548c2c3 100644
--- a/spec/presenters/project_presenter_spec.rb
+++ b/spec/presenters/project_presenter_spec.rb
@@ -430,4 +430,26 @@ describe ProjectPresenter do
)
end
end
+
+ describe '#empty_repo_statistics_buttons' do
+ let(:project) { create(:project, :repository) }
+ let(:presenter) { described_class.new(project, current_user: user) }
+
+ subject(:empty_repo_statistics_buttons) { presenter.empty_repo_statistics_buttons }
+
+ before do
+ project.add_developer(user)
+ allow(project).to receive(:auto_devops_enabled?).and_return(false)
+ end
+
+ it 'orders the items correctly in an empty project' do
+ expect(empty_repo_statistics_buttons.map(&:label)).to start_with(
+ a_string_including('New'),
+ a_string_including('README'),
+ a_string_including('CHANGELOG'),
+ a_string_including('CONTRIBUTING'),
+ a_string_including('CI/CD')
+ )
+ end
+ end
end
diff --git a/spec/rake_helper.rb b/spec/rake_helper.rb
index 298a520f5ca..77fece5842d 100644
--- a/spec/rake_helper.rb
+++ b/spec/rake_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'rake'
diff --git a/spec/requests/api/access_requests_spec.rb b/spec/requests/api/access_requests_spec.rb
index 1af6602ea9e..100f3d33c7b 100644
--- a/spec/requests/api/access_requests_spec.rb
+++ b/spec/requests/api/access_requests_spec.rb
@@ -7,7 +7,7 @@ describe API::AccessRequests do
set(:stranger) { create(:user) }
set(:project) do
- create(:project, :public, :access_requestable, creator_id: maintainer.id, namespace: maintainer.namespace) do |project|
+ create(:project, :public, creator_id: maintainer.id, namespace: maintainer.namespace) do |project|
project.add_developer(developer)
project.add_maintainer(maintainer)
project.request_access(access_requester)
@@ -15,7 +15,7 @@ describe API::AccessRequests do
end
set(:group) do
- create(:group, :public, :access_requestable) do |group|
+ create(:group, :public) do |group|
group.add_developer(developer)
group.add_owner(maintainer)
group.request_access(access_requester)
diff --git a/spec/requests/api/badges_spec.rb b/spec/requests/api/badges_spec.rb
index 1dd0cb4817c..771a78a2d91 100644
--- a/spec/requests/api/badges_spec.rb
+++ b/spec/requests/api/badges_spec.rb
@@ -345,7 +345,7 @@ describe API::Badges do
end
def setup_project
- create(:project, :public, :access_requestable, creator_id: maintainer.id, namespace: project_group) do |project|
+ create(:project, :public, creator_id: maintainer.id, namespace: project_group) do |project|
project.add_developer(developer)
project.add_maintainer(maintainer)
project.request_access(access_requester)
@@ -356,7 +356,7 @@ describe API::Badges do
end
def setup_group
- create(:group, :public, :access_requestable) do |group|
+ create(:group, :public) do |group|
group.add_developer(developer)
group.add_owner(maintainer)
group.request_access(access_requester)
diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb
index 1be8883bd3c..6cb02ba2f6b 100644
--- a/spec/requests/api/commit_statuses_spec.rb
+++ b/spec/requests/api/commit_statuses_spec.rb
@@ -125,25 +125,55 @@ describe API::CommitStatuses do
let(:post_url) { "/projects/#{project.id}/statuses/#{sha}" }
context 'developer user' do
- %w[pending running success failed canceled].each do |status|
- context "for #{status}" do
- context 'uses only required parameters' do
- it 'creates commit status' do
- post api(post_url, developer), params: { state: status }
+ context 'uses only required parameters' do
+ %w[pending running success failed canceled].each do |status|
+ context "for #{status}" do
+ context 'when pipeline for sha does not exists' do
+ it 'creates commit status' do
+ post api(post_url, developer), params: { state: status }
+
+ expect(response).to have_gitlab_http_status(201)
+ expect(json_response['sha']).to eq(commit.id)
+ expect(json_response['status']).to eq(status)
+ expect(json_response['name']).to eq('default')
+ expect(json_response['ref']).not_to be_empty
+ expect(json_response['target_url']).to be_nil
+ expect(json_response['description']).to be_nil
+
+ if status == 'failed'
+ expect(CommitStatus.find(json_response['id'])).to be_api_failure
+ end
+ end
+ end
+ end
+ end
+
+ context 'when pipeline already exists for the specified sha' do
+ let!(:pipeline) { create(:ci_pipeline, project: project, sha: sha, ref: 'ref') }
+ let(:params) { { state: 'pending' } }
+
+ shared_examples_for 'creates a commit status for the existing pipeline' do
+ it do
+ expect do
+ post api(post_url, developer), params: params
+ end.not_to change { Ci::Pipeline.count }
+
+ job = pipeline.statuses.find_by_name(json_response['name'])
expect(response).to have_gitlab_http_status(201)
- expect(json_response['sha']).to eq(commit.id)
- expect(json_response['status']).to eq(status)
- expect(json_response['name']).to eq('default')
- expect(json_response['ref']).not_to be_empty
- expect(json_response['target_url']).to be_nil
- expect(json_response['description']).to be_nil
-
- if status == 'failed'
- expect(CommitStatus.find(json_response['id'])).to be_api_failure
- end
+ expect(job.status).to eq('pending')
end
end
+
+ it_behaves_like 'creates a commit status for the existing pipeline'
+
+ context 'with pipeline for merge request' do
+ let!(:merge_request) { create(:merge_request, :with_detached_merge_request_pipeline, source_project: project) }
+ let!(:pipeline) { merge_request.all_pipelines.last }
+ let(:sha) { pipeline.sha }
+
+ it_behaves_like 'creates a commit status for the existing pipeline'
+ end
end
end
diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb
index 5e6ff40e8cf..90ff1d12bf1 100644
--- a/spec/requests/api/commits_spec.rb
+++ b/spec/requests/api/commits_spec.rb
@@ -169,6 +169,18 @@ describe API::Commits do
end
end
+ context 'first_parent optional parameter' do
+ it 'returns all first_parent commits' do
+ commit_count = project.repository.count_commits(ref: SeedRepo::Commit::ID, first_parent: true)
+
+ get api("/projects/#{project_id}/repository/commits", user), params: { ref_name: SeedRepo::Commit::ID, first_parent: 'true' }
+
+ expect(response).to include_pagination_headers
+ expect(commit_count).to eq(12)
+ expect(response.headers['X-Total']).to eq(commit_count.to_s)
+ end
+ end
+
context 'with_stats optional parameter' do
let(:project) { create(:project, :public, :repository) }
diff --git a/spec/requests/api/deploy_keys_spec.rb b/spec/requests/api/deploy_keys_spec.rb
index b93ee148736..e0cc18abcca 100644
--- a/spec/requests/api/deploy_keys_spec.rb
+++ b/spec/requests/api/deploy_keys_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper'
describe API::DeployKeys do
let(:user) { create(:user) }
+ let(:maintainer) { create(:user) }
let(:admin) { create(:admin) }
let(:project) { create(:project, creator_id: user.id) }
let(:project2) { create(:project, creator_id: user.id) }
@@ -124,45 +125,109 @@ describe API::DeployKeys do
end
describe 'PUT /projects/:id/deploy_keys/:key_id' do
- let(:private_deploy_key) { create(:another_deploy_key, public: false) }
- let(:project_private_deploy_key) do
- create(:deploy_keys_project, project: project, deploy_key: private_deploy_key)
+ let(:extra_params) { {} }
+
+ subject do
+ put api("/projects/#{project.id}/deploy_keys/#{deploy_key.id}", api_user), params: extra_params
end
- it 'updates a public deploy key as admin' do
- expect do
- put api("/projects/#{project.id}/deploy_keys/#{deploy_key.id}", admin), params: { title: 'new title' }
- end.not_to change(deploy_key, :title)
+ context 'with non-admin' do
+ let(:api_user) { user }
- expect(response).to have_gitlab_http_status(200)
+ it 'does not update a public deploy key' do
+ expect { subject }.not_to change(deploy_key, :title)
+
+ expect(response).to have_gitlab_http_status(404)
+ end
end
- it 'does not update a public deploy key as non admin' do
- expect do
- put api("/projects/#{project.id}/deploy_keys/#{deploy_key.id}", user), params: { title: 'new title' }
- end.not_to change(deploy_key, :title)
+ context 'with admin' do
+ let(:api_user) { admin }
- expect(response).to have_gitlab_http_status(404)
+ context 'public deploy key attached to project' do
+ let(:extra_params) { { title: 'new title', can_push: true } }
+
+ it 'updates the title of the deploy key' do
+ expect { subject }.to change { deploy_key.reload.title }.to 'new title'
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'updates can_push of deploy_keys_project' do
+ expect { subject }.to change { deploy_keys_project.reload.can_push }.from(false).to(true)
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
+
+ context 'private deploy key' do
+ let(:deploy_key) { create(:another_deploy_key, public: false) }
+ let(:deploy_keys_project) do
+ create(:deploy_keys_project, project: project, deploy_key: deploy_key)
+ end
+ let(:extra_params) { { title: 'new title', can_push: true } }
+
+ it 'updates the title of the deploy key' do
+ expect { subject }.to change { deploy_key.reload.title }.to 'new title'
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'updates can_push of deploy_keys_project' do
+ expect { subject }.to change { deploy_keys_project.reload.can_push }.from(false).to(true)
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ context 'invalid title' do
+ let(:extra_params) { { title: '' } }
+
+ it 'does not update the title of the deploy key' do
+ expect { subject }.not_to change { deploy_key.reload.title }
+ expect(response).to have_gitlab_http_status(400)
+ end
+ end
+ end
end
- it 'does not update a private key with invalid title' do
- project_private_deploy_key
+ context 'with admin as project maintainer' do
+ let(:api_user) { admin }
- expect do
- put api("/projects/#{project.id}/deploy_keys/#{private_deploy_key.id}", admin), params: { title: '' }
- end.not_to change(deploy_key, :title)
+ before do
+ project.add_maintainer(admin)
+ end
- expect(response).to have_gitlab_http_status(400)
+ context 'public deploy key attached to project' do
+ let(:extra_params) { { title: 'new title', can_push: true } }
+
+ it 'updates the title of the deploy key' do
+ expect { subject }.to change { deploy_key.reload.title }.to 'new title'
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'updates can_push of deploy_keys_project' do
+ expect { subject }.to change { deploy_keys_project.reload.can_push }.from(false).to(true)
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
end
- it 'updates a private ssh key with correct attributes' do
- project_private_deploy_key
+ context 'with maintainer' do
+ let(:api_user) { maintainer }
- put api("/projects/#{project.id}/deploy_keys/#{private_deploy_key.id}", admin), params: { title: 'new title', can_push: true }
+ before do
+ project.add_maintainer(maintainer)
+ end
- expect(json_response['id']).to eq(private_deploy_key.id)
- expect(json_response['title']).to eq('new title')
- expect(json_response['can_push']).to eq(true)
+ context 'public deploy key attached to project' do
+ let(:extra_params) { { title: 'new title', can_push: true } }
+
+ it 'does not update the title of the deploy key' do
+ expect { subject }.not_to change { deploy_key.reload.title }
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'updates can_push of deploy_keys_project' do
+ expect { subject }.to change { deploy_keys_project.reload.can_push }.from(false).to(true)
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
end
end
diff --git a/spec/requests/api/deployments_spec.rb b/spec/requests/api/deployments_spec.rb
index 3dac7225b7a..ad7be531979 100644
--- a/spec/requests/api/deployments_spec.rb
+++ b/spec/requests/api/deployments_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe API::Deployments do
@@ -96,4 +98,164 @@ describe API::Deployments do
end
end
end
+
+ describe 'POST /projects/:id/deployments' do
+ let!(:project) { create(:project, :repository) }
+ let(:sha) { 'b83d6e391c22777fca1ed3012fce84f633d7fed0' }
+
+ context 'as a maintainer' do
+ it 'creates a new deployment' do
+ post(
+ api("/projects/#{project.id}/deployments", user),
+ params: {
+ environment: 'production',
+ sha: sha,
+ ref: 'master',
+ tag: false,
+ status: 'success'
+ }
+ )
+
+ expect(response).to have_gitlab_http_status(201)
+
+ expect(json_response['sha']).to eq(sha)
+ expect(json_response['ref']).to eq('master')
+ expect(json_response['environment']['name']).to eq('production')
+ end
+
+ it 'errors when creating a deployment with an invalid name' do
+ post(
+ api("/projects/#{project.id}/deployments", user),
+ params: {
+ environment: 'a' * 300,
+ sha: sha,
+ ref: 'master',
+ tag: false,
+ status: 'success'
+ }
+ )
+
+ expect(response).to have_gitlab_http_status(500)
+ end
+ end
+
+ context 'as a developer' do
+ it 'creates a new deployment' do
+ developer = create(:user)
+
+ project.add_developer(developer)
+
+ post(
+ api("/projects/#{project.id}/deployments", developer),
+ params: {
+ environment: 'production',
+ sha: sha,
+ ref: 'master',
+ tag: false,
+ status: 'success'
+ }
+ )
+
+ expect(response).to have_gitlab_http_status(201)
+
+ expect(json_response['sha']).to eq(sha)
+ expect(json_response['ref']).to eq('master')
+ end
+ end
+
+ context 'as non member' do
+ it 'returns a 404 status code' do
+ post(
+ api( "/projects/#{project.id}/deployments", non_member),
+ params: {
+ environment: 'production',
+ sha: '123',
+ ref: 'master',
+ tag: false,
+ status: 'success'
+ }
+ )
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+ end
+
+ describe 'PUT /projects/:id/deployments/:deployment_id' do
+ let(:project) { create(:project) }
+ let(:build) { create(:ci_build, :failed, project: project) }
+ let(:environment) { create(:environment, project: project) }
+ let(:deploy) do
+ create(
+ :deployment,
+ :failed,
+ project: project,
+ environment: environment,
+ deployable: nil
+ )
+ end
+
+ context 'as a maintainer' do
+ it 'returns a 403 when updating a deployment with a build' do
+ deploy.update(deployable: build)
+
+ put(
+ api("/projects/#{project.id}/deployments/#{deploy.id}", user),
+ params: { status: 'success' }
+ )
+
+ expect(response).to have_gitlab_http_status(403)
+ end
+
+ it 'updates a deployment without an associated build' do
+ put(
+ api("/projects/#{project.id}/deployments/#{deploy.id}", user),
+ params: { status: 'success' }
+ )
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['status']).to eq('success')
+ end
+ end
+
+ context 'as a developer' do
+ let(:developer) { create(:user) }
+
+ before do
+ project.add_developer(developer)
+ end
+
+ it 'returns a 403 when updating a deployment with a build' do
+ deploy.update(deployable: build)
+
+ put(
+ api("/projects/#{project.id}/deployments/#{deploy.id}", developer),
+ params: { status: 'success' }
+ )
+
+ expect(response).to have_gitlab_http_status(403)
+ end
+
+ it 'updates a deployment without an associated build' do
+ put(
+ api("/projects/#{project.id}/deployments/#{deploy.id}", developer),
+ params: { status: 'success' }
+ )
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['status']).to eq('success')
+ end
+ end
+
+ context 'as non member' do
+ it 'returns a 404 status code' do
+ put(
+ api("/projects/#{project.id}/deployments/#{deploy.id}", non_member),
+ params: { status: 'success' }
+ )
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+ end
end
diff --git a/spec/requests/api/doorkeeper_access_spec.rb b/spec/requests/api/doorkeeper_access_spec.rb
index d74484c8d29..cfee3f6c0f8 100644
--- a/spec/requests/api/doorkeeper_access_spec.rb
+++ b/spec/requests/api/doorkeeper_access_spec.rb
@@ -38,21 +38,35 @@ describe 'doorkeeper access' do
end
end
- describe "when user is blocked" do
- it "returns authorization error" do
- user.block
+ shared_examples 'forbidden request' do
+ it 'returns 403 response' do
get api("/user"), params: { access_token: token.token }
expect(response).to have_gitlab_http_status(403)
end
end
- describe "when user is ldap_blocked" do
- it "returns authorization error" do
+ context "when user is blocked" do
+ before do
+ user.block
+ end
+
+ it_behaves_like 'forbidden request'
+ end
+
+ context "when user is ldap_blocked" do
+ before do
user.ldap_block
- get api("/user"), params: { access_token: token.token }
+ end
- expect(response).to have_gitlab_http_status(403)
+ it_behaves_like 'forbidden request'
+ end
+
+ context "when user is deactivated" do
+ before do
+ user.deactivate
end
+
+ it_behaves_like 'forbidden request'
end
end
diff --git a/spec/requests/api/events_spec.rb b/spec/requests/api/events_spec.rb
index 2fc772b12af..992fd5e9c66 100644
--- a/spec/requests/api/events_spec.rb
+++ b/spec/requests/api/events_spec.rb
@@ -122,6 +122,7 @@ describe API::Events do
expect(payload_hash['action']).to eq(payload.action)
expect(payload_hash['ref_type']).to eq(payload.ref_type)
expect(payload_hash['commit_to']).to eq(payload.commit_to)
+ expect(payload_hash['ref_count']).to eq(payload.ref_count)
end
end
diff --git a/spec/requests/api/graphql/namespace/projects_spec.rb b/spec/requests/api/graphql/namespace/projects_spec.rb
index 815e9531ecf..2a95b99572f 100644
--- a/spec/requests/api/graphql/namespace/projects_spec.rb
+++ b/spec/requests/api/graphql/namespace/projects_spec.rb
@@ -67,6 +67,7 @@ describe 'getting projects' do
context 'when the namespace is a user' do
subject { user.namespace }
+
let(:include_subgroups) { false }
it_behaves_like 'a graphql namespace'
diff --git a/spec/requests/api/graphql/read_only_spec.rb b/spec/requests/api/graphql/read_only_spec.rb
new file mode 100644
index 00000000000..1d28a71258d
--- /dev/null
+++ b/spec/requests/api/graphql/read_only_spec.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Requests on a read-only node' do
+ include GraphqlHelpers
+
+ before do
+ allow(Gitlab::Database).to receive(:read_only?) { true }
+ end
+
+ context 'mutations' do
+ let(:current_user) { note.author }
+ let!(:note) { create(:note) }
+
+ let(:mutation) do
+ variables = {
+ id: GitlabSchema.id_from_object(note).to_s
+ }
+
+ graphql_mutation(:destroy_note, variables)
+ end
+
+ def mutation_response
+ graphql_mutation_response(:destroy_note)
+ end
+
+ it 'disallows the query' do
+ post_graphql_mutation(mutation, current_user: current_user)
+
+ expect(json_response['errors'].first['message']).to eq(Mutations::BaseMutation::ERROR_MESSAGE)
+ end
+
+ it 'does not destroy the Note' do
+ expect do
+ post_graphql_mutation(mutation, current_user: current_user)
+ end.not_to change { Note.count }
+ end
+ end
+
+ context 'read-only queries' do
+ let(:current_user) { create(:user) }
+ let(:project) { create(:project, :repository) }
+
+ before do
+ project.add_developer(current_user)
+ end
+
+ it 'allows the query' do
+ query = graphql_query_for('project', 'fullPath' => project.full_path)
+
+ post_graphql(query, current_user: current_user)
+
+ expect(graphql_data['project']).not_to be_nil
+ end
+ end
+end
diff --git a/spec/requests/api/group_labels_spec.rb b/spec/requests/api/group_labels_spec.rb
index 0be4e2e9121..f7994b55efa 100644
--- a/spec/requests/api/group_labels_spec.rb
+++ b/spec/requests/api/group_labels_spec.rb
@@ -5,9 +5,11 @@ require 'spec_helper'
describe API::GroupLabels do
let(:user) { create(:user) }
let(:group) { create(:group) }
+ let(:subgroup) { create(:group, parent: group) }
let!(:group_member) { create(:group_member, group: group, user: user) }
- let!(:label1) { create(:group_label, title: 'feature', group: group) }
- let!(:label2) { create(:group_label, title: 'bug', group: group) }
+ let!(:group_label1) { create(:group_label, title: 'feature', group: group) }
+ let!(:group_label2) { create(:group_label, title: 'bug', group: group) }
+ let!(:subgroup_label) { create(:group_label, title: 'support', group: subgroup) }
describe 'GET :id/labels' do
it 'returns all available labels for the group' do
@@ -35,6 +37,45 @@ describe API::GroupLabels do
end
end
+ describe 'GET :subgroup_id/labels' do
+ context 'when the include_ancestor_groups parameter is not set' do
+ it 'returns all available labels for the group and ancestor groups' do
+ get api("/groups/#{subgroup.id}/labels", user)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response).to be_an Array
+ expect(json_response).to all(match_schema('public_api/v4/labels/label'))
+ expect(json_response.size).to eq(3)
+ expect(json_response.map {|r| r['name'] }).to contain_exactly('feature', 'bug', 'support')
+ end
+ end
+
+ context 'when the include_ancestor_groups parameter is set to false' do
+ it 'returns all available labels for the group but not for ancestor groups' do
+ get api("/groups/#{subgroup.id}/labels", user), params: { include_ancestor_groups: false }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response).to be_an Array
+ expect(json_response).to all(match_schema('public_api/v4/labels/label'))
+ expect(json_response.size).to eq(1)
+ expect(json_response.map {|r| r['name'] }).to contain_exactly('support')
+ end
+ end
+ end
+
+ describe 'GET :id/labels/:label_id' do
+ it 'returns a single label for the group' do
+ get api("/groups/#{group.id}/labels/#{group_label1.name}", user)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['name']).to eq(group_label1.name)
+ expect(json_response['color']).to eq(group_label1.color)
+ expect(json_response['description']).to eq(group_label1.description)
+ end
+ end
+
describe 'POST /groups/:id/labels' do
it 'returns created label when all params are given' do
post api("/groups/#{group.id}/labels", user),
@@ -78,7 +119,7 @@ describe API::GroupLabels do
it 'returns 409 if label already exists' do
post api("/groups/#{group.id}/labels", user),
params: {
- name: label1.name,
+ name: group_label1.name,
color: '#FFAABB'
}
@@ -87,15 +128,15 @@ describe API::GroupLabels do
end
end
- describe 'DELETE /groups/:id/labels' do
+ describe 'DELETE /groups/:id/labels (deprecated)' do
it 'returns 204 for existing label' do
- delete api("/groups/#{group.id}/labels", user), params: { name: label1.name }
+ delete api("/groups/#{group.id}/labels", user), params: { name: group_label1.name }
expect(response).to have_gitlab_http_status(204)
end
it 'returns 404 for non existing label' do
- delete api("/groups/#{group.id}/labels", user), params: { name: 'label2' }
+ delete api("/groups/#{group.id}/labels", user), params: { name: 'not_exists' }
expect(response).to have_gitlab_http_status(404)
expect(json_response['message']).to eq('404 Label Not Found')
@@ -115,20 +156,50 @@ describe API::GroupLabels do
expect(response).to have_gitlab_http_status(204)
expect(subgroup.labels.size).to eq(0)
- expect(group.labels).to include(label1)
+ expect(group.labels).to include(group_label1)
end
it_behaves_like '412 response' do
let(:request) { api("/groups/#{group.id}/labels", user) }
- let(:params) { { name: label1.name } }
+ let(:params) { { name: group_label1.name } }
end
end
- describe 'PUT /groups/:id/labels' do
+ describe 'DELETE /groups/:id/labels/:label_id' do
+ it 'returns 204 for existing label' do
+ delete api("/groups/#{group.id}/labels/#{group_label1.name}", user)
+
+ expect(response).to have_gitlab_http_status(204)
+ end
+
+ it 'returns 404 for non existing label' do
+ delete api("/groups/#{group.id}/labels/not_exists", user)
+
+ expect(response).to have_gitlab_http_status(404)
+ expect(json_response['message']).to eq('404 Label Not Found')
+ end
+
+ it "does not delete parent's group labels" do
+ subgroup = create(:group, parent: group)
+ subgroup_label = create(:group_label, title: 'feature', group: subgroup)
+
+ delete api("/groups/#{subgroup.id}/labels/#{subgroup_label.name}", user)
+
+ expect(response).to have_gitlab_http_status(204)
+ expect(subgroup.labels.size).to eq(0)
+ expect(group.labels).to include(group_label1)
+ end
+
+ it_behaves_like '412 response' do
+ let(:request) { api("/groups/#{group.id}/labels/#{group_label1.name}", user) }
+ end
+ end
+
+ describe 'PUT /groups/:id/labels (deprecated)' do
it 'returns 200 if name and colors and description are changed' do
put api("/groups/#{group.id}/labels", user),
params: {
- name: label1.name,
+ name: group_label1.name,
new_name: 'New Label',
color: '#FFFFFF',
description: 'test'
@@ -152,13 +223,13 @@ describe API::GroupLabels do
expect(response).to have_gitlab_http_status(200)
expect(subgroup.labels[0].name).to eq('New Label')
- expect(label1.name).to eq('feature')
+ expect(group_label1.name).to eq('feature')
end
it 'returns 404 if label does not exist' do
put api("/groups/#{group.id}/labels", user),
params: {
- name: 'label2',
+ name: 'not_exists',
new_name: 'label3'
}
@@ -166,14 +237,61 @@ describe API::GroupLabels do
end
it 'returns 400 if no label name given' do
- put api("/groups/#{group.id}/labels", user), params: { new_name: label1.name }
+ put api("/groups/#{group.id}/labels", user), params: { new_name: group_label1.name }
+
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['error']).to eq('label_id, name are missing, exactly one parameter must be provided')
+ end
+
+ it 'returns 400 if no new parameters given' do
+ put api("/groups/#{group.id}/labels", user), params: { name: group_label1.name }
expect(response).to have_gitlab_http_status(400)
- expect(json_response['error']).to eq('name is missing')
+ expect(json_response['error']).to eq('new_name, color, description are missing, '\
+ 'at least one parameter must be provided')
+ end
+ end
+
+ describe 'PUT /groups/:id/labels/:label_id' do
+ it 'returns 200 if name and colors and description are changed' do
+ put api("/groups/#{group.id}/labels/#{group_label1.name}", user),
+ params: {
+ new_name: 'New Label',
+ color: '#FFFFFF',
+ description: 'test'
+ }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['name']).to eq('New Label')
+ expect(json_response['color']).to eq('#FFFFFF')
+ expect(json_response['description']).to eq('test')
+ end
+
+ it "does not update parent's group label" do
+ subgroup = create(:group, parent: group)
+ subgroup_label = create(:group_label, title: 'feature', group: subgroup)
+
+ put api("/groups/#{subgroup.id}/labels/#{subgroup_label.name}", user),
+ params: {
+ new_name: 'New Label'
+ }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(subgroup.labels[0].name).to eq('New Label')
+ expect(group_label1.name).to eq('feature')
+ end
+
+ it 'returns 404 if label does not exist' do
+ put api("/groups/#{group.id}/labels/not_exists", user),
+ params: {
+ new_name: 'label3'
+ }
+
+ expect(response).to have_gitlab_http_status(404)
end
it 'returns 400 if no new parameters given' do
- put api("/groups/#{group.id}/labels", user), params: { name: label1.name }
+ put api("/groups/#{group.id}/labels/#{group_label1.name}", user)
expect(response).to have_gitlab_http_status(400)
expect(json_response['error']).to eq('new_name, color, description are missing, '\
@@ -184,31 +302,31 @@ describe API::GroupLabels do
describe 'POST /groups/:id/labels/:label_id/subscribe' do
context 'when label_id is a label title' do
it 'subscribes to the label' do
- post api("/groups/#{group.id}/labels/#{label1.title}/subscribe", user)
+ post api("/groups/#{group.id}/labels/#{group_label1.title}/subscribe", user)
expect(response).to have_gitlab_http_status(201)
- expect(json_response['name']).to eq(label1.title)
+ expect(json_response['name']).to eq(group_label1.title)
expect(json_response['subscribed']).to be_truthy
end
end
context 'when label_id is a label ID' do
it 'subscribes to the label' do
- post api("/groups/#{group.id}/labels/#{label1.id}/subscribe", user)
+ post api("/groups/#{group.id}/labels/#{group_label1.id}/subscribe", user)
expect(response).to have_gitlab_http_status(201)
- expect(json_response['name']).to eq(label1.title)
+ expect(json_response['name']).to eq(group_label1.title)
expect(json_response['subscribed']).to be_truthy
end
end
context 'when user is already subscribed to label' do
before do
- label1.subscribe(user)
+ group_label1.subscribe(user)
end
it 'returns 304' do
- post api("/groups/#{group.id}/labels/#{label1.id}/subscribe", user)
+ post api("/groups/#{group.id}/labels/#{group_label1.id}/subscribe", user)
expect(response).to have_gitlab_http_status(304)
end
@@ -225,36 +343,36 @@ describe API::GroupLabels do
describe 'POST /groups/:id/labels/:label_id/unsubscribe' do
before do
- label1.subscribe(user)
+ group_label1.subscribe(user)
end
context 'when label_id is a label title' do
it 'unsubscribes from the label' do
- post api("/groups/#{group.id}/labels/#{label1.title}/unsubscribe", user)
+ post api("/groups/#{group.id}/labels/#{group_label1.title}/unsubscribe", user)
expect(response).to have_gitlab_http_status(201)
- expect(json_response['name']).to eq(label1.title)
+ expect(json_response['name']).to eq(group_label1.title)
expect(json_response['subscribed']).to be_falsey
end
end
context 'when label_id is a label ID' do
it 'unsubscribes from the label' do
- post api("/groups/#{group.id}/labels/#{label1.id}/unsubscribe", user)
+ post api("/groups/#{group.id}/labels/#{group_label1.id}/unsubscribe", user)
expect(response).to have_gitlab_http_status(201)
- expect(json_response['name']).to eq(label1.title)
+ expect(json_response['name']).to eq(group_label1.title)
expect(json_response['subscribed']).to be_falsey
end
end
context 'when user is already unsubscribed from label' do
before do
- label1.unsubscribe(user)
+ group_label1.unsubscribe(user)
end
it 'returns 304' do
- post api("/groups/#{group.id}/labels/#{label1.id}/unsubscribe", user)
+ post api("/groups/#{group.id}/labels/#{group_label1.id}/unsubscribe", user)
expect(response).to have_gitlab_http_status(304)
end
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index b3acf531ccb..902a5ec2a86 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -1,6 +1,7 @@
require 'spec_helper'
describe API::Groups do
+ include GroupAPIHelpers
include UploadHelpers
let(:user1) { create(:user, can_create_group: false) }
@@ -350,6 +351,13 @@ describe API::Groups do
expect(json_response['description']).to eq(group1.description)
expect(json_response['visibility']).to eq(Gitlab::VisibilityLevel.string_level(group1.visibility_level))
expect(json_response['avatar_url']).to eq(group1.avatar_url(only_path: false))
+ expect(json_response['share_with_group_lock']).to eq(group1.share_with_group_lock)
+ expect(json_response['require_two_factor_authentication']).to eq(group1.require_two_factor_authentication)
+ expect(json_response['two_factor_grace_period']).to eq(group1.two_factor_grace_period)
+ expect(json_response['auto_devops_enabled']).to eq(group1.auto_devops_enabled)
+ expect(json_response['emails_disabled']).to eq(group1.emails_disabled)
+ expect(json_response['project_creation_level']).to eq('maintainer')
+ expect(json_response['subgroup_creation_level']).to eq('maintainer')
expect(json_response['web_url']).to eq(group1.web_url)
expect(json_response['request_access_enabled']).to eq(group1.request_access_enabled)
expect(json_response['full_name']).to eq(group1.full_name)
@@ -485,11 +493,30 @@ describe API::Groups do
context 'when authenticated as the group owner' do
it 'updates the group' do
- put api("/groups/#{group1.id}", user1), params: { name: new_group_name, request_access_enabled: true }
+ put api("/groups/#{group1.id}", user1), params: {
+ name: new_group_name,
+ request_access_enabled: true,
+ project_creation_level: "noone",
+ subgroup_creation_level: "maintainer"
+ }
expect(response).to have_gitlab_http_status(200)
expect(json_response['name']).to eq(new_group_name)
+ expect(json_response['description']).to eq('')
+ expect(json_response['visibility']).to eq('public')
+ expect(json_response['share_with_group_lock']).to eq(false)
+ expect(json_response['require_two_factor_authentication']).to eq(false)
+ expect(json_response['two_factor_grace_period']).to eq(48)
+ expect(json_response['auto_devops_enabled']).to eq(nil)
+ expect(json_response['emails_disabled']).to eq(nil)
+ expect(json_response['project_creation_level']).to eq("noone")
+ expect(json_response['subgroup_creation_level']).to eq("maintainer")
expect(json_response['request_access_enabled']).to eq(true)
+ expect(json_response['parent_id']).to eq(nil)
+ expect(json_response['projects']).to be_an Array
+ expect(json_response['projects'].length).to eq(2)
+ expect(json_response['shared_projects']).to be_an Array
+ expect(json_response['shared_projects'].length).to eq(0)
end
it 'returns 404 for a non existing group' do
@@ -497,6 +524,29 @@ describe API::Groups do
expect(response).to have_gitlab_http_status(404)
end
+
+ context 'within a subgroup' do
+ let(:group3) { create(:group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) }
+ let!(:subgroup) { create(:group, parent: group3, visibility_level: Gitlab::VisibilityLevel::PUBLIC) }
+
+ before do
+ group3.add_owner(user3)
+ end
+
+ it 'does not change visibility when not requested' do
+ put api("/groups/#{group3.id}", user3), params: { description: 'Bug #23083' }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['visibility']).to eq('public')
+ end
+
+ it 'prevents making private a group containing public subgroups' do
+ put api("/groups/#{group3.id}", user3), params: { visibility: 'private' }
+
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['message']['visibility_level']).to contain_exactly('private is not allowed since there are sub-groups with higher visibility.')
+ end
+ end
end
context 'when authenticated as the admin' do
@@ -841,7 +891,9 @@ describe API::Groups do
describe "POST /groups" do
context "when authenticated as user without group permissions" do
it "does not create group" do
- post api("/groups", user1), params: attributes_for(:group)
+ group = attributes_for_group_api
+
+ post api("/groups", user1), params: group
expect(response).to have_gitlab_http_status(403)
end
@@ -873,7 +925,7 @@ describe API::Groups do
context "when authenticated as user with group permissions" do
it "creates group" do
- group = attributes_for(:group, { request_access_enabled: false })
+ group = attributes_for_group_api request_access_enabled: false
post api("/groups", user3), params: group
@@ -888,7 +940,7 @@ describe API::Groups do
it "creates a nested group" do
parent = create(:group)
parent.add_owner(user3)
- group = attributes_for(:group, { parent_id: parent.id })
+ group = attributes_for_group_api parent_id: parent.id
post api("/groups", user3), params: group
diff --git a/spec/requests/api/helpers_spec.rb b/spec/requests/api/helpers_spec.rb
index 29dc84c1924..a1a007811fe 100644
--- a/spec/requests/api/helpers_spec.rb
+++ b/spec/requests/api/helpers_spec.rb
@@ -343,6 +343,8 @@ describe API::Helpers do
end
context 'sudo' do
+ include_context 'custom session'
+
shared_examples 'successful sudo' do
it 'sets current_user' do
expect(current_user).to eq(user)
diff --git a/spec/requests/api/internal/base_spec.rb b/spec/requests/api/internal/base_spec.rb
index a56527073c7..01a2e33c0d9 100644
--- a/spec/requests/api/internal/base_spec.rb
+++ b/spec/requests/api/internal/base_spec.rb
@@ -43,61 +43,6 @@ describe API::Internal::Base do
end
end
- describe 'GET /internal/broadcast_message' do
- context 'broadcast message exists' do
- let!(:broadcast_message) { create(:broadcast_message, starts_at: 1.day.ago, ends_at: 1.day.from_now ) }
-
- it 'returns one broadcast message' do
- get api('/internal/broadcast_message'), params: { secret_token: secret_token }
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response['message']).to eq(broadcast_message.message)
- end
- end
-
- context 'broadcast message does not exist' do
- it 'returns nothing' do
- get api('/internal/broadcast_message'), params: { secret_token: secret_token }
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response).to be_empty
- end
- end
-
- context 'nil broadcast message' do
- it 'returns nothing' do
- allow(BroadcastMessage).to receive(:current).and_return(nil)
-
- get api('/internal/broadcast_message'), params: { secret_token: secret_token }
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response).to be_empty
- end
- end
- end
-
- describe 'GET /internal/broadcast_messages' do
- context 'broadcast message(s) exist' do
- let!(:broadcast_message) { create(:broadcast_message, starts_at: 1.day.ago, ends_at: 1.day.from_now ) }
-
- it 'returns active broadcast message(s)' do
- get api('/internal/broadcast_messages'), params: { secret_token: secret_token }
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response[0]['message']).to eq(broadcast_message.message)
- end
- end
-
- context 'broadcast message does not exist' do
- it 'returns nothing' do
- get api('/internal/broadcast_messages'), params: { secret_token: secret_token }
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response).to be_empty
- end
- end
- end
-
describe 'GET /internal/two_factor_recovery_codes' do
it 'returns an error message when the key does not exist' do
post api('/internal/two_factor_recovery_codes'),
@@ -237,14 +182,6 @@ describe API::Internal::Base do
expect(json_response['name']).to eq(user.name)
end
- it "finds a user by user id" do
- get(api("/internal/discover"), params: { user_id: user.id, secret_token: secret_token })
-
- expect(response).to have_gitlab_http_status(200)
-
- expect(json_response['name']).to eq(user.name)
- end
-
it "finds a user by username" do
get(api("/internal/discover"), params: { username: user.username, secret_token: secret_token })
@@ -403,12 +340,30 @@ describe API::Internal::Base do
end
context 'when receive_max_input_size has been updated' do
- it 'returns custom git config' do
+ before do
allow(Gitlab::CurrentSettings).to receive(:receive_max_input_size) { 1 }
+ end
+ it 'returns custom git config' do
push(key, project)
expect(json_response["git_config_options"]).to be_present
+ expect(json_response["git_config_options"]).to include("uploadpack.allowFilter=true")
+ expect(json_response["git_config_options"]).to include("uploadpack.allowAnySHA1InWant=true")
+ end
+
+ context 'when gitaly_upload_pack_filter feature flag is disabled' do
+ before do
+ stub_feature_flags(gitaly_upload_pack_filter: { enabled: false, thing: project })
+ end
+
+ it 'does not include allowFilter and allowAnySha1InWant in the git config options' do
+ push(key, project)
+
+ expect(json_response["git_config_options"]).to be_present
+ expect(json_response["git_config_options"]).not_to include("uploadpack.allowFilter=true")
+ expect(json_response["git_config_options"]).not_to include("uploadpack.allowAnySHA1InWant=true")
+ end
end
end
@@ -752,47 +707,6 @@ describe API::Internal::Base do
end
end
- describe 'GET /internal/merge_request_urls' do
- let(:repo_name) { "#{project.full_path}" }
- let(:changes) { URI.escape("#{Gitlab::Git::BLANK_SHA} 570e7b2abdd848b95f2f578043fc23bd6f6fd24d refs/heads/new_branch") }
-
- before do
- project.add_developer(user)
- end
-
- it 'returns link to create new merge request' do
- get api("/internal/merge_request_urls?project=#{repo_name}&changes=#{changes}"), params: { secret_token: secret_token }
-
- expect(json_response).to match [{
- "branch_name" => "new_branch",
- "url" => "http://#{Gitlab.config.gitlab.host}/#{project.full_path}/merge_requests/new?merge_request%5Bsource_branch%5D=new_branch",
- "new_merge_request" => true
- }]
- end
-
- it 'returns empty array if printing_merge_request_link_enabled is false' do
- project.update!(printing_merge_request_link_enabled: false)
-
- get api("/internal/merge_request_urls?project=#{repo_name}&changes=#{changes}"), params: { secret_token: secret_token }
-
- expect(json_response).to eq([])
- end
-
- context 'with a gl_repository parameter' do
- let(:gl_repository) { "project-#{project.id}" }
-
- it 'returns link to create new merge request' do
- get api("/internal/merge_request_urls?gl_repository=#{gl_repository}&changes=#{changes}"), params: { secret_token: secret_token }
-
- expect(json_response).to match [{
- "branch_name" => "new_branch",
- "url" => "http://#{Gitlab.config.gitlab.host}/#{project.full_path}/merge_requests/new?merge_request%5Bsource_branch%5D=new_branch",
- "new_merge_request" => true
- }]
- end
- end
- end
-
# TODO: Uncomment when the end-point is reenabled
# describe 'POST /notify_post_receive' do
# let(:valid_params) do
@@ -933,6 +847,19 @@ describe API::Internal::Base do
expect(json_response['messages']).to include(build_basic_message(message))
end
+ it 'returns the link to an existing merge request when it exists' do
+ merge_request = create(:merge_request, source_project: project, source_branch: branch_name, target_branch: 'master')
+
+ post api('/internal/post_receive'), params: valid_params
+
+ message = <<~MESSAGE.strip
+ View merge request for feature:
+ #{project_merge_request_url(project, merge_request)}
+ MESSAGE
+
+ expect(json_response['messages']).to include(build_basic_message(message))
+ end
+
it 'returns no merge request messages if printing_merge_request_link_enabled is false' do
project.update!(printing_merge_request_link_enabled: false)
diff --git a/spec/requests/api/internal/pages_spec.rb b/spec/requests/api/internal/pages_spec.rb
index e1b563b92f4..03bf748b471 100644
--- a/spec/requests/api/internal/pages_spec.rb
+++ b/spec/requests/api/internal/pages_spec.rb
@@ -43,6 +43,10 @@ describe API::Internal::Pages do
super(host, headers)
end
+ def deploy_pages(project)
+ project.mark_pages_as_deployed
+ end
+
context 'not existing host' do
it 'responds with 404 Not Found' do
query_host('pages.gitlab.io')
@@ -56,18 +60,104 @@ describe API::Internal::Pages do
let(:project) { create(:project, namespace: namespace, name: 'gitlab-ce') }
let!(:pages_domain) { create(:pages_domain, domain: 'pages.gitlab.io', project: project) }
- it 'responds with the correct domain configuration' do
- query_host('pages.gitlab.io')
+ context 'when there are no pages deployed for the related project' do
+ it 'responds with 204 No Content' do
+ query_host('pages.gitlab.io')
- expect(response).to have_gitlab_http_status(200)
- expect(response).to match_response_schema('internal/pages/virtual_domain')
+ expect(response).to have_gitlab_http_status(204)
+ end
+ end
- expect(json_response['certificate']).to eq(pages_domain.certificate)
- expect(json_response['key']).to eq(pages_domain.key)
+ context 'when there are pages deployed for the related project' do
+ it 'responds with the correct domain configuration' do
+ deploy_pages(project)
+
+ query_host('pages.gitlab.io')
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to match_response_schema('internal/pages/virtual_domain')
+
+ expect(json_response['certificate']).to eq(pages_domain.certificate)
+ expect(json_response['key']).to eq(pages_domain.key)
+
+ expect(json_response['lookup_paths']).to eq(
+ [
+ {
+ 'project_id' => project.id,
+ 'access_control' => false,
+ 'https_only' => false,
+ 'prefix' => '/',
+ 'source' => {
+ 'type' => 'file',
+ 'path' => 'gitlab-org/gitlab-ce/public/'
+ }
+ }
+ ]
+ )
+ end
+ end
+ end
+
+ context 'namespaced domain' do
+ let(:group) { create(:group, name: 'mygroup') }
+
+ before do
+ allow(Settings.pages).to receive(:host).and_return('gitlab-pages.io')
+ allow(Gitlab.config.pages).to receive(:url).and_return("http://gitlab-pages.io")
+ end
+
+ context 'regular project' do
+ it 'responds with the correct domain configuration' do
+ project = create(:project, group: group, name: 'myproject')
+ deploy_pages(project)
+
+ query_host('mygroup.gitlab-pages.io')
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to match_response_schema('internal/pages/virtual_domain')
+
+ expect(json_response['lookup_paths']).to eq(
+ [
+ {
+ 'project_id' => project.id,
+ 'access_control' => false,
+ 'https_only' => false,
+ 'prefix' => '/myproject/',
+ 'source' => {
+ 'type' => 'file',
+ 'path' => 'mygroup/myproject/public/'
+ }
+ }
+ ]
+ )
+ end
+ end
- lookup_path = json_response['lookup_paths'][0]
- expect(lookup_path['prefix']).to eq('/')
- expect(lookup_path['source']['path']).to eq('gitlab-org/gitlab-ce/public/')
+ context 'group root project' do
+ it 'responds with the correct domain configuration' do
+ project = create(:project, group: group, name: 'mygroup.gitlab-pages.io')
+ deploy_pages(project)
+
+ query_host('mygroup.gitlab-pages.io')
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to match_response_schema('internal/pages/virtual_domain')
+
+ expect(json_response['lookup_paths']).to eq(
+ [
+ {
+ 'project_id' => project.id,
+ 'access_control' => false,
+ 'https_only' => false,
+ 'prefix' => '/',
+ 'source' => {
+ 'type' => 'file',
+ 'path' => 'mygroup/mygroup.gitlab-pages.io/public/'
+ }
+ }
+ ]
+ )
+ end
end
end
end
diff --git a/spec/requests/api/issues/get_project_issues_spec.rb b/spec/requests/api/issues/get_project_issues_spec.rb
index c10f5b2bd58..06a43ea6b02 100644
--- a/spec/requests/api/issues/get_project_issues_spec.rb
+++ b/spec/requests/api/issues/get_project_issues_spec.rb
@@ -736,6 +736,8 @@ describe API::Issues do
get_related_merge_requests(project.id, issue.iid)
expect_paginated_array_response(related_mr.id)
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response.last).not_to have_key('subscribed')
end
it 'renders 404 if project is not visible' do
diff --git a/spec/requests/api/issues/post_projects_issues_spec.rb b/spec/requests/api/issues/post_projects_issues_spec.rb
index b74e8867310..3a55b437ead 100644
--- a/spec/requests/api/issues/post_projects_issues_spec.rb
+++ b/spec/requests/api/issues/post_projects_issues_spec.rb
@@ -374,9 +374,17 @@ describe API::Issues do
end
describe 'POST /projects/:id/issues with spam filtering' do
+ def post_issue
+ post api("/projects/#{project.id}/issues", user), params: params
+ end
+
before do
- allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true)
- allow_any_instance_of(AkismetService).to receive_messages(spam?: true)
+ expect_next_instance_of(SpamService) do |spam_service|
+ expect(spam_service).to receive_messages(check_for_spam?: true)
+ end
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
end
let(:params) do
@@ -387,17 +395,43 @@ describe API::Issues do
}
end
- it 'does not create a new project issue' do
- expect { post api("/projects/#{project.id}/issues", user), params: params }.not_to change(Issue, :count)
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['message']).to eq({ 'error' => 'Spam detected' })
-
- spam_logs = SpamLog.all
- expect(spam_logs.count).to eq(1)
- expect(spam_logs[0].title).to eq('new issue')
- expect(spam_logs[0].description).to eq('content here')
- expect(spam_logs[0].user).to eq(user)
- expect(spam_logs[0].noteable_type).to eq('Issue')
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
+
+ it 'does not create a new project issue' do
+ expect { post_issue }.not_to change(Issue, :count)
+ end
+
+ it 'returns correct status and message' do
+ post_issue
+
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['message']).to eq({ 'error' => 'Spam detected' })
+ end
+
+ it 'creates a new spam log entry' do
+ expect { post_issue }
+ .to log_spam(title: 'new issue', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
+ end
+
+ context 'when allow_possible_spam feature flag is true' do
+ it 'does creates a new project issue' do
+ expect { post_issue }.to change(Issue, :count).by(1)
+ end
+
+ it 'returns correct status' do
+ post_issue
+
+ expect(response).to have_gitlab_http_status(201)
+ end
+
+ it 'creates a new spam log entry' do
+ expect { post_issue }
+ .to log_spam(title: 'new issue', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
end
end
diff --git a/spec/requests/api/issues/put_projects_issues_spec.rb b/spec/requests/api/issues/put_projects_issues_spec.rb
index 267cba93713..43f302ed194 100644
--- a/spec/requests/api/issues/put_projects_issues_spec.rb
+++ b/spec/requests/api/issues/put_projects_issues_spec.rb
@@ -181,6 +181,10 @@ describe API::Issues do
end
describe 'PUT /projects/:id/issues/:issue_iid with spam filtering' do
+ def update_issue
+ put api("/projects/#{project.id}/issues/#{issue.iid}", user), params: params
+ end
+
let(:params) do
{
title: 'updated title',
@@ -189,21 +193,52 @@ describe API::Issues do
}
end
- it 'does not create a new project issue' do
- allow_any_instance_of(SpamService).to receive_messages(check_for_spam?: true)
- allow_any_instance_of(AkismetService).to receive_messages(spam?: true)
+ before do
+ expect_next_instance_of(SpamService) do |spam_service|
+ expect(spam_service).to receive_messages(check_for_spam?: true)
+ end
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
+ end
- put api("/projects/#{project.id}/issues/#{issue.iid}", user), params: params
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['message']).to eq({ 'error' => 'Spam detected' })
-
- spam_logs = SpamLog.all
- expect(spam_logs.count).to eq(1)
- expect(spam_logs[0].title).to eq('updated title')
- expect(spam_logs[0].description).to eq('content here')
- expect(spam_logs[0].user).to eq(user)
- expect(spam_logs[0].noteable_type).to eq('Issue')
+ it 'does not update a project issue' do
+ expect { update_issue }.not_to change { issue.reload.title }
+ end
+
+ it 'returns correct status and message' do
+ update_issue
+
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response).to include('message' => { 'error' => 'Spam detected' })
+ end
+
+ it 'creates a new spam log entry' do
+ expect { update_issue }
+ .to log_spam(title: 'updated title', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
+ end
+
+ context 'when allow_possible_spam feature flag is true' do
+ it 'updates a project issue' do
+ expect { update_issue }.to change { issue.reload.title }
+ end
+
+ it 'returns correct status and message' do
+ update_issue
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'creates a new spam log entry' do
+ expect { update_issue }
+ .to log_spam(title: 'updated title', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
end
end
diff --git a/spec/requests/api/labels_spec.rb b/spec/requests/api/labels_spec.rb
index 9aef67e28a7..7089da3d351 100644
--- a/spec/requests/api/labels_spec.rb
+++ b/spec/requests/api/labels_spec.rb
@@ -1,139 +1,122 @@
require 'spec_helper'
describe API::Labels do
+ def put_labels_api(route_type, user, spec_params, request_params = {})
+ if route_type == :deprecated
+ put api("/projects/#{project.id}/labels", user),
+ params: request_params.merge(spec_params)
+ else
+ label_id = spec_params[:name] || spec_params[:label_id]
+
+ put api("/projects/#{project.id}/labels/#{label_id}", user),
+ params: request_params.merge(spec_params.except(:name, :id))
+ end
+ end
+
let(:user) { create(:user) }
let(:project) { create(:project, creator_id: user.id, namespace: user.namespace) }
let!(:label1) { create(:label, title: 'label1', project: project) }
let!(:priority_label) { create(:label, title: 'bug', project: project, priority: 3) }
- shared_examples 'label update API' do
- it 'returns 200 if name is changed' do
- request_params = {
- new_name: 'New Label'
- }.merge(spec_params)
-
- put api("/projects/#{project.id}/labels", user),
- params: request_params
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response['name']).to eq('New Label')
- expect(json_response['color']).to eq(label1.color)
- end
+ route_types = [:deprecated, :rest]
- it 'returns 200 if colors is changed' do
- request_params = {
- color: '#FFFFFF'
- }.merge(spec_params)
+ shared_examples 'label update API' do
+ route_types.each do |route_type|
+ it "returns 200 if name is changed (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, new_name: 'New Label')
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['name']).to eq('New Label')
+ expect(json_response['color']).to eq(label1.color)
+ end
- expect(response).to have_gitlab_http_status(200)
- expect(json_response['name']).to eq(label1.name)
- expect(json_response['color']).to eq('#FFFFFF')
- end
+ it "returns 200 if colors is changed (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, color: '#FFFFFF')
- it 'returns 200 if a priority is added' do
- request_params = {
- priority: 3
- }.merge(spec_params)
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['name']).to eq(label1.name)
+ expect(json_response['color']).to eq('#FFFFFF')
+ end
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ it "returns 200 if a priority is added (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, priority: 3)
- expect(response.status).to eq(200)
- expect(json_response['name']).to eq(label1.name)
- expect(json_response['priority']).to eq(3)
- end
+ expect(response.status).to eq(200)
+ expect(json_response['name']).to eq(label1.name)
+ expect(json_response['priority']).to eq(3)
+ end
- it 'returns 400 if no new parameters given' do
- put api("/projects/#{project.id}/labels", user), params: spec_params
+ it "returns 400 if no new parameters given (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params)
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['error']).to eq('new_name, color, description, priority are missing, '\
- 'at least one parameter must be provided')
- end
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['error']).to eq('new_name, color, description, priority are missing, '\
+ 'at least one parameter must be provided')
+ end
- it 'returns 400 when color code is too short' do
- request_params = {
- color: '#FF'
- }.merge(spec_params)
+ it "returns 400 when color code is too short (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, color: '#FF')
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['message']['color']).to eq(['must be a valid color code'])
+ end
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['message']['color']).to eq(['must be a valid color code'])
- end
+ it "returns 400 for too long color code (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, color: '#FFAAFFFF')
- it 'returns 400 for too long color code' do
- request_params = {
- color: '#FFAAFFFF'
- }.merge(spec_params)
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['message']['color']).to eq(['must be a valid color code'])
+ end
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ it "returns 400 for invalid priority (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, priority: 'foo')
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['message']['color']).to eq(['must be a valid color code'])
- end
-
- it 'returns 400 for invalid priority' do
- request_params = {
- priority: 'foo'
- }.merge(spec_params)
+ expect(response).to have_gitlab_http_status(400)
+ end
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ it "returns 200 if name and colors and description are changed (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, new_name: 'New Label', color: '#FFFFFF', description: 'test')
- expect(response).to have_gitlab_http_status(400)
- end
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['name']).to eq('New Label')
+ expect(json_response['color']).to eq('#FFFFFF')
+ expect(json_response['description']).to eq('test')
+ end
- it 'returns 200 if name and colors and description are changed' do
- request_params = {
- new_name: 'New Label',
- color: '#FFFFFF',
- description: 'test'
- }.merge(spec_params)
+ it "returns 400 for invalid name (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, new_name: ',', color: '#FFFFFF')
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['message']['title']).to eq(['is invalid'])
+ end
- expect(response).to have_gitlab_http_status(200)
- expect(json_response['name']).to eq('New Label')
- expect(json_response['color']).to eq('#FFFFFF')
- expect(json_response['description']).to eq('test')
- end
+ it "returns 200 if description is changed (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, description: 'test')
- it 'returns 400 for invalid name' do
- request_params = {
- new_name: ',',
- color: '#FFFFFF'
- }.merge(spec_params)
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['id']).to eq(expected_response_label_id)
+ expect(json_response['description']).to eq('test')
+ end
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ it "returns 200 if priority is changed (#{route_type} route)" do
+ put_labels_api(route_type, user, spec_params, priority: 10)
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['message']['title']).to eq(['is invalid'])
+ expect(response.status).to eq(200)
+ expect(json_response['id']).to eq(expected_response_label_id)
+ expect(json_response['priority']).to eq(10)
+ end
end
- it 'returns 200 if description is changed' do
- request_params = {
- description: 'test'
- }.merge(spec_params)
+ it 'returns 200 if a priority is removed (deprecated route)' do
+ label = find_by_spec_params(spec_params)
- put api("/projects/#{project.id}/labels", user),
- params: request_params
+ expect(label).not_to be_nil
- expect(response).to have_gitlab_http_status(200)
- expect(json_response['id']).to eq(expected_response_label_id)
- expect(json_response['description']).to eq('test')
- end
+ label.priorities.create(project: label.project, priority: 1)
+ label.save!
- it 'returns 200 if priority is changed' do
request_params = {
- priority: 10
+ priority: nil
}.merge(spec_params)
put api("/projects/#{project.id}/labels", user),
@@ -141,21 +124,22 @@ describe API::Labels do
expect(response.status).to eq(200)
expect(json_response['id']).to eq(expected_response_label_id)
- expect(json_response['priority']).to eq(10)
+ expect(json_response['priority']).to be_nil
end
- it 'returns 200 if a priority is removed' do
+ it 'returns 200 if a priority is removed (rest route)' do
label = find_by_spec_params(spec_params)
expect(label).not_to be_nil
+ label_id = spec_params[:name] || spec_params[:label_id]
label.priorities.create(project: label.project, priority: 1)
label.save!
request_params = {
priority: nil
- }.merge(spec_params)
+ }.merge(spec_params.except(:name, :id))
- put api("/projects/#{project.id}/labels", user),
+ put api("/projects/#{project.id}/labels/#{label_id}", user),
params: request_params
expect(response.status).to eq(200)
@@ -173,11 +157,18 @@ describe API::Labels do
end
shared_examples 'label delete API' do
- it 'returns 204 for existing label' do
+ it 'returns 204 for existing label (deprecated route)' do
delete api("/projects/#{project.id}/labels", user), params: spec_params
expect(response).to have_gitlab_http_status(204)
end
+
+ it 'returns 204 for existing label (rest route)' do
+ label_id = spec_params[:name] || spec_params[:label_id]
+ delete api("/projects/#{project.id}/labels/#{label_id}", user), params: spec_params.except(:name, :label_id)
+
+ expect(response).to have_gitlab_http_status(204)
+ end
end
before do
@@ -256,6 +247,52 @@ describe API::Labels do
'is_project_label' => true)
end
end
+
+ context 'when the include_ancestor_groups parameter is not set' do
+ let(:group) { create(:group) }
+ let!(:group_label) { create(:group_label, title: 'feature', group: group) }
+ let(:subgroup) { create(:group, parent: group) }
+ let!(:subgroup_label) { create(:group_label, title: 'support', group: subgroup) }
+
+ before do
+ subgroup.add_owner(user)
+ project.update!(group: subgroup)
+ end
+
+ it 'returns all available labels for the project, parent group and ancestor groups' do
+ get api("/projects/#{project.id}/labels", user)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response).to be_an Array
+ expect(json_response).to all(match_schema('public_api/v4/labels/label'))
+ expect(json_response.size).to eq(4)
+ expect(json_response.map {|r| r['name'] }).to contain_exactly(group_label.name, subgroup_label.name, priority_label.name, label1.name)
+ end
+ end
+
+ context 'when the include_ancestor_groups parameter is set to false' do
+ let(:group) { create(:group) }
+ let!(:group_label) { create(:group_label, title: 'feature', group: group) }
+ let(:subgroup) { create(:group, parent: group) }
+ let!(:subgroup_label) { create(:group_label, title: 'support', group: subgroup) }
+
+ before do
+ subgroup.add_owner(user)
+ project.update!(group: subgroup)
+ end
+
+ it 'returns all available labels for the project and the parent group only' do
+ get api("/projects/#{project.id}/labels", user), params: { include_ancestor_groups: false }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response).to be_an Array
+ expect(json_response).to all(match_schema('public_api/v4/labels/label'))
+ expect(json_response.size).to eq(3)
+ expect(json_response.map {|r| r['name'] }).to contain_exactly(subgroup_label.name, priority_label.name, label1.name)
+ end
+ end
end
describe 'POST /projects/:id/labels' do
diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb
index 26f6e705528..eb55d747179 100644
--- a/spec/requests/api/members_spec.rb
+++ b/spec/requests/api/members_spec.rb
@@ -7,7 +7,7 @@ describe API::Members do
let(:stranger) { create(:user) }
let(:project) do
- create(:project, :public, :access_requestable, creator_id: maintainer.id, namespace: maintainer.namespace) do |project|
+ create(:project, :public, creator_id: maintainer.id, namespace: maintainer.namespace) do |project|
project.add_developer(developer)
project.add_maintainer(maintainer)
project.request_access(access_requester)
@@ -15,7 +15,7 @@ describe API::Members do
end
let!(:group) do
- create(:group, :public, :access_requestable) do |group|
+ create(:group, :public) do |group|
group.add_developer(developer)
group.add_owner(maintainer)
group.request_access(access_requester)
@@ -87,6 +87,15 @@ describe API::Members do
expect(json_response.first['username']).to eq(maintainer.username)
end
+ it 'finds members with the given user_ids' do
+ get api(members_url, developer), params: { user_ids: [maintainer.id, developer.id, stranger.id] }
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response).to be_an Array
+ expect(json_response.map { |u| u['id'] }).to contain_exactly(maintainer.id, developer.id)
+ end
+
it 'finds all members with no query specified' do
get api(members_url, developer), params: { query: '' }
@@ -155,10 +164,10 @@ describe API::Members do
end
end
- shared_examples 'GET /:source_type/:id/members/:user_id' do |source_type|
- context "with :source_type == #{source_type.pluralize}" do
+ shared_examples 'GET /:source_type/:id/members/(all/):user_id' do |source_type, all|
+ context "with :source_type == #{source_type.pluralize} and all == #{all}" do
it_behaves_like 'a 404 response when source is private' do
- let(:route) { get api("/#{source_type.pluralize}/#{source.id}/members/#{developer.id}", stranger) }
+ let(:route) { get api("/#{source_type.pluralize}/#{source.id}/members/#{all ? 'all/' : ''}#{developer.id}", stranger) }
end
context 'when authenticated as a non-member' do
@@ -166,7 +175,7 @@ describe API::Members do
context "as a #{type}" do
it 'returns 200' do
user = public_send(type)
- get api("/#{source_type.pluralize}/#{source.id}/members/#{developer.id}", user)
+ get api("/#{source_type.pluralize}/#{source.id}/members/#{all ? 'all/' : ''}#{developer.id}", user)
expect(response).to have_gitlab_http_status(200)
# User attributes
@@ -434,12 +443,14 @@ describe API::Members do
end
end
- it_behaves_like 'GET /:source_type/:id/members/:user_id', 'project' do
- let(:source) { project }
- end
+ [false, true].each do |all|
+ it_behaves_like 'GET /:source_type/:id/members/(all/):user_id', 'project', all do
+ let(:source) { all ? create(:project, :public, group: group) : project }
+ end
- it_behaves_like 'GET /:source_type/:id/members/:user_id', 'group' do
- let(:source) { group }
+ it_behaves_like 'GET /:source_type/:id/members/(all/):user_id', 'group', all do
+ let(:source) { all ? create(:group, parent: group) : group }
+ end
end
it_behaves_like 'POST /:source_type/:id/members', 'project' do
diff --git a/spec/requests/api/pages/internal_access_spec.rb b/spec/requests/api/pages/internal_access_spec.rb
index c41eabe0a48..28abe1a8456 100644
--- a/spec/requests/api/pages/internal_access_spec.rb
+++ b/spec/requests/api/pages/internal_access_spec.rb
@@ -27,6 +27,7 @@ describe "Internal Project Pages Access" do
describe "Project should be internal" do
describe '#internal?' do
subject { project.internal? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/requests/api/pages/private_access_spec.rb b/spec/requests/api/pages/private_access_spec.rb
index c647537038e..6af441caf74 100644
--- a/spec/requests/api/pages/private_access_spec.rb
+++ b/spec/requests/api/pages/private_access_spec.rb
@@ -27,6 +27,7 @@ describe "Private Project Pages Access" do
describe "Project should be private" do
describe '#private?' do
subject { project.private? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/requests/api/pages/public_access_spec.rb b/spec/requests/api/pages/public_access_spec.rb
index 16cc5697f30..d99224eca5b 100644
--- a/spec/requests/api/pages/public_access_spec.rb
+++ b/spec/requests/api/pages/public_access_spec.rb
@@ -27,6 +27,7 @@ describe "Public Project Pages Access" do
describe "Project should be public" do
describe '#public?' do
subject { project.public? }
+
it { is_expected.to be_truthy }
end
end
diff --git a/spec/requests/api/pipelines_spec.rb b/spec/requests/api/pipelines_spec.rb
index 3a3f0e970a4..3ac63dc381b 100644
--- a/spec/requests/api/pipelines_spec.rb
+++ b/spec/requests/api/pipelines_spec.rb
@@ -29,7 +29,7 @@ describe API::Pipelines do
expect(json_response.first['sha']).to match /\A\h{40}\z/
expect(json_response.first['id']).to eq pipeline.id
expect(json_response.first['web_url']).to be_present
- expect(json_response.first.keys).to contain_exactly(*%w[id sha ref status web_url])
+ expect(json_response.first.keys).to contain_exactly(*%w[id sha ref status web_url created_at updated_at])
end
context 'when parameter is passed' do
diff --git a/spec/requests/api/project_container_repositories_spec.rb b/spec/requests/api/project_container_repositories_spec.rb
index f1dc4e6f0b2..3ac7ff7656b 100644
--- a/spec/requests/api/project_container_repositories_spec.rb
+++ b/spec/requests/api/project_container_repositories_spec.rb
@@ -150,7 +150,7 @@ describe API::ProjectContainerRepositories do
expect(response).to have_gitlab_http_status(:accepted)
end
- context 'called multiple times in one hour' do
+ context 'called multiple times in one hour', :clean_gitlab_redis_shared_state do
it 'returns 400 with an error message' do
stub_exclusive_lease_taken(lease_key, timeout: 1.hour)
subject
@@ -202,6 +202,8 @@ describe API::ProjectContainerRepositories do
end
describe 'DELETE /projects/:id/registry/repositories/:repository_id/tags/:tag_name' do
+ let(:service) { double('service') }
+
subject { delete api("/projects/#{project.id}/registry/repositories/#{root_repository.id}/tags/rootA", api_user) }
it_behaves_like 'rejected container repository access', :reporter, :forbidden
@@ -210,18 +212,34 @@ describe API::ProjectContainerRepositories do
context 'for developer' do
let(:api_user) { developer }
- before do
- stub_container_registry_tags(repository: root_repository.path, tags: %w(rootA), with_manifest: true)
+ context 'when there are multiple tags' do
+ before do
+ stub_container_registry_tags(repository: root_repository.path, tags: %w(rootA rootB), with_manifest: true)
+ end
+
+ it 'properly removes tag' do
+ expect(service).to receive(:execute).with(root_repository) { { status: :success } }
+ expect(Projects::ContainerRepository::DeleteTagsService).to receive(:new).with(root_repository.project, api_user, tags: %w[rootA]) { service }
+
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ end
end
- it 'properly removes tag' do
- expect_any_instance_of(ContainerRegistry::Client)
- .to receive(:delete_repository_tag).with(root_repository.path,
- 'sha256:4c8e63ca4cb663ce6c688cb06f1c372b088dac5b6d7ad7d49cd620d85cf72a15')
+ context 'when there\'s only one tag' do
+ before do
+ stub_container_registry_tags(repository: root_repository.path, tags: %w(rootA), with_manifest: true)
+ end
- subject
+ it 'properly removes tag' do
+ expect(service).to receive(:execute).with(root_repository) { { status: :success } }
+ expect(Projects::ContainerRepository::DeleteTagsService).to receive(:new).with(root_repository.project, api_user, tags: %w[rootA]) { service }
- expect(response).to have_gitlab_http_status(:ok)
+ subject
+
+ expect(response).to have_gitlab_http_status(:ok)
+ end
end
end
end
diff --git a/spec/requests/api/project_export_spec.rb b/spec/requests/api/project_export_spec.rb
index 1d2f81a397d..7de8935097a 100644
--- a/spec/requests/api/project_export_spec.rb
+++ b/spec/requests/api/project_export_spec.rb
@@ -30,7 +30,7 @@ describe API::ProjectExport do
FileUtils.mkdir_p File.join(project_started.export_path, 'securerandom-hex')
# simulate in after export action
- FileUtils.touch Gitlab::ImportExport::AfterExportStrategies::BaseAfterExportStrategy.lock_file_path(project_after_export)
+ FileUtils.touch File.join(project_after_export.import_export_shared.lock_files_path, SecureRandom.hex)
end
after do
diff --git a/spec/requests/api/project_import_spec.rb b/spec/requests/api/project_import_spec.rb
index 594b42bb6c0..d2b1fb063b8 100644
--- a/spec/requests/api/project_import_spec.rb
+++ b/spec/requests/api/project_import_spec.rb
@@ -33,6 +33,53 @@ describe API::ProjectImport do
expect(response).to have_gitlab_http_status(201)
end
+ context 'when a name is explicitly set' do
+ let(:expected_name) { 'test project import' }
+
+ it 'schedules an import using a namespace and a different name' do
+ stub_import(namespace)
+
+ post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.id, name: expected_name }
+
+ expect(response).to have_gitlab_http_status(201)
+ end
+
+ it 'schedules an import using the namespace path and a different name' do
+ stub_import(namespace)
+
+ post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: expected_name }
+
+ expect(response).to have_gitlab_http_status(201)
+ end
+
+ it 'sets name correctly' do
+ stub_import(namespace)
+
+ post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: expected_name }
+
+ project = Project.find(json_response['id'])
+ expect(project.name).to eq(expected_name)
+ end
+
+ it 'sets name correctly with an overwrite' do
+ stub_import(namespace)
+
+ post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: 'new project name', overwrite: true }
+
+ project = Project.find(json_response['id'])
+ expect(project.name).to eq('new project name')
+ end
+
+ it 'schedules an import using the path and name explicitly set to nil' do
+ stub_import(namespace)
+
+ post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: nil }
+
+ project = Project.find(json_response['id'])
+ expect(project.name).to eq('test-import')
+ end
+ end
+
it 'schedules an import at the user namespace level' do
stub_import(user.namespace)
diff --git a/spec/requests/api/project_snippets_spec.rb b/spec/requests/api/project_snippets_spec.rb
index 2e6e13aa927..ef0cabad4b0 100644
--- a/spec/requests/api/project_snippets_spec.rb
+++ b/spec/requests/api/project_snippets_spec.rb
@@ -198,7 +198,7 @@ describe API::ProjectSnippets do
it 'creates a spam log' do
expect { create_snippet(project, visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Test Title', user_id: user.id, noteable_type: 'ProjectSnippet')
end
end
end
@@ -289,7 +289,7 @@ describe API::ProjectSnippets do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: admin.id, noteable_type: 'ProjectSnippet')
end
end
@@ -306,7 +306,7 @@ describe API::ProjectSnippets do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo', visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: admin.id, noteable_type: 'ProjectSnippet')
end
end
end
diff --git a/spec/requests/api/releases_spec.rb b/spec/requests/api/releases_spec.rb
index 206e898381d..99d0ceee76b 100644
--- a/spec/requests/api/releases_spec.rb
+++ b/spec/requests/api/releases_spec.rb
@@ -54,6 +54,31 @@ describe API::Releases do
expect(response).to match_response_schema('public_api/v4/releases')
end
+
+ it 'returns rendered helper paths' do
+ get api("/projects/#{project.id}/releases", maintainer)
+
+ expect(json_response.first['commit_path']).to eq("/#{release_2.project.full_path}/commit/#{release_2.commit.id}")
+ expect(json_response.first['tag_path']).to eq("/#{release_2.project.full_path}/-/tags/#{release_2.tag}")
+ expect(json_response.second['commit_path']).to eq("/#{release_1.project.full_path}/commit/#{release_1.commit.id}")
+ expect(json_response.second['tag_path']).to eq("/#{release_1.project.full_path}/-/tags/#{release_1.tag}")
+ end
+
+ it 'returns the merge requests and issues links, with correct query' do
+ get api("/projects/#{project.id}/releases", maintainer)
+
+ links = json_response.first['_links']
+ release = json_response.first['tag_name']
+ expected_query = "release_tag=#{release}&scope=all&state=opened"
+ path_base = "/#{project.namespace.path}/#{project.path}"
+ mr_uri = URI.parse(links['merge_requests_url'])
+ issue_uri = URI.parse(links['issues_url'])
+
+ expect(mr_uri.path).to eq("#{path_base}/merge_requests")
+ expect(issue_uri.path).to eq("#{path_base}/issues")
+ expect(mr_uri.query).to eq(expected_query)
+ expect(issue_uri.query).to eq(expected_query)
+ end
end
it 'returns an upcoming_release status for a future release' do
@@ -103,11 +128,13 @@ describe API::Releases do
expect(response).to have_gitlab_http_status(:ok)
end
- it "does not expose tag, commit and source code" do
+ it "does not expose tag, commit, source code or helper paths" do
get api("/projects/#{project.id}/releases", guest)
expect(response).to match_response_schema('public_api/v4/release/releases_for_guest')
expect(json_response[0]['assets']['count']).to eq(release.links.count)
+ expect(json_response[0]['commit_path']).to be_nil
+ expect(json_response[0]['tag_path']).to be_nil
end
context 'when project is public' do
@@ -119,11 +146,13 @@ describe API::Releases do
expect(response).to have_gitlab_http_status(:ok)
end
- it "exposes tag, commit and source code" do
+ it "exposes tag, commit, source code and helper paths" do
get api("/projects/#{project.id}/releases", guest)
expect(response).to match_response_schema('public_api/v4/releases')
- expect(json_response[0]['assets']['count']).to eq(release.links.count + release.sources.count)
+ expect(json_response.first['assets']['count']).to eq(release.links.count + release.sources.count)
+ expect(json_response.first['commit_path']).to eq("/#{release.project.full_path}/commit/#{release.commit.id}")
+ expect(json_response.first['tag_path']).to eq("/#{release.project.full_path}/-/tags/#{release.tag}")
end
end
end
@@ -172,6 +201,8 @@ describe API::Releases do
expect(json_response['author']['name']).to eq(maintainer.name)
expect(json_response['commit']['id']).to eq(commit.id)
expect(json_response['assets']['count']).to eq(4)
+ expect(json_response['commit_path']).to eq("/#{release.project.full_path}/commit/#{release.commit.id}")
+ expect(json_response['tag_path']).to eq("/#{release.project.full_path}/-/tags/#{release.tag}")
end
it 'matches response schema' do
diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb
index d9ef5edb848..70a95663aea 100644
--- a/spec/requests/api/runner_spec.rb
+++ b/spec/requests/api/runner_spec.rb
@@ -3,6 +3,7 @@ require 'spec_helper'
describe API::Runner, :clean_gitlab_redis_shared_state do
include StubGitlabCalls
include RedisHelpers
+ include WorkhorseHelpers
let(:registration_token) { 'abcdefg123456' }
@@ -308,7 +309,9 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end
describe '/api/v4/jobs' do
- let(:project) { create(:project, shared_runners_enabled: false) }
+ let(:root_namespace) { create(:namespace) }
+ let(:namespace) { create(:namespace, parent: root_namespace) }
+ let(:project) { create(:project, namespace: namespace, shared_runners_enabled: false) }
let(:pipeline) { create(:ci_pipeline_without_jobs, project: project, ref: 'master') }
let(:runner) { create(:ci_runner, :project, projects: [project]) }
let(:job) do
@@ -1393,7 +1396,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
expect(response).to have_gitlab_http_status(200)
expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE)
- expect(json_response['TempPath']).to eq(JobArtifactUploader.workhorse_local_upload_path)
+ expect(json_response).not_to have_key('TempPath')
expect(json_response['RemoteObject']).to have_key('ID')
expect(json_response['RemoteObject']).to have_key('GetURL')
expect(json_response['RemoteObject']).to have_key('StoreURL')
@@ -1412,12 +1415,54 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end
end
- it 'fails to post too large artifact' do
- stub_application_setting(max_artifacts_size: 0)
+ context 'when artifact is too large' do
+ let(:sample_max_size) { 100 }
- authorize_artifacts_with_token_in_params(filesize: 100)
+ shared_examples_for 'rejecting too large artifacts' do
+ it 'fails to post' do
+ authorize_artifacts_with_token_in_params(filesize: sample_max_size.megabytes.to_i)
- expect(response).to have_gitlab_http_status(413)
+ expect(response).to have_gitlab_http_status(413)
+ end
+ end
+
+ context 'based on application setting' do
+ before do
+ stub_application_setting(max_artifacts_size: sample_max_size)
+ end
+
+ it_behaves_like 'rejecting too large artifacts'
+ end
+
+ context 'based on root namespace setting' do
+ before do
+ stub_application_setting(max_artifacts_size: 200)
+ root_namespace.update!(max_artifacts_size: sample_max_size)
+ end
+
+ it_behaves_like 'rejecting too large artifacts'
+ end
+
+ context 'based on child namespace setting' do
+ before do
+ stub_application_setting(max_artifacts_size: 200)
+ root_namespace.update!(max_artifacts_size: 200)
+ namespace.update!(max_artifacts_size: sample_max_size)
+ end
+
+ it_behaves_like 'rejecting too large artifacts'
+ end
+
+ context 'based on project setting' do
+ before do
+ stub_application_setting(max_artifacts_size: 200)
+ root_namespace.update!(max_artifacts_size: 200)
+ namespace.update!(max_artifacts_size: 200)
+ project.update!(max_artifacts_size: sample_max_size)
+ end
+
+ it_behaves_like 'rejecting too large artifacts'
+ end
end
end
@@ -1518,15 +1563,16 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
let!(:fog_connection) do
stub_artifacts_object_storage(direct_upload: true)
end
-
- before do
+ let(:object) do
fog_connection.directories.new(key: 'artifacts').files.create(
key: 'tmp/uploads/12312300',
body: 'content'
)
+ end
+ let(:file_upload) { fog_to_uploaded_file(object) }
- upload_artifacts(file_upload, headers_with_token,
- { 'file.remote_id' => remote_id })
+ before do
+ upload_artifacts(file_upload, headers_with_token, 'file.remote_id' => remote_id)
end
context 'when valid remote_id is used' do
@@ -1760,12 +1806,13 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end
def upload_artifacts(file, headers = {}, params = {})
- params = params.merge({
- 'file.path' => file.path,
- 'file.name' => file.original_filename
- })
-
- post api("/jobs/#{job.id}/artifacts"), params: params, headers: headers
+ workhorse_finalize(
+ api("/jobs/#{job.id}/artifacts"),
+ method: :post,
+ file_key: :file,
+ params: params.merge(file: file),
+ headers: headers
+ )
end
end
diff --git a/spec/requests/api/settings_spec.rb b/spec/requests/api/settings_spec.rb
index d98b9be726a..f3bfb258029 100644
--- a/spec/requests/api/settings_spec.rb
+++ b/spec/requests/api/settings_spec.rb
@@ -72,7 +72,9 @@ describe API::Settings, 'Settings' do
default_branch_protection: ::Gitlab::Access::PROTECTION_DEV_CAN_MERGE,
local_markdown_version: 3,
allow_local_requests_from_web_hooks_and_services: true,
- allow_local_requests_from_system_hooks: false
+ allow_local_requests_from_system_hooks: false,
+ push_event_hooks_limit: 2,
+ push_event_activities_limit: 2
}
expect(response).to have_gitlab_http_status(200)
@@ -102,6 +104,8 @@ describe API::Settings, 'Settings' do
expect(json_response['local_markdown_version']).to eq(3)
expect(json_response['allow_local_requests_from_web_hooks_and_services']).to eq(true)
expect(json_response['allow_local_requests_from_system_hooks']).to eq(false)
+ expect(json_response['push_event_hooks_limit']).to eq(2)
+ expect(json_response['push_event_activities_limit']).to eq(2)
end
end
diff --git a/spec/requests/api/snippets_spec.rb b/spec/requests/api/snippets_spec.rb
index 515912cb305..e7eaaea2418 100644
--- a/spec/requests/api/snippets_spec.rb
+++ b/spec/requests/api/snippets_spec.rb
@@ -254,7 +254,7 @@ describe API::Snippets do
it 'creates a spam log' do
expect { create_snippet(visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Test Title', user_id: user.id, noteable_type: 'PersonalSnippet')
end
end
end
@@ -344,8 +344,7 @@ describe API::Snippets do
end
it 'creates a spam log' do
- expect { update_snippet(title: 'Foo') }
- .to change { SpamLog.count }.by(1)
+ expect { update_snippet(title: 'Foo') }.to log_spam(title: 'Foo', user_id: user.id, noteable_type: 'PersonalSnippet')
end
end
@@ -359,7 +358,7 @@ describe API::Snippets do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo', visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: user.id, noteable_type: 'PersonalSnippet')
end
end
end
diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb
index af2bee4563a..ee4e783e9ac 100644
--- a/spec/requests/api/users_spec.rb
+++ b/spec/requests/api/users_spec.rb
@@ -634,10 +634,28 @@ describe API::Users do
end
describe "GET /users/sign_up" do
- it "redirects to sign in page" do
- get "/users/sign_up"
- expect(response).to have_gitlab_http_status(302)
- expect(response).to redirect_to(new_user_session_path)
+ context 'when experimental signup_flow is active' do
+ before do
+ stub_experiment(signup_flow: true)
+ end
+
+ it "shows sign up page" do
+ get "/users/sign_up"
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to render_template(:new)
+ end
+ end
+
+ context 'when experimental signup_flow is not active' do
+ before do
+ stub_experiment(signup_flow: false)
+ end
+
+ it "redirects to sign in page" do
+ get "/users/sign_up"
+ expect(response).to have_gitlab_http_status(302)
+ expect(response).to redirect_to(new_user_session_path(anchor: 'register-pane'))
+ end
end
end
@@ -1809,6 +1827,182 @@ describe API::Users do
end
end
+ context 'activate and deactivate' do
+ shared_examples '404' do
+ it 'returns 404' do
+ expect(response).to have_gitlab_http_status(404)
+ expect(json_response['message']).to eq('404 User Not Found')
+ end
+ end
+
+ describe 'POST /users/:id/activate' do
+ context 'performed by a non-admin user' do
+ it 'is not authorized to perform the action' do
+ post api("/users/#{user.id}/activate", user)
+
+ expect(response).to have_gitlab_http_status(403)
+ end
+ end
+
+ context 'performed by an admin user' do
+ context 'for a deactivated user' do
+ before do
+ user.deactivate
+
+ post api("/users/#{user.id}/activate", admin)
+ end
+
+ it 'activates a deactivated user' do
+ expect(response).to have_gitlab_http_status(201)
+ expect(user.reload.state).to eq('active')
+ end
+ end
+
+ context 'for an active user' do
+ before do
+ user.activate
+
+ post api("/users/#{user.id}/activate", admin)
+ end
+
+ it 'returns 201' do
+ expect(response).to have_gitlab_http_status(201)
+ expect(user.reload.state).to eq('active')
+ end
+ end
+
+ context 'for a blocked user' do
+ before do
+ user.block
+
+ post api("/users/#{user.id}/activate", admin)
+ end
+
+ it 'returns 403' do
+ expect(response).to have_gitlab_http_status(403)
+ expect(json_response['message']).to eq('403 Forbidden - A blocked user must be unblocked to be activated')
+ expect(user.reload.state).to eq('blocked')
+ end
+ end
+
+ context 'for a ldap blocked user' do
+ before do
+ user.ldap_block
+
+ post api("/users/#{user.id}/activate", admin)
+ end
+
+ it 'returns 403' do
+ expect(response).to have_gitlab_http_status(403)
+ expect(json_response['message']).to eq('403 Forbidden - A blocked user must be unblocked to be activated')
+ expect(user.reload.state).to eq('ldap_blocked')
+ end
+ end
+
+ context 'for a user that does not exist' do
+ before do
+ post api("/users/0/activate", admin)
+ end
+
+ it_behaves_like '404'
+ end
+ end
+ end
+
+ describe 'POST /users/:id/deactivate' do
+ context 'performed by a non-admin user' do
+ it 'is not authorized to perform the action' do
+ post api("/users/#{user.id}/deactivate", user)
+
+ expect(response).to have_gitlab_http_status(403)
+ end
+ end
+
+ context 'performed by an admin user' do
+ context 'for an active user' do
+ let(:activity) { {} }
+ let(:user) { create(:user, username: 'user.with.dot', **activity) }
+
+ context 'with no recent activity' do
+ let(:activity) { { last_activity_on: ::User::MINIMUM_INACTIVE_DAYS.next.days.ago } }
+
+ before do
+ post api("/users/#{user.id}/deactivate", admin)
+ end
+
+ it 'deactivates an active user' do
+ expect(response).to have_gitlab_http_status(201)
+ expect(user.reload.state).to eq('deactivated')
+ end
+ end
+
+ context 'with recent activity' do
+ let(:activity) { { last_activity_on: ::User::MINIMUM_INACTIVE_DAYS.pred.days.ago } }
+
+ before do
+ post api("/users/#{user.id}/deactivate", admin)
+ end
+
+ it 'does not deactivate an active user' do
+ expect(response).to have_gitlab_http_status(403)
+ expect(json_response['message']).to eq("403 Forbidden - The user you are trying to deactivate has been active in the past #{::User::MINIMUM_INACTIVE_DAYS} days and cannot be deactivated")
+ expect(user.reload.state).to eq('active')
+ end
+ end
+ end
+
+ context 'for a deactivated user' do
+ before do
+ user.deactivate
+
+ post api("/users/#{user.id}/deactivate", admin)
+ end
+
+ it 'returns 201' do
+ expect(response).to have_gitlab_http_status(201)
+ expect(user.reload.state).to eq('deactivated')
+ end
+ end
+
+ context 'for a blocked user' do
+ before do
+ user.block
+
+ post api("/users/#{user.id}/deactivate", admin)
+ end
+
+ it 'returns 403' do
+ expect(response).to have_gitlab_http_status(403)
+ expect(json_response['message']).to eq('403 Forbidden - A blocked user cannot be deactivated by the API')
+ expect(user.reload.state).to eq('blocked')
+ end
+ end
+
+ context 'for a ldap blocked user' do
+ before do
+ user.ldap_block
+
+ post api("/users/#{user.id}/deactivate", admin)
+ end
+
+ it 'returns 403' do
+ expect(response).to have_gitlab_http_status(403)
+ expect(json_response['message']).to eq('403 Forbidden - A blocked user cannot be deactivated by the API')
+ expect(user.reload.state).to eq('ldap_blocked')
+ end
+ end
+
+ context 'for a user that does not exist' do
+ before do
+ post api("/users/0/deactivate", admin)
+ end
+
+ it_behaves_like '404'
+ end
+ end
+ end
+ end
+
describe 'POST /users/:id/block' do
before do
admin
@@ -1841,6 +2035,7 @@ describe API::Users do
describe 'POST /users/:id/unblock' do
let(:blocked_user) { create(:user, state: 'blocked') }
+ let(:deactivated_user) { create(:user, state: 'deactivated') }
before do
admin
@@ -1864,7 +2059,13 @@ describe API::Users do
expect(ldap_blocked_user.reload.state).to eq('ldap_blocked')
end
- it 'does not be available for non admin users' do
+ it 'does not unblock deactivated users' do
+ post api("/users/#{deactivated_user.id}/unblock", admin)
+ expect(response).to have_gitlab_http_status(403)
+ expect(deactivated_user.reload.state).to eq('deactivated')
+ end
+
+ it 'is not available for non admin users' do
post api("/users/#{user.id}/unblock", user)
expect(response).to have_gitlab_http_status(403)
expect(user.reload.state).to eq('active')
diff --git a/spec/requests/boards/lists_controller_spec.rb b/spec/requests/boards/lists_controller_spec.rb
new file mode 100644
index 00000000000..7451ad93efd
--- /dev/null
+++ b/spec/requests/boards/lists_controller_spec.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Boards::ListsController do
+ describe '#index' do
+ let(:board) { create(:board) }
+ let(:user) { board.project.owner }
+
+ it 'does not have N+1 queries' do
+ login_as(user)
+
+ # First request has more queries because we create the default `backlog` list
+ get board_lists_path(board)
+
+ create(:list, board: board)
+
+ control_count = ActiveRecord::QueryRecorder.new { get board_lists_path(board) }.count
+
+ create_list(:list, 5, board: board)
+
+ expect { get board_lists_path(board) }.not_to exceed_query_limit(control_count)
+ end
+ end
+end
diff --git a/spec/requests/lfs_http_spec.rb b/spec/requests/lfs_http_spec.rb
index dc25e4d808e..62b9ee1d361 100644
--- a/spec/requests/lfs_http_spec.rb
+++ b/spec/requests/lfs_http_spec.rb
@@ -1,10 +1,14 @@
+# frozen_string_literal: true
require 'spec_helper'
describe 'Git LFS API and storage' do
- include WorkhorseHelpers
+ include LfsHttpHelpers
include ProjectForksHelper
+ include WorkhorseHelpers
- let(:user) { create(:user) }
+ set(:project) { create(:project, :repository) }
+ set(:other_project) { create(:project, :repository) }
+ set(:user) { create(:user) }
let!(:lfs_object) { create(:lfs_object, :with_file) }
let(:headers) do
@@ -19,201 +23,163 @@ describe 'Git LFS API and storage' do
let(:sample_oid) { lfs_object.oid }
let(:sample_size) { lfs_object.size }
+ let(:sample_object) { { 'oid' => sample_oid, 'size' => sample_size } }
+ let(:non_existing_object_oid) { '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897' }
+ let(:non_existing_object_size) { 1575078 }
+ let(:non_existing_object) { { 'oid' => non_existing_object_oid, 'size' => non_existing_object_size } }
+ let(:multiple_objects) { [sample_object, non_existing_object] }
- describe 'when lfs is disabled' do
- let(:project) { create(:project) }
- let(:body) do
- {
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078 },
- { 'oid' => sample_oid,
- 'size' => sample_size }
- ],
- 'operation' => 'upload'
- }
- end
+ let(:lfs_enabled) { true }
+
+ before do
+ stub_lfs_setting(enabled: lfs_enabled)
+ end
+
+ describe 'when LFS is disabled' do
+ let(:lfs_enabled) { false }
+ let(:body) { upload_body(multiple_objects) }
let(:authorization) { authorize_user }
before do
- allow(Gitlab.config.lfs).to receive(:enabled).and_return(false)
- post_lfs_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ post_lfs_json batch_url(project), body, headers
end
- it 'responds with 501' do
- expect(response).to have_gitlab_http_status(501)
- expect(json_response).to include('message' => 'Git LFS is not enabled on this GitLab server, contact your admin.')
- end
+ it_behaves_like 'LFS http 501 response'
end
context 'project specific LFS settings' do
- let(:project) { create(:project) }
- let(:body) do
- {
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078 },
- { 'oid' => sample_oid,
- 'size' => sample_size }
- ],
- 'operation' => 'upload'
- }
- end
+ let(:body) { upload_body(sample_object) }
let(:authorization) { authorize_user }
+ before do
+ project.add_maintainer(user)
+ project.update_attribute(:lfs_enabled, project_lfs_enabled)
+
+ subject
+ end
+
context 'with LFS disabled globally' do
- before do
- project.add_maintainer(user)
- allow(Gitlab.config.lfs).to receive(:enabled).and_return(false)
- end
+ let(:lfs_enabled) { false }
describe 'LFS disabled in project' do
- before do
- project.update_attribute(:lfs_enabled, false)
- end
+ let(:project_lfs_enabled) { false }
- it 'responds with a 501 message on upload' do
- post_lfs_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ context 'when uploading' do
+ subject { post_lfs_json(batch_url(project), body, headers) }
- expect(response).to have_gitlab_http_status(501)
+ it_behaves_like 'LFS http 501 response'
end
- it 'responds with a 501 message on download' do
- get "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", params: {}, headers: headers
+ context 'when downloading' do
+ subject { get(objects_url(project, sample_oid), params: {}, headers: headers) }
- expect(response).to have_gitlab_http_status(501)
+ it_behaves_like 'LFS http 501 response'
end
end
describe 'LFS enabled in project' do
- before do
- project.update_attribute(:lfs_enabled, true)
- end
+ let(:project_lfs_enabled) { true }
- it 'responds with a 501 message on upload' do
- post_lfs_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ context 'when uploading' do
+ subject { post_lfs_json(batch_url(project), body, headers) }
- expect(response).to have_gitlab_http_status(501)
+ it_behaves_like 'LFS http 501 response'
end
- it 'responds with a 501 message on download' do
- get "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", params: {}, headers: headers
+ context 'when downloading' do
+ subject { get(objects_url(project, sample_oid), params: {}, headers: headers) }
- expect(response).to have_gitlab_http_status(501)
+ it_behaves_like 'LFS http 501 response'
end
end
end
context 'with LFS enabled globally' do
- before do
- project.add_maintainer(user)
- enable_lfs
- end
-
describe 'LFS disabled in project' do
- before do
- project.update_attribute(:lfs_enabled, false)
- end
+ let(:project_lfs_enabled) { false }
- it 'responds with a 403 message on upload' do
- post_lfs_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ context 'when uploading' do
+ subject { post_lfs_json(batch_url(project), body, headers) }
- expect(response).to have_gitlab_http_status(403)
- expect(json_response).to include('message' => 'Access forbidden. Check your access level.')
+ it_behaves_like 'LFS http 403 response'
end
- it 'responds with a 403 message on download' do
- get "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", params: {}, headers: headers
+ context 'when downloading' do
+ subject { get(objects_url(project, sample_oid), params: {}, headers: headers) }
- expect(response).to have_gitlab_http_status(403)
- expect(json_response).to include('message' => 'Access forbidden. Check your access level.')
+ it_behaves_like 'LFS http 403 response'
end
end
describe 'LFS enabled in project' do
- before do
- project.update_attribute(:lfs_enabled, true)
- end
+ let(:project_lfs_enabled) { true }
- it 'responds with a 200 message on upload' do
- post_lfs_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ context 'when uploading' do
+ subject { post_lfs_json(batch_url(project), body, headers) }
- expect(response).to have_gitlab_http_status(200)
- expect(json_response['objects'].first['size']).to eq(1575078)
+ it_behaves_like 'LFS http 200 response'
end
- it 'responds with a 200 message on download' do
- get "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", params: {}, headers: headers
+ context 'when downloading' do
+ subject { get(objects_url(project, sample_oid), params: {}, headers: headers) }
- expect(response).to have_gitlab_http_status(200)
+ it_behaves_like 'LFS http 200 response'
end
end
end
end
describe 'deprecated API' do
- let(:project) { create(:project) }
-
- before do
- enable_lfs
- end
+ let(:authorization) { authorize_user }
- shared_examples 'a deprecated' do
- it 'responds with 501' do
- expect(response).to have_gitlab_http_status(501)
+ shared_examples 'deprecated request' do
+ before do
+ subject
end
- it 'returns deprecated message' do
- expect(json_response).to include('message' => 'Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.')
+ it_behaves_like 'LFS http expected response code and message' do
+ let(:response_code) { 501 }
+ let(:message) { 'Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.' }
end
end
- context 'when fetching lfs object using deprecated API' do
- let(:authorization) { authorize_user }
+ context 'when fetching LFS object using deprecated API' do
+ subject { get(deprecated_objects_url(project, sample_oid), params: {}, headers: headers) }
- before do
- get "#{project.http_url_to_repo}/info/lfs/objects/#{sample_oid}", params: {}, headers: headers
- end
-
- it_behaves_like 'a deprecated'
+ it_behaves_like 'deprecated request'
end
- context 'when handling lfs request using deprecated API' do
- let(:authorization) { authorize_user }
- before do
- post_lfs_json "#{project.http_url_to_repo}/info/lfs/objects", nil, headers
- end
+ context 'when handling LFS request using deprecated API' do
+ subject { post_lfs_json(deprecated_objects_url(project), nil, headers) }
+
+ it_behaves_like 'deprecated request'
+ end
- it_behaves_like 'a deprecated'
+ def deprecated_objects_url(project, oid = nil)
+ File.join(["#{project.http_url_to_repo}/info/lfs/objects/", oid].compact)
end
end
- describe 'when fetching lfs object' do
- let(:project) { create(:project) }
+ describe 'when fetching LFS object' do
let(:update_permissions) { }
let(:before_get) { }
before do
- enable_lfs
update_permissions
before_get
- get "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", params: {}, headers: headers
+ get objects_url(project, sample_oid), params: {}, headers: headers
end
context 'and request comes from gitlab-workhorse' do
context 'without user being authorized' do
- it 'responds with status 401' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
context 'with required headers' do
shared_examples 'responds with a file' do
let(:sendfile) { 'X-Sendfile' }
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
it 'responds with the file location' do
expect(response.headers['Content-Type']).to eq('application/octet-stream')
@@ -229,9 +195,7 @@ describe 'Git LFS API and storage' do
project.lfs_objects << lfs_object
end
- it 'responds with status 404' do
- expect(response).to have_gitlab_http_status(404)
- end
+ it_behaves_like 'LFS http 404 response'
end
context 'and does have project access' do
@@ -249,9 +213,7 @@ describe 'Git LFS API and storage' do
lfs_object.file.migrate!(LfsObjectUploader::Store::REMOTE)
end
- it 'responds with redirect' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
it 'responds with the workhorse send-url' do
expect(response.headers[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("send-url:")
@@ -288,7 +250,7 @@ describe 'Git LFS API and storage' do
it_behaves_like 'responds with a file'
end
- describe 'when using a user key' do
+ describe 'when using a user key (LFSToken)' do
let(:authorization) { authorize_user_key }
context 'when user allowed' do
@@ -298,6 +260,18 @@ describe 'Git LFS API and storage' do
end
it_behaves_like 'responds with a file'
+
+ context 'when user password is expired' do
+ let(:user) { create(:user, password_expires_at: 1.minute.ago)}
+
+ it_behaves_like 'LFS http 401 response'
+ end
+
+ context 'when user is blocked' do
+ let(:user) { create(:user, :blocked)}
+
+ it_behaves_like 'LFS http 401 response'
+ end
end
context 'when user not allowed' do
@@ -305,9 +279,7 @@ describe 'Git LFS API and storage' do
project.lfs_objects << lfs_object
end
- it 'responds with status 404' do
- expect(response).to have_gitlab_http_status(404)
- end
+ it_behaves_like 'LFS http 404 response'
end
end
@@ -337,7 +309,6 @@ describe 'Git LFS API and storage' do
end
context 'for other project' do
- let(:other_project) { create(:project) }
let(:pipeline) { create(:ci_empty_pipeline, project: other_project) }
let(:update_permissions) do
@@ -361,7 +332,6 @@ describe 'Git LFS API and storage' do
end
context 'regular user' do
- let(:user) { create(:user) }
let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
it_behaves_like 'can download LFS only from own projects' do
@@ -384,166 +354,147 @@ describe 'Git LFS API and storage' do
context 'without required headers' do
let(:authorization) { authorize_user }
- it 'responds with status 404' do
- expect(response).to have_gitlab_http_status(404)
- end
+ it_behaves_like 'LFS http 404 response'
end
end
end
- describe 'when handling lfs batch request' do
+ describe 'when handling LFS batch request' do
let(:update_lfs_permissions) { }
let(:update_user_permissions) { }
before do
- enable_lfs
update_lfs_permissions
update_user_permissions
- post_lfs_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ post_lfs_json batch_url(project), body, headers
end
- describe 'download' do
- let(:project) { create(:project) }
- let(:body) do
- {
- 'operation' => 'download',
- 'objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size }
- ]
- }
+ shared_examples 'process authorization header' do |renew_authorization:|
+ let(:response_authorization) do
+ authorization_in_action(lfs_actions.first)
end
- shared_examples 'an authorized requests' do
- context 'when downloading an lfs object that is assigned to our project' do
- let(:update_lfs_permissions) do
- project.lfs_objects << lfs_object
+ if renew_authorization
+ context 'when the authorization comes from a user' do
+ it 'returns a new valid LFS token authorization' do
+ expect(response_authorization).not_to eq(authorization)
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
+ it 'returns a a valid token' do
+ username, token = ::Base64.decode64(response_authorization.split(' ', 2).last).split(':', 2)
+
+ expect(username).to eq(user.username)
+ expect(Gitlab::LfsToken.new(user).token_valid?(token)).to be_truthy
end
- it 'with href to download' do
- expect(json_response).to eq({
- 'objects' => [
- {
- 'oid' => sample_oid,
- 'size' => sample_size,
- 'actions' => {
- 'download' => {
- 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
- 'header' => { 'Authorization' => authorization }
- }
- }
- }
- ]
- })
+ it 'generates only one new token per each request' do
+ authorizations = lfs_actions.map do |action|
+ authorization_in_action(action)
+ end.compact
+
+ expect(authorizations.uniq.count).to eq 1
end
end
+ else
+ context 'when the authorization comes from a token' do
+ it 'returns the same authorization header' do
+ expect(response_authorization).to eq(authorization)
+ end
+ end
+ end
+
+ def lfs_actions
+ json_response['objects'].map { |a| a['actions'] }.compact
+ end
+
+ def authorization_in_action(action)
+ (action['upload'] || action['download']).dig('header', 'Authorization')
+ end
+ end
- context 'when downloading an lfs object that is assigned to other project' do
- let(:other_project) { create(:project) }
+ describe 'download' do
+ let(:body) { download_body(sample_object) }
+
+ shared_examples 'an authorized request' do |renew_authorization:|
+ context 'when downloading an LFS object that is assigned to our project' do
let(:update_lfs_permissions) do
- other_project.lfs_objects << lfs_object
+ project.lfs_objects << lfs_object
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
it 'with href to download' do
- expect(json_response).to eq({
- 'objects' => [
- {
- 'oid' => sample_oid,
- 'size' => sample_size,
- 'error' => {
- 'code' => 404,
- 'message' => "Object does not exist on the server or you don't have permissions to access it"
- }
- }
- ]
- })
+ expect(json_response['objects'].first).to include(sample_object)
+ expect(json_response['objects'].first['actions']['download']['href']).to eq(objects_url(project, sample_oid))
end
+
+ it_behaves_like 'process authorization header', renew_authorization: renew_authorization
end
- context 'when downloading a lfs object that does not exist' do
- let(:body) do
- {
- 'operation' => 'download',
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078 }
- ]
- }
+ context 'when downloading an LFS object that is assigned to other project' do
+ let(:update_lfs_permissions) do
+ other_project.lfs_objects << lfs_object
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
it 'with an 404 for specific object' do
- expect(json_response).to eq({
- 'objects' => [
- {
- 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078,
- 'error' => {
- 'code' => 404,
- 'message' => "Object does not exist on the server or you don't have permissions to access it"
- }
- }
- ]
- })
+ expect(json_response['objects'].first).to include(sample_object)
+ expect(json_response['objects'].first['error']).to include('code' => 404, 'message' => "Object does not exist on the server or you don't have permissions to access it")
end
end
- context 'when downloading one new and one existing lfs object' do
- let(:body) do
- {
- 'operation' => 'download',
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078 },
- { 'oid' => sample_oid,
- 'size' => sample_size }
- ]
- }
+ context 'when downloading a LFS object that does not exist' do
+ let(:body) { download_body(non_existing_object) }
+
+ it_behaves_like 'LFS http 200 response'
+
+ it 'with an 404 for specific object' do
+ expect(json_response['objects'].first).to include(non_existing_object)
+ expect(json_response['objects'].first['error']).to include('code' => 404, 'message' => "Object does not exist on the server or you don't have permissions to access it")
end
+ end
+ context 'when downloading one new and one existing LFS object' do
+ let(:body) { download_body(multiple_objects) }
let(:update_lfs_permissions) do
project.lfs_objects << lfs_object
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
- it 'responds with upload hypermedia link for the new object' do
- expect(json_response).to eq({
- 'objects' => [
- {
- 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078,
- 'error' => {
- 'code' => 404,
- 'message' => "Object does not exist on the server or you don't have permissions to access it"
- }
- },
- {
- 'oid' => sample_oid,
- 'size' => sample_size,
- 'actions' => {
- 'download' => {
- 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
- 'header' => { 'Authorization' => authorization }
- }
- }
- }
- ]
+ it 'responds with download hypermedia link for the new object' do
+ expect(json_response['objects'].first).to include(sample_object)
+ expect(json_response['objects'].first['actions']['download']).to include('href' => objects_url(project, sample_oid))
+ expect(json_response['objects'].last).to eq({
+ 'oid' => non_existing_object_oid,
+ 'size' => non_existing_object_size,
+ 'error' => {
+ 'code' => 404,
+ 'message' => "Object does not exist on the server or you don't have permissions to access it"
+ }
})
end
+
+ it_behaves_like 'process authorization header', renew_authorization: renew_authorization
+ end
+
+ context 'when downloading two existing LFS objects' do
+ let(:body) { download_body(multiple_objects) }
+ let(:other_object) { create(:lfs_object, :with_file, oid: non_existing_object_oid, size: non_existing_object_size) }
+ let(:update_lfs_permissions) do
+ project.lfs_objects << [lfs_object, other_object]
+ end
+
+ it 'responds with the download hypermedia link for each object' do
+ expect(json_response['objects'].first).to include(sample_object)
+ expect(json_response['objects'].first['actions']['download']).to include('href' => objects_url(project, sample_oid))
+
+ expect(json_response['objects'].last).to include(non_existing_object)
+ expect(json_response['objects'].last['actions']['download']).to include('href' => objects_url(project, non_existing_object_oid))
+ end
+
+ it_behaves_like 'process authorization header', renew_authorization: renew_authorization
end
end
@@ -554,29 +505,41 @@ describe 'Git LFS API and storage' do
project.add_role(user, role)
end
- it_behaves_like 'an authorized requests' do
+ it_behaves_like 'an authorized request', renew_authorization: true do
let(:role) { :reporter }
end
context 'when user does is not member of the project' do
let(:update_user_permissions) { nil }
- it 'responds with 404' do
- expect(response).to have_gitlab_http_status(404)
- end
+ it_behaves_like 'LFS http 404 response'
end
context 'when user does not have download access' do
let(:role) { :guest }
- it 'responds with 403' do
- expect(response).to have_gitlab_http_status(403)
+ it_behaves_like 'LFS http 403 response'
+ end
+
+ context 'when user password is expired' do
+ let(:role) { :reporter}
+ let(:user) { create(:user, password_expires_at: 1.minute.ago)}
+
+ it 'with an 404 for specific object' do
+ expect(json_response['objects'].first).to include(sample_object)
+ expect(json_response['objects'].first['error']).to include('code' => 404, 'message' => "Object does not exist on the server or you don't have permissions to access it")
end
end
+
+ context 'when user is blocked' do
+ let(:role) { :reporter}
+ let(:user) { create(:user, :blocked)}
+
+ it_behaves_like 'LFS http 401 response'
+ end
end
context 'when using Deploy Tokens' do
- let(:project) { create(:project, :repository) }
let(:authorization) { authorize_deploy_token }
let(:update_user_permissions) { nil }
let(:role) { nil }
@@ -587,25 +550,19 @@ describe 'Git LFS API and storage' do
context 'when Deploy Token is valid' do
let(:deploy_token) { create(:deploy_token, projects: [project]) }
- it_behaves_like 'an authorized requests'
+ it_behaves_like 'an authorized request', renew_authorization: false
end
context 'when Deploy Token is not valid' do
let(:deploy_token) { create(:deploy_token, projects: [project], read_repository: false) }
- it 'responds with access denied' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
context 'when Deploy Token is not related to the project' do
- let(:another_project) { create(:project, :repository) }
- let(:deploy_token) { create(:deploy_token, projects: [another_project]) }
+ let(:deploy_token) { create(:deploy_token, projects: [other_project]) }
- it 'responds with access forbidden' do
- # We render 404, to prevent data leakage about existence of the project
- expect(response).to have_gitlab_http_status(404)
- end
+ it_behaves_like 'LFS http 404 response'
end
end
@@ -616,7 +573,7 @@ describe 'Git LFS API and storage' do
project.lfs_objects << lfs_object
end
- shared_examples 'can download LFS only from own projects' do
+ shared_examples 'can download LFS only from own projects' do |renew_authorization:|
context 'for own project' do
let(:pipeline) { create(:ci_empty_pipeline, project: project) }
@@ -624,11 +581,10 @@ describe 'Git LFS API and storage' do
project.add_reporter(user)
end
- it_behaves_like 'an authorized requests'
+ it_behaves_like 'an authorized request', renew_authorization: renew_authorization
end
context 'for other project' do
- let(:other_project) { create(:project) }
let(:pipeline) { create(:ci_empty_pipeline, project: other_project) }
it 'rejects downloading code' do
@@ -641,17 +597,16 @@ describe 'Git LFS API and storage' do
let(:user) { create(:admin) }
let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
- it_behaves_like 'can download LFS only from own projects' do
+ it_behaves_like 'can download LFS only from own projects', renew_authorization: true do
# We render 403, because administrator does have normally access
let(:other_project_status) { 403 }
end
end
context 'regular user' do
- let(:user) { create(:user) }
let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
- it_behaves_like 'can download LFS only from own projects' do
+ it_behaves_like 'can download LFS only from own projects', renew_authorization: true do
# We render 404, to prevent data leakage about existence of the project
let(:other_project_status) { 404 }
end
@@ -660,7 +615,7 @@ describe 'Git LFS API and storage' do
context 'does not have user' do
let(:build) { create(:ci_build, :running, pipeline: pipeline) }
- it_behaves_like 'can download LFS only from own projects' do
+ it_behaves_like 'can download LFS only from own projects', renew_authorization: false do
# We render 404, to prevent data leakage about existence of the project
let(:other_project_status) { 404 }
end
@@ -675,11 +630,9 @@ describe 'Git LFS API and storage' do
project.lfs_objects << lfs_object
end
- it 'responds with status 200 and href to download' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
- it 'responds with status 200 and href to download' do
+ it 'returns href to download' do
expect(json_response).to eq({
'objects' => [
{
@@ -688,7 +641,7 @@ describe 'Git LFS API and storage' do
'authenticated' => true,
'actions' => {
'download' => {
- 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
+ 'href' => objects_url(project, sample_oid),
'header' => {}
}
}
@@ -703,37 +656,29 @@ describe 'Git LFS API and storage' do
project.lfs_objects << lfs_object
end
- it 'responds with authorization required' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
end
end
describe 'upload' do
let(:project) { create(:project, :public) }
- let(:body) do
- {
- 'operation' => 'upload',
- 'objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size }
- ]
- }
- end
+ let(:body) { upload_body(sample_object) }
- shared_examples 'pushes new LFS objects' do
+ shared_examples 'pushes new LFS objects' do |renew_authorization:|
let(:sample_size) { 150.megabytes }
- let(:sample_oid) { '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897' }
+ let(:sample_oid) { non_existing_object_oid }
+
+ it_behaves_like 'LFS http 200 response'
it 'responds with upload hypermedia link' do
- expect(response).to have_gitlab_http_status(200)
expect(json_response['objects']).to be_kind_of(Array)
- expect(json_response['objects'].first['oid']).to eq(sample_oid)
- expect(json_response['objects'].first['size']).to eq(sample_size)
- expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.full_path}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
- expect(json_response['objects'].first['actions']['upload']['header']).to eq({ 'Authorization' => authorization, 'Content-Type' => 'application/octet-stream' })
+ expect(json_response['objects'].first).to include(sample_object)
+ expect(json_response['objects'].first['actions']['upload']['href']).to eq(objects_url(project, sample_oid, sample_size))
+ expect(json_response['objects'].first['actions']['upload']['header']).to include('Content-Type' => 'application/octet-stream')
end
+
+ it_behaves_like 'process authorization header', renew_authorization: renew_authorization
end
describe 'when request is authenticated' do
@@ -744,107 +689,80 @@ describe 'Git LFS API and storage' do
project.add_developer(user)
end
- context 'when pushing an lfs object that already exists' do
- let(:other_project) { create(:project) }
+ context 'when pushing an LFS object that already exists' do
let(:update_lfs_permissions) do
other_project.lfs_objects << lfs_object
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
it 'responds with links the object to the project' do
expect(json_response['objects']).to be_kind_of(Array)
- expect(json_response['objects'].first['oid']).to eq(sample_oid)
- expect(json_response['objects'].first['size']).to eq(sample_size)
+ expect(json_response['objects'].first).to include(sample_object)
expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
expect(lfs_object.projects.pluck(:id)).to include(other_project.id)
- expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
- expect(json_response['objects'].first['actions']['upload']['header']).to eq({ 'Authorization' => authorization, 'Content-Type' => 'application/octet-stream' })
+ expect(json_response['objects'].first['actions']['upload']['href']).to eq(objects_url(project, sample_oid, sample_size))
+ expect(json_response['objects'].first['actions']['upload']['header']).to include('Content-Type' => 'application/octet-stream')
end
- end
- context 'when pushing a lfs object that does not exist' do
- it_behaves_like 'pushes new LFS objects'
+ it_behaves_like 'process authorization header', renew_authorization: true
end
- context 'when pushing one new and one existing lfs object' do
- let(:body) do
- {
- 'operation' => 'upload',
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078 },
- { 'oid' => sample_oid,
- 'size' => sample_size }
- ]
- }
- end
+ context 'when pushing a LFS object that does not exist' do
+ it_behaves_like 'pushes new LFS objects', renew_authorization: true
+ end
+ context 'when pushing one new and one existing LFS object' do
+ let(:body) { upload_body(multiple_objects) }
let(:update_lfs_permissions) do
project.lfs_objects << lfs_object
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
it 'responds with upload hypermedia link for the new object' do
expect(json_response['objects']).to be_kind_of(Array)
- expect(json_response['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
- expect(json_response['objects'].first['size']).to eq(1575078)
- expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
- expect(json_response['objects'].first['actions']['upload']['header']).to eq({ 'Authorization' => authorization, 'Content-Type' => 'application/octet-stream' })
+ expect(json_response['objects'].first).to include(sample_object)
+ expect(json_response['objects'].first).not_to have_key('actions')
- expect(json_response['objects'].last['oid']).to eq(sample_oid)
- expect(json_response['objects'].last['size']).to eq(sample_size)
- expect(json_response['objects'].last).not_to have_key('actions')
+ expect(json_response['objects'].last).to include(non_existing_object)
+ expect(json_response['objects'].last['actions']['upload']['href']).to eq(objects_url(project, non_existing_object_oid, non_existing_object_size))
+ expect(json_response['objects'].last['actions']['upload']['header']).to include('Content-Type' => 'application/octet-stream')
end
+
+ it_behaves_like 'process authorization header', renew_authorization: true
end
end
context 'when user does not have push access' do
let(:authorization) { authorize_user }
- it 'responds with 403' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
context 'when build is authorized' do
let(:authorization) { authorize_ci_project }
context 'build has an user' do
- let(:user) { create(:user) }
+ let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
context 'tries to push to own project' do
- let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
-
- it 'responds with 403 (not 404 because project is public)' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
context 'tries to push to other project' do
- let(:other_project) { create(:project) }
let(:pipeline) { create(:ci_empty_pipeline, project: other_project) }
- let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
# I'm not sure what this tests that is different from the previous test
- it 'responds with 403 (not 404 because project is public)' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
end
context 'does not have user' do
let(:build) { create(:ci_build, :running, pipeline: pipeline) }
- it 'responds with 403 (not 404 because project is public)' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
end
@@ -856,7 +774,7 @@ describe 'Git LFS API and storage' do
project.deploy_keys_projects.create(deploy_key: key, can_push: true)
end
- it_behaves_like 'pushes new LFS objects'
+ it_behaves_like 'pushes new LFS objects', renew_authorization: false
end
end
@@ -866,80 +784,60 @@ describe 'Git LFS API and storage' do
project.add_maintainer(user)
end
- it 'responds with status 401' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
context 'when user does not have push access' do
- it 'responds with status 401' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
end
end
describe 'unsupported' do
- let(:project) { create(:project) }
let(:authorization) { authorize_user }
- let(:body) do
- {
- 'operation' => 'other',
- 'objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size }
- ]
- }
- end
+ let(:body) { request_body('other', sample_object) }
- it 'responds with status 404' do
- expect(response).to have_gitlab_http_status(404)
- end
+ it_behaves_like 'LFS http 404 response'
end
end
- describe 'when handling lfs batch request on a read-only GitLab instance' do
+ describe 'when handling LFS batch request on a read-only GitLab instance' do
let(:authorization) { authorize_user }
- let(:project) { create(:project) }
- let(:path) { "#{project.http_url_to_repo}/info/lfs/objects/batch" }
- let(:body) do
- { 'objects' => [{ 'oid' => sample_oid, 'size' => sample_size }] }
- end
+
+ subject { post_lfs_json(batch_url(project), body, headers) }
before do
allow(Gitlab::Database).to receive(:read_only?) { true }
+
project.add_maintainer(user)
- enable_lfs
+
+ subject
end
- it 'responds with a 200 message on download' do
- post_lfs_json path, body.merge('operation' => 'download'), headers
+ context 'when downloading' do
+ let(:body) { download_body(sample_object) }
- expect(response).to have_gitlab_http_status(200)
+ it_behaves_like 'LFS http 200 response'
end
- it 'responds with a 403 message on upload' do
- post_lfs_json path, body.merge('operation' => 'upload'), headers
+ context 'when uploading' do
+ let(:body) { upload_body(sample_object) }
- expect(response).to have_gitlab_http_status(403)
- expect(json_response).to include('message' => 'You cannot write to this read-only GitLab instance.')
+ it_behaves_like 'LFS http expected response code and message' do
+ let(:response_code) { 403 }
+ let(:message) { 'You cannot write to this read-only GitLab instance.' }
+ end
end
end
- describe 'when pushing a lfs object' do
- before do
- enable_lfs
- end
-
+ describe 'when pushing a LFS object' do
shared_examples 'unauthorized' do
context 'and request is sent by gitlab-workhorse to authorize the request' do
before do
put_authorize
end
- it 'responds with status 401' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
context 'and request is sent by gitlab-workhorse to finalize the upload' do
@@ -947,9 +845,7 @@ describe 'Git LFS API and storage' do
put_finalize
end
- it 'responds with status 401' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
context 'and request is sent with a malformed headers' do
@@ -957,9 +853,7 @@ describe 'Git LFS API and storage' do
put_finalize('/etc/passwd')
end
- it 'does not recognize it as a valid lfs command' do
- expect(response).to have_gitlab_http_status(401)
- end
+ it_behaves_like 'LFS http 401 response'
end
end
@@ -969,9 +863,7 @@ describe 'Git LFS API and storage' do
put_authorize
end
- it 'responds with 403' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
context 'and request is sent by gitlab-workhorse to finalize the upload' do
@@ -979,9 +871,7 @@ describe 'Git LFS API and storage' do
put_finalize
end
- it 'responds with 403' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
context 'and request is sent with a malformed headers' do
@@ -989,15 +879,11 @@ describe 'Git LFS API and storage' do
put_finalize('/etc/passwd')
end
- it 'does not recognize it as a valid lfs command' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
end
describe 'to one project' do
- let(:project) { create(:project) }
-
describe 'when user is authenticated' do
let(:authorization) { authorize_user }
@@ -1018,9 +904,7 @@ describe 'Git LFS API and storage' do
put_authorize
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
it 'uses the gitlab-workhorse content type' do
expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE)
@@ -1029,7 +913,7 @@ describe 'Git LFS API and storage' do
shared_examples 'a local file' do
it_behaves_like 'a valid response' do
- it 'responds with status 200, location of lfs store and object details' do
+ it 'responds with status 200, location of LFS store and object details' do
expect(json_response['TempPath']).to eq(LfsObjectUploader.workhorse_local_upload_path)
expect(json_response['RemoteObject']).to be_nil
expect(json_response['LfsOid']).to eq(sample_oid)
@@ -1049,8 +933,8 @@ describe 'Git LFS API and storage' do
end
it_behaves_like 'a valid response' do
- it 'responds with status 200, location of lfs remote store and object details' do
- expect(json_response['TempPath']).to eq(LfsObjectUploader.workhorse_local_upload_path)
+ it 'responds with status 200, location of LFS remote store and object details' do
+ expect(json_response).not_to have_key('TempPath')
expect(json_response['RemoteObject']).to have_key('ID')
expect(json_response['RemoteObject']).to have_key('GetURL')
expect(json_response['RemoteObject']).to have_key('StoreURL')
@@ -1077,11 +961,9 @@ describe 'Git LFS API and storage' do
put_finalize
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
- it 'lfs object is linked to the project' do
+ it 'LFS object is linked to the project' do
expect(lfs_object.projects.pluck(:id)).to include(project.id)
end
end
@@ -1092,7 +974,7 @@ describe 'Git LFS API and storage' do
end
end
- context 'and workhorse requests upload finalize for a new lfs object' do
+ context 'and workhorse requests upload finalize for a new LFS object' do
before do
lfs_object.destroy
end
@@ -1111,10 +993,17 @@ describe 'Git LFS API and storage' do
stub_lfs_object_storage(direct_upload: true)
end
+ let(:tmp_object) do
+ fog_connection.directories.new(key: 'lfs-objects').files.create(
+ key: 'tmp/uploads/12312300',
+ body: 'content'
+ )
+ end
+
['123123', '../../123123'].each do |remote_id|
context "with invalid remote_id: #{remote_id}" do
subject do
- put_finalize(with_tempfile: true, args: {
+ put_finalize(remote_object: tmp_object, args: {
'file.remote_id' => remote_id
})
end
@@ -1128,15 +1017,8 @@ describe 'Git LFS API and storage' do
end
context 'with valid remote_id' do
- before do
- fog_connection.directories.new(key: 'lfs-objects').files.create(
- key: 'tmp/uploads/12312300',
- body: 'content'
- )
- end
-
subject do
- put_finalize(with_tempfile: true, args: {
+ put_finalize(remote_object: tmp_object, args: {
'file.remote_id' => '12312300',
'file.name' => 'name'
})
@@ -1146,6 +1028,10 @@ describe 'Git LFS API and storage' do
subject
expect(response).to have_gitlab_http_status(200)
+
+ object = LfsObject.find_by_oid(sample_oid)
+ expect(object).to be_present
+ expect(object.file.read).to eq(tmp_object.body)
end
it 'schedules migration of file to object storage' do
@@ -1202,33 +1088,25 @@ describe 'Git LFS API and storage' do
let(:authorization) { authorize_ci_project }
context 'build has an user' do
- let(:user) { create(:user) }
+ let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
context 'tries to push to own project' do
- let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
-
before do
project.add_developer(user)
put_authorize
end
- it 'responds with 403 (not 404 because the build user can read the project)' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
context 'tries to push to other project' do
- let(:other_project) { create(:project) }
let(:pipeline) { create(:ci_empty_pipeline, project: other_project) }
- let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
before do
put_authorize
end
- it 'responds with 404 (do not leak non-public project existence)' do
- expect(response).to have_gitlab_http_status(404)
- end
+ it_behaves_like 'LFS http 404 response'
end
end
@@ -1239,10 +1117,41 @@ describe 'Git LFS API and storage' do
put_authorize
end
- it 'responds with 404 (do not leak non-public project existence)' do
- expect(response).to have_gitlab_http_status(404)
+ it_behaves_like 'LFS http 404 response'
+ end
+ end
+
+ describe 'when using a user key (LFSToken)' do
+ let(:authorization) { authorize_user_key }
+
+ context 'when user allowed' do
+ before do
+ project.add_developer(user)
+ put_authorize
+ end
+
+ it_behaves_like 'LFS http 200 response'
+
+ context 'when user password is expired' do
+ let(:user) { create(:user, password_expires_at: 1.minute.ago)}
+
+ it_behaves_like 'LFS http 401 response'
+ end
+
+ context 'when user is blocked' do
+ let(:user) { create(:user, :blocked)}
+
+ it_behaves_like 'LFS http 401 response'
end
end
+
+ context 'when user not allowed' do
+ before do
+ put_authorize
+ end
+
+ it_behaves_like 'LFS http 404 response'
+ end
end
context 'for unauthenticated' do
@@ -1268,11 +1177,9 @@ describe 'Git LFS API and storage' do
put_authorize
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
- it 'with location of lfs store and object details' do
+ it 'with location of LFS store and object details' do
expect(json_response['TempPath']).to eq(LfsObjectUploader.workhorse_local_upload_path)
expect(json_response['LfsOid']).to eq(sample_oid)
expect(json_response['LfsSize']).to eq(sample_size)
@@ -1284,11 +1191,9 @@ describe 'Git LFS API and storage' do
put_finalize
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
- it 'lfs object is linked to the source project' do
+ it 'LFS object is linked to the source project' do
expect(lfs_object.projects.pluck(:id)).to include(upstream_project.id)
end
end
@@ -1307,34 +1212,24 @@ describe 'Git LFS API and storage' do
end
context 'build has an user' do
- let(:user) { create(:user) }
+ let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
context 'tries to push to own project' do
- let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
-
- it 'responds with 403 (not 404 because project is public)' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
context 'tries to push to other project' do
- let(:other_project) { create(:project) }
let(:pipeline) { create(:ci_empty_pipeline, project: other_project) }
- let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
# I'm not sure what this tests that is different from the previous test
- it 'responds with 403 (not 404 because project is public)' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
end
context 'does not have user' do
let(:build) { create(:ci_build, :running, pipeline: pipeline) }
- it 'responds with 403 (not 404 because project is public)' do
- expect(response).to have_gitlab_http_status(403)
- end
+ it_behaves_like 'LFS http 403 response'
end
end
@@ -1351,22 +1246,20 @@ describe 'Git LFS API and storage' do
upstream_project.lfs_objects << lfs_object
end
- context 'when pushing the same lfs object to the second project' do
+ context 'when pushing the same LFS object to the second project' do
before do
finalize_headers = headers
.merge('X-Gitlab-Lfs-Tmp' => lfs_tmp_file)
.merge(workhorse_internal_api_request_header)
- put "#{second_project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}",
- params: {},
- headers: finalize_headers
+ put objects_url(second_project, sample_oid, sample_size),
+ params: {},
+ headers: finalize_headers
end
- it 'responds with status 200' do
- expect(response).to have_gitlab_http_status(200)
- end
+ it_behaves_like 'LFS http 200 response'
- it 'links the lfs object to the project' do
+ it 'links the LFS object to the project' do
expect(lfs_object.projects.pluck(:id)).to include(second_project.id, upstream_project.id)
end
end
@@ -1377,66 +1270,38 @@ describe 'Git LFS API and storage' do
authorize_headers = headers
authorize_headers.merge!(workhorse_internal_api_request_header) if verified
- put "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}/authorize", params: {}, headers: authorize_headers
+ put authorize_url(project, sample_oid, sample_size), params: {}, headers: authorize_headers
end
- def put_finalize(lfs_tmp = lfs_tmp_file, with_tempfile: false, verified: true, args: {})
- upload_path = LfsObjectUploader.workhorse_local_upload_path
- file_path = upload_path + '/' + lfs_tmp if lfs_tmp
+ def put_finalize(lfs_tmp = lfs_tmp_file, with_tempfile: false, verified: true, remote_object: nil, args: {})
+ uploaded_file = nil
if with_tempfile
+ upload_path = LfsObjectUploader.workhorse_local_upload_path
+ file_path = upload_path + '/' + lfs_tmp if lfs_tmp
+
FileUtils.mkdir_p(upload_path)
FileUtils.touch(file_path)
- end
-
- extra_args = {
- 'file.path' => file_path,
- 'file.name' => File.basename(file_path)
- }
- put_finalize_with_args(args.merge(extra_args).compact, verified: verified)
- end
+ uploaded_file = UploadedFile.new(file_path, filename: File.basename(file_path))
+ elsif remote_object
+ uploaded_file = fog_to_uploaded_file(remote_object)
+ end
- def put_finalize_with_args(args, verified:)
finalize_headers = headers
finalize_headers.merge!(workhorse_internal_api_request_header) if verified
- put "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}", params: args, headers: finalize_headers
+ workhorse_finalize(
+ objects_url(project, sample_oid, sample_size),
+ method: :put,
+ file_key: :file,
+ params: args.merge(file: uploaded_file),
+ headers: finalize_headers
+ )
end
def lfs_tmp_file
"#{sample_oid}012345678"
end
end
-
- def enable_lfs
- allow(Gitlab.config.lfs).to receive(:enabled).and_return(true)
- end
-
- def authorize_ci_project
- ActionController::HttpAuthentication::Basic.encode_credentials('gitlab-ci-token', build.token)
- end
-
- def authorize_user
- ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
- end
-
- def authorize_deploy_key
- ActionController::HttpAuthentication::Basic.encode_credentials("lfs+deploy-key-#{key.id}", Gitlab::LfsToken.new(key).token)
- end
-
- def authorize_user_key
- ActionController::HttpAuthentication::Basic.encode_credentials(user.username, Gitlab::LfsToken.new(user).token)
- end
-
- def authorize_deploy_token
- ActionController::HttpAuthentication::Basic.encode_credentials(deploy_token.username, deploy_token.token)
- end
-
- def post_lfs_json(url, body = nil, headers = nil)
- params = body.try(:to_json)
- headers = (headers || {}).merge('Content-Type' => LfsRequest::CONTENT_TYPE)
-
- post(url, params: params, headers: headers)
- end
end
diff --git a/spec/requests/openid_connect_spec.rb b/spec/requests/openid_connect_spec.rb
index da2e7b71dbe..dfa17c5ff27 100644
--- a/spec/requests/openid_connect_spec.rb
+++ b/spec/requests/openid_connect_spec.rb
@@ -148,34 +148,25 @@ describe 'OpenID Connect requests' do
end
end
- # These 2 calls shouldn't actually throw, they should be handled as an
- # unauthorized request, so we should be able to check the response.
- #
- # This was not possible due to an issue with Warden:
- # https://github.com/hassox/warden/pull/162
- #
- # When the patch gets merged and we update Warden, these specs will need to
- # updated to check the response instead of a raised exception.
- # https://gitlab.com/gitlab-org/gitlab-foss/issues/40218
context 'when user is blocked' do
- it 'returns authentication error' do
+ it 'redirects to login page' do
access_grant
user.block!
- expect do
- request_access_token!
- end.to raise_error UncaughtThrowError
+ request_access_token!
+
+ expect(response).to redirect_to('/users/sign_in')
end
end
context 'when user is ldap_blocked' do
- it 'returns authentication error' do
+ it 'redirects to login page' do
access_grant
user.ldap_block!
- expect do
- request_access_token!
- end.to raise_error UncaughtThrowError
+ request_access_token!
+
+ expect(response).to redirect_to('/users/sign_in')
end
end
end
diff --git a/spec/requests/rack_attack_global_spec.rb b/spec/requests/rack_attack_global_spec.rb
index cf459ba99c1..ca8720cd414 100644
--- a/spec/requests/rack_attack_global_spec.rb
+++ b/spec/requests/rack_attack_global_spec.rb
@@ -1,6 +1,8 @@
require 'spec_helper'
describe 'Rack Attack global throttles' do
+ include RackAttackSpecHelpers
+
let(:settings) { Gitlab::CurrentSettings.current_application_settings }
# Start with really high limits and override them with low limits to ensure
@@ -12,7 +14,9 @@ describe 'Rack Attack global throttles' do
throttle_authenticated_api_requests_per_period: 100,
throttle_authenticated_api_period_in_seconds: 1,
throttle_authenticated_web_requests_per_period: 100,
- throttle_authenticated_web_period_in_seconds: 1
+ throttle_authenticated_web_period_in_seconds: 1,
+ throttle_authenticated_protected_paths_request_per_period: 100,
+ throttle_authenticated_protected_paths_in_seconds: 1
}
end
@@ -20,21 +24,17 @@ describe 'Rack Attack global throttles' do
let(:period_in_seconds) { 10000 }
let(:period) { period_in_seconds.seconds }
- around do |example|
- # Instead of test environment's :null_store so the throttles can increment
- Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new
-
- # Make time-dependent tests deterministic
- Timecop.freeze { example.run }
-
- Rack::Attack.cache.store = Rails.cache
- end
+ include_context 'rack attack cache store'
describe 'unauthenticated requests' do
let(:url_that_does_not_require_authentication) { '/users/sign_in' }
let(:url_api_internal) { '/api/v4/internal/check' }
before do
+ # Disabling protected paths throttle, otherwise requests to
+ # '/users/sign_in' are caught by this throttle.
+ settings_to_set[:throttle_protected_paths_enabled] = false
+
# Set low limits
settings_to_set[:throttle_unauthenticated_requests_per_period] = requests_per_period
settings_to_set[:throttle_unauthenticated_period_in_seconds] = period_in_seconds
@@ -203,29 +203,156 @@ describe 'Rack Attack global throttles' do
it_behaves_like 'rate-limited web authenticated requests'
end
- def api_get_args_with_token_headers(partial_url, token_headers)
- ["/api/#{API::API.version}#{partial_url}", params: nil, headers: token_headers]
- end
+ describe 'protected paths' do
+ context 'unauthenticated requests' do
+ let(:protected_path_that_does_not_require_authentication) do
+ '/users/confirmation'
+ end
- def rss_url(user)
- "/dashboard/projects.atom?feed_token=#{user.feed_token}"
- end
+ before do
+ settings_to_set[:throttle_protected_paths_requests_per_period] = requests_per_period # 1
+ settings_to_set[:throttle_protected_paths_period_in_seconds] = period_in_seconds # 10_000
+ end
- def private_token_headers(user)
- { 'HTTP_PRIVATE_TOKEN' => user.private_token }
- end
+ context 'when protected paths throttle is disabled' do
+ before do
+ settings_to_set[:throttle_protected_paths_enabled] = false
+ stub_application_setting(settings_to_set)
+ end
- def personal_access_token_headers(personal_access_token)
- { 'HTTP_PRIVATE_TOKEN' => personal_access_token.token }
- end
+ it 'allows requests over the rate limit' do
+ (1 + requests_per_period).times do
+ get protected_path_that_does_not_require_authentication
+ expect(response).to have_http_status 200
+ end
+ end
+ end
- def oauth_token_headers(oauth_access_token)
- { 'AUTHORIZATION' => "Bearer #{oauth_access_token.token}" }
- end
+ context 'when protected paths throttle is enabled' do
+ before do
+ settings_to_set[:throttle_protected_paths_enabled] = true
+ stub_application_setting(settings_to_set)
+ end
+
+ it 'rejects requests over the rate limit' do
+ requests_per_period.times do
+ get protected_path_that_does_not_require_authentication
+ expect(response).to have_http_status 200
+ end
+
+ expect_rejection { get protected_path_that_does_not_require_authentication }
+ end
+
+ context 'when Omnibus throttle is present' do
+ before do
+ allow(Gitlab::Throttle)
+ .to receive(:omnibus_protected_paths_present?).and_return(true)
+ end
+
+ it 'allows requests over the rate limit' do
+ (1 + requests_per_period).times do
+ get protected_path_that_does_not_require_authentication
+ expect(response).to have_http_status 200
+ end
+ end
+ end
+ end
+ end
+
+ context 'API requests authenticated with personal access token', :api do
+ let(:user) { create(:user) }
+ let(:token) { create(:personal_access_token, user: user) }
+ let(:other_user) { create(:user) }
+ let(:other_user_token) { create(:personal_access_token, user: other_user) }
+ let(:throttle_setting_prefix) { 'throttle_protected_paths' }
+ let(:api_partial_url) { '/users' }
+
+ let(:protected_paths) do
+ [
+ '/api/v4/users'
+ ]
+ end
+
+ before do
+ settings_to_set[:protected_paths] = protected_paths
+ stub_application_setting(settings_to_set)
+ end
+
+ context 'with the token in the query string' do
+ let(:get_args) { [api(api_partial_url, personal_access_token: token)] }
+ let(:other_user_get_args) { [api(api_partial_url, personal_access_token: other_user_token)] }
+
+ it_behaves_like 'rate-limited token-authenticated requests'
+ end
+
+ context 'with the token in the headers' do
+ let(:get_args) { api_get_args_with_token_headers(api_partial_url, personal_access_token_headers(token)) }
+ let(:other_user_get_args) { api_get_args_with_token_headers(api_partial_url, personal_access_token_headers(other_user_token)) }
+
+ it_behaves_like 'rate-limited token-authenticated requests'
+ end
+
+ context 'when Omnibus throttle is present' do
+ let(:get_args) { [api(api_partial_url, personal_access_token: token)] }
+ let(:other_user_get_args) { [api(api_partial_url, personal_access_token: other_user_token)] }
+
+ before do
+ settings_to_set[:"#{throttle_setting_prefix}_requests_per_period"] = requests_per_period
+ settings_to_set[:"#{throttle_setting_prefix}_period_in_seconds"] = period_in_seconds
+ settings_to_set[:"#{throttle_setting_prefix}_enabled"] = true
+ stub_application_setting(settings_to_set)
+
+ allow(Gitlab::Throttle)
+ .to receive(:omnibus_protected_paths_present?).and_return(true)
+ end
+
+ it 'allows requests over the rate limit' do
+ (1 + requests_per_period).times do
+ get(*get_args)
+ expect(response).to have_http_status 200
+ end
+ end
+ end
+ end
+
+ describe 'web requests authenticated with regular login' do
+ let(:throttle_setting_prefix) { 'throttle_protected_paths' }
+ let(:user) { create(:user) }
+ let(:url_that_requires_authentication) { '/dashboard/snippets' }
+
+ let(:protected_paths) do
+ [
+ url_that_requires_authentication
+ ]
+ end
+
+ before do
+ settings_to_set[:protected_paths] = protected_paths
+ stub_application_setting(settings_to_set)
+ end
+
+ it_behaves_like 'rate-limited web authenticated requests'
+
+ context 'when Omnibus throttle is present' do
+ before do
+ settings_to_set[:"#{throttle_setting_prefix}_requests_per_period"] = requests_per_period
+ settings_to_set[:"#{throttle_setting_prefix}_period_in_seconds"] = period_in_seconds
+ settings_to_set[:"#{throttle_setting_prefix}_enabled"] = true
+ stub_application_setting(settings_to_set)
- def expect_rejection(&block)
- yield
+ allow(Gitlab::Throttle)
+ .to receive(:omnibus_protected_paths_present?).and_return(true)
- expect(response).to have_http_status(429)
+ login_as(user)
+ end
+
+ it 'allows requests over the rate limit' do
+ (1 + requests_per_period).times do
+ get url_that_requires_authentication
+ expect(response).to have_http_status 200
+ end
+ end
+ end
+ end
end
end
diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb
index 7e2d70d6eb5..acdbf064a73 100644
--- a/spec/routing/project_routing_spec.rb
+++ b/spec/routing/project_routing_spec.rb
@@ -276,6 +276,11 @@ describe 'project routing' do
expect(get('/gitlab/gitlabhq/refs/feature%2B45/logs_tree/foo/bar/baz')).to route_to('projects/refs#logs_tree', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'feature+45', path: 'foo/bar/baz')
expect(get('/gitlab/gitlabhq/refs/feature@45/logs_tree/foo/bar/baz')).to route_to('projects/refs#logs_tree', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'feature@45', path: 'foo/bar/baz')
expect(get('/gitlab/gitlabhq/refs/stable/logs_tree/files.scss')).to route_to('projects/refs#logs_tree', namespace_id: 'gitlab', project_id: 'gitlabhq', id: 'stable', path: 'files.scss')
+ assert_routing({ path: "/gitlab/gitlabhq/refs/stable/logs_tree/new%0A%0Aline.txt",
+ method: :get },
+ { controller: 'projects/refs', action: 'logs_tree',
+ namespace_id: 'gitlab', project_id: 'gitlabhq',
+ id: "stable", path: "new\n\nline.txt" })
end
end
diff --git a/spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb b/spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb
new file mode 100644
index 00000000000..0ff06b431eb
--- /dev/null
+++ b/spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb
@@ -0,0 +1,80 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'rubocop'
+require 'rubocop/rspec/support'
+require_relative '../../../../rubocop/cop/gitlab/const_get_inherit_false'
+
+describe RuboCop::Cop::Gitlab::ConstGetInheritFalse do
+ include CopHelper
+
+ subject(:cop) { described_class.new }
+
+ context 'Object.const_get' do
+ it 'registers an offense with no 2nd argument' do
+ expect_offense(<<~PATTERN.strip_indent)
+ Object.const_get(:CONSTANT)
+ ^^^^^^^^^ Use inherit=false when using const_get.
+ PATTERN
+ end
+
+ it 'autocorrects' do
+ expect(autocorrect_source('Object.const_get(:CONSTANT)')).to eq('Object.const_get(:CONSTANT, false)')
+ end
+
+ context 'inherit=false' do
+ it 'does not register an offense' do
+ expect_no_offenses(<<~PATTERN.strip_indent)
+ Object.const_get(:CONSTANT, false)
+ PATTERN
+ end
+ end
+
+ context 'inherit=true' do
+ it 'registers an offense' do
+ expect_offense(<<~PATTERN.strip_indent)
+ Object.const_get(:CONSTANT, true)
+ ^^^^^^^^^ Use inherit=false when using const_get.
+ PATTERN
+ end
+
+ it 'autocorrects' do
+ expect(autocorrect_source('Object.const_get(:CONSTANT, true)')).to eq('Object.const_get(:CONSTANT, false)')
+ end
+ end
+ end
+
+ context 'const_get for a nested class' do
+ it 'registers an offense on reload usage' do
+ expect_offense(<<~PATTERN.strip_indent)
+ Nested::Blog.const_get(:CONSTANT)
+ ^^^^^^^^^ Use inherit=false when using const_get.
+ PATTERN
+ end
+
+ it 'autocorrects' do
+ expect(autocorrect_source('Nested::Blag.const_get(:CONSTANT)')).to eq('Nested::Blag.const_get(:CONSTANT, false)')
+ end
+
+ context 'inherit=false' do
+ it 'does not register an offense' do
+ expect_no_offenses(<<~PATTERN.strip_indent)
+ Nested::Blog.const_get(:CONSTANT, false)
+ PATTERN
+ end
+ end
+
+ context 'inherit=true' do
+ it 'registers an offense if inherit is true' do
+ expect_offense(<<~PATTERN.strip_indent)
+ Nested::Blog.const_get(:CONSTANT, true)
+ ^^^^^^^^^ Use inherit=false when using const_get.
+ PATTERN
+ end
+
+ it 'autocorrects' do
+ expect(autocorrect_source('Nested::Blag.const_get(:CONSTANT, true)')).to eq('Nested::Blag.const_get(:CONSTANT, false)')
+ end
+ end
+ end
+end
diff --git a/spec/rubocop/cop/line_break_around_conditional_block_spec.rb b/spec/rubocop/cop/line_break_around_conditional_block_spec.rb
index 892b393c307..cc933ce12c8 100644
--- a/spec/rubocop/cop/line_break_around_conditional_block_spec.rb
+++ b/spec/rubocop/cop/line_break_around_conditional_block_spec.rb
@@ -132,6 +132,19 @@ describe RuboCop::Cop::LineBreakAroundConditionalBlock do
expect(cop.offenses).to be_empty
end
+ it "doesn't flag violation for #{conditional} preceded by a block definition with a comment" do
+ source = <<~RUBY
+ on_block(param_a) do |item| # a short comment
+ #{conditional} condition
+ do_something
+ end
+ end
+ RUBY
+ inspect_source(source)
+
+ expect(cop.offenses).to be_empty
+ end
+
it "doesn't flag violation for #{conditional} preceded by a block definition using brackets" do
source = <<~RUBY
on_block(param_a) { |item|
diff --git a/spec/rubocop/cop/migration/add_timestamps_spec.rb b/spec/rubocop/cop/migration/add_timestamps_spec.rb
index fae0177d5f5..33f1bb85af8 100644
--- a/spec/rubocop/cop/migration/add_timestamps_spec.rb
+++ b/spec/rubocop/cop/migration/add_timestamps_spec.rb
@@ -9,6 +9,7 @@ describe RuboCop::Cop::Migration::AddTimestamps do
include CopHelper
subject(:cop) { described_class.new }
+
let(:migration_with_add_timestamps) do
%q(
class Users < ActiveRecord::Migration[4.2]
diff --git a/spec/rubocop/cop/migration/timestamps_spec.rb b/spec/rubocop/cop/migration/timestamps_spec.rb
index 1812818692a..cafe255dc9a 100644
--- a/spec/rubocop/cop/migration/timestamps_spec.rb
+++ b/spec/rubocop/cop/migration/timestamps_spec.rb
@@ -9,6 +9,7 @@ describe RuboCop::Cop::Migration::Timestamps do
include CopHelper
subject(:cop) { described_class.new }
+
let(:migration_with_timestamps) do
%q(
class Users < ActiveRecord::Migration[4.2]
diff --git a/spec/rubocop/cop/scalability/file_uploads_spec.rb b/spec/rubocop/cop/scalability/file_uploads_spec.rb
index 2a94fde5ba2..a35d423581c 100644
--- a/spec/rubocop/cop/scalability/file_uploads_spec.rb
+++ b/spec/rubocop/cop/scalability/file_uploads_spec.rb
@@ -10,6 +10,7 @@ describe RuboCop::Cop::Scalability::FileUploads do
include ExpectOffense
subject(:cop) { described_class.new }
+
let(:message) { 'Do not upload files without workhorse acceleration. Please refer to https://docs.gitlab.com/ee/development/uploads.html' }
context 'with required params' do
diff --git a/spec/serializers/analytics_build_entity_spec.rb b/spec/serializers/analytics_build_entity_spec.rb
index 1ff4908972a..dfa16075d20 100644
--- a/spec/serializers/analytics_build_entity_spec.rb
+++ b/spec/serializers/analytics_build_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AnalyticsBuildEntity do
diff --git a/spec/serializers/analytics_build_serializer_spec.rb b/spec/serializers/analytics_build_serializer_spec.rb
index e3b1dd93dc2..04a387fd353 100644
--- a/spec/serializers/analytics_build_serializer_spec.rb
+++ b/spec/serializers/analytics_build_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AnalyticsBuildSerializer do
diff --git a/spec/serializers/analytics_issue_entity_spec.rb b/spec/serializers/analytics_issue_entity_spec.rb
index c5b03bdd8c1..555efe136e6 100644
--- a/spec/serializers/analytics_issue_entity_spec.rb
+++ b/spec/serializers/analytics_issue_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AnalyticsIssueEntity do
diff --git a/spec/serializers/analytics_issue_serializer_spec.rb b/spec/serializers/analytics_issue_serializer_spec.rb
index 9cb2ce13d12..9b29739a8f2 100644
--- a/spec/serializers/analytics_issue_serializer_spec.rb
+++ b/spec/serializers/analytics_issue_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AnalyticsIssueSerializer do
diff --git a/spec/serializers/analytics_merge_request_serializer_spec.rb b/spec/serializers/analytics_merge_request_serializer_spec.rb
index a864051b2a3..c82eb28a28b 100644
--- a/spec/serializers/analytics_merge_request_serializer_spec.rb
+++ b/spec/serializers/analytics_merge_request_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AnalyticsMergeRequestSerializer do
diff --git a/spec/serializers/analytics_stage_serializer_spec.rb b/spec/serializers/analytics_stage_serializer_spec.rb
index 86a796a2d94..1f1a0180b1f 100644
--- a/spec/serializers/analytics_stage_serializer_spec.rb
+++ b/spec/serializers/analytics_stage_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AnalyticsStageSerializer do
diff --git a/spec/serializers/analytics_summary_serializer_spec.rb b/spec/serializers/analytics_summary_serializer_spec.rb
index 8fa0574bfd6..33a41706794 100644
--- a/spec/serializers/analytics_summary_serializer_spec.rb
+++ b/spec/serializers/analytics_summary_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AnalyticsSummarySerializer do
diff --git a/spec/serializers/blob_entity_spec.rb b/spec/serializers/blob_entity_spec.rb
index dde59ff72df..c0687d0232e 100644
--- a/spec/serializers/blob_entity_spec.rb
+++ b/spec/serializers/blob_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BlobEntity do
diff --git a/spec/serializers/build_action_entity_spec.rb b/spec/serializers/build_action_entity_spec.rb
index ea88951ebc6..7cd1fdcda22 100644
--- a/spec/serializers/build_action_entity_spec.rb
+++ b/spec/serializers/build_action_entity_spec.rb
@@ -1,11 +1,18 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BuildActionEntity do
let(:job) { create(:ci_build, name: 'test_job') }
let(:request) { double('request') }
+ let(:user) { create(:user) }
let(:entity) do
- described_class.new(job, request: spy('request'))
+ described_class.new(job, request: request)
+ end
+
+ before do
+ allow(request).to receive(:current_user).and_return(user)
end
describe '#as_json' do
diff --git a/spec/serializers/build_artifact_entity_spec.rb b/spec/serializers/build_artifact_entity_spec.rb
index ad0d3d3839e..09fe094fff1 100644
--- a/spec/serializers/build_artifact_entity_spec.rb
+++ b/spec/serializers/build_artifact_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BuildArtifactEntity do
diff --git a/spec/serializers/build_details_entity_spec.rb b/spec/serializers/build_details_entity_spec.rb
index d922e8246c7..91c5fd6bf2c 100644
--- a/spec/serializers/build_details_entity_spec.rb
+++ b/spec/serializers/build_details_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BuildDetailsEntity do
@@ -121,6 +123,25 @@ describe BuildDetailsEntity do
end
it { is_expected.to include(failure_reason: 'unmet_prerequisites') }
+ it { is_expected.to include(callout_message: CommitStatusPresenter.callout_failure_messages[:unmet_prerequisites]) }
+ end
+
+ context 'when the build has failed due to a missing dependency' do
+ let!(:test1) { create(:ci_build, :success, :expired, pipeline: pipeline, name: 'test1', stage_idx: 0) }
+ let!(:test2) { create(:ci_build, :success, :expired, pipeline: pipeline, name: 'test2', stage_idx: 1) }
+ let!(:build) { create(:ci_build, :pending, pipeline: pipeline, stage_idx: 2, options: { dependencies: %w(test1 test2) }) }
+ let(:message) { subject[:callout_message] }
+
+ before do
+ build.drop!(:missing_dependency_failure)
+ end
+
+ it { is_expected.to include(failure_reason: 'missing_dependency_failure') }
+
+ it 'includes the failing dependencies in the callout message' do
+ expect(message).to include('test1')
+ expect(message).to include('test2')
+ end
end
context 'when a build has environment with latest deployment' do
diff --git a/spec/serializers/build_serializer_spec.rb b/spec/serializers/build_serializer_spec.rb
index 302ef147eb2..c7bb6864361 100644
--- a/spec/serializers/build_serializer_spec.rb
+++ b/spec/serializers/build_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BuildSerializer do
diff --git a/spec/serializers/build_trace_entity_spec.rb b/spec/serializers/build_trace_entity_spec.rb
new file mode 100644
index 00000000000..bafead04a51
--- /dev/null
+++ b/spec/serializers/build_trace_entity_spec.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe BuildTraceEntity do
+ let(:build) { build_stubbed(:ci_build) }
+ let(:request) { double('request') }
+
+ let(:stream) do
+ Gitlab::Ci::Trace::Stream.new do
+ StringIO.new('the-trace')
+ end
+ end
+
+ let(:build_trace) do
+ Ci::BuildTrace.new(build: build, stream: stream, content_format: content_format, state: nil)
+ end
+
+ let(:entity) do
+ described_class.new(build_trace, request: request)
+ end
+
+ subject { entity.as_json }
+
+ shared_examples 'includes build and trace metadata' do
+ it 'includes build attributes' do
+ expect(subject[:id]).to eq(build.id)
+ expect(subject[:status]).to eq(build.status)
+ expect(subject[:complete]).to eq(build.complete?)
+ end
+
+ it 'includes trace metadata' do
+ expect(subject).to include(:state)
+ expect(subject).to include(:append)
+ expect(subject).to include(:truncated)
+ expect(subject).to include(:offset)
+ expect(subject).to include(:size)
+ expect(subject).to include(:total)
+ end
+ end
+
+ context 'when content format is :json' do
+ let(:content_format) { :json }
+
+ it_behaves_like 'includes build and trace metadata'
+
+ it 'includes the trace content in json' do
+ expect(subject[:lines]).to eq([
+ { offset: 0, content: [{ text: 'the-trace' }] }
+ ])
+ end
+ end
+
+ context 'when content format is :html' do
+ let(:content_format) { :html }
+
+ it_behaves_like 'includes build and trace metadata'
+
+ it 'includes the trace content in json' do
+ expect(subject[:html]).to eq('<span>the-trace</span>')
+ end
+ end
+end
diff --git a/spec/serializers/cluster_application_entity_spec.rb b/spec/serializers/cluster_application_entity_spec.rb
index 76ecca06522..cb9325986d7 100644
--- a/spec/serializers/cluster_application_entity_spec.rb
+++ b/spec/serializers/cluster_application_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ClusterApplicationEntity do
diff --git a/spec/serializers/cluster_basic_entity_spec.rb b/spec/serializers/cluster_basic_entity_spec.rb
index 6762eb6ab3d..be03ee91784 100644
--- a/spec/serializers/cluster_basic_entity_spec.rb
+++ b/spec/serializers/cluster_basic_entity_spec.rb
@@ -1,8 +1,11 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ClusterBasicEntity do
describe '#as_json' do
subject { described_class.new(cluster, request: request).as_json }
+
let(:maintainer) { create(:user) }
let(:developer) { create(:user) }
let(:current_user) { maintainer }
diff --git a/spec/serializers/cluster_entity_spec.rb b/spec/serializers/cluster_entity_spec.rb
index d6a43fd0f00..22b9166f922 100644
--- a/spec/serializers/cluster_entity_spec.rb
+++ b/spec/serializers/cluster_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ClusterEntity do
diff --git a/spec/serializers/cluster_serializer_spec.rb b/spec/serializers/cluster_serializer_spec.rb
index 5e9f7a45891..db0e65ca0fa 100644
--- a/spec/serializers/cluster_serializer_spec.rb
+++ b/spec/serializers/cluster_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ClusterSerializer do
diff --git a/spec/serializers/commit_entity_spec.rb b/spec/serializers/commit_entity_spec.rb
index b9995818e98..03e1c89a5e6 100644
--- a/spec/serializers/commit_entity_spec.rb
+++ b/spec/serializers/commit_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe CommitEntity do
diff --git a/spec/serializers/container_repository_entity_spec.rb b/spec/serializers/container_repository_entity_spec.rb
index 15466bce514..799a8d5c122 100644
--- a/spec/serializers/container_repository_entity_spec.rb
+++ b/spec/serializers/container_repository_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ContainerRepositoryEntity do
@@ -23,6 +25,18 @@ describe ContainerRepositoryEntity do
expect(subject).to include(:id, :path, :location, :tags_path)
end
+ context 'when project is not preset in the request' do
+ before do
+ allow(request).to receive(:respond_to?).and_return(false)
+ allow(request).to receive(:project).and_return(nil)
+ end
+
+ it 'uses project from the object' do
+ expect(request.project).not_to equal(project)
+ expect(subject).to include(:tags_path)
+ end
+ end
+
context 'when user can manage repositories' do
before do
project.add_developer(user)
diff --git a/spec/serializers/container_tag_entity_spec.rb b/spec/serializers/container_tag_entity_spec.rb
index ceb828a1cc5..8a67a189761 100644
--- a/spec/serializers/container_tag_entity_spec.rb
+++ b/spec/serializers/container_tag_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ContainerTagEntity do
diff --git a/spec/serializers/deploy_key_entity_spec.rb b/spec/serializers/deploy_key_entity_spec.rb
index 01264cf7fb5..607adfc2488 100644
--- a/spec/serializers/deploy_key_entity_spec.rb
+++ b/spec/serializers/deploy_key_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DeployKeyEntity do
@@ -6,14 +8,15 @@ describe DeployKeyEntity do
let(:user) { create(:user) }
let(:project) { create(:project, :internal)}
let(:project_private) { create(:project, :private)}
- let!(:project_pending_delete) { create(:project, :internal, pending_delete: true) }
let(:deploy_key) { create(:deploy_key) }
- let!(:deploy_key_internal) { create(:deploy_keys_project, project: project, deploy_key: deploy_key) }
- let!(:deploy_key_private) { create(:deploy_keys_project, project: project_private, deploy_key: deploy_key) }
- let!(:deploy_key_pending_delete) { create(:deploy_keys_project, project: project_pending_delete, deploy_key: deploy_key) }
let(:entity) { described_class.new(deploy_key, user: user) }
+ before do
+ project.deploy_keys << deploy_key
+ project_private.deploy_keys << deploy_key
+ end
+
describe 'returns deploy keys with projects a user can read' do
let(:expected_result) do
{
@@ -44,17 +47,30 @@ describe DeployKeyEntity do
it { expect(entity.as_json).to eq(expected_result) }
end
- describe 'returns can_edit true if user is a maintainer of project' do
+ context 'user is an admin' do
+ let(:user) { create(:user, :admin) }
+
+ it { expect(entity.as_json).to include(can_edit: true) }
+ end
+
+ context 'user is a project maintainer' do
before do
project.add_maintainer(user)
end
- it { expect(entity.as_json).to include(can_edit: true) }
- end
+ context 'project deploy key' do
+ it { expect(entity.as_json).to include(can_edit: true) }
+ end
- describe 'returns can_edit true if a user admin' do
- let(:user) { create(:user, :admin) }
+ context 'public deploy key' do
+ let(:deploy_key_public) { create(:deploy_key, public: true) }
+ let(:entity_public) { described_class.new(deploy_key_public, { user: user, project: project }) }
- it { expect(entity.as_json).to include(can_edit: true) }
+ before do
+ project.deploy_keys << deploy_key_public
+ end
+
+ it { expect(entity_public.as_json).to include(can_edit: true) }
+ end
end
end
diff --git a/spec/serializers/deployment_entity_spec.rb b/spec/serializers/deployment_entity_spec.rb
index 79f89dc1a9c..d7816a3503d 100644
--- a/spec/serializers/deployment_entity_spec.rb
+++ b/spec/serializers/deployment_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DeploymentEntity do
diff --git a/spec/serializers/detailed_status_entity_spec.rb b/spec/serializers/detailed_status_entity_spec.rb
index 62f57ca8689..a4b51f1e02e 100644
--- a/spec/serializers/detailed_status_entity_spec.rb
+++ b/spec/serializers/detailed_status_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DetailedStatusEntity do
diff --git a/spec/serializers/diff_file_entity_spec.rb b/spec/serializers/diff_file_entity_spec.rb
index 92b649f5b6c..0c2e7c1e3eb 100644
--- a/spec/serializers/diff_file_entity_spec.rb
+++ b/spec/serializers/diff_file_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DiffFileEntity do
diff --git a/spec/serializers/diff_line_serializer_spec.rb b/spec/serializers/diff_line_serializer_spec.rb
index 6dd8abd0579..bdfcb8e2459 100644
--- a/spec/serializers/diff_line_serializer_spec.rb
+++ b/spec/serializers/diff_line_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DiffLineSerializer do
diff --git a/spec/serializers/diff_viewer_entity_spec.rb b/spec/serializers/diff_viewer_entity_spec.rb
index 66ac6ef2adc..76d2728c597 100644
--- a/spec/serializers/diff_viewer_entity_spec.rb
+++ b/spec/serializers/diff_viewer_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DiffViewerEntity do
diff --git a/spec/serializers/diffs_entity_spec.rb b/spec/serializers/diffs_entity_spec.rb
index 19a843b0cb7..59acbdac3d0 100644
--- a/spec/serializers/diffs_entity_spec.rb
+++ b/spec/serializers/diffs_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DiffsEntity do
diff --git a/spec/serializers/diffs_metadata_entity_spec.rb b/spec/serializers/diffs_metadata_entity_spec.rb
new file mode 100644
index 00000000000..aaca393ec27
--- /dev/null
+++ b/spec/serializers/diffs_metadata_entity_spec.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe DiffsMetadataEntity do
+ let(:user) { create(:user) }
+ let(:project) { create(:project, :repository) }
+ let(:request) { EntityRequest.new(project: project, current_user: user) }
+ let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project) }
+ let(:merge_request_diffs) { merge_request.merge_request_diffs }
+ let(:merge_request_diff) { merge_request_diffs.last }
+
+ let(:entity) do
+ described_class.new(merge_request_diff.diffs,
+ request: request,
+ merge_request: merge_request,
+ merge_request_diffs: merge_request_diffs)
+ end
+
+ context 'as json' do
+ subject { entity.as_json }
+
+ it 'contain only required attributes' do
+ expect(subject.keys).to contain_exactly(
+ # Inherited attributes
+ :real_size, :size, :branch_name,
+ :target_branch_name, :commit, :merge_request_diff,
+ :start_version, :latest_diff, :latest_version_path,
+ :added_lines, :removed_lines, :render_overflow_warning,
+ :email_patch_path, :plain_diff_path,
+ :merge_request_diffs,
+ # Attributes
+ :diff_files
+ )
+ end
+
+ describe 'diff_files' do
+ it 'returns diff files metadata' do
+ payload =
+ DiffFileMetadataEntity.represent(merge_request_diff.diffs.diff_files).as_json
+
+ expect(subject[:diff_files]).to eq(payload)
+ end
+ end
+ end
+end
diff --git a/spec/serializers/discussion_entity_spec.rb b/spec/serializers/discussion_entity_spec.rb
index 138749b0fdf..b194623099d 100644
--- a/spec/serializers/discussion_entity_spec.rb
+++ b/spec/serializers/discussion_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe DiscussionEntity do
diff --git a/spec/serializers/entity_date_helper_spec.rb b/spec/serializers/entity_date_helper_spec.rb
index 73506954965..6f99074c3a2 100644
--- a/spec/serializers/entity_date_helper_spec.rb
+++ b/spec/serializers/entity_date_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EntityDateHelper do
diff --git a/spec/serializers/entity_request_spec.rb b/spec/serializers/entity_request_spec.rb
index 86654adfd54..947c4b165d3 100644
--- a/spec/serializers/entity_request_spec.rb
+++ b/spec/serializers/entity_request_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EntityRequest do
diff --git a/spec/serializers/environment_entity_spec.rb b/spec/serializers/environment_entity_spec.rb
index 906449f470b..b8910fd6eee 100644
--- a/spec/serializers/environment_entity_spec.rb
+++ b/spec/serializers/environment_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EnvironmentEntity do
diff --git a/spec/serializers/environment_serializer_spec.rb b/spec/serializers/environment_serializer_spec.rb
index 375a28a8c72..304457d83a1 100644
--- a/spec/serializers/environment_serializer_spec.rb
+++ b/spec/serializers/environment_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EnvironmentSerializer do
diff --git a/spec/serializers/environment_status_entity_spec.rb b/spec/serializers/environment_status_entity_spec.rb
index cb4749f019f..0687751fd67 100644
--- a/spec/serializers/environment_status_entity_spec.rb
+++ b/spec/serializers/environment_status_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe EnvironmentStatusEntity do
diff --git a/spec/serializers/evidences/evidence_entity_spec.rb b/spec/serializers/evidences/evidence_entity_spec.rb
new file mode 100644
index 00000000000..531708e3be6
--- /dev/null
+++ b/spec/serializers/evidences/evidence_entity_spec.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidences::EvidenceEntity do
+ let(:evidence) { build(:evidence) }
+ let(:entity) { described_class.new(evidence) }
+
+ subject { entity.as_json }
+
+ it 'exposes the expected fields' do
+ expect(subject.keys).to contain_exactly(:release)
+ end
+end
diff --git a/spec/serializers/evidences/evidence_serializer_spec.rb b/spec/serializers/evidences/evidence_serializer_spec.rb
new file mode 100644
index 00000000000..5322f6a43fc
--- /dev/null
+++ b/spec/serializers/evidences/evidence_serializer_spec.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidences::EvidenceSerializer do
+ it 'represents an EvidenceEntity entity' do
+ expect(described_class.entity_class).to eq(Evidences::EvidenceEntity)
+ end
+end
diff --git a/spec/serializers/evidences/issue_entity_spec.rb b/spec/serializers/evidences/issue_entity_spec.rb
new file mode 100644
index 00000000000..915df986887
--- /dev/null
+++ b/spec/serializers/evidences/issue_entity_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidences::IssueEntity do
+ let(:entity) { described_class.new(build(:issue)) }
+
+ subject { entity.as_json }
+
+ it 'exposes the expected fields' do
+ expect(subject.keys).to contain_exactly(:id, :title, :description, :state, :iid, :confidential, :created_at, :due_date)
+ end
+end
diff --git a/spec/serializers/evidences/milestone_entity_spec.rb b/spec/serializers/evidences/milestone_entity_spec.rb
new file mode 100644
index 00000000000..68eb12093da
--- /dev/null
+++ b/spec/serializers/evidences/milestone_entity_spec.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidences::MilestoneEntity do
+ let(:milestone) { build(:milestone) }
+ let(:entity) { described_class.new(milestone) }
+
+ subject { entity.as_json }
+
+ it 'exposes the expected fields' do
+ expect(subject.keys).to contain_exactly(:id, :title, :description, :state, :iid, :created_at, :due_date, :issues)
+ end
+
+ context 'when there are issues linked to this milestone' do
+ let(:issue_1) { build(:issue) }
+ let(:issue_2) { build(:issue) }
+ let(:milestone) { build(:milestone, issues: [issue_1, issue_2]) }
+
+ it 'exposes these issues' do
+ expect(subject[:issues]).to contain_exactly(
+ Evidences::IssueEntity.new(issue_1).as_json,
+ Evidences::IssueEntity.new(issue_2).as_json
+ )
+ end
+ end
+
+ context 'when the release has no milestone' do
+ let(:milestone) { build(:milestone, issues: []) }
+
+ it 'exposes an empty array for milestones' do
+ expect(subject[:issues]).to be_empty
+ end
+ end
+end
diff --git a/spec/serializers/evidences/project_entity_spec.rb b/spec/serializers/evidences/project_entity_spec.rb
new file mode 100644
index 00000000000..01c160425a8
--- /dev/null
+++ b/spec/serializers/evidences/project_entity_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidences::ProjectEntity do
+ let(:entity) { described_class.new(build(:project)) }
+
+ subject { entity.as_json }
+
+ it 'exposes the expected fields' do
+ expect(subject.keys).to contain_exactly(:id, :name, :description, :created_at)
+ end
+end
diff --git a/spec/serializers/evidences/release_entity_spec.rb b/spec/serializers/evidences/release_entity_spec.rb
new file mode 100644
index 00000000000..8e2be748169
--- /dev/null
+++ b/spec/serializers/evidences/release_entity_spec.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidences::ReleaseEntity do
+ let(:release) { build(:release) }
+ let(:entity) { described_class.new(release) }
+
+ subject { entity.as_json }
+
+ it 'exposes the expected fields' do
+ expect(subject.keys).to contain_exactly(:id, :tag_name, :name, :description, :created_at, :project, :milestones)
+ end
+
+ context 'when the release has milestones' do
+ let(:project) { create(:project) }
+ let(:milestone_1) { build(:milestone, project: project) }
+ let(:milestone_2) { build(:milestone, project: project) }
+ let(:release) { build(:release, project: project, milestones: [milestone_1, milestone_2]) }
+
+ it 'exposes these milestones' do
+ expect(subject[:milestones]).to contain_exactly(
+ Evidences::MilestoneEntity.new(milestone_1).as_json,
+ Evidences::MilestoneEntity.new(milestone_2).as_json
+ )
+ end
+ end
+
+ context 'when the release has no milestone' do
+ let(:release) { build(:release, milestones: []) }
+
+ it 'exposes an empty array for milestones' do
+ expect(subject[:milestones]).to be_empty
+ end
+ end
+end
diff --git a/spec/serializers/evidences/release_serializer_spec.rb b/spec/serializers/evidences/release_serializer_spec.rb
new file mode 100644
index 00000000000..a0dbf50137c
--- /dev/null
+++ b/spec/serializers/evidences/release_serializer_spec.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Evidences::ReleaseSerializer do
+ it 'represents an Evidence::ReleaseEntity entity' do
+ expect(described_class.entity_class).to eq(Evidences::ReleaseEntity)
+ end
+end
diff --git a/spec/serializers/group_child_entity_spec.rb b/spec/serializers/group_child_entity_spec.rb
index 00e2f931549..198a55d5433 100644
--- a/spec/serializers/group_child_entity_spec.rb
+++ b/spec/serializers/group_child_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GroupChildEntity do
diff --git a/spec/serializers/group_child_serializer_spec.rb b/spec/serializers/group_child_serializer_spec.rb
index c9e8535585b..128e06cd172 100644
--- a/spec/serializers/group_child_serializer_spec.rb
+++ b/spec/serializers/group_child_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GroupChildSerializer do
diff --git a/spec/serializers/group_variable_entity_spec.rb b/spec/serializers/group_variable_entity_spec.rb
index f6de7d01f98..22c98b418dd 100644
--- a/spec/serializers/group_variable_entity_spec.rb
+++ b/spec/serializers/group_variable_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe GroupVariableEntity do
diff --git a/spec/serializers/issue_entity_spec.rb b/spec/serializers/issue_entity_spec.rb
index 53278062de9..224ed0b402f 100644
--- a/spec/serializers/issue_entity_spec.rb
+++ b/spec/serializers/issue_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe IssueEntity do
diff --git a/spec/serializers/issue_serializer_spec.rb b/spec/serializers/issue_serializer_spec.rb
index b8255e004d0..e25becc4709 100644
--- a/spec/serializers/issue_serializer_spec.rb
+++ b/spec/serializers/issue_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe IssueSerializer do
diff --git a/spec/serializers/job_entity_spec.rb b/spec/serializers/job_entity_spec.rb
index 8de61d4d466..4b2d4701334 100644
--- a/spec/serializers/job_entity_spec.rb
+++ b/spec/serializers/job_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe JobEntity do
diff --git a/spec/serializers/label_serializer_spec.rb b/spec/serializers/label_serializer_spec.rb
index c58c7da1f9e..7e1bb2cc127 100644
--- a/spec/serializers/label_serializer_spec.rb
+++ b/spec/serializers/label_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe LabelSerializer do
diff --git a/spec/serializers/lfs_file_lock_entity_spec.rb b/spec/serializers/lfs_file_lock_entity_spec.rb
index 5919f473a90..4ffffad7d5a 100644
--- a/spec/serializers/lfs_file_lock_entity_spec.rb
+++ b/spec/serializers/lfs_file_lock_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe LfsFileLockEntity do
diff --git a/spec/serializers/merge_request_diff_entity_spec.rb b/spec/serializers/merge_request_diff_entity_spec.rb
index 84f6833d88a..062f17963c0 100644
--- a/spec/serializers/merge_request_diff_entity_spec.rb
+++ b/spec/serializers/merge_request_diff_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MergeRequestDiffEntity do
diff --git a/spec/serializers/merge_request_for_pipeline_entity_spec.rb b/spec/serializers/merge_request_for_pipeline_entity_spec.rb
index e49b45bc7d7..b39fbce8c3a 100644
--- a/spec/serializers/merge_request_for_pipeline_entity_spec.rb
+++ b/spec/serializers/merge_request_for_pipeline_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MergeRequestForPipelineEntity do
diff --git a/spec/serializers/merge_request_serializer_spec.rb b/spec/serializers/merge_request_serializer_spec.rb
index cf0b8ea9b40..a99f11168c0 100644
--- a/spec/serializers/merge_request_serializer_spec.rb
+++ b/spec/serializers/merge_request_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MergeRequestSerializer do
diff --git a/spec/serializers/merge_request_user_entity_spec.rb b/spec/serializers/merge_request_user_entity_spec.rb
index c91ea4aa681..47b9b0a57ab 100644
--- a/spec/serializers/merge_request_user_entity_spec.rb
+++ b/spec/serializers/merge_request_user_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MergeRequestUserEntity do
diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb
index ffbfac9b326..4872b23d26b 100644
--- a/spec/serializers/merge_request_widget_entity_spec.rb
+++ b/spec/serializers/merge_request_widget_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe MergeRequestWidgetEntity do
diff --git a/spec/serializers/note_entity_spec.rb b/spec/serializers/note_entity_spec.rb
index 13cda781cda..cec07cda063 100644
--- a/spec/serializers/note_entity_spec.rb
+++ b/spec/serializers/note_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe NoteEntity do
diff --git a/spec/serializers/paginated_diff_entity_spec.rb b/spec/serializers/paginated_diff_entity_spec.rb
new file mode 100644
index 00000000000..7432e072318
--- /dev/null
+++ b/spec/serializers/paginated_diff_entity_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe PaginatedDiffEntity do
+ let(:user) { create(:user) }
+ let(:request) { double('request', current_user: user) }
+ let(:merge_request) { create(:merge_request, :with_diffs) }
+ let(:diff_batch) { merge_request.merge_request_diff.diffs_in_batch(2, 3, diff_options: nil) }
+ let(:options) do
+ {
+ request: request,
+ merge_request: merge_request,
+ pagination_data: diff_batch.pagination_data
+ }
+ end
+ let(:entity) { described_class.new(diff_batch, options) }
+
+ subject { entity.as_json }
+
+ it 'exposes diff_files' do
+ expect(subject[:diff_files]).to be_present
+ end
+
+ it 'exposes pagination data' do
+ expect(subject[:pagination]).to eq(
+ current_page: 2,
+ next_page: 3,
+ next_page_href: "/#{merge_request.project.full_path}/merge_requests/#{merge_request.iid}/diffs_batch.json?page=3",
+ total_pages: 7
+ )
+ end
+end
diff --git a/spec/serializers/pipeline_details_entity_spec.rb b/spec/serializers/pipeline_details_entity_spec.rb
index 8e73a3e67c6..b180ede51eb 100644
--- a/spec/serializers/pipeline_details_entity_spec.rb
+++ b/spec/serializers/pipeline_details_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PipelineDetailsEntity do
@@ -136,5 +138,40 @@ describe PipelineDetailsEntity do
expect(subject[:flags][:yaml_errors]).to be false
end
end
+
+ context 'when pipeline is triggered by other pipeline' do
+ let(:pipeline) { create(:ci_empty_pipeline) }
+
+ before do
+ create(:ci_sources_pipeline, pipeline: pipeline)
+ end
+
+ it 'contains an information about depedent pipeline' do
+ expect(subject[:triggered_by]).to be_a(Hash)
+ expect(subject[:triggered_by][:path]).not_to be_nil
+ expect(subject[:triggered_by][:details]).not_to be_nil
+ expect(subject[:triggered_by][:details][:status]).not_to be_nil
+ expect(subject[:triggered_by][:project]).not_to be_nil
+ end
+ end
+
+ context 'when pipeline triggered other pipeline' do
+ let(:pipeline) { create(:ci_empty_pipeline) }
+ let(:build) { create(:ci_build, pipeline: pipeline) }
+
+ before do
+ create(:ci_sources_pipeline, source_job: build)
+ create(:ci_sources_pipeline, source_job: build)
+ end
+
+ it 'contains an information about depedent pipeline' do
+ expect(subject[:triggered]).to be_a(Array)
+ expect(subject[:triggered].length).to eq(2)
+ expect(subject[:triggered].first[:path]).not_to be_nil
+ expect(subject[:triggered].first[:details]).not_to be_nil
+ expect(subject[:triggered].first[:details][:status]).not_to be_nil
+ expect(subject[:triggered].first[:project]).not_to be_nil
+ end
+ end
end
end
diff --git a/spec/serializers/pipeline_entity_spec.rb b/spec/serializers/pipeline_entity_spec.rb
index eb9972d3e4d..02c5b817ea4 100644
--- a/spec/serializers/pipeline_entity_spec.rb
+++ b/spec/serializers/pipeline_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PipelineEntity do
diff --git a/spec/serializers/pipeline_serializer_spec.rb b/spec/serializers/pipeline_serializer_spec.rb
index 0ccdea34f74..ce5264ec8bb 100644
--- a/spec/serializers/pipeline_serializer_spec.rb
+++ b/spec/serializers/pipeline_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PipelineSerializer do
@@ -137,6 +139,7 @@ describe PipelineSerializer do
describe 'number of queries when preloaded' do
subject { serializer.represent(resource, preload: true) }
+
let(:resource) { Ci::Pipeline.all }
before do
@@ -156,7 +159,7 @@ describe PipelineSerializer do
it 'verifies number of queries', :request_store do
recorded = ActiveRecord::QueryRecorder.new { subject }
- expected_queries = Gitlab.ee? ? 38 : 31
+ expected_queries = Gitlab.ee? ? 38 : 35
expect(recorded.count).to be_within(2).of(expected_queries)
expect(recorded.cached_count).to eq(0)
@@ -177,7 +180,8 @@ describe PipelineSerializer do
# pipeline. With the same ref this check is cached but if refs are
# different then there is an extra query per ref
# https://gitlab.com/gitlab-org/gitlab-foss/issues/46368
- expected_queries = Gitlab.ee? ? 44 : 38
+ expected_queries = Gitlab.ee? ? 44 : 41
+
expect(recorded.count).to be_within(2).of(expected_queries)
expect(recorded.cached_count).to eq(0)
end
diff --git a/spec/serializers/project_mirror_entity_spec.rb b/spec/serializers/project_mirror_entity_spec.rb
index ad0a8bbdff0..0d64199ecf6 100644
--- a/spec/serializers/project_mirror_entity_spec.rb
+++ b/spec/serializers/project_mirror_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ProjectMirrorEntity do
diff --git a/spec/serializers/project_mirror_serializer_spec.rb b/spec/serializers/project_mirror_serializer_spec.rb
index 5e47163532a..b50c2267ced 100644
--- a/spec/serializers/project_mirror_serializer_spec.rb
+++ b/spec/serializers/project_mirror_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ProjectMirrorSerializer do
diff --git a/spec/serializers/project_note_entity_spec.rb b/spec/serializers/project_note_entity_spec.rb
index dafd1cf603e..7c76f230781 100644
--- a/spec/serializers/project_note_entity_spec.rb
+++ b/spec/serializers/project_note_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ProjectNoteEntity do
diff --git a/spec/serializers/remote_mirror_entity_spec.rb b/spec/serializers/remote_mirror_entity_spec.rb
index 885b0b9b423..5f4aac213be 100644
--- a/spec/serializers/remote_mirror_entity_spec.rb
+++ b/spec/serializers/remote_mirror_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe RemoteMirrorEntity do
diff --git a/spec/serializers/request_aware_entity_spec.rb b/spec/serializers/request_aware_entity_spec.rb
index aa666b961dc..8ddb35f5f61 100644
--- a/spec/serializers/request_aware_entity_spec.rb
+++ b/spec/serializers/request_aware_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe RequestAwareEntity do
diff --git a/spec/serializers/runner_entity_spec.rb b/spec/serializers/runner_entity_spec.rb
index ba99d568eba..11a6aba431b 100644
--- a/spec/serializers/runner_entity_spec.rb
+++ b/spec/serializers/runner_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe RunnerEntity do
diff --git a/spec/serializers/stage_entity_spec.rb b/spec/serializers/stage_entity_spec.rb
index 6b1185d1283..58573df31e7 100644
--- a/spec/serializers/stage_entity_spec.rb
+++ b/spec/serializers/stage_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe StageEntity do
diff --git a/spec/serializers/test_case_entity_spec.rb b/spec/serializers/test_case_entity_spec.rb
index cc5f086ca4e..84203adea2c 100644
--- a/spec/serializers/test_case_entity_spec.rb
+++ b/spec/serializers/test_case_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TestCaseEntity do
diff --git a/spec/serializers/test_report_entity_spec.rb b/spec/serializers/test_report_entity_spec.rb
new file mode 100644
index 00000000000..5913d1c0208
--- /dev/null
+++ b/spec/serializers/test_report_entity_spec.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe TestReportEntity do
+ let(:pipeline) { create(:ci_pipeline, :with_test_reports) }
+ let(:entity) { described_class.new(pipeline.test_reports) }
+
+ describe '#as_json' do
+ subject(:as_json) { entity.as_json }
+
+ it 'contains the total time' do
+ expect(as_json).to include(:total_time)
+ end
+
+ it 'contains the counts' do
+ expect(as_json).to include(:total_count, :success_count, :failed_count, :skipped_count, :error_count)
+ end
+
+ it 'contains the test suites' do
+ expect(as_json).to include(:test_suites)
+ expect(as_json[:test_suites].count).to eq(1)
+ end
+ end
+end
diff --git a/spec/serializers/test_reports_comparer_entity_spec.rb b/spec/serializers/test_reports_comparer_entity_spec.rb
index 4a951bbbde4..2627ad536e4 100644
--- a/spec/serializers/test_reports_comparer_entity_spec.rb
+++ b/spec/serializers/test_reports_comparer_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TestReportsComparerEntity do
diff --git a/spec/serializers/test_reports_comparer_serializer_spec.rb b/spec/serializers/test_reports_comparer_serializer_spec.rb
index 62dc6f486c5..0d833afe9e4 100644
--- a/spec/serializers/test_reports_comparer_serializer_spec.rb
+++ b/spec/serializers/test_reports_comparer_serializer_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TestReportsComparerSerializer do
diff --git a/spec/serializers/test_suite_comparer_entity_spec.rb b/spec/serializers/test_suite_comparer_entity_spec.rb
index 4b2cca2c68c..e22387130a1 100644
--- a/spec/serializers/test_suite_comparer_entity_spec.rb
+++ b/spec/serializers/test_suite_comparer_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TestSuiteComparerEntity do
diff --git a/spec/serializers/test_suite_entity_spec.rb b/spec/serializers/test_suite_entity_spec.rb
new file mode 100644
index 00000000000..54dca3214b7
--- /dev/null
+++ b/spec/serializers/test_suite_entity_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe TestSuiteEntity do
+ let(:pipeline) { create(:ci_pipeline, :with_test_reports) }
+ let(:entity) { described_class.new(pipeline.test_reports.test_suites.values.first) }
+
+ describe '#as_json' do
+ subject(:as_json) { entity.as_json }
+
+ it 'contains the suite name' do
+ expect(as_json).to include(:name)
+ end
+
+ it 'contains the total time' do
+ expect(as_json).to include(:total_time)
+ end
+
+ it 'contains the counts' do
+ expect(as_json).to include(:total_count, :success_count, :failed_count, :skipped_count, :error_count)
+ end
+
+ it 'contains the test cases' do
+ expect(as_json).to include(:test_cases)
+ expect(as_json[:test_cases].count).to eq(4)
+ end
+ end
+end
diff --git a/spec/serializers/trigger_variable_entity_spec.rb b/spec/serializers/trigger_variable_entity_spec.rb
index 66567c05f52..f5a21f943d8 100644
--- a/spec/serializers/trigger_variable_entity_spec.rb
+++ b/spec/serializers/trigger_variable_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe TriggerVariableEntity do
diff --git a/spec/serializers/user_entity_spec.rb b/spec/serializers/user_entity_spec.rb
index cd778e49107..edb49757b38 100644
--- a/spec/serializers/user_entity_spec.rb
+++ b/spec/serializers/user_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe UserEntity do
diff --git a/spec/serializers/variable_entity_spec.rb b/spec/serializers/variable_entity_spec.rb
index 10664ff66ec..742b14fb3d3 100644
--- a/spec/serializers/variable_entity_spec.rb
+++ b/spec/serializers/variable_entity_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe VariableEntity do
diff --git a/spec/services/application_settings/update_service_spec.rb b/spec/services/application_settings/update_service_spec.rb
index 51fb43907a6..6e1fdb7aad0 100644
--- a/spec/services/application_settings/update_service_spec.rb
+++ b/spec/services/application_settings/update_service_spec.rb
@@ -147,35 +147,44 @@ describe ApplicationSettings::UpdateService do
using RSpec::Parameterized::TableSyntax
where(:params_performance_bar_enabled,
- :params_performance_bar_allowed_group_path,
- :previous_performance_bar_allowed_group_id,
- :expected_performance_bar_allowed_group_id) do
- true | '' | nil | nil
- true | '' | 42_000_000 | nil
- true | nil | nil | nil
- true | nil | 42_000_000 | nil
- true | 'foo' | nil | nil
- true | 'foo' | 42_000_000 | nil
- true | 'group_a' | nil | 42_000_000
- true | 'group_b' | 42_000_000 | 43_000_000
- true | 'group_a' | 42_000_000 | 42_000_000
- false | '' | nil | nil
- false | '' | 42_000_000 | nil
- false | nil | nil | nil
- false | nil | 42_000_000 | nil
- false | 'foo' | nil | nil
- false | 'foo' | 42_000_000 | nil
- false | 'group_a' | nil | nil
- false | 'group_b' | 42_000_000 | nil
- false | 'group_a' | 42_000_000 | nil
+ :params_performance_bar_allowed_group_path,
+ :previous_performance_bar_allowed_group_id,
+ :expected_performance_bar_allowed_group_id,
+ :expected_valid) do
+ true | '' | nil | nil | true
+ true | '' | 42_000_000 | nil | true
+ true | nil | nil | nil | true
+ true | nil | 42_000_000 | nil | true
+ true | 'foo' | nil | nil | false
+ true | 'foo' | 42_000_000 | 42_000_000 | false
+ true | 'group_a' | nil | 42_000_000 | true
+ true | 'group_b' | 42_000_000 | 43_000_000 | true
+ true | 'group_b/' | 42_000_000 | 43_000_000 | true
+ true | 'group_a' | 42_000_000 | 42_000_000 | true
+ false | '' | nil | nil | true
+ false | '' | 42_000_000 | nil | true
+ false | nil | nil | nil | true
+ false | nil | 42_000_000 | nil | true
+ false | 'foo' | nil | nil | true
+ false | 'foo' | 42_000_000 | nil | true
+ false | 'group_a' | nil | nil | true
+ false | 'group_b' | 42_000_000 | nil | true
+ false | 'group_a' | 42_000_000 | nil | true
+ nil | '' | nil | nil | true
+ nil | 'foo' | nil | nil | false
+ nil | 'group_a' | nil | 42_000_000 | true
end
with_them do
let(:params) do
{
- performance_bar_enabled: params_performance_bar_enabled,
performance_bar_allowed_group_path: params_performance_bar_allowed_group_path
- }
+ }.tap do |params_hash|
+ # Treat nil in the table as missing
+ unless params_performance_bar_enabled.nil?
+ params_hash[:performance_bar_enabled] = params_performance_bar_enabled
+ end
+ end
end
before do
@@ -202,6 +211,14 @@ describe ApplicationSettings::UpdateService do
.not_to change(application_settings, :performance_bar_allowed_group_id)
end
end
+
+ it 'adds errors to the model for invalid params' do
+ expect(subject.execute).to eq(expected_valid)
+
+ unless expected_valid
+ expect(application_settings.errors[:performance_bar_allowed_group_id]).to be_present
+ end
+ end
end
context 'when :performance_bar_allowed_group_path is not present' do
@@ -221,7 +238,7 @@ describe ApplicationSettings::UpdateService do
let(:group) { create(:group) }
let(:params) { { performance_bar_allowed_group_path: group.full_path } }
- it 'implicitely defaults to true' do
+ it 'implicitly defaults to true' do
expect { subject.execute }
.to change(application_settings, :performance_bar_allowed_group_id)
.from(nil).to(group.id)
@@ -295,4 +312,26 @@ describe ApplicationSettings::UpdateService do
expect(application_settings.raw_blob_request_limit).to eq(600)
end
end
+
+ context 'when protected path settings are passed' do
+ let(:params) do
+ {
+ throttle_protected_paths_enabled: 1,
+ throttle_protected_paths_period_in_seconds: 600,
+ throttle_protected_paths_requests_per_period: 100,
+ protected_paths_raw: "/users/password\r\n/users/sign_in\r\n"
+ }
+ end
+
+ it 'updates protected path settings' do
+ subject.execute
+
+ application_settings.reload
+
+ expect(application_settings.throttle_protected_paths_enabled).to be_truthy
+ expect(application_settings.throttle_protected_paths_period_in_seconds).to eq(600)
+ expect(application_settings.throttle_protected_paths_requests_per_period).to eq(100)
+ expect(application_settings.protected_paths).to eq(['/users/password', '/users/sign_in'])
+ end
+ end
end
diff --git a/spec/services/boards/issues/create_service_spec.rb b/spec/services/boards/issues/create_service_spec.rb
index 33637419f83..ef7b7fdbaac 100644
--- a/spec/services/boards/issues/create_service_spec.rb
+++ b/spec/services/boards/issues/create_service_spec.rb
@@ -10,7 +10,7 @@ describe Boards::Issues::CreateService do
let(:label) { create(:label, project: project, name: 'in-progress') }
let!(:list) { create(:list, board: board, label: label, position: 0) }
- subject(:service) { described_class.new(board.parent, project, user, board_id: board.id, list_id: list.id, title: 'New issue') }
+ subject(:service) { described_class.new(board.resource_parent, project, user, board_id: board.id, list_id: list.id, title: 'New issue') }
before do
project.add_developer(user)
diff --git a/spec/services/boards/lists/update_service_spec.rb b/spec/services/boards/lists/update_service_spec.rb
index a5411a2fb3a..243e0fc50ad 100644
--- a/spec/services/boards/lists/update_service_spec.rb
+++ b/spec/services/boards/lists/update_service_spec.rb
@@ -9,9 +9,9 @@ describe Boards::Lists::UpdateService do
shared_examples 'moving list' do
context 'when user can admin list' do
it 'calls Lists::MoveService to update list position' do
- board.parent.add_developer(user)
+ board.resource_parent.add_developer(user)
- expect(Boards::Lists::MoveService).to receive(:new).with(board.parent, user, params).and_call_original
+ expect(Boards::Lists::MoveService).to receive(:new).with(board.resource_parent, user, params).and_call_original
expect_any_instance_of(Boards::Lists::MoveService).to receive(:execute).with(list)
service.execute(list)
@@ -30,7 +30,7 @@ describe Boards::Lists::UpdateService do
shared_examples 'updating list preferences' do
context 'when user can read list' do
it 'updates list preference for user' do
- board.parent.add_guest(user)
+ board.resource_parent.add_guest(user)
service.execute(list)
@@ -48,7 +48,7 @@ describe Boards::Lists::UpdateService do
end
describe '#execute' do
- let(:service) { described_class.new(board.parent, user, params) }
+ let(:service) { described_class.new(board.resource_parent, user, params) }
context 'when position parameter is present' do
let(:params) { { position: 1 } }
diff --git a/spec/services/boards/visits/create_service_spec.rb b/spec/services/boards/visits/create_service_spec.rb
index 6baf7ac9deb..203c287f396 100644
--- a/spec/services/boards/visits/create_service_spec.rb
+++ b/spec/services/boards/visits/create_service_spec.rb
@@ -10,7 +10,7 @@ describe Boards::Visits::CreateService do
let(:project) { create(:project) }
let(:project_board) { create(:board, project: project) }
- subject(:service) { described_class.new(project_board.parent, user) }
+ subject(:service) { described_class.new(project_board.resource_parent, user) }
it 'returns nil when there is no user' do
service.current_user = nil
@@ -35,7 +35,7 @@ describe Boards::Visits::CreateService do
let(:group) { create(:group) }
let(:group_board) { create(:board, group: group) }
- subject(:service) { described_class.new(group_board.parent, user) }
+ subject(:service) { described_class.new(group_board.resource_parent, user) }
it 'returns nil when there is no user' do
service.current_user = nil
diff --git a/spec/services/bulk_push_event_payload_service_spec.rb b/spec/services/bulk_push_event_payload_service_spec.rb
new file mode 100644
index 00000000000..661c3540aa0
--- /dev/null
+++ b/spec/services/bulk_push_event_payload_service_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe BulkPushEventPayloadService do
+ let(:event) { create(:push_event) }
+
+ let(:push_data) do
+ {
+ action: :created,
+ ref_count: 4,
+ ref_type: :branch
+ }
+ end
+
+ subject { described_class.new(event, push_data) }
+
+ it 'creates a PushEventPayload' do
+ push_event_payload = subject.execute
+
+ expect(push_event_payload).to be_persisted
+ expect(push_event_payload.action).to eq(push_data[:action].to_s)
+ expect(push_event_payload.commit_count).to eq(0)
+ expect(push_event_payload.ref_count).to eq(push_data[:ref_count])
+ expect(push_event_payload.ref_type).to eq(push_data[:ref_type].to_s)
+ end
+end
diff --git a/spec/services/ci/create_pipeline_service/rules_spec.rb b/spec/services/ci/create_pipeline_service/rules_spec.rb
new file mode 100644
index 00000000000..40a3b115cb5
--- /dev/null
+++ b/spec/services/ci/create_pipeline_service/rules_spec.rb
@@ -0,0 +1,94 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Ci::CreatePipelineService do
+ context 'rules' do
+ let(:user) { create(:admin) }
+ let(:ref) { 'refs/heads/master' }
+ let(:source) { :push }
+ let(:service) { described_class.new(project, user, { ref: ref }) }
+ let(:pipeline) { service.execute(source) }
+ let(:build_names) { pipeline.builds.pluck(:name) }
+
+ before do
+ stub_ci_pipeline_yaml_file(config)
+ allow_any_instance_of(Ci::BuildScheduleWorker).to receive(:perform).and_return(true)
+ end
+
+ context 'exists:' do
+ let(:config) do
+ <<-EOY
+ regular-job:
+ script: 'echo Hello, World!'
+
+ rules-job:
+ script: "echo hello world, $CI_COMMIT_REF_NAME"
+ rules:
+ - exists:
+ - README.md
+ when: manual
+ - exists:
+ - app.rb
+ when: on_success
+
+ delayed-job:
+ script: "echo See you later, World!"
+ rules:
+ - exists:
+ - README.md
+ when: delayed
+ start_in: 4 hours
+ EOY
+ end
+ let(:regular_job) { pipeline.builds.find_by(name: 'regular-job') }
+ let(:rules_job) { pipeline.builds.find_by(name: 'rules-job') }
+ let(:delayed_job) { pipeline.builds.find_by(name: 'delayed-job') }
+
+ context 'with matches' do
+ let(:project) { create(:project, :custom_repo, files: { 'README.md' => '' }) }
+
+ it 'creates two jobs' do
+ expect(pipeline).to be_persisted
+ expect(build_names).to contain_exactly('regular-job', 'rules-job', 'delayed-job')
+ end
+
+ it 'sets when: for all jobs' do
+ expect(regular_job.when).to eq('on_success')
+ expect(rules_job.when).to eq('manual')
+ expect(delayed_job.when).to eq('delayed')
+ expect(delayed_job.options[:start_in]).to eq('4 hours')
+ end
+ end
+
+ context 'with matches on the second rule' do
+ let(:project) { create(:project, :custom_repo, files: { 'app.rb' => '' }) }
+
+ it 'includes both jobs' do
+ expect(pipeline).to be_persisted
+ expect(build_names).to contain_exactly('regular-job', 'rules-job')
+ end
+
+ it 'sets when: for the created rules job based on the second clause' do
+ expect(regular_job.when).to eq('on_success')
+ expect(rules_job.when).to eq('on_success')
+ end
+ end
+
+ context 'without matches' do
+ let(:project) { create(:project, :custom_repo, files: { 'useless_script.rb' => '' }) }
+
+ it 'only persists the job without rules' do
+ expect(pipeline).to be_persisted
+ expect(regular_job).to be_persisted
+ expect(rules_job).to be_nil
+ expect(delayed_job).to be_nil
+ end
+
+ it 'sets when: for the created job' do
+ expect(regular_job.when).to eq('on_success')
+ end
+ end
+ end
+ end
+end
diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb
index 1a5fdac1c95..fd5f72c4c46 100644
--- a/spec/services/ci/create_pipeline_service_spec.rb
+++ b/spec/services/ci/create_pipeline_service_spec.rb
@@ -71,6 +71,7 @@ describe Ci::CreatePipelineService do
expect(Gitlab::Metrics).to receive(:counter)
.with(:pipelines_created_total, "Counter of pipelines created")
.and_call_original
+ allow(Gitlab::Metrics).to receive(:counter).and_call_original # allow other counters
pipeline
end
@@ -735,6 +736,28 @@ describe Ci::CreatePipelineService do
end
end
+ context 'when environment with duplicate names' do
+ let(:ci_yaml) do
+ {
+ deploy: { environment: { name: 'production' }, script: 'ls' },
+ deploy_2: { environment: { name: 'production' }, script: 'ls' }
+ }
+ end
+
+ before do
+ stub_ci_pipeline_yaml_file(YAML.dump(ci_yaml))
+ end
+
+ it 'creates a pipeline with the environment' do
+ result = execute_service
+
+ expect(result).to be_persisted
+ expect(Environment.find_by(name: 'production')).to be_present
+ expect(result.builds.first.deployment).to be_persisted
+ expect(result.builds.first.deployment.deployable).to be_a(Ci::Build)
+ end
+ end
+
context 'when builds with auto-retries are configured' do
let(:pipeline) { execute_service }
let(:rspec_job) { pipeline.builds.find_by(name: 'rspec') }
diff --git a/spec/services/ci/pipeline_trigger_service_spec.rb b/spec/services/ci/pipeline_trigger_service_spec.rb
index 76251b5b557..24d42f402f4 100644
--- a/spec/services/ci/pipeline_trigger_service_spec.rb
+++ b/spec/services/ci/pipeline_trigger_service_spec.rb
@@ -11,76 +11,158 @@ describe Ci::PipelineTriggerService do
describe '#execute' do
let(:user) { create(:user) }
- let(:trigger) { create(:ci_trigger, project: project, owner: user) }
let(:result) { described_class.new(project, user, params).execute }
before do
project.add_developer(user)
end
- context 'when trigger belongs to a different project' do
- let(:params) { { token: trigger.token, ref: 'master', variables: nil } }
- let(:trigger) { create(:ci_trigger, project: create(:project), owner: user) }
+ context 'with a trigger token' do
+ let(:trigger) { create(:ci_trigger, project: project, owner: user) }
- it 'does nothing' do
- expect { result }.not_to change { Ci::Pipeline.count }
- end
- end
-
- context 'when params have an existsed trigger token' do
- context 'when params have an existsed ref' do
+ context 'when trigger belongs to a different project' do
let(:params) { { token: trigger.token, ref: 'master', variables: nil } }
+ let(:trigger) { create(:ci_trigger, project: create(:project), owner: user) }
- it 'triggers a pipeline' do
- expect { result }.to change { Ci::Pipeline.count }.by(1)
- expect(result[:pipeline].ref).to eq('master')
- expect(result[:pipeline].project).to eq(project)
- expect(result[:pipeline].user).to eq(trigger.owner)
- expect(result[:pipeline].trigger_requests.to_a)
- .to eq(result[:pipeline].builds.map(&:trigger_request).uniq)
- expect(result[:status]).to eq(:success)
+ it 'does nothing' do
+ expect { result }.not_to change { Ci::Pipeline.count }
end
+ end
- context 'when commit message has [ci skip]' do
- before do
- allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { '[ci skip]' }
- end
+ context 'when params have an existsed trigger token' do
+ context 'when params have an existsed ref' do
+ let(:params) { { token: trigger.token, ref: 'master', variables: nil } }
- it 'ignores [ci skip] and create as general' do
+ it 'triggers a pipeline' do
expect { result }.to change { Ci::Pipeline.count }.by(1)
+ expect(result[:pipeline].ref).to eq('master')
+ expect(result[:pipeline].project).to eq(project)
+ expect(result[:pipeline].user).to eq(trigger.owner)
+ expect(result[:pipeline].trigger_requests.to_a)
+ .to eq(result[:pipeline].builds.map(&:trigger_request).uniq)
expect(result[:status]).to eq(:success)
end
+
+ context 'when commit message has [ci skip]' do
+ before do
+ allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { '[ci skip]' }
+ end
+
+ it 'ignores [ci skip] and create as general' do
+ expect { result }.to change { Ci::Pipeline.count }.by(1)
+ expect(result[:status]).to eq(:success)
+ end
+ end
+
+ context 'when params have a variable' do
+ let(:params) { { token: trigger.token, ref: 'master', variables: variables } }
+ let(:variables) { { 'AAA' => 'AAA123' } }
+
+ it 'has a variable' do
+ expect { result }.to change { Ci::PipelineVariable.count }.by(1)
+ .and change { Ci::TriggerRequest.count }.by(1)
+ expect(result[:pipeline].variables.map { |v| { v.key => v.value } }.first).to eq(variables)
+ expect(result[:pipeline].trigger_requests.last.variables).to be_nil
+ end
+ end
end
- context 'when params have a variable' do
- let(:params) { { token: trigger.token, ref: 'master', variables: variables } }
- let(:variables) { { 'AAA' => 'AAA123' } }
+ context 'when params have a non-existsed ref' do
+ let(:params) { { token: trigger.token, ref: 'invalid-ref', variables: nil } }
- it 'has a variable' do
- expect { result }.to change { Ci::PipelineVariable.count }.by(1)
- .and change { Ci::TriggerRequest.count }.by(1)
- expect(result[:pipeline].variables.map { |v| { v.key => v.value } }.first).to eq(variables)
- expect(result[:pipeline].trigger_requests.last.variables).to be_nil
+ it 'does not trigger a pipeline' do
+ expect { result }.not_to change { Ci::Pipeline.count }
+ expect(result[:http_status]).to eq(400)
end
end
end
- context 'when params have a non-existsed ref' do
- let(:params) { { token: trigger.token, ref: 'invalid-ref', variables: nil } }
+ context 'when params have a non-existsed trigger token' do
+ let(:params) { { token: 'invalid-token', ref: nil, variables: nil } }
it 'does not trigger a pipeline' do
expect { result }.not_to change { Ci::Pipeline.count }
- expect(result[:http_status]).to eq(400)
+ expect(result).to be_nil
end
end
end
- context 'when params have a non-existsed trigger token' do
- let(:params) { { token: 'invalid-token', ref: nil, variables: nil } }
+ context 'with a pipeline job token' do
+ let!(:pipeline) { create(:ci_empty_pipeline, project: project) }
+ let(:job) { create(:ci_build, :running, pipeline: pipeline, user: user) }
+
+ context 'when job user does not have a permission to read a project' do
+ let(:params) { { token: job.token, ref: 'master', variables: nil } }
+ let(:job) { create(:ci_build, pipeline: pipeline, user: create(:user)) }
+
+ it 'does nothing' do
+ expect { result }.not_to change { Ci::Pipeline.count }
+ end
+ end
+
+ context 'when job is not running' do
+ let(:params) { { token: job.token, ref: 'master', variables: nil } }
+ let(:job) { create(:ci_build, :success, pipeline: pipeline, user: user) }
+
+ it 'does nothing' do
+ expect { result }.not_to change { Ci::Pipeline.count }
+ expect(result[:message]).to eq('400 Job has to be running')
+ end
+ end
- it 'does not trigger a pipeline' do
- expect { result }.not_to change { Ci::Pipeline.count }
- expect(result).to be_nil
+ context 'when params have an existsed job token' do
+ context 'when params have an existsed ref' do
+ let(:params) { { token: job.token, ref: 'master', variables: nil } }
+
+ it 'triggers a pipeline' do
+ expect { result }.to change { Ci::Pipeline.count }.by(1)
+ expect(result[:pipeline].ref).to eq('master')
+ expect(result[:pipeline].project).to eq(project)
+ expect(result[:pipeline].user).to eq(job.user)
+ expect(result[:status]).to eq(:success)
+ end
+
+ context 'when commit message has [ci skip]' do
+ before do
+ allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { '[ci skip]' }
+ end
+
+ it 'ignores [ci skip] and create as general' do
+ expect { result }.to change { Ci::Pipeline.count }.by(1)
+ expect(result[:status]).to eq(:success)
+ end
+ end
+
+ context 'when params have a variable' do
+ let(:params) { { token: job.token, ref: 'master', variables: variables } }
+ let(:variables) { { 'AAA' => 'AAA123' } }
+
+ it 'has a variable' do
+ expect { result }.to change { Ci::PipelineVariable.count }.by(1)
+ .and change { Ci::Sources::Pipeline.count }.by(1)
+ expect(result[:pipeline].variables.map { |v| { v.key => v.value } }.first).to eq(variables)
+ expect(job.sourced_pipelines.last.pipeline_id).to eq(result[:pipeline].id)
+ end
+ end
+ end
+
+ context 'when params have a non-existsed ref' do
+ let(:params) { { token: job.token, ref: 'invalid-ref', variables: nil } }
+
+ it 'does not job a pipeline' do
+ expect { result }.not_to change { Ci::Pipeline.count }
+ expect(result[:http_status]).to eq(400)
+ end
+ end
+ end
+
+ context 'when params have a non-existsed trigger token' do
+ let(:params) { { token: 'invalid-token', ref: nil, variables: nil } }
+
+ it 'does not trigger a pipeline' do
+ expect { result }.not_to change { Ci::Pipeline.count }
+ expect(result).to be_nil
+ end
end
end
end
diff --git a/spec/services/ci/process_pipeline_service_spec.rb b/spec/services/ci/process_pipeline_service_spec.rb
index 1b28d2d4d02..05adec8b745 100644
--- a/spec/services/ci/process_pipeline_service_spec.rb
+++ b/spec/services/ci/process_pipeline_service_spec.rb
@@ -422,6 +422,18 @@ describe Ci::ProcessPipelineService, '#execute' do
end
end
+ context 'when an exception is raised during a persistent ref creation' do
+ before do
+ successful_build('test', stage_idx: 0)
+
+ allow_any_instance_of(Ci::PersistentRef).to receive(:delete_refs) { raise ArgumentError }
+ end
+
+ it 'process the pipeline' do
+ expect { process_pipeline }.not_to raise_error
+ end
+ end
+
context 'when there are manual action in earlier stages' do
context 'when first stage has only optional manual actions' do
before do
@@ -907,6 +919,10 @@ describe Ci::ProcessPipelineService, '#execute' do
create(:ci_build, :created, pipeline: pipeline, name: name, **opts)
end
+ def successful_build(name, **opts)
+ create(:ci_build, :success, pipeline: pipeline, name: name, **opts)
+ end
+
def delayed_options
{ when: 'delayed', options: { script: %w(echo), start_in: '1 minute' } }
end
diff --git a/spec/services/ci/register_job_service_spec.rb b/spec/services/ci/register_job_service_spec.rb
index 874945c8585..2f2c525ccc4 100644
--- a/spec/services/ci/register_job_service_spec.rb
+++ b/spec/services/ci/register_job_service_spec.rb
@@ -501,6 +501,22 @@ module Ci
expect(pending_job).to be_archived_failure
end
end
+
+ context 'when an exception is raised during a persistent ref creation' do
+ before do
+ allow_any_instance_of(Ci::PersistentRef).to receive(:exist?) { false }
+ allow_any_instance_of(Ci::PersistentRef).to receive(:create_ref) { raise ArgumentError }
+ end
+
+ subject { execute(specific_runner, {}) }
+
+ it 'picks the build' do
+ expect(subject).to eq(pending_job)
+
+ pending_job.reload
+ expect(pending_job).to be_running
+ end
+ end
end
describe '#register_success' do
diff --git a/spec/services/ci/retry_build_service_spec.rb b/spec/services/ci/retry_build_service_spec.rb
index 281c7438eee..b1368f7776b 100644
--- a/spec/services/ci/retry_build_service_spec.rb
+++ b/spec/services/ci/retry_build_service_spec.rb
@@ -204,6 +204,16 @@ describe Ci::RetryBuildService do
expect(build).to be_retried
expect(build.reload).to be_retried
end
+
+ context 'when build with deployment is retried' do
+ let!(:build) do
+ create(:ci_build, :with_deployment, :deploy_to_production, pipeline: pipeline, stage_id: stage.id)
+ end
+
+ it 'creates a new deployment' do
+ expect { new_build }.to change { Deployment.count }.by(1)
+ end
+ end
end
context 'when user does not have ability to execute build' do
diff --git a/spec/services/ci/stop_environments_service_spec.rb b/spec/services/ci/stop_environments_service_spec.rb
index 890fa5bc009..ed92625a2cc 100644
--- a/spec/services/ci/stop_environments_service_spec.rb
+++ b/spec/services/ci/stop_environments_service_spec.rb
@@ -121,8 +121,8 @@ describe Ci::StopEnvironmentsService do
merge_requests_as_head_pipeline: [merge_request])
end
- let!(:review_job) { create(:ci_build, :start_review_app, pipeline: pipeline, project: project) }
- let!(:stop_review_job) { create(:ci_build, :stop_review_app, :manual, pipeline: pipeline, project: project) }
+ let!(:review_job) { create(:ci_build, :with_deployment, :start_review_app, pipeline: pipeline, project: project) }
+ let!(:stop_review_job) { create(:ci_build, :with_deployment, :stop_review_app, :manual, pipeline: pipeline, project: project) }
before do
review_job.deployment.success!
diff --git a/spec/services/clusters/gcp/finalize_creation_service_spec.rb b/spec/services/clusters/gcp/finalize_creation_service_spec.rb
index 5f91acb8e84..43dbea959a2 100644
--- a/spec/services/clusters/gcp/finalize_creation_service_spec.rb
+++ b/spec/services/clusters/gcp/finalize_creation_service_spec.rb
@@ -107,6 +107,9 @@ describe Clusters::Gcp::FinalizeCreationService, '#execute' do
namespace: 'default'
}
)
+
+ stub_kubeclient_get_cluster_role_binding_error(api_url, 'gitlab-admin')
+ stub_kubeclient_create_cluster_role_binding(api_url)
end
end
@@ -133,9 +136,6 @@ describe Clusters::Gcp::FinalizeCreationService, '#execute' do
context 'With an RBAC cluster' do
before do
provider.legacy_abac = false
-
- stub_kubeclient_get_cluster_role_binding_error(api_url, 'gitlab-admin')
- stub_kubeclient_create_cluster_role_binding(api_url)
end
include_context 'kubernetes information successfully fetched'
@@ -152,4 +152,22 @@ describe Clusters::Gcp::FinalizeCreationService, '#execute' do
it_behaves_like 'kubernetes information not successfully fetched'
end
+
+ context 'With a Cloud Run cluster' do
+ before do
+ provider.cloud_run = true
+ end
+
+ include_context 'kubernetes information successfully fetched'
+
+ it_behaves_like 'success'
+
+ it 'has knative pre-installed' do
+ subject
+ cluster.reload
+
+ expect(cluster.application_knative).to be_present
+ expect(cluster.application_knative).to be_pre_installed
+ end
+ end
end
diff --git a/spec/services/create_snippet_service_spec.rb b/spec/services/create_snippet_service_spec.rb
index 7d2491b3a49..1751029a78c 100644
--- a/spec/services/create_snippet_service_spec.rb
+++ b/spec/services/create_snippet_service_spec.rb
@@ -3,26 +3,28 @@
require 'spec_helper'
describe CreateSnippetService do
- before do
- @user = create :user
- @admin = create :user, admin: true
- @opts = {
+ let(:user) { create(:user) }
+ let(:admin) { create(:user, :admin) }
+ let(:opts) { base_opts.merge(extra_opts) }
+ let(:base_opts) do
+ {
title: 'Test snippet',
file_name: 'snippet.rb',
content: 'puts "hello world"',
visibility_level: Gitlab::VisibilityLevel::PRIVATE
}
end
+ let(:extra_opts) { {} }
context 'When public visibility is restricted' do
+ let(:extra_opts) { { visibility_level: Gitlab::VisibilityLevel::PUBLIC } }
+
before do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
-
- @opts.merge!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
end
it 'non-admins are not able to create a public snippet' do
- snippet = create_snippet(nil, @user, @opts)
+ snippet = create_snippet(nil, user, opts)
expect(snippet.errors.messages).to have_key(:visibility_level)
expect(snippet.errors.messages[:visibility_level].first).to(
match('has been restricted')
@@ -30,37 +32,81 @@ describe CreateSnippetService do
end
it 'admins are able to create a public snippet' do
- snippet = create_snippet(nil, @admin, @opts)
+ snippet = create_snippet(nil, admin, opts)
expect(snippet.errors.any?).to be_falsey
expect(snippet.visibility_level).to eq(Gitlab::VisibilityLevel::PUBLIC)
end
describe "when visibility level is passed as a string" do
+ let(:extra_opts) { { visibility: 'internal' } }
+
before do
- @opts[:visibility] = 'internal'
- @opts.delete(:visibility_level)
+ base_opts.delete(:visibility_level)
end
it "assigns the correct visibility level" do
- snippet = create_snippet(nil, @user, @opts)
+ snippet = create_snippet(nil, user, opts)
expect(snippet.errors.any?).to be_falsey
expect(snippet.visibility_level).to eq(Gitlab::VisibilityLevel::INTERNAL)
end
end
end
+ context 'checking spam' do
+ shared_examples 'marked as spam' do
+ let(:snippet) { create_snippet(nil, admin, opts) }
+
+ it 'marks a snippet as a spam ' do
+ expect(snippet).to be_spam
+ end
+
+ it 'invalidates the snippet' do
+ expect(snippet).to be_invalid
+ end
+
+ it 'creates a new spam_log' do
+ expect { snippet }
+ .to log_spam(title: snippet.title, noteable_type: 'PersonalSnippet')
+ end
+
+ it 'assigns a spam_log to an issue' do
+ expect(snippet.spam_log).to eq(SpamLog.last)
+ end
+ end
+
+ let(:extra_opts) do
+ { visibility_level: Gitlab::VisibilityLevel::PUBLIC, request: double(:request, env: {}) }
+ end
+
+ before do
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
+ end
+
+ [true, false, nil].each do |allow_possible_spam|
+ context "when recaptcha_disabled flag is #{allow_possible_spam.inspect}" do
+ before do
+ stub_feature_flags(allow_possible_spam: allow_possible_spam) unless allow_possible_spam.nil?
+ end
+
+ it_behaves_like 'marked as spam'
+ end
+ end
+ end
+
describe 'usage counter' do
let(:counter) { Gitlab::UsageDataCounters::SnippetCounter }
it 'increments count' do
expect do
- create_snippet(nil, @admin, @opts)
+ create_snippet(nil, admin, opts)
end.to change { counter.read(:create) }.by 1
end
it 'does not increment count if create fails' do
expect do
- create_snippet(nil, @admin, {})
+ create_snippet(nil, admin, {})
end.not_to change { counter.read(:create) }
end
end
diff --git a/spec/services/deployments/after_create_service_spec.rb b/spec/services/deployments/after_create_service_spec.rb
new file mode 100644
index 00000000000..b34483ea85b
--- /dev/null
+++ b/spec/services/deployments/after_create_service_spec.rb
@@ -0,0 +1,240 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Deployments::AfterCreateService do
+ let(:user) { create(:user) }
+ let(:project) { create(:project, :repository) }
+ let(:options) { { name: 'production' } }
+
+ let(:job) do
+ create(:ci_build,
+ :with_deployment,
+ ref: 'master',
+ tag: false,
+ environment: 'production',
+ options: { environment: options },
+ project: project)
+ end
+
+ let(:deployment) { job.deployment }
+ let(:environment) { deployment.environment }
+
+ subject(:service) { described_class.new(deployment) }
+
+ before do
+ allow(Deployments::FinishedWorker).to receive(:perform_async)
+ job.success! # Create/Succeed deployment
+ end
+
+ describe '#execute' do
+ let(:store) { Gitlab::EtagCaching::Store.new }
+
+ it 'invalidates the environment etag cache' do
+ old_value = store.get(environment.etag_cache_key)
+
+ service.execute
+
+ expect(store.get(environment.etag_cache_key)).not_to eq(old_value)
+ end
+
+ it 'creates ref' do
+ expect_any_instance_of(Repository)
+ .to receive(:create_ref)
+ .with(deployment.ref, deployment.send(:ref_path))
+
+ service.execute
+ end
+
+ it 'updates merge request metrics' do
+ expect_any_instance_of(Deployment)
+ .to receive(:update_merge_request_metrics!)
+
+ service.execute
+ end
+
+ it 'returns the deployment' do
+ expect(subject.execute).to eq(deployment)
+ end
+
+ it 'returns the deployment when could not save the environment' do
+ allow(environment).to receive(:save).and_return(false)
+
+ expect(subject.execute).to eq(deployment)
+ end
+
+ it 'returns the deployment when environment is stopped' do
+ allow(environment).to receive(:stopped?).and_return(true)
+
+ expect(subject.execute).to eq(deployment)
+ end
+
+ context 'when start action is defined' do
+ let(:options) { { name: 'production', action: 'start' } }
+
+ context 'and environment is stopped' do
+ before do
+ environment.stop
+ end
+
+ it 'makes environment available' do
+ service.execute
+
+ expect(environment.reload).to be_available
+ end
+ end
+ end
+
+ context 'when variables are used' do
+ let(:options) do
+ { name: 'review-apps/$CI_COMMIT_REF_NAME',
+ url: 'http://$CI_COMMIT_REF_NAME.review-apps.gitlab.com' }
+ end
+
+ before do
+ environment.update(name: 'review-apps/master')
+ job.update(environment: 'review-apps/$CI_COMMIT_REF_NAME')
+ end
+
+ it 'does not create a new environment' do
+ expect { subject.execute }.not_to change { Environment.count }
+ end
+
+ it 'updates external url' do
+ subject.execute
+
+ expect(subject.environment.name).to eq('review-apps/master')
+ expect(subject.environment.external_url).to eq('http://master.review-apps.gitlab.com')
+ end
+ end
+ end
+
+ describe '#expanded_environment_url' do
+ subject { service.send(:expanded_environment_url) }
+
+ context 'when yaml environment uses $CI_COMMIT_REF_NAME' do
+ let(:job) do
+ create(:ci_build,
+ :with_deployment,
+ ref: 'master',
+ environment: 'production',
+ project: project,
+ options: { environment: { name: 'production', url: 'http://review/$CI_COMMIT_REF_NAME' } })
+ end
+
+ it { is_expected.to eq('http://review/master') }
+ end
+
+ context 'when yaml environment uses $CI_ENVIRONMENT_SLUG' do
+ let(:job) do
+ create(:ci_build,
+ :with_deployment,
+ ref: 'master',
+ environment: 'prod-slug',
+ project: project,
+ options: { environment: { name: 'prod-slug', url: 'http://review/$CI_ENVIRONMENT_SLUG' } })
+ end
+
+ it { is_expected.to eq('http://review/prod-slug') }
+ end
+
+ context 'when yaml environment uses yaml_variables containing symbol keys' do
+ let(:job) do
+ create(:ci_build,
+ :with_deployment,
+ yaml_variables: [{ key: :APP_HOST, value: 'host' }],
+ environment: 'production',
+ project: project,
+ options: { environment: { name: 'production', url: 'http://review/$APP_HOST' } })
+ end
+
+ it { is_expected.to eq('http://review/host') }
+ end
+
+ context 'when yaml environment does not have url' do
+ let(:job) { create(:ci_build, :with_deployment, environment: 'staging', project: project) }
+
+ it 'returns the external_url from persisted environment' do
+ is_expected.to be_nil
+ end
+ end
+ end
+
+ describe "merge request metrics" do
+ let(:merge_request) { create(:merge_request, target_branch: 'master', source_branch: 'feature', source_project: project) }
+
+ context "while updating the 'first_deployed_to_production_at' time" do
+ before do
+ merge_request.metrics.update!(merged_at: 1.hour.ago)
+ end
+
+ context "for merge requests merged before the current deploy" do
+ it "sets the time if the deploy's environment is 'production'" do
+ service.execute
+
+ expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_like_time(deployment.finished_at)
+ end
+
+ context 'when job deploys to staging' do
+ let(:job) do
+ create(:ci_build,
+ :with_deployment,
+ ref: 'master',
+ tag: false,
+ environment: 'staging',
+ options: { environment: { name: 'staging' } },
+ project: project)
+ end
+
+ it "doesn't set the time if the deploy's environment is not 'production'" do
+ service.execute
+
+ expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_nil
+ end
+ end
+
+ it 'does not raise errors if the merge request does not have a metrics record' do
+ merge_request.metrics.destroy
+
+ expect(merge_request.reload.metrics).to be_nil
+ expect { service.execute }.not_to raise_error
+ end
+ end
+
+ context "for merge requests merged before the previous deploy" do
+ context "if the 'first_deployed_to_production_at' time is already set" do
+ it "does not overwrite the older 'first_deployed_to_production_at' time" do
+ # Previous deploy
+ service.execute
+
+ expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_like_time(deployment.finished_at)
+
+ # Current deploy
+ Timecop.travel(12.hours.from_now) do
+ service.execute
+
+ expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_like_time(deployment.finished_at)
+ end
+ end
+ end
+
+ context "if the 'first_deployed_to_production_at' time is not already set" do
+ it "does not overwrite the older 'first_deployed_to_production_at' time" do
+ # Previous deploy
+ time = 5.minutes.from_now
+ Timecop.freeze(time) { service.execute }
+
+ expect(merge_request.reload.metrics.merged_at).to be < merge_request.reload.metrics.first_deployed_to_production_at
+
+ previous_time = merge_request.reload.metrics.first_deployed_to_production_at
+
+ # Current deploy
+ Timecop.freeze(time + 12.hours) { service.execute }
+
+ expect(merge_request.reload.metrics.first_deployed_to_production_at).to eq(previous_time)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/services/deployments/create_service_spec.rb b/spec/services/deployments/create_service_spec.rb
new file mode 100644
index 00000000000..e41c8259ea9
--- /dev/null
+++ b/spec/services/deployments/create_service_spec.rb
@@ -0,0 +1,92 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Deployments::CreateService do
+ let(:environment) do
+ double(
+ :environment,
+ deployment_platform: double(:platform, cluster_id: 1),
+ project_id: 2,
+ id: 3
+ )
+ end
+
+ let(:user) { double(:user) }
+
+ describe '#execute' do
+ let(:service) { described_class.new(environment, user, {}) }
+
+ it 'does not run the AfterCreateService service if the deployment is not persisted' do
+ deploy = double(:deployment, persisted?: false)
+
+ expect(service)
+ .to receive(:create_deployment)
+ .and_return(deploy)
+
+ expect(Deployments::AfterCreateService)
+ .not_to receive(:new)
+
+ expect(service.execute).to eq(deploy)
+ end
+
+ it 'runs the AfterCreateService service if the deployment is persisted' do
+ deploy = double(:deployment, persisted?: true)
+ after_service = double(:after_create_service)
+
+ expect(service)
+ .to receive(:create_deployment)
+ .and_return(deploy)
+
+ expect(Deployments::AfterCreateService)
+ .to receive(:new)
+ .with(deploy)
+ .and_return(after_service)
+
+ expect(after_service)
+ .to receive(:execute)
+
+ expect(service.execute).to eq(deploy)
+ end
+ end
+
+ describe '#create_deployment' do
+ it 'creates a deployment' do
+ environment = build(:environment)
+ service = described_class.new(environment, user, {})
+
+ expect(environment.deployments)
+ .to receive(:create)
+ .with(an_instance_of(Hash))
+
+ service.create_deployment
+ end
+ end
+
+ describe '#deployment_attributes' do
+ it 'only includes attributes that we want to persist' do
+ service = described_class.new(
+ environment,
+ user,
+ ref: 'master',
+ tag: true,
+ sha: '123',
+ foo: 'bar',
+ on_stop: 'stop',
+ status: 'running'
+ )
+
+ expect(service.deployment_attributes).to eq(
+ cluster_id: 1,
+ project_id: 2,
+ environment_id: 3,
+ ref: 'master',
+ tag: true,
+ sha: '123',
+ user: user,
+ on_stop: 'stop',
+ status: 'running'
+ )
+ end
+ end
+end
diff --git a/spec/services/deployments/update_service_spec.rb b/spec/services/deployments/update_service_spec.rb
new file mode 100644
index 00000000000..a923099b82c
--- /dev/null
+++ b/spec/services/deployments/update_service_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Deployments::UpdateService do
+ let(:deploy) { create(:deployment, :running) }
+ let(:service) { described_class.new(deploy, status: 'success') }
+
+ describe '#execute' do
+ it 'updates the status of a deployment' do
+ expect(service.execute).to eq(true)
+ expect(deploy.status).to eq('success')
+ end
+ end
+end
diff --git a/spec/services/event_create_service_spec.rb b/spec/services/event_create_service_spec.rb
index 9f2c3fec62c..eb738ac80b1 100644
--- a/spec/services/event_create_service_spec.rb
+++ b/spec/services/event_create_service_spec.rb
@@ -113,40 +113,21 @@ describe EventCreateService do
end
end
- describe '#push', :clean_gitlab_redis_shared_state do
- let(:project) { create(:project) }
- let(:user) { create(:user) }
-
- let(:push_data) do
- {
- commits: [
- {
- id: '1cf19a015df3523caf0a1f9d40c98a267d6a2fc2',
- message: 'This is a commit'
- }
- ],
- before: '0000000000000000000000000000000000000000',
- after: '1cf19a015df3523caf0a1f9d40c98a267d6a2fc2',
- total_commits_count: 1,
- ref: 'refs/heads/my-branch'
- }
- end
-
+ shared_examples_for 'service for creating a push event' do |service_class|
it 'creates a new event' do
- expect { service.push(project, user, push_data) }.to change { Event.count }
+ expect { subject }.to change { Event.count }
end
it 'creates the push event payload' do
- expect(PushEventPayloadService).to receive(:new)
+ expect(service_class).to receive(:new)
.with(an_instance_of(PushEvent), push_data)
.and_call_original
- service.push(project, user, push_data)
+ subject
end
it 'updates user last activity' do
- expect { service.push(project, user, push_data) }
- .to change { user.last_activity_on }.to(Date.today)
+ expect { subject }.to change { user.last_activity_on }.to(Date.today)
end
it 'caches the last push event for the user' do
@@ -154,7 +135,7 @@ describe EventCreateService do
.to receive(:cache_last_push_event)
.with(an_instance_of(PushEvent))
- service.push(project, user, push_data)
+ subject
end
it 'does not create any event data when an error is raised' do
@@ -163,17 +144,56 @@ describe EventCreateService do
allow(payload_service).to receive(:execute)
.and_raise(RuntimeError)
- allow(PushEventPayloadService).to receive(:new)
+ allow(service_class).to receive(:new)
.and_return(payload_service)
- expect { service.push(project, user, push_data) }
- .to raise_error(RuntimeError)
-
+ expect { subject }.to raise_error(RuntimeError)
expect(Event.count).to eq(0)
expect(PushEventPayload.count).to eq(0)
end
end
+ describe '#push', :clean_gitlab_redis_shared_state do
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+
+ let(:push_data) do
+ {
+ commits: [
+ {
+ id: '1cf19a015df3523caf0a1f9d40c98a267d6a2fc2',
+ message: 'This is a commit'
+ }
+ ],
+ before: '0000000000000000000000000000000000000000',
+ after: '1cf19a015df3523caf0a1f9d40c98a267d6a2fc2',
+ total_commits_count: 1,
+ ref: 'refs/heads/my-branch'
+ }
+ end
+
+ subject { service.push(project, user, push_data) }
+
+ it_behaves_like 'service for creating a push event', PushEventPayloadService
+ end
+
+ describe '#bulk_push', :clean_gitlab_redis_shared_state do
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+
+ let(:push_data) do
+ {
+ action: :created,
+ ref_count: 4,
+ ref_type: :branch
+ }
+ end
+
+ subject { service.bulk_push(project, user, push_data) }
+
+ it_behaves_like 'service for creating a push event', BulkPushEventPayloadService
+ end
+
describe 'Project' do
let(:user) { create :user }
let(:project) { create(:project) }
diff --git a/spec/services/git/base_hooks_service_spec.rb b/spec/services/git/base_hooks_service_spec.rb
index 874df9a68cd..f3f6b36a18d 100644
--- a/spec/services/git/base_hooks_service_spec.rb
+++ b/spec/services/git/base_hooks_service_spec.rb
@@ -8,14 +8,12 @@ describe Git::BaseHooksService do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
- let(:service) { described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref) }
-
let(:oldrev) { Gitlab::Git::BLANK_SHA }
let(:newrev) { "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b" } # gitlab-test: git rev-parse refs/tags/v1.1.0
let(:ref) { 'refs/tags/v1.1.0' }
- describe '#execute_project_hooks' do
- class TestService < described_class
+ let(:test_service) do
+ Class.new(described_class) do
def hook_name
:push_hooks
end
@@ -24,12 +22,44 @@ describe Git::BaseHooksService do
[]
end
end
+ end
- let(:project) { create(:project, :repository) }
+ subject { test_service.new(project, user, params) }
+
+ let(:params) do
+ {
+ change: {
+ oldrev: oldrev,
+ newrev: newrev,
+ ref: ref
+ }
+ }
+ end
- subject { TestService.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref) }
+ describe 'push event' do
+ it 'creates push event' do
+ expect_next_instance_of(EventCreateService) do |service|
+ expect(service).to receive(:push)
+ end
+
+ subject.execute
+ end
- context '#execute_hooks' do
+ context 'create_push_event is set to false' do
+ before do
+ params[:create_push_event] = false
+ end
+
+ it 'does not create push event' do
+ expect(EventCreateService).not_to receive(:new)
+
+ subject.execute
+ end
+ end
+ end
+
+ describe 'project hooks and services' do
+ context 'hooks' do
before do
expect(project).to receive(:has_active_hooks?).and_return(active)
end
@@ -57,7 +87,7 @@ describe Git::BaseHooksService do
end
end
- context '#execute_services' do
+ context 'services' do
before do
expect(project).to receive(:has_active_services?).and_return(active)
end
@@ -84,78 +114,20 @@ describe Git::BaseHooksService do
end
end
end
- end
-
- describe 'with remote mirrors' do
- class TestService < described_class
- def commits
- []
- end
- end
-
- let(:project) { create(:project, :repository, :remote_mirror) }
-
- subject { TestService.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref) }
-
- before do
- expect(subject).to receive(:execute_project_hooks)
- end
-
- context 'when remote mirror feature is enabled' do
- it 'fails stuck remote mirrors' do
- allow(project).to receive(:update_remote_mirrors).and_return(project.remote_mirrors)
- expect(project).to receive(:mark_stuck_remote_mirrors_as_failed!)
-
- subject.execute
- end
-
- it 'updates remote mirrors' do
- expect(project).to receive(:update_remote_mirrors)
-
- subject.execute
- end
- end
- context 'when remote mirror feature is disabled' do
+ context 'execute_project_hooks param set to false' do
before do
- stub_application_setting(mirror_available: false)
- end
-
- context 'with remote mirrors global setting overridden' do
- before do
- project.remote_mirror_available_overridden = true
- end
+ params[:execute_project_hooks] = false
- it 'fails stuck remote mirrors' do
- allow(project).to receive(:update_remote_mirrors).and_return(project.remote_mirrors)
- expect(project).to receive(:mark_stuck_remote_mirrors_as_failed!)
-
- subject.execute
- end
-
- it 'updates remote mirrors' do
- expect(project).to receive(:update_remote_mirrors)
-
- subject.execute
- end
+ allow(project).to receive(:has_active_hooks?).and_return(true)
+ allow(project).to receive(:has_active_services?).and_return(true)
end
- context 'without remote mirrors global setting overridden' do
- before do
- project.remote_mirror_available_overridden = false
- end
-
- it 'does not fails stuck remote mirrors' do
- expect(project).not_to receive(:mark_stuck_remote_mirrors_as_failed!)
+ it 'does not execute hooks and services' do
+ expect(project).not_to receive(:execute_hooks)
+ expect(project).not_to receive(:execute_services)
- subject.execute
- end
-
- it 'does not updates remote mirrors' do
- expect(project).not_to receive(:update_remote_mirrors)
-
- subject.execute
- end
+ subject.execute
end
end
end
diff --git a/spec/services/git/branch_hooks_service_spec.rb b/spec/services/git/branch_hooks_service_spec.rb
index 2bf7dc32436..085b49f31ab 100644
--- a/spec/services/git/branch_hooks_service_spec.rb
+++ b/spec/services/git/branch_hooks_service_spec.rb
@@ -16,13 +16,7 @@ describe Git::BranchHooksService do
let(:newrev) { commit.id }
let(:service) do
- described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
- end
-
- it 'update remote mirrors' do
- expect(service).to receive(:update_remote_mirrors).and_call_original
-
- service.execute
+ described_class.new(project, user, change: { oldrev: oldrev, newrev: newrev, ref: ref })
end
describe "Git Push Data" do
@@ -356,7 +350,7 @@ describe Git::BranchHooksService do
let(:forked_project) { fork_project(upstream_project, user, repository: true) }
let!(:forked_service) do
- described_class.new(forked_project, user, oldrev: oldrev, newrev: newrev, ref: ref)
+ described_class.new(forked_project, user, change: { oldrev: oldrev, newrev: newrev, ref: ref })
end
context 'when commits already exists in the upstream project' do
diff --git a/spec/services/git/branch_push_service_spec.rb b/spec/services/git/branch_push_service_spec.rb
index f4d1a1e34cd..bf68eb0af20 100644
--- a/spec/services/git/branch_push_service_spec.rb
+++ b/spec/services/git/branch_push_service_spec.rb
@@ -19,7 +19,7 @@ describe Git::BranchPushService, services: true do
describe 'Push branches' do
subject do
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
context 'new branch' do
@@ -70,7 +70,7 @@ describe Git::BranchPushService, services: true do
end
describe "Pipelines" do
- subject { execute_service(project, user, oldrev, newrev, ref) }
+ subject { execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref) }
before do
stub_ci_pipeline_to_return_yaml_file
@@ -121,7 +121,7 @@ describe Git::BranchPushService, services: true do
.to receive(:perform_async)
.with(project.id, user.id, blankrev, 'newrev', ref)
- execute_service(project, user, blankrev, 'newrev', ref )
+ execute_service(project, user, oldrev: blankrev, newrev: 'newrev', ref: ref)
end
end
@@ -130,13 +130,13 @@ describe Git::BranchPushService, services: true do
it "calls the copy attributes method for the first push to the default branch" do
expect(project.repository).to receive(:copy_gitattributes).with('master')
- execute_service(project, user, blankrev, 'newrev', ref)
+ execute_service(project, user, oldrev: blankrev, newrev: 'newrev', ref: ref)
end
it "calls the copy attributes method for changes to the default branch" do
expect(project.repository).to receive(:copy_gitattributes).with(ref)
- execute_service(project, user, 'oldrev', 'newrev', ref)
+ execute_service(project, user, oldrev: 'oldrev', newrev: 'newrev', ref: ref)
end
end
@@ -149,7 +149,7 @@ describe Git::BranchPushService, services: true do
it "does not call copy attributes method" do
expect(project.repository).not_to receive(:copy_gitattributes)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
end
@@ -163,7 +163,7 @@ describe Git::BranchPushService, services: true do
it "when pushing a branch for the first time" do
expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master")
- execute_service(project, user, blankrev, 'newrev', ref)
+ execute_service(project, user, oldrev: blankrev, newrev: 'newrev', ref: ref)
expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.first.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::MAINTAINER])
expect(project.protected_branches.first.merge_access_levels.map(&:access_level)).to eq([Gitlab::Access::MAINTAINER])
@@ -174,7 +174,7 @@ describe Git::BranchPushService, services: true do
expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master")
- execute_service(project, user, blankrev, 'newrev', ref)
+ execute_service(project, user, oldrev: blankrev, newrev: 'newrev', ref: ref)
expect(project.protected_branches).to be_empty
end
@@ -184,7 +184,7 @@ describe Git::BranchPushService, services: true do
expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master")
- execute_service(project, user, blankrev, 'newrev', ref)
+ execute_service(project, user, oldrev: blankrev, newrev: 'newrev', ref: ref)
expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.last.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::DEVELOPER])
@@ -199,7 +199,7 @@ describe Git::BranchPushService, services: true do
expect(project.default_branch).to eq("master")
expect(ProtectedBranches::CreateService).not_to receive(:new)
- execute_service(project, user, blankrev, 'newrev', ref)
+ execute_service(project, user, oldrev: blankrev, newrev: 'newrev', ref: ref)
expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.last.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::NO_ACCESS])
@@ -211,7 +211,7 @@ describe Git::BranchPushService, services: true do
expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master")
- execute_service(project, user, blankrev, 'newrev', ref)
+ execute_service(project, user, oldrev: blankrev, newrev: 'newrev', ref: ref)
expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.first.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::MAINTAINER])
expect(project.protected_branches.first.merge_access_levels.map(&:access_level)).to eq([Gitlab::Access::DEVELOPER])
@@ -219,7 +219,7 @@ describe Git::BranchPushService, services: true do
it "when pushing new commits to existing branch" do
expect(project).to receive(:execute_hooks)
- execute_service(project, user, 'oldrev', 'newrev', ref)
+ execute_service(project, user, oldrev: 'oldrev', newrev: 'newrev', ref: ref)
end
end
end
@@ -249,7 +249,7 @@ describe Git::BranchPushService, services: true do
it "creates a note if a pushed commit mentions an issue" do
expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, commit_author)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
it "only creates a cross-reference note if one doesn't already exist" do
@@ -257,7 +257,7 @@ describe Git::BranchPushService, services: true do
expect(SystemNoteService).not_to receive(:cross_reference).with(issue, commit, commit_author)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
it "defaults to the pushing user if the commit's author is not known" do
@@ -267,7 +267,7 @@ describe Git::BranchPushService, services: true do
)
expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, user)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
it "finds references in the first push to a non-default branch" do
@@ -276,7 +276,7 @@ describe Git::BranchPushService, services: true do
expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, commit_author)
- execute_service(project, user, blankrev, newrev, 'refs/heads/other')
+ execute_service(project, user, oldrev: blankrev, newrev: newrev, ref: 'refs/heads/other')
end
end
@@ -306,14 +306,14 @@ describe Git::BranchPushService, services: true do
context "while saving the 'first_mentioned_in_commit_at' metric for an issue" do
it 'sets the metric for referenced issues' do
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
expect(issue.reload.metrics.first_mentioned_in_commit_at).to be_like_time(commit_time)
end
it 'does not set the metric for non-referenced issues' do
non_referenced_issue = create(:issue, project: project)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
expect(non_referenced_issue.reload.metrics.first_mentioned_in_commit_at).to be_nil
end
@@ -345,18 +345,18 @@ describe Git::BranchPushService, services: true do
context "to default branches" do
it "closes issues" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(Issue.find(issue.id)).to be_closed
end
it "adds a note indicating that the issue is now closed" do
expect(SystemNoteService).to receive(:change_status).with(issue, project, commit_author, "closed", closing_commit)
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
end
it "doesn't create additional cross-reference notes" do
expect(SystemNoteService).not_to receive(:cross_reference)
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
@@ -368,11 +368,11 @@ describe Git::BranchPushService, services: true do
it "creates cross-reference notes" do
expect(SystemNoteService).to receive(:cross_reference).with(issue, closing_commit, commit_author)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
it "doesn't close issues" do
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
expect(Issue.find(issue.id)).to be_opened
end
end
@@ -408,7 +408,7 @@ describe Git::BranchPushService, services: true do
let(:message) { "this is some work.\n\nrelated to JIRA-1" }
it "initiates one api call to jira server to mention the issue" do
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: /mentioned this issue in/
@@ -436,13 +436,13 @@ describe Git::BranchPushService, services: true do
context "using right markdown" do
it "initiates one api call to jira server to close the issue" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).to have_requested(:post, jira_api_transition_url('JIRA-1')).once
end
it "initiates one api call to jira server to comment on the issue" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: comment_body
@@ -459,13 +459,13 @@ describe Git::BranchPushService, services: true do
let(:message) { "this is some work.\n\ncloses #1" }
it "does not initiates one api call to jira server to close the issue" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).not_to have_requested(:post, jira_api_transition_url('JIRA-1'))
end
it "does not initiates one api call to jira server to comment on the issue" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).not_to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: comment_body
@@ -478,13 +478,13 @@ describe Git::BranchPushService, services: true do
let(:message) { "this is some work.\n\ncloses JIRA-1 \n\n closes #{issue.to_reference}" }
it "initiates one api call to jira server to close the jira issue" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).to have_requested(:post, jira_api_transition_url('JIRA-1')).once
end
it "initiates one api call to jira server to comment on the jira issue" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: comment_body
@@ -492,14 +492,14 @@ describe Git::BranchPushService, services: true do
end
it "closes the internal issue" do
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
expect(issue.reload).to be_closed
end
it "adds a note indicating that the issue is now closed" do
expect(SystemNoteService).to receive(:change_status)
.with(issue, project, commit_author, "closed", closing_commit)
- execute_service(project, commit_author, oldrev, newrev, ref)
+ execute_service(project, commit_author, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
end
@@ -517,7 +517,7 @@ describe Git::BranchPushService, services: true do
end
it 'push to first branch updates HEAD' do
- execute_service(project, user, blankrev, newrev, new_ref)
+ execute_service(project, user, oldrev: blankrev, newrev: newrev, ref: new_ref)
end
end
@@ -542,7 +542,7 @@ describe Git::BranchPushService, services: true do
it 'does not perform housekeeping when not needed' do
expect(housekeeping).not_to receive(:execute)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
context 'when housekeeping is needed' do
@@ -553,20 +553,20 @@ describe Git::BranchPushService, services: true do
it 'performs housekeeping' do
expect(housekeeping).to receive(:execute)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
it 'does not raise an exception' do
allow(housekeeping).to receive(:try_obtain_lease).and_return(false)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
it 'increments the push counter' do
expect(housekeeping).to receive(:increment!)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
@@ -577,7 +577,7 @@ describe Git::BranchPushService, services: true do
it 'does nothing' do
expect(::Ci::StopEnvironmentsService).not_to receive(:new)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
@@ -585,7 +585,7 @@ describe Git::BranchPushService, services: true do
it 'does nothing' do
expect(::Ci::StopEnvironmentsService).not_to receive(:new)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
@@ -599,7 +599,7 @@ describe Git::BranchPushService, services: true do
expect(stop_service).to receive(:execute).with(branch)
end
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
end
@@ -611,15 +611,17 @@ describe Git::BranchPushService, services: true do
expect(hooks_service.project).to eq(project)
expect(hooks_service.current_user).to eq(user)
expect(hooks_service.params).to include(
- oldrev: oldrev,
- newrev: newrev,
- ref: ref
+ change: {
+ oldrev: oldrev,
+ newrev: newrev,
+ ref: ref
+ }
)
expect(hooks_service).to receive(:execute)
end
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
@@ -629,13 +631,13 @@ describe Git::BranchPushService, services: true do
it 'does nothing' do
expect(::Git::BranchHooksService).not_to receive(:new)
- execute_service(project, user, oldrev, newrev, ref)
+ execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
end
end
- def execute_service(project, user, oldrev, newrev, ref)
- service = described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
+ def execute_service(project, user, change)
+ service = described_class.new(project, user, change: change)
service.execute
service
end
diff --git a/spec/services/git/process_ref_changes_service_spec.rb b/spec/services/git/process_ref_changes_service_spec.rb
new file mode 100644
index 00000000000..35ddf95b5f6
--- /dev/null
+++ b/spec/services/git/process_ref_changes_service_spec.rb
@@ -0,0 +1,193 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Git::ProcessRefChangesService do
+ let(:project) { create(:project, :repository) }
+ let(:user) { project.owner }
+ let(:params) { { changes: git_changes } }
+
+ subject { described_class.new(project, user, params) }
+
+ shared_examples_for 'service for processing ref changes' do |push_service_class|
+ let(:service) { double(execute: true) }
+ let(:git_changes) { double(branch_changes: [], tag_changes: []) }
+
+ def multiple_changes(change, count)
+ Array.new(count).map.with_index do |n, index|
+ { index: index, oldrev: change[:oldrev], newrev: change[:newrev], ref: "#{change[:ref]}#{n}" }
+ end
+ end
+
+ let(:changes) do
+ [
+ { index: 0, oldrev: Gitlab::Git::BLANK_SHA, newrev: '789012', ref: "#{ref_prefix}/create" },
+ { index: 1, oldrev: '123456', newrev: '789012', ref: "#{ref_prefix}/update" },
+ { index: 2, oldrev: '123456', newrev: Gitlab::Git::BLANK_SHA, ref: "#{ref_prefix}/delete" }
+ ]
+ end
+
+ before do
+ allow(git_changes).to receive(changes_method).and_return(changes)
+ end
+
+ it "calls #{push_service_class}" do
+ expect(push_service_class)
+ .to receive(:new)
+ .with(project, project.owner, hash_including(execute_project_hooks: true, create_push_event: true))
+ .exactly(changes.count).times
+ .and_return(service)
+
+ subject.execute
+ end
+
+ context 'changes exceed push_event_hooks_limit' do
+ let(:push_event_hooks_limit) { 3 }
+
+ let(:changes) do
+ multiple_changes(
+ { oldrev: '123456', newrev: '789012', ref: "#{ref_prefix}/test" },
+ push_event_hooks_limit + 1
+ )
+ end
+
+ before do
+ stub_application_setting(push_event_hooks_limit: push_event_hooks_limit)
+ end
+
+ context 'git_push_execute_all_project_hooks is disabled' do
+ before do
+ stub_feature_flags(git_push_execute_all_project_hooks: false)
+ end
+
+ it "calls #{push_service_class} with execute_project_hooks set to false" do
+ expect(push_service_class)
+ .to receive(:new)
+ .with(project, project.owner, hash_including(execute_project_hooks: false))
+ .exactly(changes.count).times
+ .and_return(service)
+
+ subject.execute
+ end
+ end
+
+ context 'git_push_execute_all_project_hooks is enabled' do
+ before do
+ stub_feature_flags(git_push_execute_all_project_hooks: true)
+ end
+
+ it "calls #{push_service_class} with execute_project_hooks set to true" do
+ expect(push_service_class)
+ .to receive(:new)
+ .with(project, project.owner, hash_including(execute_project_hooks: true))
+ .exactly(changes.count).times
+ .and_return(service)
+
+ subject.execute
+ end
+ end
+ end
+
+ context 'changes exceed push_event_activities_limit per action' do
+ let(:push_event_activities_limit) { 3 }
+
+ let(:changes) do
+ [
+ { oldrev: Gitlab::Git::BLANK_SHA, newrev: '789012', ref: "#{ref_prefix}/create" },
+ { oldrev: '123456', newrev: '789012', ref: "#{ref_prefix}/update" },
+ { oldrev: '123456', newrev: Gitlab::Git::BLANK_SHA, ref: "#{ref_prefix}/delete" }
+ ].map do |change|
+ multiple_changes(change, push_event_activities_limit + 1)
+ end.flatten
+ end
+
+ before do
+ stub_application_setting(push_event_activities_limit: push_event_activities_limit)
+ end
+
+ it "calls #{push_service_class} with create_push_event set to false" do
+ expect(push_service_class)
+ .to receive(:new)
+ .with(project, project.owner, hash_including(create_push_event: false))
+ .exactly(changes.count).times
+ .and_return(service)
+
+ subject.execute
+ end
+
+ it 'creates events per action' do
+ allow(push_service_class).to receive(:new).and_return(service)
+
+ expect { subject.execute }.to change { Event.count }.by(3)
+ end
+ end
+
+ context 'pipeline creation' do
+ context 'with valid .gitlab-ci.yml' do
+ before do
+ stub_ci_pipeline_to_return_yaml_file
+
+ allow_any_instance_of(Project)
+ .to receive(:commit)
+ .and_return(project.commit)
+
+ allow_any_instance_of(Repository)
+ .to receive(:branch_exists?)
+ .and_return(true)
+ end
+
+ context 'when git_push_create_all_pipelines is disabled' do
+ before do
+ stub_feature_flags(git_push_create_all_pipelines: false)
+ end
+
+ it 'creates pipeline for branches and tags' do
+ subject.execute
+
+ expect(Ci::Pipeline.pluck(:ref)).to contain_exactly('create', 'update', 'delete')
+ end
+
+ it "creates exactly #{described_class::PIPELINE_PROCESS_LIMIT} pipelines" do
+ stub_const("#{described_class}::PIPELINE_PROCESS_LIMIT", changes.count - 1)
+
+ expect { subject.execute }.to change { Ci::Pipeline.count }.by(described_class::PIPELINE_PROCESS_LIMIT)
+ end
+ end
+
+ context 'when git_push_create_all_pipelines is enabled' do
+ before do
+ stub_feature_flags(git_push_create_all_pipelines: true)
+ end
+
+ it 'creates all pipelines' do
+ expect { subject.execute }.to change { Ci::Pipeline.count }.by(changes.count)
+ end
+ end
+ end
+
+ context 'with invalid .gitlab-ci.yml' do
+ before do
+ stub_ci_pipeline_yaml_file(nil)
+ end
+
+ it 'does not create a pipeline' do
+ expect { subject.execute }.not_to change { Ci::Pipeline.count }
+ end
+ end
+ end
+ end
+
+ context 'branch changes' do
+ let(:changes_method) { :branch_changes }
+ let(:ref_prefix) { 'refs/heads' }
+
+ it_behaves_like 'service for processing ref changes', Git::BranchPushService
+ end
+
+ context 'tag changes' do
+ let(:changes_method) { :tag_changes }
+ let(:ref_prefix) { 'refs/tags' }
+
+ it_behaves_like 'service for processing ref changes', Git::TagPushService
+ end
+end
diff --git a/spec/services/git/tag_hooks_service_spec.rb b/spec/services/git/tag_hooks_service_spec.rb
index e362577d289..abb5b9b130b 100644
--- a/spec/services/git/tag_hooks_service_spec.rb
+++ b/spec/services/git/tag_hooks_service_spec.rb
@@ -15,13 +15,7 @@ describe Git::TagHooksService, :service do
let(:commit) { tag.dereferenced_target }
let(:service) do
- described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
- end
-
- it 'update remote mirrors' do
- expect(service).to receive(:update_remote_mirrors).and_call_original
-
- service.execute
+ described_class.new(project, user, change: { oldrev: oldrev, newrev: newrev, ref: ref })
end
describe 'System hooks' do
@@ -64,6 +58,7 @@ describe Git::TagHooksService, :service do
describe 'Push data' do
shared_examples_for 'tag push data expectations' do
subject(:push_data) { service.send(:push_data) }
+
it 'has expected push data attributes' do
is_expected.to match a_hash_including(
object_kind: 'tag_push',
diff --git a/spec/services/git/tag_push_service_spec.rb b/spec/services/git/tag_push_service_spec.rb
index 7e008637182..9688041c08c 100644
--- a/spec/services/git/tag_push_service_spec.rb
+++ b/spec/services/git/tag_push_service_spec.rb
@@ -8,7 +8,7 @@ describe Git::TagPushService do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
- let(:service) { described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref) }
+ let(:service) { described_class.new(project, user, change: { oldrev: oldrev, newrev: newrev, ref: ref }) }
let(:oldrev) { Gitlab::Git::BLANK_SHA }
let(:newrev) { "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b" } # gitlab-test: git rev-parse refs/tags/v1.1.0
diff --git a/spec/services/grafana/proxy_service_spec.rb b/spec/services/grafana/proxy_service_spec.rb
new file mode 100644
index 00000000000..694d531c9fc
--- /dev/null
+++ b/spec/services/grafana/proxy_service_spec.rb
@@ -0,0 +1,139 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Grafana::ProxyService do
+ include ReactiveCachingHelpers
+
+ let_it_be(:project) { create(:project) }
+ let_it_be(:grafana_integration) { create(:grafana_integration, project: project) }
+
+ let(:proxy_path) { 'api/v1/query_range' }
+ let(:datasource_id) { '1' }
+ let(:query_params) do
+ {
+ 'query' => 'rate(relevant_metric)',
+ 'start' => '1570441248',
+ 'end' => '1570444848',
+ 'step' => '900'
+ }
+ end
+
+ let(:cache_params) { [project.id, datasource_id, proxy_path, query_params] }
+
+ let(:service) do
+ described_class.new(project, datasource_id, proxy_path, query_params)
+ end
+
+ shared_examples_for 'initializes an instance' do
+ it 'initializes an instance of ProxyService class' do
+ expect(subject).to be_an_instance_of(described_class)
+ expect(subject.project).to eq(project)
+ expect(subject.datasource_id).to eq('1')
+ expect(subject.proxy_path).to eq('api/v1/query_range')
+ expect(subject.query_params).to eq(query_params)
+ end
+ end
+
+ describe '.from_cache' do
+ subject { described_class.from_cache(*cache_params) }
+
+ it_behaves_like 'initializes an instance'
+ end
+
+ describe '#initialize' do
+ subject { service }
+
+ it_behaves_like 'initializes an instance'
+ end
+
+ describe '#execute' do
+ subject(:result) { service.execute }
+
+ context 'when grafana integration is not configured' do
+ before do
+ allow(project).to receive(:grafana_integration).and_return(nil)
+ end
+
+ it 'returns error' do
+ expect(result).to eq(
+ status: :error,
+ message: 'Proxy support for this API is not available currently'
+ )
+ end
+ end
+
+ context 'with caching', :use_clean_rails_memory_store_caching do
+ context 'when value not present in cache' do
+ it 'returns nil' do
+ expect(ReactiveCachingWorker)
+ .to receive(:perform_async)
+ .with(service.class, service.id, *cache_params)
+
+ expect(result).to eq(nil)
+ end
+ end
+
+ context 'when value present in cache' do
+ let(:return_value) { { 'http_status' => 200, 'body' => 'body' } }
+
+ before do
+ stub_reactive_cache(service, return_value, cache_params)
+ end
+
+ it 'returns cached value' do
+ expect(ReactiveCachingWorker)
+ .not_to receive(:perform_async)
+ .with(service.class, service.id, *cache_params)
+
+ expect(result[:http_status]).to eq(return_value[:http_status])
+ expect(result[:body]).to eq(return_value[:body])
+ end
+ end
+ end
+
+ context 'call prometheus api' do
+ let(:client) { service.send(:client) }
+
+ before do
+ synchronous_reactive_cache(service)
+ end
+
+ context 'connection to grafana datasource succeeds' do
+ let(:response) { instance_double(Gitlab::HTTP::Response) }
+ let(:status_code) { 400 }
+ let(:body) { 'body' }
+
+ before do
+ allow(client).to receive(:proxy_datasource).and_return(response)
+
+ allow(response).to receive(:code).and_return(status_code)
+ allow(response).to receive(:body).and_return(body)
+ end
+
+ it 'returns the http status code and body from prometheus' do
+ expect(result).to eq(
+ http_status: status_code,
+ body: body,
+ status: :success
+ )
+ end
+ end
+
+ context 'connection to grafana datasource fails' do
+ before do
+ allow(client).to receive(:proxy_datasource)
+ .and_raise(Grafana::Client::Error, 'Network connection error')
+ end
+
+ it 'returns error' do
+ expect(result).to eq(
+ status: :error,
+ message: 'Network connection error',
+ http_status: :service_unavailable
+ )
+ end
+ end
+ end
+ end
+end
diff --git a/spec/services/groups/destroy_service_spec.rb b/spec/services/groups/destroy_service_spec.rb
index 1ab2e994b7e..d13739cefd9 100644
--- a/spec/services/groups/destroy_service_spec.rb
+++ b/spec/services/groups/destroy_service_spec.rb
@@ -8,7 +8,7 @@ describe Groups::DestroyService do
let!(:user) { create(:user) }
let!(:group) { create(:group) }
let!(:nested_group) { create(:group, parent: group) }
- let!(:project) { create(:project, :legacy_storage, namespace: group) }
+ let!(:project) { create(:project, :repository, :legacy_storage, namespace: group) }
let!(:notification_setting) { create(:notification_setting, source: group)}
let(:gitlab_shell) { Gitlab::Shell.new }
let(:remove_path) { group.path + "+#{group.id}+deleted" }
@@ -119,7 +119,7 @@ describe Groups::DestroyService do
let!(:project) { create(:project, :legacy_storage, :empty_repo, namespace: group) }
it 'removes repository' do
- expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
end
end
@@ -127,7 +127,7 @@ describe Groups::DestroyService do
let!(:project) { create(:project, :empty_repo, namespace: group) }
it 'removes repository' do
- expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
end
end
end
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index 0cbb3122bb0..5ef1fb1932f 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -426,5 +426,22 @@ describe Groups::TransferService do
end
end
end
+
+ context 'when a project in group has container images' do
+ let(:group) { create(:group, :public, :nested) }
+ let!(:project) { create(:project, :repository, :public, namespace: group) }
+
+ before do
+ stub_container_registry_tags(repository: /image/, tags: %w[rc1])
+ create(:container_repository, project: project, name: :image)
+ create(:group_member, :owner, group: new_parent_group, user: user)
+ end
+
+ it 'does not allow group to be transferred' do
+ transfer_service.execute(new_parent_group)
+
+ expect(transfer_service.error).to match(/Docker images in their Container Registry/)
+ end
+ end
end
end
diff --git a/spec/services/groups/update_service_spec.rb b/spec/services/groups/update_service_spec.rb
index 12e9c2b2f3a..ca8eaf4c970 100644
--- a/spec/services/groups/update_service_spec.rb
+++ b/spec/services/groups/update_service_spec.rb
@@ -148,6 +148,30 @@ describe Groups::UpdateService do
end
end
+ context 'projects in group have container images' do
+ let(:service) { described_class.new(public_group, user, path: SecureRandom.hex) }
+ let(:project) { create(:project, :internal, group: public_group) }
+
+ before do
+ stub_container_registry_tags(repository: /image/, tags: %w[rc1])
+ create(:container_repository, project: project, name: :image)
+ end
+
+ it 'does not allow path to be changed' do
+ result = described_class.new(public_group, user, path: 'new-path').execute
+
+ expect(result).to eq false
+ expect(public_group.errors[:base].first).to match(/Docker images in their Container Registry/)
+ end
+
+ it 'allows other settings to be changed' do
+ result = described_class.new(public_group, user, name: 'new-name').execute
+
+ expect(result).to eq true
+ expect(public_group.reload.name).to eq('new-name')
+ end
+ end
+
context 'for a subgroup' do
let(:subgroup) { create(:group, :private, parent: private_group) }
diff --git a/spec/services/issues/close_service_spec.rb b/spec/services/issues/close_service_spec.rb
index 642a49d57d5..1f7d564b6ec 100644
--- a/spec/services/issues/close_service_spec.rb
+++ b/spec/services/issues/close_service_spec.rb
@@ -8,6 +8,7 @@ describe Issues::CloseService do
let(:user2) { create(:user, email: "user2@example.com") }
let(:guest) { create(:user) }
let(:issue) { create(:issue, title: "My issue", project: project, assignees: [user2], author: create(:user)) }
+ let(:external_issue) { ExternalIssue.new('JIRA-123', project) }
let(:closing_merge_request) { create(:merge_request, source_project: project) }
let(:closing_commit) { create(:commit, project: project) }
let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
@@ -36,6 +37,16 @@ describe Issues::CloseService do
expect(service.execute(issue)).to eq(issue)
end
+ it 'closes the external issue even when the user is not authorized to do so' do
+ allow(service).to receive(:can?).with(user, :update_issue, external_issue)
+ .and_return(false)
+
+ expect(service).to receive(:close_issue)
+ .with(external_issue, closed_via: nil, notifications: true, system_note: true)
+
+ service.execute(external_issue)
+ end
+
it 'closes the issue when the user is authorized to do so' do
allow(service).to receive(:can?).with(user, :update_issue, issue)
.and_return(true)
diff --git a/spec/services/issues/create_service_spec.rb b/spec/services/issues/create_service_spec.rb
index b7bedc2f97e..5dc6b6176ee 100644
--- a/spec/services/issues/create_service_spec.rb
+++ b/spec/services/issues/create_service_spec.rb
@@ -344,7 +344,7 @@ describe Issues::CreateService do
end
before do
- allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true)
+ stub_feature_flags(allow_possible_spam: false)
end
context 'when recaptcha was verified' do
@@ -384,31 +384,67 @@ describe Issues::CreateService do
end
context 'when recaptcha was not verified' do
+ before do
+ expect_next_instance_of(SpamService) do |spam_service|
+ expect(spam_service).to receive_messages(check_for_spam?: true)
+ end
+ end
+
context 'when akismet detects spam' do
before do
- allow_any_instance_of(AkismetService).to receive(:spam?).and_return(true)
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
end
- it 'marks an issue as a spam ' do
- expect(issue).to be_spam
- end
+ context 'when issuables_recaptcha_enabled feature flag is true' do
+ it 'marks an issue as a spam ' do
+ expect(issue).to be_spam
+ end
- it 'an issue is not valid ' do
- expect(issue.valid?).to be_falsey
- end
+ it 'invalidates the issue' do
+ expect(issue).to be_invalid
+ end
+
+ it 'creates a new spam_log' do
+ expect { issue }
+ .to log_spam(title: issue.title, description: issue.description, user_id: user.id, noteable_type: 'Issue')
+ end
- it 'creates a new spam_log' do
- expect {issue}.to change {SpamLog.count}.from(0).to(1)
+ it 'assigns a spam_log to an issue' do
+ expect(issue.spam_log).to eq(SpamLog.last)
+ end
end
- it 'assigns a spam_log to an issue' do
- expect(issue.spam_log).to eq(SpamLog.last)
+ context 'when issuable_recaptcha_enabled feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: true)
+ end
+
+ it 'does not mark an issue as a spam ' do
+ expect(issue).not_to be_spam
+ end
+
+ it 'accepts the ​issue as valid' do
+ expect(issue).to be_valid
+ end
+
+ it 'creates a new spam_log' do
+ expect { issue }
+ .to log_spam(title: issue.title, description: issue.description, user_id: user.id, noteable_type: 'Issue')
+ end
+
+ it 'assigns a spam_log to an issue' do
+ expect(issue.spam_log).to eq(SpamLog.last)
+ end
end
end
context 'when akismet does not detect spam' do
before do
- allow_any_instance_of(AkismetService).to receive(:spam?).and_return(false)
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: false)
+ end
end
it 'does not mark an issue as a spam ' do
diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb
index 55254b61ac8..154bfec0da2 100644
--- a/spec/services/issues/update_service_spec.rb
+++ b/spec/services/issues/update_service_spec.rb
@@ -6,7 +6,8 @@ describe Issues::UpdateService, :mailer do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:user3) { create(:user) }
- let(:project) { create(:project) }
+ let(:group) { create(:group, :public) }
+ let(:project) { create(:project, :repository, group: group) }
let(:label) { create(:label, project: project) }
let(:label2) { create(:label) }
@@ -667,6 +668,7 @@ describe Issues::UpdateService, :mailer do
context 'updating mentions' do
let(:mentionable) { issue }
+
include_examples 'updating mentions', described_class
end
diff --git a/spec/services/issues/zoom_link_service_spec.rb b/spec/services/issues/zoom_link_service_spec.rb
index baa6d774864..ba3f007c917 100644
--- a/spec/services/issues/zoom_link_service_spec.rb
+++ b/spec/services/issues/zoom_link_service_spec.rb
@@ -38,12 +38,6 @@ describe Issues::ZoomLinkService do
end
end
- shared_context 'feature flag disabled' do
- before do
- stub_feature_flags(issue_zoom_integration: false)
- end
- end
-
shared_context 'insufficient permissions' do
before do
project.add_guest(user)
@@ -57,6 +51,12 @@ describe Issues::ZoomLinkService do
expect(result.payload[:description])
.to eq("#{issue.description}\n\n#{zoom_link}")
end
+
+ it 'tracks the add event' do
+ expect(Gitlab::Tracking).to receive(:event)
+ .with('IncidentManagement::ZoomIntegration', 'add_zoom_meeting', label: 'Issue ID', value: issue.id)
+ result
+ end
end
shared_examples 'cannot add link' do
@@ -78,11 +78,6 @@ describe Issues::ZoomLinkService do
include_examples 'cannot add link'
end
- context 'when feature flag is disabled' do
- include_context 'feature flag disabled'
- include_examples 'cannot add link'
- end
-
context 'with insufficient permissions' do
include_context 'insufficient permissions'
include_examples 'cannot add link'
@@ -113,12 +108,6 @@ describe Issues::ZoomLinkService do
it { is_expected.to eq(true) }
- context 'when feature flag is disabled' do
- include_context 'feature flag disabled'
-
- it { is_expected.to eq(false) }
- end
-
context 'with insufficient permissions' do
include_context 'insufficient permissions'
@@ -152,9 +141,11 @@ describe Issues::ZoomLinkService do
.to eq(issue.description.delete_suffix("\n\n#{zoom_link}"))
end
- context 'when feature flag is disabled' do
- include_context 'feature flag disabled'
- include_examples 'cannot remove link'
+ it 'tracks the remove event' do
+ expect(Gitlab::Tracking).to receive(:event)
+ .with('IncidentManagement::ZoomIntegration', 'remove_zoom_meeting', label: 'Issue ID', value: issue.id)
+
+ result
end
context 'with insufficient permissions' do
@@ -187,12 +178,6 @@ describe Issues::ZoomLinkService do
it { is_expected.to eq(true) }
- context 'when feature flag is disabled' do
- include_context 'feature flag disabled'
-
- it { is_expected.to eq(false) }
- end
-
context 'with insufficient permissions' do
include_context 'insufficient permissions'
diff --git a/spec/services/members/approve_access_request_service_spec.rb b/spec/services/members/approve_access_request_service_spec.rb
index f56c31e51f6..5bbceac3dd0 100644
--- a/spec/services/members/approve_access_request_service_spec.rb
+++ b/spec/services/members/approve_access_request_service_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe Members::ApproveAccessRequestService do
- let(:project) { create(:project, :public, :access_requestable) }
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
+ let(:group) { create(:group, :public) }
let(:current_user) { create(:user) }
let(:access_requester_user) { create(:user) }
let(:access_requester) { source.requesters.find_by!(user_id: access_requester_user.id) }
diff --git a/spec/services/members/request_access_service_spec.rb b/spec/services/members/request_access_service_spec.rb
index 2e5275eb3f2..a0f7ae91bdb 100644
--- a/spec/services/members/request_access_service_spec.rb
+++ b/spec/services/members/request_access_service_spec.rb
@@ -41,7 +41,7 @@ describe Members::RequestAccessService do
context 'when access requests are disabled' do
%i[project group].each do |source_type|
it_behaves_like 'a service raising Gitlab::Access::AccessDeniedError' do
- let(:source) { create(source_type, :public) }
+ let(:source) { create(source_type, :public, :request_access_disabled) }
end
end
end
@@ -49,7 +49,7 @@ describe Members::RequestAccessService do
context 'when current user can request access to the project' do
%i[project group].each do |source_type|
it_behaves_like 'a service creating a access request' do
- let(:source) { create(source_type, :public, :access_requestable) }
+ let(:source) { create(source_type, :public) }
end
end
end
diff --git a/spec/services/merge_requests/create_from_issue_service_spec.rb b/spec/services/merge_requests/create_from_issue_service_spec.rb
index 07e0218e1df..51a5c51f6c3 100644
--- a/spec/services/merge_requests/create_from_issue_service_spec.rb
+++ b/spec/services/merge_requests/create_from_issue_service_spec.rb
@@ -13,6 +13,7 @@ describe MergeRequests::CreateFromIssueService do
let(:custom_source_branch) { 'custom-source-branch' }
subject(:service) { described_class.new(project, user, service_params) }
+
subject(:service_with_custom_source_branch) { described_class.new(project, user, branch_name: custom_source_branch, **service_params) }
before do
diff --git a/spec/services/merge_requests/post_merge_service_spec.rb b/spec/services/merge_requests/post_merge_service_spec.rb
index ffc86f68469..fff6ddf3928 100644
--- a/spec/services/merge_requests/post_merge_service_spec.rb
+++ b/spec/services/merge_requests/post_merge_service_spec.rb
@@ -56,9 +56,11 @@ describe MergeRequests::PostMergeService do
issue = create(:issue, project: project)
allow(merge_request).to receive(:visible_closing_issues_for).and_return([issue])
- allow_any_instance_of(Issues::CloseService).to receive(:execute).with(issue, commit: merge_request).and_raise
+ expect_next_instance_of(Issues::CloseService) do |service|
+ allow(service).to receive(:execute).with(issue, commit: merge_request).and_raise(RuntimeError)
+ end
- expect { described_class.new(project, user, {}).execute(merge_request) }.to raise_error
+ expect { described_class.new(project, user).execute(merge_request) }.to raise_error(RuntimeError)
expect(merge_request.reload).to be_merged
end
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 6ba67c7165c..2dc932c9f2c 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe MergeRequests::RefreshService do
include ProjectForksHelper
+ include ProjectHelpers
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
@@ -756,4 +757,127 @@ describe MergeRequests::RefreshService do
end
end
end
+
+ describe '#abort_ff_merge_requests_with_when_pipeline_succeeds' do
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:source_project) { project }
+ let_it_be(:target_project) { project }
+ let_it_be(:author) { create_user_from_membership(target_project, :developer) }
+ let_it_be(:user) { create(:user) }
+
+ let_it_be(:forked_project) do
+ fork_project(target_project, author, repository: true)
+ end
+
+ let_it_be(:merge_request) do
+ create(:merge_request,
+ author: author,
+ source_project: source_project,
+ source_branch: 'feature',
+ target_branch: 'master',
+ target_project: target_project,
+ auto_merge_enabled: true,
+ auto_merge_strategy: AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS,
+ merge_user: user)
+ end
+
+ let_it_be(:newrev) do
+ target_project
+ .repository
+ .create_file(user, 'test1.txt', 'Test data',
+ message: 'Test commit', branch_name: 'master')
+ end
+
+ let_it_be(:oldrev) do
+ target_project
+ .repository
+ .commit(newrev)
+ .parent_id
+ end
+
+ let(:refresh_service) { service.new(project, user) }
+
+ before do
+ target_project.merge_method = merge_method
+ target_project.save!
+
+ refresh_service.execute(oldrev, newrev, 'refs/heads/master')
+ merge_request.reload
+ end
+
+ let(:aborted_message) do
+ /aborted the automatic merge because target branch was updated/
+ end
+
+ shared_examples 'aborted MWPS' do
+ it 'aborts auto_merge' do
+ expect(merge_request.auto_merge_enabled?).to be_falsey
+ expect(merge_request.notes.last.note).to match(aborted_message)
+ end
+
+ it 'removes merge_user' do
+ expect(merge_request.merge_user).to be_nil
+ end
+
+ it 'does not add todos for merge user' do
+ expect(user.todos.for_target(merge_request)).to be_empty
+ end
+
+ it 'adds todos for merge author' do
+ expect(author.todos.for_target(merge_request)).to be_present.and be_all(&:pending?)
+ end
+ end
+
+ context 'when Project#merge_method is set to FF' do
+ let(:merge_method) { :ff }
+
+ it_behaves_like 'aborted MWPS'
+
+ context 'with forked project' do
+ let(:source_project) { forked_project }
+
+ it_behaves_like 'aborted MWPS'
+ end
+ end
+
+ context 'when Project#merge_method is set to rebase_merge' do
+ let(:merge_method) { :rebase_merge }
+
+ it_behaves_like 'aborted MWPS'
+
+ context 'with forked project' do
+ let(:source_project) { forked_project }
+
+ it_behaves_like 'aborted MWPS'
+ end
+ end
+
+ context 'when Project#merge_method is set to merge' do
+ let(:merge_method) { :merge }
+
+ shared_examples 'maintained MWPS' do
+ it 'does not cancel auto merge' do
+ expect(merge_request.auto_merge_enabled?).to be_truthy
+ expect(merge_request.notes).to be_empty
+ end
+
+ it 'does not change merge_user' do
+ expect(merge_request.merge_user).to eq(user)
+ end
+
+ it 'does not add todos' do
+ expect(author.todos.for_target(merge_request)).to be_empty
+ expect(user.todos.for_target(merge_request)).to be_empty
+ end
+ end
+
+ it_behaves_like 'maintained MWPS'
+
+ context 'with forked project' do
+ let(:source_project) { forked_project }
+
+ it_behaves_like 'maintained MWPS'
+ end
+ end
+ end
end
diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb
index 9688e02d6ac..d3c4c436901 100644
--- a/spec/services/merge_requests/update_service_spec.rb
+++ b/spec/services/merge_requests/update_service_spec.rb
@@ -5,7 +5,8 @@ require 'spec_helper'
describe MergeRequests::UpdateService, :mailer do
include ProjectForksHelper
- let(:project) { create(:project, :repository) }
+ let(:group) { create(:group, :public) }
+ let(:project) { create(:project, :repository, group: group) }
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:user3) { create(:user) }
@@ -472,6 +473,7 @@ describe MergeRequests::UpdateService, :mailer do
context 'updating mentions' do
let(:mentionable) { merge_request }
+
include_examples 'updating mentions', described_class
end
diff --git a/spec/services/note_summary_spec.rb b/spec/services/note_summary_spec.rb
index e59731207a5..aa4e41f4d8c 100644
--- a/spec/services/note_summary_spec.rb
+++ b/spec/services/note_summary_spec.rb
@@ -46,5 +46,17 @@ describe NoteSummary do
it 'returns metadata hash' do
expect(create_note_summary.metadata).to eq(action: 'icon', commit_count: 5)
end
+
+ context 'description action and noteable has saved_description_version' do
+ before do
+ noteable.saved_description_version = 1
+ end
+
+ subject { described_class.new(noteable, project, user, 'note', action: 'description') }
+
+ it 'sets the description_version metadata' do
+ expect(subject.metadata).to include(description_version: 1)
+ end
+ end
end
end
diff --git a/spec/services/notes/update_service_spec.rb b/spec/services/notes/update_service_spec.rb
index 717eb97fa5a..73fcdd787aa 100644
--- a/spec/services/notes/update_service_spec.rb
+++ b/spec/services/notes/update_service_spec.rb
@@ -3,17 +3,25 @@
require 'spec_helper'
describe Notes::UpdateService do
- let(:project) { create(:project) }
+ let(:group) { create(:group, :public) }
+ let(:project) { create(:project, :public, group: group) }
+ let(:private_group) { create(:group, :private) }
+ let(:private_project) { create(:project, :private, group: private_group) }
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:user3) { create(:user) }
let(:issue) { create(:issue, project: project) }
+ let(:issue2) { create(:issue, project: private_project) }
let(:note) { create(:note, project: project, noteable: issue, author: user, note: "Old note #{user2.to_reference}") }
before do
project.add_maintainer(user)
project.add_developer(user2)
project.add_developer(user3)
+ group.add_developer(user3)
+ private_group.add_developer(user)
+ private_group.add_developer(user2)
+ private_project.add_developer(user3)
end
describe '#execute' do
@@ -46,13 +54,17 @@ describe Notes::UpdateService do
end
context 'todos' do
- let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
+ shared_examples 'does not update todos' do
+ it 'keep todos' do
+ expect(todo.reload).to be_pending
+ end
- context 'when the note change' do
- before do
- update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" })
+ it 'does not create any new todos' do
+ expect(Todo.count).to eq(1)
end
+ end
+ shared_examples 'creates one todo' do
it 'marks todos as done' do
expect(todo.reload).to be_done
end
@@ -62,17 +74,75 @@ describe Notes::UpdateService do
end
end
- context 'when the note does not change' do
- before do
- update_note({ note: "Old note #{user2.to_reference}" })
+ context 'when note includes a user mention' do
+ let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
+
+ context 'when the note does not change mentions' do
+ before do
+ update_note({ note: "Old note #{user2.to_reference}" })
+ end
+
+ it_behaves_like 'does not update todos'
end
- it 'keep todos' do
- expect(todo.reload).to be_pending
+ context 'when the note changes to include one more user mention' do
+ before do
+ update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" })
+ end
+
+ it_behaves_like 'creates one todo'
end
- it 'does not create any new todos' do
- expect(Todo.count).to eq(1)
+ context 'when the note changes to include a group mentions' do
+ before do
+ update_note({ note: "New note #{private_group.to_reference}" })
+ end
+
+ it_behaves_like 'creates one todo'
+ end
+ end
+
+ context 'when note includes a group mention' do
+ context 'when the group is public' do
+ let(:note) { create(:note, project: project, noteable: issue, author: user, note: "Old note #{group.to_reference}") }
+ let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
+
+ context 'when the note does not change mentions' do
+ before do
+ update_note({ note: "Old note #{group.to_reference}" })
+ end
+
+ it_behaves_like 'does not update todos'
+ end
+
+ context 'when the note changes mentions' do
+ before do
+ update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" })
+ end
+
+ it_behaves_like 'creates one todo'
+ end
+ end
+
+ context 'when the group is private' do
+ let(:note) { create(:note, project: project, noteable: issue, author: user, note: "Old note #{private_group.to_reference}") }
+ let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
+
+ context 'when the note does not change mentions' do
+ before do
+ update_note({ note: "Old note #{private_group.to_reference}" })
+ end
+
+ it_behaves_like 'does not update todos'
+ end
+
+ context 'when the note changes mentions' do
+ before do
+ update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" })
+ end
+
+ it_behaves_like 'creates one todo'
+ end
end
end
end
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index bd6734634cb..aa67b87a645 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -678,6 +678,27 @@ describe NotificationService, :mailer do
end
end
+ describe '#send_new_release_notifications' do
+ context 'when recipients for a new release exist' do
+ let(:release) { create(:release) }
+
+ it 'calls new_release_email for each relevant recipient' do
+ user_1 = create(:user)
+ user_2 = create(:user)
+ user_3 = create(:user)
+ recipient_1 = NotificationRecipient.new(user_1, :custom, custom_action: :new_release)
+ recipient_2 = NotificationRecipient.new(user_2, :custom, custom_action: :new_release)
+ allow(NotificationRecipientService).to receive(:build_new_release_recipients).and_return([recipient_1, recipient_2])
+
+ release
+
+ should_email(user_1)
+ should_email(user_2)
+ should_not_email(user_3)
+ end
+ end
+ end
+
describe 'Participating project notification settings have priority over group and global settings if available' do
let!(:group) { create(:group) }
let!(:maintainer) { group.add_owner(create(:user, username: 'maintainer')).user }
@@ -1942,7 +1963,7 @@ describe NotificationService, :mailer do
let(:developer) { create(:user) }
let!(:group) do
- create(:group, :public, :access_requestable) do |group|
+ create(:group, :public) do |group|
group.add_owner(owner)
group.add_maintainer(maintainer)
group.add_developer(developer)
@@ -1968,7 +1989,7 @@ describe NotificationService, :mailer do
end
it_behaves_like 'sends notification only to a maximum of ten, most recently active group owners' do
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:group) { create(:group, :public) }
let(:notification_trigger) { group.request_access(added_user) }
end
end
@@ -2029,7 +2050,7 @@ describe NotificationService, :mailer do
let(:maintainer) { create(:user) }
let!(:project) do
- create(:project, :public, :access_requestable) do |project|
+ create(:project, :public) do |project|
project.add_developer(developer)
project.add_maintainer(maintainer)
end
@@ -2053,7 +2074,7 @@ describe NotificationService, :mailer do
end
it_behaves_like 'sends notification only to a maximum of ten, most recently active project maintainers' do
- let(:project) { create(:project, :public, :access_requestable) }
+ let(:project) { create(:project, :public) }
let(:notification_trigger) { project.request_access(added_user) }
end
end
@@ -2064,7 +2085,7 @@ describe NotificationService, :mailer do
context 'when the project has no maintainers' do
context 'when the group has at least one owner' do
- let!(:project) { create(:project, :public, :access_requestable, namespace: group) }
+ let!(:project) { create(:project, :public, namespace: group) }
before do
reset_delivered_emails!
@@ -2079,14 +2100,14 @@ describe NotificationService, :mailer do
end
it_behaves_like 'sends notification only to a maximum of ten, most recently active group owners' do
- let(:group) { create(:group, :public, :access_requestable) }
+ let(:group) { create(:group, :public) }
let(:notification_trigger) { project.request_access(added_user) }
end
end
context 'when the group does not have any owners' do
let(:group) { create(:group) }
- let!(:project) { create(:project, :public, :access_requestable, namespace: group) }
+ let!(:project) { create(:project, :public, namespace: group) }
context 'recipients' do
before do
@@ -2107,7 +2128,7 @@ describe NotificationService, :mailer do
let(:developer) { create(:user) }
let!(:project) do
- create(:project, :public, :access_requestable, namespace: group) do |project|
+ create(:project, :public, namespace: group) do |project|
project.add_maintainer(maintainer)
project.add_developer(developer)
end
@@ -2128,7 +2149,7 @@ describe NotificationService, :mailer do
end
it_behaves_like 'sends notification only to a maximum of ten, most recently active project maintainers' do
- let(:project) { create(:project, :public, :access_requestable, namespace: group) }
+ let(:project) { create(:project, :public, namespace: group) }
let(:notification_trigger) { project.request_access(added_user) }
end
end
diff --git a/spec/services/projects/after_import_service_spec.rb b/spec/services/projects/after_import_service_spec.rb
index 51d3fd18881..27e8f3c45ba 100644
--- a/spec/services/projects/after_import_service_spec.rb
+++ b/spec/services/projects/after_import_service_spec.rb
@@ -19,6 +19,8 @@ describe Projects::AfterImportService do
allow(housekeeping_service)
.to receive(:execute).and_yield
+
+ expect(housekeeping_service).to receive(:increment!)
end
it 'performs housekeeping' do
diff --git a/spec/services/projects/container_repository/cleanup_tags_service_spec.rb b/spec/services/projects/container_repository/cleanup_tags_service_spec.rb
index 14247f1c71e..14772d172e8 100644
--- a/spec/services/projects/container_repository/cleanup_tags_service_spec.rb
+++ b/spec/services/projects/container_repository/cleanup_tags_service_spec.rb
@@ -157,6 +157,6 @@ describe Projects::ContainerRepository::CleanupTagsService do
def expect_delete(digest)
expect_any_instance_of(ContainerRegistry::Client)
.to receive(:delete_repository_tag)
- .with(repository.path, digest)
+ .with(repository.path, digest) { true }
end
end
diff --git a/spec/services/projects/container_repository/delete_tags_service_spec.rb b/spec/services/projects/container_repository/delete_tags_service_spec.rb
new file mode 100644
index 00000000000..f296ef3a776
--- /dev/null
+++ b/spec/services/projects/container_repository/delete_tags_service_spec.rb
@@ -0,0 +1,135 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Projects::ContainerRepository::DeleteTagsService do
+ set(:user) { create(:user) }
+ set(:project) { create(:project, :private) }
+ set(:repository) { create(:container_repository, :root, project: project) }
+
+ let(:params) { { tags: tags } }
+ let(:service) { described_class.new(project, user, params) }
+
+ before do
+ stub_container_registry_config(enabled: true,
+ api_url: 'http://registry.gitlab',
+ host_port: 'registry.gitlab')
+
+ stub_container_registry_tags(
+ repository: repository.path,
+ tags: %w(latest A Ba Bb C D E))
+
+ stub_tag_digest('latest', 'sha256:configA')
+ stub_tag_digest('A', 'sha256:configA')
+ stub_tag_digest('Ba', 'sha256:configB')
+ end
+
+ describe '#execute' do
+ let(:tags) { %w[A] }
+ subject { service.execute(repository) }
+
+ context 'without permissions' do
+ it { is_expected.to include(status: :error) }
+ end
+
+ context 'with permissions' do
+ before do
+ project.add_developer(user)
+ end
+
+ context 'when no params are specified' do
+ let(:params) { {} }
+
+ it 'does not remove anything' do
+ expect_any_instance_of(ContainerRegistry::Client).not_to receive(:delete_repository_tag)
+
+ is_expected.to include(status: :error)
+ end
+ end
+
+ context 'with empty tags' do
+ let(:tags) { [] }
+
+ it 'does not remove anything' do
+ expect_any_instance_of(ContainerRegistry::Client).not_to receive(:delete_repository_tag)
+
+ is_expected.to include(status: :error)
+ end
+ end
+
+ context 'with dummy tags disabled' do
+ let(:tags) { %w[A Ba] }
+
+ before do
+ stub_feature_flags(container_registry_smart_delete: false)
+ end
+
+ it 'deletes tags one by one' do
+ expect_delete_tag('sha256:configA')
+ expect_delete_tag('sha256:configB')
+ is_expected.to include(status: :success)
+ end
+ end
+
+ context 'with dummy tags enabled' do
+ let(:tags) { %w[A Ba] }
+
+ it 'deletes the tags using a dummy image' do
+ stub_upload("{\n \"config\": {\n }\n}", 'sha256:4435000728ee66e6a80e55637fc22725c256b61de344a2ecdeaac6bdb36e8bc3')
+
+ stub_request(:put, "http://registry.gitlab/v2/#{repository.path}/manifests/A")
+ .to_return(status: 200, body: "", headers: { 'docker-content-digest' => 'sha256:dummy' })
+
+ stub_request(:put, "http://registry.gitlab/v2/#{repository.path}/manifests/Ba")
+ .to_return(status: 200, body: "", headers: { 'docker-content-digest' => 'sha256:dummy' })
+
+ expect_delete_tag('sha256:dummy')
+
+ is_expected.to include(status: :success)
+ end
+
+ it 'succedes when tag delete returns 404' do
+ stub_upload("{\n \"config\": {\n }\n}", 'sha256:4435000728ee66e6a80e55637fc22725c256b61de344a2ecdeaac6bdb36e8bc3')
+
+ stub_request(:put, "http://registry.gitlab/v2/#{repository.path}/manifests/A")
+ .to_return(status: 200, body: "", headers: { 'docker-content-digest' => 'sha256:dummy' })
+
+ stub_request(:put, "http://registry.gitlab/v2/#{repository.path}/manifests/Ba")
+ .to_return(status: 200, body: "", headers: { 'docker-content-digest' => 'sha256:dummy' })
+
+ stub_request(:delete, "http://registry.gitlab/v2/#{repository.path}/manifests/sha256:dummy")
+ .to_return(status: 404, body: "", headers: {})
+
+ is_expected.to include(status: :success)
+ end
+ end
+ end
+ end
+
+ private
+
+ def stub_tag_digest(tag, digest)
+ stub_request(:head, "http://registry.gitlab/v2/#{repository.path}/manifests/#{tag}")
+ .to_return(status: 200, body: "", headers: { 'docker-content-digest' => digest })
+ end
+
+ def stub_digest_config(digest, created_at)
+ allow_any_instance_of(ContainerRegistry::Client)
+ .to receive(:blob)
+ .with(repository.path, digest, nil) do
+ { 'created' => created_at.to_datetime.rfc3339 }.to_json if created_at
+ end
+ end
+
+ def stub_upload(content, digest)
+ expect_any_instance_of(ContainerRegistry::Client)
+ .to receive(:upload_blob)
+ .with(repository.path, content, digest) { double(success?: true ) }
+ end
+
+ def expect_delete_tag(digest)
+ expect_any_instance_of(ContainerRegistry::Client)
+ .to receive(:delete_repository_tag)
+ .with(repository.path, digest) { true }
+ end
+end
diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb
index 9a6f64b825a..2331281bd8e 100644
--- a/spec/services/projects/destroy_service_spec.rb
+++ b/spec/services/projects/destroy_service_spec.rb
@@ -24,8 +24,8 @@ describe Projects::DestroyService do
it 'deletes the project' do
expect(Project.unscoped.all).not_to include(project)
- expect(project.gitlab_shell.exists?(project.repository_storage, path + '.git')).to be_falsey
- expect(project.gitlab_shell.exists?(project.repository_storage, remove_path + '.git')).to be_falsey
+ expect(project.gitlab_shell.repository_exists?(project.repository_storage, path + '.git')).to be_falsey
+ expect(project.gitlab_shell.repository_exists?(project.repository_storage, remove_path + '.git')).to be_falsey
end
end
diff --git a/spec/services/projects/fork_service_spec.rb b/spec/services/projects/fork_service_spec.rb
index b759830d603..7e7e80ca240 100644
--- a/spec/services/projects/fork_service_spec.rb
+++ b/spec/services/projects/fork_service_spec.rb
@@ -50,6 +50,7 @@ describe Projects::ForkService do
it { expect(to_project.star_count).to be_zero }
it { expect(to_project.description).to eq(@from_project.description) }
it { expect(to_project.avatar.file).to be_exists }
+ it { expect(to_project.ci_config_path).to eq(@from_project.ci_config_path) }
# This test is here because we had a bug where the from-project lost its
# avatar after being forked.
@@ -215,7 +216,8 @@ describe Projects::ForkService do
@project = create(:project, :repository,
creator_id: @group_owner.id,
star_count: 777,
- description: 'Wow, such a cool project!')
+ description: 'Wow, such a cool project!',
+ ci_config_path: 'debian/salsa-ci.yml')
@group = create(:group)
@group.add_user(@group_owner, GroupMember::OWNER)
@group.add_user(@developer, GroupMember::DEVELOPER)
@@ -228,14 +230,15 @@ describe Projects::ForkService do
it 'group owner successfully forks project into the group' do
to_project = fork_project(@project, @group_owner, @opts)
- expect(to_project).to be_persisted
- expect(to_project.errors).to be_empty
- expect(to_project.owner).to eq(@group)
- expect(to_project.namespace).to eq(@group)
- expect(to_project.name).to eq(@project.name)
- expect(to_project.path).to eq(@project.path)
- expect(to_project.description).to eq(@project.description)
- expect(to_project.star_count).to be_zero
+ expect(to_project).to be_persisted
+ expect(to_project.errors).to be_empty
+ expect(to_project.owner).to eq(@group)
+ expect(to_project.namespace).to eq(@group)
+ expect(to_project.name).to eq(@project.name)
+ expect(to_project.path).to eq(@project.path)
+ expect(to_project.description).to eq(@project.description)
+ expect(to_project.ci_config_path).to eq(@project.ci_config_path)
+ expect(to_project.star_count).to be_zero
end
end
diff --git a/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb b/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb
index 5b778f16b5a..70785c606a5 100644
--- a/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb
+++ b/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb
@@ -48,8 +48,8 @@ describe Projects::HashedStorage::MigrateRepositoryService do
it 'renames project and wiki repositories' do
service.execute
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.git")).to be_truthy
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_truthy
end
it 'updates project to be hashed and not read-only' do
@@ -84,14 +84,13 @@ describe Projects::HashedStorage::MigrateRepositoryService do
service.execute
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.git")).to be_falsey
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_falsey
expect(project.repository_read_only?).to be_falsey
end
context 'when rollback fails' do
before do
- hashed_storage.ensure_storage_path_exists
gitlab_shell.mv_repository(project.repository_storage, old_disk_path, new_disk_path)
end
diff --git a/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb b/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb
index bd4354a7df3..3ca9ee5bee5 100644
--- a/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb
+++ b/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb
@@ -48,8 +48,8 @@ describe Projects::HashedStorage::RollbackRepositoryService, :clean_gitlab_redis
it 'renames project and wiki repositories' do
service.execute
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.git")).to be_truthy
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.git")).to be_truthy
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_truthy
end
it 'updates project to be legacy and not read-only' do
@@ -84,14 +84,13 @@ describe Projects::HashedStorage::RollbackRepositoryService, :clean_gitlab_redis
service.execute
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.git")).to be_falsey
- expect(gitlab_shell.exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{new_disk_path}.wiki.git")).to be_falsey
expect(project.repository_read_only?).to be_falsey
end
context 'when rollback fails' do
before do
- legacy_storage.ensure_storage_path_exists
gitlab_shell.mv_repository(project.repository_storage, old_disk_path, new_disk_path)
end
diff --git a/spec/services/projects/housekeeping_service_spec.rb b/spec/services/projects/housekeeping_service_spec.rb
index f651db70cbd..c99054d9fd5 100644
--- a/spec/services/projects/housekeeping_service_spec.rb
+++ b/spec/services/projects/housekeeping_service_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe Projects::HousekeepingService do
subject { described_class.new(project) }
+
set(:project) { create(:project, :repository) }
before do
diff --git a/spec/services/projects/import_export/export_service_spec.rb b/spec/services/projects/import_export/export_service_spec.rb
index 404bb55629a..146d656c909 100644
--- a/spec/services/projects/import_export/export_service_spec.rb
+++ b/spec/services/projects/import_export/export_service_spec.rb
@@ -35,20 +35,27 @@ describe Projects::ImportExport::ExportService do
end
it 'saves the repo' do
+ # This spec errors when run against the EE codebase as there will be a third repository
+ # saved (the EE-specific design repository).
+ #
+ # Instead, skip this test when run within EE. There is a spec for the EE-specific design repo
+ # in the corresponding EE spec.
+ skip if Gitlab.ee?
+
# once for the normal repo, once for the wiki
expect(Gitlab::ImportExport::RepoSaver).to receive(:new).twice.and_call_original
service.execute
end
- it 'saves the lfs objects' do
- expect(Gitlab::ImportExport::LfsSaver).to receive(:new).and_call_original
+ it 'saves the wiki repo' do
+ expect(Gitlab::ImportExport::WikiRepoSaver).to receive(:new).and_call_original
service.execute
end
- it 'saves the wiki repo' do
- expect(Gitlab::ImportExport::WikiRepoSaver).to receive(:new).and_call_original
+ it 'saves the lfs objects' do
+ expect(Gitlab::ImportExport::LfsSaver).to receive(:new).and_call_original
service.execute
end
@@ -98,9 +105,9 @@ describe Projects::ImportExport::ExportService do
end
end
- context 'when saver services fail' do
+ context 'when saving services fail' do
before do
- allow(service).to receive(:save_services).and_return(false)
+ allow(service).to receive(:save_exporters).and_return(false)
end
after do
@@ -122,7 +129,7 @@ describe Projects::ImportExport::ExportService do
expect(Rails.logger).to receive(:error)
end
- it 'the after export strategy is not called' do
+ it 'does not call the export strategy' do
expect(service).not_to receive(:execute_after_export_action)
end
end
diff --git a/spec/services/projects/operations/update_service_spec.rb b/spec/services/projects/operations/update_service_spec.rb
index 7e765659b9d..b2f9fd6df79 100644
--- a/spec/services/projects/operations/update_service_spec.rb
+++ b/spec/services/projects/operations/update_service_spec.rb
@@ -170,5 +170,61 @@ describe Projects::Operations::UpdateService do
expect(project.reload.name).to eq(original_name)
end
end
+
+ context 'grafana integration' do
+ let(:params) do
+ {
+ grafana_integration_attributes: {
+ grafana_url: 'http://new.grafana.com',
+ token: 'VerySecureToken='
+ }
+ }
+ end
+
+ context 'without existing grafana integration' do
+ it 'creates an integration' do
+ expect(result[:status]).to eq(:success)
+
+ expected_attrs = params[:grafana_integration_attributes]
+ integration = project.reload.grafana_integration
+
+ expect(integration.grafana_url).to eq(expected_attrs[:grafana_url])
+ expect(integration.token).to eq(expected_attrs[:token])
+ end
+ end
+
+ context 'with an existing grafana integration' do
+ before do
+ create(:grafana_integration, project: project)
+ end
+
+ it 'updates the settings' do
+ expect(result[:status]).to eq(:success)
+
+ expected_attrs = params[:grafana_integration_attributes]
+ integration = project.reload.grafana_integration
+
+ expect(integration.grafana_url).to eq(expected_attrs[:grafana_url])
+ expect(integration.token).to eq(expected_attrs[:token])
+ end
+
+ context 'with all grafana attributes blank in params' do
+ let(:params) do
+ {
+ grafana_integration_attributes: {
+ grafana_url: '',
+ token: ''
+ }
+ }
+ end
+
+ it 'destroys the metrics_setting entry in DB' do
+ expect(result[:status]).to eq(:success)
+
+ expect(project.reload.grafana_integration).to be_nil
+ end
+ end
+ end
+ end
end
end
diff --git a/spec/services/projects/transfer_service_spec.rb b/spec/services/projects/transfer_service_spec.rb
index 6b906f9372c..26d8ac9b479 100644
--- a/spec/services/projects/transfer_service_spec.rb
+++ b/spec/services/projects/transfer_service_spec.rb
@@ -103,7 +103,7 @@ describe Projects::TransferService do
it 'rolls back repo location' do
attempt_project_transfer
- expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be(true)
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{project.disk_path}.git")).to be(true)
expect(original_path).to eq current_path
end
diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb
index b597717c347..fe92b53cd91 100644
--- a/spec/services/projects/update_pages_service_spec.rb
+++ b/spec/services/projects/update_pages_service_spec.rb
@@ -40,6 +40,7 @@ describe Projects::UpdatePagesService do
it "doesn't delete artifacts after deploying" do
expect(execute).to eq(:success)
+ expect(project.pages_metadatum).to be_deployed
expect(build.artifacts?).to eq(true)
end
end
@@ -47,6 +48,7 @@ describe Projects::UpdatePagesService do
it 'succeeds' do
expect(project.pages_deployed?).to be_falsey
expect(execute).to eq(:success)
+ expect(project.pages_metadatum).to be_deployed
expect(project.pages_deployed?).to be_truthy
# Check that all expected files are extracted
@@ -63,16 +65,23 @@ describe Projects::UpdatePagesService do
it 'removes pages after destroy' do
expect(PagesWorker).to receive(:perform_in)
expect(project.pages_deployed?).to be_falsey
+
expect(execute).to eq(:success)
+
+ expect(project.pages_metadatum).to be_deployed
expect(project.pages_deployed?).to be_truthy
+
project.destroy
+
expect(project.pages_deployed?).to be_falsey
+ expect(ProjectPagesMetadatum.find_by_project_id(project)).to be_nil
end
it 'fails if sha on branch is not latest' do
build.update(ref: 'feature')
expect(execute).not_to eq(:success)
+ expect(project.pages_metadatum).not_to be_deployed
end
context 'when using empty file' do
@@ -94,6 +103,7 @@ describe Projects::UpdatePagesService do
it 'succeeds to extract' do
expect(execute).to eq(:success)
+ expect(project.pages_metadatum).to be_deployed
end
end
end
@@ -109,6 +119,7 @@ describe Projects::UpdatePagesService do
build.reload
expect(deploy_status).to be_failed
+ expect(project.pages_metadatum).not_to be_deployed
end
end
@@ -125,6 +136,7 @@ describe Projects::UpdatePagesService do
build.reload
expect(deploy_status).to be_failed
+ expect(project.pages_metadatum).not_to be_deployed
end
end
@@ -138,6 +150,7 @@ describe Projects::UpdatePagesService do
build.reload
expect(deploy_status).to be_failed
+ expect(project.pages_metadatum).not_to be_deployed
end
end
end
@@ -179,6 +192,7 @@ describe Projects::UpdatePagesService do
expect(deploy_status.description)
.to match(/artifacts for pages are too large/)
expect(deploy_status).to be_script_failure
+ expect(project.pages_metadatum).not_to be_deployed
end
end
@@ -196,6 +210,7 @@ describe Projects::UpdatePagesService do
subject.execute
expect(deploy_status.description).not_to be_present
+ expect(project.pages_metadatum).to be_deployed
end
end
diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb
index b65ee16c189..788f83cc233 100644
--- a/spec/services/quick_actions/interpret_service_spec.rb
+++ b/spec/services/quick_actions/interpret_service_spec.rb
@@ -586,6 +586,22 @@ describe QuickActions::InterpretService do
expect(message).to eq('Made this issue confidential.')
end
+
+ context 'when issuable is already confidential' do
+ before do
+ issuable.update(confidential: true)
+ end
+
+ it 'does not return the success message' do
+ _, _, message = service.execute(content, issuable)
+
+ expect(message).to be_empty
+ end
+
+ it 'is not part of the available commands' do
+ expect(service.available_commands(issuable)).not_to include(a_hash_including(name: :confidential))
+ end
+ end
end
shared_examples 'shrug command' do
@@ -1529,12 +1545,20 @@ describe QuickActions::InterpretService do
end
it 'limits to commands passed ' do
- content = "/shrug\n/close"
+ content = "/shrug test\n/close"
text, commands = service.execute(content, issue, only: [:shrug])
expect(commands).to be_empty
- expect(text).to eq("#{described_class::SHRUG}\n/close")
+ expect(text).to eq("test #{described_class::SHRUG}\n/close")
+ end
+
+ it 'preserves leading whitespace ' do
+ content = " - list\n\n/close\n\ntest\n\n"
+
+ text, _ = service.execute(content, issue)
+
+ expect(text).to eq(" - list\n\ntest")
end
context '/create_merge_request command' do
diff --git a/spec/services/spam_service_spec.rb b/spec/services/spam_service_spec.rb
index b9e5e844c1f..76f77583612 100644
--- a/spec/services/spam_service_spec.rb
+++ b/spec/services/spam_service_spec.rb
@@ -44,30 +44,50 @@ describe SpamService do
end
context 'when indicated as spam by akismet' do
+ shared_examples 'akismet spam' do
+ it 'doesnt check as spam when request is missing' do
+ check_spam(issue, nil, false)
+
+ expect(issue).not_to be_spam
+ end
+
+ it 'creates a spam log' do
+ expect { check_spam(issue, request, false) }
+ .to log_spam(title: issue.title, description: issue.description, noteable_type: 'Issue')
+ end
+
+ it 'does not yield to the block' do
+ expect(check_spam(issue, request, false))
+ .to eql(SpamLog.last)
+ end
+ end
+
before do
allow(AkismetService).to receive(:new).and_return(double(spam?: true))
end
- it 'doesnt check as spam when request is missing' do
- check_spam(issue, nil, false)
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
- expect(issue.spam).to be_falsey
- end
+ it_behaves_like 'akismet spam'
- it 'checks as spam' do
- check_spam(issue, request, false)
+ it 'checks as spam' do
+ check_spam(issue, request, false)
- expect(issue.spam).to be_truthy
+ expect(issue.spam).to be_truthy
+ end
end
- it 'creates a spam log' do
- expect { check_spam(issue, request, false) }
- .to change { SpamLog.count }.from(0).to(1)
- end
+ context 'when allow_possible_spam feature flag is true' do
+ it_behaves_like 'akismet spam'
+
+ it 'does not check as spam' do
+ check_spam(issue, request, false)
- it 'doesnt yield block' do
- expect(check_spam(issue, request, false))
- .to eql(SpamLog.last)
+ expect(issue.spam).to be_nil
+ end
end
end
diff --git a/spec/services/system_note_service_spec.rb b/spec/services/system_note_service_spec.rb
index 910fe3b50b7..83101add724 100644
--- a/spec/services/system_note_service_spec.rb
+++ b/spec/services/system_note_service_spec.rb
@@ -3,7 +3,6 @@
require 'spec_helper'
describe SystemNoteService do
- include ProjectForksHelper
include Gitlab::Routing
include RepoHelpers
include AssetsHelpers
@@ -14,270 +13,65 @@ describe SystemNoteService do
let(:noteable) { create(:issue, project: project) }
let(:issue) { noteable }
- shared_examples_for 'a note with overridable created_at' do
- let(:noteable) { create(:issue, project: project, system_note_timestamp: Time.at(42)) }
-
- it 'the note has the correct time' do
- expect(subject.created_at).to eq Time.at(42)
- end
- end
-
- shared_examples_for 'a system note' do
- let(:expected_noteable) { noteable }
- let(:commit_count) { nil }
-
- it 'has the correct attributes', :aggregate_failures do
- expect(subject).to be_valid
- expect(subject).to be_system
-
- expect(subject.noteable).to eq expected_noteable
- expect(subject.project).to eq project
- expect(subject.author).to eq author
-
- expect(subject.system_note_metadata.action).to eq(action)
- expect(subject.system_note_metadata.commit_count).to eq(commit_count)
- end
- end
-
describe '.add_commits' do
- subject { described_class.add_commits(noteable, project, author, new_commits, old_commits, oldrev) }
-
- let(:noteable) { create(:merge_request, source_project: project, target_project: project) }
- let(:new_commits) { noteable.commits }
- let(:old_commits) { [] }
- let(:oldrev) { nil }
-
- it_behaves_like 'a system note' do
- let(:commit_count) { new_commits.size }
- let(:action) { 'commit' }
- end
-
- describe 'note body' do
- let(:note_lines) { subject.note.split("\n").reject(&:blank?) }
-
- describe 'comparison diff link line' do
- it 'adds the comparison text' do
- expect(note_lines[2]).to match "[Compare with previous version]"
- end
- end
-
- context 'without existing commits' do
- it 'adds a message header' do
- expect(note_lines[0]).to eq "added #{new_commits.size} commits"
- end
+ let(:new_commits) { double }
+ let(:old_commits) { double }
+ let(:oldrev) { double }
- it 'adds a message for each commit' do
- decoded_note_content = HTMLEntities.new.decode(subject.note)
-
- new_commits.each do |commit|
- expect(decoded_note_content).to include("<li>#{commit.short_id} - #{commit.title}</li>")
- end
- end
+ it 'calls CommitService' do
+ expect_next_instance_of(::SystemNotes::CommitService) do |service|
+ expect(service).to receive(:add_commits).with(new_commits, old_commits, oldrev)
end
- describe 'summary line for existing commits' do
- let(:summary_line) { note_lines[1] }
-
- context 'with one existing commit' do
- let(:old_commits) { [noteable.commits.last] }
-
- it 'includes the existing commit' do
- expect(summary_line).to start_with("<ul><li>#{old_commits.first.short_id} - 1 commit from branch <code>feature</code>")
- end
- end
-
- context 'with multiple existing commits' do
- let(:old_commits) { noteable.commits[3..-1] }
-
- context 'with oldrev' do
- let(:oldrev) { noteable.commits[2].id }
-
- it 'includes a commit range and count' do
- expect(summary_line)
- .to start_with("<ul><li>#{Commit.truncate_sha(oldrev)}...#{old_commits.last.short_id} - 26 commits from branch <code>feature</code>")
- end
- end
-
- context 'without oldrev' do
- it 'includes a commit range and count' do
- expect(summary_line)
- .to start_with("<ul><li>#{old_commits[0].short_id}..#{old_commits[-1].short_id} - 26 commits from branch <code>feature</code>")
- end
- end
-
- context 'on a fork' do
- before do
- expect(noteable).to receive(:for_fork?).and_return(true)
- end
-
- it 'includes the project namespace' do
- expect(summary_line).to include("<code>#{noteable.target_project_namespace}:feature</code>")
- end
- end
- end
- end
+ described_class.add_commits(noteable, project, author, new_commits, old_commits, oldrev)
end
end
describe '.tag_commit' do
- let(:noteable) do
- project.commit
- end
- let(:tag_name) { 'v1.2.3' }
-
- subject { described_class.tag_commit(noteable, project, author, tag_name) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'tag' }
- end
+ let(:tag_name) { double }
- it 'sets the note text' do
- link = "/#{project.full_path}/-/tags/#{tag_name}"
+ it 'calls CommitService' do
+ expect_next_instance_of(::SystemNotes::CommitService) do |service|
+ expect(service).to receive(:tag_commit).with(tag_name)
+ end
- expect(subject.note).to eq "tagged commit #{noteable.sha} to [`#{tag_name}`](#{link})"
+ described_class.tag_commit(noteable, project, author, tag_name)
end
end
describe '.change_assignee' do
- subject { described_class.change_assignee(noteable, project, author, assignee) }
-
- let(:assignee) { create(:user) }
+ let(:assignee) { double }
- it_behaves_like 'a system note' do
- let(:action) { 'assignee' }
- end
-
- context 'when assignee added' do
- it_behaves_like 'a note with overridable created_at'
-
- it 'sets the note text' do
- expect(subject.note).to eq "assigned to @#{assignee.username}"
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_assignee).with(assignee)
end
- end
- context 'when assignee removed' do
- let(:assignee) { nil }
-
- it_behaves_like 'a note with overridable created_at'
-
- it 'sets the note text' do
- expect(subject.note).to eq 'removed assignee'
- end
+ described_class.change_assignee(noteable, project, author, assignee)
end
end
describe '.change_issuable_assignees' do
- subject { described_class.change_issuable_assignees(noteable, project, author, [assignee]) }
-
- let(:assignee) { create(:user) }
- let(:assignee1) { create(:user) }
- let(:assignee2) { create(:user) }
- let(:assignee3) { create(:user) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'assignee' }
- end
+ let(:assignees) { [double, double] }
- def build_note(old_assignees, new_assignees)
- issue.assignees = new_assignees
- described_class.change_issuable_assignees(issue, project, author, old_assignees).note
- end
-
- it_behaves_like 'a note with overridable created_at'
-
- it 'builds a correct phrase when an assignee is added to a non-assigned issue' do
- expect(build_note([], [assignee1])).to eq "assigned to @#{assignee1.username}"
- end
-
- it 'builds a correct phrase when assignee removed' do
- expect(build_note([assignee1], [])).to eq "unassigned @#{assignee1.username}"
- end
-
- it 'builds a correct phrase when assignees changed' do
- expect(build_note([assignee1], [assignee2])).to eq \
- "assigned to @#{assignee2.username} and unassigned @#{assignee1.username}"
- end
-
- it 'builds a correct phrase when three assignees removed and one added' do
- expect(build_note([assignee, assignee1, assignee2], [assignee3])).to eq \
- "assigned to @#{assignee3.username} and unassigned @#{assignee.username}, @#{assignee1.username}, and @#{assignee2.username}"
- end
-
- it 'builds a correct phrase when one assignee changed from a set' do
- expect(build_note([assignee, assignee1], [assignee, assignee2])).to eq \
- "assigned to @#{assignee2.username} and unassigned @#{assignee1.username}"
- end
-
- it 'builds a correct phrase when one assignee removed from a set' do
- expect(build_note([assignee, assignee1, assignee2], [assignee, assignee1])).to eq \
- "unassigned @#{assignee2.username}"
- end
-
- it 'builds a correct phrase when the locale is different' do
- Gitlab::I18n.with_locale('pt-BR') do
- expect(build_note([assignee, assignee1, assignee2], [assignee3])).to eq \
- "assigned to @#{assignee3.username} and unassigned @#{assignee.username}, @#{assignee1.username}, and @#{assignee2.username}"
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_issuable_assignees).with(assignees)
end
+
+ described_class.change_issuable_assignees(noteable, project, author, assignees)
end
end
describe '.change_milestone' do
- context 'for a project milestone' do
- subject { described_class.change_milestone(noteable, project, author, milestone) }
+ let(:milestone) { double }
- let(:milestone) { create(:milestone, project: project) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'milestone' }
- end
-
- context 'when milestone added' do
- it 'sets the note text' do
- reference = milestone.to_reference(format: :iid)
-
- expect(subject.note).to eq "changed milestone to #{reference}"
- end
-
- it_behaves_like 'a note with overridable created_at'
- end
-
- context 'when milestone removed' do
- let(:milestone) { nil }
-
- it 'sets the note text' do
- expect(subject.note).to eq 'removed milestone'
- end
-
- it_behaves_like 'a note with overridable created_at'
- end
- end
-
- context 'for a group milestone' do
- subject { described_class.change_milestone(noteable, project, author, milestone) }
-
- let(:milestone) { create(:milestone, group: group) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'milestone' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_milestone).with(milestone)
end
- context 'when milestone added' do
- it 'sets the note text to use the milestone name' do
- expect(subject.note).to eq "changed milestone to #{milestone.to_reference(format: :name)}"
- end
-
- it_behaves_like 'a note with overridable created_at'
- end
-
- context 'when milestone removed' do
- let(:milestone) { nil }
-
- it 'sets the note text' do
- expect(subject.note).to eq 'removed milestone'
- end
-
- it_behaves_like 'a note with overridable created_at'
- end
+ described_class.change_milestone(noteable, project, author, milestone)
end
end
@@ -308,28 +102,15 @@ describe SystemNoteService do
end
describe '.change_status' do
- subject { described_class.change_status(noteable, project, author, status, source) }
-
- context 'with status reopened' do
- let(:status) { 'reopened' }
- let(:source) { nil }
+ let(:status) { double }
+ let(:source) { double }
- it_behaves_like 'a note with overridable created_at'
-
- it_behaves_like 'a system note' do
- let(:action) { 'opened' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_status).with(status, source)
end
- end
-
- context 'with a source' do
- let(:status) { 'opened' }
- let(:source) { double('commit', gfm_reference: 'commit 123456') }
- it_behaves_like 'a note with overridable created_at'
-
- it 'sets the note text' do
- expect(subject.note).to eq "#{status} via commit 123456"
- end
+ described_class.change_status(noteable, project, author, status, source)
end
end
@@ -383,65 +164,34 @@ describe SystemNoteService do
end
describe '.change_title' do
- let(:noteable) { create(:issue, project: project, title: 'Lorem ipsum') }
+ let(:title) { double }
- subject { described_class.change_title(noteable, project, author, 'Old title') }
-
- context 'when noteable responds to `title`' do
- it_behaves_like 'a system note' do
- let(:action) { 'title' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_title).with(title)
end
- it_behaves_like 'a note with overridable created_at'
-
- it 'sets the note text' do
- expect(subject.note)
- .to eq "changed title from **{-Old title-}** to **{+Lorem ipsum+}**"
- end
+ described_class.change_title(noteable, project, author, title)
end
end
describe '.change_description' do
- subject { described_class.change_description(noteable, project, author) }
-
- context 'when noteable responds to `description`' do
- it_behaves_like 'a system note' do
- let(:action) { 'description' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_description)
end
- it_behaves_like 'a note with overridable created_at'
-
- it 'sets the note text' do
- expect(subject.note).to eq('changed the description')
- end
+ described_class.change_description(noteable, project, author)
end
end
describe '.change_issue_confidentiality' do
- subject { described_class.change_issue_confidentiality(noteable, project, author) }
-
- context 'issue has been made confidential' do
- before do
- noteable.update_attribute(:confidential, true)
- end
-
- it_behaves_like 'a system note' do
- let(:action) { 'confidential' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_issue_confidentiality)
end
- it 'sets the note text' do
- expect(subject.note).to eq 'made the issue confidential'
- end
- end
-
- context 'issue has been made visible' do
- it_behaves_like 'a system note' do
- let(:action) { 'visible' }
- end
-
- it 'sets the note text' do
- expect(subject.note).to eq 'made the issue visible to everyone'
- end
+ described_class.change_issue_confidentiality(noteable, project, author)
end
end
@@ -521,295 +271,71 @@ describe SystemNoteService do
end
describe '.zoom_link_added' do
- subject { described_class.zoom_link_added(issue, project, author) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'pinned_embed' }
- end
+ it 'calls ZoomService' do
+ expect_next_instance_of(::SystemNotes::ZoomService) do |service|
+ expect(service).to receive(:zoom_link_added)
+ end
- it 'sets the zoom link added note text' do
- expect(subject.note).to eq('added a Zoom call to this issue')
+ described_class.zoom_link_added(noteable, project, author)
end
end
describe '.zoom_link_removed' do
- subject { described_class.zoom_link_removed(issue, project, author) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'pinned_embed' }
- end
+ it 'calls ZoomService' do
+ expect_next_instance_of(::SystemNotes::ZoomService) do |service|
+ expect(service).to receive(:zoom_link_removed)
+ end
- it 'sets the zoom link removed note text' do
- expect(subject.note).to eq('removed a Zoom call from this issue')
+ described_class.zoom_link_removed(noteable, project, author)
end
end
describe '.cross_reference' do
- subject { described_class.cross_reference(noteable, mentioner, author) }
-
- let(:mentioner) { create(:issue, project: project) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'cross_reference' }
- end
-
- context 'when cross-reference disallowed' do
- before do
- expect(described_class).to receive(:cross_reference_disallowed?).and_return(true)
- end
-
- it 'returns nil' do
- expect(subject).to be_nil
- end
-
- it 'does not create a system note metadata record' do
- expect { subject }.not_to change { SystemNoteMetadata.count }
- end
- end
-
- context 'when cross-reference allowed' do
- before do
- expect(described_class).to receive(:cross_reference_disallowed?).and_return(false)
- end
+ let(:mentioner) { double }
- it_behaves_like 'a system note' do
- let(:action) { 'cross_reference' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:cross_reference).with(mentioner)
end
- it_behaves_like 'a note with overridable created_at'
-
- describe 'note_body' do
- context 'cross-project' do
- let(:project2) { create(:project, :repository) }
- let(:mentioner) { create(:issue, project: project2) }
-
- context 'from Commit' do
- let(:mentioner) { project2.repository.commit }
-
- it 'references the mentioning commit' do
- expect(subject.note).to eq "mentioned in commit #{mentioner.to_reference(project)}"
- end
- end
-
- context 'from non-Commit' do
- it 'references the mentioning object' do
- expect(subject.note).to eq "mentioned in issue #{mentioner.to_reference(project)}"
- end
- end
- end
-
- context 'within the same project' do
- context 'from Commit' do
- let(:mentioner) { project.repository.commit }
-
- it 'references the mentioning commit' do
- expect(subject.note).to eq "mentioned in commit #{mentioner.to_reference}"
- end
- end
-
- context 'from non-Commit' do
- it 'references the mentioning object' do
- expect(subject.note).to eq "mentioned in issue #{mentioner.to_reference}"
- end
- end
- end
- end
+ described_class.cross_reference(double, mentioner, double)
end
end
describe '.cross_reference_disallowed?' do
- context 'when mentioner is not a MergeRequest' do
- it 'is falsey' do
- mentioner = noteable.dup
- expect(described_class.cross_reference_disallowed?(noteable, mentioner))
- .to be_falsey
- end
- end
+ let(:mentioner) { double }
- context 'when mentioner is a MergeRequest' do
- let(:mentioner) { create(:merge_request, :simple, source_project: project) }
- let(:noteable) { project.commit }
-
- it 'is truthy when noteable is in commits' do
- expect(mentioner).to receive(:commits).and_return([noteable])
- expect(described_class.cross_reference_disallowed?(noteable, mentioner))
- .to be_truthy
- end
-
- it 'is falsey when noteable is not in commits' do
- expect(mentioner).to receive(:commits).and_return([])
- expect(described_class.cross_reference_disallowed?(noteable, mentioner))
- .to be_falsey
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:cross_reference_disallowed?).with(mentioner)
end
- end
- context 'when notable is an ExternalIssue' do
- let(:noteable) { ExternalIssue.new('EXT-1234', project) }
- it 'is truthy' do
- mentioner = noteable.dup
- expect(described_class.cross_reference_disallowed?(noteable, mentioner))
- .to be_truthy
- end
+ described_class.cross_reference_disallowed?(double, mentioner)
end
end
describe '.cross_reference_exists?' do
- let(:commit0) { project.commit }
- let(:commit1) { project.commit('HEAD~2') }
-
- context 'issue from commit' do
- before do
- # Mention issue (noteable) from commit0
- described_class.cross_reference(noteable, commit0, author)
- end
-
- it 'is truthy when already mentioned' do
- expect(described_class.cross_reference_exists?(noteable, commit0))
- .to be_truthy
- end
-
- it 'is falsey when not already mentioned' do
- expect(described_class.cross_reference_exists?(noteable, commit1))
- .to be_falsey
- end
-
- context 'legacy capitalized cross reference' do
- before do
- # Mention issue (noteable) from commit0
- system_note = described_class.cross_reference(noteable, commit0, author)
- system_note.update(note: system_note.note.capitalize)
- end
-
- it 'is truthy when already mentioned' do
- expect(described_class.cross_reference_exists?(noteable, commit0))
- .to be_truthy
- end
- end
- end
-
- context 'commit from commit' do
- before do
- # Mention commit1 from commit0
- described_class.cross_reference(commit0, commit1, author)
- end
-
- it 'is truthy when already mentioned' do
- expect(described_class.cross_reference_exists?(commit0, commit1))
- .to be_truthy
- end
+ let(:mentioner) { double }
- it 'is falsey when not already mentioned' do
- expect(described_class.cross_reference_exists?(commit1, commit0))
- .to be_falsey
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:cross_reference_exists?).with(mentioner)
end
- context 'legacy capitalized cross reference' do
- before do
- # Mention commit1 from commit0
- system_note = described_class.cross_reference(commit0, commit1, author)
- system_note.update(note: system_note.note.capitalize)
- end
-
- it 'is truthy when already mentioned' do
- expect(described_class.cross_reference_exists?(commit0, commit1))
- .to be_truthy
- end
- end
- end
-
- context 'commit with cross-reference from fork' do
- let(:author2) { create(:project_member, :reporter, user: create(:user), project: project).user }
- let(:forked_project) { fork_project(project, author2, repository: true) }
- let(:commit2) { forked_project.commit }
-
- before do
- described_class.cross_reference(noteable, commit0, author2)
- end
-
- it 'is true when a fork mentions an external issue' do
- expect(described_class.cross_reference_exists?(noteable, commit2))
- .to be true
- end
-
- context 'legacy capitalized cross reference' do
- before do
- system_note = described_class.cross_reference(noteable, commit0, author2)
- system_note.update(note: system_note.note.capitalize)
- end
-
- it 'is true when a fork mentions an external issue' do
- expect(described_class.cross_reference_exists?(noteable, commit2))
- .to be true
- end
- end
+ described_class.cross_reference_exists?(double, mentioner)
end
end
describe '.noteable_moved' do
- let(:new_project) { create(:project) }
- let(:new_noteable) { create(:issue, project: new_project) }
-
- subject do
- described_class.noteable_moved(noteable, project, new_noteable, author, direction: direction)
- end
-
- shared_examples 'cross project mentionable' do
- include MarkupHelper
-
- it 'contains cross reference to new noteable' do
- expect(subject.note).to include cross_project_reference(new_project, new_noteable)
- end
-
- it 'mentions referenced noteable' do
- expect(subject.note).to include new_noteable.to_reference
- end
-
- it 'mentions referenced project' do
- expect(subject.note).to include new_project.full_path
- end
- end
-
- context 'moved to' do
- let(:direction) { :to }
-
- it_behaves_like 'cross project mentionable'
- it_behaves_like 'a system note' do
- let(:action) { 'moved' }
- end
+ let(:noteable_ref) { double }
+ let(:direction) { double }
- it 'notifies about noteable being moved to' do
- expect(subject.note).to match('moved to')
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:noteable_moved).with(noteable_ref, direction)
end
- end
- context 'moved from' do
- let(:direction) { :from }
-
- it_behaves_like 'cross project mentionable'
- it_behaves_like 'a system note' do
- let(:action) { 'moved' }
- end
-
- it 'notifies about noteable being moved from' do
- expect(subject.note).to match('moved from')
- end
- end
-
- context 'invalid direction' do
- let(:direction) { :invalid }
-
- it 'raises error' do
- expect { subject }.to raise_error StandardError, /Invalid direction/
- end
- end
- end
-
- describe '.new_commit_summary' do
- it 'escapes HTML titles' do
- commit = double(title: '<pre>This is a test</pre>', short_id: '12345678')
- escaped = '&lt;pre&gt;This is a test&lt;/pre&gt;'
-
- expect(described_class.new_commit_summary([commit])).to all(match(/- #{escaped}/))
+ described_class.noteable_moved(double, double, noteable_ref, double, direction: direction)
end
end
@@ -1171,17 +697,14 @@ describe SystemNoteService do
end
describe '.change_task_status' do
- let(:noteable) { create(:issue, project: project) }
- let(:task) { double(:task, complete?: true, source: 'task') }
-
- subject { described_class.change_task_status(noteable, project, author, task) }
+ let(:new_task) { double }
- it_behaves_like 'a system note' do
- let(:action) { 'task' }
- end
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:change_task_status).with(new_task)
+ end
- it "posts the 'marked the task as complete' system note" do
- expect(subject.note).to eq("marked the task **task** as completed")
+ described_class.change_task_status(noteable, project, author, new_task)
end
end
@@ -1259,90 +782,42 @@ describe SystemNoteService do
end
describe '.mark_duplicate_issue' do
- subject { described_class.mark_duplicate_issue(noteable, project, author, canonical_issue) }
+ let(:canonical_issue) { double }
- context 'within the same project' do
- let(:canonical_issue) { create(:issue, project: project) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'duplicate' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:mark_duplicate_issue).with(canonical_issue)
end
- it { expect(subject.note).to eq "marked this issue as a duplicate of #{canonical_issue.to_reference}" }
- end
-
- context 'across different projects' do
- let(:other_project) { create(:project) }
- let(:canonical_issue) { create(:issue, project: other_project) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'duplicate' }
- end
-
- it { expect(subject.note).to eq "marked this issue as a duplicate of #{canonical_issue.to_reference(project)}" }
+ described_class.mark_duplicate_issue(noteable, project, author, canonical_issue)
end
end
describe '.mark_canonical_issue_of_duplicate' do
- subject { described_class.mark_canonical_issue_of_duplicate(noteable, project, author, duplicate_issue) }
+ let(:duplicate_issue) { double }
- context 'within the same project' do
- let(:duplicate_issue) { create(:issue, project: project) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'duplicate' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:mark_canonical_issue_of_duplicate).with(duplicate_issue)
end
- it { expect(subject.note).to eq "marked #{duplicate_issue.to_reference} as a duplicate of this issue" }
- end
-
- context 'across different projects' do
- let(:other_project) { create(:project) }
- let(:duplicate_issue) { create(:issue, project: other_project) }
-
- it_behaves_like 'a system note' do
- let(:action) { 'duplicate' }
- end
-
- it { expect(subject.note).to eq "marked #{duplicate_issue.to_reference(project)} as a duplicate of this issue" }
+ described_class.mark_canonical_issue_of_duplicate(noteable, project, author, duplicate_issue)
end
end
describe '.discussion_lock' do
- subject { described_class.discussion_lock(noteable, author) }
-
- context 'discussion unlocked' do
- it_behaves_like 'a system note' do
- let(:action) { 'unlocked' }
- end
-
- it 'creates the note text correctly' do
- [:issue, :merge_request].each do |type|
- issuable = create(type)
+ let(:issuable) { double }
- expect(described_class.discussion_lock(issuable, author).note)
- .to eq("unlocked this #{type.to_s.titleize.downcase}")
- end
- end
+ before do
+ allow(issuable).to receive(:project).and_return(double)
end
- context 'discussion locked' do
- before do
- noteable.update_attribute(:discussion_locked, true)
- end
-
- it_behaves_like 'a system note' do
- let(:action) { 'locked' }
+ it 'calls IssuableService' do
+ expect_next_instance_of(::SystemNotes::IssuablesService) do |service|
+ expect(service).to receive(:discussion_lock)
end
- it 'creates the note text correctly' do
- [:issue, :merge_request].each do |type|
- issuable = create(type, discussion_locked: true)
-
- expect(described_class.discussion_lock(issuable, author).note)
- .to eq("locked this #{type.to_s.titleize.downcase}")
- end
- end
+ described_class.discussion_lock(issuable, double)
end
end
end
diff --git a/spec/services/system_notes/base_service_spec.rb b/spec/services/system_notes/base_service_spec.rb
new file mode 100644
index 00000000000..96788b05829
--- /dev/null
+++ b/spec/services/system_notes/base_service_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe SystemNotes::BaseService do
+ let(:noteable) { double }
+ let(:project) { double }
+ let(:author) { double }
+
+ let(:base_service) { described_class.new(noteable: noteable, project: project, author: author) }
+
+ describe '#noteable' do
+ subject { base_service.noteable }
+
+ it { is_expected.to eq(noteable) }
+
+ it 'returns nil if no arguments are given' do
+ instance = described_class.new
+ expect(instance.noteable).to be_nil
+ end
+ end
+
+ describe '#project' do
+ subject { base_service.project }
+
+ it { is_expected.to eq(project) }
+
+ it 'returns nil if no arguments are given' do
+ instance = described_class.new
+ expect(instance.project).to be_nil
+ end
+ end
+
+ describe '#author' do
+ subject { base_service.author }
+
+ it { is_expected.to eq(author) }
+
+ it 'returns nil if no arguments are given' do
+ instance = described_class.new
+ expect(instance.author).to be_nil
+ end
+ end
+end
diff --git a/spec/services/system_notes/commit_service_spec.rb b/spec/services/system_notes/commit_service_spec.rb
new file mode 100644
index 00000000000..4d4403be59a
--- /dev/null
+++ b/spec/services/system_notes/commit_service_spec.rb
@@ -0,0 +1,117 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe SystemNotes::CommitService do
+ set(:group) { create(:group) }
+ set(:project) { create(:project, :repository, group: group) }
+ set(:author) { create(:user) }
+
+ let(:commit_service) { described_class.new(noteable: noteable, project: project, author: author) }
+
+ describe '#add_commits' do
+ subject { commit_service.add_commits(new_commits, old_commits, oldrev) }
+
+ let(:noteable) { create(:merge_request, source_project: project, target_project: project) }
+ let(:new_commits) { noteable.commits }
+ let(:old_commits) { [] }
+ let(:oldrev) { nil }
+
+ it_behaves_like 'a system note' do
+ let(:commit_count) { new_commits.size }
+ let(:action) { 'commit' }
+ end
+
+ describe 'note body' do
+ let(:note_lines) { subject.note.split("\n").reject(&:blank?) }
+
+ describe 'comparison diff link line' do
+ it 'adds the comparison text' do
+ expect(note_lines[2]).to match "[Compare with previous version]"
+ end
+ end
+
+ context 'without existing commits' do
+ it 'adds a message header' do
+ expect(note_lines[0]).to eq "added #{new_commits.size} commits"
+ end
+
+ it 'adds a message for each commit' do
+ decoded_note_content = HTMLEntities.new.decode(subject.note)
+
+ new_commits.each do |commit|
+ expect(decoded_note_content).to include("<li>#{commit.short_id} - #{commit.title}</li>")
+ end
+ end
+ end
+
+ describe 'summary line for existing commits' do
+ let(:summary_line) { note_lines[1] }
+
+ context 'with one existing commit' do
+ let(:old_commits) { [noteable.commits.last] }
+
+ it 'includes the existing commit' do
+ expect(summary_line).to start_with("<ul><li>#{old_commits.first.short_id} - 1 commit from branch <code>feature</code>")
+ end
+ end
+
+ context 'with multiple existing commits' do
+ let(:old_commits) { noteable.commits[3..-1] }
+
+ context 'with oldrev' do
+ let(:oldrev) { noteable.commits[2].id }
+
+ it 'includes a commit range and count' do
+ expect(summary_line)
+ .to start_with("<ul><li>#{Commit.truncate_sha(oldrev)}...#{old_commits.last.short_id} - 26 commits from branch <code>feature</code>")
+ end
+ end
+
+ context 'without oldrev' do
+ it 'includes a commit range and count' do
+ expect(summary_line)
+ .to start_with("<ul><li>#{old_commits[0].short_id}..#{old_commits[-1].short_id} - 26 commits from branch <code>feature</code>")
+ end
+ end
+
+ context 'on a fork' do
+ before do
+ expect(noteable).to receive(:for_fork?).and_return(true)
+ end
+
+ it 'includes the project namespace' do
+ expect(summary_line).to include("<code>#{noteable.target_project_namespace}:feature</code>")
+ end
+ end
+ end
+ end
+ end
+ end
+
+ describe '#tag_commit' do
+ let(:noteable) { project.commit }
+ let(:tag_name) { 'v1.2.3' }
+
+ subject { commit_service.tag_commit(tag_name) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'tag' }
+ end
+
+ it 'sets the note text' do
+ link = "/#{project.full_path}/-/tags/#{tag_name}"
+
+ expect(subject.note).to eq "tagged commit #{noteable.sha} to [`#{tag_name}`](#{link})"
+ end
+ end
+
+ describe '#new_commit_summary' do
+ it 'escapes HTML titles' do
+ commit = double(title: '<pre>This is a test</pre>', short_id: '12345678')
+ escaped = '&lt;pre&gt;This is a test&lt;/pre&gt;'
+
+ expect(described_class.new.new_commit_summary([commit])).to all(match(/- #{escaped}/))
+ end
+ end
+end
diff --git a/spec/services/system_notes/issuables_service_spec.rb b/spec/services/system_notes/issuables_service_spec.rb
new file mode 100644
index 00000000000..5023abad4cd
--- /dev/null
+++ b/spec/services/system_notes/issuables_service_spec.rb
@@ -0,0 +1,628 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe ::SystemNotes::IssuablesService do
+ include ProjectForksHelper
+
+ let_it_be(:group) { create(:group) }
+ let_it_be(:project) { create(:project, :repository, group: group) }
+ let_it_be(:author) { create(:user) }
+ let(:noteable) { create(:issue, project: project) }
+ let(:issue) { noteable }
+
+ let(:service) { described_class.new(noteable: noteable, project: project, author: author) }
+
+ describe '#change_assignee' do
+ subject { service.change_assignee(assignee) }
+
+ let(:assignee) { create(:user) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'assignee' }
+ end
+
+ context 'when assignee added' do
+ it_behaves_like 'a note with overridable created_at'
+
+ it 'sets the note text' do
+ expect(subject.note).to eq "assigned to @#{assignee.username}"
+ end
+ end
+
+ context 'when assignee removed' do
+ let(:assignee) { nil }
+
+ it_behaves_like 'a note with overridable created_at'
+
+ it 'sets the note text' do
+ expect(subject.note).to eq 'removed assignee'
+ end
+ end
+ end
+
+ describe '#change_issuable_assignees' do
+ subject { service.change_issuable_assignees([assignee]) }
+
+ let(:assignee) { create(:user) }
+ let(:assignee1) { create(:user) }
+ let(:assignee2) { create(:user) }
+ let(:assignee3) { create(:user) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'assignee' }
+ end
+
+ def build_note(old_assignees, new_assignees)
+ issue.assignees = new_assignees
+ service.change_issuable_assignees(old_assignees).note
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+
+ it 'builds a correct phrase when an assignee is added to a non-assigned issue' do
+ expect(build_note([], [assignee1])).to eq "assigned to @#{assignee1.username}"
+ end
+
+ it 'builds a correct phrase when assignee removed' do
+ expect(build_note([assignee1], [])).to eq "unassigned @#{assignee1.username}"
+ end
+
+ it 'builds a correct phrase when assignees changed' do
+ expect(build_note([assignee1], [assignee2])).to eq \
+ "assigned to @#{assignee2.username} and unassigned @#{assignee1.username}"
+ end
+
+ it 'builds a correct phrase when three assignees removed and one added' do
+ expect(build_note([assignee, assignee1, assignee2], [assignee3])).to eq \
+ "assigned to @#{assignee3.username} and unassigned @#{assignee.username}, @#{assignee1.username}, and @#{assignee2.username}"
+ end
+
+ it 'builds a correct phrase when one assignee changed from a set' do
+ expect(build_note([assignee, assignee1], [assignee, assignee2])).to eq \
+ "assigned to @#{assignee2.username} and unassigned @#{assignee1.username}"
+ end
+
+ it 'builds a correct phrase when one assignee removed from a set' do
+ expect(build_note([assignee, assignee1, assignee2], [assignee, assignee1])).to eq \
+ "unassigned @#{assignee2.username}"
+ end
+
+ it 'builds a correct phrase when the locale is different' do
+ Gitlab::I18n.with_locale('pt-BR') do
+ expect(build_note([assignee, assignee1, assignee2], [assignee3])).to eq \
+ "assigned to @#{assignee3.username} and unassigned @#{assignee.username}, @#{assignee1.username}, and @#{assignee2.username}"
+ end
+ end
+ end
+
+ describe '#change_milestone' do
+ subject { service.change_milestone(milestone) }
+
+ context 'for a project milestone' do
+ let(:milestone) { create(:milestone, project: project) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'milestone' }
+ end
+
+ context 'when milestone added' do
+ it 'sets the note text' do
+ reference = milestone.to_reference(format: :iid)
+
+ expect(subject.note).to eq "changed milestone to #{reference}"
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+ end
+
+ context 'when milestone removed' do
+ let(:milestone) { nil }
+
+ it 'sets the note text' do
+ expect(subject.note).to eq 'removed milestone'
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+ end
+ end
+
+ context 'for a group milestone' do
+ let(:milestone) { create(:milestone, group: group) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'milestone' }
+ end
+
+ context 'when milestone added' do
+ it 'sets the note text to use the milestone name' do
+ expect(subject.note).to eq "changed milestone to #{milestone.to_reference(format: :name)}"
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+ end
+
+ context 'when milestone removed' do
+ let(:milestone) { nil }
+
+ it 'sets the note text' do
+ expect(subject.note).to eq 'removed milestone'
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+ end
+ end
+ end
+
+ describe '#change_status' do
+ subject { service.change_status(status, source) }
+
+ context 'with status reopened' do
+ let(:status) { 'reopened' }
+ let(:source) { nil }
+
+ it_behaves_like 'a note with overridable created_at'
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'opened' }
+ end
+ end
+
+ context 'with a source' do
+ let(:status) { 'opened' }
+ let(:source) { double('commit', gfm_reference: 'commit 123456') }
+
+ it_behaves_like 'a note with overridable created_at'
+
+ it 'sets the note text' do
+ expect(subject.note).to eq "#{status} via commit 123456"
+ end
+ end
+ end
+
+ describe '#change_title' do
+ let(:noteable) { create(:issue, project: project, title: 'Lorem ipsum') }
+
+ subject { service.change_title('Old title') }
+
+ context 'when noteable responds to `title`' do
+ it_behaves_like 'a system note' do
+ let(:action) { 'title' }
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+
+ it 'sets the note text' do
+ expect(subject.note)
+ .to eq "changed title from **{-Old title-}** to **{+Lorem ipsum+}**"
+ end
+ end
+ end
+
+ describe '#change_description' do
+ subject { service.change_description }
+
+ context 'when noteable responds to `description`' do
+ it_behaves_like 'a system note' do
+ let(:action) { 'description' }
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+
+ it 'sets the note text' do
+ expect(subject.note).to eq('changed the description')
+ end
+
+ it 'associates the related description version' do
+ noteable.update!(description: 'New description')
+
+ description_version_id = subject.system_note_metadata.description_version_id
+
+ expect(description_version_id).not_to be_nil
+ expect(description_version_id).to eq(noteable.saved_description_version.id)
+ end
+ end
+ end
+
+ describe '#change_issue_confidentiality' do
+ subject { service.change_issue_confidentiality }
+
+ context 'issue has been made confidential' do
+ before do
+ noteable.update_attribute(:confidential, true)
+ end
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'confidential' }
+ end
+
+ it 'sets the note text' do
+ expect(subject.note).to eq 'made the issue confidential'
+ end
+ end
+
+ context 'issue has been made visible' do
+ it_behaves_like 'a system note' do
+ let(:action) { 'visible' }
+ end
+
+ it 'sets the note text' do
+ expect(subject.note).to eq 'made the issue visible to everyone'
+ end
+ end
+ end
+
+ describe '#cross_reference' do
+ let(:service) { described_class.new(noteable: noteable, author: author) }
+
+ let(:mentioner) { create(:issue, project: project) }
+
+ subject { service.cross_reference(mentioner) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'cross_reference' }
+ end
+
+ context 'when cross-reference disallowed' do
+ before do
+ expect_any_instance_of(described_class).to receive(:cross_reference_disallowed?).and_return(true)
+ end
+
+ it 'returns nil' do
+ expect(subject).to be_nil
+ end
+
+ it 'does not create a system note metadata record' do
+ expect { subject }.not_to change { SystemNoteMetadata.count }
+ end
+ end
+
+ context 'when cross-reference allowed' do
+ before do
+ expect_any_instance_of(described_class).to receive(:cross_reference_disallowed?).and_return(false)
+ end
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'cross_reference' }
+ end
+
+ it_behaves_like 'a note with overridable created_at'
+
+ describe 'note_body' do
+ context 'cross-project' do
+ let(:project2) { create(:project, :repository) }
+ let(:mentioner) { create(:issue, project: project2) }
+
+ context 'from Commit' do
+ let(:mentioner) { project2.repository.commit }
+
+ it 'references the mentioning commit' do
+ expect(subject.note).to eq "mentioned in commit #{mentioner.to_reference(project)}"
+ end
+ end
+
+ context 'from non-Commit' do
+ it 'references the mentioning object' do
+ expect(subject.note).to eq "mentioned in issue #{mentioner.to_reference(project)}"
+ end
+ end
+ end
+
+ context 'within the same project' do
+ context 'from Commit' do
+ let(:mentioner) { project.repository.commit }
+
+ it 'references the mentioning commit' do
+ expect(subject.note).to eq "mentioned in commit #{mentioner.to_reference}"
+ end
+ end
+
+ context 'from non-Commit' do
+ it 'references the mentioning object' do
+ expect(subject.note).to eq "mentioned in issue #{mentioner.to_reference}"
+ end
+ end
+ end
+ end
+ end
+ end
+
+ describe '#cross_reference_exists?' do
+ let(:commit0) { project.commit }
+ let(:commit1) { project.commit('HEAD~2') }
+
+ context 'issue from commit' do
+ before do
+ # Mention issue (noteable) from commit0
+ service.cross_reference(commit0)
+ end
+
+ it 'is truthy when already mentioned' do
+ expect(service.cross_reference_exists?(commit0))
+ .to be_truthy
+ end
+
+ it 'is falsey when not already mentioned' do
+ expect(service.cross_reference_exists?(commit1))
+ .to be_falsey
+ end
+
+ context 'legacy capitalized cross reference' do
+ before do
+ # Mention issue (noteable) from commit0
+ system_note = service.cross_reference(commit0)
+ system_note.update(note: system_note.note.capitalize)
+ end
+
+ it 'is truthy when already mentioned' do
+ expect(service.cross_reference_exists?(commit0))
+ .to be_truthy
+ end
+ end
+ end
+
+ context 'commit from commit' do
+ let(:service) { described_class.new(noteable: commit0, author: author) }
+
+ before do
+ # Mention commit1 from commit0
+ service.cross_reference(commit1)
+ end
+
+ it 'is truthy when already mentioned' do
+ expect(service.cross_reference_exists?(commit1))
+ .to be_truthy
+ end
+
+ it 'is falsey when not already mentioned' do
+ service = described_class.new(noteable: commit1, author: author)
+
+ expect(service.cross_reference_exists?(commit0))
+ .to be_falsey
+ end
+
+ context 'legacy capitalized cross reference' do
+ before do
+ # Mention commit1 from commit0
+ system_note = service.cross_reference(commit1)
+ system_note.update(note: system_note.note.capitalize)
+ end
+
+ it 'is truthy when already mentioned' do
+ expect(service.cross_reference_exists?(commit1))
+ .to be_truthy
+ end
+ end
+ end
+
+ context 'commit with cross-reference from fork' do
+ let(:author2) { create(:project_member, :reporter, user: create(:user), project: project).user }
+ let(:forked_project) { fork_project(project, author2, repository: true) }
+ let(:commit2) { forked_project.commit }
+
+ let(:service) { described_class.new(noteable: noteable, author: author2) }
+
+ before do
+ service.cross_reference(commit0)
+ end
+
+ it 'is true when a fork mentions an external issue' do
+ expect(service.cross_reference_exists?(commit2))
+ .to be true
+ end
+
+ context 'legacy capitalized cross reference' do
+ before do
+ system_note = service.cross_reference(commit0)
+ system_note.update(note: system_note.note.capitalize)
+ end
+
+ it 'is true when a fork mentions an external issue' do
+ expect(service.cross_reference_exists?(commit2))
+ .to be true
+ end
+ end
+ end
+ end
+
+ describe '#change_task_status' do
+ let(:noteable) { create(:issue, project: project) }
+ let(:task) { double(:task, complete?: true, source: 'task') }
+
+ subject { service.change_task_status(task) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'task' }
+ end
+
+ it "posts the 'marked the task as complete' system note" do
+ expect(subject.note).to eq("marked the task **task** as completed")
+ end
+ end
+
+ describe '#noteable_moved' do
+ let(:new_project) { create(:project) }
+ let(:new_noteable) { create(:issue, project: new_project) }
+
+ subject do
+ # service = described_class.new(noteable: noteable, project: project, author: author)
+ service.noteable_moved(new_noteable, direction)
+ end
+
+ shared_examples 'cross project mentionable' do
+ include MarkupHelper
+
+ it 'contains cross reference to new noteable' do
+ expect(subject.note).to include cross_project_reference(new_project, new_noteable)
+ end
+
+ it 'mentions referenced noteable' do
+ expect(subject.note).to include new_noteable.to_reference
+ end
+
+ it 'mentions referenced project' do
+ expect(subject.note).to include new_project.full_path
+ end
+ end
+
+ context 'moved to' do
+ let(:direction) { :to }
+
+ it_behaves_like 'cross project mentionable'
+ it_behaves_like 'a system note' do
+ let(:action) { 'moved' }
+ end
+
+ it 'notifies about noteable being moved to' do
+ expect(subject.note).to match('moved to')
+ end
+ end
+
+ context 'moved from' do
+ let(:direction) { :from }
+
+ it_behaves_like 'cross project mentionable'
+ it_behaves_like 'a system note' do
+ let(:action) { 'moved' }
+ end
+
+ it 'notifies about noteable being moved from' do
+ expect(subject.note).to match('moved from')
+ end
+ end
+
+ context 'invalid direction' do
+ let(:direction) { :invalid }
+
+ it 'raises error' do
+ expect { subject }.to raise_error StandardError, /Invalid direction/
+ end
+ end
+ end
+
+ describe '#mark_duplicate_issue' do
+ subject { service.mark_duplicate_issue(canonical_issue) }
+
+ context 'within the same project' do
+ let(:canonical_issue) { create(:issue, project: project) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'duplicate' }
+ end
+
+ it { expect(subject.note).to eq "marked this issue as a duplicate of #{canonical_issue.to_reference}" }
+ end
+
+ context 'across different projects' do
+ let(:other_project) { create(:project) }
+ let(:canonical_issue) { create(:issue, project: other_project) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'duplicate' }
+ end
+
+ it { expect(subject.note).to eq "marked this issue as a duplicate of #{canonical_issue.to_reference(project)}" }
+ end
+ end
+
+ describe '#mark_canonical_issue_of_duplicate' do
+ subject { service.mark_canonical_issue_of_duplicate(duplicate_issue) }
+
+ context 'within the same project' do
+ let(:duplicate_issue) { create(:issue, project: project) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'duplicate' }
+ end
+
+ it { expect(subject.note).to eq "marked #{duplicate_issue.to_reference} as a duplicate of this issue" }
+ end
+
+ context 'across different projects' do
+ let(:other_project) { create(:project) }
+ let(:duplicate_issue) { create(:issue, project: other_project) }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'duplicate' }
+ end
+
+ it { expect(subject.note).to eq "marked #{duplicate_issue.to_reference(project)} as a duplicate of this issue" }
+ end
+ end
+
+ describe '#discussion_lock' do
+ subject { service.discussion_lock }
+
+ context 'discussion unlocked' do
+ it_behaves_like 'a system note' do
+ let(:action) { 'unlocked' }
+ end
+
+ it 'creates the note text correctly' do
+ [:issue, :merge_request].each do |type|
+ issuable = create(type)
+
+ service = described_class.new(noteable: issuable, author: author)
+ expect(service.discussion_lock.note)
+ .to eq("unlocked this #{type.to_s.titleize.downcase}")
+ end
+ end
+ end
+
+ context 'discussion locked' do
+ before do
+ noteable.update_attribute(:discussion_locked, true)
+ end
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'locked' }
+ end
+
+ it 'creates the note text correctly' do
+ [:issue, :merge_request].each do |type|
+ issuable = create(type, discussion_locked: true)
+
+ service = described_class.new(noteable: issuable, author: author)
+ expect(service.discussion_lock.note)
+ .to eq("locked this #{type.to_s.titleize.downcase}")
+ end
+ end
+ end
+ end
+
+ describe '#cross_reference_disallowed?' do
+ context 'when mentioner is not a MergeRequest' do
+ it 'is falsey' do
+ mentioner = noteable.dup
+ expect(service.cross_reference_disallowed?(mentioner))
+ .to be_falsey
+ end
+ end
+
+ context 'when mentioner is a MergeRequest' do
+ let(:mentioner) { create(:merge_request, :simple, source_project: project) }
+ let(:noteable) { project.commit }
+
+ it 'is truthy when noteable is in commits' do
+ expect(mentioner).to receive(:commits).and_return([noteable])
+ expect(service.cross_reference_disallowed?(mentioner))
+ .to be_truthy
+ end
+
+ it 'is falsey when noteable is not in commits' do
+ expect(mentioner).to receive(:commits).and_return([])
+ expect(service.cross_reference_disallowed?(mentioner))
+ .to be_falsey
+ end
+ end
+
+ context 'when notable is an ExternalIssue' do
+ let(:noteable) { ExternalIssue.new('EXT-1234', project) }
+ it 'is truthy' do
+ mentioner = noteable.dup
+ expect(service.cross_reference_disallowed?(mentioner))
+ .to be_truthy
+ end
+ end
+ end
+end
diff --git a/spec/services/system_notes/zoom_service_spec.rb b/spec/services/system_notes/zoom_service_spec.rb
new file mode 100644
index 00000000000..435cdb5748e
--- /dev/null
+++ b/spec/services/system_notes/zoom_service_spec.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe ::SystemNotes::ZoomService do
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:author) { create(:user) }
+
+ let(:noteable) { create(:issue, project: project) }
+
+ let(:service) { described_class.new(noteable: noteable, project: project, author: author) }
+
+ describe '#zoom_link_added' do
+ subject { service.zoom_link_added }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'pinned_embed' }
+ end
+
+ it 'sets the zoom link added note text' do
+ expect(subject.note).to eq('added a Zoom call to this issue')
+ end
+ end
+
+ describe '#zoom_link_removed' do
+ subject { service.zoom_link_removed }
+
+ it_behaves_like 'a system note' do
+ let(:action) { 'pinned_embed' }
+ end
+
+ it 'sets the zoom link removed note text' do
+ expect(subject.note).to eq('removed a Zoom call from this issue')
+ end
+ end
+end
diff --git a/spec/services/todos/destroy/private_features_service_spec.rb b/spec/services/todos/destroy/private_features_service_spec.rb
index 7831e3a47e0..dfe9f42e8b1 100644
--- a/spec/services/todos/destroy/private_features_service_spec.rb
+++ b/spec/services/todos/destroy/private_features_service_spec.rb
@@ -27,7 +27,7 @@ describe Todos::Destroy::PrivateFeaturesService do
context 'when user_id is provided' do
subject { described_class.new(project.id, user.id).execute }
- context 'when all feaures have same visibility as the project' do
+ context 'when all features have same visibility as the project' do
it 'removes only user issue todos' do
expect { subject }.not_to change { Todo.count }
end
@@ -92,7 +92,7 @@ describe Todos::Destroy::PrivateFeaturesService do
context 'when user_id is not provided' do
subject { described_class.new(project.id).execute }
- context 'when all feaures have same visibility as the project' do
+ context 'when all features have same visibility as the project' do
it 'does not remove any todos' do
expect { subject }.not_to change { Todo.count }
end
diff --git a/spec/services/update_deployment_service_spec.rb b/spec/services/update_deployment_service_spec.rb
deleted file mode 100644
index 7dc52f6816a..00000000000
--- a/spec/services/update_deployment_service_spec.rb
+++ /dev/null
@@ -1,235 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe UpdateDeploymentService do
- let(:user) { create(:user) }
- let(:project) { create(:project, :repository) }
- let(:options) { { name: 'production' } }
-
- let(:job) do
- create(:ci_build,
- ref: 'master',
- tag: false,
- environment: 'production',
- options: { environment: options },
- project: project)
- end
-
- let(:deployment) { job.deployment }
- let(:environment) { deployment.environment }
-
- subject(:service) { described_class.new(deployment) }
-
- before do
- allow(Deployments::FinishedWorker).to receive(:perform_async)
- job.success! # Create/Succeed deployment
- end
-
- describe '#execute' do
- let(:store) { Gitlab::EtagCaching::Store.new }
-
- it 'invalidates the environment etag cache' do
- old_value = store.get(environment.etag_cache_key)
-
- service.execute
-
- expect(store.get(environment.etag_cache_key)).not_to eq(old_value)
- end
-
- it 'creates ref' do
- expect_any_instance_of(Repository)
- .to receive(:create_ref)
- .with(deployment.ref, deployment.send(:ref_path))
-
- service.execute
- end
-
- it 'updates merge request metrics' do
- expect_any_instance_of(Deployment)
- .to receive(:update_merge_request_metrics!)
-
- service.execute
- end
-
- it 'returns the deployment' do
- expect(subject.execute).to eq(deployment)
- end
-
- it 'returns the deployment when could not save the environment' do
- allow(environment).to receive(:save).and_return(false)
-
- expect(subject.execute).to eq(deployment)
- end
-
- it 'returns the deployment when environment is stopped' do
- allow(environment).to receive(:stopped?).and_return(true)
-
- expect(subject.execute).to eq(deployment)
- end
-
- context 'when start action is defined' do
- let(:options) { { name: 'production', action: 'start' } }
-
- context 'and environment is stopped' do
- before do
- environment.stop
- end
-
- it 'makes environment available' do
- service.execute
-
- expect(environment.reload).to be_available
- end
- end
- end
-
- context 'when variables are used' do
- let(:options) do
- { name: 'review-apps/$CI_COMMIT_REF_NAME',
- url: 'http://$CI_COMMIT_REF_NAME.review-apps.gitlab.com' }
- end
-
- before do
- environment.update(name: 'review-apps/master')
- job.update(environment: 'review-apps/$CI_COMMIT_REF_NAME')
- end
-
- it 'does not create a new environment' do
- expect { subject.execute }.not_to change { Environment.count }
- end
-
- it 'updates external url' do
- subject.execute
-
- expect(subject.environment.name).to eq('review-apps/master')
- expect(subject.environment.external_url).to eq('http://master.review-apps.gitlab.com')
- end
- end
- end
-
- describe '#expanded_environment_url' do
- subject { service.send(:expanded_environment_url) }
-
- context 'when yaml environment uses $CI_COMMIT_REF_NAME' do
- let(:job) do
- create(:ci_build,
- ref: 'master',
- environment: 'production',
- project: project,
- options: { environment: { name: 'production', url: 'http://review/$CI_COMMIT_REF_NAME' } })
- end
-
- it { is_expected.to eq('http://review/master') }
- end
-
- context 'when yaml environment uses $CI_ENVIRONMENT_SLUG' do
- let(:job) do
- create(:ci_build,
- ref: 'master',
- environment: 'prod-slug',
- project: project,
- options: { environment: { name: 'prod-slug', url: 'http://review/$CI_ENVIRONMENT_SLUG' } })
- end
-
- it { is_expected.to eq('http://review/prod-slug') }
- end
-
- context 'when yaml environment uses yaml_variables containing symbol keys' do
- let(:job) do
- create(:ci_build,
- yaml_variables: [{ key: :APP_HOST, value: 'host' }],
- environment: 'production',
- project: project,
- options: { environment: { name: 'production', url: 'http://review/$APP_HOST' } })
- end
-
- it { is_expected.to eq('http://review/host') }
- end
-
- context 'when yaml environment does not have url' do
- let(:job) { create(:ci_build, environment: 'staging', project: project) }
-
- it 'returns the external_url from persisted environment' do
- is_expected.to be_nil
- end
- end
- end
-
- describe "merge request metrics" do
- let(:merge_request) { create(:merge_request, target_branch: 'master', source_branch: 'feature', source_project: project) }
-
- context "while updating the 'first_deployed_to_production_at' time" do
- before do
- merge_request.metrics.update!(merged_at: 1.hour.ago)
- end
-
- context "for merge requests merged before the current deploy" do
- it "sets the time if the deploy's environment is 'production'" do
- service.execute
-
- expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_like_time(deployment.finished_at)
- end
-
- context 'when job deploys to staging' do
- let(:job) do
- create(:ci_build,
- ref: 'master',
- tag: false,
- environment: 'staging',
- options: { environment: { name: 'staging' } },
- project: project)
- end
-
- it "doesn't set the time if the deploy's environment is not 'production'" do
- service.execute
-
- expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_nil
- end
- end
-
- it 'does not raise errors if the merge request does not have a metrics record' do
- merge_request.metrics.destroy
-
- expect(merge_request.reload.metrics).to be_nil
- expect { service.execute }.not_to raise_error
- end
- end
-
- context "for merge requests merged before the previous deploy" do
- context "if the 'first_deployed_to_production_at' time is already set" do
- it "does not overwrite the older 'first_deployed_to_production_at' time" do
- # Previous deploy
- service.execute
-
- expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_like_time(deployment.finished_at)
-
- # Current deploy
- Timecop.travel(12.hours.from_now) do
- service.execute
-
- expect(merge_request.reload.metrics.first_deployed_to_production_at).to be_like_time(deployment.finished_at)
- end
- end
- end
-
- context "if the 'first_deployed_to_production_at' time is not already set" do
- it "does not overwrite the older 'first_deployed_to_production_at' time" do
- # Previous deploy
- time = 5.minutes.from_now
- Timecop.freeze(time) { service.execute }
-
- expect(merge_request.reload.metrics.merged_at).to be < merge_request.reload.metrics.first_deployed_to_production_at
-
- previous_time = merge_request.reload.metrics.first_deployed_to_production_at
-
- # Current deploy
- Timecop.freeze(time + 12.hours) { service.execute }
-
- expect(merge_request.reload.metrics.first_deployed_to_production_at).to eq(previous_time)
- end
- end
- end
- end
- end
-end
diff --git a/spec/services/users/destroy_service_spec.rb b/spec/services/users/destroy_service_spec.rb
index 4a5f4509a7b..23a0c71175e 100644
--- a/spec/services/users/destroy_service_spec.rb
+++ b/spec/services/users/destroy_service_spec.rb
@@ -183,7 +183,7 @@ describe Users::DestroyService do
let!(:project) { create(:project, :empty_repo, :legacy_storage, namespace: user.namespace) }
it 'removes repository' do
- expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
end
end
@@ -191,7 +191,7 @@ describe Users::DestroyService do
let!(:project) { create(:project, :empty_repo, namespace: user.namespace) }
it 'removes repository' do
- expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
+ expect(gitlab_shell.repository_exists?(project.repository_storage, "#{project.disk_path}.git")).to be_falsey
end
end
end
diff --git a/spec/simplecov_env.rb b/spec/simplecov_env.rb
index 82236bb4201..c5b8a6db605 100644
--- a/spec/simplecov_env.rb
+++ b/spec/simplecov_env.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'simplecov'
require 'active_support/core_ext/numeric/time'
require_relative '../lib/gitlab/utils'
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 18bfe5a2be7..7a5e570558e 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require './spec/simplecov_env'
SimpleCovEnv.start!
@@ -10,6 +12,7 @@ require 'rspec/rails'
require 'shoulda/matchers'
require 'rspec/retry'
require 'rspec-parameterized'
+require 'test_prof/recipes/rspec/let_it_be'
rspec_profiling_is_configured =
ENV['RSPEC_PROFILING_POSTGRES_URL'].present? ||
@@ -85,9 +88,10 @@ RSpec.configure do |config|
config.include FixtureHelpers
config.include GitlabRoutingHelper
config.include StubFeatureFlags
+ config.include StubExperiments
config.include StubGitlabCalls
config.include StubGitlabData
- config.include ExpectNextInstanceOf
+ config.include NextInstanceOf
config.include TestEnv
config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::IntegrationHelpers, type: :feature
@@ -151,6 +155,17 @@ RSpec.configure do |config|
.with(:force_autodevops_on_by_default, anything)
.and_return(false)
+ # The following can be removed once Vue Issuable Sidebar
+ # is feature-complete and can be made default in place
+ # of older sidebar.
+ # See https://gitlab.com/groups/gitlab-org/-/epics/1863
+ allow(Feature).to receive(:enabled?)
+ .with(:vue_issuable_sidebar, anything)
+ .and_return(false)
+ allow(Feature).to receive(:enabled?)
+ .with(:vue_issuable_epic_sidebar, anything)
+ .and_return(false)
+
# Stub these calls due to being expensive operations
# It can be reenabled for specific tests via:
#
@@ -160,6 +175,25 @@ RSpec.configure do |config|
allow(Gitlab::Git::KeepAround).to receive(:execute)
Gitlab::ThreadMemoryCache.cache_backend.clear
+
+ # Temporary patch to force admin mode to be active by default in tests when
+ # using the feature flag :user_mode_in_session, since this will require
+ # modifying a significant number of specs to test both states for admin
+ # mode enabled / disabled.
+ #
+ # See https://gitlab.com/gitlab-org/gitlab/issues/31511
+ # See gitlab/spec/support/helpers/admin_mode_helpers.rb
+ #
+ # If it is required to have the real behaviour that an admin is signed in
+ # with normal user mode and needs to switch to admin mode, it is possible to
+ # mark such tests with the `do_not_mock_admin_mode` metadata tag, e.g:
+ #
+ # context 'some test with normal user mode', :do_not_mock_admin_mode do ... end
+ unless example.metadata[:do_not_mock_admin_mode]
+ allow_any_instance_of(Gitlab::Auth::CurrentUserMode).to receive(:admin_mode?) do |current_user_mode|
+ current_user_mode.send(:user)&.admin?
+ end
+ end
end
config.around(:example, :quarantine) do |example|
@@ -330,6 +364,10 @@ FactoryBot::SyntaxRunner.class_eval do
include RSpec::Mocks::ExampleMethods
end
+# Use FactoryBot 4.x behavior:
+# https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#associations
+FactoryBot.use_parent_strategy = false
+
ActiveRecord::Migration.maintain_test_schema!
Shoulda::Matchers.configure do |config|
@@ -341,3 +379,6 @@ end
# Prevent Rugged from picking up local developer gitconfig.
Rugged::Settings['search_path_global'] = Rails.root.join('tmp/tests').to_s
+
+# Disable timestamp checks for invisible_captcha
+InvisibleCaptcha.timestamp_enabled = false
diff --git a/spec/support/api/boards_shared_examples.rb b/spec/support/api/boards_shared_examples.rb
index b7aff32460d..d41490f33e4 100644
--- a/spec/support/api/boards_shared_examples.rb
+++ b/spec/support/api/boards_shared_examples.rb
@@ -171,7 +171,7 @@ shared_examples_for 'group and project boards' do |route_definition, ee = false|
if board_parent.try(:namespace)
board_parent.update(namespace: owner.namespace)
else
- board.parent.add_owner(owner)
+ board.resource_parent.add_owner(owner)
end
end
diff --git a/spec/support/api/milestones_shared_examples.rb b/spec/support/api/milestones_shared_examples.rb
index d6439f77408..ce8c2140e99 100644
--- a/spec/support/api/milestones_shared_examples.rb
+++ b/spec/support/api/milestones_shared_examples.rb
@@ -205,7 +205,7 @@ shared_examples_for 'group and project milestones' do |route_definition|
describe "DELETE #{route_definition}/:milestone_id" do
it "rejects a member with reporter access from deleting a milestone" do
reporter = create(:user)
- milestone.parent.add_reporter(reporter)
+ milestone.resource_parent.add_reporter(reporter)
delete api(resource_route, reporter)
diff --git a/spec/support/controllers/githubish_import_controller_shared_examples.rb b/spec/support/controllers/githubish_import_controller_shared_examples.rb
index 718d9857b18..f23812e7149 100644
--- a/spec/support/controllers/githubish_import_controller_shared_examples.rb
+++ b/spec/support/controllers/githubish_import_controller_shared_examples.rb
@@ -139,6 +139,38 @@ shared_examples 'a GitHub-ish import controller: GET status' do
expect { get :status, format: :json }
.not_to exceed_all_query_limit(control_count)
end
+
+ context 'when filtering' do
+ let(:repo_2) { OpenStruct.new(login: 'emacs', full_name: 'asd/emacs', name: 'emacs', owner: { login: 'owner' }) }
+ let(:project) { create(:project, import_type: provider, namespace: user.namespace, import_status: :finished, import_source: 'example/repo') }
+ let(:group) { create(:group) }
+
+ before do
+ group.add_owner(user)
+ stub_client(repos: [repo, repo_2, org_repo], orgs: [org], org_repos: [org_repo])
+ end
+
+ it 'filters list of repositories by name' do
+ get :status, params: { filter: 'emacs' }, format: :json
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response.dig("imported_projects").count).to eq(0)
+ expect(json_response.dig("provider_repos").count).to eq(1)
+ expect(json_response.dig("provider_repos", 0, "id")).to eq(repo_2.id)
+ expect(json_response.dig("namespaces", 0, "id")).to eq(group.id)
+ end
+
+ context 'when user input contains html' do
+ let(:expected_filter) { 'test' }
+ let(:filter) { "<html>#{expected_filter}</html>" }
+
+ it 'sanitizes user input' do
+ get :status, params: { filter: filter }, format: :json
+
+ expect(assigns(:filter)).to eq(expected_filter)
+ end
+ end
+ end
end
shared_examples 'a GitHub-ish import controller: POST create' do
diff --git a/spec/support/features/rss_shared_examples.rb b/spec/support/features/rss_shared_examples.rb
index c97eeba87db..bbe793a81bc 100644
--- a/spec/support/features/rss_shared_examples.rb
+++ b/spec/support/features/rss_shared_examples.rb
@@ -8,7 +8,9 @@ end
shared_examples "it has an RSS button with current_user's feed token" do
it "shows the RSS button with current_user's feed token" do
- expect(page).to have_css("a:has(.fa-rss)[href*='feed_token=#{user.feed_token}']")
+ expect(page)
+ .to have_css("a:has(.fa-rss)[href*='feed_token=#{user.feed_token}']")
+ .or have_css("a.js-rss-button[href*='feed_token=#{user.feed_token}']")
end
end
@@ -20,6 +22,8 @@ end
shared_examples "it has an RSS button without a feed token" do
it "shows the RSS button without a feed token" do
- expect(page).to have_css("a:has(.fa-rss):not([href*='feed_token'])")
+ expect(page)
+ .to have_css("a:has(.fa-rss):not([href*='feed_token'])")
+ .or have_css("a.js-rss-button:not([href*='feed_token'])")
end
end
diff --git a/spec/support/google_api/cloud_platform_helpers.rb b/spec/support/google_api/cloud_platform_helpers.rb
index a1328ef0d13..38ffca8c5ae 100644
--- a/spec/support/google_api/cloud_platform_helpers.rb
+++ b/spec/support/google_api/cloud_platform_helpers.rb
@@ -65,7 +65,7 @@ module GoogleApi
end
def cloud_platform_create_cluster_url(project_id, zone)
- "https://container.googleapis.com/v1/projects/#{project_id}/zones/#{zone}/clusters"
+ "https://container.googleapis.com/v1beta1/projects/#{project_id}/zones/#{zone}/clusters"
end
def cloud_platform_get_zone_operation_url(project_id, zone, operation_id)
diff --git a/spec/support/helpers/admin_mode_helpers.rb b/spec/support/helpers/admin_mode_helpers.rb
new file mode 100644
index 00000000000..de8ffe40536
--- /dev/null
+++ b/spec/support/helpers/admin_mode_helpers.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+# Helper for enabling admin mode in tests
+
+module AdminModeHelper
+ # Users are logged in by default in user mode and have to switch to admin
+ # mode for accessing any administrative functionality. This helper lets a user
+ # be in admin mode without requiring a second authentication step (provided
+ # the user is an admin)
+ def enable_admin_mode!(user)
+ fake_user_mode = instance_double(Gitlab::Auth::CurrentUserMode)
+
+ allow(Gitlab::Auth::CurrentUserMode).to receive(:new).with(user).and_return(fake_user_mode)
+ allow(fake_user_mode).to receive(:admin_mode?).and_return(user&.admin?)
+ end
+end
diff --git a/spec/support/helpers/cycle_analytics_helpers.rb b/spec/support/helpers/cycle_analytics_helpers.rb
index 575b2e779c5..a604359942f 100644
--- a/spec/support/helpers/cycle_analytics_helpers.rb
+++ b/spec/support/helpers/cycle_analytics_helpers.rb
@@ -25,11 +25,15 @@ module CycleAnalyticsHelpers
return if skip_push_handler
- Git::BranchPushService.new(project,
- user,
- oldrev: oldrev,
- newrev: commit_shas.last,
- ref: 'refs/heads/master').execute
+ Git::BranchPushService.new(
+ project,
+ user,
+ change: {
+ oldrev: oldrev,
+ newrev: commit_shas.last,
+ ref: 'refs/heads/master'
+ }
+ ).execute
end
def create_cycle(user, project, issue, mr, milestone, pipeline)
@@ -109,6 +113,7 @@ module CycleAnalyticsHelpers
def new_dummy_job(user, project, environment)
create(:ci_build,
+ :with_deployment,
project: project,
user: user,
environment: environment,
diff --git a/spec/support/helpers/expect_next_instance_of.rb b/spec/support/helpers/expect_next_instance_of.rb
deleted file mode 100644
index 749d2cb2a56..00000000000
--- a/spec/support/helpers/expect_next_instance_of.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-module ExpectNextInstanceOf
- def expect_next_instance_of(klass, *new_args)
- receive_new = receive(:new)
- receive_new.with(*new_args) if new_args.any?
-
- expect(klass).to receive_new
- .and_wrap_original do |method, *original_args|
- method.call(*original_args).tap do |instance|
- yield(instance)
- end
- end
- end
-end
diff --git a/spec/support/helpers/gpg_helpers.rb b/spec/support/helpers/gpg_helpers.rb
index 03ffadc8f7f..f4df1cf601c 100644
--- a/spec/support/helpers/gpg_helpers.rb
+++ b/spec/support/helpers/gpg_helpers.rb
@@ -373,6 +373,8 @@ module GpgHelpers
KEY
end
+ # passphrase for secret key is:
+ # 4a45718624c9939a043471d83d1eda7c
def secret_key
<<~SECRET
-----BEGIN PGP PRIVATE KEY BLOCK-----
diff --git a/spec/support/helpers/group_api_helpers.rb b/spec/support/helpers/group_api_helpers.rb
new file mode 100644
index 00000000000..56c4cc121a7
--- /dev/null
+++ b/spec/support/helpers/group_api_helpers.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+module GroupAPIHelpers
+ extend self
+
+ def attributes_for_group_api(params = {})
+ # project_creation_level and subgroup_creation_level are Integers in the model
+ # but are strings in the API
+ attributes_for(:group, params).except(:project_creation_level, :subgroup_creation_level)
+ end
+end
diff --git a/spec/support/helpers/javascript_fixtures_helpers.rb b/spec/support/helpers/javascript_fixtures_helpers.rb
index 7ec65318ec5..fd5ad9451f7 100644
--- a/spec/support/helpers/javascript_fixtures_helpers.rb
+++ b/spec/support/helpers/javascript_fixtures_helpers.rb
@@ -69,7 +69,7 @@ module JavaScriptFixturesHelpers
link_tags = doc.css('link')
link_tags.remove
- scripts = doc.css("script:not([type='text/template']):not([type='text/x-template'])")
+ scripts = doc.css("script:not([type='text/template']):not([type='text/x-template']):not([type='application/json'])")
scripts.remove
fixture = doc.to_html
diff --git a/spec/support/helpers/kubernetes_helpers.rb b/spec/support/helpers/kubernetes_helpers.rb
index 538a5b8ef3c..e74dbca4f93 100644
--- a/spec/support/helpers/kubernetes_helpers.rb
+++ b/spec/support/helpers/kubernetes_helpers.rb
@@ -11,6 +11,10 @@ module KubernetesHelpers
kube_response(kube_pods_body)
end
+ def kube_pod_response
+ kube_response(kube_pod)
+ end
+
def kube_logs_response
kube_response(kube_logs_body)
end
@@ -63,11 +67,30 @@ module KubernetesHelpers
WebMock.stub_request(:get, pods_url).to_return(response || kube_pods_response)
end
- def stub_kubeclient_logs(pod_name, namespace, status: nil)
+ def stub_kubeclient_pod_details(pod, namespace, status: nil)
stub_kubeclient_discover(service.api_url)
- logs_url = service.api_url + "/api/v1/namespaces/#{namespace}/pods/#{pod_name}/log?tailLines=#{Clusters::Platforms::Kubernetes::LOGS_LIMIT}"
+
+ pod_url = service.api_url + "/api/v1/namespaces/#{namespace}/pods/#{pod}"
response = { status: status } if status
+ WebMock.stub_request(:get, pod_url).to_return(response || kube_pod_response)
+ end
+
+ def stub_kubeclient_logs(pod_name, namespace, container: nil, status: nil, message: nil)
+ stub_kubeclient_discover(service.api_url)
+
+ if container
+ container_query_param = "container=#{container}&"
+ end
+
+ logs_url = service.api_url + "/api/v1/namespaces/#{namespace}/pods/#{pod_name}" \
+ "/log?#{container_query_param}tailLines=#{Clusters::Platforms::Kubernetes::LOGS_LIMIT}"
+
+ if status
+ response = { status: status }
+ response[:body] = { message: message }.to_json if message
+ end
+
WebMock.stub_request(:get, logs_url).to_return(response || kube_logs_response)
end
@@ -296,10 +319,10 @@ module KubernetesHelpers
}
end
- def kube_knative_services_body(**options)
+ def kube_knative_services_body(legacy_knative: false, **options)
{
"kind" => "List",
- "items" => [kube_service(options)]
+ "items" => [legacy_knative ? knative_05_service(options) : kube_service(options)]
}
end
@@ -387,6 +410,29 @@ module KubernetesHelpers
"generation" => 2
},
"status" => {
+ "url" => "http://#{name}.#{namespace}.#{domain}",
+ "address" => {
+ "url" => "#{name}.#{namespace}.svc.cluster.local"
+ },
+ "latestCreatedRevisionName" => "#{name}-00002",
+ "latestReadyRevisionName" => "#{name}-00002",
+ "observedGeneration" => 2
+ }
+ }
+ end
+
+ def knative_05_service(name: "kubetest", namespace: "default", domain: "example.com")
+ {
+ "metadata" => {
+ "creationTimestamp" => "2018-11-21T06:16:33Z",
+ "name" => name,
+ "namespace" => namespace,
+ "selfLink" => "/apis/serving.knative.dev/v1alpha1/namespaces/#{namespace}/services/#{name}"
+ },
+ "spec" => {
+ "generation" => 2
+ },
+ "status" => {
"domain" => "#{name}.#{namespace}.#{domain}",
"domainInternal" => "#{name}.#{namespace}.svc.cluster.local",
"latestCreatedRevisionName" => "#{name}-00002",
@@ -414,8 +460,10 @@ module KubernetesHelpers
}
},
"status" => {
- "domain" => "#{name}.#{namespace}.#{domain}",
- "domainInternal" => "#{name}.#{namespace}.svc.cluster.local",
+ "url" => "http://#{name}.#{namespace}.#{domain}",
+ "address" => {
+ "url" => "#{name}.#{namespace}.svc.cluster.local"
+ },
"latestCreatedRevisionName" => "#{name}-00002",
"latestReadyRevisionName" => "#{name}-00002",
"observedGeneration" => 2
diff --git a/spec/support/helpers/lfs_http_helpers.rb b/spec/support/helpers/lfs_http_helpers.rb
new file mode 100644
index 00000000000..0537b122040
--- /dev/null
+++ b/spec/support/helpers/lfs_http_helpers.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+require_relative 'workhorse_helpers'
+
+module LfsHttpHelpers
+ include WorkhorseHelpers
+
+ def authorize_ci_project
+ ActionController::HttpAuthentication::Basic.encode_credentials('gitlab-ci-token', build.token)
+ end
+
+ def authorize_user
+ ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
+ end
+
+ def authorize_deploy_key
+ Gitlab::LfsToken.new(key).basic_encoding
+ end
+
+ def authorize_user_key
+ Gitlab::LfsToken.new(user).basic_encoding
+ end
+
+ def authorize_deploy_token
+ ActionController::HttpAuthentication::Basic.encode_credentials(deploy_token.username, deploy_token.token)
+ end
+
+ def post_lfs_json(url, body = nil, headers = nil)
+ params = body.try(:to_json)
+ headers = (headers || {}).merge('Content-Type' => LfsRequest::CONTENT_TYPE)
+
+ post(url, params: params, headers: headers)
+ end
+
+ def batch_url(project)
+ "#{project.http_url_to_repo}/info/lfs/objects/batch"
+ end
+
+ def objects_url(project, oid = nil, size = nil)
+ File.join(["#{project.http_url_to_repo}/gitlab-lfs/objects", oid, size].compact.map(&:to_s))
+ end
+
+ def authorize_url(project, oid, size)
+ File.join(objects_url(project, oid, size), 'authorize')
+ end
+
+ def download_body(objects)
+ request_body('download', objects)
+ end
+
+ def upload_body(objects)
+ request_body('upload', objects)
+ end
+
+ def request_body(operation, objects)
+ objects = [objects] unless objects.is_a?(Array)
+
+ {
+ 'operation' => operation,
+ 'objects' => objects
+ }
+ end
+end
diff --git a/spec/support/helpers/login_helpers.rb b/spec/support/helpers/login_helpers.rb
index 95fcfde2d32..7d5896e4eeb 100644
--- a/spec/support/helpers/login_helpers.rb
+++ b/spec/support/helpers/login_helpers.rb
@@ -48,6 +48,14 @@ module LoginHelpers
@current_user = user
end
+ def gitlab_enable_admin_mode_sign_in(user)
+ visit new_admin_session_path
+
+ fill_in 'password', with: user.password
+
+ click_button 'Enter admin mode'
+ end
+
def gitlab_sign_in_via(provider, user, uid, saml_response = nil)
mock_auth_hash_with_saml_xml(provider, uid, user.email, saml_response)
visit new_user_session_path
diff --git a/spec/support/helpers/migrations_helpers.rb b/spec/support/helpers/migrations_helpers.rb
index 176788d0506..68f71494771 100644
--- a/spec/support/helpers/migrations_helpers.rb
+++ b/spec/support/helpers/migrations_helpers.rb
@@ -132,6 +132,41 @@ module MigrationsHelpers
migration.name == described_class.name
end
end
+
+ class ReversibleMigrationTest
+ attr_reader :before_up, :after_up
+
+ def initialize
+ @before_up = -> {}
+ @after_up = -> {}
+ end
+
+ def before(expectations)
+ @before_up = expectations
+
+ self
+ end
+
+ def after(expectations)
+ @after_up = expectations
+
+ self
+ end
+ end
+
+ def reversible_migration(&block)
+ tests = yield(ReversibleMigrationTest.new)
+
+ tests.before_up.call
+
+ migrate!
+
+ tests.after_up.call
+
+ schema_migrate_down!
+
+ tests.before_up.call
+ end
end
MigrationsHelpers.prepend_if_ee('EE::MigrationsHelpers')
diff --git a/spec/support/helpers/next_instance_of.rb b/spec/support/helpers/next_instance_of.rb
new file mode 100644
index 00000000000..83c788c3d38
--- /dev/null
+++ b/spec/support/helpers/next_instance_of.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+module NextInstanceOf
+ def expect_next_instance_of(klass, *new_args)
+ stub_new(expect(klass), *new_args) do |expectation|
+ yield(expectation)
+ end
+ end
+
+ def allow_next_instance_of(klass, *new_args)
+ stub_new(allow(klass), *new_args) do |allowance|
+ yield(allowance)
+ end
+ end
+
+ private
+
+ def stub_new(target, *new_args)
+ receive_new = receive(:new)
+ receive_new.with(*new_args) if new_args.any?
+
+ target.to receive_new.and_wrap_original do |method, *original_args|
+ method.call(*original_args).tap do |instance|
+ yield(instance)
+ end
+ end
+ end
+end
diff --git a/spec/support/helpers/rack_attack_spec_helpers.rb b/spec/support/helpers/rack_attack_spec_helpers.rb
new file mode 100644
index 00000000000..234271ba1c0
--- /dev/null
+++ b/spec/support/helpers/rack_attack_spec_helpers.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+module RackAttackSpecHelpers
+ def post_args_with_token_headers(url, token_headers)
+ [url, params: nil, headers: token_headers]
+ end
+
+ def api_get_args_with_token_headers(partial_url, token_headers)
+ ["/api/#{API::API.version}#{partial_url}", params: nil, headers: token_headers]
+ end
+
+ def rss_url(user)
+ "/dashboard/projects.atom?feed_token=#{user.feed_token}"
+ end
+
+ def private_token_headers(user)
+ { 'HTTP_PRIVATE_TOKEN' => user.private_token }
+ end
+
+ def personal_access_token_headers(personal_access_token)
+ { 'HTTP_PRIVATE_TOKEN' => personal_access_token.token }
+ end
+
+ def oauth_token_headers(oauth_access_token)
+ { 'AUTHORIZATION' => "Bearer #{oauth_access_token.token}" }
+ end
+
+ def expect_rejection(&block)
+ yield
+
+ expect(response).to have_http_status(429)
+ end
+end
diff --git a/spec/support/helpers/repo_helpers.rb b/spec/support/helpers/repo_helpers.rb
index b5defba332a..255a15b1ab0 100644
--- a/spec/support/helpers/repo_helpers.rb
+++ b/spec/support/helpers/repo_helpers.rb
@@ -92,7 +92,7 @@ eos
)
end
- def sample_compare
+ def sample_compare(extra_changes = [])
changes = [
{
line_code: 'a5cc2925ca8258af241be7e5b0381edf30266302_20_20',
@@ -102,7 +102,7 @@ eos
line_code: '7445606fbf8f3683cd42bdc54b05d7a0bc2dfc44_4_6',
file_path: '.gitmodules'
}
- ]
+ ] + extra_changes
commits = %w(
5937ac0a7beb003549fc5fd26fc247adbce4a52e
diff --git a/spec/support/helpers/select2_helper.rb b/spec/support/helpers/select2_helper.rb
index 9c42c2b0d8b..38bf34bdd61 100644
--- a/spec/support/helpers/select2_helper.rb
+++ b/spec/support/helpers/select2_helper.rb
@@ -24,7 +24,7 @@ module Select2Helper
selector = options.fetch(:from)
- first(selector, visible: false)
+ ensure_select2_loaded(selector)
if options[:multiple]
execute_script("$('#{selector}').select2('val', ['#{value}']).trigger('change');")
@@ -34,14 +34,24 @@ module Select2Helper
end
def open_select2(selector)
+ ensure_select2_loaded(selector)
+
execute_script("$('#{selector}').select2('open');")
end
def close_select2(selector)
+ ensure_select2_loaded(selector)
+
execute_script("$('#{selector}').select2('close');")
end
def scroll_select2_to_bottom(selector)
evaluate_script "$('#{selector}').scrollTop($('#{selector}')[0].scrollHeight); $('#{selector}');"
end
+
+ private
+
+ def ensure_select2_loaded(selector)
+ first(selector, visible: :all).sibling('.select2-container')
+ end
end
diff --git a/spec/support/helpers/stub_experiments.rb b/spec/support/helpers/stub_experiments.rb
new file mode 100644
index 00000000000..ed868e22c6e
--- /dev/null
+++ b/spec/support/helpers/stub_experiments.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module StubExperiments
+ # Stub Experiment with `key: true/false`
+ #
+ # @param [Hash] experiment where key is feature name and value is boolean whether enabled or not.
+ #
+ # Examples
+ # - `stub_experiment(signup_flow: false)` ... Disable `signup_flow` experiment globally.
+ def stub_experiment(experiments)
+ experiments.each do |experiment_key, enabled|
+ allow(Gitlab::Experimentation).to receive(:enabled?).with(experiment_key, any_args) { enabled }
+ end
+ end
+end
diff --git a/spec/support/helpers/test_env.rb b/spec/support/helpers/test_env.rb
index 3274651ef19..a409dd2ef26 100644
--- a/spec/support/helpers/test_env.rb
+++ b/spec/support/helpers/test_env.rb
@@ -36,6 +36,7 @@ module TestEnv
'expand-collapse-lines' => '238e82d',
'pages-deploy' => '7897d5b',
'pages-deploy-target' => '7975be0',
+ 'audio' => 'c3c21fd',
'video' => '8879059',
'add-balsamiq-file' => 'b89b56d',
'crlf-diff' => '5938907',
@@ -99,7 +100,6 @@ module TestEnv
clean_test_path
- # Set up GitLab shell for test instance
setup_gitlab_shell
setup_gitaly
@@ -144,10 +144,7 @@ module TestEnv
end
def setup_gitlab_shell
- component_timed_setup('GitLab Shell',
- install_dir: Gitlab.config.gitlab_shell.path,
- version: Gitlab::Shell.version_required,
- task: 'gitlab:shell:install')
+ FileUtils.mkdir_p(Gitlab.config.gitlab_shell.path)
end
def setup_gitaly
diff --git a/spec/support/helpers/wait_for_requests.rb b/spec/support/helpers/wait_for_requests.rb
index 30dff1063b5..d5483d0b0a7 100644
--- a/spec/support/helpers/wait_for_requests.rb
+++ b/spec/support/helpers/wait_for_requests.rb
@@ -49,11 +49,11 @@ module WaitForRequests
return true unless javascript_test?
finished_all_ajax_requests? &&
- finished_all_vue_resource_requests?
+ finished_all_axios_requests?
end
- def finished_all_vue_resource_requests?
- Capybara.page.evaluate_script('window.activeVueResources || 0').zero?
+ def finished_all_axios_requests?
+ Capybara.page.evaluate_script('window.pendingRequests || 0').zero?
end
def finished_all_ajax_requests?
diff --git a/spec/support/helpers/workhorse_helpers.rb b/spec/support/helpers/workhorse_helpers.rb
index 40007a14b85..e0fba191deb 100644
--- a/spec/support/helpers/workhorse_helpers.rb
+++ b/spec/support/helpers/workhorse_helpers.rb
@@ -22,16 +22,40 @@ module WorkhorseHelpers
# workhorse_post_with_file will transform file_key inside params as if it was disk accelerated by workhorse
def workhorse_post_with_file(url, file_key:, params:)
+ workhorse_request_with_file(:post, url,
+ file_key: file_key,
+ params: params,
+ env: { 'CONTENT_TYPE' => 'multipart/form-data' },
+ send_rewritten_field: true
+ )
+ end
+
+ # workhorse_finalize will transform file_key inside params as if it was the finalize call of an inline object storage upload.
+ # note that based on the content of the params it can simulate a disc acceleration or an object storage upload
+ def workhorse_finalize(url, method: :post, file_key:, params:, headers: {})
+ workhorse_request_with_file(method, url,
+ file_key: file_key,
+ params: params,
+ extra_headers: headers,
+ send_rewritten_field: false
+ )
+ end
+
+ def workhorse_request_with_file(method, url, file_key:, params:, env: {}, extra_headers: {}, send_rewritten_field:)
workhorse_params = params.dup
file = workhorse_params.delete(file_key)
- workhorse_params.merge!(workhorse_disk_accelerated_file_params(file_key, file))
+ workhorse_params = workhorse_disk_accelerated_file_params(file_key, file).merge(workhorse_params)
+
+ headers = if send_rewritten_field
+ workhorse_rewritten_fields_header(file_key => file.path)
+ else
+ {}
+ end
+
+ headers.merge!(extra_headers)
- post(url,
- params: workhorse_params,
- headers: workhorse_rewritten_fields_header(file_key => file.path),
- env: { 'CONTENT_TYPE' => 'multipart/form-data' }
- )
+ process(method, url, params: workhorse_params, headers: headers, env: env)
end
private
@@ -45,9 +69,24 @@ module WorkhorseHelpers
end
def workhorse_disk_accelerated_file_params(key, file)
+ return {} unless file
+
{
"#{key}.name" => file.original_filename,
- "#{key}.path" => file.path
- }
+ "#{key}.size" => file.size
+ }.tap do |params|
+ params["#{key}.path"] = file.path if file.path
+ params["#{key}.remote_id"] = file.remote_id if file.respond_to?(:remote_id) && file.remote_id
+ end
+ end
+
+ def fog_to_uploaded_file(file)
+ filename = File.basename(file.key)
+
+ UploadedFile.new(nil,
+ filename: filename,
+ remote_id: filename,
+ size: file.content_length
+ )
end
end
diff --git a/spec/support/matchers/graphql_matchers.rb b/spec/support/matchers/graphql_matchers.rb
index 4d48b4b5389..d735c10f698 100644
--- a/spec/support/matchers/graphql_matchers.rb
+++ b/spec/support/matchers/graphql_matchers.rb
@@ -28,9 +28,15 @@ RSpec::Matchers.define :have_graphql_fields do |*expected|
end
end
-RSpec::Matchers.define :have_graphql_field do |field_name|
+RSpec::Matchers.define :have_graphql_field do |field_name, args = {}|
match do |kls|
- expect(kls.fields.keys).to include(GraphqlHelpers.fieldnamerize(field_name))
+ field = kls.fields[GraphqlHelpers.fieldnamerize(field_name)]
+
+ expect(field).to be_present
+
+ args.each do |argument, value|
+ expect(field.send(argument)).to eq(value)
+ end
end
end
diff --git a/spec/support/matchers/log_spam.rb b/spec/support/matchers/log_spam.rb
new file mode 100644
index 00000000000..541cacf558c
--- /dev/null
+++ b/spec/support/matchers/log_spam.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+# This matcher checkes if one spam log with provided attributes was created
+#
+# Example:
+#
+# expect { create_issue }.to log_spam
+RSpec::Matchers.define :log_spam do |expected|
+ def spam_logs
+ SpamLog.all
+ end
+
+ match do |block|
+ block.call
+
+ expect(spam_logs).to contain_exactly(
+ have_attributes(expected)
+ )
+ end
+
+ description do
+ count = spam_logs.count
+
+ if count == 1
+ keys = expected.keys.map(&:to_s)
+ actual = spam_logs.first.attributes.slice(*keys)
+ "create a spam log with #{expected} attributes. #{actual} created instead."
+ else
+ "create exactly 1 spam log with #{expected} attributes. #{count} spam logs created instead."
+ end
+ end
+
+ supports_block_expectations
+end
diff --git a/spec/support/matchers/markdown_matchers.rb b/spec/support/matchers/markdown_matchers.rb
index 3245f8418b1..35b2993443f 100644
--- a/spec/support/matchers/markdown_matchers.rb
+++ b/spec/support/matchers/markdown_matchers.rb
@@ -193,6 +193,17 @@ module MarkdownMatchers
end
end
+ # AudioLinkFilter
+ matcher :parse_audio_links do
+ set_default_markdown_messages
+
+ match do |actual|
+ audio = actual.at_css('audio')
+
+ expect(audio['src']).to end_with('/assets/audio/gitlab-demo.wav')
+ end
+ end
+
# ColorFilter
matcher :parse_colors do
set_default_markdown_messages
diff --git a/spec/support/matchers/policy_matchers.rb b/spec/support/matchers/policy_matchers.rb
new file mode 100644
index 00000000000..020c5ce2baf
--- /dev/null
+++ b/spec/support/matchers/policy_matchers.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+RSpec::Matchers.define :allow_action do |action|
+ match do |policy|
+ expect(policy).to be_allowed(action)
+ end
+
+ failure_message do |policy|
+ policy.debug(action, debug_output = +'')
+ "expected #{policy} to allow #{action}\n\n#{debug_output}"
+ end
+
+ failure_message_when_negated do |policy|
+ policy.debug(action, debug_output = +'')
+ "expected #{policy} not to allow #{action}\n\n#{debug_output}"
+ end
+end
diff --git a/spec/support/omniauth_strategy.rb b/spec/support/omniauth_strategy.rb
index eefa04bd9dd..23907b8e450 100644
--- a/spec/support/omniauth_strategy.rb
+++ b/spec/support/omniauth_strategy.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module StrategyHelpers
include Rack::Test::Methods
include ActionDispatch::Assertions::ResponseAssertions
diff --git a/spec/support/redis/redis_shared_examples.rb b/spec/support/redis/redis_shared_examples.rb
index 7e47cdae866..97a23f02b3e 100644
--- a/spec/support/redis/redis_shared_examples.rb
+++ b/spec/support/redis/redis_shared_examples.rb
@@ -90,6 +90,7 @@ RSpec.shared_examples "redis_shared_examples" do
describe '._raw_config' do
subject { described_class._raw_config }
+
let(:config_file_name) { '/var/empty/doesnotexist' }
it 'is frozen' do
diff --git a/spec/support/shared_contexts/policies/group_policy_shared_context.rb b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
index b89723b1e1a..c503197a773 100644
--- a/spec/support/shared_contexts/policies/group_policy_shared_context.rb
+++ b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
@@ -1,13 +1,13 @@
# frozen_string_literal: true
RSpec.shared_context 'GroupPolicy context' do
- let(:guest) { create(:user) }
- let(:reporter) { create(:user) }
- let(:developer) { create(:user) }
- let(:maintainer) { create(:user) }
- let(:owner) { create(:user) }
- let(:admin) { create(:admin) }
- let(:group) { create(:group, :private, :owner_subgroup_creation_only) }
+ let_it_be(:guest) { create(:user) }
+ let_it_be(:reporter) { create(:user) }
+ let_it_be(:developer) { create(:user) }
+ let_it_be(:maintainer) { create(:user) }
+ let_it_be(:owner) { create(:user) }
+ let_it_be(:admin) { create(:admin) }
+ let_it_be(:group, refind: true) { create(:group, :private, :owner_subgroup_creation_only) }
let(:guest_permissions) do
%i[
@@ -16,6 +16,7 @@ RSpec.shared_context 'GroupPolicy context' do
read_group_merge_requests
]
end
+ let(:read_group_permissions) { %i[read_label read_list read_milestone] }
let(:reporter_permissions) { %i[admin_label read_container_image] }
let(:developer_permissions) { [:admin_milestone] }
let(:maintainer_permissions) do
@@ -36,7 +37,7 @@ RSpec.shared_context 'GroupPolicy context' do
].compact
end
- before do
+ before_all do
group.add_guest(guest)
group.add_reporter(reporter)
group.add_developer(developer)
diff --git a/spec/support/shared_contexts/policies/project_policy_shared_context.rb b/spec/support/shared_contexts/policies/project_policy_shared_context.rb
index 1aa40dcde3d..65398c13d90 100644
--- a/spec/support/shared_contexts/policies/project_policy_shared_context.rb
+++ b/spec/support/shared_contexts/policies/project_policy_shared_context.rb
@@ -38,14 +38,14 @@ RSpec.shared_context 'ProjectPolicy context' do
update_commit_status create_build update_build create_pipeline
update_pipeline create_merge_request_from create_wiki push_code
resolve_note create_container_image update_container_image
- create_environment create_deployment create_release update_release
+ create_environment create_deployment update_deployment create_release update_release
]
end
let(:base_maintainer_permissions) do
%i[
push_to_delete_protected_branch update_project_snippet update_environment
- update_deployment admin_project_snippet admin_project_member admin_note admin_wiki admin_project
+ admin_project_snippet admin_project_member admin_note admin_wiki admin_project
admin_commit_status admin_build admin_container_image
admin_pipeline admin_environment admin_deployment destroy_release add_cluster
daily_statistics
diff --git a/spec/support/shared_contexts/rack_attack_shared_context.rb b/spec/support/shared_contexts/rack_attack_shared_context.rb
new file mode 100644
index 00000000000..c925f565226
--- /dev/null
+++ b/spec/support/shared_contexts/rack_attack_shared_context.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+shared_context 'rack attack cache store' do
+ around do |example|
+ # Instead of test environment's :null_store so the throttles can increment
+ Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new
+
+ # Make time-dependent tests deterministic
+ Timecop.freeze { example.run }
+
+ Rack::Attack.cache.store = Rails.cache
+ end
+end
diff --git a/spec/support/shared_contexts/services_shared_context.rb b/spec/support/shared_contexts/services_shared_context.rb
index 4d176ab5fca..113bcc2af9c 100644
--- a/spec/support/shared_contexts/services_shared_context.rb
+++ b/spec/support/shared_contexts/services_shared_context.rb
@@ -28,12 +28,17 @@ Service.available_services_names.each do |service|
end
end
+ let(:licensed_features) do
+ {
+ 'github' => :github_project_service_integration,
+ 'jenkins' => :jenkins_integration,
+ 'jenkins_deprecated' => :jenkins_integration,
+ 'alerts' => :incident_management
+ }
+ end
+
before do
- if service == 'github' && respond_to?(:stub_licensed_features)
- stub_licensed_features(github_project_service_integration: true)
- project.clear_memoization(:disabled_services)
- project.clear_memoization(:licensed_feature_available)
- end
+ enable_license_for_service(service)
end
def initialize_service(service)
@@ -42,5 +47,18 @@ Service.available_services_names.each do |service|
service_item.save!
service_item
end
+
+ private
+
+ def enable_license_for_service(service)
+ return unless respond_to?(:stub_licensed_features)
+
+ licensed_feature = licensed_features[service]
+ return unless licensed_feature
+
+ stub_licensed_features(licensed_feature => true)
+ project.clear_memoization(:disabled_services)
+ project.clear_memoization(:licensed_feature_available)
+ end
end
end
diff --git a/spec/support/shared_contexts/session_shared_context.rb b/spec/support/shared_contexts/session_shared_context.rb
new file mode 100644
index 00000000000..86c145a8360
--- /dev/null
+++ b/spec/support/shared_contexts/session_shared_context.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+# the session is empty by default; you can overwrite it by defining your own
+# let(:session) variable
+# we do not use a parameter such as |session| because it does not play nice
+# with let variables
+shared_context 'custom session' do
+ let!(:session) { {} }
+
+ around do |example|
+ Gitlab::Session.with_session(session) do
+ example.run
+ end
+ end
+end
diff --git a/spec/support/shared_examples/chat_slash_commands_shared_examples.rb b/spec/support/shared_examples/chat_slash_commands_shared_examples.rb
index a99068ab678..370f2072705 100644
--- a/spec/support/shared_examples/chat_slash_commands_shared_examples.rb
+++ b/spec/support/shared_examples/chat_slash_commands_shared_examples.rb
@@ -94,16 +94,32 @@ RSpec.shared_examples 'chat slash commands service' do
subject.trigger(params)
end
+ shared_examples_for 'blocks command execution' do
+ it do
+ expect_any_instance_of(Gitlab::SlashCommands::Command).not_to receive(:execute)
+
+ result = subject.trigger(params)
+ expect(result[:text]).to match(error_message)
+ end
+ end
+
context 'when user is blocked' do
before do
chat_name.user.block
end
- it 'blocks command execution' do
- expect_any_instance_of(Gitlab::SlashCommands::Command).not_to receive(:execute)
+ it_behaves_like 'blocks command execution' do
+ let(:error_message) { 'you do not have access to the GitLab project' }
+ end
+ end
- result = subject.trigger(params)
- expect(result).to include(text: /^You are not allowed/)
+ context 'when user is deactivated' do
+ before do
+ chat_name.user.deactivate
+ end
+
+ it_behaves_like 'blocks command execution' do
+ let(:error_message) { 'your account has been deactivated by your administrator' }
end
end
end
diff --git a/spec/support/shared_examples/ci/pipeline_email_examples.rb b/spec/support/shared_examples/ci/pipeline_email_examples.rb
new file mode 100644
index 00000000000..f72d8af3c65
--- /dev/null
+++ b/spec/support/shared_examples/ci/pipeline_email_examples.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+shared_examples_for 'correct pipeline information for pipelines for merge requests' do
+ context 'when pipeline for merge request' do
+ let(:pipeline) { merge_request.all_pipelines.first }
+
+ let(:merge_request) do
+ create(:merge_request, :with_detached_merge_request_pipeline,
+ source_project: project,
+ target_project: project)
+ end
+
+ it 'renders a source ref of the pipeline' do
+ render
+
+ expect(rendered).to have_content pipeline.source_ref
+ expect(rendered).not_to have_content pipeline.ref
+ end
+ end
+end
diff --git a/spec/support/shared_examples/ci_trace_shared_examples.rb b/spec/support/shared_examples/ci_trace_shared_examples.rb
index e2b4b50d41d..441d3f4ccb9 100644
--- a/spec/support/shared_examples/ci_trace_shared_examples.rb
+++ b/spec/support/shared_examples/ci_trace_shared_examples.rb
@@ -423,7 +423,7 @@ shared_examples_for 'trace with disabled live trace feature' do
expect(build.job_artifacts_trace.file.filename).to eq('job.log')
expect(File.exist?(src_path)).to be_falsy
expect(src_checksum)
- .to eq(Digest::SHA256.file(build.job_artifacts_trace.file.path).hexdigest)
+ .to eq(described_class.hexdigest(build.job_artifacts_trace.file.path))
expect(build.job_artifacts_trace.file_sha256).to eq(src_checksum)
end
end
@@ -449,7 +449,7 @@ shared_examples_for 'trace with disabled live trace feature' do
expect(build.job_artifacts_trace.file.filename).to eq('job.log')
expect(build.old_trace).to be_nil
expect(src_checksum)
- .to eq(Digest::SHA256.file(build.job_artifacts_trace.file.path).hexdigest)
+ .to eq(described_class.hexdigest(build.job_artifacts_trace.file.path))
expect(build.job_artifacts_trace.file_sha256).to eq(src_checksum)
end
end
@@ -787,7 +787,7 @@ shared_examples_for 'trace with enabled live trace feature' do
expect(build.job_artifacts_trace.file.filename).to eq('job.log')
expect(Ci::BuildTraceChunk.where(build: build)).not_to be_exist
expect(src_checksum)
- .to eq(Digest::SHA256.file(build.job_artifacts_trace.file.path).hexdigest)
+ .to eq(described_class.hexdigest(build.job_artifacts_trace.file.path))
expect(build.job_artifacts_trace.file_sha256).to eq(src_checksum)
end
end
diff --git a/spec/support/shared_examples/common_system_notes_examples.rb b/spec/support/shared_examples/common_system_notes_examples.rb
index 75f93a32d78..ca79603a022 100644
--- a/spec/support/shared_examples/common_system_notes_examples.rb
+++ b/spec/support/shared_examples/common_system_notes_examples.rb
@@ -27,3 +27,30 @@ shared_examples 'WIP notes creation' do |wip_action|
expect(Note.second.note).to match('changed title')
end
end
+
+shared_examples_for 'a note with overridable created_at' do
+ let(:noteable) { create(:issue, project: project, system_note_timestamp: Time.at(42)) }
+
+ it 'the note has the correct time' do
+ expect(subject.created_at).to eq Time.at(42)
+ end
+end
+
+shared_examples_for 'a system note' do |params|
+ let(:expected_noteable) { noteable }
+ let(:commit_count) { nil }
+
+ it 'has the correct attributes', :aggregate_failures do
+ exclude_project = !params.nil? && params[:exclude_project]
+
+ expect(subject).to be_valid
+ expect(subject).to be_system
+
+ expect(subject.noteable).to eq expected_noteable
+ expect(subject.project).to eq project unless exclude_project
+ expect(subject.author).to eq author
+
+ expect(subject.system_note_metadata.action).to eq(action)
+ expect(subject.system_note_metadata.commit_count).to eq(commit_count)
+ end
+end
diff --git a/spec/support/shared_examples/controllers/repository_lfs_file_load_examples.rb b/spec/support/shared_examples/controllers/repository_lfs_file_load_examples.rb
index d3cadf2ba7c..5dea17069f9 100644
--- a/spec/support/shared_examples/controllers/repository_lfs_file_load_examples.rb
+++ b/spec/support/shared_examples/controllers/repository_lfs_file_load_examples.rb
@@ -25,13 +25,17 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
context 'when lfs is enabled' do
before do
allow_any_instance_of(Project).to receive(:lfs_enabled?).and_return(true)
+ allow_any_instance_of(LfsObjectUploader).to receive(:exists?).and_return(true)
+ allow(controller).to receive(:send_file) { controller.head :ok }
end
- context 'when project has access' do
+ def link_project(project)
+ project.lfs_objects << lfs_object
+ end
+
+ context 'when the project is linked to the LfsObject' do
before do
- project.lfs_objects << lfs_object
- allow_any_instance_of(LfsObjectUploader).to receive(:exists?).and_return(true)
- allow(controller).to receive(:send_file) { controller.head :ok }
+ link_project(project)
end
it 'serves the file' do
@@ -76,13 +80,68 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
end
end
- context 'when project does not have access' do
+ context 'when project is not linked to the LfsObject' do
it 'does not serve the file' do
subject
expect(response).to have_gitlab_http_status(404)
end
end
+
+ context 'when the project is part of a fork network' do
+ shared_examples 'a controller that correctly serves lfs files within a fork network' do
+ it do
+ expect(fork_network_member).not_to eq(fork_network.root_project)
+ end
+
+ it 'does not serve the file if no members are linked to the LfsObject' do
+ subject
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+
+ it 'serves the file when the fork network root is linked to the LfsObject' do
+ link_project(fork_network.root_project)
+
+ subject
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'serves the file when the fork network member is linked to the LfsObject' do
+ link_project(fork_network_member)
+
+ subject
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
+
+ context 'when the project is the root of the fork network' do
+ let!(:fork_network) { create(:fork_network, root_project: project) }
+ let!(:fork_network_member) { create(:fork_network_member, fork_network: fork_network).project }
+
+ before do
+ project.reload
+ end
+
+ it_behaves_like 'a controller that correctly serves lfs files within a fork network'
+ end
+
+ context 'when the project is a downstream member of the fork network' do
+ let!(:fork_network) { create(:fork_network) }
+ let!(:fork_network_member) do
+ create(:fork_network_member, project: project, fork_network: fork_network)
+ project
+ end
+
+ before do
+ project.reload
+ end
+
+ it_behaves_like 'a controller that correctly serves lfs files within a fork network'
+ end
+ end
end
context 'when lfs is not enabled' do
diff --git a/spec/support/shared_examples/controllers/uploads_actions_shared_examples.rb b/spec/support/shared_examples/controllers/uploads_actions_shared_examples.rb
index 4bc22861d58..c24418b2f90 100644
--- a/spec/support/shared_examples/controllers/uploads_actions_shared_examples.rb
+++ b/spec/support/shared_examples/controllers/uploads_actions_shared_examples.rb
@@ -104,7 +104,7 @@ shared_examples 'handle uploads' do
context "when neither the uploader nor the model exists" do
before do
- allow_any_instance_of(Upload).to receive(:build_uploader).and_return(nil)
+ allow_any_instance_of(Upload).to receive(:retrieve_uploader).and_return(nil)
allow(controller).to receive(:find_model).and_return(nil)
end
@@ -338,7 +338,7 @@ shared_examples 'handle uploads authorize' do
it_behaves_like 'a valid response' do
it 'responds with status 200, location of uploads remote store and object details' do
- expect(json_response['TempPath']).to eq(uploader_class.workhorse_local_upload_path)
+ expect(json_response).not_to have_key('TempPath')
expect(json_response['RemoteObject']).to have_key('ID')
expect(json_response['RemoteObject']).to have_key('GetURL')
expect(json_response['RemoteObject']).to have_key('StoreURL')
diff --git a/spec/support/shared_examples/cycle_analytics_event_shared_examples.rb b/spec/support/shared_examples/cycle_analytics_event_shared_examples.rb
new file mode 100644
index 00000000000..dce1dbe1cd1
--- /dev/null
+++ b/spec/support/shared_examples/cycle_analytics_event_shared_examples.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+shared_examples_for 'cycle analytics event' do
+ let(:instance) { described_class.new({}) }
+
+ it { expect(described_class.name).to be_a_kind_of(String) }
+ it { expect(described_class.identifier).to be_a_kind_of(Symbol) }
+ it { expect(instance.object_type.ancestors).to include(ApplicationRecord) }
+ it { expect(instance).to respond_to(:timestamp_projection) }
+
+ describe '#apply_query_customization' do
+ it 'expects an ActiveRecord::Relation object as argument and returns a modified version of it' do
+ input_query = instance.object_type.all
+
+ output_query = instance.apply_query_customization(input_query)
+ expect(output_query).to be_a_kind_of(ActiveRecord::Relation)
+ end
+ end
+end
diff --git a/spec/support/shared_examples/cycle_analytics_stage_examples.rb b/spec/support/shared_examples/cycle_analytics_stage_examples.rb
deleted file mode 100644
index 151f5325e84..00000000000
--- a/spec/support/shared_examples/cycle_analytics_stage_examples.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-# frozen_string_literal: true
-
-shared_examples_for 'cycle analytics stage' do
- let(:valid_params) do
- {
- name: 'My Stage',
- parent: parent,
- start_event_identifier: :merge_request_created,
- end_event_identifier: :merge_request_merged
- }
- end
-
- describe 'validation' do
- it 'is valid' do
- expect(described_class.new(valid_params)).to be_valid
- end
-
- it 'validates presence of parent' do
- stage = described_class.new(valid_params.except(:parent))
-
- expect(stage).not_to be_valid
- expect(stage.errors.details[parent_name]).to eq([{ error: :blank }])
- end
-
- it 'validates presence of start_event_identifier' do
- stage = described_class.new(valid_params.except(:start_event_identifier))
-
- expect(stage).not_to be_valid
- expect(stage.errors.details[:start_event_identifier]).to eq([{ error: :blank }])
- end
-
- it 'validates presence of end_event_identifier' do
- stage = described_class.new(valid_params.except(:end_event_identifier))
-
- expect(stage).not_to be_valid
- expect(stage.errors.details[:end_event_identifier]).to eq([{ error: :blank }])
- end
-
- it 'is invalid when end_event is not allowed for the given start_event' do
- invalid_params = valid_params.merge(
- start_event_identifier: :merge_request_merged,
- end_event_identifier: :merge_request_created
- )
- stage = described_class.new(invalid_params)
-
- expect(stage).not_to be_valid
- expect(stage.errors.details[:end_event]).to eq([{ error: :not_allowed_for_the_given_start_event }])
- end
- end
-
- describe '#subject_model' do
- it 'infers the model from the start event' do
- stage = described_class.new(valid_params)
-
- expect(stage.subject_model).to eq(MergeRequest)
- end
- end
-
- describe '#start_event' do
- it 'builds start_event object based on start_event_identifier' do
- stage = described_class.new(start_event_identifier: 'merge_request_created')
-
- expect(stage.start_event).to be_a_kind_of(Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestCreated)
- end
- end
-
- describe '#end_event' do
- it 'builds end_event object based on end_event_identifier' do
- stage = described_class.new(end_event_identifier: 'merge_request_merged')
-
- expect(stage.end_event).to be_a_kind_of(Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestMerged)
- end
- end
-end
diff --git a/spec/support/shared_examples/cycle_analytics_stage_shared_examples.rb b/spec/support/shared_examples/cycle_analytics_stage_shared_examples.rb
new file mode 100644
index 00000000000..afa035d039a
--- /dev/null
+++ b/spec/support/shared_examples/cycle_analytics_stage_shared_examples.rb
@@ -0,0 +1,107 @@
+# frozen_string_literal: true
+
+shared_examples_for 'cycle analytics stage' do
+ let(:valid_params) do
+ {
+ name: 'My Stage',
+ parent: parent,
+ start_event_identifier: :merge_request_created,
+ end_event_identifier: :merge_request_merged
+ }
+ end
+
+ describe 'validation' do
+ it 'is valid' do
+ expect(described_class.new(valid_params)).to be_valid
+ end
+
+ it 'validates presence of parent' do
+ stage = described_class.new(valid_params.except(:parent))
+
+ expect(stage).not_to be_valid
+ expect(stage.errors.details[parent_name]).to eq([{ error: :blank }])
+ end
+
+ it 'validates presence of start_event_identifier' do
+ stage = described_class.new(valid_params.except(:start_event_identifier))
+
+ expect(stage).not_to be_valid
+ expect(stage.errors.details[:start_event_identifier]).to eq([{ error: :blank }])
+ end
+
+ it 'validates presence of end_event_identifier' do
+ stage = described_class.new(valid_params.except(:end_event_identifier))
+
+ expect(stage).not_to be_valid
+ expect(stage.errors.details[:end_event_identifier]).to eq([{ error: :blank }])
+ end
+
+ it 'is invalid when end_event is not allowed for the given start_event' do
+ invalid_params = valid_params.merge(
+ start_event_identifier: :merge_request_merged,
+ end_event_identifier: :merge_request_created
+ )
+ stage = described_class.new(invalid_params)
+
+ expect(stage).not_to be_valid
+ expect(stage.errors.details[:end_event]).to eq([{ error: :not_allowed_for_the_given_start_event }])
+ end
+
+ context 'disallows default stage names when creating custom stage' do
+ let(:invalid_params) { valid_params.merge(name: Gitlab::Analytics::CycleAnalytics::DefaultStages.names.first, custom: true) }
+ let(:stage) { described_class.new(invalid_params) }
+
+ it { expect(stage).not_to be_valid }
+ end
+ end
+
+ describe '#subject_class' do
+ it 'infers the model from the start event' do
+ stage = described_class.new(valid_params)
+
+ expect(stage.subject_class).to eq(MergeRequest)
+ end
+ end
+
+ describe '#start_event' do
+ it 'builds start_event object based on start_event_identifier' do
+ stage = described_class.new(start_event_identifier: 'merge_request_created')
+
+ expect(stage.start_event).to be_a_kind_of(Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestCreated)
+ end
+ end
+
+ describe '#end_event' do
+ it 'builds end_event object based on end_event_identifier' do
+ stage = described_class.new(end_event_identifier: 'merge_request_merged')
+
+ expect(stage.end_event).to be_a_kind_of(Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestMerged)
+ end
+ end
+
+ describe '#matches_with_stage_params?' do
+ let(:params) { Gitlab::Analytics::CycleAnalytics::DefaultStages.params_for_test_stage }
+
+ it 'matches with default stage params' do
+ stage = described_class.new(params)
+
+ expect(stage).to be_default_stage
+ expect(stage).to be_matches_with_stage_params(params)
+ end
+
+ it "mismatches when the stage is custom" do
+ stage = described_class.new(params.merge(custom: true))
+
+ expect(stage).not_to be_default_stage
+ expect(stage).not_to be_matches_with_stage_params(params)
+ end
+ end
+
+ describe '#parent_id' do
+ it "delegates to 'parent_name'_id attribute" do
+ stage = described_class.new(parent: parent)
+
+ expect(stage.parent_id).to eq(parent.id)
+ end
+ end
+end
diff --git a/spec/support/shared_examples/diff_file_collections.rb b/spec/support/shared_examples/diff_file_collections.rb
index 367ddf06c28..4c64abd2a97 100644
--- a/spec/support/shared_examples/diff_file_collections.rb
+++ b/spec/support/shared_examples/diff_file_collections.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
shared_examples 'diff statistics' do |test_include_stats_flag: true|
+ subject { described_class.new(diffable, collection_default_args) }
+
def stub_stats_find_by_path(path, stats_mock)
expect_next_instance_of(Gitlab::Git::DiffStatsCollection) do |collection|
allow(collection).to receive(:find_by_path).and_call_original
@@ -10,8 +12,6 @@ shared_examples 'diff statistics' do |test_include_stats_flag: true|
context 'when should request diff stats' do
it 'Repository#diff_stats is called' do
- subject = described_class.new(diffable, collection_default_args)
-
expect(diffable.project.repository)
.to receive(:diff_stats)
.with(diffable.diff_refs.base_sha, diffable.diff_refs.head_sha)
@@ -21,8 +21,6 @@ shared_examples 'diff statistics' do |test_include_stats_flag: true|
end
it 'Gitlab::Diff::File is initialized with diff stats' do
- subject = described_class.new(diffable, collection_default_args)
-
stats_mock = double(Gitaly::DiffStats, path: '.gitignore', additions: 758, deletions: 120)
stub_stats_find_by_path(stub_path, stats_mock)
@@ -37,8 +35,6 @@ shared_examples 'diff statistics' do |test_include_stats_flag: true|
it 'Repository#diff_stats is not called' do
collection_default_args[:diff_options][:include_stats] = false
- subject = described_class.new(diffable, collection_default_args)
-
expect(diffable.project.repository).not_to receive(:diff_stats)
subject.diff_files
diff --git a/spec/support/shared_examples/evidence_updated_exposed_fields.rb b/spec/support/shared_examples/evidence_updated_exposed_fields.rb
new file mode 100644
index 00000000000..2a02fdd7666
--- /dev/null
+++ b/spec/support/shared_examples/evidence_updated_exposed_fields.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+shared_examples 'updated exposed field' do
+ it 'creates another Evidence object' do
+ model.send("#{updated_field}=", updated_value)
+
+ expect(model.evidence_summary_keys).to include(updated_field)
+ expect { model.save! }.to change(Evidence, :count).by(1)
+ expect(updated_json_field).to eq(updated_value)
+ end
+end
+
+shared_examples 'updated non-exposed field' do
+ it 'does not create any Evidence object' do
+ model.send("#{updated_field}=", updated_value)
+
+ expect(model.evidence_summary_keys).not_to include(updated_field)
+ expect { model.save! }.not_to change(Evidence, :count)
+ end
+end
+
+shared_examples 'updated field on non-linked entity' do
+ it 'does not create any Evidence object' do
+ model.send("#{updated_field}=", updated_value)
+
+ expect(model.evidence_summary_keys).to be_empty
+ expect { model.save! }.not_to change(Evidence, :count)
+ end
+end
diff --git a/spec/support/shared_examples/lfs_http_shared_examples.rb b/spec/support/shared_examples/lfs_http_shared_examples.rb
new file mode 100644
index 00000000000..bcd30fe9654
--- /dev/null
+++ b/spec/support/shared_examples/lfs_http_shared_examples.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+shared_examples 'LFS http 200 response' do
+ it_behaves_like 'LFS http expected response code and message' do
+ let(:response_code) { 200 }
+ end
+end
+
+shared_examples 'LFS http 401 response' do
+ it_behaves_like 'LFS http expected response code and message' do
+ let(:response_code) { 401 }
+ end
+end
+
+shared_examples 'LFS http 403 response' do
+ it_behaves_like 'LFS http expected response code and message' do
+ let(:response_code) { 403 }
+ let(:message) { 'Access forbidden. Check your access level.' }
+ end
+end
+
+shared_examples 'LFS http 501 response' do
+ it_behaves_like 'LFS http expected response code and message' do
+ let(:response_code) { 501 }
+ let(:message) { 'Git LFS is not enabled on this GitLab server, contact your admin.' }
+ end
+end
+
+shared_examples 'LFS http 404 response' do
+ it_behaves_like 'LFS http expected response code and message' do
+ let(:response_code) { 404 }
+ end
+end
+
+shared_examples 'LFS http expected response code and message' do
+ let(:response_code) { }
+ let(:message) { }
+
+ it 'responds with the expected response code and message' do
+ expect(response).to have_gitlab_http_status(response_code)
+ expect(json_response['message']).to eq(message) if message
+ end
+end
diff --git a/spec/support/shared_examples/lib/gitlab/ci/build/rules/rule/clause/clause_shared_examples.rb b/spec/support/shared_examples/lib/gitlab/ci/build/rules/rule/clause/clause_shared_examples.rb
new file mode 100644
index 00000000000..1934fd584f3
--- /dev/null
+++ b/spec/support/shared_examples/lib/gitlab/ci/build/rules/rule/clause/clause_shared_examples.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'a glob matching rule' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:case_name, :globs, :files, :satisfied) do
+ 'exact top-level match' | ['Dockerfile'] | { 'Dockerfile' => '', 'Gemfile' => '' } | true
+ 'exact top-level no match' | ['Dockerfile'] | { 'Gemfile' => '' } | false
+ 'pattern top-level match' | ['Docker*'] | { 'Dockerfile' => '', 'Gemfile' => '' } | true
+ 'pattern top-level no match' | ['Docker*'] | { 'Gemfile' => '' } | false
+ 'exact nested match' | ['project/build.properties'] | { 'project/build.properties' => '' } | true
+ 'exact nested no match' | ['project/build.properties'] | { 'project/README.md' => '' } | false
+ 'pattern nested match' | ['src/**/*.go'] | { 'src/gitlab.com/goproject/goproject.go' => '' } | true
+ 'pattern nested no match' | ['src/**/*.go'] | { 'src/gitlab.com/goproject/README.md' => '' } | false
+ 'ext top-level match' | ['*.go'] | { 'main.go' => '', 'cmd/goproject/main.go' => '' } | true
+ 'ext nested no match' | ['*.go'] | { 'cmd/goproject/main.go' => '' } | false
+ 'ext slash no match' | ['/*.go'] | { 'main.go' => '', 'cmd/goproject/main.go' => '' } | false
+ end
+
+ with_them do
+ it { is_expected.to eq(satisfied) }
+ end
+end
diff --git a/spec/support/shared_examples/lib/gitlab/import_export/project_tree_restorer_shared_examples.rb b/spec/support/shared_examples/lib/gitlab/import_export/project_tree_restorer_shared_examples.rb
new file mode 100644
index 00000000000..f26a8554055
--- /dev/null
+++ b/spec/support/shared_examples/lib/gitlab/import_export/project_tree_restorer_shared_examples.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+# Shared examples for ProjectTreeRestorer (shared to allow the testing
+# of EE-specific features)
+RSpec.shared_examples 'restores project correctly' do |**results|
+ it 'restores the project' do
+ expect(shared.errors).to be_empty
+ expect(restored_project_json).to be_truthy
+ end
+
+ it 'has labels' do
+ labels_size = results.fetch(:labels, 0)
+
+ expect(project.labels.size).to eq(labels_size)
+ end
+
+ it 'has label priorities' do
+ label_with_priorities = results[:label_with_priorities]
+
+ if label_with_priorities
+ expect(project.labels.find_by(title: label_with_priorities).priorities).not_to be_empty
+ end
+ end
+
+ it 'has milestones' do
+ expect(project.milestones.size).to eq(results.fetch(:milestones, 0))
+ end
+
+ it 'has issues' do
+ expect(project.issues.size).to eq(results.fetch(:issues, 0))
+ end
+
+ it 'does not set params that are excluded from import_export settings' do
+ expect(project.import_type).to be_nil
+ expect(project.creator_id).not_to eq 123
+ end
+end
diff --git a/spec/support/shared_examples/models/cluster_application_status_shared_examples.rb b/spec/support/shared_examples/models/cluster_application_status_shared_examples.rb
index 5341aacb445..a6653f89377 100644
--- a/spec/support/shared_examples/models/cluster_application_status_shared_examples.rb
+++ b/spec/support/shared_examples/models/cluster_application_status_shared_examples.rb
@@ -11,6 +11,20 @@ shared_examples 'cluster application status specs' do |application_name|
end
end
+ describe '#status_states' do
+ let(:cluster) { create(:cluster, :provided_by_gcp) }
+
+ subject { described_class.new(cluster: cluster) }
+
+ it 'returns a hash of state values' do
+ expect(subject.status_states).to include(:installed)
+ end
+
+ it 'returns an integer for installed state value' do
+ expect(subject.status_states[:installed]).to eq(3)
+ end
+ end
+
describe '.available' do
subject { described_class.available }
@@ -61,7 +75,7 @@ shared_examples 'cluster application status specs' do |application_name|
subject.reload
- expect(subject.version).to eq(subject.class.const_get(:VERSION))
+ expect(subject.version).to eq(subject.class.const_get(:VERSION, false))
end
context 'application is updating' do
@@ -90,13 +104,14 @@ shared_examples 'cluster application status specs' do |application_name|
subject.reload
- expect(subject.version).to eq(subject.class.const_get(:VERSION))
+ expect(subject.version).to eq(subject.class.const_get(:VERSION, false))
end
end
end
describe '#make_errored' do
subject { create(application_name, :installing) }
+
let(:reason) { 'some errors' }
it 'is errored' do
diff --git a/spec/support/shared_examples/models/cluster_application_version_shared_examples.rb b/spec/support/shared_examples/models/cluster_application_version_shared_examples.rb
index 181b102e685..ba02da41b53 100644
--- a/spec/support/shared_examples/models/cluster_application_version_shared_examples.rb
+++ b/spec/support/shared_examples/models/cluster_application_version_shared_examples.rb
@@ -12,7 +12,7 @@ shared_examples 'cluster application version specs' do |application_name|
context 'version is the same as VERSION' do
let(:application) { build(application_name) }
- let(:version) { application.class.const_get(:VERSION) }
+ let(:version) { application.class.const_get(:VERSION, false) }
it { is_expected.to be_falsey }
end
diff --git a/spec/support/shared_examples/models/clusters/providers/provider_status.rb b/spec/support/shared_examples/models/clusters/providers/provider_status.rb
new file mode 100644
index 00000000000..63cb9a56f5b
--- /dev/null
+++ b/spec/support/shared_examples/models/clusters/providers/provider_status.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+shared_examples 'provider status' do |factory|
+ describe 'state_machine' do
+ context 'when any => [:created]' do
+ let(:provider) { build(factory, :creating) }
+
+ it 'nullifies API credentials' do
+ expect(provider).to receive(:nullify_credentials).and_call_original
+ provider.make_created
+
+ expect(provider).to be_created
+ end
+ end
+
+ context 'when any => [:creating]' do
+ let(:provider) { build(factory) }
+ let(:operation_id) { 'operation-xxx' }
+
+ it 'calls #assign_operation_id on the provider' do
+ expect(provider).to receive(:assign_operation_id).with(operation_id).and_call_original
+
+ provider.make_creating(operation_id)
+ end
+ end
+
+ context 'when any => [:errored]' do
+ let(:provider) { build(factory, :creating) }
+ let(:status_reason) { 'err msg' }
+
+ it 'calls #nullify_credentials on the provider' do
+ expect(provider).to receive(:nullify_credentials).and_call_original
+
+ provider.make_errored(status_reason)
+ end
+
+ it 'sets a status reason' do
+ provider.make_errored(status_reason)
+
+ expect(provider.status_reason).to eq('err msg')
+ end
+
+ context 'when status_reason is nil' do
+ let(:provider) { build(factory, :errored) }
+
+ it 'does not set status_reason' do
+ provider.make_errored(nil)
+
+ expect(provider.status_reason).not_to be_nil
+ end
+ end
+ end
+ end
+
+ describe '#on_creation?' do
+ using RSpec::Parameterized::TableSyntax
+
+ subject { provider.on_creation? }
+
+ where(:status, :result) do
+ :scheduled | true
+ :creating | true
+ :created | false
+ :errored | false
+ end
+
+ with_them do
+ let(:provider) { build(factory, status) }
+
+ it { is_expected.to eq result }
+ end
+ end
+end
diff --git a/spec/support/shared_examples/models/concern/issuable_shared_examples.rb b/spec/support/shared_examples/models/concern/issuable_shared_examples.rb
index 9604555c57d..4ebb5e35e0e 100644
--- a/spec/support/shared_examples/models/concern/issuable_shared_examples.rb
+++ b/spec/support/shared_examples/models/concern/issuable_shared_examples.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
shared_examples_for 'matches_cross_reference_regex? fails fast' do
it 'fails fast for long strings' do
# took well under 1 second in CI https://dev.gitlab.org/gitlab/gitlabhq/merge_requests/3267#note_172823
@@ -6,3 +8,59 @@ shared_examples_for 'matches_cross_reference_regex? fails fast' do
end.not_to raise_error
end
end
+
+shared_examples_for 'validates description length with custom validation' do
+ let(:issuable) { build(:issue, description: 'x' * (::Issuable::DESCRIPTION_LENGTH_MAX + 1)) }
+ let(:context) { :update }
+
+ subject { issuable.validate(context) }
+
+ context 'when Issuable is a new record' do
+ it 'validates the maximum description length' do
+ subject
+ expect(issuable.errors[:description]).to eq(["is too long (maximum is #{::Issuable::DESCRIPTION_LENGTH_MAX} characters)"])
+ end
+
+ context 'on create' do
+ let(:context) { :create }
+
+ it 'does not validate the maximum description length' do
+ allow(issuable).to receive(:description_max_length_for_new_records_is_valid).and_call_original
+
+ subject
+
+ expect(issuable).not_to have_received(:description_max_length_for_new_records_is_valid)
+ end
+ end
+ end
+
+ context 'when Issuable is an existing record' do
+ before do
+ allow(issuable).to receive(:expire_etag_cache) # to skip the expire_etag_cache callback
+
+ issuable.save!(validate: false)
+ end
+
+ it 'does not validate the maximum description length' do
+ subject
+ expect(issuable.errors).not_to have_key(:description)
+ end
+ end
+end
+
+shared_examples_for 'truncates the description to its allowed maximum length on import' do
+ before do
+ allow(issuable).to receive(:importing?).and_return(true)
+ end
+
+ let(:issuable) { build(:issue, description: 'x' * (::Issuable::DESCRIPTION_LENGTH_MAX + 1)) }
+
+ subject { issuable.validate(:create) }
+
+ it 'truncates the description to its allowed maximum length' do
+ subject
+
+ expect(issuable.description).to eq('x' * ::Issuable::DESCRIPTION_LENGTH_MAX)
+ expect(issuable.errors[:description]).to be_empty
+ end
+end
diff --git a/spec/support/shared_examples/models/with_uploads_shared_examples.rb b/spec/support/shared_examples/models/with_uploads_shared_examples.rb
index eb1ade03017..822836c771e 100644
--- a/spec/support/shared_examples/models/with_uploads_shared_examples.rb
+++ b/spec/support/shared_examples/models/with_uploads_shared_examples.rb
@@ -41,7 +41,8 @@ shared_examples_for 'model with uploads' do |supports_fileuploads|
end
it 'deletes remote files' do
- expect_any_instance_of(Uploads::Fog).to receive(:delete_keys).with(uploads.map(&:path))
+ expected_array = array_including(*uploads.map(&:path))
+ expect_any_instance_of(Uploads::Fog).to receive(:delete_keys).with(expected_array)
model_object.destroy
end
diff --git a/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb b/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb
index cb5460bde23..b4a8e3fca4d 100644
--- a/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb
+++ b/spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb
@@ -45,14 +45,6 @@ shared_examples 'zoom quick actions' do
expect(page).to have_content('Failed to add a Zoom meeting')
expect(page).not_to have_content(zoom_link)
end
-
- context 'when feature flag disabled' do
- before do
- stub_feature_flags(issue_zoom_integration: false)
- end
-
- include_examples 'skip silently'
- end
end
context 'with Zoom link not at the end of the issue description' do
@@ -92,14 +84,6 @@ shared_examples 'zoom quick actions' do
expect(page).to have_content('Zoom meeting removed')
expect(issue.reload.description).to eq("Text with #{zoom_link}")
end
-
- context 'when feature flag disabled' do
- before do
- stub_feature_flags(issue_zoom_integration: false)
- end
-
- include_examples 'skip silently'
- end
end
context 'with a Zoom link not at the end of the description' do
diff --git a/spec/support/shared_examples/relative_positioning_shared_examples.rb b/spec/support/shared_examples/relative_positioning_shared_examples.rb
index b7382cea93c..99e62ebf422 100644
--- a/spec/support/shared_examples/relative_positioning_shared_examples.rb
+++ b/spec/support/shared_examples/relative_positioning_shared_examples.rb
@@ -84,6 +84,22 @@ RSpec.shared_examples 'a class that supports relative positioning' do
expect(item1.relative_position).to be < item2.relative_position
end
+
+ context 'when there is no space' do
+ let(:item3) { create(factory, default_params) }
+
+ before do
+ item1.update(relative_position: 1000)
+ item2.update(relative_position: 1001)
+ item3.update(relative_position: 1002)
+ end
+
+ it 'moves items correctly' do
+ item3.move_before(item2)
+
+ expect(item3.relative_position).to be_between(item1.reload.relative_position, item2.reload.relative_position).exclusive
+ end
+ end
end
describe '#move_after' do
@@ -94,6 +110,22 @@ RSpec.shared_examples 'a class that supports relative positioning' do
expect(item1.relative_position).to be > item2.relative_position
end
+
+ context 'when there is no space' do
+ let(:item3) { create(factory, default_params) }
+
+ before do
+ item1.update(relative_position: 1000)
+ item2.update(relative_position: 1001)
+ item3.update(relative_position: 1002)
+ end
+
+ it 'moves items correctly' do
+ item1.move_after(item2)
+
+ expect(item1.relative_position).to be_between(item2.reload.relative_position, item3.reload.relative_position).exclusive
+ end
+ end
end
describe '#move_to_end' do
@@ -196,7 +228,7 @@ RSpec.shared_examples 'a class that supports relative positioning' do
new_item.move_between(item1, item2)
- expect(new_item.relative_position).to be_between(item1.relative_position, item2.relative_position)
+ expect(new_item.relative_position).to be_between(item1.relative_position, item2.relative_position).exclusive
end
it 'uses rebalancing if there is no place' do
@@ -208,7 +240,7 @@ RSpec.shared_examples 'a class that supports relative positioning' do
new_item.move_between(item2, item3)
new_item.save!
- expect(new_item.relative_position).to be_between(item2.relative_position, item3.relative_position)
+ expect(new_item.relative_position).to be_between(item2.relative_position, item3.relative_position).exclusive
expect(item1.reload.relative_position).not_to eq(100)
end
diff --git a/spec/support/shared_examples/repo_type_shared_examples.rb b/spec/support/shared_examples/repo_type_shared_examples.rb
new file mode 100644
index 00000000000..dc9e3a73346
--- /dev/null
+++ b/spec/support/shared_examples/repo_type_shared_examples.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+shared_examples 'a repo type' do
+ describe "#identifier_for_subject" do
+ subject { described_class.identifier_for_subject(project) }
+
+ it { is_expected.to eq(expected_identifier) }
+ end
+
+ describe "#fetch_id" do
+ it "finds an id match in the identifier" do
+ expect(described_class.fetch_id(expected_identifier)).to eq(expected_id)
+ end
+
+ it 'does not break on other identifiers' do
+ expect(described_class.fetch_id("wiki-noid")).to eq(nil)
+ end
+ end
+
+ describe "#path_suffix" do
+ subject { described_class.path_suffix }
+
+ it { is_expected.to eq(expected_suffix) }
+ end
+
+ describe "#repository_for" do
+ it "finds the repository for the repo type" do
+ expect(described_class.repository_for(project)).to eq(expected_repository)
+ end
+ end
+end
diff --git a/spec/support/shared_examples/requests/rack_attack_shared_examples.rb b/spec/support/shared_examples/requests/rack_attack_shared_examples.rb
index afc6f59b773..a2e38cfc60b 100644
--- a/spec/support/shared_examples/requests/rack_attack_shared_examples.rb
+++ b/spec/support/shared_examples/requests/rack_attack_shared_examples.rb
@@ -8,6 +8,14 @@
# * period_in_seconds
# * period
shared_examples_for 'rate-limited token-authenticated requests' do
+ let(:throttle_types) do
+ {
+ "throttle_protected_paths" => "throttle_authenticated_protected_paths_api",
+ "throttle_authenticated_api" => "throttle_authenticated_api",
+ "throttle_authenticated_web" => "throttle_authenticated_web"
+ }
+ end
+
before do
# Set low limits
settings_to_set[:"#{throttle_setting_prefix}_requests_per_period"] = requests_per_period
@@ -84,7 +92,8 @@ shared_examples_for 'rate-limited token-authenticated requests' do
request_method: 'GET',
path: get_args.first,
user_id: user.id,
- username: user.username
+ username: user.username,
+ throttle_type: throttle_types[throttle_setting_prefix]
}
expect(Gitlab::AuthLogger).to receive(:error).with(arguments).once
@@ -116,6 +125,13 @@ end
# * period_in_seconds
# * period
shared_examples_for 'rate-limited web authenticated requests' do
+ let(:throttle_types) do
+ {
+ "throttle_protected_paths" => "throttle_authenticated_protected_paths_web",
+ "throttle_authenticated_web" => "throttle_authenticated_web"
+ }
+ end
+
before do
login_as(user)
@@ -196,7 +212,8 @@ shared_examples_for 'rate-limited web authenticated requests' do
request_method: 'GET',
path: '/dashboard/snippets',
user_id: user.id,
- username: user.username
+ username: user.username,
+ throttle_type: throttle_types[throttle_setting_prefix]
}
expect(Gitlab::AuthLogger).to receive(:error).with(arguments).once
diff --git a/spec/support/shared_examples/services/boards/boards_create_service.rb b/spec/support/shared_examples/services/boards/boards_create_service.rb
index 19818a6091b..7fd69354c2d 100644
--- a/spec/support/shared_examples/services/boards/boards_create_service.rb
+++ b/spec/support/shared_examples/services/boards/boards_create_service.rb
@@ -17,7 +17,7 @@ shared_examples 'boards create service' do
context 'when parent has a board' do
before do
- create(:board, parent: parent)
+ create(:board, resource_parent: parent)
end
it 'does not create a new board' do
diff --git a/spec/support/shared_examples/services/boards/boards_list_service.rb b/spec/support/shared_examples/services/boards/boards_list_service.rb
index 566e5050f8e..25dc2e04942 100644
--- a/spec/support/shared_examples/services/boards/boards_list_service.rb
+++ b/spec/support/shared_examples/services/boards/boards_list_service.rb
@@ -15,7 +15,7 @@ shared_examples 'boards list service' do
context 'when parent has a board' do
before do
- create(:board, parent: parent)
+ create(:board, resource_parent: parent)
end
it 'does not create a new board' do
@@ -24,7 +24,7 @@ shared_examples 'boards list service' do
end
it 'returns parent boards' do
- board = create(:board, parent: parent)
+ board = create(:board, resource_parent: parent)
expect(service.execute).to eq [board]
end
diff --git a/spec/support/shared_examples/slack_mattermost_notifications_shared_examples.rb b/spec/support/shared_examples/slack_mattermost_notifications_shared_examples.rb
index 455f7b117b2..f15128d3e13 100644
--- a/spec/support/shared_examples/slack_mattermost_notifications_shared_examples.rb
+++ b/spec/support/shared_examples/slack_mattermost_notifications_shared_examples.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-Dir[Rails.root.join("app/models/project_services/chat_message/*.rb")].each { |f| require f }
-
RSpec.shared_examples 'slack or mattermost notifications' do |service_name|
let(:chat_service) { described_class.new }
let(:webhook_url) { 'https://example.gitlab.com/' }
@@ -371,6 +369,48 @@ RSpec.shared_examples 'slack or mattermost notifications' do |service_name|
end
end
+ context 'on a protected branch with protected branches defined using wildcards' do
+ before do
+ create(:protected_branch, project: project, name: '*-stable')
+ end
+
+ let(:data) do
+ Gitlab::DataBuilder::Push.build(
+ project: project,
+ user: user,
+ ref: '1-stable'
+ )
+ end
+
+ context 'pushing tags' do
+ let(:data) do
+ Gitlab::DataBuilder::Push.build(
+ project: project,
+ user: user,
+ ref: "#{Gitlab::Git::TAG_REF_PREFIX}test"
+ )
+ end
+
+ it_behaves_like "triggered #{service_name} service", event_type: "push"
+ end
+
+ context 'notification enabled only for default branch' do
+ it_behaves_like "untriggered #{service_name} service", event_type: "push", branches_to_be_notified: "default"
+ end
+
+ context 'notification enabled only for protected branches' do
+ it_behaves_like "triggered #{service_name} service", event_type: "push", branches_to_be_notified: "protected"
+ end
+
+ context 'notification enabled only for default and protected branches' do
+ it_behaves_like "triggered #{service_name} service", event_type: "push", branches_to_be_notified: "default_and_protected"
+ end
+
+ context 'notification enabled for all branches' do
+ it_behaves_like "triggered #{service_name} service", event_type: "push", branches_to_be_notified: "all"
+ end
+ end
+
context 'on a neither protected nor default branch' do
let(:data) do
Gitlab::DataBuilder::Push.build(
@@ -572,6 +612,36 @@ RSpec.shared_examples 'slack or mattermost notifications' do |service_name|
end
end
+ context 'on a protected branch with protected branches defined usin wildcards' do
+ before do
+ create(:protected_branch, project: project, name: '*-stable')
+ end
+
+ let(:pipeline) do
+ create(:ci_pipeline,
+ project: project, status: :failed,
+ sha: project.commit.sha, ref: '1-stable')
+ end
+
+ let(:data) { Gitlab::DataBuilder::Pipeline.build(pipeline) }
+
+ context 'notification enabled only for default branch' do
+ it_behaves_like "untriggered #{service_name} service", event_type: "pipeline", branches_to_be_notified: "default"
+ end
+
+ context 'notification enabled only for protected branches' do
+ it_behaves_like "triggered #{service_name} service", event_type: "pipeline", branches_to_be_notified: "protected"
+ end
+
+ context 'notification enabled only for default and protected branches' do
+ it_behaves_like "triggered #{service_name} service", event_type: "pipeline", branches_to_be_notified: "default_and_protected"
+ end
+
+ context 'notification enabled for all branches' do
+ it_behaves_like "triggered #{service_name} service", event_type: "pipeline", branches_to_be_notified: "all"
+ end
+ end
+
context 'on a neither protected nor default branch' do
let(:pipeline) do
create(:ci_pipeline,
diff --git a/spec/support/shared_examples/snippet_visibility_shared_examples.rb b/spec/support/shared_examples/snippet_visibility_shared_examples.rb
index b5321c6db34..e2089ee623a 100644
--- a/spec/support/shared_examples/snippet_visibility_shared_examples.rb
+++ b/spec/support/shared_examples/snippet_visibility_shared_examples.rb
@@ -11,13 +11,21 @@ RSpec.shared_examples 'snippet visibility' do
set(:author) { create(:user) }
set(:member) { create(:user) }
set(:external) { create(:user, :external) }
+ set(:non_member) { create(:user) }
+
+ set(:project) do
+ create(:project).tap do |project|
+ project.add_developer(author)
+ project.add_developer(member)
+ end
+ end
context "For project snippets" do
let!(:users) do
{
unauthenticated: nil,
external: external,
- non_member: create(:user),
+ non_member: non_member,
member: member,
author: author
}
@@ -211,14 +219,18 @@ RSpec.shared_examples 'snippet visibility' do
end
with_them do
- let!(:project) { create(:project, visibility_level: Gitlab::VisibilityLevel.level_value(project_type.to_s)) }
+ let!(:project_visibility) { project.update_column(:visibility_level, Gitlab::VisibilityLevel.level_value(project_type.to_s)) }
let!(:project_feature) { project.project_feature.update_column(:snippets_access_level, feature_visibility) }
let!(:user) { users[user_type] }
let!(:snippet) { create(:project_snippet, visibility_level: snippet_type, project: project, author: author) }
- let!(:members) do
- project.add_developer(author)
- project.add_developer(member)
- project.add_developer(external) if project.private?
+ let!(:external_member) do
+ member = project.project_member(external)
+
+ if project.private?
+ project.add_developer(external) unless member
+ else
+ member.delete if member
+ end
end
context "For #{params[:project_type]} project and #{params[:user_type]} users" do
@@ -256,7 +268,7 @@ RSpec.shared_examples 'snippet visibility' do
{
unauthenticated: nil,
external: external,
- non_member: create(:user),
+ non_member: non_member,
author: author
}
end
diff --git a/spec/support/shared_examples/trackable_shared_examples.rb b/spec/support/shared_examples/trackable_shared_examples.rb
new file mode 100644
index 00000000000..6ad75a14d6b
--- /dev/null
+++ b/spec/support/shared_examples/trackable_shared_examples.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+shared_examples 'a Trackable Controller' do
+ describe '#track_event' do
+ before do
+ sign_in user
+ end
+
+ context 'with no params' do
+ controller(described_class) do
+ def index
+ track_event
+ head :ok
+ end
+ end
+
+ it 'tracks the action name' do
+ expect(Gitlab::Tracking).to receive(:event).with('AnonymousController', 'index', {})
+ get :index
+ end
+ end
+
+ context 'with params' do
+ controller(described_class) do
+ def index
+ track_event('some_event', category: 'SomeCategory', label: 'errorlabel')
+ head :ok
+ end
+ end
+
+ it 'tracks with the specified param' do
+ expect(Gitlab::Tracking).to receive(:event).with('SomeCategory', 'some_event', label: 'errorlabel')
+ get :index
+ end
+ end
+ end
+end
diff --git a/spec/support/shared_examples/updating_mentions_shared_examples.rb b/spec/support/shared_examples/updating_mentions_shared_examples.rb
index ef385f94cc2..9a8f8012762 100644
--- a/spec/support/shared_examples/updating_mentions_shared_examples.rb
+++ b/spec/support/shared_examples/updating_mentions_shared_examples.rb
@@ -1,11 +1,16 @@
# frozen_string_literal: true
RSpec.shared_examples 'updating mentions' do |service_class|
- let(:mentioned_user) { create(:user) }
- let(:service_class) { service_class }
+ let(:service_class) { service_class }
+ let(:mentioned_user) { create(:user) }
+ let(:group_member1) { create(:user) }
+ let(:group_member2) { create(:user) }
+ let(:external_group) { create(:group, :private) }
before do
project.add_developer(mentioned_user)
+ group.add_developer(group_member1)
+ group.add_developer(group_member2)
end
def update_mentionable(opts)
@@ -16,23 +21,74 @@ RSpec.shared_examples 'updating mentions' do |service_class|
mentionable.reload
end
- context 'in title' do
- before do
- update_mentionable(title: mentioned_user.to_reference)
+ context 'when mentioning a different user' do
+ context 'in title' do
+ before do
+ update_mentionable(title: "For #{mentioned_user.to_reference}")
+ end
+
+ it 'emails only the newly-mentioned user' do
+ should_only_email(mentioned_user)
+ end
+ end
+
+ context 'in description' do
+ before do
+ update_mentionable(description: "For #{mentioned_user.to_reference}")
+ end
+
+ it 'emails only the newly-mentioned user' do
+ should_only_email(mentioned_user)
+ end
+ end
+ end
+
+ context 'when mentioning a user and a group with access to' do
+ shared_examples 'updating attribute with allowed mentions' do |attribute|
+ before do
+ update_mentionable(
+ { attribute => "For #{group.to_reference}, cc: #{mentioned_user.to_reference}" }
+ )
+ end
+
+ it 'emails group members' do
+ should_email(mentioned_user)
+ should_email(group_member1)
+ should_email(group_member2)
+ end
+ end
+
+ context 'when group is public' do
+ it_behaves_like 'updating attribute with allowed mentions', :title
+ it_behaves_like 'updating attribute with allowed mentions', :description
end
- it 'emails only the newly-mentioned user' do
- should_only_email(mentioned_user)
+ context 'when the group is private' do
+ before do
+ group.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
+ end
+
+ it_behaves_like 'updating attribute with allowed mentions', :title
+ it_behaves_like 'updating attribute with allowed mentions', :description
end
end
- context 'in description' do
- before do
- update_mentionable(description: mentioned_user.to_reference)
+ context 'when mentioning a user and a group without access to' do
+ shared_examples 'updating attribute with not allowed mentions' do |attribute|
+ before do
+ update_mentionable(
+ { attribute => "For #{external_group.to_reference}, cc: #{mentioned_user.to_reference}" }
+ )
+ end
+
+ it 'emails mentioned user' do
+ should_only_email(mentioned_user)
+ end
end
- it 'emails only the newly-mentioned user' do
- should_only_email(mentioned_user)
+ context 'when the group is private' do
+ it_behaves_like 'updating attribute with not allowed mentions', :title
+ it_behaves_like 'updating attribute with not allowed mentions', :description
end
end
end
diff --git a/spec/support/shared_examples/versioned_description_shared_examples.rb b/spec/support/shared_examples/versioned_description_shared_examples.rb
new file mode 100644
index 00000000000..59124af19ec
--- /dev/null
+++ b/spec/support/shared_examples/versioned_description_shared_examples.rb
@@ -0,0 +1,65 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'versioned description' do
+ describe 'associations' do
+ it { is_expected.to have_many(:description_versions) }
+ end
+
+ describe 'save_description_version' do
+ let(:factory_name) { described_class.name.underscore.to_sym }
+ let!(:model) { create(factory_name, description: 'Original description') }
+
+ context 'when feature is enabled' do
+ before do
+ stub_feature_flags(save_description_versions: true)
+ end
+
+ context 'when description was changed' do
+ before do
+ model.update!(description: 'New description')
+ end
+
+ it 'saves the old and new description for the first update' do
+ expect(model.description_versions.first.description).to eq('Original description')
+ expect(model.description_versions.last.description).to eq('New description')
+ end
+
+ it 'only saves the new description for subsequent updates' do
+ expect { model.update!(description: 'Another description') }.to change { model.description_versions.count }.by(1)
+
+ expect(model.description_versions.last.description).to eq('Another description')
+ end
+
+ it 'sets the new description version to `saved_description_version`' do
+ expect(model.saved_description_version).to eq(model.description_versions.last)
+ end
+
+ it 'clears `saved_description_version` after another save that does not change description' do
+ model.save!
+
+ expect(model.saved_description_version).to be_nil
+ end
+ end
+
+ context 'when description was not changed' do
+ it 'does not save any description version' do
+ expect { model.save! }.not_to change { model.description_versions.count }
+
+ expect(model.saved_description_version).to be_nil
+ end
+ end
+ end
+
+ context 'when feature is disabled' do
+ before do
+ stub_feature_flags(save_description_versions: false)
+ end
+
+ it 'does not save any description version' do
+ expect { model.update!(description: 'New description') }.not_to change { model.description_versions.count }
+
+ expect(model.saved_description_version).to be_nil
+ end
+ end
+ end
+end
diff --git a/spec/tasks/cache/clear/redis_spec.rb b/spec/tasks/cache/clear/redis_spec.rb
index 97c8c943f3a..4f597988763 100644
--- a/spec/tasks/cache/clear/redis_spec.rb
+++ b/spec/tasks/cache/clear/redis_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'clearing redis cache' do
diff --git a/spec/tasks/config_lint_spec.rb b/spec/tasks/config_lint_spec.rb
index 83d54259dfa..c6c11d76388 100644
--- a/spec/tasks/config_lint_spec.rb
+++ b/spec/tasks/config_lint_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
Rake.application.rake_require 'tasks/config_lint'
diff --git a/spec/tasks/gitlab/artifacts/check_rake_spec.rb b/spec/tasks/gitlab/artifacts/check_rake_spec.rb
index d495b08aca0..04015f0e21a 100644
--- a/spec/tasks/gitlab/artifacts/check_rake_spec.rb
+++ b/spec/tasks/gitlab/artifacts/check_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:artifacts rake tasks' do
diff --git a/spec/tasks/gitlab/artifacts/migrate_rake_spec.rb b/spec/tasks/gitlab/artifacts/migrate_rake_spec.rb
index be69c10d7c8..55bfb7acd9d 100644
--- a/spec/tasks/gitlab/artifacts/migrate_rake_spec.rb
+++ b/spec/tasks/gitlab/artifacts/migrate_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:artifacts namespace rake task' do
@@ -11,10 +13,11 @@ describe 'gitlab:artifacts namespace rake task' do
stub_artifacts_object_storage(enabled: object_storage_enabled)
end
- subject { run_rake_task('gitlab:artifacts:migrate') }
+ describe 'gitlab:artifacts:migrate' do
+ subject { run_rake_task('gitlab:artifacts:migrate') }
- context 'job artifacts' do
let!(:artifact) { create(:ci_job_artifact, :archive, file_store: store) }
+ let!(:job_trace) { create(:ci_job_artifact, :trace, file_store: store) }
context 'when local storage is used' do
let(:store) { ObjectStorage::Store::LOCAL }
@@ -27,6 +30,7 @@ describe 'gitlab:artifacts namespace rake task' do
subject
expect(artifact.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
+ expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
end
end
@@ -37,6 +41,7 @@ describe 'gitlab:artifacts namespace rake task' do
subject
expect(artifact.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
+ expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
end
end
@@ -45,6 +50,7 @@ describe 'gitlab:artifacts namespace rake task' do
subject
expect(artifact.reload.file_store).to eq(ObjectStorage::Store::LOCAL)
+ expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::LOCAL)
end
end
end
@@ -57,6 +63,40 @@ describe 'gitlab:artifacts namespace rake task' do
subject
expect(artifact.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
+ expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
+ end
+ end
+ end
+
+ describe 'gitlab:artifacts:migrate_to_local' do
+ let(:object_storage_enabled) { true }
+
+ subject { run_rake_task('gitlab:artifacts:migrate_to_local') }
+
+ let!(:artifact) { create(:ci_job_artifact, :archive, file_store: store) }
+ let!(:job_trace) { create(:ci_job_artifact, :trace, file_store: store) }
+
+ context 'when remote storage is used' do
+ let(:store) { ObjectStorage::Store::REMOTE }
+
+ context 'and job has remote file store defined' do
+ it "migrates file to local storage" do
+ subject
+
+ expect(artifact.reload.file_store).to eq(ObjectStorage::Store::LOCAL)
+ expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::LOCAL)
+ end
+ end
+ end
+
+ context 'when local storage is used' do
+ let(:store) { ObjectStorage::Store::LOCAL }
+
+ it 'file stays on local storage' do
+ subject
+
+ expect(artifact.reload.file_store).to eq(ObjectStorage::Store::LOCAL)
+ expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::LOCAL)
end
end
end
diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb
index bdbd39475b9..e58919c8688 100644
--- a/spec/tasks/gitlab/backup_rake_spec.rb
+++ b/spec/tasks/gitlab/backup_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'rake'
@@ -115,6 +117,45 @@ describe 'gitlab:app namespace rake task' do
expect(raw_repo.empty?).to be(true)
end
end
+
+ context 'when the backup is restored' do
+ let!(:included_project) { create(:project, :repository) }
+
+ before do
+ expect { run_rake_task('gitlab:backup:create') }.to output.to_stdout
+
+ backup_tar = Dir.glob(File.join(Gitlab.config.backup.path, '*_gitlab_backup.tar')).last
+ allow(Dir).to receive(:glob).and_return([backup_tar])
+ allow(File).to receive(:exist?).and_return(true)
+ allow(Kernel).to receive(:system).and_return(true)
+ allow(FileUtils).to receive(:cp_r).and_return(true)
+ allow(FileUtils).to receive(:mv).and_return(true)
+ allow(YAML).to receive(:load_file)
+ .and_return({ gitlab_version: Gitlab::VERSION })
+
+ expect(Rake::Task['gitlab:db:drop_tables']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:db:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:repo:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:builds:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:uploads:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:artifacts:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:pages:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:lfs:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:backup:registry:restore']).to receive(:invoke)
+ expect(Rake::Task['gitlab:shell:setup']).to receive(:invoke)
+
+ # We only need a backup of the repositories for this test
+ stub_env('SKIP', 'db,uploads,builds,artifacts,lfs,registry')
+ end
+
+ it 'restores the data' do
+ expect { run_rake_task('gitlab:backup:restore') }.to output.to_stdout
+
+ raw_repo = included_project.repository.raw
+
+ expect(raw_repo.empty?).to be(false)
+ end
+ end
end # backup_restore task
describe 'backup' do
diff --git a/spec/tasks/gitlab/check_rake_spec.rb b/spec/tasks/gitlab/check_rake_spec.rb
index 0fcb9b269f3..b3c8ca03aec 100644
--- a/spec/tasks/gitlab/check_rake_spec.rb
+++ b/spec/tasks/gitlab/check_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'check.rake' do
@@ -17,6 +19,7 @@ describe 'check.rake' do
describe 'gitlab:check rake task' do
subject { run_rake_task('gitlab:check') }
+
let(:name) { 'GitLab subtasks' }
it_behaves_like 'system check rake task'
@@ -24,6 +27,7 @@ describe 'check.rake' do
describe 'gitlab:gitlab_shell:check rake task' do
subject { run_rake_task('gitlab:gitlab_shell:check') }
+
let(:name) { 'GitLab Shell' }
it_behaves_like 'system check rake task'
@@ -31,6 +35,7 @@ describe 'check.rake' do
describe 'gitlab:gitaly:check rake task' do
subject { run_rake_task('gitlab:gitaly:check') }
+
let(:name) { 'Gitaly' }
it_behaves_like 'system check rake task'
@@ -38,6 +43,7 @@ describe 'check.rake' do
describe 'gitlab:sidekiq:check rake task' do
subject { run_rake_task('gitlab:sidekiq:check') }
+
let(:name) { 'Sidekiq' }
it_behaves_like 'system check rake task'
@@ -45,6 +51,7 @@ describe 'check.rake' do
describe 'gitlab:incoming_email:check rake task' do
subject { run_rake_task('gitlab:incoming_email:check') }
+
let(:name) { 'Incoming Email' }
it_behaves_like 'system check rake task'
@@ -54,6 +61,7 @@ describe 'check.rake' do
include LdapHelpers
subject { run_rake_task('gitlab:ldap:check') }
+
let(:name) { 'LDAP' }
it_behaves_like 'system check rake task'
diff --git a/spec/tasks/gitlab/cleanup_rake_spec.rb b/spec/tasks/gitlab/cleanup_rake_spec.rb
index 4aee6d005a8..3c3e5eea838 100644
--- a/spec/tasks/gitlab/cleanup_rake_spec.rb
+++ b/spec/tasks/gitlab/cleanup_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:cleanup rake tasks' do
@@ -5,74 +7,6 @@ describe 'gitlab:cleanup rake tasks' do
Rake.application.rake_require 'tasks/gitlab/cleanup'
end
- describe 'cleanup namespaces and repos' do
- let(:gitlab_shell) { Gitlab::Shell.new }
- let(:storage) { storages.keys.first }
- let(:storages) do
- {
- 'default' => Gitlab::GitalyClient::StorageSettings.new(@default_storage_hash.merge('path' => 'tmp/tests/default_storage'))
- }
- end
-
- before(:all) do
- @default_storage_hash = Gitlab.config.repositories.storages.default.to_h
- end
-
- before do
- allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
- end
-
- after do
- Gitlab::GitalyClient::StorageService.new(storage).delete_all_repositories
- end
-
- describe 'cleanup:repos' do
- before do
- gitlab_shell.add_namespace(storage, 'broken/project.git')
- gitlab_shell.add_namespace(storage, '@hashed/12/34/5678.git')
- end
-
- it 'moves it to an orphaned path' do
- now = Time.now
-
- Timecop.freeze(now) do
- run_rake_task('gitlab:cleanup:repos')
- repo_list = Gitlab::GitalyClient::StorageService.new(storage).list_directories(depth: 0)
-
- expect(repo_list.last).to include("broken+orphaned+#{now.to_i}")
- end
- end
-
- it 'ignores @hashed repos' do
- run_rake_task('gitlab:cleanup:repos')
-
- expect(gitlab_shell.exists?(storage, '@hashed/12/34/5678.git')).to be(true)
- end
- end
-
- describe 'cleanup:dirs' do
- it 'removes missing namespaces' do
- gitlab_shell.add_namespace(storage, "namespace_1/project.git")
- gitlab_shell.add_namespace(storage, "namespace_2/project.git")
- allow(Namespace).to receive(:pluck).and_return(['namespace_1'])
-
- stub_env('REMOVE', 'true')
- run_rake_task('gitlab:cleanup:dirs')
-
- expect(gitlab_shell.exists?(storage, 'namespace_1')).to be(true)
- expect(gitlab_shell.exists?(storage, 'namespace_2')).to be(false)
- end
-
- it 'ignores @hashed directory' do
- gitlab_shell.add_namespace(storage, '@hashed/12/34/5678.git')
-
- run_rake_task('gitlab:cleanup:dirs')
-
- expect(gitlab_shell.exists?(storage, '@hashed/12/34/5678.git')).to be(true)
- end
- end
- end
-
# A single integration test that is redundant with one part of the
# Gitlab::Cleanup::ProjectUploads spec.
#
diff --git a/spec/tasks/gitlab/db_rake_spec.rb b/spec/tasks/gitlab/db_rake_spec.rb
index 5818892d56a..49b9a572423 100644
--- a/spec/tasks/gitlab/db_rake_spec.rb
+++ b/spec/tasks/gitlab/db_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'rake'
diff --git a/spec/tasks/gitlab/git_rake_spec.rb b/spec/tasks/gitlab/git_rake_spec.rb
index 57b006e1a39..b8156e55ec7 100644
--- a/spec/tasks/gitlab/git_rake_spec.rb
+++ b/spec/tasks/gitlab/git_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:git rake tasks' do
diff --git a/spec/tasks/gitlab/gitaly_rake_spec.rb b/spec/tasks/gitlab/gitaly_rake_spec.rb
index 2f3fc7839c1..0cc92680582 100644
--- a/spec/tasks/gitlab/gitaly_rake_spec.rb
+++ b/spec/tasks/gitlab/gitaly_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:gitaly namespace rake task' do
diff --git a/spec/tasks/gitlab/info_rake_spec.rb b/spec/tasks/gitlab/info_rake_spec.rb
index ca74378a12a..8d6b3985380 100644
--- a/spec/tasks/gitlab/info_rake_spec.rb
+++ b/spec/tasks/gitlab/info_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:env:info' do
diff --git a/spec/tasks/gitlab/ldap_rake_spec.rb b/spec/tasks/gitlab/ldap_rake_spec.rb
index 279234f2887..bbc3f625088 100644
--- a/spec/tasks/gitlab/ldap_rake_spec.rb
+++ b/spec/tasks/gitlab/ldap_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:ldap:rename_provider rake task' do
diff --git a/spec/tasks/gitlab/lfs/check_rake_spec.rb b/spec/tasks/gitlab/lfs/check_rake_spec.rb
index 2610edf8bac..3d698efdcb6 100644
--- a/spec/tasks/gitlab/lfs/check_rake_spec.rb
+++ b/spec/tasks/gitlab/lfs/check_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:lfs rake tasks' do
diff --git a/spec/tasks/gitlab/lfs/migrate_rake_spec.rb b/spec/tasks/gitlab/lfs/migrate_rake_spec.rb
index 66d1a192a96..fc7be0eebcd 100644
--- a/spec/tasks/gitlab/lfs/migrate_rake_spec.rb
+++ b/spec/tasks/gitlab/lfs/migrate_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:lfs namespace rake task' do
@@ -5,32 +7,49 @@ describe 'gitlab:lfs namespace rake task' do
Rake.application.rake_require 'tasks/gitlab/lfs/migrate'
end
- describe 'migrate' do
+ context 'migration tasks' do
let(:local) { ObjectStorage::Store::LOCAL }
let(:remote) { ObjectStorage::Store::REMOTE }
- let!(:lfs_object) { create(:lfs_object, :with_file, file_store: local) }
- def lfs_migrate
- run_rake_task('gitlab:lfs:migrate')
+ before do
+ stub_lfs_object_storage(background_upload: false, direct_upload: false)
end
- context 'object storage disabled' do
- before do
- stub_lfs_object_storage(enabled: false)
+ describe 'migrate' do
+ subject { run_rake_task('gitlab:lfs:migrate') }
+
+ let!(:lfs_object) { create(:lfs_object, :with_file) }
+
+ context 'object storage disabled' do
+ before do
+ stub_lfs_object_storage(enabled: false)
+ end
+
+ it "doesn't migrate files" do
+ expect { subject }.not_to change { lfs_object.reload.file_store }
+ end
end
- it "doesn't migrate files" do
- expect { lfs_migrate }.not_to change { lfs_object.reload.file_store }
+ context 'object storage enabled' do
+ it 'migrates local file to object storage' do
+ expect { subject }.to change { lfs_object.reload.file_store }.from(local).to(remote)
+ end
end
end
- context 'object storage enabled' do
+ describe 'migrate_to_local' do
+ subject { run_rake_task('gitlab:lfs:migrate_to_local') }
+
+ let(:lfs_object) { create(:lfs_object, :with_file, :object_storage) }
+
before do
- stub_lfs_object_storage
+ stub_lfs_object_storage(background_upload: false, direct_upload: true)
end
- it 'migrates local file to object storage' do
- expect { lfs_migrate }.to change { lfs_object.reload.file_store }.from(local).to(remote)
+ context 'object storage enabled' do
+ it 'migrates remote files to local storage' do
+ expect { subject }.to change { lfs_object.reload.file_store }.from(remote).to(local)
+ end
end
end
end
diff --git a/spec/tasks/gitlab/shell_rake_spec.rb b/spec/tasks/gitlab/shell_rake_spec.rb
index c3e912b02c5..abad16be580 100644
--- a/spec/tasks/gitlab/shell_rake_spec.rb
+++ b/spec/tasks/gitlab/shell_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:shell rake tasks' do
@@ -12,8 +14,10 @@ describe 'gitlab:shell rake tasks' do
storages = Gitlab::GitalyClient::StorageSettings.allow_disk_access do
Gitlab.config.repositories.storages.values.map(&:legacy_disk_path)
end
- expect(Kernel).to receive(:system).with('bin/install', *storages).and_call_original
- expect(Kernel).to receive(:system).with('bin/compile').and_call_original
+
+ expect_any_instance_of(Gitlab::TaskHelpers).to receive(:checkout_or_clone_version)
+ allow(Kernel).to receive(:system).with('bin/install', *storages).and_return(true)
+ allow(Kernel).to receive(:system).with('bin/compile').and_return(true)
run_rake_task('gitlab:shell:install')
end
diff --git a/spec/tasks/gitlab/storage_rake_spec.rb b/spec/tasks/gitlab/storage_rake_spec.rb
index 0e47408fc72..ae11e091000 100644
--- a/spec/tasks/gitlab/storage_rake_spec.rb
+++ b/spec/tasks/gitlab/storage_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'rake gitlab:storage:*', :sidekiq do
diff --git a/spec/tasks/gitlab/task_helpers_spec.rb b/spec/tasks/gitlab/task_helpers_spec.rb
index e9322ec4931..4b4f7d7c956 100644
--- a/spec/tasks/gitlab/task_helpers_spec.rb
+++ b/spec/tasks/gitlab/task_helpers_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
class TestHelpersTest
diff --git a/spec/tasks/gitlab/traces_rake_spec.rb b/spec/tasks/gitlab/traces_rake_spec.rb
deleted file mode 100644
index aaf0d7242dd..00000000000
--- a/spec/tasks/gitlab/traces_rake_spec.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-require 'rake_helper'
-
-describe 'gitlab:traces rake tasks' do
- before do
- Rake.application.rake_require 'tasks/gitlab/traces'
- end
-
- describe 'gitlab:traces:archive' do
- shared_examples 'passes the job id to worker' do
- it do
- expect(ArchiveTraceWorker).to receive(:bulk_perform_async).with([[job.id]])
-
- run_rake_task('gitlab:traces:archive')
- end
- end
-
- shared_examples 'does not pass the job id to worker' do
- it do
- expect(ArchiveTraceWorker).not_to receive(:bulk_perform_async)
-
- run_rake_task('gitlab:traces:archive')
- end
- end
-
- context 'when trace file stored in default path' do
- let!(:job) { create(:ci_build, :success, :trace_live) }
-
- it_behaves_like 'passes the job id to worker'
- end
-
- context 'when trace is stored in database' do
- let!(:job) { create(:ci_build, :success) }
-
- before do
- job.update_column(:trace, 'trace in db')
- end
-
- it_behaves_like 'passes the job id to worker'
- end
-
- context 'when job has trace artifact' do
- let!(:job) { create(:ci_build, :success) }
-
- before do
- create(:ci_job_artifact, :trace, job: job)
- end
-
- it_behaves_like 'does not pass the job id to worker'
- end
-
- context 'when job is not finished yet' do
- let!(:build) { create(:ci_build, :running, :trace_live) }
-
- it_behaves_like 'does not pass the job id to worker'
- end
- end
-
- describe 'gitlab:traces:migrate' do
- let(:object_storage_enabled) { false }
-
- before do
- stub_artifacts_object_storage(enabled: object_storage_enabled)
- end
-
- subject { run_rake_task('gitlab:traces:migrate') }
-
- let!(:job_trace) { create(:ci_job_artifact, :trace, file_store: store) }
-
- context 'when local storage is used' do
- let(:store) { ObjectStorage::Store::LOCAL }
-
- context 'and job does not have file store defined' do
- let(:object_storage_enabled) { true }
- let(:store) { nil }
-
- it "migrates file to remote storage" do
- subject
-
- expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
- end
- end
-
- context 'and remote storage is defined' do
- let(:object_storage_enabled) { true }
-
- it "migrates file to remote storage" do
- subject
-
- expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
- end
- end
-
- context 'and remote storage is not defined' do
- it "fails to migrate to remote storage" do
- subject
-
- expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::LOCAL)
- end
- end
- end
-
- context 'when remote storage is used' do
- let(:object_storage_enabled) { true }
- let(:store) { ObjectStorage::Store::REMOTE }
-
- it "file stays on remote storage" do
- subject
-
- expect(job_trace.reload.file_store).to eq(ObjectStorage::Store::REMOTE)
- end
- end
- end
-end
diff --git a/spec/tasks/gitlab/uploads/check_rake_spec.rb b/spec/tasks/gitlab/uploads/check_rake_spec.rb
index 5d597c66133..91f0cedb246 100644
--- a/spec/tasks/gitlab/uploads/check_rake_spec.rb
+++ b/spec/tasks/gitlab/uploads/check_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:uploads rake tasks' do
diff --git a/spec/tasks/gitlab/uploads/migrate_rake_spec.rb b/spec/tasks/gitlab/uploads/migrate_rake_spec.rb
index 9588e8be5dc..2f773bdfeec 100644
--- a/spec/tasks/gitlab/uploads/migrate_rake_spec.rb
+++ b/spec/tasks/gitlab/uploads/migrate_rake_spec.rb
@@ -1,31 +1,44 @@
+# frozen_string_literal: true
+
require 'rake_helper'
-describe 'gitlab:uploads:migrate rake tasks' do
+describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
let(:model_class) { nil }
let(:uploader_class) { nil }
let(:mounted_as) { nil }
let(:batch_size) { 3 }
before do
- stub_env('BATCH', batch_size.to_s)
+ stub_env('MIGRATION_BATCH_SIZE', batch_size.to_s)
stub_uploads_object_storage(uploader_class)
Rake.application.rake_require 'tasks/gitlab/uploads/migrate'
allow(ObjectStorage::MigrateUploadsWorker).to receive(:perform_async)
end
- def run
+ def run(task)
args = [uploader_class.to_s, model_class.to_s, mounted_as].compact
- run_rake_task("gitlab:uploads:migrate", *args)
+ run_rake_task(task, *args)
end
shared_examples 'enqueue jobs in batch' do |batch:|
- it do
+ it 'migrates local storage to remote object storage' do
expect(ObjectStorage::MigrateUploadsWorker)
.to receive(:perform_async).exactly(batch).times
- .and_return("A fake job.")
+ .and_return("A fake job.")
+
+ run('gitlab:uploads:migrate')
+ end
+
+ it 'migrates remote object storage to local storage' do
+ expect(Upload).to receive(:where).exactly(batch + 1).times { Upload.all }
+ expect(ObjectStorage::MigrateUploadsWorker)
+ .to receive(:perform_async)
+ .with(anything, model_class.name, mounted_as, ObjectStorage::Store::LOCAL)
+ .exactly(batch).times
+ .and_return("A fake job.")
- run
+ run('gitlab:uploads:migrate_to_local')
end
end
diff --git a/spec/tasks/gitlab/web_hook_rake_spec.rb b/spec/tasks/gitlab/web_hook_rake_spec.rb
index 7bdf33ff6b0..be31507000d 100644
--- a/spec/tasks/gitlab/web_hook_rake_spec.rb
+++ b/spec/tasks/gitlab/web_hook_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:web_hook namespace rake tasks' do
diff --git a/spec/tasks/gitlab/workhorse_rake_spec.rb b/spec/tasks/gitlab/workhorse_rake_spec.rb
index 42516d36c67..b7877a84185 100644
--- a/spec/tasks/gitlab/workhorse_rake_spec.rb
+++ b/spec/tasks/gitlab/workhorse_rake_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'gitlab:workhorse namespace rake task' do
diff --git a/spec/tasks/tokens_spec.rb b/spec/tasks/tokens_spec.rb
index 4188e7caccb..9c69155056a 100644
--- a/spec/tasks/tokens_spec.rb
+++ b/spec/tasks/tokens_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'rake_helper'
describe 'tokens rake tasks' do
diff --git a/spec/uploaders/attachment_uploader_spec.rb b/spec/uploaders/attachment_uploader_spec.rb
index a9415854d25..d5a92b9b317 100644
--- a/spec/uploaders/attachment_uploader_spec.rb
+++ b/spec/uploaders/attachment_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AttachmentUploader do
diff --git a/spec/uploaders/avatar_uploader_spec.rb b/spec/uploaders/avatar_uploader_spec.rb
index 6aaec7a4fef..c0844360589 100644
--- a/spec/uploaders/avatar_uploader_spec.rb
+++ b/spec/uploaders/avatar_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe AvatarUploader do
diff --git a/spec/uploaders/external_diff_uploader_spec.rb b/spec/uploaders/external_diff_uploader_spec.rb
index 1c959770dc4..ee11085d54e 100644
--- a/spec/uploaders/external_diff_uploader_spec.rb
+++ b/spec/uploaders/external_diff_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ExternalDiffUploader do
diff --git a/spec/uploaders/file_mover_spec.rb b/spec/uploaders/file_mover_spec.rb
index 5ee0a10f38d..c4a315b3fd6 100644
--- a/spec/uploaders/file_mover_spec.rb
+++ b/spec/uploaders/file_mover_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe FileMover do
diff --git a/spec/uploaders/file_uploader_spec.rb b/spec/uploaders/file_uploader_spec.rb
index 04206de3dc6..beb7aa3cf2c 100644
--- a/spec/uploaders/file_uploader_spec.rb
+++ b/spec/uploaders/file_uploader_spec.rb
@@ -1,9 +1,11 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe FileUploader do
let(:group) { create(:group, name: 'awesome') }
let(:project) { create(:project, :legacy_storage, namespace: group, name: 'project') }
- let(:uploader) { described_class.new(project) }
+ let(:uploader) { described_class.new(project, :avatar) }
let(:upload) { double(model: project, path: 'secret/foo.jpg') }
subject { uploader }
@@ -184,6 +186,14 @@ describe FileUploader do
end
end
+ describe '#replace_file_without_saving!' do
+ let(:replacement) { Tempfile.create('replacement.jpg') }
+
+ it 'replaces an existing file without changing its metadata' do
+ expect { subject.replace_file_without_saving! CarrierWave::SanitizedFile.new(replacement) }.not_to change { subject.upload }
+ end
+ end
+
context 'when remote file is used' do
let(:temp_file) { Tempfile.new("test") }
diff --git a/spec/uploaders/gitlab_uploader_spec.rb b/spec/uploaders/gitlab_uploader_spec.rb
index 3bee4875348..4329171f0be 100644
--- a/spec/uploaders/gitlab_uploader_spec.rb
+++ b/spec/uploaders/gitlab_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'carrierwave/storage/fog'
@@ -69,6 +71,16 @@ describe GitlabUploader do
end
end
+ describe '#replace_file_without_saving!' do
+ it 'allows file to be replaced without triggering any callbacks' do
+ new_file = CarrierWave::SanitizedFile.new(Tempfile.new)
+
+ expect(subject).not_to receive(:with_callbacks)
+
+ subject.replace_file_without_saving!(new_file)
+ end
+ end
+
describe '#open' do
context 'when trace is stored in File storage' do
context 'when file exists' do
diff --git a/spec/uploaders/import_export_uploader_spec.rb b/spec/uploaders/import_export_uploader_spec.rb
index 2dea48e3a88..7e8937ff5a6 100644
--- a/spec/uploaders/import_export_uploader_spec.rb
+++ b/spec/uploaders/import_export_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ImportExportUploader do
diff --git a/spec/uploaders/job_artifact_uploader_spec.rb b/spec/uploaders/job_artifact_uploader_spec.rb
index 061432f082a..60b5a6697b1 100644
--- a/spec/uploaders/job_artifact_uploader_spec.rb
+++ b/spec/uploaders/job_artifact_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe JobArtifactUploader do
diff --git a/spec/uploaders/lfs_object_uploader_spec.rb b/spec/uploaders/lfs_object_uploader_spec.rb
index 9f28510c3e4..1041e13d34f 100644
--- a/spec/uploaders/lfs_object_uploader_spec.rb
+++ b/spec/uploaders/lfs_object_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe LfsObjectUploader do
diff --git a/spec/uploaders/namespace_file_uploader_spec.rb b/spec/uploaders/namespace_file_uploader_spec.rb
index 77401814194..aa98b3e2828 100644
--- a/spec/uploaders/namespace_file_uploader_spec.rb
+++ b/spec/uploaders/namespace_file_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe NamespaceFileUploader do
diff --git a/spec/uploaders/object_storage_spec.rb b/spec/uploaders/object_storage_spec.rb
index 0cf486c7087..37b107ee36e 100644
--- a/spec/uploaders/object_storage_spec.rb
+++ b/spec/uploaders/object_storage_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
require 'carrierwave/storage/fog'
diff --git a/spec/uploaders/personal_file_uploader_spec.rb b/spec/uploaders/personal_file_uploader_spec.rb
index d9f0e2f3cb7..ec652af222d 100644
--- a/spec/uploaders/personal_file_uploader_spec.rb
+++ b/spec/uploaders/personal_file_uploader_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PersonalFileUploader do
diff --git a/spec/uploaders/records_uploads_spec.rb b/spec/uploaders/records_uploads_spec.rb
index 046ad3406d9..71eff23c77c 100644
--- a/spec/uploaders/records_uploads_spec.rb
+++ b/spec/uploaders/records_uploads_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe RecordsUploads do
diff --git a/spec/uploaders/uploader_helper_spec.rb b/spec/uploaders/uploader_helper_spec.rb
index 7c9ec8ff59c..753f32a9570 100644
--- a/spec/uploaders/uploader_helper_spec.rb
+++ b/spec/uploaders/uploader_helper_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe UploaderHelper do
diff --git a/spec/uploaders/workers/object_storage/background_move_worker_spec.rb b/spec/uploaders/workers/object_storage/background_move_worker_spec.rb
index cc8970d2ba0..cf4872d6904 100644
--- a/spec/uploaders/workers/object_storage/background_move_worker_spec.rb
+++ b/spec/uploaders/workers/object_storage/background_move_worker_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ObjectStorage::BackgroundMoveWorker do
diff --git a/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb b/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb
index da490cb02af..c7a4680e18d 100644
--- a/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb
+++ b/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ObjectStorage::MigrateUploadsWorker, :sidekiq do
@@ -11,8 +13,8 @@ describe ObjectStorage::MigrateUploadsWorker, :sidekiq do
let(:uploads) { Upload.all }
let(:to_store) { ObjectStorage::Store::REMOTE }
- def perform(uploads)
- described_class.new.perform(uploads.ids, model_class.to_s, mounted_as, to_store)
+ def perform(uploads, store = nil)
+ described_class.new.perform(uploads.ids, model_class.to_s, mounted_as, store || to_store)
rescue ObjectStorage::MigrateUploadsWorker::Report::MigrationFailures
# swallow
end
@@ -42,33 +44,23 @@ describe ObjectStorage::MigrateUploadsWorker, :sidekiq do
end
describe '.sanity_check!' do
- shared_examples 'raises a SanityCheckError' do
+ shared_examples 'raises a SanityCheckError' do |expected_message|
let(:mount_point) { nil }
it do
expect { described_class.sanity_check!(uploads, model_class, mount_point) }
- .to raise_error(described_class::SanityCheckError)
+ .to raise_error(described_class::SanityCheckError).with_message(expected_message)
end
end
- before do
- stub_const("WrongModel", Class.new)
- end
-
context 'uploader types mismatch' do
let!(:outlier) { create(:upload, uploader: 'GitlabUploader') }
- include_examples 'raises a SanityCheckError'
- end
-
- context 'model types mismatch' do
- let!(:outlier) { create(:upload, model_type: 'WrongModel') }
-
- include_examples 'raises a SanityCheckError'
+ include_examples 'raises a SanityCheckError', /Multiple uploaders found/
end
context 'mount point not found' do
- include_examples 'raises a SanityCheckError' do
+ include_examples 'raises a SanityCheckError', /Mount point [a-z:]+ not found in/ do
let(:mount_point) { :potato }
end
end
@@ -97,12 +89,28 @@ describe ObjectStorage::MigrateUploadsWorker, :sidekiq do
it_behaves_like 'outputs correctly', success: 10
- it 'migrates files' do
+ it 'migrates files to remote storage' do
perform(uploads)
expect(Upload.where(store: ObjectStorage::Store::LOCAL).count).to eq(0)
end
+ context 'reversed' do
+ let(:to_store) { ObjectStorage::Store::LOCAL }
+
+ before do
+ perform(uploads, ObjectStorage::Store::REMOTE)
+ end
+
+ it 'migrates files to local storage' do
+ expect(Upload.where(store: ObjectStorage::Store::REMOTE).count).to eq(10)
+
+ perform(uploads)
+
+ expect(Upload.where(store: ObjectStorage::Store::LOCAL).count).to eq(10)
+ end
+ end
+
context 'migration is unsuccessful' do
before do
allow_any_instance_of(ObjectStorage::Concern)
diff --git a/spec/validators/branch_filter_validator_spec.rb b/spec/validators/branch_filter_validator_spec.rb
index 3be54827431..957d1dd99bb 100644
--- a/spec/validators/branch_filter_validator_spec.rb
+++ b/spec/validators/branch_filter_validator_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe BranchFilterValidator do
@@ -6,25 +8,25 @@ describe BranchFilterValidator do
describe '#validates_each' do
it 'allows valid branch names' do
- validator.validate_each(hook, :push_events_branch_filter, "good_branch_name")
- validator.validate_each(hook, :push_events_branch_filter, "another/good_branch_name")
+ validator.validate_each(hook, :push_events_branch_filter, +"good_branch_name")
+ validator.validate_each(hook, :push_events_branch_filter, +"another/good_branch_name")
expect(hook.errors.empty?).to be true
end
it 'disallows bad branch names' do
- validator.validate_each(hook, :push_events_branch_filter, "bad branch~name")
+ validator.validate_each(hook, :push_events_branch_filter, +"bad branch~name")
expect(hook.errors[:push_events_branch_filter].empty?).to be false
end
it 'allows wildcards' do
- validator.validate_each(hook, :push_events_branch_filter, "features/*")
- validator.validate_each(hook, :push_events_branch_filter, "features/*/bla")
- validator.validate_each(hook, :push_events_branch_filter, "*-stable")
+ validator.validate_each(hook, :push_events_branch_filter, +"features/*")
+ validator.validate_each(hook, :push_events_branch_filter, +"features/*/bla")
+ validator.validate_each(hook, :push_events_branch_filter, +"*-stable")
expect(hook.errors.empty?).to be true
end
it 'gets rid of whitespace' do
- filter = ' master '
+ filter = +' master '
validator.validate_each(hook, :push_events_branch_filter, filter)
expect(filter).to eq 'master'
diff --git a/spec/validators/js_regex_validator_spec.rb b/spec/validators/js_regex_validator_spec.rb
index 4d3bafaf267..dcc5e7ed4e8 100644
--- a/spec/validators/js_regex_validator_spec.rb
+++ b/spec/validators/js_regex_validator_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe JsRegexValidator do
diff --git a/spec/validators/named_ecdsa_key_validator_spec.rb b/spec/validators/named_ecdsa_key_validator_spec.rb
index 7e3ceb1cbad..044c5b84a56 100644
--- a/spec/validators/named_ecdsa_key_validator_spec.rb
+++ b/spec/validators/named_ecdsa_key_validator_spec.rb
@@ -43,7 +43,7 @@ describe NamedEcdsaKeyValidator do
context 'with ECDSA certificate with explicit curve params' do
let(:value) { attributes_for(:pages_domain, :explicit_ecdsa)[:key] }
- it 'adds errors', :quarantine do
+ it 'adds errors' do
expect(value).to be_present
subject
diff --git a/spec/validators/namespace_path_validator_spec.rb b/spec/validators/namespace_path_validator_spec.rb
index 61e2845f35f..bc9834dbd2a 100644
--- a/spec/validators/namespace_path_validator_spec.rb
+++ b/spec/validators/namespace_path_validator_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe NamespacePathValidator do
@@ -5,7 +7,7 @@ describe NamespacePathValidator do
describe '.valid_path?' do
it 'handles invalid utf8' do
- expect(described_class.valid_path?("a\0weird\255path")).to be_falsey
+ expect(described_class.valid_path?(+"a\0weird\255path")).to be_falsey
end
end
diff --git a/spec/validators/project_path_validator_spec.rb b/spec/validators/project_path_validator_spec.rb
index 8bb5e72dc22..d6046f7214b 100644
--- a/spec/validators/project_path_validator_spec.rb
+++ b/spec/validators/project_path_validator_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe ProjectPathValidator do
@@ -5,7 +7,7 @@ describe ProjectPathValidator do
describe '.valid_path?' do
it 'handles invalid utf8' do
- expect(described_class.valid_path?("a\0weird\255path")).to be_falsey
+ expect(described_class.valid_path?(+"a\0weird\255path")).to be_falsey
end
end
diff --git a/spec/validators/public_url_validator_spec.rb b/spec/validators/public_url_validator_spec.rb
index 3cbf1002730..c81232d9b78 100644
--- a/spec/validators/public_url_validator_spec.rb
+++ b/spec/validators/public_url_validator_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe PublicUrlValidator do
diff --git a/spec/validators/variable_duplicates_validator_spec.rb b/spec/validators/variable_duplicates_validator_spec.rb
index 0b71a67f94d..f48ebee7e0e 100644
--- a/spec/validators/variable_duplicates_validator_spec.rb
+++ b/spec/validators/variable_duplicates_validator_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe VariableDuplicatesValidator do
diff --git a/spec/validators/x509_certificate_credentials_validator_spec.rb b/spec/validators/x509_certificate_credentials_validator_spec.rb
index 24ef68c1fab..2a5a322622f 100644
--- a/spec/validators/x509_certificate_credentials_validator_spec.rb
+++ b/spec/validators/x509_certificate_credentials_validator_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe X509CertificateCredentialsValidator do
diff --git a/spec/views/admin/application_settings/_repository_storage.html.haml_spec.rb b/spec/views/admin/application_settings/_repository_storage.html.haml_spec.rb
new file mode 100644
index 00000000000..3029bfb6df5
--- /dev/null
+++ b/spec/views/admin/application_settings/_repository_storage.html.haml_spec.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'admin/application_settings/_repository_storage.html.haml' do
+ let(:app_settings) { build(:application_setting) }
+ let(:storages) do
+ {
+ "mepmep" => { "path" => "/tmp" },
+ "foobar" => { "path" => "/tmp" }
+ }
+ end
+
+ before do
+ assign(:application_setting, app_settings)
+ stub_storage_settings(storages)
+ end
+
+ context 'when multiple storages are available' do
+ it 'lists them all' do
+ render
+
+ storages.keys.each do |storage_name|
+ expect(rendered).to have_content(storage_name)
+ end
+ end
+ end
+end
diff --git a/spec/views/admin/dashboard/index.html.haml_spec.rb b/spec/views/admin/dashboard/index.html.haml_spec.rb
index 0e8b7c82d3a..93fedde6e96 100644
--- a/spec/views/admin/dashboard/index.html.haml_spec.rb
+++ b/spec/views/admin/dashboard/index.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'admin/dashboard/index.html.haml' do
@@ -15,6 +17,7 @@ describe 'admin/dashboard/index.html.haml' do
allow(view).to receive(:admin?).and_return(true)
allow(view).to receive(:current_application_settings).and_return(Gitlab::CurrentSettings.current_application_settings)
+ allow(view).to receive(:show_license_breakdown?).and_return(false)
end
it "shows version of GitLab Workhorse" do
diff --git a/spec/views/admin/sessions/new.html.haml_spec.rb b/spec/views/admin/sessions/new.html.haml_spec.rb
new file mode 100644
index 00000000000..57255748988
--- /dev/null
+++ b/spec/views/admin/sessions/new.html.haml_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'admin/sessions/new.html.haml' do
+ context 'admin has password set' do
+ before do
+ allow(view).to receive(:password_authentication_enabled_for_web?).and_return(true)
+ end
+
+ it "shows enter password form" do
+ render
+
+ expect(rendered).to have_css('#login-pane.active')
+ expect(rendered).to have_selector('input[name="password"]')
+ end
+ end
+
+ context 'admin has no password set' do
+ before do
+ allow(view).to receive(:password_authentication_enabled_for_web?).and_return(false)
+ end
+
+ it "warns authentication not possible" do
+ render
+
+ expect(rendered).not_to have_css('#login-pane')
+ expect(rendered).to have_content 'No authentication methods configured'
+ end
+ end
+end
diff --git a/spec/views/ci/status/_badge.html.haml_spec.rb b/spec/views/ci/status/_badge.html.haml_spec.rb
index 49f57969239..59db828a0c7 100644
--- a/spec/views/ci/status/_badge.html.haml_spec.rb
+++ b/spec/views/ci/status/_badge.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'ci/status/_badge' do
diff --git a/spec/views/dashboard/projects/_blank_state_admin_welcome.haml_spec.rb b/spec/views/dashboard/projects/_blank_state_admin_welcome.haml_spec.rb
index 2f58eec86dc..bc92278bb22 100644
--- a/spec/views/dashboard/projects/_blank_state_admin_welcome.haml_spec.rb
+++ b/spec/views/dashboard/projects/_blank_state_admin_welcome.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'dashboard/projects/_blank_state_admin_welcome.html.haml' do
diff --git a/spec/views/dashboard/projects/_nav.html.haml_spec.rb b/spec/views/dashboard/projects/_nav.html.haml_spec.rb
index cbdd3c0acc3..61b6bfef120 100644
--- a/spec/views/dashboard/projects/_nav.html.haml_spec.rb
+++ b/spec/views/dashboard/projects/_nav.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'dashboard/projects/_nav.html.haml' do
diff --git a/spec/views/devise/shared/_signin_box.html.haml_spec.rb b/spec/views/devise/shared/_signin_box.html.haml_spec.rb
index 0563984a03c..f8867477603 100644
--- a/spec/views/devise/shared/_signin_box.html.haml_spec.rb
+++ b/spec/views/devise/shared/_signin_box.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'devise/shared/_signin_box' do
@@ -8,6 +10,7 @@ describe 'devise/shared/_signin_box' do
allow(view).to receive(:current_application_settings).and_return(Gitlab::CurrentSettings.current_application_settings)
allow(view).to receive(:captcha_enabled?).and_return(false)
allow(view).to receive(:captcha_on_login_required?).and_return(false)
+ allow(view).to receive(:experiment_enabled?).and_return(false)
end
it 'is shown when Crowd is enabled' do
diff --git a/spec/views/errors/access_denied.html.haml_spec.rb b/spec/views/errors/access_denied.html.haml_spec.rb
index bde2f6f0169..b2e82847ab9 100644
--- a/spec/views/errors/access_denied.html.haml_spec.rb
+++ b/spec/views/errors/access_denied.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'errors/access_denied' do
diff --git a/spec/views/events/event/_push.html.haml_spec.rb b/spec/views/events/event/_push.html.haml_spec.rb
index f5634de4916..d33a8aa86fc 100644
--- a/spec/views/events/event/_push.html.haml_spec.rb
+++ b/spec/views/events/event/_push.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'events/event/_push.html.haml' do
@@ -26,6 +28,23 @@ describe 'events/event/_push.html.haml' do
expect(rendered).not_to have_link(event.ref_name)
end
end
+
+ context 'ref_count is more than 1' do
+ let(:payload) do
+ build_stubbed(
+ :push_event_payload,
+ event: event,
+ ref_count: 4,
+ ref_type: :branch
+ )
+ end
+
+ it 'includes the count in the text' do
+ render partial: 'events/event/push', locals: { event: event }
+
+ expect(rendered).to include('4 branches')
+ end
+ end
end
context 'with a tag' do
@@ -51,5 +70,22 @@ describe 'events/event/_push.html.haml' do
expect(rendered).not_to have_link(event.ref_name)
end
end
+
+ context 'ref_count is more than 1' do
+ let(:payload) do
+ build_stubbed(
+ :push_event_payload,
+ event: event,
+ ref_count: 4,
+ ref_type: :tag
+ )
+ end
+
+ it 'includes the count in the text' do
+ render partial: 'events/event/push', locals: { event: event }
+
+ expect(rendered).to include('4 tags')
+ end
+ end
end
end
diff --git a/spec/views/groups/_home_panel.html.haml_spec.rb b/spec/views/groups/_home_panel.html.haml_spec.rb
index 91c5ca261b9..8960dfa67db 100644
--- a/spec/views/groups/_home_panel.html.haml_spec.rb
+++ b/spec/views/groups/_home_panel.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'groups/_home_panel' do
diff --git a/spec/views/groups/edit.html.haml_spec.rb b/spec/views/groups/edit.html.haml_spec.rb
index 0da3470433c..9fc850841ee 100644
--- a/spec/views/groups/edit.html.haml_spec.rb
+++ b/spec/views/groups/edit.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'groups/edit.html.haml' do
diff --git a/spec/views/help/instance_configuration.html.haml_spec.rb b/spec/views/help/instance_configuration.html.haml_spec.rb
index 18628ddebf7..81d569b5cf4 100644
--- a/spec/views/help/instance_configuration.html.haml_spec.rb
+++ b/spec/views/help/instance_configuration.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'help/instance_configuration' do
diff --git a/spec/views/layouts/_head.html.haml_spec.rb b/spec/views/layouts/_head.html.haml_spec.rb
index d7f24950e6f..e9b3334fffc 100644
--- a/spec/views/layouts/_head.html.haml_spec.rb
+++ b/spec/views/layouts/_head.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'layouts/_head' do
@@ -5,6 +7,7 @@ describe 'layouts/_head' do
before do
allow(view).to receive(:current_application_settings).and_return(Gitlab::CurrentSettings.current_application_settings)
+ allow(view).to receive(:experiment_enabled?).and_return(false)
end
it 'escapes HTML-safe strings in page_title' do
diff --git a/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb
index bf63021a7fa..9ec65dba586 100644
--- a/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_admin.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'layouts/nav/sidebar/_admin' do
diff --git a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
index b627b9dba59..7decfa58153 100644
--- a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'layouts/nav/sidebar/_project' do
diff --git a/spec/views/notify/pipeline_failed_email.html.haml_spec.rb b/spec/views/notify/pipeline_failed_email.html.haml_spec.rb
index bf633a118ca..b821b015c97 100644
--- a/spec/views/notify/pipeline_failed_email.html.haml_spec.rb
+++ b/spec/views/notify/pipeline_failed_email.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'notify/pipeline_failed_email.html.haml' do
@@ -33,6 +35,8 @@ describe 'notify/pipeline_failed_email.html.haml' do
expect(rendered).to have_content "##{pipeline.id}"
expect(rendered).to have_content pipeline.user.name
end
+
+ it_behaves_like 'correct pipeline information for pipelines for merge requests'
end
context 'pipeline without user' do
diff --git a/spec/views/notify/pipeline_failed_email.text.erb_spec.rb b/spec/views/notify/pipeline_failed_email.text.erb_spec.rb
index 060274eb56a..d15969acf83 100644
--- a/spec/views/notify/pipeline_failed_email.text.erb_spec.rb
+++ b/spec/views/notify/pipeline_failed_email.text.erb_spec.rb
@@ -36,4 +36,6 @@ describe 'notify/pipeline_failed_email.text.erb' do
expect(rendered).to have_content(pipeline.user.name)
expect(rendered).to have_content("/-/jobs/#{job.id}/raw")
end
+
+ it_behaves_like 'correct pipeline information for pipelines for merge requests'
end
diff --git a/spec/views/notify/pipeline_success_email.html.haml_spec.rb b/spec/views/notify/pipeline_success_email.html.haml_spec.rb
index 46a6c908863..fbf33b7ec35 100644
--- a/spec/views/notify/pipeline_success_email.html.haml_spec.rb
+++ b/spec/views/notify/pipeline_success_email.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'notify/pipeline_success_email.html.haml' do
@@ -33,6 +35,8 @@ describe 'notify/pipeline_success_email.html.haml' do
expect(rendered).to have_content "##{pipeline.id}"
expect(rendered).to have_content pipeline.user.name
end
+
+ it_behaves_like 'correct pipeline information for pipelines for merge requests'
end
context 'pipeline without user' do
diff --git a/spec/views/notify/pipeline_success_email.text.erb_spec.rb b/spec/views/notify/pipeline_success_email.text.erb_spec.rb
new file mode 100644
index 00000000000..ba4633bc346
--- /dev/null
+++ b/spec/views/notify/pipeline_success_email.text.erb_spec.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'notify/pipeline_success_email.text.erb' do
+ let(:user) { create(:user, developer_projects: [project]) }
+ let(:project) { create(:project, :repository) }
+ let(:merge_request) { create(:merge_request, :simple, source_project: project) }
+
+ let(:pipeline) do
+ create(:ci_pipeline,
+ :success,
+ project: project,
+ user: user,
+ ref: project.default_branch,
+ sha: project.commit.sha)
+ end
+
+ before do
+ assign(:project, project)
+ assign(:pipeline, pipeline)
+ assign(:merge_request, merge_request)
+ end
+
+ it_behaves_like 'correct pipeline information for pipelines for merge requests'
+end
diff --git a/spec/views/profiles/show.html.haml_spec.rb b/spec/views/profiles/show.html.haml_spec.rb
index 9e7ac0b84fa..592b3a56ba3 100644
--- a/spec/views/profiles/show.html.haml_spec.rb
+++ b/spec/views/profiles/show.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'profiles/show' do
diff --git a/spec/views/projects/_home_panel.html.haml_spec.rb b/spec/views/projects/_home_panel.html.haml_spec.rb
index 12925a5ab07..4d5b369e88e 100644
--- a/spec/views/projects/_home_panel.html.haml_spec.rb
+++ b/spec/views/projects/_home_panel.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/_home_panel' do
diff --git a/spec/views/projects/artifacts/_artifact.html.haml_spec.rb b/spec/views/projects/artifacts/_artifact.html.haml_spec.rb
new file mode 100644
index 00000000000..460b63efa2f
--- /dev/null
+++ b/spec/views/projects/artifacts/_artifact.html.haml_spec.rb
@@ -0,0 +1,74 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe "projects/artifacts/_artifact.html.haml" do
+ let(:project) { create(:project) }
+
+ describe 'delete button' do
+ before do
+ create(:ci_build, :artifacts, project: project)
+
+ allow(view).to receive(:current_user).and_return(user)
+ assign(:project, project)
+ end
+
+ context 'with admin' do
+ let(:user) { build(:admin) }
+
+ it 'has a delete button' do
+ render_partial
+
+ expect(rendered).to have_link('Delete artifacts', href: project_artifact_path(project, project.job_artifacts.first))
+ end
+ end
+
+ context 'with owner' do
+ let(:user) { create(:user) }
+ let(:project) { build(:project, namespace: user.namespace) }
+
+ it 'has a delete button' do
+ render_partial
+
+ expect(rendered).to have_link('Delete artifacts', href: project_artifact_path(project, project.job_artifacts.first))
+ end
+ end
+
+ context 'with master' do
+ let(:user) { create(:user) }
+
+ it 'has a delete button' do
+ allow_any_instance_of(ProjectTeam).to receive(:max_member_access).and_return(Gitlab::Access::MASTER)
+ render_partial
+
+ expect(rendered).to have_link('Delete artifacts', href: project_artifact_path(project, project.job_artifacts.first))
+ end
+ end
+
+ context 'with developer' do
+ let(:user) { build(:user) }
+
+ it 'has no delete button' do
+ project.add_developer(user)
+ render_partial
+
+ expect(rendered).not_to have_link('Delete artifacts')
+ end
+ end
+
+ context 'with reporter' do
+ let(:user) { build(:user) }
+
+ it 'has no delete button' do
+ project.add_reporter(user)
+ render_partial
+
+ expect(rendered).not_to have_link('Delete artifacts')
+ end
+ end
+ end
+
+ def render_partial
+ render partial: 'projects/artifacts/artifact', collection: project.job_artifacts, as: :artifact
+ end
+end
diff --git a/spec/views/projects/blob/_viewer.html.haml_spec.rb b/spec/views/projects/blob/_viewer.html.haml_spec.rb
index 95f7f87d37b..a798a72fa76 100644
--- a/spec/views/projects/blob/_viewer.html.haml_spec.rb
+++ b/spec/views/projects/blob/_viewer.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/blob/_viewer.html.haml' do
diff --git a/spec/views/projects/buttons/_dropdown.html.haml_spec.rb b/spec/views/projects/buttons/_dropdown.html.haml_spec.rb
index 8b9aab30286..2bc1de040d5 100644
--- a/spec/views/projects/buttons/_dropdown.html.haml_spec.rb
+++ b/spec/views/projects/buttons/_dropdown.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/buttons/_dropdown' do
diff --git a/spec/views/projects/ci/lints/show.html.haml_spec.rb b/spec/views/projects/ci/lints/show.html.haml_spec.rb
index 2f0cd38c14a..ea67478ff98 100644
--- a/spec/views/projects/ci/lints/show.html.haml_spec.rb
+++ b/spec/views/projects/ci/lints/show.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/ci/lints/show' do
diff --git a/spec/views/projects/commit/_commit_box.html.haml_spec.rb b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
index 1086546c10d..07c530670d2 100644
--- a/spec/views/projects/commit/_commit_box.html.haml_spec.rb
+++ b/spec/views/projects/commit/_commit_box.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/commit/_commit_box.html.haml' do
diff --git a/spec/views/projects/commit/branches.html.haml_spec.rb b/spec/views/projects/commit/branches.html.haml_spec.rb
index b9d4dc80fe0..36da489a84f 100644
--- a/spec/views/projects/commit/branches.html.haml_spec.rb
+++ b/spec/views/projects/commit/branches.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/commit/branches.html.haml' do
diff --git a/spec/views/projects/commit/show.html.haml_spec.rb b/spec/views/projects/commit/show.html.haml_spec.rb
index d07099489e5..af28a8f9193 100644
--- a/spec/views/projects/commit/show.html.haml_spec.rb
+++ b/spec/views/projects/commit/show.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/commit/show.html.haml' do
diff --git a/spec/views/projects/commits/_commit.html.haml_spec.rb b/spec/views/projects/commits/_commit.html.haml_spec.rb
index 6bf1b5fd2d0..669bb596de5 100644
--- a/spec/views/projects/commits/_commit.html.haml_spec.rb
+++ b/spec/views/projects/commits/_commit.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/commits/_commit.html.haml' do
diff --git a/spec/views/projects/diffs/_stats.html.haml_spec.rb b/spec/views/projects/diffs/_stats.html.haml_spec.rb
index c7d2f85747c..eb853596f98 100644
--- a/spec/views/projects/diffs/_stats.html.haml_spec.rb
+++ b/spec/views/projects/diffs/_stats.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/diffs/_stats.html.haml' do
diff --git a/spec/views/projects/diffs/_viewer.html.haml_spec.rb b/spec/views/projects/diffs/_viewer.html.haml_spec.rb
index 8ac32db5585..1d5d6e1e78d 100644
--- a/spec/views/projects/diffs/_viewer.html.haml_spec.rb
+++ b/spec/views/projects/diffs/_viewer.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/diffs/_viewer.html.haml' do
diff --git a/spec/views/projects/edit.html.haml_spec.rb b/spec/views/projects/edit.html.haml_spec.rb
index 5c6b2e4b042..f576093ab45 100644
--- a/spec/views/projects/edit.html.haml_spec.rb
+++ b/spec/views/projects/edit.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/edit' do
diff --git a/spec/views/projects/environments/terminal.html.haml_spec.rb b/spec/views/projects/environments/terminal.html.haml_spec.rb
index d2e47225226..b0b08a84f8d 100644
--- a/spec/views/projects/environments/terminal.html.haml_spec.rb
+++ b/spec/views/projects/environments/terminal.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/environments/terminal' do
diff --git a/spec/views/projects/imports/new.html.haml_spec.rb b/spec/views/projects/imports/new.html.haml_spec.rb
index 11fe144d1d2..6cca369b9f6 100644
--- a/spec/views/projects/imports/new.html.haml_spec.rb
+++ b/spec/views/projects/imports/new.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require "spec_helper"
describe "projects/imports/new.html.haml" do
diff --git a/spec/views/projects/issues/_related_branches.html.haml_spec.rb b/spec/views/projects/issues/_related_branches.html.haml_spec.rb
index 5cff7694029..a6817e3fdbf 100644
--- a/spec/views/projects/issues/_related_branches.html.haml_spec.rb
+++ b/spec/views/projects/issues/_related_branches.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/issues/_related_branches' do
diff --git a/spec/views/projects/jobs/_build.html.haml_spec.rb b/spec/views/projects/jobs/_build.html.haml_spec.rb
index 1d58891036e..681df77ea99 100644
--- a/spec/views/projects/jobs/_build.html.haml_spec.rb
+++ b/spec/views/projects/jobs/_build.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/ci/jobs/_build' do
diff --git a/spec/views/projects/jobs/_generic_commit_status.html.haml_spec.rb b/spec/views/projects/jobs/_generic_commit_status.html.haml_spec.rb
index dc2ffc9dc47..f193ce0a552 100644
--- a/spec/views/projects/jobs/_generic_commit_status.html.haml_spec.rb
+++ b/spec/views/projects/jobs/_generic_commit_status.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/generic_commit_statuses/_generic_commit_status.html.haml' do
diff --git a/spec/views/projects/jobs/show.html.haml_spec.rb b/spec/views/projects/jobs/show.html.haml_spec.rb
index e06a9ecb98b..903a16d9e53 100644
--- a/spec/views/projects/jobs/show.html.haml_spec.rb
+++ b/spec/views/projects/jobs/show.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/jobs/show' do
diff --git a/spec/views/projects/merge_requests/_commits.html.haml_spec.rb b/spec/views/projects/merge_requests/_commits.html.haml_spec.rb
index a7628548de6..71d74b06f85 100644
--- a/spec/views/projects/merge_requests/_commits.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/_commits.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/merge_requests/_commits.html.haml' do
diff --git a/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb b/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb
index 88c4b52b3a6..f7db4a4d614 100644
--- a/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/merge_requests/creations/_new_submit.html.haml' do
diff --git a/spec/views/projects/merge_requests/diffs/_diffs.html.haml_spec.rb b/spec/views/projects/merge_requests/diffs/_diffs.html.haml_spec.rb
index e7c40421f1f..a82ef3c04b5 100644
--- a/spec/views/projects/merge_requests/diffs/_diffs.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/diffs/_diffs.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/merge_requests/diffs/_diffs.html.haml' do
diff --git a/spec/views/projects/merge_requests/edit.html.haml_spec.rb b/spec/views/projects/merge_requests/edit.html.haml_spec.rb
index 0a3a46210ed..74d9067076c 100644
--- a/spec/views/projects/merge_requests/edit.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/edit.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/merge_requests/edit.html.haml' do
diff --git a/spec/views/projects/merge_requests/show.html.haml_spec.rb b/spec/views/projects/merge_requests/show.html.haml_spec.rb
index 23cb319a202..6023527cb28 100644
--- a/spec/views/projects/merge_requests/show.html.haml_spec.rb
+++ b/spec/views/projects/merge_requests/show.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/merge_requests/show.html.haml' do
diff --git a/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb b/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb
index ae47f364296..a07523a4423 100644
--- a/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb
+++ b/spec/views/projects/notes/_more_actions_dropdown.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/notes/_more_actions_dropdown' do
diff --git a/spec/views/projects/pages_domains/show.html.haml_spec.rb b/spec/views/projects/pages_domains/show.html.haml_spec.rb
index da27a04bfe9..ba0544a49b0 100644
--- a/spec/views/projects/pages_domains/show.html.haml_spec.rb
+++ b/spec/views/projects/pages_domains/show.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/pages_domains/show' do
diff --git a/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb b/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb
index 5d60d6bc5e7..daf799ec13f 100644
--- a/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb
+++ b/spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/pipeline_schedules/_pipeline_schedule' do
diff --git a/spec/views/projects/pipelines/_stage.html.haml_spec.rb b/spec/views/projects/pipelines/_stage.html.haml_spec.rb
index e40e16e742b..591602859c3 100644
--- a/spec/views/projects/pipelines/_stage.html.haml_spec.rb
+++ b/spec/views/projects/pipelines/_stage.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/pipelines/_stage' do
diff --git a/spec/views/projects/services/_form.haml_spec.rb b/spec/views/projects/services/_form.haml_spec.rb
index 06e159f103b..272ac97604a 100644
--- a/spec/views/projects/services/_form.haml_spec.rb
+++ b/spec/views/projects/services/_form.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/services/_form' do
diff --git a/spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb b/spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb
index 697e44be065..94a85486cfa 100644
--- a/spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb
+++ b/spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/settings/ci_cd/_autodevops_form' do
diff --git a/spec/views/projects/tags/index.html.haml_spec.rb b/spec/views/projects/tags/index.html.haml_spec.rb
index 34355e27544..66be085c290 100644
--- a/spec/views/projects/tags/index.html.haml_spec.rb
+++ b/spec/views/projects/tags/index.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/tags/index' do
@@ -23,6 +25,11 @@ describe 'projects/tags/index' do
expect(rendered).to have_button('Last updated')
end
+ it 'renders links to the Releases page for tags associated with a release' do
+ render
+ expect(rendered).to have_link(release.name, href: project_releases_path(project, anchor: release.tag))
+ end
+
context 'when the most recent build for a tag has artifacts' do
let!(:build) { create(:ci_build, :success, :artifacts, pipeline: pipeline) }
diff --git a/spec/views/projects/tree/_tree_header.html.haml_spec.rb b/spec/views/projects/tree/_tree_header.html.haml_spec.rb
new file mode 100644
index 00000000000..4b71ea9ffe3
--- /dev/null
+++ b/spec/views/projects/tree/_tree_header.html.haml_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'projects/tree/_tree_header' do
+ let(:project) { create(:project, :repository) }
+ let(:current_user) { create(:user) }
+ let(:repository) { project.repository }
+
+ before do
+ assign(:project, project)
+ assign(:repository, repository)
+ assign(:id, File.join('master', ''))
+ assign(:ref, 'master')
+
+ allow(view).to receive(:current_user).and_return(current_user)
+ allow(view).to receive(:can_collaborate_with_project?) { true }
+ end
+
+ it 'does not render the WebIDE button when user cannot create fork or cannot open MR' do
+ allow(view).to receive(:can?) { false }
+
+ render
+
+ expect(rendered).not_to have_link('Web IDE')
+ end
+
+ it 'renders the WebIDE button when user can create fork and can open MR in project' do
+ allow(view).to receive(:can?) { true }
+
+ render
+
+ expect(rendered).to have_link('Web IDE')
+ end
+
+ it 'opens a popup confirming a fork if the user can create fork/MR but cannot collaborate with the project' do
+ allow(view).to receive(:can?) { true }
+ allow(view).to receive(:can_collaborate_with_project?) { false }
+
+ render
+
+ expect(rendered).to have_link('Web IDE', href: '#modal-confirm-fork')
+ end
+end
diff --git a/spec/views/projects/tree/_tree_row.html.haml_spec.rb b/spec/views/projects/tree/_tree_row.html.haml_spec.rb
index 3353b7665e2..ff2fe8aeb6c 100644
--- a/spec/views/projects/tree/_tree_row.html.haml_spec.rb
+++ b/spec/views/projects/tree/_tree_row.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/tree/_tree_row' do
diff --git a/spec/views/projects/tree/show.html.haml_spec.rb b/spec/views/projects/tree/show.html.haml_spec.rb
index 5bb0173ab89..960cf42a793 100644
--- a/spec/views/projects/tree/show.html.haml_spec.rb
+++ b/spec/views/projects/tree/show.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'projects/tree/show' do
diff --git a/spec/views/shared/milestones/_issuable.html.haml_spec.rb b/spec/views/shared/milestones/_issuable.html.haml_spec.rb
index 0a3f877cae0..3c2b7c6305a 100644
--- a/spec/views/shared/milestones/_issuable.html.haml_spec.rb
+++ b/spec/views/shared/milestones/_issuable.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'shared/milestones/_issuable.html.haml' do
diff --git a/spec/views/shared/milestones/_issuables.html.haml_spec.rb b/spec/views/shared/milestones/_issuables.html.haml_spec.rb
index 24b55338db3..f77c14a687b 100644
--- a/spec/views/shared/milestones/_issuables.html.haml_spec.rb
+++ b/spec/views/shared/milestones/_issuables.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'shared/milestones/_issuables.html.haml' do
diff --git a/spec/views/shared/milestones/_top.html.haml_spec.rb b/spec/views/shared/milestones/_top.html.haml_spec.rb
index f2ee8be5857..944dfc8a27b 100644
--- a/spec/views/shared/milestones/_top.html.haml_spec.rb
+++ b/spec/views/shared/milestones/_top.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'shared/milestones/_top.html.haml' do
diff --git a/spec/views/shared/notes/_form.html.haml_spec.rb b/spec/views/shared/notes/_form.html.haml_spec.rb
index 0189f926a5f..d354c2f0100 100644
--- a/spec/views/shared/notes/_form.html.haml_spec.rb
+++ b/spec/views/shared/notes/_form.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'shared/notes/_form' do
diff --git a/spec/views/shared/projects/_project.html.haml_spec.rb b/spec/views/shared/projects/_project.html.haml_spec.rb
index dc223861037..b123be42074 100644
--- a/spec/views/shared/projects/_project.html.haml_spec.rb
+++ b/spec/views/shared/projects/_project.html.haml_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe 'shared/projects/_project.html.haml' do
diff --git a/spec/workers/create_evidence_worker_spec.rb b/spec/workers/create_evidence_worker_spec.rb
new file mode 100644
index 00000000000..364b2098251
--- /dev/null
+++ b/spec/workers/create_evidence_worker_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe CreateEvidenceWorker do
+ let!(:release) { create(:release) }
+
+ it 'creates a new Evidence' do
+ expect { described_class.new.perform(release.id) }.to change(Evidence, :count).by(1)
+ end
+end
diff --git a/spec/workers/deployments/success_worker_spec.rb b/spec/workers/deployments/success_worker_spec.rb
index 1c68922b03d..7f2816d7535 100644
--- a/spec/workers/deployments/success_worker_spec.rb
+++ b/spec/workers/deployments/success_worker_spec.rb
@@ -8,8 +8,8 @@ describe Deployments::SuccessWorker do
context 'when successful deployment' do
let(:deployment) { create(:deployment, :success) }
- it 'executes UpdateDeploymentService' do
- expect(UpdateDeploymentService)
+ it 'executes Deployments::AfterCreateService' do
+ expect(Deployments::AfterCreateService)
.to receive(:new).with(deployment).and_call_original
subject
@@ -19,8 +19,8 @@ describe Deployments::SuccessWorker do
context 'when canceled deployment' do
let(:deployment) { create(:deployment, :canceled) }
- it 'does not execute UpdateDeploymentService' do
- expect(UpdateDeploymentService).not_to receive(:new)
+ it 'does not execute Deployments::AfterCreateService' do
+ expect(Deployments::AfterCreateService).not_to receive(:new)
subject
end
@@ -29,8 +29,8 @@ describe Deployments::SuccessWorker do
context 'when deploy record does not exist' do
let(:deployment) { nil }
- it 'does not execute UpdateDeploymentService' do
- expect(UpdateDeploymentService).not_to receive(:new)
+ it 'does not execute Deployments::AfterCreateService' do
+ expect(Deployments::AfterCreateService).not_to receive(:new)
subject
end
diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb
index 8fddd8540ef..b7ba4d61723 100644
--- a/spec/workers/every_sidekiq_worker_spec.rb
+++ b/spec/workers/every_sidekiq_worker_spec.rb
@@ -35,4 +35,32 @@ describe 'Every Sidekiq worker' do
expect(config_queues).to include(queue).or(include(queue_namespace))
end
end
+
+ describe "feature category declarations" do
+ let(:feature_categories) do
+ YAML.load_file(Rails.root.join('config', 'feature_categories.yml')).map(&:to_sym).to_set
+ end
+
+ # All Sidekiq worker classes should declare a valid `feature_category`
+ # or explicitely be excluded with the `feature_category_not_owned!` annotation.
+ # Please see doc/development/sidekiq_style_guide.md#Feature-Categorization for more details.
+ it 'has a feature_category or feature_category_not_owned! attribute', :aggregate_failures do
+ Gitlab::SidekiqConfig.workers.each do |worker|
+ expect(worker.get_feature_category).to be_a(Symbol), "expected #{worker.inspect} to declare a feature_category or feature_category_not_owned!"
+ end
+ end
+
+ # All Sidekiq worker classes should declare a valid `feature_category`.
+ # The category should match a value in `config/feature_categories.yml`.
+ # Please see doc/development/sidekiq_style_guide.md#Feature-Categorization for more details.
+ it 'has a feature_category that maps to a value in feature_categories.yml', :aggregate_failures do
+ workers_with_feature_categories = Gitlab::SidekiqConfig.workers
+ .select(&:get_feature_category)
+ .reject(&:feature_category_not_owned?)
+
+ workers_with_feature_categories.each do |worker|
+ expect(feature_categories).to include(worker.get_feature_category), "expected #{worker.inspect} to declare a valid feature_category, but got #{worker.get_feature_category}"
+ end
+ end
+ end
end
diff --git a/spec/workers/hashed_storage/migrator_worker_spec.rb b/spec/workers/hashed_storage/migrator_worker_spec.rb
index a318cdd003e..12c1a26104e 100644
--- a/spec/workers/hashed_storage/migrator_worker_spec.rb
+++ b/spec/workers/hashed_storage/migrator_worker_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe HashedStorage::MigratorWorker do
subject(:worker) { described_class.new }
+
let(:projects) { create_list(:project, 2, :legacy_storage, :empty_repo) }
let(:ids) { projects.map(&:id) }
diff --git a/spec/workers/hashed_storage/rollbacker_worker_spec.rb b/spec/workers/hashed_storage/rollbacker_worker_spec.rb
index 4055f380978..5fcb1adf9ae 100644
--- a/spec/workers/hashed_storage/rollbacker_worker_spec.rb
+++ b/spec/workers/hashed_storage/rollbacker_worker_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe HashedStorage::RollbackerWorker do
subject(:worker) { described_class.new }
+
let(:projects) { create_list(:project, 2, :empty_repo) }
let(:ids) { projects.map(&:id) }
diff --git a/spec/workers/namespaceless_project_destroy_worker_spec.rb b/spec/workers/namespaceless_project_destroy_worker_spec.rb
index 4fbda37e268..e6686328291 100644
--- a/spec/workers/namespaceless_project_destroy_worker_spec.rb
+++ b/spec/workers/namespaceless_project_destroy_worker_spec.rb
@@ -9,7 +9,6 @@ describe NamespacelessProjectDestroyWorker do
before do
# Stub after_save callbacks that will fail when Project has no namespace
- allow_any_instance_of(Project).to receive(:ensure_storage_path_exists).and_return(nil)
allow_any_instance_of(Project).to receive(:update_project_statistics).and_return(nil)
end
diff --git a/spec/workers/new_release_worker_spec.rb b/spec/workers/new_release_worker_spec.rb
new file mode 100644
index 00000000000..9010c36f795
--- /dev/null
+++ b/spec/workers/new_release_worker_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe NewReleaseWorker do
+ let(:release) { create(:release) }
+
+ it 'sends a new release notification' do
+ expect_any_instance_of(NotificationService).to receive(:send_new_release_notifications).with(release)
+
+ described_class.new.perform(release.id)
+ end
+end
diff --git a/spec/workers/object_pool/destroy_worker_spec.rb b/spec/workers/object_pool/destroy_worker_spec.rb
index ef74f0ba87c..52d457b4b71 100644
--- a/spec/workers/object_pool/destroy_worker_spec.rb
+++ b/spec/workers/object_pool/destroy_worker_spec.rb
@@ -16,7 +16,9 @@ describe ObjectPool::DestroyWorker do
subject { described_class.new }
it 'requests Gitaly to remove the object pool' do
- expect(Gitlab::GitalyClient).to receive(:call).with(pool.shard_name, :object_pool_service, :delete_object_pool, Object)
+ expect(Gitlab::GitalyClient).to receive(:call)
+ .with(pool.shard_name, :object_pool_service, :delete_object_pool,
+ Object, timeout: Gitlab::GitalyClient.long_timeout)
subject.perform(pool.id)
end
diff --git a/spec/workers/post_receive_spec.rb b/spec/workers/post_receive_spec.rb
index c8a0c22b0e8..34aaa9bb1e9 100644
--- a/spec/workers/post_receive_spec.rb
+++ b/spec/workers/post_receive_spec.rb
@@ -43,6 +43,7 @@ describe PostReceive do
before do
allow_any_instance_of(Gitlab::GitPostReceive).to receive(:identify).and_return(empty_project.owner)
+ # Need to mock here so we can expect calls on project
allow(Gitlab::GlRepository).to receive(:parse).and_return([empty_project, Gitlab::GlRepository::PROJECT])
end
@@ -60,33 +61,55 @@ describe PostReceive do
end
end
+ shared_examples 'not updating remote mirrors' do
+ it 'does not schedule an update' do
+ expect(project).not_to receive(:has_remote_mirror?)
+ expect(project).not_to receive(:mark_stuck_remote_mirrors_as_failed!)
+ expect(project).not_to receive(:update_remote_mirrors)
+
+ perform
+ end
+ end
+
context 'empty changes' do
it "does not call any PushService but runs after project hooks" do
- expect(Git::BranchPushService).not_to receive(:new)
- expect(Git::TagPushService).not_to receive(:new)
+ expect(Git::ProcessRefChangesService).not_to receive(:new)
expect_next_instance_of(SystemHooksService) { |service| expect(service).to receive(:execute_hooks) }
perform(changes: "")
end
+
+ it_behaves_like 'not updating remote mirrors'
end
context 'unidentified user' do
let!(:key_id) { "" }
it 'returns false' do
- expect(Git::BranchPushService).not_to receive(:new)
- expect(Git::TagPushService).not_to receive(:new)
+ expect(Git::ProcessRefChangesService).not_to receive(:new)
expect(perform).to be false
end
end
context 'with changes' do
+ let(:push_service) { double(execute: true) }
+
before do
allow_any_instance_of(Gitlab::GitPostReceive).to receive(:identify).and_return(project.owner)
allow(Gitlab::GlRepository).to receive(:parse).and_return([project, Gitlab::GlRepository::PROJECT])
end
+ shared_examples 'updating remote mirrors' do
+ it 'schedules an update if the project had mirrors' do
+ expect(project).to receive(:has_remote_mirror?).and_return(true)
+ expect(project).to receive(:mark_stuck_remote_mirrors_as_failed!)
+ expect(project).to receive(:update_remote_mirrors)
+
+ perform
+ end
+ end
+
context "branches" do
let(:changes) do
<<~EOF
@@ -102,19 +125,17 @@ describe PostReceive do
end
it 'expires the status cache' do
- expect(project).to receive(:empty_repo?).and_return(true)
+ expect(project.repository).to receive(:empty?).and_return(true)
expect(project.repository).to receive(:expire_status_cache)
perform
end
- it 'calls Git::BranchPushService' do
- expect_any_instance_of(Git::BranchPushService) do |service|
+ it 'calls Git::ProcessRefChangesService' do
+ expect_next_instance_of(Git::ProcessRefChangesService) do |service|
expect(service).to receive(:execute).and_return(true)
end
- expect(Git::TagPushService).not_to receive(:new)
-
perform
end
@@ -125,6 +146,8 @@ describe PostReceive do
perform
end
+ it_behaves_like 'updating remote mirrors'
+
context 'with a default branch' do
let(:changes) do
<<~EOF
@@ -149,8 +172,6 @@ describe PostReceive do
654321 210987 refs/tags/tag1
654322 210986 refs/tags/tag2
654323 210985 refs/tags/tag3
- 654324 210984 refs/tags/tag4
- 654325 210983 refs/tags/tag5
EOF
end
@@ -164,23 +185,19 @@ describe PostReceive do
perform
end
- it "only invalidates tags once" do
- expect(project.repository).to receive(:repository_event).exactly(5).times.with(:push_tag).and_call_original
+ it 'only invalidates tags once' do
+ expect(project.repository).to receive(:repository_event).exactly(3).times.with(:push_tag).and_call_original
expect(project.repository).to receive(:expire_caches_for_tags).once.and_call_original
expect(project.repository).to receive(:expire_tags_cache).once.and_call_original
perform
end
- it "calls Git::TagPushService" do
- expect(Git::BranchPushService).not_to receive(:new)
-
- expect_any_instance_of(Git::TagPushService) do |service|
+ it 'calls Git::ProcessRefChangesService' do
+ expect_next_instance_of(Git::ProcessRefChangesService) do |service|
expect(service).to receive(:execute).and_return(true)
end
- expect(Git::BranchPushService).not_to receive(:new)
-
perform
end
@@ -190,83 +207,20 @@ describe PostReceive do
perform
end
+
+ it_behaves_like 'updating remote mirrors'
end
context "merge-requests" do
let(:changes) { "123456 789012 refs/merge-requests/123" }
it "does not call any of the services" do
- expect(Git::BranchPushService).not_to receive(:new)
- expect(Git::TagPushService).not_to receive(:new)
+ expect(Git::ProcessRefChangesService).not_to receive(:new)
perform
end
- end
-
- context "gitlab-ci.yml" do
- let(:changes) do
- <<-EOF.strip_heredoc
- 123456 789012 refs/heads/feature
- 654321 210987 refs/tags/tag
- 123456 789012 refs/heads/feature2
- 123458 789013 refs/heads/feature3
- 123459 789015 refs/heads/feature4
- EOF
- end
-
- let(:changes_count) { changes.lines.count }
-
- subject { perform }
-
- context "with valid .gitlab-ci.yml" do
- before do
- stub_ci_pipeline_to_return_yaml_file
-
- allow_any_instance_of(Project)
- .to receive(:commit)
- .and_return(project.commit)
-
- allow_any_instance_of(Repository)
- .to receive(:branch_exists?)
- .and_return(true)
- end
-
- context 'when git_push_create_all_pipelines is disabled' do
- before do
- stub_feature_flags(git_push_create_all_pipelines: false)
- end
-
- it "creates pipeline for branches and tags" do
- subject
-
- expect(Ci::Pipeline.pluck(:ref)).to contain_exactly("feature", "tag", "feature2", "feature3")
- end
-
- it "creates exactly #{described_class::PIPELINE_PROCESS_LIMIT} pipelines" do
- expect(changes_count).to be > described_class::PIPELINE_PROCESS_LIMIT
-
- expect { subject }.to change { Ci::Pipeline.count }.by(described_class::PIPELINE_PROCESS_LIMIT)
- end
- end
-
- context 'when git_push_create_all_pipelines is enabled' do
- before do
- stub_feature_flags(git_push_create_all_pipelines: true)
- end
-
- it "creates all pipelines" do
- expect { subject }.to change { Ci::Pipeline.count }.by(changes_count)
- end
- end
- end
- context "does not create a Ci::Pipeline" do
- before do
- stub_ci_pipeline_yaml_file(nil)
- end
-
- it { expect { subject }.not_to change { Ci::Pipeline.count } }
- end
+ it_behaves_like 'not updating remote mirrors'
end
context 'after project changes hooks' do
@@ -277,7 +231,7 @@ describe PostReceive do
allow_any_instance_of(Gitlab::DataBuilder::Repository).to receive(:update).and_return(fake_hook_data)
# silence hooks so we can isolate
allow_any_instance_of(Key).to receive(:post_create_hook).and_return(true)
- expect_next_instance_of(Git::BranchPushService) do |service|
+ expect_next_instance_of(Git::ProcessRefChangesService) do |service|
expect(service).to receive(:execute).and_return(true)
end
end
@@ -300,6 +254,11 @@ describe PostReceive do
describe '#process_wiki_changes' do
let(:gl_repository) { "wiki-#{project.id}" }
+ before do
+ # Need to mock here so we can expect calls on project
+ allow(Gitlab::GlRepository).to receive(:parse).and_return([project, Gitlab::GlRepository::WIKI])
+ end
+
it 'updates project activity' do
# Force Project#set_timestamps_for_create to initialize timestamps
project
@@ -314,6 +273,28 @@ describe PostReceive do
.and change(project, :last_repository_updated_at)
end
end
+
+ context "branches" do
+ let(:changes) do
+ <<~EOF
+ 123456 789012 refs/heads/tést1
+ 123456 789012 refs/heads/tést2
+ EOF
+ end
+
+ it 'expires the branches cache' do
+ expect(project.wiki.repository).to receive(:expire_branches_cache).once
+
+ perform
+ end
+
+ it 'expires the status cache' do
+ expect(project.wiki.repository).to receive(:empty?).and_return(true)
+ expect(project.wiki.repository).to receive(:expire_status_cache)
+
+ perform
+ end
+ end
end
context "webhook" do
diff --git a/spec/workers/prune_old_events_worker_spec.rb b/spec/workers/prune_old_events_worker_spec.rb
index f1eef1923bf..14235bde070 100644
--- a/spec/workers/prune_old_events_worker_spec.rb
+++ b/spec/workers/prune_old_events_worker_spec.rb
@@ -6,12 +6,12 @@ describe PruneOldEventsWorker do
describe '#perform' do
let(:user) { create(:user) }
- let!(:expired_event) { create(:event, :closed, author: user, created_at: 25.months.ago) }
+ let!(:expired_event) { create(:event, :closed, author: user, created_at: 37.months.ago) }
let!(:not_expired_1_day_event) { create(:event, :closed, author: user, created_at: 1.day.ago) }
let!(:not_expired_13_month_event) { create(:event, :closed, author: user, created_at: 13.months.ago) }
- let!(:not_expired_2_years_event) { create(:event, :closed, author: user, created_at: 2.years.ago) }
+ let!(:not_expired_3_years_event) { create(:event, :closed, author: user, created_at: 3.years.ago) }
- it 'prunes events older than 2 years' do
+ it 'prunes events older than 3 years' do
expect { subject.perform }.to change { Event.count }.by(-1)
expect(Event.find_by(id: expired_event.id)).to be_nil
end
@@ -26,9 +26,9 @@ describe PruneOldEventsWorker do
expect(not_expired_13_month_event.reload).to be_present
end
- it 'leaves events from 2 years ago' do
+ it 'leaves events from 3 years ago' do
subject.perform
- expect(not_expired_2_years_event).to be_present
+ expect(not_expired_3_years_event).to be_present
end
end
end
diff --git a/spec/workers/repository_check/dispatch_worker_spec.rb b/spec/workers/repository_check/dispatch_worker_spec.rb
index 03efb6a0a80..e4bb0bf4046 100644
--- a/spec/workers/repository_check/dispatch_worker_spec.rb
+++ b/spec/workers/repository_check/dispatch_worker_spec.rb
@@ -30,8 +30,8 @@ describe RepositoryCheck::DispatchWorker do
context 'with unhealthy shard' do
let(:default_shard_name) { 'default' }
let(:unhealthy_shard_name) { 'unhealthy' }
- let(:default_shard) { Gitlab::HealthChecks::Result.new(true, nil, shard: default_shard_name) }
- let(:unhealthy_shard) { Gitlab::HealthChecks::Result.new(false, '14:Connect Failed', shard: unhealthy_shard_name) }
+ let(:default_shard) { Gitlab::HealthChecks::Result.new('gitaly_check', true, nil, shard: default_shard_name) }
+ let(:unhealthy_shard) { Gitlab::HealthChecks::Result.new('gitaly_check', false, '14:Connect Failed', shard: unhealthy_shard_name) }
before do
allow(Gitlab::HealthChecks::GitalyCheck).to receive(:readiness).and_return([default_shard, unhealthy_shard])
diff --git a/spec/workers/update_project_statistics_worker_spec.rb b/spec/workers/update_project_statistics_worker_spec.rb
index a268fd2e4ba..191075f1a52 100644
--- a/spec/workers/update_project_statistics_worker_spec.rb
+++ b/spec/workers/update_project_statistics_worker_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'spec_helper'
describe UpdateProjectStatisticsWorker do
diff --git a/vendor/ingress/values.yaml b/vendor/ingress/values.yaml
index d0c1673cefc..0baaccedc4e 100644
--- a/vendor/ingress/values.yaml
+++ b/vendor/ingress/values.yaml
@@ -1,14 +1,8 @@
controller:
image:
- tag: "0.10.2"
repository: "quay.io/kubernetes-ingress-controller/nginx-ingress-controller"
stats:
enabled: true
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
-
-rbac:
- create: false
- createRole: false
- createClusterRole: false
diff --git a/vendor/jupyter/values.yaml b/vendor/jupyter/values.yaml
index c889814981e..879b7ea4271 100644
--- a/vendor/jupyter/values.yaml
+++ b/vendor/jupyter/values.yaml
@@ -1,6 +1,3 @@
-rbac:
- enabled: false
-
hub:
extraEnv:
JUPYTER_ENABLE_LAB: 1
diff --git a/vendor/licenses.csv b/vendor/licenses.csv
index 41dd9eb5256..c8b305d767d 100644
--- a/vendor/licenses.csv
+++ b/vendor/licenses.csv
@@ -1131,7 +1131,6 @@ vue-apollo,3.0.0-beta.25,ISC
vue-functional-data-merge,2.0.6,MIT
vue-hot-reload-api,2.3.0,MIT
vue-loader,15.4.2,MIT
-vue-resource,1.5.0,MIT
vue-router,3.0.1,MIT
vue-style-loader,4.1.0,MIT
vue-template-compiler,2.5.17,MIT
diff --git a/vendor/prometheus/values.yaml b/vendor/prometheus/values.yaml
index 60241c65202..be79a0c5380 100644
--- a/vendor/prometheus/values.yaml
+++ b/vendor/prometheus/values.yaml
@@ -12,9 +12,6 @@ nodeExporter:
pushgateway:
enabled: false
-rbac:
- create: false
-
server:
fullnameOverride: "prometheus-prometheus-server"
image:
diff --git a/vendor/runner/values.yaml b/vendor/runner/values.yaml
index e5f95152ac7..a34fa0caae4 100644
--- a/vendor/runner/values.yaml
+++ b/vendor/runner/values.yaml
@@ -11,7 +11,6 @@ checkInterval: 3
## For RBAC support
rbac:
- create: false
clusterWideAccess: false
## Configuration for the Pods that that the runner launches for each new job
diff --git a/yarn.lock b/yarn.lock
index 0186f8aad61..3abd18d1111 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,18 +9,18 @@
dependencies:
"@babel/highlight" "^7.0.0"
-"@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.1.2", "@babel/core@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30"
- integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==
+"@babel/core@>=7.2.2", "@babel/core@^7.1.0", "@babel/core@^7.1.2", "@babel/core@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91"
+ integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==
dependencies:
"@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.5.5"
- "@babel/helpers" "^7.5.5"
- "@babel/parser" "^7.5.5"
- "@babel/template" "^7.4.4"
- "@babel/traverse" "^7.5.5"
- "@babel/types" "^7.5.5"
+ "@babel/generator" "^7.6.2"
+ "@babel/helpers" "^7.6.2"
+ "@babel/parser" "^7.6.2"
+ "@babel/template" "^7.6.0"
+ "@babel/traverse" "^7.6.2"
+ "@babel/types" "^7.6.0"
convert-source-map "^1.1.0"
debug "^4.1.0"
json5 "^2.1.0"
@@ -29,16 +29,15 @@
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/generator@^7.1.3", "@babel/generator@^7.4.0", "@babel/generator@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf"
- integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==
+"@babel/generator@^7.1.3", "@babel/generator@^7.4.0", "@babel/generator@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03"
+ integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==
dependencies:
- "@babel/types" "^7.5.5"
+ "@babel/types" "^7.6.0"
jsesc "^2.5.1"
lodash "^4.17.13"
source-map "^0.5.0"
- trim-right "^1.0.1"
"@babel/helper-annotate-as-pure@^7.0.0":
version "7.0.0"
@@ -72,10 +71,10 @@
"@babel/traverse" "^7.4.4"
"@babel/types" "^7.4.4"
-"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4"
- integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==
+"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f"
+ integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==
dependencies:
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-member-expression-to-functions" "^7.5.5"
@@ -215,14 +214,14 @@
"@babel/traverse" "^7.1.0"
"@babel/types" "^7.2.0"
-"@babel/helpers@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e"
- integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==
+"@babel/helpers@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153"
+ integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==
dependencies:
- "@babel/template" "^7.4.4"
- "@babel/traverse" "^7.5.5"
- "@babel/types" "^7.5.5"
+ "@babel/template" "^7.6.0"
+ "@babel/traverse" "^7.6.2"
+ "@babel/types" "^7.6.0"
"@babel/highlight@^7.0.0":
version "7.5.0"
@@ -238,10 +237,10 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77"
integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w==
-"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
- integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1"
+ integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==
"@babel/plugin-proposal-async-generator-functions@^7.2.0":
version "7.2.0"
@@ -350,10 +349,10 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-numeric-separator" "^7.2.0"
-"@babel/plugin-proposal-object-rest-spread@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58"
- integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==
+"@babel/plugin-proposal-object-rest-spread@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096"
+ integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-object-rest-spread" "^7.2.0"
@@ -382,12 +381,12 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-pipeline-operator" "^7.5.0"
-"@babel/plugin-proposal-private-methods@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.4.4.tgz#307b7db29d8ae2d259e7c0e6e665b1922d7ac856"
- integrity sha512-EIV4fDVP3XwdizJ/H6308Km+d8xdLAUCAvsY8mjxhat9I3vNgssGhZuhgn/jw7IK5/91sN8PHtVGxMjeTSrSng==
+"@babel/plugin-proposal-private-methods@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.6.0.tgz#19ddc493c7b5d47afdd4291e740c609a83c9fae4"
+ integrity sha512-G/qjXbdYXxQfDPPu2h7L48SkgO2H2MXoFkCPg+9nFFyMXRCN+ASm/iOT8o/2i3+YhnjFiz5tie+F5Xswvfm/LQ==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.4.4"
+ "@babel/helper-create-class-features-plugin" "^7.6.0"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-proposal-throw-expressions@^7.0.0":
@@ -398,14 +397,14 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-throw-expressions" "^7.2.0"
-"@babel/plugin-proposal-unicode-property-regex@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78"
- integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==
+"@babel/plugin-proposal-unicode-property-regex@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802"
+ integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.5.4"
+ regexpu-core "^4.6.0"
"@babel/plugin-syntax-async-generators@^7.2.0":
version "7.2.0"
@@ -570,10 +569,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-block-scoping@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce"
- integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==
+"@babel/plugin-transform-block-scoping@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79"
+ integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
lodash "^4.17.13"
@@ -599,21 +598,21 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-destructuring@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a"
- integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==
+"@babel/plugin-transform-destructuring@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6"
+ integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-dotall-regex@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3"
- integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==
+"@babel/plugin-transform-dotall-regex@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9"
+ integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.5.4"
+ regexpu-core "^4.6.0"
"@babel/plugin-transform-duplicate-keys@^7.5.0":
version "7.5.0"
@@ -676,10 +675,10 @@
"@babel/helper-plugin-utils" "^7.0.0"
babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74"
- integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==
+"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.5.0", "@babel/plugin-transform-modules-commonjs@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486"
+ integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==
dependencies:
"@babel/helper-module-transforms" "^7.4.4"
"@babel/helper-plugin-utils" "^7.0.0"
@@ -703,12 +702,12 @@
"@babel/helper-module-transforms" "^7.1.0"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106"
- integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b"
+ integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==
dependencies:
- regexp-tree "^0.1.6"
+ regexpu-core "^4.6.0"
"@babel/plugin-transform-new-target@^7.4.4":
version "7.4.4"
@@ -794,10 +793,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-spread@^7.2.0":
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
- integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
+"@babel/plugin-transform-spread@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd"
+ integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
@@ -824,28 +823,28 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-unicode-regex@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f"
- integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==
+"@babel/plugin-transform-unicode-regex@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698"
+ integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.5.4"
+ regexpu-core "^4.6.0"
-"@babel/preset-env@^7.1.0", "@babel/preset-env@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a"
- integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==
+"@babel/preset-env@^7.1.0", "@babel/preset-env@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3"
+ integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-proposal-async-generator-functions" "^7.2.0"
"@babel/plugin-proposal-dynamic-import" "^7.5.0"
"@babel/plugin-proposal-json-strings" "^7.2.0"
- "@babel/plugin-proposal-object-rest-spread" "^7.5.5"
+ "@babel/plugin-proposal-object-rest-spread" "^7.6.2"
"@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
- "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.6.2"
"@babel/plugin-syntax-async-generators" "^7.2.0"
"@babel/plugin-syntax-dynamic-import" "^7.2.0"
"@babel/plugin-syntax-json-strings" "^7.2.0"
@@ -854,11 +853,11 @@
"@babel/plugin-transform-arrow-functions" "^7.2.0"
"@babel/plugin-transform-async-to-generator" "^7.5.0"
"@babel/plugin-transform-block-scoped-functions" "^7.2.0"
- "@babel/plugin-transform-block-scoping" "^7.5.5"
+ "@babel/plugin-transform-block-scoping" "^7.6.2"
"@babel/plugin-transform-classes" "^7.5.5"
"@babel/plugin-transform-computed-properties" "^7.2.0"
- "@babel/plugin-transform-destructuring" "^7.5.0"
- "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/plugin-transform-destructuring" "^7.6.0"
+ "@babel/plugin-transform-dotall-regex" "^7.6.2"
"@babel/plugin-transform-duplicate-keys" "^7.5.0"
"@babel/plugin-transform-exponentiation-operator" "^7.2.0"
"@babel/plugin-transform-for-of" "^7.4.4"
@@ -866,10 +865,10 @@
"@babel/plugin-transform-literals" "^7.2.0"
"@babel/plugin-transform-member-expression-literals" "^7.2.0"
"@babel/plugin-transform-modules-amd" "^7.5.0"
- "@babel/plugin-transform-modules-commonjs" "^7.5.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.6.0"
"@babel/plugin-transform-modules-systemjs" "^7.5.0"
"@babel/plugin-transform-modules-umd" "^7.2.0"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2"
"@babel/plugin-transform-new-target" "^7.4.4"
"@babel/plugin-transform-object-super" "^7.5.5"
"@babel/plugin-transform-parameters" "^7.4.4"
@@ -877,12 +876,12 @@
"@babel/plugin-transform-regenerator" "^7.4.5"
"@babel/plugin-transform-reserved-words" "^7.2.0"
"@babel/plugin-transform-shorthand-properties" "^7.2.0"
- "@babel/plugin-transform-spread" "^7.2.0"
+ "@babel/plugin-transform-spread" "^7.6.2"
"@babel/plugin-transform-sticky-regex" "^7.2.0"
"@babel/plugin-transform-template-literals" "^7.4.4"
"@babel/plugin-transform-typeof-symbol" "^7.2.0"
- "@babel/plugin-transform-unicode-regex" "^7.4.4"
- "@babel/types" "^7.5.5"
+ "@babel/plugin-transform-unicode-regex" "^7.6.2"
+ "@babel/types" "^7.6.0"
browserslist "^4.6.0"
core-js-compat "^3.1.1"
invariant "^2.2.2"
@@ -918,34 +917,34 @@
resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.5.5.tgz#9d3143f6078ff408db694a4254bd6f03c5c33962"
integrity sha512-YIp5taErC4uvp4d5urJtWMui3cpvZt83x57l4oVJNvFtDzumf3pMgRmoTSpGuEzh1yzo7jHhg3mbQmMhmKPbjA==
-"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
- integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==
+"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0":
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
+ integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==
dependencies:
"@babel/code-frame" "^7.0.0"
- "@babel/parser" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/parser" "^7.6.0"
+ "@babel/types" "^7.6.0"
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
- integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c"
+ integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==
dependencies:
"@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.5.5"
+ "@babel/generator" "^7.6.2"
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.5.5"
- "@babel/types" "^7.5.5"
+ "@babel/parser" "^7.6.2"
+ "@babel/types" "^7.6.0"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.1.3", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a"
- integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==
+"@babel/types@^7.0.0", "@babel/types@^7.1.3", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0":
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648"
+ integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==
dependencies:
esutils "^2.0.2"
lodash "^4.17.13"
@@ -991,15 +990,15 @@
dependencies:
vue-eslint-parser "^6.0.4"
-"@gitlab/svgs@^1.73.0":
- version "1.73.0"
- resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.73.0.tgz#e44b347e4be77b94474c80cf5c2ee26ca0325c2f"
- integrity sha512-4on+l5CS8Ae8OOcrnxwkO5s2zq1kHl/YjnOrHaX7megr6jsTYsVzKGaEMe0ViMSIPXA2+QnGD6vElKMkeD2+YQ==
+"@gitlab/svgs@^1.78.0":
+ version "1.78.0"
+ resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.78.0.tgz#469493bd6cdd254eb5d1271edeab22bbbee2f4c4"
+ integrity sha512-dBgEB/Q4FRD0NapmNrD86DF1FsV0uSgTx0UOJloHnGE2DNR2P1HQrCmLW2fX+QgN4P9CDAzdi2buVHuholofWw==
-"@gitlab/ui@5.25.2":
- version "5.25.2"
- resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-5.25.2.tgz#599954fefcc228d31a398dbe3c1e2287a0fcdb3e"
- integrity sha512-mwwvEhVTomnZQjG0dADD+9Kg1UHZXAIb4s5QwQxwpgTkemILYIb1r96oKWfmPe8Pl/xrzAoMUtGEPT3XbxDqYQ==
+"@gitlab/ui@5.36.0":
+ version "5.36.0"
+ resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-5.36.0.tgz#3087b23c138ad1c222f6b047e533f253371bc618"
+ integrity sha512-XXWUYZbRItKh9N92Vxql04BJ05uW5HlOuTCkD+lMbUgneqYTgVoKGH8d9kD++Jy7q8l5+AfzjboUn2n9sbQMZA==
dependencies:
"@babel/standalone" "^7.0.0"
"@gitlab/vue-toasted" "^1.2.1"
@@ -1009,14 +1008,15 @@
highlight.js "^9.13.1"
js-beautify "^1.8.8"
lodash "^4.17.14"
+ resize-observer-polyfill "^1.5.1"
url-search-params-polyfill "^5.0.0"
vue "^2.6.10"
vue-loader "^15.4.2"
-"@gitlab/visual-review-tools@1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@gitlab/visual-review-tools/-/visual-review-tools-1.0.1.tgz#7e588328ed018d91560633d56865d65b72c3a11b"
- integrity sha512-vNqpui0khtPi3crrrFtfuT+nw0SdD/nMyb+aurbJzc3RXuVJGCdgYwosvTLPcJkdMOVfTijizV5+ys75s8INBw==
+"@gitlab/visual-review-tools@1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@gitlab/visual-review-tools/-/visual-review-tools-1.0.3.tgz#b49c4a6fd8af3a1517d7e7d04096562f8bcb5d14"
+ integrity sha512-96j+0+Ivon5nYvT2doDCLQoBzU/GZYfQGLBmZZE3FZVMsIPAEsqDcSV/6+XCikUzU3B8VnH6er6l9OxE5x1RVw==
"@gitlab/vue-toasted@^1.2.1":
version "1.2.1"
@@ -1191,11 +1191,6 @@
consola "^2.3.0"
node-fetch "^2.3.0"
-"@sindresorhus/is@^0.7.0":
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
- integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
-
"@types/anymatch@*":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.0.tgz#d1d55958d1fccc5527d4aba29fc9c4b942f563ff"
@@ -1353,7 +1348,7 @@
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d"
integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==
-"@vue/component-compiler-utils@^2.4.0", "@vue/component-compiler-utils@^2.5.1":
+"@vue/component-compiler-utils@^2.4.0":
version "2.6.0"
resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz#aa46d2a6f7647440b0b8932434d22f12371e543b"
integrity sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==
@@ -1368,6 +1363,21 @@
source-map "~0.6.1"
vue-template-es2015-compiler "^1.9.0"
+"@vue/component-compiler-utils@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.0.0.tgz#d16fa26b836c06df5baaeb45f3d80afc47e35634"
+ integrity sha512-am+04/0UX7ektcmvhYmrf84BDVAD8afFOf4asZjN84q8xzxFclbk5x0MtxuKGfp+zjN5WWPJn3fjFAWtDdIGSw==
+ dependencies:
+ consolidate "^0.15.1"
+ hash-sum "^1.0.2"
+ lru-cache "^4.1.2"
+ merge-source-map "^1.1.0"
+ postcss "^7.0.14"
+ postcss-selector-parser "^5.0.0"
+ prettier "1.16.3"
+ source-map "~0.6.1"
+ vue-template-es2015-compiler "^1.9.0"
+
"@vue/test-utils@^1.0.0-beta.25":
version "1.0.0-beta.25"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.25.tgz#4703076de3076bac42cdd242cd53e6fb8752ed8c"
@@ -1375,158 +1385,161 @@
dependencies:
lodash "^4.17.4"
-"@webassemblyjs/ast@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace"
- integrity sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==
- dependencies:
- "@webassemblyjs/helper-module-context" "1.7.11"
- "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
- "@webassemblyjs/wast-parser" "1.7.11"
-
-"@webassemblyjs/floating-point-hex-parser@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313"
- integrity sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==
-
-"@webassemblyjs/helper-api-error@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a"
- integrity sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==
-
-"@webassemblyjs/helper-buffer@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b"
- integrity sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==
-
-"@webassemblyjs/helper-code-frame@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b"
- integrity sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==
- dependencies:
- "@webassemblyjs/wast-printer" "1.7.11"
-
-"@webassemblyjs/helper-fsm@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181"
- integrity sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==
-
-"@webassemblyjs/helper-module-context@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209"
- integrity sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==
-
-"@webassemblyjs/helper-wasm-bytecode@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06"
- integrity sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==
-
-"@webassemblyjs/helper-wasm-section@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a"
- integrity sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/helper-buffer" "1.7.11"
- "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
- "@webassemblyjs/wasm-gen" "1.7.11"
-
-"@webassemblyjs/ieee754@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b"
- integrity sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==
+"@webassemblyjs/ast@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+ integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+ integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+ integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+ integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+ integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+ integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+ integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+ integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+ integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+ integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
dependencies:
"@xtuc/ieee754" "^1.2.0"
-"@webassemblyjs/leb128@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63"
- integrity sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==
- dependencies:
- "@xtuc/long" "4.2.1"
-
-"@webassemblyjs/utf8@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82"
- integrity sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==
-
-"@webassemblyjs/wasm-edit@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005"
- integrity sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/helper-buffer" "1.7.11"
- "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
- "@webassemblyjs/helper-wasm-section" "1.7.11"
- "@webassemblyjs/wasm-gen" "1.7.11"
- "@webassemblyjs/wasm-opt" "1.7.11"
- "@webassemblyjs/wasm-parser" "1.7.11"
- "@webassemblyjs/wast-printer" "1.7.11"
-
-"@webassemblyjs/wasm-gen@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8"
- integrity sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
- "@webassemblyjs/ieee754" "1.7.11"
- "@webassemblyjs/leb128" "1.7.11"
- "@webassemblyjs/utf8" "1.7.11"
-
-"@webassemblyjs/wasm-opt@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7"
- integrity sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/helper-buffer" "1.7.11"
- "@webassemblyjs/wasm-gen" "1.7.11"
- "@webassemblyjs/wasm-parser" "1.7.11"
-
-"@webassemblyjs/wasm-parser@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a"
- integrity sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/helper-api-error" "1.7.11"
- "@webassemblyjs/helper-wasm-bytecode" "1.7.11"
- "@webassemblyjs/ieee754" "1.7.11"
- "@webassemblyjs/leb128" "1.7.11"
- "@webassemblyjs/utf8" "1.7.11"
-
-"@webassemblyjs/wast-parser@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c"
- integrity sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/floating-point-hex-parser" "1.7.11"
- "@webassemblyjs/helper-api-error" "1.7.11"
- "@webassemblyjs/helper-code-frame" "1.7.11"
- "@webassemblyjs/helper-fsm" "1.7.11"
- "@xtuc/long" "4.2.1"
-
-"@webassemblyjs/wast-printer@1.7.11":
- version "1.7.11"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813"
- integrity sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/wast-parser" "1.7.11"
- "@xtuc/long" "4.2.1"
+"@webassemblyjs/leb128@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+ integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+ integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+ integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/helper-wasm-section" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-opt" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+ integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+ integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+ integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+ integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-code-frame" "1.8.5"
+ "@webassemblyjs/helper-fsm" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+ integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+ "@xtuc/long" "4.2.2"
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
-"@xtuc/long@4.2.1":
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8"
- integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
"@yarnpkg/lockfile@^1.1.0":
version "1.1.0"
@@ -1551,18 +1564,13 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
-accepts@~1.3.4, accepts@~1.3.5:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
- integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
dependencies:
- mime-types "~2.1.18"
- negotiator "0.6.1"
-
-acorn-dynamic-import@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
- integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
acorn-globals@^4.1.0:
version "4.3.0"
@@ -1587,10 +1595,10 @@ acorn@^5.2.1, acorn@^5.5.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
-acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.5, acorn@^6.0.7:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51"
- integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==
+acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7, acorn@^6.2.1:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
+ integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
after@0.8.2:
version "0.8.2"
@@ -1602,10 +1610,10 @@ ajv-errors@^1.0.0:
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59"
integrity sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=
-ajv-keywords@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
- integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.3, ajv@^6.5.5:
version "6.10.2"
@@ -1922,10 +1930,10 @@ astral-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
- integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
async-foreach@^0.1.3:
version "0.1.3"
@@ -2056,15 +2064,15 @@ babel-jest@^24.1.0, babel-jest@^24.8.0:
chalk "^2.4.2"
slash "^2.0.0"
-babel-loader@^8.0.5:
- version "8.0.5"
- resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33"
- integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==
+babel-loader@^8.0.6:
+ version "8.0.6"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
+ integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
dependencies:
find-cache-dir "^2.0.0"
loader-utils "^1.0.2"
mkdirp "^0.5.1"
- util.promisify "^1.0.0"
+ pify "^4.0.1"
babel-plugin-dynamic-import-node@^2.2.0, babel-plugin-dynamic-import-node@^2.3.0:
version "2.3.0"
@@ -2226,21 +2234,21 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
-body-parser@1.18.2, body-parser@^1.16.1:
- version "1.18.2"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
- integrity sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=
+body-parser@1.19.0, body-parser@^1.16.1:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
dependencies:
- bytes "3.0.0"
+ bytes "3.1.0"
content-type "~1.0.4"
debug "2.6.9"
- depd "~1.1.1"
- http-errors "~1.6.2"
- iconv-lite "0.4.19"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
on-finished "~2.3.0"
- qs "6.5.1"
- raw-body "2.3.2"
- type-is "~1.6.15"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
body@^5.1.0:
version "5.1.0"
@@ -2301,7 +2309,7 @@ brace-expansion@^1.1.7, brace-expansion@^1.1.8:
balanced-match "^1.0.0"
concat-map "0.0.1"
-braces@^2.3.0, braces@^2.3.1:
+braces@^2.3.1, braces@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
@@ -2437,6 +2445,11 @@ buffer-indexof@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.0.tgz#f54f647c4f4e25228baa656a2e57e43d5f270982"
integrity sha1-9U9kfE9OJSKLqmVqLlfkPV8nCYI=
+buffer-json@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23"
+ integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==
+
buffer-shims@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
@@ -2471,7 +2484,12 @@ bytes@3.0.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-cacache@^11.0.2, cacache@^11.2.0, cacache@^11.3.3:
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^11.2.0, cacache@^11.3.3:
version "11.3.3"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc"
integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==
@@ -2491,6 +2509,27 @@ cacache@^11.0.2, cacache@^11.2.0, cacache@^11.3.3:
unique-filename "^1.1.1"
y18n "^4.0.0"
+cacache@^12.0.2:
+ version "12.0.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390"
+ integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
cache-base@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -2506,29 +2545,17 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
-cache-loader@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07"
- integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==
+cache-loader@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e"
+ integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==
dependencies:
- loader-utils "^1.1.0"
+ buffer-json "^2.0.0"
+ find-cache-dir "^3.0.0"
+ loader-utils "^1.2.3"
mkdirp "^0.5.1"
- neo-async "^2.6.0"
- normalize-path "^3.0.0"
- schema-utils "^1.0.0"
-
-cacheable-request@^2.1.1:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d"
- integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=
- dependencies:
- clone-response "1.0.2"
- get-stream "3.0.0"
- http-cache-semantics "3.8.1"
- keyv "3.0.0"
- lowercase-keys "1.0.0"
- normalize-url "2.0.1"
- responselike "1.0.2"
+ neo-async "^2.6.1"
+ schema-utils "^2.0.0"
cached-path-relative@^1.0.0:
version "1.0.2"
@@ -2660,6 +2687,15 @@ ccount@^1.0.0:
resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff"
integrity sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -2671,15 +2707,6 @@ chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
character-entities-html4@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610"
@@ -2738,25 +2765,24 @@ check-types@^7.3.0:
resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.3.0.tgz#468f571a4435c24248f5fd0cb0e8d87c3c341e7d"
integrity sha1-Ro9XGkQ1wkJI9f0MsOjYfDw0Hn0=
-chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
- integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==
+chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
dependencies:
anymatch "^2.0.0"
- async-each "^1.0.0"
- braces "^2.3.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
glob-parent "^3.1.0"
- inherits "^2.0.1"
+ inherits "^2.0.3"
is-binary-path "^1.0.0"
is-glob "^4.0.0"
- lodash.debounce "^4.0.8"
- normalize-path "^2.1.1"
+ normalize-path "^3.0.0"
path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- upath "^1.0.5"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
optionalDependencies:
- fsevents "^1.2.2"
+ fsevents "^1.2.7"
chokidar@^3.0.0:
version "3.0.2"
@@ -2778,10 +2804,10 @@ chownr@^1.1.1:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
-chrome-trace-event@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
- integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
dependencies:
tslib "^1.9.0"
@@ -2874,6 +2900,15 @@ cliui@^4.0.0:
strip-ansi "^4.0.0"
wrap-ansi "^2.0.0"
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
clone-buffer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
@@ -2895,13 +2930,6 @@ clone-regexp@^2.1.0:
dependencies:
is-regexp "^2.0.0"
-clone-response@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
- integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
- dependencies:
- mimic-response "^1.0.0"
-
clone-stats@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
@@ -2997,16 +3025,11 @@ comma-separated-tokens@^1.0.1:
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59"
integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ==
-commander@2, commander@^2.10.0, commander@^2.16.0, commander@^2.18.0, commander@^2.19.0, commander@~2.20.0:
+commander@2, commander@^2.10.0, commander@^2.16.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.0:
version "2.20.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
-commander@~2.17.1:
- version "2.17.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
- integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
-
commander@~2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
@@ -3039,35 +3062,35 @@ component-inherit@0.0.3:
resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
-compressible@~2.0.14:
- version "2.0.15"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212"
- integrity sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==
+compressible@~2.0.16:
+ version "2.0.17"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
+ integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
dependencies:
- mime-db ">= 1.36.0 < 2"
+ mime-db ">= 1.40.0 < 2"
-compression-webpack-plugin@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-2.0.0.tgz#46476350c1eb27f783dccc79ac2f709baa2cffbc"
- integrity sha512-bDgd7oTUZC8EkRx8j0sjyCfeiO+e5sFcfgaFcjVhfQf5lLya7oY2BczxcJ7IUuVjz5m6fy8IECFmVFew3xLk8Q==
+compression-webpack-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-3.0.0.tgz#097d2e4d95c3a14cb5c8ed20899009ab5b9bbca0"
+ integrity sha512-ls+oKw4eRbvaSv/hj9NmctihhBcR26j76JxV0bLRLcWhrUBdQFgd06z/Kgg7exyQvtWWP484wZxs0gIUX3NO0Q==
dependencies:
cacache "^11.2.0"
- find-cache-dir "^2.0.0"
+ find-cache-dir "^3.0.0"
neo-async "^2.5.0"
schema-utils "^1.0.0"
serialize-javascript "^1.4.0"
webpack-sources "^1.0.1"
-compression@^1.5.2:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db"
- integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
dependencies:
accepts "~1.3.5"
bytes "3.0.0"
- compressible "~2.0.14"
+ compressible "~2.0.16"
debug "2.6.9"
- on-headers "~1.0.1"
+ on-headers "~1.0.2"
safe-buffer "5.1.2"
vary "~1.1.2"
@@ -3115,10 +3138,10 @@ configstore@^3.0.0:
write-file-atomic "^2.0.0"
xdg-basedir "^3.0.0"
-connect-history-api-fallback@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169"
- integrity sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=
+connect-history-api-fallback@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
connect@^3.6.0:
version "3.6.6"
@@ -3164,10 +3187,12 @@ contains-path@^0.1.0:
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
-content-disposition@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
- integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
+content-disposition@0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
content-type@~1.0.4:
version "1.0.4"
@@ -3196,6 +3221,11 @@ cookie@0.3.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -3252,10 +3282,10 @@ core-js-pure@3.1.4:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.4.tgz#5fa17dc77002a169a3566cc48dc774d2e13e3769"
integrity sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==
-core-js@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.3.tgz#95700bca5f248f5f78c0ec63e784eca663ec4138"
- integrity sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA==
+core-js@^3.1.3, core-js@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09"
+ integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==
core-js@~2.3.0:
version "2.3.0"
@@ -3321,6 +3351,17 @@ cropper@^2.3.0:
dependencies:
jquery ">= 1.9.1"
+cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
cross-spawn@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
@@ -3338,17 +3379,6 @@ cross-spawn@^5.0.1:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@^6.0.0, cross-spawn@^6.0.5:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
"crypt@>= 0.0.1", crypt@~0.0.1:
version "0.0.2"
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
@@ -3405,9 +3435,9 @@ css-selector-parser@^1.3:
integrity sha1-XxrUPi2O77/cME/NOaUhZklD4+s=
css-selector-tokenizer@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
- integrity sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d"
+ integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==
dependencies:
cssesc "^0.1.0"
fastparse "^1.1.1"
@@ -3877,13 +3907,6 @@ decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-decamelize@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7"
- integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==
- dependencies:
- xregexp "4.0.0"
-
deckar01-task_list@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/deckar01-task_list/-/deckar01-task_list-2.2.0.tgz#5cc3ea06f01d3d786b1a667064a462eb5d069bd3"
@@ -3894,13 +3917,6 @@ decode-uri-component@^0.2.0:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-decompress-response@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
- integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
- dependencies:
- mimic-response "^1.0.0"
-
deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@@ -3921,12 +3937,12 @@ deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-default-gateway@^2.6.0:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f"
- integrity sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==
+default-gateway@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+ integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
dependencies:
- execa "^0.10.0"
+ execa "^1.0.0"
ip-regex "^2.1.0"
default-require-extensions@^2.0.0:
@@ -3983,17 +3999,18 @@ del@^2.0.2:
pinkie-promise "^2.0.0"
rimraf "^2.2.8"
-del@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
- integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+del@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+ integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
dependencies:
+ "@types/glob" "^7.1.1"
globby "^6.1.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- p-map "^1.1.1"
- pify "^3.0.0"
- rimraf "^2.2.8"
+ is-path-cwd "^2.0.0"
+ is-path-in-cwd "^2.0.0"
+ p-map "^2.0.0"
+ pify "^4.0.1"
+ rimraf "^2.6.3"
delayed-stream@~1.0.0:
version "1.0.0"
@@ -4015,7 +4032,7 @@ depd@1.1.1:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=
-depd@~1.1.1, depd@~1.1.2:
+depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
@@ -4460,7 +4477,7 @@ engine.io@~3.2.0:
engine.io-parser "~2.1.0"
ws "~3.3.1"
-enhanced-resolve@^4.1.0:
+enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
@@ -4488,7 +4505,7 @@ entities@^1.1.1, entities@~1.1.1:
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA=
-errno@^0.1.3, errno@^0.1.4:
+errno@^0.1.3, errno@~0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
@@ -4656,6 +4673,11 @@ eslint-plugin-jest@^22.3.0:
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.3.0.tgz#a10f10dedfc92def774ec9bb5bfbd2fb8e1c96d2"
integrity sha512-P1mYVRNlOEoO5T9yTqOfucjOYf1ktmJ26NjwjH8sxpCFQa6IhBGr5TpKl3hcAAT29hOsRJVuMWmTsHoUVo9FoA==
+eslint-plugin-no-jquery@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.1.0.tgz#d03b74224c5cfbc7fc0bdd12ce4eb400d09e0c0b"
+ integrity sha512-5sr5tOJRfuRviyAvFTe/mr80TXWxTteD/JHRuJtDN8q/bxAh16eSKoKLAevLC7wZCRN2iwnEfhQPQV4rp/gYtg==
+
eslint-plugin-promise@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz#1e08cb68b5b2cd8839f8d5864c796f56d82746db"
@@ -4681,10 +4703,10 @@ eslint-scope@3.7.1:
esrecurse "^4.1.0"
estraverse "^4.1.1"
-eslint-scope@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172"
- integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==
+eslint-scope@^4.0.0, eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
dependencies:
esrecurse "^4.1.0"
estraverse "^4.1.1"
@@ -4807,16 +4829,21 @@ eve-raphael@0.5.0:
resolved "https://registry.yarnpkg.com/eve-raphael/-/eve-raphael-0.5.0.tgz#17c754b792beef3fa6684d79cf5a47c63c4cda30"
integrity sha1-F8dUt5K+7z+maE15z1pHxjxM2jA=
-eventemitter3@1.x.x:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
- integrity sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=
+eventemitter3@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
+ integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
-events@1.1.1, events@^1.0.0:
+events@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+events@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
+ integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+
eventsource@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
@@ -4837,19 +4864,6 @@ exec-sh@^0.3.2:
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==
-execa@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
- integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==
- dependencies:
- cross-spawn "^6.0.0"
- get-stream "^3.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
execa@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
@@ -4928,39 +4942,39 @@ exports-loader@^0.7.0:
loader-utils "^1.1.0"
source-map "0.5.0"
-express@^4.16.2, express@^4.16.3:
- version "4.16.3"
- resolved "https://registry.npmjs.org/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53"
- integrity sha1-avilAjUNsyRuzEvs9rWjTSL37VM=
+express@^4.16.3, express@^4.17.1:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
dependencies:
- accepts "~1.3.5"
+ accepts "~1.3.7"
array-flatten "1.1.1"
- body-parser "1.18.2"
- content-disposition "0.5.2"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
content-type "~1.0.4"
- cookie "0.3.1"
+ cookie "0.4.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "~1.1.2"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
- finalhandler "1.1.1"
+ finalhandler "~1.1.2"
fresh "0.5.2"
merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "~2.3.0"
- parseurl "~1.3.2"
+ parseurl "~1.3.3"
path-to-regexp "0.1.7"
- proxy-addr "~2.0.3"
- qs "6.5.1"
- range-parser "~1.2.0"
- safe-buffer "5.1.1"
- send "0.16.2"
- serve-static "1.13.2"
- setprototypeof "1.1.0"
- statuses "~1.4.0"
- type-is "~1.6.16"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
utils-merge "1.0.1"
vary "~1.1.2"
@@ -5052,9 +5066,9 @@ fast-levenshtein@~2.0.4:
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fastparse@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
- integrity sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
+ integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
fault@^1.0.2:
version "1.0.2"
@@ -5111,13 +5125,13 @@ file-entry-cache@^5.0.1:
dependencies:
flat-cache "^2.0.1"
-file-loader@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
- integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
+file-loader@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e"
+ integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==
dependencies:
- loader-utils "^1.0.2"
- schema-utils "^1.0.0"
+ loader-utils "^1.2.3"
+ schema-utils "^2.0.0"
fileset@^2.0.3:
version "2.0.3"
@@ -5162,17 +5176,17 @@ finalhandler@1.1.0:
statuses "~1.3.1"
unpipe "~1.0.0"
-finalhandler@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
- integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==
+finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
dependencies:
debug "2.6.9"
encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
- parseurl "~1.3.2"
- statuses "~1.4.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
unpipe "~1.0.0"
find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
@@ -5184,6 +5198,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
make-dir "^2.0.0"
pkg-dir "^3.0.0"
+find-cache-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc"
+ integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^3.0.0"
+ pkg-dir "^4.1.0"
+
find-root@^1.0.0, find-root@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
@@ -5211,13 +5234,21 @@ find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
-findup-sync@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc"
- integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=
+find-up@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
dependencies:
detect-file "^1.0.0"
- is-glob "^3.1.0"
+ is-glob "^4.0.0"
micromatch "^3.0.4"
resolve-dir "^1.0.1"
@@ -5253,7 +5284,7 @@ flush-write-stream@^1.0.0, flush-write-stream@^1.0.2:
inherits "^2.0.3"
readable-stream "^2.3.6"
-follow-redirects@1.5.10:
+follow-redirects@1.5.10, follow-redirects@^1.0.0:
version "1.5.10"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
@@ -5306,7 +5337,7 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-from2@^2.1.0, from2@^2.1.1:
+from2@^2.1.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
@@ -5353,7 +5384,7 @@ fs.realpath@^1.0.0:
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-fsevents@^1.2.2, fsevents@^1.2.7:
+fsevents@^1.2.7:
version "1.2.9"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
@@ -5417,6 +5448,11 @@ get-caller-file@^1.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
get-port@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119"
@@ -5442,7 +5478,7 @@ get-stdin@~5.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
-get-stream@3.0.0, get-stream@^3.0.0:
+get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
@@ -5577,10 +5613,12 @@ global-dirs@^0.1.0:
dependencies:
ini "^1.3.4"
-global-modules-path@^2.3.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.1.tgz#e541f4c800a1a8514a990477b267ac67525b9931"
- integrity sha512-y+shkf4InI7mPRHSo2b/k6ix6+NLDtyccYv86whhxrSGX9wjPX1VMITmrDbE1eh7zkzhiWtW2sHklJYoQ62Cxg==
+global-modules@2.0.0, global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
global-modules@^1.0.0:
version "1.0.0"
@@ -5591,13 +5629,6 @@ global-modules@^1.0.0:
is-windows "^1.0.1"
resolve-dir "^1.0.0"
-global-modules@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
- integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
- dependencies:
- global-prefix "^3.0.0"
-
global-prefix@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
@@ -5722,29 +5753,6 @@ got@^6.7.1:
unzip-response "^2.0.1"
url-parse-lax "^1.0.0"
-got@^8.0.3:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/got/-/got-8.3.0.tgz#6ba26e75f8a6cc4c6b3eb1fe7ce4fec7abac8533"
- integrity sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==
- dependencies:
- "@sindresorhus/is" "^0.7.0"
- cacheable-request "^2.1.1"
- decompress-response "^3.3.0"
- duplexer3 "^0.1.4"
- get-stream "^3.0.0"
- into-stream "^3.1.0"
- is-retry-allowed "^1.1.0"
- isurl "^1.0.0-alpha5"
- lowercase-keys "^1.0.0"
- mimic-response "^1.0.0"
- p-cancelable "^0.4.0"
- p-timeout "^2.0.1"
- pify "^3.0.0"
- safe-buffer "^5.1.1"
- timed-out "^4.0.1"
- url-parse-lax "^3.0.0"
- url-to-options "^1.0.1"
-
graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
version "4.2.0"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b"
@@ -5840,23 +5848,11 @@ has-flag@^3.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-has-symbol-support-x@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.3.0.tgz#588bd6927eaa0e296afae24160659167fc2be4f8"
- integrity sha512-kLtS+N9qwz+Buc6TUfcW5iGb59hLLr5qfxTACi/0uGpH1u5NMNWsdU57KoYRBywvPykeRmu5qfB5x0chpDSWlg==
-
has-symbols@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
-has-to-string-tag-x@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.3.0.tgz#78e3d98c3c0ec9413e970eb8d766249a1e13058f"
- integrity sha512-Fu9Nwv8/VNJMvKjkldzXHO+yeX+TCelwUQ9dGW2LrAfHfHi6zVqQt+Qjilf0qGHvpl6Fap6o8aDhWhMt5hY/1g==
- dependencies:
- has-symbol-support-x "^1.3.0"
-
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
@@ -6019,10 +6015,10 @@ html-encoding-sniffer@^1.0.2:
dependencies:
whatwg-encoding "^1.0.1"
-html-entities@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2"
- integrity sha1-QZSMr4XOgv7Tbk5qDtNxpmZDeeI=
+html-entities@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+ integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
html-minifier@^4.0.0:
version "4.0.0"
@@ -6059,17 +6055,23 @@ htmlparser2@^3.10.0, htmlparser2@^3.9.0:
inherits "^2.0.1"
readable-stream "^3.0.6"
-http-cache-semantics@3.8.1:
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
- integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
-
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
-http-errors@1.6.2, http-errors@~1.6.2:
+http-errors@1.7.2, http-errors@~1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=
@@ -6079,23 +6081,24 @@ http-errors@1.6.2, http-errors@~1.6.2:
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
-http-proxy-middleware@~0.18.0:
- version "0.18.0"
- resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab"
- integrity sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==
+http-proxy-middleware@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+ integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
dependencies:
- http-proxy "^1.16.2"
+ http-proxy "^1.17.0"
is-glob "^4.0.0"
- lodash "^4.17.5"
- micromatch "^3.1.9"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
-http-proxy@^1.13.0, http-proxy@^1.16.2:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
- integrity sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=
+http-proxy@^1.13.0, http-proxy@^1.17.0:
+ version "1.18.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a"
+ integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==
dependencies:
- eventemitter3 "1.x.x"
- requires-port "1.x.x"
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
http-signature@~1.2.0:
version "1.2.0"
@@ -6118,11 +6121,6 @@ iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.22, iconv-lite@^0.4.4:
dependencies:
safer-buffer ">= 2.1.2 < 3"
-iconv-lite@0.4.19:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
- integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==
-
icss-replace-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
@@ -6200,7 +6198,7 @@ import-lazy@^4.0.0:
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
-import-local@^2.0.0:
+import-local@2.0.0, import-local@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
@@ -6248,6 +6246,11 @@ indexof@0.0.1:
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -6290,26 +6293,18 @@ inquirer@^6.1.0:
strip-ansi "^4.0.0"
through "^2.3.6"
-internal-ip@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27"
- integrity sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==
+internal-ip@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+ integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
dependencies:
- default-gateway "^2.6.0"
- ipaddr.js "^1.5.2"
-
-interpret@^1.0.0, interpret@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
- integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=
+ default-gateway "^4.2.0"
+ ipaddr.js "^1.9.0"
-into-stream@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6"
- integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=
- dependencies:
- from2 "^2.1.1"
- p-is-promise "^1.1.0"
+interpret@1.2.0, interpret@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
invariant@^2.2.2, invariant@^2.2.4:
version "2.2.4"
@@ -6338,10 +6333,15 @@ ip@^1.1.0, ip@^1.1.5:
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-ipaddr.js@1.8.0, ipaddr.js@^1.5.2:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
- integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4=
+ipaddr.js@1.9.0, ipaddr.js@^1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
+ integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+
+is-absolute-url@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.2.tgz#554f2933e7385cc46e94351977ca2081170a206e"
+ integrity sha512-+5g/wLlcm1AcxSP7014m6GvbPHswDx980vD/3bZaap8aGV9Yfs7Q6y6tfaupgZ5O74Byzc8dGrSCJ+bFXx0KdA==
is-absolute@^1.0.0:
version "1.0.0"
@@ -6578,16 +6578,16 @@ is-obj@^1.0.0:
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-is-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
- integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
-
is-path-cwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+is-path-cwd@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
is-path-in-cwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
@@ -6595,6 +6595,13 @@ is-path-in-cwd@^1.0.0:
dependencies:
is-path-inside "^1.0.0"
+is-path-in-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+ integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+ dependencies:
+ is-path-inside "^2.1.0"
+
is-path-inside@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
@@ -6602,6 +6609,13 @@ is-path-inside@^1.0.0:
dependencies:
path-is-inside "^1.0.1"
+is-path-inside@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+ dependencies:
+ path-is-inside "^1.0.2"
+
is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
@@ -6653,7 +6667,7 @@ is-resolvable@^1.1.0:
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
-is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
+is-retry-allowed@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
@@ -6836,14 +6850,6 @@ istextorbinary@^2.2.1:
editions "^1.3.3"
textextensions "2"
-isurl@^1.0.0-alpha5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
- integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
- dependencies:
- has-to-string-tag-x "^1.2.0"
- is-object "^1.0.1"
-
iterall@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
@@ -7386,11 +7392,6 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
-json-buffer@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
- integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
-
json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -7569,17 +7570,10 @@ katex@^0.10.0:
dependencies:
commander "^2.16.0"
-keyv@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
- integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==
- dependencies:
- json-buffer "3.0.0"
-
-killable@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b"
- integrity sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=
+killable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+ integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
@@ -7735,12 +7729,12 @@ load-json-file@^4.0.0:
pify "^3.0.0"
strip-bom "^3.0.0"
-loader-runner@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
- integrity sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
-loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
+loader-utils@1.2.3, loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
@@ -7765,6 +7759,13 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
lodash.camelcase@4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
@@ -7775,11 +7776,6 @@ lodash.clonedeep@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
-lodash.debounce@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
- integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
-
lodash.differencewith@~4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz#bafafbc918b55154e179176a00bb0aefaac854b7"
@@ -7825,7 +7821,7 @@ lodash.upperfirst@4.3.1:
resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce"
integrity sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=
-lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10:
+lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -7855,10 +7851,10 @@ log4js@^4.0.0:
rfdc "^1.1.4"
streamroller "^1.0.6"
-loglevel@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.4.1.tgz#95b383f91a3c2756fd4ab093667e4309161f2bcd"
- integrity sha1-lbOD+Ro8J1b9SrCTZn5DCRYfK80=
+loglevel@^1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56"
+ integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==
longest-streak@^2.0.1:
version "2.0.2"
@@ -7885,7 +7881,7 @@ lower-case@^1.1.1:
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
-lowercase-keys@1.0.0, lowercase-keys@^1.0.0:
+lowercase-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=
@@ -7933,6 +7929,13 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
+make-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801"
+ integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==
+ dependencies:
+ semver "^6.0.0"
+
make-error@1.x:
version "1.3.5"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
@@ -7945,6 +7948,11 @@ makeerror@1.0.x:
dependencies:
tmpl "1.0.x"
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+ integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
map-age-cleaner@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
@@ -8133,7 +8141,7 @@ memory-fs@^0.2.0:
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA=
-memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1:
+memory-fs@^0.4.0, memory-fs@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
@@ -8218,7 +8226,7 @@ methods@~1.1.2:
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.5, micromatch@^3.1.6, micromatch@^3.1.8, micromatch@^3.1.9:
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.5, micromatch@^3.1.6:
version "3.1.10"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
@@ -8253,24 +8261,24 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
-"mime-db@>= 1.36.0 < 2", mime-db@~1.37.0:
- version "1.37.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
- integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
+mime-db@1.40.0, "mime-db@>= 1.40.0 < 2":
+ version "1.40.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
+ integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
-mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19:
- version "2.1.21"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
- integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.24"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
+ integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
dependencies:
- mime-db "~1.37.0"
+ mime-db "1.40.0"
-mime@1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
- integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-mime@^2.0.3, mime@^2.2.0, mime@^2.3.1, mime@^2.4.2:
+mime@^2.2.0, mime@^2.3.1, mime@^2.4.4:
version "2.4.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
@@ -8285,11 +8293,6 @@ mimic-fn@^2.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-mimic-response@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e"
- integrity sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=
-
minify@^4.1.1:
version "4.1.2"
resolved "https://registry.yarnpkg.com/minify/-/minify-4.1.2.tgz#88755f4faa5f7ab6d0c64fdd659aa34ea658f180"
@@ -8453,7 +8456,7 @@ ms@2.0.0:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-ms@^2.1.1:
+ms@2.1.1, ms@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
@@ -8512,10 +8515,10 @@ needle@^2.2.1:
iconv-lite "^0.4.4"
sax "^1.2.4"
-negotiator@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
- integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1:
version "2.6.1"
@@ -8544,10 +8547,10 @@ node-fetch@^2.3.0:
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
-node-forge@0.6.33:
- version "0.6.33"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc"
- integrity sha1-RjgRh59XPUUVWtap9D3ClujoXrw=
+node-forge@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a"
+ integrity sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==
node-gyp@^3.8.0:
version "3.8.0"
@@ -8572,10 +8575,10 @@ node-int64@^0.4.0:
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
-"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
- integrity sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==
+"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
dependencies:
assert "^1.1.1"
browserify-zlib "^0.2.0"
@@ -8584,10 +8587,10 @@ node-int64@^0.4.0:
constants-browserify "^1.0.0"
crypto-browserify "^3.11.0"
domain-browser "^1.1.1"
- events "^1.0.0"
+ events "^3.0.0"
https-browserify "^1.0.0"
os-browserify "^0.3.0"
- path-browserify "0.0.0"
+ path-browserify "0.0.1"
process "^0.11.10"
punycode "^1.2.4"
querystring-es3 "^0.2.0"
@@ -8598,8 +8601,8 @@ node-int64@^0.4.0:
timers-browserify "^2.0.4"
tty-browserify "0.0.0"
url "^0.11.0"
- util "^0.10.3"
- vm-browserify "0.0.4"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
node-modules-regexp@^1.0.0:
version "1.0.0"
@@ -8733,15 +8736,6 @@ normalize-selector@^0.2.0:
resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03"
integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=
-normalize-url@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
- integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==
- dependencies:
- prepend-http "^2.0.0"
- query-string "^5.0.1"
- sort-keys "^2.0.0"
-
normalize-url@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
@@ -8887,10 +8881,10 @@ on-finished@~2.3.0:
dependencies:
ee-first "1.1.1"
-on-headers@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
- integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0:
version "1.4.0"
@@ -8911,10 +8905,10 @@ opener@^1.5.1:
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
-opn@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225"
- integrity sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==
+opn@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+ integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
dependencies:
is-wsl "^1.1.0"
@@ -8981,7 +8975,7 @@ os-locale@^1.4.0:
dependencies:
lcid "^1.0.0"
-os-locale@^3.0.0:
+os-locale@^3.0.0, os-locale@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
@@ -9003,11 +8997,6 @@ osenv@0, osenv@^0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
-p-cancelable@^0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
- integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==
-
p-defer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
@@ -9025,11 +9014,6 @@ p-finally@^1.0.0:
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-p-is-promise@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
- integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=
-
p-is-promise@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
@@ -9063,22 +9047,29 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
-p-map@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a"
- integrity sha1-BfXkrpegaDcbwqXMhr+9vBnErno=
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
p-reduce@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
-p-timeout@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038"
- integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==
+p-retry@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+ integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
dependencies:
- p-finally "^1.0.0"
+ retry "^0.12.0"
p-try@^1.0.0:
version "1.0.0"
@@ -9222,20 +9213,20 @@ parseuri@0.0.5:
dependencies:
better-assert "~1.0.0"
-parseurl@~1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
- integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
+parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
pascalcase@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-path-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
- integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
path-dirname@^1.0.0:
version "1.0.2"
@@ -9254,6 +9245,11 @@ path-exists@^3.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -9403,6 +9399,13 @@ pkg-dir@^3.0.0:
dependencies:
find-up "^3.0.0"
+pkg-dir@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
pluralize@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
@@ -9433,10 +9436,10 @@ portal-vue@^2.1.5:
resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-2.1.5.tgz#ecd0997cb32958205151cb72f40fd4f38d175e5c"
integrity sha512-vZmdMn0mOo7puvxoMQ5zju6S29aFD+9yygJxyWQtPaMXS9xunAeoYdnx6yzfL9J8HD8pMZYgSieEIbioAKhrSQ==
-portfinder@^1.0.9:
- version "1.0.13"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
- integrity sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=
+portfinder@^1.0.24:
+ version "1.0.24"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.24.tgz#11efbc6865f12f37624b6531ead1d809ed965cfa"
+ integrity sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==
dependencies:
async "^1.5.2"
debug "^2.2.0"
@@ -9601,9 +9604,9 @@ postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.23:
supports-color "^5.4.0"
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.7:
- version "7.0.17"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f"
- integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==
+ version "7.0.18"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233"
+ integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
@@ -9619,11 +9622,6 @@ prepend-http@^1.0.0, prepend-http@^1.0.1:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
-prepend-http@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
- integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-
prettier@1.16.3:
version "1.16.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d"
@@ -9822,13 +9820,13 @@ protocols@^1.1.0, protocols@^1.4.0:
resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32"
integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==
-proxy-addr@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
- integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==
+proxy-addr@~2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
+ integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
dependencies:
forwarded "~0.1.2"
- ipaddr.js "1.8.0"
+ ipaddr.js "1.9.0"
prr@~1.0.1:
version "1.0.1"
@@ -9906,12 +9904,12 @@ qjobs@^1.1.4:
resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071"
integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==
-qs@6.5.1:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
- integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==
+qs@6.7.0, qs@^6.4.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
-qs@^6.4.0, qs@~6.5.2:
+qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
@@ -9924,15 +9922,6 @@ query-string@^4.1.0:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
-query-string@^5.0.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
- integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
- dependencies:
- decode-uri-component "^0.2.0"
- object-assign "^4.1.0"
- strict-uri-encode "^1.0.0"
-
querystring-es3@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
@@ -9968,7 +9957,7 @@ randomfill@^1.0.3:
randombytes "^2.0.5"
safe-buffer "^5.1.0"
-range-parser@^1.0.3, range-parser@^1.2.0, range-parser@^1.2.1, range-parser@~1.2.0:
+range-parser@^1.2.0, range-parser@^1.2.1, range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
@@ -9985,14 +9974,14 @@ raven-js@^3.22.1:
resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.22.1.tgz#1117f00dfefaa427ef6e1a7d50bbb1fb998a24da"
integrity sha512-2Y8czUl5a9usbvXbpV8a+GPAiDXjxQjaHImZL0TyJWI5k5jV/6o+wceaBAg9g6RpO9OOJp0/w2mMs6pBoqOyDA==
-raw-body@2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
- integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
dependencies:
- bytes "3.0.0"
- http-errors "1.6.2"
- iconv-lite "0.4.19"
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
unpipe "1.0.0"
raw-body@~1.1.0:
@@ -10003,13 +9992,13 @@ raw-body@~1.1.0:
bytes "1"
string_decoder "0.10"
-raw-loader@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-1.0.0.tgz#3f9889e73dadbda9a424bce79809b4133ad46405"
- integrity sha512-Uqy5AqELpytJTRxYT4fhltcKPj0TyaEpzJDcGz7DFJi+pQOOi3GjR/DOdxTkTsF+NzhnldIoG6TORaBlInUuqA==
+raw-loader@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f"
+ integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==
dependencies:
loader-utils "^1.1.0"
- schema-utils "^1.0.0"
+ schema-utils "^2.0.1"
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@~1.2.7:
version "1.2.8"
@@ -10140,15 +10129,14 @@ readdir-enhanced@^2.2.4:
call-me-maybe "^1.0.1"
glob-to-regexp "^0.4.0"
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
readdirp@^3.1.1:
version "3.1.1"
@@ -10180,7 +10168,7 @@ redent@^2.0.0:
indent-string "^3.0.0"
strip-indent "^2.0.0"
-regenerate-unicode-properties@^8.0.2:
+regenerate-unicode-properties@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
@@ -10207,11 +10195,6 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
-regexp-tree@^0.1.6:
- version "0.1.11"
- resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.11.tgz#c9c7f00fcf722e0a56c7390983a7a63dd6c272f3"
- integrity sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==
-
regexpp@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
@@ -10226,13 +10209,13 @@ regexpu-core@^1.0.0:
regjsgen "^0.2.0"
regjsparser "^0.1.4"
-regexpu-core@^4.5.4:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae"
- integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==
+regexpu-core@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
+ integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==
dependencies:
regenerate "^1.4.0"
- regenerate-unicode-properties "^8.0.2"
+ regenerate-unicode-properties "^8.1.0"
regjsgen "^0.5.0"
regjsparser "^0.6.0"
unicode-match-property-ecmascript "^1.0.4"
@@ -10519,6 +10502,11 @@ require-main-filename@^1.0.1:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
require-uncached@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
@@ -10532,7 +10520,7 @@ requireindex@~1.1.0:
resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162"
integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI=
-requires-port@1.x.x, requires-port@^1.0.0:
+requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
@@ -10544,6 +10532,11 @@ requizzle@~0.2.1:
dependencies:
underscore "~1.6.0"
+resize-observer-polyfill@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+ integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
resolve-cwd@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
@@ -10598,13 +10591,6 @@ resolve@1.x, resolve@^1.1.3, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, re
dependencies:
path-parse "^1.0.6"
-responselike@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
- integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
- dependencies:
- lowercase-keys "^1.0.0"
-
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -10618,6 +10604,11 @@ ret@~0.1.10:
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
rfdc@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2"
@@ -10674,11 +10665,6 @@ rxjs@^6.1.0:
dependencies:
tslib "^1.9.0"
-safe-buffer@5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
- integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
-
safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -10749,7 +10735,7 @@ sax@>=0.6.0, sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-schema-utils@^0.4.0, schema-utils@^0.4.4:
+schema-utils@^0.4.0:
version "0.4.5"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e"
integrity sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==
@@ -10766,6 +10752,14 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0"
ajv-keywords "^3.1.0"
+schema-utils@^2.0.0, schema-utils@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.2.0.tgz#48a065ce219e0cacf4631473159037b2c1ae82da"
+ integrity sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA==
+ dependencies:
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+
scope-css@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/scope-css/-/scope-css-1.2.1.tgz#c35768bc900cad030a3e0d663a818c0f6a57f40e"
@@ -10798,12 +10792,12 @@ select@^1.1.2:
resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
-selfsigned@^1.9.1:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52"
- integrity sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=
+selfsigned@^1.10.6:
+ version "1.10.6"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.6.tgz#7b3cd37ed9c2034261a173af1a1aae27d8169b67"
+ integrity sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==
dependencies:
- node-forge "0.6.33"
+ node-forge "0.8.2"
semver-diff@^2.0.0:
version "2.1.0"
@@ -10817,20 +10811,20 @@ semver-diff@^2.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
-semver@^6.0.0, semver@^6.1.1:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db"
- integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==
+semver@^6.0.0, semver@^6.1.1, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
-send@0.16.2:
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
- integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
dependencies:
debug "2.6.9"
depd "~1.1.2"
@@ -10839,19 +10833,19 @@ send@0.16.2:
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
- http-errors "~1.6.2"
- mime "1.4.1"
- ms "2.0.0"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
on-finished "~2.3.0"
- range-parser "~1.2.0"
- statuses "~1.4.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
serialize-javascript@^1.4.0, serialize-javascript@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==
-serve-index@^1.7.2:
+serve-index@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
@@ -10864,26 +10858,21 @@ serve-index@^1.7.2:
mime-types "~2.1.17"
parseurl "~1.3.2"
-serve-static@1.13.2:
- version "1.13.2"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
- integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
dependencies:
encodeurl "~1.0.2"
escape-html "~1.0.3"
- parseurl "~1.3.2"
- send "0.16.2"
+ parseurl "~1.3.3"
+ send "0.17.1"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
- integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
-
set-value@^0.4.3:
version "0.4.3"
resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
@@ -10914,10 +10903,10 @@ setprototypeof@1.0.3:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=
-setprototypeof@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
- integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
sha.js@^2.4.0, sha.js@^2.4.8:
version "2.4.10"
@@ -11088,10 +11077,10 @@ socket.io@2.1.1:
socket.io-client "2.1.1"
socket.io-parser "~3.2.0"
-sockjs-client@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177"
- integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==
+sockjs-client@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"
+ integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==
dependencies:
debug "^3.2.5"
eventsource "^1.0.7"
@@ -11115,23 +11104,11 @@ sort-keys@^1.0.0:
dependencies:
is-plain-obj "^1.0.0"
-sort-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
- integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=
- dependencies:
- is-plain-obj "^1.0.0"
-
-sortablejs@^1.10.0:
+sortablejs@^1.10.0, sortablejs@^1.9.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.0.tgz#0ebc054acff2486569194a2f975b2b145dd5e7d6"
integrity sha512-+e0YakK1BxgEZpf9l9UiFaiQ8ZOBn1p/4qkkXr8QDVmYyCrUDTyDRRGm0AgW4E4cD0wtgxJ6yzIRkSPUwqhuhg==
-sortablejs@^1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.9.0.tgz#2d1e74ae6bac2cb4ad0622908f340848969eb88d"
- integrity sha512-Ot6bYJ6PoqPmpsqQYXjn1+RKrY2NWQvQt/o4jfd/UYwVWndyO5EPO8YHbnm5HIykf8ENsm4JUrdAvolPT86yYA==
-
source-list-map@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
@@ -11148,10 +11125,10 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.6:
- version "0.5.12"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
- integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
+source-map-support@^0.5.6, source-map-support@~0.5.12:
+ version "0.5.13"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
+ integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
@@ -11222,10 +11199,10 @@ spdy-transport@^3.0.0:
readable-stream "^3.0.6"
wbuf "^1.7.3"
-spdy@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52"
- integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==
+spdy@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2"
+ integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==
dependencies:
debug "^4.1.0"
handle-thing "^2.0.0"
@@ -11303,10 +11280,10 @@ static-extend@^0.1.1:
define-property "^0.2.5"
object-copy "^0.1.0"
-"statuses@>= 1.3.1 < 2", statuses@~1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
- integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==
+"statuses@>= 1.3.1 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
statuses@~1.3.1:
version "1.3.1"
@@ -11423,14 +11400,14 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string-width@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.0.0.tgz#5a1690a57cc78211fffd9bf24bbe24d090604eb1"
- integrity sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
dependencies:
emoji-regex "^7.0.1"
is-fullwidth-code-point "^2.0.0"
- strip-ansi "^5.0.0"
+ strip-ansi "^5.1.0"
string-width@^4.0.0, string-width@^4.1.0:
version "4.1.0"
@@ -11477,7 +11454,7 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
-strip-ansi@^5.0.0, strip-ansi@^5.2.0:
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
@@ -11525,13 +11502,13 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-style-loader@^0.23.1:
- version "0.23.1"
- resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
- integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+style-loader@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82"
+ integrity sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==
dependencies:
- loader-utils "^1.1.0"
- schema-utils "^1.0.0"
+ loader-utils "^1.2.3"
+ schema-utils "^2.0.1"
style-search@^0.1.0:
version "0.1.0"
@@ -11622,25 +11599,25 @@ sugarss@^2.0.0:
dependencies:
postcss "^7.0.2"
+supports-color@6.1.0, supports-color@^6.0.0, supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-supports-color@^5.1.0, supports-color@^5.2.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0:
+supports-color@^5.2.0, supports-color@^5.3.0, supports-color@^5.4.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
-supports-color@^6.0.0, supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
- dependencies:
- has-flag "^3.0.0"
-
svg-tags@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
@@ -11681,10 +11658,10 @@ tapable@^0.1.8:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=
-tapable@^1.0.0, tapable@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c"
- integrity sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
tar@^2.0.0:
version "2.2.2"
@@ -11715,37 +11692,29 @@ term-size@^1.2.0:
dependencies:
execa "^0.7.0"
-terser-webpack-plugin@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz#7545da9ae5f4f9ae6a0ac961eb46f5e7c845cc26"
- integrity sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==
+terser-webpack-plugin@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4"
+ integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==
dependencies:
- cacache "^11.0.2"
- find-cache-dir "^2.0.0"
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
schema-utils "^1.0.0"
- serialize-javascript "^1.4.0"
+ serialize-javascript "^1.7.0"
source-map "^0.6.1"
- terser "^3.8.1"
- webpack-sources "^1.1.0"
- worker-farm "^1.5.2"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
-terser@^3.8.1:
- version "3.14.1"
- resolved "https://registry.yarnpkg.com/terser/-/terser-3.14.1.tgz#cc4764014af570bc79c79742358bd46926018a32"
- integrity sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==
- dependencies:
- commander "~2.17.1"
- source-map "~0.6.1"
- source-map-support "~0.5.6"
-
-terser@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374"
- integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==
+terser@^4.0.0, terser@^4.1.2:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.1.tgz#09820bcb3398299c4b48d9a86aefc65127d0ed65"
+ integrity sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==
dependencies:
- commander "^2.19.0"
+ commander "^2.20.0"
source-map "~0.6.1"
- source-map-support "~0.5.10"
+ source-map-support "~0.5.12"
test-exclude@^5.0.0:
version "5.0.0"
@@ -11825,7 +11794,7 @@ timeago.js@^3.0.2:
dependencies:
"@types/jquery" "^2.0.40"
-timed-out@^4.0.0, timed-out@^4.0.1:
+timed-out@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
@@ -11989,6 +11958,11 @@ toggle-selection@^1.0.3:
resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI=
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
touch@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
@@ -12026,11 +12000,6 @@ trim-newlines@^2.0.0:
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
-trim-right@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
- integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
-
trim-trailing-lines@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9"
@@ -12126,13 +12095,13 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
-type-is@~1.6.15, type-is@~1.6.16:
- version "1.6.16"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
- integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
dependencies:
media-typer "0.3.0"
- mime-types "~2.1.18"
+ mime-types "~2.1.24"
typedarray@^0.0.6, typedarray@~0.0.5:
version "0.0.6"
@@ -12382,10 +12351,10 @@ unzip-response@^2.0.1:
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
-upath@^1.0.5:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
- integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
update-notifier@^2.5.0:
version "2.5.0"
@@ -12420,14 +12389,14 @@ urix@^0.1.0:
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-url-loader@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
- integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
+url-loader@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.1.0.tgz#bcc1ecabbd197e913eca23f5e0378e24b4412961"
+ integrity sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==
dependencies:
- loader-utils "^1.1.0"
- mime "^2.0.3"
- schema-utils "^1.0.0"
+ loader-utils "^1.2.3"
+ mime "^2.4.4"
+ schema-utils "^2.0.0"
url-parse-lax@^1.0.0:
version "1.0.0"
@@ -12436,13 +12405,6 @@ url-parse-lax@^1.0.0:
dependencies:
prepend-http "^1.0.1"
-url-parse-lax@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
- integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
- dependencies:
- prepend-http "^2.0.0"
-
url-parse@^1.4.3:
version "1.4.4"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8"
@@ -12456,11 +12418,6 @@ url-search-params-polyfill@^5.0.0:
resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-5.0.0.tgz#09b98337c89dcf6c6a6a0bfeb096f6ba83b7526b"
integrity sha512-+SCD22QJp4UnqPOI5UTTR0Ljuh8cHbjEf1lIiZrZ8nHTlTixqwVsVQTSfk5vrmDz7N09/Y+ka5jQr0ff35FnQQ==
-url-to-options@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
- integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=
-
url@0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64"
@@ -12503,13 +12460,20 @@ util.promisify@^1.0.0:
define-properties "^1.1.2"
object.getownpropertydescriptors "^2.0.3"
-util@0.10.3, util@^0.10.3:
+util@0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
dependencies:
inherits "2.0.1"
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
@@ -12520,10 +12484,10 @@ uuid@3.3.2, uuid@^3.0.1, uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
-v8-compile-cache@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c"
- integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==
+v8-compile-cache@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
+ integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
validate-npm-package-license@^3.0.1:
version "3.0.1"
@@ -12678,12 +12642,10 @@ visibilityjs@^1.2.4:
resolved "https://registry.yarnpkg.com/visibilityjs/-/visibilityjs-1.2.4.tgz#bff8663da62c8c10ad4ee5ae6a1ae6fac4259d63"
integrity sha1-v/hmPaYsjBCtTuWuahrm+sQlnWM=
-vm-browserify@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
- integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
- dependencies:
- indexof "0.0.1"
+vm-browserify@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
+ integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
void-elements@^2.0.0:
version "2.0.1"
@@ -12744,24 +12706,17 @@ vue-jest@^4.0.0-beta.2:
source-map "^0.5.6"
ts-jest "^23.10.5"
-vue-loader@^15.4.2, vue-loader@^15.7.0:
- version "15.7.0"
- resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.7.0.tgz#27275aa5a3ef4958c5379c006dd1436ad04b25b3"
- integrity sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==
+vue-loader@^15.4.2, vue-loader@^15.7.1:
+ version "15.7.1"
+ resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.7.1.tgz#6ccacd4122aa80f69baaac08ff295a62e3aefcfd"
+ integrity sha512-fwIKtA23Pl/rqfYP5TSGK7gkEuLhoTvRYW+TU7ER3q9GpNLt/PjG5NLv3XHRDiTg7OPM1JcckBgds+VnAc+HbA==
dependencies:
- "@vue/component-compiler-utils" "^2.5.1"
+ "@vue/component-compiler-utils" "^3.0.0"
hash-sum "^1.0.2"
loader-utils "^1.1.0"
vue-hot-reload-api "^2.3.0"
vue-style-loader "^4.1.0"
-vue-resource@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/vue-resource/-/vue-resource-1.5.1.tgz#0f3d685e3254d21800bebd966edcf56c34b3b6e4"
- integrity sha512-o6V4wNgeqP+9v9b2bPXrr20CGNQPEXjpbUWdZWq9GJhqVeAGcYoeTtn/D4q059ZiyN0DIrDv/ADrQUmlUQcsmg==
- dependencies:
- got "^8.0.3"
-
vue-router@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be"
@@ -12829,10 +12784,10 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
-watchpack@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed"
- integrity sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==
+watchpack@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
dependencies:
chokidar "^2.0.2"
graceful-fs "^4.1.2"
@@ -12850,10 +12805,10 @@ webidl-conversions@^4.0.2:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
-webpack-bundle-analyzer@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz#3da733a900f515914e729fcebcd4c40dde71fc6f"
- integrity sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==
+webpack-bundle-analyzer@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.5.1.tgz#84aabb1547178d842ebb4ccc7324084b6c3b0ea9"
+ integrity sha512-CDdaT3TTu4F9X3tcDq6PNJOiNGgREOM0WdN2vVAoUUn+M6NLB5kJ543HImCWbrDwOpbpGARSwU8r+u0Pl367kA==
dependencies:
acorn "^6.0.7"
acorn-walk "^6.1.1"
@@ -12864,85 +12819,77 @@ webpack-bundle-analyzer@^3.3.2:
express "^4.16.3"
filesize "^3.6.1"
gzip-size "^5.0.0"
- lodash "^4.17.10"
+ lodash "^4.17.15"
mkdirp "^0.5.1"
opener "^1.5.1"
ws "^6.0.0"
-webpack-cli@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.2.1.tgz#779c696c82482491f0803907508db2e276ed3b61"
- integrity sha512-jeJveHwz/vwpJ3B8bxEL5a/rVKIpRNJDsKggfKnxuYeohNDW4Y/wB9N/XHJA093qZyS0r6mYL+/crLsIol4WKA==
- dependencies:
- chalk "^2.4.1"
- cross-spawn "^6.0.5"
- enhanced-resolve "^4.1.0"
- findup-sync "^2.0.0"
- global-modules "^1.0.0"
- global-modules-path "^2.3.0"
- import-local "^2.0.0"
- interpret "^1.1.0"
- lightercollective "^0.1.0"
- loader-utils "^1.1.0"
- supports-color "^5.5.0"
- v8-compile-cache "^2.0.2"
- yargs "^12.0.4"
-
-webpack-dev-middleware@3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890"
- integrity sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==
- dependencies:
- memory-fs "~0.4.1"
- mime "^2.3.1"
- range-parser "^1.0.3"
- webpack-log "^2.0.0"
-
-webpack-dev-middleware@^3.7.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff"
- integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==
+webpack-cli@^3.3.9:
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.9.tgz#79c27e71f94b7fe324d594ab64a8e396b9daa91a"
+ integrity sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A==
+ dependencies:
+ chalk "2.4.2"
+ cross-spawn "6.0.5"
+ enhanced-resolve "4.1.0"
+ findup-sync "3.0.0"
+ global-modules "2.0.0"
+ import-local "2.0.0"
+ interpret "1.2.0"
+ loader-utils "1.2.3"
+ supports-color "6.1.0"
+ v8-compile-cache "2.0.3"
+ yargs "13.2.4"
+
+webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz#1167aea02afa034489869b8368fe9fed1aea7d09"
+ integrity sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==
dependencies:
memory-fs "^0.4.1"
- mime "^2.4.2"
+ mime "^2.4.4"
+ mkdirp "^0.5.1"
range-parser "^1.2.1"
webpack-log "^2.0.0"
-webpack-dev-server@^3.1.14:
- version "3.1.14"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz#60fb229b997fc5a0a1fc6237421030180959d469"
- integrity sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==
+webpack-dev-server@^3.8.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz#485b64c4aadc23f601e72114b40c1b1fea31d9f1"
+ integrity sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw==
dependencies:
ansi-html "0.0.7"
bonjour "^3.5.0"
- chokidar "^2.0.0"
- compression "^1.5.2"
- connect-history-api-fallback "^1.3.0"
- debug "^3.1.0"
- del "^3.0.0"
- express "^4.16.2"
- html-entities "^1.2.0"
- http-proxy-middleware "~0.18.0"
+ chokidar "^2.1.8"
+ compression "^1.7.4"
+ connect-history-api-fallback "^1.6.0"
+ debug "^4.1.1"
+ del "^4.1.1"
+ express "^4.17.1"
+ html-entities "^1.2.1"
+ http-proxy-middleware "^0.19.1"
import-local "^2.0.0"
- internal-ip "^3.0.1"
+ internal-ip "^4.3.0"
ip "^1.1.5"
- killable "^1.0.0"
- loglevel "^1.4.1"
- opn "^5.1.0"
- portfinder "^1.0.9"
+ is-absolute-url "^3.0.2"
+ killable "^1.0.1"
+ loglevel "^1.6.4"
+ opn "^5.5.0"
+ p-retry "^3.0.1"
+ portfinder "^1.0.24"
schema-utils "^1.0.0"
- selfsigned "^1.9.1"
- semver "^5.6.0"
- serve-index "^1.7.2"
+ selfsigned "^1.10.6"
+ semver "^6.3.0"
+ serve-index "^1.9.1"
sockjs "0.3.19"
- sockjs-client "1.3.0"
- spdy "^4.0.0"
- strip-ansi "^3.0.0"
- supports-color "^5.1.0"
+ sockjs-client "1.4.0"
+ spdy "^4.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^6.1.0"
url "^0.11.0"
- webpack-dev-middleware "3.4.0"
+ webpack-dev-middleware "^3.7.1"
webpack-log "^2.0.0"
- yargs "12.0.2"
+ ws "^6.2.1"
+ yargs "12.0.5"
webpack-log@^2.0.0:
version "2.0.0"
@@ -12952,48 +12899,47 @@ webpack-log@^2.0.0:
ansi-colors "^3.0.0"
uuid "^3.3.2"
-webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
- integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
+webpack-sources@^1.0.1, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
dependencies:
source-list-map "^2.0.0"
source-map "~0.6.1"
-webpack-stats-plugin@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.2.1.tgz#1f5bac13fc25d62cbb5fd0ff646757dc802b8595"
- integrity sha512-OYMZLpZrK/qLA79NE4kC4DCt85h/5ipvWJcsefKe9MMw0qU4/ck/IJg+4OmWA+5EfrZZpHXDq92IptfYDWVfkw==
-
-webpack@^4.29.0:
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.0.tgz#f2cfef83f7ae404ba889ff5d43efd285ca26e750"
- integrity sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==
- dependencies:
- "@webassemblyjs/ast" "1.7.11"
- "@webassemblyjs/helper-module-context" "1.7.11"
- "@webassemblyjs/wasm-edit" "1.7.11"
- "@webassemblyjs/wasm-parser" "1.7.11"
- acorn "^6.0.5"
- acorn-dynamic-import "^4.0.0"
- ajv "^6.1.0"
- ajv-keywords "^3.1.0"
- chrome-trace-event "^1.0.0"
+webpack-stats-plugin@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.3.0.tgz#6952f63feb9a5393a328d774fb3eccac78d2f51b"
+ integrity sha512-4a6mEl9HLtMukVjEPY8QPCSmtX2EDFJNhDTX5ZE2CLch2adKAZf53nUrpG6m7NattwigS0AodNcwNxlu9kMSDQ==
+
+webpack@^4.40.2:
+ version "4.40.2"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.40.2.tgz#d21433d250f900bf0facbabe8f50d585b2dc30a7"
+ integrity sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/wasm-edit" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ acorn "^6.2.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
enhanced-resolve "^4.1.0"
- eslint-scope "^4.0.0"
+ eslint-scope "^4.0.3"
json-parse-better-errors "^1.0.2"
- loader-runner "^2.3.0"
- loader-utils "^1.1.0"
- memory-fs "~0.4.1"
- micromatch "^3.1.8"
- mkdirp "~0.5.0"
- neo-async "^2.5.0"
- node-libs-browser "^2.0.0"
- schema-utils "^0.4.4"
- tapable "^1.1.0"
- terser-webpack-plugin "^1.1.0"
- watchpack "^1.5.0"
- webpack-sources "^1.3.0"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.1"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.1"
+ watchpack "^1.6.0"
+ webpack-sources "^1.4.1"
websocket-driver@>=0.5.1:
version "0.6.5"
@@ -13078,13 +13024,12 @@ wordwrap@~1.0.0:
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
-worker-farm@^1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
- integrity sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
dependencies:
- errno "^0.1.4"
- xtend "^4.0.1"
+ errno "~0.1.7"
worker-loader@^2.0.0:
version "2.0.0"
@@ -13102,6 +13047,15 @@ wrap-ansi@^2.0.0:
string-width "^1.0.1"
strip-ansi "^3.0.1"
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -13137,10 +13091,10 @@ ws@^5.2.0:
dependencies:
async-limiter "~1.0.0"
-ws@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-6.0.0.tgz#eaa494aded00ac4289d455bac8d84c7c651cef35"
- integrity sha512-c2UlYcAZp1VS8AORtpq6y4RJIkJ9dQz18W32SpR/qXGfLDZ2jU4y4wKvvZwqbi7U6gxFQTeE+urMbXU/tsDy4w==
+ws@^6.0.0, ws@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+ integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
dependencies:
async-limiter "~1.0.0"
@@ -13206,11 +13160,6 @@ xmlhttprequest@1:
resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=
-xregexp@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
- integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==
-
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
@@ -13241,7 +13190,7 @@ yallist@^3.0.0, yallist@^3.0.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
-yargs-parser@10.x, yargs-parser@^10.0.0, yargs-parser@^10.1.0:
+yargs-parser@10.x, yargs-parser@^10.0.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
@@ -13256,6 +13205,14 @@ yargs-parser@^11.1.1:
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@^13.1.0:
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
yargs-parser@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
@@ -13263,13 +13220,13 @@ yargs-parser@^5.0.0:
dependencies:
camelcase "^3.0.0"
-yargs@12.0.2:
- version "12.0.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc"
- integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==
+yargs@12.0.5, yargs@^12.0.2:
+ version "12.0.5"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+ integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
dependencies:
cliui "^4.0.0"
- decamelize "^2.0.0"
+ decamelize "^1.2.0"
find-up "^3.0.0"
get-caller-file "^1.0.1"
os-locale "^3.0.0"
@@ -13279,25 +13236,24 @@ yargs@12.0.2:
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1 || ^4.0.0"
- yargs-parser "^10.1.0"
+ yargs-parser "^11.1.1"
-yargs@^12.0.2, yargs@^12.0.4:
- version "12.0.5"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
- integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+yargs@13.2.4:
+ version "13.2.4"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
+ integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
dependencies:
- cliui "^4.0.0"
- decamelize "^1.2.0"
+ cliui "^5.0.0"
find-up "^3.0.0"
- get-caller-file "^1.0.1"
- os-locale "^3.0.0"
+ get-caller-file "^2.0.1"
+ os-locale "^3.1.0"
require-directory "^2.1.1"
- require-main-filename "^1.0.1"
+ require-main-filename "^2.0.0"
set-blocking "^2.0.0"
- string-width "^2.0.0"
+ string-width "^3.0.0"
which-module "^2.0.0"
- y18n "^3.2.1 || ^4.0.0"
- yargs-parser "^11.1.1"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.0"
yargs@^7.0.0:
version "7.1.0"